Upgrade bison from 2.3 to 2.7

See README.android for how the upgrade was done.

Bug: 8517572
Change-Id: I1e42ab59ff385130a7e488371c6058a13add244d
diff --git a/ABOUT-NLS b/ABOUT-NLS
index 47d5e39..4f50fb5 100644
--- a/ABOUT-NLS
+++ b/ABOUT-NLS
@@ -1,10 +1,11 @@
-Notes on the Free Translation Project
-*************************************
+1 Notes on the Free Translation Project
+***************************************
 
-   Free software is going international!  The Free Translation Project
-is a way to get maintainers of free software, translators, and users all
-together, so that will gradually become able to speak many languages.
-A few packages already provide translations for their messages.
+Free software is going international!  The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages.  A few packages already provide translations for their
+messages.
 
    If you found this `ABOUT-NLS' file inside a distribution, you may
 assume that the distributed package does use GNU `gettext' internally,
@@ -15,17 +16,17 @@
    Installers will find here some useful hints.  These notes also
 explain how users should proceed for getting the programs to use the
 available translations.  They tell how people wanting to contribute and
-work at translations should contact the appropriate team.
+work on translations can contact the appropriate team.
 
    When reporting bugs in the `intl/' directory or bugs which may be
 related to internationalization, you should tell about the version of
 `gettext' which is used.  The information can be found in the
 `intl/VERSION' file, in internationalized packages.
 
-Quick configuration advice
-==========================
+1.1 Quick configuration advice
+==============================
 
-   If you want to exploit the full power of internationalization, you
+If you want to exploit the full power of internationalization, you
 should configure it using
 
      ./configure --with-included-gettext
@@ -45,37 +46,37 @@
 you have installed a recent copy of the GNU gettext package with the
 included `libintl'.
 
-INSTALL Matters
-===============
+1.2 INSTALL Matters
+===================
 
-   Some packages are "localizable" when properly installed; the
-programs they contain can be made to speak your own native language.
-Most such packages use GNU `gettext'.  Other packages have their own
-ways to internationalization, predating GNU `gettext'.
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language.  Most such
+packages use GNU `gettext'.  Other packages have their own ways to
+internationalization, predating GNU `gettext'.
 
    By default, this package will be installed to allow translation of
 messages.  It will automatically detect whether the system already
-provides the GNU `gettext' functions.  If not, the GNU `gettext' own
-library will be used.  This library is wholly contained within this
-package, usually in the `intl/' subdirectory, so prior installation of
-the GNU `gettext' package is _not_ required.  Installers may use
-special options at configuration time for changing the default
-behaviour.  The commands:
+provides the GNU `gettext' functions.  If not, the included GNU
+`gettext' library will be used.  This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour.  The commands:
 
      ./configure --with-included-gettext
      ./configure --disable-nls
 
-will respectively bypass any pre-existing `gettext' to use the
+will, respectively, bypass any pre-existing `gettext' to use the
 internationalizing routines provided within this package, or else,
 _totally_ disable translation of messages.
 
    When you already have GNU `gettext' installed on your system and run
 configure without an option for your new package, `configure' will
 probably detect the previously built and installed `libintl.a' file and
-will decide to use this.  This might be not what is desirable.  You
-should use the more recent version of the GNU `gettext' library.  I.e.
-if the file `intl/VERSION' shows that the library which comes with this
-package is more recent, you should use
+will decide to use this.  This might not be desirable.  You should use
+the more recent version of the GNU `gettext' library.  I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
 
      ./configure --with-included-gettext
 
@@ -86,7 +87,7 @@
 emulation of `gettext' on top of `catgets' could not provide all the
 extensions of the GNU `gettext' library.
 
-   Internationalized packages have usually many `po/LL.po' files, where
+   Internationalized packages usually have many `po/LL.po' files, where
 LL gives an ISO 639 two-letter code identifying the language.  Unless
 translations have been forbidden at `configure' time by using the
 `--disable-nls' switch, all available translations are installed
@@ -95,13 +96,16 @@
 `LINGUAS' should then contain a space separated list of two-letter
 codes, stating which languages are allowed.
 
-Using This Package
-==================
+1.3 Using This Package
+======================
 
-   As a user, if your language has been installed for this package, you
+As a user, if your language has been installed for this package, you
 only have to set the `LANG' environment variable to the appropriate
-`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
-and `CC' is an ISO 3166 two-letter country code.  For example, let's
+`LL_CC' combination.  If you happen to have the `LC_ALL' or some other
+`LC_xxx' environment variables set, you should unset them before
+setting `LANG', otherwise the setting of `LANG' will not have the
+desired effect.  Here `LL' is an ISO 639 two-letter language code, and
+`CC' is an ISO 3166 two-letter country code.  For example, let's
 suppose that you speak German and live in Germany.  At the shell
 prompt, merely execute `setenv LANG de_DE' (in `csh'),
 `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
@@ -117,8 +121,8 @@
 language and `CC' denoting the country, is the one use on systems based
 on GNU libc.  On other systems, some variations of this scheme are
 used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
-locales supported by your system for your country by running the command
-`locale -a | grep '^LL''.
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
 
    Not all programs have translations for all languages.  By default, an
 English message is shown in place of a nonexistent translation.  If you
@@ -131,22 +135,28 @@
 read translations in German than English for when Swedish is not
 available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
 
+   Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003).  During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
    In the `LANGUAGE' environment variable, but not in the `LANG'
 environment variable, `LL_CC' combinations can be abbreviated as `LL'
 to denote the language's main dialect.  For example, `de' is equivalent
 to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
 (Portuguese as spoken in Portugal) in this context.
 
-Translating Teams
-=================
+1.4 Translating Teams
+=====================
 
-   For the Free Translation Project to be a success, we need interested
+For the Free Translation Project to be a success, we need interested
 people who like their own language and write it well, and who are also
 able to synergize with other translators speaking the same language.
 Each translation team has its own mailing list.  The up-to-date list of
 teams can be found at the Free Translation Project's homepage,
-`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
-area.
+`http://translationproject.org/', in the "Teams" area.
 
    If you'd like to volunteer to _work_ at translating messages, you
 should become a member of the translating team for your own language.
@@ -160,433 +170,1125 @@
 _actively_ in translations, or at solving translational difficulties,
 rather than merely lurking around.  If your team does not exist yet and
 you want to start one, or if you are unsure about what to do or how to
-get started, please write to `translation@iro.umontreal.ca' to reach the
-coordinator for all translator teams.
+get started, please write to `coordinator@translationproject.org' to
+reach the coordinator for all translator teams.
 
    The English team is special.  It works at improving and uniformizing
-the terminology in use.  Proven linguistic skill are praised more than
-programming skill, here.
+the terminology in use.  Proven linguistic skills are praised more than
+programming skills, here.
 
-Available Packages
-==================
+1.5 Available Packages
+======================
 
-   Languages are not equally supported in all packages.  The following
-matrix shows the current state of internationalization, as of May 2003.
+Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of May 2010.
 The matrix shows, in regard of each package, for which languages PO
 files have been submitted to translation coordination, with a
 translation percentage of at least 50%.
 
-     Ready PO files       am az be bg ca cs da de el en en_GB eo es
-                        +-------------------------------------------+
-     a2ps               |       []          [] [] []                |
-     aegis              |                      ()                   |
-     anubis             |                                           |
-     ap-utils           |                                           |
-     bash               |                      []             [] [] |
-     batchelor          |                                           |
-     bfd                |                   []                   [] |
-     binutils           |                   []                   [] |
-     bison              |                   [] []                [] |
-     bluez-pin          |                []                   []    |
-     clisp              |                                           |
-     clisp              |                      []    []          [] |
-     coreutils          |             []    [] []                [] |
-     cpio               |                   [] []                [] |
-     darkstat           |                   ()                   [] |
-     diffutils          |             [] [] [] [] []          [] [] |
-     e2fsprogs          |                []    []                   |
-     enscript           |             []    [] []        []         |
-     error              |             []    [] []        []      [] |
-     fetchmail          |             [] () [] [] []             [] |
-     fileutils          |                   [] []                [] |
-     findutils          |             []    [] [] []          [] [] |
-     flex               |             []    [] []                [] |
-     gas                |                                        [] |
-     gawk               |             []    [] []                [] |
-     gcal               |             []                            |
-     gcc                |                   []                   [] |
-     gettext            |       []    []    [] []                [] |
-     gettext-runtime    |       []    []    [] []                [] |
-     gettext-tools      |                      []                [] |
-     gimp-print         |                [] [] []        []      [] |
-     gliv               |                                           |
-     glunarclock        |    []             [] []                   |
-     gnucash            |                      ()        []         |
-     gnucash-glossary   |                   [] ()                [] |
-     gnupg              |             [] ()    [] []          [] [] |
-     gpe-calendar       |                      []                   |
-     gpe-conf           |                      []                   |
-     gpe-contacts       |                      []                   |
-     gpe-edit           |                                           |
-     gpe-login          |                      []                   |
-     gpe-ownerinfo      |                      []                   |
-     gpe-sketchbook     |                      []                   |
-     gpe-timesheet      |                                           |
-     gpe-today          |                      []                   |
-     gpe-todo           |                      []                   |
-     gphoto2            |                [] [] []                [] |
-     gprof              |                   []                   [] |
-     gpsdrive           |                      ()    ()          () |
-     grep               |          [] []       [] []             [] |
-     gretl              |                                        [] |
-     hello              |             []    [] [] []          [] [] |
-     id-utils           |                   [] []                   |
-     indent             |             []       []             [] [] |
-     jpilot             |                [] [] []                [] |
-     jwhois             |                                        [] |
-     kbd                |                [] [] [] []             [] |
-     ld                 |                   []                   [] |
-     libc               |             [] [] [] [] []             [] |
-     libgpewidget       |                      []                   |
-     libiconv           |             []    [] []             [] [] |
-     lifelines          |                   [] ()                   |
-     lilypond           |                   []                      |
-     lingoteach         |                                           |
-     lingoteach_lessons |                      ()                () |
-     lynx               |             [] [] [] []                   |
-     m4                 |                [] [] [] []                |
-     mailutils          |             []                         [] |
-     make               |                   [] []                [] |
-     man-db             |             [] () [] []                () |
-     mysecretdiary      |                   [] []                [] |
-     nano               |             [] () [] []                [] |
-     nano_1_0           |             [] () [] []                [] |
-     opcodes            |                   []                   [] |
-     parted             |             [] [] [] []                [] |
-     ptx                |             []    [] []             [] [] |
-     python             |                                           |
-     radius             |                                           |
-     recode             |       []          [] [] []          [] [] |
-     screem             |                                           |
-     sed                |             []    [] []             [] [] |
-     sh-utils           |                   [] []                [] |
-     sharutils          |             [] [] [] [] []             [] |
-     sketch             |                   [] ()                [] |
-     soundtracker       |                   [] []                [] |
-     sp                 |                      []                   |
-     tar                |                [] [] []                [] |
-     texinfo            |                [] [] []             []    |
-     textutils          |             []    [] []                [] |
-     tin                |                      ()        ()         |
-     util-linux         |             [] [] [] []                [] |
-     vorbis-tools       |                [] []                   [] |
-     wastesedge         |                      ()                   |
-     wdiff              |             []    [] []                [] |
-     wget               |          [] [] [] [] [] []             [] |
-     xchat              |             []          []             [] |
-     xpad               |                                           |
-                        +-------------------------------------------+
-                          am az be bg ca cs da de el en en_GB eo es
-                           0  1  4  2 31 17 54 60 14  1   4   12 56
-     
-                          et fa fi fr ga gl he hr hu id it ja ko
-                        +----------------------------------------+
-     a2ps               | []    [] []                   ()    () |
-     aegis              |                                        |
-     anubis             |          []                            |
-     ap-utils           |          []                            |
-     bash               |          []             []             |
-     batchelor          |             []                         |
-     bfd                |          []                      []    |
-     binutils           |          []                      []    |
-     bison              | []       []                [] []       |
-     bluez-pin          |          [] []          [] []          |
-     clisp              |                                        |
-     clisp              |          []                            |
-     coreutils          | []       []                   [] []    |
-     cpio               |          []    []       []          [] |
-     darkstat           |          () []          [] []          |
-     diffutils          |       [] []    [] []    [] []    []    |
-     e2fsprogs          |                                        |
-     enscript           |          []          []                |
-     error              |       [] [] []          []             |
-     fetchmail          |                                  []    |
-     fileutils          | []       []             []    [] []    |
-     findutils          | []    [] [] [] []    [] [] [] [] [] [] |
-     flex               |          []                         [] |
-     gas                |          []                            |
-     gawk               |          []       []                   |
-     gcal               |          []                            |
-     gcc                |          []                            |
-     gettext            |          []                      [] [] |
-     gettext-runtime    |          []                []    [] [] |
-     gettext-tools      |                                  []    |
-     gimp-print         |          []                      []    |
-     gliv               |          ()                            |
-     glunarclock        |             [] []       []       []    |
-     gnucash            |                               []       |
-     gnucash-glossary   |                               []       |
-     gnupg              | []    [] []    []          [] [] []    |
-     gpe-calendar       |                            []          |
-     gpe-conf           |                                        |
-     gpe-contacts       |          []                            |
-     gpe-edit           |          []                []          |
-     gpe-login          |          []                            |
-     gpe-ownerinfo      |          []             [] []          |
-     gpe-sketchbook     |          []                            |
-     gpe-timesheet      |          [] []             []          |
-     gpe-today          |          [] []                         |
-     gpe-todo           |          []                []          |
-     gphoto2            |          []             []       []    |
-     gprof              |          []                []          |
-     gpsdrive           |          ()             []    () ()    |
-     grep               | []    [] [] [] [] [] [] [] [] [] []    |
-     gretl              |          []                            |
-     hello              | [] [] [] [] [] [] [] [] [] [] [] [] [] |
-     id-utils           |          []             [] []          |
-     indent             | []    [] []    []       [] [] [] []    |
-     jpilot             |          []                      ()    |
-     jwhois             |          []             [] [] []       |
-     kbd                |          []                            |
-     ld                 |          []                            |
-     libc               |       [] []    []       []       [] [] |
-     libgpewidget       |          [] []             []          |
-     libiconv           |       [] [] [] []    [] [] [] []       |
-     lifelines          |          ()                            |
-     lilypond           |          []                            |
-     lingoteach         |          []                []          |
-     lingoteach_lessons |                                        |
-     lynx               | []                      []    [] []    |
-     m4                 |          []    []          []    []    |
-     mailutils          |                                        |
-     make               |          []    [] [] []          [] [] |
-     man-db             |          []                   () ()    |
-     mysecretdiary      |          []                []          |
-     nano               |          []    []          [] []       |
-     nano_1_0           |          []    []          [] []       |
-     opcodes            |          []                []          |
-     parted             |          []    []                []    |
-     ptx                | []    [] [] [] []       [] []          |
-     python             |                                        |
-     radius             |                                        |
-     recode             |          []    [] []    [] [] []       |
-     screem             |                                        |
-     sed                | []       [] [] []       [] [] [] []    |
-     sh-utils           | []    [] []             []    [] []    |
-     sharutils          | []       []    []       []       []    |
-     sketch             |          []                            |
-     soundtracker       |          []    []    []                |
-     sp                 |          []                      ()    |
-     tar                | []    [] []    []    [] [] [] [] []    |
-     texinfo            |          []       [] []          []    |
-     textutils          |          []    []       []       [] [] |
-     tin                | []       ()                            |
-     util-linux         | []    [] []             []    () []    |
-     vorbis-tools       |          []                            |
-     wastesedge         |          ()                            |
-     wdiff              | []       []    []       [] []          |
-     wget               | []    [] []    [] [] [] []       []    |
-     xchat              | []       []                      []    |
-     xpad               |                                        |
-                        +----------------------------------------+
-                          et fa fi fr ga gl he hr hu id it ja ko
-                          20  1 15 73 14 24  8 10 30 31 19 31  9
-     
-                          lg lt lv ms nb nl nn no pl pt pt_BR ro
-                        +----------------------------------------+
-     a2ps               |          []    []    () () ()  []   [] |
-     aegis              |                ()                      |
-     anubis             |          []                         [] |
-     ap-utils           |                         ()             |
-     bash               |                                []      |
-     batchelor          |                                        |
-     bfd                |                                        |
-     binutils           |                                        |
-     bison              |          []    []              []   [] |
-     bluez-pin          |                                     [] |
-     clisp              |                                        |
-     clisp              |                []                      |
-     coreutils          |                         []             |
-     cpio               |                []       []     []      |
-     darkstat           |          []    []              []   [] |
-     diffutils          |          []             []     []      |
-     e2fsprogs          |                                        |
-     enscript           |                []              []      |
-     error              |                []              []      |
-     fetchmail          |                         ()     ()      |
-     fileutils          |                         []             |
-     findutils          |                []       []     []   [] |
-     flex               |                                []      |
-     gas                |                                        |
-     gawk               |                                []      |
-     gcal               |                                        |
-     gcc                |                                        |
-     gettext            |                         []             |
-     gettext-runtime    |                         []             |
-     gettext-tools      |                                        |
-     gimp-print         |                []                      |
-     gliv               |                                []      |
-     glunarclock        |          []                            |
-     gnucash            |                                        |
-     gnucash-glossary   |                []          []          |
-     gnupg              |                                        |
-     gpe-calendar       |                            []       [] |
-     gpe-conf           |                            []       [] |
-     gpe-contacts       |                            []          |
-     gpe-edit           |                            []       [] |
-     gpe-login          |                            []       [] |
-     gpe-ownerinfo      |                            []       [] |
-     gpe-sketchbook     |                            []       [] |
-     gpe-timesheet      |                            []       [] |
-     gpe-today          |                            []       [] |
-     gpe-todo           |                            []       [] |
-     gphoto2            |                                        |
-     gprof              |                                []      |
-     gpsdrive           |                ()    ()        ()      |
-     grep               |                         [] []  []   [] |
-     gretl              |                                        |
-     hello              |       [] [] [] [] [] [] []     []   [] |
-     id-utils           |                []              []   [] |
-     indent             |                []              []   [] |
-     jpilot             |                ()    ()                |
-     jwhois             |                []              []   [] |
-     kbd                |                                        |
-     ld                 |                                        |
-     libc               |             []       [] []     []      |
-     libgpewidget       |                            []       [] |
-     libiconv           |                                []   [] |
-     lifelines          |                                        |
-     lilypond           |                []                      |
-     lingoteach         |                                        |
-     lingoteach_lessons |                                        |
-     lynx               |                []              []      |
-     m4                 |                []       []     []   [] |
-     mailutils          |                                        |
-     make               |                []              []      |
-     man-db             |                                []      |
-     mysecretdiary      |                                []      |
-     nano               |          []    []       []          [] |
-     nano_1_0           |          [] []    []    []             |
-     opcodes            |                []              []   [] |
-     parted             |                   []       []  []      |
-     ptx                |             [] []    [] [] []  []   [] |
-     python             |                                        |
-     radius             |                                        |
-     recode             |                         []     []   [] |
-     screem             |                                        |
-     sed                |                                []   [] |
-     sh-utils           |             []                         |
-     sharutils          |                []                      |
-     sketch             |                                []      |
-     soundtracker       |                                        |
-     sp                 |                                        |
-     tar                |          [] []       [] []     []   [] |
-     texinfo            |                                     [] |
-     textutils          |             []                         |
-     tin                |                                        |
-     util-linux         |                []              []      |
-     vorbis-tools       |                []                   [] |
-     wastesedge         |                                        |
-     wdiff              |          []             []     []   [] |
-     wget               |                []       []          [] |
-     xchat              |       []       []                      |
-     xpad               |                                     [] |
-                        +----------------------------------------+
-                          lg lt lv ms nb nl nn no pl pt pt_BR ro
-                           0  0  2 11  7 26  3  4 18 15  34   34
-     
-                          ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
-                        +-------------------------------------------+
-     a2ps               | []    []    []    [] []                   | 16
-     aegis              | ()                                        |  0
-     anubis             |                   [] []                   |  5
-     ap-utils           |                      ()                   |  1
-     bash               | []                                        |  7
-     batchelor          |                                           |  1
-     bfd                |             []    []           []         |  7
-     binutils           |             []    []           []         |  7
-     bison              | []          []                            | 13
-     bluez-pin          |                                           |  7
-     clisp              |                                           |  0
-     clisp              |                                           |  5
-     coreutils          | []    []    []    []                 []   | 14
-     cpio               | []          []                 []         | 13
-     darkstat           |             []                 ()    ()   |  9
-     diffutils          | []          []    []                 []   | 21
-     e2fsprogs          |                   []                      |  3
-     enscript           | []          []    []                      | 11
-     error              |    []             []                 []   | 14
-     fetchmail          |                   []                      |  7
-     fileutils          | []    []    []    []           []    []   | 15
-     findutils          | [] [] []    []    []           []         | 27
-     flex               | []          []    []                      | 10
-     gas                |                   []                      |  3
-     gawk               |             []    []                      |  9
-     gcal               |             []    []                      |  4
-     gcc                |                   []                      |  4
-     gettext            | [] [] []    []    []                 []   | 15
-     gettext-runtime    | [] [] []    []    []                 []   | 16
-     gettext-tools      |    [] []                                  |  5
-     gimp-print         |    []       []                            | 10
-     gliv               |                                           |  1
-     glunarclock        | []          []             []             | 11
-     gnucash            |    []                                []   |  4
-     gnucash-glossary   |    []       []                       []   |  8
-     gnupg              |    []       []    []                 []   | 16
-     gpe-calendar       |                                      []   |  5
-     gpe-conf           |                                           |  3
-     gpe-contacts       |                                      []   |  4
-     gpe-edit           |                                      []   |  5
-     gpe-login          |                                      []   |  5
-     gpe-ownerinfo      |                                      []   |  7
-     gpe-sketchbook     |                                      []   |  5
-     gpe-timesheet      |                                      []   |  6
-     gpe-today          |                                      []   |  6
-     gpe-todo           |                                      []   |  6
-     gphoto2            |             []                 []         |  9
-     gprof              |             []    []                      |  7
-     gpsdrive           |    []       []                            |  3
-     grep               | []    []          [] []                   | 24
-     gretl              |                                           |  2
-     hello              | [] []       []    [] []                   | 33
-     id-utils           | []          []    []                      | 11
-     indent             | [] []       []    []                      | 19
-     jpilot             |             []    []    []     []    []   | 10
-     jwhois             | ()          ()    []                 []   | 10
-     kbd                |             []    []                      |  8
-     ld                 |             []    []                      |  5
-     libc               |    []       []    []           []         | 20
-     libgpewidget       |                                           |  6
-     libiconv           | [] [] []    []    [] []                   | 21
-     lifelines          |             []                            |  2
-     lilypond           |             []                            |  4
-     lingoteach         |                                           |  2
-     lingoteach_lessons |                                ()         |  0
-     lynx               | []          []    [] []                   | 14
-     m4                 | []          []                 []         | 15
-     mailutils          |                                           |  2
-     make               | []          []    []           []         | 15
-     man-db             |             []                            |  6
-     mysecretdiary      |             []    []                      |  8
-     nano               | []          []       []                   | 15
-     nano_1_0           | []          []       []                   | 15
-     opcodes            |             []    []                      |  9
-     parted             |             []    []                      | 13
-     ptx                | []          []    []                      | 22
-     python             |                                           |  0
-     radius             |                                           |  0
-     recode             | []    []    []    []                      | 19
-     screem             |             []                            |  1
-     sed                |    [] []    []    [] []                   | 20
-     sh-utils           | []    []          []                      | 13
-     sharutils          | []          []    []                 []   | 16
-     sketch             |             []                            |  5
-     soundtracker       |             []                            |  7
-     sp                 |                   []                      |  3
-     tar                |    [] []    []    []           []         | 24
-     texinfo            | []          []    []           []         | 13
-     textutils          | []    []    []    []                 []   | 15
-     tin                |                                           |  1
-     util-linux         |             []    []                      | 14
-     vorbis-tools       | []                                        |  7
-     wastesedge         |                                           |  0
-     wdiff              | [] []       []    []                      | 17
-     wget               | [] [] []    []    [] []              []   | 25
-     xchat              |    [] []    []                            | 11
-     xpad               |                                           |  1
-                        +-------------------------------------------+
-       50 teams           ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
-       97 domains         32 19 16  0 56  0 48 10  1  1  12    23    913
+     Ready PO files       af am ar as ast az be be@latin bg bn_IN bs ca crh
+                        +---------------------------------------------------+
+     a2ps               |                    []                      []     |
+     aegis              |                                                   |
+     ant-phone          |                                                   |
+     anubis             |                                                   |
+     aspell             |             []                             []     |
+     bash               |                                                   |
+     bfd                |                                                   |
+     bibshelf           |             []                                    |
+     binutils           |                                                   |
+     bison              |                                                   |
+     bison-runtime      |             []                                    |
+     bluez-pin          | []          []                                    |
+     bombono-dvd        |                                                   |
+     buzztard           |                                                   |
+     cflow              |                                                   |
+     clisp              |                                                   |
+     coreutils          |                                []          []     |
+     cpio               |                                                   |
+     cppi               |                                                   |
+     cpplib             |                                            []     |
+     cryptsetup         |                                                   |
+     dfarc              |                                                   |
+     dialog             |                          []                []     |
+     dico               |                                                   |
+     diffutils          |                                            []     |
+     dink               |                                                   |
+     doodle             |                                                   |
+     e2fsprogs          |                                            []     |
+     enscript           |                                            []     |
+     exif               |                                                   |
+     fetchmail          |                                            []     |
+     findutils          |                                []                 |
+     flex               |                                            []     |
+     freedink           |                                                   |
+     gas                |                                                   |
+     gawk               |             []                             []     |
+     gcal               |                                            []     |
+     gcc                |                                                   |
+     gettext-examples   | []          []                 []          []     |
+     gettext-runtime    |                    []          []          []     |
+     gettext-tools      |                                []          []     |
+     gip                |                                []                 |
+     gjay               |                                                   |
+     gliv               |                                []                 |
+     glunarclock        |             []                 []                 |
+     gnubiff            |                                                   |
+     gnucash            |                                            []     |
+     gnuedu             |                                                   |
+     gnulib             |                                                   |
+     gnunet             |                                                   |
+     gnunet-gtk         |                                                   |
+     gnutls             |                                                   |
+     gold               |                                                   |
+     gpe-aerial         |                                                   |
+     gpe-beam           |                                                   |
+     gpe-bluetooth      |                                                   |
+     gpe-calendar       |                                                   |
+     gpe-clock          |             []                                    |
+     gpe-conf           |                                                   |
+     gpe-contacts       |                                                   |
+     gpe-edit           |                                                   |
+     gpe-filemanager    |                                                   |
+     gpe-go             |                                                   |
+     gpe-login          |                                                   |
+     gpe-ownerinfo      |             []                                    |
+     gpe-package        |                                                   |
+     gpe-sketchbook     |                                                   |
+     gpe-su             |             []                                    |
+     gpe-taskmanager    |             []                                    |
+     gpe-timesheet      |             []                                    |
+     gpe-today          |             []                                    |
+     gpe-todo           |                                                   |
+     gphoto2            |                                                   |
+     gprof              |                                []                 |
+     gpsdrive           |                                                   |
+     gramadoir          |                                                   |
+     grep               |                                                   |
+     grub               |             []                             []     |
+     gsasl              |                                                   |
+     gss                |                                                   |
+     gst-plugins-bad    |                                []                 |
+     gst-plugins-base   |                                []                 |
+     gst-plugins-good   |                                []                 |
+     gst-plugins-ugly   |                                []                 |
+     gstreamer          | []                             []          []     |
+     gtick              |                                                   |
+     gtkam              |                    []                             |
+     gtkorphan          |                                []                 |
+     gtkspell           | []          []     []                             |
+     gutenprint         |                                                   |
+     hello              |                                []                 |
+     help2man           |                                                   |
+     hylafax            |                                                   |
+     idutils            |                                                   |
+     indent             |                                []          []     |
+     iso_15924          |                                                   |
+     iso_3166           | []       []        []          []  []   [] [] []  |
+     iso_3166_2         |                                                   |
+     iso_4217           |                                                   |
+     iso_639            |          [] []     []              []         []  |
+     iso_639_3          |                                               []  |
+     jwhois             |                                                   |
+     kbd                |                                                   |
+     keytouch           |                                            []     |
+     keytouch-editor    |                                                   |
+     keytouch-keyboa... |                                            []     |
+     klavaro            |       []                                          |
+     latrine            |                                                   |
+     ld                 |                                []                 |
+     leafpad            |                                []          []     |
+     libc               |                                []          []     |
+     libexif            |                    ()                             |
+     libextractor       |                                                   |
+     libgnutls          |                                                   |
+     libgpewidget       |                                                   |
+     libgpg-error       |                                                   |
+     libgphoto2         |                                                   |
+     libgphoto2_port    |                                                   |
+     libgsasl           |                                                   |
+     libiconv           |                                []                 |
+     libidn             |                                                   |
+     lifelines          |                                                   |
+     liferea            |                          []                []     |
+     lilypond           |                                                   |
+     linkdr             |       []                                          |
+     lordsawar          |                                                   |
+     lprng              |                                                   |
+     lynx               |                                            []     |
+     m4                 |                                                   |
+     mailfromd          |                                                   |
+     mailutils          |                                                   |
+     make               |                                                   |
+     man-db             |                                                   |
+     man-db-manpages    |                                                   |
+     minicom            |                                                   |
+     mkisofs            |                                                   |
+     myserver           |                                                   |
+     nano               |                                []          []     |
+     opcodes            |                                                   |
+     parted             |                                                   |
+     pies               |                                                   |
+     popt               |                                                   |
+     psmisc             |                                                   |
+     pspp               |                                            []     |
+     pwdutils           |                                                   |
+     radius             |                                            []     |
+     recode             |                    []                      []     |
+     rosegarden         |                                                   |
+     rpm                |                                                   |
+     rush               |                                                   |
+     sarg               |                                                   |
+     screem             |                                                   |
+     scrollkeeper       |                 [] []                      []     |
+     sed                |             []                             []     |
+     sharutils          |                                []          []     |
+     shishi             |                                                   |
+     skencil            |                                                   |
+     solfege            |                                                   |
+     solfege-manual     |                                                   |
+     soundtracker       |                                                   |
+     sp                 |                                                   |
+     sysstat            |                                                   |
+     tar                |                                []                 |
+     texinfo            |                                                   |
+     tin                |                                                   |
+     unicode-han-tra... |                                                   |
+     unicode-transla... |                                                   |
+     util-linux-ng      |                                            []     |
+     vice               |                                                   |
+     vmm                |                                                   |
+     vorbis-tools       |                                                   |
+     wastesedge         |                                                   |
+     wdiff              |                                                   |
+     wget               |                    []                      []     |
+     wyslij-po          |                                                   |
+     xchat              |             []     []          []          []     |
+     xdg-user-dirs      | []       [] []     []    []    []  []      [] []  |
+     xkeyboard-config   |                                []          [] []  |
+                        +---------------------------------------------------+
+                          af am ar as ast az be be@latin bg bn_IN bs ca crh
+                           6  0  2  3 19   1 11     3    28   3    1 38  5
+
+                          cs da  de  el en en_GB en_ZA eo es et eu fa fi
+                        +-------------------------------------------------+
+     a2ps               | [] []  []  []     []            [] []       []  |
+     aegis              |    []  []                       []              |
+     ant-phone          |    []  ()                                       |
+     anubis             |    []  []                                   []  |
+     aspell             | [] []  []         []            []              |
+     bash               | []                           [] []          []  |
+     bfd                |                                 []          []  |
+     bibshelf           |    []  []                       []          []  |
+     binutils           |                                 []          []  |
+     bison              |        []  []                               []  |
+     bison-runtime      |    []  []  []                      []       []  |
+     bluez-pin          | [] []  []  []                [] []          []  |
+     bombono-dvd        |    []                                       []  |
+     buzztard           | [] []  []                                       |
+     cflow              |    []  []                                   []  |
+     clisp              |    []  []     []                []              |
+     coreutils          | [] []  []                          []           |
+     cpio               |                                             []  |
+     cppi               |                                             []  |
+     cpplib             |    []  []                       []              |
+     cryptsetup         |        []                                       |
+     dfarc              |    []  []                       []          []  |
+     dialog             |    []  []                    [] []    []        |
+     dico               |                                                 |
+     diffutils          | [] []  []  []                [] []          []  |
+     dink               |    []  []                       []              |
+     doodle             |        []                                       |
+     e2fsprogs          | []     []                       []              |
+     enscript           |    []  []         []                            |
+     exif               | () []  []                                   []  |
+     fetchmail          | [] []  ()  []     []            []              |
+     findutils          | [] []  []                                   []  |
+     flex               |        []                       []          []  |
+     freedink           |    []  []                       []          []  |
+     gas                |                                 []              |
+     gawk               |    []  []                       []              |
+     gcal               |                                 []              |
+     gcc                |        []                       []              |
+     gettext-examples   |        []  []                [] []          []  |
+     gettext-runtime    |    []  []                    [] []          []  |
+     gettext-tools      |        []                       []    []        |
+     gip                |    []  []                       []    []    []  |
+     gjay               |        []                                   []  |
+     gliv               | [] []  []                                   []  |
+     glunarclock        |    []  []                                   []  |
+     gnubiff            |        ()                                       |
+     gnucash            | []     ()  ()     ()            ()          ()  |
+     gnuedu             |    []                           []              |
+     gnulib             |        []                       []          []  |
+     gnunet             |                                                 |
+     gnunet-gtk         |    []                                           |
+     gnutls             | []     []                                       |
+     gold               |                                 []          []  |
+     gpe-aerial         | [] []  []                       []          []  |
+     gpe-beam           | [] []  []                       []          []  |
+     gpe-bluetooth      |    []  []                                   []  |
+     gpe-calendar       |    []                                       []  |
+     gpe-clock          | [] []  []                       []          []  |
+     gpe-conf           | [] []  []                                   []  |
+     gpe-contacts       |    []  []                       []          []  |
+     gpe-edit           |    []  []                                   []  |
+     gpe-filemanager    |    []  []                       []          []  |
+     gpe-go             | [] []  []                       []          []  |
+     gpe-login          |    []  []                                   []  |
+     gpe-ownerinfo      | [] []  []                       []          []  |
+     gpe-package        |    []  []                       []          []  |
+     gpe-sketchbook     | [] []  []                       []          []  |
+     gpe-su             | [] []  []                       []          []  |
+     gpe-taskmanager    | [] []  []                       []          []  |
+     gpe-timesheet      | [] []  []                       []          []  |
+     gpe-today          | [] []  []                       []          []  |
+     gpe-todo           |    []  []                       []          []  |
+     gphoto2            | [] []  ()         []            []    []    []  |
+     gprof              |    []  []                       []          []  |
+     gpsdrive           |    []                           [] []           |
+     gramadoir          |    []  []                    []                 |
+     grep               | []                                          []  |
+     grub               |    []  []                                   []  |
+     gsasl              |        []                                   []  |
+     gss                |                                             []  |
+     gst-plugins-bad    | [] []  []                       []    []    []  |
+     gst-plugins-base   | [] []  []                       []    []    []  |
+     gst-plugins-good   | [] []  []  []                   []    []    []  |
+     gst-plugins-ugly   | [] []  []  []                   []    []    []  |
+     gstreamer          | [] []  []                       []    []    []  |
+     gtick              |    []  ()                    []             []  |
+     gtkam              | [] []  ()                    [] []              |
+     gtkorphan          | [] []  []                    []                 |
+     gtkspell           | [] []  []  []                [] []    []    []  |
+     gutenprint         |    []  []         []                        []  |
+     hello              |    []  []                    [] []          []  |
+     help2man           |        []                                   []  |
+     hylafax            |        []                       []              |
+     idutils            |    []  []                                   []  |
+     indent             | [] []  []                    [] [] [] []    []  |
+     iso_15924          |    []      ()                [] []          []  |
+     iso_3166           | [] []  []  ()                [] [] [] ()    []  |
+     iso_3166_2         |            ()                                   |
+     iso_4217           | [] []  []  ()                   [] []       []  |
+     iso_639            | [] []  []  ()                [] []          []  |
+     iso_639_3          |                                                 |
+     jwhois             |                                 []          []  |
+     kbd                | [] []  []  []                   []              |
+     keytouch           |    []  []                                   []  |
+     keytouch-editor    |    []  []                                   []  |
+     keytouch-keyboa... |    []                                       []  |
+     klavaro            | [] []  []                    []                 |
+     latrine            |    []  ()                                   []  |
+     ld                 |    []                           []          []  |
+     leafpad            | [] []  []  []                   []    []    []  |
+     libc               | [] []  []                       []          []  |
+     libexif            |    []  []         ()                            |
+     libextractor       |                                                 |
+     libgnutls          | []                                              |
+     libgpewidget       |    []  []                                   []  |
+     libgpg-error       | []     []                                       |
+     libgphoto2         |    []  ()                                       |
+     libgphoto2_port    |    []  ()                             []        |
+     libgsasl           |                                             []  |
+     libiconv           | [] []  []                    []    []       []  |
+     libidn             | []     []                    []             []  |
+     lifelines          |    []  ()                                       |
+     liferea            | []     []  []                   []    []        |
+     lilypond           | []     []                       []          []  |
+     linkdr             |    []  []                       []          []  |
+     lordsawar          |    []                                           |
+     lprng              |                                                 |
+     lynx               | [] []  []                          []           |
+     m4                 | [] []  []  []                               []  |
+     mailfromd          |                                                 |
+     mailutils          |                                 []              |
+     make               |    []  []                       []          []  |
+     man-db             |                                                 |
+     man-db-manpages    |                                                 |
+     minicom            | [] []  []                       []          []  |
+     mkisofs            |                                             []  |
+     myserver           |                                                 |
+     nano               |        []                       []    []    []  |
+     opcodes            |        []                       []          []  |
+     parted             | []     []                                       |
+     pies               |                                                 |
+     popt               | [] []  []                    [] []          []  |
+     psmisc             | []     []                             []    []  |
+     pspp               |                                 []              |
+     pwdutils           |    []                                           |
+     radius             |                                 []              |
+     recode             | [] []  []  []                [] []          []  |
+     rosegarden         | ()     ()                       ()          ()  |
+     rpm                |    []  []                       []              |
+     rush               |                                                 |
+     sarg               |                                                 |
+     screem             |                                                 |
+     scrollkeeper       | [] []  []         []            []          []  |
+     sed                | []     []  []                [] [] []       []  |
+     sharutils          |    []  []                       [] []       []  |
+     shishi             |                                                 |
+     skencil            |    []  ()                       []              |
+     solfege            |        []                    []    []       []  |
+     solfege-manual     |                              []    []           |
+     soundtracker       |    []  []                       []              |
+     sp                 |        []                                       |
+     sysstat            |    []  []                             []    []  |
+     tar                | []     []                          [] []    []  |
+     texinfo            |        []                    [] []              |
+     tin                |        []                          []           |
+     unicode-han-tra... |                                                 |
+     unicode-transla... |                                                 |
+     util-linux-ng      | [] []  []                       []          []  |
+     vice               |    ()  ()                                       |
+     vmm                |        []                                       |
+     vorbis-tools       | []                           []                 |
+     wastesedge         |    []                                           |
+     wdiff              |        []                       []          []  |
+     wget               | []     []                          []       []  |
+     wyslij-po          |                                             []  |
+     xchat              | []     []  []                   [] []       []  |
+     xdg-user-dirs      | [] []  []  []                [] [] [] []    []  |
+     xkeyboard-config   | [] []  []                    [] []          []  |
+                        +-------------------------------------------------+
+                          cs da  de  el en en_GB en_ZA eo es et eu fa fi
+                          64 105 117 18  1   8     0   28 89 18 19  0 104
+
+                          fr  ga gl gu he hi hr hu hy id  is it ja ka kn
+                        +------------------------------------------------+
+     a2ps               | []                          []        []       |
+     aegis              | []                                 []          |
+     ant-phone          | []                                 []          |
+     anubis             | []                          []     []          |
+     aspell             | []  []                      []     []          |
+     bash               | []                          []        []       |
+     bfd                | []                          []                 |
+     bibshelf           | []  []                      []     []          |
+     binutils           | []                          []                 |
+     bison              | []  []                      []                 |
+     bison-runtime      | []  []                      []     [] []       |
+     bluez-pin          | []  []                [] [] []  []    []       |
+     bombono-dvd        |                                                |
+     buzztard           |                             []                 |
+     cflow              |     []                      []                 |
+     clisp              | []                                             |
+     coreutils          | []  []                []    []     []          |
+     cpio               | []  []                      []                 |
+     cppi               | []                                             |
+     cpplib             | []                          []                 |
+     cryptsetup         | []                          []     []          |
+     dfarc              | []                                 []          |
+     dialog             | []  [] []                   []  [] [] []       |
+     dico               |                                                |
+     diffutils          | []  [] []    []       []    []     [] []       |
+     dink               | []                                             |
+     doodle             |     []                             []          |
+     e2fsprogs          | []                          []                 |
+     enscript           | []  []             []       []                 |
+     exif               | []                          []  [] [] []       |
+     fetchmail          | []                          []     [] []       |
+     findutils          | []  []                []    []     []          |
+     flex               | []  []                                         |
+     freedink           | []                          []                 |
+     gas                | []                          []                 |
+     gawk               | []  []       []             []     () []       |
+     gcal               | []                                             |
+     gcc                |                             []                 |
+     gettext-examples   | []  []                []    []     [] []       |
+     gettext-runtime    | []  []                      []     [] []       |
+     gettext-tools      | []                          []     [] []       |
+     gip                | []  [] []                   []        []       |
+     gjay               |                                                |
+     gliv               | ()                                             |
+     glunarclock        |     []                []    []                 |
+     gnubiff            | ()                          []     ()          |
+     gnucash            | ()           ()       ()           () []       |
+     gnuedu             | []                                 []          |
+     gnulib             | []  []                []           [] []       |
+     gnunet             |                                                |
+     gnunet-gtk         | []                                             |
+     gnutls             | []                                 []          |
+     gold               |                             []                 |
+     gpe-aerial         | []                          []                 |
+     gpe-beam           | []                          []        []       |
+     gpe-bluetooth      |                             []     [] []       |
+     gpe-calendar       |                                       []       |
+     gpe-clock          | []                    []    []        []       |
+     gpe-conf           | []                          []        []       |
+     gpe-contacts       | []                          []        []       |
+     gpe-edit           |                             []        []       |
+     gpe-filemanager    |                       []    []        []       |
+     gpe-go             | []                    []    []        []       |
+     gpe-login          |                             []        []       |
+     gpe-ownerinfo      | []                    []    []        []       |
+     gpe-package        |                             []        []       |
+     gpe-sketchbook     | []                          []        []       |
+     gpe-su             | []     []             []    []        []       |
+     gpe-taskmanager    | []                    []    []        []       |
+     gpe-timesheet      | []  []                      []        []       |
+     gpe-today          | []  [] []             []    []        []       |
+     gpe-todo           |                             []        []       |
+     gphoto2            | []                    []    []     [] []       |
+     gprof              | []  []                      []                 |
+     gpsdrive           |        []                   []     []          |
+     gramadoir          | []  []                      []                 |
+     grep               |                                    []          |
+     grub               |                       []    []     []          |
+     gsasl              | []  []                      []     []          |
+     gss                | []  []                      []     []          |
+     gst-plugins-bad    | []                    []    []     []          |
+     gst-plugins-base   | []                    []    []     [] []       |
+     gst-plugins-good   | []                    []    []     [] []       |
+     gst-plugins-ugly   | []                    []    []     [] []       |
+     gstreamer          | []                    []    []     []          |
+     gtick              | []  []                      []     []          |
+     gtkam              | []                    []    []     [] []       |
+     gtkorphan          | []                          []     []          |
+     gtkspell           | []  [] []             [] [] []     [] []       |
+     gutenprint         | []                    []           []          |
+     hello              |     []                      []                 |
+     help2man           | []                                             |
+     hylafax            |                             []                 |
+     idutils            | []  []                []    []     []          |
+     indent             | []  [] []             []    []     [] []       |
+     iso_15924          | ()                          []     []          |
+     iso_3166           | ()  [] [] [] [] [] [] []    []     [] []       |
+     iso_3166_2         | ()                    []    []     []          |
+     iso_4217           | ()                    []    []     [] []       |
+     iso_639            | ()  []    []          []    []     [] []    [] |
+     iso_639_3          | ()                                 []       [] |
+     jwhois             | []                    []    []     []          |
+     kbd                | []                          []                 |
+     keytouch           | []  []                []    []     []          |
+     keytouch-editor    |     []                []    []     []          |
+     keytouch-keyboa... |     []                []    []     []          |
+     klavaro            |        []             []                       |
+     latrine            |                             []     []          |
+     ld                 | []  []                      []                 |
+     leafpad            | []  []       []       []    []     [] ()       |
+     libc               | []     []                   []        []       |
+     libexif            |                                                |
+     libextractor       |                                                |
+     libgnutls          | []                                 []          |
+     libgpewidget       |     []                      []        []       |
+     libgpg-error       | []                                 []          |
+     libgphoto2         | []                                 [] []       |
+     libgphoto2_port    | []                                 [] []       |
+     libgsasl           | []  []                      []     []          |
+     libiconv           | []  []                      []     [] []       |
+     libidn             | []                          []     []          |
+     lifelines          | ()                                             |
+     liferea            | []                    []           [] []       |
+     lilypond           | []                                             |
+     linkdr             |              []    [] []           []          |
+     lordsawar          |                                                |
+     lprng              |                             []                 |
+     lynx               | []                    []    []     [] []       |
+     m4                 | []  [] []                   []        []       |
+     mailfromd          |                                                |
+     mailutils          | []                          []                 |
+     make               | []  [] []    []    []       []     [] []       |
+     man-db             |                             []     []          |
+     man-db-manpages    |                             []                 |
+     minicom            | []                    []    []        []       |
+     mkisofs            | []                          []     []          |
+     myserver           |                                                |
+     nano               | []  [] []             []           []          |
+     opcodes            | []  []                      []                 |
+     parted             | []                          []     [] []       |
+     pies               |                                                |
+     popt               | []  [] []             []    []  [] [] []       |
+     psmisc             | []                          []                 |
+     pspp               |                                                |
+     pwdutils           | []                          []                 |
+     radius             | []                          []                 |
+     recode             | []  [] []    []       []    []     []          |
+     rosegarden         | ()                          ()     () ()       |
+     rpm                |                             []        []       |
+     rush               |                                                |
+     sarg               | []                                             |
+     screem             |                                    [] []       |
+     scrollkeeper       |                       []    []     []          |
+     sed                | []  [] []             []    []     [] []       |
+     sharutils          | []  []                []    []     [] []       |
+     shishi             | []                                             |
+     skencil            | []                                             |
+     solfege            | []     []                          []          |
+     solfege-manual     | []     []                                      |
+     soundtracker       | []                                 []          |
+     sp                 | []                                    ()       |
+     sysstat            | []                          []     [] []       |
+     tar                | []  []                []    []     [] []       |
+     texinfo            | []                          []     [] []       |
+     tin                | []                                             |
+     unicode-han-tra... |                                                |
+     unicode-transla... | []  []                                         |
+     util-linux-ng      | []                    []    []     [] []       |
+     vice               | ()                    ()           ()          |
+     vmm                | []                                             |
+     vorbis-tools       |                             []                 |
+     wastesedge         | ()                                 ()          |
+     wdiff              |                                                |
+     wget               | []  []             [] []    []     [] []       |
+     wyslij-po          | []                          []                 |
+     xchat              | []        []    []    []    []     [] []    [] |
+     xdg-user-dirs      | []  [] [] [] []       []    []  [] [] []    [] |
+     xkeyboard-config   | []                    []    []     []          |
+                        +------------------------------------------------+
+                          fr  ga gl gu he hi hr hu hy id  is it ja ka kn
+                          121 53 20  4  8  2  5 53  2 120  5 83 66  0  4
+
+                          ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+                        +-----------------------------------------------+
+     a2ps               |                               []              |
+     aegis              |                                               |
+     ant-phone          |                                               |
+     anubis             |                               []    []        |
+     aspell             |                         []                    |
+     bash               |                                               |
+     bfd                |                                               |
+     bibshelf           |                []             []              |
+     binutils           |                                               |
+     bison              |                               []              |
+     bison-runtime      |       []    [] []             []    []        |
+     bluez-pin          |    [] []    [] []             []              |
+     bombono-dvd        |                                               |
+     buzztard           |                                               |
+     cflow              |                                               |
+     clisp              |                                               |
+     coreutils          |          []                                   |
+     cpio               |                                               |
+     cppi               |                                               |
+     cpplib             |                                               |
+     cryptsetup         |                                               |
+     dfarc              |                   []                          |
+     dialog             |    []       [] []             []    []        |
+     dico               |                                               |
+     diffutils          |                []             []              |
+     dink               |                                               |
+     doodle             |                                               |
+     e2fsprogs          |                                               |
+     enscript           |                                               |
+     exif               |                []                             |
+     fetchmail          |                                               |
+     findutils          |                                               |
+     flex               |                                               |
+     freedink           |                                     []        |
+     gas                |                                               |
+     gawk               |                                               |
+     gcal               |                                               |
+     gcc                |                                               |
+     gettext-examples   |       []       []             [] []           |
+     gettext-runtime    | []                                            |
+     gettext-tools      | []                                            |
+     gip                |                []             []              |
+     gjay               |                                               |
+     gliv               |                                               |
+     glunarclock        |                []                             |
+     gnubiff            |                                               |
+     gnucash            | ()          ()                      ()     () |
+     gnuedu             |                                               |
+     gnulib             |                                               |
+     gnunet             |                                               |
+     gnunet-gtk         |                                               |
+     gnutls             |                               []              |
+     gold               |                                               |
+     gpe-aerial         |                []                             |
+     gpe-beam           |                []                             |
+     gpe-bluetooth      |                []                []           |
+     gpe-calendar       |                []                             |
+     gpe-clock          | []    []       []             [] []           |
+     gpe-conf           | []             []                             |
+     gpe-contacts       | []             []                             |
+     gpe-edit           |                []                             |
+     gpe-filemanager    | []             []                             |
+     gpe-go             | []             []                []           |
+     gpe-login          |                []                             |
+     gpe-ownerinfo      |                []             []              |
+     gpe-package        | []             []                             |
+     gpe-sketchbook     | []             []                             |
+     gpe-su             | []    []       []             [] [] []        |
+     gpe-taskmanager    | [] [] []       []             [] []           |
+     gpe-timesheet      |                []             []              |
+     gpe-today          |       []       []             [] []           |
+     gpe-todo           |                []                   []        |
+     gphoto2            |                                               |
+     gprof              |                               []              |
+     gpsdrive           |                                               |
+     gramadoir          |                                               |
+     grep               |                                               |
+     grub               |                                               |
+     gsasl              |                                               |
+     gss                |                                               |
+     gst-plugins-bad    |                []                []           |
+     gst-plugins-base   |             [] []                             |
+     gst-plugins-good   |                []                []           |
+     gst-plugins-ugly   |             [] []             [] [] []        |
+     gstreamer          |                                               |
+     gtick              |                                               |
+     gtkam              |                                     []        |
+     gtkorphan          |                []                      []     |
+     gtkspell           |       []    [] []       []    []    [] []     |
+     gutenprint         |                                               |
+     hello              | []             []             []              |
+     help2man           |                                               |
+     hylafax            |                                               |
+     idutils            |                                               |
+     indent             |                                               |
+     iso_15924          |             [] []                             |
+     iso_3166           | [] []       () [] [] []    []       []        |
+     iso_3166_2         |                                               |
+     iso_4217           |             []                      []        |
+     iso_639            |                      []    []                 |
+     iso_639_3          |                            []                 |
+     jwhois             |                []                             |
+     kbd                |                                               |
+     keytouch           |                []                             |
+     keytouch-editor    |                []                             |
+     keytouch-keyboa... |                []                             |
+     klavaro            |                                     []        |
+     latrine            |                []                             |
+     ld                 |                                               |
+     leafpad            | []          [] []                             |
+     libc               | []                                            |
+     libexif            |                                               |
+     libextractor       |                                               |
+     libgnutls          |                               []              |
+     libgpewidget       |                []             []              |
+     libgpg-error       |                                               |
+     libgphoto2         |                                               |
+     libgphoto2_port    |                                               |
+     libgsasl           |                                               |
+     libiconv           |                                               |
+     libidn             |                                               |
+     lifelines          |                                               |
+     liferea            |                                               |
+     lilypond           |                                               |
+     linkdr             |                                               |
+     lordsawar          |                                               |
+     lprng              |                                               |
+     lynx               |                                               |
+     m4                 |                                               |
+     mailfromd          |                                               |
+     mailutils          |                                               |
+     make               | []                                            |
+     man-db             |                                               |
+     man-db-manpages    |                                               |
+     minicom            |                                     []        |
+     mkisofs            |                                               |
+     myserver           |                                               |
+     nano               |                               []    []        |
+     opcodes            |                                               |
+     parted             |                                               |
+     pies               |                                               |
+     popt               | []             []                   []        |
+     psmisc             |                                               |
+     pspp               |                                               |
+     pwdutils           |                                               |
+     radius             |                                               |
+     recode             |                                               |
+     rosegarden         |                                               |
+     rpm                |                                               |
+     rush               |                                               |
+     sarg               |                                               |
+     screem             |                                               |
+     scrollkeeper       |                                     []     [] |
+     sed                |                                               |
+     sharutils          |                                               |
+     shishi             |                                               |
+     skencil            |                                               |
+     solfege            |                                     []        |
+     solfege-manual     |                                               |
+     soundtracker       |                                               |
+     sp                 |                                               |
+     sysstat            |                []                             |
+     tar                |       []                                      |
+     texinfo            |                                     []        |
+     tin                |                                               |
+     unicode-han-tra... |                                               |
+     unicode-transla... |                                               |
+     util-linux-ng      |                                               |
+     vice               |                                               |
+     vmm                |                                               |
+     vorbis-tools       |                                               |
+     wastesedge         |                                               |
+     wdiff              |                                               |
+     wget               |             []                                |
+     wyslij-po          |                                               |
+     xchat              | []             [] []                          |
+     xdg-user-dirs      | [] []       [] [] []       []       [] []     |
+     xkeyboard-config   | []    []    []                                |
+                        +-----------------------------------------------+
+                          ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+                          20  5 10  1 12 48  4  2  2  4 24 10 19  3   1
+
+                          nl  nn or pa pl  ps pt pt_BR ro ru rw sk sl sq sr
+                        +---------------------------------------------------+
+     a2ps               | []           []     []  []   [] []       []    [] |
+     aegis              | []                      []      []                |
+     ant-phone          |                         []   []                   |
+     anubis             | []           []                 []                |
+     aspell             | []                           [] []    [] []       |
+     bash               | []                                    []          |
+     bfd                |                                 []                |
+     bibshelf           | []  []                                            |
+     binutils           |                                 []    []          |
+     bison              | []           []                 []                |
+     bison-runtime      | []           []     []  []   [] []       []       |
+     bluez-pin          | []           []         []   [] []    [] []    [] |
+     bombono-dvd        |     []                          ()                |
+     buzztard           | []  []                                            |
+     cflow              |              []                                   |
+     clisp              | []                              []                |
+     coreutils          | []           []     []  []      []       []       |
+     cpio               | []           []                 []                |
+     cppi               |              []                                   |
+     cpplib             | []                                                |
+     cryptsetup         | []                                                |
+     dfarc              |              []                                   |
+     dialog             | []           []         []      []                |
+     dico               |              []                                   |
+     diffutils          | []           []         []   [] []             [] |
+     dink               | ()                                                |
+     doodle             | []                                          []    |
+     e2fsprogs          | []           []                                   |
+     enscript           | []                      []   [] []       []       |
+     exif               | []           []              [] ()    []          |
+     fetchmail          | []           []                 []          []    |
+     findutils          | []           []     []          []       []       |
+     flex               | []           []         []   [] []                |
+     freedink           | []           []                                   |
+     gas                |                                                   |
+     gawk               | []           []         []   []                   |
+     gcal               |                                                   |
+     gcc                |                                                [] |
+     gettext-examples   | []           []     []       [] []    [] []    [] |
+     gettext-runtime    | []  []       []     []       [] []    [] []    [] |
+     gettext-tools      |              []              [] []    [] []    [] |
+     gip                | []           []                 []    []       [] |
+     gjay               |                                                   |
+     gliv               | []           []         []   [] []    []          |
+     glunarclock        | []                      []   []       []       [] |
+     gnubiff            | []                           ()                   |
+     gnucash            | []           ()         ()      ()                |
+     gnuedu             | []                                                |
+     gnulib             | []           []                 []       []       |
+     gnunet             |                                                   |
+     gnunet-gtk         |                                                   |
+     gnutls             | []           []                                   |
+     gold               |                                                   |
+     gpe-aerial         | []                  []  []   [] []       []    [] |
+     gpe-beam           | []                  []  []   [] []       []    [] |
+     gpe-bluetooth      | []                      []                        |
+     gpe-calendar       |                         []      []       []    [] |
+     gpe-clock          | []                  []  []   [] []    [] []    [] |
+     gpe-conf           | []                  []  []   [] []    [] []       |
+     gpe-contacts       |                         []   [] []       []    [] |
+     gpe-edit           | []           []                          []       |
+     gpe-filemanager    | []                              []       []       |
+     gpe-go             | []           []         []   [] []    [] []    [] |
+     gpe-login          | []                      []                        |
+     gpe-ownerinfo      | []                  []  []   [] []    [] []    [] |
+     gpe-package        | []                                       []       |
+     gpe-sketchbook     | []                  []  []   [] []       []    [] |
+     gpe-su             | []                  []  []   [] []    [] []    [] |
+     gpe-taskmanager    | []                  []  []   [] []    [] []    [] |
+     gpe-timesheet      | []                  []  []   [] []    [] []    [] |
+     gpe-today          | []                  []  []   [] []    [] []    [] |
+     gpe-todo           | []                      []      []       []    [] |
+     gphoto2            | []        [] []         []   [] []    []       [] |
+     gprof              | []                      []   []                   |
+     gpsdrive           | []                              []                |
+     gramadoir          | []                                    []          |
+     grep               | []           []                 []    []          |
+     grub               | []           []                 []                |
+     gsasl              | []           []                       []       [] |
+     gss                |              []              []       []          |
+     gst-plugins-bad    | []           []         []      []    []          |
+     gst-plugins-base   | []           []         []      []    []          |
+     gst-plugins-good   | []           []         []      []    []          |
+     gst-plugins-ugly   | []           []         []      []    [] []       |
+     gstreamer          | []           []         []      []    []          |
+     gtick              | []                              []    []          |
+     gtkam              | []        [] []         []      []    []          |
+     gtkorphan          | []                                                |
+     gtkspell           | []           []     []  []   [] []    [] [] [] [] |
+     gutenprint         | []                              []                |
+     hello              | []           []                       [] []       |
+     help2man           |              []                 []                |
+     hylafax            | []                                                |
+     idutils            | []           []         []   [] []                |
+     indent             | []           []         []   [] []    []       [] |
+     iso_15924          | []           []                 []       []       |
+     iso_3166           | []  [] [] [] []     ()  []   [] [] [] [] [] [] [] |
+     iso_3166_2         | []           []                          []       |
+     iso_4217           | []  []       []     []          [] []    []    [] |
+     iso_639            | []     [] [] []                 [] [] [] []    [] |
+     iso_639_3          |        [] []                                      |
+     jwhois             | []           []         []   []                   |
+     kbd                | []           []              []                   |
+     keytouch           | []           []                       []          |
+     keytouch-editor    | []           []                       []          |
+     keytouch-keyboa... | []           []                       []          |
+     klavaro            | []                      []                        |
+     latrine            |              []                 []                |
+     ld                 |                                                   |
+     leafpad            | []  []       []     []  []      []    [] []    [] |
+     libc               | []           []                 []    []          |
+     libexif            | []           []         ()            []          |
+     libextractor       |                                                   |
+     libgnutls          | []           []                                   |
+     libgpewidget       | []           []                          []       |
+     libgpg-error       |              []              []                   |
+     libgphoto2         | []           []                                   |
+     libgphoto2_port    | []           []                 []    []          |
+     libgsasl           | []           []              []       []       [] |
+     libiconv           | []           []                       [] []    [] |
+     libidn             | []           []                                   |
+     lifelines          | []           []                                   |
+     liferea            | []           []     []  []   [] ()    ()    []    |
+     lilypond           | []                                                |
+     linkdr             | []                  []          []                |
+     lordsawar          |                                                   |
+     lprng              |              []                                   |
+     lynx               | []                      []      []                |
+     m4                 | []           []         []   [] []                |
+     mailfromd          |              []                                   |
+     mailutils          |              []                                   |
+     make               | []           []         []      []                |
+     man-db             | []           []                 []                |
+     man-db-manpages    | []           []                 []                |
+     minicom            |              []         []   [] []                |
+     mkisofs            | []           []                 []                |
+     myserver           |                                                   |
+     nano               | []           []         []      []                |
+     opcodes            | []                           []                   |
+     parted             | []           []                 []    []          |
+     pies               |              []                                   |
+     popt               | []           []     []          []                |
+     psmisc             | []           []                 []                |
+     pspp               | []                      []                        |
+     pwdutils           |              []                                   |
+     radius             | []           []                 []                |
+     recode             | []           []     []  []   [] []    [] []       |
+     rosegarden         |              ()                 ()                |
+     rpm                | []           []     []                            |
+     rush               | []           []                                   |
+     sarg               |                                                   |
+     screem             |                                                   |
+     scrollkeeper       | []  []       []              [] []    []    [] [] |
+     sed                | []           []     []  []   [] []    [] []    [] |
+     sharutils          | []           []                 []             [] |
+     shishi             |              []                                   |
+     skencil            |                     []  []                        |
+     solfege            | []           []         []      []                |
+     solfege-manual     | []           []         []                        |
+     soundtracker       |                                       []          |
+     sp                 |                                                   |
+     sysstat            | []           []         []      []                |
+     tar                | []           []                 []       []       |
+     texinfo            | []           []              [] []                |
+     tin                |                                 []                |
+     unicode-han-tra... |                                                   |
+     unicode-transla... |                                                   |
+     util-linux-ng      | []           []         []      []       []       |
+     vice               | []                                                |
+     vmm                | []                                                |
+     vorbis-tools       | []           []                                   |
+     wastesedge         | []                                                |
+     wdiff              | []           []                                   |
+     wget               | []           []     []  []      []    [] []       |
+     wyslij-po          | []  []       []                                   |
+     xchat              | []        [] []     []          []    [] [] [] [] |
+     xdg-user-dirs      | []  [] [] [] []  [] []  []   [] []    [] [] [] [] |
+     xkeyboard-config   | []           []                 []    [] []       |
+                        +---------------------------------------------------+
+                          nl  nn or pa pl  ps pt pt_BR ro ru rw sk sl sq sr
+                          135 10  4  7 105  1 29  61   47 91  3 55 47  8 37
+
+                          sv  sw ta te tg th tr uk vi  wa zh_CN zh_HK zh_TW
+                        +---------------------------------------------------+
+     a2ps               | []              [] [] [] []                       | 27
+     aegis              |                          []                       |  9
+     ant-phone          | []                 []    []      []               |  9
+     anubis             | []                 [] [] []                       | 15
+     aspell             |                       [] []  []                   | 20
+     bash               | []                       []                       | 11
+     bfd                |                          []                       |  6
+     bibshelf           | []                       []      []               | 16
+     binutils           |                       [] []                       |  8
+     bison              | []                       []                       | 12
+     bison-runtime      | []              []    [] []      []          []   | 29
+     bluez-pin          | []              [] [] [] []  []  []          []   | 37
+     bombono-dvd        |                          []                       |  4
+     buzztard           |                          []                       |  7
+     cflow              |                       [] []      []               |  9
+     clisp              |                                                   | 10
+     coreutils          | []                    [] []      []               | 22
+     cpio               | []                 [] [] []      []          []   | 13
+     cppi               |                       [] []                       |  5
+     cpplib             | []                 [] [] []      []          []   | 13
+     cryptsetup         | []                       []                       |  7
+     dfarc              |                          []                       |  9
+     dialog             | []  []          []       []  []  []          []   | 30
+     dico               |                       []                          |  2
+     diffutils          | []                 [] [] []      []          []   | 30
+     dink               |                                                   |  4
+     doodle             | []                       []                       |  7
+     e2fsprogs          | []                 []    []                       | 11
+     enscript           | []                 [] [] []                       | 17
+     exif               | []                       []      []               | 16
+     fetchmail          |                    []    []      []               | 17
+     findutils          | []                 [] [] []      []               | 20
+     flex               | []                 []    []                  []   | 15
+     freedink           |                          []                       | 10
+     gas                |                    []                             |  4
+     gawk               | []                 []    []      []               | 18
+     gcal               | []                 []                             |  5
+     gcc                | []                 []            []               |  7
+     gettext-examples   | []                 [] [] []      []    []    []   | 34
+     gettext-runtime    | []                 [] [] []      []    []    []   | 30
+     gettext-tools      | []                 [] [] []      []          []   | 22
+     gip                | []                       []      []          []   | 22
+     gjay               |                          []                       |  3
+     gliv               | []                 []    []                       | 14
+     glunarclock        | []                       []  []  []          []   | 19
+     gnubiff            | []                       []                       |  4
+     gnucash            |                    () [] ()                  ()   |  9
+     gnuedu             |                          []                  []   |  7
+     gnulib             | []                    [] []      []               | 16
+     gnunet             |                          []                       |  1
+     gnunet-gtk         | []                 []    []                       |  5
+     gnutls             | []                       []      []               | 10
+     gold               |                          []                       |  4
+     gpe-aerial         | []                       []      []               | 18
+     gpe-beam           | []                       []      []               | 19
+     gpe-bluetooth      | []                       []      []               | 13
+     gpe-calendar       | []                       []  []  []               | 12
+     gpe-clock          | []                 []    []  []  []               | 28
+     gpe-conf           | []                       []  []  []               | 20
+     gpe-contacts       | []                       []      []               | 17
+     gpe-edit           | []                       []      []               | 12
+     gpe-filemanager    | []                       []  []  []               | 16
+     gpe-go             | []                 []    []  []  []               | 25
+     gpe-login          | []                       []      []               | 11
+     gpe-ownerinfo      | []                 []    []      []          []   | 25
+     gpe-package        | []                       []      []               | 13
+     gpe-sketchbook     | []                       []      []               | 20
+     gpe-su             | []                 []    []  []  []               | 30
+     gpe-taskmanager    | []                 []    []  []  []               | 29
+     gpe-timesheet      | []                 []    []      []          []   | 25
+     gpe-today          | []                 []    []  []  []          []   | 30
+     gpe-todo           | []                       []  []  []               | 17
+     gphoto2            | []                    [] []      []          []   | 24
+     gprof              | []                 []    []                       | 15
+     gpsdrive           | []                       []      []               | 11
+     gramadoir          | []                       []      []               | 11
+     grep               |                 []       []      []               | 10
+     grub               | []                       []      []               | 14
+     gsasl              | []                       []      []          []   | 14
+     gss                | []                       []      []               | 11
+     gst-plugins-bad    | []                 []    []      []               | 22
+     gst-plugins-base   | []                 [] [] []      []               | 24
+     gst-plugins-good   | []                 [] [] []      []               | 25
+     gst-plugins-ugly   | []                 [] [] []      []               | 29
+     gstreamer          | []                    [] []      []               | 22
+     gtick              |                       [] []      []               | 13
+     gtkam              | []                       []      []               | 20
+     gtkorphan          | []                       []      []               | 14
+     gtkspell           | []              [] [] [] []  []  []    []    []   | 45
+     gutenprint         | []                                                | 10
+     hello              | []              [] []    []      []          []   | 21
+     help2man           | []                       []                       |  7
+     hylafax            |                          []                       |  5
+     idutils            | []                 []    []      []               | 17
+     indent             | []                 [] [] []      []          []   | 30
+     iso_15924          |                 ()    [] ()      []          []   | 16
+     iso_3166           | []        []    () [] [] ()  []  []    []    ()   | 53
+     iso_3166_2         |                 ()    [] ()      []               |  9
+     iso_4217           | []              () [] [] ()      []    []         | 26
+     iso_639            | []     [] []    ()    [] ()  []  []    []    []   | 38
+     iso_639_3          |        []                ()                       |  8
+     jwhois             | []                 []    []      []          []   | 16
+     kbd                | []                 [] [] []      []               | 15
+     keytouch           | []                       []      []               | 16
+     keytouch-editor    | []                       []      []               | 14
+     keytouch-keyboa... | []                       []      []               | 14
+     klavaro            |                          []                       | 11
+     latrine            |                    []    []      []               | 10
+     ld                 | []                 []    []                  []   | 11
+     leafpad            | []                 [] [] []      []          []   | 33
+     libc               | []                 []    []      []          []   | 21
+     libexif            |                          []      ()               |  6
+     libextractor       |                          []                       |  1
+     libgnutls          | []                       []      []               |  9
+     libgpewidget       | []                       []      []               | 14
+     libgpg-error       | []                       []      []               |  9
+     libgphoto2         |                       [] []                       |  8
+     libgphoto2_port    | []                    [] []                  []   | 13
+     libgsasl           | []                       []      []               | 13
+     libiconv           | []                       []  []  []               | 21
+     libidn             | ()                       []      []               | 11
+     lifelines          | []                                                |  4
+     liferea            | []                 []            []               | 21
+     lilypond           |                          []                       |  7
+     linkdr             | []                 []    []      []          []   | 17
+     lordsawar          |                                                   |  1
+     lprng              |                          []                       |  3
+     lynx               | []                 [] [] []                       | 17
+     m4                 | []                       []      []          []   | 19
+     mailfromd          |                       [] []                       |  3
+     mailutils          |                          []                       |  5
+     make               | []                 []    []      []               | 21
+     man-db             | []                       []      []               |  8
+     man-db-manpages    |                                                   |  4
+     minicom            | []                       []                       | 16
+     mkisofs            |                          []      []               |  9
+     myserver           |                                                   |  0
+     nano               | []                       []      []          []   | 21
+     opcodes            | []                 []    []                       | 11
+     parted             | []                 [] [] []                  []   | 15
+     pies               |                       [] []                       |  3
+     popt               | []              [] []    []      []          []   | 27
+     psmisc             | []                       []                       | 11
+     pspp               |                                                   |  4
+     pwdutils           | []                       []                       |  6
+     radius             |                       [] []                       |  9
+     recode             | []                 []    []      []               | 28
+     rosegarden         | ()                                                |  0
+     rpm                | []                       []                  []   | 11
+     rush               |                       [] []                       |  4
+     sarg               |                                                   |  1
+     screem             |                          []                       |  3
+     scrollkeeper       | []                 [] [] []                  []   | 27
+     sed                | []                 []    []      []          []   | 30
+     sharutils          | []                 []    []      []          []   | 22
+     shishi             |                          []                       |  3
+     skencil            | []                       []                       |  7
+     solfege            | []                 []    []      []               | 16
+     solfege-manual     |                    []                             |  8
+     soundtracker       | []                 []    []                       |  9
+     sp                 |                    []                             |  3
+     sysstat            |                          []      []               | 15
+     tar                | []                 [] [] []      []          []   | 23
+     texinfo            | []                 []    []      []               | 16
+     tin                |                                                   |  4
+     unicode-han-tra... |                                                   |  0
+     unicode-transla... |                                                   |  2
+     util-linux-ng      | []                 [] [] []                       | 20
+     vice               | ()                 ()                             |  1
+     vmm                |                          []                       |  4
+     vorbis-tools       |                          []                       |  6
+     wastesedge         |                                                   |  2
+     wdiff              | []                       []                       |  7
+     wget               | []                 []    []      []          []   | 26
+     wyslij-po          |                       [] []                       |  8
+     xchat              | []              []    [] []      []          []   | 36
+     xdg-user-dirs      | []     []       [] [] [] []      []    []    []   | 60
+     xkeyboard-config   | []                 [] [] []                       | 25
+                        +---------------------------------------------------+
+       84 teams           sv  sw ta te tg th tr uk vi  wa zh_CN zh_HK zh_TW
+      178 domains         119  1  3  2  0 10 66 50 155 17  97     7    41    2610
 
    Some counters in the preceding matrix are higher than the number of
 visible blocks let us expect.  This is because a few extra PO files are
@@ -599,15 +1301,15 @@
 lag between the mere existence a PO file and its wide availability in a
 distribution.
 
-   If May 2003 seems to be old, you may fetch a more recent copy of
+   If May 2010 seems to be old, you may fetch a more recent copy of
 this `ABOUT-NLS' file on most GNU archive sites.  The most up-to-date
 matrix with full percentage details can be found at
-`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+`http://translationproject.org/extra/matrix.html'.
 
-Using `gettext' in new packages
-===============================
+1.6 Using `gettext' in new packages
+===================================
 
-   If you are writing a freely available program and want to
+If you are writing a freely available program and want to
 internationalize it you are welcome to use GNU `gettext' in your
 package.  Of course you have to respect the GNU Library General Public
 License which covers the use of the GNU `gettext' library.  This means
@@ -620,6 +1322,6 @@
 Free Translation Project is also available for packages which are not
 developed inside the GNU project.  Therefore the information given above
 applies also for every other Free Software Project.  Contact
-`translation@iro.umontreal.ca' to make the `.pot' files available to
-the translation teams.
+`coordinator@translationproject.org' to make the `.pot' files available
+to the translation teams.
 
diff --git a/AUTHORS b/AUTHORS
index 0a3ca6f..806b144 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -5,4 +5,38 @@
 Richard Stallman made it Yacc-compatible.
 
 Wilfred Hansen of Carnegie Mellon University added multicharacter
-string literals and other features.
+string literals and other features (Bison 1.25, 1995).
+
+Akim Demaille rewrote the parser in Bison, and changed the back end to
+use M4 (1.50, 2002).
+
+Paul Hilfinger added GLR support (Bison 1.50, 2002).
+
+Joel E. Denny contributed canonical-LR support, and invented and added
+IELR and LAC (Lookahead Correction) support (Bison 2.5, 2011).
+
+Paolo Bonzini contributed Java support (Bison 2.4, 2008).
+
+Alex Rozenman added named reference support (Bison 2.5, 2011).
+
+Paul Eggert fixed a million portability issues, arbitrary limitations,
+and nasty bugs.
+
+-----
+
+Copyright (C) 1998-2012 Free Software Foundation, Inc.
+
+This file is part of Bison, the GNU Compiler Compiler.
+
+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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
diff --git a/Android.mk b/Android.mk
index f232172..d5e877a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -4,81 +4,173 @@
 # Android Asset Packaging Tool
 #
 
-ifeq ($(HOST_OS),linux)
 
 LOCAL_PATH:= $(call my-dir)
+###########################################
 include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := \
-	lib/abitset.c \
-	lib/argmatch.c \
-	lib/basename.c \
-	lib/bitset.c \
-	lib/bitset_stats.c \
-	lib/bitsetv-print.c \
-	lib/bitsetv.c \
-	lib/dirname.c \
-	lib/dup-safer.c \
-	lib/ebitset.c \
-	lib/exitfail.c \
-	lib/fd-safer.c \
-	lib/fopen-safer.c \
-	lib/get-errno.c \
-	lib/hard-locale.c \
-	lib/hash.c \
-	lib/lbitset.c \
-	lib/mbswidth.c \
-	lib/pipe-safer.c \
-	lib/quote.c \
-	lib/quotearg.c \
-	lib/stripslash.c \
-	lib/subpipe.c \
-	lib/timevar.c \
-	lib/vbitset.c \
-	lib/xalloc-die.c \
-	lib/xmalloc.c \
-	lib/xstrndup.c \
-	\
-	src/LR0.c \
-	src/assoc.c \
-	src/closure.c \
-	src/complain.c \
-	src/conflicts.c \
-	src/derives.c \
-	src/files.c \
-	src/getargs.c \
-	src/gram.c \
-	src/lalr.c \
-	src/location.c \
-	src/main.c \
-	src/muscle_tab.c \
-	src/nullable.c \
-	src/output.c \
-	src/parse-gram.c \
-	src/print.c \
-	src/print_graph.c \
-	src/reader.c \
-	src/reduce.c \
-	src/relation.c \
-	src/scan-gram-c.c \
-	src/scan-skel-c.c \
-	src/state.c \
-	src/symlist.c \
-	src/symtab.c \
-	src/tables.c \
-	src/uniqstr.c \
-	src/vcg.c
-
-LOCAL_MODULE := bison
-LOCAL_MODULE_CLASS := EXECUTABLES
-LOCAL_IS_HOST_MODULE := true
-intermediates := $(call local-intermediates-dir)
-
-LOCAL_CFLAGS := -DHAVE_CONFIG_H -DPKGDATADIR=\"$(PWD)/$(LOCAL_PATH)/data\"
+LOCAL_MODULE := libbison
 
 LOCAL_C_INCLUDES := \
-	$(LOCAL_PATH)/lib
+    $(LOCAL_PATH)/$(BUILD_OS)-lib \
+    $(LOCAL_PATH)/lib
+
+LOCAL_SRC_FILES := \
+    lib/abitset.c \
+    lib/argmatch.c \
+    lib/asnprintf.c \
+    lib/basename-lgpl.c \
+    lib/basename.c \
+    lib/binary-io.c \
+    lib/bitrotate.c \
+    lib/bitset.c \
+    lib/bitset_stats.c \
+    lib/bitsetv-print.c \
+    lib/bitsetv.c \
+    lib/c-ctype.c \
+    lib/c-strcasecmp.c \
+    lib/c-strncasecmp.c \
+    lib/cloexec.c \
+    lib/close-stream.c \
+    lib/closeout.c \
+    lib/dirname-lgpl.c \
+    lib/dirname.c \
+    lib/dup-safer-flag.c \
+    lib/dup-safer.c \
+    lib/ebitset.c \
+    lib/exitfail.c \
+    lib/fatal-signal.c \
+    lib/fd-hook.c \
+    lib/fd-safer-flag.c \
+    lib/fd-safer.c \
+    lib/fopen-safer.c \
+    lib/fprintf.c \
+    lib/fseterr.c \
+    lib/get-errno.c \
+    lib/hash.c \
+    lib/isnand.c \
+    lib/isnanf.c \
+    lib/isnanl.c \
+    lib/lbitset.c \
+    lib/localcharset.c \
+    lib/math.c \
+    lib/mbchar.c \
+    lib/mbschr.c \
+    lib/mbsrchr.c \
+    lib/mbswidth.c \
+    lib/mbuiter.c \
+    lib/pipe-safer.c \
+    lib/pipe2-safer.c \
+    lib/pipe2.c \
+    lib/printf-args.c \
+    lib/printf-frexp.c \
+    lib/printf-frexpl.c \
+    lib/printf-parse.c \
+    lib/printf.c \
+    lib/progname.c \
+    lib/quotearg.c \
+    lib/sig-handler.c \
+    lib/snprintf.c \
+    lib/spawn-pipe.c \
+    lib/sprintf.c \
+    lib/stdio.c \
+    lib/strerror_r.c \
+    lib/stripslash.c \
+    lib/strnlen1.c \
+    lib/timevar.c \
+    lib/unistd.c \
+    lib/vasnprintf.c \
+    lib/vbitset.c \
+    lib/vfprintf.c \
+    lib/vsnprintf.c \
+    lib/vsprintf.c \
+    lib/wait-process.c \
+    lib/wctype-h.c \
+    lib/xalloc-die.c \
+    lib/xmalloc.c \
+    lib/xmemdup0.c \
+    lib/xsize.c \
+    lib/xstrndup.c \
+    lib/yyerror.c \
+    lib/glthread/lock.c \
+    lib/glthread/threadlib.c \
+    lib/uniwidth/width.c
+
+ifeq ($(BUILD_OS),darwin)
+LOCAL_SRC_FILES += \
+    lib/error.c \
+    lib/fpending.c \
+    lib/getopt.c \
+    lib/getopt1.c \
+    lib/obstack.c \
+    lib/obstack_printf.c \
+    lib/open.c \
+    lib/perror.c \
+    lib/rawmemchr.c \
+    lib/stat.c \
+    lib/strchrnul.c \
+    lib/strerror-override.c \
+    lib/strerror.c \
+    lib/strverscmp.c \
+    lib/wcwidth.c
+endif
+
+ifeq ($(BUILD_OS),linux)
+LOCAL_SRC_FILES += \
+    lib/fcntl.c
+endif
+
+include $(BUILD_HOST_STATIC_LIBRARY)
+###########################################
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := bison
+
+LOCAL_C_INCLUDES := \
+    $(LOCAL_PATH)/$(BUILD_OS)-lib \
+    $(LOCAL_PATH)/lib
+
+LOCAL_CFLAGS := -DPKGDATADIR=\"$(PWD)/$(LOCAL_PATH)/data\"
+
+LOCAL_STATIC_LIBRARIES := libbison
+
+LOCAL_SRC_FILES := \
+    src/AnnotationList.c \
+    src/InadequacyList.c \
+    src/LR0.c \
+    src/Sbitset.c \
+    src/assoc.c \
+    src/closure.c \
+    src/complain.c \
+    src/conflicts.c \
+    src/derives.c \
+    src/files.c \
+    src/getargs.c \
+    src/gram.c \
+    src/graphviz.c \
+    src/ielr.c \
+    src/lalr.c \
+    src/location.c \
+    src/main.c \
+    src/muscle-tab.c \
+    src/named-ref.c \
+    src/nullable.c \
+    src/output.c \
+    src/parse-gram.c \
+    src/print-xml.c \
+    src/print.c \
+    src/print_graph.c \
+    src/reader.c \
+    src/reduce.c \
+    src/relation.c \
+    src/scan-code-c.c \
+    src/scan-gram-c.c \
+    src/scan-skel-c.c \
+    src/state.c \
+    src/symlist.c \
+    src/symtab.c \
+    src/tables.c \
+    src/uniqstr.c
 
 include $(BUILD_HOST_EXECUTABLE)
-
-endif
diff --git a/COPYING b/COPYING
index 3912109..94a9ed0 100644
--- a/COPYING
+++ b/COPYING
@@ -1,285 +1,626 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
 
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-			    Preamble
+                            Preamble
 
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
 your programs, too.
 
   When we speak of free software, we are referring to freedom, not
 price.  Our General Public Licenses are designed to make sure that you
 have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
 
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
 
   For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
 
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
 
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
 
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
 
   The precise terms and conditions for copying, distribution and
 modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
+                       TERMS AND CONDITIONS
 
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
+  0. Definitions.
 
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
+  "This License" refers to version 3 of the GNU General Public License.
 
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
 
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
 
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
 
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
 
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
 
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
 
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
 
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
+  1. Source Code.
 
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
 
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
 
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
 
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
 
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
 
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
+  The Corresponding Source for a work in source code form is that
+same work.
 
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
 this License.
 
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
 otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
 
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
+  13. Use with the GNU Affero General Public License.
 
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
 
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
+  14. Revised Versions of this License.
 
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
 be similar in spirit to the present version, but may differ in detail to
 address new problems or concerns.
 
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
 
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
 
-			    NO WARRANTY
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
 
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
+  15. Disclaimer of Warranty.
 
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
@@ -287,15 +628,15 @@
 
   To do so, attach the following notices to the program.  It is safest
 to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
+state the exclusion of warranty; and each file should have at least
 the "copyright" line and a pointer to where the full notice is found.
 
     <one line to give the program's name and a brief idea of what it does.>
     Copyright (C) <year>  <name of author>
 
-    This program is free software; you can redistribute it and/or modify
+    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 of the License, or
+    the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
 
     This program is distributed in the hope that it will be useful,
@@ -304,37 +645,30 @@
     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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 Also add information on how to contact you by electronic and paper mail.
 
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
 
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.
 
 The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
 
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
 
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
index c44f0e4..a3cee66 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,16034 +1,3951 @@
-2006-06-05  Paul Eggert  <eggert@cs.ucla.edu>
+2012-12-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* NEWS: Version 2.3.
-	* configure.ac (AC_INIT): Likewise.
+	version 2.7
+	* NEWS: Record release date.
 
-2006-05-30  Paul Eggert  <eggert@cs.ucla.edu>
+2012-12-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/glr.c (YYRECOVERING): Define to be a function-like macro
-	with no arguments, not as an object-like macro.  This is for
-	compatibility with data/yacc.c.  Problem reported by John P. Hartmann in
-	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00059.html>.
-	* doc/bison.texinfo (Action Features, Error Recovery, Table of Symbols):
-	Document this.
+	yacc.c: scope reduction
+	* data/yacc.c (yysyntax_error): here.
 
-2006-05-30  Joel E. Denny  <jdenny@ces.clemson.edu>
+2012-12-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/getargs.c (usage): Back out yesterday's modification of the
-	--help output so that we don't have to wait for translation before
-	releasing 2.3.
+	tests: C90 compliance
+	* tests/synclines.at: here.
 
-2006-05-29  Paul Eggert  <eggert@cs.ucla.edu>
+2012-12-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* doc/bison.texinfo (Introduction): Don't say "GLR grammar".
-	Problem reported by Akim Demaille.
+	fix C90 compliance
+	* data/glr.c, src/graphviz.h, src/ielr.c, src/scan-gram.l,
+	* src/system.h, tests/actions.at, tests/glr-regression.at: Do not
+	use // comments.
+	Do not introduce variables after statements.
+	Provide "main" with a return value.
 
-2006-05-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+2012-12-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/getargs.c (usage): Mention GLR not just LALR(1) in --help output.
+	glr.c: scope reduction
+	* data/glr.c (yyreportSyntaxError): Reduce the scope of yysize1 (now
+	yysz).
 
-2006-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+2012-12-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/yacc.c (yy_reduce_print): Omit trailing white space in
-	generated source code.  Problem reported by Frans Englich in
-	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00049.html>.
+	gnulib: update
 
-2006-05-22  Paul Eggert  <eggert@cs.ucla.edu>
+2012-12-09  Akim Demaille  <akim@lrde.epita.fr>
 
-	* Makefile.maint (gzip_rsyncable, GZIP_ENV): Compute within the
-	shell, not within 'make', so that 'make' by an ordinary builder
-	(using GNU make) does not worry about configuring gzip.  This also
-	works around a bug reported independently by Keith Thompson and by
-	Georg Schwarz, whereby gzip 1.2.4 --help would output usage on
-	stderr rather than stdout, messing up the build logs.
+	news: prepare for forthcoming release
+	* NEWS: Fill paragraph.
+	Reorder.
+	Update examples.
+	Remove line for 2.6.90.
 
-2006-05-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+2012-12-09  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/yacc.c (yyparse): Wrap the final return from yyparse inside YYID
-	to make sure that YYID will never be unused.  This fixes a 'make
-	maintainer-check' failure caused by the recent changes to the 'Trivial
-	grammars' test case, which caused g++ 4.1.0 to complain that YYID was
-	not used.
-	* data/glr.c (yyparse): Wrap yyparse's return inside YYID just in case.
+	doc: explain how mid-rule actions are translated
+	* doc/bison.texi (Actions in Mid-Rule): Mention and use named references.
+	Split into three subsections, among which...
+	(Mid-Rule Action Translation): this new section.
 
-2006-05-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+2012-12-09  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/glr.c (yyresolveLocations): Remove bogus YYASSERT that the
-	state before an empty RHS is always resolved here.  Only the location
-	of that state is guaranteed to be resolved, and that's enough.  This
-	fixes the remaining bug reported by Derek M. Jones in
-	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00027.html>.
-	* tests/glr-regression.at (Uninitialized location when reporting
-	ambiguity): Test the above case.
-	Also, the embedded comments in this test case claim it checks the case
-	of an empty RHS that has inherited the initial location.  However, the
-	corresponding LHS was already resolved, so yyresolveLocations didn't
-	actually have reason to modify it.  Fix this by forcing
-	nondeterministic operation at the beginning of the parse.
+	error: use better locations for unused midrule values
+	On
 
-2006-05-20  Paul Eggert  <eggert@cs.ucla.edu>
+	  %%
+	  exp: {;} {$$;} { $$ = $1; }
 
-	* data/c.m4 (b4_yy_symbol_print_generate):
-	(b4_yy_symbol_print_generate): Use 'YYSTYPE const' rather than
-	'const YYSTYPE', and similarly for YYLTYPE.  This fixes one
-	of the bugs reported today by Derek M Jones in
-	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00027.html>.
-	* doc/bison.texinfo (Value Type): Document that YYSTYPE must be
-	defined to be a type name without parens or brackets.
-	(Location Type): Similarly for YYLTYPE.
-	* tests/regression.at (Trivial grammars): Put in a test for this
-	bug that will be caught by 'make maintainer-check' (though not,
-	alas, by 'make check' unless your compiler is picky).
+	instead of reporting (with -fcaret -Wmidrule-value)
 
-2006-05-19  Paul Eggert  <eggert@cs.ucla.edu>
+	  midrule.y:2.6-8: warning: unset value: $$ [-Wmidrule-values]
+	   exp: {;} {$$;} { $$ = $1; }
+	        ^^^
+	  midrule.y:2.6-27: warning: unused value: $2 [-Wmidrule-values]
+	   exp: {;} {$$;} { $$ = $1; }
+	        ^^^^^^^^^^^^^^^^^^^^^^
 
-	* NEWS: Version 2.2.
-	* configure.ac (AC_INIT): Likewise.
+	report
 
-2006-05-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+	  midrule.y:2.6-8: warning: unset value: $$
+	   exp: {;} {$$;} { $$ = $1; }
+	        ^^^
+	  midrule.y:2.10-14: warning: unused value: $2
+	   exp: {;} {$$;} { $$ = $1; }
+	            ^^^^^
 
-	* data/glr.c (yyreportTree): Make room in yystates for the state
-	preceding the RHS.  This fixes the segmentation fault reported by Derek
-	M. Jones in
-	<http://lists.gnu.org/archive/html/help-bison/2006-05/msg00035.html>.
-	(yyreportTree, yypdumpstack): Subtract 1 from yyrule before printing
-	to the user.  Reported for yyreportTree by Derek M. Jones later in the
-	same thread.
-	* THANKS: Add Derek M. Jones.
-	Update my email address.
-	Fix typo in Steve Murphy's name.
+	* src/reader.c (grammar_rule_check): When warning about the value of a
+	midrule action, use the location of the midrule action instead of the
+	location of the rule.
+	the location of the part of the rule.
+	* tests/actions.at (Default %printer and %destructor for mid-rule values):
+	Adjust expectations
+	* tests/input.at (Unused values with default %destructor): Ditto.
+	(AT_CHECK_UNUSED_VALUES): Ditto.
+	And use -fcaret.
 
-2006-05-14  Paul Eggert  <eggert@cs.ucla.edu>
+2012-12-09  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/glr.c (yyreportSyntaxError): Fix off-by-one error in
-	checking against YYLAST that caused the parser to miss a potential
-	alternative in its diagnostic.
-	Problem reported by Maria Jose Moron Fernandez in
-	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00024.html>.
-	* data/lalr1.cc (yysyntax_error_): Likewise.
-	* data/yacc.c (yysyntax_error): Likewise.
-	* tests/regression.at (_AT_DATA_DANCER_Y): Use static array for
-	tokens, in case we run into an older C compiler.
-	(_AT_DATA_EXPECT2_Y, AT_CHECK_EXPECT2): New macros.
-	Use them to check for the off-by-one error fixed above.
+	doc: various minor improvements and fixes
+	* doc/figs/example.dot, doc/figs/example.y: New.
+	* doc/bison.texi: Prefer "token" to TOKEN.
+	Use @group where appropriate.
+	Adjust with style changes in the output (State 0, not state 0).
+	Fix some @ref that were missing the third argument.
+	Fix some incorrect line numbers.
+	Use "nonterminal", not "non-terminal".
+	Fix overfull and underfull TeX hboxes.
+	Put the comments in the index.
+	Remove duplicate index entries.
+	Fuse glossary entries where appropriate.
+	(Understanding): Improve the continuity between sections.
+	Use example.dot to show the whole graph.
+	* doc/Makefile.am: Adjust.
 
-	* data/yacc.c (yytnamerr): Fix typo: local var should be of type
-	YYSIZE_T, not size_t.
-	* tests/regression.at (Trivial grammars): New test, to catch
-	the error fixed by the above patch.
+2012-12-09  Akim Demaille  <akim@lrde.epita.fr>
 
-2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+	tests: ignore more useless compiler warnings
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Ignore complains about
+	using c++ to compile C.
 
-	* doc/bison.texinfo (C++ Bison Interface): Clarify the naming
-	scheme.
-	Reported by Steve Murphy.
+2012-12-09  Akim Demaille  <akim@lrde.epita.fr>
 
-2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+	tests: be robust to C being compiled with a C++11 compiler
+	* tests/glr-regression.at: Use YY_NULL instead of NULL.
+	Comment changes.
 
-	* data/glr.cc, data/lalr1.cc: Using %defines is mandatory.
-	* data/glr.cc: b4_location_flag is now b4_locations_flag.
+2012-12-09  Akim Demaille  <akim@lrde.epita.fr>
 
-2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+	build: beware of Clang++ not supporting POSIXLY_CORRECT
+	* m4/c-working.m4 (BISON_LANG_COMPILER_POSIXLY_CORRECT): New.
+	(BISON_C_COMPILER_POSIXLY_CORRECT): Use it.
+	For consistency with C++, also define BISON_C_WORKS.
+	* m4/cxx.m4 (BISON_CXX_COMPILER_POSIXLY_CORRECT): New.
+	* configure.ac: Use it.
+	* tests/atlocal.in: Get its result.
+	Propagate properly CXX values when used to compile C.
+	When POSIXLY_CORRECT, adjust BISON_C_WORKS and BISON_CXX_WORKS.
+	* tests/local.at (AT_COMPILE): Use BISON_C_WORKS.
 
-	Implement --trace=m4.
-	* src/getargs.c (trace_types, trace_args): Accept trace_m4.
-	* src/output.c (output_skeleton): When set, pass -dV to m4.
+2012-12-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	Factor the handling of flags in m4.
-	* src/output.c (prepare): Rename the muscle names debug, defines,
-	error_verbose to debug_flag, defines_flag, error_verbose_flag.
-	* data/c.m4: Adjust.
-	(_b4_define_flag_if, b4_define_flag_if, b4_defines_if): New.
-	Use b4_define_flag_if to define other b4_FLAG_if macros.
-	(b4_location_if): As a consequence, rename as...
-	(b4_locations_if): this, for consistency.
-	Adjust all the skeletons.
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
 
-2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+2012-12-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* etc/bench.pm: Shorten bench names.
+	version 2.6.90
+	* NEWS: Record release date.
 
-2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+2012-12-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/output.h, src/output.c (error_verbose): Move to...
-	* src/getargs.h, src/getargs.c: here.
-	Sort the flags.
-	Adjust dependencies.
+	build: fix syntax-check error.
+	* cfg.mk: Exclude names-refs, it includes a "double" if (end of first
+	line, first of second line below).
 
-2006-05-13  Paul Eggert  <eggert@cs.ucla.edu>
+	test.y:43.12-44.59:  symbol not found in production: if
+	 if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+	            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-	* data/c.m4 (b4_copyright): Put the special exception for Bison
-	skeletons here, so we don't have to put it in each skeleton.  All
-	uses changed.  Suggested by Akim Demaille.  Also, wrap the
-	copyright notice, in case it is longer than 80 columns.  Replace
-	comma by newline after title.
+2012-12-07  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-2006-05-11  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (Calc++ Scanner): The flex behavior is an
-	incompatibility, not a bug.  Mention that it wasn't fixed as of
-	flex 2.5.33.
-
-2006-05-11  Akim Demaille  <akim@lrde.epita.fr>
-
-	* examples/extexi: Enforce the precedence of concatenation over
-	>>.
-	Reported by Tommy Nordgren.
-
-2006-05-11  Akim Demaille  <akim@lrde.epita.fr>
-
-	* data/lalr1.cc (yytranslate_): Rename token as t to avoid clashes
-	with the member "token".
-	Reported by Martin Nylin.
-
-2006-05-08  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c: Switch to Bison 2.2 special-exception language in
-	the copyright notice.  Use more-regular format for titles and
-	copyright notices.
-	* data/glr.cc: Likewise.
-	* data/location.cc: Likewise.
-	* data/yacc.cc: Likewise.
-	* doc/bison.texinfo (Conditions): Document this.
-	* NEWS: likewise.  Upgrade version to 2.2.
-
-2006-04-27  Akim Demaille  <akim@lrde.epita.fr>
-
-	* data/glr.cc: Remove dead code.
-
-2006-04-25  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* bootstrap: Comment out the AM_CPPFLAGS line, since we don't use
-	that variable and the line breaks the bootstrap.  Problem reported
-	by Juan M. Guerrero.
-
-2006-04-24  Akim Demaille  <akim@lrde.epita.fr>
-
-	* doc/bison.texinfo (Multiple start-symbols): New.
-
-2006-04-24  Akim Demaille  <akim@lrde.epita.fr>
-
-	* etc/README, etc/bench.pl: New.
-
-2006-04-03  Akim Demaille  <akim@lrde.epita.fr>
-
-	* src/scan-gram.l: Be robust to BRACED_CODE appearing before any
-	rule.
-	Reported by Mickael Labau.
-	* tests/input.at (Torturing the Scanner): Test it.
-
-2006-03-16  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (Decl Summary): Don't mention yylloc twice.
-	Problem reported by Bob Rossi.
-
-2006-03-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo: Remove @shorttitlepage stuff; it wasn't used
-	and didn't really work.
-	For the index, use @ifnotinfo, not @iftex.
-	Minor cleanups of spacing and terminology.
-
-2006-03-12  Akim Demaille  <akim@lrde.epita.fr>
-
-	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Fix the definition
-	of AT_NAME_PREFIX when %name-prefix is not used.
-
-2006-03-12  Akim Demaille  <akim@lrde.epita.fr>
-
-	Apply --prefix to C++ skeletons too: they change the namespace.
-	The test suite already exercize these cases.
-	* data/c++.m4 (b4_namespace): New.
-	* data/lalr1.cc, data/glr.cc, data/location.cc: Use it instead of `yy'.
-	* data/lalr1.cc (yytnameerr_): Move its definition into the namespace.
-	* data/yacc.c, data/glr.c: Remove a useless `[]'.
-	* doc/bison.texinfo: Document it.
-	(Option Cross Key): Use @multitable in all formats.  It looks
-	nicer, even in TeX outputs.
-	(Rules): Use the same code whatever the output type is.
-	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS)
-	(_AT_BISON_OPTION_POPDEFS): Support AT_NAME_PREFIX.
-	* tests/calc.at: Use it, instead of hard coding `yy'.
-
-2006-03-10  Akim Demaille  <akim@lrde.epita.fr>
-
-	* TODO: Remove dead items.
-
-2006-03-10  Akim Demaille  <akim@lrde.epita.fr>
-
-	* doc/FAQ: Remove, merged into...
-	* doc/bison.texinfo (FAQ): this.
-	* doc/Makefile.am (EXTRA_DIST): Adjust.
-
-2006-03-10  Akim Demaille  <akim@lrde.epita.fr>
-
-	* data/c.m4 (b4_token_enum): Always define the enum of tokens,
-	even if empty.
-	* data/lalrl1.cc, data/glr.cc (parser::token_type): New.
-	* doc/bison.texinfo (Calc++ Scanner): Use it.
-
-2006-03-09  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix two nits reported by twlevo, plus one more that I discovered.
-
-	* src/assoc.h (assoc_to_string): Give a name to the arg, as
-	this is the usual Bison style.
-	* src/location.h (location_print): Likewise.
-
-	* src/reader.h (token_name): Likewise.
-
-2006-03-08  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix some nits reported by twlevo.
-	* doc/FAQ: Remove ancient Y2K FAQ, replacing it with "secure"
-	and "POSIX".  Use more-modern syntax for URLs.  Mention C++
-	and ask for Java.  Don't hardwire OS version numbers.  Add
-	copyright notice.
-	* m4/.cvsignore: Add unistd_h.m4, for latest gnulib.
-	* src/conflicts.c (solved_conflicts_obstack): Now static.
-
-2006-03-08  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* doc/bison.texinfo (Introduction): Mention GLR and C++ as on the web
-	page.  Say "you can use it" not "you may use it" as on the web page;
-	we're describing capabilities not granting permission.
-
-2006-03-06  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yyresolveLocations): Rename local variables to avoid
-	shadowing warnings.  Use usual patter for iterating through RHS.
-	* tests/glr-regression.at
-	(Uninitialized location when reporting ambiguity):
-	Modify yylex so that it uses its argument, rather than trying
-	to rely on ARGSUSED (which doesn't work for gcc with warnings).
-	const char -> char const.
-
-	* tests/Makefile.am ($(srcdir)/package.m4, maintainer-check-valgrind):
-	Don't use tabs inside commands; it messes up 'ps'.
-	Problem reported by twlevo.
-
-2006-03-06  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* tests/glr-regression.at (Uninitialized location when reporting
-	ambiguity): New test case.
-	* data/glr.c (yyresolveLocations): New function, which uses
-	YYLLOC_DEFAULT.
-	(yyresolveValue): Invoke yyresolveLocations before reporting an
-	ambiguity.
-	* doc/bison.texinfo (Default Action for Locations): Note
-	YYLLOC_DEFAULT's usage for ambiguity locations.
-	(GLR Semantic Actions): Cross-reference those notes.
-
-2006-03-04  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* tests/glr-regression.at (Leaked semantic values when reporting
-	ambiguity): Remove unnecessary union and type declarations.
-	(Leaked lookahead after nondeterministic parse syntax error): New test
-	case.
-	* data/glr.c (yyparse): Check for zero stacks remaining before
-	attempting to shift the lookahead so that you don't lose it.
-
-2006-03-02  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	Avoid memory leaks by not invoking longjmp in yyreportAmbiguity.
-	* tests/glr-regression.at (Leaked semantic values when reporting
-	ambiguity): New test case.
-	* data/glr.c (yyreportAmbiguity): Invoke yyyerror directly and return
-	yyabort rather than invoking yyFail, which invokes longjmp.  Remove the
-	now unnecessary yystackp parameter.
-	(yyresolveValue): Return yyreportAmbiguity's result.  Now the necessary
-	destructors can be called.
-
-	* tests/glr-regression.at: Don't invoke bison with `-t' unnecessarily
-	in existing testcases.
-
-2006-03-02  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	Don't leak semantic values for parent RHS when a user action cuts the
-	parser, and clean up related code a bit.
-	* tests/glr-regression.at (Leaked merged semantic value if user action
-	cuts parse): Rename to...
-	(Leaked semantic values if user action cuts parse): ... this.  Add check
-	for leaked parent RHS values.
-	* data/glr.c (yydestroyGLRState): In debugging output, distinguish
-	between an unresolved state (non-empty chain of semantic options) and
-	an incomplete one (signaled by an empty chain).
-	(yyresolveStates): Document the interface.  Move all manipulation of a
-	successfully or unsuccessfully resolved yyGLRState to...
-	(yyresolveValue): ... here so that yyresolveValue always leaves a
-	yyGLRState with consistent data and thus is easier to understand.
-	Remove the yyvalp and yylocp parameters since they are always just
-	taken from the yys parameter.  When reporting a discarded merged value
-	in debugging output, note that it is incompletely merged.  Document the
-	interface.
-	(yyresolveAction): If resolving any of the RHS states fails, destroy
-	them all rather than leaking them.  Thus, as long as user actions are
-	written to clean up the RHS correctly, yyresolveAction always cleans up
-	the RHS of a semantic option.  Document the interface.
-
-2006-02-27  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yyexpandGLRStack): Catch an off-by-one error that
-	led to a segmentation fault in GNU Pascal.  Problem reported
-	by Waldek Hebisch.
-
-2006-02-21  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* doc/bison.texinfo (Mid-Rule Actions): Explain how to bury a
-	mid-rule action inside a nonterminal symbol in order to declare a
-	destructor for its semantic value.
-
-2006-02-16  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c [(! defined yyoverflow || YYERROR_VERBOSE) && !
-	YYSTACK_USE_ALLOCA && ! defined YYSTACK_ALLOC && defined
-	__cplusplus && ! defined _STDLIB_H && !
-	((defined YYMALLOC || defined malloc) && (defined YYFREE ||
-	defined free))]: Include <stdlib.h> rather than rolling our own
-	declarations of malloc and free, to avoid problems with
-	incompatible declarations (using 'throw') C++'s stdlib.h.  This
-	should fix Debian bug 340012
-	<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=340012>,
-	reported by Guillaume Melquiond.
-
-2006-02-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Clarify symbols versus types in unused-value warnings.
-
-	* configure.ac (AC_INIT): Bump version number.
-
-2006-02-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Version 2.1a.
-	* tests/headers.at (AT_TEST_CPP_GUARD_H): Declare yyerror and yylex,
-	since C99 requires this.
-
-2006-02-11  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* m4/c-working.m4: New file.
-	* configure.ac (BISON_TEST_FOR_WORKING_C_COMPILER): Use it.
-
-2006-02-10  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* Makefile.maint: Merge from coreutils.
-
-2006-02-09  Paul Eggert  <eggert@cs.ucla.edu>
-
-	More portability fixes for problems summarized by Nelson H. F. Beebe.
-
-	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Catch a
-	configuration screwup "./configure CC=/opt/SUNWspro/bin/c89
-	CFLAGS="-xarch=generic64" CXX=/opt/SUNWspro/bin/CC
-	LDFLAGS="-xarch=generic64" with Sun C 5.7 on Solaris 10; this
-	messes up because C++ code is compiled in 32-bit mode but linked
-	in 64-bit mode.
-
-2006-02-08  Paul Eggert  <eggert@cs.ucla.edu>
-
-	More portability fixes for problems summarized by Nelson H. F. Beebe.
-
-	* doc/bison.texinfo (Calc++ Scanner): Work around a bug in flex
-	2.5.31.  This resembles the 2005-10-10 patch to src/scan-skel.l.
-
-	* examples/calc++/Makefile.am (check_PROGRAMS): Renamed from
-	nodist_PROGRAMS, since we don't need to actually compile the
-	example if we're just doing a plain 'make'.  This avoids bothering
-	the installer unnecessarily about problems due to weird C++
-	compilers.
-
-2006-02-06  Paul Eggert  <eggert@cs.ucla.edu>
-
-	More portability fixes for problems summarized by Nelson H. F. Beebe.
-
-	* tests/headers.at (AT_TEST_CPP_GUARD_H): Use #include <...> rather
-	than #include "...", and compile with -I'.'.  The old method was
-	not portable, according to Posix and the C standard, and it does
-	not work with Sun C 5.7, where previous #line directives affect
-	the working directory used in later #include "..." directives.
-
-2006-02-06  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
-
-	Various DJGGP specific issues in /djgpp
-
-2006-02-02  Paul Eggert  <eggert@cs.ucla.edu>
-
-	More portability fixes for problems summarized by Nelson H. F. Beebe.
-
-	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Check that
-	'#include <map>' works and that you can apply ++ to iterators.
-
-2006-02-01  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Work around portability problems summarized by Nelson H. F. Beebe in
-	<http://lists.gnu.org/archive/html/bug-bison/2005-09/msg00021.html>.
-
-	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Check
-	that '#include <string>' works.
-
-	* data/lalr1.cc (yytranslate_): No longer inline, to work around a
-	porting problem to g++ 3.4.3 on Darwin 7.9.0, where g++ complained
-	"warning: sorry: semantics of inline function static data `const
-	unsigned char translate_table[262]' are wrong (you'll wind up with
-	multiple copies)".
-
-	* lib/bbitset.h (struct bitset_vtable): Rename members not, and,
-	or, xor to not_, and_, or_, and xor_, respectively.  This works
-	around a bug in GCC 3.4.3 on Irix 6.5, which apparently has a
-	random system header somewhere that includes the equivalent of
-	<iso646.h>.
-
-	* tests/headers.at (AT_TEST_CPP_GUARD_H): Don't assume that "$CC
-	-E" works; it apparently doesn't work with PathScale EKO Compiler
-	Suite Version 2.0.
-
-2006-01-30  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	During deterministic GLR operation, user actions should be able to
-	influence the parse by changing yychar.  To make this easier to fix and
-	to make glr.c easier to evolve in general, don't maintain yytoken in
-	parallel with yychar; just compute yytoken when needed.
-	* tests/glr-regression.at (Incorrect lookahead during deterministic
-	GLR): Check that setting yychar in a user action has the intended
-	effect.
-	* data/glr.c (yyGLRStack): Remove yytokenp member.
-	(yyclearin): Don't set *yytokenp.
-	(yyprocessOneStack, yyreportSyntaxError, yyrecoverSyntaxError): Examine
-	yychar rather than *yytokenp to determine the current lookahead.
-	Compute yytoken locally when needed.
-	(yyparse): Likewise.  Remove the local yytoken that yytokenp used to
-	point to.
-
-	* doc/bison.texinfo (Bison Options): Remove stray sentence fragment
-	after `--report' documentation.
-
-2006-01-30  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/parse-gram.y (grammar_declaration): Location of printer
-	symbol is @1, not list->location.  Bug reported by twlevo.
-	* tests/input.at (Incompatible Aliases): Adjust to above change.
-
-2006-01-29  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/input.at (AT_CHECK_UNUSED_VALUES): Remove.  Instead, do
-	all the test at once.  This makes the output easier to read in the
-	normal case.
-
-	Fix a longstanding bug uncovered by bro-0.9a9/src/parse.y, which I
-	got from <http://bro-ids.org/download.html>.  The bug is that
-	when two actions appeared in succession, the second one was
-	scanned before the first one was added to the grammar rule
-	as a midrule action.  Bison then output the incorrect warning
-	"parse.y:905.17-906.36: warning: unused value: $3".
-	* src/parse-gram.y (BRACED_CODE, action): These are no longer
-	associated with a value.
-	(rhs): Don't invoke grammar_current_rule_action_append.
-	(action): Invoke it here instead.
-	* src/reader.c (grammar_midrule_action): Now extern.
-	(grammar_current_rule_action_append): Don't invoke
-	grammar_midrule_action; that is now the scanner's job.
-	* src/reader.h (last_string, last_braced_code_loc):
-	(grammar_midrule_action): New decls.
-	* src/scan-gram.l (last_string): Now extern, sigh.
-	(last_braced_code_loc): New extern variable.
-	(<INITIAL>"{"): Invoke grammar_midrule_action if the current
-	rule already has an action.
-	(<SC_BRACED_CODE>"}"): Set last_braced_code_loc before returning.
-	* tests/input.at (AT_CHECK_UNUSED_VALUES):
-	Add some tests to check that the above changes fixed the bug.
-
-2006-01-27  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/reader.c (symbol_should_be_used): Renamed from symbol_typed_p.
-	All used changed.  Check whether the symbol has a destructor,
-	not whether it is typed.
-	* tests/input.at (AT_CHECK_UNUSED_VALUES): Add a destructor, so
-	that the values are still reported as unused.  All line numbers
-	adjusted.
-
-2006-01-23  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Work around a bug in bro 0.8, which underparenthesizes its
-	definition of YYLLOC_DEFAULT.
-	* data/glr.c: Change all uses of YYLLOC_DEFAULT to parenthesize
-	their arguments.
-	* data/lalr1.cc: Likewise.
-	* data/yacc.cc: Likewise.
-
-2006-01-22  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Work around a bug in Pike 7.0, and give the Pike folks a
-	better way to override the usual int widths.
-	* data/yacc.c (b4_int_type): Use yytype_uint8, etc., so that the
-	user can override the types.
-	(short): #undef, to work around a bug in Pike 7.0.
-	(yytype_uint8, yytype_int8, yytype_uint16, yytype_int16): New types.
-	(union yyalloc.yyss): Use yytype_int16 rather than short.
-	All uses changed.
-	(yysigned_char): Remove.
-	* src/parse-gram.y (YYTYPE_UINT8, YYTYPE_INT8, YYTYPE_UINT16):
-	(YYTYPE_INT16): New macros, to test the new facility in yacc.c.
-	* tests/regression.at (Web2c Actions): Adjust to above changes.
-
-	* src/reader.c (check_and_convert_grammar): New function.
-	(reader): Close the input file even if something went wrong during
-	parsing.  Minor file descriptor leak reported by twlevo.
-
-	* src/assoc.c (assoc_to_string): Use a default: abort (); case
-	to pacify gcc -Wswitch-default.
-	* src/scan-gram.l (adjust_location): Use a default: break; case
-	to pacify gcc -Wswitch-default.
-	* src/scan-skel.h (skel_get_lineno, skel_get_in, skel_get_out):
-	(skel_get_leng, skel_get_text, skel_set_lineno, skel_set_in):
-	(skel_set_out, skel_get_debug, skel_set_debug, skel_lex_destroy):
-	Move these decls to scan-skel.l, since they don't need to be
-	visible elsewhere.
-	* src/scan-skel.l: Accept the above decls.
-	(skel_lex): New decl, to pacify GCC when unpatched flex 2.5.31
-	is used.
-
-2006-01-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* Makefile.cfg (local-checks-to-skip): Add changelog-check,
-	since we don't want to insist on a version number at the start
-	of the changelog every time.
-	* Makefile.maint: Sync from coreutils a bit better.
-	(sc_trailing_blank): Renamed from sc_trailing_space.
-	All uses changed.
-	(sc_no_if_have_config_h, sc_require_config_h):
-	(sc_prohibit_assert_without_use): New rules.
-	(sc_obsolete_symbols): Don't catch Makefile.maint itself.
-	(sc_dd_max_sym_length): Fix leading spaces in rule.
-	(sc_system_h_headers): Prefix with @.
-	(sc_useless_cpp_parens, m4-check): Output line numbers.
-	(changelog-check): Allow version only in head.
-	* data/c.m4: Use "defined FOO" instead of "defined (FOO)", to
-	satisfy new Makefile.maint rule.
-	* data/glr.c: Likewise.
-	* data/glr.cc: Likewise.
-	* data/lalr1.cc: Likewise.
-	* data/yacc.c: Likewise.
-	* lib/ebitsetv.c: Likewise.
-	* lib/lbitset.c: Likewise.
-	* lib/subpipe.c: Likewise.
-	* lib/timevar.c: Likewise.
-	* src/system.h: Likewise.
-	* data/yacc.c (YYSTYPE): Don't generate trailing spaces in output.
-	* djgpp/Makefile.maint: Add copyright notice.
-	* djgpp/README.in: Likewise.
-	* djgpp/config.bat: Likewise.
-	* djgpp/config.site: Likewise.
-	* djgpp/config_h.sed: Likewise.
-	* djgpp/djunpack.bat: Likewise.
-	* djgpp/config.sed: Fix copyright notice to match standard format.
-	* djgpp/subpipe.h: Likewise.
-	* lib/bitsetv-print.c: Likewise.
-	* lib/bitsetv.c: Likewise.
-	* lib/subpipe.h: Likewise.
-	* lib/timevar.c: Likewise.
-	* lib/timevar.h: Likewise.
-	* djgpp/subpipe.c: Use standard recipe for config.h.
-	* lib/abitset.c: Likewise.
-	* lib/bitset.c: Likewise.
-	* lib/bitset_stats.c: Likewise.
-	* lib/bitsetv-print.c: Likewise.
-	* lib/bitsetv.c: Likewise.
-	* lib/ebitsetv.c: Likewise.
-	* lib/get-errno.c: Likewise.
-	* lib/lbitset.c: Likewise.
-	* lib/subpipe.c: Likewise.
-	* lib/timevar.c: Likewise.
-	* lib/vbitset.c: Likewise.
-	* tests/local.at: Likewise.
-	* src/scan-gram.l: Don't include verify.h, since system.h does
-	that for us.
-	* .x-sc_require_config_h: New file.
-	* .x-sc_unmarked_diagnostics: New file.
-
-2006-01-20  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Be a bit more systematic about using 'abort'.
-	* lib/abitset.c (abitset_test): Remove ATTRIBUTE_UNUSED; not needed.
-	* lib/bitset.c (bitset_bytes, bitset_init, bitset_op4_cmp):
-	Put 'default: abort ();' before some other case, to satisfy older
-	pedantic compilers.
-	* lib/bitset_stats.c (bitset_stats_init): Likewise.
-	* lib/ebitset.c (ebitset_elt_find, ebitset_op3_cmp): Likewise.
-	* lib/lbitset.c (lbitset_elt_find, lbitset_op3_cmp): Likewise.
-	* src/conflicts.c (resolve_sr_conflict): Likewise.
-	* src/vcg.c (get_color_str, get_textmode_str, get_shape_str):
-	(get_decision_str, get_orientation_str, get_node_alignment_str):
-	(get_arrow_mode_str, get_crossing_type_str, get_view_str):
-	(get_linestyle_str, get_arrowstyle_str): Likewise.
-	* src/conflicts.c (resolve_sr_conflict):
-	Use a default case rather than one for the one remaining enum
-	value, to catch invalid enum values as well.
-	* src/lalr.c (set_goto_map, map_goto):
-	Prefer "assert (FOO);" to "if (!FOO) abort ();".
-	* src/nullable.c (nullable_compute, token_definitions_output):
-	Likewise.
-	* src/reader.c (packgram, reader): Likewise.
-	* src/state.c (transitions_to, state_new, state_reduction_find):
-	Likewise.
-	* src/symtab.c (symbol_user_token_number_set, symbol_make_alias):
-	(symbol_pack): Likewise.
-	* src/tables.c (conflict_row, pack_vector): Likewise.
-	* src/scan-skel.l (QPUTS): Remove unnecessary parens.
-	(BASE_QPUTS, "@output ".*\n): Remove unnecessary asserts.
-	* src/system.h: Don't include <assert.h>.
-	(assert): New macro.
-
-	* doc/bison.texinfo (Prologue, Rules, Actions, Union Decl, Action Decl):
-	(Destructor Decl, Parser Function, Pure Calling):
-	Describe rules for braces inside C code more carefully.
-
-2006-01-19  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix some porting glitches found by Nelson H. F. Beebe.
-	* lib/abitset.c (abitset_resize): Rewrite to avoid warnings from
-	compilers that don't understand that abort () does not return.
-	* src/state.c (transitions_to): Likewise.
-	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Check
-	that '#include <cstdlib>' works.
-	* src/system.h (INT8_MIN, INT16_MIN, INT32_MIN, INT8_MAX):
-	(INT16_MAX, UINT8_MAX, INT32_MAX, UINT16_MAX, UINT32_MAX):
-	#undef if ! defined __STDC_VERSION__ || __STDC_VERSION__ < 199901,
-	for the benefit of some pre-C99 compilers.
-
-	* bootstrap: Undo changes to gnulib files that autoreconf made.
-
-	Minor fixups to get 'make maintainer-check' to work.
-	* configure.ac: Don't use -Wnested-externs, as it's incompatible
-	with the new verify.h implementation.
-	* data/c.m4 (b4_yy_symbol_print_generate): YYUSE (yyoutput).
-	* data/glr.c (YYUSE): Depend on __GNUC__ as well.
-	* data/yacc.c (YYUSE): Likewise.
-	* data/lalr1.cc (yysyntax_error_): YYUSE (yystate).
-	* lib/subpipe.c (end_of_output_subpipe): The args are unused.
-	* src/parse-gram.y (declaration): Don't pass a string constant
-	to a function that expects char *, since GCC might complain
-	about the constant value.
-	* src/reader.c (symbol_typed_p): Add parens to pacify GCC.
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): #undef yylloc and yylval
-	before #defining them.
-	* tests/glr-regression.at
-	(Incorrectly initialized location for empty right-hand side in GLR):
-	In yyerror, use the msg arg.
-	(Corrupted semantic options if user action cuts parse):
-	(Incorrect lookahead during deterministic GLR):
-	(Incorrect lookahead during nondeterministic GLR):
-	Don't name a local var 'index'; it shadows string.h's 'index'.
-
-2006-01-19  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at (_AT_DATA_CALC_Y): Initialize the whole initial
-	location, not just parts of it.
-
-2006-01-18  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Document the fact that multiple %unions are now allowed.
-	* doc/bison.texinfo (Union Decl): Likewise.
-	* TODO: This feature is now implemented, so remove it from
-	the wishlist.
-
-	* Makefile.maint: Merge with coreutils Makefile.maint.
-	(CVS_LIST): Use build-aux version if available.
-	(VERSION_REGEXP): New macro.
-	(syntax-check-rules): Add sc_no_if_have_config_h,
-	sc_prohibit_assert_without_use, sc_require_config_h,
-	sc_useless_cpp_parens.
-	(sc_obsolete_symbols): Check for O_NDELAY.
-	(sc_dd_max_sym_length): Track coreutils.
-	(sc_unmarked_diagnostics): Look in all files, not just *.c.
-	(sc_useless_cpp_parens): New rule.
-	(news-date-check): Look for version or today's date.
-	(changelog-check): Don't require version number near head.
-	(copyright-check): Use current year instead of hardwiring 2005.
-	(my-distcheck): Depend on $(release_archive_dir)/$(prev-tgz).
-	(announcement): Add --gpg-key-ID.
-
-	* djgpp/config.sed: Add copyright notice, and replace "filesystem"
-	with "file system".
-
-	Avoid undefined behavior that addressed just before the start of an
-	array.  Problem reported by twlevo.
-	* src/reader.c (packgram): Prepend a new sentinel before ritem.
-	* src/lalr.c (build_relations): Rely on new sentinel.
-	* src/gram.c (gram_free): Adjust to new sentinel.
-
-2006-01-12  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* data/glr.c (yyGLRStateSet): Rename yylookaheadStatuses to
-	yylookaheadNeeds.  All uses updated.
-	(yysplitStack): Rename local yynewLookaheadStatuses to
-	yynewLookaheadNeeds.
-	* data/glr-regression.at (Incorrect lookahead during nondeterministic
-	GLR): In comments, change `lookahead status' to `lookahead need'.
-
-2006-01-11  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
-
-	* data/glr.c (yysplitStack): A little stylistic rewrite.
-
-2006-01-11  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
-
-	* data/glr.c (yyaddDeferredAction): Flesh out the comment.
-
-2006-01-11  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* doc/bison.texinfo: Fix some typos.
-	(GLR Semantic Actions): New subsection discussing special
-	considerations because GLR semantic actions might be deferred.
-	(Actions): Mention look-ahead usage of yylval.
-	(Actions and Locations): Mention look-ahead usage of yylloc.
-	(Special Features for Use in Actions): Add YYEOF entry and mention it
-	in the yychar entry.
-	In the yychar entry, remove mention of the local yychar case (pure
-	parser) since this is irrelevant information when writing semantic
-	actions and since it's already discussed in `Bison Symbols' where
-	yychar is otherwise described as an external variable.
-	In the yychar entry, don't call it the `current' look-ahead since it
-	isn't when semantic actions are deferred.
-	In the yychar and yyclearin entries, add note about deferred semantic
-	actions.
-	Add yylloc and yylval entries discussing look-ahead usage.
-	(Look-Ahead Tokens): When discussing yychar, don't call it the
-	`current' look-ahead, and do mention yylval and yylloc.
-	(Error Recovery): Cross-reference `Action Features' when mentioning
-	yyclearin.
-	(Bison Symbols): In the yychar entry, don't call it the `current'
-	look-ahead.
-	In the yylloc and yylval entries, mention look-ahead usage.
-
-2006-01-08  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* tests/glr-regression.at: Update copyright year to 2006.
-
-2006-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* data/glr.c (yyGLRStateSet): Add yybool* yylookaheadStatuses member to
-	use during nondeterministic operation to track which stacks have
-	actually needed the current lookahead.
-	(yyinitStateSet, yyfreeStateSet, yyremoveDeletes, yysplitStack):
-	Allocate, deallocate, resize, and otherwise shuffle space for
-	yylookaheadStatuses in parallel with yystates member of yyGLRStateSet.
-	(yysplitStack, yyprocessOneStack, yyparse): Set lookahead status
-	appropriately during nondeterministic operation.
-	(yySemanticOption): Add int yyrawchar, YYSTYPE yyval, and YYLTYPE yyloc
-	members to store the current lookahead to be used by the deferred
-	user action.
-	(yyaddDeferredAction): Add size_t yyk parameter specifying the stack
-	from which the RHS is taken.  Set the lookahead members of the new
-	yySemanticOption according to the lookahead status for stack yyk.
-	(yyglrShiftDefer, yyglrReduce): Pass yyk parameter on to
-	yyaddDeferredAction.
-	(yyresolveAction): Set yychar, yylval, and yylloc to the lookahead
-	members of yySemanticOption before invoking yyuserAction, and then set
-	them back to their current values afterward.
-	(yyparse): Set yychar = YYEMPTY where yytoken = YYEMPTY.
-	(yyreportAmbiguity): Add /*ARGSUSED*/ to pacify lint.
-	* tests/glr-regression.at: Remove `.' from the ends of recent test case
-	titles for consistency.
-	(Leaked merged semantic value if user action cuts parse): In order to
-	suppress lint warnings, use arguments in merge function, and assign
-	char value < 128 in main.
-	(Incorrect lookahead during deterministic GLR): New test case.
-	(Incorrect lookahead during nondeterministic GLR): New test case.
-
-2006-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* data/c.m4 (b4_yy_symbol_print_generate): In yy_symbol_print, accept
-	!yyvaluep as signal that no semantic value is available to print.
-	* data/glr.c (yydestroyGLRState): If state is not resolved, don't try
-	to print a semantic value.
-
-2006-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* tests/glr-regression.at: For consistency with my newer test cases,
-	don't thank myself.
-
-2006-01-05  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* data/glr.c (yyresolveValue): When merging semantic options, if at
-	least one user action succeeds but a later one cuts the parse, then
-	destroy the semantic value before returning rather than leaking it.
-	(yyresolveStates): If a user action cuts the parse and thus
-	yyresolveValue fails, ignore the (unset) semantic value rather than
-	corrupting the yyGLRState, and empty the semantic options list since
-	the user actions should have called all necessary destructors.
-	Simplify code with YYCHK.
-	* tests/glr-regression.at (Corrupted semantic options if user action
-	cuts parse): New test case.
-	(Undesirable destructors if user action cuts parse): New test case.
-	Before applying any of this patch, this test case never actually failed
-	for me... but only because the corrupted semantic options usually
-	masked this bug.
-	(Leaked merged semantic value if user action cuts parse): New test
-	case.
-
-2006-01-05  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c, src/symlist.h, src/symlist.c: s/mid_rule/midrule/.
-
-2006-01-04  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/c.m4 (b4_c_modern): New macro, with a new provision for
-	_MSC_VER.  Problem reported by Cenzato Marco.
-	(b4_c_function_def): Use it.
-	* data/yacc.c (YYMODERN_C): Remove.  All uses replaced by
-	b4_c_modern.
-	(yystrlen, yystpcpy, yyparse): Use b4_c_function... macros rather
-	than rolling our own.
-
-2006-01-04  Akim Demaille  <akim@epita.fr>
-
-	Also warn about non-used mid-rule values.
-	* src/symlist.h, src/symlist.c (symbol_list): Add a mid_rule
-	member.
-	(symbol_list_new): Adjust.
-	* src/reader.c (symbol_typed_p): New.
-	(grammar_rule_check): Use it.
-	(grammar_midrule_action): Bind a mid-rule LHS to its rule.
-	Check its rule.
-	* tests/input.at (AT_CHECK_UNUSED_VALUES): New.
-	Use it.
-	* tests/actions.at (Exotic Dollars): Adjust.
-
-2006-01-04  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (grammar_midrule_action): If $$ is set in a
-	mid-rule, move the `used' bit to its lhs.
-	* tests/input.at (Unused values): New.
-	* tests/actions.at (Exotic Dollars): Adjust: exp is not typed.
-
-2006-01-03  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (Bison Options): Say more accurately what
-	--yacc does.
-	* src/parse-gram.y (rules_or_grammar_declaration): Don't complain
-	about declarations in the grammar when in Yacc mode, as POSIX does
-	not require a diagnostic when the grammar uses extensions.
-
-	* src/reduce.c (reduce_grammar): Remove unnecessary cast to bool.
-
-	Warn about dubious constructions like "%token T T".
-	Reported by twlevo.
-	* src/symtab.h (struct symbol.declared): New member.
-	* src/symtab.c (symbol_new): Initialize it to false.
-	(symbol_class_set): New arg DECLARING, specifying whether
-	this is a declaration that we want to warn about, if there
-	is more than one of them.  All uses changed.
-
-	* data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c:
-	Allow multiple %union directives, whose contents concatenate.
-	* src/parse-gram.y (grammar_declaration): Likewise.
-	Use muscle_code_grow, so that we don't need stype_line any more.
-	All uses changed.
-
-	* src/muscle_tab.c (muscle_grow): Fix comment.
-
-	* ChangeLog, data/c.m4, data/glr.c, data/glr.cc, data/location.cc:
-	* data/yacc.c, src/getargs.c, src/output.c, tests/cxx-type.at:
-	Update copyright year to 2006.
-
-2006-01-03  Akim Demaille  <akim@epita.fr>
-
-	Have glr.cc pass (some of) the calc.at tests.
-	* data/glr.cc (b4_parse_param_orig): New.
-	(b4_parse_param): Improve its definition, and bound it more
-	clearly in the skeleton.
-	(b4_epilogue): Append, instead of prepending, in order to keep
-	#line consistency.
-	Simplify the generation of auxiliary functions: locations and
-	purity are mandated.
-	(b4_global_tokens_and_yystype): Honor it.
-	* data/location.cc (c++.m4): Don't include it.
-	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Define AT_GLR_CC_IF
-	and AT_SKEL_CC_IF.
-	* tests/calc.at (AT_CHECK_CALC): Rely on AT_SKEL_CC_IF instead of
-	AT_LALR1_CC_IF.
-	Be sure to initialize the first position's filename.
-	(AT_CHECK_CALC_LALR1_CC): Add %location and %defines, they are
-	mandated anyway.
-	(AT_CHECK_CALC_GLR_CC): New.
-	Use it to exercise glr.cc as a lalr1.cc drop-in replacement.
-
-2006-01-02  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_skeleton): Don't hard wire the inclusion of
-	c.m4.
-	* data/c++.m4, data/glr.c, data/yacc.c: Include c.m4.
-	* data/glr.cc: Do not include stack.hh.
-
-2006-01-02  Joel E. Denny  <jdenny@ces.clemson.edu>
-
-	* data/glr.c: Reformat whitespace with tabs.
-	(b4_lpure_formals): Remove this unused m4 macro.
-	* tests/cxx-type.at: Reformat whitespace with tabs.
-	(_AT_TEST_GLR_CXXTYPES): In union Node, rename node_info to nodeInfo
-	since it's a member.  Rename type to isNterm for clarity.
-
-2005-12-29  Akim  <akim@sulaco.local>
-
-	Let glr.cc catch up with symbol_value_print.
-	* data/glr.cc (b4_yysymprint_generate): Replace by...
-	(b4_yy_symbol_print_generate): this.
-	(yy_symbol_print, yy_symbol_value_print): Declare them.
-
-2005-12-28  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/location.h (boundary): Note that a line or column equal
-	to INT_MAX indicates an overflow.
-	* src/scan-gram.l: Include verify.h.  Don't include get-errno.h.
-	(rule_length_overflow, increment_rule_length, add_column_width):
-	New functions.
-	(<INITIAL>{id}, <SC_ESCAPED_STRING>"\"", <SC_ESCAPED_CHARACTER>"'"):
-	(<SC_BRACED_CODE>"}"):
-	Use increment_rule_length rather than incrementing it by hand.
-	(adjust_location, handle_syncline): Diagnose overflow.
-	(handle_action_dollar, handle_action_at):
-	Fix bug with monstrosities like $-2147483648.
-	Remove now-unnecessary checks.
-	(scan_integer): Verify assumptions and remove now-unnecessary checks.
-	(convert_ucn_to_byte): Verify assumptions.
-	(handle_syncline): New arg LOC.  All callers changed.
-	Don't store through a value derived from char const * pointer.
-
-	* src/reader.c (grammar_rule_check): Rewrite slightly to avoid
-	GCC warnings.
-
-2005-12-27  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/reader.c (grammar_midrule_action, grammar_symbol_append):
-	Remove unnecessary forward static decls.
-
-2005-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (grammar_current_rule_check): Also check that $$
-	is used.
-	Take the rule to check as argument, hence rename as...
-	(grammar_rule_check): this.
-	* src/reader.h, src/reader.c (grammar_rule_begin, grammar_rule_end):
-	Rename as...
-	(grammar_rule_begin, grammar_rule_end): these, for consistency.
-	(grammar_midrule_action, grammar_symbol_append): Now static.
-	* tests/torture.at (input): Don't rely on the default action
-	being always performed.
-	* tests/calc.at: "Set" $$ even when the action is "cut" with
-	YYERROR or other.
-	* tests/actions.at (Exotic Dollars): Instead of using unused
-	values, check that the warning is issued.
-
-2005-12-22  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Improve wording for unused-value warnings.
-
-2005-12-22  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc, data/yacc.c, data/glr.c, data/c.m4
-	(b4_yysymprint_generate): Rename as...
-	(b4_yy_symbol_print_generate): this.
-	Generate yy_symbol_print instead of yysymprint.
-	Generate also yy_symbol_value_print, and use it.
-
-2005-12-22  Akim Demaille  <akim@epita.fr>
-
-	* NEWS: Warn about unused values.
-	* src/symlist.h, src/symlist.c (symbol_list, symbol_list_new): Add
-	a `used' member.
-	(symbol_list_n_get, symbol_list_n_used_set): New.
-	(symbol_list_n_type_name_get): Use symbol_list_n_get.
-	* src/scan-gram.l (handle_action_dollar): Flag used symbols.
-	* src/reader.c (grammar_current_rule_check): Check that values are
-	used.
-	* src/symtab.c (symbol_print): Accept 0.
-	* tests/existing.at: Remove the type information.
-	Empty the actions.
-	Remove useless actions (beware of mid-rule actions: perl -000
-	-pi -e 's/\s*\{\}(?=[\n\s]*[|;])//g').
-	* tests/actions.at (Exotic Dollars): Use unused values.
-	* tests/calc.at: Likewise.
-	* tests/glr-regression.at (No users destructors if stack 0 deleted):
-	Likewise.
-
-	* src/gram.c (rule_useful_p, rule_never_reduced_p): Use
-	rule_useful_p.
-
-2005-12-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Undo 2005-12-01 tentative license wording change.  The wording is
-	still being reviewed by the lawyers, and we don't want to wait for
-	them before publishing a test release.  For now, revert to the
-	previous wording.
-	* NEWS: Undo 2005-12-01 change.
-	* data/glr.c: Revert to previous license wording.
-	* data/glr.cc: Likewise.
-	* data/lalr1.cc: Likewise.
-	* data/location.cc: Likewise.
-	* data/yacc.c: Likewise.
-
-	* NEWS: Reword %destructor vs YYABORT etc.
-	* data/glr.c: Use American spacing, for consistency.
-	* data/glr.cc: Likewise.
-	* data/lalr1.cc: Likewise.
-	* data/yacc.c: Likewise.
-	* data/yacc.c: Reformat comments slightly.
-	* doc/bison.texinfo: Replace "non-" with "non" when that makes sense,
-	for consistency.  Fix some spelling errors and reword recently-included
-	text slightly.
-	* tests/cxx-type.at: Cast results of malloc, for C++.
-
-2005-12-21  Joel E. Denny  <address@hidden>
-
-	* tests/cxx-type.at: Construct a tree, count the parents of shared
-	nodes, and free each node once and only once.  Previously, the memory
-	for semantic values was leaked instead.
-
-2005-12-21  Joel E. Denny  <address@hidden>
-
-	* data/glr.c (struct yyGLRStack): If pure, add yyval and yyloc members.
-	(yylval, yylloc): If pure, #define to yystackp->yyval and
-	yystackp->yyloc similar to yychar and yynerrs.
-	(yyparse): If pure, remove local yylval and yylloc. Add local
-	yystackp to accommodate pure definitions of yylval and yylloc.
-	(b4_lex_param, b4_lyyerror_args, b4_lpure_args): If pure, change
-	yylvalp and yyllocp to &yylval and &yylloc.
-	(nerrs, char, lval, lloc): If pure, add #define's for b4_prefix[]
-	namespace. Previously, nerrs and char were missing, but lval and lloc
-	weren't necessary.
-	(yyprocessOneStack, yyreportSyntaxError, yyrecoverSyntaxError): Remove
-	yylvalp and yyllocp parameters since, if pure, these are now always
-	accessible through yystackp.  If not pure, they are still accessible
-	globally.
-	* data/glr.c, data/yacc.c (YYLLOC_DEFAULT): Change `if (N)' to
-	`if (YYID (N))' to pacify lint.
-
-2005-12-21  Akim Demaille  <akim@epita.fr>
-
-	YYACCEPT, YYERROR, and YYABORT, as user actions, should not
-	destroy the RHS symbols of a rule.
-	* data/yacc.c (yylen): Initialize to 0.
-	Keep its value to the number of items to possibly shift.
-	In particular, a regular successful parse that ends on YYFINAL by
-	a (internal) YYACCEPT must not have yylen != 0.
-	(yyerrorlab, yyreturn): Pop the RHS.
-	Reorder a bit to emphasize the `shifting' bits of code.
-	(YYPOPSTACK): Now accept a number of items to pop.
-	* data/lalr1.cc: Likewise.
-	* data/glr.c: Formatting changes.
-	Use goto instead of fall through.
-	* doc/bison.texinfo (Destructor Decl): Complete.
-
-2005-12-20  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
-
-	* Makefile.am: DJGPP specific files added to EXTRA_DIST.
-	* djgpp/Makefile.maint: Fix PACKAGE variable computation.
-	* djgpp/config.bat: Replace every occurence of the file name
-	scan-gram-c.c with c-scan-gram.c. The same for scan-skel-c.c with
-	c-scan-skel.c to conform with the 8.3 file name restriction on MSDOS.
-	* djgpp/config.sed: Replace every occurence of the file name
-	scan-gram-c.c with c-scan-gram.c. The same for scan-skel-c.c with
-	c-scan-skel.c to conform with the 8.3 file name restriction on MSDOS.
-	* djgpp/djunpack.bat: DJGPP specific file.
-	* djgpp/fnchange.lst: DJGPP specific file.
-	* djgpp/README.in: Add new information about how to unpack the bison
-	source on MSDOS and other systems which have 8.3 file name restrictions
-	using djunpack.bat and fnchange.lst.
-
-2005-12-12  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* bootstrap (build_cvs_prefix): Remove; unused.
-	(CVS_PREFIX): Adjust to yesterday's Savannah reorganization
-	when getting gnulib.
-
-2005-12-12  "Joel E. Denny" <jdenny@ces.clemson.edu>
-
-	* data/glr.c: Reorder typedef declarations for structs to match order
-	of struct declarations.
-	Rename yystack everywhere to yystackp except in yyparse where it's not
-	a pointer.
-	(yyglrShift): Change parameter YYSTYPE yysval to YYSTYPE* yyvalp for
-	consistency.
-	(yyis_table_ninf): Change 0 to YYID (0) to pacify lint.
-	(yyreportSyntaxError): Add /*ARGSUSED*/ to pacify lint.
-	(yyparse): Change while (yytrue) to while ( YYID (yytrue)) to pacify
-	lint.
-
-2005-12-09  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/sets.at (Accept): Fix typos in regular expression used to
-	sed out the final state number.
-
-	Work around portability problem on Solaris 10: flex-generated
-	files include <stdio.h> before <config.h>, which messes up
-	because the latter defines __EXTENSIONS__.  Address the problem
-	by creating two new little files that include <config.h> first,
-	then include the flex-generated files.  Rewrite everyone else
-	to include <config.h> first, as well.
-	* lib/timevar.c: Always include "config.h".
-	* src/Makefile.am (bison_SOURCES): Replace scan-gram.l with
-	scan-gram-c.c, and scan-skel.l with scan-skel-c.c.
-	(EXTRA_bison_SOURCES): New macro.
-	* src/scan-gram-c.c, src/scan-skel-c.c: New files.
-	* src/system.h: Don't include config.h.
-	* src/LR0.c: Include <config.h> first.
-	* src/assoc.c: Likewise.
-	* src/closure.c: Likewise.
-	* src/complain.c: Likewise.
-	* src/conflicts.c: Likewise.
-	* src/derives.c: Likewise.
-	* src/files.c: Likewise.
-	* src/getargs.c: Likewise.
-	* src/gram.c: Likewise.
-	* src/lalr.c: Likewise.
-	* src/location.c: Likewise.
-	* src/main.c: Likewise.
-	* src/muscle_tab.c: Likewise.
-	* src/nullable.c: Likewise.
-	* src/output.c: Likewise.
-	* src/parse-gram.y: Likewise.
-	* src/print.c: Likewise.
-	* src/print_graph.c: Likewise.
-	* src/reader.c: Likewise.
-	* src/reduce.c: Likewise.
-	* src/relation.c: Likewise.
-	* src/state.c: Likewise.
-	* src/symlist.c: Likewise.
-	* src/symtab.c: Likewise.
-	* src/tables.c: Likewise.
-	* src/uniqstr.c: Likewise.
-	* src/vcg.c: Likewise.
-
-	* src/parse-gram.y: Fix minor problems uncovered by lint.
-	(current_lhs, current_lhs_location): Now static.
-	(current_assoc): Remove unused variable.
-
-	Cleanups so that Bison-generated parsers have less lint.
-	* data/c.m4 (b4_yydestruct_generate, b4_yysymprint_generate):
-	Prepend /*ARGSUSED*/, for lint's sake.
-	* data/glr.c (YYUSE): Properly parenthesize, and use an alternate
-	definition if 'lint' is defined.
-	(YYID): New macro (or function, if lint).
-	All uses of /*CONSTCOND*/0 replaced by YYID(0).
-	* data/yacc.c: Likewise.
-	* data/glr.c (yyuserAction, yyuserMerge, yy_reduce_print):
-	(yyrecoverSyntaxError): Prepend /*ARGSUSED*/.
-	* data/glr.cc (YYLLOC_DEFAULT): Omit /*CONSTCOND*/ since this code
-	is C++ only.
-	* data/lalr1.cc (YYUSE): Just use a cast, since this code is C++ only.
-	* data/yacc.c (YYSTACK_FREE) [defined YYSTACK_ALLOC]:
-	Use YYID(0) rather than 0, for lint.
-	(yystrlen): Rewrite to avoid lint warning about ptrdiff_t overflow.
-	(yysyntax_error): Rewrite to avoid lint warnings about parenthesization.
-
-2005-12-07  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/glr-regression.at
-	(Improper handling of embedded actions and dollar(-N) in GLR parsers):
-	Close memory leak reported by twlevo.
-
-2005-12-06  "Joel E. Denny" <jdenny@ces.clemson.edu>
-
-	* data/glr.c (yyprocessOneStack, yyparse): Synchronize the shift for
-	all stacks.
-	(yyparse): Iterate another stack in order to call user destructors.
-	* tests/glr-regression.at (No users destructors if stack 0 deleted):
-	New test case.
-	(Duplicated user destructor for lookahead): This test now is expected
-	to succeed.
-
-2005-12-01  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Document the following change.
-	* data/yacc.c: Say "parser skeleton" rather than "file", since
-	it's no longer just a file.
-	* data/glr.c: Grant a special exception for C GLR parsers, that
-	reads like the already-existing exception for C LALR(1) parsers.
-	* data/glr.cc: Likewise.
-	* data/lalr1.cc: Likewise.
-	* data/location.cc: Likewise.
-	* data/yacc.c: Reword the "written by" statement to clarify that
-	it was the parser skeleton, not the entire output file.
-	* data/glr.c: Written by Paul Hilfinger.
-	* data/glr.cc: Written by Akim Demaille.
-	* data/lalr1.cc: Likewise.
-
-2005-11-18  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c (yy_reduce_print, YY_REDUCE_PRINT):
-	Fix typos in previous change that broke 'make check'.
-	YY_REDUCE_PRINT cannot be a pseudo-varargs macro; that isn't
-	supported in C.
-	* tests/calc.at (_AT_CHECK_CALC,_AT_CHECK_CALC_ERROR):
-	Don't check NUM-STDERR-LINES, since the output format is fluctuating.
-	We can revert this once things settle down.
-
-	* src/conflicts.c (conflicts_print): Don't print file name twice
-	when %expect fails because there were no conflicts.
-	* doc/bison.texinfo (Expect Decl): Tighten up wording in previous
-	change.
-	* tests/conflicts.at (%expect not enough, %expect too much):
-	(%expect with reduce conflicts): Adjust to new behavior.
-
-2005-11-18  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (conflicts_print): Unsatisfied %expectation are
-	errors.
-	* NEWS: Document this.
-	* doc/bison.texinfo (Expect Decl): Likewise.
-
-2005-11-16  Akim Demaille  <akim@epita.fr>
-
-	Generalize the display of semantic values and locations in traces.
-	* data/glr.c (yy_reduce_print): Fix indices (again).
-	* data/c++.m4 (b4_rhs_value, b4_rhs_location): Don't expect
-	literal integers.
-	* data/lalr1.cc (yyreduce_print): Rename as...
-	(yy_reduce_print): this.
-	Display values and locations.
-	* data/yacc.c (yy_reduce_print): Likewise.
-	(YY_REDUCE_PRINT): Adjust to pass the required arguments.
-	(yysymprint): Move higher to be visible from yy_reduce_print).
-	(yyparse): Adjust.
-	* tests/calc.at: Adjust the expected length of the traces.
-
-2005-11-14  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c (yy_reduce_print): The loop was quite wrong: type are
-	from 1 to N, while values and location start at 0.
-	(b4_rhs_location, b4_rhs_value): Add parens around $1 and $2.
-
-2005-11-14  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c (yy_reduce_print): Fix the $ number.
-
-2005-11-14  Akim Demaille  <akim@epita.fr>
-
-	"Use" parse parameters.
-	* data/c.m4 (b4_parse_param_for, b4_parse_param_use): New.
-	* data/glr.c, data/glr.cc: Use them.
-	* data/glr.c (YYUSE): Have a C++ definition that supports
-	non-pointer types.
-
-2005-11-14  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c (yyexpandGLRStack): Declare only if defined.
-
-2005-11-14  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.cc: New.
-	* data/m4sugar/m4sugar.m4 (m4_prepend): New.
-
-2005-11-12  Akim Demaille  <akim@epita.fr>
-
-	Let position and location be PODs.
-	* data/location.cc (position::initialize, location::initialize): New.
-	(position::position, location::location): Define only if
-	b4_location_constructors is defined.
-	* data/lalr1.cc (b4_location_constructors): Define it for backward
-	compatibility.
-	* doc/bison.texinfo (Initial Action Decl): Use initialize.
-
-2005-11-12  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: Move the body of the ctor and dtor into the
-	parser file (instead of the header).
-	Wrap the implementations in a "namespace yy".
-
-2005-11-12  Akim Demaille  <akim@epita.fr>
-
-	Have glr.c include its header file when created.
-	* data/glr.c (b4_shared_declarations): New.
-	Output them verbatim in the parser if !%defines, otherwise
-	output then in the header file, and include it instead.
-
-2005-11-11  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c: Comment changes.
-
-2005-11-11  Akim Demaille  <akim@epita.fr>
-
-	When yydebug, report semantic and location values for reductions.
-	* data/glr.c (yy_reduce_print): Report the semantic values and the
-	locations.
-	(YY_REDUCE_PRINT): Adjust.
-	(yyglrReduce): Use them.
-	(b4_rhs_value, b4_rhs_location): Remove m4_eval invocations.
-	* data/c.m4 (b4_yysymprint_generate): Specify the const arguments.
-	* tests/calc.at (_AT_CHECK_CALC_ERROR): Remove the reduction
-	traces.
-
-2005-11-10  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c (yynewGLRStackItem, YY_RESERVE_GLRSTACK): New.
-	(yyaddDeferredAction, yyglrShift, yyglrShiftDefer): Use them.
-	(yyexpandGLRStack, YYRELOC): Define only when YYSTACKEXPANDABLE.
-
-2005-11-09  Albert Chin-A-Young  <china@thewrittenword.com>
-
-	* m4/cxx.m4, examples/Makefile.am: Don't build
-	examples/calc++ if no C++ compiler is available.  (trivial change)
-
-2005-11-09  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-skel.l: Use a couple of asserts.
-
-2005-11-03  Akim Demaille  <akim@epita.fr>
-
-	In some (weird) cases, the final state number is incorrect.
-	Reported by Alexandre Duret-Lutz.
-	* src/LR0.c (state_list_append): Remove the computation of
-	final_state.
-	(save_reductions): Do it here.
-	(get_state): Alpha conversion.
-	(generate_states): Use a for loop.
-	* src/gram.h (item_number_is_rule_number)
-	(item_number_is_symbol_number): New.
-	* src/state.c: Use assert.
-	* src/system.h: Include assert.h.
-	* tests/sets.at (Accept): New.
-
-2005-10-30  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
-
-	* data/glr.c (yyfill): Adjust comment.
-	(yyresolveAction): Initialize default location properly
-	for empty right-hand sides.
-	(yydoAction): Ditto.
-	Add comment explaining apparently dead code.
-	* tests/glr-regression.at
-	(Incorrectly initialized location for empty right-hand side in GLR):
-	New test.
-
-2005-10-30  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* bootstrap (cleanup_gnulib): New function.  Use it to clean up
-	gnulib when interrupted.  This fixes some race conditions and
-	works around some portability problems (one noted by Paul
-	Hilfinger).
-
-2005-10-22  Akim  <akim@epita.fr>
-
-	* Makefile.cfg: Adjust to config -> build-aux.
-	Reported by twledo.
-
-2005-10-21  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_yydestruct_generate, b4_yysymprint_generate): Pass
-	the %parse-params.
-	* data/glr.c (YY_SYMBOL_PRINT, yydestroyGLRState): Adjust.
-	* data/yacc.c (b4_Pure_if): Rename as...
-	(b4_yacc_pure_if): this.
-	(YY_SYMBOL_PRINT, yyparse): Adjust.
-	* doc/bison.texinfo: Formatting changes.
-
-2005-10-21  Akim Demaille  <akim@epita.fr>
-
-	Finish the transition config -> build-aux.
-	* configure.ac, Makefile.am: Use build-aux.
-	* config/prev-version, config/announce-gen, config/Makefile.am:
-	Move to...
-	* build-aux/prev-version, build-aux/announce-gen,
-	* build-aux/Makefile.am: here.
-
-2005-10-14  Akim Demaille  <akim@epita.fr>
-
-	* examples/calc++/test: Use set -x only when VERBOSE.
-
-2005-10-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Bison now warns if it finds a stray `$' or `@' in an action.
-	* src/scan-gram.l (<SC_BRACED_CODE>[$@]): Implement this.
-
-2005-10-13  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-skel.l: Output the base name parts of the parser and
-	header file names.
-	* tests/output.at (AT_CHECK_OUTPUT): Support subdirectories, and
-	additional checks.
-	Use this to exercise C++ outputs in subdirs.
-	Reported by Oleg Smolsky.
-
-2005-10-12  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/c.m4 (b4_c_function_def): Look at __C99_FUNC__, not at
-	__STDC_VERSION__, as IBM cc 7.0 doesn't define the latter either.
-	Problem reported by John P. Hartmann.
-	* data/yacc.c (YYMODERN_C): Likewise.  Don't define if the user has
-	already defined it.
-
-2005-10-12  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y (version_check): Exit 63 to please missing
-	(stands for "version mismatch).
-	* tests/input.at, doc/bison.texinfo: Adjust.
-
-2005-10-10  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Work around portability problems with Visual Age C compiler
-	(xlc and xlC_r) reported by John P. Hartmann.
-	* data/location.cc (initial_column, initial_line): Remove.
-	All uses replaced by 0 and 1.
-	* src/scan-gram.l (gram_wrap): Redefine to avoid bug in flex 2.5.31
-	that xlc complains about.
-	* src/scan-skel.l (skel_wrap): Likewise.
-	* data/c.m4 (b4_c_function_def): Look at __STDC_VERSION__ as well
-	as __STDC__.
-	* data/yacc.c (YYMODERN_C): New macro, which also looks at
-	__STDC_VERSION__.  Use it everywhere instead of looking at
-	__STDC__ and __cplusplus.
-
-2005-10-10  Akim Demaille  <akim@epita.fr>
-
-	* examples/calc++/test: Be quiet unless VERBOSE.
-
-2005-10-05  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/c.m4 (yydestruct, yysymprint):
-	Use YYUSE instead of casting to void.
-	* data/glr.c (YYUSE): New macro.
-	(yyuserMerge, yyreportAmbiguity, yyreportSyntaxError):
-	Use it instead of rolling our own.
-	(YYLLOC_DEFAULT, YYCHK, YYDPRINTF, YY_SYMBOL_PRINT, YY_REDUCE_PRINT):
-	(YYCHK1):
-	Use /*CONSTCOND*/ to suppress lint warnings.
-	* data/lalr1.cc (YYLLOC_DEFAULT, YY_SYMBOL_PRINT, YY_REDUCE_PRINT):
-	(YY_STACK_PRINT): Use 'false' not '0'.
-	(YYUSE): New macro.
-	(yysymprint_, yydestruct_): Use it instead of rolling our own.
-	* data/yacc.c (YYUSE): New macro.
-	(YYCOPY, YYSTACK_RELOCATE, YYBACKUP, YYLLOC_DEFAULT):
-	(YYDPRINTF, YY_SYMBOL_PRINT, YY_STACK_PRINT, YY_REDUCE_PRINT):
-	(yyerrorlab): Use /*CONSTCOND*/ to suppress lint warnings.
-
-
-	* data/m4sugar/m4sugar.m4 (_m4_map): New macro.
-	(m4_map, m4_map_sep): Use it.  Handle the empty list correctly.
-
-2005-10-04  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Undo the parts of the unlocked-I/O change that substituted
-	putc or puts for printf.  This might hurt performance a bit,
-	but some people prefer the printf style.
-	* data/c.m4 (yysymprint): Prefer printf to puts and putc.
-	* data/glr.c (YYFPUTC, YYFPUTS, YYDPUTS): Remove.
-	All uses replaced by YYFPRINTF and YYDPRINTF.
-	* data/yacc.c: Likewise.
-	* lib/bitset.c (bitset_print): Likewise.
-	* lib/bitsetv.c (bitsetv_dump, debug-bitsetv): Prefer printf to
-	putc and puts.
-	* lib/lbitset.c (debug_lbitset): Likewise.
-	* src/closure.c (print_firsts, print_fderives): Likewise.
-	* src/gram.c (grammar_dump): Likewise.
-	* src/lalr.c (look_ahead_tokens_print): Likewise.
-	* src/output.c (escaped_output): Likewise.
-	(user_actions_output): Break apart two printfs.
-	* src/parse-gram.y (%printer): Prefer printf to putc and puts.
-	* src/reduce.c (reduce_print): Likewise.
-	* src/state.c (state_rule_look_ahead_tokens_print): Likewise.
-	* src/system.h: Include unlocked-io.h rathe than stdio.h.
-
-	* data/glr.c (yyuserMerge, yyreportAmbiguity, yyreportSyntaxError):
-	Use assignments rather than casts-to-void to suppress
-	unused-variable warnings.  This pacifies 'lint'.
-	* data/lalr1.cc (yysymprint_, yydestruct_): Use a call to suppress
-	unused-variable warnings.
-
-2005-10-03  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
-
-	* Makefile.am: DJGPP specific files added to EXTRA_DIST.
-
-2005-10-02  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Use unlocked I/O for a minor performance improvement on hosts like
-	GNU/Linux and Solaris that support unlocked I/O.  The basic idea
-	is to use the gnlib unlocked-io module, and to prefer putc and
-	puts to printf when either will work (since the latter doesn't
-	come in an unlocked flavor).
-	* bootstrap (gnulib_modules): Add unlocked-io.
-	* data/c.m4 (yysymprint): Prefer puts and putc to printf.
-	* data/glr.c (YYFPUTC, YYFPUTS, YYDPUTS): New macros.
-	Prefer them to YYFPRINTF and YYDPRINTF if either will do,
-	and similarly for puts and putc and printf.
-	* data/yacc.c: Likewise.
-	* lib/bitset.c (bitset_print): Likewise.
-	* lib/bitset.h [USE_UNLOCKED_IO]: Include unlocked-io.h.
-	* lib/bitsetv.c (bitsetv_dump, debug-bitsetv): Prefer putc and puts
-	to printf.
-	* lib/lbitset.c (debug_lbitset): Likewise.
-	* src/closure.c (print_firsts, print_fderives): Likewise.
-	* src/gram.c (grammar_dump): Likewise.
-	* src/lalr.c (look_ahead_tokens_print): Likewise.
-	* src/output.c (escaped_output): Likewise.
-	(user_actions_output): Coalesce two printfs.
-	* src/parse-gram.y (%printer): Prefer putc and puts to printf.
-	* src/reduce.c (reduce_print): Likewise.
-	* src/state.c (state_rule_look_ahead_tokens_print): Likewise.
-	* src/system.h: Include unlocked-io.h rather than stdio.h.
-
-	* data/lalr1.cc: Don't put an unmatched ' in a dnl comment, as
-	this confuses xgettext.
-
-2005-10-02  Akim Demaille  <akim@epita.fr>
-
-	* bootstrap (gnulib_modules): Add strverscmp.
-	* lib/.cvsignore: Add strverscmp.c, strverscmp.h.
-	* m4/.cvsignore: Add strverscmp.m4.
-	* src/parse-gram.y (%require): New token, new rule.
-	(version_check): New.
-	* src/scan-gram.l (%require): Adjust.
-	* tests/input.at (AT_REQUIRE): New.
-	Use it.
-	* doc/bison.texinfo (Require Decl): New.
-	(Calc++ Parser): Use %require.
-
-2005-10-02  Akim Demaille  <akim@epita.fr>
-
-	* data/location.cc: New.
-
-2005-10-02  Paul Eggert  <eggert@cs.ucla.edu>,
-	    Akim Demaille  <akim@epita.fr>
-
-	Make sure -odir/foo.cc creates dir/location.hh etc.
-	* src/files.h (spec_outfile, parser_file_name, spec_name_prefix)
-	(spec_file_prefix, spec_verbose_file, spec_graph_file)
-	(spec_defines_file): Now const.
-	(dir_prefix): New.
-	(short_base_name): Remove.
-	* src/files.c: Adjust.
-	(dirname.h): Include.
-	(base_name): Don't prototype it.
-	(finput): Remove, duplicates gram_in.
-	(full_base_name, short_base_name): Replace by...
-	(all_but_ext, all_but_tab_ext): these.
-	(compute_base_names): Rename as...
-	(compute_file_name_parts): this.
-	Update to compute the new variables, including dir_prefix.
-	Adjust dependencies.
-	* src/output.c (prepare): Output them.
-	* src/reader.c: Adjust to use gram_in, not finput.
-	* src/scan-skel.l (@dir_prefix@): New.
-
-2005-10-02  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
-
-	* lib/subpipe.c: New function end_of_output_subpipe() added
-	to allow support for non-posix systems. This is a no-op function
-	for posix systems.
-
-	* lib/subpipe.h: New function end_of_output_subpipe() added
-	to allow support for non-posix systems. This is a no-op function
-	for posix systems.
-
-	* src/output.c (output_skeleton): Use end_of_output_subpipe() to
-	handle the lack of pipe/fork functionality on non-posix systems.
-
-	* djgpp/Makefile.maint: DJGPP specific file.
-
-	* djgpp/README.in: DJGPP specific file.
-
-	* djgpp/config.bat: DJGPP specific configuration file.
-
-	* djgpp/config.sed: DJGPP specific configuration file.
-
-	* djgpp/config.site: DJGPP specific configuration file.
-
-	* djgpp/config_h.sed: DJGPP specific configuration file.
-
-	* djgpp/subpipe.c: DJGPP specific replacement file for lib/subpipe.c.
-
-	* djgpp/subpipe.h: DJGPP specific replacement file for lib/subpipe.h.
-
-2005-10-02  Akim Demaille  <akim@epita.fr>
-
-	* data/location.cc: New, extract from...
-	* data/lalr1.cc: here.
-	(location.hh): Include it after the user prologue, in case the
-	filename type is defined by the user.
-	Forward declation location and position before the pre-prologue.
-	(yyresult_): Rename as...
-	(yyresult): this, it's a local variable, not an attribute.
-	* data/Makefile.am (dist_pkgdata_DATA): Adjust.
-
-2005-10-01  Akim Demaille  <akim@epita.fr>
-
-	* examples/extexi: Restore the #line generation.
-
-2005-09-30  Akim Demaille  <akim@epita.fr>,
-	    Alexandre Duret-Lutz <adl@gnu.org>
-
-	Move the token type and YYSTYPE in the parser class.
-	* data/lalr1.cc (stack.hh, location.hh): Include earlier.
-	(parser::token): New, from the moved free definition of tokens.
-	(parser::semantic_value): Now a full definition instead of an
-	indirection to YYSTYPE.
-	(b4_post_prologue): No longer included in the header file, but
-	in the implementation file.
-	* doc/bison.texi (C+ Language Interface): Update.
-	* src/parse-gram.y: Support unary %define.
-	* tests/actions.at: Define global_tokens_and_yystype for backward
-	compatibility until we update the tests.
-	* tests/calc.at: Idem.
-	(first_line, first_column, last_line, last_column): Define for lalr1.cc
-	to simplify the code.
-
-2005-09-29  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Port to SunOS 4.1.4, which lacks strtoul and strerror.
-	Ah, the good old days!  Problem reported by Peter Klein.
-	* bootstrap (gnulib_modules): Add strerror, strtoul.
-	* lib/.cvsignore: Add strerror.c, strtol.c, strtoul.c
-	* m4/.cvsignore: Add strerror.m4, strtol.m4, strtoul.m4.
-
-2005-09-29  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_error_verbose_if): New.
-	* data/lalr1.cc: Use it.
-	(YYERROR_VERBOSE_IF): Remove.
-	(yyn_, yylen_, yystate_, yynerrs_, yyerrstatus_): Remove as
-	parser members, replaced by...
-	(yyn, yylen, yystate, yynerss, yyerrstatus): these parser::parse
-	local variables.
-	(yysyntax_error_): Takes the state number as argument.
-	(yyreduce_print_): Use the argument yyrule, not the former
-	attribute yyn_.
-
-2005-09-26  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* bootstrap (gnulib_modules): Add verify.
-	* lib/.cvsignore: Add verify.h.
-	* src/getargs.c: Use ARGMATCH_VERIFY rather than verify.
-	* src/system.h (verify): Remove.
-	Include verify.h instead.
-	* src/tables.c (tables_generate): Use new API for 'verify'.
-
-2005-09-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Do not use
-	local variables whose names begin with 'yy'.
-	* tests/calc.at (_AT_DATA_CALC_Y): Likewise.
-	Trivial changes from Joel E. Denny.
-
-	* bootstrap (gnulib_modules): Remove alloca.  Bison doesn't need
-	it itself.
-	* src/main.c (main) [C_ALLOCA]: Don't flush alloca'ed memory; we
-	don't use alloca any more.
-
-	* data/yacc.c [YYSTACK_USE_ALLOCA && !defined __GNUC__ && ! defined
-	__BUILTIN_VA_ARG_INCR && ! defined _AIX && ! defined _MSC_VER &&
-	defined _ALLOCA_H]: Don't include <stdlib.h>; not needed in this case.
-	* tests/torture.at (Exploding the Stack Size with Alloca): Adjust
-	to match yacc.c, to test more hosts.
-
-2005-09-20  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c (YYSIZE_T): Reindent to make it clearer.  This
-	doesn't affect behavior.
-	(YYSTACK_ALLOC) [YYSTACK_USE_ALLOCA]: Improve support for
-	Solaris, AIX, MSC.
-	(_STDLIB_H): Renamed from YYINCLUDED_STDLIB_H.  All uses changed.
-	This works a bit better with glibc, if user code has already included
-	stdlib.h.
-	* doc/bison.texinfo (Bison Parser): Document that users can't
-	arbitrarily use malloc and free for other purposes.  Document
-	that <alloca.h> and <malloc.h> might be included.
-	(Table of Symbols): Under YYSTACK_USE_ALLOCA, Don't claim that the
-	user must declare alloca.
-
-	* HACKING (release): Forwarn the Translation Project about
-	stable releses.
-
-2005-09-20  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c: Use b4_token_enums, not b4_token_enums_defines.
-
-2005-09-19  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c (YYSIZE_MAXIMUM): New macro.
-	(YYSTACK_ALLOC_MAXIMUM): Use it.
-	(yysyntax_error): New function.
-	(yyparse) [YYERROR_VERBOSE]: Don't leak memory indefinitely if
-	multiple syntax errors are reported, and alloca is being used.
-	Instead, reallocate buffers twice as big each time, so that
-	we waste at most half the allocated memory.  Start with a small
-	(128-byte) buffer that will suffice in most cases anyway.
-	Use yysyntax_error to do most of the work.
-
-	* doc/bison.texinfo (Error Reporting, Table of Symbols):
-	yynerrs is the number of errors reported, not the number of
-	errors encountered.
-
-	* tests/glr-regression.at (Duplicated user destructor for lookahead):
-	Mark it as expected to fail.
-	Cast result of malloc; problem reported by twlevo@xs4all.nl.
-	* tests/actions.at, tests/calc.at, tests/glr-regression.at:
-	Don't start user-code symbols with "yy", to avoid name space problems.
-
-2005-09-19  Akim Demaille  <akim@epita.fr>
-
-	Remove the traits, failed experiment.
-	It never proved useful, and anyway because of the current
-	definition, it was not possible to have several specialization of
-	this traits, making it useless.
-	* data/lalr1.cc (yy:traits): Remove.
-	Inline its definitions in the parser class.
-
-2005-09-19  Akim Demaille  <akim@epita.fr>
-
-	* tests/atlocal.in (LIBS): Pass INTLLIBS to address failures on at
-	least Mac OSX with a /usr/local install of gettext.
-
-2005-09-19  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (yyparse): Rename yylooka and yyilooka as yychar
-	and yytoken for similarity with the other skeletons.
-
-2005-09-19  Akim Demaille  <akim@epita.fr>
-
-	* NEWS, configure.ac: update version number to 2.1a.
-
-2005-09-16  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Version 2.1.
-
-	* NEWS: Remove notice of yytname change, since it was never in an
-	official release.
-	* data/glr.c (yydestroyGLRState): Rename local var to avoid shadowing
-	diagnostic.
-	* src/output.c (prepare): Likewise.
-	* data/lalr1.cc (YYERROR_VERBOSE_IF): New macro.
-	(yysyntax_error_): Use it to avoid GCC warning when YYERROR_VERBOSE
-	is not defined.  This is an awful hack, but it's enough for now.
-	All callers changed.
-	* tests/glr-regression-at (make_value): Args are const pointers now,
-	to avoid GCC warning.
-	(Duplicated user destructor for lookahead): New test.  Currently
-	skipped.  It fails on my host but I'm not sure it'll always fail.
-
-2005-09-16  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.h (struct symbol): Declare the printer and destructor
-	as const, to avoid accidental calls to free.
-	(symbol_destructor_set, symbol_printer_set): Adjust.
-	* src/symtab.c: Adjust.
-
-2005-09-16  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_token_enums): New.
-	(b4_token_defines): Rename as...
-	(b4_token_enums_defines): this.
-	(b4_token_defines): New, output only the #defines.
-	* data/yacc.c, data/glr.c: Adjust.
-	* data/lalr1.cc: Use b4_token_enums instead of b4_token_enums_defines.
-	* data/c.m4 (b4_yydestruct_generate, b4_yysymprint_generate): Define
-	as default values.
-
-2005-09-16  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (yylex_): Remove, inline its code.
-	(yyreport_syntax_error_): Remove, replaced by...
-	(yysyntax_error_): this which returns a string and leaves to the
-	caller the call to the users' error function.
-	(yylooka_, yyilooka_, yylval, yylloc, yyerror_range_, yyval, yyloc):
-	Move from members of the parser object...
-	(yylooka, yyilooka, yylval, yylloc, yyerror_range, yyval, yyloc):
-	to local variables of the parse function.
-
-2005-09-16  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Calc++ Parser): Don't promote defining YYEOF
-	since it's in Bison's name space.
-
-2005-09-15  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yyresolveValue): Add default case to pacify
-	gcc -Wswitch-default.  Problem reported by twlevo@xs4all.nl.
-
-	* NEWS: Document when yyparse started to return 2.
-	* doc/bison.texinfo (Parser Function): Document when yyparse
-	returns 2.
-
-	* data/lalr1.cc: Revert part of previous change, as it's incompatible.
-	(b4_filename_type): Renamed back from b4_file_name_type.  All uses
-	changed.
-	(class position): file_name -> filename (reverting).  All uses changed.
-
-2005-09-14  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* examples/calc++/Makefile.am ($(calc_sources_generated)): Don't
-	do anything if $@ exists.  This reverts part of the 2005-07-07
-	patch.
-
-2005-09-11  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* Makefile.am (EXTRA_DIST): Do not distribute REFERENCES; it
-	contains obsolete information and isn't worth distributing as a
-	separate file anyway.
-	* data/glr.c [defined YYSETJMP]: Don't include <setjmp.h>.
-	(YYJMP_BUF, YYSETJMP, YYLONGJMP) [!defined YYSETJMP]: New macros.
-	All uses of jmp_buf, setjmp, longjmp changed to use these instead.
-	(yyparse): Abort if user code uses longjmp to throw an unexpected
-	value.
-
-2005-09-09  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/c.m4 (b4_identification): Define YYBISON_VERSION.
-	Suggested by twlevo@xs4all.nl.
-
-	* data/glr.c (YYCHK1): Do not assume YYE is in range.
-	This avoids a diagnostic from gcc -Wswitch-enum.
-	Problem reported by twlevo@xs4all.nl.
-
-	* doc/bison.texinfo: Don't use "filename", as per GNU coding
-	standards.  Use "file name" or "file" or "name", depending on
-	the context.
-	(Invocation): The output of "bison hack/foo.y" goes to foo.tab.c,
-	not to hack/foo.tab.c.
-	(Calc++ Top Level): 2nd arg of main is not const.
-	* data/glr.c: b4_filename -> b4_file_name.
-	* data/lalr1.cc: Likewise.  Also, b4_filename_type -> b4_file_name_type.
-	All uses changed.
-	(class position): filename -> file_name.  All uses changed.
-	* data/yacc.c: b4_filename -> b4_file_name.
-	* lib/bitset.h: filename -> file_name in local vars.
-	* lib/bitset_stats.c: Likewise.
-	* src/files.c: Likewise.
-	* src/scan-skel.l ("@output ".*\n): Likewise.
-	* src/files.c (file_name_split): Renamed from filename_split.
-	* src/muscle_tab.c (muscle_init): Output b4_file_name, not b4_filename.
-
-2005-09-08  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* lib/.cvsignore: Add pipe-safer.c, stdio--.h, unistd--.h,
-	to accommodate latest gnulib.
-
-	* tests/glr-regression.at (Duplicate representation of merged trees):
-	Add casts to pacify g++.  Problem reported by twlevo@xs4all.nl.
-
-	* bootstrap: Add comment as to why the AM_LANGINFO_CODESET hack is
-	needed.
-
-2005-08-26  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yydestroyGLRState): Renamed from yydestroyStackItem.
-	All uses changed.  Invoke user destructor after an error during a
-	split parse (trivial change from Joel E. Denny).
-
-	* tests/glr-regression.at
-	(User destructor after an error during a split parse):  New test case.
-	Problem reported by Joel E. Denny in:
-	http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00029.html
-
-2005-08-25  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* README-cvs: Give URLs for recommended tools.
-	Mention Gzip version problem, and bootstrapping issues.
-	Remove troubleshooting section, as it's somewhat obsolete.
-
-	* bootstrap (no_cache): New var, to accommodate different wget
-	variants.  Use it instead of '-C off'.  Problem reported by
-	twlevo@xs4all.nl.
-
-	* data/glr.c (yydestroyStackItem): New function.
-	(yyrecoverSyntaxError, yyreturn): Use it to improve quality of
-	debugging information.  Problem reported by Joel E. Denny.
-
-2005-08-25  Akim Demaille  <akim@epita.fr>
-
-	* tests/local.at (AT_COMPILE_CXX): Pass $LINKS too.
-
-2005-08-24  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yyrecoverSyntaxError, yyreturn):
-	Don't invoke destructor on unresolved entries.
-	* tests/glr-regression.at
-	(User destructor for unresolved GLR semantic value): New test case.
-	Problem reported by Joel E. Denny in:
-	http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00016.html
-
-2005-08-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* lib/.cvsignore: Remove realloc.c, strncasecmp.c, xstrdup.c.
-	Add strnlen.c.
-	* m4/.cvsignore: Remove codeset.m4, gettext.m4, lib-ld.m4,
-	lib-prefix.m4, po.m4.
-
-	* data/glr.c (yyreturn): Use "Cleanup:" rather than "Error:"
-	in yydestruct diagnostic, since it might not be an error.
-	Problem reported by Joel Denny near end of
-	<http://lists.gnu.org/archive/html/help-bison/2005-07/msg00040.html>.
-	* data/lalr1.cc (yyerturn): Likewise.
-	* data/yacc.c (yyreturn): Likewise.
-	* tests/calc.at (_AT_CHECK_CALC_ERROR): Adjust to the above change.
-
-	* src/files.c: Remove obsolete FIXME comment.
-
-	* data/glr.c (YY_SYMBOL_PRINT): Append a newline, for consistency
-	with the other templates, and to fix bogus run-on messages such
-	as the one reported at the end of
-	<http://lists.gnu.org/archive/html/help-bison/2005-07/msg00040.html>.
-	All callers changed to avoid the newline.
-	(yyprocessOneStack): Output two lines rather than one, to accommodate
-	the above change.  This changes the debug output format slightly.
-
-	* data/glr.c (yyresolveValue): Fix redundant parse tree problem
-	reported by Joel E. Denny in
-	<http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00004.html>
-	(trivial change).
-	* tests/glr-regression.at (Duplicate representation of merged trees):
-	New test, from Joel E. Denny in:
-	<http://lists.gnu.org/archive/html/help-bison/2005-07/msg00013.html>.
-	* THANKS: Add Joel E. Denny.
-
-	* configure.ac (AC_INIT): Bump to 2.0c.
-
-2005-07-24  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Version 2.0b.
-
-	* Makefile.am (SUBDIRS): Put examples before tests, so that
-	"make check" doesn't finish with "All 1 tests passed".
-
-	* tests/regression.at (Token definitions): Don't rely on
-	AT_PARSER_CHECK for data that contains backslashes.  It currently
-	uses 'echo', and 'echo' isn't portable if its argument contains
-	backslashes.  Problem found on OpenBSD 3.4.  Also, do not assume
-	that the byte '\0xff' is not printable in the C locale; it is,
-	under OpenBSD 3.4 (!).  Luckily, '\0x80' through '\0x9e' are
-	not printable, so use '\0x81' to test.
-
-	* data/glr.c (YYOPTIONAL_LOC): Define even if it's not a recent
-	version of GCC, since the macro is used with non-GCC compilers.
-
-	Fix core dump reported by Pablo De Napoli in
-	<http://lists.gnu.org/archive/html/bug-bison/2005-07/msg00053.html>.
-	* tests/regression.at (Invalid inputs with {}): New test.
-	* src/parse-gram.y (token_name): Translate type before using
-	it as an index.
-
-	* data/glr.c (ATTRIBUTE_UNUSED): Remove, since it infringes on
-	the user's name space.  All uses changed to __attribute__
-	((__unused__)).
-	(yyFail, yyMemoryExhausted, yyreportAmbiguity):
-	Add __attribute__ ((__noreturn__)).
-
-	* etc/clcommit: Remove.  We weren't using it, and it failed
-	"make maintainer-distcheck".
-	* Makefile.maint: Merge from coreutils.
-	(CVS_LIST, CVS_LIST_EXCEPT): New macros.
-	(syntax-check-rules): Change list of rules as described below.
-	(sc_cast_of_alloca_return_value, sc_dd_max_sym_length):
-	(sc_file_system, sc_obsolete_symbols, sc_prohibit_atoi_atof):
-	(sc_prohibit_jm_in_m4, sc_root_tests, sc_tight_scope):
-	(sc_trailing_space): New rules.
-	(sc_xalloc_h_in_src): Remove.
-	(sc_cast_of_argument_to_free, sc_cast_of_x_alloc_return_value):
-	(sc_space_tab, sc_error_exit_success, sc_changelog):
-	(sc_system_h_headers, sc_sun_os_names, sc_unmarked_diagnostics):
-	(makefile-check, po-check, author_mark_check):
-	(makefile_path_separator_check, copyright-check):
-	Use grep -n, to make it easier to find violations.
-	Use CVS_LIST and CVS_LIST_EXCEPT.
-	(header_regexp, h_re): Remove.
-	(dd_c): New macro.
-	(sc_dd_max_sym_length, .re-list, news-date-check): New rules.
-	(my-distcheck): Use more-modern GCC flags.
-	(signatures, %.asc): Remove.
-	(rel-files, announcement): Remove signatures.
-	Restore old updating code, even though we don't use it, so
-	that we're the same as coreutils.
-	(alpha, beta, major): Depend on news-date-check.
-	Make the upload commands.
-
-	* data/c.m4, data/lalr1.cc, data/yacc.c: Normalize white space.
-	* lib/abitset.h, lib/bbitset.h, lib/bitset.h: Likewise.
-	* lib/bitset_stats.c, lib/ebitset.h, lib/lbitset.c: Likewise.
-	* lib/libitset.h, lib/timevar.c, lib/vbitset.h: Likewise.
-	* src/Makefile.am, src/gram.c, src/muscle_tab.h: Likewise.
-	* src/parse-gram.y, src/system.h, src/tables.c, src/vcg.c: Likewise.
-	* src/vcg_defaults.h, tests/cxx-type.at, tests/existing.at: Likewise.
-	* tests/sets.at: Likewise.
-
-	* data/m4sugar/m4sugar.m4: Sync from Autoconf, except that
-	we comment out the Autoconf version number.
-	* doc/bison.texinfo (Calc++ Scanner): Don't use atoi, as
-	it's error-prone and "make maintainer-distcheck" rejects it.
-
-	* lib/subpipe.c: Include <fcntl.h> without checking for HAVE_FCNTL_H.
-	Indent calls to "error" to pacify "make maintainer-distcheck",
-	when the calls are not intended to be translated.
-	* m4/subpipe.m4 (BISON_PREREQ_SUBPIPE): Don't check for fcntl.h.
-
-	* src/Makefile.am (DEFS): Use +=, to pacify
-	"make maintainer-distcheck".
-	(bison_SOURCES): Add scan-skel.h.
-	(sc_tight_scope): New rule, from coreutils.
-
-	* src/files.c (src_extension, header_extension):
-	Now static, not extern.
-	* src/getargs.c (short_options): Likewise.
-	* src/muscle_tab.c (muscle_table): Likewise.
-	* src/parse-gram.y (current_class, current_type, current_prec):
-	Likewise.
-	* src/reader.c (grammar_end, previous_rule_end): Likewise.
-	* src/getargs.h: Redo comments to pacify "make maintainer-distcheck".
-	* src/main.c (main): Cast bindtextdomain and textdomain calls to
-	void, to avoid warning when NLS is disabled.
-	* src/output.c: Include scan-skel.h.
-	(scan_skel): Remove decl, since scan-skel.h does this.
-	(output_skeleton):
-	Indent calls to "error" to pacify "make maintainer-distcheck".
-	* src/print_graph.c: Don't include <obstack.h>, as system.h does this.
-	* src/reader.h (gram_end, gram_lineno): New decls to pacify
-	"make maintainer-distcheck".
-	* src/scan-skel.l (skel_lex, skel_get_lineno, skel_get_in):
-	(skel_get_out, skel_get_leng, skel_get_text, skel_set_lineno):
-	(skel_set_in, skel_set_out, skel_get_debug, skel_set_debug):
-	(skel_lex_destroy, scan_skel): Move these decls to...
-	* src/scan-skel.h: New file.
-	* src/uniqstr.c (uniqstr_assert):
-	Indent calls to "error" to pacify "make maintainer-distcheck".
-
-	* tests/Makefile.am ($(srcdir)/package.m4): Use $(VAR),
-	not @VAR@.
-
-	* tests/torture.at: Revamp to avoid misuse of atoi that
-	"make maintainer-distcheck" complained about.
-
-	* examples/extexi (message): Don't print a message more than once,
-	and omit line-number decoration that makes Emacs compile think
-	that informative messages are worth worrying about.
-
-2005-07-22  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* configure.ac: Update version number.
-
-	* Makefile.am (SUBDIRS): Add examples; somehow this got removed
-	accidentally.
-	* examples/calc++/calc++-parser.yy: Remove from CVS, as it's
-	autogenerated by the maintainer.
-	* examples/calc++/.cvsignore: Add *.yy.
-
-	* lib/bitset.c (bitset_alloc): Don't cast xcalloc result.
-	* lib/bitset_stats.c (bitset_stats_init): Likewise.
-	* lib/bitsetv.c (bitsetv_alloc): Likewise.
-
-	* po/POTFILES.in: Add lib/xalloc-die.c; remove lib/xmalloc.c.
-
-	* src/relation.c (relation_transpose): Rewrite to avoid bogus complaint
-	from maintainer-distcheck about casting the argument of 'free'.
-
-	* NEWS: Mention recent yytname changes.
-	* THANKS: Add Anthony Heading, twlevo@xs4all.nl.
-
-	* bootstrap: For translations that have not yet been upgraded to
-	the new runtime-po domain, prime the pump by extracting the
-	relevant strings from the obsolete translations.  This code can be
-	removed once the bison-runtime domain has been translated by each
-	team.
-
-	* src/scan-gram.l (<SC_PRE_CODE>.): Don't double-quote token names,
-	now that token names are already quoted.
-
-	Fix problem reported by Anthony Heading.
-	* data/glr.c (YYTOKEN_TABLE): New macro.
-	(yytname): Define if YYTOKEN_TABLE.
-	* data/yacc.c (YYTOKEN_TABLE, yytname): Likewise.
-	* data/lalr1.cc (YYTOKEN_TABLE, yytname_): Likewise.
-	(YYERROR_VERBOSE): Define the same way the other skeletons do.
-	* src/output.c (prepare_symbols): Output token_table_flag.
-
-2005-07-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yyinitGLRStack, yyreturn): Don't call malloc
-	again if the first call fails.
-
-	* data/glr.c (yytnamerr): New function.
-	(yyreportSyntaxError): Use it to dequote most string literals.
-	* data/lalr1.c (yytname_): Renamed from yyname_, for compatibility
-	with other skeletons.  All uses changed.
-	(yytnameerr_): New function.
-	(yyreport_syntax_error): Use it to dequote most string literals.
-	* data/yacc.c (yytnamerr): New function.
-	(yyerrlab): Use it to decode most string literals.
-	* doc/bison.texinfo (Decl Summary, Calling Convention):
-	Clarify quoting convention of yytname.
-	* src/output.c (prepare_symbols): Quote all names.  This undoes
-	the 2005-04-17 change, which is now accomplished (mostly) via
-	changes in the parsers as described above.
-	* tests/regression.at (Token definitions, Web2c Actions):
-	Undo most 2005-04-17 change here, too.
-
-2005-07-20  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix more problems reported by twlevo@xs4all.nl.
-	* tests/cxx-type.at: Don't pipe output of ./types through sed to
-	remove trailing spaces.  This loses the exit status of ./types,
-	and isn't needed since ./types shouldn't be emitting trailing
-	spaces.
-	* data/glr.c (yyreturn): Don't pop stack if yyinitStateSet failed,
-	as the stack isn't valid in that case.
-
-	* src/scan-gram.l (gram_get_lineno, gram_get_in, gram_get_out):
-	(gram_get_leng, gram_get_text, gram_set_lineno, gram_set_in):
-	(gram_set_out, gram_get_debug, gram_set_debug, gram_lex_destroy):
-	Add declarations to pacify "gcc -Wmissing-prototypes" when flex 2.5.31
-	is used.
-	* src/scan-skel.l (skel_get_lineno, skel_get_in, skel_get_out):
-	(skel_get_leng, skel_get_text, skel_set_lineno, skel_set_in):
-	(skel_set_out, skel_get_debug, skel_set_debug, skel_lex_destroy):
-	Likewise.
-
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Work even with
-	overly-picky compilers that reject 'char *foo = "bar";'.
-
-	* src/symtab.c (SYMBOL_ATTR_PRINT, symbol_print): Direct output
-	to FILE * parameter, not to stderr.  This fixes a typo introduced
-	in the 2005-07-12 change.
-
-	* lib/subpipe.c (create_subpipe): Rewrite slightly to avoid
-	warnings from GCC 4.
-
-	* data/glr.c (yyexpandGLRStack, yyaddDeferredAction, yyexpandGLRStack):
-	(yyglrShiftDefer, yysplitStack):
-	Remove unused parameters b4_pure_formals.  All uses changed.
-	(yyglrShift): Remove unused parameters b4_user_formals.
-	All uses changed.
-	(yyglrReduce): Removed unused parameter yylocp.  All uses changed.
-
-2005-07-18  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Destructor cleanups and regularization among the three skeletons.
-	* NEWS: Document the behavior changes.
-	* data/glr.c (yyrecoverSyntaxError): Don't bother to pop the
-	stack before failing, as the cleanup code will do it for us now.
-	* data/lalr1.cc (yyerrlab): Likewise.
-	* data/glr.c (yyparse): Pop everything off the stack before
-	freeing it, so that destructors get called properly.
-	* data/lalr1.cc (yyreturn): Likewise.
-	* data/yacc.c (yyreturn): Pop and destroy the start symbol, too.
-	This is more consistent.
-	* doc/bison.texinfo (Destructor Decl): Mention more reasons
-	why destructors might be called.  1.875 -> 2.1.
-	(Destructor Decl, Decl Summary, Table of Symbols):
-	Some English-language cleanups for %destructor.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR):
-	Add output line for destructor of start symbol.
-	* tests/calc.at (AT_CHECK_CALC): Add one to line counts,
-	because of that same extra output line.
-
-	* NEWS: Document minor wording changes in diagnostics of
-	Bison-generated parsers.
-	* data/glr.c (yyMemoryExhausted): Renamed from yyStackOverflow.
-	Remove unused formals.  All uses changed.
-	(yyreportAmbiguity): "ambiguity detected" -> "syntax is ambiguous".
-	(yyparse): Rename yyoverflowlab to yyexhaustedlab.
-	* data/yacc.c (yyparse): "parser stack overflow" -> "memory exhausted".
-	Rename yyoverflowab to yyexhaustedlab.
-	When memory exhaustion occurs during syntax-error reporting,
-	report it separately rather than in a single diagnostic; this
-	eases translation.
-	* doc/bison.texinfo (Memory Management): Renamed from Stack Overflow.
-	(Memory Exhausted): Renamed from Parser Stack Overflow.
-	Revamp wording slightly to prefer "memory exhaustion".
-	* tests/actions.at: "parser stack overflow" -> "memory exhausted".
-
-	* data/c.m4 (b4_yysymprint_generate): Use YYFPRINTF, not fprintf.
-
-	Add i18n support to the GLR skeleton.  Partially fix the C++
-	skeleton; a C++ expert needs to finish this.  Remove debugging
-	msgids; there's little point to having them translated, since they
-	can be understood only by someone who can read the
-	(English-language) source code.
-
-	Generate runtime-po/bison-runtime.pot automatically, so that we
-	don't have to worry about garbage getting in that file.  We'll
-	make sure after the next official release that old msgids don't
-	get lost.  See
-	<http://lists.gnu.org/archive/html/bison-patches/2005-07/msg00119.html>.
-
-	* runtime-po/Makefile.in.in, runtime-po/bison-runtime.pot: Remove.
-	Now auto-generated.
-	* PACKAGING: Don't claim that Gawk, GCC, Perl use this method yet.
-	Fix typos in explanations of the runtime file.
-	* bootstrap: Change gettext keyword from YYI18N to YY_.
-	Use standard Makefile.in.in in runtime-po, since we'll arrange
-	for backward-compatible bison-runtime.po files in a different way.
-	* data/glr.c (YY_): New macro, from yacc.c.
-	(yyuserAction, yyreportAmbiguity, yyreportSyntaxError, yyparse):
-	Translate messages intended for users.
-	(yyreportSyntaxError): Change "virtual memory" to "memory" to match
-	the wording in the other skeletons.  We don't know that the memory
-	is virtual.
-	* data/lalr1.cc (YY_): Renamed from _.  All uses changed.
-	Use same method that yacc.c uses.
-	Don't translate debugging messages.
-	(yy::yyreport_syntax_error): Put in a FIXME for the i18n stuff;
-	it doesn't work (yet), and requires C++ expertise to fix.
-	* data/yacc.c (YY_): Renamed from YY18N.  All uses changed.
-	Move defn to a more logical place, to be consistent with other
-	skeletons.
-	Don't translate debugging messages.
-	Don't assume line numbers fit in unsigned int; use unsigned long fmts.
-	* doc/bison.texinfo: Mention <libintl.h>.  Change glibc cross reference
-	to gettext cross reference.  Add indexing terms.  Mention YYENABLE_NLS.
-	* runtime-po/POTFILES.in: Add data/glr.c, data/lalr1.cc.
-
-	Fix yyerror / yylex test glitches noted by twlevo@xs4all.nl.
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Have yyerror return
-	void, not int.
-	* tests/glr-regression.at (Badly Collapsed GLR States):
-	Likewise.
-	(Improper handling of embedded actions and dollar(-N) in GLR parsers):
-	yylex should return 0 at EOF rather than aborting.
-
-	Improve tests for stack overflow in GLR parser.
-	Problem reported by twlevo@xs4all.nl.
-	* data/glr.c (struct yyGLRStack): Remove yyerrflag member.
-	All uses removed.
-	(yyStackOverflow): Just longjmp, but with value 2 so that caller
-	can handle the problem.
-	(YYCHK1): Use goto (a la yacc.c) rather than setting a flag.
-	(yyparse): New local variable yyresult to record the result.
-	Use result of setjmp to set it, rather than storing itinto
-	struct.
-	(yyDone): Remove label.
-	(yyacceptlab, yyabortlab, yyoverflowlab, yyreturn): New labels,
-	to mimic yacc.c.  Do not discard lookahead if it's EOF (possible
-	if YYABORT is used).
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Exit with
-	yyparse status; put status > 1 into diagnostic.
-	Check that status==2 works.
-	* tests/calc.at, tests/cxx-type.at, tests/glr-regression.at:
-	Use exit status 3 for failure to open (which shouldn't happen).
-
-2005-07-17  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/conflicts.at (%nonassoc and eof):  Don't exit with status
-	1 on syntax error; just let yyparse do its thing.
-	* tests/glr-regression.at (Badly Collapsed GLR States): Likewise.
-	* tests/torture.at (AT_DATA_STACK_TORTURE): Likewise.
-	(Exploding the Stack Size with Alloca):
-	(Exploding the Stack Size with Malloc):
-	Expect exit status 2, not 1, since the parser is supposed to blow
-	its stack.  Problem reported by twlevo@xs4all.nl.
-
-	* data/glr.c (yyparse): Don't assume that the initial calls
-	to YYMALLOC succeed; in that case, yyparse incorrectly returned 0.
-	Print a stack-overflow message and fail instead.
-	Initialize the line-number information before creating the stack,
-	so that the stack-overflow message can report line zero safely.
-
-2005-07-14  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix problems reported by twlevo@xs4all.nl.
-	* data/glr.c (YYSTACKEXPANDABLE): Don't define if already defined.
-	(yyuserMerge): Provide a default case if b4_mergers is empty.
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Define YYSTACKEXPANDABLE.
-	* tests/glr-regression.at
-	(Improper handling of embedded actions and dollar(-N) in GLR parsers):
-	Add casts to pacify C++ compilers.
-	* tests/glr-regression.at (Improper merging of GLR delayed action
-	sets): Declare yylex before using it.
-	* tests/Makefile.am (maintainer-check-g++): Fix a stray
-	$(GXX) that escaped the renaming of GXX to CXX.  Remove bogus
-	test for valgrind; valgrind is independent of g++.
-	(maintainer-check-posix): Add _POSIX2_VERSION=200112, to check
-	for compatibility with POSIX 1003.1-2001 (if running coreutils).
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Port to stricter C++.
-	Use a destructor, so that we can expand the stack.  Change
-	YYSTYPE to char * so that we can free it.  Cast result of malloc.
-
-2005-07-13  Paul Hilfinger  <hilfingr@CS.Berkeley.EDU>
-
-	* data/glr.c (yyuserAction): Fix uninitialized variable that caused
-	a valgrind failure.  Problem reported by twlevo@xs4all.nl.
-
-2005-07-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* PACKAGING: New file, suggested by Bruno Haible and taken from
-	similar wording in gettext's PACKAGING file.
-	* NEWS: Mention PACKAGING.
-	* Makefile.am (EXTRA_DIST): Add PACKAGING.
-
-2005-07-12  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Document recent i18n improvements.
-	* bootstrap: Get runtime translations into runtime-po.
-	Create runtime-po files automatically, if possible.
-	* configure.ac: Invoke BISON_I18N, so that we eat our own dog food.
-	* data/yacc.c: Rewrite inclusion of <libintl.h> so that ENABLE_NLS
-	does not infringe on the user's name space.
-	(YYENABLE_NLS): Renamed from ENABLE_BISON_NLS.
-	* doc/bison.texinfo (Internationalization): Revamp the English
-	and Texinfo syntax a bit, to try to make it clearer.
-	(Bison Options, Option Cross Key): Mention --print-localedir.
-	* m4/bison-i18n.m4 (BISON_I18N): Rename ENABLE_BISON_NLS to
-	YYENABLE_NLS.  Quote a bit more.
-	* runtime-po/.cvsignore: New file.
-	* runtime-po/Makefile.in.in (mostlyclean): Remove *.old.pot.
-	* runtime-po/Rules-quot: Remove; now created by bootstrap.
-	* runtime-po/quot.sed: Likewise.
-	* runtime-po/boldquot.sed: Likewise.
-	* runtime-po/en@quot.header: Likewise.
-	* runtime-po/en@boldquot.header: Likewise.
-	* runtime-po/insert-header.sin: Likewise.
-	* runtime-po/remove-potcdate.sin: Likewise.
-	* runtime-po/Makevars: Likewise.
-	* runtime-po/LINGUAS: Likewise.
-	* runtime-po/de.po: Likewise; we will rely on the translation project
-	to maintain this, so "bootstrap" should get it.
-	* src/getarg.c (PRINT_LOCALEDIR_OPTION): Let the C compiler determine
-	its value.
-	* src/main.c (main): Bind the bison-runtime domain, too.
-
-2005-07-12  Bruno Haible  <bruno@clisp.org>
-
-	* data/yacc.c: Include <libintl.h> when NLS is enabled.
-	(YYI18N): Renamed from _. Use dgettext when NLS is enabled.
-	* po/POTFILES.in: Remove autogenerated file src/parse-gram.c.
-	* runtime-po: New directory.
-	* runtime-po/Makefile.in.in: New file, copied from po/, with modified
-	$(DOMAIN).pot-update rule, so that old messages are never dropped.
-	* runtime-po/Rules-quot: New file, copied from po/.
-	* runtime-po/quot.sed: Likewise.
-	* runtime-po/boldquot.sed: Likewise.
-	* runtime-po/en@quot.header: Likewise.
-	* runtime-po/en@boldquot.header: Likewise.
-	* runtime-po/insert-header.sin: Likewise.
-	* runtime-po/remove-potcdate.sin: Likewise.
-	* runtime-po/Makevars: New file.
-	* runtime-po/POTFILES.in: New file.
-	* runtime-po/LINGUAS: New file.
-	* runtime-po/bison-runtime.pot: New file.
-	* runtime-po/de.po: New file.
-	* m4/bison.m4: New file.
-	* Makefile.am (SUBDIRS): Add runtime-po.
-	(aclocaldir, aclocal_DATA): New variables.
-	* configure.ac: Add AC_CONFIG_FILES of runtime-po/Makefile.in.
-	Define aclocaldir.
-	* src/getargs.c (usage): Document --print-localedir option.
-	(PRINT_LOCALEDIR_OPTION): New enum item.
-	(long_options): Add --print-localedir option.
-	(getargs): Handle --print-localedir option.
-	* doc/bison.texinfo (Bison Parser): Remove paragraph about _().
-	(Internationalization): New section.
-
-2005-07-12  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.h, src/symtab.c (symbol_print): Swap the arguments,
-	for consistency with the rest of the code.
-	* src/symlist.h, src/symlist.c (symbol_list_print): Ditto.
-	Add separators.
-
-2005-07-12  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y: Use %printer instead of YYPRINT.
-
-2005-07-12  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.h, src/symtab.c (symbol_print): New.
-	* src/symlist.h, src/symlist.c (symbol_list_print): New.
-	* src/symlist.c (symbol_list_n_type_name_get): Report the culprit.
-
-2005-07-12  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c (b4_syncline): Fix (swap) the definitions of
-	b4_at_dollar and b4_dollar_dollar.
-
-2005-07-11  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (Mystery Conflicts): Add reference to DeRemer
-	and Pennello's paper.
-
-2005-07-09  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c (yyparse): Undo previous patch.  Instead,
-	set yylsp[0] and yyvsp[0] only if the initial action
-	sets yylloc and yylval, respectively.
-
-	* data/yacc.c (yyparse): In the initial action, set
-	yylsp[0] and yyvsp[0] rather than yylloc and yylval.
-	This avoids the use of undefined variables if the initial
-	action does not set yylloc and/or yylval.
-
-2005-07-07  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* examples/calc++/calc++-driver.cc, examples/calc++/calc++-driver.hh:
-	* examples/calc++/calc++-scanner.ll, examples/calc++/calc++.cc:
-	Remove from CVS.  These files are automatically generated.
-	* examples/extexi: Clarify that this file is now part of Bison,
-	not GNU M4, and that it works with any POSIX-compatible Awk.
-	* examples/calc++/Makefile.am (run_extexi): Remove; not used.
-	($(calc_extracted)): Renamed from $(calc_sources_extracted),
-	so that we also get calc++-parser.yy.  Geneate it.
-	Use $(AWK), not gawk, since any conforming Awk will do.
-	Put comment before action, since older 'make' can't handle comment
-	in action.
-	$(BUILT_SOURCES): List all built sources, not just some of them.
-	$(MAINTAINERCLEANFILES): Remove *.stamp, and all built sources.
-	$($(srcdir)/calc++-parser.stamp): Work even if POSIXLY_CORRECT.
-	$($(calc_sources_generated)): Remove unnecessary test for existence
-	of target.  (This had a shell syntax error anyway; a stray "x".)
-	(calc_extracted): List $(srcdir)/calc++-parser.yy, not
-	calc++-parser.yy.
-	* examples/.cvsignore, examples/calc++/.cvsignore: New files.
-
-	* bootstrap (gnulib_modules): Add gettext, now that it's no longer
-	implied by the other modules.
-
-2005-07-06  Akim Demaille  <akim@epita.fr>
-
-	Bind examples/calc++ to the package.
-	* examples/calc++/Makefile: Remove, replaced by...
-	* examples/calc++/Makefile.am: ... this new file.
-	* examples/calc++/test: Remove input.
-	* examples/calc++/compile: Remove.
-	* examples/Makefile.am: New.
-	* configure.ac, Makefile.am: Adjust.
-	* doc/Makefile.am (clean-local): New, for more recent texi2dvis.
-
-2005-07-05  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yyFail): Drastically simplify; since the format argument
-	never had any % directives, we can simply pass it to yyerror.
-	(yyparse): Use "t a; a=b;" rather than "t a = b;" when a will
-	be modified later, as that is the usual style in glr.c.
-	Problems reported by Paul Hilfinger.
-
-	Rewrite GLR parser to catch more buffer overrun, storage exhaustion,
-	and size overflow errors.
-	* data/glr.c: Include <stdio.h> etc. after user prolog, not before,
-	in case the user prolog sets feature-test macros like _GNU_SOURCE.
-	(YYSIZEMAX): New macro.
-	(yystpcpy): New function, taken from yacc.c.
-	(struct yyGLRStack.yyspaceLeft): Now size_t, not int.
-	(yyinitGLRStack, yyfreeGLRstack): Remove unnecessary forward decls,
-	so that we don't have to maintain their signatures.
-	(yyFail): Check for buffer overflow, by using vsnprintf rather
-	than vsprintf.  Allocate a bigger buffer if possible.
-	Report an error if buffer allocation fails.
-	(yyStackOverflow): New function.
-	(yyinitStateSet, yyinitGLRStack): Return a boolean indicating whether
-	the initialization was successful.  It might fail if storage was
-	exhausted.
-	(yyexpandGLRStack): Add more checks for storage allocation failure.
-	Use yyStackOverflow to report failures.
-	(yymarkStackDeleted, yyglrShift, yyglrShiftDefer, yydoAction):
-	(yysplitStack, yyprocessOneStack, yyparse, yypstack):
-	Don't assume stack number fits in int.
-	(yysplitStack): Check for storage allocation failure.
-	(yysplitStack, yyprocessOneStack): Add pure_formals, so that we
-	can print diagnostics on storage allocation failure.  All callers
-	changed.
-	(yyresolveValue): Use yybool for boolean.
-	(yyreportSyntaxError): Check for size-calculation overflow.
-	This code is taken from yacc.c.
-	(yyparse): Check for storage allocation errors when allocating
-	the initial stack.
-
-2005-07-05  Akim Demaille  <akim@epita.fr>
-
-	Extract calc++ from the documentation.
-	* doc/bison.texinfo (Calc++): Add the extraction marks.
-	* examples/extexi: New, from the aborted GNU Programming 2E.
-	Separate the different paragraph of a file with empty lines.
-	* examples/Makefile: Use it to extract the whole calc++ example.
-
-2005-06-24  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (C++ Parser Interface): Use defcv to define
-	class typedefs.
-
-2005-06-22  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (C++ Language Interface): First stab.
-	(C++ Parsers): Remove.
-
-2005-06-22  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (yylex_): Honor %lex-param.
-
-2005-06-22  Akim Demaille  <akim@epita.fr>
-
-	Start a set of simple examples.
-	* examples/calc++/Makefile, examples/calc++/calc++-driver.cc,
-	* examples/calc++/calc++-driver.hh,
-	* examples/calc++/calc++-parser.yy,
-	* examples/calc++/calc++-scanner.ll, examples/calc++/calc++.cc,
-	* examples/calc++/compile, examples/calc++/test: New.
-
-2005-06-09  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c (malloc, free) [defined __cplusplus]: Wrap inside
-	extern "C" {}.  This fixes a problem reported by Paul Hilfinger,
-	which stems from the 2005-05-27 patch.
-
-2005-06-06  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
-
-	* data/glr.c: Modify treatment of unused parameters to permit use
-	of g++ (which doesn't allow __attribute__ ((unused)) for parameters).
-
-2005-05-30  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix infringement on user name space reported by Janos Zoltan Szabo.
-	* data/yacc.c (yyparse): strlen -> yystrlen.
-
-2005-05-30  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (_): New.
-	Translate the various messages.
-
-2005-05-27  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix infringement on user name space reported by Bruno Haible.
-	* data/yacc.c (YYSIZE_T): Define first, so that later decls can use it.
-	Prefer GCC's __SIZE_TYPE__ if available, so that we don't infringe on
-	the user's name space.
-	(alloca): Include <stdlib.h> to get it, if it's not built in.
-	(YYMALLOC, YYFREE): Define only if needed.
-	(malloc, free): Declare, but only if needed, as this infringes on
-	the user name space.
-
-2005-05-25  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix BeOS, FreeBSD, MacOS porting problems reported by Bruno Haible.
-	* lib/bitset.c (bitset_print): Don't assume size_t can be printed
-	with %d format.
-	* lib/ebitset.c (min, max): Undef before defining.
-	* lib/vbitset.c (min, max): Likewise.
-	* lib/subpipe.c (create_subpipe): Save local variables in case
-	vfork clobbers them.
-
-2005-05-24  Bruno Haible  <bruno@clisp.org>
-
-	* tests/synclines.at (AT_SYNCLINES_COMPILE): Add support for the
-	error message syntax used by gcc-4.0.
-
-2005-05-23  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* README: Mention m4 1.4.3.  Remove obsolete advice about
-	Sun Forte Developer 6 update 2, VMS, and MS-DOS.
-
-	* bootstrap: Remove workaround for problem I encountered with
-	gettext 0.14.1; it seems to be fixed now.
-
-2005-05-22  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Version 2.0a.
-
-	* src/files.c: Include "stdio-safer.h"; this fixes a typo in
-	the previous change.
-
-	Various maintainer cleanups.
-	* .cvsignore: Add a.exe, a.out, b.out,, conf[0-9]*, confdefs*,
-	conftest*, for benefit of CVS commands run at the same time as
-	"configure".  Add build-aux, since "bootstrap" now creates it and
-	its subfiles.
-	* Makefile.cfg (move_if_change): Remove.
-	* Makefile.maint: Remove the update stuff; we now use "bootstrap".
-	(ftp-gnu, www-gnu, move_if_change, local_updates, update):
-	(po_repo, do-po-update, po-update, wget_files, get-targets):
-	(config.guess-url_prefix, config.sub-url_prefix):
-	(ansi2knr.c-url_prefix, texinfo.tex-url_prefix):
-	(standards.texi-url_prefix, make-stds.texi-url_prefix, taget, url):
-	($(get-targets), cvs-files, automake_repo, wget-update, cvs-update):
-	Remove.
-	* configure.ac (AC_CONFIG_AUX_DIR): Change from config to build-aux;
-	this is now the recommended name.
-	* config/.cvsignore: Remove config.guess, config.rpath, config.sub,
-	depcomp, install-sh, mdate-sh, missing, mkinstalldirs, texinfo.tex,
-	ylwrap.  These files now go into build-aux.
-	* config/move-if-change: Remove.
-	* config/prev-version.txt: Bump from 1.75 to 2.0.
-
-	* bootstrap: Add stdio-safer, unistd-safer modules.
-	Remove m4/glibc2.m4 (introduced by latest gnulib, but
-	we don't need it).
-	* lib/.cvsignore: Add dup-safer.c, fd-safer.c,
-	fopen-safer.c, stdio-safer.h, unistd-safer.h.
-	* lib/subpipe.c: Include "unistd-safer.h".
-	(create_subpipe): Make sure all the newly-created
-	file descriptors are > 2, so that diagnostics don't
-	get sent down them (which might cause Bison to hang, in theory).
-	* m4/.cvsignore: Add stdio-safer.m4, unistd-safer.m4.
-	* src/files.c (xfopen): Use fopen_safer, not fopen.
-
-	* data/lalr1.cc (yy::]b4_parser_class_name[::parse): Port
-	yesterday's yacc.c fix.
-
-2005-05-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c, data/lalr1.cc: Update copyright date.
-
-	Fix a destructor bug reported by Wolfgang Spraul in
-	<http://lists.gnu.org/archive/html/bug-bison/2005-05/msg00042.html>.
-	* data/yacc.c (yyabortlab): Don't call destructor, and
-	don't set yychar to EMPTY.
-	(yyoverflowlab): Don't call destructor.
-	(yyreturn): Call destructor, if yychar is neither YYEOF nor YYEMPTY.
-	* tests/calc.at (AT_CHECK_CALC): Expect one fewer output lines,
-	since we no longer output the message "discarding lookahead token
-	end of input ()".
-
-2005-05-20  Paul Hilfinger  <hilfingr@CS.Berkeley.EDU>
-
-	* data/glr.c (YY_SYMBOL_PRINT): Don't print newline at end to
-	fix a small glitch in debugging output.
-	(yyprocessOneStack, yyrecoverSyntaxError, yyparse): Print newline
-	after YY_SYMBOL_PRINT where needed.
-
-	(struct yyGLRState): Add some comments.
-	(struct yySemanticOption): Add some comments.
-	(union yyGLRStackItem): Add comment.
-
-	(yymergeOptionSets): Correct this to properly perform the union,
-	avoiding infinite reported by Michael Rosien.
-	Update comment.
-
-	* tests/glr-regression.at: Add test for GLR merging error reported
-	by M. Rosien.
-
-2005-05-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* COPYING, ChangeLog, GNUmakefile, HACKING, Makefile.am,
-	Makefile.cfg, Makefile.maint, NEWS, README, README-alpha,
-	README-cvs, TODO, bootstrap, configure.ac, data/Makefile.am,
-	data/README, data/c.m4, data/glr.c, data/lalr1.cc, data/yacc.c,
-	data/m4sugar/m4sugar.m4, doc/Makefile.am, doc/bison.texinfo,
-	doc/fdl.texi, doc/gpl.texi, doc/refcard.tex, lib/Makefile.am,
-	lib/abitset.c, lib/abitset.h, lib/bbitset.h, lib/bitset.c,
-	lib/bitset.h, lib/bitset_stats.c, lib/bitset_stats.h,
-	lib/bitsetv-print.c, lib/bitsetv-print.h, lib/bitsetv.c,
-	lib/bitsetv.h, lib/ebitset.c, lib/ebitset.h, lib/get-errno.c,
-	lib/get-errno.h, lib/lbitset.c, lib/lbitset.h, lib/libiberty.h,
-	lib/main.c, lib/subpipe.c, lib/subpipe.h, lib/timevar.c,
-	lib/timevar.def, lib/timevar.h, lib/vbitset.c, lib/vbitset.h,
-	lib/yyerror.c, m4/cxx.m4, m4/m4.m4, m4/subpipe.m4, m4/timevar.m4,
-	m4/warning.m4, src/LR0.c, src/LR0.h, src/Makefile.am, src/assoc.c,
-	src/assoc.h, src/closure.c, src/closure.h, src/complain.c,
-	src/complain.h, src/conflicts.c, src/conflicts.h, src/derives.c,
-	src/derives.h, src/files.c, src/files.h, src/getargs.c,
-	src/getargs.h, src/gram.c, src/gram.h, src/lalr.c, src/lalr.h,
-	src/location.c, src/location.h, src/main.c, src/muscle_tab.c,
-	src/muscle_tab.h, src/nullable.c, src/nullable.h, src/output.c,
-	src/output.h, src/parse-gram.c, src/parse-gram.h,
-	src/parse-gram.y, src/print.c, src/print.h, src/print_graph.c,
-	src/print_graph.h, src/reader.c, src/reader.h, src/reduce.c,
-	src/reduce.h, src/relation.c, src/relation.h, src/scan-gram.l,
-	src/scan-skel.l, src/state.c, src/state.h, src/symlist.c,
-	src/symlist.h, src/symtab.c, src/symtab.h, src/system.h,
-	src/tables.c, src/tables.h, src/uniqstr.c, src/uniqstr.h,
-	src/vcg.c, src/vcg.h, src/vcg_defaults.h, tests/Makefile.am,
-	tests/actions.at, tests/c++.at, tests/calc.at, tests/conflicts.at,
-	tests/cxx-type.at, tests/existing.at, tests/glr-regression.at,
-	tests/headers.at, tests/input.at, tests/local.at, tests/output.at,
-	tests/reduce.at, tests/regression.at, tests/sets.at,
-	tests/synclines.at, tests/testsuite.at, tests/torture.at:
-	Update FSF postal mail address.
-
-2005-05-11  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/local.at (AT_COMPILE_CXX): Treat LDFLAGS like AT_COMPILE does.
-	Problem reported by Ralf Menzel.
-
-2005-05-01  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/actions.at: Test that stack overflow invokes destructors.
-	From Marcus Holland-Moritz.
-	* data/yacc.c (yyerrlab): Move the code that destroys the stack
-	from here....
-	(yyreturn): to here.  That way, destructors are called properly
-	even if the stack overflows, or the user calls YYACCEPT or
-	YYABORT.  Stack-overflow problem reported by Marcus Holland-Moritz.
-	(yyoverflowlab): Destroy the lookahead.
-
-2005-04-24  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c (YYSTACK_ALLOC_MAXIMUM): Add more-descriptive comment.
-
-2005-04-17  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Bison-generated C parsers no longer quote literal strings
-	associated with tokens.
-	* src/output.c (prepare_symbols): Don't escape strings,
-	since users don't want to see C escapes.
-	* tests/calc.at (AT_CHECK_CALC): Adjust to lack of quotes
-	in diagnostics.
-	* tests/input.at (Torturing the Scanner): Likewise.
-	* tests/regression.at (Token definitions, Web2c Actions): Likewise.
-
-2005-04-16  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/torture.at (AT_INCREASE_DATA_SIZE): Skip the test if
-	the data size is known to be too small and we can't increase it.
-	This works around an HP-UX 11.00 glitch reported by Andrew Benham.
-
-2005-04-15  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/parse-gram.y: Include quotearg.h.
-	(string_as_id): Quote $1 before using it as a key, since the
-	lexer no longer quotes it for us.
-	(string_content): Don't strip quotes, since lexer no longer
-	quotes it for us.
-	* src/scan-gram.l: Include quotearg.h.
-	("\""): Omit quote.
-	("'"<SC_ESCAPED_CHARACTER>): Quote symbol before using it as
-	a key, since the rest of the lexer doesn't quote it.
-	* src/symtab.c (symbol_get): Don't quote symbol; caller does it now.
-	* tests/regression.at (Token definitions): Check for backslashes
-	in token strings.
-
-	* data/yacc.c (YYSTACK_ALLOC_MAXIMUM): New macro.
-	(YYSIZE_T): Define to unsigned long int when using an older compiler.
-	(yyparse): Revamp code to generate long syntax error message, to
-	make it easier to translate, and to avoid problems with arithmetic
-	overflow.  Change "virtual memory" to "memory" in diagnostic, since
-	we don't know whether the memory is virtual.
-
-2005-04-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Bison-generated C parsers now use the _ macro to
-	translate strings.
-	* data/yacc.c (_) [!defined _]: New macro.
-	All English strings wrapped inside this macro.
-	* doc/bison.texinfo (Bison Parser): Document _.
-	* po/POTFILES.in: Include src/parse-gram.c, since it now
-	includes translateable strings that parse-gram.y doesn't.
-
-2005-04-12  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/symtab.c (symbol_make_alias): Call symbol_type_set,
-	reverting the 2004-10-11 change to this function.
-	(symbol_check_alias_consistency): Don't call symbol_type_set
-	if the type name is already correct.
-	* tests/input.at (Typed symbol aliases): New test, from Tim Van Holder.
-
-2005-03-25  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/regression.at (Token definitions): Don't use a token named
-	c, as that generates a "#define c ..." that runs afoul of buggy
-	stdlib.h that uses the identifier c as a member of struct
-	drand48_data.  Problem reported by Horst Wente.
-
-2005-03-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* bootstrap: Change translation URL from
-	http://www2.iro.umontreal.ca/~gnutra/po/maint/bison/ to
-	http://www.iro.umontreal.ca/translation/maint/bison/ to avoid
-	redirection glitches.  Problem reported by twlevo@xs4all.nl.
-
-2005-03-20  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/local.at (AT_COMPILE, AT_COMPILE_CXX): Don't put options
-	after operands; POSIX says this isn't portable for the c99 command.
-
-2005-03-18  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/glr-regression.at (glr-regr2a.y): Try to dump core
-	immediately if a data overrun has occurred; this may help us track
-	down what may be a spurious failure on MacOS.
-
-2005-03-17  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Respond to problems reported by twlevo@xs4all.nl.
-
-	* bootstrap: Use "trap - 0" rather than the unportable "trap 0".
-
-	* src/vcg.h: Comment fix.
-	* src/vcg_defaults.h: Parenthesize macro bodies to make them safe.
-	(G_CMAX): Change to -1 instead of INT_MAX.
-
-	* data/yacc.c (yyparse): Omit spaces before #line.
-
-2005-03-15  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/tables.c (state_number_to_vector_number): Put it inside an
-	"#if 0", since it's not currently used.  Problem reported by
-	Roland McGrath.
-
-2005-03-06  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/output.c (escaped_output): Renamed from
-	escaped_file_name_output, since we now use it for symbol tags as
-	well.  All uses changed.
-	(symbol_destructors_output, symbol_printers_output):
-	Escape symbol tags too.
-	Problem reported by Matyas Forstner in
-	<http://lists.gnu.org/archive/html/bug-bison/2005-03/msg00009.html>.
-
-	* src/muscle_tab.c (muscle_code_grow): Don't quote numbers; it's
-	not needed.
-	* src/output.c (user_actions_output, token_definitions_output,
-	symbol_destructors_output, symbol_printers_output): Likewise.
-	* src/reader.c (prologue_augment): Likewise.
-	* src/scan-gram.l (handle_action_dollar, handle_action_at): Likewise.
-
-	* src/vcg.c (output_edge): Don't quote linestyle arg.
-	Problem reported by twlevo@xs4all.nl.
-
-2005-02-28  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (Semantic Tokens): Fix scoping problem in
-	example, reported by Derek M Jones.  Also, make the example even
-	more outrageous, to better illustrate how bad the problem is.
-
-2005-02-24  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (Mfcalc Symtab): Correct the prototype for
-	putsym.  Typo reported by Sebastian Piping.
-
-2005-02-23  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (Language and Grammar): some -> same
-	(Epilogue): int he -> in the
-	Typos reported by Sebastian Piping via Justin Pence.
-
-2005-02-07  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/glr-regression.at (Improper handling of embedded actions
-	and dollar(-N) in GLR parsers): Renamed from "Improper handling of
-	embedded actions and $-N in GLR parsers", work around an Autoconf bug
-	with dollar signs in test names.
-	* tests/input.at (Invalid dollar-n): Renamed from "Invalid \$n",
-	for a similar reason.
-
-2005-01-28  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/vcg.c (output_graph): G_VIEW -> normal_view in case someone
-	wants to redefine G_VIEW.
-
-2005-01-27  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/vcg.c (get_view_str): Remove case for normal_view.
-	Problem reported by twlevo@xs4all.nl.
-
-2005-01-24  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* configure.ac (O0CFLAGS, O0CXXFLAGS): Fix quoting bug.
-	Problem reported by twlevo@xs4all.nl.
-
-	* doc/bison.texinfo: Change @dircategory from "GNU programming
-	tools" to "Software development".  Requested by Richard Stallman
-	via Karl Berry.
-
-2005-01-23  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/c++.at (AT_CHECK_DOXYGEN): Don't use options after operands.
-	Problem reported by twlevo@xs4all.nl.
-
-2005-01-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c (YYCOPY, yystpcpy, yyparse): Remove "register"
-	keyword; it's not needed with modern compilers, and it doesn't
-	affect correctness with older compilers.  Suggested by
-	twlevo@xs4all.nl.
-
-2005-01-17  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yyuserAction): Add "default: break;" case to pacify
-	gcc -Wswitch-default.
-	* data/lalr1.cc (yy::]b4_parser_class_name[::parse): Likewise.
-	* data/yacc.c (yyparse): Likewise.
-
-2005-01-12  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/system.h (OUTPUT_EXT, TAB_EXT): Define only if not defined
-	already.  Let config.h define any nonstandard values.
-
-2005-01-10  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* tests/calc.at (_AT_DATA_CALC_Y): Use alarm (100), not alarm (10),
-	for the benefit of slower hosts.  Problem reported by
-	Nelson H. F. Beebe.
-
-2005-01-07  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/yacc.c (yyparse): Pacify non-GCC compilers about yyerrorlab
-	being defined and not used.
-	* data/lalr1.cc (yyparse): Likewise.
-	Use "if (false)" rather than "if (0)".
-
-2005-01-05  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* TODO: Mention that we should allow NUL bytes in tokens.
-
-2005-01-02  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/scan-skel.l (<<EOF>>): Don't close standard output.
-	Problem reported by Hans Aberg.
-
-2005-01-01  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/getargs.c (version): Happy new year; update overall
-	program copyright date from 2004 to 2005.
-
-	* src/scan-skel.l ("@output ".*\n): Don't close standard output.
-	Problem reported by Hans Aberg.
-	* tests/output.at (AT_CHECK_OUTPUT): New arg SHELLIO.
-	(Output file names.): Add a test for the case when standard output
-	is closed.
-
-2004-12-26  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (@copying): Update FDL version number to 1.2,
-	to fix an oversight in the Bison 2.0 manual.
-
-2004-12-25  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Version 2.0.  Reformat the existing news items since
-	1.875, so that related items are grouped together.
-	* configure.ac (AC_INIT): Bump version to 2.0.
-	* src/parse-gram.c, src/parse-gram.h: Regenerate with 2.0.
-
-	* tests/torture.at (Exploding the Stack Size with Alloca): Set
-	YYSTACK_USE_ALLOCA to 1 if __GNUC__ or alloca are defined;
-	otherwise, we're not testing alloca.  Unfortunately there's no
-	simple way to consult HAVE_ALLOCA here.
-
-	* data/lalr1.cc (yydestruct_): Pacify unused variable warning
-	for yymsg, too.
-
-	* src/LR0.c (new_itemsets): Use memset rather than zeroing by
-	hand.  This avoids a warning about comparing int to size_t when
-	GCC warnings are enabled.
-
-2004-12-22  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Bison-generated parsers no longer default to using the
-	alloca function (when available) to extend the parser stack, due
-	to widespread problems in unchecked stack-overflow detection.
-	* data/glr.c (YYMAXDEPTH): Remove undef when zero.  It's the user's
-	responsibility to set it to a positive value.  This lets the user
-	specify a value that is not a preprocessor constant.
-	* data/yacc.c (YYMAXDEPTH): Likewise.
-	(YYSTACK_ALLOC): Define only if YYSTACK_USE_ALLOCA is nonzero.
-	* doc/bison.texinfo (Stack Overflow): YYMAXDEPTH no longer needs
-	to be a compile-time constant.  However, explain the constraints on it.
-	Also, explain the constraints on YYINITDEPTH.
-	(Table of Symbols): Explain that alloca is no longer the default.
-	Explain the user's responsibility if they define YYSTACK_USE_ALLOCA
-	to 1.
-
-	* doc/bison.texinfo (Location Default Action): Mention that n must
-	be zero when k is zero.  Suggested by Frank Heckenbach.
-
-2004-12-22  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (parser::token_number_type, parser::rhs_number_type)
-	(parser::state_type, parser::semantic_type, parser::location_type):
-	Private, not public.
-	(parser::parse): Return ints, not bool.
-	Returning a bool introduces a problem: 0 corresponds to false, and
-	it seems weird to return false on success.  Returning true changes
-	the conventions for yyparse.
-	Alternatively we could return void and send an exception.
-	There is no clear consensus (yet?).
-	(state_stack, semantic_stack, location_stack): Rename as...
-	(state_stack_type, semantic_stack_type, location_stack_type): these.
-	Private, not public.
-	* tests/c++.at: New.
-	* tests/testsuite.at, tests/Makefile.am: Adjust.
-
-2004-12-21  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (parser::parse): Return a bool instead of an int.
-
-2004-12-21  Akim Demaille  <akim@epita.fr>
-
-	Don't impose std::string for filenames.
-
-	* data/lalr1.cc (b4_filename_type): New.
-	(position::filename): Use it.
-	(parser.hh): Move the inclusion of stack.hh and location.hh below
-	the user code, so that needed headers for the filename type can be
-	included first.
-	Forward declare them before the user code.
-	* tests/Makefile.am (check-local, installcheck-local): Pass
-	TESTSUITEFLAGS to the TESTSUITE.
-
-2004-12-20  Akim Demaille  <akim@epita.fr>
-
-	Use more STL like names: my_class instead of MyClass.
-
-	* data/lalr1.cc (LocationStack, LocationType, RhsNumberType)
-	(SemanticStack, SemanticType, StateStack, StateType)
-	(TokenNumberType, Stack, Slice, Traits, Parser::location)
-	(Parser::value): Rename as...
-	(location_stack, location_type, rhs_number_type, semantic_stack)
-	(semantic_type, state_stack, state_type, token_number_type, stack)
-	(slice, traits, parser::yylloc, parser::yylval): these.
-
-	* tests/calc.at, tests/regression.at, tests/actions.at: Adjust.
-
-2004-12-19  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (YYLLOC_DEFAULT): Use GNU spacing conventions.
-	* data/yacc.c (YYLLOC_DEFAULT): Likewise.
-
-2004-12-17  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Remove uses of 'short int' and 'unsigned short int'.  This raises
-	some arbitrary limits.  It uses more memory but nowadays that's
-	not much of an issue.
-
-	This change does not affect the generated parsers; that's a different
-	task, as some users will want to conserve memory there.
-
-	Ideally we should use size_t to represent all object counts, and
-	something like ptrdiff_t to represent signed differences of object
-	counts; but that will require more code-cleanup than I have the
-	time to do right now.
-
-	* src/LR0.c (allocate_itemsets, new_itemsets, save_reductions):
-	Use size_t, not int or short int, to count objects.
-	* src/closure.c (nritemset, closure): Likewise.
-	* src/closure.h (nritemset, closure): Likewise.
-	* src/nullable.c (nullable_compute): Likewise.
-	* src/print.c (print_core): Likewise.
-	* src/print_graph.c (print_core): Likewise.
-	* src/state.c (state_compare, state_hash): Likewise.
-	* src/state.h (struct state): Likewise.
-	* src/tables.c (default_goto, goto_actions): Likewise.
-
-	* src/gram.h (rule_number, rule): Use int, not short int.
-	* src/output.c (prepare_rules): Likewise.
-	* src/state.h (state_number, STATE_NUMBER_MAXIMUM, transitions,
-	errs, reductions): Likewise.
-	* src/symtab.h (symbol_number, SYMBOL_NUMBER_MAXIMUM, struct symbol):
-	Likewise.
-	* src/tables.c (vector_number, tally, action_number,
-	ACTION_NUMBER_MINIMUM): Likewise.
-	* src/output.c (muscle_insert_short_int_table): Remove.
-
-2004-12-17  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: Extensive Doxygenation.
-	(error_): Rename as...
-	(error): this, since it is visible to the user.
-	Adjust callers.
-	(Parser::message): Now an automatic variable from...
-	(Parser::yyreport_syntax_error_): here.
-	* tests/actions.at, tests/calc.at, tests/regression.at: Adjust to
-	Parser::error.
-	* tests/input.at: Escape $.
-
-2004-12-16  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (b4_lhs_value, b4_rhs_value, b4_rhs-location):
-	Parenthesize rhs to avoid obscure problems with mistakes like
-	"foo$$bar = foo$1bar;".  Problem reported by twlevo at xs4all.
-	* data/lalr1.cc (b4_lhs_value, b4_rhs_value, b4_lhs_location,
-	b4_rhs_location): Likewise.
-	* data/yacc.c (b4_lhs_value, b4_rhs_value, b4_lhs_location,
-	b4_rhs_location): Likewise.
-
-2004-12-16  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (yyreport_syntax_error_): Catch up with glr.c and
-	yacc.c: be sure to stay within yycheck_.
-	* tests/actions.at: Re-enable C++ tests.
-
-2004-12-16  Akim Demaille  <akim@epita.fr>
-
-	* src/print_graph.c (print_graph): Remove layoutalgorithm uses for
-	real.
-
-2004-12-16  Akim Demaille  <akim@epita.fr>
-
-	Use #define to handle the %name-prefix.
-
-	* data/glr.c, data/yacc.c: Comment changes.
-	* data/lalr1.cc (yylex): Use #define to select the name of yylex,
-	so that one can refer to yylex in the parser file, and have it
-	renamed, as is the case with other skeletons.
-
-2004-12-16  Akim Demaille  <akim@epita.fr>
-
-	Move lalr1.cc internals into yy*.
-
-	* data/lalr1.cc (semantic_stack_, location_stack_, state_stack_)
-	(semantic_stack_, location_stack_, pact_, pact_ninf_, defact_)
-	(pgoto_, defgoto_, table_, table_ninf_, check_, stos_, r1_, r2_)
-	(name_, rhs_, prhs_, rline_, token_number_, eof_, last_, nnts_)
-	(empty_, final_, terror_, errcode_, ntokens_)
-	(user_token_number_max_, undef_token_, n_, len_, state_, nerrs_)
-	(looka_, ilooka_, error_range_, nerrs_):
-	Rename as...
-	(yysemantic_stack_, yylocation_stack_, yystate_stack_)
-	(yysemantic_stack_, yylocation_stack_, yypact_, yypact_ninf_)
-	(yydefact_, yypgoto_, yydefgoto_, yytable_, yytable_ninf_)
-	(yycheck_, yystos_, yyr1_, yyr2_, yyname_, yyrhs_, yyprhs_)
-	(yyrline_, yytoken_number_, yyeof_, yylast_, yynnts_, yyempty_)
-	(yyfinal_, yyterror_, yyerrcode_, yyntokens_)
-	(yyuser_token_number_max_, yyundef_token_, yyn_, yylen_, yystate_)
-	(yynerrs_, yylooka_, yyilooka_, yyerror_range_, yynerrs_):
-	these.
-
-2004-12-15  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix some problems reported by twlevo at xs4all.
-	* src/symtab.c (symbol_new): Report an error if the input grammar
-	contains too many symbols.  This is better than calling abort() later.
-	* src/vcg.h (enum layoutalgorithm): Remove.  All uses removed.
-	(struct node, struct graph):
-	Rename member expand to stretch.  All uses changed.
-	(struct graph): Remove member layoutalgorithm.  All uses removed.
-	* src/vcg.c (get_layoutalgorithm_str): Remove.  All uses removed.
-	* src/vcg_defaults.h (G_STRETCH): Renamed from G_EXPAND.
-	All uses changed.
-	(N_STRETCH): Rename from N_EXPAND.  All uses changed.
-
-2004-12-15  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: Normalize /** \brief ... */ to ///.
-	Add more Doxygen comments.
-	(symprint_, stack_print_, reduce_print_, destruct_, pop)
-	(report_syntax_error_, translate_): Rename as...
-	(yysymprint_, yystack_print_, yyreduce_print_, yydestruct_)
-	(yypop_, yyreport_syntax_error_, yytranslate_): this.
-
-2004-12-15  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (lex_): Rename as...
-	(yylex_): this.
-	Move the trace here.
-	Take the %name-prefix into account.
-	Reported by Alexandre Duret-Lutz.
-
-2004-12-15  Akim Demaille  <akim@epita.fr>
-
-	Simplify the C++ parser constructor.
-
-	* data/lalr1.cc (debug_): Rename as...
-	(yydebug_): so that the parser's internals are always in the yy*
-	pseudo namespace.
-	Adjust uses.
-	(b4_parse_param_decl): Remove the leading comma as it is now only
-	called as unique argument list.
-	(Parser::Parser): Remove the constructor accepting a location and
-	an initial debugging level.
-	Remove from the other ctor the argument for the debugging level.
-	(debug_level_type, debug_level, set_debug_level): New.
-
-	* tests/actions.at, tests/calc.at, tests/regression.at: Adjust
-	constructor calls.
-
-2004-12-15  Akim Demaille  <akim@epita.fr>
-
-	Remove b4_root related material: failure experiment
-	(which goal was to allow to derive from a class).
-
-	* data/lalr1.cc (b4_root, b4_param, b4_constructor): Remove
-	definitions and uses.
-
-2004-12-14  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (struct yyGLRStack): yyerror_range now has 3 items,
-	not 2, since it's not portable to subtract 1 from the start of an
-	array.  The new item 0 is never set or used.  All uses changed.
-
-	(yyrecoverSyntaxError): Use YYLLOC_DEFAULT instead of assuming
-	the default definition of YYLLOC_DEFAULT.  Problem reported
-	by Frank Heckenbach.
-
-2004-12-12  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (YYRHSLOC): Don't have two definitions, one for
-	the normal case and one for the error case.  Just use the
-	first one uniformly.  Problem reported by Frank Heckenbach.
-	(YYLLOC_DEFAULT): Use the conventions of yacc.c, so we can
-	use exactly the same macro in both places.
-	(yyerror_range): Now of type yyGLRStackItem, not YYLTYPE,
-	so that the normal-case YYRHSLOC works for the error case too.
-	All uses changed.
-	* data/yacc.c (YYRHSLOC): New macro, taken from glr.c.
-	(YYLLOC_DEFAULT): Use the same macro as glr.c.
-	* doc/bison.texinfo (Location Default Action): Don't claim that
-	we have an array of locations.  Use the same macro for both glr
-	and lalr parsers.  Mention YYRHSLOC.  Mention what happens when
-	the index is 0.
-
-2004-12-10  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* HACKING: Update email addresses to send announcements to.
-
-	* configure.ac (AC_INIT): Bump version to 1.875f.
-
-2004-12-10  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Version 1.875e.
-	* src/parse-gram.c, src/parse-gram.h: Regenerate with 1.875e.
-
-	* src/scan-skel.l: Include "complain.h", for "fatal".
-
-	* src/relation.h (relation_print, relation_digraph):
-	Relation sizes are of type relation_node, not size_t (this is
-	merely a doc fix, since the two types are equivalent).
-	(relation_transpose): Relation sizes are of type relation_node,
-	not int.
-	* src/relation.c: Likewise.
-	(top, infinity): Now of type relation_node, not int.
-	(traverse, relation_transpose): Use relation_node, not int.
-
-	* data/glr.c (yyuserAction, yyrecoverSyntaxError): Mark args
-	with ATTRIBUTE_UNUSED if they're not used, to avoid GCC warning.
-	(yyparse): Remove unused local introduced in 2004-10-25 patch.
-
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): New arg
-	specifying whether the test should be skipped.  Use it tp
-	specify that the [%defines %skeleton "lalr1.cc"] tests currently
-	fail on some hosts, and should be skipped.
-
-2004-12-08  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/system.h (CALLOC, MALLOC, REALLOC): Remove.  All callers
-	changed to use xcalloc, xnmalloc, xnrealloc, respectively,
-	unless otherwise specified below.
-
-	* src/LR0.c (allocate_itemsets): Use xnmalloc, not xcalloc,
-	to allocate kernel_base, kernel_items, kernel_size, since
-	they needn't be initialized to 0.
-	(allocate_storgae): Likewise, for shiftset, redset, shift_symbol.
-	* src/closure.c (new_closure): Likewise, for itemset.
-	* src/derives.c (derives_compute): Likewise, for delts, derives, q.
-	* src/lalr.c (set_goto_map): Likewise, for temp_map.
-	(initialize_F): Likewise, for reads, edge, reads[i], includes[i].
-	(build_relations): Likewise for edge, states1, includes.
-	* src/nullable.c (nullable_compute): Likewise, for squeue, relts.
-	* src/reader.c (packgram): Likewise, for ritem, rules.
-	* src/reduce.c (nonterminals_reduce): Likewise for nontermmap.
-	* src/relation.c (relation_digraph): Likewise for VERTICES.
-	(relation_transpose): Likewise for new_R, end_R.
-	* src/symtab.c (symbols_token_translations_init): Likewise for
-	token_translations.
-	* src/tables.c (save_row): Likewise for froms, tos, conflict_tos.
-	(token_actions): Likewise for yydefact, actrow, conflrow,
-	conflict_list.
-	(save_column): Likewise for froms[symno], tos[symno].
-	(goto_actions): Likewise for state_count.
-	(pack_table): Likewise for base, pos, check.
-	(tables_generate): Likewise for width.
-
-	* src/LR0.c (set_states): Don't reuse kernel_size and kernel_base
-	for initial core.  Just have a separate core, so we needn't worry
-	about whether kernel_size and kernel_base are initialized.
-
-	* src/LR0.c (shift_symbol, redset, shiftset, kernel_base,
-	kernel_size, kernel_items): Remove unnecessary initialization.
-	* src/conflicts.c (conflicts): Likewise.
-	* src/derives.c (derives): Likewise.
-	* src/muscle_tablc (muscle_insert): Likewise.
-	* src/relation.c (relation_digraph): Likewise.
-	* src/tables.c (froms, tos, conflict_tos, tally, width, actrow, order,
-	conflrow, conflict_table, conflict_list, table, check):
-	Likewise.
-
-	* src/closure.c (new_closure): Arg is of type unsigned int, not int.
-	This is because all callers pass unsigned int.
-	* src/closure.h (new_closure): Likewise.
-
-	* src/lalr.c (initialize_F): Initialize reads[i] in all cases.
-	(build_relations): Initialize includes[i] in all cases.
-	* src/reader.c (packgram): Always initialize rules[ruleno].prec
-	and rules[ruleno].precsym.  Initialize members in order.
-	* src/relation.c (relation_transpose): Always initialize new_R[i]
-	and end_R[i].
-	* src/table.c (conflict_row): Initialize 0 at end of conflict_list.
-
-	* src/output.c (prepare_actions): Pass 0 instead of conflict_list[0];
-	conflict_list[0] was always 0, but now it isn't initialized.
-
-	* src/table.c (table_grow): When conflict_table grew, the grown
-	area wasn't cleared.  Fix this.
-
-	* lib/.cvsignore: Add strdup.c, strdup.h.
-	* m4/.cvsignore: Add strdup.m4.
-
-2004-12-07  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/lalr.h (GOTO_NUMBER_MAXIMUM): New macro.
-	* src/lalr.c (set_goto_map): Don't allow ngotos to equal
-	GOTO_NUMBER_MAXIMUM, since we occasionally compute
-	ngotos + 1 without checking for overflow.
-	(build_relations): Use END_NODE, not -1, to denote end of edges.
-	* src/lalr.c (set_goto_map, map_goto, initialize_F, add_loopback_edge,
-	build_relations): Use goto_number, not int, for goto numbers.
-	* src/tables.c (save_column, default_goto): Likewise.
-
-2004-11-23  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (YYSTYPE): Define it as is done for C, instead
-	of #defining from yystype.
-	Don't typedef yystype, C++ does not need it.
-	This lets it possible to forward declare it as union.
-
-2004-11-23  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* bootstrap (gnulib_modules): Add extensions.
-	Problem reported by Jim Meyering.
-
-2004-11-22  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/LR0.c, src/closure.c, src/derives.c, src/gram.c,
-	src/lalr.c, src/nullable.c, src/relation.c, src/scan-skel.l,
-	src/system.h, src/tables.c: XFREE -> free, to accommodate
-	recent change to gnulib xalloc.h.
-	Problem reported by Jim Meyering.
-
-2004-11-17  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (symprint_): Use cdebug_ to avoid warnings.
-
-2004-10-28  Akim Demaille  <akim@epita.fr>,
-	    Alexandre Duret-Lutz <adl@gnu.org>
-
-	* data/lalr1.cc (Parser::yycdebug_): New, a pointer, to allow
-	changes.
-	(YYCDEBUG): Adjust.
-	Use it instead of cdebug_.
-	(Parser::debug_stream, Parser::set_debug_stream): New.
-	(Parser::symprint_): Define cdebug_ for temporary backward
-	compatibility.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Use
-	debug_stream ().
-
-2004-11-17  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (Parser:print_): Remove, use %printer instead.
-	* tests/regression.at (_AT_DATA_DANCER_Y): Adjust.
-	* tests/calc.at (_AT_DATA_CALC_Y): Ditto.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Likewise.
-
-2004-10-27  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yyloc_default): Remove; not used.
-	Problem reported by Frank Heckenbach.
-
-2004-10-25  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c (YYRHSLOC): Move its definition next to its uses.
-	Introduce another definition to address simple location arrays.
-	(yyGLRStack): New member: yyerror_range.
-	(yyrecoverSyntaxError, yyparse): Update it.
-	(yyrecoverSyntaxError): Use it when shifting the error token to
-	have an accurate range, equivalent to the one computed by both
-	yacc.c and lalr1.cc.
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Change its yylex so
-	that column numbers start at column 0, as per GNU Coding
-	Standards, the others tests, and the doc.
-	(_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_AMBIG_GLR_OUTPUT_WITH_LOC):
-	Adjust to the above change (first column is 0).
-	And adjust the location of the "<error>", now covering the whole
-	line.
-
-2004-10-22  Akim Demaille  <akim@epita.fr>
-	and Paul Eggert  <eggert@cs.ucla.edu>
-
-	Remove some arbitrary limits on goto numbers and relations.
-	* src/lalr.c (goto_map, ngotos, from_state, to_state): Omit
-	initial values, since they're never used.
-	(set_goto_map): ngotos is now unsigned, so test for overflow
-	by seeing whether it wraps around to zero.
-	* src/lalr.h (goto_number): Now size_t, not short int.
-	(GOTO_NUMBER_MAXIMUM): Remove.
-	* src/relation.c (relation_print, traverse, relation_transpose):
-	Check for END_NODE rather than looking at sign.
-	* src/relation.h (END_NODE): New macro.
-	(relation_node): Now size_t, not short int.
-
-2004-10-22  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo (Language and Grammar): In example, "int" is a
-	keyword, not an identifier.  Problem reported by Baron Schwartz in
-	<http://lists.gnu.org/archive/html/bug-bison/2004-10/msg00017.html>.
-
-2004-10-11  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.c (symbol_check_alias_consistency): Also check
-	type names, destructors, and printers.
-	Reported by Alexandre Duret-Lutz.
-	Recode the handling of associativity and precedence in terms
-	of symbol_precedence_set.
-	Accept no redeclaration at all, not even equal to the previous
-	value.
-	(redeclaration): New.
-	Use it to factor redeclaration complaints.
-	(symbol_make_alias): Don't set the type of the alias, let
-	symbol_check_alias_consistency do it as for other features.
-	* src/symtab.h (symbol): Add new member prec_location, and
-	type_location.
-	* src/symtab.c (symbol_precedence_set, symbol_type_set): Set them.
-	* tests/input.at (Incompatible Aliases): New.
-
-2004-10-09  Paul Eggert  <eggert@cs.ucla.edu>
-
-	.cvsignore fixes to accommodate gnulib changes,
-	and the practice of naming build directories "_build".
-	* .cvsignore: Add "_*".  Sort.
-	* lib/.cvsignore: Add getopt_.h, xalloc-die.c.
-	* m4/.cvsignore: Add "*_gl.m4".
-
-2004-10-06  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y (add_param): Fix the truncation of trailing
-	spaces.
-
-2004-10-05  Akim Demaille  <akim@epita.fr>
-
-	In Bison 1.875's yacc.c, YYLLOC_DEFAULT was called regardless
-	whether the reducion was empty or not.  This leaves room to
-	improve the use of YYLLOC_DEFAULT in such a case.
-	lalr1.cc is still experimental, so changing this is acceptable.
-	And finally, there are probably not many users who changed the
-	handling of locations in GLR, so changing is admissible too.
-
-	* data/glr.c, data/lalr1.cc, data/yacc.c (YYLLOC_DEFAULT): On an
-	empty reduction, set @$ to an empty location ending the previously
-	stacked symbol.
-	Adjust uses to make sure the code is triggered on empty
-	reductions.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust the
-	expected output: empty reductions have empty locations.
-
-2004-09-29  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: Move towards a more standard C++ coding style
-	for templates: Class < T > -> Class<T>.
-
-2004-09-29  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: Reinstall the former ctor, for sake of
-	compatibility, but warn it will be removed.
-	Move towards a more standard C++ coding style (i.e., type *var ->
-	type* var).
-
-2004-09-27  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/parse-gram.y (add_param): Rewrite to avoid strchr,
-	since it's less likely to work if NULs are involved in the future.
-
-2004-09-27  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c (YY_LOCATION_PRINT): Fix its default declaration.
-
-2004-09-27  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (b4_parse_param_decl_1): New.
-	(b4_parse_param_decl): Use it to have different names between attribute
-	and argument names.
-	(b4_cc_constructor_call): Likewise.
-
-2004-09-24  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y (add_param): Strip the leading and trailing
-	blanks from a formal argument declaration.
-	(YY_LOCATION_PRINT): New.
-
-2004-09-24  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_yysymprint_generate): Move the YYINPUT invocation
-	after the location.
-
-2004-09-24  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Table of Symbols): Sort.
-
-2004-09-21  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c, data/glr.c (b4_at_dollar, b4_dollar_dollar): Remove
-	the useless parentheses.
-	Suggested by Paul Eggert.
-
-2004-09-20  Akim Demaille  <akim@epita.fr>
-
-	Let the initial-action act on the look-ahead, and use it for the
-	"initial push" (corresponding to an hypothetical beginning-of-file).
-	And let lalr1.cc honor %initial-action.
-
-	* doc/bison.texinfo (Initial Action Decl): Clarify, and add an
-	example.
-	* data/lalr1.cc (Parser::initlocation_): Remove, bad experiment.
-	(Parser::Parser): Remove the ctor that used to initialize it.
-	(Parser::parse): Like in the other skeletons, issue the "starting
-	parse" message before any action.
-	Honor %initial-action.
-	Initialize the stacks with the lookahead.
-	* data/yacc.c: Let $$ and @$ in %initial-action designate the
-	look-ahead.
-	Push them in the stacks.
-	* tests/actions.at, tests/calc.at: Adjust the C++ ctor invocations.
-
-2004-09-20  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Initial Action Decl): New.
-
-2004-09-20  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c (YY_LOCATION_PRINT): Use YYLTYPE_IS_TRIVIAL as a
-	clearer criterion to define it.
-	(parse): Initialize the initial location when YYLTYPE_IS_TRIVIAL.
-	When reducing on an empty RHS, use the latest stacked location as
-	location.
-	yylloc is not always available.
-	* data/glr.c: Likewise.
-	Also, honor initial-actions.
-
-2004-09-20  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c (YY_LOCATION_PRINT): New.
-	Define when we know YYLTYPE's structure, i.e., when the default
-	YYLLOC_DEFAULT is used.
-	* data/c.m4 (b4_yysymprint_generate): Use it.
-	* data/lalr1.cc (YYLLOC_DEFAULT): Stop relying on the initial
-	value of the result.
-	(error_start_): Replace with...
-	(error_range_): this location array.
-	This allows to replace code relying on the implementation of
-	locations by portable code.
-	* data/yacc.c (yylerrsp): Replace with...
-	(yyerror_range): this.
-	Every time a token is popped, update yyerror_range[0], to have an
-	accurate location for the error token.
-	* data/glr.c (YY_LOCATION_PRINT): New.
-	(yyprocessOneStack): Fix an invocation of YY_SYMBOL_PRINT:
-	deference a pointer.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): No longer
-	report the location in %printers.
-
-	* src/scan-skel.l: Instead of abort, report error messages to ease
-	understanding skeleton scanning failures.
-
-2004-09-16  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (Stack::Iterator, Stack::ConstIterator): Rename as...
-	(iterator, const_iterator): these, to be more in the C++ spirit.
-	Also, return reverse iterators so that when displaying the stack
-	we display its bottom first.
-	(Parser::stack_print_, Parser::reduce_print_): Match the messages
-	from yacc.c.
-	We should probably use vector here though.
-
-2004-09-16  Akim Demaille  <akim@epita.fr>
-
-	Have more complete shift traces.
-
-	* data/yacc.c, data/lalr1.c, data/glr.c: Use YY_SYMBOL_PRINT
-	to report Shifts instead of ad hoc YYDPRINTF invocations,
-	including for the error token.
-	* data/lalr1.cc (symprint_): Output the location.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): In C++, don't
-	output the location within the %printer.
-	Activate GLR tests, at least to make sure they compile properly.
-	They still don't pass though.
-	* tests/calc.at: Adjust expect verbose output, since now "Entering
-	state..." is on a different line than the "Shifting" message.
-
-2004-09-08  Akim Demaille  <akim@epita.fr>
-
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Move the
-	Bison directive from the Bison file to the invocation of this
-	macro, so that these directives are passed to
-	AT_BISON_OPTION_PUSHDEFS to get correct help macros.
-	Use these helping macros (e.g., AT_LOC, AT_VAL and so forth).
-	Move the AT_SETUP/AT_CLEANUP outside, to report as test title
-	the extra Bison directives instead of the whole series.
-	Change the grammar so that there are recoverable errors, and
-	unrecoverable errors.  Now we can have the parser give up before
-	consuming the whole input.  As a result we now can observe that
-	the lookahead is freed when needed.
-	Change the parser source to parse argv[1] instead of a hard coded
-	string.
-	Simplify yylex, and give a value and location to EOF.
-	Simplify some invocations of AT_CHECK_PRINTER_AND_DESTRUCTOR that
-	passed directives already coded in the file.
-	Add some tests to check the location of "error".
-	For some tests, the C++ parser is correct, and not yacc.c.
-	For other tests, they provide different, but unsatisfying, values,
-	so keep the C++ value so that at least one parser is "correct"
-	according to the test suite.
-	(Actions after errors): Remove, this is subsumed by the
-	AT_CHECK_PRINTER_AND_DESTRUCTOR series.
-
-2004-09-06  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: Adjust the indentation of the labels.
-	(Parser::pop): New.
-	Use it.
-
-2004-09-06  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.cc, data/glr.cc (yydestruct): Accept an additional
-	argument, an informative message.
-	Call YY_SYMBOL_PRINT.
-	Adjust all callers: integrate the associated YY_SYMBOL_PRINT.
-	* data/lalr1.cc (destruct_): Likewise.
-	In addition, no longer depend on b4_yysymprint_generate and
-	b4_yydestruct_generate to generate these functions, do it "by
-	hand".
-
-2004-09-03  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c, data/lalr1.cc, data/yacc.c: When YYABORT was
-	invoked, yydestruct the lookahead.
-	* tests/calc.at (Calculator $1): Update the expected lengths of
-	traces: there is an added line for the discarded lookahead.
-	* doc/bison.texinfo (Destructor Decl): Some rewording.
-	Define "discarded" symbols.
-
-2004-09-02  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (translate_, destruct_): No reason to be static.
-
-2004-09-02  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c, yacc.c (YYDSYMPRINT): Remove, not used.
-	(YYDSYMPRINTF): Rename as...
-	(YY_SYMBOL_PRINT): this.
-	* data/lalr1.cc (YY_SYMBOL_PRINT): New, modeled after the previous
-	two.
-	Use it instead of direct symprint_ calls.
-	(yybackup): Tweak the "Now at end of input" case to match yacc.c's
-	one.
-
-2004-09-02  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (b4_yysymprint_generate): New.
-	(symprint_): New member function, defined when YYDEBUG.
-	Use it consistently instead of token/nterm debugging output by
-	hand.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust
-	%printer calls to use cdebug_ when using lalr1.cc.
-
-2004-08-30  Florian Krohm  <florian@edamail.fishkill.ibm.com>
-
-	* data/glr.c: Guard the declarations of yypstack and yypdumpstack
-	with #ifdef YYDEBUG.
-
-2004-08-26  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Implementing Loops): Rename as...
-	(Implementing Gotos/Loops): this.
-
-2004-08-13  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Adjust to latest gnulib.
-	* bootstrap (gnulib_modules): Add xalloc-die.
-	Set LC_ALL=C so that file names sort consistently.
-	Prefer the gnulib copies of gettext.m4, glibc21.m4,
-	inttypes_h.m4, lib-ld.m4, lib-prefix.m4, po.m4, stdint_h.m4,
-	uintmax_t.m4, ulonglong.m4.
-	(intl_files_to_remove): Add gettext.m4, lib-ld.m4, lib-prefix.m4,
-	po.m4 since we are now using _gl.m4 instead.
-
-2004-08-10  Florian Krohm  <florian@edamail.fishkill.ibm.com>
-
-	* src/scan-action.l: Remove. Scanning of semantic actions is
-	handled in scan-gram.l.
-
-2004-08-07  Florian Krohm  <florian@edamail.fishkill.ibm.com>
-
-	* src/scan-gram.l (handle_syncline): Use uniqstr_new not xstrdup.
-
-	* src/location.h (struct): The file member is a uniqstr.
-	(equal_boundaries): Use UNIQSTR_EQ for comparison.
-
-2004-07-22  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix bug with non-%union parsers that have printers or destructors,
-	which led to a Bison core dump.  Reported by Peter Fales in
-	<http://lists.gnu.org/archive/html/bug-bison/2004-07/msg00014.html>.
-
-	* data/c.m4 (b4_symbol_actions): Don't assume %union was used.
-	* data/lalr1.cc (yystype) [defined YYSTYPE]: Define to YYSTYPE,
-	not to our own type.
-	* src/output.c (symbol_destructors_output, symbol_printers_output):
-	Don't assume %union.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR,
-	AT_CHECK_PRINTER_AND_DESTRUCTOR): New argument
-	UNION-FLAG.  All callers changed.
-	(_AT_CHECK_PRINTER_AND_DESTRUCTOR): Don't assume %union.
-	Use type char, not unsigned int, when declaring an array of char;
-	this lets us remove a cast.
-	(Printers and Destructors): Add non-%union test cases.
-
-2004-06-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* doc/bison.texinfo: Minor editorial changes, mostly to the new
-	GLR writeups.  E.g., avoid frenchspacing and the future tense,
-	change "lookahead" to "look-ahead", and change "wrt" to "with
-	respect to".
-
-2004-06-21  Paul Hilfinger  <hilfingr@CS.Berkeley.EDU>
-
-	* doc/bison.texinfo (Merging GLR Parses, Compiler Requirements):
-	New sections, split off from the GLR Parsers section.  Put the new
-	Simple GLR Parser near the start of the GLR section, for clarity.
-	Rewrite connective text.
-
-2004-06-21  Frank Heckenbach  <frank@g-n-u.de>
-
-	* doc/bison.texinfo (Simple GLR Parsers): New section.
-
-2004-06-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS, TODO, doc/bison.texinfo:
-	Use "look-ahead" instead of "lookahead", to be consistent.
-	* REFERENCES: Fix incorrect reference to DeRemer and Pennello,
-	while we're fixing "look-ahead".
-	* src/conflicts.c (shift_set): Renamed from shiftset.
-	(look_ahead_set): Renamed from lookaheadset.
-	* src/print.c: Likewise.
-	* src/getargs.c (report_args): Add "look-ahead" as the new canonical
-	name for "lookahead".
-	(report_types, usage): Likewise.
-	* src/getargs.h (report_look_ahead_tokens): Renamed from
-	report_lookaheads.
-	* src/lalr.c (compute_look_ahead_tokens): Renamed from
-	compute_lookaheads.
-	(state_look_ahead_tokens_count): Renamed from state_lookaheads_count.
-	(look_ahead_tokens_print): Renamed from lookaheads_print.
-	* src/state.c (state_rule_look_ahead_tokens_print): Renamed from
-	state_rule_lookaheads_print.
-	* src/state.h: Likewise.
-	(reductions.look_ahead_tokens): Renamed from lookaheads.
-	* tests/torture.at (AT_DATA_LOOK_AHEAD_TOKENS_GRAMMAR): Renamed from
-	AT_DATA_LOOKAHEADS_GRAMMAR.
-
-2004-06-03  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* README: Update location of patched M4 distribution.
-
-2004-05-30  Albert Chin-A-Young  <china@thewrittenword.com>
-
-	Don't assume the C++ compiler takes the same arguments as the C compiler
-	(trivial change).
-	* configure.ac (O0CXXFLAGS): New var.
-	* tests/atlocal.in (CXXFLAGS): Use it.
-
-2004-05-29  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Fix some "make check" problems with C++ reported by
-	Albert Chin-A-Young for Tru64 C++ in this thread:
-	http://lists.gnu.org/archive/html/bug-bison/2004-05/msg00049.html
-
-	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Check for std::cerr.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR):
-	Output to a .cc file for C++, not to a .c file.
-	* tests/calc.at (AT_CHECK_CALC): Likewise.
-	* tests/regression.at (AT_CHECK_DANCER): Likewise.
-	* tests/local.at (AT_COMPILE_CXX): Default to OUTPUT.cc, not OUTPUT.c.
-
-2004-05-28  Albert Chin-A-Young  <china@thewrittenword.com>
-
-	* tests/calc.at, tests/actions.at: Workaround for SGI
-	C++ compiler.  (trivial change)
-
-2004-05-27  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Spent a few hours checking out which prerequisite versions the
-	current sources actually require.  I went all the way back to
-	Gettext 0.10.40, Automake 1.4, and Autoconf 2.57 and investigated
-	a seemingly endless set of combinations of versions more recent
-	than that.  The bottom line is that the current sources require
-	fairly recent versions of the build tools, and it'll be some work
-	to change this.
-	* configure.ac (AC_PREREQ): Increase from 2.58 to 2.59.
-	(AM_INIT_AUTOMAKE): Increase from 1.7 to 1.8.
-	(AM_GNU_GETTEXT_VERSION): Increase from 0.11.5 to 0.12.
-	Add comments explaining why those particular versions are
-	currently needed.
-
-	* src/parse-gram.y (lloc_default): Rewrite to avoid compiler bug
-	in SGI MIPSpro 7.4.1m.  Problem reported by Albert Chin-A-Young in
-	<http://lists.gnu.org/archive/html/bug-bison/2004-05/msg00037.html>.
-
-	* configure.ac (AC_PREREQ): Bump to 2.58, since 2.57 doesn't work
-	(it fails with a Autoconf-without-aclocal-m4 diagnostic).
-
-2004-05-26  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* configure.ac (AM_GNU_GETTEXT_VERSION): Lower it from 0.14.1 to
-	0.11.5.  Suggested by Bruno Haible.
-	* bootstrap: Remove gettext version checking.
-
-	* doc/bison.texinfo (Decl Summary): Also mention that %union
-	can depend on prerequisite types.  Problem reported by Tim
-	Van Holder.
-
-2004-05-25  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* README: Mention GNU m4 1.4 bugs and Akim's patched version.
-	* README-alpha: Don't tell people not to package this.
-
-	* bootstrap: Don't assume $(...) works; use `...` instead.
-	Problem reported by Paul Hilfinger.  Also, diagnose non-GNU
-	gettext better.
-
-	* doc/bison.texinfo (Decl Summary, Bison Options): Clarify what's
-	put into the -d output file, and mention what to do if YYSTYPE is
-	defined as a macro.
-
-2004-05-24  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Undo change made earlier today: it caused autopoint to not bring
-	in ABOUT-NLS.  Ouch.  Instead, substitute our own diagnostic for
-	autopoint's.
-
-	* bootstrap: Check that gettext version matches what's in
-	configure.ac.  Warn users to ignore robots.txt ERROR 404.
-	* bootstrap: Undo today's earlier change (logged below).
-	* configure.ac (AM_GNU_GETTEXT_VERSION): Likewise.
-
-	The gettext version checking is causing more trouble than it's
-	curing; remove it.  Problem reported by Paul Hilfinger.
-
-	* bootstrap: Issue a warning that one can expect a message
-	'AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_VERSION'.
-	* configure.ac (AM_GNU_GETTEXT_VERSION): Remove.
-
-2004-05-23  Paul Eggert  <eggert@cs.ucla.edu>
-
-	Ensure that the C++ compiler used for testing actually works on a
-	simple test program; if not, skip the C++-related tests.  Problem
-	reported by Vin Shelton in:
-	http://lists.gnu.org/archive/html/bug-bison/2004-05/msg00026.html
-
-	* m4/cxx.m4: New file.
-	* configure.ac (BISON_TEST_FOR_WORKING_CXX_COMPILER): Add.
-	* tests/atlocal.in (BISON_CXX_WORKS): Add.
-	* tests/local.at (AT_COMPILE_CXX): Use it.
-
-2004-05-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* data/glr.c (yylloc): Output this macro even if locations are not
-	being generated, as the GLR parser needs it even in that case.
-	Problem reported by Troy A. Johnson
-	<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=195946>.
-
-	* configure.ac (AC_INIT): Update to 1.875e.
-
-2004-05-21  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Version 1.875d.
-	* configure.ac (AC_INIT): Likewise.
-	* src/parse-gram.c, src/parse-gram.h: Regenerate with 1.875d.
-
-	* configure.ac (--enable-gcc-warnings): Do not enable -Wshadow,
-	-Wmissing-prototypes, or -Wstrict-prototypes for C++.  The current
-	lalr1.cc runs afoul of the first, and the last two are no longer
-	supported by GCC 3.4.0.
-	* README: Mention GNU m4 1.4 or later; mention m4 patches.
-	* HACKING: Use ./bootstrap, not "make update" to import foreign files.
-
-2004-05-06  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* src/muscle_tab.c (hash_muscle): Accept and return size_t, not
-	unsigned int, for compatibility with latest gnulib hash module.
-	* src/state.c (state_hash, state_hasher): Likewise.
-	* src/symtab.c (hash_symbol, hash_symbol_hasher): Likewise.
-	* src/uniqstr.c (hash_uniqstr): Likewise.
-
-2004-05-03  Paul Eggert  <eggert@cs.ucla.edu>
-
-	* NEWS: Unescaped newlines are no longer allowed in char & strings.
-
-	* src/scan-gram.l (<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER,
-	SC_CHARACTER,SC_STRING>): Reject unescaped newlines in
-	character and string literals.
-	(unexpected_end): New function.
-	(unexpected_eof): Use it.
-	(unexpected_newline): New function.
-	(<INITIAL,SC_AFTER_IDENTIFIER,SC_PRE_CODE>): Coalesce duplicate
-	actions.
-
-	* NEWS: Document %expect-rr.
-
-	* bootstrap (--gnulib-srcdir=*, --cvs-user=*):
-	Fix typo by replacing $1 with $option.
-	Remove more 'intl'-related files.
-	Don't DEFUN AM_INTL_SUBDIR twice.
-
-	* lib/.cvsignore: Add strndup.h.  Remove memchr.c, memcmp.c,
-	memrchr.c, strcasecmp.c, strchr.c, strrchr.c, strspn.c, strtol.c,
-	strtoul.c.
-	* m4/.cvsignore: Add exitfail.m4, extensions.m4, gnulib.m4,
-	hard-locale.m4, mbstate_t.m4, strerror_r.m4, strndup.m4,
-	xstrndup.m4.  Remove glibc21.m4, intdiv0.m4, inttypes-pri.m4,
-	inttypes.m4, inttypes_h.m4, isc-posix.m4, lcmessage.m4,
-	stdint_h.m4, uintmax_t.m4, ulonglong.m4.
-	* src/.cvsignore: Add *.output.
-
-	* src/parse-gram.y: Put copyright notice inside %{ %} so it
-	gets copied to the output file.
-
-2004-04-28  Paul Eggert  <eggert@twinsun.com>
-
-	Get files from the gnulib and po repositories, instead of relying
-	on them being in our CVS.  Upgrade to latest versions of gnulib
-	and Automake.
-
-	* Makefile.am (SUBDIRS): Remove m4; Automake now does m4.
-	* bootstrap: Bootstrap from gnulib and po repositories.
-	Much of this code was stolen from GNU diff and GNU tar's bootstrap.
-	* README-cvs: Document these changes.  Remove version numbers from
-	mentions of build tools, since they change so often.  Mention Flex.
-
-	* configure.ac (AC_CONFIG_MACRO_DIR): Add, with m4 as arg.
-	(gl_USE_SYSTEM_EXTENSIONS): Add.
-	(AC_GNU_SOURCE, AC_AIX, AC_MINIX):
-	Remove; no longer needed, as gl_USE_SYSTEM_EXTENSIONS
-	does this for us.
-	(AC_ISC_POSIX): Remove; we no longer support this
-	ancient OS, as it gets in the way of latest Autoconf & gnulib.
-	(AC_HEADER_STDC): Remove: we now assume C89 or better.
-	(AC_CHECK_HEADERS_ONCE): Use instead of AC_CHECK_HEADERS.
-	Do not check for C89 headers, except for locale.h which is used
-	by the Yacc library and must port to K&R hosts.
-	(AC_CHECK_FUNCS_ONCE): Use instead of AC_CHECK_FUNCS.
-	Do not check for C89 functions, except for setlocale which is
-	used by the Yacc library.
-	(AC_CHECK_DECLS, AC_REPLACE_FUNCS): Remove; no longer needed.
-	(gl_DIRNAME, gl_ERROR, gl_FUNC_ALLOCA, gl_FUNC_MEMCHR,
-	gl_FUNC_MEMRCHR, gl_FUNC_STPCPY, gl_FUNC_STRNLEN, gl_FUNC_STRTOL,
-	gl_GETOPT, gl_HASH, gl_MBSWIDTH, gl_OBSTACK, gl_QUOTE,
-	gl_QUOTEARG, gl_XALLOC, jm_FUNC_GLIBC_UNLOCKED_IO, jm_FUNC_MALLOC,
-	AM_GNU_GETTEXT): Remove; now done by:
-	(GNULIB_AUTOCONF_SNIPPET): Add.  "bootstrap" builds this for us.
-	(AC_CONFIG_FILES): Remove m4/Makefile, as Automake now does this
-	for us.
-
-	* lib/Makefile.am: Include gnulib.mk, built for us by "bootstrap".
-	(BUILT_SOURCES, EXTRA_DIST, MOSTLYCLEANFILES):
-	Define to empty, as gnulib.mk will do the rest for us.
-	($(libbison_a_OBJECTS), stdbool.h): Remove, as gnulib.mk does this
-	for us.
-	(libbison_a_SOURCES): Define to $(lib_SOURCES) now.
-	(lib_SOURCES): New symbol, containing only the non-gnulib libs.
-
-	* src/files.c: Include gnulib's xstrndup.h.
-
-	* src/system.h (MALLOC): Use xnmalloc, for better overflow checking.
-	(REALLOC): Use xnrealloc, for likewise.
-	(xstrndup, stpcpy): Remove decls, as gnulib does this for us now.
-	(strnlen, memrchr): Remove decls; functions no longer used.
-	Include <stpcpy.h>.
-
-	* config/depcomp, config/install-sh, lib/alloca.c, lib/argmatch.c,
-	lib/argmatch.h, lib/basename.c, lib/dirname.c, lib/dirname.h,
-	lib/error.c, lib/error.h, lib/getopt.c, lib/getopt.h,
-	lib/getopt1.c, lib/gettext.h, lib/hash.c, lib/hash.h,
-	lib/malloc.c, lib/mbswidth.c, lib/mbswidth.h, lib/memchr.c,
-	lib/memcmp.c, lib/memrchr.c, lib/obstack.c, lib/obstack.h,
-	lib/quote.c, lib/quote.h, lib/quotearg.c, lib/quotearg.h,
-	lib/realloc.c, lib/stdbool_.h, lib/stpcpy.c, lib/strcasecmp.c,
-	lib/strchr.c, lib/strncasecmp.c, lib/strnlen.c, lib/strrchr.c,
-	lib/strspn.c, lib/strtol.c, lib/strtoul.c, lib/unlocked-io.h,
-	lib/xalloc.h, lib/xmalloc.c, lib/xstrdup.c, lib/xstrndup.c,
-	m4/Makefile.am, m4/alloca.m4, m4/dirname.m4, m4/dos.m4,
-	m4/error.m4, m4/getopt.m4, m4/hash.m4, m4/malloc.m4,
-	m4/mbrtowc.m4, m4/mbswidth.m4, m4/memchr.m4, m4/memcmp.m4,
-	m4/memrchr.m4, m4/obstack.m4, m4/onceonly.m4, m4/prereq.m4,
-	m4/quote.m4, m4/quotearg.m4, m4/realloc.m4, m4/stdbool.m4,
-	m4/stpcpy.m4, m4/strnlen.m4, m4/strtol.m4, m4/strtoul.m4,
-	m4/unlocked-io.m4, m4/xalloc.m4, po/LINGUAS, po/Makefile.in.in,
-	po/Makevars, po/da.po, po/de.po, po/es.po, po/et.po, po/fr.po,
-	po/hr.po, po/id.po, po/it.po, po/ja.po, po/ms.po, po/nl.po,
-	po/pt_BR.po, po/ro.po, po/ru.po, po/sv.po, po/tr.po:
-	Remove, as these files are now generated automatically
-	by bootstrap or automake.
-
-	* po/ChangeLog: Remove: all but one entry was a duplicate
-	of this file, and I moved that 2000-11-02 entry here.
-
-	* config/.cvsignore: Add Makefile, depcomp, install-sh.
-	* lib/.cvsignore: Add alloca.c, alloca.h, alloca_.h, argmatch.c,
-	argmatch.h, basename.c, dirname.c, dirname.h, error.c, error.h,
-	exit.h, exitfail.c, exitfail.h, getopt.c, getopt.h, getopt1.c,
-	getopt_int.h, gettext.h, gnulib.mk, hard-locale.c, hard-locale.h,
-	hash.c, hash.h, malloc.c, mbswidth.c, mbswidth.h, memchr.c,
-	memcmp.c, memrchr.c, obstack.c, obstack.h, quote.c, quote.h,
-	quotearg.c, quotearg.h, realloc.c, stdbool_.h, stpcpy.c, stpcpy.h,
-	strcasecmp.c, strchr.c, stripslash.c, strncasecmp.c, strndup.c,
-	strnlen.c, strrchr.c, strspn.c, strtol.c, strtoul.c,
-	unlocked-io.h, xalloc.h, xmalloc.c, xstrdup.c, xstrndup.c,
-	xstrndup.h.
-	* m4/.cvsignore: Remove Makefile, Makefile.in.  Add alloca.m4,
-	dirname.m4, dos.m4, error.m4, getopt.m4, hash.m4, mbrtowc.m4,
-	mbswidth.m4, obstack.m4, onceonly.m4, quote.m4, quotearg.m4,
-	stdbool.m4, stpcpy.m4, strnlen.m4, unlocked-io.m4, xalloc.m4.
-	* po/.cvsignore: Add *.po, LINGUAS, Makefile.in.in, Makevars.
-	* src/.cvsignore: Remove *_.c.
-
-
-	* Makefile.maint (GZIP_ENV): Don't use --rsyncable if gzip doesn't
-	support it.  (The latest stable gzip doesn't.)
-
-2004-04-27  Paul Eggert  <eggert@twinsun.com>
-
-	* data/lalr1.cc (Parser::stos_) [! YYDEBUG]: Define even in this
-	case, as stos_ is now used by destructors due to the 2004-02-09
-	change.
-
-	Remove more K&R C support.
-	* lib/libiberty.y (PARAMS): Remove.  All uses removed.
-	* lib/subpipe.c (errno): Remove decl.
-	Include <stdlib.h> unconditionally.
-	(EXIT_FAILURE): Remove macro.
-	* src/complain.c (vfprintf, strerror): Remove.
-	* src/system.h: Include limits.h, stdlib.h, string.h, locale.h
-	unconditionally.
-	(EXIT_FAILURE, EXIT_SUCCESS, setlocale): Remove defns.
-	Use latest Autoconf recommendations for including inttypes.h, stdint.h.
-	(strchr, strspn, memchr): Remove decls.
-	* tests/calc.at (_AT_DATA_CALC_Y): Include stdlib.h, string.h
-	unconditionally.  Do not declare perror.
-	* tests/conflicts.at (%nonassoc and eof): Include stdlib.h
-	unconditionally.
-
-	* src/complain.c (_): Remove useless defn, as system.h defines this.
-
-	* lib/bitset.h (__INT_TO_PTR): Remove; workaround no longer needed
-	with latest obstack.h.
-	* lib/ebitset.c (ebitset_elt_alloc): Don't bother to cast args
-	to procedure types, as obstack.h now does that for us.
-	* lib/lbitset.c (lbitset_elt_alloc): Likewise.
-
-	* lib/subpipe.h [HAVE_SYS_TYPES_H]: Include <sys/types.h>,
-	so that this include file can stand alone.
-	* lib/subpipe.c: Do not include <sys/types.h>, as subpipe.h
-	does this now.  Include subpipe.h first after config.h, to
-	test whether it can stand alone.
-
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Don't
-	declare yyerror when using lalr.cc, as GCC 3.4.0 warns about the
-	unused declaration.
-
-	* tests/synclines.at (%union synch line): Put a dummy member in
-	the union, because empty unions aren't allowed in C.  Caught
-	by GCC 3.4.0.
-
-2004-04-13  Jim Meyering  <jim@meyering.net>
-
-	* src/conflicts.c (conflicts_print): Correct format string typo:
-	use `%%' to produce literal `%'.  (trivial change)
-
-2004-03-30  Paul Eggert  <eggert@twinsun.com>
-
-	* src/getargs.c (version): Update copyright year to 2004.
-
-	* data/c.m4 (b4_int_type): Use 'short int' rather than
-	'short', and similarly for 'long', 'unsigned', etc.
-	* data/glr.c (YYTRANSLATE, yyconfl, yySymbol, yyItemNum,
-	yygetLRActions, yyprocessOneStack, yyrecoverSyntaxError,
-	yy_yypstack, yydumpstack): Likewise.
-	* data/lalr1.cc (user_token_number_max_, user_token_number_max_,
-	translate_, seq_, [], pop, Slice, range_, operator+, operator+=):
-	Likewise.
-	* data/yacc.c (b4_int_type, yyss, YYSTACK_BYTES, yysigned_char,
-	yy_stack_print, yyparse): Likewise.
-	* doc/bison.texinfo (Prologue, Multiple Types): Likewise.
-	* lib/bbitset.h (bitset_word, BITSET_WORD_BITS): Likewise.
-	* lib/bitset.c (bitset_print): Likewise.
-	* lib/bitset_stats.c (bitste_log_histogram_print): Likewise.
-	* lib/bitsetv-print.c (bitsetv_matrix_dump): Likewise.
-	* lib/bitsetv.c (bitsetv_dump): Likewise.
-	* lib/ebitset.c (EBITSET_ELT_BITS, ebitset_elt_alloc): Likewise.
-	* lib/lbitset.c (LBITSET_ELT_BITS, lbitset_elt_alloc, debug_lbitset):
-	Likewise.
-	* src/LR0.c (allocate_itemsets): Likewise.
-	* src/gram.h (rule_number, rule): Likewise.
-	* src/lalr.h (goto_number): Likewise.
-	* src/nullable.c (nullable_compute): Likewise.
-	* src/output.c (prepare_rules): Likewise.
-	* src/relation.c (relation_print, relation_digraph): Likewise.
-	* src/relation.h (relation_node): Likewise.
-	* src/state.h (state_number, transitions, errs, reductions,
-	struct state): Likewise.
-	* src/symtab.h (symbol_number, struct symbol): Likewise.
-	* src/tables.c (vector_number, tally, action_number,
-	default_goto, goto_actions): Likewise.
-	* tests/existing.at (GNU Cim Grammar): Likewise.
-	* tests/regression.at (Web2c Actions): Likewise.
-
-	* src/output.c (muscle_insert_short_int_table): Renamed from
-	muscle_insert_short_table.  All uses changed.
-
-2004-03-25  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
-
-	* src/parse-gram.y: Define PERCENT_EXPECT_RR.
-	(declaration): Replace expected_conflicts with expected_sr_conflicts.
-	Add %expect-rr rule.
-
-	* src/scan-gram.l: Recognize %expect-rr.
-
-	* src/conflicts.h (expected_sr_conflicts): Rename from
-	expected_conflicts.
-	(expected_rr_conflicts): Declare.
-
-	* src/conflicts.c (expected_sr_conflicts): Rename from
-	expected_conflicts.
-	(expected_rr_conflicts): Define.
-	(conflicts_print): Check r/r conflicts against expected_rr_conflicts
-	for GLR parsers.
-	Use expected_sr_conflicts in place of expected_conflicts.
-	Warn if expected_rr_conflicts used in non-GLR parser.
-
-	* doc/bison.texinfo: Add documentation for %expect-rr.
-
-2004-03-08  Paul Eggert  <eggert@gnu.org>
-
-	Add support for hex token numbers.  Suggested by Odd Arild Olsen in
-	<http://lists.gnu.org/archive/html/bison-patches/2004-03/msg00000.html>.
-
-	* NEWS: Document hexadecimal tokens, no NUL bytes, %destructor
-	in lalr1.cc.
-	* doc/bison.texinfo (Token Decl): Add hexadecimal token numbers.
-	* src/scan-gram.l (scan_integer): New function.
-	({int}): Use it.
-	(0[xX][0-9abcdefABCDEF]+): New pattern, to support hex numbers.
-	(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>, \\x[0-9abcdefABCDEF]+,
-	handle_action_dollar, handle_action_at, convert_ucn_to_byte):
-	Say "long int", not "long", for uniformity with GNU style.
-
-2004-02-25  Paul Eggert  <eggert@twinsun.com>
-
-	* tests/local.at (AT_COMPILE, AT_COMPILE_CXX): Ignore stdout from
-	compilers.  This fixes a problem with Intel's C++ compiler being
-	chatty, reported by Guido Trentalancia in
-	<http://lists.gnu.org/archive/html/bug-bison/2004-02/msg00030.html>.
-
-2004-02-09  Alexandre Duret-Lutz  <adl@gnu.org>
-
-	Support %destructor and merge error locations in lalr1.cc.
-
-	* data/lalr1.cc (b4_cxx_destruct_def): New macro.
-	(Parser::stos_): Define unconditionally.
-	(Parser::destruct_): New method.  Generate its body with
-	b4_yydestruct_generate.
-	(Parser::error_start_): New attribute.
-	(Parser::parse) <yyerrlab, yyerrlab1>: Call destruct_ on erroneous
-	token which are discarded.
-	(Parser::parse) <yyerrlab, yyerrorlab, yyerrlab1>: Update
-	error_start_ when erroneous token are discarded.
-	(Parser::parse) <yyerrlab1>: Compute the location of the error
-	token so that it covers all the discarded tokens.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust so
-	it can be called with `%skeleton "lalr1.cc"', and do that.
-
-2004-02-02  Paul Eggert  <eggert@twinsun.com>
-
-	* src/Makefile.am (AM_CPPFLAGS): New macro.  It mentions
-	$(top_srcdir)/lib and ../lib.  This fixes a bug reported
-	by Paul Hilfinger; the old INCLUDES value didn't mention ../lib.
-	There's no need to mention top_builddir since Automake does that
-	for us.
-	(INCLUDES): Remove, as Automake says it's obsolescent.
-	Contents migrated into AM_CPPFLAGS as described above.
-	* lib/Makefile.am (INCLUDES): Remove; obsolescent.
-
-2004-01-14  Paul Hilfinger  <hilfingr@CS.Berkeley.EDU>
-
-	* data/glr.c (yytokenName): Bullet-proof against YYEMPTY token.
-	(yyreportSyntaxError): Handle case where lookahead token is
-	YYEMPTY.
-
-2004-01-13  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* data/glr.c: Put casts on uses of YYREALLOC and YYMALLOC so that
-	resulting parsers are compilable with C++.
-
-2003-12-23  Paul Eggert  <eggert@twinsun.com>
-
-	* config/depcomp, config/install-sh: Sync with Automake 1.8.
-	* src/output.c (output_skeleton): Rename local var.
-	* tests/input.at (Torturing the Scanner): Don't use \x0 or \0 in
-	Bison tokens, as this runs afoul of the 2003-10-07 change that
-	disallowed NUL bytes in character constants or string literals.
-
-	* tests/local.at: Require Autoconf 2.59's Autotest.
-	* tests/testsuite.at: Don't include local.at, since we now assume
-	Autoconf 2.59 or later.  Autoconf 2.59 had some problems with
-	including it.
-	* tests/Makefile.am ($(TESTSUITE)): Remove warning about ignoring
-	multiple inclusion warnings.
-
-2003-12-02  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (How Can I Reset the Parser): More about start
-	conditions.
-	From Bruno Haible.
-
-2003-11-18  Alexandre Duret-Lutz  <adl@gnu.org>
-
-	* doc/bison.texinfo (Bison Options): Escape `@' in `$@'.
-
-2003-10-07  Paul Eggert  <eggert@twinsun.com>
-
-	* tests/Makefile.am (clean-local): Don't run 'testsuite --clean'
-	if testsuite doesn't exist.
-
-	* doc/bison.texinfo (Symbols): NUL bytes are not allowed in string
-	literals, unfortunately.
-	* src/scan-gram.l (<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>):
-	Complain about NUL bytes in character constants or string literals.
-
-2003-10-05  Paul Eggert  <eggert@twinsun.com>
-
-	* NEWS: Don't document %no-default-prec, as it's still
-	too experimental.
-	* doc/bison.texinfo: Document %no-default-prec only if
-	the defaultprec flag is set.  Normally it's not.
-
-2003-10-04  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (b4_rhs_value, b4_rhs_location): Yield a
-	non-modifiable lvalue, instead of a modifiable one.
-	* doc/bison.texinfo (Actions): Document that $$ can
-	be assigned to.  Do not claim that $$ and $N are
-	array element references: user code should not rely on this.
-
-2003-10-01  Paul Eggert  <eggert@twinsun.com>
-
-	* src/parse-gram.h (PERCENT_NO_DEFAULT_PREC): New token.
-	(grammar_declaration): Use it.
-	* src/scan-gram.l: New token %no-default-prec.
-	* tests/conflicts.at: Revamp tests to use %no-default-prec.
-	* NEWS, doc/bison.texinfo: Document the above.
-
-2003-10-01  Akim Demaille  <akim@epita.fr>
-
-	VCG no longer supports long_straight_phase.
-
-	* src/vcg.c, src/vcg.h: Remove the handling of long_straight_phase.
-	* src/print_graph.c (print_graph): Adjust.
-
-2003-09-30  Frank Heckenbach  <frank@g-n-u.de>
-	and Paul Eggert  <eggert@twinsun.com>
-
-	* doc/bison.texinfo (Decl Summary, Contextual Precedence,
-	Table of Symbols): Document %default-prec.
-	* src/parse-gram.y (PERCENT_DEFAULT_PREC): New token.
-	(grammar_declaration): Set default_prec on %default-prec.
-	* src/scan-gram.l (%default-prec): New token.
-	* src/reader.h (default_prec): New flag.
-	* src/reader.c: Likewise.
-	(packgram): Handle it.
-	* tests/conflicts.at (%default-prec without %prec,
-	%default-prec with %prec, %default-prec 1): New tests.
-
-2003-09-30  Paul Eggert  <eggert@twinsun.com>
-
-	* tests/testsuite.at: Include local.at, not input.at, fixing
-	a typo in the 2003-08-25 patch.
-
-2003-08-27  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (yyparse) [__GNUC__]: "Use" yyerrorlab to pacify
-	GCC warnings.
-
-2003-08-26  Akim Demaille  <akim@epita.fr>
-
-	* config/announce-gen (print_changelog_deltas): Neutralize "<#" as
-	"<\#" to avoid magic from Gnus when posting parts of this script.
-
-2003-08-26  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (Parser::report_syntax_error_): New, extracted from
-	(Parser::parse): here.
-	Adjust: nerrs and errstatus is now replaced by...
-	(Parser::nerrs_, Parser::errstatus_): New.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	* config/announce-gen, Makefile.cfg: New.
-	* Makefile.am: Adjust.
-	* GNUmakefile, Makefile.maint: Update from CVS Autoconf, but
-	keeping local WGET and WGETFLAGS modifications from Paul Eggert.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	When reducing initial empty rules, Bison parser read an initial
-	location that is not defined.  This results in garbage, and that
-	affects Bison's own parser.  Therefore we need (i) to extend Bison
-	to support a means to initialize this location, and (ii) to use
-	this CVS Bison to fix CVS Bison's parser.
-
-	* src/reader.h, reader.c (epilogue_augment): Remove, replace
-	with...
-	* src/muscle_tab.h, src/muscle_tab.c (muscle_code_grow): this.
-	* src/parse-gram.y: Adjust.
-	(%initial-action): New.
-	(%error-verbose): Since we require CVS Bison, there is no reason
-	not to use it.
-	* src/scan-gram.l: Adjust.
-	* src/Makefile.am (YACC): New, to make sure we use our own parser.
-	* data/yacc.c (yyparse): Use b4_initial_action.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Don't promote stdout for error messages.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (Parser::reduce_print_): Remove unused yyi.
-	From Alexandre Duret-Lutz.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	Version 1.875c.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (Parser::stack_print_, YY_STACK_PRINT): New.
-	Use them.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (Parser::reduce_print_): New.
-	Use it.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	Have lalr1.cc catch with Paul Eggert's patch to fix the infinite
-	error recovery loops.  This patch is based on
-	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00000.html>.
-	Also, augment the similarity between lalr1.cc and yacc.c.
-	Note: the locations of error recovery rules are not correct yet.
-
-	* data/lalr1.cc: Comment changes to augment the similarity between
-	lalr1.cc and yacc.c.
-	(YYERROR): Goto to yyerrorlab, not yyerrlab1.
-	(yyerrlab1): Remove, but where it used to be (now the bottom part of
-	yyerrlab), when hitting EOF, pop the whole stack here instead of
-	merely falling thru the default error handling mechanism.
-	(yyerrorlab): New label, with the old contents of YYERROR,
-	plus the following change: pop the stack of rhs corresponding
-	to the production that invoked YYERROR.  That is how Yacc
-	behaves (required by POSIX).
-	* tests/calc.at (AT_CHECK_CALC_LALR1_CC): No longer expected to
-	fail.
-
-2003-08-25  Akim Demaille  <akim@epita.fr>
-
-	Tune local.at so that people can "autom4te -l autotest calc.at -o
-	calc" for instance, to extract a sub test suite.
-
-	* tests/testsuite.at: Move the initialization, Autotest version
-	requirement, and AT_TESTED invocation into...
-	* tests/local.at: here.
-	* tests/testsuite.at: Include it for compatibility with Autoconf
-	2.57.
-	* tests/Makefile.am ($(TESTSUITE)): Report that the warning should
-	be ignore.
-
-2003-08-04  Paul Eggert  <eggert@twinsun.com>
-
-	Rework code slightly to avoid gcc -Wtraditional warnings.
-	* data/glr.c (yyuserMerge): Return void, not YYSTYPE.
-	The returned value is now stored in *YY0.  All callers changed.
-	* src/output.c (merge_output): Adjust to the above change.
-
-2003-07-26  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (YYASSERT): New macro.
-	(yyfillin, yydoAction, yyglrReduce, yysplitStack,
-	yyresolveStates, yyprocessOneStack):
-	Use `YYASSERT (FOO);' rather than `if (! (FOO)) abort ();'.
-	Derived from a suggestion by Frank Heckenbach.
-
-2003-07-25  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (yyglrReduce): Don't use C89 string concatenation,
-	for portability to K&R C (after ansi2knr, presumably).  See
-	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00041.html>
-	by Frank Heckenbach, though I have omitted the structure-initialization
-	part of his glr-knr.diff patch since I recall that the Portable
-	C Compiler didn't require that change.
-
-	Let the user specify how to allocate and free memory.
-	Derived from a suggestion by Frank Heckenbach in
-	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00041.html>.
-	* data/glr.c (YYFREE, YYMALLOC, YYREALLOC): New macros.
-	All uses of free, malloc, realloc changed to use these macros,
-	and unnecessary casts removed.
-	* data/yacc.c (YYFREE, YYMALLOC): Likewise.
-
-2003-07-06  Matthias Mann  <MatthiasMann@gmx.de>
-
-	* data/lalr1.cc (operator<<(std::ostream&, const Position&)):
-	use s.empty() rather than s == "" to test for empty string; see
-	<http://lists.gnu.org/archive/html/bison-patches/2003-07/msg00003.html>
-	(trivial change)
-
-2003-06-25  Akim Demaille  <akim@epita.fr>
-
-	* config/depcomp, config/install-sh: Update from masters.
-
-2003-06-20  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (YYLLOC_DEFAULT): Parenthesize arguments as needed,
-	and return properly parenthesized result.
-	* data/lalar1.cc (YYLLOC_DEFAULT): Likewise.
-	* data/yacc.c (YYLLOC_DEFAULT): Likewise.
-	Remove unnecessary parentheses from uses.
-	* doc/bison.texinfo (Location Default Action): Describe the
-	conventions for parentheses.
-
-2003-06-19  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (yyremoveDeletes, yy_reduce_print, yyglrReduce,
-	yyreportTree): Do not assume that size_t is the same width as int,
-	when printing sizes.  Print sizes using an unsigned format.
-	Problem reported by Frank Heckenbach in
-	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00035.html>.
-
-	Port to Forte Developer 7 C compiler.
-	* data/glr.c (struct YYLTYPE): If locations are not being used,
-	declare a single dummy member, as empty structs do not conform
-	to the C standard.
-	(YYERROR, YYBACKUP): Do not use "do { ...; return foo; } while (0)";
-	the Forte Developer 7 C compiler complains that end-of-loop
-	code is not reached.
-
-2003-06-17  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/libiberty.h (PARAMS): Spell argument as Args, not as X, to
-	avoid warnings from picky compilers about redefinition of PARAMS.
-
-2003-06-17  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.875b.
-
-	* NEWS: Document 1.875b.
-
-	* lib/bbitset.h: Do not include config.h; that's the includer's job.
-	Do not include <sys/types.h>; shouldn't be needed on a C89 host.
-	* lib/bitset.h (bitset_compatible_p): Indent as per GNU standard.
-	Don't use 'index' in comments, as it's a builtin fn on some hosts.
-	* lib/bitset_stats.c: Include gettext.h unconditionally, as
-	per recent gettext manual's suggestion.
-	* lib/ebitset.c (ebitset_resize, ebitset_unused_clear):
-	Use prototypes, not old-style definitions.
-	* lib/lbitset.c (lbitset_unused_clear): Likewise.
-	* lib/vbitset.c (vbitset_resize, vbitset_ones, vbitset_zero,
-	vbitset_empty_p, vbitset_copy1, vbitset_not, vbitset_equal_p,
-	vbitset_subset_p, vbitset_disjoint_p, vbitset_and, vbitset_and_cmp,
-	vbitset_andn, vbitset_andn_cmp, vbitset_or, vbitset_or_cmp,
-	vbitset_xor, vbitset_xor_cmp, vbitset_and_or, vbitset_and_or_cmp,
-	vbitset_andn_or, vbitset_andn_or_cmp, vbitset_or_and,
-	vbitset_or_and_cmp, vbitset_copy): Likewise.
-
-	* lib/libiberty.h: Do not include config.h; that's the includer's job.
-	Do not include <stdlib.h>.
-	(PARAMS): Define unconditionally for C89.
-	(ATTRIBUTE_NORETURN): Remove.
-	(ATTRIBUTE_UNUSED): Define unconditionally.
-
-	Upgrade to 2003-06-08 libbitset, submitted by Michael Hayes in:
-	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00005.html>
-	* lib/Makefile.am (bitsets_sources): Add vbitset.c, vbitset.h.
-	* lib/vbitset.c, lib/vbitset.h: New files.
-	* lib/abitset.c, lib/bbitset.h, lib/bitset.c, lib/bitset.h,
-	lib/bitset_stats.c, lib/ebitset.c, lib/lbitset.c: Import
-	from libbitset.
-
-	* doc/bison.texinfo (How Can I Reset the Parser): Renamed from
-	`How Can I Reset @code{yyparse}', since texinfo does not allow
-	arbitrary @ in node names.
-
-	* m4/Makefile.am (EXTRA_DIST): Add the following files, which
-	shouldn't be needed according to the gettext 0.12.1 documentation
-	but which seem to be needed anyway: codeset.m4 glibc21.m4
-	intdiv0.m4 inttypes-pri.m4 inttypes.m4 inttypes_h.m4 isc-posix.m4
-	lcmessage.m4 nls.m4 po.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4.
-	* po/Makefile.in.in: Upgrade to gettext 0.12.1 version.
-
-	* lib/.cvsignore: Add stdbool.h.
-	* m4/.cvsignore: Add nls.m4, po.m4.
-
-	Upgrade to CVS gnulib.
-	* stdbool_.h: File renamed from stdbool.h.in.
-	* configure.ac (AM_STDBOOL_H): Invoke this instead of
-	AC_HEADER_STDBOOL.
-	(AM_GNU_GETTEXT): Put brackets around args, as latest manual suggests.
-	(AM_GNU_GETTEXT_VERSION): Update to 0.12.1.
-	* lib/Makefile.am (EXTRA_DIST): Add stdbool_.h.
-	(MOSTLYCLEANFILES): New var.
-	($(libbison_a_OBJECTS)): Depend on $(STDBOOL_H).
-	(stdbool.h): New rule.
-	* lib/dirname.c, lib/dirname.h, lib/hash.c, lib/hash.h,
-	lib/malloc.c, lib/obstack.h, lib/quote.c, lib/realloc.c,
-	lib/strcasecmp.c, lib/xalloc.h, m4/alloca.m4, m4/onceonly.m4,
-	m4/quote.m4: Upgrade to today's gnulib.
-
-	* tests/calc.at (AT_CHECK_CALC): New option EXPECTED-TO-FAIL.
-	(AT_CHECK_CALC_LALR1_CC): Use it, since the C++ LALR parser fails
-	the tests right now.
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Ensure yylex and
-	yyerror are declared before use; C99 requires this.
-
-2003-06-09  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* data/glr.c (YYERROR): Update definition to reset yyerrState to 0
-	first.
-	(yyrecoverSyntaxError): Correct the logic for setting and testing
-	yyerrState.
-	Correct comment on handling EOF.
-	Allow states with only a default reduction, rather than failing
-	(I can't quite reconstruct why these were not allowed before).
-
-	Fixes to avoid problem that $-N rules in GLR parsers can cause
-	buffer overruns, corrupting state.
-
-	* src/output.c (prepare_rules): Output max_left_semantic_context
-	definition.
-	* src/reader.h (max_left_semantic_context): New variable declaration.
-	* src/scan-gram.l (max_left_semantic_context): Define.
-	(handle_action_dollar): Update max_left_semantic_context.
-	* data/glr.c (YYMAXLEFT): New definition.
-	(yydoAction): Increase size of yyrhsVals by YYMAXLEFT.
-	(yyresolveAction): Ditto.
-
-	Fixes to problems with location handling in GLR parsers reported by
-	Frank Heckenbach (2003/06/05).
-
-	* data/glr.c (YYLTYPE): Make trivial if locations not used.
-	(YYRHSLOC): Add parentheses, and define only if locations used.
-	(YYLLOC_DEFAULT): Add parentheses, and give trivial definition if
-	locations not used.
-	(yyuserAction): Use YYLLOC_DEFAULT to set *yylocp.
-	(yydoAction): Remove redundant initialization of *yyvalp and *yylocp.
-
-	* tests/cxx-type.at: Exercise location information; update tests
-	to differentiate output with and without locations.
-	Remove forward declarations of yylex and yyerror---caused errors
-	because default YYLTYPE not yet defined.
-	Change semantic actions to compute strings, rather than printing
-	them directly (to test proper passing of semantics values).  Change
-	output to prefix notation and update test data and expected results.
-	(yylex): Track locations.
-	(stmtMerge): Return value rather than printing, and include arguments
-	in value.
-
-2003-06-03  Paul Eggert  <eggert@twinsun.com>
-
-	Avoid warnings generated by GCC 2.95.4 when Bison is
-	configured with --enable-gcc-warnings.
-	* data/lalr1.cc (yy::]b4_parser_class_name[::parse,
-	yy::]b4_parser_class_name[::translate_,
-	yy::Stack::operator[] (unsigned),
-	yy::Stack::operator[] (unsigned) const,
-	yy::Slice::operator[] (unsigned),
-	yy::Slice::operator[] (unsigned) const):
-	Rename local vars to avoid warnings.
-	* tests/glr-regression.at (Improper handling of embedded actions
-	and $-N in GLR parsers): Remove unused local variable from yylex.
-	* tests/regression.at (_AT_DATA_DANCER_Y): Declare yylex to take
-	(void) as arg when not pure, since we now assume C89 when building
-	Bison.  Pacify GCC by using parameter.
-
-2003-06-02  Paul Eggert  <eggert@twinsun.com>
-
-	* data/lalr1.cc (yy::Position::lines, yy::Position::columns,
-	yy::Location::lines, yy::Location::columns): Rename arguments
-	to avoid shadowing; this removes a warning generated by GCC 3.3.
-
-2003-06-01  Paul Eggert  <eggert@twinsun.com>
-
-	Don't pass C-only warning optins (e.g., -Wmissing-declarations)
-	to g++, as GCC 3.3 complains if you do it.
-	* configure.ac (WARNING_CXXFLAGS): New subst.  Set it to
-	everything that WARNING_CFLAGS has, except omit warnings
-	not suitable for C++.
-	(AC_PROG_CXX): Use this instead of AC_CHECK_PROGS([CXX], [g++]).
-	* tests/atlocal.in (CXXFLAGS): New var.
-	* tests/local.at (AT_COMPILE_CXX): Use it instead of CFLAGS.
-
-	Fix a GLR parser bug I reported in February; see
-	<http://lists.gnu.org/archive/html/bison-patches/2003-02/msg00008.html>.
-	The problem was that GLR parsers did not conform to the C standard,
-	because actions like { $1 = $2 + $3; } expanded to expressions
-	that invoked YYFILL in separate subexpressions, and YYFILL assigned
-	to a local variable.  The C standard says that expressions
-	like (var = f ()) + (var = f ()) have undefined behavior.
-	Another problem was that GCC sometimes issues warnings that
-	yyfill and its parameters are unused.
-
-	* data/glr.c (yyfillin): Renamed from the old yyfill.  Mark
-	as possibly unused.
-	(yyfill): New function.
-	(YYFILL): Use it.
-	(yyuserAction): Change type of yynormal to bool, so that it matches
-	the new yyfill signature.  Mark it as possibly unused.
-
-
-	Follow up on a bug I reported in February, where a Bison-generated
-	parser can loop.  Provide a test case and a fix for yacc.c.  I
-	don't have a fix for lalr1.cc or for glr.c, unfortunately.
-	The original bug report is in:
-	<http://lists.gnu.org/archive/html/bison-patches/2003-02/msg00044.html>
-
-	* data/yacc.c (YYERROR): Now just 'goto yyerrorlab', since the
-	macro's size was becoming unwieldy.
-	(yyerrlab): Do not discard an empty lookahead symbol, as this
-	might destroy garbage.
-	(yyerrorlab): New label, with the old contents of YYERROR,
-	plus the following change: pop the stack of rhs corresponding
-	to the production that invoked YYERROR.  That is how Yacc
-	behaves, and POSIX requires this behavior.
-	(yyerrlab1): Use YYPOPSTACK instead of its definiens.
-	* tests/calc.at (_AT_DATA_CALC_Y): Include unistd.h if available.
-	Define 'alarm' to do nothing if unistd.h is not available.
-	Add a new rule "exp: '-' error;" to test the above change to
-	data/yacc.c.  Use 'alarm' to abort any test taking longer than
-	10 seconds, as it's probably looping.
-	(AT_CHECK_CALC): Test recovery from error in new grammar rule.
-	Also, the new yacc.c generates two fewer diagnostics for an
-	existing test.
-
-2003-05-24  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (YYSTACKEXPANDABLE): Do not evaluate
-	YYSTYPE_IS_TRIVIAL or YYSTYPE_IS_TRIVIAL unless they are defined.
-	This fixes a problem reported by John Bowman when the Compaq/HP
-	Alpha cxx compiler happy (e.g. using cxx -D__USE_STD_IOSTREAM
-	-ansi -Wall -gall).
-	* data/yacc.c (union yyalloc): Likewise.
-	(YYCOPY): Do not evaluate __GNUC__ unless it is defined.
-
-	Switch from 'int' to 'bool' where that makes sense.
-
-	* lib/abitset.c (abitset_test, abitset_empty_p, abitset_equal_p,
-	abitset_subset_p, abitset_disjoint_p, abitset_and_cmp,
-	abitset_andn_cmp, abitset_or_cmp, abitset_xor_cmp, abitset_and_or,
-	abitset_and_or_cmp, abitset_andn_or_cmp, abitset_or_and_cmp):
-	Return or accept bool, not int.  All callers changed.
-	* lib/bbitset.h: (bitset_toggle_, bitset_copy_, bitset_and_or_cmp_,
-	bitset_andn_or_cmp_, bitset_or_and_cmp_): Likewise.
-	* lib/bitset.c (bitset_only_set_p, bitset_print, bitset_toggle_,
-	bitset_copy_, bitset_op4_cmp, bitset_and_or_cmp_, bitset_andn_or_cmp_,
-	bitset_or_and_cmp_): Likewise.
-	* lib/bitset.h (bitset_test, bitset_only_set_p): Likewise.
-	* lib/bitset_stats.c (bitset_stats_print, bitset_stats_toggle,
-	bitset_stats_test, bitset_stats_empty_p, bitset_stats_disjoint_p,
-	bitset_stats_equal_p, bitset_stats_subset_p, bitset_stats_and_cmp,
-	bitset_stats_andn_cmp, bitset_stats_or_cmp, bitset_stats_xor_cmp,
-	bitset_stats_and_or_cmp, bitset_stats_andn_or_cmp,
-	bitset_stats_or_and_cmp): Likewise.
-	* lib/ebitset.c (ebitset_elt_zero_p, ebitset_equal_p, ebitset_copy_cmp,
-	ebitset_test, ebitset_empty_p, ebitset_subset_p, ebitset_disjoint_p,
-	ebitset_op3_cmp, ebitset_and_cmp, ebitset_andn_cmp, ebitset_or_cmp,
-	ebitset_xor_cmp): Likewise.
-	* lib/lbitset.c (lbitset_elt_zero_p, lbitset_equal_p, lbitset_copy_cmp,
-	lbitset_test, lbitset_empty_p, lbitset_subset_p, lbitset_disjoint_p,
-	lbitset_op3_cmp, lbitset_and_cmp, lbitset_andn_cmp, lbitset_or_cmp,
-	lbitset_xor_cmp): Likewise.
-	* lib/bbitset.h: Include <stdbool.h>.
-	(struct bitset_vtable): The following members now return bool, not
-	int: toggle, test, empty_p, disjoint_p, equal_p, subset_p,
-	and_cmp, andn_cmp, or_cmp, xor_cmp, and_or_cmp, andn_or_cmp,
-	or_and_cmp).
-	* src/conflicts.c (count_rr_conflicts): Likewise.
-	* lib/bitset_stats.h (bitset_stats_enabled): Now bool, not int.
-	All uses changed.
-	* lib/ebitset.c (ebitset_obstack_init): Likewise.
-	* lib/lbitset.c (lbitset_obstack_init): Likewise.
-	* src/getargs.c (debug_flag, defines_flag, locations_flag,
-	no_lines_flag, no_parser_flag, token_table_flag, yacc_flag,
-	graph_flag): Likewise.
-	* src/getargs.h (debug_flag, defines_flag, locations_flag,
-	no_lines_flag, no_parser_flag, token_table_flag, yacc_flag,
-	graph_flag): Likewise.
-	* src/output.c (error_verbose): Likewise.
-	* src/output.h (error_verbose): Likewise.
-	* src/reader.c (start_flag, typed): Likewise.
-	* src/reader.h (typed): Likewise.
-	* src/getargs.c (LOCATIONS_OPTION): New constant.
-	(long_options, getargs): Use it.
-	* src/lalr.c (build_relations): Use bool, not int.
-	* src/nullable.c (nullable_compute): Likewise.
-	* src/print.c (print_reductions): Likewise.
-	* src/tables.c (action_row, pack_vector): Likewise.
-	* src/muscle_tab.h (MUSCLE_INSERT_BOOL): New macro.
-	* src/output.c (prepare): Use it.
-	* src/output.c (token_definitions_output,
-	symbol_destructors_output, symbol_destructors_output): Use string,
-	not boolean integer, to keep track of whether to output separator.
-	* src/print_graph.c (print_core): Likewise.
-	* src/state.c (state_rule_lookaheads_print): Likewise.
-
-	* config/install-sh: Sync from automake 1.7.5.
-
-2003-05-14  Paul Eggert  <eggert@twinsun.com>
-
-	* src/parse-gram.y (rules_or_grammar_declaration): Require a
-	semicolon after a grammar declaration, in the interest of possible
-	future changes to the Bison input language.
-	Do not allow a stray semicolon at the start of the grammar.
-	(rhses.1): Allow one or more semicolons after any rule, including
-	just before "|" as required by POSIX.
-	* tests/input.at (Torturing the Scanner): Add tests for ";|" in a
-	grammar.
-
-2003-05-14  Alexandre Duret-Lutz  <adl@gnu.org>
-
-	%parse-param support for lalr1.cc.
-
-	* data/lalr1.cc (b4_parse_param_decl, b4_parse_param_cons,
-	b4_cc_constructor_calls, b4_cc_constructor_call,
-	b4_parse_param_vars, b4_cc_var_decls, b4_cc_var_decl): New m4
-	definitions.
-	(yy::b4_parser_class_name::b4_parser_class_name): Take extra
-	parse-param arguments.
-	(yy::b4_parser_class_name): Declare instance variables to
-	hold parse-param arguments.
-	* tests/calc.at: s/value/semantic_value/ because value clashes
-	with a member of yy::b4_parser_class_name.  Adjust C++ code
-	to handle %parse-param.  Enable %parse-param test in C++.
-
-2003-05-12  Paul Eggert  <eggert@twinsun.com>
-
-	* doc/bison.texinfo (How Can I Reset @code{yyparse}): Reword the
-	English a bit.  Fix fclose typo.  Change "const char" to "char
-	const", and use ANSI C rather than K&R for "main".  Suggest
-	YY_FLUSH_BUFFER over yyrestart (as that is what Flex recommends)
-	and suggest yy_switch_to_buffer.
-
-2003-05-05  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/bitset.h (__INT_TO_PTR): Define to a value that presumes
-	C89.  This avoids a diagnostic on compilers that define __STDC__
-	to 0, fixing a problem with Tru64 cc reported by Martin Mokrejs in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00041.html>.
-
-2003-05-03  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/bitset.h (BITSET_FOR_EACH, BITSET_FOR_EACH_REVERSE):
-	Do not overrun array bounds.
-	This should fix a bug reported today by Olatunji Oluwabukunmi in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-05/msg00004.html>.
-
-2003-04-29  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h, src/gram.c (pure_parser, glr_parser): Move to...
-	* src/getargs.c, src/getargs.h: here, as bool, not int.
-	(nondeterministic_parser): New.
-	* src/parse-gram.y, src/scan-gram.l: Support
-	%nondeterministic-parser.
-	* src/output.c (prepare): Use nondeterministic_parser instead
-	of glr_parser where appropriate.
-	* src/tables.c (conflict_row, action_row, save_row)
-	(token_actions, token_actions, pack_vector): Ditto.
-
-2003-04-29  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (C++ Parsers, Implementing Loops): New.
-
-2003-04-29  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at: Also test yacc.c and glr.c (but not lalr1.cc yet)
-	with %pure-parser and %locations to exercise the patch from Yakov
-	Markovitch below.
-
-2003-04-28  Tim Van Holder <tim.van.holder@pandora.be>
-
-	* data/yacc.c: (b4_lex_param): Corrected for the case where
-	%lex-param is provided and %pure-parser isn't.
-
-2003-04-27  Paul Eggert  <eggert@twinsun.com>
-
-	Avoid gcc -Wundef warnings reported by Gerald Pfeifer in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00044.html>.
-	* data/yacc.c (YYSTACK_ALLOC): Don't evaluate YYSTACK_USE_ALLOCA
-	if it is not defined.
-	(YYMAXDEPTH): Don't evaluate YYMAXDEPTH if it is not defined.
-
-2003-04-26  Paul Eggert  <eggert@twinsun.com>
-
-	* data/lalr1.cc (yy::Parser::pact_ninf_, yy::Parser::table_ninf_):
-	Declare to be of type suitable for the ninf value itself, not of
-	type suitable for the corresponding table, since the latter might
-	be unsigned but the ninf value might be negative.  This fixes a
-	bug reported by Alexandre Duret-Lutz in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00017.html>.
-
-	* configure.ac (AC_FUNC_ERROR_AT_LINE): Remove, since gl_ERROR
-	invokes it.  We shouldn't invoke it twice because it will attempt
-	to put error.o in the archive twice.  This fixes a glitch reported
-	by Martin Mokrejs in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00041.html>.
-
-2003-04-21  Paul Eggert  <eggert@twinsun.com>
-
-	* m4/error.m4: Update from Bruno Haible's 2003-04-14 patch
-	to gnulib.
-
-2003-04-21  Yakov Markovitch <Markovitch@iso.ru>
-
-	* data/glr.c (yyexpandGLRStack) [!YYSTACKEXPANDABLE]:
-	Fix obvious typo that results in uncompilable GLR parsers
-	when both %pure-parser and %locations are used.  (trivial change)
-
-2003-04-17  Paul Eggert  <eggert@twinsun.com>
-
-	* src/scan-gram.l: Add %option nounput, since we no longer use unput.
-	(unexpected_eof): Renamed from unexpected_end_of_file, for brevity.
-	Do not insert the expected token via unput, as this runs afoul
-	of a POSIX-compatibility bug in flex 2.5.31.
-	All uses changed to BEGIN the parent state,
-	since we no longer insert the expected token via unput.
-	* tests/regression.at (Invalid inputs): Remove cascaded diagnostic
-	that is no longer emitted after the above change.
-
-	* src/conflicts.c (set_conflicts): Resolve all conflicts, not just
-	the first one.  This change is from Paul Hilfinger, and it fixes
-	regression reported by Werner Lemberg in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00026.html>.
-
-	(resolve_sr_conflict): Don't invoke state_errs_set
-	unless one or more tokens have been explicitly made errors.
-	Otherwise, the above change causes Bison to abort.
-
-	* tests/existing.at (GNU pic Grammar): New test case, taken from
-	Lemberg's email.
-
-2003-03-31  Akim Demaille  <akim@epita.fr>
-
-	* doc/Makefile.am (AM_MAKEINFOFLAGS): Don't split the info file.
-
-2003-03-31  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (prepare_symbols): Avoid trailing spaces in the
-	output.
-
-2003-03-31  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Strings are Destroyed): s/losses/loses/.
-	From Paul Hilfinger.
-
-2003-03-29  Akim Demaille  <akim@epita.fr>
-
-	* m4/error.m4: Do not put under dynamic conditions some code which
-	expansion is under static control.
-
-2003-03-29  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (How Can I Reset @code{yyparse}): New.
-
-2003-03-29  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Strings are Destroyed): New.
-
-2003-03-13  Paul Eggert  <eggert@twinsun.com>
-
-	* .cvsignore: Add configure.lineno.
-	* src/.cvsignore: Add yacc.
-	* tests/.cvsignore: Add testsuite.log.
-	* doc/fdl.texi: Sync with latest FSF version.
-
-2003-03-12  Paul Eggert  <eggert@twinsun.com>
-
-	* scan-gram.l (YY_USER_INIT): Initialize code_start, too.
-	(<INITIAL><<EOF>>, <SC_PRE_CODE><<EOF>>): Set *loc to the scanner
-	cursor, instead of leaving it undefined.  This fixes a bug
-	reported by Tim Van Holder in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-03/msg00023.html>.
-	* tests/input.at (Torturing the Scanner): Test the scanner on
-	an empty input file, which was Tim Van Holder's test case.
-
-	* m4/timevar.m4 (BISON_PREREQ_TIMEVAR): When checking whether
-	<sys/resource.h> can be included, include sys/time.h and
-	sys/times.h first, if available.  This works around the SunOS
-	4.1.4 porting bug reported by Bruce Becker in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-03/msg00018.html>.
-
-	* m4/subpipe.m4 (BISON_PREREQ_SUBPIPE): Don't
-	AC_CHECK_HEADERS([sys/wait.h]), as this interferes with
-	AC_HEADER_SYS_WAIT.
-
-	Merge changes from gnulib.  This was prompted because the CVS
-	snapshot didn't build on Solaris 7 due to strnlen problems.
-
-	These changes need to be merged back into gnulib:
-	* lib/hash.c: Include <stdbool.h> unconditionally.
-	* m4/onceonly.m4 (m4_quote): New macro.
-	(AC_CHECK_HEADERS_ONCE, AC_CHECK_FUNCS_ONCE, AC_CHECK_DECLS_ONCE):
-	Quote AC_FOREACH variable-expansions properly.
-	The 2003-01-03 obstack.h change also needs merging.
-	{end of changes requiring merging}
-
-	* lib/stdbool.h.in, m4/alloca.m4, m4/dirname.m4, m4/dos.m4,
-	m4/getopt.m4, m4/hash.m4, m4/malloc.m4, m4/memchr.m4,
-	m4/memrchr.m4, m4/obstack.m4, m4/onceonly.m4, m4/quote.m4,
-	m4/quotearg.m4, m4/realloc.m4, m4/stpcpy.m4, m4/strnlen.m4,
-	m4/strtol.m4, m4/strtoul.m4, m4/unlocked-io.m4, m4/xalloc.m4:
-	New files, imported from gnulib.
-	* m4/Makefile.am (EXTRA_DIST): Add the new m4/*.m4 files mentioned
-	above.
-
-	* lib/mbswidth.c, m4/error.m4, m4/mbrtowc.m4, m4/mbswidth.m4,
-	m4/memcmp.m4, m4/prereq.m4, m4/stdbool.m4: Update to current
-	gnulib sources.
-
-	* configure.ac (gl_DIRNAME, gl_GETOPT, gl_HASH, gl_QUOTE, gl_XALLOC):
-	Add.
-	(gl_ERROR): New, replacing jm_PREREQ_ERROR.
-	(gl_FUNC_ALLOCA): New, replacing AC_FUNC_ALLOCA.
-	(gl_FUNC_STPCPY): New, replacing AC_REPLACE_FUNCS(stpcpy).
-	(gl_FUNC_STRNLEN): New, replacing AC_FUNC_STRNLEN.
-	(gl_MBSWIDTH): New, replacing jm_PREREQ_MBSWIDTH.
-	(gl_OBSTACK): New, replacing AC_FUNC_OBSTACK.
-	(gl_QUOTEARG): New, replacing jm_PREREQ_QUOTEARG.
-	(jm_FUNC_GLIBC_UNLOCKED_IO, gl_FUNC_STPCPY, gl_FUNC_STRTOL): New.
-	(jm_FUNC_MALLOC): New, replacing AC_FUNC_MALLOC.
-	(jm_FUNC_REALLOC): New, replacing AC_FUNC_REALLOC.
-	(jm_PREREQ_ARGMATCH): Remove.
-	(AC_REPLACE_FUNCS): Remove memchr, memrchr, stpcpy, strtol, strtoul.
-	* lib/Makefile.am (libbison_a_SOURCES): Add argmatch.c, argmatch.h.
-
-	* src/system.h: Include <stdbool.h> unconditionally.
-
-	* lib/bbitset.h: Include <limits.h> unconditionally.  We have been
-	assuming at least C89 in the bitset code for some time now.
-
-2003-03-03  Akim Demaille  <akim@epita.fr>
-
-	* ro.po: New.
-
-2003-03-02  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Table of Symbols): Reactivate the
-	documentation for %lex-param, and %parse-param.
-
-2003-03-02  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c, data/glr.c, data/lal1.cc: Use similar code to
-	generate verbose error messages.
-	Use the number of tokens as an upper bound in yytname, as it
-	cannot be a non terminal.
-
-2003-03-02  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (_AT_DATA_DANCER_Y): Fix the expected error
-	message.
-
-2003-03-02  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (_AT_DATA_DANCER_Y, AT_CHECK_DANCER): New.
-	Use them to exercise yycheck overrun.
-	Based on Andrew Suffield's grammar.
-
-2003-03-02  Akim Demaille  <akim@epita.fr>
-
-	Create tests/local.at for Bison generic testing macros.
-
-	* tests/calc.at (AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): Move to...
-	* tests/local.at (AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS):
-	This new file.
-	* tests/calc.at (AT_CHECK_CALC): Adjust.
-	* tests/testsuite.at (AT_DATA_GRAMMAR_PROLOGUE, AT_DATA_GRAMMAR)
-	(AT_COMPILE, AT_COMPILE_CXX, AT_PARSER_CHECK): Move to...
-	* tests/local.at: here.
-	(AT_COMPILE_CXX): Tags the tests using it as c++.
-	Ignore the test if CXX is not functional.
-
-2003-03-01  Paul Eggert  <eggert@twinsun.com>
-
-	* src/scan-gram.l (code_start): Initialize it to scanner_cursor,
-	not loc->end, since loc->end might contain garbage and this leads
-	to undefined behavior on some platforms.
-	(id_loc, token_start): Use (IF_LINTed) initial values that do not
-	depend on *loc, so that the reader doesn't give the the false
-	impression that *loc is initialized.
-	(<INITIAL>"%%"): Do not bother setting code_start, since its value
-	does not survive the return.
-
-2003-03-01  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l (code_start): Always initialize it when entering
-	into yylex, as SC_EPILOGUE is activated *before* the corresponding
-	yylex invocation.  An alternative would be making it static, but
-	then it starts with the second %%'s beginning, instead of its end.
-
-2003-02-28  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/mbswidth.c: Include <wchar.h> before "mbswidth.h", to work
-	around a UnixWare 7.1.1 porting bug reported by John Hughes in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-02/msg00030.html>.
-
-2003-02-26  Paul Eggert  <eggert@twinsun.com>
-
-	* README: Mention compiler bug in Sun Forte Developer 6 update 2.
-	Remove Sequent/Pyramid discussion (nobody uses them any more).
-	Merge VMS and MS-DOS discussion; these ports may well be dead
-	but let's keep mentioning them for now.  Put <> around email
-	addresses.  Add copyright notice.
-
-2003-02-24  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (yy_reduce_print): yylineno -> yylno,
-	to avoid collision with flex use of yylineno.
-	Problem reported by Bruce Lilly in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-02/msg00016.html>.
-	* data/lalr1.cc (yy::]b4_parser_class_name[::parse): Likewise.
-	* data/yacc.c (yy_reduce_print): Likewise.
-
-	* config/depcomp: Sync with Automake 1.7.3.
-
-2003-02-21  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: Use temporary variables instead of casts to
-	change integer types.
-	Suggested by Paul Eggert.
-
-2003-02-21  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Use "location" consistently to refer to @n,
-	to avoid confusions with lalr1.cc's notion of Position.
-	Suggested by Paul Eggert.
-
-2003-02-20  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (position.hh): Make sure "columns" never pushes
-	before initial_columns.
-	(location.hh): Use consistent variable names when defining the
-	operator<<.
-	Use "last" so that we subtract from Positions, not from unsigned.
-
-2003-02-20  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (position.hh): New subfile, including the extended
-	and Doxygen'ed documentation of class Position.
-	(location.hh): Use it.
-	Document a` la Doxygen.
-	With the help of Benoit Perrot.
-
-2003-02-20  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at (AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): Define
-	AT_YACC_IF.
-	Redefine AT_YYERROR_SEES_LOC_IF using it.
-	(_AT_DATA_CALC_Y): Don't declare yyerror when lalr1.cc, as it is
-	not defined.
-	Don't use the location in yy::Parser::error_ and
-	yy::Parser::print_ when not %locations.
-	Activate more lalr1.cc tests.
-
-2003-02-19  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: When displaying a line number, be sure to make it
-	an int.
-
-2003-02-19  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (b4_stack_depth_init, yy::Parser::initdepth_):
-	Remove, useless.
-	(YYABORT, YYACCEPT, YYERROR): New.
-	* tests/calc.at: Renable the lalr1.cc test.
-
-2003-02-19  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at (AT_CHECK_CALC): Check different scenarios of
-	error recovery, mixing with/without pops and discarding of the
-	lookahead.
-	Exercise YYERROR.
-	Disable the lalr1.cc tests as currently it doesn't support YYERROR.
-
-2003-02-17  Paul Eggert  <eggert@twinsun.com>
-
-	* tests/atlocal.in (LDFLAGS, LIBS): New vars.
-	* tests/testsuite.at (AT_COMPILE): Use them.
-	This fixes the testsuite problem reported by Robert Lentz in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-02/msg00011.html>.
-
-2003-02-12  Paul Eggert  <eggert@twinsun.com>
-
-	* data/yacc.c (yyerrlab) [YYERROR_VERBOSE]:
-	Avoid subscript error in yycheck.  Bug reported by Andrew Suffield in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-02/msg00003.html>.
-	* data/glr.c (yyreportSyntaxError) [YYERROR_VERBOSE]: Likewise.
-	Check for malloc failure, for consistency with yacc.c.
-	(yytname_size): Remove, for consistency with yacc.c.
-
-	The bug still remains in data/lalr1.cc, as I didn't have time
-	to fix it there.
-
-2003-02-06  Akim Demaille  <akim@epita.fr>
-
-	* configure.ac (GXX): Rename as...
-	(CXX): this, to keep the original Autoconf semantics.
-	Require 2.57.
-	* data/lalr1.cc: Fix b4_copyright invocations.
-	If YYDEBUG is not defined, don't depend upon name_ being defined.
-	(location.hh): Include string and iostream.
-	(Position::filename): New member.
-	(Position::Position ()): New.
-	(operator<< (Position)): New.
-	(operator- (Position, int)): New.
-	(Location::first, Location::last): Rename as...
-	(Location::begin, Location::end): these, to mock the conventional
-	iterator names.
-	(operator<< (Location)): New.
-	* tests/atlocal.in (CXX): New.
-	* tests/testsuite.at (AT_COMPILE_CXX): New.
-	* tests/calc.at (_AT_DATA_CALC_Y): Adjust yyerror to report the
-	locations in a more synthetic way.
-	(AT_CHECK_PUSHDEFS): AT_YYERROR_SEES_LOC_IF is positive if
-	lalr1.cc is used.
-	Adjust the C locations to match those from Emacs: first column is
-	column 0.
-	Change all the expected results.
-	Conform to the GCS: simplify the locations when applicable.
-	(LOC, VAL, YYLLOC_FORMAL, YYLLOC_ARG, USE_YYLLOC, LEX_FORMALS)
-	(LEX_ARGS, USE_LEX_ARGS, LEX_PRE_FORMALS, LEX_PRE_ARGS): Replace
-	these CPP macros with the m4 macros new defined by...
-	(AT_CHECK_PUSHDEFS): this, i.e.:
-	(AT_LALR1_CC_IF, AT_PURE_LEX_IF, AT_LOC, AT_VAL, AT_LEX_FORMALS)
-	(AT_LEX_ARGS, AT_USE_LEX_ARGS, AT_LEX_PRE_FORMALS, AT_LEX_PRE_ARGS)
-	New macros.
-	(AT_CHECK_POPDEFS): Undefine them.
-	(AT_CHECK_CALC_LALR1_CC): New.
-	Use it for the first lalr1.cc test.
-
-2003-02-04  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc (YYLLOC_DEFAULT): Fix its definition: be based on
-	Location as is defined.
-
-2003-02-04  Akim Demaille  <akim@epita.fr>
-
-	* data/lalr1.cc: If YYDEBUG is not defined, don't depend upon
-	name_ being defined.
-
-2003-02-03  Paul Eggert  <eggert@twinsun.com>
-
-	* src/gram.h (start_symbol): Remove unused decl.
-
-	Use more-consistent naming conventions for local vars.
-
-	* src/derives.c (derives_compute): Change type of local var from
-	int to rule_number.
-	* src/gram.c (grammar_rules_partial_print): Likewise.
-	* src/print.c (print_core): Likewise.
-	* src/reduce.c (reduce_grammar_tables): Likewise.
-
-	* src/gram.c (grammar_dump): Change name of item_number *
-	local var from r to rp.
-	* src/nullable.c (nullable_compute): Likewise.
-
-	* src/gram.h (ISTOKEN, ISVAR): Use i, not s, for int var.
-
-	* src/gram.h (symbol_number_as_item_number): Use sym, not s,
-	for symbol or symbol_number var.
-	* src/reader.c (grammar_start_symbol_set): Likewise.
-	* src/reader.h (grammar_start_symbol_set, grammar_symbol_append):
-	Likewise.
-	* src/state.c (transitions_to): Likewise.
-	* src/state.h: Likewise.
-	* src/tables.c (symbol_number_to_vector_number): Likewise.
-
-	* src/muscle_tab.h (MUSCLE_OBSTACK_SGROW): Use p, not s, for
-	char * var.
-
-	* src/parse-gram.y (lloc_default): Use loc, not r, for YYLTYPE
-	var.
-
-	* src/scan-gram.l (no_cr_read): Use bytes_read, not s, for size
-	var.
-
-	* src/system.h (xstrndup, strchr, strspn, strnlen, memchr, memrchr):
-	Use str, not s, for char * var.  Use ch, not c, for character var.
-	Use size for size var.
-
-	* src/uniqstr.c (uniqstr_new, uniqstr_assert): Use str, not s, for
-	char * var.
-	(uniqstr_print, uniqst_print_processor): Use ustr, not s, for
-	uniqstr var.
-	* src/uniqstr.h: Likewise.
-
-	* src/vcg.c (get_color_str, get_textmode_str, get_shape_str,
-	get_layoutalgorithm_str, get_decision_str, get_orientation_str,
-	get_node_alignment_str, get_arrow_mode_str, get_crossing_type_str,
-	get_view_str, get_linestyle_str, get_arrowstyle_str): Rename
-	param to have same name as that of enum, so that we don't use
-	"s" to stand for a non-state.
-
-2003-02-02  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-skel.l: Scan more than one inert character per yylex
-	invocation.
-
-2003-02-01  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.875a.
-
-	* po/LINGUAS: Add ms.
-
-2003-01-30  Akim Demaille  <akim@epita.fr>
-
-	* doc/Makefile.am (CLEANFILES): Add bison.fns for distcheck.
-
-2003-01-29  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* tests/cxx-type.at: Correct apparent typo in Bison input: $$ instead
-	of $1.
-
-	Changes in response to error report by S. Eken: GLR mode does not
-	handle negative $ indices or $ indices in embedded rules correctly.
-	See <http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00076.html>.
-
-	* data/glr.c (b4_rhs_value): Change to use YYFILL macro.
-	(b4_rhs_location): Ditto.
-	(yyfill): New function to copy from stack tree into array
-	incrementally.
-	(yyuserAction): Modify to allow incremental move of semantic values
-	to rhs array when in GLR mode.
-	Define YYFILL to use in user-defined actions to fill semantic array
-	as needed.
-	Remove dummy use of yystack, as there is now a guaranteed use.
-	(yydoAction): Modify to allow incremental move of semantic values
-	to rhs array when in GLR mode.
-	(yyresolveAction): Ditto.
-	(yyglrShiftDefer): Update comment.
-	(yyresolveStates): Use X == NULL for pointers, not !X.
-	(yyglrReduce): Ditto.
-	(yydoAction): Ditto
-
-	* tests/glr-regr1.at: Rename to ...
-	* tests/glr-regression.at: Add new regression test for the problems
-	described above (adapted from S. Eken).
-	Update copyright notice.
-	* tests/testsuite.at: Rename glr-regr1.at to glr-regression.at.
-	* tests/Makefile.am: Ditto.
-
-2003-01-28  Paul Eggert  <eggert@twinsun.com>
-
-	* data/lalr1.cc: Do not use @output_header_name@ unless
-	b4_defines_flag is set.  This fixes two bugs reported by
-	Tim Van Holder in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00071.html>
-	and <http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00073.html>.
-
-2003-01-21  Paul Eggert  <eggert@twinsun.com>
-
-	* data/yacc.c (YYERROR): Move code from yyerrlab1 to here, so that
-	we don't need to worry about yyerrlab1 being reported as an
-	"unused label" by non-GCC C compilers.  The downside is that if
-	locations are used then a couple of statements are duplicated each
-	time YYERROR is invoked, but the upside is that the warnings
-	should vanish.
-	(yyerrlab1): Move code to YERROR.
-	(yyerrlab2): Remove.  Change uses back to yyerrlab1.
-	This reverts some of the 2002-12-27 change.
-
-2003-01-17  Paul Eggert  <eggert@twinsun.com>
-
-	* src/output.c (symbol_printers_output): Fix typo that led
-	to core dump.  Problem reported by Antonio Rus in
-	<http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00058.html>.
-
-2003-01-13  Akim Demaille  <akim@epita.fr>,
-		Quoc Peyrot <chojin@lrde.epita.fr>,
-		Robert Anisko <anisko_r@lrde.epita.fr>
-
-	* data/lalr1.cc (parse::yyerrlab1): When popping the stack, stop
-	when the stacks contain one element, as the loop would otherwise
-	free the last state, and then use the top state (the one we just
-	popped).  This means that the initial elements will not be freed
-	explicitly, as is the case in yacc.c; it is not a problem, as
-	these elements have fake values.
-
-2003-01-11  Paul Eggert  <eggert@twinsun.com>
-
-	* NEWS: %expect-violations are now just warnings, reverting
-	to Bison 1.30 and 1.75 behavior.  This fixes the GCC 3.2
-	bootstrapping problem reported by Matthias Klose; see
-	<http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00053.html>.
-	* src/conflicts.c (conflicts_print): Likewise.
-	* tests/conflicts.at (%expect not enough, %expect too much,
-	%expect with reduce conflicts): Likewise.
-	* doc/bison.texinfo (Expect Decl): Document this.  Also mention
-	that the warning is enabled if the number of conflicts changes
-	(not necessarily increases).
-
-	* src/getargs.c (version): Update copyright year.
-
-2003-01-09  Akim Demaille  <akim@epita.fr>
-
-	* src/Makefile.am, lib/Makefile.am: Use $(VAR) instead of @VAR@.
-
-2003-01-08  Paul Eggert  <eggert@twinsun.com>
-
-	* Makefile.maint (WGETFLAGS):
-	New macro, containing "-C off" to disable proxy caches.
-	All uses of $(WGET) changed to $(WGET) $(WGETFLAGS).
-	(rel-check): Use $(WGET) instead of wget.
-
-2003-01-06  Paul Eggert  <eggert@twinsun.com>
-
-	* doc/bison.texinfo (Generalized LR Parsing): Add a reference to
-	the GLR paper of Scott, Johnstone and Hussain.
-
-2003-01-04  Paul Eggert  <eggert@twinsun.com>
-
-	* configure.ac (AC_ARG_ENABLE): Add --disable-yacc.
-	(YACC_SCRIPT, YACC_LIBRARY): New vars to AC_SUBST.
-	* lib/Makefile.am (lib_LIBRARIES): liby.a -> @YACC_LIBRARY@.
-	(EXTRA_LIBRARIES): New var, for liby.a.
-	* src/Makefile.am (bin_SCRIPTS): yacc -> @YACC_SCRIPT@.
-	(EXTRA_SCRIPTS): New var, for yacc.
-
-	* data/yacc.c (yyerrlab1): Omit attribute if __cplusplus is defined,
-	since GNU C++ (as of 3.2.1) does not allow attributes on labels.
-	Problem reported by Nelson H. F. Beebe.
-
-2003-01-03  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/obstack.h (__INT_TO_PTR) [__STDC__]: Cast result to
-	(void *) to avoid diagnostic with native c89 on SGI IRIX 6.5
-	when compiling Bison 1.875's `bitset bset = obstack_alloc
-	(bobstack, bytes);'.  Problem reported by Nelson H. F. Beebe.
-
-	* src/scan-skel.l (QPUTS): Omit redundant `;' from macro definition.
-	([^@\n]): Renamed from [^@\n]+ so that the token buffer does not
-	grow to a huge size with typical invocation.
-
-	* lib/hash.c (_Bool, bool, false, true, __bool_true_false_are_defined):
-	Use the pattern recommended by Autoconf 2.57, except also protect
-	against double-definition.
-	* src/system.h: Likewise.
-	Portability issues reported by Nelson H. F. Beebe.
-
-	* data/glr.c (yybool): Renamed from bool, to avoid collisions in C.
-	All uses changed.  Provide a definition in both C and C++.
-	(yytrue, yyfalse): Define even if defined (__cplusplus).
-
-	* lib/bitset_stats.c (bitset_stats_list): Remove unused var.
-	Reported by Nelson H. F. Beebe.
-
-	* src/scan-skel.l ("@oline@"): Output lineno+1, not lineno.
-
-2003-01-02  Paul Eggert  <eggert@twinsun.com>
-
-	* data/yacc.c (yyerrlab1): Append `;' after attribute, to
-	pacify the buggy "smart preprocessor" in MacOS 10.2.3.
-	Bug reported by Nelson H. F. Beebe.
-
-2003-01-01  Paul Eggert  <eggert@twinsun.com>
-
-	* Version 1.875.
-
-2002-12-30  Paul Eggert  <eggert@twinsun.com>
-
-	* src/scan-gram.l (<INITIAL,SC_AFTER_IDENTIFIER,SC_PRE_CODE>","):
-	Moved here from...
-	(<INITIAL>","): Here.  This causes stray "," to be treated
-	more uniformly.
-
-	* src/scan-gram.l (<SC_BRACED_CODE>"}"): Output ";" before the
-	last brace in braced code when not in Yacc mode, for compatibility
-	with Bison 1.35.  This resurrects the 2001-12-15 patch to
-	src/reader.c.
-
-	* src/reader.h (YYDECL): Use YYSTYPE, not its deprecated alias
-	yystype.  This follows up the 2002-12-24 YYSTYPE bug fix.
-
-2002-12-28  Paul Eggert  <eggert@twinsun.com>
-
-	* src/symtab.c (symbol_make_alias): Set type of SYMVAL to be
-	that of SYM's type.  This fixes Debian bug 168069, reported by
-	Thomas Olsson.
-
-2002-12-28  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.75f.
-
-	Switch back to the Yacc style of conflict reports, undoing some
-	of the 2002-07-30 change.
-	* doc/bison.texinfo (Understanding): Use Yacc style for
-	conflict reports.  Also, use new way of locating rules.
-	* src/conflicts.c (conflict_report):
-	Renamed from conflict_report_yacc, removing the old
-	'conflict_report'.  Translate the entire conflict report at once,
-	so that we don't assume that "," has the same interpretation in
-	all languages.
-	(conflicts_output): Use Yacc-style conflict report for each state,
-	instead of our more-complicated style.
-	(conflicts_print): Use Yacc-style conflict report, except print
-	the input file name when not emulating Yacc.
-	* tests/conflicts.at (Unresolved SR Conflicts, Defaulted
-	Conflicted Reduction, %expect not enough, %expect too much,
-	%expect with reduce conflicts): Switch to Yacc-style conflict reports.
-	* tests/existing.at (GNU Cim Grammar): Likewise.
-	* tests/glr-regr1.at (Badly Collapsed GLR States): Likewise.
-
-	* src/complain.c (warn_at, warn, complain_at, complain, fatal_at,
-	fatal): Don't invoke fflush; it's not needed and it might even be
-	harmful for stdout, as stdout might not be open.
-	* src/reduce.c (reduce_print): Likewise.
-
-2002-12-27  Paul Eggert  <eggert@twinsun.com>
-
-	Fix a bug where error locations were not being recorded correctly.
-	This problem was originally reported by Paul Hilfinger in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00086.html>.
-
-	* data/yacc.c (yyparse): New local var yylerrsp, to record the
-	top of the location stack's error locations.
-	(yyerrlab): Set it.  When discarding a token, push its location
-	onto yylerrsp so that we don't lose track of the error's end.
-	(yyerrlab1): Now is only the target of YYERROR, so that we can
-	properly record the location of the action that failed.  For GCC
-	2.93 and later, insert an __attribute__ ((__unused__)) to avoid
-	GCC warning about yyerrlab1 being unused if YYERROR is unused.
-	(yyerrlab2): New label, which yyerrlab now falls through to.
-	Compute the error's location by applying YYLLOC_DEFAULT to
-	the locations of all the symbols that went into the error.
-	* doc/bison.texinfo (Location Default Action): Mention that
-	YYLLOC_DEFAULT is also invoked for syntax errors.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR):
-	Error locations include the locations of all the tokens that were
-	discarded, not just the last token.
-
-2002-12-26  Paul Eggert  <eggert@twinsun.com>
-
-	* src/files.c: Include quote.h.
-	(compute_output_file_names): Warn if we detect conflicting
-	outputs to the same file.  This should catch the misunderstanding
-	exemplified by Debian Bug 165349, reported by Bruce Stephens..
-
-	* src/conflicts.c (conflicts_print): If the user specifies
-	"%expect N", report an error if there are any reduce/reduce
-	conflicts.  This is what the manual says should happen.
-	This fixes Debian bug 130890, reported by Anthony DeRobertis.
-	* tests/conflicts.at (%expect with reduce conflicts): New test.
-
-	Don't use m4_include on relative file names, as it doesn't work as
-	desired if there happens to be a file with that name under ".".
-
-	* m4sugar/version.m4: Remove; it was included but it wasn't used.
-	* data/Makefile.am (dist_m4sugar_DATA): Remove m4sugar/version.m4.
-	* data/m4sugar/m4sugar.m4: Don't include m4sugar/version.m4.
-	* data/glr.c, data/lalr1.cc, data/yacc.c: Don't include c.m4.
-	* src/output.c (output_skeleton): Use full path names when
-	specifying a file to include; don't rely on include path, as
-	it's unreliable when the working file contains a file with
-	that name.
-
-2002-12-25  Paul Eggert  <eggert@twinsun.com>
-
-	Remove obsolete references to bison.simple and bison.hairy.
-	Problem mentioned by Aubin Mahe in
-	<http://lists.gnu.org/archive/html/help-bison/2002-12/msg00010.html>.
-	* data/glr.c: Comment fix.
-	* doc/bison.1: Remove references.  Also, mention "yacc".
-
-	* src/getargs.c (getargs) [MSDOS]: Don't assume optarg != NULL
-	with -g option.
-
-	* src/parse-gram.y (declaration): Use enum "report_states" rather
-	than its numeric value 1.
-
-	* src/scan-skel.l ("@output ".*\n): Close any old yyout before
-	opening a new one.  This fixes Debian bug 165349, reported by
-	Bruce Stephens.
-
-2002-12-24  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.75e.
-
-	* Makefile.maint (cvs-update): Don't assume that the shell
-	supports $(...), as Solaris sh doesn't.
-
-	* src/parse-gram.y (lloc_default): Remove test for empty
-	nonterminals at the end, since it didn't change the result.
-
-2002-12-24  Paul Eggert  <eggert@twinsun.com>
-
-	If the user does not define YYSTYPE as a macro, Bison now declares it
-	using typedef instead of defining it as a macro.  POSIX requires this.
-	For consistency, YYLTYPE is also declared instead of defined.
-
-	%union directives can now have a tag before the `{', e.g., the
-	directive `%union foo {...}' now generates the C code
-	`typedef union foo { ... } YYSTYPE;'; this is for Yacc compatibility.
-	The default union tag is `YYSTYPE', for compatibility with Solaris 9
-	Yacc.  For consistency, YYLTYPE's struct tag is now `YYLTYPE'
-	instead of `yyltype'.
-
-	`yystype' and `yyltype' are now obsolescent macros instead of being
-	typedefs or tags; they are no longer documented and will be
-	withdrawn in a future release.
-
-	* data/glr.c (b4_location_type): Remove.
-	(YYSTYPE): Renamed from yystype.
-	(YYSTYPE_IS_DECLARED): New macro, used to prevent double-typedef.
-	(struct YYLTYPE): Renamed from struct yyltype.
-	(YYLTYPE): Renamed from yyltype.
-	(yyltype, yystype): New (and obsolescent) macros,
-	for backward compatibility.
-	* data/yacc.c: Likewise.
-
-	* data/yacc.c (YYSTYPE): Declare as union YYSTYPE if the user
-	does not specify a union tag.  This is for compatibility with
-	Solaris 9 yacc.
-
-	* src/parse-gram.y (add_param): 2nd arg is now char * not char
-	const *, since it is now modified by stripping surrounding { }.
-	(current_braced_code): Remove.
-	(PERCENT_DESTRUCTOR, PERCENT_PRINTER, PERCENT_UNION,
-	PERCENT_LEX_PARAM, PERCENT_PARSE_PARAM): Change names to include
-	trailing " {...}".  Now of type <chars>.
-	(grammar_declaration): Adjust to bundled tokens.
-	(code_content): Remove; stripping is now done by add_param.
-	(print_token_value): Print contents of bundled tokens.
-	(token_name): New function.
-
-	* src/reader.h (braced_code, current_braced_code): Remove.
-	(token_name): New decl.
-
-	* src/scan-gram.l (handle_dollar, handle_at): Now takes int
-	token_type, not braced_code code_kind.  All uses changed.
-	(SC_PRE_CODE): New state, for scanning after a keyword that
-	has (or usually has) an immediately-following braced code.
-	(token_type): New local var, to keep track of which token type
-	to return when scanning braced code.
-	(<INITIAL>"%destructor", <INITIAL>"%lex-param",
-	<INITIAL>"%parse-param", <INITIAL>"%printer",
-	<INITIAL>"%union"): Set token type and BEGIN SC_PRE_CODE
-	instead of returning a token type immediately.
-	(<INITIAL>"{"): Set token type.
-	(<SC_BRACED_CODE>"}"): Use it.
-	(handle_action_dollar, handle_action_at): Now returns bool
-	indicating success.  Fail if ! current_rule; this prevents a core dump.
-	(handle_symbol_code_dollar, handle_symbol_code_at):
-	Remove; merge body into caller.
-	(handle_dollar, handle_at): Complain in invalid contexts.
-
-	* NEWS, doc/bison.texinfo: Document the above.
-	* NEWS: Fix years and program names in copyright notice.
-
-2002-12-17  Paul Eggert  <eggert@twinsun.com>
-
-	* NEWS, doc/bison.texinfo (Parser Function, Pure Calling, Error
-	Reporting, Table of Symbols): Omit mentions of %lex-param and
-	%parse-param from the documentation for now.
-
-2002-12-15  Paul Eggert  <eggert@twinsun.com>
-
-	Undo most of the 2002-11-12 yychar -> yytoken patch, as it broke
-	GCC 3.2.1 (which depends on yychar == YYEMPTY when there is no
-	lookahead symbol, and which sets yychar in parser actions) and it
-	disagreed with the Bison documentation.  Bug
-	reported by Andrew Walrond.
-
-	* data/yacc.c (YYTRANSLATE): Don't check for negative argument,
-	as the caller now does that.
-	(yyclearin, YYBACKUP, yyparse): Use yychar, not yytoken.
-	(YYEMPTY): Parenthesize right hand side, since others use it.
-	(yyparse): Don't assume that our generated code is the only code
-	that sets yychar.
-
-2002-12-13  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.75d.
-
-	POSIX requires a "yacc" command.
-	* src/Makefile.am (bin_SCRIPTS): New macro, for yacc.
-	(MOSTLYCLEANFILES): Add yacc.
-	(yacc): New rule.
-	* doc/bison.texinfo (Invocation, Bison Options): Mention yacc
-	as an alias for bison y.
-
-	* po/LINGUAS: Add da.
-
-	* src/getargs.c (__GNU_LIBRARY__) [lint]: Define to work around
-	problem with latest <getopt.h>.
-	(HACK_FOR___GNU_LIBRARY___PROTOTYPE): New macro.
-
-	* doc/fdl.texi: Upgrade to 1.2.
-	* lib/alloca.c, lib/error.c, lib/getopt.c, lib/getopt.h
-	lib/getopt1.c, lib/gettext.h, lib/memrchr.c, lib/obstack.c,
-	lib/obstack.h, lib/strnlen.c, lib/unlocked-io.h: Sync with
-	gnulib.
-	* config/install-sh: Sync with autotools.
-
-	Fix a bad interaction with flex 2.5.23 reported by Bruce Lilly in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00114.html>.
-	* data/yacc.c (YYLTYPE, struct yyltype): Do not define unless
-	locations are requested.
-	(union yyalloc): Do not depend on YYLTYPE_IS_TRIVIAL unless
-	locations are requested.
-
-2002-12-12  Paul Eggert  <eggert@twinsun.com>
-
-	Remove unportable casts and storage allocation tricks.
-	While we're at it, remove almost all casts, since they
-	usually aren't needed and are a sign of trouble.
-
-	* configure.ac (AC_CHECK_TYPES): Check for uintptr_t.
-
-	* src/derives.c (derives_compute): Do not subtract NTOKENS from
-	the pointer DSET returned by malloc; this isn't portable.
-	Instead, always use DSET[i - NTOKENS] rather than DSET[i].
-	Similarly for DERIVES.
-	* src/lalr.c (set_goto_map): Likewise, for GOTO_MAP and TEMP_MAP.
-	* src/nullable.c (nullable_compute): Likewise, for RSETS and NULLABLE.
-	* src/reduce.c (reduce_grammar_tables): Likewise, for nontermmap
-
-	* src/derives.c (derives_compute): Do not bother invoking
-	int_of_rule_number, since rule numbers are integers.
-
-	* src/files.c (concat2, tr, compute_base_name): Use xmalloc (N)
-	rather than XMALLOC (char, N).
-
-	* src/files.c (filename_split): Rewrite to avoid cast.
-
-	* src/gram.h (symbol_number_as_item_number,
-	item_number_as_symbol_number, rule_number_as_item_number,
-	item_number_as_rule_number):
-	Now inline functions rather than macros, to avoid casts.
-	* src/state.h (state_number_as_int): Likewise.
-	* src/tables.c (state_number_to_vector_number,
-	symbol_number_to_vector_number): Likewise.
-
-	* src/gram.h (int_of_rule_number): Remove; no longer used.
-
-	* src/lalr.c (add_lookback_edge): Use malloc rather than calloc,
-	since the resulting storage is always stored into.
-
-	* src/main.c (alloca) [C_ALLOCA]: Add decl here, the only place
-	where it's needed.
-
-	* src/muscle_tab.c (muscle_m4_output):
-	Now inline.  Return bool, not int.
-	* src/state.c (state_compare): Likewise.
-	* src/symtab.c (symbol_check_defined,
-	symbol_check_alias_consistency, symbol_pack, symbol_translation,
-	hash_compare_symbol, hash_symbol):
-	Likewise.
-	* src/uniqstr.c (uniqstr_print): Likewise.
-	* src/muscle_tab.c (muscle_m4_output_processor):
-	New function, to avoid casts.
-	* src/state.c (state_comparator, stage_hasher): Likewise.
-	* src/symtab.c (symbol_check_defined_processor,
-	symbol_check_alias_consistency_processor, symbol_pack_processor,
-	symbol_translation_processor, hash_symbol_comparator,
-	hash_symbol_hasher): Likewise.
-	* src/uniqstr.c (uniqstr_print_processor): Likewise.
-	* src/muscle_tab.c (muscles_m4_output):
-	Use new functions instead of casting old functions unportably.
-	* src/state.c (state_hash_new): Likewise.
-	* src/symtab.c (symbols_new, symbols_do, symbols_check_defined,
-	symbols_token_translations_init):
-	Likewise.
-	* src/uniqstr.c (uniqstrs_new, hash_initialize, uniqstrs_do): Likewise.
-
-	* src/output.c (GENERATE_MUSCLE_INSERT_TABLE): Use long local
-	var instead of casting to long, to avoid casts.
-	(prepare_states): Use MALLOC rather than alloca, so that we don't
-	have to worry about alloca.
-	* src/state.c (state_hash_lookup): Likewise.
-
-	* src/scan-gram.l (<SC_ESCAPED_CHARACTER>"'"): Use unsigned char
-	local var instead of casting to unsigned char, to avoid casts.
-
-	* src/state.c (TRANSITIONS_ALLOC, ERRS_ALLOC, REDUCTIONS_ALLOC,
-	STATE_ALLOC): Remove.
-	(transitions_new, errs_new, reductions_new, state_new): Use malloc
-	rather than calloc, and use offsetof to avoid allocating slightly
-	too much storage.
-	(state_new): Initialize all members.
-
-	* src/state.c (state_hash): Use unsigned accumulator, not signed.
-
-	* src/symtab.c (symbol_free): Remove; unused.
-	(symbol_get): Remove cast in lhs of assignment.
-	(symbols_do): Now static.  Accept generic arguments, not
-	hashing-related ones.
-
-	* src/symtab.h: (NUMBER_UNDEFINED): Remove unnecessary cast.
-	(symbol_processor): Remove.
-	(symbols_do): Remove decl; now static.
-
-	* src/system.h (alloca): Remove; decl no longer needed.
-	(<stddef.h>): Include, for offsetof.
-	(<inttypes.>, <stdint.h>): Include if available.
-	(uintptr_t): New type, if system lacks it.
-	(CALLOC, MALLOC, REALLOC): New macros.
-	All uses of XCALLOC, XMALLOC, and XREALLOC changed to use these
-	new macros.
-
-	* src/tables.c (table_size): Now int, to pacify GCC.
-	(table_grow, table_ninf_remap): Use signed table size.
-	(save_row): Don't bother initializing locals when not needed.
-	(default_goto, goto_actions, pack_vector): Remove unnecessary casts.
-	* src/uniqstr.c (hash_compare_uniqstr):  Likewise.
-
-	* src/vcg.h: Correct misspellings.
-
-	* src/vcg_defaults.h (G_CMAX): Now INT_MAX.
-
-
-	* src/getargs.c (getargs): Don't assume EOF == -1.
-
-2002-12-09  Paul Eggert  <eggert@twinsun.com>
-
-	Change identifier spellings to avoid collisions with names
-	that are reserved by POSIX.
-
-	Don't use names ending in _t, since POSIX reserves them.
-	For consistency, remove _e and _s endings -- they're weren't
-	needed to remove ambiguity.  All uses changed.
-	* src/uniqstr.h (uniqstr): Renamed from uniqstr_t, which in
-	turn was just renamed from struniq_t.
-	* src/uniqstr.c (uniqstr_processor): Renamed from struniq_processor,
-	which in turn was just renamed from struniq_processor_t.
-	(hash_compare_uniqstr): Renamed from hash_compare_struniq, which
-	in turn was renamed from hash_compare_struniq_t.
-	* src/LR0.c (struct state_list): Renamed from struct state_list_s.
-	(state_list): Renamed from state_list_t.
-	* src/assoc.h (assoc): Renamed from assoc_t.
-	* src/conflicts.c (enum conflict_resolution): Renamed from
-	enum conflict_resolution_e.
-	* src/derives.c (struct rule_list): Renamed from struct rule_list_s.
-	(rule_list): Renamed from rule_list_t.
-	* src/getargs.h (enum trace): Renamed from enum trace_e.
-	(enum report): Renamed from enum report_e.
-	* src/gram.h (item_number): Renamed from item_number_t.
-	(rule_number): Renamed from rule_number_t.
-	(struct rule_s): Remove the "rule_s" part; not used.
-	(rule): Renamed from rule_t.
-	(rule_filter): Renamed from rule_filter_t.
-	* src/lalr.c (struct goto_list): Renamed from struct goto_list_s.
-	(goto_list): Renamed from goto_list_t.
-	* src/lalr.h (goto_number): Renamed from goto_number_t.
-	* src/location.h (location): Renamed from location_t.
-	* src/muscle_tab.c (muscle_entry): Renamed from muscle_entry_t,
-	and moved here from:
-	* src/muscle_tab.h (muscle_entry_t): here.
-	* src/nullable.c (struct rule_list): Renamed from struct rule_list_s.
-	(rule_list): Renamed from rule_list_t.
-	* src/print_graph.c (static_graph): Renamed from graph.
-	* src/reader.h (braced_code): Renamed from braced_code_t.
-	Remove brace_code_e tag.
-	* src/relation.h (relation_node): Renamed from relation_node_t.
-	(relation_nodes): Renamed from relation_nodes_t.
-	(relation): Renamed from relation_t.
-	* src/state.h (state_number): Renamed from state_number_t.
-	(struct state): Renamed from struct state_s.
-	(state): Renamed from state_t.
-	(transitions): Renamed from transitions_t.  Unused (and
-	misspelled) transtion_s tag removed.
-	(errs): Renamed from errs_t.  Unused errs_s tag removed.
-	(reductions): Renamed from reductions_t.  Unused tag
-	reductions_s removed.
-	* src/symlist.h (symbol_list): Renamed from symbol_list_t.
-	(struct symbol_list): Renamed from struct symbol_list_s.
-	* src/symtab.h (symbol_number): Renamed from symbol_number_t.
-	(struct symbol): Renamed from struct symbol_s.
-	(symbol): Renamed from symbol_t.
-	* src/tables.c (vector_number): Renamed from vector_number_t.
-	(action_number): Renamed from action_t.
-	* src/tables.h (base_number): Renamed from base_t.
-	* src/vcg.h (enum color): Renamed from enum color_e.
-	(enum textmode): Renamed from enum textmode_e.
-	(enum shape): Renamed from enum shape_e.
-	(struct colorentry): Renamed from struct colorentry_s.
-	(struct classname): Renamed from struct classname_s.
-	(struct infoname): Renamed from struct infoname_s.
-	(enum layoutalgorithm): Renamed from enum layoutalgorithm_e.
-	(enum decision): Renamed from enum decision_e.
-	(enum orientation): Renamed from enum orientation_e.
-	(enum alignment): Renamed from enum alignment_e.
-	(enum arrow_mode): Renamed from enum arrow_mode_e.
-	(enum crossing_type): Renamed from enum crossing_type_e.
-	(enum view): Renamed from enum view_e.
-	(struct node): Renamed from struct node_s.
-	(node): Renamed from node_t.
-	(enum linestyle): Renamed from enum linestyle_e.
-	(enum arrowstyle): Renamed from enum arrowstyle_e.
-	(struct edge): Renamed from struct edge.
-	(edge): Renamed from edge_t.
-	(struct graph): Renamed from struct graph_s.
-	(graph): Renamed from graph_t.
-	* tests/calc.at (_AT_DATA_CALC_Y, Simple LALR Calculator):
-	Rename value_t -> value.
-	* tests/input.at (Torturing the Scanner): Rename value_t -> value,
-	value_t_as_yystype -> value_as_yystype.
-
-	Don't include <errno.h> in the mainstream code, since it
-	reserves E[A-Z0-9]* and we want to use symbols like 'EQUALS'.
-	* lib/get-errno.c, lib/get-errno.h: New files.
-	* lib/Makefile.am (libbison_a_SOURCES): Add get-errno.h,
-	get-errno.c.
-	* src/files.c (xfopen, xfclose): Use get_errno instead of errno.
-	* src/output.c (output_skeleton): Likewise.
-	* src/scan-gram.l (<INITIAL>{int}): Use set_errno and get_errno
-	instead of errno.
-	(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>\\x[0-9abcdefABCDEF]+):
-	Likewise.
-	(handle_action_dollar, handle_action_at): Likewise.
-	* src/system.h: Do not include <errno.h>.
-	(TAB_EXT): Renamed from EXT_TAB.
-	(OUTPUT_EXT): Renamed from EXT_OUTPUT.
-
-	Avoid str[a-z]*, since <string.h> reserves that name space.
-	Change all instances of "struniq" in names to "uniqstr", and
-	likewise for "STRUNIQ" and "UNIQSTR".
-	* src/uniqstr.c: Renamed from src/struniq.c.
-	* src/uniqstr.h: Renamed from src/struniq.h.
-	* src/Makefile.am (bison_SOURCES): Adjust to these renamings.
-	* src/files.c (strsuffix): Remove; unused.
-	(concat2): Renamed from stringappend.  Now static.
-	* src/files.h (strsuffix, stringappend): Remove; unused.
-	* src/parse-gram.y (<chars>): Renamed from <string>.
-	(<uniqstr>): Renamed from <struniq>.
-	* src/scan-gram.l (obstack_for_string): Renamed from string_obstack.
-	* src/vcg.h (struct node_s.expand): Renamed from struct node_s.stretch.
-	(struct graph_s.expand): Renamed from struct graph_s.stretch.
-	* src/vcg_defaults.h (G_EXPAND): Renamed from G_STRETCH.
-	(G_LONG_STRAIGHT_PHASE): Renamed from G_STRAIGHT_PHASE.
-	(N_EXPAND): Renamed from N_STRETCH.
-
-	Avoid *_MAX and *_MIN, since <limits.h> reserves that name space.
-	* data/yacc.c (YYSTACK_GAP_MAXIMUM): Renamed from YYSTACK_GAP_MAX.
-	* src/gram.h (ITEM_NUMBER_MAX, ITEM_NUMBER_MIN, RULE_NUMBER_MAX):
-	Remove; unused.
-	* src/lalr.h (GOTO_NUMBER_MAXIMUM): Renamed from GOTO_NUMBER_MAX.
-	* src/state.h (STATE_NUMBER_MAXIMUM): Renamed from STATE_NUMBER_MAX.
-	* src/symtab.h (SYMBOL_NUMBER_MAXIMUM): Renamed from SYMBOL_NUMBER_MAX.
-	* src/tables.c (VECTOR_NUMBER_MAX, VECTOR_NUMBER_MIN): Remove; unused.
-	(BASE_MAXIMUM): Renamed from BASE_MAX.
-	(BASE_MINIMUM): Renamed from BASE_MIN.
-	(ACTION_MAX): Remove; unused.
-	(ACTION_NUMBER_MINIMUM): Renamed from ACTION_MIN.
-	Unnecessary casts removed from above defines.
-
-
-	Fix misspelling in names.
-	* src/vcg.h (enum_alignment_e): Renamed from enum_alignement_e.
-	* src/vcg_defaults.h (G_NODE_ALIGNMENT): Renamed from
-	G_NODE_ALIGNEMENT.
-
-
-	* lib/timevar.c (timevar_report): Renamed from time_report,
-	for consistency with other names.
-	* lib/timevar.h (timevar_report): New decl.
-	* src/system.h (time_report): Remove; decl is now in lib/timevar.h.
-
-
-	Sort include-file uses.
-
-	Reorder all include files under src to be in the order "system.h".
-	then the ../lib include files in angle brackets (alphabetized),
-	then the . include files in double-quotes (alphabetized).  Fix
-	dependency breakages encountered in this process, as follows:
-	* src/closure.h, src/derives.h, src/state.h: Include "gram.h".
-	* src/complain.c: Don't include stdlib.h, string.h _LIBC stuff.
-	* src/state.h: Include "symtab.h".
-
-2002-12-08  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c, data/lalr1.cc, data/yacc.c: Do not use __file__,
-	since this causes problems when __file__ contains character
-	sequences like "@" that are treated specially by src/scan-skel.l.
-	Instead, just use the file's basename.  This fixes the bug
-	reported by Martin Mokrejs in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-12/msg00007.html>.
-
-2002-12-06  Paul Eggert  <eggert@twinsun.com>
-
-	Add support for rules that do not have trailing semicolons, as
-	POSIX requires.  Improve the quality of locations in Bison
-	diagnostics.
-
-	* src/location.c: Include <quotearg.h>.
-	(empty_location): Now const.
-	(location_print): New function.  Follow the recommendation of the
-	GNU Coding Standards for locations that span file boundaries.
-	* src/location.h: Do not include <quotearg.h>; no longer needed.
-	(boundary): New type.
-	(location_t): Use it.  This allows locations to span file boundaries.
-	All member uses changed: file -> start.file or end.file (as needed),
-	first_line -> start.line, first_column -> start.column,
-	last_line -> end.line, last_column -> end.column.
-	(equal_boundaries): New function.
-	(LOCATION_RESET, LOCATION_STEP): Remove.
-	(LOCATION_PRINT): Remove.  All callers changed to use location_print.
-	(empty_location): Now const.
-	(location_print): New decl.
-	* src/parse-gram.y (lloc_default): New function, which handles
-	empty locations more accurately.
-	(YYLLOC_DEFAULT): Use it.
-	(%token COLON): Remove.
-	(%token ID_COLON): New token.
-	(rules): Use it.
-	(declarations, rules): Remove trailing semicolon.
-	(declaration, rules_or_grammar_declaration):
-	Allow empty (";") declaration.
-	(symbol_def): Remove empty actions; no longer needed.
-	(rules_or_grammar_declaration): Remove trailing semicolon.
-	(semi_colon.opt): Remove.
-	* src/reader.h: Include location.h.
-	(scanner_cursor): New decl.
-	* src/reduce.c (nonterminals_reduce): Use warn_at rather than
-	rolling our own.
-	* src/scan-gram.l (YY_USER_INIT): Initialize scanner_cursor instead
-	of *loc.
-	(STEP): Remove.  No longer needed, now that adjust_location does
-	the work.  All uses removed.
-	(scanner_cursor): New var.
-	(adjust_location): Renamed from extend_location.  It now sets
-	*loc and adjusts the scanner cursor.  All uses changed.
-	Don't bother testing for CR.
-	(handle_syncline): Remove location arg; now updates scanner cursor.
-	All callers changed.
-	(unexpected_end_of_file): Now accepts start boundary of token or
-	comment, not location.  All callers changed.  Update scanner cursor,
-	not the location.
-	(SC_AFTER_IDENTIFIER): New state.
-	(context_state): Renamed from c_context.  All uses changed.
-	(id_loc, code_start, token_start): New local vars.
-	(<INITIAL,SC_AFTER_IDENTIFIER>): New initial context.  Move all
-	processing of Yacc white space and equivalents here.
-	(<INITIAL>{id}): Save id_loc.  Begin state SC_AFTER_IDENTIFIER
-	instead of returning ID immediately, since we need to search for
-	a subsequent colon.
-	(<INITIAL>"'", "\""): Save token_start.
-	(<INITIAL>"%{", "{", "%%"): Save code_start.
-	(<SC_AFTER_IDENTIFIER>): New state, looking for a colon.
-	(<SC_YACC_COMMENT>, <SC_COMMENT>, <SC_LINE_COMMENT>):
-	BEGIN context_state at end, not INITIAL.
-	(<SC_ESCAPED_STRING>"\"", <SC_ESCAPED_CHARACTER>"'",
-	<SC_BRACED_CODE>"}", <SC_PROLOGUE>"%}", <SC_EPILOGUE><<EOF>>):
-	Return correct token start.
-	(<SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE>): Save start boundary when
-	the start of a character, string or multiline comment is found.
-	* tests/conflicts.at (S/R in initial, Defaulted Conflicted
-	Reduction): Adjust reported locations to match the more-precise
-	results now expected.
-	* tests/input.at (Invalid $n, Invalid @n, Type Clashes): Likewise.
-	* tests/reduce.at (Useless Rules, Reduced Automaton,
-	Underivable Rules): Likewise.
-	* tests/regression.at (Invalid inputs): No longer `expecting ";"
-	or "|"' now that so many other tokens are allowed by the new grammar.
-
-	* src/complain.h (current_file): Remove duplicate decl;
-	current_file is now owned by files.h.
-	* src/complain.c, src/scan-gram.l: Include files.h.
-
-2002-12-06  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (yy_reduce_print): Don't assume that yyrline[yyrule]
-	promotes to int; it might be unsigned int.
-	* data/yacc.c (yy_reduce_print): Likewise.
-
-	* doc/bison.texinfo (Table of Symbols): YYERROR_VERBOSE should
-	be #defined in the prologue, not in the Bison declarations.
-	This fixes Debian Bug 102878, reported by Shaul Karl.
-
-2002-12-02  Paul Eggert  <eggert@twinsun.com>
-
-	* configure.ac (AC_REPLACE_FUNCS): Add strtoul.
-	* lib/strtoul.c: New file, from gnulib.
-	This fixes a porting bug reported by Peter Klein in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-12/msg00000.html>.
-
-2002-11-30  Paul Eggert  <eggert@twinsun.com>
-
-	* src/scan-gram.l (no_cr_read, extend_location): Move to epilogue,
-	and put only a forward declaration in the prologue.  This is for
-	consistency with the other scanner helper functions.
-
-	Type clashes now generate warnings, not errors, since it
-	appears that POSIX may allow some grammars with type clashes.
-	* src/reader.c (grammar_current_rule_check): Warn about
-	type clashes instead of complaining.
-	* tests/input.at (Type Clashes): Expect warnings, not complaints.
-
-	Add Yacc library, since POSIX requires it.
-	* doc/bison.texinfo (Yacc Library): New node.  Regenerate top menu.
-	* lib/Makefile.am (lib_LIBRARIES, liby_a_SOURCES): New macros.
-	* lib/main.c, lib/yyerror.c: New files.
-
-	gram_error can be static; it need not be extern.
-	* src/reader.h (gram_error): Remove decl.
-	* src/parse-gram.y (gram_error): Now static.  Add static decl.
-	(print_token_value): Omit parameter names from forward decl,
-	for consistency.
-
-2002-11-29  Paul Eggert  <eggert@twinsun.com>
-
-	* doc/bison.texinfo: Emphasize that yylex and yyerror must
-	be declared before being used.  E.g., one should typically
-	declare them in the prologue.  Use GNU coding style in examples.
-	Put "const" consistently after the type it modifies.  Mention
-	that C99 supports "inline".  Mention that yyerror traditionally
-	returns "int".
-
-	%parse-param and %lex-param now take just one argument, the
-	declaration; the argument name is deduced from the declaration.
-
-	* doc/bison.texinfo (Parser Function, Pure Calling, Error
-	Reporting, Table of Symbols): Document this.
-	* src/parse-gram.y (add_param): New function.
-	(COMMA): Remove.
-	(declaration): Implement new rule for %parse-param and %lex-param.
-	* src/scan-gram.l: "," now elicits a warning, rather than being
-	a token; this is more compatible with byacc.
-	* tests/calc.at (Simple LALR Calculator): Adopt new convention.
-
-2002-11-27  Paul Eggert  <eggert@twinsun.com>
-
-	Rename identifiers to avoid real and potential collisions.
-
-	* data/c.m4 (b4_yysymprint_generate): yyout -> yyoutput,
-	to avoid collision with lex macro described by Bruce Lilly in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00114.html>.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Likewise.
-	* doc/bison.texinfo (Prologue, Tracing): yyprint -> print_token_value.
-	* src/parse-gram.y (print_token_value): Renamed from yyprint.
-	All uses changed.
-	(YYPARSE_PARAM, YYLEX_PARAM, yycontrol): Remove.  All uses changed.
-	The name "yycontrol" violates the name space rules, and this stuff
-	wasn't being used anyway.
-	(input): Remove action; this stuff wasn't being used.
-	(gram_error): Rename local variable yylloc -> loc.
-	* src/reader.h (struct gram_control_s, gram_control_t): Remove.
-	(YY_DECL): Don't use "yy" at start of local variables.
-	All uses changed, e.g., yylloc -> loc.
-	* src/scan-gram.l (STEP): Renamed from YY_STEP.  All uses changed.
-	(STRING_GROW): Renamed from YY_OBS_GROW.  All uses changed.
-	(STRING_FINISH): Renamed from YY_OBS_FINISH.  All uses changed.
-	(STRING_FREE): Renamed from YY_OBS_FREE.  All uses changed.
-
-	* src/parse-gram.y (gram_error): loc is now const *.
-	* src/reader.h (gram_error): Likewise.
-
-2002-11-24  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.75c.
-
-	* tests/actions.at (Actions after errors): Use an output format
-	more similar to that of the Printers and Destructors test.
-	Test the position of the ';' token too.
-	(Printers and Destructors): Likewise.
-	(Printers and Destructors: %glr-parser): Remove for now, to avoid
-	unnecessarily alarming people when the test fails.
-
-	* data/yacc.c (yyerrlab1): Move this label down, so that the
-	parser does not discard the lookahead token if the user code
-	invokes YYERROR.  This change is required for POSIX conformance.
-
-	* lib/error.c: Sync with gnulib.
-
-2002-11-22  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/quotearg.c, lib/quotearg.h: Sync with gnulib.
-	* lib/mbswidth.c, lib/mbswidth.h: Likewise.
-	* lib/xmalloc.c: Likewise.
-
-2002-11-20  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/argmatch.c, lib/argmatch.h: Sync with gnulib.
-
-2002-11-20  Paul Eggert  <eggert@twinsun.com>
-
-	Avoid use of <assert.h>, as the GNU Coding Standards hint that one
-	should use `if (! x) abort ();' rather than `assert (x);', and
-	anyway it's one less thing to worry about configuring.
-
-	* data/glr.c, lib/hash.c, src/system.h: Do not include <assert.h>.
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Likewise,
-	and replace all instances of assert with abort.
-	* tests/calc.at (_AT_DATA_CALC_Y): Likewise.
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Likewise.
-
-	* data/glr.c (yydoAction, yyglrReduce, yysplitStack, yyresolveStates,
-	yyresolveAction, yyprocessOneStack): Use abort rather than assert.
-	* lib/hash.c (hash_lookup, hash_get_first, hash_get_next,
-	hash_find_entry, hash_rehash, hash_insert): Likewise.
-	* src/conflicts.c (resolve_sr_conflict): Likewise.
-	* src/lalr.c (set_goto_map, map_goto): Likewise.
-	* src/nullable.c (nullable_compute): Likewise.
-	* src/output.c (prepare_rules, token_definitions_output): Likewise.
-	* src/reader.c (packgram, reader): Likewise.
-	* src/state.c (state_new, state_free, state_transitions_set,
-	state_reduction_find): Likewise.
-	* src/symtab.c (symbol_user_token_number_set, symbol_make_alias,
-	symbol_pack): Likewise.
-	* src/tables.c (conflict_row, pack_vector): Likewise.
-	* src/vcg.c (get_color_str, get_textmode_str, get_shape_str,
-	get_layoutalgorithm_str, get_decision_str, get_orientation_str,
-	get_node_alignement_str, get_arrow_mode_str, get_crossing_type_str,
-	get_view_str, get_linestyle_str, get_arrowstyle_str): Likewise.
-
-	* lib/argmatch.h (ARRAY_CARDINALITY): Do not bother to #undef.
-	(ARGMATCH_CONSTRAINT): New macro.
-	(ARGMATCH_ASSERT): Use it.
-
-	* src/system.h (verify): New macro.
-	* src/getargs.c (trace_argmatch, report_argmatch): Use verify
-	rather than assert.
-	* src/tables.c (tables_generate): Likewise.
-
-	* src/struniq.c (struniq_assert): Now returns void, and aborts
-	if the assertion is false.
-	(struniq_assert_p): Remove.
-	* src/struniq.h: Likewise.
-
-2002-11-18  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (yygetLRActions): Replace `yyindex' with
-	`yytable[yyindex]' to fix typo introduced in my 2002-11-09 patch.
-	This fixes the regression with Sun ONE Studio 7 cc that I reported in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00077.html>.
-
-2002-11-18  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Tracing): `yyprint' shouldn't prepend a
-	space.
-	From Tim Van Holder.
-
-2002-11-17  Paul Eggert  <eggert@twinsun.com>
-
-	Pacify Sun ONE Studio 7 lint.  Also, rename "ParseError"
-	to "SyntaxError" for consistency with my 2002-11-15 change.
-
-	* data/glr.c (YYDPRINTF, YYDSYMPRINT, YYDSYMPRINTF) [!YYDEBUG]: Do
-	not define to {}, since this breaks the common use of `YYDPRINTF
-	((...));' if a single statement is desired (e.g. before `else').
-	Work around GCC warnings by surrounding corresponding calls with
-	{} if needed.
-	(yyhasResolvedValue): Remove unused function.
-	(yymergeOptionSets, yyresolvStack): Use `continue;' for empty
-	loop body.
-	(yyreportSyntaxError): Renamed from yyreportParseError.
-	(yyrecoverSyntaxError): Renamed from yyrecoverParseError.
-	All uses changed.
-	* tests/calc.at (_AT_DATA_CALC_Y): Make vars static instead of
-	extern when possible.  Remove unused initializations.
-
-2002-11-16  Akim Demaille  <akim@epita.fr>
-
-	Augment the similarity between GLR and LALR traces.
-
-	* data/yacc.c (yy_stack_print, YY_STACK_PRINT, yy_reduce_print)
-	(YY_REDUCE_PRINT): New.
-	(yyparse): Use them.
-	* data/glr.c (yy_reduce_print): Use YYFPRINTF, no need for
-	YYDPRINT here.
-	(yyglrReduce, yyrecoverParseError, yyparse): Don't report the
-	state reached after the reduction/recovery, since...
-	(yyparse, yyprocessOneStack): Report the state we are entering in.
-
-2002-11-16  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.h, src/getargs.c (trace_e, trace_args, trace_types):
-	Add support for --trace=skeleton.
-	* src/scan-skel.l: %option debug.
-	Scan strings of non-@ or \n instead of character by character.
-	(scan_skel): Handle trace_skeleton.
-	(QPUTS): New.
-	(@output_parser_name@, @output_header_name@): ``Restore'' their
-	support (used to be M4 macros).
-	* data/yacc.c: Quote larger chunks, a la glr.c.
-	* data/lalr1.cc: Likewise.
-	The header guards are no longer available, so use some other
-	string than `YYLSP_NEEDED'.
-
-2002-11-16  Akim Demaille  <akim@epita.fr>
-
-	Make the ``Printers and Destructors'' test more verbose, taking
-	`yacc.c''s behavior as (possibly wrong) reference.
-
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Use printf
-	instead of fprint on stdout.
-	Set and report the last_line of the symbols.
-	Consistently display values and locations.
-
-2002-11-16  Paul Eggert  <eggert@twinsun.com>
-
-	* data/yacc.c: Avoid over-quoting of __line__ and __file__.
-
-2002-11-15  Paul Eggert  <eggert@twinsun.com>
-
-	* tests/actions.at (Actions after errors): New test case.
-
-	* data/glr.c, data/lalr1.cc, data/yacc.cc, doc/bison.texinfo,
-	src/conflicts.c, src/parse-gram.y, src/tables.c, src/tables.h,
-	tests/action.at, tests/calc.at, tests/conflicts.at,
-	tests/cxx-type.at, tests/regression.at:
-	"parse error" -> "syntax error" for POSIX compatibility.
-	"parsing stack overflow..." -> "parser stack overflow" so
-	that code matches Bison documentation.
-
-2002-11-15  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y (declaration): Have %parse-param and %lex-param
-	take two BRACED_CODE, not two string_content.
-	Free the scanner's obstack when we are done.
-	(code_content): New.
-	* tests/calc.at: Adjust.
-	* doc/bison.texinfo: Adjust.
-	Also, make sure to include the `,' for these declarations.
-
-2002-11-15  Tim Van Holder  <tim.van.holder@pandora.be>
-
-	* m4/prereq.m4: Removed the commented jm_PREREQ_HASH
-	definition; avoids potential autoreconf problems.
-
-2002-11-15  Akim Demaille  <akim@epita.fr>
-
-	Always check the value returned by yyparse.
-
-	* tests/calc.at (_AT_DATA_CALC_Y): Have `main' exit with the value
-	returned by yyparse.
-	(_AT_CHECK_CALC_ERROR): Take the expected exit value as argument.
-	Adjust calls.
-	* tests/glr-regr1.at (glr-regr1.y): Have `main' exit with the value
-	returned by yyparse.
-
-2002-11-14  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* data/glr.c (yyFail): Always set yyerrflag.  Corrects regression
-	on input.at test.
-
-2002-11-14  Paul Eggert  <eggert@twinsun.com>
-
-	* src/output.c (output_skeleton): Call xfopen instead of
-	duplicating xfopen's body.
-
-	Fix bugs reported by Nelson H. F. Beebe in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00078.html>.
-
-	* tests/headers.at (AT_TEST_CPP_GUARD_H): Don't assume that
-	"$CC -E foo.h" is allowed, as this doesn't work with the Portland
-	Group compiler.  Instead, use "$CC -E bar.c".  Include the .h
-	file twice in the grammar, as an extra check.
-
-	* tests/input.at (Torturing the Scanner): Surround the
-	backslash-newline tests with "#if 0", to make it less likely that
-	we'll run into compiler bugs.  Bring back solitary \ inside
-	comment, but add a closing comment to work around HP C bug.  Don't
-	test backslash-newline in C character constant.
-
-2002-11-14  Akim Demaille  <akim@epita.fr>
-
-	* tests/synclines.at (AT_SYNCLINES_COMPILE): Ignore the exit
-	status of the compiler.
-	Calling `exit 1' is no longer needed.
-	Reported by Nelson H. F. Beebe.
-
-2002-11-14  Akim Demaille  <akim@epita.fr>
-
-	* tests/atlocal.in (CPPFLAGS): We have config.h.
-	* tests/testsuite.at (AT_DATA_GRAMMAR_PROLOGUE, AT_DATA_GRAMMAR):
-	New.
-	* tests/actions.at, tests/calc.at, tests/conflicts.at,
-	* tests/cxx-type.at, tests/glr-regr1.at, tests/headers.at,
-	* tests/regression.at, tests/torture.at: Use them for all the
-	grammars that are to be compiled.
-	* tests/cxx-type.at (_AT_TEST_GLR_CALC): Rename as...
-	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): this.
-	* doc/bison.texinfo (GLR Parsers): Document `inline'.
-
-2002-11-14  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Various formatting changes (alignments in
-	samples, additional @group/@end group, GCS in samples.
-	Use @deffn instead of simple @table to define the directives,
-	macros, variables etc.
-
-2002-11-13  Paul Eggert  <eggert@twinsun.com>
-
-	Fix some bugs reported by Albert Chin-A-Young in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00066.html>.
-
-	* tests/input.at (Torturing the Scanner): Don't invoke "cc a.c b.c
-	-o c"; the HP C compiler chatters during compilation.
-	Instead, invoke "cc -c a.c -o a.o; cc -c b.c -o b.o; cc a.o b.o -o c".
-	* tests/headers.at (export YYLTYPE): Likewise.
-
-	* tests/input.at (Torturing the Scanner): Remove lines containing
-	solitary backslashes, as they tickle a bug in the HP C compiler.
-
-	* tests/glr-regr1.at (Badly Collapsed GLR States): Avoid //
-	comments, since they're not portable.  Use GNU coding style.
-
-2002-11-13  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c: Leave bigger chunks of quoted text.
-	(YYDSYMPRINTF): New.
-	Use it to report symbol activities.
-	* data/glr.c (YYDSYMPRINTF): New.
-	Use it.
-
-2002-11-12  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.75b.
-
-	* data/glr.c (yydoAction): Return YYRESULTTAG, not int.
-	(yyglrReduce): Return yyok, not 0.
-	This should avoid the enumerated-type warnings reported
-	by Nelson H. F. Beebe in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00057.html>.
-
-	* lib/bbitset.h (BITSET_INLINE): Remove.
-	* lib/bitset.h [! BITSET_INLINE]: Remove.
-	(bitset_set, bitset_reset, bitset_test): Rename local vars
-	to avoid shadowing warnings by GCC.
-
-	* data/glr.c (inline): Remove #define.  It's the user's
-	responsibility to #define it away, just like 'const'.
-	This fixes one of the bugs reported by Nelson H. F. Beebe in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00058.html>.
-
-	* Makefile.maint (po-check): Scan .l and .y files instead of the
-	.c and the .h files that they generate.  This fixes the bug
-	reported by Tim Van Holder in:
-	<http://lists.gnu.org/archive/html/bison-patches/2002-11/msg00062.html>
-	Look for N_ as well as for _.  Try to avoid matching #define for
-	N_ and _.
-	* po/POTFILES.in: Remove src/parse-gram.c, src/scan-gram.c,
-	src/system.h.  Add src/parse-gram.y, src/scan-gram.l.
-	* src/scan-gram.l: Revamp regular expressions so that " and '
-	do not confuse xgettext.
-
-	* src/struniq.h (struniq_new): Do not declare the return type
-	to be 'const'; this violates the C standard.
-	* src/struniq.c (struniq_new): Likewise.
-
-2002-11-12  Albert Chin-A-Young <china@thewrittenword.com>
-
-	* src/Makefile.am (LDADD): Link $(LIBINTL) last to avoid the
-	duplicate definition of optind on Tru64 UNIX 4.0D with the Compaq
-	linker.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* Makefile.maint: Sync with Autoconf:
-	(local_updates): New.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* po/POTFILES.in (src/lalr.c, src/state.c): Remove
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Display the
-	locations.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_yysymprint_generate): Pass *yyvaluep to YYPRINT,
-	not yyvalue.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* tests/actions.at (AT_CHECK_PRINTER_AND_DESTRUCTOR): New.
-	Use it to test the GLR parser.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (input.y): s/YYEOF/MYEOF/, as the skeleton
-	defines it.
-	* data/glr.c (yystos): New.
-	(b4_yysymprint_generate, b4_yydestruct_generate): Invoke.
-	(YYDSYMPRINT): New.
-	(yyval): Don't define it, it is handled via M4.
-	(yyrecoverParseError): Free verbosely the discarded symbols.
-	* data/yacc.c (yysymprint): Remove, rather...
-	(b4_yysymprint_generate): invoke.
-	* data/c.m4 (b4_yysymprint_generate): New.
-	Accept pointers as arguments, as opposed to the version from
-	yacc.c.
-	(b4_yydestruct_generate): Likewise.
-	* tests/cations.at (Printers and Destructors): Use Bison directives
-	instead of CPP macros.
-	Don't rely on internal details.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_yydestruct_generate, b4_symbol_actions): New.
-	* data/yacc.c: Rename yychar1 as yytoken, as in glr.c.
-	Don't work on yychar (i.e., do set it to YYEMPTY, don't match
-	it against YYEMPTY and so forth), work on yytoken (i.e., set
-	it to YYEMPTY etc.).
-	(yydestruct): Replace with a b4_yydestruct_generate invocation.
-	(b4_symbol_actions): Remove.
-	* data/glr.c (YYTRANSLATE): As for yacc.c, if negative, it stands
-	for 0, end-of-input.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Destructor Decl): New.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* src/tables.c (tables_generate): Use free for pointers that
-	cannot be NULL, not XFREE.
-	(pack_vector): Use assert, not fatal, for bound violations.
-	* src/state.c (state_new): Likewise.
-	* src/reader.c (reader): Likewise.
-	* src/lalr.c (set_goto_map): Likewise.
-	* src/location.h (LOCATION_PRINT): If first_line is 0, just issue
-	the file name.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l, src/reader.h (scanner_last_string_free):
-	Restore.
-	* src/scan-gram.l (last_string): Is global to the file, not to
-	yylex.
-	* src/parse-gram.y (input): Don't append the epilogue here,
-	(epilogue.opt): do it here, and free the scanner's obstack.
-	* src/reader.c (epilogue_set): Rename as...
-	(epilogue_augment): this.
-	* data/c.m4 (b4_epilogue): Defaults to empty.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.c (long_options): Remove duplicates.
-	* src/vmsgetargs.c, src/build.com, src/bison.cld, src/vmshlp.mar:
-	Remove.
-	* doc/bison.rnh: Remove.
-	* doc/bison.texinfo (VMS Invocation): Remove.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* src/struniq.h, src/struniq.c (struniq_t): Is const.
-	(STRUNIQ_EQ, struniq_assert, struniq_assert_p): New.
-
-	Use struniq for symbols.
-
-	* src/symtab.h (symbol_t): The tag member is a struniq.
-	(symbol_type_set): Adjust.
-	* src/symtab.c (symbol_new): Takes a struniq.
-	(symbol_free): Don't free the tag member.
-	(hash_compare_symbol_t, hash_symbol_t): Rename as...
-	(hash_compare_symbol, hash_symbol): these.
-	Use the fact that tags as struniqs.
-	(symbol_get): Use struniq_new.
-	* src/symlist.h, src/symlist.c (symbol_list_n_type_name_get):
-	Returns a strniq.
-	* src/reader.h (merger_list, grammar_currentmerge_set): The name
-	and type members are struniqs.
-	* src/reader.c (get_merge_function)
-	(grammar_current_rule_merge_set): Adjust.
-	(TYPE, current_type): Are struniq.
-
-	Use struniq for file names.
-
-	* src/files.h, src/files.c (infile): Split into...
-	(grammar_file, current_file): these.
-	* src/scan-gram.c (YY_USER_INIT, handle_syncline): Adjust.
-	* src/reduce.c (reduce_print): Likewise.
-	* src/getargs.c (getargs): Likewise.
-	* src/complain.h, src/complain.c: Likewise.
-	* src/main.c (main): Call struniqs_new early enough to use it for
-	file names.
-	Don't free the input file name.
-
-2002-11-12  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.c (symbol_free): Remove dead deactivated code:
-	type_name are properly removed.
-	Don't use XFREE to free items that cannot be NULL.
-	* src/struniq.h, src/struniq.c: New.
-	* src/main.c (main): Initialize/free struniqs.
-	* src/parse-gram.y (%union): Add astruniq member.
-	(yyprint): Adjust.
-	* src/scan-gram.l (<{tag}>): Return a struniq.
-	Free the obstack bit that used to store it.
-	* src/symtab.h (symbol_t): The 'type_name' member is a struniq.
-
-2002-11-11  Paul Eggert  <eggert@twinsun.com>
-
-	Revamp to fix many (but not all) of the C- and M4-related quoting
-	problems.  Among other things, this fixes the Bison bug reported
-	by Jan Hubicka when processing the Bash grammar; see:
-	<http://lists.gnu.org/archive/html/bison-patches/2002-11/msg00039.html>
-
-	Use new @ escapes consistently.  Represent brackets with @{ and @}
-	rather than @<:@ and @:>@, since this works a bit better with dumb
-	editors like vi.  Represent @ with @@, since @ is now consistently
-	an escape.  Use @oline@ and @ofile@ rather than __oline__ and
-	__ofile__, to avoid unexpected expansions.  Similarly, use @output
-	rather than #output.
-
-	* data/c.m4 (b4_copyright): Omit file name from comment, since
-	the file name could contain "*/".
-	(b4_synclines_flag): Don't quote the 2nd argument; it should already
-	be quoted.  All uses changed.
-
-	* data/glr.c: Use new @ escapes consistently.
-	(b4_input_suffix, b4_output_parser_suffix, b4_output_parser_name,
-	b4_output_header_suffix, b4_output_header_name, b4_header_guard):
-	Remove, since they couldn't handle arbitrary characters in file
-	names.
-	* data/lalr1.cc: Likewise.
-	* data/yacc.c: Likewise.
-
-	* src/files.c (output_infix): Remove; all uses removed.
-	* src/files.h: Likewise.
-
-	* data/glr.c: Remove use of "#ifdef b4_header_guard", since it
-	mishandled funny characters in file names, and anyway it isn't
-	needed any more.
-	* data/yacc.c: Likewise.
-	* data/lalr1.cc: Use YYSLP_NEEDED instead of b4_header_guard.
-
-	* data/glr.c (YYSTYPE_IS_TRIVIAL): Define when the .h file would.
-	* data/yacc.c: Likewise.
-
-	* src/muscle_tab.c: Include quotearg.h, since we need to quote C
-	strings now.
-	(muscle_init): Quote filename as a C string.
-	* src/muscle_tab.h (MUSCLE_GROW_STRING_PAIR): Remove; unused.
-	(MUSCLE_OBSTACK_SGROW, MUSCLE_INSERT_C_STRING): New macros.
-	* src/output.c (escaped_file_name_output): New function.
-	(prepare_symbols): Quote tokens for M4.
-	(prepare): Don't insert output_infix, output_prefix,
-	output_parser_name, output_header_name; this is now down by scan-skel.
-	Insert skeleton as a C string.
-
-	* src/output.c (user_actions_output, symbol_destructors_output,
-	symbol_printers_output): Quote filenames for C and M4.
-	* src/reader.c (prologue_augment, epilogue_set): Likewise.
-
-	* src/scan-gram.l (<SC_CHARACTER>): Don't worry about any backslash
-	escapes other than \\ and \'; this simplifies the code.
-	(<SC_STRING>): Likewise, for \\ and \".
-	(<SC_COMMENT,SC_LINE_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,
-	SC_PROLOGUE,SC_EPILOGUE>): Escape $ and @, too.
-	Use new escapes @{ and @} for [ and ].
-
-	* src/scan-skel.l (yylineno, yyoutname): Remove static vars, replacing
-	them with auto vars.
-	Switch to new escape scheme, where @ is the escape character uniformly.
-	Abort if a stray escape character is found.  Avoid unbounded input
-	buffer when parsing non-escaped text.
-
-	* tests/input.at (Torturing the Scanner): Add tests that @oline@,
-	__oline__, #output, $@, and @{ do not have unintended meanings.
-
-2002-11-09  Paul Eggert  <eggert@twinsun.com>
-
-	Fix the test failure due to GCC warnings described in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00000.html>.
-	* data/glr.c (yyis_pact_ninf, yyis_table_ninf): New macros, which
-	evaluate to 0 if it's impossible for NINF to be in the respective
-	table.
-	(yygetLRActions, yyrecoverParseError): Use them.
-
-	* src/scan-gram.l (unexpected_end_of_file): Fix bug: columns were
-	counted in the token inserted at end of file.  Now takes
-	location_t *, not location_t, so that the location can be
-	adjusted.  All uses changed.
-
-	* tests/regression.at (Invalid inputs): Adjust wording in
-	diagnostic to match the new behavior.
-
-	* tests/torture.at (AT_DATA_TRIANGULAR_GRAMMAR,
-	AT_DATA_HORIZONTAL_GRAMMAR, AT_DATA_LOOKAHEADS_GRAMMAR,
-	AT_DATA_STACK_TORTURE): Replace `assert (x);' with `if (! (x))
-	abort ();'.  This reduces the runtime of the "Many lookaheads"
-	test from 27.6 to 2.7 minutes on a 440 MHz Ultrasparc III running
-	GCC 3.2.
-
-2002-11-07  Paul Eggert  <eggert@twinsun.com>
-
-	* src/parse-gram.y (CHARACTER): Remove unused token.
-	All uses removed.
-
-	* src/scan-gram.l: Remove stack option.  We no longer use the
-	stack, since the stack was never deeper than 1; instead, use the
-	new auto var c_context to record the stacked value.
-
-	Remove nounput option.  At an unexpected end of file, we now unput
-	the minimal input necessary to end cleanly; this simplifies the
-	code.
-
-	Avoid unbounded token sizes where this is easy.
-
-	(unexpected_end_of_file): New function.
-	Use it to systematize the error message on unexpected EOF.
-	(last-string): Now auto, not static.
-	(YY_OBS_FREE): Remove unnecessary do while (0) wrapper.
-	(scanner_last_string_free): Remove; not used.
-	(percent_percent_count): Move decl to just before use.
-	(SC_ESCAPED_CHARACTER): Return ID at unexpected end of file,
-	not the (never otherwised-used) CHARACTER.
-
-2002-11-07  Akim Demaille  <akim@epita.fr>
-
-	Let yyerror always receive the msg as last argument, so that
-	yyerror can be variadic.
-
-	* data/yacc.c (b4_yyerror_args): New.
-	Use it when calling yyerror.
-	* data/glr.c (b4_yyerror_args, b4_lyyerror_args): New.
-	Use it when calling yyerror.
-	* doc/bison.texinfo (Error Reporting): Adjust.
-	* tests/calc.at (_AT_DATA_CALC_Y): Adjust.
-	* tests/cxx-type.at (_AT_TEST_GLR_CALC): Adjust.
-
-2002-11-06  Akim Demaille  <akim@epita.fr>
-
-	#line should have quoted strings.
-	Ideally, this should be done by m4_quotearg.
-
-	* src/scan-skel.l: Include quotearg.h.
-	Quote __ofile__.
-	* src/output.c (symbol_printers_output)
-	(symbol_destructors_output): Quote the file name.
-
-2002-11-06  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (Invalid inputs): Adjust to the recent
-	messages.
-
-2002-11-06  Akim Demaille  <akim@epita.fr>
-
-	Restore --no-lines.
-	Reported by Jim Kent.
-
-	* data/c.m4 (b4_syncline): New.
-	* data/glr.c, data/yacc.c, data/lalr1.cc: Use it.
-	* src/reader.c (prologue_augment, epilogue_set): Use b4_syncline.
-	* src/output.c (user_actions_output): Likewise.
-	(prepare): Define 'b4_synclines_flag'.
-	* src/muscle_tab.c (muscle_init): Don't define b4_linef.
-
-2002-11-06  Akim Demaille  <akim@epita.fr>
-
-	* src/main.c (main): Free `infile'.
-	* src/scan-gram.l (handle_syncline): New.
-	Recognize `#line'.
-	* src/output.c (user_actions_output, symbol_destructors_output)
-	(symbol_printers_output): Use the location's file name, not
-	infile.
-	* src/reader.c (prologue_augment, epilogue_set): Likewise.
-
-2002-11-05  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* src/tables.c (matching_state): Don't allow states to match if
-	either has GLR conflict entries.
-
-2002-11-05  Paul Eggert  <eggert@twinsun.com>
-
-	* src/scan-gram.l: Use more accurate diagnostics, e.g.
-	"integer out of range" rather than "invalid value".
-	* tests/input.at (Invalid $n, Invalid @n): Change expected wording
-	accordingly.
-
-	Scan <% and %> digraphs in C code as POSIX 1003.1-2001 requires.
-	Also, remove one static variable in the scanner.
-
-	* src/scan-gram.l (braces_level): Now auto, not static.
-	Initialize to zero if the compiler is being picky.
-	(INITIAL): Clear braces_level instead of incrementing it.
-	(SC_BRACED_CODE): Treat <% and %> as { and } when inside C code,
-	as POSIX 1003.1-2001 requires.
-	* src/system.h (IF_LINT): New macro, taken from coreutils.
-	* configure.ac: Define "lint" if --enable-gcc-warnings.
-
-2002-11-05  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l: When it starts with `%', complain about the
-	whole directive, not just that `invalid character: %'.
-
-2002-11-04  Akim Demaille  <akim@epita.fr>
-
-	* Makefile.maint: Update from Autoconf.
-	(update, cvs-update, po-update, do-po-update): New.
-
-2002-11-04  Akim Demaille  <akim@epita.fr>
-
-	* tests/glr-regr1.at (Badly Collapsed GLR States): Prototype yylex
-	and yyerror.
-	Have yyerror `use' its arguments.
-	* tests/calc.at (AT_CHECK_PUSHDEFS): AT_YYERROR_SEES_LOC_IF
-	returns true when location & yacc & pure & parse-param.
-	(_AT_DATA_CALC_Y): Let yyerror ``use'' its arguments.
-
-2002-11-04  Akim Demaille  <akim@epita.fr>
-
-	* src/location.h (LOCATION_PRINT): Use quotearg slot 3 to avoid
-	clashes.
-	* src/scan-gram.l: Use [\'] instead of ['] to pacify
-	font-lock-mode.
-	Use complain_at.
-	Use quote, not quote_n since LOCATION_PRINT no longer uses the
-	slot 0.
-
-2002-11-03  Paul Eggert  <eggert@twinsun.com>
-
-	* src/reader.c (get_merge_function, grammar_current_rule_check):
-	Use consistent diagnostics for reporting type name clashes.
-	Quote the types with <>, for consistency with Yacc.
-	* tests/input.at (Type Clashes): Adjust to diagnostic changes.
-
-2002-11-03  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_identification, b4_user_args, b4_parse_param):
-	New.
-	* data/yacc.m4 (b4_pure_args, b4_Pure_args): New.
-	(b4_parse_param): Remove.
-	Use b4_identification.
-	Propagate b4_pure_args where needed to pass them to yyerror.
-	* data/glr.m4 (b4_parse_param): Remove.
-	(b4_user_formals, b4_pure_args, b4_pure_formals, b4_lpure_args)
-	(b4_lpure_formals): New.
-	Use b4_identification.
-	(YY_USER_FORMALS, YY_USER_ARGS): Remove, replaced by
-	b4_user_formals and b4_user_args.
-	(yyexpandGLRStack, yyFail, yyaddDeferredAction, yyglrShiftDefer)
-	(yyreportAmbiguity): When using a pure parser, also need
-	the location, and the parse-params.
-	Adjust callers.
-	(yyuserAction, yyglrShift, yyreportParseError, yyrecoverParseError):
-	When using a pure parser, also need the parse-params.
-	Adjust callers.
-	* tests/calc.at: Test pure (%pure-parser) and absolutely pure
-	(%pure-parser + %parse-param) LALR and GLR parsers.
-	(AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): New, define AT_PARAM_IF,
-	AT_LOCATION_IF, AT_PURE_IF, AT_GLR_IF, AAT_PURE_AND_LOC_IF,
-	AT_GLR_OR_PARAM_IF, AT_YYERROR_ARG_LOC_IF, AT_YYERROR_SEES_LOC_IF.
-	(_AT_DATA_CALC_Y): Equip for purity of yyerror.
-	(_AT_CHECK_CALC_ERROR): Use AT_YYERROR_SEES_LOC_IF.
-	* tests/cxx-type.at (_AT_TEST_GLR_CALC): Equip for yyerror purity.
-	* doc/bison.texinfo: Untabify the whole file.
-	(Parser Function): Document %parse-param, deprecate YYPARSE_PARAM.
-	(Pure Calling): Document %lex-param, deprecate YYLEX_PARAM.
-	(Error Reporting): Adjust to these new directives.
-	Document %error-verbose, deprecate YYERROR_VERBOSE.
-
-2002-11-03  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at: Change all the AT_CHECK_CALC_LALR and
-	AT_CHECK_CALC_GLR invocations to use % directives, instead of
-	command line options.
-	* tests/cxx-type.at: Formatting changes.
-
-2002-11-03  Paul Eggert  <eggert@twinsun.com>
-
-	* src/scan-gram.l: Revamp to fix POSIX incompatibilities,
-	to count columns correctly, and to check for invalid inputs.
-
-	Use mbsnwidth to count columns correctly.  Account for tabs, too.
-	Include mbswidth.h.
-	(YY_USER_ACTION): Invoke extend_location rather than LOCATION_COLUMNS.
-	(extend_location): New function.
-	(YY_LINES): Remove.
-
-	Handle CRLF in C code rather than in Lex code.
-	(YY_INPUT): New macro.
-	(no_cr_read): New function.
-
-	Scan UCNs, even though we don't fully handle them yet.
-	(convert_ucn_to_byte): New function.
-
-	Handle backslash-newline correctly in C code.
-	(SC_LINE_COMMENT, SC_YACC_COMMENT): New states.
-	(eols, blanks): Remove.  YY_USER_ACTION now counts newlines etc.;
-	all uses changed.
-	(tag, splice): New EREs.  Do not allow NUL or newline in tags.
-	Use {splice} wherever C allows backslash-newline.
-	YY_STEP after space, newline, vertical-tab.
-	("/*"): BEGIN SC_YACC_COMMENT, not yy_push_state (SC_COMMENT).
-
-	(letter, id): Don't assume ASCII; e.g., spell out a-z.
-
-	({int}, handle_action_dollar, handle_action_at): Check for integer
-	overflow.
-
-	(YY_STEP): Omit trailing semicolon, so that it's more like C.
-
-	(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>): Allow \0 and \00
-	as well as \000.  Check for UCHAR_MAX, not 255.
-	Allow \x with an arbitrary positive number of digits, as in C.
-	Check for overflow here.
-	Allow \? and UCNs, for compatibility with C.
-
-	(handle_symbol_code_dollar): Use quote_n slot 1 to avoid collision
-	with quote slot used by complain_at.
-
-	* tests/input.at: Add tests for backslash-newline, m4 quotes
-	in symbols, long literals, and funny escapes in strings.
-
-	* configure.ac (jm_PREREQ_MBSWIDTH): Add.
-	* lib/Makefile.am (libbison_a_SOURCES): Add mbswidth.h, mbswidth.c.
-	* lib/mbswidth.h, lib/mbswidth.c: New files, from GNU gettext.
-	* m4/Makefile.am (EXTRA_DIST): Add mbswidth.m4.
-	* m4/mbswidth.m4: New file, from GNU coreutils.
-
-	* doc/bison.texinfo (Grammar Outline): Document // comments.
-	(Symbols): Document that trigraphs have no special meaning in Bison,
-	nor is backslash-newline allowed.
-	(Actions): Document that trigraphs have no special meaning.
-
-	* src/location.h (LOCATION_COLUMNS, LOCATION_LINES): Remove;
-	no longer used.
-
-2002-11-02  Paul Eggert  <eggert@twinsun.com>
-
-	* src/reader.c: Don't include quote.h; not needed.
-	(get_merge_function): Reword warning to be consistent with
-	type clash diagnostic in grammar_current_rule_check.
-
-	* lib/quotearg.c (quotearg_buffer_restyled): Fix off-by-two
-	bug in trigraph handling.
-
-	* src/output.c (prepare_symbols): When printing token names,
-	escape "[" as "@<:@" and likewise for "]".
-
-	* src/system.h (errno): Remove declaration, as we are now
-	assuming C89 or better, and C89 guarantees errno.
-
-2002-10-30  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/bitset_stats.c (bitset_stats_read, bitset_stats_write):
-	Check for close failures.
-	* src/files.h (xfclose): Return void, not int, since it always
-	returned zero.
-	* src/files.c (xfclose): Likewise.  Report I/O error if ferror
-	indicates one.
-	* src/output.c (output_skeleton): Use xfclose rather than fclose
-	and ferror.  xfclose now checks ferror.
-
-	* data/glr.c (YYLEFTMOST_STATE): Remove.
-	(yyreportTree): Use a stack-based leftmost state.  This avoids
-	our continuing battles with bogus warnings about initializers.
-
-2002-10-30  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h: Don't use #ifdef/#ifndef on HAVE_ values, only
-	#if.
-
-2002-10-29  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* tests/glr-regr1.at: New test for reported regressions.
-	* tests/testsuite.at: Add glr-regr1.at test.
-	* tests/Makefile.am: Add glr-regr1.at test.
-
-2002-10-24  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.75a.
-
-	* tests/calc.at (_AT_DATA_CALC_Y): Remove unused strcat declaration.
-	* tests/cxx-type.at (_AT_TEST_GLR_CALC): Include stdlib.h, since
-	we use malloc.  Don't assume 'A' through 'Z' are contiguous.
-	Don't assume strdup exists; POSIX says its an XSI extension.
-	Check for buffer overflow on input.
-
-2002-10-24  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_skeleton): Don't disable M4sugar comments
-	too soon: it results in comments being expanded.
-	* data/yacc.c, data/glr.c, data/lalr1.cc: Do it right before the
-	first output.
-
-2002-10-24  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c (m4_int_type): New.
-	* data/c.m4 (m4_int_type): Don't use yysigned_char, but `signed
-	char' as only yacc.c wants K&R portability.
-	* data/glr.c (yysigned_char): Remove.
-	* data/lalr1.cc: Rename the trailing b4_name as b4_parser_class_name.
-	Reported by Quoc Peyrot.
-
-2002-10-23  Paul Eggert  <eggert@twinsun.com>
-
-	* src/main.c (main): With --trace=time, report times even if a
-	non-fatal error occurs.  Formerly, the times were reported in some
-	such cases but not in others.
-	* src/reader.c (reader): Just return if a complaint has been issued,
-	instead of exiting, so that 'main' can report times.
-
-2002-10-22  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h: Include sys/types.
-	Reported by Bert Deknuydt.
-
-2002-10-23  Paul Eggert  <eggert@twinsun.com>
-
-	* configure.ac (AC_PROG_LEX): Use instead of AM_PROG_LEX.
-	Suggested by Art Haas.
-
-2002-10-22  Paul Eggert  <eggert@twinsun.com>
-
-	* src/complain.c (exit) [! (STDC_HEADERS || _LIBC)]: Remove exit
-	decl; not needed any more.
-	* src/main.c (main): Use return to exit, undoing yesterday's change.
-	The last OS that we could find where this wouldn't work is
-	SunOS 3.5, and that's too old to worry about now.
-
-	* data/glr.c (struct yyltype): Define members even when not
-	doing locations.  This is more consistent with yacc.c, and it
-	works around the following bug reports:
-	http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00106.html
-	http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00111.html
-
-	* doc/bison.texinfo: Minor spelling and typographical fixes.  Use
-	@acronym consistently.  Standardize on "Yacc" instead of "YACC",
-	"Algol" instead of "ALGOL".  Give a bit more history about BNF.
-
-2002-10-22  Akim Demaille  <akim@epita.fr>
-
-	* data/README: New.
-
-2002-10-21  Paul Eggert  <eggert@twinsun.com>
-
-	Be consistent about 'bool'; the old code used an enum in one
-	module and an int in another, and this violates the C standard.
-	* m4/stdbool.m4: New file, from coreutils 4.5.3.
-	* configure.ac (AC_HEADER_STDBOOL): Add.
-	* m4/Makefile.am (EXTRA_DIST): Add stdbool.m4.
-	* src/muscle_tab.c (hash_compare_muscles): (a ? FALSE : TRUE) -> (! a)
-	* src/symtab.c (hash_compare_symbol_t): Likewise.
-	* src/system.h (bool, false, true): Use a definition consistent
-	with ../lib/hash.c.  All uses changed.
-
-	* src/complain.c (warning_issued): Renamed from warn_message_count,
-	so that we needn't worry about integer overflow (!).
-	Now of type bool.  All uses changed.
-	(complaint_issued): Renamed from complain_message_count; likewise.
-
-	* src/main.c (main): Use exit to exit with failure.
-
-	* src/complain.c (fatal_at, fatal): Use EXIT_FAILURE and EXIT_SUCCESS
-	rather than 1 and 0.
-	* src/main.c (main): Likewise.
-	* src/getargs.c (getargs): Likewise.
-	* src/reader.c (reader): Likewise.
-
-	* src/getarg.c (getargs): Remove duplicate code for
-	"Try `bison --help'".
-
-	* src/files.c (xfopen, xfclose): Use EXIT_FAILURE rather than 2.
-	What was that "2" for?
-
-	* src/complain.h (fatal, fatal_at): Add __attribute__((__noreturn__)).
-	* src/getargs.c (usage): Likewise.
-
-	* src/getargs.c (getargs): When there are too few operands, report
-	the last one.  When there are too many, report the first extra
-	one.  This is how diffutils does it.
-
-2002-10-20  Paul Eggert  <eggert@twinsun.com>
-
-	Remove K&R vestiges.
-	* configure.ac (AC_C_CONST, AM_C_PROTOTYPES): Remove.
-	* src/complain.c (VA_START): Remove.  Assume prototypes.
-	(vfprintf) [! (HAVE_VPRINTF || defined vfprintf)]: New macro.
-	(private_strerror, warn_at, warn, complain_at, complain, fatal_at,
-	fatal): Assume prototypes.
-	* src/complain.h: Assume prototypes.
-	* src/system.h (PARAMS): Remove.
-	Include <limits.h> unconditionally, since it's guaranteeed even
-	for a freestanding C89 compiler.
-	(SHRT_MIN, SHRT_MAX): Remove, since C89 guarantees them.
-	* src/vmsgetargs.c (getargs, cli_present, cli_get_value): Prototype.
-
-2002-10-20  Akim Demaille  <akim@epita.fr>
-
-	* src/muscle_tab.c (muscle_grow): Remove trailing debugging code.
-	* data/glr.c (YY_USER_FORMALS, YY_USER_ARGS): New.
-	(yyuserAction, yydoAction, yyglrReduce, yyresolveValue)
-	(yyresolveStates, yyresolveAction, yyresolveStack)
-	(yyprocessOneStack): Use them.
-	(yy_reduce_print): New.
-	* tests/calc.at (_AT_DATA_CALC_Y): Exercise %parse-param.
-
-2002-10-20  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_c_ansi_args): Recognize functions with no
-	arguments and output `void'.
-	(b4_c_function): Rename as...
-	(b4_c_function_def): this.
-	(b4_c_function_decl, b4_c_ansi_function_def)
-	(b4_c_ansi_function_decl): New.
-	Change the interpretation of the arguments: before `int, foo', now
-	`int foo, foo'.
-	* data/yacc.c (yyparse): Prototype and define thanks to these.
-	Adjust b4_c_function_def uses.
-	* data/glr.c (yyparse): Likewise, but ANSI only.
-
-2002-10-20  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (prepare): Move the definition of `tokens_number',
-	`nterms_number', `undef_token_number', `user_token_number_max'
-	to...
-	(prepare_tokens): Here.
-	(prepare_tokens): Rename as...
-	(prepare_symbols): this.
-	(prepare): Move the definition of `rules_number' to...
-	(prepare_rules): here.
-	(prepare): Move the definition of `last', `final_state_number',
-	`states_number' to...
-	(prepare_states): here.
-	* data/yacc.c, data/lalr1.cc, data/glr.c: Normalize `>' into `<'.
-
-2002-10-20  Akim Demaille  <akim@epita.fr>
-
-	* src/tables.h, src/tables.c, src/output.c: Comment changes.
-
-2002-10-20  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c, data/yacc.c (b4_location_if, b4_pure_if): Move to...
-	* data/c.m4: here.
-
-2002-10-20  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (prepare): Use MUSCLE_INSERT_STRING.
-	* src/muscle_tab.c (muscle_pair_list_grow): Rename `val as
-	`pair'.
-	(muscle_init): Move the `b4_ltype', `b4_maxdepth', `b4_initdepth',
-	`name' to...
-	* data/glr.c, data/lalr1.cc, data/yacc.c (b4_location_type)
-	(b4_stack_depth_init, b4_stack_depth_max, b4_parser_class_name):
-	These.
-
-2002-10-19  Paul Eggert  <eggert@twinsun.com>
-
-	Do not create a temporary file, as that involves security and
-	cleanup headaches.  Instead, use a pair of pipes.
-	Derived from a suggestion by Florian Krohm.
-	* lib/subpipe.c, lib/subpipe.h, m4/subpipe.m4: New files.
-	* lib/mkstemp.c, lib/readpipe.c, lib/tempname.c, m4/mkstemp.m4: Remove.
-	* configure.ac (UTILS_FUNC_MKSTEMP, jm_PREREQ_TEMPNAME): Remove.
-	(BISON_PREREQ_SUBPIPE): Add.
-	* lib/Makefile.am (libbison_a_SOURCES): Remove readpipe.c.
-	Add subpipe.h, subpipe.c.
-	* m4/Makefile.am (EXTRA_DIST): Remove mkstemp.m4.  Add subpipe.m4.
-	* po/POTFILES.in: Add lib/subpipe.c.
-	* src/output.c: Include "subpipe.h".
-	(m4_invoke): Remove decl.
-	(scan_skel): New decl.
-	(output_skeleton): Use pipe rather than temporary file for m4 input.
-	Check that m4sugar.m4 is readable, to avoid deadlock.
-	Check for pipe I/O error.
-	* src/scan-skel.l (readpipe): Remove decl.
-	(scan_skel): New function, to be used in place of m4_invoke.
-	Read from stream rather than file.
-
-	* lib/timevar.c (TICKS_TO_MSEC, CLOCKS_TO_MSEC): Do not cast to
-	float, as this generates a warning on Solaris 8 + GCC 3.2 with
-	--enable-gcc-warnings.  Instead, divide into 1.0 rather than 1;
-	this generates a more-accurate value anyway.
-
-	* lib/timevar.c (timervar_accumulate): Rename locals to
-	avoid confusion with similarly-named more-global.
-	* src/muscle_tab.c (muscle_pair_list_grow): Likewise.
-
-	* src/output.c (prepare): Use xstrdup to convert char const *
-	to char *, to avoid GCC warning.
-
-2002-10-19  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at (_AT_DATA_CALC_Y): Define VAL, LOC, LEX_FORMALS,
-	LEX_PRE_FORMALS, LEX_ARGS, LEX_PRE_ARGS, USE_LEX_ARGS.
-	Use them to have `calc.y' ready for %pure-parser.
-	* data/yacc.c (YYLEX): Pass a yylex return type to
-	b4_c_function_call.
-
-2002-10-19  Akim Demaille  <akim@epita.fr>
-
-	Prototype support of %lex-param and %parse-param.
-
-	* src/parse-gram.y: Add the definition of the %lex-param and
-	%parse-param tokens, plus their rules.
-	Drop the `_' version of %glr-parser.
-	Add the "," token.
-	* src/scan-gram.l (INITIAL): Scan them.
-	* src/muscle_tab.c: Comment changes.
-	(muscle_insert, muscle_find): Rename `pair' as `probe'.
-	* src/muscle_tab.h (MUSCLE_INSERT_PREFIX): Remove unused.
-	(muscle_entry_s): The `value' member is no longer const.
-	Adjust all dependencies.
-	* src/muscle_tab.c (muscle_init): Adjust: use
-	MUSCLE_INSERT_STRING.
-	Initialize the obstack earlier.
-	* src/muscle_tab.h, src/muscle_tab.c (muscle_grow)
-	(muscle_pair_list_grow): New.
-	* data/c.m4 (b4_c_function_call, b4_c_args): New.
-	* data/yacc.c (YYLEX): Use b4_c_function_call to honor %lex-param.
-	* tests/calc.at: Use %locations, not --locations.
-	(AT_CHECK_CALC_GLR): Use %glr-parser, not %glr_parser.
-
-2002-10-19  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.c (usage): Take status as argument and exit
-	accordingly.
-	Report the traditional `Try ... --help' message when status != 0.
-	(usage, version): Don't take a FILE * as arg, it is pointless.
-	(getargs): When there is an incorrect number of arguments, make it
-	an error, and report it GNUlically thanks to `usage ()'.
-
-2002-10-18  Paul Eggert  <eggert@twinsun.com>
-
-	* data/glr.c (yyreportParseError): Don't assume that sprintf
-	yields the length of the printed string, as this is not true
-	on SunOS 4.1.4.  Reported by Peter Klein.
-
-	* tests/calc.at (_AT_DATA_CALC_Y): #undef memcmp and realloc.
-	* tests/conflicts.at (%nonassoc and eof): Likewise.
-	Fixes SunOS 4.1.4 test failure reported by Peter Klein.
-
-2002-10-17  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.h (trace_e): Add trace_scan, and trace_parse.
-	* src/getargs.c (trace_types, trace_args): Adjust.
-	* src/reader.c (grammar_current_rule_prec_set)
-	(grammar_current_rule_dprec_set, grammar_current_rule_merge_set):
-	Standardize error messages.
-	And s/@prec/%prec/!
-	(reader): Use trace_flag to enable scanner/parser debugging,
-	instead of an adhoc scheme.
-	* src/scan-gram.l: Remove trailing debugging code.
-
-2002-10-16  Paul Eggert  <eggert@twinsun.com>
-
-	* src/muscle_tab.h (MUSCLE_TAB_H_): Was misspelled as
-	MUSCLE_TAB_H.
-
-	* NEWS: Officially drop support for building Bison with K&R C,
-	since it didn't work anyway and it's not worth worrying about.
-	* Makefile.maint (wget_files): Remove ansi2knr.c.
-	(ansi2knr.c-url_prefix): Remove.
-	* lib/.cvsignore: Remove ansi2knr, ansi2knr.*.
-	* lib/Makefile.am (AUTOMAKE_OPTIONS): Remove.
-	* src/Makefile.am (AUTOMAKE_OPTIONS): Remove.
-
-2002-10-15  Paul Eggert  <eggert@twinsun.com>
-
-	Stop using the "enum_" trick for K&R-style function definitions;
-	it confused me, and I was the author!  Instead, assume that people
-	who want to use K&R C compilers (when using these modules in GCC,
-	perhaps?) will run ansi2knr.
-
-	* lib/bbitset.h: (enum_bitset_ops, enum_bitset_type): Remove.
-	All uses of "enum_" changed to "enum ".
-	* lib/ebitset.c (enum_ebitset_find_mode): Likewise.
-	* lib/lbitset.c (enum_lbitset_find_mode): Likewise.
-
-	* lib/abitset.c (abitset_and, abitset_and_cmp, abitset_and_or,
-	abitset_and_or_cmp, abitset_andn, abitset_andn_cmp,
-	abitset_andn_or, abitset_andn_or_cmp, abitset_bytes, abitset_copy,
-	abitset_copy1, abitset_disjoint_p, abitset_empty_p,
-	abitset_equal_p, abitset_init, abitset_list, abitset_list_reverse,
-	abitset_not, abitset_ones, abitset_or, abitset_or_and,
-	abitset_or_and_cmp, abitset_or_cmp, abitset_reset, abitset_set,
-	abitset_size, abitset_small_list, abitset_subset_p, abitset_test,
-	abitset_unused_clear, abitset_xor, abitset_xor_cmp, abitset_zero):
-	Use function prototypes; this removes the need for declaring
-	static functions simply to provide their prototypes.
-	* lib/bitset.c (bitset_alloc, bitset_and_or_, bitset_and_or_cmp_,
-	bitset_andn_or_, bitset_andn_or_cmp_, bitset_bytes, bitset_copy_,
-	bitset_count_, bitset_create, bitset_dump, bitset_first,
-	bitset_free, bitset_init, bitset_last, bitset_next,
-	bitset_obstack_alloc, bitset_obstack_free, bitset_only_set_p,
-	bitset_op4_cmp, bitset_or_and_, bitset_or_and_cmp_, bitset_prev,
-	bitset_print, bitset_release_memory, bitset_toggle_,
-	bitset_type_choose, bitset_type_get, bitset_type_name_get,
-	debug_bitset): Likewise.
-	* lib/bitset.h (bitset_set, bitset_reset, bitset_test): Likewise.
-	* lib/bitset_stats.c (bitset_log_histogram_print,
-	bitset_percent_histogram_print, bitset_stats_and,
-	bitset_stats_and_cmp, bitset_stats_and_or,
-	bitset_stats_and_or_cmp, bitset_stats_andn, bitset_stats_andn_cmp,
-	bitset_stats_andn_or, bitset_stats_andn_or_cmp, bitset_stats_copy,
-	bitset_stats_count, bitset_stats_disable, bitset_stats_disjoint_p,
-	bitset_stats_dump, bitset_stats_empty_p, bitset_stats_enable,
-	bitset_stats_equal_p, bitset_stats_free, bitset_stats_init,
-	bitset_stats_list, bitset_stats_list_reverse, bitset_stats_not,
-	bitset_stats_ones, bitset_stats_or, bitset_stats_or_and,
-	bitset_stats_or_and_cmp, bitset_stats_or_cmp, bitset_stats_print,
-	bitset_stats_print_1, bitset_stats_read, bitset_stats_reset,
-	bitset_stats_set, bitset_stats_size, bitset_stats_subset_p,
-	bitset_stats_test, bitset_stats_toggle, bitset_stats_type_get,
-	bitset_stats_write, bitset_stats_xor, bitset_stats_xor_cmp,
-	bitset_stats_zero): Likewise.
-	* lib/bitsetv.c (bitsetv_alloc, bitsetv_create, bitsetv_free,
-	bitsetv_zero, bitsetv_ones, bitsetv_transitive_closure,
-	bitsetv_dump, debug_bitsetv): Likewise.
-	* lib/ebitset.c (ebitset_and, ebitset_and_cmp, ebitset_andn,
-	ebitset_andn_cmp, ebitset_bytes, ebitset_copy, ebitset_copy_,
-	ebitset_copy_cmp, ebitset_disjoint_p, ebitset_elt_add,
-	ebitset_elt_alloc, ebitset_elt_calloc, ebitset_elt_find,
-	ebitset_elt_free, ebitset_elt_last, ebitset_elt_remove,
-	ebitset_elt_zero_p, ebitset_elts_grow, ebitset_empty_p,
-	ebitset_equal_p, ebitset_free, ebitset_init, ebitset_list,
-	ebitset_list_reverse, ebitset_not, ebitset_ones, ebitset_op3_cmp,
-	ebitset_or, ebitset_or_cmp, ebitset_release_memory, ebitset_reset,
-	ebitset_set, ebitset_size, ebitset_subset_p, ebitset_test,
-	ebitset_weed, ebitset_xor, ebitset_xor_cmp, ebitset_zero):
-	Likewise.
-	* lib/lbitset.c (debug_lbitset, lbitset_and, lbitset_and_cmp,
-	lbitset_andn, lbitset_andn_cmp, lbitset_bytes, lbitset_copy,
-	lbitset_copy_cmp, lbitset_disjoint_p, lbitset_elt_alloc,
-	lbitset_elt_calloc, lbitset_elt_find, lbitset_elt_free,
-	lbitset_elt_link, lbitset_elt_unlink, lbitset_elt_zero_p,
-	lbitset_empty_p, lbitset_equal_p, lbitset_free, lbitset_init,
-	lbitset_list, lbitset_list_reverse, lbitset_not, lbitset_ones,
-	lbitset_op3_cmp, lbitset_or, lbitset_or_cmp, lbitset_prune,
-	lbitset_release_memory, lbitset_reset, lbitset_set, lbitset_size,
-	lbitset_subset_p, lbitset_test, lbitset_weed, lbitset_xor,
-	lbitset_xor_cmp, lbitset_zero): Likewise.
-
-2002-10-14  Akim Demaille  <akim@epita.fr>
-
-	Version 1.75.
-
-2002-10-14  Akim Demaille  <akim@epita.fr>
-
-	* tests/Makefile.am (maintainer-check-posix): New.
-
-2002-10-14  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c [YYDEBUG] (YYLEFTMOST_STATE): Initialize the yyloc
-	member.
-
-2002-10-14  Akim Demaille  <akim@epita.fr>
-
-	* src/tables.c (table_ninf_remap): base -> tab.
-	Reported by Matt Rosing.
-
-2002-10-14  Paul Eggert  <eggert@twinsun.com>
-
-	* tests/action.at, tests/calc.at, tests/conflicts.at,
-	tests/cxx-type.at, tests/headers.at, tests/input.at,
-	tests/regression.at, tests/synclines.at, tests/torture.at:
-	Say "bison -o foo.c foo.y", not "bison foo.y -o foo.c",
-	so that the tests still work even if POSIXLY_CORRECT is set.
-	* doc/bison.texinfo (Rpcalc Compile, Invocation): Likewise.
-
-	* data/c.m4 (b4_int_type): Use yysigned_char instead of signed char,
-	for portability to K&R hosts.  Fix typo: signed char is guaranteed
-	only to 127, not to 128.
-	* data/glr.c (yysigned_char): New type.
-	* data/yacc.c (yysigned_char): Likewise.
-	* tests/regression.at (Web2c Actions): signed char -> yysigned_char.
-
-2002-10-13  Paul Eggert  <eggert@twinsun.com>
-
-	* data/yacc.c (yyparse): Rewrite to avoid "comparison is always
-	true due to limited range of data type" warning from GCC.
-
-	* data/c.m4 (b4_token_defines): Protect against double-inclusion
-	by wrapping enum yytokentype's definition inside #ifndef
-	YYTOKENTYPE.  This undoes a bug I introduced on 2002-10-12.
-
-2002-10-13  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c (yyglrShiftDefer, yyaddDeferredAction, yydoAction):
-	Un yy- yyrhs to avoid the name clash with the global YYRHS.
-
-2002-10-13  Akim Demaille  <akim@epita.fr>
-
-	* Makefile.maint: Update from Autoconf 2.54.
-	* m4/strerror_r.m4 (AC_FUNC_STRERROR_R): Remove, shipped with 2.54.
-
-2002-10-13  Akim Demaille  <akim@epita.fr>
-
-	* src/print.c (print_state): Separate the list of solved conflicts
-	from the other items.
-	* tests/conflicts.at (Resolved SR Conflicts): Adjust.
-
-2002-10-13  Akim Demaille  <akim@epita.fr>
-
-	Let nondeterministic skeletons be usable with deterministic
-	tables.
-
-	With the patch, GAWK compiled by GCC without -O2 passes its test
-	suite using a GLR parser driven by LALR tables.  It fails with -O2
-	because `struct stat' gives two different answers on my machine:
-	88 (definition of an auto var) and later 96 (memset on this var).
-	Hence the stack is badly corrumpted.  The headers inclusion is to
-	blame: if I move the awk.h inclusion before GLR's system header
-	inclusion, the two struct stat have the same size.
-
-	* src/tables.c (pack_table): Always create conflict_table.
-	(token_actions): Always create conflict_list.
-	* data/glr.c (YYFLAG): Remove, unused.
-
-2002-10-13  Akim Demaille  <akim@epita.fr>
-
-	* configure.ac (AC_GNU_SOURCE): Use it instead of hand written code.
-	(O0FLAGS): New.
-	(VALGRIND, GXX): New.
-	* tests/atlocal.in (CFLAGS): Use O0FLAGS.
-	* tests/bison.in: Run $PREBISON a pre-command.
-	* tests/Makefile.am (maintainer-check, maintainer-check-valgrind)
-	(maintainer-check-g++): New.
-	* Makefile.am (maintainer-check): New.
-
-2002-10-13  Akim Demaille  <akim@epita.fr>
-
-	* data/glr.c: Formatting changes.
-	Tweak some trace messages to match yacc.c's.
-
-2002-10-13  Akim Demaille  <akim@epita.fr>
-
-	GLR parsers sometimes raise parse errors instead of performing the
-	default reduction.
-	Reported by Charles-Henry de Boysson.
-
-	* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Don't
-	check the length of the traces when %glr.
-	(_AT_CHECK_CALC_ERROR): Also skip `^Stack' lines, coming from
-	GLR's traces.
-	(AT_CHECK_CALC_LALR, AT_CHECK_CALC_GLR): New.
-	Test GLR parsers.
-	* data/glr.c (YYLEFTMOST_STATE): Fix its value.
-	(yyltype): Remove the yy prefix from the member names.
-	(yytable): Complete its comment.
-	(yygetLRActions): Map error action number from YYTABLE from
-	YYTABLE_NINF to 0.
-	(yyisErrorAction): No longer compare YYACTION to YYPACT_NINF
-	(which was a bug: it should have been YYTABEL_NINF, and yet it was
-	not satisfying as we could compare an YYACTION computed from
-	YYDEFACT to YYTABLE_NINF although they are unrelated): 0 is the
-	only value for error actions.
-	(yyreportParseError): In verbose parse error messages, don't issue
-	`error' in the list of expected tokens.
-	* data/yacc.c (yyparse) <yybackup>: Rewrite the decoding of the
-	next action to perform to match glr.c's decoding.
-	(yytable): Complete its comment.
-
-2002-10-13  Paul Eggert  <eggert@twinsun.com>
-
-	Fix problem reported by Henrik Grubbstroem in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00098.html>:
-	"nonterm: { $$ = 123; } { $$ = $1; };" was wrongly rejected,
-	because the Bison parser reads the second action before reducing
-	the first one.
-	* src/scan-gram.l (rule_length): New static var.
-	Use it to keep track of the rule length in the scanner, since
-	we can't expect the parser to be in lock-step sync with the scanner.
-	(handle_action_dollar, handle_action_at): Use this var.
-	* tests/actions.at (Exotic Dollars): Test for the problem.
-
-2002-10-12  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/timevar.c [! IN_GCC && HAVE_SYS_TIME_H]: Include <sys/time.h>.
-	* m4/timevar.m4 (BISON_PREREQ_TIMEVAR): Check for <sys/time.h>.
-	Include <sys/time.h> when checking for clock_t and struct tms.
-	Use same include order as source.
-	This is for the SunOS 4.1.4 porting bug reported by Peter Klein in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00016.html>.
-
-	* lib/timevar.c: Update copyright date and clarify comments.
-	(get_time) [IN_GCC]: Keep the GCC version for reference.
-
-	* lib/timevar.c, lib/timevar.h, lib/timevar.def: Import
-	GCC version as of today, then merge Bison's changes.
-	Change "GCC" to "Bison" in copyright notice.  timevar.def's
-	author is Akim, so change that too.
-
-	* src/reader.c (grammar_current_rule_check):
-	Don't worry about the default action if $$ is untyped.
-	Prevents bogus warnings reported by Jim Gifford in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00015.html>.
-
-	* data/c.m4 (b4_token_enum): Do not define YYTOKENTYPE.
-	* data/glr.c, data/lalr1.cc, data/yacc.c:
-	Output token definitions before the first part of user declarations.
-	Fixes compatibility problem reported by Jim Gifford for kbd in
-	<http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00014.html>.
-
-2002-10-11  Paul Eggert  <eggert@twinsun.com>
-
-	* data/yacc.c (yyreport_parse_error): Remove, putting its body into...
-	(yyparse): here.  This undoes some of the 2002-07-25 change.
-	Compatibility problem reported by Ralf S. Engelschall with
-	OSSP cfg <http://www.ossp.org/pkg/lib/cfg/>.
-
-2002-10-11  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at Characters Escapes): New.
-	* src/scan-gram.l (SC_ESCAPED_CHARACTER): Accept \' in strings and
-	characters.
-	Reported by Jan Nieuwenhuizen.
-
-2002-10-11  Akim Demaille  <akim@epita.fr>
-
-	* po/id.po: New.
-
-2002-10-10  Paul Eggert  <eggert@twinsun.com>
-
-	Portability fixes for bitsets; this also avoids several GCC
-	warnings.
-
-	* lib/abitset.c: Include <stddef.h>, for offsetof.
-	* lib/lbitset.c: Likewise.
-
-	* lib/abitset.c (abitset_bytes): Return a size that is aligned
-	properly for vectors of objects.  Do not assume that adding a
-	header size to a multiple of a word size yields a value that is
-	properly aligned for the whole union.
-	* lib/bitsetv.c (bitsetv_alloc): Likewise.
-
-	* lib/bitset_stats.c (bitset_stats_bytes): Adjust to new,
-	unique names for structures.
-	* lib/ebitset.c (ebitset_bytes): Likewise.
-	* lib/lbitset.c (lbitset_bytes): Likewise.
-
-	* lib/abitset.c (abitset_ones, abitset_zero, abitset_empty_p,
-	abitset_copy1, abitset_not, abitset_equal_p, abitset_subset_p,
-	abitset_disjoint_p, abitset_and, abitset_and_cmp, abitset_andn,
-	abitset_andn_cmp, abitset_or, abitset_or_cmp, abitset_xor,
-	abitset_xor_cmp, abitset_and_or, abitset_and_or_cmp,
-	abitset_andn_or, abitset_andn_or_cmp, abitset_or_and,
-	abitset_or_and_cmp, abitset_copy): Supply prototype decls,
-	to improve the type-checking that GCC can do.
-	* lib/bitset.c (bitset_op4_cmp): Likewise.
-	* lib/bitset_stats.c (bitset_stats_count,
-	bitset_stats_empty_p, bitset_stats_ones, bitset_stats_zero,
-	bitset_stats_copy, bitset_stats_disjoint_p,
-	bitset_stats_equal_p, bitset_stats_not, bitset_stats_subset_p,
-	bitset_stats_and, bitset_stats_and_cmp, bitset_stats_andn,
-	bitset_stats_andn_cmp, bitset_stats_or, bitset_stats_or_cmp,
-	bitset_stats_xor, bitset_stats_xor_cmp, bitset_stats_and_or,
-	bitset_stats_and_or_cmp, bitset_stats_andn_or,
-	bitset_stats_andn_or_cmp, bitset_stats_or_and,
-	bitset_stats_or_and_cmp): Likewise.
-	* lib/lbitset.c (lbitset_and, lbitset_and_cmp, lbitset_andn,
-	lbitset_andn_cmp, lbitset_or, lbitset_or_cmp, lbitset_xor,
-	lbitset_xor_cmp, lbitset_empty_p, lbitset_ones, lbitset_not,
-	lbitset_subset_p, lbitset_disjoint_p, debug_lbitset): Likewise.
-
-	* lib/abitset.h: Include bitset.h, not bbitset.h.
-	* lib/ebitset.h: Likewise.
-	* lib/lbitset.h: Likewise.
-
-	* lib/bbitset.h: (enum_bitset_ops, enum_bitset_type): New types.
-	All instances of parameters of type enum bitset_opts are now of
-	type enum_bitset_opts, to conform to the C Standard, and similarly
-	for enum_bitset_type.
-	* lib/ebitset.c (enum_ebitset_find_mode): Likewise.
-	* lib/lbitset.c (enum_lbitset_find_mode): Likewise.
-
-	Do not use "struct bitset_struct" to mean different things in
-	different modules.  Not only is this confusing, it violates
-	the C Standard, which requires that structure types in different
-	modules must be compatible if one is to be passed to the other.
-	* lib/bbitset.h (bitset): Now points to a union, not to a struct.
-	All instances of "struct bitset_struct *" replaced with "bitset".
-	* lib/bitset.h (struct bitset_struct): Remove, replacing with....
-	(union bitset_union, struct abitset_struct, struct ebitset_struct,
-	struct lbitset_struct, struct bitset_stats_struct): New types.
-	All uses of struct bitset_struct changed to union bitset_union,
-	etc.
-	* lib/abitset.c (struct abitset_struct, abitset,
-	struct bitset_struct): Remove.
-	* lib/bitset_stats.c (struct bitset_stats_struct, bitset_stats,
-	struct bitset_struct): Remove.
-	* lib/ebitset.c (struct ebitset_struct, ebitset, struct
-	bitset_struct): Remove.
-	* lib/lbitset.c (struct lbitset_struct, lbitset, bitset_struct):
-	Likewise.
-
-	Do not call a function of type T using a call that assumes the
-	function is of a different type U.  Standard C requires that a
-	function must be called with a type that is compatible with its
-	definition.
-	* lib/bbitset.h (bitset_and_or_, bitset_andn_or_, bitset_or_and_):
-	New decls.
-	* lib/bitset.c (bitset_and_or_, bitset_andn_or_, bitset_or_and_):
-	New functions.
-	* lib/ebitset.c (PFV): Remove.
-	* lib/lbitset.c (PFV): Likewise.
-	* lib/ebitset.c (ebitset_and, ebitset_andn, ebitset_or,
-	ebitset_xor, ebitset_copy, ebitset_ones, ebitset_empty_p): New
-	decls.
-	(ebitset_and, ebitset_andn, ebitset_or, ebitset_xor): New functions.
-	(ebitset_vtable): Use them.
-	* lib/lbitset.c (lbitset_and, lbitset_andn, lbitset_or,
-	lbitset_xor): New functions.
-	(lbitset_vtable): Use them.
-
-	* lib/bitset.h (bitset_next, bitset_prev, bitset_only_set_p):
-	Declare.
-
-	* lib/bitsetv.c (bitsetv_alloc): Add a cast to (void *) to avoid a
-	GCC warning.
-	* lib/lbitset.c (LBITSET_CURRENT1): Likewise.
-	Use offsetof, for simplicity.
-
-2002-10-06  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/bitset.h (bitset_reset): Do not assume that bitset_word is
-	the same width as int.  This reapplies a hunk of the 2002-08-12 patch
-	<http://lists.gnu.org/archive/html/bison-patches/2002-08/msg00007.html>,
-	which was inadvertently undone by the 2002-09-30 patch.
-	* lib/lbitset.c (debug_lbitset): Do not assume that bitset_word is
-	the same width as int.
-
-2002-10-04  Paul Eggert  <eggert@twinsun.com>
-
-	Version 1.50.
-
-	* configure.ac (AC_INIT), NEWS: Increment version number.
-
-	* doc/bison.texinfo: Minor spelling, grammar, and white space
-	fixes.
-	(Symbols): Mention that any negative value returned from yylex
-	signifies end-of-input.  Warn about negative chars.  Mention
-	the portable Standard C character set.
-
-	The GNU coding standard says CFLAGS and YFLAGS are reserved
-	for the installer to set.
-	* lib/Makefile.am (AM_CFLAGS): Renamed from CFLAGS.
-	* src/Makefile.am (AM_CFLAGS): Likewise.
-	(AM_YFLAGS): Renamed from YFLAGS.
-
-	Fix some MAX and MIN problems.
-	* src/gram.h (ITEM_NUMBER_MIN): MIN_MAX -> INT_MIN.
-	* src/lalr.h (GOTO_NUMBER_MAX): INT_MAX -> SHRT_MAX.
-	* src/symtab.h (SYMBOL_NUMBER_MAX): New macro.
-	* src/reader.c (reader): Use it.
-
-	* tests/regression.at (Braces parsing): Use grep, not fgrep, as
-	POSIX 1003.1-2001 has removed fgrep.
-
-2002-10-04  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
-
-	* lib/bbitset.h (BITSET_WINDEX_MAX): Redefine so that it cannot be
-	interpreted as signed.
-	* lib/ebitset.c (ebitset_list): Fix bug.
-
-2002-10-01  Paul Eggert  <eggert@twinsun.com>
-
-	More fixes for 64-bit hosts and large bitsets.
-
-	* lib/abitset.c (struct abitset_struct.n_bits, abitset_small_list,
-	abitset_size, abitset_list, abitset_list_reverse, abitset_list):
-	Use bitset_bindex, not int or unsigned int or size_t, to count bits.
-	* lib/bbitset.h (struct bitset_vtable.size, struct bitset_vtable.count,
-	struct bitset_vtable.list, struct bitset_vtable.list_reverse,
-	bitset_count_, bitset_next, bitset_prev, bitset_first, bitset_last,
-	bitset_count_): Likewise.
-	* lib/bitset.h (bitset_iterator.num, bitset_iterator.i,
-	bitset_first, bitset_last): Likewise.
-	* lib/bitset_stats.c (bitset_stats_size, bitset_stats_list,
-	bitset_stats_list_reverse, bitset_stats_size,
-	bitset_stats_count, bitset_stats_list, bitset_stat_list_reverse):
-	Likewise.
-	* lib/bitsetv-print.c (bitsetv_matrix_dump): Likewise.
-	* lib/bitsetv.c (bitsetv_alloc, bitsetv_create, bitsetv_free,
-	bitsetv_zero, bitsetv_ones, bitsetv_transitive_closure,
-	bitsetv_reflexive_transitive_closure): Likewise.
-	* lib/bitsetv.h (bitsetv_alloc, bitsetv_create): Likewise.
-	* lib/ebitset.c (ebitset_size, ebitset_list, ebitset_list_reverse):
-	Likewise.
-	* lib/lbitset.c (lbitset_size, lbitset_list, lbitset_list_merge):
-	Likewise.
-
-	* lib/abitset.c (abitset_ones, abitset_zero, abitset_bytes):
-	Use size_t, not unsigned int, to count bytes.
-	* lib/abitset.h (abitset_bytes): Likewise.
-	* lib/bitset.c (bitset_bytes, bitset_alloc, bitset_obstack_alloc):
-	Likewise.
-	* lib/bitset.h (bitset_bytes): Likewise.
-	* lib/bitset_stats.c (bitset_stats_bytes, bitset_stats_init): Likewise.
-	* lib/bitset_stats.h (bitset_stats_bytes): Likewise.
-	* lib/bitsetv.c (bitsetv_alloc): Likewise.
-	* lib/ebitset.c (ebitset_bytes): Likewise.
-	* lib/ebitset.h (ebitset_bytes): Likewise.
-	* lib/lbitset.c (lbitset_bytes): Likewise.
-	* lib/lbitset.h (lbitset_bytes): Likewise.
-
-	* lib/abitset.c (abitset_empty_p, abitset_not, abitset_equal_p,
-	abitset_subset_p, abitset_disjoint_p, abitset_and,
-	abitset_and_cmp, abitset_andn, abitset_andn_cmp, abitset_or,
-	abitset_or_cmp, abitset_xor, abitset_xor_cmp, abitset_and_or,
-	abitset_and_or_cmp, abitset_andn_or, abitset_andn_or_cmp,
-	abitset_or_and, abitset_or_and_cmp):
-	Use bitset_windex instead of unsigned int.
-	* lib/bitsetv.c (bitsetv_dump, debug_bitsetv): Likewise.
-	* lib/ebitset.c (struct ebitset_struct.size, ebitset_elts_grow,
-	ebitset_elt_add, ebitset_elt_remove, ebitset_weed,
-	ebitset_elt_find, ebitset_list_reverse, ebitset_list, ebitset_init):
-	Likewise.
-	* lib/lbitset.c (lbitset_ones, lbitset_not): Likewise.
-
-	* lib/bitset.c (bitset_print):
-	Use proper printf formats for widths of integer types.
-	* lib/bitset_stats.c (bitset_percent_histogram_print,
-	bitset_log_histogram_print, bitset_stats_print_1): Likewise.
-	* lib/bitsetv-print.c (bitsetv_matrix_dump): Likewise.
-	* lib/bitsetv.c (bitsetv_dump, debug_bitsetv): Likewise.
-	* lib/lbitset.c (lbitset_bytes): Likewise.
-
-	* lib/bbitset.h (BITSET_BINDEX_MAX, BITSET_WINDEX_MAX,
-	BITSET_SIZE_MAX): New macros.
-	(BITSET_INDEX_MAX): Remove.  It wasn't right, since it assumed that
-	sizeof (bitset_word) == sizeof (bitset_windex).  All uses changed
-	to BITSET_WINDEX_MAX.
-
-	* lib/bitset.c (bitset_next, bitset_prev, bitset_first,
-	bitset_last): Return BITSET_BINDEX_MAX (not -1) for no value,
-	since we now return the bitset_bindex type (not int).
-
-	* lib/bitsetv.c (bitsetv_alloc): Check for arithmetic overflow
-	when computing sizes.
-	* lib/ebitset.c (ebitset_elts_grow): Likewise.
-
-	* lib/lbitset.c (lbitset_elt_find): Simplify windex calculation
-	and avoid cast to unsigned.
-
-2002-09-30  Akim Demaille  <akim@epita.fr>
-
-	* lib/abitset.c, lib/bbitset.h, lib/bitset.c, lib/bitset.h,
-	* lib/bitset_stats.c, lib/bitsetv.c, lib/ebitset.c, lib/lbitset.c:
-	Updates from Michael Hayes.
-
-2002-09-30  Art Haas  <ahaas@neosoft.com>
-
-	* configure.ac: Update AC_OUTPUT and AM_CONFIG_HEADER
-	invocations.
-	* tests/cxx-type.at (declarator): Don't rely on NDEBUG being not
+	cpp: simplify the Flex version checking macro
+	* src/flex-scanner,h (FLEX_VERSION): Consider YY_FLEX_SUBMINOR_VERSION
 	defined.
 
-2002-09-27  Akim Demaille  <akim@epita.fr>
+2012-12-07  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	Version 1.49c.
+	news: improve the carets example and fix a typo
+	* NEWS: Here.
 
-2002-09-27  Akim Demaille  <akim@epita.fr>
+2012-12-07  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* configure.ac (AM_INIT_AUTOMAKE): We _need_ 1.7.
-	(Because of AC_LIBSOURCE).
+	cpp: improve the Flex version checking macro
+	* src/flex-scanner.h (FLEX_VERSION): Here.
 
-2002-09-27  Akim Demaille  <akim@epita.fr>
+2012-12-07  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	Playing with Autoscan.
+	carets: improve the code
+	* src/location.c: Remove duplicate documentations.
+	(caret_info): Stylistic change.
+	(location_caret): Many reworks.
 
-	* configure.ac: Remove the old LIBOBJ tweaks.
-	(AC_REPLACE_FUNCS): Add strrchr and strtol.
-	* lib/strrchr.c: New.
-	* lib/strtol.c: New, from the Coreutils 4.5.1.
+2012-12-07  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-09-27  Akim Demaille  <akim@epita.fr>
+	maint: update news
+	* NEWS: There is no 2.6.6, remove its stub.
 
-	Playing with Autoscan.
+2012-12-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* m4/prereq.m4 (jm_PREREQ_ARGMATCH, jm_FUNC_ARGMATCH): New.
-	* lib/Makefile.am (libbison_a_SOURCES): No longer include
-	argmatch.c and argmatch.h, since they are AC_LIBSOURCE'd.
-	* lib/strcasecmp.c, lib/strncasecmp.c, lib/memcmp.c: New, from the
-	Coreutils 4.5.1.
+	build: keep -Wmissing-declarations and -Wmissing-prototypes for modern GCCs
+	Fixes a -Werror failure of xalloc.h used in src.
+	From Eric Blake.
+	http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00006.html
 
-2002-09-24  Akim Demaille  <akim@epita.fr>
+	* configure.ac: Check whether GCC pragma diagnostic push/pop works.
+	Enable these warnings for bison if it does.
+	Enable these warnings for the test suite anyway.
 
-	* doc/bison.texinfo (Stack Overflow): xref to Recursion.
-	(Frequently Asked Questions, Parser Stack Overflow): New.
+2012-12-07  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-09-13  Akim Demaille  <akim@epita.fr>
+	build: drop -Wcast-qual
+	Suggested by Jim Meyering.
+	http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00017.html
+	* configure.ac (warn_common): Remove -Wcast-qual.
 
-	Playing with autoscan.
+2012-12-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reader.c (get_merge_function): Use xstrdup, not strdup.
-	* src/files.c (skeleton_find): Remove, unused.
-	* m4/memcmp.m4: New, from the Coreutils 4.5.1.
-	* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Run jm_FUNC_MEMCMP.
+	gnulib: update
 
-2002-09-13  Akim Demaille  <akim@epita.fr>
+2012-12-06  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* configure.ac (AM_INIT_AUTOMAKE): Require Automake 1.6.3.
-	* Makefile.am (AUTOMAKE_OPTIONS): Don't.
+	misc: pacify the Tiny C Compiler
+	* src/graphviz.c (conclude_red): Remove a useless return.
 
-2002-09-13  Akim Demaille  <akim@epita.fr>
+2012-12-05  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* configure.ac: Require 2.54.
-	s/jm_FUNC_MALLOC/AC_FUNC_MALLOC/.
-	s/jm_FUNC_REALLOC/AC_FUNC_REALLOC/.
-	* m4/c-bs-a.m4, m4/malloc.m4, m4/mbstate_t.m4, m4/realloc.m4:
-	Remove, provided by Autoconf macros.
+	cpp: make the check of Flex version portable
+	This was problematic with tcc 0.9.25
 
-2002-09-12  Akim Demaille  <akim@epita.fr>
+	* src/flex-scanner.h (FLEX_VERSION_GT): Rewrite and rename as...
+	(FLEX_VERSION): This.
 
-	* m4/prereq.m4: Update, from Coreutils 4.5.1.
+2012-12-05  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-2002-09-12  Akim Demaille  <akim@epita.fr>
+	misc: require getline
+	* bootstrap.conf: Here, used by src/location.c.
+	* src/getargs.c (long_options): Rename --flags to --feature.
 
-	* m4/prereq.m4: Update, from Fileutils 4.1.5.
-	* configure.ac (jm_PREREQ_TEMPNAME): Invoke it.
-	Reported by Martin Mokrejs.
+2012-12-05  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-09-10  Akim Demaille  <akim@epita.fr>
+	c++: support wide strings for file names
+	Reported by Mark Boyall.
+	http://lists.gnu.org/archive/html/help-bison/2011-08/msg00002.html
 
-	* src/parse-gram.y: Associate a human readable string to each
-	token type.
-	* tests/regression.at (Invalid inputs): Adjust.
+	* data/location.cc (operator<<): Be templated on the type of
+	output stream.
+	* tests/headers.at (Several parsers): Adjust.
 
-2002-09-10  Gary V. Vaughan  <gary@gnu.org>
+2012-12-05  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* tests/Makefile.am ($(srcdir)/package.m4): Bison now ships
-	with an Autoconf-2.5x style configure.ac.
+	doc: document carets
+	* NEWS: Announce it.
+	* doc/bison.texi (Bison Options):  Here.
 
-2002-09-06  Paul Eggert  <eggert@twinsun.com>
+2012-12-05  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* doc/bison.texinfo (Conditions): Make explicit that the GPL
-	exception applies only to yacc.c.  This is a modification of a
-	patch originally suggested by Akim Demaille.
+	tests: enhance existing tests with carets
+	* tests/actions.at: Unset value.
+	* tests/conflicts.at: Rule useless due to conflicts.
+	* tests/input.at: Missing terminator, unexpected end of file, command line
+	redefinition of variable.
+	* tests/named-refs.at: Many errors.
+	* tests/reduce.at: Useless nonterminals and rules.
+	* tests/regression.at: Large token.
 
-2002-09-06  Akim Demaille  <akim@epita.fr>
+2012-12-05  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* data/c.m4 (b4_copyright): Move the GPL exception comment from
-	here to...
-	* data/yacc.c: here.
+	errors: show carets
+	* src/locations.c (caret_info): New, persistant information useful
+	for...
+	(location_caret): New, print a caret.
+	(cleanup_caret): Release caret_info cleanly, call it...
+	* src/main.c (main): Here.
+	* src/complain.c (error_message): Call location_caret here.
 
-	* data/lalr1.cc (struct yyltype): Don't define it, since we use
-	LocationType.
-	(b4_ltype): Default to yy::Location from location.hh.
+2012-12-05  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-2002-09-04  Jim Meyering  <jim@meyering.net>
+	getargs: add support for --feature/-f
+	Introduce -fdiagnostics-show-caret
 
-	* data/yacc.c: Guard the declaration of yytoknum also with
-	`#ifdef YYPRINT', so it is declared only when used.
+	* src/getargs.c (feature_flag): New global.
+	* src/getargs.h (feature): New enum.
 
-2002-09-04  Akim Demaille  <akim@epita.fr>
+2012-12-04  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* configure.in: Rename as...
-	* configure.ac: this.
-	Bump to 1.49c.
+	getargs: don't label --language/-l as experimental
+	* NEWS: Announce it.
+	* doc/bison.texi, src/getargs.c (usage): Here.
 
-2002-09-04  Akim Demaille  <akim@epita.fr>
+2012-12-03  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* src/assoc.c, src/closure.c, src/gram.c, src/injections.c,
-	* src/lalr.c, src/LR0.c, src/relation.c, src/tables.c: Don't
-	translate maintainer only messages.
+	getargs: fix the locations of command-line input
+	* src/getargs.c (command_line_location): Here.
+	* tests/input.at: Adjust.
 
-2002-08-12  Paul Eggert  <eggert@twinsun.com>
+2012-12-03  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	Version 1.49b.
+	errors: indent missing action code semicolon warning
+	Also, remove a duplicate #define.
 
-	* Makefile.am (SUBDIRS): Remove intl.
-	(DISTCLEANFILES): Remove.
-	* NEWS: Mention that GNU M4 is now required.  Clarify what is
-	meant by "larger grammars".  Mention the pt_BR translation.
-	* configure.in (AC_CHECK_DECLS): Add getenv, getopt.
-	(AM_GNU_GETTEXT_VERSION): New macro, replacing GETTEXT_VERSION var.
-	Bump version from 0.11.2 to 0.11.5.
-	(BISON_PREREQ_STAGE): Remove.
-	(AM_GNU_GETTEXT): Use external gettext.
-	(AC_OUTPUT): Remove intl/Makefile.
+	* src/scan-code.l (SC_RULE_ACTION): Here.
+	* tests/actions.at: Adjust.
 
-	* config/depcomp, config/install-sh: Sync with Automake 1.6.3.
+2012-12-03  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/glr.c: Include string.h, for strlen.
-	(yyreportParseError): Use size_t for yysize.
-	(yy_yypstack): No longer nested inside yypstates, as nested
-	functions are not portable.  Do not assume size_t is the
-	same width as int.
-	(yypstates): Do not assume that ptrdiff_t is the same width
-	as int, and similarly for yyposn and YYINDEX.
+	parser: accept #line NUM
+	* src/scan-gram.l (scanner): Accept '#line NUM'.
+	(handle_syncline): Adjust to the possible missing file name.
 
-	* data/yacc.c: Fix comment about `$$ = $1': it can copy garbage.
+2012-12-03  Akim Demaille  <akim@lrde.epita.fr>
 
-	* lib/Makefile.am (INCLUDES): Do not include from the intl
-	directory, which has been removed.
-	* src/Makefile.am (INCLUDES): Likewise.
+	m4: use a safer pattern to enable/disable output
+	Work on some other areas of Bison revealed that some macros expanded
+	to be expanded only once were actually expanded several times.  This
+	was due to the fact that changecom was not properly restored each
+	time, and macro names appearing in comments were then expanded.
 
-	* lib/Makefile.am (libbison_a_SOURCES): Add unlocked-io.h.
-	(bitsets_sources, additional_bitsets_sources, timevars_sources):
-	New vars.
+	Introduce begin/end macros which are easier to match that
+	changecom()/changecom(#).
 
-	* lib/Makefile.am (libbison_a_SOURCES): Avoid +=, a GNU make extension.
-	* tests/Makefile.am (EXTRA_DIST): Likewise.
-
-	* lib/abitset.c (abitset_reverse_list, ebitset_reverse_list):
-	Do not assume that bitset_windex is the same width as unsigned.
-
-	* lib/abitset.c (abitset_unused_clear): Do not assume that
-	bitset_word is the same width as int.
-	* lib/bbitset.h (BITSET_INDEX_MAX, BITSET_MSB): Likewise.
-	* lib/bitset.h (bitset_set, bitset_reset): Likewise.
-	* lib/bitset_stats.c (bitset_stats_set, bitset_stats_reset): Likewise.
-	* lib/ebitset.c (ebitset_set, ebitset_reset): Likewise.
-	* lib/lbitset.c (lbitset_set, lbitset_reset): Likewise.
-
-	* lib/abitset.c (abitset_op1): Use -1, not ~0, as memset arg (for
-	portability to one's complement hosts!).
-	* lib/ebitset.c (ebitset_op1): Likewise.
-	* lib/lbitset.c (lbitset_op1): Likewise.
-
-	* lib/argmatch.c, lib/quotearg.c, quotearg.h: Sync with GNU tar.
-	* lib/argmatch.h, lib/basename.c, lib/dirname.c, lib/dirname.h,
-	lib/hash.c, lib/hash.h, lib/strnlen.c, lib/xmalloc.c:
-	Sync with fileutils.
-	* lib/error.c, lib/getopt.c, lib/getopt.h, lib/getopt1.c,
-	lib/gettext.h: Sync with diffutils.
-
-	* lib/memrchr.c, lib/mkstemp.c, lib/strchr.c, lib/strnlen.c,
-	lib/strspn.c, lib/tempname.c: Use GPL, not LGPL.
-
-	* lib/obstack.c, lib/obstack.h: Sync with fileutils, except use
-	PROTOTYPES to check for prototypes, and "defined __STDC__" to
-	check for void *.
-
-	* lib/bbitset.h (BITSET_WORD_BITS): Now of type unsigned, not
-	size_t; the old version tried to do this but casted improperly.
-	(bitset_bindex, bitset_windex): Now size_t, not unsigned long.
-	(bitset_test): Now returns int, not unsigned long.
-
-	* lib/bitset_stats.c: Include "gettext.h".
-	(_): New macro.
-	(bitset_stats_set, bitset_stats_reset, bitset_stats_test): Don't
-	name locals "index", as it generates unnecessary warnings on some
-	hosts that have an "index" function.
-
-	* lib/bitset_stats.c (bitset_stats_print_1, bitset_stats_print,
-	bitset_stats_read, bitset_stats_write): Wrap strings in _() if
-	they need translation.
-	* src/LR0.c (state_list_append, new_itemsets, get_state,
-	append_states, generate_states): Likewise.
-	* src/assoc.c (assoc_to_string): Likewise.
-	* src/closure.c (print_closure, set_firsts, closure): Likewise.
-	* src/gram.c (grammar_dump): Likewise.
-	* src/injections.c (injections_compute): Likewise.
-	* src/lalr.c (lookaheads_print): Likewise.
-	* src/relation.c (relation_transpose): Likewise.
-	* src/scan-gram.l: Likewise.
-	* src/tables.c (table_grow, pack_vector): Likewise.
-
-	* m4/Makefile.am (EXTRA_DIST): Remove codeset.m4,
-	glibc21.m4, isc-posix.m4 lcmessage.m4, stage.m4.
-	* m4/malloc.m4, m4/realloc.m4: Sync with diffutils.
-	* m4/mbstate_t.m4: Sync with fileutils.
-	* m4/prereq.m4 (jm_PREREQ_QUOTEARG): AC_MBSTATE_T -> AC_TYPE_MBSTATE_T.
-
-	* po/LINGUAS: Add pt_BR.
-	* po/POTFILES.in: Add src/assoc.c, src/closure.c, src/gram.c,
-	src/main.c, src/relation.c, src/state.c, lib/bitset_stats.c,
-	lib/timevar.c.
-	Use src/parse-gram.y instead of src/parse-gram.c, as the gettext
-	manual recommends.
-	Similarly, use src/scan-gram.l instead of src/scan-gram.c.
-
-	* src/complain.c (strerror_r): Remove decl; not needed.
-	(strerror): Use same pattern as ../lib/error.c.
-
-	* src/files.c, src/files.h (compute_header_macro): Remove; unused.
-
-	* src/gram.c (grammar_dump): Do not assume ptrdiff_t fits in int.
-
-	* src/main.c (main): Cast result of bindtextdomain and textdomain
-	to void, to avoid a GCC warning when --disable-nls is in effect.
-
-	* src/scan-gram.l: Use strings rather than escapes when possible,
-	to minimize the number of warnings from xgettext.
-	(handle_action_dollar, handle_action_at): Don't use isdigit,
-	as it mishandles negative chars and it may not work as expected
-	outside the C locale.
-
-	* src/symtab.c (symbol_get): Don't cast LHS of an assignment;
-	this is a GCC extension and is not portable to other compilers.
-
-	* src/system.h (alloca): Use same pattern as ../lib/error.c.
-	Do not include <ctype.h>; no longer needed.
-	Do not include <malloc.h>; no longer needed (and generates
-	warnings on OpenBSD 3.0).
-
-	* tests/cxx-type.at (yylex): Do not pass signed char to isupper;
-	it's not portable.
-
-	* tests/regression.at: Do not use 'cc -c input.c -o input';
-	Sun C rejects this.  Instead, use 'cc -c input.c -o input.o'.
-
-	* tests/synclines.at (AC_SYNCLINES_COMPILE): Accept any nonzero
-	exit status as failure, not just exit status 1.  Sun C exits
-	with status 2 sometimes.
-
-	* tests/torture.at (AT_INCREASE_DATA_SIZE): New macro.
-	Use it for the two large tests.
-
-2002-08-02  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (conflicts_output): Don't output rules never
-	reduced here, since anyway that computation doesn't work.
-	* src/gram.h, src/gram.h (rule_filter_t, rule_useful_p)
-	(rule_useless_p, rule_never_reduced_p): New.
-	(grammar_rules_partial_print): Use a filter instead of a range.
-	Display the title only if needed.
-	(grammar_rules_print): Adjust.
-	(grammar_rules_never_reduced_report): New.
-	* src/tables.c (action_row): Move the computation of rules never
-	reduced to...
-	(token_actions): here.
-	* src/main.c (main): Make the parser before making the report, so
-	that rules never reduced are computed.
-	Call grammar_rules_never_reduced_report.
-	* src/print.c (print_results): Report rules never reduced.
-	* tests/conflicts.at, tests/reduce.at: Adjust.
-
-2002-08-01  Akim Demaille  <akim@epita.fr>
-
-	Instead of attaching lookaheads and duplicating the rules being
-	reduced by a state, attach the lookaheads to the reductions.
-
-	* src/state.h (state_t): Remove the `lookaheads',
-	`lookaheads_rule' member.
-	(reductions_t): Add a `lookaheads' member.
-	Use a regular array for the `rules'.
-	* src/state.c (reductions_new): Initialize the lookaheads member
-	to 0.
-	(state_rule_lookaheads_print): Adjust.
-	* src/state.h, src/state.c (state_reductions_find): New.
-	* src/conflicts.c (resolve_sr_conflict, set_conflicts)
-	(count_rr_conflicts): Adjust.
-	* src/lalr.c (LArule): Remove.
-	(add_lookback_edge): Adjust.
-	(state_lookaheads_count): New.
-	(states_lookaheads_initialize): Merge into...
-	(initialize_LA): this.
-	(lalr_free): Adjust.
-	* src/main.c (main): Don't free nullable and derives too early: it
-	is used by --verbose.
-	* src/print.c, src/print_graph.c, src/tables.c: Adjust.
-
-2002-08-01  Akim Demaille  <akim@epita.fr>
-
-	* src/derives.h, src/derives.c (derives): A `rule_t***' instead of
-	`rule_number_t**'.
-	(set_derives, free_derives): Rename as...
-	(derives_compute, derives_free): this.
-	Adjust all dependencies.
-	* src/nullable.c (set_nullable, free_nullable): Rename as...
-	(nullable_compute, nullable_free): these.
-	(rule_list_t): Store rule_t *, not rule_number_t.
-	* src/state.c (state_rule_lookaheads_print): Directly compare rule
-	pointers, instead of their numbers.
-	* src/main.c (main): Call nullable_free, and derives_free earlier,
-	as they were lo longer used.
-
-2002-08-01  Akim Demaille  <akim@epita.fr>
-
-	* lib/timevar.c (get_time): Include children time.
-	* src/lalr.h (LA, LArule): Don't export them: used with the
-	state_t.
-	* src/lalr.c (LA, LArule): Static.
-	* src/lalr.h, src/lalr.c (lalr_free): New.
-	* src/main.c (main): Call it.
-	* src/tables.c (pack_vector): Check whether loc is >= to the
-	table_size, not >.
-	(pack_tables): Don't free froms, tos, conflict_tos, and pos...
-	(tables_generate): do it, since that's also it which allocates
-	them.
-	Don't free LA and LArule, main does.
-
-2002-07-31  Akim Demaille  <akim@epita.fr>
-
-	Separate parser tables computation and output.
-
-	* src/output.c (nvectors, base_t, base, base_ninf, conflict_table)
-	(conflict_list, conflict_list_cnt, table, check, table_ninf)
-	(yydefgoto, yydefact, high): Move to...
-	* src/tables.h, src/tables.c: here.
-	* src/output.c (vector_number_t, VECTOR_NUMBER_MAX)
-	(VECTOR_NUMBER_MIN, state_number_to_vector_number)
-	(symbol_number_to_vector_number, nvectors, BASE_MAX, BASE_MIN)
-	(froms, tos, conflict_tos, tally, width, action_t, ACTION_MAX)
-	(ACTION_MIN, actrow, order, nentries, pos, conflrow)
-	(conflict_list_free, table_size, lowzero, table_grow, conflict_row)
-	(action_row, save_row, token_actions, save_column, default_goto)
-	(goto_actions, sort_actions, matching_state, pack_vector)
-	(table_ninf_remap, pack_table, prepare_actions): Move to...
-	* src/tables.c: here.
-	* src/tables.h, src/tables.c(tables_generate, tables_free): New.
-	* src/output.c (token_actions, output_base, output_conflicts)
-	(output_check): Merge into...
-	(prepare_actions): this.
-	(actions_output): Rename as...
-	(user_actions_output): this.
-	* src/main.c (main): Call tables_generate and tables_free.
-
-2002-07-31  Akim Demaille  <akim@epita.fr>
-
-	Steal GCC's --time-report support.
-
-	* lib/timevar.c, lib/timevar.h, lib/timevar.def: New,
-	stolen/adjusted from GCC.
-	* m4/stage.m4: Remove time related checks.
-	* m4/timevar.m4: New.
-	* configure.in: Adjust.
-	* src/system.h: Adjust to using timevar.h.
-	* src/getargs.h, src/getargs.c: Support trace_time for
-	--trace=time.
-	* src/main.c (stage): Remove.
-	(main): Replace `stage' invocations with timevar calls.
-	* src/output.c: Insert pertinent timevar calls.
-
-2002-07-31  Akim Demaille  <akim@epita.fr>
-
-	Let --trace have arguments.
-
-	* src/getargs.h (enum trace_e): New.
-	* src/getargs.c (trace_args, trace_types, trace_argmatch): New.
-	(long_options, short_options): --trace/-T takes an optional
-	argument.
-	Change all the uses of trace_flag to reflect the new flags.
-	* tests/sets.at (Firsts, Nullable, Broken Closure): Use --trace=sets.
-
-	Strengthen `stage' portability.
-
-	* m4/stage.m4 (BISON_PREREQ_STAGE): New.
-	* configure.in: Use it.
-	Don't check for malloc.h and sys/times.h.
-	* src/system.h: Include them when appropriate.
-	* src/main.c (stage): Compile only when mallinfo, struct mallinfo,
-	times and struct tms are available.
-
-2002-07-30  Akim Demaille  <akim@epita.fr>
-
-	In verbose parse error message, don't report `error' as an
-	expected token.
-	* tests/actions.at (Printers and Destructors): Adjust.
-	* tests/calc.at (Calculator $1): Adjust.
-	* data/yacc.c, data/glr.c, data/lalr1.c: When making the verbose
-	error message, do not report the parser accepts the error token in
-	that state.
-
-2002-07-30  Akim Demaille  <akim@epita.fr>
-
-	Normalize conflict related messages.
-
-	* src/complain.h, src/complain.c (warn, complain): New.
-	* src/conflicts.c (conflicts_print): Use them.
-	(conflict_report_yacc): New, extracted from...
-	(conflicts_print): here.
-	* tests/conflicts.at, tests/existing.at: Adjust.
-
-2002-07-30  Akim Demaille  <akim@epita.fr>
-
-	Report rules which are never reduced by the parser: those hidden
-	by conflicts.
-
-	* src/LR0.c (save_reductions): Don't make the final state too
-	different: save its reduction (accept) instead of having a state
-	without any action (no shift or goto, no reduce).
-	Note: the final state is now a ``regular'' state, i.e., the
-	parsers now contain `reduce 0' as default reduction.
-	Nevertheless, since they decide to `accept' when yystate =
-	final_state, they still will not reduce rule 0.
-	* src/print.c (print_actions, print_reduction): Adjust.
-	* src/output.c (action_row): Track reduced rules.
-	(token_actions): Report rules never reduced.
-	* tests/conflicts.at, tests/regression.at: Adjust.
-
-2002-07-30  Akim Demaille  <akim@epita.fr>
-
-	`stage' was accidently included in a previous patch.
-	Initiate its autoconfiscation.
-
-	* configure.in: Look for malloc.h and sys/times.h.
-	* src/main.c (stage): Adjust.
-	Report only when trace_flag.
-
-2002-07-29  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h, src/state.c (transitions_t): Holds state_t*'s, not
-	state_number_t.
-	(errs_t): symbol_t*, not symbol_number_t.
-	(reductions_t): rule_t*, not rule_number_t.
-	(FOR_EACH_SHIFT): New.
-	* src/LR0.c, src/conflicts.c, src/lalr.c, src/output.c
-	* src/print.c, src/print_graph.c: Adjust.
-
-2002-07-29  Akim Demaille  <akim@epita.fr>
-
-	Use $accept and $end, as BYacc and BTYacc do, instead of $axiom and $.
-
-	* src/symtab.h, src/symtab.c (eoftoken, axiom): Rename as...
-	(endtoken, accept): these.
-	* src/reader.c (reader): Set endtoken's default tag to "$end".
-	Set undeftoken's tag to "$undefined" instead of "$undefined.".
-	* doc/bison.texinfo (Table of Symbols): Mention $accept and $end.
-	Adjust.
-
-2002-07-29  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (reduce_grammar): When the language is empty,
-	complain about the start symbol, not the axiom.
-	Use its location.
-	* tests/reduce.at (Empty Language): New.
-
-2002-07-26  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.h, src/reader.c (gram_error): ... can't get
-	yycontrol without making too strong assumptions on the parser
-	itself.
-	* src/output.c (prepare_tokens): Use the real 0th value of
-	token_translations instead of `0'.
-	* src/parse-gram.y (yyerror): Don't rely on yycontrol being
-	visible here.
-	* data/yacc.c (yyreport_parse_error): Rename yylocation as yylloc
-	for the time being: %locations ought to provide it to yyerror.
-
-2002-07-25  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (prepare_tokens): Go up to ntokens, not ntokens + 1.
-	* doc/bison.texinfo (Decl Summary): s/$illegal/$undefined./.
-	* tests/regression.at (Web2c Actions): Adjust.
-
-2002-07-25  Akim Demaille  <akim@epita.fr>
-
-	Stop storing rules from 1 to nrules + 1.
-
-	* src/LR0.c, src/closure.c, src/derives.c, src/gram.c, src/lalr.c
-	* src/nullable.c, src/output.c, src/print.c, src/reader.c
-	* src/reduce.c: Allocate and free from &rules[0], not &rules[1].
-	Iterate from 0 to nrules.
-	Use rule_number_as_item_number and item_number_as_rule_number.
-	Adjust to `derive' now containing possibly 0.
-	* src/gram.h (rule_number_as_item_number, item_number_as_rule_number):
-	Handle the `- 1' part in rule numbers from/to item numbers.
-	* src/conflicts.c (log_resolution): Fix the message which reversed
-	shift and reduce.
-	* src/output.c (action_row): Initialize default_rule to -1.
-	(token_actions): Adjust.
-	* tests/sets.at (Nullable, Firsts): Fix the previously bogus
-	expected output.
-	* tests/conflicts.at (Resolved SR Conflicts): Likewise.
-
-2002-07-25  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_c_function, b4_c_ansi_args, b4_c_ansi_arg)
-	(b4_c_knr_arg_names, b4_c_knr_arg_name, b4_c_knr_arg_decls)
-	(b4_c_knr_arg_decl): New.
-	* data/yacc.c: Use it to define yysymprint, yydestruct, and
-	yyreport_parse_error.
-
-2002-07-25  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c (yyreport_parse_error): New, extracted from...
-	(yyparse): here.
-	(yydestruct, yysymprint): Move above yyparse.
-	Be K&R compliant.
-
-2002-07-25  Akim Demaille  <akim@epita.fr>
-
-	* data/c.m4 (b4_ints_in, b4_int_type, b4_int_type_for): New,
-	replace...
-	(b4_sint_type, b4_uint_type): these.
-	* data/yacc.c, data/glr.c, data/lalr1.cc: Use b4_int_type_for.
-	* tests/regression.at (Web2c Actions): Adjust.
-
-2002-07-25  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (TIEM_NUMBER_MAX): New.
-	(item_number_of_rule_number, rule_number_of_item_number): Rename
-	as...
-	(rule_number_as_item_number, item_number_as_rule_number): these.
-	Adjust dependencies.
-	* src/output.c (vector_number_t, VECTOR_NUMBER_MAX)
-	(VECTOR_NUMBER_MIN, state_number_to_vector_number)
-	(symbol_number_to_vector_number): New.
-	(order): Of vector_number_t* type.
-	(base_t, BASE_MAX, BASE_MIN): New.
-	(froms, tos, width, pos, check): Of base_t type.
-	(action_number_t, ACTION_MIN, ACTION_MAX): New.
-	(actrow): Of action_number_t type.
-	(conflrow): Of unsigned int type.
-	(table_ninf, base_ninf): New.
-	(GENERATE_MUSCLE_INSERT_TABLE): Also output the `*_min' value.
-	(muscle_insert_int_table, muscle_insert_base_table)
-	(muscle_insert_rule_number_table): New.
-	(prepare_tokens): Output `toknum' as int_table.
-	(action_row): Returns a rule_number_t.
-	Use ACTION_MIN, not SHRT_MIN.
-	(token_actions): yydefact is rule_number_t*.
-	(table_ninf_remap): New.
-	(pack_table): Use it for `base' and `table'.
-	* data/yacc.c, data/glr.c, data/lalr1.cc (YYFLAG): Remove,
-	replaced with...
-	(YYPACT_NINF, YYTABLE_NINF): these.
-	(yypact, yytable): Compute their types instead of hard-coded
-	`short'.
-	* tests/regression.at (Web2c Actions): Adjust.
-
-2002-07-19  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l (id): Can start with an underscore.
-
-2002-07-16  Akim Demaille  <akim@epita.fr>
-
-	* src/assoc.c, src/asssoc.h (assoc_t, assoc_to_string): New.
-	Adjust all former `associativity' dependencies.
-	* src/symtab.c (symbol_new): Default associativity is `undef', not
-	`right'.
-	(symbol_check_alias_consistence): Adjust.
-
-2002-07-09  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Properly set the ``header'' part.
-	Use @dircategory ``GNU programming tools'' as per Texinfo's
-	documentation.
-	Use @copying.
-
-2002-07-09  Akim Demaille  <akim@epita.fr>
-
-	* lib/quotearg.h: Protect against multiple inclusions.
-	* src/location.h (location_t): Add a `file' member.
-	(LOCATION_RESET, LOCATION_PRINT): Adjust.
-	* src/complain.c (warn_at, complain_at, fatal_at): Drop
-	`error_one_per_line' support.
-
-2002-07-09  Akim Demaille  <akim@epita.fr>
-
-	* src/complain.h, src/complain.c (warn, complain): Remove, unused.
-	* src/reader.c (lineno): Remove.
-	Adjust all dependencies.
-	(get_merge_function): Take a location and use complain_at.
-	* src/symtab.h, src/symtab.c (symbol_make_alias): Likewise.
-	* tests/regression.at (Invalid inputs, Mixing %token styles):
-	Adjust.
-
-2002-07-09  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y (rules_or_grammar_declaration): Add an error
-	recovery rule, and forbid extensions when --yacc.
-	(gram_error): Use complain_at.
-	* src/reader.c (reader): Exit if there were parse errors.
-
-2002-07-09  Akim Demaille  <akim@epita.fr>
-
-	* tests/synclines.at (AT_SYNCLINES_COMPILE): New.
-	(AT_TEST_SYNCLINE): Adjust to unusual GCC outputs.
-	Reported by R Blake <blakers@mac.com>.
-
-2002-07-09  Akim Demaille  <akim@epita.fr>
-
-	* data/yacc.c: Output the copyright notive in the header.
-
-2002-07-03  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (froms, tos): Are state_number_t.
-	(save_column): sp, sp1, and sp2 are state_number_t.
-	(prepare): Rename `final' as `final_state_number', `nnts' as
-	`nterms_number', `nrules' as `rules_number', `nstates' as
-	`states_number', and `ntokens' as `tokens_number'.  Remove `nsym',
-	unused.
-	* data/yacc.c, data/glr.c, data/lalr1.cc: Adjust.
-	* data/lalr1.cc (nsym_): Remove, unused.
-
-2002-07-03  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h, src/lalr.c (goto_number_t): New.
-	* src/lalr.c (goto_list_t): New.
-	Propagate them.
-	* src/nullable.c (rule_list_t): New.
-	Propagate.
-	* src/types.h: Remove.
-
-2002-07-03  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (print_fderives): Use rule_rhs_print.
-	* src/derives.c (print_derives): Use rule_rhs_print.
-	(rule_list_t): New, replaces `shorts'.
-	(set_derives): Add comments.
-	* tests/sets.at (Nullable, Firsts): Adjust.
-
-2002-07-03  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (prepare_actions): Free `tally' and `width'.
-	(prepare_actions): Allocate and free `order'.
-	* src/symtab.c (symbols_free): Free `symbols'.
-	* src/scan-gram.l (scanner_free): Clear Flex's scanners memory.
-	* src/output.c (m4_invoke): Move to...
-	* src/scan-skel.l: here.
-	(<<EOF>>): Close yyout, and free its name.
-
-2002-07-03  Akim Demaille  <akim@epita.fr>
-
-	Fix some memory leaks, and fix a bug: state 0 was examined twice.
-
-	* src/LR0.c (new_state): Merge into...
-	(state_list_append): this.
-	(new_states): Merge into...
-	(generate_states): here.
-	(set_states): Don't ensure a proper `errs' state member here, do it...
-	* src/conflicts.c (conflicts_solve): here.
-	* src/state.h, src/state.c: Comment changes.
-	(state_t): Rename member `shifts' as `transitions'.
-	Adjust all dependencies.
-	(errs_new): For consistency, also take the values as argument.
-	(errs_dup): Remove.
-	(state_errs_set): New.
-	(state_reductions_set, state_transitions_set): Assert that no
-	previous value was assigned.
-	(state_free): New.
-	(states_free): Use it.
-	* src/conflicts.c (resolve_sr_conflict): Don't use an `errs_t' as
-	temporary storage: use `errs' and `nerrs' as elsewhere.
-	(set_conflicts): Allocate and free this `errs'.
-
-2002-07-02  Akim Demaille  <akim@epita.fr>
-
-	* lib/libiberty.h: New.
-	* lib: Update the bitset implementation from upstream.
-	* src/closure.c, src/lalr.c, src/output.c, src/print_graph.c,
-	* src/state.c: Use BITSET_FOR_EACH, not BITSET_EXECUTE.
-	* src/main.c: Adjust bitset stats calls.
-
-2002-07-01  Paul Eggert  <eggert@twinsun.com>
-
-	* src/scan-gram.l (<SC_ESCAPED_CHARACTER>): Convert to unsigned
-	char, so that negative chars don't collide with $.
-
-2002-06-30  Akim Demaille  <akim@epita.fr>
-
-	Have the GLR tests be `warning' checked, and fix the warnings.
-
-	* data/glr.c (YYFPRINTF): Always define it, not only when YYDEBUG
-	(yyuserAction, yyreportAmbiguity): `Use' all the arguments.
-	(yyremoveDeletes): `yyi' and `yyj' are size_t.
-	Use YYFPRINTF when under if (YYDEBUG) to avoid empty `if' bodies.
-	(yyaddDeferredAction): static.
-	(yyglrReduce): yyi, yyk, amd yyposn are size_t.
-	(yyreportParseError): yyprefix is const.
-	yytokenp is used only when verbose.
-	(yy__GNUC__): Replace with __GNUC__.
-	(yypdumpstack): yyi is size_t.
-	(yypreference): Un-yy local variables and arguments, to avoid
-	clashes with `yyr1'.  Anyway, we are not in the user name space.
-	(yytname_size): be an int, as is compared with ints.
-	* tests/testsuite.at (AT_COMPILE, AT_PARSER_CHECK): New.
+	* data/bison.m4 (b4_output_begin, b4_output_end): New.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java,
+	* data/location.cc, data/stack.hh, data/yacc.c:
 	Use them.
-	* tests/cxx-gram.at: Use quotation to protect $1.
-	Use AT_COMPILE to enable warnings hunts.
-	Prototype yylex and yyerror.
-	`Use' argc.
-	Include `string.h', not `strings.h'.
-	Produce and prototype stmtMerge only when used.
-	yylex takes a location.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-12-03  Akim Demaille  <akim@lrde.epita.fr>
 
-	We spend a lot of time in quotearg, in particular when --verbose.
+	tests: beware of gnulib's need for config.h
+	* tests/skeletons.at, tests/torture.at: Be sure to include config.h
+	where appropriate.
 
-	* src/symtab.c (symbol_get): Store a quoted version of the key.
-	(symbol_tag_get, symbol_tag_get_n, symbol_tag_print): Remove.
-	Adjust all callers.
+2012-11-30  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	gnulib: update
+	* lib/yyerror.c: Include config.h since the following stdio.h might be
+	from gnulib.
 
-	* src/state.h (reductions_t): Rename member `nreds' as num.
-	(errs_t): Rename members `nerrs' and `errs' as `num' and `symbols'.
-	* src/state.c (ERRS_ALLOC, REDUCTIONS_ALLOC): Use the correct types.
+2012-11-30  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	yacc.c, glr.c: check and fix the display of locations
+	In some case, negative column number could be displayed.
+	Make YY_LOCATION_PRINT similar to bison's own implementation of
+	locations.  Since the macro is getting fat, make it a static
+	function.
+	Reported by Jonathan Fabrizio.
 
-	* src/state.h, src/state.c (shift_t, SHIFT_SYMBOL, SHIFT_IS_SHIFT)
-	(SHIFT_IS_GOTO, SHIFT_IS_ERROR, SHIFT_DISABLE, SHIFT_IS_DISABLED)
-	(shifts_to): Rename as...
-	(transition_t, TRANSITION_SYMBOL, TRANSITION_IS_TRANSITION)
-	(TRANSITION_IS_GOTO, TRANSITION_IS_ERROR, TRANSITION_DISABLE)
-	(TRANSITION_IS_DISABLED, transitions_to): these.
+	* data/c.m4 (yy_location_print_define): Improve the implementation,
+	and generate the yy_location_print_ function.
+	Adjust YY_LOCATION_PRINT.
+	* tests/actions.at (Location Print): New tests.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-30  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/print.c (print_shifts, print_gotos): Merge into...
-	(print_transitions): this.
-	(print_transitions, print_errs, print_reductions): Align the
-	lookaheads columns.
-	(print_core, print_transitions, print_errs, print_state,
-	print_grammar): Output empty lines separator before, not after.
-	(state_default_rule_compute): Rename as...
-	(state_default_rule): this.
-	* tests/conflicts.at (Defaulted Conflicted Reduction),
-	(Unresolved SR Conflicts, Resolved SR Conflicts): Adjust.
-	* tests/regression.at (Rule Line Numbers, Web2c Report): Adjust.
+	formatting changes
+	* data/c.m4: Fix comments, put macros in a more natural order.
+	Space changes (from M-x whitespace-cleanup).
+	* src/location.c: Fix spaces.
+	* tests/actions.at: Space changes.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-30  Akim Demaille  <akim@lrde.epita.fr>
 
-	Display items as we display rules.
+	glr.c: remove stray macro
+	* data/glr.c (YYOPTIONAL_LOC): Remove, unused since commit
+	769a8ef9bcb5e14d0be9d0869f5dca20ab093930.
 
-	* src/gram.h, src/gram.c (rule_lhs_print): New.
-	* src/gram.c (grammar_rules_partial_print): Use it.
-	* src/print.c (print_core): Likewise.
-	* tests/conflicts.at (Defaulted Conflicted Reduction),
-	(Unresolved SR Conflicts): Adjust.
-	(Unresolved SR Conflicts): Adjust and rename as...
-	(Resolved SR Conflicts): this, as was meant.
-	* tests/regression.at (Web2c Report): Adjust.
+2012-11-29  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	doc: minor fixes
+	* doc/bison.texi: Use stderr for error messages.
+	Meta-variables are usually spelled in lower case.
+	Use @code for function names.
 
-	* src/print.c (state_default_rule_compute): New, extracted from...
-	(print_reductions): here.
-	Pessimize, but clarify the code.
-	* tests/conflicts.at (Defaulted Conflicted Reduction): New.
+2012-11-29  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	doc: improve the index
+	* doc/bison.texi: Fix uses of "deffn" so that the arguments of the
+	directives do not show in the index.
+	Remove a duplicate entry for api.pure.
 
-	* src/output.c (action_row): Let default_rule be always a rule
-	number.
+2012-11-29  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	doc: introduce api.pure full, rearrange some examples
+	* NEWS: Add entry.
+	* doc/bison.texi (%define Summary): Show the old Yacc behaviour.
+	(Parser Function): Move parse-param examples here.
+	(Pure Calling): Remove parse-param examples.
+	(Error Reporting): Don't show the old behavior, stick to 'full'.
 
-	* src/closure.c (print_firsts, print_fderives, closure):
-	Use BITSET_EXECUTE.
-	* src/lalr.c (lookaheads_print): Likewise.
-	* src/state.c (state_rule_lookaheads_print): Likewise.
-	* src/print_graph.c (print_core): Likewise.
-	* src/print.c (print_reductions): Likewise.
-	* src/output.c (action_row): Likewise.
-	Use SHIFT_IS_DISABLED, SHIFT_IS_SHIFT and SHIFT_SYMBOL.
+2012-11-29  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	yacc.c: support "%define api.pure full"
+	This makes the interface for yyerror() pure without the need for a spurious
+	parse_param.
 
-	* src/print_graph.c: Use report_flag.
+	* data/yacc.c (b4_pure_if, b4_pure_flag): New definition, accept three states.
+	(b4_yacc_pure_if): Rename as...
+	(b4_yyerror_arg_loc_if): This, and use b4_pure_flag.
+	* tests/actions.at (%define api.pure): Modernize.
+	* test/calc.at (Simple LALR Calculator): Modernize.
+	* tests/local.at (AT_YYERROR_ARG_LOC_IF): Adjust.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* src/lalr.c (traverse, digraph, matrix_print, transpose): Move
-	to...
-	* src/relation.h, src/relation.c (traverse, relation_digraph)
-	(relation_print, relation_transpose): New.
+	local.at: improvements
+	* tests/local.at (AT_YYERROR_FORMALS): Make llocp const.
+	(AT_PURE_AND_LOC_IF, AT_GLR_OR_PARAM_IF): Remove, expand...
+	(AT_YYERROR_ARG_LOC_IF): Here, and use m4_join for readability.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/state.h, src/state.c (shifts_to): New.
-	* src/lalr.c (build_relations): Use it.
+	Merge remote-tracking branch 'origin/branch-2.6' into maint
+	* origin/branch-2.6:
+	  yacc.c: always initialize yylloc
+	  doc: one of the fixes for an ambiguous grammar was ambiguous too
+	  doc: fix the dangling else with precedence directives
+	  doc: prefer "token" to TOKEN
+	  doc: formatting changes
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-23  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* src/gram.h (rule_number_t, RULE_NUMBER_MAX, int_of_rule_number)
-	(item_number_of_rule_number, rule_number_of_item_number): New.
-	* src/LR0.c, src/closure.c, src/derives.c, src/derives.h,
-	* src/gram.c, src/lalr.c, src/nullable.c, src/output.c, src/print.c,
-	* src/print_graph.c, src/reader.c, src/reduce.c, src/reduce.h:
-	Propagate their use.
-	Much remains to be done, in particular wrt `shorts' from types.h.
+	yacc.c: always initialize yylloc
+	The initial location might be used if the parser starts by an empty
+	reduction, so really ensure proper initialization of the initial
+	location.  The previous approach fails for PostgreSQL, which uses
+	Reported by Peter Eisentraut.
+	http://lists.gnu.org/archive/html/bug-bison/2012-11/msg00023.html
+	With help from Théophile Ranquet.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	* data/yacc.c (b4_declare_scanner_communication_variables): Be sure
+	to initialize yylloc, even when its structure is unknown.
+	(yyparse): Simplify the call to b4_dollar_pushdef.
+	* tests/actions.at (Initial location): Check of similar pattern
+	as in the case of PostgreSQL.
 
-	* src/symtab.c (symbol_new): Initialize the `printer' member.
+2012-11-23  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	scanner: issue a single error for groups of invalid characters
+	* src/scan-gram.l: Scan groups of invalid characters together.
+	* tests/input.at, tests/named-refs.at: Adjust.
 
-	* src/LR0.c (save_reductions): Remove, replaced by...
-	* src/state.h, src/state.c (state_reductions_set): New.
-	(reductions, errs): Rename as...
-	(reductions_t, errs_t): these.
-	Adjust all dependencies.
+2012-11-23  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	tests: formatting changes
+	* tests/named-refs.at: Here.
 
-	* src/LR0.c (state_list_t, state_list_append): New.
-	(first_state, last_state): Now symbol_list_t.
-	(this_state): Remove.
-	(new_itemsets, append_states, save_reductions): Take a state_t as
-	argument.
-	(set_states, generate_states): Adjust.
-	(save_shifts): Remove, replaced by...
-	* src/state.h, src/state.c (state_shifts_set): New.
-	(shifts): Rename as...
-	(shifts_t): this.
-	Adjust all dependencies.
-	* src/state.h (state_t): Remove the `next' member.
+2012-11-23  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	doc: one of the fixes for an ambiguous grammar was ambiguous too
+	Reported by Аскар Сафин.
+	http://lists.gnu.org/archive/html/bug-bison/2012-11/msg00024.html
 
-	* src/vcg.c (quote): Use slot 2, since we often pass symbol tag
-	escaped in slot 0.
+	* doc/bison.texi (Reduce/Reduce): Fix the resulting ambiguity using
+	precedence/associativity directives.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	Use hash.h for the state hash table.
+	doc: fix the dangling else with precedence directives
+	* doc/bison.texi (Non Operators): New node.
+	(Shift/Reduce): Point to it.
+	Don't promote "%expect n" too much.
 
-	* src/LR0.c (STATE_HASH_SIZE, state_hash): Remove.
-	(allocate_storage): Use state_hash_new.
-	(free_storage): Use state_hash_free.
-	(new_state, get_state): Adjust.
-	* src/lalr.h, src/lalr.c (states): Move to...
-	* src/states.h (state_t): Remove the `link' member, no longer
-	used.
-	* src/states.h, src/states.c: here.
-	(state_hash_new, state_hash_free, state_hash_lookup)
-	(state_hash_insert, states_free): New.
-	* src/states.c (state_table, state_compare, state_hash): New.
-	* src/output.c (output_actions): Do not free states now, since we
-	still need to know the final_state number in `prepare', called
-	afterwards.  Do it...
-	* src/main.c (main): here: call states_free after `output'.
+2012-11-22  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+	doc: prefer "token" to TOKEN
+	This is more readable in short examples.
 
-	* src/state.h, src/state.c (state_new): New, extracted from...
-	* src/LR0.c (new_state): here.
-	* src/state.h (STATE_ALLOC): Move to...
-	* src/state.c: here.
-	* src/LR0.h, src/LR0.c (nstates, final_state): Move to...
-	* src/state.h, src/state.c: here.
+	* doc/bison.texi (Shift/Reduce): here.
+	Make "win" and "lose" action more alike.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reader.c (gensym): Rename as...
-	* src/symtab.h, src/symtab.c (dummy_symbol_get): this.
-	(getsym): Rename as...
-	(symbol_get): this.
+	doc: formatting changes
+	* doc/bison.texi: Use @group.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-14  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/state.h (state_number_t, STATE_NUMBER_MAX): New.
-	* src/LR0.c, src/LR0.h, src/conflicts.c, src/lalr.c, src/lalr.h,
-	* src/output.c, src/print.c, src/print_graph.c: Propagate.
-	* src/LR0.h, src/LR0.h (final_state): Is a state_t*.
+	scanner: use explicit "ignore" statements
+	* src/scan-gram.l: here.
 
-2002-06-30  Akim Demaille  <akim@epita.fr>
+2012-11-12  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	Make the test suite pass with warnings checked.
+	tests: close files in glr-regression
+	* tests/glr-regression.at: Here.
 
-	* tests/actions.at (Printers and Destructors): Improve.
-	Avoid unsigned vs. signed issues.
-	* tests/calc.at: Don't exercise the scanner here, do it...
-	* tests/input.at (Torturing the Scanner): here.
+2012-11-12  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-2002-06-28  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+	xml: match DOT output and xml2dot.xsl processing
+	Make the DOT produced by XSLT processing equivalent to the one made with the
+	--graph option.
 
-	* data/glr.c: Correct typo in Emacs-mode directive.  Slightly
-	reorganize first lines parallel to yacc.c.
+	* data/xslt/xml2dot.xsl: Stylistic changes, and add support for reductions.
+	* doc/bison.texi (Xml): Update.
+	* src/graphviz.c (conclude_red): Minor stylistic changes to DOT internals.
+	(output_red): Swap enabled and disabled reductions output, for coherence
+	with XSLT output.
+	* src/print_graph.c (print_core): Minor stylistic change to States' output.
+	(print_actions): Swap order of output for reductions and transitions.
+	* tests/local.at (AT_BISON_CHECK_XML): Ignore differences in order.
+	* tests/output.at: Adjust to changes in DOT internals.
 
-2002-06-28  Akim Demaille  <akim@epita.fr>
+2012-11-12  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* data/c.m4 (b4_copyright, b4_sint_type, b4_uint_type, b4_token_define)
-	(b4_token_enum, b4_token_defines): New, factored from...
-	* data/lalr1.cc, data/yacc.c, glr.c: here.
+	xml: factor xslt space template
+	* data/xslt/bison.xsl (space): New, import from...
+	* data/xslt/xml2text.xsl: Here.
 
-2002-06-28  Akim Demaille  <akim@epita.fr>
+2012-11-12  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* data/yacc.c (yydestruct, yysymprint): Pacify GCC warnings for
-	unused variables.
-	* src/output.c (merger_output): static.
+	graph: fix a memory leak
+	* src/graphviz.c (output_red): Here.
 
-2002-06-28  Akim Demaille  <akim@epita.fr>
+2012-11-12  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* src/reader.h: s/grammer_current_rule_merge_set/grammar_.../.
-	* src/conflicts.c (conflicts_total_count): `i' is unsigned, to
-	pacify GCC.
-	* src/output.c (save_row): Initialize all the variables to pacify GCC.
+	xml: documentation
+	The XML output combined with the XSL Transformations provided in data/ are
+	incredibly useful, they should be documented.
 
-2002-06-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+	* doc/bison.texi (Xml): New node.
 
-	Accumulated changelog for new GLR parsing features.
+2012-11-12  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* src/conflicts.c (count_total_conflicts): Change name to
-	conflicts_total_count.
-	* src/conflicts.h: Ditto.
-	* src/output.c (token_actions): Use the new name.
-	(output_conflicts): Change conflp => conflict_list_heads, and
-	confl => conflict_list for better readability.
-	* data/glr.c: Use the new names.
-	* NEWS: Add self to GLR announcement.
+	output: capitalize State
+	* src/print.c (print_state): Here.
+	* tests/conflicts.at, tests/existing.at, tests/local.at, tests/reduce.at,
+	tests/regression.at, tests/sets.at: Adjust.
 
-	* src/reader.c (free_merger_functions): Cleanup: XFREE->free.
+2012-11-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* doc/bison.texinfo (GLR Parsers): Make corrections suggested by
-	Akim Demaille.
+	maint: address syntax-check errors.
+	* cfg.mk: Ignore the "error" call in tests/c++.at, it is not to be
+	translated.
+	* doc/bison.texi: Fix incorrect @pxref use.
+	* po/POTFILES.in: Add missing file.
+	* src/print_graph.c: Remove useless include.
 
-	* data/bison.glr: Change name to glr.c
-	* data/glr.c: Renamed from bison.glr.
-	* data/Makefile.am: Add glr.c
+2012-11-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/getargs.c:
+	tests: use valgrind where appropriate
+	Reported by Théophile Ranquet.
 
-	* src/symlist.h:  Add dprec and merger fields to symbol_list_s.
-	* src/symlist.c (symbol_list_new): Initialize dprec and merger fields.
+	* cfg.mk (sc_at_parser_check): New.
+	* tests/c++.at: Fix use of AT_CHECK vs. AT_PARSER_CHECK.
 
-	Originally 2002-06-16  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+2012-11-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/bison.glr: Be sure to restore the
-	current #line when returning to the skeleton contents after having
-	exposed the input file's #line.
+	Merge remote-tracking branch 'origin/branch-2.6' into maint
+	* origin/branch-2.6:
+	  tests: use valgrind where appropriate
+	  tests: don't expect $EGREP to support -w
 
-	Originally 2002-06-13  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+2012-11-10  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/bison.glr: Bring up to date with changes to bison.simple.
+	tests: use valgrind where appropriate
+	Reported by Théophile Ranquet.
 
-	Originally 2002-06-03  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+	* tests/glr-regression.at: Rewrite some test cases so that AT_PARSER_CHECK,
+	which runs valgrind, is exposed with the parser, not with "echo".
+	* tests/local.at, tests/regression.at, tests/headers.at:
+	Use AT_PARSER_CHECK for generated parsers.
 
-	* data/bison.glr: Correct definitions that use b4_prefix.
-	Various reformatting.
-	(GLRStack): Make yychar (in YYPURE case) and yytokenp as part of stack.
-	(yyreportParseError, yyrecoverParseError, yyprocessOneStack): remove
-	yytokenp argument; now part of stack.
-	(yychar): Define to behave as documented.
-	(yyclearin): Ditto.
+2012-11-08  Akim Demaille  <akim@lrde.epita.fr>
 
-	Originally 2002-05-14  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+	tests: don't expect $EGREP to support -w
+	Does not work on Solaris 10.  Reported by Dennis Clarke.
+	http://lists.gnu.org/archive/html/bug-bison/2012-11/msg00009.html
+	* tests/headers.at (Several parsers): Use Perl instead.
+	While at it, run it only once, on all the generated headers.
+	Adjust to YY_NULL be defined in position.hh.
 
-	* src/reader.h: Add declaration for free_merger_functions.
+2012-11-08  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reader.c (merge_functions): New variable.
-	(get_merge_function): New function.
-	(free_merger_functions): New function.
-	(readgram): Check for %prec that is not followed by a symbol.
-	Handle %dprec and %merge declarations.
-	(packgram): Initialize dprec and merger fields in rules array.
+	tests: more possible error compiler messages for "#error"
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Adjust for Clang.
+	Verified with GCC 4.0, 4.2 to 4.8, and Clang 2.9, 3.2: none skip.
 
-	* src/output.c (conflict_tos, conflrow, conflict_table, conflict_list,
-	conflict_list_cnt, conflict_list_free): New variables.
-	(table_grow): Also grow conflict_table.
-	(prepare_rules): Output dprec and merger tables.
-	(conflict_row): New function.
-	(action_row): Output conflict lists for GLR parser.  Don't use
-	default reduction in conflicted states for GLR parser so that there
-	are spaces for the conflict lists.
-	(save_row): Also save conflict information.
-	(token_actions): Allocate conflict list.
-	(merger_output): New function.
-	(pack_vector): Pack conflict table, too.
-	(output_conflicts): New function to output yyconflp and yyconfl.
-	(output_check): Allocate conflict_tos.
-	(output_actions): Output conflict tables, also.
-	(output_skeleton): Output b4_mergers definition.
-	(prepare): Output b4_max_rhs_length definition.
-	Use 'bison.glr' as default skeleton for GLR parsers.
-
-	* src/gram.c (glr_parser): New flag.
-	(grammar_free): Call free_merger_functions.
-
-	* src/conflicts.c (count_rr_conflicts): Augment to optionally count
-	all pairs of conflicting reductions, rather than just all tokens
-	causing conflicts.  Needed to size conflict tables.
-	(conflicts_output): Modify call to count_rr_conflicts for new
-	interface.
-	(conflicts_print): Ditto.
-	(count_total_conflicts): New function.
-
-	* src/reader.h (merger_list): New type.
-	(merge_functions): New variable.
-
-	* src/lex.h (tok_dprec, tok_merge): New token types.
-
-	* src/gram.h (rule_s): Add dprec and merger fields.
-	(glr_parser): New flag.
-
-	* src/conflicts.h (count_total_conflicts): New function.
-
-	* src/options.c (option_table): Add %dprec, %merge, and %glr-parser.
-
-	* doc/bison.texinfo (Generalized LR Parsing): New section.
-	(GLR Parsers): New section.
-	(Language and Grammar): Mention GLR parsing.
-	(Table of Symbols): Add %dprec, %glr-parser, %merge, GLR
-	Correct typo ("tge" -> "the").
-
-	* data/bison.glr: New skeleton for GLR parsing.
-
-	* tests/cxx-gram.at: New tests for GLR parsing.
-
-	* tests/testsuite.at: Include cxx-gram.at.
-
-	* tests/Makefile.am: Add cxx-gram.at.
-
-	* src/parse-gram.y:
-
-	* src/scan-gram.l: Add %dprec, %glr-parser, %merge.
-
-	* src/parse-gram.y: Grammar for %dprec, %merge, %glr-parser.
-
-2002-06-27  Akim Demaille  <akim@epita.fr>
-
-	* src/options.h, src/options.c: Remove.
-	* src/getargs.c (short_options, long_options): New.
-
-2002-06-27  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple, data/bison.c++: Rename as...
-	* data/yacc.c, data/lalr1.cc: these.
-	* doc/bison.texinfo (Environment Variables): Remove.
-
-2002-06-25  Raja R Harinath  <harinath@cs.umn.edu>
-
-	* src/getargs.c (report_argmatch): Initialize strtok().
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (b4_symbol_actions): New, replaces...
-	(b4_symbol_destructor, b4_symbol_printer): these.
-	(yysymprint): Be sure to call YYPRINT only for tokens, and using
-	user token numbers.
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (yydestructor): Rename as...
-	(yydestruct): this.
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.h, src/symtab.c (symbol_type_set)
-	(symbol_destructor_set, symbol_precedence_set): The location is
-	the last argument.
-	Adjust all callers.
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y (YYPRINT, yyprint): Don't mess with the parser
-	internals.
-	* src/reader.h, src/reader.c (grammar_current_rule_prec_set):
-	Takes a location.
-	* src/symtab.h, src/symtab.c (symbol_class_set)
-	(symbol_user_token_number_set): Likewise.
-	Adjust all callers.
-	Promote complain_at.
-	* tests/input.at (Type Clashes): Adjust.
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (YYLEX): Fix the declaration when
-	%pure-parser.
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (yysymprint): Don't print the token number,
-	just its name.
-	* tests/actions.at (Destructors): Rename as...
-	(Printers and Destructors): this.
-	Also exercise %printer.
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (YYDSYMPRINT): New.
-	Use it to remove many of the #if YYDEBUG/if (yydebug).
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.h, src/symtab.c (symbol_t): printer and
-	printer_location are new members.
-	(symbol_printer_set): New.
-	* src/parse-gram.y (PERCENT_PRINTER): New token.
-	Handle its associated rule.
-	* src/scan-gram.l: Adjust.
-	(handle_destructor_at, handle_destructor_dollar): Rename as...
-	(handle_symbol_code_at, handle_symbol_code_dollar): these.
-	* src/output.c (symbol_printers_output): New.
-	(output_skeleton): Call it.
-	* data/bison.simple (yysymprint): New.  Cannot be named yyprint
-	since there are already many grammar files with a user `yyprint'.
-	Replace the calls to YYPRINT to calls to yysymprint.
-	* tests/calc.at: Adjust.
-	* tests/torture.at (AT_DATA_STACK_TORTURE): Remove YYPRINT: it was
-	taking advantage of parser very internal details (stack size!).
-
-2002-06-20  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l: Complete the scanner with the missing patterns
-	to pacify Flex.
-	Use `quote' and `symbol_tag_get' where appropriate.
-
-2002-06-19  Akim Demaille  <akim@epita.fr>
-
-	* tests/actions.at (Destructors): Augment to test locations.
-	* data/bison.simple (yydestructor): Pass it the current location
-	if locations are enabled.
-	Prototype only when __STDC__ or C++.
-	Change the argument names to move into the yy name space: there is
-	user code here.
-
-2002-06-19  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (b4_pure_if): New.
-	Use it instead of #ifdef YYPURE.
-
-2002-06-19  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (b4_location_if): New.
-	Use it instead of #ifdef YYLSP_NEEDED.
-
-2002-06-19  Akim Demaille  <akim@epita.fr>
-
-	Prepare @$ in %destructor, but currently don't bind it in the
-	skeleton, as %location use is not cleaned up yet.
-
-	* src/scan-gram.l (handle_dollar, handle_destructor_at)
-	(handle_action_at): New.
-	(handle_at, handle_action_dollar, handle_destructor_dollar): Take
-	a braced_code_t and a location as additional arguments.
-	(handle_destructor_dollar): Instead of requiring `b4_eval', just
-	unquote one when outputting `b4_dollar_dollar'.
-	Adjust callers.
-	* data/bison.simple (b4_eval): Remove.
-	(b4_symbol_destructor): Adjust.
-	* tests/input.at (Invalid @n): Adjust.
-
-2002-06-19  Zack Weinberg  <zack@codesourcery.com>
-
-	* doc/bison.texinfo: Document ability to have multiple
-	prologue sections.
-
-2002-06-18  Akim Demaille  <akim@epita.fr>
-
-	* src/files.c (compute_base_names): When computing the output file
-	names from the input file name, strip the directory part.
-
-2002-06-18  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple.new: Comment changes.
-	Reported by Andreas Schwab.
-
-2002-06-18  Matt Kraai  <kraai@alumni.cmu.edu>
-
-	* data/bison.simple (yyoverflowlab): #ifndef yyoverflow, so that
-	there are no `label `yyoverflowlab' defined but not used' warnings
-	when yyoverflow is defined.
-
-2002-06-18  Akim Demaille  <akim@epita.fr>
+2012-11-08  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/symtab.h, src/symtab.c (symbol_t): destructor_location is a
-	new member.
-	(symbol_destructor_set): Adjust.
-	* src/output.c (symbol_destructors_output): Output the destructor
-	locations.
-	Output the symbol name.
-	* data/bison.simple (b4_symbol_destructor): Adjust.
+	regen
 
-2002-06-18  Cris Bailiff  <c.bailiff@awayweb.com>
-	and Akim Demaille  <akim@epita.fr>
+2012-11-08  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/bison.simple.new (yyerrlab1): Be sure to pop and destroy
-	what's left on the stack when the error recovery hits EOF.
-	* tests/actions.at (Destructors): Complete to exercise this case.
+	Merge branch 'branch-2.6' into maint
+	* origin/branch-2.6:
+	  maint: post-release administrivia
+	  version 2.6.5
+	  regen
+	  tests: syntax-check
+	  tests: beware of compilers that do not support POSIXLY_CORRECT
+	  gnulib: update
 
-2002-06-17  Akim Demaille  <akim@epita.fr>
+2012-11-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* data/m4sugar/m4sugar.m4 (m4_map): Recognize when the list of
-	arguments is really empty, not only equal to `[]'.
-	* src/symtab.h, src/symtab.c (symbol_t): `destructor' is a new
-	member.
-	(symbol_destructor_set): New.
-	* src/output.c (symbol_destructors_output): New.
-	* src/reader.h (brace_code_t, current_braced_code): New.
-	* src/scan-gram.l (BRACED_CODE): Use it to branch on...
-	(handle_dollar): Rename as...
-	(handle_action_dollar): this.
-	(handle_destructor_dollar): New.
-	* src/parse-gram.y (PERCENT_DESTRUCTOR): New.
-	(grammar_declaration): Use it.
-	* data/bison.simple (yystos): Is always defined.
-	(yydestructor): New.
-	* tests/actions.at (Destructors): New.
-	* tests/calc.at (_AT_CHECK_CALC_ERROR): Don't rely on egrep.
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
 
-2002-06-17  Akim Demaille  <akim@epita.fr>
+2012-11-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/symlist.h, src/symlist.c (symbol_list_length): New.
-	* src/scan-gram.l (handle_dollar, handle_at): Compute the
-	rule_length only when needed.
-	* src/output.c (actions_output, token_definitions_output): Output
-	the full M4 block.
-	* src/symtab.c: Don't access directly to the symbol tag, use
-	symbol_tag_get.
-	* src/parse-gram.y: Use symbol_list_free.
+	version 2.6.5
+	* NEWS: Record release date.
 
-2002-06-17  Akim Demaille  <akim@epita.fr>
+2012-11-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reader.h, src/reader.c (symbol_list, symbol_list_new)
-	(symbol_list_prepend, get_type_name): Move to...
-	* src/symlist.h, src/symlist.c (symbol_list_t, symbol_list_new)
-	(symbol_list_prepend, symbol_list_n_type_name_get): here.
-	Adjust all callers.
-	(symbol_list_free): New.
-	* src/scan-gram.l (handle_dollar): Takes a location.
-	* tests/input.at (Invalid $n): Adjust.
+	regen
 
-2002-06-17  Akim Demaille  <akim@epita.fr>
+2012-11-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reader.h, src/reader.c (symbol_list_new): Export it.
-	(symbol_list_prepend): New.
-	* src/parse-gram.y (%union): `list' is a new member.
-	(symbols.1): New, replaces...
-	(terms_to_prec.1, nterms_to_type.1): these.
-	* src/symtab.h, src/symtab.c (symbol_type_set, symbol_precedence_set)
-	Take a location as additional argument.
-	Adjust all callers.
+	tests: syntax-check
+	* tests/actions.at: Fix typo.
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
+2012-11-07  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/parse-gram.y: Move %token in the declaration section so that
-	we don't depend upon CVS Bison.
+	tests: beware of compilers that do not support POSIXLY_CORRECT
+	Running "maintainer-release-check" on OS X with Clang 2.9 fails,
+	because "clang-mp-2.9 -o test -g test.c" launches "/usr/bin/dsymutil
+	test -o test.dSYM" which fails with "error: unable to open executable
+	'-o'".
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
+	* m4/c-working.m4 (BISON_CHECK_WITH_POSIXLY_CORRECT)
+	(BISON_C_COMPILER_POSIXLY_CORRECT): New.
+	* configure.ac: Use the latter.
+	* tests/atlocal.in (POSIXLY_CORRECT_IS_EXPORTED): New.
+	* tests/local.at (AT_BISON_CHECK_WARNINGS_): Use it instead of computing its
+	value each time.
+	(AT_QUELL_VALGRIND): Skip tests that cannot work because of compilers
+	that do not support POSIXLY_CORRECT.
 
-	* src/state.h, src/state.c (state_rule_lookaheads_print): New.
-	* src/print.c (print_core): Use it.
+2012-11-07  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	* src/conflicts.c (log_resolution): Accept the rule involved in
-	the sr conflicts instead of the lookahead number that points to
-	that rule.
-	(flush_reduce): Accept the current lookahead vector as argument,
-	instead of the index in LA.
-	(resolve_sr_conflict): Accept the current number of lookahead
-	bitset to consider for the STATE, instead of the index in LA.
-	(set_conflicts): Adjust.
-	* src/lalr.c, src/lalr.h, src/state.h: Comment changes.
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
+	Merge branch 'branch-2.6' into maint
+	* origin/branch-2.6: (24 commits)
+	  tests: calc: modernize the use of locations
+	  tests: remove useless location initializations
+	  lalr1.cc: always initialize yylval.
+	  tests: check that C and C++ objects can be linked together.
+	  yacc.c: also disable -Wuninitialized.
+	  glr.cc, yacc.c: initialize yylloc properly
+	  yacc.c, glr.c: a better YY_LOCATION_PRINT
+	  yacc.c: simplify initialization
+	  doc: formatting changes
+	  c++: fix position operator signatures
+	  tests: remove useless location initialization.
+	  tests: fix locations in C
+	  tests: handle %parse-param in the generated yyerror
+	  tests: simplifications
+	  grammars: fix display of nul character in error message
+	  tests: sort
+	  tests: cosmetic changes
+	  comment changes
+	  autoconf: update
+	  gnulib: update
+	  ...
 
-	* src/state.h (state_t): Replace the `lookaheadsp' member, a
-	short, with `lookaheads' (bitsetv), `lookaheads_rule' (rule_t**).
-	Adjust all dependencies.
-	* src/lalr.c (initialize_lookaheads): Split into...
-	(states_lookaheads_count, states_lookaheads_initialize): these.
-	(lalr): Adjust.
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
+	tests: calc: modernize the use of locations
+	* tests/calc.at: Don't initialize the location, let the parser
+	do it.
+	Use a $printer.
+	Change some testing input to be easier to distinguish (instead of always
+	"0 0" for instance).
 
-	* src/gram.h, src/gram.c (grammar_rules_partial_print): New, eved
-	out of...
-	(grammar_rules_print): here.
-	* src/reduce.c (reduce_output): Use it.
-	* tests/reduce.at (Useless Rules, Reduced Automaton)
-	(Underivable Rules): Adjust.
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
+	tests: remove useless location initializations
+	* tests/actions.at, tests/calc.at: here.
 
-	Copy BYacc's nice way to report the grammar.
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/gram.h, src/gram.c (grammar_rhs_print, grammar_rules_print):
-	New.
-	Don't print the rules' location, it is confusing and useless.
-	(rule_print): Use grammar_rhs_print.
-	* src/print.c (print_grammar): Use grammar_rules_print.
+	lalr1.cc: always initialize yylval.
+	* data/lalr1.cc: here.
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-	Complete and rationalize `useless thing' warnings.
+	tests: check that C and C++ objects can be linked together.
+	* tests/local.at (AT_SKIP_IF_CANNOT_LINK_C_AND_CXX): New.
+	* tests/headers.at (Several parsers): Use it.
 
-	* src/symtab.h, src/symtab.c (symbol_tag_get, symbol_tag_get_n)
-	(symbol_tag_print): New.
-	Use them everywhere in place of accessing directly the tag member.
-	* src/gram.h, src/gram.c (rule_print): New.
-	Use it where a rule used to be printed `by hand'.
-	* src/reduce.c (nonterminals_reduce): Report the use nonterminals.
-	(reduce_grammar_tables): Report the useless rules.
-	(reduce_print): Useless things are a warning, not an error.
-	Report it as such.
-	* tests/reduce.at (Useless Nonterminals, Useless Rules):
-	(Reduced Automaton, Underivable Rules): Adjust.
-	* tests/regression.at (Web2c Report, Web2c Report): Adjust.
-	* tests/conflicts.at (Unresolved SR Conflicts)
-	(Solved SR Conflicts): Adjust.
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
+	yacc.c: also disable -Wuninitialized.
+	* data/yacc.c (YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN): For some versions
+	of GCC, -Wmaybe-uninitialized alone does not suffice.
 
-	Let symbols have a location.
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/symtab.h, src/symtab.c (symbol_t): Location is a new member.
-	(getsym): Adjust.
-	Adjust all callers.
-	* src/complain.h, src/complain.c (complain_at, fatal_at, warn_at):
-	Use location_t, not int.
-	* src/symtab.c (symbol_check_defined): Take advantage of the
+	glr.cc, yacc.c: initialize yylloc properly
+	There are several issues to address here.  One is that yylloc should
+	be initialized when possible.  Another is that the push parser needs
+	to update yypushed_loc when the user modified it.  And if the parser
+	starts by a reduction of an empty, it uses the first location on the
+	stack, which, therefore, must also be initialized to this initial
 	location.
-	* tests/regression.at (Invalid inputs): Adjust.
 
-2002-06-15  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y (YYLLOC_DEFAULT, current_lhs_location): New.
-	(input): Don't try to initialize yylloc here, do it in the
-	scanner.
-	* src/scan-gram.l (YY_USER_INIT): Initialize yylloc.
-	* src/gram.h (rule_t): Change line and action_line into location
-	and action_location, of location_t type.
-	Adjust all dependencies.
-	* src/location.h, src/location.c (empty_location): New.
-	* src/reader.h, src/reader.c (grammar_start_symbol_set)
-	(grammar_symbol_append, grammar_rule_begin, grammar_rule_end)
-	(grammar_current_rule_symbol_append)
-	(grammar_current_rule_action_append): Expect a location as argument.
-	* src/reader.c (grammar_midrule_action): Adjust to attach an
-	action's location as dummy symbol location.
-	* src/symtab.h, src/symtab.c (startsymbol_location): New.
-	* tests/regression.at (Web2c Report, Rule Line Numbers): Adjust
-	the line numbers.
-
-2002-06-14  Akim Demaille  <akim@epita.fr>
-
-	Grammar declarations may be found in the grammar section.
-
-	* src/parse-gram.y (rules_or_grammar_declaration): New.
-	(declarations): Each declaration may end with a semicolon, not
-	just...
-	(grammar_declaration): `"%union"'.
-	(grammar): Branch to rules_or_grammar_declaration.
-
-2002-06-14  Akim Demaille  <akim@epita.fr>
-
-	* src/main.c (main): Invoke scanner_free.
-
-2002-06-14  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (m4_invoke): Extracted from...
-	(output_skeleton): here.
-	Free tempfile.
-
-2002-06-14  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-gram.y (directives, directive, gram)
-	(grammar_directives, precedence_directives, precedence_directive):
-	Rename as...
-	(declarations, declaration, grammar, grammar_declaration)
-	(precedence_declaration, precedence_declarator): these.
-	(symbol_declaration): New.
-
-2002-06-14  Akim Demaille  <akim@epita.fr>
-
-	* src/files.c (action_obstack): Remove, unused.
-	(output_obstack): Remove it, and all its dependencies, as it is no
-	longer needed.
-	* src/reader.c (epilogue_set): Build the epilogue in the
-	muscle_obstack.
-	* src/output.h, src/output.c (muscle_obstack): Move to...
-	* src/muscle_tab.h, src/muscle_tab.h: here.
-	(muscle_init): Initialize muscle_obstack.
-	(muscle_free): New.
-	* src/main.c (main): Call it.
-
-2002-06-14  Akim Demaille  <akim@epita.fr>
-
-	* src/location.h: New, extracted from...
-	* src/reader.h: here.
-	* src/Makefile.am (noinst_HEADERS): Merge into
-	(bison_SOURCES): this.
-	Add location.h.
-	* src/parse-gram.y: Use location_t instead of Bison's.
-	* src/reader.h, src/reader.c (prologue_augment, epilogue_set):
-	Use location_t instead of ints.
-
-2002-06-14  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple, data/bison.c++: Be sure to restore the
-	current #line when returning to the skeleton contents after having
-	exposed the input file's #line.
-
-2002-06-12  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l (SC_BRACED_CODE): Don't use `<.*>', it is too
-	eager.
-	* tests/actions.at (Exotic Dollars): New.
-
-2002-06-12  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l (SC_PROLOGUE): Don't eat characters amongst
-	['"/] too eagerly.
-	* tests/input.at (Torturing the Scanner): New.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l (YY_OBS_INIT): Remove, replace with...
-	[SC_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,SC_PROLOGUE]
-	[SC_EPILOGUE]: Output the quadrigraphs only when not in a comment.
-	* src/reader.h, src/scan-gram.l (scanner_initialize): this.
-	* src/reader.c (reader): Use it.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l (YY_OBS_FINISH): Don't set yylval.
-	Adjust all callers.
-	(scanner_last_string_free): New.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	* src/scan-gram.l (YY_INIT, YY_GROW, YY_FINISH): Rename as...
-	(YY_OBS_INIT, YY_OBS_GROW, YY_OBS_FINISH): these.
-	(last_string, YY_OBS_FREE): New.
-	Use them when returning an ID.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	Have Bison grammars parsed by a Bison grammar.
-
-	* src/reader.c, src/reader.h (prologue_augment): New.
-	* src/reader.c (copy_definition): Remove.
-
-	* src/reader.h, src/reader.c (gram_start_symbol_set, prologue_augment)
-	(grammar_symbol_append, grammar_rule_begin, grammar_midrule_action)
-	(grammar_current_rule_prec_set, grammar_current_rule_check)
-	(grammar_current_rule_symbol_append)
-	(grammar_current_rule_action_append): Export.
-	* src/parse-gram.y (symbol_list_new, symbol_list_symbol_append_
-	(symbol_list_action_append): Remove.
-	Hook the routines from reader.
-	* src/scan-gram.l: In INITIAL, characters and strings are tokens.
-	* src/system.h (ATTRIBUTE_NORETURN, ATTRIBUTE_UNUSED): Now.
-
-	* src/reader.c (read_declarations): Remove, unused.
-
-	* src/parse-gram.y: Handle the epilogue.
-	* src/reader.h, src/reader.c (gram_start_symbol_set): Rename as...
-	(grammar_start_symbol_set): this.
-	* src/scan-gram.l: Be sure to ``use'' yycontrol to keep GCC quiet.
-	* src/reader.c (readgram): Remove, unused.
-	(reader): Adjust to insert eoftoken and axiom where appropriate.
-
-	* src/reader.c (copy_dollar): Replace with...
-	* src/scan-gram.h (handle_dollar): this.
-	* src/parse-gram.y: Remove `%thong'.
-
-	* src/reader.c (copy_at): Replace with...
-	* src/scan-gram.h (handle_at): this.
-
-	* src/complain.h, src/complain.c (warn_at, complain_at, fatal_at):
-	New.
-
-	* src/scan-gram.l (YY_LINES): Keep lineno synchronized for the
-	time being.
-
-	* src/reader.h, src/reader.c (grammar_rule_end): New.
-
-	* src/parse.y (current_type, current_class): New.
-	Implement `%nterm', `%token' support.
-	Merge `%term' into `%token'.
-	(string_as_id): New.
-	* src/symtab.h, src/symtab.c (symbol_make_alias): Don't pass the
-	type name.
-
-	* src/parse-gram.y: Be sure to handle properly the beginning of
-	rules.
-
-	* src/parse-gram.y: Handle %type.
-	* src/reader.c (grammar_rule_end): Call grammar_current_rule_check.
-
-	* src/parse-gram.y: More directives support.
-	* src/options.c: No longer handle source directives.
-
-	* src/parse-gram.y: Fix %output.
-
-	* src/parse-gram.y: Handle %union.
-	Use the prologue locations.
-	* src/reader.c (parse_union_decl): Remove.
-
-	* src/reader.h, src/reader.c (epilogue_set): New.
-	* src/parse-gram.y: Use it.
-
-	* data/bison.simple, data/bison.c++: b4_stype is now either not
-	defined, then default to int, or to the contents of %union,
-	without `union' itself.
-	Adjust.
-	* src/muscle_tab.c (muscle_init): Don't predefine `stype'.
-
-	* src/output.c (actions_output): Don't output braces, as they are
-	already handled by the scanner.
-
-	* src/scan-gram.l (SC_CHARACTER): Set the user_token_number of
-	characters to themselves.
-
-	* tests/reduce.at (Reduced Automaton): End the grammars with %% so
-	that the epilogue has a proper #line.
-
-	* src/parse-gram.y: Handle precedence/associativity.
-
-	* src/symtab.c (symbol_precedence_set): Requires the symbol to be
-	a terminal.
-	* src/scan-gram.l (SC_BRACED_CODE): Catch strings and characters.
-	* tests/calc.at: Do not use `%token "foo"' as it makes not sense
-	at all to define terminals that cannot be emitted.
-
-	* src/scan-gram.l: Escape M4 characters.
-
-	* src/scan-gram.l: Working properly with escapes in user
-	strings/characters.
-
-	* tests/torture.at (AT_DATA_TRIANGULAR_GRAMMAR)
-	(AT_DATA_HORIZONTAL_GRAMMAR): Respect the `%token ID NUM STRING'
-	grammar.
-	Use more modest sizes, as for the time being the parser does not
-	release memory, and therefore the process swallows a huge amount
-	of memory.
-
-	* tests/torture.at (AT_DATA_LOOKAHEADS_GRAMMAR): Adjust to the
-	stricter %token grammar.
-
-	* src/symtab.h (associativity): Add `undef_assoc'.
-	(symbol_precedence_set): Do nothing when passed an undef_assoc.
-	* src/symtab.c (symbol_check_alias_consistence): Adjust.
-
-	* tests/regression.at (Invalid %directive): Remove, as it is now
-	meaningless.
-	(Invalid inputs): Adjust to the new error messages.
-	(Token definitions): The new grammar doesn't allow too many
-	eccentricities.
-
-	* src/lex.h, src/lex.c: Remove.
-	* src/reader.c (lastprec, skip_to_char, read_signed_integer)
-	(copy_character, copy_string2, copy_string, copy_identifier)
-	(copy_comment, parse_token_decl, parse_type_decl, parse_assoc_decl)
-	(parse_muscle_decl, parse_dquoted_param, parse_skel_decl)
-	(parse_action): Remove.
-	* po/POTFILES.in: Adjust.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (parse_action): Don't store directly into the
-	rule's action member: return the action as a string.
-	Don't require `rule_length' as an argument: compute it.
-	(grammar_current_rule_symbol_append)
-	(grammar_current_rule_action_append): New, eved out from
-	(readgram): here.
-	Remove `action_flag', `rulelength', unused now.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (grammar_current_rule_prec_set).
-	(grammar_current_rule_check): New, eved out from...
-	(readgram): here.
-	Remove `xaction', `first_rhs': useless.
-	* tests/input.at (Type clashes): New.
-	* tests/existing.at (GNU Cim Grammar): Adjust.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (grammar_midrule_action): New, Eved out from
-	(readgram): here.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (grammar_rule_begin, previous_rule, current_rule):
-	New.
-	(readgram): Use them as replacement of inlined code, crule and
-	crule1.
-
-2002-06-11  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (grammar_end, grammar_symbol_append): New.
-	(readgram): Use them.
-	Make the use of `p' as local as possible.
-
-2002-06-10  Akim Demaille  <akim@epita.fr>
-
-	GCJ's parser requires the tokens to be defined before the prologue.
-
-	* data/bison.simple: Output the token definition before the user's
-	prologue.
-	* tests/regression.at (Braces parsing, Duplicate string)
-	(Mixing %token styles): Check the output from bison.
-	(Early token definitions): New.
-
-2002-06-10  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.c (symbol_user_token_number_set): Don't complain when
-	assigning twice the same user number to a token, so that we can
-	use it in...
-	* src/lex.c (lex): here.
-	Also use `symbol_class_set' instead of hand written code.
-	* src/reader.c (parse_assoc_decl): Likewise.
-
-2002-06-10  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.c, src/symtab.c (symbol_class_set)
-	(symbol_user_token_number_set): New.
-	* src/reader.c (parse_token_decl): Use them.
-	Use a switch instead of ifs.
-	Use a single argument.
-
-2002-06-10  Akim Demaille  <akim@epita.fr>
-
-	Remove `%thong' support as it is undocumented, unused, duplicates
-	`%token's job, and creates useless e-mail traffic with people who
-	want to know what it is, why it is undocumented, unused, and
-	duplicates `%token's job.
-
-	* src/reader.c (parse_thong_decl): Remove.
-	* src/options.c (option_table): Remove "thong".
-	* src/lex.h (tok_thong): Remove.
-
-2002-06-10  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.c, src/symtab.c (symbol_type_set)
-	(symbol_precedence_set): New.
-	* src/reader.c (parse_type_decl, parse_assoc_decl): Use them.
-	(value_components_used): Remove, unused.
-
-2002-06-09  Akim Demaille  <akim@epita.fr>
-
-	Move symbols handling code out of the reader.
-
-	* src/reader.h, src/reader.c (errtoken, undeftoken, eoftoken)
-	(axiom): Move to...
-	* src/symtab.h, src/symtab.c: here.
-
-	* src/gram.c (start_symbol): Remove: use startsymbol->number.
-	* src/reader.c (startval): Rename as...
-	* src/symtab.h, src/symtab.c (startsymbol): this.
-	* src/reader.c: Adjust.
-
-	* src/reader.c (symbol_check_defined, symbol_make_alias)
-	(symbol_check_alias_consistence, symbol_pack, symbol_translation)
-	(token_translations_init)
-	Move to...
-	* src/symtab.c: here.
-	* src/reader.c (packsymbols): Move to...
-	* src/symtab.h, src/symtab.c (symbols_pack): here.
-	* src/symtab.h, src/symtab.c (symbol_make_alias): Takes SYMVAL as
-	argument.
-
-2002-06-03  Akim Demaille  <akim@epita.fr>
-
-	* src/muscle_tab.c (muscle_insert, muscle_find): Declarations,
-	then statements.
-
-2002-06-03  Akim Demaille  <akim@epita.fr>
-
-	* src/muscle_tab.c (muscle_find, muscle_insert): Don't initialize
-	structs with non literals.
-	* src/scan-skel.l: never-interactive.
-	* src/conflicts.c (enum conflict_resolution_e): No trailing
-	comma.
-	* src/getargs.c (usage): Split long literal strings.
-	Reported by Hans Aberg.
-
-2002-05-28  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.c++: Use C++ ostreams.
-	(cdebug_): New member.
-
-2002-05-28  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_skeleton): Be sure to allocate enough room
-	for `/' _and_ for `\0' in full_skeleton.
-
-2002-05-28  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.c++: Catch up with bison.simple:
-	2002-05-24  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-	and Paul Eggert  <eggert@twinsun.com>: `error' handing.
-	2002-05-26  Akim Demaille  <akim@epita.fr>: stos_, token_number_,
-	and popping traces.
-
-2002-05-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* src/output.c (output_skeleton): Put an explicit path in front of
-	the skeleton file name, rather than relying on the -I directory,
-	to partially alleviate effects of having a skeleton file lying around
-	in the current directory.
-
-2002-05-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* src/conflicts.c (log_resolution): Correct typo:
-	obstack_printf should be obstack_fgrow1.
-
-2002-05-26  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h (state_t): `solved_conflicts' is a new member.
-	* src/LR0.c (new_state): Set it to 0.
-	* src/conflicts.h, src/conflicts.c (print_conflicts)
-	(free_conflicts, solve_conflicts): Rename as...
-	(conflicts_print, conflicts_free, conflicts_solve): these.
-	Adjust callers.
-	* src/conflicts.c (enum conflict_resolution_e)
-	(solved_conflicts_obstack): New, used by...
-	(log_resolution): this.
-	Adjust to attach the conflict resolution to each state.
-	Complete the description with the precedence/associativity
-	information.
-	(resolve_sr_conflict): Adjust.
-	* src/print.c (print_state): Output its solved_conflicts.
-	* tests/conflicts.at (Unresolved SR Conflicts)
-	(Solved SR Conflicts): Exercise --report=all.
-
-2002-05-26  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c, src/derives.c, src/gram.c, src/gram.h, src/lalr.c,
-	* src/nullable.c, src/output.c, src/print.c, src/print_graph.c,
-	* src/reader.c, src/reduce.c, src/state.h, src/symtab.h
-	(token_number_t, item_number_as_token_number)
-	(token_number_as_item_number, muscle_insert_token_number_table):
-	Rename as...
-	(symbol_number_t, item_number_as_symbol_number)
-	(symbol_number_as_item_number, muscle_insert_symbol_number_table):
-	these, since it is more appropriate.
-
-2002-05-26  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at (AT_CHECK_CALC): Adjust: there are now additional
-	`Error:' lines.
-	* data/bison.simple (yystos) [YYDEBUG]: New.
-	(yyparse) [YYDEBUG]: Display the symbols which are popped during
-	error recovery.
-	* tests/regression.at (Web2c Actions): Adjust: yystos is output now.
-
-2002-05-25  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Debugging): Split into...
-	(Tracing): this new section, its former contents, and...
-	(Understanding): this new section.
-	* src/getargs.h, src/getargs.c (verbose_flag): Remove, replaced
-	by...
-	(report_flag): this.
-	Adjust all dependencies.
-	(report_args, report_types, report_argmatch): New.
-	(usage, getargs): Report/support -r, --report.
-	* src/options.h
-	(struct option_table_struct): Rename as..,
-	(struct option_table_s): this.
-	Rename the `set_flag' member to `flag' to match with getopt_long's
-	struct.
-	* src/options.c (option_table): Split verbose into an entry for
-	%verbose, and another for --verbose.
-	Support --report/-r, so remove -r from the obsolete --raw.
-	* src/print.c: Attach full item sets and lookaheads reports to
-	report_flag instead of trace_flag.
-	* lib/argmatch.h, lib/argmatch.c: New, from Fileutils 4.1.
-
-2002-05-24  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-	and Paul Eggert  <eggert@twinsun.com>
-
-	* data/bison.simple (yyparse): Correct error handling to conform to
-	POSIX and yacc.  Specifically, after syntax error is discovered,
-	do not reduce further before shifting the error token.
-	Clean up the code a bit by removing the labels yyerrdefault,
-	yyerrhandle, yyerrpop.
-	* NEWS: Document the above.
-
-2002-05-20  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* data/bison.simple (yyr1): Don't use yy_token_number_type as element
-	type; it isn't always big enough, since it doesn't necessarily
-	include non-terminals.
-	(yytranslate): Expand definition of yy_token_number_type, so that
-	the latter can be removed.
-	(yy_token_number_type): Remove, only one use.
-	* data/bison.c++ (r1_): Parallel change to yyr1 in bison.simple---
-	don't use TokenNumberType as element type.
-
-	* tests/regression.at: Modify expected output to agree with change
-	to yyr1 and yytranslate.
-
-2002-05-13  Florian Krohm  <florian@edamail.fishkill.ibm.com>
-
-	* src/reader.c (parse_action): Use copy_character instead of
-	obstack_1grow.
-
-2002-05-13  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (Token definitions): Prototype yylex and
-	yyerror.
-
-2002-05-12  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
-
-	* src/scan-skel.l: Correct off-by-one error in handling of __oline__.
-	* data/bison.simple (b4_sint_type, b4_uint_type): Correct to reflect
-	32-bit arithmetic.
-	* data/bison.c++ (b4_sint_type, b4_uint_type): Ditto.
-
-2002-05-07  Akim Demaille  <akim@epita.fr>
-
-	* tests/synclines.at: Be sure to prototype yylex and yyerror to
-	avoid GCC warnings.
-
-2002-05-07  Akim Demaille  <akim@epita.fr>
-
-	Kill GCC warnings.
-
-	* src/reduce.c (nonterminals_reduce): Don't loop over RITEM: loop
-	over the RHS of each rule.
-	* src/gram.h, src/gram.c (nritems): Is `unsigned int', not int.
-	* src/state.h (state_t): Member `nitems' is unsigned short.
-	* src/LR0.c (get_state): Adjust.
-	* src/reader.c (packgram): Likewise.
-	* src/output.c (GENERATE_MUSCLE_INSERT_TABLE): `max' is of type
-	`Type'.
-	(muscle_insert_int_table): Remove, unused.
-	(prepare_rules): Remove `max'.
-
-2002-05-06  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (print_firsts): Display of the symbol tags.
-	(bitmatrix_print): Move to...
-	* lib/bitsetv-print.h, lib/bitsetv-print.c (bitsetv_matrix_dump):
-	here.
-	* tests/sets.at (Nullable, Broken Closure, Firsts): Adjust.
-
-2002-05-06  Akim Demaille  <akim@epita.fr>
-
-	* src/muscle_tab.c (muscle_m4_output): Must return TRUE for
-	hash_do_for_each.
-
-2002-05-06  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (new_state, get_state): Instead of using the global
-	`kernel_size' and `kernel_base', have two new arguments:
-	`core_size' and `core'.
-	Adjust callers.
-
-2002-05-06  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (packgram): No longer end `ritem' with a 0
-	sentinel: it is not used.
-
-2002-05-05  Akim Demaille  <akim@epita.fr>
-
-	New experimental feature: display the lookaheads in the report and
-	graph.
-
-	* src/print (print_core): When --trace-flag, display the rules
-	lookaheads.
-	* src/print_graph.c (print_core): Likewise.
-	Swap the arguments.
-	Adjust caller.
-
-2002-05-05  Akim Demaille  <akim@epita.fr>
-
-	* tests/torture.at (Many lookaheads): New test.
-
-2002-05-05  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (GENERATE_OUTPUT_TABLE): Replace with...
-	(GENERATE_MUSCLE_INSERT_TABLE): this.
-	(output_int_table, output_unsigned_int_table, output_short_table)
-	(output_token_number_table, output_item_number_table): Replace with...
-	(muscle_insert_int_table, muscle_insert_unsigned_int_table)
-	(muscle_insert_short_table, muscle_insert_token_number_table)
-	(muscle_insert_item_number_table): these.
-	Adjust all callers.
-	(prepare_tokens): Don't free `translations', since...
-	* src/reader.h, src/reader.c (grammar_free): do it.
-	Move to...
-	* src/gram.h, src/gram.c (grammar_free): here.
-	* data/bison.simple, data/bison.c++: b4_token_number_max is now
-	b4_translate_max.
-
-2002-05-05  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_unsigned_int_table): New.
-	(prepare_rules): `i' is unsigned.
-	`prhs', `rline', `r2' are unsigned int.
-	Rename muscle `rhs_number_max' as `rhs_max'.
-	Output muscles `prhs_max', `rline_max', and `r2_max'.
-	Free rline and r1.
-	* data/bison.simple, data/bison.c++: Adjust to use these muscles
-	to compute types instead of constant types.
-	* tests/regression.at (Web2c Actions): Adjust.
-
-2002-05-04  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.h (SALIAS, SUNDEF): Rename as...
-	(USER_NUMBER_ALIAS, USER_NUMBER_UNDEFINED): these.
-	Adjust dependencies.
-	* src/output.c (token_definitions_output): Be sure not to output a
-	`#define 'a'' when fed with `%token 'a' "a"'.
-	* tests/regression.at (Token definitions): New.
-
-2002-05-03  Paul Eggert  <eggert@twinsun.com>
-
-	* data/bison.simple (b4_token_defines): Also define YYTOKENTYPE
-	for K&R C.
-
-2002-05-03  gettextize  <bug-gnu-gettext@gnu.org>
-
-	* Makefile.am (SUBDIRS): Remove intl.
-	(EXTRA_DIST): Add config/config.rpath.
-
-2002-05-03  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (m4_if): Don't output empty enums.
-	And actually, output valid enum definitions :(.
-
-2002-05-03  Akim Demaille  <akim@epita.fr>
-
-	* configure.bat: Remove, completely obsolete.
-	* Makefile.am (EXTRA_DIST): Adjust.
-	Don't distribute config.rpath...
-	* config/Makefile.am (EXTRA_DIST): Do it.
-
-2002-05-03  Akim Demaille  <akim@epita.fr>
-
-	* configure.in (GETTEXT_VERSION): New.
-	Suggested by Bruno Haible for the forthcoming Gettext 0.10.3.
-
-2002-05-03  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (b4_token_enum): New.
-	(b4_token_defines): Use it to output tokens both as #define and
-	enums.
-	Suggested by Paul Eggert.
-	* src/output.c (token_definitions_output): Don't output spurious
-	white spaces.
-
-2002-05-03  Akim Demaille  <akim@epita.fr>
-
-	* data/m4sugar/m4sugar.m4: Update from CVS Autoconf.
-
-2002-05-02  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Adapt expansion of $s and @s to the C++ parser.
-	Update the stack class, give a try to deque as the default container.
-
-2002-05-02  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (yyparse): Do not implement @$ = @1.
-	(YYLLOC_DEFAULT): Adjust to do it.
-	* doc/bison.texinfo (Location Default Action): Fix.
-
-2002-05-02  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (parse_braces): Merge into...
-	(parse_action): this.
-
-2002-05-02  Akim Demaille  <akim@epita.fr>
-
-	* configure.in (ALL_LINGUAS): Remove.
-	* po/LINGUAS, hr.po: New.
-
-2002-05-02  Akim Demaille  <akim@epita.fr>
-
-	Remove the so called hairy (semantic) parsers.
-
-	* src/system.h (EXT_GUARD_C, EXT_STYPE_H): Remove.
-	* src/gram.h, src/gram.c (semantic_parser): Remove.
-	(rule_t): Remove the guard and guard_line members.
-	* src/lex.h (token_t): remove tok_guard.
-	* src/options.c (option_table): Remove %guard and %semantic_parser
-	support.
-	* src/output.c, src/output.h (guards_output): Remove.
-	(prepare): Adjust.
-	(token_definitions_output): Don't output the `T'
-	tokens (???).
-	(output_skeleton): Don't output the guards.
-	* src/files.c, src/files.c (attrsfile): Remove.
-	* src/reader.c (symbol_list): Remove the guard and guard_line
-	members.
-	Adjust dependencies.
-	(parse_guard): Remove.
-	* data/bison.hairy: Remove.
-	* doc/bison.texinfo (Environment Variables): Remove occurrences of
-	BISON_HAIRY.
-
-2002-05-02  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_at, copy_dollarm parse_braces, parse_action)
-	(parse_guard): Rename the formal argument `stack_offset' as
-	`rule_length', which is more readable.
-	Adjust callers.
-	(copy_at, copy_dollar): Instead of outputting the hard coded
-	values of $$, $n and so forth, output invocation to b4_lhs_value,
-	b4_lhs_location, b4_rhs_value, and b4_rhs_location.
-	Note: this patch partially drops `semantic-parser' support: it
-	always does `rule_length - n', where semantic parsers ought to
-	always use `-n'.
-	* data/bison.simple, data/bison.c++ (b4_lhs_value)
-	(b4_lhs_location, b4_rhs_value, and b4_rhs_location: New.
-
-2002-05-02  Akim Demaille  <akim@epita.fr>
-
-	* configure.in (AC_INIT): Bump to 1.49b.
-	(AM_INIT_AUTOMAKE): Short invocation.
-
-2002-05-02  Akim Demaille  <akim@epita.fr>
-
-	Version 1.49a.
-
-2002-05-01  Akim Demaille  <akim@epita.fr>
-
-	* src/skeleton.h: Remove.
-
-2002-05-01  Akim Demaille  <akim@epita.fr>
-
-	* src/skeleton.h: Fix the #endif.
-	Reported by Magnus Fromreide.
-
-2002-04-26  Paul Eggert  <eggert@twinsun.com>
-
-	* data/bison.simple (YYSTYPE_IS_TRIVIAL, YYLTYPE_IS_TRIVIAL):
-	Define if we define YYSTYPE and YYLTYPE, respectively.
-	(YYCOPY): Fix [] quoting problem in the non-GCC case.
-
-2002-04-25  Robert Anisko  <robert@lrde.epita.fr>
-
-	* src/scan-skel.l: Postprocess quadrigraphs.
-
-	* src/reader.c (copy_character): New function, used to output
-	single characters while replacing `[' and `]' with quadrigraphs, to
-	avoid troubles with M4 quotes.
-	(copy_comment): Output characters with copy_character.
-	(read_additionnal_code): Likewise.
-	(copy_string2): Likewise.
-	(copy_definition): Likewise.
-
-	* tests/calc.at: Exercise M4 quoting.
-
-2002-04-25  Akim Demaille  <akim@epita.fr>
-
-	* tests/sets.at (AT_EXTRACT_SETS): Sed portability issue: no space
-	between `!' and the command.
-	Reported by Paul Eggert.
-
-2002-04-24  Robert Anisko  <robert@lrde.epita.fr>
-
-	* tests/calc.at: Exercise prologue splitting.
-
-	* data/bison.simple, data/bison.c++: Use `b4_pre_prologue' and
-	`b4_post_prologue' instead of `b4_prologue'.
-
-	* src/output.c (prepare): Add the `pre_prologue' and `post_prologue'
-	muscles.
-	(output): Free pre_prologue_obstack and post_prologue_obstack.
-	* src/files.h, src/files.c (attrs_obstack): Remove.
-	(pre_prologue_obstack, post_prologue_obstack): New.
-	* src/reader.c (copy_definition): Add a parameter to specify the
-	obstack to fill, instead of using attrs_obstack unconditionally.
-	(read_declarations): Pass pre_prologue_obstack to copy_definition if
-	`%union' has not yet been seen, pass post_prologue_obstack otherwise.
-
-2002-04-23  Paul Eggert  <eggert@twinsun.com>
-
-	* data/bison.simple: Remove unnecessary commentary and white
-	space differences from 1_29-branch.
-	Depend on YYERROR_VERBOSE, not defined (YYERROR_VERBOSE).
-
-	(union yyalloc, YYSTACK_GAP_MAX, YYSTACK_BYTES, YYCOPY,
-	YYSTACK_RELOCATE): Do not define if yyoverflow is defined, or
-	if this is a C++ parser and YYSTYPE or YYLTYPE has nontrivial
-	constructors or destructors.
-
-	(yyparse) [! defined YYSTACK_RELOCATE]: Do not relocate the stack.
-
-2002-04-23  Akim Demaille  <akim@epita.fr>
-
-	* tests/sets.at (AT_EXTRACT_SETS): Don't use 8 char long sed labels.
-	* tests/synclines.at (AT_TEST_SYNCLINE): Be robust to GCC's
-	location with columns.
-	* tests/conflicts.at (%nonassoc and eof): Don't use `error.h'.
-	All reported by Paul Eggert.
-
-2002-04-22  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (dump_grammar): Move to...
-	* src/gram.h, src/gram.c (grammar_dump): here.
-	Be sure to separate long item numbers.
-	Don't read the members of a rule's prec if its nil.
-
-2002-04-22  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (table_size, table_grow): New.
-	(MAXTABLE): Remove, replace uses with table_size.
-	(pack_vector): Instead of dying when the table is too big, grow it.
-
-2002-04-22  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.simple (yyr1): Its type is that of a token number.
-	* data/bison.c++ (r1_): Likewise.
-	* tests/regression.at (Web2c Actions): Adjust.
-
-2002-04-22  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (token_translations_init): 256 is now the default
-	value for the error token, i.e., it will be assigned another
-	number if the user assigned 256 to one of her tokens.
-	(reader): Don't force 256 to error.
-	* doc/bison.texinfo (Symbols): Adjust.
-	* tests/torture.at (AT_DATA_HORIZONTAL_GRAMMAR)
-	(AT_DATA_TRIANGULAR_GRAMMAR): Number the tokens as 1, 2, 3
-	etc. instead of 10, 20, 30 (which was used to `jump' over error
-	(256) and undefined (2)).
-
-2002-04-22  Akim Demaille  <akim@epita.fr>
-
-	Propagate more token_number_t.
-
-	* src/gram.h (token_number_as_item_number)
-	(item_number_as_token_number): New.
-	* src/output.c (GENERATE_OUTPUT_TABLE): New.
-	Use it to create output_item_number_table and
-	output_token_number_table.
-	* src/LR0.c, src/derives.c, src/gram.c, src/gram.h, src/lalr.c,
-	* src/lex.c, src/nullable.c, src/output.c, src/print.c,
-	* src/print_graph.c, src/reader.c, src/reduce.c, src/state.h,
-	* src/symtab.c, src/symtab.h: Use token_number_t instead of shorts.
-
-2002-04-22  Akim Demaille  <akim@epita.fr>
-
-	* src/output.h, src/output.c (get_lines_number): Remove.
-
-2002-04-19  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo (Actions): Make clear that `|' is not the same
-	as Lex/Flex'.
-	(Debugging): More details about enabling the debugging features.
-	(Table of Symbols): Describe $$, $n, @$, and @n.
-	Suggested by Tim Josling.
-
-2002-04-19  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Remove the uses of the obsolete @refill.
-
-2002-04-10  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h: Rely on HAVE_LIMITS_H.
-	Suggested by Paul Eggert.
-
-2002-04-09  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at (_AT_CHECK_CALC_ERROR): Receive as argument the
-	full stderr, and strip it according to the bison options, instead
-	of composing the error message from different bits.
-	This makes it easier to check for several error messages.
-	Adjust all the invocations.
-	Add an invocation exercising the error token.
-	Add an invocation demonstrating a stupid error message.
-	(_AT_DATA_CALC_Y): Follow the GCS: initial column is 1, not 0.
-	Adjust the tests.
-	Error message are for stderr, not stdout.
-
-2002-04-09  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h, src/gram.c (error_token_number): Remove, use
-	errtoken->number.
-	* src/reader.c (reader): Don't specify the user token number (2)
-	for $undefined, as it uselessly prevents using it.
-	* src/gram.h (token_number_t): Move to...
-	* src/symtab.h: here.
-	(state_t.number): Is a token_number_t.
-	* src/print.c, src/reader.c: Use undeftoken->number instead of
-	hard coded 2.
-	(Even though this 2 is not the same as above: the number of the
-	undeftoken remains being 2, it is its user token number which
-	might not be 2).
-	* src/output.c (prepare_tokens): Rename the `maxtok' muscle with
-	`user_token_number_max'.
-	Output `undef_token_number'.
-	* data/bison.simple, data/bison.c++: Use them.
-	Be sure to map invalid yylex return values to
-	`undef_token_number'.  This saves us from gratuitous SEGV.
-
-	* tests/conflicts.at (Solved SR Conflicts)
-	(Unresolved SR Conflicts): Adjust.
-	* tests/regression.at (Web2c Actions): Adjust.
-
-2002-04-08  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.c++: s/b4_item_number_max/b4_rhs_number_max/.
-	Adding #line.
-	Remove the duplicate `typedefs'.
-	(RhsNumberType): Fix the declaration and various other typos.
-	Use __ofile__.
-	* data/bison.simple: Use __ofile__.
-	* src/scan-skel.l: Handle __ofile__.
-
-2002-04-08  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (item_number_t): New, the type of item numbers in
-	RITEM.  Note that it must be able to code symbol numbers as
-	positive number, and the negation of rule numbers as negative
-	numbers.
-	Adjust all dependencies (pretty many).
-	* src/reduce.c (rule): Remove this `short *' pointer: use
-	item_number_t.
-	* src/system.h (MINSHORT, MAXSHORT): Remove.
-	Include `limits.h'.
-	Adjust dependencies to using SHRT_MAX and SHRT_MIN.
-	(shortcpy): Remove.
-	(MAXTABLE): Move to...
-	* src/output.c (MAXTABLE): here.
-	(prepare_rules): Use output_int_table to output rhs.
-	* data/bison.simple, data/bison.c++: Adjust.
-	* tests/torture.at (Big triangle): Move the limit from 254 to
-	500.
-	* tests/regression.at (Web2c Actions): Ajust.
-
-	Trying with bigger grammars shows various phenomena: at 3000 (28Mb
-	of grammar file) bison is killed by my system, at 2000 (12Mb) bison
-	passes, but produces negative #line number, once fixed, GCC is
-	killed while compiling 14Mb, at 1500 (6.7 Mb of grammar, 8.2Mb of
-	C), it passes.
-	* src/state.h (state_h): Code input lines on ints, not shorts.
-
-2002-04-08  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (reduce_grammar): First reduce the nonterminals,
-	and then the grammar.
-
-2002-04-08  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h: No longer using strndup.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/muscle_tab.h (MUSCLE_INSERT_LONG_INT): New.
-	* src/output.c (output_table_data): Return the longest number.
-	(prepare_tokens): Output `token_number_max').
-	* data/bison.simple, data/bison.c++ (b4_sint_type, b4_uint_type):
-	New.
-	Use them to define yy_token_number_type/TokenNumberType.
-	Use this type for yytranslate.
-	* tests/torture.at (Big triangle): Push the limit from 124 to
-	253.
-	* tests/regression.at (Web2c Actions): Adjust.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* tests/torture.at (Big triangle): New.
-	(GNU AWK Grammar, GNU Cim Grammar): Move to...
-	* tests/existing.at: here.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h, src/gram.c (nitems): Remove, it is an alias of
-	nritems.
-	Adjust dependencies.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c: Normalize increments to prefix form.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c, symtab.c: Remove debugging code.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	Rename all the `bucket's as `symbol_t'.
-
-	* src/gram.c, src/gram.h, src/lex.c, src/lex.h, src/output.c,
-	* src/reader.c, src/reader.h, src/reduce.c, src/state.h,
-	* src/symtab.c, src/symtab.h (bucket): Rename as...
-	(symbol_t): this.
-	(symbol_list_new, bucket_check_defined, bucket_make_alias)
-	(bucket_check_alias_consistence, bucket_pack, bucket_translation)
-	(bucket_new, bucket_free, hash_compare_bucket, hash_bucket)
-	(buckets_new, buckets_free, buckets_do): Rename as...
-	(symbol_list_new, symbol_check_defined, symbol_make_alias)
-	(symbol_check_alias_consistence, symbol_pack, symbol_translation)
-	(symbol_new, symbol_free, hash_compare_symbol_t, hash_symbol_t)
-	(symbols_new, symbols_free, symbols_do): these.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	Use lib/hash for the symbol table.
-
-	* src/gram.c (ntokens): Initialize to 1, to reserve a slot for
-	EOF.
-	* src/lex.c (lex): Set the `number' member of new terminals.
-	* src/reader.c (bucket_check_defined, bucket_make_alias)
-	(bucket_check_alias_consistence, bucket_translation): New.
-	(reader, grammar_free, readgram, token_translations_init)
-	(packsymbols): Adjust.
-	(reader): Number the predefined tokens.
-	* src/reduce.c (inaccessable_symbols): Just use hard coded numbers
-	for predefined tokens.
-	* src/symtab.h (bucket): Remove all the hash table related
-	members.
-	* src/symtab.c (symtab): Replace by...
-	(bucket_table): this.
-	(bucket_new, bucket_free, hash_compare_bucket, hash_bucket)
-	(buckets_new, buckets_do): New.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.c (nitems, nrules, nsyms, ntokens, nvars, nritems)
-	(start_symbol, max_user_token_number, semantic_parser)
-	(error_token_number): Initialize.
-	* src/reader.c (grammar, start_flag, startval, typed, lastprec):
-	Initialize.
-	(reader): Don't.
-	(errtoken, eoftoken, undeftoken, axiom): Extern.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (rule_s): prec and precsym are now pointers
-	to the bucket giving the priority/associativity.
-	Member `associativity' removed: useless.
-	* src/reduce.c, src/conflicts.c: Adjust.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c, src/LR0.c, src/closure.c, src/gram.c, src/reduce.c:
-	Properly escape the symbols' TAG when outputting them.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h (LA): Is a bitsetv, not bitset*.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h, src/lalr.c (LAruleno): Replace with...
-	(LArule): this, which is an array to rule_t*.
-	* src/print.c, src/conflicts.c: Adjust.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (rule_t): Rename `number' as `user_number'.
-	`number' is a new member.
-	Adjust dependencies.
-	* src/reduce.c (reduce_grammar_tables): Renumber rule_t.number.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	As a result of the previous patch, it is no longer needed
-	to reorder ritem itself.
-
-	* src/reduce.c (reduce_grammar_tables): Don't sort RITEM.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	Be sure never to walk through RITEMS, but use only data related to
-	the rules themselves. RITEMS should be banished.
-
-	* src/output.c (output_token_translations): Rename as...
-	(prepare_tokens): this.
-	In addition to `translate', prepare the muscles `tname' and
-	`toknum', which were handled by...
-	(output_rule_data): this.
-	Remove, and move the remainder of its outputs into...
-	(prepare_rules): this new routines, which also merges content from
-	(output_gram): this.
-	(prepare_rules): Be sure never to walk through RITEMS.
-	(output_stos): Rename as...
-	(prepare_stos): this.
-	(output): Always invoke prepare_states, after all, just don't use it
-	in the output if you don't need it.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (new_state): Display `nstates' as the name of the
-	newly created state.
-	Adjust to initialize first_state and last_state if needed.
-	Be sure to distinguish the initial from the final state.
-	(new_states): Create the itemset of the initial state, and use
-	new_state.
-	* src/closure.c (closure): Now that the initial state has its
-	items properly set, there is no need for a special case when
-	creating `ruleset'.
-
-	As a result, now the rule 0, reducing to $axiom, is visible in the
-	outputs.  Adjust the test suite.
-
-	* tests/conflicts.at (Solved SR Conflicts)
-	(Unresolved SR Conflicts): Adjust.
-	* tests/regression.at (Web2c Report, Rule Line Numbers): Idem.
-	* tests/conflicts.at (S/R in initial): New.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (allocate_itemsets): Don't loop over ritem: loop over
-	the RHS of the rules.
-	* src/output.c (output_gram): Likewise.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (rule_t): `lhs' is now a pointer to the symbol's
-	bucket.
-	Adjust all dependencies.
-	* src/reduce.c (nonterminals_reduce): Don't forget to renumber the
-	`number' of the buckets too.
-	* src/gram.h: Include `symtab.h'.
-	(associativity): Move to...
-	* src/symtab.h: here.
-	No longer include `gram.h'.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h, src/gram.c (rules_rhs_length): New.
-	(ritem_longest_rhs): Use it.
-	* src/gram.h (rule_t): `number' is a new member.
-	* src/reader.c (packgram): Set it.
-	* src/reduce.c (reduce_grammar_tables): Move the useless rules at
-	the end of `rules', and count them out of `nrules'.
-	(reduce_output, dump_grammar): Adjust.
-	* src/print.c (print_grammar): It is no longer needed to check for
-	the usefulness of a rule, as useless rules are beyond `nrules + 1'.
-	* tests/reduce.at (Reduced Automaton): New test.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (inaccessable_symbols): Fix a buglet: because of a
-	lacking `+ 1' to nrules, Bison reported as useless a token if it
-	was used solely to set the precedence of the last rule...
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.c++, data/bison.simple: Don't output the current file
-	name in #line, to avoid useless diffs between two identical
-	outputs under different names.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c, src/print.c, src/reader.c, src/reduce.c:
-	Normalize loops to using `< nrules + 1', not `<= nrules'.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* TODO: Update.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c, src/reader.c, src/symtab.c, src/symtab.h: Rename
-	bucket.value as bucket.number.
-
-2002-04-07  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c, src/derives.c, src/gram.h, src/lalr.c,
-	* src/nullable.c, src/output.c, src/print.c, src/print_graph.c,
-	* src/reader.c, src/reduce.c: Let rule_t.rhs point directly to the
-	RHS, instead of being an index in RITEMS.
-
-2002-04-04  Paul Eggert  <eggert@twinsun.com>
-
-	* doc/bison.texinfo: Update copyright date.
-	(Rpcalc Lexer, Symbols, Token Decl): Don't assume ASCII.
-	(Symbols): Warn about running Bison in one character set,
-	but compiling and/or running in an incompatible one.
-	Warn about character code 256, too.
-
-2002-04-03  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.data (YYSTACK_ALLOC): Depend on whether
-	YYERROR_VERBOSE is nonzero, not whether it is defined.
-
-	Merge changes from bison-1_29-branch.
-
-2002-03-20  Paul Eggert  <eggert@twinsun.com>
-
-	Merge fixes from Debian bison_1.34-1.diff.
-
-	* configure.in (AC_PREREQ): 2.53.
-
-2002-03-20  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (log_resolution): Argument `resolution' is const.
-
-2002-03-19  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (YYCOPY): New macro.
-	(YYSTACK_RELOCATE): Use it.
-	Remove Type arg; no longer needed.  All callers changed.
-	(yymemcpy): Remove; no longer needed.
-
-	* Makefile.am (AUTOMAKE_OPTIONS): 1.6.
-	* doc/Makefile.am (AUTOMAKE_OPTIONS): Remove.
-
-2002-03-19  Akim Demaille  <akim@epita.fr>
-
-	Test and fix the #line outputs.
-
-	* tests/atlocal.at (GCC): New.
-	* tests/synclines.at (AT_TEST_SYNCLINE): New macro.
-	(Prologue synch line, %union synch line, Postprologue synch line)
-	(Action synch line, Epilogue synch line): New tests.
-	* src/reader.c (parse_union_decl): Define the muscle stype_line.
-	* data/bison.simple, data/bison.c++: Use it.
-
-2002-03-19  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts)
-	(Solved SR Conflicts, %expect not enough, %expect right)
-	(%expect too much): Move to...
-	* tests/conflicts.at: this new file.
-
-2002-03-19  Akim Demaille  <akim@epita.fr>
-
-	* data/m4sugar/m4sugar.m4: Update from CVS Autoconf.
-	* data/bison.simple, data/bison.c++: Handle the `#define' part, so
-	that we can move to enums for instance.
-	* src/output.c (token_definitions_output): Output a list of
-	`token-name, token-number' instead of the #define.
-	(output_skeleton): Name this list `b4_tokens', not `b4_tokendefs'.
-
-2002-03-14  Akim Demaille  <akim@epita.fr>
-
-	Use Gettext 0.11.1.
-
-2002-03-09  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Make the user able to add members to the generated
-	parser by subclassing.
-
-2002-03-05  Robert Anisko  <robert@lrde.epita.fr>
-
-	* src/reader.c (read_additionnal_code): `c' should be an integer, not
-	a character.
-	Reported by Nicolas Tisserand and Nicolas Burrus.
-
-2002-03-04  Robert Anisko  <robert@lrde.epita.fr>
-
-	* src/reader.c: Warn about lacking semi-colons, do not complain.
-
-2002-03-04  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Remove a debug line.
-
-2002-03-04  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Unmerge value as yylval and value as yyval.  Unmerge
-	location as yylloc and location as yyloc.  Use YYLLOC_DEFAULT, and
-	provide a default implementation.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* tests/input.at (Invalid $n, Invalid @n): Add the ending `;'.
-	* tests/output.at (AT_CHECK_OUTPUT): Likewise.
-	* tests/headers.at (AT_TEST_CPP_GUARD_H): Ditto.
-	* tests/semantic.at (Parsing Guards): Similarly.
-	* src/reader.at (readgram): Complain if the last rule is not ended
-	with a semi-colon.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/warshall.h, src/warshall.c (bitmatrix_print): Move to...
-	* src/closure.c: here.
-	(set_firsts): Use bitsetv_reflexive_transitive_closure instead of
-	RTC.
-	* src/warshall.h, src/warshall.c: Remove.
-	* tests/sets.at (Broken Closure): Adjust.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_skeleton): tempdir is const.
-	bytes_read is unused.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* lib/bbitset.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
-	* lib/bitsetv.h, lib/ebitset.c, lib/lbitset.c, lib/sbitset.c:
-	Update.
-	From Michael Hayes.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (closure): `r' is unused.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* tests/sets.at (Broken Closure): Add the ending `;'.
-	* src/reader.at (readgram): Complain if a rule is not ended with a
-	semi-colon.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (set_conflicts): Use bitset_disjoint_p.
-	(count_sr_conflicts): Use bitset_count.
-	* src/reduce.c (inaccessable_symbols): Ditto.
-	(bits_size): Remove.
-	* src/warshall.h, src/warshall.c: Convert to bitsetv.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c, src/conflicts.c, src/lalr.c, src/print.c,
-	* src/reduce.c: Remove the `bitset_zero's following the
-	`bitset_create's, as now it is performed by the latter.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* lib/bitset.c, lib/bitset.h, lib/bitsetv.c, lib/bitsetv.h,
-	* lib/ebitset.c, lib/ebitset.h, lib/lbitset.c, lib/lbitset.h,
-	* lib/sbitset.c, lib/sbitset.h, lib/bbitset.h: Update from the
-	latest sources from Michael.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output): Don't free the grammar.
-	* src/reader.c (grammar_free): New.
-	* src/main.c (main): Call it and don't free symtab here.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/lex.c (parse_percent_token): Be sure to 0-end token_buffer
-	before returning.
-	Reported by Benoit Perrot.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	Use bitset operations when possible, not loops over bits.
-
-	* src/conflicts.c (set_conflicts, count_sr_conflicts): Use
-	bitset_or.
-	* src/print.c (print_reductions): Use bitset_and, bitset_andn.
-	* src/reduce.c (useless_nonterminals): Formatting changes.
-	* src/warshall.c (TC): Use bitset_or.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h, src/lalr.c (tokensetsize): Remove, unused.
-	* src/system.h (BITS_PER_WORD, WORDSIZE, SETBIT, RESETBIT, BITISSET):
-	Ditto.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (F): Now a bitset*.
-	Adjust all dependencies.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (shiftset, lookaheadset): Now bitset.
-	Adjust all dependencies.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/L0.c, src/LR0.h (nstates): Be size_t.
-	Adjust comparisons (signed vs unsigned).
-	* src/conflics.c, src/lalr.c, src/lalr.h, src/output.c (LA): Now a
-	bitset*.
-	Adjust all dependencies.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (firsts): Now, also a bitset.
-	Adjust all dependencies.
-	(varsetsize): Remove, now unused.
-	* src/warshall.h, src/warshall.c: Now work on arrays of bitsets.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/print.c: Convert to use bitset.h, not hand coded iterations
-	over ints.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c: Convert to use bitset.h, not hand coded BSet.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (ruleset): Be a bitset.
-	(rulesetsize): Remove.
-
-2002-03-04  Akim Demaille  <akim@epita.fr>
-
-	* lib/bitset-int.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
-	* lib/bitsetv.h, lib/ebitset.c, lib/ebitset.h, lib/lbitset.c,
-	* lib/lbitset.h, lib/sbitset.c, lib/sbitset.h: New.
-	* src/closure.c (fderives): Be an array of bitsets.
-
-2002-02-28  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Merge the two generated headers.  Insert a copyright
-	notice in each output file.
-
-2002-02-28  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.c++: Copy the prologue of bison.simple to fetch
-	useful M4 definitions, such as b4_header_guard.
-
-2002-02-25  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.c (version): Give the name of the authors, and use a
-	translator friendly scheme for the bgr
-	copyright notice.
-
-2002-02-25  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (header_output): Remove, now handled completely via
-	M4.
-
-2002-02-25  Akim Demaille  <akim@epita.fr>
-
-	* m4/m4.m4: New, from CVS Autoconf.
-	* configure.in: Invoke it.
-	* src/output.c (output_skeleton): Use its result instead of the
-	hard coded name.
-
-2002-02-25  Akim Demaille  <akim@epita.fr>
-
-	* lib/tempname.c, lib/mkstemp.c, m4/mkstemp.m4: New, stolen from
-	Fileutils 4.1.5.
-	* configure.in: Invoke UTILS_FUNC_MKSTEMP.
-	* src/output.c (output_skeleton): Use mkstemp to create a real
-	temporary file.
-	Move the filling of `skeleton' and its muscle to...
-	(prepare): here.
-	(output): Move the definition of the prologue muscle to...
-	(prepare): here.
-	* src/system.h (DEFAULT_TMPDIR): New.
-
-2002-02-14  Paul Eggert  <eggert@twinsun.com>
-
-	Remove the support for C++ namespace cleanliness; it was
-	causing more problems than it was curing, since it didn't work
-	properly on some nonstandard C++ compilers.  This can wait
-	for a proper C++ parser.
-
-	* NEWS: Document this.
-	* doc/bison.texinfo (Bison Parser, Debugging): Remove special mention
-	of C++, as it's treated like C now.
-	* src/bison.simple (YYSTD): Remove.
-	(YYSIZE_T, YYFPRINTF, YYPARSE_PARAM_ARG, YYPARSE_PARAM_DECL):
-	Treat C++ just like Standard C instead of trying to support
-	namespace cleanliness.
-
-2002-02-14  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (else): Adjust to Andreas' change.
-
-2002-02-14  Akim Demaille  <akim@epita.fr>
-
-	* lib/Makefile.am (EXTRA_DIST): Ship strnlen.c.
-
-2002-02-13  Andreas Schwab  <schwab@suse.de>
-
-	* src/output.c (output_rule_data): Don't output NULL, it might
-	not be defined yet.
-
-2002-02-11  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++ (YYDEBUG, YYERROR_VERBOSE): After the prologue.
-	(Copyright notice): Update.
-
-2002-02-11  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (%nonassoc and eof): Don't include
-	nonportable headers.
-
-2002-02-08  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Correct error recovery.  Make the user able to
-	initialize the starting location.
-
-2002-02-07  Akim Demaille  <akim@epita.fr>
-
-	* tests/input.at: New.
-
-2002-02-07  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Replace some direct m4 expansions by constants.  Be
-	more consistent when naming methods and variables.  Put preprocessor
-	directives around tables only needed for debugging.
-
-2002-02-07  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++ (yy::b4_name::print_): New method, replaces yyprint in
-	C++ parsers.
-	(yy::b4_name::parse): Use print_.
-
-2002-02-07  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++ (yy::b4_name::parse): Error recovery is back.
-
-2002-02-07  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++ (yy::b4_name::error_): New method, replaces yyerror in
-	C++ parsers.
-	(yy::b4_name::parse): Build verbose error messages, and use error_.
-
-2002-02-06  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Fix m4 quoting in comments.
-
-2002-02-06  Robert Anisko  <robert@lrde.epita.fr>
-
-	* data/bison.c++: Adjust the parser code.  Fix some muscles that were
-	not expanded by m4.
-
-2002-02-05  Akim Demaille  <akim@epita.fr>
-
-	* data/bison.c++: Adjust to the M4 back end.
-	More is certainly needed.
-
-2002-02-05  Akim Demaille  <akim@epita.fr>
-
-	Give a try to M4 as a back end.
-
-	* lib/readpipe.c: New, from wdiff.
-	* src/Makefile.am (DEFS): Define PKGDATADIR, not BISON_SIMPLE and
-	BISON_HAIRY.
-	* src/system.h (BISON_HAIRY, BISON_SIMPLE): Remove the DOS and VMS
-	specific values.  Now it is m4 that performs the lookup.
-	* src/parse-skel.y: Remove.
-	* src/muscle_tab.c, src/muscle_tab.h (muscles_m4_output): New.
-	* src/output.c (actions_output, guards_output)
-	(token_definitions_output): No longer keeps track of the output
-	line number, hence remove the second argument.
-	(guards_output): Check against the guard member of a rule, not the
-	action member.
-	Adjust callers.
-	(output_skeleton): Don't look for the skeleton location, let m4 do
-	that.
-	Create `/tmp/muscles.m4'.  This is temporary, a proper temporary
-	file will be used.
-	Invoke `m4' on m4sugar.m4, muscles.m4, and the skeleton.
-	(prepare): Given that for the time being changesyntax is not
-	usable in M4, rename the muscles using `-' to `_'.
-	Define `defines_flag', `output_parser_name' and `output_header_name'.
-	* src/output.h (actions_output, guards_output)
-	(token_definitions_output): Adjust prototypes.
-	* src/scan-skel.l: Instead of scanning the skeletons, it now
-	processes the output of m4: `__oline__' and `#output'.
-	* data/bison.simple: Adjust to be used by M4(sugar).
-	* tests/Makefile.am: Use check_SCRIPTS to make sure `bison' is up
-	to date.
-	* tests/bison.in: Use the secrete envvar `BISON_PKGDATADIR'
-	instead of the dead `BISON_SIMPLE' and `BISON_HAIRY'.
-	* data/m4sugar/m4sugar.m4, data/m4sugar/version.m4: New,
-	shamelessly stolen from CVS Autoconf.
-
-2002-02-05  Akim Demaille  <akim@epita.fr>
-
-	* lib/hash.c, lib/hash.h: Replace with Fileutils 4.1's version.
-	* configure.in: Check for the declarations of free and malloc.
-	* src/muscle_tab.c: Adjust.
-
-2002-02-05  Akim Demaille  <akim@epita.fr>
-
-	* src/muscle_tab.c (muscle_init): Don't default to NULL muscle
-	which have no values.
-
-2002-02-05  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.simple, src/bison.hairy, src/bison.c++: Move to...
-	* data/: here.
-
-2002-01-29  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (YYSIZE_T): Do not define merely because
-	YYSTACK_USE_ALLOCA is nonzero or alloca or _ALLOCA_H are defined.
-	On some platforms, <alloca.h> does not declare YYSTD (size_t).
-
-2002-01-27  Akim Demaille  <akim@epita.fr>
-
-	Fix `%nonassoc and eof'.
-
-	* src/state.c (errs_dup): Aaaah!  The failure was due to bytes
-	which were not properly copied!  Replace
-	memcpy (res->errs, src->errs, src->nerrs);
-	with
-	memcpy (res->errs, src->errs, src->nerrs * sizeof (src->errs[0]));
-	!!!
-	* tests/regression.at (%nonassoc and eof): Adjust to newest
-	Autotest: `.' is not in the PATH.
-
-2002-01-27  Akim Demaille  <akim@epita.fr>
-
-	* tests/sets.at (AT_EXTRACT_SETS): New.
-	(Nullable): Use it.
-	(Firsts): New.
-
-2002-01-26  Akim Demaille  <akim@epita.fr>
-
-	* tests/actions.at, tests/calc.at, tests/headers.at,
-	* tests/torture.at: Adjust to the newest Autotest which no longer
-	forces `.' in the PATH.
-
-2002-01-25  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (%nonassoc and eof): New.
-	Suggested by Robert Anisko.
-
-2002-01-24  Akim Demaille  <akim@epita.fr>
-
-	Bison dumps core when trying to complain about broken input files.
-	Reported by Cris van Pelt.
-
-	* src/lex.c (parse_percent_token): Be sure to set token_buffer.
-	* tests/regression.at (Invalid input: 1, Invalid input: 2): Merge
-	into...
-	(Invalid inputs): Strengthen: exercise parse_percent_token.
-
-2002-01-24  Robert Anisko  <robert.anisko@epita.fr>
-
-	* src/Makefile.am: Add bison.c++.
-	* src/bison.c++: New skeleton.
-
-2002-01-21  Paolo Bonzini <bonzini@gnu.org>
-
-	* po/it.po: New.
-
-2002-01-21  Kees Zeelenberg  <kzlg@users.sourceforge.net>
-
-	* src/files.c (skeleton_find) [MSDOS]: Fix cp definition.
-
-2002-01-20  Marc Autret  <marc@gnu.org>
-
-	* src/files.c (compute_output_file_names): Fix
-
-2002-01-20  Marc Autret  <marc@gnu.org>
-
-	* tests/output.at: New test.
-	* src/files.c (compute_base_names): Don't map extensions when
-	the YACC flag is set, use defaults.
-	Reported by Evgeny Stambulchik.
-
-2002-01-20  Marc Autret  <marc@gnu.org>
-
-	* src/system.h: Need to define __attribute__ away for non-GCC
-	compilers as well (i.e., the vendor C compiler).
-	Suggested by Albert Chin-A-Young.
-
-2002-01-11  Tim Van Holder  <tim.van.holder@pandora.be>
-
-	* lib/hash.h, lib/hash.c: Renamed __P to PARAMS and used the
-	canonical definition.
-	* src/system.h: Use the canonical definition for PARAMS (avoids
-	a conflict with the macro from lib/hash.h).
-
-2002-01-11  Akim Demaille  <akim@epita.fr>
-
-	* configure.in: Use AC_FUNC_STRNLEN.
-	Fixes the failures observed on AIX 4.3 by H.Merijn Brand.
-
-2002-01-09  Akim Demaille  <akim@epita.fr>
-
-	* src/files.c, src/files.h (output_infix): New.
-	(tab_extension): Remove.
-	(compute_base_names): Compute the former, drop the latter.
-	* src/output.c (prepare): Insert the muscles `output-infix', and
-	`output-suffix'.
-	* src/parse-skel.y (string, string.1): New.
-	(section.header): Use it.
-	(section.yacc): Remove.
-	(prefix): Remove too.
-	* src/scan-skel.l: Adjust.
-	* src/bison.simple, src/bison.hairy: Adjust.
-
-2002-01-09  Akim Demaille  <akim@epita.fr>
-
-	* configure.in (WERROR_CFLAGS): Compute it.
-	* src/Makefile.am (CFLAGS): Pass it.
-	* tests/atlocal.in (CFLAGS): Idem.
-	* src/files.c: Fix a few warnings.
-	(get_extension_index): Remove, unused.
-
-2002-01-08  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.c (AS_FILE_NAME): New.
-	(getargs): Use it to convert DOSish file names.
-	* src/files.c (base_name): Rename as full_base_name to avoid
-	clashes with `base_name ()'.
-	(filename_split): New.
-	(compute_base_names): N-th rewrite, using filename_split.
-
-2002-01-08  Akim Demaille  <akim@epita.fr>
-
-	* lib/basename.c, lib/dirname.h, lib/dirname.c, lib/memrchr.c:
-	New, stolen from the Fileutils 4.1.
-	* lib/Makefile.am (libbison_a_SOURCES): Adjust.
-	* configure.in: Check for the presence of memrchr, and of its
-	prototype.
-
-2002-01-07  Tim Van Holder  <tim.van.holder@pandora.be>
-
-	* lib/hash.h (__P): Added definition for this macro.
-	* src/Makefile.am: Add parse-skel.c and scan-skel.c to
-	BUILT_SOURCES, to ensure they are generated first.
-	* src/parse-skel.y: Use YYERROR_VERBOSE instead of
-	%error-verbose to allow bootstrapping with bison 1.30x.
-
-2002-01-06  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (parse_braces): Don't fetch the next char, the
-	convention is to fetch on entry.
-	* tests/torture.at (GNU Cim Grammar): Reintroduce their weird
-	'switch' without a following semicolon.
-	* tests/regression.at (braces parsing): New.
-
-2002-01-06  Akim Demaille  <akim@epita.fr>
-
-	Bison is dead wrong in its RR conflict reports.
-
-	* tests/torture.at (GNU Cim Grammar): New.
-	* src/conflicts.c (count_rr_conflicts): Fix.
-
-2002-01-06  Akim Demaille  <akim@epita.fr>
-
-	Creating package.m4 from configure.ac causes too many problems.
-
-	* tests/Makefile.am (package.m4): Create it by hand,
-	AC_CONFIG_TESTDIR no longer does in the most recent CVS Autoconf.
-
-2002-01-06  Akim Demaille  <akim@epita.fr>
-
-	* src/Makefile.am (bison_SOURCES): Add parse-skel.h and
-	skeleton.h.
-
-2002-01-04  Paul Eggert  <eggert@twinsun.com>
-
-	* doc/bison.texinfo (Debugging):
-	Remove YYSTDERR; it's no longer defined or used.
-	Also, s/cstdio.h/cstdio/.
-
-2002-01-03  Akim Demaille  <akim@epita.fr>
-
-	* tests/bison.in, tests/atlocal.in: Adjust to CVS Autoconf.
-
-2002-01-03  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-skel.y (process_skeleton): Don't bind the parser's
-	tracing code to --trace, wait for a better --trace option, with
-	args.
-
-2002-01-03  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.simple (YYSTDERR): Remove, replace `stderr'.
-	The ISO C++ standard is extremely clear about it: stderr is
-	considered a macro, not a regular symbol (see table 94 `Header
-	<cstdio> synopsis', [lib.c.files] 27.8.2 C Library files).
-	Therefore std:: does not apply to it.  It still does with fprintf.
-	Also, s/cstdio.h/cstdio/.
-
-2002-01-03  Akim Demaille  <akim@epita.fr>
-
-	* lib/quotearg.c: Use `#include "..."' instead of `#include <...>'
-	for non system headers.
-
-2002-01-02  Akim Demaille  <akim@epita.fr>
-
-	Equip the skeleton chain with location tracking, runtime trace,
-	pure parser and scanner.
-
-	* src/parse-skel.y: Request a pure parser, locations, and prefix
-	renaming.
-	(%union): Having several members with the same type does not help
-	type mismatches, simplify.
-	(YYPRINT, yyprint): New.
-	(yyerror): ``Rename'' (there is a #define yyerror skel_error) as...
-	(skel_error): this.
-	Handle locations.
-	* src/scan-skel.l: Adjust to these changes.
-	* src/skeleton.h (LOCATION_RESET, LOCATION_LINES, LOCATION_STEP)
-	(LOCATION_PRINT, skel_control_t): New.
-
-2001-12-30  Akim Demaille  <akim@epita.fr>
-
-	* src/parse-skel.y: Get rid of the shift/reduce conflict:
-	replace `gb' with BLANKS.
-	* src/scan-skel.l: Adjust.
-
-2001-12-30  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h: We don't need nor want bcopy.
-	Throw away MS-DOS crap: we don't need getpid.
-	* configure.in: We don't need strndup.  It was even causing
-	problems: because Flex includes the headers *before* us,
-	_GNU_SOURCE is not defined by config.h, and therefore strndup was
-	not visible.
-	* lib/xstrndup.c: New.
-	* src/scan-skel.l: Use it.
-	Be sure to initialize yylval.muscle member when scanning a MUSCLE.
-	* src/parse-skel.y: Use %directives instead of #defines.
-
-2001-12-30  Akim Demaille  <akim@epita.fr>
-
-	* src/skeleton.h: New.
-	* src/output.c (output_parser, output_master_parser): Remove, dead
-	code.
-	* src/output.h (get_lines_number, actions_output, guards_output)
-	(token_definitions_output): Prototype them.
-	* src/parse-skel.y: Add the license notice.
-	Include output.h and skeleton.h.
-	(process_skeleton): Returns void, and takes a single parameter.
-	* src/scan-skel.l: Add the license notice.
-	Include skeleton.h.
-	Don't use %option yylineno: it seems that then Flex imagines
-	REJECT has been used, and therefore it won't reallocate its
-	buffers (which makes no other sense to me than a bug).  It results
-	in warnings for `unused: yy_flex_realloc'.
-
-2001-12-30  Robert Anisko  <robert.anisko@epita.fr>
-
-	* src/muscle_tab.h (MUSCLE_INSERT_INT, MUSCLE_INSERT_STRING)
-	(MUSCLE_INSERT_PREFIX): ...to there.
-	* src/output.c (MUSCLE_INSERT_INT, MUSCLE_INSERT_STRING)
-	(MUSCLE_INSERT_PREFIX): Move from here...
-
-	* src/bison.hairy: Add a section directive.  Put braces around muscle
-	names.  This parser skeleton is still broken, but Bison should not
-	choke on a bad muscle 'syntax'.
-	* src/bison.simple: Add a section directive.  Put braces around muscle
-	names.
-
-	* src/files.h (strsuffix, stringappend): Add declarations.
-	(tab_extension): Add declaration.
-	(short_base_name): Add declaration.
-
-	* src/files.c (strsuffix, stringappend): No longer static.  These
-	functions are used in the skeleton parser.
-	(tab_extension): New.
-	(compute_base_names): Use the computations done in this function
-	to guess if the generated parsers should have '.tab' in their
-	names.
-	(short_base_name): No longer static.
-
-	* src/output.c (output_skeleton): New.
-	(output): Disable call to output_master_parser, and give a try to
-	a new skeleton handling system.
-	(guards_output, actions_output): No longer static.
-	(token_definitions_output, get_lines_number): No longer static.
-
-	* configure.in: Use AM_PROG_LEX and AC_PROG_YACC.
-
-	* src/Makefile.am (bison_SOURCES): Add scan-skel.l and
-	parse-skel.y.
-
-	* src/parse-skel.y: New file.
-	* src/scan-skel.l: New file.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	%name-prefix is broken.
-
-	* src/files.c (spec_name_prefix): Initialize to NULL, not to "yy".
-	Adjust all dependencies.
-	* tests/headers.at (export YYLTYPE): Strengthen this test: use
-	%name-prefix.
-
-	Renaming yylval but not yylloc is not consistent.  Now we do.
-
-	* src/bison.simple: Prefix yylloc if used.
-	* doc/bison.texinfo (Decl Summary): Document that.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Promote `%long-directive' over
-	`%long_directive'.
-	Remove all references to fixed-output-files, yacc is enough.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.simple: Define YYDEBUG and YYERROR_VERBOSE *after* the
-	user prologue.  These are defaults.
-	* tests/actions.at (Mid-rule actions): Make sure the user can
-	define YYDEBUG and YYERROR_VERBOSE.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (header_output): Don't forget to export YYLTYPE and
-	yylloc.
-	* tests/headers.at (export YYLTYPE): New, make sure it does.
-	* tests/regression.at (%union and --defines, Invalid CPP headers):
-	Move to...
-	* tests/headers.at: here.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (rule_s): Member `assoc' is of type `associativity'.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* tests/actions.at (Mid-rule actions): Output on a single line
-	instead of several.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Formatting changes.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	Don't store the token defs in a muscle, just be ready to output it
-	on command.  Now possible via `symbols'.  Fixes a memory leak.
-
-	* src/output.c (token_definitions_output): New.
-	(output_parser, header_output): Use it.
-	* src/reader.c (symbols_save): Remove.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.simple: Do not provide a default for YYSTYPE and
-	YYLTYPE before the user's prologue.  Otherwise it's hardly... a
-	default.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	Mid-rule actions are simply... ignored!
-
-	* src/reader.c (readgram): Be sure to attach mid-rule actions to
-	the empty-rule associated to the dummy symbol, not to the host
-	rule.
-	* tests/actions.at (Mid-rule actions): New.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	Memory leak.
-
-	* src/reader.c (reader): Free grammar.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	Memory leak.
-
-	* src/LR0.c (new_itemsets): Don't allocate `shift_symbol' here,
-	since it allocates it for each state, although only one is needed.
-	(allocate_storage): Do it here.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/options.h, src/options.c (create_long_option_table): Rename
-	as...
-	(long_option_table_new): this, with a clearer prototype.
-	(percent_table): Remove, unused,
-	* src/getargs.c (getargs): Adjust.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c, src/conflicts.c, src/lalr.c, src/lalr.h, src/output.c
-	* src/print.c, src/print_graph.c, src/state.h: Rename state_table
-	as states.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (build_relations): Rename `states' as `states1'.
-	Sorry, I don't understand exactly what it is, no better name...
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c, src/conflicts.c, src/derives.c, src/gram.c
-	* src/gram.h, src/lalr.c, src/nullable.c, src/output.c, src/print.c
-	* src/print_graph.c, src/reader.c, src/reduce.c: Rename rule_table
-	as rules.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.c (rprec, rprecsym, rassoc): Remove, unused since long
-	ago.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c, src/reader.h (user_toknums): Remove.
-	Adjust all users to use symbols[i]->user_token_number.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.c, src/gram.h (sprec, sassoc): Remove.
-	Adjust all users to use symbols[i]->prec or ->assoc.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c, src/reader.h (tags): Remove.
-	Adjust all users to use symbols[i]->tag.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h, src/gram.c (symbols): New, similar to state_table
-	and rule_table.
-	* src/reader.c (packsymbols): Fill this table.
-	Drop sprec.
-	* src/conflicts.c (resolve_sr_conflict): Adjust.
-	* src/reduce.c (reduce_grammar): Adjust: just sort symbols, a
-	single table.
-	Use symbols[i]->tag instead of tags[i].
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at (_AT_DATA_CALC_Y): Also use %union.
-	In addition, put a comment in there, to replace...
-	* tests/regression.at (%union and C comments): Remove.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (Web2c Actions): Blindly move the actual
-	output as expected output.  The contents *seem* right to me, but I
-	can't pretend reading perfectly parser tables...  Nonetheless, all
-	the other tests pass correctly, the table look OK, even though the
-	presence of `$axiom' is to be noted: AFAICS it is useless (but
-	harmless).
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (readgram): Don't add the rule 0 if there were no
-	rules read.  In other words, add it _after_ having performed
-	grammar sanity checks.
-	Fixes the `tests/regression.at (Invalid input: 1)' Failure.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (Web2c Report): Catch up: the rule 0 is now
-	visible, and some states have now a different number.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (readgram): Bind the initial rule's lineno to that
-	of the first rule.
-	* tests/regression.at (Rule Line Numbers, Unresolved SR Conflicts):
-	(Solved SR Conflicts): Adjust rule 0's line number.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	Fix the `GAWK Grammar' failure.
-
-	* src/LR0.c (final_state): Initialize to -1 so that we do compute
-	the reductions of the first state which was mistakenly confused
-	with the final state because precisely final_state was initialized
-	to 0.
-	* tests/sets.at (Nullable): Adjust: state 0 does have lookaheads,
-	now noticed by Bison.
-	* tests/regression.at (Rule Line Numbers): Adjust: state 0 does
-	have a reduction on $default.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.c (ritem_print): Be sure to subtract 1 when displaying
-	rule line numbers.
-	* src/closure.c (print_closure): Likewise.
-	* src/derives.c (print_derives): Likewise.
-	* tests/sets.at (Nullable): Adjust: the rule numbers are correct
-	now.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (lookaheads_print): New.
-	(lalr): Call it when --trace-flag.
-	* tests/sets.at (Nullable): Adjust: when tracing, the lookaheads
-	are dumped.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/derives.c (print_derives): Be sure to use `>= 0', not `> 0',
-	when walking through ritem, even via rule->rhs.
-	* src/reduce.c (dump_grammar, useful_production, reduce_output)
-	(useful_production, useless_nonterminals): Likewise.
-	(reduce_grammar_tables): Likewise, plus update nritems.
-	* src/nullable.c (set_nullable): Likewise.
-	* src/lalr.c (build_relations): Likewise.
-	* tests/sets.at (Nullable): Adjust.
-	Fortunately, now, the $axiom is no longer nullable.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (generate_states): Use nritems, not nitems, nor using
-	the 0-sentinel.
-	* src/gram.c (ritem_longest_rhs): Likewise.
-	* src/reduce.c (nonterminals_reduce): Likewise.
-	* src/print_graph.c (print_graph): Likewise.
-	* src/output.c (output_rule_data): Likewise.
-	* src/nullable.c (set_nullable):  Likewise.
-
-2001-12-29  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c: Comment changes.
-
-2001-12-27  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (YYSTACK_ALLOC, YYSIZE_T): Remove special
-	cases for non-GNU systems like AIX, HP-UX, SGI, Sun, and
-	Sparc, as they were causing more porting problems than the
-	(minor) performance improvement was worth.
-
-	Also, catch up with 1.31's YYSTD.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_gram): Rely on nritems, not the
-	0-sentinel.  See below.
-	Use -1 as separator, not 0.
-	* src/bison.simple (yyparse): Subtract 1 to the rule numbers.
-	Rely on -1 as separator in yyrhs, instead of 0.
-	* tests/calc.at (AT_CHECK_CALC): Now, the parsers no longer issue
-	twice `Now at end of input', therefore there are two lines less to
-	expect.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.at (Unresolved SR Conflicts):
-	(Solved SR Conflicts, Rule Line Numbers): Adjust to the changes
-	below.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (new_state): Recognize the final state by the fact it
-	is reached by eoftoken.
-	(insert_start_shifting_state, insert_eof_shifting_state)
-	(insert_accepting_state, augment_automaton): Remove, since now
-	these states are automatically computed from the initial state.
-	(generate_states): Adjust.
-	* src/print.c: When reporting a rule number to the user, substract
-	1, so that the axiom rule is rule 0, and the first user rule is 1.
-	* src/reduce.c: Likewise.
-	* src/print_graph.c (print_core): For the time being, just as for
-	the report, depend upon --trace-flags to dump the full set of
-	items.
-	* src/reader.c (readgram): Once the grammar read, insert the rule
-	0: `$axiom: START-SYMBOL $'.
-	* tests/set.at: Adjust: rule 0 is now displayed, and since the
-	number of the states has changed (the final state is no longer
-	necessarily the last), catch up.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	Try to make the use of the eoftoken valid.  Given that its value
-	is 0 which was also used as a sentinel in ritem, (i) make sure >= 0
-	is used instead of > 0 where appropriate, (ii), depend upon nritems
-	instead of the 0-sentinel.
-
-	* src/gram.h, src/gram.c (nritems): New.
-	Expected to be duplication of nitems, but for the time being...
-	* src/reader.c (packgram): Assert nritems and nitems are equal.
-	* src/LR0.c (allocate_itemsets, new_itemsets): Adjust.
-	* src/closure.c (print_closure, print_fderives): Likewise.
-	* src/gram.c (ritem_print): Likewise.
-	* src/print.c (print_core, print_grammar): Likewise.
-	* src/print_graph.c: Likewise.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/main.c (main): If there are complains after grammar
-	reductions, then output the report anyway if requested, then die.
-	* src/symtab.c (bucket_new): Initialize `value' to -1, not 0.
-	* src/reader.c (eoftoken): New.
-	(parse_token_decl): If the token being defined has value `0', it
-	is the eoftoken.
-	(packsymbols): No longer hack `tags' to insert `$' by hand.
-	Be sure to preserve the value of the eoftoken.
-	(reader): Make sure eoftoken is defined.
-	Initialize nsyms to 0: now eoftoken is created just like the others.
-	* src/print.c (print_grammar): Don't special case the eof token.
-	* src/regression.at: Adjust: `$' has value 0, not -1, which was a
-	lie anyway, albeit pleasant.
-	* tests/calc.at: Exercise error messages with eoftoken.
-	Change the grammar so that empty input is invalid.
-	Adjust expectations.
-	When yyungeting, be sure to use a valid yylloc: use last_yylloc.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* configure.in: Check the protos of strchr ans strspn.
-	Replace strchr if needed.
-	* src/system.h: Provide the protos of strchr, strspn and memchr if
-	missing.
-	* lib/strchr.c: New.
-	* src/reader.c (symbols_save): Use strchr.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/print.c, src/print_graph.c (escape): New.
-	Use it to quote the TAGS outputs.
-	* src/print_graph.c (print_state): Now errors are in red, and
-	reductions in green.
-	Prefer high to wide: output the state number on a line of its own.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h, src/state.c (reductions_new): New.
-	* src/LR0.c (set_state_table): Let all the states have a
-	`reductions', even if reduced to 0.
-	(save_reductions): Adjust.
-	* src/lalr.c (initialize_LA, initialize_lookaheads): Adjust.
-	* src/print.c (print_reductions, print_actions): Adjust.
-	* src/output.c (action_row): Adjust.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h, src/state.c (errs_new, errs_dup): New.
-	* src/LR0.c (set_state_table): Let all the states have an errs,
-	even if reduced to 0.
-	* src/print.c (print_errs, print_reductions): Adjust.
-	* src/output.c (output_actions, action_row): Adjust.
-	* src/conflicts.c (resolve_sr_conflict): Adjust.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (set_goto_map, initialize_F): Use SHIFT_SYMBOL.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c, src/conflicts.h (print_reductions): Move to...
-	* src/print.c: here.
-	(lookaheadset, shiftset): New, used as additional storage by
-	print_reductions.
-	(print_results): Adjust.
-	(print_shifts, print_gotos, print_errs): New, extracted from...
-	(print_actions): here.
-	* src/print_graph.c (print_actions): Remove dead code.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_dollar, copy_at): Better checking of `n' in
-	`$n' and `@n'.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (add_lookback_edge): Use state_t instead of ints.
-	(build_relations): Adjust.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (set_goto_map): Remove a wrong but benign loop
-	duplication.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (packgram): Catch nitems overflows.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/files.c, src/files.h (guard_obstack): Remove.
-	* src/output.c (output): Adjust.
-	* src/reader.c (parse_braces): New, factoring...
-	(copy_action, copy_guard): these two which are renamed as...
-	(parse_action, parse_guard): these.
-	As a voluntary consequence, using braces around guards is now
-	mandatory.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (rule_t): `guard' and `guard_line' are new members.
-	* src/reader.c (symbol_list): `guard' and `guard_line' are new
-	members.
-	(symbol_list_new): Adjust.
-	(copy_action): action_line is the first line, not the last.
-	(copy_guard): Just as for actions, store the `action' only, not
-	the switch/case/break flesh.
-	Don't parse the user action that might follow the guard, let...
-	(readgram): do it, i.e., now, there can be an action after a
-	guard.
-	In other words the guard is just explicitly optional.
-	(packgram): Adjust.
-	* src/output.c (guards_output): New.
-	(output_parser): Call it when needed.
-	(output): Also free the guard and attrs obstacks.
-	* src/files.c, src/files.h (obstack_save): Remove.
-	(output_files): Remove.
-	As a result, if one needs the former `.act' file, using an
-	appropriate skeleton which requires actions and guards is now
-	required.
-	* src/main.c (main): Adjust.
-	* tests/semantic.at: New.
-	* tests/regression.at: Use `input.y' as input file name.
-	Avoid 8+3 problems by requiring input.c when the test needs the
-	parser.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (symbol_list_new): Be sure to initialize all the
-	fields.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	All the hacks using a final pseudo state are now useless.
-
-	* src/LR0.c (set_state_table): state_table holds exactly nstates.
-	* src/lalr.c (nLA): New.
-	(initialize_LA, compute_lookaheads, initialize_lookaheads): Use it
-	instead of lookaheadsp from the pseudo state (nstate + 1).
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (action_row, token_actions): Use a state_t instead
-	of a integer, and nlookaheads instead of the following state's
-	lookaheadsp.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (log_resolution, flush_shift)
-	(resolve_sr_conflict, set_conflicts, solve_conflicts)
-	(count_sr_conflicts, count_rr_conflicts, conflicts_output)
-	(conflicts_print, print_reductions): Use a state_t instead of an
-	integer when referring to a state.
-	As much as possible, depend upon nlookaheads, instead of the
-	`lookaheadsp' member of the following state (since lookaheads of
-	successive states are successive, the difference between state n + 1
-	and n served as the number of lookaheads for state n).
-	* src/lalr.c (add_lookback_edge): Likewise.
-	* src/print.c (print_core, print_actions, print_state)
-	(print_results): Likewise.
-	* src/print_graph.c (print_core, print_actions, print_state)
-	(print_graph): Likewise.
-	* src/conflicts.h: Adjust.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.hairy: Formatting/comment changes.
-	ANSIfy.
-	Remove `register' indications.
-	Add plenty of `static'.
-
-2001-12-27  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (prepare): Drop the muscle `ntbase' which
-	duplicates ntokens.
-	* src/bison.simple: Formatting/comment changes.
-	Use YYNTOKENS only, which is documented, but not YYNTBASE, which
-	is an undocumented synonym.
-
-2001-12-22  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_table_data): Change the prototype to use
-	`int' for array ranges: some invocations do pass an int, not a
-	short.
-	Reported by Wayne Green.
-
-2001-12-22  Akim Demaille  <akim@epita.fr>
-
-	Some actions of web2c.y are improperly triggered.
-	Reported by Mike Castle.
-
-	* src/lalr.c (traverse): s/F (i)[k] = F (j)[k]/F (j)[k] = F (i)[k]/.
-	* tests/regression.at (Web2c): Rename as...
-	(Web2c Report): this.
-	(Web2c Actions): New.
-
-2001-12-22  Akim Demaille  <akim@epita.fr>
-
-	Reductions in web2c.y are improperly reported.
-	Reported by Mike Castle.
-
-	* src/conflicts.c (print_reductions): Fix.
-	* tests/regression.at (Web2c): New.
-
-2001-12-18  Akim Demaille  <akim@epita.fr>
-
-	Some host fail on `assert (!"foo")', which expands to
-	((!"foo") ? (void)0 : __assert("!"foo."", __FILE__, __LINE__))
-	Reported by Nelson Beebee.
-
-	* src/output.c, src/vcg.c: Replace `assert (!"it succeeded")' with
-	`#define it_succeeded 0' and `assert (it_succeeded)'.
-
-2001-12-17  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple: Don't hard code the skeleton line and filename.
-	* src/output.c (output_parser): Rename 'line' as 'output_line'.
-	New line counter 'skeleton_line' (skeleton-line muscle).
-
-2001-12-17  Paul Eggert  <eggert@twinsun.com>
-
-	* NEWS, doc/bison.texinfo, doc/bison.1, doc/bison.rnh: Document that
-	YYDEBUG must be defined to a nonzero value.
-
-	* src/bison.simple (yytname): Do not assume that the user defines
-	YYDEBUG to a properly parenthesized expression.
-
-2001-12-17  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h (state_t): Rename lookaheads as lookaheadsp.
-	nlookaheads is a new member.
-	Adjust all users.
-	* src/lalr.h (nlookaheads): Remove this orphan declaration.
-	* src/lalr.c (initialize_lookaheads): Set nlookaheads for each
-	state.
-
-2001-12-17  Akim Demaille  <akim@epita.fr>
-
-	* src/files.h, src/files.c (open_files, close_files): Remove.
-	* src/main.c (main): Don't open/close files, nor invoke lex_free,
-	let...
-	* src/reader.c (reader): Do it.
-
-2001-12-17  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (print_reductions): Formatting changes.
-
-2001-12-17  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (flush_shift): Also adjust lookaheadset.
-	(flush_reduce): New.
-	(resolve_sr_conflict): Adjust.
-
-2001-12-17  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_obstack): Be static and rename as...
-	(format_obstack): this, to avoid any confusion with files.c's
-	output_obstack.
-	* src/reader.h (muscle_obstack): Move to...
-	* src/output.h: here, since it's defined in output.c.
-
-2001-12-17  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (action_row, save_column, default_goto)
-	(sort_actions, matching_state, pack_vector): Better variable
-	locality.
-
-2001-12-17  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c: Various formatting changes.
-
-2001-12-17  Akim Demaille  <akim@epita.fr>
-
-	* src/files.c (output_files): Free the output_obstack.
-	* src/main.c (main): Call print and print_graph conditionally.
-	* src/print.c (print): Work unconditionally.
-	* src/print_graph.c (print_graph): Work unconditionally.
-	* src/conflicts.c (log_resolution): Output only if verbose_flag.
-
-2001-12-16  Marc Autret  <autret_m@epita.fr>
-
-	* src/output.c (actions_output): Fix. When we use %no-lines,
-	there is one less line per action.
-
-2001-12-16  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple: Remove a useless #line directive.
-	s/#line %%line %%skeleton/#line %%line "%%parser-file-name"/'.
-	* src/output.c (get_lines_number): New.
-	(output_parser): Adjust, now takes care about the lines of a
-	output muscles.
-	Fix line numbering.
-	(actions_output): Computes the number of lines taken by actions.
-	(output_master_parser): Insert new skeleton which is the name of
-	the output parser file name.
-
-2001-12-15  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple [YYERROR_VERBOSE]: Restore backward compatibility.
-
-2001-12-15  Marc Autret  <autret_m@epita.fr>
-
-	* src/output.c (output_gram): Keep track of the hairy one.
-
-2001-12-15  Akim Demaille  <akim@epita.fr>
-
-	Make `make distcheck' work.
-
-	* lib/Makefile.am (INCLUDES): Add top_srcdir/intl, since hash uses
-	system.h which uses libgettext.h.
-
-2001-12-15  Akim Demaille  <akim@epita.fr>
-
-	* src/nullable.c (set_nullable): Useless rules must be skipped,
-	otherwise, since we range over their symbols, we might look at a
-	nonterminal which no longer ``exists'', i.e., it is not counted in
-	`nvars', hence we overflow our arrays.
-
-2001-12-15  Akim Demaille  <akim@epita.fr>
-
-	The header can also be produced directly, without any obstack!
-	Yahoo!
-
-	* src/files.c, src/files.h (defines_obstack): Remove.
-	(compute_header_macro): Global.
-	(defines_obstack_save): Remove.
-	* src/reader.c (parse_union_decl): No longer output to
-	defines_obstack: its content can be found in the `stype' muscle
-	anyway.
-	(output_token_translations): Merge into...
-	(symbols_output): this.
-	Rename as...
-	(symbols_save): this.
-	(reader): Adjust.
-	* src/output.c (header_output): New.
-	(output): Call it.
-
-2001-12-15  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (parse_union_decl): Instead of handling two obstack
-	simultaneously, use one to define the `stype' muscle, and use the
-	value of the latter to fill defines_obstack.
-	(copy_comment): Remove.
-	(copy_comment2): Work for a single obstack.
-	Rename as...
-	(copy_comment): this.
-
-2001-12-15  Akim Demaille  <akim@epita.fr>
-
-	* src/lex.c, src/lex.h (xgetc): No longer static.
-	* src/reader.c (parse_union_decl): Revamp.
-
-2001-12-15  Akim Demaille  <akim@epita.fr>
-
-	Still making progress in separating Bison into (i) input, (ii)
-	process, (iii) output: now we can directly output the parser file
-	without using table_obstack at all.
-
-	* src/files.c, src/files.h (table_obstack): Bye bye.
-	(parser_file_name): New.
-	* src/files.c (compute_output_file_names): Compute it.
-	* src/output.c (actions_output, output_parser)
-	(output_master_parser): To a file instead of an obstack.
-
-2001-12-15  Akim Demaille  <akim@epita.fr>
-
-	Attach actions to rules, instead of pre-outputting them to
-	actions_obstack.
-
-	* src/gram.h (rule_t): action and action_line are new members.
-	* src/reader.c (symbol_list): Likewise.
-	(copy_action): Save the actions within the rule.
-	(packgram): Save them in rule_table.
-	* src/output.c (actions_output): New.
-	(output_parser): Use it on `%%actions'.
-	(output_rule_data): Don't free rule_table.
-	(output): Do it.
-	(prepare): Don't save the `action' muscle.
-	* src/bison.simple: s/%%action/%%actions/.
-
-2001-12-15  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_action): When --yacc, don't append a `;'
-	to the user action: let it fail if lacking.
-	Suggested by Arnold Robbins and Tom Tromey.
-
-2001-12-14  Akim Demaille  <akim@epita.fr>
-
-	* src/lex.c (literalchar): Simply return the char you decoded, non
-	longer mess around with obstacks and int pointers.
-	Adjust all callers.
-
-2001-12-14  Akim Demaille  <akim@epita.fr>
-
-	* src/lex.c (literalchar): Don't escape the special characters,
-	just decode them, and keep them as char (before, eol was output as
-	the 2 char string `\n' etc.).
-	* src/output.c (output_rule_data): Use quotearg to output the
-	token strings.
-
-2001-12-13  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (YYSIZE_T, YYSTACK_ALLOC, YYSTACK_FREE):
-	Do not infringe on the global user namespace when using C++.
-	(YYFPRINTF, YYSTDERR): New macros, needed for the above.
-	All uses of `fprintf' and `stderr' changed.
-
-	* doc/bison.texinfo: Document YYFPRINTF, YYSTDERR.
-
-2001-12-13  Akim Demaille  <akim@epita.fr>
-
-	The computation of nullable is broken: it doesn't handle empty
-	RHS's properly.
-
-	* tests/torture.at (GNU AWK Grammar): New.
-	* tests/sets.at (Nullable): New.
-	* src/nullable.c (set_nullable): Instead of blindly looping over
-	`ritems', loop over the rules, and then over their rhs's.
-
-	Work around Autotest bugs.
-
-	* src/warshall.c (bitmatrix_print): Don't use `+--+' as table
-	frame, because Autotest understand lines starting with a `+' as
-	traces from the shell.  Then, they are not processed properly.
-	Admittedly an Autotest bug, but we don't have time to wait for
-	Autotest to catch up.
-	* tests/regression.at (Broken Closure): Adjust to the new table
-	frames.
-	Move to...
-	* tests/sets.at: here.
-
-2001-12-13  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (closure): Use nrules instead of playing tricks
-	with BITS_PER_WORD.
-
-2001-12-13  Akim Demaille  <akim@epita.fr>
-
-	* src/print.c (print_actions): Output the handling of `$' as the
-	traces do: shifting the token EOF.  Before EOF was treated as a
-	nonterminal.
-	* tests/regression.at: Adjust some tests.
-	* src/print_graph.c (print_core): Complete the set of items via
-	closure.  The next-to-final and final states are still unsatisfying,
-	but that's to be addressed elsewhere.
-	No longer output the rule numbers, but do output the state number.
-	A single loop for the shifts + gotos is enough, but picked a
-	distinct color for each.
-	(print_graph): Initialize and finalize closure.
-
-2001-12-13  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (readgram): Remove dead code, an strip useless
-	braces.
-	(get_type): Remove, unused.
-
-2001-12-12  Akim Demaille  <akim@epita.fr>
-
-	* src/complain.h, src/complain.c: Remove error_one_per_line, rely
-	on that of lib/error.c.
-
-2001-12-12  Akim Demaille  <akim@epita.fr>
-
-	Some hosts don't like `/' in includes.
-
-	* src/system.h: Include libgettext.h without qualifying the path.
-	* src/Makefile.am (INCLUDES): Add $(top_srcdir)/intl, remove
-	$(top_srcdir).
-
-2001-12-11  Marc Autret  <autret_m@epita.fr>
-
-	* src/output.c (output_parser): Remove useless muscle.
-
-2001-12-11  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple: Remove #line just before %%epilogue. It
-	is now handled in ...
-	* src/reader.c (read_additionnal_code): Add the output of a
-	#line for the epilogue.
-
-2001-12-10  Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c (copy_definition): Re-use CPP-outed code which
-	replace precedent remove.
-	* src/bison.simple: Remove #line before %%prologue because
-	%%input-line is wrong at this time.
-
-2001-12-10  Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c (symbols_output): Clean up.
-	* src/output.c (output_gram, output): Clean up.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (initialize_lookaheads): New.  Extracted from...
-	* src/LR0.c (set_state_table): here.
-	* src/lalr.c (lalr): Call it.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h (shifts): Remove the `number' member: shifts are
-	attached to state, hence no longer need to be labelled with a
-	state number.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	Now that states have a complete set of members, the linked list of
-	shifts is useless: just fill directly the state's shifts member.
-
-	* src/state.h (shifts): Remove the `next' member.
-	* src/LR0.c (first_state, last_state): Remove.
-	Adjust the callers.
-	(augment_automaton): Don't look for the shifts that must be added
-	a shift on EOF: it is those of the state we looked for!  But now,
-	since shifts are attached, it is no longer needed to looking
-	merely by its id: its number.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (augment_automaton): Better variable locality.
-	Remove an impossible branch: if there is a state corresponding to
-	the start symbol being shifted, then there is shift for the start
-	symbol from the initial state.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (augment_automaton): Call `insert_eof_shifting_state'
-	only when appropriate: when insert_start_shifting_state' is not
-	invoked.
-	* tests/regression.at (Rule Line Numbers): Adjust.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (augment_automaton): Now that all states have shifts,
-	merge the two cases addition shifts to the initial state.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (set_state_table): Move to...
-	* src/LR0.c: here.
-	* src/lalr.c (lalr): Don't call it...
-	* src/LR0.c (generate_states): do it.
-	* src/LR0.h (first_state): Remove, only the table is used.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.h (first_shift, first_reduction): Remove.
-	* src/lalr.c: Don't use first_shift: find shifts through the
-	states.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c: Attach shifts to states as soon as they are
-	computed.
-	* src/lalr.c (set_state_table): Instead of assigning shifts to
-	state, just assert that the mapping was properly done.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (insert_start_shift): Rename as...
-	(insert_start_shifting_state): this.
-	(insert_eof_shifting_state, insert_accepting_state): New.
-	(augment_automaton): Adjust.
-	Better locality of the variables.
-	When looking if the start_symbol is shifted from the initial
-	state, using `while (... symbol != start_symbol ...)' sounds
-	better than `while (... symbol < start_symbol ...)': If fail
-	to see how the order between symbols could be relevant!
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.h: Don't declare `spec_name_prefix' and
-	`spec_file_prefix', declared by src/files.h.
-	* src/files.c, src/files.h: Default for spec_name_prefix is "yy".
-	* src/muscle_tab.c (muscle_init): Default prefix to NULL.
-	* src/output.c (prepare): Adjust.
-	* src/reader.c (symbols_output): Likewise.
-	* src/vmsgetargs.c: Vaguely adjust, but who cares?
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/muscle_tab.c (muscle_init): NULL is a better default than
-	`"0"'.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (reader): Calling symbols_output once is enough.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	Now that states have a complete set of members, the linked list of
-	reductions is useless: just fill directly the state's reductions
-	member.
-
-	* src/state.h (struct reductions): Remove member `number' and
-	`next'.
-	* src/LR0.c (first_reduction, last_reduction): Remove.
-	(save_reductions): Don't link the new reductions, store them in
-	this_state.
-	* src/lalr.c (set_state_table): No need to attach reductions to
-	states, it's already done.
-	* src/output.c (output_actions): No longer free the shifts, then
-	the reductions, then the states: free all the states and their
-	members.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/options.c (OPTN, DRTV, BOTH): New.
-	(option_table): Use them.
-
-	* src/muscle_tab.c: Don't include xalloc.h and string.h: that's
-	the job of system.h.
-	* src/options.c: Don't include stdio.h and xalloc.h for the same
-	reasons.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output, prepare): Make sure the values of the
-	muscles `action' and `prologue' are 0-terminated.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	Clean up GCC warnings.
-
-	* src/reader.c (copy_action): `buf' is not used.
-	(parse_skel_decl): Be static.
-	* src/muscle_tab.c (mhash1, mhash2, muscle_insert): Preserve `const'.
-	* src/options.h (create_long_option_table): Have a real prototype.
-	* lib/hash.c, lib/hash.h (hash_insert, hash_insert_at, hash_delete)
-	(hash_delete_at): Return const void *.
-	Adjust casts to preserve the const.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	* configure.in: Require 2.52g.
-	M4 is not needed, but AUTOM4TE is.
-	* m4/m4.m4: Remove.
-	* tests/Makefile.am: Adjust.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	One structure for states is enough, even though theoretically
-	there are LR(0) states and LALR(1) states.
-
-	* src/lalr.h (state_t): Remove.
-	(state_table): Be state_t **, not state_t *.
-	* src/state.h (core, CORE_ALLOC): Rename as...
-	(state_t, STATE_ALLOC): this.
-	Add the LALR(1) members: shifts, reductions, errs.
-	* src/LR0.c (state_table): Rename as...
-	(state_hash): this, to avoid name clashes with the global
-	`state_table'.
-	* src/print_graph.c, src/LR0.c, src/LR0.h, src/conflicts.c
-	* src/lalr.c, src/lalr.h, src/output.c, src/print.c: Adjust.
-
-2001-12-10  Akim Demaille  <akim@epita.fr>
-
-	Bison dumps core on bash.y.
-	Reported by Pascal Bart.
-
-	* src/warshall.c (bitmatrix_print): New.
-	(TC): Use it.
-	When performing a transitive closure R(i, j) && R(j, k) => R(i, k),
-	j must be the outer loop.
-	* tests/regression.at (Broken Closure): New.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* tests/atlocal.in (CPPFLAGS): Do not leave a space between -I and
-	its argument.
-	Reported by Peter Hamorsky.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (err_table): Remove.
-	(resolve_sr_conflict): Adjust.
-	* src/lalr.h (state_t.reduction_table, state_t.shift_table):
-	Rename as...
-	(state_t.reductions, state_t.shifts): this.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (reduce_grammar_tables): No longer disable the
-	removal of useless rules via CPP but via `if (0)', so that the
-	compiler still check the code is valid.
-	For instance, it should have noticed `rline' no longer exists: use
-	the `line' member of rule_t.
-	* src/gram.c (dummy, rline): Remove, unused.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (pack_vector): Use assert, not berror.
-	* src/main.c (berror): Remove, unused.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	New experimental feature: if --verbose --trace output all the
-	items of a state, not only its kernel.
-
-	* src/print.c (print_core): If `trace_flag', then invoke closure
-	before outputting the items of the state (print_core is no longer
-	a correct name them).
-	(print_results): Invoke new_closure/free_closure if needed.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (new_itemsets): Use nshifts only, not shiftcount.
-	* src/closure.c, src/closure.h (itemsetsize): Rename as...
-	(nitemset): for consistency with the rest of the project.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (print_closure): Improve.
-	(closure): Use it for printing input and output.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (FIRSTS, FDERIVES): Adjust to reality: they are
-	indexed by nonterminals.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/warshall.c (TC, RTC): De-obsfucate (source reduced to 22% of
-	what it was!).
-	* src/warshall.h: Remove accidental duplication of the content.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (set_fderives): De-obfuscate.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (print_firsts, print_fderives): De-obfuscate.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (set_firsts): De-obfuscate.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (action_row): De-obfuscate
-	using the good o' techniques: arrays not pointers, variable
-	locality, BITISSET, RESETBIT etc.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	Pessimize the code to simplify it: from now on, all the states
-	have a valid SHIFTS, which NSHIFTS is possibly 0.
-
-	* src/LR0.c (shifts_new): Be global and move to..
-	* src/state.c, src/state.h: here.
-	* src/conflicts, src/lalr.c, src/output.c, src/print.c,
-	* src/print_graph: Adjust.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h (SHIFT_DISABLE, SHIFT_IS_DISABLED): New.
-	* src/conflicts.c: Use it.
-	Restore a few missing `if (!SHIFT_IS_DISABLED)' which were
-	incorrectly ``simplified''.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (flush_shift, resolve_sr_conflict): De-obfuscate
-	using the good o' techniques: arrays not pointers, variable
-	locality, BITISSET, RESETBIT etc.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h (SHIFT_SYMBOL): New.
-	* src/conflicts.c: Use it to deobfuscate.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (count_sr_conflicts, count_rr_conflicts)
-	(print_reductions): De-obfuscate using the good o' techniques:
-	arrays not pointers, variable locality, BITISSET.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (print_reductions): Arrays, not pointers.
-	Use BITISSET.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (print_reductions): Pessimize, but clarify.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (print_reductions): Improve variable locality.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (print_reductions): Pessimize, but clarify.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (print_reductions): Improve variable locality.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h (SHIFT_IS_ERROR, SHIFT_IS_GOTO, SHIFT_IS_SHIFT): New.
-	* src/lalr.c: Use them.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (augment_automaton): Formatting changes.
-	Better variable locality.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (matrix_print): New.
-	(transpose): Use it.
-	Use arrays instead of pointers.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (maxrhs): Move to...
-	* src/gram.c, src/gram.h (ritem_longest_rhs): here.
-	* src/lalr.c (build_relations): Adjust.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (transpose): Free the memory allocated to the
-	argument, as it is replaced by the results by the unique caller.
-	(build_relations): Merely invoke transpose: it handles the memory
-	deallocation.
-	Improve variable locality.
-	Avoid variables used as mere abbreviations.
-	(compute_lookaheads): Use arrays instead of pointers.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (initialize_F): Improve variable locality.
-	Avoid variables used as mere abbreviations.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/derives.c (print_derives): Display the ruleno.
-	* src/lalr.c (initialize_F, transpose): Better variable locality
-	to improve readability.
-	Avoid variables used as mere abbreviations.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (traverse): Use arrays instead of pointers.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/nullable.c (set_nullable): Use a for loop to de-obfuscate
-	the handling of squeue.
-	`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	Because useless nonterminals are now kept alive (instead of being
-	`destroyed'), we now sometimes examine them, and store information
-	related to them.  Hence we need to know their number, and adjust
-	memory allocations.
-
-	* src/reduce.c, src/reduce.h (nuseless_nonterminals): No longer
-	static.
-	* src/LR0.c (allocate_itemsets): The memory allocated to
-	`symbol_count' was used for two different purpose: once to count
-	the number of occurrences of each symbol, and later reassigned to
-	`shift_symbol', containing the symbol that can be shifted from a
-	given state.
-	Deobfuscate, i.e., allocate, use and free `symbol_count' here
-	only, and...
-	(new_itemsets): Allocate `shift_symbol' here.
-	(allocate_itemsets): symbol_count includes useless nonterminals.
-	Make room for them.
-	(free_storage): Use `free', not `XFREE', for pointers that cannot
-	be null.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/nullable.c (set_nullable): Deobfuscate the handling of
-	ritem.
-	`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
-
-2001-12-05  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.c, src/gram.h (ritem_print): New.
-	* src/gram.c (dummy): Remove, now there is actual code in gram.c.
-	(This useless function was defined only to work around VMS linkers
-	that can't handle compilation units with variables only).
-	* src/reduce.c (dump_grammar): Use it to trace the construction of
-	ritem.
-
-2001-12-04  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (union yyalloc): Change member names
-	to be the same as the stack names.
-	(yyparse): yyptr is now union yyalloc *, not char *.
-	(YYSTACK_RELOCATE): Likewise.  This avoids a GCC warning,
-	and may generate better code on some machines.
-	(yystpcpy): Use prototype if __STDC__ is defined, not just
-	if __cplusplus is defined.
-
-2001-11-30  Akim Demaille  <akim@epita.fr>
-
-	* configure.in (WARNING_CFLAGS): Add -Werror when possible.
-	(CFLAGS): Do not include the WARNING_CFLAGS here, since GNU
-	Gettext doesn't compile cleanly, and dies with -Werror.
-	* src/Makefile.am, lib/Makefile.am, tests/atlocal.in (CFLAGS):
-	Include WARNING_CFLAGS here.
-	* lib/xstrdup.c: Include xalloc.h, so that xstrdup be declared
-	before being defined.
-
-2001-11-27  Paul Eggert  <eggert@twinsun.com>
-
-	* lib/quotearg.h (quotearg_n, quotearg_n_style):
-	First arg is int, not unsigned.
-	* lib/quotearg.c (quotearg_n, quotearg_n_style): Likewise.
-	(SIZE_MAX, UINT_MAX): New macros.
-	(quotearg_n_options): Abort if N is negative.
-	Avoid overflow check on hosts where size_t is 64 bits and int
-	is 32 bits, as overflow is impossible there.
-	Fix off-by-one typo that caused unnecessary reallocation.
-
-2001-11-29  Paul Eggert  <eggert@twinsun.com>
-
-	Name space cleanup in generated parser.
-
-	* doc/bison.texinfo (Bison Parser): Discuss system headers
-	and their effect on the user name space.
-
-	* src/bison.simple:
-	(YYSTACK_ALLOC, YYSTACK_FREE, union yyalloc, YYSTACK_GAP_MAX,
-	YYSTACK_BYTES, YYSTACK_RELOCATE): Do not define unless necessary,
-	i.e. unless ! defined (yyoverflow) || defined (YYERROR_VERBOSE).
-
-	(YYSIZE_T): New macro.  Use it instead of size_t, to avoid infringing
-	on user names when possible.
-
-	(YYSTACK_USE_ALLOCA): Do not define; just use any existing defn.
-	Simplify test for whather <alloca.h> exists.
-
-	(<stdlib.h>): Include if we will use malloc, and if standard C or C++.
-
-	(<stdio.h>): Include if YYDEBUG.
-
-	(yymemcpy): Renamed from __yy_memcpy.  Do not define unless
-	! defined (yyoverflow) && ! defined (yymemcpy).
-
-	(yymemcpy, yyparse): Rename local variables as needed so that
-	they all begin with 'yy'.
-
-	(yystrlen, yystpcpy): New functions.
-
-	(YY_DECL_NON_LSP_VARIABLES): Renamed from _YY_DECL_VARIABLES.
-	All uses changed.
-
-	(yyparse): size_t -> YYSIZE_T.  Use yystrlen and yystpcpy
-	instead of relying on string.h functions.  Use YYSTACK_ALLOC
-	and YYSTACK_FREE instead of malloc and free.
-
-2001-11-30  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.simple (YYSTYPE, YYLTYPE): Move their definitions
-	before their first uses.
-	(YYBISON, YYPURE): Move to the top of the output.
-
-2001-11-30  Akim Demaille  <akim@epita.fr>
-
-	* tests/reduce.at (Useless Nonterminals): Fix.
-
-2001-11-30  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.simple (YYSTACK_FREE): Use `do {;} while (0)' as empty
-	if body instead of `;' to pacify GCC's warnings.
-
-2001-11-30  Akim Demaille  <akim@epita.fr>
-
-	Instead of mapping the LHS of unused rules to -1, keep the LHS
-	valid, but flag the rules as invalid.
-
-	* src/gram.h (rule_t): `useful' is a new member.
-	* src/print.c (print_grammar): Adjust.
-	* src/derives.c (set_derives): Likewise.
-	* src/reader.c (packgram, reduce_output): Likewise.
-	* src/reduce.c (reduce_grammar_tables): Likewise.
-	* tests/reduce.at (Underivable Rules, Useless Rules): New.
-
-2001-11-30  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (reduce_output): Formatting changes.
-	* src/print.c (print_results, print_grammar): Likewise.
-	* tests/regression.at (Rule Line Numbers)
-	(Solved SR Conflicts, Unresolved SR Conflicts): Adjust.
-
-2001-11-30  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (nonterminals_reduce): Instead of throwing away
-	useless nonterminals, move them at the end of the symbol arrays.
-	(reduce_output): Adjust.
-	* tests/reduce.at (Useless Nonterminals): Adjust.
-
-2001-11-30  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c: Various comment/formatting changes.
-	(nonterminals_reduce): New, extracted from...
-	(reduce_grammar_tables): here.
-	(reduce_grammar): Call nonterminals_reduce.
-
-2001-11-29  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (YYSTACK_REALLOC): Remove.
-	(YYSTACK_ALLOC): Resurrect this macro, with its old meaning.
-	(YYSTACK_FREE, YYSTACK_GAP_MAX, YYSTACK_BYTES, YYSTACK_RELOCATE):
-	New macros.
-	(union yyalloc): New type.
-	(__yy_memcpy): Last arg is size_t, not unsigned int, to remove
-	an arbitrary restriction on hosts where size_t is wider than int.
-
-	(yyparse): Don't dump core if alloca or malloc fails; instead, report
-	a parser stack overflow.  Allocate just one block of memory for all
-	three stacks, instead of allocating three blocks; this typically is
-	faster and reduces fragmentation.
-
-	Do not limit the number of items in the stack to a value that fits
-	in 'int', as this is an arbitrary limit on hosts with 64-bit
-	size_t and 32-bit int.
-
-2001-11-29  Marc Autret  <autret_m@epita.fr>
-
-	* tests/calc.at [AT_DATA_CALC_Y]: Use %error-verbose instead
-	of defining YYERROR_VERBOSE.
-	[AT_DATA]: $4 is now out of C declarations in the prologue.
-
-2001-11-28  Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c (parse_dquoted_param): New.
-	(parse_skel_decl): Use it.
-	* src/lex.h: Add its prototype.
-	* src/lex.c (literalchar): Become not static.
-
-2001-11-28  Marc Autret  <autret_m@epita.fr>
-
-	* src/output.h: And put its extern declaration here.
-	* src/output.c (error_verbose): Define here.
-	(prepare): Echo name modification.
-	* src/getargs.h: Clean its extern declaration.
-	* src/getargs.c (error_verbose_flag): Remove.
-	(getargs): Remove case 'e'.
-	* src/options.c (option_table): 'error-verbose' is now seen as simple
-	percent option.
-	Include output.h.
-
-	* src/reader.c (read_declarations): Remove case tok_include.
-	(parse_include_decl): Remove.
-	* src/lex.h (token_t): Remove tok_include.
-	* src/options.c (option_table): 'include' is now a simple command line
-	option.
-
-2001-11-28  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple: Adjust muscle names.
-	* src/muscle_tab.c (muscle_init): Also rename the muscles.
-	* src/output.c (prepare): s/_/-/ for the muscles names.
-	(output_parser): When scanning for a muscle, allow '-' instead of '_'.
-
-2001-11-28  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple: Fix debug.
-	[YYERROR_VERBOSE]: Re-integrate as an internal macro.
-
-2001-11-28  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (shifts_new): New.
-	(save_shifts, insert_start_shift, augment_automaton): Use it.
-
-2001-11-28  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (closure): `b' and `ruleno' denote the same value:
-	keep ruleno only.
-
-2001-11-28  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (closure): Instead of looping over word in array
-	then bits in words, loop over bits in array.
-
-2001-11-28  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (closure): No longer optimize the special case
-	where all the bits of `ruleset[r]' are set to 0, to make the code
-	clearer.
-
-2001-11-28  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (closure): `r' and `c' are new variables, used to
-	de-obfuscate accesses to RULESET and CORE.
-
-2001-11-28  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (reduce_print): Use ngettext.
-	(dump_grammar): Improve the trace accuracy.
-
-2001-11-28  Akim Demaille  <akim@epita.fr>
-
-	* src/reduce.c (dump_grammar): Don't translate trace messages.
-
-2001-11-28  Akim Demaille  <akim@epita.fr>
-
-	* tests/reduce.at (Useless Terminals, Useless Nonterminals): New.
-	* src/reduce.c (reduce_grammar_tables): Do not free useless tags,
-	as all tags are free'ed afterwards.
-	From Enrico Scholz.
-
-2001-11-27  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (YYSTACK_REALLOC): Fix typo that caused us to
-	use alloca when we didn't want to, and vice versa.
-
-2001-11-27  Marc Autret  <autret_m@epita.fr>
-
-	* src/muscle_tab.c (muscle_init): Remove 'verbose' muscle
-	initialization.
-	* src/output.c (prepare): Remove its update.
-
-2001-11-27  Marc Autret  <autret_m@epita.fr>
-
-	* tests/torture.at [AT_DATA]: Remove YYERROR_VERBOSE definition.
-	Use %error-verbose.
-
-2001-11-27  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple: Remove YYERROR_VERBOSE using.
-	Use %%error_verbose.
-	(yyparse): Likewise.
-	* src/output.c (prepare): Give its final value.
-	* src/muscle_tab.c (muscle_init): Init new muscle 'error_verbose'.
-	* src/getargs.h: Add its extern declaration.
-	* src/getargs.c (error_verbose_flag): New int.
-	(getargs): Update to catch new case.
-	* src/options.c (option_table): 'error-verbose' is a new option.
-	(shortopts): Update.
-
-2001-11-27  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h: Use intl/libgettext.h.
-	* src/Makefile.am (INCLUDES): Add -I $(top_srcdir).
-
-2001-11-27  Akim Demaille  <akim@epita.fr>
-
-	* tests/torture.at (Exploding the Stack Size with Malloc):
-	s/YYSTACK_USE_ALLOCA_ALLOCA/YYSTACK_USE_ALLOCA/.
-
-2001-11-27  Akim Demaille  <akim@epita.fr>
-
-	* src/files.c: Include error.h.
-	Reported by Hans Aberg.
-
-2001-11-26  Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c (parse_include_decl): New, not yet implemented.
-	(read_declarations): Add case tok_include.
-	* src/getargs.h (include): Add its extern definition.
-	* src/getargs.c (include): New const char *.
-	(getargs): Add case '-I'.
-	* src/options.c (option_table): Add include as command line and
-	percent option.
-	* src/lex.h (token_t): Add tok_include.
-
-2001-11-26  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (readgram): Make sure rules for mid-rule actions
-	have a lineno equal to that of their host rule.
-	Reported by Hans Aberg.
-	* tests/regression.at (Rule Line Numbers): New.
-
-2001-11-26  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (allocate_itemsets): kernel_size contains ints, not
-	size_ts.
-
-2001-11-26  Akim Demaille  <akim@epita.fr>
-
-	* src/complain.c, src/complain.h (error): Remove, provided by
-	lib/error.[ch].
-
-2001-11-26  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (read_declarations): Don't abort on tok_illegal,
-	issue an error message.
-	* tests/regression.at (Invalid %directive): New.
-	Reported by Hans Aberg.
-
-2001-11-26  Akim Demaille  <akim@epita.fr>
-
-	* configure.in: Invoke AC_FUNC_OBSTACK and AC_FUNC_ERROR_AT_LINE.
-	* lib/Makefile.am (libbison_a_SOURCES): Adjust.
-
-2001-11-26  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (conflicts_print): Don't complain at all when
-	there are no reduce/reduce conflicts, and as many shift/reduce
-	conflicts as expected.
-	* tests/regression.at (%expect right): Adjust.
-
-2001-11-23  Akim Demaille  <akim@epita.fr>
-
-	* lib/alloca.c: Update, from fileutils.
-
-2001-11-23  Akim Demaille  <akim@epita.fr>
-
-	* lib/Makefile.am (libbison_a_LIBADD): Add @ALLOCA@.
-
-2001-11-23  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h: Include alloca.h.
-	* src/main.c (main) [C_ALLOCA]: Call alloca (0).
-
-2001-11-23  Akim Demaille  <akim@epita.fr>
-
-	* src/print_graph.c (print_actions): Remove `rule', unused.
-	* src/LR0.c (kernel_size): Contain `int' instead of `size_t' to
-	pacify GCC's signed < unsigned warnings.
-	* src/closure.c (itemsetsize): Likewise.
-	* src/reader.c (symbol_list_new): Static.
-
-2001-11-23  Akim Demaille  <akim@epita.fr>
-
-	Attaching lineno to buckets is stupid, since only one copy of each
-	symbol is kept, only the line of the first occurrence is kept too.
-
-	* src/symtab.h, src/symtab.c (bucket): Remove the line member.
-	* src/reader.c (rline_allocated): Remove, unused.
-	(symbol_list): Have a `line' member.
-	(symbol_list_new): New.
-	(readgram): Use it.
-	* src/print.c (print_grammar): Output the rule line numbers.
-	* tests/regression.at (Solved SR Conflicts)
-	(Unresolved SR Conflicts): Adjust.
-	Reported by Hans Aberg.
-
-2001-11-22  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple [YYERROR_VERBOSE]: Force its value to be 1 or 0.
-
-2001-11-22  Marc Autret  <autret_m@epita.fr>
-
-	* src/muscle_tab.c (muscle_init): Remove initialization of
-	skeleton muscle.
-	* src/output.c (output_master_parser): Do it here.
-
-2001-11-20  Akim Demaille  <akim@epita.fr>
-
-	* po/sv.po: New.
-	* configure.in (ALL_LINGUAS): Adjust.
-	* po/POTFILE.in: Remove `nullable.c' and `derives.c' which no
-	longer contains strings to translate.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (conflicts_print): Add a missing \n.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/nullable.c (nullable_print): New.
-	(set_nullable): Call it when tracing.
-	Better locality of variables.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/print.c (print_actions): Better locality of variables.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/derives.c (print_derives): Fix and enrich.
-	* src/closure.c (print_fderives): Likewise.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (itemsetend): Remove, replaced with...
-	(itemsetsize): new.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (kernel_end): Remove, replaced with...
-	(kernel_size): new.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/conflicts.c (set_conflicts): Use arrays instead of pointers
-	to clarify.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c (closure): Use arrays instead of pointers to clarify.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/closure.c, src/derives.c, src/nullable.c: Adjust various
-	trace messages.
-	* src/LR0.c: Likewise.
-	(allocate_itemsets): Use arrays instead of pointers to clarify.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.c (statistics_flag): Replace with...
-	(trace_flag): New.
-	(longopts): Accept --trace instead of --statistics.
-	* src/getargs.h, src/options.c: Adjust.
-	* src/LR0.c, src/closure.c, src/derives.c, src/nullable.c,
-	* src/reduce.c: Use trace_flags instead of the CPP conditional TRACE.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (new_itemsets, get_state): Use more arrays and fewer
-	pointers to clarify the code.
-	(save_reductions, save_shifts): Factor common parts of alternatives.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (new_state, get_state): Complete TRACE code.
-	* src/closure.c: Include `reader.h' to get `tags', needed by the
-	trace code.
-	Rename the conditional DEBUG as TRACE.
-	Output consistently TRACEs to stderr, not stdout.
-	* src/derives.c: Likewise.
-	* src/reduce.c: (inaccessable_symbols): Using if is better style
-	than goto.
-	Use `#if TRACE' instead of `#if 0' for tracing code.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h (LIST_FREE, shortcpy): New.
-	* src/LR0.c: Use them.
-	* src/output.c (free_itemsets, free_reductions, free_shifts):
-	Remove, replaced by LIST_FREE.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/state.h (CORE_ALLOC, SHIFTS_ALLOC, ERRS_ALLOC)
-	(REDUCTIONS_ALLOC):  New.
-	* src/LR0.c, src/conflicts.c: Use them to de-obfuscate memory
-	allocation.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/LR0.c (new_state): Complete trace code.
-	* src/nullable.c (set_nullable): Don't translate traces.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/print_graph.c (print_core): Better locality of variables.
-	* src/print.c (print_core): Likewise.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/vcg.c: You do the output, so you are responsible of the
-	handling of VCG syntax, in particular: use quotearg.
-	* src/print_graph.c: Don't.
-	(print_actions): Don't output the actions as part of the nodes,
-	since that's the job of the edges.
-	(print_state): Don't output by hand: fill the node description,
-	and ask for its output.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.simple (yyparse): When verbosely reporting an error,
-	no longer put additional quotes around token names.
-	* tests/calc.at: Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.h, src/symtab.c: `line' is a new member of `bucket'.
-	* src/reader.c (record_rule_lines, rline, rline_allocated): Remove.
-	* src/output.c: Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (rprec, rprecsym, rassoc): Remove, now part of...
-	(rule_t): this.
-	* src/conflicts.c, src/reader.c, src/reduce.c: Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/gram.h (rule_t): New.
-	(rule_table): New.
-	(rrhs, rlhs): Remove, part of state_t.
-	* src/print_graph.c, src/closure.c, src/conflicts.c, src/derives.c,
-	* src/lalr.c, src/nullable.c, src/output.c, src/print.c,
-	* src/reader.c, src/reduce.c: Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (symbols_output): New, extracted from...
-	(packsymbols): Here.
-	(reader): Call it.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (set_maxrhs, maxrhs): Remove, replaced with...
-	(maxrhs): this new function.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (F): New macro to access the variable F.
-	Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h (LA): New macro to access the variable LA.
-	* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
-	* src/lalr.c: Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.c (initialize_LA): Only initialize LA.  Let...
-	(set_state_table): handle the `lookaheads' members.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h (lookaheads): Removed array, whose contents is now
-	a member of...
-	(state_t): this structure.
-	* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
-	Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h (consistent): Removed array, whose contents is now
-	a member of...
-	(state_t): this structure.
-	* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
-	Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h (reduction_table, shift_table): Removed arrays, whose
-	contents are now members of...
-	(state_t): this structure.
-	* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
-	Adjust.
-
-2001-11-19  Akim Demaille  <akim@epita.fr>
-
-	* src/lalr.h (state_t): New.
-	(state_table): Be a state_t * instead of a core **.
-	(accessing_symbol): Remove, part of state_t.
-	* src/lalr.c: Adjust.
-	(set_accessing_symbol): Merge into...
-	(set_state_table): this.
-	* src/print_graph.c, src/conflicts.c: Adjust.
-
-2001-11-14  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.at, tests/output.at, tests/regression.at,
-	* tests/testsuite.at, tests/torture.at: Rely on Autotest 2.52g:
-	now the tests are run in private dirs, therefore AC_CLEANUP and
-	family can be simplified to 0-ary.
-	* tests/atlocal.in: Now that we run `elsewhere' than in tests/,
-	use abs. path to find config.h.
-	* tests/calc.at (AT_CHECK_CALC): Don't try to check the compiler's
-	stderr, there can be way too much random noise.
-	Instead pass -Werror to GCC and rely on the exit status.
-	Reported by Wolfram Wagner.
-
-2001-11-14  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.simple (yyparse): Let yyls1, yyss1 and yyvs1 be
-	defined only if yyoverflow is defined, to avoid `warning: unused
-	variable `yyvs1''.
-	Reported by The Test Suite.
-
-2001-11-14  Akim Demaille  <akim@epita.fr>
-
-	* src/print.c: Include reduce.h.
-	Reported by Hans Aberg.
-
-2001-11-14  Akim Demaille  <akim@epita.fr>
-
-	* src/lex.c, src/lex.h (token_buffer, unlexed_token_buffer):
-	Revert a previous patch:  these are really const.
-	* src/conflicts.c (conflict_report): Additional useless pair of
-	braces to pacify GCC's warnings for `if () if () {} else {}'.
-	* src/lex.c (parse_percent_token): Replace equal_offset with
-	arg_offset.
-	arg is const.
-	Be sure to strdup `arg' when used, since there is no reason for
-	token_buffer not to change.
-
-2001-11-14  Akim Demaille  <akim@epita.fr>
-
-	* src/system.h (EXIT_SUCCESS, EXIT_FAILURE): Ensure a proper
+	This is getting complex, especially since because initializing a
+	global (impure interface) is different from initializing a local
+	variable.  To simplify, the local yylloc is not initialized during its
 	definition.
-	* src/main.c (main): Use them.
-	Suggested by Hans Aberg.
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+	* data/c.m4 (b4_yyloc_default_define): Replace by...
+	(b4_yyloc_default): this.
+	Adjust dependencies.
+	* data/glr.cc: Initialize yylloc.
+	* data/yacc.c (b4_declare_scanner_communication_variables):
+	Initialize yylloc during its definition.
+	Don't define yyloc_default.
+	(yypush_parse): The location formal is not const, as we might
+	initialize it.
+	(yyparse): Define yyloc_default.
+	Use it before running the user initial action.
+	Possibly update the first location on the stack, and the pushed
+	location after the user initial action.
+	* tests/actions.at (Initial locations): Check that the initial
+	location is correct.
 
-	* src/system.h (ngettext): Now that we use ngettext, be sure to
-	provide a default definition when NLS are not used.
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+	yacc.c, glr.c: a better YY_LOCATION_PRINT
+	* data/c.m4 (b4_yy_location_print_define): New.
+	Now issues "short" locations, e.g., "1.1" instead of "1.1-1.1".
+	Was initially a function, but then we face "static but unused"
+	warnings.
+	Simpler as a macro.
+	* tests/local.at, data/glr.c, data/yacc.c: Use it instead of duplicating.
+	* tests/actions.at: Adjust expectations.
 
-	* doc/bison.texinfo: Use `$' as shell prompt, not `%'.
-	Use @kbd to denote user input.
-	(Language and Grammar): ANSIfy the example.
-	Adjust its layout for info/notinfo.
-	(Location Tracking Calc): Output error messages to stderr.
-	Output locations in a more GNUtically correct way.
-	Fix a couple of Englishos.
-	Adjust @group/@end group pairs.
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+	yacc.c: simplify initialization
+	* data/yacc.c: Fuse the initializations of yyssp, yyss and the like.
+	Remove an obsolete comment: we do initialize these initial stack
+	members (in some cases).
 
-	%expect was not functioning at all.
+2012-11-05  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/conflicts.c (expected_conflicts): Set to -1.
-	(conflict_report): Use ngettext.
-	(conflicts_print): Check %expect and make its violation an error.
-	* doc/bison.texinfo (Expect Decl): Adjust.
-	* configure.in (AM_GNU_GETTEXT): Ask for ngettext.
-	* tests/regression.at (%expect not enough, %expect right)
-	(%expect too much): New.
+	doc: formatting changes
+	* doc/bison.texi: In a pointer type.
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+2012-11-05  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/regression.at (Conflicts): Rename as...
-	(Unresolved SR Conflicts): this.
-	(Solved SR Conflicts): New.
+	c++: fix position operator signatures
+	* data/location.cc (operator+=, operator-=): Remove const from return
+	type.
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+2012-11-05  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reduce.c (print_results): Rename as...
-	(reduce_output): This.
-	Output to OUT, passed as argument, instead of output_obstack.
-	(dump_grammar): Likewise.
-	(reduce_free): New.
-	Also free V1.
-	(reduce_grammar): No longer call reduce_output, since...
-	* src/print.c (print_results): do it.
-	* src/main.c (main): Call reduce_free;
+	tests: remove useless location initialization.
+	* tests/glr-regression.at: here.
+	glr.c does initialize yylloc.
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+2012-11-05  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/conflicts.c (print_reductions): Accept OUT as argument.
-	Output to it, not to output_obstack.
-	* src/print.c (print_actions): Adjust.
+	tests: fix locations in C
+	* tests/local.at (AT_YYERROR_DEFINE): Don't display the end of the location
+	if it is not after its beginning.
+	* tests/actions.at, tests/cxx-type.at: Adjust the expected output.
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+2012-11-05  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/conflicts.c (count_sr_conflicts, count_rr_conflicts): Return
-	the result instead of using...
-	(src_total, rrc_total, src_count, rrc_count): Remove.
-	(any_conflicts): Remove.
-	(print_conflicts): Split into...
-	(conflicts_print, conflicts_output): New.
-	* src/conflicts.h: Adjust.
-	* src/main.c (main): Invoke both conflicts_output and conflicts_print.
-	* src/print.c (print_grammar): Issue `\n' between two rules.
-	* tests/regression.at (Conflicts): New.
-	Reported by Tom Lane.
+	tests: handle %parse-param in the generated yyerror
+	* tests/local.at (AT_PARSE_PARAMS): New.
+	(AT_YYERROR_FORMALS, AT_YYERROR_DEFINE): Use it to add the parse-param
+	to yyerror.
+	* tests/calc.at, tests/regression.at: Use AT_YYERROR_DEFINE and
+	AT_YYERROR_DECLARE, now that they handle properly the parse-params.
+	Be sure to let AT_BISON_OPTION_PUSHDEFS now what parse-params are used.
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+2012-11-05  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/regression.at (Invalid input): Remove, duplicate with
-	``Invalid input: 1''.
+	tests: simplifications
+	* tests/actions.at (Exotic Dollars): Formatting changes.
+	Use AT_FULL_COMPILE.
+	(AT_CHECK_PRINTER_AND_DESTRUCTOR): Remove useless initialization of @$.
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/torture.at (AT_DATA_STACK_TORTURE)
-	(Exploding the Stack Size with Alloca)
-	(Exploding the Stack Size with Malloc): New.
+	grammars: fix display of nul character in error message
+	Reported by Marc Mendiola.
+	http://lists.gnu.org/archive/html/help-bison/2012-10/msg00017.html
 
-2001-11-12  Akim Demaille  <akim@epita.fr>
+	* gnulib: Update to get quote_mem.
+	* src/scan-gram.l: Use it.
+	* tests/input.at (Invalid inputs): Additional checks.
+	* tests/named-refs.at: Likewise.
 
-	* src/bison.simple (YYSTACK_REALLOC): New.
-	(yyparse) [!yyoverflow]: Use it and free the old stack.
-	Reported by Per Allansson.
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-12  Pascal Bart  <pascal.bart@epita.fr>
+	tests: sort
+	* tests/regression.at (Invalid inputs, Invalid inputs with {}): Move to...
+	* tests/input.at: here, for consistency.
 
-	* src/bison.simple: Define type yystype instead of YYSTYPE, and
-	define CPP macro, which substitute YYSTYPE by yystype.
-	* src/reader.c (parse_union_decl): Output yystype/YYSTYPE as we do
-	with yyltype/YYLTYPE.  This allows inclusion of the generated
-	header within the parser if the compiler, such as GGC, accepts
-	multiple equivalent #defines.
-	From Akim.
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-05  Akim Demaille  <akim@epita.fr>
+	tests: cosmetic changes
+	* tests/actions.at (AT_CHECK_PRINTER_AND_DESTRUCTOR): Improve the
+	displayed title.
 
-	* src/reader.c (symbols_output): New, extracted from...
-	(packsymbols): here.
-	(reader): Adjust.
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-05  Akim Demaille  <akim@epita.fr>
+	comment changes
+	* data/lalr1.cc: here.
 
-	* src/lex.c (parse_percent_token): s/quotearg/quote/.
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-05  Akim Demaille  <akim@epita.fr>
+	autoconf: update
+	There are comment changes only in the files we use.
 
-	* tests/regression.at (AT_TEST_CPP_GUARD_H): Adjust the clean up
-	pattern.
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-05  Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	* src/options.h (struct option_table_struct): set_flags is void*.
-	* src/options.c (longopts): Support `--output' and `%output'.
-	(usage): Adjust.
-	* src/lex.h (tok_setopt): Remove, replaced with...
-	(tok_intopt, tok_stropt): these new guys.
-	* src/lex.c (getopt.h): Not needed.
-	(token_buffer, unlexed_token_buffer): Not const.
-	(percent_table): Promote `-' over `_' in directive names.
-	Active `%name-prefix', `file-prefix', and `output'.
-	(parse_percent_token): Accept possible arguments to directives.
-	Promote `-' over `_' in directive names.
+2012-10-28  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-04  Akim Demaille  <akim@epita.fr>
+	regen
 
-	* doc/bison.texinfo (Decl Summary): Split the list into
-	`directives for grammars' and `directives for bison'.
-	Sort'em.
-	Add description of `%name-prefix', `file-prefix', and `output'.
-	Promote `-' over `_' in directive names.
-	(Bison Options): s/%locactions/%locations/.  Nice Freudian slip.
-	Simplify the description of `--name-prefix'.
-	Promote `-' over `_' in directive names.
-	Promote `--output' over `--output-file'.
-	Fix the description of `--defines'.
-	* tests/output.at: Exercise %file-prefix and %output.
+2012-10-28  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-02  Akim Demaille  <akim@epita.fr>
+	yacc.c: initialize yylval and yylloc.
+	When generating a pure push parser, the initialization of yylval and
+	yylloc may not be visible to the compiler.  With warnings enabled, GCC
+	4.3.6, 4.4.7, 4.5.4, and 4.6.3 report uninitialized uses of
+	yylval/yylloc.  Using local pragmas to disable these warnings is not
+	supported before 4.6, and 4.6 does not support it properly.  So
+	initialize yylval and yylloc at their definition.  Reported by Peter
+	Simons.  See
+	http://lists.gnu.org/archive/html/bison-patches/2012-10/msg00133.html
 
-	* doc/refcard.tex: Update.
+	* data/c.m4 (b4_yyloc_default_define): New.
+	* data/yacc.c: Use it when locations are requested.
+	(YYLVAL_INITIALIZE): Replace by...
+	(YY_INITIAL_VALUE): this.
+	(yyparse): Initialize yylloc and yylval.
+	Therefore, remove the initialization of yylloc's field.
+	* data/glr.c: Likewise.
 
-2001-11-02  Akim Demaille  <akim@epita.fr>
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/symtab.h (SUNDEF): New.
-	* src/symtab.c (bucket_new): Init user_token_number to SUNDEF to
-	stand for `uninitialized', instead of 0.
-	* src/reader.c (packsymbols, parse_thong_decl): Adjust.
-	* src/lex.c (lex): Adjust.
+	Merge branch 'branch-2.6' into maint
+	* origin/branch-2.6:
+	  regen
+	  yacc.c: do not define location support when not using locations
+	  maint: be compilable with GCC 4.0
+	  tests: address a warning from GCC 4.4
+	  tests: don't use options that Clang does not support
+	  tests: restore the tests on -Werror
+	  regen
+	  parse-gram: update the Bison interface
+	  fix comment
 
-	* tests/calc.at (_AT_DATA_CALC_Y): Declare a token for EOF.
-	Number it 0.
-	Let yylex return it instead of a plain 0.
-	Reported by Dick Streefland.
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-02  Akim Demaille  <akim@epita.fr>
+	doc: minor style change
+	* doc/figs/example-reduce.txt: here.
 
-	* tests/regression.at (Mixing %token styles): New test.
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-02  Akim Demaille  <akim@epita.fr>
+	maint: use gendocs's new -I option
+	* gnulib: Update gendocs.
+	* cfg.mk (gendocs_options_): New.
 
-	* src/reader.c (parse_thong_decl): Formatting changes.
-	(token_translations_init): New, extracted from...
-	(packsymbols): Here.
-	Adjust.
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-01  Akim Demaille  <akim@epita.fr>
+	regen
 
-	* tests/regression.at (AT_TEST_CPP_GUARD_H): New.
-	Check that `9foo.y' produces correct cpp guards.
-	* src/files.c (compute_header_macro): Prepend `BISON_' to CPP
-	guards.
-	Reported by Wwp.
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-11-01  Akim Demaille  <akim@epita.fr>
+	yacc.c: don't use _Pragma GCC diagnostic with 4.6
+	Reported by Peter Simons.
+	http://lists.gnu.org/archive/html/bug-bison/2012-10/msg00033.html
 
-	* tests/regression.at (Invalid input: 2): New.
-	* src/lex.c (unlexed_token_buffer): New.
-	(lex, unlex): Adjust: when unlexing, be sure to save token_buffer
-	too.
-	Reported by Wwp.
+	* data/yacc.c (b4_declare_scanner_communication_variables): 4.7
+	seems fine though.
 
-2001-11-01  Akim Demaille  <akim@epita.fr>
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/calc.at: Catch up with 1.30.
-	* configure.in: Bump to 1.49a.
-	Adjust to newer Autotest.
+	regen
 
-2001-10-19  Pascal Bart  <pascal.bart@epita.fr>
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/conflicts.c: Move global variables rrc_total and src_total ...
-	(print_conflicts): here.
-	* src/output.c (output): Free global variable user_toknums.
-	* src/lex.c (token_obstack): Become static.
+	yacc.c: do not define location support when not using locations
+	* data/yacc.c (YYLLOC_DEFAULT, YYRHSLOC): Don't define when not
+	using locations.
 
-2001-10-18  Akim Demaille  <akim@epita.fr>
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/atlocal.in (GCC): Add.
-	* tests/calc.at: s/m4_match/m4_bmatch/.
-	s/m4_patsubst/m4_bpatsubst/.
-	(AT_CHECK_CALC): Check the compiler's stderr only if it's GCC.
-	* configure.in: AC_SUBST(GCC).
+	maint: be compilable with GCC 4.0
+	The "shadows a global declaration" warning in GCC 4.0 was a bit
+	annoying.  It does not like that a type name be used in a prototype of
+	a function (not the implementation, just the declaration):
 
-2001-10-14  Marc Autret  <autret_m@epita.fr>
+	  In file included from src/LR0.c:38:
+	  src/reader.h:56: warning: declaration of 'named_ref' shadows a
+	                            global declaration
+	  src/named-ref.h:35: warning: shadowed declaration is here
 
-	* src/options.c (create_long_option_table): Fix.
+	It does not like either when a global variable name is used in a
+	prototype.  Flex 2.5.37 generates this prototype:
 
-2001-10-10  Akim Demaille  <akim@epita.fr>
+	  void gram_set_debug (int debug_flag  );
 
-	* src/bison.simple: Be sure to set YYSTACK_USE_ALLOCA.
+	* src/getargs.h, src/getargs.c (debug_flag): Rename as...
+	(debug): this.
+	Adjust dependencies.
+	* src/reader.h: Don't use "named_ref" as a formal argument name.
 
-2001-10-04  Akim Demaille  <akim@epita.fr>
+2012-10-25  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reader.c (parse_union_decl): Push the caracters in
-	union_obstack, not attrs_obstack.
+	tests: address a warning from GCC 4.4
+	236. torture.at:465: testing Exploding the Stack Size with Alloca ...
+	../../../tests/torture.at:474: bison -o input.c input.y
+	../../../tests/torture.at:474: $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+	stderr:
+	cc1: warnings being treated as errors
+	input.y: In function 'main':
+	input.y:60: error: 'status' may be used uninitialized in this function
 
-2001-10-04  Akim Demaille  <akim@epita.fr>
+	* tests/torture.at (AT_DATA_STACK_TORTURE): Initial status to avoid
+	the previous error.
 
-	Merge in the branch 1.29.
+2012-10-25  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reader.c (packsymbols): Use a temporary obstack for
-	`%%tokendef', since output_stack is already used elsewhere.
+	tests: don't use options that Clang does not support
+	* configure.ac (WARN_CFLAGS, WARN_CXXFLAGS): Do not include options
+	that Clang does not support.
 
-	2001-10-02  Akim Demaille  <akim@epita.fr>
+2012-10-25  Akim Demaille  <akim@lrde.epita.fr>
 
-	Bump 1.29d.
+	tests: restore the tests on -Werror
+	When run as /bin/sh, Bash sets the shell variable POSIXLY_CORRECT to
+	y.  The test suite checks for the envvar POSIXLY_CORRECT to turn of
+	some tests not supported in POSIX mode.  Restore these tests.
 
-	2001-10-02  Akim Demaille  <akim@epita.fr>
+	Reported by the Hydra build farm, from Rob Vermaas.
 
-	Version 1.29c.
+	* tests/local.at (AT_BISON_CHECK_WARNINGS_): Check the envvar
+	POSIXLY_CORRECT, not the shell variable.
 
-	2001-10-02  Akim Demaille  <akim@epita.fr>
+2012-10-25  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/regression.at (Invalid CPP headers): New.
-	From Alexander Belopolsky.
-	* src/files.c (compute_header_macro): Map non alnum chars to `_'.
+	regen
 
-	2001-10-02  Akim Demaille  <akim@epita.fr>
+2012-10-25  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/regression.at (Invalid input): New.
-	* src/lex.c (lex): Be sure to set `token_buffer' in any case.
-	Reported by Shura.
+	parse-gram: update the Bison interface
+	* src/parse-gram.y (%pure-parser, %name-prefix): Replace with...
+	(%define api.pure, %define api.prefix)
+	* src/location.h, src/scan-gram.h: Adjust to api.prefix.
 
-	2001-10-02  Akim Demaille  <akim@epita.fr>
+2012-10-25  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/calc.at: Now that --debug works, the tests must be adjusted.
+	fix comment
+	* data/c.m4 (b4_YYDEBUG_define): here.
 
-	2001-10-02  Akim Demaille  <akim@epita.fr>
+2012-10-23  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/output.c (output_parser): Assert `skeleton'.
-	* src/files.c (skeleton_find): Look harder for skeletons on DOSish
-	systems.
-	From Shura.
+	Merge branch 'branch-2.6' into maint
+	* origin/branch-2.6:
+	  maint: post-release administrivia
+	  version 2.6.4
+	  regen
+	  2.6.4: botched 2.6.3
 
-	2001-10-01  Marc Autret  <autret_m@epita.fr>
+2012-10-23  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/lex.h: Echo modifications.
-	* src/lex.c (unlex): Parameter is now token_t.
-	From Hans Aberg.
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
 
-	2001-10-01  Marc Autret  <autret_m@epita.fr>
+2012-10-23  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/main.c: Include lex.h.
-	From Hans Aberg.
+	version 2.6.4
+	* NEWS: Record release date.
 
-	2001-09-29  Akim Demaille  <akim@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/getargs.c (longopts): `--debug' is `-t', not `-d'.
+	regen
 
-	2001-09-28  Akim Demaille  <akim@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/testsuite.at: Update to newer Autotest.
-	* tests/Makefile.am (EXTRA_DIST): bison is not to be shipped.
+	2.6.4: botched 2.6.3
+	* NEWS: here.
 
-	2001-09-27  Akim Demaille  <akim@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	Position independent wrapper.
+	Merge branch '2.6.3' into maint
+	* 2.6.3: (22 commits)
+	  maint: post-release administrivia
+	  version 2.6.3
+	  gnulib: update
+	  tests: check %no-lines
+	  NEWS: warnings with clang
+	  warnings: avoid warnings from clang
+	  tests: no longer disable -O compiler options
+	  yacc.c: initialize yylval in pure-parser mode
+	  skeletons: style changes
+	  tests: minor improvements
+	  tests: use $PERL instead of perl
+	  build: look for Perl in configure.
+	  tests: fix sed portability issues
+	  tests: diff -u is not portable
+	  maint: word changes
+	  lalr1.cc: fix test suite portability
+	  maint: fix an erroneous include
+	  tests: check that headers are self contained
+	  doc: add missing documentation for --report
+	  headers: move CPP guards into YY_*_INCLUDED to avoid collisions
+	  ...
 
-	* tests/bison: Remove.
-	* tests/bison.in: New.
-	* configure.in: Adjust.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-27  Paul Eggert  <eggert@twinsun.com>
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
 
-	Port quotearg fixes from tar 1.13.24.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* lib/quotearg.c: BSD/OS 4.1 wchar.h requires FILE and struct
-	tm to be declared.
-	(HAVE_MBSINIT): Undef if !HAVE_MBRTOWC.
-	(mbsinit): Define to 1 if !defined mbsinit && !HAVE_MBSINIT.
+	version 2.6.3
+	* NEWS: Record release date.
 
-	* m4/Makefile.am (EXTRA_DIST): Add mbrtowc.m4.
-	* m4/mbrtowc.m4: New file.
-	* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Check for mbsinit and stddef.h.
-	Use jm_FUNC_MBRTOWC instead of AC_CHECK_FUNCS(mbrtowc).
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-27  Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	Bump to 1.29c.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-27  Akim Demaille  <akim@epita.fr>
+	tests: check %no-lines
+	* tests/synclines.at: here.
 
-	Version 1.29b.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-25  Akim Demaille  <akim@epita.fr>
+	NEWS: warnings with clang
+	* NEWS: here.
 
-	* src/system.h: Include `xalloc.h'.
-	Remove it from the C files.
-	* src/files.c (output_files): Free the obstacks.
-	* src/lex.c (init_lex): Rename as...
-	(lex_init): this.
-	(lex_free): New.
-	* src/main.c (main): Use it.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-24  Marc Autret  <autret_m@epita.fr>
+	warnings: avoid warnings from clang
+	Fix the following warning
 
-	* src/vcg.c (open_edge, close_edge, open_node, close_node): Change
-	to output informations in fout (FILE*).
-	(open_graph, close_graph): Likewise.
-	(output_graph, output_edge, output_node): Likewise.
-	* src/vcg.h: Update function prototypes.
-	* src/print_graph.c (print_graph): Open output graph file.
-	(print_actions): Adjust.
-	* src/files.h: Remove extern declaration.
-	* src/files.c: Remove graph_obstack declaration.
-	(open_files): Remove graph_obstack initialization.
-	(output_files): Remove graph_obstack saving.
+	  parse-gram.c:2078:14: error: equality comparison with extraneous parentheses
+	                        [-Werror,-Wparentheses-equality]
+	    if (((yyn) == (-91)))
+	         ~~~~~~^~~~~~~~
+	  parse-gram.c:2078:14: note: remove extraneous parentheses around the
+	                        comparison to silence this warning
+	    if (((yyn) == (-91)))
+	        ~      ^       ~
+	  parse-gram.c:2078:14: note: use '=' to turn this equality comparison into
+	                        an assignment
+	    if (((yyn) == (-91)))
+	               ^~
+	               =
+	  1 error generated.
 
-	2001-09-24  Marc Autret  <autret_m@epita.fr>
+	and the following one:
 
-	* src/files.c (compute_output_file_names): Fix.
+	  input.cc:740:1: error: function declared 'noreturn' should not return
+	                         [-Werror,-Winvalid-noreturn]
+	  static void yyMemoryExhausted (yyGLRStack* yystackp)
+	    __attribute__ ((__noreturn__));
+	  static void
+	  yyMemoryExhausted (yyGLRStack* yystackp)
+	  {
+	    YYLONGJMP (yystackp->yyexception_buffer, 2);
+	  }
+	  ^
+	  1 warning and 1 error generated.
 
-	2001-09-24  Marc Autret  <autret_m@epita.fr>,
-		    Akim Demaille  <akim@epita.fr>
+	This is Apple clang version 3.1 (tags/Apple/clang-318.0.61).
 
-	* src/reader.c (reader): Remove call to free_symtab ().
-	* src/main.c (main): Call it here.
-	Include symtab.h.
-	* src/conflicts.c (initialize_conflicts): Rename as...
-	(solve_conflicts): this.
-	* src/print.c (print_core, print_actions, print_state)
-	(print_grammar): Dump to a file instead a `output_obstack'.
-	(print_results): Dump `output_obstack', and then proceed with the
-	FILE *.
-	* src/files.c (compute_output_file_names, close_files): New.
-	(output_files): Adjust.
-	* src/main.c (main): Adjust.
+	* data/c.m4 (b4_table_value_equals): Use (!!(A == B)) instead of (A == B)
+	to avoid this warning.
+	Any reasonable compiler should generate the same code.
+	* src/uniqstr.h (UNIQSTR_EQ): Likewise.
+	* data/glr.c (LONGJMP): abort after longjmp to pacify clang.
 
-	2001-09-23  Marc Autret  <autret_m@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/files.c (compute_header_macro): Computes header macro name
-	from spec_defines_file when given.
+	tests: no longer disable -O compiler options
+	Tests are running without -O since
+	f377f69fec28013c79db4efe12bbb9d48987fb2c because some warnings (about
+	yylval not being initialized) show only when GCC is given -O2.  The
+	previous patch fixes the warnings. Run the test suite with compiler
+	options unmodified.
 
-	2001-09-23  Marc Autret  <autret_m@epita.fr>
+	* tests/atlocal.in (O0CFLAGS, O0CXXFLAGS): Remove, use CFLAGS and
+	CXXFLAGS.
 
-	* src/files.c (output_files): Add default extensions.
+2012-10-22  Paul Eggert  <eggert@cs.ucla.edu>
 
-	2001-09-22  Akim Demaille  <akim@epita.fr>
+	yacc.c: initialize yylval in pure-parser mode
+	See http://lists.gnu.org/archive/html/bison-patches/2012-08/msg00024.html
+	(spreading over September and October).
 
-	* src/conflicts.c (finalize_conflicts): Rename as...
-	(free_conflicts): this.
+	* data/yacc.c (YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN)
+	(YY_IGNORE_MAYBE_UNINITIALIZED_END, YYLVAL_INITIALIZE):
+	New macros.  Use them to suppress an unwanted GCC diagnostic.
 
-	2001-09-22  Akim Demaille  <akim@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/gram.c (gram_free): Rename back as...
-	(dummy): this.
-	(output_token_translations): Free `token_translations'.
-	* src/symtab.c (free_symtab): Free the tag field.
+	skeletons: style changes
+	* data/yacc.c, data/glr.c: Prefer Title case for (CPP) macro arguments.
 
-	2001-09-22  Akim Demaille  <akim@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	Remove `translations' as it is always set to true.
+	tests: minor improvements
+	* tests/c++.at: Space changes.
+	Use AT_YYERROR_DEFINE.
+	* tests/local.at (AT_YYERROR_DEFINE): Issue errors on unknown languages.
 
-	* src/gram.h: Adjust.
-	* src/reader.c (packsymbols, parse_token_decl): Adjust
-	* src/print.c (print_grammar): Adjust.
-	* src/output.c (output_token_translations): Adjust.
-	* src/lex.c (lex): Adjust.
-	* src/gram.c: Be sure the set pointers to NULL.
-	(dummy): Rename as...
-	(gram_free): this.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-22  Akim Demaille  <akim@epita.fr>
+	tests: use $PERL instead of perl
+	* tests/atlocal.in (PERL): New.
+	Sort.
+	* tests/calc.at, tests/input.at, tests/local.at, tests/regression.at,
+	* tests/skeletons.at, tests/synclines.at, tests/torture.at: here.
 
-	* configure.in: Invoke AM_LIB_DMALLOC.
-	* src/system.h: Use dmalloc.
-	* src/LR0.c: Be sure to have pointers initialized to NULL.
-	(allocate_itemsets): Allocate kernel_items only if needed.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-22  Akim Demaille  <akim@epita.fr>
+	build: look for Perl in configure.
+	Bison uses "/usr/bin/perl" or "perl" in several places, and it does
+	not appear to be a problem.  But, at least to make it simpler to
+	change PERL on the make command line, check for perl in configure.
 
-	* configure.in: Bump to 1.29b.
-	* tests/Makefile.am (DISTCLEANFILES): Add package.m4.
-	* tests/calc.at (_AT_DATA_CALC_Y): #undef malloc so that we don't
-	need xmalloc.c in calc.y.
-	From Pascal Bart.
+	* configure.ac (PERL): New.
+	* doc/Doxyfile.in, doc/Makefile.am, tests/bison.in: Use it.
 
-	2001-09-21  Akim Demaille  <akim@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	Version 1.29a.
-	* Makefile.maint, config/config.guess, config/config.sub,
-	* config/missing: Update from masters.
-	* tests/Makefile.am ($(srcdir)/$(TESTSUITE)): No longer depend
-	upon package.m4.
-	* configure.in (ALL_LINGUAS): Add `tr'.
+	tests: fix sed portability issues
+	Reported by Didier Godefroy,
+	<http://lists.gnu.org/archive/html/bug-bison/2012-10/msg00005.html>.
 
-	2001-09-21  Akim Demaille  <akim@epita.fr>
+	* tests/calc.at (AT_CHECK_SPACES): Use Perl.
 
-	* tests/Makefile.am (package.m4): Move to...
-	($(srcdir)/$(TESTSUITE)): here.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-20  Akim Demaille  <akim@epita.fr>
+	tests: diff -u is not portable
+	Reported by Didier Godefroy
+	<http://lists.gnu.org/archive/html/bug-bison/2012-10/msg00006.html>.
 
-	* src/complain.c: No longer try to be standalone: use system.h.
-	Don't assume __STDC__ is defined to 1. Just test if it is defined.
-	* src/complain.h: Likewise.
-	* src/reduce.c (useless_nonterminals, inaccessable_symbols):
-	Remove the unused variable `n'.
-	From Albert Chin-A-Young.
+	* tests/existing.at (AT_LALR1_DIFF_CHECK): Skip if diff -u does not
+	work.
 
-	2001-09-18  Marc Autret  <autret_m@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* doc/bison.1: Update.
-	* doc/bison.texinfo (Bison Options): Update --defines and --graph
-	descriptions.
-	(Option Cross Key): Update.
-	Add --graph.
+	maint: word changes
+	* README-hacking (Typical errors): Improve wording.
 
-	2001-09-18  Marc Autret  <autret_m@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/regression.at: New test (comment in %union).
+	lalr1.cc: fix test suite portability
+	Reported by Rob Vermaas' Hydra build farm on x86_64-darwin 10.2.0 with
+	G++ 4.6.3.
 
-	2001-09-18  Marc Autret  <autret_m@epita.fr>
+	* tests/headers.at (Several parsers): Include AT_DATA_SOURCE_PROLOGUE
+	in the files to compile.
+	* data/location.cc: Do not include twice string and iostream (once
+	by position.hh, and then by location.hh).
+	* README-hacking (Typical errors): Some hints for other maintainers.
 
-	* src/reader.c (parse_union_decl): Do not output '/'. Let copy_comment
-	do that.
-	Reported by Keith Browne.
+2012-10-22  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	2001-09-18  Marc Autret  <autret_m@epita.fr>
+	maint: fix an erroneous include
+	This fixes test 130 (Several parsers).
 
-	* tests/output.at: Add tests for --defines and --graph.
+	* data/location.cc: Include <iostream> rather than <iosfwd> since
+	we really need << on strings for instance.
+	* NEWS: Document this.
 
-	2001-09-18  Marc Autret  <autret_m@epita.fr>
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	* tests/output.at: Removes tests of %{header,src}_extension features.
+	tests: check that headers are self contained
+	Reported by Alexandre Duret-Lutz.
 
-	2001-09-18  Akim Demaille  <akim@epita.fr>
+	* tests/headers.at (Several parsers): here.
 
-	* tests/Makefile.am (package.m4): New.
-	* tests/calc.at (_AT_CHECK_CALC): Just run `calc input'.
-	(_AT_CHECK_CALC_ERROR): Likewise.
-	Factor the `, ' part of verbose error messages.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-18  Marc Autret  <autret_m@epita.fr>
+	doc: add missing documentation for --report
+	* doc/bison.texi (Bison Options): Document --report's "solved", "all",
+	and "none".
 
-	* src/getargs.c (longopts): Declare --defines and --graph as options
-	with optional arguments.
-	* src/files.h: Add extern declarations.
-	* src/files.c (spec_graph_file, spec_defines_file): New.
-	(output_files): Update.
-	Remove CPP-outed code.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-18  Marc Autret  <autret_m@epita.fr>
+	headers: move CPP guards into YY_*_INCLUDED to avoid collisions
+	See <http://lists.gnu.org/archive/html/bug-bison/2012-09/msg00016.html>.
 
-	Turn off %{source,header}_extension feature.
+	* data/c.m4 (b4_cpp_guard): Prepend YY_ and append _INCLUDED.
+	* tests/headers.at: Adjust.
+	* NEWS, doc/bison.texi: Document.
 
-	* src/files.c (compute_exts_from_gf): Update.
-	(compute_exts_from_src): Update.
-	(output_files): CPP-out useless code.
-	* src/files.h: Remove {header,source}_extension extern declarations.
-	* src/reader.c (parse_dquoted_param): CPP-out.
-	(parse_header_extension_decl): Remove.
-	(parse_source_extension_decl): Remove.
-	(read_declarations): Remove cases tok_{hdrext,srcext}.
-	* src/lex.c (percent_table): Remove {header,source}_extension entries.
-	* src/lex.h (token_t): Remove tok_hdrext and tok_srcext.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-10  Akim Demaille  <akim@epita.fr>
+	minor changes.
+	* NEWS: Word changes.
+	* doc/bison.texi: Spell check.
+	Fix minor issues.
+	* tests/headers.at: Comment and formatting changes.
 
-	* tests/output.at (AT_CHECK_BISON_FLAGS, AT_CHECK_BISON_PERCENT):
-	(AT_CHECK_BISON_PERCENT_FLAGS): Merge into...
-	(AT_CHECK_OUTPUT): this.
-	Merely check ls' exit status, its output is useless.
+2012-10-22  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-10  Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	* tests/calc.at: Use m4_match.
-	(_AT_DATA_CALC_Y): Check `yyin != NULL', not `stdin != NULL'.
+2012-10-19  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-10  Marc Autret  <autret_m@epita.fr>,
-		    Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	* src/vcg.h (graph_s): color, textcolor, bordercolor are now
-	enum color_e.
-	* src/print_graph.c (print_graph): Initalize graph.layoutalgorithm
-	to `normal'.
-	* src/reader.c (parse_token_decl): Initialize token with tok_eof.
-	* src/lex.h: Adjust prototype.
-	(token_t): Add `tok_undef'.
-	* src/lex.c (struct percent_table_struct): Retval is now a token_t.
-	(parse_percent_token): Now returns token_t.
-	Add default statement in switch.
-	(lex): Separate `c' as an input variable, from the token_t result
-	part.
-	(unlexed): Is a token_t.
+2012-10-19  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-09-10  Akim Demaille  <akim@epita.fr>
+	xml: slight improvement of the DOT output
+	This was completely forgotten...  Nothing about XML is actually
+	documented...
 
-	* configure.in: Bump to 1.29a.
+	* data/xslt/xml2dot.xsl: Use boxes, and Courier font.
 
-	2001-09-07  Akim Demaille  <akim@epita.fr>
+2012-10-19  Akim Demaille  <akim@lrde.epita.fr>
 
-	Version 1.29.
+	maint: check for dot before using it
+	* configure.ac: here.
+	* doc/Makefile.am: Use $(DOT).
+	Ship the generated files, to spare the user the need for Graphviz.
 
-	2001-08-30  Akim Demaille  <akim@epita.fr>
+2012-10-18  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	* tests/atgeneral.m4, tests/atconfig.in, tests/suite.at: Remove.
-	* m4/atconfig.m4: Remove.
-	* tests/testsuite.at, tests/atlocal.in, tests/output.at,
-	* tests/bison: New.
-	* tests/regression.at, tests/calc.at: Use m4_define, AT_BANNER,
-	m4_if, m4_patsubst, and m4_regexp.
-	* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Use an
-	`input' file instead of echo.
+	graphs: documentation
+	Note that 'make web-manual' fails.
 
-	2001-08-29  Akim Demaille  <akim@epita.fr>
+	* NEWS: Document these changes.
+	* doc/Makefile.am: Adjust to generate example files.
+	* doc/bison.texi: Add a Graphviz section after "Understanding::", the section
+	describing the .output file, because these are similar.
+	* doc/figs/example-reduce.dot, doc/figs/example-reduce.txt,
+	doc/figs/example-shift.dot, doc/figs/example-shift.txt: New, minimal
+	examples to illustrate the documentation.
 
-	Bump to 1.28e.
+2012-10-18  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	2001-08-29  Akim Demaille  <akim@epita.fr>
+	graphs: add tests, introducing -k graph
+	* tests/output.at (AT_TEST): New.
+	Use it to add 6 --graph tests.
 
-	Version 1.28d.
+2012-10-18  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	2001-08-29  Paul Eggert  <eggert@twinsun.com>
+	graphs: change the output format of the rules
+	Use something similar to the report file.
 
-	* src/bison.simple (yyparse): Don't take the address of an
-	item before the start of an array, as that doesn't conform to
-	the C Standard.
+	* src/print_graph.c (print_lhs): New, obstack equivalent of rule_lhs_print.
+	(print_core): Use here.
 
-	2001-08-29  Robert Anisko  <anisko_r@epita.fr>
+2012-10-18  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	* doc/bison.texinfo (Location Tracking Calc): New node.
+	graphs: style changes
+	* src/graphviz.c (start_graph): Use courier font.
+	(conclude_red): Use commas to separate attributes. Show the acceptation
+	as a special reduction, with a blue color and an "Acc" label. Show the
+	lookahead tokens between square brackets.
+	(output_red): No longer label default reductions.
+	* src/print_graph.c (print_core): Refactor spacing, and print an
+	additional space between a rule's rhs and its lookahead tokens. Also,
+	capitalize "State".
+	(print_actions): Style, move a declaration.
 
-	2001-08-29  Paul Eggert  <eggert@twinsun.com>
+2012-10-18  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	* src/output.c (output): Do not define const, as this now
-	causes more problems than it cures.
+	graphs: address an issue with R/R conflicts
+	All disabled reductions should now be shown as such.
 
-	2001-08-29  Akim Demaille  <akim@epita.fr>
+	* src/graphviz.c (output_red): Here.
+	(conclude_red): New.
 
-	* doc/bison.texinfo: Modernize `@node' and `@top' use: just name
-	the nodes.
-	Be sure to tag the `detailmenu'.
+2012-10-16  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-08-29  Akim Demaille  <akim@epita.fr>
+	java: fixes
+	* data/java.m4: Remove stray M4 characters.
 
-	* Makefile.maint (do-po-update): Wget refuses to overwrite files:
-	download in a tmp dir.
+2012-10-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-08-28  Marc Autret  <autret_m@epita.fr>
+	java: use api.location.type and api.position.type
+	* data/java.m4: here.
+	* NEWS, doc/bison.texi, tests/java.at: Adjust.
 
-	* config/depcomp: New file.
+2012-10-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-08-28  Marc Autret  <autret_m@epita.fr>
+	tests: check %no-lines
+	* tests/synclines.at: here.
 
-	* doc/bison.1 (mandoc): Adjust.
-	From Juan Manuel Guerrero.
+2012-10-12  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-08-28  Marc Autret  <autret_m@epita.fr>
+	tests: minor simplification
+	* tests/headers.at (Several parsers): Use *.y even for C++.
 
-	* src/print_graph.c (print_state): Fix.
+2012-10-11  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-08-27  Marc Autret  <autret_m@epita.fr>
+	graphs: stylistic changes.
+	* src/graphviz.c (output_red): Comment and formatting changes.
 
-	* src/vcg.h (classname_s, infoname_s, node_s): Constify the
-	char * members.
-	Echo modifications to the functions prototypes.
-	* src/vcg.c (add_classname, add_infoname): Adjust arguments.
+2012-10-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	2001-08-27  Marc Autret  <autret_m@epita.fr>
+	graphs: minor style changes
+	* src/graphviz.c (output_red): Fix C90 issues.
+	Reduce variable scopes.
 
-	* src/vcg.c: Include `xalloc.h'.
-	(add_colorentry): New.
-	(add_classname): New.
-	(add_infoname): New.
-	* src/vcg.h: Add new prototypes.
+2012-10-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	2001-08-27  Akim Demaille  <akim@epita.fr>
+	graphs: show reductions
+	* src/graphviz.c (output_red): New, show reductions on the graph.
+	(no_reduce_bitset_init): New, initialize a bitset.
+	(print_token): New, print a lookahead token.
+	(escape): New, print "foo" as \"foo\" because Dot doesn't like quotes within
+	a label.
 
-	* Makefile.maint: Sync. again with CVS Autoconf.
+	* src/graphviz.h : Adjust.
+	* src/print_graph.c (print_actions): Call output_red here.
 
-	2001-08-27  Akim Demaille  <akim@epita.fr>
+2012-10-11  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	* Makefile.maint: Formatting changes.
-	(po-update, cvs-update, update): New targets.
-	(AMTAR): Remove.
+	graphs: style: prefix state number with "state"
+	* src/print_graph.c (print_core): Here.
 
-	2001-08-27  Akim Demaille  <akim@epita.fr>
+2012-10-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* Makefile.am (AUTOMAKE_OPTIONS): 1.5.
-	* Makefile.maint: Sync. with CVS Autoconf.
+	graphs: style: use left justification for states
+	The label text of nodes is centered "by default" (by the use of '\n' as
+	a line feed). This gives bad readability to the grammar rules shown in
+	state nodes, a left justification is much nicer. This is done by using '\l'
+	as the line feed.
 
-	2001-08-27  Marc Autret  <autret_m@epita.fr>
+	In order to allow \l in the DOT file, changes to the quoting system seem
+	necessary.
 
-	* src/vcg.h (struct infoname_s): New.
-	(struct colorentry_s): New.
-	(graph_s): New fields {vertical,horizontal}_order in structure.
-	Add `infoname' field.
-	Add `colorentry' field;
-	* src/vcg_defaults.h (G_VERTICAL_ORDER): New.
-	(G_HORIZONTAL_ORDER): New.
-	(G_INFONAME): New.
-	(G_COLORENTRY): New.
-	* src/vcg.c (output_graph): Add output of {vertical,horizontal}_order.
-	Add output of `infoname'.
-	Add output of `colorentry'.
+	* src/print_graph.c (print_core): Escape tokens here, instead of...
+	* src/graphviz.c (output_node): Here...
+	(escape): Using this, new.
 
-	2001-08-27  Marc Autret  <autret_m@epita.fr>
+2012-10-11  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	* src/reader.c (parse_dquoted_param): Rename variable `index' to `i'.
-	This one shadowed a global parameter.
+	graphs: style: prefix rules and change shapes
+	* src/graphviz.c (start_graph): Use box rather than ellipsis.
+	* src/print_graph.c (print_core): Prefix rules with their number.
 
-	2001-08-24  Marc Autret  <autret_m@epita.fr>
+2012-10-11  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	* src/print_graph.c (node_output_size): Declared POSIX `size_t' type,
-	instead of `unsigned'.
-	(print_state): Do not call obstack_object_size () in obstack_grow ()
-	to avoid macro variables shadowing.
+	obstack: import obstack_finish0 from master
+	* src/system.h (obstack_finish0): New.
 
-	2001-08-23  Marc Autret  <autret_m@epita.fr>
+2012-10-09  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/lex.c (percent_table): Typo: s/naem/name/.
-	Add graph option.
-	Normalize new options declarations.
+	c++: api.location.type
+	This feature was introduced in 95a2de5695670ae0df98cb3c42141cad549f0204
+	(which is part of 2.5), but not documented.  Give it a proper name, and
+	make it public.
 
-	2001-08-20  Pascal Bart  <pascal.bart@epita.fr>
+	* data/c++.m4, data/lalr1.cc, data/glr.cc, data/java.m4: Use
+	api.location.type instead of location_type.
+	* src/muscle-tab.c (muscle_percent_variable_update): Map the latter to
+	the former.
+	* tests/local.at: Adjust.
+	* tests/calc.at: Use api.location.type.
+	Leave tests/java.at with location_type, at least for the time being,
+	to cover both names.
+	* doc/bison.texi: Document api.location.type.
+	(User Defined Location Type): New.
+	* NEWS: Update.
 
-	* tests/suite.at: Exercise %header_extension and %source_extension.
+2012-10-09  Akim Demaille  <akim@lrde.epita.fr>
 
-	2001-08-16  Marc Autret  <autret_m@epita.fr>
+	muscles: a function for backward compatibility
+	Based on commit 171ad99d6421935a278656be6dc7161591835d00 from master.
 
-	* src/reader.c (parse_dquoted_param): New.
-	(parse_header_extension_decl): Use it.
-	(parse_source_extension_decl): Likewise.
+	* src/muscle-tab.c (muscle_percent_variable_update): New.
+	(muscle_percent_define_insert): Use it.
+	Define the variables with their initial value.
 
-	2001-08-16  Marc Autret  <autret_m@epita.fr>
+2012-10-09  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/vcg.c: Remove includes of `complain.h' and `xalloc.h'.
-	(get_xxxx_str): Use assert () instead of complain ().
-	Remove return invokations in default cases.
-	(get_decision_str): Modify default behaviour. Remove second argument.
-	Echo modifications on calls.
-	(output_graph): Fix.
+	maint: more macros
+	* src/output.c (ARRAY_CARDINALITY): Move to...
+	* src/system.h: here.
+	(STREQ, STRNEQ): new.
 
-	2001-08-16  Marc Autret  <autret_m@epita.fr>
+2012-10-08  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/getargs.c (usage): Update with ``-g, --graph''.
+	NEWS: warnings with clang
+	* NEWS: here.
 
-	2001-08-16  Marc Autret  <autret_m@epita.fr>
+2012-10-08  Akim Demaille  <akim@lrde.epita.fr>
 
-	* doc/bison.texinfo (Bison Options): Add items `-g', `--graph'.
-	(Option Cross Key): Likewise.
-	* doc/bison.1: Update.
+	warnings: avoid warnings from clang
+	Fix the following warning
 
-2001-09-25  Pascal Bart  <pascal.bart@epita.fr>
+	  parse-gram.c:2078:14: error: equality comparison with extraneous parentheses
+	                        [-Werror,-Wparentheses-equality]
+	    if (((yyn) == (-91)))
+	         ~~~~~~^~~~~~~~
+	  parse-gram.c:2078:14: note: remove extraneous parentheses around the
+	                        comparison to silence this warning
+	    if (((yyn) == (-91)))
+	        ~      ^       ~
+	  parse-gram.c:2078:14: note: use '=' to turn this equality comparison into
+	                        an assignment
+	    if (((yyn) == (-91)))
+	               ^~
+	               =
+	  1 error generated.
 
-	* src/output.c (output_master_parser): Don't finish action_obstack.
-	(output_parser): Don't care about the muscle action, here.
-	(prepare): Copy the action_obstack in the action muscle.
-	(output): Free action_obstack.
+	and the following one:
 
-2001-09-23  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/reader.c (parse_union_decl): Add new obstack union_obstack.  Which
-	will contain `%union' declaration.
-	(parse_union_decl): Delete #line directive output.
-	(parse_union_decl): Substitute /attrs_obstack/union_obstack for all
-	informations about %union.
-	(parse_union_decl): Copy the union_obstack in the muscle stype.
-	* src/bison.simple: Add new #line directive.
-	Add typdef %%stype YYSTYPE.
-
-2001-09-23  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/bison.simple: Add new `#line' directive.
-
-2001-09-22  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/bison.simple: New `#line' directive.
-	* src/output.c (output_parser): Support new dynamic muscle input_line.
-
-2001-09-22  Marc Autret  <autret_m@epita.fr>
-
-	* src/output.c (output_master_parser): New.
-	(output_parser): Be more re-entrant.
-
-2001-09-21  Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c (copy_definition, parse_union_decl): Update and use
-	`linef' muscle.
-	(copy_action): Likewise.
-	Use obstack_1grow ().
-	* src/muscle_tab.c (muscle_init): Add muscle `linef'.
-
-2001-09-21  Marc Autret  <autret_m@epita.fr>
-
-	* src/options.c (option_table): Adjust.
-	* src/lex.c (parse_percent_token): Fix.
-
-2001-09-20  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/options.c (symtab.h): Include it, need by lex.h.
-
-2001-09-20  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/lex.c (parse_percent_token): Change type of variable `tx', which
-	is now an option_table_struct*.
-	(option_strcmp): New function option_strcmp.
-	(parse_percent_token): Call option_strcmp.
-	* src/getargs.c (xalloc.h, options.h): Include it.
-	(getargs): Call create_long_option_table.
-	(getargs): Free longopts at the end of the function.
-	(shortopts): Move in options.c.
-	* src/options.c (create_long_option_table): New function.  Convert
-	information from option_table to option structure.
-	* src/reader.c (options.h): Include it.
-
-	* src/Makefile.am: Adjust.
-	* src/options.c (option_table): Create from longopts and percent_table.
-	* src/getargs.c (longopts): Delete.
-	* src/lex.c (struct percent_table_struct): Delete.
-	(percent_table): Delete.
-	(options.h): Include it.
-	* src/options.c: Create.
-	* src/options.h: Create.
-	Declare enum opt_access_e.
-	Define struct option_table_struct.
-
-2001-09-20  Marc Autret  <autret_m@epita.fr>
-
-	* doc/bison.texinfo: Adjust terminologies about prologue and epilogue
-	sections of Bison.
-
-2001-09-19  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/bison.simple: s/%%filename/%%skeleton.
-	* src/muscle_tab.c (getargs.h): Include it.
-	(muscle_init): Insert new muscle skeleton.
-
-2001-09-18  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/output.c (output_parser): Delete unused variable actions_dumped.
-
-2001-09-07  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/output.c (output): Delete call to reader_output_yylsp.
-	* src/reader.c (reader): Likewise.
-	* src/reader.h: Delete declaration of reader_output_yylsp.
-
-2001-09-02  Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c: Include muscle_tab.h.
-	(parse_union_decl): Update.
-	(parse_macro_decl): Rename parse_muscle_decl.
-	Update to use renamed functions and variable.
-	(read_declarations, copy_action, read_additionnal_code, : Updated
-	with correct variables and functions names.
-	(packsymbols, reader): Likewise.
-
-	* src/reader.h (muscle_obstack): Extern declaration update.
-
-	* src/output.c: Include muscle_tab.h
-	In all functions using macro_insert, change by using muscle_insert ().
-	(macro_obstack): Rename muscle_obstack.
-	Echo modifications in the whole file.
-	(MACRO_INSERT_INT): Rename MUSCLE_INSERT_INT.
-	(MACRO_INSERT_STRING): Rename MUSCLE_INSERT_STRING.
-	(MACRO_INSERT_PREFIX): Rename MUSCLE_INSERT_PREFIX.
-
-	* src/muscle_tab.h: Update double inclusion macros.
-	(macro_entry_s): Rename muscle_entry_s.
-	Update prototypes.
-
-	* src/muscle_tab.c: Include muscle_tab.h.
-	Rename macro_tabble to muscle_table.
-	(mhash1, mhash2, mcmp): Use muscle_entry.
-	(macro_init): Rename muscle_init. Update.
-	(macro_insert): Rename muscle_insert. Update.
-	(macro_find): Rename muscle_find. Update.
-
-	* src/main.c: Include muscle_tab.h.
-	(main): Call muscle_init ().
-	* src/Makefile.am (bison_SOURCES): Echo modifications.
-
-2001-09-02  Marc Autret  <autret_m@epita.fr>
-
-	Now the files macro_tab.[ch] are named muscle_tab.[ch].
-
-	* src/muscle_tab.c, src/muscle_tab.h: Add files.
-
-2001-09-02  Marc Autret  <autret_m@epita.fr>
-
-	* src/macrotab.c, src/macrotab.h: Remove.
-
-2001-09-01  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/reader.c (copy_guard): Use muscle to specify the `#line'
-	filename.
-
-2001-09-01  Marc Autret  <autret_m@epita.fr>
-
-	* tests/calc.at (exp): Now, YYERROR_VERBOSE need to be set
-	to an explicit value to activate the feature. We do it here.
-
-2001-08-31  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/output.c (prepare): Delete the `filename' muscule insertion.
-	* src/reader.c (copy_action): Use `filename' muscule with `#line'.
-	(parse_union_decl): Likewise.
-	* src/macrotab.c (macro_init): Initialize filename by infile.
-
-2001-08-31  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple (YYLSP_NEEDED): New definition.
-	* src/output.c (prepare): Add macro insertion of `locations_flag'
-
-2001-08-31  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/output.c (prepare): Delete insertion of previous muscles,
-	and insert the `prefix' muscles.
-	* src/macrotab.c (macro_init): Likewise.
-	(macro_init): Initialization prefix directive by `yy'.
-	* src/bison.simple: Substitute all %%yylex, %%yychar, %%yylval,
-	%%yydebug, %%yyerror, %%yynerrs and %%yyparse by yylex, yychar,
-	yylval, yydebug, yyerror, yynerrs and yyparse.
-	New directive `#define' to substitute yydebug, ... with option
-	name_prefix.
-
-2001-08-31  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/main.c (main): Standardize.
-	* src/output.c (output_table_data, output_parser): Likewise.
-	* src/macrotab.h, src/macrotab.c, src/bison.simple: Likewise.
-
-2001-08-31  Pascal Bart  <pascal.bart@epita.fr>, Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c (read_additionnal_code): Rename %%user_code to
-	%%epilogue.
-	* src/output.c (output): Rename %%declarations to %%prologue.
-	* src/bison.simple: Echo modifications.
-
-2001-08-31  Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c (readgram): CleanUp.
-	(output_token_defines): Likewise.
-	(packsymbols): Likewise.
-	(reader): Likewise.
-	* src/output.c (output): CPP-out useless code.
-
-2001-08-31  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/reader.c (reader): Delete obsolete call to function
-	output_trailers and output_headers.
-	* src/output.h: Remove obsolete functions prototypes of output_headers
-	and output_trailers.
-
-2001-08-30  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/main.c: Include macrotab.h.
-	* src/macrotab.h (macro_entry_s): Constify fields.
-	Adjust functions prototypes.
-	* src/macrotab.c (macro_insert): Constify key and value.
-	(macro_find): Constify key.
-	(macro_insert): Include 'xalloc.h'
-	(macro_insert): Use XMALLOC.
-	(macro_find): Constify return value.
-	* src/output.c (output_table_data): Rename table to table_data.
-	(output_parser): Constify macro_key, macro_value.
-
-2001-08-30  Marc Autret  <autret_m@epita.fr>
-
-	* src/reader.c (parse_skel_decl): New.
-	(read_declarations): Add case `tok_skel', call parse_skel_decl ().
-	* src/lex.h (token_t): New token `tok_skel'.
-	* src/lex.c (percent_table): Add skeleton option entry.
-	Standardize.
-
-2001-08-29  Marc Autret  <autret_m@epita.fr>
-
-	* src/bison.simple: Add %%user_code directive at the end.
-	* src/reader.c (read_additionnal_code): New.
-	(reader): Use it.
-	* src/output.c (output_program): Remove.
-	(output): Update.
-
-2001-08-28  Marc Autret  <autret_m@epita.fr>
-
-	* src/output.c (output_actions): Clean up.
-	(output_gram): CPP-out useless code.
-	* src/reader.c (reader): Clean up, CPP-out useless code.
-
-2001-08-28  Pascal Bart  <pascal.bart@epita.fr>
-
-	* src/output.c (output): Copy attrs_obstack in the '%%definitions'
-	directive.
-	* src/bison.simple: Add `%%definitions'.
-
-2001-08-28  Marc Autret  <autret_m@epita.fr>
-
-	* config/depcomp: New file.
-
-2001-08-27  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (yyparse): Don't take the address of an
-	item before the start of an array, as that doesn't conform to
-	the C Standard.
-
-2001-08-27  Robert Anisko  <robert.anisko@epita.fr>
-
-	* src/output.c (output): Remove the initialization of the macro
-	obstack.  It was done too late here.
-
-	* src/reader.c (parse_macro_decl): Fix.  Use of the macro obstack was
-	completely wrong.
-	(reader): Initialize the macro obstack here, since we need it to grow
-	'%define' directives.
-
-	* src/reader.h: Declare the macro obstack as extern.
-
-2001-08-27  Robert Anisko  <robert.anisko@epita.fr>
-
-	* src/output.c (output_parser): Fix.  Store single '%' characters in
-	the output obstack instead of throwing them away.
-
-2001-08-27  Akim Demaille  <akim@epita.fr>
-
-	* Makefile.am (AUTOMAKE_OPTIONS): 1.5.
-
-2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+	  input.cc:740:1: error: function declared 'noreturn' should not return
+	                         [-Werror,-Winvalid-noreturn]
+	  static void yyMemoryExhausted (yyGLRStack* yystackp)
+	    __attribute__ ((__noreturn__));
+	  static void
+	  yyMemoryExhausted (yyGLRStack* yystackp)
+	  {
+	    YYLONGJMP (yystackp->yyexception_buffer, 2);
+	  }
+	  ^
+	  1 warning and 1 error generated.
 
-	* lib/Makefile.am: Adjust.
+	This is Apple clang version 3.1 (tags/Apple/clang-318.0.61).
 
-2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+	* data/c.m4 (b4_table_value_equals): Use (!!(A == B)) instead of (A == B)
+	to avoid this warning.
+	Any reasonable compiler should generate the same code.
+	* src/uniqstr.h (UNIQSTR_EQ): Likewise.
+	* data/glr.c (LONGJMP): abort after longjmp to pacify clang.
 
-	* src/bison.simple: Update and add '%%' directives.
+2012-10-08  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+	tests: no longer disable -O compiler options
+	Tests are running without -O since
+	f377f69fec28013c79db4efe12bbb9d48987fb2c because some warnings (about
+	yylval not being initialized) show only when GCC is given -O2.  The
+	previous patch fixes the warnings. Run the test suite with compiler
+	options unmodified.
 
-	* src/reader.c (reader): Remove calls to 'output_headers' and
-	'output_trailers'. Remove some C output.
-	(readgram): Disable a piece of code that was writing a default
-	definition for 'YYSTYPE'.
-	(reader_output_yylsp): Remove.
-	(packsymbols): Output token defintions to a macro.
-	(copy_definition): Disable C output.
+	* tests/atlocal.in (O0CFLAGS, O0CXXFLAGS): Remove, use CFLAGS and
+	CXXFLAGS.
 
-	* src/reader.c (parse_macro_decl): New function used to parse macro
-	declarations.
-	(copy_string2): Put the body of copy_string into this new function.
-	Add a parameter to let the caller choose whether he wants to copy the
-	string delimiters or not.
-	(copy_string): Be a simple call to copy_string2 with the last argument
-	bound to true.
-	(read_declarations): Add case for macro definition.
-	(copy_identifier): New.
-	(parse_macro_decl): Read macro identifiers using copy_identifier
-	rather than lex.
+2012-10-08  Paul Eggert  <eggert@cs.ucla.edu>
 
-2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+	yacc.c: initialize yylval in pure-parser mode
+	See http://lists.gnu.org/archive/html/bison-patches/2012-08/msg00024.html
+	(spreading over September and October).
 
-	* src/output.c (prepare): Add prefixed names.
-	(output_parser): Output semantic actions.
-	(output_parser): Fix bug on '%%line' directives.
+	* data/yacc.c (YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN)
+	(YY_IGNORE_MAYBE_UNINITIALIZED_END, YYLVAL_INITIALIZE):
+	New macros.  Use them to suppress an unwanted GCC diagnostic.
 
-	* src/output.c (output_headers): Remove. The C code printed by this
-	function should now be in the skeletons.
-	(output_trailers): Remove.
-	(output): Disable call to 'reader_output_yylsp'.
-	(output_rule_data): Do not output tables to the table obstack.
+2012-10-08  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/output.c: Remove some C dedicated output.
-	Improve the use of macro and output obstacks.
-	(output_defines): Remove.
+	skeletons: style changes
+	* data/yacc.c, data/glr.c: Prefer Title case for (CPP) macro arguments.
 
-	* src/output.c (output_token_translations): Associate 'translate'
-	table with a macro. No output to the table obstack.
-	(output_gram): Same for 'rhs' and 'prhs'.
-	(output_stos): Same for 'stos'.
-	(output_rule_data): Same for 'r1' and 'r2'.
-	(token_actions): Same for 'defact'.
-	(goto_actions): Same for 'defgoto'.
-	(output_base): Same for 'pact' and 'pgoto'.
-	(output_table): Same for 'table'.
-	(output_check): Same for 'check'.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/output.c (output_table_data): New function.
-	(output_short_table): Remove.
-	(output_short_or_char_table): Remove.
+	lalr1.cc: document exception safety
+	* NEWS: here.
+	* doc/bison.texi (Destructor Decl, C++ Parser Interface): and there.
 
-	* src/output.c (output_parser): Replace most of the skeleton copy code
-	with something new. Skeletons are now processed character by character
-	rather than line by line, and Bison looks for '%%' macros. This is the
-	first step in making Bison's output process (a lot) more flexible.
-	(output_parser): Use the macro table.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+	lalr1.cc: check exception safety of error handling
+	* tests/c++.at (Exception safety): Don't use swap here, it
+	is useless.
+	Cover more test cases: yyerror, YYERROR, YYABORT, and
+	error recovery.
+	(Object): Instead of just keeping a counter of instances, keep
+	a list of them.
 
-	* src/main.c (main): Initialize the macro table.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+	lalr1.cc: check (and fix) %printer exception safety
+	* tests/c++.at (Exception safety): Let the parser support the --debug
+	option.
+	On 'p', throw an exception from the %printer.
+	* data/lalr1.cc (yyparse): Do not display the values we discard, as it
+	uses %printer, which might have thrown the exception.
 
-	* src/lex.c (percent_table): Add tok_define.
-	* src/lex.h: Add tok_define.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+	lalr1.cc: check (and fix) %initial-action exception safety
+	* data/lalr1.cc: Check size > 1, rather than size != 1, when cleaning
+	the stack, as at the beginning, size is 0.
+	* tests/c++.at (Exception safety): Check exception safety in
+	%initial-action.
 
-	* src/macrotab.c: New file.
-	* src/macrotab.h: New file.
-	* src/Makefile.am: Update.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+	lalr1.cc: fix exception safety
+	lalr1.cc does not reclaim its memory when ended by an exception.
 
-	* lib/hash.c: New file.
-	* lib/hash.h: New file.
-	* lib/Makefile.am: Update.
+	Reported by Oleksii Taran:
+	http://lists.gnu.org/archive/html/help-bison/2012-09/msg00000.html
 
-2001-08-15  Akim Demaille  <akim@epita.fr>
+	* data/lalr1.cc (yyparse): Protect the whole yyparse by a try-catch
+	block that cleans the stack and the lookahead.
 
-	Version 1.28c.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-15  Marc Autret  <autret_m@epita.fr>
+	lalr1.cc: check exception safety.
+	* tests/c++.at (Exception safety): New.
 
-	* src/reader.c (readgram): Indent output macro YYSTYPE.
-	(packsymbols): Likewise.
-	(output_token_defines): Likewise.
-	* src/files.c: Standardize.
-	(compute_header_macro): New.
-	(defines_obstack_save): New. Use compute_header_macro.
-	(output_files): Update. Use defines_obstack_save.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-15  Akim Demaille  <akim@epita.fr>
+	lalr1.cc: indentation fixes.
+	* data/lalr1.cc (yyparse): here.
+	Untabify a block of code.
 
-	* doc/bison.texinfo (Table of Symbols): Document
-	YYSTACK_USE_ALLOCA.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-15  Akim Demaille  <akim@epita.fr>
+	lalr1.cc: don't leave macros define to nothing
+	* data/lalr1.cc (YY_SYMBOL_PRINT, YY_REDUCE_PRINT, YY_STACK_PRINT):
+	Define to something so that, for instance, "if (foo) YY_SYMBOL_PRINT"
+	is valid even when !YYDEBUG.
 
-	* missing: Update from CVS Automake.
-	* config/config.guess, config/config.sub, config/texinfo.tex:
-	Update from gnu.org.
+2012-10-06  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-15  Akim Demaille  <akim@epita.fr>
+	tests: minor improvements
+	* tests/c++.at: Space changes.
+	Use AT_YYERROR_DEFINE.
+	* tests/local.at (AT_YYERROR_DEFINE): Issue errors on unknown languages.
 
-	* Makefile.maint: Sync with CVS Autoconf.
+2012-10-05  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-14  Pascal Bart  <pascal.bart@epita.fr>
+	tests: use $PERL instead of perl
+	* tests/atlocal.in (PERL): New.
+	Sort.
+	* tests/calc.at, tests/input.at, tests/local.at, tests/regression.at,
+	* tests/skeletons.at, tests/synclines.at, tests/torture.at: here.
 
-	* doc/bison.texinfo: Include GNU Free Documentation License from
-	`fdl.texi'.
-	* doc/fdl.texi: Add to package.
+2012-10-05  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-14  Marc Autret  <autret_m@epita.fr>
+	build: look for Perl in configure.
+	Bison uses "/usr/bin/perl" or "perl" in several places, and it does
+	not appear to be a problem.  But, at least to make it simpler to
+	change PERL on the make command line, check for perl in configure.
 
-	Turn on %{source,header}_extension features.
+	* configure.ac (PERL): New.
+	* doc/Doxyfile.in, doc/Makefile.am, tests/bison.in: Use it.
 
-	* src/lex.c (percent_table): Un-CPP out header_extension and
-	source_extension.
-	* src/files.c (compute_exts_from_gf): Compare pointers with NULL.
-	(compute_exts_from_src): Remove conditions. It restores priorities
-	between options.
+2012-10-05  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-14  Marc Autret  <autret_m@epita.fr>
+	tests: fix sed portability issues
+	Reported by Didier Godefroy,
+	<http://lists.gnu.org/archive/html/bug-bison/2012-10/msg00005.html>.
 
-	* src/files.c (compute_base_names): Add extensions computing when
-	`--file-prefix' used.
-	Standardize function calls.
+	* tests/calc.at (AT_CHECK_SPACES): Use Perl.
 
-2001-08-13  Marc Autret  <autret_m@epita.fr>
+2012-10-05  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/bison.simple (YYSTACK_USE_ALLOCA): Changed to allow users
-	defining it (defined but null disables alloca).
+	tests: diff -u is not portable
+	Reported by Didier Godefroy
+	<http://lists.gnu.org/archive/html/bug-bison/2012-10/msg00006.html>.
 
-2001-08-13  Marc Autret  <autret_m@epita.fr>
+	* tests/existing.at (AT_LALR1_DIFF_CHECK): Skip if diff -u does not
+	work.
 
-	* src/bison.simple (_yy_memcpy): CPP reformat.
+2012-10-04  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-13  Pascal Bart  <pascal.bart@epita.fr>
+	maint: word changes
+	* README-hacking (Typical errors): Improve wording.
 
-	* tests/atconfig.in (CPPFLAGS): Fix.
+2012-10-04  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-10  Pascal Bart  <pascal.bart@epita.fr>
+	lalr1.cc: fix test suite portability
+	Reported by Rob Vermaas' Hydra build farm on x86_64-darwin 10.2.0 with
+	G++ 4.6.3.
 
-	* doc/bison.texinfo: Include GNU General Public License from
-	`gpl.texi'.
-	* doc/gpl.texi: Add to package.
+	* tests/headers.at (Several parsers): Include AT_DATA_SOURCE_PROLOGUE
+	in the files to compile.
+	* data/location.cc: Do not include twice string and iostream (once
+	by position.hh, and then by location.hh).
+	* README-hacking (Typical errors): Some hints for other maintainers.
 
-2001-08-10  Marc Autret  <autret_m@epita.fr>
+2012-10-03  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-	* src/print_graph.h: Fix.
-	* src/reader.c (read_declarations): Use parse_header_extension_decl ().
+	maint: fix an erroneous include
+	This fixes test 130 (Several parsers).
 
-2001-08-10  Akim Demaille  <akim@epita.fr>
+	* data/location.cc: Include <iostream> rather than <iosfwd> since
+	we really need << on strings for instance.
+	* NEWS: Document this.
 
-	* src/system.h: Provide default declarations for stpcpy, strndup,
-	and strnlen.
+2012-10-03  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-10  Robert Anisko  <anisko_r@epita.fr>
+	tests: check that headers are self contained
+	Reported by Alexandre Duret-Lutz.
 
-	* doc/bison.texinfo (Locations): Update @$ stuff.
+	* tests/headers.at (Several parsers): here.
 
-2001-08-09  Robert Anisko  <anisko_r@epita.fr>
+2012-10-03  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/bison.simple (YYLLOC_DEFAULT): Update.
-	(yyparse): Adjust.
+	doc: add missing documentation for --report
+	* doc/bison.texi (Bison Options): Document --report's "solved", "all",
+	and "none".
 
-2001-08-08  Marc Autret  <autret_m@epita.fr>
+2012-10-01  Akim Demaille  <akim@lrde.epita.fr>
 
-	* doc/bison.texinfo: Change @samp{$<@dots{}>} to
-	@samp{$<@dots{}>@var{n}} in Section Actions in Mid-Rule.
-	Reported by Fabrice Bauzac.
+	headers: move CPP guards into YY_*_INCLUDED to avoid collisions
+	See <http://lists.gnu.org/archive/html/bug-bison/2012-09/msg00016.html>.
 
-2001-08-08  Marc Autret  <autret_m@epita.fr>
+	* data/c.m4 (b4_cpp_guard): Prepend YY_ and append _INCLUDED.
+	* tests/headers.at: Adjust.
+	* NEWS, doc/bison.texi: Document.
 
-	* src/vcg_default.h: Use NULL instead of 0 to initialize pointers.
-	* src/vcg.c (output_node): Fix.
-	* src/vcg.h: Cleanup.
-	* src/print_graph.c: Add comments.
-	(node_output_size): New global variable. Simplify the formatting of
-	the VCG graph output.
-	(print_actions): Unused code is now used. It notifies the final state
-	and no action states in the VCG graph. It also give the reduce actions.
-	The `shift and goto' edges are red and the `go to state' edges are
-	blue.
-	Get the current node name and node_obstack by argument.
-	(node_obstack): New variable.
-	(print_state): Manage node_obstack.
-	(print_core): Use node_obstack given by argument.
-	A node is not only computed here but in print_actions also.
-	(print_graph): CPP out useless code instead of commenting it.
+2012-10-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-07  Pascal Bart  <pascal.bart@epita.fr>
+	minor changes.
+	* NEWS: Word changes.
+	* doc/bison.texi: Spell check.
+	Fix minor issues.
+	* tests/headers.at: Comment and formatting changes.
 
-	* tests/atconfig.in (CPPFLAGS): Fix.
+2012-09-28  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-08-07  Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	* src/print_graph.c (quote): New.
-	(print_core): Use it.
+2012-09-28  Theophile Ranquet  <theophile.ranquet@gmail.com>
 
-2001-08-06  Akim Demaille  <akim@epita.fr>, Marc Autret  <autret_m@epita.fr>
+	errors: indent "user token number redeclaration" context
+	This is the continuation of the work on the readability of errors
+	context.
 
-	* src/vcg.c (complain.h): Include it.
-	Unepitaize `return' invocations.
-	[NDEBUG] (main): Remove.
-	* src/vcg.h (node_t, edge_t, graph_t): Constify the char * members.
-	* src/files.c (open_files): Initialize graph_obstack.
-	* src/print_graph.c (print_actions): CPP out useless code.
-	(print_core): Don't output the last `\n' in labels.
-	Use `quote'.
-	* src/files.c (output_files): Output the VCG file.
-	* src/main.c (main): Invoke print_graph ();
+	* src/symtab.c (user_token_number_redeclaration): Use
+	complain_at_indent to output with increased indentation level.
+	* tests/input:at: Apply this change.
 
-2001-08-06  Marc Autret  <autret_m@epita.fr>
+2012-09-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	Automaton VCG graph output.
-	Using option ``-g'' or long option ``--graph'', you can generate
-	a gram_filename.vcg file containing a VCG description of the LALR (1)
-	automaton of your grammar.
+	warnings: introduce -Wdeprecated in the usage info
+	The deprecated warning, introduced some time ago, was not displayed in
+	the usage message. This patch addresses the issue.
 
-	* src/main.c: Call to print_graph() function.
-	* src/getargs.h: Update.
-	* src/getargs.c (options): Update to catch `-g' and `--graph' options.
-	(graph_flag): New flag.
-	(longopts): Update.
-	(getargs): Add case `g'.
-	* src/files.c (graph_obstack): New obstack struct.
-	(open_files): Initialize new obstack.
-	(output_files): Saves graph_obstack if required.
-	* src/files.h (graph_obstack): New extern declaration.
-	* src/Makefile.am: Add new source files.
+	* src/getargs.c (usage): Insert here.
 
-2001-08-06  Marc Autret  <autret_m@epita.fr>
+2012-09-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* src/print_graph.c, src/print_graph.h (graph): New.
-	* src/vcg.h: New file.
-	* src/vcg.c: New file, VCG graph handling.
+	errors: prefix the output with "error: "
+	This improves readability. This is also what gcc does.
 
-2001-08-06  Marc Autret  <autret_m@epita.fr>
+	* NEWS: Document this change.
+	* src/complain.c (complain_at): Prefix all errors with "error: ".
+	(complain_at_indent, warn_at_indent): Do not prefix the context
+	information of errors, which are basically just indented errors.
+	* tests/conflicts.at, tests/glr-regression.at, tests/input.at,
+	tests/named-refs.at, tests/output.at, tests/push.at,
+	tests/regression.at, tests/skeletons.at: Apply this change.
 
-	Add of %source_extension and %header_extension which specify
-	the source or/and the header output file extension.
+2012-09-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* src/files.c (compute_base_names): Remove initialisation of
-	src_extension and header_extension.
-	(compute_exts_from_gf): Update.
-	(compute_exts_from_src): Update.
-	(output_files): Update.
-	* src/reader.c (parse_header_extension_decl): New.
-	(parse_source_extension_decl): New.
-	(read_declarations): New case statements for the new tokens.
-	* src/lex.c (percent_table): Add entries for %source_extension
-	and %header_extension.
-	* src/lex.h (token_e): New tokens tok_hdrext and tok_srcext.
+	errors: indent "invalid value for %define" context
+	This is the continuation of the work on the readability of errors
+	    context.
 
-2001-08-06  Marc Autret  <autret_m@epita.fr>
+	For example, what used to be:
+	  input.y:1.9-29: invalid value for %define variable 'foo' : 'bar'
+	  input.y:1.9-29: accepted value: 'most'
 
-	* configure.in: Bump to 1.28c.
-	* doc/bison.texinfo: Texinfo thingies.
+	is now:
+	  input.y:1.9-29: invalid value for %define variable 'foo' : 'bar'
+	  input.y:1.9-29:     accepted value: 'most'
 
-2001-08-04  Pascal Bart  <pascal.bart@epita.fr>
+	* src/muscle-tab.c (muscle_percent_define_check_values): Use
+	complain_at_indent to output with increased indentation level.
+	* tests/input:at: Apply this change.
 
-	* tests/atconfig.in (CPPFLAGS): Add.
-	* tests/calc.at (AT_CHECK): Use CPPFLAGS.
+2012-09-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+	errors: indent "%define var" redefinition context
+	This is the continuation of the work on the readability of errors
+	context.
 
-	Version 1.28b.
+	For example, what used to be:
+	  input.y:2.9-11: %define variable 'var' redefined
+	  input.y:1.9-11: previous definition
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+	is now:
+	  input.y:2.9-11: %define variable 'var' redefined
+	  input.y:1.9-11:     previous definition
 
-	* tests/Makefile.am (check-local): Ship testsuite.
-	* tests/calc.at (_AT_DATA_CALC_Y): Prototype all the functions.
-	Include `string.h'.
+	* src/muscle-tab.c (muscle_percent_define_insert): Use
+	complain_at_indent to output with increased indentation level.
+	* tests/input.at: Apply this change.
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+2012-09-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-	* configure.in: Try using -Wformat when compiling.
+	errors: indent "symbol redeclaration" context
+	This is the continuation of the work on the readability of errors
+	context.
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+	For example, what used to be:
+	  input.y:5.10-24: %printer redeclaration for <field2>
+	  input.y:3.11-25: previous declaration
 
-	* configure.in: Bump to 1.28b.
+	is now:
+	  input.y:5.10-24: %printer redeclaration for <field2>
+	  input.y:3.11-25:     previous declaration
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+	* NEWS: Document this change.
+	* src/symtab.c (symbol_redeclaration, semantic_type_redeclaration,
+	user_token_number_redeclaration, default_tagged_destructor_set,
+	default_tagless_destructor_set, default_tagged_printer_set,
+	default_tagless_printer_set): Use complain_at_indent to
+	output with increased indentation level.
+	* tests/input.at: Apply this change.
 
-	* src/complain.c: Adjust strerror_r portability issues.
+2012-09-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+	errors: indent "result type clash" error context
+	This used to be the format of the error report:
 
-	Version 1.28a.
+	  input.y:6.5-10: result type clash on merge function 'merge': [...]
+	  input.y:2.4-9: previous declaration
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+	In order to distinguish the actual error from the context provided, we
+	rather this new output:
 
-	* src/getargs.c, src/getarg.h (skeleton)): Constify.
-	* src/lex.c (literalchar): Avoid name clashes on `buf'.
-	* src/getargs.c: Include complain.h.
-	* src/files.c, src/files.h (skeleton_find): Avoid name clashes.
-	* lib/quotearg.c, lib/quotearg.h: Update from fileutils 4.1.
+	  input.y:6.5-10: result type clash on merge function 'merge': [...]
+	  input.y:2.4-9:     previous declaration
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+	Another patch will introduce an "error: " prefix to all non-indented
+	lines, giving yet better readability to the reports.
 
-	* src/reader.c (readgram): Display hidden chars in error messages.
+	* src/complain.h (SUB_INDENT): Move to here.
+	* src/reader.c (record_merge_function_type): Use complain_at_indent to
+	output with increased indentation level.
+	* src/scan-code.l (SUB_INDENT): Remove from here.
+	* tests/glr-regression.at: Apply this change.
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+2012-09-25  Akim Demaille  <akim@lrde.epita.fr>
 
-	Update to gettext 0.10.39.
+	regen
 
-2001-08-03  Akim Demaille  <akim@epita.fr>
+2012-09-25  Akim Demaille  <akim@lrde.epita.fr>
 
-	* lib/strspn.c: New.
+	yacc: fix handling of CPP guards when no header is generated
+	When no header was to be generated, Bison would issue:
 
-2001-08-01  Marc Autret  <autret_m@epita.fr>
+	  /* In a future release of Bison, this section will be replaced
+	     by #include "".  */
+	  #ifndef YY_
+	  # define YY_
 
-	* doc/bison.texinfo: Update.
-	* doc/bison.1 (mandoc): Update.
-	* src/system.h (EXT_GUARD_C, EXT_STYPE_H): Remove .c and .h.
-	* src/files.c: Support output files extensions computing.
-	(src_extension): New static variable.
-	(header_extension): New static variable.
-	(tr): New function.
-	(get_extension_index): New function, gets the index of an extension
-	filename in a string.
-	(compute_exts_from_gf): New function, computes extensions from the
-	grammar file extension.
-	(compute_exts_from_src): New functions, computes extensions from the
-	C source file extension, file given by ``-o'' option.
-	(compute_base_names): Update.
-	(output_files): Update.
+	It now properly generates nothing.
 
-2001-08-01  Robert Anisko  <anisko_r@epita.fr>
+	* data/c.m4 (b4_cpp_guard_open, b4_cpp_guard_close): Issue nothing when
+	the file name is empty.
+	* data/yacc.c: Do not generate the above comment when there is no header
+	to generate.
+	* NEWS: Update.
 
-	* doc/bison.texi: Document @$.
-	(Locations): New section.
+2012-09-25  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-07-18  Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	* Makefile.maint, GNUmakefile: New, from Autoconf 2.52.
-	* config/prev-version.txt, config/move-if-change: New.
-	* Makefile.am: Adjust.
+2012-09-04  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-07-08  Pascal Bart  <pascal.bart@epita.fr>
+	maint: remove useless file
+	* externals/bootstrap.cfg: Remove.
+	This file was used by a specific build system.
+	It was added to the master repository by accident.
 
-	* src/bison.simple (yyparse): Suppress warning `comparaison
-	between signed and unsigned'.
+2012-09-04  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-07-05  Pascal Bart  <pascal.bart@epita.fr>
+	update files to ignore
+	* doc/.gitignore: Don't ignore split info files as we don't split our
+	info file.
+	See <http://lists.gnu.org/archive/html/bug-bison/2012-08/msg00006.html>.
 
-	* src/getargs.h (raw_flag): Remove.
-	* src/getargs.c: Die on `-r'/`--raw'.
-	* src/lex.c (parse_percent_token): Die on `%raw'.
-	* src/reader.c (output_token_defines): Suppress call to `raw_flag'.
-	* tests/calc.at: Suppress test with option `--raw'.
+2012-09-04  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-07-14  Akim Demaille  <akim@epita.fr>
+	remove useless include
+	* src/system.h: Don't include sys/types.h.
+	Reported by Eric Blake,
+	<http://lists.gnu.org/archive/html/bug-bison/2012-09/msg00002.html>.
+	(FUNCTION_PRINT): Remove, unused.
 
-	* config/: New.
-	* configure.in: Require Autoconf 2.50.
-	Update to gettext 0.10.38.
+2012-09-03  Jim Meyering  <meyering@redhat.com>
 
-2001-03-16  Akim Demaille  <akim@epita.fr>
+	use locale-indep. c_is* functions for parsing, not isspace, isprint etc
+	* src/parse-gram.y: Include "c-ctype.h".
+	(add_param): Parse with c_isspace, not isspace.
+	* src/parse-gram.c: Likewise.
+	* src/scan-gram.l: Include c-ctype.h, not ctype.h.
+	(SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER): Use c_isspace and c_isprint,
+	not ctype.h's locale-dependent functions.
 
-	* doc/bison.texinfo: ANSIfy the examples.
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-03-16  Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	* getargs.c (skeleton): New variable.
-	(longopts): --skeleton is a new option.
-	(shortopts, getargs): -S is a new option.
-	* getargs.h: Declare skeleton.
-	* output.c (output_parser): Use it.
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-03-16  Akim Demaille  <akim@epita.fr>
+	--help: include a place to report translation issues
+	http://lists.gnu.org/archive/html/bug-bison/2012-08/msg00007.html
+	shows that it is useful to help users report translation issues.
+	While at it, include other informative bits that the coreutils shows.
 
-	* m4/strerror_r.m4: New.
-	* m4/error.m4: Run AC_FUNC_STRERROR_R.
-	* lib/error.h, lib/error.c: Update.
+	* src/getargs.c (usage): Report more URLs where the user can
+	refer to.
+	Mostly copied/pasted from coreutils' emit_ancillary_info function.
 
-2001-03-16  Akim Demaille  <akim@epita.fr>
+2012-08-31  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/getargs.c (longopts): Clean up.
+	tests: style changes
+	* tests/torture.at (AT_DATA_STACK_TORTURE): M4 style changes to
+	improve readability.
+	Fix an assertion which, because of a <= instead of ==, did not check
+	new_status as visibly meant.
+	(get_args): New.
 
-2001-02-21  Akim Demaille  <akim@epita.fr>
+2012-08-31  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/reader.c (gensym): `gensym_count' is your own.
-	Use a static buf to create the symbol name, as token_buffer is no
-	longer a buffer.
+	tests: fix push-pull test
+	* tests/torture.at: %push-pull-parser is no longer supported.
 
-2001-02-08  Akim Demaille  <akim@epita.fr>
+2012-08-31  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/conflicts.c (conflict_report): Be sure not to append to res
-	between two calls, which could happen if both first sprintf were
-	skipped, but not the first cp += strlen.
+	yacc.c: style changes
+	* data/yacc.c: (yytoken): Define with initial value.
 
-2001-02-08  Akim Demaille  <akim@epita.fr>
+2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
 
-	* lib/memchr.c, lib/stpcpy.c, lib/strndup.c, lib/strnlen.c:
-	New, from fileutils 4.0.37.
-	* configure.in: Require Autoconf 2.49c.  I took some time before
-	making this decision.  This is the only way out for portability
-	issues in Bison, it would mean way too much duplicate effort to
-	import in Bison features implemented in 2.49c since 2.13.
-	AC_REPLACE_FUNCS and AC_CHECK_DECLS the functions above.
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
 
-2001-02-02  Akim Demaille  <akim@epita.fr>
+2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
 
-	* lib/malloc.c, lib/realloc.c: New, from the fileutils 4.0.37.
-	* lib/xalloc.h, lib/xmalloc.c: Update.
+	version 2.6.2
+	* NEWS: Record release date.
 
-2001-01-19  Akim Demaille  <akim@epita.fr>
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
 
-	Get rid of the ad hoc handling of token_buffer in the scanner: use
-	the obstacks.
+	NEWS: update.
+	* NEWS: Catch up with the other changes from 2.6.1.
 
-	* src/lex.c (token_obstack): New.
-	(init_lex): Initialize it.  No longer call...
-	(grow_token_buffer): this.  Remove it.
-	Adjust all the places which used it to use the obstack.
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
 
-2001-01-19  Akim Demaille  <akim@epita.fr>
+	yacc: remove trailing end of line at end of file
+	There are still spurious spaces at the end of some lines.  But this is
+	addressed in the master branch, and I am reluctant to try to backport
+	this.
 
-	* src/lex.h: Rename all the tokens:
-	s/\bENDFILE\b/tok_eof/g;
-	s/\bIDENTIFIER\b/tok_identifier/g;
-	etc.
-	Let them be enums, not #define, to ease debugging.
-	Adjust all the code.
+	* data/yacc.c, data/glr.c, data/lalr1.cc, data/glr.cc: here.
+	* tests/calc.at (AT_CHECK_SPACES): New.
+	Use it.
+	Be sure not to introduce trailing empty lines in the *.y files.
+	* NEWS: Doc it.
+	* cfg.mk (syntax-check): Remove the exception.
 
-2001-01-18  Akim Demaille  <akim@epita.fr>
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/lex.h (MAXTOKEN, maxtoken, grow_token_buffer): Remove, private.
-	* src/lex.c (maxtoken, grow_token_buffer): Static.
+	thanks: fix a contributor name
+	* THANKS: On his request.
 
-2001-01-18  Akim Demaille  <akim@epita.fr>
+2012-08-01  Akim Demaille  <akim@lrde.epita.fr>
 
-	Since we now use obstacks, more % directives can be enabled.
+	gnulib: update
 
-	* src/lex.c (percent_table): Also accept `%yacc',
-	`%fixed_output_files', `%defines', `%no_parser', `%verbose', and
-	`%debug'.
-	Handle the actions for `%semantic_parser' and `%pure_parser' here,
-	instead of returning a token.
-	* src/lex.h (SEMANTIC_PARSER, PURE_PARSER): Remove, unused.
-	* src/reader.c (read_declarations): Adjust.
-	* src/files.c (open_files): Don't call `compute_base_names', don't
-	compute `attrsfile' since they depend upon data which might be
-	*in* the input file now.
-	(output_files): Do it here.
-	* src/output.c (output_headers): Document the fact that this patch
-	introduces a guaranteed SEGV for semantic parsers.
-	* doc/bison.texinfo: Document them.
-	* tests/suite.at: Exercise these %options.
+2012-08-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-20  Akim Demaille  <akim@epita.fr>
+	tests: synch line -> syncline, for consistency
+	* tests/synclines.at: Do it, as "syncline" is used consistently
+	everywhere else in Bison.
 
-	Also handle the output file (--verbose) with obstacks.
+2012-08-01  Akim Demaille  <akim@lrde.epita.fr>
 
-	* files.c (foutput): Remove.
-	(output_obstack): New.
-	Adjust all dependencies.
-	* src/conflicts.c: Return a string.
-	* src/system.h (obstack_grow_string): Rename as...
-	(obstack_sgrow): this.  Be ready to work with non literals.
-	(obstack_fgrow4): New.
+	tests: synclines: style changes
+	* tests/synclines.at (AT_TEST_SYNCLINE): Rename as...
+	(AT_TEST): this.
+	Use pushdef/popdef.
+	Formatting changes.
+	Use '+' instead of '*' where appropriate.
 
-2000-12-20  Akim Demaille  <akim@epita.fr>
+2012-08-01  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/files.c (open_files): Fix the computation of short_base_name
-	in the case of `-o foo.tab.c'.
+	tests: synclines: fix perl invocation
+	Reported by Summum Bonum.
 
-2000-12-20  Akim Demaille  <akim@epita.fr>
+	* tests/synclines.at: Fix Perl invocation: its -f is not like sed's.
 
-	* src/reader.c (copy_string, copy_comment, copy_comment2, copy_at)
-	(copy_dollar): Now that everything uses obstacks, get rid of the
-	FILE * parameters.
+2012-08-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-20  Akim Demaille  <akim@epita.fr>
+	regen
 
-	* src/files.c (open_files): Actually the `.output' file is based
-	on the short_base_name, not base_name.
-	* tests/suite.at (Checking output file names): Adjust.
+2012-08-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-20  Akim Demaille  <akim@epita.fr>
+	c++: trailing end-of-lines in %parse-param
+	* src/parse-gram.y (add_param): No only skip ' ' and '\t', skip all
+	leading and trailing spaces.
+	* tests/regression.at (Lex and parse params): Check it.
+	* NEWS: Document it.
 
-	* src/bison.s1: Remove, we now use directly...
-	* src/bison.simple: this.
-	* src/Makefile.am: Use pkgdata instead of data.
+2012-08-01  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-20  Akim Demaille  <akim@epita.fr>
+	tests: simplify
+	* tests/regression.at: Remove useless compilations: AT_FULL_COMPILE
+	includes the compilation by bison.
 
-	* src/files.c (guard_obstack): New.
-	(open_files): Initialize it.
-	(output_files): Dump it...
-	* src/files.h: Export it.
-	* src/reader.c (copy_guard): Use it.
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-19  Akim Demaille  <akim@epita.fr>
+	use obstack_printf
+	This is not just nicer, it is also much safer, since we were
+	using sprintf...
 
-	* src/files.c (outfile, defsfile, actfile): Removed as global
-	vars.
-	(open_files): Don't compute them.
-	(output_files): Adjust.
-	(base_name, short_base_name): Be global.
+	* bootstrap.conf: Require it.
+	* src/system.h (obstack_fgrow1, obstack_fgrow2, obstack_fgrow3)
+	(obstack_fgrow4): Remove.
 	Adjust dependencies.
 
-2000-12-19  Akim Demaille  <akim@epita.fr>
+2012-07-30  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/files.c (strsuffix): New.
-	(stringappend): Be just like strcat but allocate.
-	(base_names): Eve out from open_files.
-	Try to simplify the rather hairy computation of base_name and
-	short_base_name.
-	(open_files): Use it.
-	* tests/suite.at (Checking output file names): New test.
+	scanner: restore a missing start condition
+	$ flex src/scan-skel.l
+	src/scan-skel.l:145: multiple <<EOF>> rules for start condition SC_AT_DIRECTIVE_ARGS
+	src/scan-skel.l:145: multiple <<EOF>> rules for start condition SC_AT_DIRECTIVE_SKIP_WS
+	This is warning, and it seems there are no means to make it an error.
 
-2000-12-19  Akim Demaille  <akim@epita.fr>
+	* src/scan-skel.l: Restore the start-condition INITIAL for an <<EOF>>
+	clause.
 
-	* src/system.h (obstack_grow_literal_string): Rename as...
-	(obstack_grow_string): this.
-	* src/output.c (output_parser): Recognize `%% actions' instead of
-	`$'.
-	* src/bison.s1: s/$/%% actions/.
-	* src/bison.hairy: Likewise.
+2012-07-30  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-19  Akim Demaille  <akim@epita.fr>
+	gnulib: update
 
-	* src/output.c (output_parser): Compute the `#line' lines when
-	there are.
-	* src/Makefile.am (bison.simple): Be a simple copy of bison.s1.
-	Suggested by Hans Aberg.
+2012-07-30  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-19  Akim Demaille  <akim@epita.fr>
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
 
-	Let the handling of the skeleton files be local to the procedures
-	that use it.
+2012-07-30  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/files.c (xfopen, xfclose, skeleton_find, guardfile): No
-	longer static.
-	(fparser, open_extra_files): Remove.
-	(open_files, output_files): Don't take care of fparser.
-	* src/files.h: Adjust.
-	* src/output.c (output_parser): Open and close the file to the
-	skeleton.
-	* src/reader.c (read_declarations): When %semantic_parser, open
-	fguard.
+	version 2.6.1
+	* NEWS: Record release date.
 
-2000-12-19  Akim Demaille  <akim@epita.fr>
+2012-07-30  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/file.h (BISON_SIMPLE, BISON_HAIRY): Move from here...
-	* src/system.h (BISON_SIMPLE, BISON_HAIRY): ... to here.
+	gnulib: update
 
-2000-12-19  Akim Demaille  <akim@epita.fr>
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/files.c (open_files): Yipee!  We no longer need all the code
-	looking for `/tmp' since we have no tmp file.
+	maint: fix some syntax-check issues
+	* cfg.mk: Nuke the following warnings which are confused by our
+	text reports (that state that the error token is number 256).
+	  prohibit_magic_number_exit
+	  ../../doc/bison.texi:8170:error (256)
+	  ../../tests/conflicts.at:570:error (256)
+	  ../../tests/conflicts.at:673:error (256)
+	  ../../tests/conflicts.at:811:error (256)
+	  ../../tests/conflicts.at:1154:error (256)
+	  ../../tests/regression.at:281:error (256)
+	  ../../tests/regression.at:582:error (256)
+	  maint.mk: use EXIT_* values rather than magic number
 
-2000-12-19  Akim Demaille  <akim@epita.fr>
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/system.h (EXT_TAB, EXT_OUTPUT, EXT_STYPE_H, EXT_GUARD_C):
-	New macros.
-	* src/files.c (open_files): Less dependency on MSDOS etc.
+	tests: do not depend on __cplusplus to decide for C++ or C output
+	Since we do support compiling C code with a C++ compiler.
 
-2000-12-14  Akim Demaille  <akim@epita.fr>
+	* tests/actions.at (Qualified $$ in actions): Use AT_SKEL_CC_IF.
 
-	* src/bison.s1 (YYLLOC_DEFAULT): New macro.
-	Provide a default definition.
-	Use it when executing the default @ action.
-	* src/reader.c (reader_output_yylsp): No longer include
-	`timestamp' and `text' in the default YYLTYPE.
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-12  Akim Demaille  <akim@epita.fr>
+	regen
 
-	* src/reader.c (copy_definition, parse_union_decl, copy_action)
-	(copy_guard): Quote the file names.
-	Reported by Laurent Mascherpa.
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-12-12  Akim Demaille  <akim@epita.fr>
+	synclines: remove spurious empty line
+	* data/bison.m4 (b4_syncline): Do not start with an empty line.
 
-	* src/output.c (output_headers, output_program, output): Be sure
-	to escape special characters when outputting filenames.
-	(ACTSTR_PROLOGUE, ACTSTR_EPILOGUE): Remove.
-	(output_headers): Don't depend on them, Use ACTSTR.
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-11-17  Akim Demaille  <akim@epita.fr>
+	also support $<foo>$ in the %initial-action
+	scan-code.l is already passing argument to b4_dollar_dollar for the
+	initial acton, but its definition (of b4_dollar_dollar) does not use
+	this argument.
 
-	* lib/obstack.h: Formatting changes.
-	(obstack_grow, obstack_grow0): Don't cast WHERE at all: it
-	prevents type checking.
-	(obstack_ptr_grow, obstack_ptr_grow_fast): When assigning, don't
-	cast the value to (void *): assigning a `foo *' to a `void *'
-	variable is valid.
-	(obstack_int_grow, obstack_int_grow_fast): Don't cast AINT to int.
-	* src/reader.c (parse_union_decl): Typo: use obstack_1grow to
-	append characters.
+	Generalize this definition, and use it for the %initial-action too.
 
-2000-11-17  Akim Demaille  <akim@epita.fr>
+	* data/c.m4 (b4_dollar_dollar_, b4_dollar_pushdef, b4_dollar_popdef):
+	Instead of expecting a pointer, require a value, and use ".".
+	Since they are now generic enough, move to...
+	* data/c-like.m4: this new file.
+	* data/c.m4, data/java.m4: Load it.
+	* data/glr.c, data/lalr1.cc, data/lalr1.java, data/yacc.c: Use
+	b4_dollar_pushdef for the %initial-action.
+	* tests/actions.at: Check that.
+	* data/Makefile.am: Adjust.
+	* NEWS, doc/bison.texi: Document.
 
-	* tests/Makefile.am (suite.m4, regression.m4, calc.m4): Rename
-	as...
-	(suite.m4, regression.m4, calc.m4): these.
-	* tests/atgeneral.m4: Update from CVS Autoconf.
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-11-17  Akim Demaille  <akim@epita.fr>
-
-	* tests/regression.m4 (%union and --defines): New test,
-	demonstrating a current bug in the obstack implementation.
-
-2000-11-17  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.s1 (_YY_DECL_VARIABLES, YY_DECL_VARIABLES): New
+	skeletons: b4_dollar_pushdef and popdef to simpify complex definitions
+	M4 is really making it uselessly hard to define macros that define
 	macros.
-	Use them to declare the variables which are global or local to
-	`yyparse'.
+	* data/c.m4 (b4_dollar_pushdef, b4_dollar_popdef): New.
+	Use it.
 
-2000-11-17  Akim Demaille  <akim@epita.fr>
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-	* acconfig.h: Remove, no longer used.
+	regen
 
-2000-11-07  Akim Demaille  <akim@epita.fr>
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src: s/Copyright (C)/Copyright/g.
+	printer/destructor: translate only once
+	Currently "%printer {...} a b c d e f" translates the {...} six times.
+	Not only is this bad for time and space, it also issues six times the
+	same warnings.
 
-2000-11-07  Akim Demaille  <akim@epita.fr>
+	* src/symlist.h, src/symlist.c (symbol_list_destructor_set)
+	(symbol_list_printer_set): Take the action as code_props instead of
+	const char *.
+	* src/parse-gram.y: Translate these actions here.
+	* src/scan-code.h: Comment change.
+	* tests/input.at: Check that warnings are issued only once.
 
-	* src/reader.c (reader): #define YYLSP_NEEDED to 1 instead of just
-	defining.
-	* src/bison.s1: s/#ifdef YYLSP_NEEDED/#if YYLSP_NEEDED/.
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-11-07  Akim Demaille  <akim@epita.fr>
+	factor the handling of m4 escaping
+	The conversion from @ to @@ and so forth is coded is too many
+	different places.  Factor, a bit.
 
-	* src/bison.s1 (YYLEX): Use #if instead of #ifdef.
-	Merge in a single CPP if/else.
+	* src/scan-code.l: Instead of duplicating the logic of obstack_escape,
+	use it.
+	It sure is less efficient, but the cost is negligible.
+	This allows to factor rules that are alike.
+	And to factor some start-condition clauses.
+	* tests/input.at (Stray $ or @): New.
+	* NEWS: Document it.
 
-2000-11-07  Akim Demaille  <akim@epita.fr>
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/output.c (output): Remove useless variables.
-	* lib/obstack.c (obstack_grow, obstack_grow0): Rename the second
-	argument `data' for consistency with the prototypes.
-	Qualify it `const'.
-	(obstack_copy, obstack_copy0): Rename the second argument as
-	`address' for consistency.  Qualify it `const'.
-	* lib/obstack.h (obstack_copy, obstack_copy0, obstack_grow)
-	(obstack_grow0, obstack_ptr_grow, obstack_ptr_grow_fast): Qualify
-	`const' their input argument (`data' or `address').
-	Adjust the corresponding macros to include `const' in casts.
+	news: schedule the removal of the ";" hack
+	scan-code.l is significantly more complex because of this.
 
-2000-11-03  Akim Demaille  <akim@epita.fr>
+	* NEWS: Doc it.
 
-	* src/Makefile.am (INCLUDES): s/PFILE/BISON_SIMPLE/.
-	s/PFILE1/BISON_HAIRY/.
-	Adjust dependencies.
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-11-03  Akim Demaille  <akim@epita.fr>
+	style changes in the scanners
+	* src/scan-code.l, src/scan-skel.l: Use a more traditional indentation
+	style for start-conditions.
+	Prefer "continue" to a comment, for empty actions.
+	Strip useless {}.
+	Remove useless start-condition clauses.
 
-	For some reason, this was not applied.
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/files.c [VMS]: No longer include `ssdef.h', no longer define
-	`unlink': it's no longer used.
+	regen
 
-2000-11-03  Akim Demaille  <akim@epita.fr>
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/files.c (skeleton_find): New function, eved out of...
-	(open_files, open_extra_files): here.
+	support $<tag>$ in printers and destructors
+	* src/scan-code.l (SC_SYMBOL_ACTION): Accept $<tag>$, not just $$.
+	* data/c.m4 (b4_dollar_dollar_): New.
+	(b4_symbol_actions): Let b4_dollar_dollar use b4_dollar_dollar_.
+	* NEWS, doc/bison.texi: Document it.
+	* tests/actions.at: Check this for C and C++.
 
-2000-11-03  Akim Demaille  <akim@epita.fr>
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	Don't use `atexit'.
+	scan-code: factor the handling of the type in $<TYPE>$
+	* src/scan-code.l (fetch_type_name): New.
+	(handle_action_dollar): Use it.
+	(gt_ptr): Remove, useless.
 
-	* src/files.c (obstack_save): New function.
-	(done): Rename as...
-	(output_files): this.
-	Use `obstack_save'.
-	* src/main.c (main): Don't use `atexit' to register `done', since
-	it no longer has to remove tmp files, just call `output_files'
-	when there are no errors.
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-11-02  Akim Demaille  <akim@epita.fr>
+	muscles: fix another occurrence of unescaped type name
+	* src/output.c (quoted_output): Split into...
+	(quoted_output, string_output): these.
+	Use the former when outputting a type_name.
+	* tests/input.at: Check this case.
+	* src/symtab.h: Comment changes.
 
-	* src/files.c [VMS]: No longer include `ssdef.h', no longer define
-	`unlink': it's no longer used.
-	* src/files.h: Formatting changes.
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-11-02  Akim Demaille  <akim@epita.fr>
+	glr.cc: fix the handling of yydebug
+	* data/glr.cc (yydebug_): Remove, unused.
+	(set_debug_level, debug_level): Work on yydebug instead.
+	* doc/bison.texi, NEWS: Document this.
 
-	Remove the last uses of mktemp and unlink/delete.
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/files.c (fdefines, ftable): Removed.
-	(defines_ostack, table_obstack): New.
-	Adjust dependencies of the former into uses of the latter.
-	* src/output.c (output_short_or_char_table, output_short_table):
-	Convert to using obstacks.
-	* src/reader.c (copy_comment2): Accept one FILE * and two
-	obstacks.
-	(output_token_defines, reader_output_yylsp): Use obstacks.
-	* src/system.h (obstack_fgrow3): New.
-	* po/POTFILES.in: Adjust.
+	gnulib: update
 
-2000-11-01  Akim Demaille  <akim@epita.fr>
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	Change each use of `fattrs' into a use of `attrs_obstack'.
+	formatting changes
+	* src/symtab.h: here.
 
-	* src/reader.c (copy_at): Typo: s/yylloc/yyloc/.
-	* src/files.c (fattrs): Remove.
-	(attrs_obstack): New.
-	Adjust all dependencies.
-	(done): If SEMANTIC_PARSER, dump attrs_obstack into attrsfile.
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-11-01  Akim Demaille  <akim@epita.fr>
+	tests: fix an assertion
+	* tests/local.at (AT_YYLEX_DEFINE): Be sure to check the array
+	against its length, not its size in bytes.
 
-	Introduce obstacks.
-	Change each use of `faction' into a use of `action_obstack'.
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* lib/obstack.h, lib/obstack.c: New files.
-	* src/files.c (faction): Remove.
-	(action_obstack): New.
-	Adjust all dependencies.
-
-2000-10-20  Akim Demaille  <akim@epita.fr>
-
-	* lib/quote.h (PARAMS): New macro.  Use it.
-
-2000-10-16  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c (output_short_or_char_table): New function.
-	(output_short_table, output_token_translations): Use it.
-	(goto_actions): Use output_short_table.
-
-2000-10-16  Akim Demaille  <akim@epita.fr>
-
-	* src/symtab.c (bucket_new): New function.
-	(getsym): Use it.
-
-	* src/output.c (output_short_table): New argument to display the
-	comment associated with the table.
-	Adjust dependencies.
-	(output_gram): Use it.
-	(output_rule_data): Nicer output layout for YYTNAME.
-
-2000-10-16  Akim Demaille  <akim@epita.fr>
-
-	* src/lex.c (read_typename): New function.
-	(lex): Use it.
-	* src/reader.c (copy_dollar): Likewise.
-
-2000-10-16  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_comment2): Expect the input stream to be on
-	the `/' which is suspected to open a comment, instead of being
-	called after `//' or `/*' was read.
-	(copy_comment, copy_definition, parse_union_decl, copy_action)
-	(copy_guard): Adjust.
-
-2000-10-16  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (parse_expect_decl): Use `skip_white_space' and
-	`read_signed_integer'.
-
-2000-10-16  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_dollar): New function.
-	(copy_guard, copy_action): Use it.
-
-2000-10-16  Akim Demaille  <akim@epita.fr>
-
-	* lib/quote.h, lib/quote.c, lib/quotearg.h, lib/quotearg.c:
-	* m4/prereq.m4, m4/c-bs-a.m4, m4/mbstate.m4:
-	New files, from Fileutils 4.0.27.
-	* src/main.c (printable_version): Remove.
-	* src/lex.c, src/reader.c: Use `quote'.
-
-2000-10-04  Akim Demaille  <akim@epita.fr>
-
-	* lib/error.c, lib/error.h: New files, needed by xmalloc.c.
-
-2000-10-04  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Various typos spotted by Neil Booth.
-
-2000-10-04  Akim Demaille  <akim@epita.fr>
-
-	When a literal string is used to define two different tokens,
-	`bison -v' segfaults.
-	Reported by Piotr Gackiewicz, and fixed by Neil Booth.
-
-	* tests/regression.m4: New file.
-	Include the core of the sample provided by Piotr Gackiewicz.
-	* src/reader.c (parse_token_decl): Diagnose bad cases, and proceed
-	properly.
-
-2000-10-04  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (parse_expect_decl): Keep `count' within the size
-	of `buffer'.
-	From Neil Booth.
-
-2000-10-02  Paul Eggert  <eggert@twinsun.com>
-
-	* bison.s1 (yyparse): Assign the default value
-	unconditionally, to avoid a GCC warning and make the parser a
-	tad smaller.
-
-2000-10-02  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.c (getargs): Don't dump `--help' on unrecognized
-	options.
-
-2000-10-02  Akim Demaille  <akim@epita.fr>
-
-	* src/derives.c, src/print.c, src/reduce.c: To ease the
-	translation, move some `\n' out of the translated strings.
-
-2000-10-02  Akim Demaille  <akim@epita.fr>
-
-	The location tracking mechanism is precious for parse error
-	messages.  Nevertheless, it is enabled only when `@n' is used in
-	the grammar, which is a different issue (you can use it in error
-	message, but not in the grammar per se).  Therefore, there should
-	be another means to enable it.
-
-	* src/getargs.c (getargs): Support `--locations'.
-	(usage): Report it.
-	* src/getargs.h (locationsflag): Export it.
-	* src/lex.c (percent_table): Support `%locations'.
-	* src/reader.c (yylsp_needed): Remove this variable, now replaced
-	with `locationsflag'.
-	* doc/bison.texinfo: Document `--locations' and `%locations'.
-	Sort the options.
-	* tests/calc.m4: Test it.
-
-	For regularity of the names, replace each
-	(nolineflag, toknumflag, rawtokenumflag, noparserflag): with...
-	(no_lineflag, token_tableflag, rawflag, no_parserflag): this.
-	In addition replace each `flag' with `_flag'.
-
-2000-10-02  Akim Demaille  <akim@epita.fr>
-
-	Also test parse error messages, including with YYERROR_VERBOSE.
-
-	* tests/calc.m4 (calc.y): Add support for `exp = exp' (non
-	associative).
-	Use it to check the computations.
-	Use it to check `nonassoc' is honored.
-	(AT_DATA_CALC_Y): Equip `calc.y' with YYERROR_VERBOSE when passed
-	`--yyerror-verbose'.
-	(_AT_CHECK_CALC): Adjust to this option.
-	(_AT_CHECK_CALC_ERROR): New macro to check parse error messages.
-
-2000-10-02  Akim Demaille  <akim@epita.fr>
-
-	Test also `--verbose', `--defines' and `--name-prefix'.  Testing
-	the latter demonstrates a flaw in the handling of non debugging
-	parsers introduced by myself on 2000-03-16: `#define yydebug 0'
-	was used in order to simplify:
+	tests: adjust to GCC 4.8, which displays caret errors
+	With GCC 4.8, the tests on synclines are skipped.  Transform
 
-	#if YYDEBUG
-	if (yydebug)
-	{
-	...
-	}
-	#endif
+	  input.y:1:2: error: #error "1"
+	   #error "1"
+	    ^
 
 	into
 
-	if (yydebug)
-	{
-	...
-	}
+	  input.y:1: #error "1"
 
-	unfortunately this leads to a CPP conflict when
-	`--name-prefix=foo' is used since it produces `#define yydebug
-	foodebug'.
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Do it, using Perl instead of
+	sed.
 
-	* src/bison.s1 [!YYDEBUG]: Do not define yydebug.
-	(YYDPRINTF): New macro.
-	Spread its use.
-	* tests/calc.m4 (AT_CHECK_CALC): Do require a title, build it from
-	the bison options.
-	Also test `--verbose', `--defines' and `--name-prefix'.
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	be sure to properly escape type names
+	* src/scan-code.l: Use obstack_quote when passing type_name to m4.
+	* tests/input.at (Code injection): New.
+	* NEWS: Document it.
+	Thanks to Paul Eggert for the wording.
 
-	Improve the readability of the produced parsers.
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/bison.s1: Formatting changes.
-	Improve the comment related to the `$' mark.
-	(yydefault): Don't fall through to `yyresume': `goto' there.
-	* src/output.c (output_parser): When the `$' is met, skip the end
-	of its line.
-	New variable, `number_of_dollar_signs', to check there's exactly
-	one `$' in the parser skeleton.
+	obstack_quote: escape and quote for M4
+	* src/system.h (obstack_quote): New.
+	* src/muscle-tab.c: Use it instead of obstack_escape where applicable.
+	* src/scan-code.l: Since obstack_quote supports NULL, leave type_name
+	as NULL instead of defaulting to "".
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* lib/xstrdup.c: New file, from the fileutils.
-	* src/reader.c (parse_token_decl, get_type_name, parse_type_decl)
-	(parse_assoc_decl, parse_thong_decl, get_type): Use `xstrdup'
-	instead of strlen + xmalloc + strcpy.
-	* src/symtab.c (copys): Remove, use xstrdup instead.
+	muscles: shuffle responsabilities
+	* src/muscle-tab.c (muscle_boundary_grow): Be in charge of quotation,
+	instead of leaving this to the caller.
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/gram.h (associativity): New enum type which replaces the
-	former CPP macros `RIGHT_ASSOC', `LEFT_ASSOC' and `NON_ASSOC' with
-	`right_assoc', `left_assoc' and `non_assoc'.
+	muscles: make private functions static
+	* src/muscle-tab.h, src/muscle-tab.c (muscle_boundary_grow)
+	(muscle_location_grow): Now static.
+
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscles: rename private functions/macros
+	* src/muscle-tab.c (MUSCLE_COMMON_DECODE, muscle_string_decode)
+	(muscle_location_decode): Not related to muscles, rename as...
+	(COMMON_DECODE, string_decode, location_decode): these.
+
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	obstack_escape: escape M4 characters
+	* src/muscle-tab.h (MUSCLE_OBSTACK_SGROW): This is not related to
+	muscles, so move to, and rename as...
+	* src/system.h (obstack_escape): this.
+	Adjust dependencies.
+
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	remove dead macro
+	* src/system.h (DEFAULT_TMPDIR): Remove, unused.
+
+2012-07-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: style changes
+	* src/scan-code.l: Remove useless braces.
+	Formatting changes.
+	Prefer NULL to 0.
+	* src/muscle-tab.c, src/system.h: Formatting changes.
+
+2012-07-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: avoid problems with case insensitive file systems
+	makeinfo --html generates index.html, and the node "Index" will result
+	in Index.html.  On case insensitive file systems, such as on Mac OS X
+	by default, this results in a single, invalid, file (Texinfo 4.13).
+	See http://lists.gnu.org/archive/html/bug-texinfo/2012-07/msg00032.html
+
+	* doc/bison.texi (Index): Rename as...
+	(Index of Terms): this.
+
+2012-07-24  Stefano Lattarini  <stefano.lattarini@gmail.com>  (tiny change)
+
+	configure: fix botched quoting
+	* configure.ac: In the AC_SUBST call on 'VALGRIND_PREBISON'.  Without
+	this change, when running ./configure, I see:
+
+	    ...
+	    checking for valgrind... valgrind
+	    ./configure: line 35221: -q: command not found
+	    checking for Java compiler... gcj -C -fsource=1.3 -ftarget=1.4
+	    ...
+
+2012-07-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: fix typo.
+	* NEWS: here.
+	Reported by Ben Pfaff.
+
+2012-07-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update gnu-web-doc-update.
+	* gnulib: here.
+
+2012-07-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2012-07-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 2.6
+	* NEWS: Record release date.
+
+2012-07-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: prepare for release 2.6
+	* NEWS: here.
+
+2012-07-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2012-07-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 2.5.91
+	* NEWS: Record release date.
+
+2012-07-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: prepare NEWS.
+
+2012-07-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: fix spaces.
+	* build-aux/Makefile.am: here.
+
+2012-07-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: adjust to case where the C compiler is actually a C++ compiler
+	* tests/atlocal.in (CC_IS_CXX): New.
+	* tests/headers.at (Several parsers): Use it.
+
+2012-07-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix dependencies
+	* tests/Makefile.am: we need atconfig and atlocal to be up to date
+	when calling testsuite.
+
+2012-07-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix Texinfo command
+	* doc/bison.texi: In parens, use @pxref.
+
+2012-07-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: Valgrind on OS X.
+	* configure.ac (VALGRIND_PREBISON): New.
+	* tests/Makefile.am (maintainer-check-valgrind): Use it.
+	* etc/darwin11.4.0.supp: New.
+	* configure.ac, etc/Makefile.am: Use it.
+	* configure.ac: Disable Valgrind on Mac OS X.
+	* README-hacking: Explain why.
+
+2012-07-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: be sure that backups are safe.
+	* tests/local.at (at_save_special_files): here.
+
+2012-07-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: dead comment.
+	* etc/README: here.
+
+2012-07-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: refactor for legibility.
+	* tests/local.at (AT_BISON_CHECK_WARNINGS, AT_BISON_CHECK_WARNINGS_):
+	New.
+
+2012-07-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: refactor the bison invocations.
+	* tests/local.at (m4_null_if, AT_BISON_CHECK_): New.
+
+2012-07-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: fix syntax-check ignore patterns.
+	* cfg.mk: here.
+
+2012-07-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2012-07-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update.
+	* gnulib: Update so that gitlog-to-changelog support --srcdir.
+	* Makefile.am: Use it.
+
+2012-07-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+	* bootstrap, build-aux/.gitignore, gnulib, m4/.gitignore: update.
+
+2012-07-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update release instructions
+	* README-hacking: here.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 2.5.90
+	* NEWS: Record release date.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix gen-ChangeLog call.
+	* Makefile.am: Be sure to catch errors, and fix option name
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update.
+	* gnulib/build-aux/do-release-commit-and-tag: Fix.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix SKIP_IF for Java.
+	* tests/local.at (AT_JAVA_COMPILE): here.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.prefix: incompatible with %name-prefix.
+	* data/bison.m4: Make it incompatible.
+	* tests/input.at: Check that it is.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.prefix: strengthen the tests and fix push-parsers.
+	* tests/calc.at: Check api.prefix in addition to %name-prefix.
+	* tests/headers.at: Check push parsers and pure interface.
+	* tests/local.at: Use YYLTYPE renamed.
+	* data/yacc.c (b4_declare_yyparse_push_): Handle api.prefix.
+	* doc/bison.texi: Style changes.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: style changes.
+	* data/bison.m4: Define default values after having defined
+	the support macros.
+	Kill a dead comment.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	NEWS: minor changes.
+	* NEWS: style changes.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.prefix: improve the documentation for YYDEBUG.
+	* doc/bison.texi: Explain how api.prefix is applied to YYDEBUG.
+
+2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update.
+	* bootstrap, gnulib: Update.
+	* cfg.mk (syntax-check): Don't check "error" usage in bison.texi.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: headers.at: strengthen.
+	* tests/headers.at (Several headers): Be stricter when checking
+	the exported macros.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: do not override C++ definitions by C macros.
+	* data/glr.c: here.
+	* data/glr.cc: Fix overquotation.
+	* tests/headers.at: Comment changes.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	YYLLOC_DEFAULT: factor, and don't export it in headers.
+	* data/c++.m4, data/c.m4 (b4_yylloc_default_define): New.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c: Use it.
+	* data/glr.cc: Do not define YYLLOC_DEFAULT in the header file,
+	but in the implementation one.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.prefix: do not use #define to handle YYSTYPE_IS_TRIVIAL etc.
+	The following mixture is insane:
+
+	  #define YYSTYPE_IS_TRIVIAL PREFIX_STYPE_IS_TRIVIAL
+	  #if (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)
+
+	since, of course YYSTYPE_IS_TRIVIAL is defined.  Instead we could
+	define YYSTYPE_IS_TRIVIAL as PREFIX_STYPE_IS_TRIVIAL only when the
+	later is defined, but let's avoid stacking CPP on top of M4: rather, use
+
+	  #if (defined PREFIX_STYPE_IS_TRIVIAL && PREFIX_STYPE_IS_TRIVIAL)
+
+	* data/glr.c, data/yacc.c: Use YYSTYPE_IS_TRIVIAL, YYSTYPE_IS_DECLARED,
+	YYLTYPE_IS_TRIVIAL and YYLTYPE_IS_DECLARED under their api.prefix-renamed
+	name.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: portability fixes.
+	Reported by Hydra.
+
+	* tests/headers.at (Several headers): Be sure to include config.h
+	in the files to compile.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: fewer #includes in the headers.
+	* data/lalr1.cc: Define YY_NULL in the *.cc file, it is not needed
+	in the header.
+	* data/location.cc: iosfwd suffices.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: formatting changes.
+	* data/glr.cc: here.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: more logs.
+	* tests/headers.at (Several parsers): Here.
+
+2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.prefix: also rename YYDEBUG.
+	The testsuite in master has shown weird errors for the "Mulitple
+	Parsers" tests: the caller of p5.parse() received some apparently
+	random value, while tracing p5.parse() showed that the function was
+	consistently returning 0.
+
+	It happens when mixing several parser headers, some generated without
+	%debug, others with.  In particular the C++ parser was generated with
+	%debug, i.e., with:
+
+	  #ifndef YYDEBUG
+	  # define YYDEBUG 1
+	  #endif
+
+	and compiled separatedly.  Yet, its header was included after the one
+	of another parser, this time without %debug, i.e., with
+
+	  #ifndef YYDEBUG
+	  # define YYDEBUG 0
+	  #endif
+
+	in its header.  As a result, the parser was compiled with YYDEBUG set,
+	but its header was used without.  Since the layout of the objects are
+	then completely different, boom.
+
+	Therefore, do not change the value of YYDEBUG.  Rather, use it as a
+	default value for <API.PREFIX>DEBUG.
+
+	* data/c.m4 (b4_YYDEBUG_define): New.
+	(b4_declare_yydebug): Rename as...
+	(b4_yydebug_declare): this, for consistency.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c: Use it.
+	* NEWS: Document it.
+
+2012-07-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	NEWS: spell check.
+	* NEWS: here.
+
+2012-06-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.prefix.
+	* data/c.m4 (b4_api_prefix, b4_api_PREFIX): New.
+	(b4_prefix, b4_union_name, b4_token_enums, b4_declare_yylstype): Use them.
+	* data/glr.c, data/yacc.c, data/glr.cc, data/lalr1.cc: Use them to change
+	the prefix of exported preprocessor symbols.
+	* src/getargs.c (usage): Ditto.
+	* tests/headers.at (Several parsers): New.
+	* tests/local.at (AT_API_PREFIX): New.
+	AT_YYSTYPE, AT_YYLTYPE): Adjust.
+	* doc/bison.texi (Multiple Parsers): Move documentation of %name-prefix to...
+	(Table of Symbols): here.
+	(Multiple Parsers): Document api.prefix.
+	(%define Summary): Point to it.
+	Use @code for variable names.
+	(Bison Options): -p/--name-prefix are obsoleted.
+	* NEWS: Announce api.prefix.
+
+2012-06-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: use the generalized default yylex.
+	* tests/actions.at, tests/glr-regression.at, tests/regression.at: here.
+
+2012-06-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: AT_YYERROR_DEFINE: prepare for list of ints.
+	* tests/local.at (AT_YYERROR_DEFINE): Don't add quotes, check their
+	presence to detect char/int types.
+	* tests/actions.at, tests/conflicts.at, tests/glr-regression.at,
+	* tests/push.at, tests/regression.at: Adjust.
+
+2012-06-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: no longer define YYLSP_NEEDED.
+	* data/c.m4, data/glr.cc: here.
+	* NEWS, TODO: Adjust.
+
+2012-06-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: do not export YYTOKEN_TABLE and YYERROR_VERBOSE.
+	* src/output.c (prepare_symbols): Do not define b4_token_table.
+	(prepare): Define b4_token_table_flag.
+	* data/bison.m4 (b4_token_table_if): New.
+	Arm it when error-verbose.
+	* data/glr.c, data/yacc.c (YYTOKEN_TABLE): Remove.
+	Use m4.
+	* data/lalr1.cc: Likewise.
+	(YYERROR_VERBOSE): Remove.
+	* NEWS, doc/bison.texi: Document this.
+
+2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: use *.texi.
+	This is more consistent with the other packages, and Automake-NG
+	supports only *.texi.
+
+	* doc/bison.texinfo: Rename as...
+	* doc/bison.texi: this.
+	* doc/Makefile.am, examples/calc++/Makefile.am: Adjust.
+
+2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: do not output m4 set up.
+	* tests/local.at (AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS):
+	Use a diversion to avoid outputting comments etc.
+	Removes 17k lines from testsuite (10% of the number of lines).
+
+2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: use the generic yyerror function.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Factor.
+	Use AT_YYERROR_DEFINE.
+	Therefore, instead of using stdout, use and check stderr.
+	* tests/glr-regression.at (Uninitialized location when reporting ambiguity):
+	Use AT_YYERROR_DEFINE.
+
+2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: use assert instead of plain abort.
+	* tests/actions.at, tests/calc.at, tests/conflicts.at,
+	* tests/cxx-type.at, tests/glr-regression.at, tests/input.at,
+	* tests/named-refs.at, tests/regression.at, tests/torture.at,
+	* tests/local.at:
+	Prefer assert to abort.
+
+2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: improve the generic yylex implementation.
+	* tests/local.at (AT_YYSTYPE, AT_YYLTYPE): New.
+	(AT_YYLEX_FORMALS): Use them.
+	(AT_YYLEX_DEFINE): Be independent of the location implementation.
+
+2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: generalize the compilation macros.
+	* tests/local.at (AT_COMPILE, AT_COMPILE_CXX): If OUTPUT ends with ".o",
+	then append the "natural" extension for the input file (.c or .cc).
+	If there is no source, pass -c.
+	* tests/headers.at, tests/input.at, tests/regression.at: Adjust.
+
+2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix confusion between api.prefix and name-prefix.
+	* tests/local.at (AT_NAME_PREFIX): Take api.prefix into account.
+	(AT_API_PREFIX): Rename as...
+	(AT_API_prefix): this.
+	Do not take %name-prefix into account.
+	Fix misuses.
+
+2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: gitignores.
+
+2012-06-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	yacc: work around the ylwrap limitation.
+	* data/yacc.c (b4_shared_declarations): Include the header guards.
+	Do not include the header in the *.c file, duplicate it.
+	* NEWS (Future Changes): Extend, and announce the forthcoming change
+	about the use of the parser header.
+
+2012-06-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: more uniformity.
+	* tests/local.at (AT_LEX_FORMALS, AT_LEX_ARGS, AT_LEX_PRE_FORMALS)
+	(AT_LEX_PRE_ARGS): Rename as...
+	(AT_YYLEX_FORMALS, AT_YYLEX_ARGS, AT_YYLEX_PRE_FORMALS)
+	(AT_YYLEX_PRE_ARGS): these, for consistency.
+	(AT_API_PREFIX): Take %name-prefix into account.
+	(AT_YYLEX_PROTOTYPE): New.
+	Use it.
+	* tests/actions.at, tests/calc.at, tests/cxx-type.at: Adjust to
+	use them.
+
+2012-06-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: handle locations in a more generic way.
+	* tests/local.at (AT_YYERROR_PROTOTYPE): New.
+	Use it.
+	* tests/cxx-type.at: Extensive revamp to use a more traditional
+	quotation scheme, and to use the generic yyerror implementation.
+	Prefer Autotest macros to CPP macros.
+	* tests/java.at: .
+
+2012-06-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: handle locations in the generic yyerror functions.
+	* tests/local.at (AT_YYERROR_DECLARE_EXTERN, AT_YYERROR_DECLARE)
+	(AT_YYERROR_DEFINE): Handle locations for C and C++.
+	* tests/calc.at: Use it for C++ (as C has extra arguments which
+	are not yet handled by AT_BISON_OPTION_PUSHDEFS).
+	* tests/actions.at: Adjust.
+
+2012-06-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix AT_CHECK_CALC.
+	* tests/calc.at (AT_CHECK_CALC): Contrary to its documentation,
+	the test was skipped if given a second argument.
+	Unused feature, remove it.
+
+2012-06-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: improve infrastructure
+	* tests/local.at (AT_LANG): Use c++ instead of cxx for C++.
+	Adjust dependencies.
+	(AT_YYERROR_DECLARE_EXTERN, AT_YYERROR_DECLARE): Issue nothing
+	for C++/Java.
+	(AT_YYERROR_DEFINE): Use m4_case.
+	(AT_JAVA_COMPILE): Use AT_SKIP_IF.
+
+2012-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: factor.
+	* tests/glr-regression.at, tests/output.at, tests/push.at,
+	* tests/regression.at, tests/torture.at, tests/actions.at:
+	Use AT_YYLEX_* and AT_YYERROR_*.
+
+2012-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: minor style changes
+	* data/glr.c, data/yacc.c: here.
+
+2012-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: AT_LANG.
+	* tests/local.at (AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS):
+	Define/undefine AT_LANGE
+	(AT_LANG_COMPILE): New.
+	(AT_FULL_COMPILE): Use AT_LANG.
+
+2012-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	c skeletons: factor the declaration of yylloc and yylval.
+	There is one difference: now, even without --defines, we generate
+	extern declarations for these variables.  The factoring is worth it.
+	* data/c.m4 (b4_declare_yylstype): Declare them.
+	* data/glr.c, data/yacc.c: Adjust.
+
+2012-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: condemn YYPARSE_PARAM and YYLEX_PARAM.
+	* NEWS: here.
+	(Bison 1.875): Add %parse-param and %lex-param.
+	* doc/bison.texinfo: Spello.
+
+2012-06-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: regen.
+	* Makefile.am (regen): New target.
+
+2012-06-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: formatting changes.
+	* NEWS: Fix indentation of code snippets.
+	Untabify.
+
+2012-06-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: support api.prefix.
+	* tests/local.at (AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS):
+	Define AT_API_PREFIX.
+	(AT_YYERROR_DEFINE, AT_YYERROR_DECLARE_EXTERN, AT_YYLEX_DECLARE_EXTERN)
+	(AT_YYLEX_DEFINE): Use it.
+	* tests/input.at, tests/regression.at, tests/torture.at: Add
+	AT_BISON_OPTION_PUSHDEFS/POPDEFS.
+
+2012-06-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: pacify font-lock-mode.
+	* tests/local.at: here.
+
+2012-06-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: remove test covered elsewhere.
+	* tests/headers.at (%union and --defines): Remove, pretty useless and
+	insignificant.
+
+2012-06-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: factor the declaration/definition of yyerror and yylex.
+	* tests/local.at (AT_YYERROR_DECLARE, AT_YYERROR_DECLARE_EXTERN)
+	(AT_YYERROR_DEFINE, AT_YYLEX_DECLARE, AT_YYLEX_DECLARE_EXTERN)
+	(AT_YYLEX_DEFINE): New.
+	Must be used inside AT_BISON_OPTION_PUSHDEFS/POPDEFS pair.
+	* tests/actions.at, tests/conflicts.at, tests/glr-regression.at,
+	* tests/headers.at, tests/input.at, tests/named-refs.at,
+	* tests/regression.at, tests/skeletons.at, tests/synclines.at,
+	* tests/torture.at: Use them.
+
+2012-06-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen.
+
+2012-06-17  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: portability issues.
+	* tests/calc.at (AT_CALC_MAIN): Missing include reported by Hydra.
+
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: call the parser from another compilation unit.
+	In order to improve the testing of %defines, which exports the
+	interface of the generated parser, change the calc.at tests so that
+	when %defines is passed, main will be in another compilation unit.  It
+	loads the generated header.
+
+	* tests/calc.at (AT_CALC_MAIN): New.
+	Includes the definition of the global variables.
+	Therefore, now declare them from the %requires section of the parser.
+	Adjust to yydebug and yyparse being renamed by %name-prefix.
+
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.c, yacc.c: declare yydebug in the header.
+	* data/c.m4 (b4_declare_yydebug): New.
+	* data/glr.c, data/yacc.c (b4_shared_declarations): Use it.
+	Remove the corresponding code from the parser body.
+	* NEWS: Doc this.
+
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: use header guards.
+	* data/glr.c, data/glr.cc, data/yacc.c: here.
+	* NEWS: Document it.
+
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: improve AT_FULL_COMPILE.
+	* tests/local.at: Accept a third argument.
+	Simplify quotation pattern.
+	Calls for better refactoring, but will suffice for a while.
+
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: reorder.
+	* tests/calc.at (power): Move its definition, as a preparation for
+	forthcoming changes.
+	And space changes.
+
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: strengthen the test on generated headers inclusion
+	* tests/headers.at (AT_TEST_CPP_GUARD_H): Accept Bison directives.
+	(Invalid CPP headers): Check glr.
+
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	yacc.c: instead of duplicating y.tab.h inside y.tac.c, include it.
+	This is already what glr.c and lalr1.cc do.
+
+	* data/yacc.c: here.
+
+2012-06-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	yacc.c: factor.
+	yacc.c used to include two almost identical sections: one for the *.h
+	file, and another for the *.c file.  The main difference is that in
+	the *.c file we used the yy* names (as %name-prefix is handled by
+	"#define yy* <prefix>*" before), while the *.hh used <prefix>* names.
+	Keep only the later.  If this is troublesome, b4_shared_declarations
+	can easily take the desired prefix as argument.
+
+	* data/yacc.c (b4_shared_declarations): New.
+	Use it to factor duplicated declarations.
+
+2012-06-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: factor yacc.c and glr.c.
+	yacc.c and glr.c share common declarations.  Their YYLTYPE are exactly
+	equal, and their YYSTYPE are sufficiently alike to be fused (its
+	declaration was protected by YYSTYPE_IS_DECLARED in yacc.c, but not in
+	glr.c).  Besides, yacc.c duplicated the definitions of YYLTYPE and
+	YYSTYPE (*.h/*.c).
+
+	* data/c.m4 (b4_declare_yylstype): New.
+	* data/yacc.c, data/glr.c: Use it.
+
+2012-06-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.c: minor refactoring.
+	* data/glr.c (b4_shared_declarations): Move from the generated file
+	section, to the M4 prologue.
+
+2012-06-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: remove all the -On flags.
+	* tests/atlocal.in: Here.
+	Reported by Gilles Espinasse.
+
+2012-06-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: fix spello.
+	* README-hacking: Here.
+	* THANKS: Reported by Gilles Espinasse.
+
+2012-06-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: improve release procedure instructions.
+	* gnulib: Update, in particular (README-release).
+	* bootstrap.conf: don't require gendocs, provided by gnu-web-doc-update,
+	provided by readme-release.
+	* README-hacking: Update accordingly.
+
+2012-06-07  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update readme-release.
+	* gnulib (readme-release): Now includes the modules it promotes.
+	* bootstrap.conf: Simplify accordingly.
+
+2012-06-07  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: cfg.mk: manual title.
+	* cfg.mk (manuel_title): New.
+
+2012-06-07  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: cfg.mk: simplify
+	* cfg.mk: Remove bits provided by maint.mk.
+
+2012-06-07  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 2.5.1
+	* NEWS: Record release date.
+
+2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	NEWS: prepare for 2.5.1.
+	* NEWS: Be compliant with do-release-commit-and-tag.
+
+2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update release procedure
+	* bootstrap.conf: Request do-release-commit-and-tag and readme-release.
+	* README-hacking: Adjust.
+
+2012-06-05  Jim Meyering  <meyering@redhat.com>
+
+	maint: fix comment typos
+	Using http://github.com/lyda/misspell-check, massage its
+	output into sed commands to perform the suggested changes.
+	Initially, I filtered out the THRU->Through changes, because
+	that failed to retain capitalization in the grammar token.
+	Instead, do this manually, beforehand:
+
+	sed -i s/THRU/THROUGH/ tests/existing.at
+	git ls-files|misspellings -f -|perl -nl \
+	  -e '/^(.*?)\[(\d+)\]: (\w+) -> "(.*?)"$/ or next;' \
+	  -e '($file,$n,$l,$r)=($1,$2,$3,$4); $q="'\''"; $r=~s/$q/$q\\$q$q/g;'\
+	  -e 'print "sed -i $q${n}s!$l!$r!$q $file"'|bash
+
+2012-05-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2012-05-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	Bison 2.5.1_rc2.
+	* NEWS: Update.
+
+2012-05-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fixes.
+	* doc/bison.texinfo: Fix errors spotted by syntax-check.
+
+2012-05-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix ChangeLog generation.
+	* gnulib: Update to get newest gitlog-to-changelog.
+	* bootstrap: Update.
+	* Makefile.am (gen-ChangeLog): Fix for Bison's git log style.
+
+2012-05-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: compute the header guards.
+	This is a frequent request.  Recently pointed out by Wei Song,
+	<http://lists.gnu.org/archive/html/help-bison/2012-05/msg00002.html>.
+
+	* data/c.m4 (b4_tocpp, b4_cpp_guard, b4_cpp_guard_open)
+	(b4_cpp_guard_close): New.
+	* data/lalr1.cc, data/location.cc, data/stack.hh: Use them.
+	* TODO (Header Guards): Move to...
+	* NEWS: here.
+	Formatting changes.
+
+2012-05-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: remove support for unused directive.
+	* src/scan-skel.l (@dir_prefix@): Remove support, has never been
+	used, not even in the commit that introduced it,
+	2b81e969ea04c1a6502928ba7e847ec8ff7dcb2f.
+
+2012-05-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: improve Doxygen documentation.
+	* data/location.cc: Qualify file names with directory name.
+
+2012-05-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: extract stack.hh.
+	See commit 51bacae6b58fd5c6cce861f00440dc917384625e.
+	* data/stack.hh: New, extracted from...
+	* data/lalr1.cc: here.
+	* data/Makefile.am: Adjust.
+
+2012-05-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: convert to double quotes.
+	* NEWS: Convert from `quoted' to "quoted".
+	Reported by Stefano Lattarini.
+	http://lists.gnu.org/archive/html/bison-patches/2012-05/msg00039.html
+
+2012-05-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	space changes.
+	* src/flex-scanner.h: Indent nested cpp directives.
+
+2012-05-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: do not prototype flex-generated functions.
+	Some versions of Flex, possibly modified by the distribution package
+	maintainers, have incompatible signatures.  Since newer versions of
+	Flex prototype their functions, avoid the conflicts in that case.
+	Reported by Stefano Lattarini.
+	<http://lists.gnu.org/archive/html/bug-bison/2012-05/msg00012.html>.
+
+	* src/flex-scanner.h (FLEX_VERSION_GT): New.
+	Use it to issue prototypes for flex-generated functions only for
+	versions up to 2.5.31, in accordance with the comment.
+	See commit dc9701e848f27ae64b6ddcf809580998667d60f2.
+	Use it to define yylex_destroy when needed.
+
+2012-05-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix ChangeLog generation.
+	* Makefile.am (gen-ChangeLog): Fix for VPATH builds.
+
+2012-05-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	Bison 2.5.1_rc1.
+	* NEWS: Update.
+	* src/parse-gram.c, src/parse-gram.h: Regen.
+
+2012-05-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: save/restore Autotest special files when checking XML support.
+	Currently the test 248, "parse-gram.y: LALR = IELR", fails
+	BISON_TEST_XML is set.
+
+	* tests/local.at (AT_BISON_CHECK_XML): Belt: Save/restore files.
+	* tests/regression.at (parse-gram.y: LALR = IELR): Suspenders: Don't
+	rely on expout.
+	Each one of these changes suffices.
+
+2012-05-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: AT_SAVE_SPECIAL_FILES / AT_RESTORE_SPECIAL_FILES.
+	Some of our macros play with expout and other Autotest special files,
+	which may break their callers (e.g., currently TESTSUITEFLAGS='248
+	BISON_TEST_XML=1' fails).
+
+	There is already some support for this.  Expand it to be ready to use
+	it elsewhere.
+
+	* tests/local.at (AT_RESTORE_SPECIAL_FILES, AT_SAVE_SPECIAL_FILES)
+	(at_save_special_files, at_restore_special_files): New.
+	(AT_BISON_CHECK_NO_XML): Use them.
+
+2012-05-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: honor TESTSUITEFLAGS in all the check targets.
+	* tests/Makefile.am (installcheck-local): Simplify.
+	(maintainer-check-posix, maintainer-check-valgrind): Honor
+	$(TESTSUITEFLAGS).
+
+2012-05-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: do not enable c++ warnings on 0 when nullptr is not supported.
+	* configure.ac (WARN_CXXFLAGS): Enable -Wzero-as-null-pointer-constant
+	only when nullptr is supported..
+
+2012-05-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update gnulib.
+	* bootstrap, gnulib: Update.
+
+2012-05-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: config.in.h.
+	Historically we used config.hin (where everybody else used
+	config.h.in) to please DOS.  Now that we use gnulib, there are already
+	tons of files with several dots, especially *.in.h.
+
+	* configure.ac: Rename config.hin as config.in.h.
+
+2012-05-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: move silent rules.
+	* tests/Makefile.am: In the generation of the test suite.
+
+2012-05-09  Akim Demaille  <demaille@gostai.com>
+
+	glr.c: reduce variable scopes.
+	* data/glr.c: Where appropriate, fuse variable declarations followed
+	by assignments by variable declarations with a value.
+	Where appropriate, introduce new scopes to limit variable spans.
+
+2012-05-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: maintainer-release-check.
+	* tests/Makefile.am (maintainer-release-check): New.
+	* Makefile.am (MAINTAINER_CHECKS): New.
+	Support maintainer-release-check.
+	* README-hacking: Document it, and syntax-check too.
+
+2012-05-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: shush a syntax-check.
+	* cfg.mk: lib/timevar is not planned to be gnulib'ed, as it comes
+	from GCC.
+
+2012-05-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: prefer "commit message" to "log entry".
+	* README-hacking: here.
+	Suggested by Stefano Lattarini.
+
+2012-05-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	command line: fix minor leaks.
+	* src/getargs.c (getargs): Free pointers before allocating them new
+	content.
+
+2012-05-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: we no longer maintain the ChangeLog.
+	* .gitattributes: No need to merge it.
+	* README-hacking: Update release instructions.
+
+2012-05-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: fix the generation of the synclines for bison's parser.
+	* tests/bison.in: Import from master the changes that make
+	this script generate synclines that are independant of the
+	builddir/srcdir user's set up.
+
+2012-05-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: regen.
+	* src/parse-gram.c, src/parse-gram.h: Regen.
+
+2012-05-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: import the xmemdup0 gnulib module.
+	* bootstrap.conf: Require this module.
+	* src/parse-gram.y: Include xmemdup0.h.
+
+2012-05-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: remove left-over gnulib modules.
+	* bootstrap.conf (gnulib_modules): Remove pipe-posix.
+	* lib/.gitignore, m4/.gitignore: Remove files that we no longer use.
+
+2012-05-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: ignore files imported by autopoint.
+	* m4/.gitignore: here.
+
+2012-05-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: AC_PROG_LEX: use more readable variable names.
+	* m4/flex.m4 (AC_PROG_LEX): Prefer LEX_IS_FLEX to FLEX.
+	Prefer true/false to yes/no for such variables.
+	* configure.ac: Adjust.
+
+2012-05-06  Jim Meyering  <meyering@redhat.com>
+
+	maint: regen src/parse-gram.[ch]
+
+2012-05-06  Jim Meyering  <meyering@redhat.com>
+	    Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: simplify parse-gram.y
+	* src/parse-gram.y (add_param): Use xmemdup0 in place of
+	xmalloc+memcpy, and strspn in place of an open-coded loop.
+
+2012-05-06  Jim Meyering  <meyering@redhat.com>
+
+	maint: s/strncpy/memcpy/, when equivalent
+	* src/output.c (output_skeleton): Use memcpy, not strncpy,
+	since the source is known to fit in the destination buffer.
+	* src/parse-gram.y (%skeleton): Likewise.
+
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.c: untabify.
+	* data/glr.c: here.
+
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: untabify.
+	* data/glr.cc: here.
+
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: formatting changes.
+	* data/glr.cc: Fit in 80 columns.
+
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: remove unused signature.
+	* data/glr.cc (yydestruct_): Not used, remove.
+	It is yydestruct which is used.
+
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: properly declare locations are const where appropriate.
+	* data/glr.cc (yyerror): The location is const.
+
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix @xref.
+	* doc/bison.texinfo: here.
+
+2012-05-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: ignore code coverage/profiling failure messages
+	The Hydra buildfarm provides code coverage analysis.  For some reason,
+	in some test cases, code coverage data seem to be incompatible, and
+	generate error messages at parser run-time.  Ignore these messages so
+	that (i) these tests do pass, (ii) coverage results be provided by
+	Hydra.
+
+	* tests/local.at (AT_PARSER_CHECK): Ignore messages for failed merges
+	of code coverage/profiling results.
+
+2012-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix some invalid @ref.
+	* doc/bison.texinfo: Fix incorrect @ref uses.
+
+2012-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix previous commit.
+	* bootstrap: Update from gnulib.
+
+2012-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	install-pdf: fix.
+	* gnulib: Fix install-pdf in po/ and runtime-po/.
+	Reported by Hans Aberg.
+	Fixed by Joel E. Denny.
+	http://lists.gnu.org/archive/html/bug-bison/2011-05/msg00008.html
+
+2012-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	NEWS: Update.
+	* NEWS: Spell check.
+	(%printer): is now documented.
+
+2012-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	%printer: support both yyo and yyoutput.
+	lalr1.cc used to support yyo, but not yyoutput.  Support both,
+	but document only yyoutput (at least until there is some consensus
+	on this).
+
+	* data/c.m4 (yy_symbol_value_print): Also support yyo.
+	* data/glr.cc  (yy_symbol_value_print_): Support both yyo and yyoutput.
+	* data/lalr1.cc: Also support yyoutput.
+	* doc/bison.texinfo: Explicitly use yyoutput in the examples.
+	* examples/mfcalc/mfcalc.test: Test the -p option.
+
+2012-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: mfcalc: demonstrate %printer.
+	* doc/bison.texinfo (Printer Decl): New.
+	Number mfcalc.y snippets so that they are output in
+	the proper order.
+	(The mfcalc Main): Use yydebug.
+	(Debugging): Simplify the text.
+	(Enabling Traces, Mfcalc Traces, The YYPRINT Macro): New.
+	(Table of Symbols): Document YYPRINT and YYFPRINTF.
+
+2012-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: style changes.
+	* tests/input.at: Use "print" in %printer instead of "destroy".
+	It is unused, so we don't care, yet it is less surprising.
+	* tests/actions.at: Comment changes.
+
+2012-04-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: require Flex.
+	* configure.ac: Require Flex.
+
+2012-04-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: flex.m4: check for Flex.
+	* m4/flex.m4 (_AC_PROG_LEX_YYTEXT_DECL): Check that $LEX
+	supports some of the Flex options, and exclusive start conditions.
+	Define FLEX to 'yes'/'', as AC_PROG_CC does for GCC.
+
+2012-04-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: flex.m4: quote properly.
+	* m4/flex.m4: Use quotes more systematically.
+
+2012-04-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: flex.m4.
+	* m4/flex.m4: New.
+	An exact copy of what is in Autoconf currently.
+
+2012-04-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: autoconf: update.
+	* submodules/autoconf: Update.
+	There are no changes in data/m4sugar/foreach.m4, and the
+	changes in data/m4sugar/m4sugar.m4 are minor.
+
+2012-04-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: eliminate last bits of unwanted locations.
+	* data/glr.c (YYLTYPE): Do not define when locations are
+	not demanded.
 	Adjust all dependencies.
-	* src/reader.c: Formatting changes.
-	(LTYPESTR): Don't define it, use it as a literal in
-	`reader_output_yylsp'.
-	* src/symtab.h (symbol_class): New enum type which replaces the
-	former CPP macros `SUNKNOWN', `STOKEN and `SNTERM' with
-	`sunknown', `stoken and `snterm'.
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+2012-04-10  Akim Demaille  <akim@lrde.epita.fr>
 
-	* src/getargs.c (fixed_outfiles): Rename as...
-	(yaccflag): for consistency and accuracy.
-	Adjust dependencies.
+	NEWS: 2.6 will drop K&R.
+	* NEWS: here.
+	(glr.c): Fix a spello.
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+2012-04-09  Akim Demaille  <akim@lrde.epita.fr>
 
-	Use the more standard files `xalloc.h' and `xmalloc.c' instead of
-	Bison's `allocate.c' and `alloc.h'.  This patch was surprisingly
-	difficult and introduced a lot of core dump.  It turns out that
-	Bison used an implementation of `xmalloc' based on `calloc', and
-	at various places it does depend upon the initialization to 0.  I
-	have not tried to isolate the pertinent places, and all the former
-	calls to Bison's `xmalloc' are now using `XCALLOC'.  Someday,
-	someone should address this issue.
+	TODO: remove dead items.
+	* TODO (Documentation, %printer, Java): Remove, already done (or just
+	waiting for approval).
+	(Fortran, BTYacc): Remove, there does not seem to be demand.
 
-	* src/allocate.c, src/alloc.h, m4/bison-decl.m4: Remove.
-	* lib/xmalloc.c, lib/xalloc.h, m4/malloc.m4, m4/realloc.m4: New
+2012-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	TODO: import from master.
+	* TODO: Copy the current version.
+
+2012-04-07  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update.
+	* bootstrap.conf (bootstrap_sync): True again.
+	It was disabled while waiting for changes to be integrated
+	in gnulib's bootstrap, which was done long ago.
+	* bootstrap, gnulib: Update.
+
+2012-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update NEWS.
+	* NEWS: Fix entry about __attribute__.
+	Reorder by "decreasing" order of importance.
+
+2012-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix index.
+	http://lists.gnu.org/archive/html/bison-patches/2012-04/msg00006.html
+
+	* doc/bison.texinfo: Avoid using @def* variant with more
+	than the defined entity as main entity, as it results in
+	an incorrect index.  For instance, don't document
+	{return YYERROR;}, which results in a single index entry
+	"return YYERROR;", but rather as typed function whose
+	return type is "type", and whose argument list is ";".
+
+2012-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix documentation of YYERROR.
+	* doc/bison.texinfo (Table of Symbols): Fix the documentation
+	of YYERROR by copying that from "Action Features".
+
+2012-04-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: more YY_NULL
+	Caught by maintainer-check-g++.
+	* data/glr.c, data/lalr1.cc, data/yacc.c, tests/cxx-type.at,
+	* tests/glr-regression.at, tests/push.at:
+	When simple to do, avoid expliciting the null ptr.
+	Otherwise use YY_NULL.
+
+2012-04-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	bump to 2012 in skeletons.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java,
+	* data/location.cc, data/yacc.c: Bump copyright year ranges.
+
+2012-04-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: remove ancient Autoconf tests.
+	lib/subpipe.c was removed in 47fa574761319b0a422691223c9b8a9a72f36aa2.
+
+	* m4/subpipe.m4: Remove.
+	* configure.ac (BISON_PREREQ_SUBPIPE): Remove.
+
+2012-03-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: c++: complete the location documentation.
+	* data/location.cc (position::initialize, location::initialize):
+	Also accept line and column, with default values.
+	* doc/bison.texinfo (C++ position, C++ location): New nodes.
+	Describe more thoroughly these classes.
+	Fix several Texinfo misuses.
+
+2012-03-31  Akim Demaille  <demaille@gostai.com>
+
+	c++: locations: provide convenience constructors.
+	* data/location.cc (position::position): Accept file, line and
+	column as arguments with default values.
+	Always qualify initial line and column literals as unsigned.
+	(location::location): Provide convenience constructors.
+
+2012-03-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: locations: remove useless "inline".
+	* data/location.cc: "inline" is implicit when defining
+	methods in the class definition.
+
+2012-03-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: do not use locations when they are not requested
+	When the test suite runs with -O2 and warnings enabled, G++
+	complains of locations being used, but not initialized.
+	The simplest is to not use locations.
+
+	* data/glr.c (b4_locuser_formals, b4_locuser_args): New.
+	Use them when locations should not be used.
+	Use b4_locations_if where appropriate.
+	(yyuserAction): Modify the order to the arguments to make
+	it more alike the other routines, and to make use of
+	b4_locuser_args simpler.
+
+2012-03-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: use nullptr for C++11.
+	C++11 introduces "nullptr" which plays the role of C's NULL, in
+	replacement of "0".  Fix the C++ skeletons to avoid warnings about
+	uses of "0" in place of "nullptr", and improve C skeletons to also use
+	this "nullptr" when compiled with a C++11 compiler.
+
+	* configure.ac: More C++ warnings.
+	* NEWS (2.5.1): Document this.
+	* data/c++.m4, data/c.m4 (b4_null_define): New.
+	(b4_null): Use YY_NULL instead of 0.
+	* data/glr.c, data/lalr1.cc, data/location.cc, data/yacc.c:
+	Call b4_null_define/b4_null where appropriate.
+	Use YY_NULL instead of NULL.
+	* data/location.cc (initialize): Accept a default argument,
+	YY_NULL.
+	* tests/actions.at, tests/calc.at: Adjust.
+
+	* data/glr.c, lib/libiberty.h, src/system.h (__attribute__):
+	Do not disable it when __STRICT_ANSI__ is defined, as, for
+	instance, it disables the __attribute__((unused)) which
+	protects us from some compiler warnings.
+	This was already done elsewhere in Bison, in 2001, see
+	4a0d89369599a2cea01f4fbdf791f426a02cb5a3.
+	* tests/regression.at: Adjust output.
+
+2012-03-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: simplify and improve the compiler warnings for tests.
+	* configure.ac (warn_common, warn_c, warn_cxx): New.
+	Use them to compute independently the options supported
+	by the C and C++ compilers.
+	Don't AC_SUBST the variables passed to gl_WARN_ADD: it
+	does it for us.
+	(WARN_CFLAGS_TEST, WARN_CXXFLAGS_TEST): Don't aggregate
+	$WARN_CFLAGS and $WARN_CXXFLAGS in them now, leave it
+	to atlocal.in.
+	(O0CFLAGS, O0CXXFLAGS): Move their definition to...
+	* tests/atlocal.in: here.
+	Be more systematic between C and C++.
+	Reorder to factor between variables.
+	Propagate all of the variables when --compile-c-with-cxx.
+
+2012-03-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update.
+
+2012-03-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: formatting changes.
+	* src/system.h: Indent CPP directives using cppi.
+
+2012-03-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	NEWS: update.
+	* NEWS: Java fixes, more about the doc changes, liby issues.
+
+2012-03-27  Tim Landscheidt  <tim@tim-landscheidt.de>
+
+	Java: Fix syntax error handling without error token.
+	* data/lalr1.java (YYParser::parse): Here.
+	* tests/java.at: Add test case.
+
+2012-03-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: beware of -pedantic on large #line numbers.
+	* tests/local.at (AT_TEST_TABLES_AND_PARSE): Don't pass -pedantic
+	when compiling large canonical-LR parsers.
+	Reported by Tys Lefering.
+	http://lists.gnu.org/archive/html/bug-bison/2012-03/msg00025.html
+
+2012-03-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: when using the C++ compiler, use its flags too.
+	* tests/local.at: Go for colors.
+	(--compile-c-with-cxx): New option.
+	We used to pass "CC=$CXX" as command line argument,
+	but it was not possible to adjust CFLAGS accordingly
+	in atlocal, since it is loaded before assignments on
+	the command line are honored (so that the command line
+	takes precedence).
+	* tests/atlocal.in: Implement it.
+	* tests/local.mk: Use it.
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: update the --verbose report format.
+	* doc/bison.texinfo (Understanding): Adjust to match the
+	current format.
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: spell check.
+	* doc/bison.texinfo: here.
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: stmt, not stmnt.
+	* doc/bison.texinfo: s/stmnt/stmt/g.  This is a
+	much more common abbreviation for "statement".
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: save width.
+	* doc/bison.texinfo (Language and Grammar): Use the same
+	layout for an example in all the versions, i.e., keep
+	as general case what used to be used only for Info.
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: reformat grammar snippets.
+	* doc/bison.texinfo: Convert the grammar examples to
+	use a narrower style.  This helps fitting into the
+	@smallbook constraints.
+	http://lists.gnu.org/archive/html/bison-patches/2012-03/msg00011.html
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: use only @example, not @smallexample.
+	* doc/bison.texinfo: Convert all @smallexamples into @examples.
+	Adjust layout where needed.
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: style changes.
+	* doc/bison.texinfo: Avoid line width issues with TeX.
+	Upgrade ancient messages.
+	Move some comments to better looking places.
+	Add more @group.
+	(Mfcalc Symbol Table): Reduce variable scopes.
+	Prefer size_t for sizes.
+	Prefer declarations with an initial value.
+	Fix a @group environment.
+
+2012-03-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+	doc: minor fixes to "Understanding" section
+	* doc/bison.texinfo (Understanding): Minor wording fixes and
+	improvements.  Fixes problems reported in
+	<https://savannah.gnu.org/patch/?4306>.
+
+2012-03-13  Akim Demaille  <demaille@gostai.com>
+
+	tests: minor fixes/simplifications
+	* tests/local.at (AT_BISON_CHECK_NO_XML): Simplify sed programs,
+	quotation, and default value assignments.
+	Ensure a proper value to the numeric variables.
+	Reported by Lie Yan.
+	http://lists.gnu.org/archive/html/bug-bison/2012-03/msg00000.html
+
+2012-03-09  Akim Demaille  <demaille@gostai.com>
+
+	tests: be robust to quote style.
+	See <http://lists.gnu.org/archive/html/bug-bison/2012-01/msg00120.html>.
+
+	* src/main.c (main): Define the quoting style we use.
+	* tests/atlocal.in: Use ASCII style quotes during the tests.
+
+2012-03-09  Akim Demaille  <demaille@gostai.com>
+
+	maint: update gnulib.
+	* gnulib: update.
+	* src/scan-gram.l: Don't use the (former version of) STREQ.
+
+2012-03-06  Akim Demaille  <demaille@gostai.com>
+
+	tests: be robust to POSIXLY_CORRECT being defined.
+	* tests/local.at (AT_BISON_CHECK_NO_XML): Check if
+	POSIXLY_CORRECT is defined, not if it is defined to 1.
+	Reported by Lie Yan.
+	http://lists.gnu.org/archive/html/bug-bison/2012-03/msg00000.html
+
+2012-02-23  Akim Demaille  <demaille@gostai.com>
+
+	doc: fix environment issues.
+	* doc/bison.texinfo: Do not use @verbatim, in particular when
+	we use @group inside.
+	Use @quotation instead of @display for frequently asked questions,
+	it looks much nicer.
+
+2012-02-23  Akim Demaille  <demaille@gostai.com>
+
+	regen.
+	* src/parse-gram.h, src/parse-gram.c: regen.
+
+2012-02-23  Akim Demaille  <demaille@gostai.com>
+
+	tests: fix regressions.
+	Exit status 63 is documented for version-mismatch.
+	* bootstrap.conf (gnulib_modules): Remove sysexits.
+	* src/system.h (EX_MISMATCH): Define.
+	* src/parse-gram.y (version_check): Use it instead of EX_CONFIG.
+
+	Missing includes.
+	* tests/calc.at, tests/named-refs.at: Include assert.h.
+
+2012-02-21  Akim Demaille  <demaille@gostai.com>
+
+	glr: fix ambiguity reports.
+	* tests/glr-regression.at (Ambiguity reports): New.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	doc: stylistic improvements.
+	* doc/bison.texinfo: Prefer "continue" to empty loop bodies.
+	Add some @group/@end group to avoid poor page breaks.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: address sc_prohibit_doubled_word.
+	* data/yacc.c, doc/bison.texinfo: Reword to avoid having to
+	disable that check.
+	* cfg.mk: No longer skip this test.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: address sc_prohibit_always-defined_macros.
+	* cfg.mk: No longer skip it, except where EXIT_SUCCESS is used
+	as a witness for stdlib.h.
+	Skip this test when appropriate.
+	* data/yacc.c: Drop a note about why EXIT_SUCCESS is defined here.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: address sc_bindtextdomain, sc_program_name and sc_prohibit_HAVE_MBRTOWC.
+	* bootstrap.conf (gnulib_modules): Require progname.
+	* src/complain.c, src/getargs.c, src/getargs.h, src/main.c: Use it.
+	* cfg.mk (exclude): New.
+	Use it.
+	Skip lib/main.c for bindtextdomain and set_program_name.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: remove stray file.
+	* config.hin: Remove.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: address some syntax-issues remaining after cherry-picking from master.
+	* cfg.mk: Skip bison generated files, 2.5 is generating trailing
+	blanks.  This is already fixed in master.
+	* tests/conflicts.at, tests/java.at: Fix white space issues.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	regen.
+	* src/parse-gram.c, src/parse-gram.h: Regen.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	bitset: fix an incorrect error message.
+	* lib/bitset_stats.c: here.
+	Reported by Stefano Lattarini.
+
+2012-02-19  Jim Meyering  <meyering@redhat.com>
+
+	maint: reenable sc_m4_quote_check
+	* cfg.mk (local-checks-to-skip): Reenable sc_m4_quote_check.
+	* m4/dmalloc.m4: Add quotes.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: remove trailing empty lines.
+	* cfg.mk: No longer skip sc_prohibit_empty_lines_at_EOF, except
+	for parse-gram.h (generated).
+	* examples/mfcalc/.gitignore, lib/.gitignore, m4/.gitignore,
+	* po/.gitignore, runtime-po/.gitignore: Remove trailing/leading
+	empty lines.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: avoid "magic number exit".
+	* cfg.mk (local-checks-to-skip): No longer skip it.
+	* bootstrap.conf (gnulib_modules): Add sysexits.
+	* doc/bison.texinfo, etc/bench.pl.in, src/parse-gram.y,
+	* src/system.h, tests/calc.at, tests/named-refs.at: Use assert
+	where appropriate instead of "if (...) exit".
+	Use symbolic exit status elsewhere.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: fix some syntax-check issues.
+	* cfg.mk (local-checks-to-skip): Remove
+	sc_prohibit_quotearg_without_use, sc_prohibit_strcmp,
+	sc_unmarked_diagnostics, sc_useless_cpp_parens.
+	(sc_unmarked_diagnostics): Skip DJGPP.
+	* data/yacc.c, src/LR0.c, src/closure.c,
+	* src/flex-scanner.h, src/gram.c, src/lalr.c,
+	* src/print-xml.c, src/print.c, src/print_graph.c,
+	* src/reader.c, src/reduce.c, src/tables.c:
+	Don't use parens with cpp's defined.
+	Remove useless includes.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: address a couple of syntax-check errors.
+	* cfg.mk (local-checks-to-skip): Remove sc_error_message_period
+	and sc_error_message_uppercase.
+	Address the uncovered issues.
+	* po/POTFILES.in: Add missing files.
+	* src/symtab.c: Remove useless includes.
+	* lib/bitset_stats.c, src/files.c, tests/glr-regression.at: Use
+	conformant error messages.
+
+2012-02-19  Akim Demaille  <demaille@gostai.com>
+
+	maint: gnulib: upgrade.
+
+2012-02-15  Akim Demaille  <demaille@gostai.com>
+
+	maint: rely on Automake for parsers.
+	* Makefile.am (AM_YFLAGS): Automake looks for "-d" alone.
+	Move other options in here.
+	(BISON): New.
+	(YACC): Use it.
+	(bison_SOURCES): Now that automake can see `-d' in AM_YFLAGS,
+	we can rely on it to compile and ship the parser header
 	files.
-	Adjust dependencies.
-	* src/warshall.h: New file.
-	Propagate.
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	Based on commit 737406a32c201471699bfa0843d1f432f3ec29ab and
+	commit 3d6ca339083c278d907c9f030f4ba6bc5ecb07f2.
 
-	Various anti-`extern in *.c' changes.
+2012-02-14  Akim Demaille  <demaille@gostai.com>
 
-	* src/system.h: Include `assert.h'.
+	maint: more authors.
+	* AUTHORS: here.
+	Suggested by Tys Lefering.
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+2012-02-14  Akim Demaille  <demaille@gostai.com>
 
-	* src/state.h (nstates, final_state, first_state, first_shift)
-	(first_reduction): Move their exportation from here...
-	* src/LR0.h: to here.
-	Adjust dependencies.
-	* src/getargs.c (statisticsflag): New variable.
-	Add support for `--statistics'.
-	Adjust dependencies.
+	maint: add license headers.
+	* examples/calc++/test, examples/variant.yy, AUTHORS, THANKS,
+	* tests/atlocal.in, tests/bison.in: Add license headers.
+	Reported by Tys Lefering.
 
-	Remove a lot of now useless `extern' statements in most files.
+2012-02-14  Akim Demaille  <demaille@gostai.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	maint: remove obsolete file.
+	* etc/make-ChangeLogs: Remove (used for rcs to cvs migration!).
+	Reported by Tys Lefering.
 
-	* src/LR0.h: New file.
-	Propagate its use.
+2012-02-08  Akim Demaille  <demaille@gostai.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	use a more consistent quoting style.
+	See <http://lists.gnu.org/archive/html/bug-bison/2012-01/msg00120.html>.
+	Use quotearg as often as possible instead of leaving the choice of
+	the quotes to the translators.  Use shorter messages.  Factor similar
+	messages to a single format, to make localization easier.
 
-	* src/print.h: New file.
-	Propagate its use.
-	* src/print.c: Formatting and ordering changes.
-	(verbose, terse): Replace with...
-	(print_results): this new function.
-	Adjust dependencies.
+	* src/files.c, src/getargs.c, src/muscle-tab.c, src/reader.c
+	* src/scan-code.l, src/scan-gram.l, src/symtab.c:
+	Use quote() or quotearg_colon() on printf arguments instead of
+	quotes in the format string.
+	* data/bison.m4: Keep sync with the changes in muscle-tab.c.
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	* tests/skeletons.at, tests/input.at, tests/regression.at: Adjust
+	expected messages.
 
-	* src/conflicts.c (conflict_report): New function.
-	(conflict_log, verbose_conflict_log): Replace with...
-	(print_conflicts): this function.
-	Adjust dependencies.
-	* src/conflicts.h: New file.
-	Propagate its inclusion.
+2012-01-31  Akim Demaille  <demaille@gostai.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	maint: remove stray debug code.
+	* src/Makefile.am (echo): Remove.
 
-	* src/nullable.h: New file.
-	Propagate its inclusion.
-	* src/nullable.c: Formatting changes.
+2012-01-31  Akim Demaille  <demaille@gostai.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	maint: space changes.
+	* src/Makefile.am: Use 2 leading spaces for variable definition
+	spreading over several lines.
 
-	* src/reduce.h: New file.
-	Propagate its inclusion.
-	* src/reduce.c: Topological sort and other formatting changes.
-	(bool, TRUE, FALSE): Move their definition to...
-	* src/system.h: here.
+2012-01-31  Akim Demaille  <demaille@gostai.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	maint: more silent-rules.
+	* doc/local.mk, src/local.mk, examples/calc++/Makefile.am: Use
+	$(AM_V_GEN) and $(AM_V_at) where appropriate.
 
-	* src/files.c: Formatting changes.
-	(tryopen, tryclose, openfiles): Rename as...
-	(xfopen, xfclose, open_files): this.
-	(stringappend): static.
-	* src/files.h: Complete the list of exported symbols.
-	Propagate its use.
+2012-01-31  Jim Meyering  <meyering@redhat.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	do not ignore errors like ENOSPC,EIO when writing to stdout
+	Standard output was never explicitly closed, so we could not
+	detect failure.  Thus, bison would ignore the errors of writing
+	to a full file system and getting an I/O error on write, but only
+	for standard output, e.g., for --print-localedir, --print-datadir,
+	--help and some verbose output.
+	Now, "bison --print-datadir > /dev/full" reports the write failure:
+	bison: write error: No space left on device
+	Before, it would exit 0 with no diagnostic, implying success.
+	This is not an issue for "--output=-" or the other FILE-accepting
+	command-line options, because unlike most other GNU programs,
+	an output file argument of "-" is treated as the literal "./-",
+	rather than standard output.
+	* bootstrap.conf (gnulib_modules): Add closeout.
+	* src/main.c: Include "closeout.h".
+	Use atexit to ensure we close stdout.
+	* .gitignore: Ignore new files pulled in via gnulib-tool.
 
-	* src/reader.h: New file.
-	Propagate its use instead of tedious list of `extern' and
-	prototypes.
-	* src/reader.c: Formatting changes, topological sort,
-	s/register//.
+2012-01-26  Akim Demaille  <demaille@gostai.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	tests: fix expected output.
+	* tests/actions.at (YYBACKUP): here.
 
-	* src/lex.h: Prototype `lex.c' exported functions.
-	* src/reader.c: Adjust.
-	* src/lex.c: Formatting changes.
-	(safegetc): Rename as...
-	(xgetc): this.
+2012-01-26  Akim Demaille  <demaille@gostai.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	yacc: fix YYBACKUP.
+	Reported by David Kastrup:
+	https://lists.gnu.org/archive/html/bug-bison/2011-10/msg00002.html.
 
-	* src/lalr.h: New file.
-	Propagate its inclusion instead of prototypes and `extern'.
-	* src/lalr.c: Formatting changes, topological sorting etc.
+	* data/yacc.c (YYBACKUP): Accept rhs size.
+	Restore the proper state value.
+	* TODO (YYBACKUP): Make it...
+	* tests/actions.at: a new test case.
+	* NEWS, THANKS: Update.
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+2012-01-26  Akim Demaille  <demaille@gostai.com>
 
-	* src/output.c (token_actions): Introduce a temporary array,
-	YYDEFACT, that makes it possible for this function to use
-	output_short_table.
+	maint: update TODO.
+	* TODO (Labeling the symbols): Remove, it's done ("Name references").
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+2012-01-26  Akim Demaille  <demaille@gostai.com>
 
-	`user_toknums' is output as a `short[]' in `output.c', while it is
-	defined as a `int[]' in `reader.c'.  For consistency with the
-	other output tables, `user_toknums' is now defined as a table of
-	shorts.
+	maint: update THANKS.
+	* THANKS: Update Tys's address, on his request.
 
-	* src/reader.c (user_toknums): Be a short table instead of an int
-	table.
-	Adjust dependencies.
+2012-01-26  Akim Demaille  <demaille@gostai.com>
 
-	Factor the short table outputs.
+	maint: fix --gcc-warnings support.
+	* configure.ac: Use enable_gcc_warnings instead of enableval,
+	which is valid only with AC_ARG_ENABLE.
 
-	* src/output.c (output_short_table): New function.
-	* src/output.c (output_gram, output_stos, output_rule_data)
-	(output_base, output_table, output_check):  Use it.
+2012-01-26  Akim Demaille  <demaille@gostai.com>
 
-2000-10-02  Akim Demaille  <akim@epita.fr>
+	maint: silent-rules.
+	* configure.ac: Ask for silent-rules support.
+	Enable it by default.
 
-	* src/output.c (output): Topological sort of the functions, in
-	order to get rid of the `static' prototypes.
-	No longer use `register'.
-	* src/output.h: New file.
-	Propagate its inclusion in files explicitly prototyping functions
-	from output.c.
+2012-01-26  Akim Demaille  <demaille@gostai.com>
 
-2000-09-21  Akim Demaille  <akim@epita.fr>
+	maint: remove trailing blanks.
+	* src/scan-code.l: Here.
 
-	* src/atgeneral.m4: Update from Autoconf.
+2012-01-25  Paul Eggert  <eggert@cs.ucla.edu>
 
-2000-09-21  Akim Demaille  <akim@epita.fr>
+	tests: port to Solaris 10 'diff -u'
+	* tests/regression.at (parse-gram.y: LALR = IELR): Port to Solaris 10,
+	where "diff -u X X" outputs "No differences encountered"
+	instead of outputting nothing.  Reported by Tomohiro Suzuki in
+	<http://lists.gnu.org/archive/html/bug-bison/2012-01/msg00101.html>.
 
-	* src/closure.h: New file.
-	* src/closure.c: Formatting changes, topological sort over the
-	functions, use of closure.h.
-	(initialize_closure, finalize_closure):  Rename as...
-	(new_closure, free_closure): these.  Adjust dependencies.
-	* src/LR0.c: Formatting changes, topological sort, use of
-	cloture.h.
-	(initialize_states): Rename as...
-	(new_states): this.
-	* src/Makefile.am (noinst_HEADERS): Adjust.
+2012-01-25  Jim Meyering  <meyering@redhat.com>
 
-2000-09-20  Akim Demaille  <akim@epita.fr>
+	build: avoid possibly-replaced fprintf in liby-source, yyerror.c
+	* lib/yyerror.c (yyerror): Use fputs and fputc rather than fprintf
+	with a mere "%s\n" format.  Always return 0 now, on the assumption
+	that the return value was never used anyway.
+	Don't include <config.h> after all.  This avoids a problem
+	reported by Thiru Ramakrishnan in
+	http://lists.gnu.org/archive/html/help-bison/2011-11/msg00000.html
+	* cfg.mk: Exempt lib/yyerror.c from the sc_require_config_h_first test.
+	* THANKS: Update.
 
-	* src/acconfig.h: Don't protect config.h against multiple
-	inclusion.
-	Don't define PARAMS.
-	* src/system.h: Define PARAMS.
-	Remove some of the ad-hoc CPP magic for DOS, VMS etc.: this is the
-	purpose of config.h.  system.h must not try to fix wrong
-	definitions in config.h.
+2012-01-24  Jim Meyering  <meyering@redhat.com>
 
-2000-09-20  Akim Demaille  <akim@epita.fr>
+	maint: generate ChangeLog from git log
+	* Makefile.am (gen-ChangeLog): New rule.
+	(dist-hook): Depend on it.
+	(EXTRA_DIST): Distribute the two ChangeLog-* files.
+	* bootstrap.conf (gnulib_modules): Add gitlog-to-changelog.
+	(bootstrap_post_import_hook): Ensure that ChangeLog exists.
+	* build-aux/git-log-fix: New file.
+	* ChangeLog-2012: Renamed ...
+	* ChangeLog: ... from this.
+	* ChangeLog-1998: Renamed ...
+	* OChangeLog: ...from this
+	* .gitignore: Add ChangeLog.
 
-	* src/derives.h: New file.
-	* src/main.c, src/derives.h: Use it.
-	Formatting changes.
-	* src/Makefile.am (noinst_HEADERS): Adjust.
+2012-01-24  Jim Meyering  <meyering@redhat.com>
 
-2000-09-20  Akim Demaille  <akim@epita.fr>
-
-	* tests/atgeneral.m4: Update from Autoconf.
-	* tests/calc.m4 (_AT_DATA_CALC_Y, AT_DATA_CALC_Y, _AT_CHECK_CALC)
-	(AT_CHECK_CALC): New macros.
-	Use these macros to test bison with options `', `--raw',
-	`--debug', `--yacc', `--yacc --debug'.
-
-2000-09-19  Akim Demaille  <akim@epita.fr>
-
-	* src/output.c: Formatting changes.
-	* src/machine.h: Remove, leaving its contents in...
-	* src/system.h: here.
-	Include stdio.h.
-	Adjust all dependencies on stdio.h and machine.h.
-	* src/getargs.h: New file.
-	Let all `extern' declarations about getargs.c be replaced with
-	inclusion of `getargs.h'.
-	* src/Makefile.am (noinst_HEADERS): Adjust.
-
-	* tests/calc.m4 (yyin): Be initialized in main, not on the global
-	scope.
-	(yyerror): Returns void, not int.
-	* doc/bison.texinfo: Formatting changes.
-
-2000-09-19  Akim Demaille  <akim@epita.fr>
-
-	* tests/calc.m4 (calc.y): Do not assign to stdin, as it's not
-	portable.
-
-2000-09-18  Akim Demaille  <akim@epita.fr>
-
-	* configure.in: Append WARNING_CFLAGS to CFLAGS.
-	* src/Makefile.am (INCLUDES): Don't.
-	Be ready to fetch headers in lib/.
-
-2000-09-18  Akim Demaille  <akim@epita.fr>
-
-	* doc/bison.texinfo: Update the copyright.
-	ANSIfy and GNUify the examples.
-	Remove the old menu.
-
-2000-09-18  Akim Demaille  <akim@epita.fr>
-
-	First set of tests: use the `calc' example from the documentation.
-
-	* src/bison.s1 (yyparse): Condition the code using `yytname' which
-	is defined only when YYDEBUG is.
-	* m4/atconfig.m4 (AT_CONFIG): Adjust to Autoconf 2.13.
-	* src/files.c (tryopen, tryclose): Formatting changes.
-	Move to the top and be static.
-	* src/reader.c (read_signed_integer): Likewise.
-	* tests/calc.m4: New file.
-	* Makefile.am, suite.m4: Adjust.
-	* m4/atconfig.m4: Set BISON_SIMPLE and BISON_HAIRY.
-
-2000-09-18  Akim Demaille  <akim@epita.fr>
-
-	Add support for an Autotest test suite for Bison.
-
-	* m4/m4.m4, m4/atconfig.m4: New files.
-	* m4/Makefile.am (EXTRA_DIST): Adjust.
-	* tests/suite.m4, tests/Makefile.am, tests/atgeneral.m4: New
-	files.
-	* src/getargs.c: Display a more standard --version message.
-	* src/reader.c (reader): Formatting changes.
-	No longer depend upon VERSION_STRING.
-	* configure.in: No longer use `dnl'.
-	Set up the test suite and the new directory `tests/.
-	(VERSION_STRING): Remove.
-
-2000-04-14  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_comment2): New function, same as former
-	`copy_comment', but outputs into two FILE *.
-	(copy_comment): Use it.
-	(parse_union_decl): Use it.
-	(get_type, parse_start_decl): Use the same `invalid' message.
-	(parse_start_decl, parse_union_decl): Use the same `multiple'
-	message.
-	(parse_union_decl, copy_guard, copy_action): Use the same
-	`unmatched' message.
-	* m4/Makefile.am (EXTRA_DIST): Add `warning.m4'.
-
-2000-03-31  Akim Demaille  <akim@epita.fr>
-
-	* src/files.c (tryopen, tryclose): Move to the top.
-	Be static.
-
-2000-03-31  Akim Demaille  <akim@epita.fr>
-
-	* src/main.c (main): Don't call `done', exit does it.
-
-2000-03-31  Akim Demaille  <akim@epita.fr>
-
-	* allocate.c: s/return (foo)/return foo/.
-	* lalr.c: Likewise.
-	* LR0.c: Likewise.
-	* output.c: Likewise.
-	* reader.c: Likewise.
-	* symtab.c: Likewise.
-	* vmsgetargs.c: Likewise.
-
-2000-03-31  Akim Demaille  <akim@epita.fr>
-
-	Clean up the error reporting functions.
-
-	* src/report.c: New file.
-	* src/report.h: Likewise.
-	* src/Makefile.am: Adjust.
-	* m4/error.m4: New file.
-	* m4/Makefile.am: Adjust.
-	* configure.in (jm_PREREQ_ERROR): Call it.
-	* src/main.c (int_to_string, banner, fatal_banner, warn_banner):
-	Remove.
-	(fatal, fatals): Remove.  All callers use complain.c::fatal.
-	(warn, warni, warns, warnss, warnss): Remove.  All callers use
-	complain.c::complain.
-	(toomany): Remove, use fatal instead.
-	* src/files.c (done): No argument, use complain_message_count.
-	* src/main.c (main): Register `done' to `atexit'.
-
-	* src/getargs.c (usage): More `fputs', less `fprintf'.
-
-2000-03-28  Akim Demaille  <akim@epita.fr>
-
-	* lib/: New directory.
-	* Makefile.am (SUBDIRS): Adjust.
-	* configure.in: Adjust.
-	(LIBOBJS): Although not used yet, AC_SUBST it, otherwise it's
-	useless.
-	* src/alloca.c: Moved to lib/.
-	* src/getopt.c: Likewise.
-	* src/getopt1.c: Likewise.
-	* src/getopt.h: Likewise.
-	* src/ansi2knr.c: Likewise.
-	* src/ansi2knr.1: Likewise.
-	* src/Makefile.am: Adjust.
-	* lib/Makefile.am: New file.
-
-2000-03-28  Akim Demaille  <akim@epita.fr>
-
-	* src/getargs.c (usage): Refresh the help message.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/getopt1.c: Updated from textutils 2.0e
-	* src/getopt.c: Likewise.
-	* src/getopt.h: Likewise.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/Makefile.am (bison.simple): Fix the awk program: quote only
-	the file name, not the whole `#line LINE FILE'.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	On syntax errors, report the token on which we choked.
-
-	* src/bison.s1 (yyparse): In the label yyerrlab, when
-	YYERROR_VERBOSE, add yychar in msg.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_at): New function.
-	(copy_guard): Use it.
-	(copy_action): Use it.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	Be kind to translators, save some useless translations.
-
-	* src/main.c (banner): New function.
-	(fatal_banner): Use it.
-	(warn_banner): Use it.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_definition): Use copy_string and
-	copy_comment.  Removed now unused `match', `ended',
-	`cplus_comment'.
-	(copy_comment, copy_string): Moved, to be visible from
-	copy_definition.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_string): Declare `static inline'.  No
-	problems with inline, since it is checked by configure.
-	(copy_comment): Likewise.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (packsymbols): Formatting changes.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_comment): New function, factored out from:
-	(copy_action): Use it.  Removed now unused `match', `ended',
-	`cplus_comment'.
-	(copy_guard): Likewise.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/reader.c (copy_string): New function, factored out from:
-	(copy_action): Use it.
-	(copy_guard): Likewise.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	Change the handling of @s so that they behave exactly like $s.
-	There is now a pseudo variable @$ (readble and writable), location
-	of the lhs of the rule (by default ranging from the location of
-	the first symbol of the rhs, to the location of the last symbol,
-	or, if the rhs is empty, YYLLOC).
-
-	* src/bison.s1 [YYLSP_NEEDED] (yyloc): New variable, twin of
-	yyval.
-	(yyparse): When providing a default semantic action, provide a
-	default location action.
-	(after the $): No longer change `*YYLSP', just stack YYLOC the
-	same way you stack YYVAL.
-	* src/reader.c (read_declarations): Use warns.
-	(copy_guard, case '@'): Also recognize `@$', expanded as `YYLOC'.
-	(copy_action, case '@'): Likewise.
-	Use a standard error message, to save useless work from
-	translators.
-
-2000-03-17  Akim Demaille  <akim@epita.fr>
-
-	* src/bison.s1: Formatting and cosmetics changes.
+	change more quotes in source, and adjust tests to match
+	Run this command to change each `%s' to '%s' in source directories:
+	  git grep -l '`%s'\' src djgpp data \
+	    |xargs perl -pi -e '$q="'\''";s/`%s$q/$q%s$q/g'
+	* data/bison.m4: Affected per the above.
+	* djgpp/subpipe.c: Likewise.
+	* src/files.c: Likewise.
+	* src/getargs.c: Likewise.
+	* src/muscle-tab.c: Likewise.
 	* src/reader.c: Likewise.
-	Update the Copyright notice.
+	* tests/glr-regression.at: Adjust to match.
+	* tests/input.at: Likewise.
+	* tests/push.at: Likewise.
+	* tests/skeletons.at: Likewise.
 
-2000-03-17  Akim Demaille  <akim@epita.fr>
+2012-01-23  Jim Meyering  <meyering@redhat.com>
 
-	* src/bison.s1 (#line): All set to `#line' only, since the
-	Makefile now handles them.
+	quote consistently and make tests pass with new quoting from gnulib
+	Updating to gnulib pulled in new quote and quotarg modules,
+	by which quoting is now done like 'this' rather than `this'.
+	That change induces many "make check" test failures.  This change
+	adapts code and tests so that "make check" passes once again.
+	* src/scan-code.l: Quote like 'this', not like `this'.
+	* src/scan-gram.l: Likewise.
+	* src/symtab.c: Likewise.
+	* tests/actions.at: Adjust tests to match.
+	* tests/input.at: Likewise.
+	* tests/named-refs.at: Likewise.
+	* tests/output.at: Likewise.
+	* tests/regression.at: Likewise.
+	* lib/.gitignore: Regenerate.
+	* m4/.gitignore: Likewise.
 
-2000-03-16  Akim Demaille  <akim@epita.fr>
+2012-01-23  Jim Meyering  <meyering@redhat.com>
 
-	* src/output.c (output_rule_data): Output the documentation of
-	some of the tables.
-	(Copyright notice): Update.
-	Formatting changes.
+	build: update gnulib and autoconf submodules to latest (cherry picked from commit 728415f885e5cb8e518c8576fa6e1f541e384130)
 
-2000-03-16  Akim Demaille  <akim@epita.fr>
+2012-01-23  Jim Meyering  <meyering@redhat.com>
 
-	* src/bison.s1 [!YYDEBUG]: Define yydebug to 0.  This allows to
-	remove most `#if YYDEBUG != 0', since `if (yydebug)' is enough.
-	One `#if YYDEBUG' remains, since it uses variables which are
-	defined only if `YYDEBUG != 0'.
+	build: manually update bootstrap from gnulib, and adapt
+	Updating to the latest bootstrap from gnulib involves more of a
+	change than usual, and updating to the latest gnulib would involve
+	its own set of challenges with the upcoming quoting changes, so
+	we update bootstrap manually and separately.
+	* bootstrap: Update from gnulib.
+	* lib/Makefile.am: Initialize more variables to empty, so that gnulib.mk
+	can append to them with "+=".
+	* bootstrap.conf (gnulib_mk_hook): Remove.  No longer honored.
+	(gnulib_tool_option_extras): Generate gnulib.mk.
 
-2000-03-16  Akim Demaille  <akim@epita.fr>
+2012-01-23  Jim Meyering  <meyering@redhat.com>
 
-	* src/bison.s1 (yyparse): Reorganize the definitions of the stacks
-	and related variables so that the similarities are highlighted.
+	maint: include <config.h> first
+	* cfg.mk (exclude_file_name_regexp--sc_require_config_h_first):
+	Exempt data/glr.c and data/yacc.c from the include-config.h-first
+	requirement.
 
-2000-03-16  Akim Demaille  <akim@epita.fr>
+2012-01-23  Jim Meyering  <meyering@redhat.com>
 
-	* src/bison.s1: Properly indent CPP directives.
+	build: include <config.h> from lib/yyerror.c
+	* lib/yyerror.c: Include <config.h>.
 
-2000-03-16  Akim Demaille  <akim@epita.fr>
+2012-01-23  Jim Meyering  <meyering@redhat.com>
 
-	* src/bison.s1: Properly indent the `alloca' CPP section.
+	maint: list djgpp/subpipe.c in po/POTFILES.in
+	* po/POTFILES.in: Add djgpp/subpipe.c.
 
-2000-03-16  Akim Demaille  <akim@epita.fr>
+2012-01-23  Jim Meyering  <meyering@redhat.com>
 
-	Do not hard code values of directories in `configure.in'.
-	Update the `configure' tool chain.
+	maint: placate the space-TAB syntax-check
+	* cfg.mk (exclude_file_name_regexp--sc_space_tab): Exempt
+	tests/input.at and tests/c++.at, since they appear to use
+	SP-TAB sequences deliberately.
+	* OChangeLog: Remove space-before-TAB.
 
-	* configure.in (XPFILE, XPFILE1, LOCALEDIR): Remove, handled by
-	src/makefile.am.
-	(VERSION_STRING): Use the third arg of AC_DEFINE_UNQUOTED.
-	(AC_OUTPUT): Add m4/Makefile.
-	Bump to bison 1.28a, 1.29 has never been released.
-	* acconfig.h (XPFILE, XPFILE1, LOCALEDIR): Remove, since they are
-	handled via src/Makefile.am.
-	(VERSION_STRING, PROTOTYPES, ENABLE_NLS, HAVE_CATGETS,
-	HAVE_GETTEXT, HAVE_LC_MESSAGES, HAVE_STPCPY): Remove, handled by
-	autoheader.
-	* Makefile.am (SUBDIRS): Add m4.
-	(ACLOCAL_AM_FLAGS): New variable.
-	(AUTOMAKE_OPTIONS): Add check-news.
-	* src/Makefile.am (bison.simple): Use awk to replace #line lines with
-	the proper line number and file name.
-	(DEFS): Propagate the location of bison library files and of the
-	locale files.
-	(INCLUDES): Added `-I ..' so that one can compile with srcdir !=
-	builddir.
-	* acinclude.m4: Remove, replaced by the directory m4.
-	* m4/Makefile.am (EXTRA_DIST): New variable.
-	* m4/gettext.m4: New file, from the fileutils.
-	* m4/lcmessage.m4: Likewise
-	* m4/progtest.m4: Likewise.
-	* m4/bison-decl.m4: New file, extracted from former acinclude.m4.
+2012-01-23  Jim Meyering  <meyering@redhat.com>
 
-2000-03-10  Akim Demaille  <akim@epita.fr>
+	doc: correct typo: s/can not/cannot/
+	* doc/bison.texinfo (Bug Reports): s/can not/cannot/
+	And remove trailing blanks.
 
-	* src/closure.c:
-	Formatting changes of various comments.
-	Respect the GNU coding standards at various places.
-	Don't use `_()' when no translation is needed.
+2012-01-22  Jim Meyering  <meyering@redhat.com>
 
-1999-12-13  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/files.c:
-	OS/2 honors TMPDIR environment variable.
-
-1999-12-13  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/bison.texinfo: Tweaked spelling and grammar.
-	Updated ISBN.
-	Removed reference to price of printed copy.
-	Mention BISON_SIMPLE and BISON_HAIRY.
-
-1999-12-13  Jesse Thilo  <jthilo@gnu.org>
-
-	* configure.in, NEWS:
-	Bison 1.29 released.
-
-1999-10-27  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/.cvsignore, doc/Makefile.am, doc/refcard.tex:
-	Added reference card.
-
-1999-07-26  Jesse Thilo  <jthilo@gnu.org>
-
-	* po/ru.po: Added Russian translation.
-
-1999-07-26  Jesse Thilo  <jthilo@gnu.org>
-
-	* configure.in: Added Russian translation.
-
-1999-07-06  Jesse Thilo  <jthilo@gnu.org>
-
-	* configure.in, NEWS, README:
-	Released version 1.28.
-
-1999-06-14  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/system.h:
-	Squashed redefinition warning on some systems.
-
-	* src/getargs.c, src/Makefile.am, src/reader.c, src/version.c:
-	Have configure build version string instead of relying on ANSI string
-	concatentation.
-
-1999-06-14  Jesse Thilo  <jthilo@gnu.org>
-
-	* po/POTFILES.in: Got rid of version.c.
-
-1999-06-14  Jesse Thilo  <jthilo@gnu.org>
-
-	* acconfig.h, configure.in:
-	Have configure build version string instead of relying on ANSI string
-	concatentation.
-
-1999-06-08  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/bison.1:
-	Dropped mention of `+' for long-named options.
-
-1999-05-30  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/files.c: Added <unistd.h> for unlink().
-
-	* src/Makefile.am, src/system.h:
-	I18n fixes.
-
-1999-05-30  Jesse Thilo  <jthilo@gnu.org>
-
-	* README: Added a FAQ list.
-
-	* configure.in, acconfig.h:
-	I18n fixes.
-
-1999-05-30  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/FAQ, doc/Makefile.am:
-	Added a FAQ list.
-
-1999-05-19  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/alloc.h, src/symtab.h, src/version.c:
-	Protected inclusion of "config.h" with HAVE_CONFIG_H.
-
-1999-04-18  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/.cvsignore, src/Makefile.am:
-	Reorganized: sources in `src', documentation in `doc'.
-
-	* src/lex.c (literalchar):
-	fixed the code for escaping double quotes (thanks
-	Jonathan Czisny.)
-
-1999-04-18  Jesse Thilo  <jthilo@gnu.org>
-
-	* po/de.po, po/es.po, po/fr.po, po/nl.po, po/POTFILES.in:
-	Adjusted paths to reflect directory reorganization.
-
-1999-04-18  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/.cvsignore, doc/Makefile.am:
-	Reorganized: sources in `src', documentation in `doc'.
-
-1999-04-18  Jesse Thilo  <jthilo@gnu.org>
-
-	* configure.in:
-	Updated AC_INIT file to reflect directory reorganization.
-
-	* configure.in, .cvsignore, Makefile.am, POTFILES.in:
-	Reorganized: sources in `src', documentation in `doc'.
-
-1999-04-13  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/allocate.c:
-	Don't declare calloc() and realloc() if not necessary.
-
-1999-04-13  Jesse Thilo  <jthilo@gnu.org>
-
-	* configure.in, acconfig.h, acinclude.m4:
-	Don't declare calloc() and realloc() if not necessary.
-
-1999-03-23  Jesse Thilo  <jthilo@gnu.org>
-
-	* po/.cvsignore: Added i18n support.
-
-1999-03-23  Jesse Thilo  <jthilo@gnu.org>
-
-	* acconfig.h, configure.in, Makefile.am:
-	Added i18n support.
-
-1999-03-22  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/bison.s1: Fixed #line numbers.
-
-1999-03-15  Jesse Thilo  <jthilo@gnu.org>
-
-	* po/es.po, po/fr.po, po/nl.po, po/de.po:
-	Added PO files from Translation Project.
-
-1999-03-03  Jesse Thilo  <jthilo@gnu.org>
-
-	* Makefile.am:
-	Added support for non-ANSI compilers (ansi2knr).
-
-1999-02-16  Jesse Thilo  <jthilo@gnu.org>
-
-	* configure.in: Bumped version number to 1.27.
-
-	* Makefile.am:
-	Added `bison.simple' to list of files removed by `make distclean'.
-
-1999-02-12  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/files.c, src/files.h:
-	Defined locations of parser files in config.h instead of Makefile.
-
-1999-02-12  Jesse Thilo  <jthilo@gnu.org>
-
-	* acconfig.h, acinclude.m4, configure.in, Makefile.am:
-	Defined locations of parser files in config.h instead of Makefile.
-
-1999-02-09  Jesse Thilo  <jthilo@gnu.org>
-
-	* Makefile.am:
-	Removed inappropriate use of $< macro.
-
-1999-02-05  Jesse Thilo  <jthilo@gnu.org>
-
-	* po/Makefile.in.in, po/POTFILES.in:
-	Add `po' directory skeleton.
-
-1999-01-27  Jesse Thilo  <jthilo@gnu.org>
-
-	* README: Document help-bison list.
-
-	* configure.in: Add check for mkstemp().
-
-1999-01-20  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/conflicts.c, src/LR0.c, src/output.c, src/reader.c:
-	Hush a few compiler warnings.
-
-	* src/files.c:
-	Add tryclose(), which verifies that fclose was successful.
-	Hush a couple of compiler warnings.
-
-1999-01-20  Jesse Thilo  <jthilo@gnu.org>
-
-	* Makefile.am, OChangeLog:
-	ChangeLog is now automatically generated.  Include the old version as
-	OChangeLog.
-
-1999-01-14  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/gram.h, src/lalr.c, src/lex.c, src/lex.h, src/machine.h, src/main.c, src/nullable.c, src/output.c, src/print.c, src/reader.c, src/reduce.c, src/state.h, src/symtab.c, src/symtab.h, src/types.h, src/vmsgetargs.c, src/warshall.c, src/allocate.c, src/alloc.h, src/bison.s1, src/closure.c, src/conflicts.c, src/derives.c, src/files.c, src/files.h, src/getargs.c, src/gram.c, src/LR0.c:
-	Update FSF address.
-
-1999-01-14  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/bison.texinfo: Fix formatting glitch.
-
-	* doc/bison.texinfo: Update FSF address.
-
-1999-01-14  Jesse Thilo  <jthilo@gnu.org>
-
-	* acconfig.h: Update FSF address.
-
-1999-01-08  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/system.h:
-	Don't define PACKAGE here, since config.h defines it.
-
-1998-12-30  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/reader.c: Update copyright date.
-
-	* src/main.c:
-	Ditch sprintf to statically-sized buffers in fatal/warn functions in
-	favor of output directly to stderr (avoids buffer overruns).
-
-	* src/reader.c: Some checks for premature EOF.
-
-	* src/allocate.c, src/alloc.h, src/closure.c, src/conflicts.c, src/derives.c, src/getargs.c, src/gram.c, src/lalr.c, src/lex.c, src/LR0.c, src/main.c, src/nullable.c, src/output.c, src/print.c, src/reduce.c, src/symtab.c, src/symtab.h, src/warshall.c:
-	Use prototypes if the compiler understands them.
-
-	* src/files.c: Honor TMPDIR on Unix hosts.
-	Use prototypes if the compiler understands them.
-
-	* src/reader.c:
-	Fix a couple of buffer overrun bugs.
-	Use prototypes if the compiler understands them.
-
-	* src/system.h: Include unistd.h and ctype.h.
-	Use #ifdef instead of #if for NLS symbols.
-
-1998-12-30  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/bison.texinfo:
-	Delete comment "consider using @set for edition number, etc..." since
-	we now are doing so.
-
-1998-12-30  Jesse Thilo  <jthilo@gnu.org>
-
-	* configure.in:
-	Use prototypes if the compiler understands them.
-
-	* NEWS: Document 1.26 highlights.
-
-	* Makefile.am: Require Automake 1.3 or later.
-
-	* acconfig.h:
-	Use prototypes if the compiler understands them.
-
-1998-12-29  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/version.c:
-	Use VERSION symbol from automake for version number.
-
-1998-12-29  Jesse Thilo  <jthilo@gnu.org>
-
-	* acconfig.h, configure.in, version.cin:
-	Use VERSION symbol from automake for version number.
-
-1998-11-28  Jesse Thilo  <jthilo@gnu.org>
-
-	* Makefile.am:
-	Distribute original version of simple parser (bison.s1), not built
-	version (bison.simple).
-
-1998-11-28  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/bison.texinfo: Add info dir entry.
-
-	* doc/bison.texinfo:
-	Let automake put version number into documentation.
-
-1998-11-26  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/bison.cld, src/build.com, src/vmshlp.mar:
-	Add non-RCS files from /gd/gnu/bison.
-
-1998-11-26  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/bison.1:
-	Document the BISON_HAIRY and BISON_SIMPLE variables.
-
-1998-11-25  Jesse Thilo  <jthilo@gnu.org>
-
-	* src/version.c: Build version.c automatically.
-
-	* src/reader.c:
-	Fix token numbering (used to start at 258, not 257).
-
-	* src/system.h: Include config.h.
-
-	* src/getargs.c: Update bug report address.
-
-	* src/alloca.c, src/getopt1.c, src/getopt.c, src/getopt.h:
-	Get latest copies of alloca.c, getopt.c, getopt.h, getopt1.c from gnu.org.
-
-1998-11-25  Jesse Thilo  <jthilo@gnu.org>
-
-	* Makefile.am:
-	Rename bison.simple to bison.s1 (bison.simple is then built from bison.s1).
-
-	* configure.in, version.cin:
-	Build version.c automatically.
-
-	* AUTHORS: Add AUTHORS file.
-
-	* README: Update bug report address.
-
-	* bison.simple:
-	Rename bison.simple to bison.s1 (bison.simple is then built from bison.s1).
-
-	* configure.in, Makefile.am, Makefile.in, stamp-h.in:
-	Add automake stuff.
-
-1998-11-25  Jesse Thilo  <jthilo@gnu.org>
-
-	* doc/bison.texinfo: Clean up some formatting.
-
-1998-05-05  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.texinfo:
-	Explain better why to make a pure parser.
-
-1998-01-05  Richard Stallman  <rms@gnu.org>
-
-	* src/files.c (openfiles):
-	[_WIN32 && !__CYGWIN32__] Use TEMP or Temp to
-	find a temporary directory, if possible.  Do not unlink files while
-	they are open.
-
-1997-08-25  Richard Stallman  <rms@gnu.org>
-
-	* src/reader.c (stack_offset;):
-	Change some warni to warns.
-
-	* src/lex.c (literalchar): Use warns, not warni.
-
-1997-06-28  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: Add a Bison version comment.
-
-	* src/main.c (fatal, warn, berror):
-	Use program_name.
-
-1997-06-28  Richard Stallman  <rms@gnu.org>
-
-	* Makefile.in (bison_version): New variable.
-	(dist): Use that variable.
-	(bison.s1): Substitute the Bison version into bison.simple.
-
-	* bison.simple: Add a Bison version comment.
-
-1997-06-18  Richard Stallman  <rms@gnu.org>
-
-	* src/main.c (fatal, warn, berror):
-	Make error messages standard.
-	(toomany): Improve error message text.
-
-	* src/LR0.c, src/closure.c, src/conflicts.c, src/derives.c, src/files.c, src/lalr.c, src/lex.c, src/nullable.c, src/output.c, src/print.c, src/reader.c, src/reduce.c, src/symtab.c:
-	new.h renamed to alloc.h.
-
-1997-06-18  Richard Stallman  <rms@gnu.org>
-
-	* Makefile.in: new.h renamed to alloc.h.
-
-1997-05-24  Richard Stallman  <rms@gnu.org>
-
-	* src/lex.c (literalchar):
-	Fix the code for escaping \, " and '.
-
-	(lex): Avoid trouble when there are many chars
-	to discard in a char literal with just several chars in it.
-
-1997-05-17  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1:
-	Use malloc, if using alloca is troublesome.
-	(YYSTACK_USE_ALLOCA): New flag macro.
-	Define it for some systems and compilers.
-	(YYSTACK_ALLOC): New macro.
-	(yyparse): Use YYSTACK_ALLOC to allocate stack.
-	If it was malloc'd, free it.
-
-1997-05-17  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple:
-	Use malloc, if using alloca is troublesome.
-	(YYSTACK_USE_ALLOCA): New flag macro.
-	Define it for some systems and compilers.
-	(YYSTACK_ALLOC): New macro.
-	(yyparse): Use YYSTACK_ALLOC to allocate stack.
-	If it was malloc'd, free it.
-
-1997-04-23  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1:
-	(alloca) [__hpux]: Always define as __builtin_alloca.
-
-1997-04-23  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple:
-	(alloca) [__hpux]: Always define as __builtin_alloca.
-
-1997-04-22  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1:
-	[__hpux]: Include alloca.h (right for HPUX 10)
-	instead of declaring alloca (right for HPUX 9).
-
-	* src/bison.s1 (__yy_memcpy):
-	Declare arg `count' as unsigned int.
-	(yyparse): Cast third arg to __yy_memcpy to unsigned int.
-
-1997-04-22  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple:
-	[__hpux]: Include alloca.h (right for HPUX 10)
-	instead of declaring alloca (right for HPUX 9).
-
-	* bison.simple (__yy_memcpy):
-	Declare arg `count' as unsigned int.
-	(yyparse): Cast third arg to __yy_memcpy to unsigned int.
-
-1997-01-03  Richard Stallman  <rms@gnu.org>
-
-	* src/allocate.c: [__STDC__ or _MSC_VER]:
-	Declare calloc and realloc to return void *.
-
-1997-01-02  Richard Stallman  <rms@gnu.org>
-
-	* src/system.h:
-	[_MSC_VER]: Include stdlib.h and process.h.
-	[_MSC_VER] (getpid): Define as macro--translate it to _getpid.
-
-	* src/main.c (main): Return FAILURE as a value.
-	(printable_version): Declare arg as int, not char.
-
-1997-01-02  Richard Stallman  <rms@gnu.org>
-
-	* Makefile.in (dist):
-	Explicitly check for symlinks, and copy them.
-
-1996-12-19  Richard Stallman  <rms@gnu.org>
-
-	* src/files.c:
-	[_MSC_VER] (XPFILE, XPFILE1): Define, if not already defined.
-
-1996-12-18  Paul Eggert  <eggert@gnu.org>
-
-	* src/bison.s1 (yyparse):
-	If __GNUC__ and YYPARSE_PARAM are both defined,
-	declare yyparse to have a void * argument.
-
-1996-12-18  Paul Eggert  <eggert@gnu.org>
-
-	* bison.simple (yyparse):
-	If __GNUC__ and YYPARSE_PARAM are both defined,
-	declare yyparse to have a void * argument.
-
-1996-12-17  Richard Stallman  <rms@gnu.org>
-
-	* src/reduce.c (nbits): Add some casts.
-
-1996-08-12  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: Test _MSDOS as well as _MSDOS_.
-
-1996-08-12  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: Test _MSDOS as well as _MSDOS_.
-
-1996-07-31  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1:
-	[__sun && __i386]: Include alloca.h.
-
-1996-07-31  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple:
-	[__sun && __i386]: Include alloca.h.
-
-1996-07-30  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: Comment change.
-
-	* src/bison.s1: Test _MSDOS_, not MSDOS.
-
-1996-07-30  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: Comment change.
-
-	* bison.simple: Test _MSDOS_, not MSDOS.
-
-1996-06-01  Richard Stallman  <rms@gnu.org>
-
-	* src/reduce.c, src/reader.c, src/print.c, src/output.c, src/nullable.c, src/lex.c, src/lalr.c, src/getargs.c, src/derives.c, src/conflicts.c, src/closure.c, src/allocate.c:
-	Insert `_' macro around many string constants.
-
-	* src/main.c:
-	Insert `_' macro around many string constants.
-
-	(main): Call setlocale, bindtextdomain and textdomain.
-
-	* src/system.h: [HAVE_LOCALE_H]: Include locale.h.
-	[! HAVE_LOCALE_H] (setlocale): Define as no-op.
-	[ENABLE_NLS]: Include libintl.h.
-	[ENABLE_NLS] (gettext): Define.
-	[! ENABLE_NLS] (bintextdomain, textdomain, _): Consolation definitions.
-	(N_, PACKAGE, LOCALEDIR): New macros.
-
-1996-06-01  Richard Stallman  <rms@gnu.org>
-
-	* POTFILES.in: New file.
-
-	* Makefile.in (allocate.o):
-	Define target explicitly.
-
-	* Makefile.in (CFLAGS): Set to @CFLAGS@.
-	(LDFLAGS): Set to @LDFLAGS@.
-	(configure): Run autoconf only if preceding `cd' succeeds.
-	(bison.s1): Redirect output to temporary file then move the
-	temporary to the target, rather than redirecting directly to bison.s1.
-	(clean): Remove config.status and config.log.
-	(distclean): Don't remove config.status here.
-
-1996-05-12  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1:
-	(__yy_memcpy) [__cplusplus]: Reorder declarations of variables f and t.
-
-1996-05-12  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple:
-	(__yy_memcpy) [__cplusplus]: Reorder declarations of variables f and t.
-
-1996-05-11  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1 (__yy_memcpy):
-	Really reorder the args, as was supposedly done on Feb 14 1995.
-	(yyparse): Calls changed accordingly.
-
-1996-05-11  Richard Stallman  <rms@gnu.org>
-
-	* Makefile.in (dist): Don't use $(srcdir).
-
-	* bison.simple (__yy_memcpy):
-	Really reorder the args, as was supposedly done on Feb 14 1995.
-	(yyparse): Calls changed accordingly.
-
-1996-01-27  Richard Stallman  <rms@gnu.org>
-
-	* src/output.c (output_rule_data):
-	Test YYERROR_VERBOSE in the conditional
-	around the definition of ttyname.
-
-1995-12-29  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1:
-	Fix line numbers in #line commands.
-
-1995-12-29  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple:
-	Fix line numbers in #line commands.
-
-1995-12-27  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1 (YYPARSE_PARAM_DECL):
-	In C++, make it always null.
-	(YYPARSE_PARAM_ARG): New macro.
-	(yyparse): Use YYPARSE_PARAM_ARG.
-
-1995-12-27  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple (YYPARSE_PARAM_DECL):
-	In C++, make it always null.
-	(YYPARSE_PARAM_ARG): New macro.
-	(yyparse): Use YYPARSE_PARAM_ARG.
-
-1995-11-29  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.texinfo:
-	Describe literal string tokens, %raw, %no_lines, %token_table.
-
-1995-11-29  Daniel Hagerty  <hag@gnu.org>
-
-	* doc/bison.texinfo: Fixed update date
-
-1995-10-16  Richard Stallman  <rms@gnu.org>
-
-	* src/version.c: Version 1.25.
-
-1995-10-16  Richard Stallman  <rms@gnu.org>
-
-	* NEWS: *** empty log message ***
-
-1995-10-16  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.1, doc/bison.rnh:
-	Add new options.
-
-1995-10-15  Richard Stallman  <rms@gnu.org>
-
-	* src/vmsgetargs.c, src/getargs.c:
-	Added -n, -k, and -raw switches.
-	(noparserflag, toknumflag, rawtoknumflag): New variables.
-
-	* src/symtab.h (SALIAS):
-	New #define for adding aliases to %token.
-	(struct bucket): Added `alias' field.
-
-	* src/reduce.c (reduce_grammar):
-	Revise error message.
-	(print_notices): Remove final `.' from error message.
-
-	* src/reader.c (reader_output_yylsp):
-	New function.
-	(readgram): Use `#if 0' around code that accepted %command
-	inside grammar rules:  The documentation doesn't allow it,
-	and it will fail since the %command processors scan for the next %.
-	(parse_token_decl):  Extended the %token
-	declaration to allow a multi-character symbol as an alias.
-	(parse_thong_decl): New function.
-	(read_declarations): Added %thong declarations.
-	(read_declarations): Handle NOOP to deal with allowing
-	% declarations as another means to specify the flags.
-	(readgram): Allow %prec prior to semantics embedded in a rule.
-	(skip_to_char, read_declarations, copy_definition)
-	(parse_token_decl, parse_start_decl, parse_type_decl)
-	(parse_assoc_decl, parse_union_decl, parse_expect_decl)
-	(get_type_name, copy_guard, copy_action, readgram)
-	(get_type, packsymbols):  Revised most error messages.
-	Changed `fatal' to `warnxxx' to avoid aborting for error.
-	Revised and use multiple warnxxx functions to avoid using VARARGS1.
-	(read_declarations): Improve the error message for
-	an invalid character.  Do not abort.
-	(read_declarations, copy_guard, copy_action): Use
-	printable_version to avoid unprintable characters in printed output.
-	(parse_expect_decl): Error if argument to %expect exceeds 10 digits.
-	(parse_token_decl, parse_assoc_decl, parse_type_decl, get_type):
-	Allow the type of a non-terminal can be given
-	more than once, as long as all specifications give the same type.
-
-	* src/output.c:
-	(output_headers, output_trailers, output, output_gram)
-	(output_rule_data): Implement noparserflag variable.
-	Implement toknumflag variable.
-	(output): Call reader_output_yylsp to output LTYPESTR.
-
-	* src/main.c (main):
-	 If reader sees an error, don't process the grammar.
-	(fatals): Updated to not use VARARGS1.
-	(printable_version, int_to_string, warn, warni, warns, warnss)
-	(warnsss): New error reporting functions.  Avoid abort for error.
-
-	* src/lex.h:
-	Added THONG and NOOP for alias processing.
-	Added SETOPT for the new code that allows setting options with %flags.
-
-	* src/lex.c:
-	Include getopt.h.  Add some extern decls.
-	(safegetc): New function to deal with EOF gracefully.
-	(literalchar); new function to deal with reading \ escapes.
-	(lex): Use literalchar.
-	(lex): Implemented "..." tokens.
-	(literalchar, lex, parse_percent_token): Made tokenbuffer
-	always contain the token.  This includes growing the token
-	buffer while reading an integer.
-	(parse_percent_token): Replaced if-else statement with percent_table.
-	(parse_percent_token): Added % declarations as another
-	way to specify the flags -n, -l, and -r.  Also added hooks for
-	-d, -k, -y, -v, -t, -p, -b, -o, but implementation requires
-	major changes to files.c.
-	(lex) Retain in the incoming stream a character following
-	an incorrect '/'.
-	(skip_white_space, lex):  Revised most error messages
-	and changed fatal to warn to avoid aborting.
-	(percent_table):  Added %thong declarations.
-
-	* src/gram.h: Comment changes.
-
-	* src/files.c (openfiles, open_extra_files, done):
-	 Add faction flag
-	and actfile file.  Handle noparserflag.  Both for -n switch.
-
-	* src/conflicts.c (resolve_sr_conflict):
-	Remove use of alloca.
-
-1995-06-01  Jim Meyering  <meyering@gnu.org>
-
-	* doc/bison.texinfo: *** empty log message ***
-
-1995-05-06  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: Comment change.
-
-1995-05-06  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: Comment change.
-
-1995-05-03  Richard Stallman  <rms@gnu.org>
-
-	* src/version.c: Version now 1.24.
-
-	* src/bison.s1: Change distribution terms.
-
-	* src/version.c: Version now 1.23.
-
-1995-05-03  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.texinfo:
-	Rewrite "Conditions for Using Bison".
-	Update version to 1.24.
-
-1995-05-03  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: Change distribution terms.
-
-1995-02-23  Richard Stallman  <rms@gnu.org>
-
-	* src/files.c: Test __VMS_POSIX as well as VMS.
-
-1995-02-14  Jim Meyering  <meyering@gnu.org>
-
-	* src/bison.s1 (__yy_memcpy):
-	Renamed from __yy_bcopy to avoid
-	confusion.  Reverse FROM and TO arguments to be consistent with
-	those of memcpy.
-
-1995-02-14  Jim Meyering  <meyering@gnu.org>
-
-	* bison.simple (__yy_memcpy):
-	Renamed from __yy_bcopy to avoid
-	confusion.  Reverse FROM and TO arguments to be consistent with
-	those of memcpy.
-
-1994-11-10  David J. MacKenzie  <djm@gnu.org>
-
-	* NEWS: reformat
-
-	* NEWS: New file.
-
-	* Makefile.in (DISTFILES): Include NEWS.
-
-	* Makefile.in (DISTFILES):
-	Include install-sh, not install.sh.
-
-	* configure.in: Update to Autoconf v2 macro names.
-
-1994-10-05  David J. MacKenzie  <djm@gnu.org>
-
-	* Makefile.in: fix typo
-
-	* Makefile.in (prefix, exec_prefix):
-	Let configure set them.
-
-1994-09-28  David J. MacKenzie  <djm@gnu.org>
-
-	* Makefile.in: Set datadir to $(prefix)/share.
-
-1994-09-15  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1:
-	Update copyright notice and GPL version.
-
-1994-09-15  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple:
-	Update copyright notice and GPL version.
-
-1994-07-12  Richard Stallman  <rms@gnu.org>
-
-	* src/reduce.c, src/reader.c:
-	entered into RCS
-
-1994-05-05  David J. MacKenzie  <djm@gnu.org>
-
-	* Makefile.in: entered into RCS
-
-1994-03-26  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: entered into RCS
-
-1994-03-26  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: entered into RCS
-
-1994-03-25  Richard Stallman  <rms@gnu.org>
-
-	* src/main.c: entered into RCS
-
-1994-03-24  Richard Stallman  <rms@gnu.org>
-
-	* src/conflicts.c: entered into RCS
-
-1994-01-02  Richard Stallman  <rms@gnu.org>
-
-	* Makefile.in: *** empty log message ***
-
-1993-11-21  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: *** empty log message ***
-
-1993-11-21  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.texinfo: entered into RCS
-
-	* doc/bison.texinfo: *** empty log message ***
-
-1993-11-21  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: *** empty log message ***
-
-1993-10-25  David J. MacKenzie  <djm@gnu.org>
-
-	* doc/bison.texinfo: *** empty log message ***
-
-1993-10-19  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: *** empty log message ***
-
-1993-10-19  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: *** empty log message ***
-
-1993-10-14  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: *** empty log message ***
-
-1993-10-14  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: *** empty log message ***
-
-1993-09-14  David J. MacKenzie  <djm@gnu.org>
-
-	* doc/bison.texinfo: *** empty log message ***
-
-1993-09-13  Noah Friedman  <friedman@gnu.org>
-
-	* Makefile.in: *** empty log message ***
-
-1993-09-10  Richard Stallman  <rms@gnu.org>
-
-	* src/conflicts.c: *** empty log message ***
-
-	* src/system.h: entered into RCS
-
-1993-09-10  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.1: entered into RCS
-
-1993-09-06  Noah Friedman  <friedman@gnu.org>
-
-	* src/version.c: entered into RCS
-
-1993-09-06  Noah Friedman  <friedman@gnu.org>
-
-	* Makefile.in: *** empty log message ***
-
-1993-07-30  David J. MacKenzie  <djm@gnu.org>
-
-	* Makefile.in: *** empty log message ***
-
-1993-07-24  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: *** empty log message ***
-
-1993-07-24  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: *** empty log message ***
-
-1993-07-08  David J. MacKenzie  <djm@gnu.org>
-
-	* Makefile.in: *** empty log message ***
-
-1993-07-04  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: *** empty log message ***
-
-1993-07-04  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: *** empty log message ***
-
-1993-06-26  David J. MacKenzie  <djm@gnu.org>
-
-	* src/getargs.c: entered into RCS
-
-1993-06-26  David J. MacKenzie  <djm@gnu.org>
-
-	* doc/bison.texinfo: *** empty log message ***
-
-	* doc/bison.1: New file.
-
-1993-06-25  Richard Stallman  <rms@gnu.org>
-
-	* src/getargs.c: New file.
-
-1993-06-16  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: *** empty log message ***
-
-1993-06-16  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: *** empty log message ***
-
-1993-06-03  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.s1: New file.
-
-1993-06-03  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.texinfo: *** empty log message ***
-
-1993-06-03  Richard Stallman  <rms@gnu.org>
-
-	* bison.simple: New file.
-
-1993-05-19  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.texinfo: New file.
-
-1993-05-07  Noah Friedman  <friedman@gnu.org>
-
-	* Makefile.in: *** empty log message ***
-
-1993-04-28  Noah Friedman  <friedman@gnu.org>
-
-	* src/reader.c: *** empty log message ***
-
-1993-04-23  Noah Friedman  <friedman@gnu.org>
-
-	* src/alloc.h: entered into RCS
-
-1993-04-20  David J. MacKenzie  <djm@gnu.org>
-
-	* src/version.c: *** empty log message ***
-
-	* src/files.c, src/allocate.c:
-	entered into RCS
-
-	* src/reader.c: *** empty log message ***
-
-	* src/lex.c: entered into RCS
-
-	* src/conflicts.c: New file.
-
-	* src/symtab.c: entered into RCS
-
-	* src/alloc.h: New file.
-
-	* src/LR0.c: entered into RCS
-
-1993-04-18  Noah Friedman  <friedman@gnu.org>
-
-	* src/reader.c: New file.
-
-	* src/version.c: *** empty log message ***
-
-1993-04-18  Noah Friedman  <friedman@gnu.org>
-
-	* Makefile.in: *** empty log message ***
-
-1993-04-17  Noah Friedman  <friedman@gnu.org>
-
-	* Makefile.in: *** empty log message ***
-
-1993-04-15  Richard Stallman  <rms@gnu.org>
-
-	* src/main.c, src/files.c:
-	New file.
-
-1993-04-15  Noah Friedman  <friedman@gnu.org>
-
-	* configure.in: entered into RCS
-
-	* configure.in: *** empty log message ***
-
-	* configure.in: New file.
-
-1993-04-14  Richard Stallman  <rms@gnu.org>
-
-	* Makefile.in: New file.
-
-1993-04-13  Richard Stallman  <rms@gnu.org>
-
-	* src/version.c: New file.
-
-1993-03-25  Richard Stallman  <rms@gnu.org>
-
-	* src/output.c: entered into RCS
-
-1992-09-25  Richard Stallman  <rms@gnu.org>
-
-	* configure.bat: entered into RCS
-
-1992-06-22  Richard Stallman  <rms@gnu.org>
-
-	* src/vmsgetargs.c: entered into RCS
-
-1992-06-22  Richard Stallman  <rms@gnu.org>
-
-	* doc/bison.rnh: entered into RCS
-
-1992-04-20  David J. MacKenzie  <djm@gnu.org>
-
-	* README: entered into RCS
-
-1992-01-22  Richard Stallman  <rms@gnu.org>
-
-	* src/machine.h: entered into RCS
-
-1991-12-21  Richard Stallman  <rms@gnu.org>
-
-	* src/lalr.c, src/closure.c:
-	entered into RCS
-
-1991-12-20  Richard Stallman  <rms@gnu.org>
-
-	* src/state.h: entered into RCS
-
-1991-12-18  Richard Stallman  <rms@gnu.org>
-
-	* src/print.c, src/nullable.c, src/derives.c:
-	entered into RCS
-
-1991-11-03  David J. MacKenzie  <djm@gnu.org>
-
-	* src/warshall.c, src/types.h, src/symtab.h, src/lex.h, src/gram.c, src/gram.h, src/files.h:
-	entered into RCS
-
-1988-09-09  Richard Stallman  <rms@gnu.org>
-
-	* src/bison.hairy: entered into RCS
-
-1987-12-16  Richard Stallman  <rms@gnu.org>
-
-	* REFERENCES: entered into RCS
-
-
-	-----
-
-	Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996,
-	1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
-	Software Foundation, Inc.
-
-	Copying and distribution of this file, with or without
-	modification, are permitted provided the copyright notice and this
-	notice are preserved.
+	maint: get gpl-3.0 from gnulib
+	* bootstrap.conf (gnulib_modules): Add gpl-3.0.
+	* doc/gpl-3.0.texi: Remove from version control, now that
+	we get it via gnulib.
+	* doc/.gitignore: Ignore it.
diff --git a/ChangeLog-1998 b/ChangeLog-1998
new file mode 100644
index 0000000..f34e2a3
--- /dev/null
+++ b/ChangeLog-1998
@@ -0,0 +1,1500 @@
+1998-01-04  J.J. van der Heijden  <J.J.vanderHeijden@student.utwente.nl>
+
+	* src/files.c (openfiles) [_WIN32 && !__CYGWIN32__]: Use TEMP or
+	Temp to find a temporary directory, if possible.  Do not unlink
+	files while they are open.
+
+1997-08-25  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/reader.c (stack_offset;): Change some warni to warns.
+
+	* src/lex.c (literalchar): Use warns, not warni.
+
+1997-06-28  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/bison.simple: Add a Bison version comment.
+
+	* Makefile.in (bison_version): New variable.
+	(dist): Use that variable.
+	(bison.s1): Substitute the Bison version into bison.simple.
+
+	* src/main.c (fatal, warn, berror): Use program_name.
+
+1997-06-18  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* Makefile.in: new.h renamed to alloc.h.
+	* src/*.c: src/new.h renamed to src/alloc.h.
+
+	* src/alloc.h: Renamed from src/new.h.
+
+1997-06-15  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/main.c (fatal, warn, berror): Make error messages standard.
+	(toomany): Improve error message text.
+
+1997-05-24  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/lex.c (literalchar): Fix the code for escaping \, " and '.
+
+1997-05-23  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/lex.c (lex): Avoid trouble when there are many chars
+	to discard in a char literal with just several chars in it.
+
+1997-05-17  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/bison.simple: Use malloc, if using alloca is troublesome.
+	(YYSTACK_USE_ALLOCA): New flag macro.
+	Define it for some systems and compilers.
+	(YYSTACK_ALLOC): New macro.
+	(yyparse): Use YYSTACK_ALLOC to allocate stack.
+	If it was malloc'd, free it.
+
+1997-05-02  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/bison.simple [_AIX]: Don't include malloc.h.
+
+1997-04-23  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/bison.simple (alloca) [__hpux]: Always define as
+	__builtin_alloca.
+
+1997-04-22  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/bison.simple (__yy_memcpy): Declare arg `count' as unsigned
+	int.
+	(yyparse): Cast third arg to __yy_memcpy to unsigned int.
+
+	* src/bison.simple (alloca) [__hpux]: Include alloca.h (right for
+	HPUX 10) instead of declaring alloca (right for HPUX 9).
+
+1997-01-02  Richard Stallman  <rms@ethanol.gnu.ai.mit.edu>
+
+	* src/allocate.c [__STDC__ or _MSC_VER]:
+	Declare calloc and realloc to return void *.
+
+	* Makefile.in (dist): Explicitly check for symlinks, and copy them.
+
+1996-12-17  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (yyparse): If __GNUC__ and YYPARSE_PARAM are
+	both defined, declare yyparse to have a void * argument.
+
+1996-12-17  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/system.h [_MSC_VER]: Include stdlib.h and process.h.
+	[_MSC_VER] (getpid): Define as macro--translate it to _getpid.
+
+	* src/reduce.c (nbits): Add some casts.
+
+	* src/main.c (main): Return FAILURE as a value.
+	(printable_version): Declare arg as int, not char.
+
+	* src/files.c [_MSC_VER] (XPFILE, XPFILE1): Define, if not already
+	defined.
+
+1996-12-16  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/main.c (printable_version): Use type `int' for the arg.
+
+1996-08-12  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/bison.simple: Test _MSDOS as well as _MSDOS_.
+
+1996-07-31  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/bison.simple [__sun && __i386]: Include alloca.h.
+
+1996-07-30  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* src/bison.simple: Test _MSDOS_, not MSDOS.
+
+1996-06-01  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
+
+	* All files: Insert `_' macro around many string constants.
+
+	* src/system.h [HAVE_LOCALE_H]: Include locale.h.
+	[! HAVE_LOCALE_H] (setlocale): Define as no-op.
+	[ENABLE_NLS]: Include libintl.h.
+	[ENABLE_NLS] (gettext): Define.
+	[! ENABLE_NLS] (bintextdomain, textdomain, _): Consolation definitions.
+	(N_, PACKAGE, LOCALEDIR): New macros.
+
+	* src/main.c (main): Call setlocale, bindtextdomain and textdomain.
+
+	* POTFILES.in: New file.
+
+	* Makefile.in (allocate.o): Define target explicitly.
+
+1996-06-01  Jim Meyering  <meyering@na-net.ornl.gov>
+
+	* Makefile.in (CFLAGS): Set to @CFLAGS@.
+	(LDFLAGS): Set to @LDFLAGS@.
+	(configure): Run autoconf only if preceding `cd' succeeds.
+	(src/bison.s1): Redirect output to temporary file then move the
+	temporary to the target, rather than redirecting directly to
+	src/bison.s1.
+	(clean): Remove config.status and config.log.
+	(distclean): Don't remove config.status here.
+
+1996-05-12  Jim Meyering  <meyering@na-net.ornl.gov>
+
+	* src/bison.simple (__yy_memcpy) [__cplusplus]: Reorder declarations
+	of variables f and t.
+
+1996-05-11  Richard Stallman  <rms@delasyd.gnu.ai.mit.edu>
+
+	* Version 1.25 released.
+
+	* Makefile.in (dist): Don't use $(srcdir).
+
+	* src/bison.simple (__yy_memcpy): Really reorder the args, as was
+	supposedly done on Feb 14 1995.
+	(yyparse): Calls changed accordingly.
+
+1996-01-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/output.c (output_rule_data): Test YYERROR_VERBOSE in the
+	conditional around the definition of ttyname.
+
+1995-12-28  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Fix line numbers in #line commands.
+
+1995-12-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (YYPARSE_PARAM_DECL): In C++, make it always
+	null.
+	(YYPARSE_PARAM_ARG): New macro.
+	(yyparse): Use YYPARSE_PARAM_ARG.
+
+1995-10-15  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/version.c: Version now 1.25.
+
+	* src/main.c (warn): Set `failure'.
+
+1995-08-01   Wilfred J. Hansen  <wjh+@cmu.edu>
+
+	* src/bison.cld, src/getargs.c, src/vmsgetargs.c: Added -n, -k,
+	and -raw switches.
+	(noparserflag, toknumflag, rawtoknumflag): New variables.
+
+	* src/conflicts.c (resolve_sr_conflict): Remove use of alloca.
+
+	* src/files.c (openfiles, open_extra_files, done):  Add faction flag
+	and actfile file.  Handle noparserflag.  Both for -n switch.
+
+	* src/lex.c: Include getopt.h.  Add some extern decls.
+	(safegetc): New function to deal with EOF gracefully.
+	(literalchar); new function to deal with reading \ escapes.
+	(lex): Use literalchar.
+	(lex): Implemented "..." tokens.
+	(literalchar, lex, parse_percent_token): Made tokenbuffer
+	always contain the token.  This includes growing the token
+	buffer while reading an integer.
+	(parse_percent_token): Replaced if-else statement with percent_table.
+	(parse_percent_token): Added % declarations as another
+	way to specify the flags -n, -l, and -r.  Also added hooks for
+	-d, -k, -y, -v, -t, -p, -b, -o, but implementation requires
+	major changes to src/files.c.
+	(lex) Retain in the incoming stream a character following
+	an incorrect '/'.
+	(skip_white_space, lex):  Revised most error messages
+	and changed fatal to warn to avoid aborting.
+	(percent_table):  Added %thong declarations.
+
+	* src/lex.h: Added THONG and NOOP for alias processing.
+	Added SETOPT for the new code that allows setting options with %flags.
+
+	* src/main.c (main): If reader sees an error, don't process the
+	grammar.
+	(fatals): Updated to not use VARARGS1.
+	(printable_version, int_to_string, warn, warni, warns, warnss)
+	(warnsss): New error reporting functions.  Avoid abort for error.
+
+	* src/output.c (output_headers, output_trailers, output, output_gram)
+	(output_rule_data): Implement noparserflag variable.
+	Implement toknumflag variable.
+	(output): Call reader_output_yylsp to output LTYPESTR.
+
+	* src/reader.c (reader_output_yylsp): New function.
+	(readgram): Use `#if 0' around code that accepted %command inside
+	grammar rules: The documentation doesn't allow it, and it will
+	fail since the %command processors scan for the next %.
+	(parse_token_decl): Extended the %token declaration to allow a
+	multi-character symbol as an alias.
+	(parse_thong_decl): New function.
+	(read_declarations): Added %thong declarations.
+	(read_declarations): Handle NOOP to deal with allowing %
+	declarations as another means to specify the flags.
+	(readgram): Allow %prec prior to semantics embedded in a rule.
+	(skip_to_char, read_declarations, copy_definition)
+	(parse_token_decl, parse_start_decl, parse_type_decl)
+	(parse_assoc_decl, parse_union_decl, parse_expect_decl)
+	(get_type_name, copy_guard, copy_action, readgram)
+	(get_type, packsymbols): Revised most error messages.  Changed
+	`fatal' to `warnxxx' to avoid aborting for error.  Revised and use
+	multiple warnxxx functions to avoid using VARARGS1.
+	(read_declarations): Improve the error message for an invalid
+	character.  Do not abort.
+	(read_declarations, copy_guard, copy_action): Use
+	printable_version to avoid unprintable characters in printed
+	output.
+	(parse_expect_decl): Error if argument to %expect exceeds 10
+	digits.
+	(parse_token_decl, parse_assoc_decl, parse_type_decl, get_type):
+	Allow the type of a non-terminal can be given more than once, as
+	long as all specifications give the same type.
+
+	* src/reduce.c (reduce_grammar): Revise an error message.
+	(print_notices): Remove final `.' from error message.
+
+	* src/symtab.h (SALIAS): New #define for adding aliases to %token.
+	(struct bucket): Added `alias' field.
+
+1995-05-03  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Change distribution terms.
+
+	* src/version.c: Version now 1.23.  No, 1.24.
+
+1995-02-23  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/files.c: Test __VMS_POSIX as well as VMS.
+
+1995-02-14  Jim Meyering <meyering@comco.com>
+
+	* src/bison.simple (__yy_memcpy): Renamed from __yy_bcopy to avoid
+	confusion.  Reverse FROM and TO arguments to be consistent with
+	those of memcpy.
+
+1994-11-10  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>
+
+	* Makefile.in (DISTFILES): Include install-sh, not install.sh.
+	Include NEWS.
+
+	* configure.in: Update to Autoconf v2 macro names.
+
+1994-10-04  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>
+
+	* Makefile.in (prefix, exec_prefix): Let configure set them.
+
+1994-09-28  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>
+
+	* Makefile.in: Set datadir to $(prefix)/share.
+
+1994-07-12  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/reader.c (reader): Rename undefined-token token to
+	`$undefined.'.
+
+1994-05-05  David J. MacKenzie  <djm@nutrimat.gnu.ai.mit.edu>
+
+	* Makefile.in (DISTFILES): Add install.sh.
+	(install): Remove chmod commands.
+
+1994-03-26  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Fix #line commands.
+
+1994-03-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/conflicts.c (print_reductions): Increment both fp1 and fp2
+	while printing reductions in multi-rule case.
+
+1994-01-02  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (LDFLAGS): Make it empty by default.
+	(bison): Use CFLAGS.
+
+1993-11-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (YYLEX): Take notice of YYLEX_PARAM.
+
+1993-10-18  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (YYPARSE_PARAM_DECL): Always define this.
+
+1993-10-14  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (yyparse): Support YYPARSE_PARAM.
+
+1993-09-13  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* Makefile.in (check): New target.
+
+1993-09-10  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/conflicts.c (alloca): #undef before defining.
+
+	* src/system.h (bcopy): Don't define if already defined.
+
+1993-09-06  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* Version 1.22 released.
+
+	* mkinstalldirs: New file.
+
+	* Makefile.in (dist): Use .gz for extension, not .z.
+	(DISTFILES): New variable.
+	(dist): Use it instead of explicit file list.
+	Try to link each file separately, then copy file if ln fails.
+	(installdirs): Use mkinstalldirs script.
+
+1993-07-29  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
+
+	* Makefile.in (config.status): Run config.status --recheck, not
+	configure, to get the right args passed.
+
+1993-07-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (yyparse): Init yychar1 to avoid warning.
+
+1993-07-04  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (yyparse): Don't set yyval when yylen is 0.
+
+1993-06-26  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
+
+	* src/getargs.c (getargs): Exit after printing the version number.
+	Add --help and -h options.
+	(usage): New function.
+
+1993-06-25  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/getargs.c (longopts): Allow `output' as an alternative.
+
+1993-06-16  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (yyparse): Conditionalize the entire call to
+	yyoverflow, not just two arguments in it.
+
+1993-06-03  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple [__hpux] (alloca): Don't specify arg types.
+
+1993-05-07  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* Makefile.in (install): Depend on `uninstall' and `installdirs'.
+	(installdirs): New target.
+
+1993-04-28  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* src/reader.c:  Remove declaration of atoi.
+
+1993-04-23  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* src/new.h [!__STDC__] (FREE): Check x != 0.
+	Make expr to call `free' evaluate to 0.
+
+1993-04-20  David J. MacKenzie  <djm@kropotkin.gnu.ai.mit.edu>
+
+	* src/files.c [MSDOS]: Use xmalloc, not malloc.
+	* src/allocate.c (xmalloc): Renamed from mallocate.  Remove old
+	wrapper.
+	* src/conflicts.c, src/symtab.c, src/files.c, src/LR0.c,
+	src/new.h: Change callers.
+	* src/allocate.c (xrealloc): New function.
+	* src/new.h: Declare it.
+	* src/lex.c, src/reader.c: Use it.
+
+1993-04-18  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* Version 1.21 released.
+
+	* src/reader.c : Don't declare `realloc'.
+
+	* Makefile.in (bison.s1): use `rm -f' since it's quieter.
+	(dist): make gzipped tar file.
+
+1993-04-16  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* Makefile.in (Makefile, config.status, configure): New targets.
+
+1993-04-15  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/main.c: Don't declare `abort'.
+
+	* src/files.c: Don't declare `exit'.
+
+1993-04-15  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* configure.in: Add AC_CONST.
+
+1993-04-14  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (all): Depend on bison.s1.
+
+1993-04-13  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Version 1.20 released.
+
+1993-03-24  Richard Stallman  <rms@wookumz.gnu.ai.mit.edu>
+
+	* src/output.c (output_headers): Rename yynerrs if -p.
+
+1993-03-18  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* src/system.h: Don't try to include stdlib.h unless HAVE_STDLIB_H
+	is defined.
+
+	* configure.in: Check for stdlib.h.
+
+1993-03-17  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple [__hpux, not __GNUC__]: Declare alloca.
+	(yyparse): When printing the expected token types for an error,
+	Avoid negative indexes in yycheck and yytname.
+
+1993-03-13  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (files.o, .c.o): Put CPPFLAGS and CFLAGS last.
+
+1993-03-01  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Test __sgi like __sparc.
+
+1993-02-17  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/conflicts.c (resolve_sr_conflict): Add extra parens in
+	alloca call.
+
+	* src/bison.simple [__GNUC__] (yyparse): Declare with prototype.
+
+1993-01-15  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/conflicts.c (print_reduction): Near end, increment fp2 when
+	mask recycles.
+
+1993-01-13  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (bison.s1): New target.  Modifies bison.simple.
+	(install): Install bison.s1, without changing it.
+	(clean): Delete bison.s1.
+
+1993-01-04  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/reader.c (reader): Put Bison version in comment in output
+	file.
+
+1992-12-22  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/files.c (openfiles): Use .output, not .out, for outfile,
+	regardless of spec_name_prefix.
+
+1992-12-15  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/output.c (output_gram): Include yyrhs in the same #if as
+	yyprhs.
+
+1992-12-15  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
+
+	* src/output.c (output): output directives checking for
+	__cplusplus as well as __STDC__ to determine when to define
+	"const" as an empty token.  (Patch from Wolfgang Glunz
+	<wogl@sun11a.zfe.siemens.de>)
+
+1992-12-08  David J. MacKenzie  <djm@kropotkin.gnu.ai.mit.edu>
+
+	* src/system.h, src/conflicts.c: Replace USG with HAVE_STRING_H
+	and HAVE_MEMORY_H.
+
+1992-11-21  David J. MacKenzie  <djm@goldman.gnu.ai.mit.edu>
+
+	* Makefile.in: Set and use $(MAKEINFO).
+
+1992-11-20  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/files.c (done) [MSDOS]: Delete the tmpdefsfile with the
+	rest.
+
+1992-10-08  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (dist): Put configure.bat in the distribution.
+
+1992-10-01  David J. MacKenzie  <djm@goldman.gnu.ai.mit.edu>
+
+	* Makefile.in (install): cd to $(srcdir) before installing info
+	files.
+
+1992-09-30  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (files.o): Supply $(DEFS), and $(CPPFLAGS).
+
+1992-09-25  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Version 1.19 released.
+
+	* src/reader.c (parse_union_decl): Fix ending of C++ comment;
+	don't lose the char after the newline.
+
+	* configure.bat: New file.
+
+1992-09-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/conflicts.c: Check for using alloca.h as getopt.c does.
+
+1992-09-06  Karl Berry  <karl@hayley>
+
+	* src/files.c (openfiles): open `fdefines' after we have assigned
+	a name to `tmpdefsfile', and only if `definesflag' is set.
+	(done): only create the real .tab.h file if `definesflag' is set.
+	* src/reader.c (packsymbols): don't close `fdefines' here.
+
+1992-09-05  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/files.c (openfiles): Open fdefines as temp file, like
+	ftable.
+	(done): Copy temp defines file to real one, like main output file.
+
+1992-08-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (dist): Don't release mergedir.awk
+	(install): Use sed, not awk.  Don't depend on mergedir.awk.
+	* mergedir.awk: File effectively deleted.
+
+1992-07-29  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Test __sparc along with __sparc__.
+
+1992-07-11  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/lex.c (skip_white_space): Count \n just once at end of c++
+	comment.
+
+1992-06-26  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Comment fix; #line command updated.
+
+1992-06-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (install): Specify full new file name for the
+	executable.
+
+1992-06-22  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (dist): Include bison.rnh in distribution.
+
+Sun Jun 21 22:42:13 1992 Eric Youngdale <youngdale@v6550c.nrl.navy.mil>
+
+	Clean up rough edges in VMS port of bison, add support for
+	remaining command line options.
+
+	* src/bison.cld: Add /version, /yacc, /file_prefix, and
+	/name_prefix switches.
+
+	* src/build.com: General cleanup: add logic to automatically sense
+	which C compiler is present; add code to cwd to the directory that
+	contains bison sources; do not define XPFILE, XPFILE1
+	(correct defaults are applied in src/file.c).
+
+	* src/files.c: Append _tab, not .tab when using /file_prefix under
+	VMS.
+
+	* src/system.h: Include string.h instead of strings.h (a la USG).
+
+	* src/vmsgetargs.c: Add support for all switches added to
+	src/bison.cld.
+
+1992-06-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (install): Always specify new file name for install.
+	Redirect awk output to temp file and install that.
+
+1992-05-27  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (yyparse): Make yybackup and yyerrlab1 always
+	be used.
+
+1992-05-22  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (dist): Depend on bison.info
+	(bison.info): Delete spurious <.
+
+1992-05-17  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (.c.o): New rule.  Use $(DEFS) directly.
+	(CFLAGS): Use just -g by default.
+	(CDEBUG): Variable deleted.
+
+1992-05-07  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/reader.c (copy_guard): Fix typo skipping comment.
+
+1992-05-04  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Version 1.18.
+
+	* src/getargs.c (getargs): Change '0' to 0 in case for long
+	options.
+
+1992-04-19  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/reader.c (packsymbols): Handle -p when declaring yylval.
+
+1992-04-18  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/output.c (output_gram): Output #endif properly at end of
+	decl.
+
+1992-03-30  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Version 1.17.
+
+	* Makefile.in (clean): Don't delete configuration files or TAGS.
+	(distclean): New target; do delete those.
+
+1992-03-28  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/output.c (output_gram): Conditionalize yyprhs on YYDEBUG.
+
+	* src/LR0.c (augment_automaton): If copying sp->shifts to insert
+	new shift, handle case of inserting at end.
+
+1992-03-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/lex.c (skip_white_space): Handle C++ comments.
+	* src/reader.c (copy_definition, parse_union_decl, copy_guard):
+	(copy_action): Likewise.
+
+1992-03-08  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (YYPOPSTACK): Fix typo.
+
+1992-02-29  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (install): Install bison.info* files one by one.
+
+1992-02-28  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
+
+	* src/bison.1: Document long options as starting with `--', not
+	`+'.
+
+1992-02-01  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/getargs.c (getargs): Accept value 0 from getopt_long.
+
+1992-01-30  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in (mostlyclean): Renamed from `clean'.
+	(clean): Renamed from 'distclean'.  Dep on mostlyclean, not
+	realclean.
+	(realclean): Dep on clean.
+
+1992-01-27  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Use malloc, not xmalloc, and handle failure
+	explicitly.
+
+1992-01-26  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/conflicts.c (total_conflicts): Delete unused arg to fprintf.
+
+1992-01-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Version 1.16.
+
+1992-01-06  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile (distclean): Depend on clean, not realclean.  Don't rm
+	TAGS.
+	(realclean): rm TAGS here.
+
+	* src/symtab.c (free_symtab): Don't free the type names.
+
+1991-12-29  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/machine.h: MSDOS has 32-bit ints if __GO32__.
+
+1991-12-25  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
+
+	* src/bison.simple [_AIX]: Indent `#pragma alloca', so old C
+	compilers don't choke on it.
+
+1991-12-23  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/getopt.c, src/getopt1.c, src/getopt.h: Link them to standard
+	source location.
+	* src/alloca.c: Likewise.
+	* Makefile.in (dist): Copy those files from current dir.
+
+	* src/getargs.c: Update usage message.
+
+	* src/LR0.c (augment_automaton): Put new shift in proper order.
+
+1991-12-20  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/conflicts.c: Use memcpy if ANSI C library.
+
+	* src/closure.c (set_fderives): Delete redundant assignment to
+	vrow.
+
+	* src/closure.c (print_firsts): Fix bounds and offset checking
+	tags.
+
+	* src/closure.c (tags): Declare just once at start of file.
+
+	* src/LR0.c (allocate_itemsets): Eliminate unused var max.
+	(augment_automaton): Test sp is non-null.
+
+	* src/lalr.c (initialize_LA): Make the vectors at least 1 element
+	long.
+
+	* src/reader.c (readgram): Remove separate YYSTYPE default for
+	MSDOS.
+
+1991-12-18  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/print.c (print_grammar): Don't print disabled rules.
+
+1991-12-17  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/lex.c (lex): Parse hex escapes properly.
+	Handle \v when filling token_buffer.
+
+	* src/lex.c: Include new.h.
+	(token_buffer): Change to a pointer.
+	(init_lex): Allocate initial buffer.
+	(grow_token_buffer): New function.
+	(lex, parse_percent_token): Use that.
+
+	* src/reader.c (read_declarations): Call open_extra_files just
+	once.
+	(parse_token_decl): Don't free previous typename value.  Don't
+	increment nvars if symbol is already a nonterminal.
+	(parse_union_decl): Catch unmatched close-brace.
+	(parse_expect_decl): Null-terminate buffer.
+	(copy_guard): Set brace_flag for {, not for }.
+
+	* src/reader.c: Fix %% in calls to fatal.
+
+	* src/reader.c (token_buffer): Just one extern decl, at top level.
+	Declare as pointer.
+
+	* src/symtab.c (free_symtab): Free type_name fields.  Free symtab
+	itself.
+
+1991-11-25  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Handle alloca for AIX.
+
+	* Makefile.in (mandir): Compute default using manext.
+
+1991-11-02  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
+
+	* Update all files to GPL version 2.
+
+1991-09-06  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple (__yy_bcopy): Use builtin if GCC version 2.
+
+1991-08-26  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/reader.c (parse_assoc_decl): Error if same symbol gets two
+	precs.
+
+1991-08-26  David J. MacKenzie  <djm@pogo.gnu.ai.mit.edu>
+
+	* Makefile.in, configure: Only put $< in Makefile if using VPATH,
+	because older makes don't understand it.
+
+1991-08-23  David J. MacKenzie  <djm@apple-gunkies>
+
+	* src/conflicts.c [_AIX]: #pragma alloca.
+	* src/reduce.c: Don't define TRUE and FALSE if already defined.
+
+1991-08-12  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile.in: Add deps on system.h.
+	(install): Add some deps.
+
+1991-08-02  David J. MacKenzie  <djm@apple-gunkies>
+
+	* Makefile.in (dist): Include texinfo.tex.
+
+	* configure: Create config.status.  Remove it and Makefile if
+	interrupted while creating them.
+
+1991-08-01  David J. MacKenzie  <djm@apple-gunkies>
+
+	* configure: Check for +srcdir etc. arg and look for
+	Makefile.in in that directory.  Set VPATH if srcdir is not `.'.
+	* Makefile.in (prefix): Renamed from DESTDIR.
+
+1991-07-31  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/print.c (print_grammar): Make output prettier.  Break lines.
+
+1991-07-30  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/print.c (print_grammar): New function.
+	(verbose): Call it instead of printing token names here.
+
+1991-07-22  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/vmsgetargs.c (spec_name_prefix, spec_file_prefix): Define
+	variables.
+
+1991-07-10  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
+
+	* configure, Makefile.in: $(INSTALLPROG) -> $(INSTALL),
+	$(INSTALLTEXT) -> $(INSTALLDATA).
+
+1991-07-09  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
+
+	* src/bison.simple: Don't include malloc.h if __TURBOC__.
+
+1991-07-06  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>
+
+	* Replace Makefile with configure and Makefile.in.  Update README
+	with current compilation instructions.
+
+1991-07-01  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/reader.c (reader): Make the output define YYBISON.
+
+1991-06-20  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>
+
+	* Makefile (MANDIR, MANEXT): Install man page in
+	/usr/local/man/man1/bison.1 by default, instead of
+	/usr/man/manl/bison.l, for consistency with other GNU programs.
+	* Makefile: Rename BINDIR et al. to lowercase to conform to
+	GNU coding standards.
+	(install): Make man page non-executable.
+
+1991-05-31  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile (bison.info): New target.
+	(realclean): New target.
+
+1991-05-02  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/bison.simple: Use YYPRINT to print a token, if it's defined.
+
+1991-04-29  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/lalr.c (transpose): Rename R to R_arg.
+	(initialize_LA): Avoid shadowing variable j.
+
+	* src/reader.c (packsymbols): Avoid shadowing variable i.
+
+	* src/files.c: Declare exit and perror.
+
+	* src/machine.h: Define MAXSHORT and MINSHORT for the eta-10.
+
+1991-04-02  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* src/allocate.c (mallocate): Always allocate at least one byte.
+
+1991-03-19  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
+
+	* Makefile (dist): Put alloca.c into distribution.
+
+1991-03-06  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/print.c (print_actions): Nicer output for final states.
+
+1991-02-21  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/output.c (output_rule_data): Break lines in yytline based on
+	hpos.
+
+1991-02-07  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/bison.simple (yyparse): Move decl of yylsa before use.
+
+1991-01-15  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* Version 1.14.
+
+	* src/output.c (output_rule_data): Handle NULL in tags[i].
+
+1991-01-11  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/bison.simple: On MSDOS, include malloc.h.
+
+1990-12-29  David J. MacKenzie  <djm@wookumz.ai.mit.edu>
+
+	* src/files.c: Use `mallocate' instead of `xmalloc' so no extra
+	decl is needed.
+
+1990-12-19  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/reader.c (readgram): Alternate YYSTYPE defn for MSDOS.
+	* src/files.c [MSDOS]: Declare xmalloc.
+
+1990-12-13  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/output.c (output_rule_data): Put all symbols in yytname.
+
+	* src/bison.simple (yyparse): Delete extra fprintf arg
+	when printing a result of reduction.
+
+1990-12-10  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/reader.c (packsymbols): Don't declare yylval if pure_parser.
+
+1990-10-30  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* Version 1.12.
+
+	* src/LR0.c (augment_automaton): Fix bugs adding sp2 to chain of
+	shifts.
+
+1990-10-23  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/bison.simple: Don't define alloca if already defined.
+
+1990-10-21  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/getopt.c: On VMS, use string.h.
+
+	* src/main.c (main): Return type int.
+
+1990-09-10  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/output.c (output_headers): Output macro defs for -p.
+
+	* src/reader.c (readgram): Handle consecutive actions.
+
+	* src/getargs.c (getargs): Rename -a to -p.
+	* src/files.c (openfiles): Change names used for -b.
+
+1990-08-27  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/reduce.c (reduce_grammar_tables): Don't map rlhs of disabled
+	rule.
+
+1990-08-26  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/closure.c (print_firsts, print_fderives): Use BITISSET to
+	test bits.
+
+1990-08-23  Richard Stallman  <rms@mole.ai.mit.edu>
+
+	* src/closure.c (print_firsts): vrowsize => varsetsize.
+	(print_fderives): rrowsize => rulesetsize.
+
+1990-08-10  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple (alloca): Don't define if already defined.
+	(__yy_bcopy): Alternate definition for C++.
+
+1990-07-11  David J. MacKenzie  <djm@albert.ai.mit.edu>
+
+	* src/getargs.c (getargs): Mention +yacc in usage message.
+
+1990-07-10  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (parse_token_decl, copy_action): Set
+	value_components_used if appropriate.
+	(readgram): Inhibit output of YYSTYPE definition in that case.
+
+1990-06-30  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/output.c (output_parser): Define YYPURE if pure, and not
+	otherwise.  Don't define YYIMPURE.
+	* src/bison.simple: Adjust conditionals accordingly.
+	* src/bison.simple (YYLEX): If locations not in use, don't pass
+	&yylloc.
+
+1990-06-28  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/getargs.c (longopts): Add `yacc'.
+
+1990-06-28  David J. MacKenzie  <djm@apple-gunkies>
+
+	* src/getargs.c (getargs): Add long options.
+	* Makefile: Link with getopt1.o and add getopt1.c and getopt.h to
+	dist.
+
+	* Move version number and description back into version.c from
+	Makefile and getargs.c.
+	* Makefile (dist): Extract version number from version.c.
+
+1990-06-26  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/output.c (output): Always call output_gram.
+	* src/bison.simple (yyparse): Print rhs and lhs symbols of
+	reduction rule.
+
+1990-06-21  David J. MacKenzie  <djm@albert.ai.mit.edu>
+
+	* src/main.c: New global var `program_name' to hold argv[0] for
+	error messages.
+	* src/allocate.c, src/files.c, src/getargs.c, src/reader.c: Use
+	`program_name' in messages instead of hardcoded "bison".
+
+1990-06-20  David J. MacKenzie  <djm@albert.ai.mit.edu>
+
+	* Makefile: Specify Bison version here.  Add rule to pass it to
+	version.c.  Encode it in distribution directory and tar file names.
+	* src/version.c: Use version number from Makefile.
+	* src/getargs.c (getargs): Print additional text that used to be
+	part of version_string in version.c.  Use -V instead of -version
+	to print Bison version info.  Print a usage message and exit if
+	given an invalid option.
+
+1990-06-19  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple: Fix a #line.
+
+	* Makefile (INSTALL): New parameter.
+	(install): Use that.
+	(CFLAGS): Move definition to top.
+
+1990-06-17  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (parse_type_decl): Ignore semicolon.
+	Remove excess % from error messages.
+
+1990-06-16  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Version 1.11.
+
+	* Makefile (install): Ensure installed files readable.
+
+Tue Jun 12 12:50:56 EDT 1990 Jay Fenlason <hack@ai.mit.edu>
+
+	* src/getargs.c: Declare spec_file_prefix
+
+	* src/lex.c (lex): \a is '\007' instead of '007'
+
+	* src/reader.c: include machine.h
+
+	* src/files.h: Declare extern spec_name_prefix.
+
+	Trivial patch from Thorsten Ohl <td12@ddagsi3.bitnet>
+
+1990-05-31  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Version 1.10.
+
+	* src/bison.simple (YYBACKUP, YYRECOVERING): New macros.
+	(YYINITDEPTH): This is what used to be YYMAXDEPTH.
+	(YYMAXDEPTH): This is what used to be YYMAXLIMIT.
+	If the value is 0, use the default instead.
+	(yyparse): Return 2 on stack overflow.
+
+1990-05-30  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple (YYERROR): Jump to new label; don't print error
+	message.
+	(yyparse): Define label yyerrlab1.
+
+1990-05-16  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/files.c (openfiles): Support -b.
+	* src/getargs.c (getargs): Likewise.
+
+	* src/reader.c (readgram): Error if too many symbols.
+
+	* src/lex.c (lex): Handle \a.  Make error msgs more reliable.
+	* src/reader.c (read_declarations): Make error msgs more reliable.
+
+1990-05-13  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Version 1.09.
+
+	* src/reduce.c (reduce_grammar_tables): Fix backward test.
+
+1990-05-12  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Makefile (bison-dist.*): Rename targets and files to bison.*.
+	(bison.tar): Make tar file to unpack into subdirectory named `bison'.
+
+1990-04-30  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reduce.c (reduce_grammar_tables): Set rlhs to -1 for useless
+	rules.
+	* src/nullable.c (set_nullable): Ignore those rules.
+	* src/derives.c (set_derives): Likewise.
+
+1990-04-23  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple (yyparse): Mention rule number as well as line
+	number.
+
+1990-03-29  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple (__yy_bcopy): New function.
+	(yyparse): Use that, not bcopy.
+
+1990-03-28  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/print.c (print_actions): Don't alter i and j spuriously when
+	errp==0.
+
+1990-03-12  Jim Kingdon  <kingdon@pogo.ai.mit.edu>
+
+	* src/bison.simple [__GNUC__]: Use builtin_alloca.
+
+1990-03-07  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Makefile (install): Use mergedir.awk to process bison.simple
+	for installation.
+
+	* src/bison.simple (yyparse): New feature to include possible valid
+	tokens in parse error message.
+
+1990-03-03  Richard Stallman  <rms@geech>
+
+	* Version 1.08.
+
+1990-02-26  Jim Kingdon  <kingdon@pogo.ai.mit.edu>
+
+	* src/print.c (print_actions)
+	* src/conflicts.c (print_reductions): Change "shift %d" to
+	"shift, and go to state %d" and "reduce %d" to "reduce using rule %d"
+	and "goto %d" to "go to state %d".
+	* src/print.c (print_core): Change "(%d)" to "(rule %d)".
+
+1990-02-20  Jay Fenlason  <hack@wookumz.ai.mit.edu>
+
+	* src/bison.simple:  Comment out unused yyresume: label.
+
+1990-02-09  Jay Fenlason <hack@wookumz.ai.mit.edu>
+
+	* src/bison.simple : surround all declarations and (remaining)
+	uses of yyls* and yylloc with #ifdef YYLSP_NEEDED This will
+	significantly cut down on stack usage, and gets rid of
+	unused-variable msgs from GCC.
+
+1990-01-31  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/files.c (done) [VMS]: Don't delete files that weren't used.
+	[VMS]: Let user override XPFILE and XPFILE1.
+
+1990-01-03  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Version 1.07.
+
+1989-12-16  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/gram.c (dummy): New function.
+
+	* src/reader.c (readgram): Detect error if two consec actions.
+
+1989-11-15  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reduce.c (reduce_grammar_tables): Update rline like other
+	tables.
+
+	* Makefile (install): Install the man page.
+
+1989-11-11  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/output.c (output_rule_data): Write #if YYDEBUG around yyrline.
+
+1989-10-18  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Version 1.06.
+
+	* src/vmsgetargs.c (getargs): Downcase specified output file name.
+
+1989-10-13  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (readgram): Warn if there is no default to use for
+	$$ and one is needed.
+
+1989-09-29  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Version 1.05.
+
+	* src/vmsgetargs.h (getargs): Process outfile option.
+
+1989-09-08  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Version 1.04.
+
+	* src/reader.c (parse_union_decl): Count newlines even in
+	comments.
+
+1989-09-06  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/files.c (openfiles): short_base_length was always ==
+	base_length.
+
+1989-08-24  Richard Stallman  <rms@apple-gunkies.ai.mit.edu>
+
+	* Version 1.03.
+
+	* src/files.c (openfiles): Write output into same dir as input, by
+	default.
+
+1989-08-23  Jay Fenlason  <hack@gnu>
+
+	* Makefile: Include system.h in bison-dist.tar
+
+1989-08-15  Richard Stallman  <rms@hobbes.ai.mit.edu>
+
+	* version 1.03.
+
+	* src/reader.c (reader): Output LTYPESTR to fdefines
+	only after reading the grammar.
+
+1989-08-06  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (read_declarations): Put space before comment
+	to avoid bug in Green Hills C compiler.
+
+1989-06-19  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/allocate.c (xmalloc): New function.
+
+1989-06-16  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/build.com: Compile and link reduce.c.
+
+1989-06-09  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reduce.c (reduce_grammar_tables): Adjust start_symbol when
+	#s change.
+
+1989-05-27  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (copy_definition, copy_guard): Don't object to
+	\-newline inside strings.
+
+1989-05-22  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/files.c (openfiles): Alternate file names for MSDOS.
+	(open_extra_files): Likewise.
+	(done): On MSDOS, unlink temp files here, not in openfiles.
+
+	* src/machine.h (BITS_PER_WORD): 16 on MSDOS.
+	(MAXTABLE): Now defined in this file.
+
+	* src/system.h: New file includes system-dependent headers.
+	All relevant .c files include it.
+
+1989-04-27  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/version.c: Version 1.01.
+
+1989-04-18  Randall Smith  <randy@apple-gunkies.ai.mit.edu>
+
+	* src/conflicts.c (total_conflicts): Fixed typo in yacc style
+	output; mention conflicts if > 0.
+
+1989-04-15  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (packsymbols): Start new symbols after 256.
+
+1989-04-12  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (reader): Always assign code 256 to `error' token.
+	Always set `translations' to 1 so this code gets handled.
+	* src/bison.simple (YYERRCODE): Define it.
+
+1989-04-11  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/conflicts.c: If GNU C, use builtin alloca.
+
+	* Makefile (install): Delete parser files before copying them.
+
+1989-03-30  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/getargs.c (getargs): Turn off checking of name Bison was
+	invoked by.
+
+	* Makefile (dist): Include ChangeLog in distrib.
+
+1989-03-23  Jay Fenlason  <hack@apple-gunkies.ai.mit.edu>
+
+	* src/LR0.c src/closure.c src/conflicts.c src/derives.c
+	src/files.c src/getargs.c src/lalr.c src/lex.c src/main.c
+	src/nullable.c src/output.c src/print.c src/reader.c src/reduce.c
+	src/symtab.c src/warshall.c: A first pass at getting gcc -Wall to
+	shut up.  Mostly declared functions as void, etc.
+
+	* src/reduce.c moved 'extern int fixed_outfiles;' into print_notices
+	where it belongs.
+
+1989-03-01  Randall Smith  <randy@apple-gunkies.ai.mit.edu>
+
+	* src/types.h, src/symtab.h, src/state.h, src/new.h,
+	src/machine.h, src/lex.h, src/gram.h, src/files.h, src/closure.c,
+	src/vmsgetargs.c, src/warshall.c, src/symtab.c, src/reduce.c,
+	src/reader.c, src/print.c, src/output.c, src/nullable.c,
+	src/main.c, src/lex.c, src/lalr.c, src/gram.c, src/getargs.c,
+	src/files.c, src/derives.c, src/conflicts.c, src/allocate.c,
+	src/LR0.c, Makefile, src/bison.simple: Changed copyright notices
+	to be in accord with the new General Public License.
+	* COPYING: Made a link to the new copying file.
+
+1989-02-22  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/new.h (FREE): Alternate definition for __STDC__ avoids error
+	if `free' returns void.
+
+1989-02-21  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (read_declarations): Double a `%' in a format string.
+	(copy_definition, parse_start_decl, parse_token_decl): Likewise.
+	(parse_type_decl, parse_union_decl, copy_guard, readgram, get_type).
+	(copy_action): change a `fatal' to `fatals'.
+
+	* src/lalr.c (map_goto): Initial high-end of binary search was off
+	by 1.
+
+1989-02-18  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple [sparc]: Include alloca.h.
+
+1989-02-15  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (packsymbols): Write decl of yylval into .tab.h file.
+
+1989-01-28  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple: Avoid comments on `#line' lines.
+
+	* src/reader.c (LTYPESTR): Rearrange to avoid whitespace after
+	\-newline.
+
+1989-01-09  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/conflicts.c (total_conflicts): if -y, use output syntax
+	POSIX wants.
+	* src/reduce.c (print_notices): likewise.
+
+	* src/lex.c (lex): Handle \v, and \x hex escapes.
+
+	* src/reader.c (reader): Merge output_ltype into here.  Don't
+	output YYLTYPE definition to .tab.h file unless the @ construct is
+	used.
+
+	* src/bison.simple: Define YYERROR, YYABORT, YYACCEPT here.
+	* src/reader.c (output_ltype): Don't output them here.
+
+	* src/bison.simple: YYDEBUG now should be 0 or 1.
+	* src/output.c (output): For YYDEBUG, output conditional to define it
+	only if not previously defined.
+
+1989-01-02  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple (yyparse) [YYPURE]: Add local yynerrs.
+	(yydebug): Declare global, but don't initialize, regardless of
+	YYPURE.
+	(yyparse): Don't declare yydebug here.
+
+1988-12-22  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reduce.c (print_notices): Typo in message.
+
+1988-12-11  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/output.c (pack_table): Free only nonzero the elts of froms &
+	tos.
+
+1988-12-08  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/gram.c (rprecsym): New vector indicates the %prec symbol for
+	a rule.
+	* src/reader.c (packgram): Allocate it and fill it in.
+	* src/reduce.c (inaccessable_symbols): Use it to set V1.
+	* src/reduce.c (print_results): Don't complain about useless token
+	if it's in V1.
+
+1988-12-05  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/machine.h (RESETBIT, BITISSET): New macros.
+	(SETBIT, WORDSIZE): Change to use BITS_PER_WORD.
+
+	* src/reduce.c: New file, by David Bakin.  Reduces the grammar.
+	* Makefile: Compile it, link it, put it in dist.
+
+	* src/main.c (main): Call reduce_grammar (in reduce.c).
+
+1988-11-17  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/conflicts.c: Don't declare alloca if including alloca.h.
+
+	* src/bison.cld: Define qualifiers `nolines', `debug'.
+	* src/vmsgetargs.c (getargs): Handle them.
+
+	* src/output.c (output_program): Notice `nolinesflag'.
+
+	* src/output.c (output_parser): Simplify logic for -l and #line.
+	Avoid writing EOF char into output.
+
+1988-10-12  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Implement `-l' option.
+	* src/getopt.c: Set flag `nolinesflag'.
+	* src/reader.c (copy_definition, parse_union_decl, copy_guard,
+	copy_action) Obey that flag; don't generate #line.
+	* src/output.c (output_parser): Discard #line's when copying the
+	parser.
+
+1988-09-12  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (copy_guard): Fix brace-counting for
+	brace-surrounded guard.
+
+1988-09-08  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/bison.simple: Correct number in #line command.
+	(yyparse): Call YYABORT instead of YYERROR, due to last change in
+	output_ltype.
+
+1988-09-05  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* Makefile: New variable LIBS.  Alternatives for USG.
+	* src/conflicts.c [USG]: Define bcopy.
+	* src/symtab.c [USG]: Include string.h instead of strings.h.
+
+	* src/conflicts.c [sparc]: Include alloca.h.
+
+1988-08-02  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (parse_token_decl): Ignore commas.
+
+1988-06-25  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/reader.c (output_ltype): Make YYERROR yacc-compatible (like
+	YYFAIL).
+
+1988-06-24  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
+
+	* src/getargs.c (getargs): -t sets debugflag.
+	Eliminate upper case duplicate options.
+	* src/output.c (output): If debugflag, output `#define YYDEBUG'.
+
+1988-05-26  Richard Stallman  <rms@frosted-flakes.ai.mit.edu>
+
+	* src/allocate.c (mallocate): New name for `allocate' (which loses
+	in VMS).  Calls changed in LR0.c, conflicts.c, symtab.c, new.h.
+
+	* src/getargs.c (getargs): If argv[0] is "yacc", set fixed_outfiles.
+
+1988-05-17  Richard Stallman  <rms@frosted-flakes.ai.mit.edu>
+
+	* src/conflicts.c: Declare alloca.
+	* src/reader.c: Declare realloc.
+	* src/warshall.c (TC): Fix one arithmetic op that was omitted last
+	time.
+
+1988-05-05  Richard Stallman  <rms@frosted-flakes.ai.mit.edu>
+
+	* src/bison.simple: Conditionalize most refs to yylsp on
+	YYLSP_NEEDED.
+	* src/reader.c (copy_guard, copy_action): Notice if `@' is used.
+	(reader): If it was, output `#define YYLSP_NEEDED'.
+
+1988-04-18  Richard Stallman  <rms@rice-krispies.ai.mit.edu>
+
+	* src/bison.simple: New variable yynerr counts calls to yyerror.
+
+	* src/lex.c (lex, case '='): Update lineno when skipping a newline.
+
+	* src/reader.c (parse_expect_decl): ungetc the char that ends the
+	number; don't read any further.  This handles multi-line comments
+	right and avoids incorrect lineno.
+
+	* src/reader.c: Delete duplicate decl of symval.
+
+	* src/warshall.c (RTC, TC): Cast ptrs to char *, not unsigned, for
+	arith.
diff --git a/ChangeLog-2012 b/ChangeLog-2012
new file mode 100644
index 0000000..789e760
--- /dev/null
+++ b/ChangeLog-2012
@@ -0,0 +1,24294 @@
+2012-01-15  Jim Meyering  <meyering@redhat.com>
+
+	maint: get fdl.texi from gnulib
+	* bootstrap.conf (gnulib_modules): Add fdl.
+	* doc/fdl.texi: Remove file.
+	* doc/.gitignore: Add it here.
+
+2012-01-15  Jim Meyering  <meyering@redhat.com>
+
+	maint: spell "file system" as two separate words
+	* doc/Doxyfile.in: Spell it "file system", to avoid a
+	"make syntax-check" failure.
+
+2012-01-15  Jim Meyering  <meyering@redhat.com>
+
+	maint: avoid "the the"
+	* djgpp/README.in: s/the the/the/
+	* src/parse-gram.c (lloc_default): Likewise.
+	* src/parse-gram.y (lloc_default): Likewise, and remove a
+	trailing space.
+
+2012-01-13  Jim Meyering  <meyering@redhat.com>
+
+	build: avoid warning from coverity about lbitset_elt_find
+	* lib/lbitset.c (lbitset_elt_find): Remove unnecessary test of "elt",
+	at a point where we know it is non-NULL, due to prior dereference.
+
+2012-01-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: factor copyright year.
+	* configure.ac: Use $PACKAGE_COPYRIGHT_YEAR instead of repeating it.
+
+2012-01-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: catch missing gnulib macros.
+	* configure.ac: Add m4_pattern_forbid.
+
+2012-01-11  Tim Landscheidt  <tim@tim-landscheidt.de>
+
+	java: remove used variable.
+	* data/lalr1.java (yyresult): remove, unused.
+
+2012-01-11  Akim Demaille  <demaille@gostai.com>
+
+	scanner: fix typo.
+	* src/scan-skel.l (@`): s/emtpy/empty/.
+	Reported by Tim Landscheidt.
+
+2012-01-06  Jim Meyering  <meyering@redhat.com>
+
+	build: avoid warnings about set-but-not-used variables
+	* lib/bitset_stats.c (bitset_stats_list): Remove declaration
+	and set of unused local, "type".
+	* lib/ebitset.c (ebitset_init): Likewise, for "size".
+	* lib/lbitset.c (lbitset_not): Likewise, for "elt".
+
+2011-08-21  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	tests: add -pedantic for --enable-gcc-warnings.
+	This should help to avoid some portability problems.  For example,
+	it would have revealed the empty unions fixed by the last patch
+	* configure.ac (WARN_CFLAGS_TESTS, WARN_CXXFLAGS_TEST): Implement.
+	* tests/synclines.at (AT_TEST_SYNCLINE): Avoid -pedantic warning
+	about an empty translation unit.
+
+2011-08-21  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	tests: fix empty unions.
+	Empty unions are not accepted by the ISO C99 grammar or by at
+	least some versions of Sun Studio.  Reported by Wolfgang S. Kechel
+	at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-08/msg00003.html>.
+	* NEWS (2.5.1): Document fix.
+	* THANKS (Wolfgang S. Kechel): Add.
+	* tests/existing.at (GNU Cim Grammar)
+	(GNU pic (Groff 1.18.1) Grammar.): Remove empty %union.
+
+2011-07-10  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	build: avoid YACC typo inherited from Autoconf.
+	The typo shows up in the `configure --help' output.  Reported by
+	W.C.A. Wijngaards and Paul Eggert at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-07/msg00000.html>.
+	* README-hacking (Release Procedure): Remind about updating
+	maintainer tools before a release.
+	* THANKS (W.C.A. Wijngaards): Add.
+	* configure.ac (AC_PREREQ): Set to 2.68, which fixes the YACC
+	typo.
+
+2011-07-10  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	build: create xz instead of bzip2 tarballs.
+	Suggested by Jim Meyering at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-06/msg00012.html>.
+	* README-hacking (Release Procedure): Update example.
+	* configure.ac (AM_INIT_AUTOMAKE): Replace dist-bzip2 with
+	dist-xz.
+
+2011-05-29  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: clean up references to `Locations Overview'.
+	* doc/bison.texinfo (Locations Overview): Rename node to...
+	(Locations): ... this, which is its section name.  Update menus to
+	match that and not to use the title `Tracking Locations', which is
+	a different section.
+
+2011-05-29  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: clean up references to `Tracking Locations'.
+	* doc/bison.texinfo (Locations): Rename node to...
+	(Tracking Locations): ... this, which is its section name, and
+	update all cross references.  The trouble is that there is another
+	node about locations.  Its section name is `Locations', which was
+	easily confused with the node name of this node.  Moreover, its
+	node name is `Locations Overview', which was mistakenly used to
+	label some cross references to this node.
+
+2011-05-29  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: clean up `Named References' a little.
+	* doc/bison.texinfo (Named References): Rename section to match
+	the node name, and update all cross references.  Don't use the
+	acronyms RHS and LHS given that we don't expand them anywhere in
+	the manual.  Try to use @samp and @code properly.  Mention that
+	named references are experimental as we've already stated in NEWS.
+	(Destructor Decl): Expand the only remaining use of RHS or LHS.
+
+2011-05-29  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: motivate named references.
+	Suggested by Hans Aberg at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-05/msg00008.html>.
+	* doc/bison.texinfo (Named References): Explain briefly how
+	they're better than the traditional positional references.
+
+2011-05-29  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: discuss named references after locations.
+	Reported by Hans Aberg at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-05/msg00008.html>.
+	* NEWS (2.5.1): Document.
+	* doc/bison.texinfo (Named References): Because it discusses
+	locations in addition to semantic values, move this subsection out
+	of the section `Defining Language Semantics', where locations have
+	not yet been introduced, to be a new section after the following
+	section, `Tracking Locations'.
+
+2011-05-29  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Prepare for the possibility of a 2.5.1 release.
+	* NEWS (2.5.1): New heading.
+
+2011-05-14  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Version 2.5.
+	* NEWS (2.5): Set date.
+
+2011-05-14  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Don't use IF_LINT in Bison sources.
+	It creates unnecessary differences between the sources that Bison
+	maintainers build and test (given that maintainers normally
+	configure with --enable-gcc-warnings) and the sources that Bison
+	users build.  Instead, use PACIFY_CC, which doesn't.  This change
+	fixes compiler warnings reported by Tys Lefering at
+	<http://lists.gnu.org/archive/html/bison-patches/2011-05/msg00004.html>.
+	* configure.ac: Don't AC_DEFINE lint regardless of the configure
+	options.  This change affects imported gnulib sources, where
+	IF_LINT still appears and depends on lint.
+	* src/scan-gram.l, src/scan-skel.l: Replace uses of IF_LINT with
+	PACIFY_CC.
+	* src/system.h (IF_LINT): Remove cpp macro.
+	(PACIFY_CC): New cpp macro.
+
+2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Fix precedence for end token.
+	Since Bison 2.3b, which restored the ability of precedence
+	directives to assign user token numbers, doing so for user token
+	number 0 has produced an assertion failure.
+	* NEWS (2.5): Document fix.
+	* src/symtab.c (symbol_user_token_number_set): In the case of the
+	end token, don't decrement ntokens if it was never incremented.
+	* tests/regression.at (Token number in precedence declaration):
+	Extend.
+
+2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Prepare for 2.5 release.
+	* NEWS (2.5_rc1): Rename back to...
+	(2.5): ... this, and unset date.
+
+2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Version 2.5_rc1.
+	* NEWS (2.5): Rename to...
+	(2.5_rc1): ... this, and set date.
+
+2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Pacify -DGNULIB_POSIXCHECK.
+	* bootstrap.conf (gnulib_modules): Add all modules suggested by
+	-DGNULIB_POSIXCHECK.
+	* src/files.c (file_name_split)
+	* src/getargs.c (getargs)
+	* src/location.c (boundary_set_from_string)
+	* src/output.c (token_definitions_output, output_skeleton)
+	* src/parse-gram.y (prologue_declaration)
+	* src/scan-gram.l (handle_syncline)
+	* src/symtab.c (symbol_new): Use mbschr and mbsrchr instead of
+	strchr and strrchr.  In the cases of command-line options, file
+	names, and thus locations, functionality may be improved.  In the
+	case of symbol names, there should be no functional difference as
+	all characters are ASCII, so the intended benefit is just warning
+	suppression.
+
+2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	* NEWS (2.5): Fix minor typos.
+
+2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: clean up quotation style in NEWS.
+	* NEWS (2.5): For multi-character tokens in example grammar rules,
+	use "token" not 'token'.  In English, use a consistent quotation
+	style; we might as well follow the precedent seen in info pages:
+	`quote' not "quote".
+
+2011-04-16  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	tests: pacify gcc 4.6.0's -Wunused-but-set-variable.
+	Reported by Jim Meyering at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-04/msg00002.html>.
+	* tests/actions.at
+	(Default %printer and %destructor for mid-rule values): Define
+	YYLLOC_DEFAULT so that it uses its Rhs argument.
+
+2011-04-16  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	glr.c: omit yyresolveLocations when locations are disabled.
+	This prevents gcc 4.6.0's -Wunused-but-set-variable from warning
+	about yyresolveLocations's local yyrhsloc.  When locations are
+	enabled, there's no such warning because YYLLOC_DEFAULT then uses
+	yyrhsloc.  Reported by Jim Meyering at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-04/msg00002.html>.
+	* data/glr.c (yyresolveLocations): Omit definition when locations
+	are disabled.
+	(yyresolveValue): Omit yyresolveLocations invocation when
+	locations are disabled.
+
+2011-04-16  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	gnulib, autoconf: update.
+	* README-hacking (Updating a submodule): Give advice on how to
+	determine the versions of gnulib and autoconf to which we should
+	update.
+	(Release Procedure): Note that submodules should be updated.
+	* bootstrap.conf (gnulib_modules): Rename pipe to spawn-pipe as
+	suggested in updated gnulib NEWS.
+	* gnulib: Choose a stable snapshot according to advice in Bison's
+	README-hacking.
+	* po/POTFILES.in (lib/pipe.c): Rename to...
+	(lib/spawn-pipe.c): ... this.
+	* src/output.c: Update to include spawn-pipe.h.
+	* submodules/autoconf: Update to latest for improvement in m4.m4
+	that excludes M4 with buggy strstr.  The only other changes to
+	files that we use are copyright updates.
+
+2011-04-09  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Fix missing updates to GPLv3.
+	Reported by Tys Lefering at
+	<http://lists.gnu.org/archive/html/bison-patches/2011-04/msg00000.html>.
+	* src/print-xml.c, src/print-xml.h: In these files.
+
+2011-03-27  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Add -Wconflicts-sr and -Wconflicts-rr.
+	Thus, conflict reports are now affected by -Werror and -Wnone
+	(unless %expect or %expect-rr is specified).  Reported by George
+	Neuner at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-08/msg00002.html>.
+	* NEWS (2.5): Document.
+	* doc/bison.texinfo (Bison Options): Document.
+	* src/complain.c, src/complain.h (set_warning_issued): Export
+	function.
+	* src/conflicts.c (conflicts_print): Suppress conflict report
+	based on -Wno-conflicts-sr and -Wno-conflicts-rr, and treat
+	conflicts as errors if -Werror.
+	* src/getargs.c (warnings_flag): Initialize with
+	warnings_conflicts_sr and warnings_conflicts_rr as well.
+	(warnings_args, warnings_types): Add entries for
+	warnings_conflicts_sr and warnings_conflicts_rr.
+	(usage): Update.
+	* src/getargs.h (enum warnings): Add entries for
+	warnings_conflicts_sr and warnings_conflicts_rr.
+	* tests/conflicts.at (-W versus %expect and %expect-rr): New test
+	group.
+	* tests/local.at (AT_BISON_CHECK_NO_XML): Update now that the
+	conflict report can produce a "warnings being treated as errors"
+	message.  Also, check that stderr is now fully scrubbed by -Wnone
+	when the exit status is 0.
+
+2011-03-27  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Pacify maintainer-check-posix.
+	Adding command-line options after the grammar file name is not
+	permitted, so disable checks that do that when
+	maintainer-check-posix is running.
+	* tests/local.at (AT_BISON_CHECK_NO_XML): Don't run the
+	problematic checks when POSIXLY_CORRECT=1.  Also, for readability,
+	remove an unnecessary m4_if.
+
+2011-03-27  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Add -Wother so -Wnone suppresses all warnings.
+	Reported by George Neuner at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-08/msg00002.html>.
+	* NEWS (2.5): Document.
+	* THANKS (George Neuner): Add.
+	* doc/bison.texinfo (Bison Options): Document.
+	* src/complain.c, src/complain.h
+	(warn_at, warn_at_indent, warn): Suppress warning if -Wno-other.
+	(midrule_value_at): New warning function, similar to yacc_at in
+	that it's controlled by its own warning category.
+	* src/getargs.c (warnings_flag): Initialize to warnings_other.
+	(warnings_args, warnings_types): Add entry for warnings_other.
+	(usage): Update.
+	* src/getargs.h (enum warnings): Add entry for warnings_other.
+	* src/gram.c (grammar_rules_useless_report): If -Wno-other, then
+	don't print useless rules.
+	* src/reader.c (symbol_should_be_used): Rather than adjusting the
+	return value based on whether midrule value warnings are enabled,
+	accept a new parameter for telling the caller whether true is
+	being returned for a potential midrule warning.
+	(grammar_rule_check): Use midrule_value_at for midrule value
+	warnings, and continue to use warn_at for all other warnings.  Let
+	them check whether the warnings are enabled.
+	* tests/local.at (AT_BISON_CHECK): Update documentation.
+	(AT_BISON_CHECK_NO_XML): Check that -Wnone and --warnings=none
+	disable all warnings exercised in the test suite.
+
+2011-03-27  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Don't let -Wnone disable -Werror.
+	Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2010-08/msg00009.html>.
+	* NEWS (2.5): Document.
+	* src/getargs.c (flags_argmatch): Accept a new argument that
+	specifies what flags "all" and thus "none" affect.
+	(FLAGS_ARGMATCH): Update flags_argmatch invocation.
+	* tests/input.at (-Werror is not affected by -Wnone and -Wall):
+	New test group.
+
+2011-03-27  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	* NEWS (2.5): Document fix for -Wno-CATEGORY.
+
+2008-11-21  Di-an Jan  <dianj@freeshell.org>
+
+	Implement no-XXX arguments for --warnings, --report, --trace.
+	* src/getargs.c (flags_argmatch): Handles no-XXX.
+	Fix typo in doxygen comment.
+
+2011-03-20  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: fix confusing citation of LAC publication.
+	Suggested by Akim Demaille.
+	* doc/bison.texinfo (LAC): Here.
+
+2011-03-20  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	lr.default-reductions: rename "full" value to "most".
+	Unlike "consistent" and "accepting", "full" doesn't answer the
+	question of "which states".
+	* doc/bison.texinfo (%define Summary): Update.
+	(Default Reductions): Update.
+	* src/print.c (print_reductions): Update.
+	* src/reader.c (prepare_percent_define_front_end_variables):
+	Update.
+	* src/tables.c (action_row): Update.
+	* tests/input.at (%define enum variables): Update.
+	* tests/reduce.at (%define lr.default-reductions): Update.
+
+2011-03-13  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	* src/parse-gram.c, src/parse-gram.h: Regenerate.
+
+2011-03-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	named references: fix double free.
+	In `rhs[name]: "a" | "b"', do not free "name" twice.
+	Reported by Tys Lefering.
+	<http://lists.gnu.org/archive/html/bug-bison/2010-06/msg00002.html>
+	* src/named-ref.h, src/named-ref.c (named_ref_copy): New.
+	* src/parse-gram.y (current_lhs): Rename as...
+	(current_lhs_symbol): this.
+	(current_lhs): New function.  Use it to free the current lhs
+	named reference.
+	* src/reader.c: Bind lhs to a copy of the current named reference.
+	* src/symlist.c: Rely on free (0) being valid.
+	* tests/named-refs.at: Test this.
+
+2011-03-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: style changes.
+	* tests/named-refs.at (Redundant words in LHS brackets)
+	(Unresolved references): here.
+
+2011-03-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	java: fix parser tracing bug.
+	* NEWS (2.5): Document.
+	* data/lalr1.java (YYParser::YYStack::print): Don't skip top
+	element.
+
+2011-03-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	java: finish fixing parser stack popping bug.
+	* NEWS (2.5): Document.
+	* data/lalr1.java (YYParser::YYStack::pop): Fix off-by-one error
+	in clearing the location stack.  Also fix pop function that
+	accepts no arguments.
+
+2011-03-06  Angelo Borsotti  <angelo.borsotti@gmail.com>  (tiny change)
+
+	java: fix parser stack popping bug.
+	Reported at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-02/msg00005.html>.
+	* THANKS (Angelo Borsotti): Add.
+	* data/lalr1.java (YYParser::YYStack::pop): Fix off-by-one error
+	in clearing the value stack.  Previously, the top element of the
+	stack wasn't cleared and so the value was not garbage collected.
+
+2011-03-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: cite publication for LAC.
+	* doc/bison.texinfo (LAC): Here.
+
+2011-03-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: clean up terminology for mysterious conflicts.
+	* doc/bison.texinfo (Mystery Conflicts): Rename node to...
+	(Mysterious Conflicts): ... this, which is already the section
+	title and the name used in the index.  Update all cross-references
+	to this node.  Also, don't imply that R/R conflicts are the only
+	kind of mysterious conflict.
+
+2011-03-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	lr.default-reductions: rename "all" value to "full".
+	States that shift the error token do not have default reductions,
+	and GLR disables some default reductions, so "all" was a misnomer.
+	* doc/bison.texinfo (%define Summary): Update.
+	(Default Reductions): Update.
+	* src/print.c (print_reductions): Update.
+	* src/reader.c (prepare_percent_define_front_end_variables):
+	Update.
+	* src/tables.c (action_row): Update.
+	* tests/input.at (%define enum variables): Update.
+	* tests/reduce.at (%define lr.default-reductions): Update.
+
+2011-03-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: create a new Tuning LR section in the manual.
+	And clean up all other documentation of the features described
+	there.
+	* NEWS (2.5): Tweak wording of lr.type and parse.lac entries a
+	bit, update the cross-references to the manual, and point out that
+	LAC has caveats.  Don't be so adamant that IELR+LAC=canonical LR.
+	That is, as the referenced section in the manual documents, LAC
+	does not fix infinite parsing loops on syntax errors.
+	* doc/bison.texinfo: Consistently drop the "(1)" suffix from LALR,
+	IELR, and LR in @cindex.
+	(%define Summary): Condense the entries for lr.default-reductions,
+	lr.keep-unreachable-states, lr.type, and parse.lac into brief
+	summaries, and cross-reference the appropriate subsections of
+	Tuning LR.  For parse.lac, mention that it's only implemented for
+	deterministic parsers in C.
+	(Error Reporting): When mentioning %error-verbose, mention LAC,
+	and add cross-reference to the LAC section.
+	(Tuning LR): New section with an extended version of the
+	documentation removed from %define Summary.  Change all
+	cross-references in the manual to point here instead of there.
+	(Calc++ Parser): When mentioning %error-verbose, mention LAC, and
+	add cross-reference to the LAC section.
+	(Table of Symbols): In %error-verbose and YYERROR_VERBOSE entries,
+	add cross-references to Error Reporting.
+	(Glossary): Capitalize entry titles consistently.  Add definitions
+	for "defaulted state" and "unreachable state".  Expand IELR
+	acronym in IELR's entry.
+
+2011-02-20  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: add bibliography to manual.
+	* doc/bison.texinfo (Mystery Conflicts): Cross-reference
+	bibliography instead of citing publications directly.
+	(Generalized LR Parsing): Likewise.
+	(Bibliography): New section.  Not all entries are cross-referenced
+	yet, but that will come in future patches.
+
+2011-02-19  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	java: test and document previous bug fix.
+	* NEWS (2.5): Document it.
+	* tests/java.at (_AT_DATA_JAVA_CALC_Y): To one of the yyerror
+	invocations, pass a location that spans multiple tokens.  Change
+	yyerror to report all of a location rather than just the begin
+	position.  Extend yylex and Position to count tokens on a line.
+	Remove getHashCode as it's unused.  Update all expected output.
+
+2011-02-19  Bernd Kiefer  <kiefer@dfki.de>  (tiny change)
+
+	java: fix location handling bug.
+	Reported at
+	<http://lists.gnu.org/archive/html/bison-patches/2011-02/msg00005.html>.
+	* data/lalr1.java (YYParser::yylloc): For non-empty RHS, fix
+	reversed access to location stack.
+	* THANKS (Bernd Kiefer): Add.
+
+2010-05-11  Akim Demaille  <demaille@gostai.com>
+
+	doc: please Emacs.
+	* doc/bison.texinfo (Local Variables): Move this after the
+	LocalWords, since the latter are looked for in the whole document,
+	while the former are looked for only at its end.
+	Require american spell checking.
+
+2011-02-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: clean up new subsections in manual.
+	* doc/bison.texinfo (%define Summary): Reword so it reads well as
+	a separate section.  For example, add an intro, and move most of
+	the text outside of the @deffn so it is not indented so far.
+	(%code Summary): Likewise.
+	(Table of Symbols): Reword %code entry to match the %code entry in
+	Decl Summary.
+
+2011-02-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: finish splitting apart the manual's Decl Summary section.
+	Suggested by Akim Demaille at
+	<http://lists.gnu.org/archive/html/bison-patches/2009-05/msg00013.html>.
+	* doc/bison.texinfo (Decl Summary): Extract most of the %define
+	entry into...
+	(%define Summary): ... this new subsection, and update all
+	cross-references.  For readability of the patches, rewriting of
+	the text so it makes sense as a separate subsection will come in a
+	later patch.  Moreover, the majority of the text describing the
+	various new LR features should likely move to another new section
+	somewhere.
+
+2011-02-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: begin to split apart the manual's Decl Summary section.
+	Discussed in thread starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2009-05/msg00013.html>.
+	* doc/bison.texinfo (Decl Summary): Extract most of the %code
+	entry into...
+	(%code Summary): ... this new subsection, and update all
+	cross-references.  For readability of the patches, rewriting of
+	the text so it makes sense as a separate subsection will come in a
+	later patch.
+
+2011-02-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: clean up naming of various Bison files.
+	The Bison manual's names for various files associated with a Bison
+	parser has devolved into inconsistency.  This patch makes the
+	naming consistent for the most important files.  First, it chooses
+	"grammar file" over "input file".  The former appears to be more
+	traditional in the Bison manual, and Bison has other input
+	files (skeletons).  Second, it chooses "parser implementation
+	file" over names like "parser file", "parser source file", "parser
+	source code file", and "parser output file".  The new name makes
+	it clearer where Bison generates the main parser implementation,
+	and it is easily distinguishable from "parser header file".
+	* doc/bison.texinfo: Implement throughout.
+
+2011-02-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: give credit to more of Bison's developers.
+	* doc/bison.texinfo (Introduction): Don't imply that only Robert
+	Corbett, Richard Stallman, and Wilfred Hansen have contributed to
+	Bison.  However, I don't have time to write a full history, so
+	just point readers to THANKS and ChangeLog.
+
+2011-02-06  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: document experimental features better.
+	* doc/bison.texinfo (Introduction): Say that IELR(1) and canonical
+	LR(1) are experimental.  Mention Java.  Normally experimental
+	features probably shouldn't be mentioned in the introduction.
+	However, if Bison's limitations to LALR(1), C, and C++ are so
+	important that they should be mentioned here, then it's important
+	to point out that Bison is beginning to escape those limitations.
+	Moreover, these particular experimental features have very little
+	chance of being removed.
+	* src/getargs.c (usage): Say that IELR(1) and canonical LR(1) are
+	experimental.
+
+2011-01-29  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Do not allow identifiers that start with a dash.
+	This cleans up our previous fixes for a bug whereby Bison
+	discarded `.field' in `$-1.field'.  The previous fixes were less
+	restrictive about where a dash could appear in an identifier, but
+	the restrictions were hard to explain.  That bug was reported and
+	this final fix was originally suggested by Paul Hilfinger.  This
+	also fixes a remaining bug reported by Paul Eggert whereby Bison
+	parses `%token ID -123' as `%token ID - 123' and handles `-' as an
+	identifier.  Now, `-' cannot be an identifier.  Discussed in
+	threads beginning at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-01/msg00000.html>,
+	<http://lists.gnu.org/archive/html/bug-bison/2011-01/msg00004.html>.
+	* NEWS (2.5): Update entry describing the dash extension to
+	grammar symbol names.  Also, move that entry before the named
+	references entry because the latter mentions the former.
+	* doc/bison.texinfo (Symbol): Update documentation for symbol
+	names.  As suggested by Paul Eggert, mention the effect of periods
+	and dashes on named references.
+	(Decl Summary): Update documentation for unquoted %define values,
+	which, as a side effect, can no longer start with dashes either.
+	* src/scan-code.l (id): Implement.
+	* src/scan-gram.l (id): Implement.
+	* tests/actions.at (Exotic Dollars): Extend test group to exercise
+	bug reported by Paul Hilfinger.
+	* tests/input.at (Symbols): Update test group, and extend to
+	exercise bug reported by Paul Eggert.
+	* tests/named-refs.at (Stray symbols in brackets): Update test
+	group.
+	($ or @ followed by . or -): Likewise.
+	* tests/regression.at (Invalid inputs): Likewise.
+
+2011-01-24  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	* data/yacc.c: Fix last apostrophe warning from xgettext.
+
+2011-01-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix minor problems encountered by a fresh bootstrap.
+	* data/glr.c, data/yacc.c: Do not use apostrophes in '#' comments,
+	as they confuse xgettext, which tries to parse them as C character
+	constants in a preprocessor directive.
+	* data/yacc.c (yy_lac): Don't use printf %d format on *yyesp, as
+	that expression might not promote to int on some platforms.
+	* src/parse-gram.c, src/parse-gram.h: Regenerate.
+
+2011-01-09  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Improve error messages for `$' or `@' followed by `.' or `-'.
+	Previously, for this special case of an invalid reference, the
+	usual "symbol not found in production:" was printed.  However,
+	because the symbol name was parsed as the empty string, that
+	message was followed immediately by a newline instead of a symbol
+	name.  In reality, this is a syntax error, so the reference is
+	invalid regardless of the symbols actually appearing in the
+	production.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2011-01/msg00012.html>.
+	* src/scan-code.l (parse_ref): Report the above case as a syntax
+	error.  Other than that, continue to handle this case like any
+	other invalid reference that Bison manages to parse because
+	"possibly meant" messages can still be helpful to the user.
+	* tests/named-refs.at ($ or @ followed by . or -): New test group.
+
+2011-01-08  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: don't use @acronym.
+	Lately, many GNU packages are dropping it.  See
+	<http://lists.gnu.org/archive/html/bison-patches/2011-01/msg00003.html>.
+	* doc/bison.texinfo: Remove all uses.
+
+2011-01-05  Alex Rozenman  <rozenman@gmail.com>
+
+	Do not allow identifiers that start with a negative number.
+	Reported by Paul Hilfinger as a side effect of named references
+	support at
+	<http://lists.gnu.org/archive/html/bug-bison/2011-01/msg00000.html>.
+	Suggested by Paul Eggert.
+	* src/scan-code.l ({letter}, {id}): Adjust lexical definitions.
+	* src/scan-gram.l ({letter}, {id}): Likewise.
+
+2011-01-03  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	* ChangeLog (2011-01-02): improve description.
+
+2011-01-03  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	maint: don't update copyright years in bootstrap.
+	* .x-update-copyright: Add entry for bootstrap.
+	* bootstrap: Remove 2011 from copyright years.  The bootstrap
+	version we're currently using comes from an older version of
+	gnulib.
+	* bootstrap.conf (bootstrap_sync): Add comments explaining this
+	issue.
+
+2011-01-02  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	maint: run "make update-copyright".
+
+2011-01-02  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	maint: prepare to use year ranges in copyright notices.
+	* README (Copyright statements): New section explaining the range
+	notation.  The GNU maintainers document requires this explanation:
+	<http://www.gnu.org/prep/maintain/maintain.html#Copyright-Notices>.
+	I copied our explanation from coreutils.
+	* build-aux/update-b4-copyright: Revert 2010-06-17 changes that
+	disabled Bison's automated use of ranges.
+	* cfg.mk (update-copyright-env): Likewise.
+
+2011-01-02  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Correct my email address.
+	* ChangeLog: In all recent entries.
+	* THANKS (Joel E. Denny): Here.
+
+2010-12-19  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: cleanup.
+	* NEWS (2.5): Try to sort entries according to how interesting
+	users might find them.
+
+2010-12-19  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: cleanup.
+	* NEWS (2.5): Make some minor improvements to wording, and format
+	entries more consistently.
+	* doc/bison.texinfo (Language and Grammar): Point out that IELR
+	and canonical LR are experimental features.
+	(Decl Summary): In list of %define variables, make wording more
+	consistent.  Improve discussion of using LALR for GLR.
+
+2010-12-19  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	parse.lac: document.
+	* NEWS (2.5): Add entry for LAC, and mention LAC in entry for
+	other corrections to verbose syntax error messages.
+	* doc/bison.texinfo (Decl Summary): Rewrite entries for
+	lr.default-reductions and lr.type to be clearer, to mention
+	%nonassoc's effect on canonical LR, and to mention LAC.  Add entry
+	for parse.lac.
+	(Glossary): Add entry for LAC.
+
+2010-12-11  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	parse.lac: implement exploratory stack reallocations.
+	* data/yacc.c: Rename %define variable parse.lac.es-capacity to
+	parse.lac.es-capacity-initial.  Accept parse.lac.memory-trace
+	with values of "failures" (default) or "full".
+	(b4_declare_parser_state_variables): Add yyesa, yyes, and
+	yyes_capacity variables.
+	(YYSTACK_USE_ALLOCA): Ignore it if LAC requested.
+	(YYSTACK_ALLOC, YYSTACK_FREE, YYSTACK_ALLOC_MAXIMUM): Define if
+	LAC requested.
+	(YYCOPY_NEEDED): New cpp macro.
+	(YYCOPY): Define if LAC requested.
+	(yy_lac_stack_realloc): New function implementing stack
+	reallocations.  Use YYMAXDEPTH for maximum stack size given that
+	the stack should never need to grow larger than the main state
+	stack needs to grow without LAC.
+	(YY_LAC_ESTABLISH): Update yy_lac invocation.
+	(yy_lac): Add arguments for exploratory stack memory data
+	recorded in the main parser.  Invoke yy_lac_stack_realloc when
+	reallocation is necessary.
+	(yysyntax_error): Add the same new arguments and pass them to
+	yy_lac.
+	(yypstate_delete): Free yyes if necessary.
+	(yyesa, yyes, yyes_capacity): #define these to yypstate members
+	in the case of push parsing.
+	(yyparse, yypush_parse): Initialize yyes and yyes_capacity.
+	Update yysyntax_error invocations.  At yyreturn, free yyes if
+	necessary.
+	* src/parse-gram.y: %define parse.lac full.
+	* tests/input.at (LAC: errors for %define): Extend for
+	parse.lac-memory-trace.
+	* tests/regression.at (LAC: Exploratory stack): Extend to check
+	that stack reallocs happen when expected.
+	(LAC: Memory exhaustion): Update to use YYMAXDEPTH and
+	parse.lac.es-capacity-initial.
+
+2010-12-11  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	parse.lac: implement as %define variable.
+	LAC = lookahead correction.  See discussion at
+	<http://lists.gnu.org/archive/html/bison-patches/2009-09/msg00034.html>.
+	However, one point there must be corrected: because of %nonassoc,
+	LAC is *not* always redundant for lr.type=canonical-lr.
+	* data/yacc.c: Accept values of "none" (default) or "full" for
+	parse.lac.  Accept %define parse.lac.es-capacity to specify
+	capacity of LAC's temporary exploratory stack.  It defaults to 20
+	and, for now, will not grow dynamically.
+	(b4_lac_flag, b4_lac_if): New m4 macros.  Evaluate as true for
+	parse.lac!=none.
+	(YYBACKUP): Invoke YY_LAC_DISCARD.
+	(YY_LAC_ESTABLISH, YY_LAC_DISCARD): New cpp macros that invoke
+	yy_lac and track when it needs to be invoked
+	(yy_lac): New function that, given the current stack, determines
+	whether a token can eventually be shifted.  Return status mimics
+	yyparse return status.
+	(yysyntax_error): Change yystate argument to yyssp so stack top
+	can be passed to yy_lac.  If LAC is requested, build expected
+	token list by invoking yy_lac for every token instead of just
+	checking the current state for lookaheads.  Return 2 if yy_lac
+	exhausts memory.
+	(yyparse, yypush_parse): Use local variable yy_lac_established and
+	cpp macros YY_LAC_ESTABLISH and YY_LAC_DISCARD to implement LAC.
+	Update yysyntax_error invocation.  Add yyexhaustedlab code if LAC
+	is requested.
+	* tests/conflicts.at (%nonassoc and eof): Extend to check the
+	effect of each of -Dlr.type=canonical-lr and -Dparse.lac=full.
+	(%error-verbose and consistent errors): Likewise.
+	(LAC: %nonassoc requires splitting canonical LR states): New test
+	group demonstrating how LAC can fix canonical LR.
+	* tests/input.at (LAC: Errors for %define): New test group.
+	* tests/regression.at (LAC: Exploratory stack): New test group.
+	(LAC: Memory exhaustion): New test group.
+
+2010-11-21  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	build: use gnulib's new bootstrap_sync option.
+	Now, whenever we update bison's copy of gnulib, bootstrap will
+	update itself the next time it's run.
+	* bootstrap: Copy from latest gnulib for bootstrap_sync support.
+	* bootstrap.conf (bootstrap_sync): Set to true.
+	* gnulib: Update to latest so bootstrap is in sync now.
+
+2010-11-07  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	yysyntax_error: adjust prior fixes for branch-2.5's lalr1.cc.
+	On master, there is no yychar in lalr1.cc, but there is on
+	branch-2.5, and the prior cherry-pick of "Fix handling of yychar
+	manipulation in user semantic actions" wasn't adjusted for that
+	difference.
+	* data/lalr1.cc (yy::parser::parse): Translate yychar before
+	every use of yytoken, and add comments explaining this approach.
+	* tests/conflicts.at (%error-verbose and consistent errors):
+	Extend to test yychar manipulation with lalr1.cc.
+
+2010-11-07  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	yysyntax_error: fix for consistent error with lookahead.
+	* NEWS (2.5): Document.
+	* data/yacc.c (yysyntax_error): In a verbose syntax error
+	message while in a consistent state with a default action (which
+	must be an error action given that yysyntax_error is being
+	invoked), continue to drop the expected token list, but don't
+	drop the unexpected token unless there actually is no lookahead.
+	Moreover, handle that internally instead of returning 1 to tell
+	the caller to do it.  With that meaning of 1 gone, renumber
+	return codes more usefully.
+	(yyparse, yypush_parse): Update yysyntax_error usage.  Most
+	importantly, set yytoken to YYEMPTY when there's no lookahead.
+	* data/glr.c (yyreportSyntaxError): As in yacc.c, don't drop the
+	unexpected token unless there actually is no lookahead.
+	* data/lalr1.cc (yy::parser::parse): If there's no lookahead,
+	set yytoken to yyempty_ before invoking yysyntax_error_.
+	(yy::parser::yysyntax_error_): Again, don't drop the unexpected
+	token unless there actually is no lookahead.
+	* data/lalr1.java (YYParser::parse): If there's no lookahead,
+	set yytoken to yyempty_ before invoking yysyntax_error.
+	(YYParser::yysyntax_error): Again, don't drop the unexpected
+	token unless there actually is no lookahead.
+	* tests/conflicts.at (%error-verbose and consistent
+	errors): Extend test group to further reveal how the previous
+	use of the simple "syntax error" message was too general.  Test
+	yacc.c, glr.c, lalr1.cc, and lalr1.java.  No longer an expected
+	failure.
+	* tests/java.at (AT_JAVA_COMPILE, AT_JAVA_PARSER_CHECK): Move
+	to...
+	* tests/local.at: ... here.
+	(_AT_BISON_OPTION_PUSHDEFS): Push AT_SKEL_JAVA_IF definition.
+	(AT_BISON_OPTION_POPDEFS): Pop it.
+	(AT_FULL_COMPILE): Extend to handle Java.
+
+2010-11-07  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	yysyntax_error: more preparation for readability of next patch.
+	There are no behavioral changes here.
+	* data/glr.c (yyreportSyntaxError): Reorganize.
+	* data/lalr1.cc (yy::parser::yysyntax_error_): Reorganize.
+	* tests/conflicts.at (%error-verbose and consistent errors):
+	Reorganize.
+
+2010-11-07  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	yysyntax_error: prepare for readability of next patches.
+	These are purely whitespace changes that result in ugly code
+	but that make the next couple of patches much easier to read.
+	* data/glr.c (yyreportSyntaxError): Reindent.
+	* data/lalr1.cc (yy::parser::yysyntax_error_): Reindent.
+	* data/lalr1.java (YYParser::yysyntax_error): Reindent.
+	* data/yacc.c (yysyntax_error): Reindent.
+
+2010-10-31  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	yysyntax_error: improve invocation readability.
+	* data/yacc.c (yyparse, yypush_parse): For yysyntax_error
+	invocation, get rid of the while loop, which is misleading
+	because there are really at most two iterations.
+
+2010-10-31  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	* ChangeLog: Correct some errors in previous entries.
+
+2010-10-17  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	maint: re-anchor all .gitignore entries.
+	* bootstrap: Copy from gnulib's latest for the fix to
+	automatically anchor entries it constructs.
+	* gnulib: Update to latest just so it has the same bootstrap.
+	* .gitignore, build-aux/.gitignore, doc/.gitignore:
+	* lib/.gitignore, m4/.gitignore, po/.gitignore:
+	* runtime-po/.gitignore: Re-anchor all entries.
+
+2010-10-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix portability problem on OpenBSD 4.7.
+
+	Jim Meyering reported this in
+	<http://lists.gnu.org/archive/html/bug-bison/2010-10/msg00007.html>.
+	* data/yacc.c: Use EXIT_SUCCESS as a witness for stdlib.h,
+	not _STDLIB_H.  EXIT_SUCCESS has been defined by the standard
+	for quite some time.
+	* src/parse-gram.c, src/parse-gram.h: Regenerate.
+	* tests/regression.at: Tamper with the renamed witness.
+
+	Adjust to recent changes to gnulib bootstrap.
+
+	* .cvsignore, build-aux/.cvsignore, doc/.cvsignore, etc/.cvsignore:
+	* examples/calc++/.cvsignore, lib/.cvsignore, m4/.cvsignore:
+	* po/.cvsignore, runtime-po/.cvsignore, src/.cvsignore:
+	* tests/.cvsignore: Remove; I don't use CVS to maintain Bison
+	anymore and don't know of anybody else who does.  If someone needs
+	these files, they can resurrect them.
+	* .gitignore, build-aux/.gitignore, doc/.gitignore, lib/.gitignore:
+	* m4/.gitignore, po/.gitignore, runtime-po/.gitignore:
+	Omit leading '/', since bootstrap omits it.
+	Adjust file names to match current contents better.
+	* bootstrap: Sync from gnulib: this contains the new gnulib_mk_hook
+	installed just for us.
+	* bootstrap.conf (excluded_files): Don't exclude codeset.m4,
+	glibc21.m4, inttypes_h.m4, size_max.m4, xsize.m4, as they are now
+	needed somehow.  Don't have time to look into why.
+	(gnulib_modules): Change malloc to malloc-gnu.  Do we really assume
+	the GNU malloc behavior, where malloc (0) != NULL unless we're
+	out of storage?  If not, we can omit malloc-gnu; but for now I left
+	it in to be safe.
+	(vc_ignore): Remove.
+	* README-hacking: Renamed from HACKING, since gnulib bootstrap now
+	uses that convention.
+
+2010-08-05  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Version 2.4.3.
+	* NEWS (2.4.3): Set date.
+
+2010-08-04  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	maint: add gettext version to release announcements.
+	Suggested by Paul Hilfinger at
+	<http://lists.gnu.org/archive/html/bison-patches/2010-07/msg00019.html>
+	<http://lists.gnu.org/archive/html/bison-patches/2010-08/msg00002.html>.
+	* cfg.mk (bootstrap-tools): Add gettext.
+
+2010-08-04  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	doc: fix -W and %expect documentation some.
+	* NEWS (2.4.3): Mention that there are documentation fixes.
+	* doc/bison.texinfo (Expect Decl): Make it clear that %expect
+	turns conflicts into errors not warnings.
+	(Shift/Reduce): Likewise.
+	(Bison Options): Don't mention -Wsyntax.  It doesn't exist.
+
+2010-08-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	-Werror: fix for rules useless in parser after conflicts.
+	* NEWS (2.4.3): Document fix.
+	* src/complain.c (error_message): Extend to handle incomplete
+	error messages so warn and warn_at can be used in more cases.
+	* src/gram.c (grammar_rules_useless_report): Use warn_at so that
+	-Werror is always obeyed.
+	* src/reduce.c (reduce_print): Use warn so that the "warnings
+	being treated as errors" message is printed consistently before
+	the first warning message.  This makes testing easier.
+	* tests/local.at (AT_BISON_WERROR_MSG): New macro.
+	(AT_BISON_CHECK_NO_XML): Extend to check -Werror and
+	--warnings=error when warnings appear in bison's stderr.
+
+2010-07-29  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	maint: enable gnits only at stable releases.
+	* configure.ac (AM_INIT_AUTOMAKE): Underscore or dash in a
+	version string should disable gnits.  Explain in comments.
+
+2010-07-28  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	i18n: update.
+	* po/POTFILES.in: Add src/graphviz.c.
+
+2010-07-28  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	i18n: fix for gnulib.
+	* po/POTFILES.in: Add remaining gnulib files that have
+	translatable strings.
+
+2010-07-25  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	maint: use announce-gen's new --mail-headers.
+	* HACKING (Announce): Update instructions.
+	* cfg.mk (announcement_Cc_): Define.
+	* configure.ac (AM_GNU_GETTEXT_VERSION): Update to 0.18 as
+	required by latest gnulib.
+	* gnulib: Update to latest.
+
+2010-07-24  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	tests: handle Valgrind that complains about >&-.
+	* tests/output.at (AT_CHECK_OUTPUT): Extend to accept pre-tests.
+	(Output files: -dv >&-): Skip test group if running
+	maintainer-check-valgrind.
+
+2010-06-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Update from GFDL GFDL 1.2 to 1.3.
+	* doc/bison.texinfo: Update GFDL version number.
+	* doc/fdl.texi: Update to version 1.3, taken from:
+	http://www.gnu.org/licenses/fdl.texi
+
+2010-06-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Do not use date ranges in copyright notices.
+	See http://www.gnu.org/prep/maintain/maintain.html#Copyright-Notices
+
+	* HACKING, Makefile.am, NEWS, PACKAGING, README, README-alpha:
+	* TODO, bootstrap, bootstrap.conf:
+	* build-aux/update-b4-copyright, cfg.mk, configure.ac:
+	* data/README, data/bison.m4, data/c++-skel.m4, data/c++.m4:
+	* data/c-skel.m4, data/c.m4, data/glr.c, data/glr.cc:
+	* data/java-skel.m4, data/java.m4, data/lalr1.cc:
+	* data/lalr1.java, data/location.cc:
+	* data/xslt/bison.xsl:
+	* data/xslt/xml2dot.xsl, data/xslt/xml2text.xsl:
+	* data/xslt/xml2xhtml.xsl, data/yacc.c, djgpp/Makefile.maint:
+	* djgpp/README.in, djgpp/config.bat, djgpp/config.sed:
+	* djgpp/config.site, djgpp/config_h.sed, djgpp/djunpack.bat:
+	* djgpp/subpipe.c, djgpp/subpipe.h:
+	* djgpp/testsuite.sed, doc/bison.texinfo:
+	* doc/refcard.tex, etc/README, etc/bench.pl.in:
+	* examples/calc++/Makefile.am, examples/extexi:
+	* lib/abitset.c, lib/abitset.h:
+	* lib/bbitset.h, lib/bitset.c, lib/bitset.h:
+	* lib/bitset_stats.c, lib/bitset_stats.h, lib/bitsetv-print.c:
+	* lib/bitsetv-print.h, lib/bitsetv.c, lib/bitsetv.h:
+	* lib/ebitset.c, lib/ebitset.h, lib/get-errno.c:
+	* lib/get-errno.h, lib/lbitset.c, lib/lbitset.h:
+	* lib/libiberty.h, lib/main.c, lib/timevar.c:
+	* lib/timevar.def, lib/timevar.h, lib/vbitset.c:
+	* lib/vbitset.h, lib/yyerror.c, m4/bison-i18n.m4:
+	* m4/c-working.m4, m4/cxx.m4, m4/subpipe.m4, m4/timevar.m4:
+	* src/AnnotationList.c, src/AnnotationList.h:
+	* src/InadequacyList.c, src/InadequacyList.h, src/LR0.c:
+	* src/LR0.h, src/Sbitset.c, src/Sbitset.h, src/assoc.c:
+	* src/assoc.h, src/closure.c, src/closure.h, src/complain.c:
+	* src/complain.h, src/conflicts.c, src/conflicts.h:
+	* src/derives.c, src/derives.h, src/files.c, src/files.h:
+	* src/flex-scanner.h, src/getargs.c, src/getargs.h:
+	* src/gram.c, src/gram.h, src/graphviz.c, src/ielr.c:
+	* src/ielr.h, src/lalr.c, src/lalr.h:
+	* src/location.c, src/location.h, src/main.c:
+	* src/muscle-tab.c, src/muscle-tab.h, src/named-ref.c:
+	* src/named-ref.h, src/nullable.c, src/nullable.h:
+	* src/output.c, src/output.h, src/parse-gram.y:
+	* src/print-xml.c, src/print-xml.h, src/print.c, src/print.h:
+	* src/print_graph.c, src/print_graph.h, src/reader.c:
+	* src/reader.h, src/reduce.c, src/reduce.h, src/relation.c:
+	* src/relation.h, src/scan-code.h, src/scan-code.l:
+	* src/scan-gram.h, src/scan-gram.l, src/scan-skel.h:
+	* src/scan-skel.l, src/state.c, src/state.h, src/symlist.c:
+	* src/symlist.h, src/symtab.c, src/symtab.h, src/system.h:
+	* src/tables.c, src/tables.h, src/uniqstr.c, src/uniqstr.h:
+	* tests/actions.at, tests/atlocal.in, tests/c++.at:
+	* tests/calc.at, tests/conflicts.at, tests/cxx-type.at:
+	* tests/existing.at, tests/glr-regression.at:
+	* tests/headers.at, tests/input.at, tests/java.at:
+	* tests/local.at, tests/named-refs.at:
+	* tests/output.at, tests/push.at, tests/reduce.at:
+	* tests/regression.at, tests/sets.at, tests/skeletons.at:
+	* tests/synclines.at, tests/testsuite.at, tests/torture.at:
+	* data/Makefile.am, data/location.cc, doc/Makefile.am, src/Makefile.am:
+	* tests/Makefile.am, lib/Makefile.am, examples/Makefile.am:
+	* etc/Makefile.am:
+	Don't use date ranges in copyright notices.
+
+2010-05-11  Akim Demaille  <demaille@gostai.com>
+
+	lalrl1.cc: give a chance to user defined YYLLOC_DEFAULT.
+	* data/lalr1.cc (YYLLOC_DEFAULT): Move its definition from the
+	header file to the implementation file, after the user %code
+	sections.
+	* NEWS (2.5): Document this.
+
+2010-05-07  Akim Demaille  <demaille@gostai.com>
+
+	c++: use YYRHSLOC.
+	* data/lalr1.cc (YYRHSLOC): New.
+	(YYLLOC_DEFAULT): Use it.
+	* data/glr.cc: If location_type was user defined, do not include
+	location.hh, and do not produce location.hh and position.hh.
+	* tests/calc.at (YYLLOC_DEFAULT): Use YYRHSLOC.
+	Check that glr.cc supports user defined location_type.
+	* NEWS: Document this.
+
+2010-05-10  Akim Demaille  <demaille@gostai.com>
+
+	doc: fix lalr1.cc documentation.
+	* doc/bison.texinfo (C++ Scanner Interface): Fix yylex signature.
+	(C++ Bison Interface): Fix lalr1.cc skeleton name.
+	(C++ Parser Interface): Fix semantic_type and location_type names.
+	Document yy::parser::token.
+	Reported by Jerry Quinn.
+
+2010-05-04  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: don't generate location.hh when location_type is defined
+	* data/bison.m4 (b4_percent_define_use): New.
+	(b4_percent_define_get): Use it.
+	Accept a default value.
+	* data/c++.m4: Do not provide a default value for the %define
+	variable location_type, rather, use b4_percent_define_get with a
+	default argument where its value is needed.
+	* data/lalr1.cc: Do not load location.cc (which outputs both
+	location.hh and position.hh) if the user defined location_type.
+	Do not include location.hh either.
+	* data/glr.cc: Likewise.
+
+2010-05-04  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: location_type: make sure we don't depend on loc.(begin|end).
+	* tests/calc.at (Span): Instead of begin/end, as in the built-in
+	location class, use first and last.
+	Define YYLLOC_DEFAULT to adjust to these changes.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Adjust to the
+	location_type changes.
+
+2010-05-04  Akim Demaille  <demaille@gostai.com>
+
+	tests: enhance AT_SYNCLINES_COMPILE.
+	* tests/synclines.at (AT_TEST_SYNCLINE): Move GCC 4.5 protection
+	into...
+	(AT_SYNCLINES_COMPILE): here.
+	Add more distcc patterns.
+
+2010-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	tests: fix maintainer-xml-check.
+	* data/xslt/xml2dot.xsl (xsl:template match="bison-xml-report"):
+	Update output to include comments now produced by --graph.
+	(xsl:template match="automaton"): As for --graph, name the
+	digraph after the grammar file.
+	* src/print-xml.c (escape_bufs): Enlarge array.
+	(print_xml): Add bug-report and url attributes to
+	bison-xml-report element.
+
+2010-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	In DOT output, convert from "/*" comments to "//" comments.
+	This handles the possibility that a "*/" might appear in
+	variable portions of those comments at some point in the future.
+	* src/graphviz.c (start_graph): Implement.
+
+2010-04-30  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Document that undefined %prec identifier warnings will remain.
+	* NEWS (2.4.3): Here.
+	(2.4.2): Here.
+
+2010-04-30  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	Revert 2009-12-30 change for undefined %prec token complaints.
+	That is, keep them as warnings because that should be sufficient
+	to satisfy POSIX without creating backward compatibility issues.
+	Suggested by Richard Stallman at
+	<http://lists.gnu.org/archive/html/bison-patches/2010-03/msg00033.html>.
+	* NEWS (2.5): Remove mention of complaint.
+	* src/reader.c (grammar_rule_check): Convert complaint back to
+	warning.
+	* tests/input.at (%prec's token must be defined): Update.
+
+2010-04-25  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	build: don't require src/bison during bootstrap.
+	Suggested by Eric Blake at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00003.html>.
+	* bootstrap.conf (bootstrap_epilogue): New function to make sure
+	src/parse-gram.[ch] are stamped later than src/parse-gram.y.
+
+2010-04-25  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	i18n: fix untranslatable string.
+	Reported by Goran Uddeborg at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00000.html>.
+	* src/muscle-tab.c (muscle_percent_define_insert): Here.
+
+2010-04-13  Akim Demaille  <demaille@gostai.com>
+
+	tests: calc: minor refactoring.
+	* tests/calc.at (_AT_DATA_CALC_Y): Simplify yylex.
+
+2010-04-13  Akim Demaille  <demaille@gostai.com>
+
+	tests: calc: simplify location management.
+	* tests/local.at (AT_LOC_PUSHDEF, AT_LOC_POPDEF): New.
+	(_AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS): Use them to
+	define the appropriate AT_LOC accessors.
+	* tests/calc.at: Use AT_LOC accessors.
+
+2010-04-13  Akim Demaille  <demaille@gostai.com>
+
+	test location_type.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS):
+	Define AT_LOCATION_TYPE_IF.
+	(_AT_BISON_OPTION_POPDEFS): Undefine AT_LOCATION_TYPE_IF.
+	* tests/calc.at (_AT_DATA_CALC_Y): When %define location_type is
+	used, provide a user location type and use it.
+	(Simple LALR1 C++ Calculator): Add a test case for location_type.
+
+2010-04-13  Akim Demaille  <demaille@gostai.com>
+
+	tests: check fclose's return value.
+	* tests/calc.at (_AT_DATA_CALC_Y): Check fclose's return status.
+
+2010-04-13  Akim Demaille  <demaille@gostai.com>
+
+	tests: don't depend on the actual location type.
+	* tests/calc.at: Use yy::parser::location_type rather than
+	yy::location, since the former is always right, and might point to
+	another type than the latter.
+
+2010-04-13  Akim Demaille  <demaille@gostai.com>
+
+	formatting changes.
+	* tests/calc.at: Formatting changes.
+
+2010-04-13  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: remove useless forward declaration.
+	* data/lalr1.cc: Include location.hh before stack.hh.
+	Remove the useless forward declarations of position and location.
+	Reported by Chris Morley.
+	* data/glr.cc: Likewise.
+
+2010-04-11  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	* NEWS (2.4.3): Mention fix for Sun Studio C++.
+
+2010-04-10  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	tests: fix for newer Sun Studio C++.
+	Reported by Dagobert Michelsen at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00023.html>.
+	* THANKS (Dagobert Michelsen): Add.
+	* configure.ac (AC_PREREQ): Set to 2.64 so we get the latest
+	Autoconf macro for handling the restrict keyword.
+	* gnulib: Update to latest, which no longer overrides that macro
+	from Autoconf.
+
+2010-04-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	portability: fix pointer arithmetic to conform to C standard.
+	Reported by Tys Lefering at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00035.html>.
+	This fix is already implemented in glr.c and does not apply to
+	lalr1.java.
+	* data/lalr1.cc (yy::parser::parse): Increase size of
+	yyerror_range and adjust subscripting so you don't have to
+	subtract one from the beginning of the array.
+	* data/yacc.c (b4_declare_parser_state_variables,
+	yyparse, yypush_parse): Likewise.
+
+2010-04-05  Akim Demaille  <demaille@gostai.com>
+
+	remove useless include.
+	* src/graphviz.h: Don't include stdbool.h.
+
+2010-04-05  Akim Demaille  <demaille@gostai.com>
+
+	graph: sign the output file.
+	* src/graphviz.c (start_graph): Issue comments about Bison.
+	Suggested by Tys Lefering.
+
+2010-03-31  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	portability: fix test suite for GCC 4.5's new #error message.
+	Reported by Tys Lefering at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00030.html>.
+	* NEWS (2.4.3): Mention.
+	* tests/synclines.at (AT_TEST_SYNCLINE): Implement.
+
+2010-03-30  Akim Demaille  <demaille@gostai.com>
+
+	fix comments.
+	* src/graphviz.h: Add missing license notice.
+	Document.
+
+2010-03-25  Akim Demaille  <demaille@gostai.com>
+
+	tests: fix 250: parse.error=verbose overflow.
+	* tests/regression.at (parse.error=verbose overflow): Avoid the
+	double inclusion of stdlib.h as it triggers hard errors.
+
+2010-03-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	portability: fix for BSD make.
+	Reported by Johan van Selst at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00016.html>.
+	* tests/Makefile.am ($(TESTSUITE)): Qualify package.m4 in
+	this dependency list as in package.m4's target rule.
+
+2010-03-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	portability: fix spawning on at least FreeBSD 8 and FreeBSD 9.
+	Reported by Johan van Selst at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00014.html>.
+	* NEWS (2.4.3): New.
+	* THANKS (Johan van Selst): Add.
+	* gnulib: Update to latest.
+
+2010-03-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	maint: update for changes to gnulib's announce-gen.
+	* HACKING (Announce): RELEASE_TYPE=major must now be written
+	RELEASE_TYPE=stable.
+
+2010-03-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Version 2.4.2.
+	* NEWS (2.4.2): Set version and date.  For the recent test suite
+	portability fixes, don't be so optimistic about their success
+	given the lack of feedback on the affected platforms.
+
+2010-02-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	tests: fix maintainer-xml-check for recent changes.
+	* tests/output.at (AT_CHECK_CONFLICTING_OUTPUT): Use
+	AT_BISON_CHECK_NO_XML rather than AT_BISON_CHECK because an
+	output file whose name conflicts with a previous output file
+	is now never generated.
+
+2010-02-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	portability: fix several issues with M4 subprocess.
+
+	M4's output pipe was not being drained upon fatal errors during
+	scan_skel.  As a result, broken-pipe messages from M4 were seen
+	on at least AIX, HP-UX, Solaris, and RHEL4, and this caused a
+	failure in the test suite.  The problem was that, on platforms
+	where the default disposition for SIGPIPE is ignore instead of
+	terminate, M4 sometimes saw fwrite fail with errno=EPIPE and
+	then reported it.  However, there's some sort of race condition,
+	because the new test group occasionally succeeded.
+	Reported by Albert Chin at
+	<http://lists.gnu.org/archive/html/bug-bison/2010-02/msg00004.html>.
+
+	There were also problems with the test suite livelocking on
+	Tru64 5.1b.  Reported by Didier Godefroy at
+	<http://lists.gnu.org/archive/html/bug-bison/2009-05/msg00005.html>.
+	Switching to create_pipe_bidi suggested by Akim Demaille.
+
+	To attempt to solve both of these problems, switch to gnulib's
+	create_pipe_bidi and register M4 process as a slave.  Along the
+	way, clean up file name conflict handling, which was affected by
+	the broken-pipe problem before the switch.
+	* NEWS (2.4.2): Document.
+	* THANKS (Didier Godefroy): Add.
+	* bootstrap.conf (gnulib_modules): Add pipe.
+	* gnulib: Update to latest to make sure we have all the latest
+	fixes.
+	* lib/Makefile.am (libbison_a_SOURCES): Remove subpipe.h and
+	subpipe.c.
+	* po/POTFILES.in (lib/subpipe.c): Remove.
+	* src/files.c (compute_output_file_names): Update invocations
+	of output_file_name_check.
+	(output_file_name_check): In the case that the grammar file
+	would be overwritten, use complain instead of fatal, but replace
+	the output file name with /dev/null.  Use the /dev/null solution
+	for the case of two conflicting output files as well because it
+	seems safer in case Bison one day tries to open both files at
+	the same time.
+	* src/files.h (output_file_name_check): Update prototype.
+	* src/output.c (output_skeleton): Use create_pipe_bidi and
+	wait_subprocess.  Assert that scan_skel completely drains the
+	pipe.
+	* src/scan-skel.l (at_directive_perform): Update
+	output_file_name_check invocation.
+	* tests/output.at (AT_CHECK_CONFLICTING_OUTPUT): Check that the
+	grammar file actually isn't overwritten.
+	(Conflicting output files: -o foo.y): Update expected output.
+	* tests/skeletons.at (Fatal errors but M4 continues producing
+	output): New test group.
+
+2010-02-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update POTFILES.
+	* HACKING (Release Procedure): Add reminder about keeping
+	POTFILES files up-to-date.
+	* po/POTFILES.in (src/muscle-tab.c, src/scan-skel.l): Add.
+
+2010-02-01  Joel E. Denny  <jdenny@clemson.edu>
+
+	Code cleanup.
+	* tests/atlocal.in (abs_top_srcdir): Remove shell variable,
+	which is already defined in atconfig.
+
+2010-01-21  Joel E. Denny  <jdenny@clemson.edu>
+
+	* cfg.mk (gnulib_dir): Assume gnulib is a subdirectory.
+
+2010-01-21  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: automate PACKAGE_COPYRIGHT_YEAR update, and update it.
+	* HACKING (Release Procedure): Update notes on copyright years.
+	* Makefile.am (update-package-copyright-year): New target rule.
+	* build-aux/update-package-copyright-year: New file.
+	* cfg.mk (update-copyright): Add update-package-copyright-year
+	as a dependency.
+
+2010-01-19  Joel E. Denny  <jdenny@clemson.edu>
+
+	* bootstrap: Import improvements from latest gnulib.
+
+2010-01-19  Joel E. Denny  <jdenny@clemson.edu>
+
+	build: require Automake 1.11.1 to avoid a security flaw.
+	* HACKING (Release Procedure): Don't document Automake security
+	flaw here.
+	* configure.ac (AM_INIT_AUTOMAKE): Require 1.11.1, and explain
+	why here.
+
+2010-01-19  Joel E. Denny  <jdenny@clemson.edu>
+
+	gnulib: update to latest.
+
+2010-01-19  Joel E. Denny  <jdenny@clemson.edu>
+
+	ChangeLog (2006-09-15): add Odd Arild Olsen's role for push.c.
+
+2010-01-15  Joel E. Denny  <jdenny@clemson.edu>
+
+	Thank the developer of the initial push parser implementation.
+	This unfortunate oversight is several years old.
+	* THANKS (Odd Arild Olsen): Add.
+
+2010-01-04  Joel E. Denny  <jdenny@clemson.edu>
+
+	Fix some comments concerning LR(0) versus LALR(1).
+
+	Stop equating LR(0) with nondeterminism and LALR(1) with
+	determinism.  That is, if all states are consistent, then LR(0)
+	tables are deterministic.  On the other hand, LALR(1) tables
+	might be nondeterministic before conflict resolution, and GLR
+	permits LALR(1) tables to remain nondeterministic.
+	* src/LR0.c, src/LR0.h: Here.
+	* src/lalr.c, src/lalr.h: Here.
+	* src/main.c (main): Here.
+	* src/state.c, src/state.h: Here.
+
+	* src/ielr.h (ielr): In preconditions, expect LR(0) not LALR(1)
+	parser tables.
+
+2010-01-04  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: run "make update-copyright"
+
+2009-12-30  Joel E. Denny  <jdenny@clemson.edu>
+
+	POSIX: complain if %prec's token was not defined.
+	* NEWS (2.5): Document.
+	* src/reader.c (grammar_rule_check): Convert warning to
+	complaint.
+	* tests/input.at (%prec's token must be defined): Update.
+
+2009-12-30  Joel E. Denny  <jdenny@clemson.edu>
+
+	POSIX: warn if %prec's token was not defined.
+	Reported by Florian Krohm at
+	<http://lists.gnu.org/archive/html/bug-bison/2009-12/msg00005.html>.
+	* NEWS (2.4.2): Document.
+	* src/reader.c (grammar_rule_check): Implement.
+	(grammar_current_rule_prec_set): Add comments explaining that we
+	here assume a %prec identifier is a token, but we still manage
+	to support POSIX.
+	* tests/input.at (%prec's token must be defined): New test
+	group.
+
+2009-12-31  Joel E. Denny  <jdenny@clemson.edu>
+
+	* HACKING (Release Procedure): Recommend a secure automake.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+	Propagate i18n changes into glr.c.
+	* data/glr.c (yyreportSyntaxError): Use "switch" instead of
+	building the error message format dynamically.
+	* data/lalr1.java: Formatting changes.
+
+2009-12-22  Joel E. Denny  <jdenny@clemson.edu>
+
+	Port small part of master's 11707b2b so future ports are easier.
+	* data/lalr1.java (YYParser::yysyntax_error): Untabify.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+	Simplify the i18n of the error messages.
+	* data/lalr1.cc: Comment changes.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Prefer M4 to CPP.
+	* data/lalr1.cc: Use b4_error_verbose_if instead of #if
+	YYERROR_VERBOSE.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Support i18n of the parse error messages.
+	* TODO (lalr1.cc/I18n): Remove.
+	* data/lalr1.cc (yysyntax_error_): Support the translation of the
+	error messages, as done in yacc.c.
+	Stay within the yy* pseudo namespace.
+
+2009-12-22  Joel E. Denny  <jdenny@clemson.edu>
+
+	Port small part of master's 8901f32e so future ports are easier.
+	* data/lalr1.cc (yy::parser::yysyntax_error_): Always add second
+	argument, but name it in the function definition only when
+	verbose error messages are enabled and it'll thus be used.
+	(yy::parser::parse): Update use of yysyntax_error_.
+
+2009-12-29  Joel E. Denny  <jdenny@clemson.edu>
+
+	portability: `<' and `>' are not always defined on addresses.
+	Specifically, don't sort objects by their memory addresses when
+	they're not allocated in the same array or other object.  Though
+	I haven't found a test case where that fails on my platform, C
+	says the behavior is undefined.
+	* src/AnnotationList.c (AnnotationList__insertInto): Remove
+	FIXME.  Use new id field of InadequacyList nodes rather than
+	their memory addresses when sorting.
+	(AnnotationList__compute_from_inadequacies): Add
+	inadequacy_list_node_count argument to pass to
+	InadequacyList__new_conflict.
+	* src/AnnotationList.h
+	(AnnotationList__compute_from_inadequacies): Update prototype
+	and documentation for new argument.
+	* src/InadequacyList.c (InadequacyList__new_conflict): Add
+	node_count argument and use it to assign a unique ID.
+	* src/InadequacyList.h (InadequacyListNodeCount): New typedef.
+	(InadequacyList): Add id field.
+	(InadequacyList__new_conflict): Update prototype and
+	documentation for new argument.
+	* src/ielr.c (ielr_compute_annotation_lists): Update
+	AnnotationList__compute_from_inadequacies invocation.
+
+2009-12-20  Joel E. Denny  <jdenny@clemson.edu>
+
+	Fix handling of yychar manipulation in user semantic actions.
+	The problem was that yacc.c didn't always update the yychar
+	translation afterwards.  However, other skeletons appear to be
+	fine.  glr.c appears to already translate yychar before every
+	use.  lalr1.cc does not define yychar and does not document its
+	replacement, yyla, for users.  It does provide yyclearin, but
+	that does not manipulate yyla and thus requires no translation
+	update.  In lalr1.java, yychar is out of scope during semantic
+	actions.
+	* NEWS (2.5): Document.
+	* data/yacc.c (YYBACKUP): Don't bother translating yychar into
+	yytoken here.
+	(yyparse, yypush_parse): Instead, translate before every use of
+	yytoken, and add comments explaining this approach.
+	* tests/actions.at (Destroying lookahead assigned by semantic
+	action): New test group checking that translation happens before
+	lookahead destructor calls at parser return.  Previously,
+	incorrect destructors were called.
+	* tests/conflicts.at (%error-verbose and consistent
+	errors): New test group checking that translation happens at
+	syntax error detection before the associated verbose error
+	message and the associated lookahead destructor calls.  While
+	the destructor call is fixed by this patch, the verbose error
+	message is currently incorrect due to another bug (see
+	comments in test group), so this is an expected failure for now.
+
+2009-12-21  Joel E. Denny  <jdenny@clemson.edu>
+
+	YYFAIL: warn about uses and remove from lalr1.java.
+	* NEWS (2.5): Document.
+	* data/lalr1.java (YYParser::YYFAIL): Rename to YYERRLAB,
+	and make it private.  Update all uses.
+	* src/scan-code.l (SC_RULE_ACTION): Implement warning.
+
+2009-12-21  Joel E. Denny  <jdenny@clemson.edu>
+
+	YYFAIL: deprecate.
+	* NEWS (2.4.2): Document deprecation and the phase-out plan.
+	* data/lalr1.java (YYParser::YYFAIL): Add comment about
+	deprecation.
+	* data/yacc.c (YYFAIL): Likewise, and suppress warnings about
+	YYFAIL from GCC cpp's -Wunused-macros.
+	* doc/bison.texinfo (Java Action Features): Remove YYFAIL
+	documentation.
+	(LocalWords): Remove YYFAIL.
+
+2009-12-17  Joel E. Denny  <jdenny@clemson.edu>
+
+	Code cleanup.
+	* src/symtab.c, src/symtab.h (symbol_class_get_string): Remove
+	function, which is no longer used.
+
+2009-12-16  Joel E. Denny  <jdenny@clemson.edu>
+
+	Add gcc's -Wundef to test suite and fix another warning from it.
+	* NEWS (2.4.2): Update description of -Wundef fix.
+	* configure.ac (WARN_CXXFLAGS_TEST): New substitution.
+	(WARN_CFLAGS_TEST): New substitution.
+	* data/glr.c: Avoid warning about __STRICT_ANSI__.
+	* tests/atlocal.in (CFLAGS): Use WARN_CFLAGS_TEST instead of
+	WARN_CFLAGS.
+	(NO_WERROR_CFLAGS): Likewise.
+	(CXXFLAGS): Use WARN_CXXFLAGS_TEST instead of WARN_CXXFLAGS.
+
+2009-12-16  Joel E. Denny  <jdenny@clemson.edu>
+
+	* data/yacc.c: Reformat m4 a little.
+
+2009-12-16  Joel E. Denny  <jdenny@clemson.edu>
+
+	Document gcc -Wundef fix.
+	* NEWS (2.4.2): Here.
+	* THANKS (Jonathan Nieder): Add.
+
+2009-12-15  Jonathan Nieder  <jrnieder@gmail.com>  (tiny change)
+
+	Simplify y.tab.c when location tracking is disabled.
+	* data/yacc.c: Do not check YYLTYPE_IS_TRIVIAL if location
+	tracking is not enabled.  Instead, unconditionally define
+	YY_LOCATION_PRINT as a no-op for backward compatibility.
+
+2009-12-15  Jonathan Nieder  <jrnieder@gmail.com>  (tiny change)
+
+	Avoid warnings from gcc -Wundef y.tab.c.
+	* data/glr.c: Check if YYENABLE_NLS and YYLTYPE_IS_TRIVIAL are
+	defined before using them.
+	* data/lalr1.cc: Likewise.
+	* data/yacc.c: Likewise.
+
+2009-12-15  Joel E. Denny  <jdenny@clemson.edu>
+
+	autoconf: update to latest for fix of M4 detection.
+	Reported by Eric Blake.
+	* submodules/autoconf: Update.
+
+2009-12-15  Joel E. Denny  <jdenny@clemson.edu>
+
+	portability: use -DGNULIB_POSIXCHECK.
+	Reported by Eric Blake.  See discussions at
+	<http://lists.gnu.org/archive/html/bug-bison/2009-09/msg00008.html>
+	and
+	<http://lists.gnu.org/archive/html/bug-gnulib/2009-10/msg00108.html>.
+	* HACKING (Release checks): Suggest -DGNULIB_POSIXCHECK.
+	* bootstrap.conf (gnulib_modules): Add all the printf modules
+	suggested by -DGNULIB_POSIXCHECK.  Add realloc-posix as
+	suggested by -DGNULIB_POSIXCHECK for gnulib's own vasnprintf.c.
+	(excluded_files): Remove m4/printf-posix.m4.
+	* tests/atlocal.in (LIBS): As for LDADD in src/local.mk, add
+	lib/libbison.a so gnulib libraries can be linked.
+
+2009-12-14  Joel E. Denny  <jdenny@clemson.edu>
+
+	Enable assertion output and --disable-assert for configure.
+	* bootstrap.conf (gnulib_modules): Add assert module.
+	* src/system.h (aver): Define as assert, and summarize the
+	discussion on this issue.
+
+2009-12-14  Joel E. Denny  <jdenny@clemson.edu>
+
+	Expand GLR acronym in summary of Bison.
+	Based on discussion with Akim Demaille starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2009-04/msg00087.html>.
+	* doc/bison.texinfo (Introduction): Here.
+	* src/getargs.c (usage): Here.
+
+2009-10-03  Alex Rozenman  <rozenman@gmail.com>
+
+	Document named references.
+	* doc/bison.texinfo (Actions): Add new example and xref to
+	Using Named References node.
+	(Using Named References): New node.
+
+2009-10-16  Joel E. Denny  <jdenny@clemson.edu>
+
+	cleanup.
+	* src/Sbitset.c (Sbitset__new_on_obstack): Use Sbitset instead
+	of char*.
+	(Sbitset__isEmpty): Use Sbitset instead of char*.
+	* src/Sbitset.h (Sbitset): Make it a pointer to unsigned char
+	instead of char.  This helps to avoid casting errors.
+	(Sbitset__or): Use Sbitset instead of char*.
+
+2009-10-16  Joel E. Denny  <jdenny@clemson.edu>
+
+	portability: don't assume 8-bit bytes.
+	That is, use CHAR_BIT and UCHAR_MAX instead of 8 and 0xff.
+	* src/Sbitset.h (Sbitset__nbytes): Here.
+	(Sbitset__byteAddress): Here.
+	(Sbitset__bit_mask): Here.
+	(Sbitset__last_byte_mask): Here.
+	(Sbitset__ones): Here.
+	(SBITSET__FOR_EACH): Here.
+
+2009-10-11  Joel E. Denny  <jdenny@clemson.edu>
+
+	portability: use va_start and va_end in the same function.
+	* src/complain.c (error_message): Move va_end from here...
+	(ERROR_MESSAGE): ... to here.
+
+2009-10-08  Joel E. Denny  <jdenny@clemson.edu>
+
+	* data/bison.m4: Update comments for rename to muscle-tab.h.
+
+2009-10-08  Joel E. Denny  <jdenny@clemson.edu>
+
+	Rename muscle_tab.* to muscle-tab.* for consistency with master.
+	* src/Makefile.am (bison_SOURCES): Update.
+	* src/getargs.c, src/ielr.c, src/lalr.c, src/main.c,
+	src/output.c, src/parse-gram.y, src/print.c, src/reader.c,
+	src/tables.c: Update include.
+	* src/muscle_tab.c, src/muscle_tab.h: Rename to...
+	* src/muscle-tab.c, src/muscle-tab.h: ... these and update
+	include.
+
+2009-10-07  Joel E. Denny  <jdenny@clemson.edu>
+
+	Minor code cleanup.
+	* src/muscle_tab.c (MUSCLE_USER_NAME_CONVERT): Remove macro and
+	replace all uses with UNIQSTR_CONCAT.
+	* src/uniqstr.c (uniqstr_vsprintf): New function.
+	* src/uniqstr.h (uniqstr_vsprintf): Add prototype.
+	(UNIQSTR_CONCAT, UNIQSTR_GEN_FORMAT, UNIQSTR_GEN_FORMAT_): New
+	macros.
+
+2009-10-04  Joel E. Denny  <jdenny@clemson.edu>
+
+	Minor code cleanup.
+	* src/parse-gram.y: Clean up sorting of declarations.
+	Use types to simplify %printer declarations where possible.
+	Provide %printer for BRACKETED_ID and symbol.prec.
+	* src/symtab.c: Whitespace change.
+
+2009-10-04  Joel E. Denny  <jdenny@clemson.edu>
+
+	tests: skip tests of file names that platform does not support.
+	Reported by Michael Raskin at
+	<http://lists.gnu.org/archive/html/bug-bison/2009-09/msg00001.html>.
+	* THANKS (Michael Raskin): Add.
+	* tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): Fix.  Cygwin used
+	to fail at least for file names containing ":" or "\".
+
+2009-09-23  Joel E. Denny  <jdenny@clemson.edu>
+
+	yysyntax_error: avoid duplicate lookahead collection.
+	Except when memory reallocation is required, this change
+	eliminates the need to invoke yysyntax_error twice and thus to
+	repeat the collection of lookaheads.  It also prepares for
+	future extensions that will make those repetitions more
+	expensive and that will require additional memory management in
+	yysyntax_error.  Finally, it fixes an obscure bug already
+	exercised in the test suite.
+	* data/yacc.c (yysyntax_error): Add arguments for message
+	buffer variables stored in the parser.  Instead of size, return
+	status similar to yyparse status but indicating success of
+	message creation.  Other than the actual reallocation of the
+	message buffer, import and clean up memory management code
+	from...
+	(yyparse, yypush_parse): ... here.
+	* tests/regression.at (%error-verbose overflow): No longer an
+	expected failure.
+
+2009-09-23  Joel E. Denny  <jdenny@clemson.edu>
+
+	yysyntax_error: test memory management more.
+	* tests/atlocal.in (NO_WERROR_CFLAGS): New cpp macro.
+	* tests/regression.at (%error-verbose and YYSTACK_USE_ALLOCA):
+	New test group.
+	(%error-verbose overflow): New test group that reveals an
+	obscure bug.  Expected fail for now.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+	Pass the token type to yysyntax_error.
+	* data/yacc.c (yysyntax_error): Take the transated token instead
+	of the raw number.
+	Adjust callers.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+	Simplify the i18n of the error messages.
+	* data/yacc.c (yysyntax_error): Rewrite, using a switch instead
+	of building dynamically the format string.
+
+2009-10-03  Joel E. Denny  <jdenny@clemson.edu>
+
+	Remove dead code.
+	* src/symtab.c (symbol_pack): Here because every symbol's number
+	is always defined by this time.
+
+2009-10-03  Alex Rozenman  <rozenman@gmail.com>
+
+	Add additional space after periods in NEWS.
+	* NEWS (2.5): here.
+
+2009-09-29  Joel E. Denny  <jdenny@clemson.edu>
+
+	Use the correct conversion specifier for size_t.
+	Reported by Jim Meyering.
+	* src/Sbitset.h (SBITSET__INDEX__CONVERSION_SPEC): New, "zu"
+	because Sbitset__Index is size_t.
+	* src/Sbitset.c (Sbitset__fprint): Use it instead of %d.
+
+2009-09-27  Joel E. Denny  <jdenny@clemson.edu>
+
+	tests: don't abuse AT_BISON_CHECK.
+	* tests/regression.at (parse-gram.y: LALR = IELR): Move
+	additional shell commands outside of AT_BISON_CHECK.
+
+2009-09-26  Joel E. Denny  <jdenny@clemson.edu>
+
+	tests: check that parse-gram.y's IELR and LALR are identical.
+	* tests/atlocal.in (abs_top_srcdir): New shell variable.
+	* tests/regression.at (parse-gram.y: LALR = IELR): New test
+	group.
+
+2009-09-16  Akim Demaille  <demaille@gostai.com>
+
+	doc: comment changes.
+	* doc/bison.texinfo: Comment changes.
+
+2009-09-16  Akim Demaille  <demaille@gostai.com>
+
+	doc: spell checking.
+	* doc/bison.texinfo: here.
+
+2009-09-19  Alex Rozenman  <rozenman@gmail.com>
+
+	Keep sub-messages aligned. Fix strings for translation.
+	* src/location.h (location_print): Add return value.
+	* src/location.c (location_print): Return number of printed
+	characters.
+	* src/complain.h (complain_at_indent, warn_at_indent): Prototype
+	new functions.
+	* src/complain.cpp (indent_ptr): New static variable.
+	(error_message, complain_at_indent, warn_at_indent): Implement
+	the alignment mechanism.
+	* src/scan-code.l (parse_ref, show_sub_messages): Fix strings
+	for translations. Use new alignment mechanism.
+	* tests/named-ref.at: Adjust test-cases.
+	* NEWS (2.5): Add an announcement about named references.
+
+2009-09-13  Joel E. Denny  <jdenny@clemson.edu>
+
+	tests: clean up push.at test group titles.
+	* tests/push.at: Remove "Push Parsing: " from test group titles
+	because these are already under the banner "Push Parsing Tests".
+
+2009-09-12  Alex Rozenman  <rozenman@gmail.com>
+
+	Provide an additional sub-message for clarity.
+	Add "symbol not found in production" error message when
+	an "invalid reference" is detected in named references
+	resolution.
+	* src/scan-code.l: Update "invalid reference" case.
+	* tests/named-ref.at: Adjust test-cases.
+
+2009-09-10  Joel E. Denny  <jdenny@clemson.edu>
+
+	Clean up yacc.c a little.
+	* data/yacc.c: Clean up M4 for readability, and make output
+	whitespace more consistent.  For the main parse function
+	comment, instead of saying "yyparse or yypush_parse", say either
+	"yyparse" or "yypush_parse" depending on which it actually is.
+
+2009-09-03  Joel E. Denny  <jdenny@clemson.edu>
+
+	Complain about unused %define variables and %code qualifiers.
+	* NEWS (2.5): Document.
+	* data/bison.m4 (b4_check_user_names): Complain instead of warn.
+	* doc/bison.texinfo (Decl Summary): Document complaint, and
+	improve %define documentation a little otherwise.
+	* tests/input.at (Reject unused %code qualifiers): Update.
+	(%define errors): Update.
+	(%define, --define, --force-define): Update.
+	(%define backward compatibility): Update.
+	(Unused %define api.pure): Update.
+	* tests/push.at (Push Parsing: Unsupported Skeletons): Update.
+
+2009-09-03  Joel E. Denny  <jdenny@clemson.edu>
+
+	Use aver not assert.
+	* src/output.c: Don't include assert.h.
+	(output_skeleton): Use aver not assert.
+	* src/system.h (aver): In documentation of why, add links to
+	Paul Eggert's explanations in the mailing lists.
+
+2009-09-05  Alex Rozenman  <rozenman@gmail.com>
+
+	Use "Unresolved reference" error message when no symbols were found
+	in a symbolic reference resolution. Remove .expr and -expr from
+	the shown reference when the reference is unresolved.
+	* src/scan-code.l: Change the error message, adjust location columns,
+	rename variable "exact_mode" to "explicit_bracketing".
+	* tests/named-ref.at: Adjust existing tests and add a new one.
+
+2009-09-03  Akim Demaille  <demaille@gostai.com>
+
+	* NEWS (2.4.2): Add "Internationalization" item.
+
+2009-09-03  Akim Demaille  <demaille@gostai.com>
+
+	bootstrap: fix/improve find_tool.
+	* bootstrap (find_tool): Improve error messages.
+	Fix typo about find_tool_names.
+
+2009-08-29  Joel E. Denny  <jdenny@clemson.edu>
+
+	Fix gcc 3.4.4 shadowing warning reported by Eric Blake.
+	See
+	<http://lists.gnu.org/archive/html/bison-patches/2009-08/msg00093.html>.
+	* src/scan-code.h (code_props_rule_action_init): Rename
+	named_ref arg to name so it doesn't shadow named_ref type.  This
+	makes it consistent with the function definition in scan-code.l
+	anyway.
+
+2009-08-28  Joel E. Denny  <jdenny@clemson.edu>
+
+	%define: accept unquoted values.
+	* NEWS (2.5): Group all %define changes together, and document
+	this one.  Remove quotes in IELR and canonical LR entry.
+	* doc/bison.texinfo: Remove quotes in most examples throughout.
+	(Decl Summary): Update %define documentation.
+	(Table of Symbols): Likewise.
+	* src/ielr.c (LrType): Update documentation.
+	* src/parse-gram.y (content.opt): Add production for ID.
+	* tests/calc.at: Remove quotes in most tests.
+	* tests/existing.at: Likewise.
+	* tests/input.at: Likewise.
+	* tests/local.at: Likewise.
+	* tests/push.at: Likewise.
+	* tests/reduce.at: Likewise.
+	* tests/torture.at: Likewise.
+
+2009-08-28  Joel E. Denny  <jdenny@clemson.edu>
+
+	%define lr.type: make values lowercase IDs.
+	That is, "LALR" => "lalr", "IELR" => "ielr", and
+	"canonical LR" => "canonical-lr".
+	* NEWS (2.5): Update documentation.
+	* doc/bison.texinfo (Decl Summary): Likewise.
+	* src/ielr.c (ielr): Use new values.
+	* src/ielr.h (ielr): Update documentation.
+	* src/reader.c (prepare_percent_define_front_end_variables): Use
+	and validate new values.
+	* tests/existing.at (AT_TEST_EXISTING_GRAMMAR): Update test
+	grammars.
+	* tests/reduce.at (AT_TEST_LR_TYPE): Likewise.
+
+2009-08-27  Eric Blake  <ebb9@byu.net>
+
+	scan-gram: avoid portability trap with ctype usage.
+	* src/scan-gram.l (<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>):
+	Avoid compiler warning.
+
+2009-08-27  Joel E. Denny  <jdenny@clemson.edu>
+
+	tests: use perl for printing special sequences to files.
+	And skip tests if perl is not available.  This is better than
+	playing tricks with shell portability.  Suggested by Akim
+	Demaille.
+	* tests/input.at (Bad character literals): Use it here for
+	omitting final newlines.
+	(Bad escapes in literals): Use it here for special characters.
+
+2009-08-26  Joel E. Denny  <jdenny@clemson.edu>
+
+	tests: show a use of %define lr.default-reductions "consistent"
+	* tests/conflicts.at (%nonassoc and eof): Extend to test that it
+	prevents the omission of expected tokens for %error-verbose.
+
+2009-08-26  Akim Demaille  <demaille@gostai.com>
+
+	tests: portability fix.
+	* tests/input.at (Bad escapes in literals): Don't expect "echo
+	'\0'" to output \ then 0.
+
+2009-08-26  Joel E. Denny  <jdenny@clemson.edu>
+
+	Actually handle the yytable zero value correctly this time.
+	* data/glr.c, data/lalr1.cc, data/lalr1.java, data/yacc.c: Don't
+	mention zero values in the YYTABLE comments.
+	* data/glr.c (yytable_value_is_error): Don't check for zero
+	value.
+	* data/lalr1.cc (yy_table_value_is_error_): Likewise.
+	* data/yacc.c (yytable_value_is_error): Likewise.
+	* data/lalr1.java (yy_table_value_is_error_): Likewise.
+	(yysyntax_error): Fix typo in code: use yytable_ not yycheck_.
+	* src/tables.h: In header comments, explain why it's useless to
+	check for a zero value in yytable.
+
+2009-08-25  Joel E. Denny  <jdenny@clemson.edu>
+
+	More fixes related to last two patches.
+	* data/c.m4 (b4_table_value_equals): Comment that YYID must be
+	defined.
+	* data/glr.c, data/lalr1.cc, data/lalr1.java, data/yacc.c: Fix
+	yytable comments: zero indicates syntax error not default
+	action.
+	* data/glr.c (yyis_pact_ninf): Rename to...
+	(yypact_value_is_default): ... this.
+	(yyisDefaultedState): Update for rename.
+	(yyis_table_ninf): Rename to...
+	(yytable_value_is_error): ... this, and check for value zero
+	besides just YYTABLE_NINF.
+	(yygetLRActions): Check for default value from yypact.  It
+	appears that this check is always performed before this function
+	is invoked, and so adding the check here is probably redundant.
+	However, the code may evolve after this subtlety is forgotten.
+	Also, update for rename to yytable_value_is_error.  Because that
+	macro now checks for zero, a different but equivalent branch of
+	the if-then-else here is evaluated.
+	(yyreportSyntaxError): Update for rename to
+	yytable_value_is_error.  The zero condition was mishandled
+	before.
+	(yyrecoverSyntaxError): Update for renames.  No behavioral
+	changes.
+	* data/lalr1.cc, data/lalr1.java (yy_pact_value_is_default_):
+	New function.
+	(yy_table_value_is_error_): New function.
+	(parse): Use new functions where possible.  No behavioral
+	changes.
+	(yysyntax_error_, yysyntax_error): Use yy_table_value_is_error_.
+	The zero condition was mishandled before.
+	* data/yacc.c (yyis_pact_ninf): Rename to...
+	(yypact_value_is_default): ... this.
+	(yyis_table_ninf): Rename to...
+	(yytable_value_is_error): ... this, and check for value zero
+	besides just YYTABLE_NINF.
+	(yysyntax_error): Update for rename to yytable_value_is_error.
+	The zero condition was mishandled before.
+	(yyparse): Update for renames.  No behavioral changes.
+	* src/tables.h: Improve comments about yypact, yytable, etc.
+	more.  Most importantly, say yytable value of zero means syntax
+	error not default action.
+
+2009-08-25  Joel E. Denny  <jdenny@clemson.edu>
+
+	Fix %error-verbose for conflicts resolved by %nonassoc.
+	* NEWS (2.5): Document.
+	* data/glr.c (yyreportSyntaxError): Fix this by checking
+	yyis_table_ninf.
+	* data/yacc.c (yysyntax_error): Likewise.
+	* data/lalr1.cc (yysyntax_error_): Fix this by checking
+	yytable_ninf_.
+	* data/lalr1.java (yysyntax_error): Likewise.
+	* tests/conflicts.at (%nonassoc and eof): Update expected output
+	and remove FIXME.
+
+2009-08-25  Joel E. Denny  <jdenny@clemson.edu>
+
+	Some code and documentation improvements.
+	* data/c.m4 (b4_table_value_equals): New macro to capture
+	some repeated code.
+	* data/glr.c (yyis_pact_ninf): Use it here.
+	(yyis_table_ninf): Likewise.
+	(yyreportSyntaxError): Improve internal comments.
+	* data/yacc.c (yyis_pact_ninf): New macro copied from glr.c.
+	Use it everywhere possible.
+	(yyis_table_ninf): Likewise.
+	(yysyntax_error): Improve internal comments.
+	* data/lalr1.cc (yysyntax_error_): Likewise.
+	* data/lalr1.java (yysyntax_error): Likewise.
+	* src/tables.h: Improve comments about yypact, yytable, etc.
+
+2009-08-21  Joel E. Denny  <jdenny@clemson.edu>
+
+	Use locale when quoting.
+	* src/scan-gram.l (SC_ESCAPED_STRING, SC_ESCAPED_CHARACTER): Use
+	quote rather than implementing quoting here.
+
+2009-08-20  Eric Blake  <ebb9@byu.net>
+
+	Make previous patch more robust.
+	* src/output.c (ARRAY_CARDINALITY): New macro, copied from
+	argmatch.h.
+	(output_skeleton): Use it.
+	Suggested by Akim Demaille.
+
+	Import latest m4/m4.m4.
+	* submodules/autoconf: Update to autoconf 2.64.
+	* configure.ac (M4_GNU_OPTION): New define.
+	* src/output.c (output_skeleton): Use it to resolve FIXME.
+	* NEWS: Mention this.
+
+2009-08-19  Joel E. Denny  <jdenny@clemson.edu>
+
+	Fix complaints about escape sequences.
+	Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2009-08/msg00036.html>.
+	* src/scan-gram.l (SC_ESCAPED_STRING, SC_ESCAPED_CHARACTER):
+	For a \0 and similar escape sequences meaning the null
+	character, report an invalid escape sequence instead of an
+	invalid null character because the latter does not actually
+	appear in the user's input.
+	In all escape sequence complaints, don't escape the initial
+	backslash, and don't quote when the sequence appears at the end
+	of the complaint line unless there's whitespace that quotearg
+	won't escape.
+	Consistently say "invalid" not "unrecognized".
+	Consistently prefer "empty character literal" over "extra
+	characters in character literal" warning for invalid escape
+	sequences; that is, consistently discard those sequences.
+	* tests/input.at (Bad escapes in literals): New.
+
+2009-08-19  Akim Demaille  <demaille@gostai.com>
+
+	doc: fixes.
+	* doc/bison.texinfo: Fix minor Texinfo errors.
+
+2009-08-19  Akim Demaille  <demaille@gostai.com>
+
+	doc: %initial-action to initialize yylloc.
+	Reported by Bill Allombert.
+	* doc/bison.texinfo: Set fill-column to 76.
+	(Location Type): Document the use of %initial-action to initialize
+	yylloc.
+
+2009-08-18  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: update for gnulib's recent update-copyright changes
+	* gnulib: Update.
+	* .x-update-copyright (COPYING): Add as it's no longer implied
+	when .x-update-copyright is present.
+	* cfg.mk (update-copyright-local): Remove, now ignored.
+	(update-copyright): Declare update-b4-copyright as a dependency.
+
+2009-08-17  Akim Demaille  <demaille@gostai.com>
+
+	build: require gettext 0.17.
+
+	Suggested by Bruno Haible.
+	http://lists.gnu.org/archive/html/bug-bison/2009-08/msg00009.html
+	* configure.ac: require gettext 0.17 to ensure compatibility with
+	gnulib.
+
+2009-08-17  Akim Demaille  <demaille@gostai.com>
+
+	build: lower gettext requirements.
+
+	Bison was uselessly requiring the formatstring macros from
+	gettext, which resulted in mo files not being installed on systems
+	that perfectly supported Bison mo files.  Lower the requirement.
+	http://lists.gnu.org/archive/html/bug-bison/2009-08/msg00006.html
+
+	* configure.ac: Require need-ngettext instead of
+	need-formatstring-macros.
+	Reported by Martin Jabocs.
+	Suggested by Bruno Haible.
+	* INSTALL: Restructure.
+	(Internationalization): New.
+
+2009-08-14  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: fix use of copyright year intervals.
+	* gnulib: Update.
+	* bootstrap.conf (gnulib_modules): Update getopt to getopt-gnu
+	as now recommended in gnulib/NEWS.
+	* build-aux/update-b4-copyright: Fix.
+	* cfg.mk (update-copyright-env): Configure update-copyright.
+
+2009-08-13  Joel E. Denny  <jdenny@clemson.edu>
+
+	Make it easier to write deterministic tests.
+	Continues Akim's work from his 2009-06-10 commits.
+	* src/reader.c (check_and_convert_grammar): Don't add any
+	symbols after the first symbols_do invocation.
+	* src/symtab.c (symbols_sorted): New static global.
+	(user_token_number_redeclaration): Update comments.
+	(symbol_from_uniqstr): If a new symbol is being created, assert
+	that symbols_sorted hasn't been allocated yet.
+	(symbols_free): Free symbols_sorted.
+	(symbols_cmp, symbols_cmp_qsort): New functions.
+	(symbols_do): Sort symbol_table into symbols_sorted on first
+	invocation.
+	* tests/input.at (Numbered tokens): Recombine tests now that the
+	output should be deterministic across multiple numbers.
+
+2009-08-12  Akim Demaille  <demaille@gostai.com>
+
+	distcheck: fix.
+
+	* examples/calc++/Makefile.am: (EXTRA_DIST): Ship calc.stamp.
+
+2009-08-10  Joel E. Denny  <jdenny@clemson.edu>
+
+	* tests/Makefile.am (TESTSUITE_AT): Add named-refs.at.
+
+2009-08-10  Joel E. Denny  <jdenny@clemson.edu>
+
+	Miscellaneous code readability improvements.
+
+	* src/reader.c (reader): Move %define front-end variable
+	defaults and checking into...
+	(prepare_percent_define_front_end_variables): ... this new
+	function.
+
+	* src/scan-gram.l (INITIAL): For consistency with string
+	literals, don't store open quote on character literal.  It's
+	discarded before returning anyway.
+	(SC_ESCAPED_CHARACTER): Similarly, don't store close quote.
+	Make length test more readable, and make the character stored
+	for an empty literal more obvious while consistent with the
+	previous behavior.
+
+	* src/symtab.c, src/symtab.h: Rename USER_NUMBER_ALIAS to
+	USER_NUMBER_HAS_STRING_ALIAS throughout.
+	* src/symtab.c (symbol_make_alias): Remove comment from symtab.c
+	that is repeated in symtab.h.  Improve argument names to make it
+	clear which side of the symbol-string alias pair is which.
+	(symbol_check_alias_consistency): Improve local variable names
+	for the same purpose.
+	* src/symtab.h (struct symbol): Make comments about aliases
+	clearer.
+	(symbol_make_alias): Improve comments and argument name.
+	* src/output.c (token_definitions_output): Update for rename to
+	USER_NUMBER_HAS_STRING_ALIAS and improve comments about aliases.
+
+2009-08-08  Alex Rozenman  <rozenman@gmail.com>
+
+	Convert "misleading reference" messages to warnings.
+	* src/scan-code.l: New function 'show_sub_messages', more
+	factoring.
+	* tests/named-ref.at: Adjust tests.
+
+2009-08-06  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: run "make update-copyright"
+
+2009-08-06  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: make update-b4-copyright easier to use
+	* build-aux/update-b4-copyright: In warnings, report line
+	numbers rather than character positions.
+	* cfg.mk (update-copyright-local): Set to update-b4-copyright so
+	that update-copyright runs it.
+	* gnulib: Update.
+
+2009-08-05  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: clean up update-b4-copyright code
+	* build-aux/update-b4-copyright: Do not accept 2-digit
+	UPDATE_COPYRIGHT_YEAR, which was not handled correctly.
+	Don't accept a `[' in a b4_copyright argument.
+	Format code more consistently.
+	Don't assume b4*copyright never occurs.
+
+2009-08-04  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: automate b4_copyright updates.
+	* Makefile.am (update-b4-copyright): New target rule.
+	* build-aux/Makefile.am (EXTRA_DIST): Add update-b4-copyright.
+	* build-aux/update-b4-copyright: New.
+	* data/yacc.c: Remove stray characters around b4_copyright
+	invocations.
+
+2009-08-04  Joel E. Denny  <jdenny@clemson.edu>
+
+	maint: automate annual package-wide copyright-year update.
+	* .x-update-copyright: New.
+	* Makefile.am (EXTRA_DIST): Remove maint.mk.
+	* bootstrap.conf (gnulib_modules): Add maintainer-makefile and
+	update-copyright.  Remove gnumakefile, which is implied by
+	maintainer-makefile.
+	* cfg.mk (bootstrap-tools): Copy from old maint.mk.
+	* gnulib: Update.
+	* maint.mk: Remove, now copied from gnulib.
+	* examples/extexi: Add missing "(C)" in copyright statement so
+	update-copyright can recognize it.
+	* src/LR0.h: Likewise.
+	* src/print.h: Likewise.
+	* src/print_graph.h: Likewise.
+	* src/gram.c: Add missing comma in copyright statement.
+	* src/gram.h: Likewise.
+
+2009-08-04  Joel E. Denny  <jdenny@clemson.edu>
+
+	Fix "make distcheck".
+	* examples/calc++/Makefile.am: Say $(srcdir)/calc.stamp instead
+	of just calc.stamp.
+
+2009-08-01  Joel E. Denny  <jdenny@clemson.edu>
+
+	Pacify "gcc -Wunused" for the input function from Flex.
+	Reported by Alex Rozenman.  This warning shows up with gcc-4.3.0
+	and later.
+	* src/scan-code.l: Add "%option noinput", which I cannot find in
+	the Flex manual, but which Flex has supported since at least as
+	far back as 2.5.4.  However, if any of our developers still use
+	Flex 2.5.4, they'll need to stop configuring with
+	--enable-gcc-warnings because "%option noinput" didn't work
+	correctly until Flex 2.5.6.
+	* src/scan-gram.l: Likewise.
+	* src/scan-skel.l: Likewise.
+
+2009-07-31  Alex Rozenman  <rozenman@gmail.com>
+
+	Fix --enable-gcc-warnings problems.
+	* src/reader.c: Adjust variable names.
+	* src/scan-code.l: Fix prototypes and adjust names.
+	* src/named-ref.c: Remove redundant "if".
+
+2009-07-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix a --enable-gcc-warnings problem.
+	* src/scan-gram.l (SC_ESCAPED_CHARACTER): Actually use length
+	variable.
+
+2009-07-24  Alex Rozenman  <rozenman@gmail.com>
+
+	Fix some memory leaks.
+	* src/named-ref.c: Add a pointer check (named_ref_free).
+	* src/scan-code.l: New function (variant_table_free). Called in
+	code_scanner_free.
+	* src/symlist.c: Call to named_ref_free (symbol_list_free).
+
+2009-07-24  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Warn about character literals not of length one.
+	* NEWS (2.5): Document.
+	* src/scan-gram.l (INITIAL): Remove comment that we don't check
+	the length.
+	(SC_ESCAPED_CHARACTER): Warn if length is wrong.
+	* tests/input.at (Bad character literals): New test group.
+
+2009-07-24  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/lalr.c (state_lookahead_tokens_count): Correct comment.
+
+2009-07-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Some M4 cleanup in the testsuite.
+	Suggested by Eric Blake at
+	<http://lists.gnu.org/archive/html/bison-patches/2009-04/msg00083.html>.
+	* tests/existing.at (_AT_TEST_EXISTING_GRAMMAR): Do not
+	complicate the code by distinguishing between a missing value
+	and an empty string value for an optional argument.  This fix is
+	allowed by the similar fix in AT_TEST_TABLES_AND_PARSE below.
+	* tests/local.at (_AT_TEST_TABLES_AND_PARSE): Merge into...
+	(AT_TEST_TABLES_AND_PARSE): ... this now that the special
+	arguments are not needed because of the following changes.
+	Fix stale comments.
+	Bison developers should use GNU M4 and should not use
+	POSIXLY_CORRECT when building the test suite, so do not
+	complicate the code by avoiding $10 and above.
+	Do not quote an empty string value for an optional argument, and
+	do not distinguish between a missing value and an empty string
+	value.
+
+2009-07-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* m4/m4.m4: Make it a sym link to submodules/autoconf/m4/m4.m4.
+
+2009-07-15  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Revert unnecessary column realignment in --help output.
+	Reported by Akim Demaille at
+	<http://lists.gnu.org/archive/html/bison-patches/2009-06/msg00010.html>.
+	* src/getargs.c (usage): Here.
+
+2009-07-04  Alex Rozenman  <rozenman@gmail.com>
+
+	Alphabetical order in src/Makefile.am.
+	* src/Makefile.am: Adjust.
+
+2009-07-04  Alex Rozenman  <rozenman@gmail.com>
+
+	Style changes and factoring.
+	* src/named-ref.h: Add comments.
+	* src/parse-gram.y: Readability and style changes.
+	* src/reader.c: Factoring: assign_named_ref function.
+	* src/scan-code.l: Factoring and style changes. Rename
+	parse_named_ref to parse_ref. Use "c-ctype.h" from gnulib.
+	Use "unsigned" type for variant index. Improve readablity.
+	* src/scan-gram.l: Change error messages and add comments.
+	* src/symlist.h: symbol_list_null: New function decl.
+	* src/symlist.c: symbol_list_null: Implement here.
+	* tests/named-refs.at: Adjust for new error messages.
+
+2009-06-29  Eric Blake  <ebb9@byu.net>
+
+	scan-code: avoid compiler warnings
+	* src/scan-code.l (parse_named_ref): Use correct specifiers.
+
+2009-06-29  Akim Demaille  <demaille@gostai.com>
+
+	build: avoid concurrent extraction of calc++.
+	* examples/calc++/Makefile.am (calc.stamp): New.
+	Depend on it to create the sources of calc++ so that concurrent
+	builds don't launch several "extexi" in parallel.
+	Not only this is inefficient, this also builds incorrect sources
+	with several extractions mixed together.
+
+2009-06-27  Alex Rozenman  <rozenman@gmail.com>
+
+	Implement support for named symbol references.
+	* src/parse-gram.y: Add new syntax (named_ref.opt).
+	* src/reader.c: Store named refs in symbol lists.
+	* src/reader.h: New argument for symbol_append and
+	action_append functions.
+	* src/scan-code.h: Add new field (named_ref) into
+	code_props data structure. Keeps named ref of midrule
+	actions.
+	* src/scan-code.l: Support for named refs in semantic
+	action code. New function 'parse_named_ref'.
+	* src/scan-gram.l: Support bracketed id.
+	* src/symlist.c: Store named refs in symbol lists.
+	* src/symlist.h: New field in symbol list: named_ref.
+	* src/named-ref.h: New file, a struct for named_ref.
+	* src/named-ref.cp: New file, named_ref_new function.
+	* src/local.mk: Add two new files.
+	* tests/testsuite.at: Include new test group:
+	* tests/named-refs.at: this new file.
+
+2009-06-25  Akim Demaille  <demaille@gostai.com>
+
+	hash: check insertion for memory exhaustion.
+	* src/uniqstr.c (uniqstr_new): New.
+
+2009-06-11  Akim Demaille  <demaille@gostai.com>
+
+	style changes.
+	* data/xslt/xml2dot.xsl, data/xslt/xml2xhtml.xsl: Space changes.
+	* src/print-xml.c: Style changes.
+	* tests/conflicts.at: Comment changes.
+
+2009-06-11  Akim Demaille  <demaille@gostai.com>
+
+	xml: beware of user strings used to give a %prec to rules.
+	* tests/conflicts.at (%prec with user strings): New.
+	* src/gram.c (grammar_rules_print_xml): Escape the precedence for
+	XML output.
+
+2009-06-11  Akim Demaille  <demaille@gostai.com>
+
+	hash: check insertion for memory exhaustion.
+	* src/muscle-tab.c (muscle_insert, muscle_grow)
+	* src/state.c (state_hash_insert): Check the return value of
+	hash_insert.
+
+2009-06-10  Akim Demaille  <demaille@gostai.com>
+
+	deterministic test suite.
+	Some consistency checks on symbols are performed after all the
+	symbols were read, by an iteration over the symbol table.  This
+	traversal is nondeterministic, which can be a problem for test
+	cases.
+	Avoid this.
+	Addresses another form of nondeterminism reported by Joel E. Denny.
+	http://lists.gnu.org/archive/html/bison-patches/2009-05/msg00023.html
+
+	* tests/input.at (Numbered tokens): Split the hexadecimal/decimal
+	test in two.
+	Use different file names for the three tests to make the
+	maintenance easier.
+
+2009-06-10  Akim Demaille  <demaille@gostai.com>
+
+	deterministic user-token-number redeclaration errors.
+	Address nondeterminism reported by Joel E. Denny.
+	http://lists.gnu.org/archive/html/bison-patches/2009-05/msg00023.html
+
+	* src/uniqstr.h: Comment changes.
+	* src/location.h (boundary_cmp, location_cmp): New.
+	* src/symtab.c (user_token_number_redeclaration): New.
+	(symbol_translation): Use it.
+	* tests/input.at (Numbered tokens): Adjust the expected output.
+
+2009-05-25  Akim Demaille  <demaille@gostai.com>
+
+	gnulib: update.
+	* gnulib: Update to latest.
+	* lib/.cvsignore, lib/.gitignore, m4/.cvsignore,
+	* m4/.gitignore: Regen.
+	* src/symtab.c (symbol_from_uniqstr, semantic_type_from_uniqstr):
+	Call xalloc_die on hash_insert failures.
+	Requested by the new __warn_unused_result__ attribute of
+	hash_insert.
+
+2009-05-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Convert multiple variable definition warnings to complaints.
+	* NEWS (2.5): Add a new entry for that change.
+	* doc/bison.texinfo (Decl Summary): Update %define entry.
+	(Bison Options): Update -D/--define/-F/--force-define entry.
+	* src/muscle_tab.c (muscle_percent_define_insert): Implement.
+	* src/muscle_tab.h (muscle_percent_define_insert): Update
+	comments.
+	* tests/input.at (`%define errors'): Update.
+	(`%define, --define, --force-define'): Update.
+
+2009-05-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	-F/--force-define and relative %define/-D/--define priorities.
+	* NEWS (2.5): Add documentation to -D/--define entry.
+	* build-aux/cross-options.pl: Hard-code association of
+	--force-define with %define.
+	* doc/bison.texinfo (Decl Summary): In %define entry,
+	cross-reference command-line options.
+	(Bison Options): Add documentation to -D/--define entry.
+	(Option Cross Key): Widen column for --force-define row.
+	* src/getargs.c (usage): Document -F/--force-define.  Realign
+	options in output.
+	(short_options, long_options, getargs): Parse -F/--force-define,
+	and update muscle_percent_define_insert invocation.
+	* src/muscle_tab.h (muscle_percent_define_how): New enum type.
+	(muscle_percent_define_insert): Add argument with that type.
+	* src/muscle_tab.c (muscle_percent_define_insert): Implement
+	-F/--force-define behavior and priorities.
+	* src/parse-gram.y (prologue_declaration): Update
+	muscle_percent_define_insert invocations.
+	* tests/input.at (`%define, --define'): Rename to...
+	(`%define, --define, --force-define'): ... this and extend.
+
+2009-05-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update some comments to make sense for -D.
+	* data/bison.m4 (b4_check_user_names): In header comments, say
+	"user occurrence" instead of "grammar occurrence".
+	* src/muscle_tab.h (muscle_percent_define_insert): Likewise.
+	(muscle_percent_code_grow): Likewise just for consistency.
+
+2009-05-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/c++.m4: Update copyright year.
+
+2009-05-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/c++.m4 (b4_namespace_close): Simplify slightly.
+
+2009-05-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Handle a trailing `:' in a user-supplied C++ namespace better.
+	* data/c++.m4 (b4_namespace_close): Don't let it be printed
+	among the closing braces here.  This fix might make the
+	generated code easier to debug, but otherwise it should be
+	insignificant because a trailing `:' is a C++ error already.
+
+2009-05-19  Akim Demaille  <demaille@gostai.com>
+
+	remove useless variable.
+	* src/getargs.c (skeleton_arg): Remove now useless variable.
+	Should help the compiler see that this printf-like call is sane.
+
+2009-05-11  Akim Demaille  <demaille@gostai.com>
+
+	doc: use C++ headers.
+	* doc/bison.texinfo (Calc++ Scanner): Prefer C++ headers to C
+	headers.
+
+2009-05-05  Akim Demaille  <demaille@gostai.com>
+
+	fix hexadecimal token number support.
+	* src/scan-gram.l: Catch incorrect ids after hexadecimal numbers.
+
+2009-05-05  Akim Demaille  <demaille@gostai.com>
+
+	tests: check token numbers.
+	* tests/input.at (Numbered tokens): New.
+
+2009-05-04  Akim Demaille  <demaille@gostai.com>
+
+	bison: catch bad symbol names.
+	* src/scan-gram.l({int}{id}): Report as an invalid identifier.
+	* tests/input.at: Adjust.
+
+2009-05-04  Akim Demaille  <demaille@gostai.com>
+
+	space changes.
+	* src/scan-gram.l: Untabify to be robust to zealous editors.
+
+2009-05-04  Akim Demaille  <demaille@gostai.com>
+
+	identifiers: dashes are letters.
+	Dashes can now start identifiers (symbols and directives).
+
+	* src/scan-gram.l ({letter}): Add dash.
+	({id}): Remove it.
+	* tests/input.at (Symbols): Adjust.
+	Remove stray comment.
+	* tests/regression.at (Invalid inputs): Adjust error message.
+	* doc/bison.texinfo (Symbols): Update.
+
+2009-05-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Declare %code to be a permanent feature.
+	* NEWS (2.4.2): Here.
+	* doc/bison.texinfo (Prologue Alternatives): Don't say it's
+	experimental.
+	(Decl Summary): Likewise.
+
+2009-04-30  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Convert underscores to dashes in some %define variable names.
+	For now, just api.push-pull and lr.keep-unreachable-states.
+	Maintain old names for backward compatibility.
+	* NEWS (2.5): Document.
+	* data/c.m4 (b4_identification): Update comment.
+	* data/yacc.c: Update access.
+	* doc/bison.texinfo: Update.
+	* etc/bench.pl.in (bench_grammar): Update use.
+	* src/files.c (tr): Move to...
+	* src/getargs.c, src/getargs.h (tr): ... here because I can't
+	think of a better place to expose it.  My logic is that, for all
+	uses of tr so far, command-line arguments can be involved, and
+	getargs.h is already included.
+	* src/main.c (main): Update access.
+	* src/muscle_tab.c (muscle_percent_define_insert): Convert old
+	variable names to new variable names before assigning value.
+	* src/reader.c (reader): Update setting default.
+	* tests/calc.at: Update uses.
+	* tests/conflicts.at (Unreachable States After Conflict
+	Resolution): Update use.
+	* tests/input.at (%define enum variables): Update use.
+	(%define backward compatibility): New test group.
+	* tests/push.at: Update uses.
+	* tests/reduce.at: Update uses.
+	* tests/torture.at: Update uses.
+
+2009-04-30  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Set all front-end %define defaults in one place.
+	* src/main.c (main): Move lr.keep_unreachable_states default...
+	* src/reader.c (reader): ... to here.
+
+2009-04-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Rename lr.default_reductions to lr.default-reductions.
+	* NEWS (2.5): Here.
+	* doc/bison.texinfo: Here.
+	* src/lalr.c (initialize_LA): Here.
+	* src/print.c (print_reductions): Here.
+	* src/reader.c (reader): Here.
+	* src/tables.c (action_row): Here.
+	* tests/input.at (%define enum variables): Here.
+	* tests/reduce.at (AT_TEST_LR_DEFAULT_REDUCTIONS): Here.
+
+2009-04-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Pacify ./configure --enable-gcc-warnings.
+	* tests/input.at (Symbols): Prototype yyerror and yylex.
+
+2009-04-21  Akim Demaille  <demaille@gostai.com>
+
+	tests: check the use of dashes and periods in symbols.
+	* tests/input.at (Symbol): New test group.
+
+2009-04-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Document how `%define "var" "value"' is not M4-friendly.
+	* src/parse-gram.y (variable): In comments here.
+
+2009-04-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Add copyright updates missed during previous cherry pick.
+	* src/output.c: Here.
+	* src/parse-gram.y: Here.
+	* src/scan-gram.l: Here.
+
+2009-04-20  Akim Demaille  <demaille@gostai.com>
+
+	variables: accept dashes.
+	* src/scan-gram.l ({id}): Also accept dashes after the initial
+	letter.
+	({directive}): Use {id}.
+	* src/parse-gram.y: Comment and formatting changes.
+	* doc/bison.texinfo (Symbols): Adjust the lexical definitions of
+	symbols.
+	* src/complain.h, src/complain.c (yacc_at): New.
+	* src/symtab.c (symbol_new): Use yacc_at to report inappropriate
+	symbol names.
+	* src/output.c (token_definitions_output): Do not #define token
+	names with dashes.
+
+2009-04-24  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Clean up recent patches a little.
+	Reported by Akim Demaille.
+	* doc/bison.texinfo (Understanding): Fix typos.
+	* src/print.c (print_reductions): Don't use negated variable.
+
+2009-04-24  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	List accepted values for a %define enum variable with an invalid value.
+	Suggested by Akim Demaille at
+	<http://lists.gnu.org/archive/html/bison-patches/2009-04/msg00082.html>.
+	* data/bison.m4 (_b4_percent_define_check_values): Implement.
+	* src/muscle_tab.c (muscle_percent_define_check_values): Implement.
+	* tests/input.at (%define lr.default_reductions invalid values): Merge
+	into...
+	(%define enum variables): ... here, and update output.
+
+2009-04-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Rename "default rule" to "default reduction".
+	This includes changing variable names in code, changing
+	comments, and renaming %define lr.default_rules to %define
+	lr.default_reductions.
+	* NEWS (2.5): Update IELR documentation.
+	* data/glr.c, data/lalr1.cc, data/lalr1.java, data/yacc.c:
+	Adjust YYDEFACT and yydefact_ documentation.
+	* doc/bison.texinfo (Decl Summary): Adjust lr.default_reductions
+	and lr.type documentation.  Make some other wording
+	improvements.
+	(Glossary): Adjust cross-references and Default Reduction
+	definition.
+	* src/lalr.c (state_lookahead_tokens_count): Adjust code.
+	Remove a confusing comment pointed out by Akim Demaille.
+	(initialize_LA): Adjust code.
+	* src/print-xml.c (print_reductions): Adjust code.
+	* src/print.c (print_reductions): Adjust code.
+	* src/reader.c (reader): Adjust code.
+	* src/tables.c (action_row): Adjust code.
+	(token_actions): Adjust code.
+	* src/tables.h: Adjust YYDEFACT documentation.
+	* tests/input.at (%define lr.default_rules invalid values):
+	Rename test group to...
+	(%define lr.default_reductions invalid values): ... this, and
+	update grammar file and expected output.
+	* tests/reduce.at (AT_TEST_LR_DEFAULT_RULES): Rename to...
+	(AT_TEST_LR_DEFAULT_REDUCTIONS): ... this, and update.
+
+2009-04-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Document %define lr.type and lr.default_rules.
+	* NEWS (2.5): Add an entry.
+	* src/getargs.c (usage): Mention IELR(1) and canonical LR(1)
+	besides just LALR(1) and GLR(1).
+	* doc/bison.texinfo (Introduction): Likewise.
+	(Language and Grammar): Bison is no longer limited to LALR(1)
+	restrictions.
+	(GLR parsing): Say deterministic or LR(1) rather than LALR(1)
+	when trying to distinguish from GLR.  Talk about LR(1) grammars
+	rather than LALR(1) grammars.
+	(Decl Summary): In %define api.push_pull entry, say it applies
+	to deterministic parsers in C rather than LALR(1) parsers in C.
+	Add lr.default_rules entry.
+	Add lr.type entry.
+	(Mystery Conflicts): Bison is no longer limited to LALR(1)
+	restrictions.
+	(Generalized LR Parsing): Same changes as for the previous GLR
+	section.
+	(Memory Management): Say deterministic rather than LALR(1).
+	(Understanding): Correct some bison output.
+	Index discussion of "accepting state".
+	Say deterministic rather than LALR(1).
+	(Bison Options): In --yacc entry, say deterministic rather than
+	LALR(1).
+	In --report, --graph, and --xml entries, just don't mention
+	LALR(1).
+	(C++ Parsers): Say deterministic rather than LALR(1).
+	(Table of Symbols): Likewise in YYSTACK_USE_ALLOCA entry.
+	(Glossary): Add Accepting State, Consistent State, Default Rule,
+	and IELR(1) definitions.
+	In Generalized LR (GLR) definition, make same changes as in
+	previous GLR sections.
+	In LALR(1) definition, say Bison uses LALR(1) by default rather
+	than implying Bison is limited to LALR(1).
+	(LocalWords): Add IELR.
+
+2009-04-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Finish implementing %define lr.type.
+	Its value can be "LALR", "IELR", or "canonical LR".
+	* lib/timevar.def (TV_IELR_PHASE1): New var.
+	(TV_IELR_PHASE2): New var.
+	(TV_IELR_PHASE3): New var.
+	(TV_IELR_PHASE4): New var.
+	* src/Makefile.am (bison_SOURCES): Add AnnotationList.c,
+	AnnotationList.h, InadequacyList.c, InadequacyList.h, Sbitset.c,
+	Sbitset.h, ielr.h, and ielr.c.
+	* src/getargs.h, src/getargs.c (enum trace, trace_args,
+	trace_types): Add trace_ielr.
+	* src/lalr.h, src/lalr.c (ngotos): Export it.
+	(F): Rename to...
+	(goto_follows): ... this, update all uses, and export it.
+	(set_goto_map): Export it.
+	(map_goto): Export it.
+	(compute_lookahead_tokens): Don't free goto_follows yet.  Now
+	handled in ielr.
+	(initialize_LA): Export it.  Move lookback allocation to...
+	(lalr): ... here because, for canonical LR, initialize_LA must
+	be invoked but lookback and much of the rest of LALR isn't
+	needed.
+	* main.c (main): Instead of lalr, invoke ielr, which invokes
+	lalr.
+	* src/reader.c (reader): Default lr.type to "LALR".
+	Default lr.default_rules to "accepting" if lr.type is "canonical
+	LR".  Leave the default as "all" otherwise.
+	Check for a valid lr.type value.
+	* src/state.h, src/state.c (struct state_list): Add state_list
+	member.
+	(state_new): Initialize state_list member to NULL.
+	(state_new_isocore): New function, exported.
+	* tests/existing.at (AT_TEST_EXISTING_GRAMMAR): New macro that
+	exercises all values of lr.type.
+	(GNU AWK Grammar): Rename test group to...
+	(GNU AWK 3.1.0 Grammar): ... this, and extend to use
+	AT_TEST_EXISTING_GRAMMAR.
+	(GNU Cim Grammar): Extend to use AT_TEST_EXISTING_GRAMMAR.
+	(GNU pic Grammar): Rename test group to...
+	(GNU pic (Groff 1.18.1) Grammar): ... this, and extend to use
+	AT_TEST_EXISTING_GRAMMAR.
+	* tests/reduce.at (AT_TEST_LR_TYPE): New macro that exercises
+	all values of lr.type.
+	(Single State Split): New test groups using AT_TEST_LR_TYPE.
+	(Lane Split): Likewise.
+	(Complex Lane Split): Likewise.
+	(Split During Added Lookahead Propagation): Likewise.
+
+2009-04-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Add new files for IELR and canonical LR implementation.
+	* src/AnnotationList.c: New.
+	* src/AnnotationList.h: New.
+	* src/InadequacyList.c: New.
+	* src/InadequacyList.h: New.
+	* src/Sbitset.c: New.
+	* src/Sbitset.h: New.
+	* src/ielr.c: New.
+	* src/ielr.h: New.
+
+2009-04-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Implement %define lr.default_rules.
+	Its value describes the states that are permitted to contain
+	default rules: "all", "consistent", or "accepting".
+	* src/reader.c (reader): Default lr.default_rules to "all".
+	Check for a valid lr.default_rules value.
+	* src/lalr.c (state_lookahead_tokens_count): If lr.default_rules
+	is "accepting", then only mark the accepting state as
+	consistent.
+	(initialize_LA): Tell state_lookahead_tokens_count whether
+	lr.default_rules is "accepting".
+	* src/tables.c (action_row): If lr.default_rules is not "all",
+	then disable default rules in inconsistent states.
+	* src/print.c (print_reductions): Use this opportunity to
+	perform some assertions about whether lr.default_rules was
+	obeyed correctly.
+	* tests/local.at (AT_TEST_TABLES_AND_PARSE): New macro that
+	helps with checking the parser tables for a grammar.
+	* tests/input.at (%define lr.default_rules invalid values): New
+	test group.
+	* tests/reduce.at (AT_TEST_LR_DEFAULT_RULES): New macro using
+	AT_TEST_TABLES_AND_PARSE.
+	(`no %define lr.default_rules'): New test group generated by
+	AT_TEST_LR_DEFAULT_RULES.
+	(`%define lr.default_rules "all"'): Likewise.
+	(`%define lr.default_rules "consistent"'): Likewise.
+	(`%define lr.default_rules "accepting"'): Likewise.
+
+2009-04-20  Akim Demaille  <demaille@gostai.com>
+
+	Consistently refer to Yacc, not YACC.
+	* src/getargs.c (usage, warnings_args): s/YACC/Yacc/.
+
+2009-04-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Pacify make maintainer-check-posix.
+	* tests/input.at (%define, --define): Move bison command-line
+	options before grammar file name.
+
+2009-04-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Document semicolon warnings.
+	* NEWS (2.5): Here.
+
+2008-12-08  Akim Demaille  <demaille@gostai.com>
+
+	Fix portability issue in the test suite.
+	* tests/local.at (AT_MATCHES_CHECK): New.
+	Based on Perl instead of Sed.  Sed has too many portability
+	pitfalls, not ever Sed is GNU Sed.
+	* tests/actions.at (Fix user actions without a trailing semicolon):
+	Use it.
+
+2008-12-07  Di-an Jan  <dianj@freeshell.org>
+
+	Implement the FIXME that ends an user action with a semicolon
+	if it seems necessary.
+	* src/scan-code.l (flex rules section): Flag cpp directive from
+	any `#' to the first unescaped end-of-line.  Semicolon is not
+	needed after `;', `{', '}', or cpp directives and is needed after
+	any other token (whitespaces and comments have no effect).
+	* tests/actions.at (Fix user actions without a trailing semicolon):
+	New test.
+	* tests/input.at (AT_CHECK_UNUSED_VALUES): Add semicolons to
+	to make user actions complete statements.
+	Adjust column numbers in error messages.
+	* tests/regression.at (Fix user actions without a trailing semicolon):
+	Remove.  Covered by new test.
+
+2009-04-14  Akim Demaille  <demaille@gostai.com>
+
+	doc: minor fixes.
+	* doc/bison.texinfo (Decl Summary): Fix entry about %debug.
+	(Table of Symbols): Remove duplicate entry for %debug.
+
+2009-04-10  Eric Blake  <ebb9@byu.net>
+
+	submodules: update to latest
+	* submodules/autoconf: Use latest upstream Autoconf.
+
+2009-04-06  Eric Blake  <ebb9@byu.net>
+
+	Work around autoconf 2.63b bug in testsuite.
+	* tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): Avoid tripping
+	autoconf bug related to # in test.
+
+2009-04-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS (2.5): Describe new -D/--define feature.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	--trace=muscles
+	* src/getargs.h, src/getargs.c (trace_muscle): New.
+	(trace_types, trace_args): Support it.
+	* src/output.c (output_skeleton): Use it.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	muscles_output.
+	* src/output.c (muscles_output): New, extracted from...
+	(output_skeleton): here.
+	Adjust.
+
+2008-11-21  Akim Demaille  <demaille@gostai.com>
+
+	Display the changes in cross-options.texi.
+	* build-aux/cross-options.pl ($sep): New, to separate items.
+	* doc/Makefile.am ($(srcdir)/cross-options.texi): Use diff to display
+	the changes.
+
+2008-11-20  Di-an Jan  <dianj@freeshell.org>
+
+	Improves options in the manual.
+	* doc/bison.texinfo (-g, -x): Add space before argument.
+	(Option Cross Key): Implement FIXME: listing directives also.
+	* build-aux/cross-options.pl:  Read from <STDIN> rather than <>.
+	(Short Option): Special case -d.  Put arguments inside @option.
+	(Bison Directive): Add column, automatically extracted from
+	src/scan-gram.l (actual name passed as the first argument)
+	with special case for %define.
+	* doc/Makefile.am (doc/cross-options.texi): Pass src/scan-gram.l
+	to build-aux/cross-options.pl.
+	* src/getargs.c (usage): Document limitations of cross-options.pl.
+	* src/scan-gram.l: Likewise.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+	Copyright years.
+	* data/glr.c: Add 2007 and 2008 here, consistenly with the comments.
+
+2008-12-08  Akim Demaille  <demaille@gostai.com>
+
+	Install autoconf as a submodule to get m4sugar.
+	* .gitmodules: Add submodules/autoconf.
+	* data/m4sugar/foreach.m4, data/m4sugar/m4sugar.m4: Now links into
+	submodules/autoconf.
+
+2008-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Simplify last patch slightly.
+	* src/getargs.c (getargs): Here.
+
+2008-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix last warning from --enable-gcc-warnings.
+	* src/getargs.c (getargs): Don't assign const address to non-const
+	pointer.
+
+2008-11-17  Di-an Jan  <dianj@freeshell.org>
+
+	Handle --enable-gcc-warnings.
+	* src/getargs.c (command_line_location): Set parameters to void.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	AT_FULL_COMPILE.
+	* tests/actions.at, tests/regression.at: Use it.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Pass command line location to skeleton_arg and language_argmatch.
+	* src/getargs.h, src/getargs.c (skeleton_arg, language_argmatch):
+	The location argument is now mandatory.
+	Adjust all dependencies.
+	(getargs): Use command_line_location.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	-D, --define.
+	* src/getargs.c (usage): Document -D.
+	Fix help string for --locations.
+	(command_line_location): New.
+	(short_options, long_options, getargs): Support -D, --define.
+	(getargs): Move -d support at the right place.
+	* doc/bison.texinfo (Bison Options): Update.
+	* tests/input.at (%define, --define): New.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Initialize the muscle table before parsing the command line.
+	* src/getargs.c (quotearg.h, muscle_tab.h): Include.
+	(getargs): Define file_name.
+	* src/main.c (main): Initialize muscle_tab before calling
+	getargs.
+	* src/muscle_tab.c (muscle_init): No longer define file_name, as
+	its value is not available yet.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Require the generation of parse-gram.output.
+	* src/Makefile.am (YACC): Pass --report=all.
+
+2009-04-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS (2.5): New stub.
+
+2009-04-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix options documentation.
+	* build-aux/cross-options.pl: As in --help output, write optional
+	arguments as [=ARG] not =[ARG].
+	* doc/bison.texinfo (Bison Options): Add -W/--warnings argument.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Fix --help.
+	* src/getargs.c (usage): Fix help string for -W.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Handle more general types of option arguments.
+	* build-aux/cross-options.pl: The argument ends at the first
+	space, not the first non-symbol character.
+	Use @var for each word appearing the argument description.
+
+2009-04-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Remove spurious initial empty lines.
+	* data/location.cc: End the @output lines with an @.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Remove spurious initial empty lines.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java,
+	* data/yacc.c: End the @output lines with an @.
+
+2009-04-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Replace BISON_PROG_GNU_M4 with Autoconf's AC_PROG_GNU_M4.
+	If the first m4 in $PATH is wrong, it keeps looking.  Moreover, its
+	requirements for a correct m4 are stricter.
+	* m4/m4.m4: Replace with Autoconf 2.63's m4/m4.m4.
+	* configure.ac: Update to use AC_PROG_GNU_M4.
+	Reported by Eric Blake.
+
+2009-04-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Help with updating web manual.
+	* HACKING: Incorporate instructions from gnulib/doc/README.
+	* bootstrap.conf (gnulib_modules): Add gendocs.
+
+2009-04-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix strange %define locations for default values.
+	Reported by Akim Demaille at
+	<http://lists.gnu.org/archive/html/bug-bison/2007-12/msg00001.html>
+	and discussed again starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2008-11/msg00102.html>.
+	* data/bison.m4 (b4_percent_define_default): Leave syncline blank
+	because location information is bogus.
+	Use angle brackets to delimit fake file name because square brackets
+	look like underexpanded m4.  Choose a better fake file name.
+	Use negative line numbers.
+	* src/muscle_tab.c (muscle_percent_define_default): Likewise.
+	* src/location.c (location_print): If line for a boundary is negative,
+	only print that boundary's file name.
+	* src/location.h: Document that.
+	* tests/skeletons.at (%define Boolean variables: invalid skeleton
+	defaults): Update output.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Locations without columns for command line arguments.
+	* src/location.c (location_print): Don't display negative columns.
+	* src/location.h: Document this.
+
+2009-02-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Add reminder about uploading public key to keys.gnupg.net.
+	* HACKING (Release Procedure): Here.
+
+2009-03-31  Akim Demaille  <demaille@gostai.com>
+
+	bootstrap: --help to stdout.
+	* bootstrap (usage): Don't send --help to stderr.
+	Use a here doc instead of a long string.
+
+2009-03-31  Akim Demaille  <demaille@gostai.com>
+
+	bootstrap: README-hacking no longer exists
+	* bootstrap (checkout_only_file): Set to HACKING.
+
+2009-03-26  Akim Demaille  <demaille@gostai.com>
+
+	doc: merge HACKING and README-hacking.
+	Two files is confusing.
+	Reported by Alexandre Duret-Lutz.
+
+	* README-hacking: Merge into...
+	* HACKING (Working from the repository): here.
+
+2009-03-26  Akim Demaille  <demaille@gostai.com>
+
+	doc: update README-hacking.
+	* README-hacking: We now use git and git submodules.
+	Reported by Ralf Wildenhues and Alexandre Duret-Lutz.
+
+2009-03-26  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: avoid GCC 4.3 warnings.
+	GCC 4.3 now warns about "a || b && c" and asks for explicit
+	parentheses.
+	Reported by Alexandre Duret-Lutz.
+	* data/location.cc: Update copyright years.
+	(Position::operator==): Use parens to make precedence explicit.
+	Compare lines and columns first, as they are more likely to be
+	different, and they are faster to compare.
+
+2009-03-26  Akim Demaille  <demaille@gostai.com>
+
+	gnulib: update.
+	* gnulib: Update to latest.
+	* lib/Makefile.am (AM_CPPFLAGS): It is now defined by gnulib, so
+	use +=.
+
+2009-01-08  Akim Demaille  <demaille@gostai.com>
+
+	Fix grep portability issues.
+	Grep on Solaris does not support -q.
+	Reported by Summum Bonum.
+
+	* NEWS: Add a stub for 2.4.2.
+	* THANKS: Add Summum Bonum.
+	* tests/atlocal.in (EGREP): New.
+	(CC, CXX, XSLTPROC): Make it possible to override them via
+	envvars.
+	* tests/java.at: Use $EGREP instead of egrep.
+	Use AT_CHECK's ignore instead of grep's -q.
+
+2008-12-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Version 2.4.1.
+	* NEWS: Set version and date.
+	* lib/Makefile.am: Update copyright year.
+	* tests/atlocal.in: Update copyright year.
+
+2008-12-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Semicolon feature removal is not about future language support.
+	* NEWS: The semicolon feature is no longer active for newer languages,
+	so don't claim that it causes trouble for them.
+
+2008-12-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* gnulib: Update submodule to HEAD.
+
+2008-12-09  Akim Demaille  <demaille@gostai.com>
+
+	Update data/README.
+	* data/README: Document glr.cc, lalr1.java, m4sugar and xslt.
+
+2008-12-05  Eric Blake  <ebb9@byu.net>
+
+	Build testsuite with newer autoconf.
+	* tests/output.at (m4_expand): Don't override in newer autoconf,
+	where the underlying implementation changed.
+	* tests/cxx-type.at (_AT_RESOLVED_GLR_OUTPUT)
+	(_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_AMBIG_GLR_OUTPUT)
+	(_AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
+	(_AT_VERBOSE_GLR_STDERR): Expand to double-quoted strings,
+	since some of them contain unbalanced ')'.
+
+2008-11-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS: Clarify a little.
+
+2008-11-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS: Update for recent changes.
+
+2008-11-18  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix unexpanded macros in GLR defines file.
+	Reported by Csaba Raduly at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-11/msg00048.html>.
+	* THANKS (Csaba Raduly): Add.
+	* data/glr.c: Fix overquoting on b4_prefix for yylval and yylloc.
+	* tests/calc.at (_AT_DATA_CALC_Y): If %defines is specified, generate
+	lexer in a separate module that includes the defines file.
+	(AT_CHECK_CALC): Use AT_FULL_COMPILE and request compilation of lexer
+	source.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Push AT_DEFINES_IF.
+	Adjust AT_LOC and AT_VAL to use AT_NAME_PREFIX.
+	(AT_BISON_OPTION_POPDEFS): Pop AT_DEFINES_IF.
+	(AT_DATA_SOURCE_PROLOGUE): New.
+	(AT_DATA_GRAMMAR_PROLOGUE): Use AT_DATA_SOURCE_PROLOGUE.
+	(AT_DATA_SOURCE): New.
+	(AT_FULL_COMPILE): New, copied from master branch and extended to
+	support an additional source file.
+
+2008-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't let maintainer-*-check targets force a version update.
+	* cfg.mk (_is-dist-target): Implement.  maintainer-check* was already
+	handled.
+
+2008-11-17  Di-an Jan  <dianj@freeshell.org>
+
+	* doc/bison.texinfo: Synchronize ``Detail Node Listing''.
+	Align menus.  Adjust word wrapping.  Use node names for menu names.
+	(Examples): Don't abbreviate node names.
+	(LocalWords): Remove abbreviations.
+	(Copying): Make description a sentence.
+	(Java Action Features): Remove period to match the rest of menu.
+
+2008-11-11  Paolo Bonzini  <bonzini@gnu.org>
+
+	* bootstrap.conf: Replace m4/warning.m4 with warnings module.
+	* configure.ac: Adjust usage.
+	* lib/Makefile.am: Replace $(WARNING_CFLAGS) with $(WARN_CFLAGS).
+	* src/Makefile.am: Replace $(WARNING_CFLAGS) with $(WARN_CFLAGS).
+	* tests/atlocal.in: Replace $(WARNING_*FLAGS) with $(WARN_*FLAGS).
+
+2008-11-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't add a semicolon to actions for %skeleton or %language.
+	It breaks Java test cases as reported by Akim Demaille.
+	* src/scan-code.l: Implement.
+
+2008-11-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Clean up %skeleton and %language priority implementation.
+	* src/getargs.c (skeleton_prio): Use default_prio rather than 2, and
+	remove static qualifier because others will soon need to see it.
+	(language_prio): Likewise.
+	(getargs): Use command_line_prio rather than 0.
+	* src/getargs.h (command_line_prio, grammar_prio, default_prio): New
+	enum fields.
+	(skeleton_prio): Extern it.
+	(language_prio): Extern it.
+	* src/parse-gram.y: Use grammar_prio rather than 1.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	* NEWS: Mention the trailing semicolon in action.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Reformat NEWS.
+	* NEWS: Use more outline-mode markup.
+	Suggested by Jim Meyering.
+
+2008-11-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix user actions without a trailing semicolon.
+	Reported by Sergei Steshenko at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-11/msg00001.html>.
+	* THANKS (Sergei Steshenko): Add.
+	* src/scan-code.l (SC_RULE_ACTION): Fix it.
+	* tests/regression.at (Fix user actions without a trailing semicolon):
+	New test case.
+
+2008-11-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Initiate further development.
+	* NEWS: Create an empty section for new entries.
+	* gnulib: Update submodule to HEAD.
+
+2008-11-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS: Version 2.4.
+
+2008-11-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Prepare for next release.
+	* NEWS: Briefly mention changes since 2.3b.
+	* README: Say GNU m4 1.4.6, which we've been requiring in release
+	announcements already, not 1.4.3, which breaks the build.
+
+2008-11-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Say %language is experimental.
+	We're thinking of extending it's effect on output file naming.  See the
+	thread at
+	<http://lists.gnu.org/archive/html/bison-patches/2008-10/msg00003.html>.
+	* NEWS: Say it's experimental.
+	* doc/bison.texinfo (Decl Summary): Say it's experimental, and so don't
+	recommend it over %skeleton for now.
+	(Bison Options): Likewise.
+	(C++ Bison Interface): Use %skeleton not %language.
+	(Calc++ Parser): Use %skeleton not %language.
+	* src/getargs.c (usage): Say it's experimental.
+
+2008-11-01  Di-an Jan  <dianj@freeshell.org>
+	    Paolo Bonzini  <bonzini@gnu.org>
+
+	Support all Java parser class modifiers.
+	* data/java.m4 (b4_percent_define_get3): New.
+	(b4_final_if, b4_strictfp_if): New.
+	* data/lalr1.java (final, strictfp, extends, implements): Support.
+	* doc/bison.texinfo (final, strictfp, extends, implements): Add
+	documentation.
+	* tests/java.at (AT_CHECK_JAVA_MINIMAL): New.
+	(AT_CHECK_JAVA_MINIMAL_W_LEXER): New.
+	(AT_CHECK_JAVA_GREP): New.
+	(Java parser class modifiers): New test.
+	(Java parser class extends and implements): New test.
+
+	Model exception propagation better with throws and lex_throws.
+	* data/java.m4 (b4_list2): New.
+	(throws): Change default.
+	* data/lalr1.java (yyaction): Add throws.
+	(parse): Add lex_throws in addition to throws.
+	* doc/bison.texinfo (throws, lex_throws): Add documentation.
+	* tests/java.at (Java throws specifications): New test.
+
+	Improve documentation for Java parsers.
+	* doc/bison.texinfo (Java Parsers): Add subsections.
+	Don't quote first argument of %define.
+	(Java Bison Interface): Document output files.  Move documentation
+	of parser class and merge into Java Parser Interface.  Document
+	features that error out.  Document directives with no effect.
+	Move note about Javadoc higher.
+	(Java Semantic Values): Explicitly mention stype.
+	Document that generic types cannot be used.
+	(Java Location Values): Use @deftypeivar.  Document constructors.
+	Correct return value for toString.
+	(Java Parser Interface): List undocumented constants/fields.
+	Move documentation of fields added by %parse-param closer to list
+	of members.  Document that token names are added as fields.
+	Document constructors accurately.  Remove error method.
+	(Java Scanner Interface): Move note on %pure-parser to Java Bison
+	Interface.  Describe %code lexer and yylex accutately.
+	Remove documentation that does not match the code.
+	(Java Action Features): New.
+	(Java Differences): Add reference.  Add item on semantic values.
+	Add note about @{ ... @}.  Clarify %% epilogue placement.
+	(Java Declarations Summary): New.
+
+	Fix Java skeleton.
+	* data/java.m4 (b4_prefix): Correct quoting for m4_define_default.
+	(b4_remove_comma): Quote test argument.
+	(b4_identification): Remove "bison" field.
+	* tests/java.at (Java parser class and package names): New test.
+	(Java %parse-param and %lex-param): New test.
+	(Java stype, position_class and location_class): New test.
+
+2008-10-31  Di-an Jan  <dianj@freeshell.org>
+
+	* data/lalr1.jave: Update copyright years.
+	(YYParser): Correct name of "generated from" file in Javadoc:
+	use b4_file_name instead of @ofile@.
+	(Location constructor): Correct Javadoc parameter name.
+	(yylloc): Add missing opening m4 quote after b4_location_if.
+	This removes a stray [ in the Javadoc of Lexer.getStartPos.
+	(Lexer.yyerror): Fix incorrect m4 and Javadoc.
+	(YYParser constructor): Correct Javadoc parameter name.
+
+2008-10-30  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Always put auxiliary code files in the same dir as other output files.
+	* src/files.c (compute_file_name_parts): When the user specifies
+	--output but not --file-prefix, extract the directory prefix from the
+	file prefix not from the grammar file name.  This affects the location
+	of files like location.hh generated by the C++ skeleton.  The includes
+	in the other output files require this fix.
+	* tests/output.at (AT_CHECK_OUTPUT): Automatically create directories
+	for expected output files.
+	(Output files): Add a test for the above.
+
+2008-10-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* gnulib: Update submodule to HEAD.
+
+2008-10-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update copyright year.
+	* src/files.c: Here.
+
+2008-10-28  Di-an Jan  <dianj@freeshell.org>  (tiny change)
+
+	Don't overwrite the input file.
+	* src/files.c (output_file_name_check): Fatal error if using input file
+	for output.
+	* tests/output.at: (AT_CHECK_CONFLICTING_OUTPUT): Add return status
+	argument.
+	(Conflicting output files): Add test.
+
+2008-10-28  Akim Demaille  <demaille@gostai.com>
+
+	Space changes.
+	* data/lalr1.cc: Formatting changes.
+
+2008-10-28  Akim Demaille  <demaille@gostai.com>
+
+	Don't define debugging functions when !YYDEBUG.
+	* data/lalr1.cc (debug_stream, set_debug_stream)
+	(debug_level_type, debug_level, set_debug_level): Don't
+	declare them when YYDEBUG is not defined.
+	The implementation are already YYDEBUG-aware.
+
+2008-10-28  Akim Demaille  <demaille@gostai.com>
+
+	Prefer "continue" for empty loop bodies.
+	* etc/bench.pl.in: Use "continue" instead of {}.
+
+2008-10-28  Akim Demaille  <demaille@gostai.com>
+
+	Space and comments changes.
+	* data/c++.m4, data/glr.c, data/lalr1.cc: Copyright year changes.
+	* data/c.m4, data/lalr1.cc: Space changes.
+
+2008-10-28  Akim Demaille  <demaille@gostai.com>
+
+	Make gnulib a submodule.
+	* gnulib: New.
+	* .gitmodules (gnulib): New.
+
+2008-10-18  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix yyerror_range for user-defined location type in C++.  Reported by
+	Georg Sauthoff at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-08/msg00008.html>.
+	* data/lalr1.cc (parse): Change type of yyerror_range to location_type.
+	* THANKS (Georg Sauthoff): Add.
+
+2008-10-18  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update several administrative files mainly to facilitate releasing.
+	* HACKING (Administrivia): Make the git-merge-changelog notes more
+	helpful.
+	(Test suite): Don't say lalr1.cc is not exercised in the test suite.
+	(Release Procedure): Update for git and add numerous details that were
+	previously missing.
+	* Makefile.am (EXTRA_DIST): Remove Makefile.cfg and Makefile.maint.
+	* maint.mk (announcement): Don't list bison as a bootstrap tool so
+	that announcements don't claim we bootstrapped with whatever bison
+	happened to be in PATH.  Add flex as a bootstrap tool.
+	* Makefile.maint: Remove, previously replaced by maint.mk.
+	* Makefile.cfg: Remove, and migrate settings to...
+	* cfg.mk: ... here for the sake of `make announcement'.
+	* bootstrap.conf (gnulib_modules): Add announce-gen.
+	* README: Say GNU Bison instead of just Bison.  Suggested by Karl
+	Berry.
+
+2008-10-08  Di-an Jan  <dianj@freeshell.org>  (tiny change)
+
+	Small but important bugfixes for the Java skeleton.
+	* data/lalr1.java (yyerror): Change Location to b4_location_type.
+	(yy_symbol_print): Call toString on yyvaluep.
+
+2008-08-29  Akim Demaille  <demaille@gostai.com>
+
+	Clarify UPDATED use.
+	* doc/bison.texinfo: It refers to the last edition of this file,
+	not to the release date of Bison.
+	Reported by Joel E. Denny.
+
+2008-08-29  Akim Demaille  <demaille@gostai.com>
+
+	* README: Update FAQ pointer.
+	Reported by Joel E. Denny.
+
+2008-08-27  Eric Blake  <ebb9@byu.net>
+
+	Resync m4sugar from autoconf.
+	* data/m4sugar/m4sugar.m4 (m4_defn, m4_popdef, m4_undefine)
+	(m4_init): Adjust to latest m4.git changes.
+	(m4_mapall_sep, _m4_list_cmp, m4_version_compare): Reduce side
+	effects.
+	* data/m4sugar/foreach.m4 (_m4_shiftn): Fix off-by-one bug.
+	(_m4_list_cmp): Reduce side effects.
+
+2008-08-27  Akim Demaille  <demaille@gostai.com>
+
+	Check yyerrok in calc.at.
+	* tests/calc.at (calc.y): Use yyerrok on "( error )".
+	(AT_CHECK_CALC): Add a check that ensures that yyerrok works as
+	expected.
+
+2008-08-27  Akim Demaille  <demaille@gostai.com>
+
+	Support yyerrok in lalr1.cc.
+	YYBACKUP is still to import back into lalr1.cc.
+	* data/lalr1.cc (yyerrork, yyclearin, YYRECOVERING): Define.
+
+2008-08-26  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	For maintainer-check*, don't recompile for a $(VERSION) update.
+	* cfg.mk: New file.
+	(_is-dist-target): Override the one in GNUmakefile.
+	* Makefile.am (EXTRA_DIST): Add cfg.mk.
+
+2008-08-26  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update for recent change to gnulib.
+	* src/parse-gram.y: Don't include strverscmp.h.  It comes from
+	string.h now.
+
+2008-08-15  Eric Blake  <ebb9@byu.net>
+
+	Remaining m4sugar merge from autoconf.
+	* data/m4sugar/m4sugar.m4: Copy entire file from autoconf.
+	* data/m4sugar/foreach.m4: New file, copied from autoconf.
+	* data/Makefile.am (dist_m4sugar_DATA): Distribute it.
+	* src/output.c (output_skeleton): Tell m4 how to find it.
+
+	Partial m4sugar merge from autoconf: m4_map.
+	* data/m4sugar/m4sugar.m4 (m4_fst): Delete.
+	(m4_map, m4_map_sep, _m4_map): Rewrite more efficiently.
+	(m4_apply, _m4_apply, m4_mapall, m4_mapall_sep): New macros.
+	* data/java.m4 (b4_token_enums): Use more efficient short-circuit
+	for empty list.
+	* data/c.m4 (b4_token_defines, b4_token_enums, b4_c_ansi_formals):
+	Likewise.
+	(b4_parse_param_for): Avoid m4_fst, now that autoconf no longer
+	declares it.
+
+2008-08-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Keep .version and PACKAGE_VERSION in sync.
+	* Makefile.am ($(top_srcdir)/.version): Declare configure as a
+	dependency, and add comments justifying this in more detail.  Discussed
+	starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2008-07/msg00022.html>.
+
+2008-08-06  Eric Blake  <ebb9@byu.net>
+
+	Partial m4sugar merge from autoconf: m4_shiftn.
+	* data/m4sugar/m4sugar.m4 (m4_shiftn): Faster implementation.
+	(m4_shift2, m4_shift3): New macros.
+	(m4_case, m4_bmatch, m4_bpatsubsts, m4_join): Adjust clients.
+	* data/c.m4 (b4_c_function_def, b4_c_ansi_function_def)
+	(b4_c_ansi_function_decl, b4_c_function_call): Likewise.
+	* data/java.m4 (b4_remove_comma): Likewise.
+
+	Partial m4sugar merge from autoconf: m4_wrap vs. m4 1.6.
+	* data/m4sugar/m4sugar.m4 (m4_unquote, m4_wrap_lifo): New macros.
+	(m4_wrap): Guarantee FIFO order, in spite of m4 1.6.
+	(m4_init): Consolidate wrapped text into single m4_wrap.
+	* data/bison.m4 (b4_check_user_names_wrap): Stick with LIFO order
+	in wrapped text.
+
+2008-08-05  Eric Blake  <ebb9@byu.net>
+
+	Partial m4sugar merge from autoconf: builtins, version.m4.
+	* data/m4sugar/m4sugar.m4 (changeword): Nuke.
+	(m4_prepend): Remove, as it is unused and inherently quadratic,
+	whereas m4_append is linear in newer m4.
+	(m4_mkstemp): New builtin.
+	(m4_symbols): Make rename conditional.
+	(m4_version_prereq): Ensure fatal error if used in bison, which
+	intentionally lacks version.m4.
+
+	Fix comments in m4sugar.
+	* data/m4sugar/m4sugar.m4: Comment changes, borrowed from autoconf.
+
+2008-08-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update for recent .gitignore fix in Gnulib.
+	* bootstrap: Back out 2008-07-18 hack now that gnulib-tool creates
+	anchored .gitignore entries.
+
+2008-08-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Set gnu or gnits strictness.
+	* configure.ac (AM_INIT_AUTOMAKE): Set gnu strictness during
+	development and gnits strictness for releases.  Based on Eric Blake's
+	suggestion at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00019.html>.
+
+2008-07-31  Paolo Bonzini  <bonzini@gnu.org>
+
+	* NEWS: Clarify documentation of %language.
+
+2008-07-31  Paolo Bonzini  <bonzini@gnu.org>
+
+	Support usage of git-merge-changelog.
+	* .gitattributes: New.
+	* HACKING: Document usage of git-merge-changelog.
+	* bootstrap: Install git-merge-changelog entries in .git/config
+	if appropriate.
+
+2008-07-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Remove remaining dependence on CVS Id keyword.
+	* ChangeLog: For the sake of people still using CVS, don't use dollars
+	when mentioning Id.
+	* data/xslt/bison.xsl: Remove Id from header comments, where it was
+	unusual anyway.
+	* data/xslt/xml2dot.xsl: Likewise.
+	* data/xslt/xml2text.xsl: Likewise.
+	* data/xslt/xml2xhtml.xsl: Likewise.
+	* doc/Doxyfile.in (PROJECT_NUMBER): Don't use ID.
+	* doc/Makefile.am (neutralize): Remove, no longer needed.
+	(.x.1): Don't use neutralize.
+	(edit): Don't substitute for ID.
+	(Doxyfile): Don't define Id, and thus don't depend on ChangeLog.
+
+2008-07-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix dependence on computed configure variables.
+	* doc/Makefile.am (common_dep): Depend on $(top_srcdir)/configure not
+	$(top_srcdir)/configure.ac so that changes to computed variables, such
+	as PACKAGE_VERSION, are seen.
+	* tests/Makefile.am ($(srcdir)/package.m4): Likewise.
+
+2008-07-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update copyright dates for recent changes.
+	* Makefile.am: Here.
+	* src/Makefile.am: Here.
+	* src/reduce.c: Here.
+	* tests/reduce.at: Here.
+
+2008-07-18  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Use git-version-gen for version names between releases.
+	* .cvsignore (.tarball-version, GNUmakefile, *~): Add.
+	* .gitignore (/.tarball-version, /GNUmakefile, /*~): Add.
+	* .prev-version: New.
+	* .version.in: Remove.
+	* ChangeLog: Remove the Id previously used for capturing the CVS
+	revision.
+	* GNUmakefile: Remove, now copied from Gnulib.
+	* Makefile.am: Add code suggested by comments in
+	build-aux/git-version-gen.
+	(EXTRA_DIST): Remove GNUmakefile, handled by Gnulib.  Add maint.mk,
+	.prev-version, and .version.
+	* NEWS (2.3b+): Rename to...
+	(?.?): ... this because we're dropping the "+" version naming scheme,
+	but, in general, we still can't be sure of our next release name.
+	* bootstrap: Add a quick hack to remove from .gitignore the
+	GNUmakefile entry that gnulib adds.  We already have a /GNUmakefile
+	entry.  This should really be fixed in gnulib instead.
+	* bootstrap.conf (gnulib_modules): Add gnumakefile.
+	* configure.ac (AC_INIT): Set version name by invoking
+	build-aux/git-version-gen.
+	(AC_CONFIG_FILES): Remove .version, now generated by
+	build-aux/git-version-gen.
+	* maint.mk: New, copied from coreutils.
+	* doc/.cvsignore (bison.1): Add.
+	* doc/.gitignore (/bison.1): Add.
+	* doc/bison.1: Remove, generated.
+	* src/.cvsignore (revision.c): Remove.
+	* src/.gitignore (/revision.c): Remove.
+	* src/Makefile.am (bison_SOURCES): Remove revision.c and revision.h.
+	(BUILT_SOURCES): Remove revision.c.
+	(revision.c): Remove.
+	* src/getargs.c (version): Don't print revision after the VERSION.
+	* src/revision.h: Remove.
+
+2008-07-16  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix untranslatable composition of sentences.  Reported by Goran
+	Uddeborg at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-06/msg00000.html>.
+	* THANKS (Goran Uddeborg): Add.
+	* src/reduce.c (reduce_print): Report the number of nonterminals and
+	rules useless in the grammar in separate sentences.
+	* tests/reduce.at (Useless Rules): Update output.
+	(Reduced Automaton): Likewise.
+	(Underivable Rules): Likewise.
+	(Empty Language): Likewise.
+
+2008-07-15  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix some .gitignore and .cvsignore problems.
+	* bootstrap (insert_sorted_if_absent): Replace all uses with...
+	(insert_vc_ignore): ... this new function, which prepends `/' to all
+	.gitignore entries before passing them to insert_sorted_if_absent.
+	* bootstrap.conf (vc_ignore): Set to '.cvsignore .gitignore' so that
+	.cvsignore files are maintained even though Bison developers run
+	bootstrap while using Git.
+	* .cvsignore (*.patch *.log log patches applied): Remove, apparently
+	unneeded by Bison.
+	(gnulib): Add.
+	* .gitignore (/*.patch *.log log patches applied): Remove, broken and
+	unneeded.  Reported by Eric Blake.
+	* lib/.gitignore (/*~): Add.
+	* po/.cvsignore, runtime-po/.cvsignore: Sync with .gitignore.
+	* examples/calc++/.gitignore (/calc++.exe): Add.  Reported by Eric
+	Blake.
+	* src/.gitignore (/bison.exe): Add.  Reported by Eric Blake.
+
+2008-07-15  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Improve forward-compatibility with GNU M4.  Reported by Eric Blake at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>.
+	* bootstrap.conf (gnulib_modules): Add unsetenv.
+	* lib/.gitignore, lib/.cvsignore (/unsetenv.c): Add.
+	* m4/.gitignore, m4/.cvsignore (/environ.m4): Add.
+	(/setenv.m4): Add.
+	* src/output.c (output_skeleton): For the m4 invocation, pass -dV as
+	the first argument because it may become position-dependent, and unset
+	POSIXLY_CORRECT so Bison's skeletons have access to GNU M4 extensions.
+	Add comments explaining these issues in more detail.
+
+2008-07-14  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Add .gitignore everywhere based on .cvsignore.
+	* .gitignore: New.
+	* build-aux/.gitignore: New.
+	* data/.gitignore: New.
+	* doc/.gitignore: New.
+	* etc/.gitignore: New.
+	* examples/.gitignore: New.
+	* examples/calc++/.gitignore: New.
+	* lib/.gitignore: New.
+	* m4/.gitignore: New.
+	* po/.gitignore: New.
+	* runtime-po/.gitignore: New.
+	* src/.gitignore: New.
+	* tests/.gitignore: New.
+
+2008-05-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS (2.3b+): New section, empty for now.
+	* configure.ac (AC_INIT): 2.3b -> 2.3b+.
+
+2008-05-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS (2.3b): Update release date since there has been a delay in
+	getting the announcements and tarballs out.
+
+2008-05-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS: Version 2.3b.
+	* configure.ac (AC_INIT): Likewise.
+	(PACKAGE_COPYRIGHT_YEAR): Update to 2008.
+
+2008-05-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* HACKING: Don't say don't mention HACKING in the ChangeLog.  We've
+	been doing it for years.
+	(Test suite): Mention maintainer-push-check and maintainer-xml-check.
+	(Release Procedure): Add FIXME about make alpha being unmaintained.
+
+2008-05-13  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/yacc.c: Reformat m4 a little for readability.
+	* src/lalr.c (build_relations): Correct comment.
+
+2008-05-12  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	DJGPP specific issue.
+	* djgpp/config.sed: Fixes required to run configure scripts generated
+	by autoconf 2.62.
+
+2008-05-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* HACKING (Release Procedure): translation@iro.umontreal.ca is now
+	coordinator@translationproject.org.
+
+2008-05-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* THANKS: Add Eric Blake.
+
+2008-04-23  Eric Blake  <ebb9@byu.net>
+
+	Revert prior patch, by working around autoconf regression.
+	* tests/output.at (m4_expand): Add workaround for autoconf 2.62.
+	("Output file name: ("): Uncomment test.
+	("Output file name: )"): Likewise.
+	Based on an idea from Noah Misch.
+
+2008-04-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Work-around an Autoconf 2.62 AT_SETUP bug that was not present in
+	2.61.  Reported by Juan Manuel Guerrero at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-04/msg00011.html>.
+	* tests/output.at ("Output file name: ("): Comment out test case for
+	now.
+	("Output file name: )"): Likewise.
+
+2008-04-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* GNUmakefile: Update git-version-gen invocation so make dist
+	succeeds.
+
+2008-04-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update to the current gnulib CVS repository, and fix trigraph handling
+	in Bison.
+	* bootstrap: Update gnulib CVS repository URL.
+	(symlink_to_dir): Encapsulate the code that guarantees the destination
+	directory exists into...
+	(check_dst_dir): ... this new function, and...
+	(cp_mark_as_generated): ... reuse it here so that bootstrap doesn't
+	fail when copying files into lib/uniwidth/.
+	* src/output.c (prepare_symbols): When writing yytname muscles, where
+	symbol names will be encoded in C-string literals, tell quotearg to
+	escape trigraphs.  This used to be the default in gnulib.
+	* tests/regression.at (Token definitions): Because of the change in
+	gnulib's quotearg behavior, string_as_id in parse-gram.y no longer
+	escapes trigraphs in symbol names.  Thus, yytname no longer has
+	trigraphs unnecessarily doubly escaped.  Update test case output.
+	Extend test case to be sure Bison's own error messages will no longer
+	have trigraphs in symbol names unnecessarily escaped once.
+
+2008-04-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix make dist infinite loop reported by Juan Manuel Guerrero at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-01/msg00009.html>.
+	* .cvsignore: Add .version.
+	* .version.in: New.
+	* bootstrap.conf (gnulib_modules): Add git-version-gen.
+	* configure.ac (AC_CONFIG_FILES): Add .version.
+	* build-aux/.cvsignore: Add git-version-gen.
+
+2008-03-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS (2.3a+): Mention that -g now takes an argument.
+	* doc/bison.texinfo (Bison Options): Reword -W entry a little for
+	consistency.  Update the -g and -x entries now that they take
+	arguments.  Use brackets to indicate optional arguments.
+	* src/getargs.c (usage): Explain the relationship between arguments of
+	long and short options more completely.  Document --defines and -d
+	separately since the former takes an argument but, for POSIX Yacc, the
+	latter does not.
+	(short_options): Let -W take an optional argument like --warnings.
+	(getargs): Sort cases.
+
+2008-02-28  Akim Demaille  <demaille@gostai.com>
+
+	* doc/bison.texinfo: Fix a few typos.
+
+2008-02-28  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Bison Options): Document -W.
+	Based on Joel E. Denny's NEWS entry, and Automake's documentation.
+
+2008-02-28  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (short_options): Split and sort for readability.
+	-g and -x take optional arguments, just like their long options.
+	* build-aux/cross-options.pl: Use /x to make the regexp easier to
+	understand.
+	Fix the handling of $opt which resulted in all the argument to be
+	considered as optional.
+
+2008-02-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS (2.3a+): Don't say %language is experimental.  Mention Java and
+	say its interface is experimental.
+	* doc/bison.texinfo (Decl Summary): In the %language entry, mention
+	Java.
+	(Bison Options): In the -L and --language entry, mention Java.
+	(Java Bison Interface): Say the interface is experimental.
+	* src/getargs.c (usage): Mention -L and --language.
+
+	* NEWS (2.3a+): Say the push parsing interface is experimental.
+	* doc/bison.texinfo (Push Decl): Likewise.
+	(Decl Summary): Likewise in the "%define api.push_pull" entry.
+	(Push Parser Function): Likewise.
+	(Pull Parser Function): Likewise.
+	(Parser Create Function): Likewise.
+	(Parser Delete Function): Likewise.
+	(Table of Symbols): Likewise in the yypstate_delete, yypstate_new,
+	yypull_parse, and yypush_parse entries.
+
+	* NEWS (2.3a+): Mention XML support, and say the schema is
+	experimental.
+	* doc/bison.texinfo (Bison Options): Mention -x and --xml.
+	* src/getargs.c (usage): Say the XML schema is experimental.
+
+	* NEWS (2.3a+): Say option instead of flag.
+
+2008-02-21  Wojciech Polak  <polak@gnu.org>
+
+	* data/xslt/xml2xhtml.xsl (xsl:template match="/"): Change footer
+	text.
+
+2008-02-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix impure push parser compile error reported by Bob Rossi at
+	<http://lists.gnu.org/archive/html/help-bison/2008-02/msg00023.html>.
+	* data/yacc.c: Clean up whitespace in the output a little.
+	(yypstate_allocated): Define for impure push parsers regardless of
+	whether the pull interface is also requested.
+	* tests/push.at (Push Parsing: Multiple impure instances): Extend to
+	check impure push parsers without the pull interface.
+
+	* data/yacc.c (yypstate_new): Don't try to invoke yyerror since
+	yyerror takes arguments specified by %parse-param while yypstate_new
+	does not.
+	* doc/bison.texinfo (Parser Create Function): Document that
+	yypstate_new returns 0 for multiple impure parser instances.
+	* tests/push.at (Push Parsing: Multiple impure instances): Update
+	expected stderr output.
+
+2008-02-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* runtime-po/POTFILES.in (push.c): Remove.
+
+2008-02-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/Makefile.am (dist_pkgdata_DATA): Remove push.c.
+	* data/push.c: Rename to...
+	* data/yacc.c: ... this, overwriting it.
+	* etc/bench.pl.in (bench_grammar): `%pure-parser'-> `%define api.pure'.
+	`%push-pull-parser' -> `%define api.push_pull "both"'.
+	Remove old yacc.c tests, and update push.c tests to yacc.c.
+
+2008-02-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/bison.m4 (b4_percent_code_get): Output %code block comments like
+	`"%code top" blocks' instead of `%code "top" blocks'.
+	* data/push.c: Import yacc.c changes from 2008-01-09 and 2007-08-03.
+	Clean up whitespace in the output a little.
+
+2008-02-16  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix documentation problems reported by Tim Josling at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-01/msg00013.html>.
+	* NEWS (2.3a+): Mention removal of --no-parser, -n, and %no-parser.
+	* doc/bison.texinfo (Token Decl): Token numbers are *nonnegative*
+	integers.  Explain the effect of literal string aliases on error
+	messages.  Copy token 0 documentation from the C++ skeleton
+	documentation.
+
+2008-02-16  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Accept a token number in a %left, %right, or %nonassoc for POSIX
+	conformance.  Reported by Tim Josling at
+	<http://lists.gnu.org/archive/html/bug-bison/2008-01/msg00010.html>.
+	* NEWS (2.3a+): Mention.
+	* doc/bison.texinfo (Precedence Decl): Describe how literal strings
+	and code numbers are treated by precedence declarations.
+	* src/parse-gram.y (precedence_declaration): Use symbols.prec instead
+	of symbols.1.
+	(symbols.prec): New, just like symbols.1 but uses symbol.prec instead
+	of symbol.
+	(symbol.prec): New, just like symbol but allows INT.
+	* src/symtab.c (symbol_user_token_number_set): Remove an aver that no
+	longer holds.
+	* tests/regression.at (Token number in precedence declaration): New
+	test case.
+
+2008-02-06  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	DJGPP specific issues.
+	* djgpp/config.bat: Add filenames that are not 8.3 clean and that must
+	be changed.  Copyright timestamp adjusted.
+	* djgpp/config.sed: Add filenames that are not 8.3 clean and that must
+	be changed.  Copyright timestamp adjusted.
+	* djgpp/config.site: Copyright timestamp adjusted.
+	* djgpp/config_h.sed: Copyright timestamp adjusted.
+	* djgpp/djunpack.bat: Copyright timestamp adjusted.
+	* djgpp/fnchnage.lst: Add filenames that are not 8.3 clean to the
+	filename translation list.
+	* djgpp/subpipe.c (init_subpipe): Check the environment variables
+	TMPDIR, TMP and TEMP, in that order, to determinate where the temp
+	files shall be created.  Before trying to use the temp dir where the
+	environment variable points to check that the dir really exists. If
+	not default to the cwd as temp dir.  Copyright timestamp adjusted.
+	* djgpp/subpipe.h: Copyright timestamp adjusted.
+	* djgpp/testsuite.sed: Copyright timestamp adjusted.
+
+2008-01-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo: Update Back-Cover text to reflect new GNU wording.
+
+2008-01-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (yyparse): Correct the comment when locations aren't used.
+	Problem reported by Claudio Saavedra in
+	<http://lists.gnu.org/archive/html/bug-bison/2008-01/msg00003.html>.
+
+2008-01-05  Wojciech Polak  <polak@gnu.org>
+
+	* data/xslt/xml2xhtml.xsl (xsl:template match="/"): Precede an XHTML
+	document's title with the input grammar file name.
+
+2007-12-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Automate regression testing of the XML/XSLT implementation.  Discussed
+	starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-11/msg00021.html>.
+	* configure.ac (XSLTPROC): New substitution.
+	* Makefile.am (maintainer-xml-check): New phony target invoking...
+	* tests/Makefile.am (maintainer-xml-check): ... this new phony target
+	invoking make maintainer-check with BISON_TEST_XML=1.
+	* tests/atlocal.in (XSLTPROC): New.
+	* tests/local.at (AT_BISON_CHECK): New macro to (1) instruct Valgrind
+	not to report reachable memory when Bison is expected to have a
+	non-zero exit status and (2) to compare XML/XSLT output with --graph
+	and --report=all output for every working grammar when
+	BISON_TEST_XML=1.
+	(AT_BISON_CHECK_NO_XML): Likewise, but skip XML checks.
+	(AT_BISON_CHECK_XML): New.
+	(AT_QUELL_VALGRIND): New.
+	* tests/testsuite.at (ORIGINAL_AT_CHECK): Remove this and...
+	(AT_CHECK): ... don't redefine this since this was the old way to
+	quell Valgrind.
+	* tests/actions.at: Rewrite all AT_CHECK invocations for bison as
+	AT_BISON_CHECK invocations.
+	* tests/c++.at: Likewise.
+	* tests/calc.at: Likewise.
+	* tests/conflicts.at: Likewise.
+	* tests/cxx-type.at: Likewise.
+	* tests/existing.at: Likewise.
+	* tests/glr-regression.at: Likewise.
+	* tests/headers.at: Likewise.
+	* tests/input.at: Likewise.
+	* tests/java.at: Likewise.
+	* tests/output.at: Likewise.
+	* tests/push.at: Likewise.
+	* tests/reduce.at: Likewise.
+	* tests/regression.at: Likewise.
+	* tests/sets.at: Likewise.
+	* tests/skeletons.at: Likewise.
+	* tests/synclines.at: Likewise.
+	* tests/torture.at: Likewise.
+	(Big triangle): Use AT_BISON_CHECK_NO_XML instead since this grammar
+	tends to hang xsltproc.
+	(Big horizontal): Likewise.
+
+2007-12-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	In XML output, remove redundant class attribute on symbol element.
+	* data/xslt/bison.xsl (xsl:key name="bison:symbolByName"): New.
+	* data/xslt/xml2xhtml.xsl (xsl:template match="symbol"): Use it to
+	look up a symbol to determine whether it's a nonterminal or terminal.
+	* src/gram.c (rule_rhs_print_xml): Remove class attribute.
+	* src/state.c (state_rule_lookahead_tokens_print_xml): Likewise.
+
+	Add prec/assoc information to XML output.
+	* src/gram.c (grammar_rules_print_xml): For each rule that has a
+	%prec, add a percent_prec attribute.
+	* src/print-xml.c (print_grammar): For each terminal that has a
+	precedence or associativity, add a prec or assoc attribute.
+	(xml_indent): New.
+	(xml_puts): Use xml_indent.
+	(xml_printf): Use xml_indent.
+	* src/print-xml.h (xml_indent): Prototype.
+
+	* tests/existing.at (GNU pic Grammar): Fix a rule miscopied from
+	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00026.html>.
+
+2007-12-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/xslt/bison.xsl (bison:ruleNumber): Rename to...
+	(bison:ruleByNumber): ... this for clarity.
+	* data/xslt/xml2dot.xsl (xsl:template match="item"): Update.
+	* data/xslt/xml2text.xsl (xsl:template match="item"): Update.
+	(xsl:template match="reduction"): Update.
+	(xsl:template match="item"): Update.
+	(xsl:template match="reduction"): Update.
+
+	In the XML output, don't print the list of rules where symbols appear.
+	Compute it in XSLT instead.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00024.html>.
+	* data/xslt/bison.xsl (bison:ruleByLhs): New.
+	(bison:ruleByRhs): New.
+	* data/xslt/xml2text.xsl (xsl:template match="terminal"): Use
+	bison:ruleByRhs.
+	(xsl:template match="terminal/rule"): Remove.
+	(xsl:template match="nonterminal"): Use bison:ruleByLhs and
+	bison:ruleByRhs.
+	(xsl:template match="nonterminal/left/rule|nonterminal/right/rule"):
+	Remove.
+	* data/xslt/xml2xhtml.xsl (xsl:template match="terminal"): Use
+	bison:ruleByRhs and mode="number-link" for rule template.
+	(xsl:template match="terminal/rule"): Remove.
+	(xsl:template match="nonterminal"): Use bison:ruleByLhs and
+	bison:ruleByRhs and mode="number-link" for rule template.
+	(xsl:template match="nonterminal/left/rule|nonterminal/right/rule"):
+	Rewrite as...
+	(xsl:template match="rule" mode="number-link"): ... this.
+	* src/print-xml.c (print_grammar): Don't print the list of rules.
+
+2007-12-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't let --report affect XML output; always print all information.
+	Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00020.html>.
+	* src/conflicts.c (log_resolution): Implement.
+	* src/print-xml.c (print_core): Implement.
+	(print_state): Implement.
+	(print_xml): Implement.
+
+	* NEWS (2.3a+): Fix quotes.
+	* src/parse-gram.y (prologue_declaration): For consistency with -v,
+	don't let %verbose clear the list specified by --report.
+
+2007-11-26  Akim Demaille  <akim@epita.fr>
+
+	* data/Makefile.am (dist_pkgdata_DATA): Ship and install bison.xsl.
+
+2007-11-24  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	In the XML output, list useless and unused symbols and rules with the
+	useful ones and add a "usefulness" attribute.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00017.html>.
+	* src/gram.c (grammar_rules_partial_print_xml): Remove.
+	(grammar_rules_print_xml): Print all rules instead of just those
+	useful in the grammar, and add a "usefulness" attribute.
+	* src/gram.h (grammar_rules_partial_print_xml): Remove prototype.
+	* src/print-xml.c (print_rules_useless_in_parser): Remove.
+	(print_grammar): Print all nonterminals instead of just useful ones,
+	and add a "usefulness" attribute to nonterminals and terminals.
+	(print_xml): Don't print a separate "reductions" or
+	"rules-useless-in-parser" element.
+	* src/reduce.c (reduce_output): Use reduce_token_unused_in_grammar.
+	(reduce_xml): Remove.
+	(reduce_token_unused_in_grammar): New.
+	(reduce_nonterminal_useless_in_grammar): New.
+	* src/reduce.h (reduce_xml): Remove prototype.
+	(reduce_token_unused_in_grammar): Add prototype.
+	(reduce_nonterminal_useless_in_grammar): Add prototype.
+	* data/xslt/xml2text.xsl: Update for XML changes.
+	* data/xslt/xml2xhtml.xsl: Update for XML changes.
+	* tests/reduce.at (Useless Terminals): Update output.
+	(Useless Rules): Update output.
+	(Reduced Automaton): Update output.
+
+	Say "Terminals unused in grammar" instead of "Unused terminals".
+	* NEWS (2.3a+): Update.
+	* doc/bison.texinfo (Understanding): Update example output.
+	* src/reduce.c (reduce_output): Implement.
+	* data/xslt/xml2text.xsl: Implement.
+	* data/xslt/xml2xhtml.xsl: Implement.
+
+2007-11-18  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Accept --report-file=FILE to override the default `.output' filename.
+	* NEWS (2.3a+): Mention.
+	* doc/bison.texinfo (Bison Options): Add an entry.
+	* src/files.c (compute_output_file_names): Don't override
+	spec_verbose_file if already set.
+	* src/getargs.c (usage): Document --report-file.
+	(REPORT_FILE_OPTION): New anonymous enum member.
+	(long_options): Add entry for it.
+	(getargs): Add case for it setting spec_verbose_file.
+
+	* build-aux/cross-options.pl: Don't record a short option just because
+	there's an arg.
+	* doc/.cvsignore: Add yacc.1.
+
+2007-11-14  Akim Demaille  <akim@epita.fr>
+
+	* doc/yacc.1.in: New.
+	* configure.ac, doc/Makefile.am: Adjust.
+	* configure.ac (PACKAGE_COPYRIGHT_YEAR): New substitution, and new
+	config.h symbol.
+	Use AC_SUBST for assignments too.
+	* src/getargs.c (version): Use PACKAGE_COPYRIGHT_YEAR.
+
+2007-11-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/gram.c: Remove comments that duplicate comments in gram.h.
+
+	When reporting useless rules and nonterminals, say "useless in grammar"
+	instead of "useless", and say "useless in parser" instead of "never
+	reduced".  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-10/msg00033.html>.
+	* NEWS (2.3a+): Mention this change.
+	* data/xslt/xml2text.xsl: Update output text and expected input XML
+	element names to match changes below.
+	* data/xslt/xml2xhtml.xsl: Likewise.
+	(xsl:template match="bison-xml-report"): Add missing entry in Table of
+	Contents: "Rules useless in parser due to conflicts".
+	* doc/bison.texinfo (Decl Summary): Reword a little.
+	(Understanding): Update example output for changes below.
+	* src/gram.c: (rule_useful_p): Rename to...
+	(rule_useful_in_grammar_p): ... this.
+	(rule_useless_p): Rename to...
+	(rule_useless_in_grammar_p): ... this.
+	(rule_never_reduced_p): Rename to...
+	(rule_useless_in_parser_p): ... this.
+	(grammar_rules_print): Update for renames.
+	(grammar_rules_print_xml): Update for renames.
+	(grammar_rules_never_reduced_report): Rename to...
+	(grammar_rules_useless_report): ... this since it is used for either
+	kind of useless rule.
+	* src/gram.h: Reword comments and update function names in prototypes.
+	* src/main.c (main): Say "rule useless in parser due to conflicts".
+	* src/print-xml.c (print_rules_never_reduced): Rename to...
+	(print_rules_useless_in_parser): ... this, and rename output XML
+	element "rules-never-reduced" to "rules-useless-in-parser".
+	(print_xml): Update for rename.
+	* src/print.c (print_results): Say "Rules useless in parser due to
+	conflicts".
+	* src/reduce.c (reduce_grammar_tables): Say "rule useless in grammar".
+	(nonterminals_reduce): Say "nonterminal useless in grammar".
+	(reduce_output): Say "Nonterminals useless in grammar".
+	Say "Rules useless in grammar".
+	(reduce_xml): Rename output XML element "useless" to
+	"useless-in-grammar".
+	(reduce_print): Don't report the count of grammatically useless rules
+	as "rules never reduced" just because %yacc is specified.
+	In the correct report of this count, say nonterminal(s) and rule(s)
+	"useless in grammar".
+	* tests/conflicts.at (S/R in initial): Update expected output.
+	(Defaulted Conflicted Reduction): Likewise.
+	(Unreachable States After Conflict Resolution): Likewise.
+	* tests/existing.at (GNU pic Grammar): Likewise.
+	* tests/reduce.at (Useless Nonterminals): Likewise.
+	(Useless Rules): Likewise.
+	(Reduced Automaton): Likewise.
+	(Underivable Rules): Likewise.
+	(Empty Language): Likewise.
+
+2007-11-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/bison.m4 (b4_cat): Put a newline after the end delimiter of the
+	here document and before the EOF so that BSD's implementation of Bourne
+	shell doesn't parse the delimiter as part of the here document.
+	* doc/.cvsignore: Add cross-options.texi.
+	* src/getargs.c (usage): Add a blank line after the warning categories.
+
+2007-11-08  Paolo Bonzini  <bonzini@gnu.org>
+
+	* data/lalr1.java (Lexer): Remove usage of b4_pure_if.
+
+2007-11-05  Akim Demaille  <akim@epita.fr>
+
+	Remove Id: from bison.1.
+	* doc/Makefile.am (remove_time_stamp): Include the sed invocation.
+	(perl -0777 -pi -e 's/\.PP\nId): New.
+	(.x.1): Use it to ignore the version control revision.
+
+2007-11-05  Akim Demaille  <demaille@gostai.com>
+
+	* build-aux/Makefile.am: Ship cross-options.pl.
+	* doc/Makefile.am: Always refer to cross-options.texi with
+	$(srcdir).
+	(MAINTAINERCLEANFILES): Add it.
+
+2007-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Generate the long/short option cross-table.
+	* build-aux/cross-options.pl: New.
+	* doc/Makefile.am (cross-options.texi): New.
+	* doc/bison.texinfo: Use it.
+
+2007-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Generate bison.1 using help2man.
+	* doc/common.x, doc/bison.x: New.
+	* doc/Makefile.am (bison.1, .x.1): New.
+	The code is taken from autoconf-2.61/man/Makefile.am.
+	* configure.ac: Look for help2man.
+
+2007-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Complete --help.
+	* src/getargs.c (usage): Document -W, make it clear that -d,
+	-g and -x have optional arguments.
+
+2007-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Find sha1sum when named gsha1sum.
+	* bootstrap (find_tool): New.
+	($SHA1SUM): New.
+
+2007-10-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Deprecate %pure-parser and add `%define api.pure'.  Discussed starting
+	at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00006.html>.
+	* NEWS (2.3a+): Mention.
+	* data/bison.m4 (b4_pure_if): Don't define it here.
+	* data/c.m4 (b4_identification): Depend on individual skeletons to
+	define b4_pure_flag, b4_push_flag, or b4_pull_flag if they use the
+	values of the %define variables api.pure or api.push_pull.  Define
+	YYPURE, YYPUSH, and YYPULL accordingly.
+	* data/glr.c: Define b4_pure_if based on `%define api.pure' unless
+	glr.cc has already defined b4_pure_flag.
+	* data/push.c: Define b4_pure_if based on `%define api.pure'.
+	Remove YYPUSH and YYPULL since they're back in b4_identification again.
+	* data/yacc.c: Define b4_pure_if based on `%define api.pure'.
+	* doc/bison.texinfo (Pure Decl): Update.
+	(Push Decl): Update.
+	(Decl Summary): Add api.pure to %define entry.
+	In %pure-parser entry, say it's deprecated and reference %define.
+	(Pure Calling): Update.
+	(Error Reporting): Update.
+	(C++ Scanner Interface): Update.
+	(How Can I Reset the Parser): Update.
+	(Table of Symbols): In %pure-parser entry, say it's deprecated and
+	reference %define.
+	* src/getargs.c (pure_parser): Remove global variable.
+	* src/getargs.h (pure_parser): Remove extern.
+	* src/output.c (prepare): Don't define pure_flag muscle.
+	* src/parse-gram.y (prologue_declaration): Implement %pure-parser as a
+	wrapper around `%define api.pure'.
+	* tests/calc.at (Simple LALR Calculator): Update.
+	(Simple GLR Calculator): Update.
+	* tests/cxx-type.at (GLR: Resolve ambiguity, pure, no locations):
+	Update.
+	(GLR: Resolve ambiguity, pure, locations): Update.
+	(GLR: Merge conflicting parses, pure, no locations): Update.
+	(GLR: Merge conflicting parses, pure, locations): Update.
+	* tests/glr-regression.at (Uninitialized location when reporting
+	ambiguity): Update
+	* tests/input.at (Unused %define api.pure): New test case.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Update definition for
+	AT_PURE_IF and AT_PURE_AND_LOC_IF.
+	* tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update.
+
+2007-10-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	%define push_pull -> %define api.push_pull.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-09/msg00005.html>.
+	* data/push.c: Expect the new name.
+	* data/yacc.c: Likewise.
+	* doc/bison.texinfo (Push Decl): Update.
+	(Decl Summary): Update %define entry.
+	(Push Parser Function): Update.
+	(Pull Parser Function): Update.
+	(Parser Create Function): Update.
+	(Parser Delete Function): Update.
+	* tests/calc.at (Simple LALR Calculator): Update.
+	* tests/input.at (%define enum variables): Update.
+	* tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update.
+	(Push Parsing: Multiple impure instances): Update.
+	(Push Parsing: Unsupported Skeletons): Update.
+	* tests/torture.at (Exploding the Stack Size with Alloca): Update.
+	(Exploding the Stack Size with Malloc): Update.
+
+	* NEWS (2.3a+): Add an entry for the push parser, and clean up the
+	other entries some.
+
+2007-10-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	For the XML output's terminal element, rename @number to @token-number,
+	and add @symbol-number.  In the nonterminal element, rename @number to
+	@symbol-number.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-10/msg00040.html>.
+	* data/xslt/xml2text.xsl (xsl:template match="terminal"): Update for
+	renames.
+	(xsl:template match="nonterminal"): Likewise.
+	* data/xslt/xml2xhtml.xsl (xsl:template match="terminal"): Likewise.
+	(xsl:template match="nonterminal"): Likewise.
+	* src/print-xml.c (print_grammar): Implement.
+
+2007-10-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/xslt/xml2dot.xsl (xsl:template match="automaton/state"): After
+	2007-10-11 change, the child elements here are items not rules.
+	(xsl:template match="item"): New.
+	(xsl:template match="rule"): Update for new reduced itemset.
+	(xsl:template match="point"): Remove.
+	(xsl:template match="empty"): For consistency with --graph, don't
+	output "/* empty */".
+	* data/xslt/xml2text.xsl (xsl:template match="terminal"): When invoking
+	line-wrap, don't pass a negative value as first-line-length since this
+	won't work with the following changes.
+	(xsl:template name="line-wrap"): Simplify slightly.
+	(xsl:template name="ws-search"): Eliminate recursion.
+	* src/print_graph.c (print_core): Don't print a reduction's lookahead
+	set next to an item whose dot is not at the end of the RHS even if it
+	happens to be associated with the same rule.
+
+2007-10-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Add %define lr.keep_unreachable_states.
+	* NEWS (2.3a+): Mention it in the entry for unreachable state removal.
+	* doc/bison.texinfo (Decl Summary): Mention it in the %define entry.
+	* src/main.c (main): Implement it.
+	* tests/conflicts.at (Unreachable States After Conflict Resolution):
+	Extend to test it, and fix a typo.
+
+2007-10-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS (2.3a+): Add entry for recent .output file lookahead set fix.
+	* doc/bison.texinfo (Understanding): Remove a bogus lookahead set in
+	the example .output text.
+	* tests/regression.at (Extra lookahead sets in report): Improve wording
+	of comments.
+
+2007-10-17  Wojciech Polak  <polak@gnu.org>
+
+	* src/print-xml.c (print_grammar): Renamed
+	<terminal> and <nonterminal> attributes:
+	"type" to "number" and "symbol" to "name".
+	* data/xslt/xml2text.xsl (xsl:template match="terminal"):
+	Use new attribute names.
+	(xsl:template match="nonterminal"): Likewise.
+	* data/xslt/xml2xhtml.xsl: Likewise.
+
+2007-10-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* doc/bison.texinfo (Bison Options): Add entry for --print-datadir.
+	(Option Cross Key): Likewise.
+
+	* src/print-xml.c (print_core): Don't print a reduction's lookahead set
+	next to an item whose dot is not at the end of the RHS even if it
+	happens to be associated with the same rule.
+	* src/print.c (print_core): Likewise.
+	* tests/conflicts.at (Unresolved SR Conflicts): Update output.
+	(Resolved SR Conflicts): Update output.
+	* tests/regression.at (Extra lookahead sets in report): New test case.
+
+2007-10-11  Wojciech Polak  <polak@gnu.org>
+
+	* src/print-xml.c (print_core): Remove item set
+	redundancy.
+	* data/xslt/bison.xsl (bison:ruleNumber): New key.
+	Improve processing time. Suggested by Joel E. Denny.
+	* data/xslt/xml2dot.xsl (xsl:template name="escape"):
+	Write xsl:param "required" attribute as comment.
+	* data/xslt/xml2text.xsl (xsl:template match="item"): New.
+	(xsl:template match="rule"): Support new reduced itemset.
+	(xsl:template match="point"): Remove.
+	* data/xslt/xml2xhtml.xsl: Likewise.
+
+2007-10-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/getargs.c (version): Update copyright year.
+
+2007-10-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Make xml2dot.xsl and --graph produce the same output.
+	* data/xslt/xml2dot.xsl (xsl:template match="rule"): Use a `&#10;'
+	instead of a `\n'.  That is, don't add escapes yet or they'll be doubly
+	escaped later.
+	(xsl:template name="output-node"): Use the new escape template instead
+	of the string-replace template directly.
+	(xsl:template name="output-edge"): Likewise.
+	(xsl:template name="escape"): New, escapes backslashes and newlines in
+	addition to quotation marks.
+	* src/graphviz.c (start_graph, output_node, output_edge): Add
+	whitespace to output for legibility.
+
+	Make xml2text.xsl and --report produce the same output, and remove the
+	XML "conflicts" element since a conflict summary is easily extracted
+	from the automaton.
+	* data/xslt/bison.xsl: New.
+	(xsl:template match="state" mode="bison:count-conflicts): New.
+	* data/xslt/xml2text.xsl: Import bison.xsl.
+	(xsl:template match="bison-xml-report"): Instead of styling the
+	"conflicts" element, style the "automaton" element with mode
+	"conflicts".  Unlike the former, the latter lists S/R and R/R
+	conflicts for a state on the same line.
+	(xsl:template match="conflicts"): Remove.
+	(xsl:template match="conflict"): Remove.
+	(xsl:template match="terminal"): Line-wrap the list of rules in which
+	the terminal is used.
+	(xsl:template match="nonterminal"): Likewise for nonterminals.
+	(xsl:template match="automaton" mode="conflicts"): New.
+	(xsl:template match="state" mode="conflicts"): New.
+	(xsl:template name="line-wrap"): New.
+	(xsl:template name="ws-search"): New.
+	* data/xslt/xml2xhtml.xsl: Import bison.xsl.
+	(xsl:template match="bison-xml-report"): Instead of styling the
+	"conflicts" element, style the "automaton" element with mode
+	"conflicts."
+	(xsl:template match="conflicts"): Remove.
+	(xsl:template match="conflict"): Remove.
+	(xsl:template match="automaton" mode="conflicts"): New.
+	(xsl:template match="state" mode="conflicts): New.
+	* src/conflicts.c (conflicts_output_xml): Remove.
+	* src/conflicts.h (conflicts_output_xml): Remove prototype.
+	* src/print-xml.c (print_xml): Don't invoke conflicts_output_xml.
+	* src/print.c (print_grammar): Consistently wrap at the 66th column so
+	the corresponding XSLT is easier.  Also, never wrap between a word and
+	the comma that follows it.
+
+2007-10-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Improve C++ namespace support.  Discussed starting at
+	<http://lists.gnu.org/archive/html/help-bison/2007-09/msg00016.html>.
+	* data/c++.m4: (b4_namespace_ref, b4_namespace_open,
+	b4_namespace_close): New macros that interpret the %define variable
+	"namespace" so its value can contain "::" to indicate nested
+	namespaces.
+	* data/glr.cc (b4_namespace): Don't define, and replace all uses with
+	the above macros.
+	* data/lalr1.cc (b4_namespace): Likewise.
+	* data/location.cc (b4_namespace): Likewise.
+	* doc/bison.texinfo (Decl Summary): Move `%define push_pull' entry
+	inside a new table in the general %define entry.  Document `%define
+	namespace' there as well.  Point the %name-prefix entry to it since it
+	explains it more completely in the case of C++.
+	(C++ Bison Interface): Mention `%define namespace' instead of
+	%name-prefix.
+	(Table of Symbols): Remove the `%define push_pull' entry.  The %define
+	entry suffices.
+	* tests/c++.at (Relative namespace references): New test case.
+	(Absolute namespace references): New test case.
+	(Syntactically invalid namespace references): New test case.
+	* tests/input.at (C++ namespace reference errors): New test case.
+
+2007-10-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Add syncline support and location accessor to internal %define
+	interfaces.
+	* data/bison.m4 (b4_percent_define_get_loc): New.
+	(b4_percent_define_get_syncline): New.
+	(b4_percent_define_flag_if): Use b4_percent_define_get_loc.
+	(b4_percent_define_default): Record defining location as line 1 rather
+	than 0 for the sake of synchronizing #line's, and define
+	b4_percent_define_syncline(VARIABLE).
+	(b4_percent_define_check_values): Use b4_percent_define_get_loc.
+	* src/muscle_tab.c (muscle_syncline_grow): New.
+	(muscle_code_grow): Use muscle_syncline_grow.
+	(muscle_percent_define_insert): Use muscle_percent_define_get_loc, and
+	define b4_percent_define_syncline(VARIABLE).
+	(muscle_percent_define_get_loc): New.
+	(muscle_percent_define_get_syncline): New.
+	(muscle_percent_define_flag_if): Use muscle_percent_define_get_loc, and
+	remove some unused variables.
+	(muscle_percent_define_default): Record defining location as line 1
+	rather than 0 for the sake of synchronizing #line's, and define
+	b4_percent_define_syncline(VARIABLE).
+	(muscle_percent_define_check_values): Use
+	muscle_percent_define_get_loc.
+	* src/muscle_tab.h (muscle_percent_define_get_loc): Prototype.
+	(muscle_percent_define_get_syncline): Prototype.
+	* tests/skeletons.at (%define Boolean variables: invalid skeleton
+	defaults): Update output for location change.
+	(Complaining during macro argument expansion): Extend to test
+	b4_percent_define_get_loc and b4_percent_define_get_syncline errors.
+
+2007-10-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix some error-reporting macro bugs.
+	* data/bison.m4 (b4_cat): New.
+	(b4_error, b4_error_at): Use b4_cat to send error directives directly
+	to stdout so they don't become arguments to other macros.  Update
+	comments and add examples.
+	(b4_warn, b4_warn_at, b4_complain, b4_complain_at): Update comments and
+	add examples.
+	(b4_fatal, b4_fatal_at): Likewise, and invoke m4_exit(1) immediately
+	after printing the error directive so that M4 doesn't report subsequent
+	problems that are induced by this problem.
+	* src/scan-skel.l: Recognize @` digraph outside of directive arguments
+	instead of just in them.  Recognize @\n in both places.  Both expand to
+	the empty string.  Needed by b4_cat.
+	* tests/skeletons.at (Complaining during macro argument expansion):
+	New test case.
+	(Fatal errors make M4 exit immediately): New test case.
+
+2007-10-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Implement --print-datadir.
+	* src/getargs.c (usage): Mention.
+	(PRINT_DATADIR_OPTION): New anonymous enum member.
+	(long_options): Add entry for it.
+	(getargs): Add case for it calling compute_pkgdatadir.
+	* src/output.c (output_skeleton): Encapsulate data directory
+	computation from here...
+	(prepare): ... and from here...
+	(compute_pkgdatadir): ... into this new function.
+	* src/output.h (compute_pkgdatadir): Prototype.
+
+2007-09-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/print-xml.c (escape_bufs): New static global variable
+	replacing...
+	(xml_escape_n): ... the static local variable buf here.
+	(print_xml): Free memory for escape_bufs.
+	* src/reduce.c (reduce_xml): XML-escape terminal symbol tags.
+
+2007-09-25  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Replace `%push-parser' and `%push-pull-parser' with
+	`%define push_pull "push"' and `%define push_pull "both"'.
+	`%define push_pull "pull"' is the default.
+	* doc/bison.texinfo (Push Decl, Push Parser Function,
+	Pull Parser Function, Parser Create Function, Parser Delete Function):
+	Update declarations.
+	(Decl Summary, Table of Symbols): Replace %push-parser and
+	%push-pull-parser entries with a %define push_pull entry.
+	* data/bison.m4 (b4_percent_define_check_values): New macro.
+	(b4_pull_if, b4_push_if, b4_use_push_for_pull_if): Move these
+	definitions...
+	* data/c.m4 (b4_identification): ... and the YYPUSH and YYPULL cpp
+	definitions...
+	* data/push.c: ... to here and compute them from the value of the
+	%define variable push_pull.
+	* data/c-skel.m4: Instead of choosing the push.c skeleton for push
+	parsing requests here...
+	* data/yacc.c: ... hack this to switch to push.c any time
+	b4_use_push_pull_flag or the %define variable push_pull is set.  This
+	will go away when we mv push.c yacc.c.
+	* data/c++-skel.m4, data/glr.c, data/java-skel.m4: Don't report that
+	push parsing is not supported since unused %define variables are
+	reported anyway.
+	* src/getargs.c, src/getargs.h (pull_parser, push_parser): Remove.
+	* src/muscle_tab.h (muscle_percent_define_check_values): Update
+	comments for consistency with b4_percent_define_check_values.
+	* src/output.c (prepare): Don't insert b4_pull_flag and b4_push_flag
+	muscles.
+	* src/parse-gram.y (PERCENT_PUSH_PARSER, PERCENT_PUSH_PULL_PARSER):
+	Remove.
+	(prologue_declaration): Remove %push-parser and %push-pull-parser
+	rules.
+	* src/scan-gram.l (%push-parser, %push-pull-parser): Remove rules.
+	* tests/calc.at: Update declarations.
+	* tests/input.at (%define enum variables): New test case.
+	* tests/push.at (Push Parsing: Memory Leak for Early Deletion): Update
+	declaration.
+	(Push Parsing: Multiple impure instances): Update declaration.
+	(Push Parsing: Unsupported Skeletons): New test case.
+	* tests/torture.at (Exploding the Stack Size with Alloca): Update
+	declaration.
+	(Exploding the Stack Size with Malloc): Update declaration.
+
+2007-09-24  Wojciech Polak  <polak@gnu.org>
+
+	Add XSLT transformations.
+
+	* data/xslt/xml2dot.xsl: Transform XML into DOT.
+	* data/xslt/xml2text.xsl: Transform XML into plain text.
+	* data/xslt/xml2xhtml.xsl: Transform XML into XHTML.
+	* data/Makefile.am (xsltdir): New variable.
+	(dist_xslt_DATA): Add xslt/*.xsl files.
+
+2007-09-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/conflicts.c (log_resolution): Fix indenting bugs I introduced.
+	Problem reported by Wojciech Polak.
+	* src/print-xml.c (xml_puts): Work even if LEVEL exceeds INT_MAX/2.
+	(xml_printf): Undo change I made on 21 September; that is,
+	indent 2 spaces, not 1.
+
+2007-09-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Pacify ./configure --enable-gcc-warnings.
+	* src/print-xml.c, src/print-xml.h (xml_puts): Make third argument
+	`char const *' instead of `char *'.
+	* src/state.c (state_rule_lookahead_tokens_print_xml): Remove unused
+	local variable `sep'.
+
+2007-09-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/gram.c (rule_rhs_print_xml): Now static, since it isn't used
+	elsewhere.
+	* src/print-xml.c: Prefer "const" after types; that's more consistent.
+	(xml_printf): Indent just 1 space for level.
+	(e_char, xlate_char): Remove.
+	(xml_escape_string): Rewrite to avoid undefined behavior (used
+	storage that was freed from the stack).
+	(xml_escape_n): Don't bother checking for subscript error.
+
+2007-09-21  Wojciech Polak  <polak@gnu.org>
+
+	Add Bison XML Automaton Report.
+
+	Add support for an -x option to generate an XML report.
+	It is not documented yet.
+	* src/print-xml.c: New file.
+	* src/print-xml.h: Likewise.
+	* lib/timevar.def (TV_XML): New var.
+	* src/Makefile.am (bison_SOURCES): Add print-xml.c, print-xml.h.
+	* src/conflicts.c: Include print-xml.h.
+	(solved_conflicts_xml_obstack): New var.
+	(log_resolution, conflicts_solve, conflicts_free):
+	Add support for XML report.
+	(conflicts_output_val): New function.
+	* src/conflicts.h (conflicts_output_val): New decl.
+	* src/files.c (spec_xml_file): New var.
+	(compute_output_file_names, output_file_names_free): Add XML support.
+	* src/files.h (spec_xml_file): New decl.
+	* src/getargs.c (xml_flag): New var.
+	(usage, short_options, long_options, getargs): Add XML support.
+	* src/getargs.h (xml_flag): New decl.
+	* src/gram.c: Include print-xml.h.
+	(rule_lhs_print_xml, rule_rhs_print_xml):
+	(grammar_rules_partial_print_xml, grammar_rules_print_xml):
+	New functions.
+	* src/gram.h: Declare external ones.
+	* src/main.c: Include print-xml.h.
+	(main): Add XML support.
+	* src/reduce.c: Include print-xml.h.
+	(reduce_xml): New function.
+	* src/reduce.h: Declare it.
+	* src/state.c: Include print-xml.h.
+	(state_new): Add XML support.
+	(state_rule_lookahead_tokens_print_xml): New function.
+	* src/state.h: Declare it.
+	(struct state): New member solved_conflicts_xml.
+	* src/symtab.c (symbol_class_get_string): New function.
+	* src/symtab.h: Declare it.
+
+2007-09-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* GNUmakefile: Switch to coreutils's version.
+	* bootstrap: Likewise.
+	* Makefile.cfg: Adjust to new GNUmakefile.
+	* README-hacking: Likewise.
+
+	Import from gnulib:
+
+	2006-08-18  Paul Eggert  <eggert@cs.ucla.edu>
+		    Bruno Haible  <bruno@clisp.org>
+
+	* m4/bison-i18n.m4 (BISON_I18N): Also handle the case where yacc exists
+	and is a script that invokes bison. Tighten the code. Add comments.
+
+2007-08-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Spell "boolean" as "Boolean".  Reported by Akim Demaille.
+	* data/bison.m4 (b4_percent_define_flag_if): Fix complaint.
+	* doc/bison.texinfo (Decl Summary): Fix.
+	* src/muscle_tab.c (muscle_percent_define_flag_if): Fix complaint.
+	* tests/input.at (Boolean %define variables): Update output.
+	* tests/skeletons.at (%define boolean variables: invalid skeleton
+	defaults): Rename to...
+	(%define Boolean variables: invalid skeleton defaults): ... this and
+	update output.
+
+2007-08-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	In impure push mode, don't allow more than one yypstate to be allocated
+	since multiple impure parsers would corrupt yynerrs.
+	* data/push.c (yypstate_allocated): New static global variable
+	initialized to 0.
+	(yypull_parse): If yypstate_new returns 0, don't report it as memory
+	exhaustion if yypstate_allocated is 1, but still return 2.
+	(yypstate_new): Invoke yyerror and return 0 if yypstate_allocated is
+	already 1.  Otherwise, set it to 1.
+	(yypstate_delete): Set it to 0.
+	* tests/push.at (Push Parsing: Multiple impure instances): New test
+	case.
+
+2007-08-17  Bob Rossi  <bob@brasko.net>
+
+	* doc/bison.texinfo (Push Decl): Document the push parser.
+	(Table of Symbols): Ditto.
+	(Pure Decl): Ditto.
+	(Decl Summary): Ditto.
+	(Multiple Parsers, Push Parser Function, Pull Parser Function,
+	Parser Create Function, Parser Delete Function):
+	Add new push parser symbols.
+	(Table of Symbols): Document push-parser, push-pull-parser,
+	yypush_parse, yypull_parse, yypstate_new and yypstate_delete.
+
+2007-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Update to GPLv3.
+	* doc/gpl-3.0.texi: New file.
+	* doc/gpl.texi: Remove.
+	* COPYING, GNUmakefile, HACKING, Makefile.am, Makefile.cfg:
+	* Makefile.maint, NEWS, PACKAGING, README, README-alpha:
+	* README-hacking, TODO, bootstrap, bootstrap.conf:
+	* configure.ac, data/Makefile.am, data/README, data/bison.m4:
+	* data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4:
+	* data/glr.c, data/glr.cc, data/java-skel.m4, data/java.m4:
+	* data/lalr1.cc, data/lalr1.java, data/location.cc:
+	* data/push.c, data/yacc.c, data/m4sugar/m4sugar.m4:
+	* djgpp/Makefile.maint, djgpp/README.in, djgpp/config.bat:
+	* djgpp/config.sed, djgpp/config.site, djgpp/config_h.sed:
+	* djgpp/djunpack.bat, djgpp/subpipe.c, djgpp/subpipe.h:
+	* djgpp/testsuite.sed, doc/Makefile.am, doc/bison.texinfo:
+	* doc/fdl.texi, doc/refcard.tex, etc/Makefile.am, etc/README:
+	* etc/bench.pl.in, examples/Makefile.am, examples/extexi:
+	* examples/calc++/Makefile.am, lib/Makefile.am, lib/abitset.c:
+	* lib/abitset.h, lib/bbitset.h, lib/bitset.c, lib/bitset.h:
+	* lib/bitset_stats.c, lib/bitset_stats.h, lib/bitsetv-print.c:
+	* lib/bitsetv-print.h, lib/bitsetv.c, lib/bitsetv.h:
+	* lib/ebitset.c, lib/ebitset.h, lib/get-errno.c:
+	* lib/get-errno.h, lib/lbitset.c, lib/lbitset.h:
+	* lib/libiberty.h, lib/main.c, lib/subpipe.c, lib/subpipe.h:
+	* lib/timevar.c, lib/timevar.def, lib/timevar.h:
+	* lib/vbitset.c, lib/vbitset.h, lib/yyerror.c:
+	* m4/c-working.m4, m4/cxx.m4, m4/m4.m4, m4/subpipe.m4:
+	* m4/timevar.m4, src/LR0.c, src/LR0.h, src/Makefile.am:
+	* src/assoc.c, src/assoc.h, src/closure.c, src/closure.h:
+	* src/complain.c, src/complain.h, src/conflicts.c:
+	* src/conflicts.h, src/derives.c, src/derives.h, src/files.c:
+	* src/files.h, src/flex-scanner.h, src/getargs.c:
+	* src/getargs.h, src/gram.c, src/gram.h, src/graphviz.c:
+	* src/lalr.c, src/lalr.h, src/location.c, src/location.h:
+	* src/main.c, src/muscle_tab.c, src/muscle_tab.h:
+	* src/nullable.c, src/nullable.h, src/output.c, src/output.h:
+	* src/parse-gram.c, src/parse-gram.h, src/parse-gram.y:
+	* src/print.c, src/print.h, src/print_graph.c:
+	* src/print_graph.h, src/reader.c, src/reader.h, src/reduce.c:
+	* src/reduce.h, src/relation.c, src/relation.h:
+	* src/revision.h, src/scan-code.h, src/scan-code.l:
+	* src/scan-gram.h, src/scan-gram.l, src/scan-skel.h:
+	* src/scan-skel.l, src/state.c, src/state.h, src/symlist.c:
+	* src/symlist.h, src/symtab.c, src/symtab.h, src/system.h:
+	* src/tables.c, src/tables.h, src/uniqstr.c, src/uniqstr.h:
+	* tests/Makefile.am, tests/actions.at, tests/c++.at:
+	* tests/calc.at, tests/conflicts.at, tests/cxx-type.at:
+	* tests/existing.at, tests/glr-regression.at:
+	* tests/headers.at, tests/input.at, tests/java.at:
+	* tests/local.at, tests/output.at, tests/push.at:
+	* tests/reduce.at, tests/regression.at, tests/sets.at:
+	* tests/skeletons.at, tests/synclines.at, tests/testsuite.at:
+	* tests/torture.at:
+	Update to GPLv3.
+
+2007-08-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Get rid of broken %no-parser, -n, and --no-parser implementation and
+	documentation.
+	* TODO: Don't mention them.
+	* doc/bison.1: Likewise.
+	* doc/bison.texinfo (Decl Summary): Likewise.
+	(Bison Options): Likewise.
+	(Option Cross Key): Likewise.
+	* src/getargs.c (no_parser_flag): Remove global variable.
+	(usage): Don't print description of -n and --no-parser.
+	(long_options): Remove --no-parser entry here.
+	(getargs): Remove -n case in the switch here.
+	* src/getargs.h (no_parser_flag): Remove extern.
+	* tests/regression.at (Web2c Actions): Remove comment that mentions
+	--no-parser.
+
+2007-08-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/push.at (Push Parsing: Memory Leak for Early Deletion): Do not
+	name user variables starting with `yy'.  Just pass NULL instead of a
+	dummy local &yylval to yypush_parse.
+	* tests/torture.at (AT_DATA_STACK_TORTURE): Do not name user variables
+	starting with `yy'.
+
+2007-08-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/yacc.c (yyexhaustedlab): Define it when YYERROR_VERBOSE is
+	true since it's then always used regardless of whether yyoverflow is
+	defined.  Reported by Christian Burger at
+	<http://lists.gnu.org/archive/html/bug-bison/2007-07/msg00031.html>.
+	* THANKS: Add Christian Burger.
+
+	* ChangeLog: For changes in doc/bison.texinfo, consistently reference
+	node names: say "Decl Summary" not "Bison Declaration Summary".
+
+2007-07-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/muscle_tab.c (muscle_percent_define_flag_if): In order to
+	determine whether this function has already complained about an invalid
+	value for a %define boolean variable, don't check whether Bison has
+	ever examined the value.  As written, the check was a tautology.
+	Instead, record and check for this complaint using a separate muscle.
+
+2007-07-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix push parsing memory leak reported by Brandon Lucia at
+	<http://lists.gnu.org/archive/html/bug-bison/2007-07/msg00032.html>.
+	* THANKS: Add Brandon Lucia.
+	* data/push.c (yypstate_delete): Free the stack if it was reallocated
+	but the parse never completed and thus freed it.
+	* tests/Makefile.am (TESTSUITE_AT): Add push.at.
+	* tests/testsuite.at: Include push.at.
+	* test/push.at: New.
+	(Push Parsing: Memory Leak for Early Deletion): New test case.
+
+2007-07-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Improve handling of multiple S/R conflicts in the same state and of S/R
+	conflicts involving multiple reductions.
+	* src/conflicts.c (resolve_sr_conflict): Don't assign the error action
+	set for a state here or Bison will abort if it is reassigned on a
+	later conflicted reduction in the same state.
+	Similarly, don't finalize and assign the solved conflicts report here
+	or it will be lost if it is reassigned on a later conflicted reduction
+	in the same state.
+	(set_conflicts): Instead, assign them both here after all S/R conflicts
+	in the state have been fully examined.
+	* src/print.c (shift_set): Rename to...
+	(no_reduce_set): ... this.
+	(print_reductions): Update for rename, and add %nonassoc error action
+	tokens to no_reduce_set so that, when printing the first remaining
+	reduction on an error action token, the reduction is enclosed in
+	brackets.
+	(print_results): Update for rename.
+	* tests/conflicts.at (Solved conflicts report for multiple reductions
+	in a state): New test case.
+	(%nonassoc error actions for multiple reductions in a state): New test
+	case.
+
+	* src/main.c (main): Don't depend on C99 features.
+
+2007-07-16  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* build-aux/.cvsignore: Add compile.
+	* lib/.cvsignore: Add charset.alias, ref-add.sed, ref-del.sed, and
+	uniwidth.
+
+2007-07-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* bootstrap (slurp): Create target directories that don't exist.
+	Specifically, we need lib/uniwidth/ because of recent Gnulib changes.
+
+2007-07-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* LR0.c (new_itemsets): Fix wording in comments: say item index rather
+	than item number.
+	* closure.c (closure): Likewise.
+	* state.h (reductions): Comment sorting of rules.
+	(state): Comment sorting of items.
+
+2007-07-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix C++ test cases after recent Gnulib changes.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bug-bison/2007-07/msg00000.html>.
+	* examples/calc++/Makefile.am (DEFAULT_INCLUDES): Override Automake's
+	definition in order to avoid Gnulib headers since we don't use config.h
+	here.
+	* tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): Use AT_DATA_GRAMMAR
+	rather than AT_DATA so that config.h is included.
+
+2007-07-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/glr.c (yy_yypstack, yypstates, yypdumpstack): Use YYFPRINTF
+	instead of fprintf.  Guard these functions with #if YYDEBUG instead of
+	#ifdef YYDEBUG for consistency with all other uses of YYDEBUG in Bison
+	and so that YYFPRINTF is guaranteed to be defined here.
+
+2007-05-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/muscle_tab.c (muscle_percent_define_invalid_value): Replace
+	with...
+	(muscle_percent_define_check_values): ... this more helpful function.
+	Again, it's not used yet, but it will be.
+	* src/muscle_tab.h: Likewise.
+
+	Improve some comments in parser table construction.
+	* src/LR0.c (new_itemsets): Explain sorting of itemset and kernel_base.
+	(generate_states): Don't mention ruleset, which is internal to closure.
+	* src/closure.c (closure): Explain sorting of core and itemset, which
+	is required for this function to behave correctly.
+	* src/closure.h (closure): Mention sorting.
+
+2007-05-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/lalr.c (state_lookahead_tokens_count): For code readability,
+	move the check for disabled transitions to an aver since conflict
+	resolution hasn't happened yet.
+
+	* src/lalr.c (state_lookahead_tokens_count): Remove the check that
+	labels a state as inconsistent just because it has error transitions.
+	The original form of this check appeared in revision 1.1 of lalr.c,
+	which was committed on 1991-12-21.  Now (at least), changing the
+	consistency label on such a state appears to have no useful effect in
+	any of the places it is examined, which I enumerate below.  The key
+	point to understanding each item in this enumeration is that a state
+	with an error transition is labelled consistent in the first place only
+	if it has no rules, so the check cannot matter for states that have
+	rules.  (1) Labelling a state as inconsistent will cause set_conflicts
+	to try to identify its conflicts, and a state must have *rules* to have
+	conflicts.  (2) Labelling a state as inconsistent will affect how
+	action_row sets the default *rule* for the state.  (3) Labelling a
+	state as inconsistent will cause build_relations to add lookback edges
+	to *rules* in that state.
+	* src/state.h (struct state): Word the comment for member consistent
+	more carefully.
+
+2007-05-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't depend on C99 features.
+	* src/conflicts.c (conflicts_update_state_numbers): Fix for-loop.
+	* src/lalr.c (lalr_update_state_numbers): Fix for-loop.
+	* src/reader.c (check_and_convert_grammar): Fix for-loop.
+	* src/state.c (state_mark_reachable_states): Fix for-loop.
+	(state_remove_unreachable_states): Fix for-loop.
+
+	Don't widen struct state with member reachable just to temporarily
+	record reachability.  Instead, use a local bitset.
+	* src/state.h (struct state): Remove member.
+	* src/state.c (state_new): Don't initialize it.
+	(state_mark_reachable_states): Rename to...
+	(state_record_reachable_states): ... this, and use bitset.
+	(state_remove_unreachable_states): Use bitset.
+
+2007-05-26  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/Makefile.am (yacc): Quote target action commands properly so
+	that the yacc script isn't corrupt.  Reported by Hans Aberg at
+	<http://lists.gnu.org/archive/html/bug-bison/2007-05/msg00003.html>.
+
+	* data/glr.c (yylval): As in yacc.c, don't extern in the header for
+	the case of pure parsers.  Reported by Frans Englich at
+	<http://lists.gnu.org/archive/html/help-bison/2007-05/msg00018.html>.
+	* THANKS: Add Frans Englich.
+
+	* NEWS (2.3a+): In the %code entry, reference section `Bison
+	Declaration Summary' from the manual now since the %code summary has
+	moved there.
+	* doc/bison.texinfo (Prologue Alternatives): Mention that directives
+	in the rules section must be terminated by semicolons.
+
+2007-05-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Extend the front-end API for %define variables to more completely
+	mirror the back-end.  This will be useful in the future.
+	* data/bison.m4 (b4_percent_define_get, b4_percent_define_ifdef):
+	Update comments to mention the new front-end counterparts of these
+	macros.
+	* src/muscle_tab.c (MUSCLE_COMMON_DECODE): New macro with common code
+	for muscle_string_decode and muscle_location_decode.
+	(muscle_string_decode): New static function.
+	(muscle_location_decode): Use MUSCLE_COMMON_DECODE.
+	(muscle_percent_define_get, muscle_percent_define_ifdef): New
+	functions.
+	(muscle_percent_define_flag_if): Use muscle_percent_define_ifdef and
+	muscle_percent_define_get to mimic the b4_percent_define_flag_if
+	implementation more closely.
+	(muscle_percent_define_invalid_value): New function.
+	* src/muscle_tab.h (muscle_percent_define_get,
+	muscle_percent_define_ifdef, muscle_percent_define_invalid_value):
+	Prototype.
+
+2007-05-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS (2.3a+): Mention yesterday's state-removal change.
+	(2.3a): Remove the %language entry, which was added after 2.3a.
+	* src/LR0.c, src/closure.c, src/closure.h, src/conflicts.c,
+	src/conflicts.h, src/lalr.c, src/lalr.h, src/print.c,
+	src/print_graph.c, src/state.c, src/state.h, tests/conflicts.at,
+	tests/existing.at: Update copyright date.
+
+2007-05-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	If conflict resolution makes states unreachable, remove those states,
+	report rules that are then unused, and don't report conflicts in those
+	states.
+	* src/conflicts.c, src/conflicts.h (conflicts_update_state_numbers):
+	New global function.
+	* src/lalr.c, src/lalr.h (lalr_update_state_numbers): New global
+	function.
+	* src/main.c (main): After conflict resolution, remove the unreachable
+	states and update all data structures that reference states by number.
+	* src/state.c (state_new): Initialize each state's reachable member to
+	false.
+	(state_mark_reachable_states): New static function.
+	(state_remove_unreachable_states): New global function.
+	* src/state.h (struct state): Add member bool reachable.
+	(state_remove_unreachable_states): Prototype.
+	* tests/conflicts.at (Unreachable States After Conflict Resolution):
+	New test case.
+	* tests/existing.at (GNU pic Grammar): Update test case output now that
+	an unused rule is discovered.
+
+2007-05-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Minor code cleanup in parser table construction.
+	* src/LR0.c (new_itemsets): Use item_number_is_symbol_number.
+	(new_itemsets, save_reductions): Update for rename to nitemset.
+	* src/closure.c (nritemset): Rename to...
+	(nitemset): ... this since the "r" appears to meaningless and isn't
+	used in the comments.
+	(closure): Update for rename.
+	* src/closure.h (nritemset): Update extern to...
+	(nitemset): ... this.
+	* src/lalr.c (LA): Fix a typo in comments.
+	* src/print.c (print_core): Update for rename to nitemset.
+	* src/print_graph.c (print_graph): Likewise.
+	* src/state.h: Fix some typos in header comments.
+
+2007-04-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* THANKS: Use ASCII for Sebastien Fricker's name.  Bison source
+	still sticks to ASCII.  Sorry!
+
+	* README-hacking: New file, taken mostly from coreutils, with changes
+	for Bison.  Contains much of the contents of:
+	* README-cvs: Remove.
+	* bootstrap: Sync from gnulib.
+	* build-aux/.cvsignore: Remove *.t, mkinstalldirs.
+	* lib/.cvsignore: Add wchar.h, wctype.h.  Remove exit.h.
+
+2007-03-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* doc/bison.texinfo (Destructor Decl): Fix typo reported by Sebastian
+	Setzer.
+	(Java Differences): Fix some typos.
+	* THANKS: Add Sebastian Setzer.
+
+2007-03-07  Paolo Bonzini  <bonzini@gnu.org>
+
+	* data/java.m4 (b4_single_class_if): Remove.
+	(b4_abstract_if): Look at "%define abstract".
+	(b4_lexer_if): New.
+	(b4_union_name): Rename...
+	(b4_yystype): ... to this.  Map to "%define stype".
+	(b4_rhs_value, b4_parse_param_decl, b4_lex_param_decl,
+	b4_maybe_throws): Fix quoting.
+	(b4_lex_param_call): Move below to keep b4_*_param_decl close.
+	* data/lalr1.java (Lexer interface): Always define.
+	(Lexer interface within parser class): Remove.
+	(YYLexer class): New, used when "%code lexer" is present.
+	(constructor): When "%code lexer" is used, pass %lex-param
+	to the lexer constructor.
+	(yylex, yyparse): Remove %lex-param from method invocations
+	(YYStack, yyaction, yyparse): Rename b4_union_name to b4_yystype.
+
+	* doc/bison.texinfo (Java Bison Interface): Mention "%define
+	abstract".  Rename "%define union_name" to "%define stype".
+	Rename method names according to previous patch.
+	(Java Scanner Interface): Describe "%code lexer" instead of
+	"%pure-parser" and "%define single_class".
+	(Java Differences): Mention "%code lexer".
+
+	* tests/java.at (_AT_DATA_JAVA_CALC_Y): Remove final argument.
+	Include scanner here, using macros from tests/local.at.
+	(AT_DATA_CALC_Y): Remove final argument.
+	(_AT_CHECK_JAVA_CALC): Likewise.
+	(AT_CHECK_JAVA_CALC): Likewise.  Test all four combinations
+	of %locations and %error-verbose.
+	(main): Test with and without %lex-param.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Push AT_LEXPARAM_IF.
+	(AT_BISON_OPTION_POPDEFS): Pop it.
+
+2007-03-07  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	DJGPP spefic issue.  Inhibit the use of disallowed characters for
+	file name genertion on Win98, WinXP, etc.  These are |<>":?*\
+	and concern testsuite case 46.
+	* Makefile.am: djgpp/testsuite.sed added to EXTRA_DIST
+	* djgpp/testsuite.sed: Inhibit the use of disallowed characters.
+	* djgpp/config.bat: Inhibit the use of disallowed characters.
+
+2007-03-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Miscellaneous %define and %code cleanup.
+	* data/bison.m4 (b4_percent_define_flag_if): Correct comments on how
+	values are interpreted.
+	* doc/bison.texinfo (Decl Summary): Clean up and extend %define
+	documentation a little more.
+	* src/muscle_tab.c (MUSCLE_USER_NAME_CONVERT,
+	muscle_percent_define_insert, muscle_percent_code_grow): New
+	functions/macros.
+	* src/muscle_tab.h (muscle_percent_define_insert,
+	muscle_percent_code_grow): Prototype.
+	* src/parse-gram.y (prologue_declaration): Use
+	muscle_percent_define_insert and muscle_percent_code_grow when parsing
+	%define and %code directives.
+
+	Make it easy to share %define boolean variables between the front-end
+	and back-end.  Though not used yet, this will be useful in the future.
+	* data/bison.m4 (b4_check_user_names): Rewrite comments to talk about
+	Bison uses of names rather than just skeleton uses of names.
+	(b4_percent_define_get, b4_percent_define_ifdef): Rename
+	b4_percent_define_skeleton_variables(VARIABLE) to
+	b4_percent_define_bison_variables(VARIABLE).
+	(b4_percent_code_get, b4_percent_code_ifdef): Rename
+	b4_percent_code_skeleton_qualifiers(QUALIFIER) to
+	b4_percent_code_bison_qualifiers(QUALIFIER).
+	(b4_check_user_names_wrap): Update for renames.
+	* src/muscle_tab.c, src/muscle_tab.h (muscle_percent_define_flag_if,
+	muscle_percent_define_default): New functions mimicking
+	b4_percent_define_flag_if and b4_percent_define_default.
+
+	For %define variables, report locations for invalid values and
+	redefinitions.
+	* data/bison.m4 (b4_percent_define_flag_if): Read
+	b4_percent_define_loc(VARIABLE) to report the location of an invalid
+	value for VARIABLE.
+	(b4_percent_define_default): Save a special location in
+	b4_percent_define_loc(VARIABLE) in case the default value for VARIABLE
+	must later be reported as invalid.
+	* src/muscle_tab.c (muscle_location_grow, muscle_location_decode): New
+	functions.
+	(muscle_percent_define_insert): Record the location of VARIABLE in
+	muscle percent_define_loc(VARIABLE), and use it to report the previous
+	location for a redefinition.
+	(muscle_percent_define_flag_if): Update like b4_percent_define_flag_if.
+	(muscle_percent_define_default): Update like b4_percent_define_default.
+	(muscle_grow_user_name_list): Rename to...
+	(muscle_user_name_list_grow): ... this for consistency and use
+	muscle_location_grow.
+	* src/muscle_tab.h (muscle_location_grow): Prototype.
+	* tests/input.at (%define errors): Update expected output.
+	* tests/skeletons.at (%define boolean variables: invalid skeleton
+	defaults): New test case.
+
+2007-02-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/print.c (lookahead_set, state_default_rule): Remove.
+	(print_reductions): Replace state_default_rule invocation with
+	equivalent use of yydefact, which was computed in token_actions in
+	tables.c.
+	(print_results): Don't allocate lookahead_set.
+
+2007-02-27  Paolo Bonzini  <bonzini@gnu.org>
+
+	* data/lalr1.java: Prefix all private members with yy.
+
+2007-02-24  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Use YYFPRINTF instead of fprintf where appropriate.  Reported by
+	Sebastien Fricker at
+	<http://lists.gnu.org/archive/html/bug-bison/2007-02/msg00035.html>.
+	* THANKS: Add Sebastien Fricker.
+	* data/glr.c, data/push.c, data/yacc.c (yy_reduce_print): Implement.
+	* doc/bison.texinfo (Tracing): Make it clearer that YYFPRINTF must
+	accept a variable number of arguments.
+
+2007-02-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* bootstrap: Remove occurrences of .#bootmp from lib/Makefile.
+
+2007-02-13  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	* djgpp/config.bat: Adjustments concerning the use of autoconf 2.61.
+	* djgpp/config.sed: Adjustments concerning the use of autoconf 2.61.
+	* djgpp/config.site: Adjustments concerning the use of autoconf 2.61.
+
+2007-02-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Undo my 2007-02-07 change, switching back to the c-strcase module
+	introduced in the 2007-02-03 change.  Bruno Haible reported that
+	the 2007-02-07 change would be dangerous in Turkish if we add a
+	language whose name contains "i", since "i" is not lowercase "I"
+	in Turkish.
+	* bootstrap.conf (gnulib_modules): Add c-strcase.  Remove strcase.
+	* lib/.cvsignore: Add c-ctype.c, c-ctype.h, c-strcase.h,
+	c-strcasecomp.c, c-strncasecmp.c.  Remove strcasecmp.c, strncasecmp.c.
+	* m4/.cvsignore: Remove strcase.m4.
+	* src/getargs.c: Revert 2007-02-07 change, as follows.
+	Include c-strcase.h.
+	(language_argmatch): Use c_strcasecmp rather than strcasecmp.
+
+2007-02-11  Bruno Haible  <bruno@clisp.org>
+
+	Enable the Java related testsuite tests when the only Java compiler
+	found is a gcj < 4.3.  Discussed at
+	<http://lists.gnu.org/archive/html/bug-bison/2007-02/msg00016.html>.
+	* configure.ac (gt_JAVACOMP): Don't specify a target_version.
+
+2007-02-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/Makefile.am: Update copyright date.
+	* data/push.c (yypull_parse): Report memory exhaustion and return 2 if
+	yypstate_new returns NULL.
+	(yypstate_new): Return NULL if malloc does.
+	* src/reader.c (packgram): Move translation of rule actions from the
+	beginning of packgram to...
+	(check_and_convert_grammar): ... here right before packgram is invoked
+	so it's easier to write more complete comments, and remove redundant
+	code.
+
+2007-02-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	As in semantic actions, make @$ in %initial-action, %destructor, and
+	%printer imply %locations.
+	* src/scan-code.l (SC_SYMBOL_ACTION): Set locations_flag = true when
+	scanning @$.
+	* tests/actions.at (AT_CHECK_ACTION_LOCATIONS): New macro supporting...
+	(@$ in %initial-action implies %locations,
+	@$ in %destructor implies %locations,
+	@$ in %printer implies %locations): ... these new test cases.
+
+2007-02-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Undo most of the 2007-02-03 change, switching to the strcase module
+	now that gnulib strcase has been fixed.
+	* bootstrap.conf (gnulib_modules): Remove c-strcase.  Add strcase.
+	* lib/.cvsignore: Remove c-ctype.c, c-ctype.h, c-strcase.h,
+	c-strcasecomp.c, c-strncasecmp.c.  Add strcasecmp.c, strncasecmp.c
+	* m4/.cvsignore: Add strcase.m4.
+	* src/getargs.c: Revert 2007-02-03 change, as follows.
+	Don't include c-strcase.h.
+	(language_argmatch): Use strcasecmp rather than c_strcasecmp.
+	strcasecmp has "unspecified behavior" outside the POSIX locale,
+	but it works fine in practice if at least one argument is ASCII,
+	as is the case in Bison.
+
+2007-02-07  Paolo Bonzini  <bonzini@gnu.org>
+
+	* tests/java.at: Skip tests if only one of javac/java is present.
+	Reported by Joel E. Denny.
+	* tests/atlocal.in: Adjust copyright years.
+
+2007-02-05  Paolo Bonzini  <bonzini@gnu.org>
+
+	* data/lalr1.java (Stack): Work around old verifiers that disallow
+	access to the private fields of an inner class, from the outer class.
+	We can make Stack's fields public because user code doesn't have access
+	to the instance of Stack used by parse().  Reported by Paul Eggert.
+
+2007-02-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* .cvsignore: Add javacomp.sh, javaexec.sh.  Is this really
+	the right spot for these files?
+	* bootstrap.conf (gnulib_modules): Add c-strcase.
+	* lib/.cvsignore: Add c-ctype.c c-ctype.h, c-strcasecomp.c,
+	c-strncasecmp.c.
+	* src/getargs.c: Include c-strcase.h.
+	(language_argmatch): Use c_strcasecmp rather than strcasecmp,
+	to avoid unspecified behavior.
+
+2007-02-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* doc/bison.texinfo (Decl Summary): Correct typo.
+
+2007-01-30  Paolo Bonzini  <bonzini@gnu.org>
+
+	* data/bison.m4 (b4_percent_define_flag_if): Don't treat 0 as false.
+	Complain if the value does not match empty, "true" or "false".
+	* data/c++.m4: Adjust default definitions of %define variables.
+	* data/java.m4: Adjust default definitions of %define variables.
+	* doc/bison.texinfo (Decl Summary): Adjust the %define entry according
+	to above behavior.
+	* tests/input.at (Boolean %define variables): Test new behavior.
+
+2007-01-29  Paolo Bonzini  <bonzini@gnu.org>
+
+	* NEWS: Mention java.
+	* TODO: Remove things that are done.
+	* bootstrap.conf: Add javacomp-script and javaexec-script.
+	* configure.ac: Invoke gt_JAVACOMP and gt_JAVAEXEC.
+
+	* data/Makefile.am: Add new files.
+	* data/java-skel.m4: New.
+	* data/java.m4: New.
+	* data/lalr1.java: New.
+
+	* doc/bison.texinfo: Put "A Complete C++ Example" under
+	C++ Parsers.  Add Java Parsers.  Put C++ Parsers and Java Parsers
+	under Other Languages.
+
+	* src/getargs.c (valid_languages): Add Java.
+	* src/getargs.h (struct bison_language): Update size of string fields.
+
+	* tests/Makefile.am: Add java.at.
+	* tests/atlocal.in: Add CONF_JAVA and CONF_JAVAC.
+	* tests/java.at: New.
+	* tests/testsuite.at: Include it.
+
+2007-01-28  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Clean up.
+	* src/scan-skel.l (at_directive_perform): Add at_directive_argc and
+	at_directive_argv arguments so these no longer have to be global
+	variables.  Also, update the implementation for the following changes.
+	(fail_for_at_directive_too_many_args,
+	fail_for_at_directive_too_few_args): Add at_directive_name argument.
+	(at_directive_name): Remove as at_directive_argv[0] will be used for
+	this now.
+	(AT_DIRECTIVE_ARGC_MAX): Increment to make space in at_directive_argv
+	for the directive name.
+	(at_directive_argc, at_directive_argv): Make these local within
+	skel_lex instead of global.
+	(INITIAL): Update directive start action for above changes.
+	(SC_AT_DIRECTIVE_ARG): Rename to...
+	(SC_AT_DIRECTIVE_ARGS): ... this, and update for above changes.
+	(SC_AT_DIRECTIVE_SKIP_WS): Update.
+	(scan_skel): Move yylex_destroy to...
+	(skel_scanner_free): ... here.
+	* tests/skeletons.at (installed skeleton file name): Rename to...
+	(installed skeleton file names): ... this.
+
+2007-01-27  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* ChangeLog: For changes in doc/bison.texinfo, consistently reference
+	node names: say "Table of Symbols" not "Bison Symbols", and say "Decl
+	Summary" not "Directives".
+	* doc/bison.texinfo (Decl Summary, Calc++ Parser): Cross-reference the
+	%code entry in "Decl Summary" rather than the one in "Table of Symbols"
+	since the former is now the more complete one.
+	(Prologue Alternatives): Likewise and do the same for %defines.
+	(Table of Symbols): Add summary of %code, add summary of %define, and
+	move full %code documentation to...
+	(Decl Summary): ... here for consistency with other entries in these
+	sections.
+	Move %define entry in order to keep this list alphabetized.
+	Reword %define entry a little to put less emphasis on the skeleton
+	concept, which most users shouldn't have to think about.
+
+2007-01-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Adjust to recent gnulib changes.
+	* lib/.cvsignore: Remove stpcpy.h, strndup.h, strnlen.h.
+	Add string.h, string_.h, unistd_.h, wchar_.h.
+	* m4/.cvsignore: Add gnulib-common.m4, string_h.m4, wchar.m4.
+	* src/system.h: Don't include <stpcpy.h>; this is now done by
+	<string.h>.
+
+2007-01-23  Paolo Bonzini  <bonzini@gnu.org>
+
+	Simplify implementation of unqualified %code, implement macros for
+	uniform treatment of boolean %define flags.  Document %define.
+	* data/bison.m4 (b4_percent_define_ifdef, b4_percent_define_flag_if,
+	b4_percent_code_ifdef): New.
+	(b4_percent_code_get): Map unqualified %code to b4_percent_code().
+	* data/c++.m4: Define default value for global_tokens_and_yystype.
+	* data/glr.cc: Likewise.
+	* data/location.cc: Use b4_percent_define_flag_if.
+
+	* doc/bison.texinfo (Decl Summary): Document %define.
+
+	* src/parse-gram.y (Unqualified %code): Change muscle name to
+	b4_percent_code().
+	(content.opt): Default to empty.
+
+2007-01-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Implement support for relative and absolute skeleton file names.
+	Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00071.html>.
+	* doc/bison.texinfo (Decl Summary): Document in %skeleton entry.
+	(Bison Options): Document in --skeleton entry.
+	* src/output.c (output_skeleton): Use strncpy rather than strcpy since
+	full_skeleton can't necessarily hold all of pkgdatadir.
+	If the specified skeleton file name contains a `/', don't prepend
+	pkgdatadir.
+	* src/parse-gram.y (prologue_declaration): If the specified skeleton
+	file name contains a `/', prepend the grammar file directory.
+	* tests/Makefile.am (TESTSUITE_AT): Add skeletons.at.
+	* skeletons.at: New file.
+	(relative skeleton file names): New test case.
+	(installed skeleton file names): New test case.
+	* tests/testsuite.at: Include skeletons.at.
+
+	* bootstrap: Update copyright to 2007.
+
+2007-01-17  Paolo Bonzini  <bonzini@gnu.org>
+
+	* bootstrap: Remove occurrences of .#bootmp from the files.
+
+2007-01-17  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Calc++ Parser): Don't try to alias
+	nonterminals.
+	Use per-type %printer.
+
+2007-01-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* NEWS, data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4,
+	data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+	djgpp/config.site, src/files.c, src/files.h, src/main.c,
+	src/muscle_tab.c, src/muscle_tab.h, src/parse-gram.y, src/reader.h,
+	src/scan-skel.h, src/scan-skel.l, tests/actions.at, tests/calc.at,
+	tests/glr-regression.at, tests/input.at, tests/local.at,
+	tests/output.at, tests/torture.at: Update copyright to 2007.
+
+2007-01-16  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Calc++ Parsing Driver): Let "parse" return an
+	error code.
+	(Calc++ Scanner): Exit with failure if we can't open the input
+	file.
+	Accept "-" standing for stdin.
+	(Calc++ Top Level): Print the result only if the parsing was
+	successful.
+
+2007-01-16  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (yy_reduce_print_): Add a missing end-of-line.
+
+2007-01-15  Paolo Bonzini  <bonzini@gnu.org>
+	and Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Clean up %define and %code implementation in M4 some.  Most
+	importantly, rename all related macros to be in the b4_percent_define
+	and b4_percent_code namespaces.  Also, complete support for `.' in
+	%define variable names and %code qualifiers.
+	* data/bison.m4 (b4_check_user_names): Check for special
+	"SKELETON-NAMESPACE(name)" macros instead of using two nested
+	m4_foreach loops.
+	(b4_get_percent_define, b4_get_percent_code): Rename to...
+	(b4_percent_define_get, b4_percent_code_get): ... these.
+	Extend documentation with examples.
+	For SKELETON-NAMESPACE (as documented for b4_check_user_names), use
+	b4_percent_define_skeleton_variables and
+	b4_percent_code_skeleton_qualifiers.
+	Expect any value for the %define variable `foo' to be stored in the
+	macro named `b4_percent_define(foo)'; expect any %code blocks for the
+	qualifier `foo' to be stored in a macro named `b4_percent_code(foo)';
+	expect any unqualified %code blocks to be stored in a macro named
+	`b4_percent_code_unqualified'.
+	Use m4_indir so that %define variable names and %code qualifiers can
+	contain `.', which is allowed by the grammar parser.
+	(b4_percent_define_default): New macro to set a default value for a
+	%define variable.
+	(m4_wrap): Update wrapped code, and fix some underquoting.
+	(b4_check_user_names_wrap): Update and define outside the m4_wrap.
+	Expect grammar uses of %define variables and %code qualifiers to be
+	defined in b4_percent_define_user_variables and
+	b4_percent_code_user_qualifiers.
+	* data/c++.m4: Use b4_percent_define_default rather than
+	m4_define_default.  Fix some underquoting.  Skeleton usage of %define
+	variable define_location_comparison now implies skeleton usage of
+	%define variable filename_type.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+	data/push.c, data/yacc.c: Update macro names.
+	* src/parse-gram.y (prologue_declaration, grammar_declaration): Update
+	muscle names.
+
+2007-01-14  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	DJGPP specific issues.
+
+	* djgpp/config.site: Set ac_cv_path_mkdir to a sane DJGPP specific
+	default.  Set gl_cv_absolute_wctype_h to a sane DJGPP specific default.
+
+2007-01-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/glr-regression.at: Use AT_PARSER_CHECK rather than AT_CHECK to
+	run parsers in all tests so that Valgrind is invoked during
+	maintainer-check-valgrind.
+	(Duplicate representation of merged trees): Free all semantic values.
+	(Duplicated user destructor for lookahead): Likewise.
+
+2007-01-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/local.at (AT_PARSER_CHECK): Add a PRE argument to specify a
+	command-line prefix.
+	* tests/torture.at (Exploding the Stack Size with Alloca): Stderr is
+	ignored, so use that PRE to set --log-fd=1 in VALGRIND_OPTS so we don't
+	miss Valgrind messages.
+	(Exploding the Stack Size with Malloc): Likewise.
+
+2007-01-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be
+	locals.  Reported by Juan Manuel Guerrero at
+	<http://lists.gnu.org/archive/html/bug-bison/2007-01/msg00000.html>.
+	* data/push.c: Enclose the #ifdef YYSTACK_USE_ALLOCA in b4_push_if.
+	Fix some indentation also.
+	* tests/torture.at (Exploding the Stack Size with Alloca): Add comment
+	explaining this issue.
+
+2007-01-09  Paolo Bonzini  <bonzini@gnu.org>
+	and Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Simplify union and prologue handling, and escape union and lex/parse
+	params with digraphs.
+	* data/bison.m4 (b4_pre_prologue, b4_post_prologue): Set their default
+	values to the empty string since these are no longer guaranteed
+	initialized by the front-end.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/push.c, data/yacc.c: Add
+	braces around b4_user_stype since this is no longer done by the
+	front-end.
+	* src/files.c, src/files.h (pre_prologue_obstack,
+	post_prologue_obstack): Remove.
+	* src/muscle_tab.c (muscle_pair_list_grow): Don't duplicate header
+	comments here.  Use MUSCLE_OBSTACK_SGROW so that values are escaped
+	with digraphs.  This fixes lex params and parse params.
+	* src/muscle_tab.h (muscle_pair_list_grow): Update comments.
+	* src/output.c (prepare): Remove muscle insertion of the prologues.
+	(output): Remove freeing of pre_prologue_obstack and
+	post_prologue_obstack.
+	* src/parse-gram.y (prologue_declaration): Use muscle_code_grow rather
+	than prologue_augment for prologue parsing so you don't need prologue
+	obstacks.
+	(grammar_declaration): For %union RHS, use `braceless' instead of
+	"{...}" so that braces are already stripped and code is escaped with
+	digraphs.
+	* src/reader.c (prologue_augment): Remove.
+	(reader): Remove initialization of pre_prologue_obstack and
+	post_prologue_obstack.
+	* src/reader.h (prologue_augment): Remove.
+
+	* data/c.m4: Remove stray parenthesis.
+
+2007-01-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Remove quotes from variables names in %define directives and from
+	qualifiers in %code directives, and restrict the characters that are
+	allowed in them to M4-friendly ones.  For %define, continue to support
+	the quoted form as a deprecated feature.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-01/msg00023.html>.
+	* NEWS (2.3a+): Add entry for the change to %define.  Update entry for
+	%code.
+	* doc/bison.texinfo (Prologue Alternatives): Update.
+	(Decl Summary): In %defines entry, update mention of `%code requires'
+	and `%code provides'.
+	(C++ Location Values): Update %define uses.
+	(Calc++ Parser Interface): Likewise.
+	(Calc++ Parser): Likewise, and update `%code requires' uses.
+	(Table of Symbols): Update %code documentation.
+	* src/parse-gram.y (prologue_declaration): For %define variables, use
+	`variable' instead of `STRING'.
+	(grammar_declaration): For %code qualifiers, use `ID' instead of
+	`STRING'.
+	(variable): New nonterminal that takes an `ID' or a `STRING'.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Update %code
+	and %define uses.
+	* tests/calc.at (_AT_DATA_CALC_Y): Update %define use.
+	* tests/input.at (Reject unused %code qualifiers): Update %code uses.
+	(%define errors): Update %define uses.
+
+2007-01-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/parse-gram.y (prologue_declaration): Use MUSCLE_INSERT_STRING
+	instead of muscle_insert for %define values so that M4-special
+	characters are replaced with digraphs.
+	* tests/input.at (%define errors): Extend to check weird values.
+
+2007-01-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Instead of having skeletons declare all valid %define variables and
+	%code qualifiers, provide macros that retrieve the associated values
+	and build these lists automatically.  Thus Bison will now warn when a
+	variable or qualifier is not used by the skeleton in the current
+	invocation regardless of whether it might sometimes be used by that
+	skeleton in other invocations.  Also, move all %define value macros to
+	the b4_percent_define_ namespace, and remove the %define "NAME" {CODE}
+	form, which is replaced by %code.
+	* data/bison.m4 (b4_check_for_unrecognized_names): Rename to...
+	(b4_check_user_names): ... this, and change the series of valid name
+	arguments to a single list argument for names used in the skeleton
+	similar to the existing list argument for names used in the grammar.
+	Warn instead of complaining.
+	(b4_get_percent_define, b4_get_percent_code): New to retrieve %define
+	values and %code code, to format %code code properly, and to build
+	lists of all %define variables and %code qualifiers used in the
+	skeleton: b4_skeleton_percent_define_variables and
+	b4_skeleton_percent_code_qualifiers.
+	(b4_check_percent_define_variables, b4_check_percent_code_qualifiers):
+	Remove, and...
+	(m4_wrap): ... m4_wrap b4_check_user_names invocations instead so that
+	the skeleton names lists can finish building first.  In place of
+	b4_used_percent_define_variables and b4_used_percent_code_qualifiers,
+	expect the lists b4_user_percent_define_variables and
+	b4_user_percent_code_qualifiers.
+	* data/c++.m4: Where setting default values for b4_parser_class_name,
+	b4_location_type, b4_filename_type, b4_namespace, and
+	b4_define_location_comparison, update their names to the
+	b4_percent_define_ namespace.
+	* data/glr.c: Don't use b4_check_percent_define_variables and
+	b4_check_percent_code_qualifiers.  Use b4_get_percent_code.
+	* data/glr.cc, data/lalr1.cc: Likewise, and use b4_get_percent_define.
+	(b4_parser_class_name, b4_namespace): Define these using
+	b4_get_percent_define for parser_class_name and namespace.
+	* data/location.cc: Use b4_get_percent_define.
+	* data/push.c: Don't use b4_check_percent_define_variables and
+	b4_check_percent_code_qualifiers.  Use b4_get_percent_code.
+	* data/yacc.c: Likewise, and don't call m4_exit in
+	b4_use_push_for_pull_if or m4_wrap code will never execute.
+	* src/muscle_tab.c, src/muscle_tab.h (muscle_grow_used_name_list):
+	Rename to...
+	(muscle_grow_user_name_list): ... this for consistency with the
+	terminology used in bison.m4.
+	* src/parse-gram.y (prologue_declaration): Prepend "percent_define_" to
+	%define variable names, and rename muscle used_percent_define_variables
+	to user_percent_define_variables.
+	(grammar_declaration): Rename muscle used_percent_code_qualifiers to
+	user_percent_code_qualifiers.
+	(content): Remove.
+	(content.opt): Replace content RHS with STRING RHS so %define "NAME"
+	{CODE} form is no longer accepted.
+	* tests/input.at (Reject bad %code qualifiers): Rename to...
+	(Reject unused %code qualifiers): ... this, and update test output.
+	(%define error): Update test output.
+
+2007-01-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Check for unrecognized %define variables similar to checking for
+	unrecognized %code qualifiers.  Check for redefined %define variables.
+	* data/bison.m4 (b4_check_for_unrecognized_names): New macro that
+	generalizes...
+	(b4_check_percent_code_qualifiers): ... this, which now wraps it.
+	(b4_check_percent_define_variables): New, also wraps it.
+	* data/glr.c: Unless glr.cc is wrapping glr.c, declare no valid %define
+	variables using b4_check_percent_define_variables.
+	* data/glr.cc, data/lalr1.cc: Declare the valid %define variables as
+	all those exercised in the test suite and all those listed in the
+	`Default values' section of c++.m4.  Are there others?
+	* data/push.c, data/yacc.c: Declare no valid %define variables.
+	* src/muscle_tab.c, src/muscle_tab.h (muscle_find_const): New function,
+	similar to muscle_find, but it works even when the muscle stores a
+	const value.
+	(muscle_grow_used_name_list): New function for constructing the used
+	name list muscles that b4_check_for_unrecognized_names requires.
+	* src/parse-gram.y (prologue_declaration): Warn if a variable is
+	%define'd more than once.  Define the b4_used_percent_define_variables
+	muscle with muscle_grow_used_name_list.
+	(grammar_declaration): Abbreviate %code code with
+	muscle_grow_used_name_list.
+	* tests/input.at (%define errors): New.
+
+2007-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Provide warn_at, complain_at, and fatal_at function callbacks to the
+	skeletons, and use this for %code qualifier complaints.
+	* data/bison.m4 (b4_error_at): New, invoked by...
+	(b4_warn_at, b4_complain_at, b4_fatal_at): ... these new macros to wrap
+	the skeleton scanner's new @warn_at(...@), @complain_at(...@), and
+	@fatal_at(...@) directives.
+	(b4_check_percent_code_qualifiers): Rewrite to expect locations for
+	qualifiers in b4_used_percent_code_qualifiers and to use
+	b4_complain_at.
+	* src/location.c, src/location.h (boundary_set_from_string): New global
+	function.
+	* src/muscle_tab.c, src/muscle_tab.h (muscle_boundary_grow): New global
+	function.
+	* src/parse-gram.y (grammar_declaration): Add locations for qualifiers
+	to b4_used_percent_code_qualifiers.
+	* src/scan-skel.l (fail_for_at_directive_too_few_args): New static
+	function.
+	(AT_DIRECTIVE_ARGC_MAX): Increase for boundary arguments.
+	(lineno): Rename to...
+	(out_lineno): ... this so I don't misunderstand it again.
+	(SC_AT_DIRECTIVE_SKIP_WS): Don't increment out_lineno for newlines
+	here; these newlines are in the input but not the output file.
+	(SC_AT_DIRECTIVE_ARG): Likewise.  Extract directive execution to...
+	(at_directive_perform): ... this new static function, and add handling
+	of new @warn_at(...@), @complain_at(...@), and @fatal_at(...@)
+	directives.
+	* tests/input.at (Reject bad %code qualifiers): Update test output with
+	locations and extend.
+
+	* tests/output.at (Output file name: [, Output file name: ]): Remove
+	bogus comment about these tests failing.
+
+2007-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Clean up b4_check_percent_code_qualifiers a little.
+	* data/bison.m4 (b4_check_percent_code_qualifiers): Expect qualifiers
+	in b4_used_percent_code_qualifiers to be double-M4-quoted.  Rewrite
+	documentation and add examples.
+	* src/parse-gram.y (grammar_declaration): Double-M4-quote those
+	qualifiers here.
+
+2007-01-05  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't use m4_divert since it makes m4_divert_push and m4_divert_pop
+	unreliable -- especially when they're hidden inside another macro.
+	* data/bison.m4, data/c++-skel.m4, data/c++.m4, data/c-skel.m4,
+	data/c.m4: Remove m4_divert(-1).
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+	data/push.c, data/yacc.c: Likewise, and replace m4_divert(0) with
+	m4_divert_push(0) and m4_divert_pop(0).
+	* src/output.c (output_skeleton): Don't add an m4_divert_push(0) and
+	an m4_wrap([m4_divert_pop(0)]) to the M4.  Diversion -1, which is
+	pushed and popped by m4sugar, should be first on the stack.
+
+	Provide warn, complain, and fatal function callbacks to the skeletons.
+	This provides more flexibility than m4_fatal, improves the error
+	message format, and captures messages for translation.  Discussed
+	starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00063.html>.
+	* data/bison.m4 (b4_error): New, invoked by...
+	(b4_warn, b4_complain, b4_fatal): ... these new macros to wrap the
+	skeleton scanner's new @warn(...@), @complain(...@), and @fatal(...@)
+	directives.  Because these M4 macros might be called when the current
+	diversion is -1 or 0, m4_divert_push and m4_divert_pop is used; thus
+	the previous removal of uses of m4_divert, which caused trouble.
+	(b4_check_percent_code_qualifiers): Use b4_complain instead of
+	m4_fatal to report unrecognized %code qualifiers.
+	* data/c++-skel.m4: Use b4_complain instead of m4_fatal to report C++
+	push parser requests.
+	* data/glr.c: Use b4_complain instead of m4_fatal to report
+	non-deterministic push parser requests.
+	Update @output usage to @output(...@) form.
+	* data/glr.cc, data/lalr1.cc: Use b4_fatal instead of m4_fatal to
+	report missing %defines.  Update @output usage to @output(...@) form.
+	* data/location.cc, data/push.c, data/yacc.c: Update @output usage to
+	@output(...@) form.
+	* src/main.c (main): Invoke skel_scanner_free.
+	* src/scan-skel.h (skel_scanner_free): Prototype new function.
+	* src/scan-skel.l (FLEX_NO_OBSTACK): Don't define; we now need the
+	obstack_for_string from flex-scanner.h.
+	(YY_DECL): Use to declare skel_lex static.
+	(decode_at_digraphs): Remove; now handled in the new
+	SC_AT_DIRECTIVE_ARG start condition.
+	(fail_for_at_directive_too_many_args, fail_for_invalid_at): New static
+	functions.
+	(at_directive_name, AT_DIRECTIVE_ARGC_MAX, at_directive_argc,
+	at_directive_argv): New static globals.
+	(INITIAL): Use fail_for_invalid_at.
+	Don't parse `@output file_name\n' or `@basename(...@)'.  Instead,
+	recognize the start of a generalized `@directive(...@)' form and
+	start...
+	(SC_AT_DIRECTIVE_ARG): ... this new start condition to parse the
+	directive args (using the new obstack_for_string), to decode the
+	contained @ diagraphs, and to perform the directive.  It recognizes
+	@basename(...@), @warn(...@), @complain(...@), @fatal(...@), and
+	@output(...@).
+	(SC_AT_DIRECTIVE_SKIP_WS): New start condition started by
+	SC_AT_DIRECTIVE_ARG to skip whitespace after the argument delimiter,
+	`@,'.
+	(scan_skel): Initialize obstack_for_string on the first call.
+	(skel_scanner_free): New function to free obstack_for_string.
+	* tests/input.at (Reject bad %code qualifiers): Update test output.
+
+2007-01-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Consolidate the 4 prologue alternative directives (%code, %requires,
+	%provides, and %code-top) into a single %code directive with an
+	optional qualifier field.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2007-01/msg00012.html>.
+	* NEWS (2.3a+): Rewrite the existing entry for the prologue
+	alternatives.
+	* doc/bison.texinfo (Prologue Alternatives): Update.
+	(Decl Summary): Update to %code "requires" and %code "provides".
+	(Calc++ Parser): Update to %code "requires".
+	(Table of Symbols): Remove entries for %requires, %provides, and
+	%code-top.  Rewrite %code entry, and add a %code "QUALIFIER" entry.
+	* data/bison.m4 (b4_user_provides, b4_user_requires): Remove as these
+	are replaced by b4_percent_code_provides and b4_percent_code_requires,
+	which are skeleton-specific.
+	(b4_check_percent_code_qualifiers): New.  A skeleton can use this to
+	declare what %code qualifiers it supports and to complain if any other
+	qualifiers were used in the grammar.
+	* data/glr.cc: Update to use b4_user_code([b4_percent_code_requires])
+	and b4_user_code([b4_percent_code_provides]) in place of
+	b4_user_requires and b4_user_provides.
+	* data/glr.c, data/lalr1.cc, data/push.c, data/yacc.c: Likewise.
+	Add b4_user_code([b4_percent_code_top]) and
+	b4_user_code([b4_percent_code]).
+	Invoke b4_check_percent_code_qualifiers.
+	* src/parse-gram.y (PERCENT_CODE_TOP, PERCENT_PROVIDES,
+	PERCENT_REQUIRES): Remove.
+	(grammar_declaration): Remove RHS's for %code-top, %provides, and
+	%requires.  Rewrite the %code RHS as the unqualified form defining the
+	muscle b4_percent_code.  Add another RHS for the qualified %code form,
+	which defines muscles of the form b4_percent_code_QUALIFIER and the
+	b4_used_percent_code_qualifiers muscle.
+	* src/scan-gram.l (PERCENT_CODE_TOP, PERCENT_PROVIDES,
+	PERCENT_REQUIRES): Remove.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Update to use
+	%code "requires" and %code "provides".
+	* tests/input.at (Reject bad %code qualifiers): New.
+
+2007-01-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Use the new code_props interface for destructors and printers.
+	* src/symtab.h (symbol, semantic_type): Remove destructor_location and
+	printer_location members, and change the type of the destructor and
+	printer members to code_props.
+	(symbol_destructor_set, symbol_destructor_get, symbol_printer_set,
+	symbol_printer_get, semantic_type_destructor_set,
+	semantic_type_printer_set, default_tagged_destructor_set,
+	default_tagless_destructor_set, default_tagged_printer_set,
+	default_tagless_printer_set): Use code_props in arguments and return
+	types in place of char const * and location.
+	(symbol_destructor_location_get, symbol_printer_location_get): Remove
+	since the locations are now contained in the return of
+	symbol_destructor_get and symbol_printer_get.
+	* src/output.c (symbol_destructors_output, symbol_printers_output):
+	Replace with...
+	(symbol_code_props_output): ... this to eliminate duplicate code.
+	(output_skeleton): Update to use symbol_code_props_output.
+	* src/reader.c (symbol_should_be_used): Update use of
+	symbol_destructor_get.
+	* src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set):
+	Update uses of the various _destructor_set and _printer_set functions.
+	* src/symtab.c: (default_tagged_destructor_location,
+	default_tagless_destructor_location, default_tagged_printer_location,
+	default_tagless_printer_location): Remove since we...
+	(default_tagged_destructor, default_tagless_destructor,
+	default_tagged_printer, default_tagless_printer): ... change the type
+	of these to code_props.
+	(symbol_new, semantic_type_new, symbol_destructor_set,
+	semantic_type_destructor_set, symbol_destructor_get,
+	symbol_printer_set, semantic_type_printer_set, symbol_printer_get,
+	symbol_check_alias_consistency, default_tagged_destructor_set,
+	default_tagless_destructor_set, default_tagged_printer_set,
+	default_tagless_printer_set): Update.
+	(symbol_destructor_location_get, symbol_printer_location_get): Remove.
+	(SYMBOL_CODE_PRINT): New similar to SYMBOL_ATTR_PRINT but for
+	code_props members.
+	(symbol_print): Use SYMBOL_CODE_PRINT.
+
+2007-01-03  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Use the new code_props interface for rule actions.
+	* src/symlist.h (symbol_list): Replace action, action_location, and
+	used members with a code_props action_props member.
+	* src/reader.c (symbol_should_be_used, grammar_rule_check,
+	grammar_midrule_action, grammar_current_rule_merge_set,
+	grammar_current_rule_symbol_append, packgram): Update.
+	* src/scan-code.h (translate_rule_action): Remove, no longer used.
+	* src/scan-code.l (handle_action_dollar): Update.
+	(translate_rule_action): Remove, no longer used.
+	* src/symlist.c (symbol_list_sym_new, symbol_list_syms_print): Update.
+
+2007-01-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Use the new code_props interface in parse-gram.y.
+	* src/parse-gram.y (prologue_declaration, braceless, epilogue.opt):
+	Update all uses of translate_* functions to use the new code_props
+	interface and to use gram_scanner_last_string_free and
+	code_scanner_last_string_free where possible.
+	(grammar_declaration): symbol_list_destructor_set and
+	symbol_list_printer_set now perform the translation, so don't do it
+	here.  Use gram_scanner_last_string_free where possible.
+	* src/scan-code.h, src/scan-code.l (translate_symbol_action,
+	translate_code): Remove, no longer used.
+	* src/symlist.h, src/symlist.c (symbol_list_destructor_set,
+	symbol_list_printer_set): Perform code translation here rather than
+	depending on the caller to do so.
+
+	* src/symlist.h (struct symbol_list): Correct some documentation typos.
+	* src/scan-gram.h (gram_last_string): Remove declaration.
+	* src/scan-gram.l (last_string): Declare it static.
+
+2007-01-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Encapsulate code properties and related functionality for the various
+	destructors, printers, and actions into a code_props structure and
+	interface.  This patch merely implements code_props in scan-code.h and
+	scan-code.l.  Future patches will rewrite other modules to use it.
+	Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00020.html>.
+	* src/location.h (EMPTY_LOCATION_INIT): Define so that it's easier to
+	consistently initialize const structs that have an empty location
+	field.
+	* src/location.c (empty_location): Initialize with EMPTY_LOCATION_INIT
+	to ensure consistency.
+	* src/scan-code.h (code_props): New structure.
+	(code_props_none_init, CODE_PROPS_NONE_INIT, code_props_none): New
+	function, macro, and const global variable for initializing a
+	code_props with no code.
+	(code_props_plain_init, code_props_symbol_action_init,
+	code_props_rule_action_init, code_props_translate_code): The rest of
+	the new code_props functional interface.  Among other things, the init
+	functions set the code_props kind field so that
+	code_props_translate_code will know whether to behave like
+	translate_symbol_action, translate_rule_action, or translate_code.
+	These old translate functions must remain until all other modules are
+	updated to use the new code_props interface.
+	(code_scanner_last_string_free): New function similar to
+	gram_scanner_last_string_free.
+	(code_scanner_free): Add documentation.
+	* src/scan-code.l: Implement the new interface.
+	(code_lex): Make it static, add a code_props* argument, and remove the
+	rule argument.
+	(last_string): New static global similar to the one in scan-gram.l.
+	(SC_RULE_ACTION): Update to use the code_props* argument to code_lex
+	instead of rule.
+	(SC_SYMBOL_ACTION): For $$, set the is_value_used member of the
+	code_props since Bison may one day use this information for destructors
+	and printers.
+	(<*><<EOF>>): Use STRING_FINISH so that last_string is set.
+	(handle_action_dollar): Use symbol_list_n_get and set used flag
+	directly since symbol_list_n_used_set is removed.
+	(translate_action): Add a code_props* argument and remove the rule,
+	action, and location arguments.  Pass the code_props* on to code_lex.
+	(translate_rule_action, translate_symbol_action, translate_code):
+	Rewrite as wrappers around the new code_props interface.
+	* src/symlist.h, src/symlist.c (symbol_list_n_used_set): Remove since
+	it would eventually need to break the encapsulation of code_props.
+
+2007-01-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* etc/.cvsignore: New.
+
+2007-01-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Add maintainer-push-check to run maintainer-check using push parsing in
+	place of pull parsing where available.
+	* Makefile.am (maintainer-push-check): New.
+	* data/bison.m4 (b4_use_push_for_pull_if): New.
+	* data/push.c: Redefine b4_push_if and b4_use_push_for_pull_if
+	appropriately based on their existing values.
+	(yypush_parse): Don't print push-parser-specific diagnostics if push
+	parsing is being used in place of pull parsing.
+	* data/yacc.c: If push parsing should replace pull parsing, redirect to
+	push.c.
+	* src/output.c (prepare): Check BISON_USE_PUSH_FOR_PULL environment
+	variable, and insert b4_use_push_for_pull_flag into muscles.
+	* tests/Makefile.am (maintainer-push-check): New.
+
+2006-12-31  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/push.c (yypush_parse): Set yynew = 1 at the end of a parse
+	(whether successful or failed) so that yypush_parse can be invoked
+	again to start a new parse using the same yypstate.
+	* tests/torture.at (AT_DATA_STACK_TORTURE): For push mode, extend to
+	check multiple yypull_parse invocations on the same yypstate.  For pull
+	mode, extend to check multiple yyparse invocations.
+	(Exploding the Stack Size with Alloca): Extend to try with
+	%push-pull-parser.
+	(Exploding the Stack Size with Malloc): Likewise.
+
+	* tests/calc.at (Simple LALR Calculator): Don't specify
+	%skeleton "push.c" since %push-pull-parser implies that now.
+	* tests/headers.at (export YYLTYPE): Don't check for the push
+	declarations.  Otherwise, this test case can't be used to see if push
+	mode can truly emulate pull mode.
+	* tests/input.at (Torturing the Scanner): Likewise.
+	* tests/local.at (AT_YACC_OR_PUSH_IF, AT_PUSH_IF): Remove.
+	(AT_YYERROR_SEES_LOC_IF): Rather than AT_YACC_OR_PUSH_IF, use
+	AT_YACC_IF, which now includes the case of push mode since %skeleton
+	need not be used for push mode.  This will be more intuitive once
+	push.c is renamed to yacc.c.
+
+2006-12-31  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	For push mode, convert yyparse from a macro to a function, invoke yylex
+	instead of passing a yylexp argument to yypull_parse, and don't
+	generate yypull_parse or yyparse unless %push-pull-parser is declared.
+	Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00163.html>.
+	* data/bison.m4 (b4_pull_if): New.
+	* data/c.m4 (b4_identification): Define YYPULL similar to YYPUSH.
+	* data/push.c: Improve M4 quoting a little.
+	(b4_generate_macro_args, b4_parenthesize): Remove.
+	(yyparse): If there's a b4_prefix, #define this to b4_prefix[parse]
+	any time a pull parser is requested.
+	Don't #define this as a wrapper around yypull_parse.  Instead, when
+	both push and pull are requested, make it a function that does that
+	same thing.
+	(yypull_parse): If there's a b4_prefix, #define this to
+	b4_prefix[pull_parse] when both push and pull are requested.
+	Don't define this as a function unless both push and pull are
+	requested.
+	Remove the yylexp argument and hard-code yylex invocation instead.
+	* etc/bench.pl.in (bench_grammar): Use %push-pull-parser instead of
+	%push-parser.
+	* src/getargs.c (pull_parser): New global initialized to true.
+	* getargs.h (pull_parser): extern it.
+	* src/output.c (prepare): Insert pull_flag muscle.
+	* src/parse-gram.y (PERCENT_PUSH_PULL_PARSER): New token.
+	(prologue_declaration): Set both push_parser and pull_parser = true for
+	%push-pull-parser.  Set push_parser = true and pull_parser = false for
+	%push-parser.
+	* src/scan-gram.l: Don't accept %push_parser as an alternative to
+	%push-parser since there's no backward-compatibility concern here.
+	Scan %push-pull-parser.
+	* tests/calc.at (Simple LALR(1) Calculator): Use %push-pull-parser
+	instead of %push-parser.
+	* tests/headers.at (export YYLTYPE): Make yylex static, and don't
+	prototype it in the module that calls yyparse.
+	* tests/input.at (Torturing the Scanner): Likewise.
+	* tests/local.at (AT_PUSH_IF): Check for %push-pull-parser as well.
+
+2006-12-26  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Update etc/bench.pl.  Optimize push mode a little (the yyn change
+	deserves most of the credit).
+	* Makefile.am (SUBDIRS): Add etc subdirectory.
+	* configure.ac (AC_CONFIG_FILES): Add etc/bench.pl and etc/Makefile.
+	* data/push.c (b4_declare_parser_state_variables): Move yyn, yyresult,
+	yytoken, yyval, and yyloc declarations to...
+	(yyparse or yypush_parse): ... here to improve performance.  For
+	yypush_parse invocations after the first, be sure to assign yyn its old
+	value again.
+	(yypstate_new): Don't bother initializing the yyresult field since the
+	initial value isn't used.
+	(yyn, yyresult, yytoken, yyval, yyloc): For each NAME in this list,
+	remove the #define that, in push mode, set it to yyps->NAME.
+	* etc/Makefile.am: New.
+	* etc/bench.pl: Remove and build it instead from...
+	* etc/bench.pl.in: ... this new file.  Use @abs_top_builddir@ to invoke
+	"tests/bison" from the build directory by default rather than just
+	invoking "bison" from $PATH.
+	(calc_grammar): Update push parser code: don't declare yylval globally,
+	don't define yyparse_wrapper, and don't #define yyparse.
+	(bench_grammar): Update to check all working combinations of yacc.c,
+	push.c, impure, pure, pull, and push.
+
+2006-12-25  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	For push mode, add pull wrappers around yypush_parse.
+	* data/push.c: (b4_generate_macro_args, b4_parenthesize): New macros.
+	(yypull_parse): New function wrapping yypush_parse.
+	(yyparse): New #define wrapping yypull_parse.
+	* tests/calc.at (_AT_DATA_CALC_Y): Call yyparse even when %push-parser
+	is declared.
+	* tests/headers.at (export YYLTYPE): Make yylex global.  For push mode,
+	prototype yylex in the module that calls yyparse, and don't prototype
+	yyparse there.  Otherwise, the yyparse expansion won't compile.
+	* tests/input.at (Torturing the Scanner): Likewise.
+
+2006-12-25  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Enable push parsers to operate in impure mode.  Thus, %push-parser no
+	longer implies %pure-parser.  The point of this change is to move
+	towards being able to test the push parser code by running the entire
+	test suite as if %push-parser had been declared.
+	* data/push.c (yypush_parse): For impure mode, remove the
+	yypushed_char, yypushed_val, and yypushed_loc arguments.
+	Instead, declare these as local variables initialized to the global
+	yychar, yylval, and yylloc.
+	For the first yypush_parse invocation only, restore the initial values
+	of these global variables when it's time to read a token since they
+	have been overwritten.
+	* src/parse-gram.y (prologue_declaration): Don't set pure_parser for
+	%push-parser.
+	* tests/calc.at (Simple LALR(1) Calculator): Always declare
+	%pure-parser along with %push-parser since this test case was designed
+	for pure push parsers.
+	* tests/local.at (AT_PURE_OR_PUSH_IF): Remove unused.
+	(AT_YACC_OR_PUSH_IF): New.
+	(AT_YYERROR_SEES_LOC_IF): Fix enough that the test suite passes, but
+	add a note that it's still wrong for some cases (as it has been for a
+	while).
+	(AT_PURE_LEX_IF): Use AT_PURE_IF instead of AT_PURE_OR_PUSH_IF since
+	%push-parser no longer implies %pure-parser.
+
+2006-12-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Remove some unnecessary differences between the pull parser code and
+	the push parser code.  This patch enables yynerrs in push mode.
+	* data/push.c: Reformat M4 a little.
+	(b4_yyerror_range): Remove and convert all uses to just yyerror_range.
+	(b4_declare_scanner_communication_variables): Don't omit yynerrs just
+	because push mode is on.  Instead, if pure mode is on, move yynerrs
+	to...
+	(b4_declare_parser_state_variables): ... here.
+	(yynerrs, yyerror_range): For push mode, #define each NAME in this list
+	to yyps->NAME so it can be used in yypush_parse.
+	(yypush_parse): Don't omit uses of yynerrs in push mode.
+
+2006-12-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix bug such that the first pushed token's value and location are
+	sometimes overwritten (sometimes by %initial-action) before being used.
+	* data/push.c (yypush_parse): Rename arguments yynchar, yynlval, and
+	yynlloc to yypushed_char, yypushed_val, and yypushed_loc for clarity.
+	For the first yypush_parse invocation, initialize yychar to YYEMPTY to
+	more closely mimic the pull parser logic.
+	Don't copy the pushed token to yychar, yylval, and yylloc until it's
+	time to read a token, which is after any initialization of yylval and
+	yylloc.
+	(gottoken): Rename label to...
+	(yyread_pushed_token): ... for clarity and to avoid infringing on the
+	user namespace.
+
+2006-12-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Rearrange initialization of the parser state variables so that the
+	skeleton doesn't have to have a copy for pull mode and another for push
+	mode.  This patch also fixes at least a bug such that yylloc was not
+	initialized (with b4_location_initial_line and
+	b4_location_initial_column) upon calling yypush_parse.  However, that
+	initialization now overwrites the first token's location;
+	%initial-action assigning @$ already did the same thing, and both bugs
+	will be fixed in a later patch.
+	* data/push.c (b4_yyssa): Remove and convert all uses to just yyssa.
+	(b4_declare_parser_state_variables): Remove initialization of yytoken,
+	yyss, yyvs, yyls, and yystacksize.
+	(yypstate_new): Remove initialization of some yypstate fields: yystate,
+	yyerrstatus, yytoken, yyss, yyvs, yyls, yystacksize, yyssp, yyvsp, and
+	yylsp.
+	(yyssa, yyvsa, yylsa): For push mode, #define each NAME in this list to
+	yyps->NAME so it can be used in yypush_parse.
+	(yyparse or yypush_parse): For yypush_parse, don't print the
+	"Starting parse" diagnostic for invocations after the first.
+	Add initialization of yytoken, yyss, yyvs, yyls, and yystacksize; for
+	yypush_parse, only do it for the first invocation.
+	Allow yystate, yyerrstatus, yyssp, yyvsp, yylsp, and yylloc
+	initialization to occur in yypush_parse but only on the first
+	invocation.
+
+2006-12-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/push.c: Add CPP guards around push parser declarations in both
+	the header and the code file.
+	In the code file, move the push parser declarations to the same place
+	they appear in the header file.
+	Clean up the M4 some, especially the inconsistent underquoting in
+	some b4_c_function_def and b4_c_function_decl uses.
+
+2006-12-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Encapsulate the push parser state variables into an M4 macro so the
+	push skeleton doesn't have to list them again for pull mode's yyparse.
+	For push mode, remove yypush_parse's local equivalents of these
+	variables to eliminate unnecessary copying between the two sets at
+	run-time.  This patch also fixes at least a bug related to multiple
+	%initial-action invocations in push mode.
+	* data/push.c (b4_declare_parser_variables): Rename to...
+	(b4_declare_scanner_communication_variables): ... this for clarity and
+	update both uses.
+	(b4_declare_yyparse_variables): Remove and move its contents to the one
+	spot where it was invoked.
+	(b4_declare_parser_state_variables): New macro containing the parser
+	state variables required by push mode.
+	(struct yypstate): Replace all fields but yynew with
+	b4_declare_parser_state_variables.
+	(yystate, yyn, yyresult, yyerrstatus, yytoken, yyss, yyssp, yyvs,
+	yyvsp, yyls, yylsp, yystacksize, yyval, yyloc): For push mode, #define
+	each NAME in this list to yyps->NAME so it can be used in yypush_parse.
+	(yyparse or yypush_parse): For yyparse in pull mode, replace local
+	parser state variable declarations with
+	b4_declare_parser_state_variables.
+	Don't initialize parser state variables when calling yypush_parse since
+	yypstate_new already does that.
+	Invoke the user's initial action only upon the first yypush_parse
+	invocation.
+	Remove all code that copies between the local parser state variables
+	and the yypstate.
+
+2006-12-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/push.c (union yyalloc): Rename yyss, yyvs, and yyls fields to
+	prevent a name collision in a future patch where these names will
+	sometimes be #define'd.
+	(YYSTACK_RELOCATE): Add an argument to select a union yyalloc field
+	since it no longer has the same name as the existing argument.
+	(yyparse or yypush_parse): Update all uses of YYSTACK_RELOCATE.
+
+2006-12-19  Paolo Bonzini  <bonzini@gnu.org>
+	and Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* doc/bison.texinfo (Decl Summary): In the %language entry, mention
+	that the argument is case-insensitive, and there's no `=' here.
+	For the %skeleton entry, mention that %language is better.
+	(Bison Options): Likewise for --language and --skeleton.  Move the
+	--skeleton entry so that the `Tuning the parser' section is sorted
+	alphabetically on long options.
+	(C++ Bison Interface): Don't use the word skeleton.  Don't explain the
+	%language directive in detail here; cross-reference the %language
+	documentation instead.
+	(Calc++ Parser): Use `%require "@value{VERSION}"' rather than
+	`%require "2.3b"' so that the example is always up-to-date.
+	(Table of Symbols): Add entries for %language and %skeleton.
+	* examples/extexi (normalize): Instead of replacing every %require
+	argument with the current Bison version, just substitute for
+	`@value{VERSION}'.  This guarantees that we're testing what actually
+	appears in the documentation.
+	* examples/calc++/Makefile.am ($(calc_extracted)): Use `$(VERSION)'
+	rather than `@VERSION@'.
+
+2006-12-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Reword the %language news a bit, and put it earlier.
+
+	* src/getargs.c (skeleton_arg): Last arg is now location const *.
+	Rewrite to simplify the logic.
+	(language_argmatch): Likewise.
+	(program_name): We now own this var.
+	* src/getargs.h (struct bison_language): Use char[] rather than
+	const char *.
+
+	* doc/bison.texinfo (Decl Summary, Bison Options): Don't claim
+	Java is supported.
+	* src/complain.c (program_name): Remove decl; no longer needed.
+	* src/main.c (program_name): Remove; now belongs to getargs.
+
+2006-12-18  Paolo Bonzini  <bonzini@gnu.org>
+
+	* NEWS: Document %language.
+
+	* data/Makefile.am (dist_pkgdata_DATA): Add c-skel.m4, c++-skel.m4.
+
+	* data/c-skel.m4, data/c++-skel.m4: New files.
+	* data/glr.c: Complain on push parsers.
+
+	* doc/bison.texinfo (C++ Parser Interface): Prefer %language
+	over %skeleton.
+	(Decl Summary): Document %language and %skeleton.
+	(Command line): Document -L.
+
+	* examples/extexi: Rewrite %require directive.
+	* examples/calc++/Makefile.am: Pass VERSION to extexi.
+
+	* src/files.c (compute_exts_from_gc): Look in language structure
+	for .y extension.
+	(compute_file_name_parts): Check whether .tab should be added.
+	* src/getargs.c (valid_languages, skeleton_prio, language_prio):
+	(language, skeleton_arg, language_argmatch): New.
+	(long_options): Add --language.
+	(getargs): Use skeleton_arg, add -L/--language.
+	* src/getargs.h: Include location.h.
+	(struct bison_language, language, skeleton_arg, language_argmatch): New.
+	* src/output.c (prepare): Pick default skeleton from struct language.
+	Don't dispatch C skeletons here.
+	* src/parse-gram.y (PERCENT_LANGUAGE): New.
+	(prologue_declaration): Add "%language" rule, use skeleton_arg.
+	* src/scan-gram.l ("%language"): New rule.
+
+	* tests/calc.at: Test %skeleton and %language.
+	* tests/local.at (AT_SKEL_CC_IF): Look for %language.
+	(AT_GLR_IF): Look for %skeleton "glr.cc".
+	(AT_LALR1_CC_IF, AT_GLR_CC_IF): Rewrite.
+	(AT_YACC_IF): Reject %language.
+
+2006-12-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/symtab.h (struct semantic_type): Remove the tag 'semantic_type',
+	since it wasn't used; only the typedef name 'semantic_type' is needed.
+	Also, omit trailing white space.
+
+	* bootstrap: Sync from coreutils.
+	(gnulib_extra_files): Add build-aux/announce.gen.
+	(slurp): Adjust .gitignore files like .cvsignore files.
+	* build-aux/announce-gen: Remove from CVS, since bootstrap
+	now creates this.
+
+2006-12-16  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Make %push-parser imply %pure-parser.  This fixes several bugs; see
+	<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00148.html>.
+	* src/parse-gram.y (prologue_declaration): For %push-parser, also set
+	pure_parser = true.
+	* data/push.c: Don't bother testing b4_push_if when deciding whether
+	to expand b4_declare_parser_variables globally.
+	(yypush_parse): Likewise in here.
+
+	* data/push.c (yypush_parse): Add b4_parse_param to arguments.
+	(yy_reduce_print): Reformat M4 for readability.
+
+2006-12-15  Bob Rossi  <bob@brasko.net>
+	and Joel Denny  <jdenny@ces.clemson.edu>
+
+	* data/push.c (yypstate): Add typedef, and update all uses of
+	struct yypstate to just yypstate.
+	* tests/calc.at (_AT_DATA_CALC_Y): Update here as well.
+
+2006-12-14  Bob Rossi  <bob@brasko.net>
+
+	* data/push.c (yypush_parse): Declare prototype regardless of
+	%locations option.
+
+2006-12-14  Bob Rossi  <bob@brasko.net>
+
+	* data/push.c (yyparse): Remove the prototype and the #define when in
+	push-parser mode.
+
+2006-12-13  Bob Rossi  <bob@brasko.net>
+
+	* data/push.c (yypstate_init): Rename to...
+	(yypstate_new): ... this and use b4_c_function_def.
+	(yypstate_delete): New.
+	(yypush_parse): Change parameters yynval and yynlloc to be const.
+	* tests/calc.at (_AT_DATA_CALC_Y): Use new yypstate_new and
+	yypstate_delete functions.
+
+2006-12-13  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* configure.ac (AC_PREREQ): Require Autoconf 2.61 because of our
+	strange test case titles.  Reported by Bob Rossi.
+
+2006-12-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* TODO: Add pointer to Sylvain Schmitz's work on static detection
+	of potential ambiguities in GLR grammers.
+
+2006-12-12  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/testsuite.at (AT_CHECK): When checking if $1 starts with
+	`bison ', use m4_index instead of m4_substr since chopping up a string
+	containing M4-special characters causes problems here.
+
+	Fix a couple of bugs related to special characters in user-specified
+	file names, and make it easier for skeletons to compute output file
+	names with the same file name prefix as Bison-computed output file
+	names.
+	* data/glr.cc, data/push.c, data/yacc.c: In @output, use
+	b4_parser_file_name and b4_spec_defines_file instead of
+	@output_parser_name@ and @output_header_name@, which are now redundant.
+	* data/glr.c, data/lalr1.cc: Likewise.  Also, in header #include's, use
+	b4_parser_file_name, b4_spec_defines_file, and the new
+	@basename(FILENAME@) instead of @output_parser_name@ and
+	@output_header_name@, which inappropriately escaped the file names as
+	C string literals.
+	* src/files.c (all_but_ext): Remove static qualifier.
+	(compute_output_file_names): Move `free (all_but_ext)' to...
+	(output_file_names_free): ... here since all_but_ext is needed later.
+	* src/files.h (all_but_ext): Extern.
+	* src/muscle_tab.h (MUSCLE_INSERT_STRING_RAW): New macro that does
+	exactly what MUSCLE_INSERT_STRING used to do.
+	(MUSCLE_INSERT_STRING): Use MUSCLE_OBSTACK_SGROW so that M4-special
+	characters are escaped properly.
+	* src/output.c (prepare): Define muscle file_name_all_but_ext as
+	all_but_ext.
+	For pkgdatadir muscle, maintain previous functionality by using
+	MUSCLE_INSERT_STRING_RAW instead of MUSCLE_INSERT_STRING.  The problem
+	is that b4_pkgdatadir is used inside m4_include in the skeletons, so
+	digraphs would never be expanded.  Hopefully no one has M4-special
+	characters in his Bison installation path.
+	* src/scan-skel.l: Don't parse @output_header_name@ and
+	@output_parser_name@ anymore since they're now redundant.
+	In @output, use decode_at_digraphs.
+	Parse a new @basename command that invokes last_component.
+	(decode_at_digraphs): New.
+	(BASE_QPUTS): Remove unused.
+	* tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): New macro.
+	(Output file name): New tests.
+
+2006-12-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Warn about output files that are generated by the skeletons and that
+	conflict with other output files.
+	* data/glr.c: Don't generate the header file here when glr.cc does.
+	* src/files.c (file_names, file_names_count): New static globals.
+	(compute_output_file_names): Invoke output_file_name_check for files
+	not generated by the skeletons and remove existing checks.
+	(output_file_name_check): New function that warns about conflicting
+	output file names.
+	(output_file_names_free): Free file_names.
+	* src/files.h (output_file_name_check): Declare.
+	* src/scan-skel.l: Invoke output_file_name_check for files generated by
+	the skeletons.
+	* tests/output.at (AT_CHECK_CONFLICTING_OUTPUT): New.
+	(Conflicting output files): New tests.
+
+2006-12-09  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+	* doc/bison.texinfo: Fix a couple of typos.
+
+2006-12-08  Bob Rossi  <bob@brasko.net>
+
+	* data/push.c: (yypvarsinit, yypvars, struct yypvars, yypushparse):
+	Rename to...
+	(yypstate_init, yypstate, struct yypstate, yypush_parse): ... these and
+	update all uses.
+	(b4_yyssa, b4_yyerror_range, yypstate_init): Rename pv to yyps.
+	(yypush_parse): Rename yypvars argument to yyps and remove redundant
+	local pv.
+	(yypstate_init, yypush_parse): Declare in Bison-generated header file.
+	* tests/calc.at (_AT_DATA_CALC_Y): Use newly named functions.
+
+2006-12-07  Bob Rossi  <bob@brasko.net>
+	and Joel Denny  <jdenny@ces.clemson.edu>
+
+	* data/push.c (yypvarsinit): Change return type from void* to struct
+	yypvars*. No longer cast to void* on return.
+	(struct yypvars): Remove yylen since it need not be remembered between
+	yypushparse invocations.
+	(yypushparse): Don't copy between yylen and pv->yylen.
+
+2006-12-05  Bob Rossi  <bob@brasko.net>
+
+	* data/push.c (yychar_set, yylval_set, yylloc_set): Delete.
+	(yypushparse): Add yynchar, yynlval, yynlloc parameters.
+	(b4_declare_parser_variables): Do not declare yynerrs for push mode.
+	(struct yypvars): Remove b4_declare_parser_variables.
+	(yypvarsinit): Remove init code for removed variables.
+	(global scope): Do not declare b4_declare_parser_variables if
+	push or pure mode.
+	(yypushparse): Add b4_declare_parser_variables.
+	Init new local variables, and remove init code for removed
+	yypvars variables.
+	(yyparse): Delete.
+	* tests/calc.at (_AT_DATA_CALC_Y): Call yypushparse for push mode
+	and yyparse for other modes.
+	(AT_CHECK_CALC_LALR): Added '%skeleton "push.c"' for push tests.
+	* tests/local.at (AT_PUSH_IF, AT_PURE_OR_PUSH_IF): Added.
+	(AT_YYERROR_SEES_LOC_IF): push-parser makes this false.
+	(AT_PURE_LEX_IF): True if pure or push parser.
+
+2006-12-05  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Document Yacc prologue alternatives and default %destructor's and
+	%printer's as experimental.  Don't mention Java yet.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00002.html>.
+	* NEWS (2.3a+): Say they're experimental.  Remove any mention of Java.
+	(2.3a): Annotate this entry to say the old forms of these features were
+	also experimental.
+	* doc/bison.texinfo (Prologue Alternatives, Freeing Discarded Symbols,
+	Table of Symbols): Say they're experimental.  Comment out any mention
+	of Java (we'll want this back eventually).
+
+2006-12-01  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Support a file name argument to %defines.  Deprecate `=' in
+	%file-prefix, %name-prefix, and %output.  Discussed at
+	<http://lists.gnu.org/archive/html/help-bison/2006-09/msg00001.html>.
+	* NEWS (2.3a+): Mention.
+	* doc/bison.texinfo (Decl Summary, Table of Symbols): Add entry for new
+	form of %defines, and remove `=' from entries for %file-prefix,
+	%name-prefix, and %output.
+	* src/parse-gram.y (prologue_declaration): Implement.
+	* tests/calc.at (Simple LALR Calculator, Simple GLR Calculator, Simple
+	LALR1 C++ Calculator, Simple GLR C++ Calculator): Remove the `=' from
+	all but one occurrence of %name-prefix.
+	* tests/headers.at (export YYLTYPE): Remove the `=' from %name-prefix.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Likewise.
+	* tests/output.at (AT_CHECK_OUTPUT): Remove the `=' from all but one
+	occurrence of each of %file-prefix and %output.  Add check for %defines
+	with argument.
+	* tests/reduce.at (Useless Terminals, Useless Nonterminals,
+	Useless Rules, Reduced Automaton, Underivable Rules, Empty Language):
+	Remove the `=' from %output.
+
+2006-11-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't escape $ in test case titles since Autoconf 2.61 now does that
+	correctly.
+	* tests/actions.at (Default %printer and %destructor are not for error
+	or $undefined): Here.
+	(Default %printer and %destructor are not for $accept): Here.
+	* tests/input.at (Invalid $n and @n): Here.
+
+2006-11-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Rename <!> to <>.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00039.html>.
+	* NEWS (2.3a+): Update.
+	* doc/bison.texinfo (Freeing Discarded Symbols, Table of Symbols):
+	Update.
+	* src/parse-gram.y (TYPE_TAG_NONE, generic_symlist_item): Implement.
+	* src/scan-gram.l (INITIAL): Implement.
+	* src/symlist.c (symbol_list_default_tagless_new): Update comment.
+	* src/symlist.h (symbol_list, symbol_list_default_tagless_new): Update
+	comment.
+	* tests/actions.at (Default tagless %printer and %destructor,
+	Default tagged and per-type %printer and %destructor,
+	Default %printer and %destructor are not for error or $undefined,
+	Default %printer and %destructor are not for $accept,
+	Default %printer and %destructor for mid-rule values): Update.
+	* tests/input.at (Default %printer and %destructor redeclared,
+	Unused values with default %destructor): Update.
+
+2006-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't let %prec take a nonterminal.
+	* src/reader.c (grammar_current_rule_prec_set): Make the %prec symbol a
+	token.
+	* tests/input.at (%prec takes a token): New test checking that %prec
+	won't take a nonterminal.
+
+2006-11-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/testsuite.at (AT_CHECK): Don't miss an exit value of 0 because
+	it was double-quoted.
+	* src/Makefile.am (YACC): Use --warnings=all,error so that Bison's own
+	grammar is maintained with Bison's highest standards.
+	* src/getargs.c: Fix some typos in Doxygen comments.
+
+2006-11-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix memory leaks in scanners generated by at least Flex 2.5.9 and
+	later.  Reported by Paul Eggert in
+	<http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00014.html>.
+	* src/flex-scanner.h (yylex_destroy): Define for Flex before 2.5.9.
+	* src/scan-code.l (translate_action): Don't bother invoking
+	yy_delete_buffer (YY_CURRENT_BUFFER) before creating the first buffer.
+	(code_scanner_free): Instead of invoking
+	yy_delete_buffer (YY_CURRENT_BUFFER) directly, invoke yylex_destroy,
+	which frees more.
+	* src/scan-gram.l (gram_scanner_free): Likewise.
+	* src/scan-skel.l (scan_skel): Likewise.
+
+2006-11-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/files.c (tr): Change return type to void.
+	* src/muscle_tab.c (muscle_insert): Free storage in case muscle_grow
+	has been called previously for the same key.
+	(muscle_find): Return storage instead of value so that
+	--enable-gcc-warnings doesn't produce warnings that the return discards
+	const.  aver that the value and storage are the same since storage
+	could potentially be NULL when value is not.
+	* tests/testsuite.at (AT_CHECK): Treat an unspecified exit value the
+	same as 0.
+
+2006-11-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap.conf (excluded_files): Exclude m4/codeset.m4 (undoing
+	the earlier change today), m4/intl.m4, m4/intldir.m4.  This gives
+	us a slightly cleaner distribution, and also works.
+	* m4/.cvsignore: Add inline.m4, wint_t.m4 to accommodate recent
+	gnulib changes.
+
+2006-11-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+	and Paul Eggert  <eggert@cs.ucla.edu>
+
+	Don't let Bison leak memory except when it complains.
+	* src/files.h (parser_file_name, spec_verbose_file, spec_graph_file):
+	(spec_defines_file, dir_prefix): Now char *, not const char *,
+	since they are freed.
+	* src/files.c: Likewise.
+	(all_but_ext, all_but_tab_ext, src_extension, header_extension):
+	Likewise.
+	(tr): Now operates in-place.  All uses changed.
+	(compute_exts_from_gf, compute_exts_from_src): Don't leak temporary
+	values.
+	(compute_file_name_parts, compute_output_file_names): Don't store
+	read-only data in variables that will be freed.
+	(compute_output_file_names): Free all_but_ext, all_but_tab_ext,
+	src_extension, and header_extension.
+	(output_file_names_free): New public function to free
+	spec_verbose_file, spec_graph_file, spec_defines_file,
+	parser_file_name, and dir_prefix.
+	* src/getargs.c (getargs): Don't store read-only data in variables that
+	will be freed.
+	* src/main.c (main): Invoke output_file_names_free, code_scanner_free
+	(which previously existed but was unused), and quotearg_free.
+	* src/muscle_tab.h (muscle_insert): value arg is now a `char const *'.
+	* src/muscle_tab.c: Likewise.
+	(muscle_entry): Make the value char const *,
+	and add a new storage member that is char * and can be freed.
+	(muscle_entry_free): New private function.
+	(muscle_init): Use it instead of free.
+	(muscle_insert, muscle_grow): Update and use new storage member.
+	(muscle_code_grow): Free the string passed to muscle_grow
+	since it's not needed anymore.
+	* src/parse-gram.y (%union): Make `chars' member a `char const *', and
+	add a new `char *code' member.
+	("{...}"): Declare semantic type as code.
+	* src/scan-code.h (translate_rule_action):
+	(translate_symbol_action, translate_code, translate_action): Return
+	`char const *' rather than `char *' since external code should not free
+	these strings.
+	* src/scan-code.l: Likewise.
+	* src/scan-gram.l (<SC_BRACED_CODE>): Use val->code for BRACED_CODE,
+	which is "{...}" in the parser.
+	* tests/Makefile.am (maintainer-check-valgrind): Set
+	VALGRIND_OPTS='--leak-check=full --show-reacheable=yes' before invoking
+	Valgrind.
+	* tests/calc.at (_AT_DATA_CALC_Y): fclose the FILE* so Valgrind doesn't
+	complain.
+	* tests/testsuite.at (AT_CHECK): Redefine so that running Bison and
+	expecting a non-zero exit status sets --leak-check=summary and
+	--show-reachable=no for Valgrind.  Bison unabashedly leaks memory in
+	this case, and we don't want to hear about it.
+
+2006-11-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap (runtime-po/Makevars): Derive from po/Makevars
+	instead of from the template, to simplify configuration a bit.
+	* bootstrap.conf (excluded_files): Don't exclude m4/codeset.m4
+	and m4/wint_t.m4, as they are needed with the latest gnulib.
+
+2006-10-31  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Disable unset/unused mid-rule value warnings by default, and recognize
+	--warnings=midrule-values to enable them.  Discussed starting at
+	<http://lists.gnu.org/archive/html/help-bison/2006-10/msg00030.html>.
+	* NEWS (2.3a+): Mention.
+	* src/getargs.c, src/getargs.h (warnings_args, warnings_types, enum
+	warnings): Add entry for midrule-values subargument.
+	* src/reader.c (symbol_should_be_used): Don't return true just because
+	the value is a set/used mid-rule value unless
+	--warnings=midrule-values was specified.
+	* tests/input.at (Unused values, Unused values before symbol
+	declarations): Run tests with and without --warnings=midrule-values.
+
+	* src/reader.c (check_and_convert_grammar): Use symbol_list_free rather
+	than LIST_FREE directly.
+
+2006-10-31  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Finish implementing --warnings=error, which should not be implied by
+	--warnings=all (or by its synonyms -W and --warnings without
+	subarguments).
+	* src/complain.c (set_warning_issued): New function to report that
+	warnings are being treated as errors and to record an error if so.
+	Invoke...
+	(warn_at, warn): ... here.
+	* src/getargs.c (warnings_args, warnings_types): Reorder so that
+	"error - warnings are errors" does not appear above "all - all of the
+	above".
+	(getargs): For -W and --warnings without subarguments, don't let
+	FLAGS_ARGMATCH set warnings_error in warnings_flag.
+	* src/getargs.h (enum warnings): Unset warnings_error in warnings_all.
+
+2006-10-31  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/getargs.c (flags_argmatch): Don't cause segmentation fault for
+	empty subargument list.  For example: `bison  --warnings=  parser.y'.
+
+2006-10-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/push.c, data/yacc.c: Make sure there's a newline at the end of
+	the parser header file so that gcc doesn't warn.
+
+2006-10-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Split the default %destructor/%printer into two kinds: <*> and <!>.
+	Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00060.html>.
+	* NEWS (2.3a+): Mention.
+	* doc/bison.texinfo (Freeing Discarded Symbols): Document this and the
+	previous change today related to mid-rules.
+	(Table of Symbols): Remove %symbol-default and add <*> and <!>.
+	* src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): Remove.
+	(TYPE_TAG_ANY): Add as <*>.
+	(TYPE_TAG_NONE): Add as <!>.
+	(generic_symlist_item): Remove RHS for %symbol-default and add RHS's
+	for <*> and <!>.
+	* src/scan-gram.l (PERCENT_SYMBOL_DEFAULT): Remove.
+	(TYPE_TAG_ANY, TYPE_TAG_NONE): Add.
+	* src/symlist.c (symbol_list_default_new): Split into tagged and
+	tagless versions.
+	(symbol_list_destructor_set, symbol_list_printer_set): Split
+	SYMLIST_DEFAULT case into SYMLIST_DEFAULT_TAGGED and
+	SYMLIST_DEFAULT_TAGLESS.
+	* src/symlist.h: Update symbol_list_default*_new prototypes.
+	(symbol_list.content_type): Split enum value SYMLIST_DEFAULT into
+	SYMLIST_DEFAULT_TAGGED and SYMLIST_DEFAULT_TAGLESS.
+	* src/symtab.c (default_destructor, default_destructor_location,
+	default_printer, default_printer_location): Split each into tagged and
+	tagless versions.
+	(symbol_destructor_get, symbol_destructor_location_get,
+	symbol_printer_get, symbol_printer_location_get): Implement tagged
+	default and tagless default cases.
+	(default_destructor_set, default_printer_set): Split each into tagged
+	and tagless versions.
+	* src/symtab.h: Update prototypes.
+	* tests/actions.at (Default %printer and %destructor): Rename to...
+	(Default tagless %printer and %destructor): ... this, and extend.
+	(Per-type %printer and %destructor): Rename to...
+	(Default tagged and per-type %printer and %destructor): ... this, and
+	extend.
+	(Default %printer and %destructor for user-defined end token): Extend.
+	(Default %printer and %destructor are not for error or $undefined):
+	Update.
+	(Default %printer and %destructor are not for $accept): Update.
+	(Default %printer and %destructor for mid-rule values): Extend.
+	* tests/input.at (Default %printer and %destructor redeclared): Extend.
+	(Unused values with default %destructor): Extend.
+
+2006-10-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't apply the default %destructor/%printer to an unreferenced midrule
+	value.  Mentioned at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00104.html>.
+	* src/symtab.c (dummy_symbol_get): Name all dummy symbols initially
+	like $@n instead of just @n so that the default %destructor/%printer
+	logic doesn't see them as user-defined symbols.
+	(symbol_is_dummy): Check for both forms of the name.
+	* src/reader.c (packgram): Remove the `$' from each midrule symbol
+	name for which the midrule value is referenced in any action.
+	* tests/actions.at (Default %printer and %destructor for mid-rule
+	values): New test.
+	* tests/regression.at (Rule Line Numbers, Web2c Report): Update output
+	for change to dummy symbol names.
+
+2006-10-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Warn about unset midrule $$ if the corresponding $n is used.
+	* src/reader.c (symbol_should_be_used): Check midrule parent rule for
+	$n usage.
+	(packgram): Before invoking grammar_rule_check on any rule, make sure
+	all actions have already been scanned in order to set `used' flags.
+	Otherwise, checking that a midrule's $$ is set will not always work
+	properly because the midrule check must forward-reference the midrule's
+	parent rule.
+	* tests/input.at (AT_CHECK_UNUSED_VALUES): Extend to check the new
+	warning.
+
+2006-10-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	More improvements to the documentation of the prologue alternatives:
+	* NEWS (2.3a+): Mention the new `Prologue Alternatives' section in the
+	Bison manual.
+	* doc/bison.texinfo (Prologue Alternatives): Correct some errors.  Add
+	some text to clarify the relative importance of the new directives and
+	to show how these directives may be viewed as code labels.
+
+2006-10-16  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Similar to the recently removed %before-header, add %code-top as the
+	alternative to the pre-prologue.  Mentioned at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-10/msg00063.html>.
+	Also, let the prologue alternatives appear in the grammar section.
+	* src/parse-gram.y (PERCENT_CODE_TOP): New token.
+	(prologue_declaration): Move the existing prologue alternatives to...
+	(grammar_declaration): ... here and add %code-top.
+	* src/scan-gram.l (PERCENT_CODE_TOP): New token.
+
+	Clean up and extend documentation for the prologue alternatives.
+	* NEWS (2.3a+): Describe prologue alternatives.
+	* doc/bison.texinfo (Prologue): Move discussion of prologue
+	alternatives to...
+	(Prologue Alternatives): ... this new section, and extend it to discuss
+	all 4 directives in detail.
+	(Table of Symbols): Clean up discussion of prologue alternatives and
+	add %code-top.
+
+2006-10-16  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	DJGPP specific issues.
+
+	* djgpp/config.bat: config.hin has been moved to lib. Adjust
+	config.bat accordingly.
+	* djgpp/config.sed: Adjust config.sed for the use of autoconf 2.60.
+	* djgpp/config.site: Likewise.
+
+2006-10-16  Paolo Bonzini  <bonzini@gnu.org>
+
+	Replace %*-header with %provides, %requires, %code.  See discussion at
+	http://lists.gnu.org/archive/html/bison-patches/2006-10/msg00002.html
+
+	* data/bison.m4 (b4_user_requires, b4_user_provides): New.
+	(b4_user_start_header): Remove.
+	* data/glr.c: Use new macros instead of b4_*start_header
+	and b4_*end_header.
+	* data/glr.cc: Likewise.
+	* data/lalr1.cc: Likewise.
+	* data/push.c: Likewise.
+	* data/yacc.c: Likewise.
+
+	* doc/bison.texinfo: Remove %before-header, rename
+	%{start,end,after}-header to %requires, %provides, %code.
+
+	* src/parse-gram.y: Likewise (also rename token names accordingly).
+	* src/scan-gram.l: Likewise.
+	* tests/actions.at: Likewise.
+
+2006-10-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* lib/Makefile.am (AM_CFLAGS): Remove $(WERROR_CFLAGS).
+	Problem reported by Joel E. Denny.
+
+2006-10-14  Jim Meyering  <jim@meyering.net>
+
+	(Sync from coreutils.)
+	Work also when the working directory (with e.g. coreutils sources)
+	is version controlled with git, rather than CVS.
+	* bootstrap (CVS_only_file): Test for the existence of README-cvs,
+	rather than CVS.
+	In messages and comments, say e.g., "checked-out sources",
+	rather than "CVS sources".
+	(version_controlled_file): New function.  Work for git as well as
+	for CVS.  Don't use grep's -q option.
+	(slurp): Call it here, in place of CVS-specific code.
+
+2006-10-14  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix testsuite for ./configure --enable-gcc-warnings:
+	* configure.ac (gcc-warnings): Move -Wall before -Wno-sign-compare.
+	Otherwise, gcc 4.1.0 (at least) warns about sign comparisons in
+	__AT_CHECK_PRINTER_AND_DESTRUCTOR in tests/actions.at.
+	* test/input.at (Torturing the Scanner): #include <stdlib.h> for abort.
+	* test/regression.at (Diagnostic that expects two alternatives):
+	Likewise.
+
+2006-10-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap.conf (gnulib_modules): Add config-h.
+	* djgpp/subpipe.c: Include <config.h> unconditionally; don't
+	worry about HAVE_CONFIG_H.
+	* lib/abitset.c: Likewise.
+	* lib/bitset.c: Likewise.
+	* lib/bitset_stats.c: Likewise.
+	* lib/bitsetv-print.c: Likewise.
+	* lib/bitsetv.c: Likewise.
+	* lib/ebitset.c: Likewise.
+	* lib/get-errno.c: Likewise.
+	* lib/lbitset.c: Likewise.
+	* lib/subpipe.c: Likewise.
+	* lib/timevar.c: Likewise.
+	* lib/vbitset.c: Likewise.
+	* lib/bitset.c: Include "bitset.h" first, to test interface.
+	* lib/bitset_stats.c: Include "bitset_stats.h" first.
+	* lib/bitsetv-print.c: Include "bitsetv-print.h" first.
+	* lib/bitsetv.c: Include "bitsetv.h" first.
+	* lib/get-errno.c: Include "get-errno.h" first.
+	* m4/.cvsignore: Add config-h.m4.
+	* tests/actions.at (Default %printer and %destructor for ...):
+	Adjust expected line numbers in output to reflect removal of #if
+	HAVE_CONFIG_H lines.
+	* tests/glr-regression.at (Missed %merge type warnings when ...):
+	Likewise.
+	* tests/regression.at (Braced code in declaration in rules section):
+	Likewise.
+	* tests/atlocal.in (CPPFLAGS): Don't define HAVE_CONFIG_H.
+	* tests/local.at (AT_DATA_GRAMMAR_PROLOGUE):
+	Include <config.h> unconditionally.
+
+	* bootstrap: Sync from coreutils, as follows:
+
+	2006-10-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap (symlink_to_gnulib): Fix bug: the dot_dots shell
+	variable was sometimes used without being initialized.  This
+	messed up the installation of the INSTALL file in some cases.
+
+	2006-10-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap (usage, main program, symlink_to_gnulib): Add option
+	--copy.  Inspired by a suggestion from Bruno Haible.
+
+	2006-10-03  Jim Meyering  <jim@meyering.net>
+
+	* bootstrap: Undo last change to this file, since now gnulib-tool
+	sticks with the automake default in generating dependencies.
+
+2006-10-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* configure.ac: Use AC_PROG_CC_STDC; this is more modern than
+	the old AC_PROG_CC / AM_PROG_CC_STDC combination.
+
+	* doc/bison.1: Add copyright notice.
+
+	* data/glr.c: Don't include <stdarg.h>; not used.
+
+	* NEWS: The -g and --graph options now output graphs in Graphviz
+	DOT format, not VCG format.
+	* doc/bison.1: Likewise.
+	* doc/bison.texinfo (Understanding, Bison Options): Likewise.
+	* THANKS: Add Satya Kiran Popuri, who proposed the initial version
+	of this change in
+	<http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00158.html>.
+	* TODO: Remove Graphviz entry.
+	* src/Makefile.am (bison_SOURCES): Add graphviz.c and graphviz.h;
+	remove vcg.c, vcg.h, vcg_defaults.h.
+	* src/vcg.c, src/vcg.h, src/vcg_defaults.h: Remove.
+	* src/graphviz.c, src/graphviz.h: New files.
+	* src/files.c (compute_output_file_names): Output .dot, not .vcg.
+	* src/files.h: Make comment more generic.
+	* src/main.c (main): Likewise.
+	* src/print_graph.h: Likewise.
+	* src/getargs.c (usage): Make usage description more generic.
+	* src/print_graph.c: Include graphviz.h rather than vcg.h.
+	(static_graph, fgraph): Remove.  All uses changed to pass
+	arguments instead of sharing a static var.
+	(print_core, print_actions, print_state, print_graph):
+	Output graphviz format rather than VCG format.
+	* tests/.cvsignore: Remove *.vcg; add *.dot.
+	* tests/output.at: Expect *.dot files, not *.vcg files.
+
+	* data/Makefile.am (dist_pkgdata_DATA): Add bison.m4; this
+	accommodates the 2006-10-08 change.
+
+2006-10-11  Bob Rossi  <bob@brasko.net>
+
+	* data/push.c (yypushparse, yypvarsinit, yypvars): Wrap in b4_push_if.
+	(b4_yyssa, b4_yyerror_range): New macros.
+	(struct yypvars): Remove yyssa_ptr and yyerror_range_ptr fields.
+	(yypvarsinit): Remove init of removed fields.
+	(yypushparse): Remove use of removed fields; use new macros instead.
+
+2006-10-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/push.c (yypushparse): Fix memory leak if yymsg is malloced
+	in a push parser.  Reindent slightly to match yacc.c better.
+
+2006-10-11  Bob Rossi  <bob@brasko.net>
+
+	* data/push.c (struct yypvars): Remove yymsgbuf, yymsgbuf_ptr, yymsg,
+	yymsg_alloc fields.
+	(yypvarsinit, yypushparse): Remove init of removed fields.
+	(yypushparse): Use yymsgbuf instead of yymsgbuf_ptr.
+
+2006-10-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* THANKS: Add Paolo Bonzini and Bob Rossi.
+
+2006-10-08  Paolo Bonzini  <bonzini@gnu.org>
+
+	* data/c.m4 (b4_copyright, b4_epilogue, b4_location_initial_column,
+	b4_location_initial_line, p4_parse_param, b4_ints_in, b4_flag_if,
+	b4_define_flag_if and uses, b4_basename, b4_syncline, b4_user_code,
+	b4_define_user_cde and uses): Remove.
+	(b4_comment, b4_prefix, b4_sync_start): New.
+	* data/bison.m4: New file, with most of the content removed from c.m4.
+	* src/muscle_tab.h: Use "do {...} while(0)" throughout.
+	* src/output.c (output_skeleton): Pass bison.m4.
+	(prepare): Pass glr_flag and nondeterministic_flag.  Pass prefix
+	only if specified.
+
+2006-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix test failure reported by Tom Lane in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-10/msg00000.html>
+	and try to make such failures easier to catch in the future.
+	* data/glr.c (YYTRANSLATE): Don't check for nonpositive arg;
+	that's now the caller's responsibility.
+	(yyprocessOneStack, yyrecoverSyntaxError, yyparse):
+	Set yychar = YYEOF if it's negative.
+	* tests/actions.at (yylex): Abort if asked to read past EOF.
+	* tests/conflicts.at (yylex): Likewise.
+	* tests/cxx-type.at (yylex): Likewise.
+	* tests/glr-regression.at (yylex): Likewise.
+	* tests/input.at (yylex): Likewise.
+	* tests/regression.at (yylex): Likewise.
+	* tests/torture.at (yylex): Likewise.
+
+2006-10-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix problems with translating English-language diagnostics.
+	* bootstrap: Fix bug introduced in recent bootstrap changes, with
+	respect to bison-runtime pot generation.  The YY_ stuff
+	wasn't being captured.
+	* bootstrap.conf (XGETTEXT_OPTIONS_RUNTIME): New var.
+	* po/POTFILES.in: Add src/location.c, src/scan-code.l.
+	* runtime-po/POTFILES.in: Add data/push.c.
+
+2006-09-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Merge bootstrap changes from coreutils.
+
+	2006-09-28  Jim Meyering  <jim@meyering.net>
+
+	Automatically generated dependencies are important even
+	when all of the sources in a directory come from gnulib.
+	* bootstrap (gnulib_tool): Remove the "no-dependencies" automake
+	option that gnulib-tool adds to what becomes our lib/gnulib.mk.
+
+	2006-09-23  Jim Meyering  <jim@meyering.net>
+
+	* bootstrap (gnulib_tool_options): Add "--local-dir gl".
+
+	2006-09-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap: Add support for --force.
+	(usage): New function.  Describe usage less tersely.
+	(CVS_only_file): New var.
+
+2006-09-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/push.c (YYPUSH_MORE): Make it an enum instead.
+	(yypushparse): Use YYPUSH_MORE instead of the mystery constant.
+	Adjust white space and comments to match GNU style better.
+
+2006-09-20  Bob Rossi  <bob@brasko.net>
+
+	* data/push.c (yyresult_get): Remove function.
+	(YYPUSH_MORE): Add #define.
+	(yypushparse): Modify return value.
+
+2006-09-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* stamp-h.in: Remove; no longer needed.
+	* .cvsignore: Replace autom4te.cache and config.cache with *.cache.
+	Remove config.h, config.hin, intl (no longer created).
+	* lib/.cvsignore: Add config.h, config.hin, configmake.h, inttypes.h,
+	stamp-h1.
+
+	Sync bootstrap from coreutils, as follows:
+
+	2006-09-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap (symlink_to_gnulib): New function.
+	(cp_mark_as_generated): Use it, to prefer symlinks-to-gnulib
+	to copies-of-gnulib.
+	(cp_mark_as_generated, slurp, gnulib_files):
+	Avoid making a copy if it's the same as the old version.
+	(gnulib_files): Add support for this variable (used by Bison).
+
+2006-09-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/getargs.c (usage): Rework to use conventions similar to
+	coreutils, to make translation a bit easier and the code a bit
+	smaller.  Problem reported by Tim Van Holder.
+
+2006-09-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Use some of gnulib's new modules, taken from coreutils.
+
+	* bootstrap: Sync from coreutils, except add support for gnulib_files.
+	* bootstrap.conf: New file.
+	(gnulib_modules): Add configmake, inttypes, unistd.
+	(XGETTEXT_OPTIONS): Add complain, complain_at,
+	fatal, fatal_at, warn, warn_at, unexpected_end.
+	* configure.ac (AC_CONFIG_HEADERS): config.h is now in lib, not here.
+	(gl_USE_SYSTEM_EXTENSIONS): Remove; gl_EARLY now does this.
+	(gl_EARLY): Add.
+	(AM_STDBOOL_H): Remove; gl_INIT now dows this.
+	(gl_INIT): Add
+	(GNULIB_AUTOCONF_SNIPPET): Remove.
+	(AM_GNU_GETTEXT): Add; require formatstring macros since that's
+	the pickiest.
+	* lib/.cvsignore: Add inttypes_.h.
+	* lib/Makefile.am: Include gnulib.mk first so we can append to it.
+	(AM_CFLAGS): Add WERROR_CFLAGS, to be more like coreutils.
+	(BUILT_SOURCES, EXTRA_DIST, MOSTLYCLEANFILES): Remove
+	no-longer-necessary initializations.
+	(lib_SOURCES): Remove, replacing by libbison_a_SOURCES.
+	* lib/subpipe.c: Include <unistd.h> unconditionally, now that we
+	use the unistd module.
+	* src/system.h: Likewise.
+	* m4/.cvsignore: Remove *_gl.m4, gnulib.m4, inttypes_h.m4, uintmax_t.m4,
+	ulonglong.m4.  Add gettext.m4, gnulib-cache.m4, gnulib-comp.m4,
+	gnulib-tool.m4, inttypes-h.m4, inttypes-pri.m4, inttypes.m4.
+	* src/Makefile.am (DEFS): Remove, since configmake does this for us.
+	(AM_CPPFLAGS): Remove -I../lib, since Automake does that for us.
+	* src/system.h: Include inttypes.h unconditionally, now that we
+	use the inttypes module.  Don't bother to include stdint.h, since
+	inttypes.h now does that for us.
+	(LOCALEDIR): Remove, now that we use the configmake module.
+	* src/getargs.c: Include configmake.h.
+	* src/main.c: Likewise.
+	* src/output.c: Likewise.
+	* tests/atlocal.in (CPPFLAGS): Include from $abs_top_builddir/lib,
+	not from $abs_top_builddir, since config.h moved.
+
+
+	Port to GCC 2.95.  First two problems reported by Michael Deutschmann in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-09/msg00018.html>.
+
+	* src/parse-gram.y (symbol_declaration): Don't put statements
+	before declarations; it's not portable to C89.
+	* src/scan-code.l (handle_action_at): Likewise.
+
+	* src/scan-code.l: Always initialize braces_level; the old code
+	left it uninitialized and therefore had undefined behavior.
+
+	Don't attempt to redefine 'assert', since it runs afoul of
+	systems where standard headers (mistakenly) include <assert.h>.
+	Instead, define and use our own alternative, called 'aver'.
+	* src/reader.c: Don't include assert.h, since we no longer
+	use assert.
+	* src/scan-code.l: Likewise.
+	* src/system.h (assert): Remove, replacing with....
+	(aver): New function, taking a bool arg.  All uses changed.
+	* src/tables.c (pack_vector): Ensure that aver arg is bool,
+	not merely an integer.
+
+2006-09-15  Bob Rossi  <bob@brasko.net>
+
+	Add support for push parsing.  Based on the original work of
+	Odd Arild Olsen <oao@fibula.no>.
+	* data/Makefile.am (dist_pkgdata_DATA): Add push.c.
+	* data/c.m4 (YYPUSH): New.
+	(b4_push_if): New macro.  Use it instead of #ifdef YYPUSH.
+	* data/push.c: New file.
+	* src/getargs.c (push_parser): New var.
+	* src/getargs.h (push_parser): New declaration.
+	* src/output.c (prepare): Add macro insertion of `push_flag'.
+	* src/parse-gram.y (PERCENT_PUSH_PARSER): New token.
+	(prologue_declaration): Parse %push-parser.
+	* src/scan-gram.l: Scan new PERCENT_PUSH_PARSER token.
+	* tests/calc.at (_AT_CHECK_CALC_ERROR): Add "Return" and "Now" to
+	list of removed lines from the traces observed.
+	(AT_CHECK_CALC_LALR): Added push parser tests.
+
+2006-09-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 2.3a.
+	* configure.ac (AC_INIT): Likewise.
+
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Remove
+	"#define YYSTYPE int" that caused "make maintainer-check" to fail
+	due to header ordering dependencies.  I don't know why the #define
+	was there.
+
+	Fix glr.cc and lalr1.cc's use of YYDEBUG so that there's zero
+	runtime cost when YYDEBUG is not defined, and so that some tests
+	that used to fail now work.  Problem and initial suggestion by
+	Paolo Bonzini.
+	* data/c++.m4 (b4_parse_param_cons): Omit leading ','.
+	* data/glr.cc (b4_parser_class_name):
+	Initialize yycdebug_ only if YYDEBUG.  Also, initialize yydebug_.
+	(debug_level, set_debug_level): Affect yydebug_, not ::yydebug.
+	(yydebug_) [YYDEBUG]: New member.
+	(yycdebug_): Now defined only if YYDEBUG.
+	* data/lalr1.cc (yydebug_, yycdebug_): Now defined only if YYDEBUG.
+	(YYCDEBUG) [!YYDEBUG]: Don't use yydebug_ and yycdebug_.
+	(b4_parser_class_name): Initialize yydebug_ and yycdebug_ only
+	if YYYDEBUG.
+	(debug_stream, set_debug_stream, debug_level, set_debug_level):
+	Define only if YYDEBUG.
+	* tests/calc.at (_AT_DATA_CALC_Y) [!YYDEBUG]: Omit call to
+	set_debug_level.
+	* tests/regression.at (_AT_DATA_DANCER_Y) [!YYDEBUG]: Likewise.
+	* tests/calc.at (AT_CHECK_CALC_GLR_CC): Uncomment calls to
+	AT_CHECK_CALC_GLR_CC that are working now.
+
+2006-09-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.cc (YYERROR_VERBOSE, YYTOKEN_TABLE): Remove.
+	We don't need them in glr.cc, and glr.c defines them.
+	Defining YYERROR_VERBOSE to 0 here breaks glr.c, since glr.c
+	assumes that defining it to anything is the same as defining
+	it to 1.  Problem reported by Paolo Bonzini.
+
+2006-09-12  Paolo Bonzini  <bonzini@gnu.org>  (tiny change)
+
+	* data/c.m4 (b4_null, b4_case): Define.
+	* src/output.c (prepare_symbols): Use b4_null.
+	(user_actions_output): Use b4_case.
+
+2006-09-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (b4_shared_declarations): Put start-header first,
+	before any #includes that we generate, so that feature-test
+	macros work.  Problem reported by Michael Deutschmann in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-09/msg00004.html>.
+	* data/lalr1.cc: Likewise.
+	* doc/bison.texinfo (Prologue): Document that feature-test macros
+	should be defined before any Bison declarations.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Put defns
+	that depend on location.hh after, not before, Bison decls, since
+	we now include location.hh after the first user prologue.
+
+	* doc/bison.texinfo (Calc++ Parser): Fix memory leak reported by
+	Sander Brandenburg in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-09/msg00002.html>.
+	Also, fix minor white space and comment issues.
+	(Prologue): Mention that it's better to define feature-test macros
+	before Bison declarations.  Problem reported by Michael Deutschmann.
+
+	* README-cvs: Fix typo: "&" should be "&&".  Problem reported
+	by Jim Meyering.
+	* m4/.cvsignore: Add argmatch.m4.  Remove obstack.m4, strerror_r.m4.
+	This adjusts to recent gnulib changes.
+
+2006-09-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Finish implementation of per-type %destructor/%printer.  Discussed
+	starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-02/msg00064.html>
+	and
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00091.html>.
+	* NEWS (2.3+): Add a description of this feature to the default
+	%destructor/%printer description.
+	* doc/bison.texinfo (Freeing Discarded Symbols): Likewise.
+	* src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set):
+	Invoke semantic_type_destructor_set or semantic_type_printer_set when a
+	list node contains a semantic type.
+	* src/symtab.c, src/symtab.h: Extend with a table that associates
+	semantic types with their %destructor's and %printer's.
+	(semantic_type_from_uniqstr, semantic_type_get,
+	semantic_type_destructor_set, semantic_type_printer_set): New functions
+	composing the public interface of that table.
+	(symbol_destructor_get, symbol_destructor_location_get,
+	symbol_printer_get, symbol_printer_location_get):  If there's no
+	per-symbol %destructor/%printer, look up the per-type before trying
+	the default.
+	* tests/actions.at (Per-type %printer and %destructor): New test case.
+	* tests/input.at (Default %printer and %destructor redeclared):
+	Extend to check that multiple occurrences of %symbol-default in a
+	single %destructor/%printer declaration is an error.
+	(Per-type %printer and %destructor redeclared, Unused values with
+	per-type %destructor): New test cases.
+
+2006-09-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Require default %destructor/%printer to be declared using
+	%symbol-default instead of an empty symbol list, and start working on
+	new per-type %destructor/%printer.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00007.html>.
+	* NEWS (2.3+): Add %symbol-default to example.
+	* bison.texinfo (Freeing Discarded Symbols): Likewise.
+	(Table of Symbols): Add entry for %symbol-default.
+	* src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): New token.
+	(generic_symlist, generic_symlist_item): New nonterminals for creating
+	a list in which each item is a symbol, semantic type, or
+	%symbol-default.
+	(grammar_declaration): Use generic_symlist in %destructor and %printer
+	declarations instead of symbols.1 or an empty list.
+	(symbol_declaration, precedence_declaration, symbols.1): Update actions
+	for changes to symbol_list.
+	* src/reader.c: Update for changes to symbol_list.
+	* src/scan-code.l: Likewise.
+	* src/scan-gram.l: Scan new PERCENT_SYMBOL_DEFAULT token.
+	* src/symlist.c, src/symlist.h: Extend such that a list node may
+	represent a semantic type or a %symbol-default in addition to just an
+	ordinary symbol.  Add switched functions for setting %destructor's and
+	%printer's.
+	* tests/actions.at, tests/input.at: Add %symbol-default to all default
+	%destructor/%printer declarations.
+
+2006-08-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Whether the default %destructor/%printer applies to a particular symbol
+	isn't a question of whether the user *declares* that symbol (in %token,
+	for example).  It's a question of whether the user by any means
+	*defines* the symbol at all (by simply using a char token, for
+	example).  $end is defined by Bison whereas any other token with token
+	number 0 is defined by the user.  The error token is always defined by
+	Bison regardless of whether the user declares it with %token, but we
+	may one day let the user define error as a nonterminal instead.
+	* NEWS (2.3+): Say "user-defined" instead of "user-declared".
+	* doc/bison.texinfo (Freeing Discarded Symbols): Likewise, and document
+	the meaning of "user-defined".
+	* tests/actions.at (Default %printer and %destructor for user-declared
+	end token): Rename to...
+	(Default %printer and %destructor for user-defined end token): ...
+	this.
+
+	* src/symtab.c (symbol_destructor_get, symbol_printer_get): In the
+	computation of whether to apply the default, don't maintain a list of
+	every Bison-defined symbol.  Instead, just check for a first character
+	of '$', which a user symbol cannot have, and check for the error token.
+
+2006-08-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't apply the default %destructor or %printer to the error token,
+	$undefined, or $accept.  This change fits the general rule that the
+	default %destructor and %printer are only for user-declared symbols,
+	and it solves several difficulties that are described in the new test
+	cases listed below.
+	* src/symtab.c (symbol_destructor_get, symbol_printer_get): Implement.
+	* tests/actions.at (Default %printer and %destructor are not for error
+	or $undefined, Default %printer and %destructor are not for $accept):
+	New test cases.
+
+2006-08-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Allow %start after the first rule.
+	* src/reader.c (grammar_current_rule_begin): Don't set the start symbol
+	when parsing the first rule.
+	(check_and_convert_grammar): Search for it here after all grammar
+	declarations have been parsed.  Skip midrules, which have dummy LHS
+	nonterminals.
+	* src/symtab.c (symbol_is_dummy): New function.
+	* src/symtab.h (symbol_is_dummy): Declare it.
+	* tests/input.at (%start after first rule): New test.
+
+2006-08-18  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Redo some of the previous commit: add back the ability to use
+	non-aliased/undeclared string literals since it might be useful to
+	those declaring %token-table.
+	* src/reader.c (check_and_convert_grammar): Undo changes in previous
+	commit: don't worry about complaints from symbols_pack.
+	* src/symtab.c (symbol_new, symbol_class_set,
+	symbol_check_alias_consistency): Undo changes in previous commit: count
+	each string literal as a new symbol and token, assign it a symbol
+	number, and don't complain about non-aliased string literals.
+	(symbols_pack): Since symbol_make_alias still does not decrement symbol
+	and token counts but does still set aliased tokens to the same number,
+	symbol_pack_processor now leaves empty slots in the symbols array.
+	Remove those slots.
+	* tests/regression.at (Undeclared string literal): Remove test case
+	added in previous commit since non-aliased string literals are allowed
+	again.
+	(Characters Escapes, Web2c Actions): Undo changes in previous commit:
+	remove unnecessary string literal declarations.
+	* tests/sets.at (Firsts): Likewise.
+
+2006-08-18  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't allow an undeclared string literal, but allow a string literal to
+	be used before its declaration.
+	* src/reader.c (check_and_convert_grammar): Don't invoke packgram if
+	symbols_pack complained.
+	* src/symtab.c (symbol_new): Don't count a string literal as a new
+	symbol.
+	(symbol_class_set): Don't count a string literal as a new token, and
+	don't assign it a symbol number since symbol_make_alias does that.
+	(symbol_make_alias): It's not necessary to decrement the symbol and
+	token counts anymore.  Don't assume that an alias declaration occurs
+	before any uses of the identifier or string, and thus don't assert that
+	one of them has the highest symbol number so far.
+	(symbol_check_alias_consistency): Complain if there's a string literal
+	that wasn't declared as an alias.
+	(symbols_pack): Bail if symbol_check_alias_consistency failed since
+	symbol_pack asserts that every token has been assigned a symbol number
+	although undeclared string literals have not.
+	* tests/regression.at (String alias declared after use, Undeclared
+	string literal): New test cases.
+	(Characters Escapes, Web2c Actions): Declare string literals as
+	aliases.
+	* tests/sets.at (Firsts): Likewise.
+
+2006-08-14  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	In the grammar scanner, STRING_FINISH unclosed constructs and return
+	them to the parser in order to improve error messages.
+	* src/scan-gram.l (SC_ESCAPED_STRING, SC_ESCAPED_CHARACTER,
+	SC_BRACED_CODE, SC_PROLOGUE): Implement.
+	* tests/input.at (Unclosed constructs): New test case.
+	* tests/regression.at (Invalid inputs): Update now that unclosed %{ is
+	seen.
+
+	* src/scan-gram.h, src/scan-gram.l (gram_last_braced_code_loc): Remove
+	unused global.
+
+2006-08-13  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Handle string aliases for character tokens correctly.
+	* src/symtab.c (symbol_user_token_number_set): If the token has an
+	alias, check and set its alias's user token number instead of its own,
+	which is set to indicate the alias.  Previously, every occurrence of
+	the character token in the grammar overwrote that alias indicator with
+	the character code.
+	* tests/input.at (String aliases for character tokens): New test.
+
+2006-08-12  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/parse-gram.y: Add `%expect 0' so we don't overlook conflicts.
+
+2006-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap: Put in need-ngettext argument to AM_GNU_GETTEXT,
+	to prevent failures when building on older platforms.
+	Check for autopoint failure.
+	Set XGETTEXT_OPTIONS to values that check for C format strings,
+	so that translators are warned about them (this also helps
+	prevent core dumps).
+
+	* lib/subpipe.c (create_subpipe): Use new gnulib pipe_safer
+	function, since it simplifies our code a bit.
+
+	* configure.ac (AC_ARG_ENABLE): Use -Wextra -Wno-sign-compare
+	rather than -W, so we don't get bogus warnings about sign comparisons.
+	Add -Wpointer-arith, since that warning is useful (it reports code
+	that does not conform to C89 and that some compilers reject).
+	* data/c.m4, data/glr.c, data/lalr1.cc, data/yacc.c: Undo latest change,
+	since it's no longer needed.
+
+2006-08-10  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Clean up scanners a bit.
+	* src/flex-scanner.h (FLEX_NO_OBSTACK): New macro that blocks obstack
+	definitions so gcc won't warn when obstack_for_string is unused.
+	* src/scan-code.l: config.h and system.h are already #include'd by
+	scan-code-c.c, so get rid of them here.
+	* src/scan-gram.l: Likewise.
+	* src/scan-skel.l: Likewise, and use flex-scanner.h without obstack
+	definitions rather than duplicating the rest of it.
+	* src/scan-gram-c.c, scan-skel-c.c: #include "system.h".
+
+2006-08-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Suppress signed/unsigned comparison warnings for yycheck.
+	* data/c.m4 (b4_safest_int_type): New macro.
+	* data/glr.c, data/lalr1.cc: Wherever you compare yycheck[i] against
+	a signed int type, cast it to b4_safest_int_type first.
+	* data/yacc.c: Likewise.
+	(b4_safest_int_type): Overwrite the one from c.m4 since b4_int_type is
+	also overwritten.
+
+2006-08-09  Ralf Wildenhues <Ralf.Wildenhues@gmx.de>  (tiny change)
+
+	* doc/bison.texinfo: Fix some typos.
+
+2006-08-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* m4/.cvsignore: Add inttypes_h.m4,lib-ld.m4, lib-prefix.m4,
+	po.m4, stdint_h.m4, uintmax_t.m4, ulonglong.m4, warning.m4.
+
+	* bootstrap (gnulib_tool): Stop using --assume-autoconf;
+	the latest gnulib does this a different way.
+	(get_translations): Sharuzzaman Ahmat Raslan reported that the ms
+	translation was patched, so stop omitting it.
+
+2006-07-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Enable declaration of default %printer/%destructor.  Make the parser
+	use these for all user-declared grammar symbols for which the user does
+	not declare a specific %printer/%destructor.  Thus, the parser uses it
+	for token 0 if the user declares it but not if Bison generates it as
+	$end.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-02/msg00064.html>,
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00091.html>,
+	and
+	<http://lists.gnu.org/archive/html/bison-patches/2006-07/msg00019.html>.
+	* NEWS (2.3+): Mention.
+	* doc/bison.texinfo (Actions in Mid-Rule): It's no longer impossible to
+	declare a %destructor for a mid-rule's semantic value.  It's just
+	impossible to declare one specific to it.
+	(Freeing Discarded Symbols): Mention that @$ can be used in %destructor
+	code.  Describe default %destructor form.
+	* src/parse-gram.y (grammar_declaration): Parse default
+	%printer/%destructor declarations.
+	* src/output.c (symbol_destructors_output): Use symbol_destructor_get
+	and symbol_destructor_location_get rather than accessing the destructor
+	and destructor_location members of struct symbol.
+	(symbol_printers_output): Likewise but for %printer's.
+	* src/reader.c (symbol_should_be_used): Likewise but for %destructor's
+	again.
+	* src/symtab.c (default_destructor, default_destructor_location,
+	default_printer, default_printer_location): New static global
+	variables to record the default %destructor and %printer.
+	(symbol_destructor_get, symbol_destructor_location_get,
+	symbol_printer_get, symbol_printer_location_get): New functions to
+	compute the appropriate %destructor and %printer for a symbol.
+	(default_destructor_set, default_printer_set): New functions to set the
+	default %destructor and %printer.
+	* src/symtab.h: Prototype all those new functions.
+	* tests/actions.at (Default %printer and %destructor): New test to
+	check that the right %printer and %destructor are called, that they're
+	not called for $end, and that $$ and @$ work correctly.
+	(Default %printer and %destructor for user-declared end token): New
+	test to check that the default %printer and %destructor are called for
+	a user-declared end token.
+	* tests/input.at (Default %printer and %destructor redeclared, Unused
+	values with default %destructor): New tests to check related grammar
+	warnings and errors.
+
+2006-07-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Clean up handling of %destructor for the end token (token 0).
+	Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-07/msg00019.html>
+	and
+	<http://lists.gnu.org/archive/html/help-bison/2006-07/msg00013.html>.
+
+	Make the skeletons consistent in how they pop the end token and invoke
+	its %destructor.
+	* data/glr.c (yyrecoverSyntaxError, yyparse): Don't pop the start
+	state, which has token number 0, since this would invoke the
+	%destructor for the end token.
+	* data/lalr1.cc (yy::parser::parse): Don't check for the final state
+	until after shifting the end token, or else it won't be popped.
+	* data/yacc.c (yyparse): Likewise.
+
+	* data/glr.c (yyparse): Clear the lookahead after shifting it even when
+	it's the end token.  Upon termination, destroy an unshifted lookahead
+	even when it's the end token.
+	* data/lalr1.cc (yy::parser::parse): Likewise.
+	* data/yacc.c (yyparse): Likewise.
+
+	* src/reader.c (packgram): Don't check rule 0.  This suppresses unused
+	value warnings for the end token when the user gives the end token a
+	%destructor.
+
+	* tests/actions.at (Printers and Destructors): Test all the above.
+
+2006-07-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Update to latest gnulib and gettext versions.
+	* bootstrap (gnulib-modules): Remove hard-locale, stdio-safer.
+	Add fopen-safer.
+	(gnulib_files): Add m4/warning.m4.  Don't worry about files
+	overwritten by autopoint.
+	Replace gt_INTL_SUBDIR_CORE with an empty body in m4/gettext_gl.m4.
+	Suppress "id", "ms", "tr" translations for now, since gettext 0.15
+	rejects them.
+	Don't use autoreconf; instead, invoke autopoint etc. by hand,
+	so that we can remove the intl files at a better time.
+	(intl_files_to_remove): Remove aclocal.m4, since it gets
+	rebuilt anyway.  Remove m4/inttypes_h.m4, m4/inttypes.m4,
+	m4/isc-posix.m4, m4/lib-ld.m4, m4/lib-prefix.m4, m4/po.m4,
+	m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4.
+	Add m4/inttypes-h.m4, m4/lock.m4, m4/visibility.m4.
+	Remove datarootdir hack; no longer needed.
+	* configure.ac: Use gl_WARNING_CFLAGS rather than BISON_WARNING.
+	(AM_GNU_GETTEXT_VERSION): Bump from 0.12 to 0.15.
+	* lib/.cvsignore: Remove hard-locale.c, hard-locale.h, strdup.c,
+	strdup.h.
+	* m4/.cvsignore: Remove hard-locale.m4, strdup.m4.
+	* m4/warning.m4: Remove from CVS, since we now use gnulib's version.
+
+2006-07-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap: Adjust to today's change to gnulib-tool by invoking
+	it with --assume-autoconf='latest-stable'.
+
+2006-07-13  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/parse-gram.y (grammar_declaration): Don't confuse Doxygen (at
+	least 1.4.7 and 1.4.4) by putting a #line between `typedef union
+	YYSTYPE' and `{'.
+	* src/muscle_tab.h (muscle_grow): Replace the header comments with
+	those from muscle_tab.c since the old ones are misleading.
+
+2006-07-13  Akim Demaille  <akim@epita.fr>
+
+	Support %define "KEY" {VALUE}.
+	* src/scan-code.h, src/scan-code.l (translate_action)
+	(translate_rule_action, translate_symbol_action, translate_code):
+	Return char *, not const char *.
+	* src/parse-gram.y (declaration): Rename as...
+	(prologue_declaration): this.
+	(string_content): Remove this nonterminal, use STRING.
+	(braceless, content, content.opt): New nonterminal.
+	Use them.
+	(%define): Now accept content.opt, i.e., accept also BRACED_CODE
+	as value.
+	* src/scan-gram.l (getargs.h): Don't include it.
+
+2006-07-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/lalr1.cc (YYCDEBUG): Use 'if (yydebug_) (*yycdebug_)'
+	rather than a for-loop that declares a local bool variable.  This
+	should work around a compatibility problem with a Cray x1e C++
+	compiler reported by Hung Nguyen in
+	<http://lists.gnu.org/archive/html/help-bison/2006-07/msg00022.html>.
+	The for-loop was introduced in the 2004-11-17 change but I don't
+	know why it was needed.
+
+2006-07-12  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4: Comment changes.
+
+2006-07-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	* src/complain.c (error_message, ERROR_MESSAGE): New.
+	To factor...
+	(fatal_at, fatal, warn_at, warn, complain_at, complain): these.
+	* src/complain.h, src/complain.c (warning_issued): Remove, unused.
+
+2006-07-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Instead of %union, you can define and use your own union type
+	YYSTYPE if your grammar contains at least one <type> tag.
+	Your YYSTYPE need not be a macro; it can be a typedef.
+	* doc/bison.texinfo (Value Type, Multiple Types, Location Type):
+	(Union Decl, Decl Summary): Document this.
+	* data/glr.c (YYSTYPE): Implement this.
+	* data/glr.cc (YYSTYPE): Likewise.
+	* data/lalr1.cc (YYSTYPE): Likewise.
+	* data/yacc.c (YYSTYPE): Likewise.
+	* src/output.c (prepare): Output tag_seen_flag.
+	* src/parse-gram.y (declaration, grammar_declaration):
+	Use 'union_seen' rather than 'typed' to determine whether
+	%union has been seen, since grammars can now be typed without
+	%union.
+	(symbol_declaration, type.opt, symbol_def):
+	Keep track of whether a tag has been seen.
+	* src/reader.c (union_seen, tag_seen): New vars.
+	(typed): remove.
+	* src/reader.h (union_seen, tag_seen, typed): Likewise.
+	* src/scan-code.l (untyped_var_seen): New variable.
+	(handle_action_dollar): Adjust to above changes.
+	(handle_action_dollar, handle_action_at):
+	Improve overflow checking for outlandish numbers.
+	* tests/input.at (AT_CHECK_UNUSED_VALUES): Redo test to
+	avoid new diagnostics generated by above changes.
+	* tests/regression.at (YYSTYPE typedef): Add test to check
+	for type tags without %union.
+
+	* src/symlist.c (symbol_list_length): Return int, not unsigned
+	int, since callers expect int.  This may need to get revisited
+	once we have proper integer overflow checking.
+
+	* src/scan-gram.h (gram_scanner_cursor): Remove decl, since this
+	object is now static.
+
+	* src/getargs.c (flags_argmatch): Return void, not int,
+	to pacify ./configure --enable-gcc-warnings.
+
+	* src/flex-scanner.h (STRING_FREE): Don't use FLEX_PREFIX (last_string)
+	since last_string is already defined to FLEX_PREFIX (last_string).
+
+2006-07-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	Implement --warnings/-W.
+	* src/getargs.c (report_argmatch, trace_argmatch): Remove,
+	replaced by...
+	(flags_argmatch, FLAGS_ARGMATCH): this new function and macro.
+	Adjust callers.
+	* src/getargs.h, src/getargs.c (warnings, warnings_flags)
+	(warnings_args, warnings_types): New.
+	(getargs, short_options, long_options): Accept -W/--warnings.
+	Sort the options by alphabetical order, upper case letter right
+	before its lower case.
+
+2006-07-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Change %merge result type clash warnings to errors.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-07/msg00026.html>.
+	* src/reader.c (record_merge_function_type): Use complain_at.
+	* tests/glr-regression.at (Missed %merge type warnings when LHS type is
+	declared later): Update test case results.
+
+2006-07-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	* src/getargs.h, src/getargs.c: Swap --report and --trace handling
+	to be in alphabetical order.
+	(trace_args): Spelling fixes.
+
+2006-07-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (YYID, yy_stack_print): Prefix local vars with "yy"
+	so they don't collide with user-defined macros.
+	(yy_stack_print): Don't assume that yytype_int16 promotes to int;
+	this was never guaranteed, and now that we're using gnulib stdint,
+	which defines int_fast16_t to long int, the problem is exposed.
+
+2006-07-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/c.m4 (b4_basename): Simplify a bit, since we don't
+	need the full POSIX semantics (and weren't implementing them
+	anyway).
+
+	Adjust to Autoconf 2.60 and today's gnulib.
+	* bootstrap (gnulib_modules): Add stdint.
+	Remove special case for m4/onceonly_2_57.m4, since gnulib-tool
+	no longer copies it.
+	(intl_files_to_remove): Remove m4/longlong.m4 and m4/wchar_t.m4,
+	since stdint needs the former and wcwidth (which is now required
+	by mbswidth) needs the latter.
+	Append 'datarootdir = @datarootdir@' to po/Makefile.in.in, to
+	work around a compatibility glitch between gettext 0.14.6 and
+	Autoconf 2.60.
+	* configure.ac (AC_PREREQ): Require Autoconf 2.60.
+	Do not check for uintptr_t, since new stdint module does the right
+	thing.
+	* lib/.cvsignore: Remove alloca.c, alloca.h, alloca_.h.
+	Add stdint.h, stdint_.h, wcwidth.h.
+	* m4/.cvsignore: Remove alloca.m4, onceonly.m4.
+	Add absolute-header.m4, double-slash-root.m4, longlong.m4,
+	stdint.m4, wchar_t.m4, wcwidth.m4.
+	* src/files.c: Include <dirname.h> and <stdio-safer.h> in the
+	usual order for ../lib/*.h files.
+	(file_name_split): Use last_component, not base_name, to adjust
+	to gnulib changes.
+	* src/parse-gram.h: Include <strverscmp.h> in the usual order
+	for ../lib/*.h files.
+	(YYTYPE_INT16, YYTYPE_INT8, YYTYPE_UINT16, YYTYPE_UINT8):
+	Define unconditionally, since we now assume the stdint module.
+	* src/scan-skel.l: Include <dirname.h>.
+	(BASE_QPUTS): Use last_component, not base_name.
+	* src/system.h: Include <unlocked-io.h> in the usual order
+	for ../lib/*.h files.  Include <stdint.h> unconditionally,
+	since we now use the stdint module.
+	(uintptr_t): Declare if UINTPTR_MAX is not defined, not
+	HAVE_UINTPTR_T, since we now use the stdint module.
+	(base_name): Remove decl, since files now include <dirname.h>
+	to get the decl.
+
+2006-07-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	* data/c.m4 (b4_location_initial_column, b4_location_initial_line):
+	New, default to 1.
+	* data/yacc.c, data/glr.c, data/location.cc: Use them.
+	* NEWS, doc/bison.texinfo: The initial column and line are 1 by
+	default.
+	* tests/calc.at: Adjust.
+
+2006-07-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	* data/c.m4 (b4_basename): New.
+	(b4_syncline): Also output the location of its invocation (from
+	the skeleton).
+	(b4_user_action, b4_define_user_action, b4_user_actions)
+	(b4_user_initial_action, b4_user_post_prologue,	b4_user_start_header)
+	(b4_user_stype): New.
+	* data/yacc.c, data/glr.c, data/lalr1.cc, data/glr.cc: Use them.
+
+2006-07-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	In the grammar file, the first column is 1 not 0 on the first line as
+	on every other line.
+	* src/parse-gram.y (%initial-action): Initialize @$ correctly.
+	* tests/input.at (Torturing the Scanner): Update output.
+
+	* src/scan-gram.l (scanner_cursor): Declare it static.
+
+2006-07-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	In warnings, say "previous declaration" rather than "first
+	declaration".
+	* src/symtab.c (redeclaration): Do that here.
+	* src/reader.c (record_merge_function_type): In the case of a result
+	type clash, report the previous declaration rather than the very first
+	one in the grammar file.
+	* tests/glr-regression.at (Missed %merge type warnings when LHS type is
+	declared later): Add a third declaration to check this behavior.
+	* tests/input.at (Incompatible Aliases): Update output.
+
+2006-06-27  Akim Demaille  <akim@epita.fr>
+
+	* doc/Doxyfile.in: New.
+	* doc/Makefile.am: Use it.
+	* src/lalr.h, src/symtab.h: Initial doxygenation.
+
+2006-06-26  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't miss %merge result type warnings just because the LHS types are
+	declared after the %merge.  This continues the effort of the previous
+	patch.
+	* src/reader.c (get_merge_function): Don't set the merger type yet.
+	(record_merge_function_type): New function for setting the merger type
+	and checking for clashes.
+	(grammar_current_rule_merge_set): Set the location of the %merge for
+	the current rule.
+	(packgram): Invoke record_merge_function_type for each rule now that
+	all symbol type declarations have been parsed.
+	* src/reader.h (merger_list.type_declaration_location): New member
+	storing the location of the first %merge from which the type for this
+	merging function was derived.
+	* src/symlist.h (symbol_list.merger_declaration_location): New member
+	storing the location of a rule's %merge, if any.
+	* tests/glr-regression.at (Missed %merge type warnings when LHS type is
+	declared later): New test to catch the error fixed by the above patch.
+
+2006-06-26  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Get action warnings (grammar_rule_check) right even when symbol
+	declarations appear after the rules.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00108.html>
+	and
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00151.html>.
+	Don't mistake the type of $$ in a midrule to be that of its parent
+	rule's $$.
+	* src/reader.c (grammar_current_rule_end): Don't invoke
+	grammar_rule_check yet since not all symbol declarations may have been
+	parsed yet.
+	(grammar_midrule_action): Likewise.
+	Don't record whether the midrule's $$ has been used yet since actions
+	haven't been translated yet.
+	Record the midrule's parent rule and its RHS index within the parent
+	rule.
+	(grammar_current_rule_action_append): Don't translate the action yet
+	since not all symbol declarations may have been parsed yet and, thus,
+	warnings about types for $$, $n, @$, and @n can't be reported yet.
+	(packgram): Translate the action and invoke grammar_rule_check now that
+	all symbol declarations have been parsed.
+	* src/scan-code.l (handle_action_dollar): Now that this is invoked
+	after parsing the entire grammar file, the symbol list here in the case
+	of a midrule is actually the midrule's empty RHS, so reference its
+	parent rule's RHS where necessary.
+	On the other hand, now that you can already know it's a midrule, you
+	aren't forced to think $$ has the same type as its parent rule's $$.
+	(handle_action_at): In the case of a midrule, reference the parent rule
+	where necessary.
+	* src/symlist.c (symbol_list_new): Initialize new midrule-related
+	members.
+	(symbol_list_length): Now that this is invoked after all rules have
+	been parsed, a NULL symbol (rather than a NULL symbol list node)
+	terminates a rule.  symbol_list_print already does this correctly.
+	* src/symlist.h (symbol_list.midrule_parent_rule,
+	symbol_list.midrule_parent_rhs_index): New members so that midrules can
+	remember their relationships with their parents.
+	* tests/input.at (Type Clashes): Extend to catch the midrule $$ error
+	fixed by the above patch.
+	(_AT_UNUSED_VALUES_DECLARATIONS, AT_CHECK_UNUSED_VALUES): New m4 macros
+	implementing...
+	(Unused values): ... this old test case and...
+	(Unused values before symbol declarations): ... this new test case.
+	This one is the same as `Unused values' except that all symbol
+	declarations appear after the rules in order to catch the rest of the
+	errors fixed by the above patch.
+
+2006-06-26  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	More cleanup.
+	* src/reader.c (current_rule): Declare it static since it's no longer
+	used outside this file.
+	(grammar_current_rule_action_append): Remove redundant arguments from
+	translate_rule_action invocation.
+	* src/reader.h (current_rule): Remove this unused extern.
+	* src/scan-code.h (translate_rule_action): Remove redundant arguments.
+	* src/scan-code.l (translate_rule_action): Likewise.
+
+2006-06-25  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Clean up yesterday's patch.
+	* parse-gram.y (rhs): Move grammar_midrule_action invocation from here
+	to...
+	* src/reader.c (grammar_current_rule_action_append): ... here for
+	consistency with grammar_current_rule_symbol_append.
+	* tests/regression.at (Braced code in declaration in rules section):
+	Make yyerror and yylex static as usual.
+
+2006-06-24  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Fix bug that mistakes braced code in a declaration in the rules section
+	to be a rule action.  Mentioned at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00105.html>.
+	* src/scan-gram.l: Move midrule action detection from the start of the
+	scanning of any braced code to...
+	* src/parse-gram.y (rhs): ... the parsing of braced code as a rule
+	action.  For readability, use $2 and @2 rather than the equivalent
+	global variables.
+	* tests/regression.at (Braced code in declaration in rules section):
+	New test to catch the error fixed by the above patch.
+
+	Work on code readability some.
+	* src/scan-code.l (current_rule): Get rid of this misleading and
+	redundant declaration: it's actually extern'ed in reader.h.
+	(YY_DECL, code_lex, handle_action_dollar, handle_action_at,
+	translate_action): Add a rule argument and use it instead of the global
+	current_rule.
+	(translate_rule_action): This already receives current_rule through an
+	argument, so pass it on to translate_action instead of assigning
+	current_rule to current_rule.
+	(translate_symbol_action, translate_code): Pass rule = NULL to
+	translate_action.
+
+2006-06-23  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Rename %before-definitions to %start-header and %after-definitions to
+	%end-header.  Don't use these declarations to separate pre-prologue
+	blocks from post-prologue blocks.  Add new order-independent
+	declarations %before-header and %after-header as alternatives to the
+	traditional Yacc pre-prologue and post-prologue blocks.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00110.html>.
+	* NEWS (2.3+): Update for these changes.
+	* data/glr.c (b4_before_definitions): Update to...
+	(b4_start_header): ... this.
+	(b4_after_definitions): Update to...
+	(b4_end_header): ... this.
+	* data/glr.cc: Likewise.
+	* data/lalr1.cc: Likewise.
+	* data/yacc.c: Likewise.
+	* doc/bison.texinfo (The prologue): Update names, and replace remaining
+	prologue blocks with %*-header declarations.
+	(Calc++ Parser): Likewise.
+	(Decl Summary): Update names.
+	(Table of Symbols): Update description.
+	* src/parse-gram.y (PERCENT_AFTER_DEFINITIONS): Update to...
+	(PERCENT_END_HEADER): ... this.
+	(PERCENT_BEFORE_DEFINITIONS): Update to...
+	(PERCENT_START_HEADER): ... this.
+	(PERCENT_AFTER_HEADER, PERCENT_BEFORE_HEADER): New tokens.
+	(declaration): Update token names and m4 macro names.
+	When parsing %end-header and %start-header, invoke translate_code
+	before muscle_code_grow, and no longer set global booleans to remember
+	whether these declarations have been seen.
+	Parse new %after-header and %before-header.
+	* src/reader.c (before_definitions, after_definitions): Remove.
+	(prologue_augment): Accept a new bool argument to specify whether to
+	augment the pre-prologue or post-prologue.
+	* src/reader.h (before_definitions, after_definitions): Remove these
+	extern's.
+	(prologue_augment): Add new bool argument.
+	* src/scan-gram.l (PERCENT_AFTER_DEFINITIONS): Update to...
+	(PERCENT_END_HEADER): ... this.
+	(PERCENT_BEFORE_DEFINITIONS): Update to...
+	(PERCENT_START_HEADER): ... this.
+	(PERCENT_AFTER_HEADER, PERCENT_BEFORE_HEADER): New tokens.
+	* tests/actions.at (Printers and Destructors): Update names.
+
+2006-06-22  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Add comparison operators for C++ location classes.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00092.html>.
+	* data/c++.m4 (b4_define_location_comparison): New boolean %define
+	declaration indicating whether filename_type has an operator==.  If
+	filename_type is `std::string', it defaults to `1', `0' otherwise.
+	* data/location.cc: Iff b4_define_location_comparison is `1', add
+	operator== and operator!= for class position and for class location.
+
+	Some minor fixes.
+	* src/scan-action.l: Remove unused file.
+	* src/symtab.c (symbol_printer_set): Use printer_location not
+	destructor_location.
+	* src/symtab.h (struct symbol): Replace incorrect source comment for
+	printer members.
+	* tests/input.at (Incompatible Aliases): Update output with correct
+	printer location.
+
+2006-06-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't put the pre-prologue in the header file.  For the yacc.c code
+	file and the glr.c header and code files, move the pre-prologue before
+	the token definitions.  Add new %before-definitions and
+	%after-definitions to declare code that will go in both the header file
+	and code file.  Discussed at
+	<http://lists.gnu.org/archive/html/bison-patches/2005-12/msg00000.html>,
+	<http://lists.gnu.org/archive/html/bison-patches/2006-01/msg00016.html>,
+	and
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00055.html>.
+	* NEWS (2.3+): Describe these changes.
+	* data/glr.c (b4_pre_prologue): Move from within to before...
+	(b4_shared_declarations): ... this.
+	Add new b4_before_definitions before b4_token_enums.
+	Add new b4_after_definitions at the end.
+	* data/glr.cc (b4_pre_prologue): Replace with...
+	(b4_before_definitions): ... this in the header file.
+	(b4_after_definitions): New near the end of the header file.
+	* data/lalr1.cc (b4_pre_prologue): Move from the header file to the
+	code file right before including the header file.
+	(b4_before_definitions): New in the previous position of
+	b4_pre_prologue in the header file.
+	(b4_after_definitions): New near the end of the header file.
+	* data/yacc.c: Clean up some m4 quoting especially in the header file.
+	(b4_token_enums_defines): In the code file, move to right before
+	YYSTYPE for consistency with the header file.
+	(b4_before_definitions): New right before b4_token_enums_defines in
+	both the header and code file.
+	(b4_after_definitions): New right after YYLTYPE and yylloc in both the
+	header and code file.
+	* doc/bison.texinfo (Prologue): Show use of %before-definitions instead
+	of prologues for %union dependencies.
+	(Decl Summary): In %defines description, mention the effect of
+	%before-definitions and %after-definitions on the header file.
+	(Calc++ Parser): Forward declare driver in a %before-definitions rather
+	than in the pre-prologue so that make check succeeds.
+	(Table of Symbols): Add entries for %before-definitions and
+	%after-definitions.
+	* src/parse-gram.y (PERCENT_BEFORE_DEFINITIONS): New token for
+	%before-definitions.
+	(PERCENT_AFTER_DEFINITIONS): New token for %after-definitions.
+	(declaration): Parse those declarations and append to
+	b4_before_definitions and b4_after_definitions, respectively.
+	* src/reader.c (before_definitions, after_definitions): New bools to
+	track whether those declarations have been seen.
+	(prologue_augment): Add to the post-prologue if %union,
+	%before-definitions, or %after-definitions has been seen.
+	* src/reader.h (before_definitions, after_definitions): New extern's.
+	* src/scan-gram.l: Scan the new declarations.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Place the second
+	prologue block in a %before-definitions or a %after-definitions based
+	on whether the %union is declared.
+	* tests/regression.at (Early token definitions with --yacc, Early token
+	definitions without --yacc): Move tests for token definitions into the
+	post-prologue since token names are no longer defined in the
+	pre-prologue.
+
+2006-06-20  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h, src/symtab.c (symbol_from_uniqstr): New.
+	(symbol_get): Use it.
+	* src/parse-gram.y: Use it.
+
+2006-06-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/scan-gram.l: Remove unused declaration of last_string_1 so the
+	build succeeds when configured with --enable-gcc-warnings.
+
+2006-06-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/parse-gram.y (char_name): New function.
+	(CHAR, STRING, string_content): For %printer, properly escape.
+	(ID): Prefer fputs to fprintf.
+	(id): Reindent to be consistent with other rules.
+	Properly quote char.
+
+	The Translation Project changed its way of publishing translations
+	to maintainers.  I haven't received any responses to my request
+	for supporting the old way, or for documenting the new way.  I
+	have modified 'bootstrap' to use screen scraping
+	(in this case, HTML scraping).  This is unreliable and inelegant,
+	but I don't see any better way.  Yuck.
+	* bootstrap (TP_URL, WGET_COMMAND): New vars.
+	(get_translations): New function, which uses HTML scraping to
+	deduce locations of latest translations.
+	Use this function to grab both bison and bison-runtime .po files.
+	Don't bother priming the pump for the runtime-po domain any more,
+	as it's now translated better than bison is.
+
+2006-06-19  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l: No longer "parse" things after `%union' until
+	`{'.  Rather, return a single "%union" token.
+	No longer make symbols: return strings, and leave the conversion
+	to symbols to the parser.
+	(SC_PRE_CODE, token_type): Remove.
+	* src/parse-gram.y (%union): New field `character'.
+	Sort tokens.
+	(CHAR): New token.
+	(ID, ID_COLON): Now that the scanner no longer makes them
+	identifiers, adjust all uses to invoke symbol_get.
+	(id_colon): New, wraps the conversion from string to symbol.
+	(%union): Accept a possible union_name.
+	(symbol): Now can be a char.
+	* data/c.m4 (b4_union_name): Leave a default value.
+	* data/glr.c, data/yacc.c: Use it.
+
+2006-06-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	For associating token numbers with token names for "yacc.c", don't use
+	#define statements unless `--yacc' is specified; always use enum
+	yytokentype.  Most important discussions start at:
+	<http://lists.gnu.org/archive/html/bison-patches/2005-09/msg00053.html>,
+	<http://lists.gnu.org/archive/html/bison-patches/2005-12/msg00052.html>,
+	and
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00043.html>.
+	* NEWS (2.3+): Mention.
+	* data/c.m4 (b4_yacc_if): New.
+	(b4_token_enums_defines): Use b4_yacc_if to decide whether to add the
+	token #define's.
+	* doc/bison.texinfo (Bison Options): Describe the effect of `--yacc'
+	on token name definitions.
+	* src/getargs.c (usage): Capitalize `Yacc' in English.
+	* src/output.c (prepare): Define b4_yacc_flag.
+	* tests/regression.at (Early token definitions): Test that tokens names
+	are defined before the pre-prologue not just before the post-prologue.
+	Remove this test case and copy to...
+	(Early token definitions with --yacc): ... this to test #define's.
+	(Early token definitions without --yacc): ... and this to test enums.
+
+2006-06-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Reword the post-2.3 change to not be so optimistic about
+	removing the old "look-ahead" spelling.
+	Update previous look-ahead/lookahead change reports.
+	* REFERENCES: look-ahead -> lookahead (since that's
+	what he actually wrote).
+	* doc/refcard.tex: look ahead -> lookahead,
+	look-ahead -> lookahead
+
+2006-06-09  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	For consistency, use `lookahead' instead of `look-ahead' or
+	`look_ahead'.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-01/msg00049.html>
+	and then at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00017.html>.
+	* NEWS: For the next release, note the change to `--report'.
+	* TODO, doc/bison.1: Update English.
+	* doc/bison.texinfo: Update English.
+	(Understanding Your Parser, Bison Options): Document as
+	`--report=lookahead' rather than `--report=look-ahead'.
+	* src/conflicts.c: Update English in comments.
+	(lookahead_set): Rename from look_ahead_set.
+	(flush_reduce): Rename argument look_ahead_tokens to lookahead_tokens.
+	(resolve_sr_conflict): Rename local look_ahead_tokens to
+	lookahead_tokens, and update other uses.
+	(flush_shift, set_conflicts, conflicts_solve, count_sr_conflicts,
+	count_rr_conflicts, conflicts_free): Update uses.
+	* src/getargs.c (report_args): Move "lookahead" before alternate
+	spellings.
+	(report_types): Update uses.
+	(usage): For `--report' usage description, state `lookahead' spelling
+	rather than `look-ahead'.
+	* src/getargs.h (report.report_lookahead_tokens): Rename from
+	report_look_ahead_tokens.
+	* src/lalr.c: Update English in comments.
+	(compute_lookahead_tokens): Rename from compute_look_ahead_tokens.
+	(state_lookahead_tokens_count): Rename from
+	state_look_ahead_tokens_count.
+	Rename local n_look_ahead_tokens to n_lookahead_tokens.
+	(lookahead_tokens_print): Rename from look_ahead_tokens_print.
+	Rename local n_look_ahead_tokens to n_lookahead_tokens.
+	Update other uses.
+	Update English in output.
+	(add_lookback_edge, initialize_LA, lalr, lalr_free): Update uses.
+	* src/print.c: Update English in comments.
+	(lookahead_set): Rename from look_ahead_set.
+	(print_reduction): Rename argument lookahead_token from
+	look_ahead_token.
+	(print_core, state_default_rule, print_reductions, print_results):
+	Update uses.
+	* src/print_graph.c: Update English in comments.
+	(print_core): Update uses.
+	* src/state.c: Update English in comments.
+	(reductions_new): Update uses.
+	(state_rule_lookahead_tokens_print): Rename from
+	state_rule_look_ahead_tokens_print, and update other uses.
+	* src/state.h: Update English in comments.
+	(reductions.lookahead_tokens): Rename from look_ahead_tokens.
+	(state_rule_lookahead_tokens_print): Rename from
+	state_rule_look_ahead_tokens_print.
+	* src/tables.c: Update English in comments.
+	(conflict_row, action_row): Update uses.
+	* tests/glr-regression.at
+	(Incorrect lookahead during deterministic GLR,
+	Incorrect lookahead during nondeterministic GLR): Rename
+	print_look_ahead to print_lookahead.
+	* tests/torture.at: Update English in comments.
+	(AT_DATA_LOOKAHEAD_TOKENS_GRAMMAR): Rename from
+	AT_DATA_LOOK_AHEAD_TOKENS_GRAMMAR.
+	(Many lookahead tokens): Update uses.
+	* data/glr.c: Update English in comments.
+	* lalr1.cc: Likewise.
+	* yacc.c: Likewise.
+	* src/conflicts.h: Likewise.
+	* src/lalr.h: Likewise.
+	* src/main.c: Likewise.
+	* src/output.c: Likewise.
+	* src/parse-gram.c: Likewise.
+	* src/tables.h: Likewise.
+	* tests/calc.at: Likewise.
+
+2006-06-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/flex-scanner.h (yytext): Remove stray `*/' in #define.
+
+2006-06-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* TODO: Add request from Nelson H. F. Beebe to be able to install
+	Bison without installing the yacc script.
+
+2006-06-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/flex-scanner.h: For the sake of Flex 2.5.4, don't #define yyleng
+	and yytext if they're already #define'd.
+	* src/flex-scanner.h, src/location.h: Move #include "system.h" to...
+	* src/scan-code-c.c: ... here.
+	* src/scan-code.l, src/scan-gram.l: ... and here.  Also #include
+	<config.h>.
+
+2006-06-07  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Get Bison to build again when configured with --enable-gcc-warnings.
+	* src/location.c, src/location.h, src/main.c, src/scan-code.l: Add some
+	missing #include's.
+	* src/scan-code.l (handle_action_dollar, handle_action_at): Rename
+	loc argument as it shadows a global.
+	* src/scan-gram.l: Remove stray comma that prevents boundary_set
+	invocation.
+
+	* src/.cvsignore: Add scan-code.c.
+
+2006-06-07  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l: Move the "add a trailing ; to actions" code
+	to...
+	* src/scan-code.l: here.
+	* tests/input.at (Torturing the Scanner): Fix another location
+	error.
+
+2006-06-07  Akim Demaille  <akim@epita.fr>
+
+	* src/Makefile.am (BUILT_SOURCES): Fix the trailing backslash.
+
+2006-06-06  Akim Demaille  <akim@epita.fr>
+
+	Extract the parsing of user actions from the grammar scanner.
+	As a consequence, the relation between the grammar scanner and
+	parser is much simpler.  We can also split "composite tokens" back
+	into simple tokens.
+	* src/gram.h (ITEM_NUMBER_MAX, RULE_NUMBER_MAX): New.
+	* src/scan-gram.l (add_column_width, adjust_location): Move to and
+	rename as...
+	* src/location.h, src/location.c (add_column_width)
+	(location_compute): these.
+	Fix the column count: the initial column is 0.
+	(location_print): Be robust to ending column being 0.
+	* src/location.h (boundary_set): New.
+	* src/main.c: Adjust to scanner_free being renamed as
+	gram_scanner_free.
+	* src/output.c: Include scan-code.h.
+	* src/parse-gram.y: Include scan-gram.h and scan-code.h.
+	Use boundary_set.
+	(PERCENT_DESTRUCTOR, PERCENT_PRINTER, PERCENT_INITIAL_ACTION)
+	(PERCENT_LEX_PARAM, PERCENT_PARSE_PARAM): Remove the {...} part,
+	which is now, again, a separate token.
+	Adjust all dependencies.
+	Wherever actions with $ and @ are used, use translate_code.
+	(action): Remove this nonterminal which is now useless.
+	* src/reader.c: Include assert.h, scan-gram.h and scan-code.h.
+	(grammar_current_rule_action_append): Use translate_code.
+	(packgram): Bound check ruleno, itemno, and rule_length.
+	* src/reader.h (gram_in, gram__flex_debug, scanner_cursor)
+	(last_string, last_braced_code_loc, max_left_semantic_context)
+	(scanner_initialize, scanner_free, scanner_last_string_free)
+	(gram_out, gram_lineno, YY_DECL_): Move to...
+	* src/scan-gram.h: this new file.
+	(YY_DECL): Rename as...
+	(GRAM_DECL): this.
+	* src/scan-code.h, src/scan-code.l, src/scan-code-c.c: New.
+	* src/scan-gram.l (gram_get_lineno, gram_get_in, gram_get_out):
+	(gram_get_leng, gram_get_text, gram_set_lineno, gram_set_in):
+	(gram_set_out, gram_get_debug, gram_set_debug, gram_lex_destroy):
+	Move these declarations, and...
+	(obstack_for_string, STRING_GROW, STRING_FINISH, STRING_FREE):
+	these to...
+	* src/flex-scanner.h: this new file.
+	* src/scan-gram.l (rule_length, rule_length_overflow)
+	(increment_rule_length): Remove.
+	(last_braced_code_loc): Rename as...
+	(gram_last_braced_code_loc): this.
+	Adjust to the changes of the parser.
+	Move all the handling of $ and @ into...
+	* src/scan-code.l: here.
+	* src/scan-gram.l (handle_dollar, handle_at): Remove.
+	(handle_action_dollar, handle_action_at): Move to...
+	* src/scan-code.l: here.
+	* src/Makefile.am (bison_SOURCES): Add flex-scanner.h,
+	scan-code.h, scan-code-c.c, scan-gram.h.
+	(EXTRA_bison_SOURCES): Add scan-code.l.
+	(BUILT_SOURCES): Add scan-code.c.
+	(yacc): Be robust to white spaces.
+
+	* tests/conflicts.at, tests/input.at, tests/reduce.at,
+	* tests/regression.at: Adjust the column numbers.
+	* tests/regression.at: Adjust the error message.
+
+2006-06-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/getargs.c (usage): Mention GLR not just LALR(1) in --help output.
+	Use Akim's wording from
+	<http://lists.gnu.org/archive/html/bison-patches/2006-05/msg00056.html>.
+
+2006-06-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Between Bison releases, manually append `+' to the previous Bison
+	release number, and use that as a signal to automatically print the
+	ChangeLog's CVS Id keyword from --version.  Discussed starting at
+	<http://lists.gnu.org/archive/html/bison-patches/2006-05/msg00028.html>.
+	* ChangeLog: Add Id header.
+	* configure.ac (AC_INIT): Append `+' to `2.3'.
+	* src/.cvsignore: Add revision.c.
+	* src/Makefile.am (bison_SOURCES): Add revision.c and revision.h.
+	(BUILT_SOURCES): Add revision.c.
+	(revision.c): New target rule.  This file defines a new global variable
+	named revision.  It initializes it with either the Id from ChangeLog
+	or, if VERSION doesn't contain `+', with the empty string.
+	* src/getargs.c (version): Print the value of revision.
+	* src/revision.h: Extern revision.
+
+2006-06-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 2.3.
+	* configure.ac (AC_INIT): Likewise.
+
+2006-05-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (YYRECOVERING): Define to be a function-like macro
+	with no arguments, not as an object-like macro.  This is for
+	compatibility with data/yacc.c.  Problem reported by John P. Hartmann in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00059.html>.
+	* doc/bison.texinfo (Action Features, Error Recovery, Table of Symbols):
+	Document this.
+
+2006-05-30  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/getargs.c (usage): Back out yesterday's modification of the
+	--help output so that we don't have to wait for translation before
+	releasing 2.3.
+
+2006-05-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Introduction): Don't say "GLR grammar".
+	Problem reported by Akim Demaille.
+
+2006-05-29  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* src/getargs.c (usage): Mention GLR not just LALR(1) in --help output.
+
+2006-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (yy_reduce_print): Omit trailing white space in
+	generated source code.  Problem reported by Frans Englich in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00049.html>.
+
+2006-05-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* Makefile.maint (gzip_rsyncable, GZIP_ENV): Compute within the
+	shell, not within 'make', so that 'make' by an ordinary builder
+	(using GNU make) does not worry about configuring gzip.  This also
+	works around a bug reported independently by Keith Thompson and by
+	Georg Schwarz, whereby gzip 1.2.4 --help would output usage on
+	stderr rather than stdout, messing up the build logs.
+
+2006-05-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/yacc.c (yyparse): Wrap the final return from yyparse inside YYID
+	to make sure that YYID will never be unused.  This fixes a 'make
+	maintainer-check' failure caused by the recent changes to the 'Trivial
+	grammars' test case, which caused g++ 4.1.0 to complain that YYID was
+	not used.
+	* data/glr.c (yyparse): Wrap yyparse's return inside YYID just in case.
+
+2006-05-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/glr.c (yyresolveLocations): Remove bogus YYASSERT that the
+	state before an empty RHS is always resolved here.  Only the location
+	of that state is guaranteed to be resolved, and that's enough.  This
+	fixes the remaining bug reported by Derek M. Jones in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00027.html>.
+	* tests/glr-regression.at (Uninitialized location when reporting
+	ambiguity): Test the above case.
+	Also, the embedded comments in this test case claim it checks the case
+	of an empty RHS that has inherited the initial location.  However, the
+	corresponding LHS was already resolved, so yyresolveLocations didn't
+	actually have reason to modify it.  Fix this by forcing
+	nondeterministic operation at the beginning of the parse.
+
+2006-05-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/c.m4 (b4_yy_symbol_print_generate):
+	(b4_yy_symbol_print_generate): Use 'YYSTYPE const' rather than
+	'const YYSTYPE', and similarly for YYLTYPE.  This fixes one
+	of the bugs reported today by Derek M Jones in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00027.html>.
+	* doc/bison.texinfo (Value Type): Document that YYSTYPE must be
+	defined to be a type name without parens or brackets.
+	(Location Type): Similarly for YYLTYPE.
+	* tests/regression.at (Trivial grammars): Put in a test for this
+	bug that will be caught by 'make maintainer-check' (though not,
+	alas, by 'make check' unless your compiler is picky).
+
+2006-05-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 2.2.
+	* configure.ac (AC_INIT): Likewise.
+
+2006-05-17  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/glr.c (yyreportTree): Make room in yystates for the state
+	preceding the RHS.  This fixes the segmentation fault reported by Derek
+	M. Jones in
+	<http://lists.gnu.org/archive/html/help-bison/2006-05/msg00035.html>.
+	(yyreportTree, yypdumpstack): Subtract 1 from yyrule before printing
+	to the user.  Reported for yyreportTree by Derek M. Jones later in the
+	same thread.
+	* THANKS: Add Derek M. Jones.
+	Update my email address.
+	Fix typo in Steve Murphy's name.
+
+2006-05-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyreportSyntaxError): Fix off-by-one error in
+	checking against YYLAST that caused the parser to miss a potential
+	alternative in its diagnostic.
+	Problem reported by Maria Jose Moron Fernandez in
+	<http://lists.gnu.org/archive/html/bug-bison/2006-05/msg00024.html>.
+	* data/lalr1.cc (yysyntax_error_): Likewise.
+	* data/yacc.c (yysyntax_error): Likewise.
+	* tests/regression.at (_AT_DATA_DANCER_Y): Use static array for
+	tokens, in case we run into an older C compiler.
+	(_AT_DATA_EXPECT2_Y, AT_CHECK_EXPECT2): New macros.
+	Use them to check for the off-by-one error fixed above.
+
+	* data/yacc.c (yytnamerr): Fix typo: local var should be of type
+	YYSIZE_T, not size_t.
+	* tests/regression.at (Trivial grammars): New test, to catch
+	the error fixed by the above patch.
+
+2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	* doc/bison.texinfo (C++ Bison Interface): Clarify the naming
+	scheme.
+	Reported by Steve Murphy.
+
+2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	* data/glr.cc, data/lalr1.cc: Using %defines is mandatory.
+	* data/glr.cc: b4_location_flag is now b4_locations_flag.
+
+2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	Implement --trace=m4.
+	* src/getargs.c (trace_types, trace_args): Accept trace_m4.
+	* src/output.c (output_skeleton): When set, pass -dV to m4.
+
+	Factor the handling of flags in m4.
+	* src/output.c (prepare): Rename the muscle names debug, defines,
+	error_verbose to debug_flag, defines_flag, error_verbose_flag.
+	* data/c.m4: Adjust.
+	(_b4_define_flag_if, b4_define_flag_if, b4_defines_if): New.
+	Use b4_define_flag_if to define other b4_FLAG_if macros.
+	(b4_location_if): As a consequence, rename as...
+	(b4_locations_if): this, for consistency.
+	Adjust all the skeletons.
+
+2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	* etc/bench.pm: Shorten bench names.
+
+2006-05-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	* src/output.h, src/output.c (error_verbose): Move to...
+	* src/getargs.h, src/getargs.c: here.
+	Sort the flags.
+	Adjust dependencies.
+
+2006-05-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/c.m4 (b4_copyright): Put the special exception for Bison
+	skeletons here, so we don't have to put it in each skeleton.  All
+	uses changed.  Suggested by Akim Demaille.  Also, wrap the
+	copyright notice, in case it is longer than 80 columns.  Replace
+	comma by newline after title.
+
+2006-05-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Calc++ Scanner): The flex behavior is an
+	incompatibility, not a bug.  Mention that it wasn't fixed as of
+	flex 2.5.33.
+
+2006-05-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	* examples/extexi: Enforce the precedence of concatenation over
+	>>.
+	Reported by Tommy Nordgren.
+
+2006-05-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	* data/lalr1.cc (yytranslate_): Rename token as t to avoid clashes
+	with the member "token".
+	Reported by Martin Nylin.
+
+2006-05-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c: Switch to Bison 2.2 special-exception language in
+	the copyright notice.  Use more-regular format for titles and
+	copyright notices.
+	* data/glr.cc: Likewise.
+	* data/location.cc: Likewise.
+	* data/yacc.cc: Likewise.
+	* doc/bison.texinfo (Conditions): Document this.
+	* NEWS: likewise.  Upgrade version to 2.2.
+
+2006-04-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	* data/glr.cc: Remove dead code.
+
+2006-04-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap: Comment out the AM_CPPFLAGS line, since we don't use
+	that variable and the line breaks the bootstrap.  Problem reported
+	by Juan M. Guerrero.
+
+2006-04-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	* doc/bison.texinfo (Multiple start-symbols): New.
+
+2006-04-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	* etc/README, etc/bench.pl: New.
+
+2006-04-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	* src/scan-gram.l: Be robust to BRACED_CODE appearing before any
+	rule.
+	Reported by Mickael Labau.
+	* tests/input.at (Torturing the Scanner): Test it.
+
+2006-03-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Decl Summary): Don't mention yylloc twice.
+	Problem reported by Bob Rossi.
+
+2006-03-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo: Remove @shorttitlepage stuff; it wasn't used
+	and didn't really work.
+	For the index, use @ifnotinfo, not @iftex.
+	Minor cleanups of spacing and terminology.
+
+2006-03-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Fix the definition
+	of AT_NAME_PREFIX when %name-prefix is not used.
+
+2006-03-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	Apply --prefix to C++ skeletons too: they change the namespace.
+	The test suite already exercize these cases.
+	* data/c++.m4 (b4_namespace): New.
+	* data/lalr1.cc, data/glr.cc, data/location.cc: Use it instead of `yy'.
+	* data/lalr1.cc (yytnameerr_): Move its definition into the namespace.
+	* data/yacc.c, data/glr.c: Remove a useless `[]'.
+	* doc/bison.texinfo: Document it.
+	(Option Cross Key): Use @multitable in all formats.  It looks
+	nicer, even in TeX outputs.
+	(Rules): Use the same code whatever the output type is.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS)
+	(_AT_BISON_OPTION_POPDEFS): Support AT_NAME_PREFIX.
+	* tests/calc.at: Use it, instead of hard coding `yy'.
+
+2006-03-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	* TODO: Remove dead items.
+
+2006-03-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	* doc/FAQ: Remove, merged into...
+	* doc/bison.texinfo (FAQ): this.
+	* doc/Makefile.am (EXTRA_DIST): Adjust.
+
+2006-03-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	* data/c.m4 (b4_token_enum): Always define the enum of tokens,
+	even if empty.
+	* data/lalrl1.cc, data/glr.cc (parser::token_type): New.
+	* doc/bison.texinfo (Calc++ Scanner): Use it.
+
+2006-03-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix two nits reported by twlevo, plus one more that I discovered.
+
+	* src/assoc.h (assoc_to_string): Give a name to the arg, as
+	this is the usual Bison style.
+	* src/location.h (location_print): Likewise.
+
+	* src/reader.h (token_name): Likewise.
+
+2006-03-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix some nits reported by twlevo.
+	* doc/FAQ: Remove ancient Y2K FAQ, replacing it with "secure"
+	and "POSIX".  Use more-modern syntax for URLs.  Mention C++
+	and ask for Java.  Don't hardwire OS version numbers.  Add
+	copyright notice.
+	* m4/.cvsignore: Add unistd_h.m4, for latest gnulib.
+	* src/conflicts.c (solved_conflicts_obstack): Now static.
+
+2006-03-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* doc/bison.texinfo (Introduction): Mention GLR and C++ as on the web
+	page.  Say "you can use it" not "you may use it" as on the web page;
+	we're describing capabilities not granting permission.
+
+2006-03-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyresolveLocations): Rename local variables to avoid
+	shadowing warnings.  Use usual patter for iterating through RHS.
+	* tests/glr-regression.at
+	(Uninitialized location when reporting ambiguity):
+	Modify yylex so that it uses its argument, rather than trying
+	to rely on ARGSUSED (which doesn't work for gcc with warnings).
+	const char -> char const.
+
+	* tests/Makefile.am ($(srcdir)/package.m4, maintainer-check-valgrind):
+	Don't use tabs inside commands; it messes up 'ps'.
+	Problem reported by twlevo.
+
+2006-03-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/glr-regression.at (Uninitialized location when reporting
+	ambiguity): New test case.
+	* data/glr.c (yyresolveLocations): New function, which uses
+	YYLLOC_DEFAULT.
+	(yyresolveValue): Invoke yyresolveLocations before reporting an
+	ambiguity.
+	* doc/bison.texinfo (Default Action for Locations): Note
+	YYLLOC_DEFAULT's usage for ambiguity locations.
+	(GLR Semantic Actions): Cross-reference those notes.
+
+2006-03-04  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/glr-regression.at (Leaked semantic values when reporting
+	ambiguity): Remove unnecessary union and type declarations.
+	(Leaked lookahead after nondeterministic parse syntax error): New test
+	case.
+	* data/glr.c (yyparse): Check for zero stacks remaining before
+	attempting to shift the lookahead so that you don't lose it.
+
+2006-03-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Avoid memory leaks by not invoking longjmp in yyreportAmbiguity.
+	* tests/glr-regression.at (Leaked semantic values when reporting
+	ambiguity): New test case.
+	* data/glr.c (yyreportAmbiguity): Invoke yyyerror directly and return
+	yyabort rather than invoking yyFail, which invokes longjmp.  Remove the
+	now unnecessary yystackp parameter.
+	(yyresolveValue): Return yyreportAmbiguity's result.  Now the necessary
+	destructors can be called.
+
+	* tests/glr-regression.at: Don't invoke bison with `-t' unnecessarily
+	in existing testcases.
+
+2006-03-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	Don't leak semantic values for parent RHS when a user action cuts the
+	parser, and clean up related code a bit.
+	* tests/glr-regression.at (Leaked merged semantic value if user action
+	cuts parse): Rename to...
+	(Leaked semantic values if user action cuts parse): ... this.  Add check
+	for leaked parent RHS values.
+	* data/glr.c (yydestroyGLRState): In debugging output, distinguish
+	between an unresolved state (non-empty chain of semantic options) and
+	an incomplete one (signaled by an empty chain).
+	(yyresolveStates): Document the interface.  Move all manipulation of a
+	successfully or unsuccessfully resolved yyGLRState to...
+	(yyresolveValue): ... here so that yyresolveValue always leaves a
+	yyGLRState with consistent data and thus is easier to understand.
+	Remove the yyvalp and yylocp parameters since they are always just
+	taken from the yys parameter.  When reporting a discarded merged value
+	in debugging output, note that it is incompletely merged.  Document the
+	interface.
+	(yyresolveAction): If resolving any of the RHS states fails, destroy
+	them all rather than leaking them.  Thus, as long as user actions are
+	written to clean up the RHS correctly, yyresolveAction always cleans up
+	the RHS of a semantic option.  Document the interface.
+
+2006-02-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyexpandGLRStack): Catch an off-by-one error that
+	led to a segmentation fault in GNU Pascal.  Problem reported
+	by Waldek Hebisch.
+
+2006-02-21  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* doc/bison.texinfo (Mid-Rule Actions): Explain how to bury a
+	mid-rule action inside a nonterminal symbol in order to declare a
+	destructor for its semantic value.
+
+2006-02-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c [(! defined yyoverflow || YYERROR_VERBOSE) && !
+	YYSTACK_USE_ALLOCA && ! defined YYSTACK_ALLOC && defined
+	__cplusplus && ! defined _STDLIB_H && !
+	((defined YYMALLOC || defined malloc) && (defined YYFREE ||
+	defined free))]: Include <stdlib.h> rather than rolling our own
+	declarations of malloc and free, to avoid problems with
+	incompatible declarations (using 'throw') C++'s stdlib.h.  This
+	should fix Debian bug 340012
+	<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=340012>,
+	reported by Guillaume Melquiond.
+
+2006-02-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Clarify symbols versus types in unused-value warnings.
+
+	* configure.ac (AC_INIT): Bump version number.
+
+2006-02-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 2.1a.
+	* tests/headers.at (AT_TEST_CPP_GUARD_H): Declare yyerror and yylex,
+	since C99 requires this.
+
+2006-02-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* m4/c-working.m4: New file.
+	* configure.ac (BISON_TEST_FOR_WORKING_C_COMPILER): Use it.
+
+2006-02-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* Makefile.maint: Merge from coreutils.
+
+2006-02-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	More portability fixes for problems summarized by Nelson H. F. Beebe.
+
+	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Catch a
+	configuration screwup "./configure CC=/opt/SUNWspro/bin/c89
+	CFLAGS="-xarch=generic64" CXX=/opt/SUNWspro/bin/CC
+	LDFLAGS="-xarch=generic64" with Sun C 5.7 on Solaris 10; this
+	messes up because C++ code is compiled in 32-bit mode but linked
+	in 64-bit mode.
+
+2006-02-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	More portability fixes for problems summarized by Nelson H. F. Beebe.
+
+	* doc/bison.texinfo (Calc++ Scanner): Work around a bug in flex
+	2.5.31.  This resembles the 2005-10-10 patch to src/scan-skel.l.
+
+	* examples/calc++/Makefile.am (check_PROGRAMS): Renamed from
+	nodist_PROGRAMS, since we don't need to actually compile the
+	example if we're just doing a plain 'make'.  This avoids bothering
+	the installer unnecessarily about problems due to weird C++
+	compilers.
+
+2006-02-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+	More portability fixes for problems summarized by Nelson H. F. Beebe.
+
+	* tests/headers.at (AT_TEST_CPP_GUARD_H): Use #include <...> rather
+	than #include "...", and compile with -I'.'.  The old method was
+	not portable, according to Posix and the C standard, and it does
+	not work with Sun C 5.7, where previous #line directives affect
+	the working directory used in later #include "..." directives.
+
+2006-02-06  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	Various DJGGP specific issues in /djgpp
+
+2006-02-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+	More portability fixes for problems summarized by Nelson H. F. Beebe.
+
+	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Check that
+	'#include <map>' works and that you can apply ++ to iterators.
+
+2006-02-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Work around portability problems summarized by Nelson H. F. Beebe in
+	<http://lists.gnu.org/archive/html/bug-bison/2005-09/msg00021.html>.
+
+	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Check
+	that '#include <string>' works.
+
+	* data/lalr1.cc (yytranslate_): No longer inline, to work around a
+	porting problem to g++ 3.4.3 on Darwin 7.9.0, where g++ complained
+	"warning: sorry: semantics of inline function static data `const
+	unsigned char translate_table[262]' are wrong (you'll wind up with
+	multiple copies)".
+
+	* lib/bbitset.h (struct bitset_vtable): Rename members not, and,
+	or, xor to not_, and_, or_, and xor_, respectively.  This works
+	around a bug in GCC 3.4.3 on Irix 6.5, which apparently has a
+	random system header somewhere that includes the equivalent of
+	<iso646.h>.
+
+	* tests/headers.at (AT_TEST_CPP_GUARD_H): Don't assume that "$CC
+	-E" works; it apparently doesn't work with PathScale EKO Compiler
+	Suite Version 2.0.
+
+2006-01-30  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	During deterministic GLR operation, user actions should be able to
+	influence the parse by changing yychar.  To make this easier to fix and
+	to make glr.c easier to evolve in general, don't maintain yytoken in
+	parallel with yychar; just compute yytoken when needed.
+	* tests/glr-regression.at (Incorrect lookahead during deterministic
+	GLR): Check that setting yychar in a user action has the intended
+	effect.
+	* data/glr.c (yyGLRStack): Remove yytokenp member.
+	(yyclearin): Don't set *yytokenp.
+	(yyprocessOneStack, yyreportSyntaxError, yyrecoverSyntaxError): Examine
+	yychar rather than *yytokenp to determine the current lookahead.
+	Compute yytoken locally when needed.
+	(yyparse): Likewise.  Remove the local yytoken that yytokenp used to
+	point to.
+
+	* doc/bison.texinfo (Bison Options): Remove stray sentence fragment
+	after `--report' documentation.
+
+2006-01-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/parse-gram.y (grammar_declaration): Location of printer
+	symbol is @1, not list->location.  Bug reported by twlevo.
+	* tests/input.at (Incompatible Aliases): Adjust to above change.
+
+2006-01-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/input.at (AT_CHECK_UNUSED_VALUES): Remove.  Instead, do
+	all the test at once.  This makes the output easier to read in the
+	normal case.
+
+	Fix a longstanding bug uncovered by bro-0.9a9/src/parse.y, which I
+	got from <http://bro-ids.org/download.html>.  The bug is that
+	when two actions appeared in succession, the second one was
+	scanned before the first one was added to the grammar rule
+	as a midrule action.  Bison then output the incorrect warning
+	"parse.y:905.17-906.36: warning: unused value: $3".
+	* src/parse-gram.y (BRACED_CODE, action): These are no longer
+	associated with a value.
+	(rhs): Don't invoke grammar_current_rule_action_append.
+	(action): Invoke it here instead.
+	* src/reader.c (grammar_midrule_action): Now extern.
+	(grammar_current_rule_action_append): Don't invoke
+	grammar_midrule_action; that is now the scanner's job.
+	* src/reader.h (last_string, last_braced_code_loc):
+	(grammar_midrule_action): New decls.
+	* src/scan-gram.l (last_string): Now extern, sigh.
+	(last_braced_code_loc): New extern variable.
+	(<INITIAL>"{"): Invoke grammar_midrule_action if the current
+	rule already has an action.
+	(<SC_BRACED_CODE>"}"): Set last_braced_code_loc before returning.
+	* tests/input.at (AT_CHECK_UNUSED_VALUES):
+	Add some tests to check that the above changes fixed the bug.
+
+2006-01-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/reader.c (symbol_should_be_used): Renamed from symbol_typed_p.
+	All used changed.  Check whether the symbol has a destructor,
+	not whether it is typed.
+	* tests/input.at (AT_CHECK_UNUSED_VALUES): Add a destructor, so
+	that the values are still reported as unused.  All line numbers
+	adjusted.
+
+2006-01-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Work around a bug in bro 0.8, which underparenthesizes its
+	definition of YYLLOC_DEFAULT.
+	* data/glr.c: Change all uses of YYLLOC_DEFAULT to parenthesize
+	their arguments.
+	* data/lalr1.cc: Likewise.
+	* data/yacc.cc: Likewise.
+
+2006-01-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Work around a bug in Pike 7.0, and give the Pike folks a
+	better way to override the usual int widths.
+	* data/yacc.c (b4_int_type): Use yytype_uint8, etc., so that the
+	user can override the types.
+	(short): #undef, to work around a bug in Pike 7.0.
+	(yytype_uint8, yytype_int8, yytype_uint16, yytype_int16): New types.
+	(union yyalloc.yyss): Use yytype_int16 rather than short.
+	All uses changed.
+	(yysigned_char): Remove.
+	* src/parse-gram.y (YYTYPE_UINT8, YYTYPE_INT8, YYTYPE_UINT16):
+	(YYTYPE_INT16): New macros, to test the new facility in yacc.c.
+	* tests/regression.at (Web2c Actions): Adjust to above changes.
+
+	* src/reader.c (check_and_convert_grammar): New function.
+	(reader): Close the input file even if something went wrong during
+	parsing.  Minor file descriptor leak reported by twlevo.
+
+	* src/assoc.c (assoc_to_string): Use a default: abort (); case
+	to pacify gcc -Wswitch-default.
+	* src/scan-gram.l (adjust_location): Use a default: break; case
+	to pacify gcc -Wswitch-default.
+	* src/scan-skel.h (skel_get_lineno, skel_get_in, skel_get_out):
+	(skel_get_leng, skel_get_text, skel_set_lineno, skel_set_in):
+	(skel_set_out, skel_get_debug, skel_set_debug, skel_lex_destroy):
+	Move these decls to scan-skel.l, since they don't need to be
+	visible elsewhere.
+	* src/scan-skel.l: Accept the above decls.
+	(skel_lex): New decl, to pacify GCC when unpatched flex 2.5.31
+	is used.
+
+2006-01-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* Makefile.cfg (local-checks-to-skip): Add changelog-check,
+	since we don't want to insist on a version number at the start
+	of the changelog every time.
+	* Makefile.maint: Sync from coreutils a bit better.
+	(sc_trailing_blank): Renamed from sc_trailing_space.
+	All uses changed.
+	(sc_no_if_have_config_h, sc_require_config_h):
+	(sc_prohibit_assert_without_use): New rules.
+	(sc_obsolete_symbols): Don't catch Makefile.maint itself.
+	(sc_dd_max_sym_length): Fix leading spaces in rule.
+	(sc_system_h_headers): Prefix with @.
+	(sc_useless_cpp_parens, m4-check): Output line numbers.
+	(changelog-check): Allow version only in head.
+	* data/c.m4: Use "defined FOO" instead of "defined (FOO)", to
+	satisfy new Makefile.maint rule.
+	* data/glr.c: Likewise.
+	* data/glr.cc: Likewise.
+	* data/lalr1.cc: Likewise.
+	* data/yacc.c: Likewise.
+	* lib/ebitsetv.c: Likewise.
+	* lib/lbitset.c: Likewise.
+	* lib/subpipe.c: Likewise.
+	* lib/timevar.c: Likewise.
+	* src/system.h: Likewise.
+	* data/yacc.c (YYSTYPE): Don't generate trailing spaces in output.
+	* djgpp/Makefile.maint: Add copyright notice.
+	* djgpp/README.in: Likewise.
+	* djgpp/config.bat: Likewise.
+	* djgpp/config.site: Likewise.
+	* djgpp/config_h.sed: Likewise.
+	* djgpp/djunpack.bat: Likewise.
+	* djgpp/config.sed: Fix copyright notice to match standard format.
+	* djgpp/subpipe.h: Likewise.
+	* lib/bitsetv-print.c: Likewise.
+	* lib/bitsetv.c: Likewise.
+	* lib/subpipe.h: Likewise.
+	* lib/timevar.c: Likewise.
+	* lib/timevar.h: Likewise.
+	* djgpp/subpipe.c: Use standard recipe for config.h.
+	* lib/abitset.c: Likewise.
+	* lib/bitset.c: Likewise.
+	* lib/bitset_stats.c: Likewise.
+	* lib/bitsetv-print.c: Likewise.
+	* lib/bitsetv.c: Likewise.
+	* lib/ebitsetv.c: Likewise.
+	* lib/get-errno.c: Likewise.
+	* lib/lbitset.c: Likewise.
+	* lib/subpipe.c: Likewise.
+	* lib/timevar.c: Likewise.
+	* lib/vbitset.c: Likewise.
+	* tests/local.at: Likewise.
+	* src/scan-gram.l: Don't include verify.h, since system.h does
+	that for us.
+	* .x-sc_require_config_h: New file.
+	* .x-sc_unmarked_diagnostics: New file.
+
+2006-01-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Be a bit more systematic about using 'abort'.
+	* lib/abitset.c (abitset_test): Remove ATTRIBUTE_UNUSED; not needed.
+	* lib/bitset.c (bitset_bytes, bitset_init, bitset_op4_cmp):
+	Put 'default: abort ();' before some other case, to satisfy older
+	pedantic compilers.
+	* lib/bitset_stats.c (bitset_stats_init): Likewise.
+	* lib/ebitset.c (ebitset_elt_find, ebitset_op3_cmp): Likewise.
+	* lib/lbitset.c (lbitset_elt_find, lbitset_op3_cmp): Likewise.
+	* src/conflicts.c (resolve_sr_conflict): Likewise.
+	* src/vcg.c (get_color_str, get_textmode_str, get_shape_str):
+	(get_decision_str, get_orientation_str, get_node_alignment_str):
+	(get_arrow_mode_str, get_crossing_type_str, get_view_str):
+	(get_linestyle_str, get_arrowstyle_str): Likewise.
+	* src/conflicts.c (resolve_sr_conflict):
+	Use a default case rather than one for the one remaining enum
+	value, to catch invalid enum values as well.
+	* src/lalr.c (set_goto_map, map_goto):
+	Prefer "assert (FOO);" to "if (!FOO) abort ();".
+	* src/nullable.c (nullable_compute, token_definitions_output):
+	Likewise.
+	* src/reader.c (packgram, reader): Likewise.
+	* src/state.c (transitions_to, state_new, state_reduction_find):
+	Likewise.
+	* src/symtab.c (symbol_user_token_number_set, symbol_make_alias):
+	(symbol_pack): Likewise.
+	* src/tables.c (conflict_row, pack_vector): Likewise.
+	* src/scan-skel.l (QPUTS): Remove unnecessary parens.
+	(BASE_QPUTS, "@output ".*\n): Remove unnecessary asserts.
+	* src/system.h: Don't include <assert.h>.
+	(assert): New macro.
+
+	* doc/bison.texinfo (Prologue, Rules, Actions, Union Decl, Action Decl):
+	(Destructor Decl, Parser Function, Pure Calling):
+	Describe rules for braces inside C code more carefully.
+
+2006-01-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix some porting glitches found by Nelson H. F. Beebe.
+	* lib/abitset.c (abitset_resize): Rewrite to avoid warnings from
+	compilers that don't understand that abort () does not return.
+	* src/state.c (transitions_to): Likewise.
+	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Check
+	that '#include <cstdlib>' works.
+	* src/system.h (INT8_MIN, INT16_MIN, INT32_MIN, INT8_MAX):
+	(INT16_MAX, UINT8_MAX, INT32_MAX, UINT16_MAX, UINT32_MAX):
+	#undef if ! defined __STDC_VERSION__ || __STDC_VERSION__ < 199901,
+	for the benefit of some pre-C99 compilers.
+
+	* bootstrap: Undo changes to gnulib files that autoreconf made.
+
+	Minor fixups to get 'make maintainer-check' to work.
+	* configure.ac: Don't use -Wnested-externs, as it's incompatible
+	with the new verify.h implementation.
+	* data/c.m4 (b4_yy_symbol_print_generate): YYUSE (yyoutput).
+	* data/glr.c (YYUSE): Depend on __GNUC__ as well.
+	* data/yacc.c (YYUSE): Likewise.
+	* data/lalr1.cc (yysyntax_error_): YYUSE (yystate).
+	* lib/subpipe.c (end_of_output_subpipe): The args are unused.
+	* src/parse-gram.y (declaration): Don't pass a string constant
+	to a function that expects char *, since GCC might complain
+	about the constant value.
+	* src/reader.c (symbol_typed_p): Add parens to pacify GCC.
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): #undef yylloc and yylval
+	before #defining them.
+	* tests/glr-regression.at
+	(Incorrectly initialized location for empty right-hand side in GLR):
+	In yyerror, use the msg arg.
+	(Corrupted semantic options if user action cuts parse):
+	(Incorrect lookahead during deterministic GLR):
+	(Incorrect lookahead during nondeterministic GLR):
+	Don't name a local var 'index'; it shadows string.h's 'index'.
+
+2006-01-19  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at (_AT_DATA_CALC_Y): Initialize the whole initial
+	location, not just parts of it.
+
+2006-01-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Document the fact that multiple %unions are now allowed.
+	* doc/bison.texinfo (Union Decl): Likewise.
+	* TODO: This feature is now implemented, so remove it from
+	the wishlist.
+
+	* Makefile.maint: Merge with coreutils Makefile.maint.
+	(CVS_LIST): Use build-aux version if available.
+	(VERSION_REGEXP): New macro.
+	(syntax-check-rules): Add sc_no_if_have_config_h,
+	sc_prohibit_assert_without_use, sc_require_config_h,
+	sc_useless_cpp_parens.
+	(sc_obsolete_symbols): Check for O_NDELAY.
+	(sc_dd_max_sym_length): Track coreutils.
+	(sc_unmarked_diagnostics): Look in all files, not just *.c.
+	(sc_useless_cpp_parens): New rule.
+	(news-date-check): Look for version or today's date.
+	(changelog-check): Don't require version number near head.
+	(copyright-check): Use current year instead of hardwiring 2005.
+	(my-distcheck): Depend on $(release_archive_dir)/$(prev-tgz).
+	(announcement): Add --gpg-key-ID.
+
+	* djgpp/config.sed: Add copyright notice, and replace "filesystem"
+	with "file system".
+
+	Avoid undefined behavior that addressed just before the start of an
+	array.  Problem reported by twlevo.
+	* src/reader.c (packgram): Prepend a new sentinel before ritem.
+	* src/lalr.c (build_relations): Rely on new sentinel.
+	* src/gram.c (gram_free): Adjust to new sentinel.
+
+2006-01-12  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/glr.c (yyGLRStateSet): Rename yylookaheadStatuses to
+	yylookaheadNeeds.  All uses updated.
+	(yysplitStack): Rename local yynewLookaheadStatuses to
+	yynewLookaheadNeeds.
+	* data/glr-regression.at (Incorrect lookahead during nondeterministic
+	GLR): In comments, change `lookahead status' to `lookahead need'.
+
+2006-01-11  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
+
+	* data/glr.c (yysplitStack): A little stylistic rewrite.
+
+2006-01-11  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
+
+	* data/glr.c (yyaddDeferredAction): Flesh out the comment.
+
+2006-01-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* doc/bison.texinfo: Fix some typos.
+	(GLR Semantic Actions): New subsection discussing special
+	considerations because GLR semantic actions might be deferred.
+	(Actions): Mention look-ahead usage of yylval.
+	(Actions and Locations): Mention look-ahead usage of yylloc.
+	(Special Features for Use in Actions): Add YYEOF entry and mention it
+	in the yychar entry.
+	In the yychar entry, remove mention of the local yychar case (pure
+	parser) since this is irrelevant information when writing semantic
+	actions and since it's already discussed in `Table of Symbols' where
+	yychar is otherwise described as an external variable.
+	In the yychar entry, don't call it the `current' look-ahead since it
+	isn't when semantic actions are deferred.
+	In the yychar and yyclearin entries, add note about deferred semantic
+	actions.
+	Add yylloc and yylval entries discussing look-ahead usage.
+	(Look-Ahead Tokens): When discussing yychar, don't call it the
+	`current' look-ahead, and do mention yylval and yylloc.
+	(Error Recovery): Cross-reference `Action Features' when mentioning
+	yyclearin.
+	(Table of Symbols): In the yychar entry, don't call it the `current'
+	look-ahead.
+	In the yylloc and yylval entries, mention look-ahead usage.
+
+2006-01-08  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/glr-regression.at: Update copyright year to 2006.
+
+2006-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/glr.c (yyGLRStateSet): Add yybool* yylookaheadStatuses member to
+	use during nondeterministic operation to track which stacks have
+	actually needed the current lookahead.
+	(yyinitStateSet, yyfreeStateSet, yyremoveDeletes, yysplitStack):
+	Allocate, deallocate, resize, and otherwise shuffle space for
+	yylookaheadStatuses in parallel with yystates member of yyGLRStateSet.
+	(yysplitStack, yyprocessOneStack, yyparse): Set lookahead status
+	appropriately during nondeterministic operation.
+	(yySemanticOption): Add int yyrawchar, YYSTYPE yyval, and YYLTYPE yyloc
+	members to store the current lookahead to be used by the deferred
+	user action.
+	(yyaddDeferredAction): Add size_t yyk parameter specifying the stack
+	from which the RHS is taken.  Set the lookahead members of the new
+	yySemanticOption according to the lookahead status for stack yyk.
+	(yyglrShiftDefer, yyglrReduce): Pass yyk parameter on to
+	yyaddDeferredAction.
+	(yyresolveAction): Set yychar, yylval, and yylloc to the lookahead
+	members of yySemanticOption before invoking yyuserAction, and then set
+	them back to their current values afterward.
+	(yyparse): Set yychar = YYEMPTY where yytoken = YYEMPTY.
+	(yyreportAmbiguity): Add /*ARGSUSED*/ to pacify lint.
+	* tests/glr-regression.at: Remove `.' from the ends of recent test case
+	titles for consistency.
+	(Leaked merged semantic value if user action cuts parse): In order to
+	suppress lint warnings, use arguments in merge function, and assign
+	char value < 128 in main.
+	(Incorrect lookahead during deterministic GLR): New test case.
+	(Incorrect lookahead during nondeterministic GLR): New test case.
+
+2006-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/c.m4 (b4_yy_symbol_print_generate): In yy_symbol_print, accept
+	!yyvaluep as signal that no semantic value is available to print.
+	* data/glr.c (yydestroyGLRState): If state is not resolved, don't try
+	to print a semantic value.
+
+2006-01-06  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* tests/glr-regression.at: For consistency with my newer test cases,
+	don't thank myself.
+
+2006-01-05  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/glr.c (yyresolveValue): When merging semantic options, if at
+	least one user action succeeds but a later one cuts the parse, then
+	destroy the semantic value before returning rather than leaking it.
+	(yyresolveStates): If a user action cuts the parse and thus
+	yyresolveValue fails, ignore the (unset) semantic value rather than
+	corrupting the yyGLRState, and empty the semantic options list since
+	the user actions should have called all necessary destructors.
+	Simplify code with YYCHK.
+	* tests/glr-regression.at (Corrupted semantic options if user action
+	cuts parse): New test case.
+	(Undesirable destructors if user action cuts parse): New test case.
+	Before applying any of this patch, this test case never actually failed
+	for me... but only because the corrupted semantic options usually
+	masked this bug.
+	(Leaked merged semantic value if user action cuts parse): New test
+	case.
+
+2006-01-05  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c, src/symlist.h, src/symlist.c: s/mid_rule/midrule/.
+
+2006-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/c.m4 (b4_c_modern): New macro, with a new provision for
+	_MSC_VER.  Problem reported by Cenzato Marco.
+	(b4_c_function_def): Use it.
+	* data/yacc.c (YYMODERN_C): Remove.  All uses replaced by
+	b4_c_modern.
+	(yystrlen, yystpcpy, yyparse): Use b4_c_function... macros rather
+	than rolling our own.
+
+2006-01-04  Akim Demaille  <akim@epita.fr>
+
+	Also warn about non-used mid-rule values.
+	* src/symlist.h, src/symlist.c (symbol_list): Add a mid_rule
+	member.
+	(symbol_list_new): Adjust.
+	* src/reader.c (symbol_typed_p): New.
+	(grammar_rule_check): Use it.
+	(grammar_midrule_action): Bind a mid-rule LHS to its rule.
+	Check its rule.
+	* tests/input.at (AT_CHECK_UNUSED_VALUES): New.
+	Use it.
+	* tests/actions.at (Exotic Dollars): Adjust.
+
+2006-01-04  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (grammar_midrule_action): If $$ is set in a
+	mid-rule, move the `used' bit to its lhs.
+	* tests/input.at (Unused values): New.
+	* tests/actions.at (Exotic Dollars): Adjust: exp is not typed.
+
+2006-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Bison Options): Say more accurately what
+	--yacc does.
+	* src/parse-gram.y (rules_or_grammar_declaration): Don't complain
+	about declarations in the grammar when in Yacc mode, as POSIX does
+	not require a diagnostic when the grammar uses extensions.
+
+	* src/reduce.c (reduce_grammar): Remove unnecessary cast to bool.
+
+	Warn about dubious constructions like "%token T T".
+	Reported by twlevo.
+	* src/symtab.h (struct symbol.declared): New member.
+	* src/symtab.c (symbol_new): Initialize it to false.
+	(symbol_class_set): New arg DECLARING, specifying whether
+	this is a declaration that we want to warn about, if there
+	is more than one of them.  All uses changed.
+
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c:
+	Allow multiple %union directives, whose contents concatenate.
+	* src/parse-gram.y (grammar_declaration): Likewise.
+	Use muscle_code_grow, so that we don't need stype_line any more.
+	All uses changed.
+
+	* src/muscle_tab.c (muscle_grow): Fix comment.
+
+	* ChangeLog, data/c.m4, data/glr.c, data/glr.cc, data/location.cc:
+	* data/yacc.c, src/getargs.c, src/output.c, tests/cxx-type.at:
+	Update copyright year to 2006.
+
+2006-01-03  Akim Demaille  <akim@epita.fr>
+
+	Have glr.cc pass (some of) the calc.at tests.
+	* data/glr.cc (b4_parse_param_orig): New.
+	(b4_parse_param): Improve its definition, and bound it more
+	clearly in the skeleton.
+	(b4_epilogue): Append, instead of prepending, in order to keep
+	#line consistency.
+	Simplify the generation of auxiliary functions: locations and
+	purity are mandated.
+	(b4_global_tokens_and_yystype): Honor it.
+	* data/location.cc (c++.m4): Don't include it.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Define AT_GLR_CC_IF
+	and AT_SKEL_CC_IF.
+	* tests/calc.at (AT_CHECK_CALC): Rely on AT_SKEL_CC_IF instead of
+	AT_LALR1_CC_IF.
+	Be sure to initialize the first position's filename.
+	(AT_CHECK_CALC_LALR1_CC): Add %location and %defines, they are
+	mandated anyway.
+	(AT_CHECK_CALC_GLR_CC): New.
+	Use it to exercise glr.cc as a lalr1.cc drop-in replacement.
+
+2006-01-02  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_skeleton): Don't hard wire the inclusion of
+	c.m4.
+	* data/c++.m4, data/glr.c, data/yacc.c: Include c.m4.
+	* data/glr.cc: Do not include stack.hh.
+
+2006-01-02  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+	* data/glr.c: Reformat whitespace with tabs.
+	(b4_lpure_formals): Remove this unused m4 macro.
+	* tests/cxx-type.at: Reformat whitespace with tabs.
+	(_AT_TEST_GLR_CXXTYPES): In union Node, rename node_info to nodeInfo
+	since it's a member.  Rename type to isNterm for clarity.
+
+2005-12-29  Akim  <akim@sulaco.local>
+
+	Let glr.cc catch up with symbol_value_print.
+	* data/glr.cc (b4_yysymprint_generate): Replace by...
+	(b4_yy_symbol_print_generate): this.
+	(yy_symbol_print, yy_symbol_value_print): Declare them.
+
+2005-12-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/location.h (boundary): Note that a line or column equal
+	to INT_MAX indicates an overflow.
+	* src/scan-gram.l: Include verify.h.  Don't include get-errno.h.
+	(rule_length_overflow, increment_rule_length, add_column_width):
+	New functions.
+	(<INITIAL>{id}, <SC_ESCAPED_STRING>"\"", <SC_ESCAPED_CHARACTER>"'"):
+	(<SC_BRACED_CODE>"}"):
+	Use increment_rule_length rather than incrementing it by hand.
+	(adjust_location, handle_syncline): Diagnose overflow.
+	(handle_action_dollar, handle_action_at):
+	Fix bug with monstrosities like $-2147483648.
+	Remove now-unnecessary checks.
+	(scan_integer): Verify assumptions and remove now-unnecessary checks.
+	(convert_ucn_to_byte): Verify assumptions.
+	(handle_syncline): New arg LOC.  All callers changed.
+	Don't store through a value derived from char const * pointer.
+
+	* src/reader.c (grammar_rule_check): Rewrite slightly to avoid
+	GCC warnings.
+
+2005-12-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/reader.c (grammar_midrule_action, grammar_symbol_append):
+	Remove unnecessary forward static decls.
+
+2005-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (grammar_current_rule_check): Also check that $$
+	is used.
+	Take the rule to check as argument, hence rename as...
+	(grammar_rule_check): this.
+	* src/reader.h, src/reader.c (grammar_rule_begin, grammar_rule_end):
+	Rename as...
+	(grammar_rule_begin, grammar_rule_end): these, for consistency.
+	(grammar_midrule_action, grammar_symbol_append): Now static.
+	* tests/torture.at (input): Don't rely on the default action
+	being always performed.
+	* tests/calc.at: "Set" $$ even when the action is "cut" with
+	YYERROR or other.
+	* tests/actions.at (Exotic Dollars): Instead of using unused
+	values, check that the warning is issued.
+
+2005-12-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Improve wording for unused-value warnings.
+
+2005-12-22  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc, data/yacc.c, data/glr.c, data/c.m4
+	(b4_yysymprint_generate): Rename as...
+	(b4_yy_symbol_print_generate): this.
+	Generate yy_symbol_print instead of yysymprint.
+	Generate also yy_symbol_value_print, and use it.
+
+2005-12-22  Akim Demaille  <akim@epita.fr>
+
+	* NEWS: Warn about unused values.
+	* src/symlist.h, src/symlist.c (symbol_list, symbol_list_new): Add
+	a `used' member.
+	(symbol_list_n_get, symbol_list_n_used_set): New.
+	(symbol_list_n_type_name_get): Use symbol_list_n_get.
+	* src/scan-gram.l (handle_action_dollar): Flag used symbols.
+	* src/reader.c (grammar_current_rule_check): Check that values are
+	used.
+	* src/symtab.c (symbol_print): Accept 0.
+	* tests/existing.at: Remove the type information.
+	Empty the actions.
+	Remove useless actions (beware of mid-rule actions: perl -000
+	-pi -e 's/\s*\{\}(?=[\n\s]*[|;])//g').
+	* tests/actions.at (Exotic Dollars): Use unused values.
+	* tests/calc.at: Likewise.
+	* tests/glr-regression.at (No users destructors if stack 0 deleted):
+	Likewise.
+
+	* src/gram.c (rule_useful_p, rule_never_reduced_p): Use
+	rule_useful_p.
+
+2005-12-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Undo 2005-12-01 tentative license wording change.  The wording is
+	still being reviewed by the lawyers, and we don't want to wait for
+	them before publishing a test release.  For now, revert to the
+	previous wording.
+	* NEWS: Undo 2005-12-01 change.
+	* data/glr.c: Revert to previous license wording.
+	* data/glr.cc: Likewise.
+	* data/lalr1.cc: Likewise.
+	* data/location.cc: Likewise.
+	* data/yacc.c: Likewise.
+
+	* NEWS: Reword %destructor vs YYABORT etc.
+	* data/glr.c: Use American spacing, for consistency.
+	* data/glr.cc: Likewise.
+	* data/lalr1.cc: Likewise.
+	* data/yacc.c: Likewise.
+	* data/yacc.c: Reformat comments slightly.
+	* doc/bison.texinfo: Replace "non-" with "non" when that makes sense,
+	for consistency.  Fix some spelling errors and reword recently-included
+	text slightly.
+	* tests/cxx-type.at: Cast results of malloc, for C++.
+
+2005-12-21  Joel E. Denny  <address@hidden>
+
+	* tests/cxx-type.at: Construct a tree, count the parents of shared
+	nodes, and free each node once and only once.  Previously, the memory
+	for semantic values was leaked instead.
+
+2005-12-21  Joel E. Denny  <address@hidden>
+
+	* data/glr.c (struct yyGLRStack): If pure, add yyval and yyloc members.
+	(yylval, yylloc): If pure, #define to yystackp->yyval and
+	yystackp->yyloc similar to yychar and yynerrs.
+	(yyparse): If pure, remove local yylval and yylloc. Add local
+	yystackp to accommodate pure definitions of yylval and yylloc.
+	(b4_lex_param, b4_lyyerror_args, b4_lpure_args): If pure, change
+	yylvalp and yyllocp to &yylval and &yylloc.
+	(nerrs, char, lval, lloc): If pure, add #define's for b4_prefix[]
+	namespace. Previously, nerrs and char were missing, but lval and lloc
+	weren't necessary.
+	(yyprocessOneStack, yyreportSyntaxError, yyrecoverSyntaxError): Remove
+	yylvalp and yyllocp parameters since, if pure, these are now always
+	accessible through yystackp.  If not pure, they are still accessible
+	globally.
+	* data/glr.c, data/yacc.c (YYLLOC_DEFAULT): Change `if (N)' to
+	`if (YYID (N))' to pacify lint.
+
+2005-12-21  Akim Demaille  <akim@epita.fr>
+
+	YYACCEPT, YYERROR, and YYABORT, as user actions, should not
+	destroy the RHS symbols of a rule.
+	* data/yacc.c (yylen): Initialize to 0.
+	Keep its value to the number of items to possibly shift.
+	In particular, a regular successful parse that ends on YYFINAL by
+	a (internal) YYACCEPT must not have yylen != 0.
+	(yyerrorlab, yyreturn): Pop the RHS.
+	Reorder a bit to emphasize the `shifting' bits of code.
+	(YYPOPSTACK): Now accept a number of items to pop.
+	* data/lalr1.cc: Likewise.
+	* data/glr.c: Formatting changes.
+	Use goto instead of fall through.
+	* doc/bison.texinfo (Destructor Decl): Complete.
+
+2005-12-20  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	* Makefile.am: DJGPP specific files added to EXTRA_DIST.
+	* djgpp/Makefile.maint: Fix PACKAGE variable computation.
+	* djgpp/config.bat: Replace every occurrence of the file name
+	scan-gram-c.c with c-scan-gram.c. The same for scan-skel-c.c with
+	c-scan-skel.c to conform with the 8.3 file name restriction on MSDOS.
+	* djgpp/config.sed: Replace every occurrence of the file name
+	scan-gram-c.c with c-scan-gram.c. The same for scan-skel-c.c with
+	c-scan-skel.c to conform with the 8.3 file name restriction on MSDOS.
+	* djgpp/djunpack.bat: DJGPP specific file.
+	* djgpp/fnchange.lst: DJGPP specific file.
+	* djgpp/README.in: Add new information about how to unpack the bison
+	source on MSDOS and other systems which have 8.3 file name restrictions
+	using djunpack.bat and fnchange.lst.
+
+2005-12-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap (build_cvs_prefix): Remove; unused.
+	(CVS_PREFIX): Adjust to yesterday's Savannah reorganization
+	when getting gnulib.
+
+2005-12-12  "Joel E. Denny" <jdenny@ces.clemson.edu>
+
+	* data/glr.c: Reorder typedef declarations for structs to match order
+	of struct declarations.
+	Rename yystack everywhere to yystackp except in yyparse where it's not
+	a pointer.
+	(yyglrShift): Change parameter YYSTYPE yysval to YYSTYPE* yyvalp for
+	consistency.
+	(yyis_table_ninf): Change 0 to YYID (0) to pacify lint.
+	(yyreportSyntaxError): Add /*ARGSUSED*/ to pacify lint.
+	(yyparse): Change while (yytrue) to while ( YYID (yytrue)) to pacify
+	lint.
+
+2005-12-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/sets.at (Accept): Fix typos in regular expression used to
+	sed out the final state number.
+
+	Work around portability problem on Solaris 10: flex-generated
+	files include <stdio.h> before <config.h>, which messes up
+	because the latter defines __EXTENSIONS__.  Address the problem
+	by creating two new little files that include <config.h> first,
+	then include the flex-generated files.  Rewrite everyone else
+	to include <config.h> first, as well.
+	* lib/timevar.c: Always include "config.h".
+	* src/Makefile.am (bison_SOURCES): Replace scan-gram.l with
+	scan-gram-c.c, and scan-skel.l with scan-skel-c.c.
+	(EXTRA_bison_SOURCES): New macro.
+	* src/scan-gram-c.c, src/scan-skel-c.c: New files.
+	* src/system.h: Don't include config.h.
+	* src/LR0.c: Include <config.h> first.
+	* src/assoc.c: Likewise.
+	* src/closure.c: Likewise.
+	* src/complain.c: Likewise.
+	* src/conflicts.c: Likewise.
+	* src/derives.c: Likewise.
+	* src/files.c: Likewise.
+	* src/getargs.c: Likewise.
+	* src/gram.c: Likewise.
+	* src/lalr.c: Likewise.
+	* src/location.c: Likewise.
+	* src/main.c: Likewise.
+	* src/muscle_tab.c: Likewise.
+	* src/nullable.c: Likewise.
+	* src/output.c: Likewise.
+	* src/parse-gram.y: Likewise.
+	* src/print.c: Likewise.
+	* src/print_graph.c: Likewise.
+	* src/reader.c: Likewise.
+	* src/reduce.c: Likewise.
+	* src/relation.c: Likewise.
+	* src/state.c: Likewise.
+	* src/symlist.c: Likewise.
+	* src/symtab.c: Likewise.
+	* src/tables.c: Likewise.
+	* src/uniqstr.c: Likewise.
+	* src/vcg.c: Likewise.
+
+	* src/parse-gram.y: Fix minor problems uncovered by lint.
+	(current_lhs, current_lhs_location): Now static.
+	(current_assoc): Remove unused variable.
+
+	Cleanups so that Bison-generated parsers have less lint.
+	* data/c.m4 (b4_yydestruct_generate, b4_yysymprint_generate):
+	Prepend /*ARGSUSED*/, for lint's sake.
+	* data/glr.c (YYUSE): Properly parenthesize, and use an alternate
+	definition if 'lint' is defined.
+	(YYID): New macro (or function, if lint).
+	All uses of /*CONSTCOND*/0 replaced by YYID(0).
+	* data/yacc.c: Likewise.
+	* data/glr.c (yyuserAction, yyuserMerge, yy_reduce_print):
+	(yyrecoverSyntaxError): Prepend /*ARGSUSED*/.
+	* data/glr.cc (YYLLOC_DEFAULT): Omit /*CONSTCOND*/ since this code
+	is C++ only.
+	* data/lalr1.cc (YYUSE): Just use a cast, since this code is C++ only.
+	* data/yacc.c (YYSTACK_FREE) [defined YYSTACK_ALLOC]:
+	Use YYID(0) rather than 0, for lint.
+	(yystrlen): Rewrite to avoid lint warning about ptrdiff_t overflow.
+	(yysyntax_error): Rewrite to avoid lint warnings about parenthesization.
+
+2005-12-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/glr-regression.at
+	(Improper handling of embedded actions and dollar(-N) in GLR parsers):
+	Close memory leak reported by twlevo.
+
+2005-12-06  "Joel E. Denny" <jdenny@ces.clemson.edu>
+
+	* data/glr.c (yyprocessOneStack, yyparse): Synchronize the shift for
+	all stacks.
+	(yyparse): Iterate another stack in order to call user destructors.
+	* tests/glr-regression.at (No users destructors if stack 0 deleted):
+	New test case.
+	(Duplicated user destructor for lookahead): This test now is expected
+	to succeed.
+
+2005-12-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Document the following change.
+	* data/yacc.c: Say "parser skeleton" rather than "file", since
+	it's no longer just a file.
+	* data/glr.c: Grant a special exception for C GLR parsers, that
+	reads like the already-existing exception for C LALR(1) parsers.
+	* data/glr.cc: Likewise.
+	* data/lalr1.cc: Likewise.
+	* data/location.cc: Likewise.
+	* data/yacc.c: Reword the "written by" statement to clarify that
+	it was the parser skeleton, not the entire output file.
+	* data/glr.c: Written by Paul Hilfinger.
+	* data/glr.cc: Written by Akim Demaille.
+	* data/lalr1.cc: Likewise.
+
+2005-11-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (yy_reduce_print, YY_REDUCE_PRINT):
+	Fix typos in previous change that broke 'make check'.
+	YY_REDUCE_PRINT cannot be a pseudo-varargs macro; that isn't
+	supported in C.
+	* tests/calc.at (_AT_CHECK_CALC,_AT_CHECK_CALC_ERROR):
+	Don't check NUM-STDERR-LINES, since the output format is fluctuating.
+	We can revert this once things settle down.
+
+	* src/conflicts.c (conflicts_print): Don't print file name twice
+	when %expect fails because there were no conflicts.
+	* doc/bison.texinfo (Expect Decl): Tighten up wording in previous
+	change.
+	* tests/conflicts.at (%expect not enough, %expect too much):
+	(%expect with reduce conflicts): Adjust to new behavior.
+
+2005-11-18  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (conflicts_print): Unsatisfied %expectation are
+	errors.
+	* NEWS: Document this.
+	* doc/bison.texinfo (Expect Decl): Likewise.
+
+2005-11-16  Akim Demaille  <akim@epita.fr>
+
+	Generalize the display of semantic values and locations in traces.
+	* data/glr.c (yy_reduce_print): Fix indices (again).
+	* data/c++.m4 (b4_rhs_value, b4_rhs_location): Don't expect
+	literal integers.
+	* data/lalr1.cc (yyreduce_print): Rename as...
+	(yy_reduce_print): this.
+	Display values and locations.
+	* data/yacc.c (yy_reduce_print): Likewise.
+	(YY_REDUCE_PRINT): Adjust to pass the required arguments.
+	(yysymprint): Move higher to be visible from yy_reduce_print).
+	(yyparse): Adjust.
+	* tests/calc.at: Adjust the expected length of the traces.
+
+2005-11-14  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c (yy_reduce_print): The loop was quite wrong: type are
+	from 1 to N, while values and location start at 0.
+	(b4_rhs_location, b4_rhs_value): Add parens around $1 and $2.
+
+2005-11-14  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c (yy_reduce_print): Fix the $ number.
+
+2005-11-14  Akim Demaille  <akim@epita.fr>
+
+	"Use" parse parameters.
+	* data/c.m4 (b4_parse_param_for, b4_parse_param_use): New.
+	* data/glr.c, data/glr.cc: Use them.
+	* data/glr.c (YYUSE): Have a C++ definition that supports
+	non-pointer types.
+
+2005-11-14  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c (yyexpandGLRStack): Declare only if defined.
+
+2005-11-14  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.cc: New.
+	* data/m4sugar/m4sugar.m4 (m4_prepend): New.
+
+2005-11-12  Akim Demaille  <akim@epita.fr>
+
+	Let position and location be PODs.
+	* data/location.cc (position::initialize, location::initialize): New.
+	(position::position, location::location): Define only if
+	b4_location_constructors is defined.
+	* data/lalr1.cc (b4_location_constructors): Define it for backward
+	compatibility.
+	* doc/bison.texinfo (Initial Action Decl): Use initialize.
+
+2005-11-12  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: Move the body of the ctor and dtor into the
+	parser file (instead of the header).
+	Wrap the implementations in a "namespace yy".
+
+2005-11-12  Akim Demaille  <akim@epita.fr>
+
+	Have glr.c include its header file when created.
+	* data/glr.c (b4_shared_declarations): New.
+	Output them verbatim in the parser if !%defines, otherwise
+	output then in the header file, and include it instead.
+
+2005-11-11  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c: Comment changes.
+
+2005-11-11  Akim Demaille  <akim@epita.fr>
+
+	When yydebug, report semantic and location values for reductions.
+	* data/glr.c (yy_reduce_print): Report the semantic values and the
+	locations.
+	(YY_REDUCE_PRINT): Adjust.
+	(yyglrReduce): Use them.
+	(b4_rhs_value, b4_rhs_location): Remove m4_eval invocations.
+	* data/c.m4 (b4_yysymprint_generate): Specify the const arguments.
+	* tests/calc.at (_AT_CHECK_CALC_ERROR): Remove the reduction
+	traces.
+
+2005-11-10  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c (yynewGLRStackItem, YY_RESERVE_GLRSTACK): New.
+	(yyaddDeferredAction, yyglrShift, yyglrShiftDefer): Use them.
+	(yyexpandGLRStack, YYRELOC): Define only when YYSTACKEXPANDABLE.
+
+2005-11-09  Albert Chin-A-Young  <china@thewrittenword.com>
+
+	* m4/cxx.m4, examples/Makefile.am: Don't build
+	examples/calc++ if no C++ compiler is available.  (trivial change)
+
+2005-11-09  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-skel.l: Use a couple of asserts.
+
+2005-11-03  Akim Demaille  <akim@epita.fr>
+
+	In some (weird) cases, the final state number is incorrect.
+	Reported by Alexandre Duret-Lutz.
+	* src/LR0.c (state_list_append): Remove the computation of
+	final_state.
+	(save_reductions): Do it here.
+	(get_state): Alpha conversion.
+	(generate_states): Use a for loop.
+	* src/gram.h (item_number_is_rule_number)
+	(item_number_is_symbol_number): New.
+	* src/state.c: Use assert.
+	* src/system.h: Include assert.h.
+	* tests/sets.at (Accept): New.
+
+2005-10-30  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
+
+	* data/glr.c (yyfill): Adjust comment.
+	(yyresolveAction): Initialize default location properly
+	for empty right-hand sides.
+	(yydoAction): Ditto.
+	Add comment explaining apparently dead code.
+	* tests/glr-regression.at
+	(Incorrectly initialized location for empty right-hand side in GLR):
+	New test.
+
+2005-10-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap (cleanup_gnulib): New function.  Use it to clean up
+	gnulib when interrupted.  This fixes some race conditions and
+	works around some portability problems (one noted by Paul
+	Hilfinger).
+
+2005-10-22  Akim  <akim@epita.fr>
+
+	* Makefile.cfg: Adjust to config -> build-aux.
+	Reported by twledo.
+
+2005-10-21  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_yydestruct_generate, b4_yysymprint_generate): Pass
+	the %parse-params.
+	* data/glr.c (YY_SYMBOL_PRINT, yydestroyGLRState): Adjust.
+	* data/yacc.c (b4_Pure_if): Rename as...
+	(b4_yacc_pure_if): this.
+	(YY_SYMBOL_PRINT, yyparse): Adjust.
+	* doc/bison.texinfo: Formatting changes.
+
+2005-10-21  Akim Demaille  <akim@epita.fr>
+
+	Finish the transition config -> build-aux.
+	* configure.ac, Makefile.am: Use build-aux.
+	* config/prev-version, config/announce-gen, config/Makefile.am:
+	Move to...
+	* build-aux/prev-version, build-aux/announce-gen,
+	* build-aux/Makefile.am: here.
+
+2005-10-14  Akim Demaille  <akim@epita.fr>
+
+	* examples/calc++/test: Use set -x only when VERBOSE.
+
+2005-10-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Bison now warns if it finds a stray `$' or `@' in an action.
+	* src/scan-gram.l (<SC_BRACED_CODE>[$@]): Implement this.
+
+2005-10-13  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-skel.l: Output the base name parts of the parser and
+	header file names.
+	* tests/output.at (AT_CHECK_OUTPUT): Support subdirectories, and
+	additional checks.
+	Use this to exercise C++ outputs in subdirs.
+	Reported by Oleg Smolsky.
+
+2005-10-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/c.m4 (b4_c_function_def): Look at __C99_FUNC__, not at
+	__STDC_VERSION__, as IBM cc 7.0 doesn't define the latter either.
+	Problem reported by John P. Hartmann.
+	* data/yacc.c (YYMODERN_C): Likewise.  Don't define if the user has
+	already defined it.
+
+2005-10-12  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y (version_check): Exit 63 to please missing
+	(stands for "version mismatch).
+	* tests/input.at, doc/bison.texinfo: Adjust.
+
+2005-10-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Work around portability problems with Visual Age C compiler
+	(xlc and xlC_r) reported by John P. Hartmann.
+	* data/location.cc (initial_column, initial_line): Remove.
+	All uses replaced by 0 and 1.
+	* src/scan-gram.l (gram_wrap): Redefine to avoid bug in flex 2.5.31
+	that xlc complains about.
+	* src/scan-skel.l (skel_wrap): Likewise.
+	* data/c.m4 (b4_c_function_def): Look at __STDC_VERSION__ as well
+	as __STDC__.
+	* data/yacc.c (YYMODERN_C): New macro, which also looks at
+	__STDC_VERSION__.  Use it everywhere instead of looking at
+	__STDC__ and __cplusplus.
+
+2005-10-10  Akim Demaille  <akim@epita.fr>
+
+	* examples/calc++/test: Be quiet unless VERBOSE.
+
+2005-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/c.m4 (yydestruct, yysymprint):
+	Use YYUSE instead of casting to void.
+	* data/glr.c (YYUSE): New macro.
+	(yyuserMerge, yyreportAmbiguity, yyreportSyntaxError):
+	Use it instead of rolling our own.
+	(YYLLOC_DEFAULT, YYCHK, YYDPRINTF, YY_SYMBOL_PRINT, YY_REDUCE_PRINT):
+	(YYCHK1):
+	Use /*CONSTCOND*/ to suppress lint warnings.
+	* data/lalr1.cc (YYLLOC_DEFAULT, YY_SYMBOL_PRINT, YY_REDUCE_PRINT):
+	(YY_STACK_PRINT): Use 'false' not '0'.
+	(YYUSE): New macro.
+	(yysymprint_, yydestruct_): Use it instead of rolling our own.
+	* data/yacc.c (YYUSE): New macro.
+	(YYCOPY, YYSTACK_RELOCATE, YYBACKUP, YYLLOC_DEFAULT):
+	(YYDPRINTF, YY_SYMBOL_PRINT, YY_STACK_PRINT, YY_REDUCE_PRINT):
+	(yyerrorlab): Use /*CONSTCOND*/ to suppress lint warnings.
+
+
+	* data/m4sugar/m4sugar.m4 (_m4_map): New macro.
+	(m4_map, m4_map_sep): Use it.  Handle the empty list correctly.
+
+2005-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Undo the parts of the unlocked-I/O change that substituted
+	putc or puts for printf.  This might hurt performance a bit,
+	but some people prefer the printf style.
+	* data/c.m4 (yysymprint): Prefer printf to puts and putc.
+	* data/glr.c (YYFPUTC, YYFPUTS, YYDPUTS): Remove.
+	All uses replaced by YYFPRINTF and YYDPRINTF.
+	* data/yacc.c: Likewise.
+	* lib/bitset.c (bitset_print): Likewise.
+	* lib/bitsetv.c (bitsetv_dump, debug-bitsetv): Prefer printf to
+	putc and puts.
+	* lib/lbitset.c (debug_lbitset): Likewise.
+	* src/closure.c (print_firsts, print_fderives): Likewise.
+	* src/gram.c (grammar_dump): Likewise.
+	* src/lalr.c (look_ahead_tokens_print): Likewise.
+	* src/output.c (escaped_output): Likewise.
+	(user_actions_output): Break apart two printfs.
+	* src/parse-gram.y (%printer): Prefer printf to putc and puts.
+	* src/reduce.c (reduce_print): Likewise.
+	* src/state.c (state_rule_look_ahead_tokens_print): Likewise.
+	* src/system.h: Include unlocked-io.h rathe than stdio.h.
+
+	* data/glr.c (yyuserMerge, yyreportAmbiguity, yyreportSyntaxError):
+	Use assignments rather than casts-to-void to suppress
+	unused-variable warnings.  This pacifies 'lint'.
+	* data/lalr1.cc (yysymprint_, yydestruct_): Use a call to suppress
+	unused-variable warnings.
+
+2005-10-03  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	* Makefile.am: DJGPP specific files added to EXTRA_DIST.
+
+2005-10-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Use unlocked I/O for a minor performance improvement on hosts like
+	GNU/Linux and Solaris that support unlocked I/O.  The basic idea
+	is to use the gnlib unlocked-io module, and to prefer putc and
+	puts to printf when either will work (since the latter doesn't
+	come in an unlocked flavor).
+	* bootstrap (gnulib_modules): Add unlocked-io.
+	* data/c.m4 (yysymprint): Prefer puts and putc to printf.
+	* data/glr.c (YYFPUTC, YYFPUTS, YYDPUTS): New macros.
+	Prefer them to YYFPRINTF and YYDPRINTF if either will do,
+	and similarly for puts and putc and printf.
+	* data/yacc.c: Likewise.
+	* lib/bitset.c (bitset_print): Likewise.
+	* lib/bitset.h [USE_UNLOCKED_IO]: Include unlocked-io.h.
+	* lib/bitsetv.c (bitsetv_dump, debug-bitsetv): Prefer putc and puts
+	to printf.
+	* lib/lbitset.c (debug_lbitset): Likewise.
+	* src/closure.c (print_firsts, print_fderives): Likewise.
+	* src/gram.c (grammar_dump): Likewise.
+	* src/lalr.c (look_ahead_tokens_print): Likewise.
+	* src/output.c (escaped_output): Likewise.
+	(user_actions_output): Coalesce two printfs.
+	* src/parse-gram.y (%printer): Prefer putc and puts to printf.
+	* src/reduce.c (reduce_print): Likewise.
+	* src/state.c (state_rule_look_ahead_tokens_print): Likewise.
+	* src/system.h: Include unlocked-io.h rather than stdio.h.
+
+	* data/lalr1.cc: Don't put an unmatched ' in a dnl comment, as
+	this confuses xgettext.
+
+2005-10-02  Akim Demaille  <akim@epita.fr>
+
+	* bootstrap (gnulib_modules): Add strverscmp.
+	* lib/.cvsignore: Add strverscmp.c, strverscmp.h.
+	* m4/.cvsignore: Add strverscmp.m4.
+	* src/parse-gram.y (%require): New token, new rule.
+	(version_check): New.
+	* src/scan-gram.l (%require): Adjust.
+	* tests/input.at (AT_REQUIRE): New.
+	Use it.
+	* doc/bison.texinfo (Require Decl): New.
+	(Calc++ Parser): Use %require.
+
+2005-10-02  Akim Demaille  <akim@epita.fr>
+
+	* data/location.cc: New.
+
+2005-10-02  Paul Eggert  <eggert@cs.ucla.edu>,
+	    Akim Demaille  <akim@epita.fr>
+
+	Make sure -odir/foo.cc creates dir/location.hh etc.
+	* src/files.h (spec_outfile, parser_file_name, spec_name_prefix)
+	(spec_file_prefix, spec_verbose_file, spec_graph_file)
+	(spec_defines_file): Now const.
+	(dir_prefix): New.
+	(short_base_name): Remove.
+	* src/files.c: Adjust.
+	(dirname.h): Include.
+	(base_name): Don't prototype it.
+	(finput): Remove, duplicates gram_in.
+	(full_base_name, short_base_name): Replace by...
+	(all_but_ext, all_but_tab_ext): these.
+	(compute_base_names): Rename as...
+	(compute_file_name_parts): this.
+	Update to compute the new variables, including dir_prefix.
+	Adjust dependencies.
+	* src/output.c (prepare): Output them.
+	* src/reader.c: Adjust to use gram_in, not finput.
+	* src/scan-skel.l (@dir_prefix@): New.
+
+2005-10-02  Juan Manuel Guerrero  <juan.guerrero@gmx.de>
+
+	* lib/subpipe.c: New function end_of_output_subpipe() added
+	to allow support for non-posix systems. This is a no-op function
+	for posix systems.
+
+	* lib/subpipe.h: New function end_of_output_subpipe() added
+	to allow support for non-posix systems. This is a no-op function
+	for posix systems.
+
+	* src/output.c (output_skeleton): Use end_of_output_subpipe() to
+	handle the lack of pipe/fork functionality on non-posix systems.
+
+	* djgpp/Makefile.maint: DJGPP specific file.
+
+	* djgpp/README.in: DJGPP specific file.
+
+	* djgpp/config.bat: DJGPP specific configuration file.
+
+	* djgpp/config.sed: DJGPP specific configuration file.
+
+	* djgpp/config.site: DJGPP specific configuration file.
+
+	* djgpp/config_h.sed: DJGPP specific configuration file.
+
+	* djgpp/subpipe.c: DJGPP specific replacement file for lib/subpipe.c.
+
+	* djgpp/subpipe.h: DJGPP specific replacement file for lib/subpipe.h.
+
+2005-10-02  Akim Demaille  <akim@epita.fr>
+
+	* data/location.cc: New, extract from...
+	* data/lalr1.cc: here.
+	(location.hh): Include it after the user prologue, in case the
+	filename type is defined by the user.
+	Forward declation location and position before the pre-prologue.
+	(yyresult_): Rename as...
+	(yyresult): this, it's a local variable, not an attribute.
+	* data/Makefile.am (dist_pkgdata_DATA): Adjust.
+
+2005-10-01  Akim Demaille  <akim@epita.fr>
+
+	* examples/extexi: Restore the #line generation.
+
+2005-09-30  Akim Demaille  <akim@epita.fr>,
+	    Alexandre Duret-Lutz <adl@gnu.org>
+
+	Move the token type and YYSTYPE in the parser class.
+	* data/lalr1.cc (stack.hh, location.hh): Include earlier.
+	(parser::token): New, from the moved free definition of tokens.
+	(parser::semantic_value): Now a full definition instead of an
+	indirection to YYSTYPE.
+	(b4_post_prologue): No longer included in the header file, but
+	in the implementation file.
+	* doc/bison.texi (C+ Language Interface): Update.
+	* src/parse-gram.y: Support unary %define.
+	* tests/actions.at: Define global_tokens_and_yystype for backward
+	compatibility until we update the tests.
+	* tests/calc.at: Idem.
+	(first_line, first_column, last_line, last_column): Define for lalr1.cc
+	to simplify the code.
+
+2005-09-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Port to SunOS 4.1.4, which lacks strtoul and strerror.
+	Ah, the good old days!  Problem reported by Peter Klein.
+	* bootstrap (gnulib_modules): Add strerror, strtoul.
+	* lib/.cvsignore: Add strerror.c, strtol.c, strtoul.c
+	* m4/.cvsignore: Add strerror.m4, strtol.m4, strtoul.m4.
+
+2005-09-29  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_error_verbose_if): New.
+	* data/lalr1.cc: Use it.
+	(YYERROR_VERBOSE_IF): Remove.
+	(yyn_, yylen_, yystate_, yynerrs_, yyerrstatus_): Remove as
+	parser members, replaced by...
+	(yyn, yylen, yystate, yynerss, yyerrstatus): these parser::parse
+	local variables.
+	(yysyntax_error_): Takes the state number as argument.
+	(yyreduce_print_): Use the argument yyrule, not the former
+	attribute yyn_.
+
+2005-09-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap (gnulib_modules): Add verify.
+	* lib/.cvsignore: Add verify.h.
+	* src/getargs.c: Use ARGMATCH_VERIFY rather than verify.
+	* src/system.h (verify): Remove.
+	Include verify.h instead.
+	* src/tables.c (tables_generate): Use new API for 'verify'.
+
+2005-09-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Do not use
+	local variables whose names begin with 'yy'.
+	* tests/calc.at (_AT_DATA_CALC_Y): Likewise.
+	Trivial changes from Joel E. Denny.
+
+	* bootstrap (gnulib_modules): Remove alloca.  Bison doesn't need
+	it itself.
+	* src/main.c (main) [C_ALLOCA]: Don't flush alloca'ed memory; we
+	don't use alloca any more.
+
+	* data/yacc.c [YYSTACK_USE_ALLOCA && !defined __GNUC__ && ! defined
+	__BUILTIN_VA_ARG_INCR && ! defined _AIX && ! defined _MSC_VER &&
+	defined _ALLOCA_H]: Don't include <stdlib.h>; not needed in this case.
+	* tests/torture.at (Exploding the Stack Size with Alloca): Adjust
+	to match yacc.c, to test more hosts.
+
+2005-09-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (YYSIZE_T): Reindent to make it clearer.  This
+	doesn't affect behavior.
+	(YYSTACK_ALLOC) [YYSTACK_USE_ALLOCA]: Improve support for
+	Solaris, AIX, MSC.
+	(_STDLIB_H): Renamed from YYINCLUDED_STDLIB_H.  All uses changed.
+	This works a bit better with glibc, if user code has already included
+	stdlib.h.
+	* doc/bison.texinfo (Bison Parser): Document that users can't
+	arbitrarily use malloc and free for other purposes.  Document
+	that <alloca.h> and <malloc.h> might be included.
+	(Table of Symbols): Under YYSTACK_USE_ALLOCA, Don't claim that the
+	user must declare alloca.
+
+	* HACKING (release): Forwarn the Translation Project about
+	stable releses.
+
+2005-09-20  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c: Use b4_token_enums, not b4_token_enums_defines.
+
+2005-09-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (YYSIZE_MAXIMUM): New macro.
+	(YYSTACK_ALLOC_MAXIMUM): Use it.
+	(yysyntax_error): New function.
+	(yyparse) [YYERROR_VERBOSE]: Don't leak memory indefinitely if
+	multiple syntax errors are reported, and alloca is being used.
+	Instead, reallocate buffers twice as big each time, so that
+	we waste at most half the allocated memory.  Start with a small
+	(128-byte) buffer that will suffice in most cases anyway.
+	Use yysyntax_error to do most of the work.
+
+	* doc/bison.texinfo (Error Reporting, Table of Symbols):
+	yynerrs is the number of errors reported, not the number of
+	errors encountered.
+
+	* tests/glr-regression.at (Duplicated user destructor for lookahead):
+	Mark it as expected to fail.
+	Cast result of malloc; problem reported by twlevo@xs4all.nl.
+	* tests/actions.at, tests/calc.at, tests/glr-regression.at:
+	Don't start user-code symbols with "yy", to avoid name space problems.
+
+2005-09-19  Akim Demaille  <akim@epita.fr>
+
+	Remove the traits, failed experiment.
+	It never proved useful, and anyway because of the current
+	definition, it was not possible to have several specialization of
+	this traits, making it useless.
+	* data/lalr1.cc (yy:traits): Remove.
+	Inline its definitions in the parser class.
+
+2005-09-19  Akim Demaille  <akim@epita.fr>
+
+	* tests/atlocal.in (LIBS): Pass INTLLIBS to address failures on at
+	least Mac OSX with a /usr/local install of gettext.
+
+2005-09-19  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (yyparse): Rename yylooka and yyilooka as yychar
+	and yytoken for similarity with the other skeletons.
+
+2005-09-19  Akim Demaille  <akim@epita.fr>
+
+	* NEWS, configure.ac: update version number to 2.1a.
+
+2005-09-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 2.1.
+
+	* NEWS: Remove notice of yytname change, since it was never in an
+	official release.
+	* data/glr.c (yydestroyGLRState): Rename local var to avoid shadowing
+	diagnostic.
+	* src/output.c (prepare): Likewise.
+	* data/lalr1.cc (YYERROR_VERBOSE_IF): New macro.
+	(yysyntax_error_): Use it to avoid GCC warning when YYERROR_VERBOSE
+	is not defined.  This is an awful hack, but it's enough for now.
+	All callers changed.
+	* tests/glr-regression-at (make_value): Args are const pointers now,
+	to avoid GCC warning.
+	(Duplicated user destructor for lookahead): New test.  Currently
+	skipped.  It fails on my host but I'm not sure it'll always fail.
+
+2005-09-16  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h (struct symbol): Declare the printer and destructor
+	as const, to avoid accidental calls to free.
+	(symbol_destructor_set, symbol_printer_set): Adjust.
+	* src/symtab.c: Adjust.
+
+2005-09-16  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_token_enums): New.
+	(b4_token_defines): Rename as...
+	(b4_token_enums_defines): this.
+	(b4_token_defines): New, output only the #defines.
+	* data/yacc.c, data/glr.c: Adjust.
+	* data/lalr1.cc: Use b4_token_enums instead of b4_token_enums_defines.
+	* data/c.m4 (b4_yydestruct_generate, b4_yysymprint_generate): Define
+	as default values.
+
+2005-09-16  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (yylex_): Remove, inline its code.
+	(yyreport_syntax_error_): Remove, replaced by...
+	(yysyntax_error_): this which returns a string and leaves to the
+	caller the call to the users' error function.
+	(yylooka_, yyilooka_, yylval, yylloc, yyerror_range_, yyval, yyloc):
+	Move from members of the parser object...
+	(yylooka, yyilooka, yylval, yylloc, yyerror_range, yyval, yyloc):
+	to local variables of the parse function.
+
+2005-09-16  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Calc++ Parser): Don't promote defining YYEOF
+	since it's in Bison's name space.
+
+2005-09-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyresolveValue): Add default case to pacify
+	gcc -Wswitch-default.  Problem reported by twlevo@xs4all.nl.
+
+	* NEWS: Document when yyparse started to return 2.
+	* doc/bison.texinfo (Parser Function): Document when yyparse
+	returns 2.
+
+	* data/lalr1.cc: Revert part of previous change, as it's incompatible.
+	(b4_filename_type): Renamed back from b4_file_name_type.  All uses
+	changed.
+	(class position): file_name -> filename (reverting).  All uses changed.
+
+2005-09-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* examples/calc++/Makefile.am ($(calc_sources_generated)): Don't
+	do anything if $@ exists.  This reverts part of the 2005-07-07
+	patch.
+
+2005-09-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* Makefile.am (EXTRA_DIST): Do not distribute REFERENCES; it
+	contains obsolete information and isn't worth distributing as a
+	separate file anyway.
+	* data/glr.c [defined YYSETJMP]: Don't include <setjmp.h>.
+	(YYJMP_BUF, YYSETJMP, YYLONGJMP) [!defined YYSETJMP]: New macros.
+	All uses of jmp_buf, setjmp, longjmp changed to use these instead.
+	(yyparse): Abort if user code uses longjmp to throw an unexpected
+	value.
+
+2005-09-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/c.m4 (b4_identification): Define YYBISON_VERSION.
+	Suggested by twlevo@xs4all.nl.
+
+	* data/glr.c (YYCHK1): Do not assume YYE is in range.
+	This avoids a diagnostic from gcc -Wswitch-enum.
+	Problem reported by twlevo@xs4all.nl.
+
+	* doc/bison.texinfo: Don't use "filename", as per GNU coding
+	standards.  Use "file name" or "file" or "name", depending on
+	the context.
+	(Invocation): The output of "bison hack/foo.y" goes to foo.tab.c,
+	not to hack/foo.tab.c.
+	(Calc++ Top Level): 2nd arg of main is not const.
+	* data/glr.c: b4_filename -> b4_file_name.
+	* data/lalr1.cc: Likewise.  Also, b4_filename_type -> b4_file_name_type.
+	All uses changed.
+	(class position): filename -> file_name.  All uses changed.
+	* data/yacc.c: b4_filename -> b4_file_name.
+	* lib/bitset.h: filename -> file_name in local vars.
+	* lib/bitset_stats.c: Likewise.
+	* src/files.c: Likewise.
+	* src/scan-skel.l ("@output ".*\n): Likewise.
+	* src/files.c (file_name_split): Renamed from filename_split.
+	* src/muscle_tab.c (muscle_init): Output b4_file_name, not b4_filename.
+
+2005-09-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* lib/.cvsignore: Add pipe-safer.c, stdio--.h, unistd--.h,
+	to accommodate latest gnulib.
+
+	* tests/glr-regression.at (Duplicate representation of merged trees):
+	Add casts to pacify g++.  Problem reported by twlevo@xs4all.nl.
+
+	* bootstrap: Add comment as to why the AM_LANGINFO_CODESET hack is
+	needed.
+
+2005-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yydestroyGLRState): Renamed from yydestroyStackItem.
+	All uses changed.  Invoke user destructor after an error during a
+	split parse (trivial change from Joel E. Denny).
+
+	* tests/glr-regression.at
+	(User destructor after an error during a split parse):  New test case.
+	Problem reported by Joel E. Denny in:
+	http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00029.html
+
+2005-08-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* README-cvs: Give URLs for recommended tools.
+	Mention Gzip version problem, and bootstrapping issues.
+	Remove troubleshooting section, as it's somewhat obsolete.
+
+	* bootstrap (no_cache): New var, to accommodate different wget
+	variants.  Use it instead of '-C off'.  Problem reported by
+	twlevo@xs4all.nl.
+
+	* data/glr.c (yydestroyStackItem): New function.
+	(yyrecoverSyntaxError, yyreturn): Use it to improve quality of
+	debugging information.  Problem reported by Joel E. Denny.
+
+2005-08-25  Akim Demaille  <akim@epita.fr>
+
+	* tests/local.at (AT_COMPILE_CXX): Pass $LINKS too.
+
+2005-08-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyrecoverSyntaxError, yyreturn):
+	Don't invoke destructor on unresolved entries.
+	* tests/glr-regression.at
+	(User destructor for unresolved GLR semantic value): New test case.
+	Problem reported by Joel E. Denny in:
+	http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00016.html
+
+2005-08-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* lib/.cvsignore: Remove realloc.c, strncasecmp.c, xstrdup.c.
+	Add strnlen.c.
+	* m4/.cvsignore: Remove codeset.m4, gettext.m4, lib-ld.m4,
+	lib-prefix.m4, po.m4.
+
+	* data/glr.c (yyreturn): Use "Cleanup:" rather than "Error:"
+	in yydestruct diagnostic, since it might not be an error.
+	Problem reported by Joel Denny near end of
+	<http://lists.gnu.org/archive/html/help-bison/2005-07/msg00040.html>.
+	* data/lalr1.cc (yyerturn): Likewise.
+	* data/yacc.c (yyreturn): Likewise.
+	* tests/calc.at (_AT_CHECK_CALC_ERROR): Adjust to the above change.
+
+	* src/files.c: Remove obsolete FIXME comment.
+
+	* data/glr.c (YY_SYMBOL_PRINT): Append a newline, for consistency
+	with the other templates, and to fix bogus run-on messages such
+	as the one reported at the end of
+	<http://lists.gnu.org/archive/html/help-bison/2005-07/msg00040.html>.
+	All callers changed to avoid the newline.
+	(yyprocessOneStack): Output two lines rather than one, to accommodate
+	the above change.  This changes the debug output format slightly.
+
+	* data/glr.c (yyresolveValue): Fix redundant parse tree problem
+	reported by Joel E. Denny in
+	<http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00004.html>
+	(trivial change).
+	* tests/glr-regression.at (Duplicate representation of merged trees):
+	New test, from Joel E. Denny in:
+	<http://lists.gnu.org/archive/html/help-bison/2005-07/msg00013.html>.
+	* THANKS: Add Joel E. Denny.
+
+	* configure.ac (AC_INIT): Bump to 2.0c.
+
+2005-07-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 2.0b.
+
+	* Makefile.am (SUBDIRS): Put examples before tests, so that
+	"make check" doesn't finish with "All 1 tests passed".
+
+	* tests/regression.at (Token definitions): Don't rely on
+	AT_PARSER_CHECK for data that contains backslashes.  It currently
+	uses 'echo', and 'echo' isn't portable if its argument contains
+	backslashes.  Problem found on OpenBSD 3.4.  Also, do not assume
+	that the byte '\0xff' is not printable in the C locale; it is,
+	under OpenBSD 3.4 (!).  Luckily, '\0x80' through '\0x9e' are
+	not printable, so use '\0x81' to test.
+
+	* data/glr.c (YYOPTIONAL_LOC): Define even if it's not a recent
+	version of GCC, since the macro is used with non-GCC compilers.
+
+	Fix core dump reported by Pablo De Napoli in
+	<http://lists.gnu.org/archive/html/bug-bison/2005-07/msg00053.html>.
+	* tests/regression.at (Invalid inputs with {}): New test.
+	* src/parse-gram.y (token_name): Translate type before using
+	it as an index.
+
+	* data/glr.c (ATTRIBUTE_UNUSED): Remove, since it infringes on
+	the user's name space.  All uses changed to __attribute__
+	((__unused__)).
+	(yyFail, yyMemoryExhausted, yyreportAmbiguity):
+	Add __attribute__ ((__noreturn__)).
+
+	* etc/clcommit: Remove.  We weren't using it, and it failed
+	"make maintainer-distcheck".
+	* Makefile.maint: Merge from coreutils.
+	(CVS_LIST, CVS_LIST_EXCEPT): New macros.
+	(syntax-check-rules): Change list of rules as described below.
+	(sc_cast_of_alloca_return_value, sc_dd_max_sym_length):
+	(sc_file_system, sc_obsolete_symbols, sc_prohibit_atoi_atof):
+	(sc_prohibit_jm_in_m4, sc_root_tests, sc_tight_scope):
+	(sc_trailing_space): New rules.
+	(sc_xalloc_h_in_src): Remove.
+	(sc_cast_of_argument_to_free, sc_cast_of_x_alloc_return_value):
+	(sc_space_tab, sc_error_exit_success, sc_changelog):
+	(sc_system_h_headers, sc_sun_os_names, sc_unmarked_diagnostics):
+	(makefile-check, po-check, author_mark_check):
+	(makefile_path_separator_check, copyright-check):
+	Use grep -n, to make it easier to find violations.
+	Use CVS_LIST and CVS_LIST_EXCEPT.
+	(header_regexp, h_re): Remove.
+	(dd_c): New macro.
+	(sc_dd_max_sym_length, .re-list, news-date-check): New rules.
+	(my-distcheck): Use more-modern GCC flags.
+	(signatures, %.asc): Remove.
+	(rel-files, announcement): Remove signatures.
+	Restore old updating code, even though we don't use it, so
+	that we're the same as coreutils.
+	(alpha, beta, major): Depend on news-date-check.
+	Make the upload commands.
+
+	* data/c.m4, data/lalr1.cc, data/yacc.c: Normalize white space.
+	* lib/abitset.h, lib/bbitset.h, lib/bitset.h: Likewise.
+	* lib/bitset_stats.c, lib/ebitset.h, lib/lbitset.c: Likewise.
+	* lib/libitset.h, lib/timevar.c, lib/vbitset.h: Likewise.
+	* src/Makefile.am, src/gram.c, src/muscle_tab.h: Likewise.
+	* src/parse-gram.y, src/system.h, src/tables.c, src/vcg.c: Likewise.
+	* src/vcg_defaults.h, tests/cxx-type.at, tests/existing.at: Likewise.
+	* tests/sets.at: Likewise.
+
+	* data/m4sugar/m4sugar.m4: Sync from Autoconf, except that
+	we comment out the Autoconf version number.
+	* doc/bison.texinfo (Calc++ Scanner): Don't use atoi, as
+	it's error-prone and "make maintainer-distcheck" rejects it.
+
+	* lib/subpipe.c: Include <fcntl.h> without checking for HAVE_FCNTL_H.
+	Indent calls to "error" to pacify "make maintainer-distcheck",
+	when the calls are not intended to be translated.
+	* m4/subpipe.m4 (BISON_PREREQ_SUBPIPE): Don't check for fcntl.h.
+
+	* src/Makefile.am (DEFS): Use +=, to pacify
+	"make maintainer-distcheck".
+	(bison_SOURCES): Add scan-skel.h.
+	(sc_tight_scope): New rule, from coreutils.
+
+	* src/files.c (src_extension, header_extension):
+	Now static, not extern.
+	* src/getargs.c (short_options): Likewise.
+	* src/muscle_tab.c (muscle_table): Likewise.
+	* src/parse-gram.y (current_class, current_type, current_prec):
+	Likewise.
+	* src/reader.c (grammar_end, previous_rule_end): Likewise.
+	* src/getargs.h: Redo comments to pacify "make maintainer-distcheck".
+	* src/main.c (main): Cast bindtextdomain and textdomain calls to
+	void, to avoid warning when NLS is disabled.
+	* src/output.c: Include scan-skel.h.
+	(scan_skel): Remove decl, since scan-skel.h does this.
+	(output_skeleton):
+	Indent calls to "error" to pacify "make maintainer-distcheck".
+	* src/print_graph.c: Don't include <obstack.h>, as system.h does this.
+	* src/reader.h (gram_end, gram_lineno): New decls to pacify
+	"make maintainer-distcheck".
+	* src/scan-skel.l (skel_lex, skel_get_lineno, skel_get_in):
+	(skel_get_out, skel_get_leng, skel_get_text, skel_set_lineno):
+	(skel_set_in, skel_set_out, skel_get_debug, skel_set_debug):
+	(skel_lex_destroy, scan_skel): Move these decls to...
+	* src/scan-skel.h: New file.
+	* src/uniqstr.c (uniqstr_assert):
+	Indent calls to "error" to pacify "make maintainer-distcheck".
+
+	* tests/Makefile.am ($(srcdir)/package.m4): Use $(VAR),
+	not @VAR@.
+
+	* tests/torture.at: Revamp to avoid misuse of atoi that
+	"make maintainer-distcheck" complained about.
+
+	* examples/extexi (message): Don't print a message more than once,
+	and omit line-number decoration that makes Emacs compile think
+	that informative messages are worth worrying about.
+
+2005-07-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* configure.ac: Update version number.
+
+	* Makefile.am (SUBDIRS): Add examples; somehow this got removed
+	accidentally.
+	* examples/calc++/calc++-parser.yy: Remove from CVS, as it's
+	autogenerated by the maintainer.
+	* examples/calc++/.cvsignore: Add *.yy.
+
+	* lib/bitset.c (bitset_alloc): Don't cast xcalloc result.
+	* lib/bitset_stats.c (bitset_stats_init): Likewise.
+	* lib/bitsetv.c (bitsetv_alloc): Likewise.
+
+	* po/POTFILES.in: Add lib/xalloc-die.c; remove lib/xmalloc.c.
+
+	* src/relation.c (relation_transpose): Rewrite to avoid bogus complaint
+	from maintainer-distcheck about casting the argument of 'free'.
+
+	* NEWS: Mention recent yytname changes.
+	* THANKS: Add Anthony Heading, twlevo@xs4all.nl.
+
+	* bootstrap: For translations that have not yet been upgraded to
+	the new runtime-po domain, prime the pump by extracting the
+	relevant strings from the obsolete translations.  This code can be
+	removed once the bison-runtime domain has been translated by each
+	team.
+
+	* src/scan-gram.l (<SC_PRE_CODE>.): Don't double-quote token names,
+	now that token names are already quoted.
+
+	Fix problem reported by Anthony Heading.
+	* data/glr.c (YYTOKEN_TABLE): New macro.
+	(yytname): Define if YYTOKEN_TABLE.
+	* data/yacc.c (YYTOKEN_TABLE, yytname): Likewise.
+	* data/lalr1.cc (YYTOKEN_TABLE, yytname_): Likewise.
+	(YYERROR_VERBOSE): Define the same way the other skeletons do.
+	* src/output.c (prepare_symbols): Output token_table_flag.
+
+2005-07-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyinitGLRStack, yyreturn): Don't call malloc
+	again if the first call fails.
+
+	* data/glr.c (yytnamerr): New function.
+	(yyreportSyntaxError): Use it to dequote most string literals.
+	* data/lalr1.c (yytname_): Renamed from yyname_, for compatibility
+	with other skeletons.  All uses changed.
+	(yytnameerr_): New function.
+	(yyreport_syntax_error): Use it to dequote most string literals.
+	* data/yacc.c (yytnamerr): New function.
+	(yyerrlab): Use it to decode most string literals.
+	* doc/bison.texinfo (Decl Summary, Calling Convention):
+	Clarify quoting convention of yytname.
+	* src/output.c (prepare_symbols): Quote all names.  This undoes
+	the 2005-04-17 change, which is now accomplished (mostly) via
+	changes in the parsers as described above.
+	* tests/regression.at (Token definitions, Web2c Actions):
+	Undo most 2005-04-17 change here, too.
+
+2005-07-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix more problems reported by twlevo@xs4all.nl.
+	* tests/cxx-type.at: Don't pipe output of ./types through sed to
+	remove trailing spaces.  This loses the exit status of ./types,
+	and isn't needed since ./types shouldn't be emitting trailing
+	spaces.
+	* data/glr.c (yyreturn): Don't pop stack if yyinitStateSet failed,
+	as the stack isn't valid in that case.
+
+	* src/scan-gram.l (gram_get_lineno, gram_get_in, gram_get_out):
+	(gram_get_leng, gram_get_text, gram_set_lineno, gram_set_in):
+	(gram_set_out, gram_get_debug, gram_set_debug, gram_lex_destroy):
+	Add declarations to pacify "gcc -Wmissing-prototypes" when flex 2.5.31
+	is used.
+	* src/scan-skel.l (skel_get_lineno, skel_get_in, skel_get_out):
+	(skel_get_leng, skel_get_text, skel_set_lineno, skel_set_in):
+	(skel_set_out, skel_get_debug, skel_set_debug, skel_lex_destroy):
+	Likewise.
+
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Work even with
+	overly-picky compilers that reject 'char *foo = "bar";'.
+
+	* src/symtab.c (SYMBOL_ATTR_PRINT, symbol_print): Direct output
+	to FILE * parameter, not to stderr.  This fixes a typo introduced
+	in the 2005-07-12 change.
+
+	* lib/subpipe.c (create_subpipe): Rewrite slightly to avoid
+	warnings from GCC 4.
+
+	* data/glr.c (yyexpandGLRStack, yyaddDeferredAction, yyexpandGLRStack):
+	(yyglrShiftDefer, yysplitStack):
+	Remove unused parameters b4_pure_formals.  All uses changed.
+	(yyglrShift): Remove unused parameters b4_user_formals.
+	All uses changed.
+	(yyglrReduce): Removed unused parameter yylocp.  All uses changed.
+
+2005-07-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Destructor cleanups and regularization among the three skeletons.
+	* NEWS: Document the behavior changes.
+	* data/glr.c (yyrecoverSyntaxError): Don't bother to pop the
+	stack before failing, as the cleanup code will do it for us now.
+	* data/lalr1.cc (yyerrlab): Likewise.
+	* data/glr.c (yyparse): Pop everything off the stack before
+	freeing it, so that destructors get called properly.
+	* data/lalr1.cc (yyreturn): Likewise.
+	* data/yacc.c (yyreturn): Pop and destroy the start symbol, too.
+	This is more consistent.
+	* doc/bison.texinfo (Destructor Decl): Mention more reasons
+	why destructors might be called.  1.875 -> 2.1.
+	(Destructor Decl, Decl Summary, Table of Symbols):
+	Some English-language cleanups for %destructor.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR):
+	Add output line for destructor of start symbol.
+	* tests/calc.at (AT_CHECK_CALC): Add one to line counts,
+	because of that same extra output line.
+
+	* NEWS: Document minor wording changes in diagnostics of
+	Bison-generated parsers.
+	* data/glr.c (yyMemoryExhausted): Renamed from yyStackOverflow.
+	Remove unused formals.  All uses changed.
+	(yyreportAmbiguity): "ambiguity detected" -> "syntax is ambiguous".
+	(yyparse): Rename yyoverflowlab to yyexhaustedlab.
+	* data/yacc.c (yyparse): "parser stack overflow" -> "memory exhausted".
+	Rename yyoverflowab to yyexhaustedlab.
+	When memory exhaustion occurs during syntax-error reporting,
+	report it separately rather than in a single diagnostic; this
+	eases translation.
+	* doc/bison.texinfo (Memory Management): Renamed from Stack Overflow.
+	(Memory Exhausted): Renamed from Parser Stack Overflow.
+	Revamp wording slightly to prefer "memory exhaustion".
+	* tests/actions.at: "parser stack overflow" -> "memory exhausted".
+
+	* data/c.m4 (b4_yysymprint_generate): Use YYFPRINTF, not fprintf.
+
+	Add i18n support to the GLR skeleton.  Partially fix the C++
+	skeleton; a C++ expert needs to finish this.  Remove debugging
+	msgids; there's little point to having them translated, since they
+	can be understood only by someone who can read the
+	(English-language) source code.
+
+	Generate runtime-po/bison-runtime.pot automatically, so that we
+	don't have to worry about garbage getting in that file.  We'll
+	make sure after the next official release that old msgids don't
+	get lost.  See
+	<http://lists.gnu.org/archive/html/bison-patches/2005-07/msg00119.html>.
+
+	* runtime-po/Makefile.in.in, runtime-po/bison-runtime.pot: Remove.
+	Now auto-generated.
+	* PACKAGING: Don't claim that Gawk, GCC, Perl use this method yet.
+	Fix typos in explanations of the runtime file.
+	* bootstrap: Change gettext keyword from YYI18N to YY_.
+	Use standard Makefile.in.in in runtime-po, since we'll arrange
+	for backward-compatible bison-runtime.po files in a different way.
+	* data/glr.c (YY_): New macro, from yacc.c.
+	(yyuserAction, yyreportAmbiguity, yyreportSyntaxError, yyparse):
+	Translate messages intended for users.
+	(yyreportSyntaxError): Change "virtual memory" to "memory" to match
+	the wording in the other skeletons.  We don't know that the memory
+	is virtual.
+	* data/lalr1.cc (YY_): Renamed from _.  All uses changed.
+	Use same method that yacc.c uses.
+	Don't translate debugging messages.
+	(yy::yyreport_syntax_error): Put in a FIXME for the i18n stuff;
+	it doesn't work (yet), and requires C++ expertise to fix.
+	* data/yacc.c (YY_): Renamed from YY18N.  All uses changed.
+	Move defn to a more logical place, to be consistent with other
+	skeletons.
+	Don't translate debugging messages.
+	Don't assume line numbers fit in unsigned int; use unsigned long fmts.
+	* doc/bison.texinfo: Mention <libintl.h>.  Change glibc cross reference
+	to gettext cross reference.  Add indexing terms.  Mention YYENABLE_NLS.
+	* runtime-po/POTFILES.in: Add data/glr.c, data/lalr1.cc.
+
+	Fix yyerror / yylex test glitches noted by twlevo@xs4all.nl.
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Have yyerror return
+	void, not int.
+	* tests/glr-regression.at (Badly Collapsed GLR States):
+	Likewise.
+	(Improper handling of embedded actions and dollar(-N) in GLR parsers):
+	yylex should return 0 at EOF rather than aborting.
+
+	Improve tests for stack overflow in GLR parser.
+	Problem reported by twlevo@xs4all.nl.
+	* data/glr.c (struct yyGLRStack): Remove yyerrflag member.
+	All uses removed.
+	(yyStackOverflow): Just longjmp, but with value 2 so that caller
+	can handle the problem.
+	(YYCHK1): Use goto (a la yacc.c) rather than setting a flag.
+	(yyparse): New local variable yyresult to record the result.
+	Use result of setjmp to set it, rather than storing itinto
+	struct.
+	(yyDone): Remove label.
+	(yyacceptlab, yyabortlab, yyoverflowlab, yyreturn): New labels,
+	to mimic yacc.c.  Do not discard lookahead if it's EOF (possible
+	if YYABORT is used).
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Exit with
+	yyparse status; put status > 1 into diagnostic.
+	Check that status==2 works.
+	* tests/calc.at, tests/cxx-type.at, tests/glr-regression.at:
+	Use exit status 3 for failure to open (which shouldn't happen).
+
+2005-07-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/conflicts.at (%nonassoc and eof):  Don't exit with status
+	1 on syntax error; just let yyparse do its thing.
+	* tests/glr-regression.at (Badly Collapsed GLR States): Likewise.
+	* tests/torture.at (AT_DATA_STACK_TORTURE): Likewise.
+	(Exploding the Stack Size with Alloca):
+	(Exploding the Stack Size with Malloc):
+	Expect exit status 2, not 1, since the parser is supposed to blow
+	its stack.  Problem reported by twlevo@xs4all.nl.
+
+	* data/glr.c (yyparse): Don't assume that the initial calls
+	to YYMALLOC succeed; in that case, yyparse incorrectly returned 0.
+	Print a stack-overflow message and fail instead.
+	Initialize the line-number information before creating the stack,
+	so that the stack-overflow message can report line zero safely.
+
+2005-07-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix problems reported by twlevo@xs4all.nl.
+	* data/glr.c (YYSTACKEXPANDABLE): Don't define if already defined.
+	(yyuserMerge): Provide a default case if b4_mergers is empty.
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Define YYSTACKEXPANDABLE.
+	* tests/glr-regression.at
+	(Improper handling of embedded actions and dollar(-N) in GLR parsers):
+	Add casts to pacify C++ compilers.
+	* tests/glr-regression.at (Improper merging of GLR delayed action
+	sets): Declare yylex before using it.
+	* tests/Makefile.am (maintainer-check-g++): Fix a stray
+	$(GXX) that escaped the renaming of GXX to CXX.  Remove bogus
+	test for valgrind; valgrind is independent of g++.
+	(maintainer-check-posix): Add _POSIX2_VERSION=200112, to check
+	for compatibility with POSIX 1003.1-2001 (if running coreutils).
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Port to stricter C++.
+	Use a destructor, so that we can expand the stack.  Change
+	YYSTYPE to char * so that we can free it.  Cast result of malloc.
+
+2005-07-13  Paul Hilfinger  <hilfingr@CS.Berkeley.EDU>
+
+	* data/glr.c (yyuserAction): Fix uninitialized variable that caused
+	a valgrind failure.  Problem reported by twlevo@xs4all.nl.
+
+2005-07-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* PACKAGING: New file, suggested by Bruno Haible and taken from
+	similar wording in gettext's PACKAGING file.
+	* NEWS: Mention PACKAGING.
+	* Makefile.am (EXTRA_DIST): Add PACKAGING.
+
+2005-07-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Document recent i18n improvements.
+	* bootstrap: Get runtime translations into runtime-po.
+	Create runtime-po files automatically, if possible.
+	* configure.ac: Invoke BISON_I18N, so that we eat our own dog food.
+	* data/yacc.c: Rewrite inclusion of <libintl.h> so that ENABLE_NLS
+	does not infringe on the user's name space.
+	(YYENABLE_NLS): Renamed from ENABLE_BISON_NLS.
+	* doc/bison.texinfo (Internationalization): Revamp the English
+	and Texinfo syntax a bit, to try to make it clearer.
+	(Bison Options, Option Cross Key): Mention --print-localedir.
+	* m4/bison-i18n.m4 (BISON_I18N): Rename ENABLE_BISON_NLS to
+	YYENABLE_NLS.  Quote a bit more.
+	* runtime-po/.cvsignore: New file.
+	* runtime-po/Makefile.in.in (mostlyclean): Remove *.old.pot.
+	* runtime-po/Rules-quot: Remove; now created by bootstrap.
+	* runtime-po/quot.sed: Likewise.
+	* runtime-po/boldquot.sed: Likewise.
+	* runtime-po/en@quot.header: Likewise.
+	* runtime-po/en@boldquot.header: Likewise.
+	* runtime-po/insert-header.sin: Likewise.
+	* runtime-po/remove-potcdate.sin: Likewise.
+	* runtime-po/Makevars: Likewise.
+	* runtime-po/LINGUAS: Likewise.
+	* runtime-po/de.po: Likewise; we will rely on the translation project
+	to maintain this, so "bootstrap" should get it.
+	* src/getarg.c (PRINT_LOCALEDIR_OPTION): Let the C compiler determine
+	its value.
+	* src/main.c (main): Bind the bison-runtime domain, too.
+
+2005-07-12  Bruno Haible  <bruno@clisp.org>
+
+	* data/yacc.c: Include <libintl.h> when NLS is enabled.
+	(YYI18N): Renamed from _. Use dgettext when NLS is enabled.
+	* po/POTFILES.in: Remove autogenerated file src/parse-gram.c.
+	* runtime-po: New directory.
+	* runtime-po/Makefile.in.in: New file, copied from po/, with modified
+	$(DOMAIN).pot-update rule, so that old messages are never dropped.
+	* runtime-po/Rules-quot: New file, copied from po/.
+	* runtime-po/quot.sed: Likewise.
+	* runtime-po/boldquot.sed: Likewise.
+	* runtime-po/en@quot.header: Likewise.
+	* runtime-po/en@boldquot.header: Likewise.
+	* runtime-po/insert-header.sin: Likewise.
+	* runtime-po/remove-potcdate.sin: Likewise.
+	* runtime-po/Makevars: New file.
+	* runtime-po/POTFILES.in: New file.
+	* runtime-po/LINGUAS: New file.
+	* runtime-po/bison-runtime.pot: New file.
+	* runtime-po/de.po: New file.
+	* m4/bison.m4: New file.
+	* Makefile.am (SUBDIRS): Add runtime-po.
+	(aclocaldir, aclocal_DATA): New variables.
+	* configure.ac: Add AC_CONFIG_FILES of runtime-po/Makefile.in.
+	Define aclocaldir.
+	* src/getargs.c (usage): Document --print-localedir option.
+	(PRINT_LOCALEDIR_OPTION): New enum item.
+	(long_options): Add --print-localedir option.
+	(getargs): Handle --print-localedir option.
+	* doc/bison.texinfo (Bison Parser): Remove paragraph about _().
+	(Internationalization): New section.
+
+2005-07-12  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h, src/symtab.c (symbol_print): Swap the arguments,
+	for consistency with the rest of the code.
+	* src/symlist.h, src/symlist.c (symbol_list_print): Ditto.
+	Add separators.
+
+2005-07-12  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y: Use %printer instead of YYPRINT.
+
+2005-07-12  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h, src/symtab.c (symbol_print): New.
+	* src/symlist.h, src/symlist.c (symbol_list_print): New.
+	* src/symlist.c (symbol_list_n_type_name_get): Report the culprit.
+
+2005-07-12  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c (b4_syncline): Fix (swap) the definitions of
+	b4_at_dollar and b4_dollar_dollar.
+
+2005-07-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Mystery Conflicts): Add reference to DeRemer
+	and Pennello's paper.
+
+2005-07-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (yyparse): Undo previous patch.  Instead,
+	set yylsp[0] and yyvsp[0] only if the initial action
+	sets yylloc and yylval, respectively.
+
+	* data/yacc.c (yyparse): In the initial action, set
+	yylsp[0] and yyvsp[0] rather than yylloc and yylval.
+	This avoids the use of undefined variables if the initial
+	action does not set yylloc and/or yylval.
+
+2005-07-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* examples/calc++/calc++-driver.cc, examples/calc++/calc++-driver.hh:
+	* examples/calc++/calc++-scanner.ll, examples/calc++/calc++.cc:
+	Remove from CVS.  These files are automatically generated.
+	* examples/extexi: Clarify that this file is now part of Bison,
+	not GNU M4, and that it works with any POSIX-compatible Awk.
+	* examples/calc++/Makefile.am (run_extexi): Remove; not used.
+	($(calc_extracted)): Renamed from $(calc_sources_extracted),
+	so that we also get calc++-parser.yy.  Geneate it.
+	Use $(AWK), not gawk, since any conforming Awk will do.
+	Put comment before action, since older 'make' can't handle comment
+	in action.
+	$(BUILT_SOURCES): List all built sources, not just some of them.
+	$(MAINTAINERCLEANFILES): Remove *.stamp, and all built sources.
+	$($(srcdir)/calc++-parser.stamp): Work even if POSIXLY_CORRECT.
+	$($(calc_sources_generated)): Remove unnecessary test for existence
+	of target.  (This had a shell syntax error anyway; a stray "x".)
+	(calc_extracted): List $(srcdir)/calc++-parser.yy, not
+	calc++-parser.yy.
+	* examples/.cvsignore, examples/calc++/.cvsignore: New files.
+
+	* bootstrap (gnulib_modules): Add gettext, now that it's no longer
+	implied by the other modules.
+
+2005-07-06  Akim Demaille  <akim@epita.fr>
+
+	Bind examples/calc++ to the package.
+	* examples/calc++/Makefile: Remove, replaced by...
+	* examples/calc++/Makefile.am: ... this new file.
+	* examples/calc++/test: Remove input.
+	* examples/calc++/compile: Remove.
+	* examples/Makefile.am: New.
+	* configure.ac, Makefile.am: Adjust.
+	* doc/Makefile.am (clean-local): New, for more recent texi2dvis.
+
+2005-07-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyFail): Drastically simplify; since the format argument
+	never had any % directives, we can simply pass it to yyerror.
+	(yyparse): Use "t a; a=b;" rather than "t a = b;" when a will
+	be modified later, as that is the usual style in glr.c.
+	Problems reported by Paul Hilfinger.
+
+	Rewrite GLR parser to catch more buffer overrun, storage exhaustion,
+	and size overflow errors.
+	* data/glr.c: Include <stdio.h> etc. after user prolog, not before,
+	in case the user prolog sets feature-test macros like _GNU_SOURCE.
+	(YYSIZEMAX): New macro.
+	(yystpcpy): New function, taken from yacc.c.
+	(struct yyGLRStack.yyspaceLeft): Now size_t, not int.
+	(yyinitGLRStack, yyfreeGLRstack): Remove unnecessary forward decls,
+	so that we don't have to maintain their signatures.
+	(yyFail): Check for buffer overflow, by using vsnprintf rather
+	than vsprintf.  Allocate a bigger buffer if possible.
+	Report an error if buffer allocation fails.
+	(yyStackOverflow): New function.
+	(yyinitStateSet, yyinitGLRStack): Return a boolean indicating whether
+	the initialization was successful.  It might fail if storage was
+	exhausted.
+	(yyexpandGLRStack): Add more checks for storage allocation failure.
+	Use yyStackOverflow to report failures.
+	(yymarkStackDeleted, yyglrShift, yyglrShiftDefer, yydoAction):
+	(yysplitStack, yyprocessOneStack, yyparse, yypstack):
+	Don't assume stack number fits in int.
+	(yysplitStack): Check for storage allocation failure.
+	(yysplitStack, yyprocessOneStack): Add pure_formals, so that we
+	can print diagnostics on storage allocation failure.  All callers
+	changed.
+	(yyresolveValue): Use yybool for boolean.
+	(yyreportSyntaxError): Check for size-calculation overflow.
+	This code is taken from yacc.c.
+	(yyparse): Check for storage allocation errors when allocating
+	the initial stack.
+
+2005-07-05  Akim Demaille  <akim@epita.fr>
+
+	Extract calc++ from the documentation.
+	* doc/bison.texinfo (Calc++): Add the extraction marks.
+	* examples/extexi: New, from the aborted GNU Programming 2E.
+	Separate the different paragraph of a file with empty lines.
+	* examples/Makefile: Use it to extract the whole calc++ example.
+
+2005-06-24  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (C++ Parser Interface): Use defcv to define
+	class typedefs.
+
+2005-06-22  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (C++ Language Interface): First stab.
+	(C++ Parsers): Remove.
+
+2005-06-22  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (yylex_): Honor %lex-param.
+
+2005-06-22  Akim Demaille  <akim@epita.fr>
+
+	Start a set of simple examples.
+	* examples/calc++/Makefile, examples/calc++/calc++-driver.cc,
+	* examples/calc++/calc++-driver.hh,
+	* examples/calc++/calc++-parser.yy,
+	* examples/calc++/calc++-scanner.ll, examples/calc++/calc++.cc,
+	* examples/calc++/compile, examples/calc++/test: New.
+
+2005-06-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (malloc, free) [defined __cplusplus]: Wrap inside
+	extern "C" {}.  This fixes a problem reported by Paul Hilfinger,
+	which stems from the 2005-05-27 patch.
+
+2005-06-06  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
+
+	* data/glr.c: Modify treatment of unused parameters to permit use
+	of g++ (which doesn't allow __attribute__ ((unused)) for parameters).
+
+2005-05-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix infringement on user name space reported by Janos Zoltan Szabo.
+	* data/yacc.c (yyparse): strlen -> yystrlen.
+
+2005-05-30  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (_): New.
+	Translate the various messages.
+
+2005-05-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix infringement on user name space reported by Bruno Haible.
+	* data/yacc.c (YYSIZE_T): Define first, so that later decls can use it.
+	Prefer GCC's __SIZE_TYPE__ if available, so that we don't infringe on
+	the user's name space.
+	(alloca): Include <stdlib.h> to get it, if it's not built in.
+	(YYMALLOC, YYFREE): Define only if needed.
+	(malloc, free): Declare, but only if needed, as this infringes on
+	the user name space.
+
+2005-05-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix BeOS, FreeBSD, MacOS porting problems reported by Bruno Haible.
+	* lib/bitset.c (bitset_print): Don't assume size_t can be printed
+	with %d format.
+	* lib/ebitset.c (min, max): Undef before defining.
+	* lib/vbitset.c (min, max): Likewise.
+	* lib/subpipe.c (create_subpipe): Save local variables in case
+	vfork clobbers them.
+
+2005-05-24  Bruno Haible  <bruno@clisp.org>
+
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Add support for the
+	error message syntax used by gcc-4.0.
+
+2005-05-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* README: Mention m4 1.4.3.  Remove obsolete advice about
+	Sun Forte Developer 6 update 2, VMS, and MS-DOS.
+
+	* bootstrap: Remove workaround for problem I encountered with
+	gettext 0.14.1; it seems to be fixed now.
+
+2005-05-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 2.0a.
+
+	* src/files.c: Include "stdio-safer.h"; this fixes a typo in
+	the previous change.
+
+	Various maintainer cleanups.
+	* .cvsignore: Add a.exe, a.out, b.out,, conf[0-9]*, confdefs*,
+	conftest*, for benefit of CVS commands run at the same time as
+	"configure".  Add build-aux, since "bootstrap" now creates it and
+	its subfiles.
+	* Makefile.cfg (move_if_change): Remove.
+	* Makefile.maint: Remove the update stuff; we now use "bootstrap".
+	(ftp-gnu, www-gnu, move_if_change, local_updates, update):
+	(po_repo, do-po-update, po-update, wget_files, get-targets):
+	(config.guess-url_prefix, config.sub-url_prefix):
+	(ansi2knr.c-url_prefix, texinfo.tex-url_prefix):
+	(standards.texi-url_prefix, make-stds.texi-url_prefix, taget, url):
+	($(get-targets), cvs-files, automake_repo, wget-update, cvs-update):
+	Remove.
+	* configure.ac (AC_CONFIG_AUX_DIR): Change from config to build-aux;
+	this is now the recommended name.
+	* config/.cvsignore: Remove config.guess, config.rpath, config.sub,
+	depcomp, install-sh, mdate-sh, missing, mkinstalldirs, texinfo.tex,
+	ylwrap.  These files now go into build-aux.
+	* config/move-if-change: Remove.
+	* config/prev-version.txt: Bump from 1.75 to 2.0.
+
+	* bootstrap: Add stdio-safer, unistd-safer modules.
+	Remove m4/glibc2.m4 (introduced by latest gnulib, but
+	we don't need it).
+	* lib/.cvsignore: Add dup-safer.c, fd-safer.c,
+	fopen-safer.c, stdio-safer.h, unistd-safer.h.
+	* lib/subpipe.c: Include "unistd-safer.h".
+	(create_subpipe): Make sure all the newly-created
+	file descriptors are > 2, so that diagnostics don't
+	get sent down them (which might cause Bison to hang, in theory).
+	* m4/.cvsignore: Add stdio-safer.m4, unistd-safer.m4.
+	* src/files.c (xfopen): Use fopen_safer, not fopen.
+
+	* data/lalr1.cc (yy::]b4_parser_class_name[::parse): Port
+	yesterday's yacc.c fix.
+
+2005-05-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c, data/lalr1.cc: Update copyright date.
+
+	Fix a destructor bug reported by Wolfgang Spraul in
+	<http://lists.gnu.org/archive/html/bug-bison/2005-05/msg00042.html>.
+	* data/yacc.c (yyabortlab): Don't call destructor, and
+	don't set yychar to EMPTY.
+	(yyoverflowlab): Don't call destructor.
+	(yyreturn): Call destructor, if yychar is neither YYEOF nor YYEMPTY.
+	* tests/calc.at (AT_CHECK_CALC): Expect one fewer output lines,
+	since we no longer output the message "discarding lookahead token
+	end of input ()".
+
+2005-05-20  Paul Hilfinger  <hilfingr@CS.Berkeley.EDU>
+
+	* data/glr.c (YY_SYMBOL_PRINT): Don't print newline at end to
+	fix a small glitch in debugging output.
+	(yyprocessOneStack, yyrecoverSyntaxError, yyparse): Print newline
+	after YY_SYMBOL_PRINT where needed.
+
+	(struct yyGLRState): Add some comments.
+	(struct yySemanticOption): Add some comments.
+	(union yyGLRStackItem): Add comment.
+
+	(yymergeOptionSets): Correct this to properly perform the union,
+	avoiding infinite reported by Michael Rosien.
+	Update comment.
+
+	* tests/glr-regression.at: Add test for GLR merging error reported
+	by M. Rosien.
+
+2005-05-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* COPYING, ChangeLog, GNUmakefile, HACKING, Makefile.am,
+	Makefile.cfg, Makefile.maint, NEWS, README, README-alpha,
+	README-cvs, TODO, bootstrap, configure.ac, data/Makefile.am,
+	data/README, data/c.m4, data/glr.c, data/lalr1.cc, data/yacc.c,
+	data/m4sugar/m4sugar.m4, doc/Makefile.am, doc/bison.texinfo,
+	doc/fdl.texi, doc/gpl.texi, doc/refcard.tex, lib/Makefile.am,
+	lib/abitset.c, lib/abitset.h, lib/bbitset.h, lib/bitset.c,
+	lib/bitset.h, lib/bitset_stats.c, lib/bitset_stats.h,
+	lib/bitsetv-print.c, lib/bitsetv-print.h, lib/bitsetv.c,
+	lib/bitsetv.h, lib/ebitset.c, lib/ebitset.h, lib/get-errno.c,
+	lib/get-errno.h, lib/lbitset.c, lib/lbitset.h, lib/libiberty.h,
+	lib/main.c, lib/subpipe.c, lib/subpipe.h, lib/timevar.c,
+	lib/timevar.def, lib/timevar.h, lib/vbitset.c, lib/vbitset.h,
+	lib/yyerror.c, m4/cxx.m4, m4/m4.m4, m4/subpipe.m4, m4/timevar.m4,
+	m4/warning.m4, src/LR0.c, src/LR0.h, src/Makefile.am, src/assoc.c,
+	src/assoc.h, src/closure.c, src/closure.h, src/complain.c,
+	src/complain.h, src/conflicts.c, src/conflicts.h, src/derives.c,
+	src/derives.h, src/files.c, src/files.h, src/getargs.c,
+	src/getargs.h, src/gram.c, src/gram.h, src/lalr.c, src/lalr.h,
+	src/location.c, src/location.h, src/main.c, src/muscle_tab.c,
+	src/muscle_tab.h, src/nullable.c, src/nullable.h, src/output.c,
+	src/output.h, src/parse-gram.c, src/parse-gram.h,
+	src/parse-gram.y, src/print.c, src/print.h, src/print_graph.c,
+	src/print_graph.h, src/reader.c, src/reader.h, src/reduce.c,
+	src/reduce.h, src/relation.c, src/relation.h, src/scan-gram.l,
+	src/scan-skel.l, src/state.c, src/state.h, src/symlist.c,
+	src/symlist.h, src/symtab.c, src/symtab.h, src/system.h,
+	src/tables.c, src/tables.h, src/uniqstr.c, src/uniqstr.h,
+	src/vcg.c, src/vcg.h, src/vcg_defaults.h, tests/Makefile.am,
+	tests/actions.at, tests/c++.at, tests/calc.at, tests/conflicts.at,
+	tests/cxx-type.at, tests/existing.at, tests/glr-regression.at,
+	tests/headers.at, tests/input.at, tests/local.at, tests/output.at,
+	tests/reduce.at, tests/regression.at, tests/sets.at,
+	tests/synclines.at, tests/testsuite.at, tests/torture.at:
+	Update FSF postal mail address.
+
+2005-05-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/local.at (AT_COMPILE_CXX): Treat LDFLAGS like AT_COMPILE does.
+	Problem reported by Ralf Menzel.
+
+2005-05-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/actions.at: Test that stack overflow invokes destructors.
+	From Marcus Holland-Moritz.
+	* data/yacc.c (yyerrlab): Move the code that destroys the stack
+	from here....
+	(yyreturn): to here.  That way, destructors are called properly
+	even if the stack overflows, or the user calls YYACCEPT or
+	YYABORT.  Stack-overflow problem reported by Marcus Holland-Moritz.
+	(yyoverflowlab): Destroy the lookahead.
+
+2005-04-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (YYSTACK_ALLOC_MAXIMUM): Add more-descriptive comment.
+
+2005-04-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Bison-generated C parsers no longer quote literal strings
+	associated with tokens.
+	* src/output.c (prepare_symbols): Don't escape strings,
+	since users don't want to see C escapes.
+	* tests/calc.at (AT_CHECK_CALC): Adjust to lack of quotes
+	in diagnostics.
+	* tests/input.at (Torturing the Scanner): Likewise.
+	* tests/regression.at (Token definitions, Web2c Actions): Likewise.
+
+2005-04-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/torture.at (AT_INCREASE_DATA_SIZE): Skip the test if
+	the data size is known to be too small and we can't increase it.
+	This works around an HP-UX 11.00 glitch reported by Andrew Benham.
+
+2005-04-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/parse-gram.y: Include quotearg.h.
+	(string_as_id): Quote $1 before using it as a key, since the
+	lexer no longer quotes it for us.
+	(string_content): Don't strip quotes, since lexer no longer
+	quotes it for us.
+	* src/scan-gram.l: Include quotearg.h.
+	("\""): Omit quote.
+	("'"<SC_ESCAPED_CHARACTER>): Quote symbol before using it as
+	a key, since the rest of the lexer doesn't quote it.
+	* src/symtab.c (symbol_get): Don't quote symbol; caller does it now.
+	* tests/regression.at (Token definitions): Check for backslashes
+	in token strings.
+
+	* data/yacc.c (YYSTACK_ALLOC_MAXIMUM): New macro.
+	(YYSIZE_T): Define to unsigned long int when using an older compiler.
+	(yyparse): Revamp code to generate long syntax error message, to
+	make it easier to translate, and to avoid problems with arithmetic
+	overflow.  Change "virtual memory" to "memory" in diagnostic, since
+	we don't know whether the memory is virtual.
+
+2005-04-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Bison-generated C parsers now use the _ macro to
+	translate strings.
+	* data/yacc.c (_) [!defined _]: New macro.
+	All English strings wrapped inside this macro.
+	* doc/bison.texinfo (Bison Parser): Document _.
+	* po/POTFILES.in: Include src/parse-gram.c, since it now
+	includes translateable strings that parse-gram.y doesn't.
+
+2005-04-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/symtab.c (symbol_make_alias): Call symbol_type_set,
+	reverting the 2004-10-11 change to this function.
+	(symbol_check_alias_consistency): Don't call symbol_type_set
+	if the type name is already correct.
+	* tests/input.at (Typed symbol aliases): New test, from Tim Van Holder.
+
+2005-03-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/regression.at (Token definitions): Don't use a token named
+	c, as that generates a "#define c ..." that runs afoul of buggy
+	stdlib.h that uses the identifier c as a member of struct
+	drand48_data.  Problem reported by Horst Wente.
+
+2005-03-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap: Change translation URL from
+	http://www2.iro.umontreal.ca/~gnutra/po/maint/bison/ to
+	http://www.iro.umontreal.ca/translation/maint/bison/ to avoid
+	redirection glitches.  Problem reported by twlevo@xs4all.nl.
+
+2005-03-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/local.at (AT_COMPILE, AT_COMPILE_CXX): Don't put options
+	after operands; POSIX says this isn't portable for the c99 command.
+
+2005-03-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/glr-regression.at (glr-regr2a.y): Try to dump core
+	immediately if a data overrun has occurred; this may help us track
+	down what may be a spurious failure on MacOS.
+
+2005-03-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Respond to problems reported by twlevo@xs4all.nl.
+
+	* bootstrap: Use "trap - 0" rather than the unportable "trap 0".
+
+	* src/vcg.h: Comment fix.
+	* src/vcg_defaults.h: Parenthesize macro bodies to make them safe.
+	(G_CMAX): Change to -1 instead of INT_MAX.
+
+	* data/yacc.c (yyparse): Omit spaces before #line.
+
+2005-03-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/tables.c (state_number_to_vector_number): Put it inside an
+	"#if 0", since it's not currently used.  Problem reported by
+	Roland McGrath.
+
+2005-03-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/output.c (escaped_output): Renamed from
+	escaped_file_name_output, since we now use it for symbol tags as
+	well.  All uses changed.
+	(symbol_destructors_output, symbol_printers_output):
+	Escape symbol tags too.
+	Problem reported by Matyas Forstner in
+	<http://lists.gnu.org/archive/html/bug-bison/2005-03/msg00009.html>.
+
+	* src/muscle_tab.c (muscle_code_grow): Don't quote numbers; it's
+	not needed.
+	* src/output.c (user_actions_output, token_definitions_output,
+	symbol_destructors_output, symbol_printers_output): Likewise.
+	* src/reader.c (prologue_augment): Likewise.
+	* src/scan-gram.l (handle_action_dollar, handle_action_at): Likewise.
+
+	* src/vcg.c (output_edge): Don't quote linestyle arg.
+	Problem reported by twlevo@xs4all.nl.
+
+2005-02-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Semantic Tokens): Fix scoping problem in
+	example, reported by Derek M Jones.  Also, make the example even
+	more outrageous, to better illustrate how bad the problem is.
+
+2005-02-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Mfcalc Symtab): Correct the prototype for
+	putsym.  Typo reported by Sebastian Piping.
+
+2005-02-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Language and Grammar): some -> same
+	(Epilogue): int he -> in the
+	Typos reported by Sebastian Piping via Justin Pence.
+
+2005-02-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/glr-regression.at (Improper handling of embedded actions
+	and dollar(-N) in GLR parsers): Renamed from "Improper handling of
+	embedded actions and $-N in GLR parsers", work around an Autoconf bug
+	with dollar signs in test names.
+	* tests/input.at (Invalid dollar-n): Renamed from "Invalid \$n",
+	for a similar reason.
+
+2005-01-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/vcg.c (output_graph): G_VIEW -> normal_view in case someone
+	wants to redefine G_VIEW.
+
+2005-01-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/vcg.c (get_view_str): Remove case for normal_view.
+	Problem reported by twlevo@xs4all.nl.
+
+2005-01-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* configure.ac (O0CFLAGS, O0CXXFLAGS): Fix quoting bug.
+	Problem reported by twlevo@xs4all.nl.
+
+	* doc/bison.texinfo: Change @dircategory from "GNU programming
+	tools" to "Software development".  Requested by Richard Stallman
+	via Karl Berry.
+
+2005-01-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/c++.at (AT_CHECK_DOXYGEN): Don't use options after operands.
+	Problem reported by twlevo@xs4all.nl.
+
+2005-01-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (YYCOPY, yystpcpy, yyparse): Remove "register"
+	keyword; it's not needed with modern compilers, and it doesn't
+	affect correctness with older compilers.  Suggested by
+	twlevo@xs4all.nl.
+
+2005-01-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyuserAction): Add "default: break;" case to pacify
+	gcc -Wswitch-default.
+	* data/lalr1.cc (yy::]b4_parser_class_name[::parse): Likewise.
+	* data/yacc.c (yyparse): Likewise.
+
+2005-01-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/system.h (OUTPUT_EXT, TAB_EXT): Define only if not defined
+	already.  Let config.h define any nonstandard values.
+
+2005-01-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* tests/calc.at (_AT_DATA_CALC_Y): Use alarm (100), not alarm (10),
+	for the benefit of slower hosts.  Problem reported by
+	Nelson H. F. Beebe.
+
+2005-01-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/yacc.c (yyparse): Pacify non-GCC compilers about yyerrorlab
+	being defined and not used.
+	* data/lalr1.cc (yyparse): Likewise.
+	Use "if (false)" rather than "if (0)".
+
+2005-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* TODO: Mention that we should allow NUL bytes in tokens.
+
+2005-01-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/scan-skel.l (<<EOF>>): Don't close standard output.
+	Problem reported by Hans Aberg.
+
+2005-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/getargs.c (version): Happy new year; update overall
+	program copyright date from 2004 to 2005.
+
+	* src/scan-skel.l ("@output ".*\n): Don't close standard output.
+	Problem reported by Hans Aberg.
+	* tests/output.at (AT_CHECK_OUTPUT): New arg SHELLIO.
+	(Output file names.): Add a test for the case when standard output
+	is closed.
+
+2004-12-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (@copying): Update FDL version number to 1.2,
+	to fix an oversight in the Bison 2.0 manual.
+
+2004-12-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 2.0.  Reformat the existing news items since
+	1.875, so that related items are grouped together.
+	* configure.ac (AC_INIT): Bump version to 2.0.
+	* src/parse-gram.c, src/parse-gram.h: Regenerate with 2.0.
+
+	* tests/torture.at (Exploding the Stack Size with Alloca): Set
+	YYSTACK_USE_ALLOCA to 1 if __GNUC__ or alloca are defined;
+	otherwise, we're not testing alloca.  Unfortunately there's no
+	simple way to consult HAVE_ALLOCA here.
+
+	* data/lalr1.cc (yydestruct_): Pacify unused variable warning
+	for yymsg, too.
+
+	* src/LR0.c (new_itemsets): Use memset rather than zeroing by
+	hand.  This avoids a warning about comparing int to size_t when
+	GCC warnings are enabled.
+
+2004-12-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Bison-generated parsers no longer default to using the
+	alloca function (when available) to extend the parser stack, due
+	to widespread problems in unchecked stack-overflow detection.
+	* data/glr.c (YYMAXDEPTH): Remove undef when zero.  It's the user's
+	responsibility to set it to a positive value.  This lets the user
+	specify a value that is not a preprocessor constant.
+	* data/yacc.c (YYMAXDEPTH): Likewise.
+	(YYSTACK_ALLOC): Define only if YYSTACK_USE_ALLOCA is nonzero.
+	* doc/bison.texinfo (Stack Overflow): YYMAXDEPTH no longer needs
+	to be a compile-time constant.  However, explain the constraints on it.
+	Also, explain the constraints on YYINITDEPTH.
+	(Table of Symbols): Explain that alloca is no longer the default.
+	Explain the user's responsibility if they define YYSTACK_USE_ALLOCA
+	to 1.
+
+	* doc/bison.texinfo (Location Default Action): Mention that n must
+	be zero when k is zero.  Suggested by Frank Heckenbach.
+
+2004-12-22  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (parser::token_number_type, parser::rhs_number_type)
+	(parser::state_type, parser::semantic_type, parser::location_type):
+	Private, not public.
+	(parser::parse): Return ints, not bool.
+	Returning a bool introduces a problem: 0 corresponds to false, and
+	it seems weird to return false on success.  Returning true changes
+	the conventions for yyparse.
+	Alternatively we could return void and send an exception.
+	There is no clear consensus (yet?).
+	(state_stack, semantic_stack, location_stack): Rename as...
+	(state_stack_type, semantic_stack_type, location_stack_type): these.
+	Private, not public.
+	* tests/c++.at: New.
+	* tests/testsuite.at, tests/Makefile.am: Adjust.
+
+2004-12-21  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (parser::parse): Return a bool instead of an int.
+
+2004-12-21  Akim Demaille  <akim@epita.fr>
+
+	Don't impose std::string for filenames.
+
+	* data/lalr1.cc (b4_filename_type): New.
+	(position::filename): Use it.
+	(parser.hh): Move the inclusion of stack.hh and location.hh below
+	the user code, so that needed headers for the filename type can be
+	included first.
+	Forward declare them before the user code.
+	* tests/Makefile.am (check-local, installcheck-local): Pass
+	TESTSUITEFLAGS to the TESTSUITE.
+
+2004-12-20  Akim Demaille  <akim@epita.fr>
+
+	Use more STL like names: my_class instead of MyClass.
+
+	* data/lalr1.cc (LocationStack, LocationType, RhsNumberType)
+	(SemanticStack, SemanticType, StateStack, StateType)
+	(TokenNumberType, Stack, Slice, Traits, Parser::location)
+	(Parser::value): Rename as...
+	(location_stack, location_type, rhs_number_type, semantic_stack)
+	(semantic_type, state_stack, state_type, token_number_type, stack)
+	(slice, traits, parser::yylloc, parser::yylval): these.
+
+	* tests/calc.at, tests/regression.at, tests/actions.at: Adjust.
+
+2004-12-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (YYLLOC_DEFAULT): Use GNU spacing conventions.
+	* data/yacc.c (YYLLOC_DEFAULT): Likewise.
+
+2004-12-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Remove uses of 'short int' and 'unsigned short int'.  This raises
+	some arbitrary limits.  It uses more memory but nowadays that's
+	not much of an issue.
+
+	This change does not affect the generated parsers; that's a different
+	task, as some users will want to conserve memory there.
+
+	Ideally we should use size_t to represent all object counts, and
+	something like ptrdiff_t to represent signed differences of object
+	counts; but that will require more code-cleanup than I have the
+	time to do right now.
+
+	* src/LR0.c (allocate_itemsets, new_itemsets, save_reductions):
+	Use size_t, not int or short int, to count objects.
+	* src/closure.c (nritemset, closure): Likewise.
+	* src/closure.h (nritemset, closure): Likewise.
+	* src/nullable.c (nullable_compute): Likewise.
+	* src/print.c (print_core): Likewise.
+	* src/print_graph.c (print_core): Likewise.
+	* src/state.c (state_compare, state_hash): Likewise.
+	* src/state.h (struct state): Likewise.
+	* src/tables.c (default_goto, goto_actions): Likewise.
+
+	* src/gram.h (rule_number, rule): Use int, not short int.
+	* src/output.c (prepare_rules): Likewise.
+	* src/state.h (state_number, STATE_NUMBER_MAXIMUM, transitions,
+	errs, reductions): Likewise.
+	* src/symtab.h (symbol_number, SYMBOL_NUMBER_MAXIMUM, struct symbol):
+	Likewise.
+	* src/tables.c (vector_number, tally, action_number,
+	ACTION_NUMBER_MINIMUM): Likewise.
+	* src/output.c (muscle_insert_short_int_table): Remove.
+
+2004-12-17  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: Extensive Doxygenation.
+	(error_): Rename as...
+	(error): this, since it is visible to the user.
+	Adjust callers.
+	(Parser::message): Now an automatic variable from...
+	(Parser::yyreport_syntax_error_): here.
+	* tests/actions.at, tests/calc.at, tests/regression.at: Adjust to
+	Parser::error.
+	* tests/input.at: Escape $.
+
+2004-12-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (b4_lhs_value, b4_rhs_value, b4_rhs-location):
+	Parenthesize rhs to avoid obscure problems with mistakes like
+	"foo$$bar = foo$1bar;".  Problem reported by twlevo at xs4all.
+	* data/lalr1.cc (b4_lhs_value, b4_rhs_value, b4_lhs_location,
+	b4_rhs_location): Likewise.
+	* data/yacc.c (b4_lhs_value, b4_rhs_value, b4_lhs_location,
+	b4_rhs_location): Likewise.
+
+2004-12-16  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (yyreport_syntax_error_): Catch up with glr.c and
+	yacc.c: be sure to stay within yycheck_.
+	* tests/actions.at: Re-enable C++ tests.
+
+2004-12-16  Akim Demaille  <akim@epita.fr>
+
+	* src/print_graph.c (print_graph): Remove layoutalgorithm uses for
+	real.
+
+2004-12-16  Akim Demaille  <akim@epita.fr>
+
+	Use #define to handle the %name-prefix.
+
+	* data/glr.c, data/yacc.c: Comment changes.
+	* data/lalr1.cc (yylex): Use #define to select the name of yylex,
+	so that one can refer to yylex in the parser file, and have it
+	renamed, as is the case with other skeletons.
+
+2004-12-16  Akim Demaille  <akim@epita.fr>
+
+	Move lalr1.cc internals into yy*.
+
+	* data/lalr1.cc (semantic_stack_, location_stack_, state_stack_)
+	(semantic_stack_, location_stack_, pact_, pact_ninf_, defact_)
+	(pgoto_, defgoto_, table_, table_ninf_, check_, stos_, r1_, r2_)
+	(name_, rhs_, prhs_, rline_, token_number_, eof_, last_, nnts_)
+	(empty_, final_, terror_, errcode_, ntokens_)
+	(user_token_number_max_, undef_token_, n_, len_, state_, nerrs_)
+	(looka_, ilooka_, error_range_, nerrs_):
+	Rename as...
+	(yysemantic_stack_, yylocation_stack_, yystate_stack_)
+	(yysemantic_stack_, yylocation_stack_, yypact_, yypact_ninf_)
+	(yydefact_, yypgoto_, yydefgoto_, yytable_, yytable_ninf_)
+	(yycheck_, yystos_, yyr1_, yyr2_, yyname_, yyrhs_, yyprhs_)
+	(yyrline_, yytoken_number_, yyeof_, yylast_, yynnts_, yyempty_)
+	(yyfinal_, yyterror_, yyerrcode_, yyntokens_)
+	(yyuser_token_number_max_, yyundef_token_, yyn_, yylen_, yystate_)
+	(yynerrs_, yylooka_, yyilooka_, yyerror_range_, yynerrs_):
+	these.
+
+2004-12-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix some problems reported by twlevo at xs4all.
+	* src/symtab.c (symbol_new): Report an error if the input grammar
+	contains too many symbols.  This is better than calling abort() later.
+	* src/vcg.h (enum layoutalgorithm): Remove.  All uses removed.
+	(struct node, struct graph):
+	Rename member expand to stretch.  All uses changed.
+	(struct graph): Remove member layoutalgorithm.  All uses removed.
+	* src/vcg.c (get_layoutalgorithm_str): Remove.  All uses removed.
+	* src/vcg_defaults.h (G_STRETCH): Renamed from G_EXPAND.
+	All uses changed.
+	(N_STRETCH): Rename from N_EXPAND.  All uses changed.
+
+2004-12-15  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: Normalize /** \brief ... */ to ///.
+	Add more Doxygen comments.
+	(symprint_, stack_print_, reduce_print_, destruct_, pop)
+	(report_syntax_error_, translate_): Rename as...
+	(yysymprint_, yystack_print_, yyreduce_print_, yydestruct_)
+	(yypop_, yyreport_syntax_error_, yytranslate_): this.
+
+2004-12-15  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (lex_): Rename as...
+	(yylex_): this.
+	Move the trace here.
+	Take the %name-prefix into account.
+	Reported by Alexandre Duret-Lutz.
+
+2004-12-15  Akim Demaille  <akim@epita.fr>
+
+	Simplify the C++ parser constructor.
+
+	* data/lalr1.cc (debug_): Rename as...
+	(yydebug_): so that the parser's internals are always in the yy*
+	pseudo namespace.
+	Adjust uses.
+	(b4_parse_param_decl): Remove the leading comma as it is now only
+	called as unique argument list.
+	(Parser::Parser): Remove the constructor accepting a location and
+	an initial debugging level.
+	Remove from the other ctor the argument for the debugging level.
+	(debug_level_type, debug_level, set_debug_level): New.
+
+	* tests/actions.at, tests/calc.at, tests/regression.at: Adjust
+	constructor calls.
+
+2004-12-15  Akim Demaille  <akim@epita.fr>
+
+	Remove b4_root related material: failure experiment
+	(which goal was to allow to derive from a class).
+
+	* data/lalr1.cc (b4_root, b4_param, b4_constructor): Remove
+	definitions and uses.
+
+2004-12-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (struct yyGLRStack): yyerror_range now has 3 items,
+	not 2, since it's not portable to subtract 1 from the start of an
+	array.  The new item 0 is never set or used.  All uses changed.
+
+	(yyrecoverSyntaxError): Use YYLLOC_DEFAULT instead of assuming
+	the default definition of YYLLOC_DEFAULT.  Problem reported
+	by Frank Heckenbach.
+
+2004-12-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (YYRHSLOC): Don't have two definitions, one for
+	the normal case and one for the error case.  Just use the
+	first one uniformly.  Problem reported by Frank Heckenbach.
+	(YYLLOC_DEFAULT): Use the conventions of yacc.c, so we can
+	use exactly the same macro in both places.
+	(yyerror_range): Now of type yyGLRStackItem, not YYLTYPE,
+	so that the normal-case YYRHSLOC works for the error case too.
+	All uses changed.
+	* data/yacc.c (YYRHSLOC): New macro, taken from glr.c.
+	(YYLLOC_DEFAULT): Use the same macro as glr.c.
+	* doc/bison.texinfo (Location Default Action): Don't claim that
+	we have an array of locations.  Use the same macro for both glr
+	and lalr parsers.  Mention YYRHSLOC.  Mention what happens when
+	the index is 0.
+
+2004-12-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* HACKING: Update email addresses to send announcements to.
+
+	* configure.ac (AC_INIT): Bump version to 1.875f.
+
+2004-12-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 1.875e.
+	* src/parse-gram.c, src/parse-gram.h: Regenerate with 1.875e.
+
+	* src/scan-skel.l: Include "complain.h", for "fatal".
+
+	* src/relation.h (relation_print, relation_digraph):
+	Relation sizes are of type relation_node, not size_t (this is
+	merely a doc fix, since the two types are equivalent).
+	(relation_transpose): Relation sizes are of type relation_node,
+	not int.
+	* src/relation.c: Likewise.
+	(top, infinity): Now of type relation_node, not int.
+	(traverse, relation_transpose): Use relation_node, not int.
+
+	* data/glr.c (yyuserAction, yyrecoverSyntaxError): Mark args
+	with ATTRIBUTE_UNUSED if they're not used, to avoid GCC warning.
+	(yyparse): Remove unused local introduced in 2004-10-25 patch.
+
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): New arg
+	specifying whether the test should be skipped.  Use it tp
+	specify that the [%defines %skeleton "lalr1.cc"] tests currently
+	fail on some hosts, and should be skipped.
+
+2004-12-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/system.h (CALLOC, MALLOC, REALLOC): Remove.  All callers
+	changed to use xcalloc, xnmalloc, xnrealloc, respectively,
+	unless otherwise specified below.
+
+	* src/LR0.c (allocate_itemsets): Use xnmalloc, not xcalloc,
+	to allocate kernel_base, kernel_items, kernel_size, since
+	they needn't be initialized to 0.
+	(allocate_storgae): Likewise, for shiftset, redset, shift_symbol.
+	* src/closure.c (new_closure): Likewise, for itemset.
+	* src/derives.c (derives_compute): Likewise, for delts, derives, q.
+	* src/lalr.c (set_goto_map): Likewise, for temp_map.
+	(initialize_F): Likewise, for reads, edge, reads[i], includes[i].
+	(build_relations): Likewise for edge, states1, includes.
+	* src/nullable.c (nullable_compute): Likewise, for squeue, relts.
+	* src/reader.c (packgram): Likewise, for ritem, rules.
+	* src/reduce.c (nonterminals_reduce): Likewise for nontermmap.
+	* src/relation.c (relation_digraph): Likewise for VERTICES.
+	(relation_transpose): Likewise for new_R, end_R.
+	* src/symtab.c (symbols_token_translations_init): Likewise for
+	token_translations.
+	* src/tables.c (save_row): Likewise for froms, tos, conflict_tos.
+	(token_actions): Likewise for yydefact, actrow, conflrow,
+	conflict_list.
+	(save_column): Likewise for froms[symno], tos[symno].
+	(goto_actions): Likewise for state_count.
+	(pack_table): Likewise for base, pos, check.
+	(tables_generate): Likewise for width.
+
+	* src/LR0.c (set_states): Don't reuse kernel_size and kernel_base
+	for initial core.  Just have a separate core, so we needn't worry
+	about whether kernel_size and kernel_base are initialized.
+
+	* src/LR0.c (shift_symbol, redset, shiftset, kernel_base,
+	kernel_size, kernel_items): Remove unnecessary initialization.
+	* src/conflicts.c (conflicts): Likewise.
+	* src/derives.c (derives): Likewise.
+	* src/muscle_tablc (muscle_insert): Likewise.
+	* src/relation.c (relation_digraph): Likewise.
+	* src/tables.c (froms, tos, conflict_tos, tally, width, actrow, order,
+	conflrow, conflict_table, conflict_list, table, check):
+	Likewise.
+
+	* src/closure.c (new_closure): Arg is of type unsigned int, not int.
+	This is because all callers pass unsigned int.
+	* src/closure.h (new_closure): Likewise.
+
+	* src/lalr.c (initialize_F): Initialize reads[i] in all cases.
+	(build_relations): Initialize includes[i] in all cases.
+	* src/reader.c (packgram): Always initialize rules[ruleno].prec
+	and rules[ruleno].precsym.  Initialize members in order.
+	* src/relation.c (relation_transpose): Always initialize new_R[i]
+	and end_R[i].
+	* src/table.c (conflict_row): Initialize 0 at end of conflict_list.
+
+	* src/output.c (prepare_actions): Pass 0 instead of conflict_list[0];
+	conflict_list[0] was always 0, but now it isn't initialized.
+
+	* src/table.c (table_grow): When conflict_table grew, the grown
+	area wasn't cleared.  Fix this.
+
+	* lib/.cvsignore: Add strdup.c, strdup.h.
+	* m4/.cvsignore: Add strdup.m4.
+
+2004-12-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/lalr.h (GOTO_NUMBER_MAXIMUM): New macro.
+	* src/lalr.c (set_goto_map): Don't allow ngotos to equal
+	GOTO_NUMBER_MAXIMUM, since we occasionally compute
+	ngotos + 1 without checking for overflow.
+	(build_relations): Use END_NODE, not -1, to denote end of edges.
+	* src/lalr.c (set_goto_map, map_goto, initialize_F, add_loopback_edge,
+	build_relations): Use goto_number, not int, for goto numbers.
+	* src/tables.c (save_column, default_goto): Likewise.
+
+2004-11-23  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (YYSTYPE): Define it as is done for C, instead
+	of #defining from yystype.
+	Don't typedef yystype, C++ does not need it.
+	This lets it possible to forward declare it as union.
+
+2004-11-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* bootstrap (gnulib_modules): Add extensions.
+	Problem reported by Jim Meyering.
+
+2004-11-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/LR0.c, src/closure.c, src/derives.c, src/gram.c,
+	src/lalr.c, src/nullable.c, src/relation.c, src/scan-skel.l,
+	src/system.h, src/tables.c: XFREE -> free, to accommodate
+	recent change to gnulib xalloc.h.
+	Problem reported by Jim Meyering.
+
+2004-11-17  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (symprint_): Use cdebug_ to avoid warnings.
+
+2004-11-17  Akim Demaille  <akim@epita.fr>,
+	    Alexandre Duret-Lutz <adl@gnu.org>
+
+	* data/lalr1.cc (Parser::yycdebug_): New, a pointer, to allow
+	changes.
+	(YYCDEBUG): Adjust.
+	Use it instead of cdebug_.
+	(Parser::debug_stream, Parser::set_debug_stream): New.
+	(Parser::symprint_): Define cdebug_ for temporary backward
+	compatibility.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Use
+	debug_stream ().
+
+2004-11-17  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (Parser:print_): Remove, use %printer instead.
+	* tests/regression.at (_AT_DATA_DANCER_Y): Adjust.
+	* tests/calc.at (_AT_DATA_CALC_Y): Ditto.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Likewise.
+
+2004-10-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yyloc_default): Remove; not used.
+	Problem reported by Frank Heckenbach.
+
+2004-10-25  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c (YYRHSLOC): Move its definition next to its uses.
+	Introduce another definition to address simple location arrays.
+	(yyGLRStack): New member: yyerror_range.
+	(yyrecoverSyntaxError, yyparse): Update it.
+	(yyrecoverSyntaxError): Use it when shifting the error token to
+	have an accurate range, equivalent to the one computed by both
+	yacc.c and lalr1.cc.
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Change its yylex so
+	that column numbers start at column 0, as per GNU Coding
+	Standards, the others tests, and the doc.
+	(_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_AMBIG_GLR_OUTPUT_WITH_LOC):
+	Adjust to the above change (first column is 0).
+	And adjust the location of the "<error>", now covering the whole
+	line.
+
+2004-10-22  Akim Demaille  <akim@epita.fr>
+	and Paul Eggert  <eggert@cs.ucla.edu>
+
+	Remove some arbitrary limits on goto numbers and relations.
+	* src/lalr.c (goto_map, ngotos, from_state, to_state): Omit
+	initial values, since they're never used.
+	(set_goto_map): ngotos is now unsigned, so test for overflow
+	by seeing whether it wraps around to zero.
+	* src/lalr.h (goto_number): Now size_t, not short int.
+	(GOTO_NUMBER_MAXIMUM): Remove.
+	* src/relation.c (relation_print, traverse, relation_transpose):
+	Check for END_NODE rather than looking at sign.
+	* src/relation.h (END_NODE): New macro.
+	(relation_node): Now size_t, not short int.
+
+2004-10-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo (Language and Grammar): In example, "int" is a
+	keyword, not an identifier.  Problem reported by Baron Schwartz in
+	<http://lists.gnu.org/archive/html/bug-bison/2004-10/msg00017.html>.
+
+2004-10-11  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.c (symbol_check_alias_consistency): Also check
+	type names, destructors, and printers.
+	Reported by Alexandre Duret-Lutz.
+	Recode the handling of associativity and precedence in terms
+	of symbol_precedence_set.
+	Accept no redeclaration at all, not even equal to the previous
+	value.
+	(redeclaration): New.
+	Use it to factor redeclaration complaints.
+	(symbol_make_alias): Don't set the type of the alias, let
+	symbol_check_alias_consistency do it as for other features.
+	* src/symtab.h (symbol): Add new member prec_location, and
+	type_location.
+	* src/symtab.c (symbol_precedence_set, symbol_type_set): Set them.
+	* tests/input.at (Incompatible Aliases): New.
+
+2004-10-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	.cvsignore fixes to accommodate gnulib changes,
+	and the practice of naming build directories "_build".
+	* .cvsignore: Add "_*".  Sort.
+	* lib/.cvsignore: Add getopt_.h, xalloc-die.c.
+	* m4/.cvsignore: Add "*_gl.m4".
+
+2004-10-06  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y (add_param): Fix the truncation of trailing
+	spaces.
+
+2004-10-05  Akim Demaille  <akim@epita.fr>
+
+	In Bison 1.875's yacc.c, YYLLOC_DEFAULT was called regardless
+	whether the reducion was empty or not.  This leaves room to
+	improve the use of YYLLOC_DEFAULT in such a case.
+	lalr1.cc is still experimental, so changing this is acceptable.
+	And finally, there are probably not many users who changed the
+	handling of locations in GLR, so changing is admissible too.
+
+	* data/glr.c, data/lalr1.cc, data/yacc.c (YYLLOC_DEFAULT): On an
+	empty reduction, set @$ to an empty location ending the previously
+	stacked symbol.
+	Adjust uses to make sure the code is triggered on empty
+	reductions.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust the
+	expected output: empty reductions have empty locations.
+
+2004-09-29  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: Move towards a more standard C++ coding style
+	for templates: Class < T > -> Class<T>.
+
+2004-09-29  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: Reinstall the former ctor, for sake of
+	compatibility, but warn it will be removed.
+	Move towards a more standard C++ coding style (i.e., type *var ->
+	type* var).
+
+2004-09-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/parse-gram.y (add_param): Rewrite to avoid strchr,
+	since it's less likely to work if NULs are involved in the future.
+
+2004-09-27  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c (YY_LOCATION_PRINT): Fix its default declaration.
+
+2004-09-27  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (b4_parse_param_decl_1): New.
+	(b4_parse_param_decl): Use it to have different names between attribute
+	and argument names.
+	(b4_cc_constructor_call): Likewise.
+
+2004-09-24  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y (add_param): Strip the leading and trailing
+	blanks from a formal argument declaration.
+	(YY_LOCATION_PRINT): New.
+
+2004-09-24  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_yysymprint_generate): Move the YYINPUT invocation
+	after the location.
+
+2004-09-24  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Table of Symbols): Sort.
+
+2004-09-21  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c, data/glr.c (b4_at_dollar, b4_dollar_dollar): Remove
+	the useless parentheses.
+	Suggested by Paul Eggert.
+
+2004-09-20  Akim Demaille  <akim@epita.fr>
+
+	Let the initial-action act on the look-ahead, and use it for the
+	"initial push" (corresponding to an hypothetical beginning-of-file).
+	And let lalr1.cc honor %initial-action.
+
+	* doc/bison.texinfo (Initial Action Decl): Clarify, and add an
+	example.
+	* data/lalr1.cc (Parser::initlocation_): Remove, bad experiment.
+	(Parser::Parser): Remove the ctor that used to initialize it.
+	(Parser::parse): Like in the other skeletons, issue the "starting
+	parse" message before any action.
+	Honor %initial-action.
+	Initialize the stacks with the lookahead.
+	* data/yacc.c: Let $$ and @$ in %initial-action designate the
+	look-ahead.
+	Push them in the stacks.
+	* tests/actions.at, tests/calc.at: Adjust the C++ ctor invocations.
+
+2004-09-20  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Initial Action Decl): New.
+
+2004-09-20  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c (YY_LOCATION_PRINT): Use YYLTYPE_IS_TRIVIAL as a
+	clearer criterion to define it.
+	(parse): Initialize the initial location when YYLTYPE_IS_TRIVIAL.
+	When reducing on an empty RHS, use the latest stacked location as
+	location.
+	yylloc is not always available.
+	* data/glr.c: Likewise.
+	Also, honor initial-actions.
+
+2004-09-20  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c (YY_LOCATION_PRINT): New.
+	Define when we know YYLTYPE's structure, i.e., when the default
+	YYLLOC_DEFAULT is used.
+	* data/c.m4 (b4_yysymprint_generate): Use it.
+	* data/lalr1.cc (YYLLOC_DEFAULT): Stop relying on the initial
+	value of the result.
+	(error_start_): Replace with...
+	(error_range_): this location array.
+	This allows to replace code relying on the implementation of
+	locations by portable code.
+	* data/yacc.c (yylerrsp): Replace with...
+	(yyerror_range): this.
+	Every time a token is popped, update yyerror_range[0], to have an
+	accurate location for the error token.
+	* data/glr.c (YY_LOCATION_PRINT): New.
+	(yyprocessOneStack): Fix an invocation of YY_SYMBOL_PRINT:
+	deference a pointer.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): No longer
+	report the location in %printers.
+
+	* src/scan-skel.l: Instead of abort, report error messages to ease
+	understanding skeleton scanning failures.
+
+2004-09-16  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (Stack::Iterator, Stack::ConstIterator): Rename as...
+	(iterator, const_iterator): these, to be more in the C++ spirit.
+	Also, return reverse iterators so that when displaying the stack
+	we display its bottom first.
+	(Parser::stack_print_, Parser::reduce_print_): Match the messages
+	from yacc.c.
+	We should probably use vector here though.
+
+2004-09-16  Akim Demaille  <akim@epita.fr>
+
+	Have more complete shift traces.
+
+	* data/yacc.c, data/lalr1.c, data/glr.c: Use YY_SYMBOL_PRINT
+	to report Shifts instead of ad hoc YYDPRINTF invocations,
+	including for the error token.
+	* data/lalr1.cc (symprint_): Output the location.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): In C++, don't
+	output the location within the %printer.
+	Activate GLR tests, at least to make sure they compile properly.
+	They still don't pass though.
+	* tests/calc.at: Adjust expect verbose output, since now "Entering
+	state..." is on a different line than the "Shifting" message.
+
+2004-09-08  Akim Demaille  <akim@epita.fr>
+
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Move the
+	Bison directive from the Bison file to the invocation of this
+	macro, so that these directives are passed to
+	AT_BISON_OPTION_PUSHDEFS to get correct help macros.
+	Use these helping macros (e.g., AT_LOC, AT_VAL and so forth).
+	Move the AT_SETUP/AT_CLEANUP outside, to report as test title
+	the extra Bison directives instead of the whole series.
+	Change the grammar so that there are recoverable errors, and
+	unrecoverable errors.  Now we can have the parser give up before
+	consuming the whole input.  As a result we now can observe that
+	the lookahead is freed when needed.
+	Change the parser source to parse argv[1] instead of a hard coded
+	string.
+	Simplify yylex, and give a value and location to EOF.
+	Simplify some invocations of AT_CHECK_PRINTER_AND_DESTRUCTOR that
+	passed directives already coded in the file.
+	Add some tests to check the location of "error".
+	For some tests, the C++ parser is correct, and not yacc.c.
+	For other tests, they provide different, but unsatisfying, values,
+	so keep the C++ value so that at least one parser is "correct"
+	according to the test suite.
+	(Actions after errors): Remove, this is subsumed by the
+	AT_CHECK_PRINTER_AND_DESTRUCTOR series.
+
+2004-09-06  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: Adjust the indentation of the labels.
+	(Parser::pop): New.
+	Use it.
+
+2004-09-06  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.cc, data/glr.cc (yydestruct): Accept an additional
+	argument, an informative message.
+	Call YY_SYMBOL_PRINT.
+	Adjust all callers: integrate the associated YY_SYMBOL_PRINT.
+	* data/lalr1.cc (destruct_): Likewise.
+	In addition, no longer depend on b4_yysymprint_generate and
+	b4_yydestruct_generate to generate these functions, do it "by
+	hand".
+
+2004-09-03  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c, data/lalr1.cc, data/yacc.c: When YYABORT was
+	invoked, yydestruct the lookahead.
+	* tests/calc.at (Calculator $1): Update the expected lengths of
+	traces: there is an added line for the discarded lookahead.
+	* doc/bison.texinfo (Destructor Decl): Some rewording.
+	Define "discarded" symbols.
+
+2004-09-02  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (translate_, destruct_): No reason to be static.
+
+2004-09-02  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c, yacc.c (YYDSYMPRINT): Remove, not used.
+	(YYDSYMPRINTF): Rename as...
+	(YY_SYMBOL_PRINT): this.
+	* data/lalr1.cc (YY_SYMBOL_PRINT): New, modeled after the previous
+	two.
+	Use it instead of direct symprint_ calls.
+	(yybackup): Tweak the "Now at end of input" case to match yacc.c's
+	one.
+
+2004-09-02  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (b4_yysymprint_generate): New.
+	(symprint_): New member function, defined when YYDEBUG.
+	Use it consistently instead of token/nterm debugging output by
+	hand.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust
+	%printer calls to use cdebug_ when using lalr1.cc.
+
+2004-08-30  Florian Krohm  <florian@edamail.fishkill.ibm.com>
+
+	* data/glr.c: Guard the declarations of yypstack and yypdumpstack
+	with #ifdef YYDEBUG.
+
+2004-08-26  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Implementing Loops): Rename as...
+	(Implementing Gotos/Loops): this.
+
+2004-08-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Adjust to latest gnulib.
+	* bootstrap (gnulib_modules): Add xalloc-die.
+	Set LC_ALL=C so that file names sort consistently.
+	Prefer the gnulib copies of gettext.m4, glibc21.m4,
+	inttypes_h.m4, lib-ld.m4, lib-prefix.m4, po.m4, stdint_h.m4,
+	uintmax_t.m4, ulonglong.m4.
+	(intl_files_to_remove): Add gettext.m4, lib-ld.m4, lib-prefix.m4,
+	po.m4 since we are now using _gl.m4 instead.
+
+2004-08-10  Florian Krohm  <florian@edamail.fishkill.ibm.com>
+
+	* src/scan-action.l: Remove. Scanning of semantic actions is
+	handled in scan-gram.l.
+
+2004-08-07  Florian Krohm  <florian@edamail.fishkill.ibm.com>
+
+	* src/scan-gram.l (handle_syncline): Use uniqstr_new not xstrdup.
+
+	* src/location.h (struct): The file member is a uniqstr.
+	(equal_boundaries): Use UNIQSTR_EQ for comparison.
+
+2004-07-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix bug with non-%union parsers that have printers or destructors,
+	which led to a Bison core dump.  Reported by Peter Fales in
+	<http://lists.gnu.org/archive/html/bug-bison/2004-07/msg00014.html>.
+
+	* data/c.m4 (b4_symbol_actions): Don't assume %union was used.
+	* data/lalr1.cc (yystype) [defined YYSTYPE]: Define to YYSTYPE,
+	not to our own type.
+	* src/output.c (symbol_destructors_output, symbol_printers_output):
+	Don't assume %union.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR,
+	AT_CHECK_PRINTER_AND_DESTRUCTOR): New argument
+	UNION-FLAG.  All callers changed.
+	(_AT_CHECK_PRINTER_AND_DESTRUCTOR): Don't assume %union.
+	Use type char, not unsigned int, when declaring an array of char;
+	this lets us remove a cast.
+	(Printers and Destructors): Add non-%union test cases.
+
+2004-06-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texinfo: Minor editorial changes, mostly to the new
+	GLR writeups.  E.g., avoid frenchspacing and the future tense,
+	change "lookahead" to "look-ahead", and change "wrt" to "with
+	respect to".
+
+2004-06-21  Paul Hilfinger  <hilfingr@CS.Berkeley.EDU>
+
+	* doc/bison.texinfo (Merging GLR Parses, Compiler Requirements):
+	New sections, split off from the GLR Parsers section.  Put the new
+	Simple GLR Parser near the start of the GLR section, for clarity.
+	Rewrite connective text.
+
+2004-06-21  Frank Heckenbach  <frank@g-n-u.de>
+
+	* doc/bison.texinfo (Simple GLR Parsers): New section.
+
+2004-06-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS, TODO, doc/bison.texinfo:
+	Use "look-ahead" instead of "lookahead", to be consistent.
+	* REFERENCES: Fix incorrect reference to DeRemer and Pennello,
+	while we're fixing "look-ahead".
+	* src/conflicts.c (shift_set): Renamed from shiftset.
+	(look_ahead_set): Renamed from lookaheadset.
+	* src/print.c: Likewise.
+	* src/getargs.c (report_args): Add "look-ahead" as the new canonical
+	name for "lookahead".
+	(report_types, usage): Likewise.
+	* src/getargs.h (report_look_ahead_tokens): Renamed from
+	report_lookaheads.
+	* src/lalr.c (compute_look_ahead_tokens): Renamed from
+	compute_lookaheads.
+	(state_look_ahead_tokens_count): Renamed from state_lookaheads_count.
+	(look_ahead_tokens_print): Renamed from lookaheads_print.
+	* src/state.c (state_rule_look_ahead_tokens_print): Renamed from
+	state_rule_lookaheads_print.
+	* src/state.h: Likewise.
+	(reductions.look_ahead_tokens): Renamed from lookaheads.
+	* tests/torture.at (AT_DATA_LOOK_AHEAD_TOKENS_GRAMMAR): Renamed from
+	AT_DATA_LOOKAHEADS_GRAMMAR.
+
+2004-06-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* README: Update location of patched M4 distribution.
+
+2004-05-30  Albert Chin-A-Young  <china@thewrittenword.com>
+
+	Don't assume the C++ compiler takes the same arguments as the C compiler
+	(trivial change).
+	* configure.ac (O0CXXFLAGS): New var.
+	* tests/atlocal.in (CXXFLAGS): Use it.
+
+2004-05-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix some "make check" problems with C++ reported by
+	Albert Chin-A-Young for Tru64 C++ in this thread:
+	http://lists.gnu.org/archive/html/bug-bison/2004-05/msg00049.html
+
+	* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Check for std::cerr.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR):
+	Output to a .cc file for C++, not to a .c file.
+	* tests/calc.at (AT_CHECK_CALC): Likewise.
+	* tests/regression.at (AT_CHECK_DANCER): Likewise.
+	* tests/local.at (AT_COMPILE_CXX): Default to OUTPUT.cc, not OUTPUT.c.
+
+2004-05-28  Albert Chin-A-Young  <china@thewrittenword.com>
+
+	* tests/calc.at, tests/actions.at: Workaround for SGI
+	C++ compiler.  (trivial change)
+
+2004-05-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Spent a few hours checking out which prerequisite versions the
+	current sources actually require.  I went all the way back to
+	Gettext 0.10.40, Automake 1.4, and Autoconf 2.57 and investigated
+	a seemingly endless set of combinations of versions more recent
+	than that.  The bottom line is that the current sources require
+	fairly recent versions of the build tools, and it'll be some work
+	to change this.
+	* configure.ac (AC_PREREQ): Increase from 2.58 to 2.59.
+	(AM_INIT_AUTOMAKE): Increase from 1.7 to 1.8.
+	(AM_GNU_GETTEXT_VERSION): Increase from 0.11.5 to 0.12.
+	Add comments explaining why those particular versions are
+	currently needed.
+
+	* src/parse-gram.y (lloc_default): Rewrite to avoid compiler bug
+	in SGI MIPSpro 7.4.1m.  Problem reported by Albert Chin-A-Young in
+	<http://lists.gnu.org/archive/html/bug-bison/2004-05/msg00037.html>.
+
+	* configure.ac (AC_PREREQ): Bump to 2.58, since 2.57 doesn't work
+	(it fails with a Autoconf-without-aclocal-m4 diagnostic).
+
+2004-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* configure.ac (AM_GNU_GETTEXT_VERSION): Lower it from 0.14.1 to
+	0.11.5.  Suggested by Bruno Haible.
+	* bootstrap: Remove gettext version checking.
+
+	* doc/bison.texinfo (Decl Summary): Also mention that %union
+	can depend on prerequisite types.  Problem reported by Tim
+	Van Holder.
+
+2004-05-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* README: Mention GNU m4 1.4 bugs and Akim's patched version.
+	* README-alpha: Don't tell people not to package this.
+
+	* bootstrap: Don't assume $(...) works; use `...` instead.
+	Problem reported by Paul Hilfinger.  Also, diagnose non-GNU
+	gettext better.
+
+	* doc/bison.texinfo (Decl Summary, Bison Options): Clarify what's
+	put into the -d output file, and mention what to do if YYSTYPE is
+	defined as a macro.
+
+2004-05-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Undo change made earlier today: it caused autopoint to not bring
+	in ABOUT-NLS.  Ouch.  Instead, substitute our own diagnostic for
+	autopoint's.
+
+	* bootstrap: Check that gettext version matches what's in
+	configure.ac.  Warn users to ignore robots.txt ERROR 404.
+	* bootstrap: Undo today's earlier change (logged below).
+	* configure.ac (AM_GNU_GETTEXT_VERSION): Likewise.
+
+	The gettext version checking is causing more trouble than it's
+	curing; remove it.  Problem reported by Paul Hilfinger.
+
+	* bootstrap: Issue a warning that one can expect a message
+	'AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_VERSION'.
+	* configure.ac (AM_GNU_GETTEXT_VERSION): Remove.
+
+2004-05-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Ensure that the C++ compiler used for testing actually works on a
+	simple test program; if not, skip the C++-related tests.  Problem
+	reported by Vin Shelton in:
+	http://lists.gnu.org/archive/html/bug-bison/2004-05/msg00026.html
+
+	* m4/cxx.m4: New file.
+	* configure.ac (BISON_TEST_FOR_WORKING_CXX_COMPILER): Add.
+	* tests/atlocal.in (BISON_CXX_WORKS): Add.
+	* tests/local.at (AT_COMPILE_CXX): Use it.
+
+2004-05-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/glr.c (yylloc): Output this macro even if locations are not
+	being generated, as the GLR parser needs it even in that case.
+	Problem reported by Troy A. Johnson
+	<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=195946>.
+
+	* configure.ac (AC_INIT): Update to 1.875e.
+
+2004-05-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Version 1.875d.
+	* configure.ac (AC_INIT): Likewise.
+	* src/parse-gram.c, src/parse-gram.h: Regenerate with 1.875d.
+
+	* configure.ac (--enable-gcc-warnings): Do not enable -Wshadow,
+	-Wmissing-prototypes, or -Wstrict-prototypes for C++.  The current
+	lalr1.cc runs afoul of the first, and the last two are no longer
+	supported by GCC 3.4.0.
+	* README: Mention GNU m4 1.4 or later; mention m4 patches.
+	* HACKING: Use ./bootstrap, not "make update" to import foreign files.
+
+2004-05-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* src/muscle_tab.c (hash_muscle): Accept and return size_t, not
+	unsigned int, for compatibility with latest gnulib hash module.
+	* src/state.c (state_hash, state_hasher): Likewise.
+	* src/symtab.c (hash_symbol, hash_symbol_hasher): Likewise.
+	* src/uniqstr.c (hash_uniqstr): Likewise.
+
+2004-05-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* NEWS: Unescaped newlines are no longer allowed in char & strings.
+
+	* src/scan-gram.l (<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER,
+	SC_CHARACTER,SC_STRING>): Reject unescaped newlines in
+	character and string literals.
+	(unexpected_end): New function.
+	(unexpected_eof): Use it.
+	(unexpected_newline): New function.
+	(<INITIAL,SC_AFTER_IDENTIFIER,SC_PRE_CODE>): Coalesce duplicate
+	actions.
+
+	* NEWS: Document %expect-rr.
+
+	* bootstrap (--gnulib-srcdir=*, --cvs-user=*):
+	Fix typo by replacing $1 with $option.
+	Remove more 'intl'-related files.
+	Don't DEFUN AM_INTL_SUBDIR twice.
+
+	* lib/.cvsignore: Add strndup.h.  Remove memchr.c, memcmp.c,
+	memrchr.c, strcasecmp.c, strchr.c, strrchr.c, strspn.c, strtol.c,
+	strtoul.c.
+	* m4/.cvsignore: Add exitfail.m4, extensions.m4, gnulib.m4,
+	hard-locale.m4, mbstate_t.m4, strerror_r.m4, strndup.m4,
+	xstrndup.m4.  Remove glibc21.m4, intdiv0.m4, inttypes-pri.m4,
+	inttypes.m4, inttypes_h.m4, isc-posix.m4, lcmessage.m4,
+	stdint_h.m4, uintmax_t.m4, ulonglong.m4.
+	* src/.cvsignore: Add *.output.
+
+	* src/parse-gram.y: Put copyright notice inside %{ %} so it
+	gets copied to the output file.
+
+2004-04-28  Paul Eggert  <eggert@twinsun.com>
+
+	Get files from the gnulib and po repositories, instead of relying
+	on them being in our CVS.  Upgrade to latest versions of gnulib
+	and Automake.
+
+	* Makefile.am (SUBDIRS): Remove m4; Automake now does m4.
+	* bootstrap: Bootstrap from gnulib and po repositories.
+	Much of this code was stolen from GNU diff and GNU tar's bootstrap.
+	* README-cvs: Document these changes.  Remove version numbers from
+	mentions of build tools, since they change so often.  Mention Flex.
+
+	* configure.ac (AC_CONFIG_MACRO_DIR): Add, with m4 as arg.
+	(gl_USE_SYSTEM_EXTENSIONS): Add.
+	(AC_GNU_SOURCE, AC_AIX, AC_MINIX):
+	Remove; no longer needed, as gl_USE_SYSTEM_EXTENSIONS
+	does this for us.
+	(AC_ISC_POSIX): Remove; we no longer support this
+	ancient OS, as it gets in the way of latest Autoconf & gnulib.
+	(AC_HEADER_STDC): Remove: we now assume C89 or better.
+	(AC_CHECK_HEADERS_ONCE): Use instead of AC_CHECK_HEADERS.
+	Do not check for C89 headers, except for locale.h which is used
+	by the Yacc library and must port to K&R hosts.
+	(AC_CHECK_FUNCS_ONCE): Use instead of AC_CHECK_FUNCS.
+	Do not check for C89 functions, except for setlocale which is
+	used by the Yacc library.
+	(AC_CHECK_DECLS, AC_REPLACE_FUNCS): Remove; no longer needed.
+	(gl_DIRNAME, gl_ERROR, gl_FUNC_ALLOCA, gl_FUNC_MEMCHR,
+	gl_FUNC_MEMRCHR, gl_FUNC_STPCPY, gl_FUNC_STRNLEN, gl_FUNC_STRTOL,
+	gl_GETOPT, gl_HASH, gl_MBSWIDTH, gl_OBSTACK, gl_QUOTE,
+	gl_QUOTEARG, gl_XALLOC, jm_FUNC_GLIBC_UNLOCKED_IO, jm_FUNC_MALLOC,
+	AM_GNU_GETTEXT): Remove; now done by:
+	(GNULIB_AUTOCONF_SNIPPET): Add.  "bootstrap" builds this for us.
+	(AC_CONFIG_FILES): Remove m4/Makefile, as Automake now does this
+	for us.
+
+	* lib/Makefile.am: Include gnulib.mk, built for us by "bootstrap".
+	(BUILT_SOURCES, EXTRA_DIST, MOSTLYCLEANFILES):
+	Define to empty, as gnulib.mk will do the rest for us.
+	($(libbison_a_OBJECTS), stdbool.h): Remove, as gnulib.mk does this
+	for us.
+	(libbison_a_SOURCES): Define to $(lib_SOURCES) now.
+	(lib_SOURCES): New symbol, containing only the non-gnulib libs.
+
+	* src/files.c: Include gnulib's xstrndup.h.
+
+	* src/system.h (MALLOC): Use xnmalloc, for better overflow checking.
+	(REALLOC): Use xnrealloc, for likewise.
+	(xstrndup, stpcpy): Remove decls, as gnulib does this for us now.
+	(strnlen, memrchr): Remove decls; functions no longer used.
+	Include <stpcpy.h>.
+
+	* config/depcomp, config/install-sh, lib/alloca.c, lib/argmatch.c,
+	lib/argmatch.h, lib/basename.c, lib/dirname.c, lib/dirname.h,
+	lib/error.c, lib/error.h, lib/getopt.c, lib/getopt.h,
+	lib/getopt1.c, lib/gettext.h, lib/hash.c, lib/hash.h,
+	lib/malloc.c, lib/mbswidth.c, lib/mbswidth.h, lib/memchr.c,
+	lib/memcmp.c, lib/memrchr.c, lib/obstack.c, lib/obstack.h,
+	lib/quote.c, lib/quote.h, lib/quotearg.c, lib/quotearg.h,
+	lib/realloc.c, lib/stdbool_.h, lib/stpcpy.c, lib/strcasecmp.c,
+	lib/strchr.c, lib/strncasecmp.c, lib/strnlen.c, lib/strrchr.c,
+	lib/strspn.c, lib/strtol.c, lib/strtoul.c, lib/unlocked-io.h,
+	lib/xalloc.h, lib/xmalloc.c, lib/xstrdup.c, lib/xstrndup.c,
+	m4/Makefile.am, m4/alloca.m4, m4/dirname.m4, m4/dos.m4,
+	m4/error.m4, m4/getopt.m4, m4/hash.m4, m4/malloc.m4,
+	m4/mbrtowc.m4, m4/mbswidth.m4, m4/memchr.m4, m4/memcmp.m4,
+	m4/memrchr.m4, m4/obstack.m4, m4/onceonly.m4, m4/prereq.m4,
+	m4/quote.m4, m4/quotearg.m4, m4/realloc.m4, m4/stdbool.m4,
+	m4/stpcpy.m4, m4/strnlen.m4, m4/strtol.m4, m4/strtoul.m4,
+	m4/unlocked-io.m4, m4/xalloc.m4, po/LINGUAS, po/Makefile.in.in,
+	po/Makevars, po/da.po, po/de.po, po/es.po, po/et.po, po/fr.po,
+	po/hr.po, po/id.po, po/it.po, po/ja.po, po/ms.po, po/nl.po,
+	po/pt_BR.po, po/ro.po, po/ru.po, po/sv.po, po/tr.po:
+	Remove, as these files are now generated automatically
+	by bootstrap or automake.
+
+	* po/ChangeLog: Remove: all but one entry was a duplicate
+	of this file, and I moved that 2000-11-02 entry here.
+
+	* config/.cvsignore: Add Makefile, depcomp, install-sh.
+	* lib/.cvsignore: Add alloca.c, alloca.h, alloca_.h, argmatch.c,
+	argmatch.h, basename.c, dirname.c, dirname.h, error.c, error.h,
+	exit.h, exitfail.c, exitfail.h, getopt.c, getopt.h, getopt1.c,
+	getopt_int.h, gettext.h, gnulib.mk, hard-locale.c, hard-locale.h,
+	hash.c, hash.h, malloc.c, mbswidth.c, mbswidth.h, memchr.c,
+	memcmp.c, memrchr.c, obstack.c, obstack.h, quote.c, quote.h,
+	quotearg.c, quotearg.h, realloc.c, stdbool_.h, stpcpy.c, stpcpy.h,
+	strcasecmp.c, strchr.c, stripslash.c, strncasecmp.c, strndup.c,
+	strnlen.c, strrchr.c, strspn.c, strtol.c, strtoul.c,
+	unlocked-io.h, xalloc.h, xmalloc.c, xstrdup.c, xstrndup.c,
+	xstrndup.h.
+	* m4/.cvsignore: Remove Makefile, Makefile.in.  Add alloca.m4,
+	dirname.m4, dos.m4, error.m4, getopt.m4, hash.m4, mbrtowc.m4,
+	mbswidth.m4, obstack.m4, onceonly.m4, quote.m4, quotearg.m4,
+	stdbool.m4, stpcpy.m4, strnlen.m4, unlocked-io.m4, xalloc.m4.
+	* po/.cvsignore: Add *.po, LINGUAS, Makefile.in.in, Makevars.
+	* src/.cvsignore: Remove *_.c.
+
+
+	* Makefile.maint (GZIP_ENV): Don't use --rsyncable if gzip doesn't
+	support it.  (The latest stable gzip doesn't.)
+
+2004-04-27  Paul Eggert  <eggert@twinsun.com>
+
+	* data/lalr1.cc (Parser::stos_) [! YYDEBUG]: Define even in this
+	case, as stos_ is now used by destructors due to the 2004-02-09
+	change.
+
+	Remove more K&R C support.
+	* lib/libiberty.y (PARAMS): Remove.  All uses removed.
+	* lib/subpipe.c (errno): Remove decl.
+	Include <stdlib.h> unconditionally.
+	(EXIT_FAILURE): Remove macro.
+	* src/complain.c (vfprintf, strerror): Remove.
+	* src/system.h: Include limits.h, stdlib.h, string.h, locale.h
+	unconditionally.
+	(EXIT_FAILURE, EXIT_SUCCESS, setlocale): Remove defns.
+	Use latest Autoconf recommendations for including inttypes.h, stdint.h.
+	(strchr, strspn, memchr): Remove decls.
+	* tests/calc.at (_AT_DATA_CALC_Y): Include stdlib.h, string.h
+	unconditionally.  Do not declare perror.
+	* tests/conflicts.at (%nonassoc and eof): Include stdlib.h
+	unconditionally.
+
+	* src/complain.c (_): Remove useless defn, as system.h defines this.
+
+	* lib/bitset.h (__INT_TO_PTR): Remove; workaround no longer needed
+	with latest obstack.h.
+	* lib/ebitset.c (ebitset_elt_alloc): Don't bother to cast args
+	to procedure types, as obstack.h now does that for us.
+	* lib/lbitset.c (lbitset_elt_alloc): Likewise.
+
+	* lib/subpipe.h [HAVE_SYS_TYPES_H]: Include <sys/types.h>,
+	so that this include file can stand alone.
+	* lib/subpipe.c: Do not include <sys/types.h>, as subpipe.h
+	does this now.  Include subpipe.h first after config.h, to
+	test whether it can stand alone.
+
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Don't
+	declare yyerror when using lalr.cc, as GCC 3.4.0 warns about the
+	unused declaration.
+
+	* tests/synclines.at (%union synch line): Put a dummy member in
+	the union, because empty unions aren't allowed in C.  Caught
+	by GCC 3.4.0.
+
+2004-04-13  Jim Meyering  <jim@meyering.net>
+
+	* src/conflicts.c (conflicts_print): Correct format string typo:
+	use `%%' to produce literal `%'.  (trivial change)
+
+2004-03-30  Paul Eggert  <eggert@twinsun.com>
+
+	* src/getargs.c (version): Update copyright year to 2004.
+
+	* data/c.m4 (b4_int_type): Use 'short int' rather than
+	'short', and similarly for 'long', 'unsigned', etc.
+	* data/glr.c (YYTRANSLATE, yyconfl, yySymbol, yyItemNum,
+	yygetLRActions, yyprocessOneStack, yyrecoverSyntaxError,
+	yy_yypstack, yydumpstack): Likewise.
+	* data/lalr1.cc (user_token_number_max_, user_token_number_max_,
+	translate_, seq_, [], pop, Slice, range_, operator+, operator+=):
+	Likewise.
+	* data/yacc.c (b4_int_type, yyss, YYSTACK_BYTES, yysigned_char,
+	yy_stack_print, yyparse): Likewise.
+	* doc/bison.texinfo (Prologue, Multiple Types): Likewise.
+	* lib/bbitset.h (bitset_word, BITSET_WORD_BITS): Likewise.
+	* lib/bitset.c (bitset_print): Likewise.
+	* lib/bitset_stats.c (bitste_log_histogram_print): Likewise.
+	* lib/bitsetv-print.c (bitsetv_matrix_dump): Likewise.
+	* lib/bitsetv.c (bitsetv_dump): Likewise.
+	* lib/ebitset.c (EBITSET_ELT_BITS, ebitset_elt_alloc): Likewise.
+	* lib/lbitset.c (LBITSET_ELT_BITS, lbitset_elt_alloc, debug_lbitset):
+	Likewise.
+	* src/LR0.c (allocate_itemsets): Likewise.
+	* src/gram.h (rule_number, rule): Likewise.
+	* src/lalr.h (goto_number): Likewise.
+	* src/nullable.c (nullable_compute): Likewise.
+	* src/output.c (prepare_rules): Likewise.
+	* src/relation.c (relation_print, relation_digraph): Likewise.
+	* src/relation.h (relation_node): Likewise.
+	* src/state.h (state_number, transitions, errs, reductions,
+	struct state): Likewise.
+	* src/symtab.h (symbol_number, struct symbol): Likewise.
+	* src/tables.c (vector_number, tally, action_number,
+	default_goto, goto_actions): Likewise.
+	* tests/existing.at (GNU Cim Grammar): Likewise.
+	* tests/regression.at (Web2c Actions): Likewise.
+
+	* src/output.c (muscle_insert_short_int_table): Renamed from
+	muscle_insert_short_table.  All uses changed.
+
+2004-03-25  Paul Hilfinger  <hilfingr@tully.CS.Berkeley.EDU>
+
+	* src/parse-gram.y: Define PERCENT_EXPECT_RR.
+	(declaration): Replace expected_conflicts with expected_sr_conflicts.
+	Add %expect-rr rule.
+
+	* src/scan-gram.l: Recognize %expect-rr.
+
+	* src/conflicts.h (expected_sr_conflicts): Rename from
+	expected_conflicts.
+	(expected_rr_conflicts): Declare.
+
+	* src/conflicts.c (expected_sr_conflicts): Rename from
+	expected_conflicts.
+	(expected_rr_conflicts): Define.
+	(conflicts_print): Check r/r conflicts against expected_rr_conflicts
+	for GLR parsers.
+	Use expected_sr_conflicts in place of expected_conflicts.
+	Warn if expected_rr_conflicts used in non-GLR parser.
+
+	* doc/bison.texinfo: Add documentation for %expect-rr.
+
+2004-03-08  Paul Eggert  <eggert@gnu.org>
+
+	Add support for hex token numbers.  Suggested by Odd Arild Olsen in
+	<http://lists.gnu.org/archive/html/bison-patches/2004-03/msg00000.html>.
+
+	* NEWS: Document hexadecimal tokens, no NUL bytes, %destructor
+	in lalr1.cc.
+	* doc/bison.texinfo (Token Decl): Add hexadecimal token numbers.
+	* src/scan-gram.l (scan_integer): New function.
+	({int}): Use it.
+	(0[xX][0-9abcdefABCDEF]+): New pattern, to support hex numbers.
+	(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>, \\x[0-9abcdefABCDEF]+,
+	handle_action_dollar, handle_action_at, convert_ucn_to_byte):
+	Say "long int", not "long", for uniformity with GNU style.
+
+2004-02-25  Paul Eggert  <eggert@twinsun.com>
+
+	* tests/local.at (AT_COMPILE, AT_COMPILE_CXX): Ignore stdout from
+	compilers.  This fixes a problem with Intel's C++ compiler being
+	chatty, reported by Guido Trentalancia in
+	<http://lists.gnu.org/archive/html/bug-bison/2004-02/msg00030.html>.
+
+2004-02-09  Alexandre Duret-Lutz  <adl@gnu.org>
+
+	Support %destructor and merge error locations in lalr1.cc.
+
+	* data/lalr1.cc (b4_cxx_destruct_def): New macro.
+	(Parser::stos_): Define unconditionally.
+	(Parser::destruct_): New method.  Generate its body with
+	b4_yydestruct_generate.
+	(Parser::error_start_): New attribute.
+	(Parser::parse) <yyerrlab, yyerrlab1>: Call destruct_ on erroneous
+	token which are discarded.
+	(Parser::parse) <yyerrlab, yyerrorlab, yyerrlab1>: Update
+	error_start_ when erroneous token are discarded.
+	(Parser::parse) <yyerrlab1>: Compute the location of the error
+	token so that it covers all the discarded tokens.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust so
+	it can be called with `%skeleton "lalr1.cc"', and do that.
+
+2004-02-02  Paul Eggert  <eggert@twinsun.com>
+
+	* src/Makefile.am (AM_CPPFLAGS): New macro.  It mentions
+	$(top_srcdir)/lib and ../lib.  This fixes a bug reported
+	by Paul Hilfinger; the old INCLUDES value didn't mention ../lib.
+	There's no need to mention top_builddir since Automake does that
+	for us.
+	(INCLUDES): Remove, as Automake says it's obsolescent.
+	Contents migrated into AM_CPPFLAGS as described above.
+	* lib/Makefile.am (INCLUDES): Remove; obsolescent.
+
+2004-01-14  Paul Hilfinger  <hilfingr@CS.Berkeley.EDU>
+
+	* data/glr.c (yytokenName): Bullet-proof against YYEMPTY token.
+	(yyreportSyntaxError): Handle case where lookahead token is
+	YYEMPTY.
+
+2004-01-13  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* data/glr.c: Put casts on uses of YYREALLOC and YYMALLOC so that
+	resulting parsers are compilable with C++.
+
+2003-12-23  Paul Eggert  <eggert@twinsun.com>
+
+	* config/depcomp, config/install-sh: Sync with Automake 1.8.
+	* src/output.c (output_skeleton): Rename local var.
+	* tests/input.at (Torturing the Scanner): Don't use \x0 or \0 in
+	Bison tokens, as this runs afoul of the 2003-10-07 change that
+	disallowed NUL bytes in character constants or string literals.
+
+	* tests/local.at: Require Autoconf 2.59's Autotest.
+	* tests/testsuite.at: Don't include local.at, since we now assume
+	Autoconf 2.59 or later.  Autoconf 2.59 had some problems with
+	including it.
+	* tests/Makefile.am ($(TESTSUITE)): Remove warning about ignoring
+	multiple inclusion warnings.
+
+2003-12-02  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (How Can I Reset the Parser): More about start
+	conditions.
+	From Bruno Haible.
+
+2003-11-18  Alexandre Duret-Lutz  <adl@gnu.org>
+
+	* doc/bison.texinfo (Bison Options): Escape `@' in `$@'.
+
+2003-10-07  Paul Eggert  <eggert@twinsun.com>
+
+	* tests/Makefile.am (clean-local): Don't run 'testsuite --clean'
+	if testsuite doesn't exist.
+
+	* doc/bison.texinfo (Symbols): NUL bytes are not allowed in string
+	literals, unfortunately.
+	* src/scan-gram.l (<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>):
+	Complain about NUL bytes in character constants or string literals.
+
+2003-10-05  Paul Eggert  <eggert@twinsun.com>
+
+	* NEWS: Don't document %no-default-prec, as it's still
+	too experimental.
+	* doc/bison.texinfo: Document %no-default-prec only if
+	the defaultprec flag is set.  Normally it's not.
+
+2003-10-04  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (b4_rhs_value, b4_rhs_location): Yield a
+	non-modifiable lvalue, instead of a modifiable one.
+	* doc/bison.texinfo (Actions): Document that $$ can
+	be assigned to.  Do not claim that $$ and $N are
+	array element references: user code should not rely on this.
+
+2003-10-01  Paul Eggert  <eggert@twinsun.com>
+
+	* src/parse-gram.h (PERCENT_NO_DEFAULT_PREC): New token.
+	(grammar_declaration): Use it.
+	* src/scan-gram.l: New token %no-default-prec.
+	* tests/conflicts.at: Revamp tests to use %no-default-prec.
+	* NEWS, doc/bison.texinfo: Document the above.
+
+2003-10-01  Akim Demaille  <akim@epita.fr>
+
+	VCG no longer supports long_straight_phase.
+
+	* src/vcg.c, src/vcg.h: Remove the handling of long_straight_phase.
+	* src/print_graph.c (print_graph): Adjust.
+
+2003-09-30  Frank Heckenbach  <frank@g-n-u.de>
+	and Paul Eggert  <eggert@twinsun.com>
+
+	* doc/bison.texinfo (Decl Summary, Contextual Precedence,
+	Table of Symbols): Document %default-prec.
+	* src/parse-gram.y (PERCENT_DEFAULT_PREC): New token.
+	(grammar_declaration): Set default_prec on %default-prec.
+	* src/scan-gram.l (%default-prec): New token.
+	* src/reader.h (default_prec): New flag.
+	* src/reader.c: Likewise.
+	(packgram): Handle it.
+	* tests/conflicts.at (%default-prec without %prec,
+	%default-prec with %prec, %default-prec 1): New tests.
+
+2003-09-30  Paul Eggert  <eggert@twinsun.com>
+
+	* tests/testsuite.at: Include local.at, not input.at, fixing
+	a typo in the 2003-08-25 patch.
+
+2003-08-27  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (yyparse) [__GNUC__]: "Use" yyerrorlab to pacify
+	GCC warnings.
+
+2003-08-26  Akim Demaille  <akim@epita.fr>
+
+	* config/announce-gen (print_changelog_deltas): Neutralize "<#" as
+	"<\#" to avoid magic from Gnus when posting parts of this script.
+
+2003-08-26  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (Parser::report_syntax_error_): New, extracted from
+	(Parser::parse): here.
+	Adjust: nerrs and errstatus is now replaced by...
+	(Parser::nerrs_, Parser::errstatus_): New.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	* config/announce-gen, Makefile.cfg: New.
+	* Makefile.am: Adjust.
+	* GNUmakefile, Makefile.maint: Update from CVS Autoconf, but
+	keeping local WGET and WGETFLAGS modifications from Paul Eggert.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	When reducing initial empty rules, Bison parser read an initial
+	location that is not defined.  This results in garbage, and that
+	affects Bison's own parser.  Therefore we need (i) to extend Bison
+	to support a means to initialize this location, and (ii) to use
+	this CVS Bison to fix CVS Bison's parser.
+
+	* src/reader.h, reader.c (epilogue_augment): Remove, replace
+	with...
+	* src/muscle_tab.h, src/muscle_tab.c (muscle_code_grow): this.
+	* src/parse-gram.y: Adjust.
+	(%initial-action): New.
+	(%error-verbose): Since we require CVS Bison, there is no reason
+	not to use it.
+	* src/scan-gram.l: Adjust.
+	* src/Makefile.am (YACC): New, to make sure we use our own parser.
+	* data/yacc.c (yyparse): Use b4_initial_action.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Don't promote stdout for error messages.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (Parser::reduce_print_): Remove unused yyi.
+	From Alexandre Duret-Lutz.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	Version 1.875c.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (Parser::stack_print_, YY_STACK_PRINT): New.
+	Use them.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (Parser::reduce_print_): New.
+	Use it.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	Have lalr1.cc catch with Paul Eggert's patch to fix the infinite
+	error recovery loops.  This patch is based on
+	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00000.html>.
+	Also, augment the similarity between lalr1.cc and yacc.c.
+	Note: the locations of error recovery rules are not correct yet.
+
+	* data/lalr1.cc: Comment changes to augment the similarity between
+	lalr1.cc and yacc.c.
+	(YYERROR): Goto to yyerrorlab, not yyerrlab1.
+	(yyerrlab1): Remove, but where it used to be (now the bottom part of
+	yyerrlab), when hitting EOF, pop the whole stack here instead of
+	merely falling through the default error handling mechanism.
+	(yyerrorlab): New label, with the old contents of YYERROR,
+	plus the following change: pop the stack of rhs corresponding
+	to the production that invoked YYERROR.  That is how Yacc
+	behaves (required by POSIX).
+	* tests/calc.at (AT_CHECK_CALC_LALR1_CC): No longer expected to
+	fail.
+
+2003-08-25  Akim Demaille  <akim@epita.fr>
+
+	Tune local.at so that people can "autom4te -l autotest calc.at -o
+	calc" for instance, to extract a sub test suite.
+
+	* tests/testsuite.at: Move the initialization, Autotest version
+	requirement, and AT_TESTED invocation into...
+	* tests/local.at: here.
+	* tests/testsuite.at: Include it for compatibility with Autoconf
+	2.57.
+	* tests/Makefile.am ($(TESTSUITE)): Report that the warning should
+	be ignore.
+
+2003-08-04  Paul Eggert  <eggert@twinsun.com>
+
+	Rework code slightly to avoid gcc -Wtraditional warnings.
+	* data/glr.c (yyuserMerge): Return void, not YYSTYPE.
+	The returned value is now stored in *YY0.  All callers changed.
+	* src/output.c (merge_output): Adjust to the above change.
+
+2003-07-26  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (YYASSERT): New macro.
+	(yyfillin, yydoAction, yyglrReduce, yysplitStack,
+	yyresolveStates, yyprocessOneStack):
+	Use `YYASSERT (FOO);' rather than `if (! (FOO)) abort ();'.
+	Derived from a suggestion by Frank Heckenbach.
+
+2003-07-25  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (yyglrReduce): Don't use C89 string concatenation,
+	for portability to K&R C (after ansi2knr, presumably).  See
+	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00041.html>
+	by Frank Heckenbach, though I have omitted the structure-initialization
+	part of his glr-knr.diff patch since I recall that the Portable
+	C Compiler didn't require that change.
+
+	Let the user specify how to allocate and free memory.
+	Derived from a suggestion by Frank Heckenbach in
+	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00041.html>.
+	* data/glr.c (YYFREE, YYMALLOC, YYREALLOC): New macros.
+	All uses of free, malloc, realloc changed to use these macros,
+	and unnecessary casts removed.
+	* data/yacc.c (YYFREE, YYMALLOC): Likewise.
+
+2003-07-06  Matthias Mann  <MatthiasMann@gmx.de>
+
+	* data/lalr1.cc (operator<<(std::ostream&, const Position&)):
+	use s.empty() rather than s == "" to test for empty string; see
+	<http://lists.gnu.org/archive/html/bison-patches/2003-07/msg00003.html>
+	(trivial change)
+
+2003-06-25  Akim Demaille  <akim@epita.fr>
+
+	* config/depcomp, config/install-sh: Update from masters.
+
+2003-06-20  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (YYLLOC_DEFAULT): Parenthesize arguments as needed,
+	and return properly parenthesized result.
+	* data/lalar1.cc (YYLLOC_DEFAULT): Likewise.
+	* data/yacc.c (YYLLOC_DEFAULT): Likewise.
+	Remove unnecessary parentheses from uses.
+	* doc/bison.texinfo (Location Default Action): Describe the
+	conventions for parentheses.
+
+2003-06-19  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (yyremoveDeletes, yy_reduce_print, yyglrReduce,
+	yyreportTree): Do not assume that size_t is the same width as int,
+	when printing sizes.  Print sizes using an unsigned format.
+	Problem reported by Frank Heckenbach in
+	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00035.html>.
+
+	Port to Forte Developer 7 C compiler.
+	* data/glr.c (struct YYLTYPE): If locations are not being used,
+	declare a single dummy member, as empty structs do not conform
+	to the C standard.
+	(YYERROR, YYBACKUP): Do not use "do { ...; return foo; } while (0)";
+	the Forte Developer 7 C compiler complains that end-of-loop
+	code is not reached.
+
+2003-06-17  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/libiberty.h (PARAMS): Spell argument as Args, not as X, to
+	avoid warnings from picky compilers about redefinition of PARAMS.
+
+2003-06-17  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.875b.
+
+	* NEWS: Document 1.875b.
+
+	* lib/bbitset.h: Do not include config.h; that's the includer's job.
+	Do not include <sys/types.h>; shouldn't be needed on a C89 host.
+	* lib/bitset.h (bitset_compatible_p): Indent as per GNU standard.
+	Don't use 'index' in comments, as it's a builtin fn on some hosts.
+	* lib/bitset_stats.c: Include gettext.h unconditionally, as
+	per recent gettext manual's suggestion.
+	* lib/ebitset.c (ebitset_resize, ebitset_unused_clear):
+	Use prototypes, not old-style definitions.
+	* lib/lbitset.c (lbitset_unused_clear): Likewise.
+	* lib/vbitset.c (vbitset_resize, vbitset_ones, vbitset_zero,
+	vbitset_empty_p, vbitset_copy1, vbitset_not, vbitset_equal_p,
+	vbitset_subset_p, vbitset_disjoint_p, vbitset_and, vbitset_and_cmp,
+	vbitset_andn, vbitset_andn_cmp, vbitset_or, vbitset_or_cmp,
+	vbitset_xor, vbitset_xor_cmp, vbitset_and_or, vbitset_and_or_cmp,
+	vbitset_andn_or, vbitset_andn_or_cmp, vbitset_or_and,
+	vbitset_or_and_cmp, vbitset_copy): Likewise.
+
+	* lib/libiberty.h: Do not include config.h; that's the includer's job.
+	Do not include <stdlib.h>.
+	(PARAMS): Define unconditionally for C89.
+	(ATTRIBUTE_NORETURN): Remove.
+	(ATTRIBUTE_UNUSED): Define unconditionally.
+
+	Upgrade to 2003-06-08 libbitset, submitted by Michael Hayes in:
+	<http://lists.gnu.org/archive/html/bison-patches/2003-06/msg00005.html>
+	* lib/Makefile.am (bitsets_sources): Add vbitset.c, vbitset.h.
+	* lib/vbitset.c, lib/vbitset.h: New files.
+	* lib/abitset.c, lib/bbitset.h, lib/bitset.c, lib/bitset.h,
+	lib/bitset_stats.c, lib/ebitset.c, lib/lbitset.c: Import
+	from libbitset.
+
+	* doc/bison.texinfo (How Can I Reset the Parser): Renamed from
+	`How Can I Reset @code{yyparse}', since texinfo does not allow
+	arbitrary @ in node names.
+
+	* m4/Makefile.am (EXTRA_DIST): Add the following files, which
+	shouldn't be needed according to the gettext 0.12.1 documentation
+	but which seem to be needed anyway: codeset.m4 glibc21.m4
+	intdiv0.m4 inttypes-pri.m4 inttypes.m4 inttypes_h.m4 isc-posix.m4
+	lcmessage.m4 nls.m4 po.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4.
+	* po/Makefile.in.in: Upgrade to gettext 0.12.1 version.
+
+	* lib/.cvsignore: Add stdbool.h.
+	* m4/.cvsignore: Add nls.m4, po.m4.
+
+	Upgrade to CVS gnulib.
+	* stdbool_.h: File renamed from stdbool.h.in.
+	* configure.ac (AM_STDBOOL_H): Invoke this instead of
+	AC_HEADER_STDBOOL.
+	(AM_GNU_GETTEXT): Put brackets around args, as latest manual suggests.
+	(AM_GNU_GETTEXT_VERSION): Update to 0.12.1.
+	* lib/Makefile.am (EXTRA_DIST): Add stdbool_.h.
+	(MOSTLYCLEANFILES): New var.
+	($(libbison_a_OBJECTS)): Depend on $(STDBOOL_H).
+	(stdbool.h): New rule.
+	* lib/dirname.c, lib/dirname.h, lib/hash.c, lib/hash.h,
+	lib/malloc.c, lib/obstack.h, lib/quote.c, lib/realloc.c,
+	lib/strcasecmp.c, lib/xalloc.h, m4/alloca.m4, m4/onceonly.m4,
+	m4/quote.m4: Upgrade to today's gnulib.
+
+	* tests/calc.at (AT_CHECK_CALC): New option EXPECTED-TO-FAIL.
+	(AT_CHECK_CALC_LALR1_CC): Use it, since the C++ LALR parser fails
+	the tests right now.
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Ensure yylex and
+	yyerror are declared before use; C99 requires this.
+
+2003-06-09  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* data/glr.c (YYERROR): Update definition to reset yyerrState to 0
+	first.
+	(yyrecoverSyntaxError): Correct the logic for setting and testing
+	yyerrState.
+	Correct comment on handling EOF.
+	Allow states with only a default reduction, rather than failing
+	(I can't quite reconstruct why these were not allowed before).
+
+	Fixes to avoid problem that $-N rules in GLR parsers can cause
+	buffer overruns, corrupting state.
+
+	* src/output.c (prepare_rules): Output max_left_semantic_context
+	definition.
+	* src/reader.h (max_left_semantic_context): New variable declaration.
+	* src/scan-gram.l (max_left_semantic_context): Define.
+	(handle_action_dollar): Update max_left_semantic_context.
+	* data/glr.c (YYMAXLEFT): New definition.
+	(yydoAction): Increase size of yyrhsVals by YYMAXLEFT.
+	(yyresolveAction): Ditto.
+
+	Fixes to problems with location handling in GLR parsers reported by
+	Frank Heckenbach (2003/06/05).
+
+	* data/glr.c (YYLTYPE): Make trivial if locations not used.
+	(YYRHSLOC): Add parentheses, and define only if locations used.
+	(YYLLOC_DEFAULT): Add parentheses, and give trivial definition if
+	locations not used.
+	(yyuserAction): Use YYLLOC_DEFAULT to set *yylocp.
+	(yydoAction): Remove redundant initialization of *yyvalp and *yylocp.
+
+	* tests/cxx-type.at: Exercise location information; update tests
+	to differentiate output with and without locations.
+	Remove forward declarations of yylex and yyerror---caused errors
+	because default YYLTYPE not yet defined.
+	Change semantic actions to compute strings, rather than printing
+	them directly (to test proper passing of semantics values).  Change
+	output to prefix notation and update test data and expected results.
+	(yylex): Track locations.
+	(stmtMerge): Return value rather than printing, and include arguments
+	in value.
+
+2003-06-03  Paul Eggert  <eggert@twinsun.com>
+
+	Avoid warnings generated by GCC 2.95.4 when Bison is
+	configured with --enable-gcc-warnings.
+	* data/lalr1.cc (yy::]b4_parser_class_name[::parse,
+	yy::]b4_parser_class_name[::translate_,
+	yy::Stack::operator[] (unsigned),
+	yy::Stack::operator[] (unsigned) const,
+	yy::Slice::operator[] (unsigned),
+	yy::Slice::operator[] (unsigned) const):
+	Rename local vars to avoid warnings.
+	* tests/glr-regression.at (Improper handling of embedded actions
+	and $-N in GLR parsers): Remove unused local variable from yylex.
+	* tests/regression.at (_AT_DATA_DANCER_Y): Declare yylex to take
+	(void) as arg when not pure, since we now assume C89 when building
+	Bison.  Pacify GCC by using parameter.
+
+2003-06-02  Paul Eggert  <eggert@twinsun.com>
+
+	* data/lalr1.cc (yy::Position::lines, yy::Position::columns,
+	yy::Location::lines, yy::Location::columns): Rename arguments
+	to avoid shadowing; this removes a warning generated by GCC 3.3.
+
+2003-06-01  Paul Eggert  <eggert@twinsun.com>
+
+	Don't pass C-only warning optins (e.g., -Wmissing-declarations)
+	to g++, as GCC 3.3 complains if you do it.
+	* configure.ac (WARNING_CXXFLAGS): New subst.  Set it to
+	everything that WARNING_CFLAGS has, except omit warnings
+	not suitable for C++.
+	(AC_PROG_CXX): Use this instead of AC_CHECK_PROGS([CXX], [g++]).
+	* tests/atlocal.in (CXXFLAGS): New var.
+	* tests/local.at (AT_COMPILE_CXX): Use it instead of CFLAGS.
+
+	Fix a GLR parser bug I reported in February; see
+	<http://lists.gnu.org/archive/html/bison-patches/2003-02/msg00008.html>.
+	The problem was that GLR parsers did not conform to the C standard,
+	because actions like { $1 = $2 + $3; } expanded to expressions
+	that invoked YYFILL in separate subexpressions, and YYFILL assigned
+	to a local variable.  The C standard says that expressions
+	like (var = f ()) + (var = f ()) have undefined behavior.
+	Another problem was that GCC sometimes issues warnings that
+	yyfill and its parameters are unused.
+
+	* data/glr.c (yyfillin): Renamed from the old yyfill.  Mark
+	as possibly unused.
+	(yyfill): New function.
+	(YYFILL): Use it.
+	(yyuserAction): Change type of yynormal to bool, so that it matches
+	the new yyfill signature.  Mark it as possibly unused.
+
+
+	Follow up on a bug I reported in February, where a Bison-generated
+	parser can loop.  Provide a test case and a fix for yacc.c.  I
+	don't have a fix for lalr1.cc or for glr.c, unfortunately.
+	The original bug report is in:
+	<http://lists.gnu.org/archive/html/bison-patches/2003-02/msg00044.html>
+
+	* data/yacc.c (YYERROR): Now just 'goto yyerrorlab', since the
+	macro's size was becoming unwieldy.
+	(yyerrlab): Do not discard an empty lookahead symbol, as this
+	might destroy garbage.
+	(yyerrorlab): New label, with the old contents of YYERROR,
+	plus the following change: pop the stack of rhs corresponding
+	to the production that invoked YYERROR.  That is how Yacc
+	behaves, and POSIX requires this behavior.
+	(yyerrlab1): Use YYPOPSTACK instead of its definiens.
+	* tests/calc.at (_AT_DATA_CALC_Y): Include unistd.h if available.
+	Define 'alarm' to do nothing if unistd.h is not available.
+	Add a new rule "exp: '-' error;" to test the above change to
+	data/yacc.c.  Use 'alarm' to abort any test taking longer than
+	10 seconds, as it's probably looping.
+	(AT_CHECK_CALC): Test recovery from error in new grammar rule.
+	Also, the new yacc.c generates two fewer diagnostics for an
+	existing test.
+
+2003-05-24  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (YYSTACKEXPANDABLE): Do not evaluate
+	YYSTYPE_IS_TRIVIAL or YYSTYPE_IS_TRIVIAL unless they are defined.
+	This fixes a problem reported by John Bowman when the Compaq/HP
+	Alpha cxx compiler happy (e.g. using cxx -D__USE_STD_IOSTREAM
+	-ansi -Wall -gall).
+	* data/yacc.c (union yyalloc): Likewise.
+	(YYCOPY): Do not evaluate __GNUC__ unless it is defined.
+
+	Switch from 'int' to 'bool' where that makes sense.
+
+	* lib/abitset.c (abitset_test, abitset_empty_p, abitset_equal_p,
+	abitset_subset_p, abitset_disjoint_p, abitset_and_cmp,
+	abitset_andn_cmp, abitset_or_cmp, abitset_xor_cmp, abitset_and_or,
+	abitset_and_or_cmp, abitset_andn_or_cmp, abitset_or_and_cmp):
+	Return or accept bool, not int.  All callers changed.
+	* lib/bbitset.h: (bitset_toggle_, bitset_copy_, bitset_and_or_cmp_,
+	bitset_andn_or_cmp_, bitset_or_and_cmp_): Likewise.
+	* lib/bitset.c (bitset_only_set_p, bitset_print, bitset_toggle_,
+	bitset_copy_, bitset_op4_cmp, bitset_and_or_cmp_, bitset_andn_or_cmp_,
+	bitset_or_and_cmp_): Likewise.
+	* lib/bitset.h (bitset_test, bitset_only_set_p): Likewise.
+	* lib/bitset_stats.c (bitset_stats_print, bitset_stats_toggle,
+	bitset_stats_test, bitset_stats_empty_p, bitset_stats_disjoint_p,
+	bitset_stats_equal_p, bitset_stats_subset_p, bitset_stats_and_cmp,
+	bitset_stats_andn_cmp, bitset_stats_or_cmp, bitset_stats_xor_cmp,
+	bitset_stats_and_or_cmp, bitset_stats_andn_or_cmp,
+	bitset_stats_or_and_cmp): Likewise.
+	* lib/ebitset.c (ebitset_elt_zero_p, ebitset_equal_p, ebitset_copy_cmp,
+	ebitset_test, ebitset_empty_p, ebitset_subset_p, ebitset_disjoint_p,
+	ebitset_op3_cmp, ebitset_and_cmp, ebitset_andn_cmp, ebitset_or_cmp,
+	ebitset_xor_cmp): Likewise.
+	* lib/lbitset.c (lbitset_elt_zero_p, lbitset_equal_p, lbitset_copy_cmp,
+	lbitset_test, lbitset_empty_p, lbitset_subset_p, lbitset_disjoint_p,
+	lbitset_op3_cmp, lbitset_and_cmp, lbitset_andn_cmp, lbitset_or_cmp,
+	lbitset_xor_cmp): Likewise.
+	* lib/bbitset.h: Include <stdbool.h>.
+	(struct bitset_vtable): The following members now return bool, not
+	int: toggle, test, empty_p, disjoint_p, equal_p, subset_p,
+	and_cmp, andn_cmp, or_cmp, xor_cmp, and_or_cmp, andn_or_cmp,
+	or_and_cmp).
+	* src/conflicts.c (count_rr_conflicts): Likewise.
+	* lib/bitset_stats.h (bitset_stats_enabled): Now bool, not int.
+	All uses changed.
+	* lib/ebitset.c (ebitset_obstack_init): Likewise.
+	* lib/lbitset.c (lbitset_obstack_init): Likewise.
+	* src/getargs.c (debug_flag, defines_flag, locations_flag,
+	no_lines_flag, no_parser_flag, token_table_flag, yacc_flag,
+	graph_flag): Likewise.
+	* src/getargs.h (debug_flag, defines_flag, locations_flag,
+	no_lines_flag, no_parser_flag, token_table_flag, yacc_flag,
+	graph_flag): Likewise.
+	* src/output.c (error_verbose): Likewise.
+	* src/output.h (error_verbose): Likewise.
+	* src/reader.c (start_flag, typed): Likewise.
+	* src/reader.h (typed): Likewise.
+	* src/getargs.c (LOCATIONS_OPTION): New constant.
+	(long_options, getargs): Use it.
+	* src/lalr.c (build_relations): Use bool, not int.
+	* src/nullable.c (nullable_compute): Likewise.
+	* src/print.c (print_reductions): Likewise.
+	* src/tables.c (action_row, pack_vector): Likewise.
+	* src/muscle_tab.h (MUSCLE_INSERT_BOOL): New macro.
+	* src/output.c (prepare): Use it.
+	* src/output.c (token_definitions_output,
+	symbol_destructors_output, symbol_destructors_output): Use string,
+	not boolean integer, to keep track of whether to output separator.
+	* src/print_graph.c (print_core): Likewise.
+	* src/state.c (state_rule_lookaheads_print): Likewise.
+
+	* config/install-sh: Sync from automake 1.7.5.
+
+2003-05-14  Paul Eggert  <eggert@twinsun.com>
+
+	* src/parse-gram.y (rules_or_grammar_declaration): Require a
+	semicolon after a grammar declaration, in the interest of possible
+	future changes to the Bison input language.
+	Do not allow a stray semicolon at the start of the grammar.
+	(rhses.1): Allow one or more semicolons after any rule, including
+	just before "|" as required by POSIX.
+	* tests/input.at (Torturing the Scanner): Add tests for ";|" in a
+	grammar.
+
+2003-05-14  Alexandre Duret-Lutz  <adl@gnu.org>
+
+	%parse-param support for lalr1.cc.
+
+	* data/lalr1.cc (b4_parse_param_decl, b4_parse_param_cons,
+	b4_cc_constructor_calls, b4_cc_constructor_call,
+	b4_parse_param_vars, b4_cc_var_decls, b4_cc_var_decl): New m4
+	definitions.
+	(yy::b4_parser_class_name::b4_parser_class_name): Take extra
+	parse-param arguments.
+	(yy::b4_parser_class_name): Declare instance variables to
+	hold parse-param arguments.
+	* tests/calc.at: s/value/semantic_value/ because value clashes
+	with a member of yy::b4_parser_class_name.  Adjust C++ code
+	to handle %parse-param.  Enable %parse-param test in C++.
+
+2003-05-12  Paul Eggert  <eggert@twinsun.com>
+
+	* doc/bison.texinfo (How Can I Reset @code{yyparse}): Reword the
+	English a bit.  Fix fclose typo.  Change "const char" to "char
+	const", and use ANSI C rather than K&R for "main".  Suggest
+	YY_FLUSH_BUFFER over yyrestart (as that is what Flex recommends)
+	and suggest yy_switch_to_buffer.
+
+2003-05-05  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/bitset.h (__INT_TO_PTR): Define to a value that presumes
+	C89.  This avoids a diagnostic on compilers that define __STDC__
+	to 0, fixing a problem with Tru64 cc reported by Martin Mokrejs in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00041.html>.
+
+2003-05-03  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/bitset.h (BITSET_FOR_EACH, BITSET_FOR_EACH_REVERSE):
+	Do not overrun array bounds.
+	This should fix a bug reported today by Olatunji Oluwabukunmi in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-05/msg00004.html>.
+
+2003-04-29  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h, src/gram.c (pure_parser, glr_parser): Move to...
+	* src/getargs.c, src/getargs.h: here, as bool, not int.
+	(nondeterministic_parser): New.
+	* src/parse-gram.y, src/scan-gram.l: Support
+	%nondeterministic-parser.
+	* src/output.c (prepare): Use nondeterministic_parser instead
+	of glr_parser where appropriate.
+	* src/tables.c (conflict_row, action_row, save_row)
+	(token_actions, token_actions, pack_vector): Ditto.
+
+2003-04-29  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (C++ Parsers, Implementing Loops): New.
+
+2003-04-29  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at: Also test yacc.c and glr.c (but not lalr1.cc yet)
+	with %pure-parser and %locations to exercise the patch from Yakov
+	Markovitch below.
+
+2003-04-28  Tim Van Holder <tim.van.holder@pandora.be>
+
+	* data/yacc.c: (b4_lex_param): Corrected for the case where
+	%lex-param is provided and %pure-parser isn't.
+
+2003-04-27  Paul Eggert  <eggert@twinsun.com>
+
+	Avoid gcc -Wundef warnings reported by Gerald Pfeifer in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00044.html>.
+	* data/yacc.c (YYSTACK_ALLOC): Don't evaluate YYSTACK_USE_ALLOCA
+	if it is not defined.
+	(YYMAXDEPTH): Don't evaluate YYMAXDEPTH if it is not defined.
+
+2003-04-26  Paul Eggert  <eggert@twinsun.com>
+
+	* data/lalr1.cc (yy::Parser::pact_ninf_, yy::Parser::table_ninf_):
+	Declare to be of type suitable for the ninf value itself, not of
+	type suitable for the corresponding table, since the latter might
+	be unsigned but the ninf value might be negative.  This fixes a
+	bug reported by Alexandre Duret-Lutz in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00017.html>.
+
+	* configure.ac (AC_FUNC_ERROR_AT_LINE): Remove, since gl_ERROR
+	invokes it.  We shouldn't invoke it twice because it will attempt
+	to put error.o in the archive twice.  This fixes a glitch reported
+	by Martin Mokrejs in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00041.html>.
+
+2003-04-21  Paul Eggert  <eggert@twinsun.com>
+
+	* m4/error.m4: Update from Bruno Haible's 2003-04-14 patch
+	to gnulib.
+
+2003-04-21  Yakov Markovitch <Markovitch@iso.ru>
+
+	* data/glr.c (yyexpandGLRStack) [!YYSTACKEXPANDABLE]:
+	Fix obvious typo that results in uncompilable GLR parsers
+	when both %pure-parser and %locations are used.  (trivial change)
+
+2003-04-17  Paul Eggert  <eggert@twinsun.com>
+
+	* src/scan-gram.l: Add %option nounput, since we no longer use unput.
+	(unexpected_eof): Renamed from unexpected_end_of_file, for brevity.
+	Do not insert the expected token via unput, as this runs afoul
+	of a POSIX-compatibility bug in flex 2.5.31.
+	All uses changed to BEGIN the parent state,
+	since we no longer insert the expected token via unput.
+	* tests/regression.at (Invalid inputs): Remove cascaded diagnostic
+	that is no longer emitted after the above change.
+
+	* src/conflicts.c (set_conflicts): Resolve all conflicts, not just
+	the first one.  This change is from Paul Hilfinger, and it fixes
+	regression reported by Werner Lemberg in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00026.html>.
+
+	(resolve_sr_conflict): Don't invoke state_errs_set
+	unless one or more tokens have been explicitly made errors.
+	Otherwise, the above change causes Bison to abort.
+
+	* tests/existing.at (GNU pic Grammar): New test case, taken from
+	Lemberg's email.
+
+2003-03-31  Akim Demaille  <akim@epita.fr>
+
+	* doc/Makefile.am (AM_MAKEINFOFLAGS): Don't split the info file.
+
+2003-03-31  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (prepare_symbols): Avoid trailing spaces in the
+	output.
+
+2003-03-31  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Strings are Destroyed): s/losses/loses/.
+	From Paul Hilfinger.
+
+2003-03-29  Akim Demaille  <akim@epita.fr>
+
+	* m4/error.m4: Do not put under dynamic conditions some code which
+	expansion is under static control.
+
+2003-03-29  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (How Can I Reset @code{yyparse}): New.
+
+2003-03-29  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Strings are Destroyed): New.
+
+2003-03-13  Paul Eggert  <eggert@twinsun.com>
+
+	* .cvsignore: Add configure.lineno.
+	* src/.cvsignore: Add yacc.
+	* tests/.cvsignore: Add testsuite.log.
+	* doc/fdl.texi: Sync with latest FSF version.
+
+2003-03-12  Paul Eggert  <eggert@twinsun.com>
+
+	* scan-gram.l (YY_USER_INIT): Initialize code_start, too.
+	(<INITIAL><<EOF>>, <SC_PRE_CODE><<EOF>>): Set *loc to the scanner
+	cursor, instead of leaving it undefined.  This fixes a bug
+	reported by Tim Van Holder in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-03/msg00023.html>.
+	* tests/input.at (Torturing the Scanner): Test the scanner on
+	an empty input file, which was Tim Van Holder's test case.
+
+	* m4/timevar.m4 (BISON_PREREQ_TIMEVAR): When checking whether
+	<sys/resource.h> can be included, include sys/time.h and
+	sys/times.h first, if available.  This works around the SunOS
+	4.1.4 porting bug reported by Bruce Becker in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-03/msg00018.html>.
+
+	* m4/subpipe.m4 (BISON_PREREQ_SUBPIPE): Don't
+	AC_CHECK_HEADERS([sys/wait.h]), as this interferes with
+	AC_HEADER_SYS_WAIT.
+
+	Merge changes from gnulib.  This was prompted because the CVS
+	snapshot didn't build on Solaris 7 due to strnlen problems.
+
+	These changes need to be merged back into gnulib:
+	* lib/hash.c: Include <stdbool.h> unconditionally.
+	* m4/onceonly.m4 (m4_quote): New macro.
+	(AC_CHECK_HEADERS_ONCE, AC_CHECK_FUNCS_ONCE, AC_CHECK_DECLS_ONCE):
+	Quote AC_FOREACH variable-expansions properly.
+	The 2003-01-03 obstack.h change also needs merging.
+	{end of changes requiring merging}
+
+	* lib/stdbool.h.in, m4/alloca.m4, m4/dirname.m4, m4/dos.m4,
+	m4/getopt.m4, m4/hash.m4, m4/malloc.m4, m4/memchr.m4,
+	m4/memrchr.m4, m4/obstack.m4, m4/onceonly.m4, m4/quote.m4,
+	m4/quotearg.m4, m4/realloc.m4, m4/stpcpy.m4, m4/strnlen.m4,
+	m4/strtol.m4, m4/strtoul.m4, m4/unlocked-io.m4, m4/xalloc.m4:
+	New files, imported from gnulib.
+	* m4/Makefile.am (EXTRA_DIST): Add the new m4/*.m4 files mentioned
+	above.
+
+	* lib/mbswidth.c, m4/error.m4, m4/mbrtowc.m4, m4/mbswidth.m4,
+	m4/memcmp.m4, m4/prereq.m4, m4/stdbool.m4: Update to current
+	gnulib sources.
+
+	* configure.ac (gl_DIRNAME, gl_GETOPT, gl_HASH, gl_QUOTE, gl_XALLOC):
+	Add.
+	(gl_ERROR): New, replacing jm_PREREQ_ERROR.
+	(gl_FUNC_ALLOCA): New, replacing AC_FUNC_ALLOCA.
+	(gl_FUNC_STPCPY): New, replacing AC_REPLACE_FUNCS(stpcpy).
+	(gl_FUNC_STRNLEN): New, replacing AC_FUNC_STRNLEN.
+	(gl_MBSWIDTH): New, replacing jm_PREREQ_MBSWIDTH.
+	(gl_OBSTACK): New, replacing AC_FUNC_OBSTACK.
+	(gl_QUOTEARG): New, replacing jm_PREREQ_QUOTEARG.
+	(jm_FUNC_GLIBC_UNLOCKED_IO, gl_FUNC_STPCPY, gl_FUNC_STRTOL): New.
+	(jm_FUNC_MALLOC): New, replacing AC_FUNC_MALLOC.
+	(jm_FUNC_REALLOC): New, replacing AC_FUNC_REALLOC.
+	(jm_PREREQ_ARGMATCH): Remove.
+	(AC_REPLACE_FUNCS): Remove memchr, memrchr, stpcpy, strtol, strtoul.
+	* lib/Makefile.am (libbison_a_SOURCES): Add argmatch.c, argmatch.h.
+
+	* src/system.h: Include <stdbool.h> unconditionally.
+
+	* lib/bbitset.h: Include <limits.h> unconditionally.  We have been
+	assuming at least C89 in the bitset code for some time now.
+
+2003-03-03  Akim Demaille  <akim@epita.fr>
+
+	* ro.po: New.
+
+2003-03-02  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Table of Symbols): Reactivate the
+	documentation for %lex-param, and %parse-param.
+
+2003-03-02  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c, data/glr.c, data/lal1.cc: Use similar code to
+	generate verbose error messages.
+	Use the number of tokens as an upper bound in yytname, as it
+	cannot be a non terminal.
+
+2003-03-02  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (_AT_DATA_DANCER_Y): Fix the expected error
+	message.
+
+2003-03-02  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (_AT_DATA_DANCER_Y, AT_CHECK_DANCER): New.
+	Use them to exercise yycheck overrun.
+	Based on Andrew Suffield's grammar.
+
+2003-03-02  Akim Demaille  <akim@epita.fr>
+
+	Create tests/local.at for Bison generic testing macros.
+
+	* tests/calc.at (AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): Move to...
+	* tests/local.at (AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS):
+	This new file.
+	* tests/calc.at (AT_CHECK_CALC): Adjust.
+	* tests/testsuite.at (AT_DATA_GRAMMAR_PROLOGUE, AT_DATA_GRAMMAR)
+	(AT_COMPILE, AT_COMPILE_CXX, AT_PARSER_CHECK): Move to...
+	* tests/local.at: here.
+	(AT_COMPILE_CXX): Tags the tests using it as c++.
+	Ignore the test if CXX is not functional.
+
+2003-03-01  Paul Eggert  <eggert@twinsun.com>
+
+	* src/scan-gram.l (code_start): Initialize it to scanner_cursor,
+	not loc->end, since loc->end might contain garbage and this leads
+	to undefined behavior on some platforms.
+	(id_loc, token_start): Use (IF_LINTed) initial values that do not
+	depend on *loc, so that the reader doesn't give the the false
+	impression that *loc is initialized.
+	(<INITIAL>"%%"): Do not bother setting code_start, since its value
+	does not survive the return.
+
+2003-03-01  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l (code_start): Always initialize it when entering
+	into yylex, as SC_EPILOGUE is activated *before* the corresponding
+	yylex invocation.  An alternative would be making it static, but
+	then it starts with the second %%'s beginning, instead of its end.
+
+2003-02-28  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/mbswidth.c: Include <wchar.h> before "mbswidth.h", to work
+	around a UnixWare 7.1.1 porting bug reported by John Hughes in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-02/msg00030.html>.
+
+2003-02-26  Paul Eggert  <eggert@twinsun.com>
+
+	* README: Mention compiler bug in Sun Forte Developer 6 update 2.
+	Remove Sequent/Pyramid discussion (nobody uses them any more).
+	Merge VMS and MS-DOS discussion; these ports may well be dead
+	but let's keep mentioning them for now.  Put <> around email
+	addresses.  Add copyright notice.
+
+2003-02-24  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (yy_reduce_print): yylineno -> yylno,
+	to avoid collision with flex use of yylineno.
+	Problem reported by Bruce Lilly in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-02/msg00016.html>.
+	* data/lalr1.cc (yy::]b4_parser_class_name[::parse): Likewise.
+	* data/yacc.c (yy_reduce_print): Likewise.
+
+	* config/depcomp: Sync with Automake 1.7.3.
+
+2003-02-21  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: Use temporary variables instead of casts to
+	change integer types.
+	Suggested by Paul Eggert.
+
+2003-02-21  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Use "location" consistently to refer to @n,
+	to avoid confusions with lalr1.cc's notion of Position.
+	Suggested by Paul Eggert.
+
+2003-02-20  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (position.hh): Make sure "columns" never pushes
+	before initial_columns.
+	(location.hh): Use consistent variable names when defining the
+	operator<<.
+	Use "last" so that we subtract from Positions, not from unsigned.
+
+2003-02-20  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (position.hh): New subfile, including the extended
+	and Doxygen'ed documentation of class Position.
+	(location.hh): Use it.
+	Document a` la Doxygen.
+	With the help of Benoit Perrot.
+
+2003-02-20  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at (AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): Define
+	AT_YACC_IF.
+	Redefine AT_YYERROR_SEES_LOC_IF using it.
+	(_AT_DATA_CALC_Y): Don't declare yyerror when lalr1.cc, as it is
+	not defined.
+	Don't use the location in yy::Parser::error_ and
+	yy::Parser::print_ when not %locations.
+	Activate more lalr1.cc tests.
+
+2003-02-19  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: When displaying a line number, be sure to make it
+	an int.
+
+2003-02-19  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (b4_stack_depth_init, yy::Parser::initdepth_):
+	Remove, useless.
+	(YYABORT, YYACCEPT, YYERROR): New.
+	* tests/calc.at: Renable the lalr1.cc test.
+
+2003-02-19  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at (AT_CHECK_CALC): Check different scenarios of
+	error recovery, mixing with/without pops and discarding of the
+	lookahead.
+	Exercise YYERROR.
+	Disable the lalr1.cc tests as currently it doesn't support YYERROR.
+
+2003-02-17  Paul Eggert  <eggert@twinsun.com>
+
+	* tests/atlocal.in (LDFLAGS, LIBS): New vars.
+	* tests/testsuite.at (AT_COMPILE): Use them.
+	This fixes the testsuite problem reported by Robert Lentz in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-02/msg00011.html>.
+
+2003-02-12  Paul Eggert  <eggert@twinsun.com>
+
+	* data/yacc.c (yyerrlab) [YYERROR_VERBOSE]:
+	Avoid subscript error in yycheck.  Bug reported by Andrew Suffield in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-02/msg00003.html>.
+	* data/glr.c (yyreportSyntaxError) [YYERROR_VERBOSE]: Likewise.
+	Check for malloc failure, for consistency with yacc.c.
+	(yytname_size): Remove, for consistency with yacc.c.
+
+	The bug still remains in data/lalr1.cc, as I didn't have time
+	to fix it there.
+
+2003-02-06  Akim Demaille  <akim@epita.fr>
+
+	* configure.ac (GXX): Rename as...
+	(CXX): this, to keep the original Autoconf semantics.
+	Require 2.57.
+	* data/lalr1.cc: Fix b4_copyright invocations.
+	If YYDEBUG is not defined, don't depend upon name_ being defined.
+	(location.hh): Include string and iostream.
+	(Position::filename): New member.
+	(Position::Position ()): New.
+	(operator<< (Position)): New.
+	(operator- (Position, int)): New.
+	(Location::first, Location::last): Rename as...
+	(Location::begin, Location::end): these, to mock the conventional
+	iterator names.
+	(operator<< (Location)): New.
+	* tests/atlocal.in (CXX): New.
+	* tests/testsuite.at (AT_COMPILE_CXX): New.
+	* tests/calc.at (_AT_DATA_CALC_Y): Adjust yyerror to report the
+	locations in a more synthetic way.
+	(AT_CHECK_PUSHDEFS): AT_YYERROR_SEES_LOC_IF is positive if
+	lalr1.cc is used.
+	Adjust the C locations to match those from Emacs: first column is
+	column 0.
+	Change all the expected results.
+	Conform to the GCS: simplify the locations when applicable.
+	(LOC, VAL, YYLLOC_FORMAL, YYLLOC_ARG, USE_YYLLOC, LEX_FORMALS)
+	(LEX_ARGS, USE_LEX_ARGS, LEX_PRE_FORMALS, LEX_PRE_ARGS): Replace
+	these CPP macros with the m4 macros new defined by...
+	(AT_CHECK_PUSHDEFS): this, i.e.:
+	(AT_LALR1_CC_IF, AT_PURE_LEX_IF, AT_LOC, AT_VAL, AT_LEX_FORMALS)
+	(AT_LEX_ARGS, AT_USE_LEX_ARGS, AT_LEX_PRE_FORMALS, AT_LEX_PRE_ARGS)
+	New macros.
+	(AT_CHECK_POPDEFS): Undefine them.
+	(AT_CHECK_CALC_LALR1_CC): New.
+	Use it for the first lalr1.cc test.
+
+2003-02-04  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc (YYLLOC_DEFAULT): Fix its definition: be based on
+	Location as is defined.
+
+2003-02-04  Akim Demaille  <akim@epita.fr>
+
+	* data/lalr1.cc: If YYDEBUG is not defined, don't depend upon
+	name_ being defined.
+
+2003-02-03  Paul Eggert  <eggert@twinsun.com>
+
+	* src/gram.h (start_symbol): Remove unused decl.
+
+	Use more-consistent naming conventions for local vars.
+
+	* src/derives.c (derives_compute): Change type of local var from
+	int to rule_number.
+	* src/gram.c (grammar_rules_partial_print): Likewise.
+	* src/print.c (print_core): Likewise.
+	* src/reduce.c (reduce_grammar_tables): Likewise.
+
+	* src/gram.c (grammar_dump): Change name of item_number *
+	local var from r to rp.
+	* src/nullable.c (nullable_compute): Likewise.
+
+	* src/gram.h (ISTOKEN, ISVAR): Use i, not s, for int var.
+
+	* src/gram.h (symbol_number_as_item_number): Use sym, not s,
+	for symbol or symbol_number var.
+	* src/reader.c (grammar_start_symbol_set): Likewise.
+	* src/reader.h (grammar_start_symbol_set, grammar_symbol_append):
+	Likewise.
+	* src/state.c (transitions_to): Likewise.
+	* src/state.h: Likewise.
+	* src/tables.c (symbol_number_to_vector_number): Likewise.
+
+	* src/muscle_tab.h (MUSCLE_OBSTACK_SGROW): Use p, not s, for
+	char * var.
+
+	* src/parse-gram.y (lloc_default): Use loc, not r, for YYLTYPE
+	var.
+
+	* src/scan-gram.l (no_cr_read): Use bytes_read, not s, for size
+	var.
+
+	* src/system.h (xstrndup, strchr, strspn, strnlen, memchr, memrchr):
+	Use str, not s, for char * var.  Use ch, not c, for character var.
+	Use size for size var.
+
+	* src/uniqstr.c (uniqstr_new, uniqstr_assert): Use str, not s, for
+	char * var.
+	(uniqstr_print, uniqst_print_processor): Use ustr, not s, for
+	uniqstr var.
+	* src/uniqstr.h: Likewise.
+
+	* src/vcg.c (get_color_str, get_textmode_str, get_shape_str,
+	get_layoutalgorithm_str, get_decision_str, get_orientation_str,
+	get_node_alignment_str, get_arrow_mode_str, get_crossing_type_str,
+	get_view_str, get_linestyle_str, get_arrowstyle_str): Rename
+	param to have same name as that of enum, so that we don't use
+	"s" to stand for a non-state.
+
+2003-02-02  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-skel.l: Scan more than one inert character per yylex
+	invocation.
+
+2003-02-01  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.875a.
+
+	* po/LINGUAS: Add ms.
+
+2003-01-30  Akim Demaille  <akim@epita.fr>
+
+	* doc/Makefile.am (CLEANFILES): Add bison.fns for distcheck.
+
+2003-01-29  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* tests/cxx-type.at: Correct apparent typo in Bison input: $$ instead
+	of $1.
+
+	Changes in response to error report by S. Eken: GLR mode does not
+	handle negative $ indices or $ indices in embedded rules correctly.
+	See <http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00076.html>.
+
+	* data/glr.c (b4_rhs_value): Change to use YYFILL macro.
+	(b4_rhs_location): Ditto.
+	(yyfill): New function to copy from stack tree into array
+	incrementally.
+	(yyuserAction): Modify to allow incremental move of semantic values
+	to rhs array when in GLR mode.
+	Define YYFILL to use in user-defined actions to fill semantic array
+	as needed.
+	Remove dummy use of yystack, as there is now a guaranteed use.
+	(yydoAction): Modify to allow incremental move of semantic values
+	to rhs array when in GLR mode.
+	(yyresolveAction): Ditto.
+	(yyglrShiftDefer): Update comment.
+	(yyresolveStates): Use X == NULL for pointers, not !X.
+	(yyglrReduce): Ditto.
+	(yydoAction): Ditto
+
+	* tests/glr-regr1.at: Rename to ...
+	* tests/glr-regression.at: Add new regression test for the problems
+	described above (adapted from S. Eken).
+	Update copyright notice.
+	* tests/testsuite.at: Rename glr-regr1.at to glr-regression.at.
+	* tests/Makefile.am: Ditto.
+
+2003-01-28  Paul Eggert  <eggert@twinsun.com>
+
+	* data/lalr1.cc: Do not use @output_header_name@ unless
+	b4_defines_flag is set.  This fixes two bugs reported by
+	Tim Van Holder in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00071.html>
+	and <http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00073.html>.
+
+2003-01-21  Paul Eggert  <eggert@twinsun.com>
+
+	* data/yacc.c (YYERROR): Move code from yyerrlab1 to here, so that
+	we don't need to worry about yyerrlab1 being reported as an
+	"unused label" by non-GCC C compilers.  The downside is that if
+	locations are used then a couple of statements are duplicated each
+	time YYERROR is invoked, but the upside is that the warnings
+	should vanish.
+	(yyerrlab1): Move code to YERROR.
+	(yyerrlab2): Remove.  Change uses back to yyerrlab1.
+	This reverts some of the 2002-12-27 change.
+
+2003-01-17  Paul Eggert  <eggert@twinsun.com>
+
+	* src/output.c (symbol_printers_output): Fix typo that led
+	to core dump.  Problem reported by Antonio Rus in
+	<http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00058.html>.
+
+2003-01-13  Akim Demaille  <akim@epita.fr>,
+		Quoc Peyrot <chojin@lrde.epita.fr>,
+		Robert Anisko <anisko_r@lrde.epita.fr>
+
+	* data/lalr1.cc (parse::yyerrlab1): When popping the stack, stop
+	when the stacks contain one element, as the loop would otherwise
+	free the last state, and then use the top state (the one we just
+	popped).  This means that the initial elements will not be freed
+	explicitly, as is the case in yacc.c; it is not a problem, as
+	these elements have fake values.
+
+2003-01-11  Paul Eggert  <eggert@twinsun.com>
+
+	* NEWS: %expect-violations are now just warnings, reverting
+	to Bison 1.30 and 1.75 behavior.  This fixes the GCC 3.2
+	bootstrapping problem reported by Matthias Klose; see
+	<http://lists.gnu.org/archive/html/bug-bison/2003-01/msg00053.html>.
+	* src/conflicts.c (conflicts_print): Likewise.
+	* tests/conflicts.at (%expect not enough, %expect too much,
+	%expect with reduce conflicts): Likewise.
+	* doc/bison.texinfo (Expect Decl): Document this.  Also mention
+	that the warning is enabled if the number of conflicts changes
+	(not necessarily increases).
+
+	* src/getargs.c (version): Update copyright year.
+
+2003-01-09  Akim Demaille  <akim@epita.fr>
+
+	* src/Makefile.am, lib/Makefile.am: Use $(VAR) instead of @VAR@.
+
+2003-01-08  Paul Eggert  <eggert@twinsun.com>
+
+	* Makefile.maint (WGETFLAGS):
+	New macro, containing "-C off" to disable proxy caches.
+	All uses of $(WGET) changed to $(WGET) $(WGETFLAGS).
+	(rel-check): Use $(WGET) instead of wget.
+
+2003-01-06  Paul Eggert  <eggert@twinsun.com>
+
+	* doc/bison.texinfo (Generalized LR Parsing): Add a reference to
+	the GLR paper of Scott, Johnstone and Hussain.
+
+2003-01-04  Paul Eggert  <eggert@twinsun.com>
+
+	* configure.ac (AC_ARG_ENABLE): Add --disable-yacc.
+	(YACC_SCRIPT, YACC_LIBRARY): New vars to AC_SUBST.
+	* lib/Makefile.am (lib_LIBRARIES): liby.a -> @YACC_LIBRARY@.
+	(EXTRA_LIBRARIES): New var, for liby.a.
+	* src/Makefile.am (bin_SCRIPTS): yacc -> @YACC_SCRIPT@.
+	(EXTRA_SCRIPTS): New var, for yacc.
+
+	* data/yacc.c (yyerrlab1): Omit attribute if __cplusplus is defined,
+	since GNU C++ (as of 3.2.1) does not allow attributes on labels.
+	Problem reported by Nelson H. F. Beebe.
+
+2003-01-03  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/obstack.h (__INT_TO_PTR) [__STDC__]: Cast result to
+	(void *) to avoid diagnostic with native c89 on SGI IRIX 6.5
+	when compiling Bison 1.875's `bitset bset = obstack_alloc
+	(bobstack, bytes);'.  Problem reported by Nelson H. F. Beebe.
+
+	* src/scan-skel.l (QPUTS): Omit redundant `;' from macro definition.
+	([^@\n]): Renamed from [^@\n]+ so that the token buffer does not
+	grow to a huge size with typical invocation.
+
+	* lib/hash.c (_Bool, bool, false, true, __bool_true_false_are_defined):
+	Use the pattern recommended by Autoconf 2.57, except also protect
+	against double-definition.
+	* src/system.h: Likewise.
+	Portability issues reported by Nelson H. F. Beebe.
+
+	* data/glr.c (yybool): Renamed from bool, to avoid collisions in C.
+	All uses changed.  Provide a definition in both C and C++.
+	(yytrue, yyfalse): Define even if defined (__cplusplus).
+
+	* lib/bitset_stats.c (bitset_stats_list): Remove unused var.
+	Reported by Nelson H. F. Beebe.
+
+	* src/scan-skel.l ("@oline@"): Output lineno+1, not lineno.
+
+2003-01-02  Paul Eggert  <eggert@twinsun.com>
+
+	* data/yacc.c (yyerrlab1): Append `;' after attribute, to
+	pacify the buggy "smart preprocessor" in MacOS 10.2.3.
+	Bug reported by Nelson H. F. Beebe.
+
+2003-01-01  Paul Eggert  <eggert@twinsun.com>
+
+	* Version 1.875.
+
+2002-12-30  Paul Eggert  <eggert@twinsun.com>
+
+	* src/scan-gram.l (<INITIAL,SC_AFTER_IDENTIFIER,SC_PRE_CODE>","):
+	Moved here from...
+	(<INITIAL>","): Here.  This causes stray "," to be treated
+	more uniformly.
+
+	* src/scan-gram.l (<SC_BRACED_CODE>"}"): Output ";" before the
+	last brace in braced code when not in Yacc mode, for compatibility
+	with Bison 1.35.  This resurrects the 2001-12-15 patch to
+	src/reader.c.
+
+	* src/reader.h (YYDECL): Use YYSTYPE, not its deprecated alias
+	yystype.  This follows up the 2002-12-24 YYSTYPE bug fix.
+
+2002-12-28  Paul Eggert  <eggert@twinsun.com>
+
+	* src/symtab.c (symbol_make_alias): Set type of SYMVAL to be
+	that of SYM's type.  This fixes Debian bug 168069, reported by
+	Thomas Olsson.
+
+2002-12-28  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.75f.
+
+	Switch back to the Yacc style of conflict reports, undoing some
+	of the 2002-07-30 change.
+	* doc/bison.texinfo (Understanding): Use Yacc style for
+	conflict reports.  Also, use new way of locating rules.
+	* src/conflicts.c (conflict_report):
+	Renamed from conflict_report_yacc, removing the old
+	'conflict_report'.  Translate the entire conflict report at once,
+	so that we don't assume that "," has the same interpretation in
+	all languages.
+	(conflicts_output): Use Yacc-style conflict report for each state,
+	instead of our more-complicated style.
+	(conflicts_print): Use Yacc-style conflict report, except print
+	the input file name when not emulating Yacc.
+	* tests/conflicts.at (Unresolved SR Conflicts, Defaulted
+	Conflicted Reduction, %expect not enough, %expect too much,
+	%expect with reduce conflicts): Switch to Yacc-style conflict reports.
+	* tests/existing.at (GNU Cim Grammar): Likewise.
+	* tests/glr-regr1.at (Badly Collapsed GLR States): Likewise.
+
+	* src/complain.c (warn_at, warn, complain_at, complain, fatal_at,
+	fatal): Don't invoke fflush; it's not needed and it might even be
+	harmful for stdout, as stdout might not be open.
+	* src/reduce.c (reduce_print): Likewise.
+
+2002-12-27  Paul Eggert  <eggert@twinsun.com>
+
+	Fix a bug where error locations were not being recorded correctly.
+	This problem was originally reported by Paul Hilfinger in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00086.html>.
+
+	* data/yacc.c (yyparse): New local var yylerrsp, to record the
+	top of the location stack's error locations.
+	(yyerrlab): Set it.  When discarding a token, push its location
+	onto yylerrsp so that we don't lose track of the error's end.
+	(yyerrlab1): Now is only the target of YYERROR, so that we can
+	properly record the location of the action that failed.  For GCC
+	2.93 and later, insert an __attribute__ ((__unused__)) to avoid
+	GCC warning about yyerrlab1 being unused if YYERROR is unused.
+	(yyerrlab2): New label, which yyerrlab now falls through to.
+	Compute the error's location by applying YYLLOC_DEFAULT to
+	the locations of all the symbols that went into the error.
+	* doc/bison.texinfo (Location Default Action): Mention that
+	YYLLOC_DEFAULT is also invoked for syntax errors.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR):
+	Error locations include the locations of all the tokens that were
+	discarded, not just the last token.
+
+2002-12-26  Paul Eggert  <eggert@twinsun.com>
+
+	* src/files.c: Include quote.h.
+	(compute_output_file_names): Warn if we detect conflicting
+	outputs to the same file.  This should catch the misunderstanding
+	exemplified by Debian Bug 165349, reported by Bruce Stephens..
+
+	* src/conflicts.c (conflicts_print): If the user specifies
+	"%expect N", report an error if there are any reduce/reduce
+	conflicts.  This is what the manual says should happen.
+	This fixes Debian bug 130890, reported by Anthony DeRobertis.
+	* tests/conflicts.at (%expect with reduce conflicts): New test.
+
+	Don't use m4_include on relative file names, as it doesn't work as
+	desired if there happens to be a file with that name under ".".
+
+	* m4sugar/version.m4: Remove; it was included but it wasn't used.
+	* data/Makefile.am (dist_m4sugar_DATA): Remove m4sugar/version.m4.
+	* data/m4sugar/m4sugar.m4: Don't include m4sugar/version.m4.
+	* data/glr.c, data/lalr1.cc, data/yacc.c: Don't include c.m4.
+	* src/output.c (output_skeleton): Use full path names when
+	specifying a file to include; don't rely on include path, as
+	it's unreliable when the working file contains a file with
+	that name.
+
+2002-12-25  Paul Eggert  <eggert@twinsun.com>
+
+	Remove obsolete references to bison.simple and bison.hairy.
+	Problem mentioned by Aubin Mahe in
+	<http://lists.gnu.org/archive/html/help-bison/2002-12/msg00010.html>.
+	* data/glr.c: Comment fix.
+	* doc/bison.1: Remove references.  Also, mention "yacc".
+
+	* src/getargs.c (getargs) [MSDOS]: Don't assume optarg != NULL
+	with -g option.
+
+	* src/parse-gram.y (declaration): Use enum "report_states" rather
+	than its numeric value 1.
+
+	* src/scan-skel.l ("@output ".*\n): Close any old yyout before
+	opening a new one.  This fixes Debian bug 165349, reported by
+	Bruce Stephens.
+
+2002-12-24  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.75e.
+
+	* Makefile.maint (cvs-update): Don't assume that the shell
+	supports $(...), as Solaris sh doesn't.
+
+	* src/parse-gram.y (lloc_default): Remove test for empty
+	nonterminals at the end, since it didn't change the result.
+
+2002-12-24  Paul Eggert  <eggert@twinsun.com>
+
+	If the user does not define YYSTYPE as a macro, Bison now declares it
+	using typedef instead of defining it as a macro.  POSIX requires this.
+	For consistency, YYLTYPE is also declared instead of defined.
+
+	%union directives can now have a tag before the `{', e.g., the
+	directive `%union foo {...}' now generates the C code
+	`typedef union foo { ... } YYSTYPE;'; this is for Yacc compatibility.
+	The default union tag is `YYSTYPE', for compatibility with Solaris 9
+	Yacc.  For consistency, YYLTYPE's struct tag is now `YYLTYPE'
+	instead of `yyltype'.
+
+	`yystype' and `yyltype' are now obsolescent macros instead of being
+	typedefs or tags; they are no longer documented and will be
+	withdrawn in a future release.
+
+	* data/glr.c (b4_location_type): Remove.
+	(YYSTYPE): Renamed from yystype.
+	(YYSTYPE_IS_DECLARED): New macro, used to prevent double-typedef.
+	(struct YYLTYPE): Renamed from struct yyltype.
+	(YYLTYPE): Renamed from yyltype.
+	(yyltype, yystype): New (and obsolescent) macros,
+	for backward compatibility.
+	* data/yacc.c: Likewise.
+
+	* data/yacc.c (YYSTYPE): Declare as union YYSTYPE if the user
+	does not specify a union tag.  This is for compatibility with
+	Solaris 9 yacc.
+
+	* src/parse-gram.y (add_param): 2nd arg is now char * not char
+	const *, since it is now modified by stripping surrounding { }.
+	(current_braced_code): Remove.
+	(PERCENT_DESTRUCTOR, PERCENT_PRINTER, PERCENT_UNION,
+	PERCENT_LEX_PARAM, PERCENT_PARSE_PARAM): Change names to include
+	trailing " {...}".  Now of type <chars>.
+	(grammar_declaration): Adjust to bundled tokens.
+	(code_content): Remove; stripping is now done by add_param.
+	(print_token_value): Print contents of bundled tokens.
+	(token_name): New function.
+
+	* src/reader.h (braced_code, current_braced_code): Remove.
+	(token_name): New decl.
+
+	* src/scan-gram.l (handle_dollar, handle_at): Now takes int
+	token_type, not braced_code code_kind.  All uses changed.
+	(SC_PRE_CODE): New state, for scanning after a keyword that
+	has (or usually has) an immediately-following braced code.
+	(token_type): New local var, to keep track of which token type
+	to return when scanning braced code.
+	(<INITIAL>"%destructor", <INITIAL>"%lex-param",
+	<INITIAL>"%parse-param", <INITIAL>"%printer",
+	<INITIAL>"%union"): Set token type and BEGIN SC_PRE_CODE
+	instead of returning a token type immediately.
+	(<INITIAL>"{"): Set token type.
+	(<SC_BRACED_CODE>"}"): Use it.
+	(handle_action_dollar, handle_action_at): Now returns bool
+	indicating success.  Fail if ! current_rule; this prevents a core dump.
+	(handle_symbol_code_dollar, handle_symbol_code_at):
+	Remove; merge body into caller.
+	(handle_dollar, handle_at): Complain in invalid contexts.
+
+	* NEWS, doc/bison.texinfo: Document the above.
+	* NEWS: Fix years and program names in copyright notice.
+
+2002-12-17  Paul Eggert  <eggert@twinsun.com>
+
+	* NEWS, doc/bison.texinfo (Parser Function, Pure Calling, Error
+	Reporting, Table of Symbols): Omit mentions of %lex-param and
+	%parse-param from the documentation for now.
+
+2002-12-15  Paul Eggert  <eggert@twinsun.com>
+
+	Undo most of the 2002-11-12 yychar -> yytoken patch, as it broke
+	GCC 3.2.1 (which depends on yychar == YYEMPTY when there is no
+	lookahead symbol, and which sets yychar in parser actions) and it
+	disagreed with the Bison documentation.  Bug
+	reported by Andrew Walrond.
+
+	* data/yacc.c (YYTRANSLATE): Don't check for negative argument,
+	as the caller now does that.
+	(yyclearin, YYBACKUP, yyparse): Use yychar, not yytoken.
+	(YYEMPTY): Parenthesize right hand side, since others use it.
+	(yyparse): Don't assume that our generated code is the only code
+	that sets yychar.
+
+2002-12-13  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.75d.
+
+	POSIX requires a "yacc" command.
+	* src/Makefile.am (bin_SCRIPTS): New macro, for yacc.
+	(MOSTLYCLEANFILES): Add yacc.
+	(yacc): New rule.
+	* doc/bison.texinfo (Invocation, Bison Options): Mention yacc
+	as an alias for bison y.
+
+	* po/LINGUAS: Add da.
+
+	* src/getargs.c (__GNU_LIBRARY__) [lint]: Define to work around
+	problem with latest <getopt.h>.
+	(HACK_FOR___GNU_LIBRARY___PROTOTYPE): New macro.
+
+	* doc/fdl.texi: Upgrade to 1.2.
+	* lib/alloca.c, lib/error.c, lib/getopt.c, lib/getopt.h
+	lib/getopt1.c, lib/gettext.h, lib/memrchr.c, lib/obstack.c,
+	lib/obstack.h, lib/strnlen.c, lib/unlocked-io.h: Sync with
+	gnulib.
+	* config/install-sh: Sync with autotools.
+
+	Fix a bad interaction with flex 2.5.23 reported by Bruce Lilly in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00114.html>.
+	* data/yacc.c (YYLTYPE, struct yyltype): Do not define unless
+	locations are requested.
+	(union yyalloc): Do not depend on YYLTYPE_IS_TRIVIAL unless
+	locations are requested.
+
+2002-12-12  Paul Eggert  <eggert@twinsun.com>
+
+	Remove unportable casts and storage allocation tricks.
+	While we're at it, remove almost all casts, since they
+	usually aren't needed and are a sign of trouble.
+
+	* configure.ac (AC_CHECK_TYPES): Check for uintptr_t.
+
+	* src/derives.c (derives_compute): Do not subtract NTOKENS from
+	the pointer DSET returned by malloc; this isn't portable.
+	Instead, always use DSET[i - NTOKENS] rather than DSET[i].
+	Similarly for DERIVES.
+	* src/lalr.c (set_goto_map): Likewise, for GOTO_MAP and TEMP_MAP.
+	* src/nullable.c (nullable_compute): Likewise, for RSETS and NULLABLE.
+	* src/reduce.c (reduce_grammar_tables): Likewise, for nontermmap
+
+	* src/derives.c (derives_compute): Do not bother invoking
+	int_of_rule_number, since rule numbers are integers.
+
+	* src/files.c (concat2, tr, compute_base_name): Use xmalloc (N)
+	rather than XMALLOC (char, N).
+
+	* src/files.c (filename_split): Rewrite to avoid cast.
+
+	* src/gram.h (symbol_number_as_item_number,
+	item_number_as_symbol_number, rule_number_as_item_number,
+	item_number_as_rule_number):
+	Now inline functions rather than macros, to avoid casts.
+	* src/state.h (state_number_as_int): Likewise.
+	* src/tables.c (state_number_to_vector_number,
+	symbol_number_to_vector_number): Likewise.
+
+	* src/gram.h (int_of_rule_number): Remove; no longer used.
+
+	* src/lalr.c (add_lookback_edge): Use malloc rather than calloc,
+	since the resulting storage is always stored into.
+
+	* src/main.c (alloca) [C_ALLOCA]: Add decl here, the only place
+	where it's needed.
+
+	* src/muscle_tab.c (muscle_m4_output):
+	Now inline.  Return bool, not int.
+	* src/state.c (state_compare): Likewise.
+	* src/symtab.c (symbol_check_defined,
+	symbol_check_alias_consistency, symbol_pack, symbol_translation,
+	hash_compare_symbol, hash_symbol):
+	Likewise.
+	* src/uniqstr.c (uniqstr_print): Likewise.
+	* src/muscle_tab.c (muscle_m4_output_processor):
+	New function, to avoid casts.
+	* src/state.c (state_comparator, stage_hasher): Likewise.
+	* src/symtab.c (symbol_check_defined_processor,
+	symbol_check_alias_consistency_processor, symbol_pack_processor,
+	symbol_translation_processor, hash_symbol_comparator,
+	hash_symbol_hasher): Likewise.
+	* src/uniqstr.c (uniqstr_print_processor): Likewise.
+	* src/muscle_tab.c (muscles_m4_output):
+	Use new functions instead of casting old functions unportably.
+	* src/state.c (state_hash_new): Likewise.
+	* src/symtab.c (symbols_new, symbols_do, symbols_check_defined,
+	symbols_token_translations_init):
+	Likewise.
+	* src/uniqstr.c (uniqstrs_new, hash_initialize, uniqstrs_do): Likewise.
+
+	* src/output.c (GENERATE_MUSCLE_INSERT_TABLE): Use long local
+	var instead of casting to long, to avoid casts.
+	(prepare_states): Use MALLOC rather than alloca, so that we don't
+	have to worry about alloca.
+	* src/state.c (state_hash_lookup): Likewise.
+
+	* src/scan-gram.l (<SC_ESCAPED_CHARACTER>"'"): Use unsigned char
+	local var instead of casting to unsigned char, to avoid casts.
+
+	* src/state.c (TRANSITIONS_ALLOC, ERRS_ALLOC, REDUCTIONS_ALLOC,
+	STATE_ALLOC): Remove.
+	(transitions_new, errs_new, reductions_new, state_new): Use malloc
+	rather than calloc, and use offsetof to avoid allocating slightly
+	too much storage.
+	(state_new): Initialize all members.
+
+	* src/state.c (state_hash): Use unsigned accumulator, not signed.
+
+	* src/symtab.c (symbol_free): Remove; unused.
+	(symbol_get): Remove cast in lhs of assignment.
+	(symbols_do): Now static.  Accept generic arguments, not
+	hashing-related ones.
+
+	* src/symtab.h: (NUMBER_UNDEFINED): Remove unnecessary cast.
+	(symbol_processor): Remove.
+	(symbols_do): Remove decl; now static.
+
+	* src/system.h (alloca): Remove; decl no longer needed.
+	(<stddef.h>): Include, for offsetof.
+	(<inttypes.>, <stdint.h>): Include if available.
+	(uintptr_t): New type, if system lacks it.
+	(CALLOC, MALLOC, REALLOC): New macros.
+	All uses of XCALLOC, XMALLOC, and XREALLOC changed to use these
+	new macros.
+
+	* src/tables.c (table_size): Now int, to pacify GCC.
+	(table_grow, table_ninf_remap): Use signed table size.
+	(save_row): Don't bother initializing locals when not needed.
+	(default_goto, goto_actions, pack_vector): Remove unnecessary casts.
+	* src/uniqstr.c (hash_compare_uniqstr):  Likewise.
+
+	* src/vcg.h: Correct misspellings.
+
+	* src/vcg_defaults.h (G_CMAX): Now INT_MAX.
+
+
+	* src/getargs.c (getargs): Don't assume EOF == -1.
+
+2002-12-09  Paul Eggert  <eggert@twinsun.com>
+
+	Change identifier spellings to avoid collisions with names
+	that are reserved by POSIX.
+
+	Don't use names ending in _t, since POSIX reserves them.
+	For consistency, remove _e and _s endings -- they're weren't
+	needed to remove ambiguity.  All uses changed.
+	* src/uniqstr.h (uniqstr): Renamed from uniqstr_t, which in
+	turn was just renamed from struniq_t.
+	* src/uniqstr.c (uniqstr_processor): Renamed from struniq_processor,
+	which in turn was just renamed from struniq_processor_t.
+	(hash_compare_uniqstr): Renamed from hash_compare_struniq, which
+	in turn was renamed from hash_compare_struniq_t.
+	* src/LR0.c (struct state_list): Renamed from struct state_list_s.
+	(state_list): Renamed from state_list_t.
+	* src/assoc.h (assoc): Renamed from assoc_t.
+	* src/conflicts.c (enum conflict_resolution): Renamed from
+	enum conflict_resolution_e.
+	* src/derives.c (struct rule_list): Renamed from struct rule_list_s.
+	(rule_list): Renamed from rule_list_t.
+	* src/getargs.h (enum trace): Renamed from enum trace_e.
+	(enum report): Renamed from enum report_e.
+	* src/gram.h (item_number): Renamed from item_number_t.
+	(rule_number): Renamed from rule_number_t.
+	(struct rule_s): Remove the "rule_s" part; not used.
+	(rule): Renamed from rule_t.
+	(rule_filter): Renamed from rule_filter_t.
+	* src/lalr.c (struct goto_list): Renamed from struct goto_list_s.
+	(goto_list): Renamed from goto_list_t.
+	* src/lalr.h (goto_number): Renamed from goto_number_t.
+	* src/location.h (location): Renamed from location_t.
+	* src/muscle_tab.c (muscle_entry): Renamed from muscle_entry_t,
+	and moved here from:
+	* src/muscle_tab.h (muscle_entry_t): here.
+	* src/nullable.c (struct rule_list): Renamed from struct rule_list_s.
+	(rule_list): Renamed from rule_list_t.
+	* src/print_graph.c (static_graph): Renamed from graph.
+	* src/reader.h (braced_code): Renamed from braced_code_t.
+	Remove brace_code_e tag.
+	* src/relation.h (relation_node): Renamed from relation_node_t.
+	(relation_nodes): Renamed from relation_nodes_t.
+	(relation): Renamed from relation_t.
+	* src/state.h (state_number): Renamed from state_number_t.
+	(struct state): Renamed from struct state_s.
+	(state): Renamed from state_t.
+	(transitions): Renamed from transitions_t.  Unused (and
+	misspelled) transtion_s tag removed.
+	(errs): Renamed from errs_t.  Unused errs_s tag removed.
+	(reductions): Renamed from reductions_t.  Unused tag
+	reductions_s removed.
+	* src/symlist.h (symbol_list): Renamed from symbol_list_t.
+	(struct symbol_list): Renamed from struct symbol_list_s.
+	* src/symtab.h (symbol_number): Renamed from symbol_number_t.
+	(struct symbol): Renamed from struct symbol_s.
+	(symbol): Renamed from symbol_t.
+	* src/tables.c (vector_number): Renamed from vector_number_t.
+	(action_number): Renamed from action_t.
+	* src/tables.h (base_number): Renamed from base_t.
+	* src/vcg.h (enum color): Renamed from enum color_e.
+	(enum textmode): Renamed from enum textmode_e.
+	(enum shape): Renamed from enum shape_e.
+	(struct colorentry): Renamed from struct colorentry_s.
+	(struct classname): Renamed from struct classname_s.
+	(struct infoname): Renamed from struct infoname_s.
+	(enum layoutalgorithm): Renamed from enum layoutalgorithm_e.
+	(enum decision): Renamed from enum decision_e.
+	(enum orientation): Renamed from enum orientation_e.
+	(enum alignment): Renamed from enum alignment_e.
+	(enum arrow_mode): Renamed from enum arrow_mode_e.
+	(enum crossing_type): Renamed from enum crossing_type_e.
+	(enum view): Renamed from enum view_e.
+	(struct node): Renamed from struct node_s.
+	(node): Renamed from node_t.
+	(enum linestyle): Renamed from enum linestyle_e.
+	(enum arrowstyle): Renamed from enum arrowstyle_e.
+	(struct edge): Renamed from struct edge.
+	(edge): Renamed from edge_t.
+	(struct graph): Renamed from struct graph_s.
+	(graph): Renamed from graph_t.
+	* tests/calc.at (_AT_DATA_CALC_Y, Simple LALR Calculator):
+	Rename value_t -> value.
+	* tests/input.at (Torturing the Scanner): Rename value_t -> value,
+	value_t_as_yystype -> value_as_yystype.
+
+	Don't include <errno.h> in the mainstream code, since it
+	reserves E[A-Z0-9]* and we want to use symbols like 'EQUALS'.
+	* lib/get-errno.c, lib/get-errno.h: New files.
+	* lib/Makefile.am (libbison_a_SOURCES): Add get-errno.h,
+	get-errno.c.
+	* src/files.c (xfopen, xfclose): Use get_errno instead of errno.
+	* src/output.c (output_skeleton): Likewise.
+	* src/scan-gram.l (<INITIAL>{int}): Use set_errno and get_errno
+	instead of errno.
+	(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>\\x[0-9abcdefABCDEF]+):
+	Likewise.
+	(handle_action_dollar, handle_action_at): Likewise.
+	* src/system.h: Do not include <errno.h>.
+	(TAB_EXT): Renamed from EXT_TAB.
+	(OUTPUT_EXT): Renamed from EXT_OUTPUT.
+
+	Avoid str[a-z]*, since <string.h> reserves that name space.
+	Change all instances of "struniq" in names to "uniqstr", and
+	likewise for "STRUNIQ" and "UNIQSTR".
+	* src/uniqstr.c: Renamed from src/struniq.c.
+	* src/uniqstr.h: Renamed from src/struniq.h.
+	* src/Makefile.am (bison_SOURCES): Adjust to these renamings.
+	* src/files.c (strsuffix): Remove; unused.
+	(concat2): Renamed from stringappend.  Now static.
+	* src/files.h (strsuffix, stringappend): Remove; unused.
+	* src/parse-gram.y (<chars>): Renamed from <string>.
+	(<uniqstr>): Renamed from <struniq>.
+	* src/scan-gram.l (obstack_for_string): Renamed from string_obstack.
+	* src/vcg.h (struct node_s.expand): Renamed from struct node_s.stretch.
+	(struct graph_s.expand): Renamed from struct graph_s.stretch.
+	* src/vcg_defaults.h (G_EXPAND): Renamed from G_STRETCH.
+	(G_LONG_STRAIGHT_PHASE): Renamed from G_STRAIGHT_PHASE.
+	(N_EXPAND): Renamed from N_STRETCH.
+
+	Avoid *_MAX and *_MIN, since <limits.h> reserves that name space.
+	* data/yacc.c (YYSTACK_GAP_MAXIMUM): Renamed from YYSTACK_GAP_MAX.
+	* src/gram.h (ITEM_NUMBER_MAX, ITEM_NUMBER_MIN, RULE_NUMBER_MAX):
+	Remove; unused.
+	* src/lalr.h (GOTO_NUMBER_MAXIMUM): Renamed from GOTO_NUMBER_MAX.
+	* src/state.h (STATE_NUMBER_MAXIMUM): Renamed from STATE_NUMBER_MAX.
+	* src/symtab.h (SYMBOL_NUMBER_MAXIMUM): Renamed from SYMBOL_NUMBER_MAX.
+	* src/tables.c (VECTOR_NUMBER_MAX, VECTOR_NUMBER_MIN): Remove; unused.
+	(BASE_MAXIMUM): Renamed from BASE_MAX.
+	(BASE_MINIMUM): Renamed from BASE_MIN.
+	(ACTION_MAX): Remove; unused.
+	(ACTION_NUMBER_MINIMUM): Renamed from ACTION_MIN.
+	Unnecessary casts removed from above defines.
+
+
+	Fix misspelling in names.
+	* src/vcg.h (enum_alignment_e): Renamed from enum_alignement_e.
+	* src/vcg_defaults.h (G_NODE_ALIGNMENT): Renamed from
+	G_NODE_ALIGNEMENT.
+
+
+	* lib/timevar.c (timevar_report): Renamed from time_report,
+	for consistency with other names.
+	* lib/timevar.h (timevar_report): New decl.
+	* src/system.h (time_report): Remove; decl is now in lib/timevar.h.
+
+
+	Sort include-file uses.
+
+	Reorder all include files under src to be in the order "system.h".
+	then the ../lib include files in angle brackets (alphabetized),
+	then the . include files in double-quotes (alphabetized).  Fix
+	dependency breakages encountered in this process, as follows:
+	* src/closure.h, src/derives.h, src/state.h: Include "gram.h".
+	* src/complain.c: Don't include stdlib.h, string.h _LIBC stuff.
+	* src/state.h: Include "symtab.h".
+
+2002-12-08  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c, data/lalr1.cc, data/yacc.c: Do not use __file__,
+	since this causes problems when __file__ contains character
+	sequences like "@" that are treated specially by src/scan-skel.l.
+	Instead, just use the file's basename.  This fixes the bug
+	reported by Martin Mokrejs in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-12/msg00007.html>.
+
+2002-12-06  Paul Eggert  <eggert@twinsun.com>
+
+	Add support for rules that do not have trailing semicolons, as
+	POSIX requires.  Improve the quality of locations in Bison
+	diagnostics.
+
+	* src/location.c: Include <quotearg.h>.
+	(empty_location): Now const.
+	(location_print): New function.  Follow the recommendation of the
+	GNU Coding Standards for locations that span file boundaries.
+	* src/location.h: Do not include <quotearg.h>; no longer needed.
+	(boundary): New type.
+	(location_t): Use it.  This allows locations to span file boundaries.
+	All member uses changed: file -> start.file or end.file (as needed),
+	first_line -> start.line, first_column -> start.column,
+	last_line -> end.line, last_column -> end.column.
+	(equal_boundaries): New function.
+	(LOCATION_RESET, LOCATION_STEP): Remove.
+	(LOCATION_PRINT): Remove.  All callers changed to use location_print.
+	(empty_location): Now const.
+	(location_print): New decl.
+	* src/parse-gram.y (lloc_default): New function, which handles
+	empty locations more accurately.
+	(YYLLOC_DEFAULT): Use it.
+	(%token COLON): Remove.
+	(%token ID_COLON): New token.
+	(rules): Use it.
+	(declarations, rules): Remove trailing semicolon.
+	(declaration, rules_or_grammar_declaration):
+	Allow empty (";") declaration.
+	(symbol_def): Remove empty actions; no longer needed.
+	(rules_or_grammar_declaration): Remove trailing semicolon.
+	(semi_colon.opt): Remove.
+	* src/reader.h: Include location.h.
+	(scanner_cursor): New decl.
+	* src/reduce.c (nonterminals_reduce): Use warn_at rather than
+	rolling our own.
+	* src/scan-gram.l (YY_USER_INIT): Initialize scanner_cursor instead
+	of *loc.
+	(STEP): Remove.  No longer needed, now that adjust_location does
+	the work.  All uses removed.
+	(scanner_cursor): New var.
+	(adjust_location): Renamed from extend_location.  It now sets
+	*loc and adjusts the scanner cursor.  All uses changed.
+	Don't bother testing for CR.
+	(handle_syncline): Remove location arg; now updates scanner cursor.
+	All callers changed.
+	(unexpected_end_of_file): Now accepts start boundary of token or
+	comment, not location.  All callers changed.  Update scanner cursor,
+	not the location.
+	(SC_AFTER_IDENTIFIER): New state.
+	(context_state): Renamed from c_context.  All uses changed.
+	(id_loc, code_start, token_start): New local vars.
+	(<INITIAL,SC_AFTER_IDENTIFIER>): New initial context.  Move all
+	processing of Yacc white space and equivalents here.
+	(<INITIAL>{id}): Save id_loc.  Begin state SC_AFTER_IDENTIFIER
+	instead of returning ID immediately, since we need to search for
+	a subsequent colon.
+	(<INITIAL>"'", "\""): Save token_start.
+	(<INITIAL>"%{", "{", "%%"): Save code_start.
+	(<SC_AFTER_IDENTIFIER>): New state, looking for a colon.
+	(<SC_YACC_COMMENT>, <SC_COMMENT>, <SC_LINE_COMMENT>):
+	BEGIN context_state at end, not INITIAL.
+	(<SC_ESCAPED_STRING>"\"", <SC_ESCAPED_CHARACTER>"'",
+	<SC_BRACED_CODE>"}", <SC_PROLOGUE>"%}", <SC_EPILOGUE><<EOF>>):
+	Return correct token start.
+	(<SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE>): Save start boundary when
+	the start of a character, string or multiline comment is found.
+	* tests/conflicts.at (S/R in initial, Defaulted Conflicted
+	Reduction): Adjust reported locations to match the more-precise
+	results now expected.
+	* tests/input.at (Invalid $n, Invalid @n, Type Clashes): Likewise.
+	* tests/reduce.at (Useless Rules, Reduced Automaton,
+	Underivable Rules): Likewise.
+	* tests/regression.at (Invalid inputs): No longer `expecting ";"
+	or "|"' now that so many other tokens are allowed by the new grammar.
+
+	* src/complain.h (current_file): Remove duplicate decl;
+	current_file is now owned by files.h.
+	* src/complain.c, src/scan-gram.l: Include files.h.
+
+2002-12-06  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (yy_reduce_print): Don't assume that yyrline[yyrule]
+	promotes to int; it might be unsigned int.
+	* data/yacc.c (yy_reduce_print): Likewise.
+
+	* doc/bison.texinfo (Table of Symbols): YYERROR_VERBOSE should
+	be #defined in the prologue, not in the Bison declarations.
+	This fixes Debian Bug 102878, reported by Shaul Karl.
+
+2002-12-02  Paul Eggert  <eggert@twinsun.com>
+
+	* configure.ac (AC_REPLACE_FUNCS): Add strtoul.
+	* lib/strtoul.c: New file, from gnulib.
+	This fixes a porting bug reported by Peter Klein in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-12/msg00000.html>.
+
+2002-11-30  Paul Eggert  <eggert@twinsun.com>
+
+	* src/scan-gram.l (no_cr_read, extend_location): Move to epilogue,
+	and put only a forward declaration in the prologue.  This is for
+	consistency with the other scanner helper functions.
+
+	Type clashes now generate warnings, not errors, since it
+	appears that POSIX may allow some grammars with type clashes.
+	* src/reader.c (grammar_current_rule_check): Warn about
+	type clashes instead of complaining.
+	* tests/input.at (Type Clashes): Expect warnings, not complaints.
+
+	Add Yacc library, since POSIX requires it.
+	* doc/bison.texinfo (Yacc Library): New node.  Regenerate top menu.
+	* lib/Makefile.am (lib_LIBRARIES, liby_a_SOURCES): New macros.
+	* lib/main.c, lib/yyerror.c: New files.
+
+	gram_error can be static; it need not be extern.
+	* src/reader.h (gram_error): Remove decl.
+	* src/parse-gram.y (gram_error): Now static.  Add static decl.
+	(print_token_value): Omit parameter names from forward decl,
+	for consistency.
+
+2002-11-29  Paul Eggert  <eggert@twinsun.com>
+
+	* doc/bison.texinfo: Emphasize that yylex and yyerror must
+	be declared before being used.  E.g., one should typically
+	declare them in the prologue.  Use GNU coding style in examples.
+	Put "const" consistently after the type it modifies.  Mention
+	that C99 supports "inline".  Mention that yyerror traditionally
+	returns "int".
+
+	%parse-param and %lex-param now take just one argument, the
+	declaration; the argument name is deduced from the declaration.
+
+	* doc/bison.texinfo (Parser Function, Pure Calling, Error
+	Reporting, Table of Symbols): Document this.
+	* src/parse-gram.y (add_param): New function.
+	(COMMA): Remove.
+	(declaration): Implement new rule for %parse-param and %lex-param.
+	* src/scan-gram.l: "," now elicits a warning, rather than being
+	a token; this is more compatible with byacc.
+	* tests/calc.at (Simple LALR Calculator): Adopt new convention.
+
+2002-11-27  Paul Eggert  <eggert@twinsun.com>
+
+	Rename identifiers to avoid real and potential collisions.
+
+	* data/c.m4 (b4_yysymprint_generate): yyout -> yyoutput,
+	to avoid collision with lex macro described by Bruce Lilly in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00114.html>.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Likewise.
+	* doc/bison.texinfo (Prologue, Tracing): yyprint -> print_token_value.
+	* src/parse-gram.y (print_token_value): Renamed from yyprint.
+	All uses changed.
+	(YYPARSE_PARAM, YYLEX_PARAM, yycontrol): Remove.  All uses changed.
+	The name "yycontrol" violates the name space rules, and this stuff
+	wasn't being used anyway.
+	(input): Remove action; this stuff wasn't being used.
+	(gram_error): Rename local variable yylloc -> loc.
+	* src/reader.h (struct gram_control_s, gram_control_t): Remove.
+	(YY_DECL): Don't use "yy" at start of local variables.
+	All uses changed, e.g., yylloc -> loc.
+	* src/scan-gram.l (STEP): Renamed from YY_STEP.  All uses changed.
+	(STRING_GROW): Renamed from YY_OBS_GROW.  All uses changed.
+	(STRING_FINISH): Renamed from YY_OBS_FINISH.  All uses changed.
+	(STRING_FREE): Renamed from YY_OBS_FREE.  All uses changed.
+
+	* src/parse-gram.y (gram_error): loc is now const *.
+	* src/reader.h (gram_error): Likewise.
+
+2002-11-24  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.75c.
+
+	* tests/actions.at (Actions after errors): Use an output format
+	more similar to that of the Printers and Destructors test.
+	Test the position of the ';' token too.
+	(Printers and Destructors): Likewise.
+	(Printers and Destructors: %glr-parser): Remove for now, to avoid
+	unnecessarily alarming people when the test fails.
+
+	* data/yacc.c (yyerrlab1): Move this label down, so that the
+	parser does not discard the lookahead token if the user code
+	invokes YYERROR.  This change is required for POSIX conformance.
+
+	* lib/error.c: Sync with gnulib.
+
+2002-11-22  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/quotearg.c, lib/quotearg.h: Sync with gnulib.
+	* lib/mbswidth.c, lib/mbswidth.h: Likewise.
+	* lib/xmalloc.c: Likewise.
+
+2002-11-20  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/argmatch.c, lib/argmatch.h: Sync with gnulib.
+
+2002-11-20  Paul Eggert  <eggert@twinsun.com>
+
+	Avoid use of <assert.h>, as the GNU Coding Standards hint that one
+	should use `if (! x) abort ();' rather than `assert (x);', and
+	anyway it's one less thing to worry about configuring.
+
+	* data/glr.c, lib/hash.c, src/system.h: Do not include <assert.h>.
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Likewise,
+	and replace all instances of assert with abort.
+	* tests/calc.at (_AT_DATA_CALC_Y): Likewise.
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): Likewise.
+
+	* data/glr.c (yydoAction, yyglrReduce, yysplitStack, yyresolveStates,
+	yyresolveAction, yyprocessOneStack): Use abort rather than assert.
+	* lib/hash.c (hash_lookup, hash_get_first, hash_get_next,
+	hash_find_entry, hash_rehash, hash_insert): Likewise.
+	* src/conflicts.c (resolve_sr_conflict): Likewise.
+	* src/lalr.c (set_goto_map, map_goto): Likewise.
+	* src/nullable.c (nullable_compute): Likewise.
+	* src/output.c (prepare_rules, token_definitions_output): Likewise.
+	* src/reader.c (packgram, reader): Likewise.
+	* src/state.c (state_new, state_free, state_transitions_set,
+	state_reduction_find): Likewise.
+	* src/symtab.c (symbol_user_token_number_set, symbol_make_alias,
+	symbol_pack): Likewise.
+	* src/tables.c (conflict_row, pack_vector): Likewise.
+	* src/vcg.c (get_color_str, get_textmode_str, get_shape_str,
+	get_layoutalgorithm_str, get_decision_str, get_orientation_str,
+	get_node_alignement_str, get_arrow_mode_str, get_crossing_type_str,
+	get_view_str, get_linestyle_str, get_arrowstyle_str): Likewise.
+
+	* lib/argmatch.h (ARRAY_CARDINALITY): Do not bother to #undef.
+	(ARGMATCH_CONSTRAINT): New macro.
+	(ARGMATCH_ASSERT): Use it.
+
+	* src/system.h (verify): New macro.
+	* src/getargs.c (trace_argmatch, report_argmatch): Use verify
+	rather than assert.
+	* src/tables.c (tables_generate): Likewise.
+
+	* src/struniq.c (struniq_assert): Now returns void, and aborts
+	if the assertion is false.
+	(struniq_assert_p): Remove.
+	* src/struniq.h: Likewise.
+
+2002-11-18  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (yygetLRActions): Replace `yyindex' with
+	`yytable[yyindex]' to fix typo introduced in my 2002-11-09 patch.
+	This fixes the regression with Sun ONE Studio 7 cc that I reported in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00077.html>.
+
+2002-11-18  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Tracing): `yyprint' shouldn't prepend a
+	space.
+	From Tim Van Holder.
+
+2002-11-17  Paul Eggert  <eggert@twinsun.com>
+
+	Pacify Sun ONE Studio 7 lint.  Also, rename "ParseError"
+	to "SyntaxError" for consistency with my 2002-11-15 change.
+
+	* data/glr.c (YYDPRINTF, YYDSYMPRINT, YYDSYMPRINTF) [!YYDEBUG]: Do
+	not define to {}, since this breaks the common use of `YYDPRINTF
+	((...));' if a single statement is desired (e.g. before `else').
+	Work around GCC warnings by surrounding corresponding calls with
+	{} if needed.
+	(yyhasResolvedValue): Remove unused function.
+	(yymergeOptionSets, yyresolvStack): Use `continue;' for empty
+	loop body.
+	(yyreportSyntaxError): Renamed from yyreportParseError.
+	(yyrecoverSyntaxError): Renamed from yyrecoverParseError.
+	All uses changed.
+	* tests/calc.at (_AT_DATA_CALC_Y): Make vars static instead of
+	extern when possible.  Remove unused initializations.
+
+2002-11-16  Akim Demaille  <akim@epita.fr>
+
+	Augment the similarity between GLR and LALR traces.
+
+	* data/yacc.c (yy_stack_print, YY_STACK_PRINT, yy_reduce_print)
+	(YY_REDUCE_PRINT): New.
+	(yyparse): Use them.
+	* data/glr.c (yy_reduce_print): Use YYFPRINTF, no need for
+	YYDPRINT here.
+	(yyglrReduce, yyrecoverParseError, yyparse): Don't report the
+	state reached after the reduction/recovery, since...
+	(yyparse, yyprocessOneStack): Report the state we are entering in.
+
+2002-11-16  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.h, src/getargs.c (trace_e, trace_args, trace_types):
+	Add support for --trace=skeleton.
+	* src/scan-skel.l: %option debug.
+	Scan strings of non-@ or \n instead of character by character.
+	(scan_skel): Handle trace_skeleton.
+	(QPUTS): New.
+	(@output_parser_name@, @output_header_name@): ``Restore'' their
+	support (used to be M4 macros).
+	* data/yacc.c: Quote larger chunks, a la glr.c.
+	* data/lalr1.cc: Likewise.
+	The header guards are no longer available, so use some other
+	string than `YYLSP_NEEDED'.
+
+2002-11-16  Akim Demaille  <akim@epita.fr>
+
+	Make the ``Printers and Destructors'' test more verbose, taking
+	`yacc.c''s behavior as (possibly wrong) reference.
+
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Use printf
+	instead of fprint on stdout.
+	Set and report the last_line of the symbols.
+	Consistently display values and locations.
+
+2002-11-16  Paul Eggert  <eggert@twinsun.com>
+
+	* data/yacc.c: Avoid over-quoting of __line__ and __file__.
+
+2002-11-15  Paul Eggert  <eggert@twinsun.com>
+
+	* tests/actions.at (Actions after errors): New test case.
+
+	* data/glr.c, data/lalr1.cc, data/yacc.cc, doc/bison.texinfo,
+	src/conflicts.c, src/parse-gram.y, src/tables.c, src/tables.h,
+	tests/action.at, tests/calc.at, tests/conflicts.at,
+	tests/cxx-type.at, tests/regression.at:
+	"parse error" -> "syntax error" for POSIX compatibility.
+	"parsing stack overflow..." -> "parser stack overflow" so
+	that code matches Bison documentation.
+
+2002-11-15  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y (declaration): Have %parse-param and %lex-param
+	take two BRACED_CODE, not two string_content.
+	Free the scanner's obstack when we are done.
+	(code_content): New.
+	* tests/calc.at: Adjust.
+	* doc/bison.texinfo: Adjust.
+	Also, make sure to include the `,' for these declarations.
+
+2002-11-15  Tim Van Holder  <tim.van.holder@pandora.be>
+
+	* m4/prereq.m4: Removed the commented jm_PREREQ_HASH
+	definition; avoids potential autoreconf problems.
+
+2002-11-15  Akim Demaille  <akim@epita.fr>
+
+	Always check the value returned by yyparse.
+
+	* tests/calc.at (_AT_DATA_CALC_Y): Have `main' exit with the value
+	returned by yyparse.
+	(_AT_CHECK_CALC_ERROR): Take the expected exit value as argument.
+	Adjust calls.
+	* tests/glr-regr1.at (glr-regr1.y): Have `main' exit with the value
+	returned by yyparse.
+
+2002-11-14  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* data/glr.c (yyFail): Always set yyerrflag.  Corrects regression
+	on input.at test.
+
+2002-11-14  Paul Eggert  <eggert@twinsun.com>
+
+	* src/output.c (output_skeleton): Call xfopen instead of
+	duplicating xfopen's body.
+
+	Fix bugs reported by Nelson H. F. Beebe in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00078.html>.
+
+	* tests/headers.at (AT_TEST_CPP_GUARD_H): Don't assume that
+	"$CC -E foo.h" is allowed, as this doesn't work with the Portland
+	Group compiler.  Instead, use "$CC -E bar.c".  Include the .h
+	file twice in the grammar, as an extra check.
+
+	* tests/input.at (Torturing the Scanner): Surround the
+	backslash-newline tests with "#if 0", to make it less likely that
+	we'll run into compiler bugs.  Bring back solitary \ inside
+	comment, but add a closing comment to work around HP C bug.  Don't
+	test backslash-newline in C character constant.
+
+2002-11-14  Akim Demaille  <akim@epita.fr>
+
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Ignore the exit
+	status of the compiler.
+	Calling `exit 1' is no longer needed.
+	Reported by Nelson H. F. Beebe.
+
+2002-11-14  Akim Demaille  <akim@epita.fr>
+
+	* tests/atlocal.in (CPPFLAGS): We have config.h.
+	* tests/testsuite.at (AT_DATA_GRAMMAR_PROLOGUE, AT_DATA_GRAMMAR):
+	New.
+	* tests/actions.at, tests/calc.at, tests/conflicts.at,
+	* tests/cxx-type.at, tests/glr-regr1.at, tests/headers.at,
+	* tests/regression.at, tests/torture.at: Use them for all the
+	grammars that are to be compiled.
+	* tests/cxx-type.at (_AT_TEST_GLR_CALC): Rename as...
+	* tests/cxx-type.at (_AT_TEST_GLR_CXXTYPES): this.
+	* doc/bison.texinfo (GLR Parsers): Document `inline'.
+
+2002-11-14  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Various formatting changes (alignments in
+	samples, additional @group/@end group, GCS in samples.
+	Use @deffn instead of simple @table to define the directives,
+	macros, variables etc.
+
+2002-11-13  Paul Eggert  <eggert@twinsun.com>
+
+	Fix some bugs reported by Albert Chin-A-Young in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00066.html>.
+
+	* tests/input.at (Torturing the Scanner): Don't invoke "cc a.c b.c
+	-o c"; the HP C compiler chatters during compilation.
+	Instead, invoke "cc -c a.c -o a.o; cc -c b.c -o b.o; cc a.o b.o -o c".
+	* tests/headers.at (export YYLTYPE): Likewise.
+
+	* tests/input.at (Torturing the Scanner): Remove lines containing
+	solitary backslashes, as they tickle a bug in the HP C compiler.
+
+	* tests/glr-regr1.at (Badly Collapsed GLR States): Avoid //
+	comments, since they're not portable.  Use GNU coding style.
+
+2002-11-13  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c: Leave bigger chunks of quoted text.
+	(YYDSYMPRINTF): New.
+	Use it to report symbol activities.
+	* data/glr.c (YYDSYMPRINTF): New.
+	Use it.
+
+2002-11-12  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.75b.
+
+	* data/glr.c (yydoAction): Return YYRESULTTAG, not int.
+	(yyglrReduce): Return yyok, not 0.
+	This should avoid the enumerated-type warnings reported
+	by Nelson H. F. Beebe in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00057.html>.
+
+	* lib/bbitset.h (BITSET_INLINE): Remove.
+	* lib/bitset.h [! BITSET_INLINE]: Remove.
+	(bitset_set, bitset_reset, bitset_test): Rename local vars
+	to avoid shadowing warnings by GCC.
+
+	* data/glr.c (inline): Remove #define.  It's the user's
+	responsibility to #define it away, just like 'const'.
+	This fixes one of the bugs reported by Nelson H. F. Beebe in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00058.html>.
+
+	* Makefile.maint (po-check): Scan .l and .y files instead of the
+	.c and the .h files that they generate.  This fixes the bug
+	reported by Tim Van Holder in:
+	<http://lists.gnu.org/archive/html/bison-patches/2002-11/msg00062.html>
+	Look for N_ as well as for _.  Try to avoid matching #define for
+	N_ and _.
+	* po/POTFILES.in: Remove src/parse-gram.c, src/scan-gram.c,
+	src/system.h.  Add src/parse-gram.y, src/scan-gram.l.
+	* src/scan-gram.l: Revamp regular expressions so that " and '
+	do not confuse xgettext.
+
+	* src/struniq.h (struniq_new): Do not declare the return type
+	to be 'const'; this violates the C standard.
+	* src/struniq.c (struniq_new): Likewise.
+
+2002-11-12  Albert Chin-A-Young <china@thewrittenword.com>
+
+	* src/Makefile.am (LDADD): Link $(LIBINTL) last to avoid the
+	duplicate definition of optind on Tru64 UNIX 4.0D with the Compaq
+	linker.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.maint: Sync with Autoconf:
+	(local_updates): New.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* po/POTFILES.in (src/lalr.c, src/state.c): Remove
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Display the
+	locations.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_yysymprint_generate): Pass *yyvaluep to YYPRINT,
+	not yyvalue.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* tests/actions.at (AT_CHECK_PRINTER_AND_DESTRUCTOR): New.
+	Use it to test the GLR parser.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (input.y): s/YYEOF/MYEOF/, as the skeleton
+	defines it.
+	* data/glr.c (yystos): New.
+	(b4_yysymprint_generate, b4_yydestruct_generate): Invoke.
+	(YYDSYMPRINT): New.
+	(yyval): Don't define it, it is handled via M4.
+	(yyrecoverParseError): Free verbosely the discarded symbols.
+	* data/yacc.c (yysymprint): Remove, rather...
+	(b4_yysymprint_generate): invoke.
+	* data/c.m4 (b4_yysymprint_generate): New.
+	Accept pointers as arguments, as opposed to the version from
+	yacc.c.
+	(b4_yydestruct_generate): Likewise.
+	* tests/cations.at (Printers and Destructors): Use Bison directives
+	instead of CPP macros.
+	Don't rely on internal details.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_yydestruct_generate, b4_symbol_actions): New.
+	* data/yacc.c: Rename yychar1 as yytoken, as in glr.c.
+	Don't work on yychar (i.e., do set it to YYEMPTY, don't match
+	it against YYEMPTY and so forth), work on yytoken (i.e., set
+	it to YYEMPTY etc.).
+	(yydestruct): Replace with a b4_yydestruct_generate invocation.
+	(b4_symbol_actions): Remove.
+	* data/glr.c (YYTRANSLATE): As for yacc.c, if negative, it stands
+	for 0, end-of-input.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Destructor Decl): New.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/tables.c (tables_generate): Use free for pointers that
+	cannot be NULL, not XFREE.
+	(pack_vector): Use assert, not fatal, for bound violations.
+	* src/state.c (state_new): Likewise.
+	* src/reader.c (reader): Likewise.
+	* src/lalr.c (set_goto_map): Likewise.
+	* src/location.h (LOCATION_PRINT): If first_line is 0, just issue
+	the file name.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l, src/reader.h (scanner_last_string_free):
+	Restore.
+	* src/scan-gram.l (last_string): Is global to the file, not to
+	yylex.
+	* src/parse-gram.y (input): Don't append the epilogue here,
+	(epilogue.opt): do it here, and free the scanner's obstack.
+	* src/reader.c (epilogue_set): Rename as...
+	(epilogue_augment): this.
+	* data/c.m4 (b4_epilogue): Defaults to empty.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (long_options): Remove duplicates.
+	* src/vmsgetargs.c, src/build.com, src/bison.cld, src/vmshlp.mar:
+	Remove.
+	* doc/bison.rnh: Remove.
+	* doc/bison.texinfo (VMS Invocation): Remove.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/struniq.h, src/struniq.c (struniq_t): Is const.
+	(STRUNIQ_EQ, struniq_assert, struniq_assert_p): New.
+
+	Use struniq for symbols.
+
+	* src/symtab.h (symbol_t): The tag member is a struniq.
+	(symbol_type_set): Adjust.
+	* src/symtab.c (symbol_new): Takes a struniq.
+	(symbol_free): Don't free the tag member.
+	(hash_compare_symbol_t, hash_symbol_t): Rename as...
+	(hash_compare_symbol, hash_symbol): these.
+	Use the fact that tags as struniqs.
+	(symbol_get): Use struniq_new.
+	* src/symlist.h, src/symlist.c (symbol_list_n_type_name_get):
+	Returns a strniq.
+	* src/reader.h (merger_list, grammar_currentmerge_set): The name
+	and type members are struniqs.
+	* src/reader.c (get_merge_function)
+	(grammar_current_rule_merge_set): Adjust.
+	(TYPE, current_type): Are struniq.
+
+	Use struniq for file names.
+
+	* src/files.h, src/files.c (infile): Split into...
+	(grammar_file, current_file): these.
+	* src/scan-gram.c (YY_USER_INIT, handle_syncline): Adjust.
+	* src/reduce.c (reduce_print): Likewise.
+	* src/getargs.c (getargs): Likewise.
+	* src/complain.h, src/complain.c: Likewise.
+	* src/main.c (main): Call struniqs_new early enough to use it for
+	file names.
+	Don't free the input file name.
+
+2002-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.c (symbol_free): Remove dead deactivated code:
+	type_name are properly removed.
+	Don't use XFREE to free items that cannot be NULL.
+	* src/struniq.h, src/struniq.c: New.
+	* src/main.c (main): Initialize/free struniqs.
+	* src/parse-gram.y (%union): Add astruniq member.
+	(yyprint): Adjust.
+	* src/scan-gram.l (<{tag}>): Return a struniq.
+	Free the obstack bit that used to store it.
+	* src/symtab.h (symbol_t): The 'type_name' member is a struniq.
+
+2002-11-11  Paul Eggert  <eggert@twinsun.com>
+
+	Revamp to fix many (but not all) of the C- and M4-related quoting
+	problems.  Among other things, this fixes the Bison bug reported
+	by Jan Hubicka when processing the Bash grammar; see:
+	<http://lists.gnu.org/archive/html/bison-patches/2002-11/msg00039.html>
+
+	Use new @ escapes consistently.  Represent brackets with @{ and @}
+	rather than @<:@ and @:>@, since this works a bit better with dumb
+	editors like vi.  Represent @ with @@, since @ is now consistently
+	an escape.  Use @oline@ and @ofile@ rather than __oline__ and
+	__ofile__, to avoid unexpected expansions.  Similarly, use @output
+	rather than #output.
+
+	* data/c.m4 (b4_copyright): Omit file name from comment, since
+	the file name could contain "*/".
+	(b4_synclines_flag): Don't quote the 2nd argument; it should already
+	be quoted.  All uses changed.
+
+	* data/glr.c: Use new @ escapes consistently.
+	(b4_input_suffix, b4_output_parser_suffix, b4_output_parser_name,
+	b4_output_header_suffix, b4_output_header_name, b4_header_guard):
+	Remove, since they couldn't handle arbitrary characters in file
+	names.
+	* data/lalr1.cc: Likewise.
+	* data/yacc.c: Likewise.
+
+	* src/files.c (output_infix): Remove; all uses removed.
+	* src/files.h: Likewise.
+
+	* data/glr.c: Remove use of "#ifdef b4_header_guard", since it
+	mishandled funny characters in file names, and anyway it isn't
+	needed any more.
+	* data/yacc.c: Likewise.
+	* data/lalr1.cc: Use YYSLP_NEEDED instead of b4_header_guard.
+
+	* data/glr.c (YYSTYPE_IS_TRIVIAL): Define when the .h file would.
+	* data/yacc.c: Likewise.
+
+	* src/muscle_tab.c: Include quotearg.h, since we need to quote C
+	strings now.
+	(muscle_init): Quote filename as a C string.
+	* src/muscle_tab.h (MUSCLE_GROW_STRING_PAIR): Remove; unused.
+	(MUSCLE_OBSTACK_SGROW, MUSCLE_INSERT_C_STRING): New macros.
+	* src/output.c (escaped_file_name_output): New function.
+	(prepare_symbols): Quote tokens for M4.
+	(prepare): Don't insert output_infix, output_prefix,
+	output_parser_name, output_header_name; this is now down by scan-skel.
+	Insert skeleton as a C string.
+
+	* src/output.c (user_actions_output, symbol_destructors_output,
+	symbol_printers_output): Quote filenames for C and M4.
+	* src/reader.c (prologue_augment, epilogue_set): Likewise.
+
+	* src/scan-gram.l (<SC_CHARACTER>): Don't worry about any backslash
+	escapes other than \\ and \'; this simplifies the code.
+	(<SC_STRING>): Likewise, for \\ and \".
+	(<SC_COMMENT,SC_LINE_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,
+	SC_PROLOGUE,SC_EPILOGUE>): Escape $ and @, too.
+	Use new escapes @{ and @} for [ and ].
+
+	* src/scan-skel.l (yylineno, yyoutname): Remove static vars, replacing
+	them with auto vars.
+	Switch to new escape scheme, where @ is the escape character uniformly.
+	Abort if a stray escape character is found.  Avoid unbounded input
+	buffer when parsing non-escaped text.
+
+	* tests/input.at (Torturing the Scanner): Add tests that @oline@,
+	__oline__, #output, $@, and @{ do not have unintended meanings.
+
+2002-11-09  Paul Eggert  <eggert@twinsun.com>
+
+	Fix the test failure due to GCC warnings described in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-11/msg00000.html>.
+	* data/glr.c (yyis_pact_ninf, yyis_table_ninf): New macros, which
+	evaluate to 0 if it's impossible for NINF to be in the respective
+	table.
+	(yygetLRActions, yyrecoverParseError): Use them.
+
+	* src/scan-gram.l (unexpected_end_of_file): Fix bug: columns were
+	counted in the token inserted at end of file.  Now takes
+	location_t *, not location_t, so that the location can be
+	adjusted.  All uses changed.
+
+	* tests/regression.at (Invalid inputs): Adjust wording in
+	diagnostic to match the new behavior.
+
+	* tests/torture.at (AT_DATA_TRIANGULAR_GRAMMAR,
+	AT_DATA_HORIZONTAL_GRAMMAR, AT_DATA_LOOKAHEADS_GRAMMAR,
+	AT_DATA_STACK_TORTURE): Replace `assert (x);' with `if (! (x))
+	abort ();'.  This reduces the runtime of the "Many lookaheads"
+	test from 27.6 to 2.7 minutes on a 440 MHz Ultrasparc III running
+	GCC 3.2.
+
+2002-11-07  Paul Eggert  <eggert@twinsun.com>
+
+	* src/parse-gram.y (CHARACTER): Remove unused token.
+	All uses removed.
+
+	* src/scan-gram.l: Remove stack option.  We no longer use the
+	stack, since the stack was never deeper than 1; instead, use the
+	new auto var c_context to record the stacked value.
+
+	Remove nounput option.  At an unexpected end of file, we now unput
+	the minimal input necessary to end cleanly; this simplifies the
+	code.
+
+	Avoid unbounded token sizes where this is easy.
+
+	(unexpected_end_of_file): New function.
+	Use it to systematize the error message on unexpected EOF.
+	(last-string): Now auto, not static.
+	(YY_OBS_FREE): Remove unnecessary do while (0) wrapper.
+	(scanner_last_string_free): Remove; not used.
+	(percent_percent_count): Move decl to just before use.
+	(SC_ESCAPED_CHARACTER): Return ID at unexpected end of file,
+	not the (never otherwised-used) CHARACTER.
+
+2002-11-07  Akim Demaille  <akim@epita.fr>
+
+	Let yyerror always receive the msg as last argument, so that
+	yyerror can be variadic.
+
+	* data/yacc.c (b4_yyerror_args): New.
+	Use it when calling yyerror.
+	* data/glr.c (b4_yyerror_args, b4_lyyerror_args): New.
+	Use it when calling yyerror.
+	* doc/bison.texinfo (Error Reporting): Adjust.
+	* tests/calc.at (_AT_DATA_CALC_Y): Adjust.
+	* tests/cxx-type.at (_AT_TEST_GLR_CALC): Adjust.
+
+2002-11-06  Akim Demaille  <akim@epita.fr>
+
+	#line should have quoted strings.
+	Ideally, this should be done by m4_quotearg.
+
+	* src/scan-skel.l: Include quotearg.h.
+	Quote __ofile__.
+	* src/output.c (symbol_printers_output)
+	(symbol_destructors_output): Quote the file name.
+
+2002-11-06  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Invalid inputs): Adjust to the recent
+	messages.
+
+2002-11-06  Akim Demaille  <akim@epita.fr>
+
+	Restore --no-lines.
+	Reported by Jim Kent.
+
+	* data/c.m4 (b4_syncline): New.
+	* data/glr.c, data/yacc.c, data/lalr1.cc: Use it.
+	* src/reader.c (prologue_augment, epilogue_set): Use b4_syncline.
+	* src/output.c (user_actions_output): Likewise.
+	(prepare): Define 'b4_synclines_flag'.
+	* src/muscle_tab.c (muscle_init): Don't define b4_linef.
+
+2002-11-06  Akim Demaille  <akim@epita.fr>
+
+	* src/main.c (main): Free `infile'.
+	* src/scan-gram.l (handle_syncline): New.
+	Recognize `#line'.
+	* src/output.c (user_actions_output, symbol_destructors_output)
+	(symbol_printers_output): Use the location's file name, not
+	infile.
+	* src/reader.c (prologue_augment, epilogue_set): Likewise.
+
+2002-11-05  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* src/tables.c (matching_state): Don't allow states to match if
+	either has GLR conflict entries.
+
+2002-11-05  Paul Eggert  <eggert@twinsun.com>
+
+	* src/scan-gram.l: Use more accurate diagnostics, e.g.
+	"integer out of range" rather than "invalid value".
+	* tests/input.at (Invalid $n, Invalid @n): Change expected wording
+	accordingly.
+
+	Scan <% and %> digraphs in C code as POSIX 1003.1-2001 requires.
+	Also, remove one static variable in the scanner.
+
+	* src/scan-gram.l (braces_level): Now auto, not static.
+	Initialize to zero if the compiler is being picky.
+	(INITIAL): Clear braces_level instead of incrementing it.
+	(SC_BRACED_CODE): Treat <% and %> as { and } when inside C code,
+	as POSIX 1003.1-2001 requires.
+	* src/system.h (IF_LINT): New macro, taken from coreutils.
+	* configure.ac: Define "lint" if --enable-gcc-warnings.
+
+2002-11-05  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l: When it starts with `%', complain about the
+	whole directive, not just that `invalid character: %'.
+
+2002-11-04  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.maint: Update from Autoconf.
+	(update, cvs-update, po-update, do-po-update): New.
+
+2002-11-04  Akim Demaille  <akim@epita.fr>
+
+	* tests/glr-regr1.at (Badly Collapsed GLR States): Prototype yylex
+	and yyerror.
+	Have yyerror `use' its arguments.
+	* tests/calc.at (AT_CHECK_PUSHDEFS): AT_YYERROR_SEES_LOC_IF
+	returns true when location & yacc & pure & parse-param.
+	(_AT_DATA_CALC_Y): Let yyerror ``use'' its arguments.
+
+2002-11-04  Akim Demaille  <akim@epita.fr>
+
+	* src/location.h (LOCATION_PRINT): Use quotearg slot 3 to avoid
+	clashes.
+	* src/scan-gram.l: Use [\'] instead of ['] to pacify
+	font-lock-mode.
+	Use complain_at.
+	Use quote, not quote_n since LOCATION_PRINT no longer uses the
+	slot 0.
+
+2002-11-03  Paul Eggert  <eggert@twinsun.com>
+
+	* src/reader.c (get_merge_function, grammar_current_rule_check):
+	Use consistent diagnostics for reporting type name clashes.
+	Quote the types with <>, for consistency with Yacc.
+	* tests/input.at (Type Clashes): Adjust to diagnostic changes.
+
+2002-11-03  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_identification, b4_user_args, b4_parse_param):
+	New.
+	* data/yacc.m4 (b4_pure_args, b4_Pure_args): New.
+	(b4_parse_param): Remove.
+	Use b4_identification.
+	Propagate b4_pure_args where needed to pass them to yyerror.
+	* data/glr.m4 (b4_parse_param): Remove.
+	(b4_user_formals, b4_pure_args, b4_pure_formals, b4_lpure_args)
+	(b4_lpure_formals): New.
+	Use b4_identification.
+	(YY_USER_FORMALS, YY_USER_ARGS): Remove, replaced by
+	b4_user_formals and b4_user_args.
+	(yyexpandGLRStack, yyFail, yyaddDeferredAction, yyglrShiftDefer)
+	(yyreportAmbiguity): When using a pure parser, also need
+	the location, and the parse-params.
+	Adjust callers.
+	(yyuserAction, yyglrShift, yyreportParseError, yyrecoverParseError):
+	When using a pure parser, also need the parse-params.
+	Adjust callers.
+	* tests/calc.at: Test pure (%pure-parser) and absolutely pure
+	(%pure-parser + %parse-param) LALR and GLR parsers.
+	(AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): New, define AT_PARAM_IF,
+	AT_LOCATION_IF, AT_PURE_IF, AT_GLR_IF, AAT_PURE_AND_LOC_IF,
+	AT_GLR_OR_PARAM_IF, AT_YYERROR_ARG_LOC_IF, AT_YYERROR_SEES_LOC_IF.
+	(_AT_DATA_CALC_Y): Equip for purity of yyerror.
+	(_AT_CHECK_CALC_ERROR): Use AT_YYERROR_SEES_LOC_IF.
+	* tests/cxx-type.at (_AT_TEST_GLR_CALC): Equip for yyerror purity.
+	* doc/bison.texinfo: Untabify the whole file.
+	(Parser Function): Document %parse-param, deprecate YYPARSE_PARAM.
+	(Pure Calling): Document %lex-param, deprecate YYLEX_PARAM.
+	(Error Reporting): Adjust to these new directives.
+	Document %error-verbose, deprecate YYERROR_VERBOSE.
+
+2002-11-03  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at: Change all the AT_CHECK_CALC_LALR and
+	AT_CHECK_CALC_GLR invocations to use % directives, instead of
+	command line options.
+	* tests/cxx-type.at: Formatting changes.
+
+2002-11-03  Paul Eggert  <eggert@twinsun.com>
+
+	* src/scan-gram.l: Revamp to fix POSIX incompatibilities,
+	to count columns correctly, and to check for invalid inputs.
+
+	Use mbsnwidth to count columns correctly.  Account for tabs, too.
+	Include mbswidth.h.
+	(YY_USER_ACTION): Invoke extend_location rather than LOCATION_COLUMNS.
+	(extend_location): New function.
+	(YY_LINES): Remove.
+
+	Handle CRLF in C code rather than in Lex code.
+	(YY_INPUT): New macro.
+	(no_cr_read): New function.
+
+	Scan UCNs, even though we don't fully handle them yet.
+	(convert_ucn_to_byte): New function.
+
+	Handle backslash-newline correctly in C code.
+	(SC_LINE_COMMENT, SC_YACC_COMMENT): New states.
+	(eols, blanks): Remove.  YY_USER_ACTION now counts newlines etc.;
+	all uses changed.
+	(tag, splice): New EREs.  Do not allow NUL or newline in tags.
+	Use {splice} wherever C allows backslash-newline.
+	YY_STEP after space, newline, vertical-tab.
+	("/*"): BEGIN SC_YACC_COMMENT, not yy_push_state (SC_COMMENT).
+
+	(letter, id): Don't assume ASCII; e.g., spell out a-z.
+
+	({int}, handle_action_dollar, handle_action_at): Check for integer
+	overflow.
+
+	(YY_STEP): Omit trailing semicolon, so that it's more like C.
+
+	(<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>): Allow \0 and \00
+	as well as \000.  Check for UCHAR_MAX, not 255.
+	Allow \x with an arbitrary positive number of digits, as in C.
+	Check for overflow here.
+	Allow \? and UCNs, for compatibility with C.
+
+	(handle_symbol_code_dollar): Use quote_n slot 1 to avoid collision
+	with quote slot used by complain_at.
+
+	* tests/input.at: Add tests for backslash-newline, m4 quotes
+	in symbols, long literals, and funny escapes in strings.
+
+	* configure.ac (jm_PREREQ_MBSWIDTH): Add.
+	* lib/Makefile.am (libbison_a_SOURCES): Add mbswidth.h, mbswidth.c.
+	* lib/mbswidth.h, lib/mbswidth.c: New files, from GNU gettext.
+	* m4/Makefile.am (EXTRA_DIST): Add mbswidth.m4.
+	* m4/mbswidth.m4: New file, from GNU coreutils.
+
+	* doc/bison.texinfo (Grammar Outline): Document // comments.
+	(Symbols): Document that trigraphs have no special meaning in Bison,
+	nor is backslash-newline allowed.
+	(Actions): Document that trigraphs have no special meaning.
+
+	* src/location.h (LOCATION_COLUMNS, LOCATION_LINES): Remove;
+	no longer used.
+
+2002-11-02  Paul Eggert  <eggert@twinsun.com>
+
+	* src/reader.c: Don't include quote.h; not needed.
+	(get_merge_function): Reword warning to be consistent with
+	type clash diagnostic in grammar_current_rule_check.
+
+	* lib/quotearg.c (quotearg_buffer_restyled): Fix off-by-two
+	bug in trigraph handling.
+
+	* src/output.c (prepare_symbols): When printing token names,
+	escape "[" as "@<:@" and likewise for "]".
+
+	* src/system.h (errno): Remove declaration, as we are now
+	assuming C89 or better, and C89 guarantees errno.
+
+2002-10-30  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/bitset_stats.c (bitset_stats_read, bitset_stats_write):
+	Check for close failures.
+	* src/files.h (xfclose): Return void, not int, since it always
+	returned zero.
+	* src/files.c (xfclose): Likewise.  Report I/O error if ferror
+	indicates one.
+	* src/output.c (output_skeleton): Use xfclose rather than fclose
+	and ferror.  xfclose now checks ferror.
+
+	* data/glr.c (YYLEFTMOST_STATE): Remove.
+	(yyreportTree): Use a stack-based leftmost state.  This avoids
+	our continuing battles with bogus warnings about initializers.
+
+2002-10-30  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: Don't use #ifdef/#ifndef on HAVE_ values, only
+	#if.
+
+2002-10-29  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* tests/glr-regr1.at: New test for reported regressions.
+	* tests/testsuite.at: Add glr-regr1.at test.
+	* tests/Makefile.am: Add glr-regr1.at test.
+
+2002-10-24  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.75a.
+
+	* tests/calc.at (_AT_DATA_CALC_Y): Remove unused strcat declaration.
+	* tests/cxx-type.at (_AT_TEST_GLR_CALC): Include stdlib.h, since
+	we use malloc.  Don't assume 'A' through 'Z' are contiguous.
+	Don't assume strdup exists; POSIX says its an XSI extension.
+	Check for buffer overflow on input.
+
+2002-10-24  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_skeleton): Don't disable M4sugar comments
+	too soon: it results in comments being expanded.
+	* data/yacc.c, data/glr.c, data/lalr1.cc: Do it right before the
+	first output.
+
+2002-10-24  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c (m4_int_type): New.
+	* data/c.m4 (m4_int_type): Don't use yysigned_char, but `signed
+	char' as only yacc.c wants K&R portability.
+	* data/glr.c (yysigned_char): Remove.
+	* data/lalr1.cc: Rename the trailing b4_name as b4_parser_class_name.
+	Reported by Quoc Peyrot.
+
+2002-10-23  Paul Eggert  <eggert@twinsun.com>
+
+	* src/main.c (main): With --trace=time, report times even if a
+	non-fatal error occurs.  Formerly, the times were reported in some
+	such cases but not in others.
+	* src/reader.c (reader): Just return if a complaint has been issued,
+	instead of exiting, so that 'main' can report times.
+
+2002-10-22  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: Include sys/types.
+	Reported by Bert Deknuydt.
+
+2002-10-23  Paul Eggert  <eggert@twinsun.com>
+
+	* configure.ac (AC_PROG_LEX): Use instead of AM_PROG_LEX.
+	Suggested by Art Haas.
+
+2002-10-22  Paul Eggert  <eggert@twinsun.com>
+
+	* src/complain.c (exit) [! (STDC_HEADERS || _LIBC)]: Remove exit
+	decl; not needed any more.
+	* src/main.c (main): Use return to exit, undoing yesterday's change.
+	The last OS that we could find where this wouldn't work is
+	SunOS 3.5, and that's too old to worry about now.
+
+	* data/glr.c (struct yyltype): Define members even when not
+	doing locations.  This is more consistent with yacc.c, and it
+	works around the following bug reports:
+	http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00106.html
+	http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00111.html
+
+	* doc/bison.texinfo: Minor spelling and typographical fixes.  Use
+	@acronym consistently.  Standardize on "Yacc" instead of "YACC",
+	"Algol" instead of "ALGOL".  Give a bit more history about BNF.
+
+2002-10-22  Akim Demaille  <akim@epita.fr>
+
+	* data/README: New.
+
+2002-10-21  Paul Eggert  <eggert@twinsun.com>
+
+	Be consistent about 'bool'; the old code used an enum in one
+	module and an int in another, and this violates the C standard.
+	* m4/stdbool.m4: New file, from coreutils 4.5.3.
+	* configure.ac (AC_HEADER_STDBOOL): Add.
+	* m4/Makefile.am (EXTRA_DIST): Add stdbool.m4.
+	* src/muscle_tab.c (hash_compare_muscles): (a ? FALSE : TRUE) -> (! a)
+	* src/symtab.c (hash_compare_symbol_t): Likewise.
+	* src/system.h (bool, false, true): Use a definition consistent
+	with ../lib/hash.c.  All uses changed.
+
+	* src/complain.c (warning_issued): Renamed from warn_message_count,
+	so that we needn't worry about integer overflow (!).
+	Now of type bool.  All uses changed.
+	(complaint_issued): Renamed from complain_message_count; likewise.
+
+	* src/main.c (main): Use exit to exit with failure.
+
+	* src/complain.c (fatal_at, fatal): Use EXIT_FAILURE and EXIT_SUCCESS
+	rather than 1 and 0.
+	* src/main.c (main): Likewise.
+	* src/getargs.c (getargs): Likewise.
+	* src/reader.c (reader): Likewise.
+
+	* src/getarg.c (getargs): Remove duplicate code for
+	"Try `bison --help'".
+
+	* src/files.c (xfopen, xfclose): Use EXIT_FAILURE rather than 2.
+	What was that "2" for?
+
+	* src/complain.h (fatal, fatal_at): Add __attribute__((__noreturn__)).
+	* src/getargs.c (usage): Likewise.
+
+	* src/getargs.c (getargs): When there are too few operands, report
+	the last one.  When there are too many, report the first extra
+	one.  This is how diffutils does it.
+
+2002-10-20  Paul Eggert  <eggert@twinsun.com>
+
+	Remove K&R vestiges.
+	* configure.ac (AC_C_CONST, AM_C_PROTOTYPES): Remove.
+	* src/complain.c (VA_START): Remove.  Assume prototypes.
+	(vfprintf) [! (HAVE_VPRINTF || defined vfprintf)]: New macro.
+	(private_strerror, warn_at, warn, complain_at, complain, fatal_at,
+	fatal): Assume prototypes.
+	* src/complain.h: Assume prototypes.
+	* src/system.h (PARAMS): Remove.
+	Include <limits.h> unconditionally, since it's guaranteeed even
+	for a freestanding C89 compiler.
+	(SHRT_MIN, SHRT_MAX): Remove, since C89 guarantees them.
+	* src/vmsgetargs.c (getargs, cli_present, cli_get_value): Prototype.
+
+2002-10-20  Akim Demaille  <akim@epita.fr>
+
+	* src/muscle_tab.c (muscle_grow): Remove trailing debugging code.
+	* data/glr.c (YY_USER_FORMALS, YY_USER_ARGS): New.
+	(yyuserAction, yydoAction, yyglrReduce, yyresolveValue)
+	(yyresolveStates, yyresolveAction, yyresolveStack)
+	(yyprocessOneStack): Use them.
+	(yy_reduce_print): New.
+	* tests/calc.at (_AT_DATA_CALC_Y): Exercise %parse-param.
+
+2002-10-20  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_c_ansi_args): Recognize functions with no
+	arguments and output `void'.
+	(b4_c_function): Rename as...
+	(b4_c_function_def): this.
+	(b4_c_function_decl, b4_c_ansi_function_def)
+	(b4_c_ansi_function_decl): New.
+	Change the interpretation of the arguments: before `int, foo', now
+	`int foo, foo'.
+	* data/yacc.c (yyparse): Prototype and define thanks to these.
+	Adjust b4_c_function_def uses.
+	* data/glr.c (yyparse): Likewise, but ANSI only.
+
+2002-10-20  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (prepare): Move the definition of `tokens_number',
+	`nterms_number', `undef_token_number', `user_token_number_max'
+	to...
+	(prepare_tokens): Here.
+	(prepare_tokens): Rename as...
+	(prepare_symbols): this.
+	(prepare): Move the definition of `rules_number' to...
+	(prepare_rules): here.
+	(prepare): Move the definition of `last', `final_state_number',
+	`states_number' to...
+	(prepare_states): here.
+	* data/yacc.c, data/lalr1.cc, data/glr.c: Normalize `>' into `<'.
+
+2002-10-20  Akim Demaille  <akim@epita.fr>
+
+	* src/tables.h, src/tables.c, src/output.c: Comment changes.
+
+2002-10-20  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c, data/yacc.c (b4_location_if, b4_pure_if): Move to...
+	* data/c.m4: here.
+
+2002-10-20  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (prepare): Use MUSCLE_INSERT_STRING.
+	* src/muscle_tab.c (muscle_pair_list_grow): Rename `val as
+	`pair'.
+	(muscle_init): Move the `b4_ltype', `b4_maxdepth', `b4_initdepth',
+	`name' to...
+	* data/glr.c, data/lalr1.cc, data/yacc.c (b4_location_type)
+	(b4_stack_depth_init, b4_stack_depth_max, b4_parser_class_name):
+	These.
+
+2002-10-19  Paul Eggert  <eggert@twinsun.com>
+
+	Do not create a temporary file, as that involves security and
+	cleanup headaches.  Instead, use a pair of pipes.
+	Derived from a suggestion by Florian Krohm.
+	* lib/subpipe.c, lib/subpipe.h, m4/subpipe.m4: New files.
+	* lib/mkstemp.c, lib/readpipe.c, lib/tempname.c, m4/mkstemp.m4: Remove.
+	* configure.ac (UTILS_FUNC_MKSTEMP, jm_PREREQ_TEMPNAME): Remove.
+	(BISON_PREREQ_SUBPIPE): Add.
+	* lib/Makefile.am (libbison_a_SOURCES): Remove readpipe.c.
+	Add subpipe.h, subpipe.c.
+	* m4/Makefile.am (EXTRA_DIST): Remove mkstemp.m4.  Add subpipe.m4.
+	* po/POTFILES.in: Add lib/subpipe.c.
+	* src/output.c: Include "subpipe.h".
+	(m4_invoke): Remove decl.
+	(scan_skel): New decl.
+	(output_skeleton): Use pipe rather than temporary file for m4 input.
+	Check that m4sugar.m4 is readable, to avoid deadlock.
+	Check for pipe I/O error.
+	* src/scan-skel.l (readpipe): Remove decl.
+	(scan_skel): New function, to be used in place of m4_invoke.
+	Read from stream rather than file.
+
+	* lib/timevar.c (TICKS_TO_MSEC, CLOCKS_TO_MSEC): Do not cast to
+	float, as this generates a warning on Solaris 8 + GCC 3.2 with
+	--enable-gcc-warnings.  Instead, divide into 1.0 rather than 1;
+	this generates a more-accurate value anyway.
+
+	* lib/timevar.c (timervar_accumulate): Rename locals to
+	avoid confusion with similarly-named more-global.
+	* src/muscle_tab.c (muscle_pair_list_grow): Likewise.
+
+	* src/output.c (prepare): Use xstrdup to convert char const *
+	to char *, to avoid GCC warning.
+
+2002-10-19  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at (_AT_DATA_CALC_Y): Define VAL, LOC, LEX_FORMALS,
+	LEX_PRE_FORMALS, LEX_ARGS, LEX_PRE_ARGS, USE_LEX_ARGS.
+	Use them to have `calc.y' ready for %pure-parser.
+	* data/yacc.c (YYLEX): Pass a yylex return type to
+	b4_c_function_call.
+
+2002-10-19  Akim Demaille  <akim@epita.fr>
+
+	Prototype support of %lex-param and %parse-param.
+
+	* src/parse-gram.y: Add the definition of the %lex-param and
+	%parse-param tokens, plus their rules.
+	Drop the `_' version of %glr-parser.
+	Add the "," token.
+	* src/scan-gram.l (INITIAL): Scan them.
+	* src/muscle_tab.c: Comment changes.
+	(muscle_insert, muscle_find): Rename `pair' as `probe'.
+	* src/muscle_tab.h (MUSCLE_INSERT_PREFIX): Remove unused.
+	(muscle_entry_s): The `value' member is no longer const.
+	Adjust all dependencies.
+	* src/muscle_tab.c (muscle_init): Adjust: use
+	MUSCLE_INSERT_STRING.
+	Initialize the obstack earlier.
+	* src/muscle_tab.h, src/muscle_tab.c (muscle_grow)
+	(muscle_pair_list_grow): New.
+	* data/c.m4 (b4_c_function_call, b4_c_args): New.
+	* data/yacc.c (YYLEX): Use b4_c_function_call to honor %lex-param.
+	* tests/calc.at: Use %locations, not --locations.
+	(AT_CHECK_CALC_GLR): Use %glr-parser, not %glr_parser.
+
+2002-10-19  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (usage): Take status as argument and exit
+	accordingly.
+	Report the traditional `Try ... --help' message when status != 0.
+	(usage, version): Don't take a FILE * as arg, it is pointless.
+	(getargs): When there is an incorrect number of arguments, make it
+	an error, and report it GNUlically thanks to `usage ()'.
+
+2002-10-18  Paul Eggert  <eggert@twinsun.com>
+
+	* data/glr.c (yyreportParseError): Don't assume that sprintf
+	yields the length of the printed string, as this is not true
+	on SunOS 4.1.4.  Reported by Peter Klein.
+
+	* tests/calc.at (_AT_DATA_CALC_Y): #undef memcmp and realloc.
+	* tests/conflicts.at (%nonassoc and eof): Likewise.
+	Fixes SunOS 4.1.4 test failure reported by Peter Klein.
+
+2002-10-17  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.h (trace_e): Add trace_scan, and trace_parse.
+	* src/getargs.c (trace_types, trace_args): Adjust.
+	* src/reader.c (grammar_current_rule_prec_set)
+	(grammar_current_rule_dprec_set, grammar_current_rule_merge_set):
+	Standardize error messages.
+	And s/@prec/%prec/!
+	(reader): Use trace_flag to enable scanner/parser debugging,
+	instead of an adhoc scheme.
+	* src/scan-gram.l: Remove trailing debugging code.
+
+2002-10-16  Paul Eggert  <eggert@twinsun.com>
+
+	* src/muscle_tab.h (MUSCLE_TAB_H_): Was misspelled as
+	MUSCLE_TAB_H.
+
+	* NEWS: Officially drop support for building Bison with K&R C,
+	since it didn't work anyway and it's not worth worrying about.
+	* Makefile.maint (wget_files): Remove ansi2knr.c.
+	(ansi2knr.c-url_prefix): Remove.
+	* lib/.cvsignore: Remove ansi2knr, ansi2knr.*.
+	* lib/Makefile.am (AUTOMAKE_OPTIONS): Remove.
+	* src/Makefile.am (AUTOMAKE_OPTIONS): Remove.
+
+2002-10-15  Paul Eggert  <eggert@twinsun.com>
+
+	Stop using the "enum_" trick for K&R-style function definitions;
+	it confused me, and I was the author!  Instead, assume that people
+	who want to use K&R C compilers (when using these modules in GCC,
+	perhaps?) will run ansi2knr.
+
+	* lib/bbitset.h: (enum_bitset_ops, enum_bitset_type): Remove.
+	All uses of "enum_" changed to "enum ".
+	* lib/ebitset.c (enum_ebitset_find_mode): Likewise.
+	* lib/lbitset.c (enum_lbitset_find_mode): Likewise.
+
+	* lib/abitset.c (abitset_and, abitset_and_cmp, abitset_and_or,
+	abitset_and_or_cmp, abitset_andn, abitset_andn_cmp,
+	abitset_andn_or, abitset_andn_or_cmp, abitset_bytes, abitset_copy,
+	abitset_copy1, abitset_disjoint_p, abitset_empty_p,
+	abitset_equal_p, abitset_init, abitset_list, abitset_list_reverse,
+	abitset_not, abitset_ones, abitset_or, abitset_or_and,
+	abitset_or_and_cmp, abitset_or_cmp, abitset_reset, abitset_set,
+	abitset_size, abitset_small_list, abitset_subset_p, abitset_test,
+	abitset_unused_clear, abitset_xor, abitset_xor_cmp, abitset_zero):
+	Use function prototypes; this removes the need for declaring
+	static functions simply to provide their prototypes.
+	* lib/bitset.c (bitset_alloc, bitset_and_or_, bitset_and_or_cmp_,
+	bitset_andn_or_, bitset_andn_or_cmp_, bitset_bytes, bitset_copy_,
+	bitset_count_, bitset_create, bitset_dump, bitset_first,
+	bitset_free, bitset_init, bitset_last, bitset_next,
+	bitset_obstack_alloc, bitset_obstack_free, bitset_only_set_p,
+	bitset_op4_cmp, bitset_or_and_, bitset_or_and_cmp_, bitset_prev,
+	bitset_print, bitset_release_memory, bitset_toggle_,
+	bitset_type_choose, bitset_type_get, bitset_type_name_get,
+	debug_bitset): Likewise.
+	* lib/bitset.h (bitset_set, bitset_reset, bitset_test): Likewise.
+	* lib/bitset_stats.c (bitset_log_histogram_print,
+	bitset_percent_histogram_print, bitset_stats_and,
+	bitset_stats_and_cmp, bitset_stats_and_or,
+	bitset_stats_and_or_cmp, bitset_stats_andn, bitset_stats_andn_cmp,
+	bitset_stats_andn_or, bitset_stats_andn_or_cmp, bitset_stats_copy,
+	bitset_stats_count, bitset_stats_disable, bitset_stats_disjoint_p,
+	bitset_stats_dump, bitset_stats_empty_p, bitset_stats_enable,
+	bitset_stats_equal_p, bitset_stats_free, bitset_stats_init,
+	bitset_stats_list, bitset_stats_list_reverse, bitset_stats_not,
+	bitset_stats_ones, bitset_stats_or, bitset_stats_or_and,
+	bitset_stats_or_and_cmp, bitset_stats_or_cmp, bitset_stats_print,
+	bitset_stats_print_1, bitset_stats_read, bitset_stats_reset,
+	bitset_stats_set, bitset_stats_size, bitset_stats_subset_p,
+	bitset_stats_test, bitset_stats_toggle, bitset_stats_type_get,
+	bitset_stats_write, bitset_stats_xor, bitset_stats_xor_cmp,
+	bitset_stats_zero): Likewise.
+	* lib/bitsetv.c (bitsetv_alloc, bitsetv_create, bitsetv_free,
+	bitsetv_zero, bitsetv_ones, bitsetv_transitive_closure,
+	bitsetv_dump, debug_bitsetv): Likewise.
+	* lib/ebitset.c (ebitset_and, ebitset_and_cmp, ebitset_andn,
+	ebitset_andn_cmp, ebitset_bytes, ebitset_copy, ebitset_copy_,
+	ebitset_copy_cmp, ebitset_disjoint_p, ebitset_elt_add,
+	ebitset_elt_alloc, ebitset_elt_calloc, ebitset_elt_find,
+	ebitset_elt_free, ebitset_elt_last, ebitset_elt_remove,
+	ebitset_elt_zero_p, ebitset_elts_grow, ebitset_empty_p,
+	ebitset_equal_p, ebitset_free, ebitset_init, ebitset_list,
+	ebitset_list_reverse, ebitset_not, ebitset_ones, ebitset_op3_cmp,
+	ebitset_or, ebitset_or_cmp, ebitset_release_memory, ebitset_reset,
+	ebitset_set, ebitset_size, ebitset_subset_p, ebitset_test,
+	ebitset_weed, ebitset_xor, ebitset_xor_cmp, ebitset_zero):
+	Likewise.
+	* lib/lbitset.c (debug_lbitset, lbitset_and, lbitset_and_cmp,
+	lbitset_andn, lbitset_andn_cmp, lbitset_bytes, lbitset_copy,
+	lbitset_copy_cmp, lbitset_disjoint_p, lbitset_elt_alloc,
+	lbitset_elt_calloc, lbitset_elt_find, lbitset_elt_free,
+	lbitset_elt_link, lbitset_elt_unlink, lbitset_elt_zero_p,
+	lbitset_empty_p, lbitset_equal_p, lbitset_free, lbitset_init,
+	lbitset_list, lbitset_list_reverse, lbitset_not, lbitset_ones,
+	lbitset_op3_cmp, lbitset_or, lbitset_or_cmp, lbitset_prune,
+	lbitset_release_memory, lbitset_reset, lbitset_set, lbitset_size,
+	lbitset_subset_p, lbitset_test, lbitset_weed, lbitset_xor,
+	lbitset_xor_cmp, lbitset_zero): Likewise.
+
+2002-10-14  Akim Demaille  <akim@epita.fr>
+
+	Version 1.75.
+
+2002-10-14  Akim Demaille  <akim@epita.fr>
+
+	* tests/Makefile.am (maintainer-check-posix): New.
+
+2002-10-14  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c [YYDEBUG] (YYLEFTMOST_STATE): Initialize the yyloc
+	member.
+
+2002-10-14  Akim Demaille  <akim@epita.fr>
+
+	* src/tables.c (table_ninf_remap): base -> tab.
+	Reported by Matt Rosing.
+
+2002-10-14  Paul Eggert  <eggert@twinsun.com>
+
+	* tests/action.at, tests/calc.at, tests/conflicts.at,
+	tests/cxx-type.at, tests/headers.at, tests/input.at,
+	tests/regression.at, tests/synclines.at, tests/torture.at:
+	Say "bison -o foo.c foo.y", not "bison foo.y -o foo.c",
+	so that the tests still work even if POSIXLY_CORRECT is set.
+	* doc/bison.texinfo (Rpcalc Compile, Invocation): Likewise.
+
+	* data/c.m4 (b4_int_type): Use yysigned_char instead of signed char,
+	for portability to K&R hosts.  Fix typo: signed char is guaranteed
+	only to 127, not to 128.
+	* data/glr.c (yysigned_char): New type.
+	* data/yacc.c (yysigned_char): Likewise.
+	* tests/regression.at (Web2c Actions): signed char -> yysigned_char.
+
+2002-10-13  Paul Eggert  <eggert@twinsun.com>
+
+	* data/yacc.c (yyparse): Rewrite to avoid "comparison is always
+	true due to limited range of data type" warning from GCC.
+
+	* data/c.m4 (b4_token_defines): Protect against double-inclusion
+	by wrapping enum yytokentype's definition inside #ifndef
+	YYTOKENTYPE.  This undoes a bug I introduced on 2002-10-12.
+
+2002-10-13  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c (yyglrShiftDefer, yyaddDeferredAction, yydoAction):
+	Un yy- yyrhs to avoid the name clash with the global YYRHS.
+
+2002-10-13  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.maint: Update from Autoconf 2.54.
+	* m4/strerror_r.m4 (AC_FUNC_STRERROR_R): Remove, shipped with 2.54.
+
+2002-10-13  Akim Demaille  <akim@epita.fr>
+
+	* src/print.c (print_state): Separate the list of solved conflicts
+	from the other items.
+	* tests/conflicts.at (Resolved SR Conflicts): Adjust.
+
+2002-10-13  Akim Demaille  <akim@epita.fr>
+
+	Let nondeterministic skeletons be usable with deterministic
+	tables.
+
+	With the patch, GAWK compiled by GCC without -O2 passes its test
+	suite using a GLR parser driven by LALR tables.  It fails with -O2
+	because `struct stat' gives two different answers on my machine:
+	88 (definition of an auto var) and later 96 (memset on this var).
+	Hence the stack is badly corrumpted.  The headers inclusion is to
+	blame: if I move the awk.h inclusion before GLR's system header
+	inclusion, the two struct stat have the same size.
+
+	* src/tables.c (pack_table): Always create conflict_table.
+	(token_actions): Always create conflict_list.
+	* data/glr.c (YYFLAG): Remove, unused.
+
+2002-10-13  Akim Demaille  <akim@epita.fr>
+
+	* configure.ac (AC_GNU_SOURCE): Use it instead of hand written code.
+	(O0FLAGS): New.
+	(VALGRIND, GXX): New.
+	* tests/atlocal.in (CFLAGS): Use O0FLAGS.
+	* tests/bison.in: Run $PREBISON a pre-command.
+	* tests/Makefile.am (maintainer-check, maintainer-check-valgrind)
+	(maintainer-check-g++): New.
+	* Makefile.am (maintainer-check): New.
+
+2002-10-13  Akim Demaille  <akim@epita.fr>
+
+	* data/glr.c: Formatting changes.
+	Tweak some trace messages to match yacc.c's.
+
+2002-10-13  Akim Demaille  <akim@epita.fr>
+
+	GLR parsers sometimes raise parse errors instead of performing the
+	default reduction.
+	Reported by Charles-Henry de Boysson.
+
+	* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Don't
+	check the length of the traces when %glr.
+	(_AT_CHECK_CALC_ERROR): Also skip `^Stack' lines, coming from
+	GLR's traces.
+	(AT_CHECK_CALC_LALR, AT_CHECK_CALC_GLR): New.
+	Test GLR parsers.
+	* data/glr.c (YYLEFTMOST_STATE): Fix its value.
+	(yyltype): Remove the yy prefix from the member names.
+	(yytable): Complete its comment.
+	(yygetLRActions): Map error action number from YYTABLE from
+	YYTABLE_NINF to 0.
+	(yyisErrorAction): No longer compare YYACTION to YYPACT_NINF
+	(which was a bug: it should have been YYTABEL_NINF, and yet it was
+	not satisfying as we could compare an YYACTION computed from
+	YYDEFACT to YYTABLE_NINF although they are unrelated): 0 is the
+	only value for error actions.
+	(yyreportParseError): In verbose parse error messages, don't issue
+	`error' in the list of expected tokens.
+	* data/yacc.c (yyparse) <yybackup>: Rewrite the decoding of the
+	next action to perform to match glr.c's decoding.
+	(yytable): Complete its comment.
+
+2002-10-13  Paul Eggert  <eggert@twinsun.com>
+
+	Fix problem reported by Henrik Grubbstroem in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00098.html>:
+	"nonterm: { $$ = 123; } { $$ = $1; };" was wrongly rejected,
+	because the Bison parser reads the second action before reducing
+	the first one.
+	* src/scan-gram.l (rule_length): New static var.
+	Use it to keep track of the rule length in the scanner, since
+	we can't expect the parser to be in lock-step sync with the scanner.
+	(handle_action_dollar, handle_action_at): Use this var.
+	* tests/actions.at (Exotic Dollars): Test for the problem.
+
+2002-10-12  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/timevar.c [! IN_GCC && HAVE_SYS_TIME_H]: Include <sys/time.h>.
+	* m4/timevar.m4 (BISON_PREREQ_TIMEVAR): Check for <sys/time.h>.
+	Include <sys/time.h> when checking for clock_t and struct tms.
+	Use same include order as source.
+	This is for the SunOS 4.1.4 porting bug reported by Peter Klein in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00016.html>.
+
+	* lib/timevar.c: Update copyright date and clarify comments.
+	(get_time) [IN_GCC]: Keep the GCC version for reference.
+
+	* lib/timevar.c, lib/timevar.h, lib/timevar.def: Import
+	GCC version as of today, then merge Bison's changes.
+	Change "GCC" to "Bison" in copyright notice.  timevar.def's
+	author is Akim, so change that too.
+
+	* src/reader.c (grammar_current_rule_check):
+	Don't worry about the default action if $$ is untyped.
+	Prevents bogus warnings reported by Jim Gifford in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00015.html>.
+
+	* data/c.m4 (b4_token_enum): Do not define YYTOKENTYPE.
+	* data/glr.c, data/lalr1.cc, data/yacc.c:
+	Output token definitions before the first part of user declarations.
+	Fixes compatibility problem reported by Jim Gifford for kbd in
+	<http://lists.gnu.org/archive/html/bug-bison/2002-10/msg00014.html>.
+
+2002-10-11  Paul Eggert  <eggert@twinsun.com>
+
+	* data/yacc.c (yyreport_parse_error): Remove, putting its body into...
+	(yyparse): here.  This undoes some of the 2002-07-25 change.
+	Compatibility problem reported by Ralf S. Engelschall with
+	OSSP cfg <http://www.ossp.org/pkg/lib/cfg/>.
+
+2002-10-11  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at Characters Escapes): New.
+	* src/scan-gram.l (SC_ESCAPED_CHARACTER): Accept \' in strings and
+	characters.
+	Reported by Jan Nieuwenhuizen.
+
+2002-10-11  Akim Demaille  <akim@epita.fr>
+
+	* po/id.po: New.
+
+2002-10-10  Paul Eggert  <eggert@twinsun.com>
+
+	Portability fixes for bitsets; this also avoids several GCC
+	warnings.
+
+	* lib/abitset.c: Include <stddef.h>, for offsetof.
+	* lib/lbitset.c: Likewise.
+
+	* lib/abitset.c (abitset_bytes): Return a size that is aligned
+	properly for vectors of objects.  Do not assume that adding a
+	header size to a multiple of a word size yields a value that is
+	properly aligned for the whole union.
+	* lib/bitsetv.c (bitsetv_alloc): Likewise.
+
+	* lib/bitset_stats.c (bitset_stats_bytes): Adjust to new,
+	unique names for structures.
+	* lib/ebitset.c (ebitset_bytes): Likewise.
+	* lib/lbitset.c (lbitset_bytes): Likewise.
+
+	* lib/abitset.c (abitset_ones, abitset_zero, abitset_empty_p,
+	abitset_copy1, abitset_not, abitset_equal_p, abitset_subset_p,
+	abitset_disjoint_p, abitset_and, abitset_and_cmp, abitset_andn,
+	abitset_andn_cmp, abitset_or, abitset_or_cmp, abitset_xor,
+	abitset_xor_cmp, abitset_and_or, abitset_and_or_cmp,
+	abitset_andn_or, abitset_andn_or_cmp, abitset_or_and,
+	abitset_or_and_cmp, abitset_copy): Supply prototype decls,
+	to improve the type-checking that GCC can do.
+	* lib/bitset.c (bitset_op4_cmp): Likewise.
+	* lib/bitset_stats.c (bitset_stats_count,
+	bitset_stats_empty_p, bitset_stats_ones, bitset_stats_zero,
+	bitset_stats_copy, bitset_stats_disjoint_p,
+	bitset_stats_equal_p, bitset_stats_not, bitset_stats_subset_p,
+	bitset_stats_and, bitset_stats_and_cmp, bitset_stats_andn,
+	bitset_stats_andn_cmp, bitset_stats_or, bitset_stats_or_cmp,
+	bitset_stats_xor, bitset_stats_xor_cmp, bitset_stats_and_or,
+	bitset_stats_and_or_cmp, bitset_stats_andn_or,
+	bitset_stats_andn_or_cmp, bitset_stats_or_and,
+	bitset_stats_or_and_cmp): Likewise.
+	* lib/lbitset.c (lbitset_and, lbitset_and_cmp, lbitset_andn,
+	lbitset_andn_cmp, lbitset_or, lbitset_or_cmp, lbitset_xor,
+	lbitset_xor_cmp, lbitset_empty_p, lbitset_ones, lbitset_not,
+	lbitset_subset_p, lbitset_disjoint_p, debug_lbitset): Likewise.
+
+	* lib/abitset.h: Include bitset.h, not bbitset.h.
+	* lib/ebitset.h: Likewise.
+	* lib/lbitset.h: Likewise.
+
+	* lib/bbitset.h: (enum_bitset_ops, enum_bitset_type): New types.
+	All instances of parameters of type enum bitset_opts are now of
+	type enum_bitset_opts, to conform to the C Standard, and similarly
+	for enum_bitset_type.
+	* lib/ebitset.c (enum_ebitset_find_mode): Likewise.
+	* lib/lbitset.c (enum_lbitset_find_mode): Likewise.
+
+	Do not use "struct bitset_struct" to mean different things in
+	different modules.  Not only is this confusing, it violates
+	the C Standard, which requires that structure types in different
+	modules must be compatible if one is to be passed to the other.
+	* lib/bbitset.h (bitset): Now points to a union, not to a struct.
+	All instances of "struct bitset_struct *" replaced with "bitset".
+	* lib/bitset.h (struct bitset_struct): Remove, replacing with....
+	(union bitset_union, struct abitset_struct, struct ebitset_struct,
+	struct lbitset_struct, struct bitset_stats_struct): New types.
+	All uses of struct bitset_struct changed to union bitset_union,
+	etc.
+	* lib/abitset.c (struct abitset_struct, abitset,
+	struct bitset_struct): Remove.
+	* lib/bitset_stats.c (struct bitset_stats_struct, bitset_stats,
+	struct bitset_struct): Remove.
+	* lib/ebitset.c (struct ebitset_struct, ebitset, struct
+	bitset_struct): Remove.
+	* lib/lbitset.c (struct lbitset_struct, lbitset, bitset_struct):
+	Likewise.
+
+	Do not call a function of type T using a call that assumes the
+	function is of a different type U.  Standard C requires that a
+	function must be called with a type that is compatible with its
+	definition.
+	* lib/bbitset.h (bitset_and_or_, bitset_andn_or_, bitset_or_and_):
+	New decls.
+	* lib/bitset.c (bitset_and_or_, bitset_andn_or_, bitset_or_and_):
+	New functions.
+	* lib/ebitset.c (PFV): Remove.
+	* lib/lbitset.c (PFV): Likewise.
+	* lib/ebitset.c (ebitset_and, ebitset_andn, ebitset_or,
+	ebitset_xor, ebitset_copy, ebitset_ones, ebitset_empty_p): New
+	decls.
+	(ebitset_and, ebitset_andn, ebitset_or, ebitset_xor): New functions.
+	(ebitset_vtable): Use them.
+	* lib/lbitset.c (lbitset_and, lbitset_andn, lbitset_or,
+	lbitset_xor): New functions.
+	(lbitset_vtable): Use them.
+
+	* lib/bitset.h (bitset_next, bitset_prev, bitset_only_set_p):
+	Declare.
+
+	* lib/bitsetv.c (bitsetv_alloc): Add a cast to (void *) to avoid a
+	GCC warning.
+	* lib/lbitset.c (LBITSET_CURRENT1): Likewise.
+	Use offsetof, for simplicity.
+
+2002-10-06  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/bitset.h (bitset_reset): Do not assume that bitset_word is
+	the same width as int.  This reapplies a hunk of the 2002-08-12 patch
+	<http://lists.gnu.org/archive/html/bison-patches/2002-08/msg00007.html>,
+	which was inadvertently undone by the 2002-09-30 patch.
+	* lib/lbitset.c (debug_lbitset): Do not assume that bitset_word is
+	the same width as int.
+
+2002-10-04  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.50.
+
+	* configure.ac (AC_INIT), NEWS: Increment version number.
+
+	* doc/bison.texinfo: Minor spelling, grammar, and white space
+	fixes.
+	(Symbols): Mention that any negative value returned from yylex
+	signifies end-of-input.  Warn about negative chars.  Mention
+	the portable Standard C character set.
+
+	The GNU coding standard says CFLAGS and YFLAGS are reserved
+	for the installer to set.
+	* lib/Makefile.am (AM_CFLAGS): Renamed from CFLAGS.
+	* src/Makefile.am (AM_CFLAGS): Likewise.
+	(AM_YFLAGS): Renamed from YFLAGS.
+
+	Fix some MAX and MIN problems.
+	* src/gram.h (ITEM_NUMBER_MIN): MIN_MAX -> INT_MIN.
+	* src/lalr.h (GOTO_NUMBER_MAX): INT_MAX -> SHRT_MAX.
+	* src/symtab.h (SYMBOL_NUMBER_MAX): New macro.
+	* src/reader.c (reader): Use it.
+
+	* tests/regression.at (Braces parsing): Use grep, not fgrep, as
+	POSIX 1003.1-2001 has removed fgrep.
+
+2002-10-04  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+
+	* lib/bbitset.h (BITSET_WINDEX_MAX): Redefine so that it cannot be
+	interpreted as signed.
+	* lib/ebitset.c (ebitset_list): Fix bug.
+
+2002-10-01  Paul Eggert  <eggert@twinsun.com>
+
+	More fixes for 64-bit hosts and large bitsets.
+
+	* lib/abitset.c (struct abitset_struct.n_bits, abitset_small_list,
+	abitset_size, abitset_list, abitset_list_reverse, abitset_list):
+	Use bitset_bindex, not int or unsigned int or size_t, to count bits.
+	* lib/bbitset.h (struct bitset_vtable.size, struct bitset_vtable.count,
+	struct bitset_vtable.list, struct bitset_vtable.list_reverse,
+	bitset_count_, bitset_next, bitset_prev, bitset_first, bitset_last,
+	bitset_count_): Likewise.
+	* lib/bitset.h (bitset_iterator.num, bitset_iterator.i,
+	bitset_first, bitset_last): Likewise.
+	* lib/bitset_stats.c (bitset_stats_size, bitset_stats_list,
+	bitset_stats_list_reverse, bitset_stats_size,
+	bitset_stats_count, bitset_stats_list, bitset_stat_list_reverse):
+	Likewise.
+	* lib/bitsetv-print.c (bitsetv_matrix_dump): Likewise.
+	* lib/bitsetv.c (bitsetv_alloc, bitsetv_create, bitsetv_free,
+	bitsetv_zero, bitsetv_ones, bitsetv_transitive_closure,
+	bitsetv_reflexive_transitive_closure): Likewise.
+	* lib/bitsetv.h (bitsetv_alloc, bitsetv_create): Likewise.
+	* lib/ebitset.c (ebitset_size, ebitset_list, ebitset_list_reverse):
+	Likewise.
+	* lib/lbitset.c (lbitset_size, lbitset_list, lbitset_list_merge):
+	Likewise.
+
+	* lib/abitset.c (abitset_ones, abitset_zero, abitset_bytes):
+	Use size_t, not unsigned int, to count bytes.
+	* lib/abitset.h (abitset_bytes): Likewise.
+	* lib/bitset.c (bitset_bytes, bitset_alloc, bitset_obstack_alloc):
+	Likewise.
+	* lib/bitset.h (bitset_bytes): Likewise.
+	* lib/bitset_stats.c (bitset_stats_bytes, bitset_stats_init): Likewise.
+	* lib/bitset_stats.h (bitset_stats_bytes): Likewise.
+	* lib/bitsetv.c (bitsetv_alloc): Likewise.
+	* lib/ebitset.c (ebitset_bytes): Likewise.
+	* lib/ebitset.h (ebitset_bytes): Likewise.
+	* lib/lbitset.c (lbitset_bytes): Likewise.
+	* lib/lbitset.h (lbitset_bytes): Likewise.
+
+	* lib/abitset.c (abitset_empty_p, abitset_not, abitset_equal_p,
+	abitset_subset_p, abitset_disjoint_p, abitset_and,
+	abitset_and_cmp, abitset_andn, abitset_andn_cmp, abitset_or,
+	abitset_or_cmp, abitset_xor, abitset_xor_cmp, abitset_and_or,
+	abitset_and_or_cmp, abitset_andn_or, abitset_andn_or_cmp,
+	abitset_or_and, abitset_or_and_cmp):
+	Use bitset_windex instead of unsigned int.
+	* lib/bitsetv.c (bitsetv_dump, debug_bitsetv): Likewise.
+	* lib/ebitset.c (struct ebitset_struct.size, ebitset_elts_grow,
+	ebitset_elt_add, ebitset_elt_remove, ebitset_weed,
+	ebitset_elt_find, ebitset_list_reverse, ebitset_list, ebitset_init):
+	Likewise.
+	* lib/lbitset.c (lbitset_ones, lbitset_not): Likewise.
+
+	* lib/bitset.c (bitset_print):
+	Use proper printf formats for widths of integer types.
+	* lib/bitset_stats.c (bitset_percent_histogram_print,
+	bitset_log_histogram_print, bitset_stats_print_1): Likewise.
+	* lib/bitsetv-print.c (bitsetv_matrix_dump): Likewise.
+	* lib/bitsetv.c (bitsetv_dump, debug_bitsetv): Likewise.
+	* lib/lbitset.c (lbitset_bytes): Likewise.
+
+	* lib/bbitset.h (BITSET_BINDEX_MAX, BITSET_WINDEX_MAX,
+	BITSET_SIZE_MAX): New macros.
+	(BITSET_INDEX_MAX): Remove.  It wasn't right, since it assumed that
+	sizeof (bitset_word) == sizeof (bitset_windex).  All uses changed
+	to BITSET_WINDEX_MAX.
+
+	* lib/bitset.c (bitset_next, bitset_prev, bitset_first,
+	bitset_last): Return BITSET_BINDEX_MAX (not -1) for no value,
+	since we now return the bitset_bindex type (not int).
+
+	* lib/bitsetv.c (bitsetv_alloc): Check for arithmetic overflow
+	when computing sizes.
+	* lib/ebitset.c (ebitset_elts_grow): Likewise.
+
+	* lib/lbitset.c (lbitset_elt_find): Simplify windex calculation
+	and avoid cast to unsigned.
+
+2002-09-30  Akim Demaille  <akim@epita.fr>
+
+	* lib/abitset.c, lib/bbitset.h, lib/bitset.c, lib/bitset.h,
+	* lib/bitset_stats.c, lib/bitsetv.c, lib/ebitset.c, lib/lbitset.c:
+	Updates from Michael Hayes.
+
+2002-09-30  Art Haas  <ahaas@neosoft.com>
+
+	* configure.ac: Update AC_OUTPUT and AM_CONFIG_HEADER
+	invocations.
+	* tests/cxx-type.at (declarator): Don't rely on NDEBUG being not
+	defined.
+
+2002-09-27  Akim Demaille  <akim@epita.fr>
+
+	Version 1.49c.
+
+2002-09-27  Akim Demaille  <akim@epita.fr>
+
+	* configure.ac (AM_INIT_AUTOMAKE): We _need_ 1.7.
+	(Because of AC_LIBSOURCE).
+
+2002-09-27  Akim Demaille  <akim@epita.fr>
+
+	Playing with Autoscan.
+
+	* configure.ac: Remove the old LIBOBJ tweaks.
+	(AC_REPLACE_FUNCS): Add strrchr and strtol.
+	* lib/strrchr.c: New.
+	* lib/strtol.c: New, from the Coreutils 4.5.1.
+
+2002-09-27  Akim Demaille  <akim@epita.fr>
+
+	Playing with Autoscan.
+
+	* m4/prereq.m4 (jm_PREREQ_ARGMATCH, jm_FUNC_ARGMATCH): New.
+	* lib/Makefile.am (libbison_a_SOURCES): No longer include
+	argmatch.c and argmatch.h, since they are AC_LIBSOURCE'd.
+	* lib/strcasecmp.c, lib/strncasecmp.c, lib/memcmp.c: New, from the
+	Coreutils 4.5.1.
+
+2002-09-24  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Stack Overflow): xref to Recursion.
+	(Frequently Asked Questions, Parser Stack Overflow): New.
+
+2002-09-13  Akim Demaille  <akim@epita.fr>
+
+	Playing with autoscan.
+
+	* src/reader.c (get_merge_function): Use xstrdup, not strdup.
+	* src/files.c (skeleton_find): Remove, unused.
+	* m4/memcmp.m4: New, from the Coreutils 4.5.1.
+	* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Run jm_FUNC_MEMCMP.
+
+2002-09-13  Akim Demaille  <akim@epita.fr>
+
+	* configure.ac (AM_INIT_AUTOMAKE): Require Automake 1.6.3.
+	* Makefile.am (AUTOMAKE_OPTIONS): Don't.
+
+2002-09-13  Akim Demaille  <akim@epita.fr>
+
+	* configure.ac: Require 2.54.
+	s/jm_FUNC_MALLOC/AC_FUNC_MALLOC/.
+	s/jm_FUNC_REALLOC/AC_FUNC_REALLOC/.
+	* m4/c-bs-a.m4, m4/malloc.m4, m4/mbstate_t.m4, m4/realloc.m4:
+	Remove, provided by Autoconf macros.
+
+2002-09-12  Akim Demaille  <akim@epita.fr>
+
+	* m4/prereq.m4: Update, from Coreutils 4.5.1.
+
+2002-09-12  Akim Demaille  <akim@epita.fr>
+
+	* m4/prereq.m4: Update, from Fileutils 4.1.5.
+	* configure.ac (jm_PREREQ_TEMPNAME): Invoke it.
+	Reported by Martin Mokrejs.
+
+2002-09-10  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y: Associate a human readable string to each
+	token type.
+	* tests/regression.at (Invalid inputs): Adjust.
+
+2002-09-10  Gary V. Vaughan  <gary@gnu.org>
+
+	* tests/Makefile.am ($(srcdir)/package.m4): Bison now ships
+	with an Autoconf-2.5x style configure.ac.
+
+2002-09-06  Paul Eggert  <eggert@twinsun.com>
+
+	* doc/bison.texinfo (Conditions): Make explicit that the GPL
+	exception applies only to yacc.c.  This is a modification of a
+	patch originally suggested by Akim Demaille.
+
+2002-09-06  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_copyright): Move the GPL exception comment from
+	here to...
+	* data/yacc.c: here.
+
+	* data/lalr1.cc (struct yyltype): Don't define it, since we use
+	LocationType.
+	(b4_ltype): Default to yy::Location from location.hh.
+
+2002-09-04  Jim Meyering  <jim@meyering.net>
+
+	* data/yacc.c: Guard the declaration of yytoknum also with
+	`#ifdef YYPRINT', so it is declared only when used.
+
+2002-09-04  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Rename as...
+	* configure.ac: this.
+	Bump to 1.49c.
+
+2002-09-04  Akim Demaille  <akim@epita.fr>
+
+	* src/assoc.c, src/closure.c, src/gram.c, src/injections.c,
+	* src/lalr.c, src/LR0.c, src/relation.c, src/tables.c: Don't
+	translate maintainer only messages.
+
+2002-08-12  Paul Eggert  <eggert@twinsun.com>
+
+	Version 1.49b.
+
+	* Makefile.am (SUBDIRS): Remove intl.
+	(DISTCLEANFILES): Remove.
+	* NEWS: Mention that GNU M4 is now required.  Clarify what is
+	meant by "larger grammars".  Mention the pt_BR translation.
+	* configure.in (AC_CHECK_DECLS): Add getenv, getopt.
+	(AM_GNU_GETTEXT_VERSION): New macro, replacing GETTEXT_VERSION var.
+	Bump version from 0.11.2 to 0.11.5.
+	(BISON_PREREQ_STAGE): Remove.
+	(AM_GNU_GETTEXT): Use external gettext.
+	(AC_OUTPUT): Remove intl/Makefile.
+
+	* config/depcomp, config/install-sh: Sync with Automake 1.6.3.
+
+	* data/glr.c: Include string.h, for strlen.
+	(yyreportParseError): Use size_t for yysize.
+	(yy_yypstack): No longer nested inside yypstates, as nested
+	functions are not portable.  Do not assume size_t is the
+	same width as int.
+	(yypstates): Do not assume that ptrdiff_t is the same width
+	as int, and similarly for yyposn and YYINDEX.
+
+	* data/yacc.c: Fix comment about `$$ = $1': it can copy garbage.
+
+	* lib/Makefile.am (INCLUDES): Do not include from the intl
+	directory, which has been removed.
+	* src/Makefile.am (INCLUDES): Likewise.
+
+	* lib/Makefile.am (libbison_a_SOURCES): Add unlocked-io.h.
+	(bitsets_sources, additional_bitsets_sources, timevars_sources):
+	New vars.
+
+	* lib/Makefile.am (libbison_a_SOURCES): Avoid +=, a GNU make extension.
+	* tests/Makefile.am (EXTRA_DIST): Likewise.
+
+	* lib/abitset.c (abitset_reverse_list, ebitset_reverse_list):
+	Do not assume that bitset_windex is the same width as unsigned.
+
+	* lib/abitset.c (abitset_unused_clear): Do not assume that
+	bitset_word is the same width as int.
+	* lib/bbitset.h (BITSET_INDEX_MAX, BITSET_MSB): Likewise.
+	* lib/bitset.h (bitset_set, bitset_reset): Likewise.
+	* lib/bitset_stats.c (bitset_stats_set, bitset_stats_reset): Likewise.
+	* lib/ebitset.c (ebitset_set, ebitset_reset): Likewise.
+	* lib/lbitset.c (lbitset_set, lbitset_reset): Likewise.
+
+	* lib/abitset.c (abitset_op1): Use -1, not ~0, as memset arg (for
+	portability to one's complement hosts!).
+	* lib/ebitset.c (ebitset_op1): Likewise.
+	* lib/lbitset.c (lbitset_op1): Likewise.
+
+	* lib/argmatch.c, lib/quotearg.c, quotearg.h: Sync with GNU tar.
+	* lib/argmatch.h, lib/basename.c, lib/dirname.c, lib/dirname.h,
+	lib/hash.c, lib/hash.h, lib/strnlen.c, lib/xmalloc.c:
+	Sync with fileutils.
+	* lib/error.c, lib/getopt.c, lib/getopt.h, lib/getopt1.c,
+	lib/gettext.h: Sync with diffutils.
+
+	* lib/memrchr.c, lib/mkstemp.c, lib/strchr.c, lib/strnlen.c,
+	lib/strspn.c, lib/tempname.c: Use GPL, not LGPL.
+
+	* lib/obstack.c, lib/obstack.h: Sync with fileutils, except use
+	PROTOTYPES to check for prototypes, and "defined __STDC__" to
+	check for void *.
+
+	* lib/bbitset.h (BITSET_WORD_BITS): Now of type unsigned, not
+	size_t; the old version tried to do this but casted improperly.
+	(bitset_bindex, bitset_windex): Now size_t, not unsigned long.
+	(bitset_test): Now returns int, not unsigned long.
+
+	* lib/bitset_stats.c: Include "gettext.h".
+	(_): New macro.
+	(bitset_stats_set, bitset_stats_reset, bitset_stats_test): Don't
+	name locals "index", as it generates unnecessary warnings on some
+	hosts that have an "index" function.
+
+	* lib/bitset_stats.c (bitset_stats_print_1, bitset_stats_print,
+	bitset_stats_read, bitset_stats_write): Wrap strings in _() if
+	they need translation.
+	* src/LR0.c (state_list_append, new_itemsets, get_state,
+	append_states, generate_states): Likewise.
+	* src/assoc.c (assoc_to_string): Likewise.
+	* src/closure.c (print_closure, set_firsts, closure): Likewise.
+	* src/gram.c (grammar_dump): Likewise.
+	* src/injections.c (injections_compute): Likewise.
+	* src/lalr.c (lookaheads_print): Likewise.
+	* src/relation.c (relation_transpose): Likewise.
+	* src/scan-gram.l: Likewise.
+	* src/tables.c (table_grow, pack_vector): Likewise.
+
+	* m4/Makefile.am (EXTRA_DIST): Remove codeset.m4,
+	glibc21.m4, isc-posix.m4 lcmessage.m4, stage.m4.
+	* m4/malloc.m4, m4/realloc.m4: Sync with diffutils.
+	* m4/mbstate_t.m4: Sync with fileutils.
+	* m4/prereq.m4 (jm_PREREQ_QUOTEARG): AC_MBSTATE_T -> AC_TYPE_MBSTATE_T.
+
+	* po/LINGUAS: Add pt_BR.
+	* po/POTFILES.in: Add src/assoc.c, src/closure.c, src/gram.c,
+	src/main.c, src/relation.c, src/state.c, lib/bitset_stats.c,
+	lib/timevar.c.
+	Use src/parse-gram.y instead of src/parse-gram.c, as the gettext
+	manual recommends.
+	Similarly, use src/scan-gram.l instead of src/scan-gram.c.
+
+	* src/complain.c (strerror_r): Remove decl; not needed.
+	(strerror): Use same pattern as ../lib/error.c.
+
+	* src/files.c, src/files.h (compute_header_macro): Remove; unused.
+
+	* src/gram.c (grammar_dump): Do not assume ptrdiff_t fits in int.
+
+	* src/main.c (main): Cast result of bindtextdomain and textdomain
+	to void, to avoid a GCC warning when --disable-nls is in effect.
+
+	* src/scan-gram.l: Use strings rather than escapes when possible,
+	to minimize the number of warnings from xgettext.
+	(handle_action_dollar, handle_action_at): Don't use isdigit,
+	as it mishandles negative chars and it may not work as expected
+	outside the C locale.
+
+	* src/symtab.c (symbol_get): Don't cast LHS of an assignment;
+	this is a GCC extension and is not portable to other compilers.
+
+	* src/system.h (alloca): Use same pattern as ../lib/error.c.
+	Do not include <ctype.h>; no longer needed.
+	Do not include <malloc.h>; no longer needed (and generates
+	warnings on OpenBSD 3.0).
+
+	* tests/cxx-type.at (yylex): Do not pass signed char to isupper;
+	it's not portable.
+
+	* tests/regression.at: Do not use 'cc -c input.c -o input';
+	Sun C rejects this.  Instead, use 'cc -c input.c -o input.o'.
+
+	* tests/synclines.at (AC_SYNCLINES_COMPILE): Accept any nonzero
+	exit status as failure, not just exit status 1.  Sun C exits
+	with status 2 sometimes.
+
+	* tests/torture.at (AT_INCREASE_DATA_SIZE): New macro.
+	Use it for the two large tests.
+
+2002-08-02  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (conflicts_output): Don't output rules never
+	reduced here, since anyway that computation doesn't work.
+	* src/gram.h, src/gram.h (rule_filter_t, rule_useful_p)
+	(rule_useless_p, rule_never_reduced_p): New.
+	(grammar_rules_partial_print): Use a filter instead of a range.
+	Display the title only if needed.
+	(grammar_rules_print): Adjust.
+	(grammar_rules_never_reduced_report): New.
+	* src/tables.c (action_row): Move the computation of rules never
+	reduced to...
+	(token_actions): here.
+	* src/main.c (main): Make the parser before making the report, so
+	that rules never reduced are computed.
+	Call grammar_rules_never_reduced_report.
+	* src/print.c (print_results): Report rules never reduced.
+	* tests/conflicts.at, tests/reduce.at: Adjust.
+
+2002-08-01  Akim Demaille  <akim@epita.fr>
+
+	Instead of attaching lookaheads and duplicating the rules being
+	reduced by a state, attach the lookaheads to the reductions.
+
+	* src/state.h (state_t): Remove the `lookaheads',
+	`lookaheads_rule' member.
+	(reductions_t): Add a `lookaheads' member.
+	Use a regular array for the `rules'.
+	* src/state.c (reductions_new): Initialize the lookaheads member
+	to 0.
+	(state_rule_lookaheads_print): Adjust.
+	* src/state.h, src/state.c (state_reductions_find): New.
+	* src/conflicts.c (resolve_sr_conflict, set_conflicts)
+	(count_rr_conflicts): Adjust.
+	* src/lalr.c (LArule): Remove.
+	(add_lookback_edge): Adjust.
+	(state_lookaheads_count): New.
+	(states_lookaheads_initialize): Merge into...
+	(initialize_LA): this.
+	(lalr_free): Adjust.
+	* src/main.c (main): Don't free nullable and derives too early: it
+	is used by --verbose.
+	* src/print.c, src/print_graph.c, src/tables.c: Adjust.
+
+2002-08-01  Akim Demaille  <akim@epita.fr>
+
+	* src/derives.h, src/derives.c (derives): A `rule_t***' instead of
+	`rule_number_t**'.
+	(set_derives, free_derives): Rename as...
+	(derives_compute, derives_free): this.
+	Adjust all dependencies.
+	* src/nullable.c (set_nullable, free_nullable): Rename as...
+	(nullable_compute, nullable_free): these.
+	(rule_list_t): Store rule_t *, not rule_number_t.
+	* src/state.c (state_rule_lookaheads_print): Directly compare rule
+	pointers, instead of their numbers.
+	* src/main.c (main): Call nullable_free, and derives_free earlier,
+	as they were lo longer used.
+
+2002-08-01  Akim Demaille  <akim@epita.fr>
+
+	* lib/timevar.c (get_time): Include children time.
+	* src/lalr.h (LA, LArule): Don't export them: used with the
+	state_t.
+	* src/lalr.c (LA, LArule): Static.
+	* src/lalr.h, src/lalr.c (lalr_free): New.
+	* src/main.c (main): Call it.
+	* src/tables.c (pack_vector): Check whether loc is >= to the
+	table_size, not >.
+	(pack_tables): Don't free froms, tos, conflict_tos, and pos...
+	(tables_generate): do it, since that's also it which allocates
+	them.
+	Don't free LA and LArule, main does.
+
+2002-07-31  Akim Demaille  <akim@epita.fr>
+
+	Separate parser tables computation and output.
+
+	* src/output.c (nvectors, base_t, base, base_ninf, conflict_table)
+	(conflict_list, conflict_list_cnt, table, check, table_ninf)
+	(yydefgoto, yydefact, high): Move to...
+	* src/tables.h, src/tables.c: here.
+	* src/output.c (vector_number_t, VECTOR_NUMBER_MAX)
+	(VECTOR_NUMBER_MIN, state_number_to_vector_number)
+	(symbol_number_to_vector_number, nvectors, BASE_MAX, BASE_MIN)
+	(froms, tos, conflict_tos, tally, width, action_t, ACTION_MAX)
+	(ACTION_MIN, actrow, order, nentries, pos, conflrow)
+	(conflict_list_free, table_size, lowzero, table_grow, conflict_row)
+	(action_row, save_row, token_actions, save_column, default_goto)
+	(goto_actions, sort_actions, matching_state, pack_vector)
+	(table_ninf_remap, pack_table, prepare_actions): Move to...
+	* src/tables.c: here.
+	* src/tables.h, src/tables.c(tables_generate, tables_free): New.
+	* src/output.c (token_actions, output_base, output_conflicts)
+	(output_check): Merge into...
+	(prepare_actions): this.
+	(actions_output): Rename as...
+	(user_actions_output): this.
+	* src/main.c (main): Call tables_generate and tables_free.
+
+2002-07-31  Akim Demaille  <akim@epita.fr>
+
+	Steal GCC's --time-report support.
+
+	* lib/timevar.c, lib/timevar.h, lib/timevar.def: New,
+	stolen/adjusted from GCC.
+	* m4/stage.m4: Remove time related checks.
+	* m4/timevar.m4: New.
+	* configure.in: Adjust.
+	* src/system.h: Adjust to using timevar.h.
+	* src/getargs.h, src/getargs.c: Support trace_time for
+	--trace=time.
+	* src/main.c (stage): Remove.
+	(main): Replace `stage' invocations with timevar calls.
+	* src/output.c: Insert pertinent timevar calls.
+
+2002-07-31  Akim Demaille  <akim@epita.fr>
+
+	Let --trace have arguments.
+
+	* src/getargs.h (enum trace_e): New.
+	* src/getargs.c (trace_args, trace_types, trace_argmatch): New.
+	(long_options, short_options): --trace/-T takes an optional
+	argument.
+	Change all the uses of trace_flag to reflect the new flags.
+	* tests/sets.at (Firsts, Nullable, Broken Closure): Use --trace=sets.
+
+	Strengthen `stage' portability.
+
+	* m4/stage.m4 (BISON_PREREQ_STAGE): New.
+	* configure.in: Use it.
+	Don't check for malloc.h and sys/times.h.
+	* src/system.h: Include them when appropriate.
+	* src/main.c (stage): Compile only when mallinfo, struct mallinfo,
+	times and struct tms are available.
+
+2002-07-30  Akim Demaille  <akim@epita.fr>
+
+	In verbose parse error message, don't report `error' as an
+	expected token.
+	* tests/actions.at (Printers and Destructors): Adjust.
+	* tests/calc.at (Calculator $1): Adjust.
+	* data/yacc.c, data/glr.c, data/lalr1.c: When making the verbose
+	error message, do not report the parser accepts the error token in
+	that state.
+
+2002-07-30  Akim Demaille  <akim@epita.fr>
+
+	Normalize conflict related messages.
+
+	* src/complain.h, src/complain.c (warn, complain): New.
+	* src/conflicts.c (conflicts_print): Use them.
+	(conflict_report_yacc): New, extracted from...
+	(conflicts_print): here.
+	* tests/conflicts.at, tests/existing.at: Adjust.
+
+2002-07-30  Akim Demaille  <akim@epita.fr>
+
+	Report rules which are never reduced by the parser: those hidden
+	by conflicts.
+
+	* src/LR0.c (save_reductions): Don't make the final state too
+	different: save its reduction (accept) instead of having a state
+	without any action (no shift or goto, no reduce).
+	Note: the final state is now a ``regular'' state, i.e., the
+	parsers now contain `reduce 0' as default reduction.
+	Nevertheless, since they decide to `accept' when yystate =
+	final_state, they still will not reduce rule 0.
+	* src/print.c (print_actions, print_reduction): Adjust.
+	* src/output.c (action_row): Track reduced rules.
+	(token_actions): Report rules never reduced.
+	* tests/conflicts.at, tests/regression.at: Adjust.
+
+2002-07-30  Akim Demaille  <akim@epita.fr>
+
+	`stage' was accidentally included in a previous patch.
+	Initiate its autoconfiscation.
+
+	* configure.in: Look for malloc.h and sys/times.h.
+	* src/main.c (stage): Adjust.
+	Report only when trace_flag.
+
+2002-07-29  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h, src/state.c (transitions_t): Holds state_t*'s, not
+	state_number_t.
+	(errs_t): symbol_t*, not symbol_number_t.
+	(reductions_t): rule_t*, not rule_number_t.
+	(FOR_EACH_SHIFT): New.
+	* src/LR0.c, src/conflicts.c, src/lalr.c, src/output.c
+	* src/print.c, src/print_graph.c: Adjust.
+
+2002-07-29  Akim Demaille  <akim@epita.fr>
+
+	Use $accept and $end, as BYacc and BTYacc do, instead of $axiom and $.
+
+	* src/symtab.h, src/symtab.c (eoftoken, axiom): Rename as...
+	(endtoken, accept): these.
+	* src/reader.c (reader): Set endtoken's default tag to "$end".
+	Set undeftoken's tag to "$undefined" instead of "$undefined.".
+	* doc/bison.texinfo (Table of Symbols): Mention $accept and $end.
+	Adjust.
+
+2002-07-29  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (reduce_grammar): When the language is empty,
+	complain about the start symbol, not the axiom.
+	Use its location.
+	* tests/reduce.at (Empty Language): New.
+
+2002-07-26  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.h, src/reader.c (gram_error): ... can't get
+	yycontrol without making too strong assumptions on the parser
+	itself.
+	* src/output.c (prepare_tokens): Use the real 0th value of
+	token_translations instead of `0'.
+	* src/parse-gram.y (yyerror): Don't rely on yycontrol being
+	visible here.
+	* data/yacc.c (yyreport_parse_error): Rename yylocation as yylloc
+	for the time being: %locations ought to provide it to yyerror.
+
+2002-07-25  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (prepare_tokens): Go up to ntokens, not ntokens + 1.
+	* doc/bison.texinfo (Decl Summary): s/$illegal/$undefined./.
+	* tests/regression.at (Web2c Actions): Adjust.
+
+2002-07-25  Akim Demaille  <akim@epita.fr>
+
+	Stop storing rules from 1 to nrules + 1.
+
+	* src/LR0.c, src/closure.c, src/derives.c, src/gram.c, src/lalr.c
+	* src/nullable.c, src/output.c, src/print.c, src/reader.c
+	* src/reduce.c: Allocate and free from &rules[0], not &rules[1].
+	Iterate from 0 to nrules.
+	Use rule_number_as_item_number and item_number_as_rule_number.
+	Adjust to `derive' now containing possibly 0.
+	* src/gram.h (rule_number_as_item_number, item_number_as_rule_number):
+	Handle the `- 1' part in rule numbers from/to item numbers.
+	* src/conflicts.c (log_resolution): Fix the message which reversed
+	shift and reduce.
+	* src/output.c (action_row): Initialize default_rule to -1.
+	(token_actions): Adjust.
+	* tests/sets.at (Nullable, Firsts): Fix the previously bogus
+	expected output.
+	* tests/conflicts.at (Resolved SR Conflicts): Likewise.
+
+2002-07-25  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_c_function, b4_c_ansi_args, b4_c_ansi_arg)
+	(b4_c_knr_arg_names, b4_c_knr_arg_name, b4_c_knr_arg_decls)
+	(b4_c_knr_arg_decl): New.
+	* data/yacc.c: Use it to define yysymprint, yydestruct, and
+	yyreport_parse_error.
+
+2002-07-25  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c (yyreport_parse_error): New, extracted from...
+	(yyparse): here.
+	(yydestruct, yysymprint): Move above yyparse.
+	Be K&R compliant.
+
+2002-07-25  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_ints_in, b4_int_type, b4_int_type_for): New,
+	replace...
+	(b4_sint_type, b4_uint_type): these.
+	* data/yacc.c, data/glr.c, data/lalr1.cc: Use b4_int_type_for.
+	* tests/regression.at (Web2c Actions): Adjust.
+
+2002-07-25  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (TIEM_NUMBER_MAX): New.
+	(item_number_of_rule_number, rule_number_of_item_number): Rename
+	as...
+	(rule_number_as_item_number, item_number_as_rule_number): these.
+	Adjust dependencies.
+	* src/output.c (vector_number_t, VECTOR_NUMBER_MAX)
+	(VECTOR_NUMBER_MIN, state_number_to_vector_number)
+	(symbol_number_to_vector_number): New.
+	(order): Of vector_number_t* type.
+	(base_t, BASE_MAX, BASE_MIN): New.
+	(froms, tos, width, pos, check): Of base_t type.
+	(action_number_t, ACTION_MIN, ACTION_MAX): New.
+	(actrow): Of action_number_t type.
+	(conflrow): Of unsigned int type.
+	(table_ninf, base_ninf): New.
+	(GENERATE_MUSCLE_INSERT_TABLE): Also output the `*_min' value.
+	(muscle_insert_int_table, muscle_insert_base_table)
+	(muscle_insert_rule_number_table): New.
+	(prepare_tokens): Output `toknum' as int_table.
+	(action_row): Returns a rule_number_t.
+	Use ACTION_MIN, not SHRT_MIN.
+	(token_actions): yydefact is rule_number_t*.
+	(table_ninf_remap): New.
+	(pack_table): Use it for `base' and `table'.
+	* data/yacc.c, data/glr.c, data/lalr1.cc (YYFLAG): Remove,
+	replaced with...
+	(YYPACT_NINF, YYTABLE_NINF): these.
+	(yypact, yytable): Compute their types instead of hard-coded
+	`short'.
+	* tests/regression.at (Web2c Actions): Adjust.
+
+2002-07-19  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l (id): Can start with an underscore.
+
+2002-07-16  Akim Demaille  <akim@epita.fr>
+
+	* src/assoc.c, src/asssoc.h (assoc_t, assoc_to_string): New.
+	Adjust all former `associativity' dependencies.
+	* src/symtab.c (symbol_new): Default associativity is `undef', not
+	`right'.
+	(symbol_check_alias_consistence): Adjust.
+
+2002-07-09  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Properly set the ``header'' part.
+	Use @dircategory ``GNU programming tools'' as per Texinfo's
+	documentation.
+	Use @copying.
+
+2002-07-09  Akim Demaille  <akim@epita.fr>
+
+	* lib/quotearg.h: Protect against multiple inclusions.
+	* src/location.h (location_t): Add a `file' member.
+	(LOCATION_RESET, LOCATION_PRINT): Adjust.
+	* src/complain.c (warn_at, complain_at, fatal_at): Drop
+	`error_one_per_line' support.
+
+2002-07-09  Akim Demaille  <akim@epita.fr>
+
+	* src/complain.h, src/complain.c (warn, complain): Remove, unused.
+	* src/reader.c (lineno): Remove.
+	Adjust all dependencies.
+	(get_merge_function): Take a location and use complain_at.
+	* src/symtab.h, src/symtab.c (symbol_make_alias): Likewise.
+	* tests/regression.at (Invalid inputs, Mixing %token styles):
+	Adjust.
+
+2002-07-09  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y (rules_or_grammar_declaration): Add an error
+	recovery rule, and forbid extensions when --yacc.
+	(gram_error): Use complain_at.
+	* src/reader.c (reader): Exit if there were parse errors.
+
+2002-07-09  Akim Demaille  <akim@epita.fr>
+
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): New.
+	(AT_TEST_SYNCLINE): Adjust to unusual GCC outputs.
+	Reported by R Blake <blakers@mac.com>.
+
+2002-07-09  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c: Output the copyright notive in the header.
+
+2002-07-03  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (froms, tos): Are state_number_t.
+	(save_column): sp, sp1, and sp2 are state_number_t.
+	(prepare): Rename `final' as `final_state_number', `nnts' as
+	`nterms_number', `nrules' as `rules_number', `nstates' as
+	`states_number', and `ntokens' as `tokens_number'.  Remove `nsym',
+	unused.
+	* data/yacc.c, data/glr.c, data/lalr1.cc: Adjust.
+	* data/lalr1.cc (nsym_): Remove, unused.
+
+2002-07-03  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h, src/lalr.c (goto_number_t): New.
+	* src/lalr.c (goto_list_t): New.
+	Propagate them.
+	* src/nullable.c (rule_list_t): New.
+	Propagate.
+	* src/types.h: Remove.
+
+2002-07-03  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (print_fderives): Use rule_rhs_print.
+	* src/derives.c (print_derives): Use rule_rhs_print.
+	(rule_list_t): New, replaces `shorts'.
+	(set_derives): Add comments.
+	* tests/sets.at (Nullable, Firsts): Adjust.
+
+2002-07-03  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (prepare_actions): Free `tally' and `width'.
+	(prepare_actions): Allocate and free `order'.
+	* src/symtab.c (symbols_free): Free `symbols'.
+	* src/scan-gram.l (scanner_free): Clear Flex's scanners memory.
+	* src/output.c (m4_invoke): Move to...
+	* src/scan-skel.l: here.
+	(<<EOF>>): Close yyout, and free its name.
+
+2002-07-03  Akim Demaille  <akim@epita.fr>
+
+	Fix some memory leaks, and fix a bug: state 0 was examined twice.
+
+	* src/LR0.c (new_state): Merge into...
+	(state_list_append): this.
+	(new_states): Merge into...
+	(generate_states): here.
+	(set_states): Don't ensure a proper `errs' state member here, do it...
+	* src/conflicts.c (conflicts_solve): here.
+	* src/state.h, src/state.c: Comment changes.
+	(state_t): Rename member `shifts' as `transitions'.
+	Adjust all dependencies.
+	(errs_new): For consistency, also take the values as argument.
+	(errs_dup): Remove.
+	(state_errs_set): New.
+	(state_reductions_set, state_transitions_set): Assert that no
+	previous value was assigned.
+	(state_free): New.
+	(states_free): Use it.
+	* src/conflicts.c (resolve_sr_conflict): Don't use an `errs_t' as
+	temporary storage: use `errs' and `nerrs' as elsewhere.
+	(set_conflicts): Allocate and free this `errs'.
+
+2002-07-02  Akim Demaille  <akim@epita.fr>
+
+	* lib/libiberty.h: New.
+	* lib: Update the bitset implementation from upstream.
+	* src/closure.c, src/lalr.c, src/output.c, src/print_graph.c,
+	* src/state.c: Use BITSET_FOR_EACH, not BITSET_EXECUTE.
+	* src/main.c: Adjust bitset stats calls.
+
+2002-07-01  Paul Eggert  <eggert@twinsun.com>
+
+	* src/scan-gram.l (<SC_ESCAPED_CHARACTER>): Convert to unsigned
+	char, so that negative chars don't collide with $.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	Have the GLR tests be `warning' checked, and fix the warnings.
+
+	* data/glr.c (YYFPRINTF): Always define it, not only when YYDEBUG
+	(yyuserAction, yyreportAmbiguity): `Use' all the arguments.
+	(yyremoveDeletes): `yyi' and `yyj' are size_t.
+	Use YYFPRINTF when under if (YYDEBUG) to avoid empty `if' bodies.
+	(yyaddDeferredAction): static.
+	(yyglrReduce): yyi, yyk, amd yyposn are size_t.
+	(yyreportParseError): yyprefix is const.
+	yytokenp is used only when verbose.
+	(yy__GNUC__): Replace with __GNUC__.
+	(yypdumpstack): yyi is size_t.
+	(yypreference): Un-yy local variables and arguments, to avoid
+	clashes with `yyr1'.  Anyway, we are not in the user name space.
+	(yytname_size): be an int, as is compared with ints.
+	* tests/testsuite.at (AT_COMPILE, AT_PARSER_CHECK): New.
+	Use them.
+	* tests/cxx-gram.at: Use quotation to protect $1.
+	Use AT_COMPILE to enable warnings hunts.
+	Prototype yylex and yyerror.
+	`Use' argc.
+	Include `string.h', not `strings.h'.
+	Produce and prototype stmtMerge only when used.
+	yylex takes a location.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	We spend a lot of time in quotearg, in particular when --verbose.
+
+	* src/symtab.c (symbol_get): Store a quoted version of the key.
+	(symbol_tag_get, symbol_tag_get_n, symbol_tag_print): Remove.
+	Adjust all callers.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (reductions_t): Rename member `nreds' as num.
+	(errs_t): Rename members `nerrs' and `errs' as `num' and `symbols'.
+	* src/state.c (ERRS_ALLOC, REDUCTIONS_ALLOC): Use the correct types.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h, src/state.c (shift_t, SHIFT_SYMBOL, SHIFT_IS_SHIFT)
+	(SHIFT_IS_GOTO, SHIFT_IS_ERROR, SHIFT_DISABLE, SHIFT_IS_DISABLED)
+	(shifts_to): Rename as...
+	(transition_t, TRANSITION_SYMBOL, TRANSITION_IS_TRANSITION)
+	(TRANSITION_IS_GOTO, TRANSITION_IS_ERROR, TRANSITION_DISABLE)
+	(TRANSITION_IS_DISABLED, transitions_to): these.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/print.c (print_shifts, print_gotos): Merge into...
+	(print_transitions): this.
+	(print_transitions, print_errs, print_reductions): Align the
+	lookaheads columns.
+	(print_core, print_transitions, print_errs, print_state,
+	print_grammar): Output empty lines separator before, not after.
+	(state_default_rule_compute): Rename as...
+	(state_default_rule): this.
+	* tests/conflicts.at (Defaulted Conflicted Reduction),
+	(Unresolved SR Conflicts, Resolved SR Conflicts): Adjust.
+	* tests/regression.at (Rule Line Numbers, Web2c Report): Adjust.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	Display items as we display rules.
+
+	* src/gram.h, src/gram.c (rule_lhs_print): New.
+	* src/gram.c (grammar_rules_partial_print): Use it.
+	* src/print.c (print_core): Likewise.
+	* tests/conflicts.at (Defaulted Conflicted Reduction),
+	(Unresolved SR Conflicts): Adjust.
+	(Unresolved SR Conflicts): Adjust and rename as...
+	(Resolved SR Conflicts): this, as was meant.
+	* tests/regression.at (Web2c Report): Adjust.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/print.c (state_default_rule_compute): New, extracted from...
+	(print_reductions): here.
+	Pessimize, but clarify the code.
+	* tests/conflicts.at (Defaulted Conflicted Reduction): New.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (action_row): Let default_rule be always a rule
+	number.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (print_firsts, print_fderives, closure):
+	Use BITSET_EXECUTE.
+	* src/lalr.c (lookaheads_print): Likewise.
+	* src/state.c (state_rule_lookaheads_print): Likewise.
+	* src/print_graph.c (print_core): Likewise.
+	* src/print.c (print_reductions): Likewise.
+	* src/output.c (action_row): Likewise.
+	Use SHIFT_IS_DISABLED, SHIFT_IS_SHIFT and SHIFT_SYMBOL.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/print_graph.c: Use report_flag.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (traverse, digraph, matrix_print, transpose): Move
+	to...
+	* src/relation.h, src/relation.c (traverse, relation_digraph)
+	(relation_print, relation_transpose): New.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h, src/state.c (shifts_to): New.
+	* src/lalr.c (build_relations): Use it.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (rule_number_t, RULE_NUMBER_MAX, int_of_rule_number)
+	(item_number_of_rule_number, rule_number_of_item_number): New.
+	* src/LR0.c, src/closure.c, src/derives.c, src/derives.h,
+	* src/gram.c, src/lalr.c, src/nullable.c, src/output.c, src/print.c,
+	* src/print_graph.c, src/reader.c, src/reduce.c, src/reduce.h:
+	Propagate their use.
+	Much remains to be done, in particular wrt `shorts' from types.h.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.c (symbol_new): Initialize the `printer' member.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (save_reductions): Remove, replaced by...
+	* src/state.h, src/state.c (state_reductions_set): New.
+	(reductions, errs): Rename as...
+	(reductions_t, errs_t): these.
+	Adjust all dependencies.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (state_list_t, state_list_append): New.
+	(first_state, last_state): Now symbol_list_t.
+	(this_state): Remove.
+	(new_itemsets, append_states, save_reductions): Take a state_t as
+	argument.
+	(set_states, generate_states): Adjust.
+	(save_shifts): Remove, replaced by...
+	* src/state.h, src/state.c (state_shifts_set): New.
+	(shifts): Rename as...
+	(shifts_t): this.
+	Adjust all dependencies.
+	* src/state.h (state_t): Remove the `next' member.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/vcg.c (quote): Use slot 2, since we often pass symbol tag
+	escaped in slot 0.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	Use hash.h for the state hash table.
+
+	* src/LR0.c (STATE_HASH_SIZE, state_hash): Remove.
+	(allocate_storage): Use state_hash_new.
+	(free_storage): Use state_hash_free.
+	(new_state, get_state): Adjust.
+	* src/lalr.h, src/lalr.c (states): Move to...
+	* src/states.h (state_t): Remove the `link' member, no longer
+	used.
+	* src/states.h, src/states.c: here.
+	(state_hash_new, state_hash_free, state_hash_lookup)
+	(state_hash_insert, states_free): New.
+	* src/states.c (state_table, state_compare, state_hash): New.
+	* src/output.c (output_actions): Do not free states now, since we
+	still need to know the final_state number in `prepare', called
+	afterwards.  Do it...
+	* src/main.c (main): here: call states_free after `output'.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h, src/state.c (state_new): New, extracted from...
+	* src/LR0.c (new_state): here.
+	* src/state.h (STATE_ALLOC): Move to...
+	* src/state.c: here.
+	* src/LR0.h, src/LR0.c (nstates, final_state): Move to...
+	* src/state.h, src/state.c: here.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (gensym): Rename as...
+	* src/symtab.h, src/symtab.c (dummy_symbol_get): this.
+	(getsym): Rename as...
+	(symbol_get): this.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (state_number_t, STATE_NUMBER_MAX): New.
+	* src/LR0.c, src/LR0.h, src/conflicts.c, src/lalr.c, src/lalr.h,
+	* src/output.c, src/print.c, src/print_graph.c: Propagate.
+	* src/LR0.h, src/LR0.h (final_state): Is a state_t*.
+
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+	Make the test suite pass with warnings checked.
+
+	* tests/actions.at (Printers and Destructors): Improve.
+	Avoid unsigned vs. signed issues.
+	* tests/calc.at: Don't exercise the scanner here, do it...
+	* tests/input.at (Torturing the Scanner): here.
+
+2002-06-28  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* data/glr.c: Correct typo in Emacs-mode directive.  Slightly
+	reorganize first lines parallel to yacc.c.
+
+2002-06-28  Akim Demaille  <akim@epita.fr>
+
+	* data/c.m4 (b4_copyright, b4_sint_type, b4_uint_type, b4_token_define)
+	(b4_token_enum, b4_token_defines): New, factored from...
+	* data/lalr1.cc, data/yacc.c, glr.c: here.
+
+2002-06-28  Akim Demaille  <akim@epita.fr>
+
+	* data/yacc.c (yydestruct, yysymprint): Pacify GCC warnings for
+	unused variables.
+	* src/output.c (merger_output): static.
+
+2002-06-28  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.h: s/grammer_current_rule_merge_set/grammar_.../.
+	* src/conflicts.c (conflicts_total_count): `i' is unsigned, to
+	pacify GCC.
+	* src/output.c (save_row): Initialize all the variables to pacify GCC.
+
+2002-06-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	Accumulated changelog for new GLR parsing features.
+
+	* src/conflicts.c (count_total_conflicts): Change name to
+	conflicts_total_count.
+	* src/conflicts.h: Ditto.
+	* src/output.c (token_actions): Use the new name.
+	(output_conflicts): Change conflp => conflict_list_heads, and
+	confl => conflict_list for better readability.
+	* data/glr.c: Use the new names.
+	* NEWS: Add self to GLR announcement.
+
+	* src/reader.c (free_merger_functions): Cleanup: XFREE->free.
+
+	* doc/bison.texinfo (GLR Parsers): Make corrections suggested by
+	Akim Demaille.
+
+	* data/bison.glr: Change name to glr.c
+	* data/glr.c: Renamed from bison.glr.
+	* data/Makefile.am: Add glr.c
+
+	* src/getargs.c:
+
+	* src/symlist.h:  Add dprec and merger fields to symbol_list_s.
+	* src/symlist.c (symbol_list_new): Initialize dprec and merger fields.
+
+	Originally 2002-06-16  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* data/bison.glr: Be sure to restore the
+	current #line when returning to the skeleton contents after having
+	exposed the input file's #line.
+
+	Originally 2002-06-13  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* data/bison.glr: Bring up to date with changes to bison.simple.
+
+	Originally 2002-06-03  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* data/bison.glr: Correct definitions that use b4_prefix.
+	Various reformatting.
+	(GLRStack): Make yychar (in YYPURE case) and yytokenp as part of stack.
+	(yyreportParseError, yyrecoverParseError, yyprocessOneStack): remove
+	yytokenp argument; now part of stack.
+	(yychar): Define to behave as documented.
+	(yyclearin): Ditto.
+
+	Originally 2002-05-14  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* src/reader.h: Add declaration for free_merger_functions.
+
+	* src/reader.c (merge_functions): New variable.
+	(get_merge_function): New function.
+	(free_merger_functions): New function.
+	(readgram): Check for %prec that is not followed by a symbol.
+	Handle %dprec and %merge declarations.
+	(packgram): Initialize dprec and merger fields in rules array.
+
+	* src/output.c (conflict_tos, conflrow, conflict_table, conflict_list,
+	conflict_list_cnt, conflict_list_free): New variables.
+	(table_grow): Also grow conflict_table.
+	(prepare_rules): Output dprec and merger tables.
+	(conflict_row): New function.
+	(action_row): Output conflict lists for GLR parser.  Don't use
+	default reduction in conflicted states for GLR parser so that there
+	are spaces for the conflict lists.
+	(save_row): Also save conflict information.
+	(token_actions): Allocate conflict list.
+	(merger_output): New function.
+	(pack_vector): Pack conflict table, too.
+	(output_conflicts): New function to output yyconflp and yyconfl.
+	(output_check): Allocate conflict_tos.
+	(output_actions): Output conflict tables, also.
+	(output_skeleton): Output b4_mergers definition.
+	(prepare): Output b4_max_rhs_length definition.
+	Use 'bison.glr' as default skeleton for GLR parsers.
+
+	* src/gram.c (glr_parser): New flag.
+	(grammar_free): Call free_merger_functions.
+
+	* src/conflicts.c (count_rr_conflicts): Augment to optionally count
+	all pairs of conflicting reductions, rather than just all tokens
+	causing conflicts.  Needed to size conflict tables.
+	(conflicts_output): Modify call to count_rr_conflicts for new
+	interface.
+	(conflicts_print): Ditto.
+	(count_total_conflicts): New function.
+
+	* src/reader.h (merger_list): New type.
+	(merge_functions): New variable.
+
+	* src/lex.h (tok_dprec, tok_merge): New token types.
+
+	* src/gram.h (rule_s): Add dprec and merger fields.
+	(glr_parser): New flag.
+
+	* src/conflicts.h (count_total_conflicts): New function.
+
+	* src/options.c (option_table): Add %dprec, %merge, and %glr-parser.
+
+	* doc/bison.texinfo (Generalized LR Parsing): New section.
+	(GLR Parsers): New section.
+	(Language and Grammar): Mention GLR parsing.
+	(Table of Symbols): Add %dprec, %glr-parser, %merge, GLR
+	Correct typo ("tge" -> "the").
+
+	* data/bison.glr: New skeleton for GLR parsing.
+
+	* tests/cxx-gram.at: New tests for GLR parsing.
+
+	* tests/testsuite.at: Include cxx-gram.at.
+
+	* tests/Makefile.am: Add cxx-gram.at.
+
+	* src/parse-gram.y:
+
+	* src/scan-gram.l: Add %dprec, %glr-parser, %merge.
+
+	* src/parse-gram.y: Grammar for %dprec, %merge, %glr-parser.
+
+2002-06-27  Akim Demaille  <akim@epita.fr>
+
+	* src/options.h, src/options.c: Remove.
+	* src/getargs.c (short_options, long_options): New.
+
+2002-06-27  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple, data/bison.c++: Rename as...
+	* data/yacc.c, data/lalr1.cc: these.
+	* doc/bison.texinfo (Environment Variables): Remove.
+
+2002-06-25  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* src/getargs.c (report_argmatch): Initialize strtok().
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (b4_symbol_actions): New, replaces...
+	(b4_symbol_destructor, b4_symbol_printer): these.
+	(yysymprint): Be sure to call YYPRINT only for tokens, and using
+	user token numbers.
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (yydestructor): Rename as...
+	(yydestruct): this.
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h, src/symtab.c (symbol_type_set)
+	(symbol_destructor_set, symbol_precedence_set): The location is
+	the last argument.
+	Adjust all callers.
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y (YYPRINT, yyprint): Don't mess with the parser
+	internals.
+	* src/reader.h, src/reader.c (grammar_current_rule_prec_set):
+	Takes a location.
+	* src/symtab.h, src/symtab.c (symbol_class_set)
+	(symbol_user_token_number_set): Likewise.
+	Adjust all callers.
+	Promote complain_at.
+	* tests/input.at (Type Clashes): Adjust.
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (YYLEX): Fix the declaration when
+	%pure-parser.
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (yysymprint): Don't print the token number,
+	just its name.
+	* tests/actions.at (Destructors): Rename as...
+	(Printers and Destructors): this.
+	Also exercise %printer.
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (YYDSYMPRINT): New.
+	Use it to remove many of the #if YYDEBUG/if (yydebug).
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h, src/symtab.c (symbol_t): printer and
+	printer_location are new members.
+	(symbol_printer_set): New.
+	* src/parse-gram.y (PERCENT_PRINTER): New token.
+	Handle its associated rule.
+	* src/scan-gram.l: Adjust.
+	(handle_destructor_at, handle_destructor_dollar): Rename as...
+	(handle_symbol_code_at, handle_symbol_code_dollar): these.
+	* src/output.c (symbol_printers_output): New.
+	(output_skeleton): Call it.
+	* data/bison.simple (yysymprint): New.  Cannot be named yyprint
+	since there are already many grammar files with a user `yyprint'.
+	Replace the calls to YYPRINT to calls to yysymprint.
+	* tests/calc.at: Adjust.
+	* tests/torture.at (AT_DATA_STACK_TORTURE): Remove YYPRINT: it was
+	taking advantage of parser very internal details (stack size!).
+
+2002-06-20  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l: Complete the scanner with the missing patterns
+	to pacify Flex.
+	Use `quote' and `symbol_tag_get' where appropriate.
+
+2002-06-19  Akim Demaille  <akim@epita.fr>
+
+	* tests/actions.at (Destructors): Augment to test locations.
+	* data/bison.simple (yydestructor): Pass it the current location
+	if locations are enabled.
+	Prototype only when __STDC__ or C++.
+	Change the argument names to move into the yy name space: there is
+	user code here.
+
+2002-06-19  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (b4_pure_if): New.
+	Use it instead of #ifdef YYPURE.
+
+2002-06-19  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (b4_location_if): New.
+	Use it instead of #ifdef YYLSP_NEEDED.
+
+2002-06-19  Akim Demaille  <akim@epita.fr>
+
+	Prepare @$ in %destructor, but currently don't bind it in the
+	skeleton, as %location use is not cleaned up yet.
+
+	* src/scan-gram.l (handle_dollar, handle_destructor_at)
+	(handle_action_at): New.
+	(handle_at, handle_action_dollar, handle_destructor_dollar): Take
+	a braced_code_t and a location as additional arguments.
+	(handle_destructor_dollar): Instead of requiring `b4_eval', just
+	unquote one when outputting `b4_dollar_dollar'.
+	Adjust callers.
+	* data/bison.simple (b4_eval): Remove.
+	(b4_symbol_destructor): Adjust.
+	* tests/input.at (Invalid @n): Adjust.
+
+2002-06-19  Zack Weinberg  <zack@codesourcery.com>
+
+	* doc/bison.texinfo: Document ability to have multiple
+	prologue sections.
+
+2002-06-18  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (compute_base_names): When computing the output file
+	names from the input file name, strip the directory part.
+
+2002-06-18  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple.new: Comment changes.
+	Reported by Andreas Schwab.
+
+2002-06-18  Matt Kraai  <kraai@alumni.cmu.edu>
+
+	* data/bison.simple (yyoverflowlab): #ifndef yyoverflow, so that
+	there are no `label `yyoverflowlab' defined but not used' warnings
+	when yyoverflow is defined.
+
+2002-06-18  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h, src/symtab.c (symbol_t): destructor_location is a
+	new member.
+	(symbol_destructor_set): Adjust.
+	* src/output.c (symbol_destructors_output): Output the destructor
+	locations.
+	Output the symbol name.
+	* data/bison.simple (b4_symbol_destructor): Adjust.
+
+2002-06-18  Cris Bailiff  <c.bailiff@awayweb.com>
+	and Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple.new (yyerrlab1): Be sure to pop and destroy
+	what's left on the stack when the error recovery hits EOF.
+	* tests/actions.at (Destructors): Complete to exercise this case.
+
+2002-06-17  Akim Demaille  <akim@epita.fr>
+
+	* data/m4sugar/m4sugar.m4 (m4_map): Recognize when the list of
+	arguments is really empty, not only equal to `[]'.
+	* src/symtab.h, src/symtab.c (symbol_t): `destructor' is a new
+	member.
+	(symbol_destructor_set): New.
+	* src/output.c (symbol_destructors_output): New.
+	* src/reader.h (brace_code_t, current_braced_code): New.
+	* src/scan-gram.l (BRACED_CODE): Use it to branch on...
+	(handle_dollar): Rename as...
+	(handle_action_dollar): this.
+	(handle_destructor_dollar): New.
+	* src/parse-gram.y (PERCENT_DESTRUCTOR): New.
+	(grammar_declaration): Use it.
+	* data/bison.simple (yystos): Is always defined.
+	(yydestructor): New.
+	* tests/actions.at (Destructors): New.
+	* tests/calc.at (_AT_CHECK_CALC_ERROR): Don't rely on egrep.
+
+2002-06-17  Akim Demaille  <akim@epita.fr>
+
+	* src/symlist.h, src/symlist.c (symbol_list_length): New.
+	* src/scan-gram.l (handle_dollar, handle_at): Compute the
+	rule_length only when needed.
+	* src/output.c (actions_output, token_definitions_output): Output
+	the full M4 block.
+	* src/symtab.c: Don't access directly to the symbol tag, use
+	symbol_tag_get.
+	* src/parse-gram.y: Use symbol_list_free.
+
+2002-06-17  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.h, src/reader.c (symbol_list, symbol_list_new)
+	(symbol_list_prepend, get_type_name): Move to...
+	* src/symlist.h, src/symlist.c (symbol_list_t, symbol_list_new)
+	(symbol_list_prepend, symbol_list_n_type_name_get): here.
+	Adjust all callers.
+	(symbol_list_free): New.
+	* src/scan-gram.l (handle_dollar): Takes a location.
+	* tests/input.at (Invalid $n): Adjust.
+
+2002-06-17  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.h, src/reader.c (symbol_list_new): Export it.
+	(symbol_list_prepend): New.
+	* src/parse-gram.y (%union): `list' is a new member.
+	(symbols.1): New, replaces...
+	(terms_to_prec.1, nterms_to_type.1): these.
+	* src/symtab.h, src/symtab.c (symbol_type_set, symbol_precedence_set)
+	Take a location as additional argument.
+	Adjust all callers.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y: Move %token in the declaration section so that
+	we don't depend upon CVS Bison.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h, src/state.c (state_rule_lookaheads_print): New.
+	* src/print.c (print_core): Use it.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (log_resolution): Accept the rule involved in
+	the sr conflicts instead of the lookahead number that points to
+	that rule.
+	(flush_reduce): Accept the current lookahead vector as argument,
+	instead of the index in LA.
+	(resolve_sr_conflict): Accept the current number of lookahead
+	bitset to consider for the STATE, instead of the index in LA.
+	(set_conflicts): Adjust.
+	* src/lalr.c, src/lalr.h, src/state.h: Comment changes.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (state_t): Replace the `lookaheadsp' member, a
+	short, with `lookaheads' (bitsetv), `lookaheads_rule' (rule_t**).
+	Adjust all dependencies.
+	* src/lalr.c (initialize_lookaheads): Split into...
+	(states_lookaheads_count, states_lookaheads_initialize): these.
+	(lalr): Adjust.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h, src/gram.c (grammar_rules_partial_print): New, eved
+	out of...
+	(grammar_rules_print): here.
+	* src/reduce.c (reduce_output): Use it.
+	* tests/reduce.at (Useless Rules, Reduced Automaton)
+	(Underivable Rules): Adjust.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	Copy BYacc's nice way to report the grammar.
+
+	* src/gram.h, src/gram.c (grammar_rhs_print, grammar_rules_print):
+	New.
+	Don't print the rules' location, it is confusing and useless.
+	(rule_print): Use grammar_rhs_print.
+	* src/print.c (print_grammar): Use grammar_rules_print.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	Complete and rationalize `useless thing' warnings.
+
+	* src/symtab.h, src/symtab.c (symbol_tag_get, symbol_tag_get_n)
+	(symbol_tag_print): New.
+	Use them everywhere in place of accessing directly the tag member.
+	* src/gram.h, src/gram.c (rule_print): New.
+	Use it where a rule used to be printed `by hand'.
+	* src/reduce.c (nonterminals_reduce): Report the use nonterminals.
+	(reduce_grammar_tables): Report the useless rules.
+	(reduce_print): Useless things are a warning, not an error.
+	Report it as such.
+	* tests/reduce.at (Useless Nonterminals, Useless Rules):
+	(Reduced Automaton, Underivable Rules): Adjust.
+	* tests/regression.at (Web2c Report, Web2c Report): Adjust.
+	* tests/conflicts.at (Unresolved SR Conflicts)
+	(Solved SR Conflicts): Adjust.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	Let symbols have a location.
+
+	* src/symtab.h, src/symtab.c (symbol_t): Location is a new member.
+	(getsym): Adjust.
+	Adjust all callers.
+	* src/complain.h, src/complain.c (complain_at, fatal_at, warn_at):
+	Use location_t, not int.
+	* src/symtab.c (symbol_check_defined): Take advantage of the
+	location.
+	* tests/regression.at (Invalid inputs): Adjust.
+
+2002-06-15  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y (YYLLOC_DEFAULT, current_lhs_location): New.
+	(input): Don't try to initialize yylloc here, do it in the
+	scanner.
+	* src/scan-gram.l (YY_USER_INIT): Initialize yylloc.
+	* src/gram.h (rule_t): Change line and action_line into location
+	and action_location, of location_t type.
+	Adjust all dependencies.
+	* src/location.h, src/location.c (empty_location): New.
+	* src/reader.h, src/reader.c (grammar_start_symbol_set)
+	(grammar_symbol_append, grammar_rule_begin, grammar_rule_end)
+	(grammar_current_rule_symbol_append)
+	(grammar_current_rule_action_append): Expect a location as argument.
+	* src/reader.c (grammar_midrule_action): Adjust to attach an
+	action's location as dummy symbol location.
+	* src/symtab.h, src/symtab.c (startsymbol_location): New.
+	* tests/regression.at (Web2c Report, Rule Line Numbers): Adjust
+	the line numbers.
+
+2002-06-14  Akim Demaille  <akim@epita.fr>
+
+	Grammar declarations may be found in the grammar section.
+
+	* src/parse-gram.y (rules_or_grammar_declaration): New.
+	(declarations): Each declaration may end with a semicolon, not
+	just...
+	(grammar_declaration): `"%union"'.
+	(grammar): Branch to rules_or_grammar_declaration.
+
+2002-06-14  Akim Demaille  <akim@epita.fr>
+
+	* src/main.c (main): Invoke scanner_free.
+
+2002-06-14  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (m4_invoke): Extracted from...
+	(output_skeleton): here.
+	Free tempfile.
+
+2002-06-14  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-gram.y (directives, directive, gram)
+	(grammar_directives, precedence_directives, precedence_directive):
+	Rename as...
+	(declarations, declaration, grammar, grammar_declaration)
+	(precedence_declaration, precedence_declarator): these.
+	(symbol_declaration): New.
+
+2002-06-14  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (action_obstack): Remove, unused.
+	(output_obstack): Remove it, and all its dependencies, as it is no
+	longer needed.
+	* src/reader.c (epilogue_set): Build the epilogue in the
+	muscle_obstack.
+	* src/output.h, src/output.c (muscle_obstack): Move to...
+	* src/muscle_tab.h, src/muscle_tab.h: here.
+	(muscle_init): Initialize muscle_obstack.
+	(muscle_free): New.
+	* src/main.c (main): Call it.
+
+2002-06-14  Akim Demaille  <akim@epita.fr>
+
+	* src/location.h: New, extracted from...
+	* src/reader.h: here.
+	* src/Makefile.am (noinst_HEADERS): Merge into
+	(bison_SOURCES): this.
+	Add location.h.
+	* src/parse-gram.y: Use location_t instead of Bison's.
+	* src/reader.h, src/reader.c (prologue_augment, epilogue_set):
+	Use location_t instead of ints.
+
+2002-06-14  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple, data/bison.c++: Be sure to restore the
+	current #line when returning to the skeleton contents after having
+	exposed the input file's #line.
+
+2002-06-12  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l (SC_BRACED_CODE): Don't use `<.*>', it is too
+	eager.
+	* tests/actions.at (Exotic Dollars): New.
+
+2002-06-12  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l (SC_PROLOGUE): Don't eat characters amongst
+	['"/] too eagerly.
+	* tests/input.at (Torturing the Scanner): New.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l (YY_OBS_INIT): Remove, replace with...
+	[SC_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,SC_PROLOGUE]
+	[SC_EPILOGUE]: Output the quadrigraphs only when not in a comment.
+	* src/reader.h, src/scan-gram.l (scanner_initialize): this.
+	* src/reader.c (reader): Use it.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l (YY_OBS_FINISH): Don't set yylval.
+	Adjust all callers.
+	(scanner_last_string_free): New.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	* src/scan-gram.l (YY_INIT, YY_GROW, YY_FINISH): Rename as...
+	(YY_OBS_INIT, YY_OBS_GROW, YY_OBS_FINISH): these.
+	(last_string, YY_OBS_FREE): New.
+	Use them when returning an ID.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	Have Bison grammars parsed by a Bison grammar.
+
+	* src/reader.c, src/reader.h (prologue_augment): New.
+	* src/reader.c (copy_definition): Remove.
+
+	* src/reader.h, src/reader.c (gram_start_symbol_set, prologue_augment)
+	(grammar_symbol_append, grammar_rule_begin, grammar_midrule_action)
+	(grammar_current_rule_prec_set, grammar_current_rule_check)
+	(grammar_current_rule_symbol_append)
+	(grammar_current_rule_action_append): Export.
+	* src/parse-gram.y (symbol_list_new, symbol_list_symbol_append_
+	(symbol_list_action_append): Remove.
+	Hook the routines from reader.
+	* src/scan-gram.l: In INITIAL, characters and strings are tokens.
+	* src/system.h (ATTRIBUTE_NORETURN, ATTRIBUTE_UNUSED): Now.
+
+	* src/reader.c (read_declarations): Remove, unused.
+
+	* src/parse-gram.y: Handle the epilogue.
+	* src/reader.h, src/reader.c (gram_start_symbol_set): Rename as...
+	(grammar_start_symbol_set): this.
+	* src/scan-gram.l: Be sure to ``use'' yycontrol to keep GCC quiet.
+	* src/reader.c (readgram): Remove, unused.
+	(reader): Adjust to insert eoftoken and axiom where appropriate.
+
+	* src/reader.c (copy_dollar): Replace with...
+	* src/scan-gram.h (handle_dollar): this.
+	* src/parse-gram.y: Remove `%thong'.
+
+	* src/reader.c (copy_at): Replace with...
+	* src/scan-gram.h (handle_at): this.
+
+	* src/complain.h, src/complain.c (warn_at, complain_at, fatal_at):
+	New.
+
+	* src/scan-gram.l (YY_LINES): Keep lineno synchronized for the
+	time being.
+
+	* src/reader.h, src/reader.c (grammar_rule_end): New.
+
+	* src/parse.y (current_type, current_class): New.
+	Implement `%nterm', `%token' support.
+	Merge `%term' into `%token'.
+	(string_as_id): New.
+	* src/symtab.h, src/symtab.c (symbol_make_alias): Don't pass the
+	type name.
+
+	* src/parse-gram.y: Be sure to handle properly the beginning of
+	rules.
+
+	* src/parse-gram.y: Handle %type.
+	* src/reader.c (grammar_rule_end): Call grammar_current_rule_check.
+
+	* src/parse-gram.y: More directives support.
+	* src/options.c: No longer handle source directives.
+
+	* src/parse-gram.y: Fix %output.
+
+	* src/parse-gram.y: Handle %union.
+	Use the prologue locations.
+	* src/reader.c (parse_union_decl): Remove.
+
+	* src/reader.h, src/reader.c (epilogue_set): New.
+	* src/parse-gram.y: Use it.
+
+	* data/bison.simple, data/bison.c++: b4_stype is now either not
+	defined, then default to int, or to the contents of %union,
+	without `union' itself.
+	Adjust.
+	* src/muscle_tab.c (muscle_init): Don't predefine `stype'.
+
+	* src/output.c (actions_output): Don't output braces, as they are
+	already handled by the scanner.
+
+	* src/scan-gram.l (SC_CHARACTER): Set the user_token_number of
+	characters to themselves.
+
+	* tests/reduce.at (Reduced Automaton): End the grammars with %% so
+	that the epilogue has a proper #line.
+
+	* src/parse-gram.y: Handle precedence/associativity.
+
+	* src/symtab.c (symbol_precedence_set): Requires the symbol to be
+	a terminal.
+	* src/scan-gram.l (SC_BRACED_CODE): Catch strings and characters.
+	* tests/calc.at: Do not use `%token "foo"' as it makes not sense
+	at all to define terminals that cannot be emitted.
+
+	* src/scan-gram.l: Escape M4 characters.
+
+	* src/scan-gram.l: Working properly with escapes in user
+	strings/characters.
+
+	* tests/torture.at (AT_DATA_TRIANGULAR_GRAMMAR)
+	(AT_DATA_HORIZONTAL_GRAMMAR): Respect the `%token ID NUM STRING'
+	grammar.
+	Use more modest sizes, as for the time being the parser does not
+	release memory, and therefore the process swallows a huge amount
+	of memory.
+
+	* tests/torture.at (AT_DATA_LOOKAHEADS_GRAMMAR): Adjust to the
+	stricter %token grammar.
+
+	* src/symtab.h (associativity): Add `undef_assoc'.
+	(symbol_precedence_set): Do nothing when passed an undef_assoc.
+	* src/symtab.c (symbol_check_alias_consistence): Adjust.
+
+	* tests/regression.at (Invalid %directive): Remove, as it is now
+	meaningless.
+	(Invalid inputs): Adjust to the new error messages.
+	(Token definitions): The new grammar doesn't allow too many
+	eccentricities.
+
+	* src/lex.h, src/lex.c: Remove.
+	* src/reader.c (lastprec, skip_to_char, read_signed_integer)
+	(copy_character, copy_string2, copy_string, copy_identifier)
+	(copy_comment, parse_token_decl, parse_type_decl, parse_assoc_decl)
+	(parse_muscle_decl, parse_dquoted_param, parse_skel_decl)
+	(parse_action): Remove.
+	* po/POTFILES.in: Adjust.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (parse_action): Don't store directly into the
+	rule's action member: return the action as a string.
+	Don't require `rule_length' as an argument: compute it.
+	(grammar_current_rule_symbol_append)
+	(grammar_current_rule_action_append): New, eved out from
+	(readgram): here.
+	Remove `action_flag', `rulelength', unused now.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (grammar_current_rule_prec_set).
+	(grammar_current_rule_check): New, eved out from...
+	(readgram): here.
+	Remove `xaction', `first_rhs': useless.
+	* tests/input.at (Type clashes): New.
+	* tests/existing.at (GNU Cim Grammar): Adjust.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (grammar_midrule_action): New, Eved out from
+	(readgram): here.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (grammar_rule_begin, previous_rule, current_rule):
+	New.
+	(readgram): Use them as replacement of inlined code, crule and
+	crule1.
+
+2002-06-11  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (grammar_end, grammar_symbol_append): New.
+	(readgram): Use them.
+	Make the use of `p' as local as possible.
+
+2002-06-10  Akim Demaille  <akim@epita.fr>
+
+	GCJ's parser requires the tokens to be defined before the prologue.
+
+	* data/bison.simple: Output the token definition before the user's
+	prologue.
+	* tests/regression.at (Braces parsing, Duplicate string)
+	(Mixing %token styles): Check the output from bison.
+	(Early token definitions): New.
+
+2002-06-10  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.c (symbol_user_token_number_set): Don't complain when
+	assigning twice the same user number to a token, so that we can
+	use it in...
+	* src/lex.c (lex): here.
+	Also use `symbol_class_set' instead of hand written code.
+	* src/reader.c (parse_assoc_decl): Likewise.
+
+2002-06-10  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.c, src/symtab.c (symbol_class_set)
+	(symbol_user_token_number_set): New.
+	* src/reader.c (parse_token_decl): Use them.
+	Use a switch instead of ifs.
+	Use a single argument.
+
+2002-06-10  Akim Demaille  <akim@epita.fr>
+
+	Remove `%thong' support as it is undocumented, unused, duplicates
+	`%token's job, and creates useless e-mail traffic with people who
+	want to know what it is, why it is undocumented, unused, and
+	duplicates `%token's job.
+
+	* src/reader.c (parse_thong_decl): Remove.
+	* src/options.c (option_table): Remove "thong".
+	* src/lex.h (tok_thong): Remove.
+
+2002-06-10  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.c, src/symtab.c (symbol_type_set)
+	(symbol_precedence_set): New.
+	* src/reader.c (parse_type_decl, parse_assoc_decl): Use them.
+	(value_components_used): Remove, unused.
+
+2002-06-09  Akim Demaille  <akim@epita.fr>
+
+	Move symbols handling code out of the reader.
+
+	* src/reader.h, src/reader.c (errtoken, undeftoken, eoftoken)
+	(axiom): Move to...
+	* src/symtab.h, src/symtab.c: here.
+
+	* src/gram.c (start_symbol): Remove: use startsymbol->number.
+	* src/reader.c (startval): Rename as...
+	* src/symtab.h, src/symtab.c (startsymbol): this.
+	* src/reader.c: Adjust.
+
+	* src/reader.c (symbol_check_defined, symbol_make_alias)
+	(symbol_check_alias_consistence, symbol_pack, symbol_translation)
+	(token_translations_init)
+	Move to...
+	* src/symtab.c: here.
+	* src/reader.c (packsymbols): Move to...
+	* src/symtab.h, src/symtab.c (symbols_pack): here.
+	* src/symtab.h, src/symtab.c (symbol_make_alias): Takes SYMVAL as
+	argument.
+
+2002-06-03  Akim Demaille  <akim@epita.fr>
+
+	* src/muscle_tab.c (muscle_insert, muscle_find): Declarations,
+	then statements.
+
+2002-06-03  Akim Demaille  <akim@epita.fr>
+
+	* src/muscle_tab.c (muscle_find, muscle_insert): Don't initialize
+	structs with non literals.
+	* src/scan-skel.l: never-interactive.
+	* src/conflicts.c (enum conflict_resolution_e): No trailing
+	comma.
+	* src/getargs.c (usage): Split long literal strings.
+	Reported by Hans Aberg.
+
+2002-05-28  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.c++: Use C++ ostreams.
+	(cdebug_): New member.
+
+2002-05-28  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_skeleton): Be sure to allocate enough room
+	for `/' _and_ for `\0' in full_skeleton.
+
+2002-05-28  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.c++: Catch up with bison.simple:
+	2002-05-24  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+	and Paul Eggert  <eggert@twinsun.com>: `error' handing.
+	2002-05-26  Akim Demaille  <akim@epita.fr>: stos_, token_number_,
+	and popping traces.
+
+2002-05-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* src/output.c (output_skeleton): Put an explicit path in front of
+	the skeleton file name, rather than relying on the -I directory,
+	to partially alleviate effects of having a skeleton file lying around
+	in the current directory.
+
+2002-05-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* src/conflicts.c (log_resolution): Correct typo:
+	obstack_printf should be obstack_fgrow1.
+
+2002-05-26  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (state_t): `solved_conflicts' is a new member.
+	* src/LR0.c (new_state): Set it to 0.
+	* src/conflicts.h, src/conflicts.c (print_conflicts)
+	(free_conflicts, solve_conflicts): Rename as...
+	(conflicts_print, conflicts_free, conflicts_solve): these.
+	Adjust callers.
+	* src/conflicts.c (enum conflict_resolution_e)
+	(solved_conflicts_obstack): New, used by...
+	(log_resolution): this.
+	Adjust to attach the conflict resolution to each state.
+	Complete the description with the precedence/associativity
+	information.
+	(resolve_sr_conflict): Adjust.
+	* src/print.c (print_state): Output its solved_conflicts.
+	* tests/conflicts.at (Unresolved SR Conflicts)
+	(Solved SR Conflicts): Exercise --report=all.
+
+2002-05-26  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c, src/derives.c, src/gram.c, src/gram.h, src/lalr.c,
+	* src/nullable.c, src/output.c, src/print.c, src/print_graph.c,
+	* src/reader.c, src/reduce.c, src/state.h, src/symtab.h
+	(token_number_t, item_number_as_token_number)
+	(token_number_as_item_number, muscle_insert_token_number_table):
+	Rename as...
+	(symbol_number_t, item_number_as_symbol_number)
+	(symbol_number_as_item_number, muscle_insert_symbol_number_table):
+	these, since it is more appropriate.
+
+2002-05-26  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at (AT_CHECK_CALC): Adjust: there are now additional
+	`Error:' lines.
+	* data/bison.simple (yystos) [YYDEBUG]: New.
+	(yyparse) [YYDEBUG]: Display the symbols which are popped during
+	error recovery.
+	* tests/regression.at (Web2c Actions): Adjust: yystos is output now.
+
+2002-05-25  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Debugging): Split into...
+	(Tracing): this new section, its former contents, and...
+	(Understanding): this new section.
+	* src/getargs.h, src/getargs.c (verbose_flag): Remove, replaced
+	by...
+	(report_flag): this.
+	Adjust all dependencies.
+	(report_args, report_types, report_argmatch): New.
+	(usage, getargs): Report/support -r, --report.
+	* src/options.h
+	(struct option_table_struct): Rename as..,
+	(struct option_table_s): this.
+	Rename the `set_flag' member to `flag' to match with getopt_long's
+	struct.
+	* src/options.c (option_table): Split verbose into an entry for
+	%verbose, and another for --verbose.
+	Support --report/-r, so remove -r from the obsolete --raw.
+	* src/print.c: Attach full item sets and lookaheads reports to
+	report_flag instead of trace_flag.
+	* lib/argmatch.h, lib/argmatch.c: New, from Fileutils 4.1.
+
+2002-05-24  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+	and Paul Eggert  <eggert@twinsun.com>
+
+	* data/bison.simple (yyparse): Correct error handling to conform to
+	POSIX and yacc.  Specifically, after syntax error is discovered,
+	do not reduce further before shifting the error token.
+	Clean up the code a bit by removing the labels yyerrdefault,
+	yyerrhandle, yyerrpop.
+	* NEWS: Document the above.
+
+2002-05-20  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* data/bison.simple (yyr1): Don't use yy_token_number_type as element
+	type; it isn't always big enough, since it doesn't necessarily
+	include non-terminals.
+	(yytranslate): Expand definition of yy_token_number_type, so that
+	the latter can be removed.
+	(yy_token_number_type): Remove, only one use.
+	* data/bison.c++ (r1_): Parallel change to yyr1 in bison.simple---
+	don't use TokenNumberType as element type.
+
+	* tests/regression.at: Modify expected output to agree with change
+	to yyr1 and yytranslate.
+
+2002-05-13  Florian Krohm  <florian@edamail.fishkill.ibm.com>
+
+	* src/reader.c (parse_action): Use copy_character instead of
+	obstack_1grow.
+
+2002-05-13  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Token definitions): Prototype yylex and
+	yyerror.
+
+2002-05-12  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+	* src/scan-skel.l: Correct off-by-one error in handling of __oline__.
+	* data/bison.simple (b4_sint_type, b4_uint_type): Correct to reflect
+	32-bit arithmetic.
+	* data/bison.c++ (b4_sint_type, b4_uint_type): Ditto.
+
+2002-05-07  Akim Demaille  <akim@epita.fr>
+
+	* tests/synclines.at: Be sure to prototype yylex and yyerror to
+	avoid GCC warnings.
+
+2002-05-07  Akim Demaille  <akim@epita.fr>
+
+	Kill GCC warnings.
+
+	* src/reduce.c (nonterminals_reduce): Don't loop over RITEM: loop
+	over the RHS of each rule.
+	* src/gram.h, src/gram.c (nritems): Is `unsigned int', not int.
+	* src/state.h (state_t): Member `nitems' is unsigned short.
+	* src/LR0.c (get_state): Adjust.
+	* src/reader.c (packgram): Likewise.
+	* src/output.c (GENERATE_MUSCLE_INSERT_TABLE): `max' is of type
+	`Type'.
+	(muscle_insert_int_table): Remove, unused.
+	(prepare_rules): Remove `max'.
+
+2002-05-06  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (print_firsts): Display of the symbol tags.
+	(bitmatrix_print): Move to...
+	* lib/bitsetv-print.h, lib/bitsetv-print.c (bitsetv_matrix_dump):
+	here.
+	* tests/sets.at (Nullable, Broken Closure, Firsts): Adjust.
+
+2002-05-06  Akim Demaille  <akim@epita.fr>
+
+	* src/muscle_tab.c (muscle_m4_output): Must return TRUE for
+	hash_do_for_each.
+
+2002-05-06  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (new_state, get_state): Instead of using the global
+	`kernel_size' and `kernel_base', have two new arguments:
+	`core_size' and `core'.
+	Adjust callers.
+
+2002-05-06  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (packgram): No longer end `ritem' with a 0
+	sentinel: it is not used.
+
+2002-05-05  Akim Demaille  <akim@epita.fr>
+
+	New experimental feature: display the lookaheads in the report and
+	graph.
+
+	* src/print (print_core): When --trace-flag, display the rules
+	lookaheads.
+	* src/print_graph.c (print_core): Likewise.
+	Swap the arguments.
+	Adjust caller.
+
+2002-05-05  Akim Demaille  <akim@epita.fr>
+
+	* tests/torture.at (Many lookaheads): New test.
+
+2002-05-05  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (GENERATE_OUTPUT_TABLE): Replace with...
+	(GENERATE_MUSCLE_INSERT_TABLE): this.
+	(output_int_table, output_unsigned_int_table, output_short_table)
+	(output_token_number_table, output_item_number_table): Replace with...
+	(muscle_insert_int_table, muscle_insert_unsigned_int_table)
+	(muscle_insert_short_table, muscle_insert_token_number_table)
+	(muscle_insert_item_number_table): these.
+	Adjust all callers.
+	(prepare_tokens): Don't free `translations', since...
+	* src/reader.h, src/reader.c (grammar_free): do it.
+	Move to...
+	* src/gram.h, src/gram.c (grammar_free): here.
+	* data/bison.simple, data/bison.c++: b4_token_number_max is now
+	b4_translate_max.
+
+2002-05-05  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_unsigned_int_table): New.
+	(prepare_rules): `i' is unsigned.
+	`prhs', `rline', `r2' are unsigned int.
+	Rename muscle `rhs_number_max' as `rhs_max'.
+	Output muscles `prhs_max', `rline_max', and `r2_max'.
+	Free rline and r1.
+	* data/bison.simple, data/bison.c++: Adjust to use these muscles
+	to compute types instead of constant types.
+	* tests/regression.at (Web2c Actions): Adjust.
+
+2002-05-04  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h (SALIAS, SUNDEF): Rename as...
+	(USER_NUMBER_ALIAS, USER_NUMBER_UNDEFINED): these.
+	Adjust dependencies.
+	* src/output.c (token_definitions_output): Be sure not to output a
+	`#define 'a'' when fed with `%token 'a' "a"'.
+	* tests/regression.at (Token definitions): New.
+
+2002-05-03  Paul Eggert  <eggert@twinsun.com>
+
+	* data/bison.simple (b4_token_defines): Also define YYTOKENTYPE
+	for K&R C.
+
+2002-05-03  gettextize  <bug-gnu-gettext@gnu.org>
+
+	* Makefile.am (SUBDIRS): Remove intl.
+	(EXTRA_DIST): Add config/config.rpath.
+
+2002-05-03  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (m4_if): Don't output empty enums.
+	And actually, output valid enum definitions :(.
+
+2002-05-03  Akim Demaille  <akim@epita.fr>
+
+	* configure.bat: Remove, completely obsolete.
+	* Makefile.am (EXTRA_DIST): Adjust.
+	Don't distribute config.rpath...
+	* config/Makefile.am (EXTRA_DIST): Do it.
+
+2002-05-03  Akim Demaille  <akim@epita.fr>
+
+	* configure.in (GETTEXT_VERSION): New.
+	Suggested by Bruno Haible for the forthcoming Gettext 0.10.3.
+
+2002-05-03  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (b4_token_enum): New.
+	(b4_token_defines): Use it to output tokens both as #define and
+	enums.
+	Suggested by Paul Eggert.
+	* src/output.c (token_definitions_output): Don't output spurious
+	white spaces.
+
+2002-05-03  Akim Demaille  <akim@epita.fr>
+
+	* data/m4sugar/m4sugar.m4: Update from CVS Autoconf.
+
+2002-05-02  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Adapt expansion of $s and @s to the C++ parser.
+	Update the stack class, give a try to deque as the default container.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (yyparse): Do not implement @$ = @1.
+	(YYLLOC_DEFAULT): Adjust to do it.
+	* doc/bison.texinfo (Location Default Action): Fix.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (parse_braces): Merge into...
+	(parse_action): this.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+	* configure.in (ALL_LINGUAS): Remove.
+	* po/LINGUAS, hr.po: New.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+	Remove the so called hairy (semantic) parsers.
+
+	* src/system.h (EXT_GUARD_C, EXT_STYPE_H): Remove.
+	* src/gram.h, src/gram.c (semantic_parser): Remove.
+	(rule_t): Remove the guard and guard_line members.
+	* src/lex.h (token_t): remove tok_guard.
+	* src/options.c (option_table): Remove %guard and %semantic_parser
+	support.
+	* src/output.c, src/output.h (guards_output): Remove.
+	(prepare): Adjust.
+	(token_definitions_output): Don't output the `T'
+	tokens (???).
+	(output_skeleton): Don't output the guards.
+	* src/files.c, src/files.c (attrsfile): Remove.
+	* src/reader.c (symbol_list): Remove the guard and guard_line
+	members.
+	Adjust dependencies.
+	(parse_guard): Remove.
+	* data/bison.hairy: Remove.
+	* doc/bison.texinfo (Environment Variables): Remove occurrences of
+	BISON_HAIRY.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_at, copy_dollarm parse_braces, parse_action)
+	(parse_guard): Rename the formal argument `stack_offset' as
+	`rule_length', which is more readable.
+	Adjust callers.
+	(copy_at, copy_dollar): Instead of outputting the hard coded
+	values of $$, $n and so forth, output invocation to b4_lhs_value,
+	b4_lhs_location, b4_rhs_value, and b4_rhs_location.
+	Note: this patch partially drops `semantic-parser' support: it
+	always does `rule_length - n', where semantic parsers ought to
+	always use `-n'.
+	* data/bison.simple, data/bison.c++ (b4_lhs_value)
+	(b4_lhs_location, b4_rhs_value, and b4_rhs_location: New.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+	* configure.in (AC_INIT): Bump to 1.49b.
+	(AM_INIT_AUTOMAKE): Short invocation.
+
+2002-05-02  Akim Demaille  <akim@epita.fr>
+
+	Version 1.49a.
+
+2002-05-01  Akim Demaille  <akim@epita.fr>
+
+	* src/skeleton.h: Remove.
+
+2002-05-01  Akim Demaille  <akim@epita.fr>
+
+	* src/skeleton.h: Fix the #endif.
+	Reported by Magnus Fromreide.
+
+2002-04-26  Paul Eggert  <eggert@twinsun.com>
+
+	* data/bison.simple (YYSTYPE_IS_TRIVIAL, YYLTYPE_IS_TRIVIAL):
+	Define if we define YYSTYPE and YYLTYPE, respectively.
+	(YYCOPY): Fix [] quoting problem in the non-GCC case.
+
+2002-04-25  Robert Anisko  <robert@lrde.epita.fr>
+
+	* src/scan-skel.l: Postprocess quadrigraphs.
+
+	* src/reader.c (copy_character): New function, used to output
+	single characters while replacing `[' and `]' with quadrigraphs, to
+	avoid troubles with M4 quotes.
+	(copy_comment): Output characters with copy_character.
+	(read_additionnal_code): Likewise.
+	(copy_string2): Likewise.
+	(copy_definition): Likewise.
+
+	* tests/calc.at: Exercise M4 quoting.
+
+2002-04-25  Akim Demaille  <akim@epita.fr>
+
+	* tests/sets.at (AT_EXTRACT_SETS): Sed portability issue: no space
+	between `!' and the command.
+	Reported by Paul Eggert.
+
+2002-04-24  Robert Anisko  <robert@lrde.epita.fr>
+
+	* tests/calc.at: Exercise prologue splitting.
+
+	* data/bison.simple, data/bison.c++: Use `b4_pre_prologue' and
+	`b4_post_prologue' instead of `b4_prologue'.
+
+	* src/output.c (prepare): Add the `pre_prologue' and `post_prologue'
+	muscles.
+	(output): Free pre_prologue_obstack and post_prologue_obstack.
+	* src/files.h, src/files.c (attrs_obstack): Remove.
+	(pre_prologue_obstack, post_prologue_obstack): New.
+	* src/reader.c (copy_definition): Add a parameter to specify the
+	obstack to fill, instead of using attrs_obstack unconditionally.
+	(read_declarations): Pass pre_prologue_obstack to copy_definition if
+	`%union' has not yet been seen, pass post_prologue_obstack otherwise.
+
+2002-04-23  Paul Eggert  <eggert@twinsun.com>
+
+	* data/bison.simple: Remove unnecessary commentary and white
+	space differences from 1_29-branch.
+	Depend on YYERROR_VERBOSE, not defined (YYERROR_VERBOSE).
+
+	(union yyalloc, YYSTACK_GAP_MAX, YYSTACK_BYTES, YYCOPY,
+	YYSTACK_RELOCATE): Do not define if yyoverflow is defined, or
+	if this is a C++ parser and YYSTYPE or YYLTYPE has nontrivial
+	constructors or destructors.
+
+	(yyparse) [! defined YYSTACK_RELOCATE]: Do not relocate the stack.
+
+2002-04-23  Akim Demaille  <akim@epita.fr>
+
+	* tests/sets.at (AT_EXTRACT_SETS): Don't use 8 char long sed labels.
+	* tests/synclines.at (AT_TEST_SYNCLINE): Be robust to GCC's
+	location with columns.
+	* tests/conflicts.at (%nonassoc and eof): Don't use `error.h'.
+	All reported by Paul Eggert.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (dump_grammar): Move to...
+	* src/gram.h, src/gram.c (grammar_dump): here.
+	Be sure to separate long item numbers.
+	Don't read the members of a rule's prec if its nil.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (table_size, table_grow): New.
+	(MAXTABLE): Remove, replace uses with table_size.
+	(pack_vector): Instead of dying when the table is too big, grow it.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.simple (yyr1): Its type is that of a token number.
+	* data/bison.c++ (r1_): Likewise.
+	* tests/regression.at (Web2c Actions): Adjust.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (token_translations_init): 256 is now the default
+	value for the error token, i.e., it will be assigned another
+	number if the user assigned 256 to one of her tokens.
+	(reader): Don't force 256 to error.
+	* doc/bison.texinfo (Symbols): Adjust.
+	* tests/torture.at (AT_DATA_HORIZONTAL_GRAMMAR)
+	(AT_DATA_TRIANGULAR_GRAMMAR): Number the tokens as 1, 2, 3
+	etc. instead of 10, 20, 30 (which was used to `jump' over error
+	(256) and undefined (2)).
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+	Propagate more token_number_t.
+
+	* src/gram.h (token_number_as_item_number)
+	(item_number_as_token_number): New.
+	* src/output.c (GENERATE_OUTPUT_TABLE): New.
+	Use it to create output_item_number_table and
+	output_token_number_table.
+	* src/LR0.c, src/derives.c, src/gram.c, src/gram.h, src/lalr.c,
+	* src/lex.c, src/nullable.c, src/output.c, src/print.c,
+	* src/print_graph.c, src/reader.c, src/reduce.c, src/state.h,
+	* src/symtab.c, src/symtab.h: Use token_number_t instead of shorts.
+
+2002-04-22  Akim Demaille  <akim@epita.fr>
+
+	* src/output.h, src/output.c (get_lines_number): Remove.
+
+2002-04-19  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Actions): Make clear that `|' is not the same
+	as Lex/Flex'.
+	(Debugging): More details about enabling the debugging features.
+	(Table of Symbols): Describe $$, $n, @$, and @n.
+	Suggested by Tim Josling.
+
+2002-04-19  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Remove the uses of the obsolete @refill.
+
+2002-04-10  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: Rely on HAVE_LIMITS_H.
+	Suggested by Paul Eggert.
+
+2002-04-09  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at (_AT_CHECK_CALC_ERROR): Receive as argument the
+	full stderr, and strip it according to the bison options, instead
+	of composing the error message from different bits.
+	This makes it easier to check for several error messages.
+	Adjust all the invocations.
+	Add an invocation exercising the error token.
+	Add an invocation demonstrating a stupid error message.
+	(_AT_DATA_CALC_Y): Follow the GCS: initial column is 1, not 0.
+	Adjust the tests.
+	Error message are for stderr, not stdout.
+
+2002-04-09  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h, src/gram.c (error_token_number): Remove, use
+	errtoken->number.
+	* src/reader.c (reader): Don't specify the user token number (2)
+	for $undefined, as it uselessly prevents using it.
+	* src/gram.h (token_number_t): Move to...
+	* src/symtab.h: here.
+	(state_t.number): Is a token_number_t.
+	* src/print.c, src/reader.c: Use undeftoken->number instead of
+	hard coded 2.
+	(Even though this 2 is not the same as above: the number of the
+	undeftoken remains being 2, it is its user token number which
+	might not be 2).
+	* src/output.c (prepare_tokens): Rename the `maxtok' muscle with
+	`user_token_number_max'.
+	Output `undef_token_number'.
+	* data/bison.simple, data/bison.c++: Use them.
+	Be sure to map invalid yylex return values to
+	`undef_token_number'.  This saves us from gratuitous SEGV.
+
+	* tests/conflicts.at (Solved SR Conflicts)
+	(Unresolved SR Conflicts): Adjust.
+	* tests/regression.at (Web2c Actions): Adjust.
+
+2002-04-08  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.c++: s/b4_item_number_max/b4_rhs_number_max/.
+	Adding #line.
+	Remove the duplicate `typedefs'.
+	(RhsNumberType): Fix the declaration and various other typos.
+	Use __ofile__.
+	* data/bison.simple: Use __ofile__.
+	* src/scan-skel.l: Handle __ofile__.
+
+2002-04-08  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (item_number_t): New, the type of item numbers in
+	RITEM.  Note that it must be able to code symbol numbers as
+	positive number, and the negation of rule numbers as negative
+	numbers.
+	Adjust all dependencies (pretty many).
+	* src/reduce.c (rule): Remove this `short *' pointer: use
+	item_number_t.
+	* src/system.h (MINSHORT, MAXSHORT): Remove.
+	Include `limits.h'.
+	Adjust dependencies to using SHRT_MAX and SHRT_MIN.
+	(shortcpy): Remove.
+	(MAXTABLE): Move to...
+	* src/output.c (MAXTABLE): here.
+	(prepare_rules): Use output_int_table to output rhs.
+	* data/bison.simple, data/bison.c++: Adjust.
+	* tests/torture.at (Big triangle): Move the limit from 254 to
+	500.
+	* tests/regression.at (Web2c Actions): Ajust.
+
+	Trying with bigger grammars shows various phenomena: at 3000 (28Mb
+	of grammar file) bison is killed by my system, at 2000 (12Mb) bison
+	passes, but produces negative #line number, once fixed, GCC is
+	killed while compiling 14Mb, at 1500 (6.7 Mb of grammar, 8.2Mb of
+	C), it passes.
+	* src/state.h (state_h): Code input lines on ints, not shorts.
+
+2002-04-08  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (reduce_grammar): First reduce the nonterminals,
+	and then the grammar.
+
+2002-04-08  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: No longer using strndup.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/muscle_tab.h (MUSCLE_INSERT_LONG_INT): New.
+	* src/output.c (output_table_data): Return the longest number.
+	(prepare_tokens): Output `token_number_max').
+	* data/bison.simple, data/bison.c++ (b4_sint_type, b4_uint_type):
+	New.
+	Use them to define yy_token_number_type/TokenNumberType.
+	Use this type for yytranslate.
+	* tests/torture.at (Big triangle): Push the limit from 124 to
+	253.
+	* tests/regression.at (Web2c Actions): Adjust.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* tests/torture.at (Big triangle): New.
+	(GNU AWK Grammar, GNU Cim Grammar): Move to...
+	* tests/existing.at: here.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h, src/gram.c (nitems): Remove, it is an alias of
+	nritems.
+	Adjust dependencies.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c: Normalize increments to prefix form.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c, symtab.c: Remove debugging code.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	Rename all the `bucket's as `symbol_t'.
+
+	* src/gram.c, src/gram.h, src/lex.c, src/lex.h, src/output.c,
+	* src/reader.c, src/reader.h, src/reduce.c, src/state.h,
+	* src/symtab.c, src/symtab.h (bucket): Rename as...
+	(symbol_t): this.
+	(symbol_list_new, bucket_check_defined, bucket_make_alias)
+	(bucket_check_alias_consistence, bucket_pack, bucket_translation)
+	(bucket_new, bucket_free, hash_compare_bucket, hash_bucket)
+	(buckets_new, buckets_free, buckets_do): Rename as...
+	(symbol_list_new, symbol_check_defined, symbol_make_alias)
+	(symbol_check_alias_consistence, symbol_pack, symbol_translation)
+	(symbol_new, symbol_free, hash_compare_symbol_t, hash_symbol_t)
+	(symbols_new, symbols_free, symbols_do): these.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	Use lib/hash for the symbol table.
+
+	* src/gram.c (ntokens): Initialize to 1, to reserve a slot for
+	EOF.
+	* src/lex.c (lex): Set the `number' member of new terminals.
+	* src/reader.c (bucket_check_defined, bucket_make_alias)
+	(bucket_check_alias_consistence, bucket_translation): New.
+	(reader, grammar_free, readgram, token_translations_init)
+	(packsymbols): Adjust.
+	(reader): Number the predefined tokens.
+	* src/reduce.c (inaccessable_symbols): Just use hard coded numbers
+	for predefined tokens.
+	* src/symtab.h (bucket): Remove all the hash table related
+	members.
+	* src/symtab.c (symtab): Replace by...
+	(bucket_table): this.
+	(bucket_new, bucket_free, hash_compare_bucket, hash_bucket)
+	(buckets_new, buckets_do): New.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.c (nitems, nrules, nsyms, ntokens, nvars, nritems)
+	(start_symbol, max_user_token_number, semantic_parser)
+	(error_token_number): Initialize.
+	* src/reader.c (grammar, start_flag, startval, typed, lastprec):
+	Initialize.
+	(reader): Don't.
+	(errtoken, eoftoken, undeftoken, axiom): Extern.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (rule_s): prec and precsym are now pointers
+	to the bucket giving the priority/associativity.
+	Member `associativity' removed: useless.
+	* src/reduce.c, src/conflicts.c: Adjust.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c, src/LR0.c, src/closure.c, src/gram.c, src/reduce.c:
+	Properly escape the symbols' TAG when outputting them.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h (LA): Is a bitsetv, not bitset*.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h, src/lalr.c (LAruleno): Replace with...
+	(LArule): this, which is an array to rule_t*.
+	* src/print.c, src/conflicts.c: Adjust.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (rule_t): Rename `number' as `user_number'.
+	`number' is a new member.
+	Adjust dependencies.
+	* src/reduce.c (reduce_grammar_tables): Renumber rule_t.number.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	As a result of the previous patch, it is no longer needed
+	to reorder ritem itself.
+
+	* src/reduce.c (reduce_grammar_tables): Don't sort RITEM.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	Be sure never to walk through RITEMS, but use only data related to
+	the rules themselves. RITEMS should be banished.
+
+	* src/output.c (output_token_translations): Rename as...
+	(prepare_tokens): this.
+	In addition to `translate', prepare the muscles `tname' and
+	`toknum', which were handled by...
+	(output_rule_data): this.
+	Remove, and move the remainder of its outputs into...
+	(prepare_rules): this new routines, which also merges content from
+	(output_gram): this.
+	(prepare_rules): Be sure never to walk through RITEMS.
+	(output_stos): Rename as...
+	(prepare_stos): this.
+	(output): Always invoke prepare_states, after all, just don't use it
+	in the output if you don't need it.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (new_state): Display `nstates' as the name of the
+	newly created state.
+	Adjust to initialize first_state and last_state if needed.
+	Be sure to distinguish the initial from the final state.
+	(new_states): Create the itemset of the initial state, and use
+	new_state.
+	* src/closure.c (closure): Now that the initial state has its
+	items properly set, there is no need for a special case when
+	creating `ruleset'.
+
+	As a result, now the rule 0, reducing to $axiom, is visible in the
+	outputs.  Adjust the test suite.
+
+	* tests/conflicts.at (Solved SR Conflicts)
+	(Unresolved SR Conflicts): Adjust.
+	* tests/regression.at (Web2c Report, Rule Line Numbers): Idem.
+	* tests/conflicts.at (S/R in initial): New.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (allocate_itemsets): Don't loop over ritem: loop over
+	the RHS of the rules.
+	* src/output.c (output_gram): Likewise.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (rule_t): `lhs' is now a pointer to the symbol's
+	bucket.
+	Adjust all dependencies.
+	* src/reduce.c (nonterminals_reduce): Don't forget to renumber the
+	`number' of the buckets too.
+	* src/gram.h: Include `symtab.h'.
+	(associativity): Move to...
+	* src/symtab.h: here.
+	No longer include `gram.h'.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h, src/gram.c (rules_rhs_length): New.
+	(ritem_longest_rhs): Use it.
+	* src/gram.h (rule_t): `number' is a new member.
+	* src/reader.c (packgram): Set it.
+	* src/reduce.c (reduce_grammar_tables): Move the useless rules at
+	the end of `rules', and count them out of `nrules'.
+	(reduce_output, dump_grammar): Adjust.
+	* src/print.c (print_grammar): It is no longer needed to check for
+	the usefulness of a rule, as useless rules are beyond `nrules + 1'.
+	* tests/reduce.at (Reduced Automaton): New test.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (inaccessable_symbols): Fix a buglet: because of a
+	lacking `+ 1' to nrules, Bison reported as useless a token if it
+	was used solely to set the precedence of the last rule...
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.c++, data/bison.simple: Don't output the current file
+	name in #line, to avoid useless diffs between two identical
+	outputs under different names.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c, src/print.c, src/reader.c, src/reduce.c:
+	Normalize loops to using `< nrules + 1', not `<= nrules'.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* TODO: Update.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c, src/reader.c, src/symtab.c, src/symtab.h: Rename
+	bucket.value as bucket.number.
+
+2002-04-07  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c, src/derives.c, src/gram.h, src/lalr.c,
+	* src/nullable.c, src/output.c, src/print.c, src/print_graph.c,
+	* src/reader.c, src/reduce.c: Let rule_t.rhs point directly to the
+	RHS, instead of being an index in RITEMS.
+
+2002-04-04  Paul Eggert  <eggert@twinsun.com>
+
+	* doc/bison.texinfo: Update copyright date.
+	(Rpcalc Lexer, Symbols, Token Decl): Don't assume ASCII.
+	(Symbols): Warn about running Bison in one character set,
+	but compiling and/or running in an incompatible one.
+	Warn about character code 256, too.
+
+2002-04-03  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.data (YYSTACK_ALLOC): Depend on whether
+	YYERROR_VERBOSE is nonzero, not whether it is defined.
+
+	Merge changes from bison-1_29-branch.
+
+2002-03-20  Paul Eggert  <eggert@twinsun.com>
+
+	Merge fixes from Debian bison_1.34-1.diff.
+
+	* configure.in (AC_PREREQ): 2.53.
+
+2002-03-20  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (log_resolution): Argument `resolution' is const.
+
+2002-03-19  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (YYCOPY): New macro.
+	(YYSTACK_RELOCATE): Use it.
+	Remove Type arg; no longer needed.  All callers changed.
+	(yymemcpy): Remove; no longer needed.
+
+	* Makefile.am (AUTOMAKE_OPTIONS): 1.6.
+	* doc/Makefile.am (AUTOMAKE_OPTIONS): Remove.
+
+2002-03-19  Akim Demaille  <akim@epita.fr>
+
+	Test and fix the #line outputs.
+
+	* tests/atlocal.at (GCC): New.
+	* tests/synclines.at (AT_TEST_SYNCLINE): New macro.
+	(Prologue synch line, %union synch line, Postprologue synch line)
+	(Action synch line, Epilogue synch line): New tests.
+	* src/reader.c (parse_union_decl): Define the muscle stype_line.
+	* data/bison.simple, data/bison.c++: Use it.
+
+2002-03-19  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts)
+	(Solved SR Conflicts, %expect not enough, %expect right)
+	(%expect too much): Move to...
+	* tests/conflicts.at: this new file.
+
+2002-03-19  Akim Demaille  <akim@epita.fr>
+
+	* data/m4sugar/m4sugar.m4: Update from CVS Autoconf.
+	* data/bison.simple, data/bison.c++: Handle the `#define' part, so
+	that we can move to enums for instance.
+	* src/output.c (token_definitions_output): Output a list of
+	`token-name, token-number' instead of the #define.
+	(output_skeleton): Name this list `b4_tokens', not `b4_tokendefs'.
+
+2002-03-14  Akim Demaille  <akim@epita.fr>
+
+	Use Gettext 0.11.1.
+
+2002-03-09  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Make the user able to add members to the generated
+	parser by subclassing.
+
+2002-03-05  Robert Anisko  <robert@lrde.epita.fr>
+
+	* src/reader.c (read_additionnal_code): `c' should be an integer, not
+	a character.
+	Reported by Nicolas Tisserand and Nicolas Burrus.
+
+2002-03-04  Robert Anisko  <robert@lrde.epita.fr>
+
+	* src/reader.c: Warn about lacking semi-colons, do not complain.
+
+2002-03-04  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Remove a debug line.
+
+2002-03-04  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Unmerge value as yylval and value as yyval.  Unmerge
+	location as yylloc and location as yyloc.  Use YYLLOC_DEFAULT, and
+	provide a default implementation.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* tests/input.at (Invalid $n, Invalid @n): Add the ending `;'.
+	* tests/output.at (AT_CHECK_OUTPUT): Likewise.
+	* tests/headers.at (AT_TEST_CPP_GUARD_H): Ditto.
+	* tests/semantic.at (Parsing Guards): Similarly.
+	* src/reader.at (readgram): Complain if the last rule is not ended
+	with a semi-colon.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/warshall.h, src/warshall.c (bitmatrix_print): Move to...
+	* src/closure.c: here.
+	(set_firsts): Use bitsetv_reflexive_transitive_closure instead of
+	RTC.
+	* src/warshall.h, src/warshall.c: Remove.
+	* tests/sets.at (Broken Closure): Adjust.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_skeleton): tempdir is const.
+	bytes_read is unused.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* lib/bbitset.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
+	* lib/bitsetv.h, lib/ebitset.c, lib/lbitset.c, lib/sbitset.c:
+	Update.
+	From Michael Hayes.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (closure): `r' is unused.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* tests/sets.at (Broken Closure): Add the ending `;'.
+	* src/reader.at (readgram): Complain if a rule is not ended with a
+	semi-colon.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (set_conflicts): Use bitset_disjoint_p.
+	(count_sr_conflicts): Use bitset_count.
+	* src/reduce.c (inaccessable_symbols): Ditto.
+	(bits_size): Remove.
+	* src/warshall.h, src/warshall.c: Convert to bitsetv.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c, src/conflicts.c, src/lalr.c, src/print.c,
+	* src/reduce.c: Remove the `bitset_zero's following the
+	`bitset_create's, as now it is performed by the latter.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* lib/bitset.c, lib/bitset.h, lib/bitsetv.c, lib/bitsetv.h,
+	* lib/ebitset.c, lib/ebitset.h, lib/lbitset.c, lib/lbitset.h,
+	* lib/sbitset.c, lib/sbitset.h, lib/bbitset.h: Update from the
+	latest sources from Michael.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output): Don't free the grammar.
+	* src/reader.c (grammar_free): New.
+	* src/main.c (main): Call it and don't free symtab here.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.c (parse_percent_token): Be sure to 0-end token_buffer
+	before returning.
+	Reported by Benoit Perrot.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	Use bitset operations when possible, not loops over bits.
+
+	* src/conflicts.c (set_conflicts, count_sr_conflicts): Use
+	bitset_or.
+	* src/print.c (print_reductions): Use bitset_and, bitset_andn.
+	* src/reduce.c (useless_nonterminals): Formatting changes.
+	* src/warshall.c (TC): Use bitset_or.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h, src/lalr.c (tokensetsize): Remove, unused.
+	* src/system.h (BITS_PER_WORD, WORDSIZE, SETBIT, RESETBIT, BITISSET):
+	Ditto.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (F): Now a bitset*.
+	Adjust all dependencies.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (shiftset, lookaheadset): Now bitset.
+	Adjust all dependencies.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/L0.c, src/LR0.h (nstates): Be size_t.
+	Adjust comparisons (signed vs unsigned).
+	* src/conflics.c, src/lalr.c, src/lalr.h, src/output.c (LA): Now a
+	bitset*.
+	Adjust all dependencies.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (firsts): Now, also a bitset.
+	Adjust all dependencies.
+	(varsetsize): Remove, now unused.
+	* src/warshall.h, src/warshall.c: Now work on arrays of bitsets.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/print.c: Convert to use bitset.h, not hand coded iterations
+	over ints.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c: Convert to use bitset.h, not hand coded BSet.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (ruleset): Be a bitset.
+	(rulesetsize): Remove.
+
+2002-03-04  Akim Demaille  <akim@epita.fr>
+
+	* lib/bitset-int.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
+	* lib/bitsetv.h, lib/ebitset.c, lib/ebitset.h, lib/lbitset.c,
+	* lib/lbitset.h, lib/sbitset.c, lib/sbitset.h: New.
+	* src/closure.c (fderives): Be an array of bitsets.
+
+2002-02-28  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Merge the two generated headers.  Insert a copyright
+	notice in each output file.
+
+2002-02-28  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.c++: Copy the prologue of bison.simple to fetch
+	useful M4 definitions, such as b4_header_guard.
+
+2002-02-25  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (version): Give the name of the authors, and use a
+	translator friendly scheme for the bgr
+	copyright notice.
+
+2002-02-25  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (header_output): Remove, now handled completely via
+	M4.
+
+2002-02-25  Akim Demaille  <akim@epita.fr>
+
+	* m4/m4.m4: New, from CVS Autoconf.
+	* configure.in: Invoke it.
+	* src/output.c (output_skeleton): Use its result instead of the
+	hard coded name.
+
+2002-02-25  Akim Demaille  <akim@epita.fr>
+
+	* lib/tempname.c, lib/mkstemp.c, m4/mkstemp.m4: New, stolen from
+	Fileutils 4.1.5.
+	* configure.in: Invoke UTILS_FUNC_MKSTEMP.
+	* src/output.c (output_skeleton): Use mkstemp to create a real
+	temporary file.
+	Move the filling of `skeleton' and its muscle to...
+	(prepare): here.
+	(output): Move the definition of the prologue muscle to...
+	(prepare): here.
+	* src/system.h (DEFAULT_TMPDIR): New.
+
+2002-02-14  Paul Eggert  <eggert@twinsun.com>
+
+	Remove the support for C++ namespace cleanliness; it was
+	causing more problems than it was curing, since it didn't work
+	properly on some nonstandard C++ compilers.  This can wait
+	for a proper C++ parser.
+
+	* NEWS: Document this.
+	* doc/bison.texinfo (Bison Parser, Debugging): Remove special mention
+	of C++, as it's treated like C now.
+	* src/bison.simple (YYSTD): Remove.
+	(YYSIZE_T, YYFPRINTF, YYPARSE_PARAM_ARG, YYPARSE_PARAM_DECL):
+	Treat C++ just like Standard C instead of trying to support
+	namespace cleanliness.
+
+2002-02-14  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (else): Adjust to Andreas' change.
+
+2002-02-14  Akim Demaille  <akim@epita.fr>
+
+	* lib/Makefile.am (EXTRA_DIST): Ship strnlen.c.
+
+2002-02-13  Andreas Schwab  <schwab@suse.de>
+
+	* src/output.c (output_rule_data): Don't output NULL, it might
+	not be defined yet.
+
+2002-02-11  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++ (YYDEBUG, YYERROR_VERBOSE): After the prologue.
+	(Copyright notice): Update.
+
+2002-02-11  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (%nonassoc and eof): Don't include
+	nonportable headers.
+
+2002-02-08  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Correct error recovery.  Make the user able to
+	initialize the starting location.
+
+2002-02-07  Akim Demaille  <akim@epita.fr>
+
+	* tests/input.at: New.
+
+2002-02-07  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Replace some direct m4 expansions by constants.  Be
+	more consistent when naming methods and variables.  Put preprocessor
+	directives around tables only needed for debugging.
+
+2002-02-07  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++ (yy::b4_name::print_): New method, replaces yyprint in
+	C++ parsers.
+	(yy::b4_name::parse): Use print_.
+
+2002-02-07  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++ (yy::b4_name::parse): Error recovery is back.
+
+2002-02-07  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++ (yy::b4_name::error_): New method, replaces yyerror in
+	C++ parsers.
+	(yy::b4_name::parse): Build verbose error messages, and use error_.
+
+2002-02-06  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Fix m4 quoting in comments.
+
+2002-02-06  Robert Anisko  <robert@lrde.epita.fr>
+
+	* data/bison.c++: Adjust the parser code.  Fix some muscles that were
+	not expanded by m4.
+
+2002-02-05  Akim Demaille  <akim@epita.fr>
+
+	* data/bison.c++: Adjust to the M4 back end.
+	More is certainly needed.
+
+2002-02-05  Akim Demaille  <akim@epita.fr>
+
+	Give a try to M4 as a back end.
+
+	* lib/readpipe.c: New, from wdiff.
+	* src/Makefile.am (DEFS): Define PKGDATADIR, not BISON_SIMPLE and
+	BISON_HAIRY.
+	* src/system.h (BISON_HAIRY, BISON_SIMPLE): Remove the DOS and VMS
+	specific values.  Now it is m4 that performs the lookup.
+	* src/parse-skel.y: Remove.
+	* src/muscle_tab.c, src/muscle_tab.h (muscles_m4_output): New.
+	* src/output.c (actions_output, guards_output)
+	(token_definitions_output): No longer keeps track of the output
+	line number, hence remove the second argument.
+	(guards_output): Check against the guard member of a rule, not the
+	action member.
+	Adjust callers.
+	(output_skeleton): Don't look for the skeleton location, let m4 do
+	that.
+	Create `/tmp/muscles.m4'.  This is temporary, a proper temporary
+	file will be used.
+	Invoke `m4' on m4sugar.m4, muscles.m4, and the skeleton.
+	(prepare): Given that for the time being changesyntax is not
+	usable in M4, rename the muscles using `-' to `_'.
+	Define `defines_flag', `output_parser_name' and `output_header_name'.
+	* src/output.h (actions_output, guards_output)
+	(token_definitions_output): Adjust prototypes.
+	* src/scan-skel.l: Instead of scanning the skeletons, it now
+	processes the output of m4: `__oline__' and `#output'.
+	* data/bison.simple: Adjust to be used by M4(sugar).
+	* tests/Makefile.am: Use check_SCRIPTS to make sure `bison' is up
+	to date.
+	* tests/bison.in: Use the secrete envvar `BISON_PKGDATADIR'
+	instead of the dead `BISON_SIMPLE' and `BISON_HAIRY'.
+	* data/m4sugar/m4sugar.m4, data/m4sugar/version.m4: New,
+	shamelessly stolen from CVS Autoconf.
+
+2002-02-05  Akim Demaille  <akim@epita.fr>
+
+	* lib/hash.c, lib/hash.h: Replace with Fileutils 4.1's version.
+	* configure.in: Check for the declarations of free and malloc.
+	* src/muscle_tab.c: Adjust.
+
+2002-02-05  Akim Demaille  <akim@epita.fr>
+
+	* src/muscle_tab.c (muscle_init): Don't default to NULL muscle
+	which have no values.
+
+2002-02-05  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple, src/bison.hairy, src/bison.c++: Move to...
+	* data/: here.
+
+2002-01-29  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (YYSIZE_T): Do not define merely because
+	YYSTACK_USE_ALLOCA is nonzero or alloca or _ALLOCA_H are defined.
+	On some platforms, <alloca.h> does not declare YYSTD (size_t).
+
+2002-01-27  Akim Demaille  <akim@epita.fr>
+
+	Fix `%nonassoc and eof'.
+
+	* src/state.c (errs_dup): Aaaah!  The failure was due to bytes
+	which were not properly copied!  Replace
+	memcpy (res->errs, src->errs, src->nerrs);
+	with
+	memcpy (res->errs, src->errs, src->nerrs * sizeof (src->errs[0]));
+	!!!
+	* tests/regression.at (%nonassoc and eof): Adjust to newest
+	Autotest: `.' is not in the PATH.
+
+2002-01-27  Akim Demaille  <akim@epita.fr>
+
+	* tests/sets.at (AT_EXTRACT_SETS): New.
+	(Nullable): Use it.
+	(Firsts): New.
+
+2002-01-26  Akim Demaille  <akim@epita.fr>
+
+	* tests/actions.at, tests/calc.at, tests/headers.at,
+	* tests/torture.at: Adjust to the newest Autotest which no longer
+	forces `.' in the PATH.
+
+2002-01-25  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (%nonassoc and eof): New.
+	Suggested by Robert Anisko.
+
+2002-01-24  Akim Demaille  <akim@epita.fr>
+
+	Bison dumps core when trying to complain about broken input files.
+	Reported by Cris van Pelt.
+
+	* src/lex.c (parse_percent_token): Be sure to set token_buffer.
+	* tests/regression.at (Invalid input: 1, Invalid input: 2): Merge
+	into...
+	(Invalid inputs): Strengthen: exercise parse_percent_token.
+
+2002-01-24  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/Makefile.am: Add bison.c++.
+	* src/bison.c++: New skeleton.
+
+2002-01-21  Paolo Bonzini <bonzini@gnu.org>
+
+	* po/it.po: New.
+
+2002-01-21  Kees Zeelenberg  <kzlg@users.sourceforge.net>
+
+	* src/files.c (skeleton_find) [MSDOS]: Fix cp definition.
+
+2002-01-20  Marc Autret  <marc@gnu.org>
+
+	* src/files.c (compute_output_file_names): Fix
+
+2002-01-20  Marc Autret  <marc@gnu.org>
+
+	* tests/output.at: New test.
+	* src/files.c (compute_base_names): Don't map extensions when
+	the YACC flag is set, use defaults.
+	Reported by Evgeny Stambulchik.
+
+2002-01-20  Marc Autret  <marc@gnu.org>
+
+	* src/system.h: Need to define __attribute__ away for non-GCC
+	compilers as well (i.e., the vendor C compiler).
+	Suggested by Albert Chin-A-Young.
+
+2002-01-11  Tim Van Holder  <tim.van.holder@pandora.be>
+
+	* lib/hash.h, lib/hash.c: Renamed __P to PARAMS and used the
+	canonical definition.
+	* src/system.h: Use the canonical definition for PARAMS (avoids
+	a conflict with the macro from lib/hash.h).
+
+2002-01-11  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Use AC_FUNC_STRNLEN.
+	Fixes the failures observed on AIX 4.3 by H.Merijn Brand.
+
+2002-01-09  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c, src/files.h (output_infix): New.
+	(tab_extension): Remove.
+	(compute_base_names): Compute the former, drop the latter.
+	* src/output.c (prepare): Insert the muscles `output-infix', and
+	`output-suffix'.
+	* src/parse-skel.y (string, string.1): New.
+	(section.header): Use it.
+	(section.yacc): Remove.
+	(prefix): Remove too.
+	* src/scan-skel.l: Adjust.
+	* src/bison.simple, src/bison.hairy: Adjust.
+
+2002-01-09  Akim Demaille  <akim@epita.fr>
+
+	* configure.in (WERROR_CFLAGS): Compute it.
+	* src/Makefile.am (CFLAGS): Pass it.
+	* tests/atlocal.in (CFLAGS): Idem.
+	* src/files.c: Fix a few warnings.
+	(get_extension_index): Remove, unused.
+
+2002-01-08  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (AS_FILE_NAME): New.
+	(getargs): Use it to convert DOSish file names.
+	* src/files.c (base_name): Rename as full_base_name to avoid
+	clashes with `base_name ()'.
+	(filename_split): New.
+	(compute_base_names): N-th rewrite, using filename_split.
+
+2002-01-08  Akim Demaille  <akim@epita.fr>
+
+	* lib/basename.c, lib/dirname.h, lib/dirname.c, lib/memrchr.c:
+	New, stolen from the Fileutils 4.1.
+	* lib/Makefile.am (libbison_a_SOURCES): Adjust.
+	* configure.in: Check for the presence of memrchr, and of its
+	prototype.
+
+2002-01-07  Tim Van Holder  <tim.van.holder@pandora.be>
+
+	* lib/hash.h (__P): Added definition for this macro.
+	* src/Makefile.am: Add parse-skel.c and scan-skel.c to
+	BUILT_SOURCES, to ensure they are generated first.
+	* src/parse-skel.y: Use YYERROR_VERBOSE instead of
+	%error-verbose to allow bootstrapping with bison 1.30x.
+
+2002-01-06  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (parse_braces): Don't fetch the next char, the
+	convention is to fetch on entry.
+	* tests/torture.at (GNU Cim Grammar): Reintroduce their weird
+	'switch' without a following semicolon.
+	* tests/regression.at (braces parsing): New.
+
+2002-01-06  Akim Demaille  <akim@epita.fr>
+
+	Bison is dead wrong in its RR conflict reports.
+
+	* tests/torture.at (GNU Cim Grammar): New.
+	* src/conflicts.c (count_rr_conflicts): Fix.
+
+2002-01-06  Akim Demaille  <akim@epita.fr>
+
+	Creating package.m4 from configure.ac causes too many problems.
+
+	* tests/Makefile.am (package.m4): Create it by hand,
+	AC_CONFIG_TESTDIR no longer does in the most recent CVS Autoconf.
+
+2002-01-06  Akim Demaille  <akim@epita.fr>
+
+	* src/Makefile.am (bison_SOURCES): Add parse-skel.h and
+	skeleton.h.
+
+2002-01-04  Paul Eggert  <eggert@twinsun.com>
+
+	* doc/bison.texinfo (Debugging):
+	Remove YYSTDERR; it's no longer defined or used.
+	Also, s/cstdio.h/cstdio/.
+
+2002-01-03  Akim Demaille  <akim@epita.fr>
+
+	* tests/bison.in, tests/atlocal.in: Adjust to CVS Autoconf.
+
+2002-01-03  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-skel.y (process_skeleton): Don't bind the parser's
+	tracing code to --trace, wait for a better --trace option, with
+	args.
+
+2002-01-03  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple (YYSTDERR): Remove, replace `stderr'.
+	The ISO C++ standard is extremely clear about it: stderr is
+	considered a macro, not a regular symbol (see table 94 `Header
+	<cstdio> synopsis', [lib.c.files] 27.8.2 C Library files).
+	Therefore std:: does not apply to it.  It still does with fprintf.
+	Also, s/cstdio.h/cstdio/.
+
+2002-01-03  Akim Demaille  <akim@epita.fr>
+
+	* lib/quotearg.c: Use `#include "..."' instead of `#include <...>'
+	for non system headers.
+
+2002-01-02  Akim Demaille  <akim@epita.fr>
+
+	Equip the skeleton chain with location tracking, runtime trace,
+	pure parser and scanner.
+
+	* src/parse-skel.y: Request a pure parser, locations, and prefix
+	renaming.
+	(%union): Having several members with the same type does not help
+	type mismatches, simplify.
+	(YYPRINT, yyprint): New.
+	(yyerror): ``Rename'' (there is a #define yyerror skel_error) as...
+	(skel_error): this.
+	Handle locations.
+	* src/scan-skel.l: Adjust to these changes.
+	* src/skeleton.h (LOCATION_RESET, LOCATION_LINES, LOCATION_STEP)
+	(LOCATION_PRINT, skel_control_t): New.
+
+2001-12-30  Akim Demaille  <akim@epita.fr>
+
+	* src/parse-skel.y: Get rid of the shift/reduce conflict:
+	replace `gb' with BLANKS.
+	* src/scan-skel.l: Adjust.
+
+2001-12-30  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: We don't need nor want bcopy.
+	Throw away MS-DOS crap: we don't need getpid.
+	* configure.in: We don't need strndup.  It was even causing
+	problems: because Flex includes the headers *before* us,
+	_GNU_SOURCE is not defined by config.h, and therefore strndup was
+	not visible.
+	* lib/xstrndup.c: New.
+	* src/scan-skel.l: Use it.
+	Be sure to initialize yylval.muscle member when scanning a MUSCLE.
+	* src/parse-skel.y: Use %directives instead of #defines.
+
+2001-12-30  Akim Demaille  <akim@epita.fr>
+
+	* src/skeleton.h: New.
+	* src/output.c (output_parser, output_master_parser): Remove, dead
+	code.
+	* src/output.h (get_lines_number, actions_output, guards_output)
+	(token_definitions_output): Prototype them.
+	* src/parse-skel.y: Add the license notice.
+	Include output.h and skeleton.h.
+	(process_skeleton): Returns void, and takes a single parameter.
+	* src/scan-skel.l: Add the license notice.
+	Include skeleton.h.
+	Don't use %option yylineno: it seems that then Flex imagines
+	REJECT has been used, and therefore it won't reallocate its
+	buffers (which makes no other sense to me than a bug).  It results
+	in warnings for `unused: yy_flex_realloc'.
+
+2001-12-30  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/muscle_tab.h (MUSCLE_INSERT_INT, MUSCLE_INSERT_STRING)
+	(MUSCLE_INSERT_PREFIX): ...to there.
+	* src/output.c (MUSCLE_INSERT_INT, MUSCLE_INSERT_STRING)
+	(MUSCLE_INSERT_PREFIX): Move from here...
+
+	* src/bison.hairy: Add a section directive.  Put braces around muscle
+	names.  This parser skeleton is still broken, but Bison should not
+	choke on a bad muscle 'syntax'.
+	* src/bison.simple: Add a section directive.  Put braces around muscle
+	names.
+
+	* src/files.h (strsuffix, stringappend): Add declarations.
+	(tab_extension): Add declaration.
+	(short_base_name): Add declaration.
+
+	* src/files.c (strsuffix, stringappend): No longer static.  These
+	functions are used in the skeleton parser.
+	(tab_extension): New.
+	(compute_base_names): Use the computations done in this function
+	to guess if the generated parsers should have '.tab' in their
+	names.
+	(short_base_name): No longer static.
+
+	* src/output.c (output_skeleton): New.
+	(output): Disable call to output_master_parser, and give a try to
+	a new skeleton handling system.
+	(guards_output, actions_output): No longer static.
+	(token_definitions_output, get_lines_number): No longer static.
+
+	* configure.in: Use AM_PROG_LEX and AC_PROG_YACC.
+
+	* src/Makefile.am (bison_SOURCES): Add scan-skel.l and
+	parse-skel.y.
+
+	* src/parse-skel.y: New file.
+	* src/scan-skel.l: New file.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	%name-prefix is broken.
+
+	* src/files.c (spec_name_prefix): Initialize to NULL, not to "yy".
+	Adjust all dependencies.
+	* tests/headers.at (export YYLTYPE): Strengthen this test: use
+	%name-prefix.
+
+	Renaming yylval but not yylloc is not consistent.  Now we do.
+
+	* src/bison.simple: Prefix yylloc if used.
+	* doc/bison.texinfo (Decl Summary): Document that.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Promote `%long-directive' over
+	`%long_directive'.
+	Remove all references to fixed-output-files, yacc is enough.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple: Define YYDEBUG and YYERROR_VERBOSE *after* the
+	user prologue.  These are defaults.
+	* tests/actions.at (Mid-rule actions): Make sure the user can
+	define YYDEBUG and YYERROR_VERBOSE.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (header_output): Don't forget to export YYLTYPE and
+	yylloc.
+	* tests/headers.at (export YYLTYPE): New, make sure it does.
+	* tests/regression.at (%union and --defines, Invalid CPP headers):
+	Move to...
+	* tests/headers.at: here.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (rule_s): Member `assoc' is of type `associativity'.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* tests/actions.at (Mid-rule actions): Output on a single line
+	instead of several.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Formatting changes.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	Don't store the token defs in a muscle, just be ready to output it
+	on command.  Now possible via `symbols'.  Fixes a memory leak.
+
+	* src/output.c (token_definitions_output): New.
+	(output_parser, header_output): Use it.
+	* src/reader.c (symbols_save): Remove.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple: Do not provide a default for YYSTYPE and
+	YYLTYPE before the user's prologue.  Otherwise it's hardly... a
+	default.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	Mid-rule actions are simply... ignored!
+
+	* src/reader.c (readgram): Be sure to attach mid-rule actions to
+	the empty-rule associated to the dummy symbol, not to the host
+	rule.
+	* tests/actions.at (Mid-rule actions): New.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	Memory leak.
+
+	* src/reader.c (reader): Free grammar.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	Memory leak.
+
+	* src/LR0.c (new_itemsets): Don't allocate `shift_symbol' here,
+	since it allocates it for each state, although only one is needed.
+	(allocate_storage): Do it here.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/options.h, src/options.c (create_long_option_table): Rename
+	as...
+	(long_option_table_new): this, with a clearer prototype.
+	(percent_table): Remove, unused,
+	* src/getargs.c (getargs): Adjust.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c, src/conflicts.c, src/lalr.c, src/lalr.h, src/output.c
+	* src/print.c, src/print_graph.c, src/state.h: Rename state_table
+	as states.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (build_relations): Rename `states' as `states1'.
+	Sorry, I don't understand exactly what it is, no better name...
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c, src/conflicts.c, src/derives.c, src/gram.c
+	* src/gram.h, src/lalr.c, src/nullable.c, src/output.c, src/print.c
+	* src/print_graph.c, src/reader.c, src/reduce.c: Rename rule_table
+	as rules.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.c (rprec, rprecsym, rassoc): Remove, unused since long
+	ago.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c, src/reader.h (user_toknums): Remove.
+	Adjust all users to use symbols[i]->user_token_number.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.c, src/gram.h (sprec, sassoc): Remove.
+	Adjust all users to use symbols[i]->prec or ->assoc.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c, src/reader.h (tags): Remove.
+	Adjust all users to use symbols[i]->tag.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h, src/gram.c (symbols): New, similar to state_table
+	and rule_table.
+	* src/reader.c (packsymbols): Fill this table.
+	Drop sprec.
+	* src/conflicts.c (resolve_sr_conflict): Adjust.
+	* src/reduce.c (reduce_grammar): Adjust: just sort symbols, a
+	single table.
+	Use symbols[i]->tag instead of tags[i].
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at (_AT_DATA_CALC_Y): Also use %union.
+	In addition, put a comment in there, to replace...
+	* tests/regression.at (%union and C comments): Remove.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Web2c Actions): Blindly move the actual
+	output as expected output.  The contents *seem* right to me, but I
+	can't pretend reading perfectly parser tables...  Nonetheless, all
+	the other tests pass correctly, the table look OK, even though the
+	presence of `$axiom' is to be noted: AFAICS it is useless (but
+	harmless).
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (readgram): Don't add the rule 0 if there were no
+	rules read.  In other words, add it _after_ having performed
+	grammar sanity checks.
+	Fixes the `tests/regression.at (Invalid input: 1)' Failure.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Web2c Report): Catch up: the rule 0 is now
+	visible, and some states have now a different number.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (readgram): Bind the initial rule's lineno to that
+	of the first rule.
+	* tests/regression.at (Rule Line Numbers, Unresolved SR Conflicts):
+	(Solved SR Conflicts): Adjust rule 0's line number.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	Fix the `GAWK Grammar' failure.
+
+	* src/LR0.c (final_state): Initialize to -1 so that we do compute
+	the reductions of the first state which was mistakenly confused
+	with the final state because precisely final_state was initialized
+	to 0.
+	* tests/sets.at (Nullable): Adjust: state 0 does have lookaheads,
+	now noticed by Bison.
+	* tests/regression.at (Rule Line Numbers): Adjust: state 0 does
+	have a reduction on $default.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.c (ritem_print): Be sure to subtract 1 when displaying
+	rule line numbers.
+	* src/closure.c (print_closure): Likewise.
+	* src/derives.c (print_derives): Likewise.
+	* tests/sets.at (Nullable): Adjust: the rule numbers are correct
+	now.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (lookaheads_print): New.
+	(lalr): Call it when --trace-flag.
+	* tests/sets.at (Nullable): Adjust: when tracing, the lookaheads
+	are dumped.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/derives.c (print_derives): Be sure to use `>= 0', not `> 0',
+	when walking through ritem, even via rule->rhs.
+	* src/reduce.c (dump_grammar, useful_production, reduce_output)
+	(useful_production, useless_nonterminals): Likewise.
+	(reduce_grammar_tables): Likewise, plus update nritems.
+	* src/nullable.c (set_nullable): Likewise.
+	* src/lalr.c (build_relations): Likewise.
+	* tests/sets.at (Nullable): Adjust.
+	Fortunately, now, the $axiom is no longer nullable.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (generate_states): Use nritems, not nitems, nor using
+	the 0-sentinel.
+	* src/gram.c (ritem_longest_rhs): Likewise.
+	* src/reduce.c (nonterminals_reduce): Likewise.
+	* src/print_graph.c (print_graph): Likewise.
+	* src/output.c (output_rule_data): Likewise.
+	* src/nullable.c (set_nullable):  Likewise.
+
+2001-12-29  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c: Comment changes.
+
+2001-12-27  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (YYSTACK_ALLOC, YYSIZE_T): Remove special
+	cases for non-GNU systems like AIX, HP-UX, SGI, Sun, and
+	Sparc, as they were causing more porting problems than the
+	(minor) performance improvement was worth.
+
+	Also, catch up with 1.31's YYSTD.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_gram): Rely on nritems, not the
+	0-sentinel.  See below.
+	Use -1 as separator, not 0.
+	* src/bison.simple (yyparse): Subtract 1 to the rule numbers.
+	Rely on -1 as separator in yyrhs, instead of 0.
+	* tests/calc.at (AT_CHECK_CALC): Now, the parsers no longer issue
+	twice `Now at end of input', therefore there are two lines less to
+	expect.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Unresolved SR Conflicts):
+	(Solved SR Conflicts, Rule Line Numbers): Adjust to the changes
+	below.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (new_state): Recognize the final state by the fact it
+	is reached by eoftoken.
+	(insert_start_shifting_state, insert_eof_shifting_state)
+	(insert_accepting_state, augment_automaton): Remove, since now
+	these states are automatically computed from the initial state.
+	(generate_states): Adjust.
+	* src/print.c: When reporting a rule number to the user, subtract
+	1, so that the axiom rule is rule 0, and the first user rule is 1.
+	* src/reduce.c: Likewise.
+	* src/print_graph.c (print_core): For the time being, just as for
+	the report, depend upon --trace-flags to dump the full set of
+	items.
+	* src/reader.c (readgram): Once the grammar read, insert the rule
+	0: `$axiom: START-SYMBOL $'.
+	* tests/set.at: Adjust: rule 0 is now displayed, and since the
+	number of the states has changed (the final state is no longer
+	necessarily the last), catch up.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	Try to make the use of the eoftoken valid.  Given that its value
+	is 0 which was also used as a sentinel in ritem, (i) make sure >= 0
+	is used instead of > 0 where appropriate, (ii), depend upon nritems
+	instead of the 0-sentinel.
+
+	* src/gram.h, src/gram.c (nritems): New.
+	Expected to be duplication of nitems, but for the time being...
+	* src/reader.c (packgram): Assert nritems and nitems are equal.
+	* src/LR0.c (allocate_itemsets, new_itemsets): Adjust.
+	* src/closure.c (print_closure, print_fderives): Likewise.
+	* src/gram.c (ritem_print): Likewise.
+	* src/print.c (print_core, print_grammar): Likewise.
+	* src/print_graph.c: Likewise.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/main.c (main): If there are complains after grammar
+	reductions, then output the report anyway if requested, then die.
+	* src/symtab.c (bucket_new): Initialize `value' to -1, not 0.
+	* src/reader.c (eoftoken): New.
+	(parse_token_decl): If the token being defined has value `0', it
+	is the eoftoken.
+	(packsymbols): No longer hack `tags' to insert `$' by hand.
+	Be sure to preserve the value of the eoftoken.
+	(reader): Make sure eoftoken is defined.
+	Initialize nsyms to 0: now eoftoken is created just like the others.
+	* src/print.c (print_grammar): Don't special case the eof token.
+	* src/regression.at: Adjust: `$' has value 0, not -1, which was a
+	lie anyway, albeit pleasant.
+	* tests/calc.at: Exercise error messages with eoftoken.
+	Change the grammar so that empty input is invalid.
+	Adjust expectations.
+	When yyungeting, be sure to use a valid yylloc: use last_yylloc.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Check the protos of strchr ans strspn.
+	Replace strchr if needed.
+	* src/system.h: Provide the protos of strchr, strspn and memchr if
+	missing.
+	* lib/strchr.c: New.
+	* src/reader.c (symbols_save): Use strchr.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/print.c, src/print_graph.c (escape): New.
+	Use it to quote the TAGS outputs.
+	* src/print_graph.c (print_state): Now errors are in red, and
+	reductions in green.
+	Prefer high to wide: output the state number on a line of its own.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h, src/state.c (reductions_new): New.
+	* src/LR0.c (set_state_table): Let all the states have a
+	`reductions', even if reduced to 0.
+	(save_reductions): Adjust.
+	* src/lalr.c (initialize_LA, initialize_lookaheads): Adjust.
+	* src/print.c (print_reductions, print_actions): Adjust.
+	* src/output.c (action_row): Adjust.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h, src/state.c (errs_new, errs_dup): New.
+	* src/LR0.c (set_state_table): Let all the states have an errs,
+	even if reduced to 0.
+	* src/print.c (print_errs, print_reductions): Adjust.
+	* src/output.c (output_actions, action_row): Adjust.
+	* src/conflicts.c (resolve_sr_conflict): Adjust.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (set_goto_map, initialize_F): Use SHIFT_SYMBOL.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c, src/conflicts.h (print_reductions): Move to...
+	* src/print.c: here.
+	(lookaheadset, shiftset): New, used as additional storage by
+	print_reductions.
+	(print_results): Adjust.
+	(print_shifts, print_gotos, print_errs): New, extracted from...
+	(print_actions): here.
+	* src/print_graph.c (print_actions): Remove dead code.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_dollar, copy_at): Better checking of `n' in
+	`$n' and `@n'.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (add_lookback_edge): Use state_t instead of ints.
+	(build_relations): Adjust.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (set_goto_map): Remove a wrong but benign loop
+	duplication.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (packgram): Catch nitems overflows.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c, src/files.h (guard_obstack): Remove.
+	* src/output.c (output): Adjust.
+	* src/reader.c (parse_braces): New, factoring...
+	(copy_action, copy_guard): these two which are renamed as...
+	(parse_action, parse_guard): these.
+	As a voluntary consequence, using braces around guards is now
+	mandatory.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (rule_t): `guard' and `guard_line' are new members.
+	* src/reader.c (symbol_list): `guard' and `guard_line' are new
+	members.
+	(symbol_list_new): Adjust.
+	(copy_action): action_line is the first line, not the last.
+	(copy_guard): Just as for actions, store the `action' only, not
+	the switch/case/break flesh.
+	Don't parse the user action that might follow the guard, let...
+	(readgram): do it, i.e., now, there can be an action after a
+	guard.
+	In other words the guard is just explicitly optional.
+	(packgram): Adjust.
+	* src/output.c (guards_output): New.
+	(output_parser): Call it when needed.
+	(output): Also free the guard and attrs obstacks.
+	* src/files.c, src/files.h (obstack_save): Remove.
+	(output_files): Remove.
+	As a result, if one needs the former `.act' file, using an
+	appropriate skeleton which requires actions and guards is now
+	required.
+	* src/main.c (main): Adjust.
+	* tests/semantic.at: New.
+	* tests/regression.at: Use `input.y' as input file name.
+	Avoid 8+3 problems by requiring input.c when the test needs the
+	parser.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (symbol_list_new): Be sure to initialize all the
+	fields.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	All the hacks using a final pseudo state are now useless.
+
+	* src/LR0.c (set_state_table): state_table holds exactly nstates.
+	* src/lalr.c (nLA): New.
+	(initialize_LA, compute_lookaheads, initialize_lookaheads): Use it
+	instead of lookaheadsp from the pseudo state (nstate + 1).
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (action_row, token_actions): Use a state_t instead
+	of a integer, and nlookaheads instead of the following state's
+	lookaheadsp.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (log_resolution, flush_shift)
+	(resolve_sr_conflict, set_conflicts, solve_conflicts)
+	(count_sr_conflicts, count_rr_conflicts, conflicts_output)
+	(conflicts_print, print_reductions): Use a state_t instead of an
+	integer when referring to a state.
+	As much as possible, depend upon nlookaheads, instead of the
+	`lookaheadsp' member of the following state (since lookaheads of
+	successive states are successive, the difference between state n + 1
+	and n served as the number of lookaheads for state n).
+	* src/lalr.c (add_lookback_edge): Likewise.
+	* src/print.c (print_core, print_actions, print_state)
+	(print_results): Likewise.
+	* src/print_graph.c (print_core, print_actions, print_state)
+	(print_graph): Likewise.
+	* src/conflicts.h: Adjust.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.hairy: Formatting/comment changes.
+	ANSIfy.
+	Remove `register' indications.
+	Add plenty of `static'.
+
+2001-12-27  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (prepare): Drop the muscle `ntbase' which
+	duplicates ntokens.
+	* src/bison.simple: Formatting/comment changes.
+	Use YYNTOKENS only, which is documented, but not YYNTBASE, which
+	is an undocumented synonym.
+
+2001-12-22  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_table_data): Change the prototype to use
+	`int' for array ranges: some invocations do pass an int, not a
+	short.
+	Reported by Wayne Green.
+
+2001-12-22  Akim Demaille  <akim@epita.fr>
+
+	Some actions of web2c.y are improperly triggered.
+	Reported by Mike Castle.
+
+	* src/lalr.c (traverse): s/F (i)[k] = F (j)[k]/F (j)[k] = F (i)[k]/.
+	* tests/regression.at (Web2c): Rename as...
+	(Web2c Report): this.
+	(Web2c Actions): New.
+
+2001-12-22  Akim Demaille  <akim@epita.fr>
+
+	Reductions in web2c.y are improperly reported.
+	Reported by Mike Castle.
+
+	* src/conflicts.c (print_reductions): Fix.
+	* tests/regression.at (Web2c): New.
+
+2001-12-18  Akim Demaille  <akim@epita.fr>
+
+	Some host fail on `assert (!"foo")', which expands to
+	((!"foo") ? (void)0 : __assert("!"foo."", __FILE__, __LINE__))
+	Reported by Nelson Beebee.
+
+	* src/output.c, src/vcg.c: Replace `assert (!"it succeeded")' with
+	`#define it_succeeded 0' and `assert (it_succeeded)'.
+
+2001-12-17  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple: Don't hard code the skeleton line and filename.
+	* src/output.c (output_parser): Rename 'line' as 'output_line'.
+	New line counter 'skeleton_line' (skeleton-line muscle).
+
+2001-12-17  Paul Eggert  <eggert@twinsun.com>
+
+	* NEWS, doc/bison.texinfo, doc/bison.1, doc/bison.rnh: Document that
+	YYDEBUG must be defined to a nonzero value.
+
+	* src/bison.simple (yytname): Do not assume that the user defines
+	YYDEBUG to a properly parenthesized expression.
+
+2001-12-17  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (state_t): Rename lookaheads as lookaheadsp.
+	nlookaheads is a new member.
+	Adjust all users.
+	* src/lalr.h (nlookaheads): Remove this orphan declaration.
+	* src/lalr.c (initialize_lookaheads): Set nlookaheads for each
+	state.
+
+2001-12-17  Akim Demaille  <akim@epita.fr>
+
+	* src/files.h, src/files.c (open_files, close_files): Remove.
+	* src/main.c (main): Don't open/close files, nor invoke lex_free,
+	let...
+	* src/reader.c (reader): Do it.
+
+2001-12-17  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (print_reductions): Formatting changes.
+
+2001-12-17  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (flush_shift): Also adjust lookaheadset.
+	(flush_reduce): New.
+	(resolve_sr_conflict): Adjust.
+
+2001-12-17  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_obstack): Be static and rename as...
+	(format_obstack): this, to avoid any confusion with files.c's
+	output_obstack.
+	* src/reader.h (muscle_obstack): Move to...
+	* src/output.h: here, since it's defined in output.c.
+
+2001-12-17  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (action_row, save_column, default_goto)
+	(sort_actions, matching_state, pack_vector): Better variable
+	locality.
+
+2001-12-17  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c: Various formatting changes.
+
+2001-12-17  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (output_files): Free the output_obstack.
+	* src/main.c (main): Call print and print_graph conditionally.
+	* src/print.c (print): Work unconditionally.
+	* src/print_graph.c (print_graph): Work unconditionally.
+	* src/conflicts.c (log_resolution): Output only if verbose_flag.
+
+2001-12-16  Marc Autret  <autret_m@epita.fr>
+
+	* src/output.c (actions_output): Fix. When we use %no-lines,
+	there is one less line per action.
+
+2001-12-16  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple: Remove a useless #line directive.
+	s/#line %%line %%skeleton/#line %%line "%%parser-file-name"/'.
+	* src/output.c (get_lines_number): New.
+	(output_parser): Adjust, now takes care about the lines of a
+	output muscles.
+	Fix line numbering.
+	(actions_output): Computes the number of lines taken by actions.
+	(output_master_parser): Insert new skeleton which is the name of
+	the output parser file name.
+
+2001-12-15  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple [YYERROR_VERBOSE]: Restore backward compatibility.
+
+2001-12-15  Marc Autret  <autret_m@epita.fr>
+
+	* src/output.c (output_gram): Keep track of the hairy one.
+
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+	Make `make distcheck' work.
+
+	* lib/Makefile.am (INCLUDES): Add top_srcdir/intl, since hash uses
+	system.h which uses libgettext.h.
+
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+	* src/nullable.c (set_nullable): Useless rules must be skipped,
+	otherwise, since we range over their symbols, we might look at a
+	nonterminal which no longer ``exists'', i.e., it is not counted in
+	`nvars', hence we overflow our arrays.
+
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+	The header can also be produced directly, without any obstack!
+	Yahoo!
+
+	* src/files.c, src/files.h (defines_obstack): Remove.
+	(compute_header_macro): Global.
+	(defines_obstack_save): Remove.
+	* src/reader.c (parse_union_decl): No longer output to
+	defines_obstack: its content can be found in the `stype' muscle
+	anyway.
+	(output_token_translations): Merge into...
+	(symbols_output): this.
+	Rename as...
+	(symbols_save): this.
+	(reader): Adjust.
+	* src/output.c (header_output): New.
+	(output): Call it.
+
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (parse_union_decl): Instead of handling two obstack
+	simultaneously, use one to define the `stype' muscle, and use the
+	value of the latter to fill defines_obstack.
+	(copy_comment): Remove.
+	(copy_comment2): Work for a single obstack.
+	Rename as...
+	(copy_comment): this.
+
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.c, src/lex.h (xgetc): No longer static.
+	* src/reader.c (parse_union_decl): Revamp.
+
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+	Still making progress in separating Bison into (i) input, (ii)
+	process, (iii) output: now we can directly output the parser file
+	without using table_obstack at all.
+
+	* src/files.c, src/files.h (table_obstack): Bye bye.
+	(parser_file_name): New.
+	* src/files.c (compute_output_file_names): Compute it.
+	* src/output.c (actions_output, output_parser)
+	(output_master_parser): To a file instead of an obstack.
+
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+	Attach actions to rules, instead of pre-outputting them to
+	actions_obstack.
+
+	* src/gram.h (rule_t): action and action_line are new members.
+	* src/reader.c (symbol_list): Likewise.
+	(copy_action): Save the actions within the rule.
+	(packgram): Save them in rule_table.
+	* src/output.c (actions_output): New.
+	(output_parser): Use it on `%%actions'.
+	(output_rule_data): Don't free rule_table.
+	(output): Do it.
+	(prepare): Don't save the `action' muscle.
+	* src/bison.simple: s/%%action/%%actions/.
+
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_action): When --yacc, don't append a `;'
+	to the user action: let it fail if lacking.
+	Suggested by Arnold Robbins and Tom Tromey.
+
+2001-12-14  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.c (literalchar): Simply return the char you decoded, non
+	longer mess around with obstacks and int pointers.
+	Adjust all callers.
+
+2001-12-14  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.c (literalchar): Don't escape the special characters,
+	just decode them, and keep them as char (before, eol was output as
+	the 2 char string `\n' etc.).
+	* src/output.c (output_rule_data): Use quotearg to output the
+	token strings.
+
+2001-12-13  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (YYSIZE_T, YYSTACK_ALLOC, YYSTACK_FREE):
+	Do not infringe on the global user namespace when using C++.
+	(YYFPRINTF, YYSTDERR): New macros, needed for the above.
+	All uses of `fprintf' and `stderr' changed.
+
+	* doc/bison.texinfo: Document YYFPRINTF, YYSTDERR.
+
+2001-12-13  Akim Demaille  <akim@epita.fr>
+
+	The computation of nullable is broken: it doesn't handle empty
+	RHS's properly.
+
+	* tests/torture.at (GNU AWK Grammar): New.
+	* tests/sets.at (Nullable): New.
+	* src/nullable.c (set_nullable): Instead of blindly looping over
+	`ritems', loop over the rules, and then over their rhs's.
+
+	Work around Autotest bugs.
+
+	* src/warshall.c (bitmatrix_print): Don't use `+--+' as table
+	frame, because Autotest understand lines starting with a `+' as
+	traces from the shell.  Then, they are not processed properly.
+	Admittedly an Autotest bug, but we don't have time to wait for
+	Autotest to catch up.
+	* tests/regression.at (Broken Closure): Adjust to the new table
+	frames.
+	Move to...
+	* tests/sets.at: here.
+
+2001-12-13  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (closure): Use nrules instead of playing tricks
+	with BITS_PER_WORD.
+
+2001-12-13  Akim Demaille  <akim@epita.fr>
+
+	* src/print.c (print_actions): Output the handling of `$' as the
+	traces do: shifting the token EOF.  Before EOF was treated as a
+	nonterminal.
+	* tests/regression.at: Adjust some tests.
+	* src/print_graph.c (print_core): Complete the set of items via
+	closure.  The next-to-final and final states are still unsatisfying,
+	but that's to be addressed elsewhere.
+	No longer output the rule numbers, but do output the state number.
+	A single loop for the shifts + gotos is enough, but picked a
+	distinct color for each.
+	(print_graph): Initialize and finalize closure.
+
+2001-12-13  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (readgram): Remove dead code, an strip useless
+	braces.
+	(get_type): Remove, unused.
+
+2001-12-12  Akim Demaille  <akim@epita.fr>
+
+	* src/complain.h, src/complain.c: Remove error_one_per_line, rely
+	on that of lib/error.c.
+
+2001-12-12  Akim Demaille  <akim@epita.fr>
+
+	Some hosts don't like `/' in includes.
+
+	* src/system.h: Include libgettext.h without qualifying the path.
+	* src/Makefile.am (INCLUDES): Add $(top_srcdir)/intl, remove
+	$(top_srcdir).
+
+2001-12-11  Marc Autret  <autret_m@epita.fr>
+
+	* src/output.c (output_parser): Remove useless muscle.
+
+2001-12-11  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple: Remove #line just before %%epilogue. It
+	is now handled in ...
+	* src/reader.c (read_additionnal_code): Add the output of a
+	#line for the epilogue.
+
+2001-12-10  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (copy_definition): Re-use CPP-outed code which
+	replace precedent remove.
+	* src/bison.simple: Remove #line before %%prologue because
+	%%input-line is wrong at this time.
+
+2001-12-10  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (symbols_output): Clean up.
+	* src/output.c (output_gram, output): Clean up.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (initialize_lookaheads): New.  Extracted from...
+	* src/LR0.c (set_state_table): here.
+	* src/lalr.c (lalr): Call it.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (shifts): Remove the `number' member: shifts are
+	attached to state, hence no longer need to be labelled with a
+	state number.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	Now that states have a complete set of members, the linked list of
+	shifts is useless: just fill directly the state's shifts member.
+
+	* src/state.h (shifts): Remove the `next' member.
+	* src/LR0.c (first_state, last_state): Remove.
+	Adjust the callers.
+	(augment_automaton): Don't look for the shifts that must be added
+	a shift on EOF: it is those of the state we looked for!  But now,
+	since shifts are attached, it is no longer needed to looking
+	merely by its id: its number.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (augment_automaton): Better variable locality.
+	Remove an impossible branch: if there is a state corresponding to
+	the start symbol being shifted, then there is shift for the start
+	symbol from the initial state.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (augment_automaton): Call `insert_eof_shifting_state'
+	only when appropriate: when insert_start_shifting_state' is not
+	invoked.
+	* tests/regression.at (Rule Line Numbers): Adjust.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (augment_automaton): Now that all states have shifts,
+	merge the two cases addition shifts to the initial state.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (set_state_table): Move to...
+	* src/LR0.c: here.
+	* src/lalr.c (lalr): Don't call it...
+	* src/LR0.c (generate_states): do it.
+	* src/LR0.h (first_state): Remove, only the table is used.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.h (first_shift, first_reduction): Remove.
+	* src/lalr.c: Don't use first_shift: find shifts through the
+	states.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c: Attach shifts to states as soon as they are
+	computed.
+	* src/lalr.c (set_state_table): Instead of assigning shifts to
+	state, just assert that the mapping was properly done.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (insert_start_shift): Rename as...
+	(insert_start_shifting_state): this.
+	(insert_eof_shifting_state, insert_accepting_state): New.
+	(augment_automaton): Adjust.
+	Better locality of the variables.
+	When looking if the start_symbol is shifted from the initial
+	state, using `while (... symbol != start_symbol ...)' sounds
+	better than `while (... symbol < start_symbol ...)': If fail
+	to see how the order between symbols could be relevant!
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.h: Don't declare `spec_name_prefix' and
+	`spec_file_prefix', declared by src/files.h.
+	* src/files.c, src/files.h: Default for spec_name_prefix is "yy".
+	* src/muscle_tab.c (muscle_init): Default prefix to NULL.
+	* src/output.c (prepare): Adjust.
+	* src/reader.c (symbols_output): Likewise.
+	* src/vmsgetargs.c: Vaguely adjust, but who cares?
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/muscle_tab.c (muscle_init): NULL is a better default than
+	`"0"'.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (reader): Calling symbols_output once is enough.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	Now that states have a complete set of members, the linked list of
+	reductions is useless: just fill directly the state's reductions
+	member.
+
+	* src/state.h (struct reductions): Remove member `number' and
+	`next'.
+	* src/LR0.c (first_reduction, last_reduction): Remove.
+	(save_reductions): Don't link the new reductions, store them in
+	this_state.
+	* src/lalr.c (set_state_table): No need to attach reductions to
+	states, it's already done.
+	* src/output.c (output_actions): No longer free the shifts, then
+	the reductions, then the states: free all the states and their
+	members.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/options.c (OPTN, DRTV, BOTH): New.
+	(option_table): Use them.
+
+	* src/muscle_tab.c: Don't include xalloc.h and string.h: that's
+	the job of system.h.
+	* src/options.c: Don't include stdio.h and xalloc.h for the same
+	reasons.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output, prepare): Make sure the values of the
+	muscles `action' and `prologue' are 0-terminated.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	Clean up GCC warnings.
+
+	* src/reader.c (copy_action): `buf' is not used.
+	(parse_skel_decl): Be static.
+	* src/muscle_tab.c (mhash1, mhash2, muscle_insert): Preserve `const'.
+	* src/options.h (create_long_option_table): Have a real prototype.
+	* lib/hash.c, lib/hash.h (hash_insert, hash_insert_at, hash_delete)
+	(hash_delete_at): Return const void *.
+	Adjust casts to preserve the const.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Require 2.52g.
+	M4 is not needed, but AUTOM4TE is.
+	* m4/m4.m4: Remove.
+	* tests/Makefile.am: Adjust.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	One structure for states is enough, even though theoretically
+	there are LR(0) states and LALR(1) states.
+
+	* src/lalr.h (state_t): Remove.
+	(state_table): Be state_t **, not state_t *.
+	* src/state.h (core, CORE_ALLOC): Rename as...
+	(state_t, STATE_ALLOC): this.
+	Add the LALR(1) members: shifts, reductions, errs.
+	* src/LR0.c (state_table): Rename as...
+	(state_hash): this, to avoid name clashes with the global
+	`state_table'.
+	* src/print_graph.c, src/LR0.c, src/LR0.h, src/conflicts.c
+	* src/lalr.c, src/lalr.h, src/output.c, src/print.c: Adjust.
+
+2001-12-10  Akim Demaille  <akim@epita.fr>
+
+	Bison dumps core on bash.y.
+	Reported by Pascal Bart.
+
+	* src/warshall.c (bitmatrix_print): New.
+	(TC): Use it.
+	When performing a transitive closure R(i, j) && R(j, k) => R(i, k),
+	j must be the outer loop.
+	* tests/regression.at (Broken Closure): New.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* tests/atlocal.in (CPPFLAGS): Do not leave a space between -I and
+	its argument.
+	Reported by Peter Hamorsky.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (err_table): Remove.
+	(resolve_sr_conflict): Adjust.
+	* src/lalr.h (state_t.reduction_table, state_t.shift_table):
+	Rename as...
+	(state_t.reductions, state_t.shifts): this.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (reduce_grammar_tables): No longer disable the
+	removal of useless rules via CPP but via `if (0)', so that the
+	compiler still check the code is valid.
+	For instance, it should have noticed `rline' no longer exists: use
+	the `line' member of rule_t.
+	* src/gram.c (dummy, rline): Remove, unused.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (pack_vector): Use assert, not berror.
+	* src/main.c (berror): Remove, unused.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	New experimental feature: if --verbose --trace output all the
+	items of a state, not only its kernel.
+
+	* src/print.c (print_core): If `trace_flag', then invoke closure
+	before outputting the items of the state (print_core is no longer
+	a correct name them).
+	(print_results): Invoke new_closure/free_closure if needed.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (new_itemsets): Use nshifts only, not shiftcount.
+	* src/closure.c, src/closure.h (itemsetsize): Rename as...
+	(nitemset): for consistency with the rest of the project.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (print_closure): Improve.
+	(closure): Use it for printing input and output.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (FIRSTS, FDERIVES): Adjust to reality: they are
+	indexed by nonterminals.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/warshall.c (TC, RTC): De-obsfucate (source reduced to 22% of
+	what it was!).
+	* src/warshall.h: Remove accidental duplication of the content.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (set_fderives): De-obfuscate.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (print_firsts, print_fderives): De-obfuscate.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (set_firsts): De-obfuscate.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (action_row): De-obfuscate
+	using the good o' techniques: arrays not pointers, variable
+	locality, BITISSET, RESETBIT etc.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	Pessimize the code to simplify it: from now on, all the states
+	have a valid SHIFTS, which NSHIFTS is possibly 0.
+
+	* src/LR0.c (shifts_new): Be global and move to..
+	* src/state.c, src/state.h: here.
+	* src/conflicts, src/lalr.c, src/output.c, src/print.c,
+	* src/print_graph: Adjust.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (SHIFT_DISABLE, SHIFT_IS_DISABLED): New.
+	* src/conflicts.c: Use it.
+	Restore a few missing `if (!SHIFT_IS_DISABLED)' which were
+	incorrectly ``simplified''.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (flush_shift, resolve_sr_conflict): De-obfuscate
+	using the good o' techniques: arrays not pointers, variable
+	locality, BITISSET, RESETBIT etc.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (SHIFT_SYMBOL): New.
+	* src/conflicts.c: Use it to deobfuscate.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (count_sr_conflicts, count_rr_conflicts)
+	(print_reductions): De-obfuscate using the good o' techniques:
+	arrays not pointers, variable locality, BITISSET.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (print_reductions): Arrays, not pointers.
+	Use BITISSET.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (print_reductions): Pessimize, but clarify.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (print_reductions): Improve variable locality.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (print_reductions): Pessimize, but clarify.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (print_reductions): Improve variable locality.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (SHIFT_IS_ERROR, SHIFT_IS_GOTO, SHIFT_IS_SHIFT): New.
+	* src/lalr.c: Use them.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (augment_automaton): Formatting changes.
+	Better variable locality.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (matrix_print): New.
+	(transpose): Use it.
+	Use arrays instead of pointers.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (maxrhs): Move to...
+	* src/gram.c, src/gram.h (ritem_longest_rhs): here.
+	* src/lalr.c (build_relations): Adjust.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (transpose): Free the memory allocated to the
+	argument, as it is replaced by the results by the unique caller.
+	(build_relations): Merely invoke transpose: it handles the memory
+	deallocation.
+	Improve variable locality.
+	Avoid variables used as mere abbreviations.
+	(compute_lookaheads): Use arrays instead of pointers.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (initialize_F): Improve variable locality.
+	Avoid variables used as mere abbreviations.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/derives.c (print_derives): Display the ruleno.
+	* src/lalr.c (initialize_F, transpose): Better variable locality
+	to improve readability.
+	Avoid variables used as mere abbreviations.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (traverse): Use arrays instead of pointers.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/nullable.c (set_nullable): Use a for loop to de-obfuscate
+	the handling of squeue.
+	`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	Because useless nonterminals are now kept alive (instead of being
+	`destroyed'), we now sometimes examine them, and store information
+	related to them.  Hence we need to know their number, and adjust
+	memory allocations.
+
+	* src/reduce.c, src/reduce.h (nuseless_nonterminals): No longer
+	static.
+	* src/LR0.c (allocate_itemsets): The memory allocated to
+	`symbol_count' was used for two different purpose: once to count
+	the number of occurrences of each symbol, and later reassigned to
+	`shift_symbol', containing the symbol that can be shifted from a
+	given state.
+	Deobfuscate, i.e., allocate, use and free `symbol_count' here
+	only, and...
+	(new_itemsets): Allocate `shift_symbol' here.
+	(allocate_itemsets): symbol_count includes useless nonterminals.
+	Make room for them.
+	(free_storage): Use `free', not `XFREE', for pointers that cannot
+	be null.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/nullable.c (set_nullable): Deobfuscate the handling of
+	ritem.
+	`symbol >= 0' is wrong now, use `rule_table[ruleno].useful'.
+
+2001-12-05  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.c, src/gram.h (ritem_print): New.
+	* src/gram.c (dummy): Remove, now there is actual code in gram.c.
+	(This useless function was defined only to work around VMS linkers
+	that can't handle compilation units with variables only).
+	* src/reduce.c (dump_grammar): Use it to trace the construction of
+	ritem.
+
+2001-12-04  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (union yyalloc): Change member names
+	to be the same as the stack names.
+	(yyparse): yyptr is now union yyalloc *, not char *.
+	(YYSTACK_RELOCATE): Likewise.  This avoids a GCC warning,
+	and may generate better code on some machines.
+	(yystpcpy): Use prototype if __STDC__ is defined, not just
+	if __cplusplus is defined.
+
+2001-11-30  Akim Demaille  <akim@epita.fr>
+
+	* configure.in (WARNING_CFLAGS): Add -Werror when possible.
+	(CFLAGS): Do not include the WARNING_CFLAGS here, since GNU
+	Gettext doesn't compile cleanly, and dies with -Werror.
+	* src/Makefile.am, lib/Makefile.am, tests/atlocal.in (CFLAGS):
+	Include WARNING_CFLAGS here.
+	* lib/xstrdup.c: Include xalloc.h, so that xstrdup be declared
+	before being defined.
+
+2001-11-27  Paul Eggert  <eggert@twinsun.com>
+
+	* lib/quotearg.h (quotearg_n, quotearg_n_style):
+	First arg is int, not unsigned.
+	* lib/quotearg.c (quotearg_n, quotearg_n_style): Likewise.
+	(SIZE_MAX, UINT_MAX): New macros.
+	(quotearg_n_options): Abort if N is negative.
+	Avoid overflow check on hosts where size_t is 64 bits and int
+	is 32 bits, as overflow is impossible there.
+	Fix off-by-one typo that caused unnecessary reallocation.
+
+2001-11-29  Paul Eggert  <eggert@twinsun.com>
+
+	Name space cleanup in generated parser.
+
+	* doc/bison.texinfo (Bison Parser): Discuss system headers
+	and their effect on the user name space.
+
+	* src/bison.simple:
+	(YYSTACK_ALLOC, YYSTACK_FREE, union yyalloc, YYSTACK_GAP_MAX,
+	YYSTACK_BYTES, YYSTACK_RELOCATE): Do not define unless necessary,
+	i.e. unless ! defined (yyoverflow) || defined (YYERROR_VERBOSE).
+
+	(YYSIZE_T): New macro.  Use it instead of size_t, to avoid infringing
+	on user names when possible.
+
+	(YYSTACK_USE_ALLOCA): Do not define; just use any existing defn.
+	Simplify test for whather <alloca.h> exists.
+
+	(<stdlib.h>): Include if we will use malloc, and if standard C or C++.
+
+	(<stdio.h>): Include if YYDEBUG.
+
+	(yymemcpy): Renamed from __yy_memcpy.  Do not define unless
+	! defined (yyoverflow) && ! defined (yymemcpy).
+
+	(yymemcpy, yyparse): Rename local variables as needed so that
+	they all begin with 'yy'.
+
+	(yystrlen, yystpcpy): New functions.
+
+	(YY_DECL_NON_LSP_VARIABLES): Renamed from _YY_DECL_VARIABLES.
+	All uses changed.
+
+	(yyparse): size_t -> YYSIZE_T.  Use yystrlen and yystpcpy
+	instead of relying on string.h functions.  Use YYSTACK_ALLOC
+	and YYSTACK_FREE instead of malloc and free.
+
+2001-11-30  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple (YYSTYPE, YYLTYPE): Move their definitions
+	before their first uses.
+	(YYBISON, YYPURE): Move to the top of the output.
+
+2001-11-30  Akim Demaille  <akim@epita.fr>
+
+	* tests/reduce.at (Useless Nonterminals): Fix.
+
+2001-11-30  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple (YYSTACK_FREE): Use `do {;} while (0)' as empty
+	if body instead of `;' to pacify GCC's warnings.
+
+2001-11-30  Akim Demaille  <akim@epita.fr>
+
+	Instead of mapping the LHS of unused rules to -1, keep the LHS
+	valid, but flag the rules as invalid.
+
+	* src/gram.h (rule_t): `useful' is a new member.
+	* src/print.c (print_grammar): Adjust.
+	* src/derives.c (set_derives): Likewise.
+	* src/reader.c (packgram, reduce_output): Likewise.
+	* src/reduce.c (reduce_grammar_tables): Likewise.
+	* tests/reduce.at (Underivable Rules, Useless Rules): New.
+
+2001-11-30  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (reduce_output): Formatting changes.
+	* src/print.c (print_results, print_grammar): Likewise.
+	* tests/regression.at (Rule Line Numbers)
+	(Solved SR Conflicts, Unresolved SR Conflicts): Adjust.
+
+2001-11-30  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (nonterminals_reduce): Instead of throwing away
+	useless nonterminals, move them at the end of the symbol arrays.
+	(reduce_output): Adjust.
+	* tests/reduce.at (Useless Nonterminals): Adjust.
+
+2001-11-30  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c: Various comment/formatting changes.
+	(nonterminals_reduce): New, extracted from...
+	(reduce_grammar_tables): here.
+	(reduce_grammar): Call nonterminals_reduce.
+
+2001-11-29  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (YYSTACK_REALLOC): Remove.
+	(YYSTACK_ALLOC): Resurrect this macro, with its old meaning.
+	(YYSTACK_FREE, YYSTACK_GAP_MAX, YYSTACK_BYTES, YYSTACK_RELOCATE):
+	New macros.
+	(union yyalloc): New type.
+	(__yy_memcpy): Last arg is size_t, not unsigned int, to remove
+	an arbitrary restriction on hosts where size_t is wider than int.
+
+	(yyparse): Don't dump core if alloca or malloc fails; instead, report
+	a parser stack overflow.  Allocate just one block of memory for all
+	three stacks, instead of allocating three blocks; this typically is
+	faster and reduces fragmentation.
+
+	Do not limit the number of items in the stack to a value that fits
+	in 'int', as this is an arbitrary limit on hosts with 64-bit
+	size_t and 32-bit int.
+
+2001-11-29  Marc Autret  <autret_m@epita.fr>
+
+	* tests/calc.at [AT_DATA_CALC_Y]: Use %error-verbose instead
+	of defining YYERROR_VERBOSE.
+	[AT_DATA]: $4 is now out of C declarations in the prologue.
+
+2001-11-28  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (parse_dquoted_param): New.
+	(parse_skel_decl): Use it.
+	* src/lex.h: Add its prototype.
+	* src/lex.c (literalchar): Become not static.
+
+2001-11-28  Marc Autret  <autret_m@epita.fr>
+
+	* src/output.h: And put its extern declaration here.
+	* src/output.c (error_verbose): Define here.
+	(prepare): Echo name modification.
+	* src/getargs.h: Clean its extern declaration.
+	* src/getargs.c (error_verbose_flag): Remove.
+	(getargs): Remove case 'e'.
+	* src/options.c (option_table): 'error-verbose' is now seen as simple
+	percent option.
+	Include output.h.
+
+	* src/reader.c (read_declarations): Remove case tok_include.
+	(parse_include_decl): Remove.
+	* src/lex.h (token_t): Remove tok_include.
+	* src/options.c (option_table): 'include' is now a simple command line
+	option.
+
+2001-11-28  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple: Adjust muscle names.
+	* src/muscle_tab.c (muscle_init): Also rename the muscles.
+	* src/output.c (prepare): s/_/-/ for the muscles names.
+	(output_parser): When scanning for a muscle, allow '-' instead of '_'.
+
+2001-11-28  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple: Fix debug.
+	[YYERROR_VERBOSE]: Re-integrate as an internal macro.
+
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (shifts_new): New.
+	(save_shifts, insert_start_shift, augment_automaton): Use it.
+
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (closure): `b' and `ruleno' denote the same value:
+	keep ruleno only.
+
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (closure): Instead of looping over word in array
+	then bits in words, loop over bits in array.
+
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (closure): No longer optimize the special case
+	where all the bits of `ruleset[r]' are set to 0, to make the code
+	clearer.
+
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (closure): `r' and `c' are new variables, used to
+	de-obfuscate accesses to RULESET and CORE.
+
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (reduce_print): Use ngettext.
+	(dump_grammar): Improve the trace accuracy.
+
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (dump_grammar): Don't translate trace messages.
+
+2001-11-28  Akim Demaille  <akim@epita.fr>
+
+	* tests/reduce.at (Useless Terminals, Useless Nonterminals): New.
+	* src/reduce.c (reduce_grammar_tables): Do not free useless tags,
+	as all tags are free'ed afterwards.
+	From Enrico Scholz.
+
+2001-11-27  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (YYSTACK_REALLOC): Fix typo that caused us to
+	use alloca when we didn't want to, and vice versa.
+
+2001-11-27  Marc Autret  <autret_m@epita.fr>
+
+	* src/muscle_tab.c (muscle_init): Remove 'verbose' muscle
+	initialization.
+	* src/output.c (prepare): Remove its update.
+
+2001-11-27  Marc Autret  <autret_m@epita.fr>
+
+	* tests/torture.at [AT_DATA]: Remove YYERROR_VERBOSE definition.
+	Use %error-verbose.
+
+2001-11-27  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple: Remove YYERROR_VERBOSE using.
+	Use %%error_verbose.
+	(yyparse): Likewise.
+	* src/output.c (prepare): Give its final value.
+	* src/muscle_tab.c (muscle_init): Init new muscle 'error_verbose'.
+	* src/getargs.h: Add its extern declaration.
+	* src/getargs.c (error_verbose_flag): New int.
+	(getargs): Update to catch new case.
+	* src/options.c (option_table): 'error-verbose' is a new option.
+	(shortopts): Update.
+
+2001-11-27  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: Use intl/libgettext.h.
+	* src/Makefile.am (INCLUDES): Add -I $(top_srcdir).
+
+2001-11-27  Akim Demaille  <akim@epita.fr>
+
+	* tests/torture.at (Exploding the Stack Size with Malloc):
+	s/YYSTACK_USE_ALLOCA_ALLOCA/YYSTACK_USE_ALLOCA/.
+
+2001-11-27  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c: Include error.h.
+	Reported by Hans Aberg.
+
+2001-11-26  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (parse_include_decl): New, not yet implemented.
+	(read_declarations): Add case tok_include.
+	* src/getargs.h (include): Add its extern definition.
+	* src/getargs.c (include): New const char *.
+	(getargs): Add case '-I'.
+	* src/options.c (option_table): Add include as command line and
+	percent option.
+	* src/lex.h (token_t): Add tok_include.
+
+2001-11-26  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (readgram): Make sure rules for mid-rule actions
+	have a lineno equal to that of their host rule.
+	Reported by Hans Aberg.
+	* tests/regression.at (Rule Line Numbers): New.
+
+2001-11-26  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (allocate_itemsets): kernel_size contains ints, not
+	size_ts.
+
+2001-11-26  Akim Demaille  <akim@epita.fr>
+
+	* src/complain.c, src/complain.h (error): Remove, provided by
+	lib/error.[ch].
+
+2001-11-26  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (read_declarations): Don't abort on tok_illegal,
+	issue an error message.
+	* tests/regression.at (Invalid %directive): New.
+	Reported by Hans Aberg.
+
+2001-11-26  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Invoke AC_FUNC_OBSTACK and AC_FUNC_ERROR_AT_LINE.
+	* lib/Makefile.am (libbison_a_SOURCES): Adjust.
+
+2001-11-26  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (conflicts_print): Don't complain at all when
+	there are no reduce/reduce conflicts, and as many shift/reduce
+	conflicts as expected.
+	* tests/regression.at (%expect right): Adjust.
+
+2001-11-23  Akim Demaille  <akim@epita.fr>
+
+	* lib/alloca.c: Update, from fileutils.
+
+2001-11-23  Akim Demaille  <akim@epita.fr>
+
+	* lib/Makefile.am (libbison_a_LIBADD): Add @ALLOCA@.
+
+2001-11-23  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: Include alloca.h.
+	* src/main.c (main) [C_ALLOCA]: Call alloca (0).
+
+2001-11-23  Akim Demaille  <akim@epita.fr>
+
+	* src/print_graph.c (print_actions): Remove `rule', unused.
+	* src/LR0.c (kernel_size): Contain `int' instead of `size_t' to
+	pacify GCC's signed < unsigned warnings.
+	* src/closure.c (itemsetsize): Likewise.
+	* src/reader.c (symbol_list_new): Static.
+
+2001-11-23  Akim Demaille  <akim@epita.fr>
+
+	Attaching lineno to buckets is stupid, since only one copy of each
+	symbol is kept, only the line of the first occurrence is kept too.
+
+	* src/symtab.h, src/symtab.c (bucket): Remove the line member.
+	* src/reader.c (rline_allocated): Remove, unused.
+	(symbol_list): Have a `line' member.
+	(symbol_list_new): New.
+	(readgram): Use it.
+	* src/print.c (print_grammar): Output the rule line numbers.
+	* tests/regression.at (Solved SR Conflicts)
+	(Unresolved SR Conflicts): Adjust.
+	Reported by Hans Aberg.
+
+2001-11-22  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple [YYERROR_VERBOSE]: Force its value to be 1 or 0.
+
+2001-11-22  Marc Autret  <autret_m@epita.fr>
+
+	* src/muscle_tab.c (muscle_init): Remove initialization of
+	skeleton muscle.
+	* src/output.c (output_master_parser): Do it here.
+
+2001-11-20  Akim Demaille  <akim@epita.fr>
+
+	* po/sv.po: New.
+	* configure.in (ALL_LINGUAS): Adjust.
+	* po/POTFILE.in: Remove `nullable.c' and `derives.c' which no
+	longer contains strings to translate.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (conflicts_print): Add a missing \n.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/nullable.c (nullable_print): New.
+	(set_nullable): Call it when tracing.
+	Better locality of variables.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/print.c (print_actions): Better locality of variables.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/derives.c (print_derives): Fix and enrich.
+	* src/closure.c (print_fderives): Likewise.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (itemsetend): Remove, replaced with...
+	(itemsetsize): new.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (kernel_end): Remove, replaced with...
+	(kernel_size): new.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (set_conflicts): Use arrays instead of pointers
+	to clarify.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c (closure): Use arrays instead of pointers to clarify.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c, src/derives.c, src/nullable.c: Adjust various
+	trace messages.
+	* src/LR0.c: Likewise.
+	(allocate_itemsets): Use arrays instead of pointers to clarify.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (statistics_flag): Replace with...
+	(trace_flag): New.
+	(longopts): Accept --trace instead of --statistics.
+	* src/getargs.h, src/options.c: Adjust.
+	* src/LR0.c, src/closure.c, src/derives.c, src/nullable.c,
+	* src/reduce.c: Use trace_flags instead of the CPP conditional TRACE.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (new_itemsets, get_state): Use more arrays and fewer
+	pointers to clarify the code.
+	(save_reductions, save_shifts): Factor common parts of alternatives.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (new_state, get_state): Complete TRACE code.
+	* src/closure.c: Include `reader.h' to get `tags', needed by the
+	trace code.
+	Rename the conditional DEBUG as TRACE.
+	Output consistently TRACEs to stderr, not stdout.
+	* src/derives.c: Likewise.
+	* src/reduce.c: (inaccessable_symbols): Using if is better style
+	than goto.
+	Use `#if TRACE' instead of `#if 0' for tracing code.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h (LIST_FREE, shortcpy): New.
+	* src/LR0.c: Use them.
+	* src/output.c (free_itemsets, free_reductions, free_shifts):
+	Remove, replaced by LIST_FREE.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (CORE_ALLOC, SHIFTS_ALLOC, ERRS_ALLOC)
+	(REDUCTIONS_ALLOC):  New.
+	* src/LR0.c, src/conflicts.c: Use them to de-obfuscate memory
+	allocation.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.c (new_state): Complete trace code.
+	* src/nullable.c (set_nullable): Don't translate traces.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/print_graph.c (print_core): Better locality of variables.
+	* src/print.c (print_core): Likewise.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/vcg.c: You do the output, so you are responsible of the
+	handling of VCG syntax, in particular: use quotearg.
+	* src/print_graph.c: Don't.
+	(print_actions): Don't output the actions as part of the nodes,
+	since that's the job of the edges.
+	(print_state): Don't output by hand: fill the node description,
+	and ask for its output.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple (yyparse): When verbosely reporting an error,
+	no longer put additional quotes around token names.
+	* tests/calc.at: Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h, src/symtab.c: `line' is a new member of `bucket'.
+	* src/reader.c (record_rule_lines, rline, rline_allocated): Remove.
+	* src/output.c: Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (rprec, rprecsym, rassoc): Remove, now part of...
+	(rule_t): this.
+	* src/conflicts.c, src/reader.c, src/reduce.c: Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (rule_t): New.
+	(rule_table): New.
+	(rrhs, rlhs): Remove, part of state_t.
+	* src/print_graph.c, src/closure.c, src/conflicts.c, src/derives.c,
+	* src/lalr.c, src/nullable.c, src/output.c, src/print.c,
+	* src/reader.c, src/reduce.c: Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (symbols_output): New, extracted from...
+	(packsymbols): Here.
+	(reader): Call it.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (set_maxrhs, maxrhs): Remove, replaced with...
+	(maxrhs): this new function.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (F): New macro to access the variable F.
+	Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h (LA): New macro to access the variable LA.
+	* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
+	* src/lalr.c: Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.c (initialize_LA): Only initialize LA.  Let...
+	(set_state_table): handle the `lookaheads' members.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h (lookaheads): Removed array, whose contents is now
+	a member of...
+	(state_t): this structure.
+	* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
+	Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h (consistent): Removed array, whose contents is now
+	a member of...
+	(state_t): this structure.
+	* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
+	Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h (reduction_table, shift_table): Removed arrays, whose
+	contents are now members of...
+	(state_t): this structure.
+	* src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
+	Adjust.
+
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h (state_t): New.
+	(state_table): Be a state_t * instead of a core **.
+	(accessing_symbol): Remove, part of state_t.
+	* src/lalr.c: Adjust.
+	(set_accessing_symbol): Merge into...
+	(set_state_table): this.
+	* src/print_graph.c, src/conflicts.c: Adjust.
+
+2001-11-14  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at, tests/output.at, tests/regression.at,
+	* tests/testsuite.at, tests/torture.at: Rely on Autotest 2.52g:
+	now the tests are run in private dirs, therefore AC_CLEANUP and
+	family can be simplified to 0-ary.
+	* tests/atlocal.in: Now that we run `elsewhere' than in tests/,
+	use abs. path to find config.h.
+	* tests/calc.at (AT_CHECK_CALC): Don't try to check the compiler's
+	stderr, there can be way too much random noise.
+	Instead pass -Werror to GCC and rely on the exit status.
+	Reported by Wolfram Wagner.
+
+2001-11-14  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple (yyparse): Let yyls1, yyss1 and yyvs1 be
+	defined only if yyoverflow is defined, to avoid `warning: unused
+	variable `yyvs1''.
+	Reported by The Test Suite.
+
+2001-11-14  Akim Demaille  <akim@epita.fr>
+
+	* src/print.c: Include reduce.h.
+	Reported by Hans Aberg.
+
+2001-11-14  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.c, src/lex.h (token_buffer, unlexed_token_buffer):
+	Revert a previous patch:  these are really const.
+	* src/conflicts.c (conflict_report): Additional useless pair of
+	braces to pacify GCC's warnings for `if () if () {} else {}'.
+	* src/lex.c (parse_percent_token): Replace equal_offset with
+	arg_offset.
+	arg is const.
+	Be sure to strdup `arg' when used, since there is no reason for
+	token_buffer not to change.
+
+2001-11-14  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h (EXIT_SUCCESS, EXIT_FAILURE): Ensure a proper
+	definition.
+	* src/main.c (main): Use them.
+	Suggested by Hans Aberg.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h (ngettext): Now that we use ngettext, be sure to
+	provide a default definition when NLS are not used.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Use `$' as shell prompt, not `%'.
+	Use @kbd to denote user input.
+	(Language and Grammar): ANSIfy the example.
+	Adjust its layout for info/notinfo.
+	(Location Tracking Calc): Output error messages to stderr.
+	Output locations in a more GNUtically correct way.
+	Fix a couple of Englishos.
+	Adjust @group/@end group pairs.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	%expect was not functioning at all.
+
+	* src/conflicts.c (expected_conflicts): Set to -1.
+	(conflict_report): Use ngettext.
+	(conflicts_print): Check %expect and make its violation an error.
+	* doc/bison.texinfo (Expect Decl): Adjust.
+	* configure.in (AM_GNU_GETTEXT): Ask for ngettext.
+	* tests/regression.at (%expect not enough, %expect right)
+	(%expect too much): New.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Conflicts): Rename as...
+	(Unresolved SR Conflicts): this.
+	(Solved SR Conflicts): New.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.c (print_results): Rename as...
+	(reduce_output): This.
+	Output to OUT, passed as argument, instead of output_obstack.
+	(dump_grammar): Likewise.
+	(reduce_free): New.
+	Also free V1.
+	(reduce_grammar): No longer call reduce_output, since...
+	* src/print.c (print_results): do it.
+	* src/main.c (main): Call reduce_free;
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (print_reductions): Accept OUT as argument.
+	Output to it, not to output_obstack.
+	* src/print.c (print_actions): Adjust.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (count_sr_conflicts, count_rr_conflicts): Return
+	the result instead of using...
+	(src_total, rrc_total, src_count, rrc_count): Remove.
+	(any_conflicts): Remove.
+	(print_conflicts): Split into...
+	(conflicts_print, conflicts_output): New.
+	* src/conflicts.h: Adjust.
+	* src/main.c (main): Invoke both conflicts_output and conflicts_print.
+	* src/print.c (print_grammar): Issue `\n' between two rules.
+	* tests/regression.at (Conflicts): New.
+	Reported by Tom Lane.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Invalid input): Remove, duplicate with
+	``Invalid input: 1''.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* tests/torture.at (AT_DATA_STACK_TORTURE)
+	(Exploding the Stack Size with Alloca)
+	(Exploding the Stack Size with Malloc): New.
+
+2001-11-12  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple (YYSTACK_REALLOC): New.
+	(yyparse) [!yyoverflow]: Use it and free the old stack.
+	Reported by Per Allansson.
+
+2001-11-12  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/bison.simple: Define type yystype instead of YYSTYPE, and
+	define CPP macro, which substitute YYSTYPE by yystype.
+	* src/reader.c (parse_union_decl): Output yystype/YYSTYPE as we do
+	with yyltype/YYLTYPE.  This allows inclusion of the generated
+	header within the parser if the compiler, such as GGC, accepts
+	multiple equivalent #defines.
+	From Akim.
+
+2001-11-05  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (symbols_output): New, extracted from...
+	(packsymbols): here.
+	(reader): Adjust.
+
+2001-11-05  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.c (parse_percent_token): s/quotearg/quote/.
+
+2001-11-05  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (AT_TEST_CPP_GUARD_H): Adjust the clean up
+	pattern.
+
+2001-11-05  Akim Demaille  <akim@epita.fr>
+
+	* src/options.h (struct option_table_struct): set_flags is void*.
+	* src/options.c (longopts): Support `--output' and `%output'.
+	(usage): Adjust.
+	* src/lex.h (tok_setopt): Remove, replaced with...
+	(tok_intopt, tok_stropt): these new guys.
+	* src/lex.c (getopt.h): Not needed.
+	(token_buffer, unlexed_token_buffer): Not const.
+	(percent_table): Promote `-' over `_' in directive names.
+	Active `%name-prefix', `file-prefix', and `output'.
+	(parse_percent_token): Accept possible arguments to directives.
+	Promote `-' over `_' in directive names.
+
+2001-11-04  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Decl Summary): Split the list into
+	`directives for grammars' and `directives for bison'.
+	Sort'em.
+	Add description of `%name-prefix', `file-prefix', and `output'.
+	Promote `-' over `_' in directive names.
+	(Bison Options): s/%locactions/%locations/.  Nice Freudian slip.
+	Simplify the description of `--name-prefix'.
+	Promote `-' over `_' in directive names.
+	Promote `--output' over `--output-file'.
+	Fix the description of `--defines'.
+	* tests/output.at: Exercise %file-prefix and %output.
+
+2001-11-02  Akim Demaille  <akim@epita.fr>
+
+	* doc/refcard.tex: Update.
+
+2001-11-02  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.h (SUNDEF): New.
+	* src/symtab.c (bucket_new): Init user_token_number to SUNDEF to
+	stand for `uninitialized', instead of 0.
+	* src/reader.c (packsymbols, parse_thong_decl): Adjust.
+	* src/lex.c (lex): Adjust.
+
+	* tests/calc.at (_AT_DATA_CALC_Y): Declare a token for EOF.
+	Number it 0.
+	Let yylex return it instead of a plain 0.
+	Reported by Dick Streefland.
+
+2001-11-02  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Mixing %token styles): New test.
+
+2001-11-02  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (parse_thong_decl): Formatting changes.
+	(token_translations_init): New, extracted from...
+	(packsymbols): Here.
+	Adjust.
+
+2001-11-01  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (AT_TEST_CPP_GUARD_H): New.
+	Check that `9foo.y' produces correct cpp guards.
+	* src/files.c (compute_header_macro): Prepend `BISON_' to CPP
+	guards.
+	Reported by Wwp.
+
+2001-11-01  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Invalid input: 2): New.
+	* src/lex.c (unlexed_token_buffer): New.
+	(lex, unlex): Adjust: when unlexing, be sure to save token_buffer
+	too.
+	Reported by Wwp.
+
+2001-11-01  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at: Catch up with 1.30.
+	* configure.in: Bump to 1.49a.
+	Adjust to newer Autotest.
+
+2001-10-19  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/conflicts.c: Move global variables rrc_total and src_total ...
+	(print_conflicts): here.
+	* src/output.c (output): Free global variable user_toknums.
+	* src/lex.c (token_obstack): Become static.
+
+2001-10-18  Akim Demaille  <akim@epita.fr>
+
+	* tests/atlocal.in (GCC): Add.
+	* tests/calc.at: s/m4_match/m4_bmatch/.
+	s/m4_patsubst/m4_bpatsubst/.
+	(AT_CHECK_CALC): Check the compiler's stderr only if it's GCC.
+	* configure.in: AC_SUBST(GCC).
+
+2001-10-14  Marc Autret  <autret_m@epita.fr>
+
+	* src/options.c (create_long_option_table): Fix.
+
+2001-10-10  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.simple: Be sure to set YYSTACK_USE_ALLOCA.
+
+2001-10-04  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (parse_union_decl): Push the caracters in
+	union_obstack, not attrs_obstack.
+
+2001-10-04  Akim Demaille  <akim@epita.fr>
+
+	Merge in the branch 1.29.
+
+	* src/reader.c (packsymbols): Use a temporary obstack for
+	`%%tokendef', since output_stack is already used elsewhere.
+
+	2001-10-02  Akim Demaille  <akim@epita.fr>
+
+	Bump 1.29d.
+
+	2001-10-02  Akim Demaille  <akim@epita.fr>
+
+	Version 1.29c.
+
+	2001-10-02  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Invalid CPP headers): New.
+	From Alexander Belopolsky.
+	* src/files.c (compute_header_macro): Map non alnum chars to `_'.
+
+	2001-10-02  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.at (Invalid input): New.
+	* src/lex.c (lex): Be sure to set `token_buffer' in any case.
+	Reported by Shura.
+
+	2001-10-02  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at: Now that --debug works, the tests must be adjusted.
+
+	2001-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_parser): Assert `skeleton'.
+	* src/files.c (skeleton_find): Look harder for skeletons on DOSish
+	systems.
+	From Shura.
+
+	2001-10-01  Marc Autret  <autret_m@epita.fr>
+
+	* src/lex.h: Echo modifications.
+	* src/lex.c (unlex): Parameter is now token_t.
+	From Hans Aberg.
+
+	2001-10-01  Marc Autret  <autret_m@epita.fr>
+
+	* src/main.c: Include lex.h.
+	From Hans Aberg.
+
+	2001-09-29  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (longopts): `--debug' is `-t', not `-d'.
+
+	2001-09-28  Akim Demaille  <akim@epita.fr>
+
+	* tests/testsuite.at: Update to newer Autotest.
+	* tests/Makefile.am (EXTRA_DIST): bison is not to be shipped.
+
+	2001-09-27  Akim Demaille  <akim@epita.fr>
+
+	Position independent wrapper.
+
+	* tests/bison: Remove.
+	* tests/bison.in: New.
+	* configure.in: Adjust.
+
+	2001-09-27  Paul Eggert  <eggert@twinsun.com>
+
+	Port quotearg fixes from tar 1.13.24.
+
+	* lib/quotearg.c: BSD/OS 4.1 wchar.h requires FILE and struct
+	tm to be declared.
+	(HAVE_MBSINIT): Undef if !HAVE_MBRTOWC.
+	(mbsinit): Define to 1 if !defined mbsinit && !HAVE_MBSINIT.
+
+	* m4/Makefile.am (EXTRA_DIST): Add mbrtowc.m4.
+	* m4/mbrtowc.m4: New file.
+	* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Check for mbsinit and stddef.h.
+	Use jm_FUNC_MBRTOWC instead of AC_CHECK_FUNCS(mbrtowc).
+
+	2001-09-27  Akim Demaille  <akim@epita.fr>
+
+	Bump to 1.29c.
+
+	2001-09-27  Akim Demaille  <akim@epita.fr>
+
+	Version 1.29b.
+
+	2001-09-25  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: Include `xalloc.h'.
+	Remove it from the C files.
+	* src/files.c (output_files): Free the obstacks.
+	* src/lex.c (init_lex): Rename as...
+	(lex_init): this.
+	(lex_free): New.
+	* src/main.c (main): Use it.
+
+	2001-09-24  Marc Autret  <autret_m@epita.fr>
+
+	* src/vcg.c (open_edge, close_edge, open_node, close_node): Change
+	to output informations in fout (FILE*).
+	(open_graph, close_graph): Likewise.
+	(output_graph, output_edge, output_node): Likewise.
+	* src/vcg.h: Update function prototypes.
+	* src/print_graph.c (print_graph): Open output graph file.
+	(print_actions): Adjust.
+	* src/files.h: Remove extern declaration.
+	* src/files.c: Remove graph_obstack declaration.
+	(open_files): Remove graph_obstack initialization.
+	(output_files): Remove graph_obstack saving.
+
+	2001-09-24  Marc Autret  <autret_m@epita.fr>
+
+	* src/files.c (compute_output_file_names): Fix.
+
+	2001-09-24  Marc Autret  <autret_m@epita.fr>,
+		    Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (reader): Remove call to free_symtab ().
+	* src/main.c (main): Call it here.
+	Include symtab.h.
+	* src/conflicts.c (initialize_conflicts): Rename as...
+	(solve_conflicts): this.
+	* src/print.c (print_core, print_actions, print_state)
+	(print_grammar): Dump to a file instead a `output_obstack'.
+	(print_results): Dump `output_obstack', and then proceed with the
+	FILE *.
+	* src/files.c (compute_output_file_names, close_files): New.
+	(output_files): Adjust.
+	* src/main.c (main): Adjust.
+
+	2001-09-23  Marc Autret  <autret_m@epita.fr>
+
+	* src/files.c (compute_header_macro): Computes header macro name
+	from spec_defines_file when given.
+
+	2001-09-23  Marc Autret  <autret_m@epita.fr>
+
+	* src/files.c (output_files): Add default extensions.
+
+	2001-09-22  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (finalize_conflicts): Rename as...
+	(free_conflicts): this.
+
+	2001-09-22  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.c (gram_free): Rename back as...
+	(dummy): this.
+	(output_token_translations): Free `token_translations'.
+	* src/symtab.c (free_symtab): Free the tag field.
+
+	2001-09-22  Akim Demaille  <akim@epita.fr>
+
+	Remove `translations' as it is always set to true.
+
+	* src/gram.h: Adjust.
+	* src/reader.c (packsymbols, parse_token_decl): Adjust
+	* src/print.c (print_grammar): Adjust.
+	* src/output.c (output_token_translations): Adjust.
+	* src/lex.c (lex): Adjust.
+	* src/gram.c: Be sure the set pointers to NULL.
+	(dummy): Rename as...
+	(gram_free): this.
+
+	2001-09-22  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Invoke AM_LIB_DMALLOC.
+	* src/system.h: Use dmalloc.
+	* src/LR0.c: Be sure to have pointers initialized to NULL.
+	(allocate_itemsets): Allocate kernel_items only if needed.
+
+	2001-09-22  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Bump to 1.29b.
+	* tests/Makefile.am (DISTCLEANFILES): Add package.m4.
+	* tests/calc.at (_AT_DATA_CALC_Y): #undef malloc so that we don't
+	need xmalloc.c in calc.y.
+	From Pascal Bart.
+
+	2001-09-21  Akim Demaille  <akim@epita.fr>
+
+	Version 1.29a.
+	* Makefile.maint, config/config.guess, config/config.sub,
+	* config/missing: Update from masters.
+	* tests/Makefile.am ($(srcdir)/$(TESTSUITE)): No longer depend
+	upon package.m4.
+	* configure.in (ALL_LINGUAS): Add `tr'.
+
+	2001-09-21  Akim Demaille  <akim@epita.fr>
+
+	* tests/Makefile.am (package.m4): Move to...
+	($(srcdir)/$(TESTSUITE)): here.
+
+	2001-09-20  Akim Demaille  <akim@epita.fr>
+
+	* src/complain.c: No longer try to be standalone: use system.h.
+	Don't assume __STDC__ is defined to 1. Just test if it is defined.
+	* src/complain.h: Likewise.
+	* src/reduce.c (useless_nonterminals, inaccessable_symbols):
+	Remove the unused variable `n'.
+	From Albert Chin-A-Young.
+
+	2001-09-18  Marc Autret  <autret_m@epita.fr>
+
+	* doc/bison.1: Update.
+	* doc/bison.texinfo (Bison Options): Update --defines and --graph
+	descriptions.
+	(Option Cross Key): Update.
+	Add --graph.
+
+	2001-09-18  Marc Autret  <autret_m@epita.fr>
+
+	* tests/regression.at: New test (comment in %union).
+
+	2001-09-18  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (parse_union_decl): Do not output '/'. Let copy_comment
+	do that.
+	Reported by Keith Browne.
+
+	2001-09-18  Marc Autret  <autret_m@epita.fr>
+
+	* tests/output.at: Add tests for --defines and --graph.
+
+	2001-09-18  Marc Autret  <autret_m@epita.fr>
+
+	* tests/output.at: Removes tests of %{header,src}_extension features.
+
+	2001-09-18  Akim Demaille  <akim@epita.fr>
+
+	* tests/Makefile.am (package.m4): New.
+	* tests/calc.at (_AT_CHECK_CALC): Just run `calc input'.
+	(_AT_CHECK_CALC_ERROR): Likewise.
+	Factor the `, ' part of verbose error messages.
+
+	2001-09-18  Marc Autret  <autret_m@epita.fr>
+
+	* src/getargs.c (longopts): Declare --defines and --graph as options
+	with optional arguments.
+	* src/files.h: Add extern declarations.
+	* src/files.c (spec_graph_file, spec_defines_file): New.
+	(output_files): Update.
+	Remove CPP-outed code.
+
+	2001-09-18  Marc Autret  <autret_m@epita.fr>
+
+	Turn off %{source,header}_extension feature.
+
+	* src/files.c (compute_exts_from_gf): Update.
+	(compute_exts_from_src): Update.
+	(output_files): CPP-out useless code.
+	* src/files.h: Remove {header,source}_extension extern declarations.
+	* src/reader.c (parse_dquoted_param): CPP-out.
+	(parse_header_extension_decl): Remove.
+	(parse_source_extension_decl): Remove.
+	(read_declarations): Remove cases tok_{hdrext,srcext}.
+	* src/lex.c (percent_table): Remove {header,source}_extension entries.
+	* src/lex.h (token_t): Remove tok_hdrext and tok_srcext.
+
+	2001-09-10  Akim Demaille  <akim@epita.fr>
+
+	* tests/output.at (AT_CHECK_BISON_FLAGS, AT_CHECK_BISON_PERCENT):
+	(AT_CHECK_BISON_PERCENT_FLAGS): Merge into...
+	(AT_CHECK_OUTPUT): this.
+	Merely check ls' exit status, its output is useless.
+
+	2001-09-10  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.at: Use m4_match.
+	(_AT_DATA_CALC_Y): Check `yyin != NULL', not `stdin != NULL'.
+
+	2001-09-10  Marc Autret  <autret_m@epita.fr>,
+		    Akim Demaille  <akim@epita.fr>
+
+	* src/vcg.h (graph_s): color, textcolor, bordercolor are now
+	enum color_e.
+	* src/print_graph.c (print_graph): Initalize graph.layoutalgorithm
+	to `normal'.
+	* src/reader.c (parse_token_decl): Initialize token with tok_eof.
+	* src/lex.h: Adjust prototype.
+	(token_t): Add `tok_undef'.
+	* src/lex.c (struct percent_table_struct): Retval is now a token_t.
+	(parse_percent_token): Now returns token_t.
+	Add default statement in switch.
+	(lex): Separate `c' as an input variable, from the token_t result
+	part.
+	(unlexed): Is a token_t.
+
+	2001-09-10  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Bump to 1.29a.
+
+	2001-09-07  Akim Demaille  <akim@epita.fr>
+
+	Version 1.29.
+
+	2001-08-30  Akim Demaille  <akim@epita.fr>
+
+	* tests/atgeneral.m4, tests/atconfig.in, tests/suite.at: Remove.
+	* m4/atconfig.m4: Remove.
+	* tests/testsuite.at, tests/atlocal.in, tests/output.at,
+	* tests/bison: New.
+	* tests/regression.at, tests/calc.at: Use m4_define, AT_BANNER,
+	m4_if, m4_patsubst, and m4_regexp.
+	* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Use an
+	`input' file instead of echo.
+
+	2001-08-29  Akim Demaille  <akim@epita.fr>
+
+	Bump to 1.28e.
+
+	2001-08-29  Akim Demaille  <akim@epita.fr>
+
+	Version 1.28d.
+
+	2001-08-29  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (yyparse): Don't take the address of an
+	item before the start of an array, as that doesn't conform to
+	the C Standard.
+
+	2001-08-29  Robert Anisko  <anisko_r@epita.fr>
+
+	* doc/bison.texinfo (Location Tracking Calc): New node.
+
+	2001-08-29  Paul Eggert  <eggert@twinsun.com>
+
+	* src/output.c (output): Do not define const, as this now
+	causes more problems than it cures.
+
+	2001-08-29  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Modernize `@node' and `@top' use: just name
+	the nodes.
+	Be sure to tag the `detailmenu'.
+
+	2001-08-29  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.maint (do-po-update): Wget refuses to overwrite files:
+	download in a tmp dir.
+
+	2001-08-28  Marc Autret  <autret_m@epita.fr>
+
+	* config/depcomp: New file.
+
+	2001-08-28  Marc Autret  <autret_m@epita.fr>
+
+	* doc/bison.1 (mandoc): Adjust.
+	From Juan Manuel Guerrero.
+
+	2001-08-28  Marc Autret  <autret_m@epita.fr>
+
+	* src/print_graph.c (print_state): Fix.
+
+	2001-08-27  Marc Autret  <autret_m@epita.fr>
+
+	* src/vcg.h (classname_s, infoname_s, node_s): Constify the
+	char * members.
+	Echo modifications to the functions prototypes.
+	* src/vcg.c (add_classname, add_infoname): Adjust arguments.
+
+	2001-08-27  Marc Autret  <autret_m@epita.fr>
+
+	* src/vcg.c: Include `xalloc.h'.
+	(add_colorentry): New.
+	(add_classname): New.
+	(add_infoname): New.
+	* src/vcg.h: Add new prototypes.
+
+	2001-08-27  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.maint: Sync. again with CVS Autoconf.
+
+	2001-08-27  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.maint: Formatting changes.
+	(po-update, cvs-update, update): New targets.
+	(AMTAR): Remove.
+
+	2001-08-27  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.am (AUTOMAKE_OPTIONS): 1.5.
+	* Makefile.maint: Sync. with CVS Autoconf.
+
+	2001-08-27  Marc Autret  <autret_m@epita.fr>
+
+	* src/vcg.h (struct infoname_s): New.
+	(struct colorentry_s): New.
+	(graph_s): New fields {vertical,horizontal}_order in structure.
+	Add `infoname' field.
+	Add `colorentry' field;
+	* src/vcg_defaults.h (G_VERTICAL_ORDER): New.
+	(G_HORIZONTAL_ORDER): New.
+	(G_INFONAME): New.
+	(G_COLORENTRY): New.
+	* src/vcg.c (output_graph): Add output of {vertical,horizontal}_order.
+	Add output of `infoname'.
+	Add output of `colorentry'.
+
+	2001-08-27  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (parse_dquoted_param): Rename variable `index' to `i'.
+	This one shadowed a global parameter.
+
+	2001-08-24  Marc Autret  <autret_m@epita.fr>
+
+	* src/print_graph.c (node_output_size): Declared POSIX `size_t' type,
+	instead of `unsigned'.
+	(print_state): Do not call obstack_object_size () in obstack_grow ()
+	to avoid macro variables shadowing.
+
+	2001-08-23  Marc Autret  <autret_m@epita.fr>
+
+	* src/lex.c (percent_table): Typo: s/naem/name/.
+	Add graph option.
+	Normalize new options declarations.
+
+	2001-08-20  Pascal Bart  <pascal.bart@epita.fr>
+
+	* tests/suite.at: Exercise %header_extension and %source_extension.
+
+	2001-08-16  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (parse_dquoted_param): New.
+	(parse_header_extension_decl): Use it.
+	(parse_source_extension_decl): Likewise.
+
+	2001-08-16  Marc Autret  <autret_m@epita.fr>
+
+	* src/vcg.c: Remove includes of `complain.h' and `xalloc.h'.
+	(get_xxxx_str): Use assert () instead of complain ().
+	Remove return invokations in default cases.
+	(get_decision_str): Modify default behaviour. Remove second argument.
+	Echo modifications on calls.
+	(output_graph): Fix.
+
+	2001-08-16  Marc Autret  <autret_m@epita.fr>
+
+	* src/getargs.c (usage): Update with ``-g, --graph''.
+
+	2001-08-16  Marc Autret  <autret_m@epita.fr>
+
+	* doc/bison.texinfo (Bison Options): Add items `-g', `--graph'.
+	(Option Cross Key): Likewise.
+	* doc/bison.1: Update.
+
+2001-09-25  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/output.c (output_master_parser): Don't finish action_obstack.
+	(output_parser): Don't care about the muscle action, here.
+	(prepare): Copy the action_obstack in the action muscle.
+	(output): Free action_obstack.
+
+2001-09-23  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/reader.c (parse_union_decl): Add new obstack union_obstack.  Which
+	will contain `%union' declaration.
+	(parse_union_decl): Delete #line directive output.
+	(parse_union_decl): Substitute /attrs_obstack/union_obstack for all
+	informations about %union.
+	(parse_union_decl): Copy the union_obstack in the muscle stype.
+	* src/bison.simple: Add new #line directive.
+	Add typdef %%stype YYSTYPE.
+
+2001-09-23  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/bison.simple: Add new `#line' directive.
+
+2001-09-22  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/bison.simple: New `#line' directive.
+	* src/output.c (output_parser): Support new dynamic muscle input_line.
+
+2001-09-22  Marc Autret  <autret_m@epita.fr>
+
+	* src/output.c (output_master_parser): New.
+	(output_parser): Be more re-entrant.
+
+2001-09-21  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (copy_definition, parse_union_decl): Update and use
+	`linef' muscle.
+	(copy_action): Likewise.
+	Use obstack_1grow ().
+	* src/muscle_tab.c (muscle_init): Add muscle `linef'.
+
+2001-09-21  Marc Autret  <autret_m@epita.fr>
+
+	* src/options.c (option_table): Adjust.
+	* src/lex.c (parse_percent_token): Fix.
+
+2001-09-20  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/options.c (symtab.h): Include it, need by lex.h.
+
+2001-09-20  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/lex.c (parse_percent_token): Change type of variable `tx', which
+	is now an option_table_struct*.
+	(option_strcmp): New function option_strcmp.
+	(parse_percent_token): Call option_strcmp.
+	* src/getargs.c (xalloc.h, options.h): Include it.
+	(getargs): Call create_long_option_table.
+	(getargs): Free longopts at the end of the function.
+	(shortopts): Move in options.c.
+	* src/options.c (create_long_option_table): New function.  Convert
+	information from option_table to option structure.
+	* src/reader.c (options.h): Include it.
+
+	* src/Makefile.am: Adjust.
+	* src/options.c (option_table): Create from longopts and percent_table.
+	* src/getargs.c (longopts): Delete.
+	* src/lex.c (struct percent_table_struct): Delete.
+	(percent_table): Delete.
+	(options.h): Include it.
+	* src/options.c: Create.
+	* src/options.h: Create.
+	Declare enum opt_access_e.
+	Define struct option_table_struct.
+
+2001-09-20  Marc Autret  <autret_m@epita.fr>
+
+	* doc/bison.texinfo: Adjust terminologies about prologue and epilogue
+	sections of Bison.
+
+2001-09-19  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/bison.simple: s/%%filename/%%skeleton.
+	* src/muscle_tab.c (getargs.h): Include it.
+	(muscle_init): Insert new muscle skeleton.
+
+2001-09-18  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/output.c (output_parser): Delete unused variable actions_dumped.
+
+2001-09-07  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/output.c (output): Delete call to reader_output_yylsp.
+	* src/reader.c (reader): Likewise.
+	* src/reader.h: Delete declaration of reader_output_yylsp.
+
+2001-09-02  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c: Include muscle_tab.h.
+	(parse_union_decl): Update.
+	(parse_macro_decl): Rename parse_muscle_decl.
+	Update to use renamed functions and variable.
+	(read_declarations, copy_action, read_additionnal_code, : Updated
+	with correct variables and functions names.
+	(packsymbols, reader): Likewise.
+
+	* src/reader.h (muscle_obstack): Extern declaration update.
+
+	* src/output.c: Include muscle_tab.h
+	In all functions using macro_insert, change by using muscle_insert ().
+	(macro_obstack): Rename muscle_obstack.
+	Echo modifications in the whole file.
+	(MACRO_INSERT_INT): Rename MUSCLE_INSERT_INT.
+	(MACRO_INSERT_STRING): Rename MUSCLE_INSERT_STRING.
+	(MACRO_INSERT_PREFIX): Rename MUSCLE_INSERT_PREFIX.
+
+	* src/muscle_tab.h: Update double inclusion macros.
+	(macro_entry_s): Rename muscle_entry_s.
+	Update prototypes.
+
+	* src/muscle_tab.c: Include muscle_tab.h.
+	Rename macro_tabble to muscle_table.
+	(mhash1, mhash2, mcmp): Use muscle_entry.
+	(macro_init): Rename muscle_init. Update.
+	(macro_insert): Rename muscle_insert. Update.
+	(macro_find): Rename muscle_find. Update.
+
+	* src/main.c: Include muscle_tab.h.
+	(main): Call muscle_init ().
+	* src/Makefile.am (bison_SOURCES): Echo modifications.
+
+2001-09-02  Marc Autret  <autret_m@epita.fr>
+
+	Now the files macro_tab.[ch] are named muscle_tab.[ch].
+
+	* src/muscle_tab.c, src/muscle_tab.h: Add files.
+
+2001-09-02  Marc Autret  <autret_m@epita.fr>
+
+	* src/macrotab.c, src/macrotab.h: Remove.
+
+2001-09-01  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/reader.c (copy_guard): Use muscle to specify the `#line'
+	filename.
+
+2001-09-01  Marc Autret  <autret_m@epita.fr>
+
+	* tests/calc.at (exp): Now, YYERROR_VERBOSE need to be set
+	to an explicit value to activate the feature. We do it here.
+
+2001-08-31  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/output.c (prepare): Delete the `filename' muscule insertion.
+	* src/reader.c (copy_action): Use `filename' muscule with `#line'.
+	(parse_union_decl): Likewise.
+	* src/macrotab.c (macro_init): Initialize filename by infile.
+
+2001-08-31  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple (YYLSP_NEEDED): New definition.
+	* src/output.c (prepare): Add macro insertion of `locations_flag'
+
+2001-08-31  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/output.c (prepare): Delete insertion of previous muscles,
+	and insert the `prefix' muscles.
+	* src/macrotab.c (macro_init): Likewise.
+	(macro_init): Initialization prefix directive by `yy'.
+	* src/bison.simple: Substitute all %%yylex, %%yychar, %%yylval,
+	%%yydebug, %%yyerror, %%yynerrs and %%yyparse by yylex, yychar,
+	yylval, yydebug, yyerror, yynerrs and yyparse.
+	New directive `#define' to substitute yydebug, ... with option
+	name_prefix.
+
+2001-08-31  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/main.c (main): Standardize.
+	* src/output.c (output_table_data, output_parser): Likewise.
+	* src/macrotab.h, src/macrotab.c, src/bison.simple: Likewise.
+
+2001-08-31  Pascal Bart  <pascal.bart@epita.fr>, Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (read_additionnal_code): Rename %%user_code to
+	%%epilogue.
+	* src/output.c (output): Rename %%declarations to %%prologue.
+	* src/bison.simple: Echo modifications.
+
+2001-08-31  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (readgram): CleanUp.
+	(output_token_defines): Likewise.
+	(packsymbols): Likewise.
+	(reader): Likewise.
+	* src/output.c (output): CPP-out useless code.
+
+2001-08-31  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/reader.c (reader): Delete obsolete call to function
+	output_trailers and output_headers.
+	* src/output.h: Remove obsolete functions prototypes of output_headers
+	and output_trailers.
+
+2001-08-30  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/main.c: Include macrotab.h.
+	* src/macrotab.h (macro_entry_s): Constify fields.
+	Adjust functions prototypes.
+	* src/macrotab.c (macro_insert): Constify key and value.
+	(macro_find): Constify key.
+	(macro_insert): Include 'xalloc.h'
+	(macro_insert): Use XMALLOC.
+	(macro_find): Constify return value.
+	* src/output.c (output_table_data): Rename table to table_data.
+	(output_parser): Constify macro_key, macro_value.
+
+2001-08-30  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (parse_skel_decl): New.
+	(read_declarations): Add case `tok_skel', call parse_skel_decl ().
+	* src/lex.h (token_t): New token `tok_skel'.
+	* src/lex.c (percent_table): Add skeleton option entry.
+	Standardize.
+
+2001-08-29  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple: Add %%user_code directive at the end.
+	* src/reader.c (read_additionnal_code): New.
+	(reader): Use it.
+	* src/output.c (output_program): Remove.
+	(output): Update.
+
+2001-08-28  Marc Autret  <autret_m@epita.fr>
+
+	* src/output.c (output_actions): Clean up.
+	(output_gram): CPP-out useless code.
+	* src/reader.c (reader): Clean up, CPP-out useless code.
+
+2001-08-28  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/output.c (output): Copy attrs_obstack in the '%%definitions'
+	directive.
+	* src/bison.simple: Add `%%definitions'.
+
+2001-08-28  Marc Autret  <autret_m@epita.fr>
+
+	* config/depcomp: New file.
+
+2001-08-27  Paul Eggert  <eggert@twinsun.com>
+
+	* src/bison.simple (yyparse): Don't take the address of an
+	item before the start of an array, as that doesn't conform to
+	the C Standard.
+
+2001-08-27  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/output.c (output): Remove the initialization of the macro
+	obstack.  It was done too late here.
+
+	* src/reader.c (parse_macro_decl): Fix.  Use of the macro obstack was
+	completely wrong.
+	(reader): Initialize the macro obstack here, since we need it to grow
+	'%define' directives.
+
+	* src/reader.h: Declare the macro obstack as extern.
+
+2001-08-27  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/output.c (output_parser): Fix.  Store single '%' characters in
+	the output obstack instead of throwing them away.
+
+2001-08-27  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.am (AUTOMAKE_OPTIONS): 1.5.
+
+2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+
+	* lib/Makefile.am: Adjust.
+
+2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/bison.simple: Update and add '%%' directives.
+
+2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/reader.c (reader): Remove calls to 'output_headers' and
+	'output_trailers'. Remove some C output.
+	(readgram): Disable a piece of code that was writing a default
+	definition for 'YYSTYPE'.
+	(reader_output_yylsp): Remove.
+	(packsymbols): Output token defintions to a macro.
+	(copy_definition): Disable C output.
+
+	* src/reader.c (parse_macro_decl): New function used to parse macro
+	declarations.
+	(copy_string2): Put the body of copy_string into this new function.
+	Add a parameter to let the caller choose whether he wants to copy the
+	string delimiters or not.
+	(copy_string): Be a simple call to copy_string2 with the last argument
+	bound to true.
+	(read_declarations): Add case for macro definition.
+	(copy_identifier): New.
+	(parse_macro_decl): Read macro identifiers using copy_identifier
+	rather than lex.
+
+2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/output.c (prepare): Add prefixed names.
+	(output_parser): Output semantic actions.
+	(output_parser): Fix bug on '%%line' directives.
+
+	* src/output.c (output_headers): Remove. The C code printed by this
+	function should now be in the skeletons.
+	(output_trailers): Remove.
+	(output): Disable call to 'reader_output_yylsp'.
+	(output_rule_data): Do not output tables to the table obstack.
+
+	* src/output.c: Remove some C dedicated output.
+	Improve the use of macro and output obstacks.
+	(output_defines): Remove.
+
+	* src/output.c (output_token_translations): Associate 'translate'
+	table with a macro. No output to the table obstack.
+	(output_gram): Same for 'rhs' and 'prhs'.
+	(output_stos): Same for 'stos'.
+	(output_rule_data): Same for 'r1' and 'r2'.
+	(token_actions): Same for 'defact'.
+	(goto_actions): Same for 'defgoto'.
+	(output_base): Same for 'pact' and 'pgoto'.
+	(output_table): Same for 'table'.
+	(output_check): Same for 'check'.
+
+	* src/output.c (output_table_data): New function.
+	(output_short_table): Remove.
+	(output_short_or_char_table): Remove.
+
+	* src/output.c (output_parser): Replace most of the skeleton copy code
+	with something new. Skeletons are now processed character by character
+	rather than line by line, and Bison looks for '%%' macros. This is the
+	first step in making Bison's output process (a lot) more flexible.
+	(output_parser): Use the macro table.
+
+2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/main.c (main): Initialize the macro table.
+
+2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/lex.c (percent_table): Add tok_define.
+	* src/lex.h: Add tok_define.
+
+2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+
+	* src/macrotab.c: New file.
+	* src/macrotab.h: New file.
+	* src/Makefile.am: Update.
+
+2001-08-25  Robert Anisko  <robert.anisko@epita.fr>
+
+	* lib/hash.c: New file.
+	* lib/hash.h: New file.
+	* lib/Makefile.am: Update.
+
+2001-08-15  Akim Demaille  <akim@epita.fr>
+
+	Version 1.28c.
+
+2001-08-15  Marc Autret  <autret_m@epita.fr>
+
+	* src/reader.c (readgram): Indent output macro YYSTYPE.
+	(packsymbols): Likewise.
+	(output_token_defines): Likewise.
+	* src/files.c: Standardize.
+	(compute_header_macro): New.
+	(defines_obstack_save): New. Use compute_header_macro.
+	(output_files): Update. Use defines_obstack_save.
+
+2001-08-15  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo (Table of Symbols): Document
+	YYSTACK_USE_ALLOCA.
+
+2001-08-15  Akim Demaille  <akim@epita.fr>
+
+	* missing: Update from CVS Automake.
+	* config/config.guess, config/config.sub, config/texinfo.tex:
+	Update from gnu.org.
+
+2001-08-15  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.maint: Sync with CVS Autoconf.
+
+2001-08-14  Pascal Bart  <pascal.bart@epita.fr>
+
+	* doc/bison.texinfo: Include GNU Free Documentation License from
+	`fdl.texi'.
+	* doc/fdl.texi: Add to package.
+
+2001-08-14  Marc Autret  <autret_m@epita.fr>
+
+	Turn on %{source,header}_extension features.
+
+	* src/lex.c (percent_table): Un-CPP out header_extension and
+	source_extension.
+	* src/files.c (compute_exts_from_gf): Compare pointers with NULL.
+	(compute_exts_from_src): Remove conditions. It restores priorities
+	between options.
+
+2001-08-14  Marc Autret  <autret_m@epita.fr>
+
+	* src/files.c (compute_base_names): Add extensions computing when
+	`--file-prefix' used.
+	Standardize function calls.
+
+2001-08-13  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple (YYSTACK_USE_ALLOCA): Changed to allow users
+	defining it (defined but null disables alloca).
+
+2001-08-13  Marc Autret  <autret_m@epita.fr>
+
+	* src/bison.simple (_yy_memcpy): CPP reformat.
+
+2001-08-13  Pascal Bart  <pascal.bart@epita.fr>
+
+	* tests/atconfig.in (CPPFLAGS): Fix.
+
+2001-08-10  Pascal Bart  <pascal.bart@epita.fr>
+
+	* doc/bison.texinfo: Include GNU General Public License from
+	`gpl.texi'.
+	* doc/gpl.texi: Add to package.
+
+2001-08-10  Marc Autret  <autret_m@epita.fr>
+
+	* src/print_graph.h: Fix.
+	* src/reader.c (read_declarations): Use parse_header_extension_decl ().
+
+2001-08-10  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h: Provide default declarations for stpcpy, strndup,
+	and strnlen.
+
+2001-08-10  Robert Anisko  <anisko_r@epita.fr>
+
+	* doc/bison.texinfo (Locations): Update @$ stuff.
+
+2001-08-09  Robert Anisko  <anisko_r@epita.fr>
+
+	* src/bison.simple (YYLLOC_DEFAULT): Update.
+	(yyparse): Adjust.
+
+2001-08-08  Marc Autret  <autret_m@epita.fr>
+
+	* doc/bison.texinfo: Change @samp{$<@dots{}>} to
+	@samp{$<@dots{}>@var{n}} in Section Actions in Mid-Rule.
+	Reported by Fabrice Bauzac.
+
+2001-08-08  Marc Autret  <autret_m@epita.fr>
+
+	* src/vcg_default.h: Use NULL instead of 0 to initialize pointers.
+	* src/vcg.c (output_node): Fix.
+	* src/vcg.h: Cleanup.
+	* src/print_graph.c: Add comments.
+	(node_output_size): New global variable. Simplify the formatting of
+	the VCG graph output.
+	(print_actions): Unused code is now used. It notifies the final state
+	and no action states in the VCG graph. It also give the reduce actions.
+	The `shift and goto' edges are red and the `go to state' edges are
+	blue.
+	Get the current node name and node_obstack by argument.
+	(node_obstack): New variable.
+	(print_state): Manage node_obstack.
+	(print_core): Use node_obstack given by argument.
+	A node is not only computed here but in print_actions also.
+	(print_graph): CPP out useless code instead of commenting it.
+
+2001-08-07  Pascal Bart  <pascal.bart@epita.fr>
+
+	* tests/atconfig.in (CPPFLAGS): Fix.
+
+2001-08-07  Akim Demaille  <akim@epita.fr>
+
+	* src/print_graph.c (quote): New.
+	(print_core): Use it.
+
+2001-08-06  Akim Demaille  <akim@epita.fr>, Marc Autret  <autret_m@epita.fr>
+
+	* src/vcg.c (complain.h): Include it.
+	Unepitaize `return' invocations.
+	[NDEBUG] (main): Remove.
+	* src/vcg.h (node_t, edge_t, graph_t): Constify the char * members.
+	* src/files.c (open_files): Initialize graph_obstack.
+	* src/print_graph.c (print_actions): CPP out useless code.
+	(print_core): Don't output the last `\n' in labels.
+	Use `quote'.
+	* src/files.c (output_files): Output the VCG file.
+	* src/main.c (main): Invoke print_graph ();
+
+2001-08-06  Marc Autret  <autret_m@epita.fr>
+
+	Automaton VCG graph output.
+	Using option ``-g'' or long option ``--graph'', you can generate
+	a gram_filename.vcg file containing a VCG description of the LALR (1)
+	automaton of your grammar.
+
+	* src/main.c: Call to print_graph() function.
+	* src/getargs.h: Update.
+	* src/getargs.c (options): Update to catch `-g' and `--graph' options.
+	(graph_flag): New flag.
+	(longopts): Update.
+	(getargs): Add case `g'.
+	* src/files.c (graph_obstack): New obstack struct.
+	(open_files): Initialize new obstack.
+	(output_files): Saves graph_obstack if required.
+	* src/files.h (graph_obstack): New extern declaration.
+	* src/Makefile.am: Add new source files.
+
+2001-08-06  Marc Autret  <autret_m@epita.fr>
+
+	* src/print_graph.c, src/print_graph.h (graph): New.
+	* src/vcg.h: New file.
+	* src/vcg.c: New file, VCG graph handling.
+
+2001-08-06  Marc Autret  <autret_m@epita.fr>
+
+	Add of %source_extension and %header_extension which specify
+	the source or/and the header output file extension.
+
+	* src/files.c (compute_base_names): Remove initialisation of
+	src_extension and header_extension.
+	(compute_exts_from_gf): Update.
+	(compute_exts_from_src): Update.
+	(output_files): Update.
+	* src/reader.c (parse_header_extension_decl): New.
+	(parse_source_extension_decl): New.
+	(read_declarations): New case statements for the new tokens.
+	* src/lex.c (percent_table): Add entries for %source_extension
+	and %header_extension.
+	* src/lex.h (token_e): New tokens tok_hdrext and tok_srcext.
+
+2001-08-06  Marc Autret  <autret_m@epita.fr>
+
+	* configure.in: Bump to 1.28c.
+	* doc/bison.texinfo: Texinfo thingies.
+
+2001-08-04  Pascal Bart  <pascal.bart@epita.fr>
+
+	* tests/atconfig.in (CPPFLAGS): Add.
+	* tests/calc.at (AT_CHECK): Use CPPFLAGS.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	Version 1.28b.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	* tests/Makefile.am (check-local): Ship testsuite.
+	* tests/calc.at (_AT_DATA_CALC_Y): Prototype all the functions.
+	Include `string.h'.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Try using -Wformat when compiling.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Bump to 1.28b.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	* src/complain.c: Adjust strerror_r portability issues.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	Version 1.28a.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c, src/getarg.h (skeleton)): Constify.
+	* src/lex.c (literalchar): Avoid name clashes on `buf'.
+	* src/getargs.c: Include complain.h.
+	* src/files.c, src/files.h (skeleton_find): Avoid name clashes.
+	* lib/quotearg.c, lib/quotearg.h: Update from fileutils 4.1.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (readgram): Display hidden chars in error messages.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	Update to gettext 0.10.39.
+
+2001-08-03  Akim Demaille  <akim@epita.fr>
+
+	* lib/strspn.c: New.
+
+2001-08-01  Marc Autret  <autret_m@epita.fr>
+
+	* doc/bison.texinfo: Update.
+	* doc/bison.1 (mandoc): Update.
+	* src/system.h (EXT_GUARD_C, EXT_STYPE_H): Remove .c and .h.
+	* src/files.c: Support output files extensions computing.
+	(src_extension): New static variable.
+	(header_extension): New static variable.
+	(tr): New function.
+	(get_extension_index): New function, gets the index of an extension
+	filename in a string.
+	(compute_exts_from_gf): New function, computes extensions from the
+	grammar file extension.
+	(compute_exts_from_src): New functions, computes extensions from the
+	C source file extension, file given by ``-o'' option.
+	(compute_base_names): Update.
+	(output_files): Update.
+
+2001-08-01  Robert Anisko  <anisko_r@epita.fr>
+
+	* doc/bison.texi: Document @$.
+	(Locations): New section.
+
+2001-07-18  Akim Demaille  <akim@epita.fr>
+
+	* Makefile.maint, GNUmakefile: New, from Autoconf 2.52.
+	* config/prev-version.txt, config/move-if-change: New.
+	* Makefile.am: Adjust.
+
+2001-07-08  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/bison.simple (yyparse): Suppress warning `comparaison
+	between signed and unsigned'.
+
+2001-07-05  Pascal Bart  <pascal.bart@epita.fr>
+
+	* src/getargs.h (raw_flag): Remove.
+	* src/getargs.c: Die on `-r'/`--raw'.
+	* src/lex.c (parse_percent_token): Die on `%raw'.
+	* src/reader.c (output_token_defines): Suppress call to `raw_flag'.
+	* tests/calc.at: Suppress test with option `--raw'.
+
+2001-07-14  Akim Demaille  <akim@epita.fr>
+
+	* config/: New.
+	* configure.in: Require Autoconf 2.50.
+	Update to gettext 0.10.38.
+
+2001-03-16  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: ANSIfy the examples.
+
+2001-03-16  Akim Demaille  <akim@epita.fr>
+
+	* getargs.c (skeleton): New variable.
+	(longopts): --skeleton is a new option.
+	(shortopts, getargs): -S is a new option.
+	* getargs.h: Declare skeleton.
+	* output.c (output_parser): Use it.
+
+2001-03-16  Akim Demaille  <akim@epita.fr>
+
+	* m4/strerror_r.m4: New.
+	* m4/error.m4: Run AC_FUNC_STRERROR_R.
+	* lib/error.h, lib/error.c: Update.
+
+2001-03-16  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (longopts): Clean up.
+
+2001-02-21  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (gensym): `gensym_count' is your own.
+	Use a static buf to create the symbol name, as token_buffer is no
+	longer a buffer.
+
+2001-02-08  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (conflict_report): Be sure not to append to res
+	between two calls, which could happen if both first sprintf were
+	skipped, but not the first cp += strlen.
+
+2001-02-08  Akim Demaille  <akim@epita.fr>
+
+	* lib/memchr.c, lib/stpcpy.c, lib/strndup.c, lib/strnlen.c:
+	New, from fileutils 4.0.37.
+	* configure.in: Require Autoconf 2.49c.  I took some time before
+	making this decision.  This is the only way out for portability
+	issues in Bison, it would mean way too much duplicate effort to
+	import in Bison features implemented in 2.49c since 2.13.
+	AC_REPLACE_FUNCS and AC_CHECK_DECLS the functions above.
+
+2001-02-02  Akim Demaille  <akim@epita.fr>
+
+	* lib/malloc.c, lib/realloc.c: New, from the fileutils 4.0.37.
+	* lib/xalloc.h, lib/xmalloc.c: Update.
+
+2001-01-19  Akim Demaille  <akim@epita.fr>
+
+	Get rid of the ad hoc handling of token_buffer in the scanner: use
+	the obstacks.
+
+	* src/lex.c (token_obstack): New.
+	(init_lex): Initialize it.  No longer call...
+	(grow_token_buffer): this.  Remove it.
+	Adjust all the places which used it to use the obstack.
+
+2001-01-19  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.h: Rename all the tokens:
+	s/\bENDFILE\b/tok_eof/g;
+	s/\bIDENTIFIER\b/tok_identifier/g;
+	etc.
+	Let them be enums, not #define, to ease debugging.
+	Adjust all the code.
+
+2001-01-18  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.h (MAXTOKEN, maxtoken, grow_token_buffer): Remove, private.
+	* src/lex.c (maxtoken, grow_token_buffer): Static.
+
+2001-01-18  Akim Demaille  <akim@epita.fr>
+
+	Since we now use obstacks, more % directives can be enabled.
+
+	* src/lex.c (percent_table): Also accept `%yacc',
+	`%fixed_output_files', `%defines', `%no_parser', `%verbose', and
+	`%debug'.
+	Handle the actions for `%semantic_parser' and `%pure_parser' here,
+	instead of returning a token.
+	* src/lex.h (SEMANTIC_PARSER, PURE_PARSER): Remove, unused.
+	* src/reader.c (read_declarations): Adjust.
+	* src/files.c (open_files): Don't call `compute_base_names', don't
+	compute `attrsfile' since they depend upon data which might be
+	*in* the input file now.
+	(output_files): Do it here.
+	* src/output.c (output_headers): Document the fact that this patch
+	introduces a guaranteed SEGV for semantic parsers.
+	* doc/bison.texinfo: Document them.
+	* tests/suite.at: Exercise these %options.
+
+2000-12-20  Akim Demaille  <akim@epita.fr>
+
+	Also handle the output file (--verbose) with obstacks.
+
+	* files.c (foutput): Remove.
+	(output_obstack): New.
+	Adjust all dependencies.
+	* src/conflicts.c: Return a string.
+	* src/system.h (obstack_grow_string): Rename as...
+	(obstack_sgrow): this.  Be ready to work with non literals.
+	(obstack_fgrow4): New.
+
+2000-12-20  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (open_files): Fix the computation of short_base_name
+	in the case of `-o foo.tab.c'.
+
+2000-12-20  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_string, copy_comment, copy_comment2, copy_at)
+	(copy_dollar): Now that everything uses obstacks, get rid of the
+	FILE * parameters.
+
+2000-12-20  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (open_files): Actually the `.output' file is based
+	on the short_base_name, not base_name.
+	* tests/suite.at (Checking output file names): Adjust.
+
+2000-12-20  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1: Remove, we now use directly...
+	* src/bison.simple: this.
+	* src/Makefile.am: Use pkgdata instead of data.
+
+2000-12-20  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (guard_obstack): New.
+	(open_files): Initialize it.
+	(output_files): Dump it...
+	* src/files.h: Export it.
+	* src/reader.c (copy_guard): Use it.
+
+2000-12-19  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (outfile, defsfile, actfile): Removed as global
+	vars.
+	(open_files): Don't compute them.
+	(output_files): Adjust.
+	(base_name, short_base_name): Be global.
+	Adjust dependencies.
+
+2000-12-19  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (strsuffix): New.
+	(stringappend): Be just like strcat but allocate.
+	(base_names): Eve out from open_files.
+	Try to simplify the rather hairy computation of base_name and
+	short_base_name.
+	(open_files): Use it.
+	* tests/suite.at (Checking output file names): New test.
+
+2000-12-19  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h (obstack_grow_literal_string): Rename as...
+	(obstack_grow_string): this.
+	* src/output.c (output_parser): Recognize `%% actions' instead of
+	`$'.
+	* src/bison.s1: s/$/%% actions/.
+	* src/bison.hairy: Likewise.
+
+2000-12-19  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_parser): Compute the `#line' lines when
+	there are.
+	* src/Makefile.am (bison.simple): Be a simple copy of bison.s1.
+	Suggested by Hans Aberg.
+
+2000-12-19  Akim Demaille  <akim@epita.fr>
+
+	Let the handling of the skeleton files be local to the procedures
+	that use it.
+
+	* src/files.c (xfopen, xfclose, skeleton_find, guardfile): No
+	longer static.
+	(fparser, open_extra_files): Remove.
+	(open_files, output_files): Don't take care of fparser.
+	* src/files.h: Adjust.
+	* src/output.c (output_parser): Open and close the file to the
+	skeleton.
+	* src/reader.c (read_declarations): When %semantic_parser, open
+	fguard.
+
+2000-12-19  Akim Demaille  <akim@epita.fr>
+
+	* src/file.h (BISON_SIMPLE, BISON_HAIRY): Move from here...
+	* src/system.h (BISON_SIMPLE, BISON_HAIRY): ... to here.
+
+2000-12-19  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (open_files): Yipee!  We no longer need all the code
+	looking for `/tmp' since we have no tmp file.
+
+2000-12-19  Akim Demaille  <akim@epita.fr>
+
+	* src/system.h (EXT_TAB, EXT_OUTPUT, EXT_STYPE_H, EXT_GUARD_C):
+	New macros.
+	* src/files.c (open_files): Less dependency on MSDOS etc.
+
+2000-12-14  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1 (YYLLOC_DEFAULT): New macro.
+	Provide a default definition.
+	Use it when executing the default @ action.
+	* src/reader.c (reader_output_yylsp): No longer include
+	`timestamp' and `text' in the default YYLTYPE.
+
+2000-12-12  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_definition, parse_union_decl, copy_action)
+	(copy_guard): Quote the file names.
+	Reported by Laurent Mascherpa.
+
+2000-12-12  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_headers, output_program, output): Be sure
+	to escape special characters when outputting filenames.
+	(ACTSTR_PROLOGUE, ACTSTR_EPILOGUE): Remove.
+	(output_headers): Don't depend on them, Use ACTSTR.
+
+2000-11-17  Akim Demaille  <akim@epita.fr>
+
+	* lib/obstack.h: Formatting changes.
+	(obstack_grow, obstack_grow0): Don't cast WHERE at all: it
+	prevents type checking.
+	(obstack_ptr_grow, obstack_ptr_grow_fast): When assigning, don't
+	cast the value to (void *): assigning a `foo *' to a `void *'
+	variable is valid.
+	(obstack_int_grow, obstack_int_grow_fast): Don't cast AINT to int.
+	* src/reader.c (parse_union_decl): Typo: use obstack_1grow to
+	append characters.
+
+2000-11-17  Akim Demaille  <akim@epita.fr>
+
+	* tests/Makefile.am (suite.m4, regression.m4, calc.m4): Rename
+	as...
+	(suite.m4, regression.m4, calc.m4): these.
+	* tests/atgeneral.m4: Update from CVS Autoconf.
+
+2000-11-17  Akim Demaille  <akim@epita.fr>
+
+	* tests/regression.m4 (%union and --defines): New test,
+	demonstrating a current bug in the obstack implementation.
+
+2000-11-17  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1 (_YY_DECL_VARIABLES, YY_DECL_VARIABLES): New
+	macros.
+	Use them to declare the variables which are global or local to
+	`yyparse'.
+
+2000-11-17  Akim Demaille  <akim@epita.fr>
+
+	* acconfig.h: Remove, no longer used.
+
+2000-11-07  Akim Demaille  <akim@epita.fr>
+
+	* src: s/Copyright (C)/Copyright/g.
+
+2000-11-07  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (reader): #define YYLSP_NEEDED to 1 instead of just
+	defining.
+	* src/bison.s1: s/#ifdef YYLSP_NEEDED/#if YYLSP_NEEDED/.
+
+2000-11-07  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1 (YYLEX): Use #if instead of #ifdef.
+	Merge in a single CPP if/else.
+
+2000-11-07  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output): Remove useless variables.
+	* lib/obstack.c (obstack_grow, obstack_grow0): Rename the second
+	argument `data' for consistency with the prototypes.
+	Qualify it `const'.
+	(obstack_copy, obstack_copy0): Rename the second argument as
+	`address' for consistency.  Qualify it `const'.
+	* lib/obstack.h (obstack_copy, obstack_copy0, obstack_grow)
+	(obstack_grow0, obstack_ptr_grow, obstack_ptr_grow_fast): Qualify
+	`const' their input argument (`data' or `address').
+	Adjust the corresponding macros to include `const' in casts.
+
+2000-11-03  Akim Demaille  <akim@epita.fr>
+
+	* src/Makefile.am (INCLUDES): s/PFILE/BISON_SIMPLE/.
+	s/PFILE1/BISON_HAIRY/.
+	Adjust dependencies.
+
+2000-11-03  Akim Demaille  <akim@epita.fr>
+
+	For some reason, this was not applied.
+
+	* src/files.c [VMS]: No longer include `ssdef.h', no longer define
+	`unlink': it's no longer used.
+
+2000-11-03  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (skeleton_find): New function, eved out of...
+	(open_files, open_extra_files): here.
+
+2000-11-03  Akim Demaille  <akim@epita.fr>
+
+	Don't use `atexit'.
+
+	* src/files.c (obstack_save): New function.
+	(done): Rename as...
+	(output_files): this.
+	Use `obstack_save'.
+	* src/main.c (main): Don't use `atexit' to register `done', since
+	it no longer has to remove tmp files, just call `output_files'
+	when there are no errors.
+
+2000-11-02  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c [VMS]: No longer include `ssdef.h', no longer define
+	`unlink': it's no longer used.
+	* src/files.h: Formatting changes.
+
+2000-11-02  Akim Demaille  <akim@epita.fr>
+
+	Remove the last uses of mktemp and unlink/delete.
+
+	* src/files.c (fdefines, ftable): Removed.
+	(defines_ostack, table_obstack): New.
+	Adjust dependencies of the former into uses of the latter.
+	* src/output.c (output_short_or_char_table, output_short_table):
+	Convert to using obstacks.
+	* src/reader.c (copy_comment2): Accept one FILE * and two
+	obstacks.
+	(output_token_defines, reader_output_yylsp): Use obstacks.
+	* src/system.h (obstack_fgrow3): New.
+	* po/POTFILES.in: Adjust.
+
+2000-11-01  Akim Demaille  <akim@epita.fr>
+
+	Change each use of `fattrs' into a use of `attrs_obstack'.
+
+	* src/reader.c (copy_at): Typo: s/yylloc/yyloc/.
+	* src/files.c (fattrs): Remove.
+	(attrs_obstack): New.
+	Adjust all dependencies.
+	(done): If SEMANTIC_PARSER, dump attrs_obstack into attrsfile.
+
+2000-11-01  Akim Demaille  <akim@epita.fr>
+
+	Introduce obstacks.
+	Change each use of `faction' into a use of `action_obstack'.
+
+	* lib/obstack.h, lib/obstack.c: New files.
+	* src/files.c (faction): Remove.
+	(action_obstack): New.
+	Adjust all dependencies.
+
+2000-10-20  Akim Demaille  <akim@epita.fr>
+
+	* lib/quote.h (PARAMS): New macro.  Use it.
+
+2000-10-16  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_short_or_char_table): New function.
+	(output_short_table, output_token_translations): Use it.
+	(goto_actions): Use output_short_table.
+
+2000-10-16  Akim Demaille  <akim@epita.fr>
+
+	* src/symtab.c (bucket_new): New function.
+	(getsym): Use it.
+
+	* src/output.c (output_short_table): New argument to display the
+	comment associated with the table.
+	Adjust dependencies.
+	(output_gram): Use it.
+	(output_rule_data): Nicer output layout for YYTNAME.
+
+2000-10-16  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.c (read_typename): New function.
+	(lex): Use it.
+	* src/reader.c (copy_dollar): Likewise.
+
+2000-10-16  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_comment2): Expect the input stream to be on
+	the `/' which is suspected to open a comment, instead of being
+	called after `//' or `/*' was read.
+	(copy_comment, copy_definition, parse_union_decl, copy_action)
+	(copy_guard): Adjust.
+
+2000-10-16  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (parse_expect_decl): Use `skip_white_space' and
+	`read_signed_integer'.
+
+2000-10-16  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_dollar): New function.
+	(copy_guard, copy_action): Use it.
+
+2000-10-16  Akim Demaille  <akim@epita.fr>
+
+	* lib/quote.h, lib/quote.c, lib/quotearg.h, lib/quotearg.c:
+	* m4/prereq.m4, m4/c-bs-a.m4, m4/mbstate.m4:
+	New files, from Fileutils 4.0.27.
+	* src/main.c (printable_version): Remove.
+	* src/lex.c, src/reader.c: Use `quote'.
+
+2000-10-04  Akim Demaille  <akim@epita.fr>
+
+	* lib/error.c, lib/error.h: New files, needed by xmalloc.c.
+
+2000-10-04  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Various typos spotted by Neil Booth.
+
+2000-10-04  Akim Demaille  <akim@epita.fr>
+
+	When a literal string is used to define two different tokens,
+	`bison -v' segfaults.
+	Reported by Piotr Gackiewicz, and fixed by Neil Booth.
+
+	* tests/regression.m4: New file.
+	Include the core of the sample provided by Piotr Gackiewicz.
+	* src/reader.c (parse_token_decl): Diagnose bad cases, and proceed
+	properly.
+
+2000-10-04  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (parse_expect_decl): Keep `count' within the size
+	of `buffer'.
+	From Neil Booth.
+
+2000-10-02  Paul Eggert  <eggert@twinsun.com>
+
+	* bison.s1 (yyparse): Assign the default value
+	unconditionally, to avoid a GCC warning and make the parser a
+	tad smaller.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (getargs): Don't dump `--help' on unrecognized
+	options.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/derives.c, src/print.c, src/reduce.c: To ease the
+	translation, move some `\n' out of the translated strings.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	The location tracking mechanism is precious for parse error
+	messages.  Nevertheless, it is enabled only when `@n' is used in
+	the grammar, which is a different issue (you can use it in error
+	message, but not in the grammar per se).  Therefore, there should
+	be another means to enable it.
+
+	* src/getargs.c (getargs): Support `--locations'.
+	(usage): Report it.
+	* src/getargs.h (locationsflag): Export it.
+	* src/lex.c (percent_table): Support `%locations'.
+	* src/reader.c (yylsp_needed): Remove this variable, now replaced
+	with `locationsflag'.
+	* doc/bison.texinfo: Document `--locations' and `%locations'.
+	Sort the options.
+	* tests/calc.m4: Test it.
+
+	For regularity of the names, replace each
+	(nolineflag, toknumflag, rawtokenumflag, noparserflag): with...
+	(no_lineflag, token_tableflag, rawflag, no_parserflag): this.
+	In addition replace each `flag' with `_flag'.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	Also test parse error messages, including with YYERROR_VERBOSE.
+
+	* tests/calc.m4 (calc.y): Add support for `exp = exp' (non
+	associative).
+	Use it to check the computations.
+	Use it to check `nonassoc' is honored.
+	(AT_DATA_CALC_Y): Equip `calc.y' with YYERROR_VERBOSE when passed
+	`--yyerror-verbose'.
+	(_AT_CHECK_CALC): Adjust to this option.
+	(_AT_CHECK_CALC_ERROR): New macro to check parse error messages.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	Test also `--verbose', `--defines' and `--name-prefix'.  Testing
+	the latter demonstrates a flaw in the handling of non debugging
+	parsers introduced by myself on 2000-03-16: `#define yydebug 0'
+	was used in order to simplify:
+
+	#if YYDEBUG
+	if (yydebug)
+	{
+	...
+	}
+	#endif
+
+	into
+
+	if (yydebug)
+	{
+	...
+	}
+
+	unfortunately this leads to a CPP conflict when
+	`--name-prefix=foo' is used since it produces `#define yydebug
+	foodebug'.
+
+	* src/bison.s1 [!YYDEBUG]: Do not define yydebug.
+	(YYDPRINTF): New macro.
+	Spread its use.
+	* tests/calc.m4 (AT_CHECK_CALC): Do require a title, build it from
+	the bison options.
+	Also test `--verbose', `--defines' and `--name-prefix'.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	Improve the readability of the produced parsers.
+
+	* src/bison.s1: Formatting changes.
+	Improve the comment related to the `$' mark.
+	(yydefault): Don't fall through to `yyresume': `goto' there.
+	* src/output.c (output_parser): When the `$' is met, skip the end
+	of its line.
+	New variable, `number_of_dollar_signs', to check there's exactly
+	one `$' in the parser skeleton.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* lib/xstrdup.c: New file, from the fileutils.
+	* src/reader.c (parse_token_decl, get_type_name, parse_type_decl)
+	(parse_assoc_decl, parse_thong_decl, get_type): Use `xstrdup'
+	instead of strlen + xmalloc + strcpy.
+	* src/symtab.c (copys): Remove, use xstrdup instead.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/gram.h (associativity): New enum type which replaces the
+	former CPP macros `RIGHT_ASSOC', `LEFT_ASSOC' and `NON_ASSOC' with
+	`right_assoc', `left_assoc' and `non_assoc'.
+	Adjust all dependencies.
+	* src/reader.c: Formatting changes.
+	(LTYPESTR): Don't define it, use it as a literal in
+	`reader_output_yylsp'.
+	* src/symtab.h (symbol_class): New enum type which replaces the
+	former CPP macros `SUNKNOWN', `STOKEN and `SNTERM' with
+	`sunknown', `stoken and `snterm'.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (fixed_outfiles): Rename as...
+	(yaccflag): for consistency and accuracy.
+	Adjust dependencies.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	Use the more standard files `xalloc.h' and `xmalloc.c' instead of
+	Bison's `allocate.c' and `alloc.h'.  This patch was surprisingly
+	difficult and introduced a lot of core dump.  It turns out that
+	Bison used an implementation of `xmalloc' based on `calloc', and
+	at various places it does depend upon the initialization to 0.  I
+	have not tried to isolate the pertinent places, and all the former
+	calls to Bison's `xmalloc' are now using `XCALLOC'.  Someday,
+	someone should address this issue.
+
+	* src/allocate.c, src/alloc.h, m4/bison-decl.m4: Remove.
+	* lib/xmalloc.c, lib/xalloc.h, m4/malloc.m4, m4/realloc.m4: New
+	files.
+	Adjust dependencies.
+	* src/warshall.h: New file.
+	Propagate.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	Various anti-`extern in *.c' changes.
+
+	* src/system.h: Include `assert.h'.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/state.h (nstates, final_state, first_state, first_shift)
+	(first_reduction): Move their exportation from here...
+	* src/LR0.h: to here.
+	Adjust dependencies.
+	* src/getargs.c (statisticsflag): New variable.
+	Add support for `--statistics'.
+	Adjust dependencies.
+
+	Remove a lot of now useless `extern' statements in most files.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/LR0.h: New file.
+	Propagate its use.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/print.h: New file.
+	Propagate its use.
+	* src/print.c: Formatting and ordering changes.
+	(verbose, terse): Replace with...
+	(print_results): this new function.
+	Adjust dependencies.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/conflicts.c (conflict_report): New function.
+	(conflict_log, verbose_conflict_log): Replace with...
+	(print_conflicts): this function.
+	Adjust dependencies.
+	* src/conflicts.h: New file.
+	Propagate its inclusion.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/nullable.h: New file.
+	Propagate its inclusion.
+	* src/nullable.c: Formatting changes.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/reduce.h: New file.
+	Propagate its inclusion.
+	* src/reduce.c: Topological sort and other formatting changes.
+	(bool, TRUE, FALSE): Move their definition to...
+	* src/system.h: here.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c: Formatting changes.
+	(tryopen, tryclose, openfiles): Rename as...
+	(xfopen, xfclose, open_files): this.
+	(stringappend): static.
+	* src/files.h: Complete the list of exported symbols.
+	Propagate its use.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.h: New file.
+	Propagate its use instead of tedious list of `extern' and
+	prototypes.
+	* src/reader.c: Formatting changes, topological sort,
+	s/register//.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/lex.h: Prototype `lex.c' exported functions.
+	* src/reader.c: Adjust.
+	* src/lex.c: Formatting changes.
+	(safegetc): Rename as...
+	(xgetc): this.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/lalr.h: New file.
+	Propagate its inclusion instead of prototypes and `extern'.
+	* src/lalr.c: Formatting changes, topological sorting etc.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (token_actions): Introduce a temporary array,
+	YYDEFACT, that makes it possible for this function to use
+	output_short_table.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	`user_toknums' is output as a `short[]' in `output.c', while it is
+	defined as a `int[]' in `reader.c'.  For consistency with the
+	other output tables, `user_toknums' is now defined as a table of
+	shorts.
+
+	* src/reader.c (user_toknums): Be a short table instead of an int
+	table.
+	Adjust dependencies.
+
+	Factor the short table outputs.
+
+	* src/output.c (output_short_table): New function.
+	* src/output.c (output_gram, output_stos, output_rule_data)
+	(output_base, output_table, output_check):  Use it.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output): Topological sort of the functions, in
+	order to get rid of the `static' prototypes.
+	No longer use `register'.
+	* src/output.h: New file.
+	Propagate its inclusion in files explicitly prototyping functions
+	from output.c.
+
+2000-09-21  Akim Demaille  <akim@epita.fr>
+
+	* src/atgeneral.m4: Update from Autoconf.
+
+2000-09-21  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.h: New file.
+	* src/closure.c: Formatting changes, topological sort over the
+	functions, use of closure.h.
+	(initialize_closure, finalize_closure):  Rename as...
+	(new_closure, free_closure): these.  Adjust dependencies.
+	* src/LR0.c: Formatting changes, topological sort, use of
+	cloture.h.
+	(initialize_states): Rename as...
+	(new_states): this.
+	* src/Makefile.am (noinst_HEADERS): Adjust.
+
+2000-09-20  Akim Demaille  <akim@epita.fr>
+
+	* src/acconfig.h: Don't protect config.h against multiple
+	inclusion.
+	Don't define PARAMS.
+	* src/system.h: Define PARAMS.
+	Remove some of the ad-hoc CPP magic for DOS, VMS etc.: this is the
+	purpose of config.h.  system.h must not try to fix wrong
+	definitions in config.h.
+
+2000-09-20  Akim Demaille  <akim@epita.fr>
+
+	* src/derives.h: New file.
+	* src/main.c, src/derives.h: Use it.
+	Formatting changes.
+	* src/Makefile.am (noinst_HEADERS): Adjust.
+
+2000-09-20  Akim Demaille  <akim@epita.fr>
+
+	* tests/atgeneral.m4: Update from Autoconf.
+	* tests/calc.m4 (_AT_DATA_CALC_Y, AT_DATA_CALC_Y, _AT_CHECK_CALC)
+	(AT_CHECK_CALC): New macros.
+	Use these macros to test bison with options `', `--raw',
+	`--debug', `--yacc', `--yacc --debug'.
+
+2000-09-19  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c: Formatting changes.
+	* src/machine.h: Remove, leaving its contents in...
+	* src/system.h: here.
+	Include stdio.h.
+	Adjust all dependencies on stdio.h and machine.h.
+	* src/getargs.h: New file.
+	Let all `extern' declarations about getargs.c be replaced with
+	inclusion of `getargs.h'.
+	* src/Makefile.am (noinst_HEADERS): Adjust.
+
+	* tests/calc.m4 (yyin): Be initialized in main, not on the global
+	scope.
+	(yyerror): Returns void, not int.
+	* doc/bison.texinfo: Formatting changes.
+
+2000-09-19  Akim Demaille  <akim@epita.fr>
+
+	* tests/calc.m4 (calc.y): Do not assign to stdin, as it's not
+	portable.
+
+2000-09-18  Akim Demaille  <akim@epita.fr>
+
+	* configure.in: Append WARNING_CFLAGS to CFLAGS.
+	* src/Makefile.am (INCLUDES): Don't.
+	Be ready to fetch headers in lib/.
+
+2000-09-18  Akim Demaille  <akim@epita.fr>
+
+	* doc/bison.texinfo: Update the copyright.
+	ANSIfy and GNUify the examples.
+	Remove the old menu.
+
+2000-09-18  Akim Demaille  <akim@epita.fr>
+
+	First set of tests: use the `calc' example from the documentation.
+
+	* src/bison.s1 (yyparse): Condition the code using `yytname' which
+	is defined only when YYDEBUG is.
+	* m4/atconfig.m4 (AT_CONFIG): Adjust to Autoconf 2.13.
+	* src/files.c (tryopen, tryclose): Formatting changes.
+	Move to the top and be static.
+	* src/reader.c (read_signed_integer): Likewise.
+	* tests/calc.m4: New file.
+	* Makefile.am, suite.m4: Adjust.
+	* m4/atconfig.m4: Set BISON_SIMPLE and BISON_HAIRY.
+
+2000-09-18  Akim Demaille  <akim@epita.fr>
+
+	Add support for an Autotest test suite for Bison.
+
+	* m4/m4.m4, m4/atconfig.m4: New files.
+	* m4/Makefile.am (EXTRA_DIST): Adjust.
+	* tests/suite.m4, tests/Makefile.am, tests/atgeneral.m4: New
+	files.
+	* src/getargs.c: Display a more standard --version message.
+	* src/reader.c (reader): Formatting changes.
+	No longer depend upon VERSION_STRING.
+	* configure.in: No longer use `dnl'.
+	Set up the test suite and the new directory `tests/.
+	(VERSION_STRING): Remove.
+
+2000-04-14  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_comment2): New function, same as former
+	`copy_comment', but outputs into two FILE *.
+	(copy_comment): Use it.
+	(parse_union_decl): Use it.
+	(get_type, parse_start_decl): Use the same `invalid' message.
+	(parse_start_decl, parse_union_decl): Use the same `multiple'
+	message.
+	(parse_union_decl, copy_guard, copy_action): Use the same
+	`unmatched' message.
+	* m4/Makefile.am (EXTRA_DIST): Add `warning.m4'.
+
+2000-03-31  Akim Demaille  <akim@epita.fr>
+
+	* src/files.c (tryopen, tryclose): Move to the top.
+	Be static.
+
+2000-03-31  Akim Demaille  <akim@epita.fr>
+
+	* src/main.c (main): Don't call `done', exit does it.
+
+2000-03-31  Akim Demaille  <akim@epita.fr>
+
+	* allocate.c: s/return (foo)/return foo/.
+	* lalr.c: Likewise.
+	* LR0.c: Likewise.
+	* output.c: Likewise.
+	* reader.c: Likewise.
+	* symtab.c: Likewise.
+	* vmsgetargs.c: Likewise.
+
+2000-03-31  Akim Demaille  <akim@epita.fr>
+
+	Clean up the error reporting functions.
+
+	* src/report.c: New file.
+	* src/report.h: Likewise.
+	* src/Makefile.am: Adjust.
+	* m4/error.m4: New file.
+	* m4/Makefile.am: Adjust.
+	* configure.in (jm_PREREQ_ERROR): Call it.
+	* src/main.c (int_to_string, banner, fatal_banner, warn_banner):
+	Remove.
+	(fatal, fatals): Remove.  All callers use complain.c::fatal.
+	(warn, warni, warns, warnss, warnss): Remove.  All callers use
+	complain.c::complain.
+	(toomany): Remove, use fatal instead.
+	* src/files.c (done): No argument, use complain_message_count.
+	* src/main.c (main): Register `done' to `atexit'.
+
+	* src/getargs.c (usage): More `fputs', less `fprintf'.
+
+2000-03-28  Akim Demaille  <akim@epita.fr>
+
+	* lib/: New directory.
+	* Makefile.am (SUBDIRS): Adjust.
+	* configure.in: Adjust.
+	(LIBOBJS): Although not used yet, AC_SUBST it, otherwise it's
+	useless.
+	* src/alloca.c: Moved to lib/.
+	* src/getopt.c: Likewise.
+	* src/getopt1.c: Likewise.
+	* src/getopt.h: Likewise.
+	* src/ansi2knr.c: Likewise.
+	* src/ansi2knr.1: Likewise.
+	* src/Makefile.am: Adjust.
+	* lib/Makefile.am: New file.
+
+2000-03-28  Akim Demaille  <akim@epita.fr>
+
+	* src/getargs.c (usage): Refresh the help message.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/getopt1.c: Updated from textutils 2.0e
+	* src/getopt.c: Likewise.
+	* src/getopt.h: Likewise.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/Makefile.am (bison.simple): Fix the awk program: quote only
+	the file name, not the whole `#line LINE FILE'.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	On syntax errors, report the token on which we choked.
+
+	* src/bison.s1 (yyparse): In the label yyerrlab, when
+	YYERROR_VERBOSE, add yychar in msg.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_at): New function.
+	(copy_guard): Use it.
+	(copy_action): Use it.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	Be kind to translators, save some useless translations.
+
+	* src/main.c (banner): New function.
+	(fatal_banner): Use it.
+	(warn_banner): Use it.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_definition): Use copy_string and
+	copy_comment.  Removed now unused `match', `ended',
+	`cplus_comment'.
+	(copy_comment, copy_string): Moved, to be visible from
+	copy_definition.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_string): Declare `static inline'.  No
+	problems with inline, since it is checked by configure.
+	(copy_comment): Likewise.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (packsymbols): Formatting changes.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_comment): New function, factored out from:
+	(copy_action): Use it.  Removed now unused `match', `ended',
+	`cplus_comment'.
+	(copy_guard): Likewise.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/reader.c (copy_string): New function, factored out from:
+	(copy_action): Use it.
+	(copy_guard): Likewise.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	Change the handling of @s so that they behave exactly like $s.
+	There is now a pseudo variable @$ (readble and writable), location
+	of the lhs of the rule (by default ranging from the location of
+	the first symbol of the rhs, to the location of the last symbol,
+	or, if the rhs is empty, YYLLOC).
+
+	* src/bison.s1 [YYLSP_NEEDED] (yyloc): New variable, twin of
+	yyval.
+	(yyparse): When providing a default semantic action, provide a
+	default location action.
+	(after the $): No longer change `*YYLSP', just stack YYLOC the
+	same way you stack YYVAL.
+	* src/reader.c (read_declarations): Use warns.
+	(copy_guard, case '@'): Also recognize `@$', expanded as `YYLOC'.
+	(copy_action, case '@'): Likewise.
+	Use a standard error message, to save useless work from
+	translators.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1: Formatting and cosmetics changes.
+	* src/reader.c: Likewise.
+	Update the Copyright notice.
+
+2000-03-17  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1 (#line): All set to `#line' only, since the
+	Makefile now handles them.
+
+2000-03-16  Akim Demaille  <akim@epita.fr>
+
+	* src/output.c (output_rule_data): Output the documentation of
+	some of the tables.
+	(Copyright notice): Update.
+	Formatting changes.
+
+2000-03-16  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1 [!YYDEBUG]: Define yydebug to 0.  This allows to
+	remove most `#if YYDEBUG != 0', since `if (yydebug)' is enough.
+	One `#if YYDEBUG' remains, since it uses variables which are
+	defined only if `YYDEBUG != 0'.
+
+2000-03-16  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1 (yyparse): Reorganize the definitions of the stacks
+	and related variables so that the similarities are highlighted.
+
+2000-03-16  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1: Properly indent CPP directives.
+
+2000-03-16  Akim Demaille  <akim@epita.fr>
+
+	* src/bison.s1: Properly indent the `alloca' CPP section.
+
+2000-03-16  Akim Demaille  <akim@epita.fr>
+
+	Do not hard code values of directories in `configure.in'.
+	Update the `configure' tool chain.
+
+	* configure.in (XPFILE, XPFILE1, LOCALEDIR): Remove, handled by
+	src/makefile.am.
+	(VERSION_STRING): Use the third arg of AC_DEFINE_UNQUOTED.
+	(AC_OUTPUT): Add m4/Makefile.
+	Bump to bison 1.28a, 1.29 has never been released.
+	* acconfig.h (XPFILE, XPFILE1, LOCALEDIR): Remove, since they are
+	handled via src/Makefile.am.
+	(VERSION_STRING, PROTOTYPES, ENABLE_NLS, HAVE_CATGETS,
+	HAVE_GETTEXT, HAVE_LC_MESSAGES, HAVE_STPCPY): Remove, handled by
+	autoheader.
+	* Makefile.am (SUBDIRS): Add m4.
+	(ACLOCAL_AM_FLAGS): New variable.
+	(AUTOMAKE_OPTIONS): Add check-news.
+	* src/Makefile.am (bison.simple): Use awk to replace #line lines with
+	the proper line number and file name.
+	(DEFS): Propagate the location of bison library files and of the
+	locale files.
+	(INCLUDES): Added `-I ..' so that one can compile with srcdir !=
+	builddir.
+	* acinclude.m4: Remove, replaced by the directory m4.
+	* m4/Makefile.am (EXTRA_DIST): New variable.
+	* m4/gettext.m4: New file, from the fileutils.
+	* m4/lcmessage.m4: Likewise
+	* m4/progtest.m4: Likewise.
+	* m4/bison-decl.m4: New file, extracted from former acinclude.m4.
+
+2000-03-10  Akim Demaille  <akim@epita.fr>
+
+	* src/closure.c:
+	Formatting changes of various comments.
+	Respect the GNU coding standards at various places.
+	Don't use `_()' when no translation is needed.
+
+1999-12-13  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/files.c:
+	OS/2 honors TMPDIR environment variable.
+
+1999-12-13  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/bison.texinfo: Tweaked spelling and grammar.
+	Updated ISBN.
+	Removed reference to price of printed copy.
+	Mention BISON_SIMPLE and BISON_HAIRY.
+
+1999-12-13  Jesse Thilo  <jthilo@gnu.org>
+
+	* configure.in, NEWS:
+	Bison 1.29 released.
+
+1999-10-27  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/.cvsignore, doc/Makefile.am, doc/refcard.tex:
+	Added reference card.
+
+1999-07-26  Jesse Thilo  <jthilo@gnu.org>
+
+	* po/ru.po: Added Russian translation.
+
+1999-07-26  Jesse Thilo  <jthilo@gnu.org>
+
+	* configure.in: Added Russian translation.
+
+1999-07-06  Jesse Thilo  <jthilo@gnu.org>
+
+	* configure.in, NEWS, README:
+	Released version 1.28.
+
+1999-06-14  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/system.h:
+	Squashed redefinition warning on some systems.
+
+	* src/getargs.c, src/Makefile.am, src/reader.c, src/version.c:
+	Have configure build version string instead of relying on ANSI string
+	concatentation.
+
+1999-06-14  Jesse Thilo  <jthilo@gnu.org>
+
+	* po/POTFILES.in: Got rid of version.c.
+
+1999-06-14  Jesse Thilo  <jthilo@gnu.org>
+
+	* acconfig.h, configure.in:
+	Have configure build version string instead of relying on ANSI string
+	concatentation.
+
+1999-06-08  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/bison.1:
+	Dropped mention of `+' for long-named options.
+
+1999-05-30  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/files.c: Added <unistd.h> for unlink().
+
+	* src/Makefile.am, src/system.h:
+	I18n fixes.
+
+1999-05-30  Jesse Thilo  <jthilo@gnu.org>
+
+	* README: Added a FAQ list.
+
+	* configure.in, acconfig.h:
+	I18n fixes.
+
+1999-05-30  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/FAQ, doc/Makefile.am:
+	Added a FAQ list.
+
+1999-05-19  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/alloc.h, src/symtab.h, src/version.c:
+	Protected inclusion of "config.h" with HAVE_CONFIG_H.
+
+1999-04-18  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/.cvsignore, src/Makefile.am:
+	Reorganized: sources in `src', documentation in `doc'.
+
+	* src/lex.c (literalchar):
+	fixed the code for escaping double quotes (thanks
+	Jonathan Czisny.)
+
+1999-04-18  Jesse Thilo  <jthilo@gnu.org>
+
+	* po/de.po, po/es.po, po/fr.po, po/nl.po, po/POTFILES.in:
+	Adjusted paths to reflect directory reorganization.
+
+1999-04-18  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/.cvsignore, doc/Makefile.am:
+	Reorganized: sources in `src', documentation in `doc'.
+
+1999-04-18  Jesse Thilo  <jthilo@gnu.org>
+
+	* configure.in:
+	Updated AC_INIT file to reflect directory reorganization.
+
+	* configure.in, .cvsignore, Makefile.am, POTFILES.in:
+	Reorganized: sources in `src', documentation in `doc'.
+
+1999-04-13  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/allocate.c:
+	Don't declare calloc() and realloc() if not necessary.
+
+1999-04-13  Jesse Thilo  <jthilo@gnu.org>
+
+	* configure.in, acconfig.h, acinclude.m4:
+	Don't declare calloc() and realloc() if not necessary.
+
+1999-03-23  Jesse Thilo  <jthilo@gnu.org>
+
+	* po/.cvsignore: Added i18n support.
+
+1999-03-23  Jesse Thilo  <jthilo@gnu.org>
+
+	* acconfig.h, configure.in, Makefile.am:
+	Added i18n support.
+
+1999-03-22  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/bison.s1: Fixed #line numbers.
+
+1999-03-15  Jesse Thilo  <jthilo@gnu.org>
+
+	* po/es.po, po/fr.po, po/nl.po, po/de.po:
+	Added PO files from Translation Project.
+
+1999-03-03  Jesse Thilo  <jthilo@gnu.org>
+
+	* Makefile.am:
+	Added support for non-ANSI compilers (ansi2knr).
+
+1999-02-16  Jesse Thilo  <jthilo@gnu.org>
+
+	* configure.in: Bumped version number to 1.27.
+
+	* Makefile.am:
+	Added `bison.simple' to list of files removed by `make distclean'.
+
+1999-02-12  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/files.c, src/files.h:
+	Defined locations of parser files in config.h instead of Makefile.
+
+1999-02-12  Jesse Thilo  <jthilo@gnu.org>
+
+	* acconfig.h, acinclude.m4, configure.in, Makefile.am:
+	Defined locations of parser files in config.h instead of Makefile.
+
+1999-02-09  Jesse Thilo  <jthilo@gnu.org>
+
+	* Makefile.am:
+	Removed inappropriate use of $< macro.
+
+1999-02-05  Jesse Thilo  <jthilo@gnu.org>
+
+	* po/Makefile.in.in, po/POTFILES.in:
+	Add `po' directory skeleton.
+
+1999-01-27  Jesse Thilo  <jthilo@gnu.org>
+
+	* README: Document help-bison list.
+
+	* configure.in: Add check for mkstemp().
+
+1999-01-20  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/conflicts.c, src/LR0.c, src/output.c, src/reader.c:
+	Hush a few compiler warnings.
+
+	* src/files.c:
+	Add tryclose(), which verifies that fclose was successful.
+	Hush a couple of compiler warnings.
+
+1999-01-20  Jesse Thilo  <jthilo@gnu.org>
+
+	* Makefile.am, OChangeLog:
+	ChangeLog is now automatically generated.  Include the old version as
+	OChangeLog.
+
+1999-01-14  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/gram.h, src/lalr.c, src/lex.c, src/lex.h, src/machine.h, src/main.c, src/nullable.c, src/output.c, src/print.c, src/reader.c, src/reduce.c, src/state.h, src/symtab.c, src/symtab.h, src/types.h, src/vmsgetargs.c, src/warshall.c, src/allocate.c, src/alloc.h, src/bison.s1, src/closure.c, src/conflicts.c, src/derives.c, src/files.c, src/files.h, src/getargs.c, src/gram.c, src/LR0.c:
+	Update FSF address.
+
+1999-01-14  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/bison.texinfo: Fix formatting glitch.
+
+	* doc/bison.texinfo: Update FSF address.
+
+1999-01-14  Jesse Thilo  <jthilo@gnu.org>
+
+	* acconfig.h: Update FSF address.
+
+1999-01-08  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/system.h:
+	Don't define PACKAGE here, since config.h defines it.
+
+1998-12-30  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/reader.c: Update copyright date.
+
+	* src/main.c:
+	Ditch sprintf to statically-sized buffers in fatal/warn functions in
+	favor of output directly to stderr (avoids buffer overruns).
+
+	* src/reader.c: Some checks for premature EOF.
+
+	* src/allocate.c, src/alloc.h, src/closure.c, src/conflicts.c, src/derives.c, src/getargs.c, src/gram.c, src/lalr.c, src/lex.c, src/LR0.c, src/main.c, src/nullable.c, src/output.c, src/print.c, src/reduce.c, src/symtab.c, src/symtab.h, src/warshall.c:
+	Use prototypes if the compiler understands them.
+
+	* src/files.c: Honor TMPDIR on Unix hosts.
+	Use prototypes if the compiler understands them.
+
+	* src/reader.c:
+	Fix a couple of buffer overrun bugs.
+	Use prototypes if the compiler understands them.
+
+	* src/system.h: Include unistd.h and ctype.h.
+	Use #ifdef instead of #if for NLS symbols.
+
+1998-12-30  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/bison.texinfo:
+	Delete comment "consider using @set for edition number, etc..." since
+	we now are doing so.
+
+1998-12-30  Jesse Thilo  <jthilo@gnu.org>
+
+	* configure.in:
+	Use prototypes if the compiler understands them.
+
+	* NEWS: Document 1.26 highlights.
+
+	* Makefile.am: Require Automake 1.3 or later.
+
+	* acconfig.h:
+	Use prototypes if the compiler understands them.
+
+1998-12-29  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/version.c:
+	Use VERSION symbol from automake for version number.
+
+1998-12-29  Jesse Thilo  <jthilo@gnu.org>
+
+	* acconfig.h, configure.in, version.cin:
+	Use VERSION symbol from automake for version number.
+
+1998-11-28  Jesse Thilo  <jthilo@gnu.org>
+
+	* Makefile.am:
+	Distribute original version of simple parser (bison.s1), not built
+	version (bison.simple).
+
+1998-11-28  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/bison.texinfo: Add info dir entry.
+
+	* doc/bison.texinfo:
+	Let automake put version number into documentation.
+
+1998-11-26  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/bison.cld, src/build.com, src/vmshlp.mar:
+	Add non-RCS files from /gd/gnu/bison.
+
+1998-11-26  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/bison.1:
+	Document the BISON_HAIRY and BISON_SIMPLE variables.
+
+1998-11-25  Jesse Thilo  <jthilo@gnu.org>
+
+	* src/version.c: Build version.c automatically.
+
+	* src/reader.c:
+	Fix token numbering (used to start at 258, not 257).
+
+	* src/system.h: Include config.h.
+
+	* src/getargs.c: Update bug report address.
+
+	* src/alloca.c, src/getopt1.c, src/getopt.c, src/getopt.h:
+	Get latest copies of alloca.c, getopt.c, getopt.h, getopt1.c from gnu.org.
+
+1998-11-25  Jesse Thilo  <jthilo@gnu.org>
+
+	* Makefile.am:
+	Rename bison.simple to bison.s1 (bison.simple is then built from bison.s1).
+
+	* configure.in, version.cin:
+	Build version.c automatically.
+
+	* AUTHORS: Add AUTHORS file.
+
+	* README: Update bug report address.
+
+	* bison.simple:
+	Rename bison.simple to bison.s1 (bison.simple is then built from bison.s1).
+
+	* configure.in, Makefile.am, Makefile.in, stamp-h.in:
+	Add automake stuff.
+
+1998-11-25  Jesse Thilo  <jthilo@gnu.org>
+
+	* doc/bison.texinfo: Clean up some formatting.
+
+1998-05-05  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.texinfo:
+	Explain better why to make a pure parser.
+
+1998-01-05  Richard Stallman  <rms@gnu.org>
+
+	* src/files.c (openfiles):
+	[_WIN32 && !__CYGWIN32__] Use TEMP or Temp to
+	find a temporary directory, if possible.  Do not unlink files while
+	they are open.
+
+1997-08-25  Richard Stallman  <rms@gnu.org>
+
+	* src/reader.c (stack_offset;):
+	Change some warni to warns.
+
+	* src/lex.c (literalchar): Use warns, not warni.
+
+1997-06-28  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: Add a Bison version comment.
+
+	* src/main.c (fatal, warn, berror):
+	Use program_name.
+
+1997-06-28  Richard Stallman  <rms@gnu.org>
+
+	* Makefile.in (bison_version): New variable.
+	(dist): Use that variable.
+	(bison.s1): Substitute the Bison version into bison.simple.
+
+	* bison.simple: Add a Bison version comment.
+
+1997-06-18  Richard Stallman  <rms@gnu.org>
+
+	* src/main.c (fatal, warn, berror):
+	Make error messages standard.
+	(toomany): Improve error message text.
+
+	* src/LR0.c, src/closure.c, src/conflicts.c, src/derives.c, src/files.c, src/lalr.c, src/lex.c, src/nullable.c, src/output.c, src/print.c, src/reader.c, src/reduce.c, src/symtab.c:
+	new.h renamed to alloc.h.
+
+1997-06-18  Richard Stallman  <rms@gnu.org>
+
+	* Makefile.in: new.h renamed to alloc.h.
+
+1997-05-24  Richard Stallman  <rms@gnu.org>
+
+	* src/lex.c (literalchar):
+	Fix the code for escaping \, " and '.
+
+	(lex): Avoid trouble when there are many chars
+	to discard in a char literal with just several chars in it.
+
+1997-05-17  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1:
+	Use malloc, if using alloca is troublesome.
+	(YYSTACK_USE_ALLOCA): New flag macro.
+	Define it for some systems and compilers.
+	(YYSTACK_ALLOC): New macro.
+	(yyparse): Use YYSTACK_ALLOC to allocate stack.
+	If it was malloc'd, free it.
+
+1997-05-17  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple:
+	Use malloc, if using alloca is troublesome.
+	(YYSTACK_USE_ALLOCA): New flag macro.
+	Define it for some systems and compilers.
+	(YYSTACK_ALLOC): New macro.
+	(yyparse): Use YYSTACK_ALLOC to allocate stack.
+	If it was malloc'd, free it.
+
+1997-04-23  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1:
+	(alloca) [__hpux]: Always define as __builtin_alloca.
+
+1997-04-23  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple:
+	(alloca) [__hpux]: Always define as __builtin_alloca.
+
+1997-04-22  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1:
+	[__hpux]: Include alloca.h (right for HPUX 10)
+	instead of declaring alloca (right for HPUX 9).
+
+	* src/bison.s1 (__yy_memcpy):
+	Declare arg `count' as unsigned int.
+	(yyparse): Cast third arg to __yy_memcpy to unsigned int.
+
+1997-04-22  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple:
+	[__hpux]: Include alloca.h (right for HPUX 10)
+	instead of declaring alloca (right for HPUX 9).
+
+	* bison.simple (__yy_memcpy):
+	Declare arg `count' as unsigned int.
+	(yyparse): Cast third arg to __yy_memcpy to unsigned int.
+
+1997-01-03  Richard Stallman  <rms@gnu.org>
+
+	* src/allocate.c: [__STDC__ or _MSC_VER]:
+	Declare calloc and realloc to return void *.
+
+1997-01-02  Richard Stallman  <rms@gnu.org>
+
+	* src/system.h:
+	[_MSC_VER]: Include stdlib.h and process.h.
+	[_MSC_VER] (getpid): Define as macro--translate it to _getpid.
+
+	* src/main.c (main): Return FAILURE as a value.
+	(printable_version): Declare arg as int, not char.
+
+1997-01-02  Richard Stallman  <rms@gnu.org>
+
+	* Makefile.in (dist):
+	Explicitly check for symlinks, and copy them.
+
+1996-12-19  Richard Stallman  <rms@gnu.org>
+
+	* src/files.c:
+	[_MSC_VER] (XPFILE, XPFILE1): Define, if not already defined.
+
+1996-12-18  Paul Eggert  <eggert@gnu.org>
+
+	* src/bison.s1 (yyparse):
+	If __GNUC__ and YYPARSE_PARAM are both defined,
+	declare yyparse to have a void * argument.
+
+1996-12-18  Paul Eggert  <eggert@gnu.org>
+
+	* bison.simple (yyparse):
+	If __GNUC__ and YYPARSE_PARAM are both defined,
+	declare yyparse to have a void * argument.
+
+1996-12-17  Richard Stallman  <rms@gnu.org>
+
+	* src/reduce.c (nbits): Add some casts.
+
+1996-08-12  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: Test _MSDOS as well as _MSDOS_.
+
+1996-08-12  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: Test _MSDOS as well as _MSDOS_.
+
+1996-07-31  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1:
+	[__sun && __i386]: Include alloca.h.
+
+1996-07-31  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple:
+	[__sun && __i386]: Include alloca.h.
+
+1996-07-30  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: Comment change.
+
+	* src/bison.s1: Test _MSDOS_, not MSDOS.
+
+1996-07-30  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: Comment change.
+
+	* bison.simple: Test _MSDOS_, not MSDOS.
+
+1996-06-01  Richard Stallman  <rms@gnu.org>
+
+	* src/reduce.c, src/reader.c, src/print.c, src/output.c, src/nullable.c, src/lex.c, src/lalr.c, src/getargs.c, src/derives.c, src/conflicts.c, src/closure.c, src/allocate.c:
+	Insert `_' macro around many string constants.
+
+	* src/main.c:
+	Insert `_' macro around many string constants.
+
+	(main): Call setlocale, bindtextdomain and textdomain.
+
+	* src/system.h: [HAVE_LOCALE_H]: Include locale.h.
+	[! HAVE_LOCALE_H] (setlocale): Define as no-op.
+	[ENABLE_NLS]: Include libintl.h.
+	[ENABLE_NLS] (gettext): Define.
+	[! ENABLE_NLS] (bintextdomain, textdomain, _): Consolation definitions.
+	(N_, PACKAGE, LOCALEDIR): New macros.
+
+1996-06-01  Richard Stallman  <rms@gnu.org>
+
+	* POTFILES.in: New file.
+
+	* Makefile.in (allocate.o):
+	Define target explicitly.
+
+	* Makefile.in (CFLAGS): Set to @CFLAGS@.
+	(LDFLAGS): Set to @LDFLAGS@.
+	(configure): Run autoconf only if preceding `cd' succeeds.
+	(bison.s1): Redirect output to temporary file then move the
+	temporary to the target, rather than redirecting directly to bison.s1.
+	(clean): Remove config.status and config.log.
+	(distclean): Don't remove config.status here.
+
+1996-05-12  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1:
+	(__yy_memcpy) [__cplusplus]: Reorder declarations of variables f and t.
+
+1996-05-12  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple:
+	(__yy_memcpy) [__cplusplus]: Reorder declarations of variables f and t.
+
+1996-05-11  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1 (__yy_memcpy):
+	Really reorder the args, as was supposedly done on Feb 14 1995.
+	(yyparse): Calls changed accordingly.
+
+1996-05-11  Richard Stallman  <rms@gnu.org>
+
+	* Makefile.in (dist): Don't use $(srcdir).
+
+	* bison.simple (__yy_memcpy):
+	Really reorder the args, as was supposedly done on Feb 14 1995.
+	(yyparse): Calls changed accordingly.
+
+1996-01-27  Richard Stallman  <rms@gnu.org>
+
+	* src/output.c (output_rule_data):
+	Test YYERROR_VERBOSE in the conditional
+	around the definition of ttyname.
+
+1995-12-29  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1:
+	Fix line numbers in #line commands.
+
+1995-12-29  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple:
+	Fix line numbers in #line commands.
+
+1995-12-27  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1 (YYPARSE_PARAM_DECL):
+	In C++, make it always null.
+	(YYPARSE_PARAM_ARG): New macro.
+	(yyparse): Use YYPARSE_PARAM_ARG.
+
+1995-12-27  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple (YYPARSE_PARAM_DECL):
+	In C++, make it always null.
+	(YYPARSE_PARAM_ARG): New macro.
+	(yyparse): Use YYPARSE_PARAM_ARG.
+
+1995-11-29  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.texinfo:
+	Describe literal string tokens, %raw, %no_lines, %token_table.
+
+1995-11-29  Daniel Hagerty  <hag@gnu.org>
+
+	* doc/bison.texinfo: Fixed update date
+
+1995-10-16  Richard Stallman  <rms@gnu.org>
+
+	* src/version.c: Version 1.25.
+
+1995-10-16  Richard Stallman  <rms@gnu.org>
+
+	* NEWS: *** empty log message ***
+
+1995-10-16  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.1, doc/bison.rnh:
+	Add new options.
+
+1995-10-15  Richard Stallman  <rms@gnu.org>
+
+	* src/vmsgetargs.c, src/getargs.c:
+	Added -n, -k, and -raw switches.
+	(noparserflag, toknumflag, rawtoknumflag): New variables.
+
+	* src/symtab.h (SALIAS):
+	New #define for adding aliases to %token.
+	(struct bucket): Added `alias' field.
+
+	* src/reduce.c (reduce_grammar):
+	Revise error message.
+	(print_notices): Remove final `.' from error message.
+
+	* src/reader.c (reader_output_yylsp):
+	New function.
+	(readgram): Use `#if 0' around code that accepted %command
+	inside grammar rules:  The documentation doesn't allow it,
+	and it will fail since the %command processors scan for the next %.
+	(parse_token_decl):  Extended the %token
+	declaration to allow a multi-character symbol as an alias.
+	(parse_thong_decl): New function.
+	(read_declarations): Added %thong declarations.
+	(read_declarations): Handle NOOP to deal with allowing
+	% declarations as another means to specify the flags.
+	(readgram): Allow %prec prior to semantics embedded in a rule.
+	(skip_to_char, read_declarations, copy_definition)
+	(parse_token_decl, parse_start_decl, parse_type_decl)
+	(parse_assoc_decl, parse_union_decl, parse_expect_decl)
+	(get_type_name, copy_guard, copy_action, readgram)
+	(get_type, packsymbols):  Revised most error messages.
+	Changed `fatal' to `warnxxx' to avoid aborting for error.
+	Revised and use multiple warnxxx functions to avoid using VARARGS1.
+	(read_declarations): Improve the error message for
+	an invalid character.  Do not abort.
+	(read_declarations, copy_guard, copy_action): Use
+	printable_version to avoid unprintable characters in printed output.
+	(parse_expect_decl): Error if argument to %expect exceeds 10 digits.
+	(parse_token_decl, parse_assoc_decl, parse_type_decl, get_type):
+	Allow the type of a non-terminal can be given
+	more than once, as long as all specifications give the same type.
+
+	* src/output.c:
+	(output_headers, output_trailers, output, output_gram)
+	(output_rule_data): Implement noparserflag variable.
+	Implement toknumflag variable.
+	(output): Call reader_output_yylsp to output LTYPESTR.
+
+	* src/main.c (main):
+	 If reader sees an error, don't process the grammar.
+	(fatals): Updated to not use VARARGS1.
+	(printable_version, int_to_string, warn, warni, warns, warnss)
+	(warnsss): New error reporting functions.  Avoid abort for error.
+
+	* src/lex.h:
+	Added THONG and NOOP for alias processing.
+	Added SETOPT for the new code that allows setting options with %flags.
+
+	* src/lex.c:
+	Include getopt.h.  Add some extern decls.
+	(safegetc): New function to deal with EOF gracefully.
+	(literalchar); new function to deal with reading \ escapes.
+	(lex): Use literalchar.
+	(lex): Implemented "..." tokens.
+	(literalchar, lex, parse_percent_token): Made tokenbuffer
+	always contain the token.  This includes growing the token
+	buffer while reading an integer.
+	(parse_percent_token): Replaced if-else statement with percent_table.
+	(parse_percent_token): Added % declarations as another
+	way to specify the flags -n, -l, and -r.  Also added hooks for
+	-d, -k, -y, -v, -t, -p, -b, -o, but implementation requires
+	major changes to files.c.
+	(lex) Retain in the incoming stream a character following
+	an incorrect '/'.
+	(skip_white_space, lex):  Revised most error messages
+	and changed fatal to warn to avoid aborting.
+	(percent_table):  Added %thong declarations.
+
+	* src/gram.h: Comment changes.
+
+	* src/files.c (openfiles, open_extra_files, done):
+	 Add faction flag
+	and actfile file.  Handle noparserflag.  Both for -n switch.
+
+	* src/conflicts.c (resolve_sr_conflict):
+	Remove use of alloca.
+
+1995-06-01  Jim Meyering  <meyering@gnu.org>
+
+	* doc/bison.texinfo: *** empty log message ***
+
+1995-05-06  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: Comment change.
+
+1995-05-06  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: Comment change.
+
+1995-05-03  Richard Stallman  <rms@gnu.org>
+
+	* src/version.c: Version now 1.24.
+
+	* src/bison.s1: Change distribution terms.
+
+	* src/version.c: Version now 1.23.
+
+1995-05-03  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.texinfo:
+	Rewrite "Conditions for Using Bison".
+	Update version to 1.24.
+
+1995-05-03  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: Change distribution terms.
+
+1995-02-23  Richard Stallman  <rms@gnu.org>
+
+	* src/files.c: Test __VMS_POSIX as well as VMS.
+
+1995-02-14  Jim Meyering  <meyering@gnu.org>
+
+	* src/bison.s1 (__yy_memcpy):
+	Renamed from __yy_bcopy to avoid
+	confusion.  Reverse FROM and TO arguments to be consistent with
+	those of memcpy.
+
+1995-02-14  Jim Meyering  <meyering@gnu.org>
+
+	* bison.simple (__yy_memcpy):
+	Renamed from __yy_bcopy to avoid
+	confusion.  Reverse FROM and TO arguments to be consistent with
+	those of memcpy.
+
+1994-11-10  David J. MacKenzie  <djm@gnu.org>
+
+	* NEWS: reformat
+
+	* NEWS: New file.
+
+	* Makefile.in (DISTFILES): Include NEWS.
+
+	* Makefile.in (DISTFILES):
+	Include install-sh, not install.sh.
+
+	* configure.in: Update to Autoconf v2 macro names.
+
+1994-10-05  David J. MacKenzie  <djm@gnu.org>
+
+	* Makefile.in: fix typo
+
+	* Makefile.in (prefix, exec_prefix):
+	Let configure set them.
+
+1994-09-28  David J. MacKenzie  <djm@gnu.org>
+
+	* Makefile.in: Set datadir to $(prefix)/share.
+
+1994-09-15  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1:
+	Update copyright notice and GPL version.
+
+1994-09-15  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple:
+	Update copyright notice and GPL version.
+
+1994-07-12  Richard Stallman  <rms@gnu.org>
+
+	* src/reduce.c, src/reader.c:
+	entered into RCS
+
+1994-05-05  David J. MacKenzie  <djm@gnu.org>
+
+	* Makefile.in: entered into RCS
+
+1994-03-26  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: entered into RCS
+
+1994-03-26  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: entered into RCS
+
+1994-03-25  Richard Stallman  <rms@gnu.org>
+
+	* src/main.c: entered into RCS
+
+1994-03-24  Richard Stallman  <rms@gnu.org>
+
+	* src/conflicts.c: entered into RCS
+
+1994-01-02  Richard Stallman  <rms@gnu.org>
+
+	* Makefile.in: *** empty log message ***
+
+1993-11-21  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: *** empty log message ***
+
+1993-11-21  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.texinfo: entered into RCS
+
+	* doc/bison.texinfo: *** empty log message ***
+
+1993-11-21  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: *** empty log message ***
+
+1993-10-25  David J. MacKenzie  <djm@gnu.org>
+
+	* doc/bison.texinfo: *** empty log message ***
+
+1993-10-19  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: *** empty log message ***
+
+1993-10-19  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: *** empty log message ***
+
+1993-10-14  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: *** empty log message ***
+
+1993-10-14  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: *** empty log message ***
+
+1993-09-14  David J. MacKenzie  <djm@gnu.org>
+
+	* doc/bison.texinfo: *** empty log message ***
+
+1993-09-13  Noah Friedman  <friedman@gnu.org>
+
+	* Makefile.in: *** empty log message ***
+
+1993-09-10  Richard Stallman  <rms@gnu.org>
+
+	* src/conflicts.c: *** empty log message ***
+
+	* src/system.h: entered into RCS
+
+1993-09-10  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.1: entered into RCS
+
+1993-09-06  Noah Friedman  <friedman@gnu.org>
+
+	* src/version.c: entered into RCS
+
+1993-09-06  Noah Friedman  <friedman@gnu.org>
+
+	* Makefile.in: *** empty log message ***
+
+1993-07-30  David J. MacKenzie  <djm@gnu.org>
+
+	* Makefile.in: *** empty log message ***
+
+1993-07-24  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: *** empty log message ***
+
+1993-07-24  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: *** empty log message ***
+
+1993-07-08  David J. MacKenzie  <djm@gnu.org>
+
+	* Makefile.in: *** empty log message ***
+
+1993-07-04  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: *** empty log message ***
+
+1993-07-04  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: *** empty log message ***
+
+1993-06-26  David J. MacKenzie  <djm@gnu.org>
+
+	* src/getargs.c: entered into RCS
+
+1993-06-26  David J. MacKenzie  <djm@gnu.org>
+
+	* doc/bison.texinfo: *** empty log message ***
+
+	* doc/bison.1: New file.
+
+1993-06-25  Richard Stallman  <rms@gnu.org>
+
+	* src/getargs.c: New file.
+
+1993-06-16  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: *** empty log message ***
+
+1993-06-16  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: *** empty log message ***
+
+1993-06-03  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.s1: New file.
+
+1993-06-03  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.texinfo: *** empty log message ***
+
+1993-06-03  Richard Stallman  <rms@gnu.org>
+
+	* bison.simple: New file.
+
+1993-05-19  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.texinfo: New file.
+
+1993-05-07  Noah Friedman  <friedman@gnu.org>
+
+	* Makefile.in: *** empty log message ***
+
+1993-04-28  Noah Friedman  <friedman@gnu.org>
+
+	* src/reader.c: *** empty log message ***
+
+1993-04-23  Noah Friedman  <friedman@gnu.org>
+
+	* src/alloc.h: entered into RCS
+
+1993-04-20  David J. MacKenzie  <djm@gnu.org>
+
+	* src/version.c: *** empty log message ***
+
+	* src/files.c, src/allocate.c:
+	entered into RCS
+
+	* src/reader.c: *** empty log message ***
+
+	* src/lex.c: entered into RCS
+
+	* src/conflicts.c: New file.
+
+	* src/symtab.c: entered into RCS
+
+	* src/alloc.h: New file.
+
+	* src/LR0.c: entered into RCS
+
+1993-04-18  Noah Friedman  <friedman@gnu.org>
+
+	* src/reader.c: New file.
+
+	* src/version.c: *** empty log message ***
+
+1993-04-18  Noah Friedman  <friedman@gnu.org>
+
+	* Makefile.in: *** empty log message ***
+
+1993-04-17  Noah Friedman  <friedman@gnu.org>
+
+	* Makefile.in: *** empty log message ***
+
+1993-04-15  Richard Stallman  <rms@gnu.org>
+
+	* src/main.c, src/files.c:
+	New file.
+
+1993-04-15  Noah Friedman  <friedman@gnu.org>
+
+	* configure.in: entered into RCS
+
+	* configure.in: *** empty log message ***
+
+	* configure.in: New file.
+
+1993-04-14  Richard Stallman  <rms@gnu.org>
+
+	* Makefile.in: New file.
+
+1993-04-13  Richard Stallman  <rms@gnu.org>
+
+	* src/version.c: New file.
+
+1993-03-25  Richard Stallman  <rms@gnu.org>
+
+	* src/output.c: entered into RCS
+
+1992-09-25  Richard Stallman  <rms@gnu.org>
+
+	* configure.bat: entered into RCS
+
+1992-06-22  Richard Stallman  <rms@gnu.org>
+
+	* src/vmsgetargs.c: entered into RCS
+
+1992-06-22  Richard Stallman  <rms@gnu.org>
+
+	* doc/bison.rnh: entered into RCS
+
+1992-04-20  David J. MacKenzie  <djm@gnu.org>
+
+	* README: entered into RCS
+
+1992-01-22  Richard Stallman  <rms@gnu.org>
+
+	* src/machine.h: entered into RCS
+
+1991-12-21  Richard Stallman  <rms@gnu.org>
+
+	* src/lalr.c, src/closure.c:
+	entered into RCS
+
+1991-12-20  Richard Stallman  <rms@gnu.org>
+
+	* src/state.h: entered into RCS
+
+1991-12-18  Richard Stallman  <rms@gnu.org>
+
+	* src/print.c, src/nullable.c, src/derives.c:
+	entered into RCS
+
+1991-11-03  David J. MacKenzie  <djm@gnu.org>
+
+	* src/warshall.c, src/types.h, src/symtab.h, src/lex.h, src/gram.c, src/gram.h, src/files.h:
+	entered into RCS
+
+1988-09-09  Richard Stallman  <rms@gnu.org>
+
+	* src/bison.hairy: entered into RCS
+
+1987-12-16  Richard Stallman  <rms@gnu.org>
+
+	* REFERENCES: entered into RCS
+
+
+	-----
+
+	Copyright (C) 1987-1988, 1991-2012 Free Software Foundation,
+	Inc.
+
+	Copying and distribution of this file, with or without
+	modification, are permitted provided the copyright notice and this
+	notice are preserved.
diff --git a/GNUmakefile b/GNUmakefile
index 675af82..58f2ead 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,58 +1,127 @@
-# Having a separate GNUmakefile lets me `include' the dynamically
-# generated rules created via Makefile.maint as well as Makefile.maint itself.
+# Having a separate GNUmakefile lets me 'include' the dynamically
+# generated rules created via cfg.mk (package-local configuration)
+# as well as maint.mk (generic maintainer rules).
 # This makefile is used only if you run GNU Make.
 # It is necessary if you want to build targets usually of interest
 # only to the maintainer.
 
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2001, 2003, 2006-2012 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-# Systems where /bin/sh is not the default shell need this.  The $(shell)
-# command below won't work with e.g. stock DOS/Windows shells.
-ifeq ($(wildcard /bin/s[h]),/bin/sh)
-SHELL = /bin/sh
-else
-# will be used only with the next shell-test line, then overwritten
-# by a configured-in value
-SHELL = sh
-endif
-
-have-Makefile := $(shell test -f Makefile && echo yes)
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # If the user runs GNU make but has not yet run ./configure,
 # give them a diagnostic.
-ifeq ($(have-Makefile),yes)
+_gl-Makefile := $(wildcard [M]akefile)
+ifneq ($(_gl-Makefile),)
 
 # Make tar archive easier to reproduce.
 export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
 
+# Allow the user to add to this in the Makefile.
+ALL_RECURSIVE_TARGETS =
+
 include Makefile
-include $(srcdir)/Makefile.cfg
-include $(srcdir)/Makefile.maint
+
+# Some projects override e.g., _autoreconf here.
+-include $(srcdir)/cfg.mk
+
+# Allow cfg.mk to override these.
+_build-aux ?= build-aux
+_autoreconf ?= autoreconf -v
+
+include $(srcdir)/maint.mk
+
+# Ensure that $(VERSION) is up to date for dist-related targets, but not
+# for others: rerunning autoreconf and recompiling everything isn't cheap.
+_have-git-version-gen := \
+  $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes)
+ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL))
+  _is-dist-target ?= $(filter-out %clean, \
+    $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS)))
+  _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS)))
+  ifneq (,$(_is-dist-target)$(_is-install-target))
+    _curr-ver := $(shell cd $(srcdir)				\
+                   && $(_build-aux)/git-version-gen		\
+                         .tarball-version			\
+                         $(git-version-gen-tag-sed-script))
+    ifneq ($(_curr-ver),$(VERSION))
+      ifeq ($(_curr-ver),UNKNOWN)
+        $(info WARNING: unable to verify if $(VERSION) is the correct version)
+      else
+        ifneq (,$(_is-install-target))
+          # GNU Coding Standards state that 'make install' should not cause
+          # recompilation after 'make all'.  But as long as changing the version
+          # string alters config.h, the cost of having 'make all' always have an
+          # up-to-date version is prohibitive.  So, as a compromise, we merely
+          # warn when installing a version string that is out of date; the user
+          # should run 'autoreconf' (or something like 'make distcheck') to
+          # fix the version, 'make all' to propagate it, then 'make install'.
+          $(info WARNING: version string $(VERSION) is out of date;)
+          $(info run '$(MAKE) _version' to fix it)
+        else
+          $(info INFO: running autoreconf for new version string: $(_curr-ver))
+GNUmakefile: _version
+	touch GNUmakefile
+        endif
+      endif
+    endif
+  endif
+endif
+
+.PHONY: _version
+_version:
+	cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf)
+	$(MAKE) $(AM_MAKEFLAGS) Makefile
 
 else
 
-all:
-	@echo There seems to be no Makefile in this directory.
-	@echo "You must run ./configure before running \`make'."
+.DEFAULT_GOAL := abort-due-to-no-makefile
+srcdir = .
+
+# The package can override .DEFAULT_GOAL to run actions like autoreconf.
+-include ./cfg.mk
+
+# Allow cfg.mk to override these.
+_build-aux ?= build-aux
+_autoreconf ?= autoreconf -v
+
+include ./maint.mk
+
+ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
+$(MAKECMDGOALS): abort-due-to-no-makefile
+endif
+
+abort-due-to-no-makefile:
+	@echo There seems to be no Makefile in this directory.   1>&2
+	@echo "You must run ./configure before running 'make'." 1>&2
 	@exit 1
 
 endif
 
 # Tell version 3.79 and up of GNU make to not build goals in this
-# directory in parallel.  This is necessary in case someone tries to
-# build multiple targets on one command line.
+# directory in parallel, in case someone tries to build multiple
+# targets, and one of them can cause a recursive target to be invoked.
+
+# Only set this if Automake doesn't provide it.
+AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
+  $(RECURSIVE_CLEAN_TARGETS:-recursive=) \
+  dist distcheck tags ctags
+
+ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
+
+ifneq ($(word 2, $(MAKECMDGOALS)), )
+ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
 .NOTPARALLEL:
+endif
+endif
diff --git a/INSTALL b/INSTALL
index 23e5f25..6e90e07 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,16 +1,25 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Inc.
 
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
 
 Basic Installation
 ==================
 
-These are generic installation instructions.
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
 
    The `configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
@@ -23,9 +32,9 @@
 
    It can also use an optional file (typically called `config.cache'
 and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  (Caching is
+the results of its tests to speed up reconfiguring.  Caching is
 disabled by default to prevent problems with accidental use of stale
-cache files.)
+cache files.
 
    If you need to do unusual things to compile the package, please try
 to figure out how `configure' could check whether to do them, and mail
@@ -35,30 +44,37 @@
 may remove or edit it.
 
    The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
 
-The simplest way to compile this package is:
+   The simplest way to compile this package is:
 
   1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
+     `./configure' to configure the package for your system.
 
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
 
   2. Type `make' to compile the package.
 
   3. Optionally, type `make check' to run any self-tests that come with
-     the package.
+     the package, generally using the just-built uninstalled binaries.
 
   4. Type `make install' to install the programs and any data files and
-     documentation.
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
 
-  5. You can remove the program binaries and object files from the
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
      source code directory by typing `make clean'.  To also remove the
      files that `configure' created (so you can compile the package for
      a different kind of computer), type `make distclean'.  There is
@@ -67,45 +83,69 @@
      all sorts of other programs in order to regenerate files that came
      with the distribution.
 
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
 Compilers and Options
 =====================
 
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
 
    You can give `configure' initial values for configuration parameters
 by setting variables in the command line or in the environment.  Here
 is an example:
 
-     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
 
    *Note Defining Variables::, for more details.
 
 Compiling For Multiple Architectures
 ====================================
 
-You can compile the package for more than one kind of computer at the
+   You can compile the package for more than one kind of computer at the
 same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
 
-   If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory.  After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
 
 Installation Names
 ==================
 
-By default, `make install' installs the package's commands under
+   By default, `make install' installs the package's commands under
 `/usr/local/bin', include files under `/usr/local/include', etc.  You
 can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
 
    You can specify separate installation prefixes for
 architecture-specific files and architecture-independent files.  If you
@@ -116,16 +156,47 @@
    In addition, if you use an unusual directory layout you can give
 options like `--bindir=DIR' to specify different values for particular
 kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
 
    If the package supports it, you can cause programs to be installed
 with an extra prefix or suffix on their names by giving `configure' the
 option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
+   Some packages pay attention to `--enable-FEATURE' options to
 `configure', where FEATURE indicates an optional part of the package.
 They may also pay attention to `--with-PACKAGE' options, where PACKAGE
 is something like `gnu-as' or `x' (for the X Window System).  The
@@ -137,14 +208,58 @@
 you can use the `configure' options `--x-includes=DIR' and
 `--x-libraries=DIR' to specify their locations.
 
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
 Specifying the System Type
 ==========================
 
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
 `--build=TYPE' option.  TYPE can either be a short name for the system
 type, such as `sun4', or a canonical name which has the form:
 
@@ -152,7 +267,8 @@
 
 where SYSTEM can have one of these forms:
 
-     OS KERNEL-OS
+     OS
+     KERNEL-OS
 
    See the file `config.sub' for the possible values of each field.  If
 `config.sub' isn't included in this package, then this package doesn't
@@ -170,9 +286,9 @@
 Sharing Defaults
 ================
 
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
 `configure' looks for `PREFIX/share/config.site' if it exists, then
 `PREFIX/etc/config.site' if it exists.  Or, you can set the
 `CONFIG_SITE' environment variable to the location of the site script.
@@ -181,7 +297,7 @@
 Defining Variables
 ==================
 
-Variables not defined in a site shell script can be set in the
+   Variables not defined in a site shell script can be set in the
 environment passed to `configure'.  However, some packages may run
 configure again during the build, and the customized values of these
 variables may be lost.  In order to avoid this problem, you should set
@@ -190,21 +306,30 @@
      ./configure CC=/usr/local2/bin/gcc
 
 causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).  Here is a another example:
+overridden in the site shell script).
 
-     /bin/bash ./configure CONFIG_SHELL=/bin/bash
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
 
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 
 `configure' Invocation
 ======================
 
-`configure' recognizes the following options to control how it operates.
+   `configure' recognizes the following options to control how it
+operates.
 
 `--help'
 `-h'
-     Print a summary of the options to `configure', and exit.
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
 
 `--version'
 `-V'
@@ -231,6 +356,15 @@
      Look for the package's source code in directory DIR.  Usually
      `configure' can determine that directory automatically.
 
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
 `configure' also accepts some other, not widely useful, options.  Run
 `configure --help' for more details.
-
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 41b2ee4..0000000
--- a/Makefile
+++ /dev/null
@@ -1,704 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-
-srcdir = .
-top_srcdir = .
-
-pkgdatadir = $(datadir)/bison
-pkglibdir = $(libdir)/bison
-pkgincludedir = $(includedir)/bison
-top_builddir = .
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /usr/bin/install -c
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/config.hin \
-	$(top_srcdir)/configure ABOUT-NLS AUTHORS COPYING ChangeLog \
-	INSTALL NEWS THANKS TODO
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
-	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
-	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
-	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno configure.status.lineno
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-exec-recursive install-info-recursive \
-	install-recursive installcheck-recursive installdirs-recursive \
-	pdf-recursive ps-recursive uninstall-info-recursive \
-	uninstall-recursive
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(aclocaldir)"
-aclocalDATA_INSTALL = $(INSTALL_DATA)
-DATA = $(aclocal_DATA)
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  { test ! -d $(distdir) \
-    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr $(distdir); }; }
-DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9
-AMDEP_FALSE = #
-AMDEP_TRUE = 
-AMTAR = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar
-AUTOCONF = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader
-AUTOM4TE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te
-AUTOMAKE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9
-AWK = gawk
-BISON_CXX_WORKS = :
-BISON_CXX_WORKS_FALSE = #
-BISON_CXX_WORKS_TRUE = 
-BISON_LOCALEDIR = /usr/share/locale
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
-CPP = gcc -E
-CPPFLAGS = 
-CXX = g++
-CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = grep -E
-EXEEXT = 
-GCC = yes
-GETOPT_H = 
-GMSGFMT = /usr/bin/msgfmt
-HAVE__BOOL = 1
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
-INTLLIBS = 
-INTL_MACOSX_LIBS = 
-LDFLAGS = 
-LEX = flex
-LEXLIB = -lfl
-LEX_OUTPUT_ROOT = lex.yy
-LIBICONV = -liconv
-LIBINTL = 
-LIBOBJS =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-LIBS = 
-LTLIBICONV = -liconv
-LTLIBINTL = 
-LTLIBOBJS =  dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo
-M4 = /usr/bin/m4
-MAKEINFO = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo
-MKINSTALLDIRS = $(top_builddir)/build-aux/mkinstalldirs
-MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge
-O0CFLAGS = -g 
-O0CXXFLAGS = -g 
-OBJEXT = o
-PACKAGE = bison
-PACKAGE_BUGREPORT = bug-bison@gnu.org
-PACKAGE_NAME = GNU Bison
-PACKAGE_STRING = GNU Bison 2.3
-PACKAGE_TARNAME = bison
-PACKAGE_VERSION = 2.3
-PATH_SEPARATOR = :
-POSUB = po
-RANLIB = ranlib
-SET_MAKE = 
-SHELL = /bin/sh
-STDBOOL_H = 
-STRIP = 
-UNISTD_H = 
-USE_NLS = yes
-VALGRIND = 
-VERSION = 2.3
-WARNING_CFLAGS = 
-WARNING_CXXFLAGS = 
-WERROR_CFLAGS = 
-XGETTEXT = /usr/bin/xgettext
-YACC = bison -y
-YACC_LIBRARY = liby.a
-YACC_SCRIPT = yacc
-ac_ct_CC = gcc
-ac_ct_CXX = g++
-ac_ct_RANLIB = ranlib
-ac_ct_STRIP = 
-
-# Files installed for use by Automake.
-aclocaldir = ${datadir}/aclocal
-am__fastdepCC_FALSE = #
-am__fastdepCC_TRUE = 
-am__fastdepCXX_FALSE = #
-am__fastdepCXX_TRUE = 
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-datadir = ${prefix}/share
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-includedir = ${prefix}/include
-infodir = ${prefix}/info
-install_sh = /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localstatedir = ${prefix}/var
-mandir = ${prefix}/man
-mkdir_p = mkdir -p --
-oldincludedir = /usr/include
-prefix = /home/phanna/src/bison
-program_transform_name = s,x,x,
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-sysconfdir = ${prefix}/etc
-target_alias = 
-ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = build-aux po runtime-po lib data src doc examples tests
-aclocal_DATA = m4/bison-i18n.m4
-EXTRA_DIST = GNUmakefile Makefile.cfg Makefile.maint \
-  OChangeLog PACKAGING \
-  djgpp/Makefile.maint djgpp/README.in djgpp/config.bat \
-  djgpp/config.sed djgpp/config.site djgpp/config_h.sed \
-  djgpp/subpipe.c djgpp/subpipe.h djgpp/djunpack.bat \
-  djgpp/fnchange.lst
-
-all: config.h
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-am--refresh:
-	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
-	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    echo ' $(SHELL) ./config.status'; \
-	    $(SHELL) ./config.status;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	$(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-
-config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) stamp-h1; \
-	else :; fi
-
-stamp-h1: $(srcdir)/config.hin $(top_builddir)/config.status
-	@rm -f stamp-h1
-	cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.hin:  $(am__configure_deps) 
-	cd $(top_srcdir) && $(AUTOHEADER)
-	rm -f stamp-h1
-	touch $@
-
-distclean-hdr:
-	-rm -f config.h stamp-h1
-uninstall-info-am:
-install-aclocalDATA: $(aclocal_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(aclocaldir)" || $(mkdir_p) "$(DESTDIR)$(aclocaldir)"
-	@list='$(aclocal_DATA)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(aclocalDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(aclocaldir)/$$f'"; \
-	  $(aclocalDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(aclocaldir)/$$f"; \
-	done
-
-uninstall-aclocalDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(aclocal_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(aclocaldir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(aclocaldir)/$$f"; \
-	done
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@case `sed 15q $(srcdir)/NEWS` in \
-	*"$(VERSION)"*) : ;; \
-	*) \
-	  echo "NEWS not updated; not releasing" 1>&2; \
-	  exit 1;; \
-	esac
-	$(am__remove_distdir)
-	mkdir $(distdir)
-	$(mkdir_p) $(distdir)/djgpp $(distdir)/m4 $(distdir)/po $(distdir)/runtime-po $(distdir)/tests
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(mkdir_p) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	    distdir=`$(am__cd) $(distdir) && pwd`; \
-	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-	    (cd $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$top_distdir" \
-	        distdir="$$distdir/$$subdir" \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
-	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r $(distdir)
-dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
-dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
-
-dist-tarZ: distdir
-	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__remove_distdir)
-
-dist-shar: distdir
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__remove_distdir)
-
-dist-zip: distdir
-	-rm -f $(distdir).zip
-	zip -rq $(distdir).zip $(distdir)
-	$(am__remove_distdir)
-
-dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-	case '$(DIST_ARCHIVES)' in \
-	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
-	*.zip*) \
-	  unzip $(distdir).zip ;;\
-	esac
-	chmod -R a-w $(distdir); chmod a+w $(distdir)
-	mkdir $(distdir)/_build
-	mkdir $(distdir)/_inst
-	chmod a-w $(distdir)
-	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && cd $(distdir)/_build \
-	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
-	  && $(MAKE) $(AM_MAKEFLAGS) check \
-	  && $(MAKE) $(AM_MAKEFLAGS) install \
-	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-	        distuninstallcheck \
-	  && chmod -R a-w "$$dc_install_base" \
-	  && ({ \
-	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
-	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist \
-	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
-	$(am__remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
-distuninstallcheck:
-	@cd $(distuninstallcheck_dir) \
-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
-	   || { echo "ERROR: files left after uninstall:" ; \
-	        if test -n "$(DESTDIR)"; then \
-	          echo "  (check DESTDIR support)"; \
-	        fi ; \
-	        $(distuninstallcheck_listfiles) ; \
-	        exit 1; } >&2
-distcleancheck: distclean
-	@if test '$(srcdir)' = . ; then \
-	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-	  exit 1 ; \
-	fi
-	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-	  || { echo "ERROR: files left in build directory after distclean:" ; \
-	       $(distcleancheck_listfiles) ; \
-	       exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA) config.h
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(aclocaldir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
-	done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-aclocalDATA
-
-install-exec-am:
-
-install-info: install-info-recursive
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-aclocalDATA uninstall-info-am
-
-uninstall-info: uninstall-info-recursive
-
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
-	check-am clean clean-generic clean-recursive ctags \
-	ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
-	dist-tarZ dist-zip distcheck distclean distclean-generic \
-	distclean-hdr distclean-recursive distclean-tags \
-	distcleancheck distdir distuninstallcheck dvi dvi-am html \
-	html-am info info-am install install-aclocalDATA install-am \
-	install-data install-data-am install-exec install-exec-am \
-	install-info install-info-am install-man install-strip \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic \
-	maintainer-clean-recursive mostlyclean mostlyclean-generic \
-	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-aclocalDATA uninstall-am uninstall-info-am
-
-
-.PHONY: maintainer-check
-maintainer-check:
-	cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/Makefile.am b/Makefile.am
index f247e24..aed166e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,37 +1,80 @@
 ## Process this file with automake to produce Makefile.in -*-Makefile-*-
-## Copyright (C) 2001, 2002, 2003, 2004, 2005 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 of the License, or
-## (at your option) any later version.
+## Copyright (C) 2001-2012 Free Software Foundation, Inc.
 
-## 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., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301  USA
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
 ACLOCAL_AMFLAGS = -I m4
 
-SUBDIRS = build-aux po runtime-po lib data src doc examples tests
+SUBDIRS = build-aux po runtime-po lib data src doc examples tests etc
 
 # Files installed for use by Automake.
 aclocaldir = @aclocaldir@
 aclocal_DATA = m4/bison-i18n.m4
 
-EXTRA_DIST = GNUmakefile Makefile.cfg Makefile.maint \
-  OChangeLog PACKAGING \
+EXTRA_DIST = .prev-version .version \
+  cfg.mk ChangeLog-1998 ChangeLog-2012 PACKAGING \
   djgpp/Makefile.maint djgpp/README.in djgpp/config.bat \
   djgpp/config.sed djgpp/config.site djgpp/config_h.sed \
   djgpp/subpipe.c djgpp/subpipe.h djgpp/djunpack.bat \
-  djgpp/fnchange.lst
+  djgpp/fnchange.lst djgpp/testsuite.sed
 
+MAINTAINER_CHECKS =				\
+  maintainer-check				\
+  maintainer-push-check				\
+  maintainer-xml-check				\
+  maintainer-release-check
+.PHONY: $(MAINTAINER_CHECKS)
+$(MAINTAINER_CHECKS):
+	$(AM_V_GEN)cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
 
-.PHONY: maintainer-check
-maintainer-check:
-	cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
+# See comments in build-aux/git-version-gen.  However, we make .version depend
+# on configure so that .version and VERSION/PACKAGE_VERSION stay in sync in the
+# working copy (for example, when you run autoreconf && make).  Allowing these
+# to fall out of sync appears to have little potential to improve Bison build
+# efficiency (even if we were to replace VERSION/PACKAGE_VERSION with .version
+# everywhere possible).  On the other hand, it could be harmful.  For example,
+# a developer might naively reference .version in a test case while the bison
+# executable still compiles with VERSION, and so the test case might fail or
+# pass incorrectly.
+BUILT_SOURCES = $(top_srcdir)/.version
+$(top_srcdir)/.version: configure
+	$(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
+dist-hook: gen-ChangeLog
+	$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
+
+.PHONY: update-b4-copyright update-package-copyright-year
+update-b4-copyright:
+	$(AM_V_GEN) find data -type f		\
+	  | grep -v -E '^data/bison.m4$$'	\
+	  | xargs $(build_aux)/$@
+	@echo 'warning: src/parse-gram.[hc] may need to be regenerated.'
+update-package-copyright-year:
+	$(AM_V_GEN)$(build_aux)/$@ configure.ac
+
+gen_start_date = 2012-01-16
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+	$(AM_V_GEN)if test -d $(srcdir)/.git; then	\
+	  cl=$(distdir)/ChangeLog &&			\
+	  rm -f $$cl.tmp &&				\
+	  $(top_srcdir)/build-aux/gitlog-to-changelog	\
+	    --strip-tab					\
+	    --strip-cherry-pick				\
+	    --no-cluster				\
+	    --amend=$(srcdir)/build-aux/git-log-fix	\
+	    --srcdir=$(srcdir)				\
+	    --since=$(gen_start_date) > $$cl.tmp &&	\
+	  mv -f $$cl.tmp $$cl;				\
+	fi
diff --git a/Makefile.cfg b/Makefile.cfg
deleted file mode 100644
index fb15523..0000000
--- a/Makefile.cfg
+++ /dev/null
@@ -1,48 +0,0 @@
-# Customize Makefile.maint for Bison.            -*- makefile -*-
-# Copyright (C) 2003, 2005, 2006 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-build_aux_dir = $(srcdir)/build-aux
-prev_version_file = $(build_aux_dir)/prev-version.txt
-announce_gen   = $(build_aux_dir)/announce-gen
-release_archive_dir = releases
-
-# Use alpha.gnu.org for alpha and beta releases.
-# Use ftp.gnu.org for major releases.
-gnu_ftp_host-alpha = alpha
-gnu_ftp_host-beta = alpha
-gnu_ftp_host-major = ftp
-gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))
-
-url_dir_list = \
-  ftp://$(gnu_rel_host).gnu.org/gnu/bison
-
-# Files to update automatically.
-wget_files = \
-  $(build_aux_dir)/config.guess \
-  $(build_aux_dir)/config.sub \
-  $(build_aux_dir)/texinfo.tex \
-
-cvs_files = \
-  $(build_aux_dir)/install-sh \
-  $(build_aux_dir)/mdate-sh \
-  $(build_aux_dir)/missing \
-  $(build_aux_dir)/mkinstalldirs
-
-# Tests not to run.
-local-checks-to-skip = \
-  changelog-check
diff --git a/Makefile.in b/Makefile.in
index 9c62f02..f3995ec 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,15 +14,41 @@
 
 @SET_MAKE@
 
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = .
+pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -38,169 +64,1321 @@
 host_triplet = @host@
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/config.hin \
-	$(top_srcdir)/configure ABOUT-NLS AUTHORS COPYING ChangeLog \
-	INSTALL NEWS THANKS TODO
+	$(srcdir)/Makefile.in $(top_srcdir)/build-aux/compile \
+	$(top_srcdir)/build-aux/config.guess \
+	$(top_srcdir)/build-aux/config.rpath \
+	$(top_srcdir)/build-aux/config.sub \
+	$(top_srcdir)/build-aux/install-sh \
+	$(top_srcdir)/build-aux/javacomp.sh.in \
+	$(top_srcdir)/build-aux/javaexec.sh.in \
+	$(top_srcdir)/build-aux/missing $(top_srcdir)/configure \
+	ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS THANKS TODO
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
 	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
 	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
 	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno configure.status.lineno
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES = javacomp.sh javaexec.sh
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	html-recursive info-recursive install-data-recursive \
-	install-exec-recursive install-info-recursive \
-	install-recursive installcheck-recursive installdirs-recursive \
-	pdf-recursive ps-recursive uninstall-info-recursive \
-	uninstall-recursive
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
     *) f=$$p;; \
   esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(aclocaldir)"
-aclocalDATA_INSTALL = $(INSTALL_DATA)
 DATA = $(aclocal_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	cscope distdir dist dist-all distcheck
 ETAGS = etags
 CTAGS = ctags
+CSCOPE = cscope
 DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d $(distdir) \
-    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr $(distdir); }; }
-DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz
 GZIP_ENV = --best
+DIST_TARGETS = dist-xz dist-gzip
 distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
+pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOM4TE = @AUTOM4TE@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BISON_CXX_WORKS = @BISON_CXX_WORKS@
-BISON_CXX_WORKS_FALSE = @BISON_CXX_WORKS_FALSE@
-BISON_CXX_WORKS_TRUE = @BISON_CXX_WORKS_TRUE@
+BISON_C_WORKS = @BISON_C_WORKS@
 BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
 CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DOT = @DOT@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
 GCC = @GCC@
 GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
 HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
 LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
 LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
 MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
+MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
-O0CFLAGS = @O0CFLAGS@
-O0CXXFLAGS = @O0CXXFLAGS@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
 POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
 STRIP = @STRIP@
-UNISTD_H = @UNISTD_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
 VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
 YACC = @YACC@
 YACC_LIBRARY = @YACC_LIBRARY@
 YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 
 # Files installed for use by Automake.
 aclocaldir = @aclocaldir@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -212,57 +1390,93 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
 ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = build-aux po runtime-po lib data src doc examples tests
+SUBDIRS = build-aux po runtime-po lib data src doc examples tests etc
 aclocal_DATA = m4/bison-i18n.m4
-EXTRA_DIST = GNUmakefile Makefile.cfg Makefile.maint \
-  OChangeLog PACKAGING \
+EXTRA_DIST = .prev-version .version \
+  cfg.mk ChangeLog-1998 ChangeLog-2012 PACKAGING \
   djgpp/Makefile.maint djgpp/README.in djgpp/config.bat \
   djgpp/config.sed djgpp/config.site djgpp/config_h.sed \
   djgpp/subpipe.c djgpp/subpipe.h djgpp/djunpack.bat \
-  djgpp/fnchange.lst
+  djgpp/fnchange.lst djgpp/testsuite.sed
 
-all: config.h
+MAINTAINER_CHECKS = \
+  maintainer-check				\
+  maintainer-push-check				\
+  maintainer-xml-check				\
+  maintainer-release-check
+
+
+# See comments in build-aux/git-version-gen.  However, we make .version depend
+# on configure so that .version and VERSION/PACKAGE_VERSION stay in sync in the
+# working copy (for example, when you run autoreconf && make).  Allowing these
+# to fall out of sync appears to have little potential to improve Bison build
+# efficiency (even if we were to replace VERSION/PACKAGE_VERSION with .version
+# everywhere possible).  On the other hand, it could be harmful.  For example,
+# a developer might naively reference .version in a test case while the bison
+# executable still compiles with VERSION, and so the test case might fail or
+# pass incorrectly.
+BUILT_SOURCES = $(top_srcdir)/.version
+gen_start_date = 2012-01-16
+all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-am--refresh:
+am--refresh: Makefile
 	@:
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
-	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnits'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnits \
 		&& exit 0; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -278,53 +1492,44 @@
 	$(SHELL) ./config.status --recheck
 
 $(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(srcdir) && $(AUTOCONF)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-
-config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) stamp-h1; \
-	else :; fi
-
-stamp-h1: $(srcdir)/config.hin $(top_builddir)/config.status
-	@rm -f stamp-h1
-	cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.hin:  $(am__configure_deps) 
-	cd $(top_srcdir) && $(AUTOHEADER)
-	rm -f stamp-h1
-	touch $@
-
-distclean-hdr:
-	-rm -f config.h stamp-h1
-uninstall-info-am:
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+javacomp.sh: $(top_builddir)/config.status $(top_srcdir)/build-aux/javacomp.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+javaexec.sh: $(top_builddir)/config.status $(top_srcdir)/build-aux/javaexec.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 install-aclocalDATA: $(aclocal_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(aclocaldir)" || $(mkdir_p) "$(DESTDIR)$(aclocaldir)"
-	@list='$(aclocal_DATA)'; for p in $$list; do \
+	@list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(aclocaldir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(aclocaldir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(aclocalDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(aclocaldir)/$$f'"; \
-	  $(aclocalDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(aclocaldir)/$$f"; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(aclocaldir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(aclocaldir)" || exit $$?; \
 	done
 
 uninstall-aclocalDATA:
 	@$(NORMAL_UNINSTALL)
-	@list='$(aclocal_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(aclocaldir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(aclocaldir)/$$f"; \
-	done
+	@list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(aclocaldir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -333,7 +1538,11 @@
 	done; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
 	  echo "Making $$target in $$subdir"; \
 	  if test "$$subdir" = "."; then \
 	    dot_seen=yes; \
@@ -341,51 +1550,23 @@
 	  else \
 	    local_target="$$target"; \
 	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
 	  || eval $$failcom; \
 	done; \
 	if test "$$dot_seen" = "no"; then \
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
 tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
 	done
 ctags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
 	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -393,14 +1574,14 @@
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
 	mkid -fID $$unique
 tags: TAGS
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
 	  include_option=--etags-include; \
@@ -412,42 +1593,70 @@
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
 	    test ! -f $$subdir/TAGS || \
-	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
-	list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+
+clean-cscope:
+	-rm -f cscope.files
+
+cscope.files: clean-cscope cscopelist-recursive cscopelist
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
 distdir: $(DISTFILES)
 	@case `sed 15q $(srcdir)/NEWS` in \
@@ -457,78 +1666,102 @@
 	  exit 1;; \
 	esac
 	$(am__remove_distdir)
-	mkdir $(distdir)
-	$(mkdir_p) $(distdir)/djgpp $(distdir)/m4 $(distdir)/po $(distdir)/runtime-po $(distdir)/tests
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
-	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(mkdir_p) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	    distdir=`$(am__cd) $(distdir) && pwd`; \
-	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-	    (cd $$subdir && \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
 	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$top_distdir" \
-	        distdir="$$distdir/$$subdir" \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
 	        distdir) \
 	      || exit 1; \
 	  fi; \
 	done
-	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
 	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r $(distdir)
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
 dist-gzip: distdir
 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
+
 dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__post_remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__post_remove_distdir)
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-shar: distdir
 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-zip: distdir
 	-rm -f $(distdir).zip
 	zip -rq $(distdir).zip $(distdir)
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
-dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
@@ -536,24 +1769,31 @@
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
-	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
-	chmod -R a-w $(distdir); chmod a+w $(distdir)
-	mkdir $(distdir)/_build
-	mkdir $(distdir)/_inst
+	chmod -R a-w $(distdir)
+	chmod u+w $(distdir)
+	mkdir $(distdir)/_build $(distdir)/_inst
 	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && cd $(distdir)/_build \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -574,14 +1814,24 @@
 	  && rm -rf "$$dc_destdir" \
 	  && $(MAKE) $(AM_MAKEFLAGS) dist \
 	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
-	$(am__remove_distdir)
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__post_remove_distdir)
 	@(echo "$(distdir) archives ready for distribution: "; \
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-	@cd $(distuninstallcheck_dir) \
-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
 	   || { echo "ERROR: files left after uninstall:" ; \
 	        if test -n "$(DESTDIR)"; then \
 	          echo "  (check DESTDIR support)"; \
@@ -598,14 +1848,16 @@
 	       $(distcleancheck_listfiles) ; \
 	       exit 1; } >&2
 check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA) config.h
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(DATA)
 installdirs: installdirs-recursive
 installdirs-am:
 	for dir in "$(DESTDIR)$(aclocaldir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
-install: install-recursive
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
 uninstall: uninstall-recursive
@@ -615,20 +1867,27 @@
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 clean: clean-recursive
 
 clean-am: clean-generic mostlyclean-am
@@ -636,7 +1895,7 @@
 distclean: distclean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+distclean-am: clean-am distclean-generic distclean-tags
 
 dvi: dvi-recursive
 
@@ -644,18 +1903,38 @@
 
 html: html-recursive
 
+html-am:
+
 info: info-recursive
 
 info-am:
 
 install-data-am: install-aclocalDATA
 
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
 install-exec-am:
 
+install-html: install-html-recursive
+
+install-html-am:
+
 install-info: install-info-recursive
 
+install-info-am:
+
 install-man:
 
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
@@ -676,29 +1955,60 @@
 
 ps-am:
 
-uninstall-am: uninstall-aclocalDATA uninstall-info-am
+uninstall-am: uninstall-aclocalDATA
 
-uninstall-info: uninstall-info-recursive
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+	cscopelist-recursive ctags-recursive install install-am \
+	install-strip tags-recursive
 
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
-	check-am clean clean-generic clean-recursive ctags \
-	ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
-	dist-tarZ dist-zip distcheck distclean distclean-generic \
-	distclean-hdr distclean-recursive distclean-tags \
-	distcleancheck distdir distuninstallcheck dvi dvi-am html \
-	html-am info info-am install install-aclocalDATA install-am \
-	install-data install-data-am install-exec install-exec-am \
-	install-info install-info-am install-man install-strip \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic \
-	maintainer-clean-recursive mostlyclean mostlyclean-generic \
-	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-aclocalDATA uninstall-am uninstall-info-am
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am am--refresh check check-am clean clean-cscope \
+	clean-generic cscope cscopelist cscopelist-recursive ctags \
+	ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \
+	dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \
+	distclean distclean-generic distclean-tags distcleancheck \
+	distdir distuninstallcheck dvi dvi-am html html-am info \
+	info-am install install-aclocalDATA install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags tags-recursive uninstall \
+	uninstall-aclocalDATA uninstall-am
 
+.PHONY: $(MAINTAINER_CHECKS)
+$(MAINTAINER_CHECKS):
+	$(AM_V_GEN)cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
+$(top_srcdir)/.version: configure
+	$(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
+dist-hook: gen-ChangeLog
+	$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
 
-.PHONY: maintainer-check
-maintainer-check:
-	cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
+.PHONY: update-b4-copyright update-package-copyright-year
+update-b4-copyright:
+	$(AM_V_GEN) find data -type f		\
+	  | grep -v -E '^data/bison.m4$$'	\
+	  | xargs $(build_aux)/$@
+	@echo 'warning: src/parse-gram.[hc] may need to be regenerated.'
+update-package-copyright-year:
+	$(AM_V_GEN)$(build_aux)/$@ configure.ac
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+	$(AM_V_GEN)if test -d $(srcdir)/.git; then	\
+	  cl=$(distdir)/ChangeLog &&			\
+	  rm -f $$cl.tmp &&				\
+	  $(top_srcdir)/build-aux/gitlog-to-changelog	\
+	    --strip-tab					\
+	    --strip-cherry-pick				\
+	    --no-cluster				\
+	    --amend=$(srcdir)/build-aux/git-log-fix	\
+	    --srcdir=$(srcdir)				\
+	    --since=$(gen_start_date) > $$cl.tmp &&	\
+	  mv -f $$cl.tmp $$cl;				\
+	fi
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/Makefile.maint b/Makefile.maint
deleted file mode 100644
index 9bae6be..0000000
--- a/Makefile.maint
+++ /dev/null
@@ -1,639 +0,0 @@
-# -*-Makefile-*-
-# This Makefile fragment is shared between the coreutils,
-# CPPI, Bison, and Autoconf.
-
-## Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301, USA.
-
-# This is reported not to work with make-3.79.1
-# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
-ME := Makefile.maint
-
-# Do not save the original name or timestamp in the .tar.gz file.
-# Use --rsyncable if available.
-gzip_rsyncable = \
-  (gzip --help|grep rsyncable) >/dev/null 2>&1 && echo --rsyncable
-GZIP_ENV = "--no-name --best `$(gzip_rsyncable)`"
-
-CVS = cvs
-
-# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/
-CVS_LIST = sh -c ' \
-    if test -x $(srcdir)/build-aux/cvsu; then \
-      $(srcdir)/build-aux/cvsu --find --types=AFGM $$*; \
-    else \
-      awk -F/ '\''{ \
-	  if (!$$1 && $$3 !~ /^-/) { \
-	    f=FILENAME; \
-	    sub(/CVS\/Entries/, "", f); \
-	    print f $$2; \
-	  }}'\'' \
-	$$(find $${*-*} -name Entries -print) /dev/null; \
-    fi \
-  ' dummy
-
-CVS_LIST_EXCEPT = \
-  $(CVS_LIST) | if test -f .x-$@; then grep -vEf .x-$@; else grep -v ChangeLog; fi
-
-ifeq ($(origin prev_version_file), undefined)
-  prev_version_file = .prev-version
-endif
-
-PREV_VERSION := $(shell cat $(prev_version_file))
-VERSION_REGEXP = $(subst .,\.,$(VERSION))
-
-tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
-tag-this-version = $(subst .,_,$(VERSION))
-this-cvs-tag = $(tag-package)-$(tag-this-version)
-my_distdir = $(PACKAGE)-$(VERSION)
-
-# Old releases are stored here.
-# Used for diffs and xdeltas.
-release_archive_dir ?= ../release
-
-# Prevent programs like 'sort' from considering distinct strings to be equal.
-# Doing it here saves us from having to set LC_ALL elsewhere in this file.
-export LC_ALL = C
-
-
-
-## --------------- ##
-## Sanity checks.  ##
-## --------------- ##
-
-# FIXME: add a check to prohibit definition in src/*.c of symbols defined
-# in system.h.  E.g. today I removed from tail.c a useless definition of
-# ENOSYS.  It was useless because system.h ensures it's defined.
-
-# Checks that don't require cvs.
-# Run `changelog-check' last, as previous test may reveal problems requiring
-# new ChangeLog entries.
-local-checks-available = \
-  po-check copyright-check writable-files m4-check author_mark_check \
-  changelog-check strftime-check $(syntax-check-rules) \
-  makefile_path_separator_check \
-  makefile-check
-.PHONY: $(local-checks-available)
-
-local-check = $(filter-out $(local-checks-to-skip), $(local-checks-available))
-
-.PHONY: $(syntax-check-rules)
-syntax-check-rules = \
-  sc_cast_of_argument_to_free \
-  sc_cast_of_x_alloc_return_value \
-  sc_cast_of_alloca_return_value \
-  sc_changelog \
-  sc_dd_max_sym_length \
-  sc_error_exit_success \
-  sc_file_system \
-  sc_no_if_have_config_h \
-  sc_obsolete_symbols \
-  sc_prohibit_atoi_atof \
-  sc_prohibit_jm_in_m4 \
-  sc_prohibit_assert_without_use \
-  sc_require_config_h \
-  sc_root_tests \
-  sc_space_tab \
-  sc_sun_os_names \
-  sc_system_h_headers \
-  sc_tight_scope \
-  sc_trailing_blank \
-  sc_two_space_separator_in_usage \
-  sc_unmarked_diagnostics \
-  sc_useless_cpp_parens
-
-syntax-check: $(syntax-check-rules)
-#	@grep -nE '#  *include <(limits|std(def|arg|bool))\.h>'		\
-#	    $$(find -type f -name '*.[chly]') &&			\
-#	  { echo '$(ME): found conditional include' 1>&2;		\
-#	    exit 1; } || :
-
-#	grep -nE '^#  *include <(string|stdlib)\.h>'			\
-#	    $(srcdir)/{lib,src}/*.[chy] &&				\
-#	  { echo '$(ME): FIXME' 1>&2;					\
-#	    exit 1; } || :
-# FIXME: don't allow `#include .strings\.h' anywhere
-
-sc_cast_of_argument_to_free:
-	@grep -nE '\<free \(\(' $(srcdir)/{lib,src}/*.[chly] &&		\
-	  { echo '$(ME): don'\''t cast free argument' 1>&2;		\
-	    exit 1; } || :
-
-sc_cast_of_x_alloc_return_value:
-	@grep -nE --exclude=$(srcdir)/lib/regex.c			\
-	    '\*\) *x(m|c|re)alloc\>'					\
-	    $(srcdir)/{lib,src}/*.[chy] &&				\
-	  { echo '$(ME): don'\''t cast x*alloc return value' 1>&2;	\
-	    exit 1; } || :
-
-sc_cast_of_alloca_return_value:
-	@grep -nE '\*\) *alloca\>'					\
-	    $(srcdir)/src/*.[chy] &&					\
-	  { echo '$(ME): don'\''t cast alloca return value' 1>&2;	\
-	    exit 1; } || :
-
-sc_space_tab:
-	@grep -n '[ ]	' $$($(CVS_LIST_EXCEPT)) &&			\
-	  { echo '$(ME): found SPACE-TAB sequence; remove the SPACE'	\
-		1>&2; exit 1; } || :
-
-# Don't use the old ato* functions in `real' code.
-# They provide no error checking mechanism.
-# Instead, use strto* functions.
-sc_prohibit_atoi_atof:
-	@grep -nE '\<ato([filq]|ll)\>' $$($(CVS_LIST_EXCEPT)) &&	\
-	  { echo '$(ME): do not use ato''f, ato''i, ato''l, ato''ll, or ato''q'	\
-		1>&2; exit 1; } || :
-
-# Using EXIT_SUCCESS as the first argument to error is misleading,
-# since when that parameter is 0, error does not exit.  Use `0' instead.
-sc_error_exit_success:
-	@grep -nF 'error (EXIT_SUCCESS,'					\
-	    $$(find -type f -name '*.[chly]') &&			\
-	  { echo '$(ME): found error (EXIT_SUCCESS' 1>&2;		\
-	    exit 1; } || :
-
-sc_file_system:
-	@grep -ni 'file''system' $$($(CVS_LIST_EXCEPT)) &&		\
-	  { echo '$(ME): found use of "file''system";'			\
-	    'rewrite to use "file system"' 1>&2;			\
-	    exit 1; } || :
-
-sc_no_if_have_config_h:
-	@grep -n '^# *if HAVE_CONFIG_H' $$($(CVS_LIST_EXCEPT)) &&	\
-	  { echo '$(ME): found use of #if HAVE_CONFIG_H; use #ifdef'	\
-		1>&2; exit 1; } || :
-
-# Nearly all .c files must include <config.h>.
-sc_require_config_h:
-	@grep -L '^# *include <config\.h>'				\
-		$$($(CVS_LIST_EXCEPT) | grep '\.c$$')			\
-	    | grep . &&							\
-	  { echo '$(ME): the above files do not include <config.h>'	\
-		1>&2; exit 1; } || :
-
-# Prohibit the inclusion of assert.h without an actual use of assert.
-sc_prohibit_assert_without_use:
-	@files=$$(grep -l '# *include <assert\.h>'			\
-		    $$($(CVS_LIST_EXCEPT) | grep '\.c$$')) &&		\
-	grep -L '\<assert (' $$files					\
-	    | grep . &&							\
-	  { echo "$(ME): the above files include <assert.h> but don't use it" \
-		1>&2; exit 1; } || :
-
-sc_obsolete_symbols:
-	@grep -nE '\<(HAVE''_FCNTL_H|O''_NDELAY)\>'			\
-	     $$($(CVS_LIST_EXCEPT)) &&					\
-	  { echo '$(ME): do not use HAVE''_FCNTL_H or O''_NDELAY'	\
-		1>&2; exit 1; } || :
-
-# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
-
-# Each nonempty line must start with a year number, or a TAB.
-sc_changelog:
-	@grep -n '^[^12	]' $$(find . -maxdepth 2 -name ChangeLog) &&	\
-	  { echo '$(ME): found unexpected prefix in a ChangeLog' 1>&2;	\
-	    exit 1; } || :
-
-# Ensure that dd's definition of LONGEST_SYMBOL stays in sync
-# with the strings from the two affected variables.
-dd_c = $(srcdir)/src/dd.c
-sc_dd_max_sym_length:
-ifneq ($(wildcard $(dd_c)),)
-	@len=$$( (sed -n '/conversions\[\] =$$/,/^};/p' $(dd_c);\
-		 sed -n '/flags\[\] =$$/,/^};/p' $(dd_c) )	\
-		|sed -n '/"/s/^[^"]*"\([^"]*\)".*/\1/p'		\
-	      | wc --max-line-length);				\
-	max=$$(sed -n '/^#define LONGEST_SYMBOL /s///p' $(dd_c)	\
-	      |tr -d '"' | wc --max-line-length);		\
-	if test "$$len" = "$$max"; then :; else			\
-	  echo 'dd.c: LONGEST_SYMBOL is not longest' 1>&2;	\
-	  exit 1;						\
-	fi
-endif
-
-# Many m4 macros names once began with `jm_'.
-# On 2004-04-13, they were all changed to start with gl_ instead.
-# Make sure that none are inadvertently reintroduced.
-sc_prohibit_jm_in_m4:
-	@grep -nE 'jm_[A-Z]'						\
-		$$($(CVS_LIST) $(srcdir)/m4 |grep '\.m4$$') &&		\
-	    { echo '$(ME): do not use jm_ in m4 macro names'		\
-	      1>&2; exit 1; } || :
-
-sc_root_tests:
-	@t1=sc-root.expected; t2=sc-root.actual;			\
-	grep -nl '^PRIV_CHECK_ARG=require-root'				\
-	  $$($(CVS_LIST) tests) |sed s,tests,., |sort > $$t1;		\
-	sed -n 's,	cd \([^ ]*\) .*MAKE..check TESTS=\(.*\),./\1/\2,p' \
-	  $(srcdir)/tests/Makefile.am |sort > $$t2;			\
-	diff -u $$t1 $$t2 || diff=1;					\
-	rm -f $$t1 $$t2;						\
-	test "$$diff"							\
-	  && { echo 'tests/Makefile.am: missing check-root action'>&2;	\
-	       exit 1; } || :
-
-# Create a list of regular expressions matching the names
-# of files included from system.h.  Exclude a couple.
-.re-list:
-	@sed -n '/^# *include /s///p' $(srcdir)/src/system.h \
-	  | grep -Ev 'sys/(param|file)\.h' \
-	  | sed 's/ .*//;;s/^["<]/^# *include [<"]/;s/\.h[">]$$/\\.h[">]/' \
-	  > $@-t
-	@mv $@-t $@
-
-# Files in src/ should not include directly any of
-# the headers already included via system.h.
-sc_system_h_headers: .re-list
-	@if test -f $(srcdir)/src/system.h; then			\
-	  trap 'rc=$$?; rm -f .re-list; exit $$rc' 0 1 2 3 15;		\
-	  grep -nE -f .re-list						\
-	      $$($(CVS_LIST) src |					\
-		 grep -Ev '((copy|system)\.h|parse-gram\.c)$$')		\
-	    && { echo '$(ME): the above are already included via system.h'\
-		  1>&2;  exit 1; } || :;				\
-	fi
-
-sc_sun_os_names:
-	@grep -nEi \
-	    'solaris[^[:alnum:]]*2\.(7|8|9|[1-9][0-9])|sunos[^[:alnum:]][6-9]' \
-	    $$($(CVS_LIST_EXCEPT)) &&					\
-	  { echo '$(ME): found misuse of Sun OS version numbers' 1>&2;	\
-	    exit 1; } || :
-
-sc_tight_scope:
-	$(MAKE) -C src $@
-
-sc_trailing_blank:
-	@grep -n '[	 ]$$' $$($(CVS_LIST_EXCEPT)) &&			\
-	  { echo '$(ME): found trailing blank(s)'			\
-		1>&2; exit 1; } || :
-
-sc_two_space_separator_in_usage:
-	@grep -n '^   *--[a-z][0-9A-Za-z-]* [^ ].*\\$$'			\
-	    $$($(CVS_LIST_EXCEPT)) &&					\
-	  { echo "$(ME): help2man requires at least two spaces between"; \
-	    echo "$(ME): an option and its description"; \
-		1>&2; exit 1; } || :
-
-# Look for diagnostics that aren't marked for translation.
-# This won't find any for which error's format string is on a separate line.
-sc_unmarked_diagnostics:
-	@grep -nE							\
-	    '\<error \([^"]*"[^"]*[a-z]{3}' $$($(CVS_LIST_EXCEPT))	\
-	  | grep -v '_''(' &&						\
-	  { echo '$(ME): found unmarked diagnostic(s)' 1>&2;		\
-	    exit 1; } || :
-
-# Avoid useless parentheses like those in this example:
-# #if defined (SYMBOL) || defined (SYM2)
-sc_useless_cpp_parens:
-	@grep -n '^# *if .*defined *(' $$($(CVS_LIST_EXCEPT)) &&	\
-	  { echo '$(ME): found useless parentheses in cpp directive'	\
-		1>&2; exit 1; } || :
-
-# Ensure that date's --help output stays in sync with the info
-# documentation for GNU strftime.  The only exception is %N,
-# which date accepts but GNU strftime does not.
-extract_char = sed 's/^[^%][^%]*%\(.\).*/\1/'
-strftime-check:
-	if test -f $(srcdir)/src/date.c; then				\
-	  grep '^  %.  ' $(srcdir)/src/date.c | sort			\
-	    | $(extract_char) > $@-src;					\
-	  { echo N;							\
-	    info libc date calendar format | grep '^    `%.'\'		\
-	      | $(extract_char); } | sort > $@-info;			\
-	  diff -u $@-src $@-info || exit 1;				\
-	  rm -f $@-src $@-info;						\
-	fi
-
-# Ensure that we use only the standard $(VAR) notation,
-# not @...@ in Makefile.am, now that we can rely on automake
-# to emit a definition for each substituted variable.
-makefile-check:
-	grep -nE '@[A-Z_0-9]+@' `find . -name Makefile.am` \
-	  && { echo 'Makefile.maint: use $$(...), not @...@' 1>&2; exit 1; } || :
-
-news-date-check: NEWS
-	today=`date +%Y-%m-%d`;	\
-	if head NEWS | grep '^\*.* $(VERSION_REGEXP) ('$$today')' \
-	    >/dev/null; then \
-	  :; \
-	else \
-	  echo "version or today's date is not in NEWS" 1>&2; \
-	  exit 1; \
-	fi
-
-changelog-check:
-	if head ChangeLog | grep 'Version $(VERSION_REGEXP)\.$$' \
-	    >/dev/null; then \
-	  :; \
-	else \
-	  echo "$(VERSION) not in ChangeLog" 1>&2; \
-	  exit 1; \
-	fi
-
-m4-check:
-	@grep -n 'AC_DEFUN([^[]' m4/*.m4 \
-	  && { echo 'Makefile.maint: quote the first arg to AC_DEFUN' 1>&2; \
-	       exit 1; } || :
-
-# Verify that all source files using _() are listed in po/POTFILES.in.
-# FIXME: don't hard-code file names below; use a more general mechanism.
-po-check:
-	if test -f po/POTFILES.in; then					\
-	  grep -E -v '^(#|$$)' po/POTFILES.in				\
-	    | grep -v '^src/false\.c$$' | sort > $@-1;			\
-	  files=;							\
-	  for file in $$($(CVS_LIST_EXCEPT)) lib/*.[ch]; do		\
-	    case $$file in						\
-	    djgpp/* | man/*) continue;;					\
-	    esac;							\
-	    case $$file in						\
-	    *.[ch])							\
-	      base=`expr " $$file" : ' \(.*\)\..'`;			\
-	      { test -f $$base.l || test -f $$base.y; } && continue;;	\
-	    esac;							\
-	    files="$$files $$file";					\
-	  done;								\
-	  grep -E -l '\bN?_\([^)"]*("|$$)' $$files | sort -u > $@-2;	\
-	  diff -u $@-1 $@-2 || exit 1;					\
-	  rm -f $@-1 $@-2;						\
-	fi
-
-# In a definition of #define AUTHORS "... and ..." where the RHS contains
-# the English word `and', the string must be marked with `N_ (...)' so that
-# gettext recognizes it as a string requiring translation.
-author_mark_check:
-	@grep -n '^# *define AUTHORS "[^"]* and ' src/*.c |grep -v ' N_ (' && \
-	  { echo 'Makefile.maint: enclose the above strings in N_ (...)' 1>&2; \
-	    exit 1; } || :
-
-# Sometimes it is useful to change the PATH environment variable
-# in Makefiles.  When doing so, it's better not to use the Unix-centric
-# path separator of `:', but rather the automake-provided `@PATH_SEPARATOR@'.
-# It'd be better to use `find -print0 ...|xargs -0 ...', but less portable,
-# and there probably aren't many projects with so many Makefile.am files
-# that we'd have to worry about limits on command line length.
-msg = 'Makefile.maint: Do not use `:'\'' above; use @PATH_SEPARATOR@ instead'
-makefile_path_separator_check:
-	@grep -n 'PATH=.*:' `find $(srcdir) -name Makefile.am` \
-	  && { echo $(msg) 1>&2; exit 1; } || :
-
-# Check that `make alpha' will not fail at the end of the process.
-writable-files:
-	if test -d $(release_archive_dir); then :; else			\
-	  mkdir $(release_archive_dir);					\
-	fi
-	for file in $(distdir).tar.gz $(xd-delta)			\
-	            $(release_archive_dir)/$(distdir).tar.gz		\
-	            $(release_archive_dir)/$(xd-delta); do		\
-	  test -e $$file || continue;					\
-	  test -w $$file						\
-	    || { echo ERROR: $$file is not writable; fail=1; };		\
-	done;								\
-	test "$$fail" && exit 1 || :
-
-v_etc_file = lib/version-etc.c
-# Make sure that the copyright date in $(v_etc_file) is up to date.
-copyright-check:
-	@if test -f $(v_etc_file); then \
-	  grep 'enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' $(v_etc_file) \
-	    >/dev/null \
-	  || { echo 'out of date copyright in $(v_etc_file); update it' 1>&2; \
-	       exit 1; }; \
-	fi
-
-
-# Sanity checks with the CVS repository.
-cvs-tag-check:
-	echo $(this-cvs-tag); \
-	if $(CVS) -n log -h README | grep -e $(this-cvs-tag): >/dev/null; then \
-	  echo "$(this-cvs-tag) as already been used; not tagging" 1>&2; \
-	  exit 1; \
-	else :; fi
-
-cvs-diff-check:
-	if $(CVS) diff >cvs-diffs; then				\
-	  rm cvs-diffs;						\
-	else							\
-	  echo "Some files are locally modified:" 1>&2;		\
-	  cat cvs-diffs;					\
-	  exit 1;						\
-	fi
-
-cvs-check: cvs-diff-check cvs-tag-check
-
-maintainer-distcheck: changelog-check
-	$(MAKE) distcheck
-	$(MAKE) my-distcheck
-
-
-# Tag before making distribution.  Also, don't make a distribution if
-# checks fail.  Also, make sure the NEWS file is up-to-date.
-# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
-cvs-dist: $(local-check) cvs-check maintainer-distcheck
-	$(CVS) update po
-	$(CVS) tag -c $(this-cvs-tag)
-	$(MAKE) dist
-
-# Use this to make sure we don't run these programs when building
-# from a virgin tgz file, below.
-null_AM_MAKEFLAGS = \
-  ACLOCAL=false \
-  AUTOCONF=false \
-  AUTOMAKE=false \
-  AUTOHEADER=false \
-  MAKEINFO=false
-
-# Detect format-string/arg-list mismatches that would normally be obscured
-# by the use of _().  The --disable-nls effectively defines away that macro,
-# and building with CFLAGS='-Wformat -Werror' causes any format warning to be
-# treated as a failure.  Also, check for shadowing problems with -Wshadow.
-# These CFLAGS are pretty strict.  If you build this target, you probably
-# have to have a recent version of gcc and glibc headers.
-TMPDIR ?= /tmp
-t=$(TMPDIR)/$(PACKAGE)/test
-my-distcheck: $(local-check) $(release_archive_dir)/$(prev-tgz)
-	-rm -rf $(t)
-	mkdir -p $(t)
-	GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
-	cd $(t)/$(distdir)				\
-	  && ./configure --disable-nls			\
-	  && $(MAKE) CFLAGS='-Werror -Wall -Wformat -Wshadow' \
-	      AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)'	\
-	  && $(MAKE) dvi				\
-	  && $(MAKE) check				\
-	  && $(MAKE) distclean
-	(cd $(t) && mv $(distdir) $(distdir).old	\
-	  && $(AMTAR) -zxf - ) < $(distdir).tar.gz
-	diff -ur $(t)/$(distdir).old $(t)/$(distdir)
-	-rm -rf $(t)
-	@echo "========================"; \
-	echo "$(distdir).tar.gz is ready for distribution"; \
-	echo "========================"
-
-WGET = wget
-WGETFLAGS = -C off
-
-rel-check:
-	tarz=/tmp/rel-check-tarz-$$$$; \
-	md5_tmp=/tmp/rel-check-md5-$$$$; \
-	set -e; \
-	trap 'status=$$?; rm -f $$tarz $$md5_tmp; exit $$status' 0 1 2 3 15; \
-	$(WGET) $(WGETFLAGS) -q --output-document=$$tarz $(url); \
-	echo "$(md5)  -" > $$md5_tmp; \
-	md5sum -c $$md5_tmp < $$tarz
-
-prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
-xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
-
-rel-files = $(xd-delta) $(DIST_ARCHIVES)
-announcement: NEWS ChangeLog $(rel-files)
-	@./announce-gen							\
-	    --release-type=$(RELEASE_TYPE)				\
-	    --package=$(PACKAGE)					\
-	    --prev=$(PREV_VERSION)					\
-	    --curr=$(VERSION)						\
-	    --release-archive-directory=$(release_archive_dir)		\
-	    --gpg-key-id=$(gpg_key_ID)					\
-	    --news=NEWS							\
-	    $(addprefix --url-dir=, $(url_dir_list))			\
-
-
-## ---------------- ##
-## Updating files.  ##
-## ---------------- ##
-
-ftp-gnu = ftp://ftp.gnu.org/gnu
-www-gnu = http://www.gnu.org
-
-# Use mv, if you don't have/want move-if-change.
-move_if_change ?= move-if-change
-
-
-# --------------------- #
-# Updating everything.  #
-# --------------------- #
-
-.PHONY: update
-local_updates ?= wget-update cvs-update po-update
-update: $(local_updates)
-
-
-# ------------------- #
-# Updating PO files.  #
-# ------------------- #
-
-po_repo = http://www.iro.umontreal.ca/contrib/po/maint/$(PACKAGE)
-.PHONY: do-po-update po-update
-do-po-update:
-	tmppo=/tmp/$(PACKAGE)-$(VERSION)-po &&\
-	rm -rf $$tmppo && \
-	mkdir $$tmppo && \
-	(cd $$tmppo && \
-	  $(WGET) $(WGETFLAGS) -r -l1 -nd --no-parent -A '*.po' $(po_repo)) &&\
-	cp $$tmppo/*.po po
-	cd po && $(MAKE) update-po
-	$(MAKE) po-check
-
-po-update:
-	if test -d "po"; then \
-	  $(MAKE) do-po-update; \
-	fi
-
-# -------------------------- #
-# Updating GNU build tools.  #
-# -------------------------- #
-
-# The following pseudo table associates a local directory and a URL
-# with each of the files that belongs to some other package and is
-# regularly updated from the specified URL.
-wget_files ?= \
-  $(srcdir)/build-aux/config.guess \
-  $(srcdir)/build-aux/config.sub \
-  $(srcdir)/build-aux/texinfo.tex \
-  $(srcdir)/src/ansi2knr.c
-
-get-targets = $(patsubst %, get-%, $(wget_files))
-
-config.guess-url_prefix = $(ftp-gnu)/build-aux/
-config.sub-url_prefix = $(ftp-gnu)/build-aux/
-
-ansi2knr.c-url_prefix = ftp://ftp.cs.wisc.edu/ghost/
-
-texinfo.tex-url_prefix = $(ftp-gnu)/texinfo/
-
-standards.texi-url_prefix = $(www-gnu)/prep/
-make-stds.texi-url_prefix = $(standards.texi-url_prefix)
-
-target = $(patsubst get-%, %, $@)
-url = $($(notdir $(target))-url_prefix)$(notdir $(target))
-
-.PHONY: $(get-targets)
-$(get-targets):
-	$(WGET) $(WGETFLAGS) $(url) -O $(target).t \
-	  && $(move_if_change) $(target).t $(target)
-
-cvs_files ?= \
-  $(srcdir)/build-aux/depcomp \
-  $(srcdir)/build-aux/install-sh \
-  $(srcdir)/build-aux/missing \
-  $(srcdir)/build-aux/mkinstalldirs \
-  $(srcdir)/src/ansi2knr.c
-automake_repo=:pserver:anoncvs:anoncvs@sources.redhat.com:/cvs/automake
-.PHONY: wget-update
-wget-update: $(get-targets)
-
-.PHONY: cvs-update
-cvs-update:
-	fail=;								\
-	for f in $(cvs_files); do					\
-	  test -f $$f || { echo "*** skipping $$f" 1>&2; continue; };	\
-	  cvs diff $$f > /dev/null					\
-	    || { echo "*** $$f is locally modified; skipping it" 1>&2;	\
-		 fail=yes; continue; };					\
-	  file=$$(basename $$f);					\
-	  echo checking out $$file...;					\
-	  $(CVS) -d $(automake_repo) co -p automake/lib/$$file> $$f.t	\
-	    && $(move_if_change) $$f.t $$f;				\
-	done;								\
-	test "$$fail" && exit 1
-
-emit_upload_commands:
-	@echo =====================================
-	@echo =====================================
-	@echo "$(srcdir)/gnupload $(GNUPLOADFLAGS) \\"
-	@echo "    --to $(gnu_rel_host):coreutils \\"
-	@echo "  $(rel-files)"
-	@echo '# send the /tmp/announcement e-mail'
-	@echo =====================================
-	@echo =====================================
-
-$(xd-delta): $(release_archive_dir)/$(prev-tgz) $(distdir).tar.gz
-	xdelta delta -9 $^ $@ || :
-
-.PHONY: alpha beta major
-alpha beta major: news-date-check $(local-check)
-	$(MAKE) cvs-dist
-	$(MAKE) $(xd-delta)
-	$(MAKE) -s announcement RELEASE_TYPE=$@ > /tmp/announce-$(my_distdir)
-	ln $(rel-files) $(release_archive_dir)
-	chmod a-w $(rel-files)
-	$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
-	echo $(VERSION) > $(prev_version_file)
-	$(CVS) ci -m. $(prev_version_file)
diff --git a/NEWS b/NEWS
index 3dca4fe..f374402 100644
--- a/NEWS
+++ b/NEWS
@@ -1,52 +1,1326 @@
-Bison News
-----------
+GNU Bison NEWS
 
-Changes in version 2.3, 2006-06-05:
+* Noteworthy changes in release 2.7 (2012-12-12) [stable]
 
-* GLR grammars should now use `YYRECOVERING ()' instead of `YYRECOVERING',
+** Bug fixes
+
+  Warnings about uninitialized yylloc in yyparse have been fixed.
+
+  Restored C90 compliance (yet no report was ever made).
+
+** Diagnostics are improved
+
+*** Changes in the format of error messages
+
+  This used to be the format of many error reports:
+
+    input.y:2.7-12: %type redeclaration for exp
+    input.y:1.7-12: previous declaration
+
+  It is now:
+
+    input.y:2.7-12: error: %type redeclaration for exp
+    input.y:1.7-12:     previous declaration
+
+*** New format for error reports: carets
+
+  Caret errors have been added to Bison:
+
+    input.y:2.7-12: error: %type redeclaration for exp
+     %type <sval> exp
+           ^^^^^^
+    input.y:1.7-12:     previous declaration
+     %type <ival> exp
+           ^^^^^^
+
+  or
+
+    input.y:3.20-23: error: ambiguous reference: '$exp'
+     exp: exp '+' exp { $exp = $1 + $3; };
+                        ^^^^
+    input.y:3.1-3:       refers to: $exp at $$
+     exp: exp '+' exp { $exp = $1 + $3; };
+     ^^^
+    input.y:3.6-8:       refers to: $exp at $1
+     exp: exp '+' exp { $exp = $1 + $3; };
+          ^^^
+    input.y:3.14-16:     refers to: $exp at $3
+     exp: exp '+' exp { $exp = $1 + $3; };
+                  ^^^
+
+  The default behaviour for now is still not to display these unless
+  explictly asked with -fcaret (or -fall). However, in a later release, it
+  will be made the default behavior (but may still be deactivated with
+  -fno-caret).
+
+** New value for %define variable: api.pure full
+
+  The %define variable api.pure requests a pure (reentrant) parser. However,
+  for historical reasons, using it in a location-tracking Yacc parser
+  resulted in a yyerror function that did not take a location as a
+  parameter. With this new value, the user may request a better pure parser,
+  where yyerror does take a location as a parameter (in location-tracking
+  parsers).
+
+  The use of "%define api.pure true" is deprecated in favor of this new
+  "%define api.pure full".
+
+** New %define variable: api.location.type (glr.cc, lalr1.cc, lalr1.java)
+
+  The %define variable api.location.type defines the name of the type to use
+  for locations.  When defined, Bison no longer generates the position.hh
+  and location.hh files, nor does the parser will include them: the user is
+  then responsible to define her type.
+
+  This can be used in programs with several parsers to factor their location
+  and position files: let one of them generate them, and the others just use
+  them.
+
+  This feature was actually introduced, but not documented, in Bison 2.5,
+  under the name "location_type" (which is maintained for backward
+  compatibility).
+
+  For consistency, lalr1.java's %define variables location_type and
+  position_type are deprecated in favor of api.location.type and
+  api.position.type.
+
+** Exception safety (lalr1.cc)
+
+  The parse function now catches exceptions, uses the %destructors to
+  release memory (the lookahead symbol and the symbols pushed on the stack)
+  before re-throwing the exception.
+
+  This feature is somewhat experimental.  User feedback would be
+  appreciated.
+
+** Graph improvements in DOT and XSLT
+
+  The graphical presentation of the states is more readable: their shape is
+  now rectangular, the state number is clearly displayed, and the items are
+  numbered and left-justified.
+
+  The reductions are now explicitly represented as transitions to other
+  diamond shaped nodes.
+
+  These changes are present in both --graph output and xml2dot.xsl XSLT
+  processing, with minor (documented) differences.
+
+** %language is no longer an experimental feature.
+
+  The introduction of this feature, in 2.4, was four years ago. The
+  --language option and the %language directive are no longer experimental.
+
+** Documentation
+
+  The sections about shift/reduce and reduce/reduce conflicts resolution
+  have been fixed and extended.
+
+  Although introduced more than four years ago, XML and Graphviz reports
+  were not properly documented.
+
+  The translation of mid-rule actions is now described.
+
+* Noteworthy changes in release 2.6.5 (2012-11-07) [stable]
+
+  We consider compiler warnings about Bison generated parsers to be bugs.
+  Rather than working around them in your own project, please consider
+  reporting them to us.
+
+** Bug fixes
+
+  Warnings about uninitialized yylval and/or yylloc for push parsers with a
+  pure interface have been fixed for GCC 4.0 up to 4.8, and Clang 2.9 to
+  3.2.
+
+  Other issues in the test suite have been addressed.
+
+  Nul characters are correctly displayed in error messages.
+
+  When possible, yylloc is correctly initialized before calling yylex.  It
+  is no longer necessary to initialize it in the %initial-action.
+
+* Noteworthy changes in release 2.6.4 (2012-10-23) [stable]
+
+  Bison 2.6.3's --version was incorrect.  This release fixes this issue.
+
+* Noteworthy changes in release 2.6.3 (2012-10-22) [stable]
+
+** Bug fixes
+
+  Bugs and portability issues in the test suite have been fixed.
+
+  Some errors in translations have been addressed, and --help now directs
+  users to the appropriate place to report them.
+
+  Stray Info files shipped by accident are removed.
+
+  Incorrect definitions of YY_, issued by yacc.c when no parser header is
+  generated, are removed.
+
+  All the generated headers are self-contained.
+
+** Header guards (yacc.c, glr.c, glr.cc)
+
+  In order to avoid collisions, the header guards are now
+  YY_<PREFIX>_<FILE>_INCLUDED, instead of merely <PREFIX>_<FILE>.
+  For instance the header generated from
+
+    %define api.prefix "calc"
+    %defines "lib/parse.h"
+
+  will use YY_CALC_LIB_PARSE_H_INCLUDED as guard.
+
+** Fix compiler warnings in the generated parser (yacc.c, glr.c)
+
+  The compilation of pure parsers (%define api.pure) can trigger GCC
+  warnings such as:
+
+    input.c: In function 'yyparse':
+    input.c:1503:12: warning: 'yylval' may be used uninitialized in this
+                              function [-Wmaybe-uninitialized]
+       *++yyvsp = yylval;
+                ^
+
+  This is now fixed; pragmas to avoid these warnings are no longer needed.
+
+  Warnings from clang ("equality comparison with extraneous parentheses" and
+  "function declared 'noreturn' should not return") have also been
+  addressed.
+
+* Noteworthy changes in release 2.6.2 (2012-08-03) [stable]
+
+** Bug fixes
+
+  Buffer overruns, complaints from Flex, and portability issues in the test
+  suite have been fixed.
+
+** Spaces in %lex- and %parse-param (lalr1.cc, glr.cc)
+
+  Trailing end-of-lines in %parse-param or %lex-param would result in
+  invalid C++.  This is fixed.
+
+** Spurious spaces and end-of-lines
+
+  The generated files no longer end (nor start) with empty lines.
+
+* Noteworthy changes in release 2.6.1 (2012-07-30) [stable]
+
+  Bison no longer executes user-specified M4 code when processing a grammar.
+
+** Future Changes
+
+  In addition to the removal of the features announced in Bison 2.6, the
+  next major release will remove the "Temporary hack for adding a semicolon
+  to the user action", as announced in the release 2.5.  Instead of:
+
+    exp: exp "+" exp { $$ = $1 + $3 };
+
+  write:
+
+    exp: exp "+" exp { $$ = $1 + $3; };
+
+** Bug fixes
+
+*** Type names are now properly escaped.
+
+*** glr.cc: set_debug_level and debug_level work as expected.
+
+*** Stray @ or $ in actions
+
+  While Bison used to warn about stray $ or @ in action rules, it did not
+  for other actions such as printers, destructors, or initial actions.  It
+  now does.
+
+** Type names in actions
+
+  For consistency with rule actions, it is now possible to qualify $$ by a
+  type-name in destructors, printers, and initial actions.  For instance:
+
+    %printer { fprintf (yyo, "(%d, %f)", $<ival>$, $<fval>$); } <*> <>;
+
+  will display two values for each typed and untyped symbol (provided
+  that YYSTYPE has both "ival" and "fval" fields).
+
+* Noteworthy changes in release 2.6 (2012-07-19) [stable]
+
+** Future Changes
+
+  The next major release of Bison will drop support for the following
+  deprecated features.  Please report disagreements to bug-bison@gnu.org.
+
+*** K&R C parsers
+
+  Support for generating parsers in K&R C will be removed.  Parsers
+  generated for C support ISO C90, and are tested with ISO C99 and ISO C11
+  compilers.
+
+*** Features deprecated since Bison 1.875
+
+  The definitions of yystype and yyltype will be removed; use YYSTYPE and
+  YYLTYPE.
+
+  YYPARSE_PARAM and YYLEX_PARAM, deprecated in favor of %parse-param and
+  %lex-param, will no longer be supported.
+
+  Support for the preprocessor symbol YYERROR_VERBOSE will be removed, use
+  %error-verbose.
+
+*** The generated header will be included (yacc.c)
+
+  Instead of duplicating the content of the generated header (definition of
+  YYSTYPE, yyparse declaration etc.), the generated parser will include it,
+  as is already the case for GLR or C++ parsers.  This change is deferred
+  because existing versions of ylwrap (e.g., Automake 1.12.1) do not support
+  it.
+
+** Generated Parser Headers
+
+*** Guards (yacc.c, glr.c, glr.cc)
+
+  The generated headers are now guarded, as is already the case for C++
+  parsers (lalr1.cc).  For instance, with --defines=foo.h:
+
+    #ifndef YY_FOO_H
+    # define YY_FOO_H
+    ...
+    #endif /* !YY_FOO_H  */
+
+*** New declarations (yacc.c, glr.c)
+
+  The generated header now declares yydebug and yyparse.  Both honor
+  --name-prefix=bar_, and yield
+
+    int bar_parse (void);
+
+  rather than
+
+    #define yyparse bar_parse
+    int yyparse (void);
+
+  in order to facilitate the inclusion of several parser headers inside a
+  single compilation unit.
+
+*** Exported symbols in C++
+
+  The symbols YYTOKEN_TABLE and YYERROR_VERBOSE, which were defined in the
+  header, are removed, as they prevent the possibility of including several
+  generated headers from a single compilation unit.
+
+*** YYLSP_NEEDED
+
+  For the same reasons, the undocumented and unused macro YYLSP_NEEDED is no
+  longer defined.
+
+** New %define variable: api.prefix
+
+  Now that the generated headers are more complete and properly protected
+  against multiple inclusions, constant names, such as YYSTYPE are a
+  problem.  While yyparse and others are properly renamed by %name-prefix,
+  YYSTYPE, YYDEBUG and others have never been affected by it.  Because it
+  would introduce backward compatibility issues in projects not expecting
+  YYSTYPE to be renamed, instead of changing the behavior of %name-prefix,
+  it is deprecated in favor of a new %define variable: api.prefix.
+
+  The following examples compares both:
+
+    %name-prefix "bar_"               | %define api.prefix "bar_"
+    %token <ival> FOO                   %token <ival> FOO
+    %union { int ival; }                %union { int ival; }
+    %%                                  %%
+    exp: 'a';                           exp: 'a';
+
+  bison generates:
+
+    #ifndef BAR_FOO_H                   #ifndef BAR_FOO_H
+    # define BAR_FOO_H                  # define BAR_FOO_H
+
+    /* Enabling traces.  */             /* Enabling traces.  */
+    # ifndef YYDEBUG                  | # ifndef BAR_DEBUG
+                                      > #  if defined YYDEBUG
+                                      > #   if YYDEBUG
+                                      > #    define BAR_DEBUG 1
+                                      > #   else
+                                      > #    define BAR_DEBUG 0
+                                      > #   endif
+                                      > #  else
+    #  define YYDEBUG 0               | #   define BAR_DEBUG 0
+                                      > #  endif
+    # endif                           | # endif
+
+    # if YYDEBUG                      | # if BAR_DEBUG
+    extern int bar_debug;               extern int bar_debug;
+    # endif                             # endif
+
+    /* Tokens.  */                      /* Tokens.  */
+    # ifndef YYTOKENTYPE              | # ifndef BAR_TOKENTYPE
+    #  define YYTOKENTYPE             | #  define BAR_TOKENTYPE
+       enum yytokentype {             |    enum bar_tokentype {
+         FOO = 258                           FOO = 258
+       };                                  };
+    # endif                             # endif
+
+    #if ! defined YYSTYPE \           | #if ! defined BAR_STYPE \
+     && ! defined YYSTYPE_IS_DECLARED |  && ! defined BAR_STYPE_IS_DECLARED
+    typedef union YYSTYPE             | typedef union BAR_STYPE
+    {                                   {
+     int ival;                           int ival;
+    } YYSTYPE;                        | } BAR_STYPE;
+    # define YYSTYPE_IS_DECLARED 1    | # define BAR_STYPE_IS_DECLARED 1
+    #endif                              #endif
+
+    extern YYSTYPE bar_lval;          | extern BAR_STYPE bar_lval;
+
+    int bar_parse (void);               int bar_parse (void);
+
+    #endif /* !BAR_FOO_H  */            #endif /* !BAR_FOO_H  */
+
+* Noteworthy changes in release 2.5.1 (2012-06-05) [stable]
+
+** Future changes:
+
+  The next major release will drop support for generating parsers in K&R C.
+
+** yacc.c: YYBACKUP works as expected.
+
+** glr.c improvements:
+
+*** Location support is eliminated when not requested:
+
+  GLR parsers used to include location-related code even when locations were
+  not requested, and therefore not even usable.
+
+*** __attribute__ is preserved:
+
+  __attribute__ is no longer disabled when __STRICT_ANSI__ is defined (i.e.,
+  when -std is passed to GCC).
+
+** lalr1.java: several fixes:
+
+  The Java parser no longer throws ArrayIndexOutOfBoundsException if the
+  first token leads to a syntax error.  Some minor clean ups.
+
+** Changes for C++:
+
+*** C++11 compatibility:
+
+  C and C++ parsers use "nullptr" instead of "0" when __cplusplus is 201103L
+  or higher.
+
+*** Header guards
+
+  The header files such as "parser.hh", "location.hh", etc. used a constant
+  name for preprocessor guards, for instance:
+
+    #ifndef BISON_LOCATION_HH
+    # define BISON_LOCATION_HH
+    ...
+    #endif // !BISON_LOCATION_HH
+
+  The inclusion guard is now computed from "PREFIX/FILE-NAME", where lower
+  case characters are converted to upper case, and series of
+  non-alphanumerical characters are converted to an underscore.
+
+  With "bison -o lang++/parser.cc", "location.hh" would now include:
+
+    #ifndef YY_LANG_LOCATION_HH
+    # define YY_LANG_LOCATION_HH
+    ...
+    #endif // !YY_LANG_LOCATION_HH
+
+*** C++ locations:
+
+  The position and location constructors (and their initialize methods)
+  accept new arguments for line and column.  Several issues in the
+  documentation were fixed.
+
+** liby is no longer asking for "rpl_fprintf" on some platforms.
+
+** Changes in the manual:
+
+*** %printer is documented
+
+  The "%printer" directive, supported since at least Bison 1.50, is finally
+  documented.  The "mfcalc" example is extended to demonstrate it.
+
+  For consistency with the C skeletons, the C++ parsers now also support
+  "yyoutput" (as an alias to "debug_stream ()").
+
+*** Several improvements have been made:
+
+  The layout for grammar excerpts was changed to a more compact scheme.
+  Named references are motivated.  The description of the automaton
+  description file (*.output) is updated to the current format.  Incorrect
+  index entries were fixed.  Some other errors were fixed.
+
+** Building bison:
+
+*** Conflicting prototypes with recent/modified Flex.
+
+  Fixed build problems with the current, unreleased, version of Flex, and
+  some modified versions of 2.5.35, which have modified function prototypes.
+
+*** Warnings during the build procedure have been eliminated.
+
+*** Several portability problems in the test suite have been fixed:
+
+  This includes warnings with some compilers, unexpected behavior of tools
+  such as diff, warning messages from the test suite itself, etc.
+
+*** The install-pdf target works properly:
+
+  Running "make install-pdf" (or -dvi, -html, -info, and -ps) no longer
+  halts in the middle of its course.
+
+* Changes in version 2.5 (2011-05-14):
+
+** Grammar symbol names can now contain non-initial dashes:
+
+  Consistently with directives (such as %error-verbose) and with
+  %define variables (e.g. push-pull), grammar symbol names may contain
+  dashes in any position except the beginning.  This is a GNU
+  extension over POSIX Yacc.  Thus, use of this extension is reported
+  by -Wyacc and rejected in Yacc mode (--yacc).
+
+** Named references:
+
+  Historically, Yacc and Bison have supported positional references
+  ($n, $$) to allow access to symbol values from inside of semantic
+  actions code.
+
+  Starting from this version, Bison can also accept named references.
+  When no ambiguity is possible, original symbol names may be used
+  as named references:
+
+    if_stmt : "if" cond_expr "then" then_stmt ';'
+    { $if_stmt = mk_if_stmt($cond_expr, $then_stmt); }
+
+  In the more common case, explicit names may be declared:
+
+    stmt[res] : "if" expr[cond] "then" stmt[then] "else" stmt[else] ';'
+    { $res = mk_if_stmt($cond, $then, $else); }
+
+  Location information is also accessible using @name syntax.  When
+  accessing symbol names containing dots or dashes, explicit bracketing
+  ($[sym.1]) must be used.
+
+  These features are experimental in this version.  More user feedback
+  will help to stabilize them.
+
+** IELR(1) and canonical LR(1):
+
+  IELR(1) is a minimal LR(1) parser table generation algorithm.  That
+  is, given any context-free grammar, IELR(1) generates parser tables
+  with the full language-recognition power of canonical LR(1) but with
+  nearly the same number of parser states as LALR(1).  This reduction
+  in parser states is often an order of magnitude.  More importantly,
+  because canonical LR(1)'s extra parser states may contain duplicate
+  conflicts in the case of non-LR(1) grammars, the number of conflicts
+  for IELR(1) is often an order of magnitude less as well.  This can
+  significantly reduce the complexity of developing of a grammar.
+
+  Bison can now generate IELR(1) and canonical LR(1) parser tables in
+  place of its traditional LALR(1) parser tables, which remain the
+  default.  You can specify the type of parser tables in the grammar
+  file with these directives:
+
+    %define lr.type lalr
+    %define lr.type ielr
+    %define lr.type canonical-lr
+
+  The default-reduction optimization in the parser tables can also be
+  adjusted using "%define lr.default-reductions".  For details on both
+  of these features, see the new section "Tuning LR" in the Bison
+  manual.
+
+  These features are experimental.  More user feedback will help to
+  stabilize them.
+
+** LAC (Lookahead Correction) for syntax error handling:
+
+  Canonical LR, IELR, and LALR can suffer from a couple of problems
+  upon encountering a syntax error.  First, the parser might perform
+  additional parser stack reductions before discovering the syntax
+  error.  Such reductions can perform user semantic actions that are
+  unexpected because they are based on an invalid token, and they
+  cause error recovery to begin in a different syntactic context than
+  the one in which the invalid token was encountered.  Second, when
+  verbose error messages are enabled (with %error-verbose or the
+  obsolete "#define YYERROR_VERBOSE"), the expected token list in the
+  syntax error message can both contain invalid tokens and omit valid
+  tokens.
+
+  The culprits for the above problems are %nonassoc, default
+  reductions in inconsistent states, and parser state merging.  Thus,
+  IELR and LALR suffer the most.  Canonical LR can suffer only if
+  %nonassoc is used or if default reductions are enabled for
+  inconsistent states.
+
+  LAC is a new mechanism within the parsing algorithm that solves
+  these problems for canonical LR, IELR, and LALR without sacrificing
+  %nonassoc, default reductions, or state merging.  When LAC is in
+  use, canonical LR and IELR behave almost exactly the same for both
+  syntactically acceptable and syntactically unacceptable input.
+  While LALR still does not support the full language-recognition
+  power of canonical LR and IELR, LAC at least enables LALR's syntax
+  error handling to correctly reflect LALR's language-recognition
+  power.
+
+  Currently, LAC is only supported for deterministic parsers in C.
+  You can enable LAC with the following directive:
+
+    %define parse.lac full
+
+  See the new section "LAC" in the Bison manual for additional
+  details including a few caveats.
+
+  LAC is an experimental feature.  More user feedback will help to
+  stabilize it.
+
+** %define improvements:
+
+*** Can now be invoked via the command line:
+
+  Each of these command-line options
+
+    -D NAME[=VALUE]
+    --define=NAME[=VALUE]
+
+    -F NAME[=VALUE]
+    --force-define=NAME[=VALUE]
+
+  is equivalent to this grammar file declaration
+
+    %define NAME ["VALUE"]
+
+  except that the manner in which Bison processes multiple definitions
+  for the same NAME differs.  Most importantly, -F and --force-define
+  quietly override %define, but -D and --define do not.  For further
+  details, see the section "Bison Options" in the Bison manual.
+
+*** Variables renamed:
+
+  The following %define variables
+
+    api.push_pull
+    lr.keep_unreachable_states
+
+  have been renamed to
+
+    api.push-pull
+    lr.keep-unreachable-states
+
+  The old names are now deprecated but will be maintained indefinitely
+  for backward compatibility.
+
+*** Values no longer need to be quoted in the grammar file:
+
+  If a %define value is an identifier, it no longer needs to be placed
+  within quotations marks.  For example,
+
+    %define api.push-pull "push"
+
+  can be rewritten as
+
+    %define api.push-pull push
+
+*** Unrecognized variables are now errors not warnings.
+
+*** Multiple invocations for any variable is now an error not a warning.
+
+** Unrecognized %code qualifiers are now errors not warnings.
+
+** Character literals not of length one:
+
+  Previously, Bison quietly converted all character literals to length
+  one.  For example, without warning, Bison interpreted the operators in
+  the following grammar to be the same token:
+
+    exp: exp '++'
+       | exp '+' exp
+       ;
+
+  Bison now warns when a character literal is not of length one.  In
+  some future release, Bison will start reporting an error instead.
+
+** Destructor calls fixed for lookaheads altered in semantic actions:
+
+  Previously for deterministic parsers in C, if a user semantic action
+  altered yychar, the parser in some cases used the old yychar value to
+  determine which destructor to call for the lookahead upon a syntax
+  error or upon parser return.  This bug has been fixed.
+
+** C++ parsers use YYRHSLOC:
+
+  Similarly to the C parsers, the C++ parsers now define the YYRHSLOC
+  macro and use it in the default YYLLOC_DEFAULT.  You are encouraged
+  to use it.  If, for instance, your location structure has "first"
+  and "last" members, instead of
+
+    # define YYLLOC_DEFAULT(Current, Rhs, N)                             \
+      do                                                                 \
+        if (N)                                                           \
+          {                                                              \
+            (Current).first = (Rhs)[1].location.first;                   \
+            (Current).last  = (Rhs)[N].location.last;                    \
+          }                                                              \
+        else                                                             \
+          {                                                              \
+            (Current).first = (Current).last = (Rhs)[0].location.last;   \
+          }                                                              \
+      while (false)
+
+  use:
+
+    # define YYLLOC_DEFAULT(Current, Rhs, N)                             \
+      do                                                                 \
+        if (N)                                                           \
+          {                                                              \
+            (Current).first = YYRHSLOC (Rhs, 1).first;                   \
+            (Current).last  = YYRHSLOC (Rhs, N).last;                    \
+          }                                                              \
+        else                                                             \
+          {                                                              \
+            (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last;   \
+          }                                                              \
+      while (false)
+
+** YYLLOC_DEFAULT in C++:
+
+  The default implementation of YYLLOC_DEFAULT used to be issued in
+  the header file.  It is now output in the implementation file, after
+  the user %code sections so that its #ifndef guard does not try to
+  override the user's YYLLOC_DEFAULT if provided.
+
+** YYFAIL now produces warnings and Java parsers no longer implement it:
+
+  YYFAIL has existed for many years as an undocumented feature of
+  deterministic parsers in C generated by Bison.  More recently, it was
+  a documented feature of Bison's experimental Java parsers.  As
+  promised in Bison 2.4.2's NEWS entry, any appearance of YYFAIL in a
+  semantic action now produces a deprecation warning, and Java parsers
+  no longer implement YYFAIL at all.  For further details, including a
+  discussion of how to suppress C preprocessor warnings about YYFAIL
+  being unused, see the Bison 2.4.2 NEWS entry.
+
+** Temporary hack for adding a semicolon to the user action:
+
+  Previously, Bison appended a semicolon to every user action for
+  reductions when the output language defaulted to C (specifically, when
+  neither %yacc, %language, %skeleton, or equivalent command-line
+  options were specified).  This allowed actions such as
+
+    exp: exp "+" exp { $$ = $1 + $3 };
+
+  instead of
+
+    exp: exp "+" exp { $$ = $1 + $3; };
+
+  As a first step in removing this misfeature, Bison now issues a
+  warning when it appends a semicolon.  Moreover, in cases where Bison
+  cannot easily determine whether a semicolon is needed (for example, an
+  action ending with a cpp directive or a braced compound initializer),
+  it no longer appends one.  Thus, the C compiler might now complain
+  about a missing semicolon where it did not before.  Future releases of
+  Bison will cease to append semicolons entirely.
+
+** Verbose syntax error message fixes:
+
+  When %error-verbose or the obsolete "#define YYERROR_VERBOSE" is
+  specified, syntax error messages produced by the generated parser
+  include the unexpected token as well as a list of expected tokens.
+  The effect of %nonassoc on these verbose messages has been corrected
+  in two ways, but a more complete fix requires LAC, described above:
+
+*** When %nonassoc is used, there can exist parser states that accept no
+    tokens, and so the parser does not always require a lookahead token
+    in order to detect a syntax error.  Because no unexpected token or
+    expected tokens can then be reported, the verbose syntax error
+    message described above is suppressed, and the parser instead
+    reports the simpler message, "syntax error".  Previously, this
+    suppression was sometimes erroneously triggered by %nonassoc when a
+    lookahead was actually required.  Now verbose messages are
+    suppressed only when all previous lookaheads have already been
+    shifted or discarded.
+
+*** Previously, the list of expected tokens erroneously included tokens
+    that would actually induce a syntax error because conflicts for them
+    were resolved with %nonassoc in the current parser state.  Such
+    tokens are now properly omitted from the list.
+
+*** Expected token lists are still often wrong due to state merging
+    (from LALR or IELR) and default reductions, which can both add
+    invalid tokens and subtract valid tokens.  Canonical LR almost
+    completely fixes this problem by eliminating state merging and
+    default reductions.  However, there is one minor problem left even
+    when using canonical LR and even after the fixes above.  That is,
+    if the resolution of a conflict with %nonassoc appears in a later
+    parser state than the one at which some syntax error is
+    discovered, the conflicted token is still erroneously included in
+    the expected token list.  Bison's new LAC implementation,
+    described above, eliminates this problem and the need for
+    canonical LR.  However, LAC is still experimental and is disabled
+    by default.
+
+** Java skeleton fixes:
+
+*** A location handling bug has been fixed.
+
+*** The top element of each of the value stack and location stack is now
+    cleared when popped so that it can be garbage collected.
+
+*** Parser traces now print the top element of the stack.
+
+** -W/--warnings fixes:
+
+*** Bison now properly recognizes the "no-" versions of categories:
+
+  For example, given the following command line, Bison now enables all
+  warnings except warnings for incompatibilities with POSIX Yacc:
+
+    bison -Wall,no-yacc gram.y
+
+*** Bison now treats S/R and R/R conflicts like other warnings:
+
+  Previously, conflict reports were independent of Bison's normal
+  warning system.  Now, Bison recognizes the warning categories
+  "conflicts-sr" and "conflicts-rr".  This change has important
+  consequences for the -W and --warnings command-line options.  For
+  example:
+
+    bison -Wno-conflicts-sr gram.y  # S/R conflicts not reported
+    bison -Wno-conflicts-rr gram.y  # R/R conflicts not reported
+    bison -Wnone            gram.y  # no conflicts are reported
+    bison -Werror           gram.y  # any conflict is an error
+
+  However, as before, if the %expect or %expect-rr directive is
+  specified, an unexpected number of conflicts is an error, and an
+  expected number of conflicts is not reported, so -W and --warning
+  then have no effect on the conflict report.
+
+*** The "none" category no longer disables a preceding "error":
+
+  For example, for the following command line, Bison now reports
+  errors instead of warnings for incompatibilities with POSIX Yacc:
+
+    bison -Werror,none,yacc gram.y
+
+*** The "none" category now disables all Bison warnings:
+
+  Previously, the "none" category disabled only Bison warnings for
+  which there existed a specific -W/--warning category.  However,
+  given the following command line, Bison is now guaranteed to
+  suppress all warnings:
+
+    bison -Wnone gram.y
+
+** Precedence directives can now assign token number 0:
+
+  Since Bison 2.3b, which restored the ability of precedence
+  directives to assign token numbers, doing so for token number 0 has
+  produced an assertion failure.  For example:
+
+    %left END 0
+
+  This bug has been fixed.
+
+* Changes in version 2.4.3 (2010-08-05):
+
+** Bison now obeys -Werror and --warnings=error for warnings about
+   grammar rules that are useless in the parser due to conflicts.
+
+** Problems with spawning M4 on at least FreeBSD 8 and FreeBSD 9 have
+   been fixed.
+
+** Failures in the test suite for GCC 4.5 have been fixed.
+
+** Failures in the test suite for some versions of Sun Studio C++ have
+   been fixed.
+
+** Contrary to Bison 2.4.2's NEWS entry, it has been decided that
+   warnings about undefined %prec identifiers will not be converted to
+   errors in Bison 2.5.  They will remain warnings, which should be
+   sufficient for POSIX while avoiding backward compatibility issues.
+
+** Minor documentation fixes.
+
+* Changes in version 2.4.2 (2010-03-20):
+
+** Some portability problems that resulted in failures and livelocks
+   in the test suite on some versions of at least Solaris, AIX, HP-UX,
+   RHEL4, and Tru64 have been addressed.  As a result, fatal Bison
+   errors should no longer cause M4 to report a broken pipe on the
+   affected platforms.
+
+** "%prec IDENTIFIER" requires IDENTIFIER to be defined separately.
+
+  POSIX specifies that an error be reported for any identifier that does
+  not appear on the LHS of a grammar rule and that is not defined by
+  %token, %left, %right, or %nonassoc.  Bison 2.3b and later lost this
+  error report for the case when an identifier appears only after a
+  %prec directive.  It is now restored.  However, for backward
+  compatibility with recent Bison releases, it is only a warning for
+  now.  In Bison 2.5 and later, it will return to being an error.
+  [Between the 2.4.2 and 2.4.3 releases, it was decided that this
+  warning will not be converted to an error in Bison 2.5.]
+
+** Detection of GNU M4 1.4.6 or newer during configure is improved.
+
+** Warnings from gcc's -Wundef option about undefined YYENABLE_NLS,
+   YYLTYPE_IS_TRIVIAL, and __STRICT_ANSI__ in C/C++ parsers are now
+   avoided.
+
+** %code is now a permanent feature.
+
+  A traditional Yacc prologue directive is written in the form:
+
+    %{CODE%}
+
+  To provide a more flexible alternative, Bison 2.3b introduced the
+  %code directive with the following forms for C/C++:
+
+    %code          {CODE}
+    %code requires {CODE}
+    %code provides {CODE}
+    %code top      {CODE}
+
+  These forms are now considered permanent features of Bison.  See the
+  %code entries in the section "Bison Declaration Summary" in the Bison
+  manual for a summary of their functionality.  See the section
+  "Prologue Alternatives" for a detailed discussion including the
+  advantages of %code over the traditional Yacc prologue directive.
+
+  Bison's Java feature as a whole including its current usage of %code
+  is still considered experimental.
+
+** YYFAIL is deprecated and will eventually be removed.
+
+  YYFAIL has existed for many years as an undocumented feature of
+  deterministic parsers in C generated by Bison.  Previously, it was
+  documented for Bison's experimental Java parsers.  YYFAIL is no longer
+  documented for Java parsers and is formally deprecated in both cases.
+  Users are strongly encouraged to migrate to YYERROR, which is
+  specified by POSIX.
+
+  Like YYERROR, you can invoke YYFAIL from a semantic action in order to
+  induce a syntax error.  The most obvious difference from YYERROR is
+  that YYFAIL will automatically invoke yyerror to report the syntax
+  error so that you don't have to.  However, there are several other
+  subtle differences between YYERROR and YYFAIL, and YYFAIL suffers from
+  inherent flaws when %error-verbose or "#define YYERROR_VERBOSE" is
+  used.  For a more detailed discussion, see:
+
+    http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html
+
+  The upcoming Bison 2.5 will remove YYFAIL from Java parsers, but
+  deterministic parsers in C will continue to implement it.  However,
+  because YYFAIL is already flawed, it seems futile to try to make new
+  Bison features compatible with it.  Thus, during parser generation,
+  Bison 2.5 will produce a warning whenever it discovers YYFAIL in a
+  rule action.  In a later release, YYFAIL will be disabled for
+  %error-verbose and "#define YYERROR_VERBOSE".  Eventually, YYFAIL will
+  be removed altogether.
+
+  There exists at least one case where Bison 2.5's YYFAIL warning will
+  be a false positive.  Some projects add phony uses of YYFAIL and other
+  Bison-defined macros for the sole purpose of suppressing C
+  preprocessor warnings (from GCC cpp's -Wunused-macros, for example).
+  To avoid Bison's future warning, such YYFAIL uses can be moved to the
+  epilogue (that is, after the second "%%") in the Bison input file.  In
+  this release (2.4.2), Bison already generates its own code to suppress
+  C preprocessor warnings for YYFAIL, so projects can remove their own
+  phony uses of YYFAIL if compatibility with Bison releases prior to
+  2.4.2 is not necessary.
+
+** Internationalization.
+
+  Fix a regression introduced in Bison 2.4: Under some circumstances,
+  message translations were not installed although supported by the
+  host system.
+
+* Changes in version 2.4.1 (2008-12-11):
+
+** In the GLR defines file, unexpanded M4 macros in the yylval and yylloc
+   declarations have been fixed.
+
+** Temporary hack for adding a semicolon to the user action.
+
+  Bison used to prepend a trailing semicolon at the end of the user
+  action for reductions.  This allowed actions such as
+
+    exp: exp "+" exp { $$ = $1 + $3 };
+
+  instead of
+
+    exp: exp "+" exp { $$ = $1 + $3; };
+
+  Some grammars still depend on this "feature".  Bison 2.4.1 restores
+  the previous behavior in the case of C output (specifically, when
+  neither %language or %skeleton or equivalent command-line options
+  are used) to leave more time for grammars depending on the old
+  behavior to be adjusted.  Future releases of Bison will disable this
+  feature.
+
+** A few minor improvements to the Bison manual.
+
+* Changes in version 2.4 (2008-11-02):
+
+** %language is an experimental feature.
+
+  We first introduced this feature in test release 2.3b as a cleaner
+  alternative to %skeleton.  Since then, we have discussed the possibility of
+  modifying its effect on Bison's output file names.  Thus, in this release,
+  we consider %language to be an experimental feature that will likely evolve
+  in future releases.
+
+** Forward compatibility with GNU M4 has been improved.
+
+** Several bugs in the C++ skeleton and the experimental Java skeleton have been
+  fixed.
+
+* Changes in version 2.3b (2008-05-27):
+
+** The quotes around NAME that used to be required in the following directive
+  are now deprecated:
+
+    %define NAME "VALUE"
+
+** The directive "%pure-parser" is now deprecated in favor of:
+
+    %define api.pure
+
+  which has the same effect except that Bison is more careful to warn about
+  unreasonable usage in the latter case.
+
+** Push Parsing
+
+  Bison can now generate an LALR(1) parser in C with a push interface.  That
+  is, instead of invoking "yyparse", which pulls tokens from "yylex", you can
+  push one token at a time to the parser using "yypush_parse", which will
+  return to the caller after processing each token.  By default, the push
+  interface is disabled.  Either of the following directives will enable it:
+
+    %define api.push_pull "push" // Just push; does not require yylex.
+    %define api.push_pull "both" // Push and pull; requires yylex.
+
+  See the new section "A Push Parser" in the Bison manual for details.
+
+  The current push parsing interface is experimental and may evolve.  More user
+  feedback will help to stabilize it.
+
+** The -g and --graph options now output graphs in Graphviz DOT format,
+  not VCG format.  Like --graph, -g now also takes an optional FILE argument
+  and thus cannot be bundled with other short options.
+
+** Java
+
+  Bison can now generate an LALR(1) parser in Java.  The skeleton is
+  "data/lalr1.java".  Consider using the new %language directive instead of
+  %skeleton to select it.
+
+  See the new section "Java Parsers" in the Bison manual for details.
+
+  The current Java interface is experimental and may evolve.  More user
+  feedback will help to stabilize it.
+
+** %language
+
+  This new directive specifies the programming language of the generated
+  parser, which can be C (the default), C++, or Java.  Besides the skeleton
+  that Bison uses, the directive affects the names of the generated files if
+  the grammar file's name ends in ".y".
+
+** XML Automaton Report
+
+  Bison can now generate an XML report of the LALR(1) automaton using the new
+  "--xml" option.  The current XML schema is experimental and may evolve.  More
+  user feedback will help to stabilize it.
+
+** The grammar file may now specify the name of the parser header file using
+  %defines.  For example:
+
+    %defines "parser.h"
+
+** When reporting useless rules, useless nonterminals, and unused terminals,
+  Bison now employs the terms "useless in grammar" instead of "useless",
+  "useless in parser" instead of "never reduced", and "unused in grammar"
+  instead of "unused".
+
+** Unreachable State Removal
+
+  Previously, Bison sometimes generated parser tables containing unreachable
+  states.  A state can become unreachable during conflict resolution if Bison
+  disables a shift action leading to it from a predecessor state.  Bison now:
+
+    1. Removes unreachable states.
+
+    2. Does not report any conflicts that appeared in unreachable states.
+       WARNING: As a result, you may need to update %expect and %expect-rr
+       directives in existing grammar files.
+
+    3. For any rule used only in such states, Bison now reports the rule as
+       "useless in parser due to conflicts".
+
+  This feature can be disabled with the following directive:
+
+    %define lr.keep_unreachable_states
+
+  See the %define entry in the "Bison Declaration Summary" in the Bison manual
+  for further discussion.
+
+** Lookahead Set Correction in the ".output" Report
+
+  When instructed to generate a ".output" file including lookahead sets
+  (using "--report=lookahead", for example), Bison now prints each reduction's
+  lookahead set only next to the associated state's one item that (1) is
+  associated with the same rule as the reduction and (2) has its dot at the end
+  of its RHS.  Previously, Bison also erroneously printed the lookahead set
+  next to all of the state's other items associated with the same rule.  This
+  bug affected only the ".output" file and not the generated parser source
+  code.
+
+** --report-file=FILE is a new option to override the default ".output" file
+  name.
+
+** The "=" that used to be required in the following directives is now
+  deprecated:
+
+    %file-prefix "parser"
+    %name-prefix "c_"
+    %output "parser.c"
+
+** An Alternative to "%{...%}" -- "%code QUALIFIER {CODE}"
+
+  Bison 2.3a provided a new set of directives as a more flexible alternative to
+  the traditional Yacc prologue blocks.  Those have now been consolidated into
+  a single %code directive with an optional qualifier field, which identifies
+  the purpose of the code and thus the location(s) where Bison should generate
+  it:
+
+    1. "%code          {CODE}" replaces "%after-header  {CODE}"
+    2. "%code requires {CODE}" replaces "%start-header  {CODE}"
+    3. "%code provides {CODE}" replaces "%end-header    {CODE}"
+    4. "%code top      {CODE}" replaces "%before-header {CODE}"
+
+  See the %code entries in section "Bison Declaration Summary" in the Bison
+  manual for a summary of the new functionality.  See the new section "Prologue
+  Alternatives" for a detailed discussion including the advantages of %code
+  over the traditional Yacc prologues.
+
+  The prologue alternatives are experimental.  More user feedback will help to
+  determine whether they should become permanent features.
+
+** Revised warning: unset or unused mid-rule values
+
+  Since Bison 2.2, Bison has warned about mid-rule values that are set but not
+  used within any of the actions of the parent rule.  For example, Bison warns
+  about unused $2 in:
+
+    exp: '1' { $$ = 1; } '+' exp { $$ = $1 + $4; };
+
+  Now, Bison also warns about mid-rule values that are used but not set.  For
+  example, Bison warns about unset $$ in the mid-rule action in:
+
+    exp: '1' { $1 = 1; } '+' exp { $$ = $2 + $4; };
+
+  However, Bison now disables both of these warnings by default since they
+  sometimes prove to be false alarms in existing grammars employing the Yacc
+  constructs $0 or $-N (where N is some positive integer).
+
+  To enable these warnings, specify the option "--warnings=midrule-values" or
+  "-W", which is a synonym for "--warnings=all".
+
+** Default %destructor or %printer with "<*>" or "<>"
+
+  Bison now recognizes two separate kinds of default %destructor's and
+  %printer's:
+
+    1. Place "<*>" in a %destructor/%printer symbol list to define a default
+       %destructor/%printer for all grammar symbols for which you have formally
+       declared semantic type tags.
+
+    2. Place "<>" in a %destructor/%printer symbol list to define a default
+       %destructor/%printer for all grammar symbols without declared semantic
+       type tags.
+
+  Bison no longer supports the "%symbol-default" notation from Bison 2.3a.
+  "<*>" and "<>" combined achieve the same effect with one exception: Bison no
+  longer applies any %destructor to a mid-rule value if that mid-rule value is
+  not actually ever referenced using either $$ or $n in a semantic action.
+
+  The default %destructor's and %printer's are experimental.  More user
+  feedback will help to determine whether they should become permanent
+  features.
+
+  See the section "Freeing Discarded Symbols" in the Bison manual for further
+  details.
+
+** %left, %right, and %nonassoc can now declare token numbers.  This is required
+  by POSIX.  However, see the end of section "Operator Precedence" in the Bison
+  manual for a caveat concerning the treatment of literal strings.
+
+** The nonfunctional --no-parser, -n, and %no-parser options have been
+  completely removed from Bison.
+
+* Changes in version 2.3a, 2006-09-13:
+
+** Instead of %union, you can define and use your own union type
+  YYSTYPE if your grammar contains at least one <type> tag.
+  Your YYSTYPE need not be a macro; it can be a typedef.
+  This change is for compatibility with other Yacc implementations,
+  and is required by POSIX.
+
+** Locations columns and lines start at 1.
+  In accordance with the GNU Coding Standards and Emacs.
+
+** You may now declare per-type and default %destructor's and %printer's:
+
+  For example:
+
+    %union { char *string; }
+    %token <string> STRING1
+    %token <string> STRING2
+    %type  <string> string1
+    %type  <string> string2
+    %union { char character; }
+    %token <character> CHR
+    %type  <character> chr
+    %destructor { free ($$); } %symbol-default
+    %destructor { free ($$); printf ("%d", @$.first_line); } STRING1 string1
+    %destructor { } <character>
+
+  guarantees that, when the parser discards any user-defined symbol that has a
+  semantic type tag other than "<character>", it passes its semantic value to
+  "free".  However, when the parser discards a "STRING1" or a "string1", it
+  also prints its line number to "stdout".  It performs only the second
+  "%destructor" in this case, so it invokes "free" only once.
+
+  [Although we failed to mention this here in the 2.3a release, the default
+  %destructor's and %printer's were experimental, and they were rewritten in
+  future versions.]
+
+** Except for LALR(1) parsers in C with POSIX Yacc emulation enabled (with "-y",
+  "--yacc", or "%yacc"), Bison no longer generates #define statements for
+  associating token numbers with token names.  Removing the #define statements
+  helps to sanitize the global namespace during preprocessing, but POSIX Yacc
+  requires them.  Bison still generates an enum for token names in all cases.
+
+** Handling of traditional Yacc prologue blocks is now more consistent but
+  potentially incompatible with previous releases of Bison.
+
+  As before, you declare prologue blocks in your grammar file with the
+  "%{ ... %}" syntax.  To generate the pre-prologue, Bison concatenates all
+  prologue blocks that you've declared before the first %union.  To generate
+  the post-prologue, Bison concatenates all prologue blocks that you've
+  declared after the first %union.
+
+  Previous releases of Bison inserted the pre-prologue into both the header
+  file and the code file in all cases except for LALR(1) parsers in C.  In the
+  latter case, Bison inserted it only into the code file.  For parsers in C++,
+  the point of insertion was before any token definitions (which associate
+  token numbers with names).  For parsers in C, the point of insertion was
+  after the token definitions.
+
+  Now, Bison never inserts the pre-prologue into the header file.  In the code
+  file, it always inserts it before the token definitions.
+
+** Bison now provides a more flexible alternative to the traditional Yacc
+  prologue blocks: %before-header, %start-header, %end-header, and
+  %after-header.
+
+  For example, the following declaration order in the grammar file reflects the
+  order in which Bison will output these code blocks.  However, you are free to
+  declare these code blocks in your grammar file in whatever order is most
+  convenient for you:
+
+    %before-header {
+      /* Bison treats this block like a pre-prologue block: it inserts it into
+       * the code file before the contents of the header file.  It does *not*
+       * insert it into the header file.  This is a good place to put
+       * #include's that you want at the top of your code file.  A common
+       * example is '#include "system.h"'.  */
+    }
+    %start-header {
+      /* Bison inserts this block into both the header file and the code file.
+       * In both files, the point of insertion is before any Bison-generated
+       * token, semantic type, location type, and class definitions.  This is a
+       * good place to define %union dependencies, for example.  */
+    }
+    %union {
+      /* Unlike the traditional Yacc prologue blocks, the output order for the
+       * new %*-header blocks is not affected by their declaration position
+       * relative to any %union in the grammar file.  */
+    }
+    %end-header {
+      /* Bison inserts this block into both the header file and the code file.
+       * In both files, the point of insertion is after the Bison-generated
+       * definitions.  This is a good place to declare or define public
+       * functions or data structures that depend on the Bison-generated
+       * definitions.  */
+    }
+    %after-header {
+      /* Bison treats this block like a post-prologue block: it inserts it into
+       * the code file after the contents of the header file.  It does *not*
+       * insert it into the header file.  This is a good place to declare or
+       * define internal functions or data structures that depend on the
+       * Bison-generated definitions.  */
+    }
+
+  If you have multiple occurrences of any one of the above declarations, Bison
+  will concatenate the contents in declaration order.
+
+  [Although we failed to mention this here in the 2.3a release, the prologue
+  alternatives were experimental, and they were rewritten in future versions.]
+
+** The option "--report=look-ahead" has been changed to "--report=lookahead".
+  The old spelling still works, but is not documented and may be removed
+  in a future release.
+
+* Changes in version 2.3, 2006-06-05:
+
+** GLR grammars should now use "YYRECOVERING ()" instead of "YYRECOVERING",
   for compatibility with LALR(1) grammars.
 
-* It is now documented that any definition of YYSTYPE or YYLTYPE should
+** It is now documented that any definition of YYSTYPE or YYLTYPE should
   be to a type name that does not contain parentheses or brackets.
 
-Changes in version 2.2, 2006-05-19:
+* Changes in version 2.2, 2006-05-19:
 
-* The distribution terms for all Bison-generated parsers now permit
+** The distribution terms for all Bison-generated parsers now permit
   using the parsers in nonfree programs.  Previously, this permission
   was granted only for Bison-generated LALR(1) parsers in C.
 
-* %name-prefix changes the namespace name in C++ outputs.
+** %name-prefix changes the namespace name in C++ outputs.
 
-* The C++ parsers export their token_type.
+** The C++ parsers export their token_type.
 
-* Bison now allows multiple %union declarations, and concatenates
+** Bison now allows multiple %union declarations, and concatenates
   their contents together.
 
-* New warning: unused values
+** New warning: unused values
   Right-hand side symbols whose values are not used are reported,
   if the symbols have destructors.  For instance:
 
      exp: exp "?" exp ":" exp { $1 ? $1 : $3; }
-	| exp "+" exp
-	;
+        | exp "+" exp
+        ;
 
   will trigger a warning about $$ and $5 in the first rule, and $3 in
   the second ($1 is copied to $$ by the default rule).  This example
   most likely contains three errors, and could be rewritten as:
 
      exp: exp "?" exp ":" exp
-	    { $$ = $1 ? $3 : $5; free ($1 ? $5 : $3); free ($1); }
-	| exp "+" exp
-	    { $$ = $1 ? $1 : $3; if ($1) free ($3); }
-	;
+            { $$ = $1 ? $3 : $5; free ($1 ? $5 : $3); free ($1); }
+        | exp "+" exp
+            { $$ = $1 ? $1 : $3; if ($1) free ($3); }
+        ;
 
   However, if the original actions were really intended, memory leaks
   and all, the warnings can be suppressed by letting Bison believe the
   values are used, e.g.:
 
      exp: exp "?" exp ":" exp { $1 ? $1 : $3; (void) ($$, $5); }
-	| exp "+" exp         { $$ = $1; (void) $3; }
-	;
+        | exp "+" exp         { $$ = $1; (void) $3; }
+        ;
 
   If there are mid-rule actions, the warning is issued if no action
   uses it.  The following triggers no warning: $1 and $3 are used.
@@ -56,70 +1330,70 @@
   The warning is intended to help catching lost values and memory leaks.
   If a value is ignored, its associated memory typically is not reclaimed.
 
-* %destructor vs. YYABORT, YYACCEPT, and YYERROR.
+** %destructor vs. YYABORT, YYACCEPT, and YYERROR.
   Destructors are now called when user code invokes YYABORT, YYACCEPT,
   and YYERROR, for all objects on the stack, other than objects
   corresponding to the right-hand side of the current rule.
 
-* %expect, %expect-rr
+** %expect, %expect-rr
   Incorrect numbers of expected conflicts are now actual errors,
   instead of warnings.
 
-* GLR, YACC parsers.
+** GLR, YACC parsers.
   The %parse-params are available in the destructors (and the
   experimental printers) as per the documentation.
 
-* Bison now warns if it finds a stray `$' or `@' in an action.
+** Bison now warns if it finds a stray "$" or "@" in an action.
 
-* %require "VERSION"
+** %require "VERSION"
   This specifies that the grammar file depends on features implemented
   in Bison version VERSION or higher.
 
-* lalr1.cc: The token and value types are now class members.
+** lalr1.cc: The token and value types are now class members.
   The tokens were defined as free form enums and cpp macros.  YYSTYPE
   was defined as a free form union.  They are now class members:
-  tokens are enumerations of the `yy::parser::token' struct, and the
-  semantic values have the `yy::parser::semantic_type' type.
+  tokens are enumerations of the "yy::parser::token" struct, and the
+  semantic values have the "yy::parser::semantic_type" type.
 
   If you do not want or can update to this scheme, the directive
-  `%define "global_tokens_and_yystype" "1"' triggers the global
+  '%define "global_tokens_and_yystype" "1"' triggers the global
   definition of tokens and YYSTYPE.  This change is suitable both
   for previous releases of Bison, and this one.
 
   If you wish to update, then make sure older version of Bison will
-  fail using `%require "2.2"'.
+  fail using '%require "2.2"'.
 
-* DJGPP support added.
+** DJGPP support added.
 
-Changes in version 2.1, 2005-09-16:
+* Changes in version 2.1, 2005-09-16:
 
-* The C++ lalr1.cc skeleton supports %lex-param.
+** The C++ lalr1.cc skeleton supports %lex-param.
 
-* Bison-generated parsers now support the translation of diagnostics like
+** Bison-generated parsers now support the translation of diagnostics like
   "syntax error" into languages other than English.  The default
   language is still English.  For details, please see the new
   Internationalization section of the Bison manual.  Software
   distributors should also see the new PACKAGING file.  Thanks to
   Bruno Haible for this new feature.
 
-* Wording in the Bison-generated parsers has been changed slightly to
+** Wording in the Bison-generated parsers has been changed slightly to
   simplify translation.  In particular, the message "memory exhausted"
   has replaced "parser stack overflow", as the old message was not
   always accurate for modern Bison-generated parsers.
 
-* Destructors are now called when the parser aborts, for all symbols left
+** Destructors are now called when the parser aborts, for all symbols left
   behind on the stack.  Also, the start symbol is now destroyed after a
   successful parse.  In both cases, the behavior was formerly inconsistent.
 
-* When generating verbose diagnostics, Bison-generated parsers no longer
+** When generating verbose diagnostics, Bison-generated parsers no longer
   quote the literal strings associated with tokens.  For example, for
   a syntax error associated with '%token NUM "number"' they might
   print 'syntax error, unexpected number' instead of 'syntax error,
   unexpected "number"'.
 
-Changes in version 2.0, 2004-12-25:
+* Changes in version 2.0, 2004-12-25:
 
-* Possibly-incompatible changes
+** Possibly-incompatible changes
 
   - Bison-generated parsers no longer default to using the alloca function
     (when available) to extend the parser stack, due to widespread
@@ -144,7 +1418,7 @@
 
   - NUL bytes are no longer allowed in Bison string literals, unfortunately.
 
-* New features
+** New features
 
   - GLR grammars now support locations.
 
@@ -155,19 +1429,18 @@
   - A new directive "%expect-rr N" specifies the expected number of
     reduce/reduce conflicts in GLR parsers.
 
-  - %token numbers can now be hexadecimal integers, e.g., `%token FOO 0x12d'.
+  - %token numbers can now be hexadecimal integers, e.g., "%token FOO 0x12d".
     This is a GNU extension.
 
-  - The option `--report=lookahead' was changed to `--report=look-ahead'.
-    The old spelling still works, but is not documented and will be
-    removed.
+  - The option "--report=lookahead" was changed to "--report=look-ahead".
+    [However, this was changed back after 2.3.]
 
   - Experimental %destructor support has been added to lalr1.cc.
 
   - New configure option --disable-yacc, to disable installation of the
     yacc command and -ly library introduced in 1.875 for POSIX conformance.
 
-* Bug fixes
+** Bug fixes
 
   - For now, %expect-count violations are now just warnings, not errors.
     This is for compatibility with Bison 1.75 and earlier (when there are
@@ -181,12 +1454,12 @@
 
   - Semicolons are now allowed before "|" in grammar rules, as POSIX requires.
 
-Changes in version 1.875, 2003-01-01:
+* Changes in version 1.875, 2003-01-01:
 
-* The documentation license has been upgraded to version 1.2
+** The documentation license has been upgraded to version 1.2
   of the GNU Free Documentation License.
 
-* syntax error processing
+** syntax error processing
 
   - In Yacc-style parsers YYLLOC_DEFAULT is now used to compute error
     locations too.  This fixes bugs in error-location computation.
@@ -201,16 +1474,16 @@
   - #defining yyerror to steal internal variables is discouraged.
     It is not guaranteed to work forever.
 
-* POSIX conformance
+** POSIX conformance
 
   - Semicolons are once again optional at the end of grammar rules.
     This reverts to the behavior of Bison 1.33 and earlier, and improves
     compatibility with Yacc.
 
-  - `parse error' -> `syntax error'
-    Bison now uniformly uses the term `syntax error'; formerly, the code
-    and manual sometimes used the term `parse error' instead.  POSIX
-    requires `syntax error' in diagnostics, and it was thought better to
+  - "parse error" -> "syntax error"
+    Bison now uniformly uses the term "syntax error"; formerly, the code
+    and manual sometimes used the term "parse error" instead.  POSIX
+    requires "syntax error" in diagnostics, and it was thought better to
     be consistent.
 
   - The documentation now emphasizes that yylex and yyerror must be
@@ -223,7 +1496,7 @@
     output as "foo\\bar.y".
 
   - Yacc command and library now available
-    The Bison distribution now installs a `yacc' command, as POSIX requires.
+    The Bison distribution now installs a "yacc" command, as POSIX requires.
     Also, Bison now installs a small library liby.a containing
     implementations of Yacc-compatible yyerror and main functions.
     This library is normally not useful, but POSIX requires it.
@@ -234,80 +1507,107 @@
     using typedef instead of defining it as a macro.
     For consistency, YYLTYPE is also declared instead of defined.
 
-* Other compatibility issues
+** Other compatibility issues
 
-  - %union directives can now have a tag before the `{', e.g., the
-    directive `%union foo {...}' now generates the C code
-    `typedef union foo { ... } YYSTYPE;'; this is for Yacc compatibility.
-    The default union tag is `YYSTYPE', for compatibility with Solaris 9 Yacc.
-    For consistency, YYLTYPE's struct tag is now `YYLTYPE' not `yyltype'.
+  - %union directives can now have a tag before the "{", e.g., the
+    directive "%union foo {...}" now generates the C code
+    "typedef union foo { ... } YYSTYPE;"; this is for Yacc compatibility.
+    The default union tag is "YYSTYPE", for compatibility with Solaris 9 Yacc.
+    For consistency, YYLTYPE's struct tag is now "YYLTYPE" not "yyltype".
     This is for compatibility with both Yacc and Bison 1.35.
 
-  - `;' is output before the terminating `}' of an action, for
+  - ";" is output before the terminating "}" of an action, for
     compatibility with Bison 1.35.
 
   - Bison now uses a Yacc-style format for conflict reports, e.g.,
-    `conflicts: 2 shift/reduce, 1 reduce/reduce'.
+    "conflicts: 2 shift/reduce, 1 reduce/reduce".
 
-  - `yystype' and `yyltype' are now obsolescent macros instead of being
+  - "yystype" and "yyltype" are now obsolescent macros instead of being
     typedefs or tags; they are no longer documented and are planned to be
     withdrawn in a future release.
 
-* GLR parser notes
+** GLR parser notes
 
   - GLR and inline
     Users of Bison have to decide how they handle the portability of the
-    C keyword `inline'.
+    C keyword "inline".
 
-  - `parsing stack overflow...' -> `parser stack overflow'
-    GLR parsers now report `parser stack overflow' as per the Bison manual.
+  - "parsing stack overflow..." -> "parser stack overflow"
+    GLR parsers now report "parser stack overflow" as per the Bison manual.
 
-* Bison now warns if it detects conflicting outputs to the same file,
-  e.g., it generates a warning for `bison -d -o foo.h foo.y' since
+** %parse-param and %lex-param
+  The macros YYPARSE_PARAM and YYLEX_PARAM provide a means to pass
+  additional context to yyparse and yylex.  They suffer from several
+  shortcomings:
+
+  - a single argument only can be added,
+  - their types are weak (void *),
+  - this context is not passed to ancillary functions such as yyerror,
+  - only yacc.c parsers support them.
+
+  The new %parse-param/%lex-param directives provide a more precise control.
+  For instance:
+
+    %parse-param {int *nastiness}
+    %lex-param   {int *nastiness}
+    %parse-param {int *randomness}
+
+  results in the following signatures:
+
+    int yylex   (int *nastiness);
+    int yyparse (int *nastiness, int *randomness);
+
+  or, if both %pure-parser and %locations are used:
+
+    int yylex   (YYSTYPE *lvalp, YYLTYPE *llocp, int *nastiness);
+    int yyparse (int *nastiness, int *randomness);
+
+** Bison now warns if it detects conflicting outputs to the same file,
+  e.g., it generates a warning for "bison -d -o foo.h foo.y" since
   that command outputs both code and header to foo.h.
 
-* #line in output files
+** #line in output files
   - --no-line works properly.
 
-* Bison can no longer be built by a K&R C compiler; it requires C89 or
+** Bison can no longer be built by a K&R C compiler; it requires C89 or
   later to be built.  This change originally took place a few versions
   ago, but nobody noticed until we recently asked someone to try
   building Bison with a K&R C compiler.
 
-Changes in version 1.75, 2002-10-14:
+* Changes in version 1.75, 2002-10-14:
 
-* Bison should now work on 64-bit hosts.
+** Bison should now work on 64-bit hosts.
 
-* Indonesian translation thanks to Tedi Heriyanto.
+** Indonesian translation thanks to Tedi Heriyanto.
 
-* GLR parsers
+** GLR parsers
   Fix spurious parse errors.
 
-* Pure parsers
+** Pure parsers
   Some people redefine yyerror to steal yyparse' private variables.
   Reenable this trick until an official feature replaces it.
 
-* Type Clashes
+** Type Clashes
   In agreement with POSIX and with other Yaccs, leaving a default
   action is valid when $$ is untyped, and $1 typed:
 
-	untyped: ... typed;
+        untyped: ... typed;
 
   but the converse remains an error:
 
-	typed: ... untyped;
+        typed: ... untyped;
 
-* Values of mid-rule actions
+** Values of mid-rule actions
   The following code:
 
-	foo: { ... } { $$ = $1; } ...
+        foo: { ... } { $$ = $1; } ...
 
   was incorrectly rejected: $1 is defined in the second mid-rule
   action, and is equal to the $$ of the first mid-rule action.
 
-Changes in version 1.50, 2002-10-04:
+* Changes in version 1.50, 2002-10-04:
 
-* GLR parsing
+** GLR parsing
   The declaration
      %glr-parser
   causes Bison to produce a Generalized LR (GLR) parser, capable of handling
@@ -318,33 +1618,33 @@
   Unfortunately Bison 1.50 does not work properly on 64-bit hosts
   like the Alpha, so please stick to 32-bit hosts for now.
 
-* Output Directory
+** Output Directory
   When not in Yacc compatibility mode, when the output file was not
-  specified, running `bison foo/bar.y' created `foo/bar.c'.  It
-  now creates `bar.c'.
+  specified, running "bison foo/bar.y" created "foo/bar.c".  It
+  now creates "bar.c".
 
-* Undefined token
+** Undefined token
   The undefined token was systematically mapped to 2 which prevented
   the use of 2 by the user.  This is no longer the case.
 
-* Unknown token numbers
+** Unknown token numbers
   If yylex returned an out of range value, yyparse could die.  This is
   no longer the case.
 
-* Error token
+** Error token
   According to POSIX, the error token must be 256.
   Bison extends this requirement by making it a preference: *if* the
   user specified that one of her tokens is numbered 256, then error
   will be mapped onto another number.
 
-* Verbose error messages
-  They no longer report `..., expecting error or...' for states where
+** Verbose error messages
+  They no longer report "..., expecting error or..." for states where
   error recovery is possible.
 
-* End token
-  Defaults to `$end' instead of `$'.
+** End token
+  Defaults to "$end" instead of "$".
 
-* Error recovery now conforms to documentation and to POSIX
+** Error recovery now conforms to documentation and to POSIX
   When a Bison-generated parser encounters a syntax error, it now pops
   the stack until it finds a state that allows shifting the error
   token.  Formerly, it popped the stack until it found a state that
@@ -354,101 +1654,104 @@
   Paul Eggert, "Reductions during Bison error handling" (2002-05-20)
   <http://lists.gnu.org/archive/html/bug-bison/2002-05/msg00038.html>.
 
-* Traces
+** Traces
   Popped tokens and nonterminals are now reported.
 
-* Larger grammars
+** Larger grammars
   Larger grammars are now supported (larger token numbers, larger grammar
   size (= sum of the LHS and RHS lengths), larger LALR tables).
   Formerly, many of these numbers ran afoul of 16-bit limits;
   now these limits are 32 bits on most hosts.
 
-* Explicit initial rule
+** Explicit initial rule
   Bison used to play hacks with the initial rule, which the user does
   not write.  It is now explicit, and visible in the reports and
   graphs as rule 0.
 
-* Useless rules
+** Useless rules
   Before, Bison reported the useless rules, but, although not used,
   included them in the parsers.  They are now actually removed.
 
-* Useless rules, useless nonterminals
+** Useless rules, useless nonterminals
   They are now reported, as a warning, with their locations.
 
-* Rules never reduced
+** Rules never reduced
   Rules that can never be reduced because of conflicts are now
   reported.
 
-* Incorrect `Token not used'
+** Incorrect "Token not used"
   On a grammar such as
 
-           %token useless useful
-           %%
-           exp: '0' %prec useful;
+    %token useless useful
+    %%
+    exp: '0' %prec useful;
 
   where a token was used to set the precedence of the last rule,
-  bison reported both `useful' and `useless' as useless tokens.
+  bison reported both "useful" and "useless" as useless tokens.
 
-* Revert the C++ namespace changes introduced in 1.31
+** Revert the C++ namespace changes introduced in 1.31
   as they caused too many portability hassles.
 
-* Default locations
+** Default locations
   By an accident of design, the default computation of @$ was
   performed after another default computation was performed: @$ = @1.
   The latter is now removed: YYLLOC_DEFAULT is fully responsible of
   the computation of @$.
 
-* Token end-of-file
+** Token end-of-file
   The token end of file may be specified by the user, in which case,
   the user symbol is used in the reports, the graphs, and the verbose
-  error messages instead of `$end', which remains being the default.
+  error messages instead of "$end", which remains being the default.
   For instance
-     %token MYEOF 0
+    %token MYEOF 0
   or
-     %token MYEOF 0 "end of file"
+    %token MYEOF 0 "end of file"
 
-* Semantic parser
+** Semantic parser
   This old option, which has been broken for ages, is removed.
 
-* New translations
+** New translations
   Brazilian Portuguese, thanks to Alexandre Folle de Menezes.
   Croatian, thanks to Denis Lackovic.
 
-* Incorrect token definitions
-  When given `%token 'a' "A"', Bison used to output `#define 'a' 65'.
+** Incorrect token definitions
+  When given
+    %token 'a' "A"
+  bison used to output
+    #define 'a' 65
 
-* Token definitions as enums
+** Token definitions as enums
   Tokens are output both as the traditional #define's, and, provided
   the compiler supports ANSI C or is a C++ compiler, as enums.
   This lets debuggers display names instead of integers.
 
-* Reports
+** Reports
   In addition to --verbose, bison supports --report=THINGS, which
   produces additional information:
   - itemset
     complete the core item sets with their closure
-  - lookahead [changed to `look-ahead' in 1.875e and later]
-    explicitly associate look-ahead tokens to items
+  - lookahead [changed to "look-ahead" in 1.875e through 2.3, but changed back]
+    explicitly associate lookahead tokens to items
   - solved
     describe shift/reduce conflicts solving.
     Bison used to systematically output this information on top of
     the report.  Solved conflicts are now attached to their states.
 
-* Type clashes
+** Type clashes
   Previous versions don't complain when there is a type clash on
   the default action if the rule has a mid-rule action, such as in:
 
-      %type <foo> bar
-      %%
-      bar: '0' {} '0';
+    %type <foo> bar
+    %%
+    bar: '0' {} '0';
 
   This is fixed.
 
-* GNU M4 is now required when using Bison.
+** GNU M4 is now required when using Bison.
 
-Changes in version 1.35, 2002-03-25:
+* Changes in version 1.35, 2002-03-25:
 
-* C Skeleton
+** C Skeleton
   Some projects use Bison's C parser with C++ compilers, and define
   YYSTYPE as a class.  The recent adjustment of C parsers for data
   alignment and 64 bit architectures made this impossible.
@@ -461,234 +1764,234 @@
   This kludge also addresses some C++ problems when the stack was
   extended.
 
-Changes in version 1.34, 2002-03-12:
+* Changes in version 1.34, 2002-03-12:
 
-* File name clashes are detected
+** File name clashes are detected
   $ bison foo.y -d -o foo.x
-  fatal error: header and parser would both be named `foo.x'
+  fatal error: header and parser would both be named "foo.x"
 
-* A missing `;' at the end of a rule triggers a warning
+** A missing ";" at the end of a rule triggers a warning
   In accordance with POSIX, and in agreement with other
   Yacc implementations, Bison will mandate this semicolon in the near
   future.  This eases the implementation of a Bison parser of Bison
   grammars by making this grammar LALR(1) instead of LR(2).  To
   facilitate the transition, this release introduces a warning.
 
-* Revert the C++ namespace changes introduced in 1.31, as they caused too
+** Revert the C++ namespace changes introduced in 1.31, as they caused too
   many portability hassles.
 
-* DJGPP support added.
+** DJGPP support added.
 
-* Fix test suite portability problems.
+** Fix test suite portability problems.
 
-Changes in version 1.33, 2002-02-07:
+* Changes in version 1.33, 2002-02-07:
 
-* Fix C++ issues
+** Fix C++ issues
   Groff could not be compiled for the definition of size_t was lacking
   under some conditions.
 
-* Catch invalid @n
+** Catch invalid @n
   As is done with $n.
 
-Changes in version 1.32, 2002-01-23:
+* Changes in version 1.32, 2002-01-23:
 
-* Fix Yacc output file names
+** Fix Yacc output file names
 
-* Portability fixes
+** Portability fixes
 
-* Italian, Dutch translations
+** Italian, Dutch translations
 
-Changes in version 1.31, 2002-01-14:
+* Changes in version 1.31, 2002-01-14:
 
-* Many Bug Fixes
+** Many Bug Fixes
 
-* GNU Gettext and %expect
+** GNU Gettext and %expect
   GNU Gettext asserts 10 s/r conflicts, but there are 7.  Now that
   Bison dies on incorrect %expectations, we fear there will be
   too many bug reports for Gettext, so _for the time being_, %expect
-  does not trigger an error when the input file is named `plural.y'.
+  does not trigger an error when the input file is named "plural.y".
 
-* Use of alloca in parsers
+** Use of alloca in parsers
   If YYSTACK_USE_ALLOCA is defined to 0, then the parsers will use
   malloc exclusively.  Since 1.29, but was not NEWS'ed.
 
   alloca is used only when compiled with GCC, to avoid portability
   problems as on AIX.
 
-* yyparse now returns 2 if memory is exhausted; formerly it dumped core.
+** yyparse now returns 2 if memory is exhausted; formerly it dumped core.
 
-* When the generated parser lacks debugging code, YYDEBUG is now 0
+** When the generated parser lacks debugging code, YYDEBUG is now 0
   (as POSIX requires) instead of being undefined.
 
-* User Actions
+** User Actions
   Bison has always permitted actions such as { $$ = $1 }: it adds the
   ending semicolon.  Now if in Yacc compatibility mode, the semicolon
   is no longer output: one has to write { $$ = $1; }.
 
-* Better C++ compliance
+** Better C++ compliance
   The output parsers try to respect C++ namespaces.
   [This turned out to be a failed experiment, and it was reverted later.]
 
-* Reduced Grammars
+** Reduced Grammars
   Fixed bugs when reporting useless nonterminals.
 
-* 64 bit hosts
+** 64 bit hosts
   The parsers work properly on 64 bit hosts.
 
-* Error messages
+** Error messages
   Some calls to strerror resulted in scrambled or missing error messages.
 
-* %expect
+** %expect
   When the number of shift/reduce conflicts is correct, don't issue
   any warning.
 
-* The verbose report includes the rule line numbers.
+** The verbose report includes the rule line numbers.
 
-* Rule line numbers are fixed in traces.
+** Rule line numbers are fixed in traces.
 
-* Swedish translation
+** Swedish translation
 
-* Parse errors
+** Parse errors
   Verbose parse error messages from the parsers are better looking.
   Before: parse error: unexpected `'/'', expecting `"number"' or `'-'' or `'(''
      Now: parse error: unexpected '/', expecting "number" or '-' or '('
 
-* Fixed parser memory leaks.
+** Fixed parser memory leaks.
   When the generated parser was using malloc to extend its stacks, the
   previous allocations were not freed.
 
-* Fixed verbose output file.
+** Fixed verbose output file.
   Some newlines were missing.
   Some conflicts in state descriptions were missing.
 
-* Fixed conflict report.
+** Fixed conflict report.
   Option -v was needed to get the result.
 
-* %expect
+** %expect
   Was not used.
   Mismatches are errors, not warnings.
 
-* Fixed incorrect processing of some invalid input.
+** Fixed incorrect processing of some invalid input.
 
-* Fixed CPP guards: 9foo.h uses BISON_9FOO_H instead of 9FOO_H.
+** Fixed CPP guards: 9foo.h uses BISON_9FOO_H instead of 9FOO_H.
 
-* Fixed some typos in the documentation.
+** Fixed some typos in the documentation.
 
-* %token MY_EOF 0 is supported.
+** %token MY_EOF 0 is supported.
   Before, MY_EOF was silently renumbered as 257.
 
-* doc/refcard.tex is updated.
+** doc/refcard.tex is updated.
 
-* %output, %file-prefix, %name-prefix.
+** %output, %file-prefix, %name-prefix.
   New.
 
-* --output
-  New, aliasing `--output-file'.
+** --output
+  New, aliasing "--output-file".
 
-Changes in version 1.30, 2001-10-26:
+* Changes in version 1.30, 2001-10-26:
 
-* `--defines' and `--graph' have now an optional argument which is the
-  output file name. `-d' and `-g' do not change; they do not take any
+** "--defines" and "--graph" have now an optional argument which is the
+  output file name. "-d" and "-g" do not change; they do not take any
   argument.
 
-* `%source_extension' and `%header_extension' are removed, failed
+** "%source_extension" and "%header_extension" are removed, failed
   experiment.
 
-* Portability fixes.
+** Portability fixes.
 
-Changes in version 1.29, 2001-09-07:
+* Changes in version 1.29, 2001-09-07:
 
-* The output file does not define const, as this caused problems when used
+** The output file does not define const, as this caused problems when used
   with common autoconfiguration schemes.  If you still use ancient compilers
   that lack const, compile with the equivalent of the C compiler option
-  `-Dconst='.  autoconf's AC_C_CONST macro provides one way to do this.
+  "-Dconst=".  Autoconf's AC_C_CONST macro provides one way to do this.
 
-* Added `-g' and `--graph'.
+** Added "-g" and "--graph".
 
-* The Bison manual is now distributed under the terms of the GNU FDL.
+** The Bison manual is now distributed under the terms of the GNU FDL.
 
-* The input and the output files has automatically a similar extension.
+** The input and the output files has automatically a similar extension.
 
-* Russian translation added.
+** Russian translation added.
 
-* NLS support updated; should hopefully be less troublesome.
+** NLS support updated; should hopefully be less troublesome.
 
-* Added the old Bison reference card.
+** Added the old Bison reference card.
 
-* Added `--locations' and `%locations'.
+** Added "--locations" and "%locations".
 
-* Added `-S' and `--skeleton'.
+** Added "-S" and "--skeleton".
 
-* `%raw', `-r', `--raw' is disabled.
+** "%raw", "-r", "--raw" is disabled.
 
-* Special characters are escaped when output.  This solves the problems
+** Special characters are escaped when output.  This solves the problems
   of the #line lines with path names including backslashes.
 
-* New directives.
-  `%yacc', `%fixed_output_files', `%defines', `%no_parser', `%verbose',
-  `%debug', `%source_extension' and `%header_extension'.
+** New directives.
+  "%yacc", "%fixed_output_files", "%defines", "%no_parser", "%verbose",
+  "%debug", "%source_extension" and "%header_extension".
 
-* @$
+** @$
   Automatic location tracking.
 
-Changes in version 1.28, 1999-07-06:
+* Changes in version 1.28, 1999-07-06:
 
-* Should compile better now with K&R compilers.
+** Should compile better now with K&R compilers.
 
-* Added NLS.
+** Added NLS.
 
-* Fixed a problem with escaping the double quote character.
+** Fixed a problem with escaping the double quote character.
 
-* There is now a FAQ.
+** There is now a FAQ.
 
-Changes in version 1.27:
+* Changes in version 1.27:
 
-* The make rule which prevented bison.simple from being created on
+** The make rule which prevented bison.simple from being created on
   some systems has been fixed.
 
-Changes in version 1.26:
+* Changes in version 1.26:
 
-* Bison now uses automake.
+** Bison now uses Automake.
 
-* New mailing lists: <bug-bison@gnu.org> and <help-bison@gnu.org>.
+** New mailing lists: <bug-bison@gnu.org> and <help-bison@gnu.org>.
 
-* Token numbers now start at 257 as previously documented, not 258.
+** Token numbers now start at 257 as previously documented, not 258.
 
-* Bison honors the TMPDIR environment variable.
+** Bison honors the TMPDIR environment variable.
 
-* A couple of buffer overruns have been fixed.
+** A couple of buffer overruns have been fixed.
 
-* Problems when closing files should now be reported.
+** Problems when closing files should now be reported.
 
-* Generated parsers should now work even on operating systems which do
+** Generated parsers should now work even on operating systems which do
   not provide alloca().
 
-Changes in version 1.25, 1995-10-16:
+* Changes in version 1.25, 1995-10-16:
 
-* Errors in the input grammar are not fatal; Bison keeps reading
+** Errors in the input grammar are not fatal; Bison keeps reading
 the grammar file, and reports all the errors found in it.
 
-* Tokens can now be specified as multiple-character strings: for
+** Tokens can now be specified as multiple-character strings: for
 example, you could use "<=" for a token which looks like <=, instead
-of chosing a name like LESSEQ.
+of choosing a name like LESSEQ.
 
-* The %token_table declaration says to write a table of tokens (names
+** The %token_table declaration says to write a table of tokens (names
 and numbers) into the parser file.  The yylex function can use this
 table to recognize multiple-character string tokens, or for other
 purposes.
 
-* The %no_lines declaration says not to generate any #line preprocessor
+** The %no_lines declaration says not to generate any #line preprocessor
 directives in the parser file.
 
-* The %raw declaration says to use internal Bison token numbers, not
+** The %raw declaration says to use internal Bison token numbers, not
 Yacc-compatible token numbers, when token names are defined as macros.
 
-* The --no-parser option produces the parser tables without including
+** The --no-parser option produces the parser tables without including
 the parser engine; a project can now use its own parser engine.
 The actions go into a separate file called NAME.act, in the form of
 a switch statement body.
 
-Changes in version 1.23:
+* Changes in version 1.23:
 
 The user can define YYPARSE_PARAM as the name of an argument to be
 passed into yyparse.  The argument should have type void *.  It should
@@ -697,36 +2000,54 @@
 
 Line numbers in output file corrected.
 
-Changes in version 1.22:
+* Changes in version 1.22:
 
 --help option added.
 
-Changes in version 1.20:
+* Changes in version 1.20:
 
 Output file does not redefine const for C++.
 
-Local Variables:
-mode: outline
-End:
-
 -----
 
-Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-2004, 2005, 2006 Free Software Foundation, Inc.
+Copyright (C) 1995-2012 Free Software Foundation, Inc.
 
-This file is part of Bison, the GNU Compiler Compiler.
+This file is part of Bison, the GNU Parser Generator.
 
-Bison is free software; you can redistribute it and/or modify
+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.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
-Bison is distributed in the hope that it will be useful,
+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 autoconf; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ LocalWords:  yacc YYBACKUP glr GCC lalr ArrayIndexOutOfBoundsException nullptr
+ LocalWords:  cplusplus liby rpl fprintf mfcalc Wyacc stmt cond expr mk sym lr
+ LocalWords:  IELR ielr Lookahead YYERROR nonassoc LALR's api lookaheads yychar
+ LocalWords:  destructor lookahead YYRHSLOC YYLLOC Rhs ifndef YYFAIL cpp sr rr
+ LocalWords:  preprocessor initializer Wno Wnone Werror FreeBSD prec livelocks
+ LocalWords:  Solaris AIX UX RHEL Tru LHS gcc's Wundef YYENABLE NLS YYLTYPE VCG
+ LocalWords:  yyerror cpp's Wunused yylval yylloc prepend yyparse yylex yypush
+ LocalWords:  Graphviz xml nonterminals midrule destructor's YYSTYPE typedef ly
+ LocalWords:  CHR chr printf stdout namespace preprocessing enum pre include's
+ LocalWords:  YYRECOVERING nonfree destructors YYABORT YYACCEPT params enums de
+ LocalWords:  struct yystype DJGPP lex param Haible NUM alloca YYSTACK NUL goto
+ LocalWords:  YYMAXDEPTH Unescaped UCNs YYLTYPE's yyltype typedefs inline Yaccs
+ LocalWords:  Heriyanto Reenable dprec Hilfinger Eggert MYEOF Folle Menezes EOF
+ LocalWords:  Lackovic define's itemset Groff Gettext malloc NEWS'ed YYDEBUG YY
+ LocalWords:  namespaces strerror const autoconfiguration Dconst Autoconf's FDL
+ LocalWords:  Automake TMPDIR LESSEQ ylwrap endif yydebug YYTOKEN YYLSP ival hh
+ LocalWords:  extern YYTOKENTYPE TOKENTYPE yytokentype tokentype STYPE lval pdf
+ LocalWords:  lang yyoutput dvi html ps POSIX lvalp llocp calc yyo fval Wmaybe
+ LocalWords:  yyvsp pragmas noreturn java's
+
+Local Variables:
+mode: outline
+fill-column: 76
+End:
diff --git a/NOTICE b/NOTICE
index a8ab5b5..94a9ed0 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,287 +1,626 @@
-Copyright (C) 1992-2006 Free Software Foundation, Inc.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
 
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-			    Preamble
+                            Preamble
 
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
 your programs, too.
 
   When we speak of free software, we are referring to freedom, not
 price.  Our General Public Licenses are designed to make sure that you
 have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
 
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
 
   For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
 
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
 
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
 
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
 
   The precise terms and conditions for copying, distribution and
 modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
+                       TERMS AND CONDITIONS
 
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
+  0. Definitions.
 
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
+  "This License" refers to version 3 of the GNU General Public License.
 
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
 
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
 
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
 
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
 
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
 
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
 
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
 
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
+  1. Source Code.
 
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
 
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
 
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
 
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
 
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
 
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
+  The Corresponding Source for a work in source code form is that
+same work.
 
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
 this License.
 
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
 otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
 
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
+  13. Use with the GNU Affero General Public License.
 
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
 
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
+  14. Revised Versions of this License.
 
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
 be similar in spirit to the present version, but may differ in detail to
 address new problems or concerns.
 
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
 
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
 
-			    NO WARRANTY
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
 
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
+  15. Disclaimer of Warranty.
 
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
@@ -289,15 +628,15 @@
 
   To do so, attach the following notices to the program.  It is safest
 to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
+state the exclusion of warranty; and each file should have at least
 the "copyright" line and a pointer to where the full notice is found.
 
     <one line to give the program's name and a brief idea of what it does.>
     Copyright (C) <year>  <name of author>
 
-    This program is free software; you can redistribute it and/or modify
+    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 of the License, or
+    the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
 
     This program is distributed in the hope that it will be useful,
@@ -306,37 +645,30 @@
     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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 Also add information on how to contact you by electronic and paper mail.
 
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
 
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.
 
 The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
 
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
 
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/OChangeLog b/OChangeLog
deleted file mode 100644
index 5ae60b9..0000000
--- a/OChangeLog
+++ /dev/null
@@ -1,1500 +0,0 @@
-1998-01-04  J.J. van der Heijden  <J.J.vanderHeijden@student.utwente.nl>
-
-	* src/files.c (openfiles) [_WIN32 && !__CYGWIN32__]: Use TEMP or
-	Temp to find a temporary directory, if possible.  Do not unlink
-	files while they are open.
-
-1997-08-25  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/reader.c (stack_offset;): Change some warni to warns.
-
-	* src/lex.c (literalchar): Use warns, not warni.
-
-1997-06-28  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/bison.simple: Add a Bison version comment.
-
-	* Makefile.in (bison_version): New variable.
-	(dist): Use that variable.
-	(bison.s1): Substitute the Bison version into bison.simple.
-
-	* src/main.c (fatal, warn, berror): Use program_name.
-
-1997-06-18  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* Makefile.in: new.h renamed to alloc.h.
-	* src/*.c: src/new.h renamed to src/alloc.h.
-
-	* src/alloc.h: Renamed from src/new.h.
-
-1997-06-15  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/main.c (fatal, warn, berror): Make error messages standard.
-	(toomany): Improve error message text.
-
-1997-05-24  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/lex.c (literalchar): Fix the code for escaping \, " and '.
-
-1997-05-23  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/lex.c (lex): Avoid trouble when there are many chars
-	to discard in a char literal with just several chars in it.
-
-1997-05-17  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/bison.simple: Use malloc, if using alloca is troublesome.
-	(YYSTACK_USE_ALLOCA): New flag macro.
-	Define it for some systems and compilers.
-	(YYSTACK_ALLOC): New macro.
-	(yyparse): Use YYSTACK_ALLOC to allocate stack.
-	If it was malloc'd, free it.
-
-1997-05-02  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/bison.simple [_AIX]: Don't include malloc.h.
-
-1997-04-23  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/bison.simple (alloca) [__hpux]: Always define as
-	__builtin_alloca.
-
-1997-04-22  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/bison.simple (__yy_memcpy): Declare arg `count' as unsigned
-	int.
-	(yyparse): Cast third arg to __yy_memcpy to unsigned int.
-
-	* src/bison.simple (alloca) [__hpux]: Include alloca.h (right for
-	HPUX 10) instead of declaring alloca (right for HPUX 9).
-
-1997-01-02  Richard Stallman  <rms@ethanol.gnu.ai.mit.edu>
-
-	* src/allocate.c [__STDC__ or _MSC_VER]:
-	Declare calloc and realloc to return void *.
-
-	* Makefile.in (dist): Explicitly check for symlinks, and copy them.
-
-1996-12-17  Paul Eggert  <eggert@twinsun.com>
-
-	* src/bison.simple (yyparse): If __GNUC__ and YYPARSE_PARAM are
-	both defined, declare yyparse to have a void * argument.
-
-1996-12-17  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/system.h [_MSC_VER]: Include stdlib.h and process.h.
-	[_MSC_VER] (getpid): Define as macro--translate it to _getpid.
-
-	* src/reduce.c (nbits): Add some casts.
-
-	* src/main.c (main): Return FAILURE as a value.
-	(printable_version): Declare arg as int, not char.
-
-	* src/files.c [_MSC_VER] (XPFILE, XPFILE1): Define, if not already
-	defined.
-
-1996-12-16  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/main.c (printable_version): Use type `int' for the arg.
-
-1996-08-12  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/bison.simple: Test _MSDOS as well as _MSDOS_.
-
-1996-07-31  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/bison.simple [__sun && __i386]: Include alloca.h.
-
-1996-07-30  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* src/bison.simple: Test _MSDOS_, not MSDOS.
-
-1996-06-01  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-
-	* All files: Insert `_' macro around many string constants.
-
-	* src/system.h [HAVE_LOCALE_H]: Include locale.h.
-	[! HAVE_LOCALE_H] (setlocale): Define as no-op.
-	[ENABLE_NLS]: Include libintl.h.
-	[ENABLE_NLS] (gettext): Define.
-	[! ENABLE_NLS] (bintextdomain, textdomain, _): Consolation definitions.
-	(N_, PACKAGE, LOCALEDIR): New macros.
-
-	* src/main.c (main): Call setlocale, bindtextdomain and textdomain.
-
-	* POTFILES.in: New file.
-
-	* Makefile.in (allocate.o): Define target explicitly.
-
-1996-06-01  Jim Meyering  <meyering@na-net.ornl.gov>
-
-	* Makefile.in (CFLAGS): Set to @CFLAGS@.
-	(LDFLAGS): Set to @LDFLAGS@.
-	(configure): Run autoconf only if preceding `cd' succeeds.
-	(src/bison.s1): Redirect output to temporary file then move the
-	temporary to the target, rather than redirecting directly to
-	src/bison.s1.
-	(clean): Remove config.status and config.log.
-	(distclean): Don't remove config.status here.
-
-1996-05-12  Jim Meyering  <meyering@na-net.ornl.gov>
-
-	* src/bison.simple (__yy_memcpy) [__cplusplus]: Reorder declarations
- 	of variables f and t.
-
-1996-05-11  Richard Stallman  <rms@delasyd.gnu.ai.mit.edu>
-
-	* Version 1.25 released.
-
-	* Makefile.in (dist): Don't use $(srcdir).
-
-	* src/bison.simple (__yy_memcpy): Really reorder the args, as was
-	supposedly done on Feb 14 1995.
-	(yyparse): Calls changed accordingly.
-
-1996-01-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/output.c (output_rule_data): Test YYERROR_VERBOSE in the
-	conditional around the definition of ttyname.
-
-1995-12-28  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Fix line numbers in #line commands.
-
-1995-12-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (YYPARSE_PARAM_DECL): In C++, make it always
-	null.
-	(YYPARSE_PARAM_ARG): New macro.
-	(yyparse): Use YYPARSE_PARAM_ARG.
-
-1995-10-15  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/version.c: Version now 1.25.
-
-	* src/main.c (warn): Set `failure'.
-
-1995-08-01   Wilfred J. Hansen  <wjh+@cmu.edu>
-
-	* src/bison.cld, src/getargs.c, src/vmsgetargs.c: Added -n, -k,
-	and -raw switches.
-	(noparserflag, toknumflag, rawtoknumflag): New variables.
-
-	* src/conflicts.c (resolve_sr_conflict): Remove use of alloca.
-
-	* src/files.c (openfiles, open_extra_files, done):  Add faction flag
-	and actfile file.  Handle noparserflag.  Both for -n switch.
-
-	* src/lex.c: Include getopt.h.  Add some extern decls.
-	(safegetc): New function to deal with EOF gracefully.
-	(literalchar); new function to deal with reading \ escapes.
-	(lex): Use literalchar.
-	(lex): Implemented "..." tokens.
-	(literalchar, lex, parse_percent_token): Made tokenbuffer
-	always contain the token.  This includes growing the token
-	buffer while reading an integer.
-	(parse_percent_token): Replaced if-else statement with percent_table.
-	(parse_percent_token): Added % declarations as another
-	way to specify the flags -n, -l, and -r.  Also added hooks for
-	-d, -k, -y, -v, -t, -p, -b, -o, but implementation requires
-	major changes to src/files.c.
-	(lex) Retain in the incoming stream a character following
-	an incorrect '/'.
-	(skip_white_space, lex):  Revised most error messages
-	and changed fatal to warn to avoid aborting.
-	(percent_table):  Added %thong declarations.
-
-	* src/lex.h: Added THONG and NOOP for alias processing.
-	Added SETOPT for the new code that allows setting options with %flags.
-
-	* src/main.c (main): If reader sees an error, don't process the
-	grammar.
-	(fatals): Updated to not use VARARGS1.
-	(printable_version, int_to_string, warn, warni, warns, warnss)
-	(warnsss): New error reporting functions.  Avoid abort for error.
-
-	* src/output.c (output_headers, output_trailers, output, output_gram)
-	(output_rule_data): Implement noparserflag variable.
-	Implement toknumflag variable.
-	(output): Call reader_output_yylsp to output LTYPESTR.
-
-	* src/reader.c (reader_output_yylsp): New function.
-	(readgram): Use `#if 0' around code that accepted %command inside
-	grammar rules: The documentation doesn't allow it, and it will
-	fail since the %command processors scan for the next %.
-	(parse_token_decl): Extended the %token declaration to allow a
-	multi-character symbol as an alias.
-	(parse_thong_decl): New function.
-	(read_declarations): Added %thong declarations.
-	(read_declarations): Handle NOOP to deal with allowing %
-	declarations as another means to specify the flags.
-	(readgram): Allow %prec prior to semantics embedded in a rule.
-	(skip_to_char, read_declarations, copy_definition)
-	(parse_token_decl, parse_start_decl, parse_type_decl)
-	(parse_assoc_decl, parse_union_decl, parse_expect_decl)
-	(get_type_name, copy_guard, copy_action, readgram)
-	(get_type, packsymbols): Revised most error messages.  Changed
-	`fatal' to `warnxxx' to avoid aborting for error.  Revised and use
-	multiple warnxxx functions to avoid using VARARGS1.
-	(read_declarations): Improve the error message for an invalid
-	character.  Do not abort.
-	(read_declarations, copy_guard, copy_action): Use
-	printable_version to avoid unprintable characters in printed
-	output.
-	(parse_expect_decl): Error if argument to %expect exceeds 10
-	digits.
-	(parse_token_decl, parse_assoc_decl, parse_type_decl, get_type):
-	Allow the type of a non-terminal can be given more than once, as
-	long as all specifications give the same type.
-
-	* src/reduce.c (reduce_grammar): Revise an error message.
-	(print_notices): Remove final `.' from error message.
-
-	* src/symtab.h (SALIAS): New #define for adding aliases to %token.
-	(struct bucket): Added `alias' field.
-
-1995-05-03  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Change distribution terms.
-
-	* src/version.c: Version now 1.23.  No, 1.24.
-
-1995-02-23  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/files.c: Test __VMS_POSIX as well as VMS.
-
-1995-02-14  Jim Meyering <meyering@comco.com>
-
-	* src/bison.simple (__yy_memcpy): Renamed from __yy_bcopy to avoid
-	confusion.  Reverse FROM and TO arguments to be consistent with
-	those of memcpy.
-
-1994-11-10  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>
-
-	* Makefile.in (DISTFILES): Include install-sh, not install.sh.
-	Include NEWS.
-
-	* configure.in: Update to Autoconf v2 macro names.
-
-1994-10-04  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>
-
-	* Makefile.in (prefix, exec_prefix): Let configure set them.
-
-1994-09-28  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>
-
-	* Makefile.in: Set datadir to $(prefix)/share.
-
-1994-07-12  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/reader.c (reader): Rename undefined-token token to
-	`$undefined.'.
-
-1994-05-05  David J. MacKenzie  <djm@nutrimat.gnu.ai.mit.edu>
-
-	* Makefile.in (DISTFILES): Add install.sh.
-	(install): Remove chmod commands.
-
-1994-03-26  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Fix #line commands.
-
-1994-03-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/conflicts.c (print_reductions): Increment both fp1 and fp2
-	while printing reductions in multi-rule case.
-
-1994-01-02  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (LDFLAGS): Make it empty by default.
-	(bison): Use CFLAGS.
-
-1993-11-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (YYLEX): Take notice of YYLEX_PARAM.
-
-1993-10-18  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (YYPARSE_PARAM_DECL): Always define this.
-
-1993-10-14  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (yyparse): Support YYPARSE_PARAM.
-
-1993-09-13  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* Makefile.in (check): New target.
-
-1993-09-10  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/conflicts.c (alloca): #undef before defining.
-
-	* src/system.h (bcopy): Don't define if already defined.
-
-1993-09-06  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* Version 1.22 released.
-
-	* mkinstalldirs: New file.
-
-	* Makefile.in (dist): Use .gz for extension, not .z.
-	(DISTFILES): New variable.
-	(dist): Use it instead of explicit file list.
-	Try to link each file separately, then copy file if ln fails.
-	(installdirs): Use mkinstalldirs script.
-
-1993-07-29  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
-
-	* Makefile.in (config.status): Run config.status --recheck, not
-	configure, to get the right args passed.
-
-1993-07-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (yyparse): Init yychar1 to avoid warning.
-
-1993-07-04  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (yyparse): Don't set yyval when yylen is 0.
-
-1993-06-26  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
-
-	* src/getargs.c (getargs): Exit after printing the version number.
-	Add --help and -h options.
-	(usage): New function.
-
-1993-06-25  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/getargs.c (longopts): Allow `output' as an alternative.
-
-1993-06-16  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (yyparse): Conditionalize the entire call to
-	yyoverflow, not just two arguments in it.
-
-1993-06-03  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple [__hpux] (alloca): Don't specify arg types.
-
-1993-05-07  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* Makefile.in (install): Depend on `uninstall' and `installdirs'.
-	(installdirs): New target.
-
-1993-04-28  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* src/reader.c:  Remove declaration of atoi.
-
-1993-04-23  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* src/new.h [!__STDC__] (FREE): Check x != 0.
-	Make expr to call `free' evaluate to 0.
-
-1993-04-20  David J. MacKenzie  <djm@kropotkin.gnu.ai.mit.edu>
-
-	* src/files.c [MSDOS]: Use xmalloc, not malloc.
-	* src/allocate.c (xmalloc): Renamed from mallocate.  Remove old
-	wrapper.
-	* src/conflicts.c, src/symtab.c, src/files.c, src/LR0.c,
-	src/new.h: Change callers.
-	* src/allocate.c (xrealloc): New function.
-	* src/new.h: Declare it.
-	* src/lex.c, src/reader.c: Use it.
-
-1993-04-18  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* Version 1.21 released.
-
-	* src/reader.c : Don't declare `realloc'.
-
-	* Makefile.in (bison.s1): use `rm -f' since it's quieter.
-	(dist): make gzipped tar file.
-
-1993-04-16  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* Makefile.in (Makefile, config.status, configure): New targets.
-
-1993-04-15  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/main.c: Don't declare `abort'.
-
-	* src/files.c: Don't declare `exit'.
-
-1993-04-15  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* configure.in: Add AC_CONST.
-
-1993-04-14  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (all): Depend on bison.s1.
-
-1993-04-13  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Version 1.20 released.
-
-1993-03-24  Richard Stallman  <rms@wookumz.gnu.ai.mit.edu>
-
-	* src/output.c (output_headers): Rename yynerrs if -p.
-
-1993-03-18  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* src/system.h: Don't try to include stdlib.h unless HAVE_STDLIB_H
-	is defined.
-
-	* configure.in: Check for stdlib.h.
-
-1993-03-17  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple [__hpux, not __GNUC__]: Declare alloca.
-	(yyparse): When printing the expected token types for an error,
-	Avoid negative indexes in yycheck and yytname.
-
-1993-03-13  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (files.o, .c.o): Put CPPFLAGS and CFLAGS last.
-
-1993-03-01  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Test __sgi like __sparc.
-
-1993-02-17  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/conflicts.c (resolve_sr_conflict): Add extra parens in
-	alloca call.
-
-	* src/bison.simple [__GNUC__] (yyparse): Declare with prototype.
-
-1993-01-15  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/conflicts.c (print_reduction): Near end, increment fp2 when
-	mask recycles.
-
-1993-01-13  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (bison.s1): New target.  Modifies bison.simple.
-	(install): Install bison.s1, without changing it.
-	(clean): Delete bison.s1.
-
-1993-01-04  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/reader.c (reader): Put Bison version in comment in output
-	file.
-
-1992-12-22  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/files.c (openfiles): Use .output, not .out, for outfile,
-	regardless of spec_name_prefix.
-
-1992-12-15  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/output.c (output_gram): Include yyrhs in the same #if as
-	yyprhs.
-
-1992-12-15  Noah Friedman  <friedman@nutrimat.gnu.ai.mit.edu>
-
-	* src/output.c (output): output directives checking for
-	__cplusplus as well as __STDC__ to determine when to define
-	"const" as an empty token.  (Patch from Wolfgang Glunz
-	<wogl@sun11a.zfe.siemens.de>)
-
-1992-12-08  David J. MacKenzie  <djm@kropotkin.gnu.ai.mit.edu>
-
-	* src/system.h, src/conflicts.c: Replace USG with HAVE_STRING_H
-	and HAVE_MEMORY_H.
-
-1992-11-21  David J. MacKenzie  <djm@goldman.gnu.ai.mit.edu>
-
-	* Makefile.in: Set and use $(MAKEINFO).
-
-1992-11-20  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/files.c (done) [MSDOS]: Delete the tmpdefsfile with the
-	rest.
-
-1992-10-08  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (dist): Put configure.bat in the distribution.
-
-1992-10-01  David J. MacKenzie  <djm@goldman.gnu.ai.mit.edu>
-
-	* Makefile.in (install): cd to $(srcdir) before installing info
-	files.
-
-1992-09-30  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (files.o): Supply $(DEFS), and $(CPPFLAGS).
-
-1992-09-25  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Version 1.19 released.
-
-	* src/reader.c (parse_union_decl): Fix ending of C++ comment;
-	don't lose the char after the newline.
-
-	* configure.bat: New file.
-
-1992-09-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/conflicts.c: Check for using alloca.h as getopt.c does.
-
-1992-09-06  Karl Berry  <karl@hayley>
-
-	* src/files.c (openfiles): open `fdefines' after we have assigned
-	a name to `tmpdefsfile', and only if `definesflag' is set.
-	(done): only create the real .tab.h file if `definesflag' is set.
-	* src/reader.c (packsymbols): don't close `fdefines' here.
-
-1992-09-05  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/files.c (openfiles): Open fdefines as temp file, like
-	ftable.
-	(done): Copy temp defines file to real one, like main output file.
-
-1992-08-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (dist): Don't release mergedir.awk
-	(install): Use sed, not awk.  Don't depend on mergedir.awk.
-	* mergedir.awk: File effectively deleted.
-
-1992-07-29  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Test __sparc along with __sparc__.
-
-1992-07-11  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/lex.c (skip_white_space): Count \n just once at end of c++
-	comment.
-
-1992-06-26  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Comment fix; #line command updated.
-
-1992-06-24  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (install): Specify full new file name for the
-	executable.
-
-1992-06-22  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (dist): Include bison.rnh in distribution.
-
-Sun Jun 21 22:42:13 1992 Eric Youngdale <youngdale@v6550c.nrl.navy.mil>
-
-	Clean up rough edges in VMS port of bison, add support for
-	remaining command line options.
-
-	* src/bison.cld: Add /version, /yacc, /file_prefix, and
-	/name_prefix switches.
-
-	* src/build.com: General cleanup: add logic to automatically sense
-	which C compiler is present; add code to cwd to the directory that
-	contains bison sources; do not define XPFILE, XPFILE1
-	(correct defaults are applied in src/file.c).
-
-	* src/files.c: Append _tab, not .tab when using /file_prefix under
-	VMS.
-
-	* src/system.h: Include string.h instead of strings.h (a la USG).
-
-	* src/vmsgetargs.c: Add support for all switches added to
-	src/bison.cld.
-
-1992-06-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (install): Always specify new file name for install.
-	Redirect awk output to temp file and install that.
-
-1992-05-27  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (yyparse): Make yybackup and yyerrlab1 always
-	be used.
-
-1992-05-22  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (dist): Depend on bison.info
-	(bison.info): Delete spurious <.
-
-1992-05-17  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (.c.o): New rule.  Use $(DEFS) directly.
-	(CFLAGS): Use just -g by default.
-	(CDEBUG): Variable deleted.
-
-1992-05-07  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/reader.c (copy_guard): Fix typo skipping comment.
-
-1992-05-04  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Version 1.18.
-
-	* src/getargs.c (getargs): Change '0' to 0 in case for long
-	options.
-
-1992-04-19  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/reader.c (packsymbols): Handle -p when declaring yylval.
-
-1992-04-18  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/output.c (output_gram): Output #endif properly at end of
-	decl.
-
-1992-03-30  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Version 1.17.
-
-	* Makefile.in (clean): Don't delete configuration files or TAGS.
-	(distclean): New target; do delete those.
-
-1992-03-28  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/output.c (output_gram): Conditionalize yyprhs on YYDEBUG.
-
-	* src/LR0.c (augment_automaton): If copying sp->shifts to insert
-	new shift, handle case of inserting at end.
-
-1992-03-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/lex.c (skip_white_space): Handle C++ comments.
-	* src/reader.c (copy_definition, parse_union_decl, copy_guard):
-	(copy_action): Likewise.
-
-1992-03-08  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (YYPOPSTACK): Fix typo.
-
-1992-02-29  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (install): Install bison.info* files one by one.
-
-1992-02-28  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
-
-	* src/bison.1: Document long options as starting with `--', not
-	`+'.
-
-1992-02-01  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/getargs.c (getargs): Accept value 0 from getopt_long.
-
-1992-01-30  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in (mostlyclean): Renamed from `clean'.
-	(clean): Renamed from 'distclean'.  Dep on mostlyclean, not
-	realclean.
-	(realclean): Dep on clean.
-
-1992-01-27  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Use malloc, not xmalloc, and handle failure
-	explicitly.
-
-1992-01-26  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/conflicts.c (total_conflicts): Delete unused arg to fprintf.
-
-1992-01-21  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Version 1.16.
-
-1992-01-06  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile (distclean): Depend on clean, not realclean.  Don't rm
-	TAGS.
-	(realclean): rm TAGS here.
-
-	* src/symtab.c (free_symtab): Don't free the type names.
-
-1991-12-29  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/machine.h: MSDOS has 32-bit ints if __GO32__.
-
-1991-12-25  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
-
-	* src/bison.simple [_AIX]: Indent `#pragma alloca', so old C
-	compilers don't choke on it.
-
-1991-12-23  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/getopt.c, src/getopt1.c, src/getopt.h: Link them to standard
-	source location.
-	* src/alloca.c: Likewise.
-	* Makefile.in (dist): Copy those files from current dir.
-
-	* src/getargs.c: Update usage message.
-
-	* src/LR0.c (augment_automaton): Put new shift in proper order.
-
-1991-12-20  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/conflicts.c: Use memcpy if ANSI C library.
-
-	* src/closure.c (set_fderives): Delete redundant assignment to
-	vrow.
-
-	* src/closure.c (print_firsts): Fix bounds and offset checking
-	tags.
-
-	* src/closure.c (tags): Declare just once at start of file.
-
-	* src/LR0.c (allocate_itemsets): Eliminate unused var max.
-	(augment_automaton): Test sp is non-null.
-
-	* src/lalr.c (initialize_LA): Make the vectors at least 1 element
-	long.
-
-	* src/reader.c (readgram): Remove separate YYSTYPE default for
-	MSDOS.
-
-1991-12-18  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/print.c (print_grammar): Don't print disabled rules.
-
-1991-12-17  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/lex.c (lex): Parse hex escapes properly.
-	Handle \v when filling token_buffer.
-
-	* src/lex.c: Include new.h.
-	(token_buffer): Change to a pointer.
-	(init_lex): Allocate initial buffer.
-	(grow_token_buffer): New function.
-	(lex, parse_percent_token): Use that.
-
-	* src/reader.c (read_declarations): Call open_extra_files just
-	once.
-	(parse_token_decl): Don't free previous typename value.  Don't
-	increment nvars if symbol is already a nonterminal.
-	(parse_union_decl): Catch unmatched close-brace.
-	(parse_expect_decl): Null-terminate buffer.
-	(copy_guard): Set brace_flag for {, not for }.
-
-	* src/reader.c: Fix %% in calls to fatal.
-
-	* src/reader.c (token_buffer): Just one extern decl, at top level.
-	Declare as pointer.
-
-	* src/symtab.c (free_symtab): Free type_name fields.  Free symtab
-	itself.
-
-1991-11-25  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Handle alloca for AIX.
-
-	* Makefile.in (mandir): Compute default using manext.
-
-1991-11-02  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
-
-	* Update all files to GPL version 2.
-
-1991-09-06  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple (__yy_bcopy): Use builtin if GCC version 2.
-
-1991-08-26  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/reader.c (parse_assoc_decl): Error if same symbol gets two
-	precs.
-
-1991-08-26  David J. MacKenzie  <djm@pogo.gnu.ai.mit.edu>
-
-	* Makefile.in, configure: Only put $< in Makefile if using VPATH,
-	because older makes don't understand it.
-
-1991-08-23  David J. MacKenzie  <djm@apple-gunkies>
-
-	* src/conflicts.c [_AIX]: #pragma alloca.
-	* src/reduce.c: Don't define TRUE and FALSE if already defined.
-
-1991-08-12  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile.in: Add deps on system.h.
-	(install): Add some deps.
-
-1991-08-02  David J. MacKenzie  <djm@apple-gunkies>
-
-	* Makefile.in (dist): Include texinfo.tex.
-
-	* configure: Create config.status.  Remove it and Makefile if
-	interrupted while creating them.
-
-1991-08-01  David J. MacKenzie  <djm@apple-gunkies>
-
-	* configure: Check for +srcdir etc. arg and look for
-	Makefile.in in that directory.  Set VPATH if srcdir is not `.'.
-	* Makefile.in (prefix): Renamed from DESTDIR.
-
-1991-07-31  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/print.c (print_grammar): Make output prettier.  Break lines.
-
-1991-07-30  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/print.c (print_grammar): New function.
-	(verbose): Call it instead of printing token names here.
-
-1991-07-22  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/vmsgetargs.c (spec_name_prefix, spec_file_prefix): Define
-	variables.
-
-1991-07-10  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
-
-	* configure, Makefile.in: $(INSTALLPROG) -> $(INSTALL),
-	$(INSTALLTEXT) -> $(INSTALLDATA).
-
-1991-07-09  David J. MacKenzie  <djm@wookumz.gnu.ai.mit.edu>
-
-	* src/bison.simple: Don't include malloc.h if __TURBOC__.
-
-1991-07-06  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>
-
-	* Replace Makefile with configure and Makefile.in.  Update README
-	with current compilation instructions.
-
-1991-07-01  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/reader.c (reader): Make the output define YYBISON.
-
-1991-06-20  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>
-
-	* Makefile (MANDIR, MANEXT): Install man page in
-	/usr/local/man/man1/bison.1 by default, instead of
-	/usr/man/manl/bison.l, for consistency with other GNU programs.
-	* Makefile: Rename BINDIR et al. to lowercase to conform to
-	GNU coding standards.
-	(install): Make man page non-executable.
-
-1991-05-31  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile (bison.info): New target.
-	(realclean): New target.
-
-1991-05-02  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/bison.simple: Use YYPRINT to print a token, if it's defined.
-
-1991-04-29  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/lalr.c (transpose): Rename R to R_arg.
-	(initialize_LA): Avoid shadowing variable j.
-
-	* src/reader.c (packsymbols): Avoid shadowing variable i.
-
-	* src/files.c: Declare exit and perror.
-
-	* src/machine.h: Define MAXSHORT and MINSHORT for the eta-10.
-
-1991-04-02  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* src/allocate.c (mallocate): Always allocate at least one byte.
-
-1991-03-19  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
-
-	* Makefile (dist): Put alloca.c into distribution.
-
-1991-03-06  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/print.c (print_actions): Nicer output for final states.
-
-1991-02-21  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/output.c (output_rule_data): Break lines in yytline based on
-	hpos.
-
-1991-02-07  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/bison.simple (yyparse): Move decl of yylsa before use.
-
-1991-01-15  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* Version 1.14.
-
-	* src/output.c (output_rule_data): Handle NULL in tags[i].
-
-1991-01-11  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/bison.simple: On MSDOS, include malloc.h.
-
-1990-12-29  David J. MacKenzie  <djm@wookumz.ai.mit.edu>
-
-	* src/files.c: Use `mallocate' instead of `xmalloc' so no extra
-	decl is needed.
-
-1990-12-19  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/reader.c (readgram): Alternate YYSTYPE defn for MSDOS.
-	* src/files.c [MSDOS]: Declare xmalloc.
-
-1990-12-13  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/output.c (output_rule_data): Put all symbols in yytname.
-
-	* src/bison.simple (yyparse): Delete extra fprintf arg
-	when printing a result of reduction.
-
-1990-12-10  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/reader.c (packsymbols): Don't declare yylval if pure_parser.
-
-1990-10-30  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* Version 1.12.
-
-	* src/LR0.c (augment_automaton): Fix bugs adding sp2 to chain of
-	shifts.
-
-1990-10-23  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/bison.simple: Don't define alloca if already defined.
-
-1990-10-21  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/getopt.c: On VMS, use string.h.
-
-	* src/main.c (main): Return type int.
-
-1990-09-10  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/output.c (output_headers): Output macro defs for -p.
-
-	* src/reader.c (readgram): Handle consecutive actions.
-
-	* src/getargs.c (getargs): Rename -a to -p.
-	* src/files.c (openfiles): Change names used for -b.
-
-1990-08-27  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/reduce.c (reduce_grammar_tables): Don't map rlhs of disabled
-	rule.
-
-1990-08-26  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/closure.c (print_firsts, print_fderives): Use BITISSET to
-	test bits.
-
-1990-08-23  Richard Stallman  <rms@mole.ai.mit.edu>
-
-	* src/closure.c (print_firsts): vrowsize => varsetsize.
-	(print_fderives): rrowsize => rulesetsize.
-
-1990-08-10  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple (alloca): Don't define if already defined.
-	(__yy_bcopy): Alternate definition for C++.
-
-1990-07-11  David J. MacKenzie  <djm@albert.ai.mit.edu>
-
-	* src/getargs.c (getargs): Mention +yacc in usage message.
-
-1990-07-10  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (parse_token_decl, copy_action): Set
-	value_components_used if appropriate.
-	(readgram): Inhibit output of YYSTYPE definition in that case.
-
-1990-06-30  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/output.c (output_parser): Define YYPURE if pure, and not
-	otherwise.  Don't define YYIMPURE.
-	* src/bison.simple: Adjust conditionals accordingly.
-	* src/bison.simple (YYLEX): If locations not in use, don't pass
-	&yylloc.
-
-1990-06-28  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/getargs.c (longopts): Add `yacc'.
-
-1990-06-28  David J. MacKenzie  <djm@apple-gunkies>
-
-	* src/getargs.c (getargs): Add long options.
-	* Makefile: Link with getopt1.o and add getopt1.c and getopt.h to
-	dist.
-
-	* Move version number and description back into version.c from
-	Makefile and getargs.c.
-	* Makefile (dist): Extract version number from version.c.
-
-1990-06-26  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/output.c (output): Always call output_gram.
-	* src/bison.simple (yyparse): Print rhs and lhs symbols of
-	reduction rule.
-
-1990-06-21  David J. MacKenzie  <djm@albert.ai.mit.edu>
-
-	* src/main.c: New global var `program_name' to hold argv[0] for
-	error messages.
-	* src/allocate.c, src/files.c, src/getargs.c, src/reader.c: Use
-	`program_name' in messages instead of hardcoded "bison".
-
-1990-06-20  David J. MacKenzie  <djm@albert.ai.mit.edu>
-
-	* Makefile: Specify Bison version here.  Add rule to pass it to
-	version.c.  Encode it in distribution directory and tar file names.
-	* src/version.c: Use version number from Makefile.
-	* src/getargs.c (getargs): Print additional text that used to be
-	part of version_string in version.c.  Use -V instead of -version
-	to print Bison version info.  Print a usage message and exit if
-	given an invalid option.
-
-1990-06-19  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple: Fix a #line.
-
-	* Makefile (INSTALL): New parameter.
-	(install): Use that.
-	(CFLAGS): Move definition to top.
-
-1990-06-17  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (parse_type_decl): Ignore semicolon.
-	Remove excess % from error messages.
-
-1990-06-16  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Version 1.11.
-
-	* Makefile (install): Ensure installed files readable.
-
-Tue Jun 12 12:50:56 EDT 1990 Jay Fenlason <hack@ai.mit.edu>
-
-	* src/getargs.c: Declare spec_file_prefix
-
-	* src/lex.c (lex): \a is '\007' instead of '007'
-
-	* src/reader.c: include machine.h
-
-	* src/files.h: Declare extern spec_name_prefix.
-
-	Trivial patch from Thorsten Ohl <td12@ddagsi3.bitnet>
-
-1990-05-31  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Version 1.10.
-
-	* src/bison.simple (YYBACKUP, YYRECOVERING): New macros.
-	(YYINITDEPTH): This is what used to be YYMAXDEPTH.
-	(YYMAXDEPTH): This is what used to be YYMAXLIMIT.
-	If the value is 0, use the default instead.
-	(yyparse): Return 2 on stack overflow.
-
-1990-05-30  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple (YYERROR): Jump to new label; don't print error
-	message.
-	(yyparse): Define label yyerrlab1.
-
-1990-05-16  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/files.c (openfiles): Support -b.
-	* src/getargs.c (getargs): Likewise.
-
-	* src/reader.c (readgram): Error if too many symbols.
-
-	* src/lex.c (lex): Handle \a.  Make error msgs more reliable.
-	* src/reader.c (read_declarations): Make error msgs more reliable.
-
-1990-05-13  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Version 1.09.
-
-	* src/reduce.c (reduce_grammar_tables): Fix backward test.
-
-1990-05-12  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Makefile (bison-dist.*): Rename targets and files to bison.*.
-	(bison.tar): Make tar file to unpack into subdirectory named `bison'.
-
-1990-04-30  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reduce.c (reduce_grammar_tables): Set rlhs to -1 for useless
-	rules.
-	* src/nullable.c (set_nullable): Ignore those rules.
-	* src/derives.c (set_derives): Likewise.
-
-1990-04-23  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple (yyparse): Mention rule number as well as line
-	number.
-
-1990-03-29  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple (__yy_bcopy): New function.
-	(yyparse): Use that, not bcopy.
-
-1990-03-28  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/print.c (print_actions): Don't alter i and j spuriously when
-	errp==0.
-
-1990-03-12  Jim Kingdon  <kingdon@pogo.ai.mit.edu>
-
-	* src/bison.simple [__GNUC__]: Use builtin_alloca.
-
-1990-03-07  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Makefile (install): Use mergedir.awk to process bison.simple
-	for installation.
-
-	* src/bison.simple (yyparse): New feature to include possible valid
-	tokens in parse error message.
-
-1990-03-03  Richard Stallman  <rms@geech>
-
-	* Version 1.08.
-
-1990-02-26  Jim Kingdon  <kingdon@pogo.ai.mit.edu>
-
-	* src/print.c (print_actions)
-	* src/conflicts.c (print_reductions): Change "shift %d" to
-	"shift, and go to state %d" and "reduce %d" to "reduce using rule %d"
-	and "goto %d" to "go to state %d".
-	* src/print.c (print_core): Change "(%d)" to "(rule %d)".
-
-1990-02-20  Jay Fenlason  <hack@wookumz.ai.mit.edu>
-
-	* src/bison.simple:  Comment out unused yyresume: label.
-
-1990-02-09  Jay Fenlason <hack@wookumz.ai.mit.edu>
-
-	* src/bison.simple : surround all declarations and (remaining)
-	uses of yyls* and yylloc with #ifdef YYLSP_NEEDED This will
-	significantly cut down on stack usage, and gets rid of
-	unused-variable msgs from GCC.
-
-1990-01-31  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/files.c (done) [VMS]: Don't delete files that weren't used.
-	[VMS]: Let user override XPFILE and XPFILE1.
-
-1990-01-03  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Version 1.07.
-
-1989-12-16  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/gram.c (dummy): New function.
-
-	* src/reader.c (readgram): Detect error if two consec actions.
-
-1989-11-15  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reduce.c (reduce_grammar_tables): Update rline like other
-	tables.
-
-	* Makefile (install): Install the man page.
-
-1989-11-11  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/output.c (output_rule_data): Write #if YYDEBUG around yyrline.
-
-1989-10-18  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Version 1.06.
-
-	* src/vmsgetargs.c (getargs): Downcase specified output file name.
-
-1989-10-13  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (readgram): Warn if there is no default to use for
-	$$ and one is needed.
-
-1989-09-29  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Version 1.05.
-
-	* src/vmsgetargs.h (getargs): Process outfile option.
-
-1989-09-08  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Version 1.04.
-
-	* src/reader.c (parse_union_decl): Count newlines even in
-	comments.
-
-1989-09-06  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/files.c (openfiles): short_base_length was always ==
-	base_length.
-
-1989-08-24  Richard Stallman  <rms@apple-gunkies.ai.mit.edu>
-
-	* Version 1.03.
-
-	* src/files.c (openfiles): Write output into same dir as input, by
-	default.
-
-1989-08-23  Jay Fenlason  <hack@gnu>
-
-	* Makefile: Include system.h in bison-dist.tar
-
-1989-08-15  Richard Stallman  <rms@hobbes.ai.mit.edu>
-
-	* version 1.03.
-
-	* src/reader.c (reader): Output LTYPESTR to fdefines
-	only after reading the grammar.
-
-1989-08-06  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (read_declarations): Put space before comment
-	to avoid bug in Green Hills C compiler.
-
-1989-06-19  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/allocate.c (xmalloc): New function.
-
-1989-06-16  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/build.com: Compile and link reduce.c.
-
-1989-06-09  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reduce.c (reduce_grammar_tables): Adjust start_symbol when
-	#s change.
-
-1989-05-27  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (copy_definition, copy_guard): Don't object to
-	\-newline inside strings.
-
-1989-05-22  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/files.c (openfiles): Alternate file names for MSDOS.
-	(open_extra_files): Likewise.
-	(done): On MSDOS, unlink temp files here, not in openfiles.
-
-	* src/machine.h (BITS_PER_WORD): 16 on MSDOS.
-	(MAXTABLE): Now defined in this file.
-
-	* src/system.h: New file includes system-dependent headers.
-	All relevant .c files include it.
-
-1989-04-27  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/version.c: Version 1.01.
-
-1989-04-18  Randall Smith  <randy@apple-gunkies.ai.mit.edu>
-
-	* src/conflicts.c (total_conflicts): Fixed typo in yacc style
-	output; mention conflicts if > 0.
-
-1989-04-15  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (packsymbols): Start new symbols after 256.
-
-1989-04-12  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (reader): Always assign code 256 to `error' token.
-	Always set `translations' to 1 so this code gets handled.
-	* src/bison.simple (YYERRCODE): Define it.
-
-1989-04-11  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/conflicts.c: If GNU C, use builtin alloca.
-
-	* Makefile (install): Delete parser files before copying them.
-
-1989-03-30  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/getargs.c (getargs): Turn off checking of name Bison was
-	invoked by.
-
-	* Makefile (dist): Include ChangeLog in distrib.
-
-1989-03-23  Jay Fenlason  <hack@apple-gunkies.ai.mit.edu>
-
-	* src/LR0.c src/closure.c src/conflicts.c src/derives.c
-	src/files.c src/getargs.c src/lalr.c src/lex.c src/main.c
-	src/nullable.c src/output.c src/print.c src/reader.c src/reduce.c
-	src/symtab.c src/warshall.c: A first pass at getting gcc -Wall to
-	shut up.  Mostly declared functions as void, etc.
-
-	* src/reduce.c moved 'extern int fixed_outfiles;' into print_notices
-	where it belongs.
-
-1989-03-01  Randall Smith  <randy@apple-gunkies.ai.mit.edu>
-
-	* src/types.h, src/symtab.h, src/state.h, src/new.h,
-	src/machine.h, src/lex.h, src/gram.h, src/files.h, src/closure.c,
-	src/vmsgetargs.c, src/warshall.c, src/symtab.c, src/reduce.c,
-	src/reader.c, src/print.c, src/output.c, src/nullable.c,
-	src/main.c, src/lex.c, src/lalr.c, src/gram.c, src/getargs.c,
-	src/files.c, src/derives.c, src/conflicts.c, src/allocate.c,
-	src/LR0.c, Makefile, src/bison.simple: Changed copyright notices
-	to be in accord with the new General Public License.
-	* COPYING: Made a link to the new copying file.
-
-1989-02-22  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/new.h (FREE): Alternate definition for __STDC__ avoids error
-	if `free' returns void.
-
-1989-02-21  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (read_declarations): Double a `%' in a format string.
-	(copy_definition, parse_start_decl, parse_token_decl): Likewise.
-	(parse_type_decl, parse_union_decl, copy_guard, readgram, get_type).
-	(copy_action): change a `fatal' to `fatals'.
-
-	* src/lalr.c (map_goto): Initial high-end of binary search was off
-	by 1.
-
-1989-02-18  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple [sparc]: Include alloca.h.
-
-1989-02-15  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (packsymbols): Write decl of yylval into .tab.h file.
-
-1989-01-28  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple: Avoid comments on `#line' lines.
-
-	* src/reader.c (LTYPESTR): Rearrange to avoid whitespace after
-	\-newline.
-
-1989-01-09  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/conflicts.c (total_conflicts): if -y, use output syntax
-	POSIX wants.
-	* src/reduce.c (print_notices): likewise.
-
-	* src/lex.c (lex): Handle \v, and \x hex escapes.
-
-	* src/reader.c (reader): Merge output_ltype into here.  Don't
-	output YYLTYPE definition to .tab.h file unless the @ construct is
-	used.
-
-	* src/bison.simple: Define YYERROR, YYABORT, YYACCEPT here.
-	* src/reader.c (output_ltype): Don't output them here.
-
-	* src/bison.simple: YYDEBUG now should be 0 or 1.
-	* src/output.c (output): For YYDEBUG, output conditional to define it
-	only if not previously defined.
-
-1989-01-02  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple (yyparse) [YYPURE]: Add local yynerrs.
-	(yydebug): Declare global, but don't initialize, regardless of
-	YYPURE.
-	(yyparse): Don't declare yydebug here.
-
-1988-12-22  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reduce.c (print_notices): Typo in message.
-
-1988-12-11  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/output.c (pack_table): Free only nonzero the elts of froms &
-	tos.
-
-1988-12-08  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/gram.c (rprecsym): New vector indicates the %prec symbol for
-	a rule.
-	* src/reader.c (packgram): Allocate it and fill it in.
-	* src/reduce.c (inaccessable_symbols): Use it to set V1.
-	* src/reduce.c (print_results): Don't complain about useless token
-	if it's in V1.
-
-1988-12-05  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/machine.h (RESETBIT, BITISSET): New macros.
-	(SETBIT, WORDSIZE): Change to use BITS_PER_WORD.
-
-	* src/reduce.c: New file, by David Bakin.  Reduces the grammar.
-	* Makefile: Compile it, link it, put it in dist.
-
-	* src/main.c (main): Call reduce_grammar (in reduce.c).
-
-1988-11-17  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/conflicts.c: Don't declare alloca if including alloca.h.
-
-	* src/bison.cld: Define qualifiers `nolines', `debug'.
-	* src/vmsgetargs.c (getargs): Handle them.
-
-	* src/output.c (output_program): Notice `nolinesflag'.
-
-	* src/output.c (output_parser): Simplify logic for -l and #line.
-	Avoid writing EOF char into output.
-
-1988-10-12  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Implement `-l' option.
-	* src/getopt.c: Set flag `nolinesflag'.
-	* src/reader.c (copy_definition, parse_union_decl, copy_guard,
-	copy_action) Obey that flag; don't generate #line.
-	* src/output.c (output_parser): Discard #line's when copying the
-	parser.
-
-1988-09-12  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (copy_guard): Fix brace-counting for
-	brace-surrounded guard.
-
-1988-09-08  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/bison.simple: Correct number in #line command.
-	(yyparse): Call YYABORT instead of YYERROR, due to last change in
-	output_ltype.
-
-1988-09-05  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* Makefile: New variable LIBS.  Alternatives for USG.
-	* src/conflicts.c [USG]: Define bcopy.
-	* src/symtab.c [USG]: Include string.h instead of strings.h.
-
-	* src/conflicts.c [sparc]: Include alloca.h.
-
-1988-08-02  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (parse_token_decl): Ignore commas.
-
-1988-06-25  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/reader.c (output_ltype): Make YYERROR yacc-compatible (like
-	YYFAIL).
-
-1988-06-24  Richard Stallman  <rms@sugar-bombs.ai.mit.edu>
-
-	* src/getargs.c (getargs): -t sets debugflag.
-	Eliminate upper case duplicate options.
-	* src/output.c (output): If debugflag, output `#define YYDEBUG'.
-
-1988-05-26  Richard Stallman  <rms@frosted-flakes.ai.mit.edu>
-
-	* src/allocate.c (mallocate): New name for `allocate' (which loses
-	in VMS).  Calls changed in LR0.c, conflicts.c, symtab.c, new.h.
-
-	* src/getargs.c (getargs): If argv[0] is "yacc", set fixed_outfiles.
-
-1988-05-17  Richard Stallman  <rms@frosted-flakes.ai.mit.edu>
-
-	* src/conflicts.c: Declare alloca.
-	* src/reader.c: Declare realloc.
-	* src/warshall.c (TC): Fix one arithmetic op that was omitted last
-	time.
-
-1988-05-05  Richard Stallman  <rms@frosted-flakes.ai.mit.edu>
-
-	* src/bison.simple: Conditionalize most refs to yylsp on
-	YYLSP_NEEDED.
-	* src/reader.c (copy_guard, copy_action): Notice if `@' is used.
-	(reader): If it was, output `#define YYLSP_NEEDED'.
-
-1988-04-18  Richard Stallman  <rms@rice-krispies.ai.mit.edu>
-
-	* src/bison.simple: New variable yynerr counts calls to yyerror.
-
-	* src/lex.c (lex, case '='): Update lineno when skipping a newline.
-
-	* src/reader.c (parse_expect_decl): ungetc the char that ends the
-	number; don't read any further.  This handles multi-line comments
-	right and avoids incorrect lineno.
-
-	* src/reader.c: Delete duplicate decl of symval.
-
-	* src/warshall.c (RTC, TC): Cast ptrs to char *, not unsigned, for
-	arith.
diff --git a/PACKAGING b/PACKAGING
index dd285c9..c890eed 100644
--- a/PACKAGING
+++ b/PACKAGING
@@ -36,21 +36,19 @@
 
 -----
 
-Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+Copyright (C) 2002, 2005, 2009-2012 Free Software Foundation, Inc.
 
 This file is part of Bison, the GNU Compiler Compiler.
 
-Bison is free software; you can redistribute it and/or modify
+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.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
-Bison is distributed in the hope that it will be useful,
+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 autoconf; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/README b/README
index a053f4b..04bf510 100644
--- a/README
+++ b/README
@@ -1,41 +1,63 @@
-This directory contains the Bison parser generator.
+This package contains the GNU Bison parser generator.
 
-See the file INSTALL for generic compilation and installation instructions.
-See the file doc/FAQ for frequently asked questions.
+* Installation
+** Build
+See the file INSTALL for generic compilation and installation
+instructions.
 
-Bison requires GNU m4 1.4.3 or later.  See:
+Bison requires GNU m4 1.4.6 or later.  See:
 
-ftp://ftp.gnu.org/gnu/m4/m4-1.4.3.tar.gz
+      ftp://ftp.gnu.org/gnu/m4/m4-1.4.6.tar.gz
 
-Bison can work with pre-1.4.3 distributions of GNU m4 if they are
-sufficiently patched, but if you encounter a bug with an older
-distribution and report a bug we will probably suggest that you
-upgrade to 1.4.3 as the first step in trying to fix it.
+** Internationalization
+Bison supports two catalogues: one for Bison itself (i.e., for the
+maintainer-side parser generation), and one for the generated parsers
+(i.e., for the user-side parser execution).  The requirements between
+both differ: bison needs ngettext, the generated parsers do not.  To
+simplify the build system, neither are installed if ngettext is not
+supported, even if generated parsers could have been localized.  See
+http://lists.gnu.org/archive/html/bug-bison/2009-08/msg00006.html for
+more details.
 
-Please send bug reports to <bug-bison@gnu.org>.  Please include the
-version number from `bison --version', and a complete, self-contained
-test case in each bug report.
+* Questions
+See the section FAQ in the documentation (doc/bison.info) for
+frequently asked questions.  The documentation is also available in
+PDF and HTML, provided you have a recent version of Texinfo installed:
+run "make pdf" or "make html".
 
 If you have questions about using Bison and the documentation does
 not answer them, please send mail to <help-bison@gnu.org>.
 
+* Bug reports
+Please send bug reports to <bug-bison@gnu.org>.  Please include the
+version number from `bison --version', and a complete, self-contained
+test case in each bug report.
+
+* Copyright statements
+For any copyright year range specified as YYYY-ZZZZ in this package,
+note that the range specifies every single year in that closed interval.
+
+
+Local Variables:
+mode: outline
+End:
+
 -----
 
-Copyright (C) 1992, 1998, 1999, 2003, 2004, 2005 Free Software Foundation, Inc.
+Copyright (C) 1992, 1998-1999, 2003-2005, 2008-2012 Free Software
+Foundation, Inc.
 
 This file is part of Bison, the GNU Compiler Compiler.
 
-Bison is free software; you can redistribute it and/or modify
+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.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
-Bison is distributed in the hope that it will be useful,
+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 autoconf; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/README-release b/README-release
new file mode 100644
index 0000000..4d9423a
--- /dev/null
+++ b/README-release
@@ -0,0 +1,100 @@
+Here are most of the steps we (maintainers) follow when making a release.
+
+* Start from a clean, up-to-date git directory on "master":
+
+    make -k maintainer-clean || { ./configure && make maintainer-clean; }
+    git checkout master
+    git pull origin master
+
+* Ensure that the latest stable versions of autoconf, automake, etc.
+  are in your PATH.  See the buildreq list in bootstrap.conf for
+  the complete list of tools.
+
+* Ensure that you have no uncommitted diffs.  This should produce no
+  output:
+
+    git diff
+
+* Ensure that you've pushed all changes that belong in the release:
+
+    git push origin master
+
+* Check that the NixOS/Hydra autobuilder is reporting all is well:
+
+    http://hydra.nixos.org/jobset/gnu/bison-master
+
+* Run the following command to download any new translations:
+
+    ./bootstrap && ./configure
+
+* Pre-release testing: ensure that the following command succeeds:
+
+    make check syntax-check distcheck
+
+* To (i) set the date, version number, and release TYPE on line 3 of
+  NEWS, (ii) commit that, and (iii) tag the release, run
+
+    # "TYPE" must be stable, beta or alpha
+    make release-commit RELEASE='X.Y TYPE'
+
+* Run the following to create release tarballs.  Your choice selects the
+  corresponding upload-to destination in the emitted gnupload command.
+  The different destinations are specified in cfg.mk.  See the definitions
+  of gnu_ftp_host-{alpha,beta,stable}.
+
+    make release RELEASE='X.Y TYPE'
+
+* Test the tarball.  Copy it to a few odd-ball systems and ensure that
+  it builds and passes all tests.
+
+* While that's happening, write the release announcement that you will
+  soon post.  Start with the template, $HOME/announce-bison-X.Y
+  that was just created by that "make" command.
+
+Once all the builds and tests have passed,
+
+* Run the gnupload command that was suggested by your "make release"
+  run above, or run
+
+    make upload RELEASE='X.Y TYPE'
+
+* Wait a few minutes (maybe up to 30?) and then use the release URLs to
+  download all tarball/signature pairs and use gpg --verify to ensure
+  that they're all valid.
+
+* Push the NEWS-updating changes and the new tag:
+
+    v=$(cat .prev-version)
+    git push origin master tag v$v
+
+* Announce it on Savannah first, so you can include the savannah.org
+  announcement link in the email message.
+
+  Go to the news-submission form:
+
+    https://savannah.gnu.org/news/submit.php?group=bison
+
+  If it does not work, then enable "News" for the project via this link:
+
+    https://savannah.gnu.org/project/admin/editgroupfeatures.php?group=bison
+
+  Write something like the following:
+
+    Subject: bison-X.Y released [stable]
+    +verbatim+
+    ...paste the announcement here...
+    -verbatim-
+
+  Then go here to approve it:
+
+    https://savannah.gnu.org/news/approve.php?group=bison
+
+* Send the announcement email message.
+
+* After each non-alpha release, run
+
+    make web-manual-update
+
+  to update the on-line manual accessible at
+
+    http://www.gnu.org/software/bison/manual/
diff --git a/README.android b/README.android
new file mode 100644
index 0000000..01602e1
--- /dev/null
+++ b/README.android
@@ -0,0 +1,14 @@
+
+The source code of bison 2.7 was downloaded from http://ftp.gnu.org/gnu/bison/.
+
+To build it with the Android build system, we added 2 subdirectories darwin-lib
+and linux-lib, as well as an Android.mk.
+We used the following steps to generate the Android.mk:
+1) On a Mac OS X machine, run ./configure and make, you'll get a list of
+generated header files from the log. Copy them to darwin-lib; You can also get
+a list of source files from the log. Add them to LOCAL_SRC_FILES in the
+Android.mk.
+2) Do the same thing on a Linux machine.
+3) Comment out the PKGINCLUDEDIR line in darwin-lib/configmake.h and
+linux-lib/configmake.h, because we'll pass in the macro from the build system.
+4) Define libbison and bison in the Android.mk.
diff --git a/THANKS b/THANKS
index c00580e..9a64012 100644
--- a/THANKS
+++ b/THANKS
@@ -1,52 +1,81 @@
 Bison was originally written by Robert Corbett.  It would not be what
 it is today without the invaluable help of these people:
 
+Аскар Сафин              safinaskar@mail.ru
 Airy Andre                Airy.Andre@edf.fr
-Akim Demaille             akim@freefriends.org
+Akim Demaille             akim@lrde.epita.fr
 Albert Chin-A-Young       china@thewrittenword.com
 Alexander Belopolsky      alexb@rentec.com
-Alexandre Duret-Lutz      adl@src.lip6.fr
+Alexandre Duret-Lutz      adl@lrde.epita.fr
 Andreas Schwab            schwab@suse.de
 Andrew Suffield           asuffield@users.sourceforge.net
+Angelo Borsotti           angelo.borsotti@gmail.com
 Anthony Heading           ajrh@ajrh.net
 Arnold Robbins            arnold@skeeve.com
 Art Haas                  ahaas@neosoft.com
 Baron Schwartz            baron@sequent.org
+Ben Pfaff                 blp@cs.stanford.edu
 Benoit Perrot             benoit.perrot@epita.fr
+Bernd Kiefer              kiefer@dfki.de
 Bert Deknuydt             Bert.Deknuydt@esat.kuleuven.ac.be
+Bill Allombert            Bill.Allombert@math.u-bordeaux1.fr
+Bob Rossi                 bob@brasko.net
+Brandon Lucia             blucia@gmail.com
 Bruce Lilly               blilly@erols.com
 Bruno Haible              bruno@clisp.org
 Charles-Henri de Boysson  de-boy_c@epita.fr
+Christian Burger          cburger@sunysb.edu
 Cris Bailiff              c.bailiff+bison@awayweb.com
 Cris van Pelt             cris@amf03054.office.wxs.nl
+Csaba Raduly              csaba_22@yahoo.co.uk
+Dagobert Michelsen        dam@baltic-online.de
 Daniel Hagerty            hag@gnu.org
 David J. MacKenzie        djm@gnu.org
-Derek M. Jones	          derek@knosof.co.uk
+David Kastrup             dak@gnu.org
+Dennis Clarke             dclarke@blastwave.org
+Derek M. Jones            derek@knosof.co.uk
+Di-an Jan                 dianj@freeshell.org
 Dick Streefland           dick.streefland@altium.nl
+Didier Godefroy           dg@ulysium.net
 Enrico Scholz             enrico.scholz@informatik.tu-chemnitz.de
+Eric Blake                ebb9@byu.net
 Evgeny Stambulchik        fnevgeny@plasma-gate.weizmann.ac.il
 Fabrice Bauzac            noon@cote-dazur.com
 Florian Krohm             florian@edamail.fishkill.ibm.com
 Frank Heckenbach          frank@g-n-u.de
+Frans Englich             frans.englich@telia.com
+Georg Sauthoff            gsauthof@TechFak.Uni-Bielefeld.DE
+George Neuner             gneuner2@comcast.net
+Gilles Espinasse          g.esp@free.fr
+Goran Uddeborg            goeran@uddeborg.se
 Guido Trentalancia        trentalg@aston.ac.uk
 H. Merijn Brand           h.m.brand@hccnet.nl
 Hans Aberg                haberg@matematik.su.se
 Jan Nieuwenhuizen         janneke@gnu.org
+Jerry Quinn               jlquinn@optonline.net
 Jesse Thilo               jthilo@gnu.org
 Jim Kent                  jkent@arch.sel.sony.com
 Jim Meyering              jim@meyering.net
-Joel E. Denny             jdenny@ces.clemson.edu
-Juan Manuel Guerrero      ST001906@HRZ1.HRZ.TU-Darmstadt.De
+Joel E. Denny             joeldenny@joeldenny.org
+Johan van Selst           johans@stack.nl
+Jonathan Fabrizio         jonathan.fabrizio@lrde.epita.fr
+Jonathan Nieder           jrnieder@gmail.com
+Juan Manuel Guerrero      juan.guerrero@gmx.de
 Kees Zeelenberg           kzlg@users.sourceforge.net
 Keith Browne              kbrowne@legato.com
 Laurent Mascherpa         laurent.mascherpa@epita.fr
+Lie Yan                   lie.yan@kaust.edu.sa
 Magnus Fromreide          magfr@lysator.liu.se
 Marc Autret               autret_m@epita.fr
+Marc Mendiola             mmendiol@usc.edu
+Mark Boyall               wolfeinstein@gmail.com
+Martin Jacobs             martin.jacobs@arcor.de
 Martin Mokrejs            mmokrejs@natur.cuni.cz
-Martin Nylin		  martin.nylin@linuxmail.org
+Martin Nylin              martin.nylin@linuxmail.org
 Matt Kraai                kraai@alumni.cmu.edu
 Matt Rosing               rosing@peakfive.com
 Michael Hayes             m.hayes@elec.canterbury.ac.nz
+Michael Raskin            7c6f434c@mail.ru
 Mickael Labau             labau_m@epita.fr
 Mike Castle               dalgoda@ix.netcom.com
 Neil Booth                NeilB@earthling.net
@@ -54,37 +83,76 @@
 Nicolas Burrus            nicolas.burrus@epita.fr
 Nicolas Tisserand         nicolas.tisserand@epita.fr
 Noah Friedman             friedman@gnu.org
+Odd Arild Olsen           oao@fibula.no
 Oleg Smolsky              oleg.smolsky@pacific-simulators.co.nz
+Oleksii Taran             oleksii.taran@gmail.com
+Paolo Bonzini             bonzini@gnu.org
 Pascal Bart               pascal.bart@epita.fr
 Paul Eggert               eggert@cs.ucla.edu
 Paul Hilfinger            Hilfinger@CS.Berkeley.EDU
 Per Allansson             per@appgate.com
+Peter Eisentraut          peter_e@gmx.net
 Peter Fales               psfales@lucent.com
 Peter Hamorsky            hamo@upjs.sk
+Peter Simons              simons@cryp.to
 Piotr Gackiewicz          gacek@intertel.com.pl
 Quoc Peyrot               chojin@lrde.epita.fr
 R Blake                   blakers@mac.com
 Raja R Harinath           harinath@cs.umn.edu
+Ralf Wildenhues           Ralf.Wildenhues@gmx.de
 Richard Stallman          rms@gnu.org
+Rob Vermaas               rob.vermaas@gmail.com
 Robert Anisko             anisko_r@epita.fr
+Satya Kiran Popuri        satyakiran@gmail.com
+Sebastian Setzer          sebastian.setzer.ext@siemens.com
+Sebastien Fricker         sebastien.fricker@gmail.com
+Sergei Steshenko          sergstesh@yahoo.com
 Shura                     debil_urod@ngs.ru
-Steve Murphy		  murf@parsetree.com
+Stefano Lattarini         stefano.lattarini@gmail.com
+Steve Murphy              murf@parsetree.com
+Sum Wu                    sum@geekhouse.org
+Théophile Ranquet         theophile.ranquet@gmail.com
+Thiru Ramakrishnan        thiru.ramakrishnan@gmail.com
 Tim Josling               tej@melbpc.org.au
+Tim Landscheidt           tim@tim-landscheidt.de
 Tim Van Holder            tim.van.holder@pandora.be
 Tom Lane                  tgl@sss.pgh.pa.us
 Tom Tromey                tromey@cygnus.com
-Tommy Nordgren		  tommy.nordgren@chello.se
+Tommy Nordgren            tommy.nordgren@chello.se
 Troy A. Johnson           troyj@ecn.purdue.edu
+Tys Lefering              gccbison@gmail.com
 Vin Shelton               acs@alumni.princeton.edu
+W.C.A. Wijngaards         wouter@NLnetLabs.nl
 Wayne Green               wayne@infosavvy.com
+Wei Song                  wsong83@gmail.com
+Wolfgang S. Kechel        wolfgang.kechel@prs.de
 Wolfram Wagner            ww@mpi-sb.mpg.de
 Wwp                       subscript@free.fr
 Zack Weinberg             zack@codesourcery.com
-                          twlevo@xs4all.nl
 
 Many people are not named here because we lost track of them.  We
 thank them!  Please, help us keeping this list up to date.
 
 Local Variables:
 mode: text
+coding: utf-8
 End:
+
+-----
+
+Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+This file is part of Bison, the GNU Parser Generator.
+
+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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
diff --git a/TODO b/TODO
index 76ca736..978b5c6 100644
--- a/TODO
+++ b/TODO
@@ -1,33 +1,156 @@
--*- outline -*-
+* Short term
+** Graphviz display code thoughts
+The code for the --graph option is over two files: print_graph, and
+graphviz. I believe this is because Bison used to also produce VCG graphs,
+but since this is no longer true, maybe we could consider these files for
+fusion.
 
-* Header guards
+Little effort factoring seems to have been given to factoring in these files,
+and their print-xml and print counterpart. We would very much like to re-use
+the pretty format of states from .output in the .dot
 
-From Franc,ois: should we keep the directory part in the CPP guard?
+Also, the underscore in print_graph.[ch] isn't very fitting considering
+the dashes in the other filenames.
+
+** Variable names.
+What should we name `variant' and `lex_symbol'?
+
+** Use b4_symbol in all the skeleton
+Move its definition in the more standard places and deploy it in other
+skeletons.  Then remove the older system, including the tables
+generated by output.c
+
+** Update the documentation on gnu.org
+
+** Get rid of fake #lines [Bison: ...]
+Possibly as simple as checking whether the column number is nonnegative.
+
+I have seen messages like the following from GCC.
+
+<built-in>:0: fatal error: opening dependency file .deps/libltdl/argz.Tpo: No such file or directory
 
 
-* Yacc.c: CPP Macros
+** Discuss about %printer/%destroy in the case of C++.
+It would be very nice to provide the symbol classes with an operator<<
+and a destructor.  Unfortunately the syntax we have chosen for
+%destroy and %printer make them hard to reuse.  For instance, the user
+is invited to write something like
 
-Do some people use YYPURE, YYLSP_NEEDED like we do in the test suite?
-They should not: it is not documented.  But if they need to, let's
-find something clean (not like YYLSP_NEEDED...).
+   %printer { debug_stream() << $$; } <my_type>;
+
+which is hard to reuse elsewhere since it wants to use
+"debug_stream()" to find the stream to use.  The same applies to
+%destroy: we told the user she could use the members of the Parser
+class in the printers/destructors, which is not good for an operator<<
+since it is no longer bound to a particular parser, it's just a
+(standalone symbol).
+
+** Rename LR0.cc
+as lr0.cc, why upper case?
+
+** bench several bisons.
+Enhance bench.pl with %b to run different bisons.
+
+* Various
+** Warnings
+Warnings about type tags that are used in printer and dtors, but not
+for symbols?
+
+** YYERRCODE
+Defined to 256, but not used, not documented.  Probably the token
+number for the error token, which POSIX wants to be 256, but which
+Bison might renumber if the user used number 256.  Keep fix and doc?
+Throw away?
+
+Also, why don't we output the token name of the error token in the
+output?  It is explicitly skipped:
+
+      /* Skip error token and tokens without identifier.  */
+      if (sym != errtoken && id)
+
+Of course there are issues with name spaces, but if we disable we have
+something which seems to be more simpler and more consistent instead
+of the special case YYERRCODE.
+
+   enum yytokentype {
+     error = 256,
+     // ...
+   };
 
 
-* Documentation
-Before releasing, make sure the documentation ("Understanding your
-parser") refers to the current `output' format.
+We could (should?) also treat the case of the undef_token, which is
+numbered 257 for yylex, and 2 internal.  Both appear for instance in
+toknum:
 
-* lalr1.cc
-** vector
-Move to using vector, drop stack.hh.
+  const unsigned short int
+  parser::yytoken_number_[] =
+  {
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
 
-** I18n
-Catch up with yacc.c.
+while here
+
+   enum yytokentype {
+     TOK_EOF = 0,
+     TOK_EQ = 258,
+
+so both 256 and 257 are "mysterious".
+
+  const char*
+  const parser::yytname_[] =
+  {
+  "\"end of command\"", "error", "$undefined", "\"=\"", "\"break\"",
+
+
+** YYFAIL
+It is seems to be *really* obsolete now, shall we remove it?
+
+** yychar == yyempty_
+The code in yyerrlab reads:
+
+      if (yychar <= YYEOF)
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
+
+There are only two yychar that can be <= YYEOF: YYEMPTY and YYEOF.
+But I can't produce the situation where yychar is YYEMPTY here, is it
+really possible?  The test suite does not exercise this case.
+
+This shows that it would be interesting to manage to install skeleton
+coverage analysis to the test suite.
+
+** Table definitions
+It should be very easy to factor the definition of the various tables,
+including the separation bw declaration and definition.  See for
+instance b4_table_define in lalr1.cc.  This way, we could even factor
+C vs. C++ definitions.
+
+* From lalr1.cc to yacc.c
+** Single stack
+Merging the three stacks in lalr1.cc simplified the code, prompted for
+other improvements and also made it faster (probably because memory
+management is performed once instead of three times).  I suggest that
+we do the same in yacc.c.
+
+** yysyntax_error
+The code bw glr.c and yacc.c is really alike, we can certainly factor
+some parts.
+
 
 * Report
 
+** Figures
+Some statistics about the grammar and the parser would be useful,
+especially when asking the user to send some information about the
+grammars she is working on.  We should probably also include some
+information about the variables (I'm not sure for instance we even
+specify what LR variant was used).
+
 **  GLR
 How would Paul like to display the conflicted actions?  In particular,
-what when two reductions are possible on a given look-ahead token, but one is
+what when two reductions are possible on a given lookahead token, but one is
 part of $default.  Should we make the two reductions explicit, or just
 keep $default?  See the following point.
 
@@ -47,39 +170,17 @@
 a sample text exhibiting the (LALR) ambiguity.  See the paper from
 DeRemer and Penello: they already provide the algorithm.
 
+** Statically check for potential ambiguities in GLR grammars.  See
+<http://www.i3s.unice.fr/~schmitz/papers.html#expamb> for an approach.
+
 
 * Extensions
 
-** Labeling the symbols
-Have a look at the Lemon parser generator: instead of $1, $2 etc. they
-can name the values.  This is much more pleasant.  For instance:
-
-       exp (res): exp (a) '+' exp (b) { $res = $a + $b; };
-
-I love this.  I have been bitten too often by the removal of the
-symbol, and forgetting to shift all the $n to $n-1.  If you are
-unlucky, it compiles...
-
-But instead of using $a etc., we can use regular variables.  And
-instead of using (), I propose to use `:' (again).  Paul suggests
-supporting `->' in addition to `:' to separate LHS and RHS. In other
-words:
-
-       r:exp -> a:exp '+' b:exp { r = a + b; };
-
-That requires an significant improvement of the grammar parser.  Using
-GLR would be nice.  It also requires that Bison know the type of the
-symbols (which will be useful for %include anyway).  So we have some
-time before...
-
-Note that there remains the problem of locations: `@r'?
-
-
 ** $-1
 We should find a means to provide an access to values deep in the
 stack.  For instance, instead of
 
-	baz: qux { $$ = $<foo>-1 + $<bar>0 + $1; }
+        baz: qux { $$ = $<foo>-1 + $<bar>0 + $1; }
 
 we should be able to have:
 
@@ -94,9 +195,6 @@
 part of %if.  Akim Demaille thinks it should be in the parser, so as
 to avoid falling into another CPP mistake.
 
-** -D, --define-muscle NAME=VALUE
-To define muscles via cli.  Or maybe support directly NAME=VALUE?
-
 ** XML Output
 There are couple of available extensions of Bison targeting some XML
 output.  Some day we should consider including them.  One issue is
@@ -115,13 +213,13 @@
 * Unit rules
 Maybe we could expand unit rules, i.e., transform
 
-	exp: arith | bool;
-	arith: exp '+' exp;
-	bool: exp '&' exp;
+        exp: arith | bool;
+        arith: exp '+' exp;
+        bool: exp '&' exp;
 
 into
 
-	exp: exp '+' exp | exp '&' exp;
+        exp: exp '+' exp | exp '&' exp;
 
 when there are no actions.  This can significantly speed up some
 grammars.  I can't find the papers.  In particular the book `LR
@@ -137,80 +235,30 @@
 Some history of Bison and some bibliography would be most welcome.
 Are there any Texinfo standards for bibliography?
 
-
-
-* Java, Fortran, etc.
-
-
-** Java
-
-There are a couple of proposed outputs:
-
-- BYACC/J
-  which is based on Byacc.
-  <http://troi.lincom-asg.com/~rjamison/byacc/>
-
-- Bison Java
-  which is based on Bison.
-  <http://www.goice.co.jp/member/mo/hack-progs/bison-java.html>
-
-Sebastien Serrurier (serrur_s@epita.fr) is working on this: he is
-expected to contact the authors, design the output, and implement it
-into Bison.
-
-
 * Coding system independence
 Paul notes:
 
-	Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is
-	255).  It also assumes that the 8-bit character encoding is
-	the same for the invocation of 'bison' as it is for the
-	invocation of 'cc', but this is not necessarily true when
-	people run bison on an ASCII host and then use cc on an EBCDIC
-	host.  I don't think these topics are worth our time
-	addressing (unless we find a gung-ho volunteer for EBCDIC or
-	PDP-10 ports :-) but they should probably be documented
-	somewhere.
+        Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is
+        255).  It also assumes that the 8-bit character encoding is
+        the same for the invocation of 'bison' as it is for the
+        invocation of 'cc', but this is not necessarily true when
+        people run bison on an ASCII host and then use cc on an EBCDIC
+        host.  I don't think these topics are worth our time
+        addressing (unless we find a gung-ho volunteer for EBCDIC or
+        PDP-10 ports :-) but they should probably be documented
+        somewhere.
 
-	More importantly, Bison does not currently allow NUL bytes in
-	tokens, either via escapes (e.g., "x\0y") or via a NUL byte in
-	the source code.  This should get fixed.
+        More importantly, Bison does not currently allow NUL bytes in
+        tokens, either via escapes (e.g., "x\0y") or via a NUL byte in
+        the source code.  This should get fixed.
 
 * --graph
 Show reductions.
 
 * Broken options ?
-** %no-parser
 ** %token-table
 ** Skeleton strategy
-Must we keep %no-parser?  %token-table?
-
-* src/print_graph.c
-Find the best graph parameters.
-
-* BTYacc
-See if we can integrate backtracking in Bison.  Charles-Henri de
-Boysson <de-boy_c@epita.fr> is working on this, and already has some
-results.  Vadim Maslow, the maintainer of BTYacc was contacted, and we
-stay in touch with him.  Adjusting the Bison grammar parser will be
-needed to support some extra BTYacc features.  This is less urgent.
-
-** Keeping the conflicted actions
-First, analyze the differences between byacc and btyacc (I'm referring
-to the executables).  Find where the conflicts are preserved.
-
-** Compare with the GLR tables
-See how isomorphic the way BTYacc and the way the GLR adjustments in
-Bison are compatible.  *As much as possible* one should try to use the
-same implementation in the Bison executables.  I insist: it should be
-very feasible to use the very same conflict tables.
-
-** Adjust the skeletons
-Import the skeletons for C and C++.
-
-** Improve the skeletons
-Have them support yysymprint, yydestruct and so forth.
-
+Must we keep %token-table?
 
 * Precedence
 
@@ -219,18 +267,6 @@
 makes it impossible to have modular precedence information.  We should
 move to partial orders (sounds like series/parallel orders to me).
 
-This will be possible with a Bison parser for the grammar, as it will
-make it much easier to extend the grammar.
-
-** Correlation b/w precedence and associativity
-Also, I fail to understand why we have to assign the same
-associativity to operators with the same precedence.  For instance,
-why can't I decide that the precedence of * and / is the same, but the
-latter is nonassoc?
-
-If there is really no profound motivation, we should find a new syntax
-to allow specifying this.
-
 ** RR conflicts
 See if we can use precedence between rules to solve RR conflicts.  See
 what POSIX says.
@@ -259,20 +295,6 @@
 a Bison option where every typed default rule is explicitly written out
 (same typed ruled can of course be grouped together).
 
-Note: Robert Anisko handles this.  He knows how to do it.
-
-
-* Warnings
-It would be nice to have warning support.  See how Autoconf handles
-them, it is fairly well described there.  It would be very nice to
-implement this in such a way that other programs could use
-lib/warnings.[ch].
-
-Don't work on this without first announcing you do, as I already have
-thought about it, and know many of the components that can be used to
-implement it.
-
-
 * Pre and post actions.
 From: Florian Krohm <florian@edamail.fishkill.ibm.com>
 Subject: YYACT_EPILOGUE
@@ -301,28 +323,47 @@
 I was wondering what you think about adding YYACT_PROLOGUE/EPILOGUE
 to bison. If you're interested, I'll work on a patch.
 
-* Move to Graphviz
-Well, VCG seems really dead.  Move to Graphviz instead.  Also, equip
-the parser with a means to create the (visual) parse tree.
+* Better graphics
+Equip the parser with a means to create the (visual) parse tree.
+
+* Complaint submessage indentation.
+We already have an implementation that works fairly well for named
+reference messages, but it would be nice to use it consistently for all
+submessages from Bison.  For example, the "previous definition"
+submessage or the list of correct values for a %define variable might
+look better with indentation.
+
+However, the current implementation makes the assumption that the
+location printed on the first line is not usually much shorter than the
+locations printed on the submessage lines that follow.  That assumption
+may not hold true as often for some kinds of submessages especially if
+we ever support multiple grammar files.
+
+Here's a proposal for how a new implementation might look:
+
+  http://lists.gnu.org/archive/html/bison-patches/2009-09/msg00086.html
+
+
+Local Variables:
+mode: outline
+coding: utf-8
+End:
 
 -----
 
-Copyright (C) 2001, 2002, 2003, 2004, 2006 Free Software Foundation,
-Inc.
+Copyright (C) 2001-2004, 2006, 2008-2012 Free Software Foundation, Inc.
 
 This file is part of Bison, the GNU Compiler Compiler.
 
-Bison is free software; you can redistribute it and/or modify
+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.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
-Bison is distributed in the hope that it will be useful,
+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 Bison; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/aclocal.m4 b/aclocal.m4
index 3c5426a..d183426 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
+# generated automatically by aclocal 1.12.5 -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005  Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -11,7 +11,15 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -21,26 +29,43 @@
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
-AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.12'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.12.5], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
 
 # AM_SET_CURRENT_AUTOMAKE_VERSION
 # -------------------------------
-# Call AM_AUTOMAKE_VERSION so it can be traced.
-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-	 [AM_AUTOMAKE_VERSION([1.9.6])])
+[AM_AUTOMAKE_VERSION([1.12.5])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
 #
 # Of course, Automake must honor this variable whenever it calls a
 # tool from the auxiliary directory.  The problem is that $srcdir (and
@@ -59,7 +84,7 @@
 #
 # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
 # are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
+# harmless because $srcdir is '.', but things will broke when you
 # start a VPATH build or use an absolute $srcdir.
 #
 # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
@@ -83,49 +108,26 @@
 am_aux_dir=`cd $ac_aux_dir && pwd`
 ])
 
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# This was merged into AC_PROG_CC in Autoconf.
-
-AU_DEFUN([AM_PROG_CC_STDC],
-[AC_PROG_CC
-AC_DIAGNOSE([obsolete], [$0:
-	your code should no longer depend upon `am_cv_prog_cc_stdc', but upon
-	`ac_cv_prog_cc_stdc'.  Remove this warning and the assignment when
-	you adjust the code.  You can also remove the above call to
-	AC_PROG_CC if you already called it elsewhere.])
-am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc
-])
-AU_DEFUN([fp_PROG_CC_STDC])
-
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 7
-
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
 AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])
-AC_SUBST([$1_FALSE])
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
 if $2; then
   $1_TRUE=
   $1_FALSE='#'
@@ -139,17 +141,14 @@
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 8
 
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
 # will think it sees a *use*, and therefore will trigger all it's
 # C support machinery.  Also note that it means that autoscan, seeing
@@ -159,7 +158,7 @@
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
 # We try a few techniques and use that to set a single cache variable.
 #
 # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
@@ -172,11 +171,13 @@
 AC_REQUIRE([AM_MAKE_INCLUDE])dnl
 AC_REQUIRE([AM_DEP_TRACK])dnl
 
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
 
 AC_CACHE_CHECK([dependency style of $depcc],
                [am_cv_$1_dependencies_compiler_type],
@@ -184,8 +185,9 @@
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -203,6 +205,16 @@
   if test "$am_compiler_list" = ""; then
      am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
   fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
   for depmode in $am_compiler_list; do
     # Setup a source with many dependencies, because some compilers
     # like to wrap large dependency lists on column 80 (with \), and
@@ -214,34 +226,49 @@
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
     case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
 	break
       fi
       ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
     none) break ;;
     esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
     if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       source=sub/conftest.c object=$am__obj \
        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
          >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
       # or remarks (even with -Werror).  So we grep stderr for any message
@@ -274,7 +301,7 @@
 # AM_SET_DEPDIR
 # -------------
 # Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
 AC_DEFUN([AM_SET_DEPDIR],
 [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
@@ -284,69 +311,85 @@
 # AM_DEP_TRACK
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
 AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-#serial 3
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; do
-  # Strip MF so we end up with the name of the file.
-  mf=`echo "$mf" | sed -e 's/:.*$//'`
-  # Check whether this is an Automake generated Makefile or not.
-  # We used to match only the files named `Makefile.in', but
-  # some people rename them; so instead we look at the file content.
-  # Grep'ing the first line is not enough: some people post-process
-  # each Makefile.in and add a new line on top of each file to say so.
-  # So let's grep whole file.
-  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-    dirpart=`AS_DIRNAME("$mf")`
-  else
-    continue
-  fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`AS_DIRNAME(["$file"])`
-    AS_MKDIR_P([$dirpart/$fdir])
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named 'Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running 'make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
   done
-done
+}
 ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
 
 
@@ -355,7 +398,7 @@
 # This macro should only be invoked once -- use via AC_REQUIRE.
 #
 # This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
+# is enabled.  FIXME.  This creates each '.P' file that we will
 # need in order to bootstrap the dependency handling code.
 AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 [AC_CONFIG_COMMANDS([depfiles],
@@ -365,15 +408,12 @@
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 12
-
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
 
@@ -389,16 +429,20 @@
 # arguments mandatory, and then we can depend on a new Autoconf
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.58])dnl
+[AC_PREREQ([2.62])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
 AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
 AC_REQUIRE([AC_PROG_INSTALL])dnl
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
 fi
 
 # test whether we have cygpath
@@ -414,48 +458,85 @@
 # Define the identity of the package.
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+[AC_DIAGNOSE([obsolete],
+[$0: two- and three-arguments forms are deprecated.  For more info, see:
+http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
 [_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
 
 _AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
 
 # Some tools Automake needs.
 AC_REQUIRE([AM_SANITY_CHECK])dnl
 AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([AC_PROG_MAKE_SET])dnl
 AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-	      		     [_AM_PROG_TAR([v7])])])
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
-                  [_AM_DEPENDENCIES(CC)],
-                  [define([AC_PROG_CC],
-                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+		  [_AM_DEPENDENCIES([CC])],
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                  [_AM_DEPENDENCIES(CXX)],
-                  [define([AC_PROG_CXX],
-                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+		  [_AM_DEPENDENCIES([CXX])],
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES([OBJC])],
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+dnl Support for Objective C++ was only introduced in Autoconf 2.65,
+dnl but we still cater to Autoconf 2.62.
+m4_ifdef([AC_PROG_OBJCXX],
+[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
 ])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
 ])
 
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
 
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
@@ -466,18 +547,19 @@
 # our stamp files there.
 AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
 [# Compute $1's index in $config_headers.
+_am_arg=$1
 _am_stamp_count=1
 for _am_header in $config_headers :; do
   case $_am_header in
-    $1 | $1:* )
+    $_am_arg | $_am_arg:* )
       break ;;
     * )
       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
   esac
 done
-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -488,17 +570,22 @@
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-AC_SUBST(install_sh)])
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST([install_sh])])
 
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # Check whether the underlying file-system supports filenames
 # with a leading dot.  For instance MS-DOS doesn't.
 AC_DEFUN([AM_SET_LEADING_DOT],
@@ -514,14 +601,12 @@
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
-
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
@@ -529,7 +614,7 @@
 [am_make=${MAKE-make}
 cat > confinc << 'END'
 am__doit:
-	@echo done
+	@echo this is the am__doit target
 .PHONY: am__doit
 END
 # If we don't find an include directive, just comment out the code.
@@ -539,24 +624,24 @@
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
 # Now try BSD make style include.
 if test "$am__include" = "#"; then
    echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
 fi
 AC_SUBST([am__include])
 AC_SUBST([am__quote])
@@ -564,16 +649,45 @@
 rm -f confinc confmf
 ])
 
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
@@ -582,24 +696,31 @@
 $1=${$1-"${am_missing_run}$2"}
 AC_SUBST($1)])
 
-
 # AM_MISSING_HAS_RUN
 # ------------------
 # Define MISSING if not defined so far and test if it supports --run.
 # If it does, set am_missing_run to use it, otherwise, to nothing.
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
 # Use eval to expand $SHELL
 if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
+  AC_MSG_WARN(['missing' script is too old or missing])
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -607,87 +728,53 @@
 
 # AM_PROG_MKDIR_P
 # ---------------
-# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-#
-# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
-# created by `make install' are always world readable, even if the
-# installer happens to have an overly restrictive umask (e.g. 077).
-# This was a mistake.  There are at least two reasons why we must not
-# use `-m 0755':
-#   - it causes special bits like SGID to be ignored,
-#   - it may be too restrictive (some setups expect 775 directories).
-#
-# Do not use -m 0755 and let people choose whatever they expect by
-# setting umask.
-#
-# We cannot accept any implementation of `mkdir' that recognizes `-p'.
-# Some implementations (such as Solaris 8's) are not thread-safe: if a
-# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
-# concurrently, both version can detect that a/ is missing, but only
-# one can create it and the other will error out.  Consequently we
-# restrict ourselves to GNU make (using the --version option ensures
-# this.)
+# Check for 'mkdir -p'.
 AC_DEFUN([AM_PROG_MKDIR_P],
-[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-  # We used to keeping the `.' as first argument, in order to
-  # allow $(mkdir_p) to be used without argument.  As in
-  #   $(mkdir_p) $(somedir)
-  # where $(somedir) is conditionally defined.  However this is wrong
-  # for two reasons:
-  #  1. if the package is installed by a user who cannot write `.'
-  #     make install will fail,
-  #  2. the above comment should most certainly read
-  #     $(mkdir_p) $(DESTDIR)$(somedir)
-  #     so it does not work when $(somedir) is undefined and
-  #     $(DESTDIR) is not.
-  #  To support the latter case, we have to write
-  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-  #  so the `.' trick is pointless.
-  mkdir_p='mkdir -p --'
-else
-  # On NextStep and OpenStep, the `mkdir' command does not
-  # recognize any option.  It will interpret all options as
-  # directories to create, and then abort because `.' already
-  # exists.
-  for d in ./-p ./--version;
-  do
-    test -d $d && rmdir $d
-  done
-  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-  if test -f "$ac_aux_dir/mkinstalldirs"; then
-    mkdir_p='$(mkinstalldirs)'
-  else
-    mkdir_p='$(install_sh) -d'
-  fi
-fi
-AC_SUBST([mkdir_p])])
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl FIXME to be removed in Automake 1.13.
+AC_DIAGNOSE([obsolete],
+[$0: this macro is deprecated, and will soon be removed.
+You should use the Autoconf-provided 'AC][_PROG_MKDIR_P' macro instead,
+and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.])
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
-
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
 AC_DEFUN([_AM_MANGLE_OPTION],
 [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
 
 # _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
 
 # _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
 
 # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
 # -------------------------------------------
@@ -697,45 +784,60 @@
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
-
 # AM_SANITY_CHECK
 # ---------------
 AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
 
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$[2]" = conftest.file
    )
 then
@@ -745,9 +847,85 @@
    AC_MSG_ERROR([newly created file is older than distributed files!
 Check your system clock])
 fi
-AC_MSG_RESULT(yes)])
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -755,40 +933,55 @@
 
 # AM_PROG_INSTALL_STRIP
 # ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
+# One issue with vendor 'install' (even GNU) is that you can't
 # specify the program used to strip binaries.  This is especially
 # annoying in cross-compiling environments, where the build's strip
 # is unlikely to handle the host's binaries.
 # Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
+# always use install-sh in "make install-strip", and initialize
 # STRIPPROG with the value of the STRIP variable (set by the user).
 AC_DEFUN([AM_PROG_INSTALL_STRIP],
 [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
 if test "$cross_compiling" != no; then
   AC_CHECK_TOOL([STRIP], [strip], :)
 fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2006-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
 #
 # Substitute a variable $(am__tar) that is a command
 # writing to stdout a FORMAT-tarball containing the directory
@@ -799,10 +992,11 @@
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
@@ -810,7 +1004,7 @@
 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
 _am_tools=${am_cv_prog_tar_$1-$_am_tools}
 # Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
+# Solaris sh will not grok spaces in the rhs of '-'.
 for _am_tool in $_am_tools
 do
   case $_am_tool in
@@ -871,54 +1065,171 @@
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
+m4_include([m4/00gnulib.m4])
+m4_include([m4/alloca.m4])
+m4_include([m4/asm-underscore.m4])
+m4_include([m4/assert.m4])
 m4_include([m4/bison-i18n.m4])
 m4_include([m4/c-working.m4])
+m4_include([m4/calloc.m4])
+m4_include([m4/close-stream.m4])
+m4_include([m4/close.m4])
+m4_include([m4/closeout.m4])
+m4_include([m4/codeset.m4])
+m4_include([m4/config-h.m4])
+m4_include([m4/configmake.m4])
 m4_include([m4/cxx.m4])
 m4_include([m4/dirname.m4])
 m4_include([m4/dmalloc.m4])
-m4_include([m4/dos.m4])
+m4_include([m4/double-slash-root.m4])
+m4_include([m4/dup2.m4])
+m4_include([m4/environ.m4])
+m4_include([m4/errno_h.m4])
 m4_include([m4/error.m4])
-m4_include([m4/exitfail.m4])
+m4_include([m4/exponentd.m4])
+m4_include([m4/exponentf.m4])
+m4_include([m4/exponentl.m4])
 m4_include([m4/extensions.m4])
+m4_include([m4/extern-inline.m4])
+m4_include([m4/fatal-signal.m4])
+m4_include([m4/fcntl-o.m4])
+m4_include([m4/fcntl.m4])
+m4_include([m4/fcntl_h.m4])
+m4_include([m4/flex.m4])
+m4_include([m4/float_h.m4])
+m4_include([m4/fopen.m4])
+m4_include([m4/fpending.m4])
+m4_include([m4/fpieee.m4])
+m4_include([m4/fprintf-posix.m4])
+m4_include([m4/frexp.m4])
+m4_include([m4/frexpl.m4])
+m4_include([m4/fseterr.m4])
+m4_include([m4/fstat.m4])
+m4_include([m4/getdelim.m4])
+m4_include([m4/getdtablesize.m4])
+m4_include([m4/getline.m4])
 m4_include([m4/getopt.m4])
-m4_include([m4/gettext_gl.m4])
-m4_include([m4/gnulib.m4])
-m4_include([m4/hard-locale.m4])
-m4_include([m4/hash.m4])
+m4_include([m4/gettext.m4])
+m4_include([m4/glibc21.m4])
+m4_include([m4/gnulib-common.m4])
+m4_include([m4/gnulib-comp.m4])
 m4_include([m4/iconv.m4])
-m4_include([m4/inttypes_h_gl.m4])
-m4_include([m4/lib-ld_gl.m4])
+m4_include([m4/include_next.m4])
+m4_include([m4/intlmacosx.m4])
+m4_include([m4/intmax_t.m4])
+m4_include([m4/inttypes-pri.m4])
+m4_include([m4/inttypes.m4])
+m4_include([m4/inttypes_h.m4])
+m4_include([m4/isnan.m4])
+m4_include([m4/isnand.m4])
+m4_include([m4/isnanf.m4])
+m4_include([m4/isnanl.m4])
+m4_include([m4/iswblank.m4])
+m4_include([m4/javacomp.m4])
+m4_include([m4/javaexec.m4])
+m4_include([m4/largefile.m4])
+m4_include([m4/ldexp.m4])
+m4_include([m4/ldexpl.m4])
+m4_include([m4/lib-ld.m4])
 m4_include([m4/lib-link.m4])
-m4_include([m4/lib-prefix_gl.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/libunistring-base.m4])
+m4_include([m4/localcharset.m4])
+m4_include([m4/locale-fr.m4])
+m4_include([m4/locale-ja.m4])
+m4_include([m4/locale-zh.m4])
+m4_include([m4/lock.m4])
+m4_include([m4/longlong.m4])
 m4_include([m4/m4.m4])
+m4_include([m4/malloc.m4])
+m4_include([m4/math_h.m4])
+m4_include([m4/mbchar.m4])
+m4_include([m4/mbiter.m4])
 m4_include([m4/mbrtowc.m4])
+m4_include([m4/mbsinit.m4])
 m4_include([m4/mbstate_t.m4])
 m4_include([m4/mbswidth.m4])
+m4_include([m4/memchr.m4])
+m4_include([m4/mmap-anon.m4])
+m4_include([m4/mode_t.m4])
+m4_include([m4/msvc-inval.m4])
+m4_include([m4/msvc-nothrow.m4])
+m4_include([m4/multiarch.m4])
 m4_include([m4/nls.m4])
-m4_include([m4/obstack.m4])
-m4_include([m4/onceonly.m4])
-m4_include([m4/po_gl.m4])
+m4_include([m4/nocrash.m4])
+m4_include([m4/obstack-printf.m4])
+m4_include([m4/off_t.m4])
+m4_include([m4/open.m4])
+m4_include([m4/pathmax.m4])
+m4_include([m4/perror.m4])
+m4_include([m4/pipe2.m4])
+m4_include([m4/po.m4])
+m4_include([m4/posix_spawn.m4])
+m4_include([m4/printf-frexp.m4])
+m4_include([m4/printf-frexpl.m4])
+m4_include([m4/printf-posix-rpl.m4])
+m4_include([m4/printf.m4])
 m4_include([m4/progtest.m4])
 m4_include([m4/quote.m4])
 m4_include([m4/quotearg.m4])
+m4_include([m4/raise.m4])
+m4_include([m4/rawmemchr.m4])
+m4_include([m4/realloc.m4])
+m4_include([m4/sched_h.m4])
+m4_include([m4/setenv.m4])
+m4_include([m4/sig_atomic_t.m4])
+m4_include([m4/sigaction.m4])
+m4_include([m4/signal_h.m4])
+m4_include([m4/signalblocking.m4])
+m4_include([m4/signbit.m4])
+m4_include([m4/size_max.m4])
+m4_include([m4/snprintf-posix.m4])
+m4_include([m4/snprintf.m4])
+m4_include([m4/spawn-pipe.m4])
+m4_include([m4/spawn_h.m4])
+m4_include([m4/sprintf-posix.m4])
+m4_include([m4/ssize_t.m4])
+m4_include([m4/stat.m4])
 m4_include([m4/stdbool.m4])
-m4_include([m4/stdint_h_gl.m4])
-m4_include([m4/stdio-safer.m4])
+m4_include([m4/stddef_h.m4])
+m4_include([m4/stdint.m4])
+m4_include([m4/stdint_h.m4])
+m4_include([m4/stdio_h.m4])
+m4_include([m4/stdlib_h.m4])
 m4_include([m4/stpcpy.m4])
+m4_include([m4/strchrnul.m4])
 m4_include([m4/strdup.m4])
 m4_include([m4/strerror.m4])
+m4_include([m4/strerror_r.m4])
+m4_include([m4/string_h.m4])
 m4_include([m4/strndup.m4])
 m4_include([m4/strnlen.m4])
-m4_include([m4/strtol.m4])
 m4_include([m4/strtoul.m4])
 m4_include([m4/strverscmp.m4])
-m4_include([m4/subpipe.m4])
+m4_include([m4/sys_socket_h.m4])
+m4_include([m4/sys_stat_h.m4])
+m4_include([m4/sys_types_h.m4])
+m4_include([m4/sys_wait_h.m4])
+m4_include([m4/threadlib.m4])
+m4_include([m4/time_h.m4])
 m4_include([m4/timevar.m4])
-m4_include([m4/uintmax_t_gl.m4])
-m4_include([m4/ulonglong_gl.m4])
 m4_include([m4/unistd-safer.m4])
 m4_include([m4/unistd_h.m4])
 m4_include([m4/unlocked-io.m4])
-m4_include([m4/warning.m4])
+m4_include([m4/vasnprintf.m4])
+m4_include([m4/vfprintf-posix.m4])
+m4_include([m4/vsnprintf-posix.m4])
+m4_include([m4/vsnprintf.m4])
+m4_include([m4/vsprintf-posix.m4])
+m4_include([m4/wait-process.m4])
+m4_include([m4/waitpid.m4])
+m4_include([m4/warn-on-use.m4])
+m4_include([m4/warnings.m4])
+m4_include([m4/wchar_h.m4])
+m4_include([m4/wchar_t.m4])
+m4_include([m4/wctype_h.m4])
+m4_include([m4/wcwidth.m4])
+m4_include([m4/wint_t.m4])
 m4_include([m4/xalloc.m4])
+m4_include([m4/xsize.m4])
 m4_include([m4/xstrndup.m4])
diff --git a/build-aux/Makefile b/build-aux/Makefile
deleted file mode 100644
index 54f34ca..0000000
--- a/build-aux/Makefile
+++ /dev/null
@@ -1,356 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# build-aux/Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-srcdir = .
-top_srcdir = ..
-
-pkgdatadir = $(datadir)/bison
-pkglibdir = $(libdir)/bison
-pkgincludedir = $(includedir)/bison
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /usr/bin/install -c
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-subdir = build-aux
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in config.guess \
-	config.rpath config.sub depcomp install-sh mdate-sh missing \
-	mkinstalldirs texinfo.tex ylwrap
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
-	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
-	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
-	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9
-AMDEP_FALSE = #
-AMDEP_TRUE = 
-AMTAR = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar
-AUTOCONF = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader
-AUTOM4TE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te
-AUTOMAKE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9
-AWK = gawk
-BISON_CXX_WORKS = :
-BISON_CXX_WORKS_FALSE = #
-BISON_CXX_WORKS_TRUE = 
-BISON_LOCALEDIR = /usr/share/locale
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
-CPP = gcc -E
-CPPFLAGS = 
-CXX = g++
-CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = grep -E
-EXEEXT = 
-GCC = yes
-GETOPT_H = 
-GMSGFMT = /usr/bin/msgfmt
-HAVE__BOOL = 1
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
-INTLLIBS = 
-INTL_MACOSX_LIBS = 
-LDFLAGS = 
-LEX = flex
-LEXLIB = -lfl
-LEX_OUTPUT_ROOT = lex.yy
-LIBICONV = -liconv
-LIBINTL = 
-LIBOBJS =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-LIBS = 
-LTLIBICONV = -liconv
-LTLIBINTL = 
-LTLIBOBJS =  dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo
-M4 = /usr/bin/m4
-MAKEINFO = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo
-MKINSTALLDIRS = $(top_builddir)/build-aux/mkinstalldirs
-MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge
-O0CFLAGS = -g 
-O0CXXFLAGS = -g 
-OBJEXT = o
-PACKAGE = bison
-PACKAGE_BUGREPORT = bug-bison@gnu.org
-PACKAGE_NAME = GNU Bison
-PACKAGE_STRING = GNU Bison 2.3
-PACKAGE_TARNAME = bison
-PACKAGE_VERSION = 2.3
-PATH_SEPARATOR = :
-POSUB = po
-RANLIB = ranlib
-SET_MAKE = 
-SHELL = /bin/sh
-STDBOOL_H = 
-STRIP = 
-UNISTD_H = 
-USE_NLS = yes
-VALGRIND = 
-VERSION = 2.3
-WARNING_CFLAGS = 
-WARNING_CXXFLAGS = 
-WERROR_CFLAGS = 
-XGETTEXT = /usr/bin/xgettext
-YACC = bison -y
-YACC_LIBRARY = liby.a
-YACC_SCRIPT = yacc
-ac_ct_CC = gcc
-ac_ct_CXX = g++
-ac_ct_RANLIB = ranlib
-ac_ct_STRIP = 
-aclocaldir = ${datadir}/aclocal
-am__fastdepCC_FALSE = #
-am__fastdepCC_TRUE = 
-am__fastdepCXX_FALSE = #
-am__fastdepCXX_TRUE = 
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-datadir = ${prefix}/share
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-includedir = ${prefix}/include
-infodir = ${prefix}/info
-install_sh = /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localstatedir = ${prefix}/var
-mandir = ${prefix}/man
-mkdir_p = mkdir -p --
-oldincludedir = /usr/include
-prefix = /home/phanna/src/bison
-program_transform_name = s,x,x,
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-sysconfdir = ${prefix}/etc
-target_alias = 
-EXTRA_DIST = prev-version.txt
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  build-aux/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  build-aux/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-uninstall-info-am:
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-exec-am:
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am
-
-.PHONY: all all-am check check-am clean clean-generic distclean \
-	distclean-generic distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-exec \
-	install-exec-am install-info install-info-am install-man \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
-	uninstall-info-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/build-aux/Makefile.am b/build-aux/Makefile.am
index 0e2ef7a..5b077b8 100644
--- a/build-aux/Makefile.am
+++ b/build-aux/Makefile.am
@@ -1,2 +1,20 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
-EXTRA_DIST = prev-version.txt
+## Copyright (C) 2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+EXTRA_DIST =					\
+  cross-options.pl				\
+  darwin11.4.0.valgrind				\
+  prev-version.txt				\
+  update-b4-copyright
diff --git a/build-aux/Makefile.in b/build-aux/Makefile.in
index 8a90fc8..a222b15 100644
--- a/build-aux/Makefile.in
+++ b/build-aux/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,15 +13,41 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
+
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
+pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -36,137 +62,1225 @@
 build_triplet = @build@
 host_triplet = @host@
 subdir = build-aux
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in config.guess \
-	config.rpath config.sub depcomp install-sh mdate-sh missing \
-	mkinstalldirs texinfo.tex ylwrap
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in compile \
+	config.guess config.rpath config.sub depcomp install-sh \
+	mdate-sh missing texinfo.tex ylwrap
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
 	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
 	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
 	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOM4TE = @AUTOM4TE@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BISON_CXX_WORKS = @BISON_CXX_WORKS@
-BISON_CXX_WORKS_FALSE = @BISON_CXX_WORKS_FALSE@
-BISON_CXX_WORKS_TRUE = @BISON_CXX_WORKS_TRUE@
+BISON_C_WORKS = @BISON_C_WORKS@
 BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
 CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DOT = @DOT@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
 GCC = @GCC@
 GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
 HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
 LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
 LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
 MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
+MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
-O0CFLAGS = @O0CFLAGS@
-O0CXXFLAGS = @O0CXXFLAGS@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
 POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
 STRIP = @STRIP@
-UNISTD_H = @UNISTD_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
 VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
 YACC = @YACC@
 YACC_LIBRARY = @YACC_LIBRARY@
 YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 aclocaldir = @aclocaldir@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -178,29 +1292,52 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-EXTRA_DIST = prev-version.txt
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+  cross-options.pl				\
+  darwin11.4.0.valgrind				\
+  prev-version.txt				\
+  update-b4-copyright
+
 all: all-am
 
 .SUFFIXES:
@@ -208,14 +1345,14 @@
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  build-aux/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  build-aux/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits build-aux/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits build-aux/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -233,38 +1370,43 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-uninstall-info-am:
+$(am__aclocal_m4_deps):
 tags: TAGS
 TAGS:
 
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -282,16 +1424,22 @@
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -310,18 +1458,38 @@
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
 
 install-data-am:
 
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
 install-exec-am:
 
+install-html: install-html-am
+
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -340,16 +1508,20 @@
 
 ps-am:
 
-uninstall-am: uninstall-info-am
+uninstall-am:
+
+.MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic distclean \
 	distclean-generic distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-exec \
-	install-exec-am install-info install-info-am install-man \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
 	install-strip installcheck installcheck-am installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
-	uninstall-info-am
+	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/build-aux/announce-gen b/build-aux/announce-gen
new file mode 100755
index 0000000..ec7c22a
--- /dev/null
+++ b/build-aux/announce-gen
@@ -0,0 +1,555 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
+# Generate a release announcement message.
+
+my $VERSION = '2012-06-08 06:53'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2002-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+
+use Getopt::Long;
+use Digest::MD5;
+eval { require Digest::SHA; }
+  or eval 'use Digest::SHA1';
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+my %valid_release_types = map {$_ => 1} qw (alpha beta stable);
+my @archive_suffixes = ('tar.gz', 'tar.bz2', 'tar.lzma', 'tar.xz');
+my $srcdir = '.';
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try '$ME --help' for more information.\n";
+    }
+  else
+    {
+      my @types = sort keys %valid_release_types;
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS]
+Generate an announcement message.  Run this from builddir.
+
+OPTIONS:
+
+These options must be specified:
+
+   --release-type=TYPE          TYPE must be one of @types
+   --package-name=PACKAGE_NAME
+   --previous-version=VER
+   --current-version=VER
+   --gpg-key-id=ID         The GnuPG ID of the key used to sign the tarballs
+   --url-directory=URL_DIR
+
+The following are optional:
+
+   --news=NEWS_FILE             include the NEWS section about this release
+                                from this NEWS_FILE; accumulates.
+   --srcdir=DIR                 where to find the NEWS_FILEs (default: $srcdir)
+   --bootstrap-tools=TOOL_LIST  a comma-separated list of tools, e.g.,
+                                autoconf,automake,bison,gnulib
+   --gnulib-version=VERSION     report VERSION as the gnulib version, where
+                                VERSION is the result of running git describe
+                                in the gnulib source directory.
+                                required if gnulib is in TOOL_LIST.
+   --no-print-checksums         do not emit MD5 or SHA1 checksums
+   --archive-suffix=SUF         add SUF to the list of archive suffixes
+   --mail-headers=HEADERS       a space-separated list of mail headers, e.g.,
+                                To: x\@example.com Cc: y-announce\@example.com,...
+
+   --help             display this help and exit
+   --version          output version information and exit
+
+EOF
+    }
+  exit $exit_code;
+}
+
+
+=item C<%size> = C<sizes (@file)>
+
+Compute the sizes of the C<@file> and return them as a hash.  Return
+C<undef> if one of the computation failed.
+
+=cut
+
+sub sizes (@)
+{
+  my (@file) = @_;
+
+  my $fail = 0;
+  my %res;
+  foreach my $f (@file)
+    {
+      my $cmd = "du -h $f";
+      my $t = `$cmd`;
+      # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS
+      $@
+        and (warn "command failed: '$cmd'\n"), $fail = 1;
+      chomp $t;
+      $t =~ s/^\s*([\d.]+[MkK]).*/${1}B/;
+      $res{$f} = $t;
+    }
+  return $fail ? undef : %res;
+}
+
+=item C<print_locations ($title, \@url, \%size, @file)
+
+Print a section C<$title> dedicated to the list of <@file>, which
+sizes are stored in C<%size>, and which are available from the C<@url>.
+
+=cut
+
+sub print_locations ($\@\%@)
+{
+  my ($title, $url, $size, @file) = @_;
+  print "Here are the $title:\n";
+  foreach my $url (@{$url})
+    {
+      for my $file (@file)
+        {
+          print "  $url/$file";
+          print "   (", $$size{$file}, ")"
+            if exists $$size{$file};
+          print "\n";
+        }
+    }
+  print "\n";
+}
+
+=item C<print_checksums (@file)
+
+Print the MD5 and SHA1 signature section for each C<@file>.
+
+=cut
+
+sub print_checksums (@)
+{
+  my (@file) = @_;
+
+  print "Here are the MD5 and SHA1 checksums:\n";
+  print "\n";
+
+  foreach my $meth (qw (md5 sha1))
+    {
+      foreach my $f (@file)
+        {
+          open IN, '<', $f
+            or die "$ME: $f: cannot open for reading: $!\n";
+          binmode IN;
+          my $dig =
+            ($meth eq 'md5'
+             ? Digest::MD5->new->addfile(*IN)->hexdigest
+             : Digest::SHA1->new->addfile(*IN)->hexdigest);
+          close IN;
+          print "$dig  $f\n";
+        }
+    }
+  print "\n";
+}
+
+=item C<print_news_deltas ($news_file, $prev_version, $curr_version)
+
+Print the section of the NEWS file C<$news_file> addressing changes
+between versions C<$prev_version> and C<$curr_version>.
+
+=cut
+
+sub print_news_deltas ($$$)
+{
+  my ($news_file, $prev_version, $curr_version) = @_;
+
+  my $news_name = $news_file;
+  $news_name =~ s|^\Q$srcdir\E/||;
+
+  print "\n$news_name\n\n";
+
+  # Print all lines from $news_file, starting with the first one
+  # that mentions $curr_version up to but not including
+  # the first occurrence of $prev_version.
+  my $in_items;
+
+  my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/;
+
+  my $found_news;
+  open NEWS, '<', $news_file
+    or die "$ME: $news_file: cannot open for reading: $!\n";
+  while (defined (my $line = <NEWS>))
+    {
+      if ( ! $in_items)
+        {
+          # Match lines like these:
+          # * Major changes in release 5.0.1:
+          # * Noteworthy changes in release 6.6 (2006-11-22) [stable]
+          $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o
+            or next;
+          $in_items = 1;
+          print $line;
+        }
+      else
+        {
+          # This regexp must not match version numbers in NEWS items.
+          # For example, they might well say "introduced in 4.5.5",
+          # and we don't want that to match.
+          $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o
+            and last;
+          print $line;
+          $line =~ /\S/
+            and $found_news = 1;
+        }
+    }
+  close NEWS;
+
+  $in_items
+    or die "$ME: $news_file: no matching lines for '$curr_version'\n";
+  $found_news
+    or die "$ME: $news_file: no news item found for '$curr_version'\n";
+}
+
+sub print_changelog_deltas ($$)
+{
+  my ($package_name, $prev_version) = @_;
+
+  # Print new ChangeLog entries.
+
+  # First find all CVS-controlled ChangeLog files.
+  use File::Find;
+  my @changelog;
+  find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS'
+                          and push @changelog, $File::Find::name}},
+        '.');
+
+  # If there are no ChangeLog files, we're done.
+  @changelog
+    or return;
+  my %changelog = map {$_ => 1} @changelog;
+
+  # Reorder the list of files so that if there are ChangeLog
+  # files in the specified directories, they're listed first,
+  # in this order:
+  my @dir = qw ( . src lib m4 config doc );
+
+  # A typical @changelog array might look like this:
+  # ./ChangeLog
+  # ./po/ChangeLog
+  # ./m4/ChangeLog
+  # ./lib/ChangeLog
+  # ./doc/ChangeLog
+  # ./config/ChangeLog
+  my @reordered;
+  foreach my $d (@dir)
+    {
+      my $dot_slash = $d eq '.' ? $d : "./$d";
+      my $target = "$dot_slash/ChangeLog";
+      delete $changelog{$target}
+        and push @reordered, $target;
+    }
+
+  # Append any remaining ChangeLog files.
+  push @reordered, sort keys %changelog;
+
+  # Remove leading './'.
+  @reordered = map { s!^\./!!; $_ } @reordered;
+
+  print "\nChangeLog entries:\n\n";
+  # print join ("\n", @reordered), "\n";
+
+  $prev_version =~ s/\./_/g;
+  my $prev_cvs_tag = "\U$package_name\E-$prev_version";
+
+  my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered";
+  open DIFF, '-|', $cmd
+    or die "$ME: cannot run '$cmd': $!\n";
+  # Print two types of lines, making minor changes:
+  # Lines starting with '+++ ', e.g.,
+  # +++ ChangeLog   22 Feb 2003 16:52:51 -0000      1.247
+  # and those starting with '+'.
+  # Don't print the others.
+  my $prev_printed_line_empty = 1;
+  while (defined (my $line = <DIFF>))
+    {
+      if ($line =~ /^\+\+\+ /)
+        {
+          my $separator = "*"x70 ."\n";
+          $line =~ s///;
+          $line =~ s/\s.*//;
+          $prev_printed_line_empty
+            or print "\n";
+          print $separator, $line, $separator;
+        }
+      elsif ($line =~ /^\+/)
+        {
+          $line =~ s///;
+          print $line;
+          $prev_printed_line_empty = ($line =~ /^$/);
+        }
+    }
+  close DIFF;
+
+  # The exit code should be 1.
+  # Allow in case there are no modified ChangeLog entries.
+  $? == 256 || $? == 128
+    or warn "warning: '$cmd' had unexpected exit code or signal ($?)\n";
+}
+
+sub get_tool_versions ($$)
+{
+  my ($tool_list, $gnulib_version) = @_;
+  @$tool_list
+    or return ();
+
+  my $fail;
+  my @tool_version_pair;
+  foreach my $t (@$tool_list)
+    {
+      if ($t eq 'gnulib')
+        {
+          push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version;
+          next;
+        }
+      # Assume that the last "word" on the first line of
+      # 'tool --version' output is the version string.
+      my ($first_line, undef) = split ("\n", `$t --version`);
+      if ($first_line =~ /.* (\d[\w.-]+)$/)
+        {
+          $t = ucfirst $t;
+          push @tool_version_pair, "$t $1";
+        }
+      else
+        {
+          defined $first_line
+            and $first_line = '';
+          warn "$t: unexpected --version output\n:$first_line";
+          $fail = 1;
+        }
+    }
+
+  $fail
+    and exit 1;
+
+  return @tool_version_pair;
+}
+
+{
+  # Neutralize the locale, so that, for instance, "du" does not
+  # issue "1,2" instead of "1.2", what confuses our regexps.
+  $ENV{LC_ALL} = "C";
+
+  my $mail_headers;
+  my $release_type;
+  my $package_name;
+  my $prev_version;
+  my $curr_version;
+  my $gpg_key_id;
+  my @url_dir_list;
+  my @news_file;
+  my $bootstrap_tools;
+  my $gnulib_version;
+  my $print_checksums_p = 1;
+
+  # Reformat the warnings before displaying them.
+  local $SIG{__WARN__} = sub
+    {
+      my ($msg) = @_;
+      # Warnings from GetOptions.
+      $msg =~ s/Option (\w)/option --$1/;
+      warn "$ME: $msg";
+    };
+
+  GetOptions
+    (
+     'mail-headers=s'     => \$mail_headers,
+     'release-type=s'     => \$release_type,
+     'package-name=s'     => \$package_name,
+     'previous-version=s' => \$prev_version,
+     'current-version=s'  => \$curr_version,
+     'gpg-key-id=s'       => \$gpg_key_id,
+     'url-directory=s'    => \@url_dir_list,
+     'news=s'             => \@news_file,
+     'srcdir=s'           => \$srcdir,
+     'bootstrap-tools=s'  => \$bootstrap_tools,
+     'gnulib-version=s'   => \$gnulib_version,
+     'print-checksums!'   => \$print_checksums_p,
+     'archive-suffix=s'   => \@archive_suffixes,
+
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+    ) or usage 1;
+
+  my $fail = 0;
+  # Ensure that each required option is specified.
+  $release_type
+    or (warn "release type not specified\n"), $fail = 1;
+  $package_name
+    or (warn "package name not specified\n"), $fail = 1;
+  $prev_version
+    or (warn "previous version string not specified\n"), $fail = 1;
+  $curr_version
+    or (warn "current version string not specified\n"), $fail = 1;
+  $gpg_key_id
+    or (warn "GnuPG key ID not specified\n"), $fail = 1;
+  @url_dir_list
+    or (warn "URL directory name(s) not specified\n"), $fail = 1;
+
+  my @tool_list = split ',', $bootstrap_tools;
+
+  grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version
+    and (warn "when specifying gnulib as a tool, you must also specify\n"
+        . "--gnulib-version=V, where V is the result of running git describe\n"
+        . "in the gnulib source directory.\n"), $fail = 1;
+
+  exists $valid_release_types{$release_type}
+    or (warn "'$release_type': invalid release type\n"), $fail = 1;
+
+  @ARGV
+    and (warn "too many arguments:\n", join ("\n", @ARGV), "\n"),
+      $fail = 1;
+  $fail
+    and usage 1;
+
+  my $my_distdir = "$package_name-$curr_version";
+
+  my $xd = "$package_name-$prev_version-$curr_version.xdelta";
+
+  my @candidates = map { "$my_distdir.$_" } @archive_suffixes;
+  my @tarballs = grep {-f $_} @candidates;
+
+  @tarballs
+    or die "$ME: none of " . join(', ', @candidates) . " were found\n";
+  my @sizable = @tarballs;
+  -f $xd
+    and push @sizable, $xd;
+  my %size = sizes (@sizable);
+  %size
+    or exit 1;
+
+  my $headers = '';
+  if (defined $mail_headers)
+    {
+      ($headers = $mail_headers) =~ s/\s+(\S+:)/\n$1/g;
+      $headers .= "\n";
+    }
+
+  # The markup is escaped as <\# so that when this script is sent by
+  # mail (or part of a diff), Gnus is not triggered.
+  print <<EOF;
+
+${headers}Subject: $my_distdir released [$release_type]
+
+<\#secure method=pgpmime mode=sign>
+
+FIXME: put comments here
+
+EOF
+
+  if (@url_dir_list == 1 && @tarballs == 1)
+    {
+      # When there's only one tarball and one URL, use a more concise form.
+      my $m = "$url_dir_list[0]/$tarballs[0]";
+      print "Here are the compressed sources and a GPG detached signature[*]:\n"
+        . "  $m\n"
+        . "  $m.sig\n\n";
+    }
+  else
+    {
+      print_locations ("compressed sources", @url_dir_list, %size, @tarballs);
+      -f $xd
+        and print_locations ("xdelta diffs (useful? if so, "
+                             . "please tell bug-gnulib\@gnu.org)",
+                             @url_dir_list, %size, $xd);
+      my @sig_files = map { "$_.sig" } @tarballs;
+      print_locations ("GPG detached signatures[*]", @url_dir_list, %size,
+                       @sig_files);
+    }
+
+  if ($url_dir_list[0] =~ "gnu\.org")
+    {
+      print "Use a mirror for higher download bandwidth:\n";
+      if (@tarballs == 1 && $url_dir_list[0] =~ m!http://ftp\.gnu\.org/gnu/!)
+        {
+          (my $m = "$url_dir_list[0]/$tarballs[0]")
+            =~ s!http://ftp\.gnu\.org/gnu/!http://ftpmirror\.gnu\.org/!;
+          print "  $m\n"
+              . "  $m.sig\n\n";
+
+        }
+      else
+        {
+          print "  http://www.gnu.org/order/ftp.html\n\n";
+        }
+    }
+
+  $print_checksums_p
+    and print_checksums (@sizable);
+
+  print <<EOF;
+[*] Use a .sig file to verify that the corresponding file (without the
+.sig suffix) is intact.  First, be sure to download both the .sig file
+and the corresponding tarball.  Then, run a command like this:
+
+  gpg --verify $tarballs[0].sig
+
+If that command fails because you don't have the required public key,
+then run this command to import it:
+
+  gpg --keyserver keys.gnupg.net --recv-keys $gpg_key_id
+
+and rerun the 'gpg --verify' command.
+EOF
+
+  my @tool_versions = get_tool_versions (\@tool_list, $gnulib_version);
+  @tool_versions
+    and print "\nThis release was bootstrapped with the following tools:",
+      join ('', map {"\n  $_"} @tool_versions), "\n";
+
+  print_news_deltas ($_, $prev_version, $curr_version)
+    foreach @news_file;
+
+  $release_type eq 'stable'
+    or print_changelog_deltas ($package_name, $prev_version);
+
+  exit 0;
+}
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## mode: perl
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## perl-extra-newline-before-brace: t
+## perl-merge-trailing-else: nil
+## eval: (add-hook 'write-file-hooks 'time-stamp)
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/compile b/build-aux/compile
new file mode 100755
index 0000000..bac481c
--- /dev/null
+++ b/build-aux/compile
@@ -0,0 +1,310 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2010-11-15.09; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010 Free Software
+# Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""	$nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Win32 hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+	# lazily determine how to convert abs files
+	case `uname -s` in
+	  MINGW*)
+	    file_conv=mingw
+	    ;;
+	  CYGWIN*)
+	    file_conv=cygwin
+	    ;;
+	  *)
+	    file_conv=wine
+	    ;;
+	esac
+      fi
+      case $file_conv/,$2, in
+	*,$file_conv,*)
+	  ;;
+	mingw/*)
+	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+	  ;;
+	cygwin/*)
+	  file=`cygpath -m "$file" || echo "$file"`
+	  ;;
+	wine/*)
+	  file=`winepath -w "$file" || echo "$file"`
+	  ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+	-o)
+	  # configure might choose to run compile as `compile cc -o foo foo.c'.
+	  eat=1
+	  case $2 in
+	    *.o | *.[oO][bB][jJ])
+	      func_file_conv "$2"
+	      set x "$@" -Fo"$file"
+	      shift
+	      ;;
+	    *)
+	      func_file_conv "$2"
+	      set x "$@" -Fe"$file"
+	      shift
+	      ;;
+	  esac
+	  ;;
+	-I*)
+	  func_file_conv "${1#-I}" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-l*)
+	  lib=${1#-l}
+	  found=no
+	  save_IFS=$IFS
+	  IFS=';'
+	  for dir in $lib_path $LIB
+	  do
+	    IFS=$save_IFS
+	    if $shared && test -f "$dir/$lib.dll.lib"; then
+	      found=yes
+	      set x "$@" "$dir/$lib.dll.lib"
+	      break
+	    fi
+	    if test -f "$dir/$lib.lib"; then
+	      found=yes
+	      set x "$@" "$dir/$lib.lib"
+	      break
+	    fi
+	  done
+	  IFS=$save_IFS
+
+	  test "$found" != yes && set x "$@" "$lib.lib"
+	  shift
+	  ;;
+	-L*)
+	  func_file_conv "${1#-L}"
+	  if test -z "$lib_path"; then
+	    lib_path=$file
+	  else
+	    lib_path="$lib_path;$file"
+	  fi
+	  linker_opts="$linker_opts -LIBPATH:$file"
+	  ;;
+	-static)
+	  shared=false
+	  ;;
+	-Wl,*)
+	  arg=${1#-Wl,}
+	  save_ifs="$IFS"; IFS=','
+	  for flag in $arg; do
+	    IFS="$save_ifs"
+	    linker_opts="$linker_opts $flag"
+	  done
+	  IFS="$save_ifs"
+	  ;;
+	-Xlinker)
+	  eat=1
+	  linker_opts="$linker_opts $2"
+	  ;;
+	-*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+	  func_file_conv "$1"
+	  set x "$@" -Tp"$file"
+	  shift
+	  ;;
+	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+	  func_file_conv "$1" mingw
+	  set x "$@" "$file"
+	  shift
+	  ;;
+	*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as `compile cc -o foo foo.c'.
+	# So we strip `-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no `-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/config.guess b/build-aux/config.guess
index 917bbc5..872b96a 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2005-07-08'
+timestamp='2012-09-25'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -16,9 +17,7 @@
 # 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., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -26,16 +25,16 @@
 # the same distribution terms that you use for the rest of that program.
 
 
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # exits with 0.  Otherwise, it exits with 1.
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -55,7 +54,8 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
@@ -106,7 +106,7 @@
 trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
 trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
 : ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
  { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
  { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
  { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
@@ -143,7 +143,7 @@
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -160,6 +160,7 @@
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
@@ -168,7 +169,7 @@
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
+			| grep -q __ELF__
 		then
 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
 		    # Return netbsd for either.  FIX?
@@ -178,7 +179,7 @@
 		fi
 		;;
 	    *)
-	        os=netbsd
+		os=netbsd
 		;;
 	esac
 	# The OS release
@@ -199,6 +200,10 @@
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
 	exit ;;
+    *:Bitrig:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+	exit ;;
     *:OpenBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -206,8 +211,11 @@
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
 	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
     macppc:MirBSD:*:*)
-	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
@@ -218,7 +226,7 @@
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -264,7 +272,10 @@
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
@@ -290,12 +301,12 @@
 	echo s390-ibm-zvmoe
 	exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+	echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
 	echo arm-unknown-riscos
 	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -319,14 +330,33 @@
 	case `/usr/bin/uname -p` in
 	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
-    i86pc:SunOS:5.*:*)
-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH="i386"
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH="x86_64"
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
@@ -370,23 +400,23 @@
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+	exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
 	exit ;;
@@ -456,8 +486,8 @@
 	echo m88k-motorola-sysv3
 	exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -470,7 +500,7 @@
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
 	exit ;;
@@ -527,7 +557,7 @@
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[45])
+    *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
@@ -570,52 +600,52 @@
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH="hppa2.0n" ;;
+			  64) HP_ARCH="hppa2.0w" ;;
 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+			esac ;;
+		    esac
 		fi
 		if [ "${HP_ARCH}" = "" ]; then
 		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
+		    sed 's/^		//' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
 EOF
 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -635,7 +665,7 @@
 	    # => hppa64-hp-hpux11.23
 
 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
+		grep -q __LP64__
 	    then
 		HP_ARCH="hppa2.0w"
 	    else
@@ -706,22 +736,22 @@
 	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+	exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+	exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+	exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+	exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
@@ -745,14 +775,14 @@
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -764,27 +794,51 @@
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
 	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
 	exit ;;
-    i*:MINGW*:*)
+    *:MINGW64*:*)
+	echo ${UNAME_MACHINE}-pc-mingw64
+	exit ;;
+    *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
 	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
-    x86:Interix*:[34]*)
-	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit ;;
+    *:Interix*:*)
+	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
 	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -794,7 +848,7 @@
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
 	exit ;;
-    amd64:CYGWIN*:*:*)
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
 	echo x86_64-unknown-cygwin
 	exit ;;
     p*:CYGWIN*:*)
@@ -814,71 +868,13 @@
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
-    arm*:Linux:*:*)
+    aarch64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    cris:Linux:*:*)
-	echo cris-axis-linux-gnu
-	exit ;;
-    crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
-	exit ;;
-    frv:Linux:*:*)
-    	echo frv-unknown-linux-gnu
-	exit ;;
-    ia64:Linux:*:*)
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    mips:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips
-	#undef mipsel
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips64
-	#undef mips64el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
-	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -888,11 +884,90 @@
 	  EV6)   UNAME_MACHINE=alphaev6 ;;
 	  EV67)  UNAME_MACHINE=alphaev67 ;;
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
 	exit ;;
+    arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	else
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+	    fi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=${UNAME_MACHINE}el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=${UNAME_MACHINE}
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-gnu
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -901,14 +976,17 @@
 	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
 	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux
 	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sh*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -916,68 +994,18 @@
     sparc:Linux:*:* | sparc64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit ;;
-	  coff-i386)
-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#ifdef __INTEL_COMPILER
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-	;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    xtensa*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
@@ -985,11 +1013,11 @@
 	echo i386-sequent-sysv4
 	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+	# Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit ;;
     i*86:OS/2:*:*)
@@ -1006,7 +1034,7 @@
     i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
 	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     i*86:*DOS:*:*)
@@ -1021,7 +1049,7 @@
 	fi
 	exit ;;
     i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
@@ -1049,10 +1077,13 @@
 	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
-        exit ;;
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+	exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit ;;
@@ -1087,8 +1118,18 @@
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
@@ -1101,7 +1142,7 @@
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     SM[BE]S:UNIX_SV:*:*)
@@ -1121,10 +1162,10 @@
 		echo ns32k-sni-sysv
 	fi
 	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel@ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes@openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1150,11 +1191,11 @@
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
+		echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
+		echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+	exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
 	exit ;;
@@ -1164,6 +1205,12 @@
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
 	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
+    x86_64:Haiku:*:*)
+	echo x86_64-unknown-haiku
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
 	exit ;;
@@ -1173,6 +1220,15 @@
     SX-6:SUPER-UX:*:*)
 	echo sx6-nec-superux${UNAME_RELEASE}
 	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 	exit ;;
@@ -1182,7 +1238,16 @@
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
 	case $UNAME_PROCESSOR in
-	    *86) UNAME_PROCESSOR=i686 ;;
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
 	    unknown) UNAME_PROCESSOR=powerpc ;;
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
@@ -1198,7 +1263,10 @@
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
@@ -1243,13 +1311,13 @@
 	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+	echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1261,11 +1329,17 @@
     i*86:skyos:*:*)
 	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
 	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
 esac
 
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
 eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
@@ -1283,11 +1357,11 @@
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+	"4"
 #else
-	  ""
+	""
 #endif
-         ); exit (0);
+	); exit (0);
 #endif
 #endif
 
@@ -1421,9 +1495,9 @@
 the operating system you are using. It is advised that you
 download the most up to date version of the config scripts from
 
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 and
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
 
 If the version you run ($0) is already up to date, please
 send the following data and any information you think might be
diff --git a/build-aux/config.rpath b/build-aux/config.rpath
index c492a93..1a07018 100755
--- a/build-aux/config.rpath
+++ b/build-aux/config.rpath
@@ -2,7 +2,7 @@
 # Output a system dependent set of variables, describing how to set the
 # run time search path of shared libraries in an executable.
 #
-#   Copyright 1996-2006 Free Software Foundation, Inc.
+#   Copyright 1996-2012 Free Software Foundation, Inc.
 #   Taken from GNU libtool, 2001
 #   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
@@ -25,7 +25,7 @@
 #   known workaround is to choose shorter directory names for the build
 #   directory and/or the installation directory.
 
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# All known linkers require a '.a' archive for static linking (except MSVC,
 # which needs '.lib').
 libext=a
 shrext=.so
@@ -47,7 +47,7 @@
 done
 cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
 
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
 
 wl=
 if test "$GCC" = yes; then
@@ -57,14 +57,7 @@
     aix*)
       wl='-Wl,'
       ;;
-    darwin*)
-      case $cc_basename in
-        xlc*)
-          wl='-Wl,'
-          ;;
-      esac
-      ;;
-    mingw* | pw32* | os2*)
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
       ;;
     hpux9* | hpux10* | hpux11*)
       wl='-Wl,'
@@ -72,24 +65,37 @@
     irix5* | irix6* | nonstopux*)
       wl='-Wl,'
       ;;
-    newsos6)
-      ;;
-    linux*)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
-        icc* | ecc*)
+        ecc*)
           wl='-Wl,'
           ;;
-        pgcc | pgf77 | pgf90)
+        icc* | ifort*)
+          wl='-Wl,'
+          ;;
+        lf95*)
+          wl='-Wl,'
+          ;;
+        nagfor*)
+          wl='-Wl,-Wl,,'
+          ;;
+        pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
           wl='-Wl,'
           ;;
         ccc*)
           wl='-Wl,'
           ;;
+        xl* | bgxl* | bgf* | mpixl*)
+          wl='-Wl,'
+          ;;
         como)
           wl='-lopt='
           ;;
         *)
           case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ F* | *Sun*Fortran*)
+              wl=
+              ;;
             *Sun\ C*)
               wl='-Wl,'
               ;;
@@ -97,22 +103,36 @@
           ;;
       esac
       ;;
+    newsos6)
+      ;;
+    *nto* | *qnx*)
+      ;;
     osf3* | osf4* | osf5*)
       wl='-Wl,'
       ;;
-    sco3.2v5*)
+    rdos*)
       ;;
     solaris*)
-      wl='-Wl,'
+      case $cc_basename in
+        f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+          wl='-Qoption ld '
+          ;;
+        *)
+          wl='-Wl,'
+          ;;
+      esac
       ;;
     sunos4*)
       wl='-Qoption ld '
       ;;
-    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+    sysv4 | sysv4.2uw2* | sysv4.3*)
       wl='-Wl,'
       ;;
     sysv4*MP*)
       ;;
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      wl='-Wl,'
+      ;;
     unicos*)
       wl='-Wl,'
       ;;
@@ -121,7 +141,7 @@
   esac
 fi
 
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
 
 hardcode_libdir_flag_spec=
 hardcode_libdir_separator=
@@ -129,7 +149,7 @@
 hardcode_minus_L=no
 
 case "$host_os" in
-  cygwin* | mingw* | pw32*)
+  cygwin* | mingw* | pw32* | cegcc*)
     # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
     # Microsoft Visual C++.
@@ -155,22 +175,21 @@
   # option of GNU ld is called -rpath, not --rpath.
   hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
   case "$host_os" in
-    aix3* | aix4* | aix5*)
+    aix[3-9]*)
       # On AIX/PPC, the GNU linker is very broken
       if test "$host_cpu" != ia64; then
         ld_shlibs=no
       fi
       ;;
     amigaos*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we cannot use
-      # them.
-      ld_shlibs=no
+      case "$host_cpu" in
+        powerpc)
+          ;;
+        m68k)
+          hardcode_libdir_flag_spec='-L$libdir'
+          hardcode_minus_L=yes
+          ;;
+      esac
       ;;
     beos*)
       if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
@@ -179,7 +198,7 @@
         ld_shlibs=no
       fi
       ;;
-    cygwin* | mingw* | pw32*)
+    cygwin* | mingw* | pw32* | cegcc*)
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
@@ -189,11 +208,13 @@
         ld_shlibs=no
       fi
       ;;
-    interix3*)
+    haiku*)
+      ;;
+    interix[3-9]*)
       hardcode_direct=no
       hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
       ;;
-    linux*)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
         :
       else
@@ -251,7 +272,7 @@
         hardcode_direct=unsupported
       fi
       ;;
-    aix4* | aix5*)
+    aix[4-9]*)
       if test "$host_cpu" = ia64; then
         # On IA64, the linker does run time linking by default, so we don't
         # have to do anything special.
@@ -261,7 +282,7 @@
         # Test if we are trying to use run time linking or normal
         # AIX style linking. If -brtl is somewhere in LDFLAGS, we
         # need to do runtime linking.
-        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
           for ld_flag in $LDFLAGS; do
             if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
               aix_use_runtimelinking=yes
@@ -280,7 +301,7 @@
             strings "$collect2name" | grep resolve_lib_name >/dev/null
           then
             # We have reworked collect2
-            hardcode_direct=yes
+            :
           else
             # We have old collect2
             hardcode_direct=unsupported
@@ -316,14 +337,18 @@
       fi
       ;;
     amigaos*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs=no
+      case "$host_cpu" in
+        powerpc)
+          ;;
+        m68k)
+          hardcode_libdir_flag_spec='-L$libdir'
+          hardcode_minus_L=yes
+          ;;
+      esac
       ;;
     bsdi[45]*)
       ;;
-    cygwin* | mingw* | pw32*)
+    cygwin* | mingw* | pw32* | cegcc*)
       # When not using gcc, we currently assume that we are using
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
@@ -333,24 +358,15 @@
       ;;
     darwin* | rhapsody*)
       hardcode_direct=no
-      if test "$GCC" = yes ; then
+      if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
         :
       else
-        case $cc_basename in
-          xlc*)
-            ;;
-          *)
-            ld_shlibs=no
-            ;;
-        esac
+        ld_shlibs=no
       fi
       ;;
     dgux*)
       hardcode_libdir_flag_spec='-L$libdir'
       ;;
-    freebsd1*)
-      ld_shlibs=no
-      ;;
     freebsd2.2*)
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
@@ -359,7 +375,7 @@
       hardcode_direct=yes
       hardcode_minus_L=yes
       ;;
-    freebsd* | kfreebsd*-gnu | dragonfly*)
+    freebsd* | dragonfly*)
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
       ;;
@@ -411,19 +427,25 @@
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
       hardcode_libdir_separator=:
       ;;
+    *nto* | *qnx*)
+      ;;
     openbsd*)
-      hardcode_direct=yes
-      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      if test -f /usr/libexec/ld.so; then
+        hardcode_direct=yes
+        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        else
+          case "$host_os" in
+            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+              hardcode_libdir_flag_spec='-R$libdir'
+              ;;
+            *)
+              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+              ;;
+          esac
+        fi
       else
-        case "$host_os" in
-          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-            hardcode_libdir_flag_spec='-R$libdir'
-            ;;
-          *)
-            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-            ;;
-        esac
+        ld_shlibs=no
       fi
       ;;
     os2*)
@@ -471,7 +493,7 @@
         ld_shlibs=yes
       fi
       ;;
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
       ;;
     sysv5* | sco3.2v5* | sco5v6*)
       hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
@@ -487,34 +509,58 @@
 fi
 
 # Check dynamic linker characteristics
-# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec=      # the last element of library_names_spec in libtool.m4
 libname_spec='lib$name'
 case "$host_os" in
   aix3*)
+    library_names_spec='$libname.a'
     ;;
-  aix4* | aix5*)
+  aix[4-9]*)
+    library_names_spec='$libname$shrext'
     ;;
   amigaos*)
+    case "$host_cpu" in
+      powerpc*)
+        library_names_spec='$libname$shrext' ;;
+      m68k)
+        library_names_spec='$libname.a' ;;
+    esac
     ;;
   beos*)
+    library_names_spec='$libname$shrext'
     ;;
   bsdi[45]*)
+    library_names_spec='$libname$shrext'
     ;;
-  cygwin* | mingw* | pw32*)
+  cygwin* | mingw* | pw32* | cegcc*)
     shrext=.dll
+    library_names_spec='$libname.dll.a $libname.lib'
     ;;
   darwin* | rhapsody*)
     shrext=.dylib
+    library_names_spec='$libname$shrext'
     ;;
   dgux*)
-    ;;
-  freebsd1*)
-    ;;
-  kfreebsd*-gnu)
+    library_names_spec='$libname$shrext'
     ;;
   freebsd* | dragonfly*)
+    case "$host_os" in
+      freebsd[123]*)
+        library_names_spec='$libname$shrext$versuffix' ;;
+      *)
+        library_names_spec='$libname$shrext' ;;
+    esac
     ;;
   gnu*)
+    library_names_spec='$libname$shrext'
+    ;;
+  haiku*)
+    library_names_spec='$libname$shrext'
     ;;
   hpux9* | hpux10* | hpux11*)
     case $host_cpu in
@@ -528,10 +574,13 @@
         shrext=.sl
         ;;
     esac
+    library_names_spec='$libname$shrext'
     ;;
-  interix3*)
+  interix[3-9]*)
+    library_names_spec='$libname$shrext'
     ;;
   irix5* | irix6* | nonstopux*)
+    library_names_spec='$libname$shrext'
     case "$host_os" in
       irix5* | nonstopux*)
         libsuff= shlibsuff=
@@ -548,41 +597,62 @@
     ;;
   linux*oldld* | linux*aout* | linux*coff*)
     ;;
-  linux*)
+  linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    library_names_spec='$libname$shrext'
     ;;
   knetbsd*-gnu)
+    library_names_spec='$libname$shrext'
     ;;
   netbsd*)
+    library_names_spec='$libname$shrext'
     ;;
   newsos6)
+    library_names_spec='$libname$shrext'
     ;;
-  nto-qnx*)
+  *nto* | *qnx*)
+    library_names_spec='$libname$shrext'
     ;;
   openbsd*)
+    library_names_spec='$libname$shrext$versuffix'
     ;;
   os2*)
     libname_spec='$name'
     shrext=.dll
+    library_names_spec='$libname.a'
     ;;
   osf3* | osf4* | osf5*)
+    library_names_spec='$libname$shrext'
+    ;;
+  rdos*)
     ;;
   solaris*)
+    library_names_spec='$libname$shrext'
     ;;
   sunos4*)
+    library_names_spec='$libname$shrext$versuffix'
     ;;
   sysv4 | sysv4.3*)
+    library_names_spec='$libname$shrext'
     ;;
   sysv4*MP*)
+    library_names_spec='$libname$shrext'
     ;;
   sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    library_names_spec='$libname$shrext'
+    ;;
+  tpf*)
+    library_names_spec='$libname$shrext'
     ;;
   uts4*)
+    library_names_spec='$libname$shrext'
     ;;
 esac
 
 sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
 escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
 shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
 escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
 
 LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
@@ -596,6 +666,12 @@
 # Shared library suffix (normally "so").
 shlibext="$shlibext"
 
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
 # Flag to hardcode \$libdir into a binary during linking.
 # This must work even if \$libdir does not exist.
 hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 1c366df..8df5511 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2005-07-08'
+timestamp='2012-12-06'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -20,9 +21,7 @@
 # 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., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -31,13 +30,16 @@
 
 
 # Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -71,7 +73,8 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
@@ -119,11 +122,18 @@
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -146,10 +156,13 @@
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray)
+	-apple | -axis | -knuth | -cray | -microblaze*)
 		os=
 		basic_machine=$1
 		;;
+	-bluegene*)
+		os=-cnk
+		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
 		basic_machine=$1
@@ -164,13 +177,17 @@
 		os=-chorusos
 		basic_machine=$1
 		;;
- 	-chorusrdb)
- 		os=-chorusrdb
+	-chorusrdb)
+		os=-chorusrdb
 		basic_machine=$1
- 		;;
+		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
 	-sco5)
 		os=-sco3.2v5
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -187,6 +204,10 @@
 		# Don't forget version if it is 3.2v4 or newer.
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
 	-sco*)
 		os=-sco3.2v2
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -204,6 +225,12 @@
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -228,23 +255,34 @@
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| arc \
+	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+	| avr | avr32 \
+	| be32 | be64 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| fr30 | frv \
+	| epiphany \
+	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
-	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+	| le32 | le64 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
-	| mips64vr | mips64vrel \
+	| mips64octeon | mips64octeonel \
 	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
 	| mips64vr4100 | mips64vr4100el \
 	| mips64vr4300 | mips64vr4300el \
 	| mips64vr5000 | mips64vr5000el \
@@ -257,35 +295,65 @@
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
-	| ms1 \
+	| moxie \
+	| mt \
 	| msp430 \
+	| nds32 | nds32le | nds32be \
+	| nios | nios2 \
 	| ns16k | ns32k \
+	| open8 \
 	| or32 \
 	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
-	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| rl78 | rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b \
-	| strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
-	| v850 | v850e \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| we32k \
-	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
-	| z8k)
+	| x86 | xc16x | xstormy16 | xtensa \
+	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m32c)
-		basic_machine=$basic_machine-unknown
+	c54x)
+		basic_machine=tic54x-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
 	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
 		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
 
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
@@ -301,29 +369,37 @@
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* \
+	| avr-* | avr32-* \
+	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
 	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
-	| m32r-* | m32rle-* \
+	| le32-* | le64-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| microblaze-* | microblazeel-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
-	| mips64vr-* | mips64vrel-* \
+	| mips64octeon-* | mips64octeonel-* \
 	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
 	| mips64vr4100-* | mips64vr4100el-* \
 	| mips64vr4300-* | mips64vr4300el-* \
 	| mips64vr5000-* | mips64vr5000el-* \
@@ -336,30 +412,38 @@
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
-	| ms1-* \
+	| mt-* \
 	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
+	| nios-* | nios2-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
-	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
 	| tron-* \
-	| v850-* | v850e-* | vax-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
-	| xstormy16-* | xtensa-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
+	| xstormy16-* | xtensa*-* \
 	| ymp-* \
-	| z8k-*)
+	| z8k-* | z80-*)
 		;;
-	m32c-*)
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
 		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
@@ -377,7 +461,7 @@
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
+	abacus)
 		basic_machine=abacus-unknown
 		;;
 	adobe68k)
@@ -423,6 +507,10 @@
 		basic_machine=m68k-apollo
 		os=-bsd
 		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -431,10 +519,35 @@
 		basic_machine=ns32k-sequent
 		os=-dynix
 		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
+	cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
 	convex-c1)
 		basic_machine=c1-convex
 		os=-bsd
@@ -463,8 +576,8 @@
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16c)
-		basic_machine=cr16c-unknown
+	cr16 | cr16-*)
+		basic_machine=cr16-unknown
 		os=-elf
 		;;
 	crds | unos)
@@ -502,6 +615,10 @@
 		basic_machine=m88k-motorola
 		os=-sysv3
 		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
 	djgpp)
 		basic_machine=i586-pc
 		os=-msdosdjgpp
@@ -617,7 +734,6 @@
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -656,6 +772,14 @@
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	m88k-omron*)
 		basic_machine=m88k-omron
 		;;
@@ -667,10 +791,21 @@
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	microblaze*)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw64)
+		basic_machine=x86_64-pc
+		os=-mingw64
+		;;
 	mingw32)
 		basic_machine=i386-pc
 		os=-mingw32
 		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
 	miniframe)
 		basic_machine=m68000-convergent
 		;;
@@ -696,10 +831,21 @@
 		basic_machine=i386-pc
 		os=-msdos
 		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -764,6 +910,12 @@
 	np1)
 		basic_machine=np1-gould
 		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
@@ -794,6 +946,14 @@
 		basic_machine=i860-intel
 		os=-osf
 		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	pbd)
 		basic_machine=sparc-tti
 		;;
@@ -803,6 +963,12 @@
 	pc532 | pc532-*)
 		basic_machine=ns32k-pc532
 		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	pentium | p5 | k5 | k6 | nexgen | viac3)
 		basic_machine=i586-pc
 		;;
@@ -832,9 +998,10 @@
 		;;
 	power)	basic_machine=power-ibm
 		;;
-	ppc)	basic_machine=powerpc-unknown
+	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
@@ -859,6 +1026,14 @@
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
+	rdos | rdos64)
+		basic_machine=x86_64-pc
+		os=-rdos
+		;;
+	rdos32)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
 	rom68k)
 		basic_machine=m68k-rom68k
 		os=-coff
@@ -885,6 +1060,10 @@
 	sb1el)
 		basic_machine=mipsisa64sb1el-unknown
 		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
 	sei)
 		basic_machine=mips-sei
 		os=-seiux
@@ -896,6 +1075,9 @@
 		basic_machine=sh-hitachi
 		os=-hms
 		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
 	sh64)
 		basic_machine=sh64-unknown
 		;;
@@ -917,6 +1099,9 @@
 		basic_machine=i860-stratus
 		os=-sysv4
 		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -973,17 +1158,9 @@
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
+	tile*)
+		basic_machine=$basic_machine-unknown
+		os=-linux-gnu
 		;;
 	tx39)
 		basic_machine=mipstx39-unknown
@@ -1052,6 +1229,9 @@
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
@@ -1060,6 +1240,10 @@
 		basic_machine=z8k-unknown
 		os=-sim
 		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
 	none)
 		basic_machine=none-none
 		os=-none
@@ -1098,10 +1282,10 @@
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b)
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
 		basic_machine=sparc-sun
 		;;
 	cydra)
@@ -1145,9 +1329,12 @@
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
+	-auroraux)
+		os=-auroraux
+		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
@@ -1168,27 +1355,31 @@
 	# Each alternative MUST END IN A *, to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
+	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1227,7 +1418,7 @@
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
+	-os400*)
 		os=-os400
 		;;
 	-wince*)
@@ -1276,7 +1467,7 @@
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
+	-tpf*)
 		os=-tpf
 		;;
 	-triton*)
@@ -1318,6 +1509,11 @@
 	-zvmoe)
 		os=-zvmoe
 		;;
+	-dicos*)
+		os=-dicos
+		;;
+	-nacl*)
+		;;
 	-none)
 		;;
 	*)
@@ -1340,6 +1536,12 @@
 # system, and we'll never get to this point.
 
 case $basic_machine in
+	score-*)
+		os=-elf
+		;;
+	spu-*)
+		os=-elf
+		;;
 	*-acorn)
 		os=-riscix1.2
 		;;
@@ -1349,9 +1551,21 @@
 	arm*-semi)
 		os=-aout
 		;;
-    c4x-* | tic4x-*)
-        os=-coff
-        ;;
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	hexagon-*)
+		os=-elf
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
+		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
 		os=-tops20
@@ -1370,13 +1584,13 @@
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
 		;;
+	mep-*)
+		os=-elf
+		;;
 	mips*-cisco)
 		os=-elf
 		;;
@@ -1401,7 +1615,7 @@
 	*-ibm)
 		os=-aix
 		;;
-    	*-knuth)
+	*-knuth)
 		os=-mmixware
 		;;
 	*-wec)
@@ -1506,7 +1720,7 @@
 			-sunos*)
 				vendor=sun
 				;;
-			-aix*)
+			-cnk*|-aix*)
 				vendor=ibm
 				;;
 			-beos*)
diff --git a/build-aux/cross-options.pl b/build-aux/cross-options.pl
new file mode 100755
index 0000000..7762e27
--- /dev/null
+++ b/build-aux/cross-options.pl
@@ -0,0 +1,79 @@
+#! /usr/bin/env perl
+
+use warnings;
+use 5.005;
+use strict;
+
+my %option;
+my %directive;
+my $scanner = `grep -i '"%[a-z]' $ARGV[0]`;
+$scanner =~ s/"\[-_\]"/-/g;
+while (<STDIN>)
+{
+    if (/^\s*             # Initial spaces.
+        (?:(-\w),\s+)?    # $1: $short: Possible short option.
+        (--[-\w]+)        # $2: $long:  Long option.
+        (\[?)             # $3: $opt:   '[' iff the argument is optional.
+        (?:=(\S+))?       # $4: $arg:   Possible argument name.
+        \s                # Spaces.
+        /x)
+    {
+	my ($short, $long, $opt, $arg) = ($1, $2, $3, $4);
+	$short = '' if ! defined $short;
+	$short = '-d' if $long eq '--defines' && ! $short;
+	my $dir = '%' . substr($long, 2);
+	if (index ($scanner, "\"$dir\"") < 0)
+	{
+	  if ($long eq '--force-define') { $dir = '%define'; }
+	  else { $dir = ''; }
+	}
+	if ($arg)
+	{
+            # if $opt, $arg contains the closing ].
+            substr ($arg, -1) = ''
+                if $opt eq '[';
+	    $arg =~ s/^=//;
+            $arg = lc ($arg);
+	    my $dir_arg = $arg;
+            # If the argument is compite (e.g., for --define[=NAME[=VALUE]]),
+            # put each word in @var, to build @var{name}[=@var{value}], not
+            # @var{name[=value]}].
+	    $arg =~ s/(\w+)/\@var{$1}/g;
+	    my $long_arg = "=$arg";
+	    if ($opt eq '[') {
+	      $long_arg = "[$long_arg]";
+	      $arg = "[$arg]";
+	    }
+	    # For arguments of directives: this only works if all arguments
+	    # are strings and have the same syntax as on the command line.
+	    if ($dir_arg eq 'name[=value]')
+	    {
+		$dir_arg = '@var{name} ["@var{value}"]';
+	    }
+	    else
+	    {
+		$dir_arg =~ s/(\w+)/\@var{"$1"}/g;
+		$dir_arg = '[' . $dir_arg . ']'
+		    if $opt eq '[';
+	    }
+	    $long = "$long$long_arg";
+	    $short = "$short $arg" if $short && $short ne '-d';
+	    $dir = "$dir $dir_arg" if $dir;
+	}
+	$option{$long} = $short;
+	$directive{$long} = $dir;
+    }
+}
+
+my $sep = '';
+foreach my $long (sort keys %option)
+{
+    # Avoid trailing spaces.
+    print $sep;
+    $sep = "\n";
+    print '@item @option{', $long, "}\n\@tab";
+    print ' @option{', $option{$long}, '}' if $option{$long};
+    print "\n\@tab";
+    print ' @code{', $directive{$long}, '}' if $directive{$long};
+    print "\n";
+}
diff --git a/build-aux/darwin11.4.0.valgrind b/build-aux/darwin11.4.0.valgrind
new file mode 100644
index 0000000..ff355eb
--- /dev/null
+++ b/build-aux/darwin11.4.0.valgrind
@@ -0,0 +1,64 @@
+# Copyright (C) 2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# Valgrind suppression file for Bison.
+
+{
+   Mac OS X initialization
+   Memcheck:Leak
+   fun:?alloc*
+   ...
+   fun:*ImageLoader*
+}
+
+{
+   Mac OS X initialization
+   Memcheck:Leak
+   fun:?alloc*
+   ...
+   fun:*dyld*
+}
+
+{
+   Mac OS X initialization
+   Memcheck:Leak
+   fun:?alloc*
+   ...
+   fun:__CFInitialize
+}
+
+{
+   Mac OS X I/O buffer
+   Memcheck:Leak
+   fun:malloc
+   fun:__smakebuf
+   fun:__swsetup
+   fun:__sfvwrite
+   fun:fwrite
+}
+
+{
+   Mac OS X I/O buffer
+   Memcheck:Leak
+   fun:malloc
+   fun:__smakebuf
+   fun:__swsetup
+   fun:__swbuf
+   fun:putchar
+}
+
+# Local Variables:
+# mode: shell-script
+# End:
diff --git a/build-aux/depcomp b/build-aux/depcomp
index 04701da..3f02f5d 100755
--- a/build-aux/depcomp
+++ b/build-aux/depcomp
@@ -1,9 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2005-07-09.11
+scriptversion=2012-10-18.11; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 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
@@ -16,9 +16,7 @@
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -29,9 +27,9 @@
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
   -h | --h*)
     cat <<\EOF
 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
@@ -41,11 +39,11 @@
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake@gnu.org>.
@@ -58,6 +56,66 @@
     ;;
 esac
 
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -70,6 +128,9 @@
 
 rm -f "$tmpdepfile"
 
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
 # Some modes work just like other modes, but use different flags.  We
 # parameterize here, but still list the modes in the big case below,
 # to make depend.m4 easier to write.  Note that we *cannot* use a case
@@ -81,9 +142,32 @@
 fi
 
 if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
+  # This is just like dashmstdout with a different argument.
+  dashmflag=-xM
+  depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
 fi
 
 case "$depmode" in
@@ -91,10 +175,22 @@
 ## gcc 3 implements dependency tracking that does exactly what
 ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
 ## it if -MD -MP comes after the -MF stuff.  Hmm.
-  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -102,13 +198,17 @@
   ;;
 
 gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
 ## There are various ways to get dependency output from gcc.  Here's
 ## why we pick this rather obscure method:
 ## - Don't want to use -MD because we'd like the dependencies to end
 ##   up in a subdir.  Having to rename by hand is ugly.
 ##   (We might end up doing this anyway to support other compilers.)
 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
+##   -MM, not -M (despite what the docs say).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
 ## - Using -M directly means running the compiler twice (even worse
 ##   than renaming).
   if test -z "$gccflag"; then
@@ -116,31 +216,31 @@
   fi
   "$@" -Wp,"$gccflag$tmpdepfile"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
+  # The second -e expression handles DOS-style file names with drive
+  # letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
-## well.
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -158,8 +258,7 @@
     "$@" -MDupdate "$tmpdepfile"
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -167,99 +266,156 @@
 
   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
     echo "$object : \\" > "$depfile"
-
     # Clip off the initial element (the dependent).  Don't try to be
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> $depfile
-    echo >> $depfile
-
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
+    echo >> "$depfile"
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> $depfile
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
   else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
-  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
-  tmpdepfile="$stripped.u"
+  set_dir_from "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
     "$@" -Wc,-M
   else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
     "$@" -M
   fi
   stat=$?
-
-  if test -f "$tmpdepfile"; then :
-  else
-    stripped=`echo "$stripped" | sed 's,^.*/,,'`
-    tmpdepfile="$stripped.u"
-  fi
-
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
     exit $stat
   fi
 
-  if test -f "$tmpdepfile"; then
-    outname="$stripped.o"
-    # Each line is of the form `foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
-    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
   fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
-icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want:
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\' :
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
 
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
+
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -271,68 +427,140 @@
   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
   # Some versions of the HPUX 10.20 sed can't process this invocation
   # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  set_dir_from  "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
 tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  # The Tru64 compiler uses -MD to generate dependencies as a side
+  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+  # dependencies in 'foo.d' instead, so we check for that too.
+  # Subdirectories are respected.
+  set_dir_from  "$object"
+  set_base_from "$object"
 
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mecanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
 
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
 
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
 
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
@@ -345,13 +573,13 @@
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -371,18 +599,18 @@
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -396,41 +624,51 @@
   "$@" || exit $?
   # Remove any Libtool call
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
   # X makedepend
   shift
-  cleared=no
-  for arg in "$@"; do
+  cleared=no eat=no
+  for arg
+  do
     case $cleared in
     no)
       set ""; shift
       cleared=yes ;;
     esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
     case "$arg" in
     -D*|-I*)
       set fnord "$@" "$arg"; shift ;;
     # Strip any option that makedepend may not understand.  Remove
     # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
     -*|$object)
       ;;
     *)
       set fnord "$@" "$arg"; shift ;;
     esac
   done
-  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile" "$tmpdepfile".bak
   ;;
 
@@ -441,13 +679,13 @@
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -466,10 +704,10 @@
     esac
   done
 
-  "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
+  "$@" -E \
+    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+    | sed '$ s: \\$::' > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
   cat < "$tmpdepfile" >> "$depfile"
@@ -479,35 +717,56 @@
 
 msvisualcpp)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
+  # always write the preprocessed file to stdout.
   "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
   IFS=" "
   for arg
   do
     case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-	set fnord "$@"
-	shift
-	shift
-	;;
+        set fnord "$@"
+        shift
+        shift
+        ;;
     *)
-	set fnord "$@" "$arg"
-	shift
-	shift
-	;;
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
     esac
   done
-  "$@" -E |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 none)
   exec "$@"
   ;;
@@ -526,5 +785,6 @@
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/do-release-commit-and-tag b/build-aux/do-release-commit-and-tag
new file mode 100755
index 0000000..fa89e76
--- /dev/null
+++ b/build-aux/do-release-commit-and-tag
@@ -0,0 +1,179 @@
+#!/bin/sh
+# In a git/autoconf/automake-enabled project with a NEWS file and a version-
+# controlled .prev-version file, automate the procedure by which we record
+# the date, release-type and version string in the NEWS file.  That commit
+# will serve to identify the release, so apply a signed tag to it as well.
+VERSION=2012-08-01.09 # UTC
+
+# Note: this is a bash script (could be zsh or dash)
+
+# Copyright (C) 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+ME=$(basename "$0")
+warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
+die() { warn "$*"; exit 1; }
+
+help()
+{
+  cat <<EOF
+Usage: $ME [OPTION...] VERSION RELEASE_TYPE
+
+Run this script from top_srcdir to perform the final pre-release NEWS
+update in which the date, release-type and version string are
+recorded.  Commit that result with a log entry marking the release,
+and apply a signed tag.  Run it from your project's top-level
+directory.
+
+Requirements:
+- you use git for version-control
+- a version-controlled .prev-version file
+- a NEWS file, with line 3 identical to this:
+$noteworthy_stub
+
+Options:
+  --branch=BRANCH     set release branch (default: $branch)
+  -C, --builddir=DIR  location of (configured) Makefile (default: $builddir)
+  --help              print this help, then exit
+  --version           print version number, then exit
+
+EXAMPLE:
+To update NEWS and tag the beta 8.1 release of coreutils, I would run this:
+
+  $ME 8.1 beta
+
+Report bugs and patches to <bug-gnulib@gnu.org>.
+EOF
+  exit
+}
+
+version()
+{
+  year=$(echo "$VERSION" | sed 's/[^0-9].*//')
+  cat <<EOF
+$ME $VERSION
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+  exit
+}
+
+## ------ ##
+## Main.  ##
+## ------ ##
+
+# Constants.
+noteworthy='* Noteworthy changes in release'
+noteworthy_stub="$noteworthy ?.? (????-??-??) [?]"
+
+# Variables.
+branch=$(git branch | sed -ne '/^\* /{s///;p;q;}')
+builddir=.
+
+while test $# != 0
+do
+  # Handle --option=value by splitting apart and putting back on argv.
+  case $1 in
+    --*=*)
+      opt=$(echo "$1" | sed -e 's/=.*//')
+      val=$(echo "$1" | sed -e 's/[^=]*=//')
+      shift
+      set dummy "$opt" "$val" ${1+"$@"}; shift
+      ;;
+  esac
+
+  case $1 in
+    --help|--version) ${1#--};;
+    --branch) shift; branch=$1; shift ;;
+    -C|--builddir) shift; builddir=$1; shift ;;
+    --*) die "unrecognized option: $1";;
+    *) break;;
+  esac
+done
+
+test $# = 2 \
+  || die "Usage: $ME [OPTION...] VERSION TYPE"
+
+ver=$1
+type=$2
+
+
+## ---------------------- ##
+## First, sanity checks.  ##
+## ---------------------- ##
+
+# Verify that $ver looks like a version number, and...
+echo "$ver"|grep -E '^[0-9][0-9.]*[0-9]$' > /dev/null \
+  || die "invalid version: $ver"
+prev_ver=$(cat .prev-version) \
+  || die 'failed to determine previous version number from .prev-version'
+
+# Verify that $ver is sensible (> .prev-version).
+case $(printf "$prev_ver\n$ver\n"|sort -V -u|tr '\n' ':') in
+  "$prev_ver:$ver:") ;;
+  *) die "invalid version: $ver (<= $prev_ver)";;
+esac
+
+case $type in
+  alpha|beta|stable) ;;
+  *) die "invalid release type: $type";;
+esac
+
+# No local modifications allowed.
+case $(git diff-index --name-only HEAD) in
+  '') ;;
+  *) die 'this tree is dirty; commit your changes first';;
+esac
+
+# Ensure the current branch name is correct:
+curr_br=$(git rev-parse --symbolic-full-name HEAD)
+test "$curr_br" = refs/heads/$branch || die not on branch $branch
+
+# Extract package name from Makefile.
+Makefile=$builddir/Makefile
+pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' "$Makefile") \
+  || die "failed to determine package name from $Makefile"
+
+# Check that line 3 of NEWS is the stub line about to be replaced.
+test "$(sed -n 3p NEWS)" = "$noteworthy_stub" \
+  || die "line 3 of NEWS must be exactly '$noteworthy_stub'"
+
+## --------------- ##
+## Then, changes.  ##
+## --------------- ##
+
+# Update NEWS to have today's date, plus desired version number and $type.
+perl -MPOSIX -ni -e 'my $today = strftime "%F", localtime time;' \
+ -e 'my ($type, $ver) = qw('"$type $ver"');' \
+ -e 'my $pfx = "'"$noteworthy"'";' \
+ -e 'print $.==3 ? "$pfx $ver ($today) [$type]\n" : $_' \
+     NEWS || die 'failed to update NEWS'
+
+printf "version $ver\n\n* NEWS: Record release date.\n" \
+    | git commit -F -  -a || die 'git commit failed'
+git tag -s -m "$pkg $ver" v$ver HEAD || die 'git tag failed'
+
+# Local variables:
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "VERSION="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: " # UTC"
+# End:
diff --git a/build-aux/gendocs.sh b/build-aux/gendocs.sh
new file mode 100755
index 0000000..0c0bc4b
--- /dev/null
+++ b/build-aux/gendocs.sh
@@ -0,0 +1,434 @@
+#!/bin/sh -e
+# gendocs.sh -- generate a GNU manual in many formats.  This script is
+#   mentioned in maintain.texi.  See the help message below for usage details.
+
+scriptversion=2012-10-27.11
+
+# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+#
+# Original author: Mohit Agarwal.
+# Send bug reports and any other correspondence to bug-texinfo@gnu.org.
+#
+# The latest version of this script, and the companion template, is
+# available from Texinfo CVS:
+# http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh
+# http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template
+#
+# An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib).
+
+# TODO:
+# - image importation was only implemented for HTML generated by
+#   makeinfo.  But it should be simple enough to adjust.
+# - images are not imported in the source tarball.  All the needed
+#   formats (PDF, PNG, etc.) should be included.
+
+prog=`basename "$0"`
+srcdir=`pwd`
+
+scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh"
+templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template"
+
+: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
+: ${MAKEINFO="makeinfo"}
+: ${TEXI2DVI="texi2dvi -t @finalout"}
+: ${DOCBOOK2HTML="docbook2html"}
+: ${DOCBOOK2PDF="docbook2pdf"}
+: ${DOCBOOK2TXT="docbook2txt"}
+: ${GENDOCS_TEMPLATE_DIR="."}
+: ${PERL='perl'}
+: ${TEXI2HTML="texi2html"}
+unset CDPATH
+unset use_texi2html
+
+version="gendocs.sh $scriptversion
+
+Copyright 2012 Free Software Foundation, Inc.
+There is NO warranty.  You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
+
+Generate output in various formats from PACKAGE.texinfo (or .texi or
+.txi) source.  See the GNU Maintainers document for a more extensive
+discussion:
+  http://www.gnu.org/prep/maintain_toc.html
+
+Options:
+  -s SRCFILE  read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
+  -o OUTDIR   write files into OUTDIR, instead of manual/.
+  -I DIR      append DIR to the Texinfo search path.
+  --email ADR use ADR as contact in generated web pages.
+  --docbook   convert through DocBook too (xml, txt, html, pdf).
+  --html ARG  pass indicated ARG to makeinfo or texi2html for HTML targets.
+  --info ARG  pass indicated ARG to makeinfo for Info, instead of --no-split.
+  --texi2html use texi2html to generate HTML targets.
+  --help      display this help and exit successfully.
+  --version   display version information and exit successfully.
+
+Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
+
+Typical sequence:
+  cd PACKAGESOURCE/doc
+  wget \"$scripturl\"
+  wget \"$templateurl\"
+  $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
+
+Output will be in a new subdirectory \"manual\" (by default;
+use -o OUTDIR to override).  Move all the new files into your web CVS
+tree, as explained in the Web Pages node of maintain.texi.
+
+Please do use the --email ADDRESS option to specify your bug-reporting
+address in the generated HTML pages.
+
+MANUAL-TITLE is included as part of the HTML <title> of the overall
+manual/index.html file.  It should include the name of the package being
+documented.  manual/index.html is created by substitution from the file
+$GENDOCS_TEMPLATE_DIR/gendocs_template.  (Feel free to modify the
+generic template for your own purposes.)
+
+If you have several manuals, you'll need to run this script several
+times with different MANUAL values, specifying a different output
+directory with -o each time.  Then write (by hand) an overall index.html
+with links to them all.
+
+If a manual's Texinfo sources are spread across several directories,
+first copy or symlink all Texinfo sources into a single directory.
+(Part of the script's work is to make a tar.gz of the sources.)
+
+As implied above, by default monolithic Info files are generated.
+If you want split Info, or other Info options, use --info to override.
+
+You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML,
+and PERL to control the programs that get executed, and
+GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
+looked for.  With --docbook, the environment variables DOCBOOK2HTML,
+DOCBOOK2PDF, and DOCBOOK2TXT are also respected.
+
+By default, makeinfo and texi2dvi are run in the default (English)
+locale, since that's the language of most Texinfo manuals.  If you
+happen to have a non-English manual and non-English web site, see the
+SETLANG setting in the source.
+
+Email bug reports or enhancement requests to bug-texinfo@gnu.org.
+"
+
+MANUAL_TITLE=
+PACKAGE=
+EMAIL=webmasters@gnu.org  # please override with --email
+commonarg= # Options passed to all the tools (-I dir).
+dirs=      # -I's directories.
+htmlarg=
+infoarg=--no-split
+outdir=manual
+srcfile=
+
+while test $# -gt 0; do
+  case $1 in
+    --email) shift; EMAIL=$1;;
+    --help) echo "$usage"; exit 0;;
+    --version) echo "$version"; exit 0;;
+    -s) shift; srcfile=$1;;
+    -o) shift; outdir=$1;;
+    -I) shift; commonarg="$commonarg -I '$1'"; dirs="$dirs $1";;
+    --docbook) docbook=yes;;
+    --html) shift; htmlarg=$1;;
+    --info) shift; infoarg=$1;;
+    --texi2html) use_texi2html=1;;
+    -*)
+      echo "$0: Unknown option \`$1'." >&2
+      echo "$0: Try \`--help' for more information." >&2
+      exit 1;;
+    *)
+      if test -z "$PACKAGE"; then
+        PACKAGE=$1
+      elif test -z "$MANUAL_TITLE"; then
+        MANUAL_TITLE=$1
+      else
+        echo "$0: extra non-option argument \`$1'." >&2
+        exit 1
+      fi;;
+  esac
+  shift
+done
+
+# For most of the following, the base name is just $PACKAGE
+base=$PACKAGE
+
+if test -n "$srcfile"; then
+  # but here, we use the basename of $srcfile
+  base=`basename "$srcfile"`
+  case $base in
+    *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
+  esac
+  PACKAGE=$base
+elif test -s "$srcdir/$PACKAGE.texinfo"; then
+  srcfile=$srcdir/$PACKAGE.texinfo
+elif test -s "$srcdir/$PACKAGE.texi"; then
+  srcfile=$srcdir/$PACKAGE.texi
+elif test -s "$srcdir/$PACKAGE.txi"; then
+  srcfile=$srcdir/$PACKAGE.txi
+else
+  echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
+  exit 1
+fi
+
+if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
+  echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
+  echo "$0: it is available from $templateurl." >&2
+  exit 1
+fi
+
+# Function to return size of $1 in something resembling kilobytes.
+calcsize()
+{
+  size=`ls -ksl $1 | awk '{print $1}'`
+  echo $size
+}
+
+# copy_images OUTDIR HTML-FILE...
+# -------------------------------
+# Copy all the images needed by the HTML-FILEs into OUTDIR.  Look
+# for them in the -I directories.
+copy_images()
+{
+  local odir
+  odir=$1
+  shift
+  $PERL -n -e "
+BEGIN {
+  \$me = '$prog';
+  \$odir = '$odir';
+  @dirs = qw($dirs);
+}
+" -e '
+/<img src="(.*?)"/g && ++$need{$1};
+
+END {
+  #print "$me: @{[keys %need]}\n";  # for debugging, show images found.
+  FILE: for my $f (keys %need) {
+    for my $d (@dirs) {
+      if (-f "$d/$f") {
+        use File::Basename;
+        my $dest = dirname ("$odir/$f");
+        #
+        use File::Path;
+        -d $dest || mkpath ($dest)
+          || die "$me: cannot mkdir $dest: $!\n";
+        #
+        use File::Copy;
+        copy ("$d/$f", $dest)
+          || die "$me: cannot copy $d/$f to $dest: $!\n";
+        next FILE;
+      }
+    }
+    die "$me: $ARGV: cannot find image $f\n";
+  }
+}
+' -- "$@" || exit 1
+}
+
+case $outdir in
+  /*) abs_outdir=$outdir;;
+  *)  abs_outdir=$srcdir/$outdir;;
+esac
+
+echo "Generating output formats for $srcfile"
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
+echo "Generating info file(s)... ($cmd)"
+eval "$cmd"
+mkdir -p "$outdir/"
+tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
+info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
+# do not mv the info files, there's no point in having them available
+# separately on the web.
+
+cmd="$SETLANG $TEXI2DVI $commonarg \"$srcfile\""
+echo "Generating dvi ... ($cmd)"
+eval "$cmd"
+
+# compress/finish dvi:
+gzip -f -9 $PACKAGE.dvi
+dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
+mv $PACKAGE.dvi.gz "$outdir/"
+
+cmd="$SETLANG $TEXI2DVI --pdf $commonarg \"$srcfile\""
+echo "Generating pdf ... ($cmd)"
+eval "$cmd"
+pdf_size=`calcsize $PACKAGE.pdf`
+mv $PACKAGE.pdf "$outdir/"
+
+opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
+cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+echo "Generating ASCII... ($cmd)"
+eval "$cmd"
+ascii_size=`calcsize $PACKAGE.txt`
+gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
+ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
+mv $PACKAGE.txt "$outdir/"
+
+html_split()
+{
+  opt="--split=$1 $commonarg $htmlarg --node-files"
+  cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
+  echo "Generating html by $1... ($cmd)"
+  eval "$cmd"
+  split_html_dir=$PACKAGE.html
+  (
+    cd ${split_html_dir} || exit 1
+    ln -sf ${PACKAGE}.html index.html
+    tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
+  )
+  eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"`
+  rm -f "$outdir"/html_$1/*.html
+  mkdir -p "$outdir/html_$1/"
+  mv ${split_html_dir}/*.html "$outdir/html_$1/"
+  rmdir ${split_html_dir}
+}
+
+if test -z "$use_texi2html"; then
+  opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg"
+  cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+  echo "Generating monolithic html... ($cmd)"
+  rm -rf $PACKAGE.html  # in case a directory is left over
+  eval "$cmd"
+  html_mono_size=`calcsize $PACKAGE.html`
+  gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
+  html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
+  copy_images "$outdir/" $PACKAGE.html
+  mv $PACKAGE.html "$outdir/"
+
+  opt="--html -o $PACKAGE.html $commonarg $htmlarg"
+  cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+  echo "Generating html by node... ($cmd)"
+  eval "$cmd"
+  split_html_dir=$PACKAGE.html
+  copy_images $split_html_dir/ $split_html_dir/*.html
+  (
+    cd $split_html_dir || exit 1
+    tar -czf "$abs_outdir/$PACKAGE.html_node.tar.gz" -- *
+  )
+  html_node_tgz_size=`calcsize "$outdir/$PACKAGE.html_node.tar.gz"`
+  rm -rf "$outdir/html_node/"
+  mv $split_html_dir "$outdir/html_node/"
+else
+  opt="--output $PACKAGE.html $commonarg $htmlarg"
+  cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
+  echo "Generating monolithic html... ($cmd)"
+  rm -rf $PACKAGE.html  # in case a directory is left over
+  eval "$cmd"
+  html_mono_size=`calcsize $PACKAGE.html`
+  gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
+  html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
+  mv $PACKAGE.html "$outdir/"
+
+  html_split node
+  html_split chapter
+  html_split section
+fi
+
+echo Making .tar.gz for sources...
+d=`dirname $srcfile`
+(
+  cd "$d"
+  srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null` || true
+  tar cvzfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
+)
+texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
+
+if test -n "$docbook"; then
+  opt="-o - --docbook $commonarg"
+  cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
+  echo "Generating docbook XML... ($cmd)"
+  eval "$cmd"
+  docbook_xml_size=`calcsize $PACKAGE-db.xml`
+  gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
+  docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
+  mv $PACKAGE-db.xml "$outdir/"
+
+  split_html_db_dir=html_node_db
+  opt="$commonarg -o $split_html_db_dir"
+  cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\""
+  echo "Generating docbook HTML... ($cmd)"
+  eval "$cmd"
+  (
+    cd ${split_html_db_dir} || exit 1
+    tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
+  )
+  html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
+  rm -f "$outdir"/html_node_db/*.html
+  mkdir -p "$outdir/html_node_db"
+  mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
+  rmdir ${split_html_db_dir}
+
+  cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
+  echo "Generating docbook ASCII... ($cmd)"
+  eval "$cmd"
+  docbook_ascii_size=`calcsize $PACKAGE-db.txt`
+  mv $PACKAGE-db.txt "$outdir/"
+
+  cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\""
+  echo "Generating docbook PDF... ($cmd)"
+  eval "$cmd"
+  docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
+  mv $PACKAGE-db.pdf "$outdir/"
+fi
+
+echo "Writing index file..."
+if test -z "$use_texi2html"; then
+   CONDS="/%%IF  *HTML_SECTION%%/,/%%ENDIF  *HTML_SECTION%%/d;\
+          /%%IF  *HTML_CHAPTER%%/,/%%ENDIF  *HTML_CHAPTER%%/d"
+else
+   CONDS="/%%ENDIF.*%%/d;/%%IF  *HTML_SECTION%%/d;/%%IF  *HTML_CHAPTER%%/d"
+fi
+
+curdate=`$SETLANG date '+%B %d, %Y'`
+sed \
+   -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
+   -e "s!%%EMAIL%%!$EMAIL!g" \
+   -e "s!%%PACKAGE%%!$PACKAGE!g" \
+   -e "s!%%DATE%%!$curdate!g" \
+   -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
+   -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
+   -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
+   -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
+   -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
+   -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
+   -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
+   -e "s!%%PDF_SIZE%%!$pdf_size!g" \
+   -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
+   -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
+   -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
+   -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
+   -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
+   -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
+   -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
+   -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
+   -e "s,%%SCRIPTURL%%,$scripturl,g" \
+   -e "s!%%SCRIPTNAME%%!$prog!g" \
+   -e "$CONDS" \
+$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
+
+echo "Done, see $outdir/ subdirectory for new files."
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
new file mode 100755
index 0000000..0fa9063
--- /dev/null
+++ b/build-aux/git-version-gen
@@ -0,0 +1,220 @@
+#!/bin/sh
+# Print a version string.
+scriptversion=2012-03-18.17; # UTC
+
+# Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
+# It may be run two ways:
+# - from a git repository in which the "git describe" command below
+#   produces useful output (thus requiring at least one signed tag)
+# - from a non-git-repo directory containing a .tarball-version file, which
+#   presumes this script is invoked like "./git-version-gen .tarball-version".
+
+# In order to use intra-version strings in your project, you will need two
+# separate generated version string files:
+#
+# .tarball-version - present only in a distribution tarball, and not in
+#   a checked-out repository.  Created with contents that were learned at
+#   the last time autoconf was run, and used by git-version-gen.  Must not
+#   be present in either $(srcdir) or $(builddir) for git-version-gen to
+#   give accurate answers during normal development with a checked out tree,
+#   but must be present in a tarball when there is no version control system.
+#   Therefore, it cannot be used in any dependencies.  GNUmakefile has
+#   hooks to force a reconfigure at distribution time to get the value
+#   correct, without penalizing normal development with extra reconfigures.
+#
+# .version - present in a checked-out repository and in a distribution
+#   tarball.  Usable in dependencies, particularly for files that don't
+#   want to depend on config.h but do want to track version changes.
+#   Delete this file prior to any autoconf run where you want to rebuild
+#   files to pick up a version string change; and leave it stale to
+#   minimize rebuild time after unrelated changes to configure sources.
+#
+# As with any generated file in a VC'd directory, you should add
+# /.version to .gitignore, so that you don't accidentally commit it.
+# .tarball-version is never generated in a VC'd directory, so needn't
+# be listed there.
+#
+# Use the following line in your configure.ac, so that $(VERSION) will
+# automatically be up-to-date each time configure is run (and note that
+# since configure.ac no longer includes a version string, Makefile rules
+# should not depend on configure.ac for version updates).
+#
+# AC_INIT([GNU project],
+#         m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+#         [bug-project@example])
+#
+# Then use the following lines in your Makefile.am, so that .version
+# will be present for dependencies, and so that .version and
+# .tarball-version will exist in distribution tarballs.
+#
+# EXTRA_DIST = $(top_srcdir)/.version
+# BUILT_SOURCES = $(top_srcdir)/.version
+# $(top_srcdir)/.version:
+#	echo $(VERSION) > $@-t && mv $@-t $@
+# dist-hook:
+#	echo $(VERSION) > $(distdir)/.tarball-version
+
+
+me=$0
+
+version="git-version-gen $scriptversion
+
+Copyright 2011 Free Software Foundation, Inc.
+There is NO warranty.  You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="\
+Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
+Print a version string.
+
+Options:
+
+   --prefix           prefix of git tags (default 'v')
+
+   --help             display this help and exit
+   --version          output version information and exit
+
+Running without arguments will suffice in most cases."
+
+prefix=v
+
+while test $# -gt 0; do
+  case $1 in
+    --help) echo "$usage"; exit 0;;
+    --version) echo "$version"; exit 0;;
+    --prefix) shift; prefix="$1";;
+    -*)
+      echo "$0: Unknown option '$1'." >&2
+      echo "$0: Try '--help' for more information." >&2
+      exit 1;;
+    *)
+      if test -z "$tarball_version_file"; then
+        tarball_version_file="$1"
+      elif test -z "$tag_sed_script"; then
+        tag_sed_script="$1"
+      else
+        echo "$0: extra non-option argument '$1'." >&2
+        exit 1
+      fi;;
+  esac
+  shift
+done
+
+if test -z "$tarball_version_file"; then
+    echo "$usage"
+    exit 1
+fi
+
+tag_sed_script="${tag_sed_script:-s/x/x/}"
+
+nl='
+'
+
+# Avoid meddling by environment variable of the same name.
+v=
+v_from_git=
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+    v=`cat $tarball_version_file` || v=
+    case $v in
+        *$nl*) v= ;; # reject multi-line output
+        [0-9]*) ;;
+        *) v= ;;
+    esac
+    test -z "$v" \
+        && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2
+fi
+
+if test -n "$v"
+then
+    : # use $v
+# Otherwise, if there is at least one git commit involving the working
+# directory, and "git describe" output looks sensible, use that to
+# derive a version string.
+elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
+    && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
+          || git describe --abbrev=4 HEAD 2>/dev/null` \
+    && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
+    && case $v in
+         $prefix[0-9]*) ;;
+         *) (exit 1) ;;
+       esac
+then
+    # Is this a new git that lists number of commits since the last
+    # tag or the previous older version that did not?
+    #   Newer: v6.10-77-g0f8faeb
+    #   Older: v6.10-g0f8faeb
+    case $v in
+        *-*-*) : git describe is okay three part flavor ;;
+        *-*)
+            : git describe is older two part flavor
+            # Recreate the number of commits and rewrite such that the
+            # result is the same as if we were using the newer version
+            # of git describe.
+            vtag=`echo "$v" | sed 's/-.*//'`
+            commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
+                || { commit_list=failed;
+                     echo "$0: WARNING: git rev-list failed" 1>&2; }
+            numcommits=`echo "$commit_list" | wc -l`
+            v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+            test "$commit_list" = failed && v=UNKNOWN
+            ;;
+    esac
+
+    # Change the first '-' to a '.', so version-comparing tools work properly.
+    # Remove the "g" in git describe's output string, to save a byte.
+    v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
+    v_from_git=1
+else
+    v=UNKNOWN
+fi
+
+v=`echo "$v" |sed "s/^$prefix//"`
+
+# Test whether to append the "-dirty" suffix only if the version
+# string we're using came from git.  I.e., skip the test if it's "UNKNOWN"
+# or if it came from .tarball-version.
+if test -n "$v_from_git"; then
+  # Don't declare a version "dirty" merely because a time stamp has changed.
+  git update-index --refresh > /dev/null 2>&1
+
+  dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
+  case "$dirty" in
+      '') ;;
+      *) # Append the suffix only if there isn't one already.
+          case $v in
+            *-dirty) ;;
+            *) v="$v-dirty" ;;
+          esac ;;
+  esac
+fi
+
+# Omit the trailing newline, so that m4_esyscmd can use the result directly.
+echo "$v" | tr -d "$nl"
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
new file mode 100755
index 0000000..5184edc
--- /dev/null
+++ b/build-aux/gitlog-to-changelog
@@ -0,0 +1,432 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
+# Convert git log output to ChangeLog format.
+
+my $VERSION = '2012-07-29 06:11'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+use warnings;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+  defined fileno STDOUT or return;
+  close STDOUT and return;
+  warn "$ME: failed to close standard output: $!\n";
+  $? ||= 1;
+}
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try '$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS] [ARGS]
+
+Convert git log output to ChangeLog format.  If present, any ARGS
+are passed to "git log".  To avoid ARGS being parsed as options to
+$ME, they may be preceded by '--'.
+
+OPTIONS:
+
+   --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
+                  makes a change to SHA1's commit log text or metadata.
+   --append-dot append a dot to the first line of each commit message if
+                  there is no other punctuation or blank at the end.
+   --no-cluster never cluster commit messages under the same date/author
+                  header; the default is to cluster adjacent commit messages
+                  if their headers are the same and neither commit message
+                  contains multiple paragraphs.
+   --srcdir=DIR the root of the source tree, from which the .git/
+                  directory can be derived.
+   --since=DATE convert only the logs since DATE;
+                  the default is to convert all log entries.
+   --format=FMT set format string for commit subject and body;
+                  see 'man git-log' for the list of format metacharacters;
+                  the default is '%s%n%b%n'
+   --strip-tab  remove one additional leading TAB from commit message lines.
+   --strip-cherry-pick  remove data inserted by "git cherry-pick";
+                  this includes the "cherry picked from commit ..." line,
+                  and the possible final "Conflicts:" paragraph.
+   --help       display this help and exit
+   --version    output version information and exit
+
+EXAMPLE:
+
+  $ME --since=2008-01-01 > ChangeLog
+  $ME -- -n 5 foo > last-5-commits-to-branch-foo
+
+SPECIAL SYNTAX:
+
+The following types of strings are interpreted specially when they appear
+at the beginning of a log message line.  They are not copied to the output.
+
+  Copyright-paperwork-exempt: Yes
+    Append the "(tiny change)" notation to the usual "date name email"
+    ChangeLog header to mark a change that does not require a copyright
+    assignment.
+  Co-authored-by: Joe User <user\@example.com>
+    List the specified name and email address on a second
+    ChangeLog header, denoting a co-author.
+  Signed-off-by: Joe User <user\@example.com>
+    These lines are simply elided.
+
+In a FILE specified via --amend, comment lines (starting with "#") are ignored.
+FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
+a line) referring to a commit in the current project, and CODE refers to one
+or more consecutive lines of Perl code.  Pairs must be separated by one or
+more blank line.
+
+Here is sample input for use with --amend=FILE, from coreutils:
+
+3a169f4c5d9159283548178668d2fae6fced3030
+# fix typo in title:
+s/all tile types/all file types/
+
+1379ed974f1fa39b12e2ffab18b3f7a607082202
+# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
+# Change the author to be Paul.  Note the escaped "@":
+s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
+
+EOF
+    }
+  exit $exit_code;
+}
+
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new string.
+sub shell_quote($)
+{
+  my ($s) = @_;
+  if ($s =~ m![^\w+/.,-]!)
+    {
+      # Convert each single quote to '\''
+      $s =~ s/\'/\'\\\'\'/g;
+      # Then single quote the string.
+      $s = "'$s'";
+    }
+  return $s;
+}
+
+sub quoted_cmd(@)
+{
+  return join (' ', map {shell_quote $_} @_);
+}
+
+# Parse file F.
+# Comment lines (starting with "#") are ignored.
+# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
+# (alone on a line) referring to a commit in the current project, and
+# CODE refers to one or more consecutive lines of Perl code.
+# Pairs must be separated by one or more blank line.
+sub parse_amend_file($)
+{
+  my ($f) = @_;
+
+  open F, '<', $f
+    or die "$ME: $f: failed to open for reading: $!\n";
+
+  my $fail;
+  my $h = {};
+  my $in_code = 0;
+  my $sha;
+  while (defined (my $line = <F>))
+    {
+      $line =~ /^\#/
+        and next;
+      chomp $line;
+      $line eq ''
+        and $in_code = 0, next;
+
+      if (!$in_code)
+        {
+          $line =~ /^([0-9a-fA-F]{40})$/
+            or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
+              $fail = 1, next;
+          $sha = lc $1;
+          $in_code = 1;
+          exists $h->{$sha}
+            and (warn "$ME: $f:$.: duplicate SHA1\n"),
+              $fail = 1, next;
+        }
+      else
+        {
+          $h->{$sha} ||= '';
+          $h->{$sha} .= "$line\n";
+        }
+    }
+  close F;
+
+  $fail
+    and exit 1;
+
+  return $h;
+}
+
+# git_dir_option $SRCDIR
+#
+# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
+# is undef).  Return as a list (0 or 1 element).
+sub git_dir_option($)
+{
+  my ($srcdir) = @_;
+  my @res = ();
+  if (defined $srcdir)
+    {
+      my $qdir = shell_quote $srcdir;
+      my $cmd = "cd $qdir && git rev-parse --show-toplevel";
+      my $qcmd = shell_quote $cmd;
+      my $git_dir = qx($cmd);
+      defined $git_dir
+        or die "$ME: cannot run $qcmd: $!\n";
+      $? == 0
+        or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
+      chomp $git_dir;
+      push @res, "--git-dir=$git_dir/.git";
+    }
+  @res;
+}
+
+{
+  my $since_date;
+  my $format_string = '%s%n%b%n';
+  my $amend_file;
+  my $append_dot = 0;
+  my $cluster = 1;
+  my $strip_tab = 0;
+  my $strip_cherry_pick = 0;
+  my $srcdir;
+  GetOptions
+    (
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+     'since=s' => \$since_date,
+     'format=s' => \$format_string,
+     'amend=s' => \$amend_file,
+     'append-dot' => \$append_dot,
+     'cluster!' => \$cluster,
+     'strip-tab' => \$strip_tab,
+     'strip-cherry-pick' => \$strip_cherry_pick,
+     'srcdir=s' => \$srcdir,
+    ) or usage 1;
+
+  defined $since_date
+    and unshift @ARGV, "--since=$since_date";
+
+  # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
+  # that makes a correction in the log or attribution of that commit.
+  my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
+
+  my @cmd = ('git',
+             git_dir_option $srcdir,
+             qw(log --log-size),
+             '--pretty=format:%H:%ct  %an  <%ae>%n%n'.$format_string, @ARGV);
+  open PIPE, '-|', @cmd
+    or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
+            . "(Is your Git too old?  Version 1.5.1 or later is required.)\n");
+
+  my $prev_multi_paragraph;
+  my $prev_date_line = '';
+  my @prev_coauthors = ();
+  while (1)
+    {
+      defined (my $in = <PIPE>)
+        or last;
+      $in =~ /^log size (\d+)$/
+        or die "$ME:$.: Invalid line (expected log size):\n$in";
+      my $log_nbytes = $1;
+
+      my $log;
+      my $n_read = read PIPE, $log, $log_nbytes;
+      $n_read == $log_nbytes
+        or die "$ME:$.: unexpected EOF\n";
+
+      # Extract leading hash.
+      my ($sha, $rest) = split ':', $log, 2;
+      defined $sha
+        or die "$ME:$.: malformed log entry\n";
+      $sha =~ /^[0-9a-fA-F]{40}$/
+        or die "$ME:$.: invalid SHA1: $sha\n";
+
+      # If this commit's log requires any transformation, do it now.
+      my $code = $amend_code->{$sha};
+      if (defined $code)
+        {
+          eval 'use Safe';
+          my $s = new Safe;
+          # Put the unpreprocessed entry into "$_".
+          $_ = $rest;
+
+          # Let $code operate on it, safely.
+          my $r = $s->reval("$code")
+            or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
+
+          # Note that we've used this entry.
+          delete $amend_code->{$sha};
+
+          # Update $rest upon success.
+          $rest = $_;
+        }
+
+      # Remove lines inserted by "git cherry-pick".
+      if ($strip_cherry_pick)
+        {
+          $rest =~ s/^\s*Conflicts:\n.*//sm;
+          $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
+        }
+
+      my @line = split "\n", $rest;
+      my $author_line = shift @line;
+      defined $author_line
+        or die "$ME:$.: unexpected EOF\n";
+      $author_line =~ /^(\d+)  (.*>)$/
+        or die "$ME:$.: Invalid line "
+          . "(expected date/author/email):\n$author_line\n";
+
+      # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
+      # `(tiny change)' annotation.
+      my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
+                  ? '  (tiny change)' : '');
+
+      my $date_line = sprintf "%s  %s$tiny\n",
+        strftime ("%F", localtime ($1)), $2;
+
+      my @coauthors = grep /^Co-authored-by:.*$/, @line;
+      # Omit meta-data lines we've already interpreted.
+      @line = grep !/^(?:Signed-off-by:[ ].*>$
+                       |Co-authored-by:[ ]
+                       |Copyright-paperwork-exempt:[ ]
+                       )/x, @line;
+
+      # Remove leading and trailing blank lines.
+      if (@line)
+        {
+          while ($line[0] =~ /^\s*$/) { shift @line; }
+          while ($line[$#line] =~ /^\s*$/) { pop @line; }
+        }
+
+      # Record whether there are two or more paragraphs.
+      my $multi_paragraph = grep /^\s*$/, @line;
+
+      # Format 'Co-authored-by: A U Thor <email@example.com>' lines in
+      # standard multi-author ChangeLog format.
+      for (@coauthors)
+        {
+          s/^Co-authored-by:\s*/\t    /;
+          s/\s*</  </;
+
+          /<.*?@.*\..*>/
+            or warn "$ME: warning: missing email address for "
+              . substr ($_, 5) . "\n";
+        }
+
+      # If clustering of commit messages has been disabled, if this header
+      # would be different from the previous date/name/email/coauthors header,
+      # or if this or the previous entry consists of two or more paragraphs,
+      # then print the header.
+      if ( ! $cluster
+          || $date_line ne $prev_date_line
+          || "@coauthors" ne "@prev_coauthors"
+          || $multi_paragraph
+          || $prev_multi_paragraph)
+        {
+          $prev_date_line eq ''
+            or print "\n";
+          print $date_line;
+          @coauthors
+            and print join ("\n", @coauthors), "\n";
+        }
+      $prev_date_line = $date_line;
+      @prev_coauthors = @coauthors;
+      $prev_multi_paragraph = $multi_paragraph;
+
+      # If there were any lines
+      if (@line == 0)
+        {
+          warn "$ME: warning: empty commit message:\n  $date_line\n";
+        }
+      else
+        {
+          if ($append_dot)
+            {
+              # If the first line of the message has enough room, then
+              if (length $line[0] < 72)
+                {
+                  # append a dot if there is no other punctuation or blank
+                  # at the end.
+                  $line[0] =~ /[[:punct:]\s]$/
+                    or $line[0] .= '.';
+                }
+            }
+
+          # Remove one additional leading TAB from each line.
+          $strip_tab
+            and map { s/^\t// } @line;
+
+          # Prefix each non-empty line with a TAB.
+          @line = map { length $_ ? "\t$_" : '' } @line;
+
+          print "\n", join ("\n", @line), "\n";
+        }
+
+      defined ($in = <PIPE>)
+        or last;
+      $in ne "\n"
+        and die "$ME:$.: unexpected line:\n$in";
+    }
+
+  close PIPE
+    or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
+  # FIXME-someday: include $PROCESS_STATUS in the diagnostic
+
+  # Complain about any unused entry in the --amend=F specified file.
+  my $fail = 0;
+  foreach my $sha (keys %$amend_code)
+    {
+      warn "$ME:$amend_file: unused entry: $sha\n";
+      $fail = 1;
+    }
+
+  exit $fail;
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/build-aux/gnu-web-doc-update b/build-aux/gnu-web-doc-update
new file mode 100755
index 0000000..4acd69d
--- /dev/null
+++ b/build-aux/gnu-web-doc-update
@@ -0,0 +1,189 @@
+#!/bin/sh
+# Run this after each non-alpha release, to update the web documentation at
+# http://www.gnu.org/software/$pkg/manual/
+# This script must be run from the top-level directory,
+# assumes you're using git for revision control,
+# and requires a .prev-version file as well as a Makefile,
+# from which it extracts the version number and package name, respectively.
+# Also, it assumes all documentation is in the doc/ sub-directory.
+
+VERSION=2009-07-21.16; # UTC
+
+# Copyright (C) 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+ME=$(basename "$0")
+warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
+die() { warn "$*"; exit 1; }
+
+help()
+{
+  cat <<EOF
+Usage: $ME
+
+Run this script from top_srcdir (no arguments) after each non-alpha
+release, to update the web documentation at
+http://www.gnu.org/software/\$pkg/manual/
+
+Options:
+  -C, --builddir=DIR  location of (configured) Makefile (default: .)
+  --help              print this help, then exit
+  --version           print version number, then exit
+
+Report bugs and patches to <bug-gnulib@gnu.org>.
+EOF
+  exit
+}
+
+version()
+{
+  year=$(echo "$VERSION" | sed 's/[^0-9].*//')
+  cat <<EOF
+$ME $VERSION
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+  exit
+}
+
+# find_tool ENVVAR NAMES...
+# -------------------------
+# Search for a required program.  Use the value of ENVVAR, if set,
+# otherwise find the first of the NAMES that can be run (i.e.,
+# supports --version).  If found, set ENVVAR to the program name,
+# die otherwise.
+#
+# FIXME: code duplication, see also bootstrap.
+find_tool ()
+{
+  find_tool_envvar=$1
+  shift
+  find_tool_names=$@
+  eval "find_tool_res=\$$find_tool_envvar"
+  if test x"$find_tool_res" = x; then
+    for i
+    do
+      if ($i --version </dev/null) >/dev/null 2>&1; then
+       find_tool_res=$i
+       break
+      fi
+    done
+  else
+    find_tool_error_prefix="\$$find_tool_envvar: "
+  fi
+  test x"$find_tool_res" != x \
+    || die "one of these is required: $find_tool_names"
+  ($find_tool_res --version </dev/null) >/dev/null 2>&1 \
+    || die "${find_tool_error_prefix}cannot run $find_tool_res --version"
+  eval "$find_tool_envvar=\$find_tool_res"
+  eval "export $find_tool_envvar"
+}
+
+## ------ ##
+## Main.  ##
+## ------ ##
+
+# Requirements: everything required to bootstrap your package, plus
+# these.
+find_tool CVS cvs
+find_tool CVSU cvsu
+find_tool GIT git
+find_tool RSYNC rsync
+find_tool XARGS gxargs xargs
+
+builddir=.
+while test $# != 0
+do
+  # Handle --option=value by splitting apart and putting back on argv.
+  case $1 in
+    --*=*)
+      opt=$(echo "$1" | sed -e 's/=.*//')
+      val=$(echo "$1" | sed -e 's/[^=]*=//')
+      shift
+      set dummy "$opt" "$val" ${1+"$@"}; shift
+      ;;
+  esac
+
+  case $1 in
+    --help|--version) ${1#--};;
+    -C|--builddir) shift; builddir=$1; shift ;;
+    --*) die "unrecognized option: $1";;
+    *) break;;
+  esac
+done
+
+test $# = 0 \
+  || die "too many arguments"
+
+prev=.prev-version
+version=$(cat $prev) || die "no $prev file?"
+pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \
+  || die "no Makefile?"
+tmp_branch=web-doc-$version-$$
+current_branch=$($GIT branch | sed -ne '/^\* /{s///;p;q;}')
+
+cleanup()
+{
+  __st=$?
+  rm -rf "$tmp"
+  $GIT checkout "$current_branch"
+  $GIT submodule update --recursive
+  $GIT branch -d $tmp_branch
+  exit $__st
+}
+trap cleanup 0
+trap 'exit $?' 1 2 13 15
+
+# We must build using sources for which --version reports the
+# just-released version number, not some string like 7.6.18-20761.
+# That version string propagates into all documentation.
+set -e
+$GIT checkout -b $tmp_branch v$version
+$GIT submodule update --recursive
+./bootstrap
+srcdir=$(pwd)
+cd "$builddir"
+  ./config.status --recheck
+  ./config.status
+  make
+  make web-manual
+cd "$srcdir"
+set +e
+
+tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1
+( cd $tmp \
+    && $CVS -d $USER@cvs.sv.gnu.org:/webcvs/$pkg co $pkg )
+$RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/manual
+
+(
+  cd $tmp/$pkg/manual
+
+  # Add any new files:
+  $CVSU --types='?'                             \
+    | sed s/..//                                \
+    | $XARGS --no-run-if-empty -- $CVS add -ko
+
+  $CVS ci -m $version
+)
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "VERSION="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/gnupload b/build-aux/gnupload
new file mode 100755
index 0000000..6eecef4
--- /dev/null
+++ b/build-aux/gnupload
@@ -0,0 +1,433 @@
+#!/bin/sh
+# Sign files and upload them.
+
+scriptversion=2012-12-11.16; # UTC
+
+# Copyright (C) 2004-2012 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 3, 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, see <http://www.gnu.org/licenses/>.
+
+# Originally written by Alexandre Duret-Lutz <adl@gnu.org>.
+# The master copy of this file is maintained in the gnulib Git repository.
+# Please send bug reports and feature requests to bug-gnulib@gnu.org.
+
+set -e
+
+GPG='gpg --batch --no-tty'
+conffile=.gnuploadrc
+to=
+dry_run=false
+replace=
+symlink_files=
+delete_files=
+delete_symlinks=
+collect_var=
+dbg=
+nl='
+'
+
+usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...]
+
+Sign all FILES, and process them at selected destinations according to CMD.
+<http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>
+explains further.
+
+Commands:
+  --delete                 delete FILES from destination
+  --symlink                create symbolic links
+  --rmsymlink              remove symbolic links
+  --                       treat the remaining arguments as files to upload
+
+Options:
+  --help                   print this help text and exit
+  --to DEST                specify one destination for FILES
+                           (multiple --to options are allowed)
+  --user NAME              sign with key NAME
+  --replace                allow replacements of existing files
+  --symlink-regex[=EXPR]   use sed script EXPR to compute symbolic link names
+  --dry-run                do nothing, show what would have been done
+                           (including the constructed directive file)
+  --version                output version information and exit
+
+If --symlink-regex is given without EXPR, then the link target name
+is created by replacing the version information with '-latest', e.g.:
+
+  foo-1.3.4.tar.gz -> foo-latest.tar.gz
+
+Recognized destinations are:
+  alpha.gnu.org:DIRECTORY
+  savannah.gnu.org:DIRECTORY
+  savannah.nongnu.org:DIRECTORY
+  ftp.gnu.org:DIRECTORY
+                           build directive files and upload files by FTP
+  download.gnu.org.ua:{alpha|ftp}/DIRECTORY
+                           build directive files and upload files by SFTP
+  [user@]host:DIRECTORY    upload files with scp
+
+Options and commands are applied in order.  If the file $conffile exists
+in the current working directory, its contents are prepended to the
+actual command line options.  Use this to keep your defaults.  Comments
+(#) and empty lines in $conffile are allowed.
+
+Examples:
+1. Upload foobar-1.0.tar.gz to ftp.gnu.org:
+  gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz
+
+2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org:
+  gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz
+
+3. Same as above, and also create symbolic links to foobar-latest.tar.*:
+  gnupload --to ftp.gnu.org:foobar \\
+           --symlink-regex \\
+           foobar-1.0.tar.gz foobar-1.0.tar.xz
+
+4. Upload foobar-0.9.90.tar.gz to two sites:
+  gnupload --to alpha.gnu.org:foobar \\
+           --to sources.redhat.com:~ftp/pub/foobar \\
+           foobar-0.9.90.tar.gz
+
+5. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz
+   (the -- terminates the list of files to delete):
+  gnupload --to alpha.gnu.org:foobar \\
+           --to sources.redhat.com:~ftp/pub/foobar \\
+           --delete oopsbar-0.9.91.tar.gz \\
+           -- foobar-0.9.91.tar.gz
+
+gnupload uses the ncftpput program to do the transfers; if you don't
+happen to have an ncftp package installed, the ncftpput-ftp script in
+the build-aux/ directory of the gnulib package
+(http://savannah.gnu.org/projects/gnulib) may serve as a replacement.
+
+Send patches and bug reports to <bug-gnulib@gnu.org>."
+
+# Read local configuration file
+if test -r "$conffile"; then
+  echo "$0: Reading configuration file $conffile"
+  conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" '  '`
+  eval set x "$conf \"\$@\""
+  shift
+fi
+
+while test -n "$1"; do
+  case $1 in
+  -*)
+    collect_var=
+    case $1 in
+    --help)
+      echo "$usage"
+      exit $?
+      ;;
+    --to)
+      if test -z "$2"; then
+        echo "$0: Missing argument for --to" 1>&2
+        exit 1
+      else
+        to="$to $2"
+        shift
+      fi
+      ;;
+    --user)
+      if test -z "$2"; then
+        echo "$0: Missing argument for --user" 1>&2
+        exit 1
+      else
+        GPG="$GPG --local-user $2"
+        shift
+      fi
+      ;;
+    --delete)
+      collect_var=delete_files
+      ;;
+    --replace)
+      replace="replace: true"
+      ;;
+    --rmsymlink)
+      collect_var=delete_symlinks
+      ;;
+    --symlink-regex=*)
+      symlink_expr=`expr "$1" : '[^=]*=\(.*\)'`
+      ;;
+    --symlink-regex)
+      symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|'
+      ;;
+    --symlink)
+      collect_var=symlink_files
+      ;;
+    --dry-run|-n)
+      dry_run=:
+      ;;
+    --version)
+      echo "gnupload $scriptversion"
+      exit $?
+      ;;
+    --)
+      shift
+      break
+      ;;
+    -*)
+      echo "$0: Unknown option '$1', try '$0 --help'" 1>&2
+      exit 1
+      ;;
+    esac
+    ;;
+  *)
+    if test -z "$collect_var"; then
+      break
+    else
+      eval "$collect_var=\"\$$collect_var $1\""
+    fi
+    ;;
+  esac
+  shift
+done
+
+dprint()
+{
+  echo "Running $* ..."
+}
+
+if $dry_run; then
+  dbg=dprint
+fi
+
+if test -z "$to"; then
+  echo "$0: Missing destination sites" >&2
+  exit 1
+fi
+
+if test -n "$symlink_files"; then
+  x=`echo "$symlink_files" | sed 's/[^ ]//g;s/  //g'`
+  if test -n "$x"; then
+    echo "$0: Odd number of symlink arguments" >&2
+    exit 1
+  fi
+fi
+
+if test $# = 0; then
+  if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then
+    echo "$0: No file to upload" 1>&2
+    exit 1
+  fi
+else
+  # Make sure all files exist.  We don't want to ask
+  # for the passphrase if the script will fail.
+  for file
+  do
+    if test ! -f $file; then
+      echo "$0: Cannot find '$file'" 1>&2
+      exit 1
+    elif test -n "$symlink_expr"; then
+      linkname=`echo $file | sed "$symlink_expr"`
+      if test -z "$linkname"; then
+        echo "$0: symlink expression produces empty results" >&2
+        exit 1
+      elif test "$linkname" = $file; then
+        echo "$0: symlink expression does not alter file name" >&2
+        exit 1
+      fi
+    fi
+  done
+fi
+
+# Make sure passphrase is not exported in the environment.
+unset passphrase
+unset passphrase_fd_0
+GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg}
+
+# Reset PATH to be sure that echo is a built-in.  We will later use
+# 'echo $passphrase' to output the passphrase, so it is important that
+# it is a built-in (third-party programs tend to appear in 'ps'
+# listings with their arguments...).
+# Remember this script runs with 'set -e', so if echo is not built-in
+# it will exit now.
+if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else
+  PATH=/empty echo -n "Enter GPG passphrase: "
+  stty -echo
+  read -r passphrase
+  stty echo
+  echo
+  passphrase_fd_0="--passphrase-fd 0"
+fi
+
+if test $# -ne 0; then
+  for file
+  do
+    echo "Signing $file ..."
+    rm -f $file.sig
+    echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file
+  done
+fi
+
+
+# mkdirective DESTDIR BASE FILE STMT
+# Arguments: See upload, below
+mkdirective ()
+{
+  stmt="$4"
+  if test -n "$3"; then
+    stmt="
+filename: $3$stmt"
+  fi
+
+  cat >${2}.directive<<EOF
+version: 1.2
+directory: $1
+comment: gnupload v. $scriptversion$stmt
+EOF
+  if $dry_run; then
+    echo "File ${2}.directive:"
+    cat ${2}.directive
+    echo "File ${2}.directive:" | sed 's/./-/g'
+  fi
+}
+
+mksymlink ()
+{
+  while test $# -ne 0
+  do
+    echo "symlink: $1 $2"
+    shift
+    shift
+  done
+}
+
+# upload DEST DESTDIR BASE FILE STMT FILES
+# Arguments:
+#  DEST     Destination site;
+#  DESTDIR  Destination directory;
+#  BASE     Base name for the directive file;
+#  FILE     Name of the file to distribute (may be empty);
+#  STMT     Additional statements for the directive file;
+#  FILES    List of files to upload.
+upload ()
+{
+  dest=$1
+  destdir=$2
+  base=$3
+  file=$4
+  stmt=$5
+  files=$6
+
+  rm -f $base.directive $base.directive.asc
+  case $dest in
+    alpha.gnu.org:*)
+      mkdirective "$destdir" "$base" "$file" "$stmt"
+      echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+      $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc
+      ;;
+    ftp.gnu.org:*)
+      mkdirective "$destdir" "$base" "$file" "$stmt"
+      echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+      $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc
+      ;;
+    savannah.gnu.org:*)
+      if test -z "$files"; then
+        echo "$0: warning: standalone directives not applicable for $dest" >&2
+      fi
+      $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
+      ;;
+    savannah.nongnu.org:*)
+      if test -z "$files"; then
+        echo "$0: warning: standalone directives not applicable for $dest" >&2
+      fi
+      $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
+      ;;
+    download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*)
+      destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'`
+      destdir_topdir=`echo "$destdir" | sed 's,/.*,,'`
+      mkdirective "$destdir_p1" "$base" "$file" "$stmt"
+      echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+      for f in $files $base.directive.asc
+      do
+        echo put $f
+      done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir
+      ;;
+    /*)
+      dest_host=`echo "$dest" | sed 's,:.*,,'`
+      mkdirective "$destdir" "$base" "$file" "$stmt"
+      echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+      $dbg cp $files $base.directive.asc $dest_host
+      ;;
+    *)
+      if test -z "$files"; then
+        echo "$0: warning: standalone directives not applicable for $dest" >&2
+      fi
+      $dbg scp $files $dest
+      ;;
+  esac
+  rm -f $base.directive $base.directive.asc
+}
+
+#####
+# Process any standalone directives
+stmt=
+if test -n "$symlink_files"; then
+  stmt="$stmt
+`mksymlink $symlink_files`"
+fi
+
+for file in $delete_files
+do
+  stmt="$stmt
+archive: $file"
+done
+
+for file in $delete_symlinks
+do
+  stmt="$stmt
+rmsymlink: $file"
+done
+
+if test -n "$stmt"; then
+  for dest in $to
+  do
+    destdir=`echo $dest | sed 's/[^:]*://'`
+    upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt"
+  done
+fi
+
+# Process actual uploads
+for dest in $to
+do
+  for file
+  do
+    echo "Uploading $file to $dest ..."
+    stmt=
+    #
+    # allowing file replacement is all or nothing.
+    if test -n "$replace"; then stmt="$stmt
+$replace"
+    fi
+    #
+    files="$file $file.sig"
+    destdir=`echo $dest | sed 's/[^:]*://'`
+    if test -n "$symlink_expr"; then
+      linkname=`echo $file | sed "$symlink_expr"`
+      stmt="$stmt
+symlink: $file $linkname
+symlink: $file.sig $linkname.sig"
+    fi
+    upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files"
+  done
+done
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/install-sh b/build-aux/install-sh
index 4d4a951..377bb86 100755
--- a/build-aux/install-sh
+++ b/build-aux/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2005-05-14.22
+scriptversion=2011-11-20.07; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,42 +35,72 @@
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
+# 'make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
 
 # set DOITPROG to echo to test this script
 
 # Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
 
-# put in absolute paths if you don't have them in your path; or use env. vars.
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
 
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
 
-chmodcmd="$chmodprog 0755"
-chowncmd=
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
 chgrpcmd=
-stripcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
 rmcmd="$rmprog -f"
-mvcmd="$mvprog"
+stripcmd=
+
 src=
 dst=
 dir_arg=
-dstarg=
+dst_arg=
+
+copy_on_change=false
 no_target_directory=
 
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
    or: $0 [OPTION]... SRCFILES... DIRECTORY
    or: $0 [OPTION]... -t DIRECTORY SRCFILES...
    or: $0 [OPTION]... -d DIRECTORIES...
@@ -80,108 +110,148 @@
 In the 4th, create DIRECTORIES.
 
 Options:
--c         (ignored)
--d         create directories instead of installing files.
--g GROUP   $chgrpprog installed files to GROUP.
--m MODE    $chmodprog installed files to MODE.
--o USER    $chownprog installed files to USER.
--s         $stripprog installed files.
--t DIRECTORY  install into DIRECTORY.
--T         report an error if DSTFILE is a directory.
---help     display this help and exit.
---version  display version info and exit.
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
 
 Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
 "
 
-while test -n "$1"; do
+while test $# -ne 0; do
   case $1 in
-    -c) shift
-        continue;;
+    -c) ;;
 
-    -d) dir_arg=true
-        shift
-        continue;;
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-        shift
-        shift
-        continue;;
+	shift;;
 
     --help) echo "$usage"; exit $?;;
 
-    -m) chmodcmd="$chmodprog $2"
-        shift
-        shift
-        continue;;
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
 
     -o) chowncmd="$chownprog $2"
-        shift
-        shift
-        continue;;
+	shift;;
 
-    -s) stripcmd=$stripprog
-        shift
-        continue;;
+    -s) stripcmd=$stripprog;;
 
-    -t) dstarg=$2
-	shift
-	shift
-	continue;;
+    -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
+	shift;;
 
-    -T) no_target_directory=true
-	shift
-	continue;;
+    -T) no_target_directory=true;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    *)  # When -d is used, all remaining arguments are directories to create.
-	# When -t is used, the destination is already specified.
-	test -n "$dir_arg$dstarg" && break
-        # Otherwise, the last argument is the destination.  Remove it from $@.
-	for arg
-	do
-          if test -n "$dstarg"; then
-	    # $@ is not empty: it contains at least $arg.
-	    set fnord "$@" "$dstarg"
-	    shift # fnord
-	  fi
-	  shift # arg
-	  dstarg=$arg
-	done
+    --)	shift
 	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
   esac
+  shift
 done
 
-if test -z "$1"; then
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
   if test -z "$dir_arg"; then
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call `install-sh -d' without argument.
+  # It's OK to call 'install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for 'test' and other utilities.
   case $src in
-    -*) src=./$src ;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
     dst=$src
-    src=
-
-    if test -d "$dst"; then
-      mkdircmd=:
-      chmodcmd=
-    else
-      mkdircmd=$mkdirprog
-    fi
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
   else
+
     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
     # might cause directories to be created, which would be especially bad
     # if $src (and thus $dsttmp) contains '*'.
@@ -190,71 +260,194 @@
       exit 1
     fi
 
-    if test -z "$dstarg"; then
+    if test -z "$dst_arg"; then
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
-    dst=$dstarg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst ;;
-    esac
+    dst=$dst_arg
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
       if test -n "$no_target_directory"; then
-	echo "$0: $dstarg: Is a directory" >&2
+	echo "$0: $dst_arg: Is a directory" >&2
 	exit 1
       fi
-      dst=$dst/`basename "$src"`
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
     fi
   fi
 
-  # This sed command emulates the dirname command.
-  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+  obsolete_mkdir_used=false
 
-  # Make sure that the destination directory exists.
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
 
-  # Skip lots of stat calls in the usual case.
-  if test ! -d "$dstdir"; then
-    defaultIFS='
-	 '
-    IFS="${IFS-$defaultIFS}"
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
 
-    oIFS=$IFS
-    # Some sh's can't handle IFS=/ for some reason.
-    IFS='%'
-    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-    shift
-    IFS=$oIFS
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
 
-    pathcomp=
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
 
-    while test $# -ne 0 ; do
-      pathcomp=$pathcomp$1
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	[-=\(\)!]*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
       shift
-      if test ! -d "$pathcomp"; then
-        $mkdirprog "$pathcomp"
-	# mkdir can fail with a `File exist' error in case several
-	# install-sh are creating the directory concurrently.  This
-	# is OK.
-	test -d "$pathcomp" || exit
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test X"$d" = X && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
       fi
-      pathcomp=$pathcomp/
-    done
+    fi
   fi
 
   if test -n "$dir_arg"; then
-    $doit $mkdircmd "$dst" \
-      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
   else
-    dstfile=`basename "$dst"`
 
     # Make a couple of temp file names in the proper directory.
     dsttmp=$dstdir/_inst.$$_
@@ -262,10 +455,9 @@
 
     # Trap to clean up those temp files at exit.
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-    trap '(exit $?); exit' 1 2 13 15
 
     # Copy the file name to the temp name.
-    $doit $cpprog "$src" "$dsttmp" &&
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
 
     # and set any options; do chmod last to preserve setuid bits.
     #
@@ -273,51 +465,63 @@
     # ignore errors from any of these, just make sure not to ignore
     # errors from the above "$doit $cpprog $src $dsttmp" command.
     #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
 
-    # Now rename the file to the real destination.
-    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
-      || {
-	   # The rename failed, perhaps because mv can't rename something else
-	   # to itself, or perhaps because mv is so ancient that it does not
-	   # support -f.
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
 
-	   # Now remove or move aside any old file at destination location.
-	   # We try this two ways since rm can't unlink itself on some
-	   # systems and the destination file might be busy for other
-	   # reasons.  In this case, the final cleanup might fail but the new
-	   # file should still install successfully.
-	   {
-	     if test -f "$dstdir/$dstfile"; then
-	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
-	       || {
-		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-		 (exit 1); exit 1
-	       }
-	     else
-	       :
-	     fi
-	   } &&
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
 
-	   # Now rename the file to the real destination.
-	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-	 }
-    }
-  fi || { (exit 1); exit 1; }
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
 done
 
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
-  (exit 0); exit 0
-}
-
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/javacomp.sh.in b/build-aux/javacomp.sh.in
new file mode 100644
index 0000000..bc1081b
--- /dev/null
+++ b/build-aux/javacomp.sh.in
@@ -0,0 +1,75 @@
+#!/bin/sh
+# Compile a Java program.
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+#
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# This uses the same choices as javacomp.c, but instead of relying on the
+# environment settings at run time, it uses the environment variables
+# present at configuration time.
+#
+# This is a separate shell script, because it must be able to unset JAVA_HOME
+# in some cases, which a simple shell command cannot do.
+#
+# The extra CLASSPATH must have been set prior to calling this script.
+# Options that can be passed are -O, -g and "-d DIRECTORY".
+
+CONF_JAVAC='@CONF_JAVAC@'
+CONF_CLASSPATH='@CLASSPATH@'
+if test -n "@HAVE_JAVAC_ENVVAR@"; then
+  # Combine given CLASSPATH and configured CLASSPATH.
+  if test -n "$CLASSPATH"; then
+    CLASSPATH="$CLASSPATH${CONF_CLASSPATH:+@CLASSPATH_SEPARATOR@$CONF_CLASSPATH}"
+  else
+    CLASSPATH="$CONF_CLASSPATH"
+  fi
+  export CLASSPATH
+  test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@"
+  exec $CONF_JAVAC "$@"
+else
+  unset JAVA_HOME
+  if test -n "@HAVE_GCJ_C@"; then
+    # In this case, $CONF_JAVAC starts with "gcj -C".
+    CLASSPATH="$CLASSPATH"
+    export CLASSPATH
+    test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@"
+    exec $CONF_JAVAC "$@"
+  else
+    if test -n "@HAVE_JAVAC@"; then
+      # In this case, $CONF_JAVAC starts with "javac".
+      CLASSPATH="$CLASSPATH"
+      export CLASSPATH
+      test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@"
+      exec $CONF_JAVAC "$@"
+    else
+      if test -n "@HAVE_JIKES@"; then
+        # In this case, $CONF_JAVAC starts with "jikes".
+        # Combine given CLASSPATH and configured CLASSPATH.
+        if test -n "$CLASSPATH"; then
+          CLASSPATH="$CLASSPATH${CONF_CLASSPATH:+@CLASSPATH_SEPARATOR@$CONF_CLASSPATH}"
+        else
+          CLASSPATH="$CONF_CLASSPATH"
+        fi
+        export CLASSPATH
+        test -z "$JAVA_VERBOSE" || echo "$CONF_JAVAC $@"
+        exec $CONF_JAVAC "$@"
+      else
+        echo 'Java compiler not found, try installing gcj or set $JAVAC, then reconfigure' 1>&2
+        exit 1
+      fi
+    fi
+  fi
+fi
diff --git a/build-aux/javaexec.sh.in b/build-aux/javaexec.sh.in
new file mode 100644
index 0000000..2f8d533
--- /dev/null
+++ b/build-aux/javaexec.sh.in
@@ -0,0 +1,70 @@
+#!/bin/sh
+# Execute a Java program.
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+#
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# This uses the same choices as javaexec.c, but instead of relying on the
+# environment settings at run time, it uses the environment variables
+# present at configuration time.
+#
+# This is a separate shell script, because it must be able to unset JAVA_HOME
+# in some cases, which a simple shell command cannot do.
+#
+# The extra CLASSPATH must have been set prior to calling this script.
+
+CONF_JAVA='@CONF_JAVA@'
+CONF_CLASSPATH='@CLASSPATH@'
+if test -n "@HAVE_JAVA_ENVVAR@"; then
+  # Combine given CLASSPATH and configured CLASSPATH.
+  if test -n "$CLASSPATH"; then
+    CLASSPATH="$CLASSPATH${CONF_CLASSPATH:+@CLASSPATH_SEPARATOR@$CONF_CLASSPATH}"
+  else
+    CLASSPATH="$CONF_CLASSPATH"
+  fi
+  export CLASSPATH
+  test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@"
+  exec $CONF_JAVA "$@"
+else
+  unset JAVA_HOME
+  export CLASSPATH
+  if test -n "@HAVE_GIJ@"; then
+    # In this case, $CONF_JAVA is "gij".
+    test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@"
+    exec $CONF_JAVA "$@"
+  else
+    if test -n "@HAVE_JAVA@"; then
+      # In this case, $CONF_JAVA is "java".
+      test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@"
+      exec $CONF_JAVA "$@"
+    else
+      if test -n "@HAVE_JRE@"; then
+        # In this case, $CONF_JAVA is "jre".
+        test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@"
+        exec $CONF_JAVA "$@"
+      else
+        if test -n "@HAVE_JVIEW@"; then
+          # In this case, $CONF_JAVA is "jview".
+          test -z "$JAVA_VERBOSE" || echo "$CONF_JAVA $@"
+          exec $CONF_JAVA "$@"
+        else
+          echo 'Java virtual machine not found, try installing gij or set $JAVA, then reconfigure' 1>&2
+          exit 1
+        fi
+      fi
+    fi
+  fi
+fi
diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh
index cd916c0..4614441 100755
--- a/build-aux/mdate-sh
+++ b/build-aux/mdate-sh
@@ -1,10 +1,9 @@
 #!/bin/sh
 # Get modification time of a file or directory and pretty-print it.
 
-scriptversion=2005-06-29.22
+scriptversion=2010-08-21.06; # UTC
 
-# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software
-# Foundation, Inc.
+# Copyright (C) 1995-2012 Free Software Foundation, Inc.
 # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
 #
 # This program is free software; you can redistribute it and/or modify
@@ -18,8 +17,7 @@
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -30,16 +28,26 @@
 # bugs to <bug-automake@gnu.org> or send patches to
 # <automake-patches@gnu.org>.
 
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+fi
+
 case $1 in
   '')
-     echo "$0: No file.  Try \`$0 --help' for more information." 1>&2
+     echo "$0: No file.  Try '$0 --help' for more information." 1>&2
      exit 1;
      ;;
   -h | --h*)
     cat <<\EOF
 Usage: mdate-sh [--help] [--version] FILE
 
-Pretty-print the modification time of FILE.
+Pretty-print the modification day of FILE, in the format:
+1 January 1970
 
 Report bugs to <bug-automake@gnu.org>.
 EOF
@@ -51,6 +59,13 @@
     ;;
 esac
 
+error ()
+{
+  echo "$0: $1" >&2
+  exit 1
+}
+
+
 # Prevent date giving response in another language.
 LANG=C
 export LANG
@@ -60,7 +75,7 @@
 export LC_TIME
 
 # GNU ls changes its time format in response to the TIME_STYLE
-# variable.  Since we cannot assume `unset' works, revert this
+# variable.  Since we cannot assume 'unset' works, revert this
 # variable to its documented default.
 if test "${TIME_STYLE+set}" = set; then
   TIME_STYLE=posix-long-iso
@@ -75,27 +90,32 @@
 else
   ls_command='ls -l -d'
 fi
+# Avoid user/group names that might have spaces, when possible.
+if ls -n /dev/null 1>/dev/null 2>&1; then
+  ls_command="$ls_command -n"
+fi
 
-# A `ls -l' line looks as follows on OS/2.
+# A 'ls -l' line looks as follows on OS/2.
 #  drwxrwx---        0 Aug 11  2001 foo
 # This differs from Unix, which adds ownership information.
 #  drwxrwx---   2 root  root      4096 Aug 11  2001 foo
 #
 # To find the date, we split the line on spaces and iterate on words
 # until we find a month.  This cannot work with files whose owner is a
-# user named `Jan', or `Feb', etc.  However, it's unlikely that `/'
+# user named "Jan", or "Feb", etc.  However, it's unlikely that '/'
 # will be owned by a user whose name is a month.  So we first look at
 # the extended ls output of the root directory to decide how many
 # words should be skipped to get the date.
 
 # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
-set x`ls -l -d /`
+set x`$ls_command /`
 
 # Find which argument is the month.
 month=
 command=
 until test $month
 do
+  test $# -gt 0 || error "failed parsing '$ls_command /' output"
   shift
   # Add another shift to the command.
   command="$command shift;"
@@ -115,8 +135,10 @@
   esac
 done
 
+test -n "$month" || error "failed parsing '$ls_command /' output"
+
 # Get the extended ls output of the file or directory.
-set dummy x`eval "$ls_command \"\$save_arg1\""`
+set dummy x`eval "$ls_command \"\\\$save_arg1\""`
 
 # Remove all preceding arguments
 eval $command
@@ -197,5 +219,6 @@
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/missing b/build-aux/missing
index 894e786..9a55648 100755
--- a/build-aux/missing
+++ b/build-aux/missing
@@ -1,10 +1,9 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2005-06-08.21
+scriptversion=2012-01-06.18; # UTC
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
-#   Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -18,9 +17,7 @@
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -28,13 +25,15 @@
 # the same distribution terms that you use for the rest of that program.
 
 if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
+  echo 1>&2 "Try '$0 --help' for more information"
   exit 1
 fi
 
 run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
 
-# In the cases where this matters, `missing' is being run in the
+# In the cases where this matters, 'missing' is being run in the
 # srcdir already.
 if test -f configure.ac; then
   configure_ac=configure.ac
@@ -44,7 +43,7 @@
 
 msg="missing on your system"
 
-case "$1" in
+case $1 in
 --run)
   # Try to run requested program, and just exit if it succeeds.
   run=
@@ -65,7 +64,7 @@
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
 error status if there is no known handling for PROGRAM.
 
 Options:
@@ -74,17 +73,20 @@
   --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
+  aclocal      touch file 'aclocal.m4'
+  autoconf     touch file 'configure'
+  autoheader   touch file 'config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all 'Makefile.in' files
+  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
+  flex         create 'lex.yy.c', if possible, from existing .c
   help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
+  lex          create 'lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
 
 Send bug reports to <bug-automake@gnu.org>."
     exit $?
@@ -96,37 +98,35 @@
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
+    echo 1>&2 "$0: Unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
 esac
 
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
 # Now exit if we have it, but it failed.  Also exit now if we
 # don't have it and --version was passed (most likely to detect
-# the program).
-case "$1" in
-  lex|yacc)
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
     # Not GNU programs, they don't have --version.
     ;;
 
-  tar)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
   *)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
        exit 1
     elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
        # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # running '$TOOL --version' or '$TOOL --help' to check whether
        # $TOOL exists and not knowing $TOOL uses missing.
        exit 1
     fi
@@ -135,36 +135,36 @@
 
 # If it does not exist, or fails to run (possibly an outdated version),
 # try to emulate it.
-case "$1" in
+case $program in
   aclocal*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
+         to install the Automake and Perl packages.  Grab them from
          any GNU archive site."
     touch aclocal.m4
     ;;
 
-  autoconf)
+  autoconf*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+WARNING: '$1' is $msg.  You should only need it if
+         you modified '${configure_ac}'.  You might want to install the
+         Autoconf and GNU m4 packages.  Grab them from any GNU
          archive site."
     touch configure
     ;;
 
-  autoheader)
+  autoheader*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acconfig.h' or '${configure_ac}'.  You might want
+         to install the Autoconf and GNU m4 packages.  Grab them
          from any GNU archive site."
     files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
     test -z "$files" && files="config.h"
     touch_files=
     for f in $files; do
-      case "$f" in
+      case $f in
       *:*) touch_files="$touch_files "`echo "$f" |
 				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
       *) touch_files="$touch_files $f.in";;
@@ -175,25 +175,25 @@
 
   automake*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+         You might want to install the Automake and Perl packages.
          Grab them from any GNU archive site."
     find . -type f -name Makefile.am -print |
 	   sed 's/\.am$/.in/' |
 	   while read f; do touch "$f"; done
     ;;
 
-  autom4te)
+  autom4te*)
     echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
+WARNING: '$1' is needed, but is $msg.
          You might have modified some files without having the
          proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
+         You can get '$1' as part of Autoconf from any GNU
          archive site."
 
-    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
-    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     if test -f "$file"; then
 	touch $file
     else
@@ -207,93 +207,97 @@
     fi
     ;;
 
-  bison|yacc)
+  bison*|yacc*)
     echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
+WARNING: '$1' $msg.  You should only need it if
+         you modified a '.y' file.  You may need the Bison package
          in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
+         Bison from any GNU archive site."
     rm -f y.tab.c y.tab.h
-    if [ $# -ne 1 ]; then
-        eval LASTARG="\${$#}"
-	case "$LASTARG" in
+    if test $# -ne 1; then
+        eval LASTARG=\${$#}
+	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" y.tab.c
 	    fi
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" y.tab.h
 	    fi
 	  ;;
 	esac
     fi
-    if [ ! -f y.tab.h ]; then
+    if test ! -f y.tab.h; then
 	echo >y.tab.h
     fi
-    if [ ! -f y.tab.c ]; then
+    if test ! -f y.tab.c; then
 	echo 'main() { return 0; }' >y.tab.c
     fi
     ;;
 
-  lex|flex)
+  lex*|flex*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.l' file.  You may need the Flex package
          in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
+         Flex from any GNU archive site."
     rm -f lex.yy.c
-    if [ $# -ne 1 ]; then
-        eval LASTARG="\${$#}"
-	case "$LASTARG" in
+    if test $# -ne 1; then
+        eval LASTARG=\${$#}
+	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" lex.yy.c
 	    fi
 	  ;;
 	esac
     fi
-    if [ ! -f lex.yy.c ]; then
+    if test ! -f lex.yy.c; then
 	echo 'main() { return 0; }' >lex.yy.c
     fi
     ;;
 
-  help2man)
+  help2man*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: '$1' is $msg.  You should only need it if
 	 you modified a dependency of a manual page.  You may need the
-	 \`Help2man' package in order for those modifications to take
-	 effect.  You can get \`Help2man' from any GNU archive site."
+	 Help2man package in order for those modifications to take
+	 effect.  You can get Help2man from any GNU archive site."
 
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
-    fi
-    if [ -f "$file" ]; then
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
 	touch $file
     else
 	test -z "$file" || exec >$file
 	echo ".ab help2man is required to generate this page"
-	exit 1
+	exit $?
     fi
     ;;
 
-  makeinfo)
+  makeinfo*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.texi' or '.texinfo' file, or any other file
          indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
+         call might also be the consequence of using a buggy 'make' (AIX,
+         DU, IRIX).  You might want to install the Texinfo package or
+         the GNU make package.  Grab either from any GNU archive site."
     # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     if test -z "$file"; then
       # ... or it is the one specified with @setfilename ...
       infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
       # ... or it is derived from the source name (dir/f.texi becomes f.info)
       test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
     fi
@@ -303,49 +307,14 @@
     touch $file
     ;;
 
-  tar)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case "$firstarg" in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case "$firstarg" in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
   *)
     echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
+WARNING: '$1' is needed, and is $msg.
          You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
+         proper tools for further handling them.  Check the 'README' file,
          it often tells you about the needed prerequisites for installing
          this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
+         some other package would contain this missing '$1' program."
     exit 1
     ;;
 esac
@@ -356,5 +325,6 @@
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/mkinstalldirs b/build-aux/mkinstalldirs
deleted file mode 100755
index 259dbfc..0000000
--- a/build-aux/mkinstalldirs
+++ /dev/null
@@ -1,158 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2005-06-29.22
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
-  case $1 in
-    -h | --help | --h*)         # -h for help
-      echo "$usage"
-      exit $?
-      ;;
-    -m)                         # -m PERM arg
-      shift
-      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
-      dirmode=$1
-      shift
-      ;;
-    --version)
-      echo "$0 $scriptversion"
-      exit $?
-      ;;
-    --)                         # stop option processing
-      shift
-      break
-      ;;
-    -*)                         # unknown option
-      echo "$usage" 1>&2
-      exit 1
-      ;;
-    *)                          # first non-opt arg
-      break
-      ;;
-  esac
-done
-
-for file
-do
-  if test -d "$file"; then
-    shift
-  else
-    break
-  fi
-done
-
-case $# in
-  0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error.  This is a problem when calling mkinstalldirs
-# from a parallel make.  We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
-  '')
-    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-      echo "mkdir -p -- $*"
-      exec mkdir -p -- "$@"
-    else
-      # On NextStep and OpenStep, the `mkdir' command does not
-      # recognize any option.  It will interpret all options as
-      # directories to create, and then abort because `.' already
-      # exists.
-      test -d ./-p && rmdir ./-p
-      test -d ./--version && rmdir ./--version
-    fi
-    ;;
-  *)
-    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
-       test ! -d ./--version; then
-      echo "mkdir -m $dirmode -p -- $*"
-      exec mkdir -m "$dirmode" -p -- "$@"
-    else
-      # Clean up after NextStep and OpenStep mkdir.
-      for d in ./-m ./-p ./--version "./$dirmode";
-      do
-        test -d $d && rmdir $d
-      done
-    fi
-    ;;
-esac
-
-for file
-do
-  case $file in
-    /*) pathcomp=/ ;;
-    *)  pathcomp= ;;
-  esac
-  oIFS=$IFS
-  IFS=/
-  set fnord $file
-  shift
-  IFS=$oIFS
-
-  for d
-  do
-    test "x$d" = x && continue
-
-    pathcomp=$pathcomp$d
-    case $pathcomp in
-      -*) pathcomp=./$pathcomp ;;
-    esac
-
-    if test ! -d "$pathcomp"; then
-      echo "mkdir $pathcomp"
-
-      mkdir "$pathcomp" || lasterr=$?
-
-      if test ! -d "$pathcomp"; then
-	errstatus=$lasterr
-      else
-	if test ! -z "$dirmode"; then
-	  echo "chmod $dirmode $pathcomp"
-	  lasterr=
-	  chmod "$dirmode" "$pathcomp" || lasterr=$?
-
-	  if test ! -z "$lasterr"; then
-	    errstatus=$lasterr
-	  fi
-	fi
-      fi
-    fi
-
-    pathcomp=$pathcomp/
-  done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/build-aux/snippet/_Noreturn.h b/build-aux/snippet/_Noreturn.h
new file mode 100644
index 0000000..c44ad89
--- /dev/null
+++ b/build-aux/snippet/_Noreturn.h
@@ -0,0 +1,10 @@
+#if !defined _Noreturn && __STDC_VERSION__ < 201112
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
diff --git a/build-aux/snippet/arg-nonnull.h b/build-aux/snippet/arg-nonnull.h
new file mode 100644
index 0000000..3a9dd26
--- /dev/null
+++ b/build-aux/snippet/arg-nonnull.h
@@ -0,0 +1,26 @@
+/* A C macro for declaring that specific arguments must not be NULL.
+   Copyright (C) 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h
new file mode 100644
index 0000000..96da94b
--- /dev/null
+++ b/build-aux/snippet/c++defs.h
@@ -0,0 +1,271 @@
+/* C++ compatible function declaration macros.
+   Copyright (C) 2010-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
diff --git a/build-aux/snippet/warn-on-use.h b/build-aux/snippet/warn-on-use.h
new file mode 100644
index 0000000..51e69bb
--- /dev/null
+++ b/build-aux/snippet/warn-on-use.h
@@ -0,0 +1,109 @@
+/* A C macro for emitting warnings if a function is used.
+   Copyright (C) 2010-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
+   for FUNCTION which will then trigger a compiler warning containing
+   the text of "literal string" anywhere that function is called, if
+   supported by the compiler.  If the compiler does not support this
+   feature, the macro expands to an unused extern declaration.
+
+   This macro is useful for marking a function as a potential
+   portability trap, with the intent that "literal string" include
+   instructions on the replacement function that should be used
+   instead.  However, one of the reasons that a function is a
+   portability trap is if it has the wrong signature.  Declaring
+   FUNCTION with a different signature in C is a compilation error, so
+   this macro must use the same type as any existing declaration so
+   that programs that avoid the problematic FUNCTION do not fail to
+   compile merely because they included a header that poisoned the
+   function.  But this implies that _GL_WARN_ON_USE is only safe to
+   use if FUNCTION is known to already have a declaration.  Use of
+   this macro implies that there must not be any other macro hiding
+   the declaration of FUNCTION; but undefining FUNCTION first is part
+   of the poisoning process anyway (although for symbols that are
+   provided only via a macro, the result is a compilation error rather
+   than a warning containing "literal string").  Also note that in
+   C++, it is only safe to use if FUNCTION has no overloads.
+
+   For an example, it is possible to poison 'getline' by:
+   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
+     [getline]) in configure.ac, which potentially defines
+     HAVE_RAW_DECL_GETLINE
+   - adding this code to a header that wraps the system <stdio.h>:
+     #undef getline
+     #if HAVE_RAW_DECL_GETLINE
+     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
+       "not universally present; use the gnulib module getline");
+     #endif
+
+   It is not possible to directly poison global variables.  But it is
+   possible to write a wrapper accessor function, and poison that
+   (less common usage, like &environ, will cause a compilation error
+   rather than issue the nice warning, but the end result of informing
+   the developer about their portability problem is still achieved):
+   #if HAVE_RAW_DECL_ENVIRON
+   static char ***rpl_environ (void) { return &environ; }
+   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
+   # undef environ
+   # define environ (*rpl_environ ())
+   #endif
+   */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
index ff2c406..b5f3141 100644
--- a/build-aux/texinfo.tex
+++ b/build-aux/texinfo.tex
@@ -1,18 +1,18 @@
 % texinfo.tex -- TeX macros to handle Texinfo files.
-%
+% 
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2005-07-05.19}
+\def\texinfoversion{2012-11-08.11}
 %
-% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
-% Foundation, Inc.
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 %
-% This texinfo.tex file is free software; you can redistribute it and/or
+% This texinfo.tex file 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.
+% published by the Free Software Foundation, either version 3 of the
+% License, or (at your option) any later version.
 %
 % This texinfo.tex file is distributed in the hope that it will be
 % useful, but WITHOUT ANY WARRANTY; without even the implied warranty
@@ -20,9 +20,7 @@
 % General Public License for more details.
 %
 % You should have received a copy of the GNU General Public License
-% along with this texinfo.tex file; see the file COPYING.  If not, write
-% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-% Boston, MA 02110-1301, USA.
+% along with this program.  If not, see <http://www.gnu.org/licenses/>.
 %
 % As a special exception, when this file is read by TeX when processing
 % a Texinfo source document, you may use the result without
@@ -30,9 +28,9 @@
 %
 % Please try the latest version of texinfo.tex before submitting bug
 % reports; you can get the latest version from:
-%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
-%   ftp://tug.org/tex/texinfo.tex
-%     (and all CTAN mirrors, see http://www.ctan.org).
+%   http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+%   http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+%   http://www.gnu.org/software/texinfo/ (the Texinfo home page)
 % The texinfo.tex in any given distribution could well be out
 % of date, so if that's what you're using, please check.
 %
@@ -67,7 +65,6 @@
 \everyjob{\message{[Texinfo version \texinfoversion]}%
   \catcode`+=\active \catcode`\_=\active}
 
-\message{Basics,}
 \chardef\other=12
 
 % We never want plain's \outer definition of \+ in Texinfo.
@@ -95,10 +92,13 @@
 \let\ptexnewwrite\newwrite
 \let\ptexnoindent=\noindent
 \let\ptexplus=+
+\let\ptexraggedright=\raggedright
 \let\ptexrbrace=\}
 \let\ptexslash=\/
 \let\ptexstar=\*
 \let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
 
 % If this character appears in an error message or help string, it
 % starts a new line in the output.
@@ -116,10 +116,11 @@
 % Set up fixed words for English if not already set.
 \ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
 \ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
+\ifx\putworderror\undefined     \gdef\putworderror{error}\fi
 \ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
 \ifx\putwordin\undefined        \gdef\putwordin{in}\fi
-\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordIndexIsEmpty\undefined       \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined   \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
 \ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
 \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
 \ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
@@ -153,28 +154,25 @@
 \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
 \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
 
-% In some macros, we cannot use the `\? notation---the left quote is
-% in some cases the escape char.
-\chardef\backChar  = `\\
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% sometimes characters are active, so we need control sequences.
+\chardef\ampChar   = `\&
 \chardef\colonChar = `\:
 \chardef\commaChar = `\,
+\chardef\dashChar  = `\-
 \chardef\dotChar   = `\.
 \chardef\exclamChar= `\!
-\chardef\plusChar  = `\+
+\chardef\hashChar  = `\#
+\chardef\lquoteChar= `\`
 \chardef\questChar = `\?
+\chardef\rquoteChar= `\'
 \chardef\semiChar  = `\;
+\chardef\slashChar = `\/
 \chardef\underChar = `\_
 
-\chardef\spaceChar = `\ %
-\chardef\spacecat = 10
-\def\spaceisspace{\catcode\spaceChar=\spacecat}
-
-{% for help with debugging.
- % example usage: \expandafter\show\activebackslash
- \catcode`\! = 0 \catcode`\\ = \active
- !global!def!activebackslash{\}
-}
-
 % Ignore a token.
 %
 \def\gobble#1{}
@@ -203,36 +201,7 @@
 % that mark overfull boxes (in case you have decided
 % that the text looks ok even though it passes the margin).
 %
-\def\finalout{\overfullrule=0pt}
-
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
-%
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
-  %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
-}
+\def\finalout{\overfullrule=0pt }
 
 % Sometimes it is convenient to have everything in the transcript file
 % and nothing on the terminal.  We don't just call \tracingall here,
@@ -250,7 +219,7 @@
   \tracingmacros2
   \tracingrestores1
   \showboxbreadth\maxdimen \showboxdepth\maxdimen
-  \ifx\eTeXversion\undefined\else % etex gives us more logging
+  \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
     \tracingscantokens1
     \tracingifs1
     \tracinggroups1
@@ -261,6 +230,13 @@
   \errorcontextlines16
 }%
 
+% @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
+% aren't perfect, it's not the end of the world, being an error message,
+% after all.
+% 
+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
+\def\doerrormsg#1{\errmessage{#1}}
+
 % add check for \lastpenalty to plain's definitions.  If the last thing
 % we did was a \nobreak, we don't want to insert more space.
 %
@@ -271,7 +247,6 @@
 \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
   \removelastskip\penalty-200\bigskip\fi\fi}
 
-% For @cropmarks command.
 % Do @cropmarks to get crop marks.
 %
 \newif\ifcropmarks
@@ -285,6 +260,50 @@
 \newdimen\cornerthick \cornerthick=.3pt
 \newdimen\topandbottommargin \topandbottommargin=.75in
 
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page.  The solution is
+% described on page 260 of The TeXbook.  It involves outputting two
+% marks for the sectioning macros, one before the section break, and
+% one after.  I won't pretend I can describe this better than DEK...
+\def\domark{%
+  \toks0=\expandafter{\lastchapterdefs}%
+  \toks2=\expandafter{\lastsectiondefs}%
+  \toks4=\expandafter{\prevchapterdefs}%
+  \toks6=\expandafter{\prevsectiondefs}%
+  \toks8=\expandafter{\lastcolordefs}%
+  \mark{%
+                   \the\toks0 \the\toks2
+      \noexpand\or \the\toks4 \the\toks6
+    \noexpand\else \the\toks8
+  }%
+}
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+  \ifcase0\topmark\fi
+  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\topmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\lastchapterdefs{}
+\def\lastsectiondefs{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\lastcolordefs{}
+
 % Main output routine.
 \chardef\PAGE = 255
 \output = {\onepageout{\pagecontents\PAGE}}
@@ -302,7 +321,9 @@
   %
   % Do this outside of the \shipout so @code etc. will be expanded in
   % the headline as they should be, not taken literally (outputting ''code).
+  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
   \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
   \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
   %
   {%
@@ -311,6 +332,13 @@
     % before the \shipout runs.
     %
     \indexdummies         % don't expand commands in the output.
+    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
+               % the page break happens to be in the middle of an example.
+               % We don't want .vr (or whatever) entries like this:
+               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+               % "\acronym" won't work when it's read back in;
+               % it needs to be
+               % {\code {{\tt \backslashcurfont }acronym}
     \shipout\vbox{%
       % Do this early so pdf references go to the beginning of the page.
       \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
@@ -338,9 +366,9 @@
       \pagebody{#1}%
       \ifdim\ht\footlinebox > 0pt
         % Only leave this space if the footline is nonempty.
-        % (We lessened \vsize for it in \oddfootingxxx.)
+        % (We lessened \vsize for it in \oddfootingyyy.)
         % The \baselineskip=24pt in plain's \makefootline has no effect.
-        \vskip 2\baselineskip
+        \vskip 24pt
         \unvbox\footlinebox
       \fi
       %
@@ -374,7 +402,7 @@
 % marginal hacks, juha@viisa.uucp (Juha Takala)
 \ifvoid\margin\else % marginal info is present
   \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
+\dimen@=\dp#1\relax \unvbox#1\relax
 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
 \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
 }
@@ -396,7 +424,7 @@
 %
 \def\parsearg{\parseargusing{}}
 \def\parseargusing#1#2{%
-  \def\next{#2}%
+  \def\argtorun{#2}%
   \begingroup
     \obeylines
     \spaceisspace
@@ -415,7 +443,7 @@
 \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
 \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
 
-% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
 %
 % \argremovec might leave us with trailing space, e.g.,
 %    @end itemize  @c foo
@@ -427,8 +455,7 @@
 \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
   \def\temp{#3}%
   \ifx\temp\empty
-    % We cannot use \next here, as it holds the macro to run;
-    % thus we reuse \temp.
+    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
     \let\temp\finishparsearg
   \else
     \let\temp\argcheckspaces
@@ -440,14 +467,14 @@
 % If a _delimited_ argument is enclosed in braces, they get stripped; so
 % to get _exactly_ the rest of the line, we had to prevent such situation.
 % We prepended an \empty token at the very beginning and we expand it now,
-% just before passing the control to \next.
-% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
 % either the null string, or it ends with \^^M---thus there is no danger
 % that a pair of braces would be stripped.
 %
 % But first, we have to remove the trailing space token.
 %
-\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
 
 % \parseargdef\foo{...}
 %	is roughly equivalent to
@@ -498,12 +525,12 @@
 % used to check whether the current environment is the one expected.
 %
 % Non-false conditionals (@iftex, @ifset) don't fit into this, so they
-% are not treated as enviroments; they don't open a group.  (The
+% are not treated as environments; they don't open a group.  (The
 % implementation of @end takes care not to call \endgroup in this
 % special case.)
 
 
-% At runtime, environments start with this:
+% At run-time, environments start with this:
 \def\startenvironment#1{\begingroup\def\thisenv{#1}}
 % initialize
 \let\thisenv\empty
@@ -521,7 +548,7 @@
   \fi
 }
 
-% Evironment mismatch, #1 expected:
+% Environment mismatch, #1 expected:
 \def\badenverr{%
   \errhelp = \EMsimple
   \errmessage{This command can appear only \inenvironment\temp,
@@ -529,7 +556,7 @@
 }
 \def\inenvironment#1{%
   \ifx#1\empty
-    out of any environment%
+    outside of any environment%
   \else
     in environment \expandafter\string#1%
   \fi
@@ -541,7 +568,7 @@
 \parseargdef\end{%
   \if 1\csname iscond.#1\endcsname
   \else
-    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
+    % The general wording of \badenverr may not be ideal.
     \expandafter\checkenv\csname#1\endcsname
     \csname E#1\endcsname
     \endgroup
@@ -551,85 +578,6 @@
 \newhelp\EMsimple{Press RETURN to continue.}
 
 
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt\char64}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-\def\mylbrace {{\tt\char123}}
-\def\myrbrace {{\tt\char125}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-\begingroup
-  % Definitions to produce \{ and \} commands for indices,
-  % and @{ and @} for the aux/toc files.
-  \catcode`\{ = \other \catcode`\} = \other
-  \catcode`\[ = 1 \catcode`\] = 2
-  \catcode`\! = 0 \catcode`\\ = \other
-  !gdef!lbracecmd[\{]%
-  !gdef!rbracecmd[\}]%
-  !gdef!lbraceatcmd[@{]%
-  !gdef!rbraceatcmd[@}]%
-!endgroup
-
-% @comma{} to avoid , parsing problems.
-\let\comma = ,
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
-\let\, = \c
-\let\dotaccent = \.
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \t
-\let\ubaraccent = \b
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown @ordf @ordm
-% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
-\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
-  \def\temp{#1}%
-  \ifx\temp\imacro \ptexi
-  \else\ifx\temp\jmacro \j
-  \else \errmessage{@dotless can be used only with i or j}%
-  \fi\fi
-}
-
-% The \TeX{} logo, as in plain, but resetting the spacing so that a
-% period following counts as ending a sentence.  (Idea found in latex.)
-%
-\edef\TeX{\TeX \spacefactor=1000 }
-
-% @LaTeX{} logo.  Not quite the same results as the definition in
-% latex.ltx, since we use a different font for the raised A; it's most
-% convenient for us to use an explicitly smaller font, rather than using
-% the \scriptstyle font (since we don't reset \scriptstyle and
-% \scriptscriptstyle).
-%
-\def\LaTeX{%
-  L\kern-.36em
-  {\setbox0=\hbox{T}%
-   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
-  \kern-.15em
-  \TeX
-}
-
 % Be sure we're in horizontal mode when doing a tie, since we make space
 % equivalent to this in @example-like environments. Otherwise, a space
 % at the beginning of a line will start with \penalty -- and
@@ -646,7 +594,7 @@
 \def\:{\spacefactor=1000 }
 
 % @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
 
 % @/ allows a line break.
 \let\/=\allowbreak
@@ -661,7 +609,7 @@
 \def\?{?\spacefactor=\endofsentencespacefactor\space}
 
 % @frenchspacing on|off  says whether to put extra space after punctuation.
-% 
+%
 \def\onword{on}
 \def\offword{off}
 %
@@ -671,7 +619,7 @@
   \else\ifx\temp\offword \plainnonfrenchspacing
   \else
     \errhelp = \EMsimple
-    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
+    \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
   \fi\fi
 }
 
@@ -753,15 +701,6 @@
 
 \newdimen\mil  \mil=0.001in
 
-% Old definition--didn't work.
-%\parseargdef\need{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
-%\prevdepth=-1000pt
-%}}
-
 \parseargdef\need{%
   % Ensure vertical mode, so we don't make a big box in the middle of a
   % paragraph.
@@ -825,7 +764,7 @@
 
 % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
 % paragraph.  For more general purposes, use the \margin insertion
-% class.  WHICH is `l' or `r'.
+% class.  WHICH is `l' or `r'.  Not documented, written for gawk manual.
 %
 \newskip\inmarginspacing \inmarginspacing=1cm
 \def\strutdepth{\dp\strutbox}
@@ -872,15 +811,51 @@
   \temp
 }
 
-% @include file    insert text of that file as input.
+% @| inserts a changebar to the left of the current line.  It should
+% surround any changed text.  This approach does *not* work if the
+% change spans more than two lines of output.  To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).  This command
+% is not documented, not supported, and doesn't work.
+%
+\def\|{%
+  % \vadjust can only be used in horizontal mode.
+  \leavevmode
+  %
+  % Append this vertical mode material after the current line in the output.
+  \vadjust{%
+    % We want to insert a rule with the height and depth of the current
+    % leading; that is exactly what \strutbox is supposed to record.
+    \vskip-\baselineskip
+    %
+    % \vadjust-items are inserted at the left edge of the type.  So
+    % the \llap here moves out into the left-hand margin.
+    \llap{%
+      %
+      % For a thicker or thinner bar, change the `1pt'.
+      \vrule height\baselineskip width1pt
+      %
+      % This is the space between the bar and the text.
+      \hskip 12pt
+    }%
+  }%
+}
+
+% @include FILE -- \input text of FILE.
 %
 \def\include{\parseargusing\filenamecatcodes\includezzz}
 \def\includezzz#1{%
   \pushthisfilestack
   \def\thisfile{#1}%
   {%
-    \makevalueexpandable
-    \def\temp{\input #1 }%
+    \makevalueexpandable  % we want to expand any @value in FILE.
+    \turnoffactive        % and allow special characters in the expansion
+    \indexnofonts         % Allow `@@' and other weird things in file names.
+    \wlog{texinfo.tex: doing @include of #1^^J}%
+    \edef\temp{\noexpand\input #1 }%
+    %
+    % This trickery is to read FILE outside of a group, in case it makes
+    % definitions, etc.
     \expandafter
   }\temp
   \popthisfilestack
@@ -895,6 +870,8 @@
   \catcode`>=\other
   \catcode`+=\other
   \catcode`-=\other
+  \catcode`\`=\other
+  \catcode`\'=\other
 }
 
 \def\pushthisfilestack{%
@@ -910,7 +887,7 @@
 \def\popthisfilestack{\errthisfilestackempty}
 \def\errthisfilestackempty{\errmessage{Internal error:
   the stack of filenames is empty.}}
-
+%
 \def\thisfile{}
 
 % @center line
@@ -918,36 +895,46 @@
 %
 \parseargdef\center{%
   \ifhmode
-    \let\next\centerH
+    \let\centersub\centerH
   \else
-    \let\next\centerV
+    \let\centersub\centerV
   \fi
-  \next{\hfil \ignorespaces#1\unskip \hfil}%
+  \centersub{\hfil \ignorespaces#1\unskip \hfil}%
+  \let\centersub\relax % don't let the definition persist, just in case
 }
-\def\centerH#1{%
-  {%
-    \hfil\break
-    \advance\hsize by -\leftskip
-    \advance\hsize by -\rightskip
-    \line{#1}%
-    \break
-  }%
+\def\centerH#1{{%
+  \hfil\break
+  \advance\hsize by -\leftskip
+  \advance\hsize by -\rightskip
+  \line{#1}%
+  \break
+}}
+%
+\newcount\centerpenalty
+\def\centerV#1{%
+  % The idea here is the same as in \startdefun, \cartouche, etc.: if
+  % @center is the first thing after a section heading, we need to wipe
+  % out the negative parskip inserted by \sectionheading, but still
+  % prevent a page break here.
+  \centerpenalty = \lastpenalty
+  \ifnum\centerpenalty>10000 \vskip\parskip \fi
+  \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
+  \line{\kern\leftskip #1\kern\rightskip}%
 }
-\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
 
 % @sp n   outputs n lines of vertical space
-
+%
 \parseargdef\sp{\vskip #1\baselineskip}
 
 % @comment ...line which is ignored...
 % @c is the same as @comment
 % @ignore ... @end ignore  is another way to write a comment
-
+%
 \def\comment{\begingroup \catcode`\^^M=\other%
 \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
 \commentxxx}
 {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
+%
 \let\c=\comment
 
 % @paragraphindent NCHARS
@@ -1040,86 +1027,6 @@
 }
 
 
-% @asis just yields its argument.  Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math outputs its argument in math mode.
-%
-% One complication: _ usually means subscripts, but it could also mean
-% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
-% _ active, and distinguish by seeing if the current family is \slfam,
-% which is what @var uses.
-{
-  \catcode\underChar = \active
-  \gdef\mathunderscore{%
-    \catcode\underChar=\active
-    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
-  }
-}
-% Another complication: we want \\ (and @\) to output a \ character.
-% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
-% this is not advertised and we don't care.  Texinfo does not
-% otherwise define @\.
-%
-% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
-\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
-%
-\def\math{%
-  \tex
-  \mathunderscore
-  \let\\ = \mathbackslash
-  \mathactive
-  $\finishmath
-}
-\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
-
-% Some active characters (such as <) are spaced differently in math.
-% We have to reset their definitions in case the @math was an argument
-% to a command which sets the catcodes (such as @item or @section).
-%
-{
-  \catcode`^ = \active
-  \catcode`< = \active
-  \catcode`> = \active
-  \catcode`+ = \active
-  \gdef\mathactive{%
-    \let^ = \ptexhat
-    \let< = \ptexless
-    \let> = \ptexgtr
-    \let+ = \ptexplus
-  }
-}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{$\ptexbullet$}
-\def\minus{$-$}
-
-% @dots{} outputs an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in a typewriter
-% font as three actual period characters.
-%
-\def\dots{%
-  \leavevmode
-  \hbox to 1.5em{%
-    \hskip 0pt plus 0.25fil
-    .\hfil.\hfil.%
-    \hskip 0pt plus 0.5fil
-  }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
-  \dots
-  \spacefactor=\endofsentencespacefactor
-}
-
-% @comma{} is so commas can be inserted into text without messing up
-% Texinfo's parsing.
-%
-\let\comma = ,
-
 % @refill is a no-op.
 \let\refill=\relax
 
@@ -1184,9 +1091,8 @@
 \newif\ifpdfmakepagedest
 
 % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
-% can be set).  So we test for \relax and 0 as well as \undefined,
-% borrowed from ifpdf.sty.
-\ifx\pdfoutput\undefined
+% can be set).  So we test for \relax and 0 as well as being undefined.
+\ifx\pdfoutput\thisisundefined
 \else
   \ifx\pdfoutput\relax
   \else
@@ -1197,99 +1103,156 @@
   \fi
 \fi
 
-% PDF uses PostScript string constants for the names of xref targets, to
+% PDF uses PostScript string constants for the names of xref targets,
 % for display in the outlines, and in other places.  Thus, we have to
 % double any backslashes.  Otherwise, a name like "\node" will be
 % interpreted as a newline (\n), followed by o, d, e.  Not good.
-% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
-% (and related messages, the final outcome is that it is up to the TeX
-% user to double the backslashes and otherwise make the string valid, so
-% that's we do).
-
-% double active backslashes.
 % 
-{\catcode`\@=0 \catcode`\\=\active
- @gdef@activebackslash{@catcode`@\=@active @otherbackslash}
- @gdef@activebackslashdouble{%
-   @catcode@backChar=@active
-   @let\=@doublebackslash}
+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+% related messages.  The final outcome is that it is up to the TeX user
+% to double the backslashes and otherwise make the string valid, so
+% that's what we do.  pdftex 1.30.0 (ca.2005) introduced a primitive to
+% do this reliably, so we use it.
+
+% #1 is a control sequence in which to do the replacements,
+% which we \xdef.
+\def\txiescapepdf#1{%
+  \ifx\pdfescapestring\thisisundefined
+    % No primitive available; should we give a warning or log?
+    % Many times it won't matter.
+  \else
+    % The expandable \pdfescapestring primitive escapes parentheses,
+    % backslashes, and other special chars.
+    \xdef#1{\pdfescapestring{#1}}%
+  \fi
 }
 
-% To handle parens, we must adopt a different approach, since parens are
-% not active characters.  hyperref.dtx (which has the same problem as
-% us) handles it with this amazing macro to replace tokens.  I've
-% tinkered with it a little for texinfo, but it's definitely from there.
-% 
-% #1 is the tokens to replace.
-% #2 is the replacement.
-% #3 is the control sequence with the string.
-% 
-\def\HyPsdSubst#1#2#3{%
-  \def\HyPsdReplace##1#1##2\END{%
-    ##1%
-    \ifx\\##2\\%
-    \else
-      #2%
-      \HyReturnAfterFi{%
-        \HyPsdReplace##2\END
-      }%
-    \fi
-  }%
-  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
-}
-\long\def\HyReturnAfterFi#1\fi{\fi#1}
-
-% #1 is a control sequence in which to do the replacements.
-\def\backslashparens#1{%
-  \xdef#1{#1}% redefine it as its expansion; the definition is simply
-             % \lastnode when called from \setref -> \pdfmkdest.
-  \HyPsdSubst{(}{\backslashlparen}{#1}%
-  \HyPsdSubst{)}{\backslashrparen}{#1}%
-}
-
-{\catcode\exclamChar = 0 \catcode\backChar = \other
- !gdef!backslashlparen{\(}%
- !gdef!backslashrparen{\)}%
-}
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found.  (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
 
 \ifpdf
-  \input pdfcolor
-  \pdfcatalog{/PageMode /UseOutlines}%
+  %
+  % Color manipulation macros based on pdfcolor.tex,
+  % except using rgb instead of cmyk; the latter is said to render as a
+  % very dark gray on-screen and a very dark halftone in print, instead
+  % of actual black.
+  \def\rgbDarkRed{0.50 0.09 0.12}
+  \def\rgbBlack{0 0 0}
+  %
+  % k sets the color for filling (usual text, etc.);
+  % K sets the color for stroking (thin rules, e.g., normal _'s).
+  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
+  %
+  % Set color, and create a mark which defines \thiscolor accordingly,
+  % so that \makeheadline knows which color to restore.
+  \def\setcolor#1{%
+    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+    \domark
+    \pdfsetcolor{#1}%
+  }
+  %
+  \def\maincolor{\rgbBlack}
+  \pdfsetcolor{\maincolor}
+  \edef\thiscolor{\maincolor}
+  \def\lastcolordefs{}
+  %
+  \def\makefootline{%
+    \baselineskip24pt
+    \line{\pdfsetcolor{\maincolor}\the\footline}%
+  }
+  %
+  \def\makeheadline{%
+    \vbox to 0pt{%
+      \vskip-22.5pt
+      \line{%
+        \vbox to8.5pt{}%
+        % Extract \thiscolor definition from the marks.
+        \getcolormarks
+        % Typeset the headline with \maincolor, then restore the color.
+        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+      }%
+      \vss
+    }%
+    \nointerlineskip
+  }
+  %
+  %
+  \pdfcatalog{/PageMode /UseOutlines}
+  %
+  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
   \def\dopdfimage#1#2#3{%
-    \def\imagewidth{#2}%
-    \def\imageheight{#3}%
-    % without \immediate, pdftex seg faults when the same image is
+    \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+    \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+    %
+    % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+    % others).  Let's try in that order, PDF first since if
+    % someone has a scalable image, presumably better to use that than a
+    % bitmap.
+    \let\pdfimgext=\empty
+    \begingroup
+      \openin 1 #1.pdf \ifeof 1
+        \openin 1 #1.PDF \ifeof 1
+          \openin 1 #1.png \ifeof 1
+            \openin 1 #1.jpg \ifeof 1
+              \openin 1 #1.jpeg \ifeof 1
+                \openin 1 #1.JPG \ifeof 1
+                  \errhelp = \nopdfimagehelp
+                  \errmessage{Could not find image file #1 for pdf}%
+                \else \gdef\pdfimgext{JPG}%
+                \fi
+              \else \gdef\pdfimgext{jpeg}%
+              \fi
+            \else \gdef\pdfimgext{jpg}%
+            \fi
+          \else \gdef\pdfimgext{png}%
+          \fi
+        \else \gdef\pdfimgext{PDF}%
+        \fi
+      \else \gdef\pdfimgext{pdf}%
+      \fi
+      \closein 1
+    \endgroup
+    %
+    % without \immediate, ancient pdftex seg faults when the same image is
     % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
     \ifnum\pdftexversion < 14
       \immediate\pdfimage
     \else
       \immediate\pdfximage
     \fi
-      \ifx\empty\imagewidth\else width \imagewidth \fi
-      \ifx\empty\imageheight\else height \imageheight \fi
+      \ifdim \wd0 >0pt width \pdfimagewidth \fi
+      \ifdim \wd2 >0pt height \pdfimageheight \fi
       \ifnum\pdftexversion<13
-         #1.pdf%
+         #1.\pdfimgext
        \else
-         {#1.pdf}%
+         {#1.\pdfimgext}%
        \fi
     \ifnum\pdftexversion < 14 \else
       \pdfrefximage \pdflastximage
     \fi}
+  %
   \def\pdfmkdest#1{{%
     % We have to set dummies so commands such as @code, and characters
     % such as \, aren't expanded when present in a section title.
-    \atdummies
-    \activebackslashdouble
+    \indexnofonts
+    \turnoffactive
+    \makevalueexpandable
     \def\pdfdestname{#1}%
-    \backslashparens\pdfdestname
-    \pdfdest name{\pdfdestname} xyz%
-  }}%
+    \txiescapepdf\pdfdestname
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+  }}
   %
   % used to mark target names; must be expandable.
-  \def\pdfmkpgn#1{#1}%
+  \def\pdfmkpgn#1{#1}
   %
-  \let\linkcolor = \Blue  % was Cyan, but that seems light?
-  \def\endlink{\Black\pdfendlink}
+  % by default, use a color that is dark enough to print on paper as
+  % nearly black, but still distinguishable for online viewing.
+  \def\urlcolor{\rgbDarkRed}
+  \def\linkcolor{\rgbDarkRed}
+  \def\endlink{\setcolor{\maincolor}\pdfendlink}
+  %
   % Adding outlines to PDF; macros for calculating structure of outlines
   % come from Petr Olsak
   \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
@@ -1309,29 +1272,24 @@
     % page number.  We could generate a destination for the section
     % text in the case where a section has no node, but it doesn't
     % seem worth the trouble, since most documents are normally structured.
-    \def\pdfoutlinedest{#3}%
+    \edef\pdfoutlinedest{#3}%
     \ifx\pdfoutlinedest\empty
       \def\pdfoutlinedest{#4}%
     \else
-      % Doubled backslashes in the name.
-      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
-       \backslashparens\pdfoutlinedest}%
+      \txiescapepdf\pdfoutlinedest
     \fi
     %
-    % Also double the backslashes in the display string.
-    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
-     \backslashparens\pdfoutlinetext}%
+    % Also escape PDF chars in the display string.
+    \edef\pdfoutlinetext{#1}%
+    \txiescapepdf\pdfoutlinetext
     %
     \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
   }
   %
   \def\pdfmakeoutlines{%
     \begingroup
-      % Thanh's hack / proper braces in bookmarks
-      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
-      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
-      %
       % Read toc silently, to get counts of subentries for \pdfoutline.
+      \def\partentry##1##2##3##4{}% ignore parts in the outlines
       \def\numchapentry##1##2##3##4{%
 	\def\thischapnum{##2}%
 	\def\thissecnum{0}%
@@ -1385,35 +1343,63 @@
       % Latin 2 (0xea) gets translated to a | character.  Info from
       % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
       %
-      % xx to do this right, we have to translate 8-bit characters to
-      % their "best" equivalent, based on the @documentencoding.  Right
-      % now, I guess we'll just let the pdf reader have its way.
+      % TODO this right, we have to translate 8-bit characters to
+      % their "best" equivalent, based on the @documentencoding.  Too
+      % much work for too little return.  Just use the ASCII equivalents
+      % we use for the index sort strings.
+      % 
       \indexnofonts
       \setupdatafile
-      \activebackslash
-      \input \jobname.toc
+      % We can have normal brace characters in the PDF outlines, unlike
+      % Texinfo index files.  So set that up.
+      \def\{{\lbracecharliteral}%
+      \def\}{\rbracecharliteral}%
+      \catcode`\\=\active \otherbackslash
+      \input \tocreadfilename
     \endgroup
   }
+  {\catcode`[=1 \catcode`]=2
+   \catcode`{=\other \catcode`}=\other
+   \gdef\lbracecharliteral[{]%
+   \gdef\rbracecharliteral[}]%
+  ]
   %
   \def\skipspaces#1{\def\PP{#1}\def\D{|}%
     \ifx\PP\D\let\nextsp\relax
     \else\let\nextsp\skipspaces
-      \ifx\p\space\else\addtokens{\filename}{\PP}%
-        \advance\filenamelength by 1
-      \fi
+      \addtokens{\filename}{\PP}%
+      \advance\filenamelength by 1
     \fi
     \nextsp}
-  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+  \def\getfilename#1{%
+    \filenamelength=0
+    % If we don't expand the argument now, \skipspaces will get
+    % snagged on things like "@value{foo}".
+    \edef\temp{#1}%
+    \expandafter\skipspaces\temp|\relax
+  }
   \ifnum\pdftexversion < 14
     \let \startlink \pdfannotlink
   \else
     \let \startlink \pdfstartlink
   \fi
+  % make a live url in pdf output.
   \def\pdfurl#1{%
     \begingroup
-      \normalturnoffactive\def\@{@}%
+      % it seems we really need yet another set of dummies; have not
+      % tried to figure out what each command should do in the context
+      % of @url.  for now, just make @/ a no-op, that's the only one
+      % people have actually reported a problem with.
+      %
+      \normalturnoffactive
+      \def\@{@}%
+      \let\/=\empty
       \makevalueexpandable
-      \leavevmode\Red
+      % do we want to go so far as to use \indexnofonts instead of just
+      % special-casing \var here?
+      \def\var##1{##1}%
+      %
+      \leavevmode\setcolor{\urlcolor}%
       \startlink attr{/Border [0 0 0]}%
         user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
     \endgroup}
@@ -1440,13 +1426,15 @@
     {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
   \def\pdflink#1{%
     \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
-    \linkcolor #1\endlink}
+    \setcolor{\linkcolor}#1\endlink}
   \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
 \else
+  % non-pdf mode
   \let\pdfmkdest = \gobble
   \let\pdfurl = \gobble
   \let\endlink = \relax
-  \let\linkcolor = \relax
+  \let\setcolor = \gobble
+  \let\pdfsetcolor = \gobble
   \let\pdfmakeoutlines = \relax
 \fi  % \ifx\pdfoutput
 
@@ -1472,6 +1460,10 @@
 \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
 \def\tt{\fam=\ttfam \setfontstyle{tt}}
 
+% Unfortunately, we have to override this for titles and the like, since
+% in those cases "rm" is bold.  Sigh.
+\def\rmisbold{\rm\def\curfontstyle{bf}}
+
 % Texinfo sort of supports the sans serif font style, which plain TeX does not.
 % So we set up a \sf.
 \newfam\sffam
@@ -1481,8 +1473,6 @@
 % We don't need math for this font style.
 \def\ttsl{\setfontstyle{ttsl}}
 
-% Default leading.
-\newdimen\textleading  \textleading = 13.2pt
 
 % Set the baselineskip to #1, and the lineskip and strut size
 % correspondingly.  There is no deep meaning behind these magic numbers
@@ -1492,8 +1482,13 @@
 \def\strutheightpercent{.70833}
 \def\strutdepthpercent {.29167}
 %
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\newdimen\textleading
 \def\setleading#1{%
-  \normalbaselineskip = #1\relax
+  \dimen0 = #1\relax
+  \normalbaselineskip = \baselinefactor\dimen0
   \normallineskip = \lineskipfactor\normalbaselineskip
   \normalbaselines
   \setbox\strutbox =\hbox{%
@@ -1502,20 +1497,295 @@
   }%
 }
 
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-% #3 is the font's design size, #4 is a scale factor
-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+% PDF CMaps.  See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\thisisundefined \else
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+%
+% \cmapOT1IT
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+%
+% \cmapOT1TT
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named \fontprefix#2.
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
+% Example:
+% #1 = \textrm
+% #2 = \rmshape
+% #3 = 10
+% #4 = \mainmagstep
+% #5 = OT1
+%
+\def\setfont#1#2#3#4#5{%
+  \font#1=\fontprefix#2#3 scaled #4
+  \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+%
+% (end of cmaps)
 
 % Use cm as the default font prefix.
 % To specify the font prefix, you must define \fontprefix
 % before you read in texinfo.tex.
-\ifx\fontprefix\undefined
+\ifx\fontprefix\thisisundefined
 \def\fontprefix{cm}
 \fi
 % Support font families that don't use the same naming scheme as CM.
 \def\rmshape{r}
-\def\rmbshape{bx}               %where the normal face is bold
+\def\rmbshape{bx}               % where the normal face is bold
 \def\bfshape{b}
 \def\bxshape{bx}
 \def\ttshape{tt}
@@ -1530,118 +1800,291 @@
 \def\scshape{csc}
 \def\scbshape{csc}
 
+% Definitions for a main text size of 11pt.  (The default in Texinfo.)
+%
+\def\definetextfontsizexi{%
 % Text fonts (11.2pt, magstep1).
 \def\textnominalsize{11pt}
 \edef\mainmagstep{\magstephalf}
-\setfont\textrm\rmshape{10}{\mainmagstep}
-\setfont\texttt\ttshape{10}{\mainmagstep}
-\setfont\textbf\bfshape{10}{\mainmagstep}
-\setfont\textit\itshape{10}{\mainmagstep}
-\setfont\textsl\slshape{10}{\mainmagstep}
-\setfont\textsf\sfshape{10}{\mainmagstep}
-\setfont\textsc\scshape{10}{\mainmagstep}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
 \font\texti=cmmi10 scaled \mainmagstep
 \font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
 
 % A few fonts for @defun names and args.
-\setfont\defbf\bfshape{10}{\magstep1}
-\setfont\deftt\ttshape{10}{\magstep1}
-\setfont\defttsl\ttslshape{10}{\magstep1}
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
 \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
-\setfont\smallrm\rmshape{9}{1000}
-\setfont\smalltt\ttshape{9}{1000}
-\setfont\smallbf\bfshape{10}{900}
-\setfont\smallit\itshape{9}{1000}
-\setfont\smallsl\slshape{9}{1000}
-\setfont\smallsf\sfshape{9}{1000}
-\setfont\smallsc\scshape{10}{900}
-\setfont\smallttsl\ttslshape{10}{900}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
 \font\smalli=cmmi9
 \font\smallsy=cmsy9
+\def\smallecsize{0900}
 
 % Fonts for small examples (8pt).
 \def\smallernominalsize{8pt}
-\setfont\smallerrm\rmshape{8}{1000}
-\setfont\smallertt\ttshape{8}{1000}
-\setfont\smallerbf\bfshape{10}{800}
-\setfont\smallerit\itshape{8}{1000}
-\setfont\smallersl\slshape{8}{1000}
-\setfont\smallersf\sfshape{8}{1000}
-\setfont\smallersc\scshape{10}{800}
-\setfont\smallerttsl\ttslshape{10}{800}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
 \font\smalleri=cmmi8
 \font\smallersy=cmsy8
+\def\smallerecsize{0800}
 
 % Fonts for title page (20.4pt):
 \def\titlenominalsize{20pt}
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\setfont\titleit\itbshape{10}{\magstep4}
-\setfont\titlesl\slbshape{10}{\magstep4}
-\setfont\titlett\ttbshape{12}{\magstep3}
-\setfont\titlettsl\ttslshape{10}{\magstep4}
-\setfont\titlesf\sfbshape{17}{\magstep1}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
 \let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
 \font\titlei=cmmi12 scaled \magstep3
 \font\titlesy=cmsy10 scaled \magstep4
-\def\authorrm{\secrm}
-\def\authortt{\sectt}
+\def\titleecsize{2074}
 
 % Chapter (and unnumbered) fonts (17.28pt).
 \def\chapnominalsize{17pt}
-\setfont\chaprm\rmbshape{12}{\magstep2}
-\setfont\chapit\itbshape{10}{\magstep3}
-\setfont\chapsl\slbshape{10}{\magstep3}
-\setfont\chaptt\ttbshape{12}{\magstep2}
-\setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{17}{1000}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
 \let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
 \font\chapi=cmmi12 scaled \magstep2
 \font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
 
 % Section fonts (14.4pt).
 \def\secnominalsize{14pt}
-\setfont\secrm\rmbshape{12}{\magstep1}
-\setfont\secit\itbshape{10}{\magstep2}
-\setfont\secsl\slbshape{10}{\magstep2}
-\setfont\sectt\ttbshape{12}{\magstep1}
-\setfont\secttsl\ttslshape{10}{\magstep2}
-\setfont\secsf\sfbshape{12}{\magstep1}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
 \let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
 \font\seci=cmmi12 scaled \magstep1
 \font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
 
 % Subsection fonts (13.15pt).
 \def\ssecnominalsize{13pt}
-\setfont\ssecrm\rmbshape{12}{\magstephalf}
-\setfont\ssecit\itbshape{10}{1315}
-\setfont\ssecsl\slbshape{10}{1315}
-\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{1315}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
 \let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{1315}
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
 \font\sseci=cmmi12 scaled \magstephalf
 \font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
 
 % Reduced fonts for @acro in text (10pt).
 \def\reducednominalsize{10pt}
-\setfont\reducedrm\rmshape{10}{1000}
-\setfont\reducedtt\ttshape{10}{1000}
-\setfont\reducedbf\bfshape{10}{1000}
-\setfont\reducedit\itshape{10}{1000}
-\setfont\reducedsl\slshape{10}{1000}
-\setfont\reducedsf\sfshape{10}{1000}
-\setfont\reducedsc\scshape{10}{1000}
-\setfont\reducedttsl\ttslshape{10}{1000}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
 \font\reducedi=cmmi10
 \font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+\textleading = 13.2pt % line spacing for 11pt CM
+\textfonts            % reset the current fonts
+\rm
+} % end of 11pt text font size definitions, \definetextfontsizexi
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit.  This is for the GNU
+% Press printing of the Emacs 22 manual.  Maybe other manuals in the
+% future.  Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+\divide\parskip by 2  % reduce space between paragraphs
+\textleading = 12pt   % line spacing for 10pt CM
+\textfonts            % reset the current fonts
+\rm
+} % end of 10pt text font size definitions, \definetextfontsizex
+
+
+% We provide the user-level command
+%   @fonttextsize 10
+% (or 11) to redefine the text font size.  pt is assumed.
+%
+\def\xiword{11}
+\def\xword{10}
+\def\xwordpt{10pt}
+%
+\parseargdef\fonttextsize{%
+  \def\textsizearg{#1}%
+  %\wlog{doing @fonttextsize \textsizearg}%
+  %
+  % Set \globaldefs so that documents can use this inside @tex, since
+  % makeinfo 4.8 does not support it, but we need it nonetheless.
+  %
+ \begingroup \globaldefs=1
+  \ifx\textsizearg\xword \definetextfontsizex
+  \else \ifx\textsizearg\xiword \definetextfontsizexi
+  \else
+    \errhelp=\EMsimple
+    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+  \fi\fi
+ \endgroup
+}
+
 
 % In order for the font changes to affect most math symbols and letters,
 % we have to define the \textfont of the standard families.  Since
@@ -1681,8 +2124,8 @@
   \let\tenttsl=\titlettsl
   \def\curfontsize{title}%
   \def\lsize{chap}\def\lllsize{subsec}%
-  \resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts\rm #1}}
+  \resetmathfonts \setleading{27pt}}
+\def\titlefont#1{{\titlefonts\rmisbold #1}}
 \def\chapfonts{%
   \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
   \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
@@ -1733,6 +2176,16 @@
   \def\lsize{smaller}\def\lllsize{smaller}%
   \resetmathfonts \setleading{9.5pt}}
 
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
 % Set the fonts to use with the @small... environments.
 \let\smallexamplefonts = \smallfonts
 
@@ -1746,53 +2199,213 @@
 %
 % By the way, for comparison, here's what fits with @example (10pt):
 %   8.5x11=71  smallbook=60  a4=75  a5=58
-%
-% I wish the USA used A4 paper.
 % --karl, 24jan03.
 
-
 % Set up the default fonts, so we can use them for creating boxes.
 %
-\textfonts \rm
+\definetextfontsizexi
 
-% Define these so they can be easily changed for other fonts.
-\def\angleleft{$\langle$}
-\def\angleright{$\rangle$}
+
+\message{markup,}
+
+% Check if we are currently using a typewriter font.  Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
+% define and register \INITMACRO to be called on markup style changes.
+% \INITMACRO can check \currentmarkupstyle for the innermost
+% style and the set of \ifmarkupSTYLE switches for all styles
+% currently in effect.
+\newif\ifmarkupvar
+\newif\ifmarkupsamp
+\newif\ifmarkupkey
+%\newif\ifmarkupfile % @file == @samp.
+%\newif\ifmarkupoption % @option == @samp.
+\newif\ifmarkupcode
+\newif\ifmarkupkbd
+%\newif\ifmarkupenv % @env == @code.
+%\newif\ifmarkupcommand % @command == @code.
+\newif\ifmarkuptex % @tex (and part of @math, for now).
+\newif\ifmarkupexample
+\newif\ifmarkupverb
+\newif\ifmarkupverbatim
+
+\let\currentmarkupstyle\empty
+
+\def\setupmarkupstyle#1{%
+  \csname markup#1true\endcsname
+  \def\currentmarkupstyle{#1}%
+  \markupstylesetup
+}
+
+\let\markupstylesetup\empty
+
+\def\defmarkupstylesetup#1{%
+  \expandafter\def\expandafter\markupstylesetup
+    \expandafter{\markupstylesetup #1}%
+  \def#1%
+}
+
+% Markup style setup for left and right quotes.
+\defmarkupstylesetup\markupsetuplq{%
+  \expandafter\let\expandafter \temp
+    \csname markupsetuplq\currentmarkupstyle\endcsname
+  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
+}
+
+\defmarkupstylesetup\markupsetuprq{%
+  \expandafter\let\expandafter \temp
+    \csname markupsetuprq\currentmarkupstyle\endcsname
+  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\markupsetuplqdefault{\let`\lq}
+\gdef\markupsetuprqdefault{\let'\rq}
+
+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
+\gdef\markupsetcodequoteright{\let'\codequoteright}
+}
+
+\let\markupsetuplqcode \markupsetcodequoteleft
+\let\markupsetuprqcode \markupsetcodequoteright
+%
+\let\markupsetuplqexample \markupsetcodequoteleft
+\let\markupsetuprqexample \markupsetcodequoteright
+%
+\let\markupsetuplqkbd     \markupsetcodequoteleft
+\let\markupsetuprqkbd     \markupsetcodequoteright
+%
+\let\markupsetuplqsamp \markupsetcodequoteleft
+\let\markupsetuprqsamp \markupsetcodequoteright
+%
+\let\markupsetuplqverb \markupsetcodequoteleft
+\let\markupsetuprqverb \markupsetcodequoteright
+%
+\let\markupsetuplqverbatim \markupsetcodequoteleft
+\let\markupsetuprqverbatim \markupsetcodequoteright
+
+% Allow an option to not use regular directed right quote/apostrophe
+% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
+% The undirected quote is ugly, so don't make it the default, but it
+% works for pasting with more pdf viewers (at least evince), the
+% lilypond developers report.  xpdf does work with the regular 0x27.
+%
+\def\codequoteright{%
+  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+      '%
+    \else \char'15 \fi
+  \else \char'15 \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+      % [Knuth] pp. 380,381,391
+      % \relax disables Spanish ligatures ?` and !` of \tt font.
+      \relax`%
+    \else \char'22 \fi
+  \else \char'22 \fi
+}
+
+% Commands to set the quote options.
+% 
+\parseargdef\codequoteundirected{%
+  \def\temp{#1}%
+  \ifx\temp\onword
+    \expandafter\let\csname SETtxicodequoteundirected\endcsname
+      = t%
+  \else\ifx\temp\offword
+    \expandafter\let\csname SETtxicodequoteundirected\endcsname
+      = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
+  \fi\fi
+}
+%
+\parseargdef\codequotebacktick{%
+  \def\temp{#1}%
+  \ifx\temp\onword
+    \expandafter\let\csname SETtxicodequotebacktick\endcsname
+      = t%
+  \else\ifx\temp\offword
+    \expandafter\let\csname SETtxicodequotebacktick\endcsname
+      = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
+  \fi\fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
 
 % Count depth in font-changes, for error checks
 \newcount\fontdepth \fontdepth=0
 
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bfshape{10}{\magstep1}  % no cmb12
-\setfont\shortcontsl\slshape{12}{1000}
-\setfont\shortconttt\ttshape{12}{1000}
+% Font commands.
 
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
+% #1 is the font command (\sl or \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+  \ifusingtt 
+    {{\ttsl #2}\let\next=\relax}%
+    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+  \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
 
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
-                    \ptexslash\fi\fi\fi}
-\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
-\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+% Output an italic correction unless \next (presumed to be the following
+% character) is such as not to need one.
+\def\smartitaliccorrection{%
+  \ifx\next,%
+  \else\ifx\next-%
+  \else\ifx\next.%
+  \else\ptexslash
+  \fi\fi\fi
+  \aftersmartic
+}
 
-% like \smartslanted except unconditionally uses \ttsl.
-% @var is set to this for defun arguments.
-\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
+\def\ttslanted#1{{\ttsl #1}}
 
-% like \smartslanted except unconditionally use \sl.  We never want
+% @cite is like \smartslanted except unconditionally use \sl.  We never want
 % ttsl for book titles, do we?
-\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
+
+\def\aftersmartic{}
+\def\var#1{%
+  \let\saveaftersmartic = \aftersmartic
+  \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
+  \smartslanted{#1}%
+}
 
 \let\i=\smartitalic
 \let\slanted=\smartslanted
-\let\var=\smartslanted
 \let\dfn=\smartslanted
 \let\emph=\smartitalic
 
-% @b, explicit bold.
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}}              % roman font
+\def\sc#1{{\smallcaps#1}}       % smallcaps font
+\def\ii#1{{\it #1}}             % italic font
+
+% @b, explicit bold.  Also @strong.
 \def\b#1{{\bf #1}}
 \let\strong=\b
 
@@ -1824,29 +2437,21 @@
 \catcode`@=\other
 \def\endofsentencespacefactor{3000}% default
 
+% @t, explicit typewriter.
 \def\t#1{%
   {\tt \rawbackslash \plainfrenchspacing #1}%
   \null
 }
-\def\samp#1{`\tclose{#1}'\null}
-\setfont\keyrm\rmshape{8}{1000}
-\font\keysy=cmsy9
-\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-    \vbox{\hrule\kern-0.4pt
-     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-    \kern-0.4pt\hrule}%
-  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-% The old definition, with no lozenge:
-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
 
-% @file, @option are the same as @samp.
-\let\file=\samp
-\let\option=\samp
+% @samp.
+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
 
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
+% @indicateurl is \samp, that is, with quotes.
+\let\indicateurl=\samp
+
+% @code (and similar) prints in typewriter, but with spaces the same
+% size as normal in the surrounding text, without hyphenation, etc.
+% This is a subroutine for that.
 \def\tclose#1{%
   {%
     % Change normal interword space to be same as for the current font.
@@ -1865,24 +2470,27 @@
     \plainfrenchspacing
     #1%
   }%
-  \null
+  \null % reset spacefactor to 1000
 }
 
 % We *must* turn on hyphenation at `-' and `_' in @code.
 % Otherwise, it is too hard to avoid overfull hboxes
 % in the Emacs manual, the Library manual, etc.
-
+%
 % Unfortunately, TeX uses one parameter (\hyphenchar) to control
 % both hyphenation at - and hyphenation within words.
 % We must therefore turn them both off (\tclose does that)
 % and arrange explicitly to hyphenate at a dash.
 %  -- rms.
 {
-  \catcode`\-=\active
-  \catcode`\_=\active
+  \catcode`\-=\active \catcode`\_=\active
+  \catcode`\'=\active \catcode`\`=\active
+  \global\let'=\rq \global\let`=\lq  % default definitions
   %
   \global\def\code{\begingroup
-    \catcode`\-=\active  \catcode`\_=\active
+    \setupmarkupstyle{code}%
+    % The following should really be moved into \setupmarkupstyle handlers.
+    \catcode\dashChar=\active  \catcode\underChar=\active
     \ifallowcodebreaks
      \let-\codedash
      \let_\codeunder
@@ -1894,6 +2502,8 @@
   }
 }
 
+\def\codex #1{\tclose{#1}\endgroup}
+
 \def\realdash{-}
 \def\codedash{-\discretionary{}{}{}}
 \def\codeunder{%
@@ -1907,13 +2517,12 @@
              \discretionary{}{}{}}%
             {\_}%
 }
-\def\codex #1{\tclose{#1}\endgroup}
 
 % An additional complication: the above will allow breaks after, e.g.,
 % each of the four underscores in __typeof__.  This is undesirable in
 % some manuals, especially if they don't have long identifiers in
 % general.  @allowcodebreaks provides a way to control this.
-% 
+%
 \newif\ifallowcodebreaks  \allowcodebreakstrue
 
 \def\keywordtrue{true}
@@ -1927,55 +2536,25 @@
     \allowcodebreaksfalse
   \else
     \errhelp = \EMsimple
-    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
+    \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
   \fi\fi
 }
 
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-%   `example' (@kbd uses ttsl only inside of @example and friends),
-%   or `code' (@kbd uses normal tty font always).
-\parseargdef\kbdinputstyle{%
-  \def\txiarg{#1}%
-  \ifx\txiarg\worddistinct
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
-  \else\ifx\txiarg\wordexample
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
-  \else\ifx\txiarg\wordcode
-    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
-  \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is `distinct.'
-\kbdinputstyle distinct
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\kbdfont\look}}\fi
-\else{\tclose{\kbdfont\look}}\fi}
-
-% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
-\let\indicateurl=\code
-\let\env=\code
+% For @command, @env, @file, @option quotes seem unnecessary,
+% so use \code rather than \samp.
 \let\command=\code
+\let\env=\code
+\let\file=\code
+\let\option=\code
 
 % @uref (abbreviation for `urlref') takes an optional (comma-separated)
 % second argument specifying the text to display and an optional third
 % arg as text to display instead of (rather than in addition to) the url
-% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
-% a hypertex \special here.
-%
-\def\uref#1{\douref #1,,,\finish}
-\def\douref#1,#2,#3,#4\finish{\begingroup
+% itself.  First (mandatory) arg is the url.
+% (This \urefnobreak definition isn't used now, leaving it for a while
+% for comparison.)
+\def\urefnobreak#1{\dourefnobreak #1,,,\finish}
+\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup
   \unsepspaces
   \pdfurl{#1}%
   \setbox0 = \hbox{\ignorespaces #3}%
@@ -1996,6 +2575,103 @@
   \endlink
 \endgroup}
 
+% This \urefbreak definition is the active one.
+\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
+\let\uref=\urefbreak
+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+  \unsepspaces
+  \pdfurl{#1}%
+  \setbox0 = \hbox{\ignorespaces #3}%
+  \ifdim\wd0 > 0pt
+    \unhbox0 % third arg given, show only that
+  \else
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0 > 0pt
+      \ifpdf
+        \unhbox0             % PDF: 2nd arg given, show only it
+      \else
+        \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url
+      \fi
+    \else
+      \urefcode{#1}% only url given, so show it
+    \fi
+  \fi
+  \endlink
+\endgroup}
+
+% Allow line breaks around only a few characters (only).
+\def\urefcatcodes{%
+  \catcode\ampChar=\active   \catcode\dotChar=\active
+  \catcode\hashChar=\active  \catcode\questChar=\active
+  \catcode\slashChar=\active
+}
+{
+  \urefcatcodes
+  %
+  \global\def\urefcode{\begingroup
+    \setupmarkupstyle{code}%
+    \urefcatcodes
+    \let&\urefcodeamp
+    \let.\urefcodedot
+    \let#\urefcodehash
+    \let?\urefcodequest
+    \let/\urefcodeslash
+    \codex
+  }
+  %
+  % By default, they are just regular characters.
+  \global\def&{\normalamp}
+  \global\def.{\normaldot}
+  \global\def#{\normalhash}
+  \global\def?{\normalquest}
+  \global\def/{\normalslash}
+}
+
+% we put a little stretch before and after the breakable chars, to help
+% line breaking of long url's.  The unequal skips make look better in
+% cmtt at least, especially for dots.
+\def\urefprestretch{\urefprebreak \hskip0pt plus.13em }
+\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em }
+%
+\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
+\def\urefcodedot{\urefprestretch .\urefpoststretch}
+\def\urefcodehash{\urefprestretch \#\urefpoststretch}
+\def\urefcodequest{\urefprestretch ?\urefpoststretch}
+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
+{
+  \catcode`\/=\active
+  \global\def\urefcodeslashfinish{%
+    \urefprestretch \slashChar
+    % Allow line break only after the final / in a sequence of
+    % slashes, to avoid line break between the slashes in http://.
+    \ifx\next/\else \urefpoststretch \fi
+  }
+}
+
+% One more complication: by default we'll break after the special
+% characters, but some people like to break before the special chars, so
+% allow that.  Also allow no breaking at all, for manual control.
+% 
+\parseargdef\urefbreakstyle{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\wordnone
+    \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
+  \else\ifx\txiarg\wordbefore
+    \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
+  \else\ifx\txiarg\wordafter
+    \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
+  \fi\fi\fi
+}
+\def\wordafter{after}
+\def\wordbefore{before}
+\def\wordnone{none}
+
+\urefbreakstyle after
+
 % @url synonym for @uref, since that's how everyone uses it.
 %
 \let\url=\uref
@@ -2017,34 +2693,81 @@
   \let\email=\uref
 \fi
 
-% Check if we are currently using a typewriter font.  Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+%   `example' (@kbd uses ttsl only inside of @example and friends),
+%   or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\worddistinct
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+  \else\ifx\txiarg\wordexample
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+  \else\ifx\txiarg\wordcode
+    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
+  \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
+
+\def\xkey{\key}
+\def\kbdsub#1#2#3\par{%
+  \def\one{#1}\def\three{#3}\def\threex{??}%
+  \ifx\one\xkey\ifx\threex\three \key{#2}%
+  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+}
+
+% definition of @key that produces a lozenge.  Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+%    \vbox{\hrule\kern-0.4pt
+%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+%    \kern-0.4pt\hrule}%
+%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge.  If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle.  But
+% if it isn't monospace, then use \tt.
 %
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+\def\key#1{{\setupmarkupstyle{key}%
+  \nohyphenation
+  \ifmonospace\else\tt\fi
+  #1}\null}
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow   (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
 
 % Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
 % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
 %
 \def\dmn#1{\thinspace #1}
 
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
 % @l was never documented to mean ``switch to the Lisp font'',
 % and it is not used as such in any manual I can find.  We need it for
 % Polish suppressed-l.  --karl, 22sep96.
 %\def\l#1{{\li #1}\null}
 
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}}              % roman font
-\def\sc#1{{\smallcaps#1}}       % smallcaps font
-\def\ii#1{{\it #1}}             % italic font
-
 % @acronym for "FBI", "NATO", and the like.
 % We print this one point size smaller, since it's intended for
 % all-uppercase.
-% 
+%
 \def\acronym#1{\doacronym #1,,\finish}
 \def\doacronym#1,#2,#3\finish{%
   {\selectfonts\lsize #1}%
@@ -2052,11 +2775,12 @@
   \ifx\temp\empty \else
     \space ({\unsepspaces \ignorespaces \temp \unskip})%
   \fi
+  \null % reset \spacefactor=1000
 }
 
 % @abbr for "Comput. J." and the like.
 % No font change, but don't do end-of-sentence spacing.
-% 
+%
 \def\abbr#1{\doabbr #1,,\finish}
 \def\doabbr#1,#2,#3\finish{%
   {\plainfrenchspacing #1}%
@@ -2064,8 +2788,258 @@
   \ifx\temp\empty \else
     \space ({\unsepspaces \ignorespaces \temp \unskip})%
   \fi
+  \null % reset \spacefactor=1000
 }
 
+% @asis just yields its argument.  Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+  \catcode`\_ = \active
+  \gdef\mathunderscore{%
+    \catcode`\_=\active
+    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+  }
+}
+% Another complication: we want \\ (and @\) to output a math (or tt) \.
+% FYI, plain.tex uses \\ as a temporary control sequence (for no
+% particular reason), but this is not advertised and we don't care.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+  \tex
+  \mathunderscore
+  \let\\ = \mathbackslash
+  \mathactive
+  % make the texinfo accent commands work in math mode
+  \let\"=\ddot
+  \let\'=\acute
+  \let\==\bar
+  \let\^=\hat
+  \let\`=\grave
+  \let\u=\breve
+  \let\v=\check
+  \let\~=\tilde
+  \let\dotaccent=\dot
+  $\finishmath
+}
+\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+  \catcode`^ = \active
+  \catcode`< = \active
+  \catcode`> = \active
+  \catcode`+ = \active
+  \catcode`' = \active
+  \gdef\mathactive{%
+    \let^ = \ptexhat
+    \let< = \ptexless
+    \let> = \ptexgtr
+    \let+ = \ptexplus
+    \let' = \ptexquoteright
+  }
+}
+
+% ctrl is no longer a Texinfo command, but leave this definition for fun.
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+% except specified as a normal braced arg, so no newlines to worry about.
+% 
+\def\outfmtnametex{tex}
+%
+\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
+\long\def\doinlinefmt#1,#2,\finish{%
+  \def\inlinefmtname{#1}%
+  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+}
+% For raw, must switch into @tex before parsing the argument, to avoid
+% setting catcodes prematurely.  Doing it this way means that, for
+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
+% ignored.  But this isn't important because if people want a literal
+% *right* brace they would have to use a command anyway, so they may as
+% well use a command to get a left brace too.  We could re-use the
+% delimiter character idea from \verb, but it seems like overkill.
+% 
+\long\def\inlineraw{\tex \doinlineraw}
+\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
+\def\doinlinerawtwo#1,#2,\finish{%
+  \def\inlinerawname{#1}%
+  \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
+  \endgroup % close group opened by \tex.
+}
+
+
+\message{glyphs,}
+% and logos.
+
+% @@ prints an @, as does @atchar{}.
+\def\@{\char64 }
+\let\atchar=\@
+
+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
+% Unless we're in typewriter, use \ecfont because the CM text fonts do
+% not have braces, and we don't want to switch into math.
+\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
+\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
+\let\{=\mylbrace \let\lbracechar=\{
+\let\}=\myrbrace \let\rbracechar=\}
+\begingroup
+  % Definitions to produce \{ and \} commands for indices,
+  % and @{ and @} for the aux/toc files.
+  \catcode`\{ = \other \catcode`\} = \other
+  \catcode`\[ = 1 \catcode`\] = 2
+  \catcode`\! = 0 \catcode`\\ = \other
+  !gdef!lbracecmd[\{]%
+  !gdef!rbracecmd[\}]%
+  !gdef!lbraceatcmd[@{]%
+  !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \ptexc
+\let\dotaccent = \ptexdot
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \ptext
+\let\ubaraccent = \ptexb
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+  \def\temp{#1}%
+  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+  \else \errmessage{@dotless can be used only with i or j}%
+  \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence.  (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo.  Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+  L\kern-.36em
+  {\setbox0=\hbox{T}%
+   \vbox to \ht0{\hbox{%
+     \ifx\textnominalsize\xwordpt
+       % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
+       % Revert to plain's \scriptsize, which is 7pt.
+       \count255=\the\fam $\fam\count255 \scriptstyle A$%
+     \else
+       % For 11pt, we can use our lllsize.
+       \selectfonts\lllsize A%
+     \fi
+     }%
+     \vss
+  }}%
+  \kern-.15em
+  \TeX
+}
+
+% Some math mode symbols.
+\def\bullet{$\ptexbullet$}
+\def\geq{\ifmmode \ge\else $\ge$\fi}
+\def\leq{\ifmmode \le\else $\le$\fi}
+\def\minus{\ifmmode -\else $-$\fi}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em.  So do
+% whichever is larger.
+%
+\def\dots{%
+  \leavevmode
+  \setbox0=\hbox{...}% get width of three periods
+  \ifdim\wd0 > 1.5em
+    \dimen0 = \wd0
+  \else
+    \dimen0 = 1.5em
+  \fi
+  \hbox to \dimen0{%
+    \hskip 0pt plus.25fil
+    .\hskip 0pt plus1fil
+    .\hskip 0pt plus1fil
+    .\hskip 0pt plus.5fil
+  }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+  \dots
+  \spacefactor=\endofsentencespacefactor
+}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+   \advance\hsize by -2\dimen2 % Rules.
+   \vbox{%
+      \hrule height\dimen2
+      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
+         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+         \kern3pt\vrule width\dimen2}% Space to right.
+      \hrule height\dimen2}
+    \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
 % @pounds{} is a sterling sign, which Knuth put in the CM italic font.
 %
 \def\pounds{{\it\$}}
@@ -2075,49 +3049,118 @@
 % Theiling, which support regular, slanted, bold and bold slanted (and
 % "outlined" (blackboard board, sort of) versions, which we don't need).
 % It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
-% 
+%
 % Although only regular is the truly official Euro symbol, we ignore
 % that.  The Euro is designed to be slightly taller than the regular
 % font height.
-% 
+%
 % feymr - regular
 % feymo - slanted
 % feybr - bold
 % feybo - bold slanted
-% 
+%
 % There is no good (free) typewriter version, to my knowledge.
 % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
 % Hmm.
-% 
+%
 % Also doesn't work in math.  Do we need to do math with euro symbols?
 % Hope not.
-% 
-% 
+%
+%
 \def\euro{{\eurofont e}}
 \def\eurofont{%
   % We set the font at each command, rather than predefining it in
   % \textfonts and the other font-switching commands, so that
   % installations which never need the symbol don't have to have the
   % font installed.
-  % 
+  %
   % There is only one designed size (nominal 10pt), so we always scale
   % that to the current nominal size.
-  % 
+  %
   % By the way, simply using "at 1em" works for cmr10 and the like, but
   % does not work for cmbx10 and other extended/shrunken fonts.
-  % 
+  %
   \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
   %
-  \ifx\curfontstyle\bfstylename 
+  \ifx\curfontstyle\bfstylename
     % bold:
     \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
-  \else 
+  \else
     % regular:
     \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
   \fi
   \thiseurofont
 }
 
+% Glyphs from the EC fonts.  We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases.  We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+  \def\temp{#1}%
+  \ifx\temp\macrocharA\Aogonek
+  \else\ifx\temp\macrochara\aogonek
+  \else\ifx\temp\macrocharE\Eogonek
+  \else\ifx\temp\macrochare\eogonek
+  \else
+    \ecfont \setbox0=\hbox{#1}%
+    \ifdim\ht0=1ex\accent"0C #1%
+    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+    \fi
+  \fi\fi\fi\fi
+  }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
+\def\ecfont{%
+  % We can't distinguish serif/sans and italic/slanted, but this
+  % is used for crude hacks anyway (like adding French and German
+  % quotes to documents typeset with CM, where we lose kerning), so
+  % hopefully nobody will notice/care.
+  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+  \ifmonospace
+    % typewriter:
+    \font\thisecfont = ectt\ecsize \space at \nominalsize
+  \else
+    \ifx\curfontstyle\bfstylename
+      % bold:
+      \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+    \else
+      % regular:
+      \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+    \fi
+  \fi
+  \thisecfont
+}
+
 % @registeredsymbol - R in a circle.  The font for the R should really
 % be smaller yet, but lllsize is the best we can do for now.
 % Adapted from the plain.tex definition of \copyright.
@@ -2128,14 +3171,24 @@
     }$%
 }
 
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
 % Laurent Siebenmann reports \Orb undefined with:
 %  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
 % so we'll define it if necessary.
-% 
-\ifx\Orb\undefined
+%
+\ifx\Orb\thisisundefined
 \def\Orb{\mathhexbox20D}
 \fi
 
+% Quotes.
+\chardef\quotedblleft="5C
+\chardef\quotedblright=`\"
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
 
 \message{page headings,}
 
@@ -2154,8 +3207,9 @@
 \newif\ifsetshortcontentsaftertitlepage
  \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
 
-\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-        \endgroup\page\hbox{}\page}
+\parseargdef\shorttitlepage{%
+  \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+  \endgroup\page\hbox{}\page}
 
 \envdef\titlepage{%
   % Open one extra group, as we want to close it in the middle of \Etitlepage.
@@ -2215,17 +3269,28 @@
   \finishedtitlepagetrue
 }
 
-%%% Macros to be used within @titlepage:
+% Settings used for typesetting titles: no hyphenation, no indentation,
+% don't worry much about spacing, ragged right.  This should be used
+% inside a \vbox, and fonts need to be set appropriately first.  Because
+% it is always used for titles, nothing else, we call \rmisbold.  \par
+% should be specified before the end of the \vbox, since a vbox is a group.
+% 
+\def\raggedtitlesettings{%
+  \rmisbold
+  \hyphenpenalty=10000
+  \parindent=0pt
+  \tolerance=5000
+  \ptexraggedright
+}
+
+% Macros to be used within @titlepage:
 
 \let\subtitlerm=\tenrm
 \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
 
-\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
-		\let\tt=\authortt}
-
 \parseargdef\title{%
   \checkenv\titlepage
-  \leftline{\titlefonts\rm #1}
+  \vbox{\titlefonts \raggedtitlesettings #1\par}%
   % print a rule at the page bottom also.
   \finishedtitlepagefalse
   \vskip4pt \hrule height 4pt width \hsize \vskip4pt
@@ -2246,12 +3311,12 @@
   \else
     \checkenv\titlepage
     \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
-    {\authorfont \leftline{#1}}%
+    {\secfonts\rmisbold \leftline{#1}}%
   \fi
 }
 
 
-%%% Set up page headings and footings.
+% Set up page headings and footings.
 
 \let\thispage=\folio
 
@@ -2299,12 +3364,39 @@
   %
   % Leave some space for the footline.  Hopefully ok to assume
   % @evenfooting will not be used by itself.
-  \global\advance\pageheight by -\baselineskip
-  \global\advance\vsize by -\baselineskip
+  \global\advance\pageheight by -12pt
+  \global\advance\vsize by -12pt
 }
 
 \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
 
+% @evenheadingmarks top     \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
+                          \headingmarks{odd}{heading}{#1} }
+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+                          \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+  \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
 
 % @headings double      turns headings on for double-sided printing.
 % @headings single      turns headings on for single-sided printing.
@@ -2318,10 +3410,14 @@
 
 \def\headings #1 {\csname HEADINGS#1\endcsname}
 
-\def\HEADINGSoff{%
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
+\def\headingsoff{% non-global headings elimination
+  \evenheadline={\hfil}\evenfootline={\hfil}%
+   \oddheadline={\hfil}\oddfootline={\hfil}%
+}
+
+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
+\HEADINGSoff  % it's the default
+
 % When we turn headings on, set the page number to 1.
 % For double-sided printing, put current file name in lower left corner,
 % chapter name on inside top of right hand pages, document
@@ -2372,7 +3468,7 @@
 % This produces Day Month Year style of output.
 % Only define if not already defined, in case a txi-??.tex file has set
 % up a different format (e.g., txi-cs.tex does this).
-\ifx\today\undefined
+\ifx\today\thisisundefined
 \def\today{%
   \number\day\space
   \ifcase\month
@@ -2433,7 +3529,7 @@
     \begingroup
       \advance\leftskip by-\tableindent
       \advance\hsize by\tableindent
-      \advance\rightskip by0pt plus1fil
+      \advance\rightskip by0pt plus1fil\relax
       \leavevmode\unhbox0\par
     \endgroup
     %
@@ -2447,7 +3543,7 @@
     % cause the example and the item to crash together.  So we use this
     % bizarre value of 10001 as a signal to \aboveenvbreak to insert
     % \parskip glue after all.  Section titles are handled this way also.
-    % 
+    %
     \penalty 10001
     \endgroup
     \itemxneedsnegativevskipfalse
@@ -2541,9 +3637,18 @@
   \parindent=0pt
   \parskip=\smallskipamount
   \ifdim\parskip=0pt \parskip=2pt \fi
+  %
+  % Try typesetting the item mark that if the document erroneously says
+  % something like @itemize @samp (intending @table), there's an error
+  % right away at the @itemize.  It's not the best error message in the
+  % world, but it's better than leaving it to the @item.  This means if
+  % the user wants an empty mark, they have to say @w{} not just @w.
   \def\itemcontents{#1}%
+  \setbox0 = \hbox{\itemcontents}%
+  %
   % @itemize with no arg is equivalent to @itemize @bullet.
   \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+  %
   \let\item=\itemizeitem
 }
 
@@ -2564,6 +3669,7 @@
    \ifnum\lastpenalty<10000 \parskip=0in \fi
    \noindent
    \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+   %
    \vadjust{\penalty 1200}}% not good to break after first line of item.
   \flushcr
 }
@@ -2785,12 +3891,19 @@
 %
 % @headitem starts a heading row, which we typeset in bold.
 % Assignments have to be global since we are inside the implicit group
-% of an alignment entry.  Note that \everycr resets \everytab.
-\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
+% of an alignment entry.  \everycr resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+  \checkenv\multitable
+  \crcr
+  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+  \the\everytab % for the first item
+}%
 %
 % A \tab used to include \hskip1sp.  But then the space in a template
 % line is not enough.  That is bad.  So let's go back to just `&' until
-% we encounter the problem it was intended to solve again.
+% we again encounter the problem the 1sp was intended to solve.
 %					--karl, nathan@acm.org, 20apr99.
 \def\tab{\checkenv\multitable &\the\everytab}%
 
@@ -2902,18 +4015,18 @@
 \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
 \global\advance\multitablelinespace by-\ht0
 \fi
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%%        If so, set to same dimension as multitablelinespace.
+% Test to see if parskip is larger than space between lines of
+% table. If not, do nothing.
+%        If so, set to same dimension as multitablelinespace.
 \ifdim\multitableparskip>\multitablelinespace
 \global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-                                      %% than skip between lines in the table.
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+                                      % than skip between lines in the table.
 \fi%
 \ifdim\multitableparskip=0pt
 \global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-                                      %% than skip between lines in the table.
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+                                      % than skip between lines in the table.
 \fi}
 
 
@@ -2959,6 +4072,7 @@
 
 \def\doignore#1{\begingroup
   % Scan in ``verbatim'' mode:
+  \obeylines
   \catcode`\@ = \other
   \catcode`\{ = \other
   \catcode`\} = \other
@@ -2979,16 +4093,16 @@
   \gdef\dodoignore#1{%
     % #1 contains the command name as a string, e.g., `ifinfo'.
     %
-    % Define a command to find the next `@end #1', which must be on a line
-    % by itself.
-    \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}%
+    % Define a command to find the next `@end #1'.
+    \long\def\doignoretext##1^^M@end #1{%
+      \doignoretextyyy##1^^M@#1\_STOP_}%
+    %
     % And this command to find another #1 command, at the beginning of a
     % line.  (Otherwise, we would consider a line `@c @ifset', for
     % example, to count as an @ifset for nesting.)
     \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
     %
     % And now expand that command.
-    \obeylines %
     \doignoretext ^^M%
   }%
 }
@@ -3018,7 +4132,12 @@
 }
 
 % Finish off ignored text.
-\def\enddoignore{\endgroup\ignorespaces}
+{ \obeylines%
+  % Ignore anything after the last `@end #1'; this matters in verbatim
+  % environments, where otherwise the newline after an ignored conditional
+  % would result in a blank line in the output.
+  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
 
 
 % @set VAR sets the variable VAR to an empty value.
@@ -3108,7 +4227,7 @@
 }
 \def\ifsetfail{\doignore{ifset}}
 
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% @ifclear VAR ... @end executes the `...' iff VAR has never been
 % defined with @set, or has been undefined with @clear.
 %
 % The `\else' inside the `\doifset' parameter is a trick to reuse the
@@ -3119,6 +4238,35 @@
 \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
 \def\ifclearfail{\doignore{ifclear}}
 
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
+% without the @) is in fact defined.  We can only feasibly check at the
+% TeX level, so something like `mathcode' is going to considered
+% defined even though it is not a Texinfo command.
+% 
+\makecond{ifcommanddefined}
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
+%
+\def\doifcmddefined#1#2{{%
+    \makevalueexpandable
+    \let\next=\empty
+    \expandafter\ifx\csname #2\endcsname\relax
+      #1% If not defined, \let\next as above.
+    \fi
+    \expandafter
+  }\next
+}
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
+
+% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
+\makecond{ifcommandnotdefined}
+\def\ifcommandnotdefined{%
+  \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
+
+% Set the `txicommandconditionals' variable, so documents have a way to
+% test if the @ifcommand...defined conditionals are available.
+\set txicommandconditionals
+
 % @dircategory CATEGORY  -- specify a category of the dir file
 % which this file should belong to.  Ignore this in TeX.
 \let\dircategory=\comment
@@ -3183,11 +4331,11 @@
 \def\dosynindex#1#2#3{%
   % Only do \closeout if we haven't already done it, else we'll end up
   % closing the target index.
-  \expandafter \ifx\csname donesynindex#2\endcsname \undefined
+  \expandafter \ifx\csname donesynindex#2\endcsname \relax
     % The \closeout helps reduce unnecessary open files; the limit on the
     % Acorn RISC OS is a mere 16 files.
     \expandafter\closeout\csname#2indfile\endcsname
-    \expandafter\let\csname\donesynindex#2\endcsname = 1
+    \expandafter\let\csname donesynindex#2\endcsname = 1
   \fi
   % redefine \fooindfile:
   \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
@@ -3221,11 +4369,41 @@
   \escapechar = `\\     % use backslash in output files.
   \def\@{@}% change to @@ when we switch to @ as escape char in index files.
   \def\ {\realbackslash\space }%
-  % Need these in case \tex is in effect and \{ is a \delimiter again.
-  % But can't use \lbracecmd and \rbracecmd because texindex assumes
-  % braces and backslashes are used only as delimiters.
-  \let\{ = \mylbrace
-  \let\} = \myrbrace
+  %
+  % Need these unexpandable (because we define \tt as a dummy)
+  % definitions when @{ or @} appear in index entry text.  Also, more
+  % complicated, when \tex is in effect and \{ is a \delimiter again.
+  % We can't use \lbracecmd and \rbracecmd because texindex assumes
+  % braces and backslashes are used only as delimiters.  Perhaps we
+  % should define @lbrace and @rbrace commands a la @comma.
+  \def\{{{\tt\char123}}%
+  \def\}{{\tt\char125}}%
+  %
+  % I don't entirely understand this, but when an index entry is
+  % generated from a macro call, the \endinput which \scanmacro inserts
+  % causes processing to be prematurely terminated.  This is,
+  % apparently, because \indexsorttmp is fully expanded, and \endinput
+  % is an expandable command.  The redefinition below makes \endinput
+  % disappear altogether for that purpose -- although logging shows that
+  % processing continues to some further point.  On the other hand, it
+  % seems \endinput does not hurt in the printed index arg, since that
+  % is still getting written without apparent harm.
+  %
+  % Sample source (mac-idx3.tex, reported by Graham Percival to
+  % help-texinfo, 22may06):
+  % @macro funindex {WORD}
+  % @findex xyz
+  % @end macro
+  % ...
+  % @funindex commtest
+  %
+  % The above is not enough to reproduce the bug, but it gives the flavor.
+  %
+  % Sample whatsit resulting:
+  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
+  %
+  % So:
+  \let\endinput = \empty
   %
   % Do the redefinitions.
   \commondummies
@@ -3244,6 +4422,7 @@
   %
   % Do the redefinitions.
   \commondummies
+  \otherbackslash
 }
 
 % Called from \indexdummies and \atdummies.
@@ -3251,7 +4430,7 @@
 \def\commondummies{%
   %
   % \definedummyword defines \#1 as \string\#1\space, thus effectively
-  % preventing its expansion.  This is used only for control% words,
+  % preventing its expansion.  This is used only for control words,
   % not control letters, because the \space would be incorrect for
   % control characters, but is needed to separate the control word
   % from whatever follows.
@@ -3270,23 +4449,28 @@
   \commondummiesnofonts
   %
   \definedummyletter\_%
+  \definedummyletter\-%
   %
   % Non-English letters.
   \definedummyword\AA
   \definedummyword\AE
+  \definedummyword\DH
   \definedummyword\L
-  \definedummyword\OE
   \definedummyword\O
+  \definedummyword\OE
+  \definedummyword\TH
   \definedummyword\aa
   \definedummyword\ae
-  \definedummyword\l
-  \definedummyword\oe
-  \definedummyword\o
-  \definedummyword\ss
+  \definedummyword\dh
   \definedummyword\exclamdown
-  \definedummyword\questiondown
+  \definedummyword\l
+  \definedummyword\o
+  \definedummyword\oe
   \definedummyword\ordf
   \definedummyword\ordm
+  \definedummyword\questiondown
+  \definedummyword\ss
+  \definedummyword\th
   %
   % Although these internal commands shouldn't show up, sometimes they do.
   \definedummyword\bf
@@ -3302,21 +4486,39 @@
   \definedummyword\TeX
   %
   % Assorted special characters.
+  \definedummyword\arrow
   \definedummyword\bullet
   \definedummyword\comma
   \definedummyword\copyright
   \definedummyword\registeredsymbol
   \definedummyword\dots
   \definedummyword\enddots
+  \definedummyword\entrybreak
   \definedummyword\equiv
   \definedummyword\error
   \definedummyword\euro
   \definedummyword\expansion
+  \definedummyword\geq
+  \definedummyword\guillemetleft
+  \definedummyword\guillemetright
+  \definedummyword\guilsinglleft
+  \definedummyword\guilsinglright
+  \definedummyword\lbracechar
+  \definedummyword\leq
   \definedummyword\minus
+  \definedummyword\ogonek
   \definedummyword\pounds
   \definedummyword\point
   \definedummyword\print
+  \definedummyword\quotedblbase
+  \definedummyword\quotedblleft
+  \definedummyword\quotedblright
+  \definedummyword\quoteleft
+  \definedummyword\quoteright
+  \definedummyword\quotesinglbase
+  \definedummyword\rbracechar
   \definedummyword\result
+  \definedummyword\textdegree
   %
   % We want to disable all macros so that they are not expanded by \write.
   \macrolist
@@ -3330,63 +4532,72 @@
 
 % \commondummiesnofonts: common to \commondummies and \indexnofonts.
 %
-% Better have this without active chars.
-{
-  \catcode`\~=\other
-  \gdef\commondummiesnofonts{%
-    % Control letters and accents.
-    \definedummyletter\!%
-    \definedummyaccent\"%
-    \definedummyaccent\'%
-    \definedummyletter\*%
-    \definedummyaccent\,%
-    \definedummyletter\.%
-    \definedummyletter\/%
-    \definedummyletter\:%
-    \definedummyaccent\=%
-    \definedummyletter\?%
-    \definedummyaccent\^%
-    \definedummyaccent\`%
-    \definedummyaccent\~%
-    \definedummyword\u
-    \definedummyword\v
-    \definedummyword\H
-    \definedummyword\dotaccent
-    \definedummyword\ringaccent
-    \definedummyword\tieaccent
-    \definedummyword\ubaraccent
-    \definedummyword\udotaccent
-    \definedummyword\dotless
-    %
-    % Texinfo font commands.
-    \definedummyword\b
-    \definedummyword\i
-    \definedummyword\r
-    \definedummyword\sc
-    \definedummyword\t
-    %
-    % Commands that take arguments.
-    \definedummyword\acronym
-    \definedummyword\cite
-    \definedummyword\code
-    \definedummyword\command
-    \definedummyword\dfn
-    \definedummyword\emph
-    \definedummyword\env
-    \definedummyword\file
-    \definedummyword\kbd
-    \definedummyword\key
-    \definedummyword\math
-    \definedummyword\option
-    \definedummyword\samp
-    \definedummyword\strong
-    \definedummyword\tie
-    \definedummyword\uref
-    \definedummyword\url
-    \definedummyword\var
-    \definedummyword\verb
-    \definedummyword\w
-  }
+\def\commondummiesnofonts{%
+  % Control letters and accents.
+  \definedummyletter\!%
+  \definedummyaccent\"%
+  \definedummyaccent\'%
+  \definedummyletter\*%
+  \definedummyaccent\,%
+  \definedummyletter\.%
+  \definedummyletter\/%
+  \definedummyletter\:%
+  \definedummyaccent\=%
+  \definedummyletter\?%
+  \definedummyaccent\^%
+  \definedummyaccent\`%
+  \definedummyaccent\~%
+  \definedummyword\u
+  \definedummyword\v
+  \definedummyword\H
+  \definedummyword\dotaccent
+  \definedummyword\ogonek
+  \definedummyword\ringaccent
+  \definedummyword\tieaccent
+  \definedummyword\ubaraccent
+  \definedummyword\udotaccent
+  \definedummyword\dotless
+  %
+  % Texinfo font commands.
+  \definedummyword\b
+  \definedummyword\i
+  \definedummyword\r
+  \definedummyword\sansserif
+  \definedummyword\sc
+  \definedummyword\slanted
+  \definedummyword\t
+  %
+  % Commands that take arguments.
+  \definedummyword\abbr
+  \definedummyword\acronym
+  \definedummyword\anchor
+  \definedummyword\cite
+  \definedummyword\code
+  \definedummyword\command
+  \definedummyword\dfn
+  \definedummyword\dmn
+  \definedummyword\email
+  \definedummyword\emph
+  \definedummyword\env
+  \definedummyword\file
+  \definedummyword\image
+  \definedummyword\indicateurl
+  \definedummyword\inforef
+  \definedummyword\kbd
+  \definedummyword\key
+  \definedummyword\math
+  \definedummyword\option
+  \definedummyword\pxref
+  \definedummyword\ref
+  \definedummyword\samp
+  \definedummyword\strong
+  \definedummyword\tie
+  \definedummyword\uref
+  \definedummyword\url
+  \definedummyword\var
+  \definedummyword\verb
+  \definedummyword\w
+  \definedummyword\xref
 }
 
 % \indexnofonts is used when outputting the strings to sort the index
@@ -3399,7 +4610,7 @@
   \def\definedummyaccent##1{\let##1\asis}%
   % We can just ignore other control letters.
   \def\definedummyletter##1{\let##1\empty}%
-  % Hopefully, all control words can become @asis.
+  % All control words become @asis by default; overrides below.
   \let\definedummyword\definedummyaccent
   %
   \commondummiesnofonts
@@ -3411,60 +4622,95 @@
   %
   \def\ { }%
   \def\@{@}%
-  % how to handle braces?
   \def\_{\normalunderscore}%
+  \def\-{}% @- shouldn't affect sorting
+  %
+  % Unfortunately, texindex is not prepared to handle braces in the
+  % content at all.  So for index sorting, we map @{ and @} to strings
+  % starting with |, since that ASCII character is between ASCII { and }.
+  \def\{{|a}%
+  \def\lbracechar{|a}%
+  %
+  \def\}{|b}%
+  \def\rbracechar{|b}%
   %
   % Non-English letters.
   \def\AA{AA}%
   \def\AE{AE}%
+  \def\DH{DZZ}%
   \def\L{L}%
   \def\OE{OE}%
   \def\O{O}%
+  \def\TH{ZZZ}%
   \def\aa{aa}%
   \def\ae{ae}%
+  \def\dh{dzz}%
+  \def\exclamdown{!}%
   \def\l{l}%
   \def\oe{oe}%
-  \def\o{o}%
-  \def\ss{ss}%
-  \def\exclamdown{!}%
-  \def\questiondown{?}%
   \def\ordf{a}%
   \def\ordm{o}%
+  \def\o{o}%
+  \def\questiondown{?}%
+  \def\ss{ss}%
+  \def\th{zzz}%
   %
   \def\LaTeX{LaTeX}%
   \def\TeX{TeX}%
   %
   % Assorted special characters.
   % (The following {} will end up in the sort string, but that's ok.)
+  \def\arrow{->}%
   \def\bullet{bullet}%
   \def\comma{,}%
   \def\copyright{copyright}%
-  \def\registeredsymbol{R}%
   \def\dots{...}%
   \def\enddots{...}%
   \def\equiv{==}%
   \def\error{error}%
   \def\euro{euro}%
   \def\expansion{==>}%
+  \def\geq{>=}%
+  \def\guillemetleft{<<}%
+  \def\guillemetright{>>}%
+  \def\guilsinglleft{<}%
+  \def\guilsinglright{>}%
+  \def\leq{<=}%
   \def\minus{-}%
-  \def\pounds{pounds}%
   \def\point{.}%
+  \def\pounds{pounds}%
   \def\print{-|}%
+  \def\quotedblbase{"}%
+  \def\quotedblleft{"}%
+  \def\quotedblright{"}%
+  \def\quoteleft{`}%
+  \def\quoteright{'}%
+  \def\quotesinglbase{,}%
+  \def\registeredsymbol{R}%
   \def\result{=>}%
+  \def\textdegree{o}%
+  %
+  \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
+  \else \indexlquoteignore \fi
   %
   % We need to get rid of all macros, leaving only the arguments (if present).
   % Of course this is not nearly correct, but it is the best we can do for now.
   % makeinfo does not expand macros in the argument to @deffn, which ends up
   % writing an index entry, and texindex isn't prepared for an index sort entry
   % that starts with \.
-  % 
+  %
   % Since macro invocations are followed by braces, we can just redefine them
   % to take a single TeX argument.  The case of a macro invocation that
   % goes to end-of-line is not handled.
-  % 
+  %
   \macrolist
 }
 
+% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
+% ignore left quotes in the sort term.
+{\catcode`\`=\active
+ \gdef\indexlquoteignore{\let`=\empty}}
+
 \let\indexbackslash=0  %overridden during \printindex.
 \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
@@ -3490,11 +4736,7 @@
     %
     \edef\writeto{\csname#1indfile\endcsname}%
     %
-    \ifvmode
-      \dosubindsanitize
-    \else
-      \dosubindwrite
-    \fi
+    \safewhatsit\dosubindwrite
   }%
   \fi
 }
@@ -3531,13 +4773,13 @@
   \temp
 }
 
-% Take care of unwanted page breaks:
+% Take care of unwanted page breaks/skips around a whatsit:
 %
 % If a skip is the last thing on the list now, preserve it
 % by backing up by \lastskip, doing the \write, then inserting
 % the skip again.  Otherwise, the whatsit generated by the
-% \write will make \lastskip zero.  The result is that sequences
-% like this:
+% \write or \pdfdest will make \lastskip zero.  The result is that
+% sequences like this:
 % @end defun
 % @tindex whatever
 % @defun ...
@@ -3561,25 +4803,30 @@
 %
 \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
 %
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
 % ..., ready, GO:
 %
-\def\dosubindsanitize{%
+\def\safewhatsit#1{\ifhmode
+  #1%
+ \else
   % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
-  \skip0 = \lastskip
+  \whatsitskip = \lastskip
   \edef\lastskipmacro{\the\lastskip}%
-  \count255 = \lastpenalty
+  \whatsitpenalty = \lastpenalty
   %
   % If \lastskip is nonzero, that means the last item was a
   % skip.  And since a skip is discardable, that means this
-  % -\skip0 glue we're inserting is preceded by a
+  % -\whatsitskip glue we're inserting is preceded by a
   % non-discardable item, therefore it is not a potential
   % breakpoint, therefore no \nobreak needed.
   \ifx\lastskipmacro\zeroskipmacro
   \else
-    \vskip-\skip0
+    \vskip-\whatsitskip
   \fi
   %
-  \dosubindwrite
+  #1%
   %
   \ifx\lastskipmacro\zeroskipmacro
     % If \lastskip was zero, perhaps the last item was a penalty, and
@@ -3587,20 +4834,19 @@
     % to re-insert the same penalty (values >10000 are used for various
     % signals); since we just inserted a non-discardable item, any
     % following glue (such as a \parskip) would be a breakpoint.  For example:
-    % 
     %   @deffn deffn-whatever
     %   @vindex index-whatever
     %   Description.
     % would allow a break between the index-whatever whatsit
     % and the "Description." paragraph.
-    \ifnum\count255>9999 \penalty\count255 \fi
+    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
   \else
     % On the other hand, if we had a nonzero \lastskip,
     % this make-up glue would be preceded by a non-discardable item
     % (the whatsit from the \write), so we must insert a \nobreak.
-    \nobreak\vskip\skip0
+    \nobreak\vskip\whatsitskip
   \fi
-}
+\fi}
 
 % The index entry written in the file actually looks like
 %  \entry {sortstring}{page}{topic}
@@ -3642,6 +4888,7 @@
   %
   \smallfonts \rm
   \tolerance = 9500
+  \plainfrenchspacing
   \everypar = {}% don't want the \kern\-parindent from indentation suppression.
   %
   % See if the index file exists and is nonempty.
@@ -3715,10 +4962,9 @@
 %
 % A straightforward implementation would start like this:
 %	\def\entry#1#2{...
-% But this frozes the catcodes in the argument, and can cause problems to
+% But this freezes the catcodes in the argument, and can cause problems to
 % @code, which sets - active.  This problem was fixed by a kludge---
 % ``-'' was active throughout whole index, but this isn't really right.
-%
 % The right solution is to prevent \entry from swallowing the whole text.
 %                                 --kasal, 21nov03
 \def\entry{%
@@ -3755,10 +5001,17 @@
     % columns.
     \vskip 0pt plus1pt
     %
+    % When reading the text of entry, convert explicit line breaks
+    % from @* into spaces.  The user might give these in long section
+    % titles, for instance.
+    \def\*{\unskip\space\ignorespaces}%
+    \def\entrybreak{\hfil\break}%
+    %
     % Swallow the left brace of the text (first parameter):
     \afterassignment\doentry
     \let\temp =
 }
+\def\entrybreak{\unskip\space\ignorespaces}%
 \def\doentry{%
     \bgroup % Instead of the swallowed brace.
       \noindent
@@ -3771,11 +5024,8 @@
     % The following is kludged to not output a line of dots in the index if
     % there are no page numbers.  The next person who breaks this will be
     % cursed by a Unix daemon.
-    \def\tempa{{\rm }}%
-    \def\tempb{#1}%
-    \edef\tempc{\tempa}%
-    \edef\tempd{\tempb}%
-    \ifx\tempc\tempd
+    \setbox\boxA = \hbox{#1}%
+    \ifdim\wd\boxA = 0pt
       \ %
     \else
       %
@@ -3799,9 +5049,9 @@
   \endgroup
 }
 
-% Like \dotfill except takes at least 1 em.
+% Like plain.tex's \dotfill, except uses up at least 1 em.
 \def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
+  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
 
 \def\primary #1{\line{#1\hfil}}
 
@@ -3911,6 +5161,34 @@
 %
 % All done with double columns.
 \def\enddoublecolumns{%
+  % The following penalty ensures that the page builder is exercised
+  % _before_ we change the output routine.  This is necessary in the
+  % following situation:
+  %
+  % The last section of the index consists only of a single entry.
+  % Before this section, \pagetotal is less than \pagegoal, so no
+  % break occurs before the last section starts.  However, the last
+  % section, consisting of \initial and the single \entry, does not
+  % fit on the page and has to be broken off.  Without the following
+  % penalty the page builder will not be exercised until \eject
+  % below, and by that time we'll already have changed the output
+  % routine to the \balancecolumns version, so the next-to-last
+  % double-column page will be processed with \balancecolumns, which
+  % is wrong:  The two columns will go to the main vertical list, with
+  % the broken-off section in the recent contributions.  As soon as
+  % the output routine finishes, TeX starts reconsidering the page
+  % break.  The two columns and the broken-off section both fit on the
+  % page, because the two columns now take up only half of the page
+  % goal.  When TeX sees \eject from below which follows the final
+  % section, it invokes the new output routine that we've set after
+  % \balancecolumns below; \onepageout will try to fit the two columns
+  % and the final section into the vbox of \pageheight (see
+  % \pagebody), causing an overfull box.
+  %
+  % Note that glue won't work here, because glue does not exercise the
+  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+  \penalty0
+  %
   \output = {%
     % Split the last of the double-column material.  Leave it on the
     % current page, no automatic page break.
@@ -3966,7 +5244,22 @@
 \message{sectioning,}
 % Chapters, sections, etc.
 
-% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
+% Let's start with @part.
+\outer\parseargdef\part{\partzzz{#1}}
+\def\partzzz#1{%
+  \chapoddpage
+  \null
+  \vskip.3\vsize  % move it down on the page a bit
+  \begingroup
+    \noindent \titlefonts\rmisbold #1\par % the text
+    \let\lastnode=\empty      % no node to associate with
+    \writetocentry{part}{#1}{}% but put it in the toc
+    \headingsoff              % no headline or footline on the part page
+    \chapoddpage
+  \endgroup
+}
+
+% \unnumberedno is an oxymoron.  But we count the unnumbered
 % sections so that we can refer to them unambiguously in the pdf
 % outlines by their "section number".  We avoid collisions with chapter
 % numbers by starting them at 10000.  (If a document ever has 10000
@@ -4020,11 +5313,15 @@
   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
 
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it.  @section does likewise.
-% However, they are not reliable, because we don't use marks.
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter.  Page headings and footings can use
+% these.  @section does likewise.
 \def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
 \def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
 
 \newcount\absseclevel % used to calculate proper heading level
 \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
@@ -4041,8 +5338,8 @@
 \chardef\maxseclevel = 3
 %
 % A numbered section within an unnumbered changes to unnumbered too.
-% To achive this, remember the "biggest" unnum. sec. we are currently in:
-\chardef\unmlevel = \maxseclevel
+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unnlevel = \maxseclevel
 %
 % Trace whether the current chapter is an appendix or not:
 % \chapheadtype is "N" or "A", unnumbered chapters are ignored.
@@ -4067,8 +5364,8 @@
   % The heading type:
   \def\headtype{#1}%
   \if \headtype U%
-    \ifnum \absseclevel < \unmlevel
-      \chardef\unmlevel = \absseclevel
+    \ifnum \absseclevel < \unnlevel
+      \chardef\unnlevel = \absseclevel
     \fi
   \else
     % Check for appendix sections:
@@ -4080,10 +5377,10 @@
       \fi\fi
     \fi
     % Check for numbered within unnumbered:
-    \ifnum \absseclevel > \unmlevel
+    \ifnum \absseclevel > \unnlevel
       \def\headtype{U}%
     \else
-      \chardef\unmlevel = 3
+      \chardef\unnlevel = 3
     \fi
   \fi
   % Now print the heading:
@@ -4137,7 +5434,9 @@
   \gdef\chaplevelprefix{\the\chapno.}%
   \resetallfloatnos
   %
-  \message{\putwordChapter\space \the\chapno}%
+  % \putwordChapter can contain complex things in translations.
+  \toks0=\expandafter{\putwordChapter}%
+  \message{\the\toks0 \space \the\chapno}%
   %
   % Write the actual heading.
   \chapmacro{#1}{Ynumbered}{\the\chapno}%
@@ -4148,15 +5447,17 @@
   \global\let\subsubsection = \numberedsubsubsec
 }
 
-\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
 \def\appendixzzz#1{%
   \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
     \global\advance\appendixno by 1
   \gdef\chaplevelprefix{\appendixletter.}%
   \resetallfloatnos
   %
-  \def\appendixnum{\putwordAppendix\space \appendixletter}%
-  \message{\appendixnum}%
+  % \putwordAppendix can contain complex things in translations.
+  \toks0=\expandafter{\putwordAppendix}%
+  \message{\the\toks0 \space \appendixletter}%
   %
   \chapmacro{#1}{Yappendix}{\appendixletter}%
   %
@@ -4165,7 +5466,8 @@
   \global\let\subsubsection = \appendixsubsubsec
 }
 
-\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+% normally unnmhead0 calls unnumberedzzz:
+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
 \def\unnumberedzzz#1{%
   \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
     \global\advance\unnumberedno by 1
@@ -4209,40 +5511,47 @@
 \let\top\unnumbered
 
 % Sections.
+% 
 \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
 \def\seczzz#1{%
   \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
   \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
 }
 
-\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+% normally calls appendixsectionzzz:
+\outer\parseargdef\appendixsection{\apphead1{#1}}
 \def\appendixsectionzzz#1{%
   \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
   \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
 }
 \let\appendixsec\appendixsection
 
-\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+% normally calls unnumberedseczzz:
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
 \def\unnumberedseczzz#1{%
   \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
   \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
 }
 
 % Subsections.
-\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+% 
+% normally calls numberedsubseczzz:
+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
 \def\numberedsubseczzz#1{%
   \global\subsubsecno=0  \global\advance\subsecno by 1
   \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
 }
 
-\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+% normally calls appendixsubseczzz:
+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
 \def\appendixsubseczzz#1{%
   \global\subsubsecno=0  \global\advance\subsecno by 1
   \sectionheading{#1}{subsec}{Yappendix}%
                  {\appendixletter.\the\secno.\the\subsecno}%
 }
 
-\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+% normally calls unnumberedsubseczzz:
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
 \def\unnumberedsubseczzz#1{%
   \global\subsubsecno=0  \global\advance\subsecno by 1
   \sectionheading{#1}{subsec}{Ynothing}%
@@ -4250,21 +5559,25 @@
 }
 
 % Subsubsections.
-\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+% 
+% normally numberedsubsubseczzz:
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
 \def\numberedsubsubseczzz#1{%
   \global\advance\subsubsecno by 1
   \sectionheading{#1}{subsubsec}{Ynumbered}%
                  {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
 }
 
-\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+% normally appendixsubsubseczzz:
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
 \def\appendixsubsubseczzz#1{%
   \global\advance\subsubsecno by 1
   \sectionheading{#1}{subsubsec}{Yappendix}%
                  {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
 }
 
-\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+% normally unnumberedsubsubseczzz:
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
 \def\unnumberedsubsubseczzz#1{%
   \global\advance\subsubsecno by 1
   \sectionheading{#1}{subsubsec}{Ynothing}%
@@ -4280,15 +5593,6 @@
 
 % Define @majorheading, @heading and @subheading
 
-% NOTE on use of \vbox for chapter headings, section headings, and such:
-%       1) We use \vbox rather than the earlier \line to permit
-%          overlong headings to fold.
-%       2) \hyphenpenalty is set to 10000 because hyphenation in a
-%          heading is obnoxious; this forbids it.
-%       3) Likewise, headings look best if no \parindent is used, and
-%          if justification is not attempted.  Hence \raggedright.
-
-
 \def\majorheading{%
   {\advance\chapheadingskip by 10pt \chapbreak }%
   \parsearg\chapheadingzzz
@@ -4296,10 +5600,8 @@
 
 \def\chapheading{\chapbreak \parsearg\chapheadingzzz}
 \def\chapheadingzzz#1{%
-  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                    \parindent=0pt\raggedright
-                    \rm #1\hfill}}%
-  \bigskip \par\penalty 200\relax
+  \vbox{\chapfonts \raggedtitlesettings #1\par}%
+  \nobreak\bigskip \nobreak
   \suppressfirstparagraphindent
 }
 
@@ -4315,17 +5617,28 @@
 % (including whitespace, linebreaking, etc. around it),
 % given all the information in convenient, parsed form.
 
-%%% Args are the skip and penalty (usually negative)
+% Args are the skip and penalty (usually negative)
 \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
 
-%%% Define plain chapter starts, and page on/off switching for it
 % Parameter controlling skip before chapter headings (if needed)
-
 \newskip\chapheadingskip
 
+% Define plain chapter starts, and page on/off switching for it.
 \def\chapbreak{\dobreak \chapheadingskip {-4000}}
 \def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong.  But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+  \chappager
+  \ifodd\pageno \else
+    \begingroup
+      \headingsoff
+      \null
+      \chappager
+    \endgroup
+  \fi
+}
 
 \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
 
@@ -4359,41 +5672,78 @@
 \def\Yappendixkeyword{Yappendix}
 %
 \def\chapmacro#1#2#3{%
+  % Insert the first mark before the heading break (see notes for \domark).
+  \let\prevchapterdefs=\lastchapterdefs
+  \let\prevsectiondefs=\lastsectiondefs
+  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+                        \gdef\thissection{}}%
+  %
+  \def\temptype{#2}%
+  \ifx\temptype\Ynothingkeyword
+    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+                          \gdef\thischapter{\thischaptername}}%
+  \else\ifx\temptype\Yomitfromtockeyword
+    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+                          \gdef\thischapter{}}%
+  \else\ifx\temptype\Yappendixkeyword
+    \toks0={#1}%
+    \xdef\lastchapterdefs{%
+      \gdef\noexpand\thischaptername{\the\toks0}%
+      \gdef\noexpand\thischapternum{\appendixletter}%
+      % \noexpand\putwordAppendix avoids expanding indigestible
+      % commands in some of the translations.
+      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+                                 \noexpand\thischapternum:
+                                 \noexpand\thischaptername}%
+    }%
+  \else
+    \toks0={#1}%
+    \xdef\lastchapterdefs{%
+      \gdef\noexpand\thischaptername{\the\toks0}%
+      \gdef\noexpand\thischapternum{\the\chapno}%
+      % \noexpand\putwordChapter avoids expanding indigestible
+      % commands in some of the translations.
+      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+                                 \noexpand\thischapternum:
+                                 \noexpand\thischaptername}%
+    }%
+  \fi\fi\fi
+  %
+  % Output the mark.  Pass it through \safewhatsit, to take care of
+  % the preceding space.
+  \safewhatsit\domark
+  %
+  % Insert the chapter heading break.
   \pchapsepmacro
+  %
+  % Now the second mark, after the heading break.  No break points
+  % between here and the heading.
+  \let\prevchapterdefs=\lastchapterdefs
+  \let\prevsectiondefs=\lastsectiondefs
+  \domark
+  %
   {%
-    \chapfonts \rm
+    \chapfonts \rmisbold
     %
-    % Have to define \thissection before calling \donoderef, because the
+    % Have to define \lastsection before calling \donoderef, because the
     % xref code eventually uses it.  On the other hand, it has to be called
     % after \pchapsepmacro, or the headline will change too soon.
-    \gdef\thissection{#1}%
-    \gdef\thischaptername{#1}%
+    \gdef\lastsection{#1}%
     %
     % Only insert the separating space if we have a chapter/appendix
     % number, and don't print the unnumbered ``number''.
-    \def\temptype{#2}%
     \ifx\temptype\Ynothingkeyword
       \setbox0 = \hbox{}%
       \def\toctype{unnchap}%
-      \gdef\thischapter{#1}%
     \else\ifx\temptype\Yomitfromtockeyword
       \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
       \def\toctype{omit}%
-      \gdef\thischapter{}%
     \else\ifx\temptype\Yappendixkeyword
       \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
       \def\toctype{app}%
-      % We don't substitute the actual chapter name into \thischapter
-      % because we don't want its macros evaluated now.  And we don't
-      % use \thissection because that changes with each section.
-      %
-      \xdef\thischapter{\putwordAppendix{} \appendixletter:
-                        \noexpand\thischaptername}%
     \else
       \setbox0 = \hbox{#3\enspace}%
       \def\toctype{numchap}%
-      \xdef\thischapter{\putwordChapter{} \the\chapno:
-                        \noexpand\thischaptername}%
     \fi\fi\fi
     %
     % Write the toc entry for this chapter.  Must come before the
@@ -4409,8 +5759,8 @@
     \donoderef{#2}%
     %
     % Typeset the actual heading.
-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent=\wd0 \centerparametersmaybe
+    \nobreak % Avoid page breaks at the interline glue.
+    \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
           \unhbox0 #1\par}%
   }%
   \nobreak\bigskip % no page break after a chapter title
@@ -4432,18 +5782,18 @@
 \def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
 %
 \def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                       \parindent=0pt\raggedright
-                       \rm #1\hfill}}\bigskip \par\nobreak
+  \chapoddpage
+  \vbox{\chapfonts \raggedtitlesettings #1\par}%
+  \nobreak\bigskip\nobreak
 }
 \def\chfopen #1#2{\chapoddpage {\chapfonts
 \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
 \par\penalty 5000 %
 }
 \def\centerchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                       \parindent=0pt
-                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+  \chapoddpage
+  \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
+  \nobreak\bigskip \nobreak
 }
 \def\CHAPFopen{%
   \global\let\chapmacro=\chfopen
@@ -4471,47 +5821,110 @@
 % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
 % section number.
 %
+\def\seckeyword{sec}
+%
 \def\sectionheading#1#2#3#4{%
   {%
+    \checkenv{}% should not be in an environment.
+    %
     % Switch to the right set of fonts.
-    \csname #2fonts\endcsname \rm
+    \csname #2fonts\endcsname \rmisbold
+    %
+    \def\sectionlevel{#2}%
+    \def\temptype{#3}%
+    %
+    % Insert first mark before the heading break (see notes for \domark).
+    \let\prevsectiondefs=\lastsectiondefs
+    \ifx\temptype\Ynothingkeyword
+      \ifx\sectionlevel\seckeyword
+        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+                              \gdef\thissection{\thissectionname}}%
+      \fi
+    \else\ifx\temptype\Yomitfromtockeyword
+      % Don't redefine \thissection.
+    \else\ifx\temptype\Yappendixkeyword
+      \ifx\sectionlevel\seckeyword
+        \toks0={#1}%
+        \xdef\lastsectiondefs{%
+          \gdef\noexpand\thissectionname{\the\toks0}%
+          \gdef\noexpand\thissectionnum{#4}%
+          % \noexpand\putwordSection avoids expanding indigestible
+          % commands in some of the translations.
+          \gdef\noexpand\thissection{\noexpand\putwordSection{}
+                                     \noexpand\thissectionnum:
+                                     \noexpand\thissectionname}%
+        }%
+      \fi
+    \else
+      \ifx\sectionlevel\seckeyword
+        \toks0={#1}%
+        \xdef\lastsectiondefs{%
+          \gdef\noexpand\thissectionname{\the\toks0}%
+          \gdef\noexpand\thissectionnum{#4}%
+          % \noexpand\putwordSection avoids expanding indigestible
+          % commands in some of the translations.
+          \gdef\noexpand\thissection{\noexpand\putwordSection{}
+                                     \noexpand\thissectionnum:
+                                     \noexpand\thissectionname}%
+        }%
+      \fi
+    \fi\fi\fi
+    %
+    % Go into vertical mode.  Usually we'll already be there, but we
+    % don't want the following whatsit to end up in a preceding paragraph
+    % if the document didn't happen to have a blank line.
+    \par
+    %
+    % Output the mark.  Pass it through \safewhatsit, to take care of
+    % the preceding space.
+    \safewhatsit\domark
     %
     % Insert space above the heading.
     \csname #2headingbreak\endcsname
     %
-    % Only insert the space after the number if we have a section number.
-    \def\sectionlevel{#2}%
-    \def\temptype{#3}%
+    % Now the second mark, after the heading break.  No break points
+    % between here and the heading.
+    \let\prevsectiondefs=\lastsectiondefs
+    \domark
     %
+    % Only insert the space after the number if we have a section number.
     \ifx\temptype\Ynothingkeyword
       \setbox0 = \hbox{}%
       \def\toctype{unn}%
-      \gdef\thissection{#1}%
+      \gdef\lastsection{#1}%
     \else\ifx\temptype\Yomitfromtockeyword
       % for @headings -- no section number, don't include in toc,
-      % and don't redefine \thissection.
+      % and don't redefine \lastsection.
       \setbox0 = \hbox{}%
       \def\toctype{omit}%
       \let\sectionlevel=\empty
     \else\ifx\temptype\Yappendixkeyword
       \setbox0 = \hbox{#4\enspace}%
       \def\toctype{app}%
-      \gdef\thissection{#1}%
+      \gdef\lastsection{#1}%
     \else
       \setbox0 = \hbox{#4\enspace}%
       \def\toctype{num}%
-      \gdef\thissection{#1}%
+      \gdef\lastsection{#1}%
     \fi\fi\fi
     %
-    % Write the toc entry (before \donoderef).  See comments in \chfplain.
+    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
     \writetocentry{\toctype\sectionlevel}{#1}{#4}%
     %
     % Write the node reference (= pdf destination for pdftex).
-    % Again, see comments in \chfplain.
+    % Again, see comments in \chapmacro.
     \donoderef{#3}%
     %
+    % Interline glue will be inserted when the vbox is completed.
+    % That glue will be a valid breakpoint for the page, since it'll be
+    % preceded by a whatsit (usually from the \donoderef, or from the
+    % \writetocentry if there was no node).  We don't want to allow that
+    % break, since then the whatsits could end up on page n while the
+    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
+    \nobreak
+    %
     % Output the actual section heading.
-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
           \hangindent=\wd0  % zero if no section number
           \unhbox0 #1}%
   }%
@@ -4525,15 +5938,15 @@
   %
   % We'll almost certainly start a paragraph next, so don't let that
   % glue accumulate.  (Not a breakpoint because it's preceded by a
-  % discardable item.)
+  % discardable item.)  However, when a paragraph is not started next
+  % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
+  % or the negative glue will cause weirdly wrong output, typically
+  % obscuring the section heading with something else.
   \vskip-\parskip
-  % 
-  % This is purely so the last item on the list is a known \penalty >
-  % 10000.  This is so \startdefun can avoid allowing breakpoints after
-  % section headings.  Otherwise, it would insert a valid breakpoint between:
-  % 
-  %   @section sec-whatever
-  %   @deffn def-whatever
+  %
+  % This is so the last item on the main vertical list is a known
+  % \penalty > 10000, so \startdefun, etc., can recognize the situation
+  % and do the needful.
   \penalty 10001
 }
 
@@ -4572,7 +5985,7 @@
        \edef\temp{%
          \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
        \temp
-      }
+      }%
     \fi
   \fi
   %
@@ -4589,7 +6002,7 @@
 % These characters do not print properly in the Computer Modern roman
 % fonts, so we must take special care.  This is more or less redundant
 % with the Texinfo input format setup at the end of this file.
-% 
+%
 \def\activecatcodes{%
   \catcode`\"=\active
   \catcode`\$=\active
@@ -4607,7 +6020,7 @@
 \def\readtocfile{%
   \setupdatafile
   \activecatcodes
-  \input \jobname.toc
+  \input \tocreadfilename
 }
 
 \newskip\contentsrightmargin \contentsrightmargin=1in
@@ -4626,7 +6039,6 @@
   %
   % Don't need to put `Contents' or `Short Contents' in the headline.
   % It is abundantly clear what they are.
-  \def\thischapter{}%
   \chapmacro{#1}{Yomitfromtoc}{}%
   %
   \savepageno = \pageno
@@ -4638,11 +6050,16 @@
     \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
 }
 
+% redefined for the two-volume lispref.  We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
 
 % Normal (long) toc.
+%
 \def\contents{%
   \startcontents{\putwordTOC}%
-    \openin 1 \jobname.toc
+    \openin 1 \tocreadfilename\space
     \ifeof 1 \else
       \readtocfile
     \fi
@@ -4661,6 +6078,7 @@
 \def\summarycontents{%
   \startcontents{\putwordShortTOC}%
     %
+    \let\partentry = \shortpartentry
     \let\numchapentry = \shortchapentry
     \let\appentry = \shortchapentry
     \let\unnchapentry = \shortunnchapentry
@@ -4680,7 +6098,7 @@
     \let\numsubsubsecentry = \numsecentry
     \let\appsubsubsecentry = \numsecentry
     \let\unnsubsubsecentry = \numsecentry
-    \openin 1 \jobname.toc
+    \openin 1 \tocreadfilename\space
     \ifeof 1 \else
       \readtocfile
     \fi
@@ -4716,6 +6134,19 @@
 % The last argument is the page number.
 % The arguments in between are the chapter number, section number, ...
 
+% Parts, in the main contents.  Replace the part number, which doesn't
+% exist, with an empty box.  Let's hope all the numbers have the same width.
+% Also ignore the page number, which is conventionally not printed.
+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
+\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
+%
+% Parts, in the short toc.
+\def\shortpartentry#1#2#3#4{%
+  \penalty-300
+  \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
+  \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
+}
+
 % Chapters, in the main contents.
 \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
 %
@@ -4805,45 +6236,12 @@
 \message{environments,}
 % @foo ... @end foo.
 
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-%
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-%
-\def\point{$\star$}
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% The @error{} command.
-% Adapted from the TeXbook's \boxit.
-%
-\newbox\errorbox
-%
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-%
-\setbox\errorbox=\hbox to \dimen0{\hfil
-   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-   \advance\hsize by -2\dimen2 % Rules.
-   \vbox{%
-      \hrule height\dimen2
-      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
-         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-         \kern3pt\vrule width\dimen2}% Space to right.
-      \hrule height\dimen2}
-    \hfil}
-%
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex    escapes into raw Tex temporarily.
+% @tex ... @end tex    escapes into raw TeX temporarily.
 % One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
+% But \@ or @@ will get a plain @ character.
 
 \envdef\tex{%
+  \setupmarkupstyle{tex}%
   \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
   \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
   \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
@@ -4853,8 +6251,14 @@
   \catcode `\|=\other
   \catcode `\<=\other
   \catcode `\>=\other
+  \catcode`\`=\other
+  \catcode`\'=\other
   \escapechar=`\\
   %
+  % ' is active in math mode (mathcode"8000).  So reset it, and all our
+  % other math active characters (just in case), to plain's definitions.
+  \mathactive
+  %
   \let\b=\ptexb
   \let\bullet=\ptexbullet
   \let\c=\ptexc
@@ -4872,6 +6276,7 @@
   \let\/=\ptexslash
   \let\*=\ptexstar
   \let\t=\ptext
+  \expandafter \let\csname top\endcsname=\ptextop  % outer
   \let\frenchspacing=\plainfrenchspacing
   %
   \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
@@ -4957,6 +6362,12 @@
   \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
   % Flag to tell @lisp, etc., not to narrow margin.
   \let\nonarrowing = t%
+  %
+  % If this cartouche directly follows a sectioning command, we need the
+  % \parskip glue (backspaced over by default) or the cartouche can
+  % collide with the section heading.
+  \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+  %
   \vbox\bgroup
       \baselineskip=0pt\parskip=0pt\lineskip=0pt
       \carttop
@@ -4970,7 +6381,7 @@
 	      \lineskip=\normlskip
 	      \parskip=\normpskip
 	      \vskip -\parskip
-	      \comment % For explanation, see the end of \def\group.
+	      \comment % For explanation, see the end of def\group.
 }
 \def\Ecartouche{%
               \ifhmode\par\fi
@@ -4987,6 +6398,7 @@
 
 % This macro is called at the beginning of all the @example variants,
 % inside a group.
+\newdimen\nonfillparindent
 \def\nonfillstart{%
   \aboveenvbreak
   \hfuzz = 12pt % Don't be fussy
@@ -4994,7 +6406,12 @@
   \let\par = \lisppar % don't ignore blank lines
   \obeylines % each line of input is a line of output
   \parskip = 0pt
+  % Turn off paragraph indentation but redefine \indent to emulate
+  % the normal \indent.
+  \nonfillparindent=\parindent
   \parindent = 0pt
+  \let\indent\nonfillindent
+  %
   \emergencystretch = 0pt % don't try to avoid overfull boxes
   \ifx\nonarrowing\relax
     \advance \leftskip by \lispnarrowing
@@ -5005,6 +6422,24 @@
   \let\exdent=\nofillexdent
 }
 
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
 % If you want all examples etc. small: @set dispenvsize small.
 % If you want even small examples the full size: @set dispenvsize nosmall.
 % This affects the following displayed environments:
@@ -5015,53 +6450,59 @@
 \let\SETdispenvsize\relax
 \def\setnormaldispenv{%
   \ifx\SETdispenvsize\smallword
+    % end paragraph for sake of leading, in case document has no blank
+    % line.  This is redundant with what happens in \aboveenvbreak, but
+    % we need to do it before changing the fonts, and it's inconvenient
+    % to change the fonts afterward.
+    \ifnum \lastpenalty=10000 \else \endgraf \fi
     \smallexamplefonts \rm
   \fi
 }
 \def\setsmalldispenv{%
   \ifx\SETdispenvsize\nosmallword
   \else
+    \ifnum \lastpenalty=10000 \else \endgraf \fi
     \smallexamplefonts \rm
   \fi
 }
 
 % We often define two environments, @foo and @smallfoo.
-% Let's do it by one command:
-\def\makedispenv #1#2{
-  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
-  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
+% Let's do it in one command.  #1 is the env name, #2 the definition.
+\def\makedispenvdef#1#2{%
+  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
+  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
   \expandafter\let\csname E#1\endcsname \afterenvbreak
   \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
 }
 
-% Define two synonyms:
-\def\maketwodispenvs #1#2#3{
-  \makedispenv{#1}{#3}
-  \makedispenv{#2}{#3}
+% Define two environment synonyms (#1 and #2) for an environment.
+\def\maketwodispenvdef#1#2#3{%
+  \makedispenvdef{#1}{#3}%
+  \makedispenvdef{#2}{#3}%
 }
-
-% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
+% @lisp: indented, narrowed, typewriter font;
+% @example: same as @lisp.
 %
 % @smallexample and @smalllisp: use smaller fonts.
 % Originally contributed by Pavel@xerox.
 %
-\maketwodispenvs {lisp}{example}{%
+\maketwodispenvdef{lisp}{example}{%
   \nonfillstart
-  \tt
+  \tt\setupmarkupstyle{example}%
   \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-  \gobble       % eat return
+  \gobble % eat return
 }
-
 % @display/@smalldisplay: same as @lisp except keep current font.
 %
-\makedispenv {display}{%
+\makedispenvdef{display}{%
   \nonfillstart
   \gobble
 }
 
 % @format/@smallformat: same as @display except don't narrow margins.
 %
-\makedispenv{format}{%
+\makedispenvdef{format}{%
   \let\nonarrowing = t%
   \nonfillstart
   \gobble
@@ -5080,28 +6521,47 @@
 \envdef\flushright{%
   \let\nonarrowing = t%
   \nonfillstart
-  \advance\leftskip by 0pt plus 1fill
+  \advance\leftskip by 0pt plus 1fill\relax
   \gobble
 }
 \let\Eflushright = \afterenvbreak
 
 
+% @raggedright does more-or-less normal line breaking but no right
+% justification.  From plain.tex.
+\envdef\raggedright{%
+  \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+  \parindent=0pt \leftskip0pt plus2em
+  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+  \hbadness=10000 % Last line will usually be underfull, so turn off
+                  % badness reporting.
+}
+\let\Eraggedleft\par
+
+\envdef\raggedcenter{%
+  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+  \hbadness=10000 % Last line will usually be underfull, so turn off
+                  % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
 % @quotation does normal linebreaking (hence we can't use \nonfillstart)
 % and narrows the margins.  We keep \parskip nonzero in general, since
 % we're doing normal filling.  So, when using \aboveenvbreak and
 % \afterenvbreak, temporarily make \parskip 0.
 %
-\envdef\quotation{%
-  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
-  \parindent=0pt
-  %
-  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+\makedispenvdef{quotation}{\quotationstart}
+%
+\def\quotationstart{%
+  \indentedblockstart % same as \indentedblock, but increase right margin too.
   \ifx\nonarrowing\relax
-    \advance\leftskip by \lispnarrowing
     \advance\rightskip by \lispnarrowing
-    \exdentamount = \lispnarrowing
-  \else
-    \let\nonarrowing = \relax
   \fi
   \parsearg\quotationlabel
 }
@@ -5111,12 +6571,13 @@
 %
 \def\Equotation{%
   \par
-  \ifx\quotationauthor\undefined\else
+  \ifx\quotationauthor\thisisundefined\else
     % indent a bit.
     \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
   \fi
   {\parskip=0pt \afterenvbreak}%
 }
+\def\Esmallquotation{\Equotation}
 
 % If we're given an argument, typeset it in bold with a colon after.
 \def\quotationlabel#1{%
@@ -5126,6 +6587,32 @@
   \fi
 }
 
+% @indentedblock is like @quotation, but indents only on the left and
+% has no optional argument.
+% 
+\makedispenvdef{indentedblock}{\indentedblockstart}
+%
+\def\indentedblockstart{%
+  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+  \parindent=0pt
+  %
+  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+  \ifx\nonarrowing\relax
+    \advance\leftskip by \lispnarrowing
+    \exdentamount = \lispnarrowing
+  \else
+    \let\nonarrowing = \relax
+  \fi
+}
+
+% Keep a nonzero parskip for the environment, since we're doing normal filling.
+%
+\def\Eindentedblock{%
+  \par
+  {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallindentedblock{\Eindentedblock}
+
 
 % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
 % If we want to allow any <char> as delimiter,
@@ -5141,18 +6628,16 @@
   \do\ \do\\\do\{\do\}\do\$\do\&%
   \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
   \do\<\do\>\do\|\do\@\do+\do\"%
+  % Don't do the quotes -- if we do, @set txicodequoteundirected and
+  % @set txicodequotebacktick will not have effect on @verb and
+  % @verbatim, and ?` and !` ligatures won't get disabled.
+  %\do\`\do\'%
 }
 %
 % [Knuth] p. 380
 \def\uncatcodespecials{%
   \def\do##1{\catcode`##1=\other}\dospecials}
 %
-% [Knuth] pp. 380,381,391
-% Disable Spanish ligatures ?` and !` of \tt font
-\begingroup
-  \catcode`\`=\active\gdef`{\relax\lq}
-\endgroup
-%
 % Setup for the @verb command.
 %
 % Eight spaces for a tab
@@ -5164,7 +6649,7 @@
 \def\setupverb{%
   \tt  % easiest (and conventionally used) font for verbatim
   \def\par{\leavevmode\endgraf}%
-  \catcode`\`=\active
+  \setupmarkupstyle{verb}%
   \tabeightspaces
   % Respect line breaks,
   % print special symbols as themselves, and
@@ -5175,35 +6660,46 @@
 
 % Setup for the @verbatim environment
 %
-% Real tab expansion
+% Real tab expansion.
 \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
 %
-\def\starttabbox{\setbox0=\hbox\bgroup}
+% We typeset each line of the verbatim in an \hbox, so we can handle
+% tabs.  The \global is in case the verbatim line starts with an accent,
+% or some other command that starts with a begin-group.  Otherwise, the
+% entire \verbbox would disappear at the corresponding end-group, before
+% it is typeset.  Meanwhile, we can't have nested verbatim commands
+% (can we?), so the \global won't be overwriting itself.
+\newbox\verbbox
+\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
+%
 \begingroup
   \catcode`\^^I=\active
   \gdef\tabexpand{%
     \catcode`\^^I=\active
     \def^^I{\leavevmode\egroup
-      \dimen0=\wd0 % the width so far, or since the previous tab
-      \divide\dimen0 by\tabw
-      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
-      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
-      \wd0=\dimen0 \box0 \starttabbox
+      \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
+      \divide\dimen\verbbox by\tabw
+      \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
+      \advance\dimen\verbbox by\tabw  % advance to next multiple of \tabw
+      \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
     }%
   }
 \endgroup
+
+% start the verbatim environment.
 \def\setupverbatim{%
   \let\nonarrowing = t%
   \nonfillstart
-  % Easiest (and conventionally used) font for verbatim
-  \tt
-  \def\par{\leavevmode\egroup\box0\endgraf}%
-  \catcode`\`=\active
+  \tt % easiest (and conventionally used) font for verbatim
+  % The \leavevmode here is for blank lines.  Otherwise, we would
+  % never \starttabox and the \egroup would end verbatim mode.
+  \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
   \tabexpand
+  \setupmarkupstyle{verbatim}%
   % Respect line breaks,
   % print special symbols as themselves, and
-  % make each space count
-  % must do in this order:
+  % make each space count.
+  % Must do in this order:
   \obeylines \uncatcodespecials \sepspaces
   \everypar{\starttabbox}%
 }
@@ -5259,6 +6755,8 @@
   {%
     \makevalueexpandable
     \setupverbatim
+    \indexnofonts       % Allow `@@' and other weird things in file names.
+    \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
     \input #1
     \afterenvbreak
   }%
@@ -5284,27 +6782,35 @@
   \endgroup
 }
 
+
 \message{defuns,}
 % @defun etc.
 
 \newskip\defbodyindent \defbodyindent=.4in
 \newskip\defargsindent \defargsindent=50pt
 \newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
 
 % Start the processing of @deffn:
 \def\startdefun{%
   \ifnum\lastpenalty<10000
     \medbreak
+    \defunpenalty=10003 % Will keep this @deffn together with the
+                        % following @def command, see below.
   \else
     % If there are two @def commands in a row, we'll have a \nobreak,
     % which is there to keep the function description together with its
     % header.  But if there's nothing but headers, we need to allow a
     % break somewhere.  Check specifically for penalty 10002, inserted
-    % by \defargscommonending, instead of 10000, since the sectioning
+    % by \printdefunline, instead of 10000, since the sectioning
     % commands also insert a nobreak penalty, and we don't want to allow
     % a break between a section heading and a defun.
-    % 
-    \ifnum\lastpenalty=10002 \penalty2000 \fi
+    %
+    % As a further refinement, we avoid "club" headers by signalling
+    % with penalty of 10003 after the very first @deffn in the
+    % sequence (see above), and penalty of 10002 after any following
+    % @def command.
+    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
     %
     % Similarly, after a section heading, do not allow a break.
     % But do insert the glue.
@@ -5322,7 +6828,7 @@
   %
   % As above, allow line break if we have multiple x headers in a row.
   % It's not a great place, though.
-  \ifnum\lastpenalty=10002 \penalty3000 \fi
+  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
   %
   % And now, it's time to reuse the body of the original defun:
   \expandafter\gobbledefun#1%
@@ -5337,10 +6843,10 @@
     #1#2 \endheader
     % common ending:
     \interlinepenalty = 10000
-    \advance\rightskip by 0pt plus 1fil
+    \advance\rightskip by 0pt plus 1fil\relax
     \endgraf
     \nobreak\vskip -\parskip
-    \penalty 10002  % signal to \startdefun and \dodefunx
+    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
     % Some of the @defun-type tags do not enable magic parentheses,
     % rendering the following check redundant.  But we don't optimize.
     \checkparencounts
@@ -5350,7 +6856,7 @@
 \def\Edefun{\endgraf\medbreak}
 
 % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
-% the only thing remainnig is to define \deffnheader.
+% the only thing remaining is to define \deffnheader.
 %
 \def\makedefun#1{%
   \expandafter\let\csname E#1\endcsname = \Edefun
@@ -5367,13 +6873,36 @@
 \def\domakedefun#1#2#3{%
   \envdef#1{%
     \startdefun
+    \doingtypefnfalse    % distinguish typed functions from all else
     \parseargusing\activeparens{\printdefunline#3}%
   }%
   \def#2{\dodefunx#1}%
   \def#3%
 }
 
-%%% Untyped functions:
+\newif\ifdoingtypefn       % doing typed function?
+\newif\ifrettypeownline    % typeset return type on its own line?
+
+% @deftypefnnewline on|off says whether the return type of typed functions
+% are printed on their own line.  This affects @deftypefn, @deftypefun,
+% @deftypeop, and @deftypemethod.
+% 
+\parseargdef\deftypefnnewline{%
+  \def\temp{#1}%
+  \ifx\temp\onword
+    \expandafter\let\csname SETtxideftypefnnl\endcsname
+      = \empty
+  \else\ifx\temp\offword
+    \expandafter\let\csname SETtxideftypefnnl\endcsname
+      = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @txideftypefnnl value `\temp',
+                must be on|off}%
+  \fi\fi
+}
+
+% Untyped functions:
 
 % @deffn category name args
 \makedefun{deffn}{\deffngeneral{}}
@@ -5392,7 +6921,7 @@
   \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
 }
 
-%%% Typed functions:
+% Typed functions:
 
 % @deftypefn category type name args
 \makedefun{deftypefn}{\deftypefngeneral{}}
@@ -5407,10 +6936,11 @@
 %
 \def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
   \dosubind{fn}{\code{#4}}{#1}%
+  \doingtypefntrue
   \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
 }
 
-%%% Typed variables:
+% Typed variables:
 
 % @deftypevr category type var args
 \makedefun{deftypevr}{\deftypecvgeneral{}}
@@ -5428,7 +6958,7 @@
   \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
 }
 
-%%% Untyped variables:
+% Untyped variables:
 
 % @defvr category var args
 \makedefun{defvr}#1 {\deftypevrheader{#1} {} }
@@ -5439,7 +6969,8 @@
 % \defcvof {category of}class var args
 \def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
 
-%%% Type:
+% Types:
+
 % @deftp category name args
 \makedefun{deftp}#1 #2 #3\endheader{%
   \doind{tp}{\code{#2}}%
@@ -5467,25 +6998,49 @@
 % We are followed by (but not passed) the arguments, if any.
 %
 \def\defname#1#2#3{%
+  \par
   % Get the values of \leftskip and \rightskip as they were outside the @def...
   \advance\leftskip by -\defbodyindent
   %
-  % How we'll format the type name.  Putting it in brackets helps
+  % Determine if we are typesetting the return type of a typed function
+  % on a line by itself.
+  \rettypeownlinefalse
+  \ifdoingtypefn  % doing a typed function specifically?
+    % then check user option for putting return type on its own line:
+    \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
+      \rettypeownlinetrue
+    \fi
+  \fi
+  %
+  % How we'll format the category name.  Putting it in brackets helps
   % distinguish it from the body text that may end up on the next line
   % just below it.
   \def\temp{#1}%
   \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
   %
-  % Figure out line sizes for the paragraph shape.
+  % Figure out line sizes for the paragraph shape.  We'll always have at
+  % least two.
+  \tempnum = 2
+  %
   % The first line needs space for \box0; but if \rightskip is nonzero,
   % we need only space for the part of \box0 which exceeds it:
   \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
+  %
+  % If doing a return type on its own line, we'll have another line.
+  \ifrettypeownline
+    \advance\tempnum by 1
+    \def\maybeshapeline{0in \hsize}%
+  \else
+    \def\maybeshapeline{}%
+  \fi
+  %
   % The continuations:
   \dimen2=\hsize  \advance\dimen2 by -\defargsindent
-  % (plain.tex says that \dimen1 should be used only as global.)
-  \parshape 2 0in \dimen0 \defargsindent \dimen2
   %
-  % Put the type name to the right margin.
+  % The final paragraph shape:
+  \parshape \tempnum  0in \dimen0  \maybeshapeline  \defargsindent \dimen2
+  %
+  % Put the category name at the right margin.
   \noindent
   \hbox to 0pt{%
     \hfil\box0 \kern-\hsize
@@ -5507,8 +7062,16 @@
     % . this still does not fix the ?` and !` ligatures, but so far no
     %   one has made identifiers using them :).
     \df \tt
-    \def\temp{#2}% return value type
-    \ifx\temp\empty\else \tclose{\temp} \fi
+    \def\temp{#2}% text of the return type
+    \ifx\temp\empty\else
+      \tclose{\temp}% typeset the return type
+      \ifrettypeownline
+        % put return type on its own line; prohibit line break following:
+        \hfil\vadjust{\nobreak}\break  
+      \else
+        \space  % type on same line, so just followed by a space
+      \fi
+    \fi           % no return type
     #3% output function name
   }%
   {\rm\enskip}% hskip 0.5 em of \tenrm
@@ -5528,8 +7091,11 @@
   \df \sl \hyphenchar\font=0
   %
   % On the other hand, if an argument has two dashes (for instance), we
-  % want a way to get ttsl.  Let's try @var for that.
-  \let\var=\ttslanted
+  % want a way to get ttsl.  We used to recommend @var for that, so
+  % leave the code in, but it's strange for @var to lead to typewriter.
+  % Nowadays we recommend @code, since the difference between a ttsl hyphen
+  % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
+  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
   #1%
   \sl\hyphenchar\font=45
 }
@@ -5609,12 +7175,14 @@
   \ifnum\parencount=0 \else \badparencount \fi
   \ifnum\brackcount=0 \else \badbrackcount \fi
 }
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
 \def\badparencount{%
-  \errmessage{Unbalanced parentheses in @def}%
+  \message{Warning: unbalanced parentheses in @def...}%
   \global\parencount=0
 }
 \def\badbrackcount{%
-  \errmessage{Unbalanced square braces in @def}%
+  \message{Warning: unbalanced square brackets in @def...}%
   \global\brackcount=0
 }
 
@@ -5624,7 +7192,7 @@
 
 % To do this right we need a feature of e-TeX, \scantokens,
 % which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\undefined
+\ifx\eTeXversion\thisisundefined
   \newwrite\macscribble
   \def\scantokens#1{%
     \toks0={#1}%
@@ -5635,26 +7203,30 @@
   }
 \fi
 
-\def\scanmacro#1{%
-  \begingroup
-    \newlinechar`\^^M
-    \let\xeatspaces\eatspaces
-    % Undo catcode changes of \startcontents and \doprintindex
-    % When called from @insertcopying or (short)caption, we need active
-    % backslash to get it printed correctly.  Previously, we had
-    % \catcode`\\=\other instead.  We'll see whether a problem appears
-    % with macro expansion.				--kasal, 19aug04
-    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
-    % ... and \example
-    \spaceisspace
-    %
-    % Append \endinput to make sure that TeX does not see the ending newline.
-    %
-    % I've verified that it is necessary both for e-TeX and for ordinary TeX
-    %							--kasal, 29nov03
-    \scantokens{#1\endinput}%
-  \endgroup
-}
+\def\scanmacro#1{\begingroup
+  \newlinechar`\^^M
+  \let\xeatspaces\eatspaces
+  %
+  % Undo catcode changes of \startcontents and \doprintindex
+  % When called from @insertcopying or (short)caption, we need active
+  % backslash to get it printed correctly.  Previously, we had
+  % \catcode`\\=\other instead.  We'll see whether a problem appears
+  % with macro expansion.				--kasal, 19aug04
+  \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+  %
+  % ... and for \example:
+  \spaceisspace
+  %
+  % The \empty here causes a following catcode 5 newline to be eaten as
+  % part of reading whitespace after a control sequence.  It does not
+  % eat a catcode 13 newline.  There's no good way to handle the two
+  % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
+  % would then have different behavior).  See the Macro Details node in
+  % the manual for the workaround we recommend for macros and
+  % line-oriented commands.
+  % 
+  \scantokens{#1\empty}%
+\endgroup}
 
 \def\scanexp#1{%
   \edef\temp{\noexpand\scanmacro{#1}}%
@@ -5682,7 +7254,7 @@
 % This does \let #1 = #2, with \csnames; that is,
 %   \let \csname#1\endcsname = \csname#2\endcsname
 % (except of course we have to play expansion games).
-% 
+%
 \def\cslet#1#2{%
   \expandafter\let
   \csname#1\expandafter\endcsname
@@ -5708,13 +7280,18 @@
 
 % Macro bodies are absorbed as an argument in a context where
 % all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \.
-
+% (as in normal texinfo). It is necessary to change the definition of \
+% to recognize macro arguments; this is the job of \mbodybackslash.
+%
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion.  Must do this non-globally, to
+% confine the change to the current group.
+%
 % It's necessary to have hard CRs when the macro is executed. This is
-% done by  making ^^M (\endlinechar) catcode 12 when reading the macro
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
 % body, and then making it the \newlinechar in \scanmacro.
-
-\def\scanctxt{%
+%
+\def\scanctxt{% used as subroutine
   \catcode`\"=\other
   \catcode`\+=\other
   \catcode`\<=\other
@@ -5724,15 +7301,16 @@
   \catcode`\_=\other
   \catcode`\|=\other
   \catcode`\~=\other
+  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
 }
 
-\def\scanargctxt{%
+\def\scanargctxt{% used for copying and captions, not macros.
   \scanctxt
   \catcode`\\=\other
   \catcode`\^^M=\other
 }
 
-\def\macrobodyctxt{%
+\def\macrobodyctxt{% used for @macro definitions
   \scanctxt
   \catcode`\{=\other
   \catcode`\}=\other
@@ -5740,32 +7318,56 @@
   \usembodybackslash
 }
 
-\def\macroargctxt{%
+\def\macroargctxt{% used when scanning invocations
   \scanctxt
-  \catcode`\\=\other
+  \catcode`\\=0
 }
+% why catcode 0 for \ in the above?  To recognize \\ \{ \} as "escapes"
+% for the single characters \ { }.  Thus, we end up with the "commands"
+% that would be written @\ @{ @} in a Texinfo document.
+% 
+% We already have @{ and @}.  For @\, we define it here, and only for
+% this purpose, to produce a typewriter backslash (so, the @\ that we
+% define for @math can't be used with @macro calls):
+%
+\def\\{\normalbackslash}%
+% 
+% We would like to do this for \, too, since that is what makeinfo does.
+% But it is not possible, because Texinfo already has a command @, for a
+% cedilla accent.  Documents must use @comma{} instead.
+%
+% \anythingelse will almost certainly be an error of some kind.
+
 
 % \mbodybackslash is the definition of \ in @macro bodies.
 % It maps \foo\ => \csname macarg.foo\endcsname => #N
 % where N is the macro parameter number.
 % We define \csname macarg.\endcsname to be \realbackslash, so
 % \\ in macro replacement text gets you a backslash.
-
+%
 {\catcode`@=0 @catcode`@\=@active
  @gdef@usembodybackslash{@let\=@mbodybackslash}
  @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
 }
 \expandafter\def\csname macarg.\endcsname{\realbackslash}
 
+\def\margbackslash#1{\char`\#1 }
+
 \def\macro{\recursivefalse\parsearg\macroxxx}
 \def\rmacro{\recursivetrue\parsearg\macroxxx}
 
 \def\macroxxx#1{%
-  \getargs{#1}%           now \macname is the macname and \argl the arglist
+  \getargs{#1}% now \macname is the macname and \argl the arglist
   \ifx\argl\empty       % no arguments
-     \paramno=0%
+     \paramno=0\relax
   \else
      \expandafter\parsemargdef \argl;%
+     \if\paramno>256\relax
+       \ifx\eTeXversion\thisisundefined
+         \errhelp = \EMsimple
+         \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
+       \fi
+     \fi
   \fi
   \if1\csname ismacro.\the\macname\endcsname
      \message{Warning: redefining \the\macname}%
@@ -5812,46 +7414,269 @@
 % an opening brace, and that opening brace is not consumed.
 \def\getargs#1{\getargsxxx#1{}}
 \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacname#1 #2\relax{\macname={#1}}
 \def\getmacargs#1{\def\argl{#1}}
 
-% Parse the optional {params} list.  Set up \paramno and \paramlist
-% so \defmacro knows what to do.  Define \macarg.blah for each blah
-% in the params list, to be ##N where N is the position in that list.
-% That gets used by \mbodybackslash (above).
+% For macro processing make @ a letter so that we can make Texinfo private macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
 
+% Parse the optional {params} list.  Set up \paramno and \paramlist
+% so \defmacro knows what to do.  Define \macarg.BLAH for each BLAH
+% in the params list to some hook where the argument si to be expanded.  If
+% there are less than 10 arguments that hook is to be replaced by ##N where N
+% is the position in that list, that is to say the macro arguments are to be
+% defined `a la TeX in the macro body.  
+%
+% That gets used by \mbodybackslash (above).
+%
 % We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX:  let \hash be something
+% The technique used is stolen from LaTeX: let \hash be something
 % unexpandable, insert that wherever you need a #, and then redefine
 % it to # just before using the token list produced.
 %
 % The same technique is used to protect \eatspaces till just before
 % the macro is used.
-
-\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
-        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+%
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef  the body (nothing else will expand because of
+% the catcode regime underwhich the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, you need that no macro has more than 256 arguments, otherwise an
+% error is produced.
+\def\parsemargdef#1;{%
+  \paramno=0\def\paramlist{}%
+  \let\hash\relax
+  \let\xeatspaces\relax
+  \parsemargdefxxx#1,;,%
+  % In case that there are 10 or more arguments we parse again the arguments
+  % list to set new definitions for the \macarg.BLAH macros corresponding to
+  % each BLAH argument. It was anyhow needed to parse already once this list
+  % in order to count the arguments, and as macros with at most 9 arguments
+  % are by far more frequent than macro with 10 or more arguments, defining
+  % twice the \macarg.BLAH macros does not cost too much processing power.
+  \ifnum\paramno<10\relax\else
+    \paramno0\relax
+    \parsemmanyargdef@@#1,;,% 10 or more arguments
+  \fi
+}
 \def\parsemargdefxxx#1,{%
   \if#1;\let\next=\relax
   \else \let\next=\parsemargdefxxx
-    \advance\paramno by 1%
+    \advance\paramno by 1
     \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
         {\xeatspaces{\hash\the\paramno}}%
     \edef\paramlist{\paramlist\hash\the\paramno,}%
   \fi\next}
 
+\def\parsemmanyargdef@@#1,{%
+  \if#1;\let\next=\relax
+  \else 
+    \let\next=\parsemmanyargdef@@
+    \edef\tempb{\eatspaces{#1}}%
+    \expandafter\def\expandafter\tempa
+       \expandafter{\csname macarg.\tempb\endcsname}%
+    % Note that we need some extra \noexpand\noexpand, this is because we
+    % don't want \the  to be expanded in the \parsermacbody  as it uses an
+    % \xdef .
+    \expandafter\edef\tempa
+      {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
+    \advance\paramno by 1\relax
+  \fi\next}
+
 % These two commands read recursive and nonrecursive macro bodies.
 % (They're different since rec and nonrec macros end differently.)
+%
 
+\catcode `\@\texiatcatcode
 \long\def\parsemacbody#1@end macro%
 {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
 \long\def\parsermacbody#1@end rmacro%
 {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\catcode `\@=11\relax
 
-% This defines the macro itself. There are six cases: recursive and
-% nonrecursive macros of zero, one, and many arguments.
+\let\endargs@\relax
+\let\nil@\relax
+\def\nilm@{\nil@}%
+\long\def\nillm@{\nil@}%
+
+% This macro is expanded during the Texinfo macro expansion, not during its
+% definition.  It gets all the arguments values and assigns them to macros
+% macarg.ARGNAME
+%
+% #1 is the macro name
+% #2 is the list of argument names
+% #3 is the list of argument values
+\def\getargvals@#1#2#3{%
+  \def\macargdeflist@{}%
+  \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
+  \def\paramlist{#2,\nil@}%
+  \def\macroname{#1}%
+  \begingroup
+  \macroargctxt
+  \def\argvaluelist{#3,\nil@}%
+  \def\@tempa{#3}%
+  \ifx\@tempa\empty
+    \setemptyargvalues@
+  \else
+    \getargvals@@
+  \fi
+}
+
+% 
+\def\getargvals@@{%
+  \ifx\paramlist\nilm@
+      % Some sanity check needed here that \argvaluelist is also empty.
+      \ifx\argvaluelist\nillm@
+      \else
+        \errhelp = \EMsimple
+        \errmessage{Too many arguments in macro `\macroname'!}%
+      \fi
+      \let\next\macargexpandinbody@
+  \else
+    \ifx\argvaluelist\nillm@
+       % No more arguments values passed to macro.  Set remaining named-arg
+       % macros to empty.
+       \let\next\setemptyargvalues@
+    \else
+      % pop current arg name into \@tempb
+      \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
+      \expandafter\@tempa\expandafter{\paramlist}%
+       % pop current argument value into \@tempc
+      \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
+      \expandafter\@tempa\expandafter{\argvaluelist}%
+       % Here \@tempb is the current arg name and \@tempc is the current arg value.
+       % First place the new argument macro definition into \@tempd
+       \expandafter\macname\expandafter{\@tempc}%
+       \expandafter\let\csname macarg.\@tempb\endcsname\relax
+       \expandafter\def\expandafter\@tempe\expandafter{%
+         \csname macarg.\@tempb\endcsname}%
+       \edef\@tempd{\long\def\@tempe{\the\macname}}%
+       \push@\@tempd\macargdeflist@
+       \let\next\getargvals@@
+    \fi
+  \fi
+  \next
+}
+
+\def\push@#1#2{%
+  \expandafter\expandafter\expandafter\def
+  \expandafter\expandafter\expandafter#2%
+  \expandafter\expandafter\expandafter{%
+  \expandafter#1#2}%
+}
+
+% Replace arguments by their values in the macro body, and place the result
+% in macro \@tempa
+\def\macvalstoargs@{%
+  %  To do this we use the property that token registers that are \the'ed
+  % within an \edef  expand only once. So we are going to place all argument
+  % values into respective token registers.
+  %
+  % First we save the token context, and initialize argument numbering.
+  \begingroup
+    \paramno0\relax
+    % Then, for each argument number #N, we place the corresponding argument
+    % value into a new token list register \toks#N
+    \expandafter\putargsintokens@\saveparamlist@,;,%
+    % Then, we expand the body so that argument are replaced by their
+    % values. The trick for values not to be expanded themselves is that they
+    % are within tokens and that tokens expand only once in an \edef .
+    \edef\@tempc{\csname mac.\macroname .body\endcsname}%
+    % Now we restore the token stack pointer to free the token list registers
+    % which we have used, but we make sure that expanded body is saved after
+    % group.
+    \expandafter
+  \endgroup
+  \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
+  }
+
+\def\macargexpandinbody@{% 
+  %% Define the named-macro outside of this group and then close this group. 
+  \expandafter
+  \endgroup
+  \macargdeflist@
+  % First the replace in body the macro arguments by their values, the result
+  % is in \@tempa .
+  \macvalstoargs@
+  % Then we point at the \norecurse or \gobble (for recursive) macro value
+  % with \@tempb .
+  \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
+  % Depending on whether it is recursive or not, we need some tailing
+  % \egroup .
+  \ifx\@tempb\gobble
+     \let\@tempc\relax
+  \else
+     \let\@tempc\egroup
+  \fi
+  % And now we do the real job:
+  \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
+  \@tempd
+}
+
+\def\putargsintokens@#1,{%
+  \if#1;\let\next\relax
+  \else
+    \let\next\putargsintokens@
+    % First we allocate the new token list register, and give it a temporary
+    % alias \@tempb .
+    \toksdef\@tempb\the\paramno
+    % Then we place the argument value into that token list register.
+    \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
+    \expandafter\@tempb\expandafter{\@tempa}%
+    \advance\paramno by 1\relax
+  \fi
+  \next
+}
+
+% Save the token stack pointer into macro #1
+\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
+% Restore the token stack pointer from number in macro #1
+\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
+% newtoks that can be used non \outer .
+\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
+
+% Tailing missing arguments are set to empty
+\def\setemptyargvalues@{%
+  \ifx\paramlist\nilm@
+    \let\next\macargexpandinbody@
+  \else
+    \expandafter\setemptyargvaluesparser@\paramlist\endargs@
+    \let\next\setemptyargvalues@
+  \fi
+  \next
+}
+
+\def\setemptyargvaluesparser@#1,#2\endargs@{%
+  \expandafter\def\expandafter\@tempa\expandafter{%
+    \expandafter\def\csname macarg.#1\endcsname{}}%
+  \push@\@tempa\macargdeflist@
+  \def\paramlist{#2}%
+}
+
+% #1 is the element target macro
+% #2 is the list macro
+% #3,#4\endargs@ is the list value
+\def\pop@#1#2#3,#4\endargs@{%
+   \def#1{#3}%
+   \def#2{#4}%
+}
+\long\def\longpop@#1#2#3,#4\endargs@{%
+   \long\def#1{#3}%
+   \long\def#2{#4}%
+}
+
+% This defines a Texinfo @macro. There are eight cases: recursive and
+% nonrecursive macros of zero, one, up to nine, and many arguments.
 % Much magic with \expandafter here.
 % \xdef is used so that macro definitions will survive the file
 % they're defined in; @include reads the file inside a group.
+%
 \def\defmacro{%
   \let\hash=##% convert placeholders to macro parameter chars
   \ifrecursive
@@ -5866,17 +7691,25 @@
          \expandafter\noexpand\csname\the\macname xxx\endcsname}%
       \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
          \egroup\noexpand\scanmacro{\temp}}%
-    \else % many
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\csname\the\macname xx\endcsname}%
-      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-      \expandafter\expandafter
-      \expandafter\xdef
-      \expandafter\expandafter
-        \csname\the\macname xxx\endcsname
-          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+    \else
+      \ifnum\paramno<10\relax % at most 9
+        \expandafter\xdef\csname\the\macname\endcsname{%
+           \bgroup\noexpand\macroargctxt
+           \noexpand\csname\the\macname xx\endcsname}%
+        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+        \expandafter\expandafter
+        \expandafter\xdef
+        \expandafter\expandafter
+          \csname\the\macname xxx\endcsname
+            \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+      \else % 10 or more
+        \expandafter\xdef\csname\the\macname\endcsname{%
+          \noexpand\getargvals@{\the\macname}{\argl}%
+        }%    
+        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+        \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
+      \fi
     \fi
   \else
     \ifcase\paramno
@@ -5893,39 +7726,51 @@
         \egroup
         \noexpand\norecurse{\the\macname}%
         \noexpand\scanmacro{\temp}\egroup}%
-    \else % many
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \expandafter\noexpand\csname\the\macname xx\endcsname}%
-      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-      \expandafter\expandafter
-      \expandafter\xdef
-      \expandafter\expandafter
-      \csname\the\macname xxx\endcsname
-      \paramlist{%
-          \egroup
-          \noexpand\norecurse{\the\macname}%
-          \noexpand\scanmacro{\temp}\egroup}%
+    \else % at most 9
+      \ifnum\paramno<10\relax
+        \expandafter\xdef\csname\the\macname\endcsname{%
+           \bgroup\noexpand\macroargctxt
+           \expandafter\noexpand\csname\the\macname xx\endcsname}%
+        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+        \expandafter\expandafter
+        \expandafter\xdef
+        \expandafter\expandafter
+        \csname\the\macname xxx\endcsname
+        \paramlist{%
+            \egroup
+            \noexpand\norecurse{\the\macname}%
+            \noexpand\scanmacro{\temp}\egroup}%
+      \else % 10 or more:
+        \expandafter\xdef\csname\the\macname\endcsname{%
+          \noexpand\getargvals@{\the\macname}{\argl}%
+        }%
+        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+        \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
+      \fi
     \fi
   \fi}
 
+\catcode `\@\texiatcatcode\relax
+
 \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
 
 % \braceorline decides whether the next nonwhitespace character is a
 % {.  If so it reads up to the closing }, if not, it reads the whole
 % line.  Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg)
-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+% as an argument (by \parsebrace or \parsearg).
+% 
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
 \def\braceorlinexxx{%
   \ifx\nchar\bgroup\else
     \expandafter\parsearg
-  \fi \next}
+  \fi \macnamexxx}
 
 
 % @alias.
 % We need some trickery to remove the optional spaces around the equal
-% sign.  Just make them active and then expand them all to nothing.
+% sign.  Make them active and then expand them all to nothing.
+%
 \def\alias{\parseargusing\obeyspaces\aliasxxx}
 \def\aliasxxx #1{\aliasyyy#1\relax}
 \def\aliasyyy #1=#2\relax{%
@@ -5941,13 +7786,13 @@
 \message{cross references,}
 
 \newwrite\auxfile
-
 \newif\ifhavexrefs    % True if xref values are known.
 \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
 
 % @inforef is relatively simple.
 \def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+\def\inforefzzz #1,#2,#3,#4**{%
+  \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
   node \samp{\ignorespaces#1{}}}
 
 % @node's only job in TeX is to define \lastnode, which is used in
@@ -5986,7 +7831,7 @@
 
 % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
 % anchor), which consists of three parts:
-% 1) NAME-title - the current sectioning name taken from \thissection,
+% 1) NAME-title - the current sectioning name taken from \lastsection,
 %                 or the anchor name.
 % 2) NAME-snt   - section number and type, passed as the SNT arg, or
 %                 empty for anchors.
@@ -6005,14 +7850,35 @@
 	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
 	  ##1}{##2}}% these are parameters of \writexrdef
       }%
-      \toks0 = \expandafter{\thissection}%
+      \toks0 = \expandafter{\lastsection}%
       \immediate \writexrdef{title}{\the\toks0 }%
       \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
-      \writexrdef{pg}{\folio}% will be written later, during \shipout
+      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
     }%
   \fi
 }
 
+% @xrefautosectiontitle on|off says whether @section(ing) names are used
+% automatically in xrefs, if the third arg is not explicitly specified.
+% This was provided as a "secret" @set xref-automatic-section-title
+% variable, now it's official.
+% 
+\parseargdef\xrefautomaticsectiontitle{%
+  \def\temp{#1}%
+  \ifx\temp\onword
+    \expandafter\let\csname SETxref-automatic-section-title\endcsname
+      = \empty
+  \else\ifx\temp\offword
+    \expandafter\let\csname SETxref-automatic-section-title\endcsname
+      = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
+                must be on|off}%
+  \fi\fi
+}
+
+% 
 % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
 % the node name, #2 the name of the Info cross-reference, #3 the printed
 % node name, #4 the name of the Info file, #5 the name of the printed
@@ -6021,26 +7887,41 @@
 \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
 \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
 \def\ref#1{\xrefX[#1,,,,,,,]}
+%
+\newbox\toprefbox
+\newbox\printedrefnamebox
+\newbox\infofilenamebox
+\newbox\printedmanualbox
+%
 \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
   \unsepspaces
-  \def\printedmanual{\ignorespaces #5}%
+  %
+  % Get args without leading/trailing spaces.
   \def\printedrefname{\ignorespaces #3}%
-  \setbox1=\hbox{\printedmanual\unskip}%
-  \setbox0=\hbox{\printedrefname\unskip}%
-  \ifdim \wd0 = 0pt
+  \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+  %
+  \def\infofilename{\ignorespaces #4}%
+  \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
+  %
+  \def\printedmanual{\ignorespaces #5}%
+  \setbox\printedmanualbox  = \hbox{\printedmanual\unskip}%
+  %
+  % If the printed reference name (arg #3) was not explicitly given in
+  % the @xref, figure out what we want to use.
+  \ifdim \wd\printedrefnamebox = 0pt
     % No printed node name was explicitly given.
-    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
-      % Use the node name inside the square brackets.
+    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
+      % Not auto section-title: use node name inside the square brackets.
       \def\printedrefname{\ignorespaces #1}%
     \else
-      % Use the actual chapter/section title appear inside
-      % the square brackets.  Use the real section title if we have it.
-      \ifdim \wd1 > 0pt
-        % It is in another manual, so we don't have it.
+      % Auto section-title: use chapter/section title inside
+      % the square brackets if we have it.
+      \ifdim \wd\printedmanualbox > 0pt
+        % It is in another manual, so we don't have it; use node name.
         \def\printedrefname{\ignorespaces #1}%
       \else
         \ifhavexrefs
-          % We know the real title if we have the xref values.
+          % We (should) know the real title if we have the xref values.
           \def\printedrefname{\refx{#1-title}{}}%
         \else
           % Otherwise just copy the Info node name.
@@ -6052,22 +7933,32 @@
   %
   % Make link in pdf output.
   \ifpdf
-    \leavevmode
-    \getfilename{#4}%
-    {\turnoffactive
-     % See comments at \activebackslashdouble.
-     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
-      \backslashparens\pdfxrefdest}%
+    {\indexnofonts
+     \turnoffactive
+     \makevalueexpandable
+     % This expands tokens, so do it after making catcode changes, so _
+     % etc. don't get their TeX definitions.  This ignores all spaces in
+     % #4, including (wrongly) those in the middle of the filename.
+     \getfilename{#4}%
      %
-     \ifnum\filenamelength>0
-       \startlink attr{/Border [0 0 0]}%
-         goto file{\the\filename.pdf} name{\pdfxrefdest}%
+     % This (wrongly) does not take account of leading or trailing
+     % spaces in #1, which should be ignored.
+     \edef\pdfxrefdest{#1}%
+     \ifx\pdfxrefdest\empty
+       \def\pdfxrefdest{Top}% no empty targets
      \else
-       \startlink attr{/Border [0 0 0]}%
-         goto name{\pdfmkpgn{\pdfxrefdest}}%
+       \txiescapepdf\pdfxrefdest  % escape PDF special chars
+     \fi
+     %
+     \leavevmode
+     \startlink attr{/Border [0 0 0]}%
+     \ifnum\filenamelength>0
+       goto file{\the\filename.pdf} name{\pdfxrefdest}%
+     \else
+       goto name{\pdfmkpgn{\pdfxrefdest}}%
      \fi
     }%
-    \linkcolor
+    \setcolor{\linkcolor}%
   \fi
   %
   % Float references are printed completely differently: "Figure 1.2"
@@ -6084,29 +7975,42 @@
   \iffloat\Xthisreftitle
     % If the user specified the print name (third arg) to the ref,
     % print it instead of our usual "Figure 1.2".
-    \ifdim\wd0 = 0pt
-      \refx{#1-snt}%
+    \ifdim\wd\printedrefnamebox = 0pt
+      \refx{#1-snt}{}%
     \else
       \printedrefname
     \fi
     %
-    % if the user also gave the printed manual name (fifth arg), append
+    % If the user also gave the printed manual name (fifth arg), append
     % "in MANUALNAME".
-    \ifdim \wd1 > 0pt
+    \ifdim \wd\printedmanualbox > 0pt
       \space \putwordin{} \cite{\printedmanual}%
     \fi
   \else
     % node/anchor (non-float) references.
+    % 
+    % If we use \unhbox to print the node names, TeX does not insert
+    % empty discretionaries after hyphens, which means that it will not
+    % find a line break at a hyphen in a node names.  Since some manuals
+    % are best written with fairly long node names, containing hyphens,
+    % this is a loss.  Therefore, we give the text of the node name
+    % again, so it is as if TeX is seeing it for the first time.
+    % 
+    \ifdim \wd\printedmanualbox > 0pt
+      % Cross-manual reference with a printed manual name.
+      % 
+      \crossmanualxref{\cite{\printedmanual\unskip}}%
     %
-    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-    % insert empty discretionaries after hyphens, which means that it will
-    % not find a line break at a hyphen in a node names.  Since some manuals
-    % are best written with fairly long node names, containing hyphens, this
-    % is a loss.  Therefore, we give the text of the node name again, so it
-    % is as if TeX is seeing it for the first time.
-    \ifdim \wd1 > 0pt
-      \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+    \else\ifdim \wd\infofilenamebox > 0pt
+      % Cross-manual reference with only an info filename (arg 4), no
+      % printed manual name (arg 5).  This is essentially the same as
+      % the case above; we output the filename, since we have nothing else.
+      % 
+      \crossmanualxref{\code{\infofilename\unskip}}%
+    %
     \else
+      % Reference within this manual.
+      %
       % _ (for example) has to be the character _ for the purposes of the
       % control sequence corresponding to the node, but it has to expand
       % into the usual \leavevmode...\vrule stuff for purposes of
@@ -6118,7 +8022,7 @@
        \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
        \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
       }%
-      % output the `[mynode]' via a macro so it can be overridden.
+      % output the `[mynode]' via the macro below so it can be overridden.
       \xrefprintnodename\printedrefname
       %
       % But we always want a comma and a space:
@@ -6126,11 +8030,37 @@
       %
       % output the `page 3'.
       \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-    \fi
+    \fi\fi
   \fi
   \endlink
 \endgroup}
 
+% Output a cross-manual xref to #1.  Used just above (twice).
+% 
+% Only include the text "Section ``foo'' in" if the foo is neither
+% missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
+% "see The Foo Manual", the idea being to refer to the whole manual.
+% 
+% But, this being TeX, we can't easily compare our node name against the
+% string "Top" while ignoring the possible spaces before and after in
+% the input.  By adding the arbitrary 7sp below, we make it much less
+% likely that a real node name would have the same width as "Top" (e.g.,
+% in a monospaced font).  Hopefully it will never happen in practice.
+% 
+% For the same basic reason, we retypeset the "Top" at every
+% reference, since the current font is indeterminate.
+% 
+\def\crossmanualxref#1{%
+  \setbox\toprefbox = \hbox{Top\kern7sp}%
+  \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+  \ifdim \wd2 > 7sp  % nonempty?
+    \ifdim \wd2 = \wd\toprefbox \else  % same as Top?
+      \putwordSection{} ``\printedrefname'' \putwordin{}\space
+    \fi
+  \fi
+  #1%
+}
+
 % This macro is called from \xrefX for the `[nodename]' part of xref
 % output.  It's a separate macro only so it can be changed more easily,
 % since square brackets don't work well in some documents.  Particularly
@@ -6181,7 +8111,8 @@
     \angleleft un\-de\-fined\angleright
     \iflinks
       \ifhavexrefs
-        \message{\linenumber Undefined cross reference `#1'.}%
+        {\toks0 = {#1}% avoid expansion of possibly-complex value
+         \message{\linenumber Undefined cross reference `\the\toks0'.}}%
       \else
         \ifwarnedxrefs\else
           \global\warnedxrefstrue
@@ -6201,10 +8132,18 @@
 % collisions).  But if this is a float type, we have more work to do.
 %
 \def\xrdef#1#2{%
-  \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
+  {% The node name might contain 8-bit characters, which in our current
+   % implementation are changed to commands like @'e.  Don't let these
+   % mess up the control sequence name.
+    \indexnofonts
+    \turnoffactive
+    \xdef\safexrefname{#1}%
+  }%
+  %
+  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
   %
   % Was that xref control sequence that we just defined for a float?
-  \expandafter\iffloat\csname XR#1\endcsname
+  \expandafter\iffloat\csname XR\safexrefname\endcsname
     % it was a float, and we have the (safe) float type in \iffloattype.
     \expandafter\let\expandafter\floatlist
       \csname floatlist\iffloattype\endcsname
@@ -6219,7 +8158,8 @@
     %
     % Remember this xref in the control sequence \floatlistFLOATTYPE,
     % for later use in \listoffloats.
-    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
+    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+      {\safexrefname}}%
   \fi
 }
 
@@ -6323,6 +8263,7 @@
   \input\jobname.#1
 \endgroup}
 
+
 \message{insertions,}
 % including footnotes.
 
@@ -6335,7 +8276,7 @@
 % space to prevent strange expansion errors.)
 \def\supereject{\par\penalty -20000\footnoteno =0 }
 
-% @footnotestyle is meaningful for info output only.
+% @footnotestyle is meaningful for Info output only.
 \let\footnotestyle=\comment
 
 {\catcode `\@=11
@@ -6398,6 +8339,8 @@
   % expands into a box, it must come within the paragraph, lest it
   % provide a place where TeX can split the footnote.
   \footstrut
+  %
+  % Invoke rest of plain TeX footnote routine.
   \futurelet\next\fo@t
 }
 }%end \catcode `\@=11
@@ -6405,7 +8348,7 @@
 % In case a @footnote appears in a vbox, save the footnote text and create
 % the real \insert just after the vbox finished.  Otherwise, the insertion
 % would be lost.
-% Similarily, if a @footnote appears inside an alignment, save the footnote
+% Similarly, if a @footnote appears inside an alignment, save the footnote
 % text to a box and make the \insert when a row of the table is finished.
 % And the same can be done for other insert classes.  --kasal, 16nov03.
 
@@ -6485,7 +8428,7 @@
   it from ftp://tug.org/tex/epsf.tex.}
 %
 \def\image#1{%
-  \ifx\epsfbox\undefined
+  \ifx\epsfbox\thisisundefined
     \ifwarnednoepsf \else
       \errhelp = \noepsfhelp
       \errmessage{epsf.tex not found, images will be ignored}%
@@ -6501,7 +8444,7 @@
 % #2 is (optional) width, #3 is (optional) height.
 % #4 is (ignored optional) html alt text.
 % #5 is (ignored optional) extension.
-% #6 is just the usual extra ignored arg for parsing this stuff.
+% #6 is just the usual extra ignored arg for parsing stuff.
 \newif\ifimagevmode
 \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
   \catcode`\^^M = 5     % in case we're inside an example
@@ -6509,15 +8452,30 @@
   % If the image is by itself, center it.
   \ifvmode
     \imagevmodetrue
-    \nobreak\bigskip
+  \else \ifx\centersub\centerV
+    % for @center @image, we need a vbox so we can have our vertical space
+    \imagevmodetrue
+    \vbox\bgroup % vbox has better behavior than vtop herev
+  \fi\fi
+  %
+  \ifimagevmode
+    \nobreak\medskip
     % Usually we'll have text after the image which will insert
     % \parskip glue, so insert it here too to equalize the space
     % above and below.
     \nobreak\vskip\parskip
     \nobreak
-    \line\bgroup\hss
   \fi
   %
+  % Leave vertical mode so that indentation from an enclosing
+  %  environment such as @quotation is respected.
+  % However, if we're at the top level, we don't want the
+  %  normal paragraph indentation.
+  % On the other hand, if we are in the case of @center @image, we don't
+  %  want to start a paragraph, which will create a hsize-width box and
+  %  eradicate the centering.
+  \ifx\centersub\centerV\else \noindent \fi
+  %
   % Output the image.
   \ifpdf
     \dopdfimage{#1}{#2}{#3}%
@@ -6528,7 +8486,10 @@
     \epsfbox{#1.eps}%
   \fi
   %
-  \ifimagevmode \hss \egroup \bigbreak \fi  % space after the image
+  \ifimagevmode
+    \medskip  % space after a standalone image
+  \fi  
+  \ifx\centersub\centerV \egroup \fi
 \endgroup}
 
 
@@ -6595,13 +8556,13 @@
       \global\advance\floatno by 1
       %
       {%
-        % This magic value for \thissection is output by \setref as the
+        % This magic value for \lastsection is output by \setref as the
         % XREFLABEL-title value.  \xrefX uses it to distinguish float
         % labels (which have a completely different output format) from
         % node and anchor labels.  And \xrdef uses it to construct the
         % lists of floats.
         %
-        \edef\thissection{\floatmagic=\safefloattype}%
+        \edef\lastsection{\floatmagic=\safefloattype}%
         \setref{\floatlabel}{Yfloat}%
       }%
     \fi
@@ -6669,6 +8630,7 @@
       % caption if specified, else the full caption if specified, else nothing.
       {%
         \atdummies
+        %
         % since we read the caption text in the macro world, where ^^M
         % is turned into a normal character, we have to scan it back, so
         % we don't write the literal three characters "^^M" into the aux file.
@@ -6689,8 +8651,9 @@
   %
   % place the captured inserts
   %
-  % BEWARE: when the floats start float, we have to issue warning whenever an
-  % insert appears inside a float which could possibly float. --kasal, 26may04
+  % BEWARE: when the floats start floating, we have to issue warning
+  % whenever an insert appears inside a float which could possibly
+  % float. --kasal, 26may04
   %
   \checkinserts
 }
@@ -6734,7 +8697,7 @@
 
 % #1 is the control sequence we are passed; we expand into a conditional
 % which is true if #1 represents a float ref.  That is, the magic
-% \thissection value which we \setref above.
+% \lastsection value which we \setref above.
 %
 \def\iffloat#1{\expandafter\doiffloat#1==\finish}
 %
@@ -6795,39 +8758,909 @@
   \writeentry
 }}
 
-\message{localization,}
-% and i18n.
 
-% @documentlanguage is usually given very early, just after
-% @setfilename.  If done too late, it may not override everything
-% properly.  Single argument is the language abbreviation.
-% It would be nice if we could set up a hyphenation file here.
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding.  Single argument is the language
+% (de) or locale (de_DE) abbreviation.
 %
-\parseargdef\documentlanguage{%
+{
+  \catcode`\_ = \active
+  \globaldefs=1
+\parseargdef\documentlanguage{\begingroup
+  \let_=\normalunderscore  % normal _ character for filenames
   \tex % read txi-??.tex file in plain TeX.
-    % Read the file if it exists.
+    % Read the file by the name they passed if it exists.
     \openin 1 txi-#1.tex
     \ifeof 1
-      \errhelp = \nolanghelp
-      \errmessage{Cannot read language file txi-#1.tex}%
+      \documentlanguagetrywithoutunderscore{#1_\finish}%
     \else
+      \globaldefs = 1  % everything in the txi-LL files needs to persist
       \input txi-#1.tex
     \fi
     \closein 1
-  \endgroup
-}
-\newhelp\nolanghelp{The given language definition file cannot be found or
-is empty.  Maybe you need to install it?  In the current directory
-should work if nowhere else does.}
-
-
-% @documentencoding should change something in TeX eventually, most
-% likely, but for now just recognize it.
-\let\documentencoding = \comment
-
-
-% Page size parameters.
+  \endgroup % end raw TeX
+\endgroup}
 %
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+  \openin 1 txi-#1.tex
+  \ifeof 1
+    \errhelp = \nolanghelp
+    \errmessage{Cannot read language file txi-#1.tex}%
+  \else
+    \globaldefs = 1  % everything in the txi-LL files needs to persist
+    \input txi-#1.tex
+  \fi
+  \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty.  Maybe you need to install it?  Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages.  This means we can support hyphenation in
+% Texinfo, at least to some extent.  (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+  % do not set the language if the name is undefined in the current TeX.
+  \expandafter\ifx\csname lang@#1\endcsname \relax
+    \message{no patterns for #1}%
+  \else
+    \global\language = \csname lang@#1\endcsname
+  \fi
+  % but there is no harm in adjusting the hyphenmin values regardless.
+  \global\lefthyphenmin = #2\relax
+  \global\righthyphenmin = #3\relax
+}
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+   \count255=128
+   \loop\ifnum\count255<256
+      \global\catcode\count255=#1\relax
+      \advance\count255 by 1
+   \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+   \count255=128
+   \loop\ifnum\count255<256
+      \catcode\count255=#1\relax
+      \advance\count255 by 1
+   \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\parseargdef\documentencoding{%
+  % Encoding being declared for the document.
+  \def\declaredencoding{\csname #1.enc\endcsname}%
+  %
+  % Supported encodings: names converted to tokens in order to be able
+  % to compare them with \ifx.
+  \def\ascii{\csname US-ASCII.enc\endcsname}%
+  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+  \def\latone{\csname ISO-8859-1.enc\endcsname}%
+  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+  \def\utfeight{\csname UTF-8.enc\endcsname}%
+  %
+  \ifx \declaredencoding \ascii
+     \asciichardefs
+  %
+  \else \ifx \declaredencoding \lattwo
+     \setnonasciicharscatcode\active
+     \lattwochardefs
+  %
+  \else \ifx \declaredencoding \latone
+     \setnonasciicharscatcode\active
+     \latonechardefs
+  %
+  \else \ifx \declaredencoding \latnine
+     \setnonasciicharscatcode\active
+     \latninechardefs
+  %
+  \else \ifx \declaredencoding \utfeight
+     \setnonasciicharscatcode\active
+     \utfeightchardefs
+  %
+  \else
+    \message{Unknown document encoding #1, ignoring.}%
+  %
+  \fi % utfeight
+  \fi % latnine
+  \fi % latone
+  \fi % lattwo
+  \fi % ascii
+}
+
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+  \gdef^^a0{\tie}
+  \gdef^^a1{\exclamdown}
+  \gdef^^a2{\missingcharmsg{CENT SIGN}}
+  \gdef^^a3{{\pounds}}
+  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+  \gdef^^a5{\missingcharmsg{YEN SIGN}}
+  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
+  \gdef^^a7{\S}
+  \gdef^^a8{\"{}}
+  \gdef^^a9{\copyright}
+  \gdef^^aa{\ordf}
+  \gdef^^ab{\guillemetleft}
+  \gdef^^ac{$\lnot$}
+  \gdef^^ad{\-}
+  \gdef^^ae{\registeredsymbol}
+  \gdef^^af{\={}}
+  %
+  \gdef^^b0{\textdegree}
+  \gdef^^b1{$\pm$}
+  \gdef^^b2{$^2$}
+  \gdef^^b3{$^3$}
+  \gdef^^b4{\'{}}
+  \gdef^^b5{$\mu$}
+  \gdef^^b6{\P}
+  %
+  \gdef^^b7{$^.$}
+  \gdef^^b8{\cedilla\ }
+  \gdef^^b9{$^1$}
+  \gdef^^ba{\ordm}
+  %
+  \gdef^^bb{\guillemetright}
+  \gdef^^bc{$1\over4$}
+  \gdef^^bd{$1\over2$}
+  \gdef^^be{$3\over4$}
+  \gdef^^bf{\questiondown}
+  %
+  \gdef^^c0{\`A}
+  \gdef^^c1{\'A}
+  \gdef^^c2{\^A}
+  \gdef^^c3{\~A}
+  \gdef^^c4{\"A}
+  \gdef^^c5{\ringaccent A}
+  \gdef^^c6{\AE}
+  \gdef^^c7{\cedilla C}
+  \gdef^^c8{\`E}
+  \gdef^^c9{\'E}
+  \gdef^^ca{\^E}
+  \gdef^^cb{\"E}
+  \gdef^^cc{\`I}
+  \gdef^^cd{\'I}
+  \gdef^^ce{\^I}
+  \gdef^^cf{\"I}
+  %
+  \gdef^^d0{\DH}
+  \gdef^^d1{\~N}
+  \gdef^^d2{\`O}
+  \gdef^^d3{\'O}
+  \gdef^^d4{\^O}
+  \gdef^^d5{\~O}
+  \gdef^^d6{\"O}
+  \gdef^^d7{$\times$}
+  \gdef^^d8{\O}
+  \gdef^^d9{\`U}
+  \gdef^^da{\'U}
+  \gdef^^db{\^U}
+  \gdef^^dc{\"U}
+  \gdef^^dd{\'Y}
+  \gdef^^de{\TH}
+  \gdef^^df{\ss}
+  %
+  \gdef^^e0{\`a}
+  \gdef^^e1{\'a}
+  \gdef^^e2{\^a}
+  \gdef^^e3{\~a}
+  \gdef^^e4{\"a}
+  \gdef^^e5{\ringaccent a}
+  \gdef^^e6{\ae}
+  \gdef^^e7{\cedilla c}
+  \gdef^^e8{\`e}
+  \gdef^^e9{\'e}
+  \gdef^^ea{\^e}
+  \gdef^^eb{\"e}
+  \gdef^^ec{\`{\dotless i}}
+  \gdef^^ed{\'{\dotless i}}
+  \gdef^^ee{\^{\dotless i}}
+  \gdef^^ef{\"{\dotless i}}
+  %
+  \gdef^^f0{\dh}
+  \gdef^^f1{\~n}
+  \gdef^^f2{\`o}
+  \gdef^^f3{\'o}
+  \gdef^^f4{\^o}
+  \gdef^^f5{\~o}
+  \gdef^^f6{\"o}
+  \gdef^^f7{$\div$}
+  \gdef^^f8{\o}
+  \gdef^^f9{\`u}
+  \gdef^^fa{\'u}
+  \gdef^^fb{\^u}
+  \gdef^^fc{\"u}
+  \gdef^^fd{\'y}
+  \gdef^^fe{\th}
+  \gdef^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+  % Encoding is almost identical to Latin1.
+  \latonechardefs
+  %
+  \gdef^^a4{\euro}
+  \gdef^^a6{\v S}
+  \gdef^^a8{\v s}
+  \gdef^^b4{\v Z}
+  \gdef^^b8{\v z}
+  \gdef^^bc{\OE}
+  \gdef^^bd{\oe}
+  \gdef^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+  \gdef^^a0{\tie}
+  \gdef^^a1{\ogonek{A}}
+  \gdef^^a2{\u{}}
+  \gdef^^a3{\L}
+  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+  \gdef^^a5{\v L}
+  \gdef^^a6{\'S}
+  \gdef^^a7{\S}
+  \gdef^^a8{\"{}}
+  \gdef^^a9{\v S}
+  \gdef^^aa{\cedilla S}
+  \gdef^^ab{\v T}
+  \gdef^^ac{\'Z}
+  \gdef^^ad{\-}
+  \gdef^^ae{\v Z}
+  \gdef^^af{\dotaccent Z}
+  %
+  \gdef^^b0{\textdegree}
+  \gdef^^b1{\ogonek{a}}
+  \gdef^^b2{\ogonek{ }}
+  \gdef^^b3{\l}
+  \gdef^^b4{\'{}}
+  \gdef^^b5{\v l}
+  \gdef^^b6{\'s}
+  \gdef^^b7{\v{}}
+  \gdef^^b8{\cedilla\ }
+  \gdef^^b9{\v s}
+  \gdef^^ba{\cedilla s}
+  \gdef^^bb{\v t}
+  \gdef^^bc{\'z}
+  \gdef^^bd{\H{}}
+  \gdef^^be{\v z}
+  \gdef^^bf{\dotaccent z}
+  %
+  \gdef^^c0{\'R}
+  \gdef^^c1{\'A}
+  \gdef^^c2{\^A}
+  \gdef^^c3{\u A}
+  \gdef^^c4{\"A}
+  \gdef^^c5{\'L}
+  \gdef^^c6{\'C}
+  \gdef^^c7{\cedilla C}
+  \gdef^^c8{\v C}
+  \gdef^^c9{\'E}
+  \gdef^^ca{\ogonek{E}}
+  \gdef^^cb{\"E}
+  \gdef^^cc{\v E}
+  \gdef^^cd{\'I}
+  \gdef^^ce{\^I}
+  \gdef^^cf{\v D}
+  %
+  \gdef^^d0{\DH}
+  \gdef^^d1{\'N}
+  \gdef^^d2{\v N}
+  \gdef^^d3{\'O}
+  \gdef^^d4{\^O}
+  \gdef^^d5{\H O}
+  \gdef^^d6{\"O}
+  \gdef^^d7{$\times$}
+  \gdef^^d8{\v R}
+  \gdef^^d9{\ringaccent U}
+  \gdef^^da{\'U}
+  \gdef^^db{\H U}
+  \gdef^^dc{\"U}
+  \gdef^^dd{\'Y}
+  \gdef^^de{\cedilla T}
+  \gdef^^df{\ss}
+  %
+  \gdef^^e0{\'r}
+  \gdef^^e1{\'a}
+  \gdef^^e2{\^a}
+  \gdef^^e3{\u a}
+  \gdef^^e4{\"a}
+  \gdef^^e5{\'l}
+  \gdef^^e6{\'c}
+  \gdef^^e7{\cedilla c}
+  \gdef^^e8{\v c}
+  \gdef^^e9{\'e}
+  \gdef^^ea{\ogonek{e}}
+  \gdef^^eb{\"e}
+  \gdef^^ec{\v e}
+  \gdef^^ed{\'{\dotless{i}}}
+  \gdef^^ee{\^{\dotless{i}}}
+  \gdef^^ef{\v d}
+  %
+  \gdef^^f0{\dh}
+  \gdef^^f1{\'n}
+  \gdef^^f2{\v n}
+  \gdef^^f3{\'o}
+  \gdef^^f4{\^o}
+  \gdef^^f5{\H o}
+  \gdef^^f6{\"o}
+  \gdef^^f7{$\div$}
+  \gdef^^f8{\v r}
+  \gdef^^f9{\ringaccent u}
+  \gdef^^fa{\'u}
+  \gdef^^fb{\H u}
+  \gdef^^fc{\"u}
+  \gdef^^fd{\'y}
+  \gdef^^fe{\cedilla t}
+  \gdef^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions.  It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+  \ifx #1\relax
+    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+  \else
+    \expandafter #1%
+  \fi
+}
+
+\begingroup
+  \catcode`\~13
+  \catcode`\"12
+
+  \def\UTFviiiLoop{%
+    \global\catcode\countUTFx\active
+    \uccode`\~\countUTFx
+    \uppercase\expandafter{\UTFviiiTmp}%
+    \advance\countUTFx by 1
+    \ifnum\countUTFx < \countUTFy
+      \expandafter\UTFviiiLoop
+    \fi}
+
+  \countUTFx = "C2
+  \countUTFy = "E0
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+  \UTFviiiLoop
+
+  \countUTFx = "E0
+  \countUTFy = "F0
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+  \UTFviiiLoop
+
+  \countUTFx = "F0
+  \countUTFy = "F4
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+  \UTFviiiLoop
+\endgroup
+
+\begingroup
+  \catcode`\"=12
+  \catcode`\<=12
+  \catcode`\.=12
+  \catcode`\,=12
+  \catcode`\;=12
+  \catcode`\!=12
+  \catcode`\~=13
+
+  \gdef\DeclareUnicodeCharacter#1#2{%
+    \countUTFz = "#1\relax
+    %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
+    \begingroup
+      \parseXMLCharref
+      \def\UTFviiiTwoOctets##1##2{%
+        \csname u8:##1\string ##2\endcsname}%
+      \def\UTFviiiThreeOctets##1##2##3{%
+        \csname u8:##1\string ##2\string ##3\endcsname}%
+      \def\UTFviiiFourOctets##1##2##3##4{%
+        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
+      \expandafter\expandafter\expandafter\expandafter
+       \expandafter\expandafter\expandafter
+       \gdef\UTFviiiTmp{#2}%
+    \endgroup}
+
+  \gdef\parseXMLCharref{%
+    \ifnum\countUTFz < "A0\relax
+      \errhelp = \EMsimple
+      \errmessage{Cannot define Unicode char value < 00A0}%
+    \else\ifnum\countUTFz < "800\relax
+      \parseUTFviiiA,%
+      \parseUTFviiiB C\UTFviiiTwoOctets.,%
+    \else\ifnum\countUTFz < "10000\relax
+      \parseUTFviiiA;%
+      \parseUTFviiiA,%
+      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
+    \else
+      \parseUTFviiiA;%
+      \parseUTFviiiA,%
+      \parseUTFviiiA!%
+      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
+    \fi\fi\fi
+  }
+
+  \gdef\parseUTFviiiA#1{%
+    \countUTFx = \countUTFz
+    \divide\countUTFz by 64
+    \countUTFy = \countUTFz
+    \multiply\countUTFz by 64
+    \advance\countUTFx by -\countUTFz
+    \advance\countUTFx by 128
+    \uccode `#1\countUTFx
+    \countUTFz = \countUTFy}
+
+  \gdef\parseUTFviiiB#1#2#3#4{%
+    \advance\countUTFz by "#10\relax
+    \uccode `#3\countUTFz
+    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+\def\utfeightchardefs{%
+  \DeclareUnicodeCharacter{00A0}{\tie}
+  \DeclareUnicodeCharacter{00A1}{\exclamdown}
+  \DeclareUnicodeCharacter{00A3}{\pounds}
+  \DeclareUnicodeCharacter{00A8}{\"{ }}
+  \DeclareUnicodeCharacter{00A9}{\copyright}
+  \DeclareUnicodeCharacter{00AA}{\ordf}
+  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
+  \DeclareUnicodeCharacter{00AD}{\-}
+  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
+  \DeclareUnicodeCharacter{00AF}{\={ }}
+
+  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+  \DeclareUnicodeCharacter{00B4}{\'{ }}
+  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+  \DeclareUnicodeCharacter{00BA}{\ordm}
+  \DeclareUnicodeCharacter{00BB}{\guillemetright}
+  \DeclareUnicodeCharacter{00BF}{\questiondown}
+
+  \DeclareUnicodeCharacter{00C0}{\`A}
+  \DeclareUnicodeCharacter{00C1}{\'A}
+  \DeclareUnicodeCharacter{00C2}{\^A}
+  \DeclareUnicodeCharacter{00C3}{\~A}
+  \DeclareUnicodeCharacter{00C4}{\"A}
+  \DeclareUnicodeCharacter{00C5}{\AA}
+  \DeclareUnicodeCharacter{00C6}{\AE}
+  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
+  \DeclareUnicodeCharacter{00C8}{\`E}
+  \DeclareUnicodeCharacter{00C9}{\'E}
+  \DeclareUnicodeCharacter{00CA}{\^E}
+  \DeclareUnicodeCharacter{00CB}{\"E}
+  \DeclareUnicodeCharacter{00CC}{\`I}
+  \DeclareUnicodeCharacter{00CD}{\'I}
+  \DeclareUnicodeCharacter{00CE}{\^I}
+  \DeclareUnicodeCharacter{00CF}{\"I}
+
+  \DeclareUnicodeCharacter{00D0}{\DH}
+  \DeclareUnicodeCharacter{00D1}{\~N}
+  \DeclareUnicodeCharacter{00D2}{\`O}
+  \DeclareUnicodeCharacter{00D3}{\'O}
+  \DeclareUnicodeCharacter{00D4}{\^O}
+  \DeclareUnicodeCharacter{00D5}{\~O}
+  \DeclareUnicodeCharacter{00D6}{\"O}
+  \DeclareUnicodeCharacter{00D8}{\O}
+  \DeclareUnicodeCharacter{00D9}{\`U}
+  \DeclareUnicodeCharacter{00DA}{\'U}
+  \DeclareUnicodeCharacter{00DB}{\^U}
+  \DeclareUnicodeCharacter{00DC}{\"U}
+  \DeclareUnicodeCharacter{00DD}{\'Y}
+  \DeclareUnicodeCharacter{00DE}{\TH}
+  \DeclareUnicodeCharacter{00DF}{\ss}
+
+  \DeclareUnicodeCharacter{00E0}{\`a}
+  \DeclareUnicodeCharacter{00E1}{\'a}
+  \DeclareUnicodeCharacter{00E2}{\^a}
+  \DeclareUnicodeCharacter{00E3}{\~a}
+  \DeclareUnicodeCharacter{00E4}{\"a}
+  \DeclareUnicodeCharacter{00E5}{\aa}
+  \DeclareUnicodeCharacter{00E6}{\ae}
+  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
+  \DeclareUnicodeCharacter{00E8}{\`e}
+  \DeclareUnicodeCharacter{00E9}{\'e}
+  \DeclareUnicodeCharacter{00EA}{\^e}
+  \DeclareUnicodeCharacter{00EB}{\"e}
+  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
+  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
+  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
+  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
+
+  \DeclareUnicodeCharacter{00F0}{\dh}
+  \DeclareUnicodeCharacter{00F1}{\~n}
+  \DeclareUnicodeCharacter{00F2}{\`o}
+  \DeclareUnicodeCharacter{00F3}{\'o}
+  \DeclareUnicodeCharacter{00F4}{\^o}
+  \DeclareUnicodeCharacter{00F5}{\~o}
+  \DeclareUnicodeCharacter{00F6}{\"o}
+  \DeclareUnicodeCharacter{00F8}{\o}
+  \DeclareUnicodeCharacter{00F9}{\`u}
+  \DeclareUnicodeCharacter{00FA}{\'u}
+  \DeclareUnicodeCharacter{00FB}{\^u}
+  \DeclareUnicodeCharacter{00FC}{\"u}
+  \DeclareUnicodeCharacter{00FD}{\'y}
+  \DeclareUnicodeCharacter{00FE}{\th}
+  \DeclareUnicodeCharacter{00FF}{\"y}
+
+  \DeclareUnicodeCharacter{0100}{\=A}
+  \DeclareUnicodeCharacter{0101}{\=a}
+  \DeclareUnicodeCharacter{0102}{\u{A}}
+  \DeclareUnicodeCharacter{0103}{\u{a}}
+  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
+  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
+  \DeclareUnicodeCharacter{0106}{\'C}
+  \DeclareUnicodeCharacter{0107}{\'c}
+  \DeclareUnicodeCharacter{0108}{\^C}
+  \DeclareUnicodeCharacter{0109}{\^c}
+  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
+  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
+  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
+  \DeclareUnicodeCharacter{010C}{\v{C}}
+  \DeclareUnicodeCharacter{010D}{\v{c}}
+  \DeclareUnicodeCharacter{010E}{\v{D}}
+
+  \DeclareUnicodeCharacter{0112}{\=E}
+  \DeclareUnicodeCharacter{0113}{\=e}
+  \DeclareUnicodeCharacter{0114}{\u{E}}
+  \DeclareUnicodeCharacter{0115}{\u{e}}
+  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
+  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+  \DeclareUnicodeCharacter{011A}{\v{E}}
+  \DeclareUnicodeCharacter{011B}{\v{e}}
+  \DeclareUnicodeCharacter{011C}{\^G}
+  \DeclareUnicodeCharacter{011D}{\^g}
+  \DeclareUnicodeCharacter{011E}{\u{G}}
+  \DeclareUnicodeCharacter{011F}{\u{g}}
+
+  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
+  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+  \DeclareUnicodeCharacter{0124}{\^H}
+  \DeclareUnicodeCharacter{0125}{\^h}
+  \DeclareUnicodeCharacter{0128}{\~I}
+  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
+  \DeclareUnicodeCharacter{012A}{\=I}
+  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
+  \DeclareUnicodeCharacter{012C}{\u{I}}
+  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+
+  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
+  \DeclareUnicodeCharacter{0131}{\dotless{i}}
+  \DeclareUnicodeCharacter{0132}{IJ}
+  \DeclareUnicodeCharacter{0133}{ij}
+  \DeclareUnicodeCharacter{0134}{\^J}
+  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+  \DeclareUnicodeCharacter{0139}{\'L}
+  \DeclareUnicodeCharacter{013A}{\'l}
+
+  \DeclareUnicodeCharacter{0141}{\L}
+  \DeclareUnicodeCharacter{0142}{\l}
+  \DeclareUnicodeCharacter{0143}{\'N}
+  \DeclareUnicodeCharacter{0144}{\'n}
+  \DeclareUnicodeCharacter{0147}{\v{N}}
+  \DeclareUnicodeCharacter{0148}{\v{n}}
+  \DeclareUnicodeCharacter{014C}{\=O}
+  \DeclareUnicodeCharacter{014D}{\=o}
+  \DeclareUnicodeCharacter{014E}{\u{O}}
+  \DeclareUnicodeCharacter{014F}{\u{o}}
+
+  \DeclareUnicodeCharacter{0150}{\H{O}}
+  \DeclareUnicodeCharacter{0151}{\H{o}}
+  \DeclareUnicodeCharacter{0152}{\OE}
+  \DeclareUnicodeCharacter{0153}{\oe}
+  \DeclareUnicodeCharacter{0154}{\'R}
+  \DeclareUnicodeCharacter{0155}{\'r}
+  \DeclareUnicodeCharacter{0158}{\v{R}}
+  \DeclareUnicodeCharacter{0159}{\v{r}}
+  \DeclareUnicodeCharacter{015A}{\'S}
+  \DeclareUnicodeCharacter{015B}{\'s}
+  \DeclareUnicodeCharacter{015C}{\^S}
+  \DeclareUnicodeCharacter{015D}{\^s}
+  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
+  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
+
+  \DeclareUnicodeCharacter{0160}{\v{S}}
+  \DeclareUnicodeCharacter{0161}{\v{s}}
+  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
+  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
+  \DeclareUnicodeCharacter{0164}{\v{T}}
+
+  \DeclareUnicodeCharacter{0168}{\~U}
+  \DeclareUnicodeCharacter{0169}{\~u}
+  \DeclareUnicodeCharacter{016A}{\=U}
+  \DeclareUnicodeCharacter{016B}{\=u}
+  \DeclareUnicodeCharacter{016C}{\u{U}}
+  \DeclareUnicodeCharacter{016D}{\u{u}}
+  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
+  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
+
+  \DeclareUnicodeCharacter{0170}{\H{U}}
+  \DeclareUnicodeCharacter{0171}{\H{u}}
+  \DeclareUnicodeCharacter{0174}{\^W}
+  \DeclareUnicodeCharacter{0175}{\^w}
+  \DeclareUnicodeCharacter{0176}{\^Y}
+  \DeclareUnicodeCharacter{0177}{\^y}
+  \DeclareUnicodeCharacter{0178}{\"Y}
+  \DeclareUnicodeCharacter{0179}{\'Z}
+  \DeclareUnicodeCharacter{017A}{\'z}
+  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
+  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
+  \DeclareUnicodeCharacter{017D}{\v{Z}}
+  \DeclareUnicodeCharacter{017E}{\v{z}}
+
+  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
+  \DeclareUnicodeCharacter{01C5}{D\v{z}}
+  \DeclareUnicodeCharacter{01C6}{d\v{z}}
+  \DeclareUnicodeCharacter{01C7}{LJ}
+  \DeclareUnicodeCharacter{01C8}{Lj}
+  \DeclareUnicodeCharacter{01C9}{lj}
+  \DeclareUnicodeCharacter{01CA}{NJ}
+  \DeclareUnicodeCharacter{01CB}{Nj}
+  \DeclareUnicodeCharacter{01CC}{nj}
+  \DeclareUnicodeCharacter{01CD}{\v{A}}
+  \DeclareUnicodeCharacter{01CE}{\v{a}}
+  \DeclareUnicodeCharacter{01CF}{\v{I}}
+
+  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
+  \DeclareUnicodeCharacter{01D1}{\v{O}}
+  \DeclareUnicodeCharacter{01D2}{\v{o}}
+  \DeclareUnicodeCharacter{01D3}{\v{U}}
+  \DeclareUnicodeCharacter{01D4}{\v{u}}
+
+  \DeclareUnicodeCharacter{01E2}{\={\AE}}
+  \DeclareUnicodeCharacter{01E3}{\={\ae}}
+  \DeclareUnicodeCharacter{01E6}{\v{G}}
+  \DeclareUnicodeCharacter{01E7}{\v{g}}
+  \DeclareUnicodeCharacter{01E8}{\v{K}}
+  \DeclareUnicodeCharacter{01E9}{\v{k}}
+
+  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
+  \DeclareUnicodeCharacter{01F1}{DZ}
+  \DeclareUnicodeCharacter{01F2}{Dz}
+  \DeclareUnicodeCharacter{01F3}{dz}
+  \DeclareUnicodeCharacter{01F4}{\'G}
+  \DeclareUnicodeCharacter{01F5}{\'g}
+  \DeclareUnicodeCharacter{01F8}{\`N}
+  \DeclareUnicodeCharacter{01F9}{\`n}
+  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
+  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
+  \DeclareUnicodeCharacter{01FE}{\'{\O}}
+  \DeclareUnicodeCharacter{01FF}{\'{\o}}
+
+  \DeclareUnicodeCharacter{021E}{\v{H}}
+  \DeclareUnicodeCharacter{021F}{\v{h}}
+
+  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
+  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
+  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
+  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
+  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
+  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
+
+  \DeclareUnicodeCharacter{0232}{\=Y}
+  \DeclareUnicodeCharacter{0233}{\=y}
+  \DeclareUnicodeCharacter{0237}{\dotless{j}}
+
+  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
+
+  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
+  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
+  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
+  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
+  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
+  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
+  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
+  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
+  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
+  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
+  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
+  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
+
+  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
+  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
+
+  \DeclareUnicodeCharacter{1E20}{\=G}
+  \DeclareUnicodeCharacter{1E21}{\=g}
+  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
+  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
+  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
+  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
+  \DeclareUnicodeCharacter{1E26}{\"H}
+  \DeclareUnicodeCharacter{1E27}{\"h}
+
+  \DeclareUnicodeCharacter{1E30}{\'K}
+  \DeclareUnicodeCharacter{1E31}{\'k}
+  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
+  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
+  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
+  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
+  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
+  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
+  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
+  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
+  \DeclareUnicodeCharacter{1E3E}{\'M}
+  \DeclareUnicodeCharacter{1E3F}{\'m}
+
+  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
+  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
+  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
+  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
+  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
+  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
+  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
+  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
+  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
+  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
+
+  \DeclareUnicodeCharacter{1E54}{\'P}
+  \DeclareUnicodeCharacter{1E55}{\'p}
+  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
+  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
+  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
+  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
+  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
+  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
+  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
+  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
+
+  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
+  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
+  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
+  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
+  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
+  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
+  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
+  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
+  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
+  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
+
+  \DeclareUnicodeCharacter{1E7C}{\~V}
+  \DeclareUnicodeCharacter{1E7D}{\~v}
+  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
+  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
+
+  \DeclareUnicodeCharacter{1E80}{\`W}
+  \DeclareUnicodeCharacter{1E81}{\`w}
+  \DeclareUnicodeCharacter{1E82}{\'W}
+  \DeclareUnicodeCharacter{1E83}{\'w}
+  \DeclareUnicodeCharacter{1E84}{\"W}
+  \DeclareUnicodeCharacter{1E85}{\"w}
+  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
+  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
+  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
+  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
+  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
+  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
+  \DeclareUnicodeCharacter{1E8C}{\"X}
+  \DeclareUnicodeCharacter{1E8D}{\"x}
+  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
+  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
+
+  \DeclareUnicodeCharacter{1E90}{\^Z}
+  \DeclareUnicodeCharacter{1E91}{\^z}
+  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
+  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
+  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
+  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
+  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
+  \DeclareUnicodeCharacter{1E97}{\"t}
+  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
+  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
+
+  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
+  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
+
+  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
+  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
+  \DeclareUnicodeCharacter{1EBC}{\~E}
+  \DeclareUnicodeCharacter{1EBD}{\~e}
+
+  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
+  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
+  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
+  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
+
+  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
+  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
+
+  \DeclareUnicodeCharacter{1EF2}{\`Y}
+  \DeclareUnicodeCharacter{1EF3}{\`y}
+  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
+
+  \DeclareUnicodeCharacter{1EF8}{\~Y}
+  \DeclareUnicodeCharacter{1EF9}{\~y}
+
+  \DeclareUnicodeCharacter{2013}{--}
+  \DeclareUnicodeCharacter{2014}{---}
+  \DeclareUnicodeCharacter{2018}{\quoteleft}
+  \DeclareUnicodeCharacter{2019}{\quoteright}
+  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
+  \DeclareUnicodeCharacter{201C}{\quotedblleft}
+  \DeclareUnicodeCharacter{201D}{\quotedblright}
+  \DeclareUnicodeCharacter{201E}{\quotedblbase}
+  \DeclareUnicodeCharacter{2022}{\bullet}
+  \DeclareUnicodeCharacter{2026}{\dots}
+  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
+  \DeclareUnicodeCharacter{203A}{\guilsinglright}
+  \DeclareUnicodeCharacter{20AC}{\euro}
+
+  \DeclareUnicodeCharacter{2192}{\expansion}
+  \DeclareUnicodeCharacter{21D2}{\result}
+
+  \DeclareUnicodeCharacter{2212}{\minus}
+  \DeclareUnicodeCharacter{2217}{\point}
+  \DeclareUnicodeCharacter{2261}{\equiv}
+}% end of \utfeightchardefs
+
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+   \relax
+}
+
+% Make non-ASCII characters printable again for compatibility with
+% existing Texinfo documents that may use them, even without declaring a
+% document encoding.
+%
+\setnonasciicharscatcode \other
+
+
+\message{formatting,}
+
 \newdimen\defaultparindent \defaultparindent = 15pt
 
 \chapheadingskip = 15pt plus 4pt minus 2pt
@@ -6837,10 +9670,10 @@
 % Prevent underfull vbox error messages.
 \vbadness = 10000
 
-% Don't be so finicky about underfull hboxes, either.
-\hbadness = 2000
+% Don't be very finicky about underfull hboxes, either.
+\hbadness = 6666
 
-% Following George Bush, just get rid of widows and orphans.
+% Following George Bush, get rid of widows and orphans.
 \widowpenalty=10000
 \clubpenalty=10000
 
@@ -6887,6 +9720,10 @@
   \ifpdf
     \pdfpageheight #7\relax
     \pdfpagewidth #8\relax
+    % if we don't reset these, they will remain at "1 true in" of
+    % whatever layout pdftex was dumped with.
+    \pdfhorigin = 1 true in
+    \pdfvorigin = 1 true in
   \fi
   %
   \setleading{\textleading}
@@ -6901,7 +9738,7 @@
   \textleading = 13.2pt
   %
   % If page is nothing but text, make it come out even.
-  \internalpagesizes{46\baselineskip}{6in}%
+  \internalpagesizes{607.2pt}{6in}% that's 46 lines
                     {\voffset}{.25in}%
                     {\bindingoffset}{36pt}%
                     {11in}{8.5in}%
@@ -6913,7 +9750,7 @@
   \textleading = 12pt
   %
   \internalpagesizes{7.5in}{5in}%
-                    {\voffset}{.25in}%
+                    {-.2in}{0in}%
                     {\bindingoffset}{16pt}%
                     {9.25in}{7in}%
   %
@@ -6957,7 +9794,7 @@
   % \global\normaloffset = -6mm
   % \global\bindingoffset = 10mm
   % @end tex
-  \internalpagesizes{51\baselineskip}{160mm}
+  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
                     {\voffset}{\hoffset}%
                     {\bindingoffset}{44pt}%
                     {297mm}{210mm}%
@@ -7022,7 +9859,7 @@
   \parskip = 3pt plus 2pt minus 1pt
   \setleading{\textleading}%
   %
-  \dimen0 = #1
+  \dimen0 = #1\relax
   \advance\dimen0 by \voffset
   %
   \dimen2 = \hsize
@@ -7041,25 +9878,21 @@
 
 \message{and turning on texinfo input format.}
 
+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
 % Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\catcode`\$=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-\def\normaldollar{$}%$ font-lock fix
+\catcode`\"=\other \def\normaldoublequote{"}
+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
+\catcode`\+=\other \def\normalplus{+}
+\catcode`\<=\other \def\normalless{<}
+\catcode`\>=\other \def\normalgreater{>}
+\catcode`\^=\other \def\normalcaret{^}
+\catcode`\_=\other \def\normalunderscore{_}
+\catcode`\|=\other \def\normalverticalbar{|}
+\catcode`\~=\other \def\normaltilde{~}
 
 % This macro is used to make a character print one way in \tt
 % (where it can probably be output as-is), and another way in other fonts,
@@ -7117,6 +9950,13 @@
 % \otherifyactive is called near the end of this file.
 \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
 
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+  \normalturnoffactive
+  \otherbackslash
+}
+
 \catcode`\@=0
 
 % \backslashcurfont outputs one backslash character in current font,
@@ -7124,45 +9964,52 @@
 \global\chardef\backslashcurfont=`\\
 \global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
 
-% \rawbackslash defines an active \ to do \backslashcurfont.
-% \otherbackslash defines an active \ to be a literal `\' character with
-% catcode other.
-{\catcode`\\=\active
- @gdef@rawbackslash{@let\=@backslashcurfont}
- @gdef@otherbackslash{@let\=@realbackslash}
-}
-
 % \realbackslash is an actual character `\' with catcode other, and
 % \doublebackslash is two of them (for the pdf outlines).
 {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
 
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\backslashcurfont}}
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active  % @ for escape char from now on.
 
-\catcode`\\=\active
+% The story here is that in math mode, the \char of \backslashcurfont
+% ends up printing the roman \ from the math symbol font (because \char
+% in math mode uses the \mathcode, and plain.tex sets
+% \mathcode`\\="026E).  It seems better for @backslashchar{} to always
+% print a typewriter backslash, hence we use an explicit \mathchar,
+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
+% ignored family value; char position "5C).  We can't use " for the
+% usual hex value because it has already been made active.
+@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
+@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents.
 
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{%
+% On startup, @fixbackslash assigns:
+%  @let \ = @normalbackslash
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.  We switch back and forth between these.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+@def@normalturnoffactive{%
   @let"=@normaldoublequote
-  @let\=@realbackslash
-  @let~=@normaltilde
+  @let$=@normaldollar %$ font-lock fix
+  @let+=@normalplus
+  @let<=@normalless
+  @let>=@normalgreater
+  @let\=@normalbackslash
   @let^=@normalcaret
   @let_=@normalunderscore
   @let|=@normalverticalbar
-  @let<=@normalless
-  @let>=@normalgreater
-  @let+=@normalplus
-  @let$=@normaldollar %$ font-lock fix
+  @let~=@normaltilde
+  @markupsetuplqdefault
+  @markupsetuprqdefault
   @unsepspaces
 }
 
-% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-% the literal character `\'.  (Thus, \ is not expandable when this is in
-% effect.)
-%
-@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
-
 % Make _ and + \other characters, temporarily.
 % This is canceled by @fixbackslash.
 @otherifyactive
@@ -7175,7 +10022,7 @@
 @global@let\ = @eatinput
 
 % On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
+% the first `\' in the file would cause an error. This macro tries to fix
 % that, assuming it is called before the first `\' could plausibly occur.
 % Also turn back on active characters that might appear in the input
 % file name, in case not using a pre-dumped format.
@@ -7189,11 +10036,28 @@
 % Say @foo, not \foo, in error messages.
 @escapechar = `@@
 
-% These look ok in all fonts, so just make them not special.
-@catcode`@& = @other
-@catcode`@# = @other
-@catcode`@% = @other
+% These (along with & and #) are made active for url-breaking, so need
+% active definitions as the normal characters.
+@def@normaldot{.}
+@def@normalquest{?}
+@def@normalslash{/}
 
+% These look ok in all fonts, so just make them not special.
+% @hashchar{} gets its own user-level command, because of #line.
+@catcode`@& = @other @def@normalamp{&}
+@catcode`@# = @other @def@normalhash{#}
+@catcode`@% = @other @def@normalpercent{%}
+
+@let @hashchar = @normalhash
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+@markupsetuplqdefault
+@markupsetuprqdefault
 
 @c Local variables:
 @c eval: (add-hook 'write-file-hooks 'time-stamp)
diff --git a/build-aux/update-b4-copyright b/build-aux/update-b4-copyright
new file mode 100755
index 0000000..c0f5a13
--- /dev/null
+++ b/build-aux/update-b4-copyright
@@ -0,0 +1,152 @@
+#!/usr/bin/perl -0777 -pi
+
+# Update b4_copyright invocations or b4_copyright_years definitions to
+# include the current year.
+
+# Copyright (C) 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+my $margin = 72;
+
+my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
+if (!$this_year || $this_year !~ m/^\d{4}$/)
+  {
+    my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
+    $this_year = $year + 1900;
+  }
+my $old_re = <<'EOF'
+  (
+    (?:^|\n)
+    #BEFORE
+    (?:
+      b4_copyright\(\[[^][]*]
+      | m4_(?:push|pop)def\(\[b4_copyright_years]
+    )
+    #AFTER
+  )
+  (?:
+    ,\s*
+    (
+      \[\s* (?:\d{4}(?:,\s*|-))* (\d{4}) \s*]
+    )
+  )?
+  \)
+EOF
+  ;
+
+while (/($old_re)/gx)
+  {
+    my $start = pos() - length ($1);
+    my $b4_copyright_line = $2;
+    my $year_lines = $3;
+    my $final_year = $4;
+    $year_lines .= ')';
+
+    # If there was a second argument, it contains years, so update them.
+    if ($final_year)
+      {
+        $b4_copyright_line .= ',';
+        if ($final_year != $this_year)
+          {
+            # Update the year.
+            $year_lines =~ s/$final_year/$final_year, $this_year/;
+          }
+
+        # Normalize all whitespace.
+        $year_lines =~ s/\s+/ /g;
+
+        # Put spaces after commas.
+        $year_lines =~ s/, ?/, /g;
+
+        # Compress to intervals.
+        $year_lines =~
+          s/
+            (\d{4})
+            (?:
+              (,\ |-)
+              ((??{
+                if    ($2 eq '-') { '\d{4}'; }
+                elsif (!$3)       { $1 + 1;  }
+                else              { $3 + 1;  }
+              }))
+            )+
+          /$1-$3/gx;
+
+        # Format within margin.
+        my $year_lines_new;
+        my $indent = index ($b4_copyright_line, '[');
+        --$indent if ($b4_copyright_line =~ m/^\n/);
+        while (length $year_lines)
+          {
+            my $text_margin = $margin - $indent;
+            if (($year_lines =~ s/^(.{1,$text_margin})(?: |$)//)
+                || ($year_lines =~ s/^([\S]+)(?: |$)//))
+              {
+                my $line = "\n" . (' 'x$indent) . $1;
+                ++$indent if (!$year_lines_new);
+                $year_lines_new .= $line;
+              }
+            else
+              {
+                # Should be unreachable, but we don't want an infinite
+                # loop if it can be reached.
+                die;
+              }
+          }
+
+        # Replace the old invocation.  Should never die.
+        die if (!s/$old_re\G/$b4_copyright_line$year_lines_new/x);
+
+        # Prepare for the next search.
+        pos () = $start + length ("$b4_copyright_line$year_lines_new");
+      }
+  }
+
+while (/(\bb4_copyright\()/g)
+  {
+    my $start = pos () - length ($1);
+    my $end = pos ();
+    my $re = $old_re;
+    pos () = $start;
+    $re =~ s/\#BEFORE/\\G/;
+    if (!/$re/x)
+      {
+        my $line = (substr ($_, 0, $start) =~ s/\n/\n/g) + 1;
+        print STDERR
+          "$ARGV:$line: warning: failed to update a b4_copyright\n";
+      }
+    pos () = $end;
+  }
+
+while (/(\[b4_copyright_years])/g)
+  {
+    my $start = pos () - length ($1);
+    my $end = pos ();
+    my $re = $old_re;
+    $re =~ s/\#AFTER/\\G/;
+    if (!/$re/x)
+      {
+        # The substr operation blows away pos (), so restoring pos ()
+        # at the end is necessary.
+        my $line = (substr ($_, 0, $start) =~ s/\n/\n/g) + 1;
+        print STDERR
+          "$ARGV:$line: warning: failed to update a"
+          . " b4_copyright_years\n";
+      }
+    pos () = $end;
+  }
diff --git a/build-aux/update-copyright b/build-aux/update-copyright
new file mode 100755
index 0000000..082b749
--- /dev/null
+++ b/build-aux/update-copyright
@@ -0,0 +1,274 @@
+eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}'
+  & eval 'exec perl -wS -0777 -pi "$0" $argv:q'
+    if 0;
+# Update an FSF copyright year list to include the current year.
+
+my $VERSION = '2012-02-05.21:39'; # UTC
+
+# Copyright (C) 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering and Joel E. Denny
+
+# The arguments to this script should be names of files that contain
+# copyright statements to be updated.  The copyright holder's name
+# defaults to "Free Software Foundation, Inc." but may be changed to
+# any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment
+# variable.
+#
+# For example, you might wish to use the update-copyright target rule
+# in maint.mk from gnulib's maintainer-makefile module.
+#
+# Iff a copyright statement is recognized in a file and the final
+# year is not the current year, then the statement is updated for the
+# new year and it is reformatted to:
+#
+#   1. Fit within 72 columns.
+#   2. Convert 2-digit years to 4-digit years by prepending "19".
+#   3. Expand copyright year intervals.  (See "Environment variables"
+#      below.)
+#
+# A warning is printed for every file for which no copyright
+# statement is recognized.
+#
+# Each file's copyright statement must be formatted correctly in
+# order to be recognized.  For example, each of these is fine:
+#
+#   Copyright @copyright{} 1990-2005, 2007-2009 Free Software
+#   Foundation, Inc.
+#
+#   # Copyright (C) 1990-2005, 2007-2009 Free Software
+#   # Foundation, Inc.
+#
+#   /*
+#    * Copyright &copy; 90,2005,2007-2009
+#    * Free Software Foundation, Inc.
+#    */
+#
+# However, the following format is not recognized because the line
+# prefix changes after the first line:
+#
+#   ## Copyright (C) 1990-2005, 2007-2009 Free Software
+#   #  Foundation, Inc.
+#
+# However, any correctly formatted copyright statement following
+# a non-matching copyright statements would be recognized.
+#
+# The exact conditions that a file's copyright statement must meet
+# to be recognized are:
+#
+#   1. It is the first copyright statement that meets all of the
+#      following conditions.  Subsequent copyright statements are
+#      ignored.
+#   2. Its format is "Copyright (C)", then a list of copyright years,
+#      and then the name of the copyright holder.
+#   3. The "(C)" takes one of the following forms or is omitted
+#      entirely:
+#
+#        A. (C)
+#        B. (c)
+#        C. @copyright{}
+#        D. &copy;
+#
+#   4. The "Copyright" appears at the beginning of a line, except that it
+#      may be prefixed by any sequence (e.g., a comment) of no more than
+#      5 characters -- including white space.
+#   5. Iff such a prefix is present, the same prefix appears at the
+#      beginning of each remaining line within the FSF copyright
+#      statement.  There is one exception in order to support C-style
+#      comments: if the first line's prefix contains nothing but
+#      whitespace surrounding a "/*", then the prefix for all subsequent
+#      lines is the same as the first line's prefix except with each of
+#      "/" and possibly "*" replaced by a " ".  The replacement of "*"
+#      by " " is consistent throughout all subsequent lines.
+#   6. Blank lines, even if preceded by the prefix, do not appear
+#      within the FSF copyright statement.
+#   7. Each copyright year is 2 or 4 digits, and years are separated by
+#      commas or dashes.  Whitespace may appear after commas.
+#
+# Environment variables:
+#
+#   1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement
+#      is reformatted even if it does not need updating for the new
+#      year.  If unset or set to 0, only updated FSF copyright
+#      statements are reformatted.
+#   2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
+#      copyright years (such as 90, 1991, 1992-2007, 2008) in a
+#      reformatted FSF copyright statement is collapsed to a single
+#      interval (such as 1990-2008).  If unset or set to 0, all existing
+#      copyright year intervals in a reformatted FSF copyright statement
+#      are expanded instead.
+#      If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps
+#      to the minimal containing range.  For example, convert
+#      2000, 2004-2007, 2009 to 2000-2009.
+#   3. For testing purposes, you can set the assumed current year in
+#      UPDATE_COPYRIGHT_YEAR.
+#   4. The default maximum line length for a copyright line is 72.
+#      Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length.
+#   5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other
+#      than "Free Software Foundation, Inc.".
+
+use strict;
+use warnings;
+
+my $copyright_re = 'Copyright';
+my $circle_c_re = '(?:\([cC]\)|@copyright{}|&copy;)';
+my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
+$holder ||= 'Free Software Foundation, Inc.';
+my $prefix_max = 5;
+my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH};
+!$margin || $margin !~ m/^\d+$/
+  and $margin = 72;
+
+my $tab_width = 8;
+
+my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
+if (!$this_year || $this_year !~ m/^\d{4}$/)
+  {
+    my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
+    $this_year = $year + 1900;
+  }
+
+# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
+my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";
+
+my $leading;
+my $prefix;
+my $ws_re;
+my $stmt_re;
+while (/(^|\n)(.{0,$prefix_max})$copyright_re/g)
+  {
+    $leading = "$1$2";
+    $prefix = $2;
+    if ($prefix =~ /^(\s*\/)\*(\s*)$/)
+      {
+        $prefix =~ s,/, ,;
+        my $prefix_ws = $prefix;
+        $prefix_ws =~ s/\*/ /; # Only whitespace.
+        if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
+          {
+            $prefix = $prefix_ws;
+          }
+      }
+    $ws_re = '[ \t\r\f]'; # \s without \n
+    $ws_re =
+      "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
+    my $holder_re = $holder;
+    $holder_re =~ s/\s/$ws_re/g;
+    my $stmt_remainder_re =
+      "(?:$ws_re$circle_c_re)?"
+      . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*"
+      . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
+    if (/\G$stmt_remainder_re/)
+      {
+        $stmt_re =
+          quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
+        last;
+      }
+  }
+if (defined $stmt_re)
+  {
+    /$stmt_re/ or die; # Should never die.
+    my $stmt = $1;
+    my $final_year_orig = $2;
+
+    # Handle two-digit year numbers like "98" and "99".
+    my $final_year = $final_year_orig;
+    $final_year <= 99
+      and $final_year += 1900;
+
+    if ($final_year != $this_year)
+      {
+        # Update the year.
+        $stmt =~ s/$final_year_orig/$final_year, $this_year/;
+      }
+    if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
+      {
+        # Normalize all whitespace including newline-prefix sequences.
+        $stmt =~ s/$ws_re/ /g;
+
+        # Put spaces after commas.
+        $stmt =~ s/, ?/, /g;
+
+        # Convert 2-digit to 4-digit years.
+        $stmt =~ s/(\b\d\d\b)/19$1/g;
+
+        # Make the use of intervals consistent.
+        if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
+          {
+            $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg;
+          }
+        else
+          {
+            $stmt =~
+              s/
+                (\d{4})
+                (?:
+                  (,\ |-)
+                  ((??{
+                    if    ($2 eq '-') { '\d{4}'; }
+                    elsif (!$3)       { $1 + 1;  }
+                    else              { $3 + 1;  }
+                  }))
+                )+
+              /$1-$3/gx;
+
+            # When it's 2, emit a single range encompassing all year numbers.
+            $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2
+              and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1-$2/;
+          }
+
+        # Format within margin.
+        my $stmt_wrapped;
+        my $text_margin = $margin - length($prefix);
+        if ($prefix =~ /^(\t+)/)
+          {
+            $text_margin -= length($1) * ($tab_width - 1);
+          }
+        while (length $stmt)
+          {
+            if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
+                || ($stmt =~ s/^([\S]+)(?: |$)//))
+              {
+                my $line = $1;
+                $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
+                $stmt_wrapped .= $line;
+              }
+            else
+              {
+                # Should be unreachable, but we don't want an infinite
+                # loop if it can be reached.
+                die;
+              }
+          }
+
+        # Replace the old copyright statement.
+        s/$stmt_re/$stmt_wrapped/;
+      }
+  }
+else
+  {
+    print STDERR "$ARGV: warning: copyright statement not found\n";
+  }
+
+# Local variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free
new file mode 100755
index 0000000..2b64630
--- /dev/null
+++ b/build-aux/useless-if-before-free
@@ -0,0 +1,207 @@
+eval '(exit $?0)' && eval 'exec perl -wST "$0" ${1+"$@"}'
+  & eval 'exec perl -wST "$0" $argv:q'
+    if 0;
+# Detect instances of "if (p) free (p);".
+# Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces.
+
+my $VERSION = '2012-01-06 07:23'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+use warnings;
+use Getopt::Long;
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+  defined fileno STDOUT or return;
+  close STDOUT and return;
+  warn "$ME: failed to close standard output: $!\n";
+  $? ||= 1;
+}
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try '$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS] FILE...
+
+Detect any instance in FILE of a useless "if" test before a free call, e.g.,
+"if (p) free (p);".  Any such test may be safely removed without affecting
+the semantics of the C code in FILE.  Use --name=FOO --name=BAR to also
+detect free-like functions named FOO and BAR.
+
+OPTIONS:
+
+   --list       print only the name of each matching FILE (\\0-terminated)
+   --name=N     add name N to the list of \'free\'-like functions to detect;
+                  may be repeated
+
+   --help       display this help and exit
+   --version    output version information and exit
+
+Exit status:
+
+  0   one or more matches
+  1   no match
+  2   an error
+
+EXAMPLE:
+
+For example, this command prints all removable "if" tests before "free"
+and "kfree" calls in the linux kernel sources:
+
+    git ls-files -z |xargs -0 $ME --name=kfree
+
+EOF
+    }
+  exit $exit_code;
+}
+
+sub is_NULL ($)
+{
+  my ($expr) = @_;
+  return ($expr eq 'NULL' || $expr eq '0');
+}
+
+{
+  sub EXIT_MATCH {0}
+  sub EXIT_NO_MATCH {1}
+  sub EXIT_ERROR {2}
+  my $err = EXIT_NO_MATCH;
+
+  my $list;
+  my @name = qw(free);
+  GetOptions
+    (
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+     list => \$list,
+     'name=s@' => \@name,
+    ) or usage 1;
+
+  # Make sure we have the right number of non-option arguments.
+  # Always tell the user why we fail.
+  @ARGV < 1
+    and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR;
+
+  my $or = join '|', @name;
+  my $regexp = qr/(?:$or)/;
+
+  # Set the input record separator.
+  # Note: this makes it impractical to print line numbers.
+  $/ = '"';
+
+  my $found_match = 0;
+ FILE:
+  foreach my $file (@ARGV)
+    {
+      open FH, '<', $file
+        or (warn "$ME: can't open '$file' for reading: $!\n"),
+          $err = EXIT_ERROR, next;
+      while (defined (my $line = <FH>))
+        {
+          while ($line =~
+              /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\)
+              #  1          2                  3
+               (?:   \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;|
+                \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg)
+            {
+              my $all = $1;
+              my ($lhs, $rhs) = ($2, $3);
+              my ($free_opnd, $braced_free_opnd) = ($4, $5);
+              my $non_NULL;
+              if (!defined $rhs) { $non_NULL = $lhs }
+              elsif (is_NULL $rhs) { $non_NULL = $lhs }
+              elsif (is_NULL $lhs) { $non_NULL = $rhs }
+              else { next }
+
+              # Compare the non-NULL part of the "if" expression and the
+              # free'd expression, without regard to white space.
+              $non_NULL =~ tr/ \t//d;
+              my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd;
+              $e2 =~ tr/ \t//d;
+              if ($non_NULL eq $e2)
+                {
+                  $found_match = 1;
+                  $list
+                    and (print "$file\0"), next FILE;
+                  print "$file: $all\n";
+                }
+            }
+        }
+    }
+  continue
+    {
+      close FH;
+    }
+
+  $found_match && $err == EXIT_NO_MATCH
+    and $err = EXIT_MATCH;
+
+  exit $err;
+}
+
+my $foo = <<'EOF';
+# The above is to *find* them.
+# This adjusts them, removing the unnecessary "if (p)" part.
+
+# FIXME: do something like this as an option (doesn't do braces):
+free=xfree
+git grep -l -z "$free *(" \
+  | xargs -0 useless-if-before-free -l --name="$free" \
+  | xargs -0 perl -0x3b -pi -e \
+   's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s'
+
+# Use the following to remove redundant uses of kfree inside braces.
+# Note that -0777 puts perl in slurp-whole-file mode;
+# but we have plenty of memory, these days...
+free=kfree
+git grep -l -z "$free *(" \
+  | xargs -0 useless-if-before-free -l --name="$free" \
+  | xargs -0 perl -0777 -pi -e \
+     's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms'
+
+Be careful that the result of the above transformation is valid.
+If the matched string is followed by "else", then obviously, it won't be.
+
+When modifying files, refuse to process anything other than a regular file.
+EOF
+
+## Local Variables:
+## mode: perl
+## indent-tabs-mode: nil
+## eval: (add-hook 'write-file-hooks 'time-stamp)
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/vc-list-files b/build-aux/vc-list-files
new file mode 100755
index 0000000..d477da8
--- /dev/null
+++ b/build-aux/vc-list-files
@@ -0,0 +1,113 @@
+#!/bin/sh
+# List version-controlled file names.
+
+# Print a version string.
+scriptversion=2011-05-16.22; # UTC
+
+# Copyright (C) 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+
+# List the specified version-controlled files.
+# With no argument, list them all.  With a single DIRECTORY argument,
+# list the version-controlled files in that directory.
+
+# If there's an argument, it must be a single, "."-relative directory name.
+# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/
+
+postprocess=
+case $1 in
+  --help) cat <<EOF
+Usage: $0 [-C SRCDIR] [DIR...]
+
+Output a list of version-controlled files in DIR (default .), relative to
+SRCDIR (default .).  SRCDIR must be the top directory of a checkout.
+
+Options:
+  --help     print this help, then exit
+  --version  print version number, then exit
+  -C SRCDIR  change directory to SRCDIR before generating list
+
+Report bugs and patches to <bug-gnulib@gnu.org>.
+EOF
+    exit ;;
+
+  --version)
+    year=`echo "$scriptversion" | sed 's/[^0-9].*//'`
+    cat <<EOF
+vc-list-files $scriptversion
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+    exit ;;
+
+  -C)
+    test "$2" = . || postprocess="| sed 's|^|$2/|'"
+    cd "$2" || exit 1
+    shift; shift ;;
+esac
+
+test $# = 0 && set .
+
+for dir
+do
+  if test -d .git; then
+    test "x$dir" = x. \
+      && dir= sed_esc= \
+      || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; }
+    # Ignore git symlinks - either they point into the tree, in which case
+    # we don't need to visit the target twice, or they point somewhere
+    # else (often into a submodule), in which case the content does not
+    # belong to this package.
+    eval exec git ls-tree -r 'HEAD:"$dir"' \
+      \| sed -n '"s/^100[^	]*./$sed_esc/p"' $postprocess
+  elif test -d .hg; then
+    eval exec hg locate '"$dir/*"' $postprocess
+  elif test -d .bzr; then
+    test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
+    eval exec bzr ls -R --versioned '"$dir"' $postprocess
+  elif test -d CVS; then
+    test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
+    if test -x build-aux/cvsu; then
+      eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess
+    elif (cvsu --help) >/dev/null 2>&1; then
+      eval cvsu --find --types=AFGM '"$dir"' $postprocess
+    else
+      eval awk -F/ \''{			\
+          if (!$1 && $3 !~ /^-/) {	\
+            f=FILENAME;			\
+            if (f ~ /CVS\/Entries$/)	\
+              f = substr(f, 1, length(f)-11); \
+            print f $2;			\
+          }}'\''				\
+        `find "$dir" -name Entries -print` /dev/null' $postprocess
+    fi
+  elif test -d .svn; then
+    eval exec svn list -R '"$dir"' $postprocess
+  else
+    echo "$0: Failed to determine type of version control used in `pwd`" 1>&2
+    exit 1
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/ylwrap b/build-aux/ylwrap
index 102bd89..9db6e2c 100755
--- a/build-aux/ylwrap
+++ b/build-aux/ylwrap
@@ -1,10 +1,10 @@
 #! /bin/sh
 # ylwrap - wrapper for lex/yacc invocations.
 
-scriptversion=2005-05-14.22
+scriptversion=2012-10-08.07; # UTC
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005
-#   Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
+# 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
@@ -19,9 +19,7 @@
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -101,14 +99,18 @@
 # FIXME: add hostname here for parallel makes that run commands on
 # other machines.  But that might take us over the 14-char limit.
 dirname=ylwrap$$
-trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
+do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
 mkdir $dirname || exit 1
 
 cd $dirname
 
 case $# in
-  0) $prog "$input" ;;
-  *) $prog "$@" "$input" ;;
+  0) "$prog" "$input" ;;
+  *) "$prog" "$@" "$input" ;;
 esac
 ret=$?
 
@@ -135,19 +137,19 @@
     # Handle y_tab.c and y_tab.h output by DOS
     if test $y_tab_nodot = "yes"; then
       if test $from = "y.tab.c"; then
-    	from="y_tab.c"
+        from="y_tab.c"
       else
-    	if test $from = "y.tab.h"; then
-    	  from="y_tab.h"
-    	fi
+        if test $from = "y.tab.h"; then
+          from="y_tab.h"
+        fi
       fi
     fi
     if test -f "$from"; then
       # If $2 is an absolute path name, then just use that,
       # otherwise prepend `../'.
       case "$2" in
-    	[\\/]* | ?:[\\/]*) target="$2";;
-    	*) target="../$2";;
+        [\\/]* | ?:[\\/]*) target="$2";;
+        *) target="../$2";;
       esac
 
       # We do not want to overwrite a header file if it hasn't
@@ -157,8 +159,8 @@
       # Makefile.  Divert the output of all other files to a temporary
       # file so we can compare them to existing versions.
       if test $first = no; then
-	realtarget="$target"
-	target="tmp-`echo $target | sed s/.*[\\/]//g`"
+        realtarget="$target"
+        target="tmp-`echo $target | sed s/.*[\\/]//g`"
       fi
       # Edit out `#line' or `#' directives.
       #
@@ -182,10 +184,10 @@
 
       # Check whether header files must be updated.
       if test $first = no; then
-	if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
-	  echo "$2" is unchanged
-	  rm -f "$target"
-	else
+        if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+          echo "$2" is unchanged
+          rm -f "$target"
+        else
           echo updating "$2"
           mv -f "$target" "$realtarget"
         fi
@@ -219,5 +221,6 @@
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/cfg.mk b/cfg.mk
new file mode 100644
index 0000000..e77312e
--- /dev/null
+++ b/cfg.mk
@@ -0,0 +1,93 @@
+# Customize maint.mk                           -*- makefile -*-
+# Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# Update version, then recompile so that tests/bison --version be
+# up-to-date, then compile our parser again with our up-to-date bison.
+.PHONY: regen
+regen: _version
+	$(MAKE) $(AM_MAKEFLAGS)
+	touch $(srcdir)/src/parse-gram.y
+	$(MAKE) $(AM_MAKEFLAGS)
+
+# Used in maint.mk's web-manual rule
+manual_title = The Yacc-compatible Parser Generator
+gendocs_options_ = -I $(abs_top_srcdir)/doc -I $(abs_top_builddir)/doc
+
+# It's useful to run maintainer-*check* targets during development, but we
+# don't want to wait on a recompile because of an update to $(VERSION).  Thus,
+# override the _is-dist-target from GNUmakefile so that maintainer-*check*
+# targets are filtered out.
+_is-dist-target = $(filter-out %clean maintainer-check% maintainer-%-check, \
+  $(filter maintainer-% dist% alpha beta major,$(MAKECMDGOALS)))
+
+url_dir_list = \
+  ftp://$(gnu_rel_host)/gnu/bison
+
+# Tests not to run as part of "make distcheck".
+# Exclude changelog-check here so that there's less churn in ChangeLog
+# files -- otherwise, you'd need to have the upcoming version number
+# at the top of the file for each `make distcheck' run.
+local-checks-to-skip = \
+  changelog-check \
+  sc_immutable_NEWS			\
+  sc_prohibit_always_true_header_tests	\
+  sc_prohibit_atoi_atof			\
+  sc_prohibit_strcmp
+
+# The local directory containing the checked-out copy of gnulib used in
+# this release.  Used solely to get a date for the "announcement" target.
+gnulib_dir = $(srcdir)/gnulib
+
+bootstrap-tools = autoconf,automake,flex,gettext,gnulib
+
+announcement_Cc_ = \
+  bug-bison@gnu.org, help-bison@gnu.org, bison-patches@gnu.org, \
+  coordinator@translationproject.org
+
+update-copyright: update-b4-copyright update-package-copyright-year
+update-copyright-env = \
+  UPDATE_COPYRIGHT_FORCE=1 UPDATE_COPYRIGHT_USE_INTERVALS=1
+
+# At least for Mac OS X's grep, the order between . and [ in "[^.[]"
+# matters:
+# $ LC_ALL=fr_FR grep -nE '[^[.]' /dev/null
+# $ LC_ALL=C grep -nE '[^[.]' /dev/null
+# grep: invalid collating element or class
+# $ LC_ALL=fr_FR grep -nE '[^.[]' /dev/null
+# $ LC_ALL=C grep -nE '[^.[]' /dev/null
+sc_at_parser_check:
+	@prohibit='AT_PARSER_CHECK\(\[+[^.[]|AT_CHECK\(\[+\./'		\
+	halt='use AT_PARSER_CHECK for and only for generated parsers'	\
+	  $(_sc_search_regexp)
+
+exclude = \
+  $(foreach a,$(1),$(eval $(subst $$,$$$$,exclude_file_name_regexp--sc_$(a))))
+$(call exclude,								\
+  bindtextdomain=^lib/main.c$$						\
+  program_name=^lib/main.c$$						\
+  prohibit_always-defined_macros=^data/yacc.c$$|^djgpp/			\
+  prohibit_always-defined_macros+=?|^lib/timevar.c$$			\
+  prohibit_always-defined_macros+=?|^src/(parse-gram.c|system.h)$$	\
+  prohibit_always-defined_macros+=?|^tests/regression.at$$		\
+  prohibit_defined_have_decl_tests=?|^lib/timevar.c$$			\
+  prohibit_doubled_word=^tests/named-refs.at$$                          \
+  prohibit_magic_number_exit=^doc/bison.texi$$				\
+  prohibit_magic_number_exit+=?|^tests/(conflicts|regression).at$$	\
+  require_config_h_first=^(lib/yyerror|data/(glr|yacc))\.c$$		\
+  space_tab=^tests/(input|c\+\+)\.at$$					\
+  trailing_blank=^src/parse-gram.[ch]$$					\
+  unmarked_diagnostics=^(djgpp/|doc/bison.texi$$|tests/c\+\+\.at$$)	\
+)
diff --git a/config.h b/config.h
deleted file mode 100644
index ebd4aeb..0000000
--- a/config.h
+++ /dev/null
@@ -1,414 +0,0 @@
-/* config.h.  Generated by configure.  */
-/* config.hin.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if translation of program messages to the user's native
-   language is requested. */
-#define ENABLE_NLS 1
-
-/* Define on systems for which file names may have a so-called `drive letter'
-   prefix, define this to compute the length of that prefix, including the
-   colon. */
-#define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
-
-/* Define if the backslash character may also serve as a file name component
-   separator. */
-#define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
-
-#if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
-# define FILE_SYSTEM_PREFIX_LEN(Filename) \
-  ((Filename)[0] && (Filename)[1] == ':' ? 2 : 0)
-#else
-# define FILE_SYSTEM_PREFIX_LEN(Filename) 0
-#endif
-
-/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
-   CoreFoundation framework. */
-/* #undef HAVE_CFLOCALECOPYCURRENT */
-
-/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
-   the CoreFoundation framework. */
-/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */
-
-/* Define to 1 if the system has the type `clock_t'. */
-#define HAVE_CLOCK_T 1
-
-/* Define if the GNU dcgettext() function is already present or preinstalled.
-   */
-#define HAVE_DCGETTEXT 1
-
-/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_CLEARERR_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `clock', and to 0 if you don't.
-   */
-#define HAVE_DECL_CLOCK 0
-
-/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
-   don't. */
-#define HAVE_DECL_FEOF_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_FERROR_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_FFLUSH_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_FGETS_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_FPUTC_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_FPUTS_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_FREAD_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_FWRITE_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_GETCHAR_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#define HAVE_DECL_GETC_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
-   */
-#define HAVE_DECL_GETENV 1
-
-/* Define to 1 if you have the declaration of `getrusage', and to 0 if you
-   don't. */
-#define HAVE_DECL_GETRUSAGE 1
-
-/* Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0
-   otherwise. */
-#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H 0
-
-/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
-   you don't. */
-#define HAVE_DECL_PUTCHAR_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
-   don't. */
-#define HAVE_DECL_PUTC_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
-   */
-#define HAVE_DECL_STRDUP 1
-
-/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
-   don't. */
-#define HAVE_DECL_STRERROR_R 1
-
-/* Define to 1 if you have the declaration of `strndup', and to 0 if you
-   don't. */
-#define HAVE_DECL_STRNDUP 1
-
-/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
-   don't. */
-#define HAVE_DECL_STRNLEN 1
-
-/* Define to 1 if you have the declaration of `sysconf', and to 0 if you
-   don't. */
-#define HAVE_DECL_SYSCONF 1
-
-/* Define to 1 if you have the declaration of `times', and to 0 if you don't.
-   */
-#define HAVE_DECL_TIMES 1
-
-/* Define to 1 if you have the declaration of wcwidth(), and to 0 otherwise.
-   */
-#define HAVE_DECL_WCWIDTH 1
-
-/* Define to 1 if you have the `dup2' function. */
-#define HAVE_DUP2 1
-
-/* Define to 1 if you have the `fork' function. */
-#define HAVE_FORK 1
-
-/* Define to 1 if you have the <getopt.h> header file. */
-#define HAVE_GETOPT_H 1
-
-/* Define to 1 if you have the `getopt_long_only' function. */
-#define HAVE_GETOPT_LONG_ONLY 1
-
-/* Define if the GNU gettext() function is already present or preinstalled. */
-#define HAVE_GETTEXT 1
-
-/* Define if you have the iconv() function. */
-/* #undef HAVE_ICONV */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
-   declares uintmax_t. */
-#define HAVE_INTTYPES_H_WITH_UINTMAX 1
-
-/* Define to 1 if you have the `isascii' function. */
-#define HAVE_ISASCII 1
-
-/* Define to 1 if you have the `iswcntrl' function. */
-#define HAVE_ISWCNTRL 1
-
-/* Define to 1 if you have the `iswprint' function. */
-#define HAVE_ISWPRINT 1
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
-   to 0 otherwise. */
-#define HAVE_MALLOC 1
-
-/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
-#define HAVE_MBRTOWC 1
-
-/* Define to 1 if you have the `mbsinit' function. */
-#define HAVE_MBSINIT 1
-
-/* Define to 1 if <wchar.h> declares mbstate_t. */
-#define HAVE_MBSTATE_T 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if libc includes obstacks. */
-#define HAVE_OBSTACK 1
-
-/* Define to 1 if you have the `setlocale' function. */
-#define HAVE_SETLOCALE 1
-
-/* Define to 1 if stdbool.h conforms to C99. */
-#define HAVE_STDBOOL_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
-   uintmax_t. */
-#define HAVE_STDINT_H_WITH_UINTMAX 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `stpcpy' function. */
-#define HAVE_STPCPY 1
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define to 1 if you have the `strerror_r' function. */
-#define HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define if you have the strndup() function and it works. */
-#define HAVE_STRNDUP 1
-
-/* Define to 1 if you have the `strtol' function. */
-#define HAVE_STRTOL 1
-
-/* Define to 1 if you have the `strtoul' function. */
-#define HAVE_STRTOUL 1
-
-/* Define to 1 if the system has the type `struct tms'. */
-#define HAVE_STRUCT_TMS 1
-
-/* Define to 1 if you have the `strverscmp' function. */
-#define HAVE_STRVERSCMP 1
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/times.h> header file. */
-#define HAVE_SYS_TIMES_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
-#define HAVE_SYS_WAIT_H 1
-
-/* Define to 1 if you have the `times' function. */
-#define HAVE_TIMES 1
-
-/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
-#define HAVE_UINTMAX_T 1
-
-/* Define to 1 if the system has the type `uintptr_t'. */
-#define HAVE_UINTPTR_T 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define if you have the 'unsigned long long' type. */
-#define HAVE_UNSIGNED_LONG_LONG 1
-
-/* Define to 1 if you have the `vfork' function. */
-#define HAVE_VFORK 1
-
-/* Define to 1 if you have the <vfork.h> header file. */
-/* #undef HAVE_VFORK_H */
-
-/* Define to 1 if you have the `waitpid' function. */
-#define HAVE_WAITPID 1
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#define HAVE_WCHAR_H 1
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#define HAVE_WCTYPE_H 1
-
-/* Define to 1 if you have the `wcwidth' function. */
-#define HAVE_WCWIDTH 1
-
-/* Define to 1 if `fork' works. */
-#define HAVE_WORKING_FORK 1
-
-/* Define to 1 if `vfork' works. */
-#define HAVE_WORKING_VFORK 1
-
-/* Define to 1 if the system has the type `_Bool'. */
-#define HAVE__BOOL 1
-
-#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#else
-# define ISSLASH(C) ((C) == '/')
-#endif
-
-/* Define to the GNU M4 executable name. */
-#define M4 "/usr/bin/m4"
-
-/* Name of package */
-#define PACKAGE "bison"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "GNU Bison"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GNU Bison 2.3"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "bison"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "2.3"
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to 1 if strerror_r returns char *. */
-#define STRERROR_R_CHAR_P 1
-
-/* Define to 1 if you want getc etc. to use unlocked I/O if available.
-   Unlocked I/O can improve performance in unithreaded apps, but it is not
-   safe for multithreaded apps. */
-#define USE_UNLOCKED_IO 1
-
-/* Version number of package */
-#define VERSION "2.3"
-
-/* Define if using the dmalloc debugging malloc package */
-/* #undef WITH_DMALLOC */
-
-/* Define to 1 to internationalize bison runtime messages. */
-#define YYENABLE_NLS 1
-
-/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
-   `char[]'. */
-#define YYTEXT_POINTER 1
-
-/* Define to 1 if on AIX 3.
-   System headers sometimes define this.
-   We just want to avoid a redefinition error message.  */
-#ifndef _ALL_SOURCE
-/* # undef _ALL_SOURCE */
-#endif
-
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-/* Define to 1 if on MINIX. */
-/* #undef _MINIX */
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-/* #undef _POSIX_1_SOURCE */
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-/* #undef _POSIX_SOURCE */
-
-/* Enable extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# define __EXTENSIONS__ 1
-#endif
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# define _POSIX_PTHREAD_SEMANTICS 1
-#endif
-
-/* Define to rpl_ if the getopt replacement functions and variables should be
-   used. */
-/* #undef __GETOPT_PREFIX */
-
-/* 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
-
-/* Define to 1 if the compiler is checking for lint. */
-/* #undef lint */
-
-/* Define to rpl_malloc if the replacement function should be used. */
-/* #undef malloc */
-
-/* Define to a type if <wchar.h> does not define. */
-/* #undef mbstate_t */
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef pid_t */
-
-/* Define to rpl_strndup if the replacement function should be used, */
-/* #undef strndup */
-
-/* Define to rpl_strnlen if the replacement function should be used. */
-/* #undef strnlen */
-
-/* Define to unsigned long or unsigned long long if <stdint.h> and
-   <inttypes.h> don't define. */
-/* #undef uintmax_t */
-
-/* Define as `fork' if `vfork' does not work. */
-/* #undef vfork */
diff --git a/config.hin b/config.hin
deleted file mode 100644
index ff0c48b..0000000
--- a/config.hin
+++ /dev/null
@@ -1,413 +0,0 @@
-/* config.hin.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if translation of program messages to the user's native
-   language is requested. */
-#undef ENABLE_NLS
-
-/* Define on systems for which file names may have a so-called `drive letter'
-   prefix, define this to compute the length of that prefix, including the
-   colon. */
-#undef FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
-
-/* Define if the backslash character may also serve as a file name component
-   separator. */
-#undef FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
-
-#if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
-# define FILE_SYSTEM_PREFIX_LEN(Filename) \
-  ((Filename)[0] && (Filename)[1] == ':' ? 2 : 0)
-#else
-# define FILE_SYSTEM_PREFIX_LEN(Filename) 0
-#endif
-
-/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
-   CoreFoundation framework. */
-#undef HAVE_CFLOCALECOPYCURRENT
-
-/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
-   the CoreFoundation framework. */
-#undef HAVE_CFPREFERENCESCOPYAPPVALUE
-
-/* Define to 1 if the system has the type `clock_t'. */
-#undef HAVE_CLOCK_T
-
-/* Define if the GNU dcgettext() function is already present or preinstalled.
-   */
-#undef HAVE_DCGETTEXT
-
-/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_CLEARERR_UNLOCKED
-
-/* Define to 1 if you have the declaration of `clock', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CLOCK
-
-/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_FEOF_UNLOCKED
-
-/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FERROR_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FFLUSH_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FGETS_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FPUTC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FPUTS_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FREAD_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FWRITE_UNLOCKED
-
-/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_GETCHAR_UNLOCKED
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
-   */
-#undef HAVE_DECL_GETENV
-
-/* Define to 1 if you have the declaration of `getrusage', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETRUSAGE
-
-/* Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0
-   otherwise. */
-#undef HAVE_DECL_MBSWIDTH_IN_WCHAR_H
-
-/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_PUTCHAR_UNLOCKED
-
-/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_PUTC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
-   */
-#undef HAVE_DECL_STRDUP
-
-/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRERROR_R
-
-/* Define to 1 if you have the declaration of `strndup', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRNDUP
-
-/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRNLEN
-
-/* Define to 1 if you have the declaration of `sysconf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SYSCONF
-
-/* Define to 1 if you have the declaration of `times', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TIMES
-
-/* Define to 1 if you have the declaration of wcwidth(), and to 0 otherwise.
-   */
-#undef HAVE_DECL_WCWIDTH
-
-/* Define to 1 if you have the `dup2' function. */
-#undef HAVE_DUP2
-
-/* Define to 1 if you have the `fork' function. */
-#undef HAVE_FORK
-
-/* Define to 1 if you have the <getopt.h> header file. */
-#undef HAVE_GETOPT_H
-
-/* Define to 1 if you have the `getopt_long_only' function. */
-#undef HAVE_GETOPT_LONG_ONLY
-
-/* Define if the GNU gettext() function is already present or preinstalled. */
-#undef HAVE_GETTEXT
-
-/* Define if you have the iconv() function. */
-#undef HAVE_ICONV
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
-   declares uintmax_t. */
-#undef HAVE_INTTYPES_H_WITH_UINTMAX
-
-/* Define to 1 if you have the `isascii' function. */
-#undef HAVE_ISASCII
-
-/* Define to 1 if you have the `iswcntrl' function. */
-#undef HAVE_ISWCNTRL
-
-/* Define to 1 if you have the `iswprint' function. */
-#undef HAVE_ISWPRINT
-
-/* Define to 1 if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
-   to 0 otherwise. */
-#undef HAVE_MALLOC
-
-/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
-#undef HAVE_MBRTOWC
-
-/* Define to 1 if you have the `mbsinit' function. */
-#undef HAVE_MBSINIT
-
-/* Define to 1 if <wchar.h> declares mbstate_t. */
-#undef HAVE_MBSTATE_T
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if libc includes obstacks. */
-#undef HAVE_OBSTACK
-
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
-/* Define to 1 if stdbool.h conforms to C99. */
-#undef HAVE_STDBOOL_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
-   uintmax_t. */
-#undef HAVE_STDINT_H_WITH_UINTMAX
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `stpcpy' function. */
-#undef HAVE_STPCPY
-
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the `strerror_r' function. */
-#undef HAVE_STRERROR_R
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define if you have the strndup() function and it works. */
-#undef HAVE_STRNDUP
-
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
-/* Define to 1 if the system has the type `struct tms'. */
-#undef HAVE_STRUCT_TMS
-
-/* Define to 1 if you have the `strverscmp' function. */
-#undef HAVE_STRVERSCMP
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#undef HAVE_SYS_RESOURCE_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/times.h> header file. */
-#undef HAVE_SYS_TIMES_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define to 1 if you have the `times' function. */
-#undef HAVE_TIMES
-
-/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
-#undef HAVE_UINTMAX_T
-
-/* Define to 1 if the system has the type `uintptr_t'. */
-#undef HAVE_UINTPTR_T
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the 'unsigned long long' type. */
-#undef HAVE_UNSIGNED_LONG_LONG
-
-/* Define to 1 if you have the `vfork' function. */
-#undef HAVE_VFORK
-
-/* Define to 1 if you have the <vfork.h> header file. */
-#undef HAVE_VFORK_H
-
-/* Define to 1 if you have the `waitpid' function. */
-#undef HAVE_WAITPID
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#undef HAVE_WCHAR_H
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#undef HAVE_WCTYPE_H
-
-/* Define to 1 if you have the `wcwidth' function. */
-#undef HAVE_WCWIDTH
-
-/* Define to 1 if `fork' works. */
-#undef HAVE_WORKING_FORK
-
-/* Define to 1 if `vfork' works. */
-#undef HAVE_WORKING_VFORK
-
-/* Define to 1 if the system has the type `_Bool'. */
-#undef HAVE__BOOL
-
-#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#else
-# define ISSLASH(C) ((C) == '/')
-#endif
-
-/* Define to the GNU M4 executable name. */
-#undef M4
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if strerror_r returns char *. */
-#undef STRERROR_R_CHAR_P
-
-/* Define to 1 if you want getc etc. to use unlocked I/O if available.
-   Unlocked I/O can improve performance in unithreaded apps, but it is not
-   safe for multithreaded apps. */
-#undef USE_UNLOCKED_IO
-
-/* Version number of package */
-#undef VERSION
-
-/* Define if using the dmalloc debugging malloc package */
-#undef WITH_DMALLOC
-
-/* Define to 1 to internationalize bison runtime messages. */
-#undef YYENABLE_NLS
-
-/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
-   `char[]'. */
-#undef YYTEXT_POINTER
-
-/* Define to 1 if on AIX 3.
-   System headers sometimes define this.
-   We just want to avoid a redefinition error message.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-#undef _POSIX_SOURCE
-
-/* Enable extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-
-/* Define to rpl_ if the getopt replacement functions and variables should be
-   used. */
-#undef __GETOPT_PREFIX
-
-/* 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
-
-/* Define to 1 if the compiler is checking for lint. */
-#undef lint
-
-/* Define to rpl_malloc if the replacement function should be used. */
-#undef malloc
-
-/* Define to a type if <wchar.h> does not define. */
-#undef mbstate_t
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef pid_t
-
-/* Define to rpl_strndup if the replacement function should be used, */
-#undef strndup
-
-/* Define to rpl_strnlen if the replacement function should be used. */
-#undef strnlen
-
-/* Define to unsigned long or unsigned long long if <stdint.h> and
-   <inttypes.h> don't define. */
-#undef uintmax_t
-
-/* Define as `fork' if `vfork' does not work. */
-#undef vfork
diff --git a/config.log b/config.log
deleted file mode 100644
index 3d02da7..0000000
--- a/config.log
+++ /dev/null
@@ -1,2439 +0,0 @@
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by GNU Bison configure 2.3, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  $ ./configure --prefix /home/phanna/src/bison
-
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = phanna.cnc.corp.google.com
-uname -m = x86_64
-uname -r = 2.6.18.5-gg34workstation-mixed64-32
-uname -s = Linux
-uname -v = #1 SMP Thu May 8 01:31:23 UTC 2008
-
-/usr/bin/uname -p = unknown
-/bin/uname -X     = unknown
-
-/bin/arch              = x86_64
-/usr/bin/arch -k       = unknown
-/usr/convex/getsysinfo = unknown
-hostinfo               = unknown
-/bin/machine           = unknown
-/usr/bin/oslevel       = unknown
-/bin/universe          = unknown
-
-PATH: /usr/local/symlinks
-PATH: /usr/local/scripts
-PATH: /usr/local/sbin
-PATH: /usr/local/bin
-PATH: /usr/sbin
-PATH: /usr/bin
-PATH: /sbin
-PATH: /bin
-PATH: /usr/bin/X11
-PATH: /home/phanna/jswat-4.2/bin
-PATH: /usr/local/google/workspace/WebKit/out/host/linux-x86/bin
-PATH: /usr/local/google/workspace/WebKit/prebuilt/Linux/toolchain/arm-elf
-PATH: /usr/local/google/workspace/WebKit/tools/qtools
-PATH: /usr/local/google/workspace/WebKit/prebuilt/Linux/toolchain-eabi-4.2.1/bin
-PATH: /usr/local/google/workspace/WebKit/prebuilt/Linux/toolchain-eabi-4.2.1/bin
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-configure:1402: checking for a BSD-compatible install
-configure:1457: result: /usr/bin/install -c
-configure:1468: checking whether build environment is sane
-configure:1511: result: yes
-configure:1576: checking for gawk
-configure:1592: found /usr/bin/gawk
-configure:1602: result: gawk
-configure:1612: checking whether make sets $(MAKE)
-configure:1632: result: yes
-configure:1821: checking for style of include used by make
-configure:1849: result: GNU
-configure:1920: checking for gcc
-configure:1936: found /usr/bin/gcc
-configure:1946: result: gcc
-configure:2190: checking for C compiler version
-configure:2193: gcc --version </dev/null >&5
-gcc (GCC) 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
-Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-configure:2196: $? = 0
-configure:2198: gcc -v </dev/null >&5
-Using built-in specs.
-Target: i486-linux-gnu
-Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --with-tune=pentium4 --enable-checking=release i486-linux-gnu
-Thread model: posix
-gcc version 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
-configure:2201: $? = 0
-configure:2203: gcc -V </dev/null >&5
-gcc: '-V' option must have argument
-configure:2206: $? = 1
-configure:2229: checking for C compiler default output file name
-configure:2232: gcc    conftest.c  >&5
-configure:2235: $? = 0
-configure:2281: result: a.out
-configure:2286: checking whether the C compiler works
-configure:2292: ./a.out
-configure:2295: $? = 0
-configure:2312: result: yes
-configure:2319: checking whether we are cross compiling
-configure:2321: result: no
-configure:2324: checking for suffix of executables
-configure:2326: gcc -o conftest    conftest.c  >&5
-configure:2329: $? = 0
-configure:2354: result: 
-configure:2360: checking for suffix of object files
-configure:2381: gcc -c   conftest.c >&5
-configure:2384: $? = 0
-configure:2406: result: o
-configure:2410: checking whether we are using the GNU C compiler
-configure:2434: gcc -c   conftest.c >&5
-configure:2440: $? = 0
-configure:2443: test -z 			 || test ! -s conftest.err
-configure:2446: $? = 0
-configure:2449: test -s conftest.o
-configure:2452: $? = 0
-configure:2465: result: yes
-configure:2471: checking whether gcc accepts -g
-configure:2492: gcc -c -g  conftest.c >&5
-configure:2498: $? = 0
-configure:2501: test -z 			 || test ! -s conftest.err
-configure:2504: $? = 0
-configure:2507: test -s conftest.o
-configure:2510: $? = 0
-configure:2521: result: yes
-configure:2538: checking for gcc option to accept ANSI C
-configure:2608: gcc  -c -g -O2  conftest.c >&5
-configure:2614: $? = 0
-configure:2617: test -z 			 || test ! -s conftest.err
-configure:2620: $? = 0
-configure:2623: test -s conftest.o
-configure:2626: $? = 0
-configure:2644: result: none needed
-configure:2662: gcc -c -g -O2  conftest.c >&5
-conftest.c:2: error: syntax error before 'me'
-configure:2668: $? = 1
-configure: failed program was:
-| #ifndef __cplusplus
-|   choke me
-| #endif
-configure:2800: checking dependency style of gcc
-configure:2890: result: gcc3
-configure:2913: checking how to run the C preprocessor
-configure:2948: gcc -E  conftest.c
-configure:2954: $? = 0
-configure:2986: gcc -E  conftest.c
-conftest.c:12:28: error: ac_nonexistent.h: No such file or directory
-configure:2992: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| /* end confdefs.h.  */
-| #include <ac_nonexistent.h>
-configure:3031: result: gcc -E
-configure:3055: gcc -E  conftest.c
-configure:3061: $? = 0
-configure:3093: gcc -E  conftest.c
-conftest.c:12:28: error: ac_nonexistent.h: No such file or directory
-configure:3099: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| /* end confdefs.h.  */
-| #include <ac_nonexistent.h>
-configure:3143: checking for egrep
-configure:3153: result: grep -E
-configure:3159: checking for AIX
-configure:3181: result: no
-configure:3187: checking for ANSI C header files
-configure:3212: gcc -c -g -O2  conftest.c >&5
-configure:3218: $? = 0
-configure:3221: test -z 			 || test ! -s conftest.err
-configure:3224: $? = 0
-configure:3227: test -s conftest.o
-configure:3230: $? = 0
-configure:3319: gcc -o conftest -g -O2   conftest.c  >&5
-conftest.c: In function 'main':
-conftest.c:29: warning: incompatible implicit declaration of built-in function 'exit'
-configure:3322: $? = 0
-configure:3324: ./conftest
-configure:3327: $? = 0
-configure:3342: result: yes
-configure:3366: checking for sys/types.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3366: checking for sys/stat.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3366: checking for stdlib.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3366: checking for string.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3366: checking for memory.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3366: checking for strings.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3366: checking for inttypes.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3366: checking for stdint.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3366: checking for unistd.h
-configure:3382: gcc -c -g -O2  conftest.c >&5
-configure:3388: $? = 0
-configure:3391: test -z 			 || test ! -s conftest.err
-configure:3394: $? = 0
-configure:3397: test -s conftest.o
-configure:3400: $? = 0
-configure:3411: result: yes
-configure:3433: checking minix/config.h usability
-configure:3445: gcc -c -g -O2  conftest.c >&5
-conftest.c:56:26: error: minix/config.h: No such file or directory
-configure:3451: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| /* end confdefs.h.  */
-| #include <stdio.h>
-| #if HAVE_SYS_TYPES_H
-| # include <sys/types.h>
-| #endif
-| #if HAVE_SYS_STAT_H
-| # include <sys/stat.h>
-| #endif
-| #if STDC_HEADERS
-| # include <stdlib.h>
-| # include <stddef.h>
-| #else
-| # if HAVE_STDLIB_H
-| #  include <stdlib.h>
-| # endif
-| #endif
-| #if HAVE_STRING_H
-| # if !STDC_HEADERS && HAVE_MEMORY_H
-| #  include <memory.h>
-| # endif
-| # include <string.h>
-| #endif
-| #if HAVE_STRINGS_H
-| # include <strings.h>
-| #endif
-| #if HAVE_INTTYPES_H
-| # include <inttypes.h>
-| #else
-| # if HAVE_STDINT_H
-| #  include <stdint.h>
-| # endif
-| #endif
-| #if HAVE_UNISTD_H
-| # include <unistd.h>
-| #endif
-| #include <minix/config.h>
-configure:3473: result: no
-configure:3477: checking minix/config.h presence
-configure:3487: gcc -E  conftest.c
-conftest.c:22:26: error: minix/config.h: No such file or directory
-configure:3493: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| /* end confdefs.h.  */
-| #include <minix/config.h>
-configure:3513: result: no
-configure:3548: checking for minix/config.h
-configure:3555: result: no
-configure:3594: checking whether it is safe to define __EXTENSIONS__
-configure:3617: gcc -c -g -O2  conftest.c >&5
-configure:3623: $? = 0
-configure:3626: test -z 			 || test ! -s conftest.err
-configure:3629: $? = 0
-configure:3632: test -s conftest.o
-configure:3635: $? = 0
-configure:3646: result: yes
-configure:3706: checking for gcc
-configure:3732: result: gcc
-configure:3976: checking for C compiler version
-configure:3979: gcc --version </dev/null >&5
-gcc (GCC) 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
-Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-configure:3982: $? = 0
-configure:3984: gcc -v </dev/null >&5
-Using built-in specs.
-Target: i486-linux-gnu
-Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --with-tune=pentium4 --enable-checking=release i486-linux-gnu
-Thread model: posix
-gcc version 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
-configure:3987: $? = 0
-configure:3989: gcc -V </dev/null >&5
-gcc: '-V' option must have argument
-configure:3992: $? = 1
-configure:3995: checking whether we are using the GNU C compiler
-configure:4050: result: yes
-configure:4056: checking whether gcc accepts -g
-configure:4106: result: yes
-configure:4123: checking for gcc option to accept ANSI C
-configure:4229: result: none needed
-configure:4247: gcc -c -g -O2  conftest.c >&5
-conftest.c:2: error: syntax error before 'me'
-configure:4253: $? = 1
-configure: failed program was:
-| #ifndef __cplusplus
-|   choke me
-| #endif
-configure:4385: checking dependency style of gcc
-configure:4475: result: gcc3
-configure:4538: checking for gcc
-configure:4564: result: gcc
-configure:4808: checking for C compiler version
-configure:4811: gcc --version </dev/null >&5
-gcc (GCC) 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
-Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-configure:4814: $? = 0
-configure:4816: gcc -v </dev/null >&5
-Using built-in specs.
-Target: i486-linux-gnu
-Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --with-tune=pentium4 --enable-checking=release i486-linux-gnu
-Thread model: posix
-gcc version 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
-configure:4819: $? = 0
-configure:4821: gcc -V </dev/null >&5
-gcc: '-V' option must have argument
-configure:4824: $? = 1
-configure:4827: checking whether we are using the GNU C compiler
-configure:4882: result: yes
-configure:4888: checking whether gcc accepts -g
-configure:4938: result: yes
-configure:4955: checking for gcc option to accept ANSI C
-configure:5061: result: none needed
-configure:5079: gcc -c -g -O2  conftest.c >&5
-conftest.c:2: error: syntax error before 'me'
-configure:5085: $? = 1
-configure: failed program was:
-| #ifndef __cplusplus
-|   choke me
-| #endif
-configure:5217: checking dependency style of gcc
-configure:5307: result: gcc3
-configure:6007: gcc -c -g -O2  conftest.c >&5
-configure:6013: $? = 0
-configure:6016: test -z 			 || test ! -s conftest.err
-configure:6019: $? = 0
-configure:6022: test -s conftest.o
-configure:6025: $? = 0
-configure:6064: checking for flex
-configure:6080: found /usr/bin/flex
-configure:6090: result: flex
-configure:6103: checking for yywrap in -lfl
-configure:6133: gcc -o conftest -g -O2   conftest.c -lfl   >&5
-configure:6139: $? = 0
-configure:6142: test -z 			 || test ! -s conftest.err
-configure:6145: $? = 0
-configure:6148: test -s conftest
-configure:6151: $? = 0
-configure:6164: result: yes
-configure:6241: checking lex output file root
-configure:6252: flex conftest.l
-configure:6255: $? = 0
-configure:6267: result: lex.yy
-configure:6272: checking whether yytext is a pointer
-configure:6288: gcc -o conftest -g -O2   conftest.c  -lfl >&5
-configure:6294: $? = 0
-configure:6297: test -z 			 || test ! -s conftest.err
-configure:6300: $? = 0
-configure:6303: test -s conftest
-configure:6306: $? = 0
-configure:6320: result: yes
-configure:6335: checking for bison
-configure:6351: found /usr/bin/bison
-configure:6361: result: bison -y
-configure:6413: checking for ranlib
-configure:6429: found /usr/bin/ranlib
-configure:6440: result: ranlib
-configure:6456: checking for gm4
-configure:6489: result: no
-configure:6456: checking for gnum4
-configure:6489: result: no
-configure:6456: checking for m4
-configure:6474: found /usr/bin/m4
-configure:6486: result: /usr/bin/m4
-configure:6497: checking whether m4 supports frozen files
-configure:6509: result: yes
-configure:6541: checking locale.h usability
-configure:6553: gcc -c -g -O2  conftest.c >&5
-configure:6559: $? = 0
-configure:6562: test -z 			 || test ! -s conftest.err
-configure:6565: $? = 0
-configure:6568: test -s conftest.o
-configure:6571: $? = 0
-configure:6581: result: yes
-configure:6585: checking locale.h presence
-configure:6595: gcc -E  conftest.c
-configure:6601: $? = 0
-configure:6621: result: yes
-configure:6656: checking for locale.h
-configure:6663: result: yes
-configure:6541: checking wchar.h usability
-configure:6553: gcc -c -g -O2  conftest.c >&5
-configure:6559: $? = 0
-configure:6562: test -z 			 || test ! -s conftest.err
-configure:6565: $? = 0
-configure:6568: test -s conftest.o
-configure:6571: $? = 0
-configure:6581: result: yes
-configure:6585: checking wchar.h presence
-configure:6595: gcc -E  conftest.c
-configure:6601: $? = 0
-configure:6621: result: yes
-configure:6656: checking for wchar.h
-configure:6663: result: yes
-configure:6541: checking wctype.h usability
-configure:6553: gcc -c -g -O2  conftest.c >&5
-configure:6559: $? = 0
-configure:6562: test -z 			 || test ! -s conftest.err
-configure:6565: $? = 0
-configure:6568: test -s conftest.o
-configure:6571: $? = 0
-configure:6581: result: yes
-configure:6585: checking wctype.h presence
-configure:6595: gcc -E  conftest.c
-configure:6601: $? = 0
-configure:6621: result: yes
-configure:6656: checking for wctype.h
-configure:6663: result: yes
-configure:6688: checking for stdbool.h that conforms to C99
-configure:6776: gcc -c -g -O2  conftest.c >&5
-configure:6782: $? = 0
-configure:6785: test -z 			 || test ! -s conftest.err
-configure:6788: $? = 0
-configure:6791: test -s conftest.o
-configure:6794: $? = 0
-configure:6805: result: yes
-configure:6807: checking for _Bool
-configure:6831: gcc -c -g -O2  conftest.c >&5
-configure:6837: $? = 0
-configure:6840: test -z 			 || test ! -s conftest.err
-configure:6843: $? = 0
-configure:6846: test -s conftest.o
-configure:6849: $? = 0
-configure:6860: result: yes
-configure:6899: checking for inline
-configure:6920: gcc -c -g -O2  conftest.c >&5
-configure:6926: $? = 0
-configure:6929: test -z 			 || test ! -s conftest.err
-configure:6932: $? = 0
-configure:6935: test -s conftest.o
-configure:6938: $? = 0
-configure:6950: result: inline
-configure:6971: checking for uintptr_t
-configure:6995: gcc -c -g -O2  conftest.c >&5
-configure:7001: $? = 0
-configure:7004: test -z 			 || test ! -s conftest.err
-configure:7007: $? = 0
-configure:7010: test -s conftest.o
-configure:7013: $? = 0
-configure:7024: result: yes
-configure:7045: checking for setlocale
-configure:7102: gcc -o conftest -g -O2   conftest.c  >&5
-configure:7108: $? = 0
-configure:7111: test -z 			 || test ! -s conftest.err
-configure:7114: $? = 0
-configure:7117: test -s conftest
-configure:7120: $? = 0
-configure:7132: result: yes
-configure:7045: checking for isascii
-configure:7102: gcc -o conftest -g -O2   conftest.c  >&5
-conftest.c:57: warning: conflicting types for built-in function 'isascii'
-configure:7108: $? = 0
-configure:7111: test -z 			 || test ! -s conftest.err
-configure:7114: $? = 0
-configure:7117: test -s conftest
-configure:7120: $? = 0
-configure:7132: result: yes
-configure:7045: checking for iswprint
-configure:7102: gcc -o conftest -g -O2   conftest.c  >&5
-conftest.c:58: warning: conflicting types for built-in function 'iswprint'
-configure:7108: $? = 0
-configure:7111: test -z 			 || test ! -s conftest.err
-configure:7114: $? = 0
-configure:7117: test -s conftest
-configure:7120: $? = 0
-configure:7132: result: yes
-configure:7045: checking for mbsinit
-configure:7102: gcc -o conftest -g -O2   conftest.c  >&5
-configure:7108: $? = 0
-configure:7111: test -z 			 || test ! -s conftest.err
-configure:7114: $? = 0
-configure:7117: test -s conftest
-configure:7120: $? = 0
-configure:7132: result: yes
-configure:7154: checking if malloc debugging is wanted
-configure:7175: result: no
-configure:7180: checking for pid_t
-configure:7204: gcc -c -g -O2  conftest.c >&5
-configure:7210: $? = 0
-configure:7213: test -z 			 || test ! -s conftest.err
-configure:7216: $? = 0
-configure:7219: test -s conftest.o
-configure:7222: $? = 0
-configure:7233: result: yes
-configure:7245: checking for sys/wait.h that is POSIX.1 compatible
-configure:7276: gcc -c -g -O2  conftest.c >&5
-configure:7282: $? = 0
-configure:7285: test -z 			 || test ! -s conftest.err
-configure:7288: $? = 0
-configure:7291: test -s conftest.o
-configure:7294: $? = 0
-configure:7305: result: yes
-configure:7320: checking for dup2
-configure:7377: gcc -o conftest -g -O2   conftest.c  >&5
-configure:7383: $? = 0
-configure:7386: test -z 			 || test ! -s conftest.err
-configure:7389: $? = 0
-configure:7392: test -s conftest
-configure:7395: $? = 0
-configure:7407: result: yes
-configure:7320: checking for waitpid
-configure:7377: gcc -o conftest -g -O2   conftest.c  >&5
-configure:7383: $? = 0
-configure:7386: test -z 			 || test ! -s conftest.err
-configure:7389: $? = 0
-configure:7392: test -s conftest
-configure:7395: $? = 0
-configure:7407: result: yes
-configure:7423: checking for unistd.h
-configure:7428: result: yes
-configure:7432: checking vfork.h usability
-configure:7444: gcc -c -g -O2  conftest.c >&5
-conftest.c:74:19: error: vfork.h: No such file or directory
-configure:7450: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| /* end confdefs.h.  */
-| #include <stdio.h>
-| #if HAVE_SYS_TYPES_H
-| # include <sys/types.h>
-| #endif
-| #if HAVE_SYS_STAT_H
-| # include <sys/stat.h>
-| #endif
-| #if STDC_HEADERS
-| # include <stdlib.h>
-| # include <stddef.h>
-| #else
-| # if HAVE_STDLIB_H
-| #  include <stdlib.h>
-| # endif
-| #endif
-| #if HAVE_STRING_H
-| # if !STDC_HEADERS && HAVE_MEMORY_H
-| #  include <memory.h>
-| # endif
-| # include <string.h>
-| #endif
-| #if HAVE_STRINGS_H
-| # include <strings.h>
-| #endif
-| #if HAVE_INTTYPES_H
-| # include <inttypes.h>
-| #else
-| # if HAVE_STDINT_H
-| #  include <stdint.h>
-| # endif
-| #endif
-| #if HAVE_UNISTD_H
-| # include <unistd.h>
-| #endif
-| #include <vfork.h>
-configure:7472: result: no
-configure:7476: checking vfork.h presence
-configure:7486: gcc -E  conftest.c
-conftest.c:40:19: error: vfork.h: No such file or directory
-configure:7492: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| /* end confdefs.h.  */
-| #include <vfork.h>
-configure:7512: result: no
-configure:7547: checking for vfork.h
-configure:7554: result: no
-configure:7572: checking for fork
-configure:7629: gcc -o conftest -g -O2   conftest.c  >&5
-conftest.c:64: warning: conflicting types for built-in function 'fork'
-configure:7635: $? = 0
-configure:7638: test -z 			 || test ! -s conftest.err
-configure:7641: $? = 0
-configure:7644: test -s conftest
-configure:7647: $? = 0
-configure:7659: result: yes
-configure:7572: checking for vfork
-configure:7629: gcc -o conftest -g -O2   conftest.c  >&5
-configure:7635: $? = 0
-configure:7638: test -z 			 || test ! -s conftest.err
-configure:7641: $? = 0
-configure:7644: test -s conftest
-configure:7647: $? = 0
-configure:7659: result: yes
-configure:7670: checking for working fork
-configure:7693: gcc -o conftest -g -O2   conftest.c  >&5
-conftest.c: In function 'main':
-conftest.c:10: warning: incompatible implicit declaration of built-in function 'exit'
-configure:7696: $? = 0
-configure:7698: ./conftest
-configure:7701: $? = 0
-configure:7715: result: yes
-configure:7736: checking for working vfork
-configure:7869: result: yes
-configure:7916: checking sys/time.h usability
-configure:7928: gcc -c -g -O2  conftest.c >&5
-configure:7934: $? = 0
-configure:7937: test -z 			 || test ! -s conftest.err
-configure:7940: $? = 0
-configure:7943: test -s conftest.o
-configure:7946: $? = 0
-configure:7956: result: yes
-configure:7960: checking sys/time.h presence
-configure:7970: gcc -E  conftest.c
-configure:7976: $? = 0
-configure:7996: result: yes
-configure:8031: checking for sys/time.h
-configure:8038: result: yes
-configure:7916: checking sys/times.h usability
-configure:7928: gcc -c -g -O2  conftest.c >&5
-configure:7934: $? = 0
-configure:7937: test -z 			 || test ! -s conftest.err
-configure:7940: $? = 0
-configure:7943: test -s conftest.o
-configure:7946: $? = 0
-configure:7956: result: yes
-configure:7960: checking sys/times.h presence
-configure:7970: gcc -E  conftest.c
-configure:7976: $? = 0
-configure:7996: result: yes
-configure:8031: checking for sys/times.h
-configure:8038: result: yes
-configure:8055: checking for sys/resource.h
-configure:8078: gcc -c -g -O2  conftest.c >&5
-configure:8084: $? = 0
-configure:8087: test -z 			 || test ! -s conftest.err
-configure:8090: $? = 0
-configure:8093: test -s conftest.o
-configure:8096: $? = 0
-configure:8107: result: yes
-configure:8122: checking for times
-configure:8179: gcc -o conftest -g -O2   conftest.c  >&5
-configure:8185: $? = 0
-configure:8188: test -z 			 || test ! -s conftest.err
-configure:8191: $? = 0
-configure:8194: test -s conftest
-configure:8197: $? = 0
-configure:8209: result: yes
-configure:8220: checking whether getrusage is declared
-configure:8255: gcc -c -g -O2  conftest.c >&5
-configure:8261: $? = 0
-configure:8264: test -z 			 || test ! -s conftest.err
-configure:8267: $? = 0
-configure:8270: test -s conftest.o
-configure:8273: $? = 0
-configure:8284: result: yes
-configure:8300: checking whether times is declared
-configure:8335: gcc -c -g -O2  conftest.c >&5
-configure:8341: $? = 0
-configure:8344: test -z 			 || test ! -s conftest.err
-configure:8347: $? = 0
-configure:8350: test -s conftest.o
-configure:8353: $? = 0
-configure:8364: result: yes
-configure:8380: checking whether clock is declared
-configure:8415: gcc -c -g -O2  conftest.c >&5
-conftest.c: In function 'main':
-conftest.c:99: error: 'clock' undeclared (first use in this function)
-conftest.c:99: error: (Each undeclared identifier is reported only once
-conftest.c:99: error: for each function it appears in.)
-configure:8421: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_FORK 1
-| #define HAVE_VFORK 1
-| #define HAVE_WORKING_VFORK 1
-| #define HAVE_WORKING_FORK 1
-| #define HAVE_SYS_TIME_H 1
-| #define HAVE_SYS_TIMES_H 1
-| #define HAVE_SYS_RESOURCE_H 1
-| #define HAVE_TIMES 1
-| #define HAVE_DECL_GETRUSAGE 1
-| #define HAVE_DECL_TIMES 1
-| /* end confdefs.h.  */
-| #include <stdio.h>
-| #if HAVE_SYS_TYPES_H
-| # include <sys/types.h>
-| #endif
-| #if HAVE_SYS_STAT_H
-| # include <sys/stat.h>
-| #endif
-| #if STDC_HEADERS
-| # include <stdlib.h>
-| # include <stddef.h>
-| #else
-| # if HAVE_STDLIB_H
-| #  include <stdlib.h>
-| # endif
-| #endif
-| #if HAVE_STRING_H
-| # if !STDC_HEADERS && HAVE_MEMORY_H
-| #  include <memory.h>
-| # endif
-| # include <string.h>
-| #endif
-| #if HAVE_STRINGS_H
-| # include <strings.h>
-| #endif
-| #if HAVE_INTTYPES_H
-| # include <inttypes.h>
-| #else
-| # if HAVE_STDINT_H
-| #  include <stdint.h>
-| # endif
-| #endif
-| #if HAVE_UNISTD_H
-| # include <unistd.h>
-| #endif
-| #if HAVE_SYS_TIME_H
-| # include <sys/time.h>
-| #endif
-| #if HAVE_SYS_TIMES_H
-| # include <sys/times.h>
-| #endif
-| #if HAVE_SYS_RESOURCE_H
-| # include <sys/resource.h>
-| #endif
-| 
-| 
-| int
-| main ()
-| {
-| #ifndef clock
-|   char *p = (char *) clock;
-| #endif
-| 
-|   ;
-|   return 0;
-| }
-configure:8444: result: no
-configure:8460: checking whether sysconf is declared
-configure:8495: gcc -c -g -O2  conftest.c >&5
-configure:8501: $? = 0
-configure:8504: test -z 			 || test ! -s conftest.err
-configure:8507: $? = 0
-configure:8510: test -s conftest.o
-configure:8513: $? = 0
-configure:8524: result: yes
-configure:8543: checking for clock_t
-configure:8578: gcc -c -g -O2  conftest.c >&5
-configure:8584: $? = 0
-configure:8587: test -z 			 || test ! -s conftest.err
-configure:8590: $? = 0
-configure:8593: test -s conftest.o
-configure:8596: $? = 0
-configure:8607: result: yes
-configure:8617: checking for struct tms
-configure:8652: gcc -c -g -O2  conftest.c >&5
-configure:8658: $? = 0
-configure:8661: test -z 			 || test ! -s conftest.err
-configure:8664: $? = 0
-configure:8667: test -s conftest.o
-configure:8670: $? = 0
-configure:8681: result: yes
-configure:8696: checking whether system is Windows or MSDOS
-configure:8720: gcc -c -g -O2  conftest.c >&5
-conftest.c: In function 'main':
-conftest.c:59: error: 'neither' undeclared (first use in this function)
-conftest.c:59: error: (Each undeclared identifier is reported only once
-conftest.c:59: error: for each function it appears in.)
-conftest.c:59: error: syntax error before 'MSDOS'
-configure:8726: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_FORK 1
-| #define HAVE_VFORK 1
-| #define HAVE_WORKING_VFORK 1
-| #define HAVE_WORKING_FORK 1
-| #define HAVE_SYS_TIME_H 1
-| #define HAVE_SYS_TIMES_H 1
-| #define HAVE_SYS_RESOURCE_H 1
-| #define HAVE_TIMES 1
-| #define HAVE_DECL_GETRUSAGE 1
-| #define HAVE_DECL_TIMES 1
-| #define HAVE_DECL_CLOCK 0
-| #define HAVE_DECL_SYSCONF 1
-| #define HAVE_CLOCK_T 1
-| #define HAVE_STRUCT_TMS 1
-| /* end confdefs.h.  */
-| 
-| int
-| main ()
-| {
-| #if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__
-| neither MSDOS nor Windows
-| #endif
-|   ;
-|   return 0;
-| }
-configure:8750: result: no
-configure:8779: checking whether strerror_r is declared
-configure:8803: gcc -c -g -O2  conftest.c >&5
-configure:8809: $? = 0
-configure:8812: test -z 			 || test ! -s conftest.err
-configure:8815: $? = 0
-configure:8818: test -s conftest.o
-configure:8821: $? = 0
-configure:8832: result: yes
-configure:8854: checking for strerror_r
-configure:8911: gcc -o conftest -g -O2   conftest.c  >&5
-configure:8917: $? = 0
-configure:8920: test -z 			 || test ! -s conftest.err
-configure:8923: $? = 0
-configure:8926: test -s conftest
-configure:8929: $? = 0
-configure:8941: result: yes
-configure:8951: checking whether strerror_r returns char *
-configure:8979: gcc -c -g -O2  conftest.c >&5
-configure:8985: $? = 0
-configure:8988: test -z 			 || test ! -s conftest.err
-configure:8991: $? = 0
-configure:8994: test -s conftest.o
-configure:8997: $? = 0
-configure:9057: result: yes
-configure:9083: checking getopt.h usability
-configure:9095: gcc -c -g -O2  conftest.c >&5
-configure:9101: $? = 0
-configure:9104: test -z 			 || test ! -s conftest.err
-configure:9107: $? = 0
-configure:9110: test -s conftest.o
-configure:9113: $? = 0
-configure:9123: result: yes
-configure:9127: checking getopt.h presence
-configure:9137: gcc -E  conftest.c
-configure:9143: $? = 0
-configure:9163: result: yes
-configure:9198: checking for getopt.h
-configure:9205: result: yes
-configure:9227: checking for getopt_long_only
-configure:9284: gcc -o conftest -g -O2   conftest.c  >&5
-configure:9290: $? = 0
-configure:9293: test -z 			 || test ! -s conftest.err
-configure:9296: $? = 0
-configure:9299: test -s conftest
-configure:9302: $? = 0
-configure:9314: result: yes
-configure:9329: checking whether optreset is declared
-configure:9354: gcc -c -g -O2  conftest.c >&5
-conftest.c: In function 'main':
-conftest.c:67: error: 'optreset' undeclared (first use in this function)
-conftest.c:67: error: (Each undeclared identifier is reported only once
-conftest.c:67: error: for each function it appears in.)
-configure:9360: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_FORK 1
-| #define HAVE_VFORK 1
-| #define HAVE_WORKING_VFORK 1
-| #define HAVE_WORKING_FORK 1
-| #define HAVE_SYS_TIME_H 1
-| #define HAVE_SYS_TIMES_H 1
-| #define HAVE_SYS_RESOURCE_H 1
-| #define HAVE_TIMES 1
-| #define HAVE_DECL_GETRUSAGE 1
-| #define HAVE_DECL_TIMES 1
-| #define HAVE_DECL_CLOCK 0
-| #define HAVE_DECL_SYSCONF 1
-| #define HAVE_CLOCK_T 1
-| #define HAVE_STRUCT_TMS 1
-| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
-| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
-| #define HAVE_DECL_STRERROR_R 1
-| #define HAVE_STRERROR_R 1
-| #define STRERROR_R_CHAR_P 1
-| #define HAVE_GETOPT_H 1
-| #define HAVE_GETOPT_LONG_ONLY 1
-| /* end confdefs.h.  */
-| #include <getopt.h>
-| 
-| int
-| main ()
-| {
-| #ifndef optreset
-|   char *p = (char *) optreset;
-| #endif
-| 
-|   ;
-|   return 0;
-| }
-configure:9383: result: no
-configure:9392: checking for working GNU getopt function
-configure:9483: gcc -o conftest -g -O2   conftest.c  >&5
-configure:9486: $? = 0
-configure:9488: ./conftest
-conftest: invalid option -- +
-configure:9491: $? = 0
-configure:9505: result: yes
-configure:9513: checking whether getenv is declared
-configure:9537: gcc -c -g -O2  conftest.c >&5
-configure:9543: $? = 0
-configure:9546: test -z 			 || test ! -s conftest.err
-configure:9549: $? = 0
-configure:9552: test -s conftest.o
-configure:9555: $? = 0
-configure:9566: result: yes
-configure:9600: checking whether NLS is requested
-configure:9609: result: yes
-configure:9647: checking for msgfmt
-configure: trying /usr/bin/msgfmt...
-0 translated messages.
-configure:9679: result: /usr/bin/msgfmt
-configure:9688: checking for gmsgfmt
-configure:9719: result: /usr/bin/msgfmt
-configure:9758: checking for xgettext
-configure: trying /usr/bin/xgettext...
-/usr/bin/xgettext: warning: file `/dev/null' extension `' is unknown; will try C
-configure:9790: result: /usr/bin/xgettext
-configure:9830: checking for msgmerge
-configure: trying /usr/bin/msgmerge...
-configure:9861: result: /usr/bin/msgmerge
-configure:9918: checking build system type
-configure:9936: result: x86_64-unknown-linux-gnu
-configure:9944: checking host system type
-configure:9958: result: x86_64-unknown-linux-gnu
-configure:9990: checking for ld used by GCC
-configure:10054: result: /usr/bin/ld
-configure:10063: checking if the linker (/usr/bin/ld) is GNU ld
-configure:10076: result: yes
-configure:10083: checking for shared library run path origin
-configure:10096: result: done
-configure:10547: checking for inttypes.h
-configure:10569: gcc -c -g -O2  conftest.c >&5
-configure:10575: $? = 0
-configure:10578: test -z 			 || test ! -s conftest.err
-configure:10581: $? = 0
-configure:10584: test -s conftest.o
-configure:10587: $? = 0
-configure:10598: result: yes
-configure:10609: checking for stdint.h
-configure:10631: gcc -c -g -O2  conftest.c >&5
-configure:10637: $? = 0
-configure:10640: test -z 			 || test ! -s conftest.err
-configure:10643: $? = 0
-configure:10646: test -s conftest.o
-configure:10649: $? = 0
-configure:10660: result: yes
-configure:10671: checking for unsigned long long
-configure:10693: gcc -o conftest -g -O2   conftest.c  >&5
-configure:10699: $? = 0
-configure:10702: test -z 			 || test ! -s conftest.err
-configure:10705: $? = 0
-configure:10708: test -s conftest
-configure:10711: $? = 0
-configure:10723: result: yes
-configure:10755: checking whether strdup is declared
-configure:10779: gcc -c -g -O2  conftest.c >&5
-configure:10785: $? = 0
-configure:10788: test -z 			 || test ! -s conftest.err
-configure:10791: $? = 0
-configure:10794: test -s conftest.o
-configure:10797: $? = 0
-configure:10808: result: yes
-configure:10828: checking whether strndup is declared
-configure:10852: gcc -c -g -O2  conftest.c >&5
-configure:10858: $? = 0
-configure:10861: test -z 			 || test ! -s conftest.err
-configure:10864: $? = 0
-configure:10867: test -s conftest.o
-configure:10870: $? = 0
-configure:10881: result: yes
-configure:10901: checking whether strnlen is declared
-configure:10925: gcc -c -g -O2  conftest.c >&5
-configure:10931: $? = 0
-configure:10934: test -z 			 || test ! -s conftest.err
-configure:10937: $? = 0
-configure:10940: test -s conftest.o
-configure:10943: $? = 0
-configure:10954: result: yes
-configure:10974: checking whether clearerr_unlocked is declared
-configure:10998: gcc -c -g -O2  conftest.c >&5
-configure:11004: $? = 0
-configure:11007: test -z 			 || test ! -s conftest.err
-configure:11010: $? = 0
-configure:11013: test -s conftest.o
-configure:11016: $? = 0
-configure:11027: result: yes
-configure:11047: checking whether feof_unlocked is declared
-configure:11071: gcc -c -g -O2  conftest.c >&5
-configure:11077: $? = 0
-configure:11080: test -z 			 || test ! -s conftest.err
-configure:11083: $? = 0
-configure:11086: test -s conftest.o
-configure:11089: $? = 0
-configure:11100: result: yes
-configure:11120: checking whether ferror_unlocked is declared
-configure:11144: gcc -c -g -O2  conftest.c >&5
-configure:11150: $? = 0
-configure:11153: test -z 			 || test ! -s conftest.err
-configure:11156: $? = 0
-configure:11159: test -s conftest.o
-configure:11162: $? = 0
-configure:11173: result: yes
-configure:11193: checking whether fflush_unlocked is declared
-configure:11217: gcc -c -g -O2  conftest.c >&5
-configure:11223: $? = 0
-configure:11226: test -z 			 || test ! -s conftest.err
-configure:11229: $? = 0
-configure:11232: test -s conftest.o
-configure:11235: $? = 0
-configure:11246: result: yes
-configure:11266: checking whether fgets_unlocked is declared
-configure:11290: gcc -c -g -O2  conftest.c >&5
-configure:11296: $? = 0
-configure:11299: test -z 			 || test ! -s conftest.err
-configure:11302: $? = 0
-configure:11305: test -s conftest.o
-configure:11308: $? = 0
-configure:11319: result: yes
-configure:11339: checking whether fputc_unlocked is declared
-configure:11363: gcc -c -g -O2  conftest.c >&5
-configure:11369: $? = 0
-configure:11372: test -z 			 || test ! -s conftest.err
-configure:11375: $? = 0
-configure:11378: test -s conftest.o
-configure:11381: $? = 0
-configure:11392: result: yes
-configure:11412: checking whether fputs_unlocked is declared
-configure:11436: gcc -c -g -O2  conftest.c >&5
-configure:11442: $? = 0
-configure:11445: test -z 			 || test ! -s conftest.err
-configure:11448: $? = 0
-configure:11451: test -s conftest.o
-configure:11454: $? = 0
-configure:11465: result: yes
-configure:11485: checking whether fread_unlocked is declared
-configure:11509: gcc -c -g -O2  conftest.c >&5
-configure:11515: $? = 0
-configure:11518: test -z 			 || test ! -s conftest.err
-configure:11521: $? = 0
-configure:11524: test -s conftest.o
-configure:11527: $? = 0
-configure:11538: result: yes
-configure:11558: checking whether fwrite_unlocked is declared
-configure:11582: gcc -c -g -O2  conftest.c >&5
-configure:11588: $? = 0
-configure:11591: test -z 			 || test ! -s conftest.err
-configure:11594: $? = 0
-configure:11597: test -s conftest.o
-configure:11600: $? = 0
-configure:11611: result: yes
-configure:11631: checking whether getc_unlocked is declared
-configure:11655: gcc -c -g -O2  conftest.c >&5
-configure:11661: $? = 0
-configure:11664: test -z 			 || test ! -s conftest.err
-configure:11667: $? = 0
-configure:11670: test -s conftest.o
-configure:11673: $? = 0
-configure:11684: result: yes
-configure:11704: checking whether getchar_unlocked is declared
-configure:11728: gcc -c -g -O2  conftest.c >&5
-configure:11734: $? = 0
-configure:11737: test -z 			 || test ! -s conftest.err
-configure:11740: $? = 0
-configure:11743: test -s conftest.o
-configure:11746: $? = 0
-configure:11757: result: yes
-configure:11777: checking whether putc_unlocked is declared
-configure:11801: gcc -c -g -O2  conftest.c >&5
-configure:11807: $? = 0
-configure:11810: test -z 			 || test ! -s conftest.err
-configure:11813: $? = 0
-configure:11816: test -s conftest.o
-configure:11819: $? = 0
-configure:11830: result: yes
-configure:11850: checking whether putchar_unlocked is declared
-configure:11874: gcc -c -g -O2  conftest.c >&5
-configure:11880: $? = 0
-configure:11883: test -z 			 || test ! -s conftest.err
-configure:11886: $? = 0
-configure:11889: test -s conftest.o
-configure:11892: $? = 0
-configure:11903: result: yes
-configure:11940: checking for error_at_line
-configure:11961: gcc -o conftest -g -O2   conftest.c  >&5
-configure:11967: $? = 0
-configure:11970: test -z 			 || test ! -s conftest.err
-configure:11973: $? = 0
-configure:11976: test -s conftest
-configure:11979: $? = 0
-configure:11991: result: yes
-configure:12085: checking for CFPreferencesCopyAppValue
-configure:12110: gcc -o conftest -g -O2  -I/System/Library/Frameworks/CoreFoundation.framework/Headers  conftest.c  -framework CoreFoundation >&5
-gcc: CoreFoundation: No such file or directory
-cc1: error: unrecognized command line option "-framework"
-configure:12116: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_FORK 1
-| #define HAVE_VFORK 1
-| #define HAVE_WORKING_VFORK 1
-| #define HAVE_WORKING_FORK 1
-| #define HAVE_SYS_TIME_H 1
-| #define HAVE_SYS_TIMES_H 1
-| #define HAVE_SYS_RESOURCE_H 1
-| #define HAVE_TIMES 1
-| #define HAVE_DECL_GETRUSAGE 1
-| #define HAVE_DECL_TIMES 1
-| #define HAVE_DECL_CLOCK 0
-| #define HAVE_DECL_SYSCONF 1
-| #define HAVE_CLOCK_T 1
-| #define HAVE_STRUCT_TMS 1
-| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
-| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
-| #define HAVE_DECL_STRERROR_R 1
-| #define HAVE_STRERROR_R 1
-| #define STRERROR_R_CHAR_P 1
-| #define HAVE_GETOPT_H 1
-| #define HAVE_GETOPT_LONG_ONLY 1
-| #define HAVE_DECL_GETENV 1
-| #define HAVE_INTTYPES_H_WITH_UINTMAX 1
-| #define HAVE_STDINT_H_WITH_UINTMAX 1
-| #define HAVE_UNSIGNED_LONG_LONG 1
-| #define HAVE_UINTMAX_T 1
-| #define HAVE_DECL_STRDUP 1
-| #define HAVE_DECL_STRNDUP 1
-| #define HAVE_DECL_STRNLEN 1
-| #define HAVE_DECL_CLEARERR_UNLOCKED 1
-| #define HAVE_DECL_FEOF_UNLOCKED 1
-| #define HAVE_DECL_FERROR_UNLOCKED 1
-| #define HAVE_DECL_FFLUSH_UNLOCKED 1
-| #define HAVE_DECL_FGETS_UNLOCKED 1
-| #define HAVE_DECL_FPUTC_UNLOCKED 1
-| #define HAVE_DECL_FPUTS_UNLOCKED 1
-| #define HAVE_DECL_FREAD_UNLOCKED 1
-| #define HAVE_DECL_FWRITE_UNLOCKED 1
-| #define HAVE_DECL_GETC_UNLOCKED 1
-| #define HAVE_DECL_GETCHAR_UNLOCKED 1
-| #define HAVE_DECL_PUTC_UNLOCKED 1
-| #define HAVE_DECL_PUTCHAR_UNLOCKED 1
-| /* end confdefs.h.  */
-| #include <CFPreferences.h>
-| int
-| main ()
-| {
-| CFPreferencesCopyAppValue(NULL, NULL)
-|   ;
-|   return 0;
-| }
-configure:12142: result: no
-configure:12151: checking for CFLocaleCopyCurrent
-configure:12176: gcc -o conftest -g -O2  -I/System/Library/Frameworks/CoreFoundation.framework/Headers  conftest.c  -framework CoreFoundation >&5
-gcc: CoreFoundation: No such file or directory
-cc1: error: unrecognized command line option "-framework"
-configure:12182: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_FORK 1
-| #define HAVE_VFORK 1
-| #define HAVE_WORKING_VFORK 1
-| #define HAVE_WORKING_FORK 1
-| #define HAVE_SYS_TIME_H 1
-| #define HAVE_SYS_TIMES_H 1
-| #define HAVE_SYS_RESOURCE_H 1
-| #define HAVE_TIMES 1
-| #define HAVE_DECL_GETRUSAGE 1
-| #define HAVE_DECL_TIMES 1
-| #define HAVE_DECL_CLOCK 0
-| #define HAVE_DECL_SYSCONF 1
-| #define HAVE_CLOCK_T 1
-| #define HAVE_STRUCT_TMS 1
-| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
-| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
-| #define HAVE_DECL_STRERROR_R 1
-| #define HAVE_STRERROR_R 1
-| #define STRERROR_R_CHAR_P 1
-| #define HAVE_GETOPT_H 1
-| #define HAVE_GETOPT_LONG_ONLY 1
-| #define HAVE_DECL_GETENV 1
-| #define HAVE_INTTYPES_H_WITH_UINTMAX 1
-| #define HAVE_STDINT_H_WITH_UINTMAX 1
-| #define HAVE_UNSIGNED_LONG_LONG 1
-| #define HAVE_UINTMAX_T 1
-| #define HAVE_DECL_STRDUP 1
-| #define HAVE_DECL_STRNDUP 1
-| #define HAVE_DECL_STRNLEN 1
-| #define HAVE_DECL_CLEARERR_UNLOCKED 1
-| #define HAVE_DECL_FEOF_UNLOCKED 1
-| #define HAVE_DECL_FERROR_UNLOCKED 1
-| #define HAVE_DECL_FFLUSH_UNLOCKED 1
-| #define HAVE_DECL_FGETS_UNLOCKED 1
-| #define HAVE_DECL_FPUTC_UNLOCKED 1
-| #define HAVE_DECL_FPUTS_UNLOCKED 1
-| #define HAVE_DECL_FREAD_UNLOCKED 1
-| #define HAVE_DECL_FWRITE_UNLOCKED 1
-| #define HAVE_DECL_GETC_UNLOCKED 1
-| #define HAVE_DECL_GETCHAR_UNLOCKED 1
-| #define HAVE_DECL_PUTC_UNLOCKED 1
-| #define HAVE_DECL_PUTCHAR_UNLOCKED 1
-| /* end confdefs.h.  */
-| #include <CFLocale.h>
-| int
-| main ()
-| {
-| CFLocaleCopyCurrent();
-|   ;
-|   return 0;
-| }
-configure:12208: result: no
-configure:12225: checking whether NLS is requested
-configure:12234: result: yes
-configure:12252: checking for GNU gettext in libc
-configure:12276: gcc -o conftest -g -O2   conftest.c  >&5
-configure:12282: $? = 0
-configure:12285: test -z 			 || test ! -s conftest.err
-configure:12288: $? = 0
-configure:12291: test -s conftest
-configure:12294: $? = 0
-configure:12306: result: yes
-configure:13010: checking whether to use NLS
-configure:13012: result: yes
-configure:13015: checking where the gettext function comes from
-configure:13026: result: libc
-configure:13122: checking for stdlib.h
-configure:13127: result: yes
-configure:13266: checking for GNU libc compatible malloc
-configure:13295: gcc -o conftest -g -O2   conftest.c  >&5
-configure:13298: $? = 0
-configure:13300: ./conftest
-configure:13303: $? = 0
-configure:13317: result: yes
-configure:13377: checking for iswcntrl
-configure:13434: gcc -o conftest -g -O2   conftest.c  >&5
-conftest.c:111: warning: conflicting types for built-in function 'iswcntrl'
-configure:13440: $? = 0
-configure:13443: test -z 			 || test ! -s conftest.err
-configure:13446: $? = 0
-configure:13449: test -s conftest
-configure:13452: $? = 0
-configure:13464: result: yes
-configure:13377: checking for wcwidth
-configure:13434: gcc -o conftest -g -O2   conftest.c  >&5
-configure:13440: $? = 0
-configure:13443: test -z 			 || test ! -s conftest.err
-configure:13446: $? = 0
-configure:13449: test -s conftest
-configure:13452: $? = 0
-configure:13464: result: yes
-configure:13475: checking whether mbrtowc and mbstate_t are properly declared
-configure:13500: gcc -o conftest -g -O2   conftest.c  >&5
-configure:13506: $? = 0
-configure:13509: test -z 			 || test ! -s conftest.err
-configure:13512: $? = 0
-configure:13515: test -s conftest
-configure:13518: $? = 0
-configure:13530: result: yes
-configure:13541: checking whether wcwidth is declared
-configure:13574: gcc -c -g -O2  conftest.c >&5
-configure:13580: $? = 0
-configure:13583: test -z 			 || test ! -s conftest.err
-configure:13586: $? = 0
-configure:13589: test -s conftest.o
-configure:13592: $? = 0
-configure:13603: result: yes
-configure:13616: checking whether mbswidth is declared in <wchar.h>
-configure:13643: gcc -c -g -O2  conftest.c >&5
-conftest.c: In function 'main':
-conftest.c:100: error: 'mbswidth' undeclared (first use in this function)
-conftest.c:100: error: (Each undeclared identifier is reported only once
-conftest.c:100: error: for each function it appears in.)
-configure:13649: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_FORK 1
-| #define HAVE_VFORK 1
-| #define HAVE_WORKING_VFORK 1
-| #define HAVE_WORKING_FORK 1
-| #define HAVE_SYS_TIME_H 1
-| #define HAVE_SYS_TIMES_H 1
-| #define HAVE_SYS_RESOURCE_H 1
-| #define HAVE_TIMES 1
-| #define HAVE_DECL_GETRUSAGE 1
-| #define HAVE_DECL_TIMES 1
-| #define HAVE_DECL_CLOCK 0
-| #define HAVE_DECL_SYSCONF 1
-| #define HAVE_CLOCK_T 1
-| #define HAVE_STRUCT_TMS 1
-| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
-| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
-| #define HAVE_DECL_STRERROR_R 1
-| #define HAVE_STRERROR_R 1
-| #define STRERROR_R_CHAR_P 1
-| #define HAVE_GETOPT_H 1
-| #define HAVE_GETOPT_LONG_ONLY 1
-| #define HAVE_DECL_GETENV 1
-| #define HAVE_INTTYPES_H_WITH_UINTMAX 1
-| #define HAVE_STDINT_H_WITH_UINTMAX 1
-| #define HAVE_UNSIGNED_LONG_LONG 1
-| #define HAVE_UINTMAX_T 1
-| #define HAVE_DECL_STRDUP 1
-| #define HAVE_DECL_STRNDUP 1
-| #define HAVE_DECL_STRNLEN 1
-| #define HAVE_DECL_CLEARERR_UNLOCKED 1
-| #define HAVE_DECL_FEOF_UNLOCKED 1
-| #define HAVE_DECL_FERROR_UNLOCKED 1
-| #define HAVE_DECL_FFLUSH_UNLOCKED 1
-| #define HAVE_DECL_FGETS_UNLOCKED 1
-| #define HAVE_DECL_FPUTC_UNLOCKED 1
-| #define HAVE_DECL_FPUTS_UNLOCKED 1
-| #define HAVE_DECL_FREAD_UNLOCKED 1
-| #define HAVE_DECL_FWRITE_UNLOCKED 1
-| #define HAVE_DECL_GETC_UNLOCKED 1
-| #define HAVE_DECL_GETCHAR_UNLOCKED 1
-| #define HAVE_DECL_PUTC_UNLOCKED 1
-| #define HAVE_DECL_PUTCHAR_UNLOCKED 1
-| #define ENABLE_NLS 1
-| #define HAVE_GETTEXT 1
-| #define HAVE_DCGETTEXT 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_MALLOC 1
-| #define HAVE_ISWCNTRL 1
-| #define HAVE_WCWIDTH 1
-| #define HAVE_MBRTOWC 1
-| #define HAVE_DECL_WCWIDTH 1
-| /* end confdefs.h.  */
-| 
-| #if HAVE_WCHAR_H
-| # include <wchar.h>
-| #endif
-| 
-| int
-| main ()
-| {
-| 
-|   char *p = (char *) mbswidth;
-| 
-|   ;
-|   return 0;
-| }
-configure:13672: result: no
-configure:13685: checking for mbstate_t
-configure:13707: gcc -c -g -O2  conftest.c >&5
-configure:13713: $? = 0
-configure:13716: test -z 			 || test ! -s conftest.err
-configure:13719: $? = 0
-configure:13722: test -s conftest.o
-configure:13725: $? = 0
-configure:13736: result: yes
-configure:13754: checking for obstacks
-configure:13775: gcc -o conftest -g -O2   conftest.c  >&5
-configure:13781: $? = 0
-configure:13784: test -z 			 || test ! -s conftest.err
-configure:13787: $? = 0
-configure:13790: test -s conftest
-configure:13793: $? = 0
-configure:13805: result: yes
-configure:13878: checking for mbstate_t
-configure:13929: result: yes
-configure:13945: checking whether mbrtowc and mbstate_t are properly declared
-configure:14000: result: yes
-configure:14051: checking for stpcpy
-configure:14108: gcc -o conftest -g -O2   conftest.c  >&5
-conftest.c:120: warning: conflicting types for built-in function 'stpcpy'
-configure:14114: $? = 0
-configure:14117: test -z 			 || test ! -s conftest.err
-configure:14120: $? = 0
-configure:14123: test -s conftest
-configure:14126: $? = 0
-configure:14138: result: yes
-configure:14172: checking for strdup
-configure:14229: gcc -o conftest -g -O2   conftest.c  >&5
-conftest.c:121: warning: conflicting types for built-in function 'strdup'
-configure:14235: $? = 0
-configure:14238: test -z 			 || test ! -s conftest.err
-configure:14241: $? = 0
-configure:14244: test -s conftest
-configure:14247: $? = 0
-configure:14259: result: yes
-configure:14294: checking for strerror
-configure:14351: gcc -o conftest -g -O2   conftest.c  >&5
-configure:14357: $? = 0
-configure:14360: test -z 			 || test ! -s conftest.err
-configure:14363: $? = 0
-configure:14366: test -s conftest
-configure:14369: $? = 0
-configure:14381: result: yes
-configure:14422: checking for working strndup
-configure:14474: gcc -o conftest -g -O2   conftest.c  >&5
-configure:14477: $? = 0
-configure:14479: ./conftest
-configure:14482: $? = 0
-configure:14496: result: yes
-configure:14527: checking for working strnlen
-configure:14566: gcc -o conftest -g -O2   conftest.c  >&5
-configure:14569: $? = 0
-configure:14571: ./conftest
-configure:14574: $? = 0
-configure:14588: result: yes
-configure:14626: checking for strtol
-configure:14683: gcc -o conftest -g -O2   conftest.c  >&5
-configure:14689: $? = 0
-configure:14692: test -z 			 || test ! -s conftest.err
-configure:14695: $? = 0
-configure:14698: test -s conftest
-configure:14701: $? = 0
-configure:14713: result: yes
-configure:14752: checking for strtoul
-configure:14809: gcc -o conftest -g -O2   conftest.c  >&5
-configure:14815: $? = 0
-configure:14818: test -z 			 || test ! -s conftest.err
-configure:14821: $? = 0
-configure:14824: test -s conftest
-configure:14827: $? = 0
-configure:14839: result: yes
-configure:14884: checking for strverscmp
-configure:14941: gcc -o conftest -g -O2   conftest.c  >&5
-configure:14947: $? = 0
-configure:14950: test -z 			 || test ! -s conftest.err
-configure:14953: $? = 0
-configure:14956: test -s conftest
-configure:14959: $? = 0
-configure:14971: result: yes
-configure:15004: checking for unistd.h
-configure:15009: result: yes
-configure:15386: checking for valgrind
-configure:15415: result: no
-configure:15474: checking for g++
-configure:15490: found /usr/bin/g++
-configure:15500: result: g++
-configure:15516: checking for C++ compiler version
-configure:15519: g++ --version </dev/null >&5
-g++ (GCC) 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
-Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-configure:15522: $? = 0
-configure:15524: g++ -v </dev/null >&5
-Using built-in specs.
-Target: i486-linux-gnu
-Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --with-tune=pentium4 --enable-checking=release i486-linux-gnu
-Thread model: posix
-gcc version 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
-configure:15527: $? = 0
-configure:15529: g++ -V </dev/null >&5
-g++: '-V' option must have argument
-configure:15532: $? = 1
-configure:15535: checking whether we are using the GNU C++ compiler
-configure:15559: g++ -c   conftest.cc >&5
-configure:15565: $? = 0
-configure:15568: test -z 			 || test ! -s conftest.err
-configure:15571: $? = 0
-configure:15574: test -s conftest.o
-configure:15577: $? = 0
-configure:15590: result: yes
-configure:15596: checking whether g++ accepts -g
-configure:15617: g++ -c -g  conftest.cc >&5
-configure:15623: $? = 0
-configure:15626: test -z 			 || test ! -s conftest.err
-configure:15629: $? = 0
-configure:15632: test -s conftest.o
-configure:15635: $? = 0
-configure:15646: result: yes
-configure:15688: g++ -c -g -O2  conftest.cc >&5
-configure:15694: $? = 0
-configure:15697: test -z 			 || test ! -s conftest.err
-configure:15700: $? = 0
-configure:15703: test -s conftest.o
-configure:15706: $? = 0
-configure:15732: g++ -c -g -O2  conftest.cc >&5
-conftest.cc: In function 'int main()':
-conftest.cc:110: error: 'exit' was not declared in this scope
-configure:15738: $? = 1
-configure: failed program was:
-| /* confdefs.h.  */
-| 
-| #define PACKAGE_NAME "GNU Bison"
-| #define PACKAGE_TARNAME "bison"
-| #define PACKAGE_VERSION "2.3"
-| #define PACKAGE_STRING "GNU Bison 2.3"
-| #define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-| #define PACKAGE "bison"
-| #define VERSION "2.3"
-| #define _GNU_SOURCE 1
-| #define STDC_HEADERS 1
-| #define HAVE_SYS_TYPES_H 1
-| #define HAVE_SYS_STAT_H 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_STRING_H 1
-| #define HAVE_MEMORY_H 1
-| #define HAVE_STRINGS_H 1
-| #define HAVE_INTTYPES_H 1
-| #define HAVE_STDINT_H 1
-| #define HAVE_UNISTD_H 1
-| #define __EXTENSIONS__ 1
-| #define _POSIX_PTHREAD_SEMANTICS 1
-| #define YYTEXT_POINTER 1
-| #define M4 "/usr/bin/m4"
-| #define HAVE_LOCALE_H 1
-| #define HAVE_WCHAR_H 1
-| #define HAVE_WCTYPE_H 1
-| #define HAVE__BOOL 1
-| #define HAVE_STDBOOL_H 1
-| #define HAVE_UINTPTR_T 1
-| #define HAVE_SETLOCALE 1
-| #define HAVE_ISASCII 1
-| #define HAVE_ISWPRINT 1
-| #define HAVE_MBSINIT 1
-| #define HAVE_SYS_WAIT_H 1
-| #define HAVE_DUP2 1
-| #define HAVE_WAITPID 1
-| #define HAVE_UNISTD_H 1
-| #define HAVE_FORK 1
-| #define HAVE_VFORK 1
-| #define HAVE_WORKING_VFORK 1
-| #define HAVE_WORKING_FORK 1
-| #define HAVE_SYS_TIME_H 1
-| #define HAVE_SYS_TIMES_H 1
-| #define HAVE_SYS_RESOURCE_H 1
-| #define HAVE_TIMES 1
-| #define HAVE_DECL_GETRUSAGE 1
-| #define HAVE_DECL_TIMES 1
-| #define HAVE_DECL_CLOCK 0
-| #define HAVE_DECL_SYSCONF 1
-| #define HAVE_CLOCK_T 1
-| #define HAVE_STRUCT_TMS 1
-| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
-| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
-| #define HAVE_DECL_STRERROR_R 1
-| #define HAVE_STRERROR_R 1
-| #define STRERROR_R_CHAR_P 1
-| #define HAVE_GETOPT_H 1
-| #define HAVE_GETOPT_LONG_ONLY 1
-| #define HAVE_DECL_GETENV 1
-| #define HAVE_INTTYPES_H_WITH_UINTMAX 1
-| #define HAVE_STDINT_H_WITH_UINTMAX 1
-| #define HAVE_UNSIGNED_LONG_LONG 1
-| #define HAVE_UINTMAX_T 1
-| #define HAVE_DECL_STRDUP 1
-| #define HAVE_DECL_STRNDUP 1
-| #define HAVE_DECL_STRNLEN 1
-| #define HAVE_DECL_CLEARERR_UNLOCKED 1
-| #define HAVE_DECL_FEOF_UNLOCKED 1
-| #define HAVE_DECL_FERROR_UNLOCKED 1
-| #define HAVE_DECL_FFLUSH_UNLOCKED 1
-| #define HAVE_DECL_FGETS_UNLOCKED 1
-| #define HAVE_DECL_FPUTC_UNLOCKED 1
-| #define HAVE_DECL_FPUTS_UNLOCKED 1
-| #define HAVE_DECL_FREAD_UNLOCKED 1
-| #define HAVE_DECL_FWRITE_UNLOCKED 1
-| #define HAVE_DECL_GETC_UNLOCKED 1
-| #define HAVE_DECL_GETCHAR_UNLOCKED 1
-| #define HAVE_DECL_PUTC_UNLOCKED 1
-| #define HAVE_DECL_PUTCHAR_UNLOCKED 1
-| #define ENABLE_NLS 1
-| #define HAVE_GETTEXT 1
-| #define HAVE_DCGETTEXT 1
-| #define HAVE_STDLIB_H 1
-| #define HAVE_MALLOC 1
-| #define HAVE_ISWCNTRL 1
-| #define HAVE_WCWIDTH 1
-| #define HAVE_MBRTOWC 1
-| #define HAVE_DECL_WCWIDTH 1
-| #define HAVE_DECL_MBSWIDTH_IN_WCHAR_H 0
-| #define HAVE_MBSTATE_T 1
-| #define HAVE_OBSTACK 1
-| #define HAVE_MBSTATE_T 1
-| #define HAVE_MBRTOWC 1
-| #define HAVE_STPCPY 1
-| #define HAVE_STRDUP 1
-| #define HAVE_STRERROR 1
-| #define HAVE_STRNDUP 1
-| #define HAVE_STRTOL 1
-| #define HAVE_STRTOUL 1
-| #define HAVE_STRVERSCMP 1
-| #define HAVE_UNISTD_H 1
-| #define USE_UNLOCKED_IO 1
-| #define YYENABLE_NLS 1
-| /* end confdefs.h.  */
-| 
-| int
-| main ()
-| {
-| exit (42);
-|   ;
-|   return 0;
-| }
-configure:15688: g++ -c -g -O2  conftest.cc >&5
-configure:15694: $? = 0
-configure:15697: test -z 			 || test ! -s conftest.err
-configure:15700: $? = 0
-configure:15703: test -s conftest.o
-configure:15706: $? = 0
-configure:15732: g++ -c -g -O2  conftest.cc >&5
-configure:15738: $? = 0
-configure:15741: test -z 			 || test ! -s conftest.err
-configure:15744: $? = 0
-configure:15747: test -s conftest.o
-configure:15750: $? = 0
-configure:15775: checking dependency style of g++
-configure:15865: result: gcc3
-configure:15884: checking whether g++ builds executables that work
-configure:15924: g++ -c -g -O2  conftest.cc >&5
-configure:15930: $? = 0
-configure:15933: test -z 			 || test ! -s conftest.err
-configure:15936: $? = 0
-configure:15939: test -s conftest.o
-configure:15942: $? = 0
-configure:15945: g++ -o conftest -g -O2   conftest.o  >&5
-configure:15948: $? = 0
-configure:15954: ./conftest
-configure:15957: $? = 0
-configure:15980: result: yes
-configure:16151: creating ./config.status
-
-## ---------------------- ##
-## Running config.status. ##
-## ---------------------- ##
-
-This file was extended by GNU Bison config.status 2.3, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  CONFIG_FILES    = 
-  CONFIG_HEADERS  = 
-  CONFIG_LINKS    = 
-  CONFIG_COMMANDS = 
-  $ ./config.status 
-
-on phanna.cnc.corp.google.com
-
-config.status:802: creating runtime-po/Makefile.in
-config.status:802: creating tests/Makefile
-config.status:802: creating tests/atlocal
-config.status:802: creating tests/bison
-config.status:802: creating Makefile
-config.status:802: creating build-aux/Makefile
-config.status:802: creating po/Makefile.in
-config.status:802: creating data/Makefile
-config.status:802: creating examples/Makefile
-config.status:802: creating examples/calc++/Makefile
-config.status:802: creating lib/Makefile
-config.status:802: creating src/Makefile
-config.status:802: creating doc/Makefile
-config.status:872: creating config.h
-config.status:1364: executing depfiles commands
-config.status:1364: executing default-1 commands
-config.status:1364: executing tests/atconfig commands
-
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-
-ac_cv_build=x86_64-unknown-linux-gnu
-ac_cv_build_alias=x86_64-unknown-linux-gnu
-ac_cv_c_compiler_gnu=yes
-ac_cv_c_inline=inline
-ac_cv_cxx_compiler_gnu=yes
-ac_cv_env_CC_set=
-ac_cv_env_CC_value=
-ac_cv_env_CFLAGS_set=
-ac_cv_env_CFLAGS_value=
-ac_cv_env_CPPFLAGS_set=
-ac_cv_env_CPPFLAGS_value=
-ac_cv_env_CPP_set=
-ac_cv_env_CPP_value=
-ac_cv_env_CXXFLAGS_set=
-ac_cv_env_CXXFLAGS_value=
-ac_cv_env_CXX_set=
-ac_cv_env_CXX_value=
-ac_cv_env_LDFLAGS_set=
-ac_cv_env_LDFLAGS_value=
-ac_cv_env_build_alias_set=
-ac_cv_env_build_alias_value=
-ac_cv_env_host_alias_set=
-ac_cv_env_host_alias_value=
-ac_cv_env_target_alias_set=
-ac_cv_env_target_alias_value=
-ac_cv_exeext=
-ac_cv_func_dup2=yes
-ac_cv_func_fork=yes
-ac_cv_func_fork_works=yes
-ac_cv_func_getopt_long_only=yes
-ac_cv_func_isascii=yes
-ac_cv_func_iswcntrl=yes
-ac_cv_func_iswprint=yes
-ac_cv_func_malloc_0_nonnull=yes
-ac_cv_func_mbsinit=yes
-ac_cv_func_obstack=yes
-ac_cv_func_setlocale=yes
-ac_cv_func_stpcpy=yes
-ac_cv_func_strdup=yes
-ac_cv_func_strerror=yes
-ac_cv_func_strerror_r=yes
-ac_cv_func_strerror_r_char_p=yes
-ac_cv_func_strnlen_working=yes
-ac_cv_func_strtol=yes
-ac_cv_func_strtoul=yes
-ac_cv_func_strverscmp=yes
-ac_cv_func_times=yes
-ac_cv_func_vfork=yes
-ac_cv_func_vfork_works=yes
-ac_cv_func_waitpid=yes
-ac_cv_func_wcwidth=yes
-ac_cv_have_decl_clearerr_unlocked=yes
-ac_cv_have_decl_clock=no
-ac_cv_have_decl_feof_unlocked=yes
-ac_cv_have_decl_ferror_unlocked=yes
-ac_cv_have_decl_fflush_unlocked=yes
-ac_cv_have_decl_fgets_unlocked=yes
-ac_cv_have_decl_fputc_unlocked=yes
-ac_cv_have_decl_fputs_unlocked=yes
-ac_cv_have_decl_fread_unlocked=yes
-ac_cv_have_decl_fwrite_unlocked=yes
-ac_cv_have_decl_getc_unlocked=yes
-ac_cv_have_decl_getchar_unlocked=yes
-ac_cv_have_decl_getenv=yes
-ac_cv_have_decl_getrusage=yes
-ac_cv_have_decl_mbswidth=no
-ac_cv_have_decl_optreset=no
-ac_cv_have_decl_putc_unlocked=yes
-ac_cv_have_decl_putchar_unlocked=yes
-ac_cv_have_decl_strdup=yes
-ac_cv_have_decl_strerror_r=yes
-ac_cv_have_decl_strndup=yes
-ac_cv_have_decl_strnlen=yes
-ac_cv_have_decl_sysconf=yes
-ac_cv_have_decl_times=yes
-ac_cv_have_decl_wcwidth=yes
-ac_cv_header_getopt_h=yes
-ac_cv_header_inttypes_h=yes
-ac_cv_header_locale_h=yes
-ac_cv_header_memory_h=yes
-ac_cv_header_minix_config_h=no
-ac_cv_header_stdbool_h=yes
-ac_cv_header_stdc=yes
-ac_cv_header_stdint_h=yes
-ac_cv_header_stdlib_h=yes
-ac_cv_header_string_h=yes
-ac_cv_header_strings_h=yes
-ac_cv_header_sys_resource_h=yes
-ac_cv_header_sys_stat_h=yes
-ac_cv_header_sys_time_h=yes
-ac_cv_header_sys_times_h=yes
-ac_cv_header_sys_types_h=yes
-ac_cv_header_sys_wait_h=yes
-ac_cv_header_unistd_h=yes
-ac_cv_header_vfork_h=no
-ac_cv_header_wchar_h=yes
-ac_cv_header_wctype_h=yes
-ac_cv_host=x86_64-unknown-linux-gnu
-ac_cv_host_alias=x86_64-unknown-linux-gnu
-ac_cv_lib_error_at_line=yes
-ac_cv_lib_fl_yywrap=yes
-ac_cv_objext=o
-ac_cv_path_GMSGFMT=/usr/bin/msgfmt
-ac_cv_path_M4=/usr/bin/m4
-ac_cv_path_MSGFMT=/usr/bin/msgfmt
-ac_cv_path_MSGMERGE=/usr/bin/msgmerge
-ac_cv_path_XGETTEXT=/usr/bin/xgettext
-ac_cv_path_install='/usr/bin/install -c'
-ac_cv_prog_AWK=gawk
-ac_cv_prog_CPP='gcc -E'
-ac_cv_prog_LEX=flex
-ac_cv_prog_YACC='bison -y'
-ac_cv_prog_ac_ct_CC=gcc
-ac_cv_prog_ac_ct_CXX=g++
-ac_cv_prog_ac_ct_RANLIB=ranlib
-ac_cv_prog_cc_g=yes
-ac_cv_prog_cc_stdc=
-ac_cv_prog_cxx_g=yes
-ac_cv_prog_egrep='grep -E'
-ac_cv_prog_gnu_m4=yes
-ac_cv_prog_lex_root=lex.yy
-ac_cv_prog_lex_yytext_pointer=yes
-ac_cv_prog_make_make_set=yes
-ac_cv_safe_to_define___extensions__=yes
-ac_cv_type__Bool=yes
-ac_cv_type_clock_t=yes
-ac_cv_type_mbstate_t=yes
-ac_cv_type_pid_t=yes
-ac_cv_type_struct_tms=yes
-ac_cv_type_uintptr_t=yes
-ac_cv_type_unsigned_long_long=yes
-ac_cv_win_or_dos=no
-acl_cv_hardcode_direct=no
-acl_cv_hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-acl_cv_hardcode_libdir_separator=
-acl_cv_hardcode_minus_L=no
-acl_cv_libext=a
-acl_cv_path_LD=/usr/bin/ld
-acl_cv_prog_gnu_ld=yes
-acl_cv_rpath=done
-acl_cv_shlibext=so
-acl_cv_wl=-Wl,
-am_cv_CC_dependencies_compiler_type=gcc3
-am_cv_CXX_dependencies_compiler_type=gcc3
-am_cv_prog_cc_stdc=
-bison_cv_cxx_works=yes
-gl_cv_func_gnu_getopt=yes
-gl_cv_func_mbrtowc=yes
-gl_cv_func_strndup=yes
-gl_cv_header_inttypes_h=yes
-gl_cv_header_stdint_h=yes
-gt_cv_func_CFLocaleCopyCurrent=no
-gt_cv_func_CFPreferencesCopyAppValue=no
-gt_cv_func_gnugettext1_libc=yes
-
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-
-ACLOCAL='${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9'
-AMDEPBACKSLASH='\'
-AMDEP_FALSE='#'
-AMDEP_TRUE=''
-AMTAR='${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar'
-AUTOCONF='${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf'
-AUTOHEADER='${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader'
-AUTOM4TE='${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te'
-AUTOMAKE='${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9'
-AWK='gawk'
-BISON_CXX_WORKS=':'
-BISON_CXX_WORKS_FALSE='#'
-BISON_CXX_WORKS_TRUE=''
-BISON_LOCALEDIR='/usr/share/locale'
-CC='gcc'
-CCDEPMODE='depmode=gcc3'
-CFLAGS='-g -O2'
-CPP='gcc -E'
-CPPFLAGS=''
-CXX='g++'
-CXXDEPMODE='depmode=gcc3'
-CXXFLAGS='-g -O2'
-CYGPATH_W='echo'
-DEFS='-DHAVE_CONFIG_H'
-DEPDIR='.deps'
-ECHO_C=''
-ECHO_N='-n'
-ECHO_T=''
-EGREP='grep -E'
-EXEEXT=''
-GCC='yes'
-GETOPT_H=''
-GMSGFMT='/usr/bin/msgfmt'
-HAVE__BOOL='1'
-INSTALL_DATA='${INSTALL} -m 644'
-INSTALL_PROGRAM='${INSTALL}'
-INSTALL_SCRIPT='${INSTALL}'
-INSTALL_STRIP_PROGRAM='${SHELL} $(install_sh) -c -s'
-INTLLIBS=''
-INTL_MACOSX_LIBS=''
-LDFLAGS=''
-LEX='flex'
-LEXLIB='-lfl'
-LEX_OUTPUT_ROOT='lex.yy'
-LIBICONV='-liconv'
-LIBINTL=''
-LIBOBJS=' dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o'
-LIBS=''
-LTLIBICONV='-liconv'
-LTLIBINTL=''
-LTLIBOBJS=' dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo'
-M4='/usr/bin/m4'
-MAKEINFO='${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo'
-MKINSTALLDIRS='$(top_builddir)/build-aux/mkinstalldirs'
-MSGFMT='/usr/bin/msgfmt'
-MSGMERGE='/usr/bin/msgmerge'
-O0CFLAGS='-g '
-O0CXXFLAGS='-g '
-OBJEXT='o'
-PACKAGE='bison'
-PACKAGE_BUGREPORT='bug-bison@gnu.org'
-PACKAGE_NAME='GNU Bison'
-PACKAGE_STRING='GNU Bison 2.3'
-PACKAGE_TARNAME='bison'
-PACKAGE_VERSION='2.3'
-PATH_SEPARATOR=':'
-POSUB='po'
-RANLIB='ranlib'
-SET_MAKE=''
-SHELL='/bin/sh'
-STDBOOL_H=''
-STRIP=''
-UNISTD_H=''
-USE_NLS='yes'
-VALGRIND=''
-VERSION='2.3'
-WARNING_CFLAGS=''
-WARNING_CXXFLAGS=''
-WERROR_CFLAGS=''
-XGETTEXT='/usr/bin/xgettext'
-YACC='bison -y'
-YACC_LIBRARY='liby.a'
-YACC_SCRIPT='yacc'
-ac_ct_CC='gcc'
-ac_ct_CXX='g++'
-ac_ct_RANLIB='ranlib'
-ac_ct_STRIP=''
-aclocaldir='${datadir}/aclocal'
-am__fastdepCC_FALSE='#'
-am__fastdepCC_TRUE=''
-am__fastdepCXX_FALSE='#'
-am__fastdepCXX_TRUE=''
-am__include='include'
-am__leading_dot='.'
-am__quote=''
-am__tar='${AMTAR} chof - "$$tardir"'
-am__untar='${AMTAR} xf -'
-bindir='${exec_prefix}/bin'
-build='x86_64-unknown-linux-gnu'
-build_alias=''
-build_cpu='x86_64'
-build_os='linux-gnu'
-build_vendor='unknown'
-datadir='${prefix}/share'
-exec_prefix='${prefix}'
-host='x86_64-unknown-linux-gnu'
-host_alias=''
-host_cpu='x86_64'
-host_os='linux-gnu'
-host_vendor='unknown'
-includedir='${prefix}/include'
-infodir='${prefix}/info'
-install_sh='/usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh'
-libdir='${exec_prefix}/lib'
-libexecdir='${exec_prefix}/libexec'
-localstatedir='${prefix}/var'
-mandir='${prefix}/man'
-mkdir_p='mkdir -p --'
-oldincludedir='/usr/include'
-prefix='/home/phanna/src/bison'
-program_transform_name='s,x,x,'
-sbindir='${exec_prefix}/sbin'
-sharedstatedir='${prefix}/com'
-sysconfdir='${prefix}/etc'
-target_alias=''
-
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-
-#define ENABLE_NLS 1
-#define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
-#define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
-#define HAVE_CLOCK_T 1
-#define HAVE_DCGETTEXT 1
-#define HAVE_DECL_CLEARERR_UNLOCKED 1
-#define HAVE_DECL_CLOCK 0
-#define HAVE_DECL_FEOF_UNLOCKED 1
-#define HAVE_DECL_FERROR_UNLOCKED 1
-#define HAVE_DECL_FFLUSH_UNLOCKED 1
-#define HAVE_DECL_FGETS_UNLOCKED 1
-#define HAVE_DECL_FPUTC_UNLOCKED 1
-#define HAVE_DECL_FPUTS_UNLOCKED 1
-#define HAVE_DECL_FREAD_UNLOCKED 1
-#define HAVE_DECL_FWRITE_UNLOCKED 1
-#define HAVE_DECL_GETCHAR_UNLOCKED 1
-#define HAVE_DECL_GETC_UNLOCKED 1
-#define HAVE_DECL_GETENV 1
-#define HAVE_DECL_GETRUSAGE 1
-#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H 0
-#define HAVE_DECL_PUTCHAR_UNLOCKED 1
-#define HAVE_DECL_PUTC_UNLOCKED 1
-#define HAVE_DECL_STRDUP 1
-#define HAVE_DECL_STRERROR_R 1
-#define HAVE_DECL_STRNDUP 1
-#define HAVE_DECL_STRNLEN 1
-#define HAVE_DECL_SYSCONF 1
-#define HAVE_DECL_TIMES 1
-#define HAVE_DECL_WCWIDTH 1
-#define HAVE_DUP2 1
-#define HAVE_FORK 1
-#define HAVE_GETOPT_H 1
-#define HAVE_GETOPT_LONG_ONLY 1
-#define HAVE_GETTEXT 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_INTTYPES_H_WITH_UINTMAX 1
-#define HAVE_ISASCII 1
-#define HAVE_ISWCNTRL 1
-#define HAVE_ISWPRINT 1
-#define HAVE_LOCALE_H 1
-#define HAVE_MALLOC 1
-#define HAVE_MBRTOWC 1
-#define HAVE_MBRTOWC 1
-#define HAVE_MBSINIT 1
-#define HAVE_MBSTATE_T 1
-#define HAVE_MBSTATE_T 1
-#define HAVE_MEMORY_H 1
-#define HAVE_OBSTACK 1
-#define HAVE_SETLOCALE 1
-#define HAVE_STDBOOL_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_STDINT_H_WITH_UINTMAX 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STPCPY 1
-#define HAVE_STRDUP 1
-#define HAVE_STRERROR 1
-#define HAVE_STRERROR_R 1
-#define HAVE_STRINGS_H 1
-#define HAVE_STRING_H 1
-#define HAVE_STRNDUP 1
-#define HAVE_STRTOL 1
-#define HAVE_STRTOUL 1
-#define HAVE_STRUCT_TMS 1
-#define HAVE_STRVERSCMP 1
-#define HAVE_SYS_RESOURCE_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_SYS_TIMES_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_SYS_WAIT_H 1
-#define HAVE_TIMES 1
-#define HAVE_UINTMAX_T 1
-#define HAVE_UINTPTR_T 1
-#define HAVE_UNISTD_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_UNSIGNED_LONG_LONG 1
-#define HAVE_VFORK 1
-#define HAVE_WAITPID 1
-#define HAVE_WCHAR_H 1
-#define HAVE_WCTYPE_H 1
-#define HAVE_WCWIDTH 1
-#define HAVE_WORKING_FORK 1
-#define HAVE_WORKING_VFORK 1
-#define HAVE__BOOL 1
-#define M4 "/usr/bin/m4"
-#define PACKAGE "bison"
-#define PACKAGE_BUGREPORT "bug-bison@gnu.org"
-#define PACKAGE_NAME "GNU Bison"
-#define PACKAGE_STRING "GNU Bison 2.3"
-#define PACKAGE_TARNAME "bison"
-#define PACKAGE_VERSION "2.3"
-#define STDC_HEADERS 1
-#define STRERROR_R_CHAR_P 1
-#define USE_UNLOCKED_IO 1
-#define VERSION "2.3"
-#define YYENABLE_NLS 1
-#define YYTEXT_POINTER 1
-#define _GNU_SOURCE 1
-#define _POSIX_PTHREAD_SEMANTICS 1
-#define __EXTENSIONS__ 1
-#endif
-#ifdef __cplusplus
-extern "C" void std::exit (int) throw (); using std::exit;
-
-configure: exit 0
diff --git a/config.status b/config.status
deleted file mode 100755
index 0c4904a..0000000
--- a/config.status
+++ /dev/null
@@ -1,1587 +0,0 @@
-#! /bin/sh
-# Generated by configure.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=${CONFIG_SHELL-/bin/sh}
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); exit 1; }; }
-
-  # 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 sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# 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'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by GNU Bison $as_me 2.3, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-config_files=" runtime-po/Makefile.in tests/Makefile tests/atlocal tests/bison Makefile build-aux/Makefile po/Makefile.in data/Makefile examples/Makefile examples/calc++/Makefile lib/Makefile src/Makefile doc/Makefile"
-config_headers=" config.h:config.hin"
-config_commands=" depfiles default-1 tests/atconfig"
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
-  -q, --quiet      do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-		   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf@gnu.org>."
-ac_cs_version="\
-GNU Bison config.status 2.3
-configured by ./configure, generated by GNU Autoconf 2.59,
-  with options \"'--prefix' '/home/phanna/src/bison'\"
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=.
-INSTALL="/usr/bin/install -c"
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  -*)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-    ac_need_defaults=false;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$ac_config_targets $1" ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-if $ac_cs_recheck; then
-  echo "running /bin/sh ./configure " '--prefix' '/home/phanna/src/bison' $ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec /bin/sh ./configure '--prefix' '/home/phanna/src/bison' $ac_configure_extra_args --no-create --no-recursion
-fi
-
-#
-# INIT-COMMANDS section.
-#
-
-AMDEP_TRUE="" ac_aux_dir="build-aux"
-# Capture the value of obsolete ALL_LINGUAS because we need it to compute
-    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
-    # from automake.
-    eval 'OBSOLETE_ALL_LINGUAS''=""'
-    # Capture the value of LINGUAS because we need it to compute CATALOGS.
-    LINGUAS="%UNSET%"
-
-
-for ac_config_target in $ac_config_targets
-do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "runtime-po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES runtime-po/Makefile.in" ;;
-  "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
-  "tests/atlocal" ) CONFIG_FILES="$CONFIG_FILES tests/atlocal" ;;
-  "tests/bison" ) CONFIG_FILES="$CONFIG_FILES tests/bison" ;;
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "build-aux/Makefile" ) CONFIG_FILES="$CONFIG_FILES build-aux/Makefile" ;;
-  "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
-  "data/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
-  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
-  "examples/calc++/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/calc++/Makefile" ;;
-  "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
-  "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
-  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-  "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
-  "tests/atconfig" ) CONFIG_COMMANDS="$CONFIG_COMMANDS tests/atconfig" ;;
-  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.hin" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
-
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >$tmp/subs.sed <<\CEOF
-s,@SHELL@,/bin/sh,;t t
-s,@PATH_SEPARATOR@,:,;t t
-s,@PACKAGE_NAME@,GNU Bison,;t t
-s,@PACKAGE_TARNAME@,bison,;t t
-s,@PACKAGE_VERSION@,2.3,;t t
-s,@PACKAGE_STRING@,GNU Bison 2.3,;t t
-s,@PACKAGE_BUGREPORT@,bug-bison@gnu.org,;t t
-s,@exec_prefix@,${prefix},;t t
-s,@prefix@,/home/phanna/src/bison,;t t
-s,@program_transform_name@,s,x,x,,;t t
-s,@bindir@,${exec_prefix}/bin,;t t
-s,@sbindir@,${exec_prefix}/sbin,;t t
-s,@libexecdir@,${exec_prefix}/libexec,;t t
-s,@datadir@,${prefix}/share,;t t
-s,@sysconfdir@,${prefix}/etc,;t t
-s,@sharedstatedir@,${prefix}/com,;t t
-s,@localstatedir@,${prefix}/var,;t t
-s,@libdir@,${exec_prefix}/lib,;t t
-s,@includedir@,${prefix}/include,;t t
-s,@oldincludedir@,/usr/include,;t t
-s,@infodir@,${prefix}/info,;t t
-s,@mandir@,${prefix}/man,;t t
-s,@build_alias@,,;t t
-s,@host_alias@,,;t t
-s,@target_alias@,,;t t
-s,@DEFS@,-DHAVE_CONFIG_H,;t t
-s,@ECHO_C@,,;t t
-s,@ECHO_N@,-n,;t t
-s,@ECHO_T@,,;t t
-s,@LIBS@,,;t t
-s,@INSTALL_PROGRAM@,${INSTALL},;t t
-s,@INSTALL_SCRIPT@,${INSTALL},;t t
-s,@INSTALL_DATA@,${INSTALL} -m 644,;t t
-s,@CYGPATH_W@,echo,;t t
-s,@PACKAGE@,bison,;t t
-s,@VERSION@,2.3,;t t
-s,@ACLOCAL@,${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9,;t t
-s,@AUTOCONF@,${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf,;t t
-s,@AUTOMAKE@,${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9,;t t
-s,@AUTOHEADER@,${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader,;t t
-s,@MAKEINFO@,${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo,;t t
-s,@install_sh@,/usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh,;t t
-s,@STRIP@,,;t t
-s,@ac_ct_STRIP@,,;t t
-s,@INSTALL_STRIP_PROGRAM@,${SHELL} $(install_sh) -c -s,;t t
-s,@mkdir_p@,mkdir -p --,;t t
-s,@AWK@,gawk,;t t
-s,@SET_MAKE@,,;t t
-s,@am__leading_dot@,.,;t t
-s,@AMTAR@,${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar,;t t
-s,@am__tar@,${AMTAR} chof - "$$tardir",;t t
-s,@am__untar@,${AMTAR} xf -,;t t
-s,@CC@,gcc,;t t
-s,@CFLAGS@,-g -O2,;t t
-s,@LDFLAGS@,,;t t
-s,@CPPFLAGS@,,;t t
-s,@ac_ct_CC@,gcc,;t t
-s,@EXEEXT@,,;t t
-s,@OBJEXT@,o,;t t
-s,@DEPDIR@,.deps,;t t
-s,@am__include@,include,;t t
-s,@am__quote@,,;t t
-s,@AMDEP_TRUE@,,;t t
-s,@AMDEP_FALSE@,#,;t t
-s,@AMDEPBACKSLASH@,\,;t t
-s,@CCDEPMODE@,depmode=gcc3,;t t
-s,@am__fastdepCC_TRUE@,,;t t
-s,@am__fastdepCC_FALSE@,#,;t t
-s,@CPP@,gcc -E,;t t
-s,@EGREP@,grep -E,;t t
-s,@WARNING_CFLAGS@,,;t t
-s,@WERROR_CFLAGS@,,;t t
-s,@WARNING_CXXFLAGS@,,;t t
-s,@YACC_SCRIPT@,yacc,;t t
-s,@YACC_LIBRARY@,liby.a,;t t
-s,@LEX@,flex,;t t
-s,@LEXLIB@,-lfl,;t t
-s,@LEX_OUTPUT_ROOT@,lex.yy,;t t
-s,@YACC@,bison -y,;t t
-s,@RANLIB@,ranlib,;t t
-s,@ac_ct_RANLIB@,ranlib,;t t
-s,@M4@,/usr/bin/m4,;t t
-s,@STDBOOL_H@,,;t t
-s,@HAVE__BOOL@,1,;t t
-s,@LIBOBJS@, dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o,;t t
-s,@GETOPT_H@,,;t t
-s,@MKINSTALLDIRS@,$(top_builddir)/build-aux/mkinstalldirs,;t t
-s,@USE_NLS@,yes,;t t
-s,@MSGFMT@,/usr/bin/msgfmt,;t t
-s,@GMSGFMT@,/usr/bin/msgfmt,;t t
-s,@XGETTEXT@,/usr/bin/xgettext,;t t
-s,@MSGMERGE@,/usr/bin/msgmerge,;t t
-s,@build@,x86_64-unknown-linux-gnu,;t t
-s,@build_cpu@,x86_64,;t t
-s,@build_vendor@,unknown,;t t
-s,@build_os@,linux-gnu,;t t
-s,@host@,x86_64-unknown-linux-gnu,;t t
-s,@host_cpu@,x86_64,;t t
-s,@host_vendor@,unknown,;t t
-s,@host_os@,linux-gnu,;t t
-s,@INTL_MACOSX_LIBS@,,;t t
-s,@LIBICONV@,-liconv,;t t
-s,@LTLIBICONV@,-liconv,;t t
-s,@INTLLIBS@,,;t t
-s,@LIBINTL@,,;t t
-s,@LTLIBINTL@,,;t t
-s,@POSUB@,po,;t t
-s,@UNISTD_H@,,;t t
-s,@BISON_LOCALEDIR@,/usr/share/locale,;t t
-s,@aclocaldir@,${datadir}/aclocal,;t t
-s,@VALGRIND@,,;t t
-s,@CXX@,g++,;t t
-s,@CXXFLAGS@,-g -O2,;t t
-s,@ac_ct_CXX@,g++,;t t
-s,@CXXDEPMODE@,depmode=gcc3,;t t
-s,@am__fastdepCXX_TRUE@,,;t t
-s,@am__fastdepCXX_FALSE@,#,;t t
-s,@BISON_CXX_WORKS@,:,;t t
-s,@BISON_CXX_WORKS_TRUE@,,;t t
-s,@BISON_CXX_WORKS_FALSE@,#,;t t
-s,@AUTOM4TE@,${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te,;t t
-s,@GCC@,yes,;t t
-s,@O0CFLAGS@,-g ,;t t
-s,@O0CXXFLAGS@,-g ,;t t
-s,@LTLIBOBJS@, dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo,;t t
-CEOF
-
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
-fi # test -n "$CONFIG_FILES"
-
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-  esac
-
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-				     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-  sed "/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[	 ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[	 ]*$//;
-}
-
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-  # Run the commands associated with the file.
-  case $ac_file in
-    tests/bison ) chmod +x tests/bison ;;
-  esac
-done
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
-ac_dB='[	 ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 # Do quote $f, to prevent DOS paths from being IFS'd.
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-  # Remove the trailing spaces.
-  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
-
-  # Handle all the #define templates only if necessary.
-  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then
-  # If there are no defines, we may have an empty if/fi
-  :
-  cat >$tmp/defines.sed <<CEOF
-/^[	 ]*#[	 ]*define/!b
-t clr
-: clr
-${ac_dA}PACKAGE_NAME${ac_dB}PACKAGE_NAME${ac_dC}"GNU Bison"${ac_dD}
-${ac_dA}PACKAGE_TARNAME${ac_dB}PACKAGE_TARNAME${ac_dC}"bison"${ac_dD}
-${ac_dA}PACKAGE_VERSION${ac_dB}PACKAGE_VERSION${ac_dC}"2.3"${ac_dD}
-${ac_dA}PACKAGE_STRING${ac_dB}PACKAGE_STRING${ac_dC}"GNU Bison 2.3"${ac_dD}
-${ac_dA}PACKAGE_BUGREPORT${ac_dB}PACKAGE_BUGREPORT${ac_dC}"bug-bison@gnu.org"${ac_dD}
-${ac_dA}PACKAGE${ac_dB}PACKAGE${ac_dC}"bison"${ac_dD}
-${ac_dA}VERSION${ac_dB}VERSION${ac_dC}"2.3"${ac_dD}
-${ac_dA}_GNU_SOURCE${ac_dB}_GNU_SOURCE${ac_dC}1${ac_dD}
-${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
-${ac_dA}HAVE_SYS_TYPES_H${ac_dB}HAVE_SYS_TYPES_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_SYS_STAT_H${ac_dB}HAVE_SYS_STAT_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STDLIB_H${ac_dB}HAVE_STDLIB_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRING_H${ac_dB}HAVE_STRING_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_MEMORY_H${ac_dB}HAVE_MEMORY_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRINGS_H${ac_dB}HAVE_STRINGS_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_INTTYPES_H${ac_dB}HAVE_INTTYPES_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STDINT_H${ac_dB}HAVE_STDINT_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
-${ac_dA}__EXTENSIONS__${ac_dB}__EXTENSIONS__${ac_dC}1${ac_dD}
-${ac_dA}_POSIX_PTHREAD_SEMANTICS${ac_dB}_POSIX_PTHREAD_SEMANTICS${ac_dC}1${ac_dD}
-${ac_dA}YYTEXT_POINTER${ac_dB}YYTEXT_POINTER${ac_dC}1${ac_dD}
-${ac_dA}M4${ac_dB}M4${ac_dC}"/usr/bin/m4"${ac_dD}
-${ac_dA}HAVE_LOCALE_H${ac_dB}HAVE_LOCALE_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_WCHAR_H${ac_dB}HAVE_WCHAR_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_WCTYPE_H${ac_dB}HAVE_WCTYPE_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE__BOOL${ac_dB}HAVE__BOOL${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STDBOOL_H${ac_dB}HAVE_STDBOOL_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_UINTPTR_T${ac_dB}HAVE_UINTPTR_T${ac_dC}1${ac_dD}
-${ac_dA}HAVE_SETLOCALE${ac_dB}HAVE_SETLOCALE${ac_dC}1${ac_dD}
-${ac_dA}HAVE_ISASCII${ac_dB}HAVE_ISASCII${ac_dC}1${ac_dD}
-${ac_dA}HAVE_ISWPRINT${ac_dB}HAVE_ISWPRINT${ac_dC}1${ac_dD}
-${ac_dA}HAVE_MBSINIT${ac_dB}HAVE_MBSINIT${ac_dC}1${ac_dD}
-${ac_dA}HAVE_SYS_WAIT_H${ac_dB}HAVE_SYS_WAIT_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DUP2${ac_dB}HAVE_DUP2${ac_dC}1${ac_dD}
-${ac_dA}HAVE_WAITPID${ac_dB}HAVE_WAITPID${ac_dC}1${ac_dD}
-${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_FORK${ac_dB}HAVE_FORK${ac_dC}1${ac_dD}
-${ac_dA}HAVE_VFORK${ac_dB}HAVE_VFORK${ac_dC}1${ac_dD}
-CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-
-  cat >$tmp/defines.sed <<CEOF
-/^[	 ]*#[	 ]*define/!b
-t clr
-: clr
-${ac_dA}HAVE_WORKING_VFORK${ac_dB}HAVE_WORKING_VFORK${ac_dC}1${ac_dD}
-${ac_dA}HAVE_WORKING_FORK${ac_dB}HAVE_WORKING_FORK${ac_dC}1${ac_dD}
-${ac_dA}HAVE_SYS_TIME_H${ac_dB}HAVE_SYS_TIME_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_SYS_TIMES_H${ac_dB}HAVE_SYS_TIMES_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_SYS_RESOURCE_H${ac_dB}HAVE_SYS_RESOURCE_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_TIMES${ac_dB}HAVE_TIMES${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_GETRUSAGE${ac_dB}HAVE_DECL_GETRUSAGE${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_TIMES${ac_dB}HAVE_DECL_TIMES${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_CLOCK${ac_dB}HAVE_DECL_CLOCK${ac_dC}0${ac_dD}
-${ac_dA}HAVE_DECL_SYSCONF${ac_dB}HAVE_DECL_SYSCONF${ac_dC}1${ac_dD}
-${ac_dA}HAVE_CLOCK_T${ac_dB}HAVE_CLOCK_T${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRUCT_TMS${ac_dB}HAVE_STRUCT_TMS${ac_dC}1${ac_dD}
-${ac_dA}FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX${ac_dB}FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX${ac_dC}0${ac_dD}
-${ac_dA}FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR${ac_dB}FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR${ac_dC}0${ac_dD}
-${ac_dA}HAVE_DECL_STRERROR_R${ac_dB}HAVE_DECL_STRERROR_R${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRERROR_R${ac_dB}HAVE_STRERROR_R${ac_dC}1${ac_dD}
-${ac_dA}STRERROR_R_CHAR_P${ac_dB}STRERROR_R_CHAR_P${ac_dC}1${ac_dD}
-${ac_dA}HAVE_GETOPT_H${ac_dB}HAVE_GETOPT_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_GETOPT_LONG_ONLY${ac_dB}HAVE_GETOPT_LONG_ONLY${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_GETENV${ac_dB}HAVE_DECL_GETENV${ac_dC}1${ac_dD}
-${ac_dA}HAVE_INTTYPES_H_WITH_UINTMAX${ac_dB}HAVE_INTTYPES_H_WITH_UINTMAX${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STDINT_H_WITH_UINTMAX${ac_dB}HAVE_STDINT_H_WITH_UINTMAX${ac_dC}1${ac_dD}
-${ac_dA}HAVE_UNSIGNED_LONG_LONG${ac_dB}HAVE_UNSIGNED_LONG_LONG${ac_dC}1${ac_dD}
-${ac_dA}HAVE_UINTMAX_T${ac_dB}HAVE_UINTMAX_T${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_STRDUP${ac_dB}HAVE_DECL_STRDUP${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_STRNDUP${ac_dB}HAVE_DECL_STRNDUP${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_STRNLEN${ac_dB}HAVE_DECL_STRNLEN${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_CLEARERR_UNLOCKED${ac_dB}HAVE_DECL_CLEARERR_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_FEOF_UNLOCKED${ac_dB}HAVE_DECL_FEOF_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_FERROR_UNLOCKED${ac_dB}HAVE_DECL_FERROR_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_FFLUSH_UNLOCKED${ac_dB}HAVE_DECL_FFLUSH_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_FGETS_UNLOCKED${ac_dB}HAVE_DECL_FGETS_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_FPUTC_UNLOCKED${ac_dB}HAVE_DECL_FPUTC_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_FPUTS_UNLOCKED${ac_dB}HAVE_DECL_FPUTS_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_FREAD_UNLOCKED${ac_dB}HAVE_DECL_FREAD_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_FWRITE_UNLOCKED${ac_dB}HAVE_DECL_FWRITE_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_GETC_UNLOCKED${ac_dB}HAVE_DECL_GETC_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_GETCHAR_UNLOCKED${ac_dB}HAVE_DECL_GETCHAR_UNLOCKED${ac_dC}1${ac_dD}
-CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-
-  cat >$tmp/defines.sed <<CEOF
-/^[	 ]*#[	 ]*define/!b
-t clr
-: clr
-${ac_dA}HAVE_DECL_PUTC_UNLOCKED${ac_dB}HAVE_DECL_PUTC_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_PUTCHAR_UNLOCKED${ac_dB}HAVE_DECL_PUTCHAR_UNLOCKED${ac_dC}1${ac_dD}
-${ac_dA}ENABLE_NLS${ac_dB}ENABLE_NLS${ac_dC}1${ac_dD}
-${ac_dA}HAVE_GETTEXT${ac_dB}HAVE_GETTEXT${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DCGETTEXT${ac_dB}HAVE_DCGETTEXT${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STDLIB_H${ac_dB}HAVE_STDLIB_H${ac_dC}1${ac_dD}
-${ac_dA}HAVE_MALLOC${ac_dB}HAVE_MALLOC${ac_dC}1${ac_dD}
-${ac_dA}HAVE_ISWCNTRL${ac_dB}HAVE_ISWCNTRL${ac_dC}1${ac_dD}
-${ac_dA}HAVE_WCWIDTH${ac_dB}HAVE_WCWIDTH${ac_dC}1${ac_dD}
-${ac_dA}HAVE_MBRTOWC${ac_dB}HAVE_MBRTOWC${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_WCWIDTH${ac_dB}HAVE_DECL_WCWIDTH${ac_dC}1${ac_dD}
-${ac_dA}HAVE_DECL_MBSWIDTH_IN_WCHAR_H${ac_dB}HAVE_DECL_MBSWIDTH_IN_WCHAR_H${ac_dC}0${ac_dD}
-${ac_dA}HAVE_MBSTATE_T${ac_dB}HAVE_MBSTATE_T${ac_dC}1${ac_dD}
-${ac_dA}HAVE_OBSTACK${ac_dB}HAVE_OBSTACK${ac_dC}1${ac_dD}
-${ac_dA}HAVE_MBSTATE_T${ac_dB}HAVE_MBSTATE_T${ac_dC}1${ac_dD}
-${ac_dA}HAVE_MBRTOWC${ac_dB}HAVE_MBRTOWC${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STPCPY${ac_dB}HAVE_STPCPY${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRDUP${ac_dB}HAVE_STRDUP${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRERROR${ac_dB}HAVE_STRERROR${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRNDUP${ac_dB}HAVE_STRNDUP${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRTOL${ac_dB}HAVE_STRTOL${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRTOUL${ac_dB}HAVE_STRTOUL${ac_dC}1${ac_dD}
-${ac_dA}HAVE_STRVERSCMP${ac_dB}HAVE_STRVERSCMP${ac_dC}1${ac_dD}
-${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
-${ac_dA}USE_UNLOCKED_IO${ac_dB}USE_UNLOCKED_IO${ac_dC}1${ac_dD}
-${ac_dA}YYENABLE_NLS${ac_dB}YYENABLE_NLS${ac_dC}1${ac_dD}
-CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-
-  fi # grep
-
-  # Handle all the #undef templates
-  cat >$tmp/undefs.sed <<CEOF
-/^[	 ]*#[	 ]*undef/!b
-t clr
-: clr
-${ac_uA}PACKAGE_NAME${ac_uB}PACKAGE_NAME${ac_uC}"GNU Bison"${ac_uD}
-${ac_uA}PACKAGE_TARNAME${ac_uB}PACKAGE_TARNAME${ac_uC}"bison"${ac_uD}
-${ac_uA}PACKAGE_VERSION${ac_uB}PACKAGE_VERSION${ac_uC}"2.3"${ac_uD}
-${ac_uA}PACKAGE_STRING${ac_uB}PACKAGE_STRING${ac_uC}"GNU Bison 2.3"${ac_uD}
-${ac_uA}PACKAGE_BUGREPORT${ac_uB}PACKAGE_BUGREPORT${ac_uC}"bug-bison@gnu.org"${ac_uD}
-${ac_uA}PACKAGE${ac_uB}PACKAGE${ac_uC}"bison"${ac_uD}
-${ac_uA}VERSION${ac_uB}VERSION${ac_uC}"2.3"${ac_uD}
-${ac_uA}_GNU_SOURCE${ac_uB}_GNU_SOURCE${ac_uC}1${ac_uD}
-${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
-${ac_uA}HAVE_SYS_TYPES_H${ac_uB}HAVE_SYS_TYPES_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_SYS_STAT_H${ac_uB}HAVE_SYS_STAT_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STDLIB_H${ac_uB}HAVE_STDLIB_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRING_H${ac_uB}HAVE_STRING_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_MEMORY_H${ac_uB}HAVE_MEMORY_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRINGS_H${ac_uB}HAVE_STRINGS_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_INTTYPES_H${ac_uB}HAVE_INTTYPES_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STDINT_H${ac_uB}HAVE_STDINT_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
-${ac_uA}__EXTENSIONS__${ac_uB}__EXTENSIONS__${ac_uC}1${ac_uD}
-${ac_uA}_POSIX_PTHREAD_SEMANTICS${ac_uB}_POSIX_PTHREAD_SEMANTICS${ac_uC}1${ac_uD}
-${ac_uA}YYTEXT_POINTER${ac_uB}YYTEXT_POINTER${ac_uC}1${ac_uD}
-${ac_uA}M4${ac_uB}M4${ac_uC}"/usr/bin/m4"${ac_uD}
-${ac_uA}HAVE_LOCALE_H${ac_uB}HAVE_LOCALE_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_WCHAR_H${ac_uB}HAVE_WCHAR_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_WCTYPE_H${ac_uB}HAVE_WCTYPE_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE__BOOL${ac_uB}HAVE__BOOL${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STDBOOL_H${ac_uB}HAVE_STDBOOL_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_UINTPTR_T${ac_uB}HAVE_UINTPTR_T${ac_uC}1${ac_uD}
-${ac_uA}HAVE_SETLOCALE${ac_uB}HAVE_SETLOCALE${ac_uC}1${ac_uD}
-${ac_uA}HAVE_ISASCII${ac_uB}HAVE_ISASCII${ac_uC}1${ac_uD}
-${ac_uA}HAVE_ISWPRINT${ac_uB}HAVE_ISWPRINT${ac_uC}1${ac_uD}
-${ac_uA}HAVE_MBSINIT${ac_uB}HAVE_MBSINIT${ac_uC}1${ac_uD}
-${ac_uA}HAVE_SYS_WAIT_H${ac_uB}HAVE_SYS_WAIT_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DUP2${ac_uB}HAVE_DUP2${ac_uC}1${ac_uD}
-${ac_uA}HAVE_WAITPID${ac_uB}HAVE_WAITPID${ac_uC}1${ac_uD}
-${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_FORK${ac_uB}HAVE_FORK${ac_uC}1${ac_uD}
-${ac_uA}HAVE_VFORK${ac_uB}HAVE_VFORK${ac_uC}1${ac_uD}
-CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-
-  cat >$tmp/undefs.sed <<CEOF
-/^[	 ]*#[	 ]*undef/!b
-t clr
-: clr
-${ac_uA}HAVE_WORKING_VFORK${ac_uB}HAVE_WORKING_VFORK${ac_uC}1${ac_uD}
-${ac_uA}HAVE_WORKING_FORK${ac_uB}HAVE_WORKING_FORK${ac_uC}1${ac_uD}
-${ac_uA}HAVE_SYS_TIME_H${ac_uB}HAVE_SYS_TIME_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_SYS_TIMES_H${ac_uB}HAVE_SYS_TIMES_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_SYS_RESOURCE_H${ac_uB}HAVE_SYS_RESOURCE_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_TIMES${ac_uB}HAVE_TIMES${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_GETRUSAGE${ac_uB}HAVE_DECL_GETRUSAGE${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_TIMES${ac_uB}HAVE_DECL_TIMES${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_CLOCK${ac_uB}HAVE_DECL_CLOCK${ac_uC}0${ac_uD}
-${ac_uA}HAVE_DECL_SYSCONF${ac_uB}HAVE_DECL_SYSCONF${ac_uC}1${ac_uD}
-${ac_uA}HAVE_CLOCK_T${ac_uB}HAVE_CLOCK_T${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRUCT_TMS${ac_uB}HAVE_STRUCT_TMS${ac_uC}1${ac_uD}
-${ac_uA}FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX${ac_uB}FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX${ac_uC}0${ac_uD}
-${ac_uA}FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR${ac_uB}FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR${ac_uC}0${ac_uD}
-${ac_uA}HAVE_DECL_STRERROR_R${ac_uB}HAVE_DECL_STRERROR_R${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRERROR_R${ac_uB}HAVE_STRERROR_R${ac_uC}1${ac_uD}
-${ac_uA}STRERROR_R_CHAR_P${ac_uB}STRERROR_R_CHAR_P${ac_uC}1${ac_uD}
-${ac_uA}HAVE_GETOPT_H${ac_uB}HAVE_GETOPT_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_GETOPT_LONG_ONLY${ac_uB}HAVE_GETOPT_LONG_ONLY${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_GETENV${ac_uB}HAVE_DECL_GETENV${ac_uC}1${ac_uD}
-${ac_uA}HAVE_INTTYPES_H_WITH_UINTMAX${ac_uB}HAVE_INTTYPES_H_WITH_UINTMAX${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STDINT_H_WITH_UINTMAX${ac_uB}HAVE_STDINT_H_WITH_UINTMAX${ac_uC}1${ac_uD}
-${ac_uA}HAVE_UNSIGNED_LONG_LONG${ac_uB}HAVE_UNSIGNED_LONG_LONG${ac_uC}1${ac_uD}
-${ac_uA}HAVE_UINTMAX_T${ac_uB}HAVE_UINTMAX_T${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_STRDUP${ac_uB}HAVE_DECL_STRDUP${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_STRNDUP${ac_uB}HAVE_DECL_STRNDUP${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_STRNLEN${ac_uB}HAVE_DECL_STRNLEN${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_CLEARERR_UNLOCKED${ac_uB}HAVE_DECL_CLEARERR_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_FEOF_UNLOCKED${ac_uB}HAVE_DECL_FEOF_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_FERROR_UNLOCKED${ac_uB}HAVE_DECL_FERROR_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_FFLUSH_UNLOCKED${ac_uB}HAVE_DECL_FFLUSH_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_FGETS_UNLOCKED${ac_uB}HAVE_DECL_FGETS_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_FPUTC_UNLOCKED${ac_uB}HAVE_DECL_FPUTC_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_FPUTS_UNLOCKED${ac_uB}HAVE_DECL_FPUTS_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_FREAD_UNLOCKED${ac_uB}HAVE_DECL_FREAD_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_FWRITE_UNLOCKED${ac_uB}HAVE_DECL_FWRITE_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_GETC_UNLOCKED${ac_uB}HAVE_DECL_GETC_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_GETCHAR_UNLOCKED${ac_uB}HAVE_DECL_GETCHAR_UNLOCKED${ac_uC}1${ac_uD}
-CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-
-  cat >$tmp/undefs.sed <<CEOF
-/^[	 ]*#[	 ]*undef/!b
-t clr
-: clr
-${ac_uA}HAVE_DECL_PUTC_UNLOCKED${ac_uB}HAVE_DECL_PUTC_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_PUTCHAR_UNLOCKED${ac_uB}HAVE_DECL_PUTCHAR_UNLOCKED${ac_uC}1${ac_uD}
-${ac_uA}ENABLE_NLS${ac_uB}ENABLE_NLS${ac_uC}1${ac_uD}
-${ac_uA}HAVE_GETTEXT${ac_uB}HAVE_GETTEXT${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DCGETTEXT${ac_uB}HAVE_DCGETTEXT${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STDLIB_H${ac_uB}HAVE_STDLIB_H${ac_uC}1${ac_uD}
-${ac_uA}HAVE_MALLOC${ac_uB}HAVE_MALLOC${ac_uC}1${ac_uD}
-${ac_uA}HAVE_ISWCNTRL${ac_uB}HAVE_ISWCNTRL${ac_uC}1${ac_uD}
-${ac_uA}HAVE_WCWIDTH${ac_uB}HAVE_WCWIDTH${ac_uC}1${ac_uD}
-${ac_uA}HAVE_MBRTOWC${ac_uB}HAVE_MBRTOWC${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_WCWIDTH${ac_uB}HAVE_DECL_WCWIDTH${ac_uC}1${ac_uD}
-${ac_uA}HAVE_DECL_MBSWIDTH_IN_WCHAR_H${ac_uB}HAVE_DECL_MBSWIDTH_IN_WCHAR_H${ac_uC}0${ac_uD}
-${ac_uA}HAVE_MBSTATE_T${ac_uB}HAVE_MBSTATE_T${ac_uC}1${ac_uD}
-${ac_uA}HAVE_OBSTACK${ac_uB}HAVE_OBSTACK${ac_uC}1${ac_uD}
-${ac_uA}HAVE_MBSTATE_T${ac_uB}HAVE_MBSTATE_T${ac_uC}1${ac_uD}
-${ac_uA}HAVE_MBRTOWC${ac_uB}HAVE_MBRTOWC${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STPCPY${ac_uB}HAVE_STPCPY${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRDUP${ac_uB}HAVE_STRDUP${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRERROR${ac_uB}HAVE_STRERROR${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRNDUP${ac_uB}HAVE_STRNDUP${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRTOL${ac_uB}HAVE_STRTOL${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRTOUL${ac_uB}HAVE_STRTOUL${ac_uC}1${ac_uD}
-${ac_uA}HAVE_STRVERSCMP${ac_uB}HAVE_STRVERSCMP${ac_uC}1${ac_uD}
-${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
-${ac_uA}USE_UNLOCKED_IO${ac_uB}USE_UNLOCKED_IO${ac_uC}1${ac_uD}
-${ac_uA}YYENABLE_NLS${ac_uB}YYENABLE_NLS${ac_uC}1${ac_uD}
-s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    echo "/* Generated by configure.  */" >$tmp/config.h
-  else
-    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
-  fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
-  if test x"$ac_file" != x-; then
-    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-      { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
-    fi
-  else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
-  fi
-# Compute $ac_file's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $ac_file | $ac_file:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
-$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X$ac_file : 'X\(//\)[^/]' \| \
-	 X$ac_file : 'X\(//\)$' \| \
-	 X$ac_file : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X$ac_file |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`/stamp-h$_am_stamp_count
-done
-
-#
-# CONFIG_COMMANDS section.
-#
-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
-  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
-  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
-  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_dest" : 'X\(//\)[^/]' \| \
-	 X"$ac_dest" : 'X\(//\)$' \| \
-	 X"$ac_dest" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-
-  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-echo "$as_me: executing $ac_dest commands" >&6;}
-  case $ac_dest in
-    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
-  # Strip MF so we end up with the name of the file.
-  mf=`echo "$mf" | sed -e 's/:.*$//'`
-  # Check whether this is an Automake generated Makefile or not.
-  # We used to match only the files named `Makefile.in', but
-  # some people rename them; so instead we look at the file content.
-  # Grep'ing the first line is not enough: some people post-process
-  # each Makefile.in and add a new line on top of each file to say so.
-  # So let's grep whole file.
-  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-    dirpart=`(dirname "$mf") 2>/dev/null ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$mf" : 'X\(//\)[^/]' \| \
-	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  else
-    continue
-  fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`(dirname "$file") 2>/dev/null ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$file" : 'X\(//\)[^/]' \| \
-	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    { if $as_mkdir_p; then
-    mkdir -p $dirpart/$fdir
-  else
-    as_dir=$dirpart/$fdir
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
-  done
-done
- ;;
-    default-1 )
-    for ac_file in $CONFIG_FILES; do
-      # Support "outfile[:infile[:infile...]]"
-      case "$ac_file" in
-        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-      esac
-      # PO directories have a Makefile.in generated from Makefile.in.in.
-      case "$ac_file" in */Makefile.in)
-        # Adjust a relative srcdir.
-        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
-        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
-        # In autoconf-2.13 it is called $ac_given_srcdir.
-        # In autoconf-2.50 it is called $srcdir.
-        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
-        case "$ac_given_srcdir" in
-          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
-          /*) top_srcdir="$ac_given_srcdir" ;;
-          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
-        esac
-        # Treat a directory as a PO directory if and only if it has a
-        # POTFILES.in file. This allows packages to have multiple PO
-        # directories under different names or in different locations.
-        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
-          rm -f "$ac_dir/POTFILES"
-          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
-          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
-          POMAKEFILEDEPS="POTFILES.in"
-          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
-          # on $ac_dir but don't depend on user-specified configuration
-          # parameters.
-          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
-            # The LINGUAS file contains the set of available languages.
-            if test -n "$OBSOLETE_ALL_LINGUAS"; then
-              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
-            fi
-            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-            # Hide the ALL_LINGUAS assigment from automake.
-            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
-            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
-          else
-            # The set of available languages was given in configure.in.
-            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
-          fi
-          # Compute POFILES
-          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
-          # Compute UPDATEPOFILES
-          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
-          # Compute DUMMYPOFILES
-          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
-          # Compute GMOFILES
-          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
-          case "$ac_given_srcdir" in
-            .) srcdirpre= ;;
-            *) srcdirpre='$(srcdir)/' ;;
-          esac
-          POFILES=
-          UPDATEPOFILES=
-          DUMMYPOFILES=
-          GMOFILES=
-          for lang in $ALL_LINGUAS; do
-            POFILES="$POFILES $srcdirpre$lang.po"
-            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
-            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
-            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
-          done
-          # CATALOGS depends on both $ac_dir and the user's LINGUAS
-          # environment variable.
-          INST_LINGUAS=
-          if test -n "$ALL_LINGUAS"; then
-            for presentlang in $ALL_LINGUAS; do
-              useit=no
-              if test "%UNSET%" != "$LINGUAS"; then
-                desiredlanguages="$LINGUAS"
-              else
-                desiredlanguages="$ALL_LINGUAS"
-              fi
-              for desiredlang in $desiredlanguages; do
-                # Use the presentlang catalog if desiredlang is
-                #   a. equal to presentlang, or
-                #   b. a variant of presentlang (because in this case,
-                #      presentlang can be used as a fallback for messages
-                #      which are not translated in the desiredlang catalog).
-                case "$desiredlang" in
-                  "$presentlang"*) useit=yes;;
-                esac
-              done
-              if test $useit = yes; then
-                INST_LINGUAS="$INST_LINGUAS $presentlang"
-              fi
-            done
-          fi
-          CATALOGS=
-          if test -n "$INST_LINGUAS"; then
-            for lang in $INST_LINGUAS; do
-              CATALOGS="$CATALOGS $lang.gmo"
-            done
-          fi
-          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
-          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
-          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
-            if test -f "$f"; then
-              case "$f" in
-                *.orig | *.bak | *~) ;;
-                *) cat "$f" >> "$ac_dir/Makefile" ;;
-              esac
-            fi
-          done
-        fi
-        ;;
-      esac
-    done ;;
-    tests/atconfig ) cat >tests/atconfig <<ATEOF
-# Configurable variable values for building test suites.
-# Generated by $0.
-# Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# The test suite will define top_srcdir=$at_top_srcdir/../.. etc.
-at_testdir='tests'
-abs_builddir='$ac_abs_builddir'
-at_srcdir='$ac_srcdir'
-abs_srcdir='$ac_abs_srcdir'
-at_top_srcdir='$ac_top_srcdir'
-abs_top_srcdir='$ac_abs_top_srcdir'
-at_top_builddir='$ac_top_builddir'
-abs_top_builddir='$ac_abs_top_builddir'
-
-AUTOTEST_PATH='tests'
-
-SHELL=\${CONFIG_SHELL-'$SHELL'}
-ATEOF
- ;;
-  esac
-done
-
-{ (exit 0); exit 0; }
diff --git a/configure b/configure
index 40270df..29c9b62 100755
--- a/configure
+++ b/configure
@@ -1,83 +1,462 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for GNU Bison 2.3.
+# Generated by GNU Autoconf 2.69 for GNU Bison 2.7.
 #
 # Report bugs to <bug-bison@gnu.org>.
 #
-# Copyright (C) 2003 Free Software Foundation, Inc.
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
+  setopt NO_GLOB_SUBST
 else
-  as_unset=false
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
 
 
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+# 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
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+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"
+  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'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+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
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-bison@gnu.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $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
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
 else
   as_expr=false
 fi
 
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
   as_basename=basename
 else
   as_basename=false
 fi
 
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
-
-# PATH needs CR, and LINENO needs CR and PATH.
 # Avoid depending upon Character Ranges.
 as_cr_letters='abcdefghijklmnopqrstuvwxyz'
 as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
@@ -85,146 +464,91 @@
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
 
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
     sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
       N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
       t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
+      s/-\n.*//
     ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
+  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 sensible to this).
-  . ./$as_me.lineno
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
   # Exit status is that of the last command.
   exit
 }
 
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
     as_ln_s='ln -s'
+    # ... 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'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
   fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
 fi
 
-as_executable_p="test -f"
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # 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'"
@@ -233,91 +557,1286 @@
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
-exec 6>&1
-
 #
 # Initializations.
 #
 ac_default_prefix=/usr/local
+ac_clean_files=
 ac_config_libobj_dir=.
+LIBOBJS=
 cross_compiling=no
 subdirs=
 MFLAGS=
 MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
 
 # Identity of this package.
 PACKAGE_NAME='GNU Bison'
 PACKAGE_TARNAME='bison'
-PACKAGE_VERSION='2.3'
-PACKAGE_STRING='GNU Bison 2.3'
+PACKAGE_VERSION='2.7'
+PACKAGE_STRING='GNU Bison 2.7'
 PACKAGE_BUGREPORT='bug-bison@gnu.org'
+PACKAGE_URL='http://www.gnu.org/software/bison/'
 
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
-#if HAVE_SYS_TYPES_H
+#ifdef HAVE_SYS_TYPES_H
 # include <sys/types.h>
 #endif
-#if HAVE_SYS_STAT_H
+#ifdef HAVE_SYS_STAT_H
 # include <sys/stat.h>
 #endif
-#if STDC_HEADERS
+#ifdef STDC_HEADERS
 # include <stdlib.h>
 # include <stddef.h>
 #else
-# if HAVE_STDLIB_H
+# ifdef HAVE_STDLIB_H
 #  include <stdlib.h>
 # endif
 #endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
 #  include <memory.h>
 # endif
 # include <string.h>
 #endif
-#if HAVE_STRINGS_H
+#ifdef HAVE_STRINGS_H
 # include <strings.h>
 #endif
-#if HAVE_INTTYPES_H
+#ifdef HAVE_INTTYPES_H
 # include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
 #endif
-#if HAVE_UNISTD_H
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif"
 
-gl_header_list=
-gl_func_list=
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP WARNING_CFLAGS WERROR_CFLAGS WARNING_CXXFLAGS YACC_SCRIPT YACC_LIBRARY LEX LEXLIB LEX_OUTPUT_ROOT YACC RANLIB ac_ct_RANLIB M4 STDBOOL_H HAVE__BOOL LIBOBJS GETOPT_H MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE build build_cpu build_vendor build_os host host_cpu host_vendor host_os INTL_MACOSX_LIBS LIBICONV LTLIBICONV INTLLIBS LIBINTL LTLIBINTL POSUB UNISTD_H BISON_LOCALEDIR aclocaldir VALGRIND CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE BISON_CXX_WORKS BISON_CXX_WORKS_TRUE BISON_CXX_WORKS_FALSE AUTOM4TE GCC O0CFLAGS O0CXXFLAGS LTLIBOBJS'
+gl_use_threads_default=
+ac_header_list=
+ac_func_list=
+gl_getopt_required=POSIX
+gl_getopt_required=POSIX
+gt_needs=
+ac_subst_vars='gltests_LTLIBOBJS
+gltests_LIBOBJS
+gl_LTLIBOBJS
+gl_LIBOBJS
+CONFIG_INCLUDE
+am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+HAVE_JIKES
+HAVE_JAVAC
+HAVE_GCJ_C
+HAVE_JAVAC_ENVVAR
+CONF_JAVAC
+HAVE_JIKES_IN_PATH
+HAVE_JAVAC_IN_PATH
+HAVE_GCJ_IN_PATH
+HAVE_JVIEW
+HAVE_JRE
+HAVE_JAVA
+HAVE_GIJ
+HAVE_JAVA_ENVVAR
+CLASSPATH_SEPARATOR
+CLASSPATH
+CONF_JAVA
+HAVE_JVIEW_IN_PATH
+HAVE_JRE_IN_PATH
+HAVE_JAVA_IN_PATH
+HAVE_GIJ_IN_PATH
+GCC
+AUTOM4TE
+VALGRIND_PREBISON
+VALGRIND
+aclocaldir
+BISON_LOCALEDIR
+POSUB
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+LIBBISON_LTLIBDEPS
+LIBBISON_LIBDEPS
+gltests_WITNESS
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
+NEXT_WCHAR_H
+LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE
+LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE
+LIBUNISTRING_UNIWIDTH_H
+LIBUNISTRING_UNITYPES_H
+HAVE_UNISTD_H
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H
+NEXT_UNISTD_H
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC
+TIME_H_DEFINES_STRUCT_TIMESPEC
+NEXT_AS_FIRST_DIRECTIVE_TIME_H
+NEXT_TIME_H
+REPLACE_TIMEGM
+REPLACE_NANOSLEEP
+REPLACE_MKTIME
+REPLACE_LOCALTIME_R
+HAVE_TIMEGM
+HAVE_STRPTIME
+HAVE_NANOSLEEP
+HAVE_DECL_LOCALTIME_R
+GNULIB_TIME_R
+GNULIB_TIMEGM
+GNULIB_STRPTIME
+GNULIB_NANOSLEEP
+GNULIB_MKTIME
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H
+NEXT_SYS_WAIT_H
+GNULIB_WAITPID
+WINDOWS_64_BIT_OFF_T
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H
+NEXT_SYS_TYPES_H
+NEXT_AS_FIRST_DIRECTIVE_STRING_H
+NEXT_STRING_H
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H
+NEXT_STDLIB_H
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H
+NEXT_STDIO_H
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
+NEXT_STDDEF_H
+GL_GENERATE_STDDEF_H_FALSE
+GL_GENERATE_STDDEF_H_TRUE
+STDDEF_H
+HAVE_WCHAR_T
+REPLACE_NULL
+HAVE__BOOL
+GL_GENERATE_STDBOOL_H_FALSE
+GL_GENERATE_STDBOOL_H_TRUE
+STDBOOL_H
+HAVE_SPAWN_H
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H
+NEXT_SPAWN_H
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H
+NEXT_SIGNAL_H
+GL_GENERATE_SCHED_H_FALSE
+GL_GENERATE_SCHED_H_TRUE
+SCHED_H
+HAVE_STRUCT_SCHED_PARAM
+HAVE_SCHED_H
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H
+NEXT_SCHED_H
+REPLACE_RAISE
+REPLACE_PTHREAD_SIGMASK
+HAVE_SIGHANDLER_T
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T
+HAVE_STRUCT_SIGACTION_SA_SIGACTION
+HAVE_SIGACTION
+HAVE_SIGINFO_T
+HAVE_SIGSET_T
+HAVE_RAISE
+HAVE_PTHREAD_SIGMASK
+HAVE_POSIX_SIGNALBLOCKING
+GNULIB_SIGACTION
+GNULIB_SIGPROCMASK
+GNULIB_SIGNAL_H_SIGPIPE
+GNULIB_RAISE
+GNULIB_PTHREAD_SIGMASK
+ASM_SYMBOL_PREFIX
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+REPLACE_POSIX_SPAWN
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T
+HAVE_POSIX_SPAWNATTR_T
+HAVE_POSIX_SPAWN
+GNULIB_POSIX_SPAWNATTR_DESTROY
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM
+GNULIB_POSIX_SPAWNATTR_SETPGROUP
+GNULIB_POSIX_SPAWNATTR_GETPGROUP
+GNULIB_POSIX_SPAWNATTR_SETFLAGS
+GNULIB_POSIX_SPAWNATTR_GETFLAGS
+GNULIB_POSIX_SPAWNATTR_INIT
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT
+GNULIB_POSIX_SPAWNP
+GNULIB_POSIX_SPAWN
+UNDEFINE_STRTOK_R
+REPLACE_STRTOK_R
+REPLACE_STRSIGNAL
+REPLACE_STRNLEN
+REPLACE_STRNDUP
+REPLACE_STRNCAT
+REPLACE_STRERROR_R
+REPLACE_STRERROR
+REPLACE_STRCHRNUL
+REPLACE_STRCASESTR
+REPLACE_STRSTR
+REPLACE_STRDUP
+REPLACE_STPNCPY
+REPLACE_MEMMEM
+REPLACE_MEMCHR
+HAVE_STRVERSCMP
+HAVE_DECL_STRSIGNAL
+HAVE_DECL_STRERROR_R
+HAVE_DECL_STRTOK_R
+HAVE_STRCASESTR
+HAVE_STRSEP
+HAVE_STRPBRK
+HAVE_DECL_STRNLEN
+HAVE_DECL_STRNDUP
+HAVE_DECL_STRDUP
+HAVE_STRCHRNUL
+HAVE_STPNCPY
+HAVE_STPCPY
+HAVE_RAWMEMCHR
+HAVE_DECL_MEMRCHR
+HAVE_MEMPCPY
+HAVE_DECL_MEMMEM
+HAVE_MEMCHR
+HAVE_FFSLL
+HAVE_FFSL
+HAVE_MBSLEN
+GNULIB_STRVERSCMP
+GNULIB_STRSIGNAL
+GNULIB_STRERROR_R
+GNULIB_STRERROR
+GNULIB_MBSTOK_R
+GNULIB_MBSSEP
+GNULIB_MBSSPN
+GNULIB_MBSPBRK
+GNULIB_MBSCSPN
+GNULIB_MBSCASESTR
+GNULIB_MBSPCASECMP
+GNULIB_MBSNCASECMP
+GNULIB_MBSCASECMP
+GNULIB_MBSSTR
+GNULIB_MBSRCHR
+GNULIB_MBSCHR
+GNULIB_MBSNLEN
+GNULIB_MBSLEN
+GNULIB_STRTOK_R
+GNULIB_STRCASESTR
+GNULIB_STRSTR
+GNULIB_STRSEP
+GNULIB_STRPBRK
+GNULIB_STRNLEN
+GNULIB_STRNDUP
+GNULIB_STRNCAT
+GNULIB_STRDUP
+GNULIB_STRCHRNUL
+GNULIB_STPNCPY
+GNULIB_STPCPY
+GNULIB_RAWMEMCHR
+GNULIB_MEMRCHR
+GNULIB_MEMPCPY
+GNULIB_MEMMEM
+GNULIB_MEMCHR
+GNULIB_FFSLL
+GNULIB_FFSL
+LOCALE_FR_UTF8
+LOCALE_ZH_CN
+LOCALE_JA
+REPLACE_WCSWIDTH
+REPLACE_WCWIDTH
+REPLACE_WCSNRTOMBS
+REPLACE_WCSRTOMBS
+REPLACE_WCRTOMB
+REPLACE_MBSNRTOWCS
+REPLACE_MBSRTOWCS
+REPLACE_MBRLEN
+REPLACE_MBRTOWC
+REPLACE_MBSINIT
+REPLACE_WCTOB
+REPLACE_BTOWC
+REPLACE_MBSTATE_T
+HAVE_DECL_WCWIDTH
+HAVE_DECL_WCTOB
+HAVE_WCSWIDTH
+HAVE_WCSTOK
+HAVE_WCSSTR
+HAVE_WCSPBRK
+HAVE_WCSSPN
+HAVE_WCSCSPN
+HAVE_WCSRCHR
+HAVE_WCSCHR
+HAVE_WCSDUP
+HAVE_WCSXFRM
+HAVE_WCSCOLL
+HAVE_WCSNCASECMP
+HAVE_WCSCASECMP
+HAVE_WCSNCMP
+HAVE_WCSCMP
+HAVE_WCSNCAT
+HAVE_WCSCAT
+HAVE_WCPNCPY
+HAVE_WCSNCPY
+HAVE_WCPCPY
+HAVE_WCSCPY
+HAVE_WCSNLEN
+HAVE_WCSLEN
+HAVE_WMEMSET
+HAVE_WMEMMOVE
+HAVE_WMEMCPY
+HAVE_WMEMCMP
+HAVE_WMEMCHR
+HAVE_WCSNRTOMBS
+HAVE_WCSRTOMBS
+HAVE_WCRTOMB
+HAVE_MBSNRTOWCS
+HAVE_MBSRTOWCS
+HAVE_MBRLEN
+HAVE_MBRTOWC
+HAVE_MBSINIT
+HAVE_BTOWC
+GNULIB_WCSWIDTH
+GNULIB_WCSTOK
+GNULIB_WCSSTR
+GNULIB_WCSPBRK
+GNULIB_WCSSPN
+GNULIB_WCSCSPN
+GNULIB_WCSRCHR
+GNULIB_WCSCHR
+GNULIB_WCSDUP
+GNULIB_WCSXFRM
+GNULIB_WCSCOLL
+GNULIB_WCSNCASECMP
+GNULIB_WCSCASECMP
+GNULIB_WCSNCMP
+GNULIB_WCSCMP
+GNULIB_WCSNCAT
+GNULIB_WCSCAT
+GNULIB_WCPNCPY
+GNULIB_WCSNCPY
+GNULIB_WCPCPY
+GNULIB_WCSCPY
+GNULIB_WCSNLEN
+GNULIB_WCSLEN
+GNULIB_WMEMSET
+GNULIB_WMEMMOVE
+GNULIB_WMEMCPY
+GNULIB_WMEMCMP
+GNULIB_WMEMCHR
+GNULIB_WCWIDTH
+GNULIB_WCSNRTOMBS
+GNULIB_WCSRTOMBS
+GNULIB_WCRTOMB
+GNULIB_MBSNRTOWCS
+GNULIB_MBSRTOWCS
+GNULIB_MBRLEN
+GNULIB_MBRTOWC
+GNULIB_MBSINIT
+GNULIB_WCTOB
+GNULIB_BTOWC
+NEXT_AS_FIRST_DIRECTIVE_MATH_H
+NEXT_MATH_H
+LTLIBMULTITHREAD
+LIBMULTITHREAD
+LTLIBTHREAD
+LIBTHREAD
+LIBPTH_PREFIX
+LTLIBPTH
+LIBPTH
+LOCALCHARSET_TESTS_ENVIRONMENT
+GLIBC21
+LDEXPL_LIBM
+LDEXP_LIBM
+REPLACE_TOWLOWER
+REPLACE_ISWCNTRL
+HAVE_WCTYPE_H
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H
+NEXT_WCTYPE_H
+HAVE_WINT_T
+HAVE_ISWCNTRL
+REPLACE_ISWBLANK
+HAVE_WCTRANS_T
+HAVE_WCTYPE_T
+HAVE_ISWBLANK
+GNULIB_TOWCTRANS
+GNULIB_WCTRANS
+GNULIB_ISWCTYPE
+GNULIB_WCTYPE
+GNULIB_ISWBLANK
+ISNAN_LIBM
+ISNANL_LIBM
+ISNAND_LIBM
+ISNANF_LIBM
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H
+NEXT_INTTYPES_H
+UINT64_MAX_EQ_ULONG_MAX
+UINT32_MAX_LT_UINTMAX_MAX
+PRIPTR_PREFIX
+PRI_MACROS_BROKEN
+INT64_MAX_EQ_LONG_MAX
+INT32_MAX_LT_INTMAX_MAX
+REPLACE_STRTOIMAX
+HAVE_DECL_STRTOUMAX
+HAVE_DECL_STRTOIMAX
+HAVE_DECL_IMAXDIV
+HAVE_DECL_IMAXABS
+GNULIB_STRTOUMAX
+GNULIB_STRTOIMAX
+GNULIB_IMAXDIV
+GNULIB_IMAXABS
+GL_GENERATE_STDINT_H_FALSE
+GL_GENERATE_STDINT_H_TRUE
+STDINT_H
+WINT_T_SUFFIX
+WCHAR_T_SUFFIX
+SIG_ATOMIC_T_SUFFIX
+SIZE_T_SUFFIX
+PTRDIFF_T_SUFFIX
+HAVE_SIGNED_WINT_T
+HAVE_SIGNED_WCHAR_T
+HAVE_SIGNED_SIG_ATOMIC_T
+BITSIZEOF_WINT_T
+BITSIZEOF_WCHAR_T
+BITSIZEOF_SIG_ATOMIC_T
+BITSIZEOF_SIZE_T
+BITSIZEOF_PTRDIFF_T
+HAVE_SYS_BITYPES_H
+HAVE_SYS_INTTYPES_H
+HAVE_STDINT_H
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H
+NEXT_STDINT_H
+HAVE_SYS_TYPES_H
+HAVE_INTTYPES_H
+HAVE_WCHAR_H
+HAVE_UNSIGNED_LONG_LONG_INT
+HAVE_LONG_LONG_INT
+LTLIBINTL
+LIBINTL
+GNULIB_GL_UNISTD_H_GETOPT
+GETOPT_H
+HAVE_GETOPT_H
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H
+NEXT_GETOPT_H
+WINDOWS_64_BIT_ST_SIZE
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H
+NEXT_SYS_STAT_H
+REPLACE_UTIMENSAT
+REPLACE_STAT
+REPLACE_MKNOD
+REPLACE_MKFIFO
+REPLACE_MKDIR
+REPLACE_LSTAT
+REPLACE_FUTIMENS
+REPLACE_FSTATAT
+REPLACE_FSTAT
+HAVE_UTIMENSAT
+HAVE_MKNODAT
+HAVE_MKNOD
+HAVE_MKFIFOAT
+HAVE_MKFIFO
+HAVE_MKDIRAT
+HAVE_LSTAT
+HAVE_LCHMOD
+HAVE_FUTIMENS
+HAVE_FSTATAT
+HAVE_FCHMODAT
+GNULIB_UTIMENSAT
+GNULIB_STAT
+GNULIB_MKNODAT
+GNULIB_MKNOD
+GNULIB_MKFIFOAT
+GNULIB_MKFIFO
+GNULIB_MKDIRAT
+GNULIB_LSTAT
+GNULIB_LCHMOD
+GNULIB_FUTIMENS
+GNULIB_FSTATAT
+GNULIB_FSTAT
+GNULIB_FCHMODAT
+REPLACE_TRUNCL
+REPLACE_TRUNCF
+REPLACE_TRUNC
+REPLACE_SQRTL
+REPLACE_SIGNBIT_USING_GCC
+REPLACE_SIGNBIT
+REPLACE_ROUNDL
+REPLACE_ROUNDF
+REPLACE_ROUND
+REPLACE_REMAINDERL
+REPLACE_REMAINDERF
+REPLACE_REMAINDER
+REPLACE_NAN
+REPLACE_MODFL
+REPLACE_MODFF
+REPLACE_MODF
+REPLACE_LOGBL
+REPLACE_LOGBF
+REPLACE_LOGB
+REPLACE_LOG2L
+REPLACE_LOG2F
+REPLACE_LOG2
+REPLACE_LOG1PL
+REPLACE_LOG1PF
+REPLACE_LOG1P
+REPLACE_LOG10L
+REPLACE_LOG10F
+REPLACE_LOG10
+REPLACE_LOGL
+REPLACE_LOGF
+REPLACE_LOG
+REPLACE_LDEXPL
+REPLACE_ISNAN
+REPLACE_ISINF
+REPLACE_ISFINITE
+REPLACE_ILOGBF
+REPLACE_ILOGB
+REPLACE_HYPOTL
+REPLACE_HYPOTF
+REPLACE_HYPOT
+REPLACE_HUGE_VAL
+REPLACE_FREXPL
+REPLACE_FREXP
+REPLACE_FREXPF
+REPLACE_FMODL
+REPLACE_FMODF
+REPLACE_FMOD
+REPLACE_FMAL
+REPLACE_FMAF
+REPLACE_FMA
+REPLACE_FLOORL
+REPLACE_FLOORF
+REPLACE_FLOOR
+REPLACE_FABSL
+REPLACE_EXP2L
+REPLACE_EXP2
+REPLACE_EXPM1F
+REPLACE_EXPM1
+REPLACE_CEILL
+REPLACE_CEILF
+REPLACE_CEIL
+REPLACE_CBRTL
+REPLACE_CBRTF
+HAVE_DECL_TRUNCL
+HAVE_DECL_TRUNCF
+HAVE_DECL_TRUNC
+HAVE_DECL_TANL
+HAVE_DECL_SQRTL
+HAVE_DECL_SINL
+HAVE_DECL_ROUNDL
+HAVE_DECL_ROUNDF
+HAVE_DECL_ROUND
+HAVE_DECL_RINTF
+HAVE_DECL_REMAINDERL
+HAVE_DECL_REMAINDER
+HAVE_DECL_LOGB
+HAVE_DECL_LOG2L
+HAVE_DECL_LOG2F
+HAVE_DECL_LOG2
+HAVE_DECL_LOG10L
+HAVE_DECL_LOGL
+HAVE_DECL_LDEXPL
+HAVE_DECL_FREXPL
+HAVE_DECL_FLOORL
+HAVE_DECL_FLOORF
+HAVE_DECL_EXPM1L
+HAVE_DECL_EXP2L
+HAVE_DECL_EXP2F
+HAVE_DECL_EXP2
+HAVE_DECL_EXPL
+HAVE_DECL_COSL
+HAVE_DECL_COPYSIGNF
+HAVE_DECL_CEILL
+HAVE_DECL_CEILF
+HAVE_DECL_CBRTL
+HAVE_DECL_CBRTF
+HAVE_DECL_ATANL
+HAVE_DECL_ASINL
+HAVE_DECL_ACOSL
+HAVE_TANHF
+HAVE_TANL
+HAVE_TANF
+HAVE_SQRTL
+HAVE_SQRTF
+HAVE_SINHF
+HAVE_SINL
+HAVE_SINF
+HAVE_RINTL
+HAVE_RINT
+HAVE_REMAINDERF
+HAVE_REMAINDER
+HAVE_POWF
+HAVE_MODFL
+HAVE_MODFF
+HAVE_LOGBL
+HAVE_LOGBF
+HAVE_LOG1PL
+HAVE_LOG1PF
+HAVE_LOG1P
+HAVE_LOG10L
+HAVE_LOG10F
+HAVE_LOGL
+HAVE_LOGF
+HAVE_LDEXPF
+HAVE_ISNANL
+HAVE_ISNAND
+HAVE_ISNANF
+HAVE_ILOGBL
+HAVE_ILOGBF
+HAVE_ILOGB
+HAVE_HYPOTL
+HAVE_HYPOTF
+HAVE_FREXPF
+HAVE_FMODL
+HAVE_FMODF
+HAVE_FMAL
+HAVE_FMAF
+HAVE_FMA
+HAVE_FABSL
+HAVE_FABSF
+HAVE_EXPM1F
+HAVE_EXPM1
+HAVE_EXPL
+HAVE_EXPF
+HAVE_COSHF
+HAVE_COSL
+HAVE_COSF
+HAVE_COPYSIGNL
+HAVE_COPYSIGN
+HAVE_CBRTL
+HAVE_CBRTF
+HAVE_CBRT
+HAVE_ATAN2F
+HAVE_ATANL
+HAVE_ATANF
+HAVE_ASINL
+HAVE_ASINF
+HAVE_ACOSL
+HAVE_ACOSF
+GNULIB_TRUNCL
+GNULIB_TRUNCF
+GNULIB_TRUNC
+GNULIB_TANHF
+GNULIB_TANL
+GNULIB_TANF
+GNULIB_SQRTL
+GNULIB_SQRTF
+GNULIB_SINHF
+GNULIB_SINL
+GNULIB_SINF
+GNULIB_SIGNBIT
+GNULIB_ROUNDL
+GNULIB_ROUNDF
+GNULIB_ROUND
+GNULIB_RINTL
+GNULIB_RINTF
+GNULIB_RINT
+GNULIB_REMAINDERL
+GNULIB_REMAINDERF
+GNULIB_REMAINDER
+GNULIB_POWF
+GNULIB_MODFL
+GNULIB_MODFF
+GNULIB_MODF
+GNULIB_LOGBL
+GNULIB_LOGBF
+GNULIB_LOGB
+GNULIB_LOG2L
+GNULIB_LOG2F
+GNULIB_LOG2
+GNULIB_LOG1PL
+GNULIB_LOG1PF
+GNULIB_LOG1P
+GNULIB_LOG10L
+GNULIB_LOG10F
+GNULIB_LOG10
+GNULIB_LOGL
+GNULIB_LOGF
+GNULIB_LOG
+GNULIB_LDEXPL
+GNULIB_LDEXPF
+GNULIB_ISNANL
+GNULIB_ISNAND
+GNULIB_ISNANF
+GNULIB_ISNAN
+GNULIB_ISINF
+GNULIB_ISFINITE
+GNULIB_ILOGBL
+GNULIB_ILOGBF
+GNULIB_ILOGB
+GNULIB_HYPOTL
+GNULIB_HYPOTF
+GNULIB_HYPOT
+GNULIB_FREXPL
+GNULIB_FREXP
+GNULIB_FREXPF
+GNULIB_FMODL
+GNULIB_FMODF
+GNULIB_FMOD
+GNULIB_FMAL
+GNULIB_FMAF
+GNULIB_FMA
+GNULIB_FLOORL
+GNULIB_FLOORF
+GNULIB_FLOOR
+GNULIB_FABSL
+GNULIB_FABSF
+GNULIB_EXPM1L
+GNULIB_EXPM1F
+GNULIB_EXPM1
+GNULIB_EXP2L
+GNULIB_EXP2F
+GNULIB_EXP2
+GNULIB_EXPL
+GNULIB_EXPF
+GNULIB_COSHF
+GNULIB_COSL
+GNULIB_COSF
+GNULIB_COPYSIGNL
+GNULIB_COPYSIGNF
+GNULIB_COPYSIGN
+GNULIB_CEILL
+GNULIB_CEILF
+GNULIB_CEIL
+GNULIB_CBRTL
+GNULIB_CBRTF
+GNULIB_CBRT
+GNULIB_ATAN2F
+GNULIB_ATANL
+GNULIB_ATANF
+GNULIB_ASINL
+GNULIB_ASINF
+GNULIB_ACOSL
+GNULIB_ACOSF
+HAVE_FEATURES_H
+APPLE_UNIVERSAL_BUILD
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+REPLACE_VSPRINTF
+REPLACE_VSNPRINTF
+REPLACE_VPRINTF
+REPLACE_VFPRINTF
+REPLACE_VDPRINTF
+REPLACE_VASPRINTF
+REPLACE_TMPFILE
+REPLACE_STDIO_WRITE_FUNCS
+REPLACE_STDIO_READ_FUNCS
+REPLACE_SPRINTF
+REPLACE_SNPRINTF
+REPLACE_RENAMEAT
+REPLACE_RENAME
+REPLACE_REMOVE
+REPLACE_PRINTF
+REPLACE_POPEN
+REPLACE_PERROR
+REPLACE_OBSTACK_PRINTF
+REPLACE_GETLINE
+REPLACE_GETDELIM
+REPLACE_FTELLO
+REPLACE_FTELL
+REPLACE_FSEEKO
+REPLACE_FSEEK
+REPLACE_FREOPEN
+REPLACE_FPURGE
+REPLACE_FPRINTF
+REPLACE_FOPEN
+REPLACE_FFLUSH
+REPLACE_FDOPEN
+REPLACE_FCLOSE
+REPLACE_DPRINTF
+HAVE_VDPRINTF
+HAVE_VASPRINTF
+HAVE_RENAMEAT
+HAVE_POPEN
+HAVE_PCLOSE
+HAVE_FTELLO
+HAVE_FSEEKO
+HAVE_DPRINTF
+HAVE_DECL_VSNPRINTF
+HAVE_DECL_SNPRINTF
+HAVE_DECL_OBSTACK_PRINTF
+HAVE_DECL_GETLINE
+HAVE_DECL_GETDELIM
+HAVE_DECL_FTELLO
+HAVE_DECL_FSEEKO
+HAVE_DECL_FPURGE
+GNULIB_VSPRINTF_POSIX
+GNULIB_VSNPRINTF
+GNULIB_VPRINTF_POSIX
+GNULIB_VPRINTF
+GNULIB_VFPRINTF_POSIX
+GNULIB_VFPRINTF
+GNULIB_VDPRINTF
+GNULIB_VSCANF
+GNULIB_VFSCANF
+GNULIB_VASPRINTF
+GNULIB_TMPFILE
+GNULIB_STDIO_H_SIGPIPE
+GNULIB_STDIO_H_NONBLOCKING
+GNULIB_SPRINTF_POSIX
+GNULIB_SNPRINTF
+GNULIB_SCANF
+GNULIB_RENAMEAT
+GNULIB_RENAME
+GNULIB_REMOVE
+GNULIB_PUTS
+GNULIB_PUTCHAR
+GNULIB_PUTC
+GNULIB_PRINTF_POSIX
+GNULIB_PRINTF
+GNULIB_POPEN
+GNULIB_PERROR
+GNULIB_PCLOSE
+GNULIB_OBSTACK_PRINTF_POSIX
+GNULIB_OBSTACK_PRINTF
+GNULIB_GETLINE
+GNULIB_GETDELIM
+GNULIB_GETCHAR
+GNULIB_GETC
+GNULIB_FWRITE
+GNULIB_FTELLO
+GNULIB_FTELL
+GNULIB_FSEEKO
+GNULIB_FSEEK
+GNULIB_FSCANF
+GNULIB_FREOPEN
+GNULIB_FREAD
+GNULIB_FPUTS
+GNULIB_FPUTC
+GNULIB_FPURGE
+GNULIB_FPRINTF_POSIX
+GNULIB_FPRINTF
+GNULIB_FOPEN
+GNULIB_FGETS
+GNULIB_FGETC
+GNULIB_FFLUSH
+GNULIB_FDOPEN
+GNULIB_FCLOSE
+GNULIB_DPRINTF
+REPLACE_ITOLD
+GL_GENERATE_FLOAT_H_FALSE
+GL_GENERATE_FLOAT_H_TRUE
+FLOAT_H
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H
+NEXT_FLOAT_H
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H
+NEXT_FCNTL_H
+REPLACE_OPENAT
+REPLACE_OPEN
+REPLACE_FCNTL
+HAVE_OPENAT
+HAVE_FCNTL
+GNULIB_OPENAT
+GNULIB_OPEN
+GNULIB_NONBLOCKING
+GNULIB_FCNTL
+EOVERFLOW_VALUE
+EOVERFLOW_HIDDEN
+ENOLINK_VALUE
+ENOLINK_HIDDEN
+EMULTIHOP_VALUE
+EMULTIHOP_HIDDEN
+GL_GENERATE_ERRNO_H_FALSE
+GL_GENERATE_ERRNO_H_TRUE
+ERRNO_H
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H
+NEXT_ERRNO_H
+PRAGMA_COLUMNS
+PRAGMA_SYSTEM_HEADER
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE
+INCLUDE_NEXT
+pkglibexecdir
+lispdir
+HAVE_WINSOCK2_H
+HAVE_MSVC_INVALID_PARAMETER_HANDLER
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS
+UNISTD_H_HAVE_WINSOCK2_H
+REPLACE_WRITE
+REPLACE_USLEEP
+REPLACE_UNLINKAT
+REPLACE_UNLINK
+REPLACE_TTYNAME_R
+REPLACE_SYMLINK
+REPLACE_SLEEP
+REPLACE_RMDIR
+REPLACE_READLINK
+REPLACE_READ
+REPLACE_PWRITE
+REPLACE_PREAD
+REPLACE_LSEEK
+REPLACE_LINKAT
+REPLACE_LINK
+REPLACE_LCHOWN
+REPLACE_ISATTY
+REPLACE_GETPAGESIZE
+REPLACE_GETGROUPS
+REPLACE_GETLOGIN_R
+REPLACE_GETDOMAINNAME
+REPLACE_GETCWD
+REPLACE_FTRUNCATE
+REPLACE_FCHOWNAT
+REPLACE_DUP2
+REPLACE_DUP
+REPLACE_CLOSE
+REPLACE_CHOWN
+HAVE_SYS_PARAM_H
+HAVE_OS_H
+HAVE_DECL_TTYNAME_R
+HAVE_DECL_SETHOSTNAME
+HAVE_DECL_GETUSERSHELL
+HAVE_DECL_GETPAGESIZE
+HAVE_DECL_GETLOGIN_R
+HAVE_DECL_GETDOMAINNAME
+HAVE_DECL_FDATASYNC
+HAVE_DECL_FCHDIR
+HAVE_DECL_ENVIRON
+HAVE_USLEEP
+HAVE_UNLINKAT
+HAVE_SYMLINKAT
+HAVE_SYMLINK
+HAVE_SLEEP
+HAVE_SETHOSTNAME
+HAVE_READLINKAT
+HAVE_READLINK
+HAVE_PWRITE
+HAVE_PREAD
+HAVE_PIPE2
+HAVE_PIPE
+HAVE_LINKAT
+HAVE_LINK
+HAVE_LCHOWN
+HAVE_GROUP_MEMBER
+HAVE_GETPAGESIZE
+HAVE_GETLOGIN
+HAVE_GETHOSTNAME
+HAVE_GETGROUPS
+HAVE_GETDTABLESIZE
+HAVE_FTRUNCATE
+HAVE_FSYNC
+HAVE_FDATASYNC
+HAVE_FCHOWNAT
+HAVE_FCHDIR
+HAVE_FACCESSAT
+HAVE_EUIDACCESS
+HAVE_DUP3
+HAVE_DUP2
+HAVE_CHOWN
+GNULIB_WRITE
+GNULIB_USLEEP
+GNULIB_UNLINKAT
+GNULIB_UNLINK
+GNULIB_UNISTD_H_SIGPIPE
+GNULIB_UNISTD_H_NONBLOCKING
+GNULIB_TTYNAME_R
+GNULIB_SYMLINKAT
+GNULIB_SYMLINK
+GNULIB_SLEEP
+GNULIB_SETHOSTNAME
+GNULIB_RMDIR
+GNULIB_READLINKAT
+GNULIB_READLINK
+GNULIB_READ
+GNULIB_PWRITE
+GNULIB_PREAD
+GNULIB_PIPE2
+GNULIB_PIPE
+GNULIB_LSEEK
+GNULIB_LINKAT
+GNULIB_LINK
+GNULIB_LCHOWN
+GNULIB_ISATTY
+GNULIB_GROUP_MEMBER
+GNULIB_GETUSERSHELL
+GNULIB_GETPAGESIZE
+GNULIB_GETLOGIN_R
+GNULIB_GETLOGIN
+GNULIB_GETHOSTNAME
+GNULIB_GETGROUPS
+GNULIB_GETDTABLESIZE
+GNULIB_GETDOMAINNAME
+GNULIB_GETCWD
+GNULIB_FTRUNCATE
+GNULIB_FSYNC
+GNULIB_FDATASYNC
+GNULIB_FCHOWNAT
+GNULIB_FCHDIR
+GNULIB_FACCESSAT
+GNULIB_EUIDACCESS
+GNULIB_ENVIRON
+GNULIB_DUP3
+GNULIB_DUP2
+GNULIB_DUP
+GNULIB_CLOSE
+GNULIB_CHOWN
+GNULIB_CHDIR
+REPLACE_WCTOMB
+REPLACE_UNSETENV
+REPLACE_STRTOD
+REPLACE_SETENV
+REPLACE_REALPATH
+REPLACE_REALLOC
+REPLACE_RANDOM_R
+REPLACE_PUTENV
+REPLACE_PTSNAME_R
+REPLACE_PTSNAME
+REPLACE_MKSTEMP
+REPLACE_MBTOWC
+REPLACE_MALLOC
+REPLACE_CANONICALIZE_FILE_NAME
+REPLACE_CALLOC
+HAVE_DECL_UNSETENV
+HAVE_UNLOCKPT
+HAVE_SYS_LOADAVG_H
+HAVE_STRUCT_RANDOM_DATA
+HAVE_STRTOULL
+HAVE_STRTOLL
+HAVE_STRTOD
+HAVE_DECL_SETENV
+HAVE_SETENV
+HAVE_RPMATCH
+HAVE_REALPATH
+HAVE_RANDOM_R
+HAVE_RANDOM_H
+HAVE_RANDOM
+HAVE_PTSNAME_R
+HAVE_PTSNAME
+HAVE_POSIX_OPENPT
+HAVE_MKSTEMPS
+HAVE_MKSTEMP
+HAVE_MKOSTEMPS
+HAVE_MKOSTEMP
+HAVE_MKDTEMP
+HAVE_GRANTPT
+HAVE_GETSUBOPT
+HAVE_DECL_GETLOADAVG
+HAVE_CANONICALIZE_FILE_NAME
+HAVE_ATOLL
+HAVE__EXIT
+GNULIB_WCTOMB
+GNULIB_UNSETENV
+GNULIB_UNLOCKPT
+GNULIB_SYSTEM_POSIX
+GNULIB_STRTOULL
+GNULIB_STRTOLL
+GNULIB_STRTOD
+GNULIB_SETENV
+GNULIB_RPMATCH
+GNULIB_REALPATH
+GNULIB_REALLOC_POSIX
+GNULIB_RANDOM_R
+GNULIB_RANDOM
+GNULIB_PUTENV
+GNULIB_PTSNAME_R
+GNULIB_PTSNAME
+GNULIB_POSIX_OPENPT
+GNULIB_MKSTEMPS
+GNULIB_MKSTEMP
+GNULIB_MKOSTEMPS
+GNULIB_MKOSTEMP
+GNULIB_MKDTEMP
+GNULIB_MBTOWC
+GNULIB_MALLOC_POSIX
+GNULIB_GRANTPT
+GNULIB_GETSUBOPT
+GNULIB_GETLOADAVG
+GNULIB_CANONICALIZE_FILE_NAME
+GNULIB_CALLOC_POSIX
+GNULIB_ATOLL
+GNULIB__EXIT
+GL_GENERATE_ALLOCA_H_FALSE
+GL_GENERATE_ALLOCA_H_TRUE
+ALLOCA_H
+ALLOCA
+GL_COND_LIBTOOL_FALSE
+GL_COND_LIBTOOL_TRUE
+XSLTPROC
+HELP2MAN
+PERL
+M4_DEBUGFILE
+M4_GNU
+M4
+YFLAGS
+YACC
+LEXLIB
+LEX_OUTPUT_ROOT
+LEX_IS_FLEX
+LEX
+DOT
+YACC_LIBRARY
+YACC_SCRIPT
+CXX_COMPILER_POSIXLY_CORRECT
+BISON_CXX_WORKS_FALSE
+BISON_CXX_WORKS_TRUE
+BISON_CXX_WORKS
+C_COMPILER_POSIXLY_CORRECT
+BISON_C_WORKS
+WARN_CXXFLAGS_TEST
+WERROR_CXXFLAGS
+WARN_CXXFLAGS
+WARN_CFLAGS_TEST
+WERROR_CFLAGS
+WARN_CFLAGS
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+RANLIB
+ARFLAGS
+AR
+EGREP
+GREP
+CPP
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+PACKAGE_COPYRIGHT_YEAR
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
 ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_dependency_tracking
+enable_largefile
+enable_threads
+enable_gcc_warnings
+enable_yacc
+enable_assert
+with_gnu_ld
+enable_rpath
+with_libpth_prefix
+with_dmalloc
+enable_nls
+with_libiconv_prefix
+with_libintl_prefix
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CXX
+CXXFLAGS
+CCC
+CPP
+YACC
+YFLAGS
+M4'
+
 
 # Initialize some variables set by options.
 ac_init_help=
 ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
 # The variables have the same names as the options, with
 # dashes changed to underlines.
 cache_file=/dev/null
@@ -340,34 +1859,49 @@
 # and all the variables that are supposed to be based on exec_prefix
 # by default will actually change.
 # Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
 bindir='${exec_prefix}/bin'
 sbindir='${exec_prefix}/sbin'
 libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
 
 ac_prev=
+ac_dashdash=
 for ac_option
 do
   # If the previous option needs an argument, assign it.
   if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
+    eval $ac_prev=\$ac_option
     ac_prev=
     continue
   fi
 
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
 
-  case $ac_option in
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
 
   -bindir | --bindir | --bindi | --bind | --bin | --bi)
     ac_prev=bindir ;;
@@ -389,33 +1923,59 @@
   --config-cache | -C)
     cache_file=config.cache ;;
 
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+  -datadir | --datadir | --datadi | --datad)
     ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
     datadir=$ac_optarg ;;
 
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
   -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
 
   -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
     esac
-    eval "enable_$ac_feature='$ac_optarg'" ;;
+    eval enable_$ac_useropt=\$ac_optarg ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -442,6 +2002,12 @@
   -host=* | --host=* | --hos=* | --ho=*)
     host_alias=$ac_optarg ;;
 
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
   -includedir | --includedir | --includedi | --included | --include \
   | --includ | --inclu | --incl | --inc)
     ac_prev=includedir ;;
@@ -466,13 +2032,16 @@
   | --libexe=* | --libex=* | --libe=*)
     libexecdir=$ac_optarg ;;
 
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
   -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
+  | --localstate | --localstat | --localsta | --localst | --locals)
     ac_prev=localstatedir ;;
   -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
     localstatedir=$ac_optarg ;;
 
   -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
@@ -537,6 +2106,16 @@
   | --progr-tra=* | --program-tr=* | --program-t=*)
     program_transform_name=$ac_optarg ;;
 
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
@@ -587,26 +2166,36 @@
     ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
     esac
-    eval "with_$ac_package='$ac_optarg'" ;;
+    eval with_$ac_useropt=\$ac_optarg ;;
 
   -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=no" ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -626,27 +2215,26 @@
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -654,31 +2242,36 @@
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "missing argument to $ac_option"
 fi
 
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
-done
+fi
 
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-	      localstatedir libdir includedir oldincludedir infodir mandir
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
 do
-  eval ac_val=$`echo $ac_var`
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
   case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
   esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -692,8 +2285,6 @@
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    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
@@ -705,82 +2296,72 @@
 test "$silent" = yes && exec 6>/dev/null
 
 
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
 # Find the source files, if location was not specified.
 if test -z "$srcdir"; then
   ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
   srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
+  if test ! -r "$srcdir/$ac_unique_file"; then
     srcdir=..
   fi
 else
   ac_srcdir_defaulted=no
 fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-  fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
 fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-   { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-ac_env_CXX_set=${CXX+set}
-ac_env_CXX_value=$CXX
-ac_cv_env_CXX_set=${CXX+set}
-ac_cv_env_CXX_value=$CXX
-ac_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_env_CXXFLAGS_value=$CXXFLAGS
-ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
 
 #
 # Report the --help message.
@@ -789,7 +2370,7 @@
   # 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 GNU Bison 2.3 to adapt to many kinds of systems.
+\`configure' configures GNU Bison 2.7 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -803,20 +2384,17 @@
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
+  -q, --quiet, --silent   do not print \`checking ...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
       --srcdir=DIR        find the sources in DIR [configure dir or \`..']
 
-_ACEOF
-
-  cat <<_ACEOF
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
+                          [$ac_default_prefix]
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
+                          [PREFIX]
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -826,18 +2404,25 @@
 For better control, use the options below.
 
 Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/bison]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
 _ACEOF
 
   cat <<\_ACEOF
@@ -855,26 +2440,38 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GNU Bison 2.3:";;
+     short | recursive ) echo "Configuration of GNU Bison 2.7:";;
    esac
   cat <<\_ACEOF
 
 Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
+  --disable-largefile     omit support for large files
+  --enable-threads={posix|solaris|pth|windows}
+                          specify multithreading API
+  --disable-threads       build without multithread safety
   --enable-gcc-warnings   turn on lots of GCC warnings (not recommended)
   --disable-yacc          do not build a yacc command or an -ly library
-  --disable-nls           do not use Native Language Support
+  --disable-assert        turn off assertions
   --disable-rpath         do not hardcode runtime library paths
+  --disable-nls           do not use Native Language Support
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-libpth-prefix[=DIR]  search for libpth in DIR/include and DIR/lib
+  --without-libpth-prefix     don't search for libpth in includedir and libdir
   --with-dmalloc          use dmalloc, as in
                           http://www.dmalloc.com/dmalloc.tar.gz
-  --with-gnu-ld           assume the C compiler uses GNU ld default=no
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
   --without-libiconv-prefix     don't search for libiconv in includedir and libdir
   --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
@@ -885,131 +2482,889 @@
   CFLAGS      C compiler flags
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
+  CPP         C preprocessor
+  YACC        The `Yet Another Compiler Compiler' implementation to use.
+              Defaults to the first program found out of: `bison -y', `byacc',
+              `yacc'.
+  YFLAGS      The list of arguments that will be passed by default to $YACC.
+              This script will default YFLAGS to the empty string to avoid a
+              default value of `-d' given by some make applications.
+  M4          Location of GNU M4 1.4.6 or later. Defaults to the first program
+              of 'm4', 'gm4', or 'gnum4' on PATH that meets Autoconf needs.
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
 Report bugs to <bug-bison@gnu.org>.
+GNU Bison home page: <http://www.gnu.org/software/bison/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
 _ACEOF
+ac_status=$?
 fi
 
 if test "$ac_init_help" = "recursive"; then
   # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
     ac_builddir=.
 
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
 
 case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
+  .)  # We are building in place.
     ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
     ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
 esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_srcdir/configure.gnu; then
-      echo
-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_srcdir/configure; then
-      echo
-      $SHELL $ac_srcdir/configure  --help=recursive
-    elif test -f $ac_srcdir/configure.ac ||
-	   test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd "$ac_popdir"
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
   done
 fi
 
-test -n "$ac_init_help" && exit 0
+test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GNU Bison configure 2.3
-generated by GNU Autoconf 2.59
+GNU Bison configure 2.7
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
-  exit 0
+  exit
 fi
-exec 5>config.log
-cat >&5 <<_ACEOF
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## -------------------------------- ##
+## Report this to bug-bison@gnu.org ##
+## -------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+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 GNU Bison $as_me 2.3, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
+It was created by GNU Bison $as_me 2.7, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
 _ACEOF
+exec 5>>config.log
 {
 cat <<_ASUNAME
 ## --------- ##
@@ -1028,7 +3383,7 @@
 /bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
 /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
 /bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
 /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
 /bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
@@ -1040,8 +3395,9 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
 
 } >&5
 
@@ -1063,7 +3419,6 @@
 ac_configure_args=
 ac_configure_args0=
 ac_configure_args1=
-ac_sep=
 ac_must_keep_next=false
 for ac_pass in 1 2
 do
@@ -1074,13 +3429,13 @@
     -q | -quiet | --quiet | --quie | --qui | --qu | --q \
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
     2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      as_fn_append ac_configure_args1 " '$ac_arg'"
       if test $ac_must_keep_next = true; then
 	ac_must_keep_next=false # Got value, back to normal.
       else
@@ -1096,104 +3451,115 @@
 	  -* ) ac_must_keep_next=true ;;
 	esac
       fi
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
+      as_fn_append ac_configure_args " '$ac_arg'"
       ;;
     esac
   done
 done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
 
 # When interrupted or exit'd, cleanup temporary files, and complete
 # config.log.  We remove comments because anyway the quotes in there
 # would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
 trap 'exit_status=$?
   # Save into config.log some information that might help in debugging.
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
-{
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
   (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
       sed -n \
-	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
     *)
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
       ;;
-    esac;
-}
+    esac |
+    sort
+)
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
-	eval ac_val=$`echo $ac_var`
-	echo "$ac_var='"'"'$ac_val'"'"'"
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
-      sed "/^$/d" confdefs.h | sort
+      cat confdefs.h
       echo
     fi
     test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
   } >&5
-  rm -f core *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
     exit $exit_status
-     ' 0
+' 0
 for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
 done
 ac_signal=0
 
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
 
 # Predefined preprocessor variables.
 
@@ -1201,112 +3567,189 @@
 #define PACKAGE_NAME "$PACKAGE_NAME"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_VERSION "$PACKAGE_VERSION"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_STRING "$PACKAGE_STRING"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
 _ACEOF
 
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
 
 # Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
 fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
 if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
     esac
   fi
 else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
+as_fn_append ac_header_list " locale.h"
+as_fn_append ac_func_list " _set_invalid_parameter_handler"
+as_fn_append ac_header_list " sys/socket.h"
+as_fn_append ac_header_list " unistd.h"
+as_fn_append ac_func_list " fcntl"
+as_fn_append ac_func_list " symlink"
+as_fn_append ac_header_list " stdio_ext.h"
+as_fn_append ac_func_list " __fpending"
+as_fn_append ac_func_list " vasnprintf"
+as_fn_append ac_header_list " features.h"
+as_fn_append ac_func_list " snprintf"
+as_fn_append ac_func_list " alarm"
+as_fn_append ac_func_list " __fseterr"
+as_fn_append ac_header_list " sys/stat.h"
+as_fn_append ac_func_list " getdelim"
+as_fn_append ac_func_list " getdtablesize"
+gl_getopt_required=GNU
+as_fn_append ac_header_list " getopt.h"
+as_fn_append ac_header_list " wchar.h"
+as_fn_append ac_header_list " stdint.h"
+as_fn_append ac_header_list " inttypes.h"
+as_fn_append ac_func_list " iswcntrl"
+as_fn_append ac_header_list " wctype.h"
+as_fn_append ac_func_list " iswblank"
+as_fn_append ac_header_list " math.h"
+as_fn_append ac_func_list " mbsinit"
+as_fn_append ac_func_list " mbrtowc"
+as_fn_append ac_func_list " isascii"
+as_fn_append ac_header_list " sys/mman.h"
+as_fn_append ac_func_list " mprotect"
+as_fn_append ac_func_list " obstack_printf"
+as_fn_append ac_func_list " lstat"
+as_fn_append ac_header_list " sys/param.h"
+as_fn_append ac_func_list " strerror_r"
+as_fn_append ac_func_list " __xpg_strerror_r"
+as_fn_append ac_func_list " pipe2"
+as_fn_append ac_func_list " posix_spawn"
+gl_printf_safe=yes
+as_fn_append ac_header_list " sched.h"
+as_fn_append ac_func_list " sigaction"
+as_fn_append ac_func_list " sigaltstack"
+as_fn_append ac_func_list " siginterrupt"
+as_fn_append ac_header_list " spawn.h"
+as_fn_append ac_func_list " strdup"
+as_fn_append ac_func_list " catgets"
+as_fn_append ac_func_list " strndup"
+as_fn_append ac_header_list " sys/wait.h"
+as_fn_append ac_header_list " sys/time.h"
+as_fn_append ac_func_list " pipe"
+as_fn_append ac_func_list " wcwidth"
+as_fn_append ac_func_list " setlocale"
+gt_needs="$gt_needs need-ngettext"
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
-	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+for ac_var in $ac_precious_vars; do
   eval ac_old_set=\$ac_cv_env_${ac_var}_set
   eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-  eval ac_new_val="\$ac_env_${ac_var}_value"
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
       fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
     esac
   fi
 done
 if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -1315,77 +3758,59 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-gl_header_list="$gl_header_list locale.h"
-gl_func_list="$gl_func_list setlocale"
-gl_header_list="$gl_header_list wchar.h"
-gl_header_list="$gl_header_list wctype.h"
-gl_func_list="$gl_func_list isascii"
-gl_func_list="$gl_func_list iswprint"
-gl_func_list="$gl_func_list mbsinit"
+PACKAGE_COPYRIGHT_YEAR=2012
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_COPYRIGHT_YEAR $PACKAGE_COPYRIGHT_YEAR
+_ACEOF
 
 
 ac_aux_dir=
-for ac_dir in build-aux $srcdir/build-aux; do
-  if test -f $ac_dir/install-sh; then
+for ac_dir in build-aux "$srcdir"/build-aux; do
+  if test -f "$ac_dir/install-sh"; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install-sh -c"
     break
-  elif test -f $ac_dir/install.sh; then
+  elif test -f "$ac_dir/install.sh"; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install.sh -c"
     break
-  elif test -f $ac_dir/shtool; then
+  elif test -f "$ac_dir/shtool"; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/shtool install -c"
     break
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in build-aux $srcdir/build-aux" >&5
-echo "$as_me: error: cannot find install-sh or install.sh in build-aux $srcdir/build-aux" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-case m4 in
-  [\\/]* | ?:[\\/]* ) ac_macro_dir=m4         ;;
-  *)                      ac_macro_dir=$srcdir/m4 ;;
-esac
-if test -d "$ac_macro_dir"; then :
-else
-  { { echo "$as_me:$LINENO: error: cannot find macro directory \`m4'" >&5
-echo "$as_me: error: cannot find macro directory \`m4'" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
 fi
 
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
-# We don't have a file m4/Makefile.am, so we need Automake 1.8 or later.
-am__api_version="1.9"
+
+
+
+# Automake 1.10.3 and 1.11.1 fix a security flaw discussed here:
+#
+#   http://thread.gmane.org/gmane.comp.sysutils.autotools.announce/131
+#
+# To avoid 1.11, we make 1.11.1 the minimum version.
+#
+# We want gnits strictness only when rolling a stable release.  For
+# release candidates, we use version strings like 2.4.3_rc1, but gnits
+# doesn't like that, so we let the underscore disable gnits.  Between
+# releases, we want to be able run make dist without being required to
+# add a bogus NEWS entry.  In that case, the version string
+# automatically contains a dash, which we also let disable gnits.
+am__api_version='1.12'
+
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -1399,22 +3824,23 @@
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
   /usr/ucb/* ) ;;
   *)
     # OSF1 and SCO ODT 3.0 have their own names for install.
@@ -1422,7 +3848,7 @@
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	if as_fn_executable_p "$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.
@@ -1432,30 +3858,43 @@
 	    # program-specific install script used by HP pwplus--don't use.
 	    :
 	  else
-	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	    break 3
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
 	  fi
 	fi
       done
     done
     ;;
 esac
-done
 
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
 
 fi
   if test "${ac_cv_path_install+set}" = set; then
     INSTALL=$ac_cv_path_install
   else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
     # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
+    # removed, or if the value is a relative name.
     INSTALL=$ac_install_sh
   fi
 fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
@@ -1465,118 +3904,263 @@
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+	&& test "$*" != "X conftest.file $srcdir/configure"; then
 
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&5
-echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&2;}
-   { (exit 1); exit 1; }; }
-   fi
-
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$2" = conftest.file
    )
 then
    # Ok.
    :
 else
-   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
-   { (exit 1); exit 1; }; }
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
 fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
 test "$program_prefix" != NONE &&
-  program_transform_name="s,^,$program_prefix,;$program_transform_name"
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
 test "$program_suffix" != NONE &&
-  program_transform_name="s,\$,$program_suffix,;$program_transform_name"
-# Double any \ or $.  echo might interpret backslashes.
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
 # By default was `s,x,x', remove it if useless.
-cat <<\_ACEOF >conftest.sed
-s/[\\$]/&&/g;s/;s,x,x,$//
-_ACEOF
-program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm conftest.sed
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
 # expand $ac_aux_dir to an absolute path
 am_aux_dir=`cd $ac_aux_dir && pwd`
 
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
 # Use eval to expand $SHELL
 if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
-if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-  # We used to keeping the `.' as first argument, in order to
-  # allow $(mkdir_p) to be used without argument.  As in
-  #   $(mkdir_p) $(somedir)
-  # where $(somedir) is conditionally defined.  However this is wrong
-  # for two reasons:
-  #  1. if the package is installed by a user who cannot write `.'
-  #     make install will fail,
-  #  2. the above comment should most certainly read
-  #     $(mkdir_p) $(DESTDIR)$(somedir)
-  #     so it does not work when $(somedir) is undefined and
-  #     $(DESTDIR) is not.
-  #  To support the latter case, we have to write
-  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-  #  so the `.' trick is pointless.
-  mkdir_p='mkdir -p --'
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; 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_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  # On NextStep and OpenStep, the `mkdir' command does not
-  # recognize any option.  It will interpret all options as
-  # directories to create, and then abort because `.' already
-  # exists.
-  for d in ./-p ./--version;
-  do
-    test -d $d && rmdir $d
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
   done
-  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-  if test -f "$ac_aux_dir/mkinstalldirs"; then
-    mkdir_p='$(mkinstalldirs)'
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; 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_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip"
+    $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_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
   else
-    mkdir_p='$(install_sh) -d'
+    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
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
   fi
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
 
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AWK+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
   ac_cv_prog_AWK="$AWK" # Let the user override the test.
@@ -1586,55 +4170,59 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_AWK="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
   test -n "$AWK" && break
 done
 
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
 all:
-	@echo 'ac_maketemp="$(MAKE)"'
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
-  eval ac_cv_prog_make_${ac_make}_set=yes
-else
-  eval ac_cv_prog_make_${ac_make}_set=no
-fi
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
 rm -f conftest.make
 fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
   SET_MAKE=
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
@@ -1647,12 +4235,53 @@
 fi
 rmdir .tst 2>/dev/null
 
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
-   { (exit 1); exit 1; }; }
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
 fi
 
 # test whether we have cygpath
@@ -1667,7 +4296,7 @@
 
 # Define the identity of the package.
  PACKAGE='bison'
- VERSION='2.3'
+ VERSION='2.7'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -1695,173 +4324,122 @@
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  STRIP=$ac_ct_STRIP
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
 
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
 
 
-          ac_config_headers="$ac_config_headers config.h:config.hin"
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+ac_config_headers="$ac_config_headers lib/config.h:lib/config.in.h"
 
 
-
-cat >>confdefs.h <<\_ACEOF
-#define _GNU_SOURCE 1
-_ACEOF
-
-
+# Checks for the compiler.
 DEPDIR="${am__leading_dot}deps"
 
-          ac_config_commands="$ac_config_commands depfiles"
+ac_config_commands="$ac_config_commands depfiles"
 
 
 am_make=${MAKE-make}
 cat > confinc << 'END'
 am__doit:
-	@echo done
+	@echo this is the am__doit target
 .PHONY: am__doit
 END
 # If we don't find an include directive, just comment out the code.
-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
 am__include="#"
 am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
 # Now try BSD make style include.
 if test "$am__include" = "#"; then
    echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
 fi
 
 
-echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_am_result" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
 rm -f confinc confmf
 
-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then
-  enableval="$enable_dependency_tracking"
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
 
-fi;
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
-
-
-if test "x$enable_dependency_tracking" != xno; then
+ if test "x$enable_dependency_tracking" != xno; then
   AMDEP_TRUE=
   AMDEP_FALSE='#'
 else
@@ -1870,7 +4448,6 @@
 fi
 
 
-
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -1879,10 +4456,10 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1892,35 +4469,37 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
 fi
 if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $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_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -1930,39 +4509,50 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  CC=$ac_ct_CC
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  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
+    CC=$ac_ct_CC
+  fi
 else
   CC="$ac_cv_prog_CC"
 fi
 
 if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1972,77 +4562,37 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
+
   fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
 fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2053,18 +4603,19 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$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
      fi
     ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 if test $ac_prog_rejected = yes; then
   # We found a bogon in the path, so make sure we never use it.
@@ -2082,24 +4633,25 @@
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
 fi
 if test -z "$CC"; then
   if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
+  for ac_prog in cl.exe
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2109,39 +4661,41 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
     test -n "$CC" && break
   done
 fi
 if test -z "$CC"; then
   ac_ct_CC=$CC
-  for ac_prog in cl
+  for ac_prog in cl.exe
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $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_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2151,66 +4705,78 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
   test -n "$ac_ct_CC" && break
 done
 
-  CC=$ac_ct_CC
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  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
+    CC=$ac_ct_CC
+  fi
 fi
 
 fi
 
 
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
 
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2222,112 +4788,108 @@
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
 do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-	;;
-    conftest.$ac_ext )
-	# This is the source file.
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
 	;;
     [ab].out )
 	# We found the default executable, but exeext='' is most
 	# certainly right.
 	break;;
     *.* )
-	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	# FIXME: I believe we export ac_cv_exeext for Libtool,
-	# but it would be cool to find out if it's true.  Does anybody
-	# maintain Libtool? --akim.
-	export ac_cv_exeext
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
 	break;;
     * )
 	break;;
   esac
 done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
 else
-  echo "$as_me: failed program was:" >&5
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 fi
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
 
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -2335,38 +4897,90 @@
 for ac_file in conftest.exe conftest conftest.*; do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  export ac_cv_exeext
 	  break;;
     * ) break;;
   esac
 done
 else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $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 compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
 fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $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 C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2378,45 +4992,46 @@
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
        break;;
   esac
 done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+{ { $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 compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
 fi
-
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2430,54 +5045,34 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
+  ac_compiler_gnu=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2488,38 +5083,49 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-ac_cv_prog_cc_g=no
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
@@ -2535,23 +5141,18 @@
     CFLAGS=
   fi
 fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_prog_cc_stdc=no
+  ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* 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);
@@ -2574,12 +5175,17 @@
 /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
    function prototypes and stuff, but not '\xHH' hex character constants.
    These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
+   as 'x'.  The following induces an error, until -std is added to get
    proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
    array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
+   that's true only with -std.  */
 int osf4_cc_array ['\x00' == 0 ? 1 : -1];
 
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
 int test (int i, double x);
 struct s1 {int (*f) (int a);};
 struct s2 {int (*f) (double a);};
@@ -2594,201 +5200,37 @@
   return 0;
 }
 _ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
 fi
-rm -f conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
-rm -f conftest.$ac_ext conftest.$ac_objext
+rm -f conftest.$ac_ext
 CC=$ac_save_CC
 
 fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
   *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if test "x$ac_cv_prog_cc_c89" != xno; then :
 
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
 
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2797,17 +5239,18 @@
 
 depcc="$CC"   am_compiler_list=
 
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -2825,6 +5268,11 @@
   if test "$am_compiler_list" = ""; then
      am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
   fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
   for depmode in $am_compiler_list; do
     # Setup a source with many dependencies, because some compilers
     # like to wrap large dependency lists on column 80 (with \), and
@@ -2836,34 +5284,49 @@
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
     case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
 	break
       fi
       ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
     none) break ;;
     esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
     if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       source=sub/conftest.c object=$am__obj \
        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
          >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
       # or remarks (even with -Werror).  So we grep stderr for any message
@@ -2887,13 +5350,11 @@
 fi
 
 fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
-
-
-if
+ if
   test "x$enable_dependency_tracking" != xno \
   && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
   am__fastdepCC_TRUE=
@@ -2904,21 +5365,700 @@
 fi
 
 
+   case $ac_cv_prog_cc_stdc in #(
+  no) :
+    ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if ${ac_cv_prog_cc_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+  your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str;
+  int number;
+  float fnumber;
+
+  while (*format)
+    {
+      switch (*format++)
+	{
+	case 's': // string
+	  str = va_arg (args_copy, const char *);
+	  break;
+	case 'd': // int
+	  number = va_arg (args_copy, int);
+	  break;
+	case 'f': // float
+	  fnumber = va_arg (args_copy, double);
+	  break;
+	default:
+	  break;
+	}
+    }
+  va_end (args_copy);
+  va_end (args);
+}
+
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  test_varargs ("s, d' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+	  || dynamic_array[ni.number - 1] != 543);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c99"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then :
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* 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);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+else
+  ac_cv_prog_cc_stdc=no
+fi
+
+fi
+ ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5
+$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; }
+  if ${ac_cv_prog_cc_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+
+  case $ac_cv_prog_cc_stdc in #(
+  no) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;; #(
+  '') :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5
+$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;;
+esac
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; 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_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # 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_CXX="$ac_tool_prefix$ac_prog"
+    $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
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; 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_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$ac_prog"
+    $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_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  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
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+# Gnulib (early checks).
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
@@ -2932,11 +6072,7 @@
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -2945,78 +6081,34 @@
 #endif
 		     Syntax error
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
-  # OK, works on sane cases.  Now check whether non-existent headers
+  # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
   break
 fi
 
@@ -3028,8 +6120,8 @@
 else
   ac_cv_prog_CPP=$CPP
 fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
@@ -3039,11 +6131,7 @@
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -3052,85 +6140,40 @@
 #endif
 		     Syntax error
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
-  # OK, works on sane cases.  Now check whether non-existent headers
+  # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
 else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -3140,60 +6183,577 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    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
+# 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
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
     fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
 fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    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
+# 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
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
 
 
 
-echo "$as_me:$LINENO: checking for AIX" >&5
-echo $ECHO_N "checking for AIX... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5
+$as_echo_n "checking for Minix Amsterdam compiler... " >&6; }
+if ${gl_cv_c_amsterdam_compiler+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef _AIX
-  yes
+
+#ifdef __ACK__
+Amsterdam
 #endif
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "yes" >/dev/null 2>&1; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-cat >>confdefs.h <<\_ACEOF
-#define _ALL_SOURCE 1
-_ACEOF
-
+  $EGREP "Amsterdam" >/dev/null 2>&1; then :
+  gl_cv_c_amsterdam_compiler=yes
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_c_amsterdam_compiler=no
 fi
 rm -f conftest*
 
 
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5
+$as_echo "$gl_cv_c_amsterdam_compiler" >&6; }
+  if test -z "$AR"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      AR='cc -c.a'
+      if test -z "$ARFLAGS"; then
+        ARFLAGS='-o'
+      fi
+    else
+                  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
+{ $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 :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$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_AR="${ac_tool_prefix}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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$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="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
+
+      if test -z "$ARFLAGS"; then
+        ARFLAGS='cru'
+      fi
+    fi
+  else
+    if test -z "$ARFLAGS"; then
+      ARFLAGS='cru'
+    fi
+  fi
+
+
+  if test -z "$RANLIB"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      RANLIB=':'
+    else
+            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.
+set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
+    $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
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; 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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
+    $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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  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
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+    fi
+  fi
+
+
+if test "x$CC" != xcc; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+   test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+      then
+	# cc works too.
+	:
+      else
+	# cc exists but doesn't like -o.
+	eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3208,50 +6768,23 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_header_stdc=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
+  ac_cv_header_stdc=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -3261,18 +6794,14 @@
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
+  $EGREP "free" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -3282,16 +6811,13 @@
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   :
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ctype.h>
+#include <stdlib.h>
 #if ((' ' & 0x0FF) == 0x020)
 # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
 # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
@@ -3311,108 +6837,39 @@
   for (i = 0; i < 256; i++)
     if (XOR (islower (i), ISLOWER (i))
 	|| toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
+      return 2;
+  return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_run "$LINENO"; then :
 
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+  ac_cv_header_stdc=no
 fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
 fi
 fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
 
 fi
 
 # On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
 		  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -3420,191 +6877,48 @@
 done
 
 
-if test "${ac_cv_header_minix_config_h+set}" = set; then
-  echo "$as_me:$LINENO: checking for minix/config.h" >&5
-echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
-if test "${ac_cv_header_minix_config_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
-echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking minix/config.h usability" >&5
-echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <minix/config.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
 
-# Is the header present?
-echo "$as_me:$LINENO: checking minix/config.h presence" >&5
-echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <minix/config.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: minix/config.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## -------------------------------- ##
-## Report this to bug-bison@gnu.org ##
-## -------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for minix/config.h" >&5
-echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
-if test "${ac_cv_header_minix_config_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_minix_config_h=$ac_header_preproc
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
-echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6
-
-fi
-if test $ac_cv_header_minix_config_h = yes; then
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = xyes; then :
   MINIX=yes
 else
   MINIX=
 fi
 
 
-if test "$MINIX" = yes; then
+  if test "$MINIX" = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define _POSIX_SOURCE 1
-_ACEOF
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
 
 
-cat >>confdefs.h <<\_ACEOF
-#define _POSIX_1_SOURCE 2
-_ACEOF
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
 
 
-cat >>confdefs.h <<\_ACEOF
-#define _MINIX 1
-_ACEOF
+$as_echo "#define _MINIX 1" >>confdefs.h
 
-fi
+  fi
+
+        case "$host_os" in
+    hpux*)
+
+$as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+      ;;
+  esac
 
 
-
-
-
-
-
-
-
-
-
-  echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5
-echo $ECHO_N "checking whether it is safe to define __EXTENSIONS__... $ECHO_C" >&6
-if test "${ac_cv_safe_to_define___extensions__+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if ${ac_cv_safe_to_define___extensions__+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-	  #define __EXTENSIONS__ 1
-	  $ac_includes_default
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
 int
 main ()
 {
@@ -3613,2385 +6927,1085 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_safe_to_define___extensions__=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_safe_to_define___extensions__=no
+  ac_cv_safe_to_define___extensions__=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5
-echo "${ECHO_T}$ac_cv_safe_to_define___extensions__" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
   test $ac_cv_safe_to_define___extensions__ = yes &&
-    cat >>confdefs.h <<\_ACEOF
-#define __EXTENSIONS__ 1
-_ACEOF
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
 
-  cat >>confdefs.h <<\_ACEOF
-#define _POSIX_PTHREAD_SEMANTICS 1
-_ACEOF
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
 
 
 
-# Checks for the compiler.
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-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_executable_p "$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
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
 
 
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
 
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
 
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
 
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
 
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#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);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CC"   am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    case $depmode in
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
+  # IEEE behaviour is the default on all CPUs except Alpha and SH
+  # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4
+  # and the GCC 4.1.2 manual).
+  case "$host_cpu" in
+    alpha*)
+      # On Alpha systems, a compiler option provides the behaviour.
+      # See the ieee(3) manual page, also available at
+      # <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/0600____.HTM>
+      if test -n "$GCC"; then
+        # GCC has the option -mieee.
+        # For full IEEE compliance (rarely needed), use option -mieee-with-inexact.
+        CPPFLAGS="$CPPFLAGS -mieee"
       else
-	break
+        # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact.
+        # For full IEEE compliance (rarely needed), use option -ieee_with_inexact.
+        CPPFLAGS="$CPPFLAGS -ieee"
       fi
       ;;
-    none) break ;;
-    esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
-
-
-if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-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_executable_p "$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
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#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);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CC"   am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    case $depmode in
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
+    sh*)
+      if test -n "$GCC"; then
+        # GCC has the option -mieee.
+        CPPFLAGS="$CPPFLAGS -mieee"
       fi
       ;;
-    none) break ;;
-    esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
+  esac
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+	 # IRIX 6.2 and later do not support large files by default,
+	 # so use the C compiler's -n32 option if that helps.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 CC="$CC -n32"
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
     fi
-  done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
 
-  cd ..
-  rm -rf conftest.dir
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  am_cv_CC_dependencies_compiler_type=none
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=no; break
 fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
 
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=64; break
 fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
-
-
-if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_large_files=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  fi
+
+
 fi
 
 
 
-am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc
 
-# Check whether --enable-gcc-warnings or --disable-gcc-warnings was given.
-if test "${enable_gcc_warnings+set}" = set; then
-  enableval="$enable_gcc_warnings"
-  case "${enableval}" in
+
+
+  # Check whether --enable-threads was given.
+if test "${enable_threads+set}" = set; then :
+  enableval=$enable_threads; gl_use_threads=$enableval
+else
+  if test -n "$gl_use_threads_default"; then
+       gl_use_threads="$gl_use_threads_default"
+     else
+       case "$host_os" in
+                                                               osf*) gl_use_threads=no ;;
+         cygwin*)
+               case `uname -r` in
+                 1.[0-5].*) gl_use_threads=no ;;
+                 *)         gl_use_threads=yes ;;
+               esac
+               ;;
+         *)    gl_use_threads=yes ;;
+       esac
+     fi
+
+fi
+
+  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+    # For using <pthread.h>:
+    case "$host_os" in
+      osf*)
+        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+        # groks <pthread.h>. cc also understands the flag -pthread, but
+        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+        # 2. putting a flag into CPPFLAGS that has an effect on the linker
+        # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
+        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+        ;;
+    esac
+    # Some systems optimize for single-threaded programs by default, and
+    # need special flags to disable these optimizations. For example, the
+    # definition of 'errno' in <errno.h>.
+    case "$host_os" in
+      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+    esac
+  fi
+
+
+
+
+  # Code from module alloca-opt:
+  # Code from module announce-gen:
+  # Code from module argmatch:
+  # Code from module assert:
+  # Code from module binary-io:
+  # Code from module bitrotate:
+  # Code from module c-ctype:
+  # Code from module c-strcase:
+  # Code from module c-strcaseeq:
+  # Code from module calloc-posix:
+  # Code from module cloexec:
+  # Code from module close:
+  # Code from module close-stream:
+  # Code from module closeout:
+  # Code from module config-h:
+  # Code from module configmake:
+  # Code from module dirname:
+  # Code from module dirname-lgpl:
+  # Code from module do-release-commit-and-tag:
+  # Code from module dosname:
+  # Code from module double-slash-root:
+  # Code from module dup2:
+  # Code from module environ:
+  # Code from module errno:
+  # Code from module error:
+  # Code from module exitfail:
+  # Code from module extensions:
+
+  # Code from module extern-inline:
+  # Code from module fatal-signal:
+  # Code from module fcntl:
+  # Code from module fcntl-h:
+  # Code from module fd-hook:
+  # Code from module fd-safer-flag:
+  # Code from module fdl:
+  # Code from module float:
+  # Code from module fopen:
+  # Code from module fopen-safer:
+  # Code from module fpending:
+  # Code from module fpieee:
+
+  # Code from module fprintf-posix:
+  # Code from module fpucw:
+  # Code from module frexp-nolibm:
+  # Code from module frexpl-nolibm:
+  # Code from module fseterr:
+  # Code from module fstat:
+  # Code from module gendocs:
+  # Code from module getdelim:
+  # Code from module getdtablesize:
+  # Code from module getline:
+  # Code from module getopt-gnu:
+  # Code from module getopt-posix:
+  # Code from module gettext:
+  # Code from module gettext-h:
+  # Code from module git-version-gen:
+  # Code from module gitlog-to-changelog:
+  # Code from module gnu-web-doc-update:
+  # Code from module gnumakefile:
+  # Code from module gnupload:
+  # Code from module gpl-3.0:
+  # Code from module hash:
+  # Code from module havelib:
+  # Code from module include_next:
+  # Code from module intprops:
+  # Code from module inttypes:
+  # Code from module inttypes-incomplete:
+  # Code from module isnan:
+  # Code from module isnand:
+  # Code from module isnand-nolibm:
+  # Code from module isnanf:
+  # Code from module isnanf-nolibm:
+  # Code from module isnanl:
+  # Code from module isnanl-nolibm:
+  # Code from module iswblank:
+  # Code from module javacomp-script:
+  # Code from module javaexec-script:
+  # Code from module largefile:
+
+  # Code from module ldexp:
+  # Code from module ldexpl:
+  # Code from module localcharset:
+  # Code from module lock:
+  # Code from module maintainer-makefile:
+  # Code from module malloc-gnu:
+  # Code from module malloc-posix:
+  # Code from module math:
+  # Code from module mbchar:
+  # Code from module mbrtowc:
+  # Code from module mbschr:
+  # Code from module mbsinit:
+  # Code from module mbsrchr:
+  # Code from module mbswidth:
+  # Code from module mbuiter:
+  # Code from module memchr:
+  # Code from module msvc-inval:
+  # Code from module msvc-nothrow:
+  # Code from module multiarch:
+  # Code from module nocrash:
+  # Code from module obstack:
+  # Code from module obstack-printf:
+  # Code from module open:
+  # Code from module pathmax:
+  # Code from module perror:
+  # Code from module pipe2:
+  # Code from module pipe2-safer:
+  # Code from module posix_spawn-internal:
+  # Code from module posix_spawn_file_actions_addclose:
+  # Code from module posix_spawn_file_actions_adddup2:
+  # Code from module posix_spawn_file_actions_addopen:
+  # Code from module posix_spawn_file_actions_destroy:
+  # Code from module posix_spawn_file_actions_init:
+  # Code from module posix_spawnattr_destroy:
+  # Code from module posix_spawnattr_init:
+  # Code from module posix_spawnattr_setflags:
+  # Code from module posix_spawnattr_setsigmask:
+  # Code from module posix_spawnp:
+  # Code from module printf-frexp:
+  # Code from module printf-frexpl:
+  # Code from module printf-posix:
+  # Code from module printf-safe:
+  # Code from module progname:
+  # Code from module quote:
+  # Code from module quotearg:
+  # Code from module quotearg-simple:
+  # Code from module raise:
+  # Code from module rawmemchr:
+  # Code from module readme-release:
+  # Code from module realloc-posix:
+  # Code from module sched:
+  # Code from module sigaction:
+  # Code from module signal-h:
+  # Code from module signbit:
+  # Code from module sigprocmask:
+  # Code from module size_max:
+  # Code from module snippet/_Noreturn:
+  # Code from module snippet/arg-nonnull:
+  # Code from module snippet/c++defs:
+  # Code from module snippet/warn-on-use:
+  # Code from module snprintf:
+  # Code from module snprintf-posix:
+  # Code from module spawn:
+  # Code from module spawn-pipe:
+  # Code from module sprintf-posix:
+  # Code from module ssize_t:
+  # Code from module stat:
+  # Code from module stdbool:
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module stdio:
+  # Code from module stdlib:
+  # Code from module stpcpy:
+  # Code from module strchrnul:
+  # Code from module strdup-posix:
+  # Code from module streq:
+  # Code from module strerror:
+  # Code from module strerror-override:
+  # Code from module strerror_r-posix:
+  # Code from module string:
+  # Code from module strndup:
+  # Code from module strnlen:
+  # Code from module strnlen1:
+  # Code from module strtoul:
+  # Code from module strverscmp:
+  # Code from module sys_stat:
+  # Code from module sys_types:
+  # Code from module sys_wait:
+  # Code from module threadlib:
+
+
+
+  # Code from module time:
+  # Code from module unistd:
+  # Code from module unistd-safer:
+  # Code from module unitypes:
+  # Code from module uniwidth/base:
+  # Code from module uniwidth/width:
+  # Code from module unlocked-io:
+  # Code from module unsetenv:
+  # Code from module update-copyright:
+  # Code from module useless-if-before-free:
+  # Code from module vasnprintf:
+  # Code from module vc-list-files:
+  # Code from module verify:
+  # Code from module vfprintf-posix:
+  # Code from module vsnprintf:
+  # Code from module vsnprintf-posix:
+  # Code from module vsprintf-posix:
+  # Code from module wait-process:
+  # Code from module waitpid:
+  # Code from module warnings:
+  # Code from module wchar:
+  # Code from module wctype-h:
+  # Code from module wcwidth:
+  # Code from module xalloc:
+  # Code from module xalloc-die:
+  # Code from module xalloc-oversized:
+  # Code from module xmemdup0:
+  # Code from module xsize:
+  # Code from module xstrndup:
+
+
+# Gnulib uses '#pragma GCC diagnostic push' to silence some
+# warnings, but older gcc doesn't support this.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pragma GCC diagnostic push works" >&5
+$as_echo_n "checking whether pragma GCC diagnostic push works... " >&6; }
+if ${lv_cv_gcc_pragma_push_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CFLAGS=$CFLAGS
+  CFLAGS='-Wunknown-pragmas -Werror'
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    #pragma GCC diagnostic push
+    #pragma GCC diagnostic pop
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  lv_cv_gcc_pragma_push_works=yes
+else
+  lv_cv_gcc_pragma_push_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$save_CFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lv_cv_gcc_pragma_push_works" >&5
+$as_echo "$lv_cv_gcc_pragma_push_works" >&6; }
+
+# Check whether --enable-gcc-warnings was given.
+if test "${enable_gcc_warnings+set}" = set; then :
+  enableval=$enable_gcc_warnings; case $enable_gcc_warnings in
    yes|no) ;;
-   *)      { { echo "$as_me:$LINENO: error: bad value ${enableval} for gcc-warnings option" >&5
-echo "$as_me: error: bad value ${enableval} for gcc-warnings option" >&2;}
-   { (exit 1); exit 1; }; } ;;
+   *)  as_fn_error $? "invalid value for --gcc-warnings: $enable_gcc_warnings" "$LINENO" 5;;
  esac
 else
-  enableval=no
-fi;
-if test "${enableval}" = yes; then
-  echo "$as_me:$LINENO: checking whether compiler accepts -Werror" >&5
-echo $ECHO_N "checking whether compiler accepts -Werror... $ECHO_C" >&6
+  enable_gcc_warnings=no
+fi
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Werror"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+if test "$enable_gcc_warnings" = yes; then
+  warn_common='-Wall -Wextra -Wno-sign-compare -Wcast-align
+    -Wformat -Wpointer-arith -Wwrite-strings'
+  warn_c='-Wbad-function-cast -Wshadow -Wstrict-prototypes'
+  warn_cxx='-Wnoexcept'
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+  # Clang supports many of GCC's -W options, but only issues warnings
+  # on the ones it does not recognize.  In that case, gl_WARN_ADD
+  # thinks the option is supported, and unknown options are then added
+  # to CFLAGS.  But then, when -Werror is added in the test suite for
+  # instance, the warning about the unknown option turns into an
+  # error.
+  #
+  # This should be addressed by gnulib's gl_WARN_ADD, but in the
+  # meanwhile, turn warnings about unknown options into errors in
+  # CFLAGS, and restore CFLAGS after the tests.
+  save_CFLAGS=$CFLAGS
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror=unknown-warning-option" >&5
+$as_echo_n "checking whether C compiler handles -Werror=unknown-warning-option... " >&6; }
+if ${gl_cv_warn_c__Werror_unknown_warning_option+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CFLAGS"
+  as_fn_append CFLAGS " -Werror=unknown-warning-option"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Werror"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_warn_c__Werror_unknown_warning_option=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_c__Werror_unknown_warning_option=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  WERROR_CFLAGS=$WARNING_CFLAGS
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
 
-  WARNING_CFLAGS=
-  echo "$as_me:$LINENO: checking whether compiler accepts -W" >&5
-echo $ECHO_N "checking whether compiler accepts -W... $ECHO_C" >&6
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Werror_unknown_warning_option" >&5
+$as_echo "$gl_cv_warn_c__Werror_unknown_warning_option" >&6; }
+if test "x$gl_cv_warn_c__Werror_unknown_warning_option" = xyes; then :
+  as_fn_append CFLAGS " -Werror=unknown-warning-option"
+fi
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -W"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+
+  for i in $warn_common $warn_c;
+  do
+    as_gl_Warn=`$as_echo "gl_cv_warn_c_$i" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles $i" >&5
+$as_echo_n "checking whether C compiler handles $i... " >&6; }
+if eval \${$as_gl_Warn+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CFLAGS"
+  as_fn_append CFLAGS " $i"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -W"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Warn=yes"
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  eval "$as_gl_Warn=no"
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wall" >&5
-echo $ECHO_N "checking whether compiler accepts -Wall... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wall"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+eval ac_res=\$$as_gl_Warn
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_gl_Warn"\" = x"yes"; then :
+  as_fn_append WARN_CFLAGS " $i"
+fi
+
+
+  done
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror" >&5
+$as_echo_n "checking whether C compiler handles -Werror... " >&6; }
+if ${gl_cv_warn_c__Werror+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CFLAGS"
+  as_fn_append CFLAGS " -Werror"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wall"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_warn_c__Werror=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_c__Werror=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wcast-align" >&5
-echo $ECHO_N "checking whether compiler accepts -Wcast-align... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wcast-align"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Werror" >&5
+$as_echo "$gl_cv_warn_c__Werror" >&6; }
+if test "x$gl_cv_warn_c__Werror" = xyes; then :
+  as_fn_append WERROR_CFLAGS " -Werror"
+fi
+
+
+
+  # Warnings for the test suite, and maybe for bison if GCC is modern
+  # enough.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wmissing-declarations" >&5
+$as_echo_n "checking whether C compiler handles -Wmissing-declarations... " >&6; }
+if ${gl_cv_warn_c__Wmissing_declarations+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CFLAGS"
+  as_fn_append CFLAGS " -Wmissing-declarations"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wcast-align"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_warn_c__Wmissing_declarations=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_c__Wmissing_declarations=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wcast-qual" >&5
-echo $ECHO_N "checking whether compiler accepts -Wcast-qual... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wcast-qual"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wmissing_declarations" >&5
+$as_echo "$gl_cv_warn_c__Wmissing_declarations" >&6; }
+if test "x$gl_cv_warn_c__Wmissing_declarations" = xyes; then :
+  as_fn_append WARN_CFLAGS_TEST " -Wmissing-declarations"
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wmissing-prototypes" >&5
+$as_echo_n "checking whether C compiler handles -Wmissing-prototypes... " >&6; }
+if ${gl_cv_warn_c__Wmissing_prototypes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CFLAGS"
+  as_fn_append CFLAGS " -Wmissing-prototypes"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wcast-qual"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_warn_c__Wmissing_prototypes=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_c__Wmissing_prototypes=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wformat" >&5
-echo $ECHO_N "checking whether compiler accepts -Wformat... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wformat"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wmissing_prototypes" >&5
+$as_echo "$gl_cv_warn_c__Wmissing_prototypes" >&6; }
+if test "x$gl_cv_warn_c__Wmissing_prototypes" = xyes; then :
+  as_fn_append WARN_CFLAGS_TEST " -Wmissing-prototypes"
+fi
+
+
+  test $lv_cv_gcc_pragma_push_works = yes &&
+    as_fn_append WARN_CFLAGS " $WARN_CFLAGS_TEST"
+
+  # Warnings for the test suite only.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wundef" >&5
+$as_echo_n "checking whether C compiler handles -Wundef... " >&6; }
+if ${gl_cv_warn_c__Wundef+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CFLAGS"
+  as_fn_append CFLAGS " -Wundef"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wformat"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_warn_c__Wundef=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_c__Wundef=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wwrite-strings" >&5
-echo $ECHO_N "checking whether compiler accepts -Wwrite-strings... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wwrite-strings"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wundef" >&5
+$as_echo "$gl_cv_warn_c__Wundef" >&6; }
+if test "x$gl_cv_warn_c__Wundef" = xyes; then :
+  as_fn_append WARN_CFLAGS_TEST " -Wundef"
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -pedantic" >&5
+$as_echo_n "checking whether C compiler handles -pedantic... " >&6; }
+if ${gl_cv_warn_c__pedantic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CFLAGS"
+  as_fn_append CFLAGS " -pedantic"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wwrite-strings"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_warn_c__pedantic=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_c__pedantic=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  WARNING_CXXFLAGS=$WARNING_CFLAGS
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
 
-  # The following warnings are not suitable for C++.
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wbad-function-cast" >&5
-echo $ECHO_N "checking whether compiler accepts -Wbad-function-cast... $ECHO_C" >&6
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__pedantic" >&5
+$as_echo "$gl_cv_warn_c__pedantic" >&6; }
+if test "x$gl_cv_warn_c__pedantic" = xyes; then :
+  as_fn_append WARN_CFLAGS_TEST " -pedantic"
+fi
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wbad-function-cast"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+
+  CFLAGS=$save_CFLAGS
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+  save_CXXFLAGS=$CXXFLAGS
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Werror=unknown-warning-option" >&5
+$as_echo_n "checking whether C++ compiler handles -Werror=unknown-warning-option... " >&6; }
+if ${gl_cv_warn_cxx__Werror_unknown_warning_option+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " -Werror=unknown-warning-option"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wbad-function-cast"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  gl_cv_warn_cxx__Werror_unknown_warning_option=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_cxx__Werror_unknown_warning_option=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wmissing-declarations" >&5
-echo $ECHO_N "checking whether compiler accepts -Wmissing-declarations... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wmissing-declarations"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Werror_unknown_warning_option" >&5
+$as_echo "$gl_cv_warn_cxx__Werror_unknown_warning_option" >&6; }
+if test "x$gl_cv_warn_cxx__Werror_unknown_warning_option" = xyes; then :
+  as_fn_append CXXFLAGS " -Werror=unknown-warning-option"
+fi
+
+
+  for i in $warn_common $warn_cxx;
+  do
+    as_gl_Warn=`$as_echo "gl_cv_warn_cxx_$i" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles $i" >&5
+$as_echo_n "checking whether C++ compiler handles $i... " >&6; }
+if eval \${$as_gl_Warn+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " $i"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wmissing-declarations"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  eval "$as_gl_Warn=yes"
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  eval "$as_gl_Warn=no"
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wmissing-prototypes" >&5
-echo $ECHO_N "checking whether compiler accepts -Wmissing-prototypes... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wmissing-prototypes"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+eval ac_res=\$$as_gl_Warn
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_gl_Warn"\" = x"yes"; then :
+  as_fn_append WARN_CXXFLAGS " $i"
+fi
+
+
+  done
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Wzero-as-null-pointer-constant" >&5
+$as_echo_n "checking whether C++ compiler handles -Wzero-as-null-pointer-constant... " >&6; }
+if ${gl_cv_warn_cxx__Wzero_as_null_pointer_constant+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " -Wzero-as-null-pointer-constant"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+nullptr
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wmissing-prototypes"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  gl_cv_warn_cxx__Wzero_as_null_pointer_constant=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_cxx__Wzero_as_null_pointer_constant=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wshadow" >&5
-echo $ECHO_N "checking whether compiler accepts -Wshadow... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wshadow"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Wzero_as_null_pointer_constant" >&5
+$as_echo "$gl_cv_warn_cxx__Wzero_as_null_pointer_constant" >&6; }
+if test "x$gl_cv_warn_cxx__Wzero_as_null_pointer_constant" = xyes; then :
+  as_fn_append WARN_CXXFLAGS " -Wzero-as-null-pointer-constant"
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Werror" >&5
+$as_echo_n "checking whether C++ compiler handles -Werror... " >&6; }
+if ${gl_cv_warn_cxx__Werror+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " -Werror"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wshadow"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  gl_cv_warn_cxx__Werror=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_cxx__Werror=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
-  echo "$as_me:$LINENO: checking whether compiler accepts -Wstrict-prototypes" >&5
-echo $ECHO_N "checking whether compiler accepts -Wstrict-prototypes... $ECHO_C" >&6
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
 
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -Wstrict-prototypes"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Werror" >&5
+$as_echo "$gl_cv_warn_cxx__Werror" >&6; }
+if test "x$gl_cv_warn_cxx__Werror" = xyes; then :
+  as_fn_append WERROR_CXXFLAGS " -Werror"
+fi
+
+
+  # Warnings for the test suite only.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Wundef" >&5
+$as_echo_n "checking whether C++ compiler handles -Wundef... " >&6; }
+if ${gl_cv_warn_cxx__Wundef+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " -Wundef"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  WARNING_CFLAGS="$WARNING_CFLAGS -Wstrict-prototypes"
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  gl_cv_warn_cxx__Wundef=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  gl_cv_warn_cxx__Wundef=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$ac_save_CFLAGS"
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
 
-cat >>confdefs.h <<\_ACEOF
-#define lint 1
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Wundef" >&5
+$as_echo "$gl_cv_warn_cxx__Wundef" >&6; }
+if test "x$gl_cv_warn_cxx__Wundef" = xyes; then :
+  as_fn_append WARN_CXXFLAGS_TEST " -Wundef"
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -pedantic" >&5
+$as_echo_n "checking whether C++ compiler handles -pedantic... " >&6; }
+if ${gl_cv_warn_cxx__pedantic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " -pedantic"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  gl_cv_warn_cxx__pedantic=yes
+else
+  gl_cv_warn_cxx__pedantic=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__pedantic" >&5
+$as_echo "$gl_cv_warn_cxx__pedantic" >&6; }
+if test "x$gl_cv_warn_cxx__pedantic" = xyes; then :
+  as_fn_append WARN_CXXFLAGS_TEST " -pedantic"
+fi
+
+
+  CXXFLAGS=$save_CXXFLAGS
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 fi
 
 
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <limits.h>
 	 int test_array[CHAR_BIT];
@@ -6003,48 +8017,232 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
+if ac_fn_c_try_compile "$LINENO"; then :
+
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compile a simple C program
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compile a simple C program
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $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 compile a simple C program
+See \`config.log' for more details" "$LINENO" 5; }
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   BISON_C_WORKS=:
 
 
-# Check whether --enable-yacc or --disable-yacc was given.
-if test "${enable_yacc+set}" = set; then
-  enableval="$enable_yacc"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports POSIXLY_CORRECT=1" >&5
+$as_echo_n "checking whether $CC supports POSIXLY_CORRECT=1... " >&6; }
+if ${bison_cv_c_supports_posixly_correct+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }'
+case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in
+  xx) gl_had_POSIXLY_CORRECT=exported ;;
+  x)  gl_had_POSIXLY_CORRECT=yes      ;;
+  *)  gl_had_POSIXLY_CORRECT=         ;;
+esac
+POSIXLY_CORRECT=1
+export POSIXLY_CORRECT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  bison_cv_c_supports_posixly_correct=yes
+else
+  bison_cv_c_supports_posixly_correct=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+case $gl_had_POSIXLY_CORRECT in
+  exported) ;;
+  yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;;
+  *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bison_cv_c_supports_posixly_correct" >&5
+$as_echo "$bison_cv_c_supports_posixly_correct" >&6; }
+case $bison_cv_c_supports_posixly_correct in
+  yes) C_COMPILER_POSIXLY_CORRECT=true
+ ;;
+  no)  C_COMPILER_POSIXLY_CORRECT=false
+;;
+esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX builds executables that work" >&5
+$as_echo_n "checking whether $CXX builds executables that work... " >&6; }
+if ${bison_cv_cxx_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+    bison_cv_cxx_works=no
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <cstdlib>
+	  #include <iostream>
+	  #include <map>
+	  #include <string>
+	  using namespace std;
+int
+main ()
+{
+std::cerr << "";
+          cout << "";
+	  typedef std::pair<unsigned int, int> uipair;
+	  std::map<unsigned int, int> m;
+	  std::map<unsigned int, int>::iterator i;
+	  m.insert (uipair (4, -4));
+	  for (i = m.begin (); i != m.end (); ++i)
+	    if (i->first != 4)
+	      return 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  if { ac_try='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_objext $LIBS >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  if test "$cross_compiling" = yes; then :
+  bison_cv_cxx_works=cross
+else
+  if { ac_try='./conftest$ac_exeext'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  bison_cv_cxx_works=yes
+fi
+fi
+fi
+       rm -f conftest$ac_exeext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bison_cv_cxx_works" >&5
+$as_echo "$bison_cv_cxx_works" >&6; }
+
+ case $bison_cv_cxx_works in
+ yes)
+    BISON_CXX_WORKS=':';;
+ no | cross)
+    BISON_CXX_WORKS='exit 77';;
+ esac
+
+
+  if test $bison_cv_cxx_works = yes; then
+  BISON_CXX_WORKS_TRUE=
+  BISON_CXX_WORKS_FALSE='#'
+else
+  BISON_CXX_WORKS_TRUE='#'
+  BISON_CXX_WORKS_FALSE=
+fi
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports POSIXLY_CORRECT=1" >&5
+$as_echo_n "checking whether $CXX supports POSIXLY_CORRECT=1... " >&6; }
+if ${bison_cv_cxx_supports_posixly_correct+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }'
+case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in
+  xx) gl_had_POSIXLY_CORRECT=exported ;;
+  x)  gl_had_POSIXLY_CORRECT=yes      ;;
+  *)  gl_had_POSIXLY_CORRECT=         ;;
+esac
+POSIXLY_CORRECT=1
+export POSIXLY_CORRECT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  bison_cv_cxx_supports_posixly_correct=yes
+else
+  bison_cv_cxx_supports_posixly_correct=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+case $gl_had_POSIXLY_CORRECT in
+  exported) ;;
+  yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;;
+  *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bison_cv_cxx_supports_posixly_correct" >&5
+$as_echo "$bison_cv_cxx_supports_posixly_correct" >&6; }
+case $bison_cv_cxx_supports_posixly_correct in
+  yes) CXX_COMPILER_POSIXLY_CORRECT=true
+ ;;
+  no)  CXX_COMPILER_POSIXLY_CORRECT=false
+;;
+esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# Check whether --enable-yacc was given.
+if test "${enable_yacc+set}" = set; then :
+  enableval=$enable_yacc;
 else
   enable_yacc=yes
-fi;
+fi
+
 case $enable_yacc in
 yes)
   YACC_SCRIPT=yacc
@@ -6057,14 +8255,17 @@
 
 
 # Checks for programs.
+
+DOT=${DOT-"${am_missing_run}dot"}
+
 for ac_prog in flex lex
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_LEX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LEX+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$LEX"; then
   ac_cv_prog_LEX="$LEX" # Let the user override the test.
@@ -6074,268 +8275,189 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_LEX="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 LEX=$ac_cv_prog_LEX
 if test -n "$LEX"; then
-  echo "$as_me:$LINENO: result: $LEX" >&5
-echo "${ECHO_T}$LEX" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+$as_echo "$LEX" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
   test -n "$LEX" && break
 done
 test -n "$LEX" || LEX=":"
 
-if test -z "$LEXLIB"
-then
-  echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5
-echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6
-if test "${ac_cv_lib_fl_yywrap+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char yywrap ();
-int
-main ()
-{
-yywrap ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_fl_yywrap=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_fl_yywrap=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5
-echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6
-if test $ac_cv_lib_fl_yywrap = yes; then
-  LEXLIB="-lfl"
-else
-  echo "$as_me:$LINENO: checking for yywrap in -ll" >&5
-echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6
-if test "${ac_cv_lib_l_yywrap+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ll  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char yywrap ();
-int
-main ()
-{
-yywrap ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_l_yywrap=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_l_yywrap=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5
-echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6
-if test $ac_cv_lib_l_yywrap = yes; then
-  LEXLIB="-ll"
-fi
-
-fi
-
-fi
-
 if test "x$LEX" != "x:"; then
-  echo "$as_me:$LINENO: checking lex output file root" >&5
-echo $ECHO_N "checking lex output file root... $ECHO_C" >&6
-if test "${ac_cv_prog_lex_root+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lex is flex" >&5
+$as_echo_n "checking whether lex is flex... " >&6; }
+if ${ac_cv_prog_lex_is_flex+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  # The minimal lex program is just a single line: %%.  But some broken lexes
-# (Solaris, I think it was) want two %% lines, so accommodate them.
+  cat >conftest.l <<_ACEOF
+%option debug nodefault noinput nounput noyywrap never-interactive
+%x SC_CONF_TEST
+%%
+a { BEGIN SC_CONF_TEST; }
+_ACEOF
+if { { ac_try="$LEX conftest.l"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$LEX conftest.l") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  ac_cv_prog_lex_is_flex=yes
+else
+  ac_cv_prog_lex_is_flex=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_is_flex" >&5
+$as_echo "$ac_cv_prog_lex_is_flex" >&6; }
+LEX_IS_FLEX=`test "$ac_cv_prog_lex_is_flex" = yes && echo true || echo false`
+
 cat >conftest.l <<_ACEOF
 %%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
+    yyless ((input () != 0)); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
 %%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+  return ! yylex () + ! yywrap ();
+}
 _ACEOF
-{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5
-  (eval $LEX conftest.l) 2>&5
+{ { ac_try="$LEX conftest.l"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$LEX conftest.l") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
+$as_echo_n "checking lex output file root... " >&6; }
+if ${ac_cv_prog_lex_root+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
 if test -f lex.yy.c; then
   ac_cv_prog_lex_root=lex.yy
 elif test -f lexyy.c; then
   ac_cv_prog_lex_root=lexyy
 else
-  { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5
-echo "$as_me: error: cannot find output from $LEX; giving up" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
 fi
 fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5
-echo "${ECHO_T}$ac_cv_prog_lex_root" >&6
-rm -f conftest.l
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+$as_echo "$ac_cv_prog_lex_root" >&6; }
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
-echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5
-echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6
-if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+if test -z "${LEXLIB+set}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
+$as_echo_n "checking lex library... " >&6; }
+if ${ac_cv_lib_lex+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  # POSIX says lex can declare yytext either as a pointer or an array; the
-# default is implementation-dependent. Figure out which it is, since
-# not all implementations provide the %pointer and %array declarations.
-ac_cv_prog_lex_yytext_pointer=no
-echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
-ac_save_LIBS=$LIBS
-LIBS="$LIBS $LEXLIB"
-cat >conftest.$ac_ext <<_ACEOF
+
+    ac_save_LIBS=$LIBS
+    ac_cv_lib_lex='none needed'
+    for ac_lib in '' -lfl -ll; do
+      LIBS="$ac_lib $ac_save_LIBS"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 `cat $LEX_OUTPUT_ROOT.c`
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_lex_yytext_pointer=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_lex=$ac_lib
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      test "$ac_cv_lib_lex" != 'none needed' && break
+    done
+    LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+$as_echo "$ac_cv_lib_lex" >&6; }
+  test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+$as_echo_n "checking whether yytext is a pointer... " >&6; }
+if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent.  Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+  #define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_prog_lex_yytext_pointer=yes
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_save_LIBS
-rm -f "${LEX_OUTPUT_ROOT}.c"
 
 fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5
-echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
 if test $ac_cv_prog_lex_yytext_pointer = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define YYTEXT_POINTER 1
-_ACEOF
+$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h
 
 fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
 
 fi
+$LEX_IS_FLEX || as_fn_error $? "Flex is required" "$LINENO" 5
 for ac_prog in 'bison -y' byacc
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_YACC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_YACC+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -6345,26 +8467,28 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_YACC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 YACC=$ac_cv_prog_YACC
 if test -n "$YACC"; then
-  echo "$as_me:$LINENO: result: $YACC" >&5
-echo "${ECHO_T}$YACC" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
   test -n "$YACC" && break
 done
 test -n "$YACC" || YACC="yacc"
@@ -6372,10 +8496,10 @@
 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.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -6385,35 +8509,37 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_RANLIB="${ac_tool_prefix}ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
 fi
 if test -z "$ac_cv_prog_RANLIB"; then
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
@@ -6423,44 +8549,157 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_RANLIB="ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
-  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
 fi
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  RANLIB=$ac_ct_RANLIB
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  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
+    RANLIB=$ac_ct_RANLIB
+  fi
 else
   RANLIB="$ac_cv_prog_RANLIB"
 fi
 
-for ac_prog in gm4 gnum4 m4
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_M4+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU M4 that supports accurate traces" >&5
+$as_echo_n "checking for GNU M4 that supports accurate traces... " >&6; }
+if ${ac_cv_path_M4+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  case $M4 in
+  rm -f conftest.m4f
+ac_had_posixly_correct=${POSIXLY_CORRECT:+yes}
+{ POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}
+if test -z "$M4"; then
+  ac_path_M4_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  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_prog in m4 gm4 gnum4; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_M4="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_M4" || continue
+      # Root out GNU M4 1.4.5, as well as non-GNU m4 that ignore -t, -F.
+      # Root out GNU M4 1.4.15 with buggy false negative replacement strstr.
+      # Root out Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 with buggy
+      # false positive strstr.
+      ac_snippet=change'quote(<,>)in''dir(<if''def>,mac,bug)'
+      ac_snippet=${ac_snippet}pat'subst(a,\(b\)\|\(a\),\1)d'nl
+      ac_snippet=${ac_snippet}${as_nl}if'else(in''dex(..wi.d.,.d.),-1,bug)'
+      ac_snippet=${ac_snippet}${as_nl}if'else(in''dex(;:11-:12-:12-:12-:12-:12-:12-:12-:12.:12.:12.:12.:12.:12.:12.:12.:12-,:12-:12-:12-:12-:12-:12-:12-:12-),-1,,strstr-bug2)'
+      test -z "`$ac_path_M4 -F conftest.m4f </dev/null 2>&1`" \
+      && test -z "`$as_echo $ac_snippet | $ac_path_M4 --trace=mac 2>&1`" \
+      && test -f conftest.m4f \
+      && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:
+      rm -f conftest.m4f
+      $ac_path_M4_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_M4"; then
+    as_fn_error $? "no acceptable m4 could be found in \$PATH.
+GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.
+GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
+Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug." "$LINENO" 5
+  fi
+else
+  ac_cv_path_M4=$M4
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_M4" >&5
+$as_echo "$ac_cv_path_M4" >&6; }
+  M4=$ac_cv_path_M4
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $ac_cv_path_M4 accepts --gnu" >&5
+$as_echo_n "checking whether $ac_cv_path_M4 accepts --gnu... " >&6; }
+if ${ac_cv_prog_gnu_m4_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case `$M4 --help < /dev/null 2>&1` in
+      *--gnu*) ac_cv_prog_gnu_m4_gnu=yes ;;
+      *) ac_cv_prog_gnu_m4_gnu=no ;;
+    esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gnu_m4_gnu" >&5
+$as_echo "$ac_cv_prog_gnu_m4_gnu" >&6; }
+  if test "$ac_cv_prog_gnu_m4_gnu" = yes; then
+    M4_GNU=--gnu
+  else
+    M4_GNU=
+  fi
+
+  if test x$ac_had_posixly_correct = xyes; then
+    POSIXLY_CORRECT=:
+    if test $ac_cv_prog_gnu_m4_gnu = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: the version of M4 that was found does not support -g" >&5
+$as_echo "$as_me: WARNING: the version of M4 that was found does not support -g" >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using it with POSIXLY_CORRECT set may cause problems" >&5
+$as_echo "$as_me: WARNING: using it with POSIXLY_CORRECT set may cause problems" >&2;}
+    fi
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how m4 supports trace files" >&5
+$as_echo_n "checking how m4 supports trace files... " >&6; }
+if ${ac_cv_prog_gnu_m4_debugfile+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case `$M4 --help < /dev/null 2>&1` in
+      *debugfile*) ac_cv_prog_gnu_m4_debugfile=--debugfile ;;
+      *) ac_cv_prog_gnu_m4_debugfile=--error-output ;;
+    esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gnu_m4_debugfile" >&5
+$as_echo "$ac_cv_prog_gnu_m4_debugfile" >&6; }
+  M4_DEBUGFILE=$ac_cv_prog_gnu_m4_debugfile
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define M4 "$M4"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define M4_GNU_OPTION "$M4_GNU"
+_ACEOF
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; 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_path_PERL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PERL in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_M4="$M4" # Let the user override the test with a path.
+  ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -6468,205 +8707,89 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_M4="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PERL="$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
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
   ;;
 esac
 fi
-M4=$ac_cv_path_M4
-
-if test -n "$M4"; then
-  echo "$as_me:$LINENO: result: $M4" >&5
-echo "${ECHO_T}$M4" >&6
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-  test -n "$M4" && break
+
+if test -z "$PERL"; then
+   as_fn_error $? "perl not found" "$LINENO" 5
+fi
+
+HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"}
+
+# Extract the first word of "xsltproc", so it can be a program name with args.
+set dummy xsltproc; 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_path_XSLTPROC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $XSLTPROC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path.
+  ;;
+  *)
+  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_path_XSLTPROC="$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
+  fi
 done
-test -n "$M4" || M4="m4"
+  done
+IFS=$as_save_IFS
 
-echo "$as_me:$LINENO: checking whether m4 supports frozen files" >&5
-echo $ECHO_N "checking whether m4 supports frozen files... $ECHO_C" >&6
-if test "${ac_cv_prog_gnu_m4+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  ;;
+esac
+fi
+XSLTPROC=$ac_cv_path_XSLTPROC
+if test -n "$XSLTPROC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5
+$as_echo "$XSLTPROC" >&6; }
 else
-  ac_cv_prog_gnu_m4=no
-if test x"$M4" != x; then
-  case `$M4 --help < /dev/null 2>&1` in
-    *reload-state*) ac_cv_prog_gnu_m4=yes ;;
-  esac
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_gnu_m4" >&5
-echo "${ECHO_T}$ac_cv_prog_gnu_m4" >&6
-if test x"$ac_cv_prog_gnu_m4" != xyes; then
-  { { echo "$as_me:$LINENO: error: GNU M4 1.4 is required" >&5
-echo "$as_me: error: GNU M4 1.4 is required" >&2;}
-   { (exit 1); exit 1; }; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define M4 "$M4"
-_ACEOF
+
 
 
 # Checks for header files.
 
 
 
-
-
-for ac_header in $gl_header_list
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## -------------------------------- ##
-## Report this to bug-bison@gnu.org ##
-## -------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  for ac_header in $ac_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -6677,237 +8800,15 @@
 
 
 
-
-
-  :
-
-
-
-
-
-echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5
-echo $ECHO_N "checking for stdbool.h that conforms to C99... $ECHO_C" >&6
-if test "${ac_cv_header_stdbool_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-	  #include <stdbool.h>
-	  #ifndef bool
-	   "error: bool is not defined"
-	  #endif
-	  #ifndef false
-	   "error: false is not defined"
-	  #endif
-	  #if false
-	   "error: false is not 0"
-	  #endif
-	  #ifndef true
-	   "error: true is not defined"
-	  #endif
-	  #if true != 1
-	   "error: true is not 1"
-	  #endif
-	  #ifndef __bool_true_false_are_defined
-	   "error: __bool_true_false_are_defined is not defined"
-	  #endif
-
-	  struct s { _Bool s: 1; _Bool t; } s;
-
-	  char a[true == 1 ? 1 : -1];
-	  char b[false == 0 ? 1 : -1];
-	  char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-	  char d[(bool) 0.5 == true ? 1 : -1];
-	  bool e = &s;
-	  char f[(_Bool) 0.0 == false ? 1 : -1];
-	  char g[true];
-	  char h[sizeof (_Bool)];
-	  char i[sizeof s.t];
-	  enum { j = false, k = true, l = false * true, m = true * 256 };
-	  _Bool n[m];
-	  char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-	  char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-	  #if defined __xlc__ || defined __GNUC__
-	   /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
-	      reported by James Lemley on 2005-10-05; see
-	      http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-	      This test is not quite right, since xlc is allowed to
-	      reject this program, as the initializer for xlcbug is
-	      not one of the forms that C requires support for.
-	      However, doing the test right would require a run-time
-	      test, and that would make cross-compilation harder.
-	      Let us hope that IBM fixes the xlc bug, and also adds
-	      support for this kind of constant expression.  In the
-	      meantime, this test will reject xlc, which is OK, since
-	      our stdbool.h substitute should suffice.  We also test
-	      this with GCC, where it should work, to detect more
-	      quickly whether someone messes up the test in the
-	      future.  */
-	   char digs[] = "0123456789";
-	   int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
-	  #endif
-	  /* Catch a bug in an HP-UX C compiler.  See
-	     http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-	     http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-	   */
-	  _Bool q = true;
-	  _Bool *pq = &q;
-
-int
-main ()
-{
-
-	  *pq |= q;
-	  *pq |= ! q;
-	  /* Refer to every declared value, to avoid compiler optimizations.  */
-	  return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-		  + !m + !n + !o + !p + !q + !pq);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_stdbool_h=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdbool_h=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdbool_h" >&6
-   echo "$as_me:$LINENO: checking for _Bool" >&5
-echo $ECHO_N "checking for _Bool... $ECHO_C" >&6
-if test "${ac_cv_type__Bool+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-if ((_Bool *) 0)
-  return 0;
-if (sizeof (_Bool))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type__Bool=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type__Bool=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5
-echo "${ECHO_T}$ac_cv_type__Bool" >&6
-if test $ac_cv_type__Bool = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE__BOOL 1
-_ACEOF
-
-
-fi
-
-   if test $ac_cv_header_stdbool_h = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STDBOOL_H 1
-_ACEOF
-
-   fi
-
-
-
-  # Define two additional variables used in the Makefile substitution.
-
-  if test "$ac_cv_header_stdbool_h" = yes; then
-    STDBOOL_H=''
-  else
-    STDBOOL_H='stdbool.h'
-  fi
-
-
-  if test "$ac_cv_type__Bool" = yes; then
-    HAVE__BOOL=1
-  else
-    HAVE__BOOL=0
-  fi
-
-
-
 # Checks for compiler characteristics.
-echo "$as_me:$LINENO: checking for inline" >&5
-echo $ECHO_N "checking for inline... $ECHO_C" >&6
-if test "${ac_cv_c_inline+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifndef __cplusplus
 typedef int foo_t;
@@ -6916,40 +8817,16 @@
 #endif
 
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_c_inline=$ac_kw; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
 done
 
 fi
-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
-echo "${ECHO_T}$ac_cv_c_inline" >&6
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
 
 case $ac_cv_c_inline in
   inline | yes) ;;
@@ -6967,173 +8844,458 @@
 esac
 
 
-# Checks for types.
-echo "$as_me:$LINENO: checking for uintptr_t" >&5
-echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6
-if test "${ac_cv_type_uintptr_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+# Gnulib (later checks).  Putting them here rather than right after
+# gl_EARLY avoids some redundant checks.
+
+
+
+
+
+          LIBC_FATAL_STDERR_=1
+  export LIBC_FATAL_STDERR_
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+
+fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if ${ac_cv_working_alloca_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+			  if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_working_alloca_h=yes
+else
+  ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if ${ac_cv_func_alloca_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+				    if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_alloca_works=yes
+else
+  ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+
+
+
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if ${ac_cv_os_cray+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then :
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; 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"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if ${ac_cv_c_stack_direction+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_c_stack_direction=0
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+find_stack_direction (int *addr, int depth)
 {
-if ((uintptr_t *) 0)
-  return 0;
-if (sizeof (uintptr_t))
-  return 0;
-  ;
-  return 0;
+  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;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_uintptr_t=yes
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_stack_direction=1
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_uintptr_t=no
+  ac_cv_c_stack_direction=-1
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
-echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6
-if test $ac_cv_type_uintptr_t = yes; then
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
 cat >>confdefs.h <<_ACEOF
-#define HAVE_UINTPTR_T 1
+#define STACK_DIRECTION $ac_cv_c_stack_direction
 _ACEOF
 
 
 fi
 
 
-# Checks for library functions.
+  GNULIB__EXIT=0;
+  GNULIB_ATOLL=0;
+  GNULIB_CALLOC_POSIX=0;
+  GNULIB_CANONICALIZE_FILE_NAME=0;
+  GNULIB_GETLOADAVG=0;
+  GNULIB_GETSUBOPT=0;
+  GNULIB_GRANTPT=0;
+  GNULIB_MALLOC_POSIX=0;
+  GNULIB_MBTOWC=0;
+  GNULIB_MKDTEMP=0;
+  GNULIB_MKOSTEMP=0;
+  GNULIB_MKOSTEMPS=0;
+  GNULIB_MKSTEMP=0;
+  GNULIB_MKSTEMPS=0;
+  GNULIB_POSIX_OPENPT=0;
+  GNULIB_PTSNAME=0;
+  GNULIB_PTSNAME_R=0;
+  GNULIB_PUTENV=0;
+  GNULIB_RANDOM=0;
+  GNULIB_RANDOM_R=0;
+  GNULIB_REALLOC_POSIX=0;
+  GNULIB_REALPATH=0;
+  GNULIB_RPMATCH=0;
+  GNULIB_SETENV=0;
+  GNULIB_STRTOD=0;
+  GNULIB_STRTOLL=0;
+  GNULIB_STRTOULL=0;
+  GNULIB_SYSTEM_POSIX=0;
+  GNULIB_UNLOCKPT=0;
+  GNULIB_UNSETENV=0;
+  GNULIB_WCTOMB=0;
+    HAVE__EXIT=1;
+  HAVE_ATOLL=1;
+  HAVE_CANONICALIZE_FILE_NAME=1;
+  HAVE_DECL_GETLOADAVG=1;
+  HAVE_GETSUBOPT=1;
+  HAVE_GRANTPT=1;
+  HAVE_MKDTEMP=1;
+  HAVE_MKOSTEMP=1;
+  HAVE_MKOSTEMPS=1;
+  HAVE_MKSTEMP=1;
+  HAVE_MKSTEMPS=1;
+  HAVE_POSIX_OPENPT=1;
+  HAVE_PTSNAME=1;
+  HAVE_PTSNAME_R=1;
+  HAVE_RANDOM=1;
+  HAVE_RANDOM_H=1;
+  HAVE_RANDOM_R=1;
+  HAVE_REALPATH=1;
+  HAVE_RPMATCH=1;
+  HAVE_SETENV=1;
+  HAVE_DECL_SETENV=1;
+  HAVE_STRTOD=1;
+  HAVE_STRTOLL=1;
+  HAVE_STRTOULL=1;
+  HAVE_STRUCT_RANDOM_DATA=1;
+  HAVE_SYS_LOADAVG_H=0;
+  HAVE_UNLOCKPT=1;
+  HAVE_DECL_UNSETENV=1;
+  REPLACE_CALLOC=0;
+  REPLACE_CANONICALIZE_FILE_NAME=0;
+  REPLACE_MALLOC=0;
+  REPLACE_MBTOWC=0;
+  REPLACE_MKSTEMP=0;
+  REPLACE_PTSNAME=0;
+  REPLACE_PTSNAME_R=0;
+  REPLACE_PUTENV=0;
+  REPLACE_RANDOM_R=0;
+  REPLACE_REALLOC=0;
+  REPLACE_REALPATH=0;
+  REPLACE_SETENV=0;
+  REPLACE_STRTOD=0;
+  REPLACE_UNSETENV=0;
+  REPLACE_WCTOMB=0;
 
 
-
-
-
-for ac_func in $gl_func_list
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5
+$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; }
+if ${gl_cv_func_malloc_posix+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+
+                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
 
 int
 main ()
 {
-return f != $ac_func;
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+             choke me
+             #endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_malloc_posix=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  gl_cv_func_malloc_posix=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-eval "$as_ac_var=no"
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5
+$as_echo "$gl_cv_func_malloc_posix" >&6; }
+
+
+  GNULIB_CHDIR=0;
+  GNULIB_CHOWN=0;
+  GNULIB_CLOSE=0;
+  GNULIB_DUP=0;
+  GNULIB_DUP2=0;
+  GNULIB_DUP3=0;
+  GNULIB_ENVIRON=0;
+  GNULIB_EUIDACCESS=0;
+  GNULIB_FACCESSAT=0;
+  GNULIB_FCHDIR=0;
+  GNULIB_FCHOWNAT=0;
+  GNULIB_FDATASYNC=0;
+  GNULIB_FSYNC=0;
+  GNULIB_FTRUNCATE=0;
+  GNULIB_GETCWD=0;
+  GNULIB_GETDOMAINNAME=0;
+  GNULIB_GETDTABLESIZE=0;
+  GNULIB_GETGROUPS=0;
+  GNULIB_GETHOSTNAME=0;
+  GNULIB_GETLOGIN=0;
+  GNULIB_GETLOGIN_R=0;
+  GNULIB_GETPAGESIZE=0;
+  GNULIB_GETUSERSHELL=0;
+  GNULIB_GROUP_MEMBER=0;
+  GNULIB_ISATTY=0;
+  GNULIB_LCHOWN=0;
+  GNULIB_LINK=0;
+  GNULIB_LINKAT=0;
+  GNULIB_LSEEK=0;
+  GNULIB_PIPE=0;
+  GNULIB_PIPE2=0;
+  GNULIB_PREAD=0;
+  GNULIB_PWRITE=0;
+  GNULIB_READ=0;
+  GNULIB_READLINK=0;
+  GNULIB_READLINKAT=0;
+  GNULIB_RMDIR=0;
+  GNULIB_SETHOSTNAME=0;
+  GNULIB_SLEEP=0;
+  GNULIB_SYMLINK=0;
+  GNULIB_SYMLINKAT=0;
+  GNULIB_TTYNAME_R=0;
+  GNULIB_UNISTD_H_NONBLOCKING=0;
+  GNULIB_UNISTD_H_SIGPIPE=0;
+  GNULIB_UNLINK=0;
+  GNULIB_UNLINKAT=0;
+  GNULIB_USLEEP=0;
+  GNULIB_WRITE=0;
+    HAVE_CHOWN=1;
+  HAVE_DUP2=1;
+  HAVE_DUP3=1;
+  HAVE_EUIDACCESS=1;
+  HAVE_FACCESSAT=1;
+  HAVE_FCHDIR=1;
+  HAVE_FCHOWNAT=1;
+  HAVE_FDATASYNC=1;
+  HAVE_FSYNC=1;
+  HAVE_FTRUNCATE=1;
+  HAVE_GETDTABLESIZE=1;
+  HAVE_GETGROUPS=1;
+  HAVE_GETHOSTNAME=1;
+  HAVE_GETLOGIN=1;
+  HAVE_GETPAGESIZE=1;
+  HAVE_GROUP_MEMBER=1;
+  HAVE_LCHOWN=1;
+  HAVE_LINK=1;
+  HAVE_LINKAT=1;
+  HAVE_PIPE=1;
+  HAVE_PIPE2=1;
+  HAVE_PREAD=1;
+  HAVE_PWRITE=1;
+  HAVE_READLINK=1;
+  HAVE_READLINKAT=1;
+  HAVE_SETHOSTNAME=1;
+  HAVE_SLEEP=1;
+  HAVE_SYMLINK=1;
+  HAVE_SYMLINKAT=1;
+  HAVE_UNLINKAT=1;
+  HAVE_USLEEP=1;
+  HAVE_DECL_ENVIRON=1;
+  HAVE_DECL_FCHDIR=1;
+  HAVE_DECL_FDATASYNC=1;
+  HAVE_DECL_GETDOMAINNAME=1;
+  HAVE_DECL_GETLOGIN_R=1;
+  HAVE_DECL_GETPAGESIZE=1;
+  HAVE_DECL_GETUSERSHELL=1;
+  HAVE_DECL_SETHOSTNAME=1;
+  HAVE_DECL_TTYNAME_R=1;
+  HAVE_OS_H=0;
+  HAVE_SYS_PARAM_H=0;
+  REPLACE_CHOWN=0;
+  REPLACE_CLOSE=0;
+  REPLACE_DUP=0;
+  REPLACE_DUP2=0;
+  REPLACE_FCHOWNAT=0;
+  REPLACE_FTRUNCATE=0;
+  REPLACE_GETCWD=0;
+  REPLACE_GETDOMAINNAME=0;
+  REPLACE_GETLOGIN_R=0;
+  REPLACE_GETGROUPS=0;
+  REPLACE_GETPAGESIZE=0;
+  REPLACE_ISATTY=0;
+  REPLACE_LCHOWN=0;
+  REPLACE_LINK=0;
+  REPLACE_LINKAT=0;
+  REPLACE_LSEEK=0;
+  REPLACE_PREAD=0;
+  REPLACE_PWRITE=0;
+  REPLACE_READ=0;
+  REPLACE_READLINK=0;
+  REPLACE_RMDIR=0;
+  REPLACE_SLEEP=0;
+  REPLACE_SYMLINK=0;
+  REPLACE_TTYNAME_R=0;
+  REPLACE_UNLINK=0;
+  REPLACE_UNLINKAT=0;
+  REPLACE_USLEEP=0;
+  REPLACE_WRITE=0;
+  UNISTD_H_HAVE_WINSOCK2_H=0;
+  UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+
+
+
+
+
+  for ac_func in $ac_func_list
+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"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -7143,98 +9305,880 @@
 
 
 
+  if test $ac_cv_func__set_invalid_parameter_handler = yes; then
+    HAVE_MSVC_INVALID_PARAMETER_HANDLER=1
 
+$as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h
 
-  :
+  else
+    HAVE_MSVC_INVALID_PARAMETER_HANDLER=0
+  fi
 
 
 
 
 
-echo "$as_me:$LINENO: checking if malloc debugging is wanted" >&5
-echo $ECHO_N "checking if malloc debugging is wanted... $ECHO_C" >&6
 
-# Check whether --with-dmalloc or --without-dmalloc was given.
-if test "${with_dmalloc+set}" = set; then
-  withval="$with_dmalloc"
-  if test "$withval" = yes; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define WITH_DMALLOC 1
-_ACEOF
-
-  LIBS="$LIBS -ldmalloc"
-  LDFLAGS="$LDFLAGS -g"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5
+$as_echo_n "checking whether // is distinct from /... " >&6; }
+if ${gl_cv_double_slash_root+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+   if test x"$cross_compiling" = xyes ; then
+        # When cross-compiling, there is no way to tell whether // is special
+        # short of a list of hosts.  However, the only known hosts to date
+        # that have a distinct // are Apollo DomainOS (too old to port to),
+        # Cygwin, and z/OS.  If anyone knows of another system for which // has
+        # special semantics and is distinct from /, please report it to
+        # <bug-gnulib@gnu.org>.
+        case $host in
+          *-cygwin | i370-ibm-openedition)
+            gl_cv_double_slash_root=yes ;;
+          *)
+            # Be optimistic and assume that / and // are the same when we
+            # don't know.
+            gl_cv_double_slash_root='unknown, assuming no' ;;
+        esac
+      else
+        set x `ls -di / // 2>/dev/null`
+        if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then
+          gl_cv_double_slash_root=no
+        else
+          gl_cv_double_slash_root=yes
+        fi
+      fi
 fi
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi;
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5
+$as_echo "$gl_cv_double_slash_root" >&6; }
+  if test "$gl_cv_double_slash_root" = yes; then
+
+$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h
+
+  fi
 
 
- echo "$as_me:$LINENO: checking for pid_t" >&5
-echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
-if test "${ac_cv_type_pid_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5
+$as_echo_n "checking if environ is properly declared... " >&6; }
+  if ${gt_cv_var_environ_declaration+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_UNISTD_H
+     #include <unistd.h>
+     #endif
+     /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>.  */
+     #include <stdlib.h>
+
+           extern struct { int foo; } environ;
+int
+main ()
+{
+environ.foo = 1;
+  ;
+  return 0;
+}
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_var_environ_declaration=no
+else
+  gt_cv_var_environ_declaration=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5
+$as_echo "$gt_cv_var_environ_declaration" >&6; }
+  if test $gt_cv_var_environ_declaration = yes; then
+
+$as_echo "#define HAVE_ENVIRON_DECL 1" >>confdefs.h
+
+  fi
+
+
+  if test $gt_cv_var_environ_declaration != yes; then
+    HAVE_DECL_ENVIRON=0
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5
+$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
+if ${gl_cv_have_include_next+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -rf conftestd1a conftestd1b conftestd2
+     mkdir conftestd1a conftestd1b conftestd2
+                                                  cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+     gl_save_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_have_include_next=yes
+else
+  CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_have_include_next=buggy
+else
+  gl_cv_have_include_next=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     CPPFLAGS="$gl_save_CPPFLAGS"
+     rm -rf conftestd1a conftestd1b conftestd2
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5
+$as_echo "$gl_cv_have_include_next" >&6; }
+  PRAGMA_SYSTEM_HEADER=
+  if test $gl_cv_have_include_next = yes; then
+    INCLUDE_NEXT=include_next
+    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    if test -n "$GCC"; then
+      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+    fi
+  else
+    if test $gl_cv_have_include_next = buggy; then
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    else
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+    fi
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5
+$as_echo_n "checking whether system header files limit the line length... " >&6; }
+if ${gl_cv_pragma_columns+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __TANDEM
+choke me
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "choke me" >/dev/null 2>&1; then :
+  gl_cv_pragma_columns=yes
+else
+  gl_cv_pragma_columns=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5
+$as_echo "$gl_cv_pragma_columns" >&6; }
+  if test $gl_cv_pragma_columns = yes; then
+    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
+  else
+    PRAGMA_COLUMNS=
+  fi
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5
+$as_echo_n "checking for complete errno.h... " >&6; }
+if ${gl_cv_header_errno_h_complete+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <errno.h>
+#if !defined ETXTBSY
+booboo
+#endif
+#if !defined ENOMSG
+booboo
+#endif
+#if !defined EIDRM
+booboo
+#endif
+#if !defined ENOLINK
+booboo
+#endif
+#if !defined EPROTO
+booboo
+#endif
+#if !defined EMULTIHOP
+booboo
+#endif
+#if !defined EBADMSG
+booboo
+#endif
+#if !defined EOVERFLOW
+booboo
+#endif
+#if !defined ENOTSUP
+booboo
+#endif
+#if !defined ENETRESET
+booboo
+#endif
+#if !defined ECONNABORTED
+booboo
+#endif
+#if !defined ESTALE
+booboo
+#endif
+#if !defined EDQUOT
+booboo
+#endif
+#if !defined ECANCELED
+booboo
+#endif
+#if !defined EOWNERDEAD
+booboo
+#endif
+#if !defined ENOTRECOVERABLE
+booboo
+#endif
+#if !defined EILSEQ
+booboo
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "booboo" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_complete=no
+else
+  gl_cv_header_errno_h_complete=yes
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5
+$as_echo "$gl_cv_header_errno_h_complete" >&6; }
+  if test $gl_cv_header_errno_h_complete = yes; then
+    ERRNO_H=''
+  else
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_errno_h='<'errno.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <errno.h>" >&5
+$as_echo_n "checking absolute name of <errno.h>... " >&6; }
+if ${gl_cv_next_errno_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <errno.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'errno.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_errno_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5
+$as_echo "$gl_cv_next_errno_h" >&6; }
+     fi
+     NEXT_ERRNO_H=$gl_cv_next_errno_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'errno.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_errno_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive
+
+
+
+
+    ERRNO_H='errno.h'
+  fi
+
+   if test -n "$ERRNO_H"; then
+  GL_GENERATE_ERRNO_H_TRUE=
+  GL_GENERATE_ERRNO_H_FALSE='#'
+else
+  GL_GENERATE_ERRNO_H_TRUE='#'
+  GL_GENERATE_ERRNO_H_FALSE=
+fi
+
+
+  if test -n "$ERRNO_H"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5
+$as_echo_n "checking for EMULTIHOP value... " >&6; }
+if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <errno.h>
+#ifdef EMULTIHOP
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_EMULTIHOP=yes
+else
+  gl_cv_header_errno_h_EMULTIHOP=no
+fi
+rm -f conftest*
+
+      if test $gl_cv_header_errno_h_EMULTIHOP = no; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef EMULTIHOP
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_EMULTIHOP=hidden
+fi
+rm -f conftest*
+
+        if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then
+                              if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP"        "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+"; then :
+
+fi
+
+        fi
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5
+$as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; }
+    case $gl_cv_header_errno_h_EMULTIHOP in
+      yes | no)
+        EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE=
+        ;;
+      *)
+        EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP"
+        ;;
+    esac
+
+
+  fi
+
+
+  if test -n "$ERRNO_H"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5
+$as_echo_n "checking for ENOLINK value... " >&6; }
+if ${gl_cv_header_errno_h_ENOLINK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <errno.h>
+#ifdef ENOLINK
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_ENOLINK=yes
+else
+  gl_cv_header_errno_h_ENOLINK=no
+fi
+rm -f conftest*
+
+      if test $gl_cv_header_errno_h_ENOLINK = no; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef ENOLINK
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_ENOLINK=hidden
+fi
+rm -f conftest*
+
+        if test $gl_cv_header_errno_h_ENOLINK = hidden; then
+                              if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK"        "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+"; then :
+
+fi
+
+        fi
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5
+$as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; }
+    case $gl_cv_header_errno_h_ENOLINK in
+      yes | no)
+        ENOLINK_HIDDEN=0; ENOLINK_VALUE=
+        ;;
+      *)
+        ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK"
+        ;;
+    esac
+
+
+  fi
+
+
+  if test -n "$ERRNO_H"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5
+$as_echo_n "checking for EOVERFLOW value... " >&6; }
+if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <errno.h>
+#ifdef EOVERFLOW
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_EOVERFLOW=yes
+else
+  gl_cv_header_errno_h_EOVERFLOW=no
+fi
+rm -f conftest*
+
+      if test $gl_cv_header_errno_h_EOVERFLOW = no; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef EOVERFLOW
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_EOVERFLOW=hidden
+fi
+rm -f conftest*
+
+        if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then
+                              if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW"        "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+"; then :
+
+fi
+
+        fi
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5
+$as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; }
+    case $gl_cv_header_errno_h_EOVERFLOW in
+      yes | no)
+        EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE=
+        ;;
+      *)
+        EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW"
+        ;;
+    esac
+
+
+  fi
+
+
+ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strerror_r" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R $ac_have_decl
+_ACEOF
+
+for ac_func in strerror_r
+do :
+  ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r"
+if test "x$ac_cv_func_strerror_r" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRERROR_R 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
+$as_echo_n "checking whether strerror_r returns char *... " >&6; }
+if ${ac_cv_func_strerror_r_char_p+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    ac_cv_func_strerror_r_char_p=no
+    if test $ac_cv_have_decl_strerror_r = yes; then
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
 main ()
 {
-if ((pid_t *) 0)
-  return 0;
-if (sizeof (pid_t))
-  return 0;
+
+	  char buf[100];
+	  char x = *strerror_r (0, buf, sizeof buf);
+	  char *p = strerror_r (0, buf, sizeof buf);
+	  return !p || x;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_pid_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_pid_t=no
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_func_strerror_r_char_p=yes
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
-echo "${ECHO_T}$ac_cv_type_pid_t" >&6
-if test $ac_cv_type_pid_t = yes; then
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    else
+      # strerror_r is not declared.  Choose between
+      # systems that have relatively inaccessible declarations for the
+      # function.  BeOS and DEC UNIX 4.0 fall in this category, but the
+      # former has a strerror_r that returns char*, while the latter
+      # has a strerror_r that returns `int'.
+      # This test should segfault on the DEC system.
+      if test "$cross_compiling" = yes; then :
   :
 else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+	extern char *strerror_r ();
+int
+main ()
+{
+char buf[100];
+	  char x = *strerror_r (0, buf, sizeof buf);
+	  return ! isalpha (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_strerror_r_char_p=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
+$as_echo "$ac_cv_func_strerror_r_char_p" >&6; }
+if test $ac_cv_func_strerror_r_char_p = yes; then
+
+$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h
+
+fi
+
+
+  XGETTEXT_EXTRA_OPTIONS=
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "#include <signal.h>
+"
+if test "x$ac_cv_type_sig_atomic_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SIG_ATOMIC_T 1
+_ACEOF
+
+
+else
+
+$as_echo "#define sig_atomic_t int" >>confdefs.h
+
+fi
+
+
+
+  GNULIB_FCNTL=0;
+  GNULIB_NONBLOCKING=0;
+  GNULIB_OPEN=0;
+  GNULIB_OPENAT=0;
+    HAVE_FCNTL=1;
+  HAVE_OPENAT=1;
+  REPLACE_FCNTL=0;
+  REPLACE_OPEN=0;
+  REPLACE_OPENAT=0;
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
+$as_echo_n "checking for working fcntl.h... " >&6; }
+if ${gl_cv_header_working_fcntl_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  gl_cv_header_working_fcntl_h=cross-compiling
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+           #include <sys/stat.h>
+           #if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <io.h>
+           # include <stdlib.h>
+           # defined sleep(n) _sleep ((n) * 1000)
+           #endif
+           #include <fcntl.h>
+           #ifndef O_NOATIME
+            #define O_NOATIME 0
+           #endif
+           #ifndef O_NOFOLLOW
+            #define O_NOFOLLOW 0
+           #endif
+           static int const constants[] =
+            {
+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+            };
+
+int
+main ()
+{
+
+            int result = !constants;
+            #if HAVE_SYMLINK
+            {
+              static char const sym[] = "conftest.sym";
+              if (symlink ("/dev/null", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              if (unlink (sym) != 0 || symlink (".", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              unlink (sym);
+            }
+            #endif
+            {
+              static char const file[] = "confdefs.h";
+              int fd = open (file, O_RDONLY | O_NOATIME);
+              if (fd < 0)
+                result |= 8;
+              else
+                {
+                  struct stat st0;
+                  if (fstat (fd, &st0) != 0)
+                    result |= 16;
+                  else
+                    {
+                      char c;
+                      sleep (1);
+                      if (read (fd, &c, 1) != 1)
+                        result |= 24;
+                      else
+                        {
+                          if (close (fd) != 0)
+                            result |= 32;
+                          else
+                            {
+                              struct stat st1;
+                              if (stat (file, &st1) != 0)
+                                result |= 40;
+                              else
+                                if (st0.st_atime != st1.st_atime)
+                                  result |= 64;
+                            }
+                        }
+                    }
+                }
+            }
+            return result;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_header_working_fcntl_h=yes
+else
+  case $? in #(
+        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+         *) gl_cv_header_working_fcntl_h='no';;
+        esac
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
+$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WORKING_O_NOATIME $ac_val
+_ACEOF
+
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WORKING_O_NOFOLLOW $ac_val
+_ACEOF
+
+
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
 
 cat >>confdefs.h <<_ACEOF
 #define pid_t int
@@ -7242,806 +10186,24132 @@
 
 fi
 
- echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6
-if test "${ac_cv_header_sys_wait_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
+if test "x$ac_cv_type_mode_t" = xyes; then :
+
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+
+cat >>confdefs.h <<_ACEOF
+#define mode_t int
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+
+fi
+
+
+  GNULIB_DPRINTF=0;
+  GNULIB_FCLOSE=0;
+  GNULIB_FDOPEN=0;
+  GNULIB_FFLUSH=0;
+  GNULIB_FGETC=0;
+  GNULIB_FGETS=0;
+  GNULIB_FOPEN=0;
+  GNULIB_FPRINTF=0;
+  GNULIB_FPRINTF_POSIX=0;
+  GNULIB_FPURGE=0;
+  GNULIB_FPUTC=0;
+  GNULIB_FPUTS=0;
+  GNULIB_FREAD=0;
+  GNULIB_FREOPEN=0;
+  GNULIB_FSCANF=0;
+  GNULIB_FSEEK=0;
+  GNULIB_FSEEKO=0;
+  GNULIB_FTELL=0;
+  GNULIB_FTELLO=0;
+  GNULIB_FWRITE=0;
+  GNULIB_GETC=0;
+  GNULIB_GETCHAR=0;
+  GNULIB_GETDELIM=0;
+  GNULIB_GETLINE=0;
+  GNULIB_OBSTACK_PRINTF=0;
+  GNULIB_OBSTACK_PRINTF_POSIX=0;
+  GNULIB_PCLOSE=0;
+  GNULIB_PERROR=0;
+  GNULIB_POPEN=0;
+  GNULIB_PRINTF=0;
+  GNULIB_PRINTF_POSIX=0;
+  GNULIB_PUTC=0;
+  GNULIB_PUTCHAR=0;
+  GNULIB_PUTS=0;
+  GNULIB_REMOVE=0;
+  GNULIB_RENAME=0;
+  GNULIB_RENAMEAT=0;
+  GNULIB_SCANF=0;
+  GNULIB_SNPRINTF=0;
+  GNULIB_SPRINTF_POSIX=0;
+  GNULIB_STDIO_H_NONBLOCKING=0;
+  GNULIB_STDIO_H_SIGPIPE=0;
+  GNULIB_TMPFILE=0;
+  GNULIB_VASPRINTF=0;
+  GNULIB_VFSCANF=0;
+  GNULIB_VSCANF=0;
+  GNULIB_VDPRINTF=0;
+  GNULIB_VFPRINTF=0;
+  GNULIB_VFPRINTF_POSIX=0;
+  GNULIB_VPRINTF=0;
+  GNULIB_VPRINTF_POSIX=0;
+  GNULIB_VSNPRINTF=0;
+  GNULIB_VSPRINTF_POSIX=0;
+    HAVE_DECL_FPURGE=1;
+  HAVE_DECL_FSEEKO=1;
+  HAVE_DECL_FTELLO=1;
+  HAVE_DECL_GETDELIM=1;
+  HAVE_DECL_GETLINE=1;
+  HAVE_DECL_OBSTACK_PRINTF=1;
+  HAVE_DECL_SNPRINTF=1;
+  HAVE_DECL_VSNPRINTF=1;
+  HAVE_DPRINTF=1;
+  HAVE_FSEEKO=1;
+  HAVE_FTELLO=1;
+  HAVE_PCLOSE=1;
+  HAVE_POPEN=1;
+  HAVE_RENAMEAT=1;
+  HAVE_VASPRINTF=1;
+  HAVE_VDPRINTF=1;
+  REPLACE_DPRINTF=0;
+  REPLACE_FCLOSE=0;
+  REPLACE_FDOPEN=0;
+  REPLACE_FFLUSH=0;
+  REPLACE_FOPEN=0;
+  REPLACE_FPRINTF=0;
+  REPLACE_FPURGE=0;
+  REPLACE_FREOPEN=0;
+  REPLACE_FSEEK=0;
+  REPLACE_FSEEKO=0;
+  REPLACE_FTELL=0;
+  REPLACE_FTELLO=0;
+  REPLACE_GETDELIM=0;
+  REPLACE_GETLINE=0;
+  REPLACE_OBSTACK_PRINTF=0;
+  REPLACE_PERROR=0;
+  REPLACE_POPEN=0;
+  REPLACE_PRINTF=0;
+  REPLACE_REMOVE=0;
+  REPLACE_RENAME=0;
+  REPLACE_RENAMEAT=0;
+  REPLACE_SNPRINTF=0;
+  REPLACE_SPRINTF=0;
+  REPLACE_STDIO_READ_FUNCS=0;
+  REPLACE_STDIO_WRITE_FUNCS=0;
+  REPLACE_TMPFILE=0;
+  REPLACE_VASPRINTF=0;
+  REPLACE_VDPRINTF=0;
+  REPLACE_VFPRINTF=0;
+  REPLACE_VPRINTF=0;
+  REPLACE_VSNPRINTF=0;
+  REPLACE_VSPRINTF=0;
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5
+$as_echo_n "checking for stdint.h... " >&6; }
+if ${gl_cv_header_stdint_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#include <sys/wait.h>
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
+            #include <stdint.h>
 int
 main ()
 {
-  int s;
-  wait (&s);
-  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+uintmax_t i = (uintmax_t) -1; return !i;
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_sys_wait_h=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_stdint_h=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_sys_wait_h=no
+  gl_cv_header_stdint_h=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
-if test $ac_cv_header_sys_wait_h = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5
+$as_echo "$gl_cv_header_stdint_h" >&6; }
+  if test $gl_cv_header_stdint_h = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_WAIT_H 1
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H_WITH_UINTMAX 1
 _ACEOF
 
-fi
+  fi
 
 
-
-for ac_func in dup2 waitpid
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
+$as_echo_n "checking for inttypes.h... " >&6; }
+if ${gl_cv_header_inttypes_h+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
 
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
+#include <sys/types.h>
+#include <inttypes.h>
 
 int
 main ()
 {
-return f != $ac_func;
+uintmax_t i = (uintmax_t) -1; return !i;
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_inttypes_h=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  gl_cv_header_inttypes_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5
+$as_echo "$gl_cv_header_inttypes_h" >&6; }
+  if test $gl_cv_header_inttypes_h = yes; then
 
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
 _ACEOF
 
-fi
-done
+  fi
 
 
 
-for ac_header in unistd.h vfork.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports size specifiers as in C99" >&5
+$as_echo_n "checking whether printf supports size specifiers as in C99... " >&6; }
+if ${gl_cv_func_printf_sizes_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_printf_sizes_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_sizes_c99="guessing no";;
+           darwin*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_printf_sizes_c99="guessing no";;
+           openbsd*)             gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_printf_sizes_c99="guessing no";;
+           netbsd*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_sizes_c99="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+# include <inttypes.h>
+#endif
+static char buf[100];
+int main ()
+{
+  int result = 0;
+#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX
+  buf[0] = '\0';
+  if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0
+      || strcmp (buf, "12345671 33") != 0)
+    result |= 1;
+#endif
+  buf[0] = '\0';
+  if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0
+      || strcmp (buf, "12345672 33") != 0)
+    result |= 2;
+  buf[0] = '\0';
+  if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0
+      || strcmp (buf, "12345673 33") != 0)
+    result |= 4;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0
+      || strcmp (buf, "1.5 33") != 0)
+    result |= 8;
+  return result;
+}
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_sizes_c99=yes
+else
+  gl_cv_func_printf_sizes_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_sizes_c99" >&5
+$as_echo "$gl_cv_func_printf_sizes_c99" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports 'long double' arguments" >&5
+$as_echo_n "checking whether printf supports 'long double' arguments... " >&6; }
+if ${gl_cv_func_printf_long_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           beos*)        gl_cv_func_printf_long_double="guessing no";;
+           mingw* | pw*) gl_cv_func_printf_long_double="guessing no";;
+           *)            gl_cv_func_printf_long_double="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[10000];
+int main ()
+{
+  int result = 0;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.750000 33") != 0)
+    result |= 1;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.750000e+00 33") != 0)
+    result |= 2;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.75 33") != 0)
+    result |= 4;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_long_double=yes
+else
+  gl_cv_func_printf_long_double=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_long_double" >&5
+$as_echo "$gl_cv_func_printf_long_double" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'double' arguments" >&5
+$as_echo_n "checking whether printf supports infinite 'double' arguments... " >&6; }
+if ${gl_cv_func_printf_infinite+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on FreeBSD >= 6.
+           freebsd[1-5]*)        gl_cv_func_printf_infinite="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_infinite="guessing no";;
+           darwin*)              gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on HP-UX >= 11.
+           hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";;
+           hpux*)                gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_printf_infinite="guessing no";;
+           netbsd*)              gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_printf_infinite="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_infinite="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static int
+strisnan (const char *string, size_t start_index, size_t end_index)
+{
+  if (start_index < end_index)
+    {
+      if (string[start_index] == '-')
+        start_index++;
+      if (start_index + 3 <= end_index
+          && memcmp (string + start_index, "nan", 3) == 0)
+        {
+          start_index += 3;
+          if (start_index == end_index
+              || (string[start_index] == '(' && string[end_index - 1] == ')'))
+            return 1;
+        }
+    }
+  return 0;
+}
+static int
+have_minus_zero ()
+{
+  static double plus_zero = 0.0;
+  double minus_zero = - plus_zero;
+  return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
+}
+static char buf[10000];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%f", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%f", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%f", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 2;
+  if (sprintf (buf, "%e", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 4;
+  if (sprintf (buf, "%e", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 4;
+  if (sprintf (buf, "%e", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 8;
+  if (sprintf (buf, "%g", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 16;
+  if (sprintf (buf, "%g", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 16;
+  if (sprintf (buf, "%g", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 32;
+  /* This test fails on HP-UX 10.20.  */
+  if (have_minus_zero ())
+    if (sprintf (buf, "%g", - zero) < 0
+        || strcmp (buf, "-0") != 0)
+    result |= 64;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_infinite=yes
+else
+  gl_cv_func_printf_infinite=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_infinite" >&5
+$as_echo "$gl_cv_func_printf_infinite" >&6; }
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+	     #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+		#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## -------------------------------- ##
-## Report this to bug-bison@gnu.org ##
-## -------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_func in fork vfork
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
+int
+main ()
 {
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
+
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
 }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5
+$as_echo_n "checking whether long double and double are the same... " >&6; }
+if ${gl_cv_long_double_equals_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+int
+main ()
+{
+typedef int check[sizeof (long double) == sizeof (double)
+                              && LDBL_MANT_DIG == DBL_MANT_DIG
+                              && LDBL_MAX_EXP == DBL_MAX_EXP
+                              && LDBL_MIN_EXP == DBL_MIN_EXP
+                              ? 1 : -1];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_long_double_equals_double=yes
+else
+  gl_cv_long_double_equals_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_long_double_equals_double" >&5
+$as_echo "$gl_cv_long_double_equals_double" >&6; }
+  if test $gl_cv_long_double_equals_double = yes; then
+
+$as_echo "#define HAVE_SAME_LONG_DOUBLE_AS_DOUBLE 1" >>confdefs.h
+
+    HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
+  else
+    HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
+  fi
+
+
+
+
+
+
+
+         if test -n "$gl_printf_safe"; then
+
+$as_echo "#define CHECK_PRINTF_SAFE 1" >>confdefs.h
+
+  fi
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'long double' arguments" >&5
+$as_echo_n "checking whether printf supports infinite 'long double' arguments... " >&6; }
+if ${gl_cv_func_printf_infinite_long_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test "$cross_compiling" = yes; then :
+
+             case "$host_cpu" in
+                                     # Guess no on ia64, x86_64, i386.
+               ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
+               *)
+                 case "$host_os" in
+                                         # Guess yes on glibc systems.
+                   *-gnu*)               gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on FreeBSD >= 6.
+                   freebsd[1-5]*)        gl_cv_func_printf_infinite_long_double="guessing no";;
+                   freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on HP-UX >= 11.
+                   hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
+                   hpux*)                gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # If we don't know, assume the worst.
+                   *)                    gl_cv_func_printf_infinite_long_double="guessing no";;
+                 esac
+                 ;;
+             esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X.  */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens.  */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+   EXC_BAD_ACCESS.  */
+static void *
+mach_exception_thread (void *arg)
+{
+  /* Buffer for a message to be received.  */
+  struct {
+    mach_msg_header_t head;
+    mach_msg_body_t msgh_body;
+    char data[1024];
+  } msg;
+  mach_msg_return_t retval;
+  /* Wait for a message on the exception port.  */
+  retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+                     our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+  if (retval != MACH_MSG_SUCCESS)
+    abort ();
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+  mach_port_t self = mach_task_self ();
+  /* Allocate a port on which the thread shall listen for exceptions.  */
+  if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+      == KERN_SUCCESS) {
+    /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html.  */
+    if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+                                MACH_MSG_TYPE_MAKE_SEND)
+        == KERN_SUCCESS) {
+      /* The exceptions we want to catch.  Only EXC_BAD_ACCESS is interesting
+         for us.  */
+      exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+      /* Create the thread listening on the exception port.  */
+      pthread_attr_t attr;
+      pthread_t thread;
+      if (pthread_attr_init (&attr) == 0
+          && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+          && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+        pthread_attr_destroy (&attr);
+        /* Replace the exception port info for these exceptions with our own.
+           Note that we replace the exception port for the entire task, not only
+           for a particular thread.  This has the effect that when our exception
+           port gets the message, the thread specific exception port has already
+           been asked, and we don't need to bother about it.
+           See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html.  */
+        task_set_exception_ports (self, mask, our_exception_port,
+                                  EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+      }
+    }
+  }
+}
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Avoid a crash on native Windows.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+  switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+    {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_IN_PAGE_ERROR:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_GUARD_PAGE:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      exit (1);
+    }
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+  SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems.  */
+#include <signal.h>
+/* A POSIX signal handler.  */
+static void
+exception_handler (int sig)
+{
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+  signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+  signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+
+#include <float.h>
+#include <stdio.h>
+#include <string.h>
+static int
+strisnan (const char *string, size_t start_index, size_t end_index)
+{
+  if (start_index < end_index)
+    {
+      if (string[start_index] == '-')
+        start_index++;
+      if (start_index + 3 <= end_index
+          && memcmp (string + start_index, "nan", 3) == 0)
+        {
+          start_index += 3;
+          if (start_index == end_index
+              || (string[start_index] == '(' && string[end_index - 1] == ')'))
+            return 1;
+        }
+    }
+  return 0;
+}
+static char buf[10000];
+static long double zeroL = 0.0L;
+int main ()
+{
+  int result = 0;
+  nocrash_init();
+  if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lf", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+  if (sprintf (buf, "%Le", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Le", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Le", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+  if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lg", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16),    \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+  }
+  { /* Pseudo-NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 4;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 4;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 8;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 8;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 16;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 16;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 32;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 32;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 64;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 64;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 64;
+  }
+#endif
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_infinite_long_double=yes
+else
+  gl_cv_func_printf_infinite_long_double=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_infinite_long_double" >&5
+$as_echo "$gl_cv_func_printf_infinite_long_double" >&6; }
+      ;;
+    *)
+      gl_cv_func_printf_infinite_long_double="irrelevant"
+      ;;
+  esac
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'a' and 'A' directives" >&5
+$as_echo_n "checking whether printf supports the 'a' and 'A' directives... " >&6; }
+if ${gl_cv_func_printf_directive_a+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc >= 2.5 systems.
+           *-gnu*)
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+               #include <features.h>
+               #ifdef __GNU_LIBRARY__
+                #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__
+                 BZ2908
+                #endif
+               #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "BZ2908" >/dev/null 2>&1; then :
+  gl_cv_func_printf_directive_a="guessing yes"
+else
+  gl_cv_func_printf_directive_a="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_directive_a="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0
+      || (strcmp (buf, "0x1.922p+1 33") != 0
+          && strcmp (buf, "0x3.244p+0 33") != 0
+          && strcmp (buf, "0x6.488p-1 33") != 0
+          && strcmp (buf, "0xc.91p-2 33") != 0))
+    result |= 1;
+  if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0
+      || (strcmp (buf, "-0X1.922P+1 33") != 0
+          && strcmp (buf, "-0X3.244P+0 33") != 0
+          && strcmp (buf, "-0X6.488P-1 33") != 0
+          && strcmp (buf, "-0XC.91P-2 33") != 0))
+    result |= 2;
+  /* This catches a FreeBSD 6.1 bug: it doesn't round.  */
+  if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0
+      || (strcmp (buf, "0x1.83p+0 33") != 0
+          && strcmp (buf, "0x3.05p-1 33") != 0
+          && strcmp (buf, "0x6.0ap-2 33") != 0
+          && strcmp (buf, "0xc.14p-3 33") != 0))
+    result |= 4;
+  /* This catches a FreeBSD 6.1 bug.  See
+     <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
+  if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0
+      || buf[0] == '0')
+    result |= 8;
+  /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug.  */
+  if (sprintf (buf, "%.1a", 1.999) < 0
+      || (strcmp (buf, "0x1.0p+1") != 0
+          && strcmp (buf, "0x2.0p+0") != 0
+          && strcmp (buf, "0x4.0p-1") != 0
+          && strcmp (buf, "0x8.0p-2") != 0))
+    result |= 16;
+  /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a
+     glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+  if (sprintf (buf, "%.1La", 1.999L) < 0
+      || (strcmp (buf, "0x1.0p+1") != 0
+          && strcmp (buf, "0x2.0p+0") != 0
+          && strcmp (buf, "0x4.0p-1") != 0
+          && strcmp (buf, "0x8.0p-2") != 0))
+    result |= 32;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_directive_a=yes
+else
+  gl_cv_func_printf_directive_a=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_a" >&5
+$as_echo "$gl_cv_func_printf_directive_a" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'F' directive" >&5
+$as_echo_n "checking whether printf supports the 'F' directive... " >&6; }
+if ${gl_cv_func_printf_directive_f+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on FreeBSD >= 6.
+           freebsd[1-5]*)        gl_cv_func_printf_directive_f="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_directive_f="guessing no";;
+           darwin*)              gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_directive_f="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0
+      || strcmp (buf, "1234567.000000 33") != 0)
+    result |= 1;
+  if (sprintf (buf, "%F", 1.0 / zero) < 0
+      || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
+    result |= 2;
+  /* This catches a Cygwin 1.5.x bug.  */
+  if (sprintf (buf, "%.F", 1234.0) < 0
+      || strcmp (buf, "1234") != 0)
+    result |= 4;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_directive_f=yes
+else
+  gl_cv_func_printf_directive_f=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_f" >&5
+$as_echo "$gl_cv_func_printf_directive_f" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'n' directive" >&5
+$as_echo_n "checking whether printf supports the 'n' directive... " >&6; }
+if ${gl_cv_func_printf_directive_n+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           mingw*) gl_cv_func_printf_directive_n="guessing no";;
+           *)      gl_cv_func_printf_directive_n="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef _MSC_VER
+/* See page about "Parameter Validation" on msdn.microsoft.com.  */
+static void cdecl
+invalid_parameter_handler (const wchar_t *expression,
+                           const wchar_t *function,
+                           const wchar_t *file, unsigned int line,
+                           uintptr_t dummy)
+{
+  exit (1);
+}
+#endif
+static char fmtstring[10];
+static char buf[100];
+int main ()
+{
+  int count = -1;
+#ifdef _MSC_VER
+  _set_invalid_parameter_handler (invalid_parameter_handler);
+#endif
+  /* Copy the format string.  Some systems (glibc with _FORTIFY_SOURCE=2)
+     support %n in format strings in read-only memory but not in writable
+     memory.  */
+  strcpy (fmtstring, "%d %n");
+  if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0
+      || strcmp (buf, "123 ") != 0
+      || count != 4)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_directive_n=yes
+else
+  gl_cv_func_printf_directive_n=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_n" >&5
+$as_echo "$gl_cv_func_printf_directive_n" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'ls' directive" >&5
+$as_echo_n "checking whether printf supports the 'ls' directive... " >&6; }
+if ${gl_cv_func_printf_directive_ls+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           openbsd*)        gl_cv_func_printf_directive_ls="guessing no";;
+           irix*)           gl_cv_func_printf_directive_ls="guessing no";;
+           solaris*)        gl_cv_func_printf_directive_ls="guessing no";;
+           cygwin*)         gl_cv_func_printf_directive_ls="guessing no";;
+           beos* | haiku*)  gl_cv_func_printf_directive_ls="guessing no";;
+           *)               gl_cv_func_printf_directive_ls="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <string.h>
+int main ()
+{
+  int result = 0;
+  char buf[100];
+  /* Test whether %ls works at all.
+     This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on
+     Cygwin 1.5.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', 'c', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "abc") != 0)
+      result |= 1;
+  }
+  /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an
+     assertion failure inside libc), but not on OpenBSD 4.0.  */
+  {
+    static const wchar_t wstring[] = { 'a', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "a") != 0)
+      result |= 2;
+  }
+  /* Test whether precisions in %ls are supported as specified in ISO C 99
+     section 7.19.6.1:
+       "If a precision is specified, no more than that many bytes are written
+        (including shift sequences, if any), and the array shall contain a
+        null wide character if, to equal the multibyte character sequence
+        length given by the precision, the function would need to access a
+        wide character one past the end of the array."
+     This test fails on Solaris 10.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%.2ls", wstring) < 0
+        || strcmp (buf, "ab") != 0)
+      result |= 8;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_directive_ls=yes
+else
+  gl_cv_func_printf_directive_ls=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_ls" >&5
+$as_echo "$gl_cv_func_printf_directive_ls" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5
+$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; }
+if ${gl_cv_func_printf_positions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
+                         gl_cv_func_printf_positions="guessing no";;
+           beos*)        gl_cv_func_printf_positions="guessing no";;
+           mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+           *)            gl_cv_func_printf_positions="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_positions=yes
+else
+  gl_cv_func_printf_positions=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5
+$as_echo "$gl_cv_func_printf_positions" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the grouping flag" >&5
+$as_echo_n "checking whether printf supports the grouping flag... " >&6; }
+if ${gl_cv_func_printf_flag_grouping+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           cygwin*)      gl_cv_func_printf_flag_grouping="guessing no";;
+           netbsd*)      gl_cv_func_printf_flag_grouping="guessing no";;
+           mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
+           *)            gl_cv_func_printf_flag_grouping="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+int main ()
+{
+  if (sprintf (buf, "%'d %d", 1234567, 99) < 0
+      || buf[strlen (buf) - 1] != '9')
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_flag_grouping=yes
+else
+  gl_cv_func_printf_flag_grouping=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_grouping" >&5
+$as_echo "$gl_cv_func_printf_flag_grouping" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the left-adjust flag correctly" >&5
+$as_echo_n "checking whether printf supports the left-adjust flag correctly... " >&6; }
+if ${gl_cv_func_printf_flag_leftadjust+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                    # Guess yes on HP-UX 11.
+           hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                    # Guess no on HP-UX 10 and older.
+           hpux*)   gl_cv_func_printf_flag_leftadjust="guessing no";;
+                    # Guess yes otherwise.
+           *)       gl_cv_func_printf_flag_leftadjust="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+int main ()
+{
+  /* Check that a '-' flag is not annihilated by a negative width.  */
+  if (sprintf (buf, "a%-*sc", -3, "b") < 0
+      || strcmp (buf, "ab  c") != 0)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_flag_leftadjust=yes
+else
+  gl_cv_func_printf_flag_leftadjust=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_leftadjust" >&5
+$as_echo "$gl_cv_func_printf_flag_leftadjust" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the zero flag correctly" >&5
+$as_echo_n "checking whether printf supports the zero flag correctly... " >&6; }
+if ${gl_cv_func_printf_flag_zero+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                   # Guess yes on glibc systems.
+           *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
+                   # Guess yes on BeOS.
+           beos*)  gl_cv_func_printf_flag_zero="guessing yes";;
+                   # If we don't know, assume the worst.
+           *)      gl_cv_func_printf_flag_zero="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0
+      || (strcmp (buf, "       inf") != 0
+          && strcmp (buf, "  infinity") != 0))
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_flag_zero=yes
+else
+  gl_cv_func_printf_flag_zero=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_zero" >&5
+$as_echo "$gl_cv_func_printf_flag_zero" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports large precisions" >&5
+$as_echo_n "checking whether printf supports large precisions... " >&6; }
+if ${gl_cv_func_printf_precision+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           # Guess no only on Solaris, native Windows, and BeOS systems.
+           solaris*)     gl_cv_func_printf_precision="guessing no" ;;
+           mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;;
+           beos*)        gl_cv_func_printf_precision="guessing no" ;;
+           *)            gl_cv_func_printf_precision="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[5000];
+int main ()
+{
+  int result = 0;
+#ifdef __BEOS__
+  /* On BeOS, this would crash and show a dialog box.  Avoid the crash.  */
+  return 1;
+#endif
+  if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3)
+    result |= 1;
+  if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5)
+    result |= 2;
+  if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5
+      || buf[0] != '1')
+    result |= 4;
+  if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5
+      || buf[0] != '1')
+    result |= 4;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_precision=yes
+else
+  gl_cv_func_printf_precision=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_precision" >&5
+$as_echo "$gl_cv_func_printf_precision" >&6; }
+
+
+    gl_cv_c_multiarch=no
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+         not a universal capable compiler
+        #endif
+        typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+               arch=
+     prev=
+     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+       if test -n "$prev"; then
+         case $word in
+           i?86 | x86_64 | ppc | ppc64)
+             if test -z "$arch" || test "$arch" = "$word"; then
+               arch="$word"
+             else
+               gl_cv_c_multiarch=yes
+             fi
+             ;;
+         esac
+         prev=
+       else
+         if test "x$word" = "x-arch"; then
+           prev=arch
+         fi
+       fi
+     done
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  if test $gl_cv_c_multiarch = yes; then
+    APPLE_UNIVERSAL_BUILD=1
+  else
+    APPLE_UNIVERSAL_BUILD=0
+  fi
+
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf survives out-of-memory conditions" >&5
+$as_echo_n "checking whether printf survives out-of-memory conditions... " >&6; }
+if ${gl_cv_func_printf_enomem+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      gl_cv_func_printf_enomem="guessing no"
+      if test "$cross_compiling" = no; then
+        if test $APPLE_UNIVERSAL_BUILD = 0; then
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X.  */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens.  */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+   EXC_BAD_ACCESS.  */
+static void *
+mach_exception_thread (void *arg)
+{
+  /* Buffer for a message to be received.  */
+  struct {
+    mach_msg_header_t head;
+    mach_msg_body_t msgh_body;
+    char data1024;
+  } msg;
+  mach_msg_return_t retval;
+  /* Wait for a message on the exception port.  */
+  retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+                     our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+  if (retval != MACH_MSG_SUCCESS)
+    abort ();
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+  mach_port_t self = mach_task_self ();
+  /* Allocate a port on which the thread shall listen for exceptions.  */
+  if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+      == KERN_SUCCESS) {
+    /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html.  */
+    if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+                                MACH_MSG_TYPE_MAKE_SEND)
+        == KERN_SUCCESS) {
+      /* The exceptions we want to catch.  Only EXC_BAD_ACCESS is interesting
+         for us.  */
+      exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+      /* Create the thread listening on the exception port.  */
+      pthread_attr_t attr;
+      pthread_t thread;
+      if (pthread_attr_init (&attr) == 0
+          && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+          && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+        pthread_attr_destroy (&attr);
+        /* Replace the exception port info for these exceptions with our own.
+           Note that we replace the exception port for the entire task, not only
+           for a particular thread.  This has the effect that when our exception
+           port gets the message, the thread specific exception port has already
+           been asked, and we don't need to bother about it.
+           See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html.  */
+        task_set_exception_ports (self, mask, our_exception_port,
+                                  EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+      }
+    }
+  }
+}
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Avoid a crash on native Windows.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+  switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+    {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_IN_PAGE_ERROR:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_GUARD_PAGE:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      exit (1);
+    }
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+  SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems.  */
+#include <signal.h>
+/* A POSIX signal handler.  */
+static void
+exception_handler (int sig)
+{
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+  signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+  signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <errno.h>
+int main()
+{
+  struct rlimit limit;
+  int ret;
+  nocrash_init ();
+  /* Some printf implementations allocate temporary space with malloc.  */
+  /* On BSD systems, malloc() is limited by RLIMIT_DATA.  */
+#ifdef RLIMIT_DATA
+  if (getrlimit (RLIMIT_DATA, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_DATA, &limit) < 0)
+    return 77;
+#endif
+  /* On Linux systems, malloc() is limited by RLIMIT_AS.  */
+#ifdef RLIMIT_AS
+  if (getrlimit (RLIMIT_AS, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_AS, &limit) < 0)
+    return 77;
+#endif
+  /* Some printf implementations allocate temporary space on the stack.  */
+#ifdef RLIMIT_STACK
+  if (getrlimit (RLIMIT_STACK, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_STACK, &limit) < 0)
+    return 77;
+#endif
+  ret = printf ("%.5000000f", 1.0);
+  return !(ret == 5000002 || (ret < 0 && errno == ENOMEM));
+}
+
+_ACEOF
+          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+            (./conftest 2>&5
+             result=$?
+             $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $result" >&5
+             if test $result != 0 && test $result != 77; then result=1; fi
+             exit $result
+            ) >/dev/null 2>/dev/null
+            case $? in
+              0) gl_cv_func_printf_enomem="yes" ;;
+              77) gl_cv_func_printf_enomem="guessing no" ;;
+              *) gl_cv_func_printf_enomem="no" ;;
+            esac
+          else
+            gl_cv_func_printf_enomem="guessing no"
+          fi
+          rm -fr conftest*
+        else
+                                        gl_cv_func_printf_enomem="guessing no"
+        fi
+      fi
+      if test "$gl_cv_func_printf_enomem" = "guessing no"; then
+        case "$host_os" in
+                    # Guess yes on glibc systems.
+          *-gnu*)   gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on Solaris.
+          solaris*) gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on AIX.
+          aix*)     gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on HP-UX/hppa.
+          hpux*)    case "$host_cpu" in
+                      hppa*) gl_cv_func_printf_enomem="guessing yes";;
+                      *)     gl_cv_func_printf_enomem="guessing no";;
+                    esac
+                    ;;
+                    # Guess yes on IRIX.
+          irix*)    gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on OSF/1.
+          osf*)     gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on BeOS.
+          beos*)    gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on Haiku.
+          haiku*)   gl_cv_func_printf_enomem="guessing yes";;
+                    # If we don't know, assume the worst.
+          *)        gl_cv_func_printf_enomem="guessing no";;
+        esac
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_enomem" >&5
+$as_echo "$gl_cv_func_printf_enomem" >&6; }
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
+if ${ac_cv_type_unsigned_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  ac_cv_type_unsigned_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+$as_echo_n "checking for long long int... " >&6; }
+if ${ac_cv_type_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+        if test $ac_cv_type_long_long_int = yes; then
+                                        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+                 #ifndef LLONG_MAX
+                 # define HALF \
+                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                 # define LLONG_MAX (HALF - 1 + HALF)
+                 #endif
+int
+main ()
+{
+long long int n = 1;
+                 int i;
+                 for (i = 0; ; i++)
+                   {
+                     long long int m = n << i;
+                     if (m >> i != n)
+                       return 1;
+                     if (LLONG_MAX / 2 < m)
+                       break;
+                   }
+                 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+        fi
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+$as_echo "$ac_cv_type_long_long_int" >&6; }
+  if test $ac_cv_type_long_long_int = yes; then
+
+$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
+$as_echo_n "checking for wchar_t... " >&6; }
+if ${gt_cv_c_wchar_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+            wchar_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_wchar_t=yes
+else
+  gt_cv_c_wchar_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
+$as_echo "$gt_cv_c_wchar_t" >&6; }
+  if test $gt_cv_c_wchar_t = yes; then
+
+$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
+$as_echo_n "checking for wint_t... " >&6; }
+if ${gt_cv_c_wint_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+            wint_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_wint_t=yes
+else
+  gt_cv_c_wint_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
+$as_echo "$gt_cv_c_wint_t" >&6; }
+  if test $gt_cv_c_wint_t = yes; then
+
+$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+  if test $ac_cv_header_features_h = yes; then
+    HAVE_FEATURES_H=1
+  else
+    HAVE_FEATURES_H=0
+  fi
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5
+$as_echo_n "checking for intmax_t... " >&6; }
+if ${gt_cv_c_intmax_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
 #endif
 
 int
 main ()
 {
-return f != $ac_func;
+intmax_t x = -1; return !x;
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_intmax_t=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  gt_cv_c_intmax_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5
+$as_echo "$gt_cv_c_intmax_t" >&6; }
+  if test $gt_cv_c_intmax_t = yes; then
 
-eval "$as_ac_var=no"
+$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
+
+  else
+
+    test $ac_cv_type_long_long_int = yes \
+      && ac_type='long long' \
+      || ac_type='long'
+
+cat >>confdefs.h <<_ACEOF
+#define intmax_t $ac_type
+_ACEOF
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5
+$as_echo_n "checking where to find the exponent in a 'double'... " >&6; }
+if ${gl_cv_cc_double_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                                                                      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined arm || defined __arm || defined __arm__
+  mixed_endianness
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "mixed_endianness" >/dev/null 2>&1; then :
+  gl_cv_cc_double_expbit0="unknown"
+else
+
+                                                         :
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+	     #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+		#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
 fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+fi
+:
+ case $ac_cv_c_bigendian in #(
+   yes)
+     gl_cv_cc_double_expbit0="word 0 bit 20";; #(
+   no)
+     gl_cv_cc_double_expbit0="word 1 bit 20" ;; #(
+   universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     gl_cv_cc_double_expbit0="unknown" ;;
+ esac
+
+
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { double value; unsigned int word[NWORDS]; } memory_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (double x)
+{
+  memory_double m;
+  size_t i;
+  /* Clear it first, in case sizeof (double) < sizeof (memory_double).  */
+  memset (&m, 0, sizeof (memory_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25);
+  add_to_ored_words (0.5);
+  add_to_ored_words (1.0);
+  add_to_ored_words (2.0);
+  add_to_ored_words (4.0);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_double_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_double_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5
+$as_echo "$gl_cv_cc_double_expbit0" >&6; }
+  case "$gl_cv_cc_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf returns a byte count as in C99" >&5
+$as_echo_n "checking whether snprintf returns a byte count as in C99... " >&6; }
+if ${gl_cv_func_snprintf_retval_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_snprintf_retval_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_retval_c99="guessing no";;
+           darwin*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_snprintf_retval_c99="guessing no";;
+           openbsd*)             gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_retval_c99="guessing no";;
+           aix*)                 gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_retval_c99="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_retval_c99="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char buf[100];
+int main ()
+{
+  strcpy (buf, "ABCDEF");
+  if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7)
+    return 1;
+  if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7)
+    return 2;
+  if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7)
+    return 3;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_retval_c99=yes
+else
+  gl_cv_func_snprintf_retval_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_retval_c99" >&5
+$as_echo "$gl_cv_func_snprintf_retval_c99" >&6; }
+
+
+
+
+
+
+  for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb
+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"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
-if test "x$ac_cv_func_fork" = xyes; then
-  echo "$as_me:$LINENO: checking for working fork" >&5
-echo $ECHO_N "checking for working fork... $ECHO_C" >&6
-if test "${ac_cv_func_fork_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+      ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h>
+"
+if test "x$ac_cv_have_decl__snprintf" = xyes; then :
+  ac_have_decl=1
 else
-  if test "$cross_compiling" = yes; then
-  ac_cv_func_fork_works=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* By Ruediger Kuhlmann. */
-      #include <sys/types.h>
-      #if HAVE_UNISTD_H
-      # include <unistd.h>
-      #endif
-      /* Some systems only have a dummy stub for fork() */
-      int main ()
-      {
-	if (fork() < 0)
-	  exit (1);
-	exit (0);
-      }
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNPRINTF $ac_have_decl
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_fork_works=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-( exit $ac_status )
-ac_cv_func_fork_works=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5
-echo "${ECHO_T}$ac_cv_func_fork_works" >&6
 
-else
-  ac_cv_func_fork_works=$ac_cv_func_fork
-fi
-if test "x$ac_cv_func_fork_works" = xcross; then
-  case $host in
-    *-*-amigaos* | *-*-msdosdjgpp*)
-      # Override, as these systems have only a dummy fork() stub
-      ac_cv_func_fork_works=no
-      ;;
-    *)
-      ac_cv_func_fork_works=yes
+
+  case "$gl_cv_func_snprintf_retval_c99" in
+    *yes)
+
+$as_echo "#define HAVE_SNPRINTF_RETVAL_C99 1" >>confdefs.h
+
       ;;
   esac
-  { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
-echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
-fi
-ac_cv_func_vfork_works=$ac_cv_func_vfork
-if test "x$ac_cv_func_vfork" = xyes; then
-  echo "$as_me:$LINENO: checking for working vfork" >&5
-echo $ECHO_N "checking for working vfork... $ECHO_C" >&6
-if test "${ac_cv_func_vfork_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+  GNULIB_ACOSF=0;
+  GNULIB_ACOSL=0;
+  GNULIB_ASINF=0;
+  GNULIB_ASINL=0;
+  GNULIB_ATANF=0;
+  GNULIB_ATANL=0;
+  GNULIB_ATAN2F=0;
+  GNULIB_CBRT=0;
+  GNULIB_CBRTF=0;
+  GNULIB_CBRTL=0;
+  GNULIB_CEIL=0;
+  GNULIB_CEILF=0;
+  GNULIB_CEILL=0;
+  GNULIB_COPYSIGN=0;
+  GNULIB_COPYSIGNF=0;
+  GNULIB_COPYSIGNL=0;
+  GNULIB_COSF=0;
+  GNULIB_COSL=0;
+  GNULIB_COSHF=0;
+  GNULIB_EXPF=0;
+  GNULIB_EXPL=0;
+  GNULIB_EXP2=0;
+  GNULIB_EXP2F=0;
+  GNULIB_EXP2L=0;
+  GNULIB_EXPM1=0;
+  GNULIB_EXPM1F=0;
+  GNULIB_EXPM1L=0;
+  GNULIB_FABSF=0;
+  GNULIB_FABSL=0;
+  GNULIB_FLOOR=0;
+  GNULIB_FLOORF=0;
+  GNULIB_FLOORL=0;
+  GNULIB_FMA=0;
+  GNULIB_FMAF=0;
+  GNULIB_FMAL=0;
+  GNULIB_FMOD=0;
+  GNULIB_FMODF=0;
+  GNULIB_FMODL=0;
+  GNULIB_FREXPF=0;
+  GNULIB_FREXP=0;
+  GNULIB_FREXPL=0;
+  GNULIB_HYPOT=0;
+  GNULIB_HYPOTF=0;
+  GNULIB_HYPOTL=0;
+  GNULIB_ILOGB=0;
+  GNULIB_ILOGBF=0;
+  GNULIB_ILOGBL=0;
+  GNULIB_ISFINITE=0;
+  GNULIB_ISINF=0;
+  GNULIB_ISNAN=0;
+  GNULIB_ISNANF=0;
+  GNULIB_ISNAND=0;
+  GNULIB_ISNANL=0;
+  GNULIB_LDEXPF=0;
+  GNULIB_LDEXPL=0;
+  GNULIB_LOG=0;
+  GNULIB_LOGF=0;
+  GNULIB_LOGL=0;
+  GNULIB_LOG10=0;
+  GNULIB_LOG10F=0;
+  GNULIB_LOG10L=0;
+  GNULIB_LOG1P=0;
+  GNULIB_LOG1PF=0;
+  GNULIB_LOG1PL=0;
+  GNULIB_LOG2=0;
+  GNULIB_LOG2F=0;
+  GNULIB_LOG2L=0;
+  GNULIB_LOGB=0;
+  GNULIB_LOGBF=0;
+  GNULIB_LOGBL=0;
+  GNULIB_MODF=0;
+  GNULIB_MODFF=0;
+  GNULIB_MODFL=0;
+  GNULIB_POWF=0;
+  GNULIB_REMAINDER=0;
+  GNULIB_REMAINDERF=0;
+  GNULIB_REMAINDERL=0;
+  GNULIB_RINT=0;
+  GNULIB_RINTF=0;
+  GNULIB_RINTL=0;
+  GNULIB_ROUND=0;
+  GNULIB_ROUNDF=0;
+  GNULIB_ROUNDL=0;
+  GNULIB_SIGNBIT=0;
+  GNULIB_SINF=0;
+  GNULIB_SINL=0;
+  GNULIB_SINHF=0;
+  GNULIB_SQRTF=0;
+  GNULIB_SQRTL=0;
+  GNULIB_TANF=0;
+  GNULIB_TANL=0;
+  GNULIB_TANHF=0;
+  GNULIB_TRUNC=0;
+  GNULIB_TRUNCF=0;
+  GNULIB_TRUNCL=0;
+    HAVE_ACOSF=1;
+  HAVE_ACOSL=1;
+  HAVE_ASINF=1;
+  HAVE_ASINL=1;
+  HAVE_ATANF=1;
+  HAVE_ATANL=1;
+  HAVE_ATAN2F=1;
+  HAVE_CBRT=1;
+  HAVE_CBRTF=1;
+  HAVE_CBRTL=1;
+  HAVE_COPYSIGN=1;
+  HAVE_COPYSIGNL=1;
+  HAVE_COSF=1;
+  HAVE_COSL=1;
+  HAVE_COSHF=1;
+  HAVE_EXPF=1;
+  HAVE_EXPL=1;
+  HAVE_EXPM1=1;
+  HAVE_EXPM1F=1;
+  HAVE_FABSF=1;
+  HAVE_FABSL=1;
+  HAVE_FMA=1;
+  HAVE_FMAF=1;
+  HAVE_FMAL=1;
+  HAVE_FMODF=1;
+  HAVE_FMODL=1;
+  HAVE_FREXPF=1;
+  HAVE_HYPOTF=1;
+  HAVE_HYPOTL=1;
+  HAVE_ILOGB=1;
+  HAVE_ILOGBF=1;
+  HAVE_ILOGBL=1;
+  HAVE_ISNANF=1;
+  HAVE_ISNAND=1;
+  HAVE_ISNANL=1;
+  HAVE_LDEXPF=1;
+  HAVE_LOGF=1;
+  HAVE_LOGL=1;
+  HAVE_LOG10F=1;
+  HAVE_LOG10L=1;
+  HAVE_LOG1P=1;
+  HAVE_LOG1PF=1;
+  HAVE_LOG1PL=1;
+  HAVE_LOGBF=1;
+  HAVE_LOGBL=1;
+  HAVE_MODFF=1;
+  HAVE_MODFL=1;
+  HAVE_POWF=1;
+  HAVE_REMAINDER=1;
+  HAVE_REMAINDERF=1;
+  HAVE_RINT=1;
+  HAVE_RINTL=1;
+  HAVE_SINF=1;
+  HAVE_SINL=1;
+  HAVE_SINHF=1;
+  HAVE_SQRTF=1;
+  HAVE_SQRTL=1;
+  HAVE_TANF=1;
+  HAVE_TANL=1;
+  HAVE_TANHF=1;
+  HAVE_DECL_ACOSL=1;
+  HAVE_DECL_ASINL=1;
+  HAVE_DECL_ATANL=1;
+  HAVE_DECL_CBRTF=1;
+  HAVE_DECL_CBRTL=1;
+  HAVE_DECL_CEILF=1;
+  HAVE_DECL_CEILL=1;
+  HAVE_DECL_COPYSIGNF=1;
+  HAVE_DECL_COSL=1;
+  HAVE_DECL_EXPL=1;
+  HAVE_DECL_EXP2=1;
+  HAVE_DECL_EXP2F=1;
+  HAVE_DECL_EXP2L=1;
+  HAVE_DECL_EXPM1L=1;
+  HAVE_DECL_FLOORF=1;
+  HAVE_DECL_FLOORL=1;
+  HAVE_DECL_FREXPL=1;
+  HAVE_DECL_LDEXPL=1;
+  HAVE_DECL_LOGL=1;
+  HAVE_DECL_LOG10L=1;
+  HAVE_DECL_LOG2=1;
+  HAVE_DECL_LOG2F=1;
+  HAVE_DECL_LOG2L=1;
+  HAVE_DECL_LOGB=1;
+  HAVE_DECL_REMAINDER=1;
+  HAVE_DECL_REMAINDERL=1;
+  HAVE_DECL_RINTF=1;
+  HAVE_DECL_ROUND=1;
+  HAVE_DECL_ROUNDF=1;
+  HAVE_DECL_ROUNDL=1;
+  HAVE_DECL_SINL=1;
+  HAVE_DECL_SQRTL=1;
+  HAVE_DECL_TANL=1;
+  HAVE_DECL_TRUNC=1;
+  HAVE_DECL_TRUNCF=1;
+  HAVE_DECL_TRUNCL=1;
+  REPLACE_CBRTF=0;
+  REPLACE_CBRTL=0;
+  REPLACE_CEIL=0;
+  REPLACE_CEILF=0;
+  REPLACE_CEILL=0;
+  REPLACE_EXPM1=0;
+  REPLACE_EXPM1F=0;
+  REPLACE_EXP2=0;
+  REPLACE_EXP2L=0;
+  REPLACE_FABSL=0;
+  REPLACE_FLOOR=0;
+  REPLACE_FLOORF=0;
+  REPLACE_FLOORL=0;
+  REPLACE_FMA=0;
+  REPLACE_FMAF=0;
+  REPLACE_FMAL=0;
+  REPLACE_FMOD=0;
+  REPLACE_FMODF=0;
+  REPLACE_FMODL=0;
+  REPLACE_FREXPF=0;
+  REPLACE_FREXP=0;
+  REPLACE_FREXPL=0;
+  REPLACE_HUGE_VAL=0;
+  REPLACE_HYPOT=0;
+  REPLACE_HYPOTF=0;
+  REPLACE_HYPOTL=0;
+  REPLACE_ILOGB=0;
+  REPLACE_ILOGBF=0;
+  REPLACE_ISFINITE=0;
+  REPLACE_ISINF=0;
+  REPLACE_ISNAN=0;
+  REPLACE_LDEXPL=0;
+  REPLACE_LOG=0;
+  REPLACE_LOGF=0;
+  REPLACE_LOGL=0;
+  REPLACE_LOG10=0;
+  REPLACE_LOG10F=0;
+  REPLACE_LOG10L=0;
+  REPLACE_LOG1P=0;
+  REPLACE_LOG1PF=0;
+  REPLACE_LOG1PL=0;
+  REPLACE_LOG2=0;
+  REPLACE_LOG2F=0;
+  REPLACE_LOG2L=0;
+  REPLACE_LOGB=0;
+  REPLACE_LOGBF=0;
+  REPLACE_LOGBL=0;
+  REPLACE_MODF=0;
+  REPLACE_MODFF=0;
+  REPLACE_MODFL=0;
+  REPLACE_NAN=0;
+  REPLACE_REMAINDER=0;
+  REPLACE_REMAINDERF=0;
+  REPLACE_REMAINDERL=0;
+  REPLACE_ROUND=0;
+  REPLACE_ROUNDF=0;
+  REPLACE_ROUNDL=0;
+  REPLACE_SIGNBIT=0;
+  REPLACE_SIGNBIT_USING_GCC=0;
+  REPLACE_SQRTL=0;
+  REPLACE_TRUNC=0;
+  REPLACE_TRUNCF=0;
+  REPLACE_TRUNCL=0;
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp() can be used without linking with libm" >&5
+$as_echo_n "checking whether frexp() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_frexp_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
-  ac_cv_func_vfork_works=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-/* Thanks to Paul Eggert for this test.  */
-#include <stdio.h>
-#include <stdlib.h>
+#include <math.h>
+             double x;
+int
+main ()
+{
+int e; return frexp (x, &e) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_frexp_no_libm=yes
+else
+  gl_cv_func_frexp_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_no_libm" >&5
+$as_echo "$gl_cv_func_frexp_no_libm" >&6; }
+
+
+
+
+
+
+     GNULIB_FCHMODAT=0;
+  GNULIB_FSTAT=0;
+  GNULIB_FSTATAT=0;
+  GNULIB_FUTIMENS=0;
+  GNULIB_LCHMOD=0;
+  GNULIB_LSTAT=0;
+  GNULIB_MKDIRAT=0;
+  GNULIB_MKFIFO=0;
+  GNULIB_MKFIFOAT=0;
+  GNULIB_MKNOD=0;
+  GNULIB_MKNODAT=0;
+  GNULIB_STAT=0;
+  GNULIB_UTIMENSAT=0;
+    HAVE_FCHMODAT=1;
+  HAVE_FSTATAT=1;
+  HAVE_FUTIMENS=1;
+  HAVE_LCHMOD=1;
+  HAVE_LSTAT=1;
+  HAVE_MKDIRAT=1;
+  HAVE_MKFIFO=1;
+  HAVE_MKFIFOAT=1;
+  HAVE_MKNOD=1;
+  HAVE_MKNODAT=1;
+  HAVE_UTIMENSAT=1;
+  REPLACE_FSTAT=0;
+  REPLACE_FSTATAT=0;
+  REPLACE_FUTIMENS=0;
+  REPLACE_LSTAT=0;
+  REPLACE_MKDIR=0;
+  REPLACE_MKFIFO=0;
+  REPLACE_MKNOD=0;
+  REPLACE_STAT=0;
+  REPLACE_UTIMENSAT=0;
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5
+$as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
+if ${ac_cv_header_stat_broken+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 #include <sys/types.h>
 #include <sys/stat.h>
+
+#if defined S_ISBLK && defined S_IFDIR
+extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
+#endif
+
+#if defined S_ISBLK && defined S_IFCHR
+extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
+#endif
+
+#if defined S_ISLNK && defined S_IFREG
+extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
+#endif
+
+#if defined S_ISSOCK && defined S_IFREG
+extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stat_broken=no
+else
+  ac_cv_header_stat_broken=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5
+$as_echo "$ac_cv_header_stat_broken" >&6; }
+if test $ac_cv_header_stat_broken = yes; then
+
+$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h
+
+fi
+
+
+
+
+
+  case "$host_os" in
+    mingw*)
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5
+$as_echo_n "checking for 64-bit off_t... " >&6; }
+if ${gl_cv_type_off_t_64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+                int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_off_t_64=yes
+else
+  gl_cv_type_off_t_64=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_off_t_64" >&5
+$as_echo "$gl_cv_type_off_t_64" >&6; }
+      if test $gl_cv_type_off_t_64 = no; then
+        WINDOWS_64_BIT_OFF_T=1
+      else
+        WINDOWS_64_BIT_OFF_T=0
+      fi
+                  WINDOWS_64_BIT_ST_SIZE=1
+      ;;
+    *)
+                                                      WINDOWS_64_BIT_OFF_T=0
+      WINDOWS_64_BIT_ST_SIZE=0
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5
+$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; }
+if ${gl_cv_next_sys_stat_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_sys_stat_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'sys/stat.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_sys_stat_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5
+$as_echo "$gl_cv_next_sys_stat_h" >&6; }
+     fi
+     NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sys/stat.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sys_stat_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+  if test $WINDOWS_64_BIT_ST_SIZE = 1; then
+
+$as_echo "#define _GL_WINDOWS_64_BIT_ST_SIZE 1" >>confdefs.h
+
+  fi
+
+      ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h>
+     #include <sys/stat.h>
+"
+if test "x$ac_cv_type_nlink_t" = xyes; then :
+
+else
+
+$as_echo "#define nlink_t int" >>confdefs.h
+
+fi
+
+
+
+    for gl_func in fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat     mknod mknodat stat utimensat; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+ac_fn_c_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getdelim" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETDELIM $ac_have_decl
+_ACEOF
+
+
+
+
+
+ac_fn_c_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getline" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETLINE $ac_have_decl
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_getopt_h='<'getopt.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <getopt.h>" >&5
+$as_echo_n "checking absolute name of <getopt.h>... " >&6; }
+if ${gl_cv_next_getopt_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_getopt_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <getopt.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'getopt.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_getopt_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_getopt_h='<'getopt.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5
+$as_echo "$gl_cv_next_getopt_h" >&6; }
+     fi
+     NEXT_GETOPT_H=$gl_cv_next_getopt_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'getopt.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_getopt_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_getopt_h = yes; then
+    HAVE_GETOPT_H=1
+  else
+    HAVE_GETOPT_H=0
+  fi
+
+
+  gl_replace_getopt=
+
+    if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    for ac_header in getopt.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default"
+if test "x$ac_cv_header_getopt_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETOPT_H 1
+_ACEOF
+
+else
+  gl_replace_getopt=yes
+fi
+
+done
+
+  fi
+
+    if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    for ac_func in getopt_long_only
+do :
+  ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only"
+if test "x$ac_cv_func_getopt_long_only" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETOPT_LONG_ONLY 1
+_ACEOF
+
+else
+  gl_replace_getopt=yes
+fi
+done
+
+  fi
+
+          if test -z "$gl_replace_getopt"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5
+$as_echo_n "checking whether getopt is POSIX compatible... " >&6; }
+if ${gl_cv_func_getopt_posix+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                                                if test $cross_compiling = no; then
+                              if test "$cross_compiling" = yes; then :
+  { { $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.  */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+  static char program[] = "program";
+  static char a[] = "-a";
+  static char foo[] = "foo";
+  static char bar[] = "bar";
+  char *argv[] = { program, a, foo, bar, NULL };
+  int c;
+
+  c = getopt (4, argv, "ab");
+  if (!(c == 'a'))
+    return 1;
+  c = getopt (4, argv, "ab");
+  if (!(c == -1))
+    return 2;
+  if (!(optind == 2))
+    return 3;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_getopt_posix=maybe
+else
+  gl_cv_func_getopt_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+          if test $gl_cv_func_getopt_posix = maybe; then
+                                    if test "$cross_compiling" = yes; then :
+  { { $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.  */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+  static char program[] = "program";
+  static char donald[] = "donald";
+  static char p[] = "-p";
+  static char billy[] = "billy";
+  static char duck[] = "duck";
+  static char a[] = "-a";
+  static char bar[] = "bar";
+  char *argv[] = { program, donald, p, billy, duck, a, bar, NULL };
+  int c;
+
+  c = getopt (7, argv, "+abp:q:");
+  if (!(c == -1))
+    return 4;
+  if (!(strcmp (argv[0], "program") == 0))
+    return 5;
+  if (!(strcmp (argv[1], "donald") == 0))
+    return 6;
+  if (!(strcmp (argv[2], "-p") == 0))
+    return 7;
+  if (!(strcmp (argv[3], "billy") == 0))
+    return 8;
+  if (!(strcmp (argv[4], "duck") == 0))
+    return 9;
+  if (!(strcmp (argv[5], "-a") == 0))
+    return 10;
+  if (!(strcmp (argv[6], "bar") == 0))
+    return 11;
+  if (!(optind == 1))
+    return 12;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_getopt_posix=maybe
+else
+  gl_cv_func_getopt_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+          fi
+          if test $gl_cv_func_getopt_posix = maybe; then
+                        if test "$cross_compiling" = yes; then :
+  { { $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.  */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+  static char program[] = "program";
+  static char ab[] = "-ab";
+  char *argv[3] = { program, ab, NULL };
+  if (getopt (2, argv, "ab:") != 'a')
+    return 13;
+  if (getopt (2, argv, "ab:") != '?')
+    return 14;
+  if (optopt != 'b')
+    return 15;
+  if (optind != 2)
+    return 16;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_getopt_posix=yes
+else
+  gl_cv_func_getopt_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+          fi
+        else
+          case "$host_os" in
+            darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";;
+            *)                       gl_cv_func_getopt_posix="guessing yes";;
+          esac
+        fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5
+$as_echo "$gl_cv_func_getopt_posix" >&6; }
+    case "$gl_cv_func_getopt_posix" in
+      *no) gl_replace_getopt=yes ;;
+    esac
+  fi
+
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5
+$as_echo_n "checking for working GNU getopt function... " >&6; }
+if ${gl_cv_func_getopt_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
+       # optstring is necessary for programs like m4 that have POSIX-mandated
+       # semantics for supporting options interspersed with files.
+       # Also, since getopt_long is a GNU extension, we require optind=0.
+       # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT;
+       # so take care to revert to the correct (non-)export state.
+       gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }'
+       case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in
+         xx) gl_had_POSIXLY_CORRECT=exported ;;
+         x)  gl_had_POSIXLY_CORRECT=yes      ;;
+         *)  gl_had_POSIXLY_CORRECT=         ;;
+       esac
+       POSIXLY_CORRECT=1
+       export POSIXLY_CORRECT
+       if test "$cross_compiling" = yes; then :
+           gl_cv_func_getopt_gnu="guessing no"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <getopt.h>
+                           #include <stddef.h>
+                           #include <string.h>
+
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X.  */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens.  */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+   EXC_BAD_ACCESS.  */
+static void *
+mach_exception_thread (void *arg)
+{
+  /* Buffer for a message to be received.  */
+  struct {
+    mach_msg_header_t head;
+    mach_msg_body_t msgh_body;
+    char data[1024];
+  } msg;
+  mach_msg_return_t retval;
+  /* Wait for a message on the exception port.  */
+  retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+                     our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+  if (retval != MACH_MSG_SUCCESS)
+    abort ();
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+  mach_port_t self = mach_task_self ();
+  /* Allocate a port on which the thread shall listen for exceptions.  */
+  if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+      == KERN_SUCCESS) {
+    /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html.  */
+    if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+                                MACH_MSG_TYPE_MAKE_SEND)
+        == KERN_SUCCESS) {
+      /* The exceptions we want to catch.  Only EXC_BAD_ACCESS is interesting
+         for us.  */
+      exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+      /* Create the thread listening on the exception port.  */
+      pthread_attr_t attr;
+      pthread_t thread;
+      if (pthread_attr_init (&attr) == 0
+          && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+          && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+        pthread_attr_destroy (&attr);
+        /* Replace the exception port info for these exceptions with our own.
+           Note that we replace the exception port for the entire task, not only
+           for a particular thread.  This has the effect that when our exception
+           port gets the message, the thread specific exception port has already
+           been asked, and we don't need to bother about it.
+           See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html.  */
+        task_set_exception_ports (self, mask, our_exception_port,
+                                  EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+      }
+    }
+  }
+}
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Avoid a crash on native Windows.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+  switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+    {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_IN_PAGE_ERROR:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_GUARD_PAGE:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      exit (1);
+    }
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+  SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems.  */
+#include <signal.h>
+/* A POSIX signal handler.  */
+static void
+exception_handler (int sig)
+{
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+  signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+  signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+
+
+int
+main ()
+{
+
+             int result = 0;
+
+             nocrash_init();
+
+             /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
+                and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
+                OSF/1 5.1, Solaris 10.  */
+             {
+               static char conftest[] = "conftest";
+               static char plus[] = "-+";
+               char *argv[3] = { conftest, plus, NULL };
+               opterr = 0;
+               if (getopt (2, argv, "+a") != '?')
+                 result |= 1;
+             }
+             /* This code succeeds on glibc 2.8, mingw,
+                and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
+                IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x.  */
+             {
+               static char program[] = "program";
+               static char p[] = "-p";
+               static char foo[] = "foo";
+               static char bar[] = "bar";
+               char *argv[] = { program, p, foo, bar, NULL };
+
+               optind = 1;
+               if (getopt (4, argv, "p::") != 'p')
+                 result |= 2;
+               else if (optarg != NULL)
+                 result |= 4;
+               else if (getopt (4, argv, "p::") != -1)
+                 result |= 6;
+               else if (optind != 2)
+                 result |= 8;
+             }
+             /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0.  */
+             {
+               static char program[] = "program";
+               static char foo[] = "foo";
+               static char p[] = "-p";
+               char *argv[] = { program, foo, p, NULL };
+               optind = 0;
+               if (getopt (3, argv, "-p") != 1)
+                 result |= 16;
+               else if (getopt (3, argv, "-p") != 'p')
+                 result |= 16;
+             }
+             /* This code fails on glibc 2.11.  */
+             {
+               static char program[] = "program";
+               static char b[] = "-b";
+               static char a[] = "-a";
+               char *argv[] = { program, b, a, NULL };
+               optind = opterr = 0;
+               if (getopt (3, argv, "+:a:b") != 'b')
+                 result |= 32;
+               else if (getopt (3, argv, "+:a:b") != ':')
+                 result |= 32;
+             }
+             /* This code dumps core on glibc 2.14.  */
+             {
+               static char program[] = "program";
+               static char w[] = "-W";
+               static char dummy[] = "dummy";
+               char *argv[] = { program, w, dummy, NULL };
+               optind = opterr = 1;
+               if (getopt (3, argv, "W;") != 'W')
+                 result |= 64;
+             }
+             return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_getopt_gnu=yes
+else
+  gl_cv_func_getopt_gnu=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+       case $gl_had_POSIXLY_CORRECT in
+         exported) ;;
+         yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;;
+         *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;;
+       esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5
+$as_echo "$gl_cv_func_getopt_gnu" >&6; }
+    if test "$gl_cv_func_getopt_gnu" != yes; then
+      gl_replace_getopt=yes
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5
+$as_echo_n "checking for working GNU getopt_long function... " >&6; }
+if ${gl_cv_func_getopt_long_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+              case "$host_os" in
+              openbsd*) gl_cv_func_getopt_long_gnu="guessing no";;
+              *)        gl_cv_func_getopt_long_gnu="guessing yes";;
+            esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <getopt.h>
+                #include <stddef.h>
+                #include <string.h>
+
+int
+main ()
+{
+static const struct option long_options[] =
+                  {
+                    { "xtremely-",no_argument,       NULL, 1003 },
+                    { "xtra",     no_argument,       NULL, 1001 },
+                    { "xtreme",   no_argument,       NULL, 1002 },
+                    { "xtremely", no_argument,       NULL, 1003 },
+                    { NULL,       0,                 NULL, 0 }
+                  };
+                /* This code fails on OpenBSD 5.0.  */
+                {
+                  static char program[] = "program";
+                  static char xtremel[] = "--xtremel";
+                  char *argv[] = { program, xtremel, NULL };
+                  int option_index;
+                  optind = 1; opterr = 0;
+                  if (getopt_long (2, argv, "", long_options, &option_index) != 1003)
+                    return 1;
+                }
+                return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_getopt_long_gnu=yes
+else
+  gl_cv_func_getopt_long_gnu=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_long_gnu" >&5
+$as_echo "$gl_cv_func_getopt_long_gnu" >&6; }
+      case "$gl_cv_func_getopt_long_gnu" in
+        *yes) ;;
+        *) gl_replace_getopt=yes ;;
+      esac
+    fi
+  fi
+
+
+
+
+
+
+    REPLACE_GETOPT=0
+    if test -n "$gl_replace_getopt"; then
+      REPLACE_GETOPT=1
+    fi
+
+  if test $REPLACE_GETOPT = 1; then
+
+  GETOPT_H=getopt.h
+
+$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h
+
+
+
+  fi
+
+ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getenv" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV $ac_have_decl
+_ACEOF
+
+
+
+
+
+
+
+
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+
+
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+      if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+
+
+      if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdint_h='<'stdint.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
+$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
+if ${gl_cv_next_stdint_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_stdint_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'stdint.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_stdint_h='<'stdint.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
+$as_echo "$gl_cv_next_stdint_h" >&6; }
+     fi
+     NEXT_STDINT_H=$gl_cv_next_stdint_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdint.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdint_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+
+
+    if test $ac_cv_header_stdint_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
+$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
+if ${gl_cv_header_working_stdint_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_working_stdint_h=no
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 \
+        ? (t) -1 \
+        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+                                                    if test "$cross_compiling" = yes; then :
+                 gl_cv_header_working_stdint_h=yes
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+
+int
+main ()
+{
+
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return mv - macro_values + 1;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_header_working_stdint_h=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
+$as_echo "$gl_cv_header_working_stdint_h" >&6; }
+  fi
+  if test "$gl_cv_header_working_stdint_h" = yes; then
+    STDINT_H=
+  else
+            for ac_header in sys/inttypes.h sys/bitypes.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    if test $ac_cv_header_sys_inttypes_h = yes; then
+      HAVE_SYS_INTTYPES_H=1
+    else
+      HAVE_SYS_INTTYPES_H=0
+    fi
+
+    if test $ac_cv_header_sys_bitypes_h = yes; then
+      HAVE_SYS_BITYPES_H=1
+    else
+      HAVE_SYS_BITYPES_H=0
+    fi
+
+
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if eval \${gl_cv_bitsizeof_${gltype}+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if eval \${gl_cv_bitsizeof_${gltype}+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
+$as_echo_n "checking whether $gltype is signed... " >&6; }
+if eval \${gl_cv_type_${gltype}_signed+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  result=yes
+else
+  result=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       eval gl_cv_type_${gltype}_signed=\$result
+
+fi
+eval ac_res=\$gl_cv_type_${gltype}_signed
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNED_${GLTYPE} 1
+_ACEOF
+
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+
+
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if eval \${gl_cv_type_${gltype}_suffix+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if eval \${gl_cv_type_${gltype}_suffix+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+
+          if test $BITSIZEOF_WINT_T -lt 32; then
+    BITSIZEOF_WINT_T=32
+  fi
+
+    STDINT_H=stdint.h
+  fi
+
+   if test -n "$STDINT_H"; then
+  GL_GENERATE_STDINT_H_TRUE=
+  GL_GENERATE_STDINT_H_FALSE='#'
+else
+  GL_GENERATE_STDINT_H_TRUE='#'
+  GL_GENERATE_STDINT_H_FALSE=
+fi
+
+
+
+
+
+  GNULIB_IMAXABS=0;
+  GNULIB_IMAXDIV=0;
+  GNULIB_STRTOIMAX=0;
+  GNULIB_STRTOUMAX=0;
+    HAVE_DECL_IMAXABS=1;
+  HAVE_DECL_IMAXDIV=1;
+  HAVE_DECL_STRTOIMAX=1;
+  HAVE_DECL_STRTOUMAX=1;
+  REPLACE_STRTOIMAX=0;
+  INT32_MAX_LT_INTMAX_MAX=1;
+  INT64_MAX_EQ_LONG_MAX='defined _LP64';
+  PRI_MACROS_BROKEN=0;
+  PRIPTR_PREFIX=__PRIPTR_PREFIX;
+  UINT32_MAX_LT_UINTMAX_MAX=1;
+  UINT64_MAX_EQ_ULONG_MAX='defined _LP64';
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_inttypes_h='<'inttypes.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5
+$as_echo_n "checking absolute name of <inttypes.h>... " >&6; }
+if ${gl_cv_next_inttypes_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_inttypes_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <inttypes.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'inttypes.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_inttypes_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_inttypes_h='<'inttypes.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5
+$as_echo "$gl_cv_next_inttypes_h" >&6; }
+     fi
+     NEXT_INTTYPES_H=$gl_cv_next_inttypes_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'inttypes.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_inttypes_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+    for gl_func in imaxabs imaxdiv strtoimax strtoumax; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <inttypes.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+  for ac_header in inttypes.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H 1
+_ACEOF
+
+fi
+
+done
+
+  if test $ac_cv_header_inttypes_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5
+$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
+if ${gt_cv_inttypes_pri_broken+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_inttypes_pri_broken=no
+else
+  gt_cv_inttypes_pri_broken=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5
+$as_echo "$gt_cv_inttypes_pri_broken" >&6; }
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define PRI_MACROS_BROKEN 1
+_ACEOF
+
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5
+$as_echo_n "checking where to find the exponent in a 'float'... " >&6; }
+if ${gl_cv_cc_float_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_cc_float_expbit0="word 0 bit 23"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; } memory_float;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (float x)
+{
+  memory_float m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (float) < sizeof (memory_float).  */
+  memset (&m, 0, sizeof (memory_float));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25f);
+  add_to_ored_words (0.5f);
+  add_to_ored_words (1.0f);
+  add_to_ored_words (2.0f);
+  add_to_ored_words (4.0f);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_float_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_float_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5
+$as_echo "$gl_cv_cc_float_expbit0" >&6; }
+  case "$gl_cv_cc_float_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+  ISNANF_LIBM=
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(float) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnanf_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;
+int
+main ()
+{
+return isnanf (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanf_no_libm=yes
+else
+  gl_cv_func_isnanf_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_no_libm" >&5
+$as_echo "$gl_cv_func_isnanf_no_libm" >&6; }
+
+  if test $gl_cv_func_isnanf_no_libm = no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used with libm" >&5
+$as_echo_n "checking whether isnan(float) can be used with libm... " >&6; }
+if ${gl_cv_func_isnanf_in_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;
+int
+main ()
+{
+return isnanf (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanf_in_libm=yes
+else
+  gl_cv_func_isnanf_in_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_in_libm" >&5
+$as_echo "$gl_cv_func_isnanf_in_libm" >&6; }
+
+    if test $gl_cv_func_isnanf_in_libm = yes; then
+      ISNANF_LIBM=-lm
+    fi
+  fi
+    if test $gl_cv_func_isnanf_no_libm = yes \
+     || test $gl_cv_func_isnanf_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $ISNANF_LIBM"
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5
+$as_echo_n "checking whether isnan(float) works... " >&6; }
+if ${gl_cv_func_isnanf_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no";;
+           *)                gl_cv_func_isnanf_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanf
+# define isnanf(x) __builtin_isnanf ((float)(x))
+#elif defined isnan
+# undef isnanf
+# define isnanf(x) isnan ((float)(x))
+#endif
+/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0.  */
+#ifdef __DECC
+static float
+NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#else
+# define NaN() (0.0f / 0.0f)
+#endif
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; float value; } memory_float;
+int main()
+{
+  int result = 0;
+
+  if (isnanf (1.0f / 0.0f))
+    result |= 1;
+
+  if (!isnanf (NaN ()))
+    result |= 2;
+
+#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
+  /* The isnanf function should be immune against changes in the sign bit and
+     in the mantissa bits.  The xor operation twiddles a bit that can only be
+     a sign bit or a mantissa bit.  */
+  if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0)
+    {
+      memory_float m;
+
+      m.value = NaN ();
+      /* Set the bits below the exponent to 01111...111.  */
+      m.word[0] &= -1U << FLT_EXPBIT0_BIT;
+      m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1;
+      if (!isnanf (m.value))
+        result |= 4;
+    }
+#endif
+
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_isnanf_works=yes
+else
+  gl_cv_func_isnanf_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_works" >&5
+$as_echo "$gl_cv_func_isnanf_works" >&6; }
+
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_isnanf_works" in
+      *yes) gl_func_isnanf=yes ;;
+      *)    gl_func_isnanf=no; ISNANF_LIBM= ;;
+    esac
+  else
+    gl_func_isnanf=no
+  fi
+  if test $gl_func_isnanf != yes; then
+    HAVE_ISNANF=0
+  fi
+
+
+
+
+  ISNAND_LIBM=
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(double) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnand_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #else
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;
+int
+main ()
+{
+return isnand (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnand_no_libm=yes
+else
+  gl_cv_func_isnand_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_no_libm" >&5
+$as_echo "$gl_cv_func_isnand_no_libm" >&6; }
+
+  if test $gl_cv_func_isnand_no_libm = no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used with libm" >&5
+$as_echo_n "checking whether isnan(double) can be used with libm... " >&6; }
+if ${gl_cv_func_isnand_in_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #elif defined isnan
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;
+int
+main ()
+{
+return isnand (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnand_in_libm=yes
+else
+  gl_cv_func_isnand_in_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_in_libm" >&5
+$as_echo "$gl_cv_func_isnand_in_libm" >&6; }
+
+    if test $gl_cv_func_isnand_in_libm = yes; then
+      ISNAND_LIBM=-lm
+    fi
+  fi
+    if test $gl_cv_func_isnand_no_libm = yes \
+     || test $gl_cv_func_isnand_in_libm = yes; then
+    gl_func_isnand=yes
+  else
+    gl_func_isnand=no
+    HAVE_ISNAND=0
+  fi
+
+
+
+
+  ISNANL_LIBM=
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(long double) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnanl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;
+int
+main ()
+{
+return isnanl (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanl_no_libm=yes
+else
+  gl_cv_func_isnanl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_no_libm" >&5
+$as_echo "$gl_cv_func_isnanl_no_libm" >&6; }
+
+  if test $gl_cv_func_isnanl_no_libm = no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used with libm" >&5
+$as_echo_n "checking whether isnan(long double) can be used with libm... " >&6; }
+if ${gl_cv_func_isnanl_in_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;
+int
+main ()
+{
+return isnanl (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanl_in_libm=yes
+else
+  gl_cv_func_isnanl_in_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_in_libm" >&5
+$as_echo "$gl_cv_func_isnanl_in_libm" >&6; }
+
+    if test $gl_cv_func_isnanl_in_libm = yes; then
+      ISNANL_LIBM=-lm
+    fi
+  fi
+    if test $gl_cv_func_isnanl_no_libm = yes \
+     || test $gl_cv_func_isnanl_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $ISNANL_LIBM"
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5
+$as_echo_n "checking whether isnanl works... " >&6; }
+if ${gl_cv_func_isnanl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_cpu" in
+                                 # Guess no on ia64, x86_64, i386.
+           ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";;
+           *)
+             case "$host_os" in
+               netbsd*) gl_cv_func_isnanl_works="guessing no";;
+               *)       gl_cv_func_isnanl_works="guessing yes";;
+             esac
+             ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanl
+# define isnanl(x) __builtin_isnanl ((long double)(x))
+#elif defined isnan
+# undef isnanl
+# define isnanl(x) isnan ((long double)(x))
+#endif
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; long double value; }
+        memory_long_double;
+/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
+   runtime type conversion.  */
+#ifdef __sgi
+static long double NaNl ()
+{
+  double zero = 0.0;
+  return zero / zero;
+}
+#else
+# define NaNl() (0.0L / 0.0L)
+#endif
+int main ()
+{
+  int result = 0;
+
+  if (!isnanl (NaNl ()))
+    result |= 1;
+
+  {
+    memory_long_double m;
+    unsigned int i;
+
+    /* The isnanl function should be immune against changes in the sign bit and
+       in the mantissa bits.  The xor operation twiddles a bit that can only be
+       a sign bit or a mantissa bit (since the exponent never extends to
+       bit 31).  */
+    m.value = NaNl ();
+    m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
+    for (i = 0; i < NWORDS; i++)
+      m.word[i] |= 1;
+    if (!isnanl (m.value))
+      result |= 1;
+  }
+
+#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16),    \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
+     Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
+       Intel IA-64 Architecture Software Developer's Manual, Volume 1:
+       Application Architecture.
+       Table 5-2 "Floating-Point Register Encodings"
+       Figure 5-6 "Memory to Floating-Point Register Data Translation"
+   */
+  { /* Pseudo-NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 64;
+  }
+#endif
+
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_isnanl_works=yes
+else
+  gl_cv_func_isnanl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_works" >&5
+$as_echo "$gl_cv_func_isnanl_works" >&6; }
+
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_isnanl_works" in
+      *yes) gl_func_isnanl=yes ;;
+      *)    gl_func_isnanl=no; ISNANL_LIBM= ;;
+    esac
+  else
+    gl_func_isnanl=no
+  fi
+  if test $gl_func_isnanl != yes; then
+    HAVE_ISNANL=0
+  fi
+
+
+
+  GNULIB_ISWBLANK=0;
+  GNULIB_WCTYPE=0;
+  GNULIB_ISWCTYPE=0;
+  GNULIB_WCTRANS=0;
+  GNULIB_TOWCTRANS=0;
+    HAVE_ISWBLANK=1;
+  HAVE_WCTYPE_T=1;
+  HAVE_WCTRANS_T=1;
+  REPLACE_ISWBLANK=0;
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_iswcntrl = yes; then
+    HAVE_ISWCNTRL=1
+  else
+    HAVE_ISWCNTRL=0
+  fi
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wctype_h='<'wctype.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
+$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
+if ${gl_cv_next_wctype_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_wctype_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wctype.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'wctype.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_wctype_h='<'wctype.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
+$as_echo "$gl_cv_next_wctype_h" >&6; }
+     fi
+     NEXT_WCTYPE_H=$gl_cv_next_wctype_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wctype.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wctype_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_wctype_h = yes; then
+    if test $ac_cv_func_iswcntrl = yes; then
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
+$as_echo_n "checking whether iswcntrl works... " >&6; }
+if ${gl_cv_func_iswcntrl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test "$cross_compiling" = yes; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+                          #if __GNU_LIBRARY__ == 1
+                          Linux libc5 i18n is broken.
+                          #endif
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_iswcntrl_works="guessing yes"
+else
+  gl_cv_func_iswcntrl_works="guessing no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                  included before <wchar.h>.
+                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                  must be included before <wchar.h>.  */
+               #include <stddef.h>
+               #include <stdio.h>
+               #include <time.h>
+               #include <wchar.h>
+               #include <wctype.h>
+               int main () { return iswprint ('x') == 0; }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_iswcntrl_works=yes
+else
+  gl_cv_func_iswcntrl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
+$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
+    fi
+    HAVE_WCTYPE_H=1
+  else
+    HAVE_WCTYPE_H=0
+  fi
+
+
+  case "$gl_cv_func_iswcntrl_works" in
+    *yes) REPLACE_ISWCNTRL=0 ;;
+    *)    REPLACE_ISWCNTRL=1 ;;
+  esac
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+        :
+  fi
+
+  if test $REPLACE_ISWCNTRL = 1; then
+    REPLACE_TOWLOWER=1
+  else
+    for ac_func in towlower
+do :
+  ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
+if test "x$ac_cv_func_towlower" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_TOWLOWER 1
+_ACEOF
+
+fi
+done
+
+    if test $ac_cv_func_towlower = yes; then
+      REPLACE_TOWLOWER=0
+    else
+      ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+             included before <wchar.h>.
+             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+             must be included before <wchar.h>.  */
+          #include <stddef.h>
+          #include <stdio.h>
+          #include <time.h>
+          #include <wchar.h>
+          #if HAVE_WCTYPE_H
+          # include <wctype.h>
+          #endif
+
+"
+if test "x$ac_cv_have_decl_towlower" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TOWLOWER $ac_have_decl
+_ACEOF
+
+      if test $ac_cv_have_decl_towlower = yes; then
+                                REPLACE_TOWLOWER=1
+      else
+        REPLACE_TOWLOWER=0
+      fi
+    fi
+  fi
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+        :
+  fi
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
+$as_echo_n "checking for wctype_t... " >&6; }
+if ${gl_cv_type_wctype_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #if HAVE_WCTYPE_H
+            # include <wctype.h>
+            #endif
+            wctype_t a;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wctype_t=yes
+else
+  gl_cv_type_wctype_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
+$as_echo "$gl_cv_type_wctype_t" >&6; }
+  if test $gl_cv_type_wctype_t = no; then
+    HAVE_WCTYPE_T=0
+  fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
+$as_echo_n "checking for wctrans_t... " >&6; }
+if ${gl_cv_type_wctrans_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #include <wctype.h>
+            wctrans_t a;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wctrans_t=yes
+else
+  gl_cv_type_wctrans_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
+$as_echo "$gl_cv_type_wctrans_t" >&6; }
+  if test $gl_cv_type_wctrans_t = no; then
+    HAVE_WCTRANS_T=0
+  fi
+
+
+    for gl_func in wctype iswctype wctrans towctrans     ; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+#include <wctype.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexp() can be used without linking with libm" >&5
+$as_echo_n "checking whether ldexp() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_ldexp_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __NO_MATH_INLINES
+                           # define __NO_MATH_INLINES 1 /* for glibc */
+                           #endif
+                           #include <math.h>
+                           double (*funcptr) (double, int) = ldexp;
+                           double x;
+int
+main ()
+{
+return ldexp (x, -1) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_ldexp_no_libm=yes
+else
+  gl_cv_func_ldexp_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexp_no_libm" >&5
+$as_echo "$gl_cv_func_ldexp_no_libm" >&6; }
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
+$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
+if ${am_cv_langinfo_codeset+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET); return !cs;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_langinfo_codeset=yes
+else
+  am_cv_langinfo_codeset=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
+$as_echo "$am_cv_langinfo_codeset" >&6; }
+  if test $am_cv_langinfo_codeset = yes; then
+
+$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
+
+  fi
+
+ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
+_ACEOF
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
+$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
+if ${ac_cv_gnu_library_2_1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+#ifdef __UCLIBC__
+ Lucky user
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky" >/dev/null 2>&1; then :
+  ac_cv_gnu_library_2_1=yes
+else
+  ac_cv_gnu_library_2_1=no
+fi
+rm -f conftest*
+
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
+$as_echo "$ac_cv_gnu_library_2_1" >&6; }
+
+    GLIBC21="$ac_cv_gnu_library_2_1"
+
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+      while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${acl_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$acl_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+        test "$with_gnu_ld" != no && break
+        ;;
+      *)
+        test "$with_gnu_ld" != yes && break
+        ;;
+      esac
+    fi
+  done
+  IFS="$acl_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${acl_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes
+  ;;
+*)
+  acl_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if ${acl_cv_rpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then :
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+
+  acl_libdirstem=lib
+  acl_libdirstem2=
+  case "$host_os" in
+    solaris*)
+                                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+$as_echo_n "checking for 64-bit host... " >&6; }
+if ${gl_cv_solaris_64bit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _LP64
+sixtyfour bits
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
+  gl_cv_solaris_64bit=yes
+else
+  gl_cv_solaris_64bit=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+$as_echo "$gl_cv_solaris_64bit" >&6; }
+      if test $gl_cv_solaris_64bit = yes; then
+        acl_libdirstem=lib/64
+        case "$host_cpu" in
+          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
+          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+        esac
+      fi
+      ;;
+    *)
+      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+      if test -n "$searchpath"; then
+        acl_save_IFS="${IFS= 	}"; IFS=":"
+        for searchdir in $searchpath; do
+          if test -d "$searchdir"; then
+            case "$searchdir" in
+              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
+              *) searchdir=`cd "$searchdir" && pwd`
+                 case "$searchdir" in
+                   */lib64 ) acl_libdirstem=lib64 ;;
+                 esac ;;
+            esac
+          fi
+        done
+        IFS="$acl_save_IFS"
+      fi
+      ;;
+  esac
+  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+
+
+
+  gl_threads_api=none
+  LIBTHREAD=
+  LTLIBTHREAD=
+  LIBMULTITHREAD=
+  LTLIBMULTITHREAD=
+  if test "$gl_use_threads" != no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5
+$as_echo_n "checking whether imported symbols can be declared weak... " >&6; }
+if ${gl_cv_have_weak+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_have_weak=no
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+extern void xyzzy ();
+#pragma weak xyzzy
+int
+main ()
+{
+xyzzy();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_have_weak=maybe
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       if test $gl_cv_have_weak = maybe; then
+                           if test "$cross_compiling" = yes; then :
+                          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __ELF__
+               Extensible Linking Format
+               #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Extensible Linking Format" >/dev/null 2>&1; then :
+  gl_cv_have_weak="guessing yes"
+else
+  gl_cv_have_weak="guessing no"
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#pragma weak fputs
+int main ()
+{
+  return (fputs == NULL);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_have_weak=yes
+else
+  gl_cv_have_weak=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+       fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5
+$as_echo "$gl_cv_have_weak" >&6; }
+    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+      # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY.
+      ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes; then :
+  gl_have_pthread_h=yes
+else
+  gl_have_pthread_h=no
+fi
+
+
+      if test "$gl_have_pthread_h" = yes; then
+        # Other possible tests:
+        #   -lpthreads (FSU threads, PCthreads)
+        #   -lgthreads
+        gl_have_pthread=
+        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+        # the second one only in libpthread, and lock.c needs it.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+pthread_mutex_lock((pthread_mutex_t*)0);
+               pthread_mutexattr_init((pthread_mutexattr_t*)0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_have_pthread=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+        # since it is defined as a macro on OSF/1.)
+        if test -n "$gl_have_pthread"; then
+          # The program links fine without libpthread. But it may actually
+          # need to link with libpthread in order to create multiple threads.
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+$as_echo_n "checking for pthread_kill in -lpthread... " >&6; }
+if ${ac_cv_lib_pthread_pthread_kill+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_kill ();
+int
+main ()
+{
+return pthread_kill ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_pthread_pthread_kill=yes
+else
+  ac_cv_lib_pthread_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
+  LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+             # On Solaris and HP-UX, most pthread functions exist also in libc.
+             # Therefore pthread_in_use() needs to actually try to create a
+             # thread: pthread_create from libc will fail, whereas
+             # pthread_create will actually create a thread.
+             case "$host_os" in
+               solaris* | hpux*)
+
+$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
+
+             esac
+
+fi
+
+        else
+          # Some library is needed. Try libpthread and libc_r.
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+$as_echo_n "checking for pthread_kill in -lpthread... " >&6; }
+if ${ac_cv_lib_pthread_pthread_kill+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_kill ();
+int
+main ()
+{
+return pthread_kill ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_pthread_pthread_kill=yes
+else
+  ac_cv_lib_pthread_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
+  gl_have_pthread=yes
+             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
+             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+fi
+
+          if test -z "$gl_have_pthread"; then
+            # For FreeBSD 4.
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5
+$as_echo_n "checking for pthread_kill in -lc_r... " >&6; }
+if ${ac_cv_lib_c_r_pthread_kill+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc_r  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_kill ();
+int
+main ()
+{
+return pthread_kill ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_c_r_pthread_kill=yes
+else
+  ac_cv_lib_c_r_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5
+$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then :
+  gl_have_pthread=yes
+               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
+               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r
+fi
+
+          fi
+        fi
+        if test -n "$gl_have_pthread"; then
+          gl_threads_api=posix
+
+$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h
+
+          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+            if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+
+$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
+
+              LIBTHREAD=
+              LTLIBTHREAD=
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
+        gl_have_solaristhread=
+        gl_save_LIBS="$LIBS"
+        LIBS="$LIBS -lthread"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <thread.h>
+#include <synch.h>
+
+int
+main ()
+{
+thr_self();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_have_solaristhread=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        LIBS="$gl_save_LIBS"
+        if test -n "$gl_have_solaristhread"; then
+          gl_threads_api=solaris
+          LIBTHREAD=-lthread
+          LTLIBTHREAD=-lthread
+          LIBMULTITHREAD="$LIBTHREAD"
+          LTLIBMULTITHREAD="$LTLIBTHREAD"
+
+$as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h
+
+          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+
+$as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h
+
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      fi
+    fi
+    if test "$gl_use_threads" = pth; then
+      gl_save_CPPFLAGS="$CPPFLAGS"
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5
+$as_echo_n "checking how to link with libpth... " >&6; }
+if ${ac_cv_libpth_libs+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libpth-prefix was given.
+if test "${with_libpth_prefix+set}" = set; then :
+  withval=$with_libpth_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
+      fi
+    fi
+
+fi
+
+      LIBPTH=
+  LTLIBPTH=
+  INCPTH=
+  LIBPTH_PREFIX=
+      HAVE_LIBPTH=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='pth '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                                LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a"
+              else
+                                                LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = 'pth'; then
+                  LIBPTH_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = 'pth'; then
+                  LIBPTH_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBPTH="${LIBPTH}${LIBPTH:+ }$dep"
+                    LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name"
+            LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBPTH="${LIBPTH}${LIBPTH:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBPTH="${LIBPTH}${LIBPTH:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+    ac_cv_libpth_libs="$LIBPTH"
+    ac_cv_libpth_ltlibs="$LTLIBPTH"
+    ac_cv_libpth_cppflags="$INCPTH"
+    ac_cv_libpth_prefix="$LIBPTH_PREFIX"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5
+$as_echo "$ac_cv_libpth_libs" >&6; }
+  LIBPTH="$ac_cv_libpth_libs"
+  LTLIBPTH="$ac_cv_libpth_ltlibs"
+  INCPTH="$ac_cv_libpth_cppflags"
+  LIBPTH_PREFIX="$ac_cv_libpth_prefix"
+
+  for element in $INCPTH; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+
+
+      HAVE_LIBPTH=yes
+
+
+
+      gl_have_pth=
+      gl_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBPTH"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pth.h>
+int
+main ()
+{
+pth_self();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_have_pth=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$gl_save_LIBS"
+      if test -n "$gl_have_pth"; then
+        gl_threads_api=pth
+        LIBTHREAD="$LIBPTH"
+        LTLIBTHREAD="$LTLIBPTH"
+        LIBMULTITHREAD="$LIBTHREAD"
+        LTLIBMULTITHREAD="$LTLIBTHREAD"
+
+$as_echo "#define USE_PTH_THREADS 1" >>confdefs.h
+
+        if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+
+$as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h
+
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      else
+        CPPFLAGS="$gl_save_CPPFLAGS"
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      case "$gl_use_threads" in
+        yes | windows | win32) # The 'win32' is for backward compatibility.
+          if { case "$host_os" in
+                 mingw*) true;;
+                 *) false;;
+               esac
+             }; then
+            gl_threads_api=windows
+
+$as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h
+
+          fi
+          ;;
+      esac
+    fi
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5
+$as_echo_n "checking for multithread API to use... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5
+$as_echo "$gl_threads_api" >&6; }
+
+
+
+
+
+
+
+
+
+
+
+
+  GNULIB_BTOWC=0;
+  GNULIB_WCTOB=0;
+  GNULIB_MBSINIT=0;
+  GNULIB_MBRTOWC=0;
+  GNULIB_MBRLEN=0;
+  GNULIB_MBSRTOWCS=0;
+  GNULIB_MBSNRTOWCS=0;
+  GNULIB_WCRTOMB=0;
+  GNULIB_WCSRTOMBS=0;
+  GNULIB_WCSNRTOMBS=0;
+  GNULIB_WCWIDTH=0;
+  GNULIB_WMEMCHR=0;
+  GNULIB_WMEMCMP=0;
+  GNULIB_WMEMCPY=0;
+  GNULIB_WMEMMOVE=0;
+  GNULIB_WMEMSET=0;
+  GNULIB_WCSLEN=0;
+  GNULIB_WCSNLEN=0;
+  GNULIB_WCSCPY=0;
+  GNULIB_WCPCPY=0;
+  GNULIB_WCSNCPY=0;
+  GNULIB_WCPNCPY=0;
+  GNULIB_WCSCAT=0;
+  GNULIB_WCSNCAT=0;
+  GNULIB_WCSCMP=0;
+  GNULIB_WCSNCMP=0;
+  GNULIB_WCSCASECMP=0;
+  GNULIB_WCSNCASECMP=0;
+  GNULIB_WCSCOLL=0;
+  GNULIB_WCSXFRM=0;
+  GNULIB_WCSDUP=0;
+  GNULIB_WCSCHR=0;
+  GNULIB_WCSRCHR=0;
+  GNULIB_WCSCSPN=0;
+  GNULIB_WCSSPN=0;
+  GNULIB_WCSPBRK=0;
+  GNULIB_WCSSTR=0;
+  GNULIB_WCSTOK=0;
+  GNULIB_WCSWIDTH=0;
+    HAVE_BTOWC=1;
+  HAVE_MBSINIT=1;
+  HAVE_MBRTOWC=1;
+  HAVE_MBRLEN=1;
+  HAVE_MBSRTOWCS=1;
+  HAVE_MBSNRTOWCS=1;
+  HAVE_WCRTOMB=1;
+  HAVE_WCSRTOMBS=1;
+  HAVE_WCSNRTOMBS=1;
+  HAVE_WMEMCHR=1;
+  HAVE_WMEMCMP=1;
+  HAVE_WMEMCPY=1;
+  HAVE_WMEMMOVE=1;
+  HAVE_WMEMSET=1;
+  HAVE_WCSLEN=1;
+  HAVE_WCSNLEN=1;
+  HAVE_WCSCPY=1;
+  HAVE_WCPCPY=1;
+  HAVE_WCSNCPY=1;
+  HAVE_WCPNCPY=1;
+  HAVE_WCSCAT=1;
+  HAVE_WCSNCAT=1;
+  HAVE_WCSCMP=1;
+  HAVE_WCSNCMP=1;
+  HAVE_WCSCASECMP=1;
+  HAVE_WCSNCASECMP=1;
+  HAVE_WCSCOLL=1;
+  HAVE_WCSXFRM=1;
+  HAVE_WCSDUP=1;
+  HAVE_WCSCHR=1;
+  HAVE_WCSRCHR=1;
+  HAVE_WCSCSPN=1;
+  HAVE_WCSSPN=1;
+  HAVE_WCSPBRK=1;
+  HAVE_WCSSTR=1;
+  HAVE_WCSTOK=1;
+  HAVE_WCSWIDTH=1;
+  HAVE_DECL_WCTOB=1;
+  HAVE_DECL_WCWIDTH=1;
+  REPLACE_MBSTATE_T=0;
+  REPLACE_BTOWC=0;
+  REPLACE_WCTOB=0;
+  REPLACE_MBSINIT=0;
+  REPLACE_MBRTOWC=0;
+  REPLACE_MBRLEN=0;
+  REPLACE_MBSRTOWCS=0;
+  REPLACE_MBSNRTOWCS=0;
+  REPLACE_WCRTOMB=0;
+  REPLACE_WCSRTOMBS=0;
+  REPLACE_WCSNRTOMBS=0;
+  REPLACE_WCWIDTH=0;
+  REPLACE_WCSWIDTH=0;
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5
+$as_echo_n "checking for mbstate_t... " >&6; }
+if ${ac_cv_type_mbstate_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int
+main ()
+{
+mbstate_t x; return sizeof x;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_mbstate_t=yes
+else
+  ac_cv_type_mbstate_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5
+$as_echo "$ac_cv_type_mbstate_t" >&6; }
+   if test $ac_cv_type_mbstate_t = yes; then
+
+$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h
+
+   else
+
+$as_echo "#define mbstate_t int" >>confdefs.h
+
+   fi
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5
+$as_echo_n "checking for a traditional japanese locale... " >&6; }
+if ${gt_cv_locale_ja+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether MB_CUR_MAX is > 1.  This excludes the dysfunctional locales
+     on Cygwin 1.5.x.  */
+  if (MB_CUR_MAX == 1)
+    return 1;
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding (except on MirBSD).  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  return 0;
+}
+
+_ACEOF
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Note that on native Windows, the Japanese locale is
+          # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+          # cannot use it here.
+          gt_cv_locale_ja=none
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the AIX locale name.
+          if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_ja=ja_JP
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_ja=ja_JP.EUC-JP
+            else
+              # Test for the HP-UX, OSF/1, NetBSD locale name.
+              if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_ja=ja_JP.eucJP
+              else
+                # Test for the IRIX, FreeBSD locale name.
+                if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                  gt_cv_locale_ja=ja_JP.EUC
+                else
+                  # Test for the Solaris 7 locale name.
+                  if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                    gt_cv_locale_ja=ja
+                  else
+                    # Special test for NetBSD 1.6.
+                    if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+                      gt_cv_locale_ja=ja_JP.eucJP
+                    else
+                      # None found.
+                      gt_cv_locale_ja=none
+                    fi
+                  fi
+                fi
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5
+$as_echo "$gt_cv_locale_ja" >&6; }
+  LOCALE_JA=$gt_cv_locale_ja
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5
+$as_echo_n "checking for a transitional chinese locale... " >&6; }
+if ${gt_cv_locale_zh_CN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding (except on MirBSD).  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  /* Check whether a typical GB18030 multibyte sequence is recognized as a
+     single wide character.  This excludes the GB2312 and GBK encodings.  */
+  if (mblen ("\203\062\332\066", 5) != 4)
+    return 1;
+  return 0;
+}
+
+_ACEOF
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the hypothetical native Windows locale name.
+          if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_zh_CN=Chinese_China.54936
+          else
+            # None found.
+            gt_cv_locale_zh_CN=none
+          fi
+          ;;
+        solaris2.8)
+          # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+          # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+          # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+          gt_cv_locale_zh_CN=none
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the locale name without encoding suffix.
+          if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_zh_CN=zh_CN
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_zh_CN=zh_CN.GB18030
+            else
+              # None found.
+              gt_cv_locale_zh_CN=none
+            fi
+          fi
+          ;;
+      esac
+    else
+      # If there was a link error, due to mblen(), the system is so old that
+      # it certainly doesn't have a chinese locale.
+      gt_cv_locale_zh_CN=none
+    fi
+    rm -fr conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5
+$as_echo "$gt_cv_locale_zh_CN" >&6; }
+  LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+$as_echo_n "checking for a french Unicode locale... " >&6; }
+if ${gt_cv_locale_fr_utf8+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
+     imitates locale dependent behaviour by looking at the environment
+     variables, and all locales use the UTF-8 encoding.  */
+#if !(defined __BEOS__ || defined __HAIKU__)
+  /* Check whether the given locale name is recognized by the system.  */
+# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+# else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.  */
+# if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+      return 1;
+  }
+# endif
+# ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+  /* Check whether in the abbreviation of the second month, the second
+     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+     two bytes long, with UTF-8 encoding.  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%b", &t) < 4
+      || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+    return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
+  /* Check whether the decimal separator is a comma.
+     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+     are nl_langinfo(RADIXCHAR) are both ".".  */
+  if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+  return 0;
+}
+
+_ACEOF
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the hypothetical native Windows locale name.
+          if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr_utf8=French_France.65001
+          else
+            # None found.
+            gt_cv_locale_fr_utf8=none
+          fi
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the usual locale name.
+          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr_utf8=fr_FR
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_fr_utf8=fr_FR.UTF-8
+            else
+              # Test for the Solaris 7 locale name.
+              if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_fr_utf8=fr.UTF-8
+              else
+                # None found.
+                gt_cv_locale_fr_utf8=none
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+$as_echo "$gt_cv_locale_fr_utf8" >&6; }
+  LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+  GNULIB_FFSL=0;
+  GNULIB_FFSLL=0;
+  GNULIB_MEMCHR=0;
+  GNULIB_MEMMEM=0;
+  GNULIB_MEMPCPY=0;
+  GNULIB_MEMRCHR=0;
+  GNULIB_RAWMEMCHR=0;
+  GNULIB_STPCPY=0;
+  GNULIB_STPNCPY=0;
+  GNULIB_STRCHRNUL=0;
+  GNULIB_STRDUP=0;
+  GNULIB_STRNCAT=0;
+  GNULIB_STRNDUP=0;
+  GNULIB_STRNLEN=0;
+  GNULIB_STRPBRK=0;
+  GNULIB_STRSEP=0;
+  GNULIB_STRSTR=0;
+  GNULIB_STRCASESTR=0;
+  GNULIB_STRTOK_R=0;
+  GNULIB_MBSLEN=0;
+  GNULIB_MBSNLEN=0;
+  GNULIB_MBSCHR=0;
+  GNULIB_MBSRCHR=0;
+  GNULIB_MBSSTR=0;
+  GNULIB_MBSCASECMP=0;
+  GNULIB_MBSNCASECMP=0;
+  GNULIB_MBSPCASECMP=0;
+  GNULIB_MBSCASESTR=0;
+  GNULIB_MBSCSPN=0;
+  GNULIB_MBSPBRK=0;
+  GNULIB_MBSSPN=0;
+  GNULIB_MBSSEP=0;
+  GNULIB_MBSTOK_R=0;
+  GNULIB_STRERROR=0;
+  GNULIB_STRERROR_R=0;
+  GNULIB_STRSIGNAL=0;
+  GNULIB_STRVERSCMP=0;
+  HAVE_MBSLEN=0;
+    HAVE_FFSL=1;
+  HAVE_FFSLL=1;
+  HAVE_MEMCHR=1;
+  HAVE_DECL_MEMMEM=1;
+  HAVE_MEMPCPY=1;
+  HAVE_DECL_MEMRCHR=1;
+  HAVE_RAWMEMCHR=1;
+  HAVE_STPCPY=1;
+  HAVE_STPNCPY=1;
+  HAVE_STRCHRNUL=1;
+  HAVE_DECL_STRDUP=1;
+  HAVE_DECL_STRNDUP=1;
+  HAVE_DECL_STRNLEN=1;
+  HAVE_STRPBRK=1;
+  HAVE_STRSEP=1;
+  HAVE_STRCASESTR=1;
+  HAVE_DECL_STRTOK_R=1;
+  HAVE_DECL_STRERROR_R=1;
+  HAVE_DECL_STRSIGNAL=1;
+  HAVE_STRVERSCMP=1;
+  REPLACE_MEMCHR=0;
+  REPLACE_MEMMEM=0;
+  REPLACE_STPNCPY=0;
+  REPLACE_STRDUP=0;
+  REPLACE_STRSTR=0;
+  REPLACE_STRCASESTR=0;
+  REPLACE_STRCHRNUL=0;
+  REPLACE_STRERROR=0;
+  REPLACE_STRERROR_R=0;
+  REPLACE_STRNCAT=0;
+  REPLACE_STRNDUP=0;
+  REPLACE_STRNLEN=0;
+  REPLACE_STRSIGNAL=0;
+  REPLACE_STRTOK_R=0;
+  UNDEFINE_STRTOK_R=0;
+
+
+
+
+
+
+
+
+
+
+
+  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+  # irrelevant for anonymous mappings.
+  ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+if test "x$ac_cv_func_mmap" = xyes; then :
+  gl_have_mmap=yes
+else
+  gl_have_mmap=no
+fi
+
+
+  # Try to allow MAP_ANONYMOUS.
+  gl_have_mmap_anonymous=no
+  if test $gl_have_mmap = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5
+$as_echo_n "checking for MAP_ANONYMOUS... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+    I cannot identify this map
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "I cannot identify this map" >/dev/null 2>&1; then :
+  gl_have_mmap_anonymous=yes
+fi
+rm -f conftest*
+
+    if test $gl_have_mmap_anonymous != yes; then
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/mman.h>
+#ifdef MAP_ANON
+    I cannot identify this map
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "I cannot identify this map" >/dev/null 2>&1; then :
+
+$as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h
+
+         gl_have_mmap_anonymous=yes
+fi
+rm -f conftest*
+
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5
+$as_echo "$gl_have_mmap_anonymous" >&6; }
+    if test $gl_have_mmap_anonymous = yes; then
+
+$as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h
+
+    fi
+  fi
+
+
+
+
+
+
+  if test $HAVE_MEMCHR = 1; then
+    # Detect platform-specific bugs in some versions of glibc:
+    # memchr should not dereference anything with length 0
+    #   http://bugzilla.redhat.com/499689
+    # memchr should not dereference overestimated length after a match
+    #   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   http://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # Assume that memchr works on platforms that lack mprotect.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5
+$as_echo_n "checking whether memchr works... " >&6; }
+if ${gl_cv_func_memchr_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+         gl_cv_func_memchr_works="guessing no"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+#  define MAP_FILE 0
+# endif
+#endif
+
+int
+main ()
+{
+
+  int result = 0;
+  char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+  const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+  const int flags = MAP_FILE | MAP_PRIVATE;
+  int fd = open ("/dev/zero", O_RDONLY, 0666);
+  if (fd >= 0)
+# endif
+    {
+      int pagesize = getpagesize ();
+      char *two_pages =
+        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                       flags, fd, 0);
+      if (two_pages != (char *)(-1)
+          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+        fence = two_pages + pagesize;
+    }
+#endif
+  if (fence)
+    {
+      if (memchr (fence, 0, 0))
+        result |= 1;
+      strcpy (fence - 9, "12345678");
+      if (memchr (fence - 9, 0, 79) != fence - 1)
+        result |= 2;
+      if (memchr (fence - 1, 0, 3) != fence - 1)
+        result |= 4;
+    }
+  return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_memchr_works=yes
+else
+  gl_cv_func_memchr_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5
+$as_echo "$gl_cv_func_memchr_works" >&6; }
+    if test "$gl_cv_func_memchr_works" != yes; then
+      REPLACE_MEMCHR=1
+    fi
+  fi
+
+
+
+ac_fn_c_check_decl "$LINENO" "obstack_printf" "ac_cv_have_decl_obstack_printf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_obstack_printf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_OBSTACK_PRINTF $ac_have_decl
+_ACEOF
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5
+$as_echo_n "checking for promoted mode_t type... " >&6; }
+if ${gl_cv_promoted_mode_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+int
+main ()
+{
+typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_promoted_mode_t='int'
+else
+  gl_cv_promoted_mode_t='mode_t'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5
+$as_echo "$gl_cv_promoted_mode_t" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define PROMOTED_MODE_T $gl_cv_promoted_mode_t
+_ACEOF
+
+
+
+
+
+     REPLACE_STRERROR_0=0
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5
+$as_echo_n "checking whether strerror(0) succeeds... " >&6; }
+if ${gl_cv_func_strerror_0_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                 # Guess yes on glibc systems.
+         *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
+                 # If we don't know, assume the worst.
+         *)      gl_cv_func_strerror_0_works="guessing no" ;;
+       esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+           #include <errno.h>
+
+int
+main ()
+{
+int result = 0;
+           char *str;
+           errno = 0;
+           str = strerror (0);
+           if (!*str) result |= 1;
+           if (errno) result |= 2;
+           if (strstr (str, "nknown") || strstr (str, "ndefined"))
+             result |= 4;
+           return result;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_strerror_0_works=yes
+else
+  gl_cv_func_strerror_0_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5
+$as_echo "$gl_cv_func_strerror_0_works" >&6; }
+  case "$gl_cv_func_strerror_0_works" in
+    *yes) ;;
+    *)
+      REPLACE_STRERROR_0=1
+
+$as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_strerror_r = yes; then
+    if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror_r with POSIX signature" >&5
+$as_echo_n "checking for strerror_r with POSIX signature... " >&6; }
+if ${gl_cv_func_strerror_r_posix_signature+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+                int strerror_r (int, char *, size_t);
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_strerror_r_posix_signature=yes
+else
+  gl_cv_func_strerror_r_posix_signature=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_posix_signature" >&5
+$as_echo "$gl_cv_func_strerror_r_posix_signature" >&6; }
+      if test $gl_cv_func_strerror_r_posix_signature = yes; then
+                                                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r works" >&5
+$as_echo_n "checking whether strerror_r works... " >&6; }
+if ${gl_cv_func_strerror_r_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+
+              case "$host_os" in
+                       # Guess no on AIX.
+                aix*)  gl_cv_func_strerror_r_works="guessing no";;
+                       # Guess no on HP-UX.
+                hpux*) gl_cv_func_strerror_r_works="guessing no";;
+                       # Guess no on BSD variants.
+                *bsd*)  gl_cv_func_strerror_r_works="guessing no";;
+                       # Guess yes otherwise.
+                *)     gl_cv_func_strerror_r_works="guessing yes";;
+              esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <errno.h>
+                  #include <string.h>
+
+int
+main ()
+{
+int result = 0;
+                  char buf[79];
+                  if (strerror_r (EACCES, buf, 0) < 0)
+                    result |= 1;
+                  errno = 0;
+                  if (strerror_r (EACCES, buf, sizeof buf) != 0)
+                    result |= 2;
+                  strcpy (buf, "Unknown");
+                  if (strerror_r (0, buf, sizeof buf) != 0)
+                    result |= 4;
+                  if (errno)
+                    result |= 8;
+                  if (strstr (buf, "nknown") || strstr (buf, "ndefined"))
+                    result |= 0x10;
+                  errno = 0;
+                  *buf = 0;
+                  if (strerror_r (-3, buf, sizeof buf) < 0)
+                    result |= 0x20;
+                  if (errno)
+                    result |= 0x40;
+                  if (!*buf)
+                    result |= 0x80;
+                  return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_strerror_r_works=yes
+else
+  gl_cv_func_strerror_r_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5
+$as_echo "$gl_cv_func_strerror_r_works" >&6; }
+      else
+
+                        if test $ac_cv_func___xpg_strerror_r = yes; then
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __xpg_strerror_r works" >&5
+$as_echo_n "checking whether __xpg_strerror_r works... " >&6; }
+if ${gl_cv_func_strerror_r_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+                                  gl_cv_func_strerror_r_works="guessing no"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <errno.h>
+                    #include <string.h>
+                    extern
+                    #ifdef __cplusplus
+                    "C"
+                    #endif
+                    int __xpg_strerror_r(int, char *, size_t);
+
+int
+main ()
+{
+int result = 0;
+                    char buf[256] = "^";
+                    char copy[256];
+                    char *str = strerror (-1);
+                    strcpy (copy, str);
+                    if (__xpg_strerror_r (-2, buf, 1) == 0)
+                      result |= 1;
+                    if (*buf)
+                      result |= 2;
+                    __xpg_strerror_r (-2, buf, 256);
+                    if (strcmp (str, copy))
+                      result |= 4;
+                    return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_strerror_r_works=yes
+else
+  gl_cv_func_strerror_r_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5
+$as_echo "$gl_cv_func_strerror_r_works" >&6; }
+        fi
+      fi
+    fi
+  fi
+
+ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strerror_r" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R $ac_have_decl
+_ACEOF
+
+
+
+
+
+
+
+
+  if test $ac_cv_have_decl_strerror_r = no; then
+    HAVE_DECL_STRERROR_R=0
+  fi
+
+  if test $ac_cv_func_strerror_r = yes; then
+    if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+      if test $gl_cv_func_strerror_r_posix_signature = yes; then
+        case "$gl_cv_func_strerror_r_works" in
+                    *no) REPLACE_STRERROR_R=1 ;;
+        esac
+      else
+                REPLACE_STRERROR_R=1
+      fi
+    else
+                  REPLACE_STRERROR_R=1
+    fi
+  fi
+
+
+
+
+  GNULIB_POSIX_SPAWN=0;
+  GNULIB_POSIX_SPAWNP=0;
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0;
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0;
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0;
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0;
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0;
+  GNULIB_POSIX_SPAWNATTR_INIT=0;
+  GNULIB_POSIX_SPAWNATTR_GETFLAGS=0;
+  GNULIB_POSIX_SPAWNATTR_SETFLAGS=0;
+  GNULIB_POSIX_SPAWNATTR_GETPGROUP=0;
+  GNULIB_POSIX_SPAWNATTR_SETPGROUP=0;
+  GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0;
+  GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0;
+  GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0;
+  GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0;
+  GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0;
+  GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0;
+  GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0;
+  GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0;
+  GNULIB_POSIX_SPAWNATTR_DESTROY=0;
+    HAVE_POSIX_SPAWN=1;
+  HAVE_POSIX_SPAWNATTR_T=1;
+  HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1;
+
+  REPLACE_POSIX_SPAWN=0;
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0;
+
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0;
+
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0;
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_posix_spawn != yes; then
+    HAVE_POSIX_SPAWN=0
+  fi
+
+
+
+
+                                      if test $ac_cv_func_posix_spawn = yes; then
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn works" >&5
+$as_echo_n "checking whether posix_spawn works... " >&6; }
+if ${gl_cv_func_posix_spawn_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test $cross_compiling = no; then
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <spawn.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
 #include <sys/wait.h>
+
+extern char **environ;
+
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+#ifndef WTERMSIG
+# define WTERMSIG(x) ((x) & 0x7f)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(x) (WTERMSIG (x) == 0)
+#endif
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(x) (((x) >> 8) & 0xff)
+#endif
+
+#define CHILD_PROGRAM_FILENAME "/non/exist/ent"
+
+static int
+fd_safer (int fd)
+{
+  if (0 <= fd && fd <= 2)
+    {
+      int f = fd_safer (dup (fd));
+      int e = errno;
+      close (fd);
+      errno = e;
+      fd = f;
+    }
+
+  return fd;
+}
+
+int
+main ()
+{
+  char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL };
+  int ofd[2];
+  sigset_t blocked_signals;
+  sigset_t fatal_signal_set;
+  posix_spawn_file_actions_t actions;
+  bool actions_allocated;
+  posix_spawnattr_t attrs;
+  bool attrs_allocated;
+  int err;
+  pid_t child;
+  int status;
+  int exitstatus;
+
+  setvbuf (stdout, NULL, _IOFBF, 0);
+  puts ("This should be seen only once.");
+  if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0)
+    {
+      perror ("cannot create pipe");
+      exit (1);
+    }
+  sigprocmask (SIG_SETMASK, NULL, &blocked_signals);
+  sigemptyset (&fatal_signal_set);
+  sigaddset (&fatal_signal_set, SIGINT);
+  sigaddset (&fatal_signal_set, SIGTERM);
+  sigaddset (&fatal_signal_set, SIGHUP);
+  sigaddset (&fatal_signal_set, SIGPIPE);
+  sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL);
+  actions_allocated = false;
+  attrs_allocated = false;
+  if ((err = posix_spawn_file_actions_init (&actions)) != 0
+      || (actions_allocated = true,
+          (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0
+          || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0
+          || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0
+          || (err = posix_spawnattr_init (&attrs)) != 0
+          || (attrs_allocated = true,
+              (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0
+              || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0)
+          || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0))
+    {
+      if (actions_allocated)
+        posix_spawn_file_actions_destroy (&actions);
+      if (attrs_allocated)
+        posix_spawnattr_destroy (&attrs);
+      sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL);
+      if (err == ENOENT)
+        return 0;
+      else
+        {
+          errno = err;
+          perror ("subprocess failed");
+          exit (1);
+        }
+    }
+  posix_spawn_file_actions_destroy (&actions);
+  posix_spawnattr_destroy (&attrs);
+  sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL);
+  close (ofd[0]);
+  close (ofd[1]);
+  status = 0;
+  while (waitpid (child, &status, 0) != child)
+    ;
+  if (!WIFEXITED (status))
+    {
+      fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status);
+      exit (1);
+    }
+  exitstatus = WEXITSTATUS (status);
+  if (exitstatus != 127)
+    {
+      fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus);
+      exit (1);
+    }
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if test -s conftest$ac_exeext \
+             && ./conftest$ac_exeext > conftest.out \
+             && echo 'This should be seen only once.' > conftest.ok \
+             && cmp conftest.out conftest.ok > /dev/null; then
+            gl_cv_func_posix_spawn_works=yes
+          else
+            gl_cv_func_posix_spawn_works=no
+          fi
+else
+  gl_cv_func_posix_spawn_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       if test $gl_cv_func_posix_spawn_works = yes; then
+         if test "$cross_compiling" = yes; then :
+  { { $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.  */
+
+/* Test whether posix_spawn_file_actions_addopen supports filename arguments
+   that contain special characters such as '*'.  */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <spawn.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+extern char **environ;
+
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+#ifndef WTERMSIG
+# define WTERMSIG(x) ((x) & 0x7f)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(x) (WTERMSIG (x) == 0)
+#endif
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(x) (((x) >> 8) & 0xff)
+#endif
+
+#define CHILD_PROGRAM_FILENAME "conftest"
+#define DATA_FILENAME "conftest%=*#?"
+
+static int
+parent_main (void)
+{
+  FILE *fp;
+  char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL };
+  posix_spawn_file_actions_t actions;
+  bool actions_allocated;
+  int err;
+  pid_t child;
+  int status;
+  int exitstatus;
+
+  /* Create a data file with specific contents.  */
+  fp = fopen (DATA_FILENAME, "wb");
+  if (fp == NULL)
+    {
+      perror ("cannot create data file");
+      return 1;
+    }
+  fwrite ("Halle Potta", 1, 11, fp);
+  if (fflush (fp) || fclose (fp))
+    {
+      perror ("cannot prepare data file");
+      return 2;
+    }
+
+  /* Avoid reading from our stdin, as it could block.  */
+  freopen ("/dev/null", "rb", stdin);
+
+  /* Test whether posix_spawn_file_actions_addopen with this file name
+     actually works, but spawning a child that reads from this file.  */
+  actions_allocated = false;
+  if ((err = posix_spawn_file_actions_init (&actions)) != 0
+      || (actions_allocated = true,
+          (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0
+          || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0))
+    {
+      if (actions_allocated)
+        posix_spawn_file_actions_destroy (&actions);
+      errno = err;
+      perror ("subprocess failed");
+      return 3;
+    }
+  posix_spawn_file_actions_destroy (&actions);
+  status = 0;
+  while (waitpid (child, &status, 0) != child)
+    ;
+  if (!WIFEXITED (status))
+    {
+      fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status);
+      return 4;
+    }
+  exitstatus = WEXITSTATUS (status);
+  if (exitstatus != 0)
+    {
+      fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus);
+      return 5;
+    }
+  return 0;
+}
+
+static int
+child_main (void)
+{
+  char buf[1024];
+
+  /* See if reading from STDIN_FILENO yields the expected contents.  */
+  if (fread (buf, 1, sizeof (buf), stdin) == 11
+      && memcmp (buf, "Halle Potta", 11) == 0)
+    return 0;
+  else
+    return 8;
+}
+
+static void
+cleanup_then_die (int sig)
+{
+  /* Clean up data file.  */
+  unlink (DATA_FILENAME);
+
+  /* Re-raise the signal and die from it.  */
+  signal (sig, SIG_DFL);
+  raise (sig);
+}
+
+int
+main (int argc, char *argv[])
+{
+  int exitstatus;
+
+  if (!(argc > 1 && strcmp (argv[1], "-child") == 0))
+    {
+      /* This is the parent process.  */
+      signal (SIGINT, cleanup_then_die);
+      signal (SIGTERM, cleanup_then_die);
+      #ifdef SIGHUP
+      signal (SIGHUP, cleanup_then_die);
+      #endif
+
+      exitstatus = parent_main ();
+    }
+  else
+    {
+      /* This is the child process.  */
+
+      exitstatus = child_main ();
+    }
+  unlink (DATA_FILENAME);
+  return exitstatus;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  gl_cv_func_posix_spawn_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+       fi
+     else
+       case "$host_os" in
+         aix*) gl_cv_func_posix_spawn_works="guessing no";;
+         *)    gl_cv_func_posix_spawn_works="guessing yes";;
+       esac
+     fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_works" >&5
+$as_echo "$gl_cv_func_posix_spawn_works" >&6; }
+
+    case "$gl_cv_func_posix_spawn_works" in
+      *yes)
+
+$as_echo "#define HAVE_WORKING_POSIX_SPAWN 1" >>confdefs.h
+
+                                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawnattr_setschedpolicy is supported" >&5
+$as_echo_n "checking whether posix_spawnattr_setschedpolicy is supported... " >&6; }
+if ${gl_cv_func_spawnattr_setschedpolicy+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <spawn.h>
+#if POSIX_SPAWN_SETSCHEDULER
+ POSIX scheduling supported
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "POSIX scheduling supported" >/dev/null 2>&1; then :
+  gl_cv_func_spawnattr_setschedpolicy=yes
+else
+  gl_cv_func_spawnattr_setschedpolicy=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_spawnattr_setschedpolicy" >&5
+$as_echo "$gl_cv_func_spawnattr_setschedpolicy" >&6; }
+                                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawnattr_setschedparam is supported" >&5
+$as_echo_n "checking whether posix_spawnattr_setschedparam is supported... " >&6; }
+if ${gl_cv_func_spawnattr_setschedparam+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <spawn.h>
+#if POSIX_SPAWN_SETSCHEDPARAM
+ POSIX scheduling supported
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "POSIX scheduling supported" >/dev/null 2>&1; then :
+  gl_cv_func_spawnattr_setschedparam=yes
+else
+  gl_cv_func_spawnattr_setschedparam=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_spawnattr_setschedparam" >&5
+$as_echo "$gl_cv_func_spawnattr_setschedparam" >&6; }
+        ;;
+      *) REPLACE_POSIX_SPAWN=1 ;;
+    esac
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_cv_func_vfprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # vfprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_vfprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_vfprintf_posix = no; then
+
+
+
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h
+
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h
+
+      for ac_func in nl_langinfo
+do :
+  ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NL_LANGINFO 1
+_ACEOF
+
+fi
+done
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vfprintf.$ac_objext"
+
+  REPLACE_VFPRINTF=1
+
+$as_echo "#define REPLACE_VFPRINTF_POSIX 1" >>confdefs.h
+
+  :
+
+  fi
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+MicrosoftCompiler
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "MicrosoftCompiler" >/dev/null 2>&1; then :
+  gl_asmext='asm'
+     gl_c_asm_opt='-c -Fa'
+
+else
+  gl_asmext='s'
+     gl_c_asm_opt='-S'
+
+fi
+rm -f conftest*
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C symbols are prefixed with underscore at the linker level" >&5
+$as_echo_n "checking whether C symbols are prefixed with underscore at the linker level... " >&6; }
+if ${gl_cv_prog_as_underscore+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.c <<EOF
+#ifdef __cplusplus
+extern "C" int foo (void);
+#endif
+int foo(void) { return 0; }
+EOF
+     # Look for the assembly language name in the .s file.
+     { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } >/dev/null 2>&1
+     if grep _foo conftest.$gl_asmext >/dev/null ; then
+       gl_cv_prog_as_underscore=yes
+     else
+       gl_cv_prog_as_underscore=no
+     fi
+     rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_prog_as_underscore" >&5
+$as_echo "$gl_cv_prog_as_underscore" >&6; }
+  if test $gl_cv_prog_as_underscore = yes; then
+    USER_LABEL_PREFIX=_
+  else
+    USER_LABEL_PREFIX=
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define USER_LABEL_PREFIX $USER_LABEL_PREFIX
+_ACEOF
+
+  ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"'
+
+
+
+  GNULIB_PTHREAD_SIGMASK=0;
+  GNULIB_RAISE=0;
+  GNULIB_SIGNAL_H_SIGPIPE=0;
+  GNULIB_SIGPROCMASK=0;
+  GNULIB_SIGACTION=0;
+    HAVE_POSIX_SIGNALBLOCKING=1;
+  HAVE_PTHREAD_SIGMASK=1;
+  HAVE_RAISE=1;
+  HAVE_SIGSET_T=1;
+  HAVE_SIGINFO_T=1;
+  HAVE_SIGACTION=1;
+  HAVE_STRUCT_SIGACTION_SA_SIGACTION=1;
+
+  HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1;
+
+  HAVE_SIGHANDLER_T=1;
+  REPLACE_PTHREAD_SIGMASK=0;
+  REPLACE_RAISE=0;
+
+
+  ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" "
+      #include <signal.h>
+      /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.  */
+      #include <sys/types.h>
+
+"
+if test "x$ac_cv_type_sigset_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGSET_T 1
+_ACEOF
+
+gl_cv_type_sigset_t=yes
+else
+  gl_cv_type_sigset_t=no
+fi
+
+  if test $gl_cv_type_sigset_t != yes; then
+    HAVE_SIGSET_T=0
+  fi
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if ${ac_cv_c_restrict+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+typedef int * int_ptr;
+	int foo (int_ptr $ac_kw ip) {
+	return ip[0];
+       }
+int
+main ()
+{
+int s[1];
+	int * $ac_kw t = s;
+	t[0] = 0;
+	return foo(t)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     test "$ac_cv_c_restrict" != no && break
+   done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+   *)  cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
+if ${ac_cv_type_uid_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "uid_t" >/dev/null 2>&1; then :
+  ac_cv_type_uid_t=yes
+else
+  ac_cv_type_uid_t=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
+$as_echo "$ac_cv_type_uid_t" >&6; }
+if test $ac_cv_type_uid_t = no; then
+
+$as_echo "#define uid_t int" >>confdefs.h
+
+
+$as_echo "#define gid_t int" >>confdefs.h
+
+fi
+
+
+
+
+
+ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_snprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF $ac_have_decl
+_ACEOF
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if ${ac_cv_header_stdbool_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+             #include <stdbool.h>
+             #ifndef bool
+              "error: bool is not defined"
+             #endif
+             #ifndef false
+              "error: false is not defined"
+             #endif
+             #if false
+              "error: false is not 0"
+             #endif
+             #ifndef true
+              "error: true is not defined"
+             #endif
+             #if true != 1
+              "error: true is not 1"
+             #endif
+             #ifndef __bool_true_false_are_defined
+              "error: __bool_true_false_are_defined is not defined"
+             #endif
+
+             struct s { _Bool s: 1; _Bool t; } s;
+
+             char a[true == 1 ? 1 : -1];
+             char b[false == 0 ? 1 : -1];
+             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+             char d[(bool) 0.5 == true ? 1 : -1];
+             /* See body of main program for 'e'.  */
+             char f[(_Bool) 0.0 == false ? 1 : -1];
+             char g[true];
+             char h[sizeof (_Bool)];
+             char i[sizeof s.t];
+             enum { j = false, k = true, l = false * true, m = true * 256 };
+             /* The following fails for
+                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+             _Bool n[m];
+             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+             /* Catch a bug in an HP-UX C compiler.  See
+                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+              */
+             _Bool q = true;
+             _Bool *pq = &q;
+
+int
+main ()
+{
+
+             bool e = &s;
+             *pq |= q;
+             *pq |= ! q;
+             /* Refer to every declared value, to avoid compiler optimizations.  */
+             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+                     + !m + !n + !o + !p + !q + !pq);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdbool_h=yes
+else
+  ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+   ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+
+
+    REPLACE_NULL=0;
+  HAVE_WCHAR_T=1;
+
+
+
+ac_fn_c_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strdup" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRDUP $ac_have_decl
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_string_h='<'string.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5
+$as_echo_n "checking absolute name of <string.h>... " >&6; }
+if ${gl_cv_next_string_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'string.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5
+$as_echo "$gl_cv_next_string_h" >&6; }
+     fi
+     NEXT_STRING_H=$gl_cv_next_string_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'string.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_string_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive
+
+
+
+
+
+
+    for gl_func in ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul      strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r      strerror_r strsignal strverscmp; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+ac_fn_c_check_decl "$LINENO" "strndup" "ac_cv_have_decl_strndup" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strndup" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNDUP $ac_have_decl
+_ACEOF
+
+
+
+ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strnlen" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNLEN $ac_have_decl
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+  GNULIB_WAITPID=0;
+
+
+
+
+  GNULIB_MKTIME=0;
+  GNULIB_NANOSLEEP=0;
+  GNULIB_STRPTIME=0;
+  GNULIB_TIMEGM=0;
+  GNULIB_TIME_R=0;
+    HAVE_DECL_LOCALTIME_R=1;
+  HAVE_NANOSLEEP=1;
+  HAVE_STRPTIME=1;
+  HAVE_TIMEGM=1;
+        REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;
+  REPLACE_MKTIME=GNULIB_PORTCHECK;
+  REPLACE_NANOSLEEP=GNULIB_PORTCHECK;
+  REPLACE_TIMEGM=GNULIB_PORTCHECK;
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5
+$as_echo_n "checking for struct timespec in <time.h>... " >&6; }
+if ${gl_cv_sys_struct_timespec_in_time_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <time.h>
+
+int
+main ()
+{
+static struct timespec x; x.tv_sec = x.tv_nsec;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_sys_struct_timespec_in_time_h=yes
+else
+  gl_cv_sys_struct_timespec_in_time_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_time_h" >&5
+$as_echo "$gl_cv_sys_struct_timespec_in_time_h" >&6; }
+
+  TIME_H_DEFINES_STRUCT_TIMESPEC=0
+  SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
+  PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
+  if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
+    TIME_H_DEFINES_STRUCT_TIMESPEC=1
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5
+$as_echo_n "checking for struct timespec in <sys/time.h>... " >&6; }
+if ${gl_cv_sys_struct_timespec_in_sys_time_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/time.h>
+
+int
+main ()
+{
+static struct timespec x; x.tv_sec = x.tv_nsec;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_sys_struct_timespec_in_sys_time_h=yes
+else
+  gl_cv_sys_struct_timespec_in_sys_time_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5
+$as_echo "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; }
+    if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then
+      SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5
+$as_echo_n "checking for struct timespec in <pthread.h>... " >&6; }
+if ${gl_cv_sys_struct_timespec_in_pthread_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+
+int
+main ()
+{
+static struct timespec x; x.tv_sec = x.tv_nsec;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_sys_struct_timespec_in_pthread_h=yes
+else
+  gl_cv_sys_struct_timespec_in_pthread_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_pthread_h" >&5
+$as_echo "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; }
+      if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then
+        PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1
+      fi
+    fi
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_time_h='<'time.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <time.h>" >&5
+$as_echo_n "checking absolute name of <time.h>... " >&6; }
+if ${gl_cv_next_time_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <time.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'time.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_time_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5
+$as_echo "$gl_cv_next_time_h" >&6; }
+     fi
+     NEXT_TIME_H=$gl_cv_next_time_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'time.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_time_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+
+
+  if test "$HAVE_LIBUNISTRING" = yes; then
+    LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
+    LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
+    LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
+  fi
+
+ac_fn_c_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_ferror_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fflush_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fputc_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fputs_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fread_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_fwrite_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getchar_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_putc_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_putchar_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default"
+if test "x$ac_cv_have_decl_unsetenv" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_UNSETENV $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_vsnprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VSNPRINTF $ac_have_decl
+_ACEOF
+
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5
+$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
+if ${gl_cv_header_wchar_h_correct_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_wchar_h_correct_inline=yes
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+       #define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+
+_ACEOF
+     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+       mv conftest.$ac_objext conftest1.$ac_objext
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+         #define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int zero (void) { return 0; }
+
+_ACEOF
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+         mv conftest.$ac_objext conftest2.$ac_objext
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
+$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; }
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted." "$LINENO" 5
+  fi
+
+
+
+
+   if false; then
+  GL_COND_LIBTOOL_TRUE=
+  GL_COND_LIBTOOL_FALSE='#'
+else
+  GL_COND_LIBTOOL_TRUE='#'
+  GL_COND_LIBTOOL_FALSE=
+fi
+
+  gl_cond_libtool=false
+  gl_libdeps=
+  gl_ltlibdeps=
+  gl_m4_base='m4'
+
+
+
+
+
+
+
+
+
+  gl_source_base='lib'
+
+
+  if test $ac_cv_func_alloca_works = no; then
+    :
+  fi
+
+  # Define an additional variable used in the Makefile substitution.
+  if test $ac_cv_working_alloca_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5
+$as_echo_n "checking for alloca as a compiler built-in... " >&6; }
+if ${gl_cv_rpl_alloca+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+        Need own alloca
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Need own alloca" >/dev/null 2>&1; then :
+  gl_cv_rpl_alloca=yes
+else
+  gl_cv_rpl_alloca=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5
+$as_echo "$gl_cv_rpl_alloca" >&6; }
+    if test $gl_cv_rpl_alloca = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+      ALLOCA_H=alloca.h
+    else
+                  ALLOCA_H=
+    fi
+  else
+    ALLOCA_H=alloca.h
+  fi
+
+   if test -n "$ALLOCA_H"; then
+  GL_GENERATE_ALLOCA_H_TRUE=
+  GL_GENERATE_ALLOCA_H_FALSE='#'
+else
+  GL_GENERATE_ALLOCA_H_TRUE='#'
+  GL_GENERATE_ALLOCA_H_FALSE=
+fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable assertions" >&5
+$as_echo_n "checking whether to enable assertions... " >&6; }
+  # Check whether --enable-assert was given.
+if test "${enable_assert+set}" = set; then :
+  enableval=$enable_assert; if test "x$enableval" = xno; then :
+
+$as_echo "#define NDEBUG 1" >>confdefs.h
+
+elif test "x$enableval" != xyes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-assert" >&5
+$as_echo "$as_me: WARNING: invalid argument supplied to --enable-assert" >&2;}
+      enable_assert=yes
+fi
+else
+  enable_assert=yes
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_assert" >&5
+$as_echo "$enable_assert" >&6; }
+
+
+
+
+  if test $gl_cv_func_malloc_posix = yes; then
+
+$as_echo "#define HAVE_CALLOC_POSIX 1" >>confdefs.h
+
+  else
+    REPLACE_CALLOC=1
+  fi
+
+  if test $REPLACE_CALLOC = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS calloc.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_CALLOC_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_CALLOC_POSIX 1" >>confdefs.h
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h
+
+
+
+
+
+  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+    REPLACE_CLOSE=1
+  fi
+
+
+
+
+
+  if test $ac_cv_header_sys_socket_h != yes; then
+                    for ac_header in winsock2.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_WINSOCK2_H 1
+_ACEOF
+
+fi
+
+done
+
+  fi
+  if test "$ac_cv_header_winsock2_h" = yes; then
+    HAVE_WINSOCK2_H=1
+    UNISTD_H_HAVE_WINSOCK2_H=1
+    SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+  else
+    HAVE_WINSOCK2_H=0
+  fi
+
+
+    if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then
+                        REPLACE_CLOSE=1
+    fi
+
+
+
+  if test $REPLACE_CLOSE = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS close.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_CLOSE=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_CLOSE 1" >>confdefs.h
+
+
+
+
+  :
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_CLOSE_STREAM 1
+_ACEOF
+
+
+
+  :
+
+
+
+          if test "x$datarootdir" = x; then
+    datarootdir='${datadir}'
+
+  fi
+    if test "x$docdir" = x; then
+    docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+
+  fi
+    if test "x$htmldir" = x; then
+    htmldir='${docdir}'
+
+  fi
+  if test "x$dvidir" = x; then
+    dvidir='${docdir}'
+
+  fi
+  if test "x$pdfdir" = x; then
+    pdfdir='${docdir}'
+
+  fi
+  if test "x$psdir" = x; then
+    psdir='${docdir}'
+
+  fi
+  if test "x$lispdir" = x; then
+    lispdir='${datarootdir}/emacs/site-lisp'
+
+  fi
+  if test "x$localedir" = x; then
+    localedir='${datarootdir}/locale'
+
+  fi
+
+      pkglibexecdir='${libexecdir}/${PACKAGE}'
+
+
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_DIRNAME 1
+_ACEOF
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5
+$as_echo_n "checking whether // is distinct from /... " >&6; }
+if ${gl_cv_double_slash_root+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+   if test x"$cross_compiling" = xyes ; then
+        # When cross-compiling, there is no way to tell whether // is special
+        # short of a list of hosts.  However, the only known hosts to date
+        # that have a distinct // are Apollo DomainOS (too old to port to),
+        # Cygwin, and z/OS.  If anyone knows of another system for which // has
+        # special semantics and is distinct from /, please report it to
+        # <bug-gnulib@gnu.org>.
+        case $host in
+          *-cygwin | i370-ibm-openedition)
+            gl_cv_double_slash_root=yes ;;
+          *)
+            # Be optimistic and assume that / and // are the same when we
+            # don't know.
+            gl_cv_double_slash_root='unknown, assuming no' ;;
+        esac
+      else
+        set x `ls -di / // 2>/dev/null`
+        if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then
+          gl_cv_double_slash_root=no
+        else
+          gl_cv_double_slash_root=yes
+        fi
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5
+$as_echo "$gl_cv_double_slash_root" >&6; }
+  if test "$gl_cv_double_slash_root" = yes; then
+
+$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+$as_echo "#define HAVE_DUP2 1" >>confdefs.h
+
+
+  if test $HAVE_DUP2 = 1; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5
+$as_echo_n "checking whether dup2 works... " >&6; }
+if ${gl_cv_func_dup2_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           mingw*) # on this platform, dup2 always returns 0 for success
+             gl_cv_func_dup2_works="guessing no" ;;
+           cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0
+             gl_cv_func_dup2_works="guessing no" ;;
+           linux*) # On linux between 2008-07-27 and 2009-05-11, dup2 of a
+                   # closed fd may yield -EBADF instead of -1 / errno=EBADF.
+             gl_cv_func_dup2_works="guessing no" ;;
+           freebsd*) # on FreeBSD 6.1, dup2(1,1000000) gives EMFILE, not EBADF.
+             gl_cv_func_dup2_works="guessing no" ;;
+           haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC.
+             gl_cv_func_dup2_works="guessing no" ;;
+           *) gl_cv_func_dup2_works="guessing yes" ;;
+         esac
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+         #include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+int
+main ()
+{
+int result = 0;
+#ifdef FD_CLOEXEC
+            if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1)
+              result |= 1;
+#endif
+            if (dup2 (1, 1) == 0)
+              result |= 2;
+#ifdef FD_CLOEXEC
+            if (fcntl (1, F_GETFD) != FD_CLOEXEC)
+              result |= 4;
+#endif
+            close (0);
+            if (dup2 (0, 0) != -1)
+              result |= 8;
+            /* Many gnulib modules require POSIX conformance of EBADF.  */
+            if (dup2 (2, 1000000) == -1 && errno != EBADF)
+              result |= 16;
+            return result;
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_dup2_works=yes
+else
+  gl_cv_func_dup2_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup2_works" >&5
+$as_echo "$gl_cv_func_dup2_works" >&6; }
+    case "$gl_cv_func_dup2_works" in
+      *yes) ;;
+      *)
+        REPLACE_DUP2=1
+        ;;
+    esac
+  fi
+
+
+  if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext"
+
+
+  fi
+
+
+
+
+
+          GNULIB_DUP2=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_DUP2 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+          GNULIB_ENVIRON=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h
+
+
+
+
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5
+$as_echo_n "checking for error_at_line... " >&6; }
+if ${ac_cv_lib_error_at_line+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <error.h>
+int
+main ()
+{
+error_at_line (0, 0, "", 0, "an error occurred");
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_error_at_line=yes
+else
+  ac_cv_lib_error_at_line=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5
+$as_echo "$ac_cv_lib_error_at_line" >&6; }
+
+  if test $ac_cv_lib_error_at_line = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext"
+
+
+
+  :
+
+  fi
+
+
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format"
+
+
+
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format"
+
+
+
+
+
+  :
+
+
+
+
+
+
+  if test $ac_cv_func_fcntl = no; then
+
+
+
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
+  fi
+
+  else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5
+$as_echo_n "checking whether fcntl handles F_DUPFD correctly... " >&6; }
+if ${gl_cv_func_fcntl_f_dupfd_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  # Guess that it works on glibc systems
+          case $host_os in #((
+            *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";;
+            *)      gl_cv_func_fcntl_f_dupfd_works="guessing no";;
+          esac
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <fcntl.h>
+#include <errno.h>
+
+int
+main ()
+{
+int result = 0;
+      if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
+      if (errno != EINVAL) result |= 2;
+      return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_fcntl_f_dupfd_works=yes
+else
+  gl_cv_func_fcntl_f_dupfd_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_works" >&5
+$as_echo "$gl_cv_func_fcntl_f_dupfd_works" >&6; }
+    case $gl_cv_func_fcntl_f_dupfd_works in
+      *yes) ;;
+      *)
+
+
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
+  fi
+
+
+$as_echo "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h
+ ;;
+    esac
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5
+$as_echo_n "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; }
+if ${gl_cv_func_fcntl_f_dupfd_cloexec+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <fcntl.h>
+#ifndef F_DUPFD_CLOEXEC
+choke me
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __linux__
+/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace
+   it to support the semantics on older kernels that failed with EINVAL.  */
+choke me
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_fcntl_f_dupfd_cloexec=yes
+else
+  gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  gl_cv_func_fcntl_f_dupfd_cloexec=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5
+$as_echo "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; }
+    if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then
+
+
+
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
+  fi
+
+          fi
+  fi
+
+
+  if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_FCNTL=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_fcntl_h='<'fcntl.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5
+$as_echo_n "checking absolute name of <fcntl.h>... " >&6; }
+if ${gl_cv_next_fcntl_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <fcntl.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'fcntl.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_fcntl_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5
+$as_echo "$gl_cv_next_fcntl_h" >&6; }
+     fi
+     NEXT_FCNTL_H=$gl_cv_next_fcntl_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'fcntl.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_fcntl_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+    for gl_func in fcntl openat; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <fcntl.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_FD_SAFER_FLAG 1
+_ACEOF
+
+
+
+
+
+  FLOAT_H=
+  REPLACE_FLOAT_LDBL=0
+  case "$host_os" in
+    aix* | beos* | openbsd* | mirbsd* | irix*)
+      FLOAT_H=float.h
+      ;;
+    freebsd*)
+      case "$host_cpu" in
+        i[34567]86 )
+          FLOAT_H=float.h
+          ;;
+        x86_64 )
+          # On x86_64 systems, the C compiler may still be generating
+          # 32-bit code.
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__ || defined __x86_64__ || defined __amd64__
+             yes
+             #endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+
+else
+  FLOAT_H=float.h
+fi
+rm -f conftest*
+
+          ;;
+      esac
+      ;;
+    linux*)
+      case "$host_cpu" in
+        powerpc*)
+          FLOAT_H=float.h
+          ;;
+      esac
+      ;;
+  esac
+  case "$host_os" in
+    aix* | freebsd* | linux*)
+      if test -n "$FLOAT_H"; then
+        REPLACE_FLOAT_LDBL=1
+      fi
+      ;;
+  esac
+
+    REPLACE_ITOLD=0
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5
+$as_echo_n "checking whether conversion from 'int' to 'long double' works... " >&6; }
+if ${gl_cv_func_itold_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host" in
+           sparc*-*-linux*)
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__ || defined __arch64__
+                yes
+                #endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_func_itold_works="guessing no"
+else
+  gl_cv_func_itold_works="guessing yes"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_itold_works="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int i = -1;
+volatile long double ld;
+int main ()
+{
+  ld += i * 1.0L;
+  if (ld > 0)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_itold_works=yes
+else
+  gl_cv_func_itold_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_itold_works" >&5
+$as_echo "$gl_cv_func_itold_works" >&6; }
+  case "$gl_cv_func_itold_works" in
+    *no)
+      REPLACE_ITOLD=1
+                  FLOAT_H=float.h
+      ;;
+  esac
+
+  if test -n "$FLOAT_H"; then
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_float_h='<'float.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <float.h>" >&5
+$as_echo_n "checking absolute name of <float.h>... " >&6; }
+if ${gl_cv_next_float_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'float.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_float_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5
+$as_echo "$gl_cv_next_float_h" >&6; }
+     fi
+     NEXT_FLOAT_H=$gl_cv_next_float_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'float.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_float_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive
+
+
+
+
+  fi
+
+   if test -n "$FLOAT_H"; then
+  GL_GENERATE_FLOAT_H_TRUE=
+  GL_GENERATE_FLOAT_H_FALSE='#'
+else
+  GL_GENERATE_FLOAT_H_TRUE='#'
+  GL_GENERATE_FLOAT_H_FALSE=
+fi
+
+
+
+  if test $REPLACE_FLOAT_LDBL = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext"
+
+  fi
+  if test $REPLACE_ITOLD = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext"
+
+  fi
+
+
+
+  case "$host_os" in
+    mingw* | pw*)
+            REPLACE_FOPEN=1
+            gl_cv_func_fopen_slash="guessing no"
+      ;;
+    *)
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fopen recognizes a trailing slash" >&5
+$as_echo_n "checking whether fopen recognizes a trailing slash... " >&6; }
+if ${gl_cv_func_fopen_slash+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test "$cross_compiling" = yes; then :
+
+             case "$host_os" in
+               aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*)
+                 gl_cv_func_fopen_slash="guessing no" ;;
+               *)
+                 gl_cv_func_fopen_slash="guessing yes" ;;
+             esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+int main ()
+{
+  return fopen ("conftest.sl/", "w") != NULL;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_fopen_slash=yes
+else
+  gl_cv_func_fopen_slash=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+          rm -f conftest.sl
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fopen_slash" >&5
+$as_echo "$gl_cv_func_fopen_slash" >&6; }
+      ;;
+  esac
+  case "$gl_cv_func_fopen_slash" in
+    *no)
+
+$as_echo "#define FOPEN_TRAILING_SLASH_BUG 1" >>confdefs.h
+
+      REPLACE_FOPEN=1
+      ;;
+  esac
+
+  if test $REPLACE_FOPEN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fopen.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_FOPEN=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FOPEN 1" >>confdefs.h
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_FOPEN_SAFER 1
+_ACEOF
+
+
+
+
+
+  fp_headers='
+#     include <stdio.h>
+#     if HAVE_STDIO_EXT_H
+#      include <stdio_ext.h>
+#     endif
+'
+  ac_fn_c_check_decl "$LINENO" "__fpending" "ac_cv_have_decl___fpending" "$fp_headers
+"
+if test "x$ac_cv_have_decl___fpending" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL___FPENDING $ac_have_decl
+_ACEOF
+
+
+  if test $ac_cv_func___fpending = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fpending.$ac_objext"
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to determine the number of pending output bytes on a stream" >&5
+$as_echo_n "checking how to determine the number of pending output bytes on a stream... " >&6; }
+if ${ac_cv_sys_pending_output_n_bytes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      for ac_expr in                                                    \
+                                                                        \
+          '# glibc2'                                                    \
+          'fp->_IO_write_ptr - fp->_IO_write_base'                      \
+                                                                        \
+          '# traditional Unix'                                          \
+          'fp->_ptr - fp->_base'                                        \
+                                                                        \
+          '# BSD'                                                       \
+          'fp->_p - fp->_bf._base'                                      \
+                                                                        \
+          '# SCO, Unixware'                                             \
+          '(fp->__ptr ? fp->__ptr - fp->__base : 0)'                    \
+                                                                        \
+          '# QNX'                                                       \
+          '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
+                                                                        \
+          '# old glibc?'                                                \
+          'fp->__bufp - fp->__buffer'                                   \
+                                                                        \
+          '# old glibc iostream?'                                       \
+          'fp->_pptr - fp->_pbase'                                      \
+                                                                        \
+          '# emx+gcc'                                                   \
+          'fp->_ptr - fp->_buffer'                                      \
+                                                                        \
+          '# Minix'                                                     \
+          'fp->_ptr - fp->_buf'                                         \
+                                                                        \
+          '# Plan9'                                                     \
+          'fp->wp - fp->buf'                                            \
+                                                                        \
+          '# VMS'                                                       \
+          '(*fp)->_ptr - (*fp)->_base'                                  \
+                                                                        \
+          '# e.g., DGUX R4.11; the info is not available'               \
+          1                                                             \
+          ; do
+
+        # Skip each embedded comment.
+        case "$ac_expr" in '#'*) continue;; esac
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *fp = stdin; (void) ($ac_expr);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  fp_done=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        test "$fp_done" = yes && break
+      done
+
+      ac_cv_sys_pending_output_n_bytes=$ac_expr
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_pending_output_n_bytes" >&5
+$as_echo "$ac_cv_sys_pending_output_n_bytes" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define PENDING_OUTPUT_N_BYTES $ac_cv_sys_pending_output_n_bytes
+_ACEOF
+
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_cv_func_fprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # fprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_fprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_fprintf_posix = no; then
+
+
+
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h
+
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h
+
+      for ac_func in nl_langinfo
+do :
+  ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NL_LANGINFO 1
+_ACEOF
+
+fi
+done
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fprintf.$ac_objext"
+
+  REPLACE_FPRINTF=1
+
+$as_echo "#define REPLACE_FPRINTF_POSIX 1" >>confdefs.h
+
+  :
+
+  fi
+
+
+
+
+
+
+          GNULIB_FPRINTF_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FPRINTF_POSIX 1" >>confdefs.h
+
+
+
+
+
+
+  if test $gl_cv_func_frexp_no_libm = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5
+$as_echo_n "checking whether frexp works... " >&6; }
+if ${gl_cv_func_frexp_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";;
+           *)                        gl_cv_func_frexp_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#if HAVE_ALARM
+# include <unistd.h>
+#endif
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   ICC 10.0 has a bug when optimizing the expression -zero.
+   The expression -DBL_MIN * DBL_MIN does not work when cross-compiling
+   to PowerPC on Mac OS X 10.5.  */
+#if defined __hpux || defined __sgi || defined __ICC
+static double
+compute_minus_zero (void)
+{
+  return -DBL_MIN * DBL_MIN;
+}
+# define minus_zero compute_minus_zero ()
+#else
+double minus_zero = -0.0;
+#endif
+int main()
+{
+  int result = 0;
+  int i;
+  volatile double x;
+  double zero = 0.0;
+#if HAVE_ALARM
+  /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
+     number.  Let the test fail in this case.  */
+  alarm (5);
+#endif
+  /* Test on denormalized numbers.  */
+  for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5)
+    ;
+  if (x > 0.0)
+    {
+      int exp;
+      double y = frexp (x, &exp);
+      /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022.
+         On NetBSD: y = 0.75. Correct: y = 0.5.  */
+      if (y != 0.5)
+        result |= 1;
+    }
+  /* Test on infinite numbers.  */
+  x = 1.0 / zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (y != x)
+      result |= 2;
+  }
+  /* Test on negative zero.  */
+  x = minus_zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (memcmp (&y, &x, sizeof x))
+      result |= 4;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_frexp_works=yes
+else
+  gl_cv_func_frexp_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5
+$as_echo "$gl_cv_func_frexp_works" >&6; }
+
+    case "$gl_cv_func_frexp_works" in
+      *yes) gl_func_frexp_no_libm=yes ;;
+      *)    gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;;
+    esac
+  else
+    gl_func_frexp_no_libm=no
+        REPLACE_FREXP=1
+  fi
+  if test $gl_func_frexp_no_libm = yes; then
+
+$as_echo "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h
+
+  fi
+
+  if test $gl_func_frexp_no_libm != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS frexp.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_FREXP=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FREXP 1" >>confdefs.h
+
+
+
+
+
+
+      ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_frexpl" = xyes; then :
+
+else
+  HAVE_DECL_FREXPL=0
+fi
+
+  if test $HAVE_DECL_FREXPL = 1; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5
+$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_frexpl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             long double x;
+int
+main ()
+{
+int e; return frexpl (x, &e) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_frexpl_no_libm=yes
+else
+  gl_cv_func_frexpl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5
+$as_echo "$gl_cv_func_frexpl_no_libm" >&6; }
+
+    if test $gl_cv_func_frexpl_no_libm = yes; then
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5
+$as_echo_n "checking whether frexpl works... " >&6; }
+if ${gl_cv_func_frexpl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*)
+              gl_cv_func_frexpl_works="guessing no";;
+           *) gl_cv_func_frexpl_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <math.h>
+/* Override the values of <float.h>, like done in float.in.h.  */
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if defined __i386__ && defined __FreeBSD__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+#endif
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+# endif
+#endif
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double frexpl (long double, int *);
+int main()
+{
+  int result = 0;
+  volatile long double x;
+  /* Test on finite numbers that fails on AIX 5.1.  */
+  x = 16.0L;
+  {
+    int exp = -9999;
+    frexpl (x, &exp);
+    if (exp != 5)
+      result |= 1;
+  }
+  /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
+     function returns an invalid (incorrectly normalized) value: it returns
+               y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
+     but the correct result is
+          0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 }  */
+  x = 1.01L;
+  {
+    int exp = -9999;
+    long double y = frexpl (x, &exp);
+    if (!(exp == 1 && y == 0.505L))
+      result |= 2;
+  }
+  /* Test on large finite numbers.  This fails on BeOS at i = 16322, while
+     LDBL_MAX_EXP = 16384.
+     In the loop end test, we test x against Infinity, rather than comparing
+     i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
+      {
+        int exp = -9999;
+        frexpl (x, &exp);
+        if (exp != i)
+          {
+            result |= 4;
+            break;
+          }
+      }
+  }
+  /* Test on denormalized numbers.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+      ;
+    if (x > 0.0L)
+      {
+        int exp;
+        long double y = frexpl (x, &exp);
+        /* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
+           exp = -16382, y = 0.5.  On Mac OS X 10.5: exp = -16384, y = 0.5.  */
+        if (exp != LDBL_MIN_EXP - 1)
+          result |= 8;
+      }
+  }
+  /* Test on infinite numbers.  */
+  x = 1.0L / 0.0L;
+  {
+    int exp;
+    long double y = frexpl (x, &exp);
+    if (y != x)
+      result |= 16;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_frexpl_works=yes
+else
+  gl_cv_func_frexpl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5
+$as_echo "$gl_cv_func_frexpl_works" >&6; }
+
+      case "$gl_cv_func_frexpl_works" in
+        *yes) gl_func_frexpl_no_libm=yes ;;
+        *)    gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
+      esac
+    else
+      gl_func_frexpl_no_libm=no
+            REPLACE_FREXPL=1
+    fi
+    if test $gl_func_frexpl_no_libm = yes; then
+
+$as_echo "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h
+
+    fi
+  fi
+
+  if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS frexpl.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_FREXPL=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FREXPL 1" >>confdefs.h
+
+
+
+
+
+
+  if test $ac_cv_func___fseterr = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fseterr.$ac_objext"
+
+  fi
+
+
+
+
+  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+    REPLACE_FSTAT=1
+  fi
+
+
+  if test $WINDOWS_64_BIT_ST_SIZE = 1; then
+    REPLACE_FSTAT=1
+  fi
+
+
+
+  if test $REPLACE_FSTAT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fstat.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_FSTAT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FSTAT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_getdelim = yes; then
+    HAVE_GETDELIM=1
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getdelim function" >&5
+$as_echo_n "checking for working getdelim function... " >&6; }
+if ${gl_cv_func_working_getdelim+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+    if test "$cross_compiling" = yes; then :
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2) && !defined __UCLIBC__
+  Lucky GNU user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky GNU user" >/dev/null 2>&1; then :
+  gl_cv_func_working_getdelim="guessing yes"
+else
+  gl_cv_func_working_getdelim="guessing no"
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#    include <stdio.h>
+#    include <stdlib.h>
+#    include <string.h>
+    int main ()
+    {
+      FILE *in = fopen ("./conftest.data", "r");
+      if (!in)
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getdelim (&line, &siz, '\n', in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 2;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getdelim (&line, &siz, '\n', in) == -1)
+          return 3;
+      }
+      return 0;
+    }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_working_getdelim=yes
+else
+  gl_cv_func_working_getdelim=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_getdelim" >&5
+$as_echo "$gl_cv_func_working_getdelim" >&6; }
+    case "$gl_cv_func_working_getdelim" in
+      *no)
+        REPLACE_GETDELIM=1
+        ;;
+    esac
+  else
+    HAVE_GETDELIM=0
+  fi
+
+  if test $ac_cv_have_decl_getdelim = no; then
+    HAVE_DECL_GETDELIM=0
+  fi
+
+  if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getdelim.$ac_objext"
+
+
+  for ac_func in flockfile funlockfile
+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"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+  ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
+_ACEOF
+
+
+  fi
+
+
+
+
+
+          GNULIB_GETDELIM=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_GETDELIM 1" >>confdefs.h
+
+
+
+
+
+
+  if test $ac_cv_func_getdtablesize != yes; then
+    HAVE_GETDTABLESIZE=0
+  fi
+
+  if test $HAVE_GETDTABLESIZE = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getdtablesize.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_GETDTABLESIZE=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+  gl_getline_needs_run_time_check=no
+  ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline"
+if test "x$ac_cv_func_getline" = xyes; then :
+                   gl_getline_needs_run_time_check=yes
+else
+  am_cv_func_working_getline=no
+fi
+
+  if test $gl_getline_needs_run_time_check = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getline function" >&5
+$as_echo_n "checking for working getline function... " >&6; }
+if ${am_cv_func_working_getline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+    if test "$cross_compiling" = yes; then :
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2) && !defined __UCLIBC__
+  Lucky GNU user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky GNU user" >/dev/null 2>&1; then :
+  am_cv_func_working_getline="guessing yes"
+else
+  am_cv_func_working_getline="guessing no"
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#    include <stdio.h>
+#    include <stdlib.h>
+#    include <string.h>
+    int main ()
+    {
+      FILE *in = fopen ("./conftest.data", "r");
+      if (!in)
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getline (&line, &siz, in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 2;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getline (&line, &siz, in) == -1)
+          return 3;
+      }
+      return 0;
+    }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_working_getline=yes
+else
+  am_cv_func_working_getline=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_working_getline" >&5
+$as_echo "$am_cv_func_working_getline" >&6; }
+  fi
+
+  if test $ac_cv_have_decl_getline = no; then
+    HAVE_DECL_GETLINE=0
+  fi
+
+  case "$am_cv_func_working_getline" in
+    *no)
+                        REPLACE_GETLINE=1
+      ;;
+  esac
+
+  if test $REPLACE_GETLINE = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getline.$ac_objext"
+
+
+  :
+
+  fi
+
+
+
+
+
+          GNULIB_GETLINE=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_GETLINE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+  if test $REPLACE_GETOPT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
+
+
+
+
+        GNULIB_GL_UNISTD_H_GETOPT=1
+  fi
+
+
+
+$as_echo "#define GNULIB_TEST_GETOPT_GNU 1" >>confdefs.h
+
+
+
+
+
+
+
+    REPLACE_GETOPT=0
+    if test -n "$gl_replace_getopt"; then
+      REPLACE_GETOPT=1
+    fi
+
+  if test $REPLACE_GETOPT = 1; then
+
+  GETOPT_H=getopt.h
+
+$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h
+
+
+
+  fi
+
+  if test $REPLACE_GETOPT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
+
+
+
+
+        GNULIB_GL_UNISTD_H_GETOPT=1
+  fi
+
+
+
+
+  # Autoconf 2.61a.99 and earlier don't support linking a file only
+  # in VPATH builds.  But since GNUmakefile is for maintainer use
+  # only, it does not matter if we skip the link with older autoconf.
+  # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH
+  # builds, so use a shell variable to bypass this.
+  GNUmakefile=GNUmakefile
+  ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile"
+
+
+
+
+
+
+  PRIPTR_PREFIX=
+  if test -n "$STDINT_H"; then
+        PRIPTR_PREFIX='"l"'
+  else
+        for glpfx in '' l ll I64; do
+      case $glpfx in
+        '')  gltype1='int';;
+        l)   gltype1='long int';;
+        ll)  gltype1='long long int';;
+        I64) gltype1='__int64';;
+      esac
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+           extern intptr_t foo;
+           extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  PRIPTR_PREFIX='"'$glpfx'"'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      test -n "$PRIPTR_PREFIX" && break
+    done
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5
+$as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; }
+if ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined INT32_MAX && defined INTMAX_MAX
+             #define CONDITION (INT32_MAX < INTMAX_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (int) < sizeof (long long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
+else
+  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
+$as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
+  if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
+    INT32_MAX_LT_INTMAX_MAX=1;
+  else
+    INT32_MAX_LT_INTMAX_MAX=0;
+  fi
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5
+$as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; }
+if ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined INT64_MAX
+             #define CONDITION (INT64_MAX == LONG_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (long long int) == sizeof (long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
+else
+  gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
+$as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
+  if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
+    INT64_MAX_EQ_LONG_MAX=1;
+  else
+    INT64_MAX_EQ_LONG_MAX=0;
+  fi
+
+
+  else
+    INT64_MAX_EQ_LONG_MAX=-1
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5
+$as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; }
+if ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined UINT32_MAX && defined UINTMAX_MAX
+             #define CONDITION (UINT32_MAX < UINTMAX_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
+else
+  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
+$as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
+  if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
+    UINT32_MAX_LT_UINTMAX_MAX=1;
+  else
+    UINT32_MAX_LT_UINTMAX_MAX=0;
+  fi
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5
+$as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; }
+if ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined UINT64_MAX
+             #define CONDITION (UINT64_MAX == ULONG_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
+else
+  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
+$as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
+  if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
+    UINT64_MAX_EQ_ULONG_MAX=1;
+  else
+    UINT64_MAX_EQ_ULONG_MAX=0;
+  fi
+
+
+  else
+    UINT64_MAX_EQ_ULONG_MAX=-1
+  fi
+
+
+
+
+
+
+
+
+
+  # If we replaced any of the underlying isnan* functions, replace
+  # the isnan macro; it undoubtedly suffers from the same flaws.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan macro works" >&5
+$as_echo_n "checking whether isnan macro works... " >&6; }
+  if test $gl_func_isnanf = yes \
+     && test $gl_func_isnand = yes \
+     && test $gl_func_isnanl = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    ISNAN_LIBM=
+        case " $ISNAN_LIBM " in
+      *" $ISNANF_LIBM "*) ;;
+      *) ISNAN_LIBM="$ISNAN_LIBM $ISNANF_LIBM" ;;
+    esac
+        case " $ISNAN_LIBM " in
+      *" $ISNAND_LIBM "*) ;;
+      *) ISNAN_LIBM="$ISNAN_LIBM $ISNAND_LIBM" ;;
+    esac
+        case " $ISNAN_LIBM " in
+      *" $ISNANL_LIBM "*) ;;
+      *) ISNAN_LIBM="$ISNAN_LIBM $ISNANL_LIBM" ;;
+    esac
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+        REPLACE_ISNAN=1
+    ISNAN_LIBM=
+  fi
+
+
+
+
+
+
+
+          GNULIB_ISNAN=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_ISNAN 1" >>confdefs.h
+
+
+
+
+
+  ISNAND_LIBM=
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(double) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnand_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #else
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;
+int
+main ()
+{
+return isnand (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnand_no_libm=yes
+else
+  gl_cv_func_isnand_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_no_libm" >&5
+$as_echo "$gl_cv_func_isnand_no_libm" >&6; }
+
+  if test $gl_cv_func_isnand_no_libm = no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used with libm" >&5
+$as_echo_n "checking whether isnan(double) can be used with libm... " >&6; }
+if ${gl_cv_func_isnand_in_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #elif defined isnan
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;
+int
+main ()
+{
+return isnand (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnand_in_libm=yes
+else
+  gl_cv_func_isnand_in_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_in_libm" >&5
+$as_echo "$gl_cv_func_isnand_in_libm" >&6; }
+
+    if test $gl_cv_func_isnand_in_libm = yes; then
+      ISNAND_LIBM=-lm
+    fi
+  fi
+    if test $gl_cv_func_isnand_no_libm = yes \
+     || test $gl_cv_func_isnand_in_libm = yes; then
+    gl_func_isnand=yes
+  else
+    gl_func_isnand=no
+    HAVE_ISNAND=0
+  fi
+
+
+
+
+
+  if test $HAVE_ISNAND = 0 || test $REPLACE_ISNAN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnand.$ac_objext"
+
+
+
+
+  fi
+
+
+
+
+
+          GNULIB_ISNAND=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_ISNAND 1" >>confdefs.h
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(double) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnand_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #else
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;
+int
+main ()
+{
+return isnand (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnand_no_libm=yes
+else
+  gl_cv_func_isnand_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_no_libm" >&5
+$as_echo "$gl_cv_func_isnand_no_libm" >&6; }
+
+  gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm
+  if test $gl_cv_func_isnand_no_libm = yes; then
+
+$as_echo "#define HAVE_ISNAND_IN_LIBC 1" >>confdefs.h
+
+  fi
+
+  if test $gl_func_isnand_no_libm != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnand.$ac_objext"
+
+
+
+
+  fi
+
+
+  ISNANF_LIBM=
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(float) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnanf_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;
+int
+main ()
+{
+return isnanf (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanf_no_libm=yes
+else
+  gl_cv_func_isnanf_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_no_libm" >&5
+$as_echo "$gl_cv_func_isnanf_no_libm" >&6; }
+
+  if test $gl_cv_func_isnanf_no_libm = no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used with libm" >&5
+$as_echo_n "checking whether isnan(float) can be used with libm... " >&6; }
+if ${gl_cv_func_isnanf_in_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;
+int
+main ()
+{
+return isnanf (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanf_in_libm=yes
+else
+  gl_cv_func_isnanf_in_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_in_libm" >&5
+$as_echo "$gl_cv_func_isnanf_in_libm" >&6; }
+
+    if test $gl_cv_func_isnanf_in_libm = yes; then
+      ISNANF_LIBM=-lm
+    fi
+  fi
+    if test $gl_cv_func_isnanf_no_libm = yes \
+     || test $gl_cv_func_isnanf_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $ISNANF_LIBM"
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5
+$as_echo_n "checking whether isnan(float) works... " >&6; }
+if ${gl_cv_func_isnanf_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no";;
+           *)                gl_cv_func_isnanf_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanf
+# define isnanf(x) __builtin_isnanf ((float)(x))
+#elif defined isnan
+# undef isnanf
+# define isnanf(x) isnan ((float)(x))
+#endif
+/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0.  */
+#ifdef __DECC
+static float
+NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#else
+# define NaN() (0.0f / 0.0f)
+#endif
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; float value; } memory_float;
+int main()
+{
+  int result = 0;
+
+  if (isnanf (1.0f / 0.0f))
+    result |= 1;
+
+  if (!isnanf (NaN ()))
+    result |= 2;
+
+#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
+  /* The isnanf function should be immune against changes in the sign bit and
+     in the mantissa bits.  The xor operation twiddles a bit that can only be
+     a sign bit or a mantissa bit.  */
+  if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0)
+    {
+      memory_float m;
+
+      m.value = NaN ();
+      /* Set the bits below the exponent to 01111...111.  */
+      m.word[0] &= -1U << FLT_EXPBIT0_BIT;
+      m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1;
+      if (!isnanf (m.value))
+        result |= 4;
+    }
+#endif
+
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_isnanf_works=yes
+else
+  gl_cv_func_isnanf_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_works" >&5
+$as_echo "$gl_cv_func_isnanf_works" >&6; }
+
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_isnanf_works" in
+      *yes) gl_func_isnanf=yes ;;
+      *)    gl_func_isnanf=no; ISNANF_LIBM= ;;
+    esac
+  else
+    gl_func_isnanf=no
+  fi
+  if test $gl_func_isnanf != yes; then
+    HAVE_ISNANF=0
+  fi
+
+
+
+
+
+  if test $HAVE_ISNANF = 0 || test $REPLACE_ISNAN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnanf.$ac_objext"
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5
+$as_echo_n "checking where to find the exponent in a 'float'... " >&6; }
+if ${gl_cv_cc_float_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_cc_float_expbit0="word 0 bit 23"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; } memory_float;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (float x)
+{
+  memory_float m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (float) < sizeof (memory_float).  */
+  memset (&m, 0, sizeof (memory_float));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25f);
+  add_to_ored_words (0.5f);
+  add_to_ored_words (1.0f);
+  add_to_ored_words (2.0f);
+  add_to_ored_words (4.0f);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_float_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_float_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5
+$as_echo "$gl_cv_cc_float_expbit0" >&6; }
+  case "$gl_cv_cc_float_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+  fi
+
+
+
+
+
+          GNULIB_ISNANF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_ISNANF 1" >>confdefs.h
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(float) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnanf_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;
+int
+main ()
+{
+return isnanf (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanf_no_libm=yes
+else
+  gl_cv_func_isnanf_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_no_libm" >&5
+$as_echo "$gl_cv_func_isnanf_no_libm" >&6; }
+
+  if test $gl_cv_func_isnanf_no_libm = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5
+$as_echo_n "checking whether isnan(float) works... " >&6; }
+if ${gl_cv_func_isnanf_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no";;
+           *)                gl_cv_func_isnanf_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanf
+# define isnanf(x) __builtin_isnanf ((float)(x))
+#elif defined isnan
+# undef isnanf
+# define isnanf(x) isnan ((float)(x))
+#endif
+/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0.  */
+#ifdef __DECC
+static float
+NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#else
+# define NaN() (0.0f / 0.0f)
+#endif
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; float value; } memory_float;
+int main()
+{
+  int result = 0;
+
+  if (isnanf (1.0f / 0.0f))
+    result |= 1;
+
+  if (!isnanf (NaN ()))
+    result |= 2;
+
+#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
+  /* The isnanf function should be immune against changes in the sign bit and
+     in the mantissa bits.  The xor operation twiddles a bit that can only be
+     a sign bit or a mantissa bit.  */
+  if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0)
+    {
+      memory_float m;
+
+      m.value = NaN ();
+      /* Set the bits below the exponent to 01111...111.  */
+      m.word[0] &= -1U << FLT_EXPBIT0_BIT;
+      m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1;
+      if (!isnanf (m.value))
+        result |= 4;
+    }
+#endif
+
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_isnanf_works=yes
+else
+  gl_cv_func_isnanf_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_works" >&5
+$as_echo "$gl_cv_func_isnanf_works" >&6; }
+
+  fi
+  if test $gl_cv_func_isnanf_no_libm = yes \
+     && { case "$gl_cv_func_isnanf_works" in
+            *yes) true;;
+            *) false;;
+          esac
+        }; then
+    gl_func_isnanf_no_libm=yes
+
+$as_echo "#define HAVE_ISNANF_IN_LIBC 1" >>confdefs.h
+
+  else
+    gl_func_isnanf_no_libm=no
+  fi
+
+  if test $gl_func_isnanf_no_libm != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnanf.$ac_objext"
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5
+$as_echo_n "checking where to find the exponent in a 'float'... " >&6; }
+if ${gl_cv_cc_float_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_cc_float_expbit0="word 0 bit 23"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; } memory_float;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (float x)
+{
+  memory_float m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (float) < sizeof (memory_float).  */
+  memset (&m, 0, sizeof (memory_float));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25f);
+  add_to_ored_words (0.5f);
+  add_to_ored_words (1.0f);
+  add_to_ored_words (2.0f);
+  add_to_ored_words (4.0f);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_float_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_float_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5
+$as_echo "$gl_cv_cc_float_expbit0" >&6; }
+  case "$gl_cv_cc_float_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+  fi
+
+
+  ISNANL_LIBM=
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(long double) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnanl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;
+int
+main ()
+{
+return isnanl (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanl_no_libm=yes
+else
+  gl_cv_func_isnanl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_no_libm" >&5
+$as_echo "$gl_cv_func_isnanl_no_libm" >&6; }
+
+  if test $gl_cv_func_isnanl_no_libm = no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used with libm" >&5
+$as_echo_n "checking whether isnan(long double) can be used with libm... " >&6; }
+if ${gl_cv_func_isnanl_in_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;
+int
+main ()
+{
+return isnanl (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanl_in_libm=yes
+else
+  gl_cv_func_isnanl_in_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_in_libm" >&5
+$as_echo "$gl_cv_func_isnanl_in_libm" >&6; }
+
+    if test $gl_cv_func_isnanl_in_libm = yes; then
+      ISNANL_LIBM=-lm
+    fi
+  fi
+    if test $gl_cv_func_isnanl_no_libm = yes \
+     || test $gl_cv_func_isnanl_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $ISNANL_LIBM"
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5
+$as_echo_n "checking whether isnanl works... " >&6; }
+if ${gl_cv_func_isnanl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_cpu" in
+                                 # Guess no on ia64, x86_64, i386.
+           ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";;
+           *)
+             case "$host_os" in
+               netbsd*) gl_cv_func_isnanl_works="guessing no";;
+               *)       gl_cv_func_isnanl_works="guessing yes";;
+             esac
+             ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanl
+# define isnanl(x) __builtin_isnanl ((long double)(x))
+#elif defined isnan
+# undef isnanl
+# define isnanl(x) isnan ((long double)(x))
+#endif
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; long double value; }
+        memory_long_double;
+/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
+   runtime type conversion.  */
+#ifdef __sgi
+static long double NaNl ()
+{
+  double zero = 0.0;
+  return zero / zero;
+}
+#else
+# define NaNl() (0.0L / 0.0L)
+#endif
+int main ()
+{
+  int result = 0;
+
+  if (!isnanl (NaNl ()))
+    result |= 1;
+
+  {
+    memory_long_double m;
+    unsigned int i;
+
+    /* The isnanl function should be immune against changes in the sign bit and
+       in the mantissa bits.  The xor operation twiddles a bit that can only be
+       a sign bit or a mantissa bit (since the exponent never extends to
+       bit 31).  */
+    m.value = NaNl ();
+    m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
+    for (i = 0; i < NWORDS; i++)
+      m.word[i] |= 1;
+    if (!isnanl (m.value))
+      result |= 1;
+  }
+
+#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16),    \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
+     Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
+       Intel IA-64 Architecture Software Developer's Manual, Volume 1:
+       Application Architecture.
+       Table 5-2 "Floating-Point Register Encodings"
+       Figure 5-6 "Memory to Floating-Point Register Data Translation"
+   */
+  { /* Pseudo-NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 64;
+  }
+#endif
+
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_isnanl_works=yes
+else
+  gl_cv_func_isnanl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_works" >&5
+$as_echo "$gl_cv_func_isnanl_works" >&6; }
+
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_isnanl_works" in
+      *yes) gl_func_isnanl=yes ;;
+      *)    gl_func_isnanl=no; ISNANL_LIBM= ;;
+    esac
+  else
+    gl_func_isnanl=no
+  fi
+  if test $gl_func_isnanl != yes; then
+    HAVE_ISNANL=0
+  fi
+
+
+
+
+
+  if test $HAVE_ISNANL = 0 || test $REPLACE_ISNAN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnanl.$ac_objext"
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5
+$as_echo_n "checking where to find the exponent in a 'long double'... " >&6; }
+if ${gl_cv_cc_long_double_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_long_double_expbit0="unknown"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { long double value; unsigned int word[NWORDS]; }
+        memory_long_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (long double x)
+{
+  memory_long_double m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (long double) < sizeof (memory_long_double).  */
+  memset (&m, 0, sizeof (memory_long_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25L);
+  add_to_ored_words (0.5L);
+  add_to_ored_words (1.0L);
+  add_to_ored_words (2.0L);
+  add_to_ored_words (4.0L);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_long_double_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_long_double_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5
+$as_echo "$gl_cv_cc_long_double_expbit0" >&6; }
+  case "$gl_cv_cc_long_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+  fi
+
+
+
+
+
+          GNULIB_ISNANL=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_ISNANL 1" >>confdefs.h
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(long double) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnanl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;
+int
+main ()
+{
+return isnanl (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanl_no_libm=yes
+else
+  gl_cv_func_isnanl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_no_libm" >&5
+$as_echo "$gl_cv_func_isnanl_no_libm" >&6; }
+
+  gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm
+  if test $gl_func_isnanl_no_libm = yes; then
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5
+$as_echo_n "checking whether isnanl works... " >&6; }
+if ${gl_cv_func_isnanl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_cpu" in
+                                 # Guess no on ia64, x86_64, i386.
+           ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";;
+           *)
+             case "$host_os" in
+               netbsd*) gl_cv_func_isnanl_works="guessing no";;
+               *)       gl_cv_func_isnanl_works="guessing yes";;
+             esac
+             ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanl
+# define isnanl(x) __builtin_isnanl ((long double)(x))
+#elif defined isnan
+# undef isnanl
+# define isnanl(x) isnan ((long double)(x))
+#endif
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; long double value; }
+        memory_long_double;
+/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
+   runtime type conversion.  */
+#ifdef __sgi
+static long double NaNl ()
+{
+  double zero = 0.0;
+  return zero / zero;
+}
+#else
+# define NaNl() (0.0L / 0.0L)
+#endif
+int main ()
+{
+  int result = 0;
+
+  if (!isnanl (NaNl ()))
+    result |= 1;
+
+  {
+    memory_long_double m;
+    unsigned int i;
+
+    /* The isnanl function should be immune against changes in the sign bit and
+       in the mantissa bits.  The xor operation twiddles a bit that can only be
+       a sign bit or a mantissa bit (since the exponent never extends to
+       bit 31).  */
+    m.value = NaNl ();
+    m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
+    for (i = 0; i < NWORDS; i++)
+      m.word[i] |= 1;
+    if (!isnanl (m.value))
+      result |= 1;
+  }
+
+#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16),    \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
+     Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
+       Intel IA-64 Architecture Software Developer's Manual, Volume 1:
+       Application Architecture.
+       Table 5-2 "Floating-Point Register Encodings"
+       Figure 5-6 "Memory to Floating-Point Register Data Translation"
+   */
+  { /* Pseudo-NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 64;
+  }
+#endif
+
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_isnanl_works=yes
+else
+  gl_cv_func_isnanl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_works" >&5
+$as_echo "$gl_cv_func_isnanl_works" >&6; }
+
+    case "$gl_cv_func_isnanl_works" in
+      *yes) ;;
+      *)    gl_func_isnanl_no_libm=no ;;
+    esac
+  fi
+  if test $gl_func_isnanl_no_libm = yes; then
+
+$as_echo "#define HAVE_ISNANL_IN_LIBC 1" >>confdefs.h
+
+  fi
+
+  if test $gl_func_isnanl_no_libm != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnanl.$ac_objext"
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5
+$as_echo_n "checking where to find the exponent in a 'long double'... " >&6; }
+if ${gl_cv_cc_long_double_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_long_double_expbit0="unknown"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { long double value; unsigned int word[NWORDS]; }
+        memory_long_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (long double x)
+{
+  memory_long_double m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (long double) < sizeof (memory_long_double).  */
+  memset (&m, 0, sizeof (memory_long_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25L);
+  add_to_ored_words (0.5L);
+  add_to_ored_words (1.0L);
+  add_to_ored_words (2.0L);
+  add_to_ored_words (4.0L);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_long_double_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_long_double_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5
+$as_echo "$gl_cv_cc_long_double_expbit0" >&6; }
+  case "$gl_cv_cc_long_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+  fi
+
+
+
+
+
+  ac_fn_c_check_decl "$LINENO" "iswblank" "ac_cv_have_decl_iswblank" "
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+
+"
+if test "x$ac_cv_have_decl_iswblank" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ISWBLANK $ac_have_decl
+_ACEOF
+
+  if test $ac_cv_func_iswblank = no; then
+    HAVE_ISWBLANK=0
+    if test $ac_cv_have_decl_iswblank = yes; then
+      REPLACE_ISWBLANK=1
+    fi
+  fi
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+        :
+  else
+    if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then
+            :
+    fi
+  fi
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+    :
+  else
+    if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS iswblank.$ac_objext"
+
+    fi
+  fi
+
+
+
+
+
+          GNULIB_ISWBLANK=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_ISWBLANK 1" >>confdefs.h
+
+
+
+  # You need to invoke gt_JAVACOMP yourself, possibly with arguments.
+  ac_config_files="$ac_config_files javacomp.sh:build-aux/javacomp.sh.in"
+
+  # You need to invoke gt_JAVAEXEC yourself, possibly with arguments.
+  ac_config_files="$ac_config_files javaexec.sh:build-aux/javaexec.sh.in"
+
+
+
+
+  LDEXP_LIBM=
+  if test $gl_cv_func_ldexp_no_libm = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexp() can be used with libm" >&5
+$as_echo_n "checking whether ldexp() can be used with libm... " >&6; }
+if ${gl_cv_func_ldexp_in_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+        save_LIBS="$LIBS"
+        LIBS="$LIBS -lm"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __NO_MATH_INLINES
+                             # define __NO_MATH_INLINES 1 /* for glibc */
+                             #endif
+                             #include <math.h>
+                             double (*funcptr) (double, int) = ldexp;
+                             double x;
+int
+main ()
+{
+return ldexp (x, -1) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_ldexp_in_libm=yes
+else
+  gl_cv_func_ldexp_in_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        LIBS="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexp_in_libm" >&5
+$as_echo "$gl_cv_func_ldexp_in_libm" >&6; }
+    if test $gl_cv_func_ldexp_in_libm = yes; then
+      LDEXP_LIBM=-lm
+    fi
+  fi
+
+
+
+
+
+
+
+
+      ac_fn_c_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_ldexpl" = xyes; then :
+
+else
+  HAVE_DECL_LDEXPL=0
+fi
+
+
+  LDEXPL_LIBM=
+  if test $HAVE_DECL_LDEXPL = 1; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl() can be used without linking with libm" >&5
+$as_echo_n "checking whether ldexpl() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_ldexpl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             long double x;
+int
+main ()
+{
+return ldexpl (x, -1) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_ldexpl_no_libm=yes
+else
+  gl_cv_func_ldexpl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_no_libm" >&5
+$as_echo "$gl_cv_func_ldexpl_no_libm" >&6; }
+
+    if test $gl_cv_func_ldexpl_no_libm = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl() can be used with libm" >&5
+$as_echo_n "checking whether ldexpl() can be used with libm... " >&6; }
+if ${gl_cv_func_ldexpl_in_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          save_LIBS="$LIBS"
+          LIBS="$LIBS -lm"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+                 long double x;
+int
+main ()
+{
+return ldexpl (x, -1) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_ldexpl_in_libm=yes
+else
+  gl_cv_func_ldexpl_in_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+          LIBS="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_in_libm" >&5
+$as_echo "$gl_cv_func_ldexpl_in_libm" >&6; }
+      if test $gl_cv_func_ldexpl_in_libm = yes; then
+        LDEXPL_LIBM=-lm
+      fi
+    fi
+    if test $gl_cv_func_ldexpl_no_libm = yes \
+       || test $gl_cv_func_ldexpl_in_libm = yes; then
+      save_LIBS="$LIBS"
+      LIBS="$LIBS $LDEXPL_LIBM"
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl works" >&5
+$as_echo_n "checking whether ldexpl works... " >&6; }
+if ${gl_cv_func_ldexpl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no";;
+           *)               gl_cv_func_ldexpl_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double ldexpl (long double, int);
+int main()
+{
+  int result = 0;
+  {
+    volatile long double x = 1.0;
+    volatile long double y = ldexpl (x, -1);
+    if (y != 0.5L)
+      result |= 1;
+  }
+  {
+    volatile long double x = 1.73205L;
+    volatile long double y = ldexpl (x, 0);
+    if (y != x)
+      result |= 2;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_ldexpl_works=yes
+else
+  gl_cv_func_ldexpl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_works" >&5
+$as_echo "$gl_cv_func_ldexpl_works" >&6; }
+
+      LIBS="$save_LIBS"
+      case "$gl_cv_func_ldexpl_works" in
+        *yes) gl_func_ldexpl=yes ;;
+        *)    gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;;
+      esac
+    else
+      gl_func_ldexpl=no
+    fi
+    if test $gl_func_ldexpl = yes; then
+
+$as_echo "#define HAVE_LDEXPL 1" >>confdefs.h
+
+    fi
+  fi
+  if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then
+        if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+
+      LDEXPL_LIBM="$LDEXP_LIBM"
+    else
+      LDEXPL_LIBM="$ISNANL_LIBM"
+    fi
+  fi
+
+
+  if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS ldexpl.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_LDEXPL=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_LDEXPL 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
+
+
+
+  if test "$gl_threads_api" = posix; then
+    # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
+    # pthread_rwlock_* functions.
+    ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h>
+"
+if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then :
+
+$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h
+
+fi
+
+    # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+      #include <pthread.h>
+int
+main ()
+{
+
+#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  fi
+  :
+
+
+
+
+
+      for ac_header in stdlib.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDLIB_H 1
+_ACEOF
+
+fi
+
+done
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
+$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
+if ${ac_cv_func_malloc_0_nonnull+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+          # Guess yes on platforms where we know the result.
+          *-gnu* | freebsd* | netbsd* | openbsd* \
+          | hpux* | solaris* | cygwin* | mingw*)
+            ac_cv_func_malloc_0_nonnull=yes ;;
+          # If we don't know, assume the worst.
+          *) ac_cv_func_malloc_0_nonnull=no ;;
+        esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+            # include <stdlib.h>
+            #else
+            char *malloc ();
+            #endif
+
+int
+main ()
+{
+return ! malloc (0);
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_malloc_0_nonnull=yes
+else
+  ac_cv_func_malloc_0_nonnull=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
+$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
+  if test $ac_cv_func_malloc_0_nonnull = yes; then :
+
+$as_echo "#define HAVE_MALLOC_GNU 1" >>confdefs.h
+
+else
+  $as_echo "#define HAVE_MALLOC_GNU 0" >>confdefs.h
+
+     REPLACE_MALLOC=1
+
+fi
+
+
+  if test $REPLACE_MALLOC = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
+
+  fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_MALLOC_GNU 1
+_ACEOF
+
+
+
+
+
+  if test $gl_cv_func_malloc_posix = yes; then
+
+$as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h
+
+  else
+    REPLACE_MALLOC=1
+  fi
+
+  if test $REPLACE_MALLOC = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_MALLOC_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_math_h='<'math.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <math.h>" >&5
+$as_echo_n "checking absolute name of <math.h>... " >&6; }
+if ${gl_cv_next_math_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_math_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'math.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_math_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_math_h='<'math.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5
+$as_echo "$gl_cv_next_math_h" >&6; }
+     fi
+     NEXT_MATH_H=$gl_cv_next_math_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'math.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_math_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5
+$as_echo_n "checking whether NAN macro works... " >&6; }
+if ${gl_cv_header_math_nan_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+int
+main ()
+{
+/* Solaris 10 has a broken definition of NAN.  Other platforms
+        fail to provide NAN, or provide it only in C99 mode; this
+        test only needs to fail when NAN is provided but wrong.  */
+         float f = 1.0f;
+#ifdef NAN
+         f = NAN;
+#endif
+         return f == 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_math_nan_works=yes
+else
+  gl_cv_header_math_nan_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_nan_works" >&5
+$as_echo "$gl_cv_header_math_nan_works" >&6; }
+  if test $gl_cv_header_math_nan_works = no; then
+    REPLACE_NAN=1
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5
+$as_echo_n "checking whether HUGE_VAL works... " >&6; }
+if ${gl_cv_header_math_huge_val_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+int
+main ()
+{
+/* Solaris 10 has a broken definition of HUGE_VAL.  */
+         double d = HUGE_VAL;
+         return d == 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_math_huge_val_works=yes
+else
+  gl_cv_header_math_huge_val_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_huge_val_works" >&5
+$as_echo "$gl_cv_header_math_huge_val_works" >&6; }
+  if test $gl_cv_header_math_huge_val_works = no; then
+    REPLACE_HUGE_VAL=1
+  fi
+
+
+    for gl_func in acosf acosl asinf asinl atanf atanl      cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf      expf expl exp2 exp2f exp2l expm1 expm1f expm1l      fabsf fabsl floorf floorl fma fmaf fmal      fmod fmodf fmodl frexpf frexpl hypotf hypotl      ilogb ilogbf ilogbl      ldexpf ldexpl      log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l      logb logbf logbl      modf modff modfl powf      remainder remainderf remainderl      rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl      tanf tanl tanhf trunc truncf truncl; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
+if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                     # Guess no on AIX and OSF/1.
+        aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+                     # Guess yes otherwise.
+        *)           gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+      if test $LOCALE_JA != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_incomplete_state=yes
+else
+  gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_sanitycheck=yes
+else
+  gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
+
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+
+
+
+  if test $ac_cv_func_mbrtowc = no; then
+    HAVE_MBRTOWC=0
+    ac_fn_c_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" "
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+"
+if test "x$ac_cv_have_decl_mbrtowc" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MBRTOWC $ac_have_decl
+_ACEOF
+
+    if test $ac_cv_have_decl_mbrtowc = yes; then
+                        REPLACE_MBRTOWC=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBRTOWC=1
+    else
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5
+$as_echo_n "checking whether mbrtowc handles a NULL pwc argument... " >&6; }
+if ${gl_cv_func_mbrtowc_null_arg1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                  # Guess no on Solaris.
+        solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;;
+                  # Guess yes otherwise.
+        *)        gl_cv_func_mbrtowc_null_arg1="guessing yes" ;;
+      esac
+      if test $LOCALE_FR_UTF8 != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "\303\237er";
+      mbstate_t state;
+      wchar_t wc;
+      size_t ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      ret = mbrtowc (&wc, input, 5, &state);
+      if (ret != 2)
+        result |= 1;
+      if (!mbsinit (&state))
+        result |= 2;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      ret = mbrtowc (NULL, input, 5, &state);
+      if (ret != 2) /* Solaris 7 fails here: ret is -1.  */
+        result |= 4;
+      if (!mbsinit (&state))
+        result |= 8;
+    }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_null_arg1=yes
+else
+  gl_cv_func_mbrtowc_null_arg1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5
+$as_echo "$gl_cv_func_mbrtowc_null_arg1" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5
+$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; }
+if ${gl_cv_func_mbrtowc_null_arg2+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+              # Guess no on OSF/1.
+        osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;;
+              # Guess yes otherwise.
+        *)    gl_cv_func_mbrtowc_null_arg2="guessing yes" ;;
+      esac
+      if test $LOCALE_FR_UTF8 != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+      int ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      mbrtowc (&wc, NULL, 5, &state);
+      /* Check that wc was not modified.  */
+      if (wc != (wchar_t) 0xBADFACE)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_null_arg2=yes
+else
+  gl_cv_func_mbrtowc_null_arg2=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5
+$as_echo "$gl_cv_func_mbrtowc_null_arg2" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5
+$as_echo_n "checking whether mbrtowc has a correct return value... " >&6; }
+if ${gl_cv_func_mbrtowc_retval+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                                   # Guess no on HP-UX, Solaris, native Windows.
+        hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;;
+                                   # Guess yes otherwise.
+        *)                         gl_cv_func_mbrtowc_retval="guessing yes" ;;
+      esac
+      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \
+         || { case "$host_os" in mingw*) true;; *) false;; esac; }; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+  int found_some_locale = 0;
+  /* This fails on Solaris.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "B\303\274\303\237er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 1)
+            result |= 1;
+        }
+      found_some_locale = 1;
+    }
+  /* This fails on HP-UX 11.11.  */
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 2)
+            result |= 2;
+        }
+      found_some_locale = 1;
+    }
+  /* This fails on native Windows.  */
+  if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL)
+    {
+      char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 4;
+        }
+      found_some_locale = 1;
+    }
+  if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL)
+    {
+      char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 8;
+        }
+      found_some_locale = 1;
+    }
+  if (setlocale (LC_ALL, "Chinese_China.936") != NULL)
+    {
+      char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 16;
+        }
+      found_some_locale = 1;
+    }
+  return (found_some_locale ? result : 77);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_retval=yes
+else
+  if test $? != 77; then
+             gl_cv_func_mbrtowc_retval=no
+           fi
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5
+$as_echo "$gl_cv_func_mbrtowc_retval" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5
+$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; }
+if ${gl_cv_func_mbrtowc_nul_retval+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                       # Guess no on Solaris 8 and 9.
+        solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+                       # Guess yes otherwise.
+        *)             gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8 and 9.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, "", 1, &state) != 0)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_nul_retval=yes
+else
+  gl_cv_func_mbrtowc_nul_retval=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5
+$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; }
+
+      case "$gl_cv_func_mbrtowc_null_arg1" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_null_arg2" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_retval" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_nul_retval" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+    fi
+  fi
+
+  if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext"
+
+
+  :
+
+  fi
+
+
+
+
+
+          GNULIB_MBRTOWC=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+          GNULIB_MBSCHR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MBSCHR 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
+if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                     # Guess no on AIX and OSF/1.
+        aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+                     # Guess yes otherwise.
+        *)           gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+      if test $LOCALE_JA != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_incomplete_state=yes
+else
+  gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_sanitycheck=yes
+else
+  gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
+
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+
+
+
+  if test $ac_cv_func_mbsinit = no; then
+    HAVE_MBSINIT=0
+    ac_fn_c_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" "
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+"
+if test "x$ac_cv_have_decl_mbsinit" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MBSINIT $ac_have_decl
+_ACEOF
+
+    if test $ac_cv_have_decl_mbsinit = yes; then
+                        REPLACE_MBSINIT=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBSINIT=1
+    else
+                        case "$host_os" in
+        mingw*) REPLACE_MBSINIT=1 ;;
+      esac
+    fi
+  fi
+
+  if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext"
+
+
+  :
+
+  fi
+
+
+
+
+
+          GNULIB_MBSINIT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+          GNULIB_MBSRCHR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MBSRCHR 1" >>confdefs.h
+
+
+
+
+
+
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbswidth is declared in <wchar.h>" >&5
+$as_echo_n "checking whether mbswidth is declared in <wchar.h>... " >&6; }
+if ${ac_cv_have_decl_mbswidth+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+int
+main ()
+{
+
+  char *p = (char *) mbswidth;
+  return !p;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_have_decl_mbswidth=yes
+else
+  ac_cv_have_decl_mbswidth=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_mbswidth" >&5
+$as_echo "$ac_cv_have_decl_mbswidth" >&6; }
+  if test $ac_cv_have_decl_mbswidth = yes; then
+    ac_val=1
+  else
+    ac_val=0
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H $ac_val
+_ACEOF
+
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5
+$as_echo_n "checking for mbstate_t... " >&6; }
+if ${ac_cv_type_mbstate_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int
+main ()
+{
+mbstate_t x; return sizeof x;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_mbstate_t=yes
+else
+  ac_cv_type_mbstate_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5
+$as_echo "$ac_cv_type_mbstate_t" >&6; }
+   if test $ac_cv_type_mbstate_t = yes; then
+
+$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h
+
+   else
+
+$as_echo "#define mbstate_t int" >>confdefs.h
+
+   fi
+
+
+
+
+  :
+
+
+  if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext"
+
+
+  for ac_header in bp-sym.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default"
+if test "x$ac_cv_header_bp_sym_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_BP_SYM_H 1
+_ACEOF
+
+fi
+
+done
+
+
+  fi
+
+
+
+
+
+          GNULIB_MEMCHR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h
+
+
+
+
+
+  if test $ac_cv_func__set_invalid_parameter_handler = yes; then
+    HAVE_MSVC_INVALID_PARAMETER_HANDLER=1
+
+$as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h
+
+  else
+    HAVE_MSVC_INVALID_PARAMETER_HANDLER=0
+  fi
+
+
+  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS msvc-inval.$ac_objext"
+
+  fi
+
+
+
+  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS msvc-nothrow.$ac_objext"
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for obstacks" >&5
+$as_echo_n "checking for obstacks... " >&6; }
+if ${ac_cv_func_obstack+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+		      #include "obstack.h"
+int
+main ()
+{
+struct obstack mem;
+		       #define obstack_chunk_alloc malloc
+		       #define obstack_chunk_free free
+		       obstack_init (&mem);
+		       obstack_free (&mem, 0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_obstack=yes
+else
+  ac_cv_func_obstack=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_obstack" >&5
+$as_echo "$ac_cv_func_obstack" >&6; }
+if test $ac_cv_func_obstack = yes; then
+
+$as_echo "#define HAVE_OBSTACK 1" >>confdefs.h
+
+else
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS obstack.$ac_objext"
+
+fi
+
+
+
+
+
+
+  if test $ac_cv_func_obstack_printf = no ; then
+
+
+  if test $ac_cv_func_obstack_printf = yes; then
+    REPLACE_OBSTACK_PRINTF=1
+  fi
+
+  fi
+
+
+
+  if test $ac_cv_have_decl_obstack_printf = no; then
+    HAVE_DECL_OBSTACK_PRINTF=0
+  fi
+
+
+  if test $ac_cv_func_obstack_printf = no || test $REPLACE_OBSTACK_PRINTF = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS obstack_printf.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_OBSTACK_PRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_OBSTACK_PRINTF 1" >>confdefs.h
+
+
+
+
+
+  case "$host_os" in
+    mingw* | pw*)
+      REPLACE_OPEN=1
+      ;;
+    *)
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5
+$as_echo_n "checking whether open recognizes a trailing slash... " >&6; }
+if ${gl_cv_func_open_slash+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # Assume that if we have lstat, we can also check symlinks.
+          if test $ac_cv_func_lstat = yes; then
+            touch conftest.tmp
+            ln -s conftest.tmp conftest.lnk
+          fi
+          if test "$cross_compiling" = yes; then :
+
+             case "$host_os" in
+               freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*)
+                 gl_cv_func_open_slash="guessing no" ;;
+               *)
+                 gl_cv_func_open_slash="guessing yes" ;;
+             esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <fcntl.h>
 #if HAVE_UNISTD_H
 # include <unistd.h>
 #endif
-#if HAVE_VFORK_H
-# include <vfork.h>
-#endif
-/* On some sparc systems, changes by the child to local and incoming
-   argument registers are propagated back to the parent.  The compiler
-   is told about this with #include <vfork.h>, but some compilers
-   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
-   static variable whose address is put into a register that is
-   clobbered by the vfork.  */
-static void
-#ifdef __cplusplus
-sparc_address_test (int arg)
-# else
-sparc_address_test (arg) int arg;
-#endif
+int main ()
 {
-  static pid_t child;
-  if (!child) {
-    child = vfork ();
-    if (child < 0) {
-      perror ("vfork");
-      _exit(2);
-    }
-    if (!child) {
-      arg = getpid();
-      write(-1, "", 0);
-      _exit (arg);
-    }
-  }
+  int result = 0;
+#if HAVE_LSTAT
+  if (open ("conftest.lnk/", O_RDONLY) != -1)
+    result |= 1;
+#endif
+  if (open ("conftest.sl/", O_CREAT, 0600) >= 0)
+    result |= 2;
+  return result;
 }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_open_slash=yes
+else
+  gl_cv_func_open_slash=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+          rm -f conftest.sl conftest.tmp conftest.lnk
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5
+$as_echo "$gl_cv_func_open_slash" >&6; }
+      case "$gl_cv_func_open_slash" in
+        *no)
+
+$as_echo "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h
+
+          REPLACE_OPEN=1
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  if test $REPLACE_OPEN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS open.$ac_objext"
+
+
+
+  :
+
+  fi
+
+
+
+
+
+          GNULIB_OPEN=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_OPEN 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+          if test "$ERRNO_H:$REPLACE_STRERROR_0" != :0; then
+            REPLACE_PERROR=1
+  fi
+  case ${gl_cv_func_strerror_r_works-unset} in
+    unset|*yes)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether perror matches strerror" >&5
+$as_echo_n "checking whether perror matches strerror... " >&6; }
+if ${gl_cv_func_perror_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+              gl_cv_func_perror_works="guessing no"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <errno.h>
+                #include <stdio.h>
+                #include <stdlib.h>
+                #include <string.h>
 
 int
 main ()
 {
-  pid_t parent = getpid ();
-  pid_t child;
+char *str = strerror (-1);
+                if (!getenv("CONFTEST_OUTPUT")) return 0;
+                if (!str) str = "";
+                puts (str);
+                errno = -1;
+                perror ("");
+                return 0;
 
-  sparc_address_test (0);
-
-  child = vfork ();
-
-  if (child == 0) {
-    /* Here is another test for sparc vfork register problems.  This
-       test uses lots of local variables, at least as many local
-       variables as main has allocated so far including compiler
-       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
-       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
-       reuse the register of parent for one of the local variables,
-       since it will think that parent can't possibly be used any more
-       in this routine.  Assigning to the local variable will thus
-       munge parent in the parent process.  */
-    pid_t
-      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
-      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
-    /* Convince the compiler that p..p7 are live; otherwise, it might
-       use the same hardware register for all 8 local variables.  */
-    if (p != p1 || p != p2 || p != p3 || p != p4
-	|| p != p5 || p != p6 || p != p7)
-      _exit(1);
-
-    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
-       from child file descriptors.  If the child closes a descriptor
-       before it execs or exits, this munges the parent's descriptor
-       as well.  Test for this by closing stdout in the child.  */
-    _exit(close(fileno(stdout)) != 0);
-  } else {
-    int status;
-    struct stat st;
-
-    while (wait(&status) != child)
-      ;
-    exit(
-	 /* Was there some problem with vforking?  */
-	 child < 0
-
-	 /* Did the child fail?  (This shouldn't happen.)  */
-	 || status
-
-	 /* Did the vfork/compiler bug occur?  */
-	 || parent != getpid()
-
-	 /* Did the file descriptor bug occur?  */
-	 || fstat(fileno(stdout), &st) != 0
-	 );
-  }
+  ;
+  return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_vfork_works=yes
+if ac_fn_c_try_run "$LINENO"; then :
+  if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \
+               && cmp conftest.txt1 conftest.txt2 >/dev/null; then
+              gl_cv_func_perror_works=yes
+            else
+              gl_cv_func_perror_works=no
+            fi
+            rm -rf conftest.txt1 conftest.txt2
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_vfork_works=no
+  gl_cv_func_perror_works=no
 fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5
-echo "${ECHO_T}$ac_cv_func_vfork_works" >&6
-
-fi;
-if test "x$ac_cv_func_fork_works" = xcross; then
-  ac_cv_func_vfork_works=$ac_cv_func_vfork
-  { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
-echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-if test "x$ac_cv_func_vfork_works" = xyes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_WORKING_VFORK 1
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_perror_works" >&5
+$as_echo "$gl_cv_func_perror_works" >&6; }
+      if test "$gl_cv_func_perror_works" != yes; then
+        REPLACE_PERROR=1
+      fi
+      ;;
+    *)
+                  REPLACE_PERROR=1
+      ;;
+  esac
+
+  if test $REPLACE_PERROR = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS perror.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_PERROR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_PERROR 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_pipe2 != yes; then
+    HAVE_PIPE2=0
+  fi
+
+
+
+
+
+
+          GNULIB_PIPE2=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_PIPE2 1" >>confdefs.h
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_PIPE2_SAFER 1
 _ACEOF
 
+
+
+
+
+
+
+
+  if test $REPLACE_POSIX_SPAWN = 1; then
+    REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1
+  else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn_file_actions_addclose works" >&5
+$as_echo_n "checking whether posix_spawn_file_actions_addclose works... " >&6; }
+if ${gl_cv_func_posix_spawn_file_actions_addclose_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  # Guess no on Solaris, yes otherwise.
+          case "$host_os" in
+            solaris*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no";;
+            *)        gl_cv_func_posix_spawn_file_actions_addclose_works="guessing yes";;
+          esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <spawn.h>
+int main ()
+{
+  posix_spawn_file_actions_t actions;
+  if (posix_spawn_file_actions_init (&actions) != 0)
+    return 1;
+  if (posix_spawn_file_actions_addclose (&actions, 10000000) == 0)
+    return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_posix_spawn_file_actions_addclose_works=yes
+else
+  gl_cv_func_posix_spawn_file_actions_addclose_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_file_actions_addclose_works" >&5
+$as_echo "$gl_cv_func_posix_spawn_file_actions_addclose_works" >&6; }
+    case "$gl_cv_func_posix_spawn_file_actions_addclose_works" in
+      *yes) ;;
+      *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 ;;
+    esac
+  fi
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawn_faction_addclose.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+  if test $REPLACE_POSIX_SPAWN = 1; then
+    REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1
+  else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn_file_actions_adddup2 works" >&5
+$as_echo_n "checking whether posix_spawn_file_actions_adddup2 works... " >&6; }
+if ${gl_cv_func_posix_spawn_file_actions_adddup2_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  # Guess no on Solaris, yes otherwise.
+          case "$host_os" in
+            solaris*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";;
+            *)        gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing yes";;
+          esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <spawn.h>
+int main ()
+{
+  posix_spawn_file_actions_t actions;
+  if (posix_spawn_file_actions_init (&actions) != 0)
+    return 1;
+  if (posix_spawn_file_actions_adddup2 (&actions, 10000000, 2) == 0)
+    return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_posix_spawn_file_actions_adddup2_works=yes
+else
+  gl_cv_func_posix_spawn_file_actions_adddup2_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_file_actions_adddup2_works" >&5
+$as_echo "$gl_cv_func_posix_spawn_file_actions_adddup2_works" >&6; }
+    case "$gl_cv_func_posix_spawn_file_actions_adddup2_works" in
+      *yes) ;;
+      *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 ;;
+    esac
+  fi
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawn_faction_adddup2.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+  if test $REPLACE_POSIX_SPAWN = 1; then
+    REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1
+  else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn_file_actions_addopen works" >&5
+$as_echo_n "checking whether posix_spawn_file_actions_addopen works... " >&6; }
+if ${gl_cv_func_posix_spawn_file_actions_addopen_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  # Guess no on Solaris, yes otherwise.
+          case "$host_os" in
+            solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";;
+            *)        gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";;
+          esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <spawn.h>
+#include <fcntl.h>
+int main ()
+{
+  posix_spawn_file_actions_t actions;
+  if (posix_spawn_file_actions_init (&actions) != 0)
+    return 1;
+  if (posix_spawn_file_actions_addopen (&actions, 10000000, "foo", 0, O_RDONLY)
+      == 0)
+    return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_posix_spawn_file_actions_addopen_works=yes
+else
+  gl_cv_func_posix_spawn_file_actions_addopen_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_file_actions_addopen_works" >&5
+$as_echo "$gl_cv_func_posix_spawn_file_actions_addopen_works" >&6; }
+    case "$gl_cv_func_posix_spawn_file_actions_addopen_works" in
+      *yes) ;;
+      *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 ;;
+    esac
+  fi
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawn_faction_addopen.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1" >>confdefs.h
+
+
+
+
+
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawn_faction_destroy.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1" >>confdefs.h
+
+
+
+
+
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawn_faction_init.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1" >>confdefs.h
+
+
+
+
+
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawnattr_destroy.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWNATTR_DESTROY=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1" >>confdefs.h
+
+
+
+
+
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawnattr_init.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWNATTR_INIT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1" >>confdefs.h
+
+
+
+
+
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawnattr_setflags.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWNATTR_SETFLAGS=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1" >>confdefs.h
+
+
+
+
+
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawnattr_setsigmask.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWNATTR_SETSIGMASK=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1" >>confdefs.h
+
+
+
+
+
+
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawnp.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS spawni.$ac_objext"
+
+
+  for ac_header in paths.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "paths.h" "ac_cv_header_paths_h" "$ac_includes_default"
+if test "x$ac_cv_header_paths_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_PATHS_H 1
+_ACEOF
+
+fi
+
+done
+
+  for ac_func in confstr sched_setparam sched_setscheduler setegid seteuid vfork
+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"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+  fi
+
+
+
+
+
+          GNULIB_POSIX_SPAWNP=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_POSIX_SPAWNP 1" >>confdefs.h
+
+
+
+
+
+  if test $gl_cv_func_frexp_no_libm = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5
+$as_echo_n "checking whether frexp works... " >&6; }
+if ${gl_cv_func_frexp_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";;
+           *)                        gl_cv_func_frexp_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#if HAVE_ALARM
+# include <unistd.h>
+#endif
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   ICC 10.0 has a bug when optimizing the expression -zero.
+   The expression -DBL_MIN * DBL_MIN does not work when cross-compiling
+   to PowerPC on Mac OS X 10.5.  */
+#if defined __hpux || defined __sgi || defined __ICC
+static double
+compute_minus_zero (void)
+{
+  return -DBL_MIN * DBL_MIN;
+}
+# define minus_zero compute_minus_zero ()
+#else
+double minus_zero = -0.0;
+#endif
+int main()
+{
+  int result = 0;
+  int i;
+  volatile double x;
+  double zero = 0.0;
+#if HAVE_ALARM
+  /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
+     number.  Let the test fail in this case.  */
+  alarm (5);
+#endif
+  /* Test on denormalized numbers.  */
+  for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5)
+    ;
+  if (x > 0.0)
+    {
+      int exp;
+      double y = frexp (x, &exp);
+      /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022.
+         On NetBSD: y = 0.75. Correct: y = 0.5.  */
+      if (y != 0.5)
+        result |= 1;
+    }
+  /* Test on infinite numbers.  */
+  x = 1.0 / zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (y != x)
+      result |= 2;
+  }
+  /* Test on negative zero.  */
+  x = minus_zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (memcmp (&y, &x, sizeof x))
+      result |= 4;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_frexp_works=yes
+else
+  gl_cv_func_frexp_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5
+$as_echo "$gl_cv_func_frexp_works" >&6; }
+
+    case "$gl_cv_func_frexp_works" in
+      *yes)
+
+$as_echo "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h
+
+        ;;
+    esac
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexp can be used without linking with libm" >&5
+$as_echo_n "checking whether ldexp can be used without linking with libm... " >&6; }
+if ${gl_cv_func_ldexp_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             double x;
+             int y;
+int
+main ()
+{
+return ldexp (x, y) < 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_ldexp_no_libm=yes
+else
+  gl_cv_func_ldexp_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexp_no_libm" >&5
+$as_echo "$gl_cv_func_ldexp_no_libm" >&6; }
+  if test $gl_cv_func_ldexp_no_libm = yes; then
+
+$as_echo "#define HAVE_LDEXP_IN_LIBC 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5
+$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_frexpl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             long double x;
+int
+main ()
+{
+int e; return frexpl (x, &e) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_frexpl_no_libm=yes
+else
+  gl_cv_func_frexpl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5
+$as_echo "$gl_cv_func_frexpl_no_libm" >&6; }
+
+  if test $gl_cv_func_frexpl_no_libm = yes; then
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5
+$as_echo_n "checking whether frexpl works... " >&6; }
+if ${gl_cv_func_frexpl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*)
+              gl_cv_func_frexpl_works="guessing no";;
+           *) gl_cv_func_frexpl_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <math.h>
+/* Override the values of <float.h>, like done in float.in.h.  */
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if defined __i386__ && defined __FreeBSD__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+#endif
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+# endif
+#endif
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double frexpl (long double, int *);
+int main()
+{
+  int result = 0;
+  volatile long double x;
+  /* Test on finite numbers that fails on AIX 5.1.  */
+  x = 16.0L;
+  {
+    int exp = -9999;
+    frexpl (x, &exp);
+    if (exp != 5)
+      result |= 1;
+  }
+  /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
+     function returns an invalid (incorrectly normalized) value: it returns
+               y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
+     but the correct result is
+          0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 }  */
+  x = 1.01L;
+  {
+    int exp = -9999;
+    long double y = frexpl (x, &exp);
+    if (!(exp == 1 && y == 0.505L))
+      result |= 2;
+  }
+  /* Test on large finite numbers.  This fails on BeOS at i = 16322, while
+     LDBL_MAX_EXP = 16384.
+     In the loop end test, we test x against Infinity, rather than comparing
+     i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
+      {
+        int exp = -9999;
+        frexpl (x, &exp);
+        if (exp != i)
+          {
+            result |= 4;
+            break;
+          }
+      }
+  }
+  /* Test on denormalized numbers.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+      ;
+    if (x > 0.0L)
+      {
+        int exp;
+        long double y = frexpl (x, &exp);
+        /* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
+           exp = -16382, y = 0.5.  On Mac OS X 10.5: exp = -16384, y = 0.5.  */
+        if (exp != LDBL_MIN_EXP - 1)
+          result |= 8;
+      }
+  }
+  /* Test on infinite numbers.  */
+  x = 1.0L / 0.0L;
+  {
+    int exp;
+    long double y = frexpl (x, &exp);
+    if (y != x)
+      result |= 16;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_frexpl_works=yes
+else
+  gl_cv_func_frexpl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5
+$as_echo "$gl_cv_func_frexpl_works" >&6; }
+
+    case "$gl_cv_func_frexpl_works" in
+      *yes) gl_func_frexpl_no_libm=yes ;;
+      *)    gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
+    esac
+  else
+    gl_func_frexpl_no_libm=no
+        REPLACE_FREXPL=1
+  fi
+  if test $gl_func_frexpl_no_libm = yes; then
+
+$as_echo "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h
+
+            ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_frexpl" = xyes; then :
+
+else
+  HAVE_DECL_FREXPL=0
+fi
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl() can be used without linking with libm" >&5
+$as_echo_n "checking whether ldexpl() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_ldexpl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             long double x;
+int
+main ()
+{
+return ldexpl (x, -1) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_ldexpl_no_libm=yes
+else
+  gl_cv_func_ldexpl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_no_libm" >&5
+$as_echo "$gl_cv_func_ldexpl_no_libm" >&6; }
+
+  if test $gl_cv_func_ldexpl_no_libm = yes; then
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl works" >&5
+$as_echo_n "checking whether ldexpl works... " >&6; }
+if ${gl_cv_func_ldexpl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no";;
+           *)               gl_cv_func_ldexpl_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double ldexpl (long double, int);
+int main()
+{
+  int result = 0;
+  {
+    volatile long double x = 1.0;
+    volatile long double y = ldexpl (x, -1);
+    if (y != 0.5L)
+      result |= 1;
+  }
+  {
+    volatile long double x = 1.73205L;
+    volatile long double y = ldexpl (x, 0);
+    if (y != x)
+      result |= 2;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_ldexpl_works=yes
+else
+  gl_cv_func_ldexpl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_works" >&5
+$as_echo "$gl_cv_func_ldexpl_works" >&6; }
+
+    case "$gl_cv_func_ldexpl_works" in
+      *yes)
+
+$as_echo "#define HAVE_LDEXPL_IN_LIBC 1" >>confdefs.h
+
+                        ac_fn_c_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_ldexpl" = xyes; then :
+
+else
+  HAVE_DECL_LDEXPL=0
+fi
+
+        ;;
+    esac
+  fi
+
+
+
+  if test $gl_cv_func_vfprintf_posix = no; then
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf.$ac_objext"
+
+  REPLACE_PRINTF=1
+
+$as_echo "#define REPLACE_PRINTF_POSIX 1" >>confdefs.h
+
+  :
+
+  fi
+
+
+
+
+
+
+          GNULIB_PRINTF_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_PRINTF_POSIX 1" >>confdefs.h
+
+
+
+
+  ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h>
+"
+if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl
+_ACEOF
+
+  ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h>
+"
+if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl
+_ACEOF
+
+
+      :
+
+
+  :
+
+
+
+
+
+  for ac_func in raise
+do :
+  ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise"
+if test "x$ac_cv_func_raise" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_RAISE 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_raise = no; then
+    HAVE_RAISE=0
+  else
+    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+      REPLACE_RAISE=1
+    fi
+
+
+
+
+  if test $gl_cv_type_sigset_t = yes; then
+    ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask"
+if test "x$ac_cv_func_sigprocmask" = xyes; then :
+  gl_cv_func_sigprocmask=1
+fi
+
+  fi
+  if test -z "$gl_cv_func_sigprocmask"; then
+    HAVE_POSIX_SIGNALBLOCKING=0
+  fi
+
+      if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
+        :
+      fi
+
+  fi
+
+  if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS raise.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_RAISE=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_RAISE 1" >>confdefs.h
+
+
+
+
+
+
+
+  for ac_func in rawmemchr
+do :
+  ac_fn_c_check_func "$LINENO" "rawmemchr" "ac_cv_func_rawmemchr"
+if test "x$ac_cv_func_rawmemchr" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_RAWMEMCHR 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_rawmemchr = no; then
+    HAVE_RAWMEMCHR=0
+  fi
+
+  if test $HAVE_RAWMEMCHR = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS rawmemchr.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_RAWMEMCHR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_RAWMEMCHR 1" >>confdefs.h
+
+
+
+
+
+
+  if test $gl_cv_func_malloc_posix = yes; then
+
+$as_echo "#define HAVE_REALLOC_POSIX 1" >>confdefs.h
+
+  else
+    REPLACE_REALLOC=1
+  fi
+
+  if test $REPLACE_REALLOC = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_REALLOC_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_REALLOC_POSIX 1" >>confdefs.h
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+       #include <sched.h>
+       struct sched_param a;
+       int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER };
+       pid_t t1;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  SCHED_H=''
+else
+  SCHED_H='sched.h'
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_sched_h='<'sched.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sched.h>" >&5
+$as_echo_n "checking absolute name of <sched.h>... " >&6; }
+if ${gl_cv_next_sched_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_sched_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sched.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'sched.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_sched_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_sched_h='<'sched.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sched_h" >&5
+$as_echo "$gl_cv_next_sched_h" >&6; }
+     fi
+     NEXT_SCHED_H=$gl_cv_next_sched_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sched.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sched_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SCHED_H=$gl_next_as_first_directive
+
+
+
+
+
+     if test $ac_cv_header_sched_h = yes; then
+       HAVE_SCHED_H=1
+     else
+       HAVE_SCHED_H=0
+     fi
+
+
+     ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <sched.h>
+"
+if test "x$ac_cv_type_struct_sched_param" = xyes; then :
+  HAVE_STRUCT_SCHED_PARAM=1
+else
+  HAVE_STRUCT_SCHED_PARAM=0
+fi
+
+
+
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+   if test -n "$SCHED_H"; then
+  GL_GENERATE_SCHED_H_TRUE=
+  GL_GENERATE_SCHED_H_FALSE='#'
+else
+  GL_GENERATE_SCHED_H_TRUE='#'
+  GL_GENERATE_SCHED_H_FALSE=
+fi
+
+
+
+
+
+  if test $ac_cv_func_sigaction = yes; then
+    ac_fn_c_check_member "$LINENO" "struct sigaction" "sa_sigaction" "ac_cv_member_struct_sigaction_sa_sigaction" "#include <signal.h>
+"
+if test "x$ac_cv_member_struct_sigaction_sa_sigaction" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1
+_ACEOF
+
+
+fi
+
+    if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then
+      HAVE_STRUCT_SIGACTION_SA_SIGACTION=0
+    fi
+  else
+    HAVE_SIGACTION=0
+  fi
+
+  if test $HAVE_SIGACTION = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS sigaction.$ac_objext"
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "siginfo_t" "ac_cv_type_siginfo_t" "
+#include <signal.h>
+
+"
+if test "x$ac_cv_type_siginfo_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGINFO_T 1
+_ACEOF
+
+
+fi
+
+  if test $ac_cv_type_siginfo_t = no; then
+    HAVE_SIGINFO_T=0
+  fi
+
+  fi
+
+
+
+
+
+          GNULIB_SIGACTION=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_SIGACTION 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_signal_h='<'signal.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <signal.h>" >&5
+$as_echo_n "checking absolute name of <signal.h>... " >&6; }
+if ${gl_cv_next_signal_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <signal.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'signal.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_signal_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5
+$as_echo "$gl_cv_next_signal_h" >&6; }
+     fi
+     NEXT_SIGNAL_H=$gl_cv_next_signal_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'signal.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_signal_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H=$gl_next_as_first_directive
+
+
+
+
+
+# AIX declares sig_atomic_t to already include volatile, and C89 compilers
+# then choke on 'volatile sig_atomic_t'.  C99 requires that it compile.
+  ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" "
+#include <signal.h>
+
+"
+if test "x$ac_cv_type_volatile_sig_atomic_t" = xyes; then :
+
+else
+  HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0
+fi
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" "
+#include <signal.h>
+
+"
+if test "x$ac_cv_type_sighandler_t" = xyes; then :
+
+else
+  HAVE_SIGHANDLER_T=0
+fi
+
+
+
+    for gl_func in pthread_sigmask sigaction     sigaddset sigdelset sigemptyset sigfillset sigismember     sigpending sigprocmask; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <signal.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit macro" >&5
+$as_echo_n "checking for signbit macro... " >&6; }
+if ${gl_cv_func_signbit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                   # Guess yes on glibc systems.
+           *-gnu*) gl_cv_func_signbit="guessing yes" ;;
+                   # If we don't know, assume the worst.
+           *)      gl_cv_func_signbit="guessing no" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+/* If signbit is defined as a function, don't use it, since calling it for
+   'float' or 'long double' arguments would involve conversions.
+   If signbit is not declared at all but exists as a library function, don't
+   use it, since the prototype may not match.
+   If signbit is not declared at all but exists as a compiler built-in, don't
+   use it, since it's preferable to use __builtin_signbit* (no warnings,
+   no conversions).  */
+#ifndef signbit
+# error "signbit should be a macro"
+#endif
+#include <string.h>
+
+/* Global variables.
+   Needed because GCC 4 constant-folds __builtin_signbitl (literal)
+   but cannot constant-fold            __builtin_signbitl (variable).  */
+float vf;
+double vd;
+long double vl;
+int main ()
+{
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   So we use -p0f and -p0d instead.  */
+float p0f = 0.0f;
+float m0f = -p0f;
+double p0d = 0.0;
+double m0d = -p0d;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use another constant expression instead.
+   But that expression does not work on other platforms, such as when
+   cross-compiling to PowerPC on Mac OS X 10.5.  */
+long double p0l = 0.0L;
+#if defined __hpux || defined __sgi
+long double m0l = -LDBL_MIN * LDBL_MIN;
+#else
+long double m0l = -p0l;
+#endif
+  int result = 0;
+  if (signbit (vf)) /* link check */
+    vf++;
+  {
+    float plus_inf = 1.0f / p0f;
+    float minus_inf = -1.0f / p0f;
+    if (!(!signbit (255.0f)
+          && signbit (-255.0f)
+          && !signbit (p0f)
+          && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 1;
+  }
+  if (signbit (vd)) /* link check */
+    vd++;
+  {
+    double plus_inf = 1.0 / p0d;
+    double minus_inf = -1.0 / p0d;
+    if (!(!signbit (255.0)
+          && signbit (-255.0)
+          && !signbit (p0d)
+          && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 2;
+  }
+  if (signbit (vl)) /* link check */
+    vl++;
+  {
+    long double plus_inf = 1.0L / p0l;
+    long double minus_inf = -1.0L / p0l;
+    if (signbit (255.0L))
+      result |= 4;
+    if (!signbit (-255.0L))
+      result |= 4;
+    if (signbit (p0l))
+      result |= 8;
+    if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)))
+      result |= 16;
+    if (signbit (plus_inf))
+      result |= 32;
+    if (!signbit (minus_inf))
+      result |= 64;
+  }
+  return result;
+}
+
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_signbit=yes
+else
+  gl_cv_func_signbit=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit" >&5
+$as_echo "$gl_cv_func_signbit" >&6; }
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit compiler built-ins" >&5
+$as_echo_n "checking for signbit compiler built-ins... " >&6; }
+if ${gl_cv_func_signbit_gcc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                   # Guess yes on glibc systems.
+           *-gnu*) gl_cv_func_signbit_gcc="guessing yes" ;;
+                   # If we don't know, assume the worst.
+           *)      gl_cv_func_signbit_gcc="guessing no" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if __GNUC__ >= 4
+# define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
+    __builtin_signbitf (x))
+#else
+# error "signbit should be three compiler built-ins"
+#endif
+#include <string.h>
+
+/* Global variables.
+   Needed because GCC 4 constant-folds __builtin_signbitl (literal)
+   but cannot constant-fold            __builtin_signbitl (variable).  */
+float vf;
+double vd;
+long double vl;
+int main ()
+{
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   So we use -p0f and -p0d instead.  */
+float p0f = 0.0f;
+float m0f = -p0f;
+double p0d = 0.0;
+double m0d = -p0d;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use another constant expression instead.
+   But that expression does not work on other platforms, such as when
+   cross-compiling to PowerPC on Mac OS X 10.5.  */
+long double p0l = 0.0L;
+#if defined __hpux || defined __sgi
+long double m0l = -LDBL_MIN * LDBL_MIN;
+#else
+long double m0l = -p0l;
+#endif
+  int result = 0;
+  if (signbit (vf)) /* link check */
+    vf++;
+  {
+    float plus_inf = 1.0f / p0f;
+    float minus_inf = -1.0f / p0f;
+    if (!(!signbit (255.0f)
+          && signbit (-255.0f)
+          && !signbit (p0f)
+          && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 1;
+  }
+  if (signbit (vd)) /* link check */
+    vd++;
+  {
+    double plus_inf = 1.0 / p0d;
+    double minus_inf = -1.0 / p0d;
+    if (!(!signbit (255.0)
+          && signbit (-255.0)
+          && !signbit (p0d)
+          && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 2;
+  }
+  if (signbit (vl)) /* link check */
+    vl++;
+  {
+    long double plus_inf = 1.0L / p0l;
+    long double minus_inf = -1.0L / p0l;
+    if (signbit (255.0L))
+      result |= 4;
+    if (!signbit (-255.0L))
+      result |= 4;
+    if (signbit (p0l))
+      result |= 8;
+    if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)))
+      result |= 16;
+    if (signbit (plus_inf))
+      result |= 32;
+    if (!signbit (minus_inf))
+      result |= 64;
+  }
+  return result;
+}
+
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_signbit_gcc=yes
+else
+  gl_cv_func_signbit_gcc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit_gcc" >&5
+$as_echo "$gl_cv_func_signbit_gcc" >&6; }
+      case "$gl_cv_func_signbit_gcc" in
+    *yes)
+      REPLACE_SIGNBIT_USING_GCC=1
+      ;;
+    *)
+      case "$gl_cv_func_signbit" in
+        *yes) ;;
+        *)
+                    REPLACE_SIGNBIT=1
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'float'" >&5
+$as_echo_n "checking where to find the sign bit in a 'float'... " >&6; }
+if ${gl_cv_cc_float_signbit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_float_signbit="unknown"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; }
+        memory_float;
+static memory_float plus = { 1.0f };
+static memory_float minus = { -1.0f };
+int main ()
+{
+  size_t j, k, i;
+  unsigned int m;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  /* Find the different bit.  */
+  k = 0; m = 0;
+  for (j = 0; j < NWORDS; j++)
+    {
+      unsigned int x = plus.word[j] ^ minus.word[j];
+      if ((x & (x - 1)) || (x && m))
+        {
+          /* More than one bit difference.  */
+          fprintf (fp, "unknown");
+          return 2;
+        }
+      if (x)
+        {
+          k = j;
+          m = x;
+        }
+    }
+  if (m == 0)
+    {
+      /* No difference.  */
+      fprintf (fp, "unknown");
+      return 3;
+    }
+  /* Now m = plus.word[k] ^ ~minus.word[k].  */
+  if (plus.word[k] & ~minus.word[k])
+    {
+      /* Oh? The sign bit is set in the positive and cleared in the negative
+         numbers?  */
+      fprintf (fp, "unknown");
+      return 4;
+    }
+  for (i = 0; ; i++)
+    if ((m >> i) & 1)
+      break;
+  fprintf (fp, "word %d bit %d", (int) k, (int) i);
+  if (fclose (fp) != 0)
+    return 5;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_float_signbit=`cat conftest.out`
+else
+  gl_cv_cc_float_signbit="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_signbit" >&5
+$as_echo "$gl_cv_cc_float_signbit" >&6; }
+  case "$gl_cv_cc_float_signbit" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_SIGNBIT_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_SIGNBIT_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'double'" >&5
+$as_echo_n "checking where to find the sign bit in a 'double'... " >&6; }
+if ${gl_cv_cc_double_signbit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_double_signbit="unknown"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+#define NWORDS \
+  ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { double value; unsigned int word[NWORDS]; }
+        memory_float;
+static memory_float plus = { 1.0 };
+static memory_float minus = { -1.0 };
+int main ()
+{
+  size_t j, k, i;
+  unsigned int m;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  /* Find the different bit.  */
+  k = 0; m = 0;
+  for (j = 0; j < NWORDS; j++)
+    {
+      unsigned int x = plus.word[j] ^ minus.word[j];
+      if ((x & (x - 1)) || (x && m))
+        {
+          /* More than one bit difference.  */
+          fprintf (fp, "unknown");
+          return 2;
+        }
+      if (x)
+        {
+          k = j;
+          m = x;
+        }
+    }
+  if (m == 0)
+    {
+      /* No difference.  */
+      fprintf (fp, "unknown");
+      return 3;
+    }
+  /* Now m = plus.word[k] ^ ~minus.word[k].  */
+  if (plus.word[k] & ~minus.word[k])
+    {
+      /* Oh? The sign bit is set in the positive and cleared in the negative
+         numbers?  */
+      fprintf (fp, "unknown");
+      return 4;
+    }
+  for (i = 0; ; i++)
+    if ((m >> i) & 1)
+      break;
+  fprintf (fp, "word %d bit %d", (int) k, (int) i);
+  if (fclose (fp) != 0)
+    return 5;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_double_signbit=`cat conftest.out`
+else
+  gl_cv_cc_double_signbit="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_signbit" >&5
+$as_echo "$gl_cv_cc_double_signbit" >&6; }
+  case "$gl_cv_cc_double_signbit" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_SIGNBIT_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_SIGNBIT_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'long double'" >&5
+$as_echo_n "checking where to find the sign bit in a 'long double'... " >&6; }
+if ${gl_cv_cc_long_double_signbit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_long_double_signbit="unknown"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { long double value; unsigned int word[NWORDS]; }
+        memory_float;
+static memory_float plus = { 1.0L };
+static memory_float minus = { -1.0L };
+int main ()
+{
+  size_t j, k, i;
+  unsigned int m;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  /* Find the different bit.  */
+  k = 0; m = 0;
+  for (j = 0; j < NWORDS; j++)
+    {
+      unsigned int x = plus.word[j] ^ minus.word[j];
+      if ((x & (x - 1)) || (x && m))
+        {
+          /* More than one bit difference.  */
+          fprintf (fp, "unknown");
+          return 2;
+        }
+      if (x)
+        {
+          k = j;
+          m = x;
+        }
+    }
+  if (m == 0)
+    {
+      /* No difference.  */
+      fprintf (fp, "unknown");
+      return 3;
+    }
+  /* Now m = plus.word[k] ^ ~minus.word[k].  */
+  if (plus.word[k] & ~minus.word[k])
+    {
+      /* Oh? The sign bit is set in the positive and cleared in the negative
+         numbers?  */
+      fprintf (fp, "unknown");
+      return 4;
+    }
+  for (i = 0; ; i++)
+    if ((m >> i) & 1)
+      break;
+  fprintf (fp, "word %d bit %d", (int) k, (int) i);
+  if (fclose (fp) != 0)
+    return 5;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_long_double_signbit=`cat conftest.out`
+else
+  gl_cv_cc_long_double_signbit="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_signbit" >&5
+$as_echo "$gl_cv_cc_long_double_signbit" >&6; }
+  case "$gl_cv_cc_long_double_signbit" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_SIGNBIT_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_SIGNBIT_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+          if test "$gl_cv_cc_float_signbit" = unknown; then
+                        ac_fn_c_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_copysignf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGNF $ac_have_decl
+_ACEOF
+
+            if test "$ac_cv_have_decl_copysignf" = yes; then
+                            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignf can be used without linking with libm" >&5
+$as_echo_n "checking whether copysignf can be used without linking with libm... " >&6; }
+if ${gl_cv_func_copysignf_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+                         float x, y;
+int
+main ()
+{
+return copysignf (x, y) < 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_copysignf_no_libm=yes
+else
+  gl_cv_func_copysignf_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignf_no_libm" >&5
+$as_echo "$gl_cv_func_copysignf_no_libm" >&6; }
+              if test $gl_cv_func_copysignf_no_libm = yes; then
+
+$as_echo "#define HAVE_COPYSIGNF_IN_LIBC 1" >>confdefs.h
+
+              fi
+            fi
+          fi
+          if test "$gl_cv_cc_double_signbit" = unknown; then
+                        ac_fn_c_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_copysign" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGN $ac_have_decl
+_ACEOF
+
+            if test "$ac_cv_have_decl_copysign" = yes; then
+                            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysign can be used without linking with libm" >&5
+$as_echo_n "checking whether copysign can be used without linking with libm... " >&6; }
+if ${gl_cv_func_copysign_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+                         double x, y;
+int
+main ()
+{
+return copysign (x, y) < 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_copysign_no_libm=yes
+else
+  gl_cv_func_copysign_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysign_no_libm" >&5
+$as_echo "$gl_cv_func_copysign_no_libm" >&6; }
+              if test $gl_cv_func_copysign_no_libm = yes; then
+
+$as_echo "#define HAVE_COPYSIGN_IN_LIBC 1" >>confdefs.h
+
+              fi
+            fi
+          fi
+          if test "$gl_cv_cc_long_double_signbit" = unknown; then
+                        ac_fn_c_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_copysignl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGNL $ac_have_decl
+_ACEOF
+
+            if test "$ac_cv_have_decl_copysignl" = yes; then
+                            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignl can be used without linking with libm" >&5
+$as_echo_n "checking whether copysignl can be used without linking with libm... " >&6; }
+if ${gl_cv_func_copysignl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+                         long double x, y;
+int
+main ()
+{
+return copysignl (x, y) < 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_copysignl_no_libm=yes
+else
+  gl_cv_func_copysignl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignl_no_libm" >&5
+$as_echo "$gl_cv_func_copysignl_no_libm" >&6; }
+              if test $gl_cv_func_copysignl_no_libm = yes; then
+
+$as_echo "#define HAVE_COPYSIGNL_IN_LIBC 1" >>confdefs.h
+
+              fi
+            fi
+          fi
+          ;;
+      esac
+      ;;
+  esac
+
+  if test $REPLACE_SIGNBIT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS signbitf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS signbitd.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS signbitl.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_SIGNBIT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_SIGNBIT 1" >>confdefs.h
+
+
+
+
+
+
+  if test $gl_cv_type_sigset_t = yes; then
+    ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask"
+if test "x$ac_cv_func_sigprocmask" = xyes; then :
+  gl_cv_func_sigprocmask=1
+fi
+
+  fi
+  if test -z "$gl_cv_func_sigprocmask"; then
+    HAVE_POSIX_SIGNALBLOCKING=0
+  fi
+
+  if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS sigprocmask.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_SIGPROCMASK=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_SIGPROCMASK 1" >>confdefs.h
+
+
+
+
+  for ac_header in stdint.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H 1
+_ACEOF
+
+fi
+
+done
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5
+$as_echo_n "checking for SIZE_MAX... " >&6; }
+if ${gl_cv_size_max+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    gl_cv_size_max=
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Found it" >/dev/null 2>&1; then :
+  gl_cv_size_max=yes
+fi
+rm -f conftest*
+
+    if test -z "$gl_cv_size_max"; then
+                        if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1"        "#include <stddef.h>
+#include <limits.h>"; then :
+
+else
+  size_t_bits_minus_1=
+fi
+
+      if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint"        "#include <stddef.h>"; then :
+
+else
+  fits_in_uint=
+fi
+
+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+        if test $fits_in_uint = 1; then
+                              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+                 extern size_t foo;
+                 extern unsigned long foo;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  fits_in_uint=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        fi
+                                if test $fits_in_uint = 1; then
+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        else
+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        fi
+      else
+                gl_cv_size_max='((size_t)~(size_t)0)'
+      fi
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5
+$as_echo "$gl_cv_size_max" >&6; }
+  if test "$gl_cv_size_max" != yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define SIZE_MAX $gl_cv_size_max
+_ACEOF
+
+  fi
+
+
+
+
+  gl_cv_func_snprintf_usable=no
+  for ac_func in snprintf
+do :
+  ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_snprintf = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5
+$as_echo_n "checking whether snprintf respects a size of 1... " >&6; }
+if ${gl_cv_func_snprintf_size1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_func_snprintf_size1="guessing yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 1, "%d", 12345);
+  return buf[1] != 'E';
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_size1=yes
+else
+  gl_cv_func_snprintf_size1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5
+$as_echo "$gl_cv_func_snprintf_size1" >&6; }
+
+    case "$gl_cv_func_snprintf_size1" in
+      *yes)
+
+        case "$gl_cv_func_snprintf_retval_c99" in
+          *yes)
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5
+$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; }
+if ${gl_cv_func_printf_positions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
+                         gl_cv_func_printf_positions="guessing no";;
+           beos*)        gl_cv_func_printf_positions="guessing no";;
+           mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+           *)            gl_cv_func_printf_positions="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_positions=yes
+else
+  gl_cv_func_printf_positions=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5
+$as_echo "$gl_cv_func_printf_positions" >&6; }
+
+            case "$gl_cv_func_printf_positions" in
+              *yes)
+                gl_cv_func_snprintf_usable=yes
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_snprintf_usable = no; then
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS snprintf.$ac_objext"
+
+  if test $ac_cv_func_snprintf = yes; then
+    REPLACE_SNPRINTF=1
+  fi
+  :
+
+  fi
+
+  if test $ac_cv_have_decl_snprintf = no; then
+    HAVE_DECL_SNPRINTF=0
+  fi
+
+
+
+
+
+
+          GNULIB_SNPRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_SNPRINTF 1" >>confdefs.h
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_SNPRINTF 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_cv_func_snprintf_posix=no
+  for ac_func in snprintf
+do :
+  ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_snprintf = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf truncates the result as in C99" >&5
+$as_echo_n "checking whether snprintf truncates the result as in C99... " >&6; }
+if ${gl_cv_func_snprintf_truncation_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_snprintf_truncation_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_truncation_c99="guessing no";;
+           darwin*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           openbsd*)             gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           solaris*)             gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_truncation_c99="guessing no";;
+           aix*)                 gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on HP-UX >= 11.
+           hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";;
+           hpux*)                gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on OSF/1 >= 5.
+           osf[3-4]*)            gl_cv_func_snprintf_truncation_c99="guessing no";;
+           osf*)                 gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_truncation_c99="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char buf[100];
+int main ()
+{
+  strcpy (buf, "ABCDEF");
+  my_snprintf (buf, 3, "%d %d", 4567, 89);
+  if (memcmp (buf, "45\0DEF", 6) != 0)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_truncation_c99=yes
+else
+  gl_cv_func_snprintf_truncation_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_truncation_c99" >&5
+$as_echo "$gl_cv_func_snprintf_truncation_c99" >&6; }
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf fully supports the 'n' directive" >&5
+$as_echo_n "checking whether snprintf fully supports the 'n' directive... " >&6; }
+if ${gl_cv_func_snprintf_directive_n+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_snprintf_directive_n="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_directive_n="guessing no";;
+           darwin*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_snprintf_directive_n="guessing no";;
+           solaris*)             gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_directive_n="guessing no";;
+           aix*)                 gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on OSF/1 >= 5.
+           osf[3-4]*)            gl_cv_func_snprintf_directive_n="guessing no";;
+           osf*)                 gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_directive_n="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_directive_n="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char fmtstring[10];
+static char buf[100];
+int main ()
+{
+  int count = -1;
+  /* Copy the format string.  Some systems (glibc with _FORTIFY_SOURCE=2)
+     support %n in format strings in read-only memory but not in writable
+     memory.  */
+  strcpy (fmtstring, "%d %n");
+  my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55);
+  if (count != 6)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_directive_n=yes
+else
+  gl_cv_func_snprintf_directive_n=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_directive_n" >&5
+$as_echo "$gl_cv_func_snprintf_directive_n" >&6; }
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5
+$as_echo_n "checking whether snprintf respects a size of 1... " >&6; }
+if ${gl_cv_func_snprintf_size1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_func_snprintf_size1="guessing yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 1, "%d", 12345);
+  return buf[1] != 'E';
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_size1=yes
+else
+  gl_cv_func_snprintf_size1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5
+$as_echo "$gl_cv_func_snprintf_size1" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf respects a zero size as in C99" >&5
+$as_echo_n "checking whether vsnprintf respects a zero size as in C99... " >&6; }
+if ${gl_cv_func_vsnprintf_zerosize_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           darwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Cygwin.
+           cygwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           solaris*)             gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           aix*)                 gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           netbsd*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on mingw.
+           mingw* | pw*)         gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdarg.h>
+#include <stdio.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 0, "%d", 12345);
+  return buf[0] != 'D';
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_vsnprintf_zerosize_c99=yes
+else
+  gl_cv_func_vsnprintf_zerosize_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_vsnprintf_zerosize_c99" >&5
+$as_echo "$gl_cv_func_vsnprintf_zerosize_c99" >&6; }
+
+    case "$gl_cv_func_printf_sizes_c99" in
+      *yes)
+        case "$gl_cv_func_printf_long_double" in
+          *yes)
+            case "$gl_cv_func_printf_infinite" in
+              *yes)
+                case "$gl_cv_func_printf_infinite_long_double" in
+                  *yes)
+                    case "$gl_cv_func_printf_directive_a" in
+                      *yes)
+                        case "$gl_cv_func_printf_directive_f" in
+                          *yes)
+                            case "$gl_cv_func_printf_directive_n" in
+                              *yes)
+                                case "$gl_cv_func_printf_directive_ls" in
+                                  *yes)
+                                    case "$gl_cv_func_printf_positions" in
+                                      *yes)
+                                        case "$gl_cv_func_printf_flag_grouping" in
+                                          *yes)
+                                            case "$gl_cv_func_printf_flag_leftadjust" in
+                                              *yes)
+                                                case "$gl_cv_func_printf_flag_zero" in
+                                                  *yes)
+                                                    case "$gl_cv_func_printf_precision" in
+                                                      *yes)
+                                                        case "$gl_cv_func_printf_enomem" in
+                                                          *yes)
+                                                            case "$gl_cv_func_snprintf_truncation_c99" in
+                                                              *yes)
+                                                                case "$gl_cv_func_snprintf_retval_c99" in
+                                                                  *yes)
+                                                                    case "$gl_cv_func_snprintf_directive_n" in
+                                                                      *yes)
+                                                                        case "$gl_cv_func_snprintf_size1" in
+                                                                          *yes)
+                                                                            case "$gl_cv_func_vsnprintf_zerosize_c99" in
+                                                                              *yes)
+                                                                                # snprintf exists and is
+                                                                                # already POSIX compliant.
+                                                                                gl_cv_func_snprintf_posix=yes
+                                                                                ;;
+                                                                            esac
+                                                                            ;;
+                                                                        esac
+                                                                        ;;
+                                                                    esac
+                                                                    ;;
+                                                                esac
+                                                                ;;
+                                                            esac
+                                                            ;;
+                                                        esac
+                                                        ;;
+                                                    esac
+                                                    ;;
+                                                esac
+                                                ;;
+                                            esac
+                                            ;;
+                                        esac
+                                        ;;
+                                    esac
+                                    ;;
+                                esac
+                                ;;
+                            esac
+                            ;;
+                        esac
+                        ;;
+                    esac
+                    ;;
+                esac
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_snprintf_posix = no; then
+
+
+
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h
+
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h
+
+      for ac_func in nl_langinfo
+do :
+  ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NL_LANGINFO 1
+_ACEOF
+
+fi
+done
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
 else
 
-cat >>confdefs.h <<\_ACEOF
-#define vfork fork
-_ACEOF
+$as_echo "#define ptrdiff_t long" >>confdefs.h
 
-fi
-if test "x$ac_cv_func_fork_works" = xyes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_WORKING_FORK 1
-_ACEOF
 
 fi
 
 
 
 
-for ac_header in sys/time.h sys/times.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS snprintf.$ac_objext"
+
+  if test $ac_cv_func_snprintf = yes; then
+    REPLACE_SNPRINTF=1
+  fi
+  :
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_spawn_h='<'spawn.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <spawn.h>" >&5
+$as_echo_n "checking absolute name of <spawn.h>... " >&6; }
+if ${gl_cv_next_spawn_h+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+
+             if test $ac_cv_header_spawn_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <spawn.h>
+
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'spawn.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_spawn_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_spawn_h='<'spawn.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_spawn_h" >&5
+$as_echo "$gl_cv_next_spawn_h" >&6; }
+     fi
+     NEXT_SPAWN_H=$gl_cv_next_spawn_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'spawn.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_spawn_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SPAWN_H=$gl_next_as_first_directive
+
+
+
+
+
+  if test $ac_cv_header_spawn_h = yes; then
+    HAVE_SPAWN_H=1
+    ac_fn_c_check_type "$LINENO" "posix_spawnattr_t" "ac_cv_type_posix_spawnattr_t" "
+#include <spawn.h>
+
+"
+if test "x$ac_cv_type_posix_spawnattr_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_POSIX_SPAWNATTR_T 1
+_ACEOF
+
+
+else
+  HAVE_POSIX_SPAWNATTR_T=0
+fi
+
+    ac_fn_c_check_type "$LINENO" "posix_spawn_file_actions_t" "ac_cv_type_posix_spawn_file_actions_t" "
+#include <spawn.h>
+
+"
+if test "x$ac_cv_type_posix_spawn_file_actions_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1
+_ACEOF
+
+
+else
+  HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0
+fi
+
+  else
+    HAVE_SPAWN_H=0
+    HAVE_POSIX_SPAWNATTR_T=0
+    HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+    for gl_func in posix_spawn posix_spawnp posix_spawnattr_init posix_spawnattr_destroy     posix_spawnattr_getsigdefault posix_spawnattr_setsigdefault     posix_spawnattr_getsigmask posix_spawnattr_setsigmask     posix_spawnattr_getflags posix_spawnattr_setflags     posix_spawnattr_getpgroup posix_spawnattr_setpgroup     posix_spawnattr_getschedpolicy posix_spawnattr_setschedpolicy     posix_spawnattr_getschedparam posix_spawnattr_setschedparam     posix_spawn_file_actions_init posix_spawn_file_actions_destroy     posix_spawn_file_actions_addopen posix_spawn_file_actions_addclose     posix_spawn_file_actions_adddup2; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <spawn.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_cv_func_sprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # sprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_sprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_sprintf_posix = no; then
+
+
+
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h
+
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h
+
+      for ac_func in nl_langinfo
+do :
+  ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NL_LANGINFO 1
+_ACEOF
+
+fi
+done
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS sprintf.$ac_objext"
+
+  REPLACE_SPRINTF=1
+  :
+
+  fi
+
+
+
+
+
+
+          GNULIB_SPRINTF_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_SPRINTF_POSIX 1" >>confdefs.h
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5
+$as_echo_n "checking for ssize_t... " >&6; }
+if ${gt_cv_ssize_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+int
+main ()
+{
+int x = sizeof (ssize_t *) + sizeof (ssize_t);
+            return !x;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_ssize_t=yes
+else
+  gt_cv_ssize_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5
+$as_echo "$gt_cv_ssize_t" >&6; }
+  if test $gt_cv_ssize_t = no; then
+
+$as_echo "#define ssize_t int" >>confdefs.h
+
+  fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on directories" >&5
+$as_echo_n "checking whether stat handles trailing slashes on directories... " >&6; }
+if ${gl_cv_func_stat_dir_slash+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  case $host_os in
+            mingw*) gl_cv_func_stat_dir_slash="guessing no";;
+            *) gl_cv_func_stat_dir_slash="guessing yes";;
+          esac
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+int
+main ()
+{
+struct stat st; return stat (".", &st) != stat ("./", &st);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_stat_dir_slash=yes
+else
+  gl_cv_func_stat_dir_slash=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_dir_slash" >&5
+$as_echo "$gl_cv_func_stat_dir_slash" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5
+$as_echo_n "checking whether stat handles trailing slashes on files... " >&6; }
+if ${gl_cv_func_stat_file_slash+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  touch conftest.tmp
+       # Assume that if we have lstat, we can also check symlinks.
+       if test $ac_cv_func_lstat = yes; then
+         ln -s conftest.tmp conftest.lnk
+       fi
+       if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                    # Guess yes on glibc systems.
+            *-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
+                    # If we don't know, assume the worst.
+            *)      gl_cv_func_stat_file_slash="guessing no" ;;
+          esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+int
+main ()
+{
+int result = 0;
+      struct stat st;
+      if (!stat ("conftest.tmp/", &st))
+        result |= 1;
+#if HAVE_LSTAT
+      if (!stat ("conftest.lnk/", &st))
+        result |= 2;
+#endif
+      return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_stat_file_slash=yes
+else
+  gl_cv_func_stat_file_slash=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+       rm -f conftest.tmp conftest.lnk
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_file_slash" >&5
+$as_echo "$gl_cv_func_stat_file_slash" >&6; }
+  case $gl_cv_func_stat_dir_slash in
+    *no) REPLACE_STAT=1
+
+$as_echo "#define REPLACE_FUNC_STAT_DIR 1" >>confdefs.h
+;;
+  esac
+  case $gl_cv_func_stat_file_slash in
+    *no) REPLACE_STAT=1
+
+$as_echo "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h
+;;
+  esac
+
+  if test $REPLACE_STAT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS stat.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_STAT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STAT 1" >>confdefs.h
+
+
+
+
+
+
+  # Define two additional variables used in the Makefile substitution.
+
+  if test "$ac_cv_header_stdbool_h" = yes; then
+    STDBOOL_H=''
+  else
+    STDBOOL_H='stdbool.h'
+  fi
+
+   if test -n "$STDBOOL_H"; then
+  GL_GENERATE_STDBOOL_H_TRUE=
+  GL_GENERATE_STDBOOL_H_FALSE='#'
+else
+  GL_GENERATE_STDBOOL_H_TRUE='#'
+  GL_GENERATE_STDBOOL_H_FALSE=
+fi
+
+
+  if test "$ac_cv_type__Bool" = yes; then
+    HAVE__BOOL=1
+  else
+    HAVE__BOOL=0
+  fi
+
+
+
+
+
+  STDDEF_H=
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
+$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
+if ${gl_cv_decl_null_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_decl_null_works=yes
+else
+  gl_cv_decl_null_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
+$as_echo "$gl_cv_decl_null_works" >&6; }
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+
+   if test -n "$STDDEF_H"; then
+  GL_GENERATE_STDDEF_H_TRUE=
+  GL_GENERATE_STDDEF_H_FALSE='#'
+else
+  GL_GENERATE_STDDEF_H_TRUE='#'
+  GL_GENERATE_STDDEF_H_FALSE=
+fi
+
+  if test -n "$STDDEF_H"; then
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stddef_h='<'stddef.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
+$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
+if ${gl_cv_next_stddef_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'stddef.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
+$as_echo "$gl_cv_next_stddef_h" >&6; }
+     fi
+     NEXT_STDDEF_H=$gl_cv_next_stddef_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stddef.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stddef_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
+
+
+
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdio_h='<'stdio.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5
+$as_echo_n "checking absolute name of <stdio.h>... " >&6; }
+if ${gl_cv_next_stdio_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'stdio.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_stdio_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5
+$as_echo "$gl_cv_next_stdio_h" >&6; }
+     fi
+     NEXT_STDIO_H=$gl_cv_next_stdio_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdio.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdio_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive
+
+
+
+
+
+      GNULIB_FSCANF=1
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_FSCANF 1
+_ACEOF
+
+
+  GNULIB_SCANF=1
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_SCANF 1
+_ACEOF
+
+
+  GNULIB_FGETC=1
+  GNULIB_GETC=1
+  GNULIB_GETCHAR=1
+  GNULIB_FGETS=1
+  GNULIB_FREAD=1
+
+
+      GNULIB_FPRINTF=1
+  GNULIB_PRINTF=1
+  GNULIB_VFPRINTF=1
+  GNULIB_VPRINTF=1
+  GNULIB_FPUTC=1
+  GNULIB_PUTC=1
+  GNULIB_PUTCHAR=1
+  GNULIB_FPUTS=1
+  GNULIB_PUTS=1
+  GNULIB_FWRITE=1
+
+
+
+
+    for gl_func in dprintf fpurge fseeko ftello getdelim getline gets pclose popen     renameat snprintf tmpfile vdprintf vsnprintf; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdlib_h='<'stdlib.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5
+$as_echo_n "checking absolute name of <stdlib.h>... " >&6; }
+if ${gl_cv_next_stdlib_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'stdlib.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5
+$as_echo "$gl_cv_next_stdlib_h" >&6; }
+     fi
+     NEXT_STDLIB_H=$gl_cv_next_stdlib_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdlib.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdlib_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive
+
+
+
+
+
+
+    for gl_func in _Exit atoll canonicalize_file_name getloadavg getsubopt grantpt     initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps     posix_openpt ptsname ptsname_r random random_r realpath rpmatch     setenv setstate setstate_r srandom srandom_r     strtod strtoll strtoull unlockpt unsetenv; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+
+  for ac_func in stpcpy
+do :
+  ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy"
+if test "x$ac_cv_func_stpcpy" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STPCPY 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_stpcpy = no; then
+    HAVE_STPCPY=0
+  fi
+
+  if test $HAVE_STPCPY = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS stpcpy.$ac_objext"
+
+
+  :
+
+  fi
+
+
+
+
+
+          GNULIB_STPCPY=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STPCPY 1" >>confdefs.h
+
+
+
+
+
+
+
+  for ac_func in strchrnul
+do :
+  ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul"
+if test "x$ac_cv_func_strchrnul" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRCHRNUL 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_strchrnul = no; then
+    HAVE_STRCHRNUL=0
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strchrnul works" >&5
+$as_echo_n "checking whether strchrnul works... " >&6; }
+if ${gl_cv_func_strchrnul_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9)
+  Lucky user
+ #endif
+#else
+  Lucky user
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky user" >/dev/null 2>&1; then :
+  gl_cv_func_strchrnul_works="guessing yes"
+else
+  gl_cv_func_strchrnul_works="guessing no"
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <string.h> /* for strchrnul */
+
+int
+main ()
+{
+const char *buf = "a";
+      return strchrnul (buf, 'b') != buf + 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_strchrnul_works=yes
+else
+  gl_cv_func_strchrnul_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strchrnul_works" >&5
+$as_echo "$gl_cv_func_strchrnul_works" >&6; }
+    case "$gl_cv_func_strchrnul_works" in
+      *yes) ;;
+      *) REPLACE_STRCHRNUL=1 ;;
+    esac
+  fi
+
+  if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strchrnul.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_STRCHRNUL=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STRCHRNUL 1" >>confdefs.h
+
+
+
+
+
+
+
+  if test $ac_cv_func_strdup = yes; then
+    if test $gl_cv_func_malloc_posix != yes; then
+      REPLACE_STRDUP=1
+    fi
+  fi
+
+  if test $ac_cv_have_decl_strdup = no; then
+    HAVE_DECL_STRDUP=0
+  fi
+
+  if test $ac_cv_func_strdup = no || test $REPLACE_STRDUP = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strdup.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_STRDUP=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STRDUP 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+  if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5
+$as_echo_n "checking for working strerror function... " >&6; }
+if ${gl_cv_func_working_strerror+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                   # Guess yes on glibc systems.
+           *-gnu*) gl_cv_func_working_strerror="guessing yes" ;;
+                   # If we don't know, assume the worst.
+           *)      gl_cv_func_working_strerror="guessing no" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+int
+main ()
+{
+if (!*strerror (-2)) return 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_working_strerror=yes
+else
+  gl_cv_func_working_strerror=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5
+$as_echo "$gl_cv_func_working_strerror" >&6; }
+    case "$gl_cv_func_working_strerror" in
+      *yes) ;;
+      *)
+                        REPLACE_STRERROR=1
+        ;;
+    esac
+
+                  case "$gl_cv_func_strerror_r_works" in
+        *no) REPLACE_STRERROR=1 ;;
+      esac
+
+  else
+            REPLACE_STRERROR=1
+  fi
+
+  if test $REPLACE_STRERROR = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext"
+
+  fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_STRERROR 1
+_ACEOF
+
+
+
+
+
+
+
+          GNULIB_STRERROR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h
+
+
+
+
+
+  if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strerror-override.$ac_objext"
+
+
+
+
+
+  if test $ac_cv_header_sys_socket_h != yes; then
+                    for ac_header in winsock2.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_WINSOCK2_H 1
+_ACEOF
+
+fi
+
+done
+
+  fi
+  if test "$ac_cv_header_winsock2_h" = yes; then
+    HAVE_WINSOCK2_H=1
+    UNISTD_H_HAVE_WINSOCK2_H=1
+    SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+  else
+    HAVE_WINSOCK2_H=0
+  fi
+
+
+  fi
+
+
+
+
+
+
+
+  if test $ac_cv_have_decl_strerror_r = no; then
+    HAVE_DECL_STRERROR_R=0
+  fi
+
+  if test $ac_cv_func_strerror_r = yes; then
+    if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+      if test $gl_cv_func_strerror_r_posix_signature = yes; then
+        case "$gl_cv_func_strerror_r_works" in
+                    *no) REPLACE_STRERROR_R=1 ;;
+        esac
+      else
+                REPLACE_STRERROR_R=1
+      fi
+    else
+                  REPLACE_STRERROR_R=1
+    fi
+  fi
+
+  if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strerror_r.$ac_objext"
+
+
+
+
+
+
+  fi
+
+
+
+
+
+          GNULIB_STRERROR_R=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STRERROR_R 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_have_decl_strndup = no; then
+    HAVE_DECL_STRNDUP=0
+  fi
+
+  if test $ac_cv_func_strndup = yes; then
+    HAVE_STRNDUP=1
+    # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strndup" >&5
+$as_echo_n "checking for working strndup... " >&6; }
+if ${gl_cv_func_strndup_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+
+          case $host_os in
+            aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";;
+            *)               gl_cv_func_strndup_works="guessing yes";;
+          esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+         #include <string.h>
+                           #include <stdlib.h>
+int
+main ()
+{
+
+#if !HAVE_DECL_STRNDUP
+  extern
+  #ifdef __cplusplus
+  "C"
+  #endif
+  char *strndup (const char *, size_t);
+#endif
+  char *s;
+  s = strndup ("some longer string", 15);
+  free (s);
+  s = strndup ("shorter string", 13);
+  return s[13] != '\0';
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_strndup_works=yes
+else
+  gl_cv_func_strndup_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strndup_works" >&5
+$as_echo "$gl_cv_func_strndup_works" >&6; }
+    case $gl_cv_func_strndup_works in
+      *no) REPLACE_STRNDUP=1 ;;
+    esac
+  else
+    HAVE_STRNDUP=0
+  fi
+
+  if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_STRNDUP=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STRNDUP 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_have_decl_strnlen = no; then
+    HAVE_DECL_STRNLEN=0
+  else
+
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5
+$as_echo_n "checking for working strnlen... " >&6; }
+if ${ac_cv_func_strnlen_working+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  # Guess no on AIX systems, yes otherwise.
+		case "$host_os" in
+		  aix*) ac_cv_func_strnlen_working=no;;
+		  *)    ac_cv_func_strnlen_working=yes;;
+		esac
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
-#include <$ac_header>
+int
+main ()
+{
+
+#define S "foobar"
+#define S_LEN (sizeof S - 1)
+
+  /* At least one implementation is buggy: that of AIX 4.3 would
+     give strnlen (S, 1) == 3.  */
+
+  int i;
+  for (i = 0; i < S_LEN + 1; ++i)
+    {
+      int expected = i <= S_LEN ? i : S_LEN;
+      if (strnlen (S, i) != expected)
+	return 1;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_strnlen_working=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
+  ac_cv_func_strnlen_working=no
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
 
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strnlen_working" >&5
+$as_echo "$ac_cv_func_strnlen_working" >&6; }
+test $ac_cv_func_strnlen_working = no && :
+
+
+    if test $ac_cv_func_strnlen_working = no; then
+      REPLACE_STRNLEN=1
+    fi
   fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+  if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## -------------------------------- ##
-## Report this to bug-bison@gnu.org ##
-## -------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
 
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_STRNLEN=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STRNLEN 1" >>confdefs.h
+
+
+
+
+  for ac_func in strtoul
+do :
+  ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul"
+if test "x$ac_cv_func_strtoul" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_STRTOUL 1
+_ACEOF
+
+fi
+done
+
+
+  if test $ac_cv_func_strtoul = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strtoul.$ac_objext"
+
+  fi
+
+
+
+
+  for ac_func in strverscmp
+do :
+  ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp"
+if test "x$ac_cv_func_strverscmp" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRVERSCMP 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_strverscmp = no; then
+    HAVE_STRVERSCMP=0
+  fi
+
+  if test $HAVE_STRVERSCMP = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strverscmp.$ac_objext"
+
+
+  :
+
+  fi
+
+
+
+
+
+          GNULIB_STRVERSCMP=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STRVERSCMP 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5
+$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; }
+if ${gl_cv_next_sys_stat_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_sys_stat_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'sys/stat.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_sys_stat_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5
+$as_echo "$gl_cv_next_sys_stat_h" >&6; }
+     fi
+     NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sys/stat.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sys_stat_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+  if test $WINDOWS_64_BIT_ST_SIZE = 1; then
+
+$as_echo "#define _GL_WINDOWS_64_BIT_ST_SIZE 1" >>confdefs.h
+
+  fi
+
+      ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h>
+     #include <sys/stat.h>
+"
+if test "x$ac_cv_type_nlink_t" = xyes; then :
+
+else
+
+$as_echo "#define nlink_t int" >>confdefs.h
+
+fi
+
+
+
+    for gl_func in fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat     mknod mknodat stat utimensat; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_sys_types_h='<'sys/types.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5
+$as_echo_n "checking absolute name of <sys/types.h>... " >&6; }
+if ${gl_cv_next_sys_types_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'sys/types.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_sys_types_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5
+$as_echo "$gl_cv_next_sys_types_h" >&6; }
+     fi
+     NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sys/types.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sys_types_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_sys_wait_h='<'sys/wait.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/wait.h>" >&5
+$as_echo_n "checking absolute name of <sys/wait.h>... " >&6; }
+if ${gl_cv_next_sys_wait_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_sys_wait_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/wait.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'sys/wait.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_sys_wait_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_sys_wait_h='<'sys/wait.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_wait_h" >&5
+$as_echo "$gl_cv_next_sys_wait_h" >&6; }
+     fi
+     NEXT_SYS_WAIT_H=$gl_cv_next_sys_wait_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sys/wait.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sys_wait_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+    for gl_func in waitpid; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/wait.h>
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_unistd_h='<'unistd.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5
+$as_echo_n "checking absolute name of <unistd.h>... " >&6; }
+if ${gl_cv_next_unistd_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_unistd_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'unistd.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_unistd_h='<'unistd.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5
+$as_echo "$gl_cv_next_unistd_h" >&6; }
+     fi
+     NEXT_UNISTD_H=$gl_cv_next_unistd_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'unistd.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_unistd_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_unistd_h = yes; then
+    HAVE_UNISTD_H=1
+  else
+    HAVE_UNISTD_H=0
+  fi
+
+
+
+
+
+
+
+    for gl_func in chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat     fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups     gethostname getlogin getlogin_r getpagesize     getusershell setusershell endusershell     group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite     readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r     unlink unlinkat usleep; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+/* Some systems declare various items in the wrong headers.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <fcntl.h>
+# include <stdio.h>
+# include <stdlib.h>
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+      if  { test "$HAVE_LIBUNISTRING" != yes \
+    || {
+
+
+
+            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0
+                         }
+                    }
+               }
+
+
+
+
+       }
+  }; then
+    LIBUNISTRING_UNITYPES_H='unitypes.h'
+  else
+    LIBUNISTRING_UNITYPES_H=
+  fi
+
+
+
+
+      if  { test "$HAVE_LIBUNISTRING" != yes \
+    || {
+
+
+
+            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0
+                         }
+                    }
+               }
+
+
+
+
+       }
+  }; then
+    LIBUNISTRING_UNIWIDTH_H='uniwidth.h'
+  else
+    LIBUNISTRING_UNIWIDTH_H=
+  fi
+
+
+
+
+       if  { test "$HAVE_LIBUNISTRING" != yes \
+    || {
+
+
+
+            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4
+                         }
+                    }
+               }
+
+
+
+
+       }
+  }; then
+  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE=
+  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE='#'
+else
+  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE='#'
+  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE=
+fi
+
+
+
+
+$as_echo "#define USE_UNLOCKED_IO 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_have_decl_unsetenv = no; then
+    HAVE_DECL_UNSETENV=0
+  fi
+  for ac_func in unsetenv
+do :
+  ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv"
+if test "x$ac_cv_func_unsetenv" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_UNSETENV 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_unsetenv = no; then
+    HAVE_UNSETENV=0
+  else
+    HAVE_UNSETENV=1
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5
+$as_echo_n "checking for unsetenv() return type... " >&6; }
+if ${gt_cv_func_unsetenv_ret+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#undef _BSD
+#define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */
+#include <stdlib.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+int unsetenv (const char *name);
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_func_unsetenv_ret='int'
+else
+  gt_cv_func_unsetenv_ret='void'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_unsetenv_ret" >&5
+$as_echo "$gt_cv_func_unsetenv_ret" >&6; }
+    if test $gt_cv_func_unsetenv_ret = 'void'; then
+
+$as_echo "#define VOID_UNSETENV 1" >>confdefs.h
+
+      REPLACE_UNSETENV=1
+    fi
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether unsetenv obeys POSIX" >&5
+$as_echo_n "checking whether unsetenv obeys POSIX... " >&6; }
+if ${gl_cv_func_unsetenv_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                 # Guess yes on glibc systems.
+         *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;;
+                 # If we don't know, assume the worst.
+         *)      gl_cv_func_unsetenv_works="guessing no" ;;
+       esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+       #include <stdlib.h>
+       #include <errno.h>
+       extern char **environ;
+
+int
+main ()
+{
+
+       char entry1[] = "a=1";
+       char entry2[] = "b=2";
+       char *env[] = { entry1, entry2, NULL };
+       if (putenv ((char *) "a=1")) return 1;
+       if (putenv (entry2)) return 2;
+       entry2[0] = 'a';
+       unsetenv ("a");
+       if (getenv ("a")) return 3;
+       if (!unsetenv ("") || errno != EINVAL) return 4;
+       entry2[0] = 'b';
+       environ = env;
+       if (!getenv ("a")) return 5;
+       entry2[0] = 'a';
+       unsetenv ("a");
+       if (getenv ("a")) return 6;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_unsetenv_works=yes
+else
+  gl_cv_func_unsetenv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unsetenv_works" >&5
+$as_echo "$gl_cv_func_unsetenv_works" >&6; }
+    case "$gl_cv_func_unsetenv_works" in
+      *yes) ;;
+      *)
+        REPLACE_UNSETENV=1
+        ;;
+    esac
+  fi
+
+  if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS unsetenv.$ac_objext"
+
+
+
+
+
+  fi
+
+
+
+
+
+          GNULIB_UNSETENV=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h
+
+
+
+
+
+  if test $ac_cv_func_vasnprintf = no; then
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_cv_func_vfprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # vfprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_vfprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_vfprintf_posix = no; then
+
+
+
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h
+
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h
+
+      for ac_func in nl_langinfo
+do :
+  ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NL_LANGINFO 1
+_ACEOF
+
+fi
+done
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vfprintf.$ac_objext"
+
+  REPLACE_VFPRINTF=1
+
+$as_echo "#define REPLACE_VFPRINTF_POSIX 1" >>confdefs.h
+
+  :
+
+  fi
+
+
+
+
+
+
+          GNULIB_VFPRINTF_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_VFPRINTF_POSIX 1" >>confdefs.h
+
+
+
+
+
+  gl_cv_func_vsnprintf_usable=no
+  for ac_func in vsnprintf
+do :
+  ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
+if test "x$ac_cv_func_vsnprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VSNPRINTF 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_vsnprintf = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5
+$as_echo_n "checking whether snprintf respects a size of 1... " >&6; }
+if ${gl_cv_func_snprintf_size1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_func_snprintf_size1="guessing yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 1, "%d", 12345);
+  return buf[1] != 'E';
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_size1=yes
+else
+  gl_cv_func_snprintf_size1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5
+$as_echo "$gl_cv_func_snprintf_size1" >&6; }
+
+    case "$gl_cv_func_snprintf_size1" in
+      *yes)
+
+        case "$gl_cv_func_snprintf_retval_c99" in
+          *yes)
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5
+$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; }
+if ${gl_cv_func_printf_positions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
+                         gl_cv_func_printf_positions="guessing no";;
+           beos*)        gl_cv_func_printf_positions="guessing no";;
+           mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+           *)            gl_cv_func_printf_positions="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_positions=yes
+else
+  gl_cv_func_printf_positions=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5
+$as_echo "$gl_cv_func_printf_positions" >&6; }
+
+            case "$gl_cv_func_printf_positions" in
+              *yes)
+                gl_cv_func_vsnprintf_usable=yes
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_vsnprintf_usable = no; then
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vsnprintf.$ac_objext"
+
+  if test $ac_cv_func_vsnprintf = yes; then
+    REPLACE_VSNPRINTF=1
+  fi
+  :
+
+  fi
+
+  if test $ac_cv_have_decl_vsnprintf = no; then
+    HAVE_DECL_VSNPRINTF=0
+  fi
+
+
+
+
+
+
+          GNULIB_VSNPRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_VSNPRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_cv_func_vsnprintf_posix=no
+  for ac_func in vsnprintf
+do :
+  ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
+if test "x$ac_cv_func_vsnprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VSNPRINTF 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_vsnprintf = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf truncates the result as in C99" >&5
+$as_echo_n "checking whether snprintf truncates the result as in C99... " >&6; }
+if ${gl_cv_func_snprintf_truncation_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_snprintf_truncation_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_truncation_c99="guessing no";;
+           darwin*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           openbsd*)             gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           solaris*)             gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_truncation_c99="guessing no";;
+           aix*)                 gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on HP-UX >= 11.
+           hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";;
+           hpux*)                gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on OSF/1 >= 5.
+           osf[3-4]*)            gl_cv_func_snprintf_truncation_c99="guessing no";;
+           osf*)                 gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_truncation_c99="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char buf[100];
+int main ()
+{
+  strcpy (buf, "ABCDEF");
+  my_snprintf (buf, 3, "%d %d", 4567, 89);
+  if (memcmp (buf, "45\0DEF", 6) != 0)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_truncation_c99=yes
+else
+  gl_cv_func_snprintf_truncation_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_truncation_c99" >&5
+$as_echo "$gl_cv_func_snprintf_truncation_c99" >&6; }
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf fully supports the 'n' directive" >&5
+$as_echo_n "checking whether snprintf fully supports the 'n' directive... " >&6; }
+if ${gl_cv_func_snprintf_directive_n+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_snprintf_directive_n="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_directive_n="guessing no";;
+           darwin*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_snprintf_directive_n="guessing no";;
+           solaris*)             gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_directive_n="guessing no";;
+           aix*)                 gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on OSF/1 >= 5.
+           osf[3-4]*)            gl_cv_func_snprintf_directive_n="guessing no";;
+           osf*)                 gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_directive_n="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_directive_n="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char fmtstring[10];
+static char buf[100];
+int main ()
+{
+  int count = -1;
+  /* Copy the format string.  Some systems (glibc with _FORTIFY_SOURCE=2)
+     support %n in format strings in read-only memory but not in writable
+     memory.  */
+  strcpy (fmtstring, "%d %n");
+  my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55);
+  if (count != 6)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_directive_n=yes
+else
+  gl_cv_func_snprintf_directive_n=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_directive_n" >&5
+$as_echo "$gl_cv_func_snprintf_directive_n" >&6; }
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5
+$as_echo_n "checking whether snprintf respects a size of 1... " >&6; }
+if ${gl_cv_func_snprintf_size1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_func_snprintf_size1="guessing yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 1, "%d", 12345);
+  return buf[1] != 'E';
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_size1=yes
+else
+  gl_cv_func_snprintf_size1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5
+$as_echo "$gl_cv_func_snprintf_size1" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf respects a zero size as in C99" >&5
+$as_echo_n "checking whether vsnprintf respects a zero size as in C99... " >&6; }
+if ${gl_cv_func_vsnprintf_zerosize_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           darwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Cygwin.
+           cygwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           solaris*)             gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           aix*)                 gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           netbsd*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on mingw.
+           mingw* | pw*)         gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdarg.h>
+#include <stdio.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 0, "%d", 12345);
+  return buf[0] != 'D';
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_vsnprintf_zerosize_c99=yes
+else
+  gl_cv_func_vsnprintf_zerosize_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_vsnprintf_zerosize_c99" >&5
+$as_echo "$gl_cv_func_vsnprintf_zerosize_c99" >&6; }
+
+    case "$gl_cv_func_printf_sizes_c99" in
+      *yes)
+        case "$gl_cv_func_printf_long_double" in
+          *yes)
+            case "$gl_cv_func_printf_infinite" in
+              *yes)
+                case "$gl_cv_func_printf_infinite_long_double" in
+                  *yes)
+                    case "$gl_cv_func_printf_directive_a" in
+                      *yes)
+                        case "$gl_cv_func_printf_directive_f" in
+                          *yes)
+                            case "$gl_cv_func_printf_directive_n" in
+                              *yes)
+                                case "$gl_cv_func_printf_directive_ls" in
+                                  *yes)
+                                    case "$gl_cv_func_printf_positions" in
+                                      *yes)
+                                        case "$gl_cv_func_printf_flag_grouping" in
+                                          *yes)
+                                            case "$gl_cv_func_printf_flag_leftadjust" in
+                                              *yes)
+                                                case "$gl_cv_func_printf_flag_zero" in
+                                                  *yes)
+                                                    case "$gl_cv_func_printf_precision" in
+                                                      *yes)
+                                                        case "$gl_cv_func_printf_enomem" in
+                                                          *yes)
+                                                            case "$gl_cv_func_snprintf_truncation_c99" in
+                                                              *yes)
+                                                                case "$gl_cv_func_snprintf_retval_c99" in
+                                                                  *yes)
+                                                                    case "$gl_cv_func_snprintf_directive_n" in
+                                                                      *yes)
+                                                                        case "$gl_cv_func_snprintf_size1" in
+                                                                          *yes)
+                                                                            case "$gl_cv_func_vsnprintf_zerosize_c99" in
+                                                                              *yes)
+                                                                                # vsnprintf exists and is
+                                                                                # already POSIX compliant.
+                                                                                gl_cv_func_vsnprintf_posix=yes
+                                                                                ;;
+                                                                            esac
+                                                                            ;;
+                                                                        esac
+                                                                        ;;
+                                                                    esac
+                                                                    ;;
+                                                                esac
+                                                                ;;
+                                                            esac
+                                                            ;;
+                                                        esac
+                                                        ;;
+                                                    esac
+                                                    ;;
+                                                esac
+                                                ;;
+                                            esac
+                                            ;;
+                                        esac
+                                        ;;
+                                    esac
+                                    ;;
+                                esac
+                                ;;
+                            esac
+                            ;;
+                        esac
+                        ;;
+                    esac
+                    ;;
+                esac
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_vsnprintf_posix = no; then
+
+
+
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h
+
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h
+
+      for ac_func in nl_langinfo
+do :
+  ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NL_LANGINFO 1
+_ACEOF
+
+fi
+done
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vsnprintf.$ac_objext"
+
+  if test $ac_cv_func_vsnprintf = yes; then
+    REPLACE_VSNPRINTF=1
+  fi
+  :
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_cv_func_vsprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # vsprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_vsprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_vsprintf_posix = no; then
+
+
+
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h
+
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h
+
+      for ac_func in nl_langinfo
+do :
+  ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NL_LANGINFO 1
+_ACEOF
+
+fi
+done
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vsprintf.$ac_objext"
+
+  REPLACE_VSPRINTF=1
+  :
+
+  fi
+
+
+
+
+
+
+          GNULIB_VSPRINTF_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_VSPRINTF_POSIX 1" >>confdefs.h
+
+
+
+
+
+  for ac_func in waitid
+do :
+  ac_fn_c_check_func "$LINENO" "waitid" "ac_cv_func_waitid"
+if test "x$ac_cv_func_waitid" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_WAITID 1
+_ACEOF
+
+fi
+done
+
+
+
+
+  HAVE_WAITPID=1
+  case $host_os in
+    mingw*) HAVE_WAITPID=0 ;;
+  esac
+
+  if test $HAVE_WAITPID = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS waitpid.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_WAITPID=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_WAITPID 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wchar_h='<'wchar.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
+$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
+if ${gl_cv_next_wchar_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_wchar_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wchar.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'wchar.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_wchar_h='<'wchar.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
+$as_echo "$gl_cv_next_wchar_h" >&6; }
+     fi
+     NEXT_WCHAR_H=$gl_cv_next_wchar_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wchar.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wchar_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+    for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb      wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset      wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp      wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr      wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth     ; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+  if test $ac_cv_func_iswcntrl = yes; then
+    HAVE_ISWCNTRL=1
+  else
+    HAVE_ISWCNTRL=0
+  fi
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wctype_h='<'wctype.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
+$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
+if ${gl_cv_next_wctype_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_wctype_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wctype.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'wctype.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_wctype_h='<'wctype.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
+$as_echo "$gl_cv_next_wctype_h" >&6; }
+     fi
+     NEXT_WCTYPE_H=$gl_cv_next_wctype_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wctype.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wctype_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_wctype_h = yes; then
+    if test $ac_cv_func_iswcntrl = yes; then
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
+$as_echo_n "checking whether iswcntrl works... " >&6; }
+if ${gl_cv_func_iswcntrl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test "$cross_compiling" = yes; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+                          #if __GNU_LIBRARY__ == 1
+                          Linux libc5 i18n is broken.
+                          #endif
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_iswcntrl_works="guessing yes"
+else
+  gl_cv_func_iswcntrl_works="guessing no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                  included before <wchar.h>.
+                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                  must be included before <wchar.h>.  */
+               #include <stddef.h>
+               #include <stdio.h>
+               #include <time.h>
+               #include <wchar.h>
+               #include <wctype.h>
+               int main () { return iswprint ('x') == 0; }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_iswcntrl_works=yes
+else
+  gl_cv_func_iswcntrl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
+$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
+    fi
+    HAVE_WCTYPE_H=1
+  else
+    HAVE_WCTYPE_H=0
+  fi
+
+
+  case "$gl_cv_func_iswcntrl_works" in
+    *yes) REPLACE_ISWCNTRL=0 ;;
+    *)    REPLACE_ISWCNTRL=1 ;;
+  esac
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+        :
+  fi
+
+  if test $REPLACE_ISWCNTRL = 1; then
+    REPLACE_TOWLOWER=1
+  else
+    for ac_func in towlower
+do :
+  ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
+if test "x$ac_cv_func_towlower" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_TOWLOWER 1
+_ACEOF
+
+fi
+done
+
+    if test $ac_cv_func_towlower = yes; then
+      REPLACE_TOWLOWER=0
+    else
+      ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+             included before <wchar.h>.
+             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+             must be included before <wchar.h>.  */
+          #include <stddef.h>
+          #include <stdio.h>
+          #include <time.h>
+          #include <wchar.h>
+          #if HAVE_WCTYPE_H
+          # include <wctype.h>
+          #endif
+
+"
+if test "x$ac_cv_have_decl_towlower" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TOWLOWER $ac_have_decl
+_ACEOF
+
+      if test $ac_cv_have_decl_towlower = yes; then
+                                REPLACE_TOWLOWER=1
+      else
+        REPLACE_TOWLOWER=0
+      fi
+    fi
+  fi
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+        :
+  fi
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
+$as_echo_n "checking for wctype_t... " >&6; }
+if ${gl_cv_type_wctype_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #if HAVE_WCTYPE_H
+            # include <wctype.h>
+            #endif
+            wctype_t a;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wctype_t=yes
+else
+  gl_cv_type_wctype_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
+$as_echo "$gl_cv_type_wctype_t" >&6; }
+  if test $gl_cv_type_wctype_t = no; then
+    HAVE_WCTYPE_T=0
+  fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
+$as_echo_n "checking for wctrans_t... " >&6; }
+if ${gl_cv_type_wctrans_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #include <wctype.h>
+            wctrans_t a;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wctrans_t=yes
+else
+  gl_cv_type_wctrans_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
+$as_echo "$gl_cv_type_wctrans_t" >&6; }
+  if test $gl_cv_type_wctrans_t = no; then
+    HAVE_WCTRANS_T=0
+  fi
+
+
+    for gl_func in wctype iswctype wctrans towctrans     ; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if eval \${$as_gl_Symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+#include <wctype.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_decl "$LINENO" "wcwidth" "ac_cv_have_decl_wcwidth" "
+/* AIX 3.2.5 declares wcwidth in <string.h>. */
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+"
+if test "x$ac_cv_have_decl_wcwidth" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_WCWIDTH $ac_have_decl
+_ACEOF
+
+  if test $ac_cv_have_decl_wcwidth != yes; then
+    HAVE_DECL_WCWIDTH=0
+  fi
+
+  if test $ac_cv_func_wcwidth = yes; then
+    HAVE_WCWIDTH=1
+                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5
+$as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; }
+if ${gl_cv_func_wcwidth_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+        if test "$cross_compiling" = yes; then :
+
+           case "$host_os" in
+                     # Guess yes on glibc and AIX 7 systems.
+             *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
+             *)                  gl_cv_func_wcwidth_works="guessing no";;
+           esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+/* AIX 3.2.5 declares wcwidth in <string.h>. */
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#if !HAVE_DECL_WCWIDTH
+extern
+# ifdef __cplusplus
+"C"
+# endif
+int wcwidth (int);
+#endif
+int main ()
+{
+  int result = 0;
+  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
+    {
+      if (wcwidth (0x0301) > 0)
+        result |= 1;
+      if (wcwidth (0x05B0) > 0)
+        result |= 2;
+      if (wcwidth (0x200B) > 0)
+        result |= 4;
+    }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_wcwidth_works=yes
+else
+  gl_cv_func_wcwidth_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_works" >&5
+$as_echo "$gl_cv_func_wcwidth_works" >&6; }
+    case "$gl_cv_func_wcwidth_works" in
+      *yes) ;;
+      *no) REPLACE_WCWIDTH=1 ;;
+    esac
+  else
+    HAVE_WCWIDTH=0
+  fi
+
+  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_WCWIDTH=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_WCWIDTH 1" >>confdefs.h
+
+
+
+  :
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS xmemdup0.$ac_objext"
+
+
+
+  for ac_header in stdint.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H 1
 _ACEOF
 
 fi
@@ -8049,21 +34319,94 @@
 done
 
 
-for ac_header in sys/resource.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+  :
+
+
+  # End of code from modules
+
+
+
+
+
+
+
+
+
+  gltests_libdeps=
+  gltests_ltlibdeps=
+
+
+
+
+
+
+
+
+
+  gl_source_base='tests'
+  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+
+  gl_module_indicator_condition=$gltests_WITNESS
+
+
+
+
+
+
+
+
+
+  LIBBISON_LIBDEPS="$gl_libdeps"
+
+  LIBBISON_LTLIBDEPS="$gl_ltlibdeps"
+
+
+
+# Checks for library functions.
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted" >&5
+$as_echo_n "checking if malloc debugging is wanted... " >&6; }
+
+# Check whether --with-dmalloc was given.
+if test "${with_dmalloc+set}" = set; then :
+  withval=$with_dmalloc; if test "$withval" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define WITH_DMALLOC 1" >>confdefs.h
+
+  LIBS="$LIBS -ldmalloc"
+  LDFLAGS="$LDFLAGS -g"
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+for ac_header in sys/time.h sys/times.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
+
+fi
+
+done
+
+ for ac_header in sys/resource.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default
 #if HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
@@ -8071,164 +34414,29 @@
 # include <sys/times.h>
 #endif
 
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+"
+if test "x$ac_cv_header_sys_resource_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_SYS_RESOURCE_H 1
 _ACEOF
 
 fi
 
 done
 
-
 for ac_func in times
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+do :
+  ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times"
+if test "x$ac_cv_func_times" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define HAVE_TIMES 1
 _ACEOF
 
 fi
 done
 
 
-echo "$as_me:$LINENO: checking whether getrusage is declared" >&5
-echo $ECHO_N "checking whether getrusage is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_getrusage+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
+ac_fn_c_check_decl "$LINENO" "getrusage" "ac_cv_have_decl_getrusage" "$ac_includes_default
 #if HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
@@ -8239,76 +34447,17 @@
 # include <sys/resource.h>
 #endif
 
-
-int
-main ()
-{
-#ifndef getrusage
-  char *p = (char *) getrusage;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_getrusage=yes
+"
+if test "x$ac_cv_have_decl_getrusage" = xyes; then :
+  ac_have_decl=1
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_getrusage=no
+  ac_have_decl=0
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getrusage" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getrusage" >&6
-if test $ac_cv_have_decl_getrusage = yes; then
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETRUSAGE 1
+#define HAVE_DECL_GETRUSAGE $ac_have_decl
 _ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETRUSAGE 0
-_ACEOF
-
-
-fi
-echo "$as_me:$LINENO: checking whether times is declared" >&5
-echo $ECHO_N "checking whether times is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_times+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
+ac_fn_c_check_decl "$LINENO" "times" "ac_cv_have_decl_times" "$ac_includes_default
 #if HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
@@ -8319,76 +34468,17 @@
 # include <sys/resource.h>
 #endif
 
-
-int
-main ()
-{
-#ifndef times
-  char *p = (char *) times;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_times=yes
+"
+if test "x$ac_cv_have_decl_times" = xyes; then :
+  ac_have_decl=1
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_times=no
+  ac_have_decl=0
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_times" >&5
-echo "${ECHO_T}$ac_cv_have_decl_times" >&6
-if test $ac_cv_have_decl_times = yes; then
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TIMES 1
+#define HAVE_DECL_TIMES $ac_have_decl
 _ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TIMES 0
-_ACEOF
-
-
-fi
-echo "$as_me:$LINENO: checking whether clock is declared" >&5
-echo $ECHO_N "checking whether clock is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_clock+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
+ac_fn_c_check_decl "$LINENO" "clock" "ac_cv_have_decl_clock" "$ac_includes_default
 #if HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
@@ -8399,76 +34489,17 @@
 # include <sys/resource.h>
 #endif
 
-
-int
-main ()
-{
-#ifndef clock
-  char *p = (char *) clock;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_clock=yes
+"
+if test "x$ac_cv_have_decl_clock" = xyes; then :
+  ac_have_decl=1
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_clock=no
+  ac_have_decl=0
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_clock" >&5
-echo "${ECHO_T}$ac_cv_have_decl_clock" >&6
-if test $ac_cv_have_decl_clock = yes; then
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CLOCK 1
+#define HAVE_DECL_CLOCK $ac_have_decl
 _ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CLOCK 0
-_ACEOF
-
-
-fi
-echo "$as_me:$LINENO: checking whether sysconf is declared" >&5
-echo $ECHO_N "checking whether sysconf is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_sysconf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
+ac_fn_c_check_decl "$LINENO" "sysconf" "ac_cv_have_decl_sysconf" "$ac_includes_default
 #if HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
@@ -8479,79 +34510,19 @@
 # include <sys/resource.h>
 #endif
 
-
-int
-main ()
-{
-#ifndef sysconf
-  char *p = (char *) sysconf;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_sysconf=yes
+"
+if test "x$ac_cv_have_decl_sysconf" = xyes; then :
+  ac_have_decl=1
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_sysconf=no
+  ac_have_decl=0
 fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_sysconf" >&5
-echo "${ECHO_T}$ac_cv_have_decl_sysconf" >&6
-if test $ac_cv_have_decl_sysconf = yes; then
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYSCONF 1
+#define HAVE_DECL_SYSCONF $ac_have_decl
 _ACEOF
 
 
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYSCONF 0
-_ACEOF
-
-
-fi
-
-
-
-echo "$as_me:$LINENO: checking for clock_t" >&5
-echo $ECHO_N "checking for clock_t... $ECHO_C" >&6
-if test "${ac_cv_type_clock_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
+ac_fn_c_check_type "$LINENO" "clock_t" "ac_cv_type_clock_t" "$ac_includes_default
 #if HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
@@ -8562,51 +34533,8 @@
 # include <sys/resource.h>
 #endif
 
-
-int
-main ()
-{
-if ((clock_t *) 0)
-  return 0;
-if (sizeof (clock_t))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_clock_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_clock_t=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_clock_t" >&5
-echo "${ECHO_T}$ac_cv_type_clock_t" >&6
-if test $ac_cv_type_clock_t = yes; then
+"
+if test "x$ac_cv_type_clock_t" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_CLOCK_T 1
@@ -8614,18 +34542,7 @@
 
 
 fi
-echo "$as_me:$LINENO: checking for struct tms" >&5
-echo $ECHO_N "checking for struct tms... $ECHO_C" >&6
-if test "${ac_cv_type_struct_tms+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
+ac_fn_c_check_type "$LINENO" "struct tms" "ac_cv_type_struct_tms" "$ac_includes_default
 #if HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
@@ -8636,51 +34553,8 @@
 # include <sys/resource.h>
 #endif
 
-
-int
-main ()
-{
-if ((struct tms *) 0)
-  return 0;
-if (sizeof (struct tms))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_struct_tms=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_struct_tms=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_struct_tms" >&5
-echo "${ECHO_T}$ac_cv_type_struct_tms" >&6
-if test $ac_cv_type_struct_tms = yes; then
+"
+if test "x$ac_cv_type_struct_tms" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_TMS 1
@@ -8691,941 +34565,48 @@
 
 
 
-# gnulib and gettext.
+# Gettext.
+# We use gnulib, which is only guaranteed to work properly with the
+# latest Gettext.
 
-    echo "$as_me:$LINENO: checking whether system is Windows or MSDOS" >&5
-echo $ECHO_N "checking whether system is Windows or MSDOS... $ECHO_C" >&6
-if test "${ac_cv_win_or_dos+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__
-neither MSDOS nor Windows
-#endif
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_win_or_dos=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_win_or_dos=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_win_or_dos" >&5
-echo "${ECHO_T}$ac_cv_win_or_dos" >&6
-
-    if test x"$ac_cv_win_or_dos" = xyes; then
-      ac_fs_accepts_drive_letter_prefix=1
-      ac_fs_backslash_is_file_name_separator=1
-    else
-      ac_fs_accepts_drive_letter_prefix=0
-      ac_fs_backslash_is_file_name_separator=0
-    fi
-
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX $ac_fs_accepts_drive_letter_prefix
-_ACEOF
-
-
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR $ac_fs_backslash_is_file_name_separator
-_ACEOF
-
-
-echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5
-echo $ECHO_N "checking whether strerror_r is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_strerror_r+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef strerror_r
-  char *p = (char *) strerror_r;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_strerror_r=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_strerror_r=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror_r" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strerror_r" >&6
-if test $ac_cv_have_decl_strerror_r = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRERROR_R 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRERROR_R 0
-_ACEOF
-
-
-fi
-
-
-
-for ac_func in strerror_r
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-echo "$as_me:$LINENO: checking whether strerror_r returns char *" >&5
-echo $ECHO_N "checking whether strerror_r returns char *... $ECHO_C" >&6
-if test "${ac_cv_func_strerror_r_char_p+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-    ac_cv_func_strerror_r_char_p=no
-    if test $ac_cv_have_decl_strerror_r = yes; then
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-
-	  char buf[100];
-	  char x = *strerror_r (0, buf, sizeof buf);
-	  char *p = strerror_r (0, buf, sizeof buf);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_strerror_r_char_p=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-    else
-      # strerror_r is not declared.  Choose between
-      # systems that have relatively inaccessible declarations for the
-      # function.  BeOS and DEC UNIX 4.0 fall in this category, but the
-      # former has a strerror_r that returns char*, while the latter
-      # has a strerror_r that returns `int'.
-      # This test should segfault on the DEC system.
-      if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-	extern char *strerror_r ();
-int
-main ()
-{
-char buf[100];
-	  char x = *strerror_r (0, buf, sizeof buf);
-	  exit (!isalpha (x));
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_strerror_r_char_p=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-    fi
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r_char_p" >&5
-echo "${ECHO_T}$ac_cv_func_strerror_r_char_p" >&6
-if test $ac_cv_func_strerror_r_char_p = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STRERROR_R_CHAR_P 1
-_ACEOF
-
-fi
-
-
-  if test -z "$GETOPT_H"; then
-
-for ac_header in getopt.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## -------------------------------- ##
-## Report this to bug-bison@gnu.org ##
-## -------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
 esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  GETOPT_H=getopt.h
-fi
-
-done
-
-  fi
-
-  if test -z "$GETOPT_H"; then
-
-for ac_func in getopt_long_only
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  GETOPT_H=getopt.h
-fi
-done
-
-  fi
-
-      if test -z "$GETOPT_H"; then
-    echo "$as_me:$LINENO: checking whether optreset is declared" >&5
-echo $ECHO_N "checking whether optreset is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_optreset+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <getopt.h>
-
-int
-main ()
-{
-#ifndef optreset
-  char *p = (char *) optreset;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_optreset=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_optreset=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_optreset" >&5
-echo "${ECHO_T}$ac_cv_have_decl_optreset" >&6
-if test $ac_cv_have_decl_optreset = yes; then
-  GETOPT_H=getopt.h
-fi
-
-  fi
-
-      if test -z "$GETOPT_H"; then
-    echo "$as_me:$LINENO: checking for working GNU getopt function" >&5
-echo $ECHO_N "checking for working GNU getopt function... $ECHO_C" >&6
-if test "${gl_cv_func_gnu_getopt+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  	 	 	 echo "$as_me:$LINENO: checking whether getopt_clip is declared" >&5
-echo $ECHO_N "checking whether getopt_clip is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_getopt_clip+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <getopt.h>
-
-int
-main ()
-{
-#ifndef getopt_clip
-  char *p = (char *) getopt_clip;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_getopt_clip=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_getopt_clip=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getopt_clip" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getopt_clip" >&6
-if test $ac_cv_have_decl_getopt_clip = yes; then
-  gl_cv_func_gnu_getopt=no
-else
-  gl_cv_func_gnu_getopt=yes
-fi
-
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <getopt.h>
-int
-main ()
-{
-
-	     char *myargv[3];
-	     myargv[0] = "conftest";
-	     myargv[1] = "-+";
-	     myargv[2] = 0;
-	     return getopt (2, myargv, "+a") != '?';
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  gl_cv_func_gnu_getopt=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-gl_cv_func_gnu_getopt=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $gl_cv_func_gnu_getopt" >&5
-echo "${ECHO_T}$gl_cv_func_gnu_getopt" >&6
-    if test "$gl_cv_func_gnu_getopt" = "no"; then
-      GETOPT_H=getopt.h
-    fi
-  fi
 
 
-      echo "$as_me:$LINENO: checking whether getenv is declared" >&5
-echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_getenv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef getenv
-  char *p = (char *) getenv;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_getenv=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_getenv=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6
-if test $ac_cv_have_decl_getenv = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETENV 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETENV 0
-_ACEOF
-
-
-fi
-
-
-
-
-
-        MKINSTALLDIRS=
-  if test -n "$ac_aux_dir"; then
-    case "$ac_aux_dir" in
-      /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
-      *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
-    esac
-  fi
-  if test -z "$MKINSTALLDIRS"; then
-    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-  fi
-
-
-
-  echo "$as_me:$LINENO: checking whether NLS is requested" >&5
-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
-    # Check whether --enable-nls or --disable-nls was given.
-if test "${enable_nls+set}" = set; then
-  enableval="$enable_nls"
-  USE_NLS=$enableval
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+  enableval=$enable_nls; USE_NLS=$enableval
 else
   USE_NLS=yes
-fi;
-  echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
 
 
 
 
+      GETTEXT_MACRO_VERSION=0.18
+
+
 
 
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
 # Find out how to test for executable files. Don't use a zero-byte file,
@@ -9644,10 +34625,10 @@
 
 # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_MSGFMT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGFMT+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   case "$MSGFMT" in
   [\\/]* | ?:[\\/]*)
@@ -9676,19 +34657,19 @@
 fi
 MSGFMT="$ac_cv_path_MSGFMT"
 if test "$MSGFMT" != ":"; then
-  echo "$as_me:$LINENO: result: $MSGFMT" >&5
-echo "${ECHO_T}$MSGFMT" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_GMSGFMT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GMSGFMT+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   case $GMSGFMT in
   [\\/]* | ?:[\\/]*)
@@ -9700,43 +34681,54 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
   test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
   ;;
 esac
 fi
 GMSGFMT=$ac_cv_path_GMSGFMT
-
 if test -n "$GMSGFMT"; then
-  echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-echo "${ECHO_T}$GMSGFMT" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 
+    case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+
+
+
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
 # Find out how to test for executable files. Don't use a zero-byte file,
@@ -9755,10 +34747,10 @@
 
 # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_XGETTEXT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XGETTEXT+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   case "$XGETTEXT" in
   [\\/]* | ?:[\\/]*)
@@ -9787,28 +34779,33 @@
 fi
 XGETTEXT="$ac_cv_path_XGETTEXT"
 if test "$XGETTEXT" != ":"; then
-  echo "$as_me:$LINENO: result: $XGETTEXT" >&5
-echo "${ECHO_T}$XGETTEXT" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
     rm -f messages.po
 
+    case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+
+
 
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
 # Find out how to test for executable files. Don't use a zero-byte file,
@@ -9827,10 +34824,10 @@
 
 # Extract the first word of "msgmerge", so it can be a program name with args.
 set dummy msgmerge; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_MSGMERGE+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGMERGE+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   case "$MSGMERGE" in
   [\\/]* | ?:[\\/]*)
@@ -9858,276 +34855,26 @@
 fi
 MSGMERGE="$ac_cv_path_MSGMERGE"
 if test "$MSGMERGE" != ":"; then
-  echo "$as_me:$LINENO: result: $MSGMERGE" >&5
-echo "${ECHO_T}$MSGMERGE" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
-      if test "$GMSGFMT" != ":"; then
-            if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
-       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
-      : ;
-    else
-      GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
-      echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
-echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
-      GMSGFMT=":"
-    fi
-  fi
-
-      if test "$XGETTEXT" != ":"; then
-            if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
-       (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
-      : ;
-    else
-      echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
-echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
-      XGETTEXT=":"
-    fi
-        rm -f messages.po
-  fi
-
-            ac_config_commands="$ac_config_commands default-1"
+        test -n "$localedir" || localedir='${datadir}/locale'
 
 
-
-      if test "X$prefix" = "XNONE"; then
-    acl_final_prefix="$ac_default_prefix"
-  else
-    acl_final_prefix="$prefix"
-  fi
-  if test "X$exec_prefix" = "XNONE"; then
-    acl_final_exec_prefix='${prefix}'
-  else
-    acl_final_exec_prefix="$exec_prefix"
-  fi
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
-  prefix="$acl_save_prefix"
-
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
-   { (exit 1); exit 1; }; }
-
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
-  ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+    test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
 
 
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
-  ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
-  withval="$with_gnu_ld"
-  test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi;
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  echo "$as_me:$LINENO: checking for ld used by GCC" >&5
-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | [A-Za-z]:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
-else
-  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
-fi
-if test "${acl_cv_path_LD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -z "$LD"; then
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      acl_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break ;;
-      *)
-	test "$with_gnu_ld" != yes && break ;;
-      esac
-    fi
-  done
-  IFS="$ac_save_ifs"
-else
-  acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
-  echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
-if test "${acl_cv_prog_gnu_ld+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  acl_cv_prog_gnu_ld=yes ;;
-*)
-  acl_cv_prog_gnu_ld=no ;;
-esac
-fi
-echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6
-with_gnu_ld=$acl_cv_prog_gnu_ld
+  ac_config_commands="$ac_config_commands po-directories"
 
 
 
 
-                                                echo "$as_me:$LINENO: checking for shared library run path origin" >&5
-echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6
-if test "${acl_cv_rpath+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
 
-    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
-    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
-    . ./conftest.sh
-    rm -f ./conftest.sh
-    acl_cv_rpath=done
-
-fi
-echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
-echo "${ECHO_T}$acl_cv_rpath" >&6
-  wl="$acl_cv_wl"
-  libext="$acl_cv_libext"
-  shlibext="$acl_cv_shlibext"
-  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
-  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
-  hardcode_direct="$acl_cv_hardcode_direct"
-  hardcode_minus_L="$acl_cv_hardcode_minus_L"
-    # Check whether --enable-rpath or --disable-rpath was given.
-if test "${enable_rpath+set}" = set; then
-  enableval="$enable_rpath"
-  :
-else
-  enable_rpath=yes
-fi;
-
-
-                  acl_libdirstem=lib
-  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
-  if test -n "$searchpath"; then
-    acl_save_IFS="${IFS= 	}"; IFS=":"
-    for searchdir in $searchpath; do
-      if test -d "$searchdir"; then
-        case "$searchdir" in
-          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
-          *) searchdir=`cd "$searchdir" && pwd`
-             case "$searchdir" in
-               */lib64 ) acl_libdirstem=lib64 ;;
-             esac ;;
-        esac
-      fi
-    done
-    IFS="$acl_save_IFS"
-  fi
 
 
 
@@ -10150,10 +34897,9 @@
   prefix="$acl_save_prefix"
 
 
-# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then
-  withval="$with_libiconv_prefix"
-
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then :
+  withval=$with_libiconv_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
     else
@@ -10173,13 +34919,20 @@
       else
         additional_includedir="$withval/include"
         additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
       fi
     fi
 
-fi;
+fi
+
       LIBICONV=
   LTLIBICONV=
   INCICONV=
+  LIBICONV_PREFIX=
+      HAVE_LIBICONV=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
@@ -10197,7 +34950,7 @@
       done
       if test -z "$already_handled"; then
         names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
         eval value=\"\$HAVE_LIB$uppername\"
         if test -n "$value"; then
           if test "$value" = yes; then
@@ -10213,22 +34966,52 @@
           found_la=
           found_so=
           found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
           if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
-              found_dir="$additional_libdir"
-              found_so="$additional_libdir/lib$name.$shlibext"
-              if test -f "$additional_libdir/lib$name.la"; then
-                found_la="$additional_libdir/lib$name.la"
-              fi
-            else
-              if test -f "$additional_libdir/lib$name.$libext"; then
-                found_dir="$additional_libdir"
-                found_a="$additional_libdir/lib$name.$libext"
-                if test -f "$additional_libdir/lib$name.la"; then
-                  found_la="$additional_libdir/lib$name.la"
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
                 fi
               fi
             fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
           fi
           if test "X$found_dir" = "X"; then
             for x in $LDFLAGS $LTLIBICONV; do
@@ -10244,21 +35027,44 @@
               case "$x" in
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
-                    found_dir="$dir"
-                    found_so="$dir/lib$name.$shlibext"
-                    if test -f "$dir/lib$name.la"; then
-                      found_la="$dir/lib$name.la"
-                    fi
-                  else
-                    if test -f "$dir/lib$name.$libext"; then
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
                       found_dir="$dir"
-                      found_a="$dir/lib$name.$libext"
-                      if test -f "$dir/lib$name.la"; then
-                        found_la="$dir/lib$name.la"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
                       fi
                     fi
                   fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
                   ;;
               esac
               if test "X$found_dir" != "X"; then
@@ -10269,7 +35075,9 @@
           if test "X$found_dir" != "X"; then
                         LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
             if test "X$found_so" != "X"; then
-                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                                        if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
                                 LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
               else
                                                                                 haveit=
@@ -10282,10 +35090,10 @@
                 if test -z "$haveit"; then
                   ltrpathdirs="$ltrpathdirs $found_dir"
                 fi
-                                if test "$hardcode_direct" = yes; then
+                                if test "$acl_hardcode_direct" = yes; then
                                                       LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
                 else
-                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
                                                             LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
                                                             haveit=
                     for x in $rpathdirs; do
@@ -10317,7 +35125,7 @@
                     if test -z "$haveit"; then
                       LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
                     fi
-                    if test "$hardcode_minus_L" != no; then
+                    if test "$acl_hardcode_minus_L" != no; then
                                                                                         LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
                     else
                                                                                                                                                                                 LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
@@ -10336,6 +35144,16 @@
             case "$found_dir" in
               */$acl_libdirstem | */$acl_libdirstem/)
                 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
+                fi
                 additional_includedir="$basedir/include"
                 ;;
             esac
@@ -10384,9 +35202,11 @@
                 case "$dep" in
                   -L*)
                     additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
@@ -10486,21 +35306,21 @@
     done
   done
   if test "X$rpathdirs" != "X"; then
-    if test -n "$hardcode_libdir_separator"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
                         alldirs=
       for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
       done
             acl_save_libdir="$libdir"
       libdir="$alldirs"
-      eval flag=\"$hardcode_libdir_flag_spec\"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
       libdir="$acl_save_libdir"
       LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
     else
             for found_dir in $rpathdirs; do
         acl_save_libdir="$libdir"
         libdir="$found_dir"
-        eval flag=\"$hardcode_libdir_flag_spec\"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
         libdir="$acl_save_libdir"
         LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
       done
@@ -10542,1562 +35362,16 @@
 
 
 
-
-
-  echo "$as_me:$LINENO: checking for inttypes.h" >&5
-echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
-if test "${gl_cv_header_inttypes_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <sys/types.h>
-#include <inttypes.h>
-int
-main ()
-{
-uintmax_t i = (uintmax_t) -1;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  gl_cv_header_inttypes_h=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-gl_cv_header_inttypes_h=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $gl_cv_header_inttypes_h" >&5
-echo "${ECHO_T}$gl_cv_header_inttypes_h" >&6
-  if test $gl_cv_header_inttypes_h = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_INTTYPES_H_WITH_UINTMAX 1
-_ACEOF
-
-  fi
-
-
-  echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6
-if test "${gl_cv_header_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <stdint.h>
-int
-main ()
-{
-uintmax_t i = (uintmax_t) -1;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  gl_cv_header_stdint_h=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-gl_cv_header_stdint_h=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $gl_cv_header_stdint_h" >&5
-echo "${ECHO_T}$gl_cv_header_stdint_h" >&6
-  if test $gl_cv_header_stdint_h = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STDINT_H_WITH_UINTMAX 1
-_ACEOF
-
-  fi
-
-
-  echo "$as_me:$LINENO: checking for unsigned long long" >&5
-echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
-if test "${ac_cv_type_unsigned_long_long+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-unsigned long long ull = 1ULL; int i = 63;
-int
-main ()
-{
-unsigned long long ullmax = (unsigned long long) -1;
-     return ull << i | ull >> i | ullmax / ull | ullmax % ull;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_unsigned_long_long=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_unsigned_long_long=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6
-  if test $ac_cv_type_unsigned_long_long = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UNSIGNED_LONG_LONG 1
-_ACEOF
-
-  fi
-
-
-
-
-  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
-
-    test $ac_cv_type_unsigned_long_long = yes \
-      && ac_type='unsigned long long' \
-      || ac_type='unsigned long'
-
-cat >>confdefs.h <<_ACEOF
-#define uintmax_t $ac_type
-_ACEOF
-
-  else
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UINTMAX_T 1
-_ACEOF
-
-  fi
-
-
-      echo "$as_me:$LINENO: checking whether strdup is declared" >&5
-echo $ECHO_N "checking whether strdup is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_strdup+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef strdup
-  char *p = (char *) strdup;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_strdup=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_strdup=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strdup" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strdup" >&6
-if test $ac_cv_have_decl_strdup = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRDUP 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRDUP 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether strndup is declared" >&5
-echo $ECHO_N "checking whether strndup is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_strndup+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef strndup
-  char *p = (char *) strndup;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_strndup=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_strndup=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strndup" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strndup" >&6
-if test $ac_cv_have_decl_strndup = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNDUP 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNDUP 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether strnlen is declared" >&5
-echo $ECHO_N "checking whether strnlen is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_strnlen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef strnlen
-  char *p = (char *) strnlen;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_strnlen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_strnlen=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strnlen" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strnlen" >&6
-if test $ac_cv_have_decl_strnlen = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNLEN 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNLEN 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether clearerr_unlocked is declared" >&5
-echo $ECHO_N "checking whether clearerr_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_clearerr_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef clearerr_unlocked
-  char *p = (char *) clearerr_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_clearerr_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_clearerr_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_clearerr_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_clearerr_unlocked" >&6
-if test $ac_cv_have_decl_clearerr_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CLEARERR_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CLEARERR_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5
-echo $ECHO_N "checking whether feof_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef feof_unlocked
-  char *p = (char *) feof_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_feof_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_feof_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_feof_unlocked" >&6
-if test $ac_cv_have_decl_feof_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FEOF_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FEOF_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether ferror_unlocked is declared" >&5
-echo $ECHO_N "checking whether ferror_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_ferror_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef ferror_unlocked
-  char *p = (char *) ferror_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_ferror_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_ferror_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_ferror_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_ferror_unlocked" >&6
-if test $ac_cv_have_decl_ferror_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FERROR_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FERROR_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether fflush_unlocked is declared" >&5
-echo $ECHO_N "checking whether fflush_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_fflush_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef fflush_unlocked
-  char *p = (char *) fflush_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_fflush_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_fflush_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fflush_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fflush_unlocked" >&6
-if test $ac_cv_have_decl_fflush_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FFLUSH_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FFLUSH_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5
-echo $ECHO_N "checking whether fgets_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef fgets_unlocked
-  char *p = (char *) fgets_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_fgets_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_fgets_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fgets_unlocked" >&6
-if test $ac_cv_have_decl_fgets_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FGETS_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FGETS_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether fputc_unlocked is declared" >&5
-echo $ECHO_N "checking whether fputc_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_fputc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef fputc_unlocked
-  char *p = (char *) fputc_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_fputc_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_fputc_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fputc_unlocked" >&6
-if test $ac_cv_have_decl_fputc_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FPUTC_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FPUTC_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether fputs_unlocked is declared" >&5
-echo $ECHO_N "checking whether fputs_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_fputs_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef fputs_unlocked
-  char *p = (char *) fputs_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_fputs_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_fputs_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputs_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fputs_unlocked" >&6
-if test $ac_cv_have_decl_fputs_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FPUTS_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FPUTS_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether fread_unlocked is declared" >&5
-echo $ECHO_N "checking whether fread_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_fread_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef fread_unlocked
-  char *p = (char *) fread_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_fread_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_fread_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fread_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fread_unlocked" >&6
-if test $ac_cv_have_decl_fread_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FREAD_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FREAD_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether fwrite_unlocked is declared" >&5
-echo $ECHO_N "checking whether fwrite_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_fwrite_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef fwrite_unlocked
-  char *p = (char *) fwrite_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_fwrite_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_fwrite_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_fwrite_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fwrite_unlocked" >&6
-if test $ac_cv_have_decl_fwrite_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FWRITE_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FWRITE_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
-echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef getc_unlocked
-  char *p = (char *) getc_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_getc_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_getc_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6
-if test $ac_cv_have_decl_getc_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether getchar_unlocked is declared" >&5
-echo $ECHO_N "checking whether getchar_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_getchar_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef getchar_unlocked
-  char *p = (char *) getchar_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_getchar_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_getchar_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_getchar_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getchar_unlocked" >&6
-if test $ac_cv_have_decl_getchar_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETCHAR_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETCHAR_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether putc_unlocked is declared" >&5
-echo $ECHO_N "checking whether putc_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_putc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef putc_unlocked
-  char *p = (char *) putc_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_putc_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_putc_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_putc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_putc_unlocked" >&6
-if test $ac_cv_have_decl_putc_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PUTC_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PUTC_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-      echo "$as_me:$LINENO: checking whether putchar_unlocked is declared" >&5
-echo $ECHO_N "checking whether putchar_unlocked is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_putchar_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef putchar_unlocked
-  char *p = (char *) putchar_unlocked;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_putchar_unlocked=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_putchar_unlocked=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_putchar_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_putchar_unlocked" >&6
-if test $ac_cv_have_decl_putchar_unlocked = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PUTCHAR_UNLOCKED 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PUTCHAR_UNLOCKED 0
-_ACEOF
-
-
-fi
-
-
-
-
-
-
-
-  case $LIBOBJS in
-    "dirname.$ac_objext"   | \
-  *" dirname.$ac_objext"   | \
-    "dirname.$ac_objext "* | \
-  *" dirname.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS dirname.$ac_objext" ;;
-esac
-
-
-
-
-
-
-
-  echo "$as_me:$LINENO: checking for error_at_line" >&5
-echo $ECHO_N "checking for error_at_line... $ECHO_C" >&6
-if test "${ac_cv_lib_error_at_line+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-error_at_line (0, 0, "", 0, "");
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_error_at_line=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_error_at_line=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_error_at_line" >&5
-echo "${ECHO_T}$ac_cv_lib_error_at_line" >&6
-if test $ac_cv_lib_error_at_line = no; then
-  case $LIBOBJS in
-    "error.$ac_objext"   | \
-  *" error.$ac_objext"   | \
-    "error.$ac_objext "* | \
-  *" error.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS error.$ac_objext" ;;
-esac
-
-fi
-
-
-
-  :
-
-
-
-
-
-
-  case $LIBOBJS in
-    "exitfail.$ac_objext"   | \
-  *" exitfail.$ac_objext"   | \
-    "exitfail.$ac_objext "* | \
-  *" exitfail.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS exitfail.$ac_objext" ;;
-esac
-
-
-    :
-
-
-
-
-
-  if test -n "$GETOPT_H"; then
-
-  case $LIBOBJS in
-    "getopt.$ac_objext"   | \
-  *" getopt.$ac_objext"   | \
-    "getopt.$ac_objext "* | \
-  *" getopt.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS getopt.$ac_objext" ;;
-esac
-
-  case $LIBOBJS in
-    "getopt1.$ac_objext"   | \
-  *" getopt1.$ac_objext"   | \
-    "getopt1.$ac_objext "* | \
-  *" getopt1.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS getopt1.$ac_objext" ;;
-esac
-
-
-  GETOPT_H=getopt.h
-
-cat >>confdefs.h <<\_ACEOF
-#define __GETOPT_PREFIX rpl_
-_ACEOF
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
-echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6
-if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  gt_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
-     gt_save_LIBS="$LIBS"
-     LIBS="$LIBS -framework CoreFoundation"
-     cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <CFPreferences.h>
+#include <CoreFoundation/CFPreferences.h>
 int
 main ()
 {
@@ -12106,64 +35380,32 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_link "$LINENO"; then :
   gt_cv_func_CFPreferencesCopyAppValue=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-gt_cv_func_CFPreferencesCopyAppValue=no
+  gt_cv_func_CFPreferencesCopyAppValue=no
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-     CPPFLAGS="$gt_save_CPPFLAGS"
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
-echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
   if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
-_ACEOF
+$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
 
   fi
-    echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
-echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6
-if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
+if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  gt_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
-     gt_save_LIBS="$LIBS"
-     LIBS="$LIBS -framework CoreFoundation"
-     cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <CFLocale.h>
+#include <CoreFoundation/CFLocale.h>
 int
 main ()
 {
@@ -12172,46 +35414,20 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_link "$LINENO"; then :
   gt_cv_func_CFLocaleCopyCurrent=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-gt_cv_func_CFLocaleCopyCurrent=no
+  gt_cv_func_CFLocaleCopyCurrent=no
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-     CPPFLAGS="$gt_save_CPPFLAGS"
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
-echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
   if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_CFLOCALECOPYCURRENT 1
-_ACEOF
+$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
 
   fi
   INTL_MACOSX_LIBS=
@@ -12222,91 +35438,77 @@
 
 
 
-  echo "$as_me:$LINENO: checking whether NLS is requested" >&5
-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
-    # Check whether --enable-nls or --disable-nls was given.
-if test "${enable_nls+set}" = set; then
-  enableval="$enable_nls"
-  USE_NLS=$enableval
-else
-  USE_NLS=yes
-fi;
-  echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6
-
-
 
 
   LIBINTL=
   LTLIBINTL=
   POSUB=
 
+    case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
     if test "$USE_NLS" = "yes"; then
     gt_use_preinstalled_gnugettext=no
 
 
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
 
-
-
-
-        echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
-echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6
-if test "${gt_cv_func_gnugettext1_libc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if eval \${$gt_func_gnugettext_libc+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <libintl.h>
+$gt_revision_test_code
 extern int _nl_msg_cat_cntr;
 extern int *_nl_domain_bindings;
+
 int
 main ()
 {
+
 bindtextdomain ("", "");
-return * gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  gt_cv_func_gnugettext1_libc=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libc=yes"
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-gt_cv_func_gnugettext1_libc=no
+  eval "$gt_func_gnugettext_libc=no"
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5
-echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6
+eval ac_res=\$$gt_func_gnugettext_libc
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
-        if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
 
 
 
@@ -12337,130 +35539,218 @@
   done
 
 
-  echo "$as_me:$LINENO: checking for iconv" >&5
-echo $ECHO_N "checking for iconv... $ECHO_C" >&6
-if test "${am_cv_func_iconv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if ${am_cv_func_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
 
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <stdlib.h>
 #include <iconv.h>
+
 int
 main ()
 {
 iconv_t cd = iconv_open("","");
-       iconv(cd,NULL,NULL,NULL,NULL);
-       iconv_close(cd);
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_link "$LINENO"; then :
   am_cv_func_iconv=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
       am_save_LIBS="$LIBS"
       LIBS="$LIBS $LIBICONV"
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <stdlib.h>
 #include <iconv.h>
+
 int
 main ()
 {
 iconv_t cd = iconv_open("","");
-         iconv(cd,NULL,NULL,NULL,NULL);
-         iconv_close(cd);
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_link "$LINENO"; then :
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
     fi
 
 fi
-echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
-echo "${ECHO_T}$am_cv_func_iconv" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
   if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_ICONV 1
+                  am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  int result = 0;
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        const char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    result |= 16;
+  return result;
+}
 _ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_iconv_works=yes
+else
+  am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
 
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    echo "$as_me:$LINENO: checking how to link with libiconv" >&5
-echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6
-    echo "$as_me:$LINENO: result: $LIBICONV" >&5
-echo "${ECHO_T}$LIBICONV" >&6
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
   else
             CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
@@ -12473,6 +35763,10 @@
 
 
 
+
+
+
+
     use_additional=yes
 
   acl_save_prefix="$prefix"
@@ -12487,10 +35781,9 @@
   prefix="$acl_save_prefix"
 
 
-# Check whether --with-libintl-prefix or --without-libintl-prefix was given.
-if test "${with_libintl_prefix+set}" = set; then
-  withval="$with_libintl_prefix"
-
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then :
+  withval=$with_libintl_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
     else
@@ -12510,13 +35803,20 @@
       else
         additional_includedir="$withval/include"
         additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
       fi
     fi
 
-fi;
+fi
+
       LIBINTL=
   LTLIBINTL=
   INCINTL=
+  LIBINTL_PREFIX=
+      HAVE_LIBINTL=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
@@ -12534,7 +35834,7 @@
       done
       if test -z "$already_handled"; then
         names_already_handled="$names_already_handled $name"
-                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
         eval value=\"\$HAVE_LIB$uppername\"
         if test -n "$value"; then
           if test "$value" = yes; then
@@ -12550,22 +35850,52 @@
           found_la=
           found_so=
           found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
           if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
-              found_dir="$additional_libdir"
-              found_so="$additional_libdir/lib$name.$shlibext"
-              if test -f "$additional_libdir/lib$name.la"; then
-                found_la="$additional_libdir/lib$name.la"
-              fi
-            else
-              if test -f "$additional_libdir/lib$name.$libext"; then
-                found_dir="$additional_libdir"
-                found_a="$additional_libdir/lib$name.$libext"
-                if test -f "$additional_libdir/lib$name.la"; then
-                  found_la="$additional_libdir/lib$name.la"
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
                 fi
               fi
             fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
           fi
           if test "X$found_dir" = "X"; then
             for x in $LDFLAGS $LTLIBINTL; do
@@ -12581,21 +35911,44 @@
               case "$x" in
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
-                    found_dir="$dir"
-                    found_so="$dir/lib$name.$shlibext"
-                    if test -f "$dir/lib$name.la"; then
-                      found_la="$dir/lib$name.la"
-                    fi
-                  else
-                    if test -f "$dir/lib$name.$libext"; then
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
                       found_dir="$dir"
-                      found_a="$dir/lib$name.$libext"
-                      if test -f "$dir/lib$name.la"; then
-                        found_la="$dir/lib$name.la"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
                       fi
                     fi
                   fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
                   ;;
               esac
               if test "X$found_dir" != "X"; then
@@ -12606,7 +35959,9 @@
           if test "X$found_dir" != "X"; then
                         LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
             if test "X$found_so" != "X"; then
-                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                                        if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
                                 LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
               else
                                                                                 haveit=
@@ -12619,10 +35974,10 @@
                 if test -z "$haveit"; then
                   ltrpathdirs="$ltrpathdirs $found_dir"
                 fi
-                                if test "$hardcode_direct" = yes; then
+                                if test "$acl_hardcode_direct" = yes; then
                                                       LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
                 else
-                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
                                                             LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
                                                             haveit=
                     for x in $rpathdirs; do
@@ -12654,7 +36009,7 @@
                     if test -z "$haveit"; then
                       LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
                     fi
-                    if test "$hardcode_minus_L" != no; then
+                    if test "$acl_hardcode_minus_L" != no; then
                                                                                         LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
                     else
                                                                                                                                                                                 LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
@@ -12673,6 +36028,16 @@
             case "$found_dir" in
               */$acl_libdirstem | */$acl_libdirstem/)
                 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = 'intl'; then
+                  LIBINTL_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = 'intl'; then
+                  LIBINTL_PREFIX="$basedir"
+                fi
                 additional_includedir="$basedir/include"
                 ;;
             esac
@@ -12721,9 +36086,11 @@
                 case "$dep" in
                   -L*)
                     additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
@@ -12823,21 +36190,21 @@
     done
   done
   if test "X$rpathdirs" != "X"; then
-    if test -n "$hardcode_libdir_separator"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
                         alldirs=
       for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
       done
             acl_save_libdir="$libdir"
       libdir="$alldirs"
-      eval flag=\"$hardcode_libdir_flag_spec\"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
       libdir="$acl_save_libdir"
       LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
     else
             for found_dir in $rpathdirs; do
         acl_save_libdir="$libdir"
         libdir="$found_dir"
-        eval flag=\"$hardcode_libdir_flag_spec\"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
         libdir="$acl_save_libdir"
         LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
       done
@@ -12849,133 +36216,94 @@
     done
   fi
 
-          echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
-echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6
-if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if eval \${$gt_func_gnugettext_libintl+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   gt_save_CPPFLAGS="$CPPFLAGS"
             CPPFLAGS="$CPPFLAGS $INCINTL"
             gt_save_LIBS="$LIBS"
             LIBS="$LIBS $LIBINTL"
-                        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <libintl.h>
+$gt_revision_test_code
 extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
 const char *_nl_expand_alias (const char *);
+
 int
 main ()
 {
+
 bindtextdomain ("", "");
-return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  gt_cv_func_gnugettext1_libintl=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libintl=yes"
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-gt_cv_func_gnugettext1_libintl=no
+  eval "$gt_func_gnugettext_libintl=no"
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-                        if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+                        if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
               LIBS="$LIBS $LIBICONV"
-              cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <libintl.h>
+$gt_revision_test_code
 extern int _nl_msg_cat_cntr;
 extern
 #ifdef __cplusplus
 "C"
 #endif
 const char *_nl_expand_alias (const char *);
+
 int
 main ()
 {
+
 bindtextdomain ("", "");
-return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_link "$LINENO"; then :
   LIBINTL="$LIBINTL $LIBICONV"
-                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
-                gt_cv_func_gnugettext1_libintl=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                 eval "$gt_func_gnugettext_libintl=yes"
 
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
             fi
             CPPFLAGS="$gt_save_CPPFLAGS"
             LIBS="$gt_save_LIBS"
 fi
-echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5
-echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6
+eval ac_res=\$$gt_func_gnugettext_libintl
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
         fi
 
-                                        if test "$gt_cv_func_gnugettext1_libc" = "yes" \
-           || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+                                        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
                 && test "$PACKAGE" != gettext-runtime \
                 && test "$PACKAGE" != gettext-tools; }; then
           gt_use_preinstalled_gnugettext=yes
@@ -12998,24 +36326,22 @@
     if test "$gt_use_preinstalled_gnugettext" = "yes" \
        || test "$nls_cv_use_gnu_gettext" = "yes"; then
 
-cat >>confdefs.h <<\_ACEOF
-#define ENABLE_NLS 1
-_ACEOF
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
 
     else
       USE_NLS=no
     fi
   fi
 
-  echo "$as_me:$LINENO: checking whether to use NLS" >&5
-echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6
-  echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
   if test "$USE_NLS" = "yes"; then
-    echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
-echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-      if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
         gt_source="external libintl"
       else
         gt_source="libc"
@@ -13023,18 +36349,18 @@
     else
       gt_source="included intl directory"
     fi
-    echo "$as_me:$LINENO: result: $gt_source" >&5
-echo "${ECHO_T}$gt_source" >&6
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
   fi
 
   if test "$USE_NLS" = "yes"; then
 
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-      if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
-        echo "$as_me:$LINENO: checking how to link with libintl" >&5
-echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6
-        echo "$as_me:$LINENO: result: $LIBINTL" >&5
-echo "${ECHO_T}$LIBINTL" >&6
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
 
   for element in $INCINTL; do
     haveit=
@@ -13061,14 +36387,10 @@
       fi
 
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETTEXT 1
-_ACEOF
+$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
 
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DCGETTEXT 1
-_ACEOF
+$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
 
     fi
 
@@ -13086,2307 +36408,57 @@
 
 
 
-
-
-
-  case $LIBOBJS in
-    "hard-locale.$ac_objext"   | \
-  *" hard-locale.$ac_objext"   | \
-    "hard-locale.$ac_objext "* | \
-  *" hard-locale.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS hard-locale.$ac_objext" ;;
-esac
-
-
-
-
-
-  case $LIBOBJS in
-    "hash.$ac_objext"   | \
-  *" hash.$ac_objext"   | \
-    "hash.$ac_objext "* | \
-  *" hash.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS hash.$ac_objext" ;;
-esac
-
-
-
-
-
-
-
-for ac_header in stdlib.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## -------------------------------- ##
-## Report this to bug-bison@gnu.org ##
-## -------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
-echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6
-if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_func_malloc_0_nonnull=no
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#if STDC_HEADERS || HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *malloc ();
-#endif
-
-int
-main ()
-{
-exit (malloc (0) ? 0 : 1);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_malloc_0_nonnull=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_malloc_0_nonnull=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
-echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6
-if test $ac_cv_func_malloc_0_nonnull = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC 1
-_ACEOF
-
-else
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC 0
-_ACEOF
-
-   case $LIBOBJS in
-    "malloc.$ac_objext"   | \
-  *" malloc.$ac_objext"   | \
-    "malloc.$ac_objext "* | \
-  *" malloc.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;;
-esac
-
-
-cat >>confdefs.h <<\_ACEOF
-#define malloc rpl_malloc
-_ACEOF
-
-fi
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_func in iswcntrl wcwidth
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-    echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5
-echo $ECHO_N "checking whether mbrtowc and mbstate_t are properly declared... $ECHO_C" >&6
-if test "${gl_cv_func_mbrtowc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <wchar.h>
-int
-main ()
-{
-wchar_t wc;
-              char const s[] = "";
-              size_t n = 1;
-              mbstate_t state;
-              return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  gl_cv_func_mbrtowc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-gl_cv_func_mbrtowc=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc" >&5
-echo "${ECHO_T}$gl_cv_func_mbrtowc" >&6
-  if test $gl_cv_func_mbrtowc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MBRTOWC 1
-_ACEOF
-
-  fi
-
-
-  echo "$as_me:$LINENO: checking whether wcwidth is declared" >&5
-echo $ECHO_N "checking whether wcwidth is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_wcwidth+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#if HAVE_STRING_H
-# include <string.h>
-#endif
-#if HAVE_WCHAR_H
-# include <wchar.h>
-#endif
-
-int
-main ()
-{
-
-#ifndef wcwidth
-  char *p = (char *) wcwidth;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_wcwidth=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_wcwidth=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_wcwidth" >&5
-echo "${ECHO_T}$ac_cv_have_decl_wcwidth" >&6
-  if test $ac_cv_have_decl_wcwidth = yes; then
-    ac_val=1
-  else
-    ac_val=0
-  fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_WCWIDTH $ac_val
-_ACEOF
-
-
-      echo "$as_me:$LINENO: checking whether mbswidth is declared in <wchar.h>" >&5
-echo $ECHO_N "checking whether mbswidth is declared in <wchar.h>... $ECHO_C" >&6
-if test "${ac_cv_have_decl_mbswidth+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#if HAVE_WCHAR_H
-# include <wchar.h>
-#endif
-
-int
-main ()
-{
-
-  char *p = (char *) mbswidth;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_have_decl_mbswidth=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_mbswidth=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_mbswidth" >&5
-echo "${ECHO_T}$ac_cv_have_decl_mbswidth" >&6
-  if test $ac_cv_have_decl_mbswidth = yes; then
-    ac_val=1
-  else
-    ac_val=0
-  fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H $ac_val
-_ACEOF
-
-
-  echo "$as_me:$LINENO: checking for mbstate_t" >&5
-echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6
-if test "${ac_cv_type_mbstate_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#	    include <wchar.h>
-int
-main ()
-{
-mbstate_t x; return sizeof x;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_mbstate_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_mbstate_t=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_mbstate_t" >&5
-echo "${ECHO_T}$ac_cv_type_mbstate_t" >&6
-   if test $ac_cv_type_mbstate_t = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MBSTATE_T 1
-_ACEOF
-
-   else
-
-cat >>confdefs.h <<\_ACEOF
-#define mbstate_t int
-_ACEOF
-
-   fi
-
-
-
-  echo "$as_me:$LINENO: checking for obstacks" >&5
-echo $ECHO_N "checking for obstacks... $ECHO_C" >&6
-if test "${ac_cv_func_obstack+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include "obstack.h"
-int
-main ()
-{
-struct obstack *mem; obstack_free(mem,(char *) 0)
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_obstack=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_obstack=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_obstack" >&5
-echo "${ECHO_T}$ac_cv_func_obstack" >&6
-if test $ac_cv_func_obstack = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_OBSTACK 1
-_ACEOF
-
-else
-  case $LIBOBJS in
-    "obstack.$ac_objext"   | \
-  *" obstack.$ac_objext"   | \
-    "obstack.$ac_objext "* | \
-  *" obstack.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS obstack.$ac_objext" ;;
-esac
-
-fi
-
-    if test $ac_cv_func_obstack = no; then
-
-
-
-
-  :
-
-  fi
-
-
-
-
-  case $LIBOBJS in
-    "quote.$ac_objext"   | \
-  *" quote.$ac_objext"   | \
-    "quote.$ac_objext "* | \
-  *" quote.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS quote.$ac_objext" ;;
-esac
-
-
-
-
-
-
-  case $LIBOBJS in
-    "quotearg.$ac_objext"   | \
-  *" quotearg.$ac_objext"   | \
-    "quotearg.$ac_objext "* | \
-  *" quotearg.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS quotearg.$ac_objext" ;;
-esac
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-  echo "$as_me:$LINENO: checking for mbstate_t" >&5
-echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6
-if test "${ac_cv_type_mbstate_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#	    include <wchar.h>
-int
-main ()
-{
-mbstate_t x; return sizeof x;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_mbstate_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_mbstate_t=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_mbstate_t" >&5
-echo "${ECHO_T}$ac_cv_type_mbstate_t" >&6
-   if test $ac_cv_type_mbstate_t = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MBSTATE_T 1
-_ACEOF
-
-   else
-
-cat >>confdefs.h <<\_ACEOF
-#define mbstate_t int
-_ACEOF
-
-   fi
-
-    echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5
-echo $ECHO_N "checking whether mbrtowc and mbstate_t are properly declared... $ECHO_C" >&6
-if test "${gl_cv_func_mbrtowc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <wchar.h>
-int
-main ()
-{
-wchar_t wc;
-              char const s[] = "";
-              size_t n = 1;
-              mbstate_t state;
-              return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  gl_cv_func_mbrtowc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-gl_cv_func_mbrtowc=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc" >&5
-echo "${ECHO_T}$gl_cv_func_mbrtowc" >&6
-  if test $gl_cv_func_mbrtowc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MBRTOWC 1
-_ACEOF
-
-  fi
-
-
-
-
-
-
-  # Define two additional variables used in the Makefile substitution.
-
-  if test "$ac_cv_header_stdbool_h" = yes; then
-    STDBOOL_H=''
-  else
-    STDBOOL_H='stdbool.h'
-  fi
-
-
-  if test "$ac_cv_type__Bool" = yes; then
-    HAVE__BOOL=1
-  else
-    HAVE__BOOL=0
-  fi
-
-
-
-
-
-  case $LIBOBJS in
-    "fopen-safer.$ac_objext"   | \
-  *" fopen-safer.$ac_objext"   | \
-    "fopen-safer.$ac_objext "* | \
-  *" fopen-safer.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS fopen-safer.$ac_objext" ;;
-esac
-
-
-
-
-
-
-
-for ac_func in stpcpy
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  case $LIBOBJS in
-    "$ac_func.$ac_objext"   | \
-  *" $ac_func.$ac_objext"   | \
-    "$ac_func.$ac_objext "* | \
-  *" $ac_func.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
-esac
-
-fi
-done
-
-
-  if test $ac_cv_func_stpcpy = no; then
-
-  :
-
-  fi
-
-
-
-
-
-
-for ac_func in strdup
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  case $LIBOBJS in
-    "$ac_func.$ac_objext"   | \
-  *" $ac_func.$ac_objext"   | \
-    "$ac_func.$ac_objext "* | \
-  *" $ac_func.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
-esac
-
-fi
-done
-
-
-
-  :
-
-
-
-
-
-  :
-
-
-
-
-for ac_func in strerror
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  case $LIBOBJS in
-    "$ac_func.$ac_objext"   | \
-  *" $ac_func.$ac_objext"   | \
-    "$ac_func.$ac_objext "* | \
-  *" $ac_func.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
-esac
-
-fi
-done
-
-
-  if test $ac_cv_func_strerror = no; then
-
-  :
-
-  fi
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
-  echo "$as_me:$LINENO: checking for working strndup" >&5
-echo $ECHO_N "checking for working strndup... $ECHO_C" >&6
-if test "${gl_cv_func_strndup+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#ifdef _AIX
-            too risky
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "too risky" >/dev/null 2>&1; then
-  gl_cv_func_strndup=no
-else
-  gl_cv_func_strndup=yes
-fi
-rm -f conftest*
-
-else
-  cat >conftest.$ac_ext <<_ACEOF
-
-       /* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-int
-main ()
-{
-
-#ifndef HAVE_DECL_STRNDUP
-  extern char *strndup (const char *, size_t);
-#endif
-  char *s;
-  s = strndup ("some longer string", 15);
-  free (s);
-  s = strndup ("shorter string", 13);
-  return s[13] != '\0';
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  gl_cv_func_strndup=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-gl_cv_func_strndup=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $gl_cv_func_strndup" >&5
-echo "${ECHO_T}$gl_cv_func_strndup" >&6
-  if test $gl_cv_func_strndup = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRNDUP 1
-_ACEOF
-
-  else
-    case $LIBOBJS in
-    "strndup.$ac_objext"   | \
-  *" strndup.$ac_objext"   | \
-    "strndup.$ac_objext "* | \
-  *" strndup.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strndup.$ac_objext" ;;
-esac
-
-
-cat >>confdefs.h <<\_ACEOF
-#define strndup rpl_strndup
-_ACEOF
-
-    :
-  fi
-
-
-
-
-
-
-
-  echo "$as_me:$LINENO: checking for working strnlen" >&5
-echo $ECHO_N "checking for working strnlen... $ECHO_C" >&6
-if test "${ac_cv_func_strnlen_working+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_func_strnlen_working=no
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-
-#define S "foobar"
-#define S_LEN (sizeof S - 1)
-
-  /* At least one implementation is buggy: that of AIX 4.3 would
-     give strnlen (S, 1) == 3.  */
-
-  int i;
-  for (i = 0; i < S_LEN + 1; ++i)
-    {
-      int expected = i <= S_LEN ? i : S_LEN;
-      if (strnlen (S, i) != expected)
-	exit (1);
-    }
-  exit (0);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_strnlen_working=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_strnlen_working=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_strnlen_working" >&5
-echo "${ECHO_T}$ac_cv_func_strnlen_working" >&6
-test $ac_cv_func_strnlen_working = no && case $LIBOBJS in
-    "strnlen.$ac_objext"   | \
-  *" strnlen.$ac_objext"   | \
-    "strnlen.$ac_objext "* | \
-  *" strnlen.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strnlen.$ac_objext" ;;
-esac
-
-
-  if test $ac_cv_func_strnlen_working = no; then
-    # This is necessary because automake-1.6.1 doens't understand
-    # that the above use of AC_FUNC_STRNLEN means we may have to use
-    # lib/strnlen.c.
-    #AC_LIBOBJ(strnlen)
-
-cat >>confdefs.h <<\_ACEOF
-#define strnlen rpl_strnlen
-_ACEOF
-
-
-
-  :
-
-
-
-
-
-
-  fi
-
-
-
-
-for ac_func in strtol
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  case $LIBOBJS in
-    "$ac_func.$ac_objext"   | \
-  *" $ac_func.$ac_objext"   | \
-    "$ac_func.$ac_objext "* | \
-  *" $ac_func.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
-esac
-
-fi
-done
-
-
-  if test $ac_cv_func_strtol = no; then
-
-
-
-  :
-
-
-
-
-
-
-  fi
-
-
-
-
-for ac_func in strtoul
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  case $LIBOBJS in
-    "$ac_func.$ac_objext"   | \
-  *" $ac_func.$ac_objext"   | \
-    "$ac_func.$ac_objext "* | \
-  *" $ac_func.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
-esac
-
-fi
-done
-
-
-  if test $ac_cv_func_strtoul = no; then
-
-
-
-
-  :
-
-
-
-
-
-
-
-  fi
-
-
-
-
-
-
-
-
-for ac_func in strverscmp
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  case $LIBOBJS in
-    "$ac_func.$ac_objext"   | \
-  *" $ac_func.$ac_objext"   | \
-    "$ac_func.$ac_objext "* | \
-  *" $ac_func.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
-esac
-
-fi
-done
-
-
-  if test $ac_cv_func_strverscmp = no; then
-
-  :
-
-  fi
-
-
-
-
-for ac_header in unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## -------------------------------- ##
-## Report this to bug-bison@gnu.org ##
-## -------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-    UNISTD_H=''
-
-else
-
-    UNISTD_H='unistd.h'
-
-fi
-
-done
-
-
-
-
-
-
-  case $LIBOBJS in
-    "dup-safer.$ac_objext"   | \
-  *" dup-safer.$ac_objext"   | \
-    "dup-safer.$ac_objext "* | \
-  *" dup-safer.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS dup-safer.$ac_objext" ;;
-esac
-
-  case $LIBOBJS in
-    "fd-safer.$ac_objext"   | \
-  *" fd-safer.$ac_objext"   | \
-    "fd-safer.$ac_objext "* | \
-  *" fd-safer.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS fd-safer.$ac_objext" ;;
-esac
-
-  case $LIBOBJS in
-    "pipe-safer.$ac_objext"   | \
-  *" pipe-safer.$ac_objext"   | \
-    "pipe-safer.$ac_objext "* | \
-  *" pipe-safer.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS pipe-safer.$ac_objext" ;;
-esac
-
-
-
-
-
-
-
-cat >>confdefs.h <<\_ACEOF
-#define USE_UNLOCKED_IO 1
-_ACEOF
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-
-  case $LIBOBJS in
-    "xmalloc.$ac_objext"   | \
-  *" xmalloc.$ac_objext"   | \
-    "xmalloc.$ac_objext "* | \
-  *" xmalloc.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS xmalloc.$ac_objext" ;;
-esac
-
-
-
-  :
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-# We use po/Makevars, so we need at least gettext 0.12.
-
-
   if test -z "$USE_NLS"; then
     echo "The BISON-I18N macro is used without being preceded by AM-GNU-GETTEXT." 1>&2
     exit 1
   fi
   BISON_LOCALEDIR=
+  BISON_USE_NLS=no
   if test "$USE_NLS" = yes; then
-        if test -n "$YACC"; then
-      case "$YACC" in
-        *bison*)
-          if ($YACC --print-localedir) >/dev/null 2>&1; then
-            BISON_LOCALEDIR=`$YACC --print-localedir`
-          fi
-          ;;
-      esac
-    else
-      if test -n "$BISON"; then
-        if test "$BISON" != ":"; then
-          if ($BISON --print-localedir) >/dev/null 2>&1; then
-            BISON_LOCALEDIR=`$BISON --print-localedir`
-          fi
-        fi
-      fi
+                        if (${YACC-${BISON-:}} --print-localedir) >/dev/null 2>&1; then
+      BISON_LOCALEDIR=`${YACC-${BISON-:}} --print-localedir`
     fi
 
     if test -n "$BISON_LOCALEDIR"; then
-      USER_LINGUAS="${LINGUAS-%UNSET%}"
+                              USER_LINGUAS="${LINGUAS-%UNSET%}"
       if test -n "$USER_LINGUAS"; then
         BISON_USE_NLS=yes
-      else
-        BISON_USE_NLS=no
       fi
-    else
-      BISON_USE_NLS=no
     fi
-  else
-    BISON_USE_NLS=no
   fi
   if test $BISON_USE_NLS = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define YYENABLE_NLS 1
-_ACEOF
+$as_echo "#define YYENABLE_NLS 1" >>confdefs.h
 
   fi
 
 
 # Internationalized parsers.
-          ac_config_files="$ac_config_files runtime-po/Makefile.in"
+ac_config_files="$ac_config_files runtime-po/Makefile.in"
 
 # Autoconf macros for packages using internationalized parsers.
 aclocaldir='${datadir}/aclocal'
 
 
+# Create the benchmark script.
+ac_config_files="$ac_config_files etc/bench.pl"
+
+
 # Initialize the test suite.
-          ac_config_commands="$ac_config_commands tests/atconfig"
+ac_config_commands="$ac_config_commands tests/atconfig"
 
+ac_config_files="$ac_config_files tests/Makefile tests/atlocal"
 
-                    ac_config_files="$ac_config_files tests/Makefile tests/atlocal"
-
-          ac_config_files="$ac_config_files tests/bison"
+ac_config_files="$ac_config_files tests/bison"
 
 for ac_prog in valgrind
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_VALGRIND+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_VALGRIND+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$VALGRIND"; then
   ac_cv_prog_VALGRIND="$VALGRIND" # Let the user override the test.
@@ -15396,620 +36468,1049 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    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_VALGRIND="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
+IFS=$as_save_IFS
 
 fi
 fi
 VALGRIND=$ac_cv_prog_VALGRIND
 if test -n "$VALGRIND"; then
-  echo "$as_me:$LINENO: result: $VALGRIND" >&5
-echo "${ECHO_T}$VALGRIND" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND" >&5
+$as_echo "$VALGRIND" >&6; }
 else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
   test -n "$VALGRIND" && break
 done
 
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-echo "${ECHO_T}$ac_ct_CXX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CXX" && break
-done
-test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
-
-  CXX=$ac_ct_CXX
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C++ compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
-GXX=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-CXXFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cxx_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cxx_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cxx_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-depcc="$CXX"  am_compiler_list=
-
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    case $depmode in
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    none) break ;;
-    esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
-
-
-if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
-
-
-
-
- echo "$as_me:$LINENO: checking whether $CXX builds executables that work" >&5
-echo $ECHO_N "checking whether $CXX builds executables that work... $ECHO_C" >&6
-if test "${bison_cv_cxx_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-    bison_cv_cxx_works=no
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <cstdlib>
-	  #include <iostream>
-	  #include <map>
-	  #include <string>
-	  using namespace std;
-int
-main ()
-{
-std::cerr << "";
-          cout << "";
-	  typedef std::pair<unsigned int, int> uipair;
-	  std::map<unsigned int, int> m;
-	  std::map<unsigned int, int>::iterator i;
-	  m.insert (uipair (4, -4));
-	  for (i = m.begin (); i != m.end (); ++i)
-	    if (i->first != 4)
-	      return 1;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  if { ac_try='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_objext $LIBS >&5'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  if test "$cross_compiling" = yes; then
-  bison_cv_cxx_works=cross
-else
-  if { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  bison_cv_cxx_works=yes
-fi
-
-fi
-
-fi
-
-       rm -f conftest$ac_exeext
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $bison_cv_cxx_works" >&5
-echo "${ECHO_T}$bison_cv_cxx_works" >&6
-
- case $bison_cv_cxx_works in
- yes)
-    BISON_CXX_WORKS=':';;
- no | cross)
-    BISON_CXX_WORKS='exit 77';;
- esac
-
-
-
-
-if test $bison_cv_cxx_works = yes; then
-  BISON_CXX_WORKS_TRUE=
-  BISON_CXX_WORKS_FALSE='#'
-else
-  BISON_CXX_WORKS_TRUE='#'
-  BISON_CXX_WORKS_FALSE=
-fi
-
+case $VALGRIND:$host_os in
+  '':*) ;;
+  *:darwin*)
+    # See README-hacking.
+    # VALGRIND+=' --suppressions=$(abs_top_srcdir)/build-aux/darwin11.4.0.valgrind'
+    VALGRIND=;;
+  *:*)
+    VALGRIND_PREBISON="$VALGRIND -q"
+;;
+esac
 
 
 AUTOM4TE=${AUTOM4TE-"${am_missing_run}autom4te"}
 
 # Needed by tests/atlocal.in.
 
-O0CFLAGS=`echo $CFLAGS | sed 's/-O[0-9] *//'`
-
-O0CXXFLAGS=`echo $CXXFLAGS | sed 's/-O[0-9] *//'`
 
 
-                                                                                          ac_config_files="$ac_config_files Makefile build-aux/Makefile po/Makefile.in data/Makefile examples/Makefile examples/calc++/Makefile lib/Makefile src/Makefile doc/Makefile"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Java virtual machine" >&5
+$as_echo_n "checking for Java virtual machine... " >&6; }
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  CLASSPATH_SEPARATOR=';'
+else
+  CLASSPATH_SEPARATOR=':'
+fi
+rm -f conftest*
+
+  CONF_JAVA=
+  HAVE_JAVA_ENVVAR=
+  HAVE_GIJ=
+  HAVE_JAVA=
+  HAVE_JRE=
+  HAVE_JVIEW=
+  HAVE_JAVAEXEC=1
+  if test -n "$JAVA"; then
+    HAVE_JAVA_ENVVAR=1
+    CONF_JAVA="$JAVA"
+  else
+                # Extract the first word of "gij", so it can be a program name with args.
+set dummy gij; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_GIJ_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_GIJ_IN_PATH"; then
+  ac_cv_prog_HAVE_GIJ_IN_PATH="$HAVE_GIJ_IN_PATH" # 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_HAVE_GIJ_IN_PATH="yes"
+    $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
+HAVE_GIJ_IN_PATH=$ac_cv_prog_HAVE_GIJ_IN_PATH
+if test -n "$HAVE_GIJ_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+    # Extract the first word of "java", so it can be a program name with args.
+set dummy java; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_JAVA_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_JAVA_IN_PATH"; then
+  ac_cv_prog_HAVE_JAVA_IN_PATH="$HAVE_JAVA_IN_PATH" # 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_HAVE_JAVA_IN_PATH="yes"
+    $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
+HAVE_JAVA_IN_PATH=$ac_cv_prog_HAVE_JAVA_IN_PATH
+if test -n "$HAVE_JAVA_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+    # Extract the first word of "jre", so it can be a program name with args.
+set dummy jre; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_JRE_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_JRE_IN_PATH"; then
+  ac_cv_prog_HAVE_JRE_IN_PATH="$HAVE_JRE_IN_PATH" # 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_HAVE_JRE_IN_PATH="yes"
+    $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
+HAVE_JRE_IN_PATH=$ac_cv_prog_HAVE_JRE_IN_PATH
+if test -n "$HAVE_JRE_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+    # Extract the first word of "jview", so it can be a program name with args.
+set dummy jview; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_JVIEW_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_JVIEW_IN_PATH"; then
+  ac_cv_prog_HAVE_JVIEW_IN_PATH="$HAVE_JVIEW_IN_PATH" # 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_HAVE_JVIEW_IN_PATH="yes"
+    $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
+HAVE_JVIEW_IN_PATH=$ac_cv_prog_HAVE_JVIEW_IN_PATH
+if test -n "$HAVE_JVIEW_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+
+    export CLASSPATH
+    if test -n "$HAVE_GIJ_IN_PATH" \
+       && gij --version >/dev/null 2>/dev/null \
+       ; then
+      HAVE_GIJ=1
+      CONF_JAVA="gij"
+    else
+      if test -n "$HAVE_JAVA_IN_PATH" \
+         && java -version >/dev/null 2>/dev/null \
+         ; then
+        HAVE_JAVA=1
+        CONF_JAVA="java"
+      else
+        if test -n "$HAVE_JRE_IN_PATH" \
+           && (jre >/dev/null 2>/dev/null || test $? = 1) \
+           ; then
+          HAVE_JRE=1
+          CONF_JAVA="jre"
+        else
+          if test -n "$HAVE_JVIEW_IN_PATH" \
+             && (jview -? >/dev/null 2>/dev/null || test $? = 1) \
+             ; then
+            HAVE_JVIEW=1
+            CONF_JAVA="jview"
+          else
+            HAVE_JAVAEXEC=
+          fi
+        fi
+      fi
+    fi
+
+  fi
+  if test -n "$HAVE_JAVAEXEC"; then
+    ac_result="$CONF_JAVA"
+  else
+    ac_result="no"
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_result" >&5
+$as_echo "$ac_result" >&6; }
+
+
+
+
+
+
+
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  CLASSPATH_SEPARATOR=';'
+else
+  CLASSPATH_SEPARATOR=':'
+fi
+rm -f conftest*
+
+  source_version=1.3
+  test -n "$source_version" || {
+    as_fn_error $? "missing source-version argument to gt_JAVACOMP" "$LINENO" 5
+  }
+  if test -n "$HAVE_JAVAEXEC"; then
+              cat > conftestver.java <<EOF
+public class conftestver {
+  public static void main (String[] args) {
+    System.out.println(System.getProperty("java.specification.version"));
+  }
+}
+EOF
+                                                                      echo 'yzwx!$!I!D,!)!3+!4!5*!6,!4!7,!8!9)!:)!;"!(MeienN"!$FGW"!%Ojab"!2QeibRohZblVYZgb"!%hYei"!9FXQfYpYKgYidKUnleidLGW"!,Ujol_bPegb"!3_jicnbmnpblJfYpY/!*!+)!</!=!>"!=fYpYJmkb_ece_YnejiJpblmeji/!?!@)!A/!B!C"!._jicnbmnpbl"!3fYpYKgYidKSZfb_n"!3fYpYKgYidKUqmnbh"!$jon"!8QfYpYKejKTleinUnlbYhL"!.dbnTljkblnq"!EFQfYpYKgYidKUnleidLGQfYpYKgYidKUnleidL"!6fYpYKejKTleinUnlbYh"!)kleingi"!8FQfYpYKgYidKUnleidLGW!D!(!)!!!!!#!"!*!+!"!,!!!@!"!"!!!&Hu!"r!!!"!.!!!(!"!!!"!+!/!0!"!,!!!F!#!"!!!/s!#5$v!%t!&r!!!"!.!!!,!#!!!$!.!%!"!1!!!#!2' \
+         | tr -d '\012\015' \
+         | tr '!"#$%&()*+,./0123456789:;<=>?@ABCDEFGHJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzI' '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\046\050\051\052\056\057\073\074\076\103\106\114\116\117\120\123\124\126\133\141\142\143\144\145\146\147\151\152\154\155\156\157\160\162\163\164\165\166\171\261\262\266\267\270\272\276\312\376\055' \
+         > conftestver.class
+       target_version=`{
+         unset JAVA_HOME
+         echo "$as_me:36764: CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver" >&5
+         CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver 2>&5
+       }`
+       case "$target_version" in
+         1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6) ;;
+         null)
+                      target_version=1.1 ;;
+         *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown target-version $target_version, please update gt_JAVACOMP macro" >&5
+$as_echo "$as_me: WARNING: unknown target-version $target_version, please update gt_JAVACOMP macro" >&2;}
+            target_version=1.1 ;;
+       esac
+     else
+       target_version="1.1"
+     fi
+
+  case "$source_version" in
+    1.3) goodcode='class conftest {}'
+         failcode='class conftestfail { static { assert(true); } }' ;;
+    1.4) goodcode='class conftest     { static { assert(true); } }'
+         failcode='class conftestfail<T> { T foo() { return null; } }' ;;
+    1.5) goodcode='class conftest<T>     { T foo() { return null; } }'
+         failcode='class conftestfail syntax error' ;;
+    *) as_fn_error $? "invalid source-version argument to gt_JAVACOMP: $source_version" "$LINENO" 5 ;;
+  esac
+  case "$target_version" in
+    1.1) cfversion=45 ;;
+    1.2) cfversion=46 ;;
+    1.3) cfversion=47 ;;
+    1.4) cfversion=48 ;;
+    1.5) cfversion=49 ;;
+    1.6) cfversion=50 ;;
+    *) as_fn_error $? "invalid target-version argument to gt_JAVACOMP: $target_version" "$LINENO" 5 ;;
+  esac
+  # Function to output the classfile version of a file (8th byte) in decimal.
+  if od -A x < /dev/null >/dev/null 2>/dev/null; then
+    # Use POSIX od.
+    func_classfile_version ()
+    {
+      od -A n -t d1 -j 7 -N 1 "$1"
+    }
+  else
+    # Use BSD hexdump.
+    func_classfile_version ()
+    {
+      dd if="$1" bs=1 count=1 skip=7 2>/dev/null | hexdump -e '1/1 "%3d "'
+      echo
+    }
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Java compiler" >&5
+$as_echo_n "checking for Java compiler... " >&6; }
+                                                                                        CONF_JAVAC=
+  HAVE_JAVAC_ENVVAR=
+  HAVE_GCJ_C=
+  HAVE_JAVAC=
+  HAVE_JIKES=
+  HAVE_JAVACOMP=
+  cat > conftestlib.java <<EOF
+public class conftestlib {
+  public static void main (String[] args) {
+  }
+}
+EOF
+  echo "$goodcode" > conftest.java
+  echo "$failcode" > conftestfail.java
+        if test -n "$JAVAC"; then
+        if $JAVAC --version 2>/dev/null | sed -e 1q | grep gcj > /dev/null; then
+            if $JAVAC --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then
+                        rm -f conftest.class
+        if { echo "$as_me:36832: $JAVAC -d . conftest.java" >&5
+             $JAVAC -d . conftest.java >&5 2>&1
+           } \
+           && test -f conftest.class \
+           && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+                    rm -f conftest.class
+          rm -f conftestfail.class
+          if { echo "$as_me:36839: $JAVAC -fsource=$source_version -d . conftest.java" >&5
+               $JAVAC -fsource="$source_version" -d . conftest.java >&5 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5 \
+             && { echo "$as_me:36844: $JAVAC -d . conftestfail.java" >&5
+                  $JAVAC -d . conftestfail.java >&5 2>&1
+                } \
+             && test -f conftestfail.class \
+             && ! { echo "$as_me:36848: $JAVAC -fsource=$source_version -d . conftestfail.java" >&5
+                    $JAVAC -fsource="$source_version" -d . conftestfail.java >&5 2>&1
+                  }; then
+            CONF_JAVAC="$JAVAC -fsource=$source_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          else
+            CONF_JAVAC="$JAVAC"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        else
+                    rm -f conftest.class
+          rm -f conftestfail.class
+          if { echo "$as_me:36862: $JAVAC -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&5
+               $JAVAC -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&5 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+            CONF_JAVAC="$JAVAC -fsource=$source_version -ftarget=$target_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        fi
+      else
+                if test "$target_version" = 1.4 && test "$source_version" = 1.4; then
+                    rm -f conftest.class
+          if { echo "$as_me:36875: $JAVAC -d . conftest.java" >&5
+               $JAVAC -d . conftest.java >&5 2>&1
+             } \
+             && test -f conftest.class; then
+            CONF_JAVAC="$JAVAC"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        else
+          if test "$target_version" = 1.4 && test "$source_version" = 1.3; then
+                                    javac_works=
+            rm -f conftest.class
+            if { echo "$as_me:36887: $JAVAC -d . conftest.java" >&5
+                 $JAVAC -d . conftest.java >&5 2>&1
+               } \
+               && test -f conftest.class; then
+              javac_works=1
+            fi
+            javac_noassert_works=
+            rm -f conftest.class
+            if { echo "$as_me:36895: $JAVAC -fno-assert -d . conftest.java" >&5
+                 $JAVAC -fno-assert -d . conftest.java >&5 2>&1
+               } \
+               && test -f conftest.class; then
+              javac_noassert_works=1
+            fi
+            if test -n "$javac_works" && test -n "$javac_noassert_works"; then
+              rm -f conftestfail.class
+              if { echo "$as_me:36903: $JAVAC -d . conftestfail.java" >&5
+                   $JAVAC -d . conftestfail.java >&5 2>&1
+                 } \
+                 && test -f conftestfail.class \
+                 && ! { echo "$as_me:36907: $JAVAC -fno-assert -d . conftestfail.java" >&5
+                        $JAVAC -fno-assert -d . conftestfail.java >&5 2>&1
+                      }; then
+                                javac_works=
+              fi
+            fi
+            if test -n "$javac_works"; then
+              CONF_JAVAC="$JAVAC"
+              HAVE_JAVAC_ENVVAR=1
+              HAVE_JAVACOMP=1
+            else
+              if test -n "$javac_noassert_works"; then
+                CONF_JAVAC="$JAVAC -fno-assert"
+                HAVE_JAVAC_ENVVAR=1
+                HAVE_JAVACOMP=1
+              fi
+            fi
+          fi
+        fi
+      fi
+    else
+                  rm -f conftest.class
+      if { echo "$as_me:36929: $JAVAC -d . conftest.java" >&5
+           $JAVAC -d . conftest.java >&5 2>&1
+         } \
+         && test -f conftest.class \
+         && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+                rm -f conftest.class
+        rm -f conftestfail.class
+        if { echo "$as_me:36936: $JAVAC -source $source_version -d . conftest.java" >&5
+             $JAVAC -source "$source_version" -d . conftest.java >&5 2>&1
+           } \
+           && test -f conftest.class \
+           && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5 \
+           && { echo "$as_me:36941: $JAVAC -d . conftestfail.java" >&5
+                $JAVAC -d . conftestfail.java >&5 2>&1
+              } \
+           && test -f conftestfail.class \
+           && ! { echo "$as_me:36945: $JAVAC -source $source_version -d . conftestfail.java" >&5
+                  $JAVAC -source "$source_version" -d . conftestfail.java >&5 2>&1
+                }; then
+          CONF_JAVAC="$JAVAC -source $source_version"
+          HAVE_JAVAC_ENVVAR=1
+          HAVE_JAVACOMP=1
+        else
+          CONF_JAVAC="$JAVAC"
+          HAVE_JAVAC_ENVVAR=1
+          HAVE_JAVACOMP=1
+        fi
+      else
+                        rm -f conftest.class
+        if { echo "$as_me:36958: $JAVAC -target $target_version -d . conftest.java" >&5
+             $JAVAC -target "$target_version" -d . conftest.java >&5 2>&1
+           } \
+           && test -f conftest.class \
+           && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+                    rm -f conftest.class
+          rm -f conftestfail.class
+          if { echo "$as_me:36965: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&5
+               $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&5 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5 \
+             && { echo "$as_me:36970: $JAVAC -target $target_version -d . conftestfail.java" >&5
+                  $JAVAC -target "$target_version" -d . conftestfail.java >&5 2>&1
+                } \
+             && test -f conftestfail.class \
+             && ! { echo "$as_me:36974: $JAVAC -target $target_version -source $source_version -d . conftestfail.java" >&5
+                    $JAVAC -target "$target_version" -source "$source_version" -d . conftestfail.java >&5 2>&1
+                  }; then
+            CONF_JAVAC="$JAVAC -target $target_version -source $source_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          else
+            CONF_JAVAC="$JAVAC -target $target_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        else
+                                        rm -f conftest.class
+          if { echo "$as_me:36987: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&5
+               $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&5 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+            CONF_JAVAC="$JAVAC -target $target_version -source $source_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        fi
+      fi
+    fi
+  fi
+  if test -z "$HAVE_JAVACOMP"; then
+                # Extract the first word of "gcj", so it can be a program name with args.
+set dummy gcj; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_GCJ_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_GCJ_IN_PATH"; then
+  ac_cv_prog_HAVE_GCJ_IN_PATH="$HAVE_GCJ_IN_PATH" # 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_HAVE_GCJ_IN_PATH="yes"
+    $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
+HAVE_GCJ_IN_PATH=$ac_cv_prog_HAVE_GCJ_IN_PATH
+if test -n "$HAVE_GCJ_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+    # Extract the first word of "javac", so it can be a program name with args.
+set dummy javac; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_JAVAC_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_JAVAC_IN_PATH"; then
+  ac_cv_prog_HAVE_JAVAC_IN_PATH="$HAVE_JAVAC_IN_PATH" # 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_HAVE_JAVAC_IN_PATH="yes"
+    $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
+HAVE_JAVAC_IN_PATH=$ac_cv_prog_HAVE_JAVAC_IN_PATH
+if test -n "$HAVE_JAVAC_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+    # Extract the first word of "jikes", so it can be a program name with args.
+set dummy jikes; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_JIKES_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_JIKES_IN_PATH"; then
+  ac_cv_prog_HAVE_JIKES_IN_PATH="$HAVE_JIKES_IN_PATH" # 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_HAVE_JIKES_IN_PATH="yes"
+    $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
+HAVE_JIKES_IN_PATH=$ac_cv_prog_HAVE_JIKES_IN_PATH
+if test -n "$HAVE_JIKES_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+                if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_GCJ_IN_PATH"; then
+            if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^3\.[01]/d' | grep '^[3-9]' >/dev/null; then
+                if { echo "$as_me:37105: gcj -C -d . conftestlib.java" >&5
+             gcj -C -d . conftestlib.java >&5 2>&1
+           }; then
+                    if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then
+                                    rm -f conftest.class
+            if { echo "$as_me:37110: gcj -C -d . conftest.java" >&5
+                 gcj -C -d . conftest.java >&5 2>&1
+               } \
+               && test -f conftest.class \
+               && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+                            rm -f conftest.class
+              rm -f conftestfail.class
+              if { echo "$as_me:37117: gcj -C -fsource=$source_version -d . conftest.java" >&5
+                   gcj -C -fsource="$source_version" -d . conftest.java >&5 2>&1
+                 } \
+                 && test -f conftest.class \
+                 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5 \
+                 && { echo "$as_me:37122: gcj -C -d . conftestfail.java" >&5
+                      gcj -C -d . conftestfail.java >&5 2>&1
+                    } \
+                 && test -f conftestfail.class \
+                 && ! { echo "$as_me:37126: gcj -C -fsource=$source_version -d . conftestfail.java" >&5
+                        gcj -C -fsource="$source_version" -d . conftestfail.java >&5 2>&1
+                      }; then
+                CONF_JAVAC="gcj -C -fsource=$source_version"
+                HAVE_JAVAC_ENVVAR=1
+                HAVE_JAVACOMP=1
+              else
+                CONF_JAVAC="gcj -C"
+                HAVE_JAVAC_ENVVAR=1
+                HAVE_JAVACOMP=1
+              fi
+            else
+                            rm -f conftest.class
+              rm -f conftestfail.class
+              if { echo "$as_me:37140: gcj -C -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&5
+                   gcj -C -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&5 2>&1
+                 } \
+                 && test -f conftest.class \
+                 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+                CONF_JAVAC="gcj -C -fsource=$source_version -ftarget=$target_version"
+                HAVE_JAVAC_ENVVAR=1
+                HAVE_JAVACOMP=1
+              fi
+            fi
+          else
+                                                if test "$target_version" = 1.4 && test "$source_version" = 1.4; then
+              rm -f conftest.class
+              if { echo "$as_me:37153: gcj -C -d . conftest.java" >&5
+                   gcj -C -d . conftest.java >&5 2>&1
+                 } \
+                 && test -f conftest.class; then
+                CONF_JAVAC="gcj -C"
+                HAVE_GCJ_C=1
+                HAVE_JAVACOMP=1
+              fi
+            else
+              if test "$target_version" = 1.4 && test "$source_version" = 1.3; then
+                                                rm -f conftest.class
+                if { echo "$as_me:37164: gcj -C -fno-assert -d . conftest.java" >&5
+                     gcj -C -fno-assert -d . conftest.java >&5 2>&1
+                   } \
+                   && test -f conftest.class; then
+                  CONF_JAVAC="gcj -C -fno-assert"
+                  HAVE_GCJ_C=1
+                  HAVE_JAVACOMP=1
+                else
+                  rm -f conftest.class
+                  if { echo "$as_me:37173: gcj -C -d . conftest.java" >&5
+                       gcj -C -d . conftest.java >&5 2>&1
+                     } \
+                     && test -f conftest.class; then
+                    CONF_JAVAC="gcj -C"
+                    HAVE_GCJ_C=1
+                    HAVE_JAVACOMP=1
+                  fi
+                fi
+              fi
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JAVAC_IN_PATH"; then
+            if { javac -version >/dev/null 2>/dev/null || test $? -le 2; } \
+         && ( if javac -help 2>&1 >/dev/null | grep at.dms.kjc.Main >/dev/null && javac -help 2>/dev/null | grep 'released.*2000' >/dev/null ; then exit 1; else exit 0; fi ); then
+                                rm -f conftest.class
+        if { echo "$as_me:37192: javac -d . conftest.java" >&5
+             javac -d . conftest.java >&5 2>&1
+           } \
+           && test -f conftest.class \
+           && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+                    rm -f conftest.class
+          rm -f conftestfail.class
+          if { echo "$as_me:37199: javac -source $source_version -d . conftest.java" >&5
+               javac -source "$source_version" -d . conftest.java >&5 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5 \
+             && { echo "$as_me:37204: javac -d . conftestfail.java" >&5
+                  javac -d . conftestfail.java >&5 2>&1
+                } \
+             && test -f conftestfail.class \
+             && ! { echo "$as_me:37208: javac -source $source_version -d . conftestfail.java" >&5
+                    javac -source "$source_version" -d . conftestfail.java >&5 2>&1
+                  }; then
+            CONF_JAVAC="javac -source $source_version"
+            HAVE_JAVAC=1
+            HAVE_JAVACOMP=1
+          else
+            CONF_JAVAC="javac"
+            HAVE_JAVAC=1
+            HAVE_JAVACOMP=1
+          fi
+        else
+                              rm -f conftest.class
+          if { echo "$as_me:37221: javac -target $target_version -d . conftest.java" >&5
+               javac -target "$target_version" -d . conftest.java >&5 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+                        rm -f conftest.class
+            rm -f conftestfail.class
+            if { echo "$as_me:37228: javac -target $target_version -source $source_version -d . conftest.java" >&5
+                 javac -target "$target_version" -source "$source_version" -d . conftest.java >&5 2>&1
+               } \
+               && test -f conftest.class \
+               && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5 \
+               && { echo "$as_me:37233: javac -target $target_version -d . conftestfail.java" >&5
+                    javac -target "$target_version" -d . conftestfail.java >&5 2>&1
+                  } \
+               && test -f conftestfail.class \
+               && ! { echo "$as_me:37237: javac -target $target_version -source $source_version -d . conftestfail.java" >&5
+                      javac -target "$target_version" -source "$source_version" -d . conftestfail.java >&5 2>&1
+                    }; then
+              CONF_JAVAC="javac -target $target_version -source $source_version"
+              HAVE_JAVAC=1
+              HAVE_JAVACOMP=1
+            else
+              CONF_JAVAC="javac -target $target_version"
+              HAVE_JAVAC=1
+              HAVE_JAVACOMP=1
+            fi
+          else
+                                                rm -f conftest.class
+            if { echo "$as_me:37250: javac -target $target_version -source $source_version -d . conftest.java" >&5
+                 javac -target "$target_version" -source "$source_version" -d . conftest.java >&5 2>&1
+               } \
+               && test -f conftest.class \
+               && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&5; then
+              CONF_JAVAC="javac -target $target_version -source $source_version"
+              HAVE_JAVAC=1
+              HAVE_JAVACOMP=1
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JIKES_IN_PATH"; then
+            if { jikes >/dev/null 2>/dev/null || test $? = 1; } \
+         && (
+              # See if the existing CLASSPATH is sufficient to make jikes work.
+              unset JAVA_HOME
+              jikes conftestlib.java >&5 2>&1
+              error=$?
+              rm -f conftestlib.class
+              exit $error
+            ); then
+                                if test "$source_version" = 1.3; then
+          CONF_JAVAC="jikes"
+          HAVE_JIKES=1
+          HAVE_JAVACOMP=1
+        fi
+      fi
+    fi
+  fi
+  rm -f conftest*.java conftest*.class
+  if test -n "$HAVE_JAVACOMP"; then
+    ac_result="$CONF_JAVAC"
+  else
+    ac_result="no"
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_result" >&5
+$as_echo "$ac_result" >&6; }
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Java virtual machine" >&5
+$as_echo_n "checking for Java virtual machine... " >&6; }
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  CLASSPATH_SEPARATOR=';'
+else
+  CLASSPATH_SEPARATOR=':'
+fi
+rm -f conftest*
+
+  CONF_JAVA=
+  HAVE_JAVA_ENVVAR=
+  HAVE_GIJ=
+  HAVE_JAVA=
+  HAVE_JRE=
+  HAVE_JVIEW=
+  HAVE_JAVAEXEC=1
+  if test -n "$JAVA"; then
+    HAVE_JAVA_ENVVAR=1
+    CONF_JAVA="$JAVA"
+  else
+                # Extract the first word of "gij", so it can be a program name with args.
+set dummy gij; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_GIJ_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_GIJ_IN_PATH"; then
+  ac_cv_prog_HAVE_GIJ_IN_PATH="$HAVE_GIJ_IN_PATH" # 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_HAVE_GIJ_IN_PATH="yes"
+    $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
+HAVE_GIJ_IN_PATH=$ac_cv_prog_HAVE_GIJ_IN_PATH
+if test -n "$HAVE_GIJ_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+    # Extract the first word of "java", so it can be a program name with args.
+set dummy java; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_JAVA_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_JAVA_IN_PATH"; then
+  ac_cv_prog_HAVE_JAVA_IN_PATH="$HAVE_JAVA_IN_PATH" # 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_HAVE_JAVA_IN_PATH="yes"
+    $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
+HAVE_JAVA_IN_PATH=$ac_cv_prog_HAVE_JAVA_IN_PATH
+if test -n "$HAVE_JAVA_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+    # Extract the first word of "jre", so it can be a program name with args.
+set dummy jre; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_JRE_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_JRE_IN_PATH"; then
+  ac_cv_prog_HAVE_JRE_IN_PATH="$HAVE_JRE_IN_PATH" # 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_HAVE_JRE_IN_PATH="yes"
+    $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
+HAVE_JRE_IN_PATH=$ac_cv_prog_HAVE_JRE_IN_PATH
+if test -n "$HAVE_JRE_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+    # Extract the first word of "jview", so it can be a program name with args.
+set dummy jview; ac_word=$2
+:
+if ${ac_cv_prog_HAVE_JVIEW_IN_PATH+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_JVIEW_IN_PATH"; then
+  ac_cv_prog_HAVE_JVIEW_IN_PATH="$HAVE_JVIEW_IN_PATH" # 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_HAVE_JVIEW_IN_PATH="yes"
+    $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
+HAVE_JVIEW_IN_PATH=$ac_cv_prog_HAVE_JVIEW_IN_PATH
+if test -n "$HAVE_JVIEW_IN_PATH"; then
+  :
+else
+  :
+fi
+
+
+
+    export CLASSPATH
+    if test -n "$HAVE_GIJ_IN_PATH" \
+       && gij --version >/dev/null 2>/dev/null \
+       ; then
+      HAVE_GIJ=1
+      CONF_JAVA="gij"
+    else
+      if test -n "$HAVE_JAVA_IN_PATH" \
+         && java -version >/dev/null 2>/dev/null \
+         ; then
+        HAVE_JAVA=1
+        CONF_JAVA="java"
+      else
+        if test -n "$HAVE_JRE_IN_PATH" \
+           && (jre >/dev/null 2>/dev/null || test $? = 1) \
+           ; then
+          HAVE_JRE=1
+          CONF_JAVA="jre"
+        else
+          if test -n "$HAVE_JVIEW_IN_PATH" \
+             && (jview -? >/dev/null 2>/dev/null || test $? = 1) \
+             ; then
+            HAVE_JVIEW=1
+            CONF_JAVA="jview"
+          else
+            HAVE_JAVAEXEC=
+          fi
+        fi
+      fi
+    fi
+
+  fi
+  if test -n "$HAVE_JAVAEXEC"; then
+    ac_result="$CONF_JAVA"
+  else
+    ac_result="no"
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_result" >&5
+$as_echo "$ac_result" >&6; }
+
+
+
+
+
+
+
+
+
+
+ac_config_files="$ac_config_files Makefile build-aux/Makefile po/Makefile.in data/Makefile etc/Makefile examples/Makefile examples/calc++/Makefile lib/Makefile src/Makefile doc/Makefile doc/yacc.1"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -16029,39 +37530,70 @@
 
 # The following way of writing the cache mishandles newlines in values,
 # but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
+# So, we kill variables containing newlines.
 # Ultrix sh set writes to stderr and can't be redirected directly,
 # and sets the high bit in the cache file unless we assign to the vars.
-{
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
   (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
       sed -n \
 	"s/'/'\\\\''/g;
 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;;
+      ;; #(
     *)
       # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
       ;;
-    esac;
-} |
+    esac |
+    sort
+) |
   sed '
+     /^ac_cv_env_/b end
      t clear
-     : clear
+     :clear
      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
      t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
-  if test -w $cache_file; then
-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-    cat confcache >$cache_file
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
-    echo "not updating unwritable cache $cache_file"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -16070,87 +37602,139 @@
 # Let make expand exec_prefix.
 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[	 ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[	 ]*$//;
-}'
-fi
-
 DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
+U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Add them.
-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
 done
 LIBOBJS=$ac_libobjs
 
 LTLIBOBJS=$ac_ltlibobjs
 
 
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${BISON_CXX_WORKS_TRUE}" && test -z "${BISON_CXX_WORKS_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"BISON_CXX_WORKS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"BISON_CXX_WORKS\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
 fi
 
-: ${CONFIG_STATUS=./config.status}
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BISON_CXX_WORKS_TRUE}" && test -z "${BISON_CXX_WORKS_FALSE}"; then
+  as_fn_error $? "conditional \"BISON_CXX_WORKS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
+  as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_ALLOCA_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS=
+if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_FLOAT_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+
+if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+CONFIG_INCLUDE=lib/config.h
+
+if test -z "${GL_GENERATE_SCHED_H_TRUE}" && test -z "${GL_GENERATE_SCHED_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_SCHED_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE}"; then
+  as_fn_error $? "conditional \"LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+    gl_libobjs=
+    gl_ltlibobjs=
+    if test -n "$gl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gl_libobjs="$gl_libobjs $i.$ac_objext"
+        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+      done
+    fi
+    gl_LIBOBJS=$gl_libobjs
+
+    gl_LTLIBOBJS=$gl_ltlibobjs
+
+
+
+    gltests_libobjs=
+    gltests_ltlibobjs=
+    if test -n "$gltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+      done
+    fi
+    gltests_LIBOBJS=$gltests_libobjs
+
+    gltests_LTLIBOBJS=$gltests_ltlibobjs
+
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
 #! $SHELL
 # Generated by $as_me.
 # Run this file to recreate the current configuration.
@@ -16160,81 +37744,253 @@
 debug=false
 ac_cs_recheck=false
 ac_cs_silent=false
+
 SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
+  setopt NO_GLOB_SUBST
 else
-  as_unset=false
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
 
 
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
 else
   as_expr=false
 fi
 
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
   as_basename=basename
 else
   as_basename=false
 fi
 
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
-
-# PATH needs CR, and LINENO needs CR and PATH.
 # Avoid depending upon Character Ranges.
 as_cr_letters='abcdefghijklmnopqrstuvwxyz'
 as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
@@ -16242,148 +37998,111 @@
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); exit 1; }; }
-
-  # 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 sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
     as_ln_s='ln -s'
+    # ... 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'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
   fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
 
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
 fi
 
-as_executable_p="test -f"
+
+# 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
 
 # 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'"
@@ -16392,31 +38111,20 @@
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
 exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
 
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by GNU Bison $as_me 2.3, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
+# values after options handling.
+ac_log="
+This file was extended by GNU Bison $as_me 2.7, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -16424,45 +38132,48 @@
   CONFIG_COMMANDS = $CONFIG_COMMANDS
   $ $0 $@
 
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
 _ACEOF
 
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_links="$ac_config_links"
+config_commands="$ac_config_commands"
 
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
+_ACEOF
 
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
 
-Usage: $0 [OPTIONS] [FILE]...
+Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
-  -q, --quiet      do not print progress messages
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-		   instantiate the configuration header FILE
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
 
 Configuration files:
 $config_files
@@ -16470,87 +38181,100 @@
 Configuration headers:
 $config_headers
 
+Configuration links:
+$config_links
+
 Configuration commands:
 $config_commands
 
-Report bugs to <bug-autoconf@gnu.org>."
+Report bugs to <bug-bison@gnu.org>.
+GNU Bison home page: <http://www.gnu.org/software/bison/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+
 _ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GNU Bison config.status 2.3
-configured by $0, generated by GNU Autoconf 2.59,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+GNU Bison config.status 2.7
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
 ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
-  --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
-  -*)
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
     ac_option=$1
     ac_optarg=$2
     ac_shift=shift
     ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
   esac
 
   case $ac_option in
   # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
   --header | --heade | --head | --hea )
     $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
     ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
 
-  *) ac_config_targets="$ac_config_targets $1" ;;
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
 
   esac
   shift
@@ -16564,60 +38288,80 @@
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $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'
+  export CONFIG_SHELL
+  exec "\$@"
 fi
 
 _ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
 
-cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #
-# INIT-COMMANDS section.
+# INIT-COMMANDS
 #
-
 AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+GNUmakefile=$GNUmakefile
 # Capture the value of obsolete ALL_LINGUAS because we need it to compute
     # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
-    # from automake.
+    # from automake < 1.5.
     eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
     # Capture the value of LINGUAS because we need it to compute CATALOGS.
     LINGUAS="${LINGUAS-%UNSET%}"
 
 
+
 _ACEOF
 
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 
-
-cat >>$CONFIG_STATUS <<\_ACEOF
+# Handling of arguments.
 for ac_config_target in $ac_config_targets
 do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "runtime-po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES runtime-po/Makefile.in" ;;
-  "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
-  "tests/atlocal" ) CONFIG_FILES="$CONFIG_FILES tests/atlocal" ;;
-  "tests/bison" ) CONFIG_FILES="$CONFIG_FILES tests/bison" ;;
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "build-aux/Makefile" ) CONFIG_FILES="$CONFIG_FILES build-aux/Makefile" ;;
-  "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
-  "data/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
-  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
-  "examples/calc++/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/calc++/Makefile" ;;
-  "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
-  "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
-  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-  "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
-  "tests/atconfig" ) CONFIG_COMMANDS="$CONFIG_COMMANDS tests/atconfig" ;;
-  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.hin" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
+  case $ac_config_target in
+    "lib/config.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/config.h:lib/config.in.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;;
+    "javacomp.sh") CONFIG_FILES="$CONFIG_FILES javacomp.sh:build-aux/javacomp.sh.in" ;;
+    "javaexec.sh") CONFIG_FILES="$CONFIG_FILES javaexec.sh:build-aux/javaexec.sh.in" ;;
+    "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+    "runtime-po/Makefile.in") CONFIG_FILES="$CONFIG_FILES runtime-po/Makefile.in" ;;
+    "etc/bench.pl") CONFIG_FILES="$CONFIG_FILES etc/bench.pl" ;;
+    "tests/atconfig") CONFIG_COMMANDS="$CONFIG_COMMANDS tests/atconfig" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "tests/atlocal") CONFIG_FILES="$CONFIG_FILES tests/atlocal" ;;
+    "tests/bison") CONFIG_FILES="$CONFIG_FILES tests/bison" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "build-aux/Makefile") CONFIG_FILES="$CONFIG_FILES build-aux/Makefile" ;;
+    "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+    "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+    "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "examples/calc++/Makefile") CONFIG_FILES="$CONFIG_FILES examples/calc++/Makefile" ;;
+    "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "doc/yacc.1") CONFIG_FILES="$CONFIG_FILES doc/yacc.1" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
+
 # If the user did not use the arguments to specify the items to instantiate,
 # then the envvar interface is used.  Set only those that are not.
 # We use the long form for the default assignment because of an extremely
@@ -16625,861 +38369,714 @@
 if $ac_need_defaults; then
   test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
   test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
   test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
 fi
 
 # Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
+# simply because there is no reason against having it here, and in addition,
 # creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
 }
-
 # Create a (secure) tmp directory for tmp files.
 
 {
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
 }  ||
 {
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
 {
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
 }
 
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-cat >>$CONFIG_STATUS <<_ACEOF
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
 
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@CYGPATH_W@,$CYGPATH_W,;t t
-s,@PACKAGE@,$PACKAGE,;t t
-s,@VERSION@,$VERSION,;t t
-s,@ACLOCAL@,$ACLOCAL,;t t
-s,@AUTOCONF@,$AUTOCONF,;t t
-s,@AUTOMAKE@,$AUTOMAKE,;t t
-s,@AUTOHEADER@,$AUTOHEADER,;t t
-s,@MAKEINFO@,$MAKEINFO,;t t
-s,@install_sh@,$install_sh,;t t
-s,@STRIP@,$STRIP,;t t
-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
-s,@mkdir_p@,$mkdir_p,;t t
-s,@AWK@,$AWK,;t t
-s,@SET_MAKE@,$SET_MAKE,;t t
-s,@am__leading_dot@,$am__leading_dot,;t t
-s,@AMTAR@,$AMTAR,;t t
-s,@am__tar@,$am__tar,;t t
-s,@am__untar@,$am__untar,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@DEPDIR@,$DEPDIR,;t t
-s,@am__include@,$am__include,;t t
-s,@am__quote@,$am__quote,;t t
-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
-s,@CCDEPMODE@,$CCDEPMODE,;t t
-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@WARNING_CFLAGS@,$WARNING_CFLAGS,;t t
-s,@WERROR_CFLAGS@,$WERROR_CFLAGS,;t t
-s,@WARNING_CXXFLAGS@,$WARNING_CXXFLAGS,;t t
-s,@YACC_SCRIPT@,$YACC_SCRIPT,;t t
-s,@YACC_LIBRARY@,$YACC_LIBRARY,;t t
-s,@LEX@,$LEX,;t t
-s,@LEXLIB@,$LEXLIB,;t t
-s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t
-s,@YACC@,$YACC,;t t
-s,@RANLIB@,$RANLIB,;t t
-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@M4@,$M4,;t t
-s,@STDBOOL_H@,$STDBOOL_H,;t t
-s,@HAVE__BOOL@,$HAVE__BOOL,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@GETOPT_H@,$GETOPT_H,;t t
-s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
-s,@USE_NLS@,$USE_NLS,;t t
-s,@MSGFMT@,$MSGFMT,;t t
-s,@GMSGFMT@,$GMSGFMT,;t t
-s,@XGETTEXT@,$XGETTEXT,;t t
-s,@MSGMERGE@,$MSGMERGE,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@INTL_MACOSX_LIBS@,$INTL_MACOSX_LIBS,;t t
-s,@LIBICONV@,$LIBICONV,;t t
-s,@LTLIBICONV@,$LTLIBICONV,;t t
-s,@INTLLIBS@,$INTLLIBS,;t t
-s,@LIBINTL@,$LIBINTL,;t t
-s,@LTLIBINTL@,$LTLIBINTL,;t t
-s,@POSUB@,$POSUB,;t t
-s,@UNISTD_H@,$UNISTD_H,;t t
-s,@BISON_LOCALEDIR@,$BISON_LOCALEDIR,;t t
-s,@aclocaldir@,$aclocaldir,;t t
-s,@VALGRIND@,$VALGRIND,;t t
-s,@CXX@,$CXX,;t t
-s,@CXXFLAGS@,$CXXFLAGS,;t t
-s,@ac_ct_CXX@,$ac_ct_CXX,;t t
-s,@CXXDEPMODE@,$CXXDEPMODE,;t t
-s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
-s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
-s,@BISON_CXX_WORKS@,$BISON_CXX_WORKS,;t t
-s,@BISON_CXX_WORKS_TRUE@,$BISON_CXX_WORKS_TRUE,;t t
-s,@BISON_CXX_WORKS_FALSE@,$BISON_CXX_WORKS_FALSE,;t t
-s,@AUTOM4TE@,$AUTOM4TE,;t t
-s,@GCC@,$GCC,;t t
-s,@O0CFLAGS@,$O0CFLAGS,;t t
-s,@O0CXXFLAGS@,$O0CXXFLAGS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 fi # test -n "$CONFIG_FILES"
 
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS  :L $CONFIG_LINKS  :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
   esac
 
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+  ac_dir=`$as_dirname -- "$ac_file" ||
 $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$ac_file" : 'X\(//\)[^/]' \| \
 	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
   ac_builddir=.
 
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
 
 case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
+  .)  # We are building in place.
     ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
     ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
 esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
 
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
 
   case $INSTALL in
   [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
   esac
-
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-				     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
 $extrasub
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 :t
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
-  # Run the commands associated with the file.
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-    tests/bison ) chmod +x tests/bison ;;
-  esac
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
-ac_dB='[	 ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 # Do quote $f, to prevent DOS paths from being IFS'd.
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-  # Remove the trailing spaces.
-  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h.  The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status.  Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless.  Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo '  :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
-  # Write a limited-size here document to $tmp/defines.sed.
-  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#define' lines.
-  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo '  fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
-  # Write a limited-size here document to $tmp/undefs.sed.
-  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#undef'
-  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-  rm -f conftest.undefs
-  mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    echo "/* Generated by configure.  */" >$tmp/config.h
-  else
-    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
-  fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
   if test x"$ac_file" != x-; then
-    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
-      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-      { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
   fi
-# Compute $ac_file's index in $config_headers.
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
 _am_stamp_count=1
 for _am_header in $config_headers :; do
   case $_am_header in
-    $ac_file | $ac_file:* )
+    $_am_arg | $_am_arg:* )
       break ;;
     * )
       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
   esac
 done
-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
-$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X$ac_file : 'X\(//\)[^/]' \| \
-	 X$ac_file : 'X\(//\)$' \| \
-	 X$ac_file : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X$ac_file |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`/stamp-h$_am_stamp_count
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+  :L)
+  #
+  # CONFIG_LINK
+  #
 
-#
-# CONFIG_COMMANDS section.
-#
-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
-  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
-  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
-  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_dest" : 'X\(//\)[^/]' \| \
-	 X"$ac_dest" : 'X\(//\)$' \| \
-	 X"$ac_dest" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
+  if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+    :
   else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
+    # Prefer the file from the source tree if names are identical.
+    if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+      ac_source=$srcdir/$ac_source
+    fi
 
-  ac_builddir=.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
+$as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
 
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
+    if test ! -r "$ac_source"; then
+      as_fn_error $? "$ac_source: file not found" "$LINENO" 5
+    fi
+    rm -f "$ac_file"
 
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
+    # Try a relative symlink, then a hard link, then a copy.
+    case $ac_source in
+    [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+	*) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+    esac
+    ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+      ln "$ac_source" "$ac_file" 2>/dev/null ||
+      cp -p "$ac_source" "$ac_file" ||
+      as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+  fi
+ ;;
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
 
 
-  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-echo "$as_me: executing $ac_dest commands" >&6;}
-  case $ac_dest in
-    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
-  # Strip MF so we end up with the name of the file.
-  mf=`echo "$mf" | sed -e 's/:.*$//'`
-  # Check whether this is an Automake generated Makefile or not.
-  # We used to match only the files named `Makefile.in', but
-  # some people rename them; so instead we look at the file content.
-  # Grep'ing the first line is not enough: some people post-process
-  # each Makefile.in and add a new line on top of each file to say so.
-  # So let's grep whole file.
-  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-    dirpart=`(dirname "$mf") 2>/dev/null ||
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named 'Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
 $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$mf" : 'X\(//\)[^/]' \| \
 	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  else
-    continue
-  fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`(dirname "$file") 2>/dev/null ||
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running 'make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
 $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$file" : 'X\(//\)[^/]' \| \
 	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    { if $as_mkdir_p; then
-    mkdir -p $dirpart/$fdir
-  else
-    as_dir=$dirpart/$fdir
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
     done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
   done
-done
+}
  ;;
-    default-1 )
+    "po-directories":C)
     for ac_file in $CONFIG_FILES; do
       # Support "outfile[:infile[:infile...]]"
       case "$ac_file" in
@@ -17505,7 +39102,8 @@
         if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
           rm -f "$ac_dir/POTFILES"
           test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
-          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          gt_tab=`printf '\t'`
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
           POMAKEFILEDEPS="POTFILES.in"
           # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
           # on $ac_dir but don't depend on user-specified configuration
@@ -17516,11 +39114,12 @@
               test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
             fi
             ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-            # Hide the ALL_LINGUAS assigment from automake.
+            # Hide the ALL_LINGUAS assignment from automake < 1.5.
             eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
             POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
           else
             # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assignment from automake < 1.5.
             eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
           fi
           # Compute POFILES
@@ -17591,10 +39190,11 @@
         ;;
       esac
     done ;;
-    tests/atconfig ) cat >tests/atconfig <<ATEOF
+    "etc/bench.pl":F) chmod +x etc/bench.pl ;;
+    "tests/atconfig":C) cat >tests/atconfig <<ATEOF
 # Configurable variable values for building test suites.
 # Generated by $0.
-# Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+# Copyright (C) 2012 Free Software Foundation, Inc.
 
 # The test suite will define top_srcdir=$at_top_srcdir/../.. etc.
 at_testdir='tests'
@@ -17603,25 +39203,30 @@
 abs_srcdir='$ac_abs_srcdir'
 at_top_srcdir='$ac_top_srcdir'
 abs_top_srcdir='$ac_abs_top_srcdir'
-at_top_builddir='$ac_top_builddir'
+at_top_build_prefix='$ac_top_build_prefix'
 abs_top_builddir='$ac_abs_top_builddir'
 
+# Backward compatibility with Autotest <= 2.59b:
+at_top_builddir=\$at_top_build_prefix
+
 AUTOTEST_PATH='tests'
 
 SHELL=\${CONFIG_SHELL-'$SHELL'}
 ATEOF
  ;;
+    "tests/bison":F) chmod +x tests/bison ;;
+
   esac
-done
-_ACEOF
+done # for ac_tag
 
-cat >>$CONFIG_STATUS <<\_ACEOF
 
-{ (exit 0); exit 0; }
+as_fn_exit 0
 _ACEOF
-chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
 
 # configure is writing to config.log, and then calls config.status.
 # config.status does its own redirection, appending to config.log.
@@ -17641,6 +39246,10 @@
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
diff --git a/configure.ac b/configure.ac
index 7804b02..e6403f4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,11 +1,10 @@
 # Configure template for GNU Bison.                   -*-Autoconf-*-
 #
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-# Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -14,57 +13,131 @@
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This file uses AC_CONFIG_MACRO_DIR, so we need Autoconf 2.58 or better.
-# But Autoconf 2.58 has a bug in the way that it generates tests: it
-# puts the wrong absolute path names in the tests.  So we need at
-# least Autoconf 2.59.
-AC_PREREQ(2.59)
+# In order for some versions of Sun Studio to compile our C++ test cases
+# correctly, we need Autoconf 2.64 or better to handle the restrict
+# keyword in at least string.h from gnulib.  We need Autoconf 2.68 or
+# better to avoid a typo in the `configure --help' entry for the YACC
+# environment variable.
+AC_PREREQ([2.68])
+m4_pattern_forbid([^gl_[A-Z]])
 
-AC_INIT([GNU Bison], [2.3], [bug-bison@gnu.org])
+AC_INIT([GNU Bison],
+        m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+        [bug-bison@gnu.org])
+AC_SUBST([PACKAGE_COPYRIGHT_YEAR], [2012])
+AC_DEFINE_UNQUOTED([PACKAGE_COPYRIGHT_YEAR], [$PACKAGE_COPYRIGHT_YEAR],
+                   [The copyright year for this package])
+
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
 
-# We don't have a file m4/Makefile.am, so we need Automake 1.8 or later.
-AM_INIT_AUTOMAKE([1.8 check-news readme-alpha dist-bzip2])
-AC_CONFIG_HEADERS([config.h:config.hin])
-
-gl_USE_SYSTEM_EXTENSIONS
+# Automake 1.10.3 and 1.11.1 fix a security flaw discussed here:
+#
+#   http://thread.gmane.org/gmane.comp.sysutils.autotools.announce/131
+#
+# To avoid 1.11, we make 1.11.1 the minimum version.
+#
+# We want gnits strictness only when rolling a stable release.  For
+# release candidates, we use version strings like 2.4.3_rc1, but gnits
+# doesn't like that, so we let the underscore disable gnits.  Between
+# releases, we want to be able run make dist without being required to
+# add a bogus NEWS entry.  In that case, the version string
+# automatically contains a dash, which we also let disable gnits.
+AM_INIT_AUTOMAKE([1.11.1 dist-xz silent-rules]
+                 m4_bmatch(m4_defn([AC_PACKAGE_VERSION]), [[-_]],
+                           [gnu], [gnits]))
+AM_SILENT_RULES([yes])
+AC_CONFIG_HEADERS([lib/config.h:lib/config.in.h])
 
 # Checks for the compiler.
-AC_PROG_CC
-AM_PROG_CC_STDC
-AC_ARG_ENABLE(gcc-warnings,
+AC_PROG_CC_STDC
+AC_PROG_CXX
+
+# Gnulib (early checks).
+gl_EARLY
+
+# Gnulib uses '#pragma GCC diagnostic push' to silence some
+# warnings, but older gcc doesn't support this.
+AC_CACHE_CHECK([whether pragma GCC diagnostic push works],
+  [lv_cv_gcc_pragma_push_works], [
+  save_CFLAGS=$CFLAGS
+  CFLAGS='-Wunknown-pragmas -Werror'
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+    #pragma GCC diagnostic push
+    #pragma GCC diagnostic pop
+  ]])],
+  [lv_cv_gcc_pragma_push_works=yes],
+  [lv_cv_gcc_pragma_push_works=no])
+  CFLAGS=$save_CFLAGS])
+
+AC_ARG_ENABLE([gcc-warnings],
 [  --enable-gcc-warnings   turn on lots of GCC warnings (not recommended)],
-[case "${enableval}" in
+[case $enable_gcc_warnings in
    yes|no) ;;
-   *)      AC_MSG_ERROR([bad value ${enableval} for gcc-warnings option]) ;;
+   *)  AC_MSG_ERROR([invalid value for --gcc-warnings: $enable_gcc_warnings]);;
  esac],
-              [enableval=no])
-if test "${enableval}" = yes; then
-  BISON_WARNING(-Werror)
-  AC_SUBST([WERROR_CFLAGS], [$WARNING_CFLAGS])
-  WARNING_CFLAGS=
-  BISON_WARNING(-W)
-  BISON_WARNING(-Wall)
-  BISON_WARNING(-Wcast-align)
-  BISON_WARNING(-Wcast-qual)
-  BISON_WARNING(-Wformat)
-  BISON_WARNING(-Wwrite-strings)
-  AC_SUBST([WARNING_CXXFLAGS], [$WARNING_CFLAGS])
-  # The following warnings are not suitable for C++.
-  BISON_WARNING(-Wbad-function-cast)
-  BISON_WARNING(-Wmissing-declarations)
-  BISON_WARNING(-Wmissing-prototypes)
-  BISON_WARNING(-Wshadow)
-  BISON_WARNING(-Wstrict-prototypes)
-  AC_DEFINE([lint], 1, [Define to 1 if the compiler is checking for lint.])
+              [enable_gcc_warnings=no])
+if test "$enable_gcc_warnings" = yes; then
+  warn_common='-Wall -Wextra -Wno-sign-compare -Wcast-align
+    -Wformat -Wpointer-arith -Wwrite-strings'
+  warn_c='-Wbad-function-cast -Wshadow -Wstrict-prototypes'
+  warn_cxx='-Wnoexcept'
+  AC_LANG_PUSH([C])
+  # Clang supports many of GCC's -W options, but only issues warnings
+  # on the ones it does not recognize.  In that case, gl_WARN_ADD
+  # thinks the option is supported, and unknown options are then added
+  # to CFLAGS.  But then, when -Werror is added in the test suite for
+  # instance, the warning about the unknown option turns into an
+  # error.
+  #
+  # This should be addressed by gnulib's gl_WARN_ADD, but in the
+  # meanwhile, turn warnings about unknown options into errors in
+  # CFLAGS, and restore CFLAGS after the tests.
+  save_CFLAGS=$CFLAGS
+  gl_WARN_ADD([-Werror=unknown-warning-option], [CFLAGS])
+  for i in $warn_common $warn_c;
+  do
+    gl_WARN_ADD([$i], [WARN_CFLAGS])
+  done
+  gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
+
+  # Warnings for the test suite, and maybe for bison if GCC is modern
+  # enough.
+  gl_WARN_ADD([-Wmissing-declarations], [WARN_CFLAGS_TEST])
+  gl_WARN_ADD([-Wmissing-prototypes], [WARN_CFLAGS_TEST])
+  test $lv_cv_gcc_pragma_push_works = yes &&
+    AS_VAR_APPEND([WARN_CFLAGS], [" $WARN_CFLAGS_TEST"])
+
+  # Warnings for the test suite only.
+  gl_WARN_ADD([-Wundef], [WARN_CFLAGS_TEST])
+  gl_WARN_ADD([-pedantic], [WARN_CFLAGS_TEST])
+  CFLAGS=$save_CFLAGS
+  AC_LANG_POP([C])
+
+
+  AC_LANG_PUSH([C++])
+  save_CXXFLAGS=$CXXFLAGS
+  gl_WARN_ADD([-Werror=unknown-warning-option], [CXXFLAGS])
+  for i in $warn_common $warn_cxx;
+  do
+    gl_WARN_ADD([$i], [WARN_CXXFLAGS])
+  done
+  gl_WARN_ADD([-Wzero-as-null-pointer-constant], [WARN_CXXFLAGS],
+              [AC_LANG_PROGRAM([], [nullptr])])
+  gl_WARN_ADD([-Werror], [WERROR_CXXFLAGS])
+  # Warnings for the test suite only.
+  gl_WARN_ADD([-Wundef], [WARN_CXXFLAGS_TEST])
+  gl_WARN_ADD([-pedantic], [WARN_CXXFLAGS_TEST])
+  CXXFLAGS=$save_CXXFLAGS
+  AC_LANG_POP([C++])
 fi
 
 BISON_TEST_FOR_WORKING_C_COMPILER
+BISON_C_COMPILER_POSIXLY_CORRECT
+BISON_TEST_FOR_WORKING_CXX_COMPILER
+BISON_CXX_COMPILER_POSIXLY_CORRECT
 
 AC_ARG_ENABLE([yacc],
   [AC_HELP_STRING([--disable-yacc],
@@ -82,35 +155,43 @@
 AC_SUBST([YACC_LIBRARY])
 
 # Checks for programs.
+AM_MISSING_PROG([DOT], [dot])
 AC_PROG_LEX
+$LEX_IS_FLEX || AC_MSG_ERROR([Flex is required])
 AC_PROG_YACC
 AC_PROG_RANLIB
-BISON_PROG_GNU_M4
-if test x"$ac_cv_prog_gnu_m4" != xyes; then
-  AC_MSG_ERROR([GNU M4 1.4 is required])
-fi
+AC_PROG_GNU_M4
 AC_DEFINE_UNQUOTED([M4], ["$M4"], [Define to the GNU M4 executable name.])
+AC_DEFINE_UNQUOTED([M4_GNU_OPTION], ["$M4_GNU"], [Define to "-g" if GNU M4
+supports -g, otherwise to "".])
+AC_PATH_PROG([PERL], [perl])
+if test -z "$PERL"; then
+   AC_MSG_ERROR([perl not found])
+fi
+AM_MISSING_PROG([HELP2MAN], [help2man])
+AC_PATH_PROG([XSLTPROC], [xsltproc])
+AC_SUBST([XSLTPROC])
 
 # Checks for header files.
 AC_CHECK_HEADERS_ONCE([locale.h])
-AM_STDBOOL_H
 
 # Checks for compiler characteristics.
 AC_C_INLINE
 
-# Checks for types.
-AC_CHECK_TYPES([uintptr_t])
+# Gnulib (later checks).  Putting them here rather than right after
+# gl_EARLY avoids some redundant checks.
+gl_INIT
 
 # Checks for library functions.
 AC_CHECK_FUNCS_ONCE([setlocale])
 AM_WITH_DMALLOC
-BISON_PREREQ_SUBPIPE
 BISON_PREREQ_TIMEVAR
 
-# gnulib and gettext.
-GNULIB_AUTOCONF_SNIPPET
-# We use po/Makevars, so we need at least gettext 0.12.
-AM_GNU_GETTEXT_VERSION([0.12])
+# Gettext.
+# We use gnulib, which is only guaranteed to work properly with the
+# latest Gettext.
+AM_GNU_GETTEXT([external], [need-ngettext])
+AM_GNU_GETTEXT_VERSION([0.18])
 BISON_I18N
 
 # Internationalized parsers.
@@ -119,26 +200,39 @@
 aclocaldir='${datadir}/aclocal'
 AC_SUBST([aclocaldir])
 
+# Create the benchmark script.
+AC_CONFIG_FILES([etc/bench.pl], [chmod +x etc/bench.pl])
+
 # Initialize the test suite.
 AC_CONFIG_TESTDIR(tests)
 AC_CONFIG_FILES([tests/Makefile tests/atlocal])
 AC_CONFIG_FILES([tests/bison], [chmod +x tests/bison])
 AC_CHECK_PROGS([VALGRIND], [valgrind])
-AC_PROG_CXX
-BISON_TEST_FOR_WORKING_CXX_COMPILER
+case $VALGRIND:$host_os in
+  '':*) ;;
+  *:darwin*)
+    # See README-hacking.
+    # VALGRIND+=' --suppressions=$(abs_top_srcdir)/build-aux/darwin11.4.0.valgrind'
+    VALGRIND=;;
+  *:*)
+    AC_SUBST([VALGRIND_PREBISON], ["$VALGRIND -q"]);;
+esac
+
 AM_MISSING_PROG([AUTOM4TE], [autom4te])
 # Needed by tests/atlocal.in.
 AC_SUBST([GCC])
-O0CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]] *//'`
-AC_SUBST([O0CFLAGS])
-O0CXXFLAGS=`echo $CXXFLAGS | sed 's/-O[[0-9]] *//'`
-AC_SUBST([O0CXXFLAGS])
+
+gt_JAVACOMP([1.3])
+gt_JAVAEXEC
 
 AC_CONFIG_FILES([Makefile
-                 build-aux/Makefile
-                 po/Makefile.in
-                 data/Makefile
+		 build-aux/Makefile
+		 po/Makefile.in
+		 data/Makefile
+		 etc/Makefile
 		 examples/Makefile
 		    examples/calc++/Makefile
-                 lib/Makefile src/Makefile doc/Makefile])
+		 lib/Makefile src/Makefile
+		 doc/Makefile
+		   doc/yacc.1])
 AC_OUTPUT
diff --git a/darwin-lib/alloca.h b/darwin-lib/alloca.h
new file mode 100644
index 0000000..a0d618b
--- /dev/null
+++ b/darwin-lib/alloca.h
@@ -0,0 +1,64 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Memory allocation on the stack.
+
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2012 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 3, 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, see
+   <http://www.gnu.org/licenses/>.
+  */
+
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+   means there is a real alloca function.  */
+#ifndef _GL_ALLOCA_H
+#define _GL_ALLOCA_H
+
+/* alloca (N) returns a pointer to N bytes of memory
+   allocated on the stack, which will last until the function returns.
+   Use of alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns,
+     - for huge N (say, N >= 65536) - you never know how large (or small)
+       the stack is, and when the stack cannot fulfill the memory allocation
+       request, the program just crashes.
+ */
+
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _AIX
+#  define alloca __alloca
+# elif defined _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# elif defined __DECC && defined __VMS
+#  define alloca __ALLOCA
+# elif defined __TANDEM && defined _TNS_E_TARGET
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *_alloca (unsigned short);
+#  pragma intrinsic (_alloca)
+#  define alloca _alloca
+# else
+#  include <stddef.h>
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */
diff --git a/darwin-lib/arg-nonnull.h b/darwin-lib/arg-nonnull.h
new file mode 100644
index 0000000..f0dbac7
--- /dev/null
+++ b/darwin-lib/arg-nonnull.h
@@ -0,0 +1,10 @@
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
diff --git a/darwin-lib/c++defs.h b/darwin-lib/c++defs.h
new file mode 100644
index 0000000..3fd6322
--- /dev/null
+++ b/darwin-lib/c++defs.h
@@ -0,0 +1,255 @@
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
diff --git a/darwin-lib/config.h b/darwin-lib/config.h
new file mode 100644
index 0000000..57b2480
--- /dev/null
+++ b/darwin-lib/config.h
@@ -0,0 +1,2268 @@
+/* lib/config.h.  Generated from config.in.h by configure.  */
+/* lib/config.in.h.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+/* #undef AC_APPLE_UNIVERSAL_BUILD */
+
+/* Define to the number of bits in type 'ptrdiff_t'. */
+#define BITSIZEOF_PTRDIFF_T 64
+
+/* Define to the number of bits in type 'sig_atomic_t'. */
+#define BITSIZEOF_SIG_ATOMIC_T 32
+
+/* Define to the number of bits in type 'size_t'. */
+#define BITSIZEOF_SIZE_T 64
+
+/* Define to the number of bits in type 'wchar_t'. */
+#define BITSIZEOF_WCHAR_T 32
+
+/* Define to the number of bits in type 'wint_t'. */
+#define BITSIZEOF_WINT_T 32
+
+/* Define if you wish *printf() functions that have a safe handling of
+   non-IEEE-754 'long double' values. */
+#define CHECK_PRINTF_SAFE 1
+
+/* 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 */
+
+/* Define to 1 if using `alloca.c'. */
+/* #undef C_ALLOCA */
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'double'. */
+#define DBL_EXPBIT0_BIT 20
+
+/* Define as the word index where to find the exponent of 'double'. */
+#define DBL_EXPBIT0_WORD 1
+
+/* Define as the bit index in the word where to find the sign of 'double'. */
+/* #undef DBL_SIGNBIT_BIT */
+
+/* Define as the word index where to find the sign of 'double'. */
+/* #undef DBL_SIGNBIT_WORD */
+
+/* Define to 1 if // is a file system root distinct from /. */
+/* #undef DOUBLE_SLASH_IS_DISTINCT_ROOT */
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+/* #undef ENABLE_NLS */
+
+/* Define this to 1 if F_DUPFD behavior does not match POSIX */
+/* #undef FCNTL_DUPFD_BUGGY */
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'float'. */
+#define FLT_EXPBIT0_BIT 23
+
+/* Define as the word index where to find the exponent of 'float'. */
+#define FLT_EXPBIT0_WORD 0
+
+/* Define as the bit index in the word where to find the sign of 'float'. */
+/* #undef FLT_SIGNBIT_BIT */
+
+/* Define as the word index where to find the sign of 'float'. */
+/* #undef FLT_SIGNBIT_WORD */
+
+/* Define to 1 if fopen() fails to recognize a trailing slash. */
+/* #undef FOPEN_TRAILING_SLASH_BUG */
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module close-stream shall be considered present. */
+#define GNULIB_CLOSE_STREAM 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module dirname shall be considered present. */
+#define GNULIB_DIRNAME 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fd-safer-flag shall be considered present. */
+#define GNULIB_FD_SAFER_FLAG 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fopen-safer shall be considered present. */
+#define GNULIB_FOPEN_SAFER 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fscanf shall be considered present. */
+#define GNULIB_FSCANF 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module malloc-gnu shall be considered present. */
+#define GNULIB_MALLOC_GNU 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module pipe2-safer shall be considered present. */
+#define GNULIB_PIPE2_SAFER 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module scanf shall be considered present. */
+#define GNULIB_SCANF 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module snprintf shall be considered present. */
+#define GNULIB_SNPRINTF 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module strerror shall be considered present. */
+#define GNULIB_STRERROR 1
+
+/* Define to 1 when the gnulib module calloc-posix should be tested. */
+#define GNULIB_TEST_CALLOC_POSIX 1
+
+/* Define to 1 when the gnulib module cloexec should be tested. */
+#define GNULIB_TEST_CLOEXEC 1
+
+/* Define to 1 when the gnulib module close should be tested. */
+#define GNULIB_TEST_CLOSE 1
+
+/* Define to 1 when the gnulib module dup2 should be tested. */
+#define GNULIB_TEST_DUP2 1
+
+/* Define to 1 when the gnulib module environ should be tested. */
+#define GNULIB_TEST_ENVIRON 1
+
+/* Define to 1 when the gnulib module fcntl should be tested. */
+#define GNULIB_TEST_FCNTL 1
+
+/* Define to 1 when the gnulib module fopen should be tested. */
+#define GNULIB_TEST_FOPEN 1
+
+/* Define to 1 when the gnulib module fprintf-posix should be tested. */
+#define GNULIB_TEST_FPRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module frexp should be tested. */
+#define GNULIB_TEST_FREXP 1
+
+/* Define to 1 when the gnulib module frexpl should be tested. */
+#define GNULIB_TEST_FREXPL 1
+
+/* Define to 1 when the gnulib module fstat should be tested. */
+#define GNULIB_TEST_FSTAT 1
+
+/* Define to 1 when the gnulib module getdelim should be tested. */
+#define GNULIB_TEST_GETDELIM 1
+
+/* Define to 1 when the gnulib module getdtablesize should be tested. */
+#define GNULIB_TEST_GETDTABLESIZE 1
+
+/* Define to 1 when the gnulib module getline should be tested. */
+#define GNULIB_TEST_GETLINE 1
+
+/* Define to 1 when the gnulib module getopt-gnu should be tested. */
+#define GNULIB_TEST_GETOPT_GNU 1
+
+/* Define to 1 when the gnulib module isnan should be tested. */
+#define GNULIB_TEST_ISNAN 1
+
+/* Define to 1 when the gnulib module isnand should be tested. */
+#define GNULIB_TEST_ISNAND 1
+
+/* Define to 1 when the gnulib module isnanf should be tested. */
+#define GNULIB_TEST_ISNANF 1
+
+/* Define to 1 when the gnulib module isnanl should be tested. */
+#define GNULIB_TEST_ISNANL 1
+
+/* Define to 1 when the gnulib module iswblank should be tested. */
+#define GNULIB_TEST_ISWBLANK 1
+
+/* Define to 1 when the gnulib module ldexpl should be tested. */
+#define GNULIB_TEST_LDEXPL 1
+
+/* Define to 1 when the gnulib module malloc-posix should be tested. */
+#define GNULIB_TEST_MALLOC_POSIX 1
+
+/* Define to 1 when the gnulib module mbrtowc should be tested. */
+#define GNULIB_TEST_MBRTOWC 1
+
+/* Define to 1 when the gnulib module mbschr should be tested. */
+#define GNULIB_TEST_MBSCHR 1
+
+/* Define to 1 when the gnulib module mbsinit should be tested. */
+#define GNULIB_TEST_MBSINIT 1
+
+/* Define to 1 when the gnulib module mbsrchr should be tested. */
+#define GNULIB_TEST_MBSRCHR 1
+
+/* Define to 1 when the gnulib module memchr should be tested. */
+#define GNULIB_TEST_MEMCHR 1
+
+/* Define to 1 when the gnulib module obstack-printf should be tested. */
+#define GNULIB_TEST_OBSTACK_PRINTF 1
+
+/* Define to 1 when the gnulib module open should be tested. */
+#define GNULIB_TEST_OPEN 1
+
+/* Define to 1 when the gnulib module perror should be tested. */
+#define GNULIB_TEST_PERROR 1
+
+/* Define to 1 when the gnulib module pipe2 should be tested. */
+#define GNULIB_TEST_PIPE2 1
+
+/* Define to 1 when the gnulib module posix_spawnattr_destroy should be
+   tested. */
+#define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1
+
+/* Define to 1 when the gnulib module posix_spawnattr_init should be tested.
+   */
+#define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1
+
+/* Define to 1 when the gnulib module posix_spawnattr_setflags should be
+   tested. */
+#define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1
+
+/* Define to 1 when the gnulib module posix_spawnattr_setsigmask should be
+   tested. */
+#define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1
+
+/* Define to 1 when the gnulib module posix_spawnp should be tested. */
+#define GNULIB_TEST_POSIX_SPAWNP 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_addclose should
+   be tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_adddup2 should
+   be tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_addopen should
+   be tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_destroy should
+   be tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_init should be
+   tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1
+
+/* Define to 1 when the gnulib module printf-posix should be tested. */
+#define GNULIB_TEST_PRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module raise should be tested. */
+#define GNULIB_TEST_RAISE 1
+
+/* Define to 1 when the gnulib module rawmemchr should be tested. */
+#define GNULIB_TEST_RAWMEMCHR 1
+
+/* Define to 1 when the gnulib module realloc-posix should be tested. */
+#define GNULIB_TEST_REALLOC_POSIX 1
+
+/* Define to 1 when the gnulib module sigaction should be tested. */
+#define GNULIB_TEST_SIGACTION 1
+
+/* Define to 1 when the gnulib module signbit should be tested. */
+#define GNULIB_TEST_SIGNBIT 1
+
+/* Define to 1 when the gnulib module sigprocmask should be tested. */
+#define GNULIB_TEST_SIGPROCMASK 1
+
+/* Define to 1 when the gnulib module snprintf should be tested. */
+#define GNULIB_TEST_SNPRINTF 1
+
+/* Define to 1 when the gnulib module sprintf-posix should be tested. */
+#define GNULIB_TEST_SPRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module stat should be tested. */
+#define GNULIB_TEST_STAT 1
+
+/* Define to 1 when the gnulib module stpcpy should be tested. */
+#define GNULIB_TEST_STPCPY 1
+
+/* Define to 1 when the gnulib module strchrnul should be tested. */
+#define GNULIB_TEST_STRCHRNUL 1
+
+/* Define to 1 when the gnulib module strdup should be tested. */
+#define GNULIB_TEST_STRDUP 1
+
+/* Define to 1 when the gnulib module strerror should be tested. */
+#define GNULIB_TEST_STRERROR 1
+
+/* Define to 1 when the gnulib module strerror_r should be tested. */
+#define GNULIB_TEST_STRERROR_R 1
+
+/* Define to 1 when the gnulib module strndup should be tested. */
+#define GNULIB_TEST_STRNDUP 1
+
+/* Define to 1 when the gnulib module strnlen should be tested. */
+#define GNULIB_TEST_STRNLEN 1
+
+/* Define to 1 when the gnulib module strverscmp should be tested. */
+#define GNULIB_TEST_STRVERSCMP 1
+
+/* Define to 1 when the gnulib module unsetenv should be tested. */
+#define GNULIB_TEST_UNSETENV 1
+
+/* Define to 1 when the gnulib module vfprintf-posix should be tested. */
+#define GNULIB_TEST_VFPRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module vsnprintf should be tested. */
+#define GNULIB_TEST_VSNPRINTF 1
+
+/* Define to 1 when the gnulib module vsprintf-posix should be tested. */
+#define GNULIB_TEST_VSPRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module waitpid should be tested. */
+#define GNULIB_TEST_WAITPID 1
+
+/* Define to 1 when the gnulib module wcwidth should be tested. */
+#define GNULIB_TEST_WCWIDTH 1
+
+/* Define to 1 if you have the `alarm' function. */
+#define HAVE_ALARM 1
+
+/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
+   may be supplied by this distribution. */
+#define HAVE_ALLOCA 1
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#define HAVE_ALLOCA_H 1
+
+/* Define to 1 if you have the <bp-sym.h> header file. */
+/* #undef HAVE_BP_SYM_H */
+
+/* Define if the 'calloc' function is POSIX compliant. */
+#define HAVE_CALLOC_POSIX 1
+
+/* Define to 1 if you have the `catgets' function. */
+#define HAVE_CATGETS 1
+
+/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#define HAVE_CFLOCALECOPYCURRENT 1
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
+
+/* Define to 1 if the system has the type `clock_t'. */
+#define HAVE_CLOCK_T 1
+
+/* Define to 1 if you have the `confstr' function. */
+/* #undef HAVE_CONFSTR */
+
+/* Define if the copysignf function is declared in <math.h> and available in
+   libc. */
+/* #undef HAVE_COPYSIGNF_IN_LIBC */
+
+/* Define if the copysignl function is declared in <math.h> and available in
+   libc. */
+/* #undef HAVE_COPYSIGNL_IN_LIBC */
+
+/* Define if the copysign function is declared in <math.h> and available in
+   libc. */
+/* #undef HAVE_COPYSIGN_IN_LIBC */
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+/* #undef HAVE_DCGETTEXT */
+
+/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_CLEARERR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `clock', and to 0 if you don't.
+   */
+#define HAVE_DECL_CLOCK 1
+
+/* Define to 1 if you have the declaration of `copysign', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_COPYSIGN */
+
+/* Define to 1 if you have the declaration of `copysignf', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_COPYSIGNF */
+
+/* Define to 1 if you have the declaration of `copysignl', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_COPYSIGNL */
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_FEOF_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FERROR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FFLUSH_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FGETS_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FPUTC_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FPUTS_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FREAD_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FWRITE_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_GETCHAR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETC_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `getdelim', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETDELIM 1
+
+/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
+   */
+#define HAVE_DECL_GETENV 1
+
+/* Define to 1 if you have the declaration of `getline', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETLINE 1
+
+/* Define to 1 if you have the declaration of `getrusage', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETRUSAGE 1
+
+/* Define to 1 if you have the declaration of `iswblank', and to 0 if you
+   don't. */
+#define HAVE_DECL_ISWBLANK 1
+
+/* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_MBRTOWC */
+
+/* Define to 1 if you have the declaration of `mbsinit', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_MBSINIT */
+
+/* Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0
+   otherwise. */
+#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H 0
+
+/* Define to 1 if you have the declaration of `obstack_printf', and to 0 if
+   you don't. */
+#define HAVE_DECL_OBSTACK_PRINTF 0
+
+/* Define to 1 if you have the declaration of `program_invocation_name', and
+   to 0 if you don't. */
+#define HAVE_DECL_PROGRAM_INVOCATION_NAME 0
+
+/* Define to 1 if you have the declaration of `program_invocation_short_name',
+   and to 0 if you don't. */
+#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 0
+
+/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_PUTCHAR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_PUTC_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+   don't. */
+#define HAVE_DECL_SNPRINTF 1
+
+/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
+   */
+#define HAVE_DECL_STRDUP 1
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRERROR_R 1
+
+/* Define to 1 if you have the declaration of `strndup', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRNDUP 1
+
+/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRNLEN 1
+
+/* Define to 1 if you have the declaration of `sysconf', and to 0 if you
+   don't. */
+#define HAVE_DECL_SYSCONF 1
+
+/* Define to 1 if you have the declaration of `times', and to 0 if you don't.
+   */
+#define HAVE_DECL_TIMES 1
+
+/* Define to 1 if you have the declaration of `towlower', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_TOWLOWER */
+
+/* Define to 1 if you have the declaration of `unsetenv', and to 0 if you
+   don't. */
+#define HAVE_DECL_UNSETENV 1
+
+/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
+   don't. */
+#define HAVE_DECL_VSNPRINTF 1
+
+/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you
+   don't. */
+#define HAVE_DECL_WCWIDTH 1
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+   don't. */
+#define HAVE_DECL__SNPRINTF 0
+
+/* Define to 1 if you have the declaration of `__fpending', and to 0 if you
+   don't. */
+#define HAVE_DECL___FPENDING 0
+
+/* Define to 1 if you have the 'dup2' function. */
+#define HAVE_DUP2 1
+
+/* Define if you have the declaration of environ. */
+/* #undef HAVE_ENVIRON_DECL */
+
+/* Define to 1 if you have the `fcntl' function. */
+#define HAVE_FCNTL 1
+
+/* Define to 1 if you have the <features.h> header file. */
+/* #undef HAVE_FEATURES_H */
+
+/* Define to 1 if you have the `flockfile' function. */
+/* #undef HAVE_FLOCKFILE */
+
+/* Define if the frexpl function is available in libc. */
+#define HAVE_FREXPL_IN_LIBC 1
+
+/* Define if the frexp function is available in libc. */
+#define HAVE_FREXP_IN_LIBC 1
+
+/* Define to 1 if you have the `funlockfile' function. */
+/* #undef HAVE_FUNLOCKFILE */
+
+/* Define to 1 if you have the `getdelim' function. */
+#define HAVE_GETDELIM 1
+
+/* Define to 1 if you have the `getdtablesize' function. */
+#define HAVE_GETDTABLESIZE 1
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#define HAVE_GETOPT_LONG_ONLY 1
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+/* #undef HAVE_GETTEXT */
+
+/* Define if you have the iconv() function and it works. */
+#define HAVE_ICONV 1
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#define HAVE_INTMAX_T 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+   declares uintmax_t. */
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
+
+/* Define to 1 if you have the `isascii' function. */
+#define HAVE_ISASCII 1
+
+/* Define if the isnan(double) function is available in libc. */
+#define HAVE_ISNAND_IN_LIBC 1
+
+/* Define if the isnan(float) function is available in libc. */
+#define HAVE_ISNANF_IN_LIBC 1
+
+/* Define if the isnan(long double) function is available in libc. */
+/* #undef HAVE_ISNANL_IN_LIBC */
+
+/* Define to 1 if you have the `iswblank' function. */
+#define HAVE_ISWBLANK 1
+
+/* Define to 1 if you have the `iswcntrl' function. */
+#define HAVE_ISWCNTRL 1
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#define HAVE_LANGINFO_CODESET 1
+
+/* Define if the ldexpl() function is available. */
+#define HAVE_LDEXPL 1
+
+/* Define if the ldexpl function is available in libc. */
+#define HAVE_LDEXPL_IN_LIBC 1
+
+/* Define if the ldexp function is available in libc. */
+#define HAVE_LDEXP_IN_LIBC 1
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if the system has the type 'long long int'. */
+#define HAVE_LONG_LONG_INT 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if your system has a GNU libc compatible 'malloc' function, and
+   to 0 otherwise. */
+#define HAVE_MALLOC_GNU 1
+
+/* Define if the 'malloc' function is POSIX compliant. */
+#define HAVE_MALLOC_POSIX 1
+
+/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+   config.h and <sys/mman.h>. */
+#define HAVE_MAP_ANONYMOUS 1
+
+/* Define to 1 if you have the <math.h> header file. */
+#define HAVE_MATH_H 1
+
+/* Define to 1 if you have the `mbrtowc' function. */
+#define HAVE_MBRTOWC 1
+
+/* Define to 1 if you have the `mbsinit' function. */
+#define HAVE_MBSINIT 1
+
+/* Define to 1 if <wchar.h> declares mbstate_t. */
+#define HAVE_MBSTATE_T 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mprotect' function. */
+#define HAVE_MPROTECT 1
+
+/* Define to 1 on MSVC platforms that have the "invalid parameter handler"
+   concept. */
+/* #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER */
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+/* #undef HAVE_NL_LANGINFO */
+
+/* Define to 1 if libc includes obstacks. */
+/* #undef HAVE_OBSTACK */
+
+/* Define to 1 if you have the `obstack_printf' function. */
+/* #undef HAVE_OBSTACK_PRINTF */
+
+/* Define to 1 if you have the <paths.h> header file. */
+/* #undef HAVE_PATHS_H */
+
+/* Define to 1 if you have the `pipe' function. */
+#define HAVE_PIPE 1
+
+/* Define to 1 if you have the `pipe2' function. */
+/* #undef HAVE_PIPE2 */
+
+/* Define to 1 if you have the `posix_spawn' function. */
+#define HAVE_POSIX_SPAWN 1
+
+/* Define to 1 if the system has the type `posix_spawnattr_t'. */
+#define HAVE_POSIX_SPAWNATTR_T 1
+
+/* Define to 1 if the system has the type `posix_spawn_file_actions_t'. */
+#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1
+
+/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
+#define HAVE_PTHREAD_MUTEX_RECURSIVE 1
+
+/* Define if the POSIX multithreading library has read/write locks. */
+#define HAVE_PTHREAD_RWLOCK 1
+
+/* Define to 1 if you have the `raise' function. */
+#define HAVE_RAISE 1
+
+/* Define to 1 if you have the `rawmemchr' function. */
+/* #undef HAVE_RAWMEMCHR */
+
+/* Define to 1 if acosf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ACOSF 1
+
+/* Define to 1 if acosl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ACOSL 1
+
+/* Define to 1 if asinf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ASINF 1
+
+/* Define to 1 if asinl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ASINL 1
+
+/* Define to 1 if atanf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ATANF 1
+
+/* Define to 1 if atanl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ATANL 1
+
+/* Define to 1 if atoll is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ATOLL 1
+
+/* Define to 1 if btowc is declared even after undefining macros. */
+#define HAVE_RAW_DECL_BTOWC 1
+
+/* Define to 1 if canonicalize_file_name is declared even after undefining
+   macros. */
+/* #undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME */
+
+/* Define to 1 if cbrt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CBRT 1
+
+/* Define to 1 if cbrtf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CBRTF 1
+
+/* Define to 1 if cbrtl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CBRTL 1
+
+/* Define to 1 if ceilf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CEILF 1
+
+/* Define to 1 if ceill is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CEILL 1
+
+/* Define to 1 if chdir is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CHDIR 1
+
+/* Define to 1 if chown is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CHOWN 1
+
+/* Define to 1 if copysign is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COPYSIGN 1
+
+/* Define to 1 if copysignf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COPYSIGNF 1
+
+/* Define to 1 if copysignl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COPYSIGNL 1
+
+/* Define to 1 if cosf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COSF 1
+
+/* Define to 1 if coshf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COSHF 1
+
+/* Define to 1 if cosl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COSL 1
+
+/* Define to 1 if dprintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_DPRINTF 1
+
+/* Define to 1 if dup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_DUP 1
+
+/* Define to 1 if dup2 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_DUP2 1
+
+/* Define to 1 if dup3 is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_DUP3 */
+
+/* Define to 1 if endusershell is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ENDUSERSHELL 1
+
+/* Define to 1 if environ is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_ENVIRON */
+
+/* Define to 1 if euidaccess is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_EUIDACCESS */
+
+/* Define to 1 if exp2 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXP2 1
+
+/* Define to 1 if exp2f is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXP2F 1
+
+/* Define to 1 if exp2l is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXP2L 1
+
+/* Define to 1 if expf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPF 1
+
+/* Define to 1 if expl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPL 1
+
+/* Define to 1 if expm1 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPM1 1
+
+/* Define to 1 if expm1f is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPM1F 1
+
+/* Define to 1 if expm1l is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPM1L 1
+
+/* Define to 1 if fabsf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FABSF 1
+
+/* Define to 1 if fabsl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FABSL 1
+
+/* Define to 1 if faccessat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_FACCESSAT */
+
+/* Define to 1 if fchdir is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FCHDIR 1
+
+/* Define to 1 if fchmodat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_FCHMODAT */
+
+/* Define to 1 if fchownat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_FCHOWNAT */
+
+/* Define to 1 if fcntl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FCNTL 1
+
+/* Define to 1 if fdatasync is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_FDATASYNC */
+
+/* Define to 1 if ffsl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FFSL 1
+
+/* Define to 1 if ffsll is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_FFSLL */
+
+/* Define to 1 if floorf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FLOORF 1
+
+/* Define to 1 if floorl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FLOORL 1
+
+/* Define to 1 if fma is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMA 1
+
+/* Define to 1 if fmaf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMAF 1
+
+/* Define to 1 if fmal is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMAL 1
+
+/* Define to 1 if fmod is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMOD 1
+
+/* Define to 1 if fmodf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMODF 1
+
+/* Define to 1 if fmodl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMODL 1
+
+/* Define to 1 if fpurge is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FPURGE 1
+
+/* Define to 1 if frexpf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FREXPF 1
+
+/* Define to 1 if frexpl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FREXPL 1
+
+/* Define to 1 if fseeko is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FSEEKO 1
+
+/* Define to 1 if fstat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FSTAT 1
+
+/* Define to 1 if fstatat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_FSTATAT */
+
+/* Define to 1 if fsync is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FSYNC 1
+
+/* Define to 1 if ftello is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FTELLO 1
+
+/* Define to 1 if ftruncate is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FTRUNCATE 1
+
+/* Define to 1 if futimens is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_FUTIMENS */
+
+/* Define to 1 if getcwd is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETCWD 1
+
+/* Define to 1 if getdelim is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETDELIM 1
+
+/* Define to 1 if getdomainname is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETDOMAINNAME 1
+
+/* Define to 1 if getdtablesize is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETDTABLESIZE 1
+
+/* Define to 1 if getgroups is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETGROUPS 1
+
+/* Define to 1 if gethostname is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETHOSTNAME 1
+
+/* Define to 1 if getline is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETLINE 1
+
+/* Define to 1 if getloadavg is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETLOADAVG 1
+
+/* Define to 1 if getlogin is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETLOGIN 1
+
+/* Define to 1 if getlogin_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETLOGIN_R 1
+
+/* Define to 1 if getpagesize is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETPAGESIZE 1
+
+/* Define to 1 if gets is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETS 1
+
+/* Define to 1 if getsubopt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETSUBOPT 1
+
+/* Define to 1 if getusershell is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETUSERSHELL 1
+
+/* Define to 1 if grantpt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GRANTPT 1
+
+/* Define to 1 if group_member is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_GROUP_MEMBER */
+
+/* Define to 1 if hypotf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_HYPOTF 1
+
+/* Define to 1 if hypotl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_HYPOTL 1
+
+/* Define to 1 if ilogb is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ILOGB 1
+
+/* Define to 1 if ilogbf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ILOGBF 1
+
+/* Define to 1 if ilogbl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ILOGBL 1
+
+/* Define to 1 if imaxabs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_IMAXABS 1
+
+/* Define to 1 if imaxdiv is declared even after undefining macros. */
+#define HAVE_RAW_DECL_IMAXDIV 1
+
+/* Define to 1 if initstate is declared even after undefining macros. */
+#define HAVE_RAW_DECL_INITSTATE 1
+
+/* Define to 1 if initstate_r is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_INITSTATE_R */
+
+/* Define to 1 if isatty is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ISATTY 1
+
+/* Define to 1 if iswctype is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ISWCTYPE 1
+
+/* Define to 1 if lchmod is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LCHMOD 1
+
+/* Define to 1 if lchown is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LCHOWN 1
+
+/* Define to 1 if ldexpf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LDEXPF 1
+
+/* Define to 1 if ldexpl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LDEXPL 1
+
+/* Define to 1 if link is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LINK 1
+
+/* Define to 1 if linkat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_LINKAT */
+
+/* Define to 1 if log is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG 1
+
+/* Define to 1 if log10 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG10 1
+
+/* Define to 1 if log10f is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG10F 1
+
+/* Define to 1 if log10l is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG10L 1
+
+/* Define to 1 if log1p is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG1P 1
+
+/* Define to 1 if log1pf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG1PF 1
+
+/* Define to 1 if log1pl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG1PL 1
+
+/* Define to 1 if log2 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG2 1
+
+/* Define to 1 if log2f is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG2F 1
+
+/* Define to 1 if log2l is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG2L 1
+
+/* Define to 1 if logb is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGB 1
+
+/* Define to 1 if logbf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGBF 1
+
+/* Define to 1 if logbl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGBL 1
+
+/* Define to 1 if logf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGF 1
+
+/* Define to 1 if logl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGL 1
+
+/* Define to 1 if lseek is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LSEEK 1
+
+/* Define to 1 if lstat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LSTAT 1
+
+/* Define to 1 if mbrlen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBRLEN 1
+
+/* Define to 1 if mbrtowc is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBRTOWC 1
+
+/* Define to 1 if mbsinit is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBSINIT 1
+
+/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBSNRTOWCS 1
+
+/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBSRTOWCS 1
+
+/* Define to 1 if memmem is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MEMMEM 1
+
+/* Define to 1 if mempcpy is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MEMPCPY */
+
+/* Define to 1 if memrchr is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MEMRCHR */
+
+/* Define to 1 if mkdirat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MKDIRAT */
+
+/* Define to 1 if mkdtemp is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MKDTEMP */
+
+/* Define to 1 if mkfifo is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKFIFO 1
+
+/* Define to 1 if mkfifoat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MKFIFOAT */
+
+/* Define to 1 if mknod is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKNOD 1
+
+/* Define to 1 if mknodat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MKNODAT */
+
+/* Define to 1 if mkostemp is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MKOSTEMP */
+
+/* Define to 1 if mkostemps is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MKOSTEMPS */
+
+/* Define to 1 if mkstemp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKSTEMP 1
+
+/* Define to 1 if mkstemps is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MKSTEMPS */
+
+/* Define to 1 if modf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MODF 1
+
+/* Define to 1 if modff is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MODFF 1
+
+/* Define to 1 if modfl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MODFL 1
+
+/* Define to 1 if openat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_OPENAT */
+
+/* Define to 1 if pclose is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PCLOSE 1
+
+/* Define to 1 if pipe is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PIPE 1
+
+/* Define to 1 if pipe2 is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_PIPE2 */
+
+/* Define to 1 if popen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POPEN 1
+
+/* Define to 1 if posix_openpt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POSIX_OPENPT 1
+
+/* Define to 1 if posix_spawn is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN 1
+
+/* Define to 1 if posix_spawnattr_destroy is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY 1
+
+/* Define to 1 if posix_spawnattr_getflags is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS 1
+
+/* Define to 1 if posix_spawnattr_getpgroup is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP 1
+
+/* Define to 1 if posix_spawnattr_getschedparam is declared even after
+   undefining macros. */
+/* #undef HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM */
+
+/* Define to 1 if posix_spawnattr_getschedpolicy is declared even after
+   undefining macros. */
+/* #undef HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY */
+
+/* Define to 1 if posix_spawnattr_getsigdefault is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT 1
+
+/* Define to 1 if posix_spawnattr_getsigmask is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK 1
+
+/* Define to 1 if posix_spawnattr_init is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT 1
+
+/* Define to 1 if posix_spawnattr_setflags is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS 1
+
+/* Define to 1 if posix_spawnattr_setpgroup is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP 1
+
+/* Define to 1 if posix_spawnattr_setschedparam is declared even after
+   undefining macros. */
+/* #undef HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM */
+
+/* Define to 1 if posix_spawnattr_setschedpolicy is declared even after
+   undefining macros. */
+/* #undef HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY */
+
+/* Define to 1 if posix_spawnattr_setsigdefault is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT 1
+
+/* Define to 1 if posix_spawnattr_setsigmask is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK 1
+
+/* Define to 1 if posix_spawnp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNP 1
+
+/* Define to 1 if posix_spawn_file_actions_addclose is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE 1
+
+/* Define to 1 if posix_spawn_file_actions_adddup2 is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 1
+
+/* Define to 1 if posix_spawn_file_actions_addopen is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1
+
+/* Define to 1 if posix_spawn_file_actions_destroy is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1
+
+/* Define to 1 if posix_spawn_file_actions_init is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT 1
+
+/* Define to 1 if powf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POWF 1
+
+/* Define to 1 if pread is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PREAD 1
+
+/* Define to 1 if pthread_sigmask is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PTHREAD_SIGMASK 1
+
+/* Define to 1 if ptsname is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PTSNAME 1
+
+/* Define to 1 if ptsname_r is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_PTSNAME_R */
+
+/* Define to 1 if pwrite is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PWRITE 1
+
+/* Define to 1 if random is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RANDOM 1
+
+/* Define to 1 if random_r is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_RANDOM_R */
+
+/* Define to 1 if rawmemchr is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_RAWMEMCHR */
+
+/* Define to 1 if readlink is declared even after undefining macros. */
+#define HAVE_RAW_DECL_READLINK 1
+
+/* Define to 1 if readlinkat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_READLINKAT */
+
+/* Define to 1 if realpath is declared even after undefining macros. */
+#define HAVE_RAW_DECL_REALPATH 1
+
+/* Define to 1 if remainder is declared even after undefining macros. */
+#define HAVE_RAW_DECL_REMAINDER 1
+
+/* Define to 1 if remainderf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_REMAINDERF 1
+
+/* Define to 1 if remainderl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_REMAINDERL 1
+
+/* Define to 1 if renameat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_RENAMEAT */
+
+/* Define to 1 if rint is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RINT 1
+
+/* Define to 1 if rintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RINTF 1
+
+/* Define to 1 if rintl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RINTL 1
+
+/* Define to 1 if rmdir is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RMDIR 1
+
+/* Define to 1 if round is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ROUND 1
+
+/* Define to 1 if roundf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ROUNDF 1
+
+/* Define to 1 if roundl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ROUNDL 1
+
+/* Define to 1 if rpmatch is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_RPMATCH */
+
+/* Define to 1 if setenv is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETENV 1
+
+/* Define to 1 if sethostname is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETHOSTNAME 1
+
+/* Define to 1 if setstate is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETSTATE 1
+
+/* Define to 1 if setstate_r is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_SETSTATE_R */
+
+/* Define to 1 if setusershell is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETUSERSHELL 1
+
+/* Define to 1 if sigaction is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGACTION 1
+
+/* Define to 1 if sigaddset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGADDSET 1
+
+/* Define to 1 if sigdelset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGDELSET 1
+
+/* Define to 1 if sigemptyset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGEMPTYSET 1
+
+/* Define to 1 if sigfillset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGFILLSET 1
+
+/* Define to 1 if sigismember is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGISMEMBER 1
+
+/* Define to 1 if sigpending is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGPENDING 1
+
+/* Define to 1 if sigprocmask is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGPROCMASK 1
+
+/* Define to 1 if sinf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SINF 1
+
+/* Define to 1 if sinhf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SINHF 1
+
+/* Define to 1 if sinl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SINL 1
+
+/* Define to 1 if sleep is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SLEEP 1
+
+/* Define to 1 if snprintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SNPRINTF 1
+
+/* Define to 1 if sqrtf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SQRTF 1
+
+/* Define to 1 if sqrtl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SQRTL 1
+
+/* Define to 1 if srandom is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SRANDOM 1
+
+/* Define to 1 if srandom_r is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_SRANDOM_R */
+
+/* Define to 1 if stat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STAT 1
+
+/* Define to 1 if stpcpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STPCPY 1
+
+/* Define to 1 if stpncpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STPNCPY 1
+
+/* Define to 1 if strcasestr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRCASESTR 1
+
+/* Define to 1 if strchrnul is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_STRCHRNUL */
+
+/* Define to 1 if strdup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRDUP 1
+
+/* Define to 1 if strerror_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRERROR_R 1
+
+/* Define to 1 if strncat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNCAT 1
+
+/* Define to 1 if strndup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNDUP 1
+
+/* Define to 1 if strnlen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNLEN 1
+
+/* Define to 1 if strpbrk is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRPBRK 1
+
+/* Define to 1 if strsep is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRSEP 1
+
+/* Define to 1 if strsignal is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRSIGNAL 1
+
+/* Define to 1 if strtod is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOD 1
+
+/* Define to 1 if strtoimax is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOIMAX 1
+
+/* Define to 1 if strtok_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOK_R 1
+
+/* Define to 1 if strtoll is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOLL 1
+
+/* Define to 1 if strtoull is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOULL 1
+
+/* Define to 1 if strtoumax is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOUMAX 1
+
+/* Define to 1 if strverscmp is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_STRVERSCMP */
+
+/* Define to 1 if symlink is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SYMLINK 1
+
+/* Define to 1 if symlinkat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_SYMLINKAT */
+
+/* Define to 1 if tanf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TANF 1
+
+/* Define to 1 if tanhf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TANHF 1
+
+/* Define to 1 if tanl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TANL 1
+
+/* Define to 1 if tmpfile is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TMPFILE 1
+
+/* Define to 1 if towctrans is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TOWCTRANS 1
+
+/* Define to 1 if trunc is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TRUNC 1
+
+/* Define to 1 if truncf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TRUNCF 1
+
+/* Define to 1 if truncl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TRUNCL 1
+
+/* Define to 1 if ttyname_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TTYNAME_R 1
+
+/* Define to 1 if unlink is declared even after undefining macros. */
+#define HAVE_RAW_DECL_UNLINK 1
+
+/* Define to 1 if unlinkat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_UNLINKAT */
+
+/* Define to 1 if unlockpt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_UNLOCKPT 1
+
+/* Define to 1 if unsetenv is declared even after undefining macros. */
+#define HAVE_RAW_DECL_UNSETENV 1
+
+/* Define to 1 if usleep is declared even after undefining macros. */
+#define HAVE_RAW_DECL_USLEEP 1
+
+/* Define to 1 if utimensat is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_UTIMENSAT */
+
+/* Define to 1 if vdprintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_VDPRINTF 1
+
+/* Define to 1 if vsnprintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_VSNPRINTF 1
+
+/* Define to 1 if waitpid is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WAITPID 1
+
+/* Define to 1 if wcpcpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCPCPY 1
+
+/* Define to 1 if wcpncpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCPNCPY 1
+
+/* Define to 1 if wcrtomb is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCRTOMB 1
+
+/* Define to 1 if wcscasecmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCASECMP 1
+
+/* Define to 1 if wcscat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCAT 1
+
+/* Define to 1 if wcschr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCHR 1
+
+/* Define to 1 if wcscmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCMP 1
+
+/* Define to 1 if wcscoll is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCOLL 1
+
+/* Define to 1 if wcscpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCPY 1
+
+/* Define to 1 if wcscspn is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCSPN 1
+
+/* Define to 1 if wcsdup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSDUP 1
+
+/* Define to 1 if wcslen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSLEN 1
+
+/* Define to 1 if wcsncasecmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNCASECMP 1
+
+/* Define to 1 if wcsncat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNCAT 1
+
+/* Define to 1 if wcsncmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNCMP 1
+
+/* Define to 1 if wcsncpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNCPY 1
+
+/* Define to 1 if wcsnlen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNLEN 1
+
+/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNRTOMBS 1
+
+/* Define to 1 if wcspbrk is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSPBRK 1
+
+/* Define to 1 if wcsrchr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSRCHR 1
+
+/* Define to 1 if wcsrtombs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSRTOMBS 1
+
+/* Define to 1 if wcsspn is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSSPN 1
+
+/* Define to 1 if wcsstr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSSTR 1
+
+/* Define to 1 if wcstok is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSTOK 1
+
+/* Define to 1 if wcswidth is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSWIDTH 1
+
+/* Define to 1 if wcsxfrm is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSXFRM 1
+
+/* Define to 1 if wctob is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCTOB 1
+
+/* Define to 1 if wctrans is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCTRANS 1
+
+/* Define to 1 if wctype is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCTYPE 1
+
+/* Define to 1 if wcwidth is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCWIDTH 1
+
+/* Define to 1 if wmemchr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMCHR 1
+
+/* Define to 1 if wmemcmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMCMP 1
+
+/* Define to 1 if wmemcpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMCPY 1
+
+/* Define to 1 if wmemmove is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMMOVE 1
+
+/* Define to 1 if wmemset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMSET 1
+
+/* Define to 1 if _Exit is declared even after undefining macros. */
+#define HAVE_RAW_DECL__EXIT 1
+
+/* Define if the 'realloc' function is POSIX compliant. */
+#define HAVE_REALLOC_POSIX 1
+
+/* Define to 1 if 'long double' and 'double' have the same representation. */
+/* #undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE */
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setparam' function. */
+/* #undef HAVE_SCHED_SETPARAM */
+
+/* Define to 1 if you have the `sched_setscheduler' function. */
+/* #undef HAVE_SCHED_SETSCHEDULER */
+
+/* Define to 1 if you have the `setegid' function. */
+/* #undef HAVE_SETEGID */
+
+/* Define to 1 if you have the `seteuid' function. */
+/* #undef HAVE_SETEUID */
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the `sigaction' function. */
+#define HAVE_SIGACTION 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+#define HAVE_SIGALTSTACK 1
+
+/* Define to 1 if the system has the type `siginfo_t'. */
+/* #undef HAVE_SIGINFO_T */
+
+/* Define to 1 if you have the `siginterrupt' function. */
+#define HAVE_SIGINTERRUPT 1
+
+/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
+#define HAVE_SIGNED_SIG_ATOMIC_T 1
+
+/* Define to 1 if 'wchar_t' is a signed integer type. */
+#define HAVE_SIGNED_WCHAR_T 1
+
+/* Define to 1 if 'wint_t' is a signed integer type. */
+#define HAVE_SIGNED_WINT_T 1
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `sig_atomic_t'. */
+#define HAVE_SIG_ATOMIC_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+#define HAVE_SNPRINTF 1
+
+/* Define if the return value of the snprintf function is the number of of
+   bytes (excluding the terminating NUL) that would have been produced if the
+   buffer had been large enough. */
+#define HAVE_SNPRINTF_RETVAL_C99 1
+
+/* Define to 1 if you have the <spawn.h> header file. */
+#define HAVE_SPAWN_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+   uintmax_t. */
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+
+/* Define to 1 if you have the <stdio_ext.h> header file. */
+/* #undef HAVE_STDIO_EXT_H */
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `stpcpy' function. */
+#define HAVE_STPCPY 1
+
+/* Define to 1 if you have the `strchrnul' function. */
+/* #undef HAVE_STRCHRNUL */
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror_r' function. */
+#define HAVE_STRERROR_R 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strndup' function. */
+#define HAVE_STRNDUP 1
+
+/* Define to 1 if you have the `strnlen' function. */
+#define HAVE_STRNLEN 1
+
+/* Define to 1 if you have the `strtoul' function. */
+#define HAVE_STRTOUL 1
+
+/* Define to 1 if `sa_sigaction' is a member of `struct sigaction'. */
+#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1
+
+/* Define to 1 if the system has the type `struct tms'. */
+#define HAVE_STRUCT_TMS 1
+
+/* Define to 1 if you have the `strverscmp' function. */
+/* #undef HAVE_STRVERSCMP */
+
+/* Define to 1 if you have the `symlink' function. */
+#define HAVE_SYMLINK 1
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+/* #undef HAVE_SYS_BITYPES_H */
+
+/* Define to 1 if you have the <sys/inttypes.h> header file. */
+/* #undef HAVE_SYS_INTTYPES_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#define HAVE_SYS_MMAN_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#define HAVE_SYS_RESOURCE_H 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `times' function. */
+#define HAVE_TIMES 1
+
+/* Define to 1 if you have the `towlower' function. */
+#define HAVE_TOWLOWER 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `unsetenv' function. */
+#define HAVE_UNSETENV 1
+
+/* Define to 1 if the system has the type 'unsigned long long int'. */
+#define HAVE_UNSIGNED_LONG_LONG_INT 1
+
+/* Define to 1 if you have the `vasnprintf' function. */
+/* #undef HAVE_VASNPRINTF */
+
+/* Define to 1 if you have the `vfork' function. */
+/* #undef HAVE_VFORK */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#define HAVE_VSNPRINTF 1
+
+/* Define to 1 if you have the `waitid' function. */
+#define HAVE_WAITID 1
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#define HAVE_WCHAR_H 1
+
+/* Define if you have the 'wchar_t' type. */
+#define HAVE_WCHAR_T 1
+
+/* Define to 1 if you have the `wcrtomb' function. */
+#define HAVE_WCRTOMB 1
+
+/* Define to 1 if you have the `wcslen' function. */
+#define HAVE_WCSLEN 1
+
+/* Define to 1 if you have the `wcsnlen' function. */
+#define HAVE_WCSNLEN 1
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#define HAVE_WCTYPE_H 1
+
+/* Define to 1 if you have the `wcwidth' function. */
+#define HAVE_WCWIDTH 1
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+/* #undef HAVE_WINSOCK2_H */
+
+/* Define if you have the 'wint_t' type. */
+#define HAVE_WINT_T 1
+
+/* Define to 1 if O_NOATIME works. */
+#define HAVE_WORKING_O_NOATIME 0
+
+/* Define to 1 if O_NOFOLLOW works. */
+#define HAVE_WORKING_O_NOFOLLOW 1
+
+/* Define if you have the posix_spawn and posix_spawnp functions and they
+   work. */
+#define HAVE_WORKING_POSIX_SPAWN 1
+
+/* Define to 1 if the system has the type `_Bool'. */
+#define HAVE__BOOL 1
+
+/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */
+/* #undef HAVE__SET_INVALID_PARAMETER_HANDLER */
+
+/* Define to 1 if you have the `__fpending' function. */
+/* #undef HAVE___FPENDING */
+
+/* Define to 1 if you have the `__fseterr' function. */
+/* #undef HAVE___FSETERR */
+
+/* Define to 1 if you have the `__xpg_strerror_r' function. */
+/* #undef HAVE___XPG_STRERROR_R */
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'long double'. */
+#define LDBL_EXPBIT0_BIT 0
+
+/* Define as the word index where to find the exponent of 'long double'. */
+#define LDBL_EXPBIT0_WORD 2
+
+/* Define as the bit index in the word where to find the sign of 'long
+   double'. */
+/* #undef LDBL_SIGNBIT_BIT */
+
+/* Define as the word index where to find the sign of 'long double'. */
+/* #undef LDBL_SIGNBIT_WORD */
+
+/* Define to the GNU M4 executable name. */
+#define M4 "/usr/bin/m4"
+
+/* Define to "-g" if GNU M4 supports -g, otherwise to "". */
+#define M4_GNU_OPTION ""
+
+/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
+#define MAP_ANONYMOUS MAP_ANON
+
+/* Define if the mbrtowc function has the NULL pwc argument bug. */
+/* #undef MBRTOWC_NULL_ARG1_BUG */
+
+/* Define if the mbrtowc function has the NULL string argument bug. */
+/* #undef MBRTOWC_NULL_ARG2_BUG */
+
+/* Define if the mbrtowc function does not return 0 for a NUL character. */
+/* #undef MBRTOWC_NUL_RETVAL_BUG */
+
+/* Define if the mbrtowc function returns a wrong return value. */
+/* #undef MBRTOWC_RETVAL_BUG */
+
+/* Define to 1 if assertions should be disabled. */
+/* #undef NDEBUG */
+
+/* Define if the vasnprintf implementation needs special code for the 'a' and
+   'A' directives. */
+/* #undef NEED_PRINTF_DIRECTIVE_A */
+
+/* Define if the vasnprintf implementation needs special code for the 'F'
+   directive. */
+/* #undef NEED_PRINTF_DIRECTIVE_F */
+
+/* Define if the vasnprintf implementation needs special code for the 'ls'
+   directive. */
+/* #undef NEED_PRINTF_DIRECTIVE_LS */
+
+/* Define if the vasnprintf implementation needs special code for 'double'
+   arguments. */
+/* #undef NEED_PRINTF_DOUBLE */
+
+/* Define if the vasnprintf implementation needs special code for surviving
+   out-of-memory conditions. */
+/* #undef NEED_PRINTF_ENOMEM */
+
+/* Define if the vasnprintf implementation needs special code for the ' flag.
+   */
+/* #undef NEED_PRINTF_FLAG_GROUPING */
+
+/* Define if the vasnprintf implementation needs special code for the '-'
+   flag. */
+/* #undef NEED_PRINTF_FLAG_LEFTADJUST */
+
+/* Define if the vasnprintf implementation needs special code for the 0 flag.
+   */
+/* #undef NEED_PRINTF_FLAG_ZERO */
+
+/* Define if the vasnprintf implementation needs special code for infinite
+   'double' arguments. */
+/* #undef NEED_PRINTF_INFINITE_DOUBLE */
+
+/* Define if the vasnprintf implementation needs special code for infinite
+   'long double' arguments. */
+#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1
+
+/* Define if the vasnprintf implementation needs special code for 'long
+   double' arguments. */
+/* #undef NEED_PRINTF_LONG_DOUBLE */
+
+/* Define if the vasnprintf implementation needs special code for supporting
+   large precisions without arbitrary bounds. */
+/* #undef NEED_PRINTF_UNBOUNDED_PRECISION */
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+/* #undef NO_MINUS_C_MINUS_O */
+
+/* Define to 1 if open() fails to recognize a trailing slash. */
+#define OPEN_TRAILING_SLASH_BUG 1
+
+/* Name of package */
+#define PACKAGE "bison"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "bug-bison@gnu.org"
+
+/* The copyright year for this package */
+#define PACKAGE_COPYRIGHT_YEAR 2012
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "GNU Bison"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "GNU Bison 2.7"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "bison"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.gnu.org/software/bison/"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "2.7"
+
+/* the number of pending output bytes on stream 'fp' */
+#define PENDING_OUTPUT_N_BYTES fp->_p - fp->_bf._base
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+/* #undef PRI_MACROS_BROKEN */
+
+/* Define to the type that is the result of default argument promotions of
+   type mode_t. */
+#define PROMOTED_MODE_T int
+
+/* Define if the pthread_in_use() detection is hard. */
+/* #undef PTHREAD_IN_USE_DETECTION_HARD */
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'ptrdiff_t'. */
+#define PTRDIFF_T_SUFFIX l
+
+/* Define if fprintf is overridden by a POSIX compliant gnulib implementation.
+   */
+#define REPLACE_FPRINTF_POSIX 1
+
+/* Define to 1 if stat needs help when passed a directory name with a trailing
+   slash */
+/* #undef REPLACE_FUNC_STAT_DIR */
+
+/* Define to 1 if stat needs help when passed a file name with a trailing
+   slash */
+#define REPLACE_FUNC_STAT_FILE 1
+
+/* Define if printf is overridden by a POSIX compliant gnulib implementation.
+   */
+#define REPLACE_PRINTF_POSIX 1
+
+/* Define to 1 if strerror(0) does not return a message implying success. */
+#define REPLACE_STRERROR_0 1
+
+/* Define if vasnprintf exists but is overridden by gnulib. */
+/* #undef REPLACE_VASNPRINTF */
+
+/* Define if vfprintf is overridden by a POSIX compliant gnulib
+   implementation. */
+#define REPLACE_VFPRINTF_POSIX 1
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'sig_atomic_t'. */
+#define SIG_ATOMIC_T_SUFFIX 
+
+/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+/* # undef SIZE_MAX */
+#endif
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'size_t'. */
+#define SIZE_T_SUFFIX ul
+
+/* 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 */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if strerror_r returns char *. */
+/* #undef STRERROR_R_CHAR_P */
+
+/* Define to the prefix of C symbols at the assembler and linker level, either
+   an underscore or empty. */
+#define USER_LABEL_PREFIX _
+
+/* Define if the POSIX multithreading library can be used. */
+#define USE_POSIX_THREADS 1
+
+/* Define if references to the POSIX multithreading library should be made
+   weak. */
+/* #undef USE_POSIX_THREADS_WEAK */
+
+/* Define if the GNU Pth multithreading library can be used. */
+/* #undef USE_PTH_THREADS */
+
+/* Define if references to the GNU Pth multithreading library should be made
+   weak. */
+/* #undef USE_PTH_THREADS_WEAK */
+
+/* Define if the old Solaris multithreading library can be used. */
+/* #undef USE_SOLARIS_THREADS */
+
+/* Define if references to the old Solaris multithreading library should be
+   made weak. */
+/* #undef USE_SOLARIS_THREADS_WEAK */
+
+/* Define to 1 if you want getc etc. to use unlocked I/O if available.
+   Unlocked I/O can improve performance in unithreaded apps, but it is not
+   safe for multithreaded apps. */
+#define USE_UNLOCKED_IO 1
+
+/* Define if the native Windows multithreading API can be used. */
+/* #undef USE_WINDOWS_THREADS */
+
+/* Version number of package */
+#define VERSION "2.7"
+
+/* Define to 1 if unsetenv returns void instead of int. */
+/* #undef VOID_UNSETENV */
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wchar_t'. */
+#define WCHAR_T_SUFFIX 
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wint_t'. */
+#define WINT_T_SUFFIX 
+
+/* Define if using the dmalloc debugging malloc package */
+/* #undef WITH_DMALLOC */
+
+/* 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__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+/* #  undef WORDS_BIGENDIAN */
+# endif
+#endif
+
+/* Define to 1 to internationalize bison runtime messages. */
+/* #undef YYENABLE_NLS */
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+   `char[]'. */
+#define YYTEXT_POINTER 1
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define to 1 if Gnulib overrides 'struct stat' on Windows so that struct
+   stat.st_size becomes 64-bit. */
+/* #undef _GL_WINDOWS_64_BIT_ST_SIZE */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to 1 if on MINIX. */
+/* #undef _MINIX */
+
+/* The _Noreturn keyword of C11.  */
+#if ! (defined _Noreturn \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+/* #undef _POSIX_1_SOURCE */
+
+/* Define to 1 if you need to in order for 'stat' and other things to work. */
+/* #undef _POSIX_SOURCE */
+
+/* Define to 500 only on HP-UX. */
+/* #undef _XOPEN_SOURCE */
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# define _ALL_SOURCE 1
+#endif
+/* Enable general extensions on Mac OS X.  */
+#ifndef _DARWIN_C_SOURCE
+# define _DARWIN_C_SOURCE 1
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS 1
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# define _TANDEM_SOURCE 1
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+
+
+/* Define to rpl_ if the getopt replacement functions and variables should be
+   used. */
+#define __GETOPT_PREFIX rpl_
+
+/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
+   _GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
+   _GL_INLINE_HEADER_BEGIN contains useful stuff to put
+     in an include file, before uses of _GL_INLINE.
+     It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
+     when FOO is an inline function in the header; see
+     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
+   _GL_INLINE_HEADER_END contains useful stuff to put
+     in the same include file, after uses of _GL_INLINE.
+
+   Suppress the use of extern inline on Apple's platforms,
+   as Libc-825.25 (2012-09-19) is incompatible with it; see
+   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
+   Perhaps Apple will fix this some day.  */
+#if ((__GNUC__ \
+      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+      : 199901L <= __STDC_VERSION__) \
+     && !defined __APPLE__)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
+# if __GNUC_GNU_INLINE__
+   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
+#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+#  define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+#else
+# define _GL_INLINE static _GL_UNUSED
+# define _GL_EXTERN_INLINE static _GL_UNUSED
+#endif
+
+#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+#  define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+#  define _GL_INLINE_HEADER_CONST_PRAGMA \
+     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+    _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+/* #undef gid_t */
+
+/* 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
+
+/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */
+/* #undef intmax_t */
+
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for Mac OS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
+
+/* Define to a type if <wchar.h> does not define. */
+/* #undef mbstate_t */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef mode_t */
+
+/* Define to the type of st_nlink in struct stat, or a supertype. */
+/* #undef nlink_t */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef pid_t */
+
+/* Define as the type of the result of subtracting two pointers, if the system
+   doesn't define it. */
+/* #undef ptrdiff_t */
+
+/* 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.  */
+#define restrict __restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define as an integer type suitable for memory locations that can be
+   accessed atomically even in the presence of asynchronous signals. */
+/* #undef sig_atomic_t */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
+
+/* Define as a signed type of the same size as size_t. */
+/* #undef ssize_t */
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+/* #undef uid_t */
+
+/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The __const__ attribute was added in gcc 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
diff --git a/darwin-lib/configmake.h b/darwin-lib/configmake.h
new file mode 100644
index 0000000..2a32931
--- /dev/null
+++ b/darwin-lib/configmake.h
@@ -0,0 +1,28 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define PREFIX "/usr/local"
+#define EXEC_PREFIX "/usr/local"
+#define BINDIR "/usr/local/bin"
+#define SBINDIR "/usr/local/sbin"
+#define LIBEXECDIR "/usr/local/libexec"
+#define DATAROOTDIR "/usr/local/share"
+#define DATADIR "/usr/local/share"
+#define SYSCONFDIR "/usr/local/etc"
+#define SHAREDSTATEDIR "/usr/local/com"
+#define LOCALSTATEDIR "/usr/local/var"
+#define INCLUDEDIR "/usr/local/include"
+#define OLDINCLUDEDIR "/usr/include"
+#define DOCDIR "/usr/local/share/doc/bison"
+#define INFODIR "/usr/local/share/info"
+#define HTMLDIR "/usr/local/share/doc/bison"
+#define DVIDIR "/usr/local/share/doc/bison"
+#define PDFDIR "/usr/local/share/doc/bison"
+#define PSDIR "/usr/local/share/doc/bison"
+#define LIBDIR "/usr/local/lib"
+#define LISPDIR "/usr/local/share/emacs/site-lisp"
+#define LOCALEDIR "/usr/local/share/locale"
+#define MANDIR "/usr/local/share/man"
+// PKGDATADIR is now passed in from the build system.
+//#define PKGDATADIR "/usr/local/share/bison"
+#define PKGINCLUDEDIR "/usr/local/include/bison"
+#define PKGLIBDIR "/usr/local/lib/bison"
+#define PKGLIBEXECDIR "/usr/local/libexec/bison"
diff --git a/darwin-lib/fcntl.h b/darwin-lib/fcntl.h
new file mode 100644
index 0000000..0e13f3e
--- /dev/null
+++ b/darwin-lib/fcntl.h
@@ -0,0 +1,659 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Like <fcntl.h>, but with non-working flags defined to 0.
+
+   Copyright (C) 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* written by Paul Eggert */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_system_fcntl_h
+/* Special invocation convention.  */
+
+/* Needed before <sys/stat.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+   <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
+   But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
+   extern "C" { ... } block, which leads to errors in C++ mode with the
+   overridden <sys/stat.h> from gnulib.  These errors are known to be gone
+   with g++ version >= 4.3.  */
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
+# include <sys/stat.h>
+#endif
+#include_next <fcntl.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_FCNTL_H
+
+/* Needed before <sys/stat.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+   <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
+   But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
+   extern "C" { ... } block, which leads to errors in C++ mode with the
+   overridden <sys/stat.h> from gnulib.  These errors are known to be gone
+   with g++ version >= 4.3.  */
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
+# include <sys/stat.h>
+#endif
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <fcntl.h>
+
+#ifndef _GL_FCNTL_H
+#define _GL_FCNTL_H
+
+#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
+# include <unistd.h>
+#endif
+
+/* Native Windows platforms declare open(), creat() in <io.h>.  */
+#if (1 || defined GNULIB_POSIXCHECK) \
+    && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Declare overridden functions.  */
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fcntl
+#   define fcntl rpl_fcntl
+#  endif
+_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
+_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
+#  endif
+_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
+# endif
+_GL_CXXALIASWARN (fcntl);
+#elif defined GNULIB_POSIXCHECK
+# undef fcntl
+# if HAVE_RAW_DECL_FCNTL
+_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
+                 "use gnulib module fcntl for portability");
+# endif
+#endif
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef open
+#   define open rpl_open
+#  endif
+_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                             _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+# else
+_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+# endif
+/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
+   default argument.  _GL_CXXALIASWARN does not work in this case.  */
+# if !defined __hpux
+_GL_CXXALIASWARN (open);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef open
+/* Assume open is always declared.  */
+_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
+                 "use gnulib module open for portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef openat
+#   define openat rpl_openat
+#  endif
+_GL_FUNCDECL_RPL (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# endif
+_GL_CXXALIASWARN (openat);
+#elif defined GNULIB_POSIXCHECK
+# undef openat
+# if HAVE_RAW_DECL_OPENAT
+_GL_WARN_ON_USE (openat, "openat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+/* Fix up the FD_* macros, only known to be missing on mingw.  */
+
+#ifndef FD_CLOEXEC
+# define FD_CLOEXEC 1
+#endif
+
+/* Fix up the supported F_* macros.  Intentionally leave other F_*
+   macros undefined.  Only known to be missing on mingw.  */
+
+#ifndef F_DUPFD_CLOEXEC
+# define F_DUPFD_CLOEXEC 0x40000000
+/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise.  */
+# define GNULIB_defined_F_DUPFD_CLOEXEC 1
+#else
+# define GNULIB_defined_F_DUPFD_CLOEXEC 0
+#endif
+
+#ifndef F_DUPFD
+# define F_DUPFD 1
+#endif
+
+#ifndef F_GETFD
+# define F_GETFD 2
+#endif
+
+/* Fix up the O_* macros.  */
+
+#if !defined O_DIRECT && defined O_DIRECTIO
+/* Tru64 spells it 'O_DIRECTIO'.  */
+# define O_DIRECT O_DIRECTIO
+#endif
+
+#if !defined O_CLOEXEC && defined O_NOINHERIT
+/* Mingw spells it 'O_NOINHERIT'.  */
+# define O_CLOEXEC O_NOINHERIT
+#endif
+
+#ifndef O_CLOEXEC
+# define O_CLOEXEC 0
+#endif
+
+#ifndef O_DIRECT
+# define O_DIRECT 0
+#endif
+
+#ifndef O_DIRECTORY
+# define O_DIRECTORY 0
+#endif
+
+#ifndef O_DSYNC
+# define O_DSYNC 0
+#endif
+
+#ifndef O_EXEC
+# define O_EXEC O_RDONLY /* This is often close enough in older systems.  */
+#endif
+
+#ifndef O_IGNORE_CTTY
+# define O_IGNORE_CTTY 0
+#endif
+
+#ifndef O_NDELAY
+# define O_NDELAY 0
+#endif
+
+#ifndef O_NOATIME
+# define O_NOATIME 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK O_NDELAY
+#endif
+
+/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
+   value of O_NONBLOCK.  Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
+   or to 0 as fallback.  */
+#if 0
+# if O_NONBLOCK
+#  define GNULIB_defined_O_NONBLOCK 0
+# else
+#  define GNULIB_defined_O_NONBLOCK 1
+#  undef O_NONBLOCK
+#  define O_NONBLOCK 0x40000000
+# endif
+#endif
+
+#ifndef O_NOCTTY
+# define O_NOCTTY 0
+#endif
+
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+#ifndef O_NOLINK
+# define O_NOLINK 0
+#endif
+
+#ifndef O_NOLINKS
+# define O_NOLINKS 0
+#endif
+
+#ifndef O_NOTRANS
+# define O_NOTRANS 0
+#endif
+
+#ifndef O_RSYNC
+# define O_RSYNC 0
+#endif
+
+#ifndef O_SEARCH
+# define O_SEARCH O_RDONLY /* This is often close enough in older systems.  */
+#endif
+
+#ifndef O_SYNC
+# define O_SYNC 0
+#endif
+
+#ifndef O_TTY_INIT
+# define O_TTY_INIT 0
+#endif
+
+#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
+# undef O_ACCMODE
+# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is usually declared in fcntl.h  */
+#if !defined O_BINARY && defined _O_BINARY
+  /* For MSC-compatible compilers.  */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+
+#if defined __BEOS__ || defined __HAIKU__
+  /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect.  */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+# define O_TEXT 0
+#endif
+
+/* Fix up the AT_* macros.  */
+
+/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
+   value exceeds INT_MAX, so its use as an int doesn't conform to the
+   C standard, and GCC and Sun C complain in some cases.  If the bug
+   is present, undef AT_FDCWD here, so it can be redefined below.  */
+#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
+# undef AT_FDCWD
+#endif
+
+/* Use the same bit pattern as Solaris 9, but with the proper
+   signedness.  The bit pattern is important, in case this actually is
+   Solaris with the above workaround.  */
+#ifndef AT_FDCWD
+# define AT_FDCWD (-3041965)
+#endif
+
+/* Use the same values as Solaris 9.  This shouldn't matter, but
+   there's no real reason to differ.  */
+#ifndef AT_SYMLINK_NOFOLLOW
+# define AT_SYMLINK_NOFOLLOW 4096
+#endif
+
+#ifndef AT_REMOVEDIR
+# define AT_REMOVEDIR 1
+#endif
+
+/* Solaris 9 lacks these two, so just pick unique values.  */
+#ifndef AT_SYMLINK_FOLLOW
+# define AT_SYMLINK_FOLLOW 2
+#endif
+
+#ifndef AT_EACCESS
+# define AT_EACCESS 4
+#endif
+
+
+#endif /* _GL_FCNTL_H */
+#endif /* _GL_FCNTL_H */
+#endif
diff --git a/darwin-lib/getopt.h b/darwin-lib/getopt.h
new file mode 100644
index 0000000..24da809
--- /dev/null
+++ b/darwin-lib/getopt.h
@@ -0,0 +1,264 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Declarations for getopt.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2012 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_GETOPT_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  We must
+   also inform the replacement unistd.h to not recursively use
+   <getopt.h>; our definitions will be present soon enough.  */
+#if 1
+# define _GL_SYSTEM_GETOPT
+# include_next <getopt.h>
+# undef _GL_SYSTEM_GETOPT
+#endif
+
+#ifndef _GL_GETOPT_H
+
+#ifndef __need_getopt
+# define _GL_GETOPT_H 1
+#endif
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+   identifier that prefixes the external functions and variables
+   defined in this header.  When this happens, include the
+   headers that might declare getopt so that they will not cause
+   confusion if included after this file (if the system had <getopt.h>,
+   we have already included it).  Then systematically rename
+   identifiers so that they do not collide with the system functions
+   and variables.  Renaming avoids problems with some compilers and
+   linkers.  */
+#if defined __GETOPT_PREFIX && !defined __need_getopt
+# if !1
+#  include <stdlib.h>
+#  include <stdio.h>
+#  include <unistd.h>
+# endif
+# undef __need_getopt
+# undef getopt
+# undef getopt_long
+# undef getopt_long_only
+# undef optarg
+# undef opterr
+# undef optind
+# undef optopt
+# undef option
+# define __GETOPT_CONCAT(x, y) x ## y
+# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
+# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
+# define getopt __GETOPT_ID (getopt)
+# define getopt_long __GETOPT_ID (getopt_long)
+# define getopt_long_only __GETOPT_ID (getopt_long_only)
+# define optarg __GETOPT_ID (optarg)
+# define opterr __GETOPT_ID (opterr)
+# define optind __GETOPT_ID (optind)
+# define optopt __GETOPT_ID (optopt)
+# define option __GETOPT_ID (option)
+# define _getopt_internal __GETOPT_ID (getopt_internal)
+#endif
+
+/* Standalone applications get correct prototypes for getopt_long and
+   getopt_long_only; they declare "char **argv".  libc uses prototypes
+   with "char *const *argv" that are incorrect because getopt_long and
+   getopt_long_only can permute argv; this is required for backward
+   compatibility (e.g., for LSB 2.0.1).
+
+   This used to be '#if defined __GETOPT_PREFIX && !defined __need_getopt',
+   but it caused redefinition warnings if both unistd.h and getopt.h were
+   included, since unistd.h includes getopt.h having previously defined
+   __need_getopt.
+
+   The only place where __getopt_argv_const is used is in definitions
+   of getopt_long and getopt_long_only below, but these are visible
+   only if __need_getopt is not defined, so it is quite safe to rewrite
+   the conditional as follows:
+*/
+#if !defined __need_getopt
+# if defined __GETOPT_PREFIX
+#  define __getopt_argv_const /* empty */
+# else
+#  define __getopt_argv_const const
+# endif
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+   standalone, or this is the first header included in the source file.
+   If we are being used with glibc, we need to include <features.h>, but
+   that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
+   not defined, include <ctype.h>, which will pull in <features.h> for us
+   if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
+   doesn't flood the namespace with stuff the way some other headers do.)  */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifndef __THROW
+# ifndef __GNUC_PREREQ
+#  define __GNUC_PREREQ(maj, min) (0)
+# endif
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+#  define __THROW       throw ()
+# else
+#  define __THROW
+# endif
+#endif
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from 'getopt' to the caller.
+   When 'getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when 'ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to 'getopt'.
+
+   On entry to 'getopt', zero means this is the first call; initialize.
+
+   When 'getopt' returns -1, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, 'optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message 'getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+#ifndef __need_getopt
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of 'struct option' terminated by an element containing a name which is
+   zero.
+
+   The field 'has_arg' is:
+   no_argument          (or 0) if the option does not take an argument,
+   required_argument    (or 1) if the option requires an argument,
+   optional_argument    (or 2) if the option takes an optional argument.
+
+   If the field 'flag' is not NULL, it points to a variable that is set
+   to the value given in the field 'val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an 'int' to
+   a compiled-in constant, such as set a value from 'optarg', set the
+   option's 'flag' field to zero and its 'val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero 'flag' field, 'getopt'
+   returns the contents of the 'val' field.  */
+
+# if !GNULIB_defined_struct_option
+struct option
+{
+  const char *name;
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+#  define GNULIB_defined_struct_option 1
+# endif
+
+/* Names for the values of the 'has_arg' field of 'struct option'.  */
+
+# define no_argument            0
+# define required_argument      1
+# define optional_argument      2
+#endif  /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+   arguments in ARGV (ARGC of them, minus the program name) for
+   options given in OPTS.
+
+   Return the option character from OPTS just read.  Return -1 when
+   there are no more options.  For unrecognized options, or options
+   missing arguments, 'optopt' is set to the option letter, and '?' is
+   returned.
+
+   The OPTS string is a list of characters which are recognized option
+   letters, optionally followed by colons, specifying that that letter
+   takes an argument, to be placed in 'optarg'.
+
+   If a letter in OPTS is followed by two colons, its argument is
+   optional.  This behavior is specific to the GNU 'getopt'.
+
+   The argument '--' causes premature termination of argument
+   scanning, explicitly telling 'getopt' that there are no more
+   options.
+
+   If OPTS begins with '-', then non-option arguments are treated as
+   arguments to the option '\1'.  This behavior is specific to the GNU
+   'getopt'.  If OPTS begins with '+', or POSIXLY_CORRECT is set in
+   the environment, then do not permute arguments.  */
+
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+#ifndef __need_getopt
+extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
+                        const char *__shortopts,
+                        const struct option *__longopts, int *__longind)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations.  */
+#undef __need_getopt
+
+#endif /* _GL_GETOPT_H */
+#endif /* _GL_GETOPT_H */
diff --git a/darwin-lib/inttypes.h b/darwin-lib/inttypes.h
new file mode 100644
index 0000000..5a53dba
--- /dev/null
+++ b/darwin-lib/inttypes.h
@@ -0,0 +1,1442 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Derek Price.
+   This file is part of gnulib.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C 99 <inttypes.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
+ */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* Include the original <inttypes.h> if it exists, and if this file
+   has not been included yet or if this file includes gnulib stdint.h
+   which in turn includes this file.
+   The include_next requires a split double-inclusion guard.  */
+#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+# if 1
+
+   /* Some pre-C++11 <stdint.h> implementations need this.  */
+#  if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
+#   define __STDC_FORMAT_MACROS 1
+#  endif
+
+#  include_next <inttypes.h>
+# endif
+#endif
+
+#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+#define INTTYPES_H
+
+/* Include <stdint.h> or the gnulib replacement.
+   But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdint.h>
+#endif
+/* Get CHAR_BIT.  */
+#include <limits.h>
+
+#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
+# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* 7.8.1 Macros for format specifiers */
+
+#if defined _TNS_R_TARGET
+   /* Tandem NonStop R series and compatible platforms released before
+      July 2005 support %Ld but not %lld.  */
+# define _LONG_LONG_FORMAT_PREFIX "L"
+#else
+# define _LONG_LONG_FORMAT_PREFIX "ll"
+#endif
+
+#if !defined PRId8 || 0
+# undef PRId8
+# ifdef INT8_MAX
+#  define PRId8 "d"
+# endif
+#endif
+#if !defined PRIi8 || 0
+# undef PRIi8
+# ifdef INT8_MAX
+#  define PRIi8 "i"
+# endif
+#endif
+#if !defined PRIo8 || 0
+# undef PRIo8
+# ifdef UINT8_MAX
+#  define PRIo8 "o"
+# endif
+#endif
+#if !defined PRIu8 || 0
+# undef PRIu8
+# ifdef UINT8_MAX
+#  define PRIu8 "u"
+# endif
+#endif
+#if !defined PRIx8 || 0
+# undef PRIx8
+# ifdef UINT8_MAX
+#  define PRIx8 "x"
+# endif
+#endif
+#if !defined PRIX8 || 0
+# undef PRIX8
+# ifdef UINT8_MAX
+#  define PRIX8 "X"
+# endif
+#endif
+#if !defined PRId16 || 0
+# undef PRId16
+# ifdef INT16_MAX
+#  define PRId16 "d"
+# endif
+#endif
+#if !defined PRIi16 || 0
+# undef PRIi16
+# ifdef INT16_MAX
+#  define PRIi16 "i"
+# endif
+#endif
+#if !defined PRIo16 || 0
+# undef PRIo16
+# ifdef UINT16_MAX
+#  define PRIo16 "o"
+# endif
+#endif
+#if !defined PRIu16 || 0
+# undef PRIu16
+# ifdef UINT16_MAX
+#  define PRIu16 "u"
+# endif
+#endif
+#if !defined PRIx16 || 0
+# undef PRIx16
+# ifdef UINT16_MAX
+#  define PRIx16 "x"
+# endif
+#endif
+#if !defined PRIX16 || 0
+# undef PRIX16
+# ifdef UINT16_MAX
+#  define PRIX16 "X"
+# endif
+#endif
+#if !defined PRId32 || 0
+# undef PRId32
+# ifdef INT32_MAX
+#  define PRId32 "d"
+# endif
+#endif
+#if !defined PRIi32 || 0
+# undef PRIi32
+# ifdef INT32_MAX
+#  define PRIi32 "i"
+# endif
+#endif
+#if !defined PRIo32 || 0
+# undef PRIo32
+# ifdef UINT32_MAX
+#  define PRIo32 "o"
+# endif
+#endif
+#if !defined PRIu32 || 0
+# undef PRIu32
+# ifdef UINT32_MAX
+#  define PRIu32 "u"
+# endif
+#endif
+#if !defined PRIx32 || 0
+# undef PRIx32
+# ifdef UINT32_MAX
+#  define PRIx32 "x"
+# endif
+#endif
+#if !defined PRIX32 || 0
+# undef PRIX32
+# ifdef UINT32_MAX
+#  define PRIX32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (0 ? defined _LP64 : 1)
+#  define _PRI64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _PRI64_PREFIX "I64"
+# elif 1 && LONG_MAX >> 30 == 1
+#  define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRId64 || 0
+#  undef PRId64
+#  define PRId64 _PRI64_PREFIX "d"
+# endif
+# if !defined PRIi64 || 0
+#  undef PRIi64
+#  define PRIi64 _PRI64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (0 ? defined _LP64 : 1)
+#  define _PRIu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _PRIu64_PREFIX "I64"
+# elif 1 && ULONG_MAX >> 31 == 1
+#  define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRIo64 || 0
+#  undef PRIo64
+#  define PRIo64 _PRIu64_PREFIX "o"
+# endif
+# if !defined PRIu64 || 0
+#  undef PRIu64
+#  define PRIu64 _PRIu64_PREFIX "u"
+# endif
+# if !defined PRIx64 || 0
+#  undef PRIx64
+#  define PRIx64 _PRIu64_PREFIX "x"
+# endif
+# if !defined PRIX64 || 0
+#  undef PRIX64
+#  define PRIX64 _PRIu64_PREFIX "X"
+# endif
+#endif
+
+#if !defined PRIdLEAST8 || 0
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || 0
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || 0
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || 0
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || 0
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || 0
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || 0
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || 0
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || 0
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || 0
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || 0
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || 0
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || 0
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || 0
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || 0
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || 0
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || 0
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || 0
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdLEAST64 || 0
+#  undef PRIdLEAST64
+#  define PRIdLEAST64 PRId64
+# endif
+# if !defined PRIiLEAST64 || 0
+#  undef PRIiLEAST64
+#  define PRIiLEAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoLEAST64 || 0
+#  undef PRIoLEAST64
+#  define PRIoLEAST64 PRIo64
+# endif
+# if !defined PRIuLEAST64 || 0
+#  undef PRIuLEAST64
+#  define PRIuLEAST64 PRIu64
+# endif
+# if !defined PRIxLEAST64 || 0
+#  undef PRIxLEAST64
+#  define PRIxLEAST64 PRIx64
+# endif
+# if !defined PRIXLEAST64 || 0
+#  undef PRIXLEAST64
+#  define PRIXLEAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdFAST8 || 0
+# undef PRIdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define PRIdFAST8 PRId64
+# else
+#  define PRIdFAST8 "d"
+# endif
+#endif
+#if !defined PRIiFAST8 || 0
+# undef PRIiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define PRIiFAST8 PRIi64
+# else
+#  define PRIiFAST8 "i"
+# endif
+#endif
+#if !defined PRIoFAST8 || 0
+# undef PRIoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIoFAST8 PRIo64
+# else
+#  define PRIoFAST8 "o"
+# endif
+#endif
+#if !defined PRIuFAST8 || 0
+# undef PRIuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIuFAST8 PRIu64
+# else
+#  define PRIuFAST8 "u"
+# endif
+#endif
+#if !defined PRIxFAST8 || 0
+# undef PRIxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIxFAST8 PRIx64
+# else
+#  define PRIxFAST8 "x"
+# endif
+#endif
+#if !defined PRIXFAST8 || 0
+# undef PRIXFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIXFAST8 PRIX64
+# else
+#  define PRIXFAST8 "X"
+# endif
+#endif
+#if !defined PRIdFAST16 || 0
+# undef PRIdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define PRIdFAST16 PRId64
+# else
+#  define PRIdFAST16 "d"
+# endif
+#endif
+#if !defined PRIiFAST16 || 0
+# undef PRIiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define PRIiFAST16 PRIi64
+# else
+#  define PRIiFAST16 "i"
+# endif
+#endif
+#if !defined PRIoFAST16 || 0
+# undef PRIoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIoFAST16 PRIo64
+# else
+#  define PRIoFAST16 "o"
+# endif
+#endif
+#if !defined PRIuFAST16 || 0
+# undef PRIuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIuFAST16 PRIu64
+# else
+#  define PRIuFAST16 "u"
+# endif
+#endif
+#if !defined PRIxFAST16 || 0
+# undef PRIxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIxFAST16 PRIx64
+# else
+#  define PRIxFAST16 "x"
+# endif
+#endif
+#if !defined PRIXFAST16 || 0
+# undef PRIXFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIXFAST16 PRIX64
+# else
+#  define PRIXFAST16 "X"
+# endif
+#endif
+#if !defined PRIdFAST32 || 0
+# undef PRIdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define PRIdFAST32 PRId64
+# else
+#  define PRIdFAST32 "d"
+# endif
+#endif
+#if !defined PRIiFAST32 || 0
+# undef PRIiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define PRIiFAST32 PRIi64
+# else
+#  define PRIiFAST32 "i"
+# endif
+#endif
+#if !defined PRIoFAST32 || 0
+# undef PRIoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIoFAST32 PRIo64
+# else
+#  define PRIoFAST32 "o"
+# endif
+#endif
+#if !defined PRIuFAST32 || 0
+# undef PRIuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIuFAST32 PRIu64
+# else
+#  define PRIuFAST32 "u"
+# endif
+#endif
+#if !defined PRIxFAST32 || 0
+# undef PRIxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIxFAST32 PRIx64
+# else
+#  define PRIxFAST32 "x"
+# endif
+#endif
+#if !defined PRIXFAST32 || 0
+# undef PRIXFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIXFAST32 PRIX64
+# else
+#  define PRIXFAST32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdFAST64 || 0
+#  undef PRIdFAST64
+#  define PRIdFAST64 PRId64
+# endif
+# if !defined PRIiFAST64 || 0
+#  undef PRIiFAST64
+#  define PRIiFAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoFAST64 || 0
+#  undef PRIoFAST64
+#  define PRIoFAST64 PRIo64
+# endif
+# if !defined PRIuFAST64 || 0
+#  undef PRIuFAST64
+#  define PRIuFAST64 PRIu64
+# endif
+# if !defined PRIxFAST64 || 0
+#  undef PRIxFAST64
+#  define PRIxFAST64 PRIx64
+# endif
+# if !defined PRIXFAST64 || 0
+#  undef PRIXFAST64
+#  define PRIXFAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdMAX || 0
+# undef PRIdMAX
+# if 1
+#  define PRIdMAX PRId64
+# else
+#  define PRIdMAX "ld"
+# endif
+#endif
+#if !defined PRIiMAX || 0
+# undef PRIiMAX
+# if 1
+#  define PRIiMAX PRIi64
+# else
+#  define PRIiMAX "li"
+# endif
+#endif
+#if !defined PRIoMAX || 0
+# undef PRIoMAX
+# if 1
+#  define PRIoMAX PRIo64
+# else
+#  define PRIoMAX "lo"
+# endif
+#endif
+#if !defined PRIuMAX || 0
+# undef PRIuMAX
+# if 1
+#  define PRIuMAX PRIu64
+# else
+#  define PRIuMAX "lu"
+# endif
+#endif
+#if !defined PRIxMAX || 0
+# undef PRIxMAX
+# if 1
+#  define PRIxMAX PRIx64
+# else
+#  define PRIxMAX "lx"
+# endif
+#endif
+#if !defined PRIXMAX || 0
+# undef PRIXMAX
+# if 1
+#  define PRIXMAX PRIX64
+# else
+#  define PRIXMAX "lX"
+# endif
+#endif
+
+#if !defined PRIdPTR || 0
+# undef PRIdPTR
+# ifdef INTPTR_MAX
+#  define PRIdPTR "l" "d"
+# endif
+#endif
+#if !defined PRIiPTR || 0
+# undef PRIiPTR
+# ifdef INTPTR_MAX
+#  define PRIiPTR "l" "i"
+# endif
+#endif
+#if !defined PRIoPTR || 0
+# undef PRIoPTR
+# ifdef UINTPTR_MAX
+#  define PRIoPTR "l" "o"
+# endif
+#endif
+#if !defined PRIuPTR || 0
+# undef PRIuPTR
+# ifdef UINTPTR_MAX
+#  define PRIuPTR "l" "u"
+# endif
+#endif
+#if !defined PRIxPTR || 0
+# undef PRIxPTR
+# ifdef UINTPTR_MAX
+#  define PRIxPTR "l" "x"
+# endif
+#endif
+#if !defined PRIXPTR || 0
+# undef PRIXPTR
+# ifdef UINTPTR_MAX
+#  define PRIXPTR "l" "X"
+# endif
+#endif
+
+#if !defined SCNd8 || 0
+# undef SCNd8
+# ifdef INT8_MAX
+#  define SCNd8 "hhd"
+# endif
+#endif
+#if !defined SCNi8 || 0
+# undef SCNi8
+# ifdef INT8_MAX
+#  define SCNi8 "hhi"
+# endif
+#endif
+#if !defined SCNo8 || 0
+# undef SCNo8
+# ifdef UINT8_MAX
+#  define SCNo8 "hho"
+# endif
+#endif
+#if !defined SCNu8 || 0
+# undef SCNu8
+# ifdef UINT8_MAX
+#  define SCNu8 "hhu"
+# endif
+#endif
+#if !defined SCNx8 || 0
+# undef SCNx8
+# ifdef UINT8_MAX
+#  define SCNx8 "hhx"
+# endif
+#endif
+#if !defined SCNd16 || 0
+# undef SCNd16
+# ifdef INT16_MAX
+#  define SCNd16 "hd"
+# endif
+#endif
+#if !defined SCNi16 || 0
+# undef SCNi16
+# ifdef INT16_MAX
+#  define SCNi16 "hi"
+# endif
+#endif
+#if !defined SCNo16 || 0
+# undef SCNo16
+# ifdef UINT16_MAX
+#  define SCNo16 "ho"
+# endif
+#endif
+#if !defined SCNu16 || 0
+# undef SCNu16
+# ifdef UINT16_MAX
+#  define SCNu16 "hu"
+# endif
+#endif
+#if !defined SCNx16 || 0
+# undef SCNx16
+# ifdef UINT16_MAX
+#  define SCNx16 "hx"
+# endif
+#endif
+#if !defined SCNd32 || 0
+# undef SCNd32
+# ifdef INT32_MAX
+#  define SCNd32 "d"
+# endif
+#endif
+#if !defined SCNi32 || 0
+# undef SCNi32
+# ifdef INT32_MAX
+#  define SCNi32 "i"
+# endif
+#endif
+#if !defined SCNo32 || 0
+# undef SCNo32
+# ifdef UINT32_MAX
+#  define SCNo32 "o"
+# endif
+#endif
+#if !defined SCNu32 || 0
+# undef SCNu32
+# ifdef UINT32_MAX
+#  define SCNu32 "u"
+# endif
+#endif
+#if !defined SCNx32 || 0
+# undef SCNx32
+# ifdef UINT32_MAX
+#  define SCNx32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (0 ? defined _LP64 : 1)
+#  define _SCN64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _SCN64_PREFIX "I64"
+# elif 1 && LONG_MAX >> 30 == 1
+#  define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNd64 || 0
+#  undef SCNd64
+#  define SCNd64 _SCN64_PREFIX "d"
+# endif
+# if !defined SCNi64 || 0
+#  undef SCNi64
+#  define SCNi64 _SCN64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (0 ? defined _LP64 : 1)
+#  define _SCNu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _SCNu64_PREFIX "I64"
+# elif 1 && ULONG_MAX >> 31 == 1
+#  define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNo64 || 0
+#  undef SCNo64
+#  define SCNo64 _SCNu64_PREFIX "o"
+# endif
+# if !defined SCNu64 || 0
+#  undef SCNu64
+#  define SCNu64 _SCNu64_PREFIX "u"
+# endif
+# if !defined SCNx64 || 0
+#  undef SCNx64
+#  define SCNx64 _SCNu64_PREFIX "x"
+# endif
+#endif
+
+#if !defined SCNdLEAST8 || 0
+# undef SCNdLEAST8
+# define SCNdLEAST8 "hhd"
+#endif
+#if !defined SCNiLEAST8 || 0
+# undef SCNiLEAST8
+# define SCNiLEAST8 "hhi"
+#endif
+#if !defined SCNoLEAST8 || 0
+# undef SCNoLEAST8
+# define SCNoLEAST8 "hho"
+#endif
+#if !defined SCNuLEAST8 || 0
+# undef SCNuLEAST8
+# define SCNuLEAST8 "hhu"
+#endif
+#if !defined SCNxLEAST8 || 0
+# undef SCNxLEAST8
+# define SCNxLEAST8 "hhx"
+#endif
+#if !defined SCNdLEAST16 || 0
+# undef SCNdLEAST16
+# define SCNdLEAST16 "hd"
+#endif
+#if !defined SCNiLEAST16 || 0
+# undef SCNiLEAST16
+# define SCNiLEAST16 "hi"
+#endif
+#if !defined SCNoLEAST16 || 0
+# undef SCNoLEAST16
+# define SCNoLEAST16 "ho"
+#endif
+#if !defined SCNuLEAST16 || 0
+# undef SCNuLEAST16
+# define SCNuLEAST16 "hu"
+#endif
+#if !defined SCNxLEAST16 || 0
+# undef SCNxLEAST16
+# define SCNxLEAST16 "hx"
+#endif
+#if !defined SCNdLEAST32 || 0
+# undef SCNdLEAST32
+# define SCNdLEAST32 "d"
+#endif
+#if !defined SCNiLEAST32 || 0
+# undef SCNiLEAST32
+# define SCNiLEAST32 "i"
+#endif
+#if !defined SCNoLEAST32 || 0
+# undef SCNoLEAST32
+# define SCNoLEAST32 "o"
+#endif
+#if !defined SCNuLEAST32 || 0
+# undef SCNuLEAST32
+# define SCNuLEAST32 "u"
+#endif
+#if !defined SCNxLEAST32 || 0
+# undef SCNxLEAST32
+# define SCNxLEAST32 "x"
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdLEAST64 || 0
+#  undef SCNdLEAST64
+#  define SCNdLEAST64 SCNd64
+# endif
+# if !defined SCNiLEAST64 || 0
+#  undef SCNiLEAST64
+#  define SCNiLEAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoLEAST64 || 0
+#  undef SCNoLEAST64
+#  define SCNoLEAST64 SCNo64
+# endif
+# if !defined SCNuLEAST64 || 0
+#  undef SCNuLEAST64
+#  define SCNuLEAST64 SCNu64
+# endif
+# if !defined SCNxLEAST64 || 0
+#  undef SCNxLEAST64
+#  define SCNxLEAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdFAST8 || 0
+# undef SCNdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define SCNdFAST8 SCNd64
+# elif INT_FAST8_MAX == 0x7fff
+#  define SCNdFAST8 "hd"
+# elif INT_FAST8_MAX == 0x7f
+#  define SCNdFAST8 "hhd"
+# else
+#  define SCNdFAST8 "d"
+# endif
+#endif
+#if !defined SCNiFAST8 || 0
+# undef SCNiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define SCNiFAST8 SCNi64
+# elif INT_FAST8_MAX == 0x7fff
+#  define SCNiFAST8 "hi"
+# elif INT_FAST8_MAX == 0x7f
+#  define SCNiFAST8 "hhi"
+# else
+#  define SCNiFAST8 "i"
+# endif
+#endif
+#if !defined SCNoFAST8 || 0
+# undef SCNoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNoFAST8 SCNo64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNoFAST8 "ho"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNoFAST8 "hho"
+# else
+#  define SCNoFAST8 "o"
+# endif
+#endif
+#if !defined SCNuFAST8 || 0
+# undef SCNuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNuFAST8 SCNu64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNuFAST8 "hu"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNuFAST8 "hhu"
+# else
+#  define SCNuFAST8 "u"
+# endif
+#endif
+#if !defined SCNxFAST8 || 0
+# undef SCNxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNxFAST8 SCNx64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNxFAST8 "hx"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNxFAST8 "hhx"
+# else
+#  define SCNxFAST8 "x"
+# endif
+#endif
+#if !defined SCNdFAST16 || 0
+# undef SCNdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define SCNdFAST16 SCNd64
+# elif INT_FAST16_MAX == 0x7fff
+#  define SCNdFAST16 "hd"
+# else
+#  define SCNdFAST16 "d"
+# endif
+#endif
+#if !defined SCNiFAST16 || 0
+# undef SCNiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define SCNiFAST16 SCNi64
+# elif INT_FAST16_MAX == 0x7fff
+#  define SCNiFAST16 "hi"
+# else
+#  define SCNiFAST16 "i"
+# endif
+#endif
+#if !defined SCNoFAST16 || 0
+# undef SCNoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNoFAST16 SCNo64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNoFAST16 "ho"
+# else
+#  define SCNoFAST16 "o"
+# endif
+#endif
+#if !defined SCNuFAST16 || 0
+# undef SCNuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNuFAST16 SCNu64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNuFAST16 "hu"
+# else
+#  define SCNuFAST16 "u"
+# endif
+#endif
+#if !defined SCNxFAST16 || 0
+# undef SCNxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNxFAST16 SCNx64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNxFAST16 "hx"
+# else
+#  define SCNxFAST16 "x"
+# endif
+#endif
+#if !defined SCNdFAST32 || 0
+# undef SCNdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define SCNdFAST32 SCNd64
+# else
+#  define SCNdFAST32 "d"
+# endif
+#endif
+#if !defined SCNiFAST32 || 0
+# undef SCNiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define SCNiFAST32 SCNi64
+# else
+#  define SCNiFAST32 "i"
+# endif
+#endif
+#if !defined SCNoFAST32 || 0
+# undef SCNoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNoFAST32 SCNo64
+# else
+#  define SCNoFAST32 "o"
+# endif
+#endif
+#if !defined SCNuFAST32 || 0
+# undef SCNuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNuFAST32 SCNu64
+# else
+#  define SCNuFAST32 "u"
+# endif
+#endif
+#if !defined SCNxFAST32 || 0
+# undef SCNxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNxFAST32 SCNx64
+# else
+#  define SCNxFAST32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdFAST64 || 0
+#  undef SCNdFAST64
+#  define SCNdFAST64 SCNd64
+# endif
+# if !defined SCNiFAST64 || 0
+#  undef SCNiFAST64
+#  define SCNiFAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoFAST64 || 0
+#  undef SCNoFAST64
+#  define SCNoFAST64 SCNo64
+# endif
+# if !defined SCNuFAST64 || 0
+#  undef SCNuFAST64
+#  define SCNuFAST64 SCNu64
+# endif
+# if !defined SCNxFAST64 || 0
+#  undef SCNxFAST64
+#  define SCNxFAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdMAX || 0
+# undef SCNdMAX
+# if 1
+#  define SCNdMAX SCNd64
+# else
+#  define SCNdMAX "ld"
+# endif
+#endif
+#if !defined SCNiMAX || 0
+# undef SCNiMAX
+# if 1
+#  define SCNiMAX SCNi64
+# else
+#  define SCNiMAX "li"
+# endif
+#endif
+#if !defined SCNoMAX || 0
+# undef SCNoMAX
+# if 1
+#  define SCNoMAX SCNo64
+# else
+#  define SCNoMAX "lo"
+# endif
+#endif
+#if !defined SCNuMAX || 0
+# undef SCNuMAX
+# if 1
+#  define SCNuMAX SCNu64
+# else
+#  define SCNuMAX "lu"
+# endif
+#endif
+#if !defined SCNxMAX || 0
+# undef SCNxMAX
+# if 1
+#  define SCNxMAX SCNx64
+# else
+#  define SCNxMAX "lx"
+# endif
+#endif
+
+#if !defined SCNdPTR || 0
+# undef SCNdPTR
+# ifdef INTPTR_MAX
+#  define SCNdPTR "l" "d"
+# endif
+#endif
+#if !defined SCNiPTR || 0
+# undef SCNiPTR
+# ifdef INTPTR_MAX
+#  define SCNiPTR "l" "i"
+# endif
+#endif
+#if !defined SCNoPTR || 0
+# undef SCNoPTR
+# ifdef UINTPTR_MAX
+#  define SCNoPTR "l" "o"
+# endif
+#endif
+#if !defined SCNuPTR || 0
+# undef SCNuPTR
+# ifdef UINTPTR_MAX
+#  define SCNuPTR "l" "u"
+# endif
+#endif
+#if !defined SCNxPTR || 0
+# undef SCNxPTR
+# ifdef UINTPTR_MAX
+#  define SCNxPTR "l" "x"
+# endif
+#endif
+
+/* 7.8.2 Functions for greatest-width integer types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if 0
+# if !1
+extern intmax_t imaxabs (intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxabs
+# if HAVE_RAW_DECL_IMAXABS
+_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
+                 "use gnulib module imaxabs for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+#  if !GNULIB_defined_imaxdiv_t
+typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
+#   define GNULIB_defined_imaxdiv_t 1
+#  endif
+extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxdiv
+# if HAVE_RAW_DECL_IMAXDIV
+_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
+                 "use gnulib module imaxdiv for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtoimax
+#   define strtoimax rpl_strtoimax
+#  endif
+_GL_FUNCDECL_RPL (strtoimax, intmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int));
+# else
+#  if !1
+#   undef strtoimax
+_GL_FUNCDECL_SYS (strtoimax, intmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int));
+# endif
+_GL_CXXALIASWARN (strtoimax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoimax
+# if HAVE_RAW_DECL_STRTOIMAX
+_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
+                 "use gnulib module strtoimax for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+#  undef strtoumax
+_GL_FUNCDECL_SYS (strtoumax, uintmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int));
+_GL_CXXALIASWARN (strtoumax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoumax
+# if HAVE_RAW_DECL_STRTOUMAX
+_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
+                 "use gnulib module strtoumax for portability");
+# endif
+#endif
+
+/* Don't bother defining or declaring wcstoimax and wcstoumax, since
+   wide-character functions like this are hardly ever useful.  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/darwin-lib/math.h b/darwin-lib/math.h
new file mode 100644
index 0000000..a79e9d7
--- /dev/null
+++ b/darwin-lib/math.h
@@ -0,0 +1,2587 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <math.h>.
+
+   Copyright (C) 2002-2003, 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_MATH_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <math.h>
+
+#ifndef _GL_MATH_H
+#define _GL_MATH_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_MATH_INLINE
+# define _GL_MATH_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+#ifdef __cplusplus
+/* Helper macros to define type-generic function FUNC as overloaded functions,
+   rather than as macros like in C.  POSIX declares these with an argument of
+   real-floating (that is, one of float, double, or long double).  */
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \
+static inline int                                                   \
+_gl_cxx_ ## func ## f (float f)                                     \
+{                                                                   \
+  return func (f);                                                  \
+}                                                                   \
+static inline int                                                   \
+_gl_cxx_ ## func ## d (double d)                                    \
+{                                                                   \
+  return func (d);                                                  \
+}                                                                   \
+static inline int                                                   \
+_gl_cxx_ ## func ## l (long double l)                               \
+{                                                                   \
+  return func (l);                                                  \
+}
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \
+inline int                                                          \
+func (float f)                                                      \
+{                                                                   \
+  return _gl_cxx_ ## func ## f (f);                                 \
+}                                                                   \
+inline int                                                          \
+func (double d)                                                     \
+{                                                                   \
+  return _gl_cxx_ ## func ## d (d);                                 \
+}                                                                   \
+inline int                                                          \
+func (long double l)                                                \
+{                                                                   \
+  return _gl_cxx_ ## func ## l (l);                                 \
+}
+#endif
+
+/* Helper macros to define a portability warning for the
+   classification macro FUNC called with VALUE.  POSIX declares the
+   classification macros with an argument of real-floating (that is,
+   one of float, double, or long double).  */
+#define _GL_WARN_REAL_FLOATING_DECL(func) \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## f (float f)                                         \
+{                                                                   \
+  return func (f);                                                  \
+}                                                                   \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## d (double d)                                        \
+{                                                                   \
+  return func (d);                                                  \
+}                                                                   \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## l (long double l)                                   \
+{                                                                   \
+  return func (l);                                                  \
+}                                                                   \
+_GL_WARN_ON_USE (rpl_ ## func ## f, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability");    \
+_GL_WARN_ON_USE (rpl_ ## func ## d, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability");    \
+_GL_WARN_ON_USE (rpl_ ## func ## l, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability")
+#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \
+  (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value)     \
+   : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value)  \
+   : rpl_ ## func ## l (value))
+
+
+#if 0
+/* Pull in a function that fixes the 'int' to 'long double' conversion
+   of glibc 2.7.  */
+_GL_EXTERN_C void _Qp_itoq (long double *, int);
+static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq;
+#endif
+
+
+/* POSIX allows platforms that don't support NAN.  But all major
+   machines in the past 15 years have supported something close to
+   IEEE NaN, so we define this unconditionally.  We also must define
+   it on platforms like Solaris 10, where NAN is present but defined
+   as a function pointer rather than a floating point constant.  */
+#if !defined NAN || 0
+# if !GNULIB_defined_NAN
+#  undef NAN
+  /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler
+     choke on the expression 0.0 / 0.0.  */
+#  if defined __DECC || defined _MSC_VER
+_GL_MATH_INLINE float
+_NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#   define NAN (_NaN())
+#  else
+#   define NAN (0.0f / 0.0f)
+#  endif
+#  define GNULIB_defined_NAN 1
+# endif
+#endif
+
+/* Solaris 10 defines HUGE_VAL, but as a function pointer rather
+   than a floating point constant.  */
+#if 0
+# undef HUGE_VALF
+# define HUGE_VALF (1.0f / 0.0f)
+# undef HUGE_VAL
+# define HUGE_VAL (1.0 / 0.0)
+# undef HUGE_VALL
+# define HUGE_VALL (1.0L / 0.0L)
+#endif
+
+/* HUGE_VALF is a 'float' Infinity.  */
+#ifndef HUGE_VALF
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f.  */
+#  define HUGE_VALF (1e25f * 1e25f)
+# else
+#  define HUGE_VALF (1.0f / 0.0f)
+# endif
+#endif
+
+/* HUGE_VAL is a 'double' Infinity.  */
+#ifndef HUGE_VAL
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0.  */
+#  define HUGE_VAL (1e250 * 1e250)
+# else
+#  define HUGE_VAL (1.0 / 0.0)
+# endif
+#endif
+
+/* HUGE_VALL is a 'long double' Infinity.  */
+#ifndef HUGE_VALL
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L.  */
+#  define HUGE_VALL (1e250L * 1e250L)
+# else
+#  define HUGE_VALL (1.0L / 0.0L)
+# endif
+#endif
+
+
+/* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined.  */
+#if !(defined FP_ILOGB0 && defined FP_ILOGBNAN)
+# if defined __NetBSD__ || defined __sgi
+  /* NetBSD, IRIX 6.5: match what ilogb() does */
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# elif defined _AIX
+  /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
+# elif defined __sun
+  /* Solaris 9: match what ilogb() does */
+#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
+#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
+# else
+  /* Gnulib defined values.  */
+#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef acosf
+_GL_FUNCDECL_SYS (acosf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (acosf, float, (float x));
+_GL_CXXALIASWARN (acosf);
+#elif defined GNULIB_POSIXCHECK
+# undef acosf
+# if HAVE_RAW_DECL_ACOSF
+_GL_WARN_ON_USE (acosf, "acosf is unportable - "
+                 "use gnulib module acosf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef acosl
+_GL_FUNCDECL_SYS (acosl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (acosl, long double, (long double x));
+_GL_CXXALIASWARN (acosl);
+#elif defined GNULIB_POSIXCHECK
+# undef acosl
+# if HAVE_RAW_DECL_ACOSL
+_GL_WARN_ON_USE (acosl, "acosl is unportable - "
+                 "use gnulib module acosl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef asinf
+_GL_FUNCDECL_SYS (asinf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (asinf, float, (float x));
+_GL_CXXALIASWARN (asinf);
+#elif defined GNULIB_POSIXCHECK
+# undef asinf
+# if HAVE_RAW_DECL_ASINF
+_GL_WARN_ON_USE (asinf, "asinf is unportable - "
+                 "use gnulib module asinf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef asinl
+_GL_FUNCDECL_SYS (asinl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (asinl, long double, (long double x));
+_GL_CXXALIASWARN (asinl);
+#elif defined GNULIB_POSIXCHECK
+# undef asinl
+# if HAVE_RAW_DECL_ASINL
+_GL_WARN_ON_USE (asinl, "asinl is unportable - "
+                 "use gnulib module asinl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef atanf
+_GL_FUNCDECL_SYS (atanf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (atanf, float, (float x));
+_GL_CXXALIASWARN (atanf);
+#elif defined GNULIB_POSIXCHECK
+# undef atanf
+# if HAVE_RAW_DECL_ATANF
+_GL_WARN_ON_USE (atanf, "atanf is unportable - "
+                 "use gnulib module atanf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef atanl
+_GL_FUNCDECL_SYS (atanl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (atanl, long double, (long double x));
+_GL_CXXALIASWARN (atanl);
+#elif defined GNULIB_POSIXCHECK
+# undef atanl
+# if HAVE_RAW_DECL_ATANL
+_GL_WARN_ON_USE (atanl, "atanl is unportable - "
+                 "use gnulib module atanl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef atan2f
+_GL_FUNCDECL_SYS (atan2f, float, (float y, float x));
+# endif
+_GL_CXXALIAS_SYS (atan2f, float, (float y, float x));
+_GL_CXXALIASWARN (atan2f);
+#elif defined GNULIB_POSIXCHECK
+# undef atan2f
+# if HAVE_RAW_DECL_ATAN2F
+_GL_WARN_ON_USE (atan2f, "atan2f is unportable - "
+                 "use gnulib module atan2f for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cbrtf
+#   define cbrtf rpl_cbrtf
+#  endif
+_GL_FUNCDECL_RPL (cbrtf, float, (float x));
+_GL_CXXALIAS_RPL (cbrtf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (cbrtf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (cbrtf, float, (float x));
+# endif
+_GL_CXXALIASWARN (cbrtf);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrtf
+# if HAVE_RAW_DECL_CBRTF
+_GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - "
+                 "use gnulib module cbrtf for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (cbrt, double, (double x));
+# endif
+_GL_CXXALIAS_SYS (cbrt, double, (double x));
+_GL_CXXALIASWARN (cbrt);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrt
+# if HAVE_RAW_DECL_CBRT
+_GL_WARN_ON_USE (cbrt, "cbrt is unportable - "
+                 "use gnulib module cbrt for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cbrtl
+#   define cbrtl rpl_cbrtl
+#  endif
+_GL_FUNCDECL_RPL (cbrtl, long double, (long double x));
+_GL_CXXALIAS_RPL (cbrtl, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (cbrtl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (cbrtl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (cbrtl);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrtl
+# if HAVE_RAW_DECL_CBRTL
+_GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - "
+                 "use gnulib module cbrtl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceilf
+#   define ceilf rpl_ceilf
+#  endif
+_GL_FUNCDECL_RPL (ceilf, float, (float x));
+_GL_CXXALIAS_RPL (ceilf, float, (float x));
+# else
+#  if !1
+#   undef ceilf
+_GL_FUNCDECL_SYS (ceilf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (ceilf, float, (float x));
+# endif
+_GL_CXXALIASWARN (ceilf);
+#elif defined GNULIB_POSIXCHECK
+# undef ceilf
+# if HAVE_RAW_DECL_CEILF
+_GL_WARN_ON_USE (ceilf, "ceilf is unportable - "
+                 "use gnulib module ceilf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define ceil rpl_ceil
+#  endif
+_GL_FUNCDECL_RPL (ceil, double, (double x));
+_GL_CXXALIAS_RPL (ceil, double, (double x));
+# else
+_GL_CXXALIAS_SYS (ceil, double, (double x));
+# endif
+_GL_CXXALIASWARN (ceil);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceill
+#   define ceill rpl_ceill
+#  endif
+_GL_FUNCDECL_RPL (ceill, long double, (long double x));
+_GL_CXXALIAS_RPL (ceill, long double, (long double x));
+# else
+#  if !1
+#   undef ceill
+_GL_FUNCDECL_SYS (ceill, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (ceill, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (ceill);
+#elif defined GNULIB_POSIXCHECK
+# undef ceill
+# if HAVE_RAW_DECL_CEILL
+_GL_WARN_ON_USE (ceill, "ceill is unportable - "
+                 "use gnulib module ceill for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (copysignf, float, (float x, float y));
+# endif
+_GL_CXXALIAS_SYS (copysignf, float, (float x, float y));
+_GL_CXXALIASWARN (copysignf);
+#elif defined GNULIB_POSIXCHECK
+# undef copysignf
+# if HAVE_RAW_DECL_COPYSIGNF
+_GL_WARN_ON_USE (copysignf, "copysignf is unportable - "
+                 "use gnulib module copysignf for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (copysign, double, (double x, double y));
+# endif
+_GL_CXXALIAS_SYS (copysign, double, (double x, double y));
+_GL_CXXALIASWARN (copysign);
+#elif defined GNULIB_POSIXCHECK
+# undef copysign
+# if HAVE_RAW_DECL_COPYSIGN
+_GL_WARN_ON_USE (copysign, "copysign is unportable - "
+                 "use gnulib module copysign for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y));
+_GL_CXXALIASWARN (copysignl);
+#elif defined GNULIB_POSIXCHECK
+# undef copysignl
+# if HAVE_RAW_DECL_COPYSIGNL
+_GL_WARN_ON_USE (copysign, "copysignl is unportable - "
+                 "use gnulib module copysignl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef cosf
+_GL_FUNCDECL_SYS (cosf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (cosf, float, (float x));
+_GL_CXXALIASWARN (cosf);
+#elif defined GNULIB_POSIXCHECK
+# undef cosf
+# if HAVE_RAW_DECL_COSF
+_GL_WARN_ON_USE (cosf, "cosf is unportable - "
+                 "use gnulib module cosf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef cosl
+_GL_FUNCDECL_SYS (cosl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (cosl, long double, (long double x));
+_GL_CXXALIASWARN (cosl);
+#elif defined GNULIB_POSIXCHECK
+# undef cosl
+# if HAVE_RAW_DECL_COSL
+_GL_WARN_ON_USE (cosl, "cosl is unportable - "
+                 "use gnulib module cosl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef coshf
+_GL_FUNCDECL_SYS (coshf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (coshf, float, (float x));
+_GL_CXXALIASWARN (coshf);
+#elif defined GNULIB_POSIXCHECK
+# undef coshf
+# if HAVE_RAW_DECL_COSHF
+_GL_WARN_ON_USE (coshf, "coshf is unportable - "
+                 "use gnulib module coshf for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef expf
+_GL_FUNCDECL_SYS (expf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (expf, float, (float x));
+_GL_CXXALIASWARN (expf);
+#elif defined GNULIB_POSIXCHECK
+# undef expf
+# if HAVE_RAW_DECL_EXPF
+_GL_WARN_ON_USE (expf, "expf is unportable - "
+                 "use gnulib module expf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef expl
+_GL_FUNCDECL_SYS (expl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (expl, long double, (long double x));
+_GL_CXXALIASWARN (expl);
+#elif defined GNULIB_POSIXCHECK
+# undef expl
+# if HAVE_RAW_DECL_EXPL
+_GL_WARN_ON_USE (expl, "expl is unportable - "
+                 "use gnulib module expl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (exp2f, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (exp2f, float, (float x));
+_GL_CXXALIASWARN (exp2f);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2f
+# if HAVE_RAW_DECL_EXP2F
+_GL_WARN_ON_USE (exp2f, "exp2f is unportable - "
+                 "use gnulib module exp2f for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef exp2
+#   define exp2 rpl_exp2
+#  endif
+_GL_FUNCDECL_RPL (exp2, double, (double x));
+_GL_CXXALIAS_RPL (exp2, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (exp2, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (exp2, double, (double x));
+# endif
+_GL_CXXALIASWARN (exp2);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2
+# if HAVE_RAW_DECL_EXP2
+_GL_WARN_ON_USE (exp2, "exp2 is unportable - "
+                 "use gnulib module exp2 for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef exp2l
+#   define exp2l rpl_exp2l
+#  endif
+_GL_FUNCDECL_RPL (exp2l, long double, (long double x));
+_GL_CXXALIAS_RPL (exp2l, long double, (long double x));
+# else
+#  if !1
+#   undef exp2l
+_GL_FUNCDECL_SYS (exp2l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (exp2l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (exp2l);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2l
+# if HAVE_RAW_DECL_EXP2L
+_GL_WARN_ON_USE (exp2l, "exp2l is unportable - "
+                 "use gnulib module exp2l for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1f
+#   define expm1f rpl_expm1f
+#  endif
+_GL_FUNCDECL_RPL (expm1f, float, (float x));
+_GL_CXXALIAS_RPL (expm1f, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (expm1f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (expm1f, float, (float x));
+# endif
+_GL_CXXALIASWARN (expm1f);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1f
+# if HAVE_RAW_DECL_EXPM1F
+_GL_WARN_ON_USE (expm1f, "expm1f is unportable - "
+                 "use gnulib module expm1f for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1
+#   define expm1 rpl_expm1
+#  endif
+_GL_FUNCDECL_RPL (expm1, double, (double x));
+_GL_CXXALIAS_RPL (expm1, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (expm1, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (expm1, double, (double x));
+# endif
+_GL_CXXALIASWARN (expm1);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1
+# if HAVE_RAW_DECL_EXPM1
+_GL_WARN_ON_USE (expm1, "expm1 is unportable - "
+                 "use gnulib module expm1 for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+#  undef expm1l
+_GL_FUNCDECL_SYS (expm1l, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (expm1l, long double, (long double x));
+_GL_CXXALIASWARN (expm1l);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1l
+# if HAVE_RAW_DECL_EXPM1L
+_GL_WARN_ON_USE (expm1l, "expm1l is unportable - "
+                 "use gnulib module expm1l for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef fabsf
+_GL_FUNCDECL_SYS (fabsf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (fabsf, float, (float x));
+_GL_CXXALIASWARN (fabsf);
+#elif defined GNULIB_POSIXCHECK
+# undef fabsf
+# if HAVE_RAW_DECL_FABSF
+_GL_WARN_ON_USE (fabsf, "fabsf is unportable - "
+                 "use gnulib module fabsf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fabsl
+#   define fabsl rpl_fabsl
+#  endif
+_GL_FUNCDECL_RPL (fabsl, long double, (long double x));
+_GL_CXXALIAS_RPL (fabsl, long double, (long double x));
+# else
+#  if !1
+#   undef fabsl
+_GL_FUNCDECL_SYS (fabsl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (fabsl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (fabsl);
+#elif defined GNULIB_POSIXCHECK
+# undef fabsl
+# if HAVE_RAW_DECL_FABSL
+_GL_WARN_ON_USE (fabsl, "fabsl is unportable - "
+                 "use gnulib module fabsl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floorf
+#   define floorf rpl_floorf
+#  endif
+_GL_FUNCDECL_RPL (floorf, float, (float x));
+_GL_CXXALIAS_RPL (floorf, float, (float x));
+# else
+#  if !1
+#   undef floorf
+_GL_FUNCDECL_SYS (floorf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (floorf, float, (float x));
+# endif
+_GL_CXXALIASWARN (floorf);
+#elif defined GNULIB_POSIXCHECK
+# undef floorf
+# if HAVE_RAW_DECL_FLOORF
+_GL_WARN_ON_USE (floorf, "floorf is unportable - "
+                 "use gnulib module floorf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define floor rpl_floor
+#  endif
+_GL_FUNCDECL_RPL (floor, double, (double x));
+_GL_CXXALIAS_RPL (floor, double, (double x));
+# else
+_GL_CXXALIAS_SYS (floor, double, (double x));
+# endif
+_GL_CXXALIASWARN (floor);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floorl
+#   define floorl rpl_floorl
+#  endif
+_GL_FUNCDECL_RPL (floorl, long double, (long double x));
+_GL_CXXALIAS_RPL (floorl, long double, (long double x));
+# else
+#  if !1
+#   undef floorl
+_GL_FUNCDECL_SYS (floorl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (floorl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (floorl);
+#elif defined GNULIB_POSIXCHECK
+# undef floorl
+# if HAVE_RAW_DECL_FLOORL
+_GL_WARN_ON_USE (floorl, "floorl is unportable - "
+                 "use gnulib module floorl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmaf
+#   define fmaf rpl_fmaf
+#  endif
+_GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z));
+_GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z));
+#  endif
+_GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z));
+# endif
+_GL_CXXALIASWARN (fmaf);
+#elif defined GNULIB_POSIXCHECK
+# undef fmaf
+# if HAVE_RAW_DECL_FMAF
+_GL_WARN_ON_USE (fmaf, "fmaf is unportable - "
+                 "use gnulib module fmaf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fma
+#   define fma rpl_fma
+#  endif
+_GL_FUNCDECL_RPL (fma, double, (double x, double y, double z));
+_GL_CXXALIAS_RPL (fma, double, (double x, double y, double z));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fma, double, (double x, double y, double z));
+#  endif
+_GL_CXXALIAS_SYS (fma, double, (double x, double y, double z));
+# endif
+_GL_CXXALIASWARN (fma);
+#elif defined GNULIB_POSIXCHECK
+# undef fma
+# if HAVE_RAW_DECL_FMA
+_GL_WARN_ON_USE (fma, "fma is unportable - "
+                 "use gnulib module fma for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmal
+#   define fmal rpl_fmal
+#  endif
+_GL_FUNCDECL_RPL (fmal, long double,
+                  (long double x, long double y, long double z));
+_GL_CXXALIAS_RPL (fmal, long double,
+                  (long double x, long double y, long double z));
+# else
+#  if !1
+#   undef fmal
+_GL_FUNCDECL_SYS (fmal, long double,
+                  (long double x, long double y, long double z));
+#  endif
+_GL_CXXALIAS_SYS (fmal, long double,
+                  (long double x, long double y, long double z));
+# endif
+_GL_CXXALIASWARN (fmal);
+#elif defined GNULIB_POSIXCHECK
+# undef fmal
+# if HAVE_RAW_DECL_FMAL
+_GL_WARN_ON_USE (fmal, "fmal is unportable - "
+                 "use gnulib module fmal for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmodf
+#   define fmodf rpl_fmodf
+#  endif
+_GL_FUNCDECL_RPL (fmodf, float, (float x, float y));
+_GL_CXXALIAS_RPL (fmodf, float, (float x, float y));
+# else
+#  if !1
+#   undef fmodf
+_GL_FUNCDECL_SYS (fmodf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (fmodf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (fmodf);
+#elif defined GNULIB_POSIXCHECK
+# undef fmodf
+# if HAVE_RAW_DECL_FMODF
+_GL_WARN_ON_USE (fmodf, "fmodf is unportable - "
+                 "use gnulib module fmodf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmod
+#   define fmod rpl_fmod
+#  endif
+_GL_FUNCDECL_RPL (fmod, double, (double x, double y));
+_GL_CXXALIAS_RPL (fmod, double, (double x, double y));
+# else
+_GL_CXXALIAS_SYS (fmod, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (fmod);
+#elif defined GNULIB_POSIXCHECK
+# undef fmod
+# if HAVE_RAW_DECL_FMOD
+_GL_WARN_ON_USE (fmod, "fmod has portability problems - "
+                 "use gnulib module fmod for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmodl
+#   define fmodl rpl_fmodl
+#  endif
+_GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y));
+# else
+#  if !1
+#   undef fmodl
+_GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (fmodl);
+#elif defined GNULIB_POSIXCHECK
+# undef fmodl
+# if HAVE_RAW_DECL_FMODL
+_GL_WARN_ON_USE (fmodl, "fmodl is unportable - "
+                 "use gnulib module fmodl for portability");
+# endif
+#endif
+
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef frexpf
+#   define frexpf rpl_frexpf
+#  endif
+_GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr));
+# else
+#  if !1
+#   undef frexpf
+_GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr));
+# endif
+_GL_CXXALIASWARN (frexpf);
+#elif defined GNULIB_POSIXCHECK
+# undef frexpf
+# if HAVE_RAW_DECL_FREXPF
+_GL_WARN_ON_USE (frexpf, "frexpf is unportable - "
+                 "use gnulib module frexpf for portability");
+# endif
+#endif
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define frexp rpl_frexp
+#  endif
+_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr));
+# else
+_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
+# endif
+_GL_CXXALIASWARN (frexp);
+#elif defined GNULIB_POSIXCHECK
+# undef frexp
+/* Assume frexp is always declared.  */
+_GL_WARN_ON_USE (frexp, "frexp is unportable - "
+                 "use gnulib module frexp for portability");
+#endif
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if 1 && 0
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef frexpl
+#  define frexpl rpl_frexpl
+# endif
+_GL_FUNCDECL_RPL (frexpl, long double,
+                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr));
+#else
+# if !1
+_GL_FUNCDECL_SYS (frexpl, long double,
+                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
+# endif
+# if 1
+_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr));
+# endif
+#endif
+#if 1 && !(0 && !1)
+_GL_CXXALIASWARN (frexpl);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# undef frexpl
+# if HAVE_RAW_DECL_FREXPL
+_GL_WARN_ON_USE (frexpl, "frexpl is unportable - "
+                 "use gnulib module frexpl for portability");
+# endif
+#endif
+
+
+/* Return sqrt(x^2+y^2).  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypotf
+#   define hypotf rpl_hypotf
+#  endif
+_GL_FUNCDECL_RPL (hypotf, float, (float x, float y));
+_GL_CXXALIAS_RPL (hypotf, float, (float x, float y));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (hypotf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (hypotf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (hypotf);
+#elif defined GNULIB_POSIXCHECK
+# undef hypotf
+# if HAVE_RAW_DECL_HYPOTF
+_GL_WARN_ON_USE (hypotf, "hypotf is unportable - "
+                 "use gnulib module hypotf for portability");
+# endif
+#endif
+
+/* Return sqrt(x^2+y^2).  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypot
+#   define hypot rpl_hypot
+#  endif
+_GL_FUNCDECL_RPL (hypot, double, (double x, double y));
+_GL_CXXALIAS_RPL (hypot, double, (double x, double y));
+# else
+_GL_CXXALIAS_SYS (hypot, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (hypot);
+#elif defined GNULIB_POSIXCHECK
+# undef hypot
+# if HAVE_RAW_DECL_HYPOT
+_GL_WARN_ON_USE (hypotf, "hypot has portability problems - "
+                 "use gnulib module hypot for portability");
+# endif
+#endif
+
+/* Return sqrt(x^2+y^2).  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypotl
+#   define hypotl rpl_hypotl
+#  endif
+_GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (hypotl);
+#elif defined GNULIB_POSIXCHECK
+# undef hypotl
+# if HAVE_RAW_DECL_HYPOTL
+_GL_WARN_ON_USE (hypotl, "hypotl is unportable - "
+                 "use gnulib module hypotl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogbf
+#   define ilogbf rpl_ilogbf
+#  endif
+_GL_FUNCDECL_RPL (ilogbf, int, (float x));
+_GL_CXXALIAS_RPL (ilogbf, int, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ilogbf, int, (float x));
+#  endif
+_GL_CXXALIAS_SYS (ilogbf, int, (float x));
+# endif
+_GL_CXXALIASWARN (ilogbf);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogbf
+# if HAVE_RAW_DECL_ILOGBF
+_GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - "
+                 "use gnulib module ilogbf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogb
+#   define ilogb rpl_ilogb
+#  endif
+_GL_FUNCDECL_RPL (ilogb, int, (double x));
+_GL_CXXALIAS_RPL (ilogb, int, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ilogb, int, (double x));
+#  endif
+_GL_CXXALIAS_SYS (ilogb, int, (double x));
+# endif
+_GL_CXXALIASWARN (ilogb);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogb
+# if HAVE_RAW_DECL_ILOGB
+_GL_WARN_ON_USE (ilogb, "ilogb is unportable - "
+                 "use gnulib module ilogb for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (ilogbl, int, (long double x));
+# endif
+_GL_CXXALIAS_SYS (ilogbl, int, (long double x));
+_GL_CXXALIASWARN (ilogbl);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogbl
+# if HAVE_RAW_DECL_ILOGBL
+_GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - "
+                 "use gnulib module ilogbl for portability");
+# endif
+#endif
+
+
+/* Return x * 2^exp.  */
+#if 0
+# if !1
+#  undef ldexpf
+_GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp));
+# endif
+_GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp));
+_GL_CXXALIASWARN (ldexpf);
+#elif defined GNULIB_POSIXCHECK
+# undef ldexpf
+# if HAVE_RAW_DECL_LDEXPF
+_GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - "
+                 "use gnulib module ldexpf for portability");
+# endif
+#endif
+
+/* Return x * 2^exp.  */
+#if 1 && 0
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef ldexpl
+#  define ldexpl rpl_ldexpl
+# endif
+_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp));
+_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp));
+#else
+# if !1
+_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp));
+# endif
+# if 1
+_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp));
+# endif
+#endif
+#if 1
+_GL_CXXALIASWARN (ldexpl);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# undef ldexpl
+# if HAVE_RAW_DECL_LDEXPL
+_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - "
+                 "use gnulib module ldexpl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logf
+#   define logf rpl_logf
+#  endif
+_GL_FUNCDECL_RPL (logf, float, (float x));
+_GL_CXXALIAS_RPL (logf, float, (float x));
+# else
+#  if !1
+#   undef logf
+_GL_FUNCDECL_SYS (logf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (logf, float, (float x));
+# endif
+_GL_CXXALIASWARN (logf);
+#elif defined GNULIB_POSIXCHECK
+# undef logf
+# if HAVE_RAW_DECL_LOGF
+_GL_WARN_ON_USE (logf, "logf is unportable - "
+                 "use gnulib module logf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log
+#   define log rpl_log
+#  endif
+_GL_FUNCDECL_RPL (log, double, (double x));
+_GL_CXXALIAS_RPL (log, double, (double x));
+# else
+_GL_CXXALIAS_SYS (log, double, (double x));
+# endif
+_GL_CXXALIASWARN (log);
+#elif defined GNULIB_POSIXCHECK
+# undef log
+# if HAVE_RAW_DECL_LOG
+_GL_WARN_ON_USE (log, "log has portability problems - "
+                 "use gnulib module log for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logl
+#   define logl rpl_logl
+#  endif
+_GL_FUNCDECL_RPL (logl, long double, (long double x));
+_GL_CXXALIAS_RPL (logl, long double, (long double x));
+# else
+#  if !1 || !1
+#   undef logl
+_GL_FUNCDECL_SYS (logl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (logl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (logl);
+#elif defined GNULIB_POSIXCHECK
+# undef logl
+# if HAVE_RAW_DECL_LOGL
+_GL_WARN_ON_USE (logl, "logl is unportable - "
+                 "use gnulib module logl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10f
+#   define log10f rpl_log10f
+#  endif
+_GL_FUNCDECL_RPL (log10f, float, (float x));
+_GL_CXXALIAS_RPL (log10f, float, (float x));
+# else
+#  if !1
+#   undef log10f
+_GL_FUNCDECL_SYS (log10f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log10f, float, (float x));
+# endif
+_GL_CXXALIASWARN (log10f);
+#elif defined GNULIB_POSIXCHECK
+# undef log10f
+# if HAVE_RAW_DECL_LOG10F
+_GL_WARN_ON_USE (log10f, "log10f is unportable - "
+                 "use gnulib module log10f for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10
+#   define log10 rpl_log10
+#  endif
+_GL_FUNCDECL_RPL (log10, double, (double x));
+_GL_CXXALIAS_RPL (log10, double, (double x));
+# else
+_GL_CXXALIAS_SYS (log10, double, (double x));
+# endif
+_GL_CXXALIASWARN (log10);
+#elif defined GNULIB_POSIXCHECK
+# undef log10
+# if HAVE_RAW_DECL_LOG10
+_GL_WARN_ON_USE (log10, "log10 has portability problems - "
+                 "use gnulib module log10 for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10l
+#   define log10l rpl_log10l
+#  endif
+_GL_FUNCDECL_RPL (log10l, long double, (long double x));
+_GL_CXXALIAS_RPL (log10l, long double, (long double x));
+# else
+#  if !1 || !1
+#   undef log10l
+_GL_FUNCDECL_SYS (log10l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log10l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log10l);
+#elif defined GNULIB_POSIXCHECK
+# undef log10l
+# if HAVE_RAW_DECL_LOG10L
+_GL_WARN_ON_USE (log10l, "log10l is unportable - "
+                 "use gnulib module log10l for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1pf
+#   define log1pf rpl_log1pf
+#  endif
+_GL_FUNCDECL_RPL (log1pf, float, (float x));
+_GL_CXXALIAS_RPL (log1pf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (log1pf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log1pf, float, (float x));
+# endif
+_GL_CXXALIASWARN (log1pf);
+#elif defined GNULIB_POSIXCHECK
+# undef log1pf
+# if HAVE_RAW_DECL_LOG1PF
+_GL_WARN_ON_USE (log1pf, "log1pf is unportable - "
+                 "use gnulib module log1pf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1p
+#   define log1p rpl_log1p
+#  endif
+_GL_FUNCDECL_RPL (log1p, double, (double x));
+_GL_CXXALIAS_RPL (log1p, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (log1p, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (log1p, double, (double x));
+# endif
+_GL_CXXALIASWARN (log1p);
+#elif defined GNULIB_POSIXCHECK
+# undef log1p
+# if HAVE_RAW_DECL_LOG1P
+_GL_WARN_ON_USE (log1p, "log1p has portability problems - "
+                 "use gnulib module log1p for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1pl
+#   define log1pl rpl_log1pl
+#  endif
+_GL_FUNCDECL_RPL (log1pl, long double, (long double x));
+_GL_CXXALIAS_RPL (log1pl, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (log1pl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log1pl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log1pl);
+#elif defined GNULIB_POSIXCHECK
+# undef log1pl
+# if HAVE_RAW_DECL_LOG1PL
+_GL_WARN_ON_USE (log1pl, "log1pl has portability problems - "
+                 "use gnulib module log1pl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2f
+#   define log2f rpl_log2f
+#  endif
+_GL_FUNCDECL_RPL (log2f, float, (float x));
+_GL_CXXALIAS_RPL (log2f, float, (float x));
+# else
+#  if !1
+#   undef log2f
+_GL_FUNCDECL_SYS (log2f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log2f, float, (float x));
+# endif
+_GL_CXXALIASWARN (log2f);
+#elif defined GNULIB_POSIXCHECK
+# undef log2f
+# if HAVE_RAW_DECL_LOG2F
+_GL_WARN_ON_USE (log2f, "log2f is unportable - "
+                 "use gnulib module log2f for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2
+#   define log2 rpl_log2
+#  endif
+_GL_FUNCDECL_RPL (log2, double, (double x));
+_GL_CXXALIAS_RPL (log2, double, (double x));
+# else
+#  if !1
+#   undef log2
+_GL_FUNCDECL_SYS (log2, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (log2, double, (double x));
+# endif
+_GL_CXXALIASWARN (log2);
+#elif defined GNULIB_POSIXCHECK
+# undef log2
+# if HAVE_RAW_DECL_LOG2
+_GL_WARN_ON_USE (log2, "log2 is unportable - "
+                 "use gnulib module log2 for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2l
+#   define log2l rpl_log2l
+#  endif
+_GL_FUNCDECL_RPL (log2l, long double, (long double x));
+_GL_CXXALIAS_RPL (log2l, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (log2l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log2l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log2l);
+#elif defined GNULIB_POSIXCHECK
+# undef log2l
+# if HAVE_RAW_DECL_LOG2L
+_GL_WARN_ON_USE (log2l, "log2l is unportable - "
+                 "use gnulib module log2l for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logbf
+#   define logbf rpl_logbf
+#  endif
+_GL_FUNCDECL_RPL (logbf, float, (float x));
+_GL_CXXALIAS_RPL (logbf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (logbf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (logbf, float, (float x));
+# endif
+_GL_CXXALIASWARN (logbf);
+#elif defined GNULIB_POSIXCHECK
+# undef logbf
+# if HAVE_RAW_DECL_LOGBF
+_GL_WARN_ON_USE (logbf, "logbf is unportable - "
+                 "use gnulib module logbf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logb
+#   define logb rpl_logb
+#  endif
+_GL_FUNCDECL_RPL (logb, double, (double x));
+_GL_CXXALIAS_RPL (logb, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (logb, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (logb, double, (double x));
+# endif
+_GL_CXXALIASWARN (logb);
+#elif defined GNULIB_POSIXCHECK
+# undef logb
+# if HAVE_RAW_DECL_LOGB
+_GL_WARN_ON_USE (logb, "logb is unportable - "
+                 "use gnulib module logb for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logbl
+#   define logbl rpl_logbl
+#  endif
+_GL_FUNCDECL_RPL (logbl, long double, (long double x));
+_GL_CXXALIAS_RPL (logbl, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (logbl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (logbl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (logbl);
+#elif defined GNULIB_POSIXCHECK
+# undef logbl
+# if HAVE_RAW_DECL_LOGBL
+_GL_WARN_ON_USE (logbl, "logbl is unportable - "
+                 "use gnulib module logbl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modff
+#   define modff rpl_modff
+#  endif
+_GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modff, float, (float x, float *iptr));
+# else
+#  if !1
+#   undef modff
+_GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (modff, float, (float x, float *iptr));
+# endif
+_GL_CXXALIASWARN (modff);
+#elif defined GNULIB_POSIXCHECK
+# undef modff
+# if HAVE_RAW_DECL_MODFF
+_GL_WARN_ON_USE (modff, "modff is unportable - "
+                 "use gnulib module modff for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modf
+#   define modf rpl_modf
+#  endif
+_GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modf, double, (double x, double *iptr));
+# else
+_GL_CXXALIAS_SYS (modf, double, (double x, double *iptr));
+# endif
+_GL_CXXALIASWARN (modf);
+#elif defined GNULIB_POSIXCHECK
+# undef modf
+# if HAVE_RAW_DECL_MODF
+_GL_WARN_ON_USE (modf, "modf has portability problems - "
+                 "use gnulib module modf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modfl
+#   define modfl rpl_modfl
+#  endif
+_GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr)
+                                      _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr));
+# else
+#  if !1
+#   undef modfl
+_GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr)
+                                      _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr));
+# endif
+_GL_CXXALIASWARN (modfl);
+#elif defined GNULIB_POSIXCHECK
+# undef modfl
+# if HAVE_RAW_DECL_MODFL
+_GL_WARN_ON_USE (modfl, "modfl is unportable - "
+                 "use gnulib module modfl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef powf
+_GL_FUNCDECL_SYS (powf, float, (float x, float y));
+# endif
+_GL_CXXALIAS_SYS (powf, float, (float x, float y));
+_GL_CXXALIASWARN (powf);
+#elif defined GNULIB_POSIXCHECK
+# undef powf
+# if HAVE_RAW_DECL_POWF
+_GL_WARN_ON_USE (powf, "powf is unportable - "
+                 "use gnulib module powf for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainderf
+#   define remainderf rpl_remainderf
+#  endif
+_GL_FUNCDECL_RPL (remainderf, float, (float x, float y));
+_GL_CXXALIAS_RPL (remainderf, float, (float x, float y));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (remainderf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (remainderf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (remainderf);
+#elif defined GNULIB_POSIXCHECK
+# undef remainderf
+# if HAVE_RAW_DECL_REMAINDERF
+_GL_WARN_ON_USE (remainderf, "remainderf is unportable - "
+                 "use gnulib module remainderf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainder
+#   define remainder rpl_remainder
+#  endif
+_GL_FUNCDECL_RPL (remainder, double, (double x, double y));
+_GL_CXXALIAS_RPL (remainder, double, (double x, double y));
+# else
+#  if !1 || !1
+_GL_FUNCDECL_SYS (remainder, double, (double x, double y));
+#  endif
+_GL_CXXALIAS_SYS (remainder, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (remainder);
+#elif defined GNULIB_POSIXCHECK
+# undef remainder
+# if HAVE_RAW_DECL_REMAINDER
+_GL_WARN_ON_USE (remainder, "remainder is unportable - "
+                 "use gnulib module remainder for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainderl
+#   define remainderl rpl_remainderl
+#  endif
+_GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y));
+# else
+#  if !1
+#   undef remainderl
+_GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (remainderl);
+#elif defined GNULIB_POSIXCHECK
+# undef remainderl
+# if HAVE_RAW_DECL_REMAINDERL
+_GL_WARN_ON_USE (remainderl, "remainderl is unportable - "
+                 "use gnulib module remainderl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (rintf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (rintf, float, (float x));
+_GL_CXXALIASWARN (rintf);
+#elif defined GNULIB_POSIXCHECK
+# undef rintf
+# if HAVE_RAW_DECL_RINTF
+_GL_WARN_ON_USE (rintf, "rintf is unportable - "
+                 "use gnulib module rintf for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (rint, double, (double x));
+# endif
+_GL_CXXALIAS_SYS (rint, double, (double x));
+_GL_CXXALIASWARN (rint);
+#elif defined GNULIB_POSIXCHECK
+# undef rint
+# if HAVE_RAW_DECL_RINT
+_GL_WARN_ON_USE (rint, "rint is unportable - "
+                 "use gnulib module rint for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (rintl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (rintl, long double, (long double x));
+_GL_CXXALIASWARN (rintl);
+#elif defined GNULIB_POSIXCHECK
+# undef rintl
+# if HAVE_RAW_DECL_RINTL
+_GL_WARN_ON_USE (rintl, "rintl is unportable - "
+                 "use gnulib module rintl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef roundf
+#   define roundf rpl_roundf
+#  endif
+_GL_FUNCDECL_RPL (roundf, float, (float x));
+_GL_CXXALIAS_RPL (roundf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (roundf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (roundf, float, (float x));
+# endif
+_GL_CXXALIASWARN (roundf);
+#elif defined GNULIB_POSIXCHECK
+# undef roundf
+# if HAVE_RAW_DECL_ROUNDF
+_GL_WARN_ON_USE (roundf, "roundf is unportable - "
+                 "use gnulib module roundf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef round
+#   define round rpl_round
+#  endif
+_GL_FUNCDECL_RPL (round, double, (double x));
+_GL_CXXALIAS_RPL (round, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (round, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (round, double, (double x));
+# endif
+_GL_CXXALIASWARN (round);
+#elif defined GNULIB_POSIXCHECK
+# undef round
+# if HAVE_RAW_DECL_ROUND
+_GL_WARN_ON_USE (round, "round is unportable - "
+                 "use gnulib module round for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef roundl
+#   define roundl rpl_roundl
+#  endif
+_GL_FUNCDECL_RPL (roundl, long double, (long double x));
+_GL_CXXALIAS_RPL (roundl, long double, (long double x));
+# else
+#  if !1
+#   undef roundl
+_GL_FUNCDECL_SYS (roundl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (roundl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (roundl);
+#elif defined GNULIB_POSIXCHECK
+# undef roundl
+# if HAVE_RAW_DECL_ROUNDL
+_GL_WARN_ON_USE (roundl, "roundl is unportable - "
+                 "use gnulib module roundl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef sinf
+_GL_FUNCDECL_SYS (sinf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sinf, float, (float x));
+_GL_CXXALIASWARN (sinf);
+#elif defined GNULIB_POSIXCHECK
+# undef sinf
+# if HAVE_RAW_DECL_SINF
+_GL_WARN_ON_USE (sinf, "sinf is unportable - "
+                 "use gnulib module sinf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef sinl
+_GL_FUNCDECL_SYS (sinl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (sinl, long double, (long double x));
+_GL_CXXALIASWARN (sinl);
+#elif defined GNULIB_POSIXCHECK
+# undef sinl
+# if HAVE_RAW_DECL_SINL
+_GL_WARN_ON_USE (sinl, "sinl is unportable - "
+                 "use gnulib module sinl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef sinhf
+_GL_FUNCDECL_SYS (sinhf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sinhf, float, (float x));
+_GL_CXXALIASWARN (sinhf);
+#elif defined GNULIB_POSIXCHECK
+# undef sinhf
+# if HAVE_RAW_DECL_SINHF
+_GL_WARN_ON_USE (sinhf, "sinhf is unportable - "
+                 "use gnulib module sinhf for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef sqrtf
+_GL_FUNCDECL_SYS (sqrtf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sqrtf, float, (float x));
+_GL_CXXALIASWARN (sqrtf);
+#elif defined GNULIB_POSIXCHECK
+# undef sqrtf
+# if HAVE_RAW_DECL_SQRTF
+_GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - "
+                 "use gnulib module sqrtf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sqrtl
+#   define sqrtl rpl_sqrtl
+#  endif
+_GL_FUNCDECL_RPL (sqrtl, long double, (long double x));
+_GL_CXXALIAS_RPL (sqrtl, long double, (long double x));
+# else
+#  if !1 || !1
+#   undef sqrtl
+_GL_FUNCDECL_SYS (sqrtl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (sqrtl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (sqrtl);
+#elif defined GNULIB_POSIXCHECK
+# undef sqrtl
+# if HAVE_RAW_DECL_SQRTL
+_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - "
+                 "use gnulib module sqrtl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef tanf
+_GL_FUNCDECL_SYS (tanf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (tanf, float, (float x));
+_GL_CXXALIASWARN (tanf);
+#elif defined GNULIB_POSIXCHECK
+# undef tanf
+# if HAVE_RAW_DECL_TANF
+_GL_WARN_ON_USE (tanf, "tanf is unportable - "
+                 "use gnulib module tanf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef tanl
+_GL_FUNCDECL_SYS (tanl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (tanl, long double, (long double x));
+_GL_CXXALIASWARN (tanl);
+#elif defined GNULIB_POSIXCHECK
+# undef tanl
+# if HAVE_RAW_DECL_TANL
+_GL_WARN_ON_USE (tanl, "tanl is unportable - "
+                 "use gnulib module tanl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef tanhf
+_GL_FUNCDECL_SYS (tanhf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (tanhf, float, (float x));
+_GL_CXXALIASWARN (tanhf);
+#elif defined GNULIB_POSIXCHECK
+# undef tanhf
+# if HAVE_RAW_DECL_TANHF
+_GL_WARN_ON_USE (tanhf, "tanhf is unportable - "
+                 "use gnulib module tanhf for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define truncf rpl_truncf
+#  endif
+_GL_FUNCDECL_RPL (truncf, float, (float x));
+_GL_CXXALIAS_RPL (truncf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (truncf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (truncf, float, (float x));
+# endif
+_GL_CXXALIASWARN (truncf);
+#elif defined GNULIB_POSIXCHECK
+# undef truncf
+# if HAVE_RAW_DECL_TRUNCF
+_GL_WARN_ON_USE (truncf, "truncf is unportable - "
+                 "use gnulib module truncf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define trunc rpl_trunc
+#  endif
+_GL_FUNCDECL_RPL (trunc, double, (double x));
+_GL_CXXALIAS_RPL (trunc, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (trunc, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (trunc, double, (double x));
+# endif
+_GL_CXXALIASWARN (trunc);
+#elif defined GNULIB_POSIXCHECK
+# undef trunc
+# if HAVE_RAW_DECL_TRUNC
+_GL_WARN_ON_USE (trunc, "trunc is unportable - "
+                 "use gnulib module trunc for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef truncl
+#   define truncl rpl_truncl
+#  endif
+_GL_FUNCDECL_RPL (truncl, long double, (long double x));
+_GL_CXXALIAS_RPL (truncl, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (truncl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (truncl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (truncl);
+#elif defined GNULIB_POSIXCHECK
+# undef truncl
+# if HAVE_RAW_DECL_TRUNCL
+_GL_WARN_ON_USE (truncl, "truncl is unportable - "
+                 "use gnulib module truncl for portability");
+# endif
+#endif
+
+
+/* Definitions of function-like macros come here, after the function
+   declarations.  */
+
+
+#if 0
+# if 0
+_GL_EXTERN_C int gl_isfinitef (float x);
+_GL_EXTERN_C int gl_isfinited (double x);
+_GL_EXTERN_C int gl_isfinitel (long double x);
+#  undef isfinite
+#  define isfinite(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \
+    sizeof (x) == sizeof (double) ? gl_isfinited (x) : \
+    gl_isfinitef (x))
+# endif
+# ifdef __cplusplus
+#  ifdef isfinite
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
+#   undef isfinite
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isfinite
+_GL_WARN_REAL_FLOATING_DECL (isfinite);
+#  undef isfinite
+#  define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x)
+# endif
+#endif
+
+
+#if 0
+# if 0
+_GL_EXTERN_C int gl_isinff (float x);
+_GL_EXTERN_C int gl_isinfd (double x);
+_GL_EXTERN_C int gl_isinfl (long double x);
+#  undef isinf
+#  define isinf(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
+    sizeof (x) == sizeof (double) ? gl_isinfd (x) : \
+    gl_isinff (x))
+# endif
+# ifdef __cplusplus
+#  ifdef isinf
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
+#   undef isinf
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isinf
+_GL_WARN_REAL_FLOATING_DECL (isinf);
+#  undef isinf
+#  define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x)
+# endif
+#endif
+
+
+#if 1
+/* Test for NaN for 'float' numbers.  */
+# if 1
+/* The original <math.h> included above provides a declaration of isnan macro
+   or (older) isnanf function.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnanf
+#   define isnanf(x) __builtin_isnanf ((float)(x))
+#  elif defined isnan
+#   undef isnanf
+#   define isnanf(x) isnan ((float)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnanf
+#  define isnanf rpl_isnanf
+_GL_EXTERN_C int isnanf (float x);
+# endif
+#endif
+
+#if 1
+/* Test for NaN for 'double' numbers.
+   This function is a gnulib extension, unlike isnan() which applied only
+   to 'double' numbers earlier but now is a type-generic macro.  */
+# if 1
+/* The original <math.h> included above provides a declaration of isnan
+   macro.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnand
+#   define isnand(x) __builtin_isnan ((double)(x))
+#  else
+#   undef isnand
+#   define isnand(x) isnan ((double)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnand
+#  define isnand rpl_isnand
+_GL_EXTERN_C int isnand (double x);
+# endif
+#endif
+
+#if 1
+/* Test for NaN for 'long double' numbers.  */
+# if 0
+/* The original <math.h> included above provides a declaration of isnan
+   macro or (older) isnanl function.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnanl
+#   define isnanl(x) __builtin_isnanl ((long double)(x))
+#  elif defined isnan
+#   undef isnanl
+#   define isnanl(x) isnan ((long double)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnanl
+#  define isnanl rpl_isnanl
+_GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST;
+# endif
+#endif
+
+/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL!  */
+#if 1
+# if 1
+/* We can't just use the isnanf macro (e.g.) as exposed by
+   isnanf.h (e.g.) here, because those may end up being macros
+   that recursively expand back to isnan.  So use the gnulib
+   replacements for them directly. */
+#  if 1 && __GNUC__ >= 4
+#   define gl_isnan_f(x) __builtin_isnanf ((float)(x))
+#  else
+_GL_EXTERN_C int rpl_isnanf (float x);
+#   define gl_isnan_f(x) rpl_isnanf (x)
+#  endif
+#  if 1 && __GNUC__ >= 4
+#   define gl_isnan_d(x) __builtin_isnan ((double)(x))
+#  else
+_GL_EXTERN_C int rpl_isnand (double x);
+#   define gl_isnan_d(x) rpl_isnand (x)
+#  endif
+#  if 0 && __GNUC__ >= 4
+#   define gl_isnan_l(x) __builtin_isnanl ((long double)(x))
+#  else
+_GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
+#   define gl_isnan_l(x) rpl_isnanl (x)
+#  endif
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
+    sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
+    gl_isnan_f (x))
+# elif __GNUC__ >= 4
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \
+    sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \
+    __builtin_isnanf ((float)(x)))
+# endif
+# ifdef __cplusplus
+#  ifdef isnan
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
+#   undef isnan
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan)
+#  endif
+# else
+/* Ensure isnan is a macro.  */
+#  ifndef isnan
+#   define isnan isnan
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isnan
+_GL_WARN_REAL_FLOATING_DECL (isnan);
+#  undef isnan
+#  define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x)
+# endif
+#endif
+
+
+#if 1
+# if 0
+#  undef signbit
+   /* GCC 4.0 and newer provides three built-ins for signbit.  */
+#  define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
+    __builtin_signbitf (x))
+# endif
+# if 0
+#  undef signbit
+_GL_EXTERN_C int gl_signbitf (float arg);
+_GL_EXTERN_C int gl_signbitd (double arg);
+_GL_EXTERN_C int gl_signbitl (long double arg);
+#  if __GNUC__ >= 2 && !defined __STRICT_ANSI__
+#   define _GL_NUM_UINT_WORDS(type) \
+      ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+#   if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
+#    define gl_signbitf_OPTIMIZED_MACRO
+#    define gl_signbitf(arg) \
+       ({ union { float _value;                                         \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (float)];       \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;          \
+        })
+#   endif
+#   if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
+#    define gl_signbitd_OPTIMIZED_MACRO
+#    define gl_signbitd(arg) \
+       ({ union { double _value;                                        \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (double)];      \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;          \
+        })
+#   endif
+#   if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
+#    define gl_signbitl_OPTIMIZED_MACRO
+#    define gl_signbitl(arg) \
+       ({ union { long double _value;                                   \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;        \
+        })
+#   endif
+#  endif
+#  define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? gl_signbitd (x) : \
+    gl_signbitf (x))
+# endif
+# ifdef __cplusplus
+#  ifdef signbit
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
+#   undef signbit
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined signbit
+_GL_WARN_REAL_FLOATING_DECL (signbit);
+#  undef signbit
+#  define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x)
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_MATH_H */
+#endif /* _GL_MATH_H */
diff --git a/darwin-lib/sched.h b/darwin-lib/sched.h
new file mode 100644
index 0000000..067de9a
--- /dev/null
+++ b/darwin-lib/sched.h
@@ -0,0 +1,58 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Replacement <sched.h> for platforms that lack it.
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_SCHED_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <sched.h>
+#endif
+
+#ifndef _GL_SCHED_H
+#define _GL_SCHED_H
+
+/* Get pid_t.
+   This is needed on glibc 2.11 (see
+   glibc bug <http://sourceware.org/bugzilla/show_bug.cgi?id=13198>)
+   and Mac OS X 10.5.  */
+#include <sys/types.h>
+
+#if !1
+
+# if !GNULIB_defined_struct_sched_param
+struct sched_param
+{
+  int sched_priority;
+};
+#  define GNULIB_defined_struct_sched_param 1
+# endif
+
+#endif
+
+#if !(defined SCHED_FIFO && defined SCHED_RR && defined SCHED_OTHER)
+# define SCHED_FIFO   1
+# define SCHED_RR     2
+# define SCHED_OTHER  0
+#endif
+
+#endif /* _GL_SCHED_H */
+#endif /* _GL_SCHED_H */
diff --git a/darwin-lib/signal.h b/darwin-lib/signal.h
new file mode 100644
index 0000000..a39383f
--- /dev/null
+++ b/darwin-lib/signal.h
@@ -0,0 +1,759 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <signal.h>.
+
+   Copyright (C) 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T)
+/* Special invocation convention:
+   - Inside glibc header files.
+   - On glibc systems we have a sequence of nested includes
+     <signal.h> -> <ucontext.h> -> <signal.h>.
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.
+   - On glibc systems with GCC 4.3 we have a sequence of nested includes
+     <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>.
+     In this situation, some of the functions are not yet declared, therefore
+     we cannot provide the C++ aliases.  */
+
+# include_next <signal.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_SIGNAL_H
+
+#define _GL_ALREADY_INCLUDING_SIGNAL_H
+
+/* Define pid_t, uid_t.
+   Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.
+   On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes
+   us; so include <sys/types.h> now, before the second inclusion guard.  */
+#include <sys/types.h>
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <signal.h>
+
+#undef _GL_ALREADY_INCLUDING_SIGNAL_H
+
+#ifndef _GL_SIGNAL_H
+#define _GL_SIGNAL_H
+
+/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 declare
+   pthread_sigmask in <pthread.h>, not in <signal.h>.
+   But avoid namespace pollution on glibc systems.*/
+#if (0 || defined GNULIB_POSIXCHECK) \
+    && ((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ || defined __sun) \
+    && ! defined __GLIBC__
+# include <pthread.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* On AIX, sig_atomic_t already includes volatile.  C99 requires that
+   'volatile sig_atomic_t' ignore the extra modifier, but C89 did not.
+   Hence, redefine this to a non-volatile type as needed.  */
+#if ! 1
+# if !GNULIB_defined_sig_atomic_t
+typedef int rpl_sig_atomic_t;
+#  undef sig_atomic_t
+#  define sig_atomic_t rpl_sig_atomic_t
+#  define GNULIB_defined_sig_atomic_t 1
+# endif
+#endif
+
+/* A set or mask of signals.  */
+#if !1
+# if !GNULIB_defined_sigset_t
+typedef unsigned int sigset_t;
+#  define GNULIB_defined_sigset_t 1
+# endif
+#endif
+
+/* Define sighandler_t, the type of signal handlers.  A GNU extension.  */
+#if !0
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_sighandler_t
+typedef void (*sighandler_t) (int);
+#  define GNULIB_defined_sighandler_t 1
+# endif
+# ifdef __cplusplus
+}
+# endif
+#endif
+
+
+#if 0
+# ifndef SIGPIPE
+/* Define SIGPIPE to a value that does not overlap with other signals.  */
+#  define SIGPIPE 13
+#  define GNULIB_defined_SIGPIPE 1
+/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask',
+   'write', 'stdio'.  */
+# endif
+#endif
+
+
+/* Maximum signal number + 1.  */
+#ifndef NSIG
+# if defined __TANDEM
+#  define NSIG 32
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pthread_sigmask
+#   define pthread_sigmask rpl_pthread_sigmask
+#  endif
+_GL_FUNCDECL_RPL (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+_GL_CXXALIAS_RPL (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+#  endif
+_GL_CXXALIAS_SYS (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+# endif
+_GL_CXXALIASWARN (pthread_sigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef pthread_sigmask
+# if HAVE_RAW_DECL_PTHREAD_SIGMASK
+_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - "
+                 "use gnulib module pthread_sigmask for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef raise
+#   define raise rpl_raise
+#  endif
+_GL_FUNCDECL_RPL (raise, int, (int sig));
+_GL_CXXALIAS_RPL (raise, int, (int sig));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (raise, int, (int sig));
+#  endif
+_GL_CXXALIAS_SYS (raise, int, (int sig));
+# endif
+_GL_CXXALIASWARN (raise);
+#elif defined GNULIB_POSIXCHECK
+# undef raise
+/* Assume raise is always declared.  */
+_GL_WARN_ON_USE (raise, "raise can crash on native Windows - "
+                 "use gnulib module raise for portability");
+#endif
+
+
+#if 1
+# if !1
+
+#  ifndef GNULIB_defined_signal_blocking
+#   define GNULIB_defined_signal_blocking 1
+#  endif
+
+/* Maximum signal number + 1.  */
+#  ifndef NSIG
+#   define NSIG 32
+#  endif
+
+/* This code supports only 32 signals.  */
+#  if !GNULIB_defined_verify_NSIG_constraint
+typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1];
+#   define GNULIB_defined_verify_NSIG_constraint 1
+#  endif
+
+# endif
+
+/* Test whether a given signal is contained in a signal set.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigismember
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig)
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigismember);
+
+/* Initialize a signal set to the empty set.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigemptyset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigemptyset);
+
+/* Add a signal to a signal set.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigaddset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig)
+                                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigaddset);
+
+/* Remove a signal from a signal set.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigdelset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig)
+                                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigdelset);
+
+/* Fill a signal set with all possible signals.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigfillset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigfillset);
+
+/* Return the set of those blocked signals that are pending.  */
+# if !1
+_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigpending);
+
+/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET.
+   Then, if SET is not NULL, affect the current set of blocked signals by
+   combining it with *SET as indicated in OPERATION.
+   In this implementation, you are not allowed to change a signal handler
+   while the signal is blocked.  */
+# if !1
+#  define SIG_BLOCK   0  /* blocked_set = blocked_set | *set; */
+#  define SIG_SETMASK 1  /* blocked_set = *set; */
+#  define SIG_UNBLOCK 2  /* blocked_set = blocked_set & ~*set; */
+_GL_FUNCDECL_SYS (sigprocmask, int,
+                  (int operation, const sigset_t *set, sigset_t *old_set));
+# endif
+_GL_CXXALIAS_SYS (sigprocmask, int,
+                  (int operation, const sigset_t *set, sigset_t *old_set));
+_GL_CXXALIASWARN (sigprocmask);
+
+/* Install the handler FUNC for signal SIG, and return the previous
+   handler.  */
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_function_taking_int_returning_void_t
+typedef void (*_gl_function_taking_int_returning_void_t) (int);
+#  define GNULIB_defined_function_taking_int_returning_void_t 1
+# endif
+# ifdef __cplusplus
+}
+# endif
+# if !1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define signal rpl_signal
+#  endif
+_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+# else
+_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+# endif
+_GL_CXXALIASWARN (signal);
+
+# if !1 && GNULIB_defined_SIGPIPE
+/* Raise signal SIGPIPE.  */
+_GL_EXTERN_C int _gl_raise_SIGPIPE (void);
+# endif
+
+#elif defined GNULIB_POSIXCHECK
+# undef sigaddset
+# if HAVE_RAW_DECL_SIGADDSET
+_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigdelset
+# if HAVE_RAW_DECL_SIGDELSET
+_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigemptyset
+# if HAVE_RAW_DECL_SIGEMPTYSET
+_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigfillset
+# if HAVE_RAW_DECL_SIGFILLSET
+_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigismember
+# if HAVE_RAW_DECL_SIGISMEMBER
+_GL_WARN_ON_USE (sigismember, "sigismember is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigpending
+# if HAVE_RAW_DECL_SIGPENDING
+_GL_WARN_ON_USE (sigpending, "sigpending is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigprocmask
+# if HAVE_RAW_DECL_SIGPROCMASK
+_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+#endif /* 1 */
+
+
+#if 1
+# if !1
+
+#  if !1
+
+#   if !GNULIB_defined_siginfo_types
+
+/* Present to allow compilation, but unsupported by gnulib.  */
+union sigval
+{
+  int sival_int;
+  void *sival_ptr;
+};
+
+/* Present to allow compilation, but unsupported by gnulib.  */
+struct siginfo_t
+{
+  int si_signo;
+  int si_code;
+  int si_errno;
+  pid_t si_pid;
+  uid_t si_uid;
+  void *si_addr;
+  int si_status;
+  long si_band;
+  union sigval si_value;
+};
+typedef struct siginfo_t siginfo_t;
+
+#    define GNULIB_defined_siginfo_types 1
+#   endif
+
+#  endif /* !1 */
+
+/* We assume that platforms which lack the sigaction() function also lack
+   the 'struct sigaction' type, and vice versa.  */
+
+#  if !GNULIB_defined_struct_sigaction
+
+struct sigaction
+{
+  union
+  {
+    void (*_sa_handler) (int);
+    /* Present to allow compilation, but unsupported by gnulib.  POSIX
+       says that implementations may, but not must, make sa_sigaction
+       overlap with sa_handler, but we know of no implementation where
+       they do not overlap.  */
+    void (*_sa_sigaction) (int, siginfo_t *, void *);
+  } _sa_func;
+  sigset_t sa_mask;
+  /* Not all POSIX flags are supported.  */
+  int sa_flags;
+};
+#   define sa_handler _sa_func._sa_handler
+#   define sa_sigaction _sa_func._sa_sigaction
+/* Unsupported flags are not present.  */
+#   define SA_RESETHAND 1
+#   define SA_NODEFER 2
+#   define SA_RESTART 4
+
+#   define GNULIB_defined_struct_sigaction 1
+#  endif
+
+_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict,
+                                   struct sigaction *restrict));
+
+# elif !1
+
+#  define sa_sigaction sa_handler
+
+# endif /* !1, !1 */
+
+_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict,
+                                   struct sigaction *restrict));
+_GL_CXXALIASWARN (sigaction);
+
+#elif defined GNULIB_POSIXCHECK
+# undef sigaction
+# if HAVE_RAW_DECL_SIGACTION
+_GL_WARN_ON_USE (sigaction, "sigaction is unportable - "
+                 "use the gnulib module sigaction for portability");
+# endif
+#endif
+
+/* Some systems don't have SA_NODEFER.  */
+#ifndef SA_NODEFER
+# define SA_NODEFER 0
+#endif
+
+
+#endif /* _GL_SIGNAL_H */
+#endif /* _GL_SIGNAL_H */
+#endif
diff --git a/darwin-lib/spawn.h b/darwin-lib/spawn.h
new file mode 100644
index 0000000..9182ed2
--- /dev/null
+++ b/darwin-lib/spawn.h
@@ -0,0 +1,1193 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Definitions for POSIX spawn interface.
+   Copyright (C) 2000, 2003-2004, 2008-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_SPAWN_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <spawn.h>
+#endif
+
+#ifndef _GL_SPAWN_H
+#define _GL_SPAWN_H
+
+/* Get definitions of 'struct sched_param' and 'sigset_t'.
+   But avoid namespace pollution on glibc systems.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <sched.h>
+# include <signal.h>
+#endif
+
+#include <sys/types.h>
+
+#ifndef __THROW
+# define __THROW
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".
+   Other compilers use __restrict, __restrict__, and _Restrict, and
+   'configure' might #define 'restrict' to those words, so pick a
+   different name.  */
+#ifndef _Restrict_
+# if 199901L <= __STDC_VERSION__
+#  define _Restrict_ restrict
+# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
+#  define _Restrict_ __restrict
+# else
+#  define _Restrict_
+# endif
+#endif
+/* gcc 3.1 and up support the [restrict] syntax.  Don't trust
+   sys/cdefs.h's definition of __restrict_arr, though, as it
+   mishandles gcc -ansi -pedantic.  */
+#ifndef _Restrict_arr_
+# if ((199901L <= __STDC_VERSION__                                      \
+       || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__))     \
+           && !defined __STRICT_ANSI__))                                        \
+      && !defined __GNUG__)
+#  define _Restrict_arr_ _Restrict_
+# else
+#  define _Restrict_arr_
+# endif
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Data structure to contain attributes for thread creation.  */
+#if 0
+# define posix_spawnattr_t rpl_posix_spawnattr_t
+#endif
+#if 0 || !1
+# if !GNULIB_defined_posix_spawnattr_t
+typedef struct
+{
+  short int _flags;
+  pid_t _pgrp;
+  sigset_t _sd;
+  sigset_t _ss;
+  struct sched_param _sp;
+  int _policy;
+  int __pad[16];
+} posix_spawnattr_t;
+#  define GNULIB_defined_posix_spawnattr_t 1
+# endif
+#endif
+
+
+/* Data structure to contain information about the actions to be
+   performed in the new process with respect to file descriptors.  */
+#if 0
+# define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t
+#endif
+#if 0 || !1
+# if !GNULIB_defined_posix_spawn_file_actions_t
+typedef struct
+{
+  int _allocated;
+  int _used;
+  struct __spawn_action *_actions;
+  int __pad[16];
+} posix_spawn_file_actions_t;
+#  define GNULIB_defined_posix_spawn_file_actions_t 1
+# endif
+#endif
+
+
+/* Flags to be set in the 'posix_spawnattr_t'.  */
+#if 1
+/* Use the values from the system, but provide the missing ones.  */
+# ifndef POSIX_SPAWN_SETSCHEDPARAM
+#  define POSIX_SPAWN_SETSCHEDPARAM 0
+# endif
+# ifndef POSIX_SPAWN_SETSCHEDULER
+#  define POSIX_SPAWN_SETSCHEDULER 0
+# endif
+#else
+# if 0
+/* Use the values from the system, for better compatibility.  */
+/* But this implementation does not support AIX extensions.  */
+#  undef POSIX_SPAWN_FORK_HANDLERS
+# else
+#  define POSIX_SPAWN_RESETIDS           0x01
+#  define POSIX_SPAWN_SETPGROUP          0x02
+#  define POSIX_SPAWN_SETSIGDEF          0x04
+#  define POSIX_SPAWN_SETSIGMASK         0x08
+#  define POSIX_SPAWN_SETSCHEDPARAM      0x10
+#  define POSIX_SPAWN_SETSCHEDULER       0x20
+# endif
+#endif
+/* A GNU extension.  Use the next free bit position.  */
+#define POSIX_SPAWN_USEVFORK \
+  ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1)                     \
+    | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1)                 \
+    | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1)                 \
+    | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1)               \
+    | POSIX_SPAWN_SETSCHEDPARAM                                           \
+    | (POSIX_SPAWN_SETSCHEDPARAM > 0 ? POSIX_SPAWN_SETSCHEDPARAM - 1 : 0) \
+    | POSIX_SPAWN_SETSCHEDULER                                            \
+    | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0))  \
+   + 1)
+#if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap
+typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap
+            [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP
+                | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK
+                | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)
+               & POSIX_SPAWN_USEVFORK)
+              == 0)
+             ? 1 : -1];
+# define GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap 1
+#endif
+
+
+#if 0
+/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
+   Before running the process perform the actions described in FILE-ACTIONS.
+
+   This function is a possible cancellation points and therefore not
+   marked with __THROW. */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn rpl_posix_spawn
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+_GL_CXXALIAS_RPL (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_]));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_]));
+# endif
+_GL_CXXALIASWARN (posix_spawn);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn
+# if HAVE_RAW_DECL_POSIX_SPAWN
+_GL_WARN_ON_USE (posix_spawn, "posix_spawn is unportable - "
+                 "use gnulib module posix_spawn for portability");
+# endif
+#endif
+
+#if 1
+/* Similar to 'posix_spawn' but search for FILE in the PATH.
+
+   This function is a possible cancellation points and therefore not
+   marked with __THROW.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnp rpl_posix_spawnp
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+_GL_CXXALIAS_RPL (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[]));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[]));
+# endif
+_GL_CXXALIASWARN (posix_spawnp);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnp
+# if HAVE_RAW_DECL_POSIX_SPAWNP
+_GL_WARN_ON_USE (posix_spawnp, "posix_spawnp is unportable - "
+                 "use gnulib module posix_spawnp for portability");
+# endif
+#endif
+
+
+#if 1
+/* Initialize data structure with attributes for 'spawn' to default values.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_init rpl_posix_spawnattr_init
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)
+                                             __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)
+                                             __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_init);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_init
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT
+_GL_WARN_ON_USE (posix_spawnattr_init, "posix_spawnattr_init is unportable - "
+                 "use gnulib module posix_spawnattr_init for portability");
+# endif
+#endif
+
+#if 1
+/* Free resources associated with ATTR.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_destroy rpl_posix_spawnattr_destroy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)
+                                                __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)
+                                                __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_destroy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_destroy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY
+_GL_WARN_ON_USE (posix_spawnattr_destroy,
+                 "posix_spawnattr_destroy is unportable - "
+                 "use gnulib module posix_spawnattr_destroy for portability");
+# endif
+#endif
+
+#if 0
+/* Store signal mask for signals with default handling from ATTR in
+   SIGDEFAULT.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getsigdefault);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigdefault
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT
+_GL_WARN_ON_USE (posix_spawnattr_getsigdefault,
+                 "posix_spawnattr_getsigdefault is unportable - "
+                 "use gnulib module posix_spawnattr_getsigdefault for portability");
+# endif
+#endif
+
+#if 0
+/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setsigdefault);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setsigdefault
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT
+_GL_WARN_ON_USE (posix_spawnattr_setsigdefault,
+                 "posix_spawnattr_setsigdefault is unportable - "
+                 "use gnulib module posix_spawnattr_setsigdefault for portability");
+# endif
+#endif
+
+#if 0
+/* Store signal mask for the new process from ATTR in SIGMASK.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getsigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigmask
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK
+_GL_WARN_ON_USE (posix_spawnattr_getsigmask,
+                 "posix_spawnattr_getsigmask is unportable - "
+                 "use gnulib module posix_spawnattr_getsigmask for portability");
+# endif
+#endif
+
+#if 1
+/* Set signal mask for the new process in ATTR to SIGMASK.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setsigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setsigmask
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK
+_GL_WARN_ON_USE (posix_spawnattr_setsigmask,
+                 "posix_spawnattr_setsigmask is unportable - "
+                 "use gnulib module posix_spawnattr_setsigmask for portability");
+# endif
+#endif
+
+#if 0
+/* Get flag word from the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getflags rpl_posix_spawnattr_getflags
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getflags);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getflags
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS
+_GL_WARN_ON_USE (posix_spawnattr_getflags,
+                 "posix_spawnattr_getflags is unportable - "
+                 "use gnulib module posix_spawnattr_getflags for portability");
+# endif
+#endif
+
+#if 1
+/* Store flags in the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setflags rpl_posix_spawnattr_setflags
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setflags);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setflags
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS
+_GL_WARN_ON_USE (posix_spawnattr_setflags,
+                 "posix_spawnattr_setflags is unportable - "
+                 "use gnulib module posix_spawnattr_setflags for portability");
+# endif
+#endif
+
+#if 0
+/* Get process group ID from the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getpgroup);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getpgroup
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP
+_GL_WARN_ON_USE (posix_spawnattr_getpgroup,
+                 "posix_spawnattr_getpgroup is unportable - "
+                 "use gnulib module posix_spawnattr_getpgroup for portability");
+# endif
+#endif
+
+#if 0
+/* Store process group ID in the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setpgroup);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setpgroup
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP
+_GL_WARN_ON_USE (posix_spawnattr_setpgroup,
+                 "posix_spawnattr_setpgroup is unportable - "
+                 "use gnulib module posix_spawnattr_setpgroup for portability");
+# endif
+#endif
+
+#if 0
+/* Get scheduling policy from the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy));
+# else
+#  if !1 || POSIX_SPAWN_SETSCHEDULER == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getschedpolicy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getschedpolicy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY
+_GL_WARN_ON_USE (posix_spawnattr_getschedpolicy,
+                 "posix_spawnattr_getschedpolicy is unportable - "
+                 "use gnulib module posix_spawnattr_getschedpolicy for portability");
+# endif
+#endif
+
+#if 0
+/* Store scheduling policy in the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy));
+# else
+#  if !1 || POSIX_SPAWN_SETSCHEDULER == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setschedpolicy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setschedpolicy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY
+_GL_WARN_ON_USE (posix_spawnattr_setschedpolicy,
+                 "posix_spawnattr_setschedpolicy is unportable - "
+                 "use gnulib module posix_spawnattr_setschedpolicy for portability");
+# endif
+#endif
+
+#if 0
+/* Get scheduling parameters from the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam));
+# else
+#  if !1 || POSIX_SPAWN_SETSCHEDPARAM == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getschedparam);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getschedparam
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM
+_GL_WARN_ON_USE (posix_spawnattr_getschedparam,
+                 "posix_spawnattr_getschedparam is unportable - "
+                 "use gnulib module posix_spawnattr_getschedparam for portability");
+# endif
+#endif
+
+#if 0
+/* Store scheduling parameters in the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam));
+# else
+#  if !1 || POSIX_SPAWN_SETSCHEDPARAM == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setschedparam);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setschedparam
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM
+_GL_WARN_ON_USE (posix_spawnattr_setschedparam,
+                 "posix_spawnattr_setschedparam is unportable - "
+                 "use gnulib module posix_spawnattr_setschedparam for portability");
+# endif
+#endif
+
+
+#if 1
+/* Initialize data structure for file attribute for 'spawn' call.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_init);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_init
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT
+_GL_WARN_ON_USE (posix_spawn_file_actions_init,
+                 "posix_spawn_file_actions_init is unportable - "
+                 "use gnulib module posix_spawn_file_actions_init for portability");
+# endif
+#endif
+
+#if 1
+/* Free resources associated with FILE-ACTIONS.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_destroy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_destroy
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY
+_GL_WARN_ON_USE (posix_spawn_file_actions_destroy,
+                 "posix_spawn_file_actions_destroy is unportable - "
+                 "use gnulib module posix_spawn_file_actions_destroy for portability");
+# endif
+#endif
+
+#if 1
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'open' for the given file during the 'spawn' call.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode)
+                  __THROW _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode)
+                  __THROW _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_addopen);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addopen
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+_GL_WARN_ON_USE (posix_spawn_file_actions_addopen,
+                 "posix_spawn_file_actions_addopen is unportable - "
+                 "use gnulib module posix_spawn_file_actions_addopen for portability");
+# endif
+#endif
+
+#if 1
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'close' for the given file descriptor during the 'spawn' call.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_addclose);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addclose
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+_GL_WARN_ON_USE (posix_spawn_file_actions_addclose,
+                 "posix_spawn_file_actions_addclose is unportable - "
+                 "use gnulib module posix_spawn_file_actions_addclose for portability");
+# endif
+#endif
+
+#if 1
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'dup2' for the given file descriptors during the 'spawn' call.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_adddup2);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_adddup2
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
+_GL_WARN_ON_USE (posix_spawn_file_actions_adddup2,
+                 "posix_spawn_file_actions_adddup2 is unportable - "
+                 "use gnulib module posix_spawn_file_actions_adddup2 for portability");
+# endif
+#endif
+
+
+#endif /* _GL_SPAWN_H */
+#endif /* _GL_SPAWN_H */
diff --git a/darwin-lib/stdint.h b/darwin-lib/stdint.h
new file mode 100644
index 0000000..df6f556
--- /dev/null
+++ b/darwin-lib/stdint.h
@@ -0,0 +1,637 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 2001-2002, 2004-2012 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
+   This file is part of gnulib.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ */
+
+#ifndef _GL_STDINT_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* When including a system file that in turn includes <inttypes.h>,
+   use the system <inttypes.h>, not our substitute.  This avoids
+   problems with (for example) VMS, whose <sys/bitypes.h> includes
+   <inttypes.h>.  */
+#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* On Android (Bionic libc), <sys/types.h> includes this file before
+   having defined 'time_t'.  Therefore in this case avoid including
+   other system header files; just include the system's <stdint.h>.
+   Ideally we should test __BIONIC__ here, but it is only defined after
+   <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
+#if defined __ANDROID__ \
+    && defined _SYS_TYPES_H_ && !defined _SSIZE_T_DEFINED_
+# include_next <stdint.h>
+#else
+
+/* Get those types that are already defined in other system include
+   files, so that we can "#define int8_t signed char" below without
+   worrying about a later system include file containing a "typedef
+   signed char int8_t;" that will get messed up by our macro.  Our
+   macros should all be consistent with the system versions, except
+   for the "fast" types and macros, which we recommend against using
+   in public interfaces due to compiler differences.  */
+
+#if 1
+# if defined __sgi && ! defined __c99
+   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
+      with "This header file is to be used only for c99 mode compilations"
+      diagnostics.  */
+#  define __STDINT_H__
+# endif
+
+  /* Some pre-C++11 <stdint.h> implementations need this.  */
+# ifdef __cplusplus
+#  ifndef __STDC_CONSTANT_MACROS
+#   define __STDC_CONSTANT_MACROS 1
+#  endif
+#  ifndef __STDC_LIMIT_MACROS
+#   define __STDC_LIMIT_MACROS 1
+#  endif
+# endif
+
+  /* Other systems may have an incomplete or buggy <stdint.h>.
+     Include it before <inttypes.h>, since any "#include <stdint.h>"
+     in <inttypes.h> would reinclude us, skipping our contents because
+     _GL_STDINT_H is defined.
+     The include_next requires a split double-inclusion guard.  */
+# include_next <stdint.h>
+#endif
+
+#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _GL_STDINT_H
+
+/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
+   Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
+   relies on the system <stdint.h> definitions, so include
+   <sys/types.h> after <stdint.h>.  */
+#if 1 && ! defined _AIX
+# include <sys/types.h>
+#endif
+
+/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
+   LONG_MIN, LONG_MAX, ULONG_MAX.  */
+#include <limits.h>
+
+#if 1
+  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
+     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+     <inttypes.h> also defines intptr_t and uintptr_t.  */
+# include <inttypes.h>
+#elif 0
+  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
+     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
+# include <sys/inttypes.h>
+#endif
+
+#if 0 && ! defined __BIT_TYPES_DEFINED__
+  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
+     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
+     included by <sys/types.h>.  */
+# include <sys/bitypes.h>
+#endif
+
+#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for an integer type under the usual assumption.
+   Return an unspecified value if BITS == 0, adding a check to pacify
+   picky compilers.  */
+
+#define _STDINT_MIN(signed, bits, zero) \
+  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
+
+#define _STDINT_MAX(signed, bits, zero) \
+  ((signed) \
+   ? ~ _STDINT_MIN (signed, bits, zero) \
+   : /* The expression for the unsigned case.  The subtraction of (signed) \
+        is a nop in the unsigned case and avoids "signed integer overflow" \
+        warnings in the signed case.  */ \
+     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
+
+#if !GNULIB_defined_stdint_types
+
+/* 7.18.1.1. Exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef int8_t
+#undef uint8_t
+typedef signed char gl_int8_t;
+typedef unsigned char gl_uint8_t;
+#define int8_t gl_int8_t
+#define uint8_t gl_uint8_t
+
+#undef int16_t
+#undef uint16_t
+typedef short int gl_int16_t;
+typedef unsigned short int gl_uint16_t;
+#define int16_t gl_int16_t
+#define uint16_t gl_uint16_t
+
+#undef int32_t
+#undef uint32_t
+typedef int gl_int32_t;
+typedef unsigned int gl_uint32_t;
+#define int32_t gl_int32_t
+#define uint32_t gl_uint32_t
+
+/* If the system defines INT64_MAX, assume int64_t works.  That way,
+   if the underlying platform defines int64_t to be a 64-bit long long
+   int, the code below won't mistakenly define it to be a 64-bit long
+   int, which would mess up C++ name mangling.  We must use #ifdef
+   rather than #if, to avoid an error with HP-UX 10.20 cc.  */
+
+#ifdef INT64_MAX
+# define GL_INT64_T
+#else
+/* Do not undefine int64_t if gnulib is not being used with 64-bit
+   types, since otherwise it breaks platforms like Tandem/NSK.  */
+# if LONG_MAX >> 31 >> 31 == 1
+#  undef int64_t
+typedef long int gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# elif defined _MSC_VER
+#  undef int64_t
+typedef __int64 gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# elif 1
+#  undef int64_t
+typedef long long int gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# endif
+#endif
+
+#ifdef UINT64_MAX
+# define GL_UINT64_T
+#else
+# if ULONG_MAX >> 31 >> 31 >> 1 == 1
+#  undef uint64_t
+typedef unsigned long int gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# elif defined _MSC_VER
+#  undef uint64_t
+typedef unsigned __int64 gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# elif 1
+#  undef uint64_t
+typedef unsigned long long int gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# endif
+#endif
+
+/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
+#define _UINT8_T
+#define _UINT32_T
+#define _UINT64_T
+
+
+/* 7.18.1.2. Minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef int_least8_t
+#undef uint_least8_t
+#undef int_least16_t
+#undef uint_least16_t
+#undef int_least32_t
+#undef uint_least32_t
+#undef int_least64_t
+#undef uint_least64_t
+#define int_least8_t int8_t
+#define uint_least8_t uint8_t
+#define int_least16_t int16_t
+#define uint_least16_t uint16_t
+#define int_least32_t int32_t
+#define uint_least32_t uint32_t
+#ifdef GL_INT64_T
+# define int_least64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_least64_t uint64_t
+#endif
+
+/* 7.18.1.3. Fastest minimum-width integer types */
+
+/* Note: Other <stdint.h> substitutes may define these types differently.
+   It is not recommended to use these types in public header files. */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  The following code normally
+   uses types consistent with glibc, as that lessens the chance of
+   incompatibility with older GNU hosts.  */
+
+#undef int_fast8_t
+#undef uint_fast8_t
+#undef int_fast16_t
+#undef uint_fast16_t
+#undef int_fast32_t
+#undef uint_fast32_t
+#undef int_fast64_t
+#undef uint_fast64_t
+typedef signed char gl_int_fast8_t;
+typedef unsigned char gl_uint_fast8_t;
+
+#ifdef __sun
+/* Define types compatible with SunOS 5.10, so that code compiled under
+   earlier SunOS versions works with code compiled under SunOS 5.10.  */
+typedef int gl_int_fast32_t;
+typedef unsigned int gl_uint_fast32_t;
+#else
+typedef long int gl_int_fast32_t;
+typedef unsigned long int gl_uint_fast32_t;
+#endif
+typedef gl_int_fast32_t gl_int_fast16_t;
+typedef gl_uint_fast32_t gl_uint_fast16_t;
+
+#define int_fast8_t gl_int_fast8_t
+#define uint_fast8_t gl_uint_fast8_t
+#define int_fast16_t gl_int_fast16_t
+#define uint_fast16_t gl_uint_fast16_t
+#define int_fast32_t gl_int_fast32_t
+#define uint_fast32_t gl_uint_fast32_t
+#ifdef GL_INT64_T
+# define int_fast64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_fast64_t uint64_t
+#endif
+
+/* 7.18.1.4. Integer types capable of holding object pointers */
+
+#undef intptr_t
+#undef uintptr_t
+typedef long int gl_intptr_t;
+typedef unsigned long int gl_uintptr_t;
+#define intptr_t gl_intptr_t
+#define uintptr_t gl_uintptr_t
+
+/* 7.18.1.5. Greatest-width integer types */
+
+/* Note: These types are compiler dependent. It may be unwise to use them in
+   public header files. */
+
+/* If the system defines INTMAX_MAX, assume that intmax_t works, and
+   similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
+   assuming one type where another is used by the system.  */
+
+#ifndef INTMAX_MAX
+# undef INTMAX_C
+# undef intmax_t
+# if 1 && LONG_MAX >> 30 == 1
+typedef long long int gl_intmax_t;
+#  define intmax_t gl_intmax_t
+# elif defined GL_INT64_T
+#  define intmax_t int64_t
+# else
+typedef long int gl_intmax_t;
+#  define intmax_t gl_intmax_t
+# endif
+#endif
+
+#ifndef UINTMAX_MAX
+# undef UINTMAX_C
+# undef uintmax_t
+# if 1 && ULONG_MAX >> 31 == 1
+typedef unsigned long long int gl_uintmax_t;
+#  define uintmax_t gl_uintmax_t
+# elif defined GL_UINT64_T
+#  define uintmax_t uint64_t
+# else
+typedef unsigned long int gl_uintmax_t;
+#  define uintmax_t gl_uintmax_t
+# endif
+#endif
+
+/* Verify that intmax_t and uintmax_t have the same size.  Too much code
+   breaks if this is not the case.  If this check fails, the reason is likely
+   to be found in the autoconf macros.  */
+typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
+                                ? 1 : -1];
+
+#define GNULIB_defined_stdint_types 1
+#endif /* !GNULIB_defined_stdint_types */
+
+/* 7.18.2. Limits of specified-width integer types */
+
+/* 7.18.2.1. Limits of exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef INT8_MIN
+#undef INT8_MAX
+#undef UINT8_MAX
+#define INT8_MIN  (~ INT8_MAX)
+#define INT8_MAX  127
+#define UINT8_MAX  255
+
+#undef INT16_MIN
+#undef INT16_MAX
+#undef UINT16_MAX
+#define INT16_MIN  (~ INT16_MAX)
+#define INT16_MAX  32767
+#define UINT16_MAX  65535
+
+#undef INT32_MIN
+#undef INT32_MAX
+#undef UINT32_MAX
+#define INT32_MIN  (~ INT32_MAX)
+#define INT32_MAX  2147483647
+#define UINT32_MAX  4294967295U
+
+#if defined GL_INT64_T && ! defined INT64_MAX
+/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
+   evaluates the latter incorrectly in preprocessor expressions.  */
+# define INT64_MIN  (- INTMAX_C (1) << 63)
+# define INT64_MAX  INTMAX_C (9223372036854775807)
+#endif
+
+#if defined GL_UINT64_T && ! defined UINT64_MAX
+# define UINT64_MAX  UINTMAX_C (18446744073709551615)
+#endif
+
+/* 7.18.2.2. Limits of minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef INT_LEAST8_MIN
+#undef INT_LEAST8_MAX
+#undef UINT_LEAST8_MAX
+#define INT_LEAST8_MIN  INT8_MIN
+#define INT_LEAST8_MAX  INT8_MAX
+#define UINT_LEAST8_MAX  UINT8_MAX
+
+#undef INT_LEAST16_MIN
+#undef INT_LEAST16_MAX
+#undef UINT_LEAST16_MAX
+#define INT_LEAST16_MIN  INT16_MIN
+#define INT_LEAST16_MAX  INT16_MAX
+#define UINT_LEAST16_MAX  UINT16_MAX
+
+#undef INT_LEAST32_MIN
+#undef INT_LEAST32_MAX
+#undef UINT_LEAST32_MAX
+#define INT_LEAST32_MIN  INT32_MIN
+#define INT_LEAST32_MAX  INT32_MAX
+#define UINT_LEAST32_MAX  UINT32_MAX
+
+#undef INT_LEAST64_MIN
+#undef INT_LEAST64_MAX
+#ifdef GL_INT64_T
+# define INT_LEAST64_MIN  INT64_MIN
+# define INT_LEAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_LEAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_LEAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.3. Limits of fastest minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  */
+
+#undef INT_FAST8_MIN
+#undef INT_FAST8_MAX
+#undef UINT_FAST8_MAX
+#define INT_FAST8_MIN  SCHAR_MIN
+#define INT_FAST8_MAX  SCHAR_MAX
+#define UINT_FAST8_MAX  UCHAR_MAX
+
+#undef INT_FAST16_MIN
+#undef INT_FAST16_MAX
+#undef UINT_FAST16_MAX
+#define INT_FAST16_MIN  INT_FAST32_MIN
+#define INT_FAST16_MAX  INT_FAST32_MAX
+#define UINT_FAST16_MAX  UINT_FAST32_MAX
+
+#undef INT_FAST32_MIN
+#undef INT_FAST32_MAX
+#undef UINT_FAST32_MAX
+#ifdef __sun
+# define INT_FAST32_MIN  INT_MIN
+# define INT_FAST32_MAX  INT_MAX
+# define UINT_FAST32_MAX  UINT_MAX
+#else
+# define INT_FAST32_MIN  LONG_MIN
+# define INT_FAST32_MAX  LONG_MAX
+# define UINT_FAST32_MAX  ULONG_MAX
+#endif
+
+#undef INT_FAST64_MIN
+#undef INT_FAST64_MAX
+#ifdef GL_INT64_T
+# define INT_FAST64_MIN  INT64_MIN
+# define INT_FAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_FAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_FAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.4. Limits of integer types capable of holding object pointers */
+
+#undef INTPTR_MIN
+#undef INTPTR_MAX
+#undef UINTPTR_MAX
+#define INTPTR_MIN  LONG_MIN
+#define INTPTR_MAX  LONG_MAX
+#define UINTPTR_MAX  ULONG_MAX
+
+/* 7.18.2.5. Limits of greatest-width integer types */
+
+#ifndef INTMAX_MAX
+# undef INTMAX_MIN
+# ifdef INT64_MAX
+#  define INTMAX_MIN  INT64_MIN
+#  define INTMAX_MAX  INT64_MAX
+# else
+#  define INTMAX_MIN  INT32_MIN
+#  define INTMAX_MAX  INT32_MAX
+# endif
+#endif
+
+#ifndef UINTMAX_MAX
+# ifdef UINT64_MAX
+#  define UINTMAX_MAX  UINT64_MAX
+# else
+#  define UINTMAX_MAX  UINT32_MAX
+# endif
+#endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+#undef PTRDIFF_MIN
+#undef PTRDIFF_MAX
+#if 0
+# ifdef _LP64
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
+# else
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
+# endif
+#else
+# define PTRDIFF_MIN  \
+    _STDINT_MIN (1, 64, 0l)
+# define PTRDIFF_MAX  \
+    _STDINT_MAX (1, 64, 0l)
+#endif
+
+/* sig_atomic_t limits */
+#undef SIG_ATOMIC_MIN
+#undef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MIN  \
+   _STDINT_MIN (1, 32, \
+                0)
+#define SIG_ATOMIC_MAX  \
+   _STDINT_MAX (1, 32, \
+                0)
+
+
+/* size_t limit */
+#undef SIZE_MAX
+#if 0
+# ifdef _LP64
+#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
+# else
+#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
+# endif
+#else
+# define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
+#endif
+
+/* wchar_t limits */
+/* Get WCHAR_MIN, WCHAR_MAX.
+   This include is not on the top, above, because on OSF/1 4.0 we have a
+   sequence of nested includes
+   <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
+   <stdint.h> and assumes its types are already defined.  */
+#if 1 && ! (defined WCHAR_MIN && defined WCHAR_MAX)
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# include <wchar.h>
+# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+#endif
+#undef WCHAR_MIN
+#undef WCHAR_MAX
+#define WCHAR_MIN  \
+   _STDINT_MIN (1, 32, 0)
+#define WCHAR_MAX  \
+   _STDINT_MAX (1, 32, 0)
+
+/* wint_t limits */
+#undef WINT_MIN
+#undef WINT_MAX
+#define WINT_MIN  \
+   _STDINT_MIN (1, 32, 0)
+#define WINT_MAX  \
+   _STDINT_MAX (1, 32, 0)
+
+/* 7.18.4. Macros for integer constants */
+
+/* 7.18.4.1. Macros for minimum-width integer constants */
+/* According to ISO C 99 Technical Corrigendum 1 */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
+
+#undef INT8_C
+#undef UINT8_C
+#define INT8_C(x) x
+#define UINT8_C(x) x
+
+#undef INT16_C
+#undef UINT16_C
+#define INT16_C(x) x
+#define UINT16_C(x) x
+
+#undef INT32_C
+#undef UINT32_C
+#define INT32_C(x) x
+#define UINT32_C(x) x ## U
+
+#undef INT64_C
+#undef UINT64_C
+#if LONG_MAX >> 31 >> 31 == 1
+# define INT64_C(x) x##L
+#elif defined _MSC_VER
+# define INT64_C(x) x##i64
+#elif 1
+# define INT64_C(x) x##LL
+#endif
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# define UINT64_C(x) x##UL
+#elif defined _MSC_VER
+# define UINT64_C(x) x##ui64
+#elif 1
+# define UINT64_C(x) x##ULL
+#endif
+
+/* 7.18.4.2. Macros for greatest-width integer constants */
+
+#ifndef INTMAX_C
+# if 1 && LONG_MAX >> 30 == 1
+#  define INTMAX_C(x)   x##LL
+# elif defined GL_INT64_T
+#  define INTMAX_C(x)   INT64_C(x)
+# else
+#  define INTMAX_C(x)   x##L
+# endif
+#endif
+
+#ifndef UINTMAX_C
+# if 1 && ULONG_MAX >> 31 == 1
+#  define UINTMAX_C(x)  x##ULL
+# elif defined GL_UINT64_T
+#  define UINTMAX_C(x)  UINT64_C(x)
+# else
+#  define UINTMAX_C(x)  x##UL
+# endif
+#endif
+
+#endif /* _GL_STDINT_H */
+#endif /* !(defined __ANDROID__ && ...) */
+#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/darwin-lib/stdio.h b/darwin-lib/stdio.h
new file mode 100644
index 0000000..eb8c074
--- /dev/null
+++ b/darwin-lib/stdio.h
@@ -0,0 +1,1657 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <stdio.h>.
+
+   Copyright (C) 2004, 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H
+/* Special invocation convention:
+   - Inside glibc header files.
+   - On OSF/1 5.1 we have a sequence of nested includes
+     <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> ->
+     <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>.
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.  */
+
+#include_next <stdio.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_STDIO_H
+
+#define _GL_ALREADY_INCLUDING_STDIO_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <stdio.h>
+
+#undef _GL_ALREADY_INCLUDING_STDIO_H
+
+#ifndef _GL_STDIO_H
+#define _GL_STDIO_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_STDIO_INLINE
+# define _GL_STDIO_INLINE _GL_INLINE
+#endif
+
+/* Get va_list.  Needed on many systems, including glibc 2.8.  */
+#include <stdarg.h>
+
+#include <stddef.h>
+
+/* Get off_t and ssize_t.  Needed on many systems, including glibc 2.8
+   and eglibc 2.11.2.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF
+   indicates to GCC that the function takes a format string and arguments,
+   where the format string directives are the ones standardized by ISO C99
+   and POSIX.  */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF,
+   except that it indicates to GCC that the supported format string directives
+   are the ones of the system printf(), rather than the ones standardized by
+   ISO C99 and POSIX.  */
+#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF
+   indicates to GCC that the function takes a format string and arguments,
+   where the format string directives are the ones standardized by ISO C99
+   and POSIX.  */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF,
+   except that it indicates to GCC that the supported format string directives
+   are the ones of the system scanf(), rather than the ones standardized by
+   ISO C99 and POSIX.  */
+#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+
+/* Solaris 10 declares renameat in <unistd.h>, not in <stdio.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (0 || defined GNULIB_POSIXCHECK) && defined __sun \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* Macros for stringification.  */
+#define _GL_STDIO_STRINGIZE(token) #token
+#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token)
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dprintf rpl_dprintf
+#  endif
+_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (dprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef dprintf
+# if HAVE_RAW_DECL_DPRINTF
+_GL_WARN_ON_USE (dprintf, "dprintf is unportable - "
+                 "use gnulib module dprintf for portability");
+# endif
+#endif
+
+#if 0
+/* Close STREAM and its underlying file descriptor.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fclose rpl_fclose
+#  endif
+_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fclose, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fclose);
+#elif defined GNULIB_POSIXCHECK
+# undef fclose
+/* Assume fclose is always declared.  */
+_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
+                 "use gnulib module fclose for portable POSIX compliance");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fdopen
+#   define fdopen rpl_fdopen
+#  endif
+_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
+# endif
+_GL_CXXALIASWARN (fdopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fdopen
+/* Assume fdopen is always declared.  */
+_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module fdopen for portability");
+#endif
+
+#if 0
+/* Flush all pending data on STREAM according to POSIX rules.  Both
+   output and seekable input streams are supported.
+   Note! LOSS OF DATA can occur if fflush is applied on an input stream
+   that is _not_seekable_ or on an update stream that is _not_seekable_
+   and in which the most recent operation was input.  Seekability can
+   be tested with lseek(fileno(fp),0,SEEK_CUR).  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fflush rpl_fflush
+#  endif
+_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream));
+_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream));
+# else
+_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fflush);
+#elif defined GNULIB_POSIXCHECK
+# undef fflush
+/* Assume fflush is always declared.  */
+_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - "
+                 "use gnulib module fflush for portable POSIX compliance");
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fgetc
+#   define fgetc rpl_fgetc
+#  endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fgetc);
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fgets
+#   define fgets rpl_fgets
+#  endif
+_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream)
+                                 _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fgets);
+#endif
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fopen
+#   define fopen rpl_fopen
+#  endif
+_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode));
+# endif
+_GL_CXXALIASWARN (fopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fopen
+/* Assume fopen is always declared.  */
+_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module fopen for portability");
+#endif
+
+#if 1 || 1
+# if (1 && 1) \
+     || (1 && 0 && (0 || 0))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fprintf rpl_fprintf
+#  endif
+#  define GNULIB_overrides_fprintf 1
+#  if 1 || 1
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  else
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fprintf);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_fprintf
+#  undef fprintf
+# endif
+/* Assume fprintf is always declared.  */
+_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - "
+                 "use gnulib module fprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if 0
+/* Discard all pending buffered I/O data on STREAM.
+   STREAM must not be wide-character oriented.
+   When discarding pending output, the file position is set back to where it
+   was before the write calls.  When discarding pending input, the file
+   position is advanced to match the end of the previously read input.
+   Return 0 if successful.  Upon error, return -1 and set errno.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fpurge rpl_fpurge
+#  endif
+_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fpurge);
+#elif defined GNULIB_POSIXCHECK
+# undef fpurge
+# if HAVE_RAW_DECL_FPURGE
+_GL_WARN_ON_USE (fpurge, "fpurge is not always present - "
+                 "use gnulib module fpurge for portability");
+# endif
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputc
+#   define fputc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputc);
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputs
+#   define fputs rpl_fputs
+#  endif
+_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputs);
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fread
+#   define fread rpl_fread
+#  endif
+_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)
+                                 _GL_ARG_NONNULL ((4)));
+_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fread);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef freopen
+#   define freopen rpl_freopen
+#  endif
+_GL_FUNCDECL_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# endif
+_GL_CXXALIASWARN (freopen);
+#elif defined GNULIB_POSIXCHECK
+# undef freopen
+/* Assume freopen is always declared.  */
+_GL_WARN_ON_USE (freopen,
+                 "freopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module freopen for portability");
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fscanf
+#   define fscanf rpl_fscanf
+#  endif
+_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...)
+                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3)
+                               _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fscanf);
+#endif
+
+
+/* Set up the following warnings, based on which modules are in use.
+   GNU Coding Standards discourage the use of fseek, since it imposes
+   an arbitrary limitation on some 32-bit hosts.  Remember that the
+   fseek module depends on the fseeko module, so we only have three
+   cases to consider:
+
+   1. The developer is not using either module.  Issue a warning under
+   GNULIB_POSIXCHECK for both functions, to remind them that both
+   functions have bugs on some systems.  _GL_NO_LARGE_FILES has no
+   impact on this warning.
+
+   2. The developer is using both modules.  They may be unaware of the
+   arbitrary limitations of fseek, so issue a warning under
+   GNULIB_POSIXCHECK.  On the other hand, they may be using both
+   modules intentionally, so the developer can define
+   _GL_NO_LARGE_FILES in the compilation units where the use of fseek
+   is safe, to silence the warning.
+
+   3. The developer is using the fseeko module, but not fseek.  Gnulib
+   guarantees that fseek will still work around platform bugs in that
+   case, but we presume that the developer is aware of the pitfalls of
+   fseek and was trying to avoid it, so issue a warning even when
+   GNULIB_POSIXCHECK is undefined.  Again, _GL_NO_LARGE_FILES can be
+   defined to silence the warning in particular compilation units.
+   In C++ compilations with GNULIB_NAMESPACE, in order to avoid that
+   fseek gets defined as a macro, it is recommended that the developer
+   uses the fseek module, even if he is not calling the fseek function.
+
+   Most gnulib clients that perform stream operations should fall into
+   category 3.  */
+
+#if 0
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 2, above.  */
+#  undef fseek
+# endif
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseek
+#   define fseek rpl_fseek
+#  endif
+_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence));
+# else
+_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseek);
+#endif
+
+#if 0
+# if !0 && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 3, above.  */
+#  undef fseek
+# endif
+# if 0
+/* Provide an fseeko function that is aware of a preceding fflush(), and which
+   detects pipes.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseeko
+#   define fseeko rpl_fseeko
+#  endif
+_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseeko);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FSEEK_WARN /* Category 1, above.  */
+# undef fseek
+# undef fseeko
+# if HAVE_RAW_DECL_FSEEKO
+_GL_WARN_ON_USE (fseeko, "fseeko is unportable - "
+                 "use gnulib module fseeko for portability");
+# endif
+#endif
+
+#ifdef _GL_FSEEK_WARN
+# undef _GL_FSEEK_WARN
+/* Here, either fseek is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_fseek (declared above).  */
+_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use fseeko function for handling of large files");
+#endif
+
+
+/* ftell, ftello.  See the comments on fseek/fseeko.  */
+
+#if 0
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 2, above.  */
+#  undef ftell
+# endif
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftell
+#   define ftell rpl_ftell
+#  endif
+_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftell, long, (FILE *fp));
+# else
+_GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftell);
+#endif
+
+#if 0
+# if !0 && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 3, above.  */
+#  undef ftell
+# endif
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftello
+#   define ftello rpl_ftello
+#  endif
+_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftello);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FTELL_WARN /* Category 1, above.  */
+# undef ftell
+# undef ftello
+# if HAVE_RAW_DECL_FTELLO
+_GL_WARN_ON_USE (ftello, "ftello is unportable - "
+                 "use gnulib module ftello for portability");
+# endif
+#endif
+
+#ifdef _GL_FTELL_WARN
+# undef _GL_FTELL_WARN
+/* Here, either ftell is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_ftell (declared above).  */
+_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use ftello function for handling of large files");
+#endif
+
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fwrite
+#   define fwrite rpl_fwrite
+#  endif
+_GL_FUNCDECL_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+
+/* Work around glibc bug 11959
+   <http://sources.redhat.com/bugzilla/show_bug.cgi?id=11959>,
+   which sometimes causes an unwanted diagnostic for fwrite calls.
+   This affects only function declaration attributes, so it's not
+   needed for C++.  */
+#  if !defined __cplusplus && 0 < __USE_FORTIFY_LEVEL
+_GL_STDIO_INLINE size_t _GL_ARG_NONNULL ((1, 4))
+rpl_fwrite (const void *ptr, size_t s, size_t n, FILE *stream)
+{
+  size_t r = fwrite (ptr, s, n, stream);
+  (void) r;
+  return r;
+}
+#   undef fwrite
+#   define fwrite rpl_fwrite
+#  endif
+# endif
+_GL_CXXALIASWARN (fwrite);
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getc
+#   define getc rpl_fgetc
+#  endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (getc, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (getc);
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getchar
+#   define getchar rpl_getchar
+#  endif
+_GL_FUNCDECL_RPL (getchar, int, (void));
+_GL_CXXALIAS_RPL (getchar, int, (void));
+# else
+_GL_CXXALIAS_SYS (getchar, int, (void));
+# endif
+_GL_CXXALIASWARN (getchar);
+#endif
+
+#if 1
+/* Read input, up to (and including) the next occurrence of DELIMITER, from
+   STREAM, store it in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdelim
+#   define getdelim rpl_getdelim
+#  endif
+_GL_FUNCDECL_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+_GL_CXXALIAS_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# endif
+_GL_CXXALIASWARN (getdelim);
+#elif defined GNULIB_POSIXCHECK
+# undef getdelim
+# if HAVE_RAW_DECL_GETDELIM
+_GL_WARN_ON_USE (getdelim, "getdelim is unportable - "
+                 "use gnulib module getdelim for portability");
+# endif
+#endif
+
+#if 1
+/* Read a line, up to (and including) the next newline, from STREAM, store it
+   in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getline
+#   define getline rpl_getline
+#  endif
+_GL_FUNCDECL_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# endif
+# if 1
+_GL_CXXALIASWARN (getline);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getline
+# if HAVE_RAW_DECL_GETLINE
+_GL_WARN_ON_USE (getline, "getline is unportable - "
+                 "use gnulib module getline for portability");
+# endif
+#endif
+
+/* It is very rare that the developer ever has full control of stdin,
+   so any use of gets warrants an unconditional warning; besides, C11
+   removed it.  */
+#undef gets
+#if HAVE_RAW_DECL_GETS
+_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#endif
+
+
+#if 1 || 0
+struct obstack;
+/* Grow an obstack with formatted output.  Return the number of
+   bytes added to OBS.  No trailing nul byte is added, and the
+   object should be closed with obstack_finish before use.  Upon
+   memory allocation error, call obstack_alloc_failed_handler.  Upon
+   other error, return -1.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_printf rpl_obstack_printf
+#  endif
+_GL_FUNCDECL_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# else
+#  if !0
+_GL_FUNCDECL_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (obstack_printf);
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_vprintf rpl_obstack_vprintf
+#  endif
+_GL_FUNCDECL_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# else
+#  if !0
+_GL_FUNCDECL_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (obstack_vprintf);
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pclose, int, (FILE *stream));
+_GL_CXXALIASWARN (pclose);
+#elif defined GNULIB_POSIXCHECK
+# undef pclose
+# if HAVE_RAW_DECL_PCLOSE
+_GL_WARN_ON_USE (pclose, "pclose is unportable - "
+                 "use gnulib module pclose for more portability");
+# endif
+#endif
+
+#if 1
+/* Print a message to standard error, describing the value of ERRNO,
+   (if STRING is not NULL and not empty) prefixed with STRING and ": ",
+   and terminated with a newline.  */
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define perror rpl_perror
+#  endif
+_GL_FUNCDECL_RPL (perror, void, (const char *string));
+_GL_CXXALIAS_RPL (perror, void, (const char *string));
+# else
+_GL_CXXALIAS_SYS (perror, void, (const char *string));
+# endif
+_GL_CXXALIASWARN (perror);
+#elif defined GNULIB_POSIXCHECK
+# undef perror
+/* Assume perror is always declared.  */
+_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
+                 "use gnulib module perror for portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef popen
+#   define popen rpl_popen
+#  endif
+_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
+# endif
+_GL_CXXALIASWARN (popen);
+#elif defined GNULIB_POSIXCHECK
+# undef popen
+# if HAVE_RAW_DECL_POPEN
+_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
+                 "use gnulib module popen or pipe for more portability");
+# endif
+#endif
+
+#if 1 || 1
+# if (1 && 1) \
+     || (1 && 0 && (0 || 0))
+#  if defined __GNUC__
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+/* Don't break __attribute__((format(printf,M,N))).  */
+#    define printf __printf__
+#   endif
+#   if 1 || 1
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __asm__ ("_"
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+                    _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+#   else
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __asm__ ("_"
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+                    _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...));
+#  else
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define printf rpl_printf
+#   endif
+_GL_FUNCDECL_RPL (printf, int,
+                  (const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (printf, int, (const char *format, ...));
+#  endif
+#  define GNULIB_overrides_printf 1
+# else
+_GL_CXXALIAS_SYS (printf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (printf);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_printf
+#  undef printf
+# endif
+/* Assume printf is always declared.  */
+_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - "
+                 "use gnulib module printf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putc
+#   define putc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (putc);
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putchar
+#   define putchar rpl_putchar
+#  endif
+_GL_FUNCDECL_RPL (putchar, int, (int c));
+_GL_CXXALIAS_RPL (putchar, int, (int c));
+# else
+_GL_CXXALIAS_SYS (putchar, int, (int c));
+# endif
+_GL_CXXALIASWARN (putchar);
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef puts
+#   define puts rpl_puts
+#  endif
+_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (puts, int, (const char *string));
+# else
+_GL_CXXALIAS_SYS (puts, int, (const char *string));
+# endif
+_GL_CXXALIASWARN (puts);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remove
+#   define remove rpl_remove
+#  endif
+_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (remove, int, (const char *name));
+# else
+_GL_CXXALIAS_SYS (remove, int, (const char *name));
+# endif
+_GL_CXXALIASWARN (remove);
+#elif defined GNULIB_POSIXCHECK
+# undef remove
+/* Assume remove is always declared.  */
+_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - "
+                 "use gnulib module remove for more portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef rename
+#   define rename rpl_rename
+#  endif
+_GL_FUNCDECL_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# else
+_GL_CXXALIAS_SYS (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# endif
+_GL_CXXALIASWARN (rename);
+#elif defined GNULIB_POSIXCHECK
+# undef rename
+/* Assume rename is always declared.  */
+_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - "
+                 "use gnulib module rename for more portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef renameat
+#   define renameat rpl_renameat
+#  endif
+_GL_FUNCDECL_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# endif
+_GL_CXXALIASWARN (renameat);
+#elif defined GNULIB_POSIXCHECK
+# undef renameat
+# if HAVE_RAW_DECL_RENAMEAT
+_GL_WARN_ON_USE (renameat, "renameat is not portable - "
+                 "use gnulib module renameat for portability");
+# endif
+#endif
+
+#if 1
+# if 0 && 0
+#  if defined __GNUC__
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef scanf
+/* Don't break __attribute__((format(scanf,M,N))).  */
+#    define scanf __scanf__
+#   endif
+_GL_FUNCDECL_RPL_1 (__scanf__, int,
+                    (const char *format, ...)
+                    __asm__ ("_"
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf))
+                    _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...));
+#  else
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef scanf
+#    define scanf rpl_scanf
+#   endif
+_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...)
+                              _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...));
+#  endif
+# else
+_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (scanf);
+#endif
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define snprintf rpl_snprintf
+#  endif
+_GL_FUNCDECL_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (snprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef snprintf
+# if HAVE_RAW_DECL_SNPRINTF
+_GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
+                 "use gnulib module snprintf for portability");
+# endif
+#endif
+
+/* Some people would argue that all sprintf uses should be warned about
+   (for example, OpenBSD issues a link warning for it),
+   since it can cause security holes due to buffer overruns.
+   However, we believe that sprintf can be used safely, and is more
+   efficient than snprintf in those safe cases; and as proof of our
+   belief, we use sprintf in several gnulib modules.  So this header
+   intentionally avoids adding a warning to sprintf except when
+   GNULIB_POSIXCHECK is defined.  */
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define sprintf rpl_sprintf
+#  endif
+_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (sprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef sprintf
+/* Assume sprintf is always declared.  */
+_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - "
+                 "use gnulib module sprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define tmpfile rpl_tmpfile
+#  endif
+_GL_FUNCDECL_RPL (tmpfile, FILE *, (void));
+_GL_CXXALIAS_RPL (tmpfile, FILE *, (void));
+# else
+_GL_CXXALIAS_SYS (tmpfile, FILE *, (void));
+# endif
+_GL_CXXALIASWARN (tmpfile);
+#elif defined GNULIB_POSIXCHECK
+# undef tmpfile
+# if HAVE_RAW_DECL_TMPFILE
+_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - "
+                 "use gnulib module tmpfile for portability");
+# endif
+#endif
+
+#if 0
+/* Write formatted output to a string dynamically allocated with malloc().
+   If the memory allocation succeeds, store the address of the string in
+   *RESULT and return the number of resulting bytes, excluding the trailing
+   NUL.  Upon memory allocation error, or some other error, return -1.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define asprintf rpl_asprintf
+#  endif
+_GL_FUNCDECL_RPL (asprintf, int,
+                  (char **result, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (asprintf, int,
+                  (char **result, const char *format, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (asprintf, int,
+                  (char **result, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (asprintf, int,
+                  (char **result, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (asprintf);
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vasprintf rpl_vasprintf
+#  endif
+_GL_FUNCDECL_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vasprintf);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vdprintf rpl_vdprintf
+#  endif
+_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+/* Need to cast, because on Solaris, the third parameter will likely be
+                                                    __va_list args.  */
+_GL_CXXALIAS_SYS_CAST (vdprintf, int,
+                       (int fd, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vdprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vdprintf
+# if HAVE_RAW_DECL_VDPRINTF
+_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - "
+                 "use gnulib module vdprintf for portability");
+# endif
+#endif
+
+#if 1 || 1
+# if (1 && 1) \
+     || (1 && 0 && (0 || 0))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vfprintf rpl_vfprintf
+#  endif
+#  define GNULIB_overrides_vfprintf 1
+#  if 1
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  else
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+                                                      __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vfprintf, int,
+                       (FILE *fp, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfprintf);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vfprintf
+#  undef vfprintf
+# endif
+/* Assume vfprintf is always declared.  */
+_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - "
+                 "use gnulib module vfprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+#if 0
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef vfscanf
+#   define vfscanf rpl_vfscanf
+#  endif
+_GL_FUNCDECL_RPL (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfscanf);
+#endif
+
+#if 0 || 1
+# if (0 && 0) \
+     || (1 && 0 && (0 || 0))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vprintf rpl_vprintf
+#  endif
+#  define GNULIB_overrides_vprintf 1
+#  if 0 || 1
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0)
+                                _GL_ARG_NONNULL ((1)));
+#  else
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0)
+                                _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the second parameter is
+                                                          __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vprintf);
+#endif
+#if !0 && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vprintf
+#  undef vprintf
+# endif
+/* Assume vprintf is always declared.  */
+_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - "
+                 "use gnulib module vprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if 0
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef vscanf
+#   define vscanf rpl_vscanf
+#  endif
+_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args)
+                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vscanf);
+#endif
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsnprintf rpl_vsnprintf
+#  endif
+_GL_FUNCDECL_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsnprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsnprintf
+# if HAVE_RAW_DECL_VSNPRINTF
+_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
+                 "use gnulib module vsnprintf for portability");
+# endif
+#endif
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsprintf rpl_vsprintf
+#  endif
+_GL_FUNCDECL_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+                                                       __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vsprintf, int,
+                       (char *str, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsprintf
+/* Assume vsprintf is always declared.  */
+_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - "
+                 "use gnulib module vsprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_STDIO_H */
+#endif /* _GL_STDIO_H */
+#endif
diff --git a/darwin-lib/stdlib.h b/darwin-lib/stdlib.h
new file mode 100644
index 0000000..12c9ac1
--- /dev/null
+++ b/darwin-lib/stdlib.h
@@ -0,0 +1,1259 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <stdlib.h>.
+
+   Copyright (C) 1995, 2001-2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_malloc_and_calloc
+/* Special invocation convention inside glibc header files.  */
+
+#include_next <stdlib.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_STDLIB_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <stdlib.h>
+
+#ifndef _GL_STDLIB_H
+#define _GL_STDLIB_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>.  */
+#if 0 && !defined WEXITSTATUS
+# include <sys/wait.h>
+#endif
+
+/* Solaris declares getloadavg() in <sys/loadavg.h>.  */
+#if (0 || defined GNULIB_POSIXCHECK) && 0
+# include <sys/loadavg.h>
+#endif
+
+/* Native Windows platforms declare mktemp() in <io.h>.  */
+#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+#if 0
+
+/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included
+   from <stdlib.h> if _REENTRANT is defined.  Include it whenever we need
+   'struct random_data'.  */
+# if 1
+#  include <random.h>
+# endif
+
+# if !1 || 0 || !1
+#  include <stdint.h>
+# endif
+
+# if !1
+/* Define 'struct random_data'.
+   But allow multiple gnulib generated <stdlib.h> replacements to coexist.  */
+#  if !GNULIB_defined_struct_random_data
+struct random_data
+{
+  int32_t *fptr;                /* Front pointer.  */
+  int32_t *rptr;                /* Rear pointer.  */
+  int32_t *state;               /* Array of state values.  */
+  int rand_type;                /* Type of random number generator.  */
+  int rand_deg;                 /* Degree of random number generator.  */
+  int rand_sep;                 /* Distance between front and rear.  */
+  int32_t *end_ptr;             /* Pointer behind state table.  */
+};
+#   define GNULIB_defined_struct_random_data 1
+#  endif
+# endif
+#endif
+
+#if (0 || 0 || 0 || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+/* On Mac OS X 10.3, only <unistd.h> declares mkstemp.  */
+/* On Mac OS X 10.5, only <unistd.h> declares mkstemps.  */
+/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt.  */
+/* But avoid namespace pollution on glibc systems and native Windows.  */
+# include <unistd.h>
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The definition of _Noreturn is copied here.  */
+#if !defined _Noreturn && __STDC_VERSION__ < 201112
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Some systems do not define EXIT_*, despite otherwise supporting C89.  */
+#ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+#endif
+/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
+   with proper operation of xargs.  */
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#elif EXIT_FAILURE != 1
+# undef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+
+#if 0
+/* Terminate the current process with the given return code, without running
+   the 'atexit' handlers.  */
+# if !1
+_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status));
+# endif
+_GL_CXXALIAS_SYS (_Exit, void, (int status));
+_GL_CXXALIASWARN (_Exit);
+#elif defined GNULIB_POSIXCHECK
+# undef _Exit
+# if HAVE_RAW_DECL__EXIT
+_GL_WARN_ON_USE (_Exit, "_Exit is unportable - "
+                 "use gnulib module _Exit for portability");
+# endif
+#endif
+
+
+#if 0
+/* Parse a signed decimal integer.
+   Returns the value of the integer.  Errors are not detected.  */
+# if !1
+_GL_FUNCDECL_SYS (atoll, long long, (const char *string)
+                                    _GL_ATTRIBUTE_PURE
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (atoll, long long, (const char *string));
+_GL_CXXALIASWARN (atoll);
+#elif defined GNULIB_POSIXCHECK
+# undef atoll
+# if HAVE_RAW_DECL_ATOLL
+_GL_WARN_ON_USE (atoll, "atoll is unportable - "
+                 "use gnulib module atoll for portability");
+# endif
+#endif
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef calloc
+#   define calloc rpl_calloc
+#  endif
+_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size));
+_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size));
+# else
+_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
+# endif
+_GL_CXXALIASWARN (calloc);
+#elif defined GNULIB_POSIXCHECK
+# undef calloc
+/* Assume calloc is always declared.  */
+_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "
+                 "use gnulib module calloc-posix for portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define canonicalize_file_name rpl_canonicalize_file_name
+#  endif
+_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
+# endif
+_GL_CXXALIASWARN (canonicalize_file_name);
+#elif defined GNULIB_POSIXCHECK
+# undef canonicalize_file_name
+# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+_GL_WARN_ON_USE (canonicalize_file_name,
+                 "canonicalize_file_name is unportable - "
+                 "use gnulib module canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if 0
+/* Store max(NELEM,3) load average numbers in LOADAVG[].
+   The three numbers are the load average of the last 1 minute, the last 5
+   minutes, and the last 15 minutes, respectively.
+   LOADAVG is an array of NELEM numbers.  */
+# if !1
+_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem));
+_GL_CXXALIASWARN (getloadavg);
+#elif defined GNULIB_POSIXCHECK
+# undef getloadavg
+# if HAVE_RAW_DECL_GETLOADAVG
+_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - "
+                 "use gnulib module getloadavg for portability");
+# endif
+#endif
+
+#if 0
+/* Assuming *OPTIONP is a comma separated list of elements of the form
+   "token" or "token=value", getsubopt parses the first of these elements.
+   If the first element refers to a "token" that is member of the given
+   NULL-terminated array of tokens:
+     - It replaces the comma with a NUL byte, updates *OPTIONP to point past
+       the first option and the comma, sets *VALUEP to the value of the
+       element (or NULL if it doesn't contain an "=" sign),
+     - It returns the index of the "token" in the given array of tokens.
+   Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
+   For more details see the POSIX:2001 specification.
+   http://www.opengroup.org/susv3xsh/getsubopt.html */
+# if !1
+_GL_FUNCDECL_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+# endif
+_GL_CXXALIAS_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep));
+_GL_CXXALIASWARN (getsubopt);
+#elif defined GNULIB_POSIXCHECK
+# undef getsubopt
+# if HAVE_RAW_DECL_GETSUBOPT
+_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - "
+                 "use gnulib module getsubopt for portability");
+# endif
+#endif
+
+#if 0
+/* Change the ownership and access permission of the slave side of the
+   pseudo-terminal whose master side is specified by FD.  */
+# if !1
+_GL_FUNCDECL_SYS (grantpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (grantpt, int, (int fd));
+_GL_CXXALIASWARN (grantpt);
+#elif defined GNULIB_POSIXCHECK
+# undef grantpt
+# if HAVE_RAW_DECL_GRANTPT
+_GL_WARN_ON_USE (grantpt, "grantpt is not portable - "
+                 "use gnulib module grantpt for portability");
+# endif
+#endif
+
+/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not
+   rely on GNU or POSIX semantics for malloc and realloc (for example,
+   by never specifying a zero size), so it does not need malloc or
+   realloc to be redefined.  */
+#if 1
+# if 0
+#  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+        || _GL_USE_STDLIB_ALLOC)
+#   undef malloc
+#   define malloc rpl_malloc
+#  endif
+_GL_FUNCDECL_RPL (malloc, void *, (size_t size));
+_GL_CXXALIAS_RPL (malloc, void *, (size_t size));
+# else
+_GL_CXXALIAS_SYS (malloc, void *, (size_t size));
+# endif
+_GL_CXXALIASWARN (malloc);
+#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef malloc
+/* Assume malloc is always declared.  */
+_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
+                 "use gnulib module malloc-posix for portability");
+#endif
+
+/* Convert a multibyte character to a wide character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbtowc
+#   define mbtowc rpl_mbtowc
+#  endif
+_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+# else
+_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+# endif
+_GL_CXXALIASWARN (mbtowc);
+#endif
+
+#if 0
+/* Create a unique temporary directory from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the directory name unique.
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+   The directory is created mode 700.  */
+# if !1
+_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/));
+_GL_CXXALIASWARN (mkdtemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdtemp
+# if HAVE_RAW_DECL_MKDTEMP
+_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - "
+                 "use gnulib module mkdtemp for portability");
+# endif
+#endif
+
+#if 0
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !1
+_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemp
+# if HAVE_RAW_DECL_MKOSTEMP
+_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - "
+                 "use gnulib module mkostemp for portability");
+# endif
+#endif
+
+#if 0
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE before a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !1
+_GL_FUNCDECL_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemps
+# if HAVE_RAW_DECL_MKOSTEMPS
+_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - "
+                 "use gnulib module mkostemps for portability");
+# endif
+#endif
+
+#if 0
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkstemp rpl_mkstemp
+#  endif
+_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/));
+# endif
+_GL_CXXALIASWARN (mkstemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemp
+# if HAVE_RAW_DECL_MKSTEMP
+_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - "
+                 "use gnulib module mkstemp for portability");
+# endif
+#endif
+
+#if 0
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE prior to a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !1
+_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/));
+_GL_CXXALIASWARN (mkstemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemps
+# if HAVE_RAW_DECL_MKSTEMPS
+_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - "
+                 "use gnulib module mkstemps for portability");
+# endif
+#endif
+
+#if 0
+/* Return an FD open to the master side of a pseudo-terminal.  Flags should
+   include O_RDWR, and may also include O_NOCTTY.  */
+# if !1
+_GL_FUNCDECL_SYS (posix_openpt, int, (int flags));
+# endif
+_GL_CXXALIAS_SYS (posix_openpt, int, (int flags));
+_GL_CXXALIASWARN (posix_openpt);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_openpt
+# if HAVE_RAW_DECL_POSIX_OPENPT
+_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - "
+                 "use gnulib module posix_openpt for portability");
+# endif
+#endif
+
+#if 0
+/* Return the pathname of the pseudo-terminal slave associated with
+   the master FD is open on, or NULL on errors.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ptsname
+#   define ptsname rpl_ptsname
+#  endif
+_GL_FUNCDECL_RPL (ptsname, char *, (int fd));
+_GL_CXXALIAS_RPL (ptsname, char *, (int fd));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ptsname, char *, (int fd));
+#  endif
+_GL_CXXALIAS_SYS (ptsname, char *, (int fd));
+# endif
+_GL_CXXALIASWARN (ptsname);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname
+# if HAVE_RAW_DECL_PTSNAME
+_GL_WARN_ON_USE (ptsname, "ptsname is not portable - "
+                 "use gnulib module ptsname for portability");
+# endif
+#endif
+
+#if 0
+/* Set the pathname of the pseudo-terminal slave associated with
+   the master FD is open on and return 0, or set errno and return
+   non-zero on errors.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ptsname_r
+#   define ptsname_r rpl_ptsname_r
+#  endif
+_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len));
+_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len));
+#  endif
+_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len));
+# endif
+_GL_CXXALIASWARN (ptsname_r);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname_r
+# if HAVE_RAW_DECL_PTSNAME_R
+_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - "
+                 "use gnulib module ptsname_r for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putenv
+#   define putenv rpl_putenv
+#  endif
+_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (putenv, int, (char *string));
+# else
+_GL_CXXALIAS_SYS (putenv, int, (char *string));
+# endif
+_GL_CXXALIASWARN (putenv);
+#endif
+
+
+#if 0
+# if !1
+#  ifndef RAND_MAX
+#   define RAND_MAX 2147483647
+#  endif
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (random, long, (void));
+# endif
+_GL_CXXALIAS_SYS (random, long, (void));
+_GL_CXXALIASWARN (random);
+#elif defined GNULIB_POSIXCHECK
+# undef random
+# if HAVE_RAW_DECL_RANDOM
+_GL_WARN_ON_USE (random, "random is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed));
+# endif
+_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed));
+_GL_CXXALIASWARN (srandom);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom
+# if HAVE_RAW_DECL_SRANDOM
+_GL_WARN_ON_USE (srandom, "srandom is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (initstate, char *,
+                  (unsigned int seed, char *buf, size_t buf_size)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (initstate, char *,
+                  (unsigned int seed, char *buf, size_t buf_size));
+_GL_CXXALIASWARN (initstate);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate, "initstate is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state));
+_GL_CXXALIASWARN (setstate);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate, "setstate is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef random_r
+#   define random_r rpl_random_r
+#  endif
+_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result));
+# endif
+_GL_CXXALIASWARN (random_r);
+#elif defined GNULIB_POSIXCHECK
+# undef random_r
+# if HAVE_RAW_DECL_RANDOM_R
+_GL_WARN_ON_USE (random_r, "random_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef srandom_r
+#   define srandom_r rpl_srandom_r
+#  endif
+_GL_FUNCDECL_RPL (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (srandom_r);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom_r
+# if HAVE_RAW_DECL_SRANDOM_R
+_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef initstate_r
+#   define initstate_r rpl_initstate_r
+#  endif
+_GL_FUNCDECL_RPL (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (initstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate_r
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setstate_r
+#   define setstate_r rpl_setstate_r
+#  endif
+_GL_FUNCDECL_RPL (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (setstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate_r
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+#  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+        || _GL_USE_STDLIB_ALLOC)
+#   undef realloc
+#   define realloc rpl_realloc
+#  endif
+_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size));
+_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
+# else
+_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
+# endif
+_GL_CXXALIASWARN (realloc);
+#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef realloc
+/* Assume realloc is always declared.  */
+_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
+                 "use gnulib module realloc-posix for portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define realpath rpl_realpath
+#  endif
+_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved));
+# endif
+_GL_CXXALIASWARN (realpath);
+#elif defined GNULIB_POSIXCHECK
+# undef realpath
+# if HAVE_RAW_DECL_REALPATH
+_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module "
+                 "canonicalize or canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if 0
+/* Test a user response to a question.
+   Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear.  */
+# if !1
+_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (rpmatch, int, (const char *response));
+_GL_CXXALIASWARN (rpmatch);
+#elif defined GNULIB_POSIXCHECK
+# undef rpmatch
+# if HAVE_RAW_DECL_RPMATCH
+_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - "
+                 "use gnulib module rpmatch for portability");
+# endif
+#endif
+
+#if 0
+/* Set NAME to VALUE in the environment.
+   If REPLACE is nonzero, overwrite an existing value.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setenv
+#   define setenv rpl_setenv
+#  endif
+_GL_FUNCDECL_RPL (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (setenv, int,
+                  (const char *name, const char *value, int replace));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (setenv, int,
+                  (const char *name, const char *value, int replace));
+# endif
+# if !(0 && !1)
+_GL_CXXALIASWARN (setenv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef setenv
+# if HAVE_RAW_DECL_SETENV
+_GL_WARN_ON_USE (setenv, "setenv is unportable - "
+                 "use gnulib module setenv for portability");
+# endif
+#endif
+
+#if 0
+ /* Parse a double from STRING, updating ENDP if appropriate.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strtod rpl_strtod
+#  endif
+_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp));
+# endif
+_GL_CXXALIASWARN (strtod);
+#elif defined GNULIB_POSIXCHECK
+# undef strtod
+# if HAVE_RAW_DECL_STRTOD
+_GL_WARN_ON_USE (strtod, "strtod is unportable - "
+                 "use gnulib module strtod for portability");
+# endif
+#endif
+
+#if 0
+/* Parse a signed integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
+   to ERANGE.  */
+# if !1
+_GL_FUNCDECL_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoll);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoll
+# if HAVE_RAW_DECL_STRTOLL
+_GL_WARN_ON_USE (strtoll, "strtoll is unportable - "
+                 "use gnulib module strtoll for portability");
+# endif
+#endif
+
+#if 0
+/* Parse an unsigned integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is ULLONG_MAX, and errno is set to
+   ERANGE.  */
+# if !1
+_GL_FUNCDECL_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoull);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoull
+# if HAVE_RAW_DECL_STRTOULL
+_GL_WARN_ON_USE (strtoull, "strtoull is unportable - "
+                 "use gnulib module strtoull for portability");
+# endif
+#endif
+
+#if 0
+/* Unlock the slave side of the pseudo-terminal whose master side is specified
+   by FD, so that it can be opened.  */
+# if !1
+_GL_FUNCDECL_SYS (unlockpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (unlockpt, int, (int fd));
+_GL_CXXALIASWARN (unlockpt);
+#elif defined GNULIB_POSIXCHECK
+# undef unlockpt
+# if HAVE_RAW_DECL_UNLOCKPT
+_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - "
+                 "use gnulib module unlockpt for portability");
+# endif
+#endif
+
+#if 1
+/* Remove the variable NAME from the environment.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unsetenv
+#   define unsetenv rpl_unsetenv
+#  endif
+_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unsetenv, int, (const char *name));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (unsetenv, int, (const char *name));
+# endif
+# if !(0 && !1)
+_GL_CXXALIASWARN (unsetenv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef unsetenv
+# if HAVE_RAW_DECL_UNSETENV
+_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - "
+                 "use gnulib module unsetenv for portability");
+# endif
+#endif
+
+/* Convert a wide character to a multibyte character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctomb
+#   define wctomb rpl_wctomb
+#  endif
+_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc));
+_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc));
+# else
+_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc));
+# endif
+_GL_CXXALIASWARN (wctomb);
+#endif
+
+
+#endif /* _GL_STDLIB_H */
+#endif /* _GL_STDLIB_H */
+#endif
diff --git a/darwin-lib/string.h b/darwin-lib/string.h
new file mode 100644
index 0000000..a45c895
--- /dev/null
+++ b/darwin-lib/string.h
@@ -0,0 +1,1341 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <string.h>.
+
+   Copyright (C) 1995-1996, 2001-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_STRING_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <string.h>
+
+#ifndef _GL_STRING_H
+#define _GL_STRING_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD defines mbslen as a macro.  */
+#if 0 && defined __MirBSD__
+# include <wchar.h>
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (0 || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Find the index of the least-significant set bit.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (ffsl, int, (long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsl, int, (long int i));
+_GL_CXXALIASWARN (ffsl);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsl
+# if HAVE_RAW_DECL_FFSL
+_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
+# endif
+#endif
+
+
+/* Find the index of the least-significant set bit.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
+_GL_CXXALIASWARN (ffsll);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsll
+# if HAVE_RAW_DECL_FFSLL
+_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
+# endif
+#endif
+
+
+/* Return the first instance of C within N bytes of S, or NULL.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memchr rpl_memchr
+#  endif
+_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const void * std::memchr (const void *, int, size_t); }
+       extern "C++" { void * std::memchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memchr,
+                        void *, (void const *__s, int __c, size_t __n),
+                        void const *, (void const *__s, int __c, size_t __n));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
+_GL_CXXALIASWARN1 (memchr, void const *,
+                   (void const *__s, int __c, size_t __n));
+# else
+_GL_CXXALIASWARN (memchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memchr
+/* Assume memchr is always declared.  */
+_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+                 "use gnulib module memchr for portability" );
+#endif
+
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memmem rpl_memmem
+#  endif
+_GL_FUNCDECL_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# endif
+_GL_CXXALIASWARN (memmem);
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# if HAVE_RAW_DECL_MEMMEM
+_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
+                 "use gnulib module memmem-simple for portability, "
+                 "and module memmem for speed" );
+# endif
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+#if 0
+# if ! 1
+_GL_FUNCDECL_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n));
+_GL_CXXALIASWARN (mempcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# if HAVE_RAW_DECL_MEMPCPY
+_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
+                 "use gnulib module mempcpy for portability");
+# endif
+#endif
+
+/* Search backwards through a block for a byte (specified as an int).  */
+#if 0
+# if ! 1
+_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::memrchr (const void *, int, size_t); }
+       extern "C++" { void * std::memrchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memrchr,
+                        void *, (void const *, int, size_t),
+                        void const *, (void const *, int, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
+_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
+# else
+_GL_CXXALIASWARN (memrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# if HAVE_RAW_DECL_MEMRCHR
+_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
+                 "use gnulib module memrchr for portability");
+# endif
+#endif
+
+/* Find the first occurrence of C in S.  More efficient than
+   memchr(S,C,N), at the expense of undefined behavior if C does not
+   occur within N bytes.  */
+#if 1
+# if ! 0
+_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::rawmemchr (const void *, int); }
+       extern "C++" { void * std::rawmemchr (void *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
+                        void *, (void const *__s, int __c_in),
+                        void const *, (void const *__s, int __c_in));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
+_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (rawmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# if HAVE_RAW_DECL_RAWMEMCHR
+_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
+                 "use gnulib module rawmemchr for portability");
+# endif
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
+#if 1
+# if ! 1
+_GL_FUNCDECL_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src));
+_GL_CXXALIASWARN (stpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# if HAVE_RAW_DECL_STPCPY
+_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
+                 "use gnulib module stpcpy for portability");
+# endif
+#endif
+
+/* Copy no more than N bytes of SRC to DST, returning a pointer past the
+   last non-NUL byte written into DST.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef stpncpy
+#   define stpncpy rpl_stpncpy
+#  endif
+_GL_FUNCDECL_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# endif
+_GL_CXXALIASWARN (stpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# if HAVE_RAW_DECL_STPNCPY
+_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+                 "use gnulib module stpncpy for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strchr
+/* Assume strchr is always declared.  */
+_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbschr if you care about internationalization");
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strchrnul rpl_strchrnul
+#  endif
+_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strchrnul, char *,
+                  (const char *str, int ch));
+# else
+#  if ! 0
+_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * std::strchrnul (const char *, int); }
+       extern "C++" { char * std::strchrnul (char *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (strchrnul,
+                        char *, (char const *__s, int __c_in),
+                        char const *, (char const *__s, int __c_in));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
+_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (strchrnul);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# if HAVE_RAW_DECL_STRCHRNUL
+_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
+                 "use gnulib module strchrnul for portability");
+# endif
+#endif
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strdup
+#   define strdup rpl_strdup
+#  endif
+_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
+# else
+#  if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
+    /* strdup exists as a function and as a macro.  Get rid of the macro.  */
+#   undef strdup
+#  endif
+#  if !(1 || defined strdup)
+_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+#elif defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
+_GL_WARN_ON_USE (strdup, "strdup is unportable - "
+                 "use gnulib module strdup for portability");
+# endif
+#endif
+
+/* Append no more than N characters from SRC onto DEST.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strncat
+#   define strncat rpl_strncat
+#  endif
+_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
+# else
+_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
+# endif
+_GL_CXXALIASWARN (strncat);
+#elif defined GNULIB_POSIXCHECK
+# undef strncat
+# if HAVE_RAW_DECL_STRNCAT
+_GL_WARN_ON_USE (strncat, "strncat is unportable - "
+                 "use gnulib module strncat for portability");
+# endif
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strndup
+#   define strndup rpl_strndup
+#  endif
+_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
+# endif
+_GL_CXXALIASWARN (strndup);
+#elif defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
+_GL_WARN_ON_USE (strndup, "strndup is unportable - "
+                 "use gnulib module strndup for portability");
+# endif
+#endif
+
+/* Find the length (number of bytes) of STRING, but scan at most
+   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
+   return MAXLEN.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strnlen
+#   define strnlen rpl_strnlen
+#  endif
+_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
+# endif
+_GL_CXXALIASWARN (strnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# if HAVE_RAW_DECL_STRNLEN
+_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
+                 "use gnulib module strnlen for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strcspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+# undef strcspn
+/* Assume strcspn is always declared.  */
+_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbscspn if you care about internationalization");
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if 0
+# if ! 1
+_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const char * strpbrk (const char *, const char *); }
+       extern "C++" { char * strpbrk (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strpbrk,
+                        char *, (char const *__s, char const *__accept),
+                        const char *, (char const *__s, char const *__accept));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
+_GL_CXXALIASWARN1 (strpbrk, char const *,
+                   (char const *__s, char const *__accept));
+# else
+_GL_CXXALIASWARN (strpbrk);
+# endif
+# if defined GNULIB_POSIXCHECK
+/* strpbrk() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+#  undef strpbrk
+_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbspbrk if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# if HAVE_RAW_DECL_STRPBRK
+_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
+                 "use gnulib module strpbrk for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it cannot work with multibyte strings.  */
+# undef strspn
+/* Assume strspn is always declared.  */
+_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbsspn if you care about internationalization");
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strrchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strrchr
+/* Assume strrchr is always declared.  */
+_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbsrchr if you care about internationalization");
+#endif
+
+/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP
+   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of strtok() that is multithread-safe and supports
+   empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strtok_r().  */
+#if 0
+# if ! 1
+_GL_FUNCDECL_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim));
+_GL_CXXALIASWARN (strsep);
+# if defined GNULIB_POSIXCHECK
+#  undef strsep
+_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbssep if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# if HAVE_RAW_DECL_STRSEP
+_GL_WARN_ON_USE (strsep, "strsep is unportable - "
+                 "use gnulib module strsep for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strstr rpl_strstr
+#  endif
+_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
+# else
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strstr (const char *, const char *); }
+       extern "C++" { char * strstr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strstr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strstr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strstr() does not work with multibyte strings if the locale encoding is
+   different from UTF-8:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.  */
+# undef strstr
+/* Assume strstr is always declared.  */
+_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
+                 "work correctly on character strings in most "
+                 "multibyte locales - "
+                 "use mbsstr if you care about internationalization, "
+                 "or use strstr if you care about speed");
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+   comparison.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strcasestr rpl_strcasestr
+#  endif
+_GL_FUNCDECL_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strcasestr (const char *, const char *); }
+       extern "C++" { char * strcasestr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strcasestr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strcasestr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strcasestr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strcasestr() does not work with multibyte strings:
+   It is a glibc extension, and glibc implements it only for unibyte
+   locales.  */
+# undef strcasestr
+# if HAVE_RAW_DECL_STRCASESTR
+_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbscasestr if you care about "
+                 "internationalization, or use c-strcasestr if you want "
+                 "a locale independent function");
+# endif
+#endif
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = strtok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   This is a variant of strtok() that is multithread-safe.
+
+   For the POSIX documentation for this function, see:
+   http://www.opengroup.org/susv3xsh/strtok.html
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strsep().  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtok_r
+#   define strtok_r rpl_strtok_r
+#  endif
+_GL_FUNCDECL_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# else
+#  if 0 || defined GNULIB_POSIXCHECK
+#   undef strtok_r
+#  endif
+#  if ! 1
+_GL_FUNCDECL_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# endif
+_GL_CXXALIASWARN (strtok_r);
+# if defined GNULIB_POSIXCHECK
+_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbstok_r if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# if HAVE_RAW_DECL_STRTOK_R
+_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
+                 "use gnulib module strtok_r for portability");
+# endif
+#endif
+
+
+/* The following functions are not specified by POSIX.  They are gnulib
+   extensions.  */
+
+#if 0
+/* Return the number of multibyte characters in the character string STRING.
+   This considers multibyte characters, unlike strlen, which counts bytes.  */
+# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
+#  undef mbslen
+# endif
+# if 0  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbslen rpl_mbslen
+#  endif
+_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
+# else
+_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
+# endif
+_GL_CXXALIASWARN (mbslen);
+#endif
+
+#if 0
+/* Return the number of multibyte characters in the character string starting
+   at STRING and ending at STRING + LEN.  */
+_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1));
+#endif
+
+#if 1
+/* Locate the first single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbschr);
+#endif
+
+#if 1
+/* Locate the last single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strrchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux || defined __INTERIX
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbsrchr rpl_mbsrchr /* avoid collision with system function */
+#  endif
+_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbsrchr);
+#endif
+
+#if 0
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
+   Unlike strstr(), this function works correctly in multibyte locales with
+   encodings different from UTF-8.  */
+_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Compare the character strings S1 and S2, ignoring case, returning less than,
+   equal to or greater than zero if S1 is lexicographically less than, equal to
+   or greater than S2.
+   Note: This function may, in multibyte locales, return 0 for strings of
+   different lengths!
+   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Compare the initial segment of the character string S1 consisting of at most
+   N characters with the initial segment of the character string S2 consisting
+   of at most N characters, ignoring case, returning less than, equal to or
+   greater than zero if the initial segment of S1 is lexicographically less
+   than, equal to or greater than the initial segment of S2.
+   Note: This function may, in multibyte locales, return 0 for initial segments
+   of different lengths!
+   Unlike strncasecmp(), this function works correctly in multibyte locales.
+   But beware that N is not a byte count but a character count!  */
+_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Compare the initial segment of the character string STRING consisting of
+   at most mbslen (PREFIX) characters with the character string PREFIX,
+   ignoring case.  If the two match, return a pointer to the first byte
+   after this prefix in STRING.  Otherwise, return NULL.
+   Note: This function may, in multibyte locales, return non-NULL if STRING
+   is of smaller length than PREFIX!
+   Unlike strncasecmp(), this function works correctly in multibyte
+   locales.  */
+_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK, using case-insensitive comparison.
+   Note: This function may, in multibyte locales, return success even if
+   strlen (haystack) < strlen (needle) !
+   Unlike strcasestr(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strcspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the pointer to it, or NULL if none
+   exists.
+   Unlike strpbrk(), this function works correctly in multibyte locales.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
+# else
+_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
+# endif
+_GL_CXXALIASWARN (mbspbrk);
+#endif
+
+#if 0
+/* Find the first occurrence in the character string STRING of any character
+   not in the character string REJECT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Search the next delimiter (multibyte character listed in the character
+   string DELIM) starting at the character string *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP to point
+   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of mbstok_r() that supports empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbstok_r().  */
+_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Parse the character string STRING into tokens separated by characters in
+   the character string DELIM.
+   If STRING is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = mbstok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbssep().  */
+_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
+     _GL_ARG_NONNULL ((2, 3));
+#endif
+
+/* Map any int, typically from errno, into an error message.  */
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror
+#   define strerror rpl_strerror
+#  endif
+_GL_FUNCDECL_RPL (strerror, char *, (int));
+_GL_CXXALIAS_RPL (strerror, char *, (int));
+# else
+_GL_CXXALIAS_SYS (strerror, char *, (int));
+# endif
+_GL_CXXALIASWARN (strerror);
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+/* Assume strerror is always declared.  */
+_GL_WARN_ON_USE (strerror, "strerror is unportable - "
+                 "use gnulib module strerror to guarantee non-NULL result");
+#endif
+
+/* Map any int, typically from errno, into an error message.  Multithread-safe.
+   Uses the POSIX declaration, not the glibc declaration.  */
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror_r
+#   define strerror_r rpl_strerror_r
+#  endif
+_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# endif
+# if 1
+_GL_CXXALIASWARN (strerror_r);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strerror_r
+# if HAVE_RAW_DECL_STRERROR_R
+_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
+                 "use gnulib module strerror_r-posix for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strsignal rpl_strsignal
+#  endif
+_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
+_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is
+   'const char *'.  */
+_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
+# endif
+_GL_CXXALIASWARN (strsignal);
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# if HAVE_RAW_DECL_STRSIGNAL
+_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
+                 "use gnulib module strsignal for portability");
+# endif
+#endif
+
+#if 1
+# if !0
+_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
+_GL_CXXALIASWARN (strverscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef strverscmp
+# if HAVE_RAW_DECL_STRVERSCMP
+_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
+                 "use gnulib module strverscmp for portability");
+# endif
+#endif
+
+
+#endif /* _GL_STRING_H */
+#endif /* _GL_STRING_H */
diff --git a/darwin-lib/sys/stat.h b/darwin-lib/sys/stat.h
new file mode 100644
index 0000000..ddb169a
--- /dev/null
+++ b/darwin-lib/sys/stat.h
@@ -0,0 +1,1040 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide a more complete sys/stat header file.
+   Copyright (C) 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
+
+/* This file is supposed to be used on platforms where <sys/stat.h> is
+   incomplete.  It is intended to provide definitions and prototypes
+   needed by an application.  Start with what the system provides.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_system_sys_stat_h
+/* Special invocation convention.  */
+
+#include_next <sys/stat.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_SYS_STAT_H
+
+/* Get nlink_t.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+
+/* Get struct timespec.  */
+#include <time.h>
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <sys/stat.h>
+
+#ifndef _GL_SYS_STAT_H
+#define _GL_SYS_STAT_H
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
+   headers that may declare mkdir().  Native Windows platforms declare mkdir
+   in <io.h> and/or <direct.h>, not in <unistd.h>.  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# include <io.h>     /* mingw32, mingw64 */
+# include <direct.h> /* mingw64, MSVC 9 */
+#endif
+
+/* Native Windows platforms declare umask() in <io.h>.  */
+#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+/* Large File Support on native Windows.  */
+#if 0
+# define stat _stati64
+#endif
+
+#ifndef S_IFIFO
+# ifdef _S_IFIFO
+#  define S_IFIFO _S_IFIFO
+# endif
+#endif
+
+#ifndef S_IFMT
+# define S_IFMT 0170000
+#endif
+
+#if STAT_MACROS_BROKEN
+# undef S_ISBLK
+# undef S_ISCHR
+# undef S_ISDIR
+# undef S_ISFIFO
+# undef S_ISLNK
+# undef S_ISNAM
+# undef S_ISMPB
+# undef S_ISMPC
+# undef S_ISNWK
+# undef S_ISREG
+# undef S_ISSOCK
+#endif
+
+#ifndef S_ISBLK
+# ifdef S_IFBLK
+#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+# else
+#  define S_ISBLK(m) 0
+# endif
+#endif
+
+#ifndef S_ISCHR
+# ifdef S_IFCHR
+#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+# else
+#  define S_ISCHR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDIR
+# ifdef S_IFDIR
+#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# else
+#  define S_ISDIR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDOOR /* Solaris 2.5 and up */
+# define S_ISDOOR(m) 0
+#endif
+
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# else
+#  define S_ISFIFO(m) 0
+# endif
+#endif
+
+#ifndef S_ISLNK
+# ifdef S_IFLNK
+#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+# else
+#  define S_ISLNK(m) 0
+# endif
+#endif
+
+#ifndef S_ISMPB /* V7 */
+# ifdef S_IFMPB
+#  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
+#  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
+# else
+#  define S_ISMPB(m) 0
+#  define S_ISMPC(m) 0
+# endif
+#endif
+
+#ifndef S_ISNAM /* Xenix */
+# ifdef S_IFNAM
+#  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
+# else
+#  define S_ISNAM(m) 0
+# endif
+#endif
+
+#ifndef S_ISNWK /* HP/UX */
+# ifdef S_IFNWK
+#  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
+# else
+#  define S_ISNWK(m) 0
+# endif
+#endif
+
+#ifndef S_ISPORT /* Solaris 10 and up */
+# define S_ISPORT(m) 0
+#endif
+
+#ifndef S_ISREG
+# ifdef S_IFREG
+#  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+# else
+#  define S_ISREG(m) 0
+# endif
+#endif
+
+#ifndef S_ISSOCK
+# ifdef S_IFSOCK
+#  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+# else
+#  define S_ISSOCK(m) 0
+# endif
+#endif
+
+
+#ifndef S_TYPEISMQ
+# define S_TYPEISMQ(p) 0
+#endif
+
+#ifndef S_TYPEISTMO
+# define S_TYPEISTMO(p) 0
+#endif
+
+
+#ifndef S_TYPEISSEM
+# ifdef S_INSEM
+#  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
+# else
+#  define S_TYPEISSEM(p) 0
+# endif
+#endif
+
+#ifndef S_TYPEISSHM
+# ifdef S_INSHD
+#  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
+# else
+#  define S_TYPEISSHM(p) 0
+# endif
+#endif
+
+/* high performance ("contiguous data") */
+#ifndef S_ISCTG
+# define S_ISCTG(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with data  */
+#ifndef S_ISOFD
+# define S_ISOFD(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with no data  */
+#ifndef S_ISOFL
+# define S_ISOFL(p) 0
+#endif
+
+/* 4.4BSD whiteout */
+#ifndef S_ISWHT
+# define S_ISWHT(m) 0
+#endif
+
+/* If any of the following are undefined,
+   define them to their de facto standard values.  */
+#if !S_ISUID
+# define S_ISUID 04000
+#endif
+#if !S_ISGID
+# define S_ISGID 02000
+#endif
+
+/* S_ISVTX is a common extension to POSIX.  */
+#ifndef S_ISVTX
+# define S_ISVTX 01000
+#endif
+
+#if !S_IRUSR && S_IREAD
+# define S_IRUSR S_IREAD
+#endif
+#if !S_IRUSR
+# define S_IRUSR 00400
+#endif
+#if !S_IRGRP
+# define S_IRGRP (S_IRUSR >> 3)
+#endif
+#if !S_IROTH
+# define S_IROTH (S_IRUSR >> 6)
+#endif
+
+#if !S_IWUSR && S_IWRITE
+# define S_IWUSR S_IWRITE
+#endif
+#if !S_IWUSR
+# define S_IWUSR 00200
+#endif
+#if !S_IWGRP
+# define S_IWGRP (S_IWUSR >> 3)
+#endif
+#if !S_IWOTH
+# define S_IWOTH (S_IWUSR >> 6)
+#endif
+
+#if !S_IXUSR && S_IEXEC
+# define S_IXUSR S_IEXEC
+#endif
+#if !S_IXUSR
+# define S_IXUSR 00100
+#endif
+#if !S_IXGRP
+# define S_IXGRP (S_IXUSR >> 3)
+#endif
+#if !S_IXOTH
+# define S_IXOTH (S_IXUSR >> 6)
+#endif
+
+#if !S_IRWXU
+# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
+#endif
+#if !S_IRWXG
+# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
+#endif
+#if !S_IRWXO
+# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
+#endif
+
+/* S_IXUGO is a common extension to POSIX.  */
+#if !S_IXUGO
+# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
+#endif
+
+#ifndef S_IRWXUGO
+# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
+#endif
+
+/* Macros for futimens and utimensat.  */
+#ifndef UTIME_NOW
+# define UTIME_NOW (-1)
+# define UTIME_OMIT (-2)
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (fchmodat, int,
+                  (int fd, char const *file, mode_t mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (fchmodat, int,
+                  (int fd, char const *file, mode_t mode, int flag));
+_GL_CXXALIASWARN (fchmodat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchmodat
+# if HAVE_RAW_DECL_FCHMODAT
+_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fstat
+#   define fstat rpl_fstat
+#  endif
+_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
+# else
+_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
+# endif
+_GL_CXXALIASWARN (fstat);
+#elif 0
+/* Above, we define stat to _stati64.  */
+# define fstat _fstati64
+#elif defined GNULIB_POSIXCHECK
+# undef fstat
+# if HAVE_RAW_DECL_FSTAT
+_GL_WARN_ON_USE (fstat, "fstat has portability problems - "
+                 "use gnulib module fstat for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fstatat
+#   define fstatat rpl_fstatat
+#  endif
+_GL_FUNCDECL_RPL (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags));
+# endif
+_GL_CXXALIASWARN (fstatat);
+#elif defined GNULIB_POSIXCHECK
+# undef fstatat
+# if HAVE_RAW_DECL_FSTATAT
+_GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
+   implementation relies on futimesat, which on Solaris 10 makes an invocation
+   to futimens that is meant to invoke the libc's futimens(), not gnulib's
+   futimens().  */
+# if 0 || (!1 && defined __sun)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef futimens
+#   define futimens rpl_futimens
+#  endif
+_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
+_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
+#  endif
+_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
+# endif
+# if 1
+_GL_CXXALIASWARN (futimens);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef futimens
+# if HAVE_RAW_DECL_FUTIMENS
+_GL_WARN_ON_USE (futimens, "futimens is not portable - "
+                 "use gnulib module futimens for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
+   denotes a symbolic link.  */
+# if !1
+/* The lchmod replacement follows symbolic links.  Callers should take
+   this into account; lchmod should be applied only to arguments that
+   are known to not be symbolic links.  On hosts that lack lchmod,
+   this can lead to race conditions between the check and the
+   invocation of lchmod, but we know of no workarounds that are
+   reliable in general.  You might try requesting support for lchmod
+   from your operating system supplier.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lchmod chmod
+#  endif
+/* Need to cast, because on mingw, the second parameter of chmod is
+                                                int mode.  */
+_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int,
+                         (const char *filename, mode_t mode));
+# else
+#  if 0 /* assume already declared */
+_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
+# endif
+# if 1
+_GL_CXXALIASWARN (lchmod);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef lchmod
+# if HAVE_RAW_DECL_LCHMOD
+_GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
+                 "use gnulib module lchmod for portability");
+# endif
+#endif
+
+
+#if 0
+# if ! 1
+/* mingw does not support symlinks, therefore it does not have lstat.  But
+   without links, stat does just fine.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lstat stat
+#  endif
+_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf));
+# elif 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lstat
+#   define lstat rpl_lstat
+#  endif
+_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf));
+# else
+_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
+# endif
+# if 1
+_GL_CXXALIASWARN (lstat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef lstat
+# if HAVE_RAW_DECL_LSTAT
+_GL_WARN_ON_USE (lstat, "lstat is unportable - "
+                 "use gnulib module lstat for portability");
+# endif
+#endif
+
+
+#if 0
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef mkdir
+#  define mkdir rpl_mkdir
+# endif
+_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+#else
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
+   Additionally, it declares _mkdir (and depending on compile flags, an
+   alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
+   which are included above.  */
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+#  if !GNULIB_defined_rpl_mkdir
+static int
+rpl_mkdir (char const *name, mode_t mode)
+{
+  return _mkdir (name);
+}
+#   define GNULIB_defined_rpl_mkdir 1
+#  endif
+
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkdir rpl_mkdir
+#  endif
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
+# endif
+#endif
+_GL_CXXALIASWARN (mkdir);
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
+                                _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkdirat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdirat
+# if HAVE_RAW_DECL_MKDIRAT
+_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mkfifo
+#   define mkfifo rpl_mkfifo
+#  endif
+_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
+# endif
+_GL_CXXALIASWARN (mkfifo);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifo
+# if HAVE_RAW_DECL_MKFIFO
+_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
+                 "use gnulib module mkfifo for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
+                                 _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkfifoat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifoat
+# if HAVE_RAW_DECL_MKFIFOAT
+_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
+                 "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mknod
+#   define mknod rpl_mknod
+#  endif
+_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on OSF/1 5.1, the third parameter is '...'.  */
+_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# endif
+_GL_CXXALIASWARN (mknod);
+#elif defined GNULIB_POSIXCHECK
+# undef mknod
+# if HAVE_RAW_DECL_MKNOD
+_GL_WARN_ON_USE (mknod, "mknod is not portable - "
+                 "use gnulib module mknod for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (mknodat, int,
+                  (int fd, char const *file, mode_t mode, dev_t dev)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mknodat, int,
+                  (int fd, char const *file, mode_t mode, dev_t dev));
+_GL_CXXALIASWARN (mknodat);
+#elif defined GNULIB_POSIXCHECK
+# undef mknodat
+# if HAVE_RAW_DECL_MKNODAT
+_GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
+                 "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if 1
+# if 1
+/* We can't use the object-like #define stat rpl_stat, because of
+   struct stat.  This means that rpl_stat will not be used if the user
+   does (stat)(a,b).  Oh well.  */
+#  if defined _AIX && defined stat && defined _LARGE_FILES
+    /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
+       so we have to replace stat64() instead of stat(). */
+#   undef stat64
+#   define stat64(name, st) rpl_stat (name, st)
+#  elif 0
+    /* Above, we define stat to _stati64.  */
+#   if defined __MINGW32__ && defined _stati64
+#    ifndef _USE_32BIT_TIME_T
+      /* The system headers define _stati64 to _stat64.  */
+#     undef _stat64
+#     define _stat64(name, st) rpl_stat (name, st)
+#    endif
+#   elif defined _MSC_VER && defined _stati64
+#    ifdef _USE_32BIT_TIME_T
+      /* The system headers define _stati64 to _stat32i64.  */
+#     undef _stat32i64
+#     define _stat32i64(name, st) rpl_stat (name, st)
+#    else
+      /* The system headers define _stati64 to _stat64.  */
+#     undef _stat64
+#     define _stat64(name, st) rpl_stat (name, st)
+#    endif
+#   else
+#    undef _stati64
+#    define _stati64(name, st) rpl_stat (name, st)
+#   endif
+#  elif defined __MINGW32__ && defined stat
+#   ifdef _USE_32BIT_TIME_T
+     /* The system headers define stat to _stat32i64.  */
+#    undef _stat32i64
+#    define _stat32i64(name, st) rpl_stat (name, st)
+#   else
+     /* The system headers define stat to _stat64.  */
+#    undef _stat64
+#    define _stat64(name, st) rpl_stat (name, st)
+#   endif
+#  elif defined _MSC_VER && defined stat
+#   ifdef _USE_32BIT_TIME_T
+     /* The system headers define stat to _stat32.  */
+#    undef _stat32
+#    define _stat32(name, st) rpl_stat (name, st)
+#   else
+     /* The system headers define stat to _stat64i32.  */
+#    undef _stat64i32
+#    define _stat64i32(name, st) rpl_stat (name, st)
+#   endif
+#  else /* !(_AIX ||__MINGW32__ ||  _MSC_VER) */
+#   undef stat
+#   define stat(name, st) rpl_stat (name, st)
+#  endif /* !_LARGE_FILES */
+_GL_EXTERN_C int stat (const char *name, struct stat *buf)
+                      _GL_ARG_NONNULL ((1, 2));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef stat
+# if HAVE_RAW_DECL_STAT
+_GL_WARN_ON_USE (stat, "stat is unportable - "
+                 "use gnulib module stat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
+   implementation relies on futimesat, which on Solaris 10 makes an invocation
+   to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
+   utimensat().  */
+# if 0 || (!1 && defined __sun)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef utimensat
+#   define utimensat rpl_utimensat
+#  endif
+_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag)
+                                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag));
+# endif
+# if 1
+_GL_CXXALIASWARN (utimensat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef utimensat
+# if HAVE_RAW_DECL_UTIMENSAT
+_GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
+                 "use gnulib module utimensat for portability");
+# endif
+#endif
+
+
+#endif /* _GL_SYS_STAT_H */
+#endif /* _GL_SYS_STAT_H */
+#endif
diff --git a/darwin-lib/sys/types.h b/darwin-lib/sys/types.h
new file mode 100644
index 0000000..5051902
--- /dev/null
+++ b/darwin-lib/sys/types.h
@@ -0,0 +1,52 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide a more complete sys/types.h.
+
+   Copyright (C) 2011-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#ifndef _GL_SYS_TYPES_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <sys/types.h>
+
+#ifndef _GL_SYS_TYPES_H
+#define _GL_SYS_TYPES_H
+
+/* Override off_t if Large File Support is requested on native Windows.  */
+#if 0
+/* Same as int64_t in <stdint.h>.  */
+# if defined _MSC_VER
+#  define off_t __int64
+# else
+#  define off_t long long int
+# endif
+/* Indicator, for gnulib internal purposes.  */
+# define _GL_WINDOWS_64_BIT_OFF_T 1
+#endif
+
+/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
+    && ! defined __GLIBC__
+# include <stddef.h>
+#endif
+
+#endif /* _GL_SYS_TYPES_H */
+#endif /* _GL_SYS_TYPES_H */
diff --git a/darwin-lib/sys/wait.h b/darwin-lib/sys/wait.h
new file mode 100644
index 0000000..c6c63f3
--- /dev/null
+++ b/darwin-lib/sys/wait.h
@@ -0,0 +1,431 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A POSIX-like <sys/wait.h>.
+   Copyright (C) 2001-2003, 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef _GL_SYS_WAIT_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include_next <sys/wait.h>
+#endif
+
+#ifndef _GL_SYS_WAIT_H
+#define _GL_SYS_WAIT_H
+
+/* Get pid_t.  */
+#include <sys/types.h>
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+/* Unix API.  */
+
+/* The following macros apply to an argument x, that is a status of a process,
+   as returned by waitpid().
+   On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and
+   WTERMSIG are bits 7..0, while BeOS uses the opposite.  Therefore programs
+   have to use the abstract macros.  */
+
+/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x)
+   is true.  */
+# ifndef WIFSIGNALED
+#  define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f)
+# endif
+# ifndef WIFEXITED
+#  define WIFEXITED(x) (WTERMSIG (x) == 0)
+# endif
+# ifndef WIFSTOPPED
+#  define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f)
+# endif
+
+/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true.  */
+# ifndef WTERMSIG
+#  define WTERMSIG(x) ((x) & 0x7f)
+# endif
+
+/* The exit status. Only to be accessed if WIFEXITED(x) is true.  */
+# ifndef WEXITSTATUS
+#  define WEXITSTATUS(x) (((x) >> 8) & 0xff)
+# endif
+
+/* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true.  */
+# ifndef WSTOPSIG
+#  define WSTOPSIG(x) (((x) >> 8) & 0x7f)
+# endif
+
+/* True if the process dumped core.  Not standardized by POSIX.  */
+# ifndef WCOREDUMP
+#  define WCOREDUMP(x) ((x) & 0x80)
+# endif
+
+#else
+/* Native Windows API.  */
+
+# include <signal.h> /* for SIGTERM */
+
+/* The following macros apply to an argument x, that is a status of a process,
+   as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess().
+   This value is simply an 'int', not composed of bit fields.  */
+
+/* When an unhandled fatal signal terminates a process, the exit code is 3.  */
+# define WIFSIGNALED(x) ((x) == 3)
+# define WIFEXITED(x) ((x) != 3)
+# define WIFSTOPPED(x) 0
+
+/* The signal that terminated a process is not known posthum.  */
+# define WTERMSIG(x) SIGTERM
+
+# define WEXITSTATUS(x) (x)
+
+/* There are no stopping signals.  */
+# define WSTOPSIG(x) 0
+
+/* There are no core dumps.  */
+# define WCOREDUMP(x) 0
+
+#endif
+
+
+/* Declarations of functions.  */
+
+#if 1
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+_GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options));
+# endif
+_GL_CXXALIAS_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options));
+_GL_CXXALIASWARN (waitpid);
+#elif defined GNULIB_POSIXCHECK
+# undef waitpid
+# if HAVE_RAW_DECL_WAITPID
+_GL_WARN_ON_USE (waitpid, "waitpid is unportable - "
+                 "use gnulib module sys_wait for portability");
+# endif
+#endif
+
+
+#endif /* _GL_SYS_WAIT_H */
+#endif /* _GL_SYS_WAIT_H */
diff --git a/darwin-lib/time.h b/darwin-lib/time.h
new file mode 100644
index 0000000..9bb0188
--- /dev/null
+++ b/darwin-lib/time.h
@@ -0,0 +1,560 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A more-standard <time.h>.
+
+   Copyright (C) 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* Don't get in the way of glibc when it includes time.h merely to
+   declare a few standard symbols, rather than to declare all the
+   symbols.  Also, Solaris 8 <time.h> eventually includes itself
+   recursively; if that is happening, just include the system <time.h>
+   without adding our own declarations.  */
+#if (defined __need_time_t || defined __need_clock_t \
+     || defined __need_timespec \
+     || defined _GL_TIME_H)
+
+# include_next <time.h>
+
+#else
+
+# define _GL_TIME_H
+
+# include_next <time.h>
+
+/* NetBSD 5.0 mis-defines NULL.  */
+# include <stddef.h>
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
+   Or they define it with the wrong member names or define it in <sys/time.h>
+   (e.g., FreeBSD circa 1997).  Stock Mingw does not define it, but the
+   pthreads-win32 library defines it in <pthread.h>.  */
+# if ! 1
+#  if 0
+#   include <sys/time.h>
+#  elif 0
+#   include <pthread.h>
+/* The pthreads-win32 <pthread.h> also defines a couple of broken macros.  */
+#   undef asctime_r
+#   undef ctime_r
+#   undef gmtime_r
+#   undef localtime_r
+#   undef rand_r
+#   undef strtok_r
+#  else
+
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+
+#   if !GNULIB_defined_struct_timespec
+#    undef timespec
+#    define timespec rpl_timespec
+struct timespec
+{
+  time_t tv_sec;
+  long int tv_nsec;
+};
+#    define GNULIB_defined_struct_timespec 1
+#   endif
+
+#   ifdef __cplusplus
+}
+#   endif
+
+#  endif
+# endif
+
+# if !GNULIB_defined_struct_time_t_must_be_integral
+/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires
+   time_t to be an integer type, even though C99 permits floating
+   point.  We don't know of any implementation that uses floating
+   point, and it is much easier to write code that doesn't have to
+   worry about that corner case, so we force the issue.  */
+struct __time_t_must_be_integral {
+  unsigned int __floating_time_t_unsupported : (time_t) 1;
+};
+#  define GNULIB_defined_struct_time_t_must_be_integral 1
+# endif
+
+/* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
+   return -1 and store the remaining time into RMTP.  See
+   <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
+# if 0
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define nanosleep rpl_nanosleep
+#   endif
+_GL_FUNCDECL_RPL (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp));
+#  else
+#   if ! 1
+_GL_FUNCDECL_SYS (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp)
+                  _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_SYS (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp));
+#  endif
+_GL_CXXALIASWARN (nanosleep);
+# endif
+
+/* Return the 'time_t' representation of TP and normalize TP.  */
+# if 0
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define mktime rpl_mktime
+#   endif
+_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp));
+#  else
+_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
+#  endif
+_GL_CXXALIASWARN (mktime);
+# endif
+
+/* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
+   <http://www.opengroup.org/susv3xsh/localtime_r.html> and
+   <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
+# if 0
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef localtime_r
+#    define localtime_r rpl_localtime_r
+#   endif
+_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result)
+                                            _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result));
+#  else
+#   if ! 1
+_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result)
+                                            _GL_ARG_NONNULL ((1, 2)));
+#   endif
+_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result));
+#  endif
+#  if 1
+_GL_CXXALIASWARN (localtime_r);
+#  endif
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef gmtime_r
+#    define gmtime_r rpl_gmtime_r
+#   endif
+_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result)
+                                         _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result));
+#  else
+#   if ! 1
+_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result)
+                                         _GL_ARG_NONNULL ((1, 2)));
+#   endif
+_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result));
+#  endif
+#  if 1
+_GL_CXXALIASWARN (gmtime_r);
+#  endif
+# endif
+
+/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
+   the resulting broken-down time into TM.  See
+   <http://www.opengroup.org/susv3xsh/strptime.html>.  */
+# if 0
+#  if ! 1
+_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm)
+                                    _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm));
+_GL_CXXALIASWARN (strptime);
+# endif
+
+/* Convert TM to a time_t value, assuming UTC.  */
+# if 0
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef timegm
+#    define timegm rpl_timegm
+#   endif
+_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm));
+#  else
+#   if ! 1
+_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
+#  endif
+_GL_CXXALIASWARN (timegm);
+# endif
+
+/* Encourage applications to avoid unsafe functions that can overrun
+   buffers when given outlandish struct tm values.  Portable
+   applications should use strftime (or even sprintf) instead.  */
+# if defined GNULIB_POSIXCHECK
+#  undef asctime
+_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef asctime_r
+_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef ctime
+_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef ctime_r
+_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+
+#endif
diff --git a/darwin-lib/unistd.h b/darwin-lib/unistd.h
new file mode 100644
index 0000000..5c4e28d
--- /dev/null
+++ b/darwin-lib/unistd.h
@@ -0,0 +1,1853 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Substitute for and wrapper around <unistd.h>.
+   Copyright (C) 2003-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* Special invocation convention:
+   - On mingw, several headers, including <winsock2.h>, include <unistd.h>,
+     but we need to ensure that both the system <unistd.h> and <winsock2.h>
+     are completely included before we replace gethostname.  */
+#if 0 && 0 \
+  && !defined _GL_WINSOCK2_H_WITNESS && defined _WINSOCK2_H
+/* <unistd.h> is being indirectly included for the first time from
+   <winsock2.h>; avoid declaring any overrides.  */
+# if 1
+#  include_next <unistd.h>
+# else
+#  error unexpected; report this to bug-gnulib@gnu.org
+# endif
+# define _GL_WINSOCK2_H_WITNESS
+
+/* Normal invocation.  */
+#elif !defined _GL_UNISTD_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <unistd.h>
+#endif
+
+/* Get all possible declarations of gethostname().  */
+#if 0 && 0 \
+  && !defined _GL_INCLUDING_WINSOCK2_H
+# define _GL_INCLUDING_WINSOCK2_H
+# include <winsock2.h>
+# undef _GL_INCLUDING_WINSOCK2_H
+#endif
+
+#if !defined _GL_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
+#define _GL_UNISTD_H
+
+/* NetBSD 5.0 mis-defines NULL.  Also get size_t.  */
+#include <stddef.h>
+
+/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>.  */
+/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
+     || ((0 || defined GNULIB_POSIXCHECK) \
+         && defined __CYGWIN__)) \
+    && ! defined __GLIBC__
+# include <stdio.h>
+#endif
+
+/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (0 || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \
+    && ! defined __GLIBC__
+# include <fcntl.h>
+#endif
+
+/* mingw fails to declare _exit in <unistd.h>.  */
+/* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in
+   <unistd.h>.  */
+/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* Native Windows platforms declare chdir, getcwd, rmdir in
+   <io.h> and/or <direct.h>, not in <unistd.h>.
+   They also declare access(), chmod(), close(), dup(), dup2(), isatty(),
+   lseek(), read(), unlink(), write() in <io.h>.  */
+#if ((0 || 0 || 0 \
+      || defined GNULIB_POSIXCHECK) \
+     && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# include <io.h>     /* mingw32, mingw64 */
+# include <direct.h> /* mingw64, MSVC 9 */
+#elif (1 || 0 || 1 || 0 \
+       || 0 || 0 || 0 || 0 \
+       || defined GNULIB_POSIXCHECK) \
+      && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+/* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>.
+   NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if ((0 && (defined _AIX || defined __osf__)) \
+     || (0 && defined __TANDEM)) \
+    && !defined __GLIBC__
+# include <netdb.h>
+#endif
+
+/* MSVC defines off_t in <sys/types.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#if !1 || 0
+/* Get off_t.  */
+# include <sys/types.h>
+#endif
+
+#if (0 || 0 \
+     || 0 || 0 \
+     || 0 || 0 || defined GNULIB_POSIXCHECK)
+/* Get ssize_t.  */
+# include <sys/types.h>
+#endif
+
+/* Get getopt(), optarg, optind, opterr, optopt.
+   But avoid namespace pollution on glibc systems.  */
+#if 01 && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
+# include <getopt.h>
+#endif
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_UNISTD_INLINE
+# define _GL_UNISTD_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Hide some function declarations from <winsock2.h>.  */
+
+#if 0 && 0
+# if !defined _GL_SYS_SOCKET_H
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef socket
+#   define socket              socket_used_without_including_sys_socket_h
+#   undef connect
+#   define connect             connect_used_without_including_sys_socket_h
+#   undef accept
+#   define accept              accept_used_without_including_sys_socket_h
+#   undef bind
+#   define bind                bind_used_without_including_sys_socket_h
+#   undef getpeername
+#   define getpeername         getpeername_used_without_including_sys_socket_h
+#   undef getsockname
+#   define getsockname         getsockname_used_without_including_sys_socket_h
+#   undef getsockopt
+#   define getsockopt          getsockopt_used_without_including_sys_socket_h
+#   undef listen
+#   define listen              listen_used_without_including_sys_socket_h
+#   undef recv
+#   define recv                recv_used_without_including_sys_socket_h
+#   undef send
+#   define send                send_used_without_including_sys_socket_h
+#   undef recvfrom
+#   define recvfrom            recvfrom_used_without_including_sys_socket_h
+#   undef sendto
+#   define sendto              sendto_used_without_including_sys_socket_h
+#   undef setsockopt
+#   define setsockopt          setsockopt_used_without_including_sys_socket_h
+#   undef shutdown
+#   define shutdown            shutdown_used_without_including_sys_socket_h
+#  else
+    _GL_WARN_ON_USE (socket,
+                     "socket() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (connect,
+                     "connect() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (accept,
+                     "accept() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (bind,
+                     "bind() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getpeername,
+                     "getpeername() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getsockname,
+                     "getsockname() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getsockopt,
+                     "getsockopt() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (listen,
+                     "listen() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (recv,
+                     "recv() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (send,
+                     "send() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (recvfrom,
+                     "recvfrom() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (sendto,
+                     "sendto() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (setsockopt,
+                     "setsockopt() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (shutdown,
+                     "shutdown() used without including <sys/socket.h>");
+#  endif
+# endif
+# if !defined _GL_SYS_SELECT_H
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef select
+#   define select              select_used_without_including_sys_select_h
+#  else
+    _GL_WARN_ON_USE (select,
+                     "select() used without including <sys/select.h>");
+#  endif
+# endif
+#endif
+
+
+/* OS/2 EMX lacks these macros.  */
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+/* Ensure *_OK macros exist.  */
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+
+/* Declare overridden functions.  */
+
+
+#if defined GNULIB_POSIXCHECK
+/* The access() function is a security risk.  */
+_GL_WARN_ON_USE (access, "the access function is a security risk - "
+                 "use the gnulib module faccessat instead");
+#endif
+
+
+#if 0
+_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIASWARN (chdir);
+#elif defined GNULIB_POSIXCHECK
+# undef chdir
+# if HAVE_RAW_DECL_CHDIR
+_GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - "
+                 "use gnulib module chdir for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef chown
+#   define chown rpl_chown
+#  endif
+_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid));
+# endif
+_GL_CXXALIASWARN (chown);
+#elif defined GNULIB_POSIXCHECK
+# undef chown
+# if HAVE_RAW_DECL_CHOWN
+_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and "
+                 "doesn't treat a uid or gid of -1 on some systems - "
+                 "use gnulib module chown for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+/* Automatically included by modules that need a replacement for close.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef close
+#   define close rpl_close
+#  endif
+_GL_FUNCDECL_RPL (close, int, (int fd));
+_GL_CXXALIAS_RPL (close, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (close, int, (int fd));
+# endif
+_GL_CXXALIASWARN (close);
+#elif 0
+# undef close
+# define close close_used_without_requesting_gnulib_module_close
+#elif defined GNULIB_POSIXCHECK
+# undef close
+/* Assume close is always declared.  */
+_GL_WARN_ON_USE (close, "close does not portably work on sockets - "
+                 "use gnulib module close for portability");
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup rpl_dup
+#  endif
+_GL_FUNCDECL_RPL (dup, int, (int oldfd));
+_GL_CXXALIAS_RPL (dup, int, (int oldfd));
+# else
+_GL_CXXALIAS_SYS (dup, int, (int oldfd));
+# endif
+_GL_CXXALIASWARN (dup);
+#elif defined GNULIB_POSIXCHECK
+# undef dup
+# if HAVE_RAW_DECL_DUP
+_GL_WARN_ON_USE (dup, "dup is unportable - "
+                 "use gnulib module dup for portability");
+# endif
+#endif
+
+
+#if 1
+/* Copy the file descriptor OLDFD into file descriptor NEWFD.  Do nothing if
+   NEWFD = OLDFD, otherwise close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup2 rpl_dup2
+#  endif
+_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd));
+_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd));
+#  endif
+_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd));
+# endif
+_GL_CXXALIASWARN (dup2);
+#elif defined GNULIB_POSIXCHECK
+# undef dup2
+# if HAVE_RAW_DECL_DUP2
+_GL_WARN_ON_USE (dup2, "dup2 is unportable - "
+                 "use gnulib module dup2 for portability");
+# endif
+#endif
+
+
+#if 0
+/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
+   specified flags.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>.  */
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup3 rpl_dup3
+#  endif
+_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags));
+# else
+_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags));
+# endif
+_GL_CXXALIASWARN (dup3);
+#elif defined GNULIB_POSIXCHECK
+# undef dup3
+# if HAVE_RAW_DECL_DUP3
+_GL_WARN_ON_USE (dup3, "dup3 is unportable - "
+                 "use gnulib module dup3 for portability");
+# endif
+#endif
+
+
+#if 1
+# if !0
+/* Set of environment variables and values.  An array of strings of the form
+   "VARIABLE=VALUE", terminated with a NULL.  */
+#  if defined __APPLE__ && defined __MACH__
+#   include <crt_externs.h>
+#   define environ (*_NSGetEnviron ())
+#  else
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+extern char **environ;
+#   ifdef __cplusplus
+}
+#   endif
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if HAVE_RAW_DECL_ENVIRON
+_GL_UNISTD_INLINE char ***
+rpl_environ (void)
+{
+  return &environ;
+}
+_GL_WARN_ON_USE (rpl_environ, "environ is unportable - "
+                 "use gnulib module environ for portability");
+#  undef environ
+#  define environ (*rpl_environ ())
+# endif
+#endif
+
+
+#if 0
+/* Like access(), except that it uses the effective user id and group id of
+   the current process.  */
+# if !1
+_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode));
+_GL_CXXALIASWARN (euidaccess);
+# if defined GNULIB_POSIXCHECK
+/* Like access(), this function is a security risk.  */
+_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - "
+                 "use the gnulib module faccessat instead");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef euidaccess
+# if HAVE_RAW_DECL_EUIDACCESS
+_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - "
+                 "use gnulib module euidaccess for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag));
+_GL_CXXALIASWARN (faccessat);
+#elif defined GNULIB_POSIXCHECK
+# undef faccessat
+# if HAVE_RAW_DECL_FACCESSAT
+_GL_WARN_ON_USE (faccessat, "faccessat is not portable - "
+                 "use gnulib module faccessat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the process' current working directory to the directory on which
+   the given file descriptor is open.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>.  */
+# if ! 1
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+
+/* Gnulib internal hooks needed to maintain the fchdir metadata.  */
+_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename)
+     _GL_ARG_NONNULL ((2));
+_GL_EXTERN_C void _gl_unregister_fd (int fd);
+_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd);
+_GL_EXTERN_C const char *_gl_directory_name (int fd);
+
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+#  endif
+# endif
+_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/));
+_GL_CXXALIASWARN (fchdir);
+#elif defined GNULIB_POSIXCHECK
+# undef fchdir
+# if HAVE_RAW_DECL_FCHDIR
+_GL_WARN_ON_USE (fchdir, "fchdir is unportable - "
+                 "use gnulib module fchdir for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fchownat
+#   define fchownat rpl_fchownat
+#  endif
+_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# endif
+_GL_CXXALIASWARN (fchownat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchownat
+# if HAVE_RAW_DECL_FCHOWNAT
+_GL_WARN_ON_USE (fchownat, "fchownat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Synchronize changes to a file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>.  */
+# if !1 || !1
+_GL_FUNCDECL_SYS (fdatasync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fdatasync, int, (int fd));
+_GL_CXXALIASWARN (fdatasync);
+#elif defined GNULIB_POSIXCHECK
+# undef fdatasync
+# if HAVE_RAW_DECL_FDATASYNC
+_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - "
+                 "use gnulib module fdatasync for portability");
+# endif
+#endif
+
+
+#if 0
+/* Synchronize changes, including metadata, to a file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>.  */
+# if !1
+_GL_FUNCDECL_SYS (fsync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fsync, int, (int fd));
+_GL_CXXALIASWARN (fsync);
+#elif defined GNULIB_POSIXCHECK
+# undef fsync
+# if HAVE_RAW_DECL_FSYNC
+_GL_WARN_ON_USE (fsync, "fsync is unportable - "
+                 "use gnulib module fsync for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the size of the file to which FD is opened to become equal to LENGTH.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftruncate
+#   define ftruncate rpl_ftruncate
+#  endif
+_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length));
+_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length));
+#  endif
+_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length));
+# endif
+_GL_CXXALIASWARN (ftruncate);
+#elif defined GNULIB_POSIXCHECK
+# undef ftruncate
+# if HAVE_RAW_DECL_FTRUNCATE
+_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - "
+                 "use gnulib module ftruncate for portability");
+# endif
+#endif
+
+
+#if 0
+/* Get the name of the current working directory, and put it in SIZE bytes
+   of BUF.
+   Return BUF if successful, or NULL if the directory couldn't be determined
+   or SIZE was too small.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>.
+   Additionally, the gnulib module 'getcwd' guarantees the following GNU
+   extension: If BUF is NULL, an array is allocated with 'malloc'; the array
+   is SIZE bytes long, unless SIZE == 0, in which case it is as big as
+   necessary.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getcwd rpl_getcwd
+#  endif
+_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size));
+_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size));
+# else
+/* Need to cast, because on mingw, the second parameter is
+                                                   int size.  */
+_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size));
+# endif
+_GL_CXXALIASWARN (getcwd);
+#elif defined GNULIB_POSIXCHECK
+# undef getcwd
+# if HAVE_RAW_DECL_GETCWD
+_GL_WARN_ON_USE (getcwd, "getcwd is unportable - "
+                 "use gnulib module getcwd for portability");
+# endif
+#endif
+
+
+#if 0
+/* Return the NIS domain name of the machine.
+   WARNING! The NIS domain name is unrelated to the fully qualified host name
+            of the machine.  It is also unrelated to email addresses.
+   WARNING! The NIS domain name is usually the empty string or "(none)" when
+            not using NIS.
+
+   Put up to LEN bytes of the NIS domain name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdomainname
+#   define getdomainname rpl_getdomainname
+#  endif
+_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len)
+                                      _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len)
+                                      _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (getdomainname);
+#elif defined GNULIB_POSIXCHECK
+# undef getdomainname
+# if HAVE_RAW_DECL_GETDOMAINNAME
+_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - "
+                 "use gnulib module getdomainname for portability");
+# endif
+#endif
+
+
+#if 1
+/* Return the maximum number of file descriptors in the current process.
+   In POSIX, this is same as sysconf (_SC_OPEN_MAX).  */
+# if !1
+_GL_FUNCDECL_SYS (getdtablesize, int, (void));
+# endif
+_GL_CXXALIAS_SYS (getdtablesize, int, (void));
+_GL_CXXALIASWARN (getdtablesize);
+#elif defined GNULIB_POSIXCHECK
+# undef getdtablesize
+# if HAVE_RAW_DECL_GETDTABLESIZE
+_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - "
+                 "use gnulib module getdtablesize for portability");
+# endif
+#endif
+
+
+#if 0
+/* Return the supplemental groups that the current process belongs to.
+   It is unspecified whether the effective group id is in the list.
+   If N is 0, return the group count; otherwise, N describes how many
+   entries are available in GROUPS.  Return -1 and set errno if N is
+   not 0 and not large enough.  Fails with ENOSYS on some systems.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getgroups
+#   define getgroups rpl_getgroups
+#  endif
+_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups));
+_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups));
+#  endif
+_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups));
+# endif
+_GL_CXXALIASWARN (getgroups);
+#elif defined GNULIB_POSIXCHECK
+# undef getgroups
+# if HAVE_RAW_DECL_GETGROUPS
+_GL_WARN_ON_USE (getgroups, "getgroups is unportable - "
+                 "use gnulib module getgroups for portability");
+# endif
+#endif
+
+
+#if 0
+/* Return the standard host name of the machine.
+   WARNING! The host name may or may not be fully qualified.
+
+   Put up to LEN bytes of the host name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the host name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef gethostname
+#   define gethostname rpl_gethostname
+#  endif
+_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second
+   parameter is
+                                                      int len.  */
+_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (gethostname);
+#elif 0
+# undef gethostname
+# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
+#elif defined GNULIB_POSIXCHECK
+# undef gethostname
+# if HAVE_RAW_DECL_GETHOSTNAME
+_GL_WARN_ON_USE (gethostname, "gethostname is unportable - "
+                 "use gnulib module gethostname for portability");
+# endif
+#endif
+
+
+#if 0
+/* Returns the user's login name, or NULL if it cannot be found.  Upon error,
+   returns NULL with errno set.
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if !1
+_GL_FUNCDECL_SYS (getlogin, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getlogin, char *, (void));
+_GL_CXXALIASWARN (getlogin);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin
+# if HAVE_RAW_DECL_GETLOGIN
+_GL_WARN_ON_USE (getlogin, "getlogin is unportable - "
+                 "use gnulib module getlogin for portability");
+# endif
+#endif
+
+
+#if 0
+/* Copies the user's login name to NAME.
+   The array pointed to by NAME has room for SIZE bytes.
+
+   Returns 0 if successful.  Upon error, an error number is returned, or -1 in
+   the case that the login name cannot be found but no specific error is
+   provided (this case is hopefully rare but is left open by the POSIX spec).
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getlogin_r rpl_getlogin_r
+#  endif
+_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Solaris 10 systems, the second argument is
+                                                     int size.  */
+_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size));
+# endif
+_GL_CXXALIASWARN (getlogin_r);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin_r
+# if HAVE_RAW_DECL_GETLOGIN_R
+_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - "
+                 "use gnulib module getlogin_r for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getpagesize rpl_getpagesize
+#  endif
+_GL_FUNCDECL_RPL (getpagesize, int, (void));
+_GL_CXXALIAS_RPL (getpagesize, int, (void));
+# else
+#  if !1
+#   if !defined getpagesize
+/* This is for POSIX systems.  */
+#    if !defined _gl_getpagesize && defined _SC_PAGESIZE
+#     if ! (defined __VMS && __VMS_VER < 70000000)
+#      define _gl_getpagesize() sysconf (_SC_PAGESIZE)
+#     endif
+#    endif
+/* This is for older VMS.  */
+#    if !defined _gl_getpagesize && defined __VMS
+#     ifdef __ALPHA
+#      define _gl_getpagesize() 8192
+#     else
+#      define _gl_getpagesize() 512
+#     endif
+#    endif
+/* This is for BeOS.  */
+#    if !defined _gl_getpagesize && 0
+#     include <OS.h>
+#     if defined B_PAGE_SIZE
+#      define _gl_getpagesize() B_PAGE_SIZE
+#     endif
+#    endif
+/* This is for AmigaOS4.0.  */
+#    if !defined _gl_getpagesize && defined __amigaos4__
+#     define _gl_getpagesize() 2048
+#    endif
+/* This is for older Unix systems.  */
+#    if !defined _gl_getpagesize && 0
+#     include <sys/param.h>
+#     ifdef EXEC_PAGESIZE
+#      define _gl_getpagesize() EXEC_PAGESIZE
+#     else
+#      ifdef NBPG
+#       ifndef CLSIZE
+#        define CLSIZE 1
+#       endif
+#       define _gl_getpagesize() (NBPG * CLSIZE)
+#      else
+#       ifdef NBPC
+#        define _gl_getpagesize() NBPC
+#       endif
+#      endif
+#     endif
+#    endif
+#    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#     define getpagesize() _gl_getpagesize ()
+#    else
+#     if !GNULIB_defined_getpagesize_function
+_GL_UNISTD_INLINE int
+getpagesize ()
+{
+  return _gl_getpagesize ();
+}
+#      define GNULIB_defined_getpagesize_function 1
+#     endif
+#    endif
+#   endif
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t.  */
+_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void));
+# endif
+# if 1
+_GL_CXXALIASWARN (getpagesize);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getpagesize
+# if HAVE_RAW_DECL_GETPAGESIZE
+_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - "
+                 "use gnulib module getpagesize for portability");
+# endif
+#endif
+
+
+#if 0
+/* Return the next valid login shell on the system, or NULL when the end of
+   the list has been reached.  */
+# if !1
+_GL_FUNCDECL_SYS (getusershell, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getusershell, char *, (void));
+_GL_CXXALIASWARN (getusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef getusershell
+# if HAVE_RAW_DECL_GETUSERSHELL
+_GL_WARN_ON_USE (getusershell, "getusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if 0
+/* Rewind to pointer that is advanced at each getusershell() call.  */
+# if !1
+_GL_FUNCDECL_SYS (setusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (setusershell, void, (void));
+_GL_CXXALIASWARN (setusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef setusershell
+# if HAVE_RAW_DECL_SETUSERSHELL
+_GL_WARN_ON_USE (setusershell, "setusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if 0
+/* Free the pointer that is advanced at each getusershell() call and
+   associated resources.  */
+# if !1
+_GL_FUNCDECL_SYS (endusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (endusershell, void, (void));
+_GL_CXXALIASWARN (endusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef endusershell
+# if HAVE_RAW_DECL_ENDUSERSHELL
+_GL_WARN_ON_USE (endusershell, "endusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+
+#if 0
+/* Determine whether group id is in calling user's group list.  */
+# if !1
+_GL_FUNCDECL_SYS (group_member, int, (gid_t gid));
+# endif
+_GL_CXXALIAS_SYS (group_member, int, (gid_t gid));
+_GL_CXXALIASWARN (group_member);
+#elif defined GNULIB_POSIXCHECK
+# undef group_member
+# if HAVE_RAW_DECL_GROUP_MEMBER
+_GL_WARN_ON_USE (group_member, "group_member is unportable - "
+                 "use gnulib module group-member for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef isatty
+#   define isatty rpl_isatty
+#  endif
+_GL_FUNCDECL_RPL (isatty, int, (int fd));
+_GL_CXXALIAS_RPL (isatty, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (isatty, int, (int fd));
+# endif
+_GL_CXXALIASWARN (isatty);
+#elif defined GNULIB_POSIXCHECK
+# undef isatty
+# if HAVE_RAW_DECL_ISATTY
+_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - "
+                 "use gnulib module isatty for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Do not follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lchown
+#   define lchown rpl_lchown
+#  endif
+_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group));
+# endif
+_GL_CXXALIASWARN (lchown);
+#elif defined GNULIB_POSIXCHECK
+# undef lchown
+# if HAVE_RAW_DECL_LCHOWN
+_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - "
+                 "use gnulib module lchown for portability");
+# endif
+#endif
+
+
+#if 0
+/* Create a new hard link for an existing file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define link rpl_link
+#  endif
+_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2));
+# endif
+_GL_CXXALIASWARN (link);
+#elif defined GNULIB_POSIXCHECK
+# undef link
+# if HAVE_RAW_DECL_LINK
+_GL_WARN_ON_USE (link, "link is unportable - "
+                 "use gnulib module link for portability");
+# endif
+#endif
+
+
+#if 0
+/* Create a new hard link for an existing file, relative to two
+   directories.  FLAG controls whether symlinks are followed.
+   Return 0 if successful, otherwise -1 and errno set.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef linkat
+#   define linkat rpl_linkat
+#  endif
+_GL_FUNCDECL_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# endif
+_GL_CXXALIASWARN (linkat);
+#elif defined GNULIB_POSIXCHECK
+# undef linkat
+# if HAVE_RAW_DECL_LINKAT
+_GL_WARN_ON_USE (linkat, "linkat is unportable - "
+                 "use gnulib module linkat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
+   Return the new offset if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lseek rpl_lseek
+#  endif
+_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+# else
+_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (lseek);
+#elif defined GNULIB_POSIXCHECK
+# undef lseek
+# if HAVE_RAW_DECL_LSEEK
+_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some "
+                 "systems - use gnulib module lseek for portability");
+# endif
+#endif
+
+
+#if 0
+/* Create a pipe, defaulting to O_BINARY mode.
+   Store the read-end as fd[0] and the write-end as fd[1].
+   Return 0 upon success, or -1 with errno set upon failure.  */
+# if !1
+_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pipe, int, (int fd[2]));
+_GL_CXXALIASWARN (pipe);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe
+# if HAVE_RAW_DECL_PIPE
+_GL_WARN_ON_USE (pipe, "pipe is unportable - "
+                 "use gnulib module pipe-posix for portability");
+# endif
+#endif
+
+
+#if 1
+/* Create a pipe, applying the given flags when opening the read-end of the
+   pipe and the write-end of the pipe.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Store the read-end as fd[0] and the write-end as fd[1].
+   Return 0 upon success, or -1 with errno set upon failure.
+   See also the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define pipe2 rpl_pipe2
+#  endif
+_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags));
+# else
+_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags));
+# endif
+_GL_CXXALIASWARN (pipe2);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe2
+# if HAVE_RAW_DECL_PIPE2
+_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - "
+                 "use gnulib module pipe2 for portability");
+# endif
+#endif
+
+
+#if 0
+/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET.
+   Return the number of bytes placed into BUF if successful, otherwise
+   set errno and return -1.  0 indicates EOF.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pread
+#   define pread rpl_pread
+#  endif
+_GL_FUNCDECL_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pread);
+#elif defined GNULIB_POSIXCHECK
+# undef pread
+# if HAVE_RAW_DECL_PREAD
+_GL_WARN_ON_USE (pread, "pread is unportable - "
+                 "use gnulib module pread for portability");
+# endif
+#endif
+
+
+#if 0
+/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET.
+   Return the number of bytes written if successful, otherwise
+   set errno and return -1.  0 indicates nothing written.  See the
+   POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pwrite
+#   define pwrite rpl_pwrite
+#  endif
+_GL_FUNCDECL_RPL (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pwrite);
+#elif defined GNULIB_POSIXCHECK
+# undef pwrite
+# if HAVE_RAW_DECL_PWRITE
+_GL_WARN_ON_USE (pwrite, "pwrite is unportable - "
+                 "use gnulib module pwrite for portability");
+# endif
+#endif
+
+
+#if 0
+/* Read up to COUNT bytes from file descriptor FD into the buffer starting
+   at BUF.  See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef read
+#   define read rpl_read
+#  endif
+_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count));
+# else
+/* Need to cast, because on mingw, the third parameter is
+                                                          unsigned int count
+   and the return type is 'int'.  */
+_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (read);
+#endif
+
+
+#if 0
+/* Read the contents of the symbolic link FILE and place the first BUFSIZE
+   bytes of it into BUF.  Return the number of bytes placed into BUF if
+   successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define readlink rpl_readlink
+#  endif
+_GL_FUNCDECL_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# endif
+_GL_CXXALIASWARN (readlink);
+#elif defined GNULIB_POSIXCHECK
+# undef readlink
+# if HAVE_RAW_DECL_READLINK
+_GL_WARN_ON_USE (readlink, "readlink is unportable - "
+                 "use gnulib module readlink for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len)
+                  _GL_ARG_NONNULL ((2, 3)));
+# endif
+_GL_CXXALIAS_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len));
+_GL_CXXALIASWARN (readlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef readlinkat
+# if HAVE_RAW_DECL_READLINKAT
+_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - "
+                 "use gnulib module readlinkat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Remove the directory DIR.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define rmdir rpl_rmdir
+#  endif
+_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (rmdir, int, (char const *name));
+# else
+_GL_CXXALIAS_SYS (rmdir, int, (char const *name));
+# endif
+_GL_CXXALIASWARN (rmdir);
+#elif defined GNULIB_POSIXCHECK
+# undef rmdir
+# if HAVE_RAW_DECL_RMDIR
+_GL_WARN_ON_USE (rmdir, "rmdir is unportable - "
+                 "use gnulib module rmdir for portability");
+# endif
+#endif
+
+
+#if 0
+/* Set the host name of the machine.
+   The host name may or may not be fully qualified.
+
+   Put LEN bytes of NAME into the host name.
+   Return 0 if successful, otherwise, set errno and return -1.
+
+   Platforms with no ability to set the hostname return -1 and set
+   errno = ENOSYS.  */
+# if !1 || !1
+_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5
+   and FreeBSD 6.4 the second parameter is int.  On Solaris 11
+   2011-10, the first parameter is not const.  */
+_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len));
+_GL_CXXALIASWARN (sethostname);
+#elif defined GNULIB_POSIXCHECK
+# undef sethostname
+# if HAVE_RAW_DECL_SETHOSTNAME
+_GL_WARN_ON_USE (sethostname, "sethostname is unportable - "
+                 "use gnulib module sethostname for portability");
+# endif
+#endif
+
+
+#if 0
+/* Pause the execution of the current thread for N seconds.
+   Returns the number of seconds left to sleep.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sleep
+#   define sleep rpl_sleep
+#  endif
+_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n));
+_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n));
+#  endif
+_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n));
+# endif
+_GL_CXXALIASWARN (sleep);
+#elif defined GNULIB_POSIXCHECK
+# undef sleep
+# if HAVE_RAW_DECL_SLEEP
+_GL_WARN_ON_USE (sleep, "sleep is unportable - "
+                 "use gnulib module sleep for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef symlink
+#   define symlink rpl_symlink
+#  endif
+_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file));
+# endif
+_GL_CXXALIASWARN (symlink);
+#elif defined GNULIB_POSIXCHECK
+# undef symlink
+# if HAVE_RAW_DECL_SYMLINK
+_GL_WARN_ON_USE (symlink, "symlink is not portable - "
+                 "use gnulib module symlink for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file)
+                  _GL_ARG_NONNULL ((1, 3)));
+# endif
+_GL_CXXALIAS_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file));
+_GL_CXXALIASWARN (symlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef symlinkat
+# if HAVE_RAW_DECL_SYMLINKAT
+_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
+                 "use gnulib module symlinkat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Store at most BUFLEN characters of the pathname of the terminal FD is
+   open on in BUF.  Return 0 on success, otherwise an error number.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ttyname_r
+#   define ttyname_r rpl_ttyname_r
+#  endif
+_GL_FUNCDECL_RPL (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen));
+# endif
+_GL_CXXALIASWARN (ttyname_r);
+#elif defined GNULIB_POSIXCHECK
+# undef ttyname_r
+# if HAVE_RAW_DECL_TTYNAME_R
+_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - "
+                 "use gnulib module ttyname_r for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlink
+#   define unlink rpl_unlink
+#  endif
+_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unlink, int, (char const *file));
+# else
+_GL_CXXALIAS_SYS (unlink, int, (char const *file));
+# endif
+_GL_CXXALIASWARN (unlink);
+#elif defined GNULIB_POSIXCHECK
+# undef unlink
+# if HAVE_RAW_DECL_UNLINK
+_GL_WARN_ON_USE (unlink, "unlink is not portable - "
+                 "use gnulib module unlink for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlinkat
+#   define unlinkat rpl_unlinkat
+#  endif
+_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag));
+# endif
+_GL_CXXALIASWARN (unlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef unlinkat
+# if HAVE_RAW_DECL_UNLINKAT
+_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Pause the execution of the current thread for N microseconds.
+   Returns 0 on completion, or -1 on range error.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/usleep.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef usleep
+#   define usleep rpl_usleep
+#  endif
+_GL_FUNCDECL_RPL (usleep, int, (useconds_t n));
+_GL_CXXALIAS_RPL (usleep, int, (useconds_t n));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (usleep, int, (useconds_t n));
+#  endif
+_GL_CXXALIAS_SYS (usleep, int, (useconds_t n));
+# endif
+_GL_CXXALIASWARN (usleep);
+#elif defined GNULIB_POSIXCHECK
+# undef usleep
+# if HAVE_RAW_DECL_USLEEP
+_GL_WARN_ON_USE (usleep, "usleep is unportable - "
+                 "use gnulib module usleep for portability");
+# endif
+#endif
+
+
+#if 0
+/* Write up to COUNT bytes starting at BUF to file descriptor FD.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef write
+#   define write rpl_write
+#  endif
+_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count));
+# else
+/* Need to cast, because on mingw, the third parameter is
+                                                             unsigned int count
+   and the return type is 'int'.  */
+_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (write);
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_UNISTD_H */
+#endif /* _GL_UNISTD_H */
diff --git a/darwin-lib/unitypes.h b/darwin-lib/unitypes.h
new file mode 100644
index 0000000..b85b07a
--- /dev/null
+++ b/darwin-lib/unitypes.h
@@ -0,0 +1,47 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Elementary types and macros for the GNU UniString library.
+   Copyright (C) 2002, 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNITYPES_H
+#define _UNITYPES_H
+
+/* Get uint8_t, uint16_t, uint32_t.  */
+#include <stdint.h>
+
+/* Type representing a Unicode character.  */
+typedef uint32_t ucs4_t;
+
+/* Attribute of a function whose result depends only on the arguments
+   (not pointers!) and which has no side effects.  */
+#ifndef _UC_ATTRIBUTE_CONST
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+#  define _UC_ATTRIBUTE_CONST __attribute__ ((__const__))
+# else
+#  define _UC_ATTRIBUTE_CONST
+# endif
+#endif
+
+/* Attribute of a function whose result depends only on the arguments
+   (possibly pointers) and global memory, and which has no side effects.  */
+#ifndef _UC_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define _UC_ATTRIBUTE_PURE
+# endif
+#endif
+
+#endif /* _UNITYPES_H */
diff --git a/darwin-lib/uniwidth.h b/darwin-lib/uniwidth.h
new file mode 100644
index 0000000..c6466b2
--- /dev/null
+++ b/darwin-lib/uniwidth.h
@@ -0,0 +1,73 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Display width functions.
+   Copyright (C) 2001-2002, 2005, 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNIWIDTH_H
+#define _UNIWIDTH_H
+
+#include "unitypes.h"
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get locale_charset() declaration.  */
+#include "localcharset.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Display width.  */
+
+/* These functions are locale dependent.  The encoding argument identifies
+   the encoding (e.g. "ISO-8859-2" for Polish).  */
+
+/* Determine number of column positions required for UC.  */
+extern int
+       uc_width (ucs4_t uc, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+/* Determine number of column positions required for first N units
+   (or fewer if S ends before this) in S.  */
+extern int
+       u8_width (const uint8_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u16_width (const uint16_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u32_width (const uint32_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+/* Determine number of column positions required for S.  */
+extern int
+       u8_strwidth (const uint8_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u16_strwidth (const uint16_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u32_strwidth (const uint32_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNIWIDTH_H */
diff --git a/darwin-lib/warn-on-use.h b/darwin-lib/warn-on-use.h
new file mode 100644
index 0000000..9aebda4
--- /dev/null
+++ b/darwin-lib/warn-on-use.h
@@ -0,0 +1,46 @@
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
diff --git a/darwin-lib/wchar.h b/darwin-lib/wchar.h
new file mode 100644
index 0000000..df11351
--- /dev/null
+++ b/darwin-lib/wchar.h
@@ -0,0 +1,1340 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+   Copyright (C) 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
+/* Special invocation convention:
+   - Inside glibc and uClibc header files.
+   - On HP-UX 11.00 we have a sequence of nested includes
+     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+     and once directly.  In both situations 'wint_t' is not yet defined,
+     therefore we cannot provide the function overrides; instead include only
+     the system's <wchar.h>.
+   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+     the latter includes <wchar.h>.  But here, we have no way to detect whether
+     <wctype.h> is completely included or is still being included.  */
+
+#include_next <wchar.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+#if 0
+# include <features.h> /* for __GLIBC__ */
+#endif
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.
+   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
+   by <stddef.h>.
+   But avoid namespace pollution on glibc systems.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+#endif
+#ifndef __GLIBC__
+# include <stdio.h>
+# include <time.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <wchar.h>
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _GL_WCHAR_H
+#define _GL_WCHAR_H
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
+#if !1 && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
+   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
+   "unchanged by default argument promotions".  Override it.  */
+# if defined _MSC_VER
+#  if !GNULIB_defined_wint_t
+#   include <crtdefs.h>
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+   implementing mbrtowc for encodings like UTF-8.  */
+#if !(1 && 1) || 0
+# if !GNULIB_defined_mbstate_t
+typedef int rpl_mbstate_t;
+#  undef mbstate_t
+#  define mbstate_t rpl_mbstate_t
+#  define GNULIB_defined_mbstate_t 1
+# endif
+#endif
+
+
+/* Convert a single-byte character to a wide character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef btowc
+#   define btowc rpl_btowc
+#  endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+# endif
+_GL_CXXALIASWARN (btowc);
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+                 "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctob
+#   define wctob rpl_wctob
+#  endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+#  if !defined wctob && !1
+/* wctob is provided by gnulib, or wctob exists but is not declared.  */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (wctob);
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+                 "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsinit
+#   define mbsinit rpl_mbsinit
+#  endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsinit);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+                 "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrtowc
+#   define mbrtowc rpl_mbrtowc
+#  endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrtowc);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+                 "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrlen
+#   define mbrlen rpl_mbrlen
+#  endif
+_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrlen);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+                 "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsrtowcs
+#   define mbsrtowcs rpl_mbsrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+                 "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsnrtowcs
+#   define mbsnrtowcs rpl_mbsnrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsnrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+                 "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcrtomb
+#   define wcrtomb rpl_wcrtomb
+#  endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcrtomb);
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+                 "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsrtombs
+#   define wcsrtombs rpl_wcsrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+                 "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsnrtombs
+#   define wcsnrtombs rpl_wcsnrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsnrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+                 "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC.  */
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcwidth
+#   define wcwidth rpl_wcwidth
+#  endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+#  if !1
+/* wcwidth exists but is not declared.  */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+_GL_CXXALIASWARN (wcwidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+                 "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+/* Search N wide characters of S for C.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
+         wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wmemchr,
+                        wchar_t *, (const wchar_t *, wchar_t, size_t),
+                        const wchar_t *, (const wchar_t *, wchar_t, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
+                   (const wchar_t *s, wchar_t c, size_t n));
+# else
+_GL_CXXALIASWARN (wmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemchr
+# if HAVE_RAW_DECL_WMEMCHR
+_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
+                 "use gnulib module wmemchr for portability");
+# endif
+#endif
+
+
+/* Compare N wide characters of S1 and S2.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wmemcmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcmp
+# if HAVE_RAW_DECL_WMEMCMP
+_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
+                 "use gnulib module wmemcmp for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcpy
+# if HAVE_RAW_DECL_WMEMCPY
+_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
+                 "use gnulib module wmemcpy for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
+   overlapping memory areas.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemmove);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemmove
+# if HAVE_RAW_DECL_WMEMMOVE
+_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
+                 "use gnulib module wmemmove for portability");
+# endif
+#endif
+
+
+/* Set N wide characters of S to C.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN (wmemset);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemset
+# if HAVE_RAW_DECL_WMEMSET
+_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
+                 "use gnulib module wmemset for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
+_GL_CXXALIASWARN (wcslen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcslen
+# if HAVE_RAW_DECL_WCSLEN
+_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
+                 "use gnulib module wcslen for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S, but at most MAXLEN.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
+_GL_CXXALIASWARN (wcsnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnlen
+# if HAVE_RAW_DECL_WCSNLEN
+_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
+                 "use gnulib module wcsnlen for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscpy
+# if HAVE_RAW_DECL_WCSCPY
+_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
+                 "use gnulib module wcscpy for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpcpy
+# if HAVE_RAW_DECL_WCPCPY
+_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
+                 "use gnulib module wcpcpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N wide characters of SRC to DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncpy
+# if HAVE_RAW_DECL_WCSNCPY
+_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
+                 "use gnulib module wcsncpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpncpy
+# if HAVE_RAW_DECL_WCPNCPY
+_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
+                 "use gnulib module wcpncpy for portability");
+# endif
+#endif
+
+
+/* Append SRC onto DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscat
+# if HAVE_RAW_DECL_WCSCAT
+_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
+                 "use gnulib module wcscat for portability");
+# endif
+#endif
+
+
+/* Append no more than N wide characters of SRC onto DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncat
+# if HAVE_RAW_DECL_WCSNCAT
+_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
+                 "use gnulib module wcsncat for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
+                               _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscmp
+# if HAVE_RAW_DECL_WCSCMP
+_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
+                 "use gnulib module wcscmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N wide characters of S1 and S2.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncmp
+# if HAVE_RAW_DECL_WCSNCMP
+_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
+                 "use gnulib module wcsncmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, ignoring case.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscasecmp
+# if HAVE_RAW_DECL_WCSCASECMP
+_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
+                 "use gnulib module wcscasecmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncasecmp
+# if HAVE_RAW_DECL_WCSNCASECMP
+_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
+                 "use gnulib module wcsncasecmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
+   category of the current locale.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+# endif
+_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscoll);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscoll
+# if HAVE_RAW_DECL_WCSCOLL
+_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
+                 "use gnulib module wcscoll for portability");
+# endif
+#endif
+
+
+/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
+   to two transformed strings the result is the as applying 'wcscoll' to the
+   original strings.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsxfrm);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsxfrm
+# if HAVE_RAW_DECL_WCSXFRM
+_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
+                 "use gnulib module wcsxfrm for portability");
+# endif
+#endif
+
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# endif
+_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+_GL_CXXALIASWARN (wcsdup);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsdup
+# if HAVE_RAW_DECL_WCSDUP
+_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
+                 "use gnulib module wcsdup for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of WC in WCS.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                     _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcschr (const wchar_t *, wchar_t);
+         wchar_t * std::wcschr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcschr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcschr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcschr
+# if HAVE_RAW_DECL_WCSCHR
+_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
+                 "use gnulib module wcschr for portability");
+# endif
+#endif
+
+
+/* Find the last occurrence of WC in WCS.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
+         wchar_t * std::wcsrchr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcsrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrchr
+# if HAVE_RAW_DECL_WCSRCHR
+_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
+                 "use gnulib module wcsrchr for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters not in REJECT.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
+_GL_CXXALIASWARN (wcscspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscspn
+# if HAVE_RAW_DECL_WCSCSPN
+_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
+                 "use gnulib module wcscspn for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters in ACCEPT.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
+                                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN (wcsspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsspn
+# if HAVE_RAW_DECL_WCSSPN
+_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
+                 "use gnulib module wcsspn for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence in WCS of any character in ACCEPT.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
+                  (const wchar_t *wcs, const wchar_t *accept)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
+                   (wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
+                   (const wchar_t *wcs, const wchar_t *accept));
+# else
+_GL_CXXALIASWARN (wcspbrk);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcspbrk
+# if HAVE_RAW_DECL_WCSPBRK
+_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
+                 "use gnulib module wcspbrk for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
+                  (const wchar_t *haystack, const wchar_t *needle)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsstr,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
+                   (wchar_t *haystack, const wchar_t *needle));
+_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
+                   (const wchar_t *haystack, const wchar_t *needle));
+# else
+_GL_CXXALIASWARN (wcsstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsstr
+# if HAVE_RAW_DECL_WCSSTR
+_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
+                 "use gnulib module wcsstr for portability");
+# endif
+#endif
+
+
+/* Divide WCS into tokens separated by characters in DELIM.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+# endif
+_GL_CXXALIAS_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+_GL_CXXALIASWARN (wcstok);
+#elif defined GNULIB_POSIXCHECK
+# undef wcstok
+# if HAVE_RAW_DECL_WCSTOK
+_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
+                 "use gnulib module wcstok for portability");
+# endif
+#endif
+
+
+/* Determine number of column positions required for first N wide
+   characters (or fewer if S ends before this) in S.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcswidth
+#   define wcswidth rpl_wcswidth
+#  endif
+_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
+# endif
+_GL_CXXALIASWARN (wcswidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcswidth
+# if HAVE_RAW_DECL_WCSWIDTH
+_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
+                 "use gnulib module wcswidth for portability");
+# endif
+#endif
+
+
+#endif /* _GL_WCHAR_H */
+#endif /* _GL_WCHAR_H */
+#endif
diff --git a/darwin-lib/wctype.h b/darwin-lib/wctype.h
new file mode 100644
index 0000000..196e4ea
--- /dev/null
+++ b/darwin-lib/wctype.h
@@ -0,0 +1,806 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
+
+   Copyright (C) 2006-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible and Paul Eggert.  */
+
+/*
+ * ISO C 99 <wctype.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/wctype.h.html>
+ *
+ * iswctype, towctrans, towlower, towupper, wctrans, wctype,
+ * wctrans_t, and wctype_t are not yet implemented.
+ */
+
+#ifndef _GL_WCTYPE_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if 1
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
+   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+
+/* Include the original <wctype.h> if it exists.
+   BeOS 5 has the functions but no <wctype.h>.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <wctype.h>
+#endif
+
+#ifndef _GL_WCTYPE_H
+#define _GL_WCTYPE_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_WCTYPE_INLINE
+# define _GL_WCTYPE_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
+   #defines a number of identifiers in the application namespace.  Revert
+   these #defines.  */
+#ifdef __sun
+# undef multibyte
+# undef eucw1
+# undef eucw2
+# undef eucw3
+# undef scrw1
+# undef scrw2
+# undef scrw3
+#endif
+
+/* Define wint_t and WEOF.  (Also done in wchar.in.h.)  */
+#if !1 && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
+   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
+   "unchanged by default argument promotions".  Override it.  */
+# if defined _MSC_VER
+#  if !GNULIB_defined_wint_t
+#   include <crtdefs.h>
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+#if !GNULIB_defined_wctype_functions
+
+/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
+   Linux libc5 has <wctype.h> and the functions but they are broken.
+   Assume all 11 functions (all isw* except iswblank) are implemented the
+   same way, or not at all.  */
+# if ! 1 || 0
+
+/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
+   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
+   refer to system functions like _iswctype that are not in the
+   standard C library.  Rather than try to get ancient buggy
+   implementations like this to work, just disable them.  */
+#  undef iswalnum
+#  undef iswalpha
+#  undef iswblank
+#  undef iswcntrl
+#  undef iswdigit
+#  undef iswgraph
+#  undef iswlower
+#  undef iswprint
+#  undef iswpunct
+#  undef iswspace
+#  undef iswupper
+#  undef iswxdigit
+#  undef towlower
+#  undef towupper
+
+/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
+#  if 0
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswalnum rpl_iswalnum
+#    define iswalpha rpl_iswalpha
+#    define iswblank rpl_iswblank
+#    define iswcntrl rpl_iswcntrl
+#    define iswdigit rpl_iswdigit
+#    define iswgraph rpl_iswgraph
+#    define iswlower rpl_iswlower
+#    define iswprint rpl_iswprint
+#    define iswpunct rpl_iswpunct
+#    define iswspace rpl_iswspace
+#    define iswupper rpl_iswupper
+#    define iswxdigit rpl_iswxdigit
+#   endif
+#  endif
+#  if 0
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define towlower rpl_towlower
+#    define towupper rpl_towupper
+#   endif
+#  endif
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswalnum
+#  else
+iswalnum
+#  endif
+         (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswalpha
+#  else
+iswalpha
+#  endif
+         (wint_t wc)
+{
+  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswblank
+#  else
+iswblank
+#  endif
+         (wint_t wc)
+{
+  return wc == ' ' || wc == '\t';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswcntrl
+#  else
+iswcntrl
+#  endif
+        (wint_t wc)
+{
+  return (wc & ~0x1f) == 0 || wc == 0x7f;
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswdigit
+#  else
+iswdigit
+#  endif
+         (wint_t wc)
+{
+  return wc >= '0' && wc <= '9';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswgraph
+#  else
+iswgraph
+#  endif
+         (wint_t wc)
+{
+  return wc >= '!' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswlower
+#  else
+iswlower
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'a' && wc <= 'z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswprint
+#  else
+iswprint
+#  endif
+         (wint_t wc)
+{
+  return wc >= ' ' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswpunct
+#  else
+iswpunct
+#  endif
+         (wint_t wc)
+{
+  return (wc >= '!' && wc <= '~'
+          && !((wc >= '0' && wc <= '9')
+               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswspace
+#  else
+iswspace
+#  endif
+         (wint_t wc)
+{
+  return (wc == ' ' || wc == '\t'
+          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswupper
+#  else
+iswupper
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'A' && wc <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswxdigit
+#  else
+iswxdigit
+#  endif
+          (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
+}
+
+_GL_WCTYPE_INLINE wint_t
+#  if 0
+rpl_towlower
+#  else
+towlower
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
+}
+
+_GL_WCTYPE_INLINE wint_t
+#  if 0
+rpl_towupper
+#  else
+towupper
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
+}
+
+# elif 1 && (! 1 || 0)
+/* Only the iswblank function is missing.  */
+
+#  if 0
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswblank rpl_iswblank
+#   endif
+_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
+#  else
+_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
+#  endif
+
+# endif
+
+# if defined __MINGW32__
+
+/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
+   The functions towlower and towupper are implemented in the MSVCRT library
+   to take a wchar_t argument and return a wchar_t result.  mingw declares
+   these functions to take a wint_t argument and return a wint_t result.
+   This means that:
+   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
+      function will look only at the lower 16 bits.  This is allowed according
+      to POSIX.
+   2. The return value is returned in the lower 16 bits of the result register.
+      The upper 16 bits are random: whatever happened to be in that part of the
+      result register.  We need to fix this by adding a zero-extend from
+      wchar_t to wint_t after the call.  */
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towlower (wint_t wc)
+{
+  return (wint_t) (wchar_t) towlower (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towlower rpl_towlower
+#  endif
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towupper (wint_t wc)
+{
+  return (wint_t) (wchar_t) towupper (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towupper rpl_towupper
+#  endif
+
+# endif /* __MINGW32__ */
+
+# define GNULIB_defined_wctype_functions 1
+#endif
+
+#if 0
+_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (iswalnum);
+_GL_CXXALIASWARN (iswalpha);
+_GL_CXXALIASWARN (iswcntrl);
+_GL_CXXALIASWARN (iswdigit);
+_GL_CXXALIASWARN (iswgraph);
+_GL_CXXALIASWARN (iswlower);
+_GL_CXXALIASWARN (iswprint);
+_GL_CXXALIASWARN (iswpunct);
+_GL_CXXALIASWARN (iswspace);
+_GL_CXXALIASWARN (iswupper);
+_GL_CXXALIASWARN (iswxdigit);
+
+#if 1
+# if 0 || 0
+_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
+# else
+_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (iswblank);
+#endif
+
+#if !1
+# if !GNULIB_defined_wctype_t
+typedef void * wctype_t;
+#  define GNULIB_defined_wctype_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character property.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
+_GL_CXXALIASWARN (wctype);
+#elif defined GNULIB_POSIXCHECK
+# undef wctype
+# if HAVE_RAW_DECL_WCTYPE
+_GL_WARN_ON_USE (wctype, "wctype is unportable - "
+                 "use gnulib module wctype for portability");
+# endif
+#endif
+
+/* Test whether a wide character has a given property.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctype() function.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+# endif
+_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+_GL_CXXALIASWARN (iswctype);
+#elif defined GNULIB_POSIXCHECK
+# undef iswctype
+# if HAVE_RAW_DECL_ISWCTYPE
+_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
+                 "use gnulib module iswctype for portability");
+# endif
+#endif
+
+#if 0 || defined __MINGW32__
+_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (towlower);
+_GL_CXXALIASWARN (towupper);
+
+#if !1
+# if !GNULIB_defined_wctrans_t
+typedef void * wctrans_t;
+#  define GNULIB_defined_wctrans_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character case conversion.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
+_GL_CXXALIASWARN (wctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef wctrans
+# if HAVE_RAW_DECL_WCTRANS
+_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
+                 "use gnulib module wctrans for portability");
+# endif
+#endif
+
+/* Perform a given case conversion on a wide character.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctrans() function.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+# endif
+_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+_GL_CXXALIASWARN (towctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef towctrans
+# if HAVE_RAW_DECL_TOWCTRANS
+_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
+                 "use gnulib module towctrans for portability");
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_WCTYPE_H */
+#endif /* _GL_WCTYPE_H */
diff --git a/data/Makefile b/data/Makefile
deleted file mode 100644
index b69236d..0000000
--- a/data/Makefile
+++ /dev/null
@@ -1,412 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# data/Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-
-srcdir = .
-top_srcdir = ..
-
-pkgdatadir = $(datadir)/bison
-pkglibdir = $(libdir)/bison
-pkgincludedir = $(includedir)/bison
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /usr/bin/install -c
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-subdir = data
-DIST_COMMON = README $(dist_m4sugar_DATA) $(dist_pkgdata_DATA) \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
-	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
-	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
-	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(m4sugardir)" "$(DESTDIR)$(pkgdatadir)"
-dist_m4sugarDATA_INSTALL = $(INSTALL_DATA)
-dist_pkgdataDATA_INSTALL = $(INSTALL_DATA)
-DATA = $(dist_m4sugar_DATA) $(dist_pkgdata_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9
-AMDEP_FALSE = #
-AMDEP_TRUE = 
-AMTAR = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar
-AUTOCONF = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader
-AUTOM4TE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te
-AUTOMAKE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9
-AWK = gawk
-BISON_CXX_WORKS = :
-BISON_CXX_WORKS_FALSE = #
-BISON_CXX_WORKS_TRUE = 
-BISON_LOCALEDIR = /usr/share/locale
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
-CPP = gcc -E
-CPPFLAGS = 
-CXX = g++
-CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = grep -E
-EXEEXT = 
-GCC = yes
-GETOPT_H = 
-GMSGFMT = /usr/bin/msgfmt
-HAVE__BOOL = 1
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
-INTLLIBS = 
-INTL_MACOSX_LIBS = 
-LDFLAGS = 
-LEX = flex
-LEXLIB = -lfl
-LEX_OUTPUT_ROOT = lex.yy
-LIBICONV = -liconv
-LIBINTL = 
-LIBOBJS =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-LIBS = 
-LTLIBICONV = -liconv
-LTLIBINTL = 
-LTLIBOBJS =  dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo
-M4 = /usr/bin/m4
-MAKEINFO = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo
-MKINSTALLDIRS = $(top_builddir)/build-aux/mkinstalldirs
-MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge
-O0CFLAGS = -g 
-O0CXXFLAGS = -g 
-OBJEXT = o
-PACKAGE = bison
-PACKAGE_BUGREPORT = bug-bison@gnu.org
-PACKAGE_NAME = GNU Bison
-PACKAGE_STRING = GNU Bison 2.3
-PACKAGE_TARNAME = bison
-PACKAGE_VERSION = 2.3
-PATH_SEPARATOR = :
-POSUB = po
-RANLIB = ranlib
-SET_MAKE = 
-SHELL = /bin/sh
-STDBOOL_H = 
-STRIP = 
-UNISTD_H = 
-USE_NLS = yes
-VALGRIND = 
-VERSION = 2.3
-WARNING_CFLAGS = 
-WARNING_CXXFLAGS = 
-WERROR_CFLAGS = 
-XGETTEXT = /usr/bin/xgettext
-YACC = bison -y
-YACC_LIBRARY = liby.a
-YACC_SCRIPT = yacc
-ac_ct_CC = gcc
-ac_ct_CXX = g++
-ac_ct_RANLIB = ranlib
-ac_ct_STRIP = 
-aclocaldir = ${datadir}/aclocal
-am__fastdepCC_FALSE = #
-am__fastdepCC_TRUE = 
-am__fastdepCXX_FALSE = #
-am__fastdepCXX_TRUE = 
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-datadir = ${prefix}/share
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-includedir = ${prefix}/include
-infodir = ${prefix}/info
-install_sh = /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localstatedir = ${prefix}/var
-mandir = ${prefix}/man
-mkdir_p = mkdir -p --
-oldincludedir = /usr/include
-prefix = /home/phanna/src/bison
-program_transform_name = s,x,x,
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-sysconfdir = ${prefix}/etc
-target_alias = 
-dist_pkgdata_DATA = README \
-   c.m4 yacc.c glr.c \
-   c++.m4 location.cc lalr1.cc glr.cc
-
-m4sugardir = $(pkgdatadir)/m4sugar
-dist_m4sugar_DATA = m4sugar/m4sugar.m4
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  data/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  data/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-uninstall-info-am:
-install-dist_m4sugarDATA: $(dist_m4sugar_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(m4sugardir)" || $(mkdir_p) "$(DESTDIR)$(m4sugardir)"
-	@list='$(dist_m4sugar_DATA)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(dist_m4sugarDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(m4sugardir)/$$f'"; \
-	  $(dist_m4sugarDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(m4sugardir)/$$f"; \
-	done
-
-uninstall-dist_m4sugarDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(dist_m4sugar_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(m4sugardir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(m4sugardir)/$$f"; \
-	done
-install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
-	@$(NORMAL_INSTALL)
-	test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)"
-	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
-	  $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
-	done
-
-uninstall-dist_pkgdataDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
-	done
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	$(mkdir_p) $(distdir)/m4sugar
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
-	for dir in "$(DESTDIR)$(m4sugardir)" "$(DESTDIR)$(pkgdatadir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-dist_m4sugarDATA install-dist_pkgdataDATA
-
-install-exec-am:
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-dist_m4sugarDATA uninstall-dist_pkgdataDATA \
-	uninstall-info-am
-
-.PHONY: all all-am check check-am clean clean-generic distclean \
-	distclean-generic distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am \
-	install-dist_m4sugarDATA install-dist_pkgdataDATA install-exec \
-	install-exec-am install-info install-info-am install-man \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
-	uninstall-dist_m4sugarDATA uninstall-dist_pkgdataDATA \
-	uninstall-info-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/data/Makefile.am b/data/Makefile.am
index 7c4ccf9..1fd10b4 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,23 +1,30 @@
-## Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+## Copyright (C) 2002, 2005-2012 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 of the License, or
-## (at your option) any later version.
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
-## 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., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301  USA
-
-dist_pkgdata_DATA = README \
-   c.m4 yacc.c glr.c \
-   c++.m4 location.cc lalr1.cc glr.cc
+dist_pkgdata_DATA = README bison.m4 \
+   c-like.m4 \
+   c-skel.m4 c.m4 yacc.c glr.c \
+   c++-skel.m4 c++.m4 location.cc lalr1.cc glr.cc stack.hh \
+   java-skel.m4 java.m4 lalr1.java
 
 m4sugardir = $(pkgdatadir)/m4sugar
-dist_m4sugar_DATA = m4sugar/m4sugar.m4
+dist_m4sugar_DATA = m4sugar/m4sugar.m4 m4sugar/foreach.m4
+
+xsltdir = $(pkgdatadir)/xslt
+dist_xslt_DATA =				\
+   xslt/bison.xsl				\
+   xslt/xml2dot.xsl				\
+   xslt/xml2text.xsl				\
+   xslt/xml2xhtml.xsl
diff --git a/data/Makefile.in b/data/Makefile.in
index 3a5f561..aae8326 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,15 +14,41 @@
 
 @SET_MAKE@
 
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
+pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -38,145 +64,1253 @@
 host_triplet = @host@
 subdir = data
 DIST_COMMON = README $(dist_m4sugar_DATA) $(dist_pkgdata_DATA) \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
+	$(dist_xslt_DATA) $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
 	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
 	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
 	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
     *) f=$$p;; \
   esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(m4sugardir)" "$(DESTDIR)$(pkgdatadir)"
-dist_m4sugarDATA_INSTALL = $(INSTALL_DATA)
-dist_pkgdataDATA_INSTALL = $(INSTALL_DATA)
-DATA = $(dist_m4sugar_DATA) $(dist_pkgdata_DATA)
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(m4sugardir)" "$(DESTDIR)$(pkgdatadir)" \
+	"$(DESTDIR)$(xsltdir)"
+DATA = $(dist_m4sugar_DATA) $(dist_pkgdata_DATA) $(dist_xslt_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOM4TE = @AUTOM4TE@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BISON_CXX_WORKS = @BISON_CXX_WORKS@
-BISON_CXX_WORKS_FALSE = @BISON_CXX_WORKS_FALSE@
-BISON_CXX_WORKS_TRUE = @BISON_CXX_WORKS_TRUE@
+BISON_C_WORKS = @BISON_C_WORKS@
 BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
 CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DOT = @DOT@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
 GCC = @GCC@
 GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
 HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
 LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
 LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
 MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
+MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
-O0CFLAGS = @O0CFLAGS@
-O0CXXFLAGS = @O0CXXFLAGS@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
 POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
 STRIP = @STRIP@
-UNISTD_H = @UNISTD_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
 VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
 YACC = @YACC@
 YACC_LIBRARY = @YACC_LIBRARY@
 YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 aclocaldir = @aclocaldir@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -188,34 +1322,61 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-dist_pkgdata_DATA = README \
-   c.m4 yacc.c glr.c \
-   c++.m4 location.cc lalr1.cc glr.cc
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+dist_pkgdata_DATA = README bison.m4 \
+   c-like.m4 \
+   c-skel.m4 c.m4 yacc.c glr.c \
+   c++-skel.m4 c++.m4 location.cc lalr1.cc glr.cc stack.hh \
+   java-skel.m4 java.m4 lalr1.java
 
 m4sugardir = $(pkgdatadir)/m4sugar
-dist_m4sugar_DATA = m4sugar/m4sugar.m4
+dist_m4sugar_DATA = m4sugar/m4sugar.m4 m4sugar/foreach.m4
+xsltdir = $(pkgdatadir)/xslt
+dist_xslt_DATA = \
+   xslt/bison.xsl				\
+   xslt/xml2dot.xsl				\
+   xslt/xml2text.xsl				\
+   xslt/xml2xhtml.xsl
+
 all: all-am
 
 .SUFFIXES:
@@ -223,14 +1384,14 @@
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  data/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  data/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits data/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits data/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -248,73 +1409,106 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-uninstall-info-am:
+$(am__aclocal_m4_deps):
 install-dist_m4sugarDATA: $(dist_m4sugar_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(m4sugardir)" || $(mkdir_p) "$(DESTDIR)$(m4sugardir)"
-	@list='$(dist_m4sugar_DATA)'; for p in $$list; do \
+	@list='$(dist_m4sugar_DATA)'; test -n "$(m4sugardir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(m4sugardir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(m4sugardir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(dist_m4sugarDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(m4sugardir)/$$f'"; \
-	  $(dist_m4sugarDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(m4sugardir)/$$f"; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4sugardir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(m4sugardir)" || exit $$?; \
 	done
 
 uninstall-dist_m4sugarDATA:
 	@$(NORMAL_UNINSTALL)
-	@list='$(dist_m4sugar_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(m4sugardir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(m4sugardir)/$$f"; \
-	done
+	@list='$(dist_m4sugar_DATA)'; test -n "$(m4sugardir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(m4sugardir)'; $(am__uninstall_files_from_dir)
 install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)"
-	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
+	@list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
-	  $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
 	done
 
 uninstall-dist_pkgdataDATA:
 	@$(NORMAL_UNINSTALL)
-	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
+	@list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
+install-dist_xsltDATA: $(dist_xslt_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_xslt_DATA)'; test -n "$(xsltdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(xsltdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(xsltdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(xsltdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(xsltdir)" || exit $$?; \
 	done
+
+uninstall-dist_xsltDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_xslt_DATA)'; test -n "$(xsltdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(xsltdir)'; $(am__uninstall_files_from_dir)
 tags: TAGS
 TAGS:
 
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
-	$(mkdir_p) $(distdir)/m4sugar
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -322,8 +1516,8 @@
 check: check-am
 all-am: Makefile $(DATA)
 installdirs:
-	for dir in "$(DESTDIR)$(m4sugardir)" "$(DESTDIR)$(pkgdatadir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	for dir in "$(DESTDIR)$(m4sugardir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(xsltdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
 install-exec: install-exec-am
@@ -335,16 +1529,22 @@
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -363,18 +1563,39 @@
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
 
-install-data-am: install-dist_m4sugarDATA install-dist_pkgdataDATA
+install-data-am: install-dist_m4sugarDATA install-dist_pkgdataDATA \
+	install-dist_xsltDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
 
 install-exec-am:
 
+install-html: install-html-am
+
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -394,18 +1615,24 @@
 ps-am:
 
 uninstall-am: uninstall-dist_m4sugarDATA uninstall-dist_pkgdataDATA \
-	uninstall-info-am
+	uninstall-dist_xsltDATA
+
+.MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic distclean \
 	distclean-generic distdir dvi dvi-am html html-am info info-am \
 	install install-am install-data install-data-am \
-	install-dist_m4sugarDATA install-dist_pkgdataDATA install-exec \
-	install-exec-am install-info install-info-am install-man \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
+	install-dist_m4sugarDATA install-dist_pkgdataDATA \
+	install-dist_xsltDATA install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am uninstall uninstall-am \
 	uninstall-dist_m4sugarDATA uninstall-dist_pkgdataDATA \
-	uninstall-info-am
+	uninstall-dist_xsltDATA
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/data/README b/data/README
index 2267791..e78c1cf 100644
--- a/data/README
+++ b/data/README
@@ -1,45 +1,70 @@
 -*- outline -*-
 
-This directory contains Bison skeletons: the general shapes of the
-different parser kinds, that are specialized for specific grammars by
-the bison program.
+This directory contains data needed by Bison.
 
-Currently, there are only three supported skeletons:
+* Skeletons
+Bison skeletons: the general shapes of the different parser kinds,
+that are specialized for specific grammars by the bison program.
+
+Currently, the supported skeletons are:
 
 - yacc.c
   It used to be named bison.simple: it corresponds to C Yacc
   compatible LALR(1) parsers.
 
 - lalr1.cc
-  Produces a C++ parser class.  It is still very experimental, and not
-  yet supported.  Please, subscribe to bison-patches@gnu.org.
+  Produces a C++ parser class.
+
+- lalr1.java
+  Produces a Java parser class.
 
 - glr.c
   A Generalized LR C parser based on Bison's LALR(1) tables.
 
+- glr.cc
+  A Generalized LR C++ parser.  Actually a C++ wrapper around glr.c.
+
 These skeletons are the only ones supported by the Bison team.
 Because the interface between skeletons and the bison program is not
 finished, *we are not bound to it*.  In particular, Bison is not
 mature enough for us to consider that ``foreign skeletons'' are
 supported.
 
+* m4sugar
+This directory contains M4sugar, sort of an extended library for M4,
+which is used by Bison to instantiate the skeletons.
+
+* xslt
+This directory contains XSLT programs that transform Bison's XML output
+into various formats.
+
+- bison.xsl
+  A library of routines used by the other XSLT programs.
+
+- xml2dot.xsl
+  Conversion into GraphViz's dot format.
+
+- xml2text.xsl
+  Conversion into text.
+
+- xml2xhtml.xsl
+  Conversion into XHTML.
+
 -----
 
-Copyright (C) 2002 Free Software Foundation, Inc.
+Copyright (C) 2002, 2008-2012 Free Software Foundation, Inc.
 
 This file is part of GNU Bison.
 
-GNU Bison is free software; you can redistribute it and/or modify
+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.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
-GNU Bison is distributed in the hope that it will be useful,
+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 Bison; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/data/bison.m4 b/data/bison.m4
new file mode 100644
index 0000000..a24b162
--- /dev/null
+++ b/data/bison.m4
@@ -0,0 +1,610 @@
+                                                            -*- Autoconf -*-
+
+# Language-independent M4 Macros for Bison.
+
+# Copyright (C) 2002, 2004-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+
+## ---------------- ##
+## Identification.  ##
+## ---------------- ##
+
+# b4_copyright(TITLE, YEARS)
+# --------------------------
+m4_define([b4_copyright],
+[b4_comment([A Bison parser, made by GNU Bison b4_version.])
+
+b4_comment([$1
+
+m4_text_wrap([Copyright (C) $2 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.])
+
+b4_comment([As a special exception, you may create a larger work that contains
+part or all of the Bison parser skeleton and distribute that work
+under terms of your choice, so long as that work isn't itself a
+parser generator using the skeleton or a modified version thereof
+as a parser skeleton.  Alternatively, if you modify or redistribute
+the parser skeleton itself, you may (at your option) remove this
+special exception, which will cause the skeleton and the resulting
+Bison output files to be licensed under the GNU General Public
+License without this special exception.
+
+This special exception was added by the Free Software Foundation in
+version 2.2 of Bison.])])
+
+
+## -------- ##
+## Output.  ##
+## -------- ##
+
+# b4_output_begin(FILE)
+# ---------------------
+# Enable output, i.e., send to diversion 0, expand after "#", and
+# generate the tag to output into FILE.  Must be followed by EOL.
+m4_define([b4_output_begin],
+[m4_changecom()
+m4_divert_push(0)dnl
+@output(m4_unquote([$1])@)@dnl
+])
+
+
+# b4_output_end()
+# ---------------
+# Output nothing, restore # as comment character (no expansions after #).
+m4_define([b4_output_end],
+[m4_divert_pop(0)
+m4_changecom([#])
+])
+
+
+## ---------------- ##
+## Error handling.  ##
+## ---------------- ##
+
+# The following error handling macros print error directives that should not
+# become arguments of other macro invocations since they would likely then be
+# mangled.  Thus, they print to stdout directly.
+
+# b4_cat(TEXT)
+# ------------
+# Write TEXT to stdout.  Precede the final newline with an @ so that it's
+# escaped.  For example:
+#
+#   b4_cat([[@complain(invalid input@)]])
+m4_define([b4_cat],
+[m4_syscmd([cat <<'_m4eof'
+]m4_bpatsubst(m4_dquote($1), [_m4eof], [_m4@`eof])[@
+_m4eof
+])dnl
+m4_if(m4_sysval, [0], [], [m4_fatal([$0: cannot write to stdout])])])
+
+# b4_error(KIND, FORMAT, [ARG1], [ARG2], ...)
+# -------------------------------------------
+# Write @KIND(FORMAT@,ARG1@,ARG2@,...@) to stdout.
+#
+# For example:
+#
+#   b4_error([[warn]], [[invalid value for '%s': %s]], [[foo]], [[3]])
+m4_define([b4_error],
+[b4_cat([[@]$1[(]$2[]]dnl
+[m4_if([$#], [2], [],
+       [m4_foreach([b4_arg],
+                   m4_dquote(m4_shift(m4_shift($@))),
+                   [[@,]b4_arg])])[@)]])])
+
+# b4_error_at(KIND, START, END, FORMAT, [ARG1], [ARG2], ...)
+# ----------------------------------------------------------
+# Write @KIND_at(START@,END@,FORMAT@,ARG1@,ARG2@,...@) to stdout.
+#
+# For example:
+#
+#   b4_error_at([[complain]], [[input.y:2.3]], [[input.y:5.4]],
+#               [[invalid %s]], [[foo]])
+m4_define([b4_error_at],
+[b4_cat([[@]$1[_at(]$2[@,]$3[@,]$4[]]dnl
+[m4_if([$#], [4], [],
+       [m4_foreach([b4_arg],
+                   m4_dquote(m4_shift(m4_shift(m4_shift(m4_shift($@))))),
+                   [[@,]b4_arg])])[@)]])])
+
+# b4_warn(FORMAT, [ARG1], [ARG2], ...)
+# ------------------------------------
+# Write @warn(FORMAT@,ARG1@,ARG2@,...@) to stdout.
+#
+# For example:
+#
+#   b4_warn([[invalid value for '%s': %s]], [[foo]], [[3]])
+#
+# As a simple test suite, this:
+#
+#   m4_divert(-1)
+#   m4_define([asdf], [ASDF])
+#   m4_define([fsa], [FSA])
+#   m4_define([fdsa], [FDSA])
+#   b4_warn([[[asdf), asdf]]], [[[fsa), fsa]]], [[[fdsa), fdsa]]])
+#   b4_warn([[asdf), asdf]], [[fsa), fsa]], [[fdsa), fdsa]])
+#   b4_warn()
+#   b4_warn(1)
+#   b4_warn(1, 2)
+#
+# Should produce this without newlines:
+#
+#   @warn([asdf), asdf]@,[fsa), fsa]@,[fdsa), fdsa]@)
+#   @warn(asdf), asdf@,fsa), fsa@,fdsa), fdsa@)
+#   @warn(@)
+#   @warn(1@)
+#   @warn(1@,2@)
+m4_define([b4_warn],
+[b4_error([[warn]], $@)])
+
+# b4_warn_at(START, END, FORMAT, [ARG1], [ARG2], ...)
+# ---------------------------------------------------
+# Write @warn(START@,END@,FORMAT@,ARG1@,ARG2@,...@) to stdout.
+#
+# For example:
+#
+#   b4_warn_at([[input.y:2.3]], [[input.y:5.4]], [[invalid %s]], [[foo]])
+m4_define([b4_warn_at],
+[b4_error_at([[warn]], $@)])
+
+# b4_complain(FORMAT, [ARG1], [ARG2], ...)
+# ----------------------------------------
+# Write @complain(FORMAT@,ARG1@,ARG2@,...@) to stdout.
+#
+# See b4_warn example.
+m4_define([b4_complain],
+[b4_error([[complain]], $@)])
+
+# b4_complain_at(START, END, FORMAT, [ARG1], [ARG2], ...)
+# -------------------------------------------------------
+# Write @complain(START@,END@,FORMAT@,ARG1@,ARG2@,...@) to stdout.
+#
+# See b4_warn_at example.
+m4_define([b4_complain_at],
+[b4_error_at([[complain]], $@)])
+
+# b4_fatal(FORMAT, [ARG1], [ARG2], ...)
+# -------------------------------------
+# Write @fatal(FORMAT@,ARG1@,ARG2@,...@) to stdout and exit.
+#
+# See b4_warn example.
+m4_define([b4_fatal],
+[b4_error([[fatal]], $@)dnl
+m4_exit(1)])
+
+# b4_fatal_at(START, END, FORMAT, [ARG1], [ARG2], ...)
+# ----------------------------------------------------
+# Write @fatal(START@,END@,FORMAT@,ARG1@,ARG2@,...@) to stdout and exit.
+#
+# See b4_warn_at example.
+m4_define([b4_fatal_at],
+[b4_error_at([[fatal]], $@)dnl
+m4_exit(1)])
+
+
+## ------------ ##
+## Data Types.  ##
+## ------------ ##
+
+# b4_ints_in(INT1, INT2, LOW, HIGH)
+# ---------------------------------
+# Return 1 iff both INT1 and INT2 are in [LOW, HIGH], 0 otherwise.
+m4_define([b4_ints_in],
+[m4_eval([$3 <= $1 && $1 <= $4 && $3 <= $2 && $2 <= $4])])
+
+
+
+## ------------------ ##
+## Decoding options.  ##
+## ------------------ ##
+
+# b4_flag_if(FLAG, IF-TRUE, IF-FALSE)
+# -----------------------------------
+# Run IF-TRUE if b4_FLAG_flag is 1, IF-FALSE if FLAG is 0, otherwise fail.
+m4_define([b4_flag_if],
+[m4_case(b4_$1_flag,
+         [0], [$3],
+	 [1], [$2],
+	 [m4_fatal([invalid $1 value: ]$1)])])
+
+
+# b4_define_flag_if(FLAG)
+# -----------------------
+# Define "b4_FLAG_if(IF-TRUE, IF-FALSE)" that depends on the
+# value of the Boolean FLAG.
+m4_define([b4_define_flag_if],
+[_b4_define_flag_if($[1], $[2], [$1])])
+
+# _b4_define_flag_if($1, $2, FLAG)
+# --------------------------------
+# Work around the impossibility to define macros inside macros,
+# because issuing `[$1]' is not possible in M4.  GNU M4 should provide
+# $$1 a la M5/TeX.
+m4_define([_b4_define_flag_if],
+[m4_if([$1$2], $[1]$[2], [],
+       [m4_fatal([$0: Invalid arguments: $@])])dnl
+m4_define([b4_$3_if],
+          [b4_flag_if([$3], [$1], [$2])])])
+
+
+# b4_FLAG_if(IF-TRUE, IF-FALSE)
+# -----------------------------
+# Expand IF-TRUE, if FLAG is true, IF-FALSE otherwise.
+b4_define_flag_if([defines])            # Whether headers are requested.
+b4_define_flag_if([error_verbose])      # Whether error are verbose.
+b4_define_flag_if([glr])                # Whether a GLR parser is requested.
+b4_define_flag_if([locations])          # Whether locations are tracked.
+b4_define_flag_if([nondeterministic])   # Whether conflicts should be handled.
+b4_define_flag_if([token_table])        # Whether yytoken_table is demanded.
+b4_define_flag_if([yacc])               # Whether POSIX Yacc is emulated.
+
+# yytoken_table is needed to support verbose errors.
+b4_error_verbose_if([m4_define([b4_token_table_flag], [1])])
+
+
+
+## ----------- ##
+## Synclines.  ##
+## ----------- ##
+
+# b4_basename(NAME)
+# -----------------
+# Similar to POSIX basename; the differences don't matter here.
+# Beware that NAME is not evaluated.
+m4_define([b4_basename],
+[m4_bpatsubst([$1], [^.*/\([^/]+\)/*$], [\1])])
+
+
+# b4_syncline(LINE, FILE)
+# -----------------------
+m4_define([b4_syncline],
+[b4_flag_if([synclines],
+[b4_sync_end([__line__], [b4_basename(m4_quote(__file__))])
+b4_sync_start([$1], [$2])])])
+
+m4_define([b4_sync_end], [b4_comment([Line $1 of $2])])
+m4_define([b4_sync_start], [b4_comment([Line $1 of $2])])
+
+# b4_user_code(USER-CODE)
+# -----------------------
+# Emit code from the user, ending it with synclines.
+m4_define([b4_user_code],
+[$1
+b4_syncline([@oline@], [@ofile@])])
+
+
+# b4_define_user_code(MACRO)
+# --------------------------
+# From b4_MACRO, build b4_user_MACRO that includes the synclines.
+m4_define([b4_define_user_code],
+[m4_define([b4_user_$1],
+[b4_user_code([b4_$1])])])
+
+
+# b4_user_actions
+# b4_user_initial_action
+# b4_user_post_prologue
+# b4_user_pre_prologue
+# b4_user_stype
+# ----------------------
+# Macros that issue user code, ending with synclines.
+b4_define_user_code([actions])
+b4_define_user_code([initial_action])
+b4_define_user_code([post_prologue])
+b4_define_user_code([pre_prologue])
+b4_define_user_code([stype])
+
+
+# b4_check_user_names(WHAT, USER-LIST, BISON-NAMESPACE)
+# -----------------------------------------------------
+# Complain if any name of type WHAT is used by the user (as recorded in
+# USER-LIST) but is not used by Bison (as recorded by macros in the
+# namespace BISON-NAMESPACE).
+#
+# USER-LIST must expand to a list specifying all user occurrences of all names
+# of type WHAT.   Each item in the list must be a triplet specifying one
+# occurrence: name, start boundary, and end boundary.  Empty string names are
+# fine.  An empty list is fine.
+#
+# For example, to define b4_foo_user_names to be used for USER-LIST with three
+# name occurrences and with correct quoting:
+#
+#   m4_define([b4_foo_user_names],
+#             [[[[[[bar]], [[parser.y:1.7]], [[parser.y:1.16]]]],
+#               [[[[bar]], [[parser.y:5.7]], [[parser.y:5.16]]]],
+#               [[[[baz]], [[parser.y:8.7]], [[parser.y:8.16]]]]]])
+#
+# The macro BISON-NAMESPACE(bar) must be defined iff the name bar of type WHAT
+# is used by Bison (in the front-end or in the skeleton).  Empty string names
+# are fine, but it would be ugly for Bison to actually use one.
+#
+# For example, to use b4_foo_bison_names for BISON-NAMESPACE and define that
+# the names bar and baz are used by Bison:
+#
+#   m4_define([b4_foo_bison_names(bar)])
+#   m4_define([b4_foo_bison_names(baz)])
+#
+# To invoke b4_check_user_names with TYPE foo, with USER-LIST
+# b4_foo_user_names, with BISON-NAMESPACE b4_foo_bison_names, and with correct
+# quoting:
+#
+#   b4_check_user_names([[foo]], [b4_foo_user_names],
+#                       [[b4_foo_bison_names]])
+m4_define([b4_check_user_names],
+[m4_foreach([b4_occurrence], $2,
+[m4_pushdef([b4_occurrence], b4_occurrence)dnl
+m4_pushdef([b4_user_name], m4_car(b4_occurrence))dnl
+m4_pushdef([b4_start], m4_car(m4_shift(b4_occurrence)))dnl
+m4_pushdef([b4_end], m4_shift(m4_shift(b4_occurrence)))dnl
+m4_ifndef($3[(]m4_quote(b4_user_name)[)],
+          [b4_complain_at([b4_start], [b4_end],
+                          [[%s '%s' is not used]],
+                          [$1], [b4_user_name])])[]dnl
+m4_popdef([b4_occurrence])dnl
+m4_popdef([b4_user_name])dnl
+m4_popdef([b4_start])dnl
+m4_popdef([b4_end])dnl
+])])
+
+
+
+
+## --------------------- ##
+## b4_percent_define_*.  ##
+## --------------------- ##
+
+
+# b4_percent_define_use(VARIABLE)
+# -------------------------------
+# Declare that VARIABLE was used.
+m4_define([b4_percent_define_use],
+[m4_define([b4_percent_define_bison_variables(]$1[)])dnl
+])
+
+# b4_percent_define_get(VARIABLE, [DEFAULT])
+# ------------------------------------------
+# Mimic muscle_percent_define_get in ../src/muscle-tab.h.  That is, if
+# the %define variable VARIABLE is defined, emit its value.  Contrary
+# to its C counterpart, return DEFAULT otherwise.  Also, record
+# Bison's usage of VARIABLE by defining
+# b4_percent_define_bison_variables(VARIABLE).
+#
+# For example:
+#
+#   b4_percent_define_get([[foo]])
+m4_define([b4_percent_define_get],
+[b4_percent_define_use([$1])dnl
+m4_ifdef([b4_percent_define(]$1[)],
+         [m4_indir([b4_percent_define(]$1[)])],
+         [$2])])
+
+
+# b4_percent_define_get_loc(VARIABLE)
+# -----------------------------------
+# Mimic muscle_percent_define_get_loc in ../src/muscle-tab.h exactly.  That is,
+# if the %define variable VARIABLE is undefined, complain fatally since that's
+# a Bison or skeleton error.  Otherwise, return its definition location in a
+# form approriate for the first two arguments of b4_warn_at, b4_complain_at, or
+# b4_fatal_at.  Don't record this as a Bison usage of VARIABLE as there's no
+# reason to suspect that the user-supplied value has yet influenced the output.
+#
+# For example:
+#
+#   b4_complain_at(b4_percent_define_get_loc([[foo]]), [[invalid foo]])
+m4_define([b4_percent_define_get_loc],
+[m4_ifdef([b4_percent_define_loc(]$1[)],
+          [m4_pushdef([b4_loc], m4_indir([b4_percent_define_loc(]$1[)]))dnl
+b4_loc[]dnl
+m4_popdef([b4_loc])],
+          [b4_fatal([[b4_percent_define_get_loc: undefined %%define variable '%s']], [$1])])])
+
+# b4_percent_define_get_syncline(VARIABLE)
+# ----------------------------------------
+# Mimic muscle_percent_define_get_syncline in ../src/muscle-tab.h exactly.
+# That is, if the %define variable VARIABLE is undefined, complain fatally
+# since that's a Bison or skeleton error.  Otherwise, return its definition
+# location as a b4_syncline invocation.  Don't record this as a Bison usage of
+# VARIABLE as there's no reason to suspect that the user-supplied value has yet
+# influenced the output.
+#
+# For example:
+#
+#   b4_percent_define_get_syncline([[foo]])
+m4_define([b4_percent_define_get_syncline],
+[m4_ifdef([b4_percent_define_syncline(]$1[)],
+          [m4_indir([b4_percent_define_syncline(]$1[)])],
+          [b4_fatal([[b4_percent_define_get_syncline: undefined %%define variable '%s']], [$1])])])
+
+# b4_percent_define_ifdef(VARIABLE, IF-TRUE, [IF-FALSE])
+# ------------------------------------------------------
+# Mimic muscle_percent_define_ifdef in ../src/muscle-tab.h exactly.  That is,
+# if the %define variable VARIABLE is defined, expand IF-TRUE, else expand
+# IF-FALSE.  Also, record Bison's usage of VARIABLE by defining
+# b4_percent_define_bison_variables(VARIABLE).
+#
+# For example:
+#
+#   b4_percent_define_ifdef([[foo]], [[it's defined]], [[it's undefined]])
+m4_define([b4_percent_define_ifdef],
+[m4_ifdef([b4_percent_define(]$1[)],
+	  [m4_define([b4_percent_define_bison_variables(]$1[)])$2],
+	  [$3])])
+
+# b4_percent_define_flag_if(VARIABLE, IF-TRUE, [IF-FALSE])
+# --------------------------------------------------------
+# Mimic muscle_percent_define_flag_if in ../src/muscle-tab.h exactly.  That is,
+# if the %define variable VARIABLE is defined to "" or "true", expand IF-TRUE.
+# If it is defined to "false", expand IF-FALSE.  Complain if it is undefined
+# (a Bison or skeleton error since the default value should have been set
+# already) or defined to any other value (possibly a user error).  Also, record
+# Bison's usage of VARIABLE by defining
+# b4_percent_define_bison_variables(VARIABLE).
+#
+# For example:
+#
+#   b4_percent_define_flag_if([[foo]], [[it's true]], [[it's false]])
+m4_define([b4_percent_define_flag_if],
+[b4_percent_define_ifdef([$1],
+  [m4_case(b4_percent_define_get([$1]),
+           [], [$2], [true], [$2], [false], [$3],
+           [m4_expand_once([b4_complain_at(b4_percent_define_get_loc([$1]),
+                                           [[invalid value for %%define Boolean variable '%s']],
+                                           [$1])],
+                           [[b4_percent_define_flag_if($1)]])])],
+  [b4_fatal([[b4_percent_define_flag_if: undefined %%define variable '%s']], [$1])])])
+
+# b4_percent_define_default(VARIABLE, DEFAULT)
+# --------------------------------------------
+# Mimic muscle_percent_define_default in ../src/muscle-tab.h exactly.  That is,
+# if the %define variable VARIABLE is undefined, set its value to DEFAULT.
+# Don't record this as a Bison usage of VARIABLE as there's no reason to
+# suspect that the value has yet influenced the output.
+#
+# For example:
+#
+#   b4_percent_define_default([[foo]], [[default value]])
+m4_define([b4_percent_define_default],
+[m4_ifndef([b4_percent_define(]$1[)],
+           [m4_define([b4_percent_define(]$1[)], [$2])dnl
+            m4_define([b4_percent_define_loc(]$1[)],
+                      [[[[<skeleton default value>:-1.-1]],
+                        [[<skeleton default value>:-1.-1]]]])dnl
+            m4_define([b4_percent_define_syncline(]$1[)], [[]])])])
+
+# b4_percent_define_check_values(VALUES)
+# --------------------------------------
+# Mimic muscle_percent_define_check_values in ../src/muscle-tab.h exactly
+# except that the VALUES structure is more appropriate for M4.  That is, VALUES
+# is a list of sublists of strings.  For each sublist, the first string is the
+# name of a %define variable, and all remaining strings in that sublist are the
+# valid values for that variable.  Complain if such a variable is undefined (a
+# Bison error since the default value should have been set already) or defined
+# to any other value (possibly a user error).  Don't record this as a Bison
+# usage of the variable as there's no reason to suspect that the value has yet
+# influenced the output.
+#
+# For example:
+#
+#   b4_percent_define_check_values([[[[foo]], [[foo-value1]], [[foo-value2]]]],
+#                                  [[[[bar]], [[bar-value1]]]])
+m4_define([b4_percent_define_check_values],
+[m4_foreach([b4_sublist], m4_quote($@),
+            [_b4_percent_define_check_values(b4_sublist)])])
+
+m4_define([_b4_percent_define_check_values],
+[m4_ifdef([b4_percent_define(]$1[)],
+  [m4_pushdef([b4_good_value], [0])dnl
+   m4_if($#, 1, [],
+         [m4_foreach([b4_value], m4_dquote(m4_shift($@)),
+                     [m4_if(m4_indir([b4_percent_define(]$1[)]), b4_value,
+                            [m4_define([b4_good_value], [1])])])])dnl
+   m4_if(b4_good_value, [0],
+         [b4_complain_at(b4_percent_define_get_loc([$1]),
+                         [[invalid value for %%define variable '%s': '%s']],
+                         [$1],
+                         m4_dquote(m4_indir([b4_percent_define(]$1[)])))
+          m4_foreach([b4_value], m4_dquote(m4_shift($@)),
+                     [b4_complain_at(b4_percent_define_get_loc([$1]),
+                                     [[accepted value: '%s']],
+                                     m4_dquote(b4_value))])])dnl
+   m4_popdef([b4_good_value])],
+  [b4_fatal([[b4_percent_define_check_values: undefined %%define variable '%s']], [$1])])])
+
+# b4_percent_code_get([QUALIFIER])
+# --------------------------------
+# If any %code blocks for QUALIFIER are defined, emit them beginning with a
+# comment and ending with synclines and a newline.  If QUALIFIER is not
+# specified or empty, do this for the unqualified %code blocks.  Also, record
+# Bison's usage of QUALIFIER (if specified) by defining
+# b4_percent_code_bison_qualifiers(QUALIFIER).
+#
+# For example, to emit any unqualified %code blocks followed by any %code
+# blocks for the qualifier foo:
+#
+#   b4_percent_code_get
+#   b4_percent_code_get([[foo]])
+m4_define([b4_percent_code_get],
+[m4_pushdef([b4_macro_name], [[b4_percent_code(]$1[)]])dnl
+m4_ifval([$1], [m4_define([b4_percent_code_bison_qualifiers(]$1[)])])dnl
+m4_ifdef(b4_macro_name,
+[b4_comment([m4_if([$#], [0], [[Unqualified %code]],
+                   [["%code ]$1["]])[ blocks.]])
+b4_user_code([m4_indir(b4_macro_name)])
+])dnl
+m4_popdef([b4_macro_name])])
+
+# b4_percent_code_ifdef(QUALIFIER, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------
+# If any %code blocks for QUALIFIER (or unqualified %code blocks if
+# QUALIFIER is empty) are defined, expand IF-TRUE, else expand IF-FALSE.
+# Also, record Bison's usage of QUALIFIER (if specified) by defining
+# b4_percent_code_bison_qualifiers(QUALIFIER).
+m4_define([b4_percent_code_ifdef],
+[m4_ifdef([b4_percent_code(]$1[)],
+          [m4_ifval([$1], [m4_define([b4_percent_code_bison_qualifiers(]$1[)])])$2],
+	  [$3])])
+
+
+## ----------------------------------------------------------- ##
+## After processing the skeletons, check that all the user's   ##
+## %define variables and %code qualifiers were used by Bison.  ##
+## ----------------------------------------------------------- ##
+
+m4_define([b4_check_user_names_wrap],
+[m4_ifdef([b4_percent_]$1[_user_]$2[s],
+          [b4_check_user_names([[%]$1 $2],
+                               [b4_percent_]$1[_user_]$2[s],
+                               [[b4_percent_]$1[_bison_]$2[s]])])])
+
+m4_wrap_lifo([
+b4_check_user_names_wrap([[define]], [[variable]])
+b4_check_user_names_wrap([[code]], [[qualifier]])
+])
+
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+# m4_define_default([b4_lex_param], [])   dnl breaks other skeletons
+m4_define_default([b4_pre_prologue], [])
+m4_define_default([b4_post_prologue], [])
+m4_define_default([b4_epilogue], [])
+m4_define_default([b4_parse_param], [])
+
+# The initial column and line.
+m4_define_default([b4_location_initial_column], [1])
+m4_define_default([b4_location_initial_line],   [1])
+
+# Sanity checks.
+b4_percent_define_ifdef([api.prefix],
+[m4_ifdef([b4_prefix],
+[b4_complain_at(b4_percent_define_get_loc([api.prefix]),
+                [['%s' and '%s' cannot be used together]],
+                [%name-prefix],
+                [%define api.prefix])])])
diff --git a/data/c++-skel.m4 b/data/c++-skel.m4
new file mode 100644
index 0000000..4421d18
--- /dev/null
+++ b/data/c++-skel.m4
@@ -0,0 +1,26 @@
+                                                            -*- Autoconf -*-
+
+# C++ skeleton dispatching for Bison.
+
+# Copyright (C) 2006-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+b4_glr_if(             [m4_define([b4_used_skeleton], [b4_pkgdatadir/[glr.cc]])])
+b4_nondeterministic_if([m4_define([b4_used_skeleton], [b4_pkgdatadir/[glr.cc]])])
+
+m4_define_default([b4_used_skeleton], [b4_pkgdatadir/[lalr1.cc]])
+m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
+
+m4_include(b4_used_skeleton)
diff --git a/data/c++.m4 b/data/c++.m4
index 57aee0c..8b98b8c 100644
--- a/data/c++.m4
+++ b/data/c++.m4
@@ -1,23 +1,21 @@
-m4_divert(-1)                                               -*- Autoconf -*-
+                                                            -*- Autoconf -*-
 
 # C++ skeleton for Bison
 
-# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 m4_include(b4_pkgdatadir/[c.m4])
 
@@ -26,10 +24,64 @@
 ## ---------------- ##
 
 # Default parser class name.
-m4_define_default([b4_parser_class_name], [parser])
-m4_define_default([b4_location_type], [location])
-m4_define_default([b4_filename_type], [std::string])
-m4_define_default([b4_namespace], m4_defn([b4_prefix]))
+b4_percent_define_default([[parser_class_name]], [[parser]])
+
+# Don't do that so that we remember whether we're using a user
+# request, or the default value.
+#
+# b4_percent_define_default([[api.location.type]], [[location]])
+
+b4_percent_define_default([[filename_type]], [[std::string]])
+b4_percent_define_default([[namespace]], m4_defn([b4_prefix]))
+b4_percent_define_default([[global_tokens_and_yystype]], [[false]])
+b4_percent_define_default([[define_location_comparison]],
+                          [m4_if(b4_percent_define_get([[filename_type]]),
+                                 [std::string], [[true]], [[false]])])
+
+
+## ----------- ##
+## Namespace.  ##
+## ----------- ##
+
+m4_define([b4_namespace_ref], [b4_percent_define_get([[namespace]])])
+
+# Don't permit an empty b4_namespace_ref.  Any `::parser::foo' appended to it
+# would compile as an absolute reference with `parser' in the global namespace.
+# b4_namespace_open would open an anonymous namespace and thus establish
+# internal linkage.  This would compile.  However, it's cryptic, and internal
+# linkage for the parser would be specified in all translation units that
+# include the header, which is always generated.  If we ever need to permit
+# internal linkage somehow, surely we can find a cleaner approach.
+m4_if(m4_bregexp(b4_namespace_ref, [^[	 ]*$]), [-1], [],
+[b4_complain_at(b4_percent_define_get_loc([[namespace]]),
+                [[namespace reference is empty]])])
+
+# Instead of assuming the C++ compiler will do it, Bison should reject any
+# invalid b4_namepsace_ref that would be converted to a valid
+# b4_namespace_open.  The problem is that Bison doesn't always output
+# b4_namespace_ref to uncommented code but should reserve the ability to do so
+# in future releases without risking breaking any existing user grammars.
+# Specifically, don't allow empty names as b4_namespace_open would just convert
+# those into anonymous namespaces, and that might tempt some users.
+m4_if(m4_bregexp(b4_namespace_ref, [::[	 ]*::]), [-1], [],
+[b4_complain_at(b4_percent_define_get_loc([[namespace]]),
+                [[namespace reference has consecutive "::"]])])
+m4_if(m4_bregexp(b4_namespace_ref, [::[	 ]*$]), [-1], [],
+[b4_complain_at(b4_percent_define_get_loc([[namespace]]),
+                [[namespace reference has a trailing "::"]])])
+
+m4_define([b4_namespace_open],
+[b4_user_code([b4_percent_define_get_syncline([[namespace]])
+[namespace ]m4_bpatsubst(m4_dquote(m4_bpatsubst(m4_dquote(b4_namespace_ref),
+                                                [^\(.\)[	 ]*::], [\1])),
+                         [::], [ { namespace ])[ {]])])
+
+m4_define([b4_namespace_close],
+[b4_user_code([b4_percent_define_get_syncline([[namespace]])
+m4_bpatsubst(m4_dquote(m4_bpatsubst(m4_dquote(b4_namespace_ref[ ]),
+                                    [^\(.\)[	 ]*\(::\)?\([^][:]\|:[^:]\)*],
+                                    [\1])),
+             [::\([^][:]\|:[^:]\)*], [} ])[} // ]b4_namespace_ref])])
 
 
 # b4_token_enums(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
@@ -45,6 +97,8 @@
 ])
 
 
+
+
 ## ----------------- ##
 ## Semantic Values.  ##
 ## ----------------- ##
@@ -99,7 +153,7 @@
 # Extra initialisations of the constructor.
 m4_define([b4_parse_param_cons],
           [m4_ifset([b4_parse_param],
-		    [,
+		    [
       b4_cc_constructor_calls(b4_parse_param)])])
 m4_define([b4_cc_constructor_calls],
 	  [m4_map_sep([b4_cc_constructor_call], [,
@@ -120,3 +174,32 @@
 ], [$@])])
 m4_define([b4_cc_var_decl],
 	  [    $1;])
+
+
+## ---------##
+## Values.  ##
+## ---------##
+
+# b4_yylloc_default_define
+# ------------------------
+# Define YYLLOC_DEFAULT.
+m4_define([b4_yylloc_default_define],
+[[/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+# ifndef YYLLOC_DEFAULT
+#  define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                  \
+      if (N)                                                            \
+        {                                                               \
+          (Current).begin  = YYRHSLOC (Rhs, 1).begin;                   \
+          (Current).end    = YYRHSLOC (Rhs, N).end;                     \
+        }                                                               \
+      else                                                              \
+        {                                                               \
+          (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
+        }                                                               \
+    while (/*CONSTCOND*/ false)
+# endif
+]])
diff --git a/data/c-like.m4 b/data/c-like.m4
new file mode 100644
index 0000000..c2abce7
--- /dev/null
+++ b/data/c-like.m4
@@ -0,0 +1,44 @@
+                                                            -*- Autoconf -*-
+
+# Common code for C-like languages (C, C++, Java, etc.)
+
+# Copyright (C) 2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# b4_dollar_dollar_(VALUE, FIELD, DEFAULT-FIELD)
+# ----------------------------------------------
+# If FIELD (or DEFAULT-FIELD) is non-null, return "VALUE.FIELD",
+# otherwise just VALUE.  Be sure to pass "(VALUE)" is VALUE is a
+# pointer.
+m4_define([b4_dollar_dollar_],
+[m4_if([$2], [[]],
+       [m4_ifval([$3], [($1.$3)],
+                 [$1])],
+       [($1.$2)])])
+
+# b4_dollar_pushdef(VALUE-POINTER, DEFAULT-FIELD, LOCATION)
+# b4_dollar_popdef
+# ---------------------------------------------------------
+# Define b4_dollar_dollar for VALUE and DEFAULT-FIELD,
+# and b4_at_dollar for LOCATION.
+m4_define([b4_dollar_pushdef],
+[m4_pushdef([b4_dollar_dollar],
+            [b4_dollar_dollar_([$1], m4_dquote($][1), [$2])])dnl
+m4_pushdef([b4_at_dollar], [$3])dnl
+])
+m4_define([b4_dollar_popdef],
+[m4_popdef([b4_at_dollar])dnl
+m4_popdef([b4_dollar_dollar])dnl
+])
diff --git a/data/c-skel.m4 b/data/c-skel.m4
new file mode 100644
index 0000000..8bcae59
--- /dev/null
+++ b/data/c-skel.m4
@@ -0,0 +1,26 @@
+                                                            -*- Autoconf -*-
+
+# C skeleton dispatching for Bison.
+
+# Copyright (C) 2006-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+b4_glr_if(             [m4_define([b4_used_skeleton], [b4_pkgdatadir/[glr.c]])])
+b4_nondeterministic_if([m4_define([b4_used_skeleton], [b4_pkgdatadir/[glr.c]])])
+
+m4_define_default([b4_used_skeleton], [b4_pkgdatadir/[yacc.c]])
+m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
+
+m4_include(b4_used_skeleton)
diff --git a/data/c.m4 b/data/c.m4
index f10e090..dc3d303 100644
--- a/data/c.m4
+++ b/data/c.m4
@@ -1,100 +1,115 @@
-m4_divert(-1)                                               -*- Autoconf -*-
+                                                            -*- Autoconf -*-
 
 # C M4 Macros for Bison.
-# Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2002, 2004-2012 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+m4_include(b4_pkgdatadir/[c-like.m4])
+
+# b4_tocpp(STRING)
+# ----------------
+# Convert STRING into a valid C macro name.
+m4_define([b4_tocpp],
+[m4_toupper(m4_bpatsubst(m4_quote($1), [[^a-zA-Z0-9]+], [_]))])
+
+
+# b4_cpp_guard(FILE)
+# ------------------
+# A valid C macro name to use as a CPP header guard for FILE.
+m4_define([b4_cpp_guard],
+[[YY_]b4_tocpp(m4_defn([b4_prefix])/[$1])[_INCLUDED]])
+
+
+# b4_cpp_guard_open(FILE)
+# b4_cpp_guard_close(FILE)
+# ------------------------
+# If FILE does not expand to nothing, open/close CPP inclusion guards for FILE.
+m4_define([b4_cpp_guard_open],
+[m4_ifval(m4_quote($1),
+[#ifndef b4_cpp_guard([$1])
+# define b4_cpp_guard([$1])])])
+
+m4_define([b4_cpp_guard_close],
+[m4_ifval(m4_quote($1),
+[#endif b4_comment([!b4_cpp_guard([$1])])])])
 
 
 ## ---------------- ##
 ## Identification.  ##
 ## ---------------- ##
 
-# b4_copyright(TITLE, YEARS)
-# --------------------------
-m4_define([b4_copyright],
-[/* A Bison parser, made by GNU Bison b4_version.  */
-
-/* $1
-
-m4_text_wrap([Copyright (C) $2 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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */])
-
+# b4_comment(TEXT)
+# ----------------
+m4_define([b4_comment], [/* m4_bpatsubst([$1], [
+], [
+   ])  */])
 
 # b4_identification
 # -----------------
+# Depends on individual skeletons to define b4_pure_flag, b4_push_flag, or
+# b4_pull_flag if they use the values of the %define variables api.pure or
+# api.push-pull.
 m4_define([b4_identification],
-[/* Identify Bison output.  */
-[#]define YYBISON 1
+[[/* Identify Bison output.  */
+#define YYBISON 1
 
 /* Bison version.  */
-[#]define YYBISON_VERSION "b4_version"
+#define YYBISON_VERSION "]b4_version["
 
 /* Skeleton name.  */
-[#]define YYSKELETON_NAME b4_skeleton
+#define YYSKELETON_NAME ]b4_skeleton[]m4_ifdef([b4_pure_flag], [[
 
 /* Pure parsers.  */
-[#]define YYPURE b4_pure_flag
+#define YYPURE ]b4_pure_flag])[]m4_ifdef([b4_push_flag], [[
 
-/* Using locations.  */
-[#]define YYLSP_NEEDED b4_locations_flag
-])
+/* Push parsers.  */
+#define YYPUSH ]b4_push_flag])[]m4_ifdef([b4_pull_flag], [[
 
+/* Pull parsers.  */
+#define YYPULL ]b4_pull_flag])[
+]])
 
 
 ## ---------------- ##
 ## Default values.  ##
 ## ---------------- ##
 
-m4_define_default([b4_epilogue], [])
+# b4_api_prefix, b4_api_PREFIX
+# ----------------------------
+# Corresponds to %define api.prefix
+b4_percent_define_default([[api.prefix]], [[yy]])
+m4_define([b4_api_prefix],
+[b4_percent_define_get([[api.prefix]])])
+m4_define([b4_api_PREFIX],
+[m4_toupper(b4_api_prefix)])
 
 
+# b4_prefix
+# ---------
+# If the %name-prefix is not given, it is api.prefix.
+m4_define_default([b4_prefix], [b4_api_prefix])
+
+# If the %union is not named, its name is YYSTYPE.
+m4_define_default([b4_union_name], [b4_api_PREFIX[]STYPE])
+
 
 ## ------------------------ ##
 ## Pure/impure interfaces.  ##
 ## ------------------------ ##
 
-
 # b4_user_args
 # ------------
 m4_define([b4_user_args],
@@ -105,9 +120,8 @@
 # --------------
 # If defined, b4_parse_param arrives double quoted, but below we prefer
 # it to be single quoted.
-m4_define_default([b4_parse_param])
 m4_define([b4_parse_param],
-b4_parse_param))
+b4_parse_param)
 
 
 # b4_parse_param_for(DECL, FORMAL, BODY)
@@ -116,7 +130,7 @@
 # the formal name to FORMAL, and evaluating the BODY.
 m4_define([b4_parse_param_for],
 [m4_foreach([$1_$2], m4_defn([b4_parse_param]),
-[m4_pushdef([$1], m4_fst($1_$2))dnl
+[m4_pushdef([$1], m4_unquote(m4_car($1_$2)))dnl
 m4_pushdef([$2], m4_shift($1_$2))dnl
 $3[]dnl
 m4_popdef([$2])dnl
@@ -131,18 +145,11 @@
 ])dnl
 ])
 
+
 ## ------------ ##
 ## Data Types.  ##
 ## ------------ ##
 
-
-# b4_ints_in(INT1, INT2, LOW, HIGH)
-# ---------------------------------
-# Return 1 iff both INT1 and INT2 are in [LOW, HIGH], 0 otherwise.
-m4_define([b4_ints_in],
-[m4_eval([$3 <= $1 && $1 <= $4 && $3 <= $2 && $2 <= $4])])
-
-
 # b4_int_type(MIN, MAX)
 # ---------------------
 # Return the smallest int type able to handle numbers ranging from
@@ -156,7 +163,7 @@
 
        m4_eval([0 <= $1]),                [1], [unsigned int],
 
-					       [int])])
+                                               [int])])
 
 
 # b4_int_type_for(NAME)
@@ -167,46 +174,43 @@
 [b4_int_type($1_min, $1_max)])
 
 
-## ------------------ ##
-## Decoding options.  ##
-## ------------------ ##
-
-# b4_flag_if(FLAG, IF-TRUE, IF-FALSE)
-# -----------------------------------
-# Run IF-TRUE if b4_FLAG_flag is 1, IF-FALSE if FLAG is 0, otherwise fail.
-m4_define([b4_flag_if],
-[m4_case(b4_$1_flag,
-         [0], [$3],
-	 [1], [$2],
-	 [m4_fatal([invalid $1 value: ]$1)])])
+# b4_table_value_equals(TABLE, VALUE, LITERAL)
+# --------------------------------------------
+# Without inducing a comparison warning from the compiler, check if the
+# literal value LITERAL equals VALUE from table TABLE, which must have
+# TABLE_min and TABLE_max defined.  YYID must be defined as an identity
+# function that suppresses warnings about constant conditions.
+m4_define([b4_table_value_equals],
+[m4_if(m4_eval($3 < m4_indir([b4_]$1[_min])
+               || m4_indir([b4_]$1[_max]) < $3), [1],
+       [[YYID (0)]],
+       [(!!(($2) == ($3)))])])
 
 
-# b4_define_flag_if(FLAG)
-# -----------------------
-# Define "b4_FLAG_if(IF-TRUE, IF-FALSE)" that depends on the
-# value of the Boolean FLAG.
-m4_define([b4_define_flag_if],
-[_b4_define_flag_if($[1], $[2], [$1])])
-
-# _b4_define_flag_if($1, $2, FLAG)
-# --------------------------------
-# This macro works around the impossibility to define macros
-# inside macros, because issuing `[$1]' is not possible in M4 :(.
-# This sucks hard, GNU M4 should really provide M5 like $$1.
-m4_define([_b4_define_flag_if],
-[m4_if([$1$2], $[1]$[2], [],
-       [m4_fatal([$0: Invalid arguments: $@])])dnl
-m4_define([b4_$3_if], 
-          [b4_flag_if([$3], [$1], [$2])])])
+## ---------##
+## Values.  ##
+## ---------##
 
 
-# b4_FLAG_if(IF-TRUE, IF-FALSE)
-# -----------------------------
-# Expand IF-TRUE, if FLAG is true, IF-FALSE otherwise.
-b4_define_flag_if([defines])        # Whether headers are requested.
-b4_define_flag_if([error_verbose])  # Wheter error are verbose.
-b4_define_flag_if([locations])      # Whether locations are tracked.
-b4_define_flag_if([pure])           # Whether the interface is pure.
+# b4_null_define
+# --------------
+# Portability issues: define a YY_NULL appropriate for the current
+# language (C, C++98, or C++11).
+m4_define([b4_null_define],
+[# ifndef YY_NULL
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULL nullptr
+#  else
+#   define YY_NULL 0
+#  endif
+# endif[]dnl
+])
+
+
+# b4_null
+# -------
+# Return a null pointer constant.
+m4_define([b4_null], [YY_NULL])
 
 
 
@@ -226,7 +230,7 @@
 # -------------------------------------------------------
 # Output the definition of the tokens (if there are) as #defines.
 m4_define([b4_token_defines],
-[m4_if([$@], [[]], [],
+[m4_if([$#$1], [1], [],
 [/* Tokens.  */
 m4_map([b4_token_define], [$@])])
 ])
@@ -243,26 +247,27 @@
 # -----------------------------------------------------
 # Output the definition of the tokens (if there are) as enums.
 m4_define([b4_token_enums],
-[m4_if([$@], [[]], [],
-[/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
+[m4_if([$#$1], [1], [],
+[[/* Tokens.  */
+#ifndef ]b4_api_PREFIX[TOKENTYPE
+# define ]b4_api_PREFIX[TOKENTYPE
    /* Put the tokens into the symbol table, so that GDB and other debuggers
       know about them.  */
-   enum yytokentype {
-m4_map_sep([     b4_token_enum], [,
+   enum ]b4_api_prefix[tokentype {
+]m4_map_sep([     b4_token_enum], [,
 ],
-	   [$@])
+           [$@])[
    };
 #endif
-])])
+]])])
 
 
 # b4_token_enums_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
 # -------------------------------------------------------------
-# Output the definition of the tokens (if there are) as enums and #defines.
+# Output the definition of the tokens (if there are any) as enums and, if POSIX
+# Yacc is enabled, as #defines.
 m4_define([b4_token_enums_defines],
-[b4_token_enums($@)b4_token_defines($@)
+[b4_token_enums($@)b4_yacc_if([b4_token_defines($@)], [])
 ])
 
 
@@ -294,8 +299,8 @@
 b4_c_ansi_function_def($@)
 #else
 $2
-$1 (b4_c_knr_formal_names(m4_shiftn(2, $@)))
-b4_c_knr_formal_decls(m4_shiftn(2, $@))
+$1 (b4_c_knr_formal_names(m4_shift2($@)))
+b4_c_knr_formal_decls(m4_shift2($@))
 #endif[]dnl
 ])
 
@@ -305,7 +310,7 @@
 # Declare the function NAME in ANSI.
 m4_define([b4_c_ansi_function_def],
 [$2
-$1 (b4_c_ansi_formals(m4_shiftn(2, $@)))[]dnl
+$1 (b4_c_ansi_formals(m4_shift2($@)))[]dnl
 ])
 
 
@@ -313,10 +318,9 @@
 # --------------------------------------
 # Output the arguments ANSI-C definition.
 m4_define([b4_c_ansi_formals],
-[m4_case([$@],
-	 [],   [void],
-	 [[]], [void],
-	       [m4_map_sep([b4_c_ansi_formal], [, ], [$@])])])
+[m4_if([$#], [0], [void],
+       [$#$1], [1], [void],
+               [m4_map_sep([b4_c_ansi_formal], [, ], [$@])])])
 
 m4_define([b4_c_ansi_formal],
 [$1])
@@ -337,9 +341,9 @@
 # Output the K&R argument declarations.
 m4_define([b4_c_knr_formal_decls],
 [m4_map_sep([b4_c_knr_formal_decl],
-	    [
+            [
 ],
-	    [$@])])
+            [$@])])
 
 m4_define([b4_c_knr_formal_decl],
 [    $1;])
@@ -351,9 +355,18 @@
 ## ------------------------------------------------------------ ##
 
 
+# b4_c_ansi_function_decl(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
+# ----------------------------------------------------------------
+# Declare the function NAME ANSI C style.
+m4_define([b4_c_ansi_function_decl],
+[$2 $1 (b4_c_ansi_formals(m4_shift2($@)));[]dnl
+])
+
+
+
 # b4_c_function_decl(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
 # -----------------------------------------------------------
-# Declare the function NAME.
+# Declare the function NAME in both K&R and ANSI C.
 m4_define([b4_c_function_decl],
 [#if defined __STDC__ || defined __cplusplus
 b4_c_ansi_function_decl($@)
@@ -363,15 +376,6 @@
 ])
 
 
-# b4_c_ansi_function_decl(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
-# ----------------------------------------------------------------
-# Declare the function NAME.
-m4_define([b4_c_ansi_function_decl],
-[$2 $1 (b4_c_ansi_formals(m4_shiftn(2, $@)));[]dnl
-])
-
-
-
 
 ## --------------------- ##
 ## Calling C functions.  ##
@@ -382,7 +386,7 @@
 # -----------------------------------------------------------
 # Call the function NAME with arguments NAME1, NAME2 etc.
 m4_define([b4_c_function_call],
-[$1 (b4_c_args(m4_shiftn(2, $@)))[]dnl
+[$1 (b4_c_args(m4_shift2($@)))[]dnl
 ])
 
 
@@ -400,32 +404,38 @@
 ## Synclines.  ##
 ## ----------- ##
 
-# b4_syncline(LINE, FILE)
+# b4_sync_start(LINE, FILE)
 # -----------------------
-m4_define([b4_syncline],
-[b4_flag_if([synclines], [[#]line $1 $2])])
-
+m4_define([b4_sync_start], [[#]line $1 $2])
 
 
 ## -------------- ##
 ## User actions.  ##
 ## -------------- ##
 
+# b4_case(LABEL, STATEMENTS)
+# --------------------------
+m4_define([b4_case],
+[  case $1:
+$2
+    break;])
+
 # b4_symbol_actions(FILENAME, LINENO,
 #                   SYMBOL-TAG, SYMBOL-NUM,
 #                   SYMBOL-ACTION, SYMBOL-TYPENAME)
 # -------------------------------------------------
+# Issue the code for a symbol action (e.g., %printer).
+#
+# Define b4_dollar_dollar([TYPE-NAME]), and b4_at_dollar, which are
+# invoked where $<TYPE-NAME>$ and @$ were specified by the user.
 m4_define([b4_symbol_actions],
-[m4_pushdef([b4_dollar_dollar],
-   [m4_ifval([$6], [(yyvaluep->$6)], [(*yyvaluep)])])dnl
-m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl
+[b4_dollar_pushdef([(*yyvaluep)], [$6], [(*yylocationp)])dnl
       case $4: /* $3 */
 b4_syncline([$2], [$1])
-	$5;
+        $5;
 b4_syncline([@oline@], [@ofile@])
-	break;
-m4_popdef([b4_at_dollar])dnl
-m4_popdef([b4_dollar_dollar])dnl
+        break;
+b4_dollar_popdef[]dnl
 ])
 
 
@@ -461,7 +471,7 @@
     {
 ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[
       default:
-	break;
+        break;
     }
 }]dnl
 ])
@@ -481,12 +491,14 @@
 /*ARGSUSED*/
 ]$1([yy_symbol_value_print],
     [static void],
-	       [[FILE *yyoutput],                       [yyoutput]],
-	       [[int yytype],                           [yytype]],
-	       [[YYSTYPE const * const yyvaluep],       [yyvaluep]][]dnl
+               [[FILE *yyoutput],                       [yyoutput]],
+               [[int yytype],                           [yytype]],
+               [[YYSTYPE const * const yyvaluep],       [yyvaluep]][]dnl
 b4_locations_if([, [[YYLTYPE const * const yylocationp], [yylocationp]]])[]dnl
 m4_ifset([b4_parse_param], [, b4_parse_param]))[
 {
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   if (!yyvaluep)
     return;
 ]b4_locations_if([  YYUSE (yylocationp);
@@ -502,7 +514,7 @@
     {
 ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
 [      default:
-	break;
+        break;
     }
 }
 
@@ -513,9 +525,9 @@
 
 ]$1([yy_symbol_print],
     [static void],
-	       [[FILE *yyoutput],                       [yyoutput]],
-	       [[int yytype],                           [yytype]],
-	       [[YYSTYPE const * const yyvaluep],       [yyvaluep]][]dnl
+               [[FILE *yyoutput],                       [yyoutput]],
+               [[int yytype],                           [yytype]],
+               [[YYSTYPE const * const yyvaluep],       [yyvaluep]][]dnl
 b4_locations_if([, [[YYLTYPE const * const yylocationp], [yylocationp]]])[]dnl
 m4_ifset([b4_parse_param], [, b4_parse_param]))[
 {
@@ -532,3 +544,171 @@
   YYFPRINTF (yyoutput, ")");
 }]dnl
 ])
+
+## -------------- ##
+## Declarations.  ##
+## -------------- ##
+
+# b4_declare_yylstype
+# -------------------
+# Declarations that might either go into the header (if --defines) or
+# in the parser body.  Declare YYSTYPE/YYLTYPE, and yylval/yylloc.
+m4_define([b4_declare_yylstype],
+[[#if ! defined ]b4_api_PREFIX[STYPE && ! defined ]b4_api_PREFIX[STYPE_IS_DECLARED
+]m4_ifdef([b4_stype],
+[[typedef union ]b4_union_name[
+{
+]b4_user_stype[
+} ]b4_api_PREFIX[STYPE;
+# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1]],
+[m4_if(b4_tag_seen_flag, 0,
+[[typedef int ]b4_api_PREFIX[STYPE;
+# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1]])])[
+# define ]b4_api_prefix[stype ]b4_api_PREFIX[STYPE /* obsolescent; will be withdrawn */
+# define ]b4_api_PREFIX[STYPE_IS_DECLARED 1
+#endif]b4_locations_if([[
+
+#if ! defined ]b4_api_PREFIX[LTYPE && ! defined ]b4_api_PREFIX[LTYPE_IS_DECLARED
+typedef struct ]b4_api_PREFIX[LTYPE
+{
+  int first_line;
+  int first_column;
+  int last_line;
+  int last_column;
+} ]b4_api_PREFIX[LTYPE;
+# define ]b4_api_prefix[ltype ]b4_api_PREFIX[LTYPE /* obsolescent; will be withdrawn */
+# define ]b4_api_PREFIX[LTYPE_IS_DECLARED 1
+# define ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1
+#endif]])
+
+b4_pure_if([], [[extern ]b4_api_PREFIX[STYPE ]b4_prefix[lval;
+]b4_locations_if([[extern ]b4_api_PREFIX[LTYPE ]b4_prefix[lloc;]])])[]dnl
+])
+
+# b4_YYDEBUG_define
+# ------------------
+m4_define([b4_YYDEBUG_define],
+[[/* Enabling traces.  */
+]m4_if(b4_api_prefix, [yy],
+[[#ifndef YYDEBUG
+# define YYDEBUG ]b4_debug_flag[
+#endif]],
+[[#ifndef ]b4_api_PREFIX[DEBUG
+# if defined YYDEBUG
+#  if YYDEBUG
+#   define ]b4_api_PREFIX[DEBUG 1
+#  else
+#   define ]b4_api_PREFIX[DEBUG 0
+#  endif
+# else /* ! defined YYDEBUG */
+#  define ]b4_api_PREFIX[DEBUG ]b4_debug_flag[
+# endif /* ! defined YYDEBUG */
+#endif  /* ! defined ]b4_api_PREFIX[DEBUG */]])[]dnl
+])
+
+# b4_declare_yydebug
+# ------------------
+m4_define([b4_declare_yydebug],
+[b4_YYDEBUG_define[
+#if ]b4_api_PREFIX[DEBUG
+extern int ]b4_prefix[debug;
+#endif][]dnl
+])
+
+# b4_yylloc_default_define
+# ------------------------
+# Define YYLLOC_DEFAULT.
+m4_define([b4_yylloc_default_define],
+[[/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
+    do                                                                  \
+      if (YYID (N))                                                     \
+        {                                                               \
+          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+        }                                                               \
+      else                                                              \
+        {                                                               \
+          (Current).first_line   = (Current).last_line   =              \
+            YYRHSLOC (Rhs, 0).last_line;                                \
+          (Current).first_column = (Current).last_column =              \
+            YYRHSLOC (Rhs, 0).last_column;                              \
+        }                                                               \
+    while (YYID (0))
+#endif
+]])
+
+# b4_yy_location_print_define
+# ---------------------------
+# Define YY_LOCATION_PRINT.
+m4_define([b4_yy_location_print_define],
+[b4_locations_if([[
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL
+
+/* Print *YYLOCP on YYO.  Private, do not rely on its existence. */
+
+__attribute__((__unused__))
+]b4_c_function_def([yy_location_print_],
+    [static unsigned],
+               [[FILE *yyo],                    [yyo]],
+               [[YYLTYPE const * const yylocp], [yylocp]])[
+{
+  unsigned res = 0;
+  int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
+  if (0 <= yylocp->first_line)
+    {
+      res += fprintf (yyo, "%d", yylocp->first_line);
+      if (0 <= yylocp->first_column)
+        res += fprintf (yyo, ".%d", yylocp->first_column);
+    }
+  if (0 <= yylocp->last_line)
+    {
+      if (yylocp->first_line < yylocp->last_line)
+        {
+          res += fprintf (yyo, "-%d", yylocp->last_line);
+          if (0 <= end_col)
+            res += fprintf (yyo, ".%d", end_col);
+        }
+      else if (0 <= end_col && yylocp->first_column < end_col)
+        res += fprintf (yyo, "-%d", end_col);
+    }
+  return res;
+ }
+
+#  define YY_LOCATION_PRINT(File, Loc)          \
+  yy_location_print_ (File, &(Loc))
+
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif]],
+[[/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif]])
+])
+
+# b4_yyloc_default
+# ----------------
+# Expand to a possible default value for yylloc.
+m4_define([b4_yyloc_default],
+[[
+# if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL
+  = { ]m4_join([, ],
+               m4_defn([b4_location_initial_line]),
+               m4_defn([b4_location_initial_column]),
+               m4_defn([b4_location_initial_line]),
+               m4_defn([b4_location_initial_column]))[ }
+# endif
+]])
diff --git a/data/glr.c b/data/glr.c
index b872bf4..02a76c2 100644
--- a/data/glr.c
+++ b/data/glr.c
@@ -1,25 +1,27 @@
-m4_divert(-1)                                                       -*- C -*-
+                                                                    -*- C -*-
 
 # GLR skeleton for Bison
-# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2002-2012 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-m4_include(b4_pkgdatadir/[c.m4])
+# If we are loaded by glr.cc, do not override c++.m4 definitions by
+# those of c.m4.
+m4_if(b4_skeleton, ["glr.c"],
+      [m4_include(b4_pkgdatadir/[c.m4])])
 
 ## ---------------- ##
 ## Default values.  ##
@@ -35,6 +37,13 @@
 ## Pure/impure interfaces.  ##
 ## ------------------------ ##
 
+b4_define_flag_if([pure])
+# If glr.cc is including this file and thus has already set b4_pure_flag,
+# do not change the value of b4_pure_flag, and do not record a use of api.pure.
+m4_ifndef([b4_pure_flag],
+[b4_percent_define_default([[api.pure]], [[false]])
+ m4_define([b4_pure_flag],
+           [b4_percent_define_flag_if([[api.pure]], [[1]], [[0]])])])
 
 # b4_user_formals
 # ---------------
@@ -67,7 +76,7 @@
 
 # b4_lyyerror_args
 # ----------------
-# Same as above, but on the look-ahead, hence &yylloc instead of yylocp.
+# Same as above, but on the lookahead, hence &yylloc instead of yylocp.
 m4_define([b4_lyyerror_args],
 [b4_pure_if([b4_locations_if([&yylloc, ])])dnl
 m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
@@ -82,18 +91,32 @@
 
 # b4_lpure_args
 # -------------
-# Same as above, but on the look-ahead, hence &yylloc instead of yylocp.
+# Same as above, but on the lookahead, hence &yylloc instead of yylocp.
 m4_define([b4_lpure_args],
 [b4_pure_if([b4_locations_if([, &yylloc])])[]b4_user_args])
 
 
+
 # b4_pure_formals
 # ---------------
-# Arguments passed to yyerror: user formals plus yylocp.
+# Arguments passed to yyerror: user formals plus yylocp with leading comma.
 m4_define([b4_pure_formals],
 [b4_pure_if([b4_locations_if([, YYLTYPE *yylocp])])[]b4_user_formals])
 
 
+# b4_locuser_formals(LOC = yylocp)
+# --------------------------------
+m4_define([b4_locuser_formals],
+[b4_locations_if([, YYLTYPE *m4_default([$1], [yylocp])])[]b4_user_formals])
+
+
+# b4_locuser_args(LOC = yylocp)
+# -----------------------------
+m4_define([b4_locuser_args],
+[b4_locations_if([, m4_default([$1], [yylocp])])[]b4_user_args])
+
+
+
 ## ----------------- ##
 ## Semantic Values.  ##
 ## ----------------- ##
@@ -134,79 +157,59 @@
 [(((yyGLRStackItem const *)yyvsp)@{YYFILL (($2) - ($1))@}.yystate.yyloc)])
 
 
+## -------------- ##
+## Declarations.  ##
+## -------------- ##
+
+# b4_shared_declarations
+# ----------------------
+# Declaration that might either go into the header (if --defines)
+# or open coded in the parser body.
+m4_define([b4_shared_declarations],
+[b4_declare_yydebug[
+]b4_percent_code_get([[requires]])[
+]b4_token_enums(b4_tokens)[
+]b4_declare_yylstype[
+]b4_c_ansi_function_decl(b4_prefix[parse], [int], b4_parse_param)[
+]b4_percent_code_get([[provides]])[]dnl
+])
+
 
 ## -------------- ##
 ## Output files.  ##
 ## -------------- ##
 
-# We do want M4 expansion after # for CPP macros.
-m4_changecom()
-m4_divert(0)dnl
-@output @output_parser_name@
+b4_output_begin([b4_parser_file_name])
 b4_copyright([Skeleton implementation for Bison GLR parsers in C],
-  [2002, 2003, 2004, 2005, 2006])
-[
+             [2002-2012])[
+
 /* C GLR parser skeleton written by Paul Hilfinger.  */
 
 ]b4_identification
 
-m4_if(b4_prefix, [yy], [],
-[/* Substitute the variable and function names.  */
-#define yyparse b4_prefix[]parse
-#define yylex   b4_prefix[]lex
-#define yyerror b4_prefix[]error
-#define yylval  b4_prefix[]lval
-#define yychar  b4_prefix[]char
-#define yydebug b4_prefix[]debug
-#define yynerrs b4_prefix[]nerrs
-#define yylloc  b4_prefix[]lloc])
-
-dnl # b4_shared_declarations
-dnl # ----------------------
-dnl # Declaration that might either go into the header (if --defines)
-dnl # or open coded in the parser body.
-m4_define([b4_shared_declarations],
-[b4_token_enums(b4_tokens)[
+b4_percent_code_get([[top]])[
+]m4_if(b4_api_prefix, [yy], [],
+[[/* Substitute the type names.  */
+#define YYSTYPE ]b4_api_PREFIX[STYPE]b4_locations_if([[
+#define YYLTYPE ]b4_api_PREFIX[LTYPE]])])[
+]m4_if(b4_prefix, [yy], [],
+[[/* Substitute the variable and function names.  */
+#define yyparse ]b4_prefix[parse
+#define yylex   ]b4_prefix[lex
+#define yyerror ]b4_prefix[error
+#define yylval  ]b4_prefix[lval
+#define yychar  ]b4_prefix[char
+#define yydebug ]b4_prefix[debug
+#define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
+#define yylloc  ]b4_prefix[lloc]])])[
 
 /* Copy the first part of user declarations.  */
-]b4_pre_prologue[
+]b4_user_pre_prologue[
 
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-]m4_ifdef([b4_stype],
-[typedef union m4_bregexp(b4_stype, [^{], [YYSTYPE ])
-b4_stype
-/* Line __line__ of glr.c.  */
-b4_syncline([@oline@], [@ofile@])
-	YYSTYPE;],
-[typedef int YYSTYPE;])[
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
+]b4_null_define[
 
-#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE
-{
-]b4_locations_if([
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-],[
-  char yydummy;
-])[
-} YYLTYPE;
-# define YYLTYPE_IS_DECLARED 1
-# define YYLTYPE_IS_TRIVIAL 1
-#endif
-]])
-
-b4_defines_if([#include @output_header_name@],
-	      [b4_shared_declarations])[
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG ]b4_debug_flag[
-#endif
+]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
+               [b4_shared_declarations])[
 
 /* Enabling verbose error messages.  */
 #ifdef YYERROR_VERBOSE
@@ -216,51 +219,43 @@
 # define YYERROR_VERBOSE ]b4_error_verbose_flag[
 #endif
 
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE ]b4_token_table[
-#endif
-
 /* Default (constant) value used for initialization for null
-   right-hand sides.  Unlike the standard yacc.c template,
-   here we set the default value of $$ to a zeroed-out value.
-   Since the default value is undefined, this behavior is
-   technically correct.  */
-static YYSTYPE yyval_default;
+   right-hand sides.  Unlike the standard yacc.c template, here we set
+   the default value of $$ to a zeroed-out value.  Since the default
+   value is undefined, this behavior is technically correct.  */
+static YYSTYPE yyval_default;]b4_locations_if([[
+static YYLTYPE yyloc_default][]b4_yyloc_default;])[
 
 /* Copy the second part of user declarations.  */
-]b4_post_prologue[
+]b4_user_post_prologue
+b4_percent_code_get[]dnl
 
-]/* Line __line__ of glr.c.  */
-b4_syncline([@oline@], [@ofile@])
-[
-#include <stdio.h>
+[#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdarg.h>
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
 #  endif
 # endif
 # ifndef YY_
-#  define YY_(msgid) msgid
+#  define YY_(Msgid) Msgid
 # endif
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
 #else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
 #endif
 
 /* Identity function, used to suppress warnings about constant conditions.  */
 #ifndef lint
-# define YYID(n) (n)
+# define YYID(N) (N)
 #else
 ]b4_c_function_def([YYID], [static int], [[int i], [i]])[
 {
@@ -291,8 +286,9 @@
 #ifndef YYSETJMP
 # include <setjmp.h>
 # define YYJMP_BUF jmp_buf
-# define YYSETJMP(env) setjmp (env)
-# define YYLONGJMP(env, val) longjmp (env, val)
+# define YYSETJMP(Env) setjmp (Env)
+/* Pacify clang.  */
+# define YYLONGJMP(Env, Val) (longjmp (Env, Val), YYASSERT (0))
 #endif
 
 /*-----------------.
@@ -302,20 +298,13 @@
 #ifndef __attribute__
 /* This feature is available in gcc versions 2.5 and later.  */
 # if (! defined __GNUC__ || __GNUC__ < 2 \
-      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__)
+      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
 #  define __attribute__(Spec) /* empty */
 # endif
 #endif
 
-]b4_locations_if([#define YYOPTIONAL_LOC(Name) Name],[
-#ifdef __cplusplus
-# define YYOPTIONAL_LOC(Name) /* empty */
-#else
-# define YYOPTIONAL_LOC(Name) Name __attribute__ ((__unused__))
-#endif])[
-
 #ifndef YYASSERT
-# define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
+# define YYASSERT(Condition) ((void) ((Condition) || (abort (), 0)))
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
@@ -341,9 +330,8 @@
 #define YYUNDEFTOK  ]b4_undef_token_number[
 #define YYMAXUTOK   ]b4_user_token_number_max[
 
-#define YYTRANSLATE(YYX)						\
-  ((YYX <= 0) ? YYEOF :							\
-   (unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+#define YYTRANSLATE(YYX)                                                \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
 static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
@@ -351,7 +339,7 @@
   ]b4_translate[
 };
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
 static const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
@@ -372,7 +360,7 @@
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
@@ -405,9 +393,9 @@
   ]b4_merger[
 };
 
-/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
-   doesn't specify something else to do.  Zero means the default is an
-   error.  */
+/* YYDEFACT[S] -- default reduction number in state S.  Performed when
+   YYTABLE doesn't specify something else to do.  Zero means the default
+   is an error.  */
 static const ]b4_int_type_for([b4_defact])[ yydefact[] =
 {
   ]b4_defact[
@@ -435,8 +423,7 @@
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
 #define YYTABLE_NINF ]b4_table_ninf[
 static const ]b4_int_type_for([b4_table])[ yytable[] =
 {
@@ -474,57 +461,14 @@
   ]b4_stos[
 };
 
-
-/* Prevent warning if -Wmissing-prototypes.  */
-]b4_c_ansi_function_decl([yyparse], [int], b4_parse_param)[
-
 /* Error token number */
 #define YYTERROR 1
 
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
 ]b4_locations_if([[
-#define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))							\
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-# define YY_LOCATION_PRINT(File, Loc)			\
-    fprintf (File, "%d.%d-%d.%d",			\
-	     (Loc).first_line, (Loc).first_column,	\
-	     (Loc).last_line,  (Loc).last_column)
-#endif
-]],[
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
-#endif
-])[
-
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
+]b4_yylloc_default_define[
+# define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
+]])[
+]b4_yy_location_print_define[
 
 /* YYLEX -- calling `yylex' with the right arguments.  */
 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
@@ -544,9 +488,8 @@
 #define b4_prefix[]char yychar
 #define b4_prefix[]lval yylval
 #define b4_prefix[]lloc yylloc])],
-[YYSTYPE yylval;
-
-YYLTYPE yylloc;
+[YYSTYPE yylval;]b4_locations_if([[
+YYLTYPE yylloc;]])[
 
 int yynerrs;
 int yychar;])[
@@ -556,48 +499,47 @@
 
 typedef enum { yyok, yyaccept, yyabort, yyerr } YYRESULTTAG;
 
-#define YYCHK(YYE)							     \
-   do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; }	     \
+#define YYCHK(YYE)                                                           \
+   do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; }       \
    while (YYID (0))
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
 
 # ifndef YYFPRINTF
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
 } while (YYID (0))
 
 ]b4_yy_symbol_print_generate([b4_c_ansi_function_def])[
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			    \
-do {									    \
-  if (yydebug)								    \
-    {									    \
-      YYFPRINTF (stderr, "%s ", Title);					    \
-      yy_symbol_print (stderr, Type,					    \
-		       Value]b4_locations_if([, Location])[]b4_user_args[);  \
-      YYFPRINTF (stderr, "\n");						    \
-    }									    \
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)          \
+do {                                                            \
+  if (yydebug)                                                  \
+    {                                                           \
+      YYFPRINTF (stderr, "%s ", Title);                         \
+      yy_symbol_print (stderr, Type, Value]b4_locuser_args([Location])[);        \
+      YYFPRINTF (stderr, "\n");                                 \
+    }                                                           \
 } while (YYID (0))
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
 int yydebug;
 
-#else /* !YYDEBUG */
+#else /* !]b4_api_PREFIX[DEBUG */
 
 # define YYDPRINTF(Args)
 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
 
-#endif /* !YYDEBUG */
+#endif /* !]b4_api_PREFIX[DEBUG */
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH ]b4_stack_depth_init[
 #endif
 
@@ -621,8 +563,8 @@
 
 #ifndef YYSTACKEXPANDABLE
 # if (! defined __cplusplus \
-      || (]b4_locations_if([[defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
-	  && ]])[defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))
+      || (]b4_locations_if([[defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL \
+          && ]])[defined ]b4_api_PREFIX[STYPE_IS_TRIVIAL && ]b4_api_PREFIX[STYPE_IS_TRIVIAL))
 #  define YYSTACKEXPANDABLE 1
 # else
 #  define YYSTACKEXPANDABLE 0
@@ -630,16 +572,16 @@
 #endif
 
 #if YYSTACKEXPANDABLE
-# define YY_RESERVE_GLRSTACK(Yystack)			\
-  do {							\
-    if (Yystack->yyspaceLeft < YYHEADROOM)		\
-      yyexpandGLRStack (Yystack);			\
+# define YY_RESERVE_GLRSTACK(Yystack)                   \
+  do {                                                  \
+    if (Yystack->yyspaceLeft < YYHEADROOM)              \
+      yyexpandGLRStack (Yystack);                       \
   } while (YYID (0))
 #else
-# define YY_RESERVE_GLRSTACK(Yystack)			\
-  do {							\
-    if (Yystack->yyspaceLeft < YYHEADROOM)		\
-      yyMemoryExhausted (Yystack);			\
+# define YY_RESERVE_GLRSTACK(Yystack)                   \
+  do {                                                  \
+    if (Yystack->yyspaceLeft < YYHEADROOM)              \
+      yyMemoryExhausted (Yystack);                      \
   } while (YYID (0))
 #endif
 
@@ -683,27 +625,27 @@
       char const *yyp = yystr;
 
       for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
+        switch (*++yyp)
+          {
+          case '\'':
+          case ',':
+            goto do_not_strip_quotes;
 
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
+          case '\\':
+            if (*++yyp != '\\')
+              goto do_not_strip_quotes;
+            /* Fall through.  */
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
 
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
@@ -753,9 +695,9 @@
     yySemanticOption* yyfirstVal;
     /** Semantic value for this state.  */
     YYSTYPE yysval;
-  } yysemantics;
+  } yysemantics;]b4_locations_if([[
   /** Source location for this state.  */
-  YYLTYPE yyloc;
+  YYLTYPE yyloc;]])[
 };
 
 struct yyGLRStateSet {
@@ -777,8 +719,8 @@
   yyGLRState* yystate;
   /** The lookahead for this reduction.  */
   int yyrawchar;
-  YYSTYPE yyval;
-  YYLTYPE yyloc;
+  YYSTYPE yyval;]b4_locations_if([[
+  YYLTYPE yyloc;]])[
   /** Next sibling in chain of options.  To facilitate merging,
    *  options are chained in decreasing order by address.  */
   yySemanticOption* yynext;
@@ -799,8 +741,8 @@
 [
   int yyerrcnt;
   int yyrawchar;
-  YYSTYPE yyval;
-  YYLTYPE yyloc;
+  YYSTYPE yyval;]b4_locations_if([[
+  YYLTYPE yyloc;]])[
 ])[
   YYJMP_BUF yyexception_buffer;
   yyGLRStackItem* yyitems;
@@ -820,7 +762,7 @@
 static void
 yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
 {
-  if (yymsg != NULL)
+  if (yymsg != YY_NULL)
     yyerror (]b4_yyerror_args[yymsg);
   YYLONGJMP (yystackp->yyexception_buffer, 1);
 }
@@ -833,7 +775,7 @@
   YYLONGJMP (yystackp->yyexception_buffer, 2);
 }
 
-#if YYDEBUG || YYERROR_VERBOSE
+#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE
 /** A printable representation of TOKEN.  */
 static inline const char*
 yytokenName (yySymbol yytoken)
@@ -852,15 +794,14 @@
 static void
 yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
 {
-  yyGLRState* s;
   int i;
-  s = yyvsp[yylow0].yystate.yypred;
+  yyGLRState *s = yyvsp[yylow0].yystate.yypred;
   for (i = yylow0-1; i >= yylow1; i -= 1)
     {
       YYASSERT (s->yyresolved);
       yyvsp[i].yystate.yyresolved = yytrue;
-      yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;
-      yyvsp[i].yystate.yyloc = s->yyloc;
+      yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;]b4_locations_if([[
+      yyvsp[i].yystate.yyloc = s->yyloc;]])[
       s = yyvsp[i].yystate.yypred = s->yypred;
     }
 }
@@ -888,13 +829,11 @@
  *  yyerr for YYERROR, yyabort for YYABORT.  */
 /*ARGSUSED*/ static YYRESULTTAG
 yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
-	      YYSTYPE* yyvalp,
-	      YYLTYPE* YYOPTIONAL_LOC (yylocp),
-	      yyGLRStack* yystackp
-	      ]b4_user_formals[)
+              yyGLRStack* yystackp,
+              YYSTYPE* yyvalp]b4_locuser_formals[)
 {
   yybool yynormal __attribute__ ((__unused__)) =
-    (yystackp->yysplitPoint == NULL);
+    (yystackp->yysplitPoint == YY_NULL);
   int yylow;
 ]b4_parse_param_use[]dnl
 [# undef yyerrok
@@ -912,23 +851,21 @@
 # undef YYFILL
 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
 # undef YYBACKUP
-# define YYBACKUP(Token, Value)						     \
+# define YYBACKUP(Token, Value)                                              \
   return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")),     \
-	 yyerrok, yyerr
+         yyerrok, yyerr
 
   yylow = 1;
   if (yyrhslen == 0)
     *yyvalp = yyval_default;
   else
-    *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;
+    *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;]b4_locations_if([[
   YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen);
-]b4_locations_if([[  yystackp->yyerror_range[1].yystate.yyloc = *yylocp;
+  yystackp->yyerror_range[1].yystate.yyloc = *yylocp;
 ]])[
   switch (yyn)
     {
-      ]b4_actions
-/* Line __line__ of glr.c.  */
-b4_syncline([@oline@], [@ofile@])[
+      ]b4_user_actions[
       default: break;
     }
 
@@ -956,7 +893,7 @@
     }
 }
 
-			      /* Bison grammar-table manipulation.  */
+                              /* Bison grammar-table manipulation.  */
 
 ]b4_yydestruct_generate([b4_c_ansi_function_def])[
 
@@ -972,32 +909,32 @@
 {
   if (yys->yyresolved)
     yydestruct (yymsg, yystos[yys->yylrState],
-		&yys->yysemantics.yysval]b4_locations_if([, &yys->yyloc])[]b4_user_args[);
+                &yys->yysemantics.yysval]b4_locuser_args([&yys->yyloc])[);
   else
     {
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
       if (yydebug)
-	{
-	  if (yys->yysemantics.yyfirstVal)
-	    YYFPRINTF (stderr, "%s unresolved ", yymsg);
-	  else
-	    YYFPRINTF (stderr, "%s incomplete ", yymsg);
-	  yy_symbol_print (stderr, yystos[yys->yylrState],
-			   NULL]b4_locations_if([, &yys->yyloc])[]b4_user_args[);
-	  YYFPRINTF (stderr, "\n");
-	}
+        {
+          if (yys->yysemantics.yyfirstVal)
+            YYFPRINTF (stderr, "%s unresolved ", yymsg);
+          else
+            YYFPRINTF (stderr, "%s incomplete ", yymsg);
+          yy_symbol_print (stderr, yystos[yys->yylrState],
+                           YY_NULL]b4_locuser_args([&yys->yyloc])[);
+          YYFPRINTF (stderr, "\n");
+        }
 #endif
 
       if (yys->yysemantics.yyfirstVal)
-	{
-	  yySemanticOption *yyoption = yys->yysemantics.yyfirstVal;
-	  yyGLRState *yyrh;
-	  int yyn;
-	  for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule);
-	       yyn > 0;
-	       yyrh = yyrh->yypred, yyn -= 1)
-	    yydestroyGLRState (yymsg, yyrh]b4_user_args[);
-	}
+        {
+          yySemanticOption *yyoption = yys->yysemantics.yyfirstVal;
+          yyGLRState *yyrh;
+          int yyn;
+          for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule);
+               yyn > 0;
+               yyrh = yyrh->yypred, yyn -= 1)
+            yydestroyGLRState (yymsg, yyrh]b4_user_args[);
+        }
     }
 }
 
@@ -1008,17 +945,15 @@
   return yyr1[yyrule];
 }
 
-#define yyis_pact_ninf(yystate) \
-  ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), [1],
-	 [0],
-	 [((yystate) == YYPACT_NINF)])[
+#define yypact_value_is_default(Yystate) \
+  ]b4_table_value_equals([[pact]], [[Yystate]], [b4_pact_ninf])[
 
 /** True iff LR state STATE has only a default reduction (regardless
  *  of token).  */
 static inline yybool
 yyisDefaultedState (yyStateNum yystate)
 {
-  return yyis_pact_ninf (yypact[yystate]);
+  return yypact_value_is_default (yypact[yystate]);
 }
 
 /** The default reduction for STATE, assuming it has one.  */
@@ -1028,10 +963,8 @@
   return yydefact[yystate];
 }
 
-#define yyis_table_ninf(yytable_value) \
-  ]m4_if(m4_eval(b4_table_ninf < b4_table_min), [1],
-	 [YYID (0)],
-	 [((yytable_value) == YYTABLE_NINF)])[
+#define yytable_value_is_error(Yytable_value) \
+  ]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf])[
 
 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
  *  Result R means
@@ -1043,15 +976,16 @@
  */
 static inline void
 yygetLRActions (yyStateNum yystate, int yytoken,
-		int* yyaction, const short int** yyconflicts)
+                int* yyaction, const short int** yyconflicts)
 {
   int yyindex = yypact[yystate] + yytoken;
-  if (yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
+  if (yypact_value_is_default (yypact[yystate])
+      || yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
     {
       *yyaction = -yydefact[yystate];
       *yyconflicts = yyconfl;
     }
-  else if (! yyis_table_ninf (yytable[yyindex]))
+  else if (! yytable_value_is_error (yytable[yyindex]))
     {
       *yyaction = yytable[yyindex];
       *yyconflicts = yyconfl + yyconflp[yyindex];
@@ -1086,7 +1020,7 @@
   return yyaction == 0;
 }
 
-				/* GLRStates */
+                                /* GLRStates */
 
 /** Return a fresh GLRStackItem.  Callers should call
  * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
@@ -1108,7 +1042,7 @@
  *  stack #K of *STACKP. */
 static void
 yyaddDeferredAction (yyGLRStack* yystackp, size_t yyk, yyGLRState* yystate,
-		     yyGLRState* rhs, yyRuleNum yyrule)
+                     yyGLRState* rhs, yyRuleNum yyrule)
 {
   yySemanticOption* yynewOption =
     &yynewGLRStackItem (yystackp, yyfalse)->yyoption;
@@ -1117,8 +1051,8 @@
   if (yystackp->yytops.yylookaheadNeeds[yyk])
     {
       yynewOption->yyrawchar = yychar;
-      yynewOption->yyval = yylval;
-      yynewOption->yyloc = yylloc;
+      yynewOption->yyval = yylval;]b4_locations_if([
+      yynewOption->yyloc = yylloc;])[
     }
   else
     yynewOption->yyrawchar = YYEMPTY;
@@ -1128,7 +1062,7 @@
   YY_RESERVE_GLRSTACK (yystackp);
 }
 
-				/* GLRStacks */
+                                /* GLRStacks */
 
 /** Initialize SET to a singleton set containing an empty stack.  */
 static yybool
@@ -1139,7 +1073,7 @@
   yyset->yystates = (yyGLRState**) YYMALLOC (16 * sizeof yyset->yystates[0]);
   if (! yyset->yystates)
     return yyfalse;
-  yyset->yystates[0] = NULL;
+  yyset->yystates[0] = YY_NULL;
   yyset->yylookaheadNeeds =
     (yybool*) YYMALLOC (16 * sizeof yyset->yylookaheadNeeds[0]);
   if (! yyset->yylookaheadNeeds)
@@ -1169,8 +1103,8 @@
   if (!yystackp->yyitems)
     return yyfalse;
   yystackp->yynextFree = yystackp->yyitems;
-  yystackp->yysplitPoint = NULL;
-  yystackp->yylastDeleted = NULL;
+  yystackp->yysplitPoint = YY_NULL;
+  yystackp->yylastDeleted = YY_NULL;
   return yyinitStateSet (&yystackp->yytops);
 }
 
@@ -1189,9 +1123,9 @@
 {
   yyGLRStackItem* yynewItems;
   yyGLRStackItem* yyp0, *yyp1;
-  size_t yysize, yynewSize;
+  size_t yynewSize;
   size_t yyn;
-  yysize = yystackp->yynextFree - yystackp->yyitems;
+  size_t yysize = yystackp->yynextFree - yystackp->yyitems;
   if (YYMAXDEPTH - YYHEADROOM < yysize)
     yyMemoryExhausted (yystackp);
   yynewSize = 2*yysize;
@@ -1206,35 +1140,35 @@
     {
       *yyp1 = *yyp0;
       if (*(yybool *) yyp0)
-	{
-	  yyGLRState* yys0 = &yyp0->yystate;
-	  yyGLRState* yys1 = &yyp1->yystate;
-	  if (yys0->yypred != NULL)
-	    yys1->yypred =
-	      YYRELOC (yyp0, yyp1, yys0->yypred, yystate);
-	  if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != NULL)
-	    yys1->yysemantics.yyfirstVal =
-	      YYRELOC(yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption);
-	}
+        {
+          yyGLRState* yys0 = &yyp0->yystate;
+          yyGLRState* yys1 = &yyp1->yystate;
+          if (yys0->yypred != YY_NULL)
+            yys1->yypred =
+              YYRELOC (yyp0, yyp1, yys0->yypred, yystate);
+          if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != YY_NULL)
+            yys1->yysemantics.yyfirstVal =
+              YYRELOC (yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption);
+        }
       else
-	{
-	  yySemanticOption* yyv0 = &yyp0->yyoption;
-	  yySemanticOption* yyv1 = &yyp1->yyoption;
-	  if (yyv0->yystate != NULL)
-	    yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate);
-	  if (yyv0->yynext != NULL)
-	    yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption);
-	}
+        {
+          yySemanticOption* yyv0 = &yyp0->yyoption;
+          yySemanticOption* yyv1 = &yyp1->yyoption;
+          if (yyv0->yystate != YY_NULL)
+            yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate);
+          if (yyv0->yynext != YY_NULL)
+            yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption);
+        }
     }
-  if (yystackp->yysplitPoint != NULL)
+  if (yystackp->yysplitPoint != YY_NULL)
     yystackp->yysplitPoint = YYRELOC (yystackp->yyitems, yynewItems,
-				 yystackp->yysplitPoint, yystate);
+                                 yystackp->yysplitPoint, yystate);
 
   for (yyn = 0; yyn < yystackp->yytops.yysize; yyn += 1)
-    if (yystackp->yytops.yystates[yyn] != NULL)
+    if (yystackp->yytops.yystates[yyn] != YY_NULL)
       yystackp->yytops.yystates[yyn] =
-	YYRELOC (yystackp->yyitems, yynewItems,
-		 yystackp->yytops.yystates[yyn], yystate);
+        YYRELOC (yystackp->yyitems, yynewItems,
+                 yystackp->yytops.yystates[yyn], yystate);
   YYFREE (yystackp->yyitems);
   yystackp->yyitems = yynewItems;
   yystackp->yynextFree = yynewItems + yysize;
@@ -1255,7 +1189,7 @@
 static inline void
 yyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys)
 {
-  if (yystackp->yysplitPoint != NULL && yystackp->yysplitPoint > yys)
+  if (yystackp->yysplitPoint != YY_NULL && yystackp->yysplitPoint > yys)
     yystackp->yysplitPoint = yys;
 }
 
@@ -1263,9 +1197,9 @@
 static inline void
 yymarkStackDeleted (yyGLRStack* yystackp, size_t yyk)
 {
-  if (yystackp->yytops.yystates[yyk] != NULL)
+  if (yystackp->yytops.yystates[yyk] != YY_NULL)
     yystackp->yylastDeleted = yystackp->yytops.yystates[yyk];
-  yystackp->yytops.yystates[yyk] = NULL;
+  yystackp->yytops.yystates[yyk] = YY_NULL;
 }
 
 /** Undelete the last stack that was marked as deleted.  Can only be
@@ -1274,12 +1208,12 @@
 static void
 yyundeleteLastStack (yyGLRStack* yystackp)
 {
-  if (yystackp->yylastDeleted == NULL || yystackp->yytops.yysize != 0)
+  if (yystackp->yylastDeleted == YY_NULL || yystackp->yytops.yysize != 0)
     return;
   yystackp->yytops.yystates[0] = yystackp->yylastDeleted;
   yystackp->yytops.yysize = 1;
   YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n"));
-  yystackp->yylastDeleted = NULL;
+  yystackp->yylastDeleted = YY_NULL;
 }
 
 static inline void
@@ -1289,31 +1223,31 @@
   yyi = yyj = 0;
   while (yyj < yystackp->yytops.yysize)
     {
-      if (yystackp->yytops.yystates[yyi] == NULL)
-	{
-	  if (yyi == yyj)
-	    {
-	      YYDPRINTF ((stderr, "Removing dead stacks.\n"));
-	    }
-	  yystackp->yytops.yysize -= 1;
-	}
+      if (yystackp->yytops.yystates[yyi] == YY_NULL)
+        {
+          if (yyi == yyj)
+            {
+              YYDPRINTF ((stderr, "Removing dead stacks.\n"));
+            }
+          yystackp->yytops.yysize -= 1;
+        }
       else
-	{
-	  yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi];
-	  /* In the current implementation, it's unnecessary to copy
-	     yystackp->yytops.yylookaheadNeeds[yyi] since, after
-	     yyremoveDeletes returns, the parser immediately either enters
-	     deterministic operation or shifts a token.  However, it doesn't
-	     hurt, and the code might evolve to need it.  */
-	  yystackp->yytops.yylookaheadNeeds[yyj] =
-	    yystackp->yytops.yylookaheadNeeds[yyi];
-	  if (yyj != yyi)
-	    {
-	      YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n",
-			  (unsigned long int) yyi, (unsigned long int) yyj));
-	    }
-	  yyj += 1;
-	}
+        {
+          yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi];
+          /* In the current implementation, it's unnecessary to copy
+             yystackp->yytops.yylookaheadNeeds[yyi] since, after
+             yyremoveDeletes returns, the parser immediately either enters
+             deterministic operation or shifts a token.  However, it doesn't
+             hurt, and the code might evolve to need it.  */
+          yystackp->yytops.yylookaheadNeeds[yyj] =
+            yystackp->yytops.yylookaheadNeeds[yyi];
+          if (yyj != yyi)
+            {
+              YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n",
+                          (unsigned long int) yyi, (unsigned long int) yyj));
+            }
+          yyj += 1;
+        }
       yyi += 1;
     }
 }
@@ -1322,8 +1256,8 @@
  * LRSTATE, at input position POSN, with (resolved) semantic value SVAL.  */
 static inline void
 yyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
-	    size_t yyposn,
-	    YYSTYPE* yyvalp, YYLTYPE* yylocp)
+            size_t yyposn,
+            YYSTYPE* yyvalp]b4_locations_if([, YYLTYPE* yylocp])[)
 {
   yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
 
@@ -1331,8 +1265,8 @@
   yynewState->yyposn = yyposn;
   yynewState->yyresolved = yytrue;
   yynewState->yypred = yystackp->yytops.yystates[yyk];
-  yynewState->yysemantics.yysval = *yyvalp;
-  yynewState->yyloc = *yylocp;
+  yynewState->yysemantics.yysval = *yyvalp;]b4_locations_if([
+  yynewState->yyloc = *yylocp;])[
   yystackp->yytops.yystates[yyk] = yynewState;
 
   YY_RESERVE_GLRSTACK (yystackp);
@@ -1343,7 +1277,7 @@
  *  semantic value of YYRHS under the action for YYRULE.  */
 static inline void
 yyglrShiftDefer (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
-		 size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule)
+                 size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule)
 {
   yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
 
@@ -1351,7 +1285,7 @@
   yynewState->yyposn = yyposn;
   yynewState->yyresolved = yyfalse;
   yynewState->yypred = yystackp->yytops.yystates[yyk];
-  yynewState->yysemantics.yyfirstVal = NULL;
+  yynewState->yysemantics.yyfirstVal = YY_NULL;
   yystackp->yytops.yystates[yyk] = yynewState;
 
   /* Invokes YY_RESERVE_GLRSTACK.  */
@@ -1366,11 +1300,11 @@
  *  for userAction.  */
 static inline YYRESULTTAG
 yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
-	    YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
+            YYSTYPE* yyvalp]b4_locuser_formals[)
 {
   int yynrhs = yyrhsLength (yyrule);
 
-  if (yystackp->yysplitPoint == NULL)
+  if (yystackp->yysplitPoint == YY_NULL)
     {
       /* Standard special case: single stack.  */
       yyGLRStackItem* rhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
@@ -1378,8 +1312,8 @@
       yystackp->yynextFree -= yynrhs;
       yystackp->yyspaceLeft += yynrhs;
       yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate;
-      return yyuserAction (yyrule, yynrhs, rhs,
-			   yyvalp, yylocp, yystackp]b4_user_args[);
+      return yyuserAction (yyrule, yynrhs, rhs, yystackp,
+                           yyvalp]b4_locuser_args[);
     }
   else
     {
@@ -1391,29 +1325,29 @@
       yyGLRState* yys;
       yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
       yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
-	= yystackp->yytops.yystates[yyk];]b4_locations_if([[
+        = yystackp->yytops.yystates[yyk];]b4_locations_if([[
       if (yynrhs == 0)
-	/* Set default location.  */
-	yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc;]])[
+        /* Set default location.  */
+        yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc;]])[
       for (yyi = 0; yyi < yynrhs; yyi += 1)
-	{
-	  yys = yys->yypred;
-	  YYASSERT (yys);
-	}
+        {
+          yys = yys->yypred;
+          YYASSERT (yys);
+        }
       yyupdateSplit (yystackp, yys);
       yystackp->yytops.yystates[yyk] = yys;
       return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
-			   yyvalp, yylocp, yystackp]b4_user_args[);
+                           yystackp, yyvalp]b4_locuser_args[);
     }
 }
 
-#if !YYDEBUG
+#if !]b4_api_PREFIX[DEBUG
 # define YY_REDUCE_PRINT(Args)
 #else
-# define YY_REDUCE_PRINT(Args)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print Args;		\
+# define YY_REDUCE_PRINT(Args)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print Args;               \
 } while (YYID (0))
 
 /*----------------------------------------------------------.
@@ -1422,29 +1356,29 @@
 
 /*ARGSUSED*/ static inline void
 yy_reduce_print (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
-		 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
+                 YYSTYPE* yyvalp]b4_locuser_formals[)
 {
   int yynrhs = yyrhsLength (yyrule);
   yybool yynormal __attribute__ ((__unused__)) =
-    (yystackp->yysplitPoint == NULL);
+    (yystackp->yysplitPoint == YY_NULL);
   yyGLRStackItem* yyvsp = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
   int yylow = 1;
   int yyi;
-  YYUSE (yyvalp);
-  YYUSE (yylocp);
+  YYUSE (yyvalp);]b4_locations_if([
+  YYUSE (yylocp);])[
 ]b4_parse_param_use[]dnl
 [  YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n",
-	     (unsigned long int) yyk, yyrule - 1,
-	     (unsigned long int) yyrline[yyrule]);
+             (unsigned long int) yyk, yyrule - 1,
+             (unsigned long int) yyrline[yyrule]);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
-      fprintf (stderr, "   $%d = ", yyi + 1);
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &]b4_rhs_value(yynrhs, yyi + 1)[
-		       ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
-		       b4_user_args[);
-      fprintf (stderr, "\n");
+                       &]b4_rhs_value(yynrhs, yyi + 1)[
+                       ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
+                       b4_user_args[);
+      YYFPRINTF (stderr, "\n");
     }
 }
 #endif
@@ -1462,23 +1396,22 @@
  */
 static inline YYRESULTTAG
 yyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
-	     yybool yyforceEval]b4_user_formals[)
+             yybool yyforceEval]b4_user_formals[)
 {
   size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn;
 
-  if (yyforceEval || yystackp->yysplitPoint == NULL)
+  if (yyforceEval || yystackp->yysplitPoint == YY_NULL)
     {
-      YYSTYPE yysval;
-      YYLTYPE yyloc;
+      YYSTYPE yysval;]b4_locations_if([
+      YYLTYPE yyloc;])[
 
-      YY_REDUCE_PRINT ((yystackp, yyk, yyrule, &yysval, &yyloc]b4_user_args[));
-      YYCHK (yydoAction (yystackp, yyk, yyrule, &yysval,
-			 &yyloc]b4_user_args[));
+      YY_REDUCE_PRINT ((yystackp, yyk, yyrule, &yysval]b4_locuser_args([&yyloc])[));
+      YYCHK (yydoAction (yystackp, yyk, yyrule, &yysval]b4_locuser_args([&yyloc])[));
       YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc);
       yyglrShift (yystackp, yyk,
-		  yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState,
-				 yylhsNonterm (yyrule)),
-		  yyposn, &yysval, &yyloc);
+                  yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState,
+                                 yylhsNonterm (yyrule)),
+                  yyposn, &yysval]b4_locations_if([, &yyloc])[);
     }
   else
     {
@@ -1488,35 +1421,35 @@
       yyStateNum yynewLRState;
 
       for (yys = yystackp->yytops.yystates[yyk], yyn = yyrhsLength (yyrule);
-	   0 < yyn; yyn -= 1)
-	{
-	  yys = yys->yypred;
-	  YYASSERT (yys);
-	}
+           0 < yyn; yyn -= 1)
+        {
+          yys = yys->yypred;
+          YYASSERT (yys);
+        }
       yyupdateSplit (yystackp, yys);
       yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule));
       YYDPRINTF ((stderr,
-		  "Reduced stack %lu by rule #%d; action deferred.  Now in state %d.\n",
-		  (unsigned long int) yyk, yyrule - 1, yynewLRState));
+                  "Reduced stack %lu by rule #%d; action deferred.  Now in state %d.\n",
+                  (unsigned long int) yyk, yyrule - 1, yynewLRState));
       for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
-	if (yyi != yyk && yystackp->yytops.yystates[yyi] != NULL)
-	  {
-	    yyGLRState* yyp, *yysplit = yystackp->yysplitPoint;
-	    yyp = yystackp->yytops.yystates[yyi];
-	    while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn)
-	      {
-		if (yyp->yylrState == yynewLRState && yyp->yypred == yys)
-		  {
-		    yyaddDeferredAction (yystackp, yyk, yyp, yys0, yyrule);
-		    yymarkStackDeleted (yystackp, yyk);
-		    YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n",
-				(unsigned long int) yyk,
-				(unsigned long int) yyi));
-		    return yyok;
-		  }
-		yyp = yyp->yypred;
-	      }
-	  }
+        if (yyi != yyk && yystackp->yytops.yystates[yyi] != YY_NULL)
+          {
+            yyGLRState *yysplit = yystackp->yysplitPoint;
+            yyGLRState *yyp = yystackp->yytops.yystates[yyi];
+            while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn)
+              {
+                if (yyp->yylrState == yynewLRState && yyp->yypred == yys)
+                  {
+                    yyaddDeferredAction (yystackp, yyk, yyp, yys0, yyrule);
+                    yymarkStackDeleted (yystackp, yyk);
+                    YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n",
+                                (unsigned long int) yyk,
+                                (unsigned long int) yyi));
+                    return yyok;
+                  }
+                yyp = yyp->yypred;
+              }
+          }
       yystackp->yytops.yystates[yyk] = yys;
       yyglrShiftDefer (yystackp, yyk, yynewLRState, yyposn, yys0, yyrule);
     }
@@ -1526,7 +1459,7 @@
 static size_t
 yysplitStack (yyGLRStack* yystackp, size_t yyk)
 {
-  if (yystackp->yysplitPoint == NULL)
+  if (yystackp->yysplitPoint == YY_NULL)
     {
       YYASSERT (yyk == 0);
       yystackp->yysplitPoint = yystackp->yytops.yystates[yyk];
@@ -1536,27 +1469,27 @@
       yyGLRState** yynewStates;
       yybool* yynewLookaheadNeeds;
 
-      yynewStates = NULL;
+      yynewStates = YY_NULL;
 
       if (yystackp->yytops.yycapacity
-	  > (YYSIZEMAX / (2 * sizeof yynewStates[0])))
-	yyMemoryExhausted (yystackp);
+          > (YYSIZEMAX / (2 * sizeof yynewStates[0])))
+        yyMemoryExhausted (yystackp);
       yystackp->yytops.yycapacity *= 2;
 
       yynewStates =
-	(yyGLRState**) YYREALLOC (yystackp->yytops.yystates,
-				  (yystackp->yytops.yycapacity
-				   * sizeof yynewStates[0]));
-      if (yynewStates == NULL)
-	yyMemoryExhausted (yystackp);
+        (yyGLRState**) YYREALLOC (yystackp->yytops.yystates,
+                                  (yystackp->yytops.yycapacity
+                                   * sizeof yynewStates[0]));
+      if (yynewStates == YY_NULL)
+        yyMemoryExhausted (yystackp);
       yystackp->yytops.yystates = yynewStates;
 
       yynewLookaheadNeeds =
-	(yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds,
-			     (yystackp->yytops.yycapacity
-			      * sizeof yynewLookaheadNeeds[0]));
-      if (yynewLookaheadNeeds == NULL)
-	yyMemoryExhausted (yystackp);
+        (yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds,
+                             (yystackp->yytops.yycapacity
+                              * sizeof yynewLookaheadNeeds[0]));
+      if (yynewLookaheadNeeds == YY_NULL)
+        yyMemoryExhausted (yystackp);
       yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds;
     }
   yystackp->yytops.yystates[yystackp->yytops.yysize]
@@ -1578,11 +1511,11 @@
       yyGLRState *yys0, *yys1;
       int yyn;
       for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
-	   yyn = yyrhsLength (yyy0->yyrule);
-	   yyn > 0;
-	   yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
-	if (yys0->yyposn != yys1->yyposn)
-	  return yyfalse;
+           yyn = yyrhsLength (yyy0->yyrule);
+           yyn > 0;
+           yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
+        if (yys0->yyposn != yys1->yyposn)
+          return yyfalse;
       return yytrue;
     }
   else
@@ -1602,43 +1535,41 @@
        yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
     {
       if (yys0 == yys1)
-	break;
+        break;
       else if (yys0->yyresolved)
-	{
-	  yys1->yyresolved = yytrue;
-	  yys1->yysemantics.yysval = yys0->yysemantics.yysval;
-	}
+        {
+          yys1->yyresolved = yytrue;
+          yys1->yysemantics.yysval = yys0->yysemantics.yysval;
+        }
       else if (yys1->yyresolved)
-	{
-	  yys0->yyresolved = yytrue;
-	  yys0->yysemantics.yysval = yys1->yysemantics.yysval;
-	}
+        {
+          yys0->yyresolved = yytrue;
+          yys0->yysemantics.yysval = yys1->yysemantics.yysval;
+        }
       else
-	{
-	  yySemanticOption** yyz0p;
-	  yySemanticOption* yyz1;
-	  yyz0p = &yys0->yysemantics.yyfirstVal;
-	  yyz1 = yys1->yysemantics.yyfirstVal;
-	  while (YYID (yytrue))
-	    {
-	      if (yyz1 == *yyz0p || yyz1 == NULL)
-		break;
-	      else if (*yyz0p == NULL)
-		{
-		  *yyz0p = yyz1;
-		  break;
-		}
-	      else if (*yyz0p < yyz1)
-		{
-		  yySemanticOption* yyz = *yyz0p;
-		  *yyz0p = yyz1;
-		  yyz1 = yyz1->yynext;
-		  (*yyz0p)->yynext = yyz;
-		}
-	      yyz0p = &(*yyz0p)->yynext;
-	    }
-	  yys1->yysemantics.yyfirstVal = yys0->yysemantics.yyfirstVal;
-	}
+        {
+          yySemanticOption** yyz0p = &yys0->yysemantics.yyfirstVal;
+          yySemanticOption* yyz1 = yys1->yysemantics.yyfirstVal;
+          while (YYID (yytrue))
+            {
+              if (yyz1 == *yyz0p || yyz1 == YY_NULL)
+                break;
+              else if (*yyz0p == YY_NULL)
+                {
+                  *yyz0p = yyz1;
+                  break;
+                }
+              else if (*yyz0p < yyz1)
+                {
+                  yySemanticOption* yyz = *yyz0p;
+                  *yyz0p = yyz1;
+                  yyz1 = yyz1->yynext;
+                  (*yyz0p)->yynext = yyz;
+                }
+              yyz0p = &(*yyz0p)->yynext;
+            }
+          yys1->yysemantics.yyfirstVal = yys0->yysemantics.yyfirstVal;
+        }
     }
 }
 
@@ -1654,9 +1585,9 @@
   if (p0 == p1)
     {
       if (yymerger[r0] == 0 || yymerger[r0] != yymerger[r1])
-	return 0;
+        return 0;
       else
-	return 1;
+        return 1;
     }
   if (p0 == 0 || p1 == 0)
     return 0;
@@ -1668,7 +1599,7 @@
 }
 
 static YYRESULTTAG yyresolveValue (yyGLRState* yys,
-				   yyGLRStack* yystackp]b4_user_formals[);
+                                   yyGLRStack* yystackp]b4_user_formals[);
 
 
 /** Resolve the previous N states starting at and including state S.  If result
@@ -1678,14 +1609,14 @@
  *  if necessary.  */
 static YYRESULTTAG
 yyresolveStates (yyGLRState* yys, int yyn,
-		 yyGLRStack* yystackp]b4_user_formals[)
+                 yyGLRStack* yystackp]b4_user_formals[)
 {
   if (0 < yyn)
     {
       YYASSERT (yys->yypred);
       YYCHK (yyresolveStates (yys->yypred, yyn-1, yystackp]b4_user_args[));
       if (! yys->yyresolved)
-	YYCHK (yyresolveValue (yys, yystackp]b4_user_args[));
+        YYCHK (yyresolveValue (yys, yystackp]b4_user_args[));
     }
   return yyok;
 }
@@ -1696,22 +1627,17 @@
  *  semantic values if invoked).  */
 static YYRESULTTAG
 yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp,
-		 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
+                 YYSTYPE* yyvalp]b4_locuser_formals[)
 {
   yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
-  int yynrhs;
-  int yychar_current;
-  YYSTYPE yylval_current;
-  YYLTYPE yylloc_current;
-  YYRESULTTAG yyflag;
-
-  yynrhs = yyrhsLength (yyopt->yyrule);
-  yyflag = yyresolveStates (yyopt->yystate, yynrhs, yystackp]b4_user_args[);
+  int yynrhs = yyrhsLength (yyopt->yyrule);
+  YYRESULTTAG yyflag =
+    yyresolveStates (yyopt->yystate, yynrhs, yystackp]b4_user_args[);
   if (yyflag != yyok)
     {
       yyGLRState *yys;
       for (yys = yyopt->yystate; yynrhs > 0; yys = yys->yypred, yynrhs -= 1)
-	yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
+        yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
       return yyflag;
     }
 
@@ -1719,22 +1645,24 @@
   if (yynrhs == 0)
     /* Set default location.  */
     yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yyopt->yystate->yyloc;]])[
-  yychar_current = yychar;
-  yylval_current = yylval;
-  yylloc_current = yylloc;
-  yychar = yyopt->yyrawchar;
-  yylval = yyopt->yyval;
-  yylloc = yyopt->yyloc;
-  yyflag = yyuserAction (yyopt->yyrule, yynrhs,
-			   yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
-			   yyvalp, yylocp, yystackp]b4_user_args[);
-  yychar = yychar_current;
-  yylval = yylval_current;
-  yylloc = yylloc_current;
+  {
+    int yychar_current = yychar;
+    YYSTYPE yylval_current = yylval;]b4_locations_if([
+    YYLTYPE yylloc_current = yylloc;])[
+    yychar = yyopt->yyrawchar;
+    yylval = yyopt->yyval;]b4_locations_if([
+    yylloc = yyopt->yyloc;])[
+    yyflag = yyuserAction (yyopt->yyrule, yynrhs,
+                           yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
+                           yystackp, yyvalp]b4_locuser_args[);
+    yychar = yychar_current;
+    yylval = yylval_current;]b4_locations_if([
+    yylloc = yylloc_current;])[
+  }
   return yyflag;
 }
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
 static void
 yyreportTree (yySemanticOption* yyx, int yyindent)
 {
@@ -1746,7 +1674,7 @@
 
   for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred)
     yystates[yyi] = yys;
-  if (yys == NULL)
+  if (yys == YY_NULL)
     {
       yyleftmost_state.yyposn = 0;
       yystates[0] = &yyleftmost_state;
@@ -1756,40 +1684,40 @@
 
   if (yyx->yystate->yyposn < yys->yyposn + 1)
     YYFPRINTF (stderr, "%*s%s -> <Rule %d, empty>\n",
-	       yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
-	       yyx->yyrule - 1);
+               yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
+               yyx->yyrule - 1);
   else
     YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
-	       yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
-	       yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1),
-	       (unsigned long int) yyx->yystate->yyposn);
+               yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
+               yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1),
+               (unsigned long int) yyx->yystate->yyposn);
   for (yyi = 1; yyi <= yynrhs; yyi += 1)
     {
       if (yystates[yyi]->yyresolved)
-	{
-	  if (yystates[yyi-1]->yyposn+1 > yystates[yyi]->yyposn)
-	    YYFPRINTF (stderr, "%*s%s <empty>\n", yyindent+2, "",
-		       yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]));
-	  else
-	    YYFPRINTF (stderr, "%*s%s <tokens %lu .. %lu>\n", yyindent+2, "",
-		       yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]),
-		       (unsigned long int) (yystates[yyi - 1]->yyposn + 1),
-		       (unsigned long int) yystates[yyi]->yyposn);
-	}
+        {
+          if (yystates[yyi-1]->yyposn+1 > yystates[yyi]->yyposn)
+            YYFPRINTF (stderr, "%*s%s <empty>\n", yyindent+2, "",
+                       yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]));
+          else
+            YYFPRINTF (stderr, "%*s%s <tokens %lu .. %lu>\n", yyindent+2, "",
+                       yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]),
+                       (unsigned long int) (yystates[yyi - 1]->yyposn + 1),
+                       (unsigned long int) yystates[yyi]->yyposn);
+        }
       else
-	yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
+        yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
     }
 }
 #endif
 
 /*ARGSUSED*/ static YYRESULTTAG
 yyreportAmbiguity (yySemanticOption* yyx0,
-		   yySemanticOption* yyx1]b4_pure_formals[)
+                   yySemanticOption* yyx1]b4_pure_formals[)
 {
   YYUSE (yyx0);
   YYUSE (yyx1);
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
   YYFPRINTF (stderr, "Ambiguity detected.\n");
   YYFPRINTF (stderr, "Option 1,\n");
   yyreportTree (yyx0, 2);
@@ -1800,65 +1728,63 @@
 
   yyerror (]b4_yyerror_args[YY_("syntax is ambiguous"));
   return yyabort;
-}
+}]b4_locations_if([[
 
 /** Starting at and including state S1, resolve the location for each of the
  *  previous N1 states that is unresolved.  The first semantic option of a state
  *  is always chosen.  */
 static void
 yyresolveLocations (yyGLRState* yys1, int yyn1,
-		    yyGLRStack *yystackp]b4_user_formals[)
+                    yyGLRStack *yystackp]b4_user_formals[)
 {
   if (0 < yyn1)
     {
       yyresolveLocations (yys1->yypred, yyn1 - 1, yystackp]b4_user_args[);
       if (!yys1->yyresolved)
-	{
-	  yySemanticOption *yyoption;
-	  yyGLRStackItem yyrhsloc[1 + YYMAXRHS];
-	  int yynrhs;
-	  int yychar_current;
-	  YYSTYPE yylval_current;
-	  YYLTYPE yylloc_current;
-	  yyoption = yys1->yysemantics.yyfirstVal;
-	  YYASSERT (yyoption != NULL);
-	  yynrhs = yyrhsLength (yyoption->yyrule);
-	  if (yynrhs > 0)
-	    {
-	      yyGLRState *yys;
-	      int yyn;
-	      yyresolveLocations (yyoption->yystate, yynrhs,
-				  yystackp]b4_user_args[);
-	      for (yys = yyoption->yystate, yyn = yynrhs;
-		   yyn > 0;
-		   yys = yys->yypred, yyn -= 1)
-		yyrhsloc[yyn].yystate.yyloc = yys->yyloc;
-	    }
-	  else
-	    {
-	      /* Both yyresolveAction and yyresolveLocations traverse the GSS
-		 in reverse rightmost order.  It is only necessary to invoke
-		 yyresolveLocations on a subforest for which yyresolveAction
-		 would have been invoked next had an ambiguity not been
-		 detected.  Thus the location of the previous state (but not
-		 necessarily the previous state itself) is guaranteed to be
-		 resolved already.  */
-	      yyGLRState *yyprevious = yyoption->yystate;
-	      yyrhsloc[0].yystate.yyloc = yyprevious->yyloc;
-	    }
-	  yychar_current = yychar;
-	  yylval_current = yylval;
-	  yylloc_current = yylloc;
-	  yychar = yyoption->yyrawchar;
-	  yylval = yyoption->yyval;
-	  yylloc = yyoption->yyloc;
-	  YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs);
-	  yychar = yychar_current;
-	  yylval = yylval_current;
-	  yylloc = yylloc_current;
-	}
+        {
+          yyGLRStackItem yyrhsloc[1 + YYMAXRHS];
+          int yynrhs;
+          yySemanticOption *yyoption = yys1->yysemantics.yyfirstVal;
+          YYASSERT (yyoption != YY_NULL);
+          yynrhs = yyrhsLength (yyoption->yyrule);
+          if (yynrhs > 0)
+            {
+              yyGLRState *yys;
+              int yyn;
+              yyresolveLocations (yyoption->yystate, yynrhs,
+                                  yystackp]b4_user_args[);
+              for (yys = yyoption->yystate, yyn = yynrhs;
+                   yyn > 0;
+                   yys = yys->yypred, yyn -= 1)
+                yyrhsloc[yyn].yystate.yyloc = yys->yyloc;
+            }
+          else
+            {
+              /* Both yyresolveAction and yyresolveLocations traverse the GSS
+                 in reverse rightmost order.  It is only necessary to invoke
+                 yyresolveLocations on a subforest for which yyresolveAction
+                 would have been invoked next had an ambiguity not been
+                 detected.  Thus the location of the previous state (but not
+                 necessarily the previous state itself) is guaranteed to be
+                 resolved already.  */
+              yyGLRState *yyprevious = yyoption->yystate;
+              yyrhsloc[0].yystate.yyloc = yyprevious->yyloc;
+            }
+          {
+            int yychar_current = yychar;
+            YYSTYPE yylval_current = yylval;
+            YYLTYPE yylloc_current = yylloc;
+            yychar = yyoption->yyrawchar;
+            yylval = yyoption->yyval;
+            yylloc = yyoption->yyloc;
+            YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs);
+            yychar = yychar_current;
+            yylval = yylval_current;
+            yylloc = yylloc_current;
+          }
+        }
     }
-}
+}]])[
 
 /** Resolve the ambiguity represented in state S, perform the indicated
  *  actions, and set the semantic value of S.  If result != yyok, the chain of
@@ -1870,79 +1796,75 @@
 yyresolveValue (yyGLRState* yys, yyGLRStack* yystackp]b4_user_formals[)
 {
   yySemanticOption* yyoptionList = yys->yysemantics.yyfirstVal;
-  yySemanticOption* yybest;
+  yySemanticOption* yybest = yyoptionList;
   yySemanticOption** yypp;
-  yybool yymerge;
+  yybool yymerge = yyfalse;
   YYSTYPE yysval;
-  YYRESULTTAG yyflag;
-  YYLTYPE *yylocp = &yys->yyloc;
+  YYRESULTTAG yyflag;]b4_locations_if([
+  YYLTYPE *yylocp = &yys->yyloc;])[
 
-  yybest = yyoptionList;
-  yymerge = yyfalse;
-  for (yypp = &yyoptionList->yynext; *yypp != NULL; )
+  for (yypp = &yyoptionList->yynext; *yypp != YY_NULL; )
     {
       yySemanticOption* yyp = *yypp;
 
       if (yyidenticalOptions (yybest, yyp))
-	{
-	  yymergeOptionSets (yybest, yyp);
-	  *yypp = yyp->yynext;
-	}
+        {
+          yymergeOptionSets (yybest, yyp);
+          *yypp = yyp->yynext;
+        }
       else
-	{
-	  switch (yypreference (yybest, yyp))
-	    {
-	    case 0:
-	      yyresolveLocations (yys, 1, yystackp]b4_user_args[);
-	      return yyreportAmbiguity (yybest, yyp]b4_pure_args[);
-	      break;
-	    case 1:
-	      yymerge = yytrue;
-	      break;
-	    case 2:
-	      break;
-	    case 3:
-	      yybest = yyp;
-	      yymerge = yyfalse;
-	      break;
-	    default:
-	      /* This cannot happen so it is not worth a YYASSERT (yyfalse),
-		 but some compilers complain if the default case is
-		 omitted.  */
-	      break;
-	    }
-	  yypp = &yyp->yynext;
-	}
+        {
+          switch (yypreference (yybest, yyp))
+            {
+            case 0:]b4_locations_if([[
+              yyresolveLocations (yys, 1, yystackp]b4_user_args[);]])[
+              return yyreportAmbiguity (yybest, yyp]b4_pure_args[);
+              break;
+            case 1:
+              yymerge = yytrue;
+              break;
+            case 2:
+              break;
+            case 3:
+              yybest = yyp;
+              yymerge = yyfalse;
+              break;
+            default:
+              /* This cannot happen so it is not worth a YYASSERT (yyfalse),
+                 but some compilers complain if the default case is
+                 omitted.  */
+              break;
+            }
+          yypp = &yyp->yynext;
+        }
     }
 
   if (yymerge)
     {
       yySemanticOption* yyp;
       int yyprec = yydprec[yybest->yyrule];
-      yyflag = yyresolveAction (yybest, yystackp, &yysval,
-				yylocp]b4_user_args[);
+      yyflag = yyresolveAction (yybest, yystackp, &yysval]b4_locuser_args[);
       if (yyflag == yyok)
-	for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext)
-	  {
-	    if (yyprec == yydprec[yyp->yyrule])
-	      {
-		YYSTYPE yysval_other;
-		YYLTYPE yydummy;
-		yyflag = yyresolveAction (yyp, yystackp, &yysval_other,
-					  &yydummy]b4_user_args[);
-		if (yyflag != yyok)
-		  {
-		    yydestruct ("Cleanup: discarding incompletely merged value for",
-				yystos[yys->yylrState],
-				&yysval]b4_locations_if([, yylocp])[]b4_user_args[);
-		    break;
-		  }
-		yyuserMerge (yymerger[yyp->yyrule], &yysval, &yysval_other);
-	      }
-	  }
+        for (yyp = yybest->yynext; yyp != YY_NULL; yyp = yyp->yynext)
+          {
+            if (yyprec == yydprec[yyp->yyrule])
+              {
+                YYSTYPE yysval_other;]b4_locations_if([
+                YYLTYPE yydummy;])[
+                yyflag = yyresolveAction (yyp, yystackp, &yysval_other]b4_locuser_args([&yydummy])[);
+                if (yyflag != yyok)
+                  {
+                    yydestruct ("Cleanup: discarding incompletely merged value for",
+                                yystos[yys->yylrState],
+                                &yysval]b4_locuser_args[);
+                    break;
+                  }
+                yyuserMerge (yymerger[yyp->yyrule], &yysval, &yysval_other);
+              }
+          }
     }
   else
-    yyflag = yyresolveAction (yybest, yystackp, &yysval, yylocp]b4_user_args[);
+    yyflag = yyresolveAction (yybest, yystackp, &yysval]b4_locuser_args([yylocp])[);
 
   if (yyflag == yyok)
     {
@@ -1950,24 +1872,24 @@
       yys->yysemantics.yysval = yysval;
     }
   else
-    yys->yysemantics.yyfirstVal = NULL;
+    yys->yysemantics.yyfirstVal = YY_NULL;
   return yyflag;
 }
 
 static YYRESULTTAG
 yyresolveStack (yyGLRStack* yystackp]b4_user_formals[)
 {
-  if (yystackp->yysplitPoint != NULL)
+  if (yystackp->yysplitPoint != YY_NULL)
     {
       yyGLRState* yys;
       int yyn;
 
       for (yyn = 0, yys = yystackp->yytops.yystates[0];
-	   yys != yystackp->yysplitPoint;
-	   yys = yys->yypred, yyn += 1)
-	continue;
+           yys != yystackp->yysplitPoint;
+           yys = yys->yypred, yyn += 1)
+        continue;
       YYCHK (yyresolveStates (yystackp->yytops.yystates[0], yyn, yystackp
-			     ]b4_user_args[));
+                             ]b4_user_args[));
     }
   return yyok;
 }
@@ -1977,10 +1899,10 @@
 {
   yyGLRState* yyp, *yyq, *yyr;
 
-  if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == NULL)
+  if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == YY_NULL)
     return;
 
-  for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = NULL;
+  for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = YY_NULL;
        yyp != yystackp->yysplitPoint;
        yyr = yyp, yyp = yyq, yyq = yyp->yypred)
     yyp->yypred = yyr;
@@ -1988,10 +1910,10 @@
   yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems;
   yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1;
   yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems;
-  yystackp->yysplitPoint = NULL;
-  yystackp->yylastDeleted = NULL;
+  yystackp->yysplitPoint = YY_NULL;
+  yystackp->yylastDeleted = YY_NULL;
 
-  while (yyr != NULL)
+  while (yyr != YY_NULL)
     {
       yystackp->yynextFree->yystate = *yyr;
       yyr = yyr->yypred;
@@ -2004,73 +1926,81 @@
 
 static YYRESULTTAG
 yyprocessOneStack (yyGLRStack* yystackp, size_t yyk,
-		   size_t yyposn]b4_pure_formals[)
+                   size_t yyposn]b4_pure_formals[)
 {
   int yyaction;
   const short int* yyconflicts;
   yyRuleNum yyrule;
 
-  while (yystackp->yytops.yystates[yyk] != NULL)
+  while (yystackp->yytops.yystates[yyk] != YY_NULL)
     {
       yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState;
       YYDPRINTF ((stderr, "Stack %lu Entering state %d\n",
-		  (unsigned long int) yyk, yystate));
+                  (unsigned long int) yyk, yystate));
 
       YYASSERT (yystate != YYFINAL);
 
       if (yyisDefaultedState (yystate))
-	{
-	  yyrule = yydefaultAction (yystate);
-	  if (yyrule == 0)
-	    {
-	      YYDPRINTF ((stderr, "Stack %lu dies.\n",
-			  (unsigned long int) yyk));
-	      yymarkStackDeleted (yystackp, yyk);
-	      return yyok;
-	    }
-	  YYCHK (yyglrReduce (yystackp, yyk, yyrule, yyfalse]b4_user_args[));
-	}
+        {
+          yyrule = yydefaultAction (yystate);
+          if (yyrule == 0)
+            {
+              YYDPRINTF ((stderr, "Stack %lu dies.\n",
+                          (unsigned long int) yyk));
+              yymarkStackDeleted (yystackp, yyk);
+              return yyok;
+            }
+          YYCHK (yyglrReduce (yystackp, yyk, yyrule, yyfalse]b4_user_args[));
+        }
       else
-	{
-	  yySymbol yytoken;
-	  yystackp->yytops.yylookaheadNeeds[yyk] = yytrue;
-	  if (yychar == YYEMPTY)
-	    {
-	      YYDPRINTF ((stderr, "Reading a token: "));
-	      yychar = YYLEX;
-	      yytoken = YYTRANSLATE (yychar);
-	      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-	    }
-	  else
-	    yytoken = YYTRANSLATE (yychar);
-	  yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
+        {
+          yySymbol yytoken;
+          yystackp->yytops.yylookaheadNeeds[yyk] = yytrue;
+          if (yychar == YYEMPTY)
+            {
+              YYDPRINTF ((stderr, "Reading a token: "));
+              yychar = YYLEX;
+            }
 
-	  while (*yyconflicts != 0)
-	    {
-	      size_t yynewStack = yysplitStack (yystackp, yyk);
-	      YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n",
-			  (unsigned long int) yynewStack,
-			  (unsigned long int) yyk));
-	      YYCHK (yyglrReduce (yystackp, yynewStack,
-				  *yyconflicts, yyfalse]b4_user_args[));
-	      YYCHK (yyprocessOneStack (yystackp, yynewStack,
-					yyposn]b4_pure_args[));
-	      yyconflicts += 1;
-	    }
+          if (yychar <= YYEOF)
+            {
+              yychar = yytoken = YYEOF;
+              YYDPRINTF ((stderr, "Now at end of input.\n"));
+            }
+          else
+            {
+              yytoken = YYTRANSLATE (yychar);
+              YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+            }
 
-	  if (yyisShiftAction (yyaction))
-	    break;
-	  else if (yyisErrorAction (yyaction))
-	    {
-	      YYDPRINTF ((stderr, "Stack %lu dies.\n",
-			  (unsigned long int) yyk));
-	      yymarkStackDeleted (yystackp, yyk);
-	      break;
-	    }
-	  else
-	    YYCHK (yyglrReduce (yystackp, yyk, -yyaction,
-				yyfalse]b4_user_args[));
-	}
+          yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
+
+          while (*yyconflicts != 0)
+            {
+              size_t yynewStack = yysplitStack (yystackp, yyk);
+              YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n",
+                          (unsigned long int) yynewStack,
+                          (unsigned long int) yyk));
+              YYCHK (yyglrReduce (yystackp, yynewStack,
+                                  *yyconflicts, yyfalse]b4_user_args[));
+              YYCHK (yyprocessOneStack (yystackp, yynewStack,
+                                        yyposn]b4_pure_args[));
+              yyconflicts += 1;
+            }
+
+          if (yyisShiftAction (yyaction))
+            break;
+          else if (yyisErrorAction (yyaction))
+            {
+              YYDPRINTF ((stderr, "Stack %lu dies.\n",
+                          (unsigned long int) yyk));
+              yymarkStackDeleted (yystackp, yyk);
+              break;
+            }
+          else
+            YYCHK (yyglrReduce (yystackp, yyk, -yyaction,
+                                yyfalse]b4_user_args[));
+        }
     }
   return yyok;
 }
@@ -2078,107 +2008,140 @@
 /*ARGSUSED*/ static void
 yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
 {
-  if (yystackp->yyerrState == 0)
+  if (yystackp->yyerrState != 0)
+    return;
+#if ! YYERROR_VERBOSE
+  yyerror (]b4_lyyerror_args[YY_("syntax error"));
+#else
+  {
+  yySymbol yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+  size_t yysize0 = yytnamerr (YY_NULL, yytokenName (yytoken));
+  size_t yysize = yysize0;
+  yybool yysize_overflow = yyfalse;
+  char* yymsg = YY_NULL;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = YY_NULL;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected").  */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
     {
-#if YYERROR_VERBOSE
-      int yyn;
-      yyn = yypact[yystackp->yytops.yystates[0]->yylrState];
-      if (YYPACT_NINF < yyn && yyn <= YYLAST)
-	{
-	  yySymbol yytoken = YYTRANSLATE (yychar);
-	  size_t yysize0 = yytnamerr (NULL, yytokenName (yytoken));
-	  size_t yysize = yysize0;
-	  size_t yysize1;
-	  yybool yysize_overflow = yyfalse;
-	  char* yymsg = NULL;
-	  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-	  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-	  int yyx;
-	  char *yyfmt;
-	  char const *yyf;
-	  static char const yyunexpected[] = "syntax error, unexpected %s";
-	  static char const yyexpecting[] = ", expecting %s";
-	  static char const yyor[] = " or %s";
-	  char yyformat[sizeof yyunexpected
-			+ sizeof yyexpecting - 1
-			+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-			   * (sizeof yyor - 1))];
-	  char const *yyprefix = yyexpecting;
-
-	  /* Start YYX at -YYN if negative to avoid negative indexes in
-	     YYCHECK.  */
-	  int yyxbegin = yyn < 0 ? -yyn : 0;
-
-	  /* Stay within bounds of both yycheck and yytname.  */
-	  int yychecklim = YYLAST - yyn + 1;
-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-	  int yycount = 1;
-
-	  yyarg[0] = yytokenName (yytoken);
-	  yyfmt = yystpcpy (yyformat, yyunexpected);
-
-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	      {
-		if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-		  {
-		    yycount = 1;
-		    yysize = yysize0;
-		    yyformat[sizeof yyunexpected - 1] = '\0';
-		    break;
-		  }
-		yyarg[yycount++] = yytokenName (yyx);
-		yysize1 = yysize + yytnamerr (NULL, yytokenName (yyx));
-		yysize_overflow |= yysize1 < yysize;
-		yysize = yysize1;
-		yyfmt = yystpcpy (yyfmt, yyprefix);
-		yyprefix = yyor;
-	      }
-
-	  yyf = YY_(yyformat);
-	  yysize1 = yysize + strlen (yyf);
-	  yysize_overflow |= yysize1 < yysize;
-	  yysize = yysize1;
-
-	  if (!yysize_overflow)
-	    yymsg = (char *) YYMALLOC (yysize);
-
-	  if (yymsg)
-	    {
-	      char *yyp = yymsg;
-	      int yyi = 0;
-	      while ((*yyp = *yyf))
-		{
-		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		    {
-		      yyp += yytnamerr (yyp, yyarg[yyi++]);
-		      yyf += 2;
-		    }
-		  else
-		    {
-		      yyp++;
-		      yyf++;
-		    }
-		}
-	      yyerror (]b4_lyyerror_args[yymsg);
-	      YYFREE (yymsg);
-	    }
-	  else
-	    {
-	      yyerror (]b4_lyyerror_args[YY_("syntax error"));
-	      yyMemoryExhausted (yystackp);
-	    }
-	}
-      else
-#endif /* YYERROR_VERBOSE */
-	yyerror (]b4_lyyerror_args[YY_("syntax error"));
-      yynerrs += 1;
+      int yyn = yypact[yystackp->yytops.yystates[0]->yylrState];
+      yyarg[yycount++] = yytokenName (yytoken);
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for this
+             state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytokenName (yyx);
+                {
+                  size_t yysz = yysize + yytnamerr (YY_NULL, yytokenName (yyx));
+                  yysize_overflow |= yysz < yysize;
+                  yysize = yysz;
+                }
+              }
+        }
     }
+
+  switch (yycount)
+    {
+#define YYCASE_(N, S)                   \
+      case N:                           \
+        yyformat = S;                   \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+#undef YYCASE_
+    }
+
+  {
+    size_t yysz = yysize + strlen (yyformat);
+    yysize_overflow |= yysz < yysize;
+    yysize = yysz;
+  }
+
+  if (!yysize_overflow)
+    yymsg = (char *) YYMALLOC (yysize);
+
+  if (yymsg)
+    {
+      char *yyp = yymsg;
+      int yyi = 0;
+      while ((*yyp = *yyformat))
+        {
+          if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+            {
+              yyp += yytnamerr (yyp, yyarg[yyi++]);
+              yyformat += 2;
+            }
+          else
+            {
+              yyp++;
+              yyformat++;
+            }
+        }
+      yyerror (]b4_lyyerror_args[yymsg);
+      YYFREE (yymsg);
+    }
+  else
+    {
+      yyerror (]b4_lyyerror_args[YY_("syntax error"));
+      yyMemoryExhausted (yystackp);
+    }
+  }
+#endif /* YYERROR_VERBOSE */
+  yynerrs += 1;
 }
 
 /* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
    yylval, and yylloc are the syntactic category, semantic value, and location
-   of the look-ahead.  */
+   of the lookahead.  */
 /*ARGSUSED*/ static void
 yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
 {
@@ -2190,45 +2153,53 @@
        reductions.  Skip tokens until we can proceed.  */
     while (YYID (yytrue))
       {
-	yySymbol yytoken;
-	if (yychar == YYEOF)
-	  yyFail (yystackp][]b4_lpure_args[, NULL);
-	if (yychar != YYEMPTY)
-	  {]b4_locations_if([[
-	    /* We throw away the lookahead, but the error range
-	       of the shifted error token must take it into account.  */
-	    yyGLRState *yys = yystackp->yytops.yystates[0];
-	    yyGLRStackItem yyerror_range[3];
-	    yyerror_range[1].yystate.yyloc = yys->yyloc;
-	    yyerror_range[2].yystate.yyloc = yylloc;
-	    YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2);]])[
-	    yytoken = YYTRANSLATE (yychar);
-	    yydestruct ("Error: discarding",
-			yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
-	  }
-	YYDPRINTF ((stderr, "Reading a token: "));
-	yychar = YYLEX;
-	yytoken = YYTRANSLATE (yychar);
-	YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-	yyj = yypact[yystackp->yytops.yystates[0]->yylrState];
-	if (yyis_pact_ninf (yyj))
-	  return;
-	yyj += yytoken;
-	if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken)
-	  {
-	    if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0)
-	      return;
-	  }
-	else if (yytable[yyj] != 0 && ! yyis_table_ninf (yytable[yyj]))
-	  return;
+        yySymbol yytoken;
+        if (yychar == YYEOF)
+          yyFail (yystackp][]b4_lpure_args[, YY_NULL);
+        if (yychar != YYEMPTY)
+          {]b4_locations_if([[
+            /* We throw away the lookahead, but the error range
+               of the shifted error token must take it into account.  */
+            yyGLRState *yys = yystackp->yytops.yystates[0];
+            yyGLRStackItem yyerror_range[3];
+            yyerror_range[1].yystate.yyloc = yys->yyloc;
+            yyerror_range[2].yystate.yyloc = yylloc;
+            YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2);]])[
+            yytoken = YYTRANSLATE (yychar);
+            yydestruct ("Error: discarding",
+                        yytoken, &yylval]b4_locuser_args([&yylloc])[);
+          }
+        YYDPRINTF ((stderr, "Reading a token: "));
+        yychar = YYLEX;
+        if (yychar <= YYEOF)
+          {
+            yychar = yytoken = YYEOF;
+            YYDPRINTF ((stderr, "Now at end of input.\n"));
+          }
+        else
+          {
+            yytoken = YYTRANSLATE (yychar);
+            YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+          }
+        yyj = yypact[yystackp->yytops.yystates[0]->yylrState];
+        if (yypact_value_is_default (yyj))
+          return;
+        yyj += yytoken;
+        if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken)
+          {
+            if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0)
+              return;
+          }
+        else if (! yytable_value_is_error (yytable[yyj]))
+          return;
       }
 
   /* Reduce to one stack.  */
   for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1)
-    if (yystackp->yytops.yystates[yyk] != NULL)
+    if (yystackp->yytops.yystates[yyk] != YY_NULL)
       break;
   if (yyk >= yystackp->yytops.yysize)
-    yyFail (yystackp][]b4_lpure_args[, NULL);
+    yyFail (yystackp][]b4_lpure_args[, YY_NULL);
   for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1)
     yymarkStackDeleted (yystackp, yyk);
   yyremoveDeletes (yystackp);
@@ -2236,52 +2207,54 @@
 
   /* Now pop stack until we find a state that shifts the error token.  */
   yystackp->yyerrState = 3;
-  while (yystackp->yytops.yystates[0] != NULL)
+  while (yystackp->yytops.yystates[0] != YY_NULL)
     {
       yyGLRState *yys = yystackp->yytops.yystates[0];
       yyj = yypact[yys->yylrState];
-      if (! yyis_pact_ninf (yyj))
-	{
-	  yyj += YYTERROR;
-	  if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR
-	      && yyisShiftAction (yytable[yyj]))
-	    {
-	      /* Shift the error token having adjusted its location.  */
-	      YYLTYPE yyerrloc;]b4_locations_if([[
-	      yystackp->yyerror_range[2].yystate.yyloc = yylloc;
-	      YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2);]])[
-	      YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]],
-			       &yylval, &yyerrloc);
-	      yyglrShift (yystackp, 0, yytable[yyj],
-			  yys->yyposn, &yylval, &yyerrloc);
-	      yys = yystackp->yytops.yystates[0];
-	      break;
-	    }
-	}
-]b4_locations_if([[      yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc;]])[
-      yydestroyGLRState ("Error: popping", yys]b4_user_args[);
+      if (! yypact_value_is_default (yyj))
+        {
+          yyj += YYTERROR;
+          if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR
+              && yyisShiftAction (yytable[yyj]))
+            {
+              /* Shift the error token.  */]b4_locations_if([[
+              /* First adjust its location.*/
+              YYLTYPE yyerrloc;
+              yystackp->yyerror_range[2].yystate.yyloc = yylloc;
+              YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2);]])[
+              YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]],
+                               &yylval, &yyerrloc);
+              yyglrShift (yystackp, 0, yytable[yyj],
+                          yys->yyposn, &yylval]b4_locations_if([, &yyerrloc])[);
+              yys = yystackp->yytops.yystates[0];
+              break;
+            }
+        }]b4_locations_if([[
+      yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc;]])[
+      if (yys->yypred != YY_NULL)
+        yydestroyGLRState ("Error: popping", yys]b4_user_args[);
       yystackp->yytops.yystates[0] = yys->yypred;
       yystackp->yynextFree -= 1;
       yystackp->yyspaceLeft += 1;
     }
-  if (yystackp->yytops.yystates[0] == NULL)
-    yyFail (yystackp][]b4_lpure_args[, NULL);
+  if (yystackp->yytops.yystates[0] == YY_NULL)
+    yyFail (yystackp][]b4_lpure_args[, YY_NULL);
 }
 
-#define YYCHK1(YYE)							     \
-  do {									     \
-    switch (YYE) {							     \
-    case yyok:								     \
-      break;								     \
-    case yyabort:							     \
-      goto yyabortlab;							     \
-    case yyaccept:							     \
-      goto yyacceptlab;							     \
-    case yyerr:								     \
-      goto yyuser_error;						     \
-    default:								     \
-      goto yybuglab;							     \
-    }									     \
+#define YYCHK1(YYE)                                                          \
+  do {                                                                       \
+    switch (YYE) {                                                           \
+    case yyok:                                                               \
+      break;                                                                 \
+    case yyabort:                                                            \
+      goto yyabortlab;                                                       \
+    case yyaccept:                                                           \
+      goto yyacceptlab;                                                      \
+    case yyerr:                                                              \
+      goto yyuser_error;                                                     \
+    default:                                                                 \
+      goto yybuglab;                                                         \
+    }                                                                        \
   } while (YYID (0))
 
 
@@ -2299,22 +2272,13 @@
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yychar = YYEMPTY;
-  yylval = yyval_default;
-]b4_locations_if([
-#if YYLTYPE_IS_TRIVIAL
-  yylloc.first_line   = yylloc.last_line   = 1;
-  yylloc.first_column = yylloc.last_column = 0;
-#endif
-])
-m4_ifdef([b4_initial_action], [
-m4_pushdef([b4_at_dollar],     [yylloc])dnl
-m4_pushdef([b4_dollar_dollar], [yylval])dnl
-  /* User initialization code.  */
-  b4_initial_action
-m4_popdef([b4_dollar_dollar])dnl
-m4_popdef([b4_at_dollar])dnl
-/* Line __line__ of glr.c.  */
-b4_syncline([@oline@], [@ofile@])])dnl
+  yylval = yyval_default;]b4_locations_if([
+  yylloc = yyloc_default;])[
+]m4_ifdef([b4_initial_action], [
+b4_dollar_pushdef([yylval], [], [yylloc])dnl
+/* User initialization code.  */
+b4_user_initial_action
+b4_dollar_popdef])[]dnl
 [
   if (! yyinitGLRStack (yystackp, YYINITDEPTH))
     goto yyexhaustedlab;
@@ -2325,147 +2289,154 @@
     case 2: goto yyexhaustedlab;
     default: goto yybuglab;
     }
-  yyglrShift (&yystack, 0, 0, 0, &yylval, &yylloc);
+  yyglrShift (&yystack, 0, 0, 0, &yylval]b4_locations_if([, &yylloc])[);
   yyposn = 0;
 
   while (YYID (yytrue))
     {
       /* For efficiency, we have two loops, the first of which is
-	 specialized to deterministic operation (single stack, no
-	 potential ambiguity).  */
+         specialized to deterministic operation (single stack, no
+         potential ambiguity).  */
       /* Standard mode */
       while (YYID (yytrue))
-	{
-	  yyRuleNum yyrule;
-	  int yyaction;
-	  const short int* yyconflicts;
+        {
+          yyRuleNum yyrule;
+          int yyaction;
+          const short int* yyconflicts;
 
-	  yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
-	  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-	  if (yystate == YYFINAL)
-	    goto yyacceptlab;
-	  if (yyisDefaultedState (yystate))
-	    {
-	      yyrule = yydefaultAction (yystate);
-	      if (yyrule == 0)
-		{
-]b4_locations_if([[		  yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
-		  yyreportSyntaxError (&yystack]b4_user_args[);
-		  goto yyuser_error;
-		}
-	      YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_user_args[));
-	    }
-	  else
-	    {
-	      yySymbol yytoken;
-	      if (yychar == YYEMPTY)
-		{
-		  YYDPRINTF ((stderr, "Reading a token: "));
-		  yychar = YYLEX;
-		  yytoken = YYTRANSLATE (yychar);
-		  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-		}
-	      else
-		yytoken = YYTRANSLATE (yychar);
-	      yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
-	      if (*yyconflicts != 0)
-		break;
-	      if (yyisShiftAction (yyaction))
-		{
-		  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-		  if (yychar != YYEOF)
-		    yychar = YYEMPTY;
-		  yyposn += 1;
-		  yyglrShift (&yystack, 0, yyaction, yyposn, &yylval, &yylloc);
-		  if (0 < yystack.yyerrState)
-		    yystack.yyerrState -= 1;
-		}
-	      else if (yyisErrorAction (yyaction))
-		{
-]b4_locations_if([[		  yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
-		  yyreportSyntaxError (&yystack]b4_user_args[);
-		  goto yyuser_error;
-		}
-	      else
-		YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue]b4_user_args[));
-	    }
-	}
+          yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
+          YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+          if (yystate == YYFINAL)
+            goto yyacceptlab;
+          if (yyisDefaultedState (yystate))
+            {
+              yyrule = yydefaultAction (yystate);
+              if (yyrule == 0)
+                {
+]b4_locations_if([[               yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
+                  yyreportSyntaxError (&yystack]b4_user_args[);
+                  goto yyuser_error;
+                }
+              YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_user_args[));
+            }
+          else
+            {
+              yySymbol yytoken;
+              if (yychar == YYEMPTY)
+                {
+                  YYDPRINTF ((stderr, "Reading a token: "));
+                  yychar = YYLEX;
+                }
+
+              if (yychar <= YYEOF)
+                {
+                  yychar = yytoken = YYEOF;
+                  YYDPRINTF ((stderr, "Now at end of input.\n"));
+                }
+              else
+                {
+                  yytoken = YYTRANSLATE (yychar);
+                  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+                }
+
+              yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
+              if (*yyconflicts != 0)
+                break;
+              if (yyisShiftAction (yyaction))
+                {
+                  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+                  yychar = YYEMPTY;
+                  yyposn += 1;
+                  yyglrShift (&yystack, 0, yyaction, yyposn, &yylval]b4_locations_if([, &yylloc])[);
+                  if (0 < yystack.yyerrState)
+                    yystack.yyerrState -= 1;
+                }
+              else if (yyisErrorAction (yyaction))
+                {
+]b4_locations_if([[               yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
+                  yyreportSyntaxError (&yystack]b4_user_args[);
+                  goto yyuser_error;
+                }
+              else
+                YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue]b4_user_args[));
+            }
+        }
 
       while (YYID (yytrue))
-	{
-	  yySymbol yytoken_to_shift;
-	  size_t yys;
+        {
+          yySymbol yytoken_to_shift;
+          size_t yys;
 
-	  for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
-	    yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY;
+          for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
+            yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY;
 
-	  /* yyprocessOneStack returns one of three things:
+          /* yyprocessOneStack returns one of three things:
 
-	      - An error flag.  If the caller is yyprocessOneStack, it
-		immediately returns as well.  When the caller is finally
-		yyparse, it jumps to an error label via YYCHK1.
+              - An error flag.  If the caller is yyprocessOneStack, it
+                immediately returns as well.  When the caller is finally
+                yyparse, it jumps to an error label via YYCHK1.
 
-	      - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
-		(&yystack, yys), which sets the top state of yys to NULL.  Thus,
-		yyparse's following invocation of yyremoveDeletes will remove
-		the stack.
+              - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
+                (&yystack, yys), which sets the top state of yys to NULL.  Thus,
+                yyparse's following invocation of yyremoveDeletes will remove
+                the stack.
 
-	      - yyok, when ready to shift a token.
+              - yyok, when ready to shift a token.
 
-	     Except in the first case, yyparse will invoke yyremoveDeletes and
-	     then shift the next token onto all remaining stacks.  This
-	     synchronization of the shift (that is, after all preceding
-	     reductions on all stacks) helps prevent double destructor calls
-	     on yylval in the event of memory exhaustion.  */
+             Except in the first case, yyparse will invoke yyremoveDeletes and
+             then shift the next token onto all remaining stacks.  This
+             synchronization of the shift (that is, after all preceding
+             reductions on all stacks) helps prevent double destructor calls
+             on yylval in the event of memory exhaustion.  */
 
-	  for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
-	    YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn]b4_lpure_args[));
-	  yyremoveDeletes (&yystack);
-	  if (yystack.yytops.yysize == 0)
-	    {
-	      yyundeleteLastStack (&yystack);
-	      if (yystack.yytops.yysize == 0)
-		yyFail (&yystack][]b4_lpure_args[, YY_("syntax error"));
-	      YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
-	      YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
-]b4_locations_if([[	      yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
-	      yyreportSyntaxError (&yystack]b4_user_args[);
-	      goto yyuser_error;
-	    }
+          for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
+            YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn]b4_lpure_args[));
+          yyremoveDeletes (&yystack);
+          if (yystack.yytops.yysize == 0)
+            {
+              yyundeleteLastStack (&yystack);
+              if (yystack.yytops.yysize == 0)
+                yyFail (&yystack][]b4_lpure_args[, YY_("syntax error"));
+              YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
+              YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
+]b4_locations_if([[           yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
+              yyreportSyntaxError (&yystack]b4_user_args[);
+              goto yyuser_error;
+            }
 
-	  /* If any yyglrShift call fails, it will fail after shifting.  Thus,
-	     a copy of yylval will already be on stack 0 in the event of a
-	     failure in the following loop.  Thus, yychar is set to YYEMPTY
-	     before the loop to make sure the user destructor for yylval isn't
-	     called twice.  */
-	  yytoken_to_shift = YYTRANSLATE (yychar);
-	  yychar = YYEMPTY;
-	  yyposn += 1;
-	  for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
-	    {
-	      int yyaction;
-	      const short int* yyconflicts;
-	      yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState;
-	      yygetLRActions (yystate, yytoken_to_shift, &yyaction,
-			      &yyconflicts);
-	      /* Note that yyconflicts were handled by yyprocessOneStack.  */
-	      YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys));
-	      YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, &yylval, &yylloc);
-	      yyglrShift (&yystack, yys, yyaction, yyposn,
-			  &yylval, &yylloc);
-	      YYDPRINTF ((stderr, "Stack %lu now in state #%d\n",
-			  (unsigned long int) yys,
-			  yystack.yytops.yystates[yys]->yylrState));
-	    }
+          /* If any yyglrShift call fails, it will fail after shifting.  Thus,
+             a copy of yylval will already be on stack 0 in the event of a
+             failure in the following loop.  Thus, yychar is set to YYEMPTY
+             before the loop to make sure the user destructor for yylval isn't
+             called twice.  */
+          yytoken_to_shift = YYTRANSLATE (yychar);
+          yychar = YYEMPTY;
+          yyposn += 1;
+          for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
+            {
+              int yyaction;
+              const short int* yyconflicts;
+              yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState;
+              yygetLRActions (yystate, yytoken_to_shift, &yyaction,
+                              &yyconflicts);
+              /* Note that yyconflicts were handled by yyprocessOneStack.  */
+              YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys));
+              YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, &yylval, &yylloc);
+              yyglrShift (&yystack, yys, yyaction, yyposn,
+                          &yylval]b4_locations_if([, &yylloc])[);
+              YYDPRINTF ((stderr, "Stack %lu now in state #%d\n",
+                          (unsigned long int) yys,
+                          yystack.yytops.yystates[yys]->yylrState));
+            }
 
-	  if (yystack.yytops.yysize == 1)
-	    {
-	      YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
-	      YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
-	      yycompressStack (&yystack);
-	      break;
-	    }
-	}
+          if (yystack.yytops.yysize == 1)
+            {
+              YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
+              YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
+              yycompressStack (&yystack);
+              break;
+            }
+        }
       continue;
     yyuser_error:
       yyrecoverSyntaxError (&yystack]b4_user_args[);
@@ -2490,10 +2461,9 @@
   goto yyreturn;
 
  yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
+  if (yychar != YYEMPTY)
     yydestruct ("Cleanup: discarding lookahead",
-		YYTRANSLATE (yychar),
-		&yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
+                YYTRANSLATE (yychar), &yylval]b4_locuser_args([&yylloc])[);
 
   /* If the stack is well-formed, pop the stack until it is empty,
      destroying its entries as we go.  But free the stack regardless
@@ -2502,24 +2472,25 @@
     {
       yyGLRState** yystates = yystack.yytops.yystates;
       if (yystates)
-	{
-	  size_t yysize = yystack.yytops.yysize;
-	  size_t yyk;
-	  for (yyk = 0; yyk < yysize; yyk += 1)
-	    if (yystates[yyk])
-	      {
-		while (yystates[yyk])
-		  {
-		    yyGLRState *yys = yystates[yyk];
-]b4_locations_if([[		    yystack.yyerror_range[1].yystate.yyloc = yys->yyloc;]]
-)[		    yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
-		    yystates[yyk] = yys->yypred;
-		    yystack.yynextFree -= 1;
-		    yystack.yyspaceLeft += 1;
-		  }
-		break;
-	      }
-	}
+        {
+          size_t yysize = yystack.yytops.yysize;
+          size_t yyk;
+          for (yyk = 0; yyk < yysize; yyk += 1)
+            if (yystates[yyk])
+              {
+                while (yystates[yyk])
+                  {
+                    yyGLRState *yys = yystates[yyk];
+]b4_locations_if([[                 yystack.yyerror_range[1].yystate.yyloc = yys->yyloc;]]
+)[                  if (yys->yypred != YY_NULL)
+                      yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
+                    yystates[yyk] = yys->yypred;
+                    yystack.yynextFree -= 1;
+                    yystack.yyspaceLeft += 1;
+                  }
+                break;
+              }
+        }
       yyfreeGLRStack (&yystack);
     }
 
@@ -2528,7 +2499,7 @@
 }
 
 /* DEBUGGING ONLY */
-#ifdef YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
 static void yypstack (yyGLRStack* yystackp, size_t yyk)
   __attribute__ ((__unused__));
 static void yypdumpstack (yyGLRStack* yystackp) __attribute__ ((__unused__));
@@ -2539,19 +2510,20 @@
   if (yys->yypred)
     {
       yy_yypstack (yys->yypred);
-      fprintf (stderr, " -> ");
+      YYFPRINTF (stderr, " -> ");
     }
-  fprintf (stderr, "%d@@%lu", yys->yylrState, (unsigned long int) yys->yyposn);
+  YYFPRINTF (stderr, "%d@@%lu", yys->yylrState,
+             (unsigned long int) yys->yyposn);
 }
 
 static void
 yypstates (yyGLRState* yyst)
 {
-  if (yyst == NULL)
-    fprintf (stderr, "<null>");
+  if (yyst == YY_NULL)
+    YYFPRINTF (stderr, "<null>");
   else
     yy_yypstack (yyst);
-  fprintf (stderr, "\n");
+  YYFPRINTF (stderr, "\n");
 }
 
 static void
@@ -2560,8 +2532,8 @@
   yypstates (yystackp->yytops.yystates[yyk]);
 }
 
-#define YYINDEX(YYX)							     \
-    ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
+#define YYINDEX(YYX)                                                         \
+    ((YYX) == YY_NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
 
 
 static void
@@ -2571,46 +2543,47 @@
   size_t yyi;
   for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1)
     {
-      fprintf (stderr, "%3lu. ", (unsigned long int) (yyp - yystackp->yyitems));
+      YYFPRINTF (stderr, "%3lu. ",
+                 (unsigned long int) (yyp - yystackp->yyitems));
       if (*(yybool *) yyp)
-	{
-	  fprintf (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
-		   yyp->yystate.yyresolved, yyp->yystate.yylrState,
-		   (unsigned long int) yyp->yystate.yyposn,
-		   (long int) YYINDEX (yyp->yystate.yypred));
-	  if (! yyp->yystate.yyresolved)
-	    fprintf (stderr, ", firstVal: %ld",
-		     (long int) YYINDEX (yyp->yystate.yysemantics.yyfirstVal));
-	}
+        {
+          YYFPRINTF (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
+                     yyp->yystate.yyresolved, yyp->yystate.yylrState,
+                     (unsigned long int) yyp->yystate.yyposn,
+                     (long int) YYINDEX (yyp->yystate.yypred));
+          if (! yyp->yystate.yyresolved)
+            YYFPRINTF (stderr, ", firstVal: %ld",
+                       (long int) YYINDEX (yyp->yystate
+                                             .yysemantics.yyfirstVal));
+        }
       else
-	{
-	  fprintf (stderr, "Option. rule: %d, state: %ld, next: %ld",
-		   yyp->yyoption.yyrule - 1,
-		   (long int) YYINDEX (yyp->yyoption.yystate),
-		   (long int) YYINDEX (yyp->yyoption.yynext));
-	}
-      fprintf (stderr, "\n");
+        {
+          YYFPRINTF (stderr, "Option. rule: %d, state: %ld, next: %ld",
+                     yyp->yyoption.yyrule - 1,
+                     (long int) YYINDEX (yyp->yyoption.yystate),
+                     (long int) YYINDEX (yyp->yyoption.yynext));
+        }
+      YYFPRINTF (stderr, "\n");
     }
-  fprintf (stderr, "Tops:");
+  YYFPRINTF (stderr, "Tops:");
   for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
-    fprintf (stderr, "%lu: %ld; ", (unsigned long int) yyi,
-	     (long int) YYINDEX (yystackp->yytops.yystates[yyi]));
-  fprintf (stderr, "\n");
+    YYFPRINTF (stderr, "%lu: %ld; ", (unsigned long int) yyi,
+               (long int) YYINDEX (yystackp->yytops.yystates[yyi]));
+  YYFPRINTF (stderr, "\n");
 }
 #endif
-]
+]b4_epilogue[]dnl
+b4_output_end()
 
-b4_epilogue
-b4_defines_if(
-[@output @output_header_name@
+# glr.cc produces its own header.
+m4_if(b4_skeleton, ["glr.c"],
+[b4_defines_if(
+[b4_output_begin([b4_spec_defines_file])
 b4_copyright([Skeleton interface for Bison GLR parsers in C],
-  [2002, 2003, 2004, 2005, 2006])
+             [2002-2012])[
 
-b4_shared_declarations
-
-extern YYSTYPE b4_prefix[]lval;
-
-b4_locations_if([b4_pure_if([],
-[extern YYLTYPE b4_prefix[]lloc;])
-])
-])
+]b4_cpp_guard_open([b4_spec_defines_file])[
+]b4_shared_declarations[
+]b4_cpp_guard_close([b4_spec_defines_file])[
+]b4_output_end()
+])])
diff --git a/data/glr.cc b/data/glr.cc
index d07b5a4..49b4fa1 100644
--- a/data/glr.cc
+++ b/data/glr.cc
@@ -1,22 +1,21 @@
-m4_divert(-1)                                                       -*- C -*-
+                                                                    -*- C -*-
 
 # C++ GLR skeleton for Bison
-# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2002-2012 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 # This skeleton produces a C++ class that encapsulates a C glr parser.
@@ -52,11 +51,14 @@
 
 # The header is mandatory.
 b4_defines_if([],
-              [m4_fatal(b4_skeleton[: using %defines is mandatory])])
+              [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
 
 m4_include(b4_pkgdatadir/[c++.m4])
-m4_include(b4_pkgdatadir/[location.cc])
+b4_percent_define_ifdef([[api.location.type]], [],
+                        [m4_include(b4_pkgdatadir/[location.cc])])
 
+m4_define([b4_parser_class_name],
+          [b4_percent_define_get([[parser_class_name]])])
 
 # Save the parse parameters.
 m4_define([b4_parse_param_orig], m4_defn([b4_parse_param]))
@@ -76,41 +78,49 @@
     [static void],
     [[FILE *],               []],
     [[int yytype],           [yytype]],
-    [[const b4_namespace::b4_parser_class_name::semantic_type *yyvaluep],
-			     [yyvaluep]],
-    [[const b4_namespace::b4_parser_class_name::location_type *yylocationp],
-			     [yylocationp]],
+    [[const ]b4_namespace_ref::b4_parser_class_name[::semantic_type *yyvaluep],
+                             [yyvaluep]],
+    [[const ]b4_namespace_ref::b4_parser_class_name[::location_type *yylocationp],
+                             [yylocationp]],
     b4_parse_param)[
 {
 ]b4_parse_param_use[]dnl
 [  yyparser.yy_symbol_print_ (yytype, yyvaluep]b4_locations_if([, yylocationp])[);
 }
-]])
+]])[
 
+# Hijack the initial action to initialize the locations.
+]b4_locations_if([b4_percent_define_ifdef([[api.location.type]], [],
+[m4_define([b4_initial_action],
+[yylloc.initialize ();]m4_ifdef([b4_initial_action], [
+m4_defn([b4_initial_action])]))])])[
 
-# Declare yyerror.
-m4_append([b4_post_prologue],
-[/* Line __line__ of glr.cc.  */
-b4_syncline([@oline@], [@ofile@])
-
-b4_c_ansi_function_decl([yyerror],
+# Hijack the post prologue to insert early definition of YYLLOC_DEFAULT
+# and declaration of yyerror.
+]m4_append([b4_post_prologue],
+[b4_syncline([@oline@], [@ofile@])[
+]b4_yylloc_default_define[
+#define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
+]b4_c_ansi_function_decl([yyerror],
     [static void],
-    [[b4_namespace::b4_parser_class_name::location_type *yylocationp], [yylocationp]],
+    [[const ]b4_namespace_ref::b4_parser_class_name[::location_type *yylocationp],
+                        [yylocationp]],
     b4_parse_param,
     [[const char* msg], [msg]])])
 
 
-# Define yyerror.
+# Hijack the epilogue to define implementations (yyerror, parser member
+# functions etc.).
 m4_append([b4_epilogue],
-[/* Line __line__ of glr.cc.  */
-b4_syncline([@oline@], [@ofile@])[
+[b4_syncline([@oline@], [@ofile@])[
 /*------------------.
 | Report an error.  |
 `------------------*/
 
 ]b4_c_ansi_function_def([yyerror],
     [static void],
-    [[b4_namespace::b4_parser_class_name::location_type *yylocationp], [yylocationp]],
+    [[const ]b4_namespace_ref::b4_parser_class_name[::location_type *yylocationp],
+                        [yylocationp]],
     b4_parse_param,
     [[const char* msg], [msg]])[
 {
@@ -119,13 +129,16 @@
 }
 
 
-namespace ]b4_namespace[
-{
+]b4_namespace_open[
 ]dnl In this section, the parse param are the original parse_params.
 m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
 [  /// Build a parser object.
-  ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)
-    : yycdebug_ (&std::cerr)]b4_parse_param_cons[
+  ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
+    :])[
+#if ]b4_api_PREFIX[DEBUG
+    ]m4_ifset([b4_parse_param], [  ], [ :])[
+      yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
+#endif]b4_parse_param_cons[
   {
   }
 
@@ -139,34 +152,38 @@
     return ::yyparse (*this]b4_user_args[);
   }
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
   /*--------------------.
   | Print this symbol.  |
   `--------------------*/
 
   inline void
   ]b4_parser_class_name[::yy_symbol_value_print_ (int yytype,
-			   const semantic_type* yyvaluep, const location_type* yylocationp)
+                           const semantic_type* yyvaluep,
+                           const location_type* yylocationp)
   {
-    /* Pacify ``unused variable'' warnings.  */
-    YYUSE (yyvaluep);
     YYUSE (yylocationp);
+    YYUSE (yyvaluep);
+    std::ostream& yyoutput = debug_stream ();
+    std::ostream& yyo = yyoutput;
+    YYUSE (yyo);
     switch (yytype)
       {
   ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
 [        default:
-	  break;
+          break;
       }
   }
 
 
   void
   ]b4_parser_class_name[::yy_symbol_print_ (int yytype,
-			   const semantic_type* yyvaluep, const location_type* yylocationp)
+                           const semantic_type* yyvaluep,
+                           const location_type* yylocationp)
   {
     *yycdebug_ << (yytype < YYNTOKENS ? "token" : "nterm")
-	       << ' ' << yytname[yytype] << " ("
-	       << *yylocationp << ": ";
+               << ' ' << yytname[yytype] << " ("
+               << *yylocationp << ": ";
     yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
     *yycdebug_ << ')';
   }
@@ -187,120 +204,70 @@
   ]b4_parser_class_name[::debug_level_type
   ]b4_parser_class_name[::debug_level () const
   {
-    return ::yydebug;
+    return yydebug;
   }
 
   void
   ]b4_parser_class_name[::set_debug_level (debug_level_type l)
   {
-    ::yydebug = l;
+    // Actually, it is yydebug which is really used.
+    yydebug = l;
   }
 
-#endif /* ! YYDEBUG */
+#endif
 ]m4_popdef([b4_parse_param])dnl
-[} // namespace ]b4_namespace[
-
-]])
+b4_namespace_close])
 
 
 # Let glr.c believe that the user arguments include the parser itself.
 m4_ifset([b4_parse_param],
 [m4_pushdef([b4_parse_param],
-	    m4_dquote([[[b4_namespace::b4_parser_class_name& yyparser], [[yyparser]]],]
-m4_defn([b4_parse_param])))],
+            [[b4_namespace_ref::b4_parser_class_name[& yyparser], [[yyparser]]],]
+m4_defn([b4_parse_param]))],
 [m4_pushdef([b4_parse_param],
-	    [[[[b4_namespace::b4_parser_class_name& yyparser], [[yyparser]]]]])
+            [[b4_namespace_ref::b4_parser_class_name[& yyparser], [[yyparser]]]])
 ])
 m4_include(b4_pkgdatadir/[glr.c])
 m4_popdef([b4_parse_param])
 
-
-@output @output_header_name@
+b4_output_begin([b4_spec_defines_file])
 b4_copyright([Skeleton interface for Bison GLR parsers in C++],
-  [2002, 2003, 2004, 2005, 2006])[
+             [2002-2006, 2009-2012])[
 
 /* C++ GLR parser skeleton written by Akim Demaille.  */
 
-#ifndef PARSER_HEADER_H
-# define PARSER_HEADER_H
+]b4_cpp_guard_open([b4_spec_defines_file])[
 
-#include <string>
-#include <iostream>
+]b4_percent_code_get([[requires]])[
 
-/* Using locations.  */
-#define YYLSP_NEEDED ]b4_locations_flag[
+# include <string>
+# include <iostream>
+]b4_percent_define_ifdef([[api.location.type]], [],
+                         [[# include "location.hh"]])[
 
-namespace ]b4_namespace[
-{
-  class position;
-  class location;
-}
+]b4_YYDEBUG_define[
 
-/* Copy the first part of user declarations.  */
-]b4_pre_prologue[
-
-]/* Line __line__ of glr.cc.  */
-b4_syncline([@oline@], [@ofile@])[
-
-#include "location.hh"
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG ]b4_debug_flag[
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE ]b4_error_verbose_flag[
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE ]b4_token_table[
-#endif
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (N)								\
-	{								\
-	  (Current).begin  = YYRHSLOC (Rhs, 1).begin;			\
-	  (Current).end    = YYRHSLOC (Rhs, N).end;			\
-	}								\
-      else								\
-	{								\
-	  (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;	\
-	}								\
-    while (/*CONSTCOND*/ 0)
-#endif
-
-namespace ]b4_namespace[
-{
+]b4_namespace_open[
   /// A Bison parser.
   class ]b4_parser_class_name[
   {
   public:
     /// Symbol semantic values.
-#ifndef YYSTYPE
+# ifndef ]b4_api_PREFIX[STYPE
 ]m4_ifdef([b4_stype],
 [    union semantic_type
-b4_stype
-/* Line __line__ of lalr1.cc.  */
-b4_syncline([@oline@], [@ofile@])
-	;],
-[    typedef int semantic_type;])[
-#else
-    typedef YYSTYPE semantic_type;
-#endif
+    {
+b4_user_stype
+    };],
+[m4_if(b4_tag_seen_flag, 0,
+[[    typedef int semantic_type;]],
+[[    typedef ]b4_api_PREFIX[STYPE semantic_type;]])])[
+# else
+    typedef ]b4_api_PREFIX[STYPE semantic_type;
+# endif
     /// Symbol locations.
-    typedef ]b4_location_type[ location_type;
+    typedef ]b4_percent_define_get([[api.location.type]],
+                                   [[location]])[ location_type;
     /// Tokens.
     struct token
     {
@@ -338,52 +305,42 @@
     virtual void error (const location_type& loc, const std::string& msg);
   private:
 
-#if YYDEBUG
+# if ]b4_api_PREFIX[DEBUG
   public:
     /// \brief Report a symbol value on the debug stream.
     /// \param yytype       The token type.
     /// \param yyvaluep     Its semantic value.
     /// \param yylocationp  Its location.
     virtual void yy_symbol_value_print_ (int yytype,
-					 const semantic_type* yyvaluep,
-					 const location_type* yylocationp);
+                                         const semantic_type* yyvaluep,
+                                         const location_type* yylocationp);
     /// \brief Report a symbol on the debug stream.
     /// \param yytype       The token type.
     /// \param yyvaluep     Its semantic value.
     /// \param yylocationp  Its location.
     virtual void yy_symbol_print_ (int yytype,
-				   const semantic_type* yyvaluep,
-				   const location_type* yylocationp);
+                                   const semantic_type* yyvaluep,
+                                   const location_type* yylocationp);
   private:
-#endif /* ! YYDEBUG */
-
-
-    /// \brief Reclaim the memory associated to a symbol.
-    /// \param yymsg        Why this token is reclaimed.
-    /// \param yytype       The symbol type.
-    /// \param yyvaluep     Its semantic value.
-    /// \param yylocationp  Its location.
-    inline void yydestruct_ (const char* yymsg,
-			     int yytype,
-			     semantic_type* yyvaluep,
-			     location_type* yylocationp);
-
     /* Debugging.  */
     std::ostream* yycdebug_;
+# endif
+
 ]b4_parse_param_vars[
   };
 
 ]dnl Redirections for glr.c.
-m4_ifset([b4_global_tokens_and_yystype],
+b4_percent_define_flag_if([[global_tokens_and_yystype]],
 [b4_token_defines(b4_tokens)])
 [
-#ifndef YYSTYPE
-# define YYSTYPE ]b4_namespace[::]b4_parser_class_name[::semantic_type
+#ifndef ]b4_api_PREFIX[STYPE
+# define ]b4_api_PREFIX[STYPE ]b4_namespace_ref[::]b4_parser_class_name[::semantic_type
 #endif
-#ifndef YYLTYPE
-# define YYLTYPE ]b4_namespace[::]b4_parser_class_name[::location_type
+#ifndef ]b4_api_PREFIX[LTYPE
+# define ]b4_api_PREFIX[LTYPE ]b4_namespace_ref[::]b4_parser_class_name[::location_type
 #endif
 
-}
-
-#endif /* ! defined PARSER_HEADER_H */]
+]b4_namespace_close[
+]b4_percent_code_get([[provides]])[
+]b4_cpp_guard_close([b4_spec_defines_file])[
+]b4_output_end()
diff --git a/data/java-skel.m4 b/data/java-skel.m4
new file mode 100644
index 0000000..81bf02a
--- /dev/null
+++ b/data/java-skel.m4
@@ -0,0 +1,26 @@
+                                                            -*- Autoconf -*-
+
+# Java skeleton dispatching for Bison.
+
+# Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+b4_glr_if(             [b4_complain([%%glr-parser not supported for Java])])
+b4_nondeterministic_if([b4_complain([%%nondeterministic-parser not supported for Java])])
+
+m4_define_default([b4_used_skeleton], [b4_pkgdatadir/[lalr1.java]])
+m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
+
+m4_include(b4_used_skeleton)
diff --git a/data/java.m4 b/data/java.m4
new file mode 100644
index 0000000..627028b
--- /dev/null
+++ b/data/java.m4
@@ -0,0 +1,304 @@
+                                                            -*- Autoconf -*-
+
+# Java language support for Bison
+
+# Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+m4_include(b4_pkgdatadir/[c-like.m4])
+
+# b4_comment(TEXT)
+# ----------------
+m4_define([b4_comment], [/* m4_bpatsubst([$1], [
+], [
+   ])  */])
+
+
+# b4_list2(LIST1, LIST2)
+# --------------------------
+# Join two lists with a comma if necessary.
+m4_define([b4_list2],
+	  [$1[]m4_ifval(m4_quote($1), [m4_ifval(m4_quote($2), [[, ]])])[]$2])
+
+
+# b4_percent_define_get3(DEF, PRE, POST, NOT)
+# -------------------------------------------
+# Expand to the value of DEF surrounded by PRE and POST if it's %define'ed,
+# otherwise NOT.
+m4_define([b4_percent_define_get3],
+	  [m4_ifval(m4_quote(b4_percent_define_get([$1])),
+		[$2[]b4_percent_define_get([$1])[]$3], [$4])])
+
+
+
+# b4_flag_value(BOOLEAN-FLAG)
+# ---------------------------
+m4_define([b4_flag_value], [b4_flag_if([$1], [true], [false])])
+
+
+# b4_public_if(TRUE, FALSE)
+# -------------------------
+b4_percent_define_default([[public]], [[false]])
+m4_define([b4_public_if],
+[b4_percent_define_flag_if([public], [$1], [$2])])
+
+
+# b4_abstract_if(TRUE, FALSE)
+# ---------------------------
+b4_percent_define_default([[abstract]], [[false]])
+m4_define([b4_abstract_if],
+[b4_percent_define_flag_if([abstract], [$1], [$2])])
+
+
+# b4_final_if(TRUE, FALSE)
+# ---------------------------
+b4_percent_define_default([[final]], [[false]])
+m4_define([b4_final_if],
+[b4_percent_define_flag_if([final], [$1], [$2])])
+
+
+# b4_strictfp_if(TRUE, FALSE)
+# ---------------------------
+b4_percent_define_default([[strictfp]], [[false]])
+m4_define([b4_strictfp_if],
+[b4_percent_define_flag_if([strictfp], [$1], [$2])])
+
+
+# b4_lexer_if(TRUE, FALSE)
+# ------------------------
+m4_define([b4_lexer_if],
+[b4_percent_code_ifdef([[lexer]], [$1], [$2])])
+
+
+# b4_identification
+# -----------------
+m4_define([b4_identification],
+[  /** Version number for the Bison executable that generated this parser.  */
+  public static final String bisonVersion = "b4_version";
+
+  /** Name of the skeleton that generated this parser.  */
+  public static final String bisonSkeleton = b4_skeleton;
+])
+
+
+## ------------ ##
+## Data types.  ##
+## ------------ ##
+
+# b4_int_type(MIN, MAX)
+# ---------------------
+# Return the smallest int type able to handle numbers ranging from
+# MIN to MAX (included).
+m4_define([b4_int_type],
+[m4_if(b4_ints_in($@,   [-128],   [127]), [1], [byte],
+       b4_ints_in($@, [-32768], [32767]), [1], [short],
+					       [int])])
+
+# b4_int_type_for(NAME)
+# ---------------------
+# Return the smallest int type able to handle numbers ranging from
+# `NAME_min' to `NAME_max' (included).
+m4_define([b4_int_type_for],
+[b4_int_type($1_min, $1_max)])
+
+# b4_null
+# -------
+m4_define([b4_null], [null])
+
+
+## ------------------------- ##
+## Assigning token numbers.  ##
+## ------------------------- ##
+
+# b4_token_enum(TOKEN-NAME, TOKEN-NUMBER)
+# ---------------------------------------
+# Output the definition of this token as an enum.
+m4_define([b4_token_enum],
+[  /** Token number, to be returned by the scanner.  */
+  public static final int $1 = $2;
+])
+
+
+# b4_token_enums(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
+# -----------------------------------------------------
+# Output the definition of the tokens (if there are) as enums.
+m4_define([b4_token_enums],
+[m4_if([$#$1], [1], [],
+[/* Tokens.  */
+m4_map([b4_token_enum], [$@])])
+])
+
+# b4-case(ID, CODE)
+# -----------------
+# We need to fool Java's stupid unreachable code detection.
+m4_define([b4_case], [  case $1:
+  if (yyn == $1)
+    $2;
+  break;
+    ])
+
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+m4_define([b4_yystype], [b4_percent_define_get([[stype]])])
+b4_percent_define_default([[stype]], [[Object]])
+
+# %name-prefix
+m4_define_default([b4_prefix], [[YY]])
+
+b4_percent_define_default([[parser_class_name]], [b4_prefix[]Parser])
+m4_define([b4_parser_class_name], [b4_percent_define_get([[parser_class_name]])])
+
+b4_percent_define_default([[lex_throws]], [[java.io.IOException]])
+m4_define([b4_lex_throws], [b4_percent_define_get([[lex_throws]])])
+
+b4_percent_define_default([[throws]], [])
+m4_define([b4_throws], [b4_percent_define_get([[throws]])])
+
+b4_percent_define_default([[api.location.type]], [Location])
+m4_define([b4_location_type], [b4_percent_define_get([[api.location.type]])])
+
+b4_percent_define_default([[api.position.type]], [Position])
+m4_define([b4_position_type], [b4_percent_define_get([[api.position.type]])])
+
+
+## ----------------- ##
+## Semantic Values.  ##
+## ----------------- ##
+
+
+# b4_lhs_value([TYPE])
+# --------------------
+# Expansion of $<TYPE>$.
+m4_define([b4_lhs_value], [yyval])
+
+
+# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
+# --------------------------------------
+# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
+# symbols on RHS.
+#
+# In this simple implementation, %token and %type have class names
+# between the angle brackets.
+m4_define([b4_rhs_value],
+[(m4_ifval($3, [($3)])[](yystack.valueAt ($1-($2))))])
+
+# b4_lhs_location()
+# -----------------
+# Expansion of @$.
+m4_define([b4_lhs_location],
+[(yyloc)])
+
+
+# b4_rhs_location(RULE-LENGTH, NUM)
+# ---------------------------------
+# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
+# on RHS.
+m4_define([b4_rhs_location],
+[yystack.locationAt ($1-($2))])
+
+
+# b4_lex_param
+# b4_parse_param
+# --------------
+# If defined, b4_lex_param arrives double quoted, but below we prefer
+# it to be single quoted.  Same for b4_parse_param.
+
+# TODO: should be in bison.m4
+m4_define_default([b4_lex_param], [[]])
+m4_define([b4_lex_param], b4_lex_param)
+m4_define([b4_parse_param], b4_parse_param)
+
+# b4_lex_param_decl
+# -------------------
+# Extra formal arguments of the constructor.
+m4_define([b4_lex_param_decl],
+[m4_ifset([b4_lex_param],
+          [b4_remove_comma([$1],
+			   b4_param_decls(b4_lex_param))],
+	  [$1])])
+
+m4_define([b4_param_decls],
+	  [m4_map([b4_param_decl], [$@])])
+m4_define([b4_param_decl], [, $1])
+
+m4_define([b4_remove_comma], [m4_ifval(m4_quote($1), [$1, ], [])m4_shift2($@)])
+
+
+
+# b4_parse_param_decl
+# -------------------
+# Extra formal arguments of the constructor.
+m4_define([b4_parse_param_decl],
+[m4_ifset([b4_parse_param],
+          [b4_remove_comma([$1],
+			   b4_param_decls(b4_parse_param))],
+	  [$1])])
+
+
+
+# b4_lex_param_call
+# -------------------
+# Delegating the lexer parameters to the lexer constructor.
+m4_define([b4_lex_param_call],
+          [m4_ifset([b4_lex_param],
+	            [b4_remove_comma([$1],
+				     b4_param_calls(b4_lex_param))],
+	            [$1])])
+m4_define([b4_param_calls],
+	  [m4_map([b4_param_call], [$@])])
+m4_define([b4_param_call], [, $2])
+
+
+
+# b4_parse_param_cons
+# -------------------
+# Extra initialisations of the constructor.
+m4_define([b4_parse_param_cons],
+          [m4_ifset([b4_parse_param],
+		    [b4_constructor_calls(b4_parse_param)])])
+
+m4_define([b4_constructor_calls],
+	  [m4_map([b4_constructor_call], [$@])])
+m4_define([b4_constructor_call],
+	  [this.$2 = $2;
+	  ])
+
+
+
+# b4_parse_param_vars
+# -------------------
+# Extra instance variables.
+m4_define([b4_parse_param_vars],
+          [m4_ifset([b4_parse_param],
+		    [
+    /* User arguments.  */
+b4_var_decls(b4_parse_param)])])
+
+m4_define([b4_var_decls],
+	  [m4_map_sep([b4_var_decl], [
+], [$@])])
+m4_define([b4_var_decl],
+	  [    protected final $1;])
+
+
+
+# b4_maybe_throws(THROWS)
+# -----------------------
+# Expand to either an empty string or "throws THROWS".
+m4_define([b4_maybe_throws],
+	  [m4_ifval($1, [throws $1])])
diff --git a/data/lalr1.cc b/data/lalr1.cc
index abcdcd5..237b246 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -1,125 +1,81 @@
-m4_divert(-1)
-
 # C++ skeleton for Bison
 
-# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 m4_include(b4_pkgdatadir/[c++.m4])
 
+m4_define([b4_parser_class_name],
+          [b4_percent_define_get([[parser_class_name]])])
+
 # The header is mandatory.
 b4_defines_if([],
-              [m4_fatal(b4_skeleton[: using %defines is mandatory])])
+              [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
 
-# Backward compatibility.
-m4_define([b4_location_constructors])
-m4_include(b4_pkgdatadir/[location.cc])
+b4_percent_define_ifdef([[api.location.type]], [],
+  [# Backward compatibility.
+  m4_define([b4_location_constructors])
+  m4_include(b4_pkgdatadir/[location.cc])])
+m4_include(b4_pkgdatadir/[stack.hh])
 
-# We do want M4 expansion after # for CPP macros.
-m4_changecom()
-m4_divert(0)dnl
 b4_defines_if(
-[@output @output_header_name@
+[b4_output_begin([b4_spec_defines_file])
 b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++],
-  [2002, 2003, 2004, 2005, 2006])
-dnl FIXME: This is wrong, we want computed header guards.
+             [2002-2012])
 [
+/**
+ ** \file ]b4_spec_defines_file[
+ ** Define the ]b4_namespace_ref[::parser class.
+ */
+
 /* C++ LALR(1) parser skeleton written by Akim Demaille.  */
 
-#ifndef PARSER_HEADER_H
-# define PARSER_HEADER_H
+]b4_cpp_guard_open([b4_spec_defines_file])[
+
+]b4_percent_code_get([[requires]])[
 
 #include <string>
 #include <iostream>
 #include "stack.hh"
+]b4_percent_define_ifdef([[api.location.type]], [],
+                         [[#include "location.hh"]])[
 
-namespace ]b4_namespace[
-{
-  class position;
-  class location;
-}
+]b4_YYDEBUG_define[
 
-/* First part of user declarations.  */
-]b4_pre_prologue[
-
-]/* Line __line__ of lalr1.cc.  */
-b4_syncline([@oline@], [@ofile@])[
-
-]dnl Include location.hh here: it might depend on headers included above.
-[#include "location.hh"
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG ]b4_debug_flag[
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE ]b4_error_verbose_flag[
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE ]b4_token_table[
-#endif
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
-do {							\
-  if (N)						\
-    {							\
-      (Current).begin = (Rhs)[1].begin;			\
-      (Current).end   = (Rhs)[N].end;			\
-    }							\
-  else							\
-    {							\
-      (Current).begin = (Current).end = (Rhs)[0].end;	\
-    }							\
-} while (false)
-#endif
-
-namespace ]b4_namespace[
-{
+]b4_namespace_open[
 
   /// A Bison parser.
   class ]b4_parser_class_name[
   {
   public:
     /// Symbol semantic values.
-#ifndef YYSTYPE
+#ifndef ]b4_api_PREFIX[STYPE
 ]m4_ifdef([b4_stype],
 [    union semantic_type
-b4_stype
-/* Line __line__ of lalr1.cc.  */
-b4_syncline([@oline@], [@ofile@])
-	;],
-[    typedef int semantic_type;])[
+    {
+b4_user_stype
+    };],
+[m4_if(b4_tag_seen_flag, 0,
+[[    typedef int semantic_type;]],
+[[    typedef ]b4_api_PREFIX[STYPE semantic_type;]])])[
 #else
-    typedef YYSTYPE semantic_type;
+    typedef ]b4_api_PREFIX[STYPE semantic_type;
 #endif
     /// Symbol locations.
-    typedef ]b4_location_type[ location_type;
+    typedef ]b4_percent_define_get([[api.location.type]],
+                                   [[location]])[ location_type;
     /// Tokens.
     struct token
     {
@@ -136,6 +92,7 @@
     /// \returns  0 iff parsing succeeded.
     virtual int parse ();
 
+#if ]b4_api_PREFIX[DEBUG
     /// The current debugging stream.
     std::ostream& debug_stream () const;
     /// Set the current debugging stream.
@@ -147,6 +104,7 @@
     debug_level_type debug_level () const;
     /// Set the current debugging level.
     void set_debug_level (debug_level_type l);
+#endif
 
   private:
     /// Report a syntax error.
@@ -156,11 +114,10 @@
 
     /// Generate an error message.
     /// \param state   the state where the error occurred.
-    /// \param tok     the look-ahead token.
-    virtual std::string yysyntax_error_ (int yystate]dnl
-b4_error_verbose_if([, int tok])[);
+    /// \param tok     the lookahead token.
+    virtual std::string yysyntax_error_ (int yystate, int tok);
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
     /// \brief Report a symbol value on the debug stream.
     /// \param yytype       The token type.
     /// \param yyvaluep     Its semantic value.
@@ -175,7 +132,7 @@
     virtual void yy_symbol_print_ (int yytype,
 				   const semantic_type* yyvaluep,
 				   const location_type* yylocationp);
-#endif /* ! YYDEBUG */
+#endif
 
 
     /// State numbers.
@@ -194,6 +151,14 @@
     /// The location stack.
     location_stack_type yylocation_stack_;
 
+    /// Whether the given \c yypact_ value indicates a defaulted state.
+    /// \param yyvalue   the value to check
+    static bool yy_pact_value_is_default_ (int yyvalue);
+
+    /// Whether the given \c yytable_ value indicates a syntax error.
+    /// \param yyvalue   the value to check
+    static bool yy_table_value_is_error_ (int yyvalue);
+
     /// Internal symbol numbers.
     typedef ]b4_int_type_for([b4_translate])[ token_number_type;
     /* Tables.  */
@@ -201,7 +166,7 @@
     static const ]b4_int_type_for([b4_pact])[ yypact_[];
     static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
 
-    /// For a state, default rule to reduce.
+    /// For a state, default reduction number.
     /// Unless\a  yytable_ specifies something else to do.
     /// Zero means the default is an error.
     static const ]b4_int_type_for([b4_defact])[ yydefact_[];
@@ -225,19 +190,15 @@
     /// For a rule, its LHS.
     static const ]b4_int_type_for([b4_r1])[ yyr1_[];
     /// For a rule, its RHS length.
-    static const ]b4_int_type_for([b4_r2])[ yyr2_[];
+    static const ]b4_int_type_for([b4_r2])[ yyr2_[]; ]b4_error_verbose_if([
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+    /// Convert the symbol name \a n to a form suitable for a diagnostic.
+    static std::string yytnamerr_ (const char *n);])[
+
+]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
     /// For a symbol, its name in clear.
     static const char* const yytname_[];
-#endif
-
-#if YYERROR_VERBOSE
-    /// Convert the symbol name \a n to a form suitable for a diagnostic.
-    virtual std::string yytnamerr_ (const char *n);
-#endif
-
-#if YYDEBUG
+]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
     /// A type to store symbol numbers and -1.
     typedef ]b4_int_type_for([b4_rhs])[ rhs_number_type;
     /// A `-1'-separated list of the rules' RHS.
@@ -252,6 +213,10 @@
     virtual void yy_reduce_print_ (int r);
     /// Print the state stack on the debug stream.
     virtual void yystack_print_ ();
+
+    /* Debugging.  */
+    int yydebug_;
+    std::ostream* yycdebug_;
 #endif
 
     /// Convert a scanner token number \a t to a symbol number.
@@ -259,6 +224,7 @@
 
     /// \brief Reclaim the memory associated to a symbol.
     /// \param yymsg        Why this token is reclaimed.
+    ///                     If null, do not display the symbol, just free it.
     /// \param yytype       The symbol type.
     /// \param yyvaluep     Its semantic value.
     /// \param yylocationp  Its location.
@@ -282,43 +248,47 @@
     static const int yyntokens_;
     static const unsigned int yyuser_token_number_max_;
     static const token_number_type yyundef_token_;
-
-    /* Debugging.  */
-    int yydebug_;
-    std::ostream* yycdebug_;
-
 ]b4_parse_param_vars[
   };
-}
+]b4_namespace_close[
 
-]m4_ifset([b4_global_tokens_and_yystype],
+]b4_percent_define_flag_if([[global_tokens_and_yystype]],
 [b4_token_defines(b4_tokens)
 
-#ifndef YYSTYPE
+#ifndef ]b4_api_PREFIX[STYPE
  /* Redirection for backward compatibility.  */
-# define YYSTYPE b4_namespace::b4_parser_class_name::semantic_type
+# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class_name::semantic_type
 #endif
 ])[
-#endif /* ! defined PARSER_HEADER_H */]
-])dnl
-@output @output_parser_name@
+]b4_percent_code_get([[provides]])[
+]b4_cpp_guard_close([b4_spec_defines_file])
+b4_output_end()
+])
+
+
+b4_output_begin([b4_parser_file_name])
 b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++],
-  [2002, 2003, 2004, 2005, 2006])
+             [2002-2012])
+b4_percent_code_get([[top]])[]dnl
 m4_if(b4_prefix, [yy], [],
 [
 // Take the name prefix into account.
-#define yylex   b4_prefix[]lex])
-b4_defines_if([
-#include @output_header_name@])[
+#define yylex   b4_prefix[]lex])[
+
+/* First part of user declarations.  */
+]b4_user_pre_prologue[
+
+]b4_defines_if([[
+#include "@basename(]b4_spec_defines_file[@)"]])[
 
 /* User implementation prologue.  */
-]b4_post_prologue[
+]b4_user_post_prologue[
+]b4_percent_code_get[
 
-]/* Line __line__ of lalr1.cc.  */
-b4_syncline([@oline@], [@ofile@])[
+]b4_null_define[
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -329,16 +299,17 @@
 # endif
 #endif
 
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+]b4_yylloc_default_define[
+
 /* Suppress unused-variable warnings by "using" E.  */
 #define YYUSE(e) ((void) (e))
 
-/* A pseudo ostream that takes yydebug_ into account.  */
-# define YYCDEBUG							\
-  for (bool yydebugcond_ = yydebug_; yydebugcond_; yydebugcond_ = false)	\
-    (*yycdebug_)
-
 /* Enable debugging if requested.  */
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
+
+/* A pseudo ostream that takes yydebug_ into account.  */
+# define YYCDEBUG if (yydebug_) (*yycdebug_)
 
 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)	\
 do {							\
@@ -362,21 +333,24 @@
     yystack_print_ ();			\
 } while (false)
 
-#else /* !YYDEBUG */
+#else /* !]b4_api_PREFIX[DEBUG */
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_REDUCE_PRINT(Rule)
-# define YY_STACK_PRINT()
+# define YYCDEBUG if (false) std::cerr
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) YYUSE(Type)
+# define YY_REDUCE_PRINT(Rule)        static_cast<void>(0)
+# define YY_STACK_PRINT()             static_cast<void>(0)
 
-#endif /* !YYDEBUG */
+#endif /* !]b4_api_PREFIX[DEBUG */
+
+#define yyerrok		(yyerrstatus_ = 0)
+#define yyclearin	(yychar = yyempty_)
 
 #define YYACCEPT	goto yyacceptlab
 #define YYABORT		goto yyabortlab
 #define YYERROR		goto yyerrorlab
+#define YYRECOVERING()  (!!yyerrstatus_)
 
-namespace ]b4_namespace[
-{
-#if YYERROR_VERBOSE
+]b4_namespace_open[]b4_error_verbose_if([[
 
   /* Return YYSTR after stripping away unnecessary quotes and
      backslashes, so that it's suitable for yyerror.  The heuristic is
@@ -414,13 +388,15 @@
 
     return yystr;
   }
-
-#endif
+]])[
 
   /// Build a parser object.
-  ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)
-    : yydebug_ (false),
-      yycdebug_ (&std::cerr)]b4_parse_param_cons[
+  ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
+    :])[
+#if ]b4_api_PREFIX[DEBUG
+    ]m4_ifset([b4_parse_param], [  ], [ :])[yydebug_ (false),
+      yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
+#endif]b4_parse_param_cons[
   {
   }
 
@@ -428,7 +404,7 @@
   {
   }
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
   /*--------------------------------.
   | Print this symbol on YYOUTPUT.  |
   `--------------------------------*/
@@ -439,6 +415,9 @@
   {
     YYUSE (yylocationp);
     YYUSE (yyvaluep);
+    std::ostream& yyo = debug_stream ();
+    std::ostream& yyoutput = yyo;
+    YYUSE (yyoutput);
     switch (yytype)
       {
   ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
@@ -458,7 +437,7 @@
     yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
     *yycdebug_ << ')';
   }
-#endif /* ! YYDEBUG */
+#endif
 
   void
   ]b4_parser_class_name[::yydestruct_ (const char* yymsg,
@@ -468,7 +447,8 @@
     YYUSE (yymsg);
     YYUSE (yyvaluep);
 
-    YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+    if (yymsg)
+      YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
     switch (yytype)
       {
@@ -486,6 +466,7 @@
     yylocation_stack_.pop (n);
   }
 
+#if ]b4_api_PREFIX[DEBUG
   std::ostream&
   ]b4_parser_class_name[::debug_stream () const
   {
@@ -510,30 +491,43 @@
   {
     yydebug_ = l;
   }
+#endif
 
+  inline bool
+  ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
+  {
+    return yyvalue == yypact_ninf_;
+  }
+
+  inline bool
+  ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
+  {
+    return yyvalue == yytable_ninf_;
+  }
 
   int
   ]b4_parser_class_name[::parse ()
   {
-    /// Look-ahead and look-ahead in internal form.
+    /// Lookahead and lookahead in internal form.
     int yychar = yyempty_;
     int yytoken = 0;
 
-    /* State.  */
+    // State.
     int yyn;
     int yylen = 0;
     int yystate = 0;
 
-    /* Error handling.  */
+    // Error handling.
     int yynerrs_ = 0;
     int yyerrstatus_ = 0;
 
-    /// Semantic value of the look-ahead.
-    semantic_type yylval;
-    /// Location of the look-ahead.
+    /// Semantic value of the lookahead.
+    static semantic_type yyval_default;
+    semantic_type yylval = yyval_default;
+    /// Location of the lookahead.
     location_type yylloc;
     /// The locations where the error started and ended.
-    location yyerror_range[2];
+    location_type yyerror_range[3];
 
     /// $$.
     semantic_type yyval;
@@ -542,17 +536,17 @@
 
     int yyresult;
 
+    // FIXME: This shoud be completely indented.  It is not yet to
+    // avoid gratuitous conflicts when merging into the master branch.
+    try
+      {
     YYCDEBUG << "Starting parse" << std::endl;
 
 ]m4_ifdef([b4_initial_action], [
-m4_pushdef([b4_at_dollar],     [yylloc])dnl
-m4_pushdef([b4_dollar_dollar], [yylval])dnl
-    /* User initialization code.  */
-    b4_initial_action
-m4_popdef([b4_dollar_dollar])dnl
-m4_popdef([b4_at_dollar])dnl
-  /* Line __line__ of yacc.c.  */
-b4_syncline([@oline@], [@ofile@])])dnl
+b4_dollar_pushdef([yylval], [], [yylloc])dnl
+/* User initialization code.  */
+b4_user_initial_action
+b4_dollar_popdef])[]dnl
 
   [  /* Initialize the stacks.  The initial state will be pushed in
        yynewstate, since the latter expects the semantical and the
@@ -568,27 +562,31 @@
   yynewstate:
     yystate_stack_.push (yystate);
     YYCDEBUG << "Entering state " << yystate << std::endl;
+
+    /* Accept?  */
+    if (yystate == yyfinal_)
+      goto yyacceptlab;
+
     goto yybackup;
 
     /* Backup.  */
   yybackup:
 
-    /* Try to take a decision without look-ahead.  */
+    /* Try to take a decision without lookahead.  */
     yyn = yypact_[yystate];
-    if (yyn == yypact_ninf_)
+    if (yy_pact_value_is_default_ (yyn))
       goto yydefault;
 
-    /* Read a look-ahead token.  */
+    /* Read a lookahead token.  */
     if (yychar == yyempty_)
       {
-	YYCDEBUG << "Reading a token: ";
-	yychar = ]b4_c_function_call([yylex], [int],
-				     [[YYSTYPE*], [&yylval]][]dnl
+        YYCDEBUG << "Reading a token: ";
+        yychar = ]b4_c_function_call([yylex], [int],
+                                     [b4_api_PREFIX[STYPE*], [&yylval]][]dnl
 b4_locations_if([, [[location*], [&yylloc]]])dnl
 m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
       }
 
-
     /* Convert token to internal form.  */
     if (yychar <= yyeof_)
       {
@@ -611,22 +609,17 @@
     yyn = yytable_[yyn];
     if (yyn <= 0)
       {
-	if (yyn == 0 || yyn == yytable_ninf_)
-	goto yyerrlab;
+	if (yy_table_value_is_error_ (yyn))
+	  goto yyerrlab;
 	yyn = -yyn;
 	goto yyreduce;
       }
 
-    /* Accept?  */
-    if (yyn == yyfinal_)
-      goto yyacceptlab;
-
-    /* Shift the look-ahead token.  */
+    /* Shift the lookahead token.  */
     YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
-    /* Discard the token being shifted unless it is eof.  */
-    if (yychar != yyeof_)
-      yychar = yyempty_;
+    /* Discard the token being shifted.  */
+    yychar = yyempty_;
 
     yysemantic_stack_.push (yylval);
     yylocation_stack_.push (yylloc);
@@ -664,18 +657,32 @@
     else
       yyval = yysemantic_stack_[0];
 
+    // Compute the default @@$.
     {
       slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
       YYLLOC_DEFAULT (yyloc, slice, yylen);
     }
+
+    // Perform the reduction.
     YY_REDUCE_PRINT (yyn);
     switch (yyn)
       {
-	]b4_actions
-    /* Line __line__ of lalr1.cc.  */
-b4_syncline([@oline@], [@ofile@])[
-	default: break;
+        ]b4_user_actions[
+      default:
+        break;
       }
+
+    /* User semantic actions sometimes alter yychar, and that requires
+       that yytoken be updated with the new translation.  We take the
+       approach of translating immediately before every use of yytoken.
+       One alternative is translating here after every semantic action,
+       but that translation would be missed if the semantic action
+       invokes YYABORT, YYACCEPT, or YYERROR immediately after altering
+       yychar.  In the case of YYABORT or YYACCEPT, an incorrect
+       destructor might then be invoked immediately.  In the case of
+       YYERROR, subsequent parser actions might lead to an incorrect
+       destructor call or verbose syntax error message before the
+       lookahead is translated.  */
     YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
 
     yypop_ (yylen);
@@ -699,34 +706,38 @@
   | yyerrlab -- here on detecting error |
   `------------------------------------*/
   yyerrlab:
+    /* Make sure we have latest lookahead translation.  See comments at
+       user semantic actions for why this is necessary.  */
+    yytoken = yytranslate_ (yychar);
+
     /* If not already recovering from an error, report this error.  */
     if (!yyerrstatus_)
       {
 	++yynerrs_;
-	error (yylloc, yysyntax_error_ (yystate]dnl
-b4_error_verbose_if([, yytoken])[));
+	if (yychar == yyempty_)
+	  yytoken = yyempty_;
+	error (yylloc, yysyntax_error_ (yystate, yytoken));
       }
 
-    yyerror_range[0] = yylloc;
+    yyerror_range[1] = yylloc;
     if (yyerrstatus_ == 3)
       {
-	/* If just tried and failed to reuse look-ahead token after an
-	 error, discard it.  */
-
-	if (yychar <= yyeof_)
-	  {
-	  /* Return failure if at end of input.  */
-	  if (yychar == yyeof_)
-	    YYABORT;
-	  }
-	else
-	  {
-	    yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
-	    yychar = yyempty_;
-	  }
+        /* If just tried and failed to reuse lookahead token after an
+           error, discard it.  */
+        if (yychar <= yyeof_)
+          {
+            /* Return failure if at end of input.  */
+            if (yychar == yyeof_)
+              YYABORT;
+          }
+        else
+          {
+            yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
+            yychar = yyempty_;
+          }
       }
 
-    /* Else will try to reuse look-ahead token after shifting the error
+    /* Else will try to reuse lookahead token after shifting the error
        token.  */
     goto yyerrlab1;
 
@@ -742,7 +753,7 @@
     if (false)
       goto yyerrorlab;
 
-    yyerror_range[0] = yylocation_stack_[yylen - 1];
+    yyerror_range[1] = yylocation_stack_[yylen - 1];
     /* Do not reclaim the symbols of the rule which action triggered
        this YYERROR.  */
     yypop_ (yylen);
@@ -759,7 +770,7 @@
     for (;;)
       {
 	yyn = yypact_[yystate];
-	if (yyn != yypact_ninf_)
+	if (!yy_pact_value_is_default_ (yyn))
 	{
 	  yyn += yyterror_;
 	  if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
@@ -772,9 +783,9 @@
 
 	/* Pop the current state because it cannot handle the error token.  */
 	if (yystate_stack_.height () == 1)
-	YYABORT;
+	  YYABORT;
 
-	yyerror_range[0] = yylocation_stack_[0];
+	yyerror_range[1] = yylocation_stack_[0];
 	yydestruct_ ("Error: popping",
 		     yystos_[yystate],
 		     &yysemantic_stack_[0], &yylocation_stack_[0]);
@@ -783,19 +794,16 @@
 	YY_STACK_PRINT ();
       }
 
-    if (yyn == yyfinal_)
-      goto yyacceptlab;
-
-    yyerror_range[1] = yylloc;
+    yyerror_range[2] = yylloc;
     // Using YYLLOC is tempting, but would change the location of
-    // the look-ahead.  YYLOC is available though.
-    YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+    // the lookahead.  YYLOC is available though.
+    YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
     yysemantic_stack_.push (yylval);
     yylocation_stack_.push (yyloc);
 
     /* Shift the error token.  */
     YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
-		   &yysemantic_stack_[0], &yylocation_stack_[0]);
+		     &yysemantic_stack_[0], &yylocation_stack_[0]);
 
     yystate = yyn;
     goto yynewstate;
@@ -811,72 +819,152 @@
     goto yyreturn;
 
   yyreturn:
-    if (yychar != yyeof_ && yychar != yyempty_)
-      yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
+    if (yychar != yyempty_)
+      {
+        /* Make sure we have latest lookahead translation.  See comments
+           at user semantic actions for why this is necessary.  */
+        yytoken = yytranslate_ (yychar);
+        yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval,
+                     &yylloc);
+      }
 
     /* Do not reclaim the symbols of the rule which action triggered
        this YYABORT or YYACCEPT.  */
     yypop_ (yylen);
-    while (yystate_stack_.height () != 1)
+    while (1 < yystate_stack_.height ())
       {
-	yydestruct_ ("Cleanup: popping",
-		   yystos_[yystate_stack_[0]],
-		   &yysemantic_stack_[0],
-		   &yylocation_stack_[0]);
-	yypop_ ();
+        yydestruct_ ("Cleanup: popping",
+                     yystos_[yystate_stack_[0]],
+                     &yysemantic_stack_[0],
+                     &yylocation_stack_[0]);
+        yypop_ ();
       }
 
     return yyresult;
+    }
+    catch (...)
+      {
+        YYCDEBUG << "Exception caught: cleaning lookahead and stack"
+                 << std::endl;
+        // Do not try to display the values of the reclaimed symbols,
+        // as their printer might throw an exception.
+        if (yychar != yyempty_)
+          {
+            /* Make sure we have latest lookahead translation.  See
+               comments at user semantic actions for why this is
+               necessary.  */
+            yytoken = yytranslate_ (yychar);
+            yydestruct_ (YY_NULL, yytoken, &yylval, &yylloc);
+          }
+
+        while (1 < yystate_stack_.height ())
+          {
+            yydestruct_ (YY_NULL,
+                         yystos_[yystate_stack_[0]],
+                         &yysemantic_stack_[0],
+                         &yylocation_stack_[0]);
+            yypop_ ();
+          }
+        throw;
+      }
   }
 
   // Generate an error message.
   std::string
-  ]b4_parser_class_name[::yysyntax_error_ (int yystate]dnl
-b4_error_verbose_if([, int tok])[)
-  {
-    std::string res;
-    YYUSE (yystate);
-#if YYERROR_VERBOSE
-    int yyn = yypact_[yystate];
-    if (yypact_ninf_ < yyn && yyn <= yylast_)
+  ]b4_parser_class_name[::yysyntax_error_ (]dnl
+b4_error_verbose_if([int yystate, int yytoken],
+                    [int, int])[)
+  {]b4_error_verbose_if([[
+    std::string yyres;
+    // Number of reported tokens (one for the "unexpected", one per
+    // "expected").
+    size_t yycount = 0;
+    // Its maximum.
+    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+    // Arguments of yyformat.
+    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+
+    /* There are many possibilities here to consider:
+       - If this state is a consistent state with a default action, then
+         the only way this function was invoked is if the default action
+         is an error action.  In that case, don't check for expected
+         tokens because there are none.
+       - The only way there can be no lookahead present (in yytoken) is
+         if this state is a consistent state with a default action.
+         Thus, detecting the absence of a lookahead is sufficient to
+         determine that there is no unexpected or expected token to
+         report.  In that case, just report a simple "syntax error".
+       - Don't assume there isn't a lookahead just because this state is
+         a consistent state with a default action.  There might have
+         been a previous inconsistent state, consistent state with a
+         non-default action, or user semantic action that manipulated
+         yychar.
+       - Of course, the expected token list depends on states to have
+         correct lookahead information, and it depends on the parser not
+         to perform extra reductions after fetching a lookahead from the
+         scanner and before detecting a syntax error.  Thus, state
+         merging (from LALR or IELR) and default reductions corrupt the
+         expected token list.  However, the list is correct for
+         canonical LR with one exception: it will still contain any
+         token that will not be accepted due to an error action in a
+         later state.
+    */
+    if (yytoken != yyempty_)
       {
-	/* Start YYX at -YYN if negative to avoid negative indexes in
-	   YYCHECK.  */
-	int yyxbegin = yyn < 0 ? -yyn : 0;
-
-	/* Stay within bounds of both yycheck and yytname.  */
-	int yychecklim = yylast_ - yyn + 1;
-	int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
-	int count = 0;
-	for (int x = yyxbegin; x < yyxend; ++x)
-	  if (yycheck_[x + yyn] == x && x != yyterror_)
-	    ++count;
-
-	// FIXME: This method of building the message is not compatible
-	// with internationalization.  It should work like yacc.c does it.
-	// That is, first build a string that looks like this:
-	// "syntax error, unexpected %s or %s or %s"
-	// Then, invoke YY_ on this string.
-	// Finally, use the string as a format to output
-	// yytname_[tok], etc.
-	// Until this gets fixed, this message appears in English only.
-	res = "syntax error, unexpected ";
-	res += yytnamerr_ (yytname_[tok]);
-	if (count < 5)
-	  {
-	    count = 0;
-	    for (int x = yyxbegin; x < yyxend; ++x)
-	      if (yycheck_[x + yyn] == x && x != yyterror_)
-		{
-		  res += (!count++) ? ", expecting " : " or ";
-		  res += yytnamerr_ (yytname_[x]);
-		}
-	  }
+        yyarg[yycount++] = yytname_[yytoken];
+        int yyn = yypact_[yystate];
+        if (!yy_pact_value_is_default_ (yyn))
+          {
+            /* Start YYX at -YYN if negative to avoid negative indexes in
+               YYCHECK.  In other words, skip the first -YYN actions for
+               this state because they are default actions.  */
+            int yyxbegin = yyn < 0 ? -yyn : 0;
+            /* Stay within bounds of both yycheck and yytname.  */
+            int yychecklim = yylast_ - yyn + 1;
+            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
+            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
+              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
+                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
+                {
+                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                    {
+                      yycount = 1;
+                      break;
+                    }
+                  else
+                    yyarg[yycount++] = yytname_[yyx];
+                }
+          }
       }
-    else
-#endif
-      res = YY_("syntax error");
-    return res;
+
+    char const* yyformat = YY_NULL;
+    switch (yycount)
+      {
+#define YYCASE_(N, S)                         \
+        case N:                               \
+          yyformat = S;                       \
+        break
+        YYCASE_(0, YY_("syntax error"));
+        YYCASE_(1, YY_("syntax error, unexpected %s"));
+        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+#undef YYCASE_
+      }
+
+    // Argument number.
+    size_t yyi = 0;
+    for (char const* yyp = yyformat; *yyp; ++yyp)
+      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
+        {
+          yyres += yytnamerr_ (yyarg[yyi++]);
+          ++yyp;
+        }
+      else
+        yyres += *yyp;
+    return yyres;]], [[
+    return YY_("syntax error");]])[
   }
 
 
@@ -889,9 +977,9 @@
     ]b4_pact[
   };
 
-  /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
-     doesn't specify something else to do.  Zero means the default is an
-     error.  */
+  /* YYDEFACT[S] -- default reduction number in state S.  Performed when
+     YYTABLE doesn't specify something else to do.  Zero means the
+     default is an error.  */
   const ]b4_int_type_for([b4_defact])[
   ]b4_parser_class_name[::yydefact_[] =
   {
@@ -914,7 +1002,7 @@
 
   /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule which
-     number is the opposite.  If zero, do what YYDEFACT says.  */
+     number is the opposite.  If YYTABLE_NINF_, syntax error.  */
   const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
   const ]b4_int_type_for([b4_table])[
   ]b4_parser_class_name[::yytable_[] =
@@ -937,7 +1025,7 @@
     ]b4_stos[
   };
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
   /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
      to YYLEX-NUM.  */
   const ]b4_int_type_for([b4_toknum])[
@@ -961,7 +1049,7 @@
     ]b4_r2[
   };
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
   /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
      First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
   const char*
@@ -969,9 +1057,8 @@
   {
     ]b4_tname[
   };
-#endif
 
-#if YYDEBUG
+]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
   /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
   const ]b4_parser_class_name[::rhs_number_type
   ]b4_parser_class_name[::yyrhs_[] =
@@ -1013,7 +1100,7 @@
     int yynrhs = yyr2_[yyrule];
     /* Print the symbols being reduced, and their result.  */
     *yycdebug_ << "Reducing stack by rule " << yyrule - 1
-	       << " (line " << yylno << "), ";
+	       << " (line " << yylno << "):" << std::endl;
     /* The symbols being reduced.  */
     for (int yyi = 0; yyi < yynrhs; yyi++)
       YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
@@ -1021,7 +1108,7 @@
 		       &]b4_rhs_value(yynrhs, yyi + 1)[,
 		       &]b4_rhs_location(yynrhs, yyi + 1)[);
   }
-#endif // YYDEBUG
+#endif // ]b4_api_PREFIX[DEBUG
 
   /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
   ]b4_parser_class_name[::token_number_type
@@ -1051,107 +1138,6 @@
   const unsigned int ]b4_parser_class_name[::yyuser_token_number_max_ = ]b4_user_token_number_max[;
   const ]b4_parser_class_name[::token_number_type ]b4_parser_class_name[::yyundef_token_ = ]b4_undef_token_number[;
 
-} // namespace ]b4_namespace[
-
-]b4_epilogue
-dnl
-@output b4_dir_prefix[]stack.hh
-b4_copyright([Stack handling for Bison parsers in C++],
-  [2002, 2003, 2004, 2005, 2006])[
-
-#ifndef BISON_STACK_HH
-# define BISON_STACK_HH
-
-#include <deque>
-
-namespace ]b4_namespace[
-{
-  template <class T, class S = std::deque<T> >
-  class stack
-  {
-  public:
-
-    // Hide our reversed order.
-    typedef typename S::reverse_iterator iterator;
-    typedef typename S::const_reverse_iterator const_iterator;
-
-    stack () : seq_ ()
-    {
-    }
-
-    stack (unsigned int n) : seq_ (n)
-    {
-    }
-
-    inline
-    T&
-    operator [] (unsigned int i)
-    {
-      return seq_[i];
-    }
-
-    inline
-    const T&
-    operator [] (unsigned int i) const
-    {
-      return seq_[i];
-    }
-
-    inline
-    void
-    push (const T& t)
-    {
-      seq_.push_front (t);
-    }
-
-    inline
-    void
-    pop (unsigned int n = 1)
-    {
-      for (; n; --n)
-	seq_.pop_front ();
-    }
-
-    inline
-    unsigned int
-    height () const
-    {
-      return seq_.size ();
-    }
-
-    inline const_iterator begin () const { return seq_.rbegin (); }
-    inline const_iterator end () const { return seq_.rend (); }
-
-  private:
-
-    S seq_;
-  };
-
-  /// Present a slice of the top of a stack.
-  template <class T, class S = stack<T> >
-  class slice
-  {
-  public:
-
-    slice (const S& stack,
-	   unsigned int range) : stack_ (stack),
-				 range_ (range)
-    {
-    }
-
-    inline
-    const T&
-    operator [] (unsigned int i) const
-    {
-      return stack_[range_ - i];
-    }
-
-  private:
-
-    const S& stack_;
-    unsigned int range_;
-  };
-}
-
-#endif // not BISON_STACK_HH]
-m4_divert(-1)
+]b4_namespace_close[
+]b4_epilogue[]dnl
+b4_output_end()
diff --git a/data/lalr1.java b/data/lalr1.java
new file mode 100644
index 0000000..e961fc5
--- /dev/null
+++ b/data/lalr1.java
@@ -0,0 +1,927 @@
+# Java skeleton for Bison -*- autoconf -*-
+
+# Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+m4_include(b4_pkgdatadir/[java.m4])
+
+b4_defines_if([b4_fatal([%s: %%defines does not make sense in Java], [b4_skeleton])])
+m4_ifval(m4_defn([b4_symbol_destructors]),
+        [b4_fatal([%s: %%destructor does not make sense in Java], [b4_skeleton])],
+        [])
+
+b4_output_begin([b4_parser_file_name])
+b4_copyright([Skeleton implementation for Bison LALR(1) parsers in Java],
+             [2007-2012])
+
+b4_percent_define_ifdef([package], [package b4_percent_define_get([package]);
+])[/* First part of user declarations.  */
+]b4_pre_prologue
+b4_percent_code_get([[imports]])
+[/**
+ * A Bison parser, automatically generated from <tt>]m4_bpatsubst(b4_file_name, [^"\(.*\)"$], [\1])[</tt>.
+ *
+ * @@author LALR (1) parser skeleton written by Paolo Bonzini.
+ */
+]b4_public_if([public ])dnl
+b4_abstract_if([abstract ])dnl
+b4_final_if([final ])dnl
+b4_strictfp_if([strictfp ])dnl
+[class ]b4_parser_class_name[]dnl
+b4_percent_define_get3([extends], [ extends ])dnl
+b4_percent_define_get3([implements], [ implements ])[
+{
+  ]b4_identification[
+
+  /** True if verbose error messages are enabled.  */
+  public boolean errorVerbose = ]b4_flag_value([error_verbose]);
+
+b4_locations_if([[
+  /**
+   * A class defining a pair of positions.  Positions, defined by the
+   * <code>]b4_position_type[</code> class, denote a point in the input.
+   * Locations represent a part of the input through the beginning
+   * and ending positions.  */
+  public class ]b4_location_type[ {
+    /** The first, inclusive, position in the range.  */
+    public ]b4_position_type[ begin;
+
+    /** The first position beyond the range.  */
+    public ]b4_position_type[ end;
+
+    /**
+     * Create a <code>]b4_location_type[</code> denoting an empty range located at
+     * a given point.
+     * @@param loc The position at which the range is anchored.  */
+    public ]b4_location_type[ (]b4_position_type[ loc) {
+      this.begin = this.end = loc;
+    }
+
+    /**
+     * Create a <code>]b4_location_type[</code> from the endpoints of the range.
+     * @@param begin The first position included in the range.
+     * @@param end   The first position beyond the range.  */
+    public ]b4_location_type[ (]b4_position_type[ begin, ]b4_position_type[ end) {
+      this.begin = begin;
+      this.end = end;
+    }
+
+    /**
+     * Print a representation of the location.  For this to be correct,
+     * <code>]b4_position_type[</code> should override the <code>equals</code>
+     * method.  */
+    public String toString () {
+      if (begin.equals (end))
+        return begin.toString ();
+      else
+        return begin.toString () + "-" + end.toString ();
+    }
+  }
+
+]])
+
+[  /** Token returned by the scanner to signal the end of its input.  */
+  public static final int EOF = 0;]
+
+b4_token_enums(b4_tokens)
+
+  b4_locations_if([[
+  private ]b4_location_type[ yylloc (YYStack rhs, int n)
+  {
+    if (n > 0)
+      return new ]b4_location_type[ (rhs.locationAt (n-1).begin, rhs.locationAt (0).end);
+    else
+      return new ]b4_location_type[ (rhs.locationAt (0).end);
+  }]])[
+
+  /**
+   * Communication interface between the scanner and the Bison-generated
+   * parser <tt>]b4_parser_class_name[</tt>.
+   */
+  public interface Lexer {
+    ]b4_locations_if([[/**
+     * Method to retrieve the beginning position of the last scanned token.
+     * @@return the position at which the last scanned token starts.  */
+    ]b4_position_type[ getStartPos ();
+
+    /**
+     * Method to retrieve the ending position of the last scanned token.
+     * @@return the first position beyond the last scanned token.  */
+    ]b4_position_type[ getEndPos ();]])[
+
+    /**
+     * Method to retrieve the semantic value of the last scanned token.
+     * @@return the semantic value of the last scanned token.  */
+    ]b4_yystype[ getLVal ();
+
+    /**
+     * Entry point for the scanner.  Returns the token identifier corresponding
+     * to the next token and prepares to return the semantic value
+     * ]b4_locations_if([and beginning/ending positions ])[of the token.
+     * @@return the token identifier corresponding to the next token. */
+    int yylex () ]b4_maybe_throws([b4_lex_throws])[;
+
+    /**
+     * Entry point for error reporting.  Emits an error
+     * ]b4_locations_if([referring to the given location ])[in a user-defined way.
+     *
+     * ]b4_locations_if([[@@param loc The location of the element to which the
+     *                error message is related]])[
+     * @@param s The string for the error message.  */
+     void yyerror (]b4_locations_if([b4_location_type[ loc, ]])[String s);]
+  }
+
+  b4_lexer_if([[private class YYLexer implements Lexer {
+]b4_percent_code_get([[lexer]])[
+  }
+
+  ]])[/** The object doing lexical analysis for us.  */
+  private Lexer yylexer;
+  ]
+  b4_parse_param_vars
+
+b4_lexer_if([[
+  /**
+   * Instantiates the Bison-generated parser.
+   */
+  public ]b4_parser_class_name (b4_parse_param_decl([b4_lex_param_decl])[) {
+    this.yylexer = new YYLexer(]b4_lex_param_call[);
+    ]b4_parse_param_cons[
+  }
+]])
+
+  /**
+   * Instantiates the Bison-generated parser.
+   * @@param yylexer The scanner that will supply tokens to the parser.
+   */
+  b4_lexer_if([[protected]], [[public]]) b4_parser_class_name[ (]b4_parse_param_decl([[Lexer yylexer]])[) {
+    this.yylexer = yylexer;
+    ]b4_parse_param_cons[
+  }
+
+  private java.io.PrintStream yyDebugStream = System.err;
+
+  /**
+   * Return the <tt>PrintStream</tt> on which the debugging output is
+   * printed.
+   */
+  public final java.io.PrintStream getDebugStream () { return yyDebugStream; }
+
+  /**
+   * Set the <tt>PrintStream</tt> on which the debug output is printed.
+   * @@param s The stream that is used for debugging output.
+   */
+  public final void setDebugStream(java.io.PrintStream s) { yyDebugStream = s; }
+
+  private int yydebug = 0;
+
+  /**
+   * Answer the verbosity of the debugging output; 0 means that all kinds of
+   * output from the parser are suppressed.
+   */
+  public final int getDebugLevel() { return yydebug; }
+
+  /**
+   * Set the verbosity of the debugging output; 0 means that all kinds of
+   * output from the parser are suppressed.
+   * @@param level The verbosity level for debugging output.
+   */
+  public final void setDebugLevel(int level) { yydebug = level; }
+
+  private final int yylex () ]b4_maybe_throws([b4_lex_throws]) [{
+    return yylexer.yylex ();
+  }
+  protected final void yyerror (]b4_locations_if([b4_location_type[ loc, ]])[String s) {
+    yylexer.yyerror (]b4_locations_if([loc, ])[s);
+  }
+
+  ]b4_locations_if([
+  protected final void yyerror (String s) {
+    yylexer.yyerror ((]b4_location_type[)null, s);
+  }
+  protected final void yyerror (]b4_position_type[ loc, String s) {
+    yylexer.yyerror (new ]b4_location_type[ (loc), s);
+  }])
+
+  [protected final void yycdebug (String s) {
+    if (yydebug > 0)
+      yyDebugStream.println (s);
+  }
+
+  private final class YYStack {
+    private int[] stateStack = new int[16];
+    ]b4_locations_if([[private ]b4_location_type[[] locStack = new ]b4_location_type[[16];]])[
+    private ]b4_yystype[[] valueStack = new ]b4_yystype[[16];
+
+    public int size = 16;
+    public int height = -1;
+
+    public final void push (int state, ]b4_yystype[ value]dnl
+			    b4_locations_if([, ]b4_location_type[ loc])[) {
+      height++;
+      if (size == height)
+        {
+	  int[] newStateStack = new int[size * 2];
+	  System.arraycopy (stateStack, 0, newStateStack, 0, height);
+	  stateStack = newStateStack;
+	  ]b4_locations_if([[
+	  ]b4_location_type[[] newLocStack = new ]b4_location_type[[size * 2];
+	  System.arraycopy (locStack, 0, newLocStack, 0, height);
+	  locStack = newLocStack;]])
+
+	  b4_yystype[[] newValueStack = new ]b4_yystype[[size * 2];
+	  System.arraycopy (valueStack, 0, newValueStack, 0, height);
+	  valueStack = newValueStack;
+
+	  size *= 2;
+	}
+
+      stateStack[height] = state;
+      ]b4_locations_if([[locStack[height] = loc;]])[
+      valueStack[height] = value;
+    }
+
+    public final void pop () {
+      pop (1);
+    }
+
+    public final void pop (int num) {
+      // Avoid memory leaks... garbage collection is a white lie!
+      if (num > 0) {
+	java.util.Arrays.fill (valueStack, height - num + 1, height + 1, null);
+        ]b4_locations_if([[java.util.Arrays.fill (locStack, height - num + 1, height + 1, null);]])[
+      }
+      height -= num;
+    }
+
+    public final int stateAt (int i) {
+      return stateStack[height - i];
+    }
+
+    ]b4_locations_if([[public final ]b4_location_type[ locationAt (int i) {
+      return locStack[height - i];
+    }
+
+    ]])[public final ]b4_yystype[ valueAt (int i) {
+      return valueStack[height - i];
+    }
+
+    // Print the state stack on the debug stream.
+    public void print (java.io.PrintStream out)
+    {
+      out.print ("Stack now");
+
+      for (int i = 0; i <= height; i++)
+        {
+	  out.print (' ');
+	  out.print (stateStack[i]);
+        }
+      out.println ();
+    }
+  }
+
+  /**
+   * Returned by a Bison action in order to stop the parsing process and
+   * return success (<tt>true</tt>).  */
+  public static final int YYACCEPT = 0;
+
+  /**
+   * Returned by a Bison action in order to stop the parsing process and
+   * return failure (<tt>false</tt>).  */
+  public static final int YYABORT = 1;
+
+  /**
+   * Returned by a Bison action in order to start error recovery without
+   * printing an error message.  */
+  public static final int YYERROR = 2;
+
+  // Internal return codes that are not supported for user semantic
+  // actions.
+  private static final int YYERRLAB = 3;
+  private static final int YYNEWSTATE = 4;
+  private static final int YYDEFAULT = 5;
+  private static final int YYREDUCE = 6;
+  private static final int YYERRLAB1 = 7;
+  private static final int YYRETURN = 8;
+
+  private int yyerrstatus_ = 0;
+
+  /**
+   * Return whether error recovery is being done.  In this state, the parser
+   * reads token until it reaches a known state, and then restarts normal
+   * operation.  */
+  public final boolean recovering ()
+  {
+    return yyerrstatus_ == 0;
+  }
+
+  private int yyaction (int yyn, YYStack yystack, int yylen) ]b4_maybe_throws([b4_throws])[
+  {
+    ]b4_yystype[ yyval;
+    ]b4_locations_if([b4_location_type[ yyloc = yylloc (yystack, yylen);]])[
+
+    /* If YYLEN is nonzero, implement the default value of the action:
+       `$$ = $1'.  Otherwise, use the top of the stack.
+
+       Otherwise, the following line sets YYVAL to garbage.
+       This behavior is undocumented and Bison
+       users should not rely upon it.  */
+    if (yylen > 0)
+      yyval = yystack.valueAt (yylen - 1);
+    else
+      yyval = yystack.valueAt (0);
+
+    yy_reduce_print (yyn, yystack);
+
+    switch (yyn)
+      {
+	]b4_user_actions[
+	default: break;
+      }
+
+    yy_symbol_print ("-> $$ =", yyr1_[yyn], yyval]b4_locations_if([, yyloc])[);
+
+    yystack.pop (yylen);
+    yylen = 0;
+
+    /* Shift the result of the reduction.  */
+    yyn = yyr1_[yyn];
+    int yystate = yypgoto_[yyn - yyntokens_] + yystack.stateAt (0);
+    if (0 <= yystate && yystate <= yylast_
+	&& yycheck_[yystate] == yystack.stateAt (0))
+      yystate = yytable_[yystate];
+    else
+      yystate = yydefgoto_[yyn - yyntokens_];
+
+    yystack.push (yystate, yyval]b4_locations_if([, yyloc])[);
+    return YYNEWSTATE;
+  }
+
+  /* Return YYSTR after stripping away unnecessary quotes and
+     backslashes, so that it's suitable for yyerror.  The heuristic is
+     that double-quoting is unnecessary unless the string contains an
+     apostrophe, a comma, or backslash (other than backslash-backslash).
+     YYSTR is taken from yytname.  */
+  private final String yytnamerr_ (String yystr)
+  {
+    if (yystr.charAt (0) == '"')
+      {
+        StringBuffer yyr = new StringBuffer ();
+        strip_quotes: for (int i = 1; i < yystr.length (); i++)
+          switch (yystr.charAt (i))
+            {
+            case '\'':
+            case ',':
+              break strip_quotes;
+
+            case '\\':
+	      if (yystr.charAt(++i) != '\\')
+                break strip_quotes;
+              /* Fall through.  */
+            default:
+              yyr.append (yystr.charAt (i));
+              break;
+
+            case '"':
+              return yyr.toString ();
+            }
+      }
+    else if (yystr.equals ("$end"))
+      return "end of input";
+
+    return yystr;
+  }
+
+  /*--------------------------------.
+  | Print this symbol on YYOUTPUT.  |
+  `--------------------------------*/
+
+  private void yy_symbol_print (String s, int yytype,
+			         ]b4_yystype[ yyvaluep]dnl
+				 b4_locations_if([, Object yylocationp])[)
+  {
+    if (yydebug > 0)
+    yycdebug (s + (yytype < yyntokens_ ? " token " : " nterm ")
+	      + yytname_[yytype] + " ("]b4_locations_if([
+	      + yylocationp + ": "])[
+	      + (yyvaluep == null ? "(null)" : yyvaluep.toString ()) + ")");
+  }
+
+  /**
+   * Parse input from the scanner that was specified at object construction
+   * time.  Return whether the end of the input was reached successfully.
+   *
+   * @@return <tt>true</tt> if the parsing succeeds.  Note that this does not
+   *          imply that there were no syntax errors.
+   */
+  public boolean parse () ]b4_maybe_throws([b4_list2([b4_lex_throws], [b4_throws])])[
+  {
+    /// Lookahead and lookahead in internal form.
+    int yychar = yyempty_;
+    int yytoken = 0;
+
+    /* State.  */
+    int yyn = 0;
+    int yylen = 0;
+    int yystate = 0;
+
+    YYStack yystack = new YYStack ();
+
+    /* Error handling.  */
+    int yynerrs_ = 0;
+    ]b4_locations_if([/// The location where the error started.
+    ]b4_location_type[ yyerrloc = null;
+
+    /// ]b4_location_type[ of the lookahead.
+    ]b4_location_type[ yylloc = new ]b4_location_type[ (null, null);
+
+    /// @@$.
+    ]b4_location_type[ yyloc;])
+
+    /// Semantic value of the lookahead.
+    b4_yystype[ yylval = null;
+
+    yycdebug ("Starting parse\n");
+    yyerrstatus_ = 0;
+
+]m4_ifdef([b4_initial_action], [
+b4_dollar_pushdef([yylval], [], [yylloc])dnl
+/* User initialization code.  */
+b4_user_initial_action
+b4_dollar_popdef])[]dnl
+
+  [  /* Initialize the stack.  */
+    yystack.push (yystate, yylval]b4_locations_if([, yylloc])[);
+
+    int label = YYNEWSTATE;
+    for (;;)
+      switch (label)
+      {
+        /* New state.  Unlike in the C/C++ skeletons, the state is already
+	   pushed when we come here.  */
+      case YYNEWSTATE:
+        yycdebug ("Entering state " + yystate + "\n");
+        if (yydebug > 0)
+          yystack.print (yyDebugStream);
+
+        /* Accept?  */
+        if (yystate == yyfinal_)
+          return true;
+
+        /* Take a decision.  First try without lookahead.  */
+        yyn = yypact_[yystate];
+        if (yy_pact_value_is_default_ (yyn))
+          {
+            label = YYDEFAULT;
+	    break;
+          }
+
+        /* Read a lookahead token.  */
+        if (yychar == yyempty_)
+          {
+	    yycdebug ("Reading a token: ");
+	    yychar = yylex ();]
+            b4_locations_if([[
+	    yylloc = new ]b4_location_type[(yylexer.getStartPos (),
+				            yylexer.getEndPos ());]])
+            yylval = yylexer.getLVal ();[
+          }
+
+        /* Convert token to internal form.  */
+        if (yychar <= EOF)
+          {
+	    yychar = yytoken = EOF;
+	    yycdebug ("Now at end of input.\n");
+          }
+        else
+          {
+	    yytoken = yytranslate_ (yychar);
+	    yy_symbol_print ("Next token is", yytoken,
+			     yylval]b4_locations_if([, yylloc])[);
+          }
+
+        /* If the proper action on seeing token YYTOKEN is to reduce or to
+           detect an error, take that action.  */
+        yyn += yytoken;
+        if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
+          label = YYDEFAULT;
+
+        /* <= 0 means reduce or error.  */
+        else if ((yyn = yytable_[yyn]) <= 0)
+          {
+	    if (yy_table_value_is_error_ (yyn))
+	      label = YYERRLAB;
+	    else
+	      {
+	        yyn = -yyn;
+	        label = YYREDUCE;
+	      }
+          }
+
+        else
+          {
+            /* Shift the lookahead token.  */
+	    yy_symbol_print ("Shifting", yytoken,
+			     yylval]b4_locations_if([, yylloc])[);
+
+            /* Discard the token being shifted.  */
+            yychar = yyempty_;
+
+            /* Count tokens shifted since error; after three, turn off error
+               status.  */
+            if (yyerrstatus_ > 0)
+              --yyerrstatus_;
+
+            yystate = yyn;
+            yystack.push (yystate, yylval]b4_locations_if([, yylloc])[);
+            label = YYNEWSTATE;
+          }
+        break;
+
+      /*-----------------------------------------------------------.
+      | yydefault -- do the default action for the current state.  |
+      `-----------------------------------------------------------*/
+      case YYDEFAULT:
+        yyn = yydefact_[yystate];
+        if (yyn == 0)
+          label = YYERRLAB;
+        else
+          label = YYREDUCE;
+        break;
+
+      /*-----------------------------.
+      | yyreduce -- Do a reduction.  |
+      `-----------------------------*/
+      case YYREDUCE:
+        yylen = yyr2_[yyn];
+        label = yyaction (yyn, yystack, yylen);
+	yystate = yystack.stateAt (0);
+        break;
+
+      /*------------------------------------.
+      | yyerrlab -- here on detecting error |
+      `------------------------------------*/
+      case YYERRLAB:
+        /* If not already recovering from an error, report this error.  */
+        if (yyerrstatus_ == 0)
+          {
+            ++yynerrs_;
+            if (yychar == yyempty_)
+              yytoken = yyempty_;
+            yyerror (]b4_locations_if([yylloc, ])[yysyntax_error (yystate, yytoken));
+          }
+
+        ]b4_locations_if([yyerrloc = yylloc;])[
+        if (yyerrstatus_ == 3)
+          {
+	    /* If just tried and failed to reuse lookahead token after an
+	     error, discard it.  */
+
+	    if (yychar <= EOF)
+	      {
+	      /* Return failure if at end of input.  */
+	      if (yychar == EOF)
+	        return false;
+	      }
+	    else
+	      yychar = yyempty_;
+          }
+
+        /* Else will try to reuse lookahead token after shifting the error
+           token.  */
+        label = YYERRLAB1;
+        break;
+
+      /*---------------------------------------------------.
+      | errorlab -- error raised explicitly by YYERROR.  |
+      `---------------------------------------------------*/
+      case YYERROR:
+
+        ]b4_locations_if([yyerrloc = yystack.locationAt (yylen - 1);])[
+        /* Do not reclaim the symbols of the rule which action triggered
+           this YYERROR.  */
+        yystack.pop (yylen);
+        yylen = 0;
+        yystate = yystack.stateAt (0);
+        label = YYERRLAB1;
+        break;
+
+      /*-------------------------------------------------------------.
+      | yyerrlab1 -- common code for both syntax error and YYERROR.  |
+      `-------------------------------------------------------------*/
+      case YYERRLAB1:
+        yyerrstatus_ = 3;	/* Each real token shifted decrements this.  */
+
+        for (;;)
+          {
+	    yyn = yypact_[yystate];
+	    if (!yy_pact_value_is_default_ (yyn))
+	      {
+	        yyn += yyterror_;
+	        if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
+	          {
+	            yyn = yytable_[yyn];
+	            if (0 < yyn)
+		      break;
+	          }
+	      }
+
+	    /* Pop the current state because it cannot handle the error token.  */
+	    if (yystack.height == 0)
+	      return false;
+
+	    ]b4_locations_if([yyerrloc = yystack.locationAt (0);])[
+	    yystack.pop ();
+	    yystate = yystack.stateAt (0);
+	    if (yydebug > 0)
+	      yystack.print (yyDebugStream);
+          }
+
+	]b4_locations_if([
+	/* Muck with the stack to setup for yylloc.  */
+	yystack.push (0, null, yylloc);
+	yystack.push (0, null, yyerrloc);
+        yyloc = yylloc (yystack, 2);
+	yystack.pop (2);])[
+
+        /* Shift the error token.  */
+        yy_symbol_print ("Shifting", yystos_[yyn],
+			 yylval]b4_locations_if([, yyloc])[);
+
+        yystate = yyn;
+	yystack.push (yyn, yylval]b4_locations_if([, yyloc])[);
+        label = YYNEWSTATE;
+        break;
+
+        /* Accept.  */
+      case YYACCEPT:
+        return true;
+
+        /* Abort.  */
+      case YYABORT:
+        return false;
+      }
+  }
+
+  // Generate an error message.
+  private String yysyntax_error (int yystate, int tok)
+  {
+    if (errorVerbose)
+      {
+        /* There are many possibilities here to consider:
+           - Assume YYFAIL is not used.  It's too flawed to consider.
+             See
+             <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+             for details.  YYERROR is fine as it does not invoke this
+             function.
+           - If this state is a consistent state with a default action,
+             then the only way this function was invoked is if the
+             default action is an error action.  In that case, don't
+             check for expected tokens because there are none.
+           - The only way there can be no lookahead present (in tok) is
+             if this state is a consistent state with a default action.
+             Thus, detecting the absence of a lookahead is sufficient to
+             determine that there is no unexpected or expected token to
+             report.  In that case, just report a simple "syntax error".
+           - Don't assume there isn't a lookahead just because this
+             state is a consistent state with a default action.  There
+             might have been a previous inconsistent state, consistent
+             state with a non-default action, or user semantic action
+             that manipulated yychar.  (However, yychar is currently out
+             of scope during semantic actions.)
+           - Of course, the expected token list depends on states to
+             have correct lookahead information, and it depends on the
+             parser not to perform extra reductions after fetching a
+             lookahead from the scanner and before detecting a syntax
+             error.  Thus, state merging (from LALR or IELR) and default
+             reductions corrupt the expected token list.  However, the
+             list is correct for canonical LR with one exception: it
+             will still contain any token that will not be accepted due
+             to an error action in a later state.
+        */
+        if (tok != yyempty_)
+          {
+            // FIXME: This method of building the message is not compatible
+            // with internationalization.
+            StringBuffer res =
+              new StringBuffer ("syntax error, unexpected ");
+            res.append (yytnamerr_ (yytname_[tok]));
+            int yyn = yypact_[yystate];
+            if (!yy_pact_value_is_default_ (yyn))
+              {
+                /* Start YYX at -YYN if negative to avoid negative
+                   indexes in YYCHECK.  In other words, skip the first
+                   -YYN actions for this state because they are default
+                   actions.  */
+                int yyxbegin = yyn < 0 ? -yyn : 0;
+                /* Stay within bounds of both yycheck and yytname.  */
+                int yychecklim = yylast_ - yyn + 1;
+                int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
+                int count = 0;
+                for (int x = yyxbegin; x < yyxend; ++x)
+                  if (yycheck_[x + yyn] == x && x != yyterror_
+                      && !yy_table_value_is_error_ (yytable_[x + yyn]))
+                    ++count;
+                if (count < 5)
+                  {
+                    count = 0;
+                    for (int x = yyxbegin; x < yyxend; ++x)
+                      if (yycheck_[x + yyn] == x && x != yyterror_
+                          && !yy_table_value_is_error_ (yytable_[x + yyn]))
+                        {
+                          res.append (count++ == 0 ? ", expecting " : " or ");
+                          res.append (yytnamerr_ (yytname_[x]));
+                        }
+                  }
+              }
+            return res.toString ();
+          }
+      }
+
+    return "syntax error";
+  }
+
+  /**
+   * Whether the given <code>yypact_</code> value indicates a defaulted state.
+   * @@param yyvalue   the value to check
+   */
+  private static boolean yy_pact_value_is_default_ (int yyvalue)
+  {
+    return yyvalue == yypact_ninf_;
+  }
+
+  /**
+   * Whether the given <code>yytable_</code> value indicates a syntax error.
+   * @@param yyvalue   the value to check
+   */
+  private static boolean yy_table_value_is_error_ (int yyvalue)
+  {
+    return yyvalue == yytable_ninf_;
+  }
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+  private static final ]b4_int_type_for([b4_pact])[ yypact_ninf_ = ]b4_pact_ninf[;
+  private static final ]b4_int_type_for([b4_pact])[ yypact_[] =
+  {
+    ]b4_pact[
+  };
+
+  /* YYDEFACT[S] -- default reduction number in state S.  Performed when
+     YYTABLE doesn't specify something else to do.  Zero means the
+     default is an error.  */
+  private static final ]b4_int_type_for([b4_defact])[ yydefact_[] =
+  {
+    ]b4_defact[
+  };
+
+  /* YYPGOTO[NTERM-NUM].  */
+  private static final ]b4_int_type_for([b4_pgoto])[ yypgoto_[] =
+  {
+    ]b4_pgoto[
+  };
+
+  /* YYDEFGOTO[NTERM-NUM].  */
+  private static final ]b4_int_type_for([b4_defgoto])[
+  yydefgoto_[] =
+  {
+    ]b4_defgoto[
+  };
+
+  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule which
+     number is the opposite.  If YYTABLE_NINF_, syntax error.  */
+  private static final ]b4_int_type_for([b4_table])[ yytable_ninf_ = ]b4_table_ninf[;
+  private static final ]b4_int_type_for([b4_table])[
+  yytable_[] =
+  {
+    ]b4_table[
+  };
+
+  /* YYCHECK.  */
+  private static final ]b4_int_type_for([b4_check])[
+  yycheck_[] =
+  {
+    ]b4_check[
+  };
+
+  /* STOS_[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+  private static final ]b4_int_type_for([b4_stos])[
+  yystos_[] =
+  {
+    ]b4_stos[
+  };
+
+  /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
+     to YYLEX-NUM.  */
+  private static final ]b4_int_type_for([b4_toknum])[
+  yytoken_number_[] =
+  {
+    ]b4_toknum[
+  };
+
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+  private static final ]b4_int_type_for([b4_r1])[
+  yyr1_[] =
+  {
+    ]b4_r1[
+  };
+
+  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+  private static final ]b4_int_type_for([b4_r2])[
+  yyr2_[] =
+  {
+    ]b4_r2[
+  };
+
+  /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+     First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
+  private static final String yytname_[] =
+  {
+    ]b4_tname[
+  };
+
+  /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+  private static final ]b4_int_type_for([b4_rhs])[ yyrhs_[] =
+  {
+    ]b4_rhs[
+  };
+
+  /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+     YYRHS.  */
+  private static final ]b4_int_type_for([b4_prhs])[ yyprhs_[] =
+  {
+    ]b4_prhs[
+  };
+
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+  private static final ]b4_int_type_for([b4_rline])[ yyrline_[] =
+  {
+    ]b4_rline[
+  };
+
+  // Report on the debug stream that the rule yyrule is going to be reduced.
+  private void yy_reduce_print (int yyrule, YYStack yystack)
+  {
+    if (yydebug == 0)
+      return;
+
+    int yylno = yyrline_[yyrule];
+    int yynrhs = yyr2_[yyrule];
+    /* Print the symbols being reduced, and their result.  */
+    yycdebug ("Reducing stack by rule " + (yyrule - 1)
+	      + " (line " + yylno + "), ");
+
+    /* The symbols being reduced.  */
+    for (int yyi = 0; yyi < yynrhs; yyi++)
+      yy_symbol_print ("   $" + (yyi + 1) + " =",
+		       yyrhs_[yyprhs_[yyrule] + yyi],
+		       ]b4_rhs_value(yynrhs, yyi + 1)b4_locations_if([,
+		       b4_rhs_location(yynrhs, yyi + 1)])[);
+  }
+
+  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+  private static final ]b4_int_type_for([b4_translate])[ yytranslate_table_[] =
+  {
+    ]b4_translate[
+  };
+
+  private static final ]b4_int_type_for([b4_translate])[ yytranslate_ (int t)
+  {
+    if (t >= 0 && t <= yyuser_token_number_max_)
+      return yytranslate_table_[t];
+    else
+      return yyundef_token_;
+  }
+
+  private static final int yylast_ = ]b4_last[;
+  private static final int yynnts_ = ]b4_nterms_number[;
+  private static final int yyempty_ = -2;
+  private static final int yyfinal_ = ]b4_final_state_number[;
+  private static final int yyterror_ = 1;
+  private static final int yyerrcode_ = 256;
+  private static final int yyntokens_ = ]b4_tokens_number[;
+
+  private static final int yyuser_token_number_max_ = ]b4_user_token_number_max[;
+  private static final int yyundef_token_ = ]b4_undef_token_number[;
+
+]/* User implementation code.  */
+b4_percent_code_get[]dnl
+
+}
+
+b4_epilogue
+b4_output_end()
diff --git a/data/location.cc b/data/location.cc
index 869320e..4082e09 100644
--- a/data/location.cc
+++ b/data/location.cc
@@ -1,89 +1,83 @@
-m4_divert(-1)
-
 # C++ skeleton for Bison
 
-# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2002-2007, 2009-2012 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# We do want M4 expansion after # for CPP macros.
-m4_changecom()
-m4_divert(0)dnl
-@output b4_dir_prefix[]position.hh
+
+b4_output_begin([b4_dir_prefix[]position.hh])
 b4_copyright([Positions for Bison parsers in C++],
-  [2002, 2003, 2004, 2005, 2006])[
+             [2002-2007, 2009-2012])[
 
 /**
- ** \file position.hh
- ** Define the ]b4_namespace[::position class.
+ ** \file ]b4_dir_prefix[position.hh
+ ** Define the ]b4_namespace_ref[::position class.
  */
 
-#ifndef BISON_POSITION_HH
-# define BISON_POSITION_HH
+]b4_cpp_guard_open([b4_dir_prefix[]position.hh])[
 
+# include <algorithm> // std::max
 # include <iostream>
 # include <string>
 
-namespace ]b4_namespace[
-{
+]b4_null_define[
+
+]b4_namespace_open[
   /// Abstract a position.
   class position
   {
   public:
-]m4_ifdef([b4_location_constructors], [
+]m4_ifdef([b4_location_constructors], [[
     /// Construct a position.
-    position ()
-      : filename (0), line (1), column (0)
+    explicit position (]b4_percent_define_get([[filename_type]])[* f = YY_NULL,
+                       unsigned int l = ]b4_location_initial_line[u,
+                       unsigned int c = ]b4_location_initial_column[u)
+      : filename (f)
+      , line (l)
+      , column (c)
     {
     }
 
-])[
+]])[
     /// Initialization.
-    inline void initialize (]b4_filename_type[* fn)
+    void initialize (]b4_percent_define_get([[filename_type]])[* fn = YY_NULL,
+                     unsigned int l = ]b4_location_initial_line[u,
+                     unsigned int c = ]b4_location_initial_column[u)
     {
       filename = fn;
-      line = 1;
-      column = 0;
+      line = l;
+      column = c;
     }
 
     /** \name Line and Column related manipulators
      ** \{ */
-  public:
     /// (line related) Advance to the COUNT next lines.
-    inline void lines (int count = 1)
+    void lines (int count = 1)
     {
-      column = 0;
+      column = ]b4_location_initial_column[u;
       line += count;
     }
 
     /// (column related) Advance to the COUNT next columns.
-    inline void columns (int count = 1)
+    void columns (int count = 1)
     {
-      int leftmost = 0;
-      int current  = column;
-      if (leftmost <= current + count)
-	column += count;
-      else
-	column = 0;
+      column = std::max (]b4_location_initial_column[u, column + count);
     }
     /** \} */
 
-  public:
     /// File name to which this position refers.
-    ]b4_filename_type[* filename;
+    ]b4_percent_define_get([[filename_type]])[* filename;
     /// Current line number.
     unsigned int line;
     /// Current column number.
@@ -91,7 +85,7 @@
   };
 
   /// Add and assign a position.
-  inline const position&
+  inline position&
   operator+= (position& res, const int width)
   {
     res.columns (width);
@@ -107,7 +101,7 @@
   }
 
   /// Add and assign a position.
-  inline const position&
+  inline position&
   operator-= (position& res, const int width)
   {
     return res += -width;
@@ -119,56 +113,93 @@
   {
     return begin + -width;
   }
+]b4_percent_define_flag_if([[define_location_comparison]], [[
+  /// Compare two position objects.
+  inline bool
+  operator== (const position& pos1, const position& pos2)
+  {
+    return (pos1.line == pos2.line
+            && pos1.column == pos2.column
+            && (pos1.filename == pos2.filename
+                || (pos1.filename && pos2.filename
+                    && *pos1.filename == *pos2.filename)));
+  }
 
+  /// Compare two position objects.
+  inline bool
+  operator!= (const position& pos1, const position& pos2)
+  {
+    return !(pos1 == pos2);
+  }
+]])[
   /** \brief Intercept output stream redirection.
    ** \param ostr the destination output stream
    ** \param pos a reference to the position to redirect
    */
-  inline std::ostream&
-  operator<< (std::ostream& ostr, const position& pos)
+  template <typename YYChar>
+  inline std::basic_ostream<YYChar>&
+  operator<< (std::basic_ostream<YYChar>& ostr, const position& pos)
   {
     if (pos.filename)
       ostr << *pos.filename << ':';
     return ostr << pos.line << '.' << pos.column;
   }
 
-}
-#endif // not BISON_POSITION_HH]
-@output b4_dir_prefix[]location.hh
+]b4_namespace_close[
+]b4_cpp_guard_close([b4_dir_prefix[]position.hh])
+b4_output_end()
+
+
+b4_output_begin([b4_dir_prefix[]location.hh])
 b4_copyright([Locations for Bison parsers in C++],
-  [2002, 2003, 2004, 2005, 2006])[
+             [2002-2007, 2009-2012])[
 
 /**
- ** \file location.hh
- ** Define the ]b4_namespace[::location class.
+ ** \file ]b4_dir_prefix[location.hh
+ ** Define the ]b4_namespace_ref[::location class.
  */
 
-#ifndef BISON_LOCATION_HH
-# define BISON_LOCATION_HH
+]b4_cpp_guard_open([b4_dir_prefix[]location.hh])[
 
-# include <iostream>
-# include <string>
 # include "position.hh"
 
-namespace ]b4_namespace[
-{
+]b4_namespace_open[
 
   /// Abstract a location.
   class location
   {
   public:
 ]m4_ifdef([b4_location_constructors], [
-    /// Construct a location.
-    location ()
-      : begin (), end ()
+    /// Construct a location from \a b to \a e.
+    location (const position& b, const position& e)
+      : begin (b)
+      , end (e)
+    {
+    }
+
+    /// Construct a 0-width location in \a p.
+    explicit location (const position& p = position ())
+      : begin (p)
+      , end (p)
+    {
+    }
+
+    /// Construct a 0-width location in \a f, \a l, \a c.
+    explicit location (]b4_percent_define_get([[filename_type]])[* f,
+                       unsigned int l = ]b4_location_initial_line[u,
+                       unsigned int c = ]b4_location_initial_column[u)
+      : begin (f, l, c)
+      , end (f, l, c)
     {
     }
 
 ])[
     /// Initialization.
-    inline void initialize (]b4_filename_type[* fn)
+    void initialize (]b4_percent_define_get([[filename_type]])[* f = YY_NULL,
+                     unsigned int l = ]b4_location_initial_line[u,
+                     unsigned int c = ]b4_location_initial_column[u)
     {
-      begin.initialize (fn);
+      begin.initialize (f, l, c);
       end = begin;
     }
 
@@ -176,19 +207,19 @@
      ** \{ */
   public:
     /// Reset initial location to final location.
-    inline void step ()
+    void step ()
     {
       begin = end;
     }
 
     /// Extend the current location to the COUNT next columns.
-    inline void columns (unsigned int count = 1)
+    void columns (unsigned int count = 1)
     {
       end += count;
     }
 
     /// Extend the current location to the COUNT next lines.
-    inline void lines (unsigned int count = 1)
+    void lines (unsigned int count = 1)
     {
       end.lines (count);
     }
@@ -224,14 +255,30 @@
     res.columns (width);
     return res;
   }
+]b4_percent_define_flag_if([[define_location_comparison]], [[
+  /// Compare two location objects.
+  inline bool
+  operator== (const location& loc1, const location& loc2)
+  {
+    return loc1.begin == loc2.begin && loc1.end == loc2.end;
+  }
 
+  /// Compare two location objects.
+  inline bool
+  operator!= (const location& loc1, const location& loc2)
+  {
+    return !(loc1 == loc2);
+  }
+]])[
   /** \brief Intercept output stream redirection.
    ** \param ostr the destination output stream
    ** \param loc a reference to the location to redirect
    **
    ** Avoid duplicate information.
    */
-  inline std::ostream& operator<< (std::ostream& ostr, const location& loc)
+  template <typename YYChar>
+  inline std::basic_ostream<YYChar>&
+  operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
   {
     position last = loc.end - 1;
     ostr << loc.begin;
@@ -246,8 +293,7 @@
     return ostr;
   }
 
-}
+]b4_namespace_close[
 
-#endif // not BISON_LOCATION_HH]
-m4_divert(-1)
-m4_changecom([#])
+]b4_cpp_guard_close([b4_dir_prefix[]location.hh])
+b4_output_end()
diff --git a/data/m4sugar/foreach.m4 b/data/m4sugar/foreach.m4
new file mode 100644
index 0000000..3fc1913
--- /dev/null
+++ b/data/m4sugar/foreach.m4
@@ -0,0 +1,362 @@
+#                                                  -*- Autoconf -*-
+# This file is part of Autoconf.
+# foreach-based replacements for recursive functions.
+# Speeds up GNU M4 1.4.x by avoiding quadratic $@ recursion, but penalizes
+# GNU M4 1.6 by requiring more memory and macro expansions.
+#
+# Copyright (C) 2008-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf.  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 3 of the License, 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.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively.  If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Eric Blake.
+
+# In M4 1.4.x, every byte of $@ is rescanned.  This means that an
+# algorithm on n arguments that recurses with one less argument each
+# iteration will scan n * (n + 1) / 2 arguments, for O(n^2) time.  In
+# M4 1.6, this was fixed so that $@ is only scanned once, then
+# back-references are made to information stored about the scan.
+# Thus, n iterations need only scan n arguments, for O(n) time.
+# Additionally, in M4 1.4.x, recursive algorithms did not clean up
+# memory very well, requiring O(n^2) memory rather than O(n) for n
+# iterations.
+#
+# This file is designed to overcome the quadratic nature of $@
+# recursion by writing a variant of m4_foreach that uses m4_for rather
+# than $@ recursion to operate on the list.  This involves more macro
+# expansions, but avoids the need to rescan a quadratic number of
+# arguments, making these replacements very attractive for M4 1.4.x.
+# On the other hand, in any version of M4, expanding additional macros
+# costs additional time; therefore, in M4 1.6, where $@ recursion uses
+# fewer macros, these replacements actually pessimize performance.
+# Additionally, the use of $10 to mean the tenth argument violates
+# POSIX; although all versions of m4 1.4.x support this meaning, a
+# future m4 version may switch to take it as the first argument
+# concatenated with a literal 0, so the implementations in this file
+# are not future-proof.  Thus, this file is conditionally included as
+# part of m4_init(), only when it is detected that M4 probably has
+# quadratic behavior (ie. it lacks the macro __m4_version__).
+#
+# Please keep this file in sync with m4sugar.m4.
+
+# _m4_foreach(PRE, POST, IGNORED, ARG...)
+# ---------------------------------------
+# Form the common basis of the m4_foreach and m4_map macros.  For each
+# ARG, expand PRE[ARG]POST[].  The IGNORED argument makes recursion
+# easier, and must be supplied rather than implicit.
+#
+# This version minimizes the number of times that $@ is evaluated by
+# using m4_for to generate a boilerplate into _m4_f then passing $@ to
+# that temporary macro.  Thus, the recursion is done in m4_for without
+# reparsing any user input, and is not quadratic.  For an idea of how
+# this works, note that m4_foreach(i,[1,2],[i]) calls
+#   _m4_foreach([m4_define([i],],[)i],[],[1],[2])
+# which defines _m4_f:
+#   $1[$4]$2[]$1[$5]$2[]_m4_popdef([_m4_f])
+# then calls _m4_f([m4_define([i],],[)i],[],[1],[2]) for a net result:
+#   m4_define([i],[1])i[]m4_define([i],[2])i[]_m4_popdef([_m4_f]).
+m4_define([_m4_foreach],
+[m4_if([$#], [3], [],
+       [m4_pushdef([_m4_f], _m4_for([4], [$#], [1],
+   [$0_([1], [2],], [)])[_m4_popdef([_m4_f])])_m4_f($@)])])
+
+m4_define([_m4_foreach_],
+[[$$1[$$3]$$2[]]])
+
+# m4_case(SWITCH, VAL1, IF-VAL1, VAL2, IF-VAL2, ..., DEFAULT)
+# -----------------------------------------------------------
+# Find the first VAL that SWITCH matches, and expand the corresponding
+# IF-VAL.  If there are no matches, expand DEFAULT.
+#
+# Use m4_for to create a temporary macro in terms of a boilerplate
+# m4_if with final cleanup.  If $# is even, we have DEFAULT; if it is
+# odd, then rounding the last $# up in the temporary macro is
+# harmless.  For example, both m4_case(1,2,3,4,5) and
+# m4_case(1,2,3,4,5,6) result in the intermediate _m4_case being
+#   m4_if([$1],[$2],[$3],[$1],[$4],[$5],_m4_popdef([_m4_case])[$6])
+m4_define([m4_case],
+[m4_if(m4_eval([$# <= 2]), [1], [$2],
+[m4_pushdef([_$0], [m4_if(]_m4_for([2], m4_eval([($# - 1) / 2 * 2]), [2],
+     [_$0_(], [)])[_m4_popdef(
+	 [_$0])]m4_dquote($m4_eval([($# + 1) & ~1]))[)])_$0($@)])])
+
+m4_define([_m4_case_],
+[$0_([1], [$1], m4_incr([$1]))])
+
+m4_define([_m4_case__],
+[[[$$1],[$$2],[$$3],]])
+
+# m4_bmatch(SWITCH, RE1, VAL1, RE2, VAL2, ..., DEFAULT)
+# -----------------------------------------------------
+# m4 equivalent of
+#
+# if (SWITCH =~ RE1)
+#   VAL1;
+# elif (SWITCH =~ RE2)
+#   VAL2;
+# elif ...
+#   ...
+# else
+#   DEFAULT
+#
+# We build the temporary macro _m4_b:
+#   m4_define([_m4_b], _m4_defn([_m4_bmatch]))_m4_b([$1], [$2], [$3])...
+#   _m4_b([$1], [$m-1], [$m])_m4_b([], [], [$m+1]_m4_popdef([_m4_b]))
+# then invoke m4_unquote(_m4_b($@)), for concatenation with later text.
+m4_define([m4_bmatch],
+[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
+       [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
+       [$#], 2, [$2],
+       [m4_pushdef([_m4_b], [m4_define([_m4_b],
+  _m4_defn([_$0]))]_m4_for([3], m4_eval([($# + 1) / 2 * 2 - 1]),
+  [2], [_$0_(], [)])[_m4_b([], [],]m4_dquote([$]m4_eval(
+  [($# + 1) / 2 * 2]))[_m4_popdef([_m4_b]))])m4_unquote(_m4_b($@))])])
+
+m4_define([_m4_bmatch],
+[m4_if(m4_bregexp([$1], [$2]), [-1], [], [[$3]m4_define([$0])])])
+
+m4_define([_m4_bmatch_],
+[$0_([1], m4_decr([$1]), [$1])])
+
+m4_define([_m4_bmatch__],
+[[_m4_b([$$1], [$$2], [$$3])]])
+
+
+# m4_cond(TEST1, VAL1, IF-VAL1, TEST2, VAL2, IF-VAL2, ..., [DEFAULT])
+# -------------------------------------------------------------------
+# Similar to m4_if, except that each TEST is expanded when encountered.
+# If the expansion of TESTn matches the string VALn, the result is IF-VALn.
+# The result is DEFAULT if no tests passed.  This macro allows
+# short-circuiting of expensive tests, where it pays to arrange quick
+# filter tests to run first.
+#
+# m4_cond already guarantees either 3*n or 3*n + 1 arguments, 1 <= n.
+# We only have to speed up _m4_cond, by building the temporary _m4_c:
+#   m4_define([_m4_c], _m4_defn([m4_unquote]))_m4_c([m4_if(($1), [($2)],
+#   [[$3]m4_define([_m4_c])])])_m4_c([m4_if(($4), [($5)],
+#   [[$6]m4_define([_m4_c])])])..._m4_c([m4_if(($m-2), [($m-1)],
+#   [[$m]m4_define([_m4_c])])])_m4_c([[$m+1]]_m4_popdef([_m4_c]))
+# We invoke m4_unquote(_m4_c($@)), for concatenation with later text.
+m4_define([_m4_cond],
+[m4_pushdef([_m4_c], [m4_define([_m4_c],
+  _m4_defn([m4_unquote]))]_m4_for([2], m4_eval([$# / 3 * 3 - 1]), [3],
+  [$0_(], [)])[_m4_c(]m4_dquote(m4_dquote(
+  [$]m4_eval([$# / 3 * 3 + 1])))[_m4_popdef([_m4_c]))])m4_unquote(_m4_c($@))])
+
+m4_define([_m4_cond_],
+[$0_(m4_decr([$1]), [$1], m4_incr([$1]))])
+
+m4_define([_m4_cond__],
+[[_m4_c([m4_if(($$1), [($$2)], [[$$3]m4_define([_m4_c])])])]])
+
+# m4_bpatsubsts(STRING, RE1, SUBST1, RE2, SUBST2, ...)
+# ----------------------------------------------------
+# m4 equivalent of
+#
+#   $_ = STRING;
+#   s/RE1/SUBST1/g;
+#   s/RE2/SUBST2/g;
+#   ...
+#
+# m4_bpatsubsts already validated an odd number of arguments; we only
+# need to speed up _m4_bpatsubsts.  To avoid nesting, we build the
+# temporary _m4_p:
+#   m4_define([_m4_p], [$1])m4_define([_m4_p],
+#   m4_bpatsubst(m4_dquote(_m4_defn([_m4_p])), [$2], [$3]))m4_define([_m4_p],
+#   m4_bpatsubst(m4_dquote(_m4_defn([_m4_p])), [$4], [$5]))m4_define([_m4_p],...
+#   m4_bpatsubst(m4_dquote(_m4_defn([_m4_p])), [$m-1], [$m]))m4_unquote(
+#   _m4_defn([_m4_p])_m4_popdef([_m4_p]))
+m4_define([_m4_bpatsubsts],
+[m4_pushdef([_m4_p], [m4_define([_m4_p],
+  ]m4_dquote([$]1)[)]_m4_for([3], [$#], [2], [$0_(],
+  [)])[m4_unquote(_m4_defn([_m4_p])_m4_popdef([_m4_p]))])_m4_p($@)])
+
+m4_define([_m4_bpatsubsts_],
+[$0_(m4_decr([$1]), [$1])])
+
+m4_define([_m4_bpatsubsts__],
+[[m4_define([_m4_p],
+m4_bpatsubst(m4_dquote(_m4_defn([_m4_p])), [$$1], [$$2]))]])
+
+# m4_shiftn(N, ...)
+# -----------------
+# Returns ... shifted N times.  Useful for recursive "varargs" constructs.
+#
+# m4_shiftn already validated arguments; we only need to speed up
+# _m4_shiftn.  If N is 3, then we build the temporary _m4_s, defined as
+#   ,[$5],[$6],...,[$m]_m4_popdef([_m4_s])
+# before calling m4_shift(_m4_s($@)).
+m4_define([_m4_shiftn],
+[m4_if(m4_incr([$1]), [$#], [], [m4_pushdef([_m4_s],
+  _m4_for(m4_eval([$1 + 2]), [$#], [1],
+  [[,]m4_dquote($], [)])[_m4_popdef([_m4_s])])m4_shift(_m4_s($@))])])
+
+# m4_do(STRING, ...)
+# ------------------
+# This macro invokes all its arguments (in sequence, of course).  It is
+# useful for making your macros more structured and readable by dropping
+# unnecessary dnl's and have the macros indented properly.
+#
+# Here, we use the temporary macro _m4_do, defined as
+#   $1[]$2[]...[]$n[]_m4_popdef([_m4_do])
+m4_define([m4_do],
+[m4_if([$#], [0], [],
+       [m4_pushdef([_$0], _m4_for([1], [$#], [1],
+		   [$], [[[]]])[_m4_popdef([_$0])])_$0($@)])])
+
+# m4_dquote_elt(ARGS)
+# -------------------
+# Return ARGS as an unquoted list of double-quoted arguments.
+#
+# _m4_foreach to the rescue.
+m4_define([m4_dquote_elt],
+[m4_if([$#], [0], [], [[[$1]]_m4_foreach([,m4_dquote(], [)], $@)])])
+
+# m4_reverse(ARGS)
+# ----------------
+# Output ARGS in reverse order.
+#
+# Invoke _m4_r($@) with the temporary _m4_r built as
+#   [$m], [$m-1], ..., [$2], [$1]_m4_popdef([_m4_r])
+m4_define([m4_reverse],
+[m4_if([$#], [0], [], [$#], [1], [[$1]],
+[m4_pushdef([_m4_r], [[$$#]]_m4_for(m4_decr([$#]), [1], [-1],
+    [[, ]m4_dquote($], [)])[_m4_popdef([_m4_r])])_m4_r($@)])])
+
+
+# m4_map_args_pair(EXPRESSION, [END-EXPR = EXPRESSION], ARG...)
+# -------------------------------------------------------------
+# Perform a pairwise grouping of consecutive ARGs, by expanding
+# EXPRESSION([ARG1], [ARG2]).  If there are an odd number of ARGs, the
+# final argument is expanded with END-EXPR([ARGn]).
+#
+# Build the temporary macro _m4_map_args_pair, with the $2([$m+1])
+# only output if $# is odd:
+#   $1([$3], [$4])[]$1([$5], [$6])[]...$1([$m-1],
+#   [$m])[]m4_default([$2], [$1])([$m+1])[]_m4_popdef([_m4_map_args_pair])
+m4_define([m4_map_args_pair],
+[m4_if([$#], [0], [m4_fatal([$0: too few arguments: $#])],
+       [$#], [1], [m4_fatal([$0: too few arguments: $#: $1])],
+       [$#], [2], [],
+       [$#], [3], [m4_default([$2], [$1])([$3])[]],
+       [m4_pushdef([_$0], _m4_for([3],
+   m4_eval([$# / 2 * 2 - 1]), [2], [_$0_(], [)])_$0_end(
+   [1], [2], [$#])[_m4_popdef([_$0])])_$0($@)])])
+
+m4_define([_m4_map_args_pair_],
+[$0_([1], [$1], m4_incr([$1]))])
+
+m4_define([_m4_map_args_pair__],
+[[$$1([$$2], [$$3])[]]])
+
+m4_define([_m4_map_args_pair_end],
+[m4_if(m4_eval([$3 & 1]), [1], [[m4_default([$$2], [$$1])([$$3])[]]])])
+
+# m4_join(SEP, ARG1, ARG2...)
+# ---------------------------
+# Produce ARG1SEPARG2...SEPARGn.  Avoid back-to-back SEP when a given ARG
+# is the empty string.  No expansion is performed on SEP or ARGs.
+#
+# Use a self-modifying separator, since we don't know how many
+# arguments might be skipped before a separator is first printed, but
+# be careful if the separator contains $.  _m4_foreach to the rescue.
+m4_define([m4_join],
+[m4_pushdef([_m4_sep], [m4_define([_m4_sep], _m4_defn([m4_echo]))])]dnl
+[_m4_foreach([_$0([$1],], [)], $@)_m4_popdef([_m4_sep])])
+
+m4_define([_m4_join],
+[m4_if([$2], [], [], [_m4_sep([$1])[$2]])])
+
+# m4_joinall(SEP, ARG1, ARG2...)
+# ------------------------------
+# Produce ARG1SEPARG2...SEPARGn.  An empty ARG results in back-to-back SEP.
+# No expansion is performed on SEP or ARGs.
+#
+# A bit easier than m4_join.  _m4_foreach to the rescue.
+m4_define([m4_joinall],
+[[$2]m4_if(m4_eval([$# <= 2]), [1], [],
+	   [_m4_foreach([$1], [], m4_shift($@))])])
+
+# m4_list_cmp(A, B)
+# -----------------
+# Compare the two lists of integer expressions A and B.
+#
+# m4_list_cmp takes care of any side effects; we only override
+# _m4_list_cmp_raw, where we can safely expand lists multiple times.
+# First, insert padding so that both lists are the same length; the
+# trailing +0 is necessary to handle a missing list.  Next, create a
+# temporary macro to perform pairwise comparisons until an inequality
+# is found.  For example, m4_list_cmp([1], [1,2]) creates _m4_cmp as
+#   m4_if(m4_eval([($1) != ($3)]), [1], [m4_cmp([$1], [$3])],
+#         m4_eval([($2) != ($4)]), [1], [m4_cmp([$2], [$4])],
+#         [0]_m4_popdef([_m4_cmp]))
+# then calls _m4_cmp([1+0], [0*2], [1], [2+0])
+m4_define([_m4_list_cmp_raw],
+[m4_if([$1], [$2], 0,
+       [_m4_list_cmp($1+0_m4_list_pad(m4_count($1), m4_count($2)),
+		     $2+0_m4_list_pad(m4_count($2), m4_count($1)))])])
+
+m4_define([_m4_list_pad],
+[m4_if(m4_eval($1 < $2), [1],
+       [_m4_for(m4_incr([$1]), [$2], [1], [,0*])])])
+
+m4_define([_m4_list_cmp],
+[m4_pushdef([_m4_cmp], [m4_if(]_m4_for(
+   [1], m4_eval([$# >> 1]), [1], [$0_(], [,]m4_eval([$# >> 1])[)])[
+      [0]_m4_popdef([_m4_cmp]))])_m4_cmp($@)])
+
+m4_define([_m4_list_cmp_],
+[$0_([$1], m4_eval([$1 + $2]))])
+
+m4_define([_m4_list_cmp__],
+[[m4_eval([($$1) != ($$2)]), [1], [m4_cmp([$$1], [$$2])],
+]])
+
+# m4_max(EXPR, ...)
+# m4_min(EXPR, ...)
+# -----------------
+# Return the decimal value of the maximum (or minimum) in a series of
+# integer expressions.
+#
+# _m4_foreach to the rescue; we only need to replace _m4_minmax.  Here,
+# we need a temporary macro to track the best answer so far, so that
+# the foreach expression is tractable.
+m4_define([_m4_minmax],
+[m4_pushdef([_m4_best], m4_eval([$2]))_m4_foreach(
+  [m4_define([_m4_best], $1(_m4_best,], [))], m4_shift($@))]dnl
+[_m4_best[]_m4_popdef([_m4_best])])
+
+# m4_set_add_all(SET, VALUE...)
+# -----------------------------
+# Add each VALUE into SET.  This is O(n) in the number of VALUEs, and
+# can be faster than calling m4_set_add for each VALUE.
+#
+# _m4_foreach to the rescue.  If no deletions have occurred, then
+# avoid the speed penalty of m4_set_add.
+m4_define([m4_set_add_all],
+[m4_if([$#], [0], [], [$#], [1], [],
+       [m4_define([_m4_set_size($1)], m4_eval(m4_set_size([$1])
+	  + m4_len(_m4_foreach(m4_ifdef([_m4_set_cleanup($1)],
+  [[m4_set_add]], [[_$0]])[([$1],], [)], $@))))])])
+
+m4_define([_m4_set_add_all],
+[m4_ifdef([_m4_set([$1],$2)], [],
+	  [m4_define([_m4_set([$1],$2)],
+		     [1])m4_pushdef([_m4_set([$1])], [$2])-])])
diff --git a/data/m4sugar/m4sugar.m4 b/data/m4sugar/m4sugar.m4
index 225b7c7..12a9ab7 100644
--- a/data/m4sugar/m4sugar.m4
+++ b/data/m4sugar/m4sugar.m4
@@ -3,53 +3,29 @@
 # Base M4 layer.
 # Requires GNU M4.
 #
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 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.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf.  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 3 of the License, 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.
 #
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception, the Free Software Foundation gives unlimited
-# permission to copy, distribute and modify the configure scripts that
-# are the output of Autoconf.  You need not follow the terms of the GNU
-# General Public License when using or distributing such scripts, even
-# though portions of the text of Autoconf appear in them.  The GNU
-# General Public License (GPL) does govern all other use of the material
-# that constitutes the Autoconf program.
-#
-# Certain portions of the Autoconf source text are designed to be copied
-# (in certain cases, depending on the input) into the output of
-# Autoconf.  We call these the "data" portions.  The rest of the Autoconf
-# source text consists of comments plus executable code that decides which
-# of the data portions to output in any given case.  We call these
-# comments and executable code the "non-data" portions.  Autoconf never
-# copies any of the non-data portions into its output.
-#
-# This special exception to the GPL applies to versions of Autoconf
-# released by the Free Software Foundation.  When you make and
-# distribute a modified version of Autoconf, you may extend this special
-# exception to the GPL to apply to your modified version as well, *unless*
-# your modified version has the potential to copy into its output some
-# of the text that was the non-data portion of the version that you started
-# with.  (In other words, unless your change moves or copies text from
-# the non-data portions to the data portions.)  If your modification has
-# such potential, you must delete any notice of this special exception
-# to the GPL from your modified version.
-#
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively.  If not, see <http://www.gnu.org/licenses/>.
+
 # Written by Akim Demaille.
-#
 
 # Set the quotes, whatever the current quoting system.
 changequote()
@@ -90,71 +66,118 @@
 # in time, but because of the space cost of 1, it's not that obvious.
 # Nevertheless, one huge difference is the handling of `$0'.  If `from'
 # uses `$0', then with 1, `to''s `$0' is `to', while it is `from' in 2.
-# The user will certainly prefer to see `to'.
+# The user would certainly prefer to see `to'.
+#
+# This definition is in effect during m4sugar initialization, when
+# there are no pushdef stacks; later on, we redefine it to something
+# more powerful for all other clients to use.
 m4_define([m4_copy],
 [m4_define([$2], m4_defn([$1]))])
 
 
 # m4_rename(SRC, DST)
 # -------------------
-# Rename the macro SRC as DST.
+# Rename the macro SRC to DST.
 m4_define([m4_rename],
 [m4_copy([$1], [$2])m4_undefine([$1])])
 
 
 # m4_rename_m4(MACRO-NAME)
 # ------------------------
-# Rename MACRO-NAME as m4_MACRO-NAME.
+# Rename MACRO-NAME to m4_MACRO-NAME.
 m4_define([m4_rename_m4],
 [m4_rename([$1], [m4_$1])])
 
 
 # m4_copy_unm4(m4_MACRO-NAME)
 # ---------------------------
-# Copy m4_MACRO-NAME as MACRO-NAME.
+# Copy m4_MACRO-NAME to MACRO-NAME.
 m4_define([m4_copy_unm4],
 [m4_copy([$1], m4_bpatsubst([$1], [^m4_\(.*\)], [[\1]]))])
 
 
 # Some m4 internals have names colliding with tokens we might use.
-# Rename them a` la `m4 --prefix-builtins'.
+# Rename them a` la `m4 --prefix-builtins'.  Conditionals first, since
+# some subsequent renames are conditional.
+m4_rename_m4([ifdef])
+m4_rename([ifelse], [m4_if])
+
 m4_rename_m4([builtin])
 m4_rename_m4([changecom])
 m4_rename_m4([changequote])
+m4_ifdef([changeword],dnl conditionally available in 1.4.x
+[m4_undefine([changeword])])
 m4_rename_m4([debugfile])
 m4_rename_m4([debugmode])
 m4_rename_m4([decr])
-m4_undefine([divert])
 m4_rename_m4([divnum])
 m4_rename_m4([dumpdef])
 m4_rename_m4([errprint])
 m4_rename_m4([esyscmd])
 m4_rename_m4([eval])
 m4_rename_m4([format])
-m4_rename_m4([ifdef])
-m4_rename([ifelse], [m4_if])
 m4_undefine([include])
 m4_rename_m4([incr])
 m4_rename_m4([index])
 m4_rename_m4([indir])
 m4_rename_m4([len])
 m4_rename([m4exit], [m4_exit])
-m4_rename([m4wrap], [m4_wrap])
-m4_rename_m4([maketemp])
+m4_undefine([m4wrap])
+m4_ifdef([mkstemp],dnl added in M4 1.4.8
+[m4_rename_m4([mkstemp])
+m4_copy([m4_mkstemp], [m4_maketemp])
+m4_undefine([maketemp])],
+[m4_rename_m4([maketemp])
+m4_copy([m4_maketemp], [m4_mkstemp])])
 m4_rename([patsubst], [m4_bpatsubst])
-m4_undefine([popdef])
+m4_rename_m4([popdef])
 m4_rename_m4([pushdef])
 m4_rename([regexp], [m4_bregexp])
 m4_rename_m4([shift])
 m4_undefine([sinclude])
 m4_rename_m4([substr])
-m4_rename_m4([symbols])
+m4_ifdef([symbols],dnl present only in alpha-quality 1.4o
+[m4_rename_m4([symbols])])
 m4_rename_m4([syscmd])
 m4_rename_m4([sysval])
 m4_rename_m4([traceoff])
 m4_rename_m4([traceon])
 m4_rename_m4([translit])
-m4_undefine([undivert])
+
+# _m4_defn(ARG)
+# -------------
+# _m4_defn is for internal use only - it bypasses the wrapper, so it
+# must only be used on one argument at a time, and only on macros
+# known to be defined.  Make sure this still works if the user renames
+# m4_defn but not _m4_defn.
+m4_copy([m4_defn], [_m4_defn])
+
+# _m4_divert_raw(NUM)
+# -------------------
+# _m4_divert_raw is for internal use only.  Use this instead of
+# m4_builtin([divert], NUM), so that tracing diversion flow is easier.
+m4_rename([divert], [_m4_divert_raw])
+
+# _m4_popdef(ARG...)
+# ------------------
+# _m4_popdef is for internal use only - it bypasses the wrapper, so it
+# must only be used on macros known to be defined.  Make sure this
+# still works if the user renames m4_popdef but not _m4_popdef.
+m4_copy([m4_popdef], [_m4_popdef])
+
+# _m4_undefine(ARG...)
+# --------------------
+# _m4_undefine is for internal use only - it bypasses the wrapper, so
+# it must only be used on macros known to be defined.  Make sure this
+# still works if the user renames m4_undefine but not _m4_undefine.
+m4_copy([m4_undefine], [_m4_undefine])
+
+# _m4_undivert(NUM...)
+# --------------------
+# _m4_undivert is for internal use only, and should always be given
+# arguments.  Use this instead of m4_builtin([undivert], NUM...), so
+# that tracing diversion flow is easier.
+m4_rename([undivert], [_m4_undivert])
 
 
 ## ------------------- ##
@@ -164,6 +187,7 @@
 
 # m4_location
 # -----------
+# Output the current file, colon, and the current line number.
 m4_define([m4_location],
 [__file__:__line__])
 
@@ -187,9 +211,8 @@
 # ----------------------------
 # Fatal the user.                                                      :)
 m4_define([m4_fatal],
-[m4_errprintn(m4_location[: error: $1])dnl
-m4_expansion_stack_dump()dnl
-m4_exit(m4_if([$2],, 1, [$2]))])
+[m4_errprintn(m4_location[: error: $1]
+m4_expansion_stack)m4_exit(m4_if([$2],, 1, [$2]))])
 
 
 # m4_assert(EXPRESSION, [EXIT-STATUS = 1])
@@ -207,11 +230,15 @@
 ## ------------- ##
 
 
-# _m4_warn(CATEGORY, MESSAGE, STACK-TRACE)
-# ----------------------------------------
+# _m4_warn(CATEGORY, MESSAGE, [STACK-TRACE])
+# ------------------------------------------
 # Report a MESSAGE to the user if the CATEGORY of warnings is enabled.
 # This is for traces only.
-# The STACK-TRACE is a \n-separated list of "LOCATION: MESSAGE".
+# If present, STACK-TRACE is a \n-separated list of "LOCATION: MESSAGE",
+# where the last line (and no other) ends with "the top level".
+#
+# Within m4, the macro is a no-op.  This macro really matters
+# when autom4te post-processes the trace output.
 m4_define([_m4_warn], [])
 
 
@@ -220,10 +247,7 @@
 # Report a MESSAGE to the user if the CATEGORY of warnings is enabled.
 m4_define([m4_warn],
 [_m4_warn([$1], [$2],
-m4_ifdef([m4_expansion_stack],
-         [m4_defn([m4_expansion_stack])
-m4_location[: the top level]]))dnl
-])
+m4_ifdef([_m4_expansion_stack], [m4_expansion_stack]))])
 
 
 
@@ -234,8 +258,8 @@
 
 # We also want to neutralize include (and sinclude for symmetry),
 # but we want to extend them slightly: warn when a file is included
-# several times.  This is in general a dangerous operation because
-# quite nobody quotes the first argument of m4_define.
+# several times.  This is, in general, a dangerous operation, because
+# too many people forget to quote the first argument of m4_define.
 #
 # For instance in the following case:
 #   m4_define(foo, [bar])
@@ -255,7 +279,7 @@
 
 # m4_include(FILE)
 # ----------------
-# As the builtin include, but warns against multiple inclusions.
+# Like the builtin include, but warns against multiple inclusions.
 m4_define([m4_include],
 [m4_include_unique([$1])dnl
 m4_builtin([include], [$1])])
@@ -263,7 +287,7 @@
 
 # m4_sinclude(FILE)
 # -----------------
-# As the builtin sinclude, but warns against multiple inclusions.
+# Like the builtin sinclude, but warns against multiple inclusions.
 m4_define([m4_sinclude],
 [m4_include_unique([$1])dnl
 m4_builtin([sinclude], [$1])])
@@ -277,15 +301,38 @@
 # Both `m4_ifval' and `m4_ifset' tests against the empty string.  The
 # difference is that `m4_ifset' is specialized on macros.
 #
-# In case of arguments of macros, eg $[1], it makes little difference.
+# In case of arguments of macros, eg. $1, it makes little difference.
 # In the case of a macro `FOO', you don't want to check `m4_ifval(FOO,
 # TRUE)', because if `FOO' expands with commas, there is a shifting of
 # the arguments.  So you want to run `m4_ifval([FOO])', but then you just
 # compare the *string* `FOO' against `', which, of course fails.
 #
-# So you want a variation of `m4_ifset' that expects a macro name as $[1].
+# So you want the variation `m4_ifset' that expects a macro name as $1.
 # If this macro is both defined and defined to a non empty value, then
-# it runs TRUE etc.
+# it runs TRUE, etc.
+
+
+# m4_ifblank(COND, [IF-BLANK], [IF-TEXT])
+# m4_ifnblank(COND, [IF-TEXT], [IF-BLANK])
+# ----------------------------------------
+# If COND is empty, or consists only of blanks (space, tab, newline),
+# then expand IF-BLANK, otherwise expand IF-TEXT.  This differs from
+# m4_ifval only if COND has just whitespace, but it helps optimize in
+# spite of users who mistakenly leave trailing space after what they
+# thought was an empty argument:
+#   macro(
+#         []
+#        )
+#
+# Writing one macro in terms of the other causes extra overhead, so
+# we inline both definitions.
+m4_define([m4_ifblank],
+[m4_if(m4_translit([[$1]],  [ ][	][
+]), [], [$2], [$3])])
+
+m4_define([m4_ifnblank],
+[m4_if(m4_translit([[$1]],  [ ][	][
+]), [], [$3], [$2])])
 
 
 # m4_ifval(COND, [IF-TRUE], [IF-FALSE])
@@ -322,7 +369,7 @@
 # expand IF-FALSE, otherwise IF-TRUE.
 m4_define([m4_ifset],
 [m4_ifdef([$1],
-	  [m4_ifval(m4_defn([$1]), [$2], [$3])],
+	  [m4_ifval(_m4_defn([$1]), [$2], [$3])],
 	  [$3])])
 
 
@@ -350,12 +397,14 @@
 # }.
 # All the values are optional, and the macro is robust to active
 # symbols properly quoted.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
 m4_define([m4_case],
 [m4_if([$#], 0, [],
        [$#], 1, [],
        [$#], 2, [$2],
        [$1], [$2], [$3],
-       [$0([$1], m4_shiftn(3, $@))])])
+       [$0([$1], m4_shift3($@))])])
 
 
 # m4_bmatch(SWITCH, RE1, VAL1, RE2, VAL2, ..., DEFAULT)
@@ -373,46 +422,96 @@
 #
 # All the values are optional, and the macro is robust to active symbols
 # properly quoted.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
 m4_define([m4_bmatch],
 [m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
        [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
        [$#], 2, [$2],
-       [m4_if(m4_bregexp([$1], [$2]), -1, [$0([$1], m4_shiftn(3, $@))],
+       [m4_if(m4_bregexp([$1], [$2]), -1, [$0([$1], m4_shift3($@))],
 	      [$3])])])
 
+# m4_argn(N, ARGS...)
+# -------------------
+# Extract argument N (greater than 0) from ARGS.  Example:
+#   m4_define([b], [B])
+#   m4_argn([2], [a], [b], [c]) => b
+#
+# Rather than using m4_car(m4_shiftn([$1], $@)), we exploit the fact that
+# GNU m4 can directly reference any argument, through an indirect macro.
+m4_define([m4_argn],
+[m4_assert([0 < $1])]dnl
+[m4_pushdef([_$0], [_m4_popdef([_$0])]m4_dquote([$]m4_incr([$1])))_$0($@)])
 
-# m4_car(LIST)
-# m4_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
+
+# m4_car(ARGS...)
+# m4_cdr(ARGS...)
+# ---------------
+# Manipulate m4 lists.  m4_car returns the first argument.  m4_cdr
+# bundles all but the first argument into a quoted list.  These two
+# macros are generally used with list arguments, with quoting removed
+# to break the list into multiple m4 ARGS.
 m4_define([m4_car], [[$1]])
 m4_define([m4_cdr],
 [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
        [$#], 1, [],
        [m4_dquote(m4_shift($@))])])
 
-
-# m4_map(MACRO, LIST)
-# -------------------
-# Invoke MACRO($1), MACRO($2) etc. where $1, $2... are the elements
-# of LIST (which can be lists themselves, for multiple arguments MACROs).
-m4_define([m4_fst], [$1])
-m4_define([m4_map],
-[m4_if([$2], [[]], [],
-       [_m4_map([$1], [$2])])])
-m4_define([_m4_map],
-[m4_ifval([$2],
-	  [$1(m4_fst($2))[]_m4_map([$1], m4_cdr($2))])])
+# _m4_cdr(ARGS...)
+# ----------------
+# Like m4_cdr, except include a leading comma unless only one argument
+# remains.  Why?  Because comparing a large list against [] is more
+# expensive in expansion time than comparing the number of arguments; so
+# _m4_cdr can be used to reduce the number of arguments when it is time
+# to end recursion.
+m4_define([_m4_cdr],
+[m4_if([$#], 1, [],
+       [, m4_dquote(m4_shift($@))])])
 
 
-# m4_map_sep(MACRO, SEPARATOR, LIST)
-# ----------------------------------
-# Invoke MACRO($1), SEPARATOR, MACRO($2), ..., MACRO($N) where $1, $2... $N
-# are the elements of LIST (which can be lists themselves, for multiple
-# arguments MACROs).
-m4_define([m4_map_sep],
-[m4_if([$3], [[]], [],
-       [$1(m4_fst($3))[]_m4_map([$2[]$1], m4_cdr($3))])])
+
+# m4_cond(TEST1, VAL1, IF-VAL1, TEST2, VAL2, IF-VAL2, ..., [DEFAULT])
+# -------------------------------------------------------------------
+# Similar to m4_if, except that each TEST is expanded when encountered.
+# If the expansion of TESTn matches the string VALn, the result is IF-VALn.
+# The result is DEFAULT if no tests passed.  This macro allows
+# short-circuiting of expensive tests, where it pays to arrange quick
+# filter tests to run first.
+#
+# For an example, consider a previous implementation of _AS_QUOTE_IFELSE:
+#
+#    m4_if(m4_index([$1], [\]), [-1], [$2],
+#          m4_eval(m4_index([$1], [\\]) >= 0), [1], [$2],
+#          m4_eval(m4_index([$1], [\$]) >= 0), [1], [$2],
+#          m4_eval(m4_index([$1], [\`]) >= 0), [1], [$3],
+#          m4_eval(m4_index([$1], [\"]) >= 0), [1], [$3],
+#          [$2])
+#
+# Here, m4_index is computed 5 times, and m4_eval 4, even if $1 contains
+# no backslash.  It is more efficient to do:
+#
+#    m4_cond([m4_index([$1], [\])], [-1], [$2],
+#            [m4_eval(m4_index([$1], [\\]) >= 0)], [1], [$2],
+#            [m4_eval(m4_index([$1], [\$]) >= 0)], [1], [$2],
+#            [m4_eval(m4_index([$1], [\`]) >= 0)], [1], [$3],
+#            [m4_eval(m4_index([$1], [\"]) >= 0)], [1], [$3],
+#            [$2])
+#
+# In the common case of $1 with no backslash, only one m4_index expansion
+# occurs, and m4_eval is avoided altogether.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_cond],
+[m4_if([$#], [0], [m4_fatal([$0: cannot be called without arguments])],
+       [$#], [1], [$1],
+       m4_eval([$# % 3]), [2], [m4_fatal([$0: missing an argument])],
+       [_$0($@)])])
+
+m4_define([_m4_cond],
+[m4_if(($1), [($2)], [$3],
+       [$#], [3], [],
+       [$#], [4], [$4],
+       [$0(m4_shift3($@))])])
 
 
 ## ---------------------------------------- ##
@@ -434,24 +533,51 @@
 # I would have liked to name this macro `m4_bpatsubst', unfortunately,
 # due to quotation problems, I need to double quote $1 below, therefore
 # the anchors are broken :(  I can't let users be trapped by that.
+#
+# Recall that m4_shift3 always results in an argument.  Hence, we need
+# to distinguish between a final deletion vs. ending recursion.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
 m4_define([m4_bpatsubsts],
 [m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
        [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
-       [$#], 2, [m4_builtin([patsubst], $@)],
+       [$#], 2, [m4_unquote(m4_builtin([patsubst], [[$1]], [$2]))],
+       [$#], 3, [m4_unquote(m4_builtin([patsubst], [[$1]], [$2], [$3]))],
+       [_$0($@m4_if(m4_eval($# & 1), 0, [,]))])])
+m4_define([_m4_bpatsubsts],
+[m4_if([$#], 2, [$1],
        [$0(m4_builtin([patsubst], [[$1]], [$2], [$3]),
-	   m4_shiftn(3, $@))])])
+	   m4_shift3($@))])])
 
 
+# m4_copy(SRC, DST)
+# -----------------
+# Define the pushdef stack DST as a copy of the pushdef stack SRC;
+# give an error if DST is already defined.  This is particularly nice
+# for copying self-modifying pushdef stacks, where the top definition
+# includes one-shot initialization that is later popped to the normal
+# definition.  This version intentionally does nothing if SRC is
+# undefined.
+#
+# Some macros simply can't be renamed with this method: namely, anything
+# involved in the implementation of m4_stack_foreach_sep.
+m4_define([m4_copy],
+[m4_ifdef([$2], [m4_fatal([$0: won't overwrite defined macro: $2])],
+	  [m4_stack_foreach_sep([$1], [m4_pushdef([$2],], [)])])]dnl
+[m4_ifdef([m4_location($1)], [m4_define([m4_location($2)], m4_location)])])
 
-# m4_do(STRING, ...)
-# ------------------
-# This macro invokes all its arguments (in sequence, of course).  It is
-# useful for making your macros more structured and readable by dropping
-# unnecessary dnl's and have the macros indented properly.
-m4_define([m4_do],
-[m4_if($#, 0, [],
-       $#, 1, [$1],
-       [$1[]m4_do(m4_shift($@))])])
+
+# m4_copy_force(SRC, DST)
+# m4_rename_force(SRC, DST)
+# -------------------------
+# Like m4_copy/m4_rename, except blindly overwrite any existing DST.
+# Note that m4_copy_force tolerates undefined SRC, while m4_rename_force
+# does not.
+m4_define([m4_copy_force],
+[m4_ifdef([$2], [_m4_undefine([$2])])m4_copy($@)])
+
+m4_define([m4_rename_force],
+[m4_ifdef([$2], [_m4_undefine([$2])])m4_rename($@)])
 
 
 # m4_define_default(MACRO, VALUE)
@@ -462,150 +588,471 @@
 
 
 # m4_default(EXP1, EXP2)
-# ----------------------
-# Returns EXP1 if non empty, otherwise EXP2.
+# m4_default_nblank(EXP1, EXP2)
+# -----------------------------
+# Returns EXP1 if not empty/blank, otherwise EXP2.  Expand the result.
+#
+# m4_default is called on hot paths, so inline the contents of m4_ifval,
+# for one less round of expansion.
 m4_define([m4_default],
-[m4_ifval([$1], [$1], [$2])])
+[m4_if([$1], [], [$2], [$1])])
+
+m4_define([m4_default_nblank],
+[m4_ifblank([$1], [$2], [$1])])
+
+
+# m4_default_quoted(EXP1, EXP2)
+# m4_default_nblank_quoted(EXP1, EXP2)
+# ------------------------------------
+# Returns EXP1 if non empty/blank, otherwise EXP2.  Leave the result quoted.
+#
+# For comparison:
+#   m4_define([active], [ACTIVE])
+#   m4_default([active], [default]) => ACTIVE
+#   m4_default([], [active]) => ACTIVE
+#   -m4_default([ ], [active])- => - -
+#   -m4_default_nblank([ ], [active])- => -ACTIVE-
+#   m4_default_quoted([active], [default]) => active
+#   m4_default_quoted([], [active]) => active
+#   -m4_default_quoted([ ], [active])- => - -
+#   -m4_default_nblank_quoted([ ], [active])- => -active-
+#
+# m4_default macro is called on hot paths, so inline the contents of m4_ifval,
+# for one less round of expansion.
+m4_define([m4_default_quoted],
+[m4_if([$1], [], [[$2]], [[$1]])])
+
+m4_define([m4_default_nblank_quoted],
+[m4_ifblank([$1], [[$2]], [[$1]])])
 
 
 # m4_defn(NAME)
 # -------------
-# Unlike to the original, don't tolerate popping something which is
-# undefined.
+# Like the original, except guarantee a warning when using something which is
+# undefined (unlike M4 1.4.x).  This replacement is not a full-featured
+# replacement: if any of the defined macros contain unbalanced quoting, but
+# when pasted together result in a well-quoted string, then only native m4
+# support is able to get it correct.  But that's where quadrigraphs come in
+# handy, if you really need unbalanced quotes inside your macros.
+#
+# This macro is called frequently, so minimize the amount of additional
+# expansions by skipping m4_ifndef.  Better yet, if __m4_version__ exists,
+# (added in M4 1.6), then let m4 do the job for us (see m4_init).
 m4_define([m4_defn],
-[m4_ifndef([$1],
-	   [m4_fatal([$0: undefined macro: $1])])dnl
-m4_builtin([defn], $@)])
+[m4_if([$#], [0], [[$0]],
+       [$#], [1], [m4_ifdef([$1], [_m4_defn([$1])],
+			    [m4_fatal([$0: undefined macro: $1])])],
+       [m4_map_args([$0], $@)])])
 
 
-# _m4_dumpdefs_up(NAME)
-# ---------------------
-m4_define([_m4_dumpdefs_up],
-[m4_ifdef([$1],
-	  [m4_pushdef([_m4_dumpdefs], m4_defn([$1]))dnl
-m4_dumpdef([$1])dnl
-m4_popdef([$1])dnl
-_m4_dumpdefs_up([$1])])])
+# m4_dumpdef(NAME...)
+# -------------------
+# In m4 1.4.x, dumpdef writes to the current debugfile, rather than
+# stderr.  This in turn royally confuses autom4te; so we follow the
+# lead of newer m4 and always dump to stderr.  Unlike the original,
+# this version requires an argument, since there is no convenient way
+# in m4 1.4.x to grab the names of all defined macros.  Newer m4
+# always dumps to stderr, regardless of the current debugfile; it also
+# provides m4symbols as a way to grab all current macro names.  But
+# dumpdefs is not frequently called, so we don't need to worry about
+# conditionally using these newer features.  Also, this version
+# doesn't sort multiple arguments.
+#
+# If we detect m4 1.6 or newer, then provide an alternate definition,
+# installed during m4_init, that allows builtins through.
+# Unfortunately, there is no nice way in m4 1.4.x to dump builtins.
+m4_define([m4_dumpdef],
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+       [$#], [1], [m4_ifdef([$1], [m4_errprintn(
+  [$1:	]m4_dquote(_m4_defn([$1])))], [m4_fatal([$0: undefined macro: $1])])],
+       [m4_map_args([$0], $@)])])
+
+m4_define([_m4_dumpdef],
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+       [$#], [1], [m4_builtin([dumpdef], [$1])],
+       [m4_map_args_sep([m4_builtin([dumpdef],], [)], [], $@)])])
 
 
-# _m4_dumpdefs_down(NAME)
-# -----------------------
-m4_define([_m4_dumpdefs_down],
-[m4_ifdef([_m4_dumpdefs],
-	  [m4_pushdef([$1], m4_defn([_m4_dumpdefs]))dnl
-m4_popdef([_m4_dumpdefs])dnl
-_m4_dumpdefs_down([$1])])])
-
-
-# m4_dumpdefs(NAME)
-# -----------------
+# m4_dumpdefs(NAME...)
+# --------------------
 # Similar to `m4_dumpdef(NAME)', but if NAME was m4_pushdef'ed, display its
-# value stack (most recent displayed first).
+# value stack (most recent displayed first).  Also, this version silently
+# ignores undefined macros, rather than erroring out.
+#
+# This macro cheats, because it relies on the current definition of NAME
+# while the second argument of m4_stack_foreach_lifo is evaluated (which
+# would be undefined according to the API).
 m4_define([m4_dumpdefs],
-[_m4_dumpdefs_up([$1])dnl
-_m4_dumpdefs_down([$1])])
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+       [$#], [1], [m4_stack_foreach_lifo([$1], [m4_dumpdef([$1])m4_ignore])],
+       [m4_map_args([$0], $@)])])
+
+# m4_esyscmd_s(COMMAND)
+# ---------------------
+# Like m4_esyscmd, except strip any trailing newlines, thus behaving
+# more like shell command substitution.
+m4_define([m4_esyscmd_s],
+[m4_chomp_all(m4_esyscmd([$1]))])
 
 
 # m4_popdef(NAME)
 # ---------------
-# Unlike to the original, don't tolerate popping something which is
-# undefined.
+# Like the original, except guarantee a warning when using something which is
+# undefined (unlike M4 1.4.x).
+#
+# This macro is called frequently, so minimize the amount of additional
+# expansions by skipping m4_ifndef.  Better yet, if __m4_version__ exists,
+# (added in M4 1.6), then let m4 do the job for us (see m4_init).
 m4_define([m4_popdef],
-[m4_ifndef([$1],
-	   [m4_fatal([$0: undefined macro: $1])])dnl
-m4_builtin([popdef], $@)])
+[m4_if([$#], [0], [[$0]],
+       [$#], [1], [m4_ifdef([$1], [_m4_popdef([$1])],
+			    [m4_fatal([$0: undefined macro: $1])])],
+       [m4_map_args([$0], $@)])])
+
+
+# m4_shiftn(N, ...)
+# -----------------
+# Returns ... shifted N times.  Useful for recursive "varargs" constructs.
+#
+# Autoconf does not use this macro, because it is inherently slower than
+# calling the common cases of m4_shift2 or m4_shift3 directly.  But it
+# might as well be fast for other clients, such as Libtool.  One way to
+# do this is to expand $@ only once in _m4_shiftn (otherwise, for long
+# lists, the expansion of m4_if takes twice as much memory as what the
+# list itself occupies, only to throw away the unused branch).  The end
+# result is strictly equivalent to
+#   m4_if([$1], 1, [m4_shift(,m4_shift(m4_shift($@)))],
+#         [_m4_shiftn(m4_decr([$1]), m4_shift(m4_shift($@)))])
+# but with the final `m4_shift(m4_shift($@)))' shared between the two
+# paths.  The first leg uses a no-op m4_shift(,$@) to balance out the ().
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_shiftn],
+[m4_assert(0 < $1 && $1 < $#)_$0($@)])
+
+m4_define([_m4_shiftn],
+[m4_if([$1], 1, [m4_shift(],
+       [$0(m4_decr([$1])]), m4_shift(m4_shift($@)))])
+
+# m4_shift2(...)
+# m4_shift3(...)
+# --------------
+# Returns ... shifted twice, and three times.  Faster than m4_shiftn.
+m4_define([m4_shift2], [m4_shift(m4_shift($@))])
+m4_define([m4_shift3], [m4_shift(m4_shift(m4_shift($@)))])
+
+# _m4_shift2(...)
+# _m4_shift3(...)
+# ---------------
+# Like m4_shift2 or m4_shift3, except include a leading comma unless shifting
+# consumes all arguments.  Why?  Because in recursion, it is nice to
+# distinguish between 1 element left and 0 elements left, based on how many
+# arguments this shift expands to.
+m4_define([_m4_shift2],
+[m4_if([$#], [2], [],
+       [, m4_shift(m4_shift($@))])])
+m4_define([_m4_shift3],
+[m4_if([$#], [3], [],
+       [, m4_shift(m4_shift(m4_shift($@)))])])
+
+
+# m4_undefine(NAME)
+# -----------------
+# Like the original, except guarantee a warning when using something which is
+# undefined (unlike M4 1.4.x).
+#
+# This macro is called frequently, so minimize the amount of additional
+# expansions by skipping m4_ifndef.  Better yet, if __m4_version__ exists,
+# (added in M4 1.6), then let m4 do the job for us (see m4_init).
+m4_define([m4_undefine],
+[m4_if([$#], [0], [[$0]],
+       [$#], [1], [m4_ifdef([$1], [_m4_undefine([$1])],
+			    [m4_fatal([$0: undefined macro: $1])])],
+       [m4_map_args([$0], $@)])])
+
+# _m4_wrap(PRE, POST)
+# -------------------
+# Helper macro for m4_wrap and m4_wrap_lifo.  Allows nested calls to
+# m4_wrap within wrapped text.  Use _m4_defn and _m4_popdef for speed.
+m4_define([_m4_wrap],
+[m4_ifdef([$0_text],
+	  [m4_define([$0_text], [$1]_m4_defn([$0_text])[$2])],
+	  [m4_builtin([m4wrap], [m4_unquote(
+  _m4_defn([$0_text])_m4_popdef([$0_text]))])m4_define([$0_text], [$1$2])])])
+
+# m4_wrap(TEXT)
+# -------------
+# Append TEXT to the list of hooks to be executed at the end of input.
+# Whereas the order of the original may be LIFO in the underlying m4,
+# this version is always FIFO.
+m4_define([m4_wrap],
+[_m4_wrap([], [$1[]])])
+
+# m4_wrap_lifo(TEXT)
+# ------------------
+# Prepend TEXT to the list of hooks to be executed at the end of input.
+# Whereas the order of m4_wrap may be FIFO in the underlying m4, this
+# version is always LIFO.
+m4_define([m4_wrap_lifo],
+[_m4_wrap([$1[]])])
+
+## ------------------------- ##
+## 7. Quoting manipulation.  ##
+## ------------------------- ##
+
+
+# m4_apply(MACRO, LIST)
+# ---------------------
+# Invoke MACRO, with arguments provided from the quoted list of
+# comma-separated quoted arguments.  If LIST is empty, invoke MACRO
+# without arguments.  The expansion will not be concatenated with
+# subsequent text.
+m4_define([m4_apply],
+[m4_if([$2], [], [$1], [$1($2)])[]])
+
+# _m4_apply(MACRO, LIST)
+# ----------------------
+# Like m4_apply, except do nothing if LIST is empty.
+m4_define([_m4_apply],
+[m4_if([$2], [], [], [$1($2)[]])])
+
+
+# m4_count(ARGS)
+# --------------
+# Return a count of how many ARGS are present.
+m4_define([m4_count], [$#])
+
+
+# m4_curry(MACRO, ARG...)
+# -----------------------
+# Perform argument currying.  The expansion of this macro is another
+# macro that takes exactly one argument, appends it to the end of the
+# original ARG list, then invokes MACRO.  For example:
+#   m4_curry([m4_curry], [m4_reverse], [1])([2])([3]) => 3, 2, 1
+# Not quite as practical as m4_incr, but you could also do:
+#   m4_define([add], [m4_eval(([$1]) + ([$2]))])
+#   m4_define([add_one], [m4_curry([add], [1])])
+#   add_one()([2]) => 3
+m4_define([m4_curry], [$1(m4_shift($@,)_$0])
+m4_define([_m4_curry],               [[$1])])
+
+
+# m4_do(STRING, ...)
+# ------------------
+# This macro invokes all its arguments (in sequence, of course).  It is
+# useful for making your macros more structured and readable by dropping
+# unnecessary dnl's and have the macros indented properly.  No concatenation
+# occurs after a STRING; use m4_unquote(m4_join(,STRING)) for that.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_do],
+[m4_if([$#], 0, [],
+       [$#], 1, [$1[]],
+       [$1[]$0(m4_shift($@))])])
+
+
+# m4_dquote(ARGS)
+# ---------------
+# Return ARGS as a quoted list of quoted arguments.
+m4_define([m4_dquote],  [[$@]])
+
+
+# m4_dquote_elt(ARGS)
+# -------------------
+# Return ARGS as an unquoted list of double-quoted arguments.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_dquote_elt],
+[m4_if([$#], [0], [],
+       [$#], [1], [[[$1]]],
+       [[[$1]],$0(m4_shift($@))])])
+
+
+# m4_echo(ARGS)
+# -------------
+# Return the ARGS, with the same level of quoting.  Whitespace after
+# unquoted commas are consumed.
+m4_define([m4_echo], [$@])
+
+
+# m4_expand(ARG)
+# _m4_expand(ARG)
+# ---------------
+# Return the expansion of ARG as a single string.  Unlike
+# m4_quote($1), this preserves whitespace following single-quoted
+# commas that appear within ARG.  It also deals with shell case
+# statements.
+#
+#   m4_define([active], [ACT, IVE])
+#   m4_define([active2], [[ACT, IVE]])
+#   m4_quote(active, active2)
+#   => ACT,IVE,ACT, IVE
+#   m4_expand([active, active2])
+#   => ACT, IVE, ACT, IVE
+#
+# Unfortunately, due to limitations in m4, ARG must expand to
+# something with balanced quotes (use quadrigraphs to get around
+# this), and should not contain the unlikely delimiters -=<{( or
+# )}>=-.  It is possible to have unbalanced quoted `(' or `)', as well
+# as unbalanced unquoted `)'.  m4_expand can handle unterminated
+# comments or dnl on the final line, at the expense of speed; it also
+# aids in detecting attempts to incorrectly change the current
+# diversion inside ARG.  Meanwhile, _m4_expand is faster but must be
+# given a terminated expansion, and has no safety checks for
+# mis-diverted text.
+#
+# Exploit that extra unquoted () will group unquoted commas and the
+# following whitespace.  m4_bpatsubst can't handle newlines inside $1,
+# and m4_substr strips quoting.  So we (ab)use m4_changequote, using
+# temporary quotes to remove the delimiters that conveniently included
+# the unquoted () that were added prior to the changequote.
+#
+# Thanks to shell case statements, too many people are prone to pass
+# underquoted `)', so we try to detect that by passing a marker as a
+# fourth argument; if the marker is not present, then we assume that
+# we encountered an early `)', and re-expand the first argument, but
+# this time with one more `(' in the second argument and in the
+# open-quote delimiter.  We must also ignore the slop from the
+# previous try.  The final macro is thus half line-noise, half art.
+m4_define([m4_expand],
+[m4_pushdef([m4_divert], _m4_defn([_m4_divert_unsafe]))]dnl
+[m4_pushdef([m4_divert_push], _m4_defn([_m4_divert_unsafe]))]dnl
+[m4_chomp(_$0([$1
+]))_m4_popdef([m4_divert], [m4_divert_push])])
+
+m4_define([_m4_expand], [$0_([$1], [(], -=<{($1)}>=-, [}>=-])])
+
+m4_define([_m4_expand_],
+[m4_if([$4], [}>=-],
+       [m4_changequote([-=<{$2], [)}>=-])$3m4_changequote([, ])],
+       [$0([$1], [($2], -=<{($2$1)}>=-, [}>=-])m4_ignore$2])])
+
+
+# m4_ignore(ARGS)
+# ---------------
+# Expands to nothing.  Useful for conditionally ignoring an arbitrary
+# number of arguments (see _m4_list_cmp for an example).
+m4_define([m4_ignore])
+
+
+# m4_make_list(ARGS)
+# ------------------
+# Similar to m4_dquote, this creates a quoted list of quoted ARGS.  This
+# version is less efficient than m4_dquote, but separates each argument
+# with a comma and newline, rather than just comma, for readability.
+# When developing an m4sugar algorithm, you could temporarily use
+#   m4_pushdef([m4_dquote],m4_defn([m4_make_list]))
+# around your code to make debugging easier.
+m4_define([m4_make_list], [m4_join([,
+], m4_dquote_elt($@))])
+
+
+# m4_noquote(STRING)
+# ------------------
+# Return the result of ignoring all quotes in STRING and invoking the
+# macros it contains.  Among other things, this is useful for enabling
+# macro invocations inside strings with [] blocks (for instance regexps
+# and help-strings).  On the other hand, since all quotes are disabled,
+# any macro expanded during this time that relies on nested [] quoting
+# will likely crash and burn.  This macro is seldom useful; consider
+# m4_unquote or m4_expand instead.
+m4_define([m4_noquote],
+[m4_changequote([-=<{(],[)}>=-])$1-=<{()}>=-m4_changequote([,])])
 
 
 # m4_quote(ARGS)
 # --------------
-# Return ARGS as a single arguments.
+# Return ARGS as a single argument.  Any whitespace after unquoted commas
+# is stripped.  There is always output, even when there were no arguments.
 #
 # It is important to realize the difference between `m4_quote(exp)' and
 # `[exp]': in the first case you obtain the quoted *result* of the
 # expansion of EXP, while in the latter you just obtain the string
 # `exp'.
 m4_define([m4_quote],  [[$*]])
-m4_define([m4_dquote],  [[$@]])
 
 
-# m4_noquote(STRING)
-# ------------------
-# Return the result of ignoring all quotes in STRING and invoking the
-# macros it contains.  Amongst other things useful for enabling macro
-# invocations inside strings with [] blocks (for instance regexps and
-# help-strings).
-m4_define([m4_noquote],
-[m4_changequote(-=<{,}>=-)$1-=<{}>=-m4_changequote([,])])
+# _m4_quote(ARGS)
+# ---------------
+# Like m4_quote, except that when there are no arguments, there is no
+# output.  For conditional scenarios (such as passing _m4_quote as the
+# macro name in m4_mapall), this feature can be used to distinguish between
+# one argument of the empty string vs. no arguments.  However, in the
+# normal case with arguments present, this is less efficient than m4_quote.
+m4_define([_m4_quote],
+[m4_if([$#], [0], [], [[$*]])])
 
 
-# m4_shiftn(N, ...)
-# -----------------
-# Returns ... shifted N times.  Useful for recursive "varargs" constructs.
-m4_define([m4_shiftn],
-[m4_assert(($1 >= 0) && ($# > $1))dnl
-_m4_shiftn($@)])
-
-m4_define([_m4_shiftn],
-[m4_if([$1], 0,
-       [m4_shift($@)],
-       [_m4_shiftn(m4_eval([$1]-1), m4_shift(m4_shift($@)))])])
+# m4_reverse(ARGS)
+# ----------------
+# Output ARGS in reverse order.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_reverse],
+[m4_if([$#], [0], [], [$#], [1], [[$1]],
+       [$0(m4_shift($@)), [$1]])])
 
 
-# m4_undefine(NAME)
-# -----------------
-# Unlike to the original, don't tolerate undefining something which is
-# undefined.
-m4_define([m4_undefine],
-[m4_ifndef([$1],
-	   [m4_fatal([$0: undefined macro: $1])])dnl
-m4_builtin([undefine], $@)])
+# m4_unquote(ARGS)
+# ----------------
+# Remove one layer of quotes from each ARG, performing one level of
+# expansion.  For one argument, m4_unquote([arg]) is more efficient than
+# m4_do([arg]), but for multiple arguments, the difference is that
+# m4_unquote separates arguments with commas while m4_do concatenates.
+# Follow this macro with [] if concatenation with subsequent text is
+# undesired.
+m4_define([m4_unquote], [$*])
 
 
 ## -------------------------- ##
-## 7. Implementing m4 loops.  ##
+## 8. Implementing m4 loops.  ##
 ## -------------------------- ##
 
 
 # m4_for(VARIABLE, FIRST, LAST, [STEP = +/-1], EXPRESSION)
 # --------------------------------------------------------
-# Expand EXPRESSION defining VARIABLE to FROM, FROM + 1, ..., TO.
-# Both limits are included, and bounds are checked for consistency.
+# Expand EXPRESSION defining VARIABLE to FROM, FROM + 1, ..., TO with
+# increments of STEP.  Both limits are included, and bounds are
+# checked for consistency.  The algorithm is robust to indirect
+# VARIABLE names.  Changing VARIABLE inside EXPRESSION will not impact
+# the number of iterations.
+#
+# Uses _m4_defn for speed, and avoid dnl in the macro body.  Factor
+# the _m4_for call so that EXPRESSION is only parsed once.
 m4_define([m4_for],
-[m4_case(m4_sign(m4_eval($3 - $2)),
-	 1, [m4_assert(m4_sign(m4_default($4, 1)) == 1)],
-	-1, [m4_assert(m4_sign(m4_default($4, -1)) == -1)])dnl
-m4_pushdef([$1], [$2])dnl
-m4_if(m4_eval([$3 > $2]), 1,
-      [_m4_for([$1], [$3], m4_default([$4], 1), [$5])],
-      [_m4_for([$1], [$3], m4_default([$4], -1), [$5])])dnl
-m4_popdef([$1])])
+[m4_pushdef([$1], m4_eval([$2]))]dnl
+[m4_cond([m4_eval(([$3]) > ([$2]))], 1,
+	   [m4_pushdef([_m4_step], m4_eval(m4_default_quoted([$4],
+	      1)))m4_assert(_m4_step > 0)_$0(_m4_defn([$1]),
+  m4_eval((([$3]) - ([$2])) / _m4_step * _m4_step + ([$2])), _m4_step,],
+	 [m4_eval(([$3]) < ([$2]))], 1,
+	   [m4_pushdef([_m4_step], m4_eval(m4_default_quoted([$4],
+	      -1)))m4_assert(_m4_step < 0)_$0(_m4_defn([$1]),
+  m4_eval((([$2]) - ([$3])) / -(_m4_step) * _m4_step + ([$2])), _m4_step,],
+	 [m4_pushdef([_m4_step])_$0(_m4_defn([$1]), _m4_defn([$1]), 0,])]dnl
+[[m4_define([$1],], [)$5])m4_popdef([_m4_step], [$1])])
 
-
-# _m4_for(VARIABLE, FIRST, LAST, STEP, EXPRESSION)
-# ------------------------------------------------
-# Core of the loop, no consistency checks.
+# _m4_for(COUNT, LAST, STEP, PRE, POST)
+# -------------------------------------
+# Core of the loop, no consistency checks, all arguments are plain
+# numbers.  Expand PRE[COUNT]POST, then alter COUNT by STEP and
+# iterate if COUNT is not LAST.
 m4_define([_m4_for],
-[$4[]dnl
-m4_if($1, [$2], [],
-      [m4_define([$1], m4_eval($1+[$3]))_m4_for([$1], [$2], [$3], [$4])])])
+[$4[$1]$5[]m4_if([$1], [$2], [],
+		 [$0(m4_eval([$1 + $3]), [$2], [$3], [$4], [$5])])])
 
 
 # Implementing `foreach' loops in m4 is much more tricky than it may
-# seem.  Actually, the example of a `foreach' loop in the m4
-# documentation is wrong: it does not quote the arguments properly,
-# which leads to undesirable expansions.
-#
-# The example in the documentation is:
+# seem.  For example, the old M4 1.4.4 manual had an incorrect example,
+# which looked like this (when translated to m4sugar):
 #
 # | # foreach(VAR, (LIST), STMT)
 # | m4_define([foreach],
-# |        [m4_pushdef([$1])_foreach([$1], [$2], [$3])m4_popdef([$1])])
+# |   [m4_pushdef([$1])_foreach([$1], [$2], [$3])m4_popdef([$1])])
 # | m4_define([_arg1], [$1])
 # | m4_define([_foreach],
-# |	       [m4_if([$2], [()], ,
-# |		     [m4_define([$1], _arg1$2)$3[]_foreach([$1],
-# |                                                        (shift$2),
-# |                                                        [$3])])])
+# |   [m4_if([$2], [()], ,
+# |     [m4_define([$1], _arg1$2)$3[]_foreach([$1], (m4_shift$2), [$3])])])
 #
 # But then if you run
 #
@@ -633,9 +1080,7 @@
 # | m4_define([_arg1], [[$1]])
 # | m4_define([_foreach],
 # |  [m4_if($2, [()], ,
-# |	     [m4_define([$1], [_arg1$2])$3[]_foreach([$1],
-# |                                                 [(shift$2)],
-# |                                                 [$3])])])
+# |    [m4_define([$1], [_arg1$2])$3[]_foreach([$1], [(m4_shift$2)], [$3])])])
 #
 # which this time answers
 #
@@ -658,14 +1103,25 @@
 # | m4_define([_arg1], [$1])
 # | m4_define([_foreach],
 # |  [m4_if($2, [], ,
-# |	     [m4_define([$1], [_arg1($2)])$3[]_foreach([$1],
-# |                                                   [shift($2)],
-# |                                                   [$3])])])
+# |    [m4_define([$1], [_arg1($2)])$3[]_foreach([$1], [m4_shift($2)], [$3])])])
 #
 #
 # Now, just replace the `$2' with `m4_quote($2)' in the outer `m4_if'
-# to improve robustness, and you come up with a quite satisfactory
-# implementation.
+# to improve robustness, and you come up with a nice implementation
+# that doesn't require extra parentheses in the user's LIST.
+#
+# But wait -  now the algorithm is quadratic, because every recursion of
+# the algorithm keeps the entire LIST and merely adds another m4_shift to
+# the quoted text.  If the user has a lot of elements in LIST, you can
+# bring the system to its knees with the memory m4 then requires, or trip
+# the m4 --nesting-limit recursion factor.  The only way to avoid
+# quadratic growth is ensure m4_shift is expanded prior to the recursion.
+# Hence the design below.
+#
+# The M4 manual now includes a chapter devoted to this issue, with
+# the lessons learned from m4sugar.  And still, this design is only
+# optimal for M4 1.6; see foreach.m4 for yet more comments on why
+# M4 1.4.x uses yet another implementation.
 
 
 # m4_foreach(VARIABLE, LIST, EXPRESSION)
@@ -686,19 +1142,36 @@
 #
 #      | m4_foreach(Var, [[[active]], [[active]]], [-Var-])
 #     => -active--active-
+#
+# This macro is called frequently, so avoid extra expansions such as
+# m4_ifval and dnl.  Also, since $2 might be quite large, try to use it
+# as little as possible in _m4_foreach; each extra use requires that much
+# more memory for expansion.  So, rather than directly compare $2 against
+# [] and use m4_car/m4_cdr for recursion, we instead unbox the list (which
+# requires swapping the argument order in the helper), insert an ignored
+# third argument, and use m4_shift3 to detect when recursion is complete,
+# at which point this looks very much like m4_map_args.
 m4_define([m4_foreach],
-[m4_pushdef([$1])_m4_foreach($@)m4_popdef([$1])])
+[m4_if([$2], [], [],
+       [m4_pushdef([$1])_$0([m4_define([$1],], [)$3], [],
+  $2)m4_popdef([$1])])])
 
+# _m4_foreach(PRE, POST, IGNORED, ARG...)
+# ---------------------------------------
+# Form the common basis of the m4_foreach and m4_map macros.  For each
+# ARG, expand PRE[ARG]POST[].  The IGNORED argument makes recursion
+# easier, and must be supplied rather than implicit.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
 m4_define([_m4_foreach],
-[m4_ifval([$2],
-	  [m4_define([$1], m4_car($2))$3[]dnl
-_m4_foreach([$1], m4_cdr($2), [$3])])])
+[m4_if([$#], [3], [],
+       [$1[$4]$2[]$0([$1], [$2], m4_shift3($@))])])
 
 
 # m4_foreach_w(VARIABLE, LIST, EXPRESSION)
 # ----------------------------------------
-#
-# Like m4_foreach, but the list is whitespace separated.
+# Like m4_foreach, but the list is whitespace separated.  Depending on
+# EXPRESSION, it may be more efficient to use m4_map_args_w.
 #
 # This macro is robust to active symbols:
 #    m4_foreach_w([Var], [ active
@@ -706,54 +1179,258 @@
 #    ive  ], [-Var-])end
 #    => -active--b--active-end
 #
+# This used to use a slower implementation based on m4_foreach:
+#   m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])
 m4_define([m4_foreach_w],
-[m4_foreach([$1], m4_split(m4_normalize([$2])), [$3])])
+[m4_pushdef([$1])m4_map_args_w([$2],
+  [m4_define([$1],], [)$3])m4_popdef([$1])])
+
+
+# m4_map(MACRO, LIST)
+# m4_mapall(MACRO, LIST)
+# ----------------------
+# Invoke MACRO($1), MACRO($2) etc. where $1, $2... are the elements of
+# LIST.  $1, $2... must in turn be lists, appropriate for m4_apply.
+# If LIST contains an empty sublist, m4_map skips the expansion of
+# MACRO, while m4_mapall expands MACRO with no arguments.
+#
+# Since LIST may be quite large, we want to minimize how often it
+# appears in the expansion.  Rather than use m4_car/m4_cdr iteration,
+# we unbox the list, and use _m4_foreach for iteration.  For m4_map,
+# an empty list behaves like an empty sublist and gets ignored; for
+# m4_mapall, we must special-case the empty list.
+m4_define([m4_map],
+[_m4_foreach([_m4_apply([$1],], [)], [], $2)])
+
+m4_define([m4_mapall],
+[m4_if([$2], [], [],
+       [_m4_foreach([m4_apply([$1],], [)], [], $2)])])
+
+
+# m4_map_sep(MACRO, [SEPARATOR], LIST)
+# m4_mapall_sep(MACRO, [SEPARATOR], LIST)
+# ---------------------------------------
+# Invoke MACRO($1), SEPARATOR, MACRO($2), ..., MACRO($N) where $1,
+# $2... $N are the elements of LIST, and are in turn lists appropriate
+# for m4_apply.  SEPARATOR is expanded, in order to allow the creation
+# of a list of arguments by using a single-quoted comma as the
+# separator.  For each empty sublist, m4_map_sep skips the expansion
+# of MACRO and SEPARATOR, while m4_mapall_sep expands MACRO with no
+# arguments.
+#
+# For m4_mapall_sep, merely expand the first iteration without the
+# separator, then include separator as part of subsequent recursion;
+# but avoid extra expansion of LIST's side-effects via a helper macro.
+# For m4_map_sep, things are trickier - we don't know if the first
+# list element is an empty sublist, so we must define a self-modifying
+# helper macro and use that as the separator instead.
+m4_define([m4_map_sep],
+[m4_pushdef([m4_Sep], [m4_define([m4_Sep], _m4_defn([m4_unquote]))])]dnl
+[_m4_foreach([_m4_apply([m4_Sep([$2])[]$1],], [)], [], $3)m4_popdef([m4_Sep])])
+
+m4_define([m4_mapall_sep],
+[m4_if([$3], [], [], [_$0([$1], [$2], $3)])])
+
+m4_define([_m4_mapall_sep],
+[m4_apply([$1], [$3])_m4_foreach([m4_apply([$2[]$1],], [)], m4_shift2($@))])
+
+# m4_map_args(EXPRESSION, ARG...)
+# -------------------------------
+# Expand EXPRESSION([ARG]) for each argument.  More efficient than
+#   m4_foreach([var], [ARG...], [EXPRESSION(m4_defn([var]))])
+# Shorthand for m4_map_args_sep([EXPRESSION(], [)], [], ARG...).
+m4_define([m4_map_args],
+[m4_if([$#], [0], [m4_fatal([$0: too few arguments: $#])],
+       [$#], [1], [],
+       [$#], [2], [$1([$2])[]],
+       [_m4_foreach([$1(], [)], $@)])])
+
+
+# m4_map_args_pair(EXPRESSION, [END-EXPR = EXPRESSION], ARG...)
+# -------------------------------------------------------------
+# Perform a pairwise grouping of consecutive ARGs, by expanding
+# EXPRESSION([ARG1], [ARG2]).  If there are an odd number of ARGs, the
+# final argument is expanded with END-EXPR([ARGn]).
+#
+# For example:
+#   m4_define([show], [($*)m4_newline])dnl
+#   m4_map_args_pair([show], [], [a], [b], [c], [d], [e])dnl
+#   => (a,b)
+#   => (c,d)
+#   => (e)
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_map_args_pair],
+[m4_if([$#], [0], [m4_fatal([$0: too few arguments: $#])],
+       [$#], [1], [m4_fatal([$0: too few arguments: $#: $1])],
+       [$#], [2], [],
+       [$#], [3], [m4_default([$2], [$1])([$3])[]],
+       [$#], [4], [$1([$3], [$4])[]],
+       [$1([$3], [$4])[]$0([$1], [$2], m4_shift(m4_shift3($@)))])])
+
+
+# m4_map_args_sep([PRE], [POST], [SEP], ARG...)
+# ---------------------------------------------
+# Expand PRE[ARG]POST for each argument, with SEP between arguments.
+m4_define([m4_map_args_sep],
+[m4_if([$#], [0], [m4_fatal([$0: too few arguments: $#])],
+       [$#], [1], [],
+       [$#], [2], [],
+       [$#], [3], [],
+       [$#], [4], [$1[$4]$2[]],
+       [$1[$4]$2[]_m4_foreach([$3[]$1], [$2], m4_shift3($@))])])
+
+
+# m4_map_args_w(STRING, [PRE], [POST], [SEP])
+# -------------------------------------------
+# Perform the expansion of PRE[word]POST[] for each word in STRING
+# separated by whitespace.  More efficient than:
+#   m4_foreach_w([var], [STRING], [PRE[]m4_defn([var])POST])
+# Additionally, expand SEP between words.
+#
+# As long as we have to use m4_bpatsubst to split the string, we might
+# as well make it also apply PRE and POST; this avoids iteration
+# altogether.  But we must be careful of any \ in PRE or POST.
+# _m4_strip returns a quoted string, but that's okay, since it also
+# supplies an empty leading and trailing argument due to our
+# intentional whitespace around STRING.  We use m4_substr to strip the
+# empty elements and remove the extra layer of quoting.
+m4_define([m4_map_args_w],
+[_$0(_m4_split([ ]m4_flatten([$1])[ ], [[	 ]+],
+	       m4_if(m4_index([$2$3$4], [\]), [-1], [[$3[]$4[]$2]],
+		     [m4_bpatsubst([[$3[]$4[]$2]], [\\], [\\\\])])),
+     m4_len([[]$3[]$4]), m4_len([$4[]$2[]]))])
+
+m4_define([_m4_map_args_w],
+[m4_substr([$1], [$2], m4_eval(m4_len([$1]) - [$2] - [$3]))])
+
+
+# m4_stack_foreach(MACRO, FUNC)
+# m4_stack_foreach_lifo(MACRO, FUNC)
+# ----------------------------------
+# Pass each stacked definition of MACRO to the one-argument macro FUNC.
+# m4_stack_foreach proceeds in FIFO order, while m4_stack_foreach_lifo
+# processes the topmost definitions first.  In addition, FUNC should
+# not push or pop definitions of MACRO, and should not expect anything about
+# the active definition of MACRO (it will not be the topmost, and may not
+# be the one passed to FUNC either).
+#
+# Some macros simply can't be examined with this method: namely,
+# anything involved in the implementation of _m4_stack_reverse.
+m4_define([m4_stack_foreach],
+[_m4_stack_reverse([$1], [m4_tmp-$1])]dnl
+[_m4_stack_reverse([m4_tmp-$1], [$1], [$2(_m4_defn([m4_tmp-$1]))])])
+
+m4_define([m4_stack_foreach_lifo],
+[_m4_stack_reverse([$1], [m4_tmp-$1], [$2(_m4_defn([m4_tmp-$1]))])]dnl
+[_m4_stack_reverse([m4_tmp-$1], [$1])])
+
+# m4_stack_foreach_sep(MACRO, [PRE], [POST], [SEP])
+# m4_stack_foreach_sep_lifo(MACRO, [PRE], [POST], [SEP])
+# ------------------------------------------------------
+# Similar to m4_stack_foreach and m4_stack_foreach_lifo, in that every
+# definition of a pushdef stack will be visited.  But rather than
+# passing the definition as a single argument to a macro, this variant
+# expands the concatenation of PRE[]definition[]POST, and expands SEP
+# between consecutive expansions.  Note that m4_stack_foreach([a], [b])
+# is equivalent to m4_stack_foreach_sep([a], [b(], [)]).
+m4_define([m4_stack_foreach_sep],
+[_m4_stack_reverse([$1], [m4_tmp-$1])]dnl
+[_m4_stack_reverse([m4_tmp-$1], [$1], [$2[]_m4_defn([m4_tmp-$1])$3], [$4[]])])
+
+m4_define([m4_stack_foreach_sep_lifo],
+[_m4_stack_reverse([$1], [m4_tmp-$1], [$2[]_m4_defn([m4_tmp-$1])$3], [$4[]])]dnl
+[_m4_stack_reverse([m4_tmp-$1], [$1])])
+
+
+# _m4_stack_reverse(OLD, NEW, [ACTION], [SEP])
+# --------------------------------------------
+# A recursive worker for pushdef stack manipulation.  Destructively
+# copy the OLD stack into the NEW, and expanding ACTION for each
+# iteration.  After the first iteration, SEP is promoted to the front
+# of ACTION (note that SEP should include a trailing [] if it is to
+# avoid interfering with ACTION).  The current definition is examined
+# after the NEW has been pushed but before OLD has been popped; this
+# order is important, as ACTION is permitted to operate on either
+# _m4_defn([OLD]) or _m4_defn([NEW]).  Since the operation is
+# destructive, this macro is generally used twice, with a temporary
+# macro name holding the swapped copy.
+m4_define([_m4_stack_reverse],
+[m4_ifdef([$1], [m4_pushdef([$2],
+  _m4_defn([$1]))$3[]_m4_popdef([$1])$0([$1], [$2], [$4$3])])])
 
 
 
 ## --------------------------- ##
-## 8. More diversion support.  ##
+## 9. More diversion support.  ##
 ## --------------------------- ##
 
 
-# _m4_divert(DIVERSION-NAME or NUMBER)
-# ------------------------------------
+# m4_cleardivert(DIVERSION-NAME...)
+# ---------------------------------
+# Discard any text in DIVERSION-NAME.
+#
+# This works even inside m4_expand.
+m4_define([m4_cleardivert],
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+       [_m4_divert_raw([-1])m4_undivert($@)_m4_divert_raw(
+	 _m4_divert(_m4_defn([_m4_divert_diversion]), [-]))])])
+
+
+# _m4_divert(DIVERSION-NAME or NUMBER, [NOWARN])
+# ----------------------------------------------
 # If DIVERSION-NAME is the name of a diversion, return its number,
-# otherwise if it is a NUMBER return it.
+# otherwise if it is a NUMBER return it.  Issue a warning about
+# the use of a number instead of a name, unless NOWARN is provided.
 m4_define([_m4_divert],
 [m4_ifdef([_m4_divert($1)],
 	  [m4_indir([_m4_divert($1)])],
-	  [$1])])
+	  [m4_if([$2], [], [m4_warn([syntax],
+	     [prefer named diversions])])$1])])
 
 # KILL is only used to suppress output.
 m4_define([_m4_divert(KILL)],           -1)
 
+# The empty diversion name is a synonym for 0.
+m4_define([_m4_divert()],                0)
 
-# _m4_divert_n_stack
-# ------------------
-# Print m4_divert_stack with newline prepended, if it's nonempty.
-m4_define([_m4_divert_n_stack],
-[m4_ifdef([m4_divert_stack], [
-m4_defn([m4_divert_stack])])])
+
+# m4_divert_stack
+# ---------------
+# Print the diversion stack, if it's nonempty.  The caller is
+# responsible for any leading or trailing newline.
+m4_define([m4_divert_stack],
+[m4_stack_foreach_sep_lifo([_m4_divert_stack], [], [], [
+])])
+
+
+# m4_divert_stack_push(MACRO-NAME, DIVERSION-NAME)
+# ------------------------------------------------
+# Form an entry of the diversion stack from caller MACRO-NAME and
+# entering DIVERSION-NAME and push it.
+m4_define([m4_divert_stack_push],
+[m4_pushdef([_m4_divert_stack], m4_location[: $1: $2])])
 
 
 # m4_divert(DIVERSION-NAME)
 # -------------------------
 # Change the diversion stream to DIVERSION-NAME.
 m4_define([m4_divert],
-[m4_define([m4_divert_stack], m4_location[: $0: $1]_m4_divert_n_stack)dnl
-m4_builtin([divert], _m4_divert([$1]))dnl
-])
+[m4_popdef([_m4_divert_stack])]dnl
+[m4_define([_m4_divert_diversion], [$1])]dnl
+[m4_divert_stack_push([$0], [$1])]dnl
+[_m4_divert_raw(_m4_divert([$1]))])
 
 
-# m4_divert_push(DIVERSION-NAME)
-# ------------------------------
+# m4_divert_push(DIVERSION-NAME, [NOWARN])
+# ----------------------------------------
 # Change the diversion stream to DIVERSION-NAME, while stacking old values.
+# For internal use only: if NOWARN is not empty, DIVERSION-NAME can be a
+# number instead of a name.
 m4_define([m4_divert_push],
-[m4_pushdef([m4_divert_stack], m4_location[: $0: $1]_m4_divert_n_stack)dnl
-m4_pushdef([_m4_divert_diversion], [$1])dnl
-m4_builtin([divert], _m4_divert([$1]))dnl
-])
+[m4_divert_stack_push([$0], [$1])]dnl
+[m4_pushdef([_m4_divert_diversion], [$1])]dnl
+[_m4_divert_raw(_m4_divert([$1], [$2]))])
 
 
 # m4_divert_pop([DIVERSION-NAME])
@@ -762,18 +1439,14 @@
 # If specified, verify we left DIVERSION-NAME.
 # When we pop the last value from the stack, we divert to -1.
 m4_define([m4_divert_pop],
-[m4_ifndef([_m4_divert_diversion],
-           [m4_fatal([too many m4_divert_pop])])dnl
-m4_if([$1], [], [],
-      [$1], m4_defn([_m4_divert_diversion]), [],
-      [m4_fatal([$0($1): diversion mismatch: ]_m4_divert_n_stack)])dnl
-m4_popdef([m4_divert_stack])dnl
-m4_popdef([_m4_divert_diversion])dnl
-m4_builtin([divert],
-	   m4_ifdef([_m4_divert_diversion],
-		    [_m4_divert(m4_defn([_m4_divert_diversion]))],
-		    -1))dnl
-])
+[m4_if([$1], [], [],
+       [$1], _m4_defn([_m4_divert_diversion]), [],
+       [m4_fatal([$0($1): diversion mismatch:
+]m4_divert_stack)])]dnl
+[_m4_popdef([_m4_divert_stack], [_m4_divert_diversion])]dnl
+[m4_ifdef([_m4_divert_diversion], [],
+	   [m4_fatal([too many m4_divert_pop])])]dnl
+[_m4_divert_raw(_m4_divert(_m4_defn([_m4_divert_diversion]), [-]))])
 
 
 # m4_divert_text(DIVERSION-NAME, CONTENT)
@@ -781,30 +1454,41 @@
 # Output CONTENT into DIVERSION-NAME (which may be a number actually).
 # An end of line is appended for free to CONTENT.
 m4_define([m4_divert_text],
-[m4_divert_push([$1])dnl
-$2
-m4_divert_pop([$1])dnl
-])
+[m4_divert_push([$1])$2
+m4_divert_pop([$1])])
 
 
 # m4_divert_once(DIVERSION-NAME, CONTENT)
 # ---------------------------------------
-# Output once CONTENT into DIVERSION-NAME (which may be a number
-# actually).  An end of line is appended for free to CONTENT.
+# Output CONTENT into DIVERSION-NAME once, if not already there.
+# An end of line is appended for free to CONTENT.
 m4_define([m4_divert_once],
 [m4_expand_once([m4_divert_text([$1], [$2])])])
 
 
-# m4_undivert(DIVERSION-NAME)
-# ---------------------------
-# Undivert DIVERSION-NAME.
+# _m4_divert_unsafe(DIVERSION-NAME)
+# ---------------------------------
+# Issue a warning that the attempt to change the current diversion to
+# DIVERSION-NAME is unsafe, because this macro is being expanded
+# during argument collection of m4_expand.
+m4_define([_m4_divert_unsafe],
+[m4_fatal([$0: cannot change diversion to `$1' inside m4_expand])])
+
+
+# m4_undivert(DIVERSION-NAME...)
+# ------------------------------
+# Undivert DIVERSION-NAME.  Unlike the M4 version, this requires at
+# least one DIVERSION-NAME; also, due to support for named diversions,
+# this should not be used to undivert files.
 m4_define([m4_undivert],
-[m4_builtin([undivert], _m4_divert([$1]))])
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+       [$#], [1], [_m4_undivert(_m4_divert([$1]))],
+       [m4_map_args([$0], $@)])])
 
 
-## -------------------------------------------- ##
-## 8. Defining macros with bells and whistles.  ##
-## -------------------------------------------- ##
+## --------------------------------------------- ##
+## 10. Defining macros with bells and whistles.  ##
+## --------------------------------------------- ##
 
 # `m4_defun' is basically `m4_define' but it equips the macro with the
 # needed machinery for `m4_require'.  A macro must be m4_defun'd if
@@ -817,19 +1501,20 @@
 # 1. Implementation of m4_require
 # ===============================
 #
-# Of course m4_defun AC_PROVIDE's the macro, so that a macro which has
+# Of course m4_defun calls m4_provide, so that a macro which has
 # been expanded is not expanded again when m4_require'd, but the
 # difficult part is the proper expansion of macros when they are
 # m4_require'd.
 #
-# The implementation is based on two ideas, (i) using diversions to
+# The implementation is based on three ideas, (i) using diversions to
 # prepare the expansion of the macro and its dependencies (by Franc,ois
-# Pinard), and (ii) expand the most recently m4_require'd macros _after_
-# the previous macros (by Axel Thimm).
+# Pinard), (ii) expand the most recently m4_require'd macros _after_
+# the previous macros (by Axel Thimm), and (iii) track instances of
+# provide before require (by Eric Blake).
 #
 #
-# The first idea: why using diversions?
-# -------------------------------------
+# The first idea: why use diversions?
+# -----------------------------------
 #
 # When a macro requires another, the other macro is expanded in new
 # diversion, GROW.  When the outer macro is fully expanded, we first
@@ -837,12 +1522,12 @@
 # undivert GROW.  To understand why we need several diversions,
 # consider the following example:
 #
-# | m4_defun([TEST1], [Test...REQUIRE([TEST2])1])
-# | m4_defun([TEST2], [Test...REQUIRE([TEST3])2])
+# | m4_defun([TEST1], [Test...m4_require([TEST2])1])
+# | m4_defun([TEST2], [Test...m4_require([TEST3])2])
 # | m4_defun([TEST3], [Test...3])
 #
 # Because m4_require is not required to be first in the outer macros, we
-# must keep the expansions of the various level of m4_require separated.
+# must keep the expansions of the various levels of m4_require separated.
 # Right before executing the epilogue of TEST1, we have:
 #
 #	   GROW - 2: Test...3
@@ -870,10 +1555,10 @@
 # very surprising results in some situations.  Let's consider the
 # following example to explain the bug:
 #
-# | m4_defun([TEST1],  [REQUIRE([TEST2a])REQUIRE([TEST2b])])
+# | m4_defun([TEST1],  [m4_require([TEST2a])m4_require([TEST2b])])
 # | m4_defun([TEST2a], [])
-# | m4_defun([TEST2b], [REQUIRE([TEST3])])
-# | m4_defun([TEST3],  [REQUIRE([TEST2a])])
+# | m4_defun([TEST2b], [m4_require([TEST3])])
+# | m4_defun([TEST3],  [m4_require([TEST2a])])
 # |
 # | AC_INIT
 # | TEST1
@@ -905,14 +1590,14 @@
 # i.e., TEST2a is expanded after TEST3 although the latter required the
 # former.
 #
-# Starting from 2.50, uses an implementation provided by Axel Thimm.
+# Starting from 2.50, we use an implementation provided by Axel Thimm.
 # The idea is simple: the order in which macros are emitted must be the
-# same as the one in which macro are expanded.  (The bug above can
-# indeed be described as: a macro has been AC_PROVIDE'd, but it is
-# emitted after: the lack of correlation between emission and expansion
-# order is guilty).
+# same as the one in which macros are expanded.  (The bug above can
+# indeed be described as: a macro has been m4_provide'd before its
+# dependent, but it is emitted after: the lack of correlation between
+# emission and expansion order is guilty).
 #
-# How to do that?  You keeping the stack of diversions to elaborate the
+# How to do that?  You keep the stack of diversions to elaborate the
 # macros, but each time a macro is fully expanded, emit it immediately.
 #
 # In the example above, when TEST2a is expanded, but it's epilogue is
@@ -959,8 +1644,8 @@
 #	   GROW:
 #	   BODY:     TEST2a; TEST3; TEST2b: TEST1
 #
-# The idea is simple, but the implementation is a bit evolved.  If you
-# are like me, you will want to see the actual functioning of this
+# The idea is simple, but the implementation is a bit involved.  If
+# you are like me, you will want to see the actual functioning of this
 # implementation to be convinced.  The next section gives the full
 # details.
 #
@@ -976,7 +1661,7 @@
 # You should keep the definitions of _m4_defun_pro, _m4_defun_epi, and
 # m4_require at hand to follow the steps.
 #
-# This implements tries not to assume that the current diversion is
+# This implementation tries not to assume that the current diversion is
 # BODY, so as soon as a macro (m4_defun'd) is expanded, we first
 # record the current diversion under the name _m4_divert_dump (denoted
 # DUMP below for short).  This introduces an important difference with
@@ -1011,7 +1696,7 @@
 #   BODY:        empty
 #   GROW - 1:    TEST2a
 #   diversions:  GROW - 1, GROW, BODY |-
-# Than the content of the temporary diversion is moved to DUMP and the
+# Then the content of the temporary diversion is moved to DUMP and the
 # temporary diversion is popped.
 #   DUMP:        BODY
 #   BODY:        TEST2a
@@ -1031,7 +1716,7 @@
 #   BODY:        TEST2a
 #   GROW - 2:    TEST3
 #   diversions:  GROW - 2, GROW - 1, GROW, BODY |-
-# Than the diversion is appended to DUMP, and popped.
+# Then the diversion is appended to DUMP, and popped.
 #   DUMP:        BODY
 #   BODY:        TEST2a; TEST3
 #   diversions:  GROW - 1, GROW, BODY |-
@@ -1059,6 +1744,79 @@
 #   diversions: BODY |-
 #
 #
+# The third idea: track macros provided before they were required
+# ---------------------------------------------------------------
+#
+# Using just the first two ideas, Autoconf 2.50 through 2.63 still had
+# a subtle bug for more than seven years.  Let's consider the
+# following example to explain the bug:
+#
+# | m4_defun([TEST1], [1])
+# | m4_defun([TEST2], [2[]m4_require([TEST1])])
+# | m4_defun([TEST3], [3 TEST1 m4_require([TEST2])])
+# | TEST3
+#
+# After the prologue of TEST3, we are collecting text in GROW with the
+# intent of dumping it in BODY during the epilogue.  Next, we
+# encounter the direct invocation of TEST1, which provides the macro
+# in place in GROW.  From there, we encounter a requirement for TEST2,
+# which must be collected in a new diversion.  While expanding TEST2,
+# we encounter a requirement for TEST1, but since it has already been
+# expanded, the Axel Thimm algorithm states that we can treat it as a
+# no-op.  But that would lead to an end result of `2 3 1', meaning
+# that we have once again output a macro (TEST2) prior to its
+# requirements (TEST1).
+#
+# The problem can only occur if a single defun'd macro first provides,
+# then later indirectly requires, the same macro.  Note that directly
+# expanding then requiring a macro is okay: because the dependency was
+# met, the require phase can be a no-op.  For that matter, the outer
+# macro can even require two helpers, where the first helper expands
+# the macro, and the second helper indirectly requires the macro.
+# Out-of-order expansion is only present if the inner macro is
+# required by something that will be hoisted in front of where the
+# direct expansion occurred.  In other words, we must be careful not
+# to warn on:
+#
+# | m4_defun([TEST4], [4])
+# | m4_defun([TEST5], [5 TEST4 m4_require([TEST4])])
+# | TEST5 => 5 4
+#
+# or even the more complex:
+#
+# | m4_defun([TEST6], [6])
+# | m4_defun([TEST7], [7 TEST6])
+# | m4_defun([TEST8], [8 m4_require([TEST6])])
+# | m4_defun([TEST9], [9 m4_require([TEST8])])
+# | m4_defun([TEST10], [10 m4_require([TEST7]) m4_require([TEST9])])
+# | TEST10 => 7 6 8 9 10
+#
+# So, to detect whether a require was direct or indirect, m4_defun and
+# m4_require track the name of the macro that caused a diversion to be
+# created (using the stack _m4_diverting, coupled with an O(1) lookup
+# _m4_diverting([NAME])), and m4_provide stores the name associated
+# with the diversion at which a macro was provided.  A require call is
+# direct if it occurs within the same diversion where the macro was
+# provided, or if the diversion associated with the providing context
+# has been collected.
+#
+# The implementation of the warning involves tracking the set of
+# macros which have been provided since the start of the outermost
+# defun'd macro (the set is named _m4_provide).  When starting an
+# outermost macro, the set is emptied; when a macro is provided, it is
+# added to the set; when require expands the body of a macro, it is
+# removed from the set; and when a macro is indirectly required, the
+# set is checked.  If a macro is in the set, then it has been provided
+# before it was required, and we satisfy dependencies by expanding the
+# macro as if it had never been provided; in the example given above,
+# this means we now output `1 2 3 1'.  Meanwhile, a warning is issued
+# to inform the user that her macros trigger the bug in older autoconf
+# versions, and that her output file now contains redundant contents
+# (and possibly new problems, if the repeated macro was not
+# idempotent).  Meanwhile, macros defined by m4_defun_once instead of
+# m4_defun are idempotent, avoiding any warning or duplicate output.
+#
+#
 # 2. Keeping track of the expansion stack
 # =======================================
 #
@@ -1071,36 +1829,37 @@
 # performance penalty this is implemented only for m4_defun'd macros,
 # not for define'd macros.
 #
-# The scheme is simplistic: each time we enter an m4_defun'd macros,
-# we prepend its name in m4_expansion_stack, and when we exit the
-# macro, we remove it (thanks to pushdef/popdef).
+# Each time we enter an m4_defun'd macros, we add a definition in
+# _m4_expansion_stack, and when we exit the macro, we remove it (thanks
+# to pushdef/popdef).  m4_stack_foreach is used to print the expansion
+# stack in the rare cases when it's needed.
 #
 # In addition, we want to detect circular m4_require dependencies.
 # Each time we expand a macro FOO we define _m4_expanding(FOO); and
 # m4_require(BAR) simply checks whether _m4_expanding(BAR) is defined.
 
 
-# m4_expansion_stack_push(TEXT)
-# -----------------------------
+# m4_expansion_stack
+# ------------------
+# Expands to the entire contents of the expansion stack.  The caller
+# must supply a trailing newline.  This macro always prints a
+# location; check whether _m4_expansion_stack is defined to filter out
+# the case when no defun'd macro is in force.
+m4_define([m4_expansion_stack],
+[m4_stack_foreach_sep_lifo([_$0], [_$0_entry(], [)
+])m4_location[: the top level]])
+
+# _m4_expansion_stack_entry(MACRO)
+# --------------------------------
+# Format an entry for MACRO found on the expansion stack.
+m4_define([_m4_expansion_stack_entry],
+[_m4_defn([m4_location($1)])[: $1 is expanded from...]])
+
+# m4_expansion_stack_push(MACRO)
+# ------------------------------
+# Form an entry of the expansion stack on entry to MACRO and push it.
 m4_define([m4_expansion_stack_push],
-[m4_pushdef([m4_expansion_stack],
-	    [$1]m4_ifdef([m4_expansion_stack], [
-m4_defn([m4_expansion_stack])]))])
-
-
-# m4_expansion_stack_pop
-# ----------------------
-m4_define([m4_expansion_stack_pop],
-[m4_popdef([m4_expansion_stack])])
-
-
-# m4_expansion_stack_dump
-# -----------------------
-# Dump the expansion stack.
-m4_define([m4_expansion_stack_dump],
-[m4_ifdef([m4_expansion_stack],
-	  [m4_errprintn(m4_defn([m4_expansion_stack]))])dnl
-m4_errprintn(m4_location[: the top level])])
+[m4_pushdef([_m4_expansion_stack], [$1])])
 
 
 # _m4_divert(GROW)
@@ -1125,84 +1884,142 @@
 # _m4_defun_pro(MACRO-NAME)
 # -------------------------
 # The prologue for Autoconf macros.
+#
+# This is called frequently, so minimize the number of macro invocations
+# by avoiding dnl and m4_defn overhead.
 m4_define([_m4_defun_pro],
-[m4_ifndef([m4_expansion_stack], [_m4_defun_pro_outer[]])dnl
-m4_expansion_stack_push(m4_defn([m4_location($1)])[: $1 is expanded from...])dnl
-m4_pushdef([_m4_expanding($1)])dnl
-])
+[m4_ifdef([_m4_expansion_stack], [], [_m4_defun_pro_outer([$1])])]dnl
+[m4_expansion_stack_push([$1])m4_pushdef([_m4_expanding($1)])])
 
 m4_define([_m4_defun_pro_outer],
-[m4_copy([_m4_divert_diversion], [_m4_divert_dump])dnl
-m4_divert_push([GROW])dnl
-])
+[m4_set_delete([_m4_provide])]dnl
+[m4_pushdef([_m4_diverting([$1])])m4_pushdef([_m4_diverting], [$1])]dnl
+[m4_pushdef([_m4_divert_dump], m4_divnum)m4_divert_push([GROW])])
 
 # _m4_defun_epi(MACRO-NAME)
 # -------------------------
 # The Epilogue for Autoconf macros.  MACRO-NAME only helps tracing
 # the PRO/EPI pairs.
+#
+# This is called frequently, so minimize the number of macro invocations
+# by avoiding dnl and m4_popdef overhead.
 m4_define([_m4_defun_epi],
-[m4_popdef([_m4_expanding($1)])dnl
-m4_expansion_stack_pop()dnl
-m4_ifndef([m4_expansion_stack], [_m4_defun_epi_outer[]])dnl
-m4_provide([$1])dnl
-])
+[_m4_popdef([_m4_expanding($1)], [_m4_expansion_stack])]dnl
+[m4_ifdef([_m4_expansion_stack], [], [_m4_defun_epi_outer([$1])])]dnl
+[m4_provide([$1])])
 
 m4_define([_m4_defun_epi_outer],
-[m4_undefine([_m4_divert_dump])dnl
-m4_divert_pop([GROW])dnl
-m4_undivert([GROW])dnl
-])
+[_m4_popdef([_m4_divert_dump], [_m4_diverting([$1])], [_m4_diverting])]dnl
+[m4_divert_pop([GROW])m4_undivert([GROW])])
 
 
-# m4_defun(NAME, EXPANSION)
-# -------------------------
-# Define a macro which automatically provides itself.  Add machinery
-# so the macro automatically switches expansion to the diversion
-# stack if it is not already using it.  In this case, once finished,
-# it will bring back all the code accumulated in the diversion stack.
-# This, combined with m4_require, achieves the topological ordering of
-# macros.  We don't use this macro to define some frequently called
-# macros that are not involved in ordering constraints, to save m4
-# processing.
+# _m4_divert_dump
+# ---------------
+# If blank, we are outside of any defun'd macro.  Otherwise, expands
+# to the diversion number (not name) where require'd macros should be
+# moved once completed.
+m4_define([_m4_divert_dump])
+
+
+# m4_divert_require(DIVERSION, NAME-TO-CHECK, [BODY-TO-EXPAND])
+# -------------------------------------------------------------
+# Same as m4_require, but BODY-TO-EXPAND goes into the named DIVERSION;
+# requirements still go in the current diversion though.
+#
+m4_define([m4_divert_require],
+[m4_ifdef([_m4_expanding($2)],
+  [m4_fatal([$0: circular dependency of $2])])]dnl
+[m4_if(_m4_divert_dump, [],
+  [m4_fatal([$0($2): cannot be used outside of an m4_defun'd macro])])]dnl
+[m4_provide_if([$2], [],
+  [_m4_require_call([$2], [$3], _m4_divert([$1], [-]))])])
+
+
+# m4_defun(NAME, EXPANSION, [MACRO = m4_define])
+# ----------------------------------------------
+# Define a macro NAME which automatically provides itself.  Add
+# machinery so the macro automatically switches expansion to the
+# diversion stack if it is not already using it, prior to EXPANSION.
+# In this case, once finished, it will bring back all the code
+# accumulated in the diversion stack.  This, combined with m4_require,
+# achieves the topological ordering of macros.  We don't use this
+# macro to define some frequently called macros that are not involved
+# in ordering constraints, to save m4 processing.
+#
+# MACRO is an undocumented argument; when set to m4_pushdef, and NAME
+# is already defined, the new definition is added to the pushdef
+# stack, rather than overwriting the current definition.  It can thus
+# be used to write self-modifying macros, which pop themselves to a
+# previously m4_define'd definition so that subsequent use of the
+# macro is faster.
 m4_define([m4_defun],
-[m4_define([m4_location($1)], m4_location)dnl
-m4_define([$1],
-	  [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])
+[m4_define([m4_location($1)], m4_location)]dnl
+[m4_default([$3], [m4_define])([$1],
+  [_m4_defun_pro(]m4_dquote($[0])[)$2[]_m4_defun_epi(]m4_dquote($[0])[)])])
+
+
+# m4_defun_init(NAME, INIT, COMMON)
+# ---------------------------------
+# Like m4_defun, but split EXPANSION into two portions: INIT which is
+# done only the first time NAME is invoked, and COMMON which is
+# expanded every time.
+#
+# For now, the COMMON definition is always m4_define'd, giving an even
+# lighter-weight definition.  m4_defun allows self-providing, but once
+# a macro is provided, m4_require no longer cares if it is m4_define'd
+# or m4_defun'd.  m4_defun also provides location tracking to identify
+# dependency bugs, but once the INIT has been expanded, we know there
+# are no dependency bugs.  However, if a future use needs COMMON to be
+# m4_defun'd, we can add a parameter, similar to the third parameter
+# to m4_defun.
+m4_define([m4_defun_init],
+[m4_define([$1], [$3[]])m4_defun([$1],
+   [$2[]_m4_popdef(]m4_dquote($[0])[)m4_indir(]m4_dquote($[0])dnl
+[m4_if(]m4_dquote($[#])[, [0], [], ]m4_dquote([,$]@)[))], [m4_pushdef])])
 
 
 # m4_defun_once(NAME, EXPANSION)
 # ------------------------------
-# As m4_defun, but issues the EXPANSION only once, and warns if used
-# several times.
+# Like m4_defun, but guarantee that EXPANSION only happens once
+# (thereafter, using NAME is a no-op).
+#
+# If _m4_divert_dump is empty, we are called at the top level;
+# otherwise, we must ensure that we are required in front of the
+# current defun'd macro.  Use a helper macro so that EXPANSION need
+# only occur once in the definition of NAME, since it might be large.
 m4_define([m4_defun_once],
-[m4_define([m4_location($1)], m4_location)dnl
-m4_define([$1],
-	  [m4_provide_if([$1],
-			 [m4_warn([syntax], [$1 invoked multiple times])],
-			 [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])])
+[m4_define([m4_location($1)], m4_location)]dnl
+[m4_define([$1], [_m4_defun_once([$1], [$2], m4_if(_m4_divert_dump, [],
+  [[_m4_defun_pro([$1])m4_unquote(], [)_m4_defun_epi([$1])]],
+m4_ifdef([_m4_diverting([$1])], [-]), [-], [[m4_unquote(], [)]],
+  [[_m4_require_call([$1],], [, _m4_divert_dump)]]))])])
+
+m4_define([_m4_defun_once],
+[m4_pushdef([$1])$3[$2[]m4_provide([$1])]$4])
 
 
 # m4_pattern_forbid(ERE, [WHY])
 # -----------------------------
-# Declare that no token matching the extended regular expression ERE
-# should be seen in the output but if...
+# Declare that no token matching the forbidden extended regular
+# expression ERE should be seen in the output unless...
 m4_define([m4_pattern_forbid], [])
 
 
 # m4_pattern_allow(ERE)
 # ---------------------
-# ... but if that token matches the extended regular expression ERE.
+# ... that token also matches the allowed extended regular expression ERE.
 # Both used via traces.
 m4_define([m4_pattern_allow], [])
 
 
-## ----------------------------- ##
-## Dependencies between macros.  ##
-## ----------------------------- ##
+## --------------------------------- ##
+## 11. Dependencies between macros.  ##
+## --------------------------------- ##
 
 
 # m4_before(THIS-MACRO-NAME, CALLED-MACRO-NAME)
 # ---------------------------------------------
+# Issue a warning if CALLED-MACRO-NAME was called before THIS-MACRO-NAME.
 m4_define([m4_before],
 [m4_provide_if([$2],
 	       [m4_warn([syntax], [$2 was called before $1])])])
@@ -1212,18 +2029,19 @@
 # -----------------------------------------------------------
 # If NAME-TO-CHECK has never been expanded (actually, if it is not
 # m4_provide'd), expand BODY-TO-EXPAND *before* the current macro
-# expansion.  Once expanded, emit it in _m4_divert_dump.  Keep track
-# of the m4_require chain in m4_expansion_stack.
+# expansion; follow the expansion with a newline.  Once expanded, emit
+# it in _m4_divert_dump.  Keep track of the m4_require chain in
+# _m4_expansion_stack.
 #
 # The normal cases are:
 #
 # - NAME-TO-CHECK == BODY-TO-EXPAND
 #   Which you can use for regular macros with or without arguments, e.g.,
 #     m4_require([AC_PROG_CC], [AC_PROG_CC])
-#     m4_require([AC_CHECK_HEADERS(limits.h)], [AC_CHECK_HEADERS(limits.h)])
+#     m4_require([AC_CHECK_HEADERS(threads.h)], [AC_CHECK_HEADERS(threads.h)])
 #   which is just the same as
 #     m4_require([AC_PROG_CC])
-#     m4_require([AC_CHECK_HEADERS(limits.h)])
+#     m4_require([AC_CHECK_HEADERS(threads.h)])
 #
 # - BODY-TO-EXPAND == m4_indir([NAME-TO-CHECK])
 #   In the case of macros with irregular names.  For instance:
@@ -1240,33 +2058,51 @@
 #   such as `C' should dispatch the call to `AC_LANG_COMPILER(C)'.  But this
 #   `extension' prevents `AC_LANG_COMPILER' from having actual arguments that
 #   it passes to `AC_LANG_COMPILER(C)'.
+#
+# This is called frequently, so minimize the number of macro invocations
+# by avoiding dnl and other overhead on the common path.
 m4_define([m4_require],
 [m4_ifdef([_m4_expanding($1)],
-	 [m4_fatal([$0: circular dependency of $1])])dnl
-m4_ifndef([_m4_divert_dump],
-	  [m4_fatal([$0($1): cannot be used outside of an m4_defun'd macro])])dnl
-m4_provide_if([$1],
-	      [],
-	      [_m4_require_call([$1], [$2])])dnl
-])
+  [m4_fatal([$0: circular dependency of $1])])]dnl
+[m4_if(_m4_divert_dump, [],
+  [m4_fatal([$0($1): cannot be used outside of an ]dnl
+m4_if([$0], [m4_require], [[m4_defun]], [[AC_DEFUN]])['d macro])])]dnl
+[m4_provide_if([$1], [m4_set_contains([_m4_provide], [$1],
+    [_m4_require_check([$1], _m4_defn([m4_provide($1)]), [$0])], [m4_ignore])],
+  [_m4_require_call])([$1], [$2], _m4_divert_dump)])
 
 
-# _m4_require_call(BODY-TO-EXPAND)
-# --------------------------------
-# If m4_require decides to expand the body, it calls this macro.
+# _m4_require_call(NAME-TO-CHECK, [BODY-TO-EXPAND = NAME-TO-CHECK],
+#                  DIVERSION-NUMBER)
+# -----------------------------------------------------------------
+# If m4_require decides to expand the body, it calls this macro.  The
+# expansion is placed in DIVERSION-NUMBER.
+#
+# This is called frequently, so minimize the number of macro invocations
+# by avoiding dnl and other overhead on the common path.
 m4_define([_m4_require_call],
-[m4_define([_m4_divert_grow], m4_decr(_m4_divert_grow))dnl
-m4_divert_push(_m4_divert_grow)dnl
-m4_default([$2], [$1])
-m4_provide_if([$1],
-	      [],
-	      [m4_warn([syntax],
-		       [$1 is m4_require'd but not m4_defun'd])])dnl
-m4_divert(m4_defn([_m4_divert_dump]))dnl
-m4_undivert(_m4_divert_grow)dnl
-m4_divert_pop(_m4_divert_grow)dnl
-m4_define([_m4_divert_grow], m4_incr(_m4_divert_grow))dnl
-])
+[m4_pushdef([_m4_divert_grow], m4_decr(_m4_divert_grow))]dnl
+[m4_pushdef([_m4_diverting([$1])])m4_pushdef([_m4_diverting], [$1])]dnl
+[m4_divert_push(_m4_divert_grow, [-])]dnl
+[m4_if([$2], [], [$1], [$2])
+m4_provide_if([$1], [m4_set_remove([_m4_provide], [$1])],
+  [m4_warn([syntax], [$1 is m4_require'd but not m4_defun'd])])]dnl
+[_m4_divert_raw($3)_m4_undivert(_m4_divert_grow)]dnl
+[m4_divert_pop(_m4_divert_grow)_m4_popdef([_m4_divert_grow],
+[_m4_diverting([$1])], [_m4_diverting])])
+
+
+# _m4_require_check(NAME-TO-CHECK, OWNER, CALLER)
+# -----------------------------------------------
+# NAME-TO-CHECK has been identified as previously expanded in the
+# diversion owned by OWNER.  If this is a problem, warn on behalf of
+# CALLER and return _m4_require_call; otherwise return m4_ignore.
+m4_define([_m4_require_check],
+[m4_if(_m4_defn([_m4_diverting]), [$2], [m4_ignore],
+       m4_ifdef([_m4_diverting([$2])], [-]), [-], [m4_warn([syntax],
+   [$3: `$1' was expanded before it was required
+http://www.gnu.org/software/autoconf/manual/autoconf.html#Expanded-Before-Required])_m4_require_call],
+       [m4_ignore])])
 
 
 # _m4_divert_grow
@@ -1280,15 +2116,17 @@
 # If TEXT has never been expanded, expand it *here*.  Use WITNESS as
 # as a memory that TEXT has already been expanded.
 m4_define([m4_expand_once],
-[m4_provide_if(m4_ifval([$2], [[$2]], [[$1]]),
+[m4_provide_if(m4_default_quoted([$2], [$1]),
 	       [],
-	       [m4_provide(m4_ifval([$2], [[$2]], [[$1]]))[]$1])])
+	       [m4_provide(m4_default_quoted([$2], [$1]))[]$1])])
 
 
 # m4_provide(MACRO-NAME)
 # ----------------------
 m4_define([m4_provide],
-[m4_define([m4_provide($1)])])
+[m4_ifdef([m4_provide($1)], [],
+[m4_set_add([_m4_provide], [$1], [m4_define([m4_provide($1)],
+  m4_ifdef([_m4_diverting], [_m4_defn([_m4_diverting])]))])])])
 
 
 # m4_provide_if(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
@@ -1302,9 +2140,9 @@
 	  [$2], [$3])])
 
 
-## -------------------- ##
-## 9. Text processing.  ##
-## -------------------- ##
+## --------------------- ##
+## 12. Text processing.  ##
+## --------------------- ##
 
 
 # m4_cr_letters
@@ -1324,8 +2162,17 @@
 m4_define([m4_cr_digits], [0123456789])
 
 
-# m4_cr_symbols1 & m4_cr_symbols2
-# -------------------------------
+# m4_cr_alnum
+# -----------
+m4_define([m4_cr_alnum],
+m4_defn([m4_cr_Letters])dnl
+m4_defn([m4_cr_digits])dnl
+)
+
+
+# m4_cr_symbols1
+# m4_cr_symbols2
+# --------------
 m4_define([m4_cr_symbols1],
 m4_defn([m4_cr_Letters])dnl
 _)
@@ -1335,6 +2182,63 @@
 m4_defn([m4_cr_digits])dnl
 )
 
+# m4_cr_all
+# ---------
+# The character range representing everything, with `-' as the last
+# character, since it is special to m4_translit.  Use with care, because
+# it contains characters special to M4 (fortunately, both ASCII and EBCDIC
+# have [] in order, so m4_defn([m4_cr_all]) remains a valid string).  It
+# also contains characters special to terminals, so it should never be
+# displayed in an error message.  Also, attempts to map [ and ] to other
+# characters via m4_translit must deal with the fact that m4_translit does
+# not add quotes to the output.
+#
+# In EBCDIC, $ is immediately followed by *, which leads to problems
+# if m4_cr_all is inlined into a macro definition; so swap them.
+#
+# It is mainly useful in generating inverted character range maps, for use
+# in places where m4_translit is faster than an equivalent m4_bpatsubst;
+# the regex `[^a-z]' is equivalent to:
+#  m4_translit(m4_dquote(m4_defn([m4_cr_all])), [a-z])
+m4_define([m4_cr_all],
+m4_translit(m4_dquote(m4_format(m4_dquote(m4_for(
+  ,1,255,,[[%c]]))m4_for([i],1,255,,[,i]))), [$*-], [*$])-)
+
+
+# _m4_define_cr_not(CATEGORY)
+# ---------------------------
+# Define m4_cr_not_CATEGORY as the inverse of m4_cr_CATEGORY.
+m4_define([_m4_define_cr_not],
+[m4_define([m4_cr_not_$1],
+	   m4_translit(m4_dquote(m4_defn([m4_cr_all])),
+		       m4_defn([m4_cr_$1])))])
+
+
+# m4_cr_not_letters
+# m4_cr_not_LETTERS
+# m4_cr_not_Letters
+# m4_cr_not_digits
+# m4_cr_not_alnum
+# m4_cr_not_symbols1
+# m4_cr_not_symbols2
+# ------------------
+# Inverse character sets
+_m4_define_cr_not([letters])
+_m4_define_cr_not([LETTERS])
+_m4_define_cr_not([Letters])
+_m4_define_cr_not([digits])
+_m4_define_cr_not([alnum])
+_m4_define_cr_not([symbols1])
+_m4_define_cr_not([symbols2])
+
+
+# m4_newline([STRING])
+# --------------------
+# Expands to a newline, possibly followed by STRING.  Exists mostly for
+# formatting reasons.
+m4_define([m4_newline], [
+$1])
+
 
 # m4_re_escape(STRING)
 # --------------------
@@ -1366,16 +2270,19 @@
 # m4_tolower(STRING)
 # m4_toupper(STRING)
 # ------------------
-# These macros lowercase and uppercase strings.
+# These macros convert STRING to lowercase or uppercase.
+#
+# Rather than expand the m4_defn each time, we inline them up front.
 m4_define([m4_tolower],
-[m4_translit([$1], m4_defn([m4_cr_LETTERS]), m4_defn([m4_cr_letters]))])
+[m4_translit([[$1]], ]m4_dquote(m4_defn([m4_cr_LETTERS]))[,
+		     ]m4_dquote(m4_defn([m4_cr_letters]))[)])
 m4_define([m4_toupper],
-[m4_translit([$1], m4_defn([m4_cr_letters]), m4_defn([m4_cr_LETTERS]))])
+[m4_translit([[$1]], ]m4_dquote(m4_defn([m4_cr_letters]))[,
+		     ]m4_dquote(m4_defn([m4_cr_LETTERS]))[)])
 
 
 # m4_split(STRING, [REGEXP])
 # --------------------------
-#
 # Split STRING into an m4 list of quoted elements.  The elements are
 # quoted with [ and ].  Beginning spaces and end spaces *are kept*.
 # Use m4_strip to remove them.
@@ -1386,30 +2293,56 @@
 #
 # Pay attention to the m4_changequotes.  When m4 reads the definition of
 # m4_split, it still has quotes set to [ and ].  Luckily, these are matched
-# in the macro body, so the definition is stored correctly.
+# in the macro body, so the definition is stored correctly.  Use the same
+# alternate quotes as m4_noquote; it must be unlikely to appear in $1.
 #
 # Also, notice that $1 is quoted twice, since we want the result to
 # be quoted.  Then you should understand that the argument of
-# patsubst is ``STRING'' (i.e., with additional `` and '').
+# patsubst is -=<{(STRING)}>=- (i.e., with additional -=<{( and )}>=-).
 #
 # This macro is safe on active symbols, i.e.:
 #   m4_define(active, ACTIVE)
 #   m4_split([active active ])end
 #   => [active], [active], []end
-
+#
+# Optimize on regex of ` ' (space), since m4_foreach_w already guarantees
+# that the list contains single space separators, and a common case is
+# splitting a single-element list.  This macro is called frequently,
+# so avoid unnecessary dnl inside the definition.
 m4_define([m4_split],
-[m4_ifval([$1], [_m4_split($@)])])
+[m4_if([$1], [], [],
+       [$2], [ ], [m4_if(m4_index([$1], [ ]), [-1], [[[$1]]],
+			 [_$0([$1], [$2], [, ])])],
+       [$2], [], [_$0([$1], [[	 ]+], [, ])],
+       [_$0([$1], [$2], [, ])])])
 
 m4_define([_m4_split],
-[m4_changequote(``, '')dnl
-[dnl Can't use m4_default here instead of m4_if, because m4_default uses
-dnl [ and ] as quotes.
-m4_bpatsubst(````$1'''',
-	     m4_if(``$2'',, ``[	 ]+'', ``$2''),
-	     ``], ['')]dnl
-m4_changequote([, ])])
+[m4_changequote([-=<{(],[)}>=-])]dnl
+[[m4_bpatsubst(-=<{(-=<{($1)}>=-)}>=-, -=<{($2)}>=-,
+	       -=<{(]$3[)}>=-)]m4_changequote([, ])])
 
 
+# m4_chomp(STRING)
+# m4_chomp_all(STRING)
+# --------------------
+# Return STRING quoted, but without a trailing newline.  m4_chomp
+# removes at most one newline, while m4_chomp_all removes all
+# consecutive trailing newlines.  Embedded newlines are not touched,
+# and a trailing backslash-newline leaves just a trailing backslash.
+#
+# m4_bregexp is slower than m4_index, and we don't always want to
+# remove all newlines; hence the two variants.  We massage characters
+# to give a nicer pattern to match, particularly since m4_bregexp is
+# line-oriented.  Both versions must guarantee a match, to avoid bugs
+# with precision -1 in m4_format in older m4.
+m4_define([m4_chomp],
+[m4_format([[%.*s]], m4_index(m4_translit([[$1]], [
+/.], [/  ])[./.], [/.]), [$1])])
+
+m4_define([m4_chomp_all],
+[m4_format([[%.*s]], m4_bregexp(m4_translit([[$1]], [
+/], [/ ]), [/*$]), [$1])])
+
 
 # m4_flatten(STRING)
 # ------------------
@@ -1421,10 +2354,14 @@
 #    act\
 #    ive])end
 #    => active activeend
+#
+# In m4, m4_bpatsubst is expensive, so first check for a newline.
 m4_define([m4_flatten],
-[m4_translit(m4_bpatsubst([[[$1]]], [\\
+[m4_if(m4_index([$1], [
+]), [-1], [[$1]],
+       [m4_translit(m4_bpatsubst([[[$1]]], [\\
 ]), [
-], [ ])])
+], [ ])])])
 
 
 # m4_strip(STRING)
@@ -1437,18 +2374,20 @@
 #    m4_strip([  active <tab> <tab>active ])end
 #    => active activeend
 #
-# Because we want to preserve active symbols, STRING must be double-quoted.
+# First, notice that we guarantee trailing space.  Why?  Because regular
+# expressions are greedy, and `.* ?' would always group the space into the
+# .* portion.  The algorithm is simpler by avoiding `?' at the end.  The
+# algorithm correctly strips everything if STRING is just ` '.
 #
-# Then notice the 2 last patterns: they are in charge of removing the
+# Then notice the second pattern: it is in charge of removing the
 # leading/trailing spaces.  Why not just `[^ ]'?  Because they are
-# applied to doubly quoted strings, i.e. more or less [[STRING]].  So
-# if there is a leading space in STRING, then it is the *third*
-# character, since there are two leading `['; equally for the last pattern.
+# applied to over-quoted strings, i.e. more or less [STRING], due
+# to the limitations of m4_bpatsubsts.  So the leading space in STRING
+# is the *second* character; equally for the trailing space.
 m4_define([m4_strip],
-[m4_bpatsubsts([[$1]],
+[m4_bpatsubsts([$1 ],
 	       [[	 ]+], [ ],
-	       [^\(..\) ],    [\1],
-	       [ \(..\)$],    [\1])])
+	       [^. ?\(.*\) .$], [[[\1]]])])
 
 
 # m4_normalize(STRING)
@@ -1470,13 +2409,56 @@
 
 # m4_join(SEP, ARG1, ARG2...)
 # ---------------------------
-# Produce ARG1SEPARG2...SEPARGn.
-m4_defun([m4_join],
-[m4_case([$#],
-	 [1], [],
-	 [2], [[$2]],
-	 [[$2][$1]$0([$1], m4_shiftn(2, $@))])])
+# Produce ARG1SEPARG2...SEPARGn.  Avoid back-to-back SEP when a given ARG
+# is the empty string.  No expansion is performed on SEP or ARGs.
+#
+# Since the number of arguments to join can be arbitrarily long, we
+# want to avoid having more than one $@ in the macro definition;
+# otherwise, the expansion would require twice the memory of the already
+# long list.  Hence, m4_join merely looks for the first non-empty element,
+# and outputs just that element; while _m4_join looks for all non-empty
+# elements, and outputs them following a separator.  The final trick to
+# note is that we decide between recursing with $0 or _$0 based on the
+# nested m4_if ending with `_'.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift2($@))])])
+m4_define([_m4_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift2($@))])])
 
+# m4_joinall(SEP, ARG1, ARG2...)
+# ------------------------------
+# Produce ARG1SEPARG2...SEPARGn.  An empty ARG results in back-to-back SEP.
+# No expansion is performed on SEP or ARGs.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_joinall], [[$2]_$0([$1], m4_shift($@))])
+m4_define([_m4_joinall],
+[m4_if([$#], [2], [], [[$1$3]$0([$1], m4_shift2($@))])])
+
+# m4_combine([SEPARATOR], PREFIX-LIST, [INFIX], SUFFIX...)
+# --------------------------------------------------------
+# Produce the pairwise combination of every element in the quoted,
+# comma-separated PREFIX-LIST with every element from the SUFFIX arguments.
+# Each pair is joined with INFIX, and pairs are separated by SEPARATOR.
+# No expansion occurs on SEPARATOR, INFIX, or elements of either list.
+#
+# For example:
+#   m4_combine([, ], [[a], [b], [c]], [-], [1], [2], [3])
+#   => a-1, a-2, a-3, b-1, b-2, b-3, c-1, c-2, c-3
+#
+# This definition is a bit hairy; the thing to realize is that we want
+# to construct m4_map_args_sep([[prefix$3]], [], [[$1]], m4_shift3($@))
+# as the inner loop, using each prefix generated by the outer loop,
+# and without recalculating m4_shift3 every outer iteration.
+m4_define([m4_combine],
+[m4_if([$2], [], [], m4_eval([$# > 3]), [1],
+[m4_map_args_sep([m4_map_args_sep(m4_dquote(], [)[[$3]], [], [[$1]],]]]dnl
+[m4_dquote(m4_dquote(m4_shift3($@)))[[)], [[$1]], $2)])])
 
 
 # m4_append(MACRO-NAME, STRING, [SEPARATOR])
@@ -1486,13 +2468,16 @@
 # in which case no SEPARATOR is added.  Be aware that the criterion is
 # `not being defined', and not `not being empty'.
 #
+# Note that neither STRING nor SEPARATOR are expanded here; rather, when
+# you expand MACRO-NAME, they will be expanded at that point in time.
+#
 # This macro is robust to active symbols.  It can be used to grow
 # strings.
 #
-#    | m4_define(active, ACTIVE)
-#    | m4_append([sentence], [This is an])
-#    | m4_append([sentence], [ active ])
-#    | m4_append([sentence], [symbol.])
+#    | m4_define(active, ACTIVE)dnl
+#    | m4_append([sentence], [This is an])dnl
+#    | m4_append([sentence], [ active ])dnl
+#    | m4_append([sentence], [symbol.])dnl
 #    | sentence
 #    | m4_undefine([active])dnl
 #    | sentence
@@ -1501,35 +2486,98 @@
 #
 # It can be used to define hooks.
 #
-#    | m4_define(active, ACTIVE)
-#    | m4_append([hooks], [m4_define([act1], [act2])])
-#    | m4_append([hooks], [m4_define([act2], [active])])
-#    | m4_undefine([active])
+#    | m4_define(active, ACTIVE)dnl
+#    | m4_append([hooks], [m4_define([act1], [act2])])dnl
+#    | m4_append([hooks], [m4_define([act2], [active])])dnl
+#    | m4_undefine([active])dnl
 #    | act1
 #    | hooks
 #    | act1
 #    => act1
 #    =>
 #    => active
+#
+# It can also be used to create lists, although this particular usage was
+# broken prior to autoconf 2.62.
+#    | m4_append([list], [one], [, ])dnl
+#    | m4_append([list], [two], [, ])dnl
+#    | m4_append([list], [three], [, ])dnl
+#    | list
+#    | m4_dquote(list)
+#    => one, two, three
+#    => [one],[two],[three]
+#
+# Note that m4_append can benefit from amortized O(n) m4 behavior, if
+# the underlying m4 implementation is smart enough to avoid copying existing
+# contents when enlarging a macro's definition into any pre-allocated storage
+# (m4 1.4.x unfortunately does not implement this optimization).  We do
+# not implement m4_prepend, since it is inherently O(n^2) (pre-allocated
+# storage only occurs at the end of a macro, so the existing contents must
+# always be moved).
+#
+# Use _m4_defn for speed.
 m4_define([m4_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])$3])[$2])])
+[m4_define([$1], m4_ifdef([$1], [_m4_defn([$1])[$3]])[$2])])
 
-# m4_prepend(MACRO-NAME, STRING, [SEPARATOR])
-# -------------------------------------------
-# Same, but prepend.
-m4_define([m4_prepend],
-[m4_define([$1],
-	   [$2]m4_ifdef([$1], [$3[]m4_defn([$1])]))])
 
-# m4_append_uniq(MACRO-NAME, STRING, [SEPARATOR])
-# -----------------------------------------------
-# As `m4_append', but append only if not yet present.
+# m4_append_uniq(MACRO-NAME, STRING, [SEPARATOR], [IF-UNIQ], [IF-DUP])
+# --------------------------------------------------------------------
+# Like `m4_append', but append only if not yet present.  Additionally,
+# expand IF-UNIQ if STRING was appended, or IF-DUP if STRING was already
+# present.  Also, warn if SEPARATOR is not empty and occurs within STRING,
+# as the algorithm no longer guarantees uniqueness.
+#
+# Note that while m4_append can be O(n) (depending on the quality of the
+# underlying M4 implementation), m4_append_uniq is inherently O(n^2)
+# because each append operation searches the entire string.
 m4_define([m4_append_uniq],
+[m4_ifval([$3], [m4_if(m4_index([$2], [$3]), [-1], [],
+		       [m4_warn([syntax],
+				[$0: `$2' contains `$3'])])])_$0($@)])
+m4_define([_m4_append_uniq],
 [m4_ifdef([$1],
-	  [m4_bmatch([$3]m4_defn([$1])[$3], m4_re_escape([$3$2$3]), [],
-		     [m4_append($@)])],
-	  [m4_append($@)])])
+	  [m4_if(m4_index([$3]_m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [m4_append([$1], [$2], [$3])$4], [$5])],
+	  [m4_define([$1], [$2])$4])])
+
+# m4_append_uniq_w(MACRO-NAME, STRINGS)
+# -------------------------------------
+# For each of the words in the whitespace separated list STRINGS, append
+# only the unique strings to the definition of MACRO-NAME.
+#
+# Use _m4_defn for speed.
+m4_define([m4_append_uniq_w],
+[m4_map_args_w([$2], [_m4_append_uniq([$1],], [, [ ])])])
+
+
+# m4_escape(STRING)
+# -----------------
+# Output quoted STRING, but with embedded #, $, [ and ] turned into
+# quadrigraphs.
+#
+# It is faster to check if STRING is already good using m4_translit
+# than to blindly perform four m4_bpatsubst.
+#
+# Because the translit is stripping quotes, it must also neutralize
+# anything that might be in a macro name, as well as comments, commas,
+# and parentheses.  All the problem characters are unified so that a
+# single m4_index can scan the result.
+#
+# Rather than expand m4_defn every time m4_escape is expanded, we
+# inline its expansion up front.
+m4_define([m4_escape],
+[m4_if(m4_index(m4_translit([$1],
+   [[]#,()]]m4_dquote(m4_defn([m4_cr_symbols2]))[, [$$$]), [$]),
+  [-1], [m4_echo], [_$0])([$1])])
+
+m4_define([_m4_escape],
+[m4_changequote([-=<{(],[)}>=-])]dnl
+[m4_bpatsubst(m4_bpatsubst(m4_bpatsubst(m4_bpatsubst(
+	  -=<{(-=<{(-=<{(-=<{(-=<{($1)}>=-)}>=-)}>=-)}>=-)}>=-,
+	-=<{(#)}>=-, -=<{(@%:@)}>=-),
+      -=<{(\[)}>=-, -=<{(@<:@)}>=-),
+    -=<{(\])}>=-, -=<{(@:>@)}>=-),
+  -=<{(\$)}>=-, -=<{(@S|@)}>=-)m4_changequote([,])])
 
 
 # m4_text_wrap(STRING, [PREFIX], [FIRST-PREFIX], [WIDTH])
@@ -1540,6 +2588,11 @@
 # if the length of FIRST-PREFIX is greater than that of PREFIX, then
 # FIRST-PREFIX will be left alone on the first line.
 #
+# No expansion occurs on the contents STRING, PREFIX, or FIRST-PREFIX,
+# although quadrigraphs are correctly recognized.  More precisely,
+# you may redefine m4_qlen to recognize whatever escape sequences that
+# you will post-process.
+#
 # Typical outputs are:
 #
 # m4_text_wrap([Short string */], [   ], [/* ], 20)
@@ -1565,138 +2618,239 @@
 # we really want to bother with people trying each single corner
 # of a software?
 #
-# more important:
-# FIXME: handle quadrigraphs correctly, both in TEXT and in FIRST_PREFIX.
+# This macro does not leave a trailing space behind the last word of a line,
+# which complicates it a bit.  The algorithm is otherwise stupid and simple:
+# all the words are preceded by m4_Separator which is defined to empty for
+# the first word, and then ` ' (single space) for all the others.
 #
-# This macro does not leave a trailing space behind the last word,
-# what complicates it a bit.  The algorithm is stupid simple: all the
-# words are preceded by m4_Separator which is defined to empty for the
-# first word, and then ` ' (single space) for all the others.
+# The algorithm uses a helper that uses $2 through $4 directly, rather than
+# using local variables, to avoid m4_defn overhead, or expansion swallowing
+# any $.  It also bypasses m4_popdef overhead with _m4_popdef since no user
+# macro expansion occurs in the meantime.  Also, the definition is written
+# with m4_do, to avoid time wasted on dnl during expansion (since this is
+# already a time-consuming macro).
 m4_define([m4_text_wrap],
-[m4_pushdef([m4_Prefix], [$2])dnl
-m4_pushdef([m4_Prefix1], m4_default([$3], [m4_Prefix]))dnl
-m4_pushdef([m4_Width], m4_default([$4], 79))dnl
-m4_pushdef([m4_Cursor], m4_len(m4_Prefix1))dnl
-m4_pushdef([m4_Separator], [])dnl
-m4_Prefix1[]dnl
-m4_if(m4_eval(m4_Cursor > m4_len(m4_Prefix)),
-      1, [m4_define([m4_Cursor], m4_len(m4_Prefix))
-m4_Prefix])[]dnl
-m4_foreach_w([m4_Word], [$1],
-[m4_define([m4_Cursor], m4_eval(m4_Cursor + m4_len(m4_defn([m4_Word])) + 1))dnl
-dnl New line if too long, else insert a space unless it is the first
-dnl of the words.
-m4_if(m4_eval(m4_Cursor > m4_Width),
-      1, [m4_define([m4_Cursor],
-		    m4_eval(m4_len(m4_Prefix) + m4_len(m4_defn([m4_Word])) + 1))]
-m4_Prefix,
-       [m4_Separator])[]dnl
-m4_defn([m4_Word])[]dnl
-m4_define([m4_Separator], [ ])])dnl
-m4_popdef([m4_Separator])dnl
-m4_popdef([m4_Cursor])dnl
-m4_popdef([m4_Width])dnl
-m4_popdef([m4_Prefix1])dnl
-m4_popdef([m4_Prefix])dnl
-])
+[_$0(m4_escape([$1]), [$2], m4_default_quoted([$3], [$2]),
+     m4_default_quoted([$4], [79]))])
 
+m4_define([_m4_text_wrap],
+m4_do(dnl set up local variables, to avoid repeated calculations
+[[m4_pushdef([m4_Indent], m4_qlen([$2]))]],
+[[m4_pushdef([m4_Cursor], m4_qlen([$3]))]],
+[[m4_pushdef([m4_Separator], [m4_define([m4_Separator], [ ])])]],
+dnl expand the first prefix, then check its length vs. regular prefix
+dnl same length: nothing special
+dnl prefix1 longer: output on line by itself, and reset cursor
+dnl prefix1 shorter: pad to length of prefix, and reset cursor
+[[[$3]m4_cond([m4_Cursor], m4_Indent, [],
+	      [m4_eval(m4_Cursor > m4_Indent)], [1], [
+[$2]m4_define([m4_Cursor], m4_Indent)],
+	      [m4_format([%*s], m4_max([0],
+  m4_eval(m4_Indent - m4_Cursor)), [])m4_define([m4_Cursor], m4_Indent)])]],
+dnl now, for each word, compute the cursor after the word is output, then
+dnl check if the cursor would exceed the wrap column
+dnl if so, reset cursor, and insert newline and prefix
+dnl if not, insert the separator (usually a space)
+dnl either way, insert the word
+[[m4_map_args_w([$1], [$0_word(], [, [$2], [$4])])]],
+dnl finally, clean up the local variables
+[[_m4_popdef([m4_Separator], [m4_Cursor], [m4_Indent])]]))
+
+m4_define([_m4_text_wrap_word],
+[m4_define([m4_Cursor], m4_eval(m4_Cursor + m4_qlen([$1]) + 1))]dnl
+[m4_if(m4_eval(m4_Cursor > ([$3])),
+      [1], [m4_define([m4_Cursor], m4_eval(m4_Indent + m4_qlen([$1]) + 1))
+[$2]],
+      [m4_Separator[]])[$1]])
 
 # m4_text_box(MESSAGE, [FRAME-CHARACTER = `-'])
 # ---------------------------------------------
+# Turn MESSAGE into:
+#  ## ------- ##
+#  ## MESSAGE ##
+#  ## ------- ##
+# using FRAME-CHARACTER in the border.
+#
+# Quadrigraphs are correctly recognized.  More precisely, you may
+# redefine m4_qlen to recognize whatever escape sequences that you
+# will post-process.
 m4_define([m4_text_box],
-[@%:@@%:@ m4_bpatsubst([$1], [.], m4_if([$2], [], [[-]], [[$2]])) @%:@@%:@
-@%:@@%:@ $1 @%:@@%:@
-@%:@@%:@ m4_bpatsubst([$1], [.], m4_if([$2], [], [[-]], [[$2]])) @%:@@%:@[]dnl
-])
+[m4_pushdef([m4_Border],
+	    m4_translit(m4_format([[[%*s]]], m4_decr(m4_qlen(_m4_expand([$1
+]))), []), [ ], m4_default_quoted([$2], [-])))]dnl
+[[##] _m4_defn([m4_Border]) [##]
+[##] $1 [##]
+[##] _m4_defn([m4_Border]) [##]_m4_popdef([m4_Border])])
 
 
 # m4_qlen(STRING)
 # ---------------
 # Expands to the length of STRING after autom4te converts all quadrigraphs.
-m4_define([m4_qlen],
-[m4_len(m4_bpatsubsts([[$1]], [@\(<:\|:>\|S|\|%:\)@], [P], [@&t@]))])
-
-
-# m4_qdelta(STRING)
-# -----------------
-# Expands to the net change in the length of STRING from autom4te converting the
-# quadrigraphs in STRING.  This number is always negative or zero.
-m4_define([m4_qdelta],
-[m4_eval(m4_qlen([$1]) - m4_len([$1]))])
-
-
-
-## ----------------------- ##
-## 10. Number processing.  ##
-## ----------------------- ##
-
-# m4_sign(A)
-# ----------
 #
-# The sign of the integer A.
-m4_define([m4_sign],
-[m4_bmatch([$1],
-	   [^-], -1,
-	   [^0+], 0,
-		  1)])
+# If you use some other means of post-processing m4 output rather than
+# autom4te, then you may redefine this macro to recognize whatever
+# escape sequences your post-processor will handle.  For that matter,
+# m4_define([m4_qlen], m4_defn([m4_len])) is sufficient if you don't
+# do any post-processing.
+#
+# Avoid bpatsubsts for the common case of no quadrigraphs.  Cache
+# results, as configure scripts tend to ask about lengths of common
+# strings like `/*' and `*/' rather frequently.  Minimize the number
+# of times that $1 occurs in m4_qlen, so there is less text to parse
+# on a cache hit.
+m4_define([m4_qlen],
+[m4_ifdef([$0-$1], [_m4_defn([$0-]], [_$0(])[$1])])
+m4_define([_m4_qlen],
+[m4_define([m4_qlen-$1],
+m4_if(m4_index([$1], [@]), [-1], [m4_len([$1])],
+      [m4_len(m4_bpatsubst([[$1]],
+			   [@\(\(<:\|:>\|S|\|%:\|\{:\|:\}\)\(@\)\|&t@\)],
+			   [\3]))]))_m4_defn([m4_qlen-$1])])
+
+# m4_copyright_condense(TEXT)
+# ---------------------------
+# Condense the copyright notice in TEXT to only display the final
+# year, wrapping the results to fit in 80 columns.
+m4_define([m4_copyright_condense],
+[m4_text_wrap(m4_bpatsubst(m4_flatten([[$1]]),
+[(C)[-	 ,0-9]*\([1-9][0-9][0-9][0-9]\)], [(C) \1]))])
+
+## ----------------------- ##
+## 13. Number processing.  ##
+## ----------------------- ##
 
 # m4_cmp(A, B)
 # ------------
-#
-# Compare two integers.
+# Compare two integer expressions.
 # A < B -> -1
 # A = B ->  0
 # A > B ->  1
 m4_define([m4_cmp],
-[m4_sign(m4_eval([$1 - $2]))])
+[m4_eval((([$1]) > ([$2])) - (([$1]) < ([$2])))])
 
 
 # m4_list_cmp(A, B)
 # -----------------
 #
-# Compare the two lists of integers A and B.  For instance:
-#   m4_list_cmp((1, 0),     (1))    ->  0
-#   m4_list_cmp((1, 0),     (1, 0)) ->  0
-#   m4_list_cmp((1, 2),     (1, 0)) ->  1
-#   m4_list_cmp((1, 2, 3),  (1, 2)) ->  1
-#   m4_list_cmp((1, 2, -3), (1, 2)) -> -1
-#   m4_list_cmp((1, 0),     (1, 2)) -> -1
-#   m4_list_cmp((1),        (1, 2)) -> -1
+# Compare the two lists of integer expressions A and B.  For instance:
+#   m4_list_cmp([1, 0],     [1])    ->  0
+#   m4_list_cmp([1, 0],     [1, 0]) ->  0
+#   m4_list_cmp([1, 2],     [1, 0]) ->  1
+#   m4_list_cmp([1, 2, 3],  [1, 2]) ->  1
+#   m4_list_cmp([1, 2, -3], [1, 2]) -> -1
+#   m4_list_cmp([1, 0],     [1, 2]) -> -1
+#   m4_list_cmp([1],        [1, 2]) -> -1
+#   m4_define([xa], [oops])dnl
+#   m4_list_cmp([[0xa]],    [5+5])  -> 0
+#
+# Rather than face the overhead of m4_case, we use a helper function whose
+# expansion includes the name of the macro to invoke on the tail, either
+# m4_ignore or m4_unquote.  This is particularly useful when comparing
+# long lists, since less text is being expanded for deciding when to end
+# recursion.  The recursion is between a pair of macros that alternate
+# which list is trimmed by one element; this is more efficient than
+# calling m4_cdr on both lists from a single macro.  Guarantee exactly
+# one expansion of both lists' side effects.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
 m4_define([m4_list_cmp],
-[m4_if([$1$2], [()()], 0,
-       [$1], [()], [$0((0), [$2])],
-       [$2], [()], [$0([$1], (0))],
-       [m4_case(m4_cmp(m4_car$1, m4_car$2),
-		-1, -1,
-		 1, 1,
-		 0, [$0((m4_shift$1), (m4_shift$2))])])])
+[_$0_raw(m4_dquote($1), m4_dquote($2))])
+
+m4_define([_m4_list_cmp_raw],
+[m4_if([$1], [$2], [0], [_m4_list_cmp_1([$1], $2)])])
+
+m4_define([_m4_list_cmp],
+[m4_if([$1], [], [0m4_ignore], [$2], [0], [m4_unquote], [$2m4_ignore])])
+
+m4_define([_m4_list_cmp_1],
+[_m4_list_cmp_2([$2], [m4_shift2($@)], $1)])
+
+m4_define([_m4_list_cmp_2],
+[_m4_list_cmp([$1$3], m4_cmp([$3+0], [$1+0]))(
+  [_m4_list_cmp_1(m4_dquote(m4_shift3($@)), $2)])])
+
+# m4_max(EXPR, ...)
+# m4_min(EXPR, ...)
+# -----------------
+# Return the decimal value of the maximum (or minimum) in a series of
+# integer expressions.
+#
+# M4 1.4.x doesn't provide ?:.  Hence this huge m4_eval.  Avoid m4_eval
+# if both arguments are identical, but be aware of m4_max(0xa, 10) (hence
+# the use of <=, not just <, in the second multiply).
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_max],
+[m4_if([$#], [0], [m4_fatal([too few arguments to $0])],
+       [$#], [1], [m4_eval([$1])],
+       [$#$1], [2$2], [m4_eval([$1])],
+       [$#], [2], [_$0($@)],
+       [_m4_minmax([_$0], $@)])])
+
+m4_define([_m4_max],
+[m4_eval((([$1]) > ([$2])) * ([$1]) + (([$1]) <= ([$2])) * ([$2]))])
+
+m4_define([m4_min],
+[m4_if([$#], [0], [m4_fatal([too few arguments to $0])],
+       [$#], [1], [m4_eval([$1])],
+       [$#$1], [2$2], [m4_eval([$1])],
+       [$#], [2], [_$0($@)],
+       [_m4_minmax([_$0], $@)])])
+
+m4_define([_m4_min],
+[m4_eval((([$1]) < ([$2])) * ([$1]) + (([$1]) >= ([$2])) * ([$2]))])
+
+# _m4_minmax(METHOD, ARG1, ARG2...)
+# ---------------------------------
+# Common recursion code for m4_max and m4_min.  METHOD must be _m4_max
+# or _m4_min, and there must be at least two arguments to combine.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([_m4_minmax],
+[m4_if([$#], [3], [$1([$2], [$3])],
+       [$0([$1], $1([$2], [$3]), m4_shift3($@))])])
+
+
+# m4_sign(A)
+# ----------
+# The sign of the integer expression A.
+m4_define([m4_sign],
+[m4_eval((([$1]) > 0) - (([$1]) < 0))])
 
 
 
 ## ------------------------ ##
-## 11. Version processing.  ##
+## 14. Version processing.  ##
 ## ------------------------ ##
 
 
 # m4_version_unletter(VERSION)
 # ----------------------------
-# Normalize beta version numbers with letters to numbers only for comparison.
+# Normalize beta version numbers with letters to numeric expressions, which
+# can then be handed to m4_eval for the purpose of comparison.
 #
 #   Nl -> (N+1).-1.(l#)
 #
-#i.e., 2.14a -> 2.15.-1.1, 2.14b -> 2.15.-1.2, etc.
-# This macro is absolutely not robust to active macro, it expects
-# reasonable version numbers and is valid up to `z', no double letters.
+# for example:
+#   [2.14a] -> [0,2,14+1,-1,[0r36:a]] -> 2.15.-1.10
+#   [2.14b] -> [0,2,15+1,-1,[0r36:b]] -> 2.15.-1.11
+#   [2.61aa.b] -> [0,2.61,1,-1,[0r36:aa],+1,-1,[0r36:b]] -> 2.62.-1.370.1.-1.11
+#   [08] -> [0,[0r10:0]8] -> 8
+#
+# This macro expects reasonable version numbers, but can handle double
+# letters and does not expand any macros.  Original version strings can
+# use both `.' and `-' separators.
+#
+# Inline constant expansions, to avoid m4_defn overhead.
+# _m4_version_unletter is the real workhorse used by m4_version_compare,
+# but since [0r36:a] and commas are less readable than 10 and dots, we
+# provide a wrapper for human use.
 m4_define([m4_version_unletter],
-[m4_translit(m4_bpatsubsts([$1],
-			   [\([0-9]+\)\([abcdefghi]\)],
-			     [m4_eval(\1 + 1).-1.\2],
-			   [\([0-9]+\)\([jklmnopqrs]\)],
-			     [m4_eval(\1 + 1).-1.1\2],
-			   [\([0-9]+\)\([tuvwxyz]\)],
-			     [m4_eval(\1 + 1).-1.2\2]),
-	     [abcdefghijklmnopqrstuvwxyz],
-	     [12345678901234567890123456])])
+[m4_substr(m4_map_args([.m4_eval], m4_unquote(_$0([$1]))), [3])])
+m4_define([_m4_version_unletter],
+[m4_bpatsubst(m4_bpatsubst(m4_translit([[[[0,$1]]]], [.-], [,,]),]dnl
+m4_dquote(m4_dquote(m4_defn([m4_cr_Letters])))[[+],
+	      [+1,-1,[0r36:\&]]), [,0], [,[0r10:0]])])
 
 
 # m4_version_compare(VERSION-1, VERSION-2)
@@ -1705,9 +2859,11 @@
 #  -1 if VERSION-1 < VERSION-2
 #   0 if           =
 #   1 if           >
+#
+# Since _m4_version_unletter does not output side effects, we can
+# safely bypass the overhead of m4_version_cmp.
 m4_define([m4_version_compare],
-[m4_list_cmp((m4_split(m4_version_unletter([$1]), [\.])),
-	     (m4_split(m4_version_unletter([$2]), [\.])))])
+[_m4_list_cmp_raw(_m4_version_unletter([$1]), _m4_version_unletter([$2]))])
 
 
 # m4_PACKAGE_NAME
@@ -1716,30 +2872,371 @@
 # m4_PACKAGE_STRING
 # m4_PACKAGE_BUGREPORT
 # --------------------
-#m4_include([m4sugar/version.m4]) # This is needed for Autoconf, but not Bison.
+# If m4sugar/version.m4 is present, then define version strings.  This
+# file is optional, provided by Autoconf but absent in Bison.
+m4_sinclude([m4sugar/version.m4])
 
 
 # m4_version_prereq(VERSION, [IF-OK], [IF-NOT = FAIL])
 # ----------------------------------------------------
 # Check this Autoconf version against VERSION.
 m4_define([m4_version_prereq],
-[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-		   [m4_fatal([Autoconf version $1 or higher is required],
-			     63)])],
-       [$2])[]dnl
-])
+m4_ifdef([m4_PACKAGE_VERSION],
+[[m4_if(m4_version_compare(]m4_dquote(m4_defn([m4_PACKAGE_VERSION]))[, [$1]),
+	[-1],
+	[m4_default([$3],
+		    [m4_fatal([Autoconf version $1 or higher is required],
+			      [63])])],
+	[$2])]],
+[[m4_fatal([m4sugar/version.m4 not found])]]))
 
 
+## ------------------ ##
+## 15. Set handling.  ##
+## ------------------ ##
+
+# Autoconf likes to create arbitrarily large sets; for example, as of
+# this writing, the configure.ac for coreutils tracks a set of more
+# than 400 AC_SUBST.  How do we track all of these set members,
+# without introducing duplicates?  We could use m4_append_uniq, with
+# the set NAME residing in the contents of the macro NAME.
+# Unfortunately, m4_append_uniq is quadratic for set creation, because
+# it costs O(n) to search the string for each of O(n) insertions; not
+# to mention that with m4 1.4.x, even using m4_append is slow, costing
+# O(n) rather than O(1) per insertion.  Other set operations, not used
+# by Autoconf but still possible by manipulation of the definition
+# tracked in macro NAME, include O(n) deletion of one element and O(n)
+# computation of set size.  Because the set is exposed to the user via
+# the definition of a single macro, we cannot cache any data about the
+# set without risking the cache being invalidated by the user
+# redefining NAME.
+#
+# Can we do better?  Yes, because m4 gives us an O(1) search function
+# for free: ifdef.  Additionally, even m4 1.4.x gives us an O(1)
+# insert operation for free: pushdef.  But to use these, we must
+# represent the set via a group of macros; to keep the set consistent,
+# we must hide the set so that the user can only manipulate it through
+# accessor macros.  The contents of the set are maintained through two
+# access points; _m4_set([name]) is a pushdef stack of values in the
+# set, useful for O(n) traversal of the set contents; while the
+# existence of _m4_set([name],value) with no particular value is
+# useful for O(1) querying of set membership.  And since the user
+# cannot externally manipulate the set, we are free to add additional
+# caching macros for other performance improvements.  Deletion can be
+# O(1) per element rather than O(n), by reworking the definition of
+# _m4_set([name],value) to be 0 or 1 based on current membership, and
+# adding _m4_set_cleanup(name) to defer the O(n) cleanup of
+# _m4_set([name]) until we have another reason to do an O(n)
+# traversal.  The existence of _m4_set_cleanup(name) can then be used
+# elsewhere to determine if we must dereference _m4_set([name],value),
+# or assume that definition implies set membership.  Finally, size can
+# be tracked in an O(1) fashion with _m4_set_size(name).
+#
+# The quoting in _m4_set([name],value) is chosen so that there is no
+# ambiguity with a set whose name contains a comma, and so that we can
+# supply the value via _m4_defn([_m4_set([name])]) without needing any
+# quote manipulation.
+
+# m4_set_add(SET, VALUE, [IF-UNIQ], [IF-DUP])
+# -------------------------------------------
+# Add VALUE as an element of SET.  Expand IF-UNIQ on the first
+# addition, and IF-DUP if it is already in the set.  Addition of one
+# element is O(1), such that overall set creation is O(n).
+#
+# We do not want to add a duplicate for a previously deleted but
+# unpruned element, but it is just as easy to check existence directly
+# as it is to query _m4_set_cleanup($1).
+m4_define([m4_set_add],
+[m4_ifdef([_m4_set([$1],$2)],
+	  [m4_if(m4_indir([_m4_set([$1],$2)]), [0],
+		 [m4_define([_m4_set([$1],$2)],
+			    [1])_m4_set_size([$1], [m4_incr])$3], [$4])],
+	  [m4_define([_m4_set([$1],$2)],
+		     [1])m4_pushdef([_m4_set([$1])],
+				    [$2])_m4_set_size([$1], [m4_incr])$3])])
+
+# m4_set_add_all(SET, VALUE...)
+# -----------------------------
+# Add each VALUE into SET.  This is O(n) in the number of VALUEs, and
+# can be faster than calling m4_set_add for each VALUE.
+#
+# Implement two recursion helpers; the check variant is slower but
+# handles the case where an element has previously been removed but
+# not pruned.  The recursion helpers ignore their second argument, so
+# that we can use the faster m4_shift2 and 2 arguments, rather than
+# _m4_shift2 and one argument, as the signal to end recursion.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_set_add_all],
+[m4_define([_m4_set_size($1)], m4_eval(m4_set_size([$1])
+  + m4_len(m4_ifdef([_m4_set_cleanup($1)], [_$0_check], [_$0])([$1], $@))))])
+
+m4_define([_m4_set_add_all],
+[m4_if([$#], [2], [],
+       [m4_ifdef([_m4_set([$1],$3)], [],
+		 [m4_define([_m4_set([$1],$3)], [1])m4_pushdef([_m4_set([$1])],
+	   [$3])-])$0([$1], m4_shift2($@))])])
+
+m4_define([_m4_set_add_all_check],
+[m4_if([$#], [2], [],
+       [m4_set_add([$1], [$3])$0([$1], m4_shift2($@))])])
+
+# m4_set_contains(SET, VALUE, [IF-PRESENT], [IF-ABSENT])
+# ------------------------------------------------------
+# Expand IF-PRESENT if SET contains VALUE, otherwise expand IF-ABSENT.
+# This is always O(1).
+m4_define([m4_set_contains],
+[m4_ifdef([_m4_set_cleanup($1)],
+	  [m4_if(m4_ifdef([_m4_set([$1],$2)],
+		    [m4_indir([_m4_set([$1],$2)])], [0]), [1], [$3], [$4])],
+	  [m4_ifdef([_m4_set([$1],$2)], [$3], [$4])])])
+
+# m4_set_contents(SET, [SEP])
+# ---------------------------
+# Expand to a single string containing all the elements in SET,
+# separated by SEP, without modifying SET.  No provision is made for
+# disambiguating set elements that contain non-empty SEP as a
+# sub-string, or for recognizing a set that contains only the empty
+# string.  Order of the output is not guaranteed.  If any elements
+# have been previously removed from the set, this action will prune
+# the unused memory.  This is O(n) in the size of the set before
+# pruning.
+#
+# Use _m4_popdef for speed.  The existence of _m4_set_cleanup($1)
+# determines which version of _1 helper we use.
+m4_define([m4_set_contents],
+[m4_set_map_sep([$1], [], [], [[$2]])])
+
+# _m4_set_contents_1(SET)
+# _m4_set_contents_1c(SET)
+# _m4_set_contents_2(SET, [PRE], [POST], [SEP])
+# ---------------------------------------------
+# Expand to a list of quoted elements currently in the set, each
+# surrounded by PRE and POST, and moving SEP in front of PRE on
+# recursion.  To avoid nesting limit restrictions, the algorithm must
+# be broken into two parts; _1 destructively copies the stack in
+# reverse into _m4_set_($1), producing no output; then _2
+# destructively copies _m4_set_($1) back into the stack in reverse.
+# If no elements were deleted, then this visits the set in the order
+# that elements were inserted.  Behavior is undefined if PRE/POST/SEP
+# tries to recursively list or modify SET in any way other than
+# calling m4_set_remove on the current element.  Use _1 if all entries
+# in the stack are guaranteed to be in the set, and _1c to prune
+# removed entries.  Uses _m4_defn and _m4_popdef for speed.
+m4_define([_m4_set_contents_1],
+[_m4_stack_reverse([_m4_set([$1])], [_m4_set_($1)])])
+
+m4_define([_m4_set_contents_1c],
+[m4_ifdef([_m4_set([$1])],
+	  [m4_set_contains([$1], _m4_defn([_m4_set([$1])]),
+		   [m4_pushdef([_m4_set_($1)], _m4_defn([_m4_set([$1])]))],
+		   [_m4_popdef([_m4_set([$1],]_m4_defn(
+      [_m4_set([$1])])[)])])_m4_popdef([_m4_set([$1])])$0([$1])],
+	  [_m4_popdef([_m4_set_cleanup($1)])])])
+
+m4_define([_m4_set_contents_2],
+[_m4_stack_reverse([_m4_set_($1)], [_m4_set([$1])],
+  [$2[]_m4_defn([_m4_set_($1)])$3], [$4[]])])
+
+# m4_set_delete(SET)
+# ------------------
+# Delete all elements in SET, and reclaim any memory occupied by the
+# set.  This is O(n) in the set size.
+#
+# Use _m4_defn and _m4_popdef for speed.
+m4_define([m4_set_delete],
+[m4_ifdef([_m4_set([$1])],
+	  [_m4_popdef([_m4_set([$1],]_m4_defn([_m4_set([$1])])[)],
+		      [_m4_set([$1])])$0([$1])],
+	  [m4_ifdef([_m4_set_cleanup($1)],
+		    [_m4_popdef([_m4_set_cleanup($1)])])m4_ifdef(
+		    [_m4_set_size($1)],
+		    [_m4_popdef([_m4_set_size($1)])])])])
+
+# m4_set_difference(SET1, SET2)
+# -----------------------------
+# Produce a LIST of quoted elements that occur in SET1 but not SET2.
+# Output a comma prior to any elements, to distinguish the empty
+# string from no elements.  This can be directly used as a series of
+# arguments, such as for m4_join, or wrapped inside quotes for use in
+# m4_foreach.  Order of the output is not guaranteed.
+#
+# Short-circuit the idempotence relation.
+m4_define([m4_set_difference],
+[m4_if([$1], [$2], [], [m4_set_map_sep([$1], [_$0([$2],], [)])])])
+
+m4_define([_m4_set_difference],
+[m4_set_contains([$1], [$2], [], [,[$2]])])
+
+# m4_set_dump(SET, [SEP])
+# -----------------------
+# Expand to a single string containing all the elements in SET,
+# separated by SEP, then delete SET.  In general, if you only need to
+# list the contents once, this is faster than m4_set_contents.  No
+# provision is made for disambiguating set elements that contain
+# non-empty SEP as a sub-string.  Order of the output is not
+# guaranteed.  This is O(n) in the size of the set before pruning.
+#
+# Use _m4_popdef for speed.  Use existence of _m4_set_cleanup($1) to
+# decide if more expensive recursion is needed.
+m4_define([m4_set_dump],
+[m4_ifdef([_m4_set_size($1)],
+	  [_m4_popdef([_m4_set_size($1)])])m4_ifdef([_m4_set_cleanup($1)],
+    [_$0_check], [_$0])([$1], [], [$2])])
+
+# _m4_set_dump(SET, [SEP], [PREP])
+# _m4_set_dump_check(SET, [SEP], [PREP])
+# --------------------------------------
+# Print SEP and the current element, then delete the element and
+# recurse with empty SEP changed to PREP.  The check variant checks
+# whether the element has been previously removed.  Use _m4_defn and
+# _m4_popdef for speed.
+m4_define([_m4_set_dump],
+[m4_ifdef([_m4_set([$1])],
+	  [[$2]_m4_defn([_m4_set([$1])])_m4_popdef([_m4_set([$1],]_m4_defn(
+		[_m4_set([$1])])[)], [_m4_set([$1])])$0([$1], [$2$3])])])
+
+m4_define([_m4_set_dump_check],
+[m4_ifdef([_m4_set([$1])],
+	  [m4_set_contains([$1], _m4_defn([_m4_set([$1])]),
+			   [[$2]_m4_defn([_m4_set([$1])])])_m4_popdef(
+    [_m4_set([$1],]_m4_defn([_m4_set([$1])])[)],
+    [_m4_set([$1])])$0([$1], [$2$3])],
+	  [_m4_popdef([_m4_set_cleanup($1)])])])
+
+# m4_set_empty(SET, [IF-EMPTY], [IF-ELEMENTS])
+# --------------------------------------------
+# Expand IF-EMPTY if SET has no elements, otherwise IF-ELEMENTS.
+m4_define([m4_set_empty],
+[m4_ifdef([_m4_set_size($1)],
+	  [m4_if(m4_indir([_m4_set_size($1)]), [0], [$2], [$3])], [$2])])
+
+# m4_set_foreach(SET, VAR, ACTION)
+# --------------------------------
+# For each element of SET, define VAR to the element and expand
+# ACTION.  ACTION should not recursively list SET's contents, add
+# elements to SET, nor delete any element from SET except the one
+# currently in VAR.  The order that the elements are visited in is not
+# guaranteed.  This is faster than the corresponding m4_foreach([VAR],
+#   m4_indir([m4_dquote]m4_set_listc([SET])), [ACTION])
+m4_define([m4_set_foreach],
+[m4_pushdef([$2])m4_set_map_sep([$1], [m4_define([$2],], [)$3])])
+
+# m4_set_intersection(SET1, SET2)
+# -------------------------------
+# Produce a LIST of quoted elements that occur in both SET1 or SET2.
+# Output a comma prior to any elements, to distinguish the empty
+# string from no elements.  This can be directly used as a series of
+# arguments, such as for m4_join, or wrapped inside quotes for use in
+# m4_foreach.  Order of the output is not guaranteed.
+#
+# Iterate over the smaller set, and short-circuit the idempotence
+# relation.
+m4_define([m4_set_intersection],
+[m4_if([$1], [$2], [m4_set_listc([$1])],
+       m4_eval(m4_set_size([$2]) < m4_set_size([$1])), [1], [$0([$2], [$1])],
+       [m4_set_map_sep([$1], [_$0([$2],], [)])])])
+
+m4_define([_m4_set_intersection],
+[m4_set_contains([$1], [$2], [,[$2]])])
+
+# m4_set_list(SET)
+# m4_set_listc(SET)
+# -----------------
+# Produce a LIST of quoted elements of SET.  This can be directly used
+# as a series of arguments, such as for m4_join or m4_set_add_all, or
+# wrapped inside quotes for use in m4_foreach or m4_map.  With
+# m4_set_list, there is no way to distinguish an empty set from a set
+# containing only the empty string; with m4_set_listc, a leading comma
+# is output if there are any elements.
+m4_define([m4_set_list],
+[m4_set_map_sep([$1], [], [], [,])])
+
+m4_define([m4_set_listc],
+[m4_set_map_sep([$1], [,])])
+
+# m4_set_map(SET, ACTION)
+# -----------------------
+# For each element of SET, expand ACTION with a single argument of the
+# current element.  ACTION should not recursively list SET's contents,
+# add elements to SET, nor delete any element from SET except the one
+# passed as an argument.  The order that the elements are visited in
+# is not guaranteed.  This is faster than either of the corresponding
+#   m4_map_args([ACTION]m4_set_listc([SET]))
+#   m4_set_foreach([SET], [VAR], [ACTION(m4_defn([VAR]))])
+m4_define([m4_set_map],
+[m4_set_map_sep([$1], [$2(], [)])])
+
+# m4_set_map_sep(SET, [PRE], [POST], [SEP])
+# -----------------------------------------
+# For each element of SET, expand PRE[value]POST[], and expand SEP
+# between elements.
+m4_define([m4_set_map_sep],
+[m4_ifdef([_m4_set_cleanup($1)], [_m4_set_contents_1c],
+	  [_m4_set_contents_1])([$1])_m4_set_contents_2($@)])
+
+# m4_set_remove(SET, VALUE, [IF-PRESENT], [IF-ABSENT])
+# ----------------------------------------------------
+# If VALUE is an element of SET, delete it and expand IF-PRESENT.
+# Otherwise expand IF-ABSENT.  Deleting a single value is O(1),
+# although it leaves memory occupied until the next O(n) traversal of
+# the set which will compact the set.
+#
+# Optimize if the element being removed is the most recently added,
+# since defining _m4_set_cleanup($1) slows down so many other macros.
+# In particular, this plays well with m4_set_foreach and m4_set_map.
+m4_define([m4_set_remove],
+[m4_set_contains([$1], [$2], [_m4_set_size([$1],
+    [m4_decr])m4_if(_m4_defn([_m4_set([$1])]), [$2],
+		    [_m4_popdef([_m4_set([$1],$2)], [_m4_set([$1])])],
+		    [m4_define([_m4_set_cleanup($1)])m4_define(
+		      [_m4_set([$1],$2)], [0])])$3], [$4])])
+
+# m4_set_size(SET)
+# ----------------
+# Expand to the number of elements currently in SET.  This operation
+# is O(1), and thus more efficient than m4_count(m4_set_list([SET])).
+m4_define([m4_set_size],
+[m4_ifdef([_m4_set_size($1)], [m4_indir([_m4_set_size($1)])], [0])])
+
+# _m4_set_size(SET, ACTION)
+# -------------------------
+# ACTION must be either m4_incr or m4_decr, and the size of SET is
+# changed accordingly.  If the set is empty, ACTION must not be
+# m4_decr.
+m4_define([_m4_set_size],
+[m4_define([_m4_set_size($1)],
+	   m4_ifdef([_m4_set_size($1)], [$2(m4_indir([_m4_set_size($1)]))],
+		    [1]))])
+
+# m4_set_union(SET1, SET2)
+# ------------------------
+# Produce a LIST of double quoted elements that occur in either SET1
+# or SET2, without duplicates.  Output a comma prior to any elements,
+# to distinguish the empty string from no elements.  This can be
+# directly used as a series of arguments, such as for m4_join, or
+# wrapped inside quotes for use in m4_foreach.  Order of the output is
+# not guaranteed.
+#
+# We can rely on the fact that m4_set_listc prunes SET1, so we don't
+# need to check _m4_set([$1],element) for 0.  Short-circuit the
+# idempotence relation.
+m4_define([m4_set_union],
+[m4_set_listc([$1])m4_if([$1], [$2], [],
+  [m4_set_map_sep([$2], [_$0([$1],], [)])])])
+
+m4_define([_m4_set_union],
+[m4_ifdef([_m4_set([$1],$2)], [], [,[$2]])])
+
 
 ## ------------------- ##
-## 12. File handling.  ##
+## 16. File handling.  ##
 ## ------------------- ##
 
 
 # It is a real pity that M4 comes with no macros to bind a diversion
 # to a file.  So we have to deal without, which makes us a lot more
-# fragile that we should.
+# fragile than we should.
 
 
 # m4_file_append(FILE-NAME, CONTENT)
@@ -1755,22 +3252,50 @@
 
 
 ## ------------------------ ##
-## 13. Setting M4sugar up.  ##
+## 17. Setting M4sugar up.  ##
 ## ------------------------ ##
 
+# _m4_divert_diversion should be defined.
+m4_divert_push([KILL])
 
 # m4_init
 # -------
+# Initialize the m4sugar language.
 m4_define([m4_init],
 [# All the M4sugar macros start with `m4_', except `dnl' kept as is
 # for sake of simplicity.
 m4_pattern_forbid([^_?m4_])
 m4_pattern_forbid([^dnl$])
 
-# Check the divert push/pop perfect balance.
-m4_wrap([m4_ifdef([_m4_divert_diversion],
-	   [m4_fatal([$0: unbalanced m4_divert_push:]_m4_divert_n_stack)])[]])
+# If __m4_version__ is defined, we assume that we are being run by M4
+# 1.6 or newer, thus $@ recursion is linear, and debugmode(+do)
+# is available for faster checks of dereferencing undefined macros
+# and forcing dumpdef to print to stderr regardless of debugfile.
+# But if it is missing, we assume we are being run by M4 1.4.x, that
+# $@ recursion is quadratic, and that we need foreach-based
+# replacement macros.  Also, m4 prior to 1.4.8 loses track of location
+# during m4wrap text; __line__ should never be 0.
+#
+# Use the raw builtin to avoid tripping up include tracing.
+# Meanwhile, avoid m4_copy, since it temporarily undefines m4_defn.
+m4_ifdef([__m4_version__],
+[m4_debugmode([+do])
+m4_define([m4_defn], _m4_defn([_m4_defn]))
+m4_define([m4_dumpdef], _m4_defn([_m4_dumpdef]))
+m4_define([m4_popdef], _m4_defn([_m4_popdef]))
+m4_define([m4_undefine], _m4_defn([_m4_undefine]))],
+[m4_builtin([include], [m4sugar/foreach.m4])
+m4_wrap_lifo([m4_if(__line__, [0], [m4_pushdef([m4_location],
+]]m4_dquote(m4_dquote(m4_dquote(__file__:__line__)))[[)])])])
 
-m4_divert_push([KILL])
-m4_wrap([m4_divert_pop([KILL])[]])
+# Rewrite the first entry of the diversion stack.
+m4_divert([KILL])
+
+# Check the divert push/pop perfect balance.
+# Some users are prone to also use m4_wrap to register last-minute
+# m4_divert_text; so after our diversion cleanups, we restore
+# KILL as the bottom of the diversion stack.
+m4_wrap([m4_popdef([_m4_divert_diversion])m4_ifdef(
+  [_m4_divert_diversion], [m4_fatal([$0: unbalanced m4_divert_push:
+]m4_divert_stack)])_m4_popdef([_m4_divert_stack])m4_divert_push([KILL])])
 ])
diff --git a/data/stack.hh b/data/stack.hh
new file mode 100644
index 0000000..ab1049c
--- /dev/null
+++ b/data/stack.hh
@@ -0,0 +1,121 @@
+# C++ skeleton for Bison
+
+# Copyright (C) 2002-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+m4_pushdef([b4_copyright_years],
+           [2002-2012])
+
+b4_output_begin([b4_dir_prefix[]stack.hh])
+b4_copyright([Stack handling for Bison parsers in C++],
+             [2002-2012])[
+
+/**
+ ** \file ]b4_dir_prefix[stack.hh
+ ** Define the ]b4_namespace_ref[::stack class.
+ */
+
+]b4_cpp_guard_open([b4_dir_prefix[]stack.hh])[
+
+# include <deque>
+
+]b4_namespace_open[
+  template <class T, class S = std::deque<T> >
+  class stack
+  {
+  public:
+    // Hide our reversed order.
+    typedef typename S::reverse_iterator iterator;
+    typedef typename S::const_reverse_iterator const_iterator;
+
+    stack () : seq_ ()
+    {
+    }
+
+    stack (unsigned int n) : seq_ (n)
+    {
+    }
+
+    inline
+    T&
+    operator [] (unsigned int i)
+    {
+      return seq_[i];
+    }
+
+    inline
+    const T&
+    operator [] (unsigned int i) const
+    {
+      return seq_[i];
+    }
+
+    inline
+    void
+    push (const T& t)
+    {
+      seq_.push_front (t);
+    }
+
+    inline
+    void
+    pop (unsigned int n = 1)
+    {
+      for (; n; --n)
+        seq_.pop_front ();
+    }
+
+    inline
+    unsigned int
+    height () const
+    {
+      return seq_.size ();
+    }
+
+    inline const_iterator begin () const { return seq_.rbegin (); }
+    inline const_iterator end () const { return seq_.rend (); }
+
+  private:
+    S seq_;
+  };
+
+  /// Present a slice of the top of a stack.
+  template <class T, class S = stack<T> >
+  class slice
+  {
+  public:
+    slice (const S& stack, unsigned int range)
+      : stack_ (stack)
+      , range_ (range)
+    {
+    }
+
+    inline
+    const T&
+    operator [] (unsigned int i) const
+    {
+      return stack_[range_ - i];
+    }
+
+  private:
+    const S& stack_;
+    unsigned int range_;
+  };
+]b4_namespace_close[
+
+]b4_cpp_guard_close([b4_dir_prefix[]stack.hh])
+b4_output_end()
+
+m4_popdef([b4_copyright_years])
diff --git a/data/xslt/bison.xsl b/data/xslt/bison.xsl
new file mode 100644
index 0000000..40575ef
--- /dev/null
+++ b/data/xslt/bison.xsl
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+    bison.xsl - common templates for Bison XSLT.
+
+    Copyright (C) 2007-2012 Free Software Foundation, Inc.
+
+    This file is part of Bison, the GNU Compiler Compiler.
+
+    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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+  -->
+
+<xsl:stylesheet version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:bison="http://www.gnu.org/software/bison/">
+
+<xsl:key
+  name="bison:symbolByName"
+  match="/bison-xml-report/grammar/nonterminals/nonterminal"
+  use="@name"
+/>
+<xsl:key
+  name="bison:symbolByName"
+  match="/bison-xml-report/grammar/terminals/terminal"
+  use="@name"
+/>
+<xsl:key
+  name="bison:ruleByNumber"
+  match="/bison-xml-report/grammar/rules/rule"
+  use="@number"
+/>
+<xsl:key
+  name="bison:ruleByLhs"
+  match="/bison-xml-report/grammar/rules/rule[
+         @usefulness != 'useless-in-grammar']"
+  use="lhs"
+/>
+<xsl:key
+  name="bison:ruleByRhs"
+  match="/bison-xml-report/grammar/rules/rule[
+         @usefulness != 'useless-in-grammar']"
+  use="rhs/symbol"
+/>
+
+<!-- For the specified state, output: #sr-conflicts,#rr-conflicts -->
+<xsl:template match="state" mode="bison:count-conflicts">
+  <xsl:variable name="transitions" select="actions/transitions"/>
+  <xsl:variable name="reductions" select="actions/reductions"/>
+  <xsl:variable
+    name="terminals"
+    select="
+      $transitions/transition[@type='shift']/@symbol
+      | $reductions/reduction/@symbol
+    "
+  />
+  <xsl:variable name="conflict-data">
+    <xsl:for-each select="$terminals">
+      <xsl:variable name="name" select="."/>
+      <xsl:if test="generate-id($terminals[. = $name][1]) = generate-id(.)">
+        <xsl:variable
+          name="shift-count"
+          select="count($transitions/transition[@symbol=$name])"
+        />
+        <xsl:variable
+          name="reduce-count"
+          select="count($reductions/reduction[@symbol=$name])"
+        />
+        <xsl:if test="$shift-count > 0 and $reduce-count > 0">
+          <xsl:text>s</xsl:text>
+        </xsl:if>
+        <xsl:if test="$reduce-count > 1">
+          <xsl:text>r</xsl:text>
+        </xsl:if>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:value-of select="string-length(translate($conflict-data, 'r', ''))"/>
+  <xsl:text>,</xsl:text>
+  <xsl:value-of select="string-length(translate($conflict-data, 's', ''))"/>
+</xsl:template>
+
+<xsl:template name="space">
+  <xsl:param name="repeat">0</xsl:param>
+  <xsl:param name="fill" select="' '"/>
+  <xsl:if test="number($repeat) &gt;= 1">
+    <xsl:call-template name="space">
+      <xsl:with-param name="repeat" select="$repeat - 1"/>
+      <xsl:with-param name="fill" select="$fill"/>
+    </xsl:call-template>
+    <xsl:value-of select="$fill"/>
+  </xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/data/xslt/xml2dot.xsl b/data/xslt/xml2dot.xsl
new file mode 100644
index 0000000..dceb8e1
--- /dev/null
+++ b/data/xslt/xml2dot.xsl
@@ -0,0 +1,397 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+    xml2dot.xsl - transform Bison XML Report into DOT.
+
+    Copyright (C) 2007-2012 Free Software Foundation, Inc.
+
+    This file is part of Bison, the GNU Compiler Compiler.
+
+    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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+    Written by Wojciech Polak <polak@gnu.org>.
+  -->
+
+<xsl:stylesheet version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:bison="http://www.gnu.org/software/bison/">
+
+<xsl:import href="bison.xsl"/>
+<xsl:output method="text" encoding="UTF-8" indent="no"/>
+
+<xsl:template match="/">
+  <xsl:apply-templates select="bison-xml-report"/>
+</xsl:template>
+
+<xsl:template match="bison-xml-report">
+  <xsl:text>// Generated by GNU Bison </xsl:text>
+  <xsl:value-of select="@version"/>
+  <xsl:text>.&#10;</xsl:text>
+  <xsl:text>// Report bugs to &lt;</xsl:text>
+  <xsl:value-of select="@bug-report"/>
+  <xsl:text>&gt;.&#10;</xsl:text>
+  <xsl:text>// Home page: &lt;</xsl:text>
+  <xsl:value-of select="@url"/>
+  <xsl:text>&gt;.&#10;&#10;</xsl:text>
+  <xsl:apply-templates select="automaton">
+    <xsl:with-param name="filename" select="filename"/>
+  </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="automaton">
+  <xsl:param name="filename"/>
+  <xsl:text>digraph "</xsl:text>
+  <xsl:call-template name="escape">
+    <xsl:with-param name="subject" select="$filename"/>
+  </xsl:call-template>
+  <xsl:text>"&#10;{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+</xsl:text>
+  <xsl:apply-templates select="state"/>
+  <xsl:text>}&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="automaton/state">
+  <xsl:call-template name="output-node">
+    <xsl:with-param name="number" select="@number"/>
+    <xsl:with-param name="label">
+      <xsl:apply-templates select="itemset/item"/>
+    </xsl:with-param>
+  </xsl:call-template>
+  <xsl:apply-templates select="actions/transitions"/>
+  <xsl:apply-templates select="actions/reductions">
+    <xsl:with-param name="staten">
+      <xsl:value-of select="@number"/>
+    </xsl:with-param>
+  </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="actions/reductions">
+  <xsl:param name="staten"/>
+  <xsl:for-each select='reduction'>
+    <!-- These variables are needed because the current context can't be
+         refered to directly in XPath expressions. -->
+    <xsl:variable name="rul">
+      <xsl:value-of select="@rule"/>
+    </xsl:variable>
+    <xsl:variable name="ena">
+      <xsl:value-of select="@enabled"/>
+    </xsl:variable>
+    <!-- The foreach's body is protected by this, so that we are actually
+         going to iterate once per reduction rule, and not per lookahead. -->
+    <xsl:if test='not(preceding-sibling::*[@rule=$rul and @enabled=$ena])'>
+      <xsl:variable name="rule">
+        <xsl:choose>
+          <!-- The acceptation state is refered to as 'accept' in the XML, but
+               just as '0' in the DOT. -->
+          <xsl:when test="@rule='accept'">
+            <xsl:text>0</xsl:text>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:value-of select="@rule"/>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:variable>
+
+      <!-- The edge's beginning -->
+      <xsl:call-template name="reduction-edge-start">
+        <xsl:with-param name="state" select="$staten"/>
+        <xsl:with-param name="rule" select="$rule"/>
+        <xsl:with-param name="enabled" select="@enabled"/>
+      </xsl:call-template>
+
+      <!-- The edge's tokens -->
+      <!-- Don't show labels for the default action. In other cases, there will
+           always be at least one token, so 'label="[]"' will not occur. -->
+      <xsl:if test='$rule!=0 and not(../reduction[@enabled=$ena and @rule=$rule and @symbol="$default"])'>
+        <xsl:text>label="[</xsl:text>
+        <xsl:for-each select='../reduction[@enabled=$ena and @rule=$rule]'>
+          <xsl:call-template name="escape">
+            <xsl:with-param name="subject" select="@symbol"/>
+          </xsl:call-template>
+          <xsl:if test="position() != last ()">
+            <xsl:text>, </xsl:text>
+          </xsl:if>
+        </xsl:for-each>
+        <xsl:text>]", </xsl:text>
+      </xsl:if>
+
+      <!-- The edge's end -->
+      <xsl:text>style=solid]&#10;</xsl:text>
+
+      <!-- The diamond representing the reduction -->
+      <xsl:call-template name="reduction-node">
+        <xsl:with-param name="state" select="$staten"/>
+        <xsl:with-param name="rule" select="$rule"/>
+        <xsl:with-param name="color">
+          <xsl:choose>
+            <xsl:when test='@enabled="true"'>
+              <xsl:text>3</xsl:text>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:text>5</xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:with-param>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="actions/transitions">
+  <xsl:apply-templates select="transition"/>
+</xsl:template>
+
+<xsl:template match="item">
+  <xsl:param name="prev-rule-number"
+    select="preceding-sibling::item[1]/@rule-number"/>
+  <xsl:apply-templates select="key('bison:ruleByNumber', @rule-number)">
+    <xsl:with-param name="point" select="@point"/>
+    <xsl:with-param name="num" select="@rule-number"/>
+    <xsl:with-param name="prev-lhs"
+      select="key('bison:ruleByNumber', $prev-rule-number)/lhs[text()]"
+   />
+  </xsl:apply-templates>
+  <xsl:apply-templates select="lookaheads"/>
+</xsl:template>
+
+<xsl:template match="rule">
+  <xsl:param name="point"/>
+  <xsl:param name="num"/>
+  <xsl:param name="prev-lhs"/>
+  <xsl:text>&#10;</xsl:text>
+  <xsl:choose>
+    <xsl:when test="$num &lt; 10">
+      <xsl:text>  </xsl:text>
+    </xsl:when>
+    <xsl:when test="$num &lt; 100">
+      <xsl:text> </xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:text></xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+  <xsl:value-of select="$num"/>
+  <xsl:text> </xsl:text>
+  <xsl:choose>
+  <xsl:when test="$prev-lhs = lhs[text()]">
+      <xsl:call-template name="lpad">
+        <xsl:with-param name="str" select="'|'"/>
+        <xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 1"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="lhs"/>
+      <xsl:text>:</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+  <xsl:if test="$point = 0">
+    <xsl:text> .</xsl:text>
+  </xsl:if>
+  <xsl:for-each select="rhs/symbol|rhs/empty">
+    <xsl:apply-templates select="."/>
+    <xsl:if test="$point = position()">
+      <xsl:text> .</xsl:text>
+    </xsl:if>
+  </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="symbol">
+  <xsl:text> </xsl:text>
+  <xsl:value-of select="."/>
+</xsl:template>
+
+<xsl:template match="empty"/>
+
+<xsl:template match="lookaheads">
+  <xsl:text>  [</xsl:text>
+  <xsl:apply-templates select="symbol"/>
+  <xsl:text>]</xsl:text>
+</xsl:template>
+
+<xsl:template match="lookaheads/symbol">
+  <xsl:value-of select="."/>
+  <xsl:if test="position() != last()">
+    <xsl:text>, </xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template name="reduction-edge-start">
+  <xsl:param name="state"/>
+  <xsl:param name="rule"/>
+  <xsl:param name="enabled"/>
+
+  <xsl:text>  </xsl:text>
+  <xsl:value-of select="$state"/>
+  <xsl:text> -> "</xsl:text>
+  <xsl:value-of select="$state"/>
+  <xsl:text>R</xsl:text>
+  <xsl:value-of select="$rule"/>
+  <xsl:if test='$enabled = "false"'>
+    <xsl:text>d</xsl:text>
+  </xsl:if>
+  <xsl:text>" [</xsl:text>
+</xsl:template>
+
+<xsl:template name="reduction-node">
+  <xsl:param name="state"/>
+  <xsl:param name="rule"/>
+  <xsl:param name="color"/>
+
+  <xsl:text> "</xsl:text>
+  <xsl:value-of select="$state"/>
+  <xsl:text>R</xsl:text>
+  <xsl:value-of select="$rule"/>
+  <xsl:if test="$color = 5">
+    <xsl:text>d</xsl:text>
+  </xsl:if>
+  <xsl:text>" [label="</xsl:text>
+  <xsl:choose>
+  <xsl:when test="$rule = 0">
+    <xsl:text>Acc", fillcolor=1</xsl:text>
+  </xsl:when>
+  <xsl:otherwise>
+    <xsl:text>R</xsl:text>
+    <xsl:value-of select="$rule"/>
+    <xsl:text>", fillcolor=</xsl:text>
+    <xsl:value-of select="$color"/>
+  </xsl:otherwise>
+  </xsl:choose>
+  <xsl:text>, shape=diamond, style=filled]&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="transition">
+  <xsl:call-template name="output-edge">
+    <xsl:with-param name="src" select="../../../@number"/>
+    <xsl:with-param name="dst" select="@state"/>
+    <xsl:with-param name="style">
+      <xsl:choose>
+	<xsl:when test="@symbol = 'error'">
+	  <xsl:text>dotted</xsl:text>
+	</xsl:when>
+	<xsl:when test="@type = 'shift'">
+	  <xsl:text>solid</xsl:text>
+	</xsl:when>
+	<xsl:otherwise>
+	  <xsl:text>dashed</xsl:text>
+	</xsl:otherwise>
+      </xsl:choose>
+    </xsl:with-param>
+    <xsl:with-param name="label">
+      <xsl:if test="not(@symbol = 'error')">
+	<xsl:value-of select="@symbol"/>
+      </xsl:if>
+    </xsl:with-param>
+  </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="output-node">
+  <xsl:param name="number"/>
+  <xsl:param name="label"/>
+  <xsl:text>  </xsl:text>
+  <xsl:value-of select="$number"/>
+  <xsl:text> [label="</xsl:text>
+  <xsl:text>State </xsl:text>
+  <xsl:value-of select="$number"/>
+  <xsl:text>\n</xsl:text>
+  <xsl:call-template name="escape">
+    <xsl:with-param name="subject" select="$label"/>
+  </xsl:call-template>
+  <xsl:text>\l"]&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template name="output-edge">
+  <xsl:param name="src"/>
+  <xsl:param name="dst"/>
+  <xsl:param name="style"/>
+  <xsl:param name="label"/>
+  <xsl:text>  </xsl:text>
+  <xsl:value-of select="$src"/>
+  <xsl:text> -> </xsl:text>
+  <xsl:value-of select="$dst"/>
+  <xsl:text> [style=</xsl:text>
+  <xsl:value-of select="$style"/>
+  <xsl:if test="$label and $label != ''">
+    <xsl:text> label="</xsl:text>
+    <xsl:call-template name="escape">
+      <xsl:with-param name="subject" select="$label"/>
+    </xsl:call-template>
+    <xsl:text>"</xsl:text>
+  </xsl:if>
+  <xsl:text>]&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template name="escape">
+  <xsl:param name="subject"/> <!-- required -->
+  <xsl:call-template name="string-replace">
+    <xsl:with-param name="subject">
+      <xsl:call-template name="string-replace">
+        <xsl:with-param name="subject">
+          <xsl:call-template name="string-replace">
+            <xsl:with-param name="subject" select="$subject"/>
+            <xsl:with-param name="search" select="'\'"/>
+            <xsl:with-param name="replace" select="'\\'"/>
+          </xsl:call-template>
+        </xsl:with-param>
+        <xsl:with-param name="search" select="'&quot;'"/>
+        <xsl:with-param name="replace" select="'\&quot;'"/>
+      </xsl:call-template>
+    </xsl:with-param>
+    <xsl:with-param name="search" select="'&#10;'"/>
+    <xsl:with-param name="replace" select="'\l'"/>
+  </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="string-replace">
+  <xsl:param name="subject"/>
+  <xsl:param name="search"/>
+  <xsl:param name="replace"/>
+  <xsl:choose>
+    <xsl:when test="contains($subject, $search)">
+      <xsl:variable name="before" select="substring-before($subject, $search)"/>
+      <xsl:variable name="after" select="substring-after($subject, $search)"/>
+      <xsl:value-of select="$before"/>
+      <xsl:value-of select="$replace"/>
+      <xsl:call-template name="string-replace">
+        <xsl:with-param name="subject" select="$after"/>
+        <xsl:with-param name="search" select="$search"/>
+        <xsl:with-param name="replace" select="$replace"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$subject"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="lpad">
+  <xsl:param name="str" select="''"/>
+  <xsl:param name="pad" select="0"/>
+  <xsl:variable name="diff" select="$pad - string-length($str)" />
+  <xsl:choose>
+    <xsl:when test="$diff &lt; 0">
+      <xsl:value-of select="$str"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:call-template name="space">
+        <xsl:with-param name="repeat" select="$diff"/>
+      </xsl:call-template>
+      <xsl:value-of select="$str"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/data/xslt/xml2text.xsl b/data/xslt/xml2text.xsl
new file mode 100644
index 0000000..8b3f5ae
--- /dev/null
+++ b/data/xslt/xml2text.xsl
@@ -0,0 +1,569 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+    xml2text.xsl - transform Bison XML Report into plain text.
+
+    Copyright (C) 2007-2012 Free Software Foundation, Inc.
+
+    This file is part of Bison, the GNU Compiler Compiler.
+
+    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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+    Written by Wojciech Polak <polak@gnu.org>.
+  -->
+
+<xsl:stylesheet version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:bison="http://www.gnu.org/software/bison/">
+
+<xsl:import href="bison.xsl"/>
+<xsl:output method="text" encoding="UTF-8" indent="no"/>
+
+<xsl:template match="/">
+  <xsl:apply-templates select="bison-xml-report"/>
+</xsl:template>
+
+<xsl:template match="bison-xml-report">
+  <xsl:apply-templates select="grammar" mode="reductions"/>
+  <xsl:apply-templates select="grammar" mode="useless-in-parser"/>
+  <xsl:apply-templates select="automaton" mode="conflicts"/>
+  <xsl:apply-templates select="grammar"/>
+  <xsl:apply-templates select="automaton"/>
+</xsl:template>
+
+<xsl:template match="grammar" mode="reductions">
+  <xsl:apply-templates select="nonterminals" mode="useless-in-grammar"/>
+  <xsl:apply-templates select="terminals" mode="unused-in-grammar"/>
+  <xsl:apply-templates select="rules" mode="useless-in-grammar"/>
+</xsl:template>
+
+<xsl:template match="nonterminals" mode="useless-in-grammar">
+  <xsl:if test="nonterminal[@usefulness='useless-in-grammar']">
+    <xsl:text>Nonterminals useless in grammar&#10;&#10;</xsl:text>
+    <xsl:for-each select="nonterminal[@usefulness='useless-in-grammar']">
+      <xsl:text>   </xsl:text>
+      <xsl:value-of select="@name"/>
+      <xsl:text>&#10;</xsl:text>
+    </xsl:for-each>
+    <xsl:text>&#10;&#10;</xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="terminals" mode="unused-in-grammar">
+  <xsl:if test="terminal[@usefulness='unused-in-grammar']">
+    <xsl:text>Terminals unused in grammar&#10;&#10;</xsl:text>
+    <xsl:for-each select="terminal[@usefulness='unused-in-grammar']">
+      <xsl:sort select="@symbol-number" data-type="number"/>
+      <xsl:text>   </xsl:text>
+      <xsl:value-of select="@name"/>
+      <xsl:text>&#10;</xsl:text>
+    </xsl:for-each>
+    <xsl:text>&#10;&#10;</xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="rules" mode="useless-in-grammar">
+  <xsl:variable name="set" select="rule[@usefulness='useless-in-grammar']"/>
+  <xsl:if test="$set">
+    <xsl:text>Rules useless in grammar&#10;</xsl:text>
+    <xsl:call-template name="style-rule-set">
+      <xsl:with-param name="rule-set" select="$set"/>
+    </xsl:call-template>
+    <xsl:text>&#10;&#10;</xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="grammar" mode="useless-in-parser">
+  <xsl:variable
+    name="set" select="rules/rule[@usefulness='useless-in-parser']"
+  />
+  <xsl:if test="$set">
+    <xsl:text>Rules useless in parser due to conflicts&#10;</xsl:text>
+    <xsl:call-template name="style-rule-set">
+      <xsl:with-param name="rule-set" select="$set"/>
+    </xsl:call-template>
+    <xsl:text>&#10;&#10;</xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="grammar">
+  <xsl:text>Grammar&#10;</xsl:text>
+  <xsl:call-template name="style-rule-set">
+    <xsl:with-param
+      name="rule-set" select="rules/rule[@usefulness!='useless-in-grammar']"
+    />
+  </xsl:call-template>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <xsl:apply-templates select="terminals"/>
+  <xsl:apply-templates select="nonterminals"/>
+</xsl:template>
+
+<xsl:template name="style-rule-set">
+  <xsl:param name="rule-set"/>
+  <xsl:for-each select="$rule-set">
+    <xsl:apply-templates select=".">
+      <xsl:with-param name="pad" select="'3'"/>
+      <xsl:with-param name="prev-lhs">
+        <xsl:if test="position()>1">
+          <xsl:variable name="position" select="position()"/>
+          <xsl:value-of select="$rule-set[$position - 1]/lhs"/>
+        </xsl:if>
+      </xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="grammar/terminals">
+  <xsl:text>Terminals, with rules where they appear&#10;&#10;</xsl:text>
+  <xsl:apply-templates select="terminal"/>
+  <xsl:text>&#10;&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="grammar/nonterminals">
+  <xsl:text>Nonterminals, with rules where they appear&#10;&#10;</xsl:text>
+  <xsl:apply-templates select="nonterminal[@usefulness!='useless-in-grammar']"/>
+</xsl:template>
+
+<xsl:template match="terminal">
+  <xsl:value-of select="@name"/>
+  <xsl:call-template name="line-wrap">
+    <xsl:with-param name="first-line-length">
+      <xsl:choose>
+        <xsl:when test="string-length(@name) &gt; 66">0</xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="66 - string-length(@name)" />
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:with-param>
+    <xsl:with-param name="line-length" select="66" />
+    <xsl:with-param name="text">
+      <xsl:value-of select="concat(' (', @token-number, ')')"/>
+      <xsl:for-each select="key('bison:ruleByRhs', @name)">
+        <xsl:value-of select="concat(' ', @number)"/>
+      </xsl:for-each>
+    </xsl:with-param>
+  </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="nonterminal">
+  <xsl:value-of select="@name"/>
+  <xsl:value-of select="concat(' (', @symbol-number, ')')"/>
+  <xsl:text>&#10;</xsl:text>
+  <xsl:variable name="output">
+    <xsl:call-template name="line-wrap">
+      <xsl:with-param name="line-length" select="66" />
+      <xsl:with-param name="text">
+        <xsl:text>    </xsl:text>
+        <xsl:if test="key('bison:ruleByLhs', @name)">
+          <xsl:text>on@left:</xsl:text>
+          <xsl:for-each select="key('bison:ruleByLhs', @name)">
+            <xsl:value-of select="concat(' ', @number)"/>
+          </xsl:for-each>
+        </xsl:if>
+        <xsl:if test="key('bison:ruleByRhs', @name)">
+          <xsl:if test="key('bison:ruleByLhs', @name)">
+            <xsl:text>, </xsl:text>
+          </xsl:if>
+          <xsl:text>on@right:</xsl:text>
+          <xsl:for-each select="key('bison:ruleByRhs', @name)">
+            <xsl:value-of select="concat(' ', @number)"/>
+          </xsl:for-each>
+        </xsl:if>
+      </xsl:with-param>
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:value-of select="translate($output, '@', ' ')" />
+</xsl:template>
+
+<xsl:template match="automaton" mode="conflicts">
+  <xsl:variable name="conflict-report">
+    <xsl:apply-templates select="state" mode="conflicts"/>
+  </xsl:variable>
+  <xsl:if test="string-length($conflict-report) != 0">
+    <xsl:value-of select="$conflict-report"/>
+    <xsl:text>&#10;&#10;</xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="state" mode="conflicts">
+  <xsl:variable name="conflict-counts">
+    <xsl:apply-templates select="." mode="bison:count-conflicts" />
+  </xsl:variable>
+  <xsl:variable
+    name="sr-count" select="substring-before($conflict-counts, ',')"
+  />
+  <xsl:variable
+    name="rr-count" select="substring-after($conflict-counts, ',')"
+  />
+  <xsl:if test="$sr-count > 0 or $rr-count > 0">
+    <xsl:value-of select="concat('State ', @number, ' conflicts:')"/>
+    <xsl:if test="$sr-count > 0">
+      <xsl:value-of select="concat(' ', $sr-count, ' shift/reduce')"/>
+      <xsl:if test="$rr-count > 0">
+        <xsl:value-of select="(',')"/>
+      </xsl:if>
+    </xsl:if>
+    <xsl:if test="$rr-count > 0">
+      <xsl:value-of select="concat(' ', $rr-count, ' reduce/reduce')"/>
+    </xsl:if>
+    <xsl:value-of select="'&#10;'"/>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="automaton">
+  <xsl:apply-templates select="state">
+    <xsl:with-param name="pad" select="'3'"/>
+  </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="automaton/state">
+  <xsl:param name="pad"/>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <xsl:text>State </xsl:text>
+  <xsl:value-of select="@number"/>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <xsl:apply-templates select="itemset/item">
+    <xsl:with-param name="pad" select="$pad"/>
+  </xsl:apply-templates>
+  <xsl:apply-templates select="actions/transitions">
+    <xsl:with-param name="type" select="'shift'"/>
+  </xsl:apply-templates>
+  <xsl:apply-templates select="actions/errors"/>
+  <xsl:apply-templates select="actions/reductions"/>
+  <xsl:apply-templates select="actions/transitions">
+    <xsl:with-param name="type" select="'goto'"/>
+  </xsl:apply-templates>
+  <xsl:apply-templates select="solved-conflicts"/>
+</xsl:template>
+
+<xsl:template match="actions/transitions">
+  <xsl:param name="type"/>
+  <xsl:if test="transition[@type = $type]">
+    <xsl:text>&#10;</xsl:text>
+    <xsl:apply-templates select="transition[@type = $type]">
+      <xsl:with-param name="pad">
+	<xsl:call-template name="max-width-symbol">
+	  <xsl:with-param name="node" select="transition[@type = $type]"/>
+	</xsl:call-template>
+      </xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="actions/errors">
+  <xsl:if test="error">
+    <xsl:text>&#10;</xsl:text>
+    <xsl:apply-templates select="error">
+      <xsl:with-param name="pad">
+	<xsl:call-template name="max-width-symbol">
+	  <xsl:with-param name="node" select="error"/>
+	</xsl:call-template>
+      </xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="actions/reductions">
+  <xsl:if test="reduction">
+    <xsl:text>&#10;</xsl:text>
+    <xsl:apply-templates select="reduction">
+      <xsl:with-param name="pad">
+	<xsl:call-template name="max-width-symbol">
+	  <xsl:with-param name="node" select="reduction"/>
+	</xsl:call-template>
+      </xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="item">
+  <xsl:param name="pad"/>
+  <xsl:param name="prev-rule-number"
+	     select="preceding-sibling::item[1]/@rule-number"/>
+  <xsl:apply-templates
+    select="key('bison:ruleByNumber', current()/@rule-number)"
+  >
+    <xsl:with-param name="itemset" select="'true'"/>
+    <xsl:with-param name="pad" select="$pad"/>
+    <xsl:with-param
+      name="prev-lhs"
+      select="key('bison:ruleByNumber', $prev-rule-number)/lhs[text()]"
+   />
+    <xsl:with-param name="point" select="@point"/>
+    <xsl:with-param name="lookaheads">
+      <xsl:apply-templates select="lookaheads"/>
+    </xsl:with-param>
+  </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="rule">
+  <xsl:param name="itemset"/>
+  <xsl:param name="pad"/>
+  <xsl:param name="prev-lhs"/>
+  <xsl:param name="point"/>
+  <xsl:param name="lookaheads"/>
+
+  <xsl:if test="$itemset != 'true' and not($prev-lhs = lhs[text()])">
+    <xsl:text>&#10;</xsl:text>
+  </xsl:if>
+
+  <xsl:text>  </xsl:text>
+  <xsl:call-template name="lpad">
+    <xsl:with-param name="str" select="string(@number)"/>
+    <xsl:with-param name="pad" select="number($pad)"/>
+  </xsl:call-template>
+  <xsl:text> </xsl:text>
+
+  <!-- LHS -->
+  <xsl:choose>
+    <xsl:when test="$itemset != 'true' and $prev-lhs = lhs[text()]">
+      <xsl:call-template name="lpad">
+	<xsl:with-param name="str" select="'|'"/>
+	<xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 1"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="$itemset = 'true' and $prev-lhs = lhs[text()]">
+      <xsl:call-template name="lpad">
+	<xsl:with-param name="str" select="'|'"/>
+	<xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 1"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="lhs"/>
+      <xsl:text>:</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+
+  <!-- RHS -->
+  <xsl:for-each select="rhs/*">
+    <xsl:if test="position() = $point + 1">
+      <xsl:text> .</xsl:text>
+    </xsl:if>
+    <xsl:if test="$itemset = 'true' and name(.) != 'empty'">
+      <xsl:apply-templates select="."/>
+    </xsl:if>
+    <xsl:if test="$itemset != 'true'">
+      <xsl:apply-templates select="."/>
+    </xsl:if>
+    <xsl:if test="position() = last() and position() = $point">
+      <xsl:text> .</xsl:text>
+    </xsl:if>
+  </xsl:for-each>
+  <xsl:if test="$lookaheads">
+    <xsl:value-of select="$lookaheads"/>
+  </xsl:if>
+
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="symbol">
+  <xsl:text> </xsl:text>
+  <xsl:value-of select="."/>
+</xsl:template>
+
+<xsl:template match="empty">
+  <xsl:text> /* empty */</xsl:text>
+</xsl:template>
+
+<xsl:template match="lookaheads">
+  <xsl:text>  [</xsl:text>
+  <xsl:apply-templates select="symbol"/>
+  <xsl:text>]</xsl:text>
+</xsl:template>
+
+<xsl:template match="lookaheads/symbol">
+  <xsl:value-of select="."/>
+  <xsl:if test="position() != last()">
+    <xsl:text>, </xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="transition">
+  <xsl:param name="pad"/>
+  <xsl:text>    </xsl:text>
+  <xsl:call-template name="rpad">
+    <xsl:with-param name="str" select="string(@symbol)"/>
+    <xsl:with-param name="pad" select="number($pad) + 2"/>
+  </xsl:call-template>
+  <xsl:choose>
+    <xsl:when test="@type = 'shift'">
+      <xsl:text>shift, and go to state </xsl:text>
+      <xsl:value-of select="@state"/>
+    </xsl:when>
+    <xsl:when test="@type = 'goto'">
+      <xsl:text>go to state </xsl:text>
+      <xsl:value-of select="@state"/>
+    </xsl:when>
+  </xsl:choose>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="error">
+  <xsl:param name="pad"/>
+  <xsl:text>    </xsl:text>
+  <xsl:call-template name="rpad">
+    <xsl:with-param name="str" select="string(@symbol)"/>
+    <xsl:with-param name="pad" select="number($pad) + 2"/>
+  </xsl:call-template>
+  <xsl:text>error</xsl:text>
+  <xsl:text> (</xsl:text>
+  <xsl:value-of select="text()"/>
+  <xsl:text>)</xsl:text>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="reduction">
+  <xsl:param name="pad"/>
+  <xsl:text>    </xsl:text>
+  <xsl:call-template name="rpad">
+    <xsl:with-param name="str" select="string(@symbol)"/>
+    <xsl:with-param name="pad" select="number($pad) + 2"/>
+  </xsl:call-template>
+  <xsl:if test="@enabled = 'false'">
+    <xsl:text>[</xsl:text>
+  </xsl:if>
+  <xsl:choose>
+    <xsl:when test="@rule = 'accept'">
+      <xsl:text>accept</xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:text>reduce using rule </xsl:text>
+      <xsl:value-of select="@rule"/>
+      <xsl:text> (</xsl:text>
+      <xsl:value-of
+	  select="key('bison:ruleByNumber', current()/@rule)/lhs[text()]"/>
+      <xsl:text>)</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+  <xsl:if test="@enabled = 'false'">
+    <xsl:text>]</xsl:text>
+  </xsl:if>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="solved-conflicts">
+  <xsl:if test="resolution">
+    <xsl:text>&#10;</xsl:text>
+    <xsl:apply-templates select="resolution"/>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="resolution">
+  <xsl:text>    Conflict between rule </xsl:text>
+  <xsl:value-of select="@rule"/>
+  <xsl:text> and token </xsl:text>
+  <xsl:value-of select="@symbol"/>
+  <xsl:text> resolved as </xsl:text>
+  <xsl:if test="@type = 'error'">
+    <xsl:text>an </xsl:text>
+  </xsl:if>
+  <xsl:value-of select="@type"/>
+  <xsl:text> (</xsl:text>
+  <xsl:value-of select="."/>
+  <xsl:text>).&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template name="max-width-symbol">
+  <xsl:param name="node"/>
+  <xsl:variable name="longest">
+    <xsl:for-each select="$node">
+      <xsl:sort data-type="number" select="string-length(@symbol)"
+		order="descending"/>
+      <xsl:if test="position() = 1">
+	<xsl:value-of select="string-length(@symbol)"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:value-of select="$longest"/>
+</xsl:template>
+
+<xsl:template name="lpad">
+  <xsl:param name="str" select="''"/>
+  <xsl:param name="pad" select="0"/>
+  <xsl:variable name="diff" select="$pad - string-length($str)" />
+  <xsl:choose>
+    <xsl:when test="$diff &lt; 0">
+      <xsl:value-of select="$str"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:call-template name="space">
+	<xsl:with-param name="repeat" select="$diff"/>
+      </xsl:call-template>
+      <xsl:value-of select="$str"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="rpad">
+  <xsl:param name="str" select="''"/>
+  <xsl:param name="pad" select="0"/>
+  <xsl:variable name="diff" select="$pad - string-length($str)"/>
+  <xsl:choose>
+    <xsl:when test="$diff &lt; 0">
+      <xsl:value-of select="$str"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$str"/>
+      <xsl:call-template name="space">
+	<xsl:with-param name="repeat" select="$diff"/>
+      </xsl:call-template>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="line-wrap">
+  <xsl:param name="line-length"/> <!-- required -->
+  <xsl:param name="first-line-length" select="$line-length"/>
+  <xsl:param name="text"/> <!-- required -->
+  <xsl:choose>
+    <xsl:when test="normalize-space($text) = ''" />
+    <xsl:when test="string-length($text) &lt;= $first-line-length">
+      <xsl:value-of select="concat($text, '&#10;')" />
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:variable name="break-pos">
+        <xsl:call-template name="ws-search">
+          <xsl:with-param name="text" select="$text" />
+          <xsl:with-param name="start" select="$first-line-length+1" />
+        </xsl:call-template>
+      </xsl:variable>
+      <xsl:value-of select="substring($text, 1, $break-pos - 1)" />
+      <xsl:text>&#10;</xsl:text>
+      <xsl:call-template name="line-wrap">
+        <xsl:with-param name="line-length" select="$line-length" />
+        <xsl:with-param
+          name="text" select="concat('    ', substring($text, $break-pos+1))"
+        />
+      </xsl:call-template>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="ws-search">
+  <xsl:param name="text"/> <!-- required -->
+  <xsl:param name="start"/> <!-- required -->
+  <xsl:variable name="search-text" select="substring($text, $start)" />
+  <xsl:choose>
+    <xsl:when test="not(contains($search-text, ' '))">
+      <xsl:value-of select="string-length($text)+1" />
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of
+        select="$start + string-length(substring-before($search-text, ' '))"
+      />
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/data/xslt/xml2xhtml.xsl b/data/xslt/xml2xhtml.xsl
new file mode 100644
index 0000000..f8126cf
--- /dev/null
+++ b/data/xslt/xml2xhtml.xsl
@@ -0,0 +1,745 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+    xml2html.xsl - transform Bison XML Report into XHTML.
+
+    Copyright (C) 2007-2012 Free Software Foundation, Inc.
+
+    This file is part of Bison, the GNU Compiler Compiler.
+
+    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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+    Written by Wojciech Polak <polak@gnu.org>.
+  -->
+
+<xsl:stylesheet version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:bison="http://www.gnu.org/software/bison/">
+
+<xsl:import href="bison.xsl"/>
+
+<xsl:output method="xml" encoding="UTF-8"
+	    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+	    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+	    indent="yes"/>
+
+<xsl:template match="/">
+  <html>
+    <head>
+      <title>
+	<xsl:value-of select="bison-xml-report/filename"/>
+	<xsl:text> - GNU Bison XML Automaton Report</xsl:text>
+      </title>
+      <style type="text/css"><![CDATA[
+      body {
+        font-family: "Nimbus Sans L", Arial, sans-serif;
+	font-size: 9pt;
+      }
+      a:link {
+	color: #1f00ff;
+	text-decoration: none;
+      }
+      a:visited {
+	color: #1f00ff;
+	text-decoration: none;
+      }
+      a:hover {
+	color: red;
+      }
+      #menu a {
+        text-decoration: underline;
+      }
+      .i {
+        font-style: italic;
+      }
+      .pre {
+        font-family: monospace;
+        white-space: pre;
+      }
+      ol.decimal {
+        list-style-type: decimal;
+      }
+      ol.lower-alpha {
+        list-style-type: lower-alpha;
+      }
+      .point {
+        color: #cc0000;
+      }
+      #footer {
+        margin-top: 3.5em;
+        font-size: 7pt;
+      }
+      ]]></style>
+    </head>
+    <body>
+      <xsl:apply-templates select="bison-xml-report"/>
+      <xsl:text>&#10;&#10;</xsl:text>
+      <div id="footer"><hr />This document was generated using
+      <a href="http://www.gnu.org/software/bison/" title="GNU Bison">
+      GNU Bison <xsl:value-of select="/bison-xml-report/@version"/></a>
+      XML Automaton Report.<br />
+      <!-- default copying notice -->
+      Verbatim copying and distribution of this entire page is
+      permitted in any medium, provided this notice is preserved.</div>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="bison-xml-report">
+  <h1>GNU Bison XML Automaton Report</h1>
+  <p>
+    input grammar: <span class="i"><xsl:value-of select="filename"/></span>
+  </p>
+
+  <xsl:text>&#10;&#10;</xsl:text>
+  <h3>Table of Contents</h3>
+  <ul id="menu">
+    <li>
+      <a href="#reductions">Reductions</a>
+      <ul class="lower-alpha">
+	<li><a href="#nonterminals_useless_in_grammar">Nonterminals useless in grammar</a></li>
+	<li><a href="#terminals_unused_in_grammar">Terminals unused in grammar</a></li>
+	<li><a href="#rules_useless_in_grammar">Rules useless in grammar</a></li>
+	<xsl:if test="grammar/rules/rule[@usefulness='useless-in-parser']">
+	  <li><a href="#rules_useless_in_parser">Rules useless in parser due to conflicts</a></li>
+	</xsl:if>
+      </ul>
+    </li>
+    <li><a href="#conflicts">Conflicts</a></li>
+    <li>
+      <a href="#grammar">Grammar</a>
+      <ul class="lower-alpha">
+	<li><a href="#grammar">Itemset</a></li>
+	<li><a href="#terminals">Terminal symbols</a></li>
+	<li><a href="#nonterminals">Nonterminal symbols</a></li>
+      </ul>
+    </li>
+    <li><a href="#automaton">Automaton</a></li>
+  </ul>
+  <xsl:apply-templates select="grammar" mode="reductions"/>
+  <xsl:apply-templates select="grammar" mode="useless-in-parser"/>
+  <xsl:apply-templates select="automaton" mode="conflicts"/>
+  <xsl:apply-templates select="grammar"/>
+  <xsl:apply-templates select="automaton"/>
+</xsl:template>
+
+<xsl:template match="grammar" mode="reductions">
+  <h2>
+    <a name="reductions"/>
+    <xsl:text> Reductions</xsl:text>
+  </h2>
+  <xsl:apply-templates select="nonterminals" mode="useless-in-grammar"/>
+  <xsl:apply-templates select="terminals" mode="unused-in-grammar"/>
+  <xsl:apply-templates select="rules" mode="useless-in-grammar"/>
+</xsl:template>
+
+<xsl:template match="nonterminals" mode="useless-in-grammar">
+  <h3>
+    <a name="nonterminals_useless_in_grammar"/>
+    <xsl:text> Nonterminals useless in grammar</xsl:text>
+  </h3>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <xsl:if test="nonterminal[@usefulness='useless-in-grammar']">
+    <p class="pre">
+      <xsl:for-each select="nonterminal[@usefulness='useless-in-grammar']">
+	<xsl:text>   </xsl:text>
+	<xsl:value-of select="@name"/>
+	<xsl:text>&#10;</xsl:text>
+      </xsl:for-each>
+      <xsl:text>&#10;&#10;</xsl:text>
+    </p>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="terminals" mode="unused-in-grammar">
+  <h3>
+    <a name="terminals_unused_in_grammar"/>
+    <xsl:text> Terminals unused in grammar</xsl:text>
+  </h3>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <xsl:if test="terminal[@usefulness='unused-in-grammar']">
+    <p class="pre">
+      <xsl:for-each select="terminal[@usefulness='unused-in-grammar']">
+        <xsl:sort select="@symbol-number" data-type="number"/>
+	<xsl:text>   </xsl:text>
+	<xsl:value-of select="@name"/>
+	<xsl:text>&#10;</xsl:text>
+      </xsl:for-each>
+      <xsl:text>&#10;&#10;</xsl:text>
+    </p>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="rules" mode="useless-in-grammar">
+  <h3>
+    <a name="rules_useless_in_grammar"/>
+    <xsl:text> Rules useless in grammar</xsl:text>
+  </h3>
+  <xsl:text>&#10;</xsl:text>
+  <xsl:variable name="set" select="rule[@usefulness='useless-in-grammar']"/>
+  <xsl:if test="$set">
+    <p class="pre">
+      <xsl:call-template name="style-rule-set">
+        <xsl:with-param name="rule-set" select="$set"/>
+      </xsl:call-template>
+      <xsl:text>&#10;&#10;</xsl:text>
+    </p>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="grammar" mode="useless-in-parser">
+  <xsl:variable
+    name="set" select="rules/rule[@usefulness='useless-in-parser']"
+  />
+  <xsl:if test="$set">
+    <h2>
+      <a name="rules_useless_in_parser"/>
+      <xsl:text> Rules useless in parser due to conflicts</xsl:text>
+    </h2>
+    <xsl:text>&#10;</xsl:text>
+    <p class="pre">
+      <xsl:call-template name="style-rule-set">
+        <xsl:with-param name="rule-set" select="$set"/>
+      </xsl:call-template>
+    </p>
+    <xsl:text>&#10;&#10;</xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="grammar">
+  <h2>
+    <a name="grammar"/>
+    <xsl:text> Grammar</xsl:text>
+  </h2>
+  <xsl:text>&#10;</xsl:text>
+  <p class="pre">
+    <xsl:call-template name="style-rule-set">
+      <xsl:with-param
+        name="rule-set" select="rules/rule[@usefulness!='useless-in-grammar']"
+      />
+    </xsl:call-template>
+  </p>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <xsl:apply-templates select="terminals"/>
+  <xsl:apply-templates select="nonterminals"/>
+</xsl:template>
+
+<xsl:template name="style-rule-set">
+  <xsl:param name="rule-set"/>
+  <xsl:for-each select="$rule-set">
+    <xsl:apply-templates select=".">
+      <xsl:with-param name="pad" select="'3'"/>
+      <xsl:with-param name="prev-lhs">
+        <xsl:if test="position()>1">
+          <xsl:variable name="position" select="position()"/>
+          <xsl:value-of select="$rule-set[$position - 1]/lhs"/>
+        </xsl:if>
+      </xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="automaton" mode="conflicts">
+  <h2>
+    <a name="conflicts"/>
+    <xsl:text> Conflicts</xsl:text>
+  </h2>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <xsl:variable name="conflict-report">
+    <xsl:apply-templates select="state" mode="conflicts"/>
+  </xsl:variable>
+  <xsl:if test="string-length($conflict-report) != 0">
+    <p class="pre">
+      <xsl:copy-of select="$conflict-report"/>
+      <xsl:text>&#10;&#10;</xsl:text>
+    </p>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="state" mode="conflicts">
+  <xsl:variable name="conflict-counts">
+    <xsl:apply-templates select="." mode="bison:count-conflicts" />
+  </xsl:variable>
+  <xsl:variable
+    name="sr-count" select="substring-before($conflict-counts, ',')"
+  />
+  <xsl:variable
+    name="rr-count" select="substring-after($conflict-counts, ',')"
+  />
+  <xsl:if test="$sr-count > 0 or $rr-count > 0">
+    <a>
+      <xsl:attribute name="href">
+        <xsl:value-of select="concat('#state_', @number)"/>
+      </xsl:attribute>
+      <xsl:value-of select="concat('State ', @number)"/>
+    </a>
+    <xsl:text> conflicts:</xsl:text>
+    <xsl:if test="$sr-count > 0">
+      <xsl:value-of select="concat(' ', $sr-count, ' shift/reduce')"/>
+      <xsl:if test="$rr-count > 0">
+        <xsl:value-of select="(',')"/>
+      </xsl:if>
+    </xsl:if>
+    <xsl:if test="$rr-count > 0">
+      <xsl:value-of select="concat(' ', $rr-count, ' reduce/reduce')"/>
+    </xsl:if>
+    <xsl:value-of select="'&#10;'"/>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="grammar/terminals">
+  <h3>
+    <a name="terminals"/>
+    <xsl:text> Terminals, with rules where they appear</xsl:text>
+  </h3>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <p class="pre">
+    <xsl:apply-templates select="terminal"/>
+  </p>
+  <xsl:text>&#10;&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="grammar/nonterminals">
+  <h3>
+    <a name="nonterminals"/>
+    <xsl:text> Nonterminals, with rules where they appear</xsl:text>
+  </h3>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <p class="pre">
+    <xsl:apply-templates
+      select="nonterminal[@usefulness!='useless-in-grammar']"
+    />
+  </p>
+</xsl:template>
+
+<xsl:template match="terminal">
+  <b><xsl:value-of select="@name"/></b>
+  <xsl:value-of select="concat(' (', @token-number, ')')"/>
+  <xsl:for-each select="key('bison:ruleByRhs', @name)">
+    <xsl:apply-templates select="." mode="number-link"/>
+  </xsl:for-each>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="nonterminal">
+  <b><xsl:value-of select="@name"/></b>
+  <xsl:value-of select="concat(' (', @symbol-number, ')')"/>
+  <xsl:text>&#10;    </xsl:text>
+  <xsl:if test="key('bison:ruleByLhs', @name)">
+    <xsl:text>on left:</xsl:text>
+    <xsl:for-each select="key('bison:ruleByLhs', @name)">
+      <xsl:apply-templates select="." mode="number-link"/>
+    </xsl:for-each>
+  </xsl:if>
+  <xsl:if test="key('bison:ruleByRhs', @name)">
+    <xsl:if test="key('bison:ruleByLhs', @name)">
+      <xsl:text>&#10;    </xsl:text>
+    </xsl:if>
+    <xsl:text>on right:</xsl:text>
+    <xsl:for-each select="key('bison:ruleByRhs', @name)">
+      <xsl:apply-templates select="." mode="number-link"/>
+    </xsl:for-each>
+  </xsl:if>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="rule" mode="number-link">
+  <xsl:text> </xsl:text>
+  <a>
+    <xsl:attribute name="href">
+      <xsl:value-of select="concat('#rule_', @number)"/>
+    </xsl:attribute>
+    <xsl:value-of select="@number"/>
+  </a>
+</xsl:template>
+
+<xsl:template match="automaton">
+  <h2>
+    <a name="automaton"/>
+    <xsl:text> Automaton</xsl:text>
+  </h2>
+  <xsl:apply-templates select="state">
+    <xsl:with-param name="pad" select="'3'"/>
+  </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="automaton/state">
+  <xsl:param name="pad"/>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <h3>
+    <a>
+      <xsl:attribute name="name">
+	<xsl:value-of select="concat('state_', @number)"/>
+      </xsl:attribute>
+    </a>
+    <xsl:text>state </xsl:text>
+    <xsl:value-of select="@number"/>
+  </h3>
+  <xsl:text>&#10;&#10;</xsl:text>
+  <p class="pre">
+    <xsl:apply-templates select="itemset/item">
+      <xsl:with-param name="pad" select="$pad"/>
+    </xsl:apply-templates>
+    <xsl:apply-templates select="actions/transitions">
+      <xsl:with-param name="type" select="'shift'"/>
+    </xsl:apply-templates>
+    <xsl:apply-templates select="actions/errors"/>
+    <xsl:apply-templates select="actions/reductions"/>
+    <xsl:apply-templates select="actions/transitions">
+      <xsl:with-param name="type" select="'goto'"/>
+    </xsl:apply-templates>
+    <xsl:apply-templates select="solved-conflicts"/>
+  </p>
+</xsl:template>
+
+<xsl:template match="actions/transitions">
+  <xsl:param name="type"/>
+  <xsl:if test="transition[@type = $type]">
+    <xsl:text>&#10;</xsl:text>
+    <xsl:apply-templates select="transition[@type = $type]">
+      <xsl:with-param name="pad">
+	<xsl:call-template name="max-width-symbol">
+	  <xsl:with-param name="node" select="transition[@type = $type]"/>
+	</xsl:call-template>
+      </xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="actions/errors">
+  <xsl:if test="error">
+    <xsl:text>&#10;</xsl:text>
+    <xsl:apply-templates select="error">
+      <xsl:with-param name="pad">
+	<xsl:call-template name="max-width-symbol">
+	  <xsl:with-param name="node" select="error"/>
+	</xsl:call-template>
+      </xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="actions/reductions">
+  <xsl:if test="reduction">
+    <xsl:text>&#10;</xsl:text>
+    <xsl:apply-templates select="reduction">
+      <xsl:with-param name="pad">
+	<xsl:call-template name="max-width-symbol">
+	  <xsl:with-param name="node" select="reduction"/>
+	</xsl:call-template>
+      </xsl:with-param>
+    </xsl:apply-templates>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="item">
+  <xsl:param name="pad"/>
+  <xsl:param name="prev-rule-number"
+	     select="preceding-sibling::item[1]/@rule-number"/>
+  <xsl:apply-templates
+    select="key('bison:ruleByNumber', current()/@rule-number)"
+  >
+    <xsl:with-param name="itemset" select="'true'"/>
+    <xsl:with-param name="pad" select="$pad"/>
+    <xsl:with-param name="prev-lhs"
+      select="key('bison:ruleByNumber', $prev-rule-number)/lhs[text()]"
+   />
+    <xsl:with-param name="point" select="@point"/>
+    <xsl:with-param name="lookaheads">
+      <xsl:apply-templates select="lookaheads"/>
+    </xsl:with-param>
+  </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="rule">
+  <xsl:param name="itemset"/>
+  <xsl:param name="pad"/>
+  <xsl:param name="prev-lhs"/>
+  <xsl:param name="point"/>
+  <xsl:param name="lookaheads"/>
+
+  <xsl:if test="$itemset != 'true' and not($prev-lhs = lhs[text()])">
+    <xsl:text>&#10;</xsl:text>
+  </xsl:if>
+
+  <xsl:if test="$itemset != 'true'">
+    <a>
+      <xsl:attribute name="name">
+	<xsl:value-of select="concat('rule_', @number)"/>
+      </xsl:attribute>
+    </a>
+  </xsl:if>
+  <xsl:text>  </xsl:text>
+
+  <xsl:choose>
+    <xsl:when test="$itemset = 'true'">
+      <a>
+	<xsl:attribute name="href">
+	  <xsl:value-of select="concat('#rule_', @number)"/>
+	</xsl:attribute>
+	<xsl:call-template name="lpad">
+	  <xsl:with-param name="str" select="string(@number)"/>
+	  <xsl:with-param name="pad" select="number($pad)"/>
+	</xsl:call-template>
+      </a>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:call-template name="lpad">
+	<xsl:with-param name="str" select="string(@number)"/>
+	<xsl:with-param name="pad" select="number($pad)"/>
+      </xsl:call-template>
+    </xsl:otherwise>
+  </xsl:choose>
+  <xsl:text> </xsl:text>
+
+  <!-- LHS -->
+  <xsl:choose>
+    <xsl:when test="$itemset != 'true' and $prev-lhs = lhs[text()]">
+      <xsl:call-template name="lpad">
+	<xsl:with-param name="str" select="'|'"/>
+	<xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 2"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:when test="$itemset = 'true' and $prev-lhs = lhs[text()]">
+      <xsl:call-template name="lpad">
+	<xsl:with-param name="str" select="'|'"/>
+	<xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 2"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <span class="i">
+	<xsl:value-of select="lhs"/>
+      </span>
+      <xsl:text> &#8594;</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+
+  <!-- RHS -->
+  <xsl:for-each select="rhs/*">
+    <xsl:if test="position() = $point + 1">
+      <xsl:text> </xsl:text>
+      <span class="point">.</span>
+    </xsl:if>
+    <xsl:if test="$itemset = 'true' and name(.) != 'empty'">
+      <xsl:apply-templates select="."/>
+    </xsl:if>
+    <xsl:if test="$itemset != 'true'">
+      <xsl:apply-templates select="."/>
+    </xsl:if>
+    <xsl:if test="position() = last() and position() = $point">
+      <xsl:text> </xsl:text>
+      <span class="point">.</span>
+    </xsl:if>
+  </xsl:for-each>
+  <xsl:if test="$lookaheads">
+    <xsl:value-of select="$lookaheads"/>
+  </xsl:if>
+
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="symbol">
+  <xsl:text> </xsl:text>
+  <xsl:choose>
+    <xsl:when test="name(key('bison:symbolByName', .)) = 'nonterminal'">
+      <span class="i"><xsl:value-of select="."/></span>
+    </xsl:when>
+    <xsl:otherwise>
+      <b><xsl:value-of select="."/></b>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template match="empty">
+  <xsl:text> &#949;</xsl:text>
+</xsl:template>
+
+<xsl:template match="lookaheads">
+  <xsl:text>  [</xsl:text>
+  <xsl:apply-templates select="symbol"/>
+  <xsl:text>]</xsl:text>
+</xsl:template>
+
+<xsl:template match="lookaheads/symbol">
+  <xsl:value-of select="."/>
+  <xsl:if test="position() != last()">
+    <xsl:text>, </xsl:text>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="transition">
+  <xsl:param name="pad"/>
+  <xsl:text>    </xsl:text>
+  <xsl:call-template name="rpad">
+    <xsl:with-param name="str" select="string(@symbol)"/>
+    <xsl:with-param name="pad" select="number($pad) + 2"/>
+  </xsl:call-template>
+  <xsl:choose>
+    <xsl:when test="@type = 'shift'">
+      <a>
+	<xsl:attribute name="href">
+	  <xsl:value-of select="concat('#state_', @state)"/>
+	</xsl:attribute>
+	<xsl:value-of select="concat('shift, and go to state ', @state)"/>
+      </a>
+    </xsl:when>
+    <xsl:when test="@type = 'goto'">
+      <a>
+	<xsl:attribute name="href">
+	  <xsl:value-of select="concat('#state_', @state)"/>
+	</xsl:attribute>
+	<xsl:value-of select="concat('go to state ', @state)"/>
+      </a>
+    </xsl:when>
+  </xsl:choose>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="error">
+  <xsl:param name="pad"/>
+  <xsl:text>    </xsl:text>
+  <xsl:call-template name="rpad">
+    <xsl:with-param name="str" select="string(@symbol)"/>
+    <xsl:with-param name="pad" select="number($pad) + 2"/>
+  </xsl:call-template>
+  <xsl:text>error</xsl:text>
+  <xsl:text> (</xsl:text>
+  <xsl:value-of select="text()"/>
+  <xsl:text>)</xsl:text>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="reduction">
+  <xsl:param name="pad"/>
+  <xsl:text>    </xsl:text>
+  <xsl:call-template name="rpad">
+    <xsl:with-param name="str" select="string(@symbol)"/>
+    <xsl:with-param name="pad" select="number($pad) + 2"/>
+  </xsl:call-template>
+  <xsl:if test="@enabled = 'false'">
+    <xsl:text>[</xsl:text>
+  </xsl:if>
+  <xsl:choose>
+    <xsl:when test="@rule = 'accept'">
+      <xsl:text>accept</xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+      <a>
+	<xsl:attribute name="href">
+	  <xsl:value-of select="concat('#rule_', @rule)"/>
+	</xsl:attribute>
+	<xsl:value-of select="concat('reduce using rule ', @rule)"/>
+      </a>
+      <xsl:text> (</xsl:text>
+      <xsl:value-of
+        select="key('bison:ruleByNumber', current()/@rule)/lhs[text()]"
+      />
+      <xsl:text>)</xsl:text>
+    </xsl:otherwise>
+  </xsl:choose>
+  <xsl:if test="@enabled = 'false'">
+    <xsl:text>]</xsl:text>
+  </xsl:if>
+  <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="solved-conflicts">
+  <xsl:if test="resolution">
+    <xsl:text>&#10;</xsl:text>
+    <xsl:apply-templates select="resolution"/>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="resolution">
+  <xsl:text>    Conflict between </xsl:text>
+  <a>
+    <xsl:attribute name="href">
+      <xsl:value-of select="concat('#rule_', @rule)"/>
+    </xsl:attribute>
+    <xsl:value-of select="concat('rule ',@rule)"/>
+  </a>
+  <xsl:text> and token </xsl:text>
+  <xsl:value-of select="@symbol"/>
+  <xsl:text> resolved as </xsl:text>
+  <xsl:if test="@type = 'error'">
+    <xsl:text>an </xsl:text>
+  </xsl:if>
+  <xsl:value-of select="@type"/>
+  <xsl:text> (</xsl:text>
+  <xsl:value-of select="."/>
+  <xsl:text>).&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template name="max-width-symbol">
+  <xsl:param name="node"/>
+  <xsl:variable name="longest">
+    <xsl:for-each select="$node">
+      <xsl:sort data-type="number" select="string-length(@symbol)"
+		order="descending"/>
+      <xsl:if test="position() = 1">
+	<xsl:value-of select="string-length(@symbol)"/>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:value-of select="$longest"/>
+</xsl:template>
+
+<xsl:template name="lpad">
+  <xsl:param name="str" select="''"/>
+  <xsl:param name="pad" select="0"/>
+  <xsl:variable name="diff" select="$pad - string-length($str)" />
+  <xsl:choose>
+    <xsl:when test="$diff &lt; 0">
+      <xsl:value-of select="$str"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:call-template name="space">
+	<xsl:with-param name="repeat" select="$diff"/>
+      </xsl:call-template>
+      <xsl:value-of select="$str"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="rpad">
+  <xsl:param name="str" select="''"/>
+  <xsl:param name="pad" select="0"/>
+  <xsl:variable name="diff" select="$pad - string-length($str)"/>
+  <xsl:choose>
+    <xsl:when test="$diff &lt; 0">
+      <xsl:value-of select="$str"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$str"/>
+      <xsl:call-template name="space">
+	<xsl:with-param name="repeat" select="$diff"/>
+      </xsl:call-template>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template name="space">
+  <xsl:param name="repeat">0</xsl:param>
+  <xsl:param name="fill" select="' '"/>
+  <xsl:if test="number($repeat) &gt;= 1">
+    <xsl:call-template name="space">
+      <xsl:with-param name="repeat" select="$repeat - 1"/>
+      <xsl:with-param name="fill" select="$fill"/>
+    </xsl:call-template>
+    <xsl:value-of select="$fill"/>
+  </xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/data/yacc.c b/data/yacc.c
index 1e8fa56..b34549f 100644
--- a/data/yacc.c
+++ b/data/yacc.c
@@ -1,24 +1,53 @@
-m4_divert(-1)                                                -*- C -*-
+                                                             -*- C -*-
 
 # Yacc compatible skeleton for Bison
 
-# Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-# Free Software Foundation, Inc.
+# Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation,
+# Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Check the value of %define api.push-pull.
+b4_percent_define_default([[api.push-pull]], [[pull]])
+b4_percent_define_check_values([[[[api.push-pull]],
+                                 [[pull]], [[push]], [[both]]]])
+b4_define_flag_if([pull]) m4_define([b4_pull_flag], [[1]])
+b4_define_flag_if([push]) m4_define([b4_push_flag], [[1]])
+m4_case(b4_percent_define_get([[api.push-pull]]),
+        [pull], [m4_define([b4_push_flag], [[0]])],
+        [push], [m4_define([b4_pull_flag], [[0]])])
+
+# Handle BISON_USE_PUSH_FOR_PULL for the test suite.  So that push parsing
+# tests function as written, do not let BISON_USE_PUSH_FOR_PULL modify the
+# behavior of Bison at all when push parsing is already requested.
+b4_define_flag_if([use_push_for_pull])
+b4_use_push_for_pull_if([
+  b4_push_if([m4_define([b4_use_push_for_pull_flag], [[0]])],
+             [m4_define([b4_push_flag], [[1]])])])
+
+# Check the value of %define parse.lac and friends, where LAC stands for
+# lookahead correction.
+b4_percent_define_default([[parse.lac]], [[none]])
+b4_percent_define_default([[parse.lac.es-capacity-initial]], [[20]])
+b4_percent_define_default([[parse.lac.memory-trace]], [[failures]])
+b4_percent_define_check_values([[[[parse.lac]], [[full]], [[none]]]],
+                               [[[[parse.lac.memory-trace]],
+                                 [[failures]], [[full]]]])
+b4_define_flag_if([lac])
+m4_define([b4_lac_flag],
+          [m4_if(b4_percent_define_get([[parse.lac]]),
+                 [none], [[0]], [[1]])])
 
 m4_include(b4_pkgdatadir/[c.m4])
 
@@ -35,21 +64,37 @@
 ## Pure/impure interfaces.  ##
 ## ------------------------ ##
 
+b4_percent_define_default([[api.pure]], [[false]])
+b4_percent_define_check_values([[[[api.pure]],
+                                 [[false]], [[true]], [[]], [[full]]]])
 
-# b4_yacc_pure_if(IF-TRUE, IF-FALSE)
-# ----------------------------------
-# Expand IF-TRUE, if %pure-parser and %parse-param, IF-FALSE otherwise.
-m4_define([b4_yacc_pure_if],
-[b4_pure_if([m4_ifset([b4_parse_param],
-		      [$1], [$2])],
-	    [$2])])
+m4_define([b4_pure_flag], [[0]])
+m4_case(b4_percent_define_get([[api.pure]]),
+        [false], [m4_define([b4_pure_flag], [[0]])],
+        [true],  [m4_define([b4_pure_flag], [[1]])],
+        [],      [m4_define([b4_pure_flag], [[1]])],
+        [full],  [m4_define([b4_pure_flag], [[2]])])
 
+m4_define([b4_pure_if],
+[m4_case(b4_pure_flag,
+         [0], [$2],
+         [1], [$1],
+         [2], [$1])])
+         [m4_fatal([invalid api.pure value: ]$1)])])
+
+# b4_yyerror_arg_loc_if(ARG)
+# --------------------------
+# Expand ARG iff yyerror is to be given a location as argument.
+m4_define([b4_yyerror_arg_loc_if],
+[b4_locations_if([m4_case(b4_pure_flag,
+                          [1], [m4_ifset([b4_parse_param], [$1])],
+                          [2], [$1])])])
 
 # b4_yyerror_args
 # ---------------
 # Arguments passed to yyerror: user args plus yylloc.
 m4_define([b4_yyerror_args],
-[b4_yacc_pure_if([b4_locations_if([&yylloc, ])])dnl
+[b4_yyerror_arg_loc_if([&yylloc, ])dnl
 m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
 
 
@@ -63,7 +108,6 @@
 m4_ifdef([b4_lex_param], b4_lex_param)))
 
 
-
 ## ------------ ##
 ## Data Types.  ##
 ## ------------ ##
@@ -126,17 +170,170 @@
 [(yylsp@{($2) - ($1)@})])
 
 
+## -------------- ##
+## Declarations.  ##
+## -------------- ##
 
-## --------------------------------------------------------- ##
-## Defining symbol actions, e.g., printers and destructors.  ##
-## --------------------------------------------------------- ##
+# b4_declare_scanner_communication_variables
+# ------------------------------------------
+# Declare the variables that are global, or local to YYPARSE if
+# pure-parser.
+m4_define([b4_declare_scanner_communication_variables], [[
+/* The lookahead symbol.  */
+int yychar;
 
-# We do want M4 expansion after # for CPP macros.
-m4_changecom()
-m4_divert(0)dnl
-@output @output_parser_name@
-b4_copyright([Skeleton implementation for Bison's Yacc-like parsers in C],dnl '
-  [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006])[
+]b4_pure_if([[
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+/* Default value used for initialization, for pacifying older GCCs
+   or non-GCC compilers.  */
+static YYSTYPE yyval_default;
+# define YY_INITIAL_VALUE(Value) = Value
+#endif]b4_locations_if([[
+static YYLTYPE yyloc_default][]b4_yyloc_default[;]])])[
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);]b4_locations_if([[
+
+/* Location data for the lookahead symbol.  */
+YYLTYPE yylloc]b4_pure_if([ = yyloc_default], [b4_yyloc_default])[;
+]])b4_pure_if([], [[
+
+/* Number of syntax errors so far.  */
+int yynerrs;]])])
+
+
+# b4_declare_parser_state_variables
+# ---------------------------------
+# Declare all the variables that are needed to maintain the parser state
+# between calls to yypush_parse.
+m4_define([b4_declare_parser_state_variables], [b4_pure_if([[
+    /* Number of syntax errors so far.  */
+    int yynerrs;
+]])[
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.]b4_locations_if([[
+       `yyls': related to locations.]])[
+
+       Refer to the stacks through separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;]b4_locations_if([[
+
+    /* The location stack.  */
+    YYLTYPE yylsa[YYINITDEPTH];
+    YYLTYPE *yyls;
+    YYLTYPE *yylsp;
+
+    /* The locations where the error started and ended.  */
+    YYLTYPE yyerror_range[3];]])[
+
+    YYSIZE_T yystacksize;]b4_lac_if([[
+
+    yytype_int16 yyesa@{]b4_percent_define_get([[parse.lac.es-capacity-initial]])[@};
+    yytype_int16 *yyes;
+    YYSIZE_T yyes_capacity;]])])
+
+
+# b4_declare_yyparse_push_
+# ------------------------
+# Declaration of yyparse (and dependencies) when using the push parser
+# (including in pull mode).
+m4_define([b4_declare_yyparse_push_],
+[[#ifndef YYPUSH_MORE_DEFINED
+# define YYPUSH_MORE_DEFINED
+enum { YYPUSH_MORE = 4 };
+#endif
+
+typedef struct ]b4_prefix[pstate ]b4_prefix[pstate;
+
+]b4_pull_if([b4_c_function_decl([b4_prefix[parse]], [[int]], b4_parse_param)
+])b4_c_function_decl([b4_prefix[push_parse]], [[int]],
+  [[b4_prefix[pstate *ps]], [[ps]]]b4_pure_if([,
+  [[[int pushed_char]], [[pushed_char]]],
+  [[b4_api_PREFIX[STYPE const *pushed_val]], [[pushed_val]]]b4_locations_if([,
+  [[b4_api_PREFIX[LTYPE *pushed_loc]], [[pushed_loc]]]])])m4_ifset([b4_parse_param], [,
+  b4_parse_param]))
+b4_pull_if([b4_c_function_decl([b4_prefix[pull_parse]], [[int]],
+  [[b4_prefix[pstate *ps]], [[ps]]]m4_ifset([b4_parse_param], [,
+  b4_parse_param]))])
+b4_c_function_decl([b4_prefix[pstate_new]], [b4_prefix[pstate *]],
+                    [[[void]], []])
+b4_c_function_decl([b4_prefix[pstate_delete]], [[void]],
+                   [[b4_prefix[pstate *ps]], [[ps]]])dnl
+])
+
+# b4_declare_yyparse_
+# -------------------
+# When not the push parser.
+m4_define([b4_declare_yyparse_],
+[[#ifdef YYPARSE_PARAM
+]b4_c_function_decl(b4_prefix[parse], [int],
+                    [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[
+#else /* ! YYPARSE_PARAM */
+]b4_c_function_decl(b4_prefix[parse], [int], b4_parse_param)[
+#endif /* ! YYPARSE_PARAM */]dnl
+])
+
+
+# b4_declare_yyparse
+# ------------------
+m4_define([b4_declare_yyparse],
+[b4_push_if([b4_declare_yyparse_push_],
+            [b4_declare_yyparse_])[]dnl
+])
+
+
+# b4_shared_declarations
+# ----------------------
+# Declaration that might either go into the header (if --defines)
+# or open coded in the parser body.
+m4_define([b4_shared_declarations],
+[b4_cpp_guard_open([b4_spec_defines_file])[
+]b4_declare_yydebug[
+]b4_percent_code_get([[requires]])[
+]b4_token_enums_defines(b4_tokens)[
+]b4_declare_yylstype[
+]b4_declare_yyparse[
+]b4_percent_code_get([[provides]])[
+]b4_cpp_guard_close([b4_spec_defines_file])[]dnl
+])
+
+
+## -------------- ##
+## Output files.  ##
+## -------------- ##
+
+b4_output_begin([b4_parser_file_name])
+b4_copyright([Bison implementation for Yacc-like parsers in C],
+             [1984, 1989-1990, 2000-2012])[
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
@@ -149,26 +346,31 @@
    USER NAME SPACE" below.  */
 
 ]b4_identification
-m4_if(b4_prefix, [yy], [],
-[/* Substitute the variable and function names.  */
-#define yyparse b4_prefix[]parse
-#define yylex   b4_prefix[]lex
-#define yyerror b4_prefix[]error
-#define yylval  b4_prefix[]lval
-#define yychar  b4_prefix[]char
-#define yydebug b4_prefix[]debug
-#define yynerrs b4_prefix[]nerrs
-b4_locations_if([#define yylloc b4_prefix[]lloc])])[
-
-]b4_token_enums_defines(b4_tokens)[
+b4_percent_code_get([[top]])[]dnl
+m4_if(b4_api_prefix, [yy], [],
+[[/* Substitute the type names.  */
+#define YYSTYPE         ]b4_api_PREFIX[STYPE]b4_locations_if([[
+#define YYLTYPE         ]b4_api_PREFIX[LTYPE]])])[
+]m4_if(b4_prefix, [yy], [],
+[[/* Substitute the variable and function names.  */]b4_pull_if([[
+#define yyparse         ]b4_prefix[parse]])b4_push_if([[
+#define yypush_parse    ]b4_prefix[push_parse]b4_pull_if([[
+#define yypull_parse    ]b4_prefix[pull_parse]])[
+#define yypstate_new    ]b4_prefix[pstate_new
+#define yypstate_delete ]b4_prefix[pstate_delete
+#define yypstate        ]b4_prefix[pstate]])[
+#define yylex           ]b4_prefix[lex
+#define yyerror         ]b4_prefix[error
+#define yylval          ]b4_prefix[lval
+#define yychar          ]b4_prefix[char
+#define yydebug         ]b4_prefix[debug
+#define yynerrs         ]b4_prefix[nerrs]b4_locations_if([[
+#define yylloc          ]b4_prefix[lloc]])])[
 
 /* Copy the first part of user declarations.  */
-]b4_pre_prologue[
+]b4_user_pre_prologue[
 
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG ]b4_debug_flag[
-#endif
+]b4_null_define[
 
 /* Enabling verbose error messages.  */
 #ifdef YYERROR_VERBOSE
@@ -178,45 +380,17 @@
 # define YYERROR_VERBOSE ]b4_error_verbose_flag[
 #endif
 
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE ]b4_token_table[
-#endif
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-]m4_ifdef([b4_stype],
-[typedef union[]m4_bregexp(b4_stype, [^{], [ YYSTYPE])
-b4_stype
-/* Line __line__ of yacc.c.  */
-b4_syncline([@oline@], [@ofile@])
-	YYSTYPE;],
-[typedef int YYSTYPE;])[
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-]b4_locations_if([#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} YYLTYPE;
-# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
-# define YYLTYPE_IS_DECLARED 1
-# define YYLTYPE_IS_TRIVIAL 1
-#endif
-])[
+]m4_ifval(m4_quote(b4_spec_defines_file),
+[[/* In a future release of Bison, this section will be replaced
+   by #include "@basename(]b4_spec_defines_file[@)".  */
+]])dnl
+b4_shared_declarations[
 
 /* Copy the second part of user declarations.  */
-]b4_post_prologue
+]b4_user_post_prologue
+b4_percent_code_get[]dnl
 
-/* Line __line__ of yacc.c.  */
-b4_syncline([@oline@], [@ofile@])[
-
-#ifdef short
+[#ifdef short
 # undef short
 #endif
 
@@ -262,37 +436,38 @@
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
 #  endif
 # endif
 # ifndef YY_
-#  define YY_(msgid) msgid
+#  define YY_(Msgid) Msgid
 # endif
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
 #else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
 #endif
 
 /* Identity function, used to suppress warnings about constant conditions.  */
 #ifndef lint
-# define YYID(n) (n)
+# define YYID(N) (N)
 #else
-]b4_c_function_def([YYID], [static int], [[int i], [i]])[
+]b4_c_function_def([YYID], [static int], [[int yyi], [yyi]])[
 {
-  return i;
+  return yyi;
 }
 #endif
 
-#if ! defined yyoverflow || YYERROR_VERBOSE
+#if ]b4_lac_if([[1]], [[! defined yyoverflow || YYERROR_VERBOSE]])[
 
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
+/* The parser invokes alloca or malloc; define the necessary symbols.  */]dnl
+b4_push_if([], [b4_lac_if([], [[
 
 # ifdef YYSTACK_USE_ALLOCA
 #  if YYSTACK_USE_ALLOCA
@@ -307,15 +482,16 @@
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && ]b4_c_modern[
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && ]b4_c_modern[
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
+      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
 #  endif
-# endif
+# endif]])])[
 
 # ifdef YYSTACK_ALLOC
    /* Pacify GCC's `empty if-body' warning.  */
@@ -333,43 +509,43 @@
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
 	     && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && ]b4_c_modern[
+#   if ! defined malloc && ! defined EXIT_SUCCESS && ]b4_c_modern[
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && ]b4_c_modern[
+#   if ! defined free && ! defined EXIT_SUCCESS && ]b4_c_modern[
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+# endif]b4_lac_if([[
+# define YYCOPY_NEEDED 1]])[
+#endif]b4_lac_if([], [[ /* ! defined yyoverflow || YYERROR_VERBOSE */]])[
 
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (]b4_locations_if([[defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
-	     && ]])[defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+	 || (]b4_locations_if([[defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL \
+	     && ]])[defined ]b4_api_PREFIX[STYPE_IS_TRIVIAL && ]b4_api_PREFIX[STYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss;
-  YYSTYPE yyvs;
-  ]b4_locations_if([  YYLTYPE yyls;
-])dnl
-[};
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;]b4_locations_if([
+  YYLTYPE yyls_alloc;])[
+};
 
 /* The size of the maximum gap between one aligned stack and the next.  */
 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
@@ -384,35 +560,19 @@
      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)])[
 
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
+# define YYCOPY_NEEDED 1
 
 /* Relocate STACK from its old location to the new one.  The
    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
     do									\
       {									\
 	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack, Stack, yysize);				\
-	Stack = &yyptr->Stack;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
 	yyptr += yynewbytes / sizeof (*yyptr);				\
       }									\
@@ -420,6 +580,26 @@
 
 #endif
 
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(Dst, Src, Count) \
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYSIZE_T yyi;                         \
+          for (yyi = 0; yyi < (Count); yyi++)   \
+            (Dst)[yyi] = (Src)[yyi];            \
+        }                                       \
+      while (YYID (0))
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  ]b4_final_state_number[
 /* YYLAST -- Last index in YYTABLE.  */
@@ -447,7 +627,7 @@
   ]b4_translate[
 };
 
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
 static const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
@@ -468,7 +648,7 @@
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
@@ -498,8 +678,8 @@
   ]b4_r2[
 };
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
 static const ]b4_int_type_for([b4_defact])[ yydefact[] =
 {
@@ -528,14 +708,19 @@
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
 #define YYTABLE_NINF ]b4_table_ninf[
 static const ]b4_int_type_for([b4_table])[ yytable[] =
 {
   ]b4_table[
 };
 
+#define yypact_value_is_default(Yystate) \
+  ]b4_table_value_equals([[pact]], [[Yystate]], [b4_pact_ninf])[
+
+#define yytable_value_is_error(Yytable_value) \
+  ]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf])[
+
 static const ]b4_int_type_for([b4_check])[ yycheck[] =
 {
   ]b4_check[
@@ -560,78 +745,50 @@
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
 
 #define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
+#define YYBACKUP(Token, Value)                                  \
+do                                                              \
+  if (yychar == YYEMPTY)                                        \
+    {                                                           \
+      yychar = (Token);                                         \
+      yylval = (Value);                                         \
+      YYPOPSTACK (yylen);                                       \
+      yystate = *yyssp;                                         \]b4_lac_if([[
+      YY_LAC_DISCARD ("YYBACKUP");                              \]])[
+      goto yybackup;                                            \
+    }                                                           \
+  else                                                          \
+    {                                                           \
       yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")); \
       YYERROR;							\
     }								\
 while (YYID (0))
 
-
+/* Error token number */
 #define YYTERROR	1
 #define YYERRCODE	256
 
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
+]b4_locations_if([[
+]b4_yylloc_default_define[
 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
+]])[
+]b4_yy_location_print_define[
 
 /* YYLEX -- calling `yylex' with the right arguments.  */
-
 #ifdef YYLEX_PARAM
 # define YYLEX yylex (]b4_pure_if([&yylval[]b4_locations_if([, &yylloc]), ])[YYLEX_PARAM)
 #else
@@ -639,7 +796,7 @@
 #endif
 
 /* Enable debugging if requested.  */
-#if YYDEBUG
+#if ]b4_api_PREFIX[DEBUG
 
 # ifndef YYFPRINTF
 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
@@ -671,12 +828,15 @@
 `------------------------------------------------------------------*/
 
 ]b4_c_function_def([yy_stack_print], [static void],
-		   [[yytype_int16 *bottom], [bottom]],
-		   [[yytype_int16 *top],    [top]])[
+		   [[yytype_int16 *yybottom], [yybottom]],
+		   [[yytype_int16 *yytop],    [yytop]])[
 {
   YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
   YYFPRINTF (stderr, "\n");
 }
 
@@ -695,7 +855,7 @@
 		   [[YYSTYPE *yyvsp], [yyvsp]],
     b4_locations_if([[[YYLTYPE *yylsp], [yylsp]],
 		   ])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [,
-		   ])b4_parse_param)[
+		   b4_parse_param]))[
 {
   int yynrhs = yyr2[yyrule];
   int yyi;
@@ -705,12 +865,12 @@
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
-      fprintf (stderr, "   $%d = ", yyi + 1);
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
 		       &]b4_rhs_value(yynrhs, yyi + 1)[
 		       ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
 		       b4_user_args[);
-      fprintf (stderr, "\n");
+      YYFPRINTF (stderr, "\n");
     }
 }
 
@@ -723,12 +883,12 @@
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
 int yydebug;
-#else /* !YYDEBUG */
+#else /* !]b4_api_PREFIX[DEBUG */
 # define YYDPRINTF(Args)
 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
+#endif /* !]b4_api_PREFIX[DEBUG */
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
@@ -745,9 +905,244 @@
 
 #ifndef YYMAXDEPTH
 # define YYMAXDEPTH ]b4_stack_depth_max[
+#endif]b4_lac_if([[
+
+/* Given a state stack such that *YYBOTTOM is its bottom, such that
+   *YYTOP is either its top or is YYTOP_EMPTY to indicate an empty
+   stack, and such that *YYCAPACITY is the maximum number of elements it
+   can hold without a reallocation, make sure there is enough room to
+   store YYADD more elements.  If not, allocate a new stack using
+   YYSTACK_ALLOC, copy the existing elements, and adjust *YYBOTTOM,
+   *YYTOP, and *YYCAPACITY to reflect the new capacity and memory
+   location.  If *YYBOTTOM != YYBOTTOM_NO_FREE, then free the old stack
+   using YYSTACK_FREE.  Return 0 if successful or if no reallocation is
+   required.  Return 1 if memory is exhausted.  */
+static int
+yy_lac_stack_realloc (YYSIZE_T *yycapacity, YYSIZE_T yyadd,
+#if ]b4_api_PREFIX[DEBUG
+                      char const *yydebug_prefix,
+                      char const *yydebug_suffix,
+#endif
+                      yytype_int16 **yybottom,
+                      yytype_int16 *yybottom_no_free,
+                      yytype_int16 **yytop, yytype_int16 *yytop_empty)
+{
+  YYSIZE_T yysize_old =
+    *yytop == yytop_empty ? 0 : *yytop - *yybottom + 1;
+  YYSIZE_T yysize_new = yysize_old + yyadd;
+  if (*yycapacity < yysize_new)
+    {
+      YYSIZE_T yyalloc = 2 * yysize_new;
+      yytype_int16 *yybottom_new;
+      /* Use YYMAXDEPTH for maximum stack size given that the stack
+         should never need to grow larger than the main state stack
+         needs to grow without LAC.  */
+      if (YYMAXDEPTH < yysize_new)
+        {
+          YYDPRINTF ((stderr, "%smax size exceeded%s", yydebug_prefix,
+                      yydebug_suffix));
+          return 1;
+        }
+      if (YYMAXDEPTH < yyalloc)
+        yyalloc = YYMAXDEPTH;
+      yybottom_new =
+        (yytype_int16*) YYSTACK_ALLOC (yyalloc * sizeof *yybottom_new);
+      if (!yybottom_new)
+        {
+          YYDPRINTF ((stderr, "%srealloc failed%s", yydebug_prefix,
+                      yydebug_suffix));
+          return 1;
+        }
+      if (*yytop != yytop_empty)
+        {
+          YYCOPY (yybottom_new, *yybottom, yysize_old);
+          *yytop = yybottom_new + (yysize_old - 1);
+        }
+      if (*yybottom != yybottom_no_free)
+        YYSTACK_FREE (*yybottom);
+      *yybottom = yybottom_new;
+      *yycapacity = yyalloc;]m4_if(b4_percent_define_get([[parse.lac.memory-trace]]),
+                                   [full], [[
+      YYDPRINTF ((stderr, "%srealloc to %lu%s", yydebug_prefix,
+                  (unsigned long int) yyalloc, yydebug_suffix));]])[
+    }
+  return 0;
+}
+
+/* Establish the initial context for the current lookahead if no initial
+   context is currently established.
+
+   We define a context as a snapshot of the parser stacks.  We define
+   the initial context for a lookahead as the context in which the
+   parser initially examines that lookahead in order to select a
+   syntactic action.  Thus, if the lookahead eventually proves
+   syntactically unacceptable (possibly in a later context reached via a
+   series of reductions), the initial context can be used to determine
+   the exact set of tokens that would be syntactically acceptable in the
+   lookahead's place.  Moreover, it is the context after which any
+   further semantic actions would be erroneous because they would be
+   determined by a syntactically unacceptable token.
+
+   YY_LAC_ESTABLISH should be invoked when a reduction is about to be
+   performed in an inconsistent state (which, for the purposes of LAC,
+   includes consistent states that don't know they're consistent because
+   their default reductions have been disabled).  Iff there is a
+   lookahead token, it should also be invoked before reporting a syntax
+   error.  This latter case is for the sake of the debugging output.
+
+   For parse.lac=full, the implementation of YY_LAC_ESTABLISH is as
+   follows.  If no initial context is currently established for the
+   current lookahead, then check if that lookahead can eventually be
+   shifted if syntactic actions continue from the current context.
+   Report a syntax error if it cannot.  */
+#define YY_LAC_ESTABLISH                                         \
+do {                                                             \
+  if (!yy_lac_established)                                       \
+    {                                                            \
+      YYDPRINTF ((stderr,                                        \
+                  "LAC: initial context established for %s\n",   \
+                  yytname[yytoken]));                            \
+      yy_lac_established = 1;                                    \
+      {                                                          \
+        int yy_lac_status =                                      \
+          yy_lac (yyesa, &yyes, &yyes_capacity, yyssp, yytoken); \
+        if (yy_lac_status == 2)                                  \
+          goto yyexhaustedlab;                                   \
+        if (yy_lac_status == 1)                                  \
+          goto yyerrlab;                                         \
+      }                                                          \
+    }                                                            \
+} while (YYID (0))
+
+/* Discard any previous initial lookahead context because of Event,
+   which may be a lookahead change or an invalidation of the currently
+   established initial context for the current lookahead.
+
+   The most common example of a lookahead change is a shift.  An example
+   of both cases is syntax error recovery.  That is, a syntax error
+   occurs when the lookahead is syntactically erroneous for the
+   currently established initial context, so error recovery manipulates
+   the parser stacks to try to find a new initial context in which the
+   current lookahead is syntactically acceptable.  If it fails to find
+   such a context, it discards the lookahead.  */
+#if ]b4_api_PREFIX[DEBUG
+# define YY_LAC_DISCARD(Event)                                           \
+do {                                                                     \
+  if (yy_lac_established)                                                \
+    {                                                                    \
+      if (yydebug)                                                       \
+        YYFPRINTF (stderr, "LAC: initial context discarded due to "      \
+                   Event "\n");                                          \
+      yy_lac_established = 0;                                            \
+    }                                                                    \
+} while (YYID (0))
+#else
+# define YY_LAC_DISCARD(Event) yy_lac_established = 0
 #endif
 
-
+/* Given the stack whose top is *YYSSP, return 0 iff YYTOKEN can
+   eventually (after perhaps some reductions) be shifted, return 1 if
+   not, or return 2 if memory is exhausted.  As preconditions and
+   postconditions: *YYES_CAPACITY is the allocated size of the array to
+   which *YYES points, and either *YYES = YYESA or *YYES points to an
+   array allocated with YYSTACK_ALLOC.  yy_lac may overwrite the
+   contents of either array, alter *YYES and *YYES_CAPACITY, and free
+   any old *YYES other than YYESA.  */
+static int
+yy_lac (yytype_int16 *yyesa, yytype_int16 **yyes,
+        YYSIZE_T *yyes_capacity, yytype_int16 *yyssp, int yytoken)
+{
+  yytype_int16 *yyes_prev = yyssp;
+  yytype_int16 *yyesp = yyes_prev;
+  YYDPRINTF ((stderr, "LAC: checking lookahead %s:", yytname[yytoken]));
+  if (yytoken == YYUNDEFTOK)
+    {
+      YYDPRINTF ((stderr, " Always Err\n"));
+      return 1;
+    }
+  while (1)
+    {
+      int yyrule = yypact[*yyesp];
+      if (yypact_value_is_default (yyrule)
+          || (yyrule += yytoken) < 0 || YYLAST < yyrule
+          || yycheck[yyrule] != yytoken)
+        {
+          yyrule = yydefact[*yyesp];
+          if (yyrule == 0)
+            {
+              YYDPRINTF ((stderr, " Err\n"));
+              return 1;
+            }
+        }
+      else
+        {
+          yyrule = yytable[yyrule];
+          if (yytable_value_is_error (yyrule))
+            {
+              YYDPRINTF ((stderr, " Err\n"));
+              return 1;
+            }
+          if (0 < yyrule)
+            {
+              YYDPRINTF ((stderr, " S%d\n", yyrule));
+              return 0;
+            }
+          yyrule = -yyrule;
+        }
+      {
+        YYSIZE_T yylen = yyr2[yyrule];
+        YYDPRINTF ((stderr, " R%d", yyrule - 1));
+        if (yyesp != yyes_prev)
+          {
+            YYSIZE_T yysize = yyesp - *yyes + 1;
+            if (yylen < yysize)
+              {
+                yyesp -= yylen;
+                yylen = 0;
+              }
+            else
+              {
+                yylen -= yysize;
+                yyesp = yyes_prev;
+              }
+          }
+        if (yylen)
+          yyesp = yyes_prev -= yylen;
+      }
+      {
+        int yystate;
+        {
+          int yylhs = yyr1[yyrule] - YYNTOKENS;
+          yystate = yypgoto[yylhs] + *yyesp;
+          if (yystate < 0 || YYLAST < yystate
+              || yycheck[yystate] != *yyesp)
+            yystate = yydefgoto[yylhs];
+          else
+            yystate = yytable[yystate];
+        }
+        if (yyesp == yyes_prev)
+          {
+            yyesp = *yyes;
+            *yyesp = yystate;
+          }
+        else
+          {
+            if (yy_lac_stack_realloc (yyes_capacity, 1,
+#if ]b4_api_PREFIX[DEBUG
+                                      " (", ")",
+#endif
+                                      yyes, yyesa, &yyesp, yyes_prev))
+              {
+                YYDPRINTF ((stderr, "\n"));
+                return 2;
+              }
+            *++yyesp = yystate;
+          }
+        YYDPRINTF ((stderr, " G%d", yystate));
+      }
+    }
+}]])[
+
 
 #if YYERROR_VERBOSE
 
@@ -835,150 +1230,283 @@
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.]b4_lac_if([[  In order to see if a particular token T is a
+   valid looakhead, invoke yy_lac (YYESA, YYES, YYES_CAPACITY, YYSSP, T).]])[
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store]b4_lac_if([[ or if
+   yy_lac returned 2]])[.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                ]b4_lac_if([[yytype_int16 *yyesa, yytype_int16 **yyes,
+                YYSIZE_T *yyes_capacity, ]])[yytype_int16 *yyssp, int yytoken)
 {
-  int yyn = yypact[yystate];
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = YY_NULL;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
 
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.]b4_lac_if([[
+       In the first two cases, it might appear that the current syntax
+       error should have been detected in the previous state when yy_lac
+       was invoked.  However, at that time, there might have been a
+       different syntax error that discarded a different initial context
+       during error recovery, leaving behind the current lookahead.]], [[
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.]])[
+  */
+  if (yytoken != YYEMPTY)
     {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
+      int yyn = yypact[*yyssp];]b4_lac_if([[
+      YYDPRINTF ((stderr, "Constructing syntax error message\n"));]])[
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {]b4_lac_if([], [[
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;]])[
+          int yyx;]b4_lac_if([[
 
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
+          for (yyx = 0; yyx < YYNTOKENS; ++yyx)
+            if (yyx != YYTERROR && yyx != YYUNDEFTOK)
+              {
+                {
+                  int yy_lac_status = yy_lac (yyesa, yyes, yyes_capacity,
+                                              yyssp, yyx);
+                  if (yy_lac_status == 2)
+                    return 2;
+                  if (yy_lac_status == 1)
+                    continue;
+                }]], [[
 
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {]])[
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                {
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+                  if (! (yysize <= yysize1
+                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                    return 2;
+                  yysize = yysize1;
+                }
+              }
+        }]b4_lac_if([[
+# if ]b4_api_PREFIX[DEBUG
+      else if (yydebug)
+        YYFPRINTF (stderr, "No expected tokens.\n");
+# endif]])[
     }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
+
+  {
+    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+      return 2;
+    yysize = yysize1;
+  }
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-
 
 ]b4_yydestruct_generate([b4_c_function_def])[
-
 
-/* Prevent warnings from -Wmissing-prototypes.  */
+]b4_pure_if([], [
 
-#ifdef YYPARSE_PARAM
-]b4_c_function_decl([yyparse], [int],
-   [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[
-#else /* ! YYPARSE_PARAM */
-]b4_c_function_decl([yyparse], [int], b4_parse_param)[
-#endif /* ! YYPARSE_PARAM */
+b4_declare_scanner_communication_variables])[]b4_push_if([[
+
+struct yypstate
+  {]b4_declare_parser_state_variables[
+    /* Used to determine if this is the first time this instance has
+       been used.  */
+    int yynew;
+  };]b4_pure_if([], [[
+
+static char yypstate_allocated = 0;]])b4_pull_if([
+
+b4_c_function_def([[yyparse]], [[int]], b4_parse_param)[
+{
+  return yypull_parse (YY_NULL]m4_ifset([b4_parse_param],
+                                  [[, ]b4_c_args(b4_parse_param)])[);
+}
+
+]b4_c_function_def([[yypull_parse]], [[int]],
+  [[[yypstate *yyps]], [[yyps]]]m4_ifset([b4_parse_param], [,
+  b4_parse_param]))[
+{
+  int yystatus;
+  yypstate *yyps_local;]b4_pure_if([[
+  int yychar;
+  YYSTYPE yylval;]b4_locations_if([[
+  static YYLTYPE yyloc_default][]b4_yyloc_default[;
+  YYLTYPE yylloc = yyloc_default;]])])[
+  if (yyps)
+    yyps_local = yyps;
+  else
+    {
+      yyps_local = yypstate_new ();
+      if (!yyps_local)
+        {]b4_pure_if([[
+          yyerror (]b4_yyerror_args[YY_("memory exhausted"));]], [[
+          if (!yypstate_allocated)
+            yyerror (]b4_yyerror_args[YY_("memory exhausted"));]])[
+          return 2;
+        }
+    }
+  do {
+    yychar = YYLEX;
+    yystatus =
+      yypush_parse (yyps_local]b4_pure_if([[, yychar, &yylval]b4_locations_if([[, &yylloc]])])m4_ifset([b4_parse_param], [, b4_c_args(b4_parse_param)])[);
+  } while (yystatus == YYPUSH_MORE);
+  if (!yyps)
+    yypstate_delete (yyps_local);
+  return yystatus;
+}]])[
+
+/* Initialize the parser data structure.  */
+]b4_c_function_def([[yypstate_new]], [[yypstate *]])[
+{
+  yypstate *yyps;]b4_pure_if([], [[
+  if (yypstate_allocated)
+    return YY_NULL;]])[
+  yyps = (yypstate *) malloc (sizeof *yyps);
+  if (!yyps)
+    return YY_NULL;
+  yyps->yynew = 1;]b4_pure_if([], [[
+  yypstate_allocated = 1;]])[
+  return yyps;
+}
+
+]b4_c_function_def([[yypstate_delete]], [[void]],
+                   [[[yypstate *yyps]], [[yyps]]])[
+{
+#ifndef yyoverflow
+  /* If the stack was reallocated but the parse did not complete, then the
+     stack still needs to be freed.  */
+  if (!yyps->yynew && yyps->yyss != yyps->yyssa)
+    YYSTACK_FREE (yyps->yyss);
+#endif]b4_lac_if([[
+  if (!yyps->yynew && yyps->yyes != yyps->yyesa)
+    YYSTACK_FREE (yyps->yyes);]])[
+  free (yyps);]b4_pure_if([], [[
+  yypstate_allocated = 0;]])[
+}
+]b4_pure_if([[
+#define ]b4_prefix[nerrs yyps->]b4_prefix[nerrs]])[
+#define yystate yyps->yystate
+#define yyerrstatus yyps->yyerrstatus
+#define yyssa yyps->yyssa
+#define yyss yyps->yyss
+#define yyssp yyps->yyssp
+#define yyvsa yyps->yyvsa
+#define yyvs yyps->yyvs
+#define yyvsp yyps->yyvsp]b4_locations_if([[
+#define yylsa yyps->yylsa
+#define yyls yyps->yyls
+#define yylsp yyps->yylsp
+#define yyerror_range yyps->yyerror_range]])[
+#define yystacksize yyps->yystacksize]b4_lac_if([[
+#define yyesa yyps->yyesa
+#define yyes yyps->yyes
+#define yyes_capacity yyps->yyes_capacity]])[
 
 
-]m4_divert_push([KILL])# ======================== M4 code.
-# b4_declare_parser_variables
-# ---------------------------
-# Declare the variables that are global, or local to YYPARSE if
-# pure-parser.
-m4_define([b4_declare_parser_variables],
-[/* The look-ahead symbol.  */
-int yychar;
+/*---------------.
+| yypush_parse.  |
+`---------------*/
 
-/* The semantic value of the look-ahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;b4_locations_if([
-/* Location data for the look-ahead symbol.  */
-YYLTYPE yylloc;])
-])
-m4_divert_pop([KILL])dnl# ====================== End of M4 code.
-
-b4_pure_if([],
-	   [b4_declare_parser_variables])
+]b4_c_function_def([[yypush_parse]], [[int]],
+  [[[yypstate *yyps]], [[yyps]]]b4_pure_if([,
+  [[[int yypushed_char]], [[yypushed_char]]],
+  [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([,
+  [[[YYLTYPE *yypushed_loc]], [[yypushed_loc]]]])])m4_ifset([b4_parse_param], [,
+  b4_parse_param]))], [[
 
 
 /*----------.
@@ -986,19 +1514,29 @@
 `----------*/
 
 #ifdef YYPARSE_PARAM
-b4_c_function_def([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])
+]b4_c_function_def([yyparse], [int],
+                   [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[
 #else /* ! YYPARSE_PARAM */
-b4_c_function_def([yyparse], [int], b4_parse_param)
-#endif
-{[
-  ]b4_pure_if([b4_declare_parser_variables])[
-  int yystate;
+]b4_c_function_def([yyparse], [int], b4_parse_param)[
+#endif]])[
+{]b4_pure_if([b4_declare_scanner_communication_variables
+])b4_push_if([b4_pure_if([], [[
+  int yypushed_char = yychar;
+  YYSTYPE yypushed_val = yylval;]b4_locations_if([[
+  YYLTYPE yypushed_loc = yylloc;]])
+])],
+  [b4_declare_parser_state_variables
+])b4_lac_if([[
+  int yy_lac_established = 0;]])[
   int yyn;
   int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
+  /* Lookahead token as an internal (translated) token number.  */
   int yytoken = 0;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;]b4_locations_if([[
+  YYLTYPE yyloc;]])[
+
 #if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
@@ -1006,79 +1544,43 @@
   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  yytype_int16 yyssa[YYINITDEPTH];
-  yytype_int16 *yyss = yyssa;
-  yytype_int16 *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
-
-]b4_locations_if(
-[[  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-  /* The locations where the error started and ended.  */
-  YYLTYPE yyerror_range[2];]])[
-
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N)]b4_locations_if([, yylsp -= (N)])[)
 
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-]b4_locations_if([  YYLTYPE yyloc;])[
-
   /* The number of symbols on the RHS of the reduced rule.
      Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
+  int yylen = 0;]b4_push_if([[
+
+  if (!yyps->yynew)
+    {
+      yyn = yypact[yystate];
+      goto yyread_pushed_token;
+    }]])[
+
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;]b4_locations_if([[
+  yylsp = yyls = yylsa;]])[
+  yystacksize = YYINITDEPTH;]b4_lac_if([[
+
+  yyes = yyesa;
+  yyes_capacity = sizeof yyesa / sizeof *yyes;
+  if (YYMAXDEPTH < yyes_capacity)
+    yyes_capacity = YYMAXDEPTH;]])[
 
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yystate = 0;
   yyerrstatus = 0;
   yynerrs = 0;
-  yychar = YYEMPTY;		/* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-]b4_locations_if([[  yylsp = yyls;
-#if YYLTYPE_IS_TRIVIAL
-  /* Initialize the default location before parsing starts.  */
-  yylloc.first_line   = yylloc.last_line   = 1;
-  yylloc.first_column = yylloc.last_column = 0;
-#endif
-]])
-m4_ifdef([b4_initial_action], [
-m4_pushdef([b4_at_dollar],     [m4_define([b4_at_dollar_used])yylloc])dnl
-m4_pushdef([b4_dollar_dollar], [m4_define([b4_dollar_dollar_used])yylval])dnl
-  /* User initialization code.  */
-b4_initial_action
-m4_popdef([b4_dollar_dollar])dnl
-m4_popdef([b4_at_dollar])dnl
-/* Line __line__ of yacc.c.  */
-b4_syncline([@oline@], [@ofile@])
-])dnl
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+]m4_ifdef([b4_initial_action], [
+b4_dollar_pushdef([m4_define([b4_dollar_dollar_used])yylval], [],
+                  [b4_push_if([b4_pure_if([*])yypushed_loc], [yylloc])])dnl
+/* User initialization code.  */
+b4_user_initial_action
+b4_dollar_popdef[]dnl
 m4_ifdef([b4_dollar_dollar_used],[[  yyvsp[0] = yylval;
-]])dnl
-m4_ifdef([b4_at_dollar_used], [[  yylsp[0] = yylloc;
+]])])dnl
+b4_locations_if([[  yylsp[0] = ]b4_push_if([b4_pure_if([*])yypushed_loc], [yylloc])[;
 ]])dnl
 [  goto yysetstate;
 
@@ -1104,8 +1606,8 @@
 	   these so that the &'s don't force the real ones into
 	   memory.  */
 	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-]b4_locations_if([	YYLTYPE *yyls1 = yyls;])[
+	yytype_int16 *yyss1 = yyss;]b4_locations_if([
+	YYLTYPE *yyls1 = yyls;])[
 
 	/* Each stack pointer address is followed by the size of the
 	   data in use in that stack, in bytes.  This used to be a
@@ -1113,10 +1615,11 @@
 	   be undefined if yyoverflow is a macro.  */
 	yyoverflow (YY_("memory exhausted"),
 		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-]b4_locations_if([		    &yyls1, yysize * sizeof (*yylsp),])[
+		    &yyvs1, yysize * sizeof (*yyvsp),]b4_locations_if([
+		    &yyls1, yysize * sizeof (*yylsp),])[
 		    &yystacksize);
-]b4_locations_if([	yyls = yyls1;])[
+]b4_locations_if([
+	yyls = yyls1;])[
 	yyss = yyss1;
 	yyvs = yyvs1;
       }
@@ -1137,9 +1640,9 @@
 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
 	if (! yyptr)
 	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss);
-	YYSTACK_RELOCATE (yyvs);
-]b4_locations_if([	YYSTACK_RELOCATE (yyls);])[
+	YYSTACK_RELOCATE (yyss_alloc, yyss);
+	YYSTACK_RELOCATE (yyvs_alloc, yyvs);]b4_locations_if([
+	YYSTACK_RELOCATE (yyls_alloc, yyls);])[
 #  undef YYSTACK_RELOCATE
 	if (yyss1 != yyssa)
 	  YYSTACK_FREE (yyss1);
@@ -1148,8 +1651,8 @@
 #endif /* no yyoverflow */
 
       yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-]b4_locations_if([      yylsp = yyls + yysize - 1;])[
+      yyvsp = yyvs + yysize - 1;]b4_locations_if([
+      yylsp = yyls + yysize - 1;])[
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
 		  (unsigned long int) yystacksize));
@@ -1160,6 +1663,9 @@
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
   goto yybackup;
 
 /*-----------.
@@ -1168,20 +1674,39 @@
 yybackup:
 
   /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
+     lookahead token if we need one and don't already have one.  */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+    {]b4_push_if([[
+      if (!yyps->yynew)
+        {]b4_use_push_for_pull_if([], [[
+          YYDPRINTF ((stderr, "Return for a new token:\n"));]])[
+          yyresult = YYPUSH_MORE;
+          goto yypushreturn;
+        }
+      yyps->yynew = 0;]b4_pure_if([], [[
+      /* Restoring the pushed token is only necessary for the first
+         yypush_parse invocation since subsequent invocations don't overwrite
+         it before jumping to yyread_pushed_token.  */
+      yychar = yypushed_char;
+      yylval = yypushed_val;]b4_locations_if([[
+      yylloc = yypushed_loc;]])])[
+yyread_pushed_token:]])[
+      YYDPRINTF ((stderr, "Reading a token: "));]b4_push_if([b4_pure_if([[
+      yychar = yypushed_char;
+      if (yypushed_val)
+        yylval = *yypushed_val;]b4_locations_if([[
+      if (yypushed_loc)
+        yylloc = *yypushed_loc;]])])], [[
+      yychar = YYLEX;]])[
     }
 
   if (yychar <= YYEOF)
@@ -1198,34 +1723,38 @@
   /* If the proper action on seeing token YYTOKEN is to reduce or to
      detect an error, take that action.  */
   yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)]b4_lac_if([[
+    {
+      YY_LAC_ESTABLISH;
+      goto yydefault;
+    }]], [[
+    goto yydefault;]])[
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;]b4_lac_if([[
+      YY_LAC_ESTABLISH;]])[
       yyn = -yyn;
       goto yyreduce;
     }
 
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
   /* Count tokens shifted since error; after three, turn off error
      status.  */
   if (yyerrstatus)
     yyerrstatus--;
 
-  /* Shift the look-ahead token.  */
+  /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
-  /* Discard the shifted token unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;]b4_lac_if([[
+  YY_LAC_DISCARD ("shift");]])[
 
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 ]b4_locations_if([  *++yylsp = yylloc;])[
   goto yynewstate;
 
@@ -1260,22 +1789,41 @@
 ]b4_locations_if(
 [[  /* Default location.  */
   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);]])[
-  YY_REDUCE_PRINT (yyn);
+  YY_REDUCE_PRINT (yyn);]b4_lac_if([[
+  {
+    int yychar_backup = yychar;
+    switch (yyn)
+      {
+        ]b4_user_actions[
+        default: break;
+      }
+    if (yychar_backup != yychar)
+      YY_LAC_DISCARD ("yychar change");
+  }]], [[
   switch (yyn)
     {
-      ]b4_actions
-/* Line __line__ of yacc.c.  */
-b4_syncline([@oline@], [@ofile@])[
+      ]b4_user_actions[
       default: break;
-    }
+    }]])[
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
   yylen = 0;
   YY_STACK_PRINT (yyss, yyssp);
 
-  *++yyvsp = yyval;
-]b4_locations_if([  *++yylsp = yyloc;])[
+  *++yyvsp = yyval;]b4_locations_if([
+  *++yylsp = yyloc;])[
 
   /* Now `shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
@@ -1296,6 +1844,10 @@
 | yyerrlab -- here on detecting error |
 `------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -1303,45 +1855,47 @@
 #if ! YYERROR_VERBOSE
       yyerror (]b4_yyerror_args[YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \]b4_lac_if([[
+                                        yyesa, &yyes, &yyes_capacity, \]])[
+                                        yyssp, yytoken)
       {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (]b4_yyerror_args[yymsg);
-	  }
-	else
-	  {
-	    yyerror (]b4_yyerror_args[YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;]b4_lac_if([[
+        if (yychar != YYEMPTY)
+          YY_LAC_ESTABLISH;]])[
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (]b4_yyerror_args[yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
-]b4_locations_if([[  yyerror_range[0] = yylloc;]])[
+]b4_locations_if([[  yyerror_range[1] = yylloc;]])[
 
   if (yyerrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
+      /* If just tried and failed to reuse lookahead token after an
 	 error, discard it.  */
 
       if (yychar <= YYEOF)
@@ -1358,7 +1912,7 @@
 	}
     }
 
-  /* Else will try to reuse look-ahead token after shifting the error
+  /* Else will try to reuse lookahead token after shifting the error
      token.  */
   goto yyerrlab1;
 
@@ -1374,7 +1928,7 @@
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-]b4_locations_if([[  yyerror_range[0] = yylsp[1-yylen];
+]b4_locations_if([[  yyerror_range[1] = yylsp[1-yylen];
 ]])[  /* Do not reclaim the symbols of the rule which action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
@@ -1393,7 +1947,7 @@
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
+      if (!yypact_value_is_default (yyn))
 	{
 	  yyn += YYTERROR;
 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -1408,23 +1962,26 @@
       if (yyssp == yyss)
 	YYABORT;
 
-]b4_locations_if([[      yyerror_range[0] = *yylsp;]])[
+]b4_locations_if([[      yyerror_range[1] = *yylsp;]])[
       yydestruct ("Error: popping",
 		  yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
-    }
+    }]b4_lac_if([[
 
-  if (yyn == YYFINAL)
-    YYACCEPT;
+  /* If the stack popping above didn't lose the initial context for the
+     current lookahead token, the shift below will for sure.  */
+  YY_LAC_DISCARD ("error recovery");]])[
 
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 ]b4_locations_if([[
-  yyerror_range[1] = yylloc;
+  yyerror_range[2] = yylloc;
   /* Using YYLLOC is tempting, but would change the location of
-     the look-ahead.  YYLOC is available though.  */
-  YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+     the lookahead.  YYLOC is available though.  */
+  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
   *++yylsp = yyloc;]])[
 
   /* Shift the error token.  */
@@ -1448,7 +2005,7 @@
   yyresult = 1;
   goto yyreturn;
 
-#ifndef yyoverflow
+#if ]b4_lac_if([[1]], [[!defined yyoverflow || YYERROR_VERBOSE]])[
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -1459,9 +2016,14 @@
 #endif
 
 yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
+  if (yychar != YYEMPTY)
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
+    }
   /* Do not reclaim the symbols of the rule which action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
@@ -1475,55 +2037,29 @@
 #ifndef yyoverflow
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
-#endif
+#endif]b4_lac_if([[
+  if (yyes != yyesa)
+    YYSTACK_FREE (yyes);]])b4_push_if([[
+  yyps->yynew = 1;
+
+yypushreturn:]])[
 #if YYERROR_VERBOSE
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
   /* Make sure YYID is used.  */
   return YYID (yyresult);
-]}
+}
 
 
-b4_epilogue
+]b4_epilogue[]dnl
+b4_output_end()
+
 b4_defines_if(
-[@output @output_header_name@
-b4_copyright([Skeleton interface for Bison's Yacc-like parsers in C],dnl '
-  [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006])
+[b4_output_begin([b4_spec_defines_file])[
+]b4_copyright([Bison interface for Yacc-like parsers in C],
+              [1984, 1989-1990, 2000-2012])[
 
-b4_token_enums_defines(b4_tokens)
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-m4_ifdef([b4_stype],
-[typedef union[]m4_bregexp(b4_stype, [^{], [ YYSTYPE])
-b4_stype
-/* Line __line__ of yacc.c.  */
-b4_syncline([@oline@], [@ofile@])
-	YYSTYPE;],
-[typedef int YYSTYPE;])
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-b4_pure_if([],
-[extern YYSTYPE b4_prefix[]lval;])
-
-b4_locations_if(
-[#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE
-{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-} YYLTYPE;
-# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
-# define YYLTYPE_IS_DECLARED 1
-# define YYLTYPE_IS_TRIVIAL 1
-#endif
-
-b4_pure_if([],
-	   [extern YYLTYPE b4_prefix[]lloc;])
-])dnl b4_locations_if
-])dnl b4_defines_if
+]b4_shared_declarations[
+]b4_output_end()
+])
diff --git a/djgpp/Makefile.maint b/djgpp/Makefile.maint
index 2566d15..fe6b987 100644
--- a/djgpp/Makefile.maint
+++ b/djgpp/Makefile.maint
@@ -1,21 +1,20 @@
 # DJGPP Maintainer's Makefile                                    -*-Makefile-*-
 # Requires GNU sed
 
-## Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+## Copyright (C) 2005-2012 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
 top_srcdir = ..
 srcdir = .
diff --git a/djgpp/README.in b/djgpp/README.in
index ec3990b..60fd952 100644
--- a/djgpp/README.in
+++ b/djgpp/README.in
@@ -1,11 +1,11 @@
 This is a port of GNU Bison @VERSION@ to MSDOS/DJGPP.
 
-Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+Copyright (C) 2005-2012 Free Software Foundation, Inc.
 
-This program is free software; you can redistribute it and/or modify
+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.
+the Free Software Foundation, either version 3 of the License, 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
@@ -13,8 +13,7 @@
 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 1.:     DJGPP specific changes.
@@ -46,8 +45,13 @@
 	This is done by forking and using pipes for the IPC.  MSDOS does not
 	support this functionality so this has been reproduced in the usual
 	way by redirecting stdin and stdout of bison and m4 to temporary files
-	and processing these files in sequence.  All the changes to the sources
-	are documented in the djgpp/diffs file.
+	and processing these files in sequence.
+	It should be noticed that due to the great amount of file names that do
+	not cleanly map to 8.3 file names, you will need an OS with LFN support
+	to configure and compile the sources. On Win98 this implies that the
+	generation of numeric tails for 8.3 file name aliases must be enabled
+	or the compilation will fail.
+
 
 	Please **read** the docs.
 
@@ -80,7 +84,7 @@
 	some more work to unpack, if LFN support is not available.  If LFN is
 	available then you can extract the source files from the archive with
 	any unzip program and proceed to the paragraph 3.3, below.  Any file
-	name issue will be handled by the the DJGPP configuration files.
+	name issue will be handled by the DJGPP configuration files.
 	To unpack the source distribution on SFN systems, first, you MUST use
 	the `djunpack' batch file to unzip the package.  That is because some
 	file names in the official distributions need to be changed to avoid
@@ -113,22 +117,19 @@
 3.3.:   To build the binaries you will need the following binary packages:
 	  djdev203.zip (or a later but NOT a prior version)
 	  bsh204b.zip  (or a later but NOT a prior version)
-	  gcc410b.zip, gpp410b.zip, bnu2161b.zip, mak3791b.zip,
-	  fil40b.zip, shl20jb.zip, txt20b.zip,
-	  txi48b.zip, grep24b.zip, sed415b.zip,
-	  m4-144b.zip.
+          gccNNNb.zip, gppNNN.zip, bnuNNNb.zip, makNNNb.zip, filNNNb.zip,
+          perlNNNb.zip, shlNNNb.zip, txtNNNb.zip, txiNNNb.zip, grepNNNb.zip,
+          sedNNNb.zip and m4NNN.zip
 
 	If you want to run the check you will need also:
-	  dif287b.zip
+	  difNNNb.zip
 
-	All this packages can be found in the v2gnu directory of any
+	NNN represents the latest version number of the binary packages. All
+	this packages can be found in the /v2gnu directory of any
 	ftp.delorie.com mirror.
 	You will need bsh204b.zip or later and *NOT* a prior version or
 	the build will fail.  The same applies to djdev203.zip.  Please note
-	that Bison requires m4-144b.zip or later to work properly.  All the
-	other packages are the ones I have used to build the binaries
-	from this source.  Previuos versions of this packages may do the
-	job as well but I have not tested this.
+	that Bison requires m4-144b.zip or later to work properly.
 
 3.4.:   If for some reason you want to reconfigure the package cd into the top
 	srcdir (bison-@TREE_VERSION@) and run the following commands:
@@ -178,7 +179,7 @@
 
 	This will install the products into your DJGPP installation tree given
 	by the default prefix "/dev/env/DJDIR".  If you prefer to install them
-	into some other directory you will have to set prefix to the appropiate
+	into some other directory you will have to set prefix to the appropriate
 	value:
 	  make install prefix=z:/some/other/place
 
diff --git a/djgpp/config.bat b/djgpp/config.bat
index 1fb6e61..ab566d7 100644
--- a/djgpp/config.bat
+++ b/djgpp/config.bat
@@ -4,21 +4,20 @@
 Rem WARNING WARNING WARNING: This file needs to have DOS CRLF end-of-line

 Rem format, or else stock DOS/Windows shells will refuse to run it.

 

-Rem Copyright (C) 2005, 2006 Free Software Foundation, Inc.

+Rem Copyright (C) 2005-2012 Free Software Foundation, Inc.

 

-Rem This program is free software; you can redistribute it and/or modify

+Rem This program is free software: you can redistribute it and/or modify

 Rem it under the terms of the GNU General Public License as published by

-Rem the Free Software Foundation; either version 2, or (at your option)

-Rem any later version.

-

+Rem the Free Software Foundation, either version 3 of the License, or

+Rem (at your option) any later version.

+Rem

 Rem This program is distributed in the hope that it will be useful,

 Rem but WITHOUT ANY WARRANTY; without even the implied warranty of

 Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

 Rem GNU General Public License for more details.

-

+Rem

 Rem You should have received a copy of the GNU General Public License

-Rem along with this program; if not, write to the Free Software Foundation,

-Rem Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

+Rem along with this program.  If not, see <http://www.gnu.org/licenses/>.

 

 echo Configuring Bison for DJGPP v2.x...

 

@@ -143,17 +142,17 @@
 if not "%1" == "" goto ArgLoop

 

 Rem Create an arguments file for the configure script.

-echo --srcdir=%XSRC% > arguments

-if "%CACHING%" == "enabled"              echo --cache-file=%XSRC%/djgpp/config.cache >> arguments

-if "%DEPENDENCY_TRACKING%" == "enabled"  echo --enable-dependency-tracking >> arguments

-if "%DEPENDENCY_TRACKING%" == "disabled" echo --disable-dependency-tracking >> arguments

-if "%LIBICONV_PREFIX%" == "enabled"      echo --with-libiconv-prefix >> arguments

-if "%LIBICONV_PREFIX%" == "disabled"     echo --without-libiconv-prefix >> arguments

-if "%LIBINTL_PREFIX%" == "enabled"       echo --with-libintl-prefix >> arguments

-if "%LIBINTL_PREFIX%" == "disabled"      echo --without-libintl-prefix >> arguments

-if "%HTML%" == "enabled"                 echo --enable-html >> arguments

-if "%HTML%" == "disabled"                echo --disable-html >> arguments

-if not "%ARGS%" == ""                    echo %ARGS% >> arguments

+echo --srcdir=%XSRC% > args

+if "%CACHING%" == "enabled"              echo --cache-file=%XSRC%/djgpp/config.cache >> args

+if "%DEPENDENCY_TRACKING%" == "enabled"  echo --enable-dependency-tracking >> args

+if "%DEPENDENCY_TRACKING%" == "disabled" echo --disable-dependency-tracking >> args

+if "%LIBICONV_PREFIX%" == "enabled"      echo --with-libiconv-prefix >> args

+if "%LIBICONV_PREFIX%" == "disabled"     echo --without-libiconv-prefix >> args

+if "%LIBINTL_PREFIX%" == "enabled"       echo --with-libintl-prefix >> args

+if "%LIBINTL_PREFIX%" == "disabled"      echo --without-libintl-prefix >> args

+if "%HTML%" == "enabled"                 echo --enable-html >> args

+if "%HTML%" == "disabled"                echo --disable-html >> args

+if not "%ARGS%" == ""                    echo %ARGS% >> args

 set ARGS=

 set CACHING=

 set DEPENDENCY_TRACKING=

@@ -164,22 +163,26 @@
 if "%XSRC%" == "." goto InPlace

 

 :NotInPlace

-redir -e /dev/null update %XSRC%/configure.orig ./configure

+redir -e /dev/null update %XSRC%/configure.org ./configure

 test -f ./configure

 if errorlevel 1 update %XSRC%/configure ./configure

 

 :InPlace

 Rem Update configuration files

 echo Updating configuration scripts...

-test -f ./configure.orig

-if errorlevel 1 update configure configure.orig

-sed -f %XSRC%/djgpp/config.sed configure.orig > configure

+test -f ./configure.org

+if errorlevel 1 update configure configure.org

+sed -f %XSRC%/djgpp/config.sed configure.org > configure

 if errorlevel 1 goto SedError

 

 Rem Make sure they have a config.site file

 set CONFIG_SITE=%XSRC%/djgpp/config.site

 if not "%CONFIG_SITE%" == "%XSRC%/djgpp/config.site" goto SmallEnv

 

+Rem inttypes_.h and inttypes.h map to the same 8.3 alias.

+test -f %XSRC%/lib/inttypes_.h

+if not errorlevel 1 mv -f %XSRC%/lib/inttypes_.h %XSRC%/lib/_inttypes.h

+

 Rem Make sure crucial file names are not munged by unpacking

 test -f %XSRC%/po/Makefile.in.in

 if not errorlevel 1 mv -f %XSRC%/po/Makefile.in.in %XSRC%/po/Makefile.in-in

@@ -205,6 +208,51 @@
 if not errorlevel 1 mv -f %XSRC%/data/c++.m4 %XSRC%/data/cxx.m4

 test -f %XSRC%/data/cxx.m4

 if errorlevel 1 mv -f %XSRC%/data/cpp.m4 %XSRC%/data/cxx.m4

+test -f %XSRC%/data/c++-skel.m4

+if not errorlevel 1 mv -f %XSRC%/data/c++-skel.m4 %XSRC%/data/cxx-skel.m4

+test -f %XSRC%/data/cxx-skel.m4

+if errorlevel 1 mv -f %XSRC%/data/cpp-skel.m4 %XSRC%/data/cxx-skel.m4

+test -f %XSRC%/build-aux/javacomp.sh.in

+if not errorlevel 1 mv -f %XSRC%/build-aux/javacomp.sh.in %XSRC%/build-aux/javacomp.sh-in

+test -f %XSRC%/build-aux/javacomp.sh-in

+if errorlevel 1 mv -f %XSRC%/build-aux/javacomp.sh %XSRC%/build-aux/javacomp.sh-in

+test -f %XSRC%/build-aux/javacomp.sh-in

+if errorlevel 1 mv -f %XSRC%/build-aux/javacomp.shin %XSRC%/build-aux/javacomp.sh-in

+test -f %XSRC%/build-aux/javacomp.sh-in

+if errorlevel 1 mv -f %XSRC%/build-aux/javacomp.sh_in %XSRC%/build-aux/javacomp.sh-in

+test -f %XSRC%/build-aux/javacomp.sh-in

+if errorlevel 1 mv -f %XSRC%/build-aux/javacomp.sh.in %XSRC%/build-aux/javacomp.sh-in

+test -f %XSRC%/build-aux/javaexec.sh.in

+if not errorlevel 1 mv -f %XSRC%/build-aux/javaexec.sh.in %XSRC%/build-aux/javaexec.sh-in

+test -f %XSRC%/build-aux/javaexec.sh-in

+if errorlevel 1 mv -f %XSRC%/build-aux/javaexec.sh %XSRC%/build-aux/javaexec.sh-in

+test -f %XSRC%/build-aux/javaexec.sh-in

+if errorlevel 1 mv -f %XSRC%/build-aux/javaexec.shin %XSRC%/build-aux/javaexec.sh-in

+test -f %XSRC%/build-aux/javaexec.sh-in

+if errorlevel 1 mv -f %XSRC%/build-aux/javaexec.sh_in %XSRC%/build-aux/javaexec.sh-in

+test -f %XSRC%/build-aux/javaexec.sh-in

+if errorlevel 1 mv -f %XSRC%/build-aux/javaexec_sh.in %XSRC%/build-aux/javaexec.sh-in

+test -f %XSRC%/doc/yacc.1.in

+if not errorlevel 1 mv -f %XSRC%/doc/yacc.1.in %XSRC%/doc/yacc.1-in

+test -f %XSRC%/doc/yacc.1-in

+if errorlevel 1 mv -f %XSRC%/doc/yacc.1 %XSRC%/doc/yacc.1-in

+test -f %XSRC%/doc/yacc.1-in

+if errorlevel 1 mv -f %XSRC%/doc/yacc.1in %XSRC%/doc/yacc.1-in

+test -f %XSRC%/doc/yacc.1-in

+if errorlevel 1 mv -f %XSRC%/doc/yacc.1_in %XSRC%/doc/yacc.1-in

+test -f %XSRC%/doc/yacc.1-in

+if errorlevel 1 mv -f %XSRC%/doc/yacc_1.in %XSRC%/doc/yacc.1-in

+test -f %XSRC%/etc/bench.pl.in

+if not errorlevel 1 mv -f %XSRC%/etc/bench.pl.in %XSRC%/etc/bench.pl-in

+test -f %XSRC%/etc/bench.pl-in

+if errorlevel 1 mv -f %XSRC%/etc/bench.pl %XSRC%/etc/bench.pl-in

+test -f %XSRC%/etc/bench.pl-in

+if errorlevel 1 mv -f %XSRC%/etc/bench.plin %XSRC%/etc/bench.pl-in

+test -f %XSRC%/etc/bench.pl-in

+if errorlevel 1 mv -f %XSRC%/etc/bench.pl_in %XSRC%/etc/bench.pl-in

+test -f %XSRC%/etc/bench.pl-in

+if errorlevel 1 mv -f %XSRC%/etc/bench_pl.in %XSRC%/etc/bench.pl-in

+

 :scan_gram_c_Test

 test -f %XSRC%/src/c-scan-gram.c

 if not errorlevel 1 goto scan_skel_c_Test

@@ -222,25 +270,36 @@
 if errorlevel 1 goto lalr1_ccFileError

 mv ./lalr1.cc %XSRC%/data/lalr1.cc

 sed "s/c++\.m4/cxx.m4/" %XSRC%/data/location.cc > location.cc

-if errorlevel 1 goto location.ccFileError

+if errorlevel 1 goto location_ccFileError

 mv ./location.cc %XSRC%/data/location.cc

 sed "s/c++\.m4/cxx.m4/" %XSRC%/data/glr.cc > glr.cc

-if errorlevel 1 goto glr.ccFileError

+if errorlevel 1 goto glr_ccFileError

 mv ./glr.cc %XSRC%/data/glr.cc

 

+Rem Fix src/getargs.c to reflect the renaming of c++-skel.m4

+sed "s/c++-skel\.m4/cxx-skel.m4/" %XSRC%/src/getargs.c > getargs.c

+if errorlevel 1 goto getargs_cFileError

+mv ./getargs.c %XSRC%/src/getargs.c

+

 Rem Define DJGPP specific defs in config.hin

 echo Editing config.hin...

-test -f %XSRC%/config_h.orig

-if errorlevel 1 update %XSRC%/config.hin %XSRC%/config_h.orig

-sed -f %XSRC%/djgpp/config_h.sed %XSRC%/config_h.orig > config.hin

+test -f %XSRC%/lib/config_h.org

+if errorlevel 1 update %XSRC%/lib/config.hin %XSRC%/lib/config_h.org

+sed -f %XSRC%/djgpp/config_h.sed %XSRC%/lib/config_h.org > config.hin

 if errorlevel 1 goto SedError2

-mv -f config.hin %XSRC%/config.hin

+mv -f config.hin %XSRC%/lib/config.hin

 

 

 Rem Fixing ilicit testsuite file name.

 test -f %XSRC%/tests/c++.at

 if not errorlevel 1 mv -f %XSRC%/tests/c++.at %XSRC%/tests/cxx.at

 

+test -f %XSRC%/tests/testsuite.org

+if errorlevel 1 update %XSRC%/tests/testsuite %XSRC%/tests/testsuite.org

+sed -f %XSRC%/djgpp/testsuite.sed %XSRC%/tests/testsuite.org > testsuite.tmp

+if errorlevel 1 goto SedError3

+mv -f ./testsuite.tmp %XSRC%/tests/testsuite

+

 Rem Fixing ilicit calc++ file names in the calc++ directory.

 test -d %XSRC%/examples/calc++

 if not errorlevel 1 mv -f %XSRC%/examples/calc++ %XSRC%/examples/calcxx

@@ -412,21 +471,21 @@
 

 Rem Update the arguments file for the configure script.

 Rem We prefer without-included-gettext because libintl.a from gettext package

-Rem is the only one that is garanteed to have been ported to DJGPP.

-echo --enable-nls --without-included-gettext >> arguments

+Rem is the only one that is guaranteed to have been ported to DJGPP.

+echo --enable-nls --without-included-gettext >> args

 goto ConfigurePackage

 

 :MissingNLSTools

 echo Needed libs/tools for NLS not found. Configuring without NLS.

 :WithoutNLS

 Rem Update the arguments file for the configure script.

-echo --disable-nls >> arguments

+echo --disable-nls >> args

 

 :ConfigurePackage

 echo Running the ./configure script...

-sh ./configure @arguments

+sh ./configure @args

 if errorlevel 1 goto CfgError

-rm arguments

+rm args

 echo Done.

 goto End

 

@@ -438,6 +497,10 @@
 echo ./data/glr.cc file editing failed!

 goto End

 

+:getargs_cFileError

+echo ./src/getargs.c file editing failed!

+goto End

+

 :location_ccFileError

 echo ./data/location.cc file editing failed!

 goto End

@@ -455,7 +518,11 @@
 goto End

 

 :SedError2

-echo ./config.hin editing failed!

+echo ./lib/config.hin editing failed!

+goto End

+

+:SedError3

+echo ./tests/testsuite editing failed!

 goto End

 

 :CfgError

diff --git a/djgpp/config.sed b/djgpp/config.sed
index 0869e8c..d5a5807 100644
--- a/djgpp/config.sed
+++ b/djgpp/config.sed
@@ -1,77 +1,96 @@
 # DJGPP specific configuration file.
 # Sed script for additional DJGPP specific editing
-# of the configure script generated by autoconf 2.57.
+# of the configure script generated by autoconf 2.62.
 
+# Copyright (C) 2005-2012 Free Software Foundation, Inc.
 
-# Copyright (C) 2005, 2006 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
 
 # Additional editing of Makefiles
-/(echo[	 ]*':t/ a\
+/^eval sed.*ac_file_inputs.*tmp\/out \\$/ {
+:loop
+n
+/^$/!b loop
+a\
+cat > "$tmp/subs-djgpp.sed" << eof_djgpp\
 # DJGPP specific Makefile changes.\
-  /^aliaspath *	*=/s,:,";",g;t t\
-  /TEXINPUTS=/s,:,";",g;t t\
-  /PATH=/s,:,";",g;t t\
-  s,\\.deps,_deps,g;t t\
-  s,\\.new\\.,_new.,g;t t\
-  s,\\.old\\.,_old.,g;t t\
-  s,c++\\.at,cxx.at,g;t t\
-  s,c++\\.m4,cxx.m4,g;t t\
-  s,calc++,calcxx,g;t t\
-  s,scan-gram-c,c-scan-gram,g;t t\
-  s,scan-skel-c,c-scan-skel,g;t t\
-  s,Makefile\\.in\\.in,Makefile.in-in,g;t t\
-  s,Makefile\\.am\\.in,Makefile.am-in,g;t t\
-  s,(MAKEINFOFLAGS),& --no-split,\
-  /^install-info-am:/,/^$/ {\
-    /@list=/ s,\\\$(INFO_DEPS),& bison.i,\
-    /@for *file/ s,\\\$(INFO_DEPS),& bison.i,\
-    s,file-\\[0-9\\]\\[0-9\\],& \\$\\$file[0-9] \\$\\$file[0-9][0-9],\
-  }\
-  /^\\.y\\.c:/,/^$/ {\
-    /\\\$(YACCCOMPILE)/ {\
-      a\\\
-	-@test -f y.tab.c && mv -f y.tab.c y_tab.c\\\
+s,\\.deps,_deps,g\
+s,\\.libs,_libs,g\
+s,\\.new\\.,_new.,g\
+s,\\.old\\.,_old.,g\
+s,\\.tab\\.,_tab.,g\
+s,c++\\.at,cxx.at,g\
+s,c++\\.m4,cxx.m4,g\
+s,c++-skel\\.m4,cxx-skel.m4,g\
+s,calc++,calcxx,g\
+s,scan-gram-c,c-scan-gram,g\
+s,scan-skel-c,c-scan-skel,g\
+s,inttypes_,_inttypes,g\
+s,javacomp\\.sh\\.in,javacomp.sh-in,g\
+s,javaexec\\.sh\\.in,javaexec.sh-in,g\
+s,yacc\\.1\\.in,yacc.1-in,g\
+s,bench\\.pl\\.in,bench.pl-in,g\
+s,Makefile\\.am\\.in,Makefile.am-in,g\
+s,Makefile\\.in\\.in,Makefile.in-in,g\
+/^\\.y\\.c:/,/^$/ {\
+  /\\\$(YACCCOMPILE)/ {\
+    a\\\\\
+	-@test -f y.tab.c && mv -f y.tab.c y_tab.c\\\\\
 	-@test -f y.tab.h && mv -f y.tab.h y_tab.h\
-    }\
   }\
-/^libbison.a:/ i\\\
-\\$(top_srcdir)/djgpp/subpipe.c: \\$(top_srcdir)/djgpp/subpipe.h\\\
-subpipe.o: \\$(top_srcdir)/djgpp/subpipe.c \\$(top_srcdir)/djgpp/subpipe.h\\\
+}\
+/^libbison.a:/ i\\\\\
+\\$(top_srcdir)/djgpp/subpipe.c: \\$(top_srcdir)/djgpp/subpipe.h\\\\\
+subpipe.o: \\$(top_srcdir)/djgpp/subpipe.c \\$(top_srcdir)/djgpp/subpipe.h\\\\\
 	\\$(COMPILE) -c \\$<\
-/^yacc:/ i\\\
-yacc.bat:\\\
+/^yacc:/ i\\\\\
+yacc.bat:\\\\\
 	echo "bison\\$(EXEEXT) -y %1 %2 %3 %4 %5 %6 %7 %8 %9" >\\$@\
 /^bin_SCRIPTS =/s/$/ yacc.bat/\
-/^MOSTLYCLEANFILES = yacc/s/$/ yacc.bat/
-
+/^MOSTLYCLEANFILES = yacc/s/$/ yacc.bat/\
+/cross-options.texi:/,/^$/ s|bison|&.exe|g\
+/^\\.x\\.1:/,/^$/ s|\\$program|&.exe|g\
+eof_djgpp\
+sed -f "\$tmp/subs-djgpp.sed" \$tmp/out > \$tmp/out.djgpp\
+mv -f \$tmp/out.djgpp \$tmp/out
+}
 
 # Makefile.in.in is renamed to Makefile.in-in.
-/ac_config_files=/,/_ACEOF/ {
-  s|po/Makefile\.in|&:po/Makefile.in-in|
+/ac_config_files=/ {
+  /runtime-po/!s|po/Makefile\.in|&:po/Makefile.in-in|
+  s|runtime-po/Makefile\.in|&:runtime-po/Makefile.in-in|
+  s|javacomp\.sh\.in|javacomp.sh-in|
+  s|javaexec\.sh\.in|javaexec.sh-in|
+  s|doc/yacc\.1|&:doc/yacc.1-in|
+  s|etc/bench.pl|&:etc/bench.pl-in|
 }
-/CONFIG_FILES=/ s|po/Makefile\.in|&:po/Makefile.in-in|2
+
+/CONFIG_FILES=/ {
+  /runtime-po/!s|po/Makefile\.in|&:po/Makefile.in-in|2
+  s|runtime-po/Makefile\.in|&:runtime-po/Makefile.in-in|2
+  s|javacomp\.sh\.in|javacomp.sh-in|
+  s|javaexec\.sh\.in|javaexec.sh-in|
+  s|doc/yacc\.1|&:doc/yacc.1-in|2
+  s|etc/bench\.pl|&:etc/bench.pl-in|2
+}
 
 # We always use _deps and _libs instead of .deps and .libs, because
 # the latter is an invalid name on 8+3 MS-DOS file system.  This makes
 # the generated Makefiles good for every DJGPP installation, not only
 # the one where the package was configured (which could happen to be
 # a Windows box, where leading dots in file names are allowed).
-s,\.deps,_deps,g
-s,\.libs,_libs,g
 /^rmdir[	 ]*\.tst/ i\
 am__leading_dot=_
 
@@ -91,18 +110,6 @@
 # DOS-style absolute file names should be supported as well
 /\*) top_srcdir=/s,/\*,[\\\\/]* | ?:[\\\\/]*,
 
-# Prevent the spliting of subs.sed.
-# The sed script: subs.sed is split into 48 lines long files.
-# This will produce sed scripts called subs-$ac_sed_frag.sed, where
-# $ac_sed_frag is some unique number. This will not work if the splited
-# sed script contains a multiple line sed command at line #48. In this
-# case the first part of the multiple line sed command will be written
-# at the end of one particular subs-$ac_sed_frag.sed and the rest of the
-# sed command will be written at the begining of the next subs-$ac_sed_frag.sed
-# making both sed script useless.
-# This matches the configure script produced by Autoconf 2.57
-/ac_max_sed_lines=[0-9]/ s,=.*$,=`sed -n "$=" $tmp/subs.sed`,
-
 # The following two items are changes needed for configuring
 # and compiling across partitions.
 # 1) The given srcdir value is always translated from the
@@ -120,32 +127,30 @@
 # which the package has not been configured for.
 /MISSING=/,/^$/ {
   /^fi$/ a\
-am_missing_run=`echo "$am_missing_run" | sed 's%/dev.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*%${top_srcdir}%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*%${top_srcdir}%'`
+am_missing_run=`echo "$am_missing_run" | sed 's%/dev/.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%${top_srcdir}%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%${top_srcdir}%'`
 }
 /^install_sh=/a\
-install_sh=`echo "$install_sh" | sed 's%/dev.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*%${top_srcdir}%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*%${top_srcdir}%'`
+install_sh=`echo "$install_sh" | sed 's%/dev/.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%${top_srcdir}%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%${top_srcdir}%'`
 
 # This will only work if the assumption that the
 # testsuite is ran from the following path:
 #   ${top_srcdir}/tests/testsuite.dir
 # holds. The explicit names are of no importance.
 #   ../../. == ${top_srcdir}
-/\.)[	 ]*ac_abs_builddir=/,/^esac$/ {
- /^esac$/ a\
-ac_abs_builddir=`echo "$ac_abs_builddir" | sed "s%/dev.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*/[^/]*%../../.%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*/[^/]*%../../.%"`
-}
-/\.)[	 ]*ac_abs_top_builddir=/,/^esac$/ {
- /^esac$/ a\
-ac_abs_top_builddir=`echo "$ac_abs_top_builddir" | sed "s%/dev.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*/[^/]*%../../../%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*/[^/]*%../../../%"`
-}
-/\.)[	 ]*ac_abs_srcdir=/,/^esac$/ {
- /^esac$/ a\
-ac_abs_srcdir=`echo "$ac_abs_srcdir" | sed "s%/dev.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*/[^/]*%../../.%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*/[^/]*%../../.%"`
-}
-/\.)[	 ]*ac_abs_top_srcdir=/,/^esac$/ {
- /^esac$/ a\
-ac_abs_top_srcdir=`echo "$ac_abs_top_srcdir" | sed "s%/dev.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*/[^/]*%../../../%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-z]*/[^/]*%../../../%"`
-}
+#/^esac$/,/^ac_abs_srcdir=/ {
+/^ac_abs_srcdir=/ i\
+ac_abs_builddir=`echo "$ac_abs_builddir" | sed "s%/dev/.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../.%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../.%"`\
+ac_abs_top_builddir=`echo "$ac_abs_top_builddir" | sed "s%/dev/.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../..%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../..%"`\
+ac_abs_top_srcdir=`echo "$ac_abs_top_srcdir" | sed "s%/dev/.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../..%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../..%"`
+#ac_abs_srcdir=`echo "$ac_abs_srcdir" | sed "s%/dev/.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../.%;s%.:.*/bison[-_0-9]\\{1,1\\}[-.0-9A-Za-z+]*%../../.%"`
+/^ac_abs_srcdir=/ a\
+for dj_dir in $ac_abs_builddir $ac_abs_top_builddir $ac_abs_top_srcdir $ac_abs_srcdir\
+do\
+  ac_abs_builddir=`echo "$ac_abs_builddir" | sed "s%//%/%g"`\
+  ac_abs_top_builddir=`echo "$ac_abs_top_builddir" | sed "s%//%/%g"`\
+  ac_abs_top_srcdir=`echo "$ac_abs_top_srcdir" | sed "s%//%/%g"`\
+  ac_abs_srcdir=`echo "$ac_abs_srcdir" | sed "s%//%/%g"`\
+done
 
 # Add DJGPP version information.
 /^#define VERSION/ s/\$VERSION/&  (DJGPP port (r1))/
@@ -160,5 +165,26 @@
 ac_djgpp_path=`echo "$DJDIR" | sed 's%\\\\\\%/%g' | tr $as_cr_LETTERS $as_cr_letters`\
 ac_cv_flibs=`echo "$ac_cv_flibs" | sed "s%-L$ac_djgpp_path%-L/dev/env/DJDIR%g"`
 
+# Autoconf generated configure scripts write absolute
+# paths of certain header files into Makefiles making
+# them useless for DJGPP installations for which the
+# package has not been configured for.
+/^.*echo "\$as_me:\$LINENO: result: \$gl_cv_absolute_.*$/ {
+h
+s,^.*\(gl_cv_absolute_\)\([a-z0-9_]*\)\(_h\).*$,\1\2\3=`echo $\1\2\3 | sed "s%[^:]:.*/include/%/dev/env/DJDIR/include/%"`,
+G
+}
+/^.*echo "\$as_me:\$LINENO: result: \$gl_cv_full_.*$/ {
+h
+s,^.*\(gl_cv_full_\)\([a-z0-9_]*\)\(_h\).*$,\1\2\3=`echo $\1\2\3 | sed "s%[^:]:.*/include/%/dev/env/DJDIR/include/%"`,
+G
+}
+
 # The following is not a valid DOS file name
 s/calc++/calcxx/g
+
+# The CR test for awk does not work for DJGPP.
+/^ac_cs_awk_cr=/,/^$/ {
+  /^fi$/ a\
+ac_cs_awk_cr=$ac_cr
+}
diff --git a/djgpp/config.site b/djgpp/config.site
index a545370..7ca4107 100644
--- a/djgpp/config.site
+++ b/djgpp/config.site
@@ -3,21 +3,20 @@
 # This is the config.site file for configuring GNU packages
 # which are to be built with DJGPP tools.
 
-# Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2005-2012 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 # Include the djgpp subdirectory in PATH, so that getconf is found
@@ -68,6 +67,9 @@
 # A sane default for sed.
 ac_cv_path_SED=${SED='/dev/env/DJDIR/bin/sed'}
 
+# A sane default for mkdir.
+ac_cv_path_mkdir=${MKDIR_P='/dev/env/DJDIR/bin/mkdir -p'}
+
 # These are set here so the generated libtool will be good
 # for every DJGPP installation, not only the one where the
 # package was configured.
diff --git a/djgpp/config_h.sed b/djgpp/config_h.sed
index a8ea467..f616abc 100644
--- a/djgpp/config_h.sed
+++ b/djgpp/config_h.sed
@@ -1,20 +1,19 @@
 # sed script for DJGPP specific editing of config.hin
 
-# Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2005-2012 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 $ a\
diff --git a/djgpp/djunpack.bat b/djgpp/djunpack.bat
index 5b08a79..b4de3ac 100644
--- a/djgpp/djunpack.bat
+++ b/djgpp/djunpack.bat
@@ -7,12 +7,12 @@
 Rem renaming some of the files whose names are invalid on DOS or conflict

 Rem with other file names after truncation to DOS 8+3 namespace.

 Rem

-Rem Copyright (C) 2005, 2006 Free Software Foundation, Inc.

+Rem Copyright (C) 2005-2012 Free Software Foundation, Inc.

 Rem

-Rem This program is free software; you can redistribute it and/or modify

+Rem This program is free software: you can redistribute it and/or modify

 Rem it under the terms of the GNU General Public License as published by

-Rem the Free Software Foundation; either version 2, or (at your option)

-Rem any later version.

+Rem the Free Software Foundation, either version 3 of the License, or

+Rem (at your option) any later version.

 Rem

 Rem This program is distributed in the hope that it will be useful,

 Rem but WITHOUT ANY WARRANTY; without even the implied warranty of

@@ -20,8 +20,7 @@
 Rem GNU General Public License for more details.

 Rem

 Rem You should have received a copy of the GNU General Public License

-Rem along with this program; if not, write to the Free Software Foundation,

-Rem Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

+Rem along with this program.  If not, see <http://www.gnu.org/licenses/>.

 Rem

 Rem

 Rem Invoke like this:

diff --git a/djgpp/fnchange.lst b/djgpp/fnchange.lst
index 69a61e6..1b43d9b 100644
--- a/djgpp/fnchange.lst
+++ b/djgpp/fnchange.lst
@@ -1,2 +1,27 @@
-@V@/src/scan-gram-c.c  @V@/src/c-scan-gram.c
-@V@/src/scan-skel-c.c  @V@/src/c-scan-skel.c
+@V@/build-aux/javacomp.sh.in              @V@/build-aux/javacomp.sh-in
+@V@/build-aux/javaexec.sh.in              @V@/build-aux/javaexec.sh-in
+@V@/data/c++-skel.m4                      @V@/data/cxx-skel.m4
+@V@/data/c++.m4                           @V@/data/cxx.m4
+@V@/doc/yacc.1.in                         @V@/doc/yacc.1-in
+@V@/etc/bench.pl.in                       @V@/etc/bench.pl-in
+@V@/examples/calc++/                      @V@/examples/calcxx/
+@V@/examples/calc++/Makefile.am           @V@/examples/calcxx/Makefile.am
+@V@/examples/calc++/Makefile.in           @V@/examples/calcxx/Makefile.in
+@V@/examples/calc++/calc++-scanner.cc     @V@/examples/calcxx/calcxx-scanner.cc
+@V@/examples/calc++/calc++-scanner.ll     @V@/examples/calcxx/calcxx-scanner.ll
+@V@/examples/calc++/calc++.cc             @V@/examples/calcxx/calcxx.cc
+@V@/examples/calc++/calc++-driver.hh      @V@/examples/calcxx/calcxx-driver.hh
+@V@/examples/calc++/calc++-driver.cc      @V@/examples/calcxx/calcxx-driver.cc
+@V@/examples/calc++/stack.hh              @V@/examples/calcxx/stack.hh
+@V@/examples/calc++/position.hh           @V@/examples/calcxx/position.hh
+@V@/examples/calc++/location.hh           @V@/examples/calcxx/location.hh
+@V@/examples/calc++/calc++-parser.hh      @V@/examples/calcxx/calcxx-parser.hh
+@V@/examples/calc++/calc++-parser.cc      @V@/examples/calcxx/calcxx-parser.cc
+@V@/examples/calc++/calc++-parser.stamp   @V@/examples/calcxx/calcxx-parser.stamp
+@V@/examples/calc++/calc++-parser.yy      @V@/examples/calcxx/calcxx-parser.yy
+@V@/examples/calc++/test                  @V@/examples/calcxx/test
+@V@/po/Makefile.in.in                     @V@/po/Makefile.in-in
+@V@/runtime-po/Makefile.in.in             @V@/runtime-po/Makefile.in-in
+@V@/src/scan-gram-c.c                     @V@/src/c-scan-gram.c
+@V@/src/scan-skel-c.c                     @V@/src/c-scan-skel.c
+@V@/tests/c++.at                          @V@/tests/cxx.at
diff --git a/djgpp/subpipe.c b/djgpp/subpipe.c
index 33e2a38..f85e8f9 100644
--- a/djgpp/subpipe.c
+++ b/djgpp/subpipe.c
@@ -1,11 +1,11 @@
 /* Subprocesses with pipes.
 
-   Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2005-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, 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
@@ -13,15 +13,12 @@
    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-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Juan Manuel Guerrero <juan.guerrero@gmx.de>. */
 
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "subpipe.h"
 
@@ -63,22 +60,33 @@
   do {                                                                \
     close ((fd));                                                     \
     if (unlink ((name)))                                              \
-      error (EXIT_FAILURE, 0, _("removing of `%s' failed"), (name));  \
+      error (EXIT_FAILURE, 0, _("removing of '%s' failed"), (name));  \
   } while (0)
 
 
 void
 init_subpipe(void)
 {
+  char *tmpdir;
   int fd;
 
-  strcpy(tmp_file_name[0], "/dev/env/TMPDIR/bnXXXXXX");
+  tmpdir = getenv("TMPDIR");
+  if (tmpdir == NULL)
+    tmpdir = getenv("TMP");
+  if (tmpdir == NULL)
+    tmpdir = getenv("TEMP");
+  if (access(tmpdir, D_OK))
+    tmpdir = ".";
+
+  strcpy(tmp_file_name[0], tmpdir);
+  strcat(tmp_file_name[0], "/bnXXXXXX");
   fd = mkstemp(tmp_file_name[0]);
   if (fd < 0)
     error(EXIT_FAILURE, 0, _("creation of a temporary file failed"));
   close (fd);
 
-  strcpy(tmp_file_name[1], "/dev/env/TMPDIR/bnXXXXXX");
+  strcpy(tmp_file_name[1], tmpdir);
+  strcat(tmp_file_name[1], "/bnXXXXXX");
   fd = mkstemp(tmp_file_name[1]);
   if (fd < 0)
     error(EXIT_FAILURE, 0, _("creation of a temporary file failed"));
@@ -223,17 +231,17 @@
   {
     remove_tmp_file(STDIN_FILENO, tmp_file_name[0]);
     remove_tmp_file(STDOUT_FILENO, tmp_file_name[1]);
-    error(EXIT_FAILURE, 0, _("subsidiary program `%s' interrupted"), program);
+    error(EXIT_FAILURE, 0, _("subsidiary program '%s' interrupted"), program);
   }
   if (status)
   {
     remove_tmp_file(STDIN_FILENO, tmp_file_name[0]);
     remove_tmp_file(STDOUT_FILENO, tmp_file_name[1]);
     error(EXIT_FAILURE, 0, _(errno == ENOENT
-			     ? "subsidiary program `%s' not found"
+			     ? "subsidiary program '%s' not found"
 			     : status < 1
-			     ? "subsidiary program `%s' failed"
-			     : "subsidiary program `%s' failed (status=%i, errno=%i)"), program, status, errno);
+			     ? "subsidiary program '%s' failed"
+			     : "subsidiary program '%s' failed (status=%i, errno=%i)"), program, status, errno);
   }
 
 
@@ -275,9 +283,9 @@
   free(arguments);
 
   if (unlink(tmp_file_name[0]))
-    error(EXIT_FAILURE, 0, _("removing of `%s' failed"), tmp_file_name[0]);
+    error(EXIT_FAILURE, 0, _("removing of '%s' failed"), tmp_file_name[0]);
   if (unlink(tmp_file_name[1]))
-    error(EXIT_FAILURE, 0, _("removing of `%s' failed"), tmp_file_name[1]);
+    error(EXIT_FAILURE, 0, _("removing of '%s' failed"), tmp_file_name[1]);
 
   if (dup2(old_stdin, STDIN_FILENO) < 0)
     error(EXIT_FAILURE, 0, "restore of bison's stdin failed");
diff --git a/djgpp/subpipe.h b/djgpp/subpipe.h
index db2eb8c..d7a30dc 100644
--- a/djgpp/subpipe.h
+++ b/djgpp/subpipe.h
@@ -1,9 +1,10 @@
 /* Subprocesses with pipes.
-   Copyright (C) 2005 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   Copyright (C) 2005-2012 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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -12,8 +13,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Juan Manuel Guerrero <juan.guerrero@gmx.de>. */
 
diff --git a/djgpp/testsuite.sed b/djgpp/testsuite.sed
new file mode 100644
index 0000000..4d551b3
--- /dev/null
+++ b/djgpp/testsuite.sed
@@ -0,0 +1,23 @@
+# DJGPP specific configuration file.

+# Sed script for additional DJGPP specific editing

+# of the testsuite script generated by autoconf 2.61.

+

+# Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.

+

+

+# Remove disallowed characters from file names.

+

+s/~!@#\\\$%^&\*()-=_+{}\[\]|\\\\:;<>, ./~!@#\\$%^\&()-=_+{}[];, ./g

diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
new file mode 100644
index 0000000..e36a1ce
--- /dev/null
+++ b/doc/Doxyfile.in
@@ -0,0 +1,1087 @@
+# Doxyfile 1.3.4		-*- Makefile -*-
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = "@PACKAGE_NAME@"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = "@PACKAGE_VERSION@"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = .
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH        =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = @top_srcdir@/src \
+			 @top_builddir@/src
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+
+FILE_PATTERNS          = *.c \
+                         *.h \
+	                 *.l \
+			 *.y
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = @top_srcdir@/src/scan-gram.c \
+	                 @top_srcdir@/src/scan-skel.c \
+	                 @top_builddir@/src/parse-*.[ch]
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are
+# excluded from the input.
+
+EXCLUDE_SYMLINKS       = YES
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER           =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET        =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output dir.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = YES
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.  This is useful
+# if you want to understand what is going on.  On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#   TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#   TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = @PERL@
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of
+# the graphs generated by dot. A depth value of 3 means that only
+# nodes reachable from the root by following a path via at most 3
+# edges will be shown. Nodes that lay further from the root node will
+# be omitted. Note that setting this option to 1 or 2 may greatly
+# reduce the computation time needed for large code bases. Also note
+# that a graph may be further truncated if the graph's image
+# dimensions are not sufficient to fit the graph (see
+# MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).  If 0 is used for the
+# depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/doc/Makefile b/doc/Makefile
deleted file mode 100644
index 89398cd..0000000
--- a/doc/Makefile
+++ /dev/null
@@ -1,597 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# doc/Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-srcdir = .
-top_srcdir = ..
-
-pkgdatadir = $(datadir)/bison
-pkglibdir = $(libdir)/bison
-pkgincludedir = $(includedir)/bison
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /usr/bin/install -c
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-subdir = doc
-DIST_COMMON = $(bison_TEXINFOS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/stamp-vti \
-	$(srcdir)/version.texi
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
-	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
-	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
-	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-INFO_DEPS = $(srcdir)/bison.info
-TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
-am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
-DVIS = bison.dvi
-PDFS = bison.pdf
-PSS = bison.ps
-HTMLS = bison.html
-TEXINFOS = bison.texinfo
-TEXI2DVI = texi2dvi
-TEXI2PDF = $(TEXI2DVI) --pdf --batch
-MAKEINFOHTML = $(MAKEINFO) --html
-AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
-DVIPS = dvips
-am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"
-man1dir = $(mandir)/man1
-NROFF = nroff
-MANS = $(man_MANS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9
-AMDEP_FALSE = #
-AMDEP_TRUE = 
-AMTAR = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar
-AUTOCONF = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader
-AUTOM4TE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te
-AUTOMAKE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9
-AWK = gawk
-BISON_CXX_WORKS = :
-BISON_CXX_WORKS_FALSE = #
-BISON_CXX_WORKS_TRUE = 
-BISON_LOCALEDIR = /usr/share/locale
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
-CPP = gcc -E
-CPPFLAGS = 
-CXX = g++
-CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = grep -E
-EXEEXT = 
-GCC = yes
-GETOPT_H = 
-GMSGFMT = /usr/bin/msgfmt
-HAVE__BOOL = 1
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
-INTLLIBS = 
-INTL_MACOSX_LIBS = 
-LDFLAGS = 
-LEX = flex
-LEXLIB = -lfl
-LEX_OUTPUT_ROOT = lex.yy
-LIBICONV = -liconv
-LIBINTL = 
-LIBOBJS =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-LIBS = 
-LTLIBICONV = -liconv
-LTLIBINTL = 
-LTLIBOBJS =  dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo
-M4 = /usr/bin/m4
-MAKEINFO = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo
-MKINSTALLDIRS = $(top_builddir)/build-aux/mkinstalldirs
-MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge
-O0CFLAGS = -g 
-O0CXXFLAGS = -g 
-OBJEXT = o
-PACKAGE = bison
-PACKAGE_BUGREPORT = bug-bison@gnu.org
-PACKAGE_NAME = GNU Bison
-PACKAGE_STRING = GNU Bison 2.3
-PACKAGE_TARNAME = bison
-PACKAGE_VERSION = 2.3
-PATH_SEPARATOR = :
-POSUB = po
-RANLIB = ranlib
-SET_MAKE = 
-SHELL = /bin/sh
-STDBOOL_H = 
-STRIP = 
-UNISTD_H = 
-USE_NLS = yes
-VALGRIND = 
-VERSION = 2.3
-WARNING_CFLAGS = 
-WARNING_CXXFLAGS = 
-WERROR_CFLAGS = 
-XGETTEXT = /usr/bin/xgettext
-YACC = bison -y
-YACC_LIBRARY = liby.a
-YACC_SCRIPT = yacc
-ac_ct_CC = gcc
-ac_ct_CXX = g++
-ac_ct_RANLIB = ranlib
-ac_ct_STRIP = 
-aclocaldir = ${datadir}/aclocal
-am__fastdepCC_FALSE = #
-am__fastdepCC_TRUE = 
-am__fastdepCXX_FALSE = #
-am__fastdepCXX_TRUE = 
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-datadir = ${prefix}/share
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-includedir = ${prefix}/include
-infodir = ${prefix}/info
-install_sh = /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localstatedir = ${prefix}/var
-mandir = ${prefix}/man
-mkdir_p = mkdir -p --
-oldincludedir = /usr/include
-prefix = /home/phanna/src/bison
-program_transform_name = s,x,x,
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-sysconfdir = ${prefix}/etc
-target_alias = 
-AM_MAKEINFOFLAGS = --no-split
-info_TEXINFOS = bison.texinfo
-man_MANS = bison.1
-bison_TEXINFOS = gpl.texi fdl.texi
-EXTRA_DIST = bison.1 refcard.tex
-CLEANFILES = refcard.dvi refcard.log refcard.ps bison.fns
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .dvi .html .info .pdf .ps .texinfo
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  doc/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-.texinfo.info:
-	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
-	am__cwd=`pwd` && cd $(srcdir) && \
-	rm -rf $$backupdir && mkdir $$backupdir && \
-	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
-	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
-	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
-	  done; \
-	else :; fi && \
-	cd "$$am__cwd"; \
-	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-	 -o $@ $<; \
-	then \
-	  rc=0; \
-	  cd $(srcdir); \
-	else \
-	  rc=$$?; \
-	  cd $(srcdir) && \
-	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
-	fi; \
-	rm -rf $$backupdir; exit $$rc
-
-.texinfo.dvi:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2DVI) $<
-
-.texinfo.pdf:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2PDF) $<
-
-.texinfo.html:
-	rm -rf $(@:.html=.htp)
-	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-	 -o $(@:.html=.htp) $<; \
-	then \
-	  rm -rf $@; \
-	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
-	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
-	else \
-	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
-	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
-	  exit 1; \
-	fi
-$(srcdir)/bison.info: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
-bison.dvi: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
-bison.pdf: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
-bison.html: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
-$(srcdir)/version.texi:  $(srcdir)/stamp-vti
-$(srcdir)/stamp-vti: bison.texinfo $(top_srcdir)/configure
-	@(dir=.; test -f ./bison.texinfo || dir=$(srcdir); \
-	set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/bison.texinfo`; \
-	echo "@set UPDATED $$1 $$2 $$3"; \
-	echo "@set UPDATED-MONTH $$2 $$3"; \
-	echo "@set EDITION $(VERSION)"; \
-	echo "@set VERSION $(VERSION)") > vti.tmp
-	@cmp -s vti.tmp $(srcdir)/version.texi \
-	  || (echo "Updating $(srcdir)/version.texi"; \
-	      cp vti.tmp $(srcdir)/version.texi)
-	-@rm -f vti.tmp
-	@cp $(srcdir)/version.texi $@
-
-mostlyclean-vti:
-	-rm -f vti.tmp
-
-maintainer-clean-vti:
-	-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
-.dvi.ps:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	$(DVIPS) -o $@ $<
-
-uninstall-info-am:
-	@$(PRE_UNINSTALL)
-	@if (install-info --version && \
-	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
-	  list='$(INFO_DEPS)'; \
-	  for file in $$list; do \
-	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
-	    install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
-	  done; \
-	else :; fi
-	@$(NORMAL_UNINSTALL)
-	@list='$(INFO_DEPS)'; \
-	for file in $$list; do \
-	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  (if cd "$(DESTDIR)$(infodir)"; then \
-	     echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
-	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
-	   else :; fi); \
-	done
-
-dist-info: $(INFO_DEPS)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	list='$(INFO_DEPS)'; \
-	for base in $$list; do \
-	  case $$base in \
-	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
-	  esac; \
-	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
-	  for file in $$d/$$base*; do \
-	    relfile=`expr "$$file" : "$$d/\(.*\)"`; \
-	    test -f $(distdir)/$$relfile || \
-	      cp -p $$file $(distdir)/$$relfile; \
-	  done; \
-	done
-
-mostlyclean-aminfo:
-	-rm -rf bison.aux bison.cp bison.cps bison.fn bison.ky bison.kys bison.log \
-	  bison.pg bison.pgs bison.tmp bison.toc bison.tp bison.vr \
-	  bison.dvi bison.pdf bison.ps bison.html
-
-maintainer-clean-aminfo:
-	@list='$(INFO_DEPS)'; for i in $$list; do \
-	  i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
-	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
-	done
-install-man1: $(man1_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
-uninstall-man1:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-	$(MAKE) $(AM_MAKEFLAGS) \
-	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-info
-check-am: all-am
-check: check-am
-all-am: Makefile $(INFO_DEPS) $(MANS)
-installdirs:
-	for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-local mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am: $(DVIS)
-
-html: html-am
-
-html-am: $(HTMLS)
-
-info: info-am
-
-info-am: $(INFO_DEPS)
-
-install-data-am: install-info-am install-man
-
-install-exec-am:
-
-install-info: install-info-am
-
-install-info-am: $(INFO_DEPS)
-	@$(NORMAL_INSTALL)
-	test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	list='$(INFO_DEPS)'; \
-	for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	  esac; \
-	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
-	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
-                       $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
-	    if test -f $$ifile; then \
-	      relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
-	      echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
-	      $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
-	    else : ; fi; \
-	  done; \
-	done
-	@$(POST_INSTALL)
-	@if (install-info --version && \
-	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
-	  list='$(INFO_DEPS)'; \
-	  for file in $$list; do \
-	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
-	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
-	  done; \
-	else : ; fi
-install-man: install-man1
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-aminfo \
-	maintainer-clean-generic maintainer-clean-vti
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
-
-pdf: pdf-am
-
-pdf-am: $(PDFS)
-
-ps: ps-am
-
-ps-am: $(PSS)
-
-uninstall-am: uninstall-info-am uninstall-man
-
-uninstall-man: uninstall-man1
-
-.PHONY: all all-am check check-am clean clean-generic clean-local \
-	dist-info distclean distclean-generic distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-man1 install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-aminfo maintainer-clean-generic \
-	maintainer-clean-vti mostlyclean mostlyclean-aminfo \
-	mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \
-	uninstall uninstall-am uninstall-info-am uninstall-man \
-	uninstall-man1
-
-
-clean-local:
-	rm -rf *.t2d
-
-refcard.dvi: refcard.tex
-	tex refcard.tex
-
-refcard.ps: refcard.dvi
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 2466b26..80c7285 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,34 +1,155 @@
 ## Process this file with automake to produce Makefile.in -*-Makefile-*-
-## Copyright (C) 2001, 2002, 2003, 2005, 2006 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 of the License, or
-## (at your option) any later version.
+## Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
 
-## 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., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301  USA
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
 AM_MAKEINFOFLAGS = --no-split
-info_TEXINFOS = bison.texinfo
-man_MANS = bison.1
-bison_TEXINFOS = gpl.texi fdl.texi
+info_TEXINFOS = bison.texi
+bison_TEXINFOS = $(srcdir)/cross-options.texi gpl-3.0.texi fdl.texi
 
-EXTRA_DIST = bison.1 refcard.tex
-
-CLEANFILES = refcard.dvi refcard.log refcard.ps bison.fns
-
+CLEANFILES = bison.fns
+CLEANDIRS = *.t2d
 clean-local:
-	rm -rf *.t2d
+	rm -rf $(CLEANDIRS)
+
+CROSS_OPTIONS_PL = $(top_srcdir)/build-aux/cross-options.pl
+$(srcdir)/cross-options.texi: $(top_srcdir)/src/getargs.c $(CROSS_OPTIONS_PL)
+	$(AM_V_GEN)mv -f $@ $@~ || : >$@~
+	$(AM_V_at)rm -f $@.tmp
+	$(AM_V_at)cd $(top_builddir)/src && $(MAKE) $(AM_MAKEFLAGS) bison
+	$(AM_V_at)$(top_builddir)/src/bison --help \
+	  | $(PERL) $(CROSS_OPTIONS_PL) $(top_srcdir)/src/scan-gram.l >$@.tmp
+	$(AM_V_at)diff -u $@~ $@.tmp || true
+	$(AM_V_at)mv $@.tmp $@
+MAINTAINERCLEANFILES = $(srcdir)/cross-options.texi
+
+## ---------- ##
+## Ref card.  ##
+## ---------- ##
+
+EXTRA_DIST = refcard.tex
+CLEANFILES += refcard.dvi refcard.log refcard.ps
 
 refcard.dvi: refcard.tex
-	tex refcard.tex
+	$(AM_V_GEN)tex refcard.tex
 
 refcard.ps: refcard.dvi
+
+
+## ----------- ##
+## Man Pages.  ##
+## ----------- ##
+
+dist_man_MANS = $(srcdir)/bison.1
+
+EXTRA_DIST += $(dist_man_MANS:.1=.x) common.x
+MAINTAINERCLEANFILES += $(dist_man_MANS)
+
+# Depend on configure to get version number changes.
+common_dep = $(top_srcdir)/configure $(srcdir)/common.x
+srcsrcdir = $(top_srcdir)/bin
+$(srcdir)/bison.1:      $(common_dep) $(top_srcdir)/src/getargs.c
+
+# Differences to ignore when comparing the man page (the date).
+remove_time_stamp = \
+  sed 's/^\(\.TH[^"]*"[^"]*"[^"]*\)"[^"]*"/\1/'
+
+MOSTLYCLEANFILES = $(srcdir)/*.t
+
+SUFFIXES = .x .1
+
+PREPATH = $(top_builddir)/src
+.x.1:
+	$(AM_V_GEN)program=`expr "/$*" : '.*/\(.*\)'` &&		\
+	save_IFS=$IFS;							\
+	IFS=$(PATH_SEPARATOR);						\
+	for dir in $(PREPATH); do					\
+	  IFS=$save_IFS;						\
+	  echo cd $$dir '&&' $(MAKE) $(AM_MAKEFLAGS) $$program &&	\
+	  (cd $$dir && $(MAKE) $(AM_MAKEFLAGS) $$program) || exit;	\
+	done
+	$(AM_V_at)PATH="$(PREPATH)$(PATH_SEPARATOR)$$PATH";		     \
+	export PATH;							     \
+	$(HELP2MAN)							     \
+	    --include=$*.x						     \
+	    --include=$(srcdir)/common.x				     \
+	    --output=$@.t `echo '$*' | sed 's,.*/,,'`
+	$(AM_V_at)if $(remove_time_stamp) $@ >$@a.t 2>/dev/null &&	     \
+	   $(remove_time_stamp) $@.t | cmp $@a.t - >/dev/null 2>&1; then     \
+		touch $@;						     \
+	else								     \
+		mv $@.t $@;						     \
+	fi
+	$(AM_V_at)rm -f $@*.t
+
+nodist_man_MANS = yacc.1
+
+## ------------------------------ ##
+## Graphviz examples generation.  ##
+## ------------------------------ ##
+
+CLEANDIRS += figs
+FIGS_DOT = figs/example.dot figs/example-reduce.dot figs/example-shift.dot
+EXTRA_DIST +=								\
+  figs/example.y							\
+  $(FIGS_DOT)								\
+  $(FIGS_DOT:.dot=.eps) $(FIGS_DOT:.dot=.pdf) $(FIGS_DOT:.dot=.png)
+SUFFIXES += .dot .eps .pdf .png
+
+bison.dvi:  $(FIGS_DOT:.dot=.eps)
+bison.html: $(FIGS_DOT:.dot=.png)
+bison.pdf:  $(FIGS_DOT:.dot=.pdf)
+
+.dot.eps:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Teps $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.dot.pdf:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Tpdf $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.dot.png:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Tpng $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+## -------------- ##
+## Doxygenation.  ##
+## -------------- ##
+
+DOXYGEN = doxygen
+
+.PHONY: doc html
+
+doc: html
+
+html-local: Doxyfile
+	$(DOXYGEN)
+
+edit = sed -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \
+	   -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \
+	   -e 's,@top_builddir\@,$(top_builddir),g' \
+	   -e 's,@top_srcdir\@,$(top_srcdir),g'
+
+EXTRA_DIST += Doxyfile.in
+CLEANFILES += Doxyfile
+# Sed is used to generate Doxyfile from Doxyfile.in instead of
+# configure, because the former is way faster than the latter.
+Doxyfile: $(srcdir)/Doxyfile.in
+	$(AM_V_GEN)$(edit) $(srcdir)/Doxyfile.in >Doxyfile
+
+CLEANDIRS += html latex
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 6c87d7b..43585ef 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,15 +13,41 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
+
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
+pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -36,45 +62,154 @@
 build_triplet = @build@
 host_triplet = @host@
 subdir = doc
-DIST_COMMON = $(bison_TEXINFOS) $(srcdir)/Makefile.am \
+DIST_COMMON = $(bison_TEXINFOS) $(dist_man_MANS) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/stamp-vti \
-	$(srcdir)/version.texi
+	$(srcdir)/version.texi $(srcdir)/yacc.1.in \
+	$(top_srcdir)/build-aux/mdate-sh \
+	$(top_srcdir)/build-aux/texinfo.tex
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
 	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
 	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
 	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES = yacc.1
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
+AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
+am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
+am__v_DVIPS_0 = @echo "  DVIPS   " $@;
+am__v_DVIPS_1 = 
+AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
+am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
+am__v_MAKEINFO_0 = @echo "  MAKEINFO" $@;
+am__v_MAKEINFO_1 = 
+AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
+am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
+am__v_INFOHTML_0 = @echo "  INFOHTML" $@;
+am__v_INFOHTML_1 = 
+AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
+am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
+am__v_TEXI2DVI_0 = @echo "  TEXI2DVI" $@;
+am__v_TEXI2DVI_1 = 
+AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
+am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
+am__v_TEXI2PDF_0 = @echo "  TEXI2PDF" $@;
+am__v_TEXI2PDF_1 = 
+AM_V_texinfo = $(am__v_texinfo_@AM_V@)
+am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
+am__v_texinfo_0 = -q
+am__v_texinfo_1 = 
+AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
+am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
+am__v_texidevnull_0 = > /dev/null
+am__v_texidevnull_1 = 
 INFO_DEPS = $(srcdir)/bison.info
 TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
 am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
@@ -82,108 +217,1144 @@
 PDFS = bison.pdf
 PSS = bison.ps
 HTMLS = bison.html
-TEXINFOS = bison.texinfo
+TEXINFOS = bison.texi
 TEXI2DVI = texi2dvi
 TEXI2PDF = $(TEXI2DVI) --pdf --batch
 MAKEINFOHTML = $(MAKEINFO) --html
 AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
 DVIPS = dvips
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 man1dir = $(mandir)/man1
 NROFF = nroff
-MANS = $(man_MANS)
+MANS = $(dist_man_MANS) $(nodist_man_MANS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOM4TE = @AUTOM4TE@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BISON_CXX_WORKS = @BISON_CXX_WORKS@
-BISON_CXX_WORKS_FALSE = @BISON_CXX_WORKS_FALSE@
-BISON_CXX_WORKS_TRUE = @BISON_CXX_WORKS_TRUE@
+BISON_C_WORKS = @BISON_C_WORKS@
 BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
 CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DOT = @DOT@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
 GCC = @GCC@
 GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
 HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
 LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
 LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
 MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
+MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
-O0CFLAGS = @O0CFLAGS@
-O0CXXFLAGS = @O0CXXFLAGS@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
 POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
 STRIP = @STRIP@
-UNISTD_H = @UNISTD_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
 VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
 YACC = @YACC@
 YACC_LIBRARY = @YACC_LIBRARY@
 YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 aclocaldir = @aclocaldir@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -195,50 +1366,93 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
 AM_MAKEINFOFLAGS = --no-split
-info_TEXINFOS = bison.texinfo
-man_MANS = bison.1
-bison_TEXINFOS = gpl.texi fdl.texi
-EXTRA_DIST = bison.1 refcard.tex
-CLEANFILES = refcard.dvi refcard.log refcard.ps bison.fns
+info_TEXINFOS = bison.texi
+bison_TEXINFOS = $(srcdir)/cross-options.texi gpl-3.0.texi fdl.texi
+CLEANFILES = bison.fns refcard.dvi refcard.log refcard.ps Doxyfile
+CLEANDIRS = *.t2d figs html latex
+CROSS_OPTIONS_PL = $(top_srcdir)/build-aux/cross-options.pl
+MAINTAINERCLEANFILES = $(srcdir)/cross-options.texi $(dist_man_MANS)
+EXTRA_DIST = refcard.tex $(dist_man_MANS:.1=.x) common.x \
+	figs/example.y $(FIGS_DOT) $(FIGS_DOT:.dot=.eps) \
+	$(FIGS_DOT:.dot=.pdf) $(FIGS_DOT:.dot=.png) Doxyfile.in
+dist_man_MANS = $(srcdir)/bison.1
+
+# Depend on configure to get version number changes.
+common_dep = $(top_srcdir)/configure $(srcdir)/common.x
+srcsrcdir = $(top_srcdir)/bin
+
+# Differences to ignore when comparing the man page (the date).
+remove_time_stamp = \
+  sed 's/^\(\.TH[^"]*"[^"]*"[^"]*\)"[^"]*"/\1/'
+
+MOSTLYCLEANFILES = $(srcdir)/*.t
+SUFFIXES = .x .1 .dot .eps .pdf .png
+PREPATH = $(top_builddir)/src
+nodist_man_MANS = yacc.1
+FIGS_DOT = figs/example.dot figs/example-reduce.dot figs/example-shift.dot
+DOXYGEN = doxygen
+edit = sed -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \
+	   -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \
+	   -e 's,@top_builddir\@,$(top_builddir),g' \
+	   -e 's,@top_srcdir\@,$(top_srcdir),g'
+
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .dvi .html .info .pdf .ps .texinfo
+.SUFFIXES: .x .1 .dot .eps .pdf .png .dvi .html .info .ps .texi
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  doc/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits doc/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -256,10 +1470,13 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+yacc.1: $(top_builddir)/config.status $(srcdir)/yacc.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
-.texinfo.info:
-	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
-	am__cwd=`pwd` && cd $(srcdir) && \
+.texi.info:
+	$(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+	am__cwd=`pwd` && $(am__cd) $(srcdir) && \
 	rm -rf $$backupdir && mkdir $$backupdir && \
 	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
 	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
@@ -271,27 +1488,27 @@
 	 -o $@ $<; \
 	then \
 	  rc=0; \
-	  cd $(srcdir); \
+	  $(am__cd) $(srcdir); \
 	else \
 	  rc=$$?; \
-	  cd $(srcdir) && \
+	  $(am__cd) $(srcdir) && \
 	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
 	fi; \
 	rm -rf $$backupdir; exit $$rc
 
-.texinfo.dvi:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+.texi.dvi:
+	$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
 	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2DVI) $<
+	$(TEXI2DVI) $(AM_V_texinfo) --clean $< $(AM_V_texidevnull)
 
-.texinfo.pdf:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+.texi.pdf:
+	$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
 	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2PDF) $<
+	$(TEXI2PDF) $(AM_V_texinfo) --clean $< $(AM_V_texidevnull)
 
-.texinfo.html:
-	rm -rf $(@:.html=.htp)
-	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+.texi.html:
+	$(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+	$(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
 	 -o $(@:.html=.htp) $<; \
 	then \
 	  rm -rf $@; \
@@ -302,14 +1519,11 @@
 	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
 	  exit 1; \
 	fi
-$(srcdir)/bison.info: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
-bison.dvi: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
-bison.pdf: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
-bison.html: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
+$(srcdir)/bison.info: bison.texi $(srcdir)/version.texi $(bison_TEXINFOS)
 $(srcdir)/version.texi:  $(srcdir)/stamp-vti
-$(srcdir)/stamp-vti: bison.texinfo $(top_srcdir)/configure
-	@(dir=.; test -f ./bison.texinfo || dir=$(srcdir); \
-	set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/bison.texinfo`; \
+$(srcdir)/stamp-vti: bison.texi $(top_srcdir)/configure
+	@(dir=.; test -f ./bison.texi || dir=$(srcdir); \
+	set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/bison.texi`; \
 	echo "@set UPDATED $$1 $$2 $$3"; \
 	echo "@set UPDATED-MONTH $$2 $$3"; \
 	echo "@set EDITION $(VERSION)"; \
@@ -326,18 +1540,36 @@
 maintainer-clean-vti:
 	-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
 .dvi.ps:
-	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	$(DVIPS) -o $@ $<
+	$(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	$(DVIPS) $(AM_V_texinfo) -o $@ $<
+
+uninstall-dvi-am:
+	@$(NORMAL_UNINSTALL)
+	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+	done
+
+uninstall-html-am:
+	@$(NORMAL_UNINSTALL)
+	@list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+	  rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+	done
 
 uninstall-info-am:
 	@$(PRE_UNINSTALL)
-	@if (install-info --version && \
-	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+	@if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
 	  list='$(INFO_DEPS)'; \
 	  for file in $$list; do \
 	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
 	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
-	    install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+	    if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+	    then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
 	  done; \
 	else :; fi
 	@$(NORMAL_UNINSTALL)
@@ -345,12 +1577,30 @@
 	for file in $$list; do \
 	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
 	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  (if cd "$(DESTDIR)$(infodir)"; then \
+	  (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
 	     echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
 	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
 	   else :; fi); \
 	done
 
+uninstall-pdf-am:
+	@$(NORMAL_UNINSTALL)
+	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+	done
+
+uninstall-ps-am:
+	@$(NORMAL_UNINSTALL)
+	@list='$(PSS)'; test -n "$(psdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(psdir)/$$f"; \
+	done
+
 dist-info: $(INFO_DEPS)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 	list='$(INFO_DEPS)'; \
@@ -359,17 +1609,23 @@
 	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
 	  esac; \
 	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
-	  for file in $$d/$$base*; do \
-	    relfile=`expr "$$file" : "$$d/\(.*\)"`; \
-	    test -f $(distdir)/$$relfile || \
-	      cp -p $$file $(distdir)/$$relfile; \
+	  base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+	  for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+	    if test -f $$file; then \
+	      relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+	      test -f "$(distdir)/$$relfile" || \
+		cp -p $$file "$(distdir)/$$relfile"; \
+	    else :; fi; \
 	  done; \
 	done
 
 mostlyclean-aminfo:
 	-rm -rf bison.aux bison.cp bison.cps bison.fn bison.ky bison.kys bison.log \
-	  bison.pg bison.pgs bison.tmp bison.toc bison.tp bison.vr \
-	  bison.dvi bison.pdf bison.ps bison.html
+	  bison.pg bison.pgs bison.tmp bison.toc bison.tp bison.vr
+
+clean-aminfo:
+	-test -z "bison.dvi bison.pdf bison.ps bison.html" \
+	|| rm -rf bison.dvi bison.pdf bison.ps bison.html
 
 maintainer-clean-aminfo:
 	@list='$(INFO_DEPS)'; for i in $$list; do \
@@ -377,82 +1633,98 @@
 	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
 	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
 	done
-install-man1: $(man1_MANS) $(man_MANS)
+install-man1: $(dist_man_MANS) $(nodist_man_MANS)
 	@$(NORMAL_INSTALL)
-	test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
+	@list1=''; \
+	list2='$(dist_man_MANS) $(nodist_man_MANS)'; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
 	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
 uninstall-man1:
 	@$(NORMAL_UNINSTALL)
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(dist_man_MANS) $(nodist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
 tags: TAGS
 TAGS:
 
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@list='$(MANS)'; if test -n "$$list"; then \
+	  list=`for p in $$list; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+	  if test -n "$$list" && \
+	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+	    echo "error: found man pages containing the 'missing help2man' replacement text:" >&2; \
+	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+	    echo "       typically 'make maintainer-clean' will remove them" >&2; \
+	    exit 1; \
+	  else :; fi; \
+	else :; fi
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -464,7 +1736,7 @@
 all-am: Makefile $(INFO_DEPS) $(MANS)
 installdirs:
 	for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
 install-exec: install-exec-am
@@ -476,24 +1748,32 @@
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
 	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 clean: clean-am
 
-clean-am: clean-generic clean-local mostlyclean-am
+clean-am: clean-aminfo clean-generic clean-local mostlyclean-am
 
 distclean: distclean-am
 	-rm -f Makefile
@@ -505,7 +1785,7 @@
 
 html: html-am
 
-html-am: $(HTMLS)
+html-am: $(HTMLS) html-local
 
 info: info-am
 
@@ -513,15 +1793,62 @@
 
 install-data-am: install-info-am install-man
 
+install-dvi: install-dvi-am
+
+install-dvi-am: $(DVIS)
+	@$(NORMAL_INSTALL)
+	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+	done
 install-exec-am:
 
+install-html: install-html-am
+
+install-html-am: $(HTMLS)
+	@$(NORMAL_INSTALL)
+	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  $(am__strip_dir) \
+	  d2=$$d$$p; \
+	  if test -d "$$d2"; then \
+	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+	    echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+	    $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+	  else \
+	    list2="$$list2 $$d2"; \
+	  fi; \
+	done; \
+	test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+	done; }
 install-info: install-info-am
 
 install-info-am: $(INFO_DEPS)
 	@$(NORMAL_INSTALL)
-	test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	list='$(INFO_DEPS)'; \
+	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
+	fi; \
 	for file in $$list; do \
 	  case $$file in \
 	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
@@ -529,18 +1856,18 @@
 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
 	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
 	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
-                       $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+	               $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
 	    if test -f $$ifile; then \
-	      relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
-	      echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
-	      $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
+	      echo "$$ifile"; \
 	    else : ; fi; \
 	  done; \
-	done
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
 	@$(POST_INSTALL)
-	@if (install-info --version && \
-	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
-	  list='$(INFO_DEPS)'; \
+	@if $(am__can_run_installinfo); then \
+	  list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
 	  for file in $$list; do \
 	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
 	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
@@ -549,6 +1876,38 @@
 	else : ; fi
 install-man: install-man1
 
+install-pdf: install-pdf-am
+
+install-pdf-am: $(PDFS)
+	@$(NORMAL_INSTALL)
+	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+install-ps: install-ps-am
+
+install-ps-am: $(PSS)
+	@$(NORMAL_INSTALL)
+	@list='$(PSS)'; test -n "$(psdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -568,30 +1927,97 @@
 
 ps-am: $(PSS)
 
-uninstall-am: uninstall-info-am uninstall-man
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+	uninstall-man uninstall-pdf-am uninstall-ps-am
 
 uninstall-man: uninstall-man1
 
-.PHONY: all all-am check check-am clean clean-generic clean-local \
-	dist-info distclean distclean-generic distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-man1 install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-aminfo maintainer-clean-generic \
-	maintainer-clean-vti mostlyclean mostlyclean-aminfo \
-	mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \
-	uninstall uninstall-am uninstall-info-am uninstall-man \
-	uninstall-man1
+.MAKE: install-am install-strip
 
+.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
+	clean-local dist-info distclean distclean-generic distdir dvi \
+	dvi-am html html-am html-local info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-man1 \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-aminfo \
+	maintainer-clean-generic maintainer-clean-vti mostlyclean \
+	mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \
+	pdf-am ps ps-am uninstall uninstall-am uninstall-dvi-am \
+	uninstall-html-am uninstall-info-am uninstall-man \
+	uninstall-man1 uninstall-pdf-am uninstall-ps-am
 
 clean-local:
-	rm -rf *.t2d
+	rm -rf $(CLEANDIRS)
+$(srcdir)/cross-options.texi: $(top_srcdir)/src/getargs.c $(CROSS_OPTIONS_PL)
+	$(AM_V_GEN)mv -f $@ $@~ || : >$@~
+	$(AM_V_at)rm -f $@.tmp
+	$(AM_V_at)cd $(top_builddir)/src && $(MAKE) $(AM_MAKEFLAGS) bison
+	$(AM_V_at)$(top_builddir)/src/bison --help \
+	  | $(PERL) $(CROSS_OPTIONS_PL) $(top_srcdir)/src/scan-gram.l >$@.tmp
+	$(AM_V_at)diff -u $@~ $@.tmp || true
+	$(AM_V_at)mv $@.tmp $@
 
 refcard.dvi: refcard.tex
-	tex refcard.tex
+	$(AM_V_GEN)tex refcard.tex
 
 refcard.ps: refcard.dvi
+$(srcdir)/bison.1:      $(common_dep) $(top_srcdir)/src/getargs.c
+.x.1:
+	$(AM_V_GEN)program=`expr "/$*" : '.*/\(.*\)'` &&		\
+	save_IFS=$IFS;							\
+	IFS=$(PATH_SEPARATOR);						\
+	for dir in $(PREPATH); do					\
+	  IFS=$save_IFS;						\
+	  echo cd $$dir '&&' $(MAKE) $(AM_MAKEFLAGS) $$program &&	\
+	  (cd $$dir && $(MAKE) $(AM_MAKEFLAGS) $$program) || exit;	\
+	done
+	$(AM_V_at)PATH="$(PREPATH)$(PATH_SEPARATOR)$$PATH";		     \
+	export PATH;							     \
+	$(HELP2MAN)							     \
+	    --include=$*.x						     \
+	    --include=$(srcdir)/common.x				     \
+	    --output=$@.t `echo '$*' | sed 's,.*/,,'`
+	$(AM_V_at)if $(remove_time_stamp) $@ >$@a.t 2>/dev/null &&	     \
+	   $(remove_time_stamp) $@.t | cmp $@a.t - >/dev/null 2>&1; then     \
+		touch $@;						     \
+	else								     \
+		mv $@.t $@;						     \
+	fi
+	$(AM_V_at)rm -f $@*.t
+
+bison.dvi:  $(FIGS_DOT:.dot=.eps)
+bison.html: $(FIGS_DOT:.dot=.png)
+bison.pdf:  $(FIGS_DOT:.dot=.pdf)
+
+.dot.eps:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Teps $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.dot.pdf:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Tpdf $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.dot.png:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Tpng $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.PHONY: doc html
+
+doc: html
+
+html-local: Doxyfile
+	$(DOXYGEN)
+# Sed is used to generate Doxyfile from Doxyfile.in instead of
+# configure, because the former is way faster than the latter.
+Doxyfile: $(srcdir)/Doxyfile.in
+	$(AM_V_GEN)$(edit) $(srcdir)/Doxyfile.in >Doxyfile
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/doc/bison.1 b/doc/bison.1
index 5e1d962..6309975 100644
--- a/doc/bison.1
+++ b/doc/bison.1
@@ -1,69 +1,10 @@
-.TH BISON 1 local
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.40.10.
+.TH BISON "1" "December 2012" "bison 2.7" "User Commands"
 .SH NAME
 bison \- GNU Project parser generator (yacc replacement)
 .SH SYNOPSIS
 .B bison
-[
-.BI \-b  " file-prefix"
-] [
-.BI \-\-file-prefix= file-prefix
-] [
-.B \-d
-] [
-.BI \-\-defines= defines-file
-] [
-.B \-g
-] [
-.BI \-\-graph= graph-file
-] [
-.B \-k
-] [
-.B \-\-token-table
-] [
-.B \-l
-] [
-.B \-\-no-lines
-] [
-.B \-n
-] [
-.B \-\-no-parser
-] [
-.BI \-o " outfile"
-] [
-.BI \-\-output-file= outfile
-] [
-.BI \-p " prefix"
-] [
-.BI \-\-name-prefix= prefix
-] [
-.B \-t
-] [
-.B \-\-debug
-] [
-.B \-v
-] [
-.B \-\-verbose
-] [
-.B \-V
-] [
-.B \-\-version
-] [
-.B \-y
-] [
-.B \-\-yacc
-] [
-.B \-h
-] [
-.B \-\-help
-] [
-.B \-\-fixed-output-files
-]
-file
-.br
-.B yacc
-[
-.I "similar options and operands"
-]
+[\fIOPTION\fR]... \fIFILE\fR
 .SH DESCRIPTION
 .I Bison
 is a parser generator in the style of
@@ -116,254 +57,184 @@
 .BR \-\-file-prefix ,
 connect the option name and the argument with
 .BR = .
-.SS OPTIONS
+.PP
+Generate a deterministic LR or generalized LR (GLR) parser employing
+LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and
+canonical LR(1) support is experimental.
+.PP
+Mandatory arguments to long options are mandatory for short options too.
+The same is true for optional arguments.
+.SS "Operation modes:"
 .TP
-.BI \-b " file-prefix"
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+output version information and exit
+.TP
+\fB\-\-print\-localedir\fR
+output directory containing locale\-dependent data
+.TP
+\fB\-\-print\-datadir\fR
+output directory containing skeletons and XSLT
+.TP
+\fB\-y\fR, \fB\-\-yacc\fR
+emulate POSIX Yacc
+.TP
+\fB\-W\fR, \fB\-\-warnings\fR[=\fICATEGORY\fR]
+report the warnings falling in CATEGORY
+.TP
+\fB\-f\fR, \fB\-\-feature\fR[=\fIFEATURE\fR]
+activate miscellaneous features
+.SS "Parser:"
+.TP
+\fB\-L\fR, \fB\-\-language\fR=\fILANGUAGE\fR
+specify the output programming language
+.TP
+\fB\-S\fR, \fB\-\-skeleton\fR=\fIFILE\fR
+specify the skeleton to use
+.TP
+\fB\-t\fR, \fB\-\-debug\fR
+instrument the parser for debugging
+.TP
+\fB\-\-locations\fR
+enable location support
+.TP
+\fB\-D\fR, \fB\-\-define=NAME\fR[=\fIVALUE\fR]
+similar to '%define NAME "VALUE"'
+.TP
+\fB\-F\fR, \fB\-\-force\-define=NAME\fR[=\fIVALUE\fR]
+override '%define NAME "VALUE"'
+.TP
+\fB\-p\fR, \fB\-\-name\-prefix\fR=\fIPREFIX\fR
+prepend PREFIX to the external symbols
+deprecated by '\-Dapi.prefix=PREFIX'
+.TP
+\fB\-l\fR, \fB\-\-no\-lines\fR
+don't generate '#line' directives
+.TP
+\fB\-k\fR, \fB\-\-token\-table\fR
+include a table of token names
+.SS "Output:"
+.TP
+\fB\-\-defines\fR[=\fIFILE\fR]
+also produce a header file
+.TP
+\fB\-d\fR
+likewise but cannot specify FILE (for POSIX Yacc)
+.TP
+\fB\-r\fR, \fB\-\-report\fR=\fITHINGS\fR
+also produce details on the automaton
+.TP
+\fB\-\-report\-file\fR=\fIFILE\fR
+write report to FILE
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+same as `\-\-report=state'
+.TP
+\fB\-b\fR, \fB\-\-file\-prefix\fR=\fIPREFIX\fR
+specify a PREFIX for output files
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR
+leave output to FILE
+.TP
+\fB\-g\fR, \fB\-\-graph\fR[=\fIFILE\fR]
+also output a graph of the automaton
+.TP
+\fB\-x\fR, \fB\-\-xml\fR[=\fIFILE\fR]
+also output an XML report of the automaton
+(the XML schema is experimental)
+.SS "Warning categories include:"
+.TP
+`midrule\-values'
+unset or unused midrule values
+.TP
+`yacc'
+incompatibilities with POSIX Yacc
+.TP
+`conflicts\-sr'
+S/R conflicts (enabled by default)
+.TP
+`conflicts\-rr'
+R/R conflicts (enabled by default)
+.TP
+`deprecated'
+obsolete constructs
+.TP
+`other'
+all other warnings (enabled by default)
+.TP
+`all'
+all the warnings
+.TP
+`no\-CATEGORY'
+turn off warnings in CATEGORY
+.TP
+`none'
+turn off all the warnings
+.TP
+`error'
+treat warnings as errors
+.SS "THINGS is a list of comma separated words that can include:"
+.TP
+`state'
+describe the states
+.TP
+`itemset'
+complete the core item sets with their closure
+.TP
+`lookahead'
+explicitly associate lookahead tokens to items
+.TP
+`solved'
+describe shift/reduce conflicts solving
+.TP
+`all'
+include all the above information
+.TP
+`none'
+disable the report
+.SS "FEATURE is a list of comma separated words that can include:"
+.TP
+`caret'
+show errors with carets
+.TP
+`all'
+all of the above
+.TP
+`none'
+disable all of the above
+.SH AUTHOR
+Written by Robert Corbett and Richard Stallman.
+.SH "REPORTING BUGS"
+Report bugs to <bug\-bison@gnu.org>.
 .br
-.ns
-.TP
-.BI \-\-file-prefix= file-prefix
-Specify a prefix to use for all
-.I bison
-output file names.  The names are
-chosen as if the input file were named
-\fIfile-prefix\fP\fB.c\fP.
-.TP
-.B \-d
+GNU Bison home page: <http://www.gnu.org/software/bison/>.
 .br
-.ns
-Write an extra output file containing macro definitions for the token
-type names defined in the grammar and the semantic value type
-.BR YYSTYPE ,
-as well as a few
-.B extern
-variable declarations.
-.sp
-If the parser output file is named
-.IB name .c
-then this file
-is named
-\fIname\fP\fB.h\fP.
-.sp
-This output file is essential if you wish to put the definition of
-.B yylex
-in a separate source file, because
-.B yylex
-needs to be able to refer to token type codes and the variable
-.BR yylval .
-.TP
-.BI \-\-defines= defines-file
-The behavior of
-.B \-\-defines
-is the same than
-.B \-d
-option.
-The only difference is that it has an optional argument which is
-the name of the output filename.
-.TP
-.BI \-g
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+.PP
 .br
-.ns
-Output a VCG definition of the LALR(1) grammar automaton computed by
-Bison.  If the grammar file is
-.BR foo.y
-, the VCG output file will be
-.BR foo.vcg .
-.TP
-.BI \-\-graph= graph-file
-The behavior of
-.BI \-\-graph
-is the same than
-.BI \-g
-option.  The only difference is that it has an optional argument which
-is the name of the output graph filename.
-.TP
-.B \-k
+Report translation bugs to <http://translationproject.org/team/>.
 .br
-.ns
-.TP
-.B \-\-token-table
-This switch causes the
-.IB name .tab.c
-output to include a list of
-token names in order by their token numbers; this is defined in the array
-.IR yytname .
-Also generated
-are #defines for
-.IR YYNTOKENS ,
-.IR YYNNTS ,
-.IR YYNRULES ,
+For complete documentation, run: info bison.
+.SH COPYRIGHT
+Copyright \(co 2012 Free Software Foundation, Inc.
+.br
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+.SH "SEE ALSO"
+.BR lex (1),
+.BR flex (1),
+.BR yacc (1).
+.PP
+The full documentation for
+.B bison
+is maintained as a Texinfo manual.  If the
+.B info
 and
-.IR YYNSTATES .
-.TP
-.B \-l
-.br
-.ns
-.TP
-.B \-\-no-lines
-Don't put any
-.B #line
-preprocessor commands in the parser file.
-Ordinarily
-.I bison
-puts them in the parser file so that the C compiler
-and debuggers will associate errors with your source file, the
-grammar file.  This option causes them to associate errors with the
-parser file, treating it an independent source file in its own right.
-.TP
-.B \-n
-.br
-.ns
-.TP
-.B \-\-no-parser
-Do not generate the parser code into the output; generate only
-declarations.  The generated
-.IB name .tab.c
-file will have only
-constant declarations.  In addition, a
-.IB name .act
-file is
-generated containing a switch statement body containing all the
-translated actions.
-.TP
-.BI \-o " outfile"
-.br
-.ns
-.TP
-.BI \-\-output-file= outfile
-Specify the name
-.I outfile
-for the parser file.
-.sp
-The other output files' names are constructed from
-.I outfile
-as described under the
-.B \-v
-and
-.B \-d
-switches.
-.TP
-.BI \-p " prefix"
-.br
-.ns
-.TP
-.BI \-\-name-prefix= prefix
-Rename the external symbols used in the parser so that they start with
-.I prefix
-instead of
-.BR yy .
-The precise list of symbols renamed is
-.BR yyparse ,
-.BR yylex ,
-.BR yyerror ,
-.BR yylval ,
-.BR yychar ,
-and
-.BR yydebug .
-.sp
-For example, if you use
-.BR "\-p c" ,
-the names become
-.BR cparse ,
-.BR clex ,
-and so on.
-.TP
-.B \-t
-.br
-.ns
-.TP
-.B \-\-debug
-In the parser file, define the macro
-.B YYDEBUG
-to 1 if it is not already defined,
-so that the debugging facilities are compiled.
-.TP
-.B \-v
-.br
-.ns
-.TP
-.B \-\-verbose
-Write an extra output file containing verbose descriptions of the
-parser states and what is done for each type of look-ahead token in
-that state.
-.sp
-This file also describes all the conflicts, both those resolved by
-operator precedence and the unresolved ones.
-.sp
-The file's name is made by removing
-.B .tab.c
-or
-.B .c
-from the parser output file name, and adding
-.B .output
-instead.
-.sp
-Therefore, if the input file is
-.BR foo.y ,
-then the parser file is called
-.B foo.tab.c
-by default.  As a consequence, the verbose
-output file is called
-.BR foo.output .
-.TP
-.B \-V
-.br
-.ns
-.TP
-.B \-\-version
-Print the version number of
-.I bison
-and exit.
-.TP
-.B \-h
-.br
-.ns
-.TP
-.B \-\-help
-Print a summary of the options to
-.I bison
-and exit.
-.TP
-.B \-y
-.br
-.ns
-.TP
-.B \-\-yacc
-.br
-.ns
-.TP
-.B \-\-fixed-output-files
-Equivalent to
-.BR "\-o y.tab.c" ;
-the parser output file is called
-.BR y.tab.c ,
-and the other outputs are called
-.B y.output
-and
-.BR y.tab.h .
-The purpose of this switch is to imitate
-.IR yacc 's
-output file name conventions.
-Thus, the following shell script can substitute for
-.I yacc
-and is often installed as
-.IR yacc :
-.sp
-.RS
-.ft B
-bison \-y "$@"
-.ft R
-.sp
-.RE
-.SH SEE ALSO
-.IR yacc (1)
-.br
-The
-.IR "Bison Reference Manual" ,
-included as the file
-.B bison.texinfo
-in the
-.I bison
-source distribution.
-.SH DIAGNOSTICS
-Self explanatory.
+.B bison
+programs are properly installed at your site, the command
+.IP
+.B info bison
+.PP
+should give you access to the complete manual.
diff --git a/doc/bison.info b/doc/bison.info
index 7907515..9cdf453 100644
--- a/doc/bison.info
+++ b/doc/bison.info
Binary files differ
diff --git a/doc/bison.texi b/doc/bison.texi
new file mode 100644
index 0000000..a508b9c
--- /dev/null
+++ b/doc/bison.texi
@@ -0,0 +1,12364 @@
+\input texinfo @c -*-texinfo-*-
+@comment %**start of header
+@setfilename bison.info
+@include version.texi
+@settitle Bison @value{VERSION}
+@setchapternewpage odd
+
+@finalout
+
+@c SMALL BOOK version
+@c This edition has been formatted so that you can format and print it in
+@c the smallbook format.
+@c @smallbook
+
+@c Set following if you want to document %default-prec and %no-default-prec.
+@c This feature is experimental and may change in future Bison versions.
+@c @set defaultprec
+
+@ifnotinfo
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex tp cp
+@end ifnotinfo
+@ifinfo
+@synindex fn cp
+@synindex vr cp
+@synindex tp cp
+@end ifinfo
+@comment %**end of header
+
+@copying
+
+This manual (@value{UPDATED}) is for GNU Bison (version
+@value{VERSION}), the GNU parser generator.
+
+Copyright @copyright{} 1988-1993, 1995, 1998-2012 Free Software
+Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License,
+Version 1.3 or any later version published by the Free Software
+Foundation; with no Invariant Sections, with the Front-Cover texts
+being ``A GNU Manual,'' and with the Back-Cover Texts as in
+(a) below.  A copy of the license is included in the section entitled
+``GNU Free Documentation License.''
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
+modify this GNU manual.  Buying copies from the FSF
+supports it in developing GNU and promoting software
+freedom.''
+@end quotation
+@end copying
+
+@dircategory Software development
+@direntry
+* bison: (bison).       GNU parser generator (Yacc replacement).
+@end direntry
+
+@titlepage
+@title Bison
+@subtitle The Yacc-compatible Parser Generator
+@subtitle @value{UPDATED}, Bison Version @value{VERSION}
+
+@author by Charles Donnelly and Richard Stallman
+
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@sp 2
+Published by the Free Software Foundation @*
+51 Franklin Street, Fifth Floor @*
+Boston, MA  02110-1301  USA @*
+Printed copies are available from the Free Software Foundation.@*
+ISBN 1-882114-44-2
+@sp 2
+Cover art by Etienne Suvasa.
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top Bison
+@insertcopying
+@end ifnottex
+
+@menu
+* Introduction::
+* Conditions::
+* Copying::             The GNU General Public License says
+                          how you can copy and share Bison.
+
+Tutorial sections:
+* Concepts::            Basic concepts for understanding Bison.
+* Examples::            Three simple explained examples of using Bison.
+
+Reference sections:
+* Grammar File::        Writing Bison declarations and rules.
+* Interface::           C-language interface to the parser function @code{yyparse}.
+* Algorithm::           How the Bison parser works at run-time.
+* Error Recovery::      Writing rules for error recovery.
+* Context Dependency::  What to do if your language syntax is too
+                          messy for Bison to handle straightforwardly.
+* Debugging::           Understanding or debugging Bison parsers.
+* Invocation::          How to run Bison (to produce the parser implementation).
+* Other Languages::     Creating C++ and Java parsers.
+* FAQ::                 Frequently Asked Questions
+* Table of Symbols::    All the keywords of the Bison language are explained.
+* Glossary::            Basic concepts are explained.
+* Copying This Manual:: License for copying this manual.
+* Bibliography::        Publications cited in this manual.
+* Index of Terms::      Cross-references to the text.
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+The Concepts of Bison
+
+* Language and Grammar:: Languages and context-free grammars,
+                           as mathematical ideas.
+* Grammar in Bison::     How we represent grammars for Bison's sake.
+* Semantic Values::      Each token or syntactic grouping can have
+                           a semantic value (the value of an integer,
+                           the name of an identifier, etc.).
+* Semantic Actions::     Each rule can have an action containing C code.
+* GLR Parsers::          Writing parsers for general context-free languages.
+* Locations::            Overview of location tracking.
+* Bison Parser::         What are Bison's input and output,
+                           how is the output used?
+* Stages::               Stages in writing and running Bison grammars.
+* Grammar Layout::       Overall structure of a Bison grammar file.
+
+Writing GLR Parsers
+
+* Simple GLR Parsers::     Using GLR parsers on unambiguous grammars.
+* Merging GLR Parses::     Using GLR parsers to resolve ambiguities.
+* GLR Semantic Actions::   Deferred semantic actions have special concerns.
+* Compiler Requirements::  GLR parsers require a modern C compiler.
+
+Examples
+
+* RPN Calc::               Reverse polish notation calculator;
+                             a first example with no operator precedence.
+* Infix Calc::             Infix (algebraic) notation calculator.
+                             Operator precedence is introduced.
+* Simple Error Recovery::  Continuing after syntax errors.
+* Location Tracking Calc:: Demonstrating the use of @@@var{n} and @@$.
+* Multi-function Calc::    Calculator with memory and trig functions.
+                             It uses multiple data-types for semantic values.
+* Exercises::              Ideas for improving the multi-function calculator.
+
+Reverse Polish Notation Calculator
+
+* Rpcalc Declarations::    Prologue (declarations) for rpcalc.
+* Rpcalc Rules::           Grammar Rules for rpcalc, with explanation.
+* Rpcalc Lexer::           The lexical analyzer.
+* Rpcalc Main::            The controlling function.
+* Rpcalc Error::           The error reporting function.
+* Rpcalc Generate::        Running Bison on the grammar file.
+* Rpcalc Compile::         Run the C compiler on the output code.
+
+Grammar Rules for @code{rpcalc}
+
+* Rpcalc Input::
+* Rpcalc Line::
+* Rpcalc Expr::
+
+Location Tracking Calculator: @code{ltcalc}
+
+* Ltcalc Declarations::    Bison and C declarations for ltcalc.
+* Ltcalc Rules::           Grammar rules for ltcalc, with explanations.
+* Ltcalc Lexer::           The lexical analyzer.
+
+Multi-Function Calculator: @code{mfcalc}
+
+* Mfcalc Declarations::    Bison declarations for multi-function calculator.
+* Mfcalc Rules::           Grammar rules for the calculator.
+* Mfcalc Symbol Table::    Symbol table management subroutines.
+
+Bison Grammar Files
+
+* Grammar Outline::    Overall layout of the grammar file.
+* Symbols::            Terminal and nonterminal symbols.
+* Rules::              How to write grammar rules.
+* Recursion::          Writing recursive rules.
+* Semantics::          Semantic values and actions.
+* Tracking Locations:: Locations and actions.
+* Named References::   Using named references in actions.
+* Declarations::       All kinds of Bison declarations are described here.
+* Multiple Parsers::   Putting more than one Bison parser in one program.
+
+Outline of a Bison Grammar
+
+* Prologue::              Syntax and usage of the prologue.
+* Prologue Alternatives:: Syntax and usage of alternatives to the prologue.
+* Bison Declarations::    Syntax and usage of the Bison declarations section.
+* Grammar Rules::         Syntax and usage of the grammar rules section.
+* Epilogue::              Syntax and usage of the epilogue.
+
+Defining Language Semantics
+
+* Value Type::        Specifying one data type for all semantic values.
+* Multiple Types::    Specifying several alternative data types.
+* Actions::           An action is the semantic definition of a grammar rule.
+* Action Types::      Specifying data types for actions to operate on.
+* Mid-Rule Actions::  Most actions go at the end of a rule.
+                      This says when, why and how to use the exceptional
+                        action in the middle of a rule.
+
+Actions in Mid-Rule
+
+* Using Mid-Rule Actions::       Putting an action in the middle of a rule.
+* Mid-Rule Action Translation::  How mid-rule actions are actually processed.
+* Mid-Rule Conflicts::           Mid-rule actions can cause conflicts.
+
+Tracking Locations
+
+* Location Type::               Specifying a data type for locations.
+* Actions and Locations::       Using locations in actions.
+* Location Default Action::     Defining a general way to compute locations.
+
+Bison Declarations
+
+* Require Decl::      Requiring a Bison version.
+* Token Decl::        Declaring terminal symbols.
+* Precedence Decl::   Declaring terminals with precedence and associativity.
+* Union Decl::        Declaring the set of all semantic value types.
+* Type Decl::         Declaring the choice of type for a nonterminal symbol.
+* Initial Action Decl::  Code run before parsing starts.
+* Destructor Decl::   Declaring how symbols are freed.
+* Printer Decl::      Declaring how symbol values are displayed.
+* Expect Decl::       Suppressing warnings about parsing conflicts.
+* Start Decl::        Specifying the start symbol.
+* Pure Decl::         Requesting a reentrant parser.
+* Push Decl::         Requesting a push parser.
+* Decl Summary::      Table of all Bison declarations.
+* %define Summary::   Defining variables to adjust Bison's behavior.
+* %code Summary::     Inserting code into the parser source.
+
+Parser C-Language Interface
+
+* Parser Function::         How to call @code{yyparse} and what it returns.
+* Push Parser Function::    How to call @code{yypush_parse} and what it returns.
+* Pull Parser Function::    How to call @code{yypull_parse} and what it returns.
+* Parser Create Function::  How to call @code{yypstate_new} and what it returns.
+* Parser Delete Function::  How to call @code{yypstate_delete} and what it returns.
+* Lexical::                 You must supply a function @code{yylex}
+                              which reads tokens.
+* Error Reporting::         You must supply a function @code{yyerror}.
+* Action Features::         Special features for use in actions.
+* Internationalization::    How to let the parser speak in the user's
+                              native language.
+
+The Lexical Analyzer Function @code{yylex}
+
+* Calling Convention::  How @code{yyparse} calls @code{yylex}.
+* Token Values::        How @code{yylex} must return the semantic value
+                          of the token it has read.
+* Token Locations::     How @code{yylex} must return the text location
+                          (line number, etc.) of the token, if the
+                          actions want that.
+* Pure Calling::        How the calling convention differs in a pure parser
+                          (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
+
+The Bison Parser Algorithm
+
+* Lookahead::         Parser looks one token ahead when deciding what to do.
+* Shift/Reduce::      Conflicts: when either shifting or reduction is valid.
+* Precedence::        Operator precedence works by resolving conflicts.
+* Contextual Precedence::  When an operator's precedence depends on context.
+* Parser States::     The parser is a finite-state-machine with stack.
+* Reduce/Reduce::     When two rules are applicable in the same situation.
+* Mysterious Conflicts:: Conflicts that look unjustified.
+* Tuning LR::         How to tune fundamental aspects of LR-based parsing.
+* Generalized LR Parsing::  Parsing arbitrary context-free grammars.
+* Memory Management:: What happens when memory is exhausted.  How to avoid it.
+
+Operator Precedence
+
+* Why Precedence::    An example showing why precedence is needed.
+* Using Precedence::  How to specify precedence in Bison grammars.
+* Precedence Examples::  How these features are used in the previous example.
+* How Precedence::    How they work.
+* Non Operators::     Using precedence for general conflicts.
+
+Tuning LR
+
+* LR Table Construction:: Choose a different construction algorithm.
+* Default Reductions::    Disable default reductions.
+* LAC::                   Correct lookahead sets in the parser states.
+* Unreachable States::    Keep unreachable parser states for debugging.
+
+Handling Context Dependencies
+
+* Semantic Tokens::   Token parsing can depend on the semantic context.
+* Lexical Tie-ins::   Token parsing can depend on the syntactic context.
+* Tie-in Recovery::   Lexical tie-ins have implications for how
+                        error recovery rules must be written.
+
+Debugging Your Parser
+
+* Understanding::     Understanding the structure of your parser.
+* Graphviz::          Getting a visual representation of the parser.
+* Xml::               Getting a markup representation of the parser.
+* Tracing::           Tracing the execution of your parser.
+
+Tracing Your Parser
+
+* Enabling Traces::             Activating run-time trace support
+* Mfcalc Traces::               Extending @code{mfcalc} to support traces
+* The YYPRINT Macro::           Obsolete interface for semantic value reports
+
+Invoking Bison
+
+* Bison Options::     All the options described in detail,
+                        in alphabetical order by short options.
+* Option Cross Key::  Alphabetical list of long options.
+* Yacc Library::      Yacc-compatible @code{yylex} and @code{main}.
+
+Parsers Written In Other Languages
+
+* C++ Parsers::                 The interface to generate C++ parser classes
+* Java Parsers::                The interface to generate Java parser classes
+
+C++ Parsers
+
+* C++ Bison Interface::         Asking for C++ parser generation
+* C++ Semantic Values::         %union vs. C++
+* C++ Location Values::         The position and location classes
+* C++ Parser Interface::        Instantiating and running the parser
+* C++ Scanner Interface::       Exchanges between yylex and parse
+* A Complete C++ Example::      Demonstrating their use
+
+C++ Location Values
+
+* C++ position::                One point in the source file
+* C++ location::                Two points in the source file
+* User Defined Location Type::  Required interface for locations
+
+A Complete C++ Example
+
+* Calc++ --- C++ Calculator::   The specifications
+* Calc++ Parsing Driver::       An active parsing context
+* Calc++ Parser::               A parser class
+* Calc++ Scanner::              A pure C++ Flex scanner
+* Calc++ Top Level::            Conducting the band
+
+Java Parsers
+
+* Java Bison Interface::        Asking for Java parser generation
+* Java Semantic Values::        %type and %token vs. Java
+* Java Location Values::        The position and location classes
+* Java Parser Interface::       Instantiating and running the parser
+* Java Scanner Interface::      Specifying the scanner for the parser
+* Java Action Features::        Special features for use in actions
+* Java Differences::            Differences between C/C++ and Java Grammars
+* Java Declarations Summary::   List of Bison declarations used with Java
+
+Frequently Asked Questions
+
+* Memory Exhausted::            Breaking the Stack Limits
+* How Can I Reset the Parser::  @code{yyparse} Keeps some State
+* Strings are Destroyed::       @code{yylval} Loses Track of Strings
+* Implementing Gotos/Loops::    Control Flow in the Calculator
+* Multiple start-symbols::      Factoring closely related grammars
+* Secure?  Conform?::           Is Bison POSIX safe?
+* I can't build Bison::         Troubleshooting
+* Where can I find help?::      Troubleshouting
+* Bug Reports::                 Troublereporting
+* More Languages::              Parsers in C++, Java, and so on
+* Beta Testing::                Experimenting development versions
+* Mailing Lists::               Meeting other Bison users
+
+Copying This Manual
+
+* Copying This Manual::         License for copying this manual.
+
+@end detailmenu
+@end menu
+
+@node Introduction
+@unnumbered Introduction
+@cindex introduction
+
+@dfn{Bison} is a general-purpose parser generator that converts an
+annotated context-free grammar into a deterministic LR or generalized
+LR (GLR) parser employing LALR(1) parser tables.  As an experimental
+feature, Bison can also generate IELR(1) or canonical LR(1) parser
+tables.  Once you are proficient with Bison, you can use it to develop
+a wide range of language parsers, from those used in simple desk
+calculators to complex programming languages.
+
+Bison is upward compatible with Yacc: all properly-written Yacc
+grammars ought to work with Bison with no change.  Anyone familiar
+with Yacc should be able to use Bison with little trouble.  You need
+to be fluent in C or C++ programming in order to use Bison or to
+understand this manual.  Java is also supported as an experimental
+feature.
+
+We begin with tutorial chapters that explain the basic concepts of
+using Bison and show three explained examples, each building on the
+last.  If you don't know Bison or Yacc, start by reading these
+chapters.  Reference chapters follow, which describe specific aspects
+of Bison in detail.
+
+Bison was written originally by Robert Corbett.  Richard Stallman made
+it Yacc-compatible.  Wilfred Hansen of Carnegie Mellon University
+added multi-character string literals and other features.  Since then,
+Bison has grown more robust and evolved many other new features thanks
+to the hard work of a long list of volunteers.  For details, see the
+@file{THANKS} and @file{ChangeLog} files included in the Bison
+distribution.
+
+This edition corresponds to version @value{VERSION} of Bison.
+
+@node Conditions
+@unnumbered Conditions for Using Bison
+
+The distribution terms for Bison-generated parsers permit using the
+parsers in nonfree programs.  Before Bison version 2.2, these extra
+permissions applied only when Bison was generating LALR(1)
+parsers in C@.  And before Bison version 1.24, Bison-generated
+parsers could be used only in programs that were free software.
+
+The other GNU programming tools, such as the GNU C
+compiler, have never
+had such a requirement.  They could always be used for nonfree
+software.  The reason Bison was different was not due to a special
+policy decision; it resulted from applying the usual General Public
+License to all of the Bison source code.
+
+The main output of the Bison utility---the Bison parser implementation
+file---contains a verbatim copy of a sizable piece of Bison, which is
+the code for the parser's implementation.  (The actions from your
+grammar are inserted into this implementation at one point, but most
+of the rest of the implementation is not changed.)  When we applied
+the GPL terms to the skeleton code for the parser's implementation,
+the effect was to restrict the use of Bison output to free software.
+
+We didn't change the terms because of sympathy for people who want to
+make software proprietary.  @strong{Software should be free.}  But we
+concluded that limiting Bison's use to free software was doing little to
+encourage people to make other software free.  So we decided to make the
+practical conditions for using Bison match the practical conditions for
+using the other GNU tools.
+
+This exception applies when Bison is generating code for a parser.
+You can tell whether the exception applies to a Bison output file by
+inspecting the file for text beginning with ``As a special
+exception@dots{}''.  The text spells out the exact terms of the
+exception.
+
+@node Copying
+@unnumbered GNU GENERAL PUBLIC LICENSE
+@include gpl-3.0.texi
+
+@node Concepts
+@chapter The Concepts of Bison
+
+This chapter introduces many of the basic concepts without which the
+details of Bison will not make sense.  If you do not already know how to
+use Bison or Yacc, we suggest you start by reading this chapter carefully.
+
+@menu
+* Language and Grammar:: Languages and context-free grammars,
+                           as mathematical ideas.
+* Grammar in Bison::     How we represent grammars for Bison's sake.
+* Semantic Values::      Each token or syntactic grouping can have
+                           a semantic value (the value of an integer,
+                           the name of an identifier, etc.).
+* Semantic Actions::     Each rule can have an action containing C code.
+* GLR Parsers::          Writing parsers for general context-free languages.
+* Locations::            Overview of location tracking.
+* Bison Parser::         What are Bison's input and output,
+                           how is the output used?
+* Stages::               Stages in writing and running Bison grammars.
+* Grammar Layout::       Overall structure of a Bison grammar file.
+@end menu
+
+@node Language and Grammar
+@section Languages and Context-Free Grammars
+
+@cindex context-free grammar
+@cindex grammar, context-free
+In order for Bison to parse a language, it must be described by a
+@dfn{context-free grammar}.  This means that you specify one or more
+@dfn{syntactic groupings} and give rules for constructing them from their
+parts.  For example, in the C language, one kind of grouping is called an
+`expression'.  One rule for making an expression might be, ``An expression
+can be made of a minus sign and another expression''.  Another would be,
+``An expression can be an integer''.  As you can see, rules are often
+recursive, but there must be at least one rule which leads out of the
+recursion.
+
+@cindex BNF
+@cindex Backus-Naur form
+The most common formal system for presenting such rules for humans to read
+is @dfn{Backus-Naur Form} or ``BNF'', which was developed in
+order to specify the language Algol 60.  Any grammar expressed in
+BNF is a context-free grammar.  The input to Bison is
+essentially machine-readable BNF.
+
+@cindex LALR grammars
+@cindex IELR grammars
+@cindex LR grammars
+There are various important subclasses of context-free grammars.  Although
+it can handle almost all context-free grammars, Bison is optimized for what
+are called LR(1) grammars.  In brief, in these grammars, it must be possible
+to tell how to parse any portion of an input string with just a single token
+of lookahead.  For historical reasons, Bison by default is limited by the
+additional restrictions of LALR(1), which is hard to explain simply.
+@xref{Mysterious Conflicts}, for more information on this.  As an
+experimental feature, you can escape these additional restrictions by
+requesting IELR(1) or canonical LR(1) parser tables.  @xref{LR Table
+Construction}, to learn how.
+
+@cindex GLR parsing
+@cindex generalized LR (GLR) parsing
+@cindex ambiguous grammars
+@cindex nondeterministic parsing
+
+Parsers for LR(1) grammars are @dfn{deterministic}, meaning
+roughly that the next grammar rule to apply at any point in the input is
+uniquely determined by the preceding input and a fixed, finite portion
+(called a @dfn{lookahead}) of the remaining input.  A context-free
+grammar can be @dfn{ambiguous}, meaning that there are multiple ways to
+apply the grammar rules to get the same inputs.  Even unambiguous
+grammars can be @dfn{nondeterministic}, meaning that no fixed
+lookahead always suffices to determine the next grammar rule to apply.
+With the proper declarations, Bison is also able to parse these more
+general context-free grammars, using a technique known as GLR
+parsing (for Generalized LR).  Bison's GLR parsers
+are able to handle any context-free grammar for which the number of
+possible parses of any given string is finite.
+
+@cindex symbols (abstract)
+@cindex token
+@cindex syntactic grouping
+@cindex grouping, syntactic
+In the formal grammatical rules for a language, each kind of syntactic
+unit or grouping is named by a @dfn{symbol}.  Those which are built by
+grouping smaller constructs according to grammatical rules are called
+@dfn{nonterminal symbols}; those which can't be subdivided are called
+@dfn{terminal symbols} or @dfn{token types}.  We call a piece of input
+corresponding to a single terminal symbol a @dfn{token}, and a piece
+corresponding to a single nonterminal symbol a @dfn{grouping}.
+
+We can use the C language as an example of what symbols, terminal and
+nonterminal, mean.  The tokens of C are identifiers, constants (numeric
+and string), and the various keywords, arithmetic operators and
+punctuation marks.  So the terminal symbols of a grammar for C include
+`identifier', `number', `string', plus one symbol for each keyword,
+operator or punctuation mark: `if', `return', `const', `static', `int',
+`char', `plus-sign', `open-brace', `close-brace', `comma' and many more.
+(These tokens can be subdivided into characters, but that is a matter of
+lexicography, not grammar.)
+
+Here is a simple C function subdivided into tokens:
+
+@example
+int             /* @r{keyword `int'} */
+square (int x)  /* @r{identifier, open-paren, keyword `int',}
+                   @r{identifier, close-paren} */
+@{               /* @r{open-brace} */
+  return x * x; /* @r{keyword `return', identifier, asterisk,}
+                   @r{identifier, semicolon} */
+@}               /* @r{close-brace} */
+@end example
+
+The syntactic groupings of C include the expression, the statement, the
+declaration, and the function definition.  These are represented in the
+grammar of C by nonterminal symbols `expression', `statement',
+`declaration' and `function definition'.  The full grammar uses dozens of
+additional language constructs, each with its own nonterminal symbol, in
+order to express the meanings of these four.  The example above is a
+function definition; it contains one declaration, and one statement.  In
+the statement, each @samp{x} is an expression and so is @samp{x * x}.
+
+Each nonterminal symbol must have grammatical rules showing how it is made
+out of simpler constructs.  For example, one kind of C statement is the
+@code{return} statement; this would be described with a grammar rule which
+reads informally as follows:
+
+@quotation
+A `statement' can be made of a `return' keyword, an `expression' and a
+`semicolon'.
+@end quotation
+
+@noindent
+There would be many other rules for `statement', one for each kind of
+statement in C.
+
+@cindex start symbol
+One nonterminal symbol must be distinguished as the special one which
+defines a complete utterance in the language.  It is called the @dfn{start
+symbol}.  In a compiler, this means a complete input program.  In the C
+language, the nonterminal symbol `sequence of definitions and declarations'
+plays this role.
+
+For example, @samp{1 + 2} is a valid C expression---a valid part of a C
+program---but it is not valid as an @emph{entire} C program.  In the
+context-free grammar of C, this follows from the fact that `expression' is
+not the start symbol.
+
+The Bison parser reads a sequence of tokens as its input, and groups the
+tokens using the grammar rules.  If the input is valid, the end result is
+that the entire token sequence reduces to a single grouping whose symbol is
+the grammar's start symbol.  If we use a grammar for C, the entire input
+must be a `sequence of definitions and declarations'.  If not, the parser
+reports a syntax error.
+
+@node Grammar in Bison
+@section From Formal Rules to Bison Input
+@cindex Bison grammar
+@cindex grammar, Bison
+@cindex formal grammar
+
+A formal grammar is a mathematical construct.  To define the language
+for Bison, you must write a file expressing the grammar in Bison syntax:
+a @dfn{Bison grammar} file.  @xref{Grammar File, ,Bison Grammar Files}.
+
+A nonterminal symbol in the formal grammar is represented in Bison input
+as an identifier, like an identifier in C@.  By convention, it should be
+in lower case, such as @code{expr}, @code{stmt} or @code{declaration}.
+
+The Bison representation for a terminal symbol is also called a @dfn{token
+type}.  Token types as well can be represented as C-like identifiers.  By
+convention, these identifiers should be upper case to distinguish them from
+nonterminals: for example, @code{INTEGER}, @code{IDENTIFIER}, @code{IF} or
+@code{RETURN}.  A terminal symbol that stands for a particular keyword in
+the language should be named after that keyword converted to upper case.
+The terminal symbol @code{error} is reserved for error recovery.
+@xref{Symbols}.
+
+A terminal symbol can also be represented as a character literal, just like
+a C character constant.  You should do this whenever a token is just a
+single character (parenthesis, plus-sign, etc.): use that same character in
+a literal as the terminal symbol for that token.
+
+A third way to represent a terminal symbol is with a C string constant
+containing several characters.  @xref{Symbols}, for more information.
+
+The grammar rules also have an expression in Bison syntax.  For example,
+here is the Bison rule for a C @code{return} statement.  The semicolon in
+quotes is a literal character token, representing part of the C syntax for
+the statement; the naked semicolon, and the colon, are Bison punctuation
+used in every rule.
+
+@example
+stmt: RETURN expr ';' ;
+@end example
+
+@noindent
+@xref{Rules, ,Syntax of Grammar Rules}.
+
+@node Semantic Values
+@section Semantic Values
+@cindex semantic value
+@cindex value, semantic
+
+A formal grammar selects tokens only by their classifications: for example,
+if a rule mentions the terminal symbol `integer constant', it means that
+@emph{any} integer constant is grammatically valid in that position.  The
+precise value of the constant is irrelevant to how to parse the input: if
+@samp{x+4} is grammatical then @samp{x+1} or @samp{x+3989} is equally
+grammatical.
+
+But the precise value is very important for what the input means once it is
+parsed.  A compiler is useless if it fails to distinguish between 4, 1 and
+3989 as constants in the program!  Therefore, each token in a Bison grammar
+has both a token type and a @dfn{semantic value}.  @xref{Semantics,
+,Defining Language Semantics},
+for details.
+
+The token type is a terminal symbol defined in the grammar, such as
+@code{INTEGER}, @code{IDENTIFIER} or @code{','}.  It tells everything
+you need to know to decide where the token may validly appear and how to
+group it with other tokens.  The grammar rules know nothing about tokens
+except their types.
+
+The semantic value has all the rest of the information about the
+meaning of the token, such as the value of an integer, or the name of an
+identifier.  (A token such as @code{','} which is just punctuation doesn't
+need to have any semantic value.)
+
+For example, an input token might be classified as token type
+@code{INTEGER} and have the semantic value 4.  Another input token might
+have the same token type @code{INTEGER} but value 3989.  When a grammar
+rule says that @code{INTEGER} is allowed, either of these tokens is
+acceptable because each is an @code{INTEGER}.  When the parser accepts the
+token, it keeps track of the token's semantic value.
+
+Each grouping can also have a semantic value as well as its nonterminal
+symbol.  For example, in a calculator, an expression typically has a
+semantic value that is a number.  In a compiler for a programming
+language, an expression typically has a semantic value that is a tree
+structure describing the meaning of the expression.
+
+@node Semantic Actions
+@section Semantic Actions
+@cindex semantic actions
+@cindex actions, semantic
+
+In order to be useful, a program must do more than parse input; it must
+also produce some output based on the input.  In a Bison grammar, a grammar
+rule can have an @dfn{action} made up of C statements.  Each time the
+parser recognizes a match for that rule, the action is executed.
+@xref{Actions}.
+
+Most of the time, the purpose of an action is to compute the semantic value
+of the whole construct from the semantic values of its parts.  For example,
+suppose we have a rule which says an expression can be the sum of two
+expressions.  When the parser recognizes such a sum, each of the
+subexpressions has a semantic value which describes how it was built up.
+The action for this rule should create a similar sort of value for the
+newly recognized larger expression.
+
+For example, here is a rule that says an expression can be the sum of
+two subexpressions:
+
+@example
+expr: expr '+' expr   @{ $$ = $1 + $3; @} ;
+@end example
+
+@noindent
+The action says how to produce the semantic value of the sum expression
+from the values of the two subexpressions.
+
+@node GLR Parsers
+@section Writing GLR Parsers
+@cindex GLR parsing
+@cindex generalized LR (GLR) parsing
+@findex %glr-parser
+@cindex conflicts
+@cindex shift/reduce conflicts
+@cindex reduce/reduce conflicts
+
+In some grammars, Bison's deterministic
+LR(1) parsing algorithm cannot decide whether to apply a
+certain grammar rule at a given point.  That is, it may not be able to
+decide (on the basis of the input read so far) which of two possible
+reductions (applications of a grammar rule) applies, or whether to apply
+a reduction or read more of the input and apply a reduction later in the
+input.  These are known respectively as @dfn{reduce/reduce} conflicts
+(@pxref{Reduce/Reduce}), and @dfn{shift/reduce} conflicts
+(@pxref{Shift/Reduce}).
+
+To use a grammar that is not easily modified to be LR(1), a
+more general parsing algorithm is sometimes necessary.  If you include
+@code{%glr-parser} among the Bison declarations in your file
+(@pxref{Grammar Outline}), the result is a Generalized LR
+(GLR) parser.  These parsers handle Bison grammars that
+contain no unresolved conflicts (i.e., after applying precedence
+declarations) identically to deterministic parsers.  However, when
+faced with unresolved shift/reduce and reduce/reduce conflicts,
+GLR parsers use the simple expedient of doing both,
+effectively cloning the parser to follow both possibilities.  Each of
+the resulting parsers can again split, so that at any given time, there
+can be any number of possible parses being explored.  The parsers
+proceed in lockstep; that is, all of them consume (shift) a given input
+symbol before any of them proceed to the next.  Each of the cloned
+parsers eventually meets one of two possible fates: either it runs into
+a parsing error, in which case it simply vanishes, or it merges with
+another parser, because the two of them have reduced the input to an
+identical set of symbols.
+
+During the time that there are multiple parsers, semantic actions are
+recorded, but not performed.  When a parser disappears, its recorded
+semantic actions disappear as well, and are never performed.  When a
+reduction makes two parsers identical, causing them to merge, Bison
+records both sets of semantic actions.  Whenever the last two parsers
+merge, reverting to the single-parser case, Bison resolves all the
+outstanding actions either by precedences given to the grammar rules
+involved, or by performing both actions, and then calling a designated
+user-defined function on the resulting values to produce an arbitrary
+merged result.
+
+@menu
+* Simple GLR Parsers::     Using GLR parsers on unambiguous grammars.
+* Merging GLR Parses::     Using GLR parsers to resolve ambiguities.
+* GLR Semantic Actions::   Deferred semantic actions have special concerns.
+* Compiler Requirements::  GLR parsers require a modern C compiler.
+@end menu
+
+@node Simple GLR Parsers
+@subsection Using GLR on Unambiguous Grammars
+@cindex GLR parsing, unambiguous grammars
+@cindex generalized LR (GLR) parsing, unambiguous grammars
+@findex %glr-parser
+@findex %expect-rr
+@cindex conflicts
+@cindex reduce/reduce conflicts
+@cindex shift/reduce conflicts
+
+In the simplest cases, you can use the GLR algorithm
+to parse grammars that are unambiguous but fail to be LR(1).
+Such grammars typically require more than one symbol of lookahead.
+
+Consider a problem that
+arises in the declaration of enumerated and subrange types in the
+programming language Pascal.  Here are some examples:
+
+@example
+type subrange = lo .. hi;
+type enum = (a, b, c);
+@end example
+
+@noindent
+The original language standard allows only numeric
+literals and constant identifiers for the subrange bounds (@samp{lo}
+and @samp{hi}), but Extended Pascal (ISO/IEC
+10206) and many other
+Pascal implementations allow arbitrary expressions there.  This gives
+rise to the following situation, containing a superfluous pair of
+parentheses:
+
+@example
+type subrange = (a) .. b;
+@end example
+
+@noindent
+Compare this to the following declaration of an enumerated
+type with only one value:
+
+@example
+type enum = (a);
+@end example
+
+@noindent
+(These declarations are contrived, but they are syntactically
+valid, and more-complicated cases can come up in practical programs.)
+
+These two declarations look identical until the @samp{..} token.
+With normal LR(1) one-token lookahead it is not
+possible to decide between the two forms when the identifier
+@samp{a} is parsed.  It is, however, desirable
+for a parser to decide this, since in the latter case
+@samp{a} must become a new identifier to represent the enumeration
+value, while in the former case @samp{a} must be evaluated with its
+current meaning, which may be a constant or even a function call.
+
+You could parse @samp{(a)} as an ``unspecified identifier in parentheses'',
+to be resolved later, but this typically requires substantial
+contortions in both semantic actions and large parts of the
+grammar, where the parentheses are nested in the recursive rules for
+expressions.
+
+You might think of using the lexer to distinguish between the two
+forms by returning different tokens for currently defined and
+undefined identifiers.  But if these declarations occur in a local
+scope, and @samp{a} is defined in an outer scope, then both forms
+are possible---either locally redefining @samp{a}, or using the
+value of @samp{a} from the outer scope.  So this approach cannot
+work.
+
+A simple solution to this problem is to declare the parser to
+use the GLR algorithm.
+When the GLR parser reaches the critical state, it
+merely splits into two branches and pursues both syntax rules
+simultaneously.  Sooner or later, one of them runs into a parsing
+error.  If there is a @samp{..} token before the next
+@samp{;}, the rule for enumerated types fails since it cannot
+accept @samp{..} anywhere; otherwise, the subrange type rule
+fails since it requires a @samp{..} token.  So one of the branches
+fails silently, and the other one continues normally, performing
+all the intermediate actions that were postponed during the split.
+
+If the input is syntactically incorrect, both branches fail and the parser
+reports a syntax error as usual.
+
+The effect of all this is that the parser seems to ``guess'' the
+correct branch to take, or in other words, it seems to use more
+lookahead than the underlying LR(1) algorithm actually allows
+for.  In this example, LR(2) would suffice, but also some cases
+that are not LR(@math{k}) for any @math{k} can be handled this way.
+
+In general, a GLR parser can take quadratic or cubic worst-case time,
+and the current Bison parser even takes exponential time and space
+for some grammars.  In practice, this rarely happens, and for many
+grammars it is possible to prove that it cannot happen.
+The present example contains only one conflict between two
+rules, and the type-declaration context containing the conflict
+cannot be nested.  So the number of
+branches that can exist at any time is limited by the constant 2,
+and the parsing time is still linear.
+
+Here is a Bison grammar corresponding to the example above.  It
+parses a vastly simplified form of Pascal type declarations.
+
+@example
+%token TYPE DOTDOT ID
+
+@group
+%left '+' '-'
+%left '*' '/'
+@end group
+
+%%
+
+@group
+type_decl: TYPE ID '=' type ';' ;
+@end group
+
+@group
+type:
+  '(' id_list ')'
+| expr DOTDOT expr
+;
+@end group
+
+@group
+id_list:
+  ID
+| id_list ',' ID
+;
+@end group
+
+@group
+expr:
+  '(' expr ')'
+| expr '+' expr
+| expr '-' expr
+| expr '*' expr
+| expr '/' expr
+| ID
+;
+@end group
+@end example
+
+When used as a normal LR(1) grammar, Bison correctly complains
+about one reduce/reduce conflict.  In the conflicting situation the
+parser chooses one of the alternatives, arbitrarily the one
+declared first.  Therefore the following correct input is not
+recognized:
+
+@example
+type t = (a) .. b;
+@end example
+
+The parser can be turned into a GLR parser, while also telling Bison
+to be silent about the one known reduce/reduce conflict, by adding
+these two declarations to the Bison grammar file (before the first
+@samp{%%}):
+
+@example
+%glr-parser
+%expect-rr 1
+@end example
+
+@noindent
+No change in the grammar itself is required.  Now the
+parser recognizes all valid declarations, according to the
+limited syntax above, transparently.  In fact, the user does not even
+notice when the parser splits.
+
+So here we have a case where we can use the benefits of GLR,
+almost without disadvantages.  Even in simple cases like this, however,
+there are at least two potential problems to beware.  First, always
+analyze the conflicts reported by Bison to make sure that GLR
+splitting is only done where it is intended.  A GLR parser
+splitting inadvertently may cause problems less obvious than an
+LR parser statically choosing the wrong alternative in a
+conflict.  Second, consider interactions with the lexer (@pxref{Semantic
+Tokens}) with great care.  Since a split parser consumes tokens without
+performing any actions during the split, the lexer cannot obtain
+information via parser actions.  Some cases of lexer interactions can be
+eliminated by using GLR to shift the complications from the
+lexer to the parser.  You must check the remaining cases for
+correctness.
+
+In our example, it would be safe for the lexer to return tokens based on
+their current meanings in some symbol table, because no new symbols are
+defined in the middle of a type declaration.  Though it is possible for
+a parser to define the enumeration constants as they are parsed, before
+the type declaration is completed, it actually makes no difference since
+they cannot be used within the same enumerated type declaration.
+
+@node Merging GLR Parses
+@subsection Using GLR to Resolve Ambiguities
+@cindex GLR parsing, ambiguous grammars
+@cindex generalized LR (GLR) parsing, ambiguous grammars
+@findex %dprec
+@findex %merge
+@cindex conflicts
+@cindex reduce/reduce conflicts
+
+Let's consider an example, vastly simplified from a C++ grammar.
+
+@example
+%@{
+  #include <stdio.h>
+  #define YYSTYPE char const *
+  int yylex (void);
+  void yyerror (char const *);
+%@}
+
+%token TYPENAME ID
+
+%right '='
+%left '+'
+
+%glr-parser
+
+%%
+
+prog:
+  /* Nothing.  */
+| prog stmt   @{ printf ("\n"); @}
+;
+
+stmt:
+  expr ';'  %dprec 1
+| decl      %dprec 2
+;
+
+expr:
+  ID               @{ printf ("%s ", $$); @}
+| TYPENAME '(' expr ')'
+                   @{ printf ("%s <cast> ", $1); @}
+| expr '+' expr    @{ printf ("+ "); @}
+| expr '=' expr    @{ printf ("= "); @}
+;
+
+decl:
+  TYPENAME declarator ';'
+                   @{ printf ("%s <declare> ", $1); @}
+| TYPENAME declarator '=' expr ';'
+                   @{ printf ("%s <init-declare> ", $1); @}
+;
+
+declarator:
+  ID               @{ printf ("\"%s\" ", $1); @}
+| '(' declarator ')'
+;
+@end example
+
+@noindent
+This models a problematic part of the C++ grammar---the ambiguity between
+certain declarations and statements.  For example,
+
+@example
+T (x) = y+z;
+@end example
+
+@noindent
+parses as either an @code{expr} or a @code{stmt}
+(assuming that @samp{T} is recognized as a @code{TYPENAME} and
+@samp{x} as an @code{ID}).
+Bison detects this as a reduce/reduce conflict between the rules
+@code{expr : ID} and @code{declarator : ID}, which it cannot resolve at the
+time it encounters @code{x} in the example above.  Since this is a
+GLR parser, it therefore splits the problem into two parses, one for
+each choice of resolving the reduce/reduce conflict.
+Unlike the example from the previous section (@pxref{Simple GLR Parsers}),
+however, neither of these parses ``dies,'' because the grammar as it stands is
+ambiguous.  One of the parsers eventually reduces @code{stmt : expr ';'} and
+the other reduces @code{stmt : decl}, after which both parsers are in an
+identical state: they've seen @samp{prog stmt} and have the same unprocessed
+input remaining.  We say that these parses have @dfn{merged.}
+
+At this point, the GLR parser requires a specification in the
+grammar of how to choose between the competing parses.
+In the example above, the two @code{%dprec}
+declarations specify that Bison is to give precedence
+to the parse that interprets the example as a
+@code{decl}, which implies that @code{x} is a declarator.
+The parser therefore prints
+
+@example
+"x" y z + T <init-declare>
+@end example
+
+The @code{%dprec} declarations only come into play when more than one
+parse survives.  Consider a different input string for this parser:
+
+@example
+T (x) + y;
+@end example
+
+@noindent
+This is another example of using GLR to parse an unambiguous
+construct, as shown in the previous section (@pxref{Simple GLR Parsers}).
+Here, there is no ambiguity (this cannot be parsed as a declaration).
+However, at the time the Bison parser encounters @code{x}, it does not
+have enough information to resolve the reduce/reduce conflict (again,
+between @code{x} as an @code{expr} or a @code{declarator}).  In this
+case, no precedence declaration is used.  Again, the parser splits
+into two, one assuming that @code{x} is an @code{expr}, and the other
+assuming @code{x} is a @code{declarator}.  The second of these parsers
+then vanishes when it sees @code{+}, and the parser prints
+
+@example
+x T <cast> y +
+@end example
+
+Suppose that instead of resolving the ambiguity, you wanted to see all
+the possibilities.  For this purpose, you must merge the semantic
+actions of the two possible parsers, rather than choosing one over the
+other.  To do so, you could change the declaration of @code{stmt} as
+follows:
+
+@example
+stmt:
+  expr ';'  %merge <stmtMerge>
+| decl      %merge <stmtMerge>
+;
+@end example
+
+@noindent
+and define the @code{stmtMerge} function as:
+
+@example
+static YYSTYPE
+stmtMerge (YYSTYPE x0, YYSTYPE x1)
+@{
+  printf ("<OR> ");
+  return "";
+@}
+@end example
+
+@noindent
+with an accompanying forward declaration
+in the C declarations at the beginning of the file:
+
+@example
+%@{
+  #define YYSTYPE char const *
+  static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);
+%@}
+@end example
+
+@noindent
+With these declarations, the resulting parser parses the first example
+as both an @code{expr} and a @code{decl}, and prints
+
+@example
+"x" y z + T <init-declare> x T <cast> y z + = <OR>
+@end example
+
+Bison requires that all of the
+productions that participate in any particular merge have identical
+@samp{%merge} clauses.  Otherwise, the ambiguity would be unresolvable,
+and the parser will report an error during any parse that results in
+the offending merge.
+
+@node GLR Semantic Actions
+@subsection GLR Semantic Actions
+
+@cindex deferred semantic actions
+By definition, a deferred semantic action is not performed at the same time as
+the associated reduction.
+This raises caveats for several Bison features you might use in a semantic
+action in a GLR parser.
+
+@vindex yychar
+@cindex GLR parsers and @code{yychar}
+@vindex yylval
+@cindex GLR parsers and @code{yylval}
+@vindex yylloc
+@cindex GLR parsers and @code{yylloc}
+In any semantic action, you can examine @code{yychar} to determine the type of
+the lookahead token present at the time of the associated reduction.
+After checking that @code{yychar} is not set to @code{YYEMPTY} or @code{YYEOF},
+you can then examine @code{yylval} and @code{yylloc} to determine the
+lookahead token's semantic value and location, if any.
+In a nondeferred semantic action, you can also modify any of these variables to
+influence syntax analysis.
+@xref{Lookahead, ,Lookahead Tokens}.
+
+@findex yyclearin
+@cindex GLR parsers and @code{yyclearin}
+In a deferred semantic action, it's too late to influence syntax analysis.
+In this case, @code{yychar}, @code{yylval}, and @code{yylloc} are set to
+shallow copies of the values they had at the time of the associated reduction.
+For this reason alone, modifying them is dangerous.
+Moreover, the result of modifying them is undefined and subject to change with
+future versions of Bison.
+For example, if a semantic action might be deferred, you should never write it
+to invoke @code{yyclearin} (@pxref{Action Features}) or to attempt to free
+memory referenced by @code{yylval}.
+
+@findex YYERROR
+@cindex GLR parsers and @code{YYERROR}
+Another Bison feature requiring special consideration is @code{YYERROR}
+(@pxref{Action Features}), which you can invoke in a semantic action to
+initiate error recovery.
+During deterministic GLR operation, the effect of @code{YYERROR} is
+the same as its effect in a deterministic parser.
+In a deferred semantic action, its effect is undefined.
+@c The effect is probably a syntax error at the split point.
+
+Also, see @ref{Location Default Action, ,Default Action for Locations}, which
+describes a special usage of @code{YYLLOC_DEFAULT} in GLR parsers.
+
+@node Compiler Requirements
+@subsection Considerations when Compiling GLR Parsers
+@cindex @code{inline}
+@cindex GLR parsers and @code{inline}
+
+The GLR parsers require a compiler for ISO C89 or
+later.  In addition, they use the @code{inline} keyword, which is not
+C89, but is C99 and is a common extension in pre-C99 compilers.  It is
+up to the user of these parsers to handle
+portability issues.  For instance, if using Autoconf and the Autoconf
+macro @code{AC_C_INLINE}, a mere
+
+@example
+%@{
+  #include <config.h>
+%@}
+@end example
+
+@noindent
+will suffice.  Otherwise, we suggest
+
+@example
+%@{
+  #if (__STDC_VERSION__ < 199901 && ! defined __GNUC__ \
+       && ! defined inline)
+  # define inline
+  #endif
+%@}
+@end example
+
+@node Locations
+@section Locations
+@cindex location
+@cindex textual location
+@cindex location, textual
+
+Many applications, like interpreters or compilers, have to produce verbose
+and useful error messages.  To achieve this, one must be able to keep track of
+the @dfn{textual location}, or @dfn{location}, of each syntactic construct.
+Bison provides a mechanism for handling these locations.
+
+Each token has a semantic value.  In a similar fashion, each token has an
+associated location, but the type of locations is the same for all tokens
+and groupings.  Moreover, the output parser is equipped with a default data
+structure for storing locations (@pxref{Tracking Locations}, for more
+details).
+
+Like semantic values, locations can be reached in actions using a dedicated
+set of constructs.  In the example above, the location of the whole grouping
+is @code{@@$}, while the locations of the subexpressions are @code{@@1} and
+@code{@@3}.
+
+When a rule is matched, a default action is used to compute the semantic value
+of its left hand side (@pxref{Actions}).  In the same way, another default
+action is used for locations.  However, the action for locations is general
+enough for most cases, meaning there is usually no need to describe for each
+rule how @code{@@$} should be formed.  When building a new location for a given
+grouping, the default behavior of the output parser is to take the beginning
+of the first symbol, and the end of the last symbol.
+
+@node Bison Parser
+@section Bison Output: the Parser Implementation File
+@cindex Bison parser
+@cindex Bison utility
+@cindex lexical analyzer, purpose
+@cindex parser
+
+When you run Bison, you give it a Bison grammar file as input.  The
+most important output is a C source file that implements a parser for
+the language described by the grammar.  This parser is called a
+@dfn{Bison parser}, and this file is called a @dfn{Bison parser
+implementation file}.  Keep in mind that the Bison utility and the
+Bison parser are two distinct programs: the Bison utility is a program
+whose output is the Bison parser implementation file that becomes part
+of your program.
+
+The job of the Bison parser is to group tokens into groupings according to
+the grammar rules---for example, to build identifiers and operators into
+expressions.  As it does this, it runs the actions for the grammar rules it
+uses.
+
+The tokens come from a function called the @dfn{lexical analyzer} that
+you must supply in some fashion (such as by writing it in C).  The Bison
+parser calls the lexical analyzer each time it wants a new token.  It
+doesn't know what is ``inside'' the tokens (though their semantic values
+may reflect this).  Typically the lexical analyzer makes the tokens by
+parsing characters of text, but Bison does not depend on this.
+@xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
+
+The Bison parser implementation file is C code which defines a
+function named @code{yyparse} which implements that grammar.  This
+function does not make a complete C program: you must supply some
+additional functions.  One is the lexical analyzer.  Another is an
+error-reporting function which the parser calls to report an error.
+In addition, a complete C program must start with a function called
+@code{main}; you have to provide this, and arrange for it to call
+@code{yyparse} or the parser will never run.  @xref{Interface, ,Parser
+C-Language Interface}.
+
+Aside from the token type names and the symbols in the actions you
+write, all symbols defined in the Bison parser implementation file
+itself begin with @samp{yy} or @samp{YY}.  This includes interface
+functions such as the lexical analyzer function @code{yylex}, the
+error reporting function @code{yyerror} and the parser function
+@code{yyparse} itself.  This also includes numerous identifiers used
+for internal purposes.  Therefore, you should avoid using C
+identifiers starting with @samp{yy} or @samp{YY} in the Bison grammar
+file except for the ones defined in this manual.  Also, you should
+avoid using the C identifiers @samp{malloc} and @samp{free} for
+anything other than their usual meanings.
+
+In some cases the Bison parser implementation file includes system
+headers, and in those cases your code should respect the identifiers
+reserved by those headers.  On some non-GNU hosts, @code{<alloca.h>},
+@code{<malloc.h>}, @code{<stddef.h>}, and @code{<stdlib.h>} are
+included as needed to declare memory allocators and related types.
+@code{<libintl.h>} is included if message translation is in use
+(@pxref{Internationalization}).  Other system headers may be included
+if you define @code{YYDEBUG} to a nonzero value (@pxref{Tracing,
+,Tracing Your Parser}).
+
+@node Stages
+@section Stages in Using Bison
+@cindex stages in using Bison
+@cindex using Bison
+
+The actual language-design process using Bison, from grammar specification
+to a working compiler or interpreter, has these parts:
+
+@enumerate
+@item
+Formally specify the grammar in a form recognized by Bison
+(@pxref{Grammar File, ,Bison Grammar Files}).  For each grammatical rule
+in the language, describe the action that is to be taken when an
+instance of that rule is recognized.  The action is described by a
+sequence of C statements.
+
+@item
+Write a lexical analyzer to process input and pass tokens to the parser.
+The lexical analyzer may be written by hand in C (@pxref{Lexical, ,The
+Lexical Analyzer Function @code{yylex}}).  It could also be produced
+using Lex, but the use of Lex is not discussed in this manual.
+
+@item
+Write a controlling function that calls the Bison-produced parser.
+
+@item
+Write error-reporting routines.
+@end enumerate
+
+To turn this source code as written into a runnable program, you
+must follow these steps:
+
+@enumerate
+@item
+Run Bison on the grammar to produce the parser.
+
+@item
+Compile the code output by Bison, as well as any other source files.
+
+@item
+Link the object files to produce the finished product.
+@end enumerate
+
+@node Grammar Layout
+@section The Overall Layout of a Bison Grammar
+@cindex grammar file
+@cindex file format
+@cindex format of grammar file
+@cindex layout of Bison grammar
+
+The input file for the Bison utility is a @dfn{Bison grammar file}.  The
+general form of a Bison grammar file is as follows:
+
+@example
+%@{
+@var{Prologue}
+%@}
+
+@var{Bison declarations}
+
+%%
+@var{Grammar rules}
+%%
+@var{Epilogue}
+@end example
+
+@noindent
+The @samp{%%}, @samp{%@{} and @samp{%@}} are punctuation that appears
+in every Bison grammar file to separate the sections.
+
+The prologue may define types and variables used in the actions.  You can
+also use preprocessor commands to define macros used there, and use
+@code{#include} to include header files that do any of these things.
+You need to declare the lexical analyzer @code{yylex} and the error
+printer @code{yyerror} here, along with any other global identifiers
+used by the actions in the grammar rules.
+
+The Bison declarations declare the names of the terminal and nonterminal
+symbols, and may also describe operator precedence and the data types of
+semantic values of various symbols.
+
+The grammar rules define how to construct each nonterminal symbol from its
+parts.
+
+The epilogue can contain any code you want to use.  Often the
+definitions of functions declared in the prologue go here.  In a
+simple program, all the rest of the program can go here.
+
+@node Examples
+@chapter Examples
+@cindex simple examples
+@cindex examples, simple
+
+Now we show and explain several sample programs written using Bison: a
+reverse polish notation calculator, an algebraic (infix) notation
+calculator --- later extended to track ``locations'' ---
+and a multi-function calculator.  All
+produce usable, though limited, interactive desk-top calculators.
+
+These examples are simple, but Bison grammars for real programming
+languages are written the same way.  You can copy these examples into a
+source file to try them.
+
+@menu
+* RPN Calc::               Reverse polish notation calculator;
+                             a first example with no operator precedence.
+* Infix Calc::             Infix (algebraic) notation calculator.
+                             Operator precedence is introduced.
+* Simple Error Recovery::  Continuing after syntax errors.
+* Location Tracking Calc:: Demonstrating the use of @@@var{n} and @@$.
+* Multi-function Calc::    Calculator with memory and trig functions.
+                             It uses multiple data-types for semantic values.
+* Exercises::              Ideas for improving the multi-function calculator.
+@end menu
+
+@node RPN Calc
+@section Reverse Polish Notation Calculator
+@cindex reverse polish notation
+@cindex polish notation calculator
+@cindex @code{rpcalc}
+@cindex calculator, simple
+
+The first example is that of a simple double-precision @dfn{reverse polish
+notation} calculator (a calculator using postfix operators).  This example
+provides a good starting point, since operator precedence is not an issue.
+The second example will illustrate how operator precedence is handled.
+
+The source code for this calculator is named @file{rpcalc.y}.  The
+@samp{.y} extension is a convention used for Bison grammar files.
+
+@menu
+* Rpcalc Declarations::    Prologue (declarations) for rpcalc.
+* Rpcalc Rules::           Grammar Rules for rpcalc, with explanation.
+* Rpcalc Lexer::           The lexical analyzer.
+* Rpcalc Main::            The controlling function.
+* Rpcalc Error::           The error reporting function.
+* Rpcalc Generate::        Running Bison on the grammar file.
+* Rpcalc Compile::         Run the C compiler on the output code.
+@end menu
+
+@node Rpcalc Declarations
+@subsection Declarations for @code{rpcalc}
+
+Here are the C and Bison declarations for the reverse polish notation
+calculator.  As in C, comments are placed between @samp{/*@dots{}*/}.
+
+@example
+/* Reverse polish notation calculator.  */
+
+%@{
+  #define YYSTYPE double
+  #include <math.h>
+  int yylex (void);
+  void yyerror (char const *);
+%@}
+
+%token NUM
+
+%% /* Grammar rules and actions follow.  */
+@end example
+
+The declarations section (@pxref{Prologue, , The prologue}) contains two
+preprocessor directives and two forward declarations.
+
+The @code{#define} directive defines the macro @code{YYSTYPE}, thus
+specifying the C data type for semantic values of both tokens and
+groupings (@pxref{Value Type, ,Data Types of Semantic Values}).  The
+Bison parser will use whatever type @code{YYSTYPE} is defined as; if you
+don't define it, @code{int} is the default.  Because we specify
+@code{double}, each token and each expression has an associated value,
+which is a floating point number.
+
+The @code{#include} directive is used to declare the exponentiation
+function @code{pow}.
+
+The forward declarations for @code{yylex} and @code{yyerror} are
+needed because the C language requires that functions be declared
+before they are used.  These functions will be defined in the
+epilogue, but the parser calls them so they must be declared in the
+prologue.
+
+The second section, Bison declarations, provides information to Bison
+about the token types (@pxref{Bison Declarations, ,The Bison
+Declarations Section}).  Each terminal symbol that is not a
+single-character literal must be declared here.  (Single-character
+literals normally don't need to be declared.)  In this example, all the
+arithmetic operators are designated by single-character literals, so the
+only terminal symbol that needs to be declared is @code{NUM}, the token
+type for numeric constants.
+
+@node Rpcalc Rules
+@subsection Grammar Rules for @code{rpcalc}
+
+Here are the grammar rules for the reverse polish notation calculator.
+
+@example
+@group
+input:
+  /* empty */
+| input line
+;
+@end group
+
+@group
+line:
+  '\n'
+| exp '\n'      @{ printf ("%.10g\n", $1); @}
+;
+@end group
+
+@group
+exp:
+  NUM           @{ $$ = $1;           @}
+| exp exp '+'   @{ $$ = $1 + $2;      @}
+| exp exp '-'   @{ $$ = $1 - $2;      @}
+| exp exp '*'   @{ $$ = $1 * $2;      @}
+| exp exp '/'   @{ $$ = $1 / $2;      @}
+| exp exp '^'   @{ $$ = pow ($1, $2); @}  /* Exponentiation */
+| exp 'n'       @{ $$ = -$1;          @}  /* Unary minus    */
+;
+@end group
+%%
+@end example
+
+The groupings of the rpcalc ``language'' defined here are the expression
+(given the name @code{exp}), the line of input (@code{line}), and the
+complete input transcript (@code{input}).  Each of these nonterminal
+symbols has several alternate rules, joined by the vertical bar @samp{|}
+which is read as ``or''.  The following sections explain what these rules
+mean.
+
+The semantics of the language is determined by the actions taken when a
+grouping is recognized.  The actions are the C code that appears inside
+braces.  @xref{Actions}.
+
+You must specify these actions in C, but Bison provides the means for
+passing semantic values between the rules.  In each action, the
+pseudo-variable @code{$$} stands for the semantic value for the grouping
+that the rule is going to construct.  Assigning a value to @code{$$} is the
+main job of most actions.  The semantic values of the components of the
+rule are referred to as @code{$1}, @code{$2}, and so on.
+
+@menu
+* Rpcalc Input::
+* Rpcalc Line::
+* Rpcalc Expr::
+@end menu
+
+@node Rpcalc Input
+@subsubsection Explanation of @code{input}
+
+Consider the definition of @code{input}:
+
+@example
+input:
+  /* empty */
+| input line
+;
+@end example
+
+This definition reads as follows: ``A complete input is either an empty
+string, or a complete input followed by an input line''.  Notice that
+``complete input'' is defined in terms of itself.  This definition is said
+to be @dfn{left recursive} since @code{input} appears always as the
+leftmost symbol in the sequence.  @xref{Recursion, ,Recursive Rules}.
+
+The first alternative is empty because there are no symbols between the
+colon and the first @samp{|}; this means that @code{input} can match an
+empty string of input (no tokens).  We write the rules this way because it
+is legitimate to type @kbd{Ctrl-d} right after you start the calculator.
+It's conventional to put an empty alternative first and write the comment
+@samp{/* empty */} in it.
+
+The second alternate rule (@code{input line}) handles all nontrivial input.
+It means, ``After reading any number of lines, read one more line if
+possible.''  The left recursion makes this rule into a loop.  Since the
+first alternative matches empty input, the loop can be executed zero or
+more times.
+
+The parser function @code{yyparse} continues to process input until a
+grammatical error is seen or the lexical analyzer says there are no more
+input tokens; we will arrange for the latter to happen at end-of-input.
+
+@node Rpcalc Line
+@subsubsection Explanation of @code{line}
+
+Now consider the definition of @code{line}:
+
+@example
+line:
+  '\n'
+| exp '\n'  @{ printf ("%.10g\n", $1); @}
+;
+@end example
+
+The first alternative is a token which is a newline character; this means
+that rpcalc accepts a blank line (and ignores it, since there is no
+action).  The second alternative is an expression followed by a newline.
+This is the alternative that makes rpcalc useful.  The semantic value of
+the @code{exp} grouping is the value of @code{$1} because the @code{exp} in
+question is the first symbol in the alternative.  The action prints this
+value, which is the result of the computation the user asked for.
+
+This action is unusual because it does not assign a value to @code{$$}.  As
+a consequence, the semantic value associated with the @code{line} is
+uninitialized (its value will be unpredictable).  This would be a bug if
+that value were ever used, but we don't use it: once rpcalc has printed the
+value of the user's input line, that value is no longer needed.
+
+@node Rpcalc Expr
+@subsubsection Explanation of @code{expr}
+
+The @code{exp} grouping has several rules, one for each kind of expression.
+The first rule handles the simplest expressions: those that are just numbers.
+The second handles an addition-expression, which looks like two expressions
+followed by a plus-sign.  The third handles subtraction, and so on.
+
+@example
+exp:
+  NUM
+| exp exp '+'     @{ $$ = $1 + $2;    @}
+| exp exp '-'     @{ $$ = $1 - $2;    @}
+@dots{}
+;
+@end example
+
+We have used @samp{|} to join all the rules for @code{exp}, but we could
+equally well have written them separately:
+
+@example
+exp: NUM ;
+exp: exp exp '+'     @{ $$ = $1 + $2; @};
+exp: exp exp '-'     @{ $$ = $1 - $2; @};
+@dots{}
+@end example
+
+Most of the rules have actions that compute the value of the expression in
+terms of the value of its parts.  For example, in the rule for addition,
+@code{$1} refers to the first component @code{exp} and @code{$2} refers to
+the second one.  The third component, @code{'+'}, has no meaningful
+associated semantic value, but if it had one you could refer to it as
+@code{$3}.  When @code{yyparse} recognizes a sum expression using this
+rule, the sum of the two subexpressions' values is produced as the value of
+the entire expression.  @xref{Actions}.
+
+You don't have to give an action for every rule.  When a rule has no
+action, Bison by default copies the value of @code{$1} into @code{$$}.
+This is what happens in the first rule (the one that uses @code{NUM}).
+
+The formatting shown here is the recommended convention, but Bison does
+not require it.  You can add or change white space as much as you wish.
+For example, this:
+
+@example
+exp: NUM | exp exp '+' @{$$ = $1 + $2; @} | @dots{} ;
+@end example
+
+@noindent
+means the same thing as this:
+
+@example
+exp:
+  NUM
+| exp exp '+'    @{ $$ = $1 + $2; @}
+| @dots{}
+;
+@end example
+
+@noindent
+The latter, however, is much more readable.
+
+@node Rpcalc Lexer
+@subsection The @code{rpcalc} Lexical Analyzer
+@cindex writing a lexical analyzer
+@cindex lexical analyzer, writing
+
+The lexical analyzer's job is low-level parsing: converting characters
+or sequences of characters into tokens.  The Bison parser gets its
+tokens by calling the lexical analyzer.  @xref{Lexical, ,The Lexical
+Analyzer Function @code{yylex}}.
+
+Only a simple lexical analyzer is needed for the RPN
+calculator.  This
+lexical analyzer skips blanks and tabs, then reads in numbers as
+@code{double} and returns them as @code{NUM} tokens.  Any other character
+that isn't part of a number is a separate token.  Note that the token-code
+for such a single-character token is the character itself.
+
+The return value of the lexical analyzer function is a numeric code which
+represents a token type.  The same text used in Bison rules to stand for
+this token type is also a C expression for the numeric code for the type.
+This works in two ways.  If the token type is a character literal, then its
+numeric code is that of the character; you can use the same
+character literal in the lexical analyzer to express the number.  If the
+token type is an identifier, that identifier is defined by Bison as a C
+macro whose definition is the appropriate number.  In this example,
+therefore, @code{NUM} becomes a macro for @code{yylex} to use.
+
+The semantic value of the token (if it has one) is stored into the
+global variable @code{yylval}, which is where the Bison parser will look
+for it.  (The C data type of @code{yylval} is @code{YYSTYPE}, which was
+defined at the beginning of the grammar; @pxref{Rpcalc Declarations,
+,Declarations for @code{rpcalc}}.)
+
+A token type code of zero is returned if the end-of-input is encountered.
+(Bison recognizes any nonpositive value as indicating end-of-input.)
+
+Here is the code for the lexical analyzer:
+
+@example
+@group
+/* The lexical analyzer returns a double floating point
+   number on the stack and the token NUM, or the numeric code
+   of the character read if not a number.  It skips all blanks
+   and tabs, and returns 0 for end-of-input.  */
+
+#include <ctype.h>
+@end group
+
+@group
+int
+yylex (void)
+@{
+  int c;
+
+  /* Skip white space.  */
+  while ((c = getchar ()) == ' ' || c == '\t')
+    continue;
+@end group
+@group
+  /* Process numbers.  */
+  if (c == '.' || isdigit (c))
+    @{
+      ungetc (c, stdin);
+      scanf ("%lf", &yylval);
+      return NUM;
+    @}
+@end group
+@group
+  /* Return end-of-input.  */
+  if (c == EOF)
+    return 0;
+  /* Return a single char.  */
+  return c;
+@}
+@end group
+@end example
+
+@node Rpcalc Main
+@subsection The Controlling Function
+@cindex controlling function
+@cindex main function in simple example
+
+In keeping with the spirit of this example, the controlling function is
+kept to the bare minimum.  The only requirement is that it call
+@code{yyparse} to start the process of parsing.
+
+@example
+@group
+int
+main (void)
+@{
+  return yyparse ();
+@}
+@end group
+@end example
+
+@node Rpcalc Error
+@subsection The Error Reporting Routine
+@cindex error reporting routine
+
+When @code{yyparse} detects a syntax error, it calls the error reporting
+function @code{yyerror} to print an error message (usually but not
+always @code{"syntax error"}).  It is up to the programmer to supply
+@code{yyerror} (@pxref{Interface, ,Parser C-Language Interface}), so
+here is the definition we will use:
+
+@example
+@group
+#include <stdio.h>
+@end group
+
+@group
+/* Called by yyparse on error.  */
+void
+yyerror (char const *s)
+@{
+  fprintf (stderr, "%s\n", s);
+@}
+@end group
+@end example
+
+After @code{yyerror} returns, the Bison parser may recover from the error
+and continue parsing if the grammar contains a suitable error rule
+(@pxref{Error Recovery}).  Otherwise, @code{yyparse} returns nonzero.  We
+have not written any error rules in this example, so any invalid input will
+cause the calculator program to exit.  This is not clean behavior for a
+real calculator, but it is adequate for the first example.
+
+@node Rpcalc Generate
+@subsection Running Bison to Make the Parser
+@cindex running Bison (introduction)
+
+Before running Bison to produce a parser, we need to decide how to
+arrange all the source code in one or more source files.  For such a
+simple example, the easiest thing is to put everything in one file,
+the grammar file.  The definitions of @code{yylex}, @code{yyerror} and
+@code{main} go at the end, in the epilogue of the grammar file
+(@pxref{Grammar Layout, ,The Overall Layout of a Bison Grammar}).
+
+For a large project, you would probably have several source files, and use
+@code{make} to arrange to recompile them.
+
+With all the source in the grammar file, you use the following command
+to convert it into a parser implementation file:
+
+@example
+bison @var{file}.y
+@end example
+
+@noindent
+In this example, the grammar file is called @file{rpcalc.y} (for
+``Reverse Polish @sc{calc}ulator'').  Bison produces a parser
+implementation file named @file{@var{file}.tab.c}, removing the
+@samp{.y} from the grammar file name.  The parser implementation file
+contains the source code for @code{yyparse}.  The additional functions
+in the grammar file (@code{yylex}, @code{yyerror} and @code{main}) are
+copied verbatim to the parser implementation file.
+
+@node Rpcalc Compile
+@subsection Compiling the Parser Implementation File
+@cindex compiling the parser
+
+Here is how to compile and run the parser implementation file:
+
+@example
+@group
+# @r{List files in current directory.}
+$ @kbd{ls}
+rpcalc.tab.c  rpcalc.y
+@end group
+
+@group
+# @r{Compile the Bison parser.}
+# @r{@samp{-lm} tells compiler to search math library for @code{pow}.}
+$ @kbd{cc -lm -o rpcalc rpcalc.tab.c}
+@end group
+
+@group
+# @r{List files again.}
+$ @kbd{ls}
+rpcalc  rpcalc.tab.c  rpcalc.y
+@end group
+@end example
+
+The file @file{rpcalc} now contains the executable code.  Here is an
+example session using @code{rpcalc}.
+
+@example
+$ @kbd{rpcalc}
+@kbd{4 9 +}
+13
+@kbd{3 7 + 3 4 5 *+-}
+-13
+@kbd{3 7 + 3 4 5 * + - n}              @r{Note the unary minus, @samp{n}}
+13
+@kbd{5 6 / 4 n +}
+-3.166666667
+@kbd{3 4 ^}                            @r{Exponentiation}
+81
+@kbd{^D}                               @r{End-of-file indicator}
+$
+@end example
+
+@node Infix Calc
+@section Infix Notation Calculator: @code{calc}
+@cindex infix notation calculator
+@cindex @code{calc}
+@cindex calculator, infix notation
+
+We now modify rpcalc to handle infix operators instead of postfix.  Infix
+notation involves the concept of operator precedence and the need for
+parentheses nested to arbitrary depth.  Here is the Bison code for
+@file{calc.y}, an infix desk-top calculator.
+
+@example
+/* Infix notation calculator.  */
+
+@group
+%@{
+  #define YYSTYPE double
+  #include <math.h>
+  #include <stdio.h>
+  int yylex (void);
+  void yyerror (char const *);
+%@}
+@end group
+
+@group
+/* Bison declarations.  */
+%token NUM
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation */
+@end group
+
+%% /* The grammar follows.  */
+@group
+input:
+  /* empty */
+| input line
+;
+@end group
+
+@group
+line:
+  '\n'
+| exp '\n'  @{ printf ("\t%.10g\n", $1); @}
+;
+@end group
+
+@group
+exp:
+  NUM                @{ $$ = $1;           @}
+| exp '+' exp        @{ $$ = $1 + $3;      @}
+| exp '-' exp        @{ $$ = $1 - $3;      @}
+| exp '*' exp        @{ $$ = $1 * $3;      @}
+| exp '/' exp        @{ $$ = $1 / $3;      @}
+| '-' exp  %prec NEG @{ $$ = -$2;          @}
+| exp '^' exp        @{ $$ = pow ($1, $3); @}
+| '(' exp ')'        @{ $$ = $2;           @}
+;
+@end group
+%%
+@end example
+
+@noindent
+The functions @code{yylex}, @code{yyerror} and @code{main} can be the
+same as before.
+
+There are two important new features shown in this code.
+
+In the second section (Bison declarations), @code{%left} declares token
+types and says they are left-associative operators.  The declarations
+@code{%left} and @code{%right} (right associativity) take the place of
+@code{%token} which is used to declare a token type name without
+associativity.  (These tokens are single-character literals, which
+ordinarily don't need to be declared.  We declare them here to specify
+the associativity.)
+
+Operator precedence is determined by the line ordering of the
+declarations; the higher the line number of the declaration (lower on
+the page or screen), the higher the precedence.  Hence, exponentiation
+has the highest precedence, unary minus (@code{NEG}) is next, followed
+by @samp{*} and @samp{/}, and so on.  @xref{Precedence, ,Operator
+Precedence}.
+
+The other important new feature is the @code{%prec} in the grammar
+section for the unary minus operator.  The @code{%prec} simply instructs
+Bison that the rule @samp{| '-' exp} has the same precedence as
+@code{NEG}---in this case the next-to-highest.  @xref{Contextual
+Precedence, ,Context-Dependent Precedence}.
+
+Here is a sample run of @file{calc.y}:
+
+@need 500
+@example
+$ @kbd{calc}
+@kbd{4 + 4.5 - (34/(8*3+-3))}
+6.880952381
+@kbd{-56 + 2}
+-54
+@kbd{3 ^ 2}
+9
+@end example
+
+@node Simple Error Recovery
+@section Simple Error Recovery
+@cindex error recovery, simple
+
+Up to this point, this manual has not addressed the issue of @dfn{error
+recovery}---how to continue parsing after the parser detects a syntax
+error.  All we have handled is error reporting with @code{yyerror}.
+Recall that by default @code{yyparse} returns after calling
+@code{yyerror}.  This means that an erroneous input line causes the
+calculator program to exit.  Now we show how to rectify this deficiency.
+
+The Bison language itself includes the reserved word @code{error}, which
+may be included in the grammar rules.  In the example below it has
+been added to one of the alternatives for @code{line}:
+
+@example
+@group
+line:
+  '\n'
+| exp '\n'   @{ printf ("\t%.10g\n", $1); @}
+| error '\n' @{ yyerrok;                  @}
+;
+@end group
+@end example
+
+This addition to the grammar allows for simple error recovery in the
+event of a syntax error.  If an expression that cannot be evaluated is
+read, the error will be recognized by the third rule for @code{line},
+and parsing will continue.  (The @code{yyerror} function is still called
+upon to print its message as well.)  The action executes the statement
+@code{yyerrok}, a macro defined automatically by Bison; its meaning is
+that error recovery is complete (@pxref{Error Recovery}).  Note the
+difference between @code{yyerrok} and @code{yyerror}; neither one is a
+misprint.
+
+This form of error recovery deals with syntax errors.  There are other
+kinds of errors; for example, division by zero, which raises an exception
+signal that is normally fatal.  A real calculator program must handle this
+signal and use @code{longjmp} to return to @code{main} and resume parsing
+input lines; it would also have to discard the rest of the current line of
+input.  We won't discuss this issue further because it is not specific to
+Bison programs.
+
+@node Location Tracking Calc
+@section Location Tracking Calculator: @code{ltcalc}
+@cindex location tracking calculator
+@cindex @code{ltcalc}
+@cindex calculator, location tracking
+
+This example extends the infix notation calculator with location
+tracking.  This feature will be used to improve the error messages.  For
+the sake of clarity, this example is a simple integer calculator, since
+most of the work needed to use locations will be done in the lexical
+analyzer.
+
+@menu
+* Ltcalc Declarations::    Bison and C declarations for ltcalc.
+* Ltcalc Rules::           Grammar rules for ltcalc, with explanations.
+* Ltcalc Lexer::           The lexical analyzer.
+@end menu
+
+@node Ltcalc Declarations
+@subsection Declarations for @code{ltcalc}
+
+The C and Bison declarations for the location tracking calculator are
+the same as the declarations for the infix notation calculator.
+
+@example
+/* Location tracking calculator.  */
+
+%@{
+  #define YYSTYPE int
+  #include <math.h>
+  int yylex (void);
+  void yyerror (char const *);
+%@}
+
+/* Bison declarations.  */
+%token NUM
+
+%left '-' '+'
+%left '*' '/'
+%left NEG
+%right '^'
+
+%% /* The grammar follows.  */
+@end example
+
+@noindent
+Note there are no declarations specific to locations.  Defining a data
+type for storing locations is not needed: we will use the type provided
+by default (@pxref{Location Type, ,Data Types of Locations}), which is a
+four member structure with the following integer fields:
+@code{first_line}, @code{first_column}, @code{last_line} and
+@code{last_column}.  By conventions, and in accordance with the GNU
+Coding Standards and common practice, the line and column count both
+start at 1.
+
+@node Ltcalc Rules
+@subsection Grammar Rules for @code{ltcalc}
+
+Whether handling locations or not has no effect on the syntax of your
+language.  Therefore, grammar rules for this example will be very close
+to those of the previous example: we will only modify them to benefit
+from the new information.
+
+Here, we will use locations to report divisions by zero, and locate the
+wrong expressions or subexpressions.
+
+@example
+@group
+input:
+  /* empty */
+| input line
+;
+@end group
+
+@group
+line:
+  '\n'
+| exp '\n' @{ printf ("%d\n", $1); @}
+;
+@end group
+
+@group
+exp:
+  NUM           @{ $$ = $1; @}
+| exp '+' exp   @{ $$ = $1 + $3; @}
+| exp '-' exp   @{ $$ = $1 - $3; @}
+| exp '*' exp   @{ $$ = $1 * $3; @}
+@end group
+@group
+| exp '/' exp
+    @{
+      if ($3)
+        $$ = $1 / $3;
+      else
+        @{
+          $$ = 1;
+          fprintf (stderr, "%d.%d-%d.%d: division by zero",
+                   @@3.first_line, @@3.first_column,
+                   @@3.last_line, @@3.last_column);
+        @}
+    @}
+@end group
+@group
+| '-' exp %prec NEG     @{ $$ = -$2; @}
+| exp '^' exp           @{ $$ = pow ($1, $3); @}
+| '(' exp ')'           @{ $$ = $2; @}
+@end group
+@end example
+
+This code shows how to reach locations inside of semantic actions, by
+using the pseudo-variables @code{@@@var{n}} for rule components, and the
+pseudo-variable @code{@@$} for groupings.
+
+We don't need to assign a value to @code{@@$}: the output parser does it
+automatically.  By default, before executing the C code of each action,
+@code{@@$} is set to range from the beginning of @code{@@1} to the end
+of @code{@@@var{n}}, for a rule with @var{n} components.  This behavior
+can be redefined (@pxref{Location Default Action, , Default Action for
+Locations}), and for very specific rules, @code{@@$} can be computed by
+hand.
+
+@node Ltcalc Lexer
+@subsection The @code{ltcalc} Lexical Analyzer.
+
+Until now, we relied on Bison's defaults to enable location
+tracking.  The next step is to rewrite the lexical analyzer, and make it
+able to feed the parser with the token locations, as it already does for
+semantic values.
+
+To this end, we must take into account every single character of the
+input text, to avoid the computed locations of being fuzzy or wrong:
+
+@example
+@group
+int
+yylex (void)
+@{
+  int c;
+@end group
+
+@group
+  /* Skip white space.  */
+  while ((c = getchar ()) == ' ' || c == '\t')
+    ++yylloc.last_column;
+@end group
+
+@group
+  /* Step.  */
+  yylloc.first_line = yylloc.last_line;
+  yylloc.first_column = yylloc.last_column;
+@end group
+
+@group
+  /* Process numbers.  */
+  if (isdigit (c))
+    @{
+      yylval = c - '0';
+      ++yylloc.last_column;
+      while (isdigit (c = getchar ()))
+        @{
+          ++yylloc.last_column;
+          yylval = yylval * 10 + c - '0';
+        @}
+      ungetc (c, stdin);
+      return NUM;
+    @}
+@end group
+
+  /* Return end-of-input.  */
+  if (c == EOF)
+    return 0;
+
+@group
+  /* Return a single char, and update location.  */
+  if (c == '\n')
+    @{
+      ++yylloc.last_line;
+      yylloc.last_column = 0;
+    @}
+  else
+    ++yylloc.last_column;
+  return c;
+@}
+@end group
+@end example
+
+Basically, the lexical analyzer performs the same processing as before:
+it skips blanks and tabs, and reads numbers or single-character tokens.
+In addition, it updates @code{yylloc}, the global variable (of type
+@code{YYLTYPE}) containing the token's location.
+
+Now, each time this function returns a token, the parser has its number
+as well as its semantic value, and its location in the text.  The last
+needed change is to initialize @code{yylloc}, for example in the
+controlling function:
+
+@example
+@group
+int
+main (void)
+@{
+  yylloc.first_line = yylloc.last_line = 1;
+  yylloc.first_column = yylloc.last_column = 0;
+  return yyparse ();
+@}
+@end group
+@end example
+
+Remember that computing locations is not a matter of syntax.  Every
+character must be associated to a location update, whether it is in
+valid input, in comments, in literal strings, and so on.
+
+@node Multi-function Calc
+@section Multi-Function Calculator: @code{mfcalc}
+@cindex multi-function calculator
+@cindex @code{mfcalc}
+@cindex calculator, multi-function
+
+Now that the basics of Bison have been discussed, it is time to move on to
+a more advanced problem.  The above calculators provided only five
+functions, @samp{+}, @samp{-}, @samp{*}, @samp{/} and @samp{^}.  It would
+be nice to have a calculator that provides other mathematical functions such
+as @code{sin}, @code{cos}, etc.
+
+It is easy to add new operators to the infix calculator as long as they are
+only single-character literals.  The lexical analyzer @code{yylex} passes
+back all nonnumeric characters as tokens, so new grammar rules suffice for
+adding a new operator.  But we want something more flexible: built-in
+functions whose syntax has this form:
+
+@example
+@var{function_name} (@var{argument})
+@end example
+
+@noindent
+At the same time, we will add memory to the calculator, by allowing you
+to create named variables, store values in them, and use them later.
+Here is a sample session with the multi-function calculator:
+
+@example
+$ @kbd{mfcalc}
+@kbd{pi = 3.141592653589}
+3.1415926536
+@kbd{sin(pi)}
+0.0000000000
+@kbd{alpha = beta1 = 2.3}
+2.3000000000
+@kbd{alpha}
+2.3000000000
+@kbd{ln(alpha)}
+0.8329091229
+@kbd{exp(ln(beta1))}
+2.3000000000
+$
+@end example
+
+Note that multiple assignment and nested function calls are permitted.
+
+@menu
+* Mfcalc Declarations::    Bison declarations for multi-function calculator.
+* Mfcalc Rules::           Grammar rules for the calculator.
+* Mfcalc Symbol Table::    Symbol table management subroutines.
+@end menu
+
+@node Mfcalc Declarations
+@subsection Declarations for @code{mfcalc}
+
+Here are the C and Bison declarations for the multi-function calculator.
+
+@comment file: mfcalc.y: 1
+@example
+@group
+%@{
+  #include <math.h>  /* For math functions, cos(), sin(), etc.  */
+  #include "calc.h"  /* Contains definition of `symrec'.  */
+  int yylex (void);
+  void yyerror (char const *);
+%@}
+@end group
+
+@group
+%union @{
+  double    val;   /* For returning numbers.  */
+  symrec  *tptr;   /* For returning symbol-table pointers.  */
+@}
+@end group
+%token <val>  NUM        /* Simple double precision number.  */
+%token <tptr> VAR FNCT   /* Variable and function.  */
+%type  <val>  exp
+
+@group
+%right '='
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation */
+@end group
+@end example
+
+The above grammar introduces only two new features of the Bison language.
+These features allow semantic values to have various data types
+(@pxref{Multiple Types, ,More Than One Value Type}).
+
+The @code{%union} declaration specifies the entire list of possible types;
+this is instead of defining @code{YYSTYPE}.  The allowable types are now
+double-floats (for @code{exp} and @code{NUM}) and pointers to entries in
+the symbol table.  @xref{Union Decl, ,The Collection of Value Types}.
+
+Since values can now have various types, it is necessary to associate a
+type with each grammar symbol whose semantic value is used.  These symbols
+are @code{NUM}, @code{VAR}, @code{FNCT}, and @code{exp}.  Their
+declarations are augmented with information about their data type (placed
+between angle brackets).
+
+The Bison construct @code{%type} is used for declaring nonterminal
+symbols, just as @code{%token} is used for declaring token types.  We
+have not used @code{%type} before because nonterminal symbols are
+normally declared implicitly by the rules that define them.  But
+@code{exp} must be declared explicitly so we can specify its value type.
+@xref{Type Decl, ,Nonterminal Symbols}.
+
+@node Mfcalc Rules
+@subsection Grammar Rules for @code{mfcalc}
+
+Here are the grammar rules for the multi-function calculator.
+Most of them are copied directly from @code{calc}; three rules,
+those which mention @code{VAR} or @code{FNCT}, are new.
+
+@comment file: mfcalc.y: 3
+@example
+%% /* The grammar follows.  */
+@group
+input:
+  /* empty */
+| input line
+;
+@end group
+
+@group
+line:
+  '\n'
+| exp '\n'   @{ printf ("%.10g\n", $1); @}
+| error '\n' @{ yyerrok;                @}
+;
+@end group
+
+@group
+exp:
+  NUM                @{ $$ = $1;                         @}
+| VAR                @{ $$ = $1->value.var;              @}
+| VAR '=' exp        @{ $$ = $3; $1->value.var = $3;     @}
+| FNCT '(' exp ')'   @{ $$ = (*($1->value.fnctptr))($3); @}
+| exp '+' exp        @{ $$ = $1 + $3;                    @}
+| exp '-' exp        @{ $$ = $1 - $3;                    @}
+| exp '*' exp        @{ $$ = $1 * $3;                    @}
+| exp '/' exp        @{ $$ = $1 / $3;                    @}
+| '-' exp  %prec NEG @{ $$ = -$2;                        @}
+| exp '^' exp        @{ $$ = pow ($1, $3);               @}
+| '(' exp ')'        @{ $$ = $2;                         @}
+;
+@end group
+/* End of grammar.  */
+%%
+@end example
+
+@node Mfcalc Symbol Table
+@subsection The @code{mfcalc} Symbol Table
+@cindex symbol table example
+
+The multi-function calculator requires a symbol table to keep track of the
+names and meanings of variables and functions.  This doesn't affect the
+grammar rules (except for the actions) or the Bison declarations, but it
+requires some additional C functions for support.
+
+The symbol table itself consists of a linked list of records.  Its
+definition, which is kept in the header @file{calc.h}, is as follows.  It
+provides for either functions or variables to be placed in the table.
+
+@comment file: calc.h
+@example
+@group
+/* Function type.  */
+typedef double (*func_t) (double);
+@end group
+
+@group
+/* Data type for links in the chain of symbols.  */
+struct symrec
+@{
+  char *name;  /* name of symbol */
+  int type;    /* type of symbol: either VAR or FNCT */
+  union
+  @{
+    double var;      /* value of a VAR */
+    func_t fnctptr;  /* value of a FNCT */
+  @} value;
+  struct symrec *next;  /* link field */
+@};
+@end group
+
+@group
+typedef struct symrec symrec;
+
+/* The symbol table: a chain of `struct symrec'.  */
+extern symrec *sym_table;
+
+symrec *putsym (char const *, int);
+symrec *getsym (char const *);
+@end group
+@end example
+
+The new version of @code{main} includes a call to @code{init_table}, a
+function that initializes the symbol table.  Here it is, and
+@code{init_table} as well:
+
+@comment file: mfcalc.y: 3
+@example
+#include <stdio.h>
+
+@group
+/* Called by yyparse on error.  */
+void
+yyerror (char const *s)
+@{
+  fprintf (stderr, "%s\n", s);
+@}
+@end group
+
+@group
+struct init
+@{
+  char const *fname;
+  double (*fnct) (double);
+@};
+@end group
+
+@group
+struct init const arith_fncts[] =
+@{
+  "sin",  sin,
+  "cos",  cos,
+  "atan", atan,
+  "ln",   log,
+  "exp",  exp,
+  "sqrt", sqrt,
+  0, 0
+@};
+@end group
+
+@group
+/* The symbol table: a chain of `struct symrec'.  */
+symrec *sym_table;
+@end group
+
+@group
+/* Put arithmetic functions in table.  */
+void
+init_table (void)
+@{
+  int i;
+  for (i = 0; arith_fncts[i].fname != 0; i++)
+    @{
+      symrec *ptr = putsym (arith_fncts[i].fname, FNCT);
+      ptr->value.fnctptr = arith_fncts[i].fnct;
+    @}
+@}
+@end group
+
+@group
+int
+main (void)
+@{
+  init_table ();
+  return yyparse ();
+@}
+@end group
+@end example
+
+By simply editing the initialization list and adding the necessary include
+files, you can add additional functions to the calculator.
+
+Two important functions allow look-up and installation of symbols in the
+symbol table.  The function @code{putsym} is passed a name and the type
+(@code{VAR} or @code{FNCT}) of the object to be installed.  The object is
+linked to the front of the list, and a pointer to the object is returned.
+The function @code{getsym} is passed the name of the symbol to look up.  If
+found, a pointer to that symbol is returned; otherwise zero is returned.
+
+@comment file: mfcalc.y: 3
+@example
+#include <stdlib.h> /* malloc. */
+#include <string.h> /* strlen. */
+
+@group
+symrec *
+putsym (char const *sym_name, int sym_type)
+@{
+  symrec *ptr = (symrec *) malloc (sizeof (symrec));
+  ptr->name = (char *) malloc (strlen (sym_name) + 1);
+  strcpy (ptr->name,sym_name);
+  ptr->type = sym_type;
+  ptr->value.var = 0; /* Set value to 0 even if fctn.  */
+  ptr->next = (struct symrec *)sym_table;
+  sym_table = ptr;
+  return ptr;
+@}
+@end group
+
+@group
+symrec *
+getsym (char const *sym_name)
+@{
+  symrec *ptr;
+  for (ptr = sym_table; ptr != (symrec *) 0;
+       ptr = (symrec *)ptr->next)
+    if (strcmp (ptr->name,sym_name) == 0)
+      return ptr;
+  return 0;
+@}
+@end group
+@end example
+
+The function @code{yylex} must now recognize variables, numeric values, and
+the single-character arithmetic operators.  Strings of alphanumeric
+characters with a leading letter are recognized as either variables or
+functions depending on what the symbol table says about them.
+
+The string is passed to @code{getsym} for look up in the symbol table.  If
+the name appears in the table, a pointer to its location and its type
+(@code{VAR} or @code{FNCT}) is returned to @code{yyparse}.  If it is not
+already in the table, then it is installed as a @code{VAR} using
+@code{putsym}.  Again, a pointer and its type (which must be @code{VAR}) is
+returned to @code{yyparse}.
+
+No change is needed in the handling of numeric values and arithmetic
+operators in @code{yylex}.
+
+@comment file: mfcalc.y: 3
+@example
+@group
+#include <ctype.h>
+@end group
+
+@group
+int
+yylex (void)
+@{
+  int c;
+
+  /* Ignore white space, get first nonwhite character.  */
+  while ((c = getchar ()) == ' ' || c == '\t')
+    continue;
+
+  if (c == EOF)
+    return 0;
+@end group
+
+@group
+  /* Char starts a number => parse the number.         */
+  if (c == '.' || isdigit (c))
+    @{
+      ungetc (c, stdin);
+      scanf ("%lf", &yylval.val);
+      return NUM;
+    @}
+@end group
+
+@group
+  /* Char starts an identifier => read the name.       */
+  if (isalpha (c))
+    @{
+      /* Initially make the buffer long enough
+         for a 40-character symbol name.  */
+      static size_t length = 40;
+      static char *symbuf = 0;
+      symrec *s;
+      int i;
+@end group
+
+      if (!symbuf)
+        symbuf = (char *) malloc (length + 1);
+
+      i = 0;
+      do
+@group
+        @{
+          /* If buffer is full, make it bigger.        */
+          if (i == length)
+            @{
+              length *= 2;
+              symbuf = (char *) realloc (symbuf, length + 1);
+            @}
+          /* Add this character to the buffer.         */
+          symbuf[i++] = c;
+          /* Get another character.                    */
+          c = getchar ();
+        @}
+@end group
+@group
+      while (isalnum (c));
+
+      ungetc (c, stdin);
+      symbuf[i] = '\0';
+@end group
+
+@group
+      s = getsym (symbuf);
+      if (s == 0)
+        s = putsym (symbuf, VAR);
+      yylval.tptr = s;
+      return s->type;
+    @}
+
+  /* Any other character is a token by itself.        */
+  return c;
+@}
+@end group
+@end example
+
+The error reporting function is unchanged, and the new version of
+@code{main} includes a call to @code{init_table} and sets the @code{yydebug}
+on user demand (@xref{Tracing, , Tracing Your Parser}, for details):
+
+@comment file: mfcalc.y: 3
+@example
+@group
+/* Called by yyparse on error.  */
+void
+yyerror (char const *s)
+@{
+  fprintf (stderr, "%s\n", s);
+@}
+@end group
+
+@group
+int
+main (int argc, char const* argv[])
+@{
+  int i;
+  /* Enable parse traces on option -p.  */
+  for (i = 1; i < argc; ++i)
+    if (!strcmp(argv[i], "-p"))
+      yydebug = 1;
+  init_table ();
+  return yyparse ();
+@}
+@end group
+@end example
+
+This program is both powerful and flexible.  You may easily add new
+functions, and it is a simple job to modify this code to install
+predefined variables such as @code{pi} or @code{e} as well.
+
+@node Exercises
+@section Exercises
+@cindex exercises
+
+@enumerate
+@item
+Add some new functions from @file{math.h} to the initialization list.
+
+@item
+Add another array that contains constants and their values.  Then
+modify @code{init_table} to add these constants to the symbol table.
+It will be easiest to give the constants type @code{VAR}.
+
+@item
+Make the program report an error if the user refers to an
+uninitialized variable in any way except to store a value in it.
+@end enumerate
+
+@node Grammar File
+@chapter Bison Grammar Files
+
+Bison takes as input a context-free grammar specification and produces a
+C-language function that recognizes correct instances of the grammar.
+
+The Bison grammar file conventionally has a name ending in @samp{.y}.
+@xref{Invocation, ,Invoking Bison}.
+
+@menu
+* Grammar Outline::    Overall layout of the grammar file.
+* Symbols::            Terminal and nonterminal symbols.
+* Rules::              How to write grammar rules.
+* Recursion::          Writing recursive rules.
+* Semantics::          Semantic values and actions.
+* Tracking Locations:: Locations and actions.
+* Named References::   Using named references in actions.
+* Declarations::       All kinds of Bison declarations are described here.
+* Multiple Parsers::   Putting more than one Bison parser in one program.
+@end menu
+
+@node Grammar Outline
+@section Outline of a Bison Grammar
+@cindex comment
+@findex // @dots{}
+@findex /* @dots{} */
+
+A Bison grammar file has four main sections, shown here with the
+appropriate delimiters:
+
+@example
+%@{
+  @var{Prologue}
+%@}
+
+@var{Bison declarations}
+
+%%
+@var{Grammar rules}
+%%
+
+@var{Epilogue}
+@end example
+
+Comments enclosed in @samp{/* @dots{} */} may appear in any of the sections.
+As a GNU extension, @samp{//} introduces a comment that continues until end
+of line.
+
+@menu
+* Prologue::              Syntax and usage of the prologue.
+* Prologue Alternatives:: Syntax and usage of alternatives to the prologue.
+* Bison Declarations::    Syntax and usage of the Bison declarations section.
+* Grammar Rules::         Syntax and usage of the grammar rules section.
+* Epilogue::              Syntax and usage of the epilogue.
+@end menu
+
+@node Prologue
+@subsection The prologue
+@cindex declarations section
+@cindex Prologue
+@cindex declarations
+
+The @var{Prologue} section contains macro definitions and declarations
+of functions and variables that are used in the actions in the grammar
+rules.  These are copied to the beginning of the parser implementation
+file so that they precede the definition of @code{yyparse}.  You can
+use @samp{#include} to get the declarations from a header file.  If
+you don't need any C declarations, you may omit the @samp{%@{} and
+@samp{%@}} delimiters that bracket this section.
+
+The @var{Prologue} section is terminated by the first occurrence
+of @samp{%@}} that is outside a comment, a string literal, or a
+character constant.
+
+You may have more than one @var{Prologue} section, intermixed with the
+@var{Bison declarations}.  This allows you to have C and Bison
+declarations that refer to each other.  For example, the @code{%union}
+declaration may use types defined in a header file, and you may wish to
+prototype functions that take arguments of type @code{YYSTYPE}.  This
+can be done with two @var{Prologue} blocks, one before and one after the
+@code{%union} declaration.
+
+@example
+%@{
+  #define _GNU_SOURCE
+  #include <stdio.h>
+  #include "ptypes.h"
+%@}
+
+%union @{
+  long int n;
+  tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
+@}
+
+%@{
+  static void print_token_value (FILE *, int, YYSTYPE);
+  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+%@}
+
+@dots{}
+@end example
+
+When in doubt, it is usually safer to put prologue code before all
+Bison declarations, rather than after.  For example, any definitions
+of feature test macros like @code{_GNU_SOURCE} or
+@code{_POSIX_C_SOURCE} should appear before all Bison declarations, as
+feature test macros can affect the behavior of Bison-generated
+@code{#include} directives.
+
+@node Prologue Alternatives
+@subsection Prologue Alternatives
+@cindex Prologue Alternatives
+
+@findex %code
+@findex %code requires
+@findex %code provides
+@findex %code top
+
+The functionality of @var{Prologue} sections can often be subtle and
+inflexible.  As an alternative, Bison provides a @code{%code}
+directive with an explicit qualifier field, which identifies the
+purpose of the code and thus the location(s) where Bison should
+generate it.  For C/C++, the qualifier can be omitted for the default
+location, or it can be one of @code{requires}, @code{provides},
+@code{top}.  @xref{%code Summary}.
+
+Look again at the example of the previous section:
+
+@example
+%@{
+  #define _GNU_SOURCE
+  #include <stdio.h>
+  #include "ptypes.h"
+%@}
+
+%union @{
+  long int n;
+  tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
+@}
+
+%@{
+  static void print_token_value (FILE *, int, YYSTYPE);
+  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+%@}
+
+@dots{}
+@end example
+
+@noindent
+Notice that there are two @var{Prologue} sections here, but there's a
+subtle distinction between their functionality.  For example, if you
+decide to override Bison's default definition for @code{YYLTYPE}, in
+which @var{Prologue} section should you write your new definition?
+You should write it in the first since Bison will insert that code
+into the parser implementation file @emph{before} the default
+@code{YYLTYPE} definition.  In which @var{Prologue} section should you
+prototype an internal function, @code{trace_token}, that accepts
+@code{YYLTYPE} and @code{yytokentype} as arguments?  You should
+prototype it in the second since Bison will insert that code
+@emph{after} the @code{YYLTYPE} and @code{yytokentype} definitions.
+
+This distinction in functionality between the two @var{Prologue} sections is
+established by the appearance of the @code{%union} between them.
+This behavior raises a few questions.
+First, why should the position of a @code{%union} affect definitions related to
+@code{YYLTYPE} and @code{yytokentype}?
+Second, what if there is no @code{%union}?
+In that case, the second kind of @var{Prologue} section is not available.
+This behavior is not intuitive.
+
+To avoid this subtle @code{%union} dependency, rewrite the example using a
+@code{%code top} and an unqualified @code{%code}.
+Let's go ahead and add the new @code{YYLTYPE} definition and the
+@code{trace_token} prototype at the same time:
+
+@example
+%code top @{
+  #define _GNU_SOURCE
+  #include <stdio.h>
+
+  /* WARNING: The following code really belongs
+   * in a `%code requires'; see below.  */
+
+  #include "ptypes.h"
+  #define YYLTYPE YYLTYPE
+  typedef struct YYLTYPE
+  @{
+    int first_line;
+    int first_column;
+    int last_line;
+    int last_column;
+    char *filename;
+  @} YYLTYPE;
+@}
+
+%union @{
+  long int n;
+  tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
+@}
+
+%code @{
+  static void print_token_value (FILE *, int, YYSTYPE);
+  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+  static void trace_token (enum yytokentype token, YYLTYPE loc);
+@}
+
+@dots{}
+@end example
+
+@noindent
+In this way, @code{%code top} and the unqualified @code{%code} achieve the same
+functionality as the two kinds of @var{Prologue} sections, but it's always
+explicit which kind you intend.
+Moreover, both kinds are always available even in the absence of @code{%union}.
+
+The @code{%code top} block above logically contains two parts.  The
+first two lines before the warning need to appear near the top of the
+parser implementation file.  The first line after the warning is
+required by @code{YYSTYPE} and thus also needs to appear in the parser
+implementation file.  However, if you've instructed Bison to generate
+a parser header file (@pxref{Decl Summary, ,%defines}), you probably
+want that line to appear before the @code{YYSTYPE} definition in that
+header file as well.  The @code{YYLTYPE} definition should also appear
+in the parser header file to override the default @code{YYLTYPE}
+definition there.
+
+In other words, in the @code{%code top} block above, all but the first two
+lines are dependency code required by the @code{YYSTYPE} and @code{YYLTYPE}
+definitions.
+Thus, they belong in one or more @code{%code requires}:
+
+@example
+@group
+%code top @{
+  #define _GNU_SOURCE
+  #include <stdio.h>
+@}
+@end group
+
+@group
+%code requires @{
+  #include "ptypes.h"
+@}
+@end group
+@group
+%union @{
+  long int n;
+  tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
+@}
+@end group
+
+@group
+%code requires @{
+  #define YYLTYPE YYLTYPE
+  typedef struct YYLTYPE
+  @{
+    int first_line;
+    int first_column;
+    int last_line;
+    int last_column;
+    char *filename;
+  @} YYLTYPE;
+@}
+@end group
+
+@group
+%code @{
+  static void print_token_value (FILE *, int, YYSTYPE);
+  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+  static void trace_token (enum yytokentype token, YYLTYPE loc);
+@}
+@end group
+
+@dots{}
+@end example
+
+@noindent
+Now Bison will insert @code{#include "ptypes.h"} and the new
+@code{YYLTYPE} definition before the Bison-generated @code{YYSTYPE}
+and @code{YYLTYPE} definitions in both the parser implementation file
+and the parser header file.  (By the same reasoning, @code{%code
+requires} would also be the appropriate place to write your own
+definition for @code{YYSTYPE}.)
+
+When you are writing dependency code for @code{YYSTYPE} and
+@code{YYLTYPE}, you should prefer @code{%code requires} over
+@code{%code top} regardless of whether you instruct Bison to generate
+a parser header file.  When you are writing code that you need Bison
+to insert only into the parser implementation file and that has no
+special need to appear at the top of that file, you should prefer the
+unqualified @code{%code} over @code{%code top}.  These practices will
+make the purpose of each block of your code explicit to Bison and to
+other developers reading your grammar file.  Following these
+practices, we expect the unqualified @code{%code} and @code{%code
+requires} to be the most important of the four @var{Prologue}
+alternatives.
+
+At some point while developing your parser, you might decide to
+provide @code{trace_token} to modules that are external to your
+parser.  Thus, you might wish for Bison to insert the prototype into
+both the parser header file and the parser implementation file.  Since
+this function is not a dependency required by @code{YYSTYPE} or
+@code{YYLTYPE}, it doesn't make sense to move its prototype to a
+@code{%code requires}.  More importantly, since it depends upon
+@code{YYLTYPE} and @code{yytokentype}, @code{%code requires} is not
+sufficient.  Instead, move its prototype from the unqualified
+@code{%code} to a @code{%code provides}:
+
+@example
+@group
+%code top @{
+  #define _GNU_SOURCE
+  #include <stdio.h>
+@}
+@end group
+
+@group
+%code requires @{
+  #include "ptypes.h"
+@}
+@end group
+@group
+%union @{
+  long int n;
+  tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
+@}
+@end group
+
+@group
+%code requires @{
+  #define YYLTYPE YYLTYPE
+  typedef struct YYLTYPE
+  @{
+    int first_line;
+    int first_column;
+    int last_line;
+    int last_column;
+    char *filename;
+  @} YYLTYPE;
+@}
+@end group
+
+@group
+%code provides @{
+  void trace_token (enum yytokentype token, YYLTYPE loc);
+@}
+@end group
+
+@group
+%code @{
+  static void print_token_value (FILE *, int, YYSTYPE);
+  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+@}
+@end group
+
+@dots{}
+@end example
+
+@noindent
+Bison will insert the @code{trace_token} prototype into both the
+parser header file and the parser implementation file after the
+definitions for @code{yytokentype}, @code{YYLTYPE}, and
+@code{YYSTYPE}.
+
+The above examples are careful to write directives in an order that
+reflects the layout of the generated parser implementation and header
+files: @code{%code top}, @code{%code requires}, @code{%code provides},
+and then @code{%code}.  While your grammar files may generally be
+easier to read if you also follow this order, Bison does not require
+it.  Instead, Bison lets you choose an organization that makes sense
+to you.
+
+You may declare any of these directives multiple times in the grammar file.
+In that case, Bison concatenates the contained code in declaration order.
+This is the only way in which the position of one of these directives within
+the grammar file affects its functionality.
+
+The result of the previous two properties is greater flexibility in how you may
+organize your grammar file.
+For example, you may organize semantic-type-related directives by semantic
+type:
+
+@example
+@group
+%code requires @{ #include "type1.h" @}
+%union @{ type1 field1; @}
+%destructor @{ type1_free ($$); @} <field1>
+%printer @{ type1_print (yyoutput, $$); @} <field1>
+@end group
+
+@group
+%code requires @{ #include "type2.h" @}
+%union @{ type2 field2; @}
+%destructor @{ type2_free ($$); @} <field2>
+%printer @{ type2_print (yyoutput, $$); @} <field2>
+@end group
+@end example
+
+@noindent
+You could even place each of the above directive groups in the rules section of
+the grammar file next to the set of rules that uses the associated semantic
+type.
+(In the rules section, you must terminate each of those directives with a
+semicolon.)
+And you don't have to worry that some directive (like a @code{%union}) in the
+definitions section is going to adversely affect their functionality in some
+counter-intuitive manner just because it comes first.
+Such an organization is not possible using @var{Prologue} sections.
+
+This section has been concerned with explaining the advantages of the four
+@var{Prologue} alternatives over the original Yacc @var{Prologue}.
+However, in most cases when using these directives, you shouldn't need to
+think about all the low-level ordering issues discussed here.
+Instead, you should simply use these directives to label each block of your
+code according to its purpose and let Bison handle the ordering.
+@code{%code} is the most generic label.
+Move code to @code{%code requires}, @code{%code provides}, or @code{%code top}
+as needed.
+
+@node Bison Declarations
+@subsection The Bison Declarations Section
+@cindex Bison declarations (introduction)
+@cindex declarations, Bison (introduction)
+
+The @var{Bison declarations} section contains declarations that define
+terminal and nonterminal symbols, specify precedence, and so on.
+In some simple grammars you may not need any declarations.
+@xref{Declarations, ,Bison Declarations}.
+
+@node Grammar Rules
+@subsection The Grammar Rules Section
+@cindex grammar rules section
+@cindex rules section for grammar
+
+The @dfn{grammar rules} section contains one or more Bison grammar
+rules, and nothing else.  @xref{Rules, ,Syntax of Grammar Rules}.
+
+There must always be at least one grammar rule, and the first
+@samp{%%} (which precedes the grammar rules) may never be omitted even
+if it is the first thing in the file.
+
+@node Epilogue
+@subsection The epilogue
+@cindex additional C code section
+@cindex epilogue
+@cindex C code, section for additional
+
+The @var{Epilogue} is copied verbatim to the end of the parser
+implementation file, just as the @var{Prologue} is copied to the
+beginning.  This is the most convenient place to put anything that you
+want to have in the parser implementation file but which need not come
+before the definition of @code{yyparse}.  For example, the definitions
+of @code{yylex} and @code{yyerror} often go here.  Because C requires
+functions to be declared before being used, you often need to declare
+functions like @code{yylex} and @code{yyerror} in the Prologue, even
+if you define them in the Epilogue.  @xref{Interface, ,Parser
+C-Language Interface}.
+
+If the last section is empty, you may omit the @samp{%%} that separates it
+from the grammar rules.
+
+The Bison parser itself contains many macros and identifiers whose names
+start with @samp{yy} or @samp{YY}, so it is a good idea to avoid using
+any such names (except those documented in this manual) in the epilogue
+of the grammar file.
+
+@node Symbols
+@section Symbols, Terminal and Nonterminal
+@cindex nonterminal symbol
+@cindex terminal symbol
+@cindex token type
+@cindex symbol
+
+@dfn{Symbols} in Bison grammars represent the grammatical classifications
+of the language.
+
+A @dfn{terminal symbol} (also known as a @dfn{token type}) represents a
+class of syntactically equivalent tokens.  You use the symbol in grammar
+rules to mean that a token in that class is allowed.  The symbol is
+represented in the Bison parser by a numeric code, and the @code{yylex}
+function returns a token type code to indicate what kind of token has
+been read.  You don't need to know what the code value is; you can use
+the symbol to stand for it.
+
+A @dfn{nonterminal symbol} stands for a class of syntactically
+equivalent groupings.  The symbol name is used in writing grammar rules.
+By convention, it should be all lower case.
+
+Symbol names can contain letters, underscores, periods, and non-initial
+digits and dashes.  Dashes in symbol names are a GNU extension, incompatible
+with POSIX Yacc.  Periods and dashes make symbol names less convenient to
+use with named references, which require brackets around such names
+(@pxref{Named References}).  Terminal symbols that contain periods or dashes
+make little sense: since they are not valid symbols (in most programming
+languages) they are not exported as token names.
+
+There are three ways of writing terminal symbols in the grammar:
+
+@itemize @bullet
+@item
+A @dfn{named token type} is written with an identifier, like an
+identifier in C@.  By convention, it should be all upper case.  Each
+such name must be defined with a Bison declaration such as
+@code{%token}.  @xref{Token Decl, ,Token Type Names}.
+
+@item
+@cindex character token
+@cindex literal token
+@cindex single-character literal
+A @dfn{character token type} (or @dfn{literal character token}) is
+written in the grammar using the same syntax used in C for character
+constants; for example, @code{'+'} is a character token type.  A
+character token type doesn't need to be declared unless you need to
+specify its semantic value data type (@pxref{Value Type, ,Data Types of
+Semantic Values}), associativity, or precedence (@pxref{Precedence,
+,Operator Precedence}).
+
+By convention, a character token type is used only to represent a
+token that consists of that particular character.  Thus, the token
+type @code{'+'} is used to represent the character @samp{+} as a
+token.  Nothing enforces this convention, but if you depart from it,
+your program will confuse other readers.
+
+All the usual escape sequences used in character literals in C can be
+used in Bison as well, but you must not use the null character as a
+character literal because its numeric code, zero, signifies
+end-of-input (@pxref{Calling Convention, ,Calling Convention
+for @code{yylex}}).  Also, unlike standard C, trigraphs have no
+special meaning in Bison character literals, nor is backslash-newline
+allowed.
+
+@item
+@cindex string token
+@cindex literal string token
+@cindex multicharacter literal
+A @dfn{literal string token} is written like a C string constant; for
+example, @code{"<="} is a literal string token.  A literal string token
+doesn't need to be declared unless you need to specify its semantic
+value data type (@pxref{Value Type}), associativity, or precedence
+(@pxref{Precedence}).
+
+You can associate the literal string token with a symbolic name as an
+alias, using the @code{%token} declaration (@pxref{Token Decl, ,Token
+Declarations}).  If you don't do that, the lexical analyzer has to
+retrieve the token number for the literal string token from the
+@code{yytname} table (@pxref{Calling Convention}).
+
+@strong{Warning}: literal string tokens do not work in Yacc.
+
+By convention, a literal string token is used only to represent a token
+that consists of that particular string.  Thus, you should use the token
+type @code{"<="} to represent the string @samp{<=} as a token.  Bison
+does not enforce this convention, but if you depart from it, people who
+read your program will be confused.
+
+All the escape sequences used in string literals in C can be used in
+Bison as well, except that you must not use a null character within a
+string literal.  Also, unlike Standard C, trigraphs have no special
+meaning in Bison string literals, nor is backslash-newline allowed.  A
+literal string token must contain two or more characters; for a token
+containing just one character, use a character token (see above).
+@end itemize
+
+How you choose to write a terminal symbol has no effect on its
+grammatical meaning.  That depends only on where it appears in rules and
+on when the parser function returns that symbol.
+
+The value returned by @code{yylex} is always one of the terminal
+symbols, except that a zero or negative value signifies end-of-input.
+Whichever way you write the token type in the grammar rules, you write
+it the same way in the definition of @code{yylex}.  The numeric code
+for a character token type is simply the positive numeric code of the
+character, so @code{yylex} can use the identical value to generate the
+requisite code, though you may need to convert it to @code{unsigned
+char} to avoid sign-extension on hosts where @code{char} is signed.
+Each named token type becomes a C macro in the parser implementation
+file, so @code{yylex} can use the name to stand for the code.  (This
+is why periods don't make sense in terminal symbols.)  @xref{Calling
+Convention, ,Calling Convention for @code{yylex}}.
+
+If @code{yylex} is defined in a separate file, you need to arrange for the
+token-type macro definitions to be available there.  Use the @samp{-d}
+option when you run Bison, so that it will write these macro definitions
+into a separate header file @file{@var{name}.tab.h} which you can include
+in the other source files that need it.  @xref{Invocation, ,Invoking Bison}.
+
+If you want to write a grammar that is portable to any Standard C
+host, you must use only nonnull character tokens taken from the basic
+execution character set of Standard C@.  This set consists of the ten
+digits, the 52 lower- and upper-case English letters, and the
+characters in the following C-language string:
+
+@example
+"\a\b\t\n\v\f\r !\"#%&'()*+,-./:;<=>?[\\]^_@{|@}~"
+@end example
+
+The @code{yylex} function and Bison must use a consistent character set
+and encoding for character tokens.  For example, if you run Bison in an
+ASCII environment, but then compile and run the resulting
+program in an environment that uses an incompatible character set like
+EBCDIC, the resulting program may not work because the tables
+generated by Bison will assume ASCII numeric values for
+character tokens.  It is standard practice for software distributions to
+contain C source files that were generated by Bison in an
+ASCII environment, so installers on platforms that are
+incompatible with ASCII must rebuild those files before
+compiling them.
+
+The symbol @code{error} is a terminal symbol reserved for error recovery
+(@pxref{Error Recovery}); you shouldn't use it for any other purpose.
+In particular, @code{yylex} should never return this value.  The default
+value of the error token is 256, unless you explicitly assigned 256 to
+one of your tokens with a @code{%token} declaration.
+
+@node Rules
+@section Syntax of Grammar Rules
+@cindex rule syntax
+@cindex grammar rule syntax
+@cindex syntax of grammar rules
+
+A Bison grammar rule has the following general form:
+
+@example
+@group
+@var{result}: @var{components}@dots{};
+@end group
+@end example
+
+@noindent
+where @var{result} is the nonterminal symbol that this rule describes,
+and @var{components} are various terminal and nonterminal symbols that
+are put together by this rule (@pxref{Symbols}).
+
+For example,
+
+@example
+@group
+exp: exp '+' exp;
+@end group
+@end example
+
+@noindent
+says that two groupings of type @code{exp}, with a @samp{+} token in between,
+can be combined into a larger grouping of type @code{exp}.
+
+White space in rules is significant only to separate symbols.  You can add
+extra white space as you wish.
+
+Scattered among the components can be @var{actions} that determine
+the semantics of the rule.  An action looks like this:
+
+@example
+@{@var{C statements}@}
+@end example
+
+@noindent
+@cindex braced code
+This is an example of @dfn{braced code}, that is, C code surrounded by
+braces, much like a compound statement in C@.  Braced code can contain
+any sequence of C tokens, so long as its braces are balanced.  Bison
+does not check the braced code for correctness directly; it merely
+copies the code to the parser implementation file, where the C
+compiler can check it.
+
+Within braced code, the balanced-brace count is not affected by braces
+within comments, string literals, or character constants, but it is
+affected by the C digraphs @samp{<%} and @samp{%>} that represent
+braces.  At the top level braced code must be terminated by @samp{@}}
+and not by a digraph.  Bison does not look for trigraphs, so if braced
+code uses trigraphs you should ensure that they do not affect the
+nesting of braces or the boundaries of comments, string literals, or
+character constants.
+
+Usually there is only one action and it follows the components.
+@xref{Actions}.
+
+@findex |
+Multiple rules for the same @var{result} can be written separately or can
+be joined with the vertical-bar character @samp{|} as follows:
+
+@example
+@group
+@var{result}:
+  @var{rule1-components}@dots{}
+| @var{rule2-components}@dots{}
+@dots{}
+;
+@end group
+@end example
+
+@noindent
+They are still considered distinct rules even when joined in this way.
+
+If @var{components} in a rule is empty, it means that @var{result} can
+match the empty string.  For example, here is how to define a
+comma-separated sequence of zero or more @code{exp} groupings:
+
+@example
+@group
+expseq:
+  /* empty */
+| expseq1
+;
+@end group
+
+@group
+expseq1:
+  exp
+| expseq1 ',' exp
+;
+@end group
+@end example
+
+@noindent
+It is customary to write a comment @samp{/* empty */} in each rule
+with no components.
+
+@node Recursion
+@section Recursive Rules
+@cindex recursive rule
+
+A rule is called @dfn{recursive} when its @var{result} nonterminal
+appears also on its right hand side.  Nearly all Bison grammars need to
+use recursion, because that is the only way to define a sequence of any
+number of a particular thing.  Consider this recursive definition of a
+comma-separated sequence of one or more expressions:
+
+@example
+@group
+expseq1:
+  exp
+| expseq1 ',' exp
+;
+@end group
+@end example
+
+@cindex left recursion
+@cindex right recursion
+@noindent
+Since the recursive use of @code{expseq1} is the leftmost symbol in the
+right hand side, we call this @dfn{left recursion}.  By contrast, here
+the same construct is defined using @dfn{right recursion}:
+
+@example
+@group
+expseq1:
+  exp
+| exp ',' expseq1
+;
+@end group
+@end example
+
+@noindent
+Any kind of sequence can be defined using either left recursion or right
+recursion, but you should always use left recursion, because it can
+parse a sequence of any number of elements with bounded stack space.
+Right recursion uses up space on the Bison stack in proportion to the
+number of elements in the sequence, because all the elements must be
+shifted onto the stack before the rule can be applied even once.
+@xref{Algorithm, ,The Bison Parser Algorithm}, for further explanation
+of this.
+
+@cindex mutual recursion
+@dfn{Indirect} or @dfn{mutual} recursion occurs when the result of the
+rule does not appear directly on its right hand side, but does appear
+in rules for other nonterminals which do appear on its right hand
+side.
+
+For example:
+
+@example
+@group
+expr:
+  primary
+| primary '+' primary
+;
+@end group
+
+@group
+primary:
+  constant
+| '(' expr ')'
+;
+@end group
+@end example
+
+@noindent
+defines two mutually-recursive nonterminals, since each refers to the
+other.
+
+@node Semantics
+@section Defining Language Semantics
+@cindex defining language semantics
+@cindex language semantics, defining
+
+The grammar rules for a language determine only the syntax.  The semantics
+are determined by the semantic values associated with various tokens and
+groupings, and by the actions taken when various groupings are recognized.
+
+For example, the calculator calculates properly because the value
+associated with each expression is the proper number; it adds properly
+because the action for the grouping @w{@samp{@var{x} + @var{y}}} is to add
+the numbers associated with @var{x} and @var{y}.
+
+@menu
+* Value Type::        Specifying one data type for all semantic values.
+* Multiple Types::    Specifying several alternative data types.
+* Actions::           An action is the semantic definition of a grammar rule.
+* Action Types::      Specifying data types for actions to operate on.
+* Mid-Rule Actions::  Most actions go at the end of a rule.
+                      This says when, why and how to use the exceptional
+                        action in the middle of a rule.
+@end menu
+
+@node Value Type
+@subsection Data Types of Semantic Values
+@cindex semantic value type
+@cindex value type, semantic
+@cindex data types of semantic values
+@cindex default data type
+
+In a simple program it may be sufficient to use the same data type for
+the semantic values of all language constructs.  This was true in the
+RPN and infix calculator examples (@pxref{RPN Calc, ,Reverse Polish
+Notation Calculator}).
+
+Bison normally uses the type @code{int} for semantic values if your
+program uses the same data type for all language constructs.  To
+specify some other type, define @code{YYSTYPE} as a macro, like this:
+
+@example
+#define YYSTYPE double
+@end example
+
+@noindent
+@code{YYSTYPE}'s replacement list should be a type name
+that does not contain parentheses or square brackets.
+This macro definition must go in the prologue of the grammar file
+(@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
+
+@node Multiple Types
+@subsection More Than One Value Type
+
+In most programs, you will need different data types for different kinds
+of tokens and groupings.  For example, a numeric constant may need type
+@code{int} or @code{long int}, while a string constant needs type
+@code{char *}, and an identifier might need a pointer to an entry in the
+symbol table.
+
+To use more than one data type for semantic values in one parser, Bison
+requires you to do two things:
+
+@itemize @bullet
+@item
+Specify the entire collection of possible data types, either by using the
+@code{%union} Bison declaration (@pxref{Union Decl, ,The Collection of
+Value Types}), or by using a @code{typedef} or a @code{#define} to
+define @code{YYSTYPE} to be a union type whose member names are
+the type tags.
+
+@item
+Choose one of those types for each symbol (terminal or nonterminal) for
+which semantic values are used.  This is done for tokens with the
+@code{%token} Bison declaration (@pxref{Token Decl, ,Token Type Names})
+and for groupings with the @code{%type} Bison declaration (@pxref{Type
+Decl, ,Nonterminal Symbols}).
+@end itemize
+
+@node Actions
+@subsection Actions
+@cindex action
+@vindex $$
+@vindex $@var{n}
+@vindex $@var{name}
+@vindex $[@var{name}]
+
+An action accompanies a syntactic rule and contains C code to be executed
+each time an instance of that rule is recognized.  The task of most actions
+is to compute a semantic value for the grouping built by the rule from the
+semantic values associated with tokens or smaller groupings.
+
+An action consists of braced code containing C statements, and can be
+placed at any position in the rule;
+it is executed at that position.  Most rules have just one action at the
+end of the rule, following all the components.  Actions in the middle of
+a rule are tricky and used only for special purposes (@pxref{Mid-Rule
+Actions, ,Actions in Mid-Rule}).
+
+The C code in an action can refer to the semantic values of the
+components matched by the rule with the construct @code{$@var{n}},
+which stands for the value of the @var{n}th component.  The semantic
+value for the grouping being constructed is @code{$$}.  In addition,
+the semantic values of symbols can be accessed with the named
+references construct @code{$@var{name}} or @code{$[@var{name}]}.
+Bison translates both of these constructs into expressions of the
+appropriate type when it copies the actions into the parser
+implementation file.  @code{$$} (or @code{$@var{name}}, when it stands
+for the current grouping) is translated to a modifiable lvalue, so it
+can be assigned to.
+
+Here is a typical example:
+
+@example
+@group
+exp:
+@dots{}
+| exp '+' exp     @{ $$ = $1 + $3; @}
+@end group
+@end example
+
+Or, in terms of named references:
+
+@example
+@group
+exp[result]:
+@dots{}
+| exp[left] '+' exp[right]  @{ $result = $left + $right; @}
+@end group
+@end example
+
+@noindent
+This rule constructs an @code{exp} from two smaller @code{exp} groupings
+connected by a plus-sign token.  In the action, @code{$1} and @code{$3}
+(@code{$left} and @code{$right})
+refer to the semantic values of the two component @code{exp} groupings,
+which are the first and third symbols on the right hand side of the rule.
+The sum is stored into @code{$$} (@code{$result}) so that it becomes the
+semantic value of
+the addition-expression just recognized by the rule.  If there were a
+useful semantic value associated with the @samp{+} token, it could be
+referred to as @code{$2}.
+
+@xref{Named References}, for more information about using the named
+references construct.
+
+Note that the vertical-bar character @samp{|} is really a rule
+separator, and actions are attached to a single rule.  This is a
+difference with tools like Flex, for which @samp{|} stands for either
+``or'', or ``the same action as that of the next rule''.  In the
+following example, the action is triggered only when @samp{b} is found:
+
+@example
+@group
+a-or-b: 'a'|'b'   @{ a_or_b_found = 1; @};
+@end group
+@end example
+
+@cindex default action
+If you don't specify an action for a rule, Bison supplies a default:
+@w{@code{$$ = $1}.}  Thus, the value of the first symbol in the rule
+becomes the value of the whole rule.  Of course, the default action is
+valid only if the two data types match.  There is no meaningful default
+action for an empty rule; every empty rule must have an explicit action
+unless the rule's value does not matter.
+
+@code{$@var{n}} with @var{n} zero or negative is allowed for reference
+to tokens and groupings on the stack @emph{before} those that match the
+current rule.  This is a very risky practice, and to use it reliably
+you must be certain of the context in which the rule is applied.  Here
+is a case in which you can use this reliably:
+
+@example
+@group
+foo:
+  expr bar '+' expr  @{ @dots{} @}
+| expr bar '-' expr  @{ @dots{} @}
+;
+@end group
+
+@group
+bar:
+  /* empty */    @{ previous_expr = $0; @}
+;
+@end group
+@end example
+
+As long as @code{bar} is used only in the fashion shown here, @code{$0}
+always refers to the @code{expr} which precedes @code{bar} in the
+definition of @code{foo}.
+
+@vindex yylval
+It is also possible to access the semantic value of the lookahead token, if
+any, from a semantic action.
+This semantic value is stored in @code{yylval}.
+@xref{Action Features, ,Special Features for Use in Actions}.
+
+@node Action Types
+@subsection Data Types of Values in Actions
+@cindex action data types
+@cindex data types in actions
+
+If you have chosen a single data type for semantic values, the @code{$$}
+and @code{$@var{n}} constructs always have that data type.
+
+If you have used @code{%union} to specify a variety of data types, then you
+must declare a choice among these types for each terminal or nonterminal
+symbol that can have a semantic value.  Then each time you use @code{$$} or
+@code{$@var{n}}, its data type is determined by which symbol it refers to
+in the rule.  In this example,
+
+@example
+@group
+exp:
+  @dots{}
+| exp '+' exp    @{ $$ = $1 + $3; @}
+@end group
+@end example
+
+@noindent
+@code{$1} and @code{$3} refer to instances of @code{exp}, so they all
+have the data type declared for the nonterminal symbol @code{exp}.  If
+@code{$2} were used, it would have the data type declared for the
+terminal symbol @code{'+'}, whatever that might be.
+
+Alternatively, you can specify the data type when you refer to the value,
+by inserting @samp{<@var{type}>} after the @samp{$} at the beginning of the
+reference.  For example, if you have defined types as shown here:
+
+@example
+@group
+%union @{
+  int itype;
+  double dtype;
+@}
+@end group
+@end example
+
+@noindent
+then you can write @code{$<itype>1} to refer to the first subunit of the
+rule as an integer, or @code{$<dtype>1} to refer to it as a double.
+
+@node Mid-Rule Actions
+@subsection Actions in Mid-Rule
+@cindex actions in mid-rule
+@cindex mid-rule actions
+
+Occasionally it is useful to put an action in the middle of a rule.
+These actions are written just like usual end-of-rule actions, but they
+are executed before the parser even recognizes the following components.
+
+@menu
+* Using Mid-Rule Actions::       Putting an action in the middle of a rule.
+* Mid-Rule Action Translation::  How mid-rule actions are actually processed.
+* Mid-Rule Conflicts::           Mid-rule actions can cause conflicts.
+@end menu
+
+@node Using Mid-Rule Actions
+@subsubsection Using Mid-Rule Actions
+
+A mid-rule action may refer to the components preceding it using
+@code{$@var{n}}, but it may not refer to subsequent components because
+it is run before they are parsed.
+
+The mid-rule action itself counts as one of the components of the rule.
+This makes a difference when there is another action later in the same rule
+(and usually there is another at the end): you have to count the actions
+along with the symbols when working out which number @var{n} to use in
+@code{$@var{n}}.
+
+The mid-rule action can also have a semantic value.  The action can set
+its value with an assignment to @code{$$}, and actions later in the rule
+can refer to the value using @code{$@var{n}}.  Since there is no symbol
+to name the action, there is no way to declare a data type for the value
+in advance, so you must use the @samp{$<@dots{}>@var{n}} construct to
+specify a data type each time you refer to this value.
+
+There is no way to set the value of the entire rule with a mid-rule
+action, because assignments to @code{$$} do not have that effect.  The
+only way to set the value for the entire rule is with an ordinary action
+at the end of the rule.
+
+Here is an example from a hypothetical compiler, handling a @code{let}
+statement that looks like @samp{let (@var{variable}) @var{statement}} and
+serves to create a variable named @var{variable} temporarily for the
+duration of @var{statement}.  To parse this construct, we must put
+@var{variable} into the symbol table while @var{statement} is parsed, then
+remove it afterward.  Here is how it is done:
+
+@example
+@group
+stmt:
+  "let" '(' var ')'
+    @{
+      $<context>$ = push_context ();
+      declare_variable ($3);
+    @}
+  stmt
+    @{
+      $$ = $6;
+      pop_context ($<context>5);
+    @}
+@end group
+@end example
+
+@noindent
+As soon as @samp{let (@var{variable})} has been recognized, the first
+action is run.  It saves a copy of the current semantic context (the
+list of accessible variables) as its semantic value, using alternative
+@code{context} in the data-type union.  Then it calls
+@code{declare_variable} to add the new variable to that list.  Once the
+first action is finished, the embedded statement @code{stmt} can be
+parsed.
+
+Note that the mid-rule action is component number 5, so the @samp{stmt} is
+component number 6.  Named references can be used to improve the readability
+and maintainability (@pxref{Named References}):
+
+@example
+@group
+stmt:
+  "let" '(' var ')'
+    @{
+      $<context>let = push_context ();
+      declare_variable ($3);
+    @}[let]
+  stmt
+    @{
+      $$ = $6;
+      pop_context ($<context>let);
+    @}
+@end group
+@end example
+
+After the embedded statement is parsed, its semantic value becomes the
+value of the entire @code{let}-statement.  Then the semantic value from the
+earlier action is used to restore the prior list of variables.  This
+removes the temporary @code{let}-variable from the list so that it won't
+appear to exist while the rest of the program is parsed.
+
+@findex %destructor
+@cindex discarded symbols, mid-rule actions
+@cindex error recovery, mid-rule actions
+In the above example, if the parser initiates error recovery (@pxref{Error
+Recovery}) while parsing the tokens in the embedded statement @code{stmt},
+it might discard the previous semantic context @code{$<context>5} without
+restoring it.
+Thus, @code{$<context>5} needs a destructor (@pxref{Destructor Decl, , Freeing
+Discarded Symbols}).
+However, Bison currently provides no means to declare a destructor specific to
+a particular mid-rule action's semantic value.
+
+One solution is to bury the mid-rule action inside a nonterminal symbol and to
+declare a destructor for that symbol:
+
+@example
+@group
+%type <context> let
+%destructor @{ pop_context ($$); @} let
+
+%%
+
+stmt:
+  let stmt
+    @{
+      $$ = $2;
+      pop_context ($let);
+    @};
+
+let:
+  "let" '(' var ')'
+    @{
+      $let = push_context ();
+      declare_variable ($3);
+    @};
+
+@end group
+@end example
+
+@noindent
+Note that the action is now at the end of its rule.
+Any mid-rule action can be converted to an end-of-rule action in this way, and
+this is what Bison actually does to implement mid-rule actions.
+
+@node Mid-Rule Action Translation
+@subsubsection Mid-Rule Action Translation
+@vindex $@@@var{n}
+@vindex @@@var{n}
+
+As hinted earlier, mid-rule actions are actually transformed into regular
+rules and actions.  The various reports generated by Bison (textual,
+graphical, etc., see @ref{Understanding, , Understanding Your Parser})
+reveal this translation, best explained by means of an example.  The
+following rule:
+
+@example
+exp: @{ a(); @} "b" @{ c(); @} @{ d(); @} "e" @{ f(); @};
+@end example
+
+@noindent
+is translated into:
+
+@example
+$@@1: /* empty */ @{ a(); @};
+$@@2: /* empty */ @{ c(); @};
+$@@3: /* empty */ @{ d(); @};
+exp: $@@1 "b" $@@2 $@@3 "e" @{ f(); @};
+@end example
+
+@noindent
+with new nonterminal symbols @code{$@@@var{n}}, where @var{n} is a number.
+
+A mid-rule action is expected to generate a value if it uses @code{$$}, or
+the (final) action uses @code{$@var{n}} where @var{n} denote the mid-rule
+action.  In that case its nonterminal is rather named @code{@@@var{n}}:
+
+@example
+exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
+@end example
+
+@noindent
+is translated into
+
+@example
+@@1: /* empty */ @{ a(); @};
+@@2: /* empty */ @{ $$ = c(); @};
+$@@3: /* empty */ @{ d(); @};
+exp: @@1 "b" @@2 $@@3 "e" @{ f = $1; @}
+@end example
+
+There are probably two errors in the above example: the first mid-rule
+action does not generate a value (it does not use @code{$$} although the
+final action uses it), and the value of the second one is not used (the
+final action does not use @code{$3}).  Bison reports these errors when the
+@code{midrule-value} warnings are enabled (@pxref{Invocation, ,Invoking
+Bison}):
+
+@example
+$ bison -fcaret -Wmidrule-value mid.y
+@group
+mid.y:2.6-13: warning: unset value: $$
+ exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
+      ^^^^^^^^
+@end group
+@group
+mid.y:2.19-31: warning: unused value: $3
+ exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
+                   ^^^^^^^^^^^^^
+@end group
+@end example
+
+
+@node Mid-Rule Conflicts
+@subsubsection Conflicts due to Mid-Rule Actions
+Taking action before a rule is completely recognized often leads to
+conflicts since the parser must commit to a parse in order to execute the
+action.  For example, the following two rules, without mid-rule actions,
+can coexist in a working parser because the parser can shift the open-brace
+token and look at what follows before deciding whether there is a
+declaration or not:
+
+@example
+@group
+compound:
+  '@{' declarations statements '@}'
+| '@{' statements '@}'
+;
+@end group
+@end example
+
+@noindent
+But when we add a mid-rule action as follows, the rules become nonfunctional:
+
+@example
+@group
+compound:
+  @{ prepare_for_local_variables (); @}
+     '@{' declarations statements '@}'
+@end group
+@group
+|    '@{' statements '@}'
+;
+@end group
+@end example
+
+@noindent
+Now the parser is forced to decide whether to run the mid-rule action
+when it has read no farther than the open-brace.  In other words, it
+must commit to using one rule or the other, without sufficient
+information to do it correctly.  (The open-brace token is what is called
+the @dfn{lookahead} token at this time, since the parser is still
+deciding what to do about it.  @xref{Lookahead, ,Lookahead Tokens}.)
+
+You might think that you could correct the problem by putting identical
+actions into the two rules, like this:
+
+@example
+@group
+compound:
+  @{ prepare_for_local_variables (); @}
+    '@{' declarations statements '@}'
+| @{ prepare_for_local_variables (); @}
+    '@{' statements '@}'
+;
+@end group
+@end example
+
+@noindent
+But this does not help, because Bison does not realize that the two actions
+are identical.  (Bison never tries to understand the C code in an action.)
+
+If the grammar is such that a declaration can be distinguished from a
+statement by the first token (which is true in C), then one solution which
+does work is to put the action after the open-brace, like this:
+
+@example
+@group
+compound:
+  '@{' @{ prepare_for_local_variables (); @}
+    declarations statements '@}'
+| '@{' statements '@}'
+;
+@end group
+@end example
+
+@noindent
+Now the first token of the following declaration or statement,
+which would in any case tell Bison which rule to use, can still do so.
+
+Another solution is to bury the action inside a nonterminal symbol which
+serves as a subroutine:
+
+@example
+@group
+subroutine:
+  /* empty */  @{ prepare_for_local_variables (); @}
+;
+@end group
+
+@group
+compound:
+  subroutine '@{' declarations statements '@}'
+| subroutine '@{' statements '@}'
+;
+@end group
+@end example
+
+@noindent
+Now Bison can execute the action in the rule for @code{subroutine} without
+deciding which rule for @code{compound} it will eventually use.
+
+
+@node Tracking Locations
+@section Tracking Locations
+@cindex location
+@cindex textual location
+@cindex location, textual
+
+Though grammar rules and semantic actions are enough to write a fully
+functional parser, it can be useful to process some additional information,
+especially symbol locations.
+
+The way locations are handled is defined by providing a data type, and
+actions to take when rules are matched.
+
+@menu
+* Location Type::               Specifying a data type for locations.
+* Actions and Locations::       Using locations in actions.
+* Location Default Action::     Defining a general way to compute locations.
+@end menu
+
+@node Location Type
+@subsection Data Type of Locations
+@cindex data type of locations
+@cindex default location type
+
+Defining a data type for locations is much simpler than for semantic values,
+since all tokens and groupings always use the same type.
+
+You can specify the type of locations by defining a macro called
+@code{YYLTYPE}, just as you can specify the semantic value type by
+defining a @code{YYSTYPE} macro (@pxref{Value Type}).
+When @code{YYLTYPE} is not defined, Bison uses a default structure type with
+four members:
+
+@example
+typedef struct YYLTYPE
+@{
+  int first_line;
+  int first_column;
+  int last_line;
+  int last_column;
+@} YYLTYPE;
+@end example
+
+When @code{YYLTYPE} is not defined, at the beginning of the parsing, Bison
+initializes all these fields to 1 for @code{yylloc}.  To initialize
+@code{yylloc} with a custom location type (or to chose a different
+initialization), use the @code{%initial-action} directive.  @xref{Initial
+Action Decl, , Performing Actions before Parsing}.
+
+@node Actions and Locations
+@subsection Actions and Locations
+@cindex location actions
+@cindex actions, location
+@vindex @@$
+@vindex @@@var{n}
+@vindex @@@var{name}
+@vindex @@[@var{name}]
+
+Actions are not only useful for defining language semantics, but also for
+describing the behavior of the output parser with locations.
+
+The most obvious way for building locations of syntactic groupings is very
+similar to the way semantic values are computed.  In a given rule, several
+constructs can be used to access the locations of the elements being matched.
+The location of the @var{n}th component of the right hand side is
+@code{@@@var{n}}, while the location of the left hand side grouping is
+@code{@@$}.
+
+In addition, the named references construct @code{@@@var{name}} and
+@code{@@[@var{name}]} may also be used to address the symbol locations.
+@xref{Named References}, for more information about using the named
+references construct.
+
+Here is a basic example using the default data type for locations:
+
+@example
+@group
+exp:
+  @dots{}
+| exp '/' exp
+    @{
+      @@$.first_column = @@1.first_column;
+      @@$.first_line = @@1.first_line;
+      @@$.last_column = @@3.last_column;
+      @@$.last_line = @@3.last_line;
+      if ($3)
+        $$ = $1 / $3;
+      else
+        @{
+          $$ = 1;
+          fprintf (stderr,
+                   "Division by zero, l%d,c%d-l%d,c%d",
+                   @@3.first_line, @@3.first_column,
+                   @@3.last_line, @@3.last_column);
+        @}
+    @}
+@end group
+@end example
+
+As for semantic values, there is a default action for locations that is
+run each time a rule is matched.  It sets the beginning of @code{@@$} to the
+beginning of the first symbol, and the end of @code{@@$} to the end of the
+last symbol.
+
+With this default action, the location tracking can be fully automatic.  The
+example above simply rewrites this way:
+
+@example
+@group
+exp:
+  @dots{}
+| exp '/' exp
+    @{
+      if ($3)
+        $$ = $1 / $3;
+      else
+        @{
+          $$ = 1;
+          fprintf (stderr,
+                   "Division by zero, l%d,c%d-l%d,c%d",
+                   @@3.first_line, @@3.first_column,
+                   @@3.last_line, @@3.last_column);
+        @}
+    @}
+@end group
+@end example
+
+@vindex yylloc
+It is also possible to access the location of the lookahead token, if any,
+from a semantic action.
+This location is stored in @code{yylloc}.
+@xref{Action Features, ,Special Features for Use in Actions}.
+
+@node Location Default Action
+@subsection Default Action for Locations
+@vindex YYLLOC_DEFAULT
+@cindex GLR parsers and @code{YYLLOC_DEFAULT}
+
+Actually, actions are not the best place to compute locations.  Since
+locations are much more general than semantic values, there is room in
+the output parser to redefine the default action to take for each
+rule.  The @code{YYLLOC_DEFAULT} macro is invoked each time a rule is
+matched, before the associated action is run.  It is also invoked
+while processing a syntax error, to compute the error's location.
+Before reporting an unresolvable syntactic ambiguity, a GLR
+parser invokes @code{YYLLOC_DEFAULT} recursively to compute the location
+of that ambiguity.
+
+Most of the time, this macro is general enough to suppress location
+dedicated code from semantic actions.
+
+The @code{YYLLOC_DEFAULT} macro takes three parameters.  The first one is
+the location of the grouping (the result of the computation).  When a
+rule is matched, the second parameter identifies locations of
+all right hand side elements of the rule being matched, and the third
+parameter is the size of the rule's right hand side.
+When a GLR parser reports an ambiguity, which of multiple candidate
+right hand sides it passes to @code{YYLLOC_DEFAULT} is undefined.
+When processing a syntax error, the second parameter identifies locations
+of the symbols that were discarded during error processing, and the third
+parameter is the number of discarded symbols.
+
+By default, @code{YYLLOC_DEFAULT} is defined this way:
+
+@example
+@group
+# define YYLLOC_DEFAULT(Cur, Rhs, N)                      \
+do                                                        \
+  if (N)                                                  \
+    @{                                                     \
+      (Cur).first_line   = YYRHSLOC(Rhs, 1).first_line;   \
+      (Cur).first_column = YYRHSLOC(Rhs, 1).first_column; \
+      (Cur).last_line    = YYRHSLOC(Rhs, N).last_line;    \
+      (Cur).last_column  = YYRHSLOC(Rhs, N).last_column;  \
+    @}                                                     \
+  else                                                    \
+    @{                                                     \
+      (Cur).first_line   = (Cur).last_line   =            \
+        YYRHSLOC(Rhs, 0).last_line;                       \
+      (Cur).first_column = (Cur).last_column =            \
+        YYRHSLOC(Rhs, 0).last_column;                     \
+    @}                                                     \
+while (0)
+@end group
+@end example
+
+@noindent
+where @code{YYRHSLOC (rhs, k)} is the location of the @var{k}th symbol
+in @var{rhs} when @var{k} is positive, and the location of the symbol
+just before the reduction when @var{k} and @var{n} are both zero.
+
+When defining @code{YYLLOC_DEFAULT}, you should consider that:
+
+@itemize @bullet
+@item
+All arguments are free of side-effects.  However, only the first one (the
+result) should be modified by @code{YYLLOC_DEFAULT}.
+
+@item
+For consistency with semantic actions, valid indexes within the
+right hand side range from 1 to @var{n}.  When @var{n} is zero, only 0 is a
+valid index, and it refers to the symbol just before the reduction.
+During error processing @var{n} is always positive.
+
+@item
+Your macro should parenthesize its arguments, if need be, since the
+actual arguments may not be surrounded by parentheses.  Also, your
+macro should expand to something that can be used as a single
+statement when it is followed by a semicolon.
+@end itemize
+
+@node Named References
+@section Named References
+@cindex named references
+
+As described in the preceding sections, the traditional way to refer to any
+semantic value or location is a @dfn{positional reference}, which takes the
+form @code{$@var{n}}, @code{$$}, @code{@@@var{n}}, and @code{@@$}.  However,
+such a reference is not very descriptive.  Moreover, if you later decide to
+insert or remove symbols in the right-hand side of a grammar rule, the need
+to renumber such references can be tedious and error-prone.
+
+To avoid these issues, you can also refer to a semantic value or location
+using a @dfn{named reference}.  First of all, original symbol names may be
+used as named references.  For example:
+
+@example
+@group
+invocation: op '(' args ')'
+  @{ $invocation = new_invocation ($op, $args, @@invocation); @}
+@end group
+@end example
+
+@noindent
+Positional and named references can be mixed arbitrarily.  For example:
+
+@example
+@group
+invocation: op '(' args ')'
+  @{ $$ = new_invocation ($op, $args, @@$); @}
+@end group
+@end example
+
+@noindent
+However, sometimes regular symbol names are not sufficient due to
+ambiguities:
+
+@example
+@group
+exp: exp '/' exp
+  @{ $exp = $exp / $exp; @} // $exp is ambiguous.
+
+exp: exp '/' exp
+  @{ $$ = $1 / $exp; @} // One usage is ambiguous.
+
+exp: exp '/' exp
+  @{ $$ = $1 / $3; @} // No error.
+@end group
+@end example
+
+@noindent
+When ambiguity occurs, explicitly declared names may be used for values and
+locations.  Explicit names are declared as a bracketed name after a symbol
+appearance in rule definitions.  For example:
+@example
+@group
+exp[result]: exp[left] '/' exp[right]
+  @{ $result = $left / $right; @}
+@end group
+@end example
+
+@noindent
+In order to access a semantic value generated by a mid-rule action, an
+explicit name may also be declared by putting a bracketed name after the
+closing brace of the mid-rule action code:
+@example
+@group
+exp[res]: exp[x] '+' @{$left = $x;@}[left] exp[right]
+  @{ $res = $left + $right; @}
+@end group
+@end example
+
+@noindent
+
+In references, in order to specify names containing dots and dashes, an explicit
+bracketed syntax @code{$[name]} and @code{@@[name]} must be used:
+@example
+@group
+if-stmt: "if" '(' expr ')' "then" then.stmt ';'
+  @{ $[if-stmt] = new_if_stmt ($expr, $[then.stmt]); @}
+@end group
+@end example
+
+It often happens that named references are followed by a dot, dash or other
+C punctuation marks and operators.  By default, Bison will read
+@samp{$name.suffix} as a reference to symbol value @code{$name} followed by
+@samp{.suffix}, i.e., an access to the @code{suffix} field of the semantic
+value.  In order to force Bison to recognize @samp{name.suffix} in its
+entirety as the name of a semantic value, the bracketed syntax
+@samp{$[name.suffix]} must be used.
+
+The named references feature is experimental.  More user feedback will help
+to stabilize it.
+
+@node Declarations
+@section Bison Declarations
+@cindex declarations, Bison
+@cindex Bison declarations
+
+The @dfn{Bison declarations} section of a Bison grammar defines the symbols
+used in formulating the grammar and the data types of semantic values.
+@xref{Symbols}.
+
+All token type names (but not single-character literal tokens such as
+@code{'+'} and @code{'*'}) must be declared.  Nonterminal symbols must be
+declared if you need to specify which data type to use for the semantic
+value (@pxref{Multiple Types, ,More Than One Value Type}).
+
+The first rule in the grammar file also specifies the start symbol, by
+default.  If you want some other symbol to be the start symbol, you
+must declare it explicitly (@pxref{Language and Grammar, ,Languages
+and Context-Free Grammars}).
+
+@menu
+* Require Decl::      Requiring a Bison version.
+* Token Decl::        Declaring terminal symbols.
+* Precedence Decl::   Declaring terminals with precedence and associativity.
+* Union Decl::        Declaring the set of all semantic value types.
+* Type Decl::         Declaring the choice of type for a nonterminal symbol.
+* Initial Action Decl::  Code run before parsing starts.
+* Destructor Decl::   Declaring how symbols are freed.
+* Printer Decl::      Declaring how symbol values are displayed.
+* Expect Decl::       Suppressing warnings about parsing conflicts.
+* Start Decl::        Specifying the start symbol.
+* Pure Decl::         Requesting a reentrant parser.
+* Push Decl::         Requesting a push parser.
+* Decl Summary::      Table of all Bison declarations.
+* %define Summary::   Defining variables to adjust Bison's behavior.
+* %code Summary::     Inserting code into the parser source.
+@end menu
+
+@node Require Decl
+@subsection Require a Version of Bison
+@cindex version requirement
+@cindex requiring a version of Bison
+@findex %require
+
+You may require the minimum version of Bison to process the grammar.  If
+the requirement is not met, @command{bison} exits with an error (exit
+status 63).
+
+@example
+%require "@var{version}"
+@end example
+
+@node Token Decl
+@subsection Token Type Names
+@cindex declaring token type names
+@cindex token type names, declaring
+@cindex declaring literal string tokens
+@findex %token
+
+The basic way to declare a token type name (terminal symbol) is as follows:
+
+@example
+%token @var{name}
+@end example
+
+Bison will convert this into a @code{#define} directive in
+the parser, so that the function @code{yylex} (if it is in this file)
+can use the name @var{name} to stand for this token type's code.
+
+Alternatively, you can use @code{%left}, @code{%right}, or
+@code{%nonassoc} instead of @code{%token}, if you wish to specify
+associativity and precedence.  @xref{Precedence Decl, ,Operator
+Precedence}.
+
+You can explicitly specify the numeric code for a token type by appending
+a nonnegative decimal or hexadecimal integer value in the field immediately
+following the token name:
+
+@example
+%token NUM 300
+%token XNUM 0x12d // a GNU extension
+@end example
+
+@noindent
+It is generally best, however, to let Bison choose the numeric codes for
+all token types.  Bison will automatically select codes that don't conflict
+with each other or with normal characters.
+
+In the event that the stack type is a union, you must augment the
+@code{%token} or other token declaration to include the data type
+alternative delimited by angle-brackets (@pxref{Multiple Types, ,More
+Than One Value Type}).
+
+For example:
+
+@example
+@group
+%union @{              /* define stack type */
+  double val;
+  symrec *tptr;
+@}
+%token <val> NUM      /* define token NUM and its type */
+@end group
+@end example
+
+You can associate a literal string token with a token type name by
+writing the literal string at the end of a @code{%token}
+declaration which declares the name.  For example:
+
+@example
+%token arrow "=>"
+@end example
+
+@noindent
+For example, a grammar for the C language might specify these names with
+equivalent literal string tokens:
+
+@example
+%token  <operator>  OR      "||"
+%token  <operator>  LE 134  "<="
+%left  OR  "<="
+@end example
+
+@noindent
+Once you equate the literal string and the token name, you can use them
+interchangeably in further declarations or the grammar rules.  The
+@code{yylex} function can use the token name or the literal string to
+obtain the token type code number (@pxref{Calling Convention}).
+Syntax error messages passed to @code{yyerror} from the parser will reference
+the literal string instead of the token name.
+
+The token numbered as 0 corresponds to end of file; the following line
+allows for nicer error messages referring to ``end of file'' instead
+of ``$end'':
+
+@example
+%token END 0 "end of file"
+@end example
+
+@node Precedence Decl
+@subsection Operator Precedence
+@cindex precedence declarations
+@cindex declaring operator precedence
+@cindex operator precedence, declaring
+
+Use the @code{%left}, @code{%right} or @code{%nonassoc} declaration to
+declare a token and specify its precedence and associativity, all at
+once.  These are called @dfn{precedence declarations}.
+@xref{Precedence, ,Operator Precedence}, for general information on
+operator precedence.
+
+The syntax of a precedence declaration is nearly the same as that of
+@code{%token}: either
+
+@example
+%left @var{symbols}@dots{}
+@end example
+
+@noindent
+or
+
+@example
+%left <@var{type}> @var{symbols}@dots{}
+@end example
+
+And indeed any of these declarations serves the purposes of @code{%token}.
+But in addition, they specify the associativity and relative precedence for
+all the @var{symbols}:
+
+@itemize @bullet
+@item
+The associativity of an operator @var{op} determines how repeated uses
+of the operator nest: whether @samp{@var{x} @var{op} @var{y} @var{op}
+@var{z}} is parsed by grouping @var{x} with @var{y} first or by
+grouping @var{y} with @var{z} first.  @code{%left} specifies
+left-associativity (grouping @var{x} with @var{y} first) and
+@code{%right} specifies right-associativity (grouping @var{y} with
+@var{z} first).  @code{%nonassoc} specifies no associativity, which
+means that @samp{@var{x} @var{op} @var{y} @var{op} @var{z}} is
+considered a syntax error.
+
+@item
+The precedence of an operator determines how it nests with other operators.
+All the tokens declared in a single precedence declaration have equal
+precedence and nest together according to their associativity.
+When two tokens declared in different precedence declarations associate,
+the one declared later has the higher precedence and is grouped first.
+@end itemize
+
+For backward compatibility, there is a confusing difference between the
+argument lists of @code{%token} and precedence declarations.
+Only a @code{%token} can associate a literal string with a token type name.
+A precedence declaration always interprets a literal string as a reference to a
+separate token.
+For example:
+
+@example
+%left  OR "<="         // Does not declare an alias.
+%left  OR 134 "<=" 135 // Declares 134 for OR and 135 for "<=".
+@end example
+
+@node Union Decl
+@subsection The Collection of Value Types
+@cindex declaring value types
+@cindex value types, declaring
+@findex %union
+
+The @code{%union} declaration specifies the entire collection of
+possible data types for semantic values.  The keyword @code{%union} is
+followed by braced code containing the same thing that goes inside a
+@code{union} in C@.
+
+For example:
+
+@example
+@group
+%union @{
+  double val;
+  symrec *tptr;
+@}
+@end group
+@end example
+
+@noindent
+This says that the two alternative types are @code{double} and @code{symrec
+*}.  They are given names @code{val} and @code{tptr}; these names are used
+in the @code{%token} and @code{%type} declarations to pick one of the types
+for a terminal or nonterminal symbol (@pxref{Type Decl, ,Nonterminal Symbols}).
+
+As an extension to POSIX, a tag is allowed after the
+@code{union}.  For example:
+
+@example
+@group
+%union value @{
+  double val;
+  symrec *tptr;
+@}
+@end group
+@end example
+
+@noindent
+specifies the union tag @code{value}, so the corresponding C type is
+@code{union value}.  If you do not specify a tag, it defaults to
+@code{YYSTYPE}.
+
+As another extension to POSIX, you may specify multiple
+@code{%union} declarations; their contents are concatenated.  However,
+only the first @code{%union} declaration can specify a tag.
+
+Note that, unlike making a @code{union} declaration in C, you need not write
+a semicolon after the closing brace.
+
+Instead of @code{%union}, you can define and use your own union type
+@code{YYSTYPE} if your grammar contains at least one
+@samp{<@var{type}>} tag.  For example, you can put the following into
+a header file @file{parser.h}:
+
+@example
+@group
+union YYSTYPE @{
+  double val;
+  symrec *tptr;
+@};
+typedef union YYSTYPE YYSTYPE;
+@end group
+@end example
+
+@noindent
+and then your grammar can use the following
+instead of @code{%union}:
+
+@example
+@group
+%@{
+#include "parser.h"
+%@}
+%type <val> expr
+%token <tptr> ID
+@end group
+@end example
+
+@node Type Decl
+@subsection Nonterminal Symbols
+@cindex declaring value types, nonterminals
+@cindex value types, nonterminals, declaring
+@findex %type
+
+@noindent
+When you use @code{%union} to specify multiple value types, you must
+declare the value type of each nonterminal symbol for which values are
+used.  This is done with a @code{%type} declaration, like this:
+
+@example
+%type <@var{type}> @var{nonterminal}@dots{}
+@end example
+
+@noindent
+Here @var{nonterminal} is the name of a nonterminal symbol, and
+@var{type} is the name given in the @code{%union} to the alternative
+that you want (@pxref{Union Decl, ,The Collection of Value Types}).  You
+can give any number of nonterminal symbols in the same @code{%type}
+declaration, if they have the same value type.  Use spaces to separate
+the symbol names.
+
+You can also declare the value type of a terminal symbol.  To do this,
+use the same @code{<@var{type}>} construction in a declaration for the
+terminal symbol.  All kinds of token declarations allow
+@code{<@var{type}>}.
+
+@node Initial Action Decl
+@subsection Performing Actions before Parsing
+@findex %initial-action
+
+Sometimes your parser needs to perform some initializations before
+parsing.  The @code{%initial-action} directive allows for such arbitrary
+code.
+
+@deffn {Directive} %initial-action @{ @var{code} @}
+@findex %initial-action
+Declare that the braced @var{code} must be invoked before parsing each time
+@code{yyparse} is called.  The @var{code} may use @code{$$} (or
+@code{$<@var{tag}>$}) and @code{@@$} --- initial value and location of the
+lookahead --- and the @code{%parse-param}.
+@end deffn
+
+For instance, if your locations use a file name, you may use
+
+@example
+%parse-param @{ char const *file_name @};
+%initial-action
+@{
+  @@$.initialize (file_name);
+@};
+@end example
+
+
+@node Destructor Decl
+@subsection Freeing Discarded Symbols
+@cindex freeing discarded symbols
+@findex %destructor
+@findex <*>
+@findex <>
+During error recovery (@pxref{Error Recovery}), symbols already pushed
+on the stack and tokens coming from the rest of the file are discarded
+until the parser falls on its feet.  If the parser runs out of memory,
+or if it returns via @code{YYABORT} or @code{YYACCEPT}, all the
+symbols on the stack must be discarded.  Even if the parser succeeds, it
+must discard the start symbol.
+
+When discarded symbols convey heap based information, this memory is
+lost.  While this behavior can be tolerable for batch parsers, such as
+in traditional compilers, it is unacceptable for programs like shells or
+protocol implementations that may parse and execute indefinitely.
+
+The @code{%destructor} directive defines code that is called when a
+symbol is automatically discarded.
+
+@deffn {Directive} %destructor @{ @var{code} @} @var{symbols}
+@findex %destructor
+Invoke the braced @var{code} whenever the parser discards one of the
+@var{symbols}.  Within @var{code}, @code{$$} (or @code{$<@var{tag}>$})
+designates the semantic value associated with the discarded symbol, and
+@code{@@$} designates its location.  The additional parser parameters are
+also available (@pxref{Parser Function, , The Parser Function
+@code{yyparse}}).
+
+When a symbol is listed among @var{symbols}, its @code{%destructor} is called a
+per-symbol @code{%destructor}.
+You may also define a per-type @code{%destructor} by listing a semantic type
+tag among @var{symbols}.
+In that case, the parser will invoke this @var{code} whenever it discards any
+grammar symbol that has that semantic type tag unless that symbol has its own
+per-symbol @code{%destructor}.
+
+Finally, you can define two different kinds of default @code{%destructor}s.
+(These default forms are experimental.
+More user feedback will help to determine whether they should become permanent
+features.)
+You can place each of @code{<*>} and @code{<>} in the @var{symbols} list of
+exactly one @code{%destructor} declaration in your grammar file.
+The parser will invoke the @var{code} associated with one of these whenever it
+discards any user-defined grammar symbol that has no per-symbol and no per-type
+@code{%destructor}.
+The parser uses the @var{code} for @code{<*>} in the case of such a grammar
+symbol for which you have formally declared a semantic type tag (@code{%type}
+counts as such a declaration, but @code{$<tag>$} does not).
+The parser uses the @var{code} for @code{<>} in the case of such a grammar
+symbol that has no declared semantic type tag.
+@end deffn
+
+@noindent
+For example:
+
+@example
+%union @{ char *string; @}
+%token <string> STRING1
+%token <string> STRING2
+%type  <string> string1
+%type  <string> string2
+%union @{ char character; @}
+%token <character> CHR
+%type  <character> chr
+%token TAGLESS
+
+%destructor @{ @} <character>
+%destructor @{ free ($$); @} <*>
+%destructor @{ free ($$); printf ("%d", @@$.first_line); @} STRING1 string1
+%destructor @{ printf ("Discarding tagless symbol.\n"); @} <>
+@end example
+
+@noindent
+guarantees that, when the parser discards any user-defined symbol that has a
+semantic type tag other than @code{<character>}, it passes its semantic value
+to @code{free} by default.
+However, when the parser discards a @code{STRING1} or a @code{string1}, it also
+prints its line number to @code{stdout}.
+It performs only the second @code{%destructor} in this case, so it invokes
+@code{free} only once.
+Finally, the parser merely prints a message whenever it discards any symbol,
+such as @code{TAGLESS}, that has no semantic type tag.
+
+A Bison-generated parser invokes the default @code{%destructor}s only for
+user-defined as opposed to Bison-defined symbols.
+For example, the parser will not invoke either kind of default
+@code{%destructor} for the special Bison-defined symbols @code{$accept},
+@code{$undefined}, or @code{$end} (@pxref{Table of Symbols, ,Bison Symbols}),
+none of which you can reference in your grammar.
+It also will not invoke either for the @code{error} token (@pxref{Table of
+Symbols, ,error}), which is always defined by Bison regardless of whether you
+reference it in your grammar.
+However, it may invoke one of them for the end token (token 0) if you
+redefine it from @code{$end} to, for example, @code{END}:
+
+@example
+%token END 0
+@end example
+
+@cindex actions in mid-rule
+@cindex mid-rule actions
+Finally, Bison will never invoke a @code{%destructor} for an unreferenced
+mid-rule semantic value (@pxref{Mid-Rule Actions,,Actions in Mid-Rule}).
+That is, Bison does not consider a mid-rule to have a semantic value if you
+do not reference @code{$$} in the mid-rule's action or @code{$@var{n}}
+(where @var{n} is the right-hand side symbol position of the mid-rule) in
+any later action in that rule.  However, if you do reference either, the
+Bison-generated parser will invoke the @code{<>} @code{%destructor} whenever
+it discards the mid-rule symbol.
+
+@ignore
+@noindent
+In the future, it may be possible to redefine the @code{error} token as a
+nonterminal that captures the discarded symbols.
+In that case, the parser will invoke the default destructor for it as well.
+@end ignore
+
+@sp 1
+
+@cindex discarded symbols
+@dfn{Discarded symbols} are the following:
+
+@itemize
+@item
+stacked symbols popped during the first phase of error recovery,
+@item
+incoming terminals during the second phase of error recovery,
+@item
+the current lookahead and the entire stack (except the current
+right-hand side symbols) when the parser returns immediately, and
+@item
+the current lookahead and the entire stack (including the current right-hand
+side symbols) when the C++ parser (@file{lalr1.cc}) catches an exception in
+@code{parse},
+@item
+the start symbol, when the parser succeeds.
+@end itemize
+
+The parser can @dfn{return immediately} because of an explicit call to
+@code{YYABORT} or @code{YYACCEPT}, or failed error recovery, or memory
+exhaustion.
+
+Right-hand side symbols of a rule that explicitly triggers a syntax
+error via @code{YYERROR} are not discarded automatically.  As a rule
+of thumb, destructors are invoked only when user actions cannot manage
+the memory.
+
+@node Printer Decl
+@subsection Printing Semantic Values
+@cindex printing semantic values
+@findex %printer
+@findex <*>
+@findex <>
+When run-time traces are enabled (@pxref{Tracing, ,Tracing Your Parser}),
+the parser reports its actions, such as reductions.  When a symbol involved
+in an action is reported, only its kind is displayed, as the parser cannot
+know how semantic values should be formatted.
+
+The @code{%printer} directive defines code that is called when a symbol is
+reported.  Its syntax is the same as @code{%destructor} (@pxref{Destructor
+Decl, , Freeing Discarded Symbols}).
+
+@deffn {Directive} %printer @{ @var{code} @} @var{symbols}
+@findex %printer
+@vindex yyoutput
+@c This is the same text as for %destructor.
+Invoke the braced @var{code} whenever the parser displays one of the
+@var{symbols}.  Within @var{code}, @code{yyoutput} denotes the output stream
+(a @code{FILE*} in C, and an @code{std::ostream&} in C++), @code{$$} (or
+@code{$<@var{tag}>$}) designates the semantic value associated with the
+symbol, and @code{@@$} its location.  The additional parser parameters are
+also available (@pxref{Parser Function, , The Parser Function
+@code{yyparse}}).
+
+The @var{symbols} are defined as for @code{%destructor} (@pxref{Destructor
+Decl, , Freeing Discarded Symbols}.): they can be per-type (e.g.,
+@samp{<ival>}), per-symbol (e.g., @samp{exp}, @samp{NUM}, @samp{"float"}),
+typed per-default (i.e., @samp{<*>}, or untyped per-default (i.e.,
+@samp{<>}).
+@end deffn
+
+@noindent
+For example:
+
+@example
+%union @{ char *string; @}
+%token <string> STRING1
+%token <string> STRING2
+%type  <string> string1
+%type  <string> string2
+%union @{ char character; @}
+%token <character> CHR
+%type  <character> chr
+%token TAGLESS
+
+%printer @{ fprintf (yyoutput, "'%c'", $$); @} <character>
+%printer @{ fprintf (yyoutput, "&%p", $$); @} <*>
+%printer @{ fprintf (yyoutput, "\"%s\"", $$); @} STRING1 string1
+%printer @{ fprintf (yyoutput, "<>"); @} <>
+@end example
+
+@noindent
+guarantees that, when the parser print any symbol that has a semantic type
+tag other than @code{<character>}, it display the address of the semantic
+value by default.  However, when the parser displays a @code{STRING1} or a
+@code{string1}, it formats it as a string in double quotes.  It performs
+only the second @code{%printer} in this case, so it prints only once.
+Finally, the parser print @samp{<>} for any symbol, such as @code{TAGLESS},
+that has no semantic type tag.  See also
+
+
+@node Expect Decl
+@subsection Suppressing Conflict Warnings
+@cindex suppressing conflict warnings
+@cindex preventing warnings about conflicts
+@cindex warnings, preventing
+@cindex conflicts, suppressing warnings of
+@findex %expect
+@findex %expect-rr
+
+Bison normally warns if there are any conflicts in the grammar
+(@pxref{Shift/Reduce, ,Shift/Reduce Conflicts}), but most real grammars
+have harmless shift/reduce conflicts which are resolved in a predictable
+way and would be difficult to eliminate.  It is desirable to suppress
+the warning about these conflicts unless the number of conflicts
+changes.  You can do this with the @code{%expect} declaration.
+
+The declaration looks like this:
+
+@example
+%expect @var{n}
+@end example
+
+Here @var{n} is a decimal integer.  The declaration says there should
+be @var{n} shift/reduce conflicts and no reduce/reduce conflicts.
+Bison reports an error if the number of shift/reduce conflicts differs
+from @var{n}, or if there are any reduce/reduce conflicts.
+
+For deterministic parsers, reduce/reduce conflicts are more
+serious, and should be eliminated entirely.  Bison will always report
+reduce/reduce conflicts for these parsers.  With GLR
+parsers, however, both kinds of conflicts are routine; otherwise,
+there would be no need to use GLR parsing.  Therefore, it is
+also possible to specify an expected number of reduce/reduce conflicts
+in GLR parsers, using the declaration:
+
+@example
+%expect-rr @var{n}
+@end example
+
+In general, using @code{%expect} involves these steps:
+
+@itemize @bullet
+@item
+Compile your grammar without @code{%expect}.  Use the @samp{-v} option
+to get a verbose list of where the conflicts occur.  Bison will also
+print the number of conflicts.
+
+@item
+Check each of the conflicts to make sure that Bison's default
+resolution is what you really want.  If not, rewrite the grammar and
+go back to the beginning.
+
+@item
+Add an @code{%expect} declaration, copying the number @var{n} from the
+number which Bison printed.  With GLR parsers, add an
+@code{%expect-rr} declaration as well.
+@end itemize
+
+Now Bison will report an error if you introduce an unexpected conflict,
+but will keep silent otherwise.
+
+@node Start Decl
+@subsection The Start-Symbol
+@cindex declaring the start symbol
+@cindex start symbol, declaring
+@cindex default start symbol
+@findex %start
+
+Bison assumes by default that the start symbol for the grammar is the first
+nonterminal specified in the grammar specification section.  The programmer
+may override this restriction with the @code{%start} declaration as follows:
+
+@example
+%start @var{symbol}
+@end example
+
+@node Pure Decl
+@subsection A Pure (Reentrant) Parser
+@cindex reentrant parser
+@cindex pure parser
+@findex %define api.pure
+
+A @dfn{reentrant} program is one which does not alter in the course of
+execution; in other words, it consists entirely of @dfn{pure} (read-only)
+code.  Reentrancy is important whenever asynchronous execution is possible;
+for example, a nonreentrant program may not be safe to call from a signal
+handler.  In systems with multiple threads of control, a nonreentrant
+program must be called only within interlocks.
+
+Normally, Bison generates a parser which is not reentrant.  This is
+suitable for most uses, and it permits compatibility with Yacc.  (The
+standard Yacc interfaces are inherently nonreentrant, because they use
+statically allocated variables for communication with @code{yylex},
+including @code{yylval} and @code{yylloc}.)
+
+Alternatively, you can generate a pure, reentrant parser.  The Bison
+declaration @code{%define api.pure} says that you want the parser to be
+reentrant.  It looks like this:
+
+@example
+%define api.pure full
+@end example
+
+The result is that the communication variables @code{yylval} and
+@code{yylloc} become local variables in @code{yyparse}, and a different
+calling convention is used for the lexical analyzer function
+@code{yylex}.  @xref{Pure Calling, ,Calling Conventions for Pure
+Parsers}, for the details of this.  The variable @code{yynerrs}
+becomes local in @code{yyparse} in pull mode but it becomes a member
+of yypstate in push mode.  (@pxref{Error Reporting, ,The Error
+Reporting Function @code{yyerror}}).  The convention for calling
+@code{yyparse} itself is unchanged.
+
+Whether the parser is pure has nothing to do with the grammar rules.
+You can generate either a pure parser or a nonreentrant parser from any
+valid grammar.
+
+@node Push Decl
+@subsection A Push Parser
+@cindex push parser
+@cindex push parser
+@findex %define api.push-pull
+
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+
+A pull parser is called once and it takes control until all its input
+is completely parsed.  A push parser, on the other hand, is called
+each time a new token is made available.
+
+A push parser is typically useful when the parser is part of a
+main event loop in the client's application.  This is typically
+a requirement of a GUI, when the main event loop needs to be triggered
+within a certain time period.
+
+Normally, Bison generates a pull parser.
+The following Bison declaration says that you want the parser to be a push
+parser (@pxref{%define Summary,,api.push-pull}):
+
+@example
+%define api.push-pull push
+@end example
+
+In almost all cases, you want to ensure that your push parser is also
+a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).  The only
+time you should create an impure push parser is to have backwards
+compatibility with the impure Yacc pull mode interface.  Unless you know
+what you are doing, your declarations should look like this:
+
+@example
+%define api.pure full
+%define api.push-pull push
+@end example
+
+There is a major notable functional difference between the pure push parser
+and the impure push parser.  It is acceptable for a pure push parser to have
+many parser instances, of the same type of parser, in memory at the same time.
+An impure push parser should only use one parser at a time.
+
+When a push parser is selected, Bison will generate some new symbols in
+the generated parser.  @code{yypstate} is a structure that the generated
+parser uses to store the parser's state.  @code{yypstate_new} is the
+function that will create a new parser instance.  @code{yypstate_delete}
+will free the resources associated with the corresponding parser instance.
+Finally, @code{yypush_parse} is the function that should be called whenever a
+token is available to provide the parser.  A trivial example
+of using a pure push parser would look like this:
+
+@example
+int status;
+yypstate *ps = yypstate_new ();
+do @{
+  status = yypush_parse (ps, yylex (), NULL);
+@} while (status == YYPUSH_MORE);
+yypstate_delete (ps);
+@end example
+
+If the user decided to use an impure push parser, a few things about
+the generated parser will change.  The @code{yychar} variable becomes
+a global variable instead of a variable in the @code{yypush_parse} function.
+For this reason, the signature of the @code{yypush_parse} function is
+changed to remove the token as a parameter.  A nonreentrant push parser
+example would thus look like this:
+
+@example
+extern int yychar;
+int status;
+yypstate *ps = yypstate_new ();
+do @{
+  yychar = yylex ();
+  status = yypush_parse (ps);
+@} while (status == YYPUSH_MORE);
+yypstate_delete (ps);
+@end example
+
+That's it. Notice the next token is put into the global variable @code{yychar}
+for use by the next invocation of the @code{yypush_parse} function.
+
+Bison also supports both the push parser interface along with the pull parser
+interface in the same generated parser.  In order to get this functionality,
+you should replace the @code{%define api.push-pull push} declaration with the
+@code{%define api.push-pull both} declaration.  Doing this will create all of
+the symbols mentioned earlier along with the two extra symbols, @code{yyparse}
+and @code{yypull_parse}.  @code{yyparse} can be used exactly as it normally
+would be used.  However, the user should note that it is implemented in the
+generated parser by calling @code{yypull_parse}.
+This makes the @code{yyparse} function that is generated with the
+@code{%define api.push-pull both} declaration slower than the normal
+@code{yyparse} function.  If the user
+calls the @code{yypull_parse} function it will parse the rest of the input
+stream.  It is possible to @code{yypush_parse} tokens to select a subgrammar
+and then @code{yypull_parse} the rest of the input stream.  If you would like
+to switch back and forth between between parsing styles, you would have to
+write your own @code{yypull_parse} function that knows when to quit looking
+for input.  An example of using the @code{yypull_parse} function would look
+like this:
+
+@example
+yypstate *ps = yypstate_new ();
+yypull_parse (ps); /* Will call the lexer */
+yypstate_delete (ps);
+@end example
+
+Adding the @code{%define api.pure full} declaration does exactly the same thing
+to the generated parser with @code{%define api.push-pull both} as it did for
+@code{%define api.push-pull push}.
+
+@node Decl Summary
+@subsection Bison Declaration Summary
+@cindex Bison declaration summary
+@cindex declaration summary
+@cindex summary, Bison declaration
+
+Here is a summary of the declarations used to define a grammar:
+
+@deffn {Directive} %union
+Declare the collection of data types that semantic values may have
+(@pxref{Union Decl, ,The Collection of Value Types}).
+@end deffn
+
+@deffn {Directive} %token
+Declare a terminal symbol (token type name) with no precedence
+or associativity specified (@pxref{Token Decl, ,Token Type Names}).
+@end deffn
+
+@deffn {Directive} %right
+Declare a terminal symbol (token type name) that is right-associative
+(@pxref{Precedence Decl, ,Operator Precedence}).
+@end deffn
+
+@deffn {Directive} %left
+Declare a terminal symbol (token type name) that is left-associative
+(@pxref{Precedence Decl, ,Operator Precedence}).
+@end deffn
+
+@deffn {Directive} %nonassoc
+Declare a terminal symbol (token type name) that is nonassociative
+(@pxref{Precedence Decl, ,Operator Precedence}).
+Using it in a way that would be associative is a syntax error.
+@end deffn
+
+@ifset defaultprec
+@deffn {Directive} %default-prec
+Assign a precedence to rules lacking an explicit @code{%prec} modifier
+(@pxref{Contextual Precedence, ,Context-Dependent Precedence}).
+@end deffn
+@end ifset
+
+@deffn {Directive} %type
+Declare the type of semantic values for a nonterminal symbol
+(@pxref{Type Decl, ,Nonterminal Symbols}).
+@end deffn
+
+@deffn {Directive} %start
+Specify the grammar's start symbol (@pxref{Start Decl, ,The
+Start-Symbol}).
+@end deffn
+
+@deffn {Directive} %expect
+Declare the expected number of shift-reduce conflicts
+(@pxref{Expect Decl, ,Suppressing Conflict Warnings}).
+@end deffn
+
+
+@sp 1
+@noindent
+In order to change the behavior of @command{bison}, use the following
+directives:
+
+@deffn {Directive} %code @{@var{code}@}
+@deffnx {Directive} %code @var{qualifier} @{@var{code}@}
+@findex %code
+Insert @var{code} verbatim into the output parser source at the
+default location or at the location specified by @var{qualifier}.
+@xref{%code Summary}.
+@end deffn
+
+@deffn {Directive} %debug
+In the parser implementation file, define the macro @code{YYDEBUG} (or
+@code{@var{prefix}DEBUG} with @samp{%define api.prefix @var{prefix}}, see
+@ref{Multiple Parsers, ,Multiple Parsers in the Same Program}) to 1 if it is
+not already defined, so that the debugging facilities are compiled.
+@xref{Tracing, ,Tracing Your Parser}.
+@end deffn
+
+@deffn {Directive} %define @var{variable}
+@deffnx {Directive} %define @var{variable} @var{value}
+@deffnx {Directive} %define @var{variable} "@var{value}"
+Define a variable to adjust Bison's behavior.  @xref{%define Summary}.
+@end deffn
+
+@deffn {Directive} %defines
+Write a parser header file containing macro definitions for the token
+type names defined in the grammar as well as a few other declarations.
+If the parser implementation file is named @file{@var{name}.c} then
+the parser header file is named @file{@var{name}.h}.
+
+For C parsers, the parser header file declares @code{YYSTYPE} unless
+@code{YYSTYPE} is already defined as a macro or you have used a
+@code{<@var{type}>} tag without using @code{%union}.  Therefore, if
+you are using a @code{%union} (@pxref{Multiple Types, ,More Than One
+Value Type}) with components that require other definitions, or if you
+have defined a @code{YYSTYPE} macro or type definition (@pxref{Value
+Type, ,Data Types of Semantic Values}), you need to arrange for these
+definitions to be propagated to all modules, e.g., by putting them in
+a prerequisite header that is included both by your parser and by any
+other module that needs @code{YYSTYPE}.
+
+Unless your parser is pure, the parser header file declares
+@code{yylval} as an external variable.  @xref{Pure Decl, ,A Pure
+(Reentrant) Parser}.
+
+If you have also used locations, the parser header file declares
+@code{YYLTYPE} and @code{yylloc} using a protocol similar to that of the
+@code{YYSTYPE} macro and @code{yylval}.  @xref{Tracking Locations}.
+
+This parser header file is normally essential if you wish to put the
+definition of @code{yylex} in a separate source file, because
+@code{yylex} typically needs to be able to refer to the
+above-mentioned declarations and to the token type codes.  @xref{Token
+Values, ,Semantic Values of Tokens}.
+
+@findex %code requires
+@findex %code provides
+If you have declared @code{%code requires} or @code{%code provides}, the output
+header also contains their code.
+@xref{%code Summary}.
+
+@cindex Header guard
+The generated header is protected against multiple inclusions with a C
+preprocessor guard: @samp{YY_@var{PREFIX}_@var{FILE}_INCLUDED}, where
+@var{PREFIX} and @var{FILE} are the prefix (@pxref{Multiple Parsers,
+,Multiple Parsers in the Same Program}) and generated file name turned
+uppercase, with each series of non alphanumerical characters converted to a
+single underscore.
+
+For instance with @samp{%define api.prefix "calc"} and @samp{%defines
+"lib/parse.h"}, the header will be guarded as follows.
+@example
+#ifndef YY_CALC_LIB_PARSE_H_INCLUDED
+# define YY_CALC_LIB_PARSE_H_INCLUDED
+...
+#endif /* ! YY_CALC_LIB_PARSE_H_INCLUDED */
+@end example
+@end deffn
+
+@deffn {Directive} %defines @var{defines-file}
+Same as above, but save in the file @var{defines-file}.
+@end deffn
+
+@deffn {Directive} %destructor
+Specify how the parser should reclaim the memory associated to
+discarded symbols.  @xref{Destructor Decl, , Freeing Discarded Symbols}.
+@end deffn
+
+@deffn {Directive} %file-prefix "@var{prefix}"
+Specify a prefix to use for all Bison output file names.  The names
+are chosen as if the grammar file were named @file{@var{prefix}.y}.
+@end deffn
+
+@deffn {Directive} %language "@var{language}"
+Specify the programming language for the generated parser.  Currently
+supported languages include C, C++, and Java.
+@var{language} is case-insensitive.
+
+@end deffn
+
+@deffn {Directive} %locations
+Generate the code processing the locations (@pxref{Action Features,
+,Special Features for Use in Actions}).  This mode is enabled as soon as
+the grammar uses the special @samp{@@@var{n}} tokens, but if your
+grammar does not use it, using @samp{%locations} allows for more
+accurate syntax error messages.
+@end deffn
+
+@ifset defaultprec
+@deffn {Directive} %no-default-prec
+Do not assign a precedence to rules lacking an explicit @code{%prec}
+modifier (@pxref{Contextual Precedence, ,Context-Dependent
+Precedence}).
+@end deffn
+@end ifset
+
+@deffn {Directive} %no-lines
+Don't generate any @code{#line} preprocessor commands in the parser
+implementation file.  Ordinarily Bison writes these commands in the
+parser implementation file so that the C compiler and debuggers will
+associate errors and object code with your source file (the grammar
+file).  This directive causes them to associate errors with the parser
+implementation file, treating it as an independent source file in its
+own right.
+@end deffn
+
+@deffn {Directive} %output "@var{file}"
+Specify @var{file} for the parser implementation file.
+@end deffn
+
+@deffn {Directive} %pure-parser
+Deprecated version of @code{%define api.pure} (@pxref{%define
+Summary,,api.pure}), for which Bison is more careful to warn about
+unreasonable usage.
+@end deffn
+
+@deffn {Directive} %require "@var{version}"
+Require version @var{version} or higher of Bison.  @xref{Require Decl, ,
+Require a Version of Bison}.
+@end deffn
+
+@deffn {Directive} %skeleton "@var{file}"
+Specify the skeleton to use.
+
+@c You probably don't need this option unless you are developing Bison.
+@c You should use @code{%language} if you want to specify the skeleton for a
+@c different language, because it is clearer and because it will always choose the
+@c correct skeleton for non-deterministic or push parsers.
+
+If @var{file} does not contain a @code{/}, @var{file} is the name of a skeleton
+file in the Bison installation directory.
+If it does, @var{file} is an absolute file name or a file name relative to the
+directory of the grammar file.
+This is similar to how most shells resolve commands.
+@end deffn
+
+@deffn {Directive} %token-table
+Generate an array of token names in the parser implementation file.
+The name of the array is @code{yytname}; @code{yytname[@var{i}]} is
+the name of the token whose internal Bison token code number is
+@var{i}.  The first three elements of @code{yytname} correspond to the
+predefined tokens @code{"$end"}, @code{"error"}, and
+@code{"$undefined"}; after these come the symbols defined in the
+grammar file.
+
+The name in the table includes all the characters needed to represent
+the token in Bison.  For single-character literals and literal
+strings, this includes the surrounding quoting characters and any
+escape sequences.  For example, the Bison single-character literal
+@code{'+'} corresponds to a three-character name, represented in C as
+@code{"'+'"}; and the Bison two-character literal string @code{"\\/"}
+corresponds to a five-character name, represented in C as
+@code{"\"\\\\/\""}.
+
+When you specify @code{%token-table}, Bison also generates macro
+definitions for macros @code{YYNTOKENS}, @code{YYNNTS}, and
+@code{YYNRULES}, and @code{YYNSTATES}:
+
+@table @code
+@item YYNTOKENS
+The highest token number, plus one.
+@item YYNNTS
+The number of nonterminal symbols.
+@item YYNRULES
+The number of grammar rules,
+@item YYNSTATES
+The number of parser states (@pxref{Parser States}).
+@end table
+@end deffn
+
+@deffn {Directive} %verbose
+Write an extra output file containing verbose descriptions of the
+parser states and what is done for each type of lookahead token in
+that state.  @xref{Understanding, , Understanding Your Parser}, for more
+information.
+@end deffn
+
+@deffn {Directive} %yacc
+Pretend the option @option{--yacc} was given, i.e., imitate Yacc,
+including its naming conventions.  @xref{Bison Options}, for more.
+@end deffn
+
+
+@node %define Summary
+@subsection %define Summary
+
+There are many features of Bison's behavior that can be controlled by
+assigning the feature a single value.  For historical reasons, some
+such features are assigned values by dedicated directives, such as
+@code{%start}, which assigns the start symbol.  However, newer such
+features are associated with variables, which are assigned by the
+@code{%define} directive:
+
+@deffn {Directive} %define @var{variable}
+@deffnx {Directive} %define @var{variable} @var{value}
+@deffnx {Directive} %define @var{variable} "@var{value}"
+Define @var{variable} to @var{value}.
+
+@var{value} must be placed in quotation marks if it contains any
+character other than a letter, underscore, period, or non-initial dash
+or digit.  Omitting @code{"@var{value}"} entirely is always equivalent
+to specifying @code{""}.
+
+It is an error if a @var{variable} is defined by @code{%define}
+multiple times, but see @ref{Bison Options,,-D
+@var{name}[=@var{value}]}.
+@end deffn
+
+The rest of this section summarizes variables and values that
+@code{%define} accepts.
+
+Some @var{variable}s take Boolean values.  In this case, Bison will
+complain if the variable definition does not meet one of the following
+four conditions:
+
+@enumerate
+@item @code{@var{value}} is @code{true}
+
+@item @code{@var{value}} is omitted (or @code{""} is specified).
+This is equivalent to @code{true}.
+
+@item @code{@var{value}} is @code{false}.
+
+@item @var{variable} is never defined.
+In this case, Bison selects a default value.
+@end enumerate
+
+What @var{variable}s are accepted, as well as their meanings and default
+values, depend on the selected target language and/or the parser
+skeleton (@pxref{Decl Summary,,%language}, @pxref{Decl
+Summary,,%skeleton}).
+Unaccepted @var{variable}s produce an error.
+Some of the accepted @var{variable}s are:
+
+@itemize @bullet
+@c ================================================== api.location.type
+@item @code{api.location.type}
+@findex %define api.location.type
+
+@itemize @bullet
+@item Language(s): C++, Java
+
+@item Purpose: Define the location type.
+@xref{User Defined Location Type}.
+
+@item Accepted Values: String
+
+@item Default Value: none
+
+@item History: introduced in Bison 2.7
+@end itemize
+
+@c ================================================== api.prefix
+@item @code{api.prefix}
+@findex %define api.prefix
+
+@itemize @bullet
+@item Language(s): All
+
+@item Purpose: Rename exported symbols.
+@xref{Multiple Parsers, ,Multiple Parsers in the Same Program}.
+
+@item Accepted Values: String
+
+@item Default Value: @code{yy}
+
+@item History: introduced in Bison 2.6
+@end itemize
+
+@c ================================================== api.pure
+@item @code{api.pure}
+@findex %define api.pure
+
+@itemize @bullet
+@item Language(s): C
+
+@item Purpose: Request a pure (reentrant) parser program.
+@xref{Pure Decl, ,A Pure (Reentrant) Parser}.
+
+@item Accepted Values: @code{true}, @code{false}, @code{full}
+
+The value may be omitted: this is equivalent to specifying @code{true}, as is
+the case for Boolean values.
+
+When @code{%define api.pure full} is used, the parser is made reentrant. This
+changes the signature for @code{yylex} (@pxref{Pure Calling}), and also that of
+@code{yyerror} when the tracking of locations has been activated, as shown
+below.
+
+The @code{true} value is very similar to the @code{full} value, the only
+difference is in the signature of @code{yyerror} on Yacc parsers without
+@code{%parse-param}, for historical reasons.
+
+I.e., if @samp{%locations %define api.pure} is passed then the prototypes for
+@code{yyerror} are:
+
+@example
+void yyerror (char const *msg);                 // Yacc parsers.
+void yyerror (YYLTYPE *locp, char const *msg);  // GLR parsers.
+@end example
+
+But if @samp{%locations %define api.pure %parse-param @{int *nastiness@}} is
+used, then both parsers have the same signature:
+
+@example
+void yyerror (YYLTYPE *llocp, int *nastiness, char const *msg);
+@end example
+
+(@pxref{Error Reporting, ,The Error
+Reporting Function @code{yyerror}})
+
+@item Default Value: @code{false}
+
+@item History: the @code{full} value was introduced in Bison 2.7
+@end itemize
+
+@c ================================================== api.push-pull
+
+@item @code{api.push-pull}
+@findex %define api.push-pull
+
+@itemize @bullet
+@item Language(s): C (deterministic parsers only)
+
+@item Purpose: Request a pull parser, a push parser, or both.
+@xref{Push Decl, ,A Push Parser}.
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+
+@item Accepted Values: @code{pull}, @code{push}, @code{both}
+
+@item Default Value: @code{pull}
+@end itemize
+
+@c ================================================== lr.default-reductions
+
+@item @code{lr.default-reductions}
+@findex %define lr.default-reductions
+
+@itemize @bullet
+@item Language(s): all
+
+@item Purpose: Specify the kind of states that are permitted to
+contain default reductions.  @xref{Default Reductions}.  (The ability to
+specify where default reductions should be used is experimental.  More user
+feedback will help to stabilize it.)
+
+@item Accepted Values: @code{most}, @code{consistent}, @code{accepting}
+@item Default Value:
+@itemize
+@item @code{accepting} if @code{lr.type} is @code{canonical-lr}.
+@item @code{most} otherwise.
+@end itemize
+@end itemize
+
+@c ============================================ lr.keep-unreachable-states
+
+@item @code{lr.keep-unreachable-states}
+@findex %define lr.keep-unreachable-states
+
+@itemize @bullet
+@item Language(s): all
+@item Purpose: Request that Bison allow unreachable parser states to
+remain in the parser tables.  @xref{Unreachable States}.
+@item Accepted Values: Boolean
+@item Default Value: @code{false}
+@end itemize
+
+@c ================================================== lr.type
+
+@item @code{lr.type}
+@findex %define lr.type
+
+@itemize @bullet
+@item Language(s): all
+
+@item Purpose: Specify the type of parser tables within the
+LR(1) family.  @xref{LR Table Construction}.  (This feature is experimental.
+More user feedback will help to stabilize it.)
+
+@item Accepted Values: @code{lalr}, @code{ielr}, @code{canonical-lr}
+
+@item Default Value: @code{lalr}
+@end itemize
+
+@c ================================================== namespace
+
+@item @code{namespace}
+@findex %define namespace
+
+@itemize
+@item Languages(s): C++
+
+@item Purpose: Specify the namespace for the parser class.
+For example, if you specify:
+
+@smallexample
+%define namespace "foo::bar"
+@end smallexample
+
+Bison uses @code{foo::bar} verbatim in references such as:
+
+@smallexample
+foo::bar::parser::semantic_type
+@end smallexample
+
+However, to open a namespace, Bison removes any leading @code{::} and then
+splits on any remaining occurrences:
+
+@smallexample
+namespace foo @{ namespace bar @{
+  class position;
+  class location;
+@} @}
+@end smallexample
+
+@item Accepted Values: Any absolute or relative C++ namespace reference without
+a trailing @code{"::"}.
+For example, @code{"foo"} or @code{"::foo::bar"}.
+
+@item Default Value: The value specified by @code{%name-prefix}, which defaults
+to @code{yy}.
+This usage of @code{%name-prefix} is for backward compatibility and can be
+confusing since @code{%name-prefix} also specifies the textual prefix for the
+lexical analyzer function.
+Thus, if you specify @code{%name-prefix}, it is best to also specify
+@code{%define namespace} so that @code{%name-prefix} @emph{only} affects the
+lexical analyzer function.
+For example, if you specify:
+
+@smallexample
+%define namespace "foo"
+%name-prefix "bar::"
+@end smallexample
+
+The parser namespace is @code{foo} and @code{yylex} is referenced as
+@code{bar::lex}.
+@end itemize
+
+@c ================================================== parse.lac
+@item @code{parse.lac}
+@findex %define parse.lac
+
+@itemize
+@item Languages(s): C (deterministic parsers only)
+
+@item Purpose: Enable LAC (lookahead correction) to improve
+syntax error handling.  @xref{LAC}.
+@item Accepted Values: @code{none}, @code{full}
+@item Default Value: @code{none}
+@end itemize
+@end itemize
+
+
+@node %code Summary
+@subsection %code Summary
+@findex %code
+@cindex Prologue
+
+The @code{%code} directive inserts code verbatim into the output
+parser source at any of a predefined set of locations.  It thus serves
+as a flexible and user-friendly alternative to the traditional Yacc
+prologue, @code{%@{@var{code}%@}}.  This section summarizes the
+functionality of @code{%code} for the various target languages
+supported by Bison.  For a detailed discussion of how to use
+@code{%code} in place of @code{%@{@var{code}%@}} for C/C++ and why it
+is advantageous to do so, @pxref{Prologue Alternatives}.
+
+@deffn {Directive} %code @{@var{code}@}
+This is the unqualified form of the @code{%code} directive.  It
+inserts @var{code} verbatim at a language-dependent default location
+in the parser implementation.
+
+For C/C++, the default location is the parser implementation file
+after the usual contents of the parser header file.  Thus, the
+unqualified form replaces @code{%@{@var{code}%@}} for most purposes.
+
+For Java, the default location is inside the parser class.
+@end deffn
+
+@deffn {Directive} %code @var{qualifier} @{@var{code}@}
+This is the qualified form of the @code{%code} directive.
+@var{qualifier} identifies the purpose of @var{code} and thus the
+location(s) where Bison should insert it.  That is, if you need to
+specify location-sensitive @var{code} that does not belong at the
+default location selected by the unqualified @code{%code} form, use
+this form instead.
+@end deffn
+
+For any particular qualifier or for the unqualified form, if there are
+multiple occurrences of the @code{%code} directive, Bison concatenates
+the specified code in the order in which it appears in the grammar
+file.
+
+Not all qualifiers are accepted for all target languages.  Unaccepted
+qualifiers produce an error.  Some of the accepted qualifiers are:
+
+@itemize @bullet
+@item requires
+@findex %code requires
+
+@itemize @bullet
+@item Language(s): C, C++
+
+@item Purpose: This is the best place to write dependency code required for
+@code{YYSTYPE} and @code{YYLTYPE}.
+In other words, it's the best place to define types referenced in @code{%union}
+directives, and it's the best place to override Bison's default @code{YYSTYPE}
+and @code{YYLTYPE} definitions.
+
+@item Location(s): The parser header file and the parser implementation file
+before the Bison-generated @code{YYSTYPE} and @code{YYLTYPE}
+definitions.
+@end itemize
+
+@item provides
+@findex %code provides
+
+@itemize @bullet
+@item Language(s): C, C++
+
+@item Purpose: This is the best place to write additional definitions and
+declarations that should be provided to other modules.
+
+@item Location(s): The parser header file and the parser implementation
+file after the Bison-generated @code{YYSTYPE}, @code{YYLTYPE}, and
+token definitions.
+@end itemize
+
+@item top
+@findex %code top
+
+@itemize @bullet
+@item Language(s): C, C++
+
+@item Purpose: The unqualified @code{%code} or @code{%code requires}
+should usually be more appropriate than @code{%code top}.  However,
+occasionally it is necessary to insert code much nearer the top of the
+parser implementation file.  For example:
+
+@example
+%code top @{
+  #define _GNU_SOURCE
+  #include <stdio.h>
+@}
+@end example
+
+@item Location(s): Near the top of the parser implementation file.
+@end itemize
+
+@item imports
+@findex %code imports
+
+@itemize @bullet
+@item Language(s): Java
+
+@item Purpose: This is the best place to write Java import directives.
+
+@item Location(s): The parser Java file after any Java package directive and
+before any class definitions.
+@end itemize
+@end itemize
+
+Though we say the insertion locations are language-dependent, they are
+technically skeleton-dependent.  Writers of non-standard skeletons
+however should choose their locations consistently with the behavior
+of the standard Bison skeletons.
+
+
+@node Multiple Parsers
+@section Multiple Parsers in the Same Program
+
+Most programs that use Bison parse only one language and therefore contain
+only one Bison parser.  But what if you want to parse more than one language
+with the same program?  Then you need to avoid name conflicts between
+different definitions of functions and variables such as @code{yyparse},
+@code{yylval}.  To use different parsers from the same compilation unit, you
+also need to avoid conflicts on types and macros (e.g., @code{YYSTYPE})
+exported in the generated header.
+
+The easy way to do this is to define the @code{%define} variable
+@code{api.prefix}.  With different @code{api.prefix}s it is guaranteed that
+headers do not conflict when included together, and that compiled objects
+can be linked together too.  Specifying @samp{%define api.prefix
+@var{prefix}} (or passing the option @samp{-Dapi.prefix=@var{prefix}}, see
+@ref{Invocation, ,Invoking Bison}) renames the interface functions and
+variables of the Bison parser to start with @var{prefix} instead of
+@samp{yy}, and all the macros to start by @var{PREFIX} (i.e., @var{prefix}
+upper-cased) instead of @samp{YY}.
+
+The renamed symbols include @code{yyparse}, @code{yylex}, @code{yyerror},
+@code{yynerrs}, @code{yylval}, @code{yylloc}, @code{yychar} and
+@code{yydebug}.  If you use a push parser, @code{yypush_parse},
+@code{yypull_parse}, @code{yypstate}, @code{yypstate_new} and
+@code{yypstate_delete} will also be renamed.  The renamed macros include
+@code{YYSTYPE}, @code{YYLTYPE}, and @code{YYDEBUG}, which is treated
+specifically --- more about this below.
+
+For example, if you use @samp{%define api.prefix c}, the names become
+@code{cparse}, @code{clex}, @dots{}, @code{CSTYPE}, @code{CLTYPE}, and so
+on.
+
+The @code{%define} variable @code{api.prefix} works in two different ways.
+In the implementation file, it works by adding macro definitions to the
+beginning of the parser implementation file, defining @code{yyparse} as
+@code{@var{prefix}parse}, and so on:
+
+@example
+#define YYSTYPE CTYPE
+#define yyparse cparse
+#define yylval  clval
+...
+YYSTYPE yylval;
+int yyparse (void);
+@end example
+
+This effectively substitutes one name for the other in the entire parser
+implementation file, thus the ``original'' names (@code{yylex},
+@code{YYSTYPE}, @dots{}) are also usable in the parser implementation file.
+
+However, in the parser header file, the symbols are defined renamed, for
+instance:
+
+@example
+extern CSTYPE clval;
+int cparse (void);
+@end example
+
+The macro @code{YYDEBUG} is commonly used to enable the tracing support in
+parsers.  To comply with this tradition, when @code{api.prefix} is used,
+@code{YYDEBUG} (not renamed) is used as a default value:
+
+@example
+/* Enabling traces.  */
+#ifndef CDEBUG
+# if defined YYDEBUG
+#  if YYDEBUG
+#   define CDEBUG 1
+#  else
+#   define CDEBUG 0
+#  endif
+# else
+#  define CDEBUG 0
+# endif
+#endif
+#if CDEBUG
+extern int cdebug;
+#endif
+@end example
+
+@sp 2
+
+Prior to Bison 2.6, a feature similar to @code{api.prefix} was provided by
+the obsolete directive @code{%name-prefix} (@pxref{Table of Symbols, ,Bison
+Symbols}) and the option @code{--name-prefix} (@pxref{Bison Options}).
+
+@node Interface
+@chapter Parser C-Language Interface
+@cindex C-language interface
+@cindex interface
+
+The Bison parser is actually a C function named @code{yyparse}.  Here we
+describe the interface conventions of @code{yyparse} and the other
+functions that it needs to use.
+
+Keep in mind that the parser uses many C identifiers starting with
+@samp{yy} and @samp{YY} for internal purposes.  If you use such an
+identifier (aside from those in this manual) in an action or in epilogue
+in the grammar file, you are likely to run into trouble.
+
+@menu
+* Parser Function::         How to call @code{yyparse} and what it returns.
+* Push Parser Function::    How to call @code{yypush_parse} and what it returns.
+* Pull Parser Function::    How to call @code{yypull_parse} and what it returns.
+* Parser Create Function::  How to call @code{yypstate_new} and what it returns.
+* Parser Delete Function::  How to call @code{yypstate_delete} and what it returns.
+* Lexical::                 You must supply a function @code{yylex}
+                              which reads tokens.
+* Error Reporting::         You must supply a function @code{yyerror}.
+* Action Features::         Special features for use in actions.
+* Internationalization::    How to let the parser speak in the user's
+                              native language.
+@end menu
+
+@node Parser Function
+@section The Parser Function @code{yyparse}
+@findex yyparse
+
+You call the function @code{yyparse} to cause parsing to occur.  This
+function reads tokens, executes actions, and ultimately returns when it
+encounters end-of-input or an unrecoverable syntax error.  You can also
+write an action which directs @code{yyparse} to return immediately
+without reading further.
+
+
+@deftypefun int yyparse (void)
+The value returned by @code{yyparse} is 0 if parsing was successful (return
+is due to end-of-input).
+
+The value is 1 if parsing failed because of invalid input, i.e., input
+that contains a syntax error or that causes @code{YYABORT} to be
+invoked.
+
+The value is 2 if parsing failed due to memory exhaustion.
+@end deftypefun
+
+In an action, you can cause immediate return from @code{yyparse} by using
+these macros:
+
+@defmac YYACCEPT
+@findex YYACCEPT
+Return immediately with value 0 (to report success).
+@end defmac
+
+@defmac YYABORT
+@findex YYABORT
+Return immediately with value 1 (to report failure).
+@end defmac
+
+If you use a reentrant parser, you can optionally pass additional
+parameter information to it in a reentrant way.  To do so, use the
+declaration @code{%parse-param}:
+
+@deffn {Directive} %parse-param @{@var{argument-declaration}@}
+@findex %parse-param
+Declare that an argument declared by the braced-code
+@var{argument-declaration} is an additional @code{yyparse} argument.
+The @var{argument-declaration} is used when declaring
+functions or prototypes.  The last identifier in
+@var{argument-declaration} must be the argument name.
+@end deffn
+
+Here's an example.  Write this in the parser:
+
+@example
+%parse-param @{int *nastiness@}
+%parse-param @{int *randomness@}
+@end example
+
+@noindent
+Then call the parser like this:
+
+@example
+@{
+  int nastiness, randomness;
+  @dots{}  /* @r{Store proper data in @code{nastiness} and @code{randomness}.}  */
+  value = yyparse (&nastiness, &randomness);
+  @dots{}
+@}
+@end example
+
+@noindent
+In the grammar actions, use expressions like this to refer to the data:
+
+@example
+exp: @dots{}    @{ @dots{}; *randomness += 1; @dots{} @}
+@end example
+
+@noindent
+Using the following:
+@example
+%parse-param @{int *randomness@}
+@end example
+
+Results in these signatures:
+@example
+void yyerror (int *randomness, const char *msg);
+int  yyparse (int *randomness);
+@end example
+
+@noindent
+Or, if both @code{%define api.pure full} (or just @code{%define api.pure})
+and @code{%locations} are used:
+
+@example
+void yyerror (YYLTYPE *llocp, int *randomness, const char *msg);
+int  yyparse (int *randomness);
+@end example
+
+@node Push Parser Function
+@section The Push Parser Function @code{yypush_parse}
+@findex yypush_parse
+
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+
+You call the function @code{yypush_parse} to parse a single token.  This
+function is available if either the @code{%define api.push-pull push} or
+@code{%define api.push-pull both} declaration is used.
+@xref{Push Decl, ,A Push Parser}.
+
+@deftypefun int yypush_parse (yypstate *yyps)
+The value returned by @code{yypush_parse} is the same as for yyparse with
+the following exception: it returns @code{YYPUSH_MORE} if more input is
+required to finish parsing the grammar.
+@end deftypefun
+
+@node Pull Parser Function
+@section The Pull Parser Function @code{yypull_parse}
+@findex yypull_parse
+
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+
+You call the function @code{yypull_parse} to parse the rest of the input
+stream.  This function is available if the @code{%define api.push-pull both}
+declaration is used.
+@xref{Push Decl, ,A Push Parser}.
+
+@deftypefun int yypull_parse (yypstate *yyps)
+The value returned by @code{yypull_parse} is the same as for @code{yyparse}.
+@end deftypefun
+
+@node Parser Create Function
+@section The Parser Create Function @code{yystate_new}
+@findex yypstate_new
+
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+
+You call the function @code{yypstate_new} to create a new parser instance.
+This function is available if either the @code{%define api.push-pull push} or
+@code{%define api.push-pull both} declaration is used.
+@xref{Push Decl, ,A Push Parser}.
+
+@deftypefun {yypstate*} yypstate_new (void)
+The function will return a valid parser instance if there was memory available
+or 0 if no memory was available.
+In impure mode, it will also return 0 if a parser instance is currently
+allocated.
+@end deftypefun
+
+@node Parser Delete Function
+@section The Parser Delete Function @code{yystate_delete}
+@findex yypstate_delete
+
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+
+You call the function @code{yypstate_delete} to delete a parser instance.
+function is available if either the @code{%define api.push-pull push} or
+@code{%define api.push-pull both} declaration is used.
+@xref{Push Decl, ,A Push Parser}.
+
+@deftypefun void yypstate_delete (yypstate *yyps)
+This function will reclaim the memory associated with a parser instance.
+After this call, you should no longer attempt to use the parser instance.
+@end deftypefun
+
+@node Lexical
+@section The Lexical Analyzer Function @code{yylex}
+@findex yylex
+@cindex lexical analyzer
+
+The @dfn{lexical analyzer} function, @code{yylex}, recognizes tokens from
+the input stream and returns them to the parser.  Bison does not create
+this function automatically; you must write it so that @code{yyparse} can
+call it.  The function is sometimes referred to as a lexical scanner.
+
+In simple programs, @code{yylex} is often defined at the end of the
+Bison grammar file.  If @code{yylex} is defined in a separate source
+file, you need to arrange for the token-type macro definitions to be
+available there.  To do this, use the @samp{-d} option when you run
+Bison, so that it will write these macro definitions into the separate
+parser header file, @file{@var{name}.tab.h}, which you can include in
+the other source files that need it.  @xref{Invocation, ,Invoking
+Bison}.
+
+@menu
+* Calling Convention::  How @code{yyparse} calls @code{yylex}.
+* Token Values::        How @code{yylex} must return the semantic value
+                          of the token it has read.
+* Token Locations::     How @code{yylex} must return the text location
+                          (line number, etc.) of the token, if the
+                          actions want that.
+* Pure Calling::        How the calling convention differs in a pure parser
+                          (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
+@end menu
+
+@node Calling Convention
+@subsection Calling Convention for @code{yylex}
+
+The value that @code{yylex} returns must be the positive numeric code
+for the type of token it has just found; a zero or negative value
+signifies end-of-input.
+
+When a token is referred to in the grammar rules by a name, that name
+in the parser implementation file becomes a C macro whose definition
+is the proper numeric code for that token type.  So @code{yylex} can
+use the name to indicate that type.  @xref{Symbols}.
+
+When a token is referred to in the grammar rules by a character literal,
+the numeric code for that character is also the code for the token type.
+So @code{yylex} can simply return that character code, possibly converted
+to @code{unsigned char} to avoid sign-extension.  The null character
+must not be used this way, because its code is zero and that
+signifies end-of-input.
+
+Here is an example showing these things:
+
+@example
+int
+yylex (void)
+@{
+  @dots{}
+  if (c == EOF)    /* Detect end-of-input.  */
+    return 0;
+  @dots{}
+  if (c == '+' || c == '-')
+    return c;      /* Assume token type for `+' is '+'.  */
+  @dots{}
+  return INT;      /* Return the type of the token.  */
+  @dots{}
+@}
+@end example
+
+@noindent
+This interface has been designed so that the output from the @code{lex}
+utility can be used without change as the definition of @code{yylex}.
+
+If the grammar uses literal string tokens, there are two ways that
+@code{yylex} can determine the token type codes for them:
+
+@itemize @bullet
+@item
+If the grammar defines symbolic token names as aliases for the
+literal string tokens, @code{yylex} can use these symbolic names like
+all others.  In this case, the use of the literal string tokens in
+the grammar file has no effect on @code{yylex}.
+
+@item
+@code{yylex} can find the multicharacter token in the @code{yytname}
+table.  The index of the token in the table is the token type's code.
+The name of a multicharacter token is recorded in @code{yytname} with a
+double-quote, the token's characters, and another double-quote.  The
+token's characters are escaped as necessary to be suitable as input
+to Bison.
+
+Here's code for looking up a multicharacter token in @code{yytname},
+assuming that the characters of the token are stored in
+@code{token_buffer}, and assuming that the token does not contain any
+characters like @samp{"} that require escaping.
+
+@example
+for (i = 0; i < YYNTOKENS; i++)
+  @{
+    if (yytname[i] != 0
+        && yytname[i][0] == '"'
+        && ! strncmp (yytname[i] + 1, token_buffer,
+                      strlen (token_buffer))
+        && yytname[i][strlen (token_buffer) + 1] == '"'
+        && yytname[i][strlen (token_buffer) + 2] == 0)
+      break;
+  @}
+@end example
+
+The @code{yytname} table is generated only if you use the
+@code{%token-table} declaration.  @xref{Decl Summary}.
+@end itemize
+
+@node Token Values
+@subsection Semantic Values of Tokens
+
+@vindex yylval
+In an ordinary (nonreentrant) parser, the semantic value of the token must
+be stored into the global variable @code{yylval}.  When you are using
+just one data type for semantic values, @code{yylval} has that type.
+Thus, if the type is @code{int} (the default), you might write this in
+@code{yylex}:
+
+@example
+@group
+  @dots{}
+  yylval = value;  /* Put value onto Bison stack.  */
+  return INT;      /* Return the type of the token.  */
+  @dots{}
+@end group
+@end example
+
+When you are using multiple data types, @code{yylval}'s type is a union
+made from the @code{%union} declaration (@pxref{Union Decl, ,The
+Collection of Value Types}).  So when you store a token's value, you
+must use the proper member of the union.  If the @code{%union}
+declaration looks like this:
+
+@example
+@group
+%union @{
+  int intval;
+  double val;
+  symrec *tptr;
+@}
+@end group
+@end example
+
+@noindent
+then the code in @code{yylex} might look like this:
+
+@example
+@group
+  @dots{}
+  yylval.intval = value; /* Put value onto Bison stack.  */
+  return INT;            /* Return the type of the token.  */
+  @dots{}
+@end group
+@end example
+
+@node Token Locations
+@subsection Textual Locations of Tokens
+
+@vindex yylloc
+If you are using the @samp{@@@var{n}}-feature (@pxref{Tracking Locations})
+in actions to keep track of the textual locations of tokens and groupings,
+then you must provide this information in @code{yylex}.  The function
+@code{yyparse} expects to find the textual location of a token just parsed
+in the global variable @code{yylloc}.  So @code{yylex} must store the proper
+data in that variable.
+
+By default, the value of @code{yylloc} is a structure and you need only
+initialize the members that are going to be used by the actions.  The
+four members are called @code{first_line}, @code{first_column},
+@code{last_line} and @code{last_column}.  Note that the use of this
+feature makes the parser noticeably slower.
+
+@tindex YYLTYPE
+The data type of @code{yylloc} has the name @code{YYLTYPE}.
+
+@node Pure Calling
+@subsection Calling Conventions for Pure Parsers
+
+When you use the Bison declaration @code{%define api.pure full} to request a
+pure, reentrant parser, the global communication variables @code{yylval}
+and @code{yylloc} cannot be used.  (@xref{Pure Decl, ,A Pure (Reentrant)
+Parser}.)  In such parsers the two global variables are replaced by
+pointers passed as arguments to @code{yylex}.  You must declare them as
+shown here, and pass the information back by storing it through those
+pointers.
+
+@example
+int
+yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+@{
+  @dots{}
+  *lvalp = value;  /* Put value onto Bison stack.  */
+  return INT;      /* Return the type of the token.  */
+  @dots{}
+@}
+@end example
+
+If the grammar file does not use the @samp{@@} constructs to refer to
+textual locations, then the type @code{YYLTYPE} will not be defined.  In
+this case, omit the second argument; @code{yylex} will be called with
+only one argument.
+
+
+If you wish to pass the additional parameter data to @code{yylex}, use
+@code{%lex-param} just like @code{%parse-param} (@pxref{Parser
+Function}).
+
+@deffn {Directive} lex-param @{@var{argument-declaration}@}
+@findex %lex-param
+Declare that the braced-code @var{argument-declaration} is an
+additional @code{yylex} argument declaration.
+@end deffn
+
+@noindent
+For instance:
+
+@example
+%lex-param   @{int *nastiness@}
+@end example
+
+@noindent
+results in the following signature:
+
+@example
+int yylex (int *nastiness);
+@end example
+
+@noindent
+If @code{%define api.pure full} (or just @code{%define api.pure}) is added:
+
+@example
+int yylex (YYSTYPE *lvalp, int *nastiness);
+@end example
+
+@node Error Reporting
+@section The Error Reporting Function @code{yyerror}
+@cindex error reporting function
+@findex yyerror
+@cindex parse error
+@cindex syntax error
+
+The Bison parser detects a @dfn{syntax error} or @dfn{parse error}
+whenever it reads a token which cannot satisfy any syntax rule.  An
+action in the grammar can also explicitly proclaim an error, using the
+macro @code{YYERROR} (@pxref{Action Features, ,Special Features for Use
+in Actions}).
+
+The Bison parser expects to report the error by calling an error
+reporting function named @code{yyerror}, which you must supply.  It is
+called by @code{yyparse} whenever a syntax error is found, and it
+receives one argument.  For a syntax error, the string is normally
+@w{@code{"syntax error"}}.
+
+@findex %error-verbose
+If you invoke the directive @code{%error-verbose} in the Bison declarations
+section (@pxref{Bison Declarations, ,The Bison Declarations Section}), then
+Bison provides a more verbose and specific error message string instead of
+just plain @w{@code{"syntax error"}}.  However, that message sometimes
+contains incorrect information if LAC is not enabled (@pxref{LAC}).
+
+The parser can detect one other kind of error: memory exhaustion.  This
+can happen when the input contains constructions that are very deeply
+nested.  It isn't likely you will encounter this, since the Bison
+parser normally extends its stack automatically up to a very large limit.  But
+if memory is exhausted, @code{yyparse} calls @code{yyerror} in the usual
+fashion, except that the argument string is @w{@code{"memory exhausted"}}.
+
+In some cases diagnostics like @w{@code{"syntax error"}} are
+translated automatically from English to some other language before
+they are passed to @code{yyerror}.  @xref{Internationalization}.
+
+The following definition suffices in simple programs:
+
+@example
+@group
+void
+yyerror (char const *s)
+@{
+@end group
+@group
+  fprintf (stderr, "%s\n", s);
+@}
+@end group
+@end example
+
+After @code{yyerror} returns to @code{yyparse}, the latter will attempt
+error recovery if you have written suitable error recovery grammar rules
+(@pxref{Error Recovery}).  If recovery is impossible, @code{yyparse} will
+immediately return 1.
+
+Obviously, in location tracking pure parsers, @code{yyerror} should have
+an access to the current location. With @code{%define api.pure}, this is
+indeed the case for the GLR parsers, but not for the Yacc parser, for
+historical reasons, and this is the why @code{%define api.pure full} should be
+prefered over @code{%define api.pure}.
+
+When @code{%locations %define api.pure full} is used, @code{yyerror} has the
+following signature:
+
+@example
+void yyerror (YYLTYPE *locp, char const *msg);
+@end example
+
+@noindent
+The prototypes are only indications of how the code produced by Bison
+uses @code{yyerror}.  Bison-generated code always ignores the returned
+value, so @code{yyerror} can return any type, including @code{void}.
+Also, @code{yyerror} can be a variadic function; that is why the
+message is always passed last.
+
+Traditionally @code{yyerror} returns an @code{int} that is always
+ignored, but this is purely for historical reasons, and @code{void} is
+preferable since it more accurately describes the return type for
+@code{yyerror}.
+
+@vindex yynerrs
+The variable @code{yynerrs} contains the number of syntax errors
+reported so far.  Normally this variable is global; but if you
+request a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser})
+then it is a local variable which only the actions can access.
+
+@node Action Features
+@section Special Features for Use in Actions
+@cindex summary, action features
+@cindex action features summary
+
+Here is a table of Bison constructs, variables and macros that
+are useful in actions.
+
+@deffn {Variable} $$
+Acts like a variable that contains the semantic value for the
+grouping made by the current rule.  @xref{Actions}.
+@end deffn
+
+@deffn {Variable} $@var{n}
+Acts like a variable that contains the semantic value for the
+@var{n}th component of the current rule.  @xref{Actions}.
+@end deffn
+
+@deffn {Variable} $<@var{typealt}>$
+Like @code{$$} but specifies alternative @var{typealt} in the union
+specified by the @code{%union} declaration.  @xref{Action Types, ,Data
+Types of Values in Actions}.
+@end deffn
+
+@deffn {Variable} $<@var{typealt}>@var{n}
+Like @code{$@var{n}} but specifies alternative @var{typealt} in the
+union specified by the @code{%union} declaration.
+@xref{Action Types, ,Data Types of Values in Actions}.
+@end deffn
+
+@deffn {Macro} YYABORT @code{;}
+Return immediately from @code{yyparse}, indicating failure.
+@xref{Parser Function, ,The Parser Function @code{yyparse}}.
+@end deffn
+
+@deffn {Macro} YYACCEPT @code{;}
+Return immediately from @code{yyparse}, indicating success.
+@xref{Parser Function, ,The Parser Function @code{yyparse}}.
+@end deffn
+
+@deffn {Macro} YYBACKUP (@var{token}, @var{value})@code{;}
+@findex YYBACKUP
+Unshift a token.  This macro is allowed only for rules that reduce
+a single value, and only when there is no lookahead token.
+It is also disallowed in GLR parsers.
+It installs a lookahead token with token type @var{token} and
+semantic value @var{value}; then it discards the value that was
+going to be reduced by this rule.
+
+If the macro is used when it is not valid, such as when there is
+a lookahead token already, then it reports a syntax error with
+a message @samp{cannot back up} and performs ordinary error
+recovery.
+
+In either case, the rest of the action is not executed.
+@end deffn
+
+@deffn {Macro} YYEMPTY
+Value stored in @code{yychar} when there is no lookahead token.
+@end deffn
+
+@deffn {Macro} YYEOF
+Value stored in @code{yychar} when the lookahead is the end of the input
+stream.
+@end deffn
+
+@deffn {Macro} YYERROR @code{;}
+Cause an immediate syntax error.  This statement initiates error
+recovery just as if the parser itself had detected an error; however, it
+does not call @code{yyerror}, and does not print any message.  If you
+want to print an error message, call @code{yyerror} explicitly before
+the @samp{YYERROR;} statement.  @xref{Error Recovery}.
+@end deffn
+
+@deffn {Macro} YYRECOVERING
+@findex YYRECOVERING
+The expression @code{YYRECOVERING ()} yields 1 when the parser
+is recovering from a syntax error, and 0 otherwise.
+@xref{Error Recovery}.
+@end deffn
+
+@deffn {Variable} yychar
+Variable containing either the lookahead token, or @code{YYEOF} when the
+lookahead is the end of the input stream, or @code{YYEMPTY} when no lookahead
+has been performed so the next token is not yet known.
+Do not modify @code{yychar} in a deferred semantic action (@pxref{GLR Semantic
+Actions}).
+@xref{Lookahead, ,Lookahead Tokens}.
+@end deffn
+
+@deffn {Macro} yyclearin @code{;}
+Discard the current lookahead token.  This is useful primarily in
+error rules.
+Do not invoke @code{yyclearin} in a deferred semantic action (@pxref{GLR
+Semantic Actions}).
+@xref{Error Recovery}.
+@end deffn
+
+@deffn {Macro} yyerrok @code{;}
+Resume generating error messages immediately for subsequent syntax
+errors.  This is useful primarily in error rules.
+@xref{Error Recovery}.
+@end deffn
+
+@deffn {Variable} yylloc
+Variable containing the lookahead token location when @code{yychar} is not set
+to @code{YYEMPTY} or @code{YYEOF}.
+Do not modify @code{yylloc} in a deferred semantic action (@pxref{GLR Semantic
+Actions}).
+@xref{Actions and Locations, ,Actions and Locations}.
+@end deffn
+
+@deffn {Variable} yylval
+Variable containing the lookahead token semantic value when @code{yychar} is
+not set to @code{YYEMPTY} or @code{YYEOF}.
+Do not modify @code{yylval} in a deferred semantic action (@pxref{GLR Semantic
+Actions}).
+@xref{Actions, ,Actions}.
+@end deffn
+
+@deffn {Value} @@$
+Acts like a structure variable containing information on the textual
+location of the grouping made by the current rule.  @xref{Tracking
+Locations}.
+
+@c Check if those paragraphs are still useful or not.
+
+@c @example
+@c struct @{
+@c   int first_line, last_line;
+@c   int first_column, last_column;
+@c @};
+@c @end example
+
+@c Thus, to get the starting line number of the third component, you would
+@c use @samp{@@3.first_line}.
+
+@c In order for the members of this structure to contain valid information,
+@c you must make @code{yylex} supply this information about each token.
+@c If you need only certain members, then @code{yylex} need only fill in
+@c those members.
+
+@c The use of this feature makes the parser noticeably slower.
+@end deffn
+
+@deffn {Value} @@@var{n}
+@findex @@@var{n}
+Acts like a structure variable containing information on the textual
+location of the @var{n}th component of the current rule.  @xref{Tracking
+Locations}.
+@end deffn
+
+@node Internationalization
+@section Parser Internationalization
+@cindex internationalization
+@cindex i18n
+@cindex NLS
+@cindex gettext
+@cindex bison-po
+
+A Bison-generated parser can print diagnostics, including error and
+tracing messages.  By default, they appear in English.  However, Bison
+also supports outputting diagnostics in the user's native language.  To
+make this work, the user should set the usual environment variables.
+@xref{Users, , The User's View, gettext, GNU @code{gettext} utilities}.
+For example, the shell command @samp{export LC_ALL=fr_CA.UTF-8} might
+set the user's locale to French Canadian using the UTF-8
+encoding.  The exact set of available locales depends on the user's
+installation.
+
+The maintainer of a package that uses a Bison-generated parser enables
+the internationalization of the parser's output through the following
+steps.  Here we assume a package that uses GNU Autoconf and
+GNU Automake.
+
+@enumerate
+@item
+@cindex bison-i18n.m4
+Into the directory containing the GNU Autoconf macros used
+by the package ---often called @file{m4}--- copy the
+@file{bison-i18n.m4} file installed by Bison under
+@samp{share/aclocal/bison-i18n.m4} in Bison's installation directory.
+For example:
+
+@example
+cp /usr/local/share/aclocal/bison-i18n.m4 m4/bison-i18n.m4
+@end example
+
+@item
+@findex BISON_I18N
+@vindex BISON_LOCALEDIR
+@vindex YYENABLE_NLS
+In the top-level @file{configure.ac}, after the @code{AM_GNU_GETTEXT}
+invocation, add an invocation of @code{BISON_I18N}.  This macro is
+defined in the file @file{bison-i18n.m4} that you copied earlier.  It
+causes @samp{configure} to find the value of the
+@code{BISON_LOCALEDIR} variable, and it defines the source-language
+symbol @code{YYENABLE_NLS} to enable translations in the
+Bison-generated parser.
+
+@item
+In the @code{main} function of your program, designate the directory
+containing Bison's runtime message catalog, through a call to
+@samp{bindtextdomain} with domain name @samp{bison-runtime}.
+For example:
+
+@example
+bindtextdomain ("bison-runtime", BISON_LOCALEDIR);
+@end example
+
+Typically this appears after any other call @code{bindtextdomain
+(PACKAGE, LOCALEDIR)} that your package already has.  Here we rely on
+@samp{BISON_LOCALEDIR} to be defined as a string through the
+@file{Makefile}.
+
+@item
+In the @file{Makefile.am} that controls the compilation of the @code{main}
+function, make @samp{BISON_LOCALEDIR} available as a C preprocessor macro,
+either in @samp{DEFS} or in @samp{AM_CPPFLAGS}.  For example:
+
+@example
+DEFS = @@DEFS@@ -DBISON_LOCALEDIR='"$(BISON_LOCALEDIR)"'
+@end example
+
+or:
+
+@example
+AM_CPPFLAGS = -DBISON_LOCALEDIR='"$(BISON_LOCALEDIR)"'
+@end example
+
+@item
+Finally, invoke the command @command{autoreconf} to generate the build
+infrastructure.
+@end enumerate
+
+
+@node Algorithm
+@chapter The Bison Parser Algorithm
+@cindex Bison parser algorithm
+@cindex algorithm of parser
+@cindex shifting
+@cindex reduction
+@cindex parser stack
+@cindex stack, parser
+
+As Bison reads tokens, it pushes them onto a stack along with their
+semantic values.  The stack is called the @dfn{parser stack}.  Pushing a
+token is traditionally called @dfn{shifting}.
+
+For example, suppose the infix calculator has read @samp{1 + 5 *}, with a
+@samp{3} to come.  The stack will have four elements, one for each token
+that was shifted.
+
+But the stack does not always have an element for each token read.  When
+the last @var{n} tokens and groupings shifted match the components of a
+grammar rule, they can be combined according to that rule.  This is called
+@dfn{reduction}.  Those tokens and groupings are replaced on the stack by a
+single grouping whose symbol is the result (left hand side) of that rule.
+Running the rule's action is part of the process of reduction, because this
+is what computes the semantic value of the resulting grouping.
+
+For example, if the infix calculator's parser stack contains this:
+
+@example
+1 + 5 * 3
+@end example
+
+@noindent
+and the next input token is a newline character, then the last three
+elements can be reduced to 15 via the rule:
+
+@example
+expr: expr '*' expr;
+@end example
+
+@noindent
+Then the stack contains just these three elements:
+
+@example
+1 + 15
+@end example
+
+@noindent
+At this point, another reduction can be made, resulting in the single value
+16.  Then the newline token can be shifted.
+
+The parser tries, by shifts and reductions, to reduce the entire input down
+to a single grouping whose symbol is the grammar's start-symbol
+(@pxref{Language and Grammar, ,Languages and Context-Free Grammars}).
+
+This kind of parser is known in the literature as a bottom-up parser.
+
+@menu
+* Lookahead::         Parser looks one token ahead when deciding what to do.
+* Shift/Reduce::      Conflicts: when either shifting or reduction is valid.
+* Precedence::        Operator precedence works by resolving conflicts.
+* Contextual Precedence::  When an operator's precedence depends on context.
+* Parser States::     The parser is a finite-state-machine with stack.
+* Reduce/Reduce::     When two rules are applicable in the same situation.
+* Mysterious Conflicts:: Conflicts that look unjustified.
+* Tuning LR::         How to tune fundamental aspects of LR-based parsing.
+* Generalized LR Parsing::  Parsing arbitrary context-free grammars.
+* Memory Management:: What happens when memory is exhausted.  How to avoid it.
+@end menu
+
+@node Lookahead
+@section Lookahead Tokens
+@cindex lookahead token
+
+The Bison parser does @emph{not} always reduce immediately as soon as the
+last @var{n} tokens and groupings match a rule.  This is because such a
+simple strategy is inadequate to handle most languages.  Instead, when a
+reduction is possible, the parser sometimes ``looks ahead'' at the next
+token in order to decide what to do.
+
+When a token is read, it is not immediately shifted; first it becomes the
+@dfn{lookahead token}, which is not on the stack.  Now the parser can
+perform one or more reductions of tokens and groupings on the stack, while
+the lookahead token remains off to the side.  When no more reductions
+should take place, the lookahead token is shifted onto the stack.  This
+does not mean that all possible reductions have been done; depending on the
+token type of the lookahead token, some rules may choose to delay their
+application.
+
+Here is a simple case where lookahead is needed.  These three rules define
+expressions which contain binary addition operators and postfix unary
+factorial operators (@samp{!}), and allow parentheses for grouping.
+
+@example
+@group
+expr:
+  term '+' expr
+| term
+;
+@end group
+
+@group
+term:
+  '(' expr ')'
+| term '!'
+| "number"
+;
+@end group
+@end example
+
+Suppose that the tokens @w{@samp{1 + 2}} have been read and shifted; what
+should be done?  If the following token is @samp{)}, then the first three
+tokens must be reduced to form an @code{expr}.  This is the only valid
+course, because shifting the @samp{)} would produce a sequence of symbols
+@w{@code{term ')'}}, and no rule allows this.
+
+If the following token is @samp{!}, then it must be shifted immediately so
+that @w{@samp{2 !}} can be reduced to make a @code{term}.  If instead the
+parser were to reduce before shifting, @w{@samp{1 + 2}} would become an
+@code{expr}.  It would then be impossible to shift the @samp{!} because
+doing so would produce on the stack the sequence of symbols @code{expr
+'!'}.  No rule allows that sequence.
+
+@vindex yychar
+@vindex yylval
+@vindex yylloc
+The lookahead token is stored in the variable @code{yychar}.
+Its semantic value and location, if any, are stored in the variables
+@code{yylval} and @code{yylloc}.
+@xref{Action Features, ,Special Features for Use in Actions}.
+
+@node Shift/Reduce
+@section Shift/Reduce Conflicts
+@cindex conflicts
+@cindex shift/reduce conflicts
+@cindex dangling @code{else}
+@cindex @code{else}, dangling
+
+Suppose we are parsing a language which has if-then and if-then-else
+statements, with a pair of rules like this:
+
+@example
+@group
+if_stmt:
+  "if" expr "then" stmt
+| "if" expr "then" stmt "else" stmt
+;
+@end group
+@end example
+
+@noindent
+Here @code{"if"}, @code{"then"} and @code{"else"} are terminal symbols for
+specific keyword tokens.
+
+When the @code{"else"} token is read and becomes the lookahead token, the
+contents of the stack (assuming the input is valid) are just right for
+reduction by the first rule.  But it is also legitimate to shift the
+@code{"else"}, because that would lead to eventual reduction by the second
+rule.
+
+This situation, where either a shift or a reduction would be valid, is
+called a @dfn{shift/reduce conflict}.  Bison is designed to resolve
+these conflicts by choosing to shift, unless otherwise directed by
+operator precedence declarations.  To see the reason for this, let's
+contrast it with the other alternative.
+
+Since the parser prefers to shift the @code{"else"}, the result is to attach
+the else-clause to the innermost if-statement, making these two inputs
+equivalent:
+
+@example
+if x then if y then win; else lose;
+
+if x then do; if y then win; else lose; end;
+@end example
+
+But if the parser chose to reduce when possible rather than shift, the
+result would be to attach the else-clause to the outermost if-statement,
+making these two inputs equivalent:
+
+@example
+if x then if y then win; else lose;
+
+if x then do; if y then win; end; else lose;
+@end example
+
+The conflict exists because the grammar as written is ambiguous: either
+parsing of the simple nested if-statement is legitimate.  The established
+convention is that these ambiguities are resolved by attaching the
+else-clause to the innermost if-statement; this is what Bison accomplishes
+by choosing to shift rather than reduce.  (It would ideally be cleaner to
+write an unambiguous grammar, but that is very hard to do in this case.)
+This particular ambiguity was first encountered in the specifications of
+Algol 60 and is called the ``dangling @code{else}'' ambiguity.
+
+To avoid warnings from Bison about predictable, legitimate shift/reduce
+conflicts, you can use the @code{%expect @var{n}} declaration.
+There will be no warning as long as the number of shift/reduce conflicts
+is exactly @var{n}, and Bison will report an error if there is a
+different number.
+@xref{Expect Decl, ,Suppressing Conflict Warnings}.  However, we don't
+recommend the use of @code{%expect} (except @samp{%expect 0}!), as an equal
+number of conflicts does not mean that they are the @emph{same}.  When
+possible, you should rather use precedence directives to @emph{fix} the
+conflicts explicitly (@pxref{Non Operators,, Using Precedence For Non
+Operators}).
+
+The definition of @code{if_stmt} above is solely to blame for the
+conflict, but the conflict does not actually appear without additional
+rules.  Here is a complete Bison grammar file that actually manifests
+the conflict:
+
+@example
+@group
+%%
+@end group
+@group
+stmt:
+  expr
+| if_stmt
+;
+@end group
+
+@group
+if_stmt:
+  "if" expr "then" stmt
+| "if" expr "then" stmt "else" stmt
+;
+@end group
+
+expr:
+  "identifier"
+;
+@end example
+
+@node Precedence
+@section Operator Precedence
+@cindex operator precedence
+@cindex precedence of operators
+
+Another situation where shift/reduce conflicts appear is in arithmetic
+expressions.  Here shifting is not always the preferred resolution; the
+Bison declarations for operator precedence allow you to specify when to
+shift and when to reduce.
+
+@menu
+* Why Precedence::    An example showing why precedence is needed.
+* Using Precedence::  How to specify precedence in Bison grammars.
+* Precedence Examples::  How these features are used in the previous example.
+* How Precedence::    How they work.
+* Non Operators::     Using precedence for general conflicts.
+@end menu
+
+@node Why Precedence
+@subsection When Precedence is Needed
+
+Consider the following ambiguous grammar fragment (ambiguous because the
+input @w{@samp{1 - 2 * 3}} can be parsed in two different ways):
+
+@example
+@group
+expr:
+  expr '-' expr
+| expr '*' expr
+| expr '<' expr
+| '(' expr ')'
+@dots{}
+;
+@end group
+@end example
+
+@noindent
+Suppose the parser has seen the tokens @samp{1}, @samp{-} and @samp{2};
+should it reduce them via the rule for the subtraction operator?  It
+depends on the next token.  Of course, if the next token is @samp{)}, we
+must reduce; shifting is invalid because no single rule can reduce the
+token sequence @w{@samp{- 2 )}} or anything starting with that.  But if
+the next token is @samp{*} or @samp{<}, we have a choice: either
+shifting or reduction would allow the parse to complete, but with
+different results.
+
+To decide which one Bison should do, we must consider the results.  If
+the next operator token @var{op} is shifted, then it must be reduced
+first in order to permit another opportunity to reduce the difference.
+The result is (in effect) @w{@samp{1 - (2 @var{op} 3)}}.  On the other
+hand, if the subtraction is reduced before shifting @var{op}, the result
+is @w{@samp{(1 - 2) @var{op} 3}}.  Clearly, then, the choice of shift or
+reduce should depend on the relative precedence of the operators
+@samp{-} and @var{op}: @samp{*} should be shifted first, but not
+@samp{<}.
+
+@cindex associativity
+What about input such as @w{@samp{1 - 2 - 5}}; should this be
+@w{@samp{(1 - 2) - 5}} or should it be @w{@samp{1 - (2 - 5)}}?  For most
+operators we prefer the former, which is called @dfn{left association}.
+The latter alternative, @dfn{right association}, is desirable for
+assignment operators.  The choice of left or right association is a
+matter of whether the parser chooses to shift or reduce when the stack
+contains @w{@samp{1 - 2}} and the lookahead token is @samp{-}: shifting
+makes right-associativity.
+
+@node Using Precedence
+@subsection Specifying Operator Precedence
+@findex %left
+@findex %right
+@findex %nonassoc
+
+Bison allows you to specify these choices with the operator precedence
+declarations @code{%left} and @code{%right}.  Each such declaration
+contains a list of tokens, which are operators whose precedence and
+associativity is being declared.  The @code{%left} declaration makes all
+those operators left-associative and the @code{%right} declaration makes
+them right-associative.  A third alternative is @code{%nonassoc}, which
+declares that it is a syntax error to find the same operator twice ``in a
+row''.
+
+The relative precedence of different operators is controlled by the
+order in which they are declared.  The first @code{%left} or
+@code{%right} declaration in the file declares the operators whose
+precedence is lowest, the next such declaration declares the operators
+whose precedence is a little higher, and so on.
+
+@node Precedence Examples
+@subsection Precedence Examples
+
+In our example, we would want the following declarations:
+
+@example
+%left '<'
+%left '-'
+%left '*'
+@end example
+
+In a more complete example, which supports other operators as well, we
+would declare them in groups of equal precedence.  For example, @code{'+'} is
+declared with @code{'-'}:
+
+@example
+%left '<' '>' '=' "!=" "<=" ">="
+%left '+' '-'
+%left '*' '/'
+@end example
+
+@node How Precedence
+@subsection How Precedence Works
+
+The first effect of the precedence declarations is to assign precedence
+levels to the terminal symbols declared.  The second effect is to assign
+precedence levels to certain rules: each rule gets its precedence from
+the last terminal symbol mentioned in the components.  (You can also
+specify explicitly the precedence of a rule.  @xref{Contextual
+Precedence, ,Context-Dependent Precedence}.)
+
+Finally, the resolution of conflicts works by comparing the precedence
+of the rule being considered with that of the lookahead token.  If the
+token's precedence is higher, the choice is to shift.  If the rule's
+precedence is higher, the choice is to reduce.  If they have equal
+precedence, the choice is made based on the associativity of that
+precedence level.  The verbose output file made by @samp{-v}
+(@pxref{Invocation, ,Invoking Bison}) says how each conflict was
+resolved.
+
+Not all rules and not all tokens have precedence.  If either the rule or
+the lookahead token has no precedence, then the default is to shift.
+
+@node Non Operators
+@subsection Using Precedence For Non Operators
+
+Using properly precedence and associativity directives can help fixing
+shift/reduce conflicts that do not involve arithmetics-like operators.  For
+instance, the ``dangling @code{else}'' problem (@pxref{Shift/Reduce, ,
+Shift/Reduce Conflicts}) can be solved elegantly in two different ways.
+
+In the present case, the conflict is between the token @code{"else"} willing
+to be shifted, and the rule @samp{if_stmt: "if" expr "then" stmt}, asking
+for reduction.  By default, the precedence of a rule is that of its last
+token, here @code{"then"}, so the conflict will be solved appropriately
+by giving @code{"else"} a precedence higher than that of @code{"then"}, for
+instance as follows:
+
+@example
+@group
+%nonassoc "then"
+%nonassoc "else"
+@end group
+@end example
+
+Alternatively, you may give both tokens the same precedence, in which case
+associativity is used to solve the conflict.  To preserve the shift action,
+use right associativity:
+
+@example
+%right "then" "else"
+@end example
+
+Neither solution is perfect however.  Since Bison does not provide, so far,
+support for ``scoped'' precedence, both force you to declare the precedence
+of these keywords with respect to the other operators your grammar.
+Therefore, instead of being warned about new conflicts you would be unaware
+of (e.g., a shift/reduce conflict due to @samp{if test then 1 else 2 + 3}
+being ambiguous: @samp{if test then 1 else (2 + 3)} or @samp{(if test then 1
+else 2) + 3}?), the conflict will be already ``fixed''.
+
+@node Contextual Precedence
+@section Context-Dependent Precedence
+@cindex context-dependent precedence
+@cindex unary operator precedence
+@cindex precedence, context-dependent
+@cindex precedence, unary operator
+@findex %prec
+
+Often the precedence of an operator depends on the context.  This sounds
+outlandish at first, but it is really very common.  For example, a minus
+sign typically has a very high precedence as a unary operator, and a
+somewhat lower precedence (lower than multiplication) as a binary operator.
+
+The Bison precedence declarations, @code{%left}, @code{%right} and
+@code{%nonassoc}, can only be used once for a given token; so a token has
+only one precedence declared in this way.  For context-dependent
+precedence, you need to use an additional mechanism: the @code{%prec}
+modifier for rules.
+
+The @code{%prec} modifier declares the precedence of a particular rule by
+specifying a terminal symbol whose precedence should be used for that rule.
+It's not necessary for that symbol to appear otherwise in the rule.  The
+modifier's syntax is:
+
+@example
+%prec @var{terminal-symbol}
+@end example
+
+@noindent
+and it is written after the components of the rule.  Its effect is to
+assign the rule the precedence of @var{terminal-symbol}, overriding
+the precedence that would be deduced for it in the ordinary way.  The
+altered rule precedence then affects how conflicts involving that rule
+are resolved (@pxref{Precedence, ,Operator Precedence}).
+
+Here is how @code{%prec} solves the problem of unary minus.  First, declare
+a precedence for a fictitious terminal symbol named @code{UMINUS}.  There
+are no tokens of this type, but the symbol serves to stand for its
+precedence:
+
+@example
+@dots{}
+%left '+' '-'
+%left '*'
+%left UMINUS
+@end example
+
+Now the precedence of @code{UMINUS} can be used in specific rules:
+
+@example
+@group
+exp:
+  @dots{}
+| exp '-' exp
+  @dots{}
+| '-' exp %prec UMINUS
+@end group
+@end example
+
+@ifset defaultprec
+If you forget to append @code{%prec UMINUS} to the rule for unary
+minus, Bison silently assumes that minus has its usual precedence.
+This kind of problem can be tricky to debug, since one typically
+discovers the mistake only by testing the code.
+
+The @code{%no-default-prec;} declaration makes it easier to discover
+this kind of problem systematically.  It causes rules that lack a
+@code{%prec} modifier to have no precedence, even if the last terminal
+symbol mentioned in their components has a declared precedence.
+
+If @code{%no-default-prec;} is in effect, you must specify @code{%prec}
+for all rules that participate in precedence conflict resolution.
+Then you will see any shift/reduce conflict until you tell Bison how
+to resolve it, either by changing your grammar or by adding an
+explicit precedence.  This will probably add declarations to the
+grammar, but it helps to protect against incorrect rule precedences.
+
+The effect of @code{%no-default-prec;} can be reversed by giving
+@code{%default-prec;}, which is the default.
+@end ifset
+
+@node Parser States
+@section Parser States
+@cindex finite-state machine
+@cindex parser state
+@cindex state (of parser)
+
+The function @code{yyparse} is implemented using a finite-state machine.
+The values pushed on the parser stack are not simply token type codes; they
+represent the entire sequence of terminal and nonterminal symbols at or
+near the top of the stack.  The current state collects all the information
+about previous input which is relevant to deciding what to do next.
+
+Each time a lookahead token is read, the current parser state together
+with the type of lookahead token are looked up in a table.  This table
+entry can say, ``Shift the lookahead token.''  In this case, it also
+specifies the new parser state, which is pushed onto the top of the
+parser stack.  Or it can say, ``Reduce using rule number @var{n}.''
+This means that a certain number of tokens or groupings are taken off
+the top of the stack, and replaced by one grouping.  In other words,
+that number of states are popped from the stack, and one new state is
+pushed.
+
+There is one other alternative: the table can say that the lookahead token
+is erroneous in the current state.  This causes error processing to begin
+(@pxref{Error Recovery}).
+
+@node Reduce/Reduce
+@section Reduce/Reduce Conflicts
+@cindex reduce/reduce conflict
+@cindex conflicts, reduce/reduce
+
+A reduce/reduce conflict occurs if there are two or more rules that apply
+to the same sequence of input.  This usually indicates a serious error
+in the grammar.
+
+For example, here is an erroneous attempt to define a sequence
+of zero or more @code{word} groupings.
+
+@example
+@group
+sequence:
+  /* empty */    @{ printf ("empty sequence\n"); @}
+| maybeword
+| sequence word  @{ printf ("added word %s\n", $2); @}
+;
+@end group
+
+@group
+maybeword:
+  /* empty */   @{ printf ("empty maybeword\n"); @}
+| word          @{ printf ("single word %s\n", $1); @}
+;
+@end group
+@end example
+
+@noindent
+The error is an ambiguity: there is more than one way to parse a single
+@code{word} into a @code{sequence}.  It could be reduced to a
+@code{maybeword} and then into a @code{sequence} via the second rule.
+Alternatively, nothing-at-all could be reduced into a @code{sequence}
+via the first rule, and this could be combined with the @code{word}
+using the third rule for @code{sequence}.
+
+There is also more than one way to reduce nothing-at-all into a
+@code{sequence}.  This can be done directly via the first rule,
+or indirectly via @code{maybeword} and then the second rule.
+
+You might think that this is a distinction without a difference, because it
+does not change whether any particular input is valid or not.  But it does
+affect which actions are run.  One parsing order runs the second rule's
+action; the other runs the first rule's action and the third rule's action.
+In this example, the output of the program changes.
+
+Bison resolves a reduce/reduce conflict by choosing to use the rule that
+appears first in the grammar, but it is very risky to rely on this.  Every
+reduce/reduce conflict must be studied and usually eliminated.  Here is the
+proper way to define @code{sequence}:
+
+@example
+@group
+sequence:
+  /* empty */    @{ printf ("empty sequence\n"); @}
+| sequence word  @{ printf ("added word %s\n", $2); @}
+;
+@end group
+@end example
+
+Here is another common error that yields a reduce/reduce conflict:
+
+@example
+sequence:
+@group
+  /* empty */
+| sequence words
+| sequence redirects
+;
+@end group
+
+@group
+words:
+  /* empty */
+| words word
+;
+@end group
+
+@group
+redirects:
+  /* empty */
+| redirects redirect
+;
+@end group
+@end example
+
+@noindent
+The intention here is to define a sequence which can contain either
+@code{word} or @code{redirect} groupings.  The individual definitions of
+@code{sequence}, @code{words} and @code{redirects} are error-free, but the
+three together make a subtle ambiguity: even an empty input can be parsed
+in infinitely many ways!
+
+Consider: nothing-at-all could be a @code{words}.  Or it could be two
+@code{words} in a row, or three, or any number.  It could equally well be a
+@code{redirects}, or two, or any number.  Or it could be a @code{words}
+followed by three @code{redirects} and another @code{words}.  And so on.
+
+Here are two ways to correct these rules.  First, to make it a single level
+of sequence:
+
+@example
+sequence:
+  /* empty */
+| sequence word
+| sequence redirect
+;
+@end example
+
+Second, to prevent either a @code{words} or a @code{redirects}
+from being empty:
+
+@example
+@group
+sequence:
+  /* empty */
+| sequence words
+| sequence redirects
+;
+@end group
+
+@group
+words:
+  word
+| words word
+;
+@end group
+
+@group
+redirects:
+  redirect
+| redirects redirect
+;
+@end group
+@end example
+
+Yet this proposal introduces another kind of ambiguity!  The input
+@samp{word word} can be parsed as a single @code{words} composed of two
+@samp{word}s, or as two one-@code{word} @code{words} (and likewise for
+@code{redirect}/@code{redirects}).  However this ambiguity is now a
+shift/reduce conflict, and therefore it can now be addressed with precedence
+directives.
+
+To simplify the matter, we will proceed with @code{word} and @code{redirect}
+being tokens: @code{"word"} and @code{"redirect"}.
+
+To prefer the longest @code{words}, the conflict between the token
+@code{"word"} and the rule @samp{sequence: sequence words} must be resolved
+as a shift.  To this end, we use the same techniques as exposed above, see
+@ref{Non Operators,, Using Precedence For Non Operators}.  One solution
+relies on precedences: use @code{%prec} to give a lower precedence to the
+rule:
+
+@example
+%nonassoc "word"
+%nonassoc "sequence"
+%%
+@group
+sequence:
+  /* empty */
+| sequence word      %prec "sequence"
+| sequence redirect  %prec "sequence"
+;
+@end group
+
+@group
+words:
+  word
+| words "word"
+;
+@end group
+@end example
+
+Another solution relies on associativity: provide both the token and the
+rule with the same precedence, but make them right-associative:
+
+@example
+%right "word" "redirect"
+%%
+@group
+sequence:
+  /* empty */
+| sequence word      %prec "word"
+| sequence redirect  %prec "redirect"
+;
+@end group
+@end example
+
+@node Mysterious Conflicts
+@section Mysterious Conflicts
+@cindex Mysterious Conflicts
+
+Sometimes reduce/reduce conflicts can occur that don't look warranted.
+Here is an example:
+
+@example
+@group
+%%
+def: param_spec return_spec ',';
+param_spec:
+  type
+| name_list ':' type
+;
+@end group
+@group
+return_spec:
+  type
+| name ':' type
+;
+@end group
+@group
+type: "id";
+@end group
+@group
+name: "id";
+name_list:
+  name
+| name ',' name_list
+;
+@end group
+@end example
+
+It would seem that this grammar can be parsed with only a single token of
+lookahead: when a @code{param_spec} is being read, an @code{"id"} is a
+@code{name} if a comma or colon follows, or a @code{type} if another
+@code{"id"} follows.  In other words, this grammar is LR(1).
+
+@cindex LR
+@cindex LALR
+However, for historical reasons, Bison cannot by default handle all
+LR(1) grammars.
+In this grammar, two contexts, that after an @code{"id"} at the beginning
+of a @code{param_spec} and likewise at the beginning of a
+@code{return_spec}, are similar enough that Bison assumes they are the
+same.
+They appear similar because the same set of rules would be
+active---the rule for reducing to a @code{name} and that for reducing to
+a @code{type}.  Bison is unable to determine at that stage of processing
+that the rules would require different lookahead tokens in the two
+contexts, so it makes a single parser state for them both.  Combining
+the two contexts causes a conflict later.  In parser terminology, this
+occurrence means that the grammar is not LALR(1).
+
+@cindex IELR
+@cindex canonical LR
+For many practical grammars (specifically those that fall into the non-LR(1)
+class), the limitations of LALR(1) result in difficulties beyond just
+mysterious reduce/reduce conflicts.  The best way to fix all these problems
+is to select a different parser table construction algorithm.  Either
+IELR(1) or canonical LR(1) would suffice, but the former is more efficient
+and easier to debug during development.  @xref{LR Table Construction}, for
+details.  (Bison's IELR(1) and canonical LR(1) implementations are
+experimental.  More user feedback will help to stabilize them.)
+
+If you instead wish to work around LALR(1)'s limitations, you
+can often fix a mysterious conflict by identifying the two parser states
+that are being confused, and adding something to make them look
+distinct.  In the above example, adding one rule to
+@code{return_spec} as follows makes the problem go away:
+
+@example
+@group
+@dots{}
+return_spec:
+  type
+| name ':' type
+| "id" "bogus"       /* This rule is never used.  */
+;
+@end group
+@end example
+
+This corrects the problem because it introduces the possibility of an
+additional active rule in the context after the @code{"id"} at the beginning of
+@code{return_spec}.  This rule is not active in the corresponding context
+in a @code{param_spec}, so the two contexts receive distinct parser states.
+As long as the token @code{"bogus"} is never generated by @code{yylex},
+the added rule cannot alter the way actual input is parsed.
+
+In this particular example, there is another way to solve the problem:
+rewrite the rule for @code{return_spec} to use @code{"id"} directly
+instead of via @code{name}.  This also causes the two confusing
+contexts to have different sets of active rules, because the one for
+@code{return_spec} activates the altered rule for @code{return_spec}
+rather than the one for @code{name}.
+
+@example
+param_spec:
+  type
+| name_list ':' type
+;
+return_spec:
+  type
+| "id" ':' type
+;
+@end example
+
+For a more detailed exposition of LALR(1) parsers and parser
+generators, @pxref{Bibliography,,DeRemer 1982}.
+
+@node Tuning LR
+@section Tuning LR
+
+The default behavior of Bison's LR-based parsers is chosen mostly for
+historical reasons, but that behavior is often not robust.  For example, in
+the previous section, we discussed the mysterious conflicts that can be
+produced by LALR(1), Bison's default parser table construction algorithm.
+Another example is Bison's @code{%error-verbose} directive, which instructs
+the generated parser to produce verbose syntax error messages, which can
+sometimes contain incorrect information.
+
+In this section, we explore several modern features of Bison that allow you
+to tune fundamental aspects of the generated LR-based parsers.  Some of
+these features easily eliminate shortcomings like those mentioned above.
+Others can be helpful purely for understanding your parser.
+
+Most of the features discussed in this section are still experimental.  More
+user feedback will help to stabilize them.
+
+@menu
+* LR Table Construction:: Choose a different construction algorithm.
+* Default Reductions::    Disable default reductions.
+* LAC::                   Correct lookahead sets in the parser states.
+* Unreachable States::    Keep unreachable parser states for debugging.
+@end menu
+
+@node LR Table Construction
+@subsection LR Table Construction
+@cindex Mysterious Conflict
+@cindex LALR
+@cindex IELR
+@cindex canonical LR
+@findex %define lr.type
+
+For historical reasons, Bison constructs LALR(1) parser tables by default.
+However, LALR does not possess the full language-recognition power of LR.
+As a result, the behavior of parsers employing LALR parser tables is often
+mysterious.  We presented a simple example of this effect in @ref{Mysterious
+Conflicts}.
+
+As we also demonstrated in that example, the traditional approach to
+eliminating such mysterious behavior is to restructure the grammar.
+Unfortunately, doing so correctly is often difficult.  Moreover, merely
+discovering that LALR causes mysterious behavior in your parser can be
+difficult as well.
+
+Fortunately, Bison provides an easy way to eliminate the possibility of such
+mysterious behavior altogether.  You simply need to activate a more powerful
+parser table construction algorithm by using the @code{%define lr.type}
+directive.
+
+@deffn {Directive} {%define lr.type} @var{type}
+Specify the type of parser tables within the LR(1) family.  The accepted
+values for @var{type} are:
+
+@itemize
+@item @code{lalr} (default)
+@item @code{ielr}
+@item @code{canonical-lr}
+@end itemize
+
+(This feature is experimental. More user feedback will help to stabilize
+it.)
+@end deffn
+
+For example, to activate IELR, you might add the following directive to you
+grammar file:
+
+@example
+%define lr.type ielr
+@end example
+
+@noindent For the example in @ref{Mysterious Conflicts}, the mysterious
+conflict is then eliminated, so there is no need to invest time in
+comprehending the conflict or restructuring the grammar to fix it.  If,
+during future development, the grammar evolves such that all mysterious
+behavior would have disappeared using just LALR, you need not fear that
+continuing to use IELR will result in unnecessarily large parser tables.
+That is, IELR generates LALR tables when LALR (using a deterministic parsing
+algorithm) is sufficient to support the full language-recognition power of
+LR.  Thus, by enabling IELR at the start of grammar development, you can
+safely and completely eliminate the need to consider LALR's shortcomings.
+
+While IELR is almost always preferable, there are circumstances where LALR
+or the canonical LR parser tables described by Knuth
+(@pxref{Bibliography,,Knuth 1965}) can be useful.  Here we summarize the
+relative advantages of each parser table construction algorithm within
+Bison:
+
+@itemize
+@item LALR
+
+There are at least two scenarios where LALR can be worthwhile:
+
+@itemize
+@item GLR without static conflict resolution.
+
+@cindex GLR with LALR
+When employing GLR parsers (@pxref{GLR Parsers}), if you do not resolve any
+conflicts statically (for example, with @code{%left} or @code{%prec}), then
+the parser explores all potential parses of any given input.  In this case,
+the choice of parser table construction algorithm is guaranteed not to alter
+the language accepted by the parser.  LALR parser tables are the smallest
+parser tables Bison can currently construct, so they may then be preferable.
+Nevertheless, once you begin to resolve conflicts statically, GLR behaves
+more like a deterministic parser in the syntactic contexts where those
+conflicts appear, and so either IELR or canonical LR can then be helpful to
+avoid LALR's mysterious behavior.
+
+@item Malformed grammars.
+
+Occasionally during development, an especially malformed grammar with a
+major recurring flaw may severely impede the IELR or canonical LR parser
+table construction algorithm.  LALR can be a quick way to construct parser
+tables in order to investigate such problems while ignoring the more subtle
+differences from IELR and canonical LR.
+@end itemize
+
+@item IELR
+
+IELR (Inadequacy Elimination LR) is a minimal LR algorithm.  That is, given
+any grammar (LR or non-LR), parsers using IELR or canonical LR parser tables
+always accept exactly the same set of sentences.  However, like LALR, IELR
+merges parser states during parser table construction so that the number of
+parser states is often an order of magnitude less than for canonical LR.
+More importantly, because canonical LR's extra parser states may contain
+duplicate conflicts in the case of non-LR grammars, the number of conflicts
+for IELR is often an order of magnitude less as well.  This effect can
+significantly reduce the complexity of developing a grammar.
+
+@item Canonical LR
+
+@cindex delayed syntax error detection
+@cindex LAC
+@findex %nonassoc
+While inefficient, canonical LR parser tables can be an interesting means to
+explore a grammar because they possess a property that IELR and LALR tables
+do not.  That is, if @code{%nonassoc} is not used and default reductions are
+left disabled (@pxref{Default Reductions}), then, for every left context of
+every canonical LR state, the set of tokens accepted by that state is
+guaranteed to be the exact set of tokens that is syntactically acceptable in
+that left context.  It might then seem that an advantage of canonical LR
+parsers in production is that, under the above constraints, they are
+guaranteed to detect a syntax error as soon as possible without performing
+any unnecessary reductions.  However, IELR parsers that use LAC are also
+able to achieve this behavior without sacrificing @code{%nonassoc} or
+default reductions.  For details and a few caveats of LAC, @pxref{LAC}.
+@end itemize
+
+For a more detailed exposition of the mysterious behavior in LALR parsers
+and the benefits of IELR, @pxref{Bibliography,,Denny 2008 March}, and
+@ref{Bibliography,,Denny 2010 November}.
+
+@node Default Reductions
+@subsection Default Reductions
+@cindex default reductions
+@findex %define lr.default-reductions
+@findex %nonassoc
+
+After parser table construction, Bison identifies the reduction with the
+largest lookahead set in each parser state.  To reduce the size of the
+parser state, traditional Bison behavior is to remove that lookahead set and
+to assign that reduction to be the default parser action.  Such a reduction
+is known as a @dfn{default reduction}.
+
+Default reductions affect more than the size of the parser tables.  They
+also affect the behavior of the parser:
+
+@itemize
+@item Delayed @code{yylex} invocations.
+
+@cindex delayed yylex invocations
+@cindex consistent states
+@cindex defaulted states
+A @dfn{consistent state} is a state that has only one possible parser
+action.  If that action is a reduction and is encoded as a default
+reduction, then that consistent state is called a @dfn{defaulted state}.
+Upon reaching a defaulted state, a Bison-generated parser does not bother to
+invoke @code{yylex} to fetch the next token before performing the reduction.
+In other words, whether default reductions are enabled in consistent states
+determines how soon a Bison-generated parser invokes @code{yylex} for a
+token: immediately when it @emph{reaches} that token in the input or when it
+eventually @emph{needs} that token as a lookahead to determine the next
+parser action.  Traditionally, default reductions are enabled, and so the
+parser exhibits the latter behavior.
+
+The presence of defaulted states is an important consideration when
+designing @code{yylex} and the grammar file.  That is, if the behavior of
+@code{yylex} can influence or be influenced by the semantic actions
+associated with the reductions in defaulted states, then the delay of the
+next @code{yylex} invocation until after those reductions is significant.
+For example, the semantic actions might pop a scope stack that @code{yylex}
+uses to determine what token to return.  Thus, the delay might be necessary
+to ensure that @code{yylex} does not look up the next token in a scope that
+should already be considered closed.
+
+@item Delayed syntax error detection.
+
+@cindex delayed syntax error detection
+When the parser fetches a new token by invoking @code{yylex}, it checks
+whether there is an action for that token in the current parser state.  The
+parser detects a syntax error if and only if either (1) there is no action
+for that token or (2) the action for that token is the error action (due to
+the use of @code{%nonassoc}).  However, if there is a default reduction in
+that state (which might or might not be a defaulted state), then it is
+impossible for condition 1 to exist.  That is, all tokens have an action.
+Thus, the parser sometimes fails to detect the syntax error until it reaches
+a later state.
+
+@cindex LAC
+@c If there's an infinite loop, default reductions can prevent an incorrect
+@c sentence from being rejected.
+While default reductions never cause the parser to accept syntactically
+incorrect sentences, the delay of syntax error detection can have unexpected
+effects on the behavior of the parser.  However, the delay can be caused
+anyway by parser state merging and the use of @code{%nonassoc}, and it can
+be fixed by another Bison feature, LAC.  We discuss the effects of delayed
+syntax error detection and LAC more in the next section (@pxref{LAC}).
+@end itemize
+
+For canonical LR, the only default reduction that Bison enables by default
+is the accept action, which appears only in the accepting state, which has
+no other action and is thus a defaulted state.  However, the default accept
+action does not delay any @code{yylex} invocation or syntax error detection
+because the accept action ends the parse.
+
+For LALR and IELR, Bison enables default reductions in nearly all states by
+default.  There are only two exceptions.  First, states that have a shift
+action on the @code{error} token do not have default reductions because
+delayed syntax error detection could then prevent the @code{error} token
+from ever being shifted in that state.  However, parser state merging can
+cause the same effect anyway, and LAC fixes it in both cases, so future
+versions of Bison might drop this exception when LAC is activated.  Second,
+GLR parsers do not record the default reduction as the action on a lookahead
+token for which there is a conflict.  The correct action in this case is to
+split the parse instead.
+
+To adjust which states have default reductions enabled, use the
+@code{%define lr.default-reductions} directive.
+
+@deffn {Directive} {%define lr.default-reductions} @var{where}
+Specify the kind of states that are permitted to contain default reductions.
+The accepted values of @var{where} are:
+@itemize
+@item @code{most} (default for LALR and IELR)
+@item @code{consistent}
+@item @code{accepting} (default for canonical LR)
+@end itemize
+
+(The ability to specify where default reductions are permitted is
+experimental.  More user feedback will help to stabilize it.)
+@end deffn
+
+@node LAC
+@subsection LAC
+@findex %define parse.lac
+@cindex LAC
+@cindex lookahead correction
+
+Canonical LR, IELR, and LALR can suffer from a couple of problems upon
+encountering a syntax error.  First, the parser might perform additional
+parser stack reductions before discovering the syntax error.  Such
+reductions can perform user semantic actions that are unexpected because
+they are based on an invalid token, and they cause error recovery to begin
+in a different syntactic context than the one in which the invalid token was
+encountered.  Second, when verbose error messages are enabled (@pxref{Error
+Reporting}), the expected token list in the syntax error message can both
+contain invalid tokens and omit valid tokens.
+
+The culprits for the above problems are @code{%nonassoc}, default reductions
+in inconsistent states (@pxref{Default Reductions}), and parser state
+merging.  Because IELR and LALR merge parser states, they suffer the most.
+Canonical LR can suffer only if @code{%nonassoc} is used or if default
+reductions are enabled for inconsistent states.
+
+LAC (Lookahead Correction) is a new mechanism within the parsing algorithm
+that solves these problems for canonical LR, IELR, and LALR without
+sacrificing @code{%nonassoc}, default reductions, or state merging.  You can
+enable LAC with the @code{%define parse.lac} directive.
+
+@deffn {Directive} {%define parse.lac} @var{value}
+Enable LAC to improve syntax error handling.
+@itemize
+@item @code{none} (default)
+@item @code{full}
+@end itemize
+(This feature is experimental.  More user feedback will help to stabilize
+it.  Moreover, it is currently only available for deterministic parsers in
+C.)
+@end deffn
+
+Conceptually, the LAC mechanism is straight-forward.  Whenever the parser
+fetches a new token from the scanner so that it can determine the next
+parser action, it immediately suspends normal parsing and performs an
+exploratory parse using a temporary copy of the normal parser state stack.
+During this exploratory parse, the parser does not perform user semantic
+actions.  If the exploratory parse reaches a shift action, normal parsing
+then resumes on the normal parser stacks.  If the exploratory parse reaches
+an error instead, the parser reports a syntax error.  If verbose syntax
+error messages are enabled, the parser must then discover the list of
+expected tokens, so it performs a separate exploratory parse for each token
+in the grammar.
+
+There is one subtlety about the use of LAC.  That is, when in a consistent
+parser state with a default reduction, the parser will not attempt to fetch
+a token from the scanner because no lookahead is needed to determine the
+next parser action.  Thus, whether default reductions are enabled in
+consistent states (@pxref{Default Reductions}) affects how soon the parser
+detects a syntax error: immediately when it @emph{reaches} an erroneous
+token or when it eventually @emph{needs} that token as a lookahead to
+determine the next parser action.  The latter behavior is probably more
+intuitive, so Bison currently provides no way to achieve the former behavior
+while default reductions are enabled in consistent states.
+
+Thus, when LAC is in use, for some fixed decision of whether to enable
+default reductions in consistent states, canonical LR and IELR behave almost
+exactly the same for both syntactically acceptable and syntactically
+unacceptable input.  While LALR still does not support the full
+language-recognition power of canonical LR and IELR, LAC at least enables
+LALR's syntax error handling to correctly reflect LALR's
+language-recognition power.
+
+There are a few caveats to consider when using LAC:
+
+@itemize
+@item Infinite parsing loops.
+
+IELR plus LAC does have one shortcoming relative to canonical LR.  Some
+parsers generated by Bison can loop infinitely.  LAC does not fix infinite
+parsing loops that occur between encountering a syntax error and detecting
+it, but enabling canonical LR or disabling default reductions sometimes
+does.
+
+@item Verbose error message limitations.
+
+Because of internationalization considerations, Bison-generated parsers
+limit the size of the expected token list they are willing to report in a
+verbose syntax error message.  If the number of expected tokens exceeds that
+limit, the list is simply dropped from the message.  Enabling LAC can
+increase the size of the list and thus cause the parser to drop it.  Of
+course, dropping the list is better than reporting an incorrect list.
+
+@item Performance.
+
+Because LAC requires many parse actions to be performed twice, it can have a
+performance penalty.  However, not all parse actions must be performed
+twice.  Specifically, during a series of default reductions in consistent
+states and shift actions, the parser never has to initiate an exploratory
+parse.  Moreover, the most time-consuming tasks in a parse are often the
+file I/O, the lexical analysis performed by the scanner, and the user's
+semantic actions, but none of these are performed during the exploratory
+parse.  Finally, the base of the temporary stack used during an exploratory
+parse is a pointer into the normal parser state stack so that the stack is
+never physically copied.  In our experience, the performance penalty of LAC
+has proved insignificant for practical grammars.
+@end itemize
+
+While the LAC algorithm shares techniques that have been recognized in the
+parser community for years, for the publication that introduces LAC,
+@pxref{Bibliography,,Denny 2010 May}.
+
+@node Unreachable States
+@subsection Unreachable States
+@findex %define lr.keep-unreachable-states
+@cindex unreachable states
+
+If there exists no sequence of transitions from the parser's start state to
+some state @var{s}, then Bison considers @var{s} to be an @dfn{unreachable
+state}.  A state can become unreachable during conflict resolution if Bison
+disables a shift action leading to it from a predecessor state.
+
+By default, Bison removes unreachable states from the parser after conflict
+resolution because they are useless in the generated parser.  However,
+keeping unreachable states is sometimes useful when trying to understand the
+relationship between the parser and the grammar.
+
+@deffn {Directive} {%define lr.keep-unreachable-states} @var{value}
+Request that Bison allow unreachable states to remain in the parser tables.
+@var{value} must be a Boolean.  The default is @code{false}.
+@end deffn
+
+There are a few caveats to consider:
+
+@itemize @bullet
+@item Missing or extraneous warnings.
+
+Unreachable states may contain conflicts and may use rules not used in any
+other state.  Thus, keeping unreachable states may induce warnings that are
+irrelevant to your parser's behavior, and it may eliminate warnings that are
+relevant.  Of course, the change in warnings may actually be relevant to a
+parser table analysis that wants to keep unreachable states, so this
+behavior will likely remain in future Bison releases.
+
+@item Other useless states.
+
+While Bison is able to remove unreachable states, it is not guaranteed to
+remove other kinds of useless states.  Specifically, when Bison disables
+reduce actions during conflict resolution, some goto actions may become
+useless, and thus some additional states may become useless.  If Bison were
+to compute which goto actions were useless and then disable those actions,
+it could identify such states as unreachable and then remove those states.
+However, Bison does not compute which goto actions are useless.
+@end itemize
+
+@node Generalized LR Parsing
+@section Generalized LR (GLR) Parsing
+@cindex GLR parsing
+@cindex generalized LR (GLR) parsing
+@cindex ambiguous grammars
+@cindex nondeterministic parsing
+
+Bison produces @emph{deterministic} parsers that choose uniquely
+when to reduce and which reduction to apply
+based on a summary of the preceding input and on one extra token of lookahead.
+As a result, normal Bison handles a proper subset of the family of
+context-free languages.
+Ambiguous grammars, since they have strings with more than one possible
+sequence of reductions cannot have deterministic parsers in this sense.
+The same is true of languages that require more than one symbol of
+lookahead, since the parser lacks the information necessary to make a
+decision at the point it must be made in a shift-reduce parser.
+Finally, as previously mentioned (@pxref{Mysterious Conflicts}),
+there are languages where Bison's default choice of how to
+summarize the input seen so far loses necessary information.
+
+When you use the @samp{%glr-parser} declaration in your grammar file,
+Bison generates a parser that uses a different algorithm, called
+Generalized LR (or GLR).  A Bison GLR
+parser uses the same basic
+algorithm for parsing as an ordinary Bison parser, but behaves
+differently in cases where there is a shift-reduce conflict that has not
+been resolved by precedence rules (@pxref{Precedence}) or a
+reduce-reduce conflict.  When a GLR parser encounters such a
+situation, it
+effectively @emph{splits} into a several parsers, one for each possible
+shift or reduction.  These parsers then proceed as usual, consuming
+tokens in lock-step.  Some of the stacks may encounter other conflicts
+and split further, with the result that instead of a sequence of states,
+a Bison GLR parsing stack is what is in effect a tree of states.
+
+In effect, each stack represents a guess as to what the proper parse
+is.  Additional input may indicate that a guess was wrong, in which case
+the appropriate stack silently disappears.  Otherwise, the semantics
+actions generated in each stack are saved, rather than being executed
+immediately.  When a stack disappears, its saved semantic actions never
+get executed.  When a reduction causes two stacks to become equivalent,
+their sets of semantic actions are both saved with the state that
+results from the reduction.  We say that two stacks are equivalent
+when they both represent the same sequence of states,
+and each pair of corresponding states represents a
+grammar symbol that produces the same segment of the input token
+stream.
+
+Whenever the parser makes a transition from having multiple
+states to having one, it reverts to the normal deterministic parsing
+algorithm, after resolving and executing the saved-up actions.
+At this transition, some of the states on the stack will have semantic
+values that are sets (actually multisets) of possible actions.  The
+parser tries to pick one of the actions by first finding one whose rule
+has the highest dynamic precedence, as set by the @samp{%dprec}
+declaration.  Otherwise, if the alternative actions are not ordered by
+precedence, but there the same merging function is declared for both
+rules by the @samp{%merge} declaration,
+Bison resolves and evaluates both and then calls the merge function on
+the result.  Otherwise, it reports an ambiguity.
+
+It is possible to use a data structure for the GLR parsing tree that
+permits the processing of any LR(1) grammar in linear time (in the
+size of the input), any unambiguous (not necessarily
+LR(1)) grammar in
+quadratic worst-case time, and any general (possibly ambiguous)
+context-free grammar in cubic worst-case time.  However, Bison currently
+uses a simpler data structure that requires time proportional to the
+length of the input times the maximum number of stacks required for any
+prefix of the input.  Thus, really ambiguous or nondeterministic
+grammars can require exponential time and space to process.  Such badly
+behaving examples, however, are not generally of practical interest.
+Usually, nondeterminism in a grammar is local---the parser is ``in
+doubt'' only for a few tokens at a time.  Therefore, the current data
+structure should generally be adequate.  On LR(1) portions of a
+grammar, in particular, it is only slightly slower than with the
+deterministic LR(1) Bison parser.
+
+For a more detailed exposition of GLR parsers, @pxref{Bibliography,,Scott
+2000}.
+
+@node Memory Management
+@section Memory Management, and How to Avoid Memory Exhaustion
+@cindex memory exhaustion
+@cindex memory management
+@cindex stack overflow
+@cindex parser stack overflow
+@cindex overflow of parser stack
+
+The Bison parser stack can run out of memory if too many tokens are shifted and
+not reduced.  When this happens, the parser function @code{yyparse}
+calls @code{yyerror} and then returns 2.
+
+Because Bison parsers have growing stacks, hitting the upper limit
+usually results from using a right recursion instead of a left
+recursion, see @ref{Recursion, ,Recursive Rules}.
+
+@vindex YYMAXDEPTH
+By defining the macro @code{YYMAXDEPTH}, you can control how deep the
+parser stack can become before memory is exhausted.  Define the
+macro with a value that is an integer.  This value is the maximum number
+of tokens that can be shifted (and not reduced) before overflow.
+
+The stack space allowed is not necessarily allocated.  If you specify a
+large value for @code{YYMAXDEPTH}, the parser normally allocates a small
+stack at first, and then makes it bigger by stages as needed.  This
+increasing allocation happens automatically and silently.  Therefore,
+you do not need to make @code{YYMAXDEPTH} painfully small merely to save
+space for ordinary inputs that do not need much stack.
+
+However, do not allow @code{YYMAXDEPTH} to be a value so large that
+arithmetic overflow could occur when calculating the size of the stack
+space.  Also, do not allow @code{YYMAXDEPTH} to be less than
+@code{YYINITDEPTH}.
+
+@cindex default stack limit
+The default value of @code{YYMAXDEPTH}, if you do not define it, is
+10000.
+
+@vindex YYINITDEPTH
+You can control how much stack is allocated initially by defining the
+macro @code{YYINITDEPTH} to a positive integer.  For the deterministic
+parser in C, this value must be a compile-time constant
+unless you are assuming C99 or some other target language or compiler
+that allows variable-length arrays.  The default is 200.
+
+Do not allow @code{YYINITDEPTH} to be greater than @code{YYMAXDEPTH}.
+
+@c FIXME: C++ output.
+Because of semantic differences between C and C++, the deterministic
+parsers in C produced by Bison cannot grow when compiled
+by C++ compilers.  In this precise case (compiling a C parser as C++) you are
+suggested to grow @code{YYINITDEPTH}.  The Bison maintainers hope to fix
+this deficiency in a future release.
+
+@node Error Recovery
+@chapter Error Recovery
+@cindex error recovery
+@cindex recovery from errors
+
+It is not usually acceptable to have a program terminate on a syntax
+error.  For example, a compiler should recover sufficiently to parse the
+rest of the input file and check it for errors; a calculator should accept
+another expression.
+
+In a simple interactive command parser where each input is one line, it may
+be sufficient to allow @code{yyparse} to return 1 on error and have the
+caller ignore the rest of the input line when that happens (and then call
+@code{yyparse} again).  But this is inadequate for a compiler, because it
+forgets all the syntactic context leading up to the error.  A syntax error
+deep within a function in the compiler input should not cause the compiler
+to treat the following line like the beginning of a source file.
+
+@findex error
+You can define how to recover from a syntax error by writing rules to
+recognize the special token @code{error}.  This is a terminal symbol that
+is always defined (you need not declare it) and reserved for error
+handling.  The Bison parser generates an @code{error} token whenever a
+syntax error happens; if you have provided a rule to recognize this token
+in the current context, the parse can continue.
+
+For example:
+
+@example
+stmts:
+  /* empty string */
+| stmts '\n'
+| stmts exp '\n'
+| stmts error '\n'
+@end example
+
+The fourth rule in this example says that an error followed by a newline
+makes a valid addition to any @code{stmts}.
+
+What happens if a syntax error occurs in the middle of an @code{exp}?  The
+error recovery rule, interpreted strictly, applies to the precise sequence
+of a @code{stmts}, an @code{error} and a newline.  If an error occurs in
+the middle of an @code{exp}, there will probably be some additional tokens
+and subexpressions on the stack after the last @code{stmts}, and there
+will be tokens to read before the next newline.  So the rule is not
+applicable in the ordinary way.
+
+But Bison can force the situation to fit the rule, by discarding part of
+the semantic context and part of the input.  First it discards states
+and objects from the stack until it gets back to a state in which the
+@code{error} token is acceptable.  (This means that the subexpressions
+already parsed are discarded, back to the last complete @code{stmts}.)
+At this point the @code{error} token can be shifted.  Then, if the old
+lookahead token is not acceptable to be shifted next, the parser reads
+tokens and discards them until it finds a token which is acceptable.  In
+this example, Bison reads and discards input until the next newline so
+that the fourth rule can apply.  Note that discarded symbols are
+possible sources of memory leaks, see @ref{Destructor Decl, , Freeing
+Discarded Symbols}, for a means to reclaim this memory.
+
+The choice of error rules in the grammar is a choice of strategies for
+error recovery.  A simple and useful strategy is simply to skip the rest of
+the current input line or current statement if an error is detected:
+
+@example
+stmt: error ';'  /* On error, skip until ';' is read.  */
+@end example
+
+It is also useful to recover to the matching close-delimiter of an
+opening-delimiter that has already been parsed.  Otherwise the
+close-delimiter will probably appear to be unmatched, and generate another,
+spurious error message:
+
+@example
+primary:
+  '(' expr ')'
+| '(' error ')'
+@dots{}
+;
+@end example
+
+Error recovery strategies are necessarily guesses.  When they guess wrong,
+one syntax error often leads to another.  In the above example, the error
+recovery rule guesses that an error is due to bad input within one
+@code{stmt}.  Suppose that instead a spurious semicolon is inserted in the
+middle of a valid @code{stmt}.  After the error recovery rule recovers
+from the first error, another syntax error will be found straightaway,
+since the text following the spurious semicolon is also an invalid
+@code{stmt}.
+
+To prevent an outpouring of error messages, the parser will output no error
+message for another syntax error that happens shortly after the first; only
+after three consecutive input tokens have been successfully shifted will
+error messages resume.
+
+Note that rules which accept the @code{error} token may have actions, just
+as any other rules can.
+
+@findex yyerrok
+You can make error messages resume immediately by using the macro
+@code{yyerrok} in an action.  If you do this in the error rule's action, no
+error messages will be suppressed.  This macro requires no arguments;
+@samp{yyerrok;} is a valid C statement.
+
+@findex yyclearin
+The previous lookahead token is reanalyzed immediately after an error.  If
+this is unacceptable, then the macro @code{yyclearin} may be used to clear
+this token.  Write the statement @samp{yyclearin;} in the error rule's
+action.
+@xref{Action Features, ,Special Features for Use in Actions}.
+
+For example, suppose that on a syntax error, an error handling routine is
+called that advances the input stream to some point where parsing should
+once again commence.  The next symbol returned by the lexical scanner is
+probably correct.  The previous lookahead token ought to be discarded
+with @samp{yyclearin;}.
+
+@vindex YYRECOVERING
+The expression @code{YYRECOVERING ()} yields 1 when the parser
+is recovering from a syntax error, and 0 otherwise.
+Syntax error diagnostics are suppressed while recovering from a syntax
+error.
+
+@node Context Dependency
+@chapter Handling Context Dependencies
+
+The Bison paradigm is to parse tokens first, then group them into larger
+syntactic units.  In many languages, the meaning of a token is affected by
+its context.  Although this violates the Bison paradigm, certain techniques
+(known as @dfn{kludges}) may enable you to write Bison parsers for such
+languages.
+
+@menu
+* Semantic Tokens::   Token parsing can depend on the semantic context.
+* Lexical Tie-ins::   Token parsing can depend on the syntactic context.
+* Tie-in Recovery::   Lexical tie-ins have implications for how
+                        error recovery rules must be written.
+@end menu
+
+(Actually, ``kludge'' means any technique that gets its job done but is
+neither clean nor robust.)
+
+@node Semantic Tokens
+@section Semantic Info in Token Types
+
+The C language has a context dependency: the way an identifier is used
+depends on what its current meaning is.  For example, consider this:
+
+@example
+foo (x);
+@end example
+
+This looks like a function call statement, but if @code{foo} is a typedef
+name, then this is actually a declaration of @code{x}.  How can a Bison
+parser for C decide how to parse this input?
+
+The method used in GNU C is to have two different token types,
+@code{IDENTIFIER} and @code{TYPENAME}.  When @code{yylex} finds an
+identifier, it looks up the current declaration of the identifier in order
+to decide which token type to return: @code{TYPENAME} if the identifier is
+declared as a typedef, @code{IDENTIFIER} otherwise.
+
+The grammar rules can then express the context dependency by the choice of
+token type to recognize.  @code{IDENTIFIER} is accepted as an expression,
+but @code{TYPENAME} is not.  @code{TYPENAME} can start a declaration, but
+@code{IDENTIFIER} cannot.  In contexts where the meaning of the identifier
+is @emph{not} significant, such as in declarations that can shadow a
+typedef name, either @code{TYPENAME} or @code{IDENTIFIER} is
+accepted---there is one rule for each of the two token types.
+
+This technique is simple to use if the decision of which kinds of
+identifiers to allow is made at a place close to where the identifier is
+parsed.  But in C this is not always so: C allows a declaration to
+redeclare a typedef name provided an explicit type has been specified
+earlier:
+
+@example
+typedef int foo, bar;
+int baz (void)
+@group
+@{
+  static bar (bar);      /* @r{redeclare @code{bar} as static variable} */
+  extern foo foo (foo);  /* @r{redeclare @code{foo} as function} */
+  return foo (bar);
+@}
+@end group
+@end example
+
+Unfortunately, the name being declared is separated from the declaration
+construct itself by a complicated syntactic structure---the ``declarator''.
+
+As a result, part of the Bison parser for C needs to be duplicated, with
+all the nonterminal names changed: once for parsing a declaration in
+which a typedef name can be redefined, and once for parsing a
+declaration in which that can't be done.  Here is a part of the
+duplication, with actions omitted for brevity:
+
+@example
+@group
+initdcl:
+  declarator maybeasm '=' init
+| declarator maybeasm
+;
+@end group
+
+@group
+notype_initdcl:
+  notype_declarator maybeasm '=' init
+| notype_declarator maybeasm
+;
+@end group
+@end example
+
+@noindent
+Here @code{initdcl} can redeclare a typedef name, but @code{notype_initdcl}
+cannot.  The distinction between @code{declarator} and
+@code{notype_declarator} is the same sort of thing.
+
+There is some similarity between this technique and a lexical tie-in
+(described next), in that information which alters the lexical analysis is
+changed during parsing by other parts of the program.  The difference is
+here the information is global, and is used for other purposes in the
+program.  A true lexical tie-in has a special-purpose flag controlled by
+the syntactic context.
+
+@node Lexical Tie-ins
+@section Lexical Tie-ins
+@cindex lexical tie-in
+
+One way to handle context-dependency is the @dfn{lexical tie-in}: a flag
+which is set by Bison actions, whose purpose is to alter the way tokens are
+parsed.
+
+For example, suppose we have a language vaguely like C, but with a special
+construct @samp{hex (@var{hex-expr})}.  After the keyword @code{hex} comes
+an expression in parentheses in which all integers are hexadecimal.  In
+particular, the token @samp{a1b} must be treated as an integer rather than
+as an identifier if it appears in that context.  Here is how you can do it:
+
+@example
+@group
+%@{
+  int hexflag;
+  int yylex (void);
+  void yyerror (char const *);
+%@}
+%%
+@dots{}
+@end group
+@group
+expr:
+  IDENTIFIER
+| constant
+| HEX '('        @{ hexflag = 1; @}
+    expr ')'     @{ hexflag = 0; $$ = $4; @}
+| expr '+' expr  @{ $$ = make_sum ($1, $3); @}
+@dots{}
+;
+@end group
+
+@group
+constant:
+  INTEGER
+| STRING
+;
+@end group
+@end example
+
+@noindent
+Here we assume that @code{yylex} looks at the value of @code{hexflag}; when
+it is nonzero, all integers are parsed in hexadecimal, and tokens starting
+with letters are parsed as integers if possible.
+
+The declaration of @code{hexflag} shown in the prologue of the grammar
+file is needed to make it accessible to the actions (@pxref{Prologue,
+,The Prologue}).  You must also write the code in @code{yylex} to obey
+the flag.
+
+@node Tie-in Recovery
+@section Lexical Tie-ins and Error Recovery
+
+Lexical tie-ins make strict demands on any error recovery rules you have.
+@xref{Error Recovery}.
+
+The reason for this is that the purpose of an error recovery rule is to
+abort the parsing of one construct and resume in some larger construct.
+For example, in C-like languages, a typical error recovery rule is to skip
+tokens until the next semicolon, and then start a new statement, like this:
+
+@example
+stmt:
+  expr ';'
+| IF '(' expr ')' stmt @{ @dots{} @}
+@dots{}
+| error ';'  @{ hexflag = 0; @}
+;
+@end example
+
+If there is a syntax error in the middle of a @samp{hex (@var{expr})}
+construct, this error rule will apply, and then the action for the
+completed @samp{hex (@var{expr})} will never run.  So @code{hexflag} would
+remain set for the entire rest of the input, or until the next @code{hex}
+keyword, causing identifiers to be misinterpreted as integers.
+
+To avoid this problem the error recovery rule itself clears @code{hexflag}.
+
+There may also be an error recovery rule that works within expressions.
+For example, there could be a rule which applies within parentheses
+and skips to the close-parenthesis:
+
+@example
+@group
+expr:
+  @dots{}
+| '(' expr ')'   @{ $$ = $2; @}
+| '(' error ')'
+@dots{}
+@end group
+@end example
+
+If this rule acts within the @code{hex} construct, it is not going to abort
+that construct (since it applies to an inner level of parentheses within
+the construct).  Therefore, it should not clear the flag: the rest of
+the @code{hex} construct should be parsed with the flag still in effect.
+
+What if there is an error recovery rule which might abort out of the
+@code{hex} construct or might not, depending on circumstances?  There is no
+way you can write the action to determine whether a @code{hex} construct is
+being aborted or not.  So if you are using a lexical tie-in, you had better
+make sure your error recovery rules are not of this kind.  Each rule must
+be such that you can be sure that it always will, or always won't, have to
+clear the flag.
+
+@c ================================================== Debugging Your Parser
+
+@node Debugging
+@chapter Debugging Your Parser
+
+Developing a parser can be a challenge, especially if you don't understand
+the algorithm (@pxref{Algorithm, ,The Bison Parser Algorithm}).  This
+chapter explains how understand and debug a parser.
+
+The first sections focus on the static part of the parser: its structure.
+They explain how to generate and read the detailed description of the
+automaton.  There are several formats available:
+@itemize @minus
+@item
+as text, see @ref{Understanding, , Understanding Your Parser};
+
+@item
+as a graph, see @ref{Graphviz,, Visualizing Your Parser};
+
+@item
+or as a markup report that can be turned, for instance, into HTML, see
+@ref{Xml,, Visualizing your parser in multiple formats}.
+@end itemize
+
+The last section focuses on the dynamic part of the parser: how to enable
+and understand the parser run-time traces (@pxref{Tracing, ,Tracing Your
+Parser}).
+
+@menu
+* Understanding::     Understanding the structure of your parser.
+* Graphviz::          Getting a visual representation of the parser.
+* Xml::               Getting a markup representation of the parser.
+* Tracing::           Tracing the execution of your parser.
+@end menu
+
+@node Understanding
+@section Understanding Your Parser
+
+As documented elsewhere (@pxref{Algorithm, ,The Bison Parser Algorithm})
+Bison parsers are @dfn{shift/reduce automata}.  In some cases (much more
+frequent than one would hope), looking at this automaton is required to
+tune or simply fix a parser.
+
+The textual file is generated when the options @option{--report} or
+@option{--verbose} are specified, see @ref{Invocation, , Invoking
+Bison}.  Its name is made by removing @samp{.tab.c} or @samp{.c} from
+the parser implementation file name, and adding @samp{.output}
+instead.  Therefore, if the grammar file is @file{foo.y}, then the
+parser implementation file is called @file{foo.tab.c} by default.  As
+a consequence, the verbose output file is called @file{foo.output}.
+
+The following grammar file, @file{calc.y}, will be used in the sequel:
+
+@example
+%token NUM STR
+@group
+%left '+' '-'
+%left '*'
+@end group
+%%
+@group
+exp:
+  exp '+' exp
+| exp '-' exp
+| exp '*' exp
+| exp '/' exp
+| NUM
+;
+@end group
+useless: STR;
+%%
+@end example
+
+@command{bison} reports:
+
+@example
+calc.y: warning: 1 nonterminal useless in grammar
+calc.y: warning: 1 rule useless in grammar
+calc.y:12.1-7: warning: nonterminal useless in grammar: useless
+calc.y:12.10-12: warning: rule useless in grammar: useless: STR
+calc.y: conflicts: 7 shift/reduce
+@end example
+
+When given @option{--report=state}, in addition to @file{calc.tab.c}, it
+creates a file @file{calc.output} with contents detailed below.  The
+order of the output and the exact presentation might vary, but the
+interpretation is the same.
+
+@noindent
+@cindex token, useless
+@cindex useless token
+@cindex nonterminal, useless
+@cindex useless nonterminal
+@cindex rule, useless
+@cindex useless rule
+The first section reports useless tokens, nonterminals and rules.  Useless
+nonterminals and rules are removed in order to produce a smaller parser, but
+useless tokens are preserved, since they might be used by the scanner (note
+the difference between ``useless'' and ``unused'' below):
+
+@example
+Nonterminals useless in grammar
+   useless
+
+Terminals unused in grammar
+   STR
+
+Rules useless in grammar
+    6 useless: STR
+@end example
+
+@noindent
+The next section lists states that still have conflicts.
+
+@example
+State 8 conflicts: 1 shift/reduce
+State 9 conflicts: 1 shift/reduce
+State 10 conflicts: 1 shift/reduce
+State 11 conflicts: 4 shift/reduce
+@end example
+
+@noindent
+Then Bison reproduces the exact grammar it used:
+
+@example
+Grammar
+
+    0 $accept: exp $end
+
+    1 exp: exp '+' exp
+    2    | exp '-' exp
+    3    | exp '*' exp
+    4    | exp '/' exp
+    5    | NUM
+@end example
+
+@noindent
+and reports the uses of the symbols:
+
+@example
+@group
+Terminals, with rules where they appear
+
+$end (0) 0
+'*' (42) 3
+'+' (43) 1
+'-' (45) 2
+'/' (47) 4
+error (256)
+NUM (258) 5
+STR (259)
+@end group
+
+@group
+Nonterminals, with rules where they appear
+
+$accept (9)
+    on left: 0
+exp (10)
+    on left: 1 2 3 4 5, on right: 0 1 2 3 4
+@end group
+@end example
+
+@noindent
+@cindex item
+@cindex pointed rule
+@cindex rule, pointed
+Bison then proceeds onto the automaton itself, describing each state
+with its set of @dfn{items}, also known as @dfn{pointed rules}.  Each
+item is a production rule together with a point (@samp{.}) marking
+the location of the input cursor.
+
+@example
+State 0
+
+    0 $accept: . exp $end
+
+    NUM  shift, and go to state 1
+
+    exp  go to state 2
+@end example
+
+This reads as follows: ``state 0 corresponds to being at the very
+beginning of the parsing, in the initial rule, right before the start
+symbol (here, @code{exp}).  When the parser returns to this state right
+after having reduced a rule that produced an @code{exp}, the control
+flow jumps to state 2.  If there is no such transition on a nonterminal
+symbol, and the lookahead is a @code{NUM}, then this token is shifted onto
+the parse stack, and the control flow jumps to state 1.  Any other
+lookahead triggers a syntax error.''
+
+@cindex core, item set
+@cindex item set core
+@cindex kernel, item set
+@cindex item set core
+Even though the only active rule in state 0 seems to be rule 0, the
+report lists @code{NUM} as a lookahead token because @code{NUM} can be
+at the beginning of any rule deriving an @code{exp}.  By default Bison
+reports the so-called @dfn{core} or @dfn{kernel} of the item set, but if
+you want to see more detail you can invoke @command{bison} with
+@option{--report=itemset} to list the derived items as well:
+
+@example
+State 0
+
+    0 $accept: . exp $end
+    1 exp: . exp '+' exp
+    2    | . exp '-' exp
+    3    | . exp '*' exp
+    4    | . exp '/' exp
+    5    | . NUM
+
+    NUM  shift, and go to state 1
+
+    exp  go to state 2
+@end example
+
+@noindent
+In the state 1@dots{}
+
+@example
+State 1
+
+    5 exp: NUM .
+
+    $default  reduce using rule 5 (exp)
+@end example
+
+@noindent
+the rule 5, @samp{exp: NUM;}, is completed.  Whatever the lookahead token
+(@samp{$default}), the parser will reduce it.  If it was coming from
+State 0, then, after this reduction it will return to state 0, and will
+jump to state 2 (@samp{exp: go to state 2}).
+
+@example
+State 2
+
+    0 $accept: exp . $end
+    1 exp: exp . '+' exp
+    2    | exp . '-' exp
+    3    | exp . '*' exp
+    4    | exp . '/' exp
+
+    $end  shift, and go to state 3
+    '+'   shift, and go to state 4
+    '-'   shift, and go to state 5
+    '*'   shift, and go to state 6
+    '/'   shift, and go to state 7
+@end example
+
+@noindent
+In state 2, the automaton can only shift a symbol.  For instance,
+because of the item @samp{exp: exp . '+' exp}, if the lookahead is
+@samp{+} it is shifted onto the parse stack, and the automaton
+jumps to state 4, corresponding to the item @samp{exp: exp '+' . exp}.
+Since there is no default action, any lookahead not listed triggers a syntax
+error.
+
+@cindex accepting state
+The state 3 is named the @dfn{final state}, or the @dfn{accepting
+state}:
+
+@example
+State 3
+
+    0 $accept: exp $end .
+
+    $default  accept
+@end example
+
+@noindent
+the initial rule is completed (the start symbol and the end-of-input were
+read), the parsing exits successfully.
+
+The interpretation of states 4 to 7 is straightforward, and is left to
+the reader.
+
+@example
+State 4
+
+    1 exp: exp '+' . exp
+
+    NUM  shift, and go to state 1
+
+    exp  go to state 8
+
+
+State 5
+
+    2 exp: exp '-' . exp
+
+    NUM  shift, and go to state 1
+
+    exp  go to state 9
+
+
+State 6
+
+    3 exp: exp '*' . exp
+
+    NUM  shift, and go to state 1
+
+    exp  go to state 10
+
+
+State 7
+
+    4 exp: exp '/' . exp
+
+    NUM  shift, and go to state 1
+
+    exp  go to state 11
+@end example
+
+As was announced in beginning of the report, @samp{State 8 conflicts:
+1 shift/reduce}:
+
+@example
+State 8
+
+    1 exp: exp . '+' exp
+    1    | exp '+' exp .
+    2    | exp . '-' exp
+    3    | exp . '*' exp
+    4    | exp . '/' exp
+
+    '*'  shift, and go to state 6
+    '/'  shift, and go to state 7
+
+    '/'       [reduce using rule 1 (exp)]
+    $default  reduce using rule 1 (exp)
+@end example
+
+Indeed, there are two actions associated to the lookahead @samp{/}:
+either shifting (and going to state 7), or reducing rule 1.  The
+conflict means that either the grammar is ambiguous, or the parser lacks
+information to make the right decision.  Indeed the grammar is
+ambiguous, as, since we did not specify the precedence of @samp{/}, the
+sentence @samp{NUM + NUM / NUM} can be parsed as @samp{NUM + (NUM /
+NUM)}, which corresponds to shifting @samp{/}, or as @samp{(NUM + NUM) /
+NUM}, which corresponds to reducing rule 1.
+
+Because in deterministic parsing a single decision can be made, Bison
+arbitrarily chose to disable the reduction, see @ref{Shift/Reduce, ,
+Shift/Reduce Conflicts}.  Discarded actions are reported between
+square brackets.
+
+Note that all the previous states had a single possible action: either
+shifting the next token and going to the corresponding state, or
+reducing a single rule.  In the other cases, i.e., when shifting
+@emph{and} reducing is possible or when @emph{several} reductions are
+possible, the lookahead is required to select the action.  State 8 is
+one such state: if the lookahead is @samp{*} or @samp{/} then the action
+is shifting, otherwise the action is reducing rule 1.  In other words,
+the first two items, corresponding to rule 1, are not eligible when the
+lookahead token is @samp{*}, since we specified that @samp{*} has higher
+precedence than @samp{+}.  More generally, some items are eligible only
+with some set of possible lookahead tokens.  When run with
+@option{--report=lookahead}, Bison specifies these lookahead tokens:
+
+@example
+State 8
+
+    1 exp: exp . '+' exp
+    1    | exp '+' exp .  [$end, '+', '-', '/']
+    2    | exp . '-' exp
+    3    | exp . '*' exp
+    4    | exp . '/' exp
+
+    '*'  shift, and go to state 6
+    '/'  shift, and go to state 7
+
+    '/'       [reduce using rule 1 (exp)]
+    $default  reduce using rule 1 (exp)
+@end example
+
+Note however that while @samp{NUM + NUM / NUM} is ambiguous (which results in
+the conflicts on @samp{/}), @samp{NUM + NUM * NUM} is not: the conflict was
+solved thanks to associativity and precedence directives.  If invoked with
+@option{--report=solved}, Bison includes information about the solved
+conflicts in the report:
+
+@example
+Conflict between rule 1 and token '+' resolved as reduce (%left '+').
+Conflict between rule 1 and token '-' resolved as reduce (%left '-').
+Conflict between rule 1 and token '*' resolved as shift ('+' < '*').
+@end example
+
+
+The remaining states are similar:
+
+@example
+@group
+State 9
+
+    1 exp: exp . '+' exp
+    2    | exp . '-' exp
+    2    | exp '-' exp .
+    3    | exp . '*' exp
+    4    | exp . '/' exp
+
+    '*'  shift, and go to state 6
+    '/'  shift, and go to state 7
+
+    '/'       [reduce using rule 2 (exp)]
+    $default  reduce using rule 2 (exp)
+@end group
+
+@group
+State 10
+
+    1 exp: exp . '+' exp
+    2    | exp . '-' exp
+    3    | exp . '*' exp
+    3    | exp '*' exp .
+    4    | exp . '/' exp
+
+    '/'  shift, and go to state 7
+
+    '/'       [reduce using rule 3 (exp)]
+    $default  reduce using rule 3 (exp)
+@end group
+
+@group
+State 11
+
+    1 exp: exp . '+' exp
+    2    | exp . '-' exp
+    3    | exp . '*' exp
+    4    | exp . '/' exp
+    4    | exp '/' exp .
+
+    '+'  shift, and go to state 4
+    '-'  shift, and go to state 5
+    '*'  shift, and go to state 6
+    '/'  shift, and go to state 7
+
+    '+'       [reduce using rule 4 (exp)]
+    '-'       [reduce using rule 4 (exp)]
+    '*'       [reduce using rule 4 (exp)]
+    '/'       [reduce using rule 4 (exp)]
+    $default  reduce using rule 4 (exp)
+@end group
+@end example
+
+@noindent
+Observe that state 11 contains conflicts not only due to the lack of
+precedence of @samp{/} with respect to @samp{+}, @samp{-}, and @samp{*}, but
+also because the associativity of @samp{/} is not specified.
+
+Bison may also produce an HTML version of this output, via an XML file and
+XSLT processing (@pxref{Xml,,Visualizing your parser in multiple formats}).
+
+@c ================================================= Graphical Representation
+
+@node Graphviz
+@section Visualizing Your Parser
+@cindex dot
+
+As another means to gain better understanding of the shift/reduce
+automaton corresponding to the Bison parser, a DOT file can be generated. Note
+that debugging a real grammar with this is tedious at best, and impractical
+most of the times, because the generated files are huge (the generation of
+a PDF or PNG file from it will take very long, and more often than not it will
+fail due to memory exhaustion). This option was rather designed for beginners,
+to help them understand LR parsers.
+
+This file is generated when the @option{--graph} option is specified
+(@pxref{Invocation, , Invoking Bison}).  Its name is made by removing
+@samp{.tab.c} or @samp{.c} from the parser implementation file name, and
+adding @samp{.dot} instead.  If the grammar file is @file{foo.y}, the
+Graphviz output file is called @file{foo.dot}.  A DOT file may also be
+produced via an XML file and XSLT processing (@pxref{Xml,,Visualizing your
+parser in multiple formats}).
+
+
+The following grammar file, @file{rr.y}, will be used in the sequel:
+
+@example
+%%
+@group
+exp: a ";" | b ".";
+a: "0";
+b: "0";
+@end group
+@end example
+
+The graphical output
+@ifnotinfo
+(see @ref{fig:graph})
+@end ifnotinfo
+is very similar to the textual one, and as such it is easier understood by
+making direct comparisons between them.  @xref{Debugging, , Debugging Your
+Parser}, for a detailled analysis of the textual report.
+
+@ifnotinfo
+@float Figure,fig:graph
+@image{figs/example, 430pt}
+@caption{A graphical rendering of the parser.}
+@end float
+@end ifnotinfo
+
+@subheading Graphical Representation of States
+
+The items (pointed rules) for each state are grouped together in graph nodes.
+Their numbering is the same as in the verbose file. See the following points,
+about transitions, for examples
+
+When invoked with @option{--report=lookaheads}, the lookahead tokens, when
+needed, are shown next to the relevant rule between square brackets as a
+comma separated list. This is the case in the figure for the representation of
+reductions, below.
+
+@sp 1
+
+The transitions are represented as directed edges between the current and
+the target states.
+
+@subheading Graphical Representation of Shifts
+
+Shifts are shown as solid arrows, labelled with the lookahead token for that
+shift. The following describes a reduction in the @file{rr.output} file:
+
+@example
+@group
+State 3
+
+    1 exp: a . ";"
+
+    ";"  shift, and go to state 6
+@end group
+@end example
+
+A Graphviz rendering of this portion of the graph could be:
+
+@center @image{figs/example-shift, 100pt}
+
+@subheading Graphical Representation of Reductions
+
+Reductions are shown as solid arrows, leading to a diamond-shaped node
+bearing the number of the reduction rule. The arrow is labelled with the
+appropriate comma separated lookahead tokens. If the reduction is the default
+action for the given state, there is no such label.
+
+This is how reductions are represented in the verbose file @file{rr.output}:
+@example
+State 1
+
+    3 a: "0" .  [";"]
+    4 b: "0" .  ["."]
+
+    "."       reduce using rule 4 (b)
+    $default  reduce using rule 3 (a)
+@end example
+
+A Graphviz rendering of this portion of the graph could be:
+
+@center @image{figs/example-reduce, 120pt}
+
+When unresolved conflicts are present, because in deterministic parsing
+a single decision can be made, Bison can arbitrarily choose to disable a
+reduction, see @ref{Shift/Reduce, , Shift/Reduce Conflicts}.  Discarded actions
+are distinguished by a red filling color on these nodes, just like how they are
+reported between square brackets in the verbose file.
+
+The reduction corresponding to the rule number 0 is the acceptation
+state. It is shown as a blue diamond, labelled ``Acc''.
+
+@subheading Graphical representation of go tos
+
+The @samp{go to} jump transitions are represented as dotted lines bearing
+the name of the rule being jumped to.
+
+@c ================================================= XML
+
+@node Xml
+@section Visualizing your parser in multiple formats
+@cindex xml
+
+Bison supports two major report formats: textual output
+(@pxref{Understanding, ,Understanding Your Parser}) when invoked
+with option @option{--verbose}, and DOT
+(@pxref{Graphviz,, Visualizing Your Parser}) when invoked with
+option @option{--graph}. However,
+another alternative is to output an XML file that may then be, with
+@command{xsltproc}, rendered as either a raw text format equivalent to the
+verbose file, or as an HTML version of the same file, with clickable
+transitions, or even as a DOT. The @file{.output} and DOT files obtained via
+XSLT have no difference whatsoever with those obtained by invoking
+@command{bison} with options @option{--verbose} or @option{--graph}.
+
+The XML file is generated when the options @option{-x} or
+@option{--xml[=FILE]} are specified, see @ref{Invocation,,Invoking Bison}.
+If not specified, its name is made by removing @samp{.tab.c} or @samp{.c}
+from the parser implementation file name, and adding @samp{.xml} instead.
+For instance, if the grammar file is @file{foo.y}, the default XML output
+file is @file{foo.xml}.
+
+Bison ships with a @file{data/xslt} directory, containing XSL Transformation
+files to apply to the XML file. Their names are non-ambiguous:
+
+@table @file
+@item xml2dot.xsl
+Used to output a copy of the DOT visualization of the automaton.
+@item xml2text.xsl
+Used to output a copy of the @samp{.output} file.
+@item xml2xhtml.xsl
+Used to output an xhtml enhancement of the @samp{.output} file.
+@end table
+
+Sample usage (requires @command{xsltproc}):
+@example
+$ bison -x gr.y
+@group
+$ bison --print-datadir
+/usr/local/share/bison
+@end group
+$ xsltproc /usr/local/share/bison/xslt/xml2xhtml.xsl gr.xml >gr.html
+@end example
+
+@c ================================================= Tracing
+
+@node Tracing
+@section Tracing Your Parser
+@findex yydebug
+@cindex debugging
+@cindex tracing the parser
+
+When a Bison grammar compiles properly but parses ``incorrectly'', the
+@code{yydebug} parser-trace feature helps figuring out why.
+
+@menu
+* Enabling Traces::    Activating run-time trace support
+* Mfcalc Traces::      Extending @code{mfcalc} to support traces
+* The YYPRINT Macro::  Obsolete interface for semantic value reports
+@end menu
+
+@node Enabling Traces
+@subsection  Enabling Traces
+There are several means to enable compilation of trace facilities:
+
+@table @asis
+@item the macro @code{YYDEBUG}
+@findex YYDEBUG
+Define the macro @code{YYDEBUG} to a nonzero value when you compile the
+parser.  This is compliant with POSIX Yacc.  You could use
+@samp{-DYYDEBUG=1} as a compiler option or you could put @samp{#define
+YYDEBUG 1} in the prologue of the grammar file (@pxref{Prologue, , The
+Prologue}).
+
+If the @code{%define} variable @code{api.prefix} is used (@pxref{Multiple
+Parsers, ,Multiple Parsers in the Same Program}), for instance @samp{%define
+api.prefix x}, then if @code{CDEBUG} is defined, its value controls the
+tracing feature (enabled if and only if nonzero); otherwise tracing is
+enabled if and only if @code{YYDEBUG} is nonzero.
+
+@item the option @option{-t} (POSIX Yacc compliant)
+@itemx the option @option{--debug} (Bison extension)
+Use the @samp{-t} option when you run Bison (@pxref{Invocation, ,Invoking
+Bison}).  With @samp{%define api.prefix c}, it defines @code{CDEBUG} to 1,
+otherwise it defines @code{YYDEBUG} to 1.
+
+@item the directive @samp{%debug}
+@findex %debug
+Add the @code{%debug} directive (@pxref{Decl Summary, ,Bison Declaration
+Summary}).  This is a Bison extension, especially useful for languages that
+don't use a preprocessor.  Unless POSIX and Yacc portability matter to you,
+this is the preferred solution.
+@end table
+
+We suggest that you always enable the debug option so that debugging is
+always possible.
+
+@findex YYFPRINTF
+The trace facility outputs messages with macro calls of the form
+@code{YYFPRINTF (stderr, @var{format}, @var{args})} where
+@var{format} and @var{args} are the usual @code{printf} format and variadic
+arguments.  If you define @code{YYDEBUG} to a nonzero value but do not
+define @code{YYFPRINTF}, @code{<stdio.h>} is automatically included
+and @code{YYFPRINTF} is defined to @code{fprintf}.
+
+Once you have compiled the program with trace facilities, the way to
+request a trace is to store a nonzero value in the variable @code{yydebug}.
+You can do this by making the C code do it (in @code{main}, perhaps), or
+you can alter the value with a C debugger.
+
+Each step taken by the parser when @code{yydebug} is nonzero produces a
+line or two of trace information, written on @code{stderr}.  The trace
+messages tell you these things:
+
+@itemize @bullet
+@item
+Each time the parser calls @code{yylex}, what kind of token was read.
+
+@item
+Each time a token is shifted, the depth and complete contents of the
+state stack (@pxref{Parser States}).
+
+@item
+Each time a rule is reduced, which rule it is, and the complete contents
+of the state stack afterward.
+@end itemize
+
+To make sense of this information, it helps to refer to the automaton
+description file (@pxref{Understanding, ,Understanding Your Parser}).
+This file shows the meaning of each state in terms of
+positions in various rules, and also what each state will do with each
+possible input token.  As you read the successive trace messages, you
+can see that the parser is functioning according to its specification in
+the listing file.  Eventually you will arrive at the place where
+something undesirable happens, and you will see which parts of the
+grammar are to blame.
+
+The parser implementation file is a C/C++/Java program and you can use
+debuggers on it, but it's not easy to interpret what it is doing.  The
+parser function is a finite-state machine interpreter, and aside from
+the actions it executes the same code over and over.  Only the values
+of variables show where in the grammar it is working.
+
+@node Mfcalc Traces
+@subsection Enabling Debug Traces for @code{mfcalc}
+
+The debugging information normally gives the token type of each token read,
+but not its semantic value.  The @code{%printer} directive allows specify
+how semantic values are reported, see @ref{Printer Decl, , Printing
+Semantic Values}.  For backward compatibility, Yacc like C parsers may also
+use the @code{YYPRINT} (@pxref{The YYPRINT Macro, , The @code{YYPRINT}
+Macro}), but its use is discouraged.
+
+As a demonstration of @code{%printer}, consider the multi-function
+calculator, @code{mfcalc} (@pxref{Multi-function Calc}).  To enable run-time
+traces, and semantic value reports, insert the following directives in its
+prologue:
+
+@comment file: mfcalc.y: 2
+@example
+/* Generate the parser description file.  */
+%verbose
+/* Enable run-time traces (yydebug).  */
+%define parse.trace
+
+/* Formatting semantic values.  */
+%printer @{ fprintf (yyoutput, "%s", $$->name); @} VAR;
+%printer @{ fprintf (yyoutput, "%s()", $$->name); @} FNCT;
+%printer @{ fprintf (yyoutput, "%g", $$); @} <val>;
+@end example
+
+The @code{%define} directive instructs Bison to generate run-time trace
+support.  Then, activation of these traces is controlled at run-time by the
+@code{yydebug} variable, which is disabled by default.  Because these traces
+will refer to the ``states'' of the parser, it is helpful to ask for the
+creation of a description of that parser; this is the purpose of (admittedly
+ill-named) @code{%verbose} directive.
+
+The set of @code{%printer} directives demonstrates how to format the
+semantic value in the traces.  Note that the specification can be done
+either on the symbol type (e.g., @code{VAR} or @code{FNCT}), or on the type
+tag: since @code{<val>} is the type for both @code{NUM} and @code{exp}, this
+printer will be used for them.
+
+Here is a sample of the information provided by run-time traces.  The traces
+are sent onto standard error.
+
+@example
+$ @kbd{echo 'sin(1-1)' | ./mfcalc -p}
+Starting parse
+Entering state 0
+Reducing stack by rule 1 (line 34):
+-> $$ = nterm input ()
+Stack now 0
+Entering state 1
+@end example
+
+@noindent
+This first batch shows a specific feature of this grammar: the first rule
+(which is in line 34 of @file{mfcalc.y} can be reduced without even having
+to look for the first token.  The resulting left-hand symbol (@code{$$}) is
+a valueless (@samp{()}) @code{input} non terminal (@code{nterm}).
+
+Then the parser calls the scanner.
+@example
+Reading a token: Next token is token FNCT (sin())
+Shifting token FNCT (sin())
+Entering state 6
+@end example
+
+@noindent
+That token (@code{token}) is a function (@code{FNCT}) whose value is
+@samp{sin} as formatted per our @code{%printer} specification: @samp{sin()}.
+The parser stores (@code{Shifting}) that token, and others, until it can do
+something about it.
+
+@example
+Reading a token: Next token is token '(' ()
+Shifting token '(' ()
+Entering state 14
+Reading a token: Next token is token NUM (1.000000)
+Shifting token NUM (1.000000)
+Entering state 4
+Reducing stack by rule 6 (line 44):
+   $1 = token NUM (1.000000)
+-> $$ = nterm exp (1.000000)
+Stack now 0 1 6 14
+Entering state 24
+@end example
+
+@noindent
+The previous reduction demonstrates the @code{%printer} directive for
+@code{<val>}: both the token @code{NUM} and the resulting nonterminal
+@code{exp} have @samp{1} as value.
+
+@example
+Reading a token: Next token is token '-' ()
+Shifting token '-' ()
+Entering state 17
+Reading a token: Next token is token NUM (1.000000)
+Shifting token NUM (1.000000)
+Entering state 4
+Reducing stack by rule 6 (line 44):
+   $1 = token NUM (1.000000)
+-> $$ = nterm exp (1.000000)
+Stack now 0 1 6 14 24 17
+Entering state 26
+Reading a token: Next token is token ')' ()
+Reducing stack by rule 11 (line 49):
+   $1 = nterm exp (1.000000)
+   $2 = token '-' ()
+   $3 = nterm exp (1.000000)
+-> $$ = nterm exp (0.000000)
+Stack now 0 1 6 14
+Entering state 24
+@end example
+
+@noindent
+The rule for the subtraction was just reduced.  The parser is about to
+discover the end of the call to @code{sin}.
+
+@example
+Next token is token ')' ()
+Shifting token ')' ()
+Entering state 31
+Reducing stack by rule 9 (line 47):
+   $1 = token FNCT (sin())
+   $2 = token '(' ()
+   $3 = nterm exp (0.000000)
+   $4 = token ')' ()
+-> $$ = nterm exp (0.000000)
+Stack now 0 1
+Entering state 11
+@end example
+
+@noindent
+Finally, the end-of-line allow the parser to complete the computation, and
+display its result.
+
+@example
+Reading a token: Next token is token '\n' ()
+Shifting token '\n' ()
+Entering state 22
+Reducing stack by rule 4 (line 40):
+   $1 = nterm exp (0.000000)
+   $2 = token '\n' ()
+@result{} 0
+-> $$ = nterm line ()
+Stack now 0 1
+Entering state 10
+Reducing stack by rule 2 (line 35):
+   $1 = nterm input ()
+   $2 = nterm line ()
+-> $$ = nterm input ()
+Stack now 0
+Entering state 1
+@end example
+
+The parser has returned into state 1, in which it is waiting for the next
+expression to evaluate, or for the end-of-file token, which causes the
+completion of the parsing.
+
+@example
+Reading a token: Now at end of input.
+Shifting token $end ()
+Entering state 2
+Stack now 0 1 2
+Cleanup: popping token $end ()
+Cleanup: popping nterm input ()
+@end example
+
+
+@node The YYPRINT Macro
+@subsection The @code{YYPRINT} Macro
+
+@findex YYPRINT
+Before @code{%printer} support, semantic values could be displayed using the
+@code{YYPRINT} macro, which works only for terminal symbols and only with
+the @file{yacc.c} skeleton.
+
+@deffn {Macro} YYPRINT (@var{stream}, @var{token}, @var{value});
+@findex YYPRINT
+If you define @code{YYPRINT}, it should take three arguments.  The parser
+will pass a standard I/O stream, the numeric code for the token type, and
+the token value (from @code{yylval}).
+
+For @file{yacc.c} only.  Obsoleted by @code{%printer}.
+@end deffn
+
+Here is an example of @code{YYPRINT} suitable for the multi-function
+calculator (@pxref{Mfcalc Declarations, ,Declarations for @code{mfcalc}}):
+
+@example
+%@{
+  static void print_token_value (FILE *, int, YYSTYPE);
+  #define YYPRINT(File, Type, Value)            \
+    print_token_value (File, Type, Value)
+%@}
+
+@dots{} %% @dots{} %% @dots{}
+
+static void
+print_token_value (FILE *file, int type, YYSTYPE value)
+@{
+  if (type == VAR)
+    fprintf (file, "%s", value.tptr->name);
+  else if (type == NUM)
+    fprintf (file, "%d", value.val);
+@}
+@end example
+
+@c ================================================= Invoking Bison
+
+@node Invocation
+@chapter Invoking Bison
+@cindex invoking Bison
+@cindex Bison invocation
+@cindex options for invoking Bison
+
+The usual way to invoke Bison is as follows:
+
+@example
+bison @var{infile}
+@end example
+
+Here @var{infile} is the grammar file name, which usually ends in
+@samp{.y}.  The parser implementation file's name is made by replacing
+the @samp{.y} with @samp{.tab.c} and removing any leading directory.
+Thus, the @samp{bison foo.y} file name yields @file{foo.tab.c}, and
+the @samp{bison hack/foo.y} file name yields @file{foo.tab.c}.  It's
+also possible, in case you are writing C++ code instead of C in your
+grammar file, to name it @file{foo.ypp} or @file{foo.y++}.  Then, the
+output files will take an extension like the given one as input
+(respectively @file{foo.tab.cpp} and @file{foo.tab.c++}).  This
+feature takes effect with all options that manipulate file names like
+@samp{-o} or @samp{-d}.
+
+For example :
+
+@example
+bison -d @var{infile.yxx}
+@end example
+@noindent
+will produce @file{infile.tab.cxx} and @file{infile.tab.hxx}, and
+
+@example
+bison -d -o @var{output.c++} @var{infile.y}
+@end example
+@noindent
+will produce @file{output.c++} and @file{outfile.h++}.
+
+For compatibility with POSIX, the standard Bison
+distribution also contains a shell script called @command{yacc} that
+invokes Bison with the @option{-y} option.
+
+@menu
+* Bison Options::     All the options described in detail,
+                        in alphabetical order by short options.
+* Option Cross Key::  Alphabetical list of long options.
+* Yacc Library::      Yacc-compatible @code{yylex} and @code{main}.
+@end menu
+
+@node Bison Options
+@section Bison Options
+
+Bison supports both traditional single-letter options and mnemonic long
+option names.  Long option names are indicated with @samp{--} instead of
+@samp{-}.  Abbreviations for option names are allowed as long as they
+are unique.  When a long option takes an argument, like
+@samp{--file-prefix}, connect the option name and the argument with
+@samp{=}.
+
+Here is a list of options that can be used with Bison, alphabetized by
+short option.  It is followed by a cross key alphabetized by long
+option.
+
+@c Please, keep this ordered as in `bison --help'.
+@noindent
+Operations modes:
+@table @option
+@item -h
+@itemx --help
+Print a summary of the command-line options to Bison and exit.
+
+@item -V
+@itemx --version
+Print the version number of Bison and exit.
+
+@item --print-localedir
+Print the name of the directory containing locale-dependent data.
+
+@item --print-datadir
+Print the name of the directory containing skeletons and XSLT.
+
+@item -y
+@itemx --yacc
+Act more like the traditional Yacc command.  This can cause different
+diagnostics to be generated, and may change behavior in other minor
+ways.  Most importantly, imitate Yacc's output file name conventions,
+so that the parser implementation file is called @file{y.tab.c}, and
+the other outputs are called @file{y.output} and @file{y.tab.h}.
+Also, if generating a deterministic parser in C, generate
+@code{#define} statements in addition to an @code{enum} to associate
+token numbers with token names.  Thus, the following shell script can
+substitute for Yacc, and the Bison distribution contains such a script
+for compatibility with POSIX:
+
+@example
+#! /bin/sh
+bison -y "$@@"
+@end example
+
+The @option{-y}/@option{--yacc} option is intended for use with
+traditional Yacc grammars.  If your grammar uses a Bison extension
+like @samp{%glr-parser}, Bison might not be Yacc-compatible even if
+this option is specified.
+
+@item -W [@var{category}]
+@itemx --warnings[=@var{category}]
+Output warnings falling in @var{category}.  @var{category} can be one
+of:
+@table @code
+@item midrule-values
+Warn about mid-rule values that are set but not used within any of the actions
+of the parent rule.
+For example, warn about unused @code{$2} in:
+
+@example
+exp: '1' @{ $$ = 1; @} '+' exp @{ $$ = $1 + $4; @};
+@end example
+
+Also warn about mid-rule values that are used but not set.
+For example, warn about unset @code{$$} in the mid-rule action in:
+
+@example
+exp: '1' @{ $1 = 1; @} '+' exp @{ $$ = $2 + $4; @};
+@end example
+
+These warnings are not enabled by default since they sometimes prove to
+be false alarms in existing grammars employing the Yacc constructs
+@code{$0} or @code{$-@var{n}} (where @var{n} is some positive integer).
+
+@item yacc
+Incompatibilities with POSIX Yacc.
+
+@item conflicts-sr
+@itemx conflicts-rr
+S/R and R/R conflicts.  These warnings are enabled by default.  However, if
+the @code{%expect} or @code{%expect-rr} directive is specified, an
+unexpected number of conflicts is an error, and an expected number of
+conflicts is not reported, so @option{-W} and @option{--warning} then have
+no effect on the conflict report.
+
+@item other
+All warnings not categorized above.  These warnings are enabled by default.
+
+This category is provided merely for the sake of completeness.  Future
+releases of Bison may move warnings from this category to new, more specific
+categories.
+
+@item all
+All the warnings.
+@item none
+Turn off all the warnings.
+@item error
+Treat warnings as errors.
+@end table
+
+A category can be turned off by prefixing its name with @samp{no-}.  For
+instance, @option{-Wno-yacc} will hide the warnings about
+POSIX Yacc incompatibilities.
+
+@item -f [@var{feature}]
+@itemx --feature[=@var{feature}]
+Activate miscellaneous @var{feature}. @var{feature} can be one of:
+@table @code
+@item caret
+@itemx diagnostics-show-caret
+Show caret errors, in a manner similar to GCC's
+@option{-fdiagnostics-show-caret}, or Clang's @option{-fcaret-diagnotics}. The
+location provided with the message is used to quote the corresponding line of
+the source file, underlining the important part of it with carets (^). Here is
+an example, using the following file @file{in.y}:
+
+@example
+%type <ival> exp
+%%
+exp: exp '+' exp @{ $exp = $1 + $2; @};
+@end example
+
+When invoked with @option{-fcaret}, Bison will report:
+
+@example
+@group
+in.y:3.20-23: error: ambiguous reference: '$exp'
+ exp: exp '+' exp @{ $exp = $1 + $2; @};
+                    ^^^^
+@end group
+@group
+in.y:3.1-3:       refers to: $exp at $$
+ exp: exp '+' exp @{ $exp = $1 + $2; @};
+ ^^^
+@end group
+@group
+in.y:3.6-8:       refers to: $exp at $1
+ exp: exp '+' exp @{ $exp = $1 + $2; @};
+      ^^^
+@end group
+@group
+in.y:3.14-16:     refers to: $exp at $3
+ exp: exp '+' exp @{ $exp = $1 + $2; @};
+              ^^^
+@end group
+@group
+in.y:3.32-33: error: $2 of 'exp' has no declared type
+ exp: exp '+' exp @{ $exp = $1 + $2; @};
+                                ^^
+@end group
+@end example
+
+@end table
+@end table
+
+@noindent
+Tuning the parser:
+
+@table @option
+@item -t
+@itemx --debug
+In the parser implementation file, define the macro @code{YYDEBUG} to
+1 if it is not already defined, so that the debugging facilities are
+compiled.  @xref{Tracing, ,Tracing Your Parser}.
+
+@item -D @var{name}[=@var{value}]
+@itemx --define=@var{name}[=@var{value}]
+@itemx -F @var{name}[=@var{value}]
+@itemx --force-define=@var{name}[=@var{value}]
+Each of these is equivalent to @samp{%define @var{name} "@var{value}"}
+(@pxref{%define Summary}) except that Bison processes multiple
+definitions for the same @var{name} as follows:
+
+@itemize
+@item
+Bison quietly ignores all command-line definitions for @var{name} except
+the last.
+@item
+If that command-line definition is specified by a @code{-D} or
+@code{--define}, Bison reports an error for any @code{%define}
+definition for @var{name}.
+@item
+If that command-line definition is specified by a @code{-F} or
+@code{--force-define} instead, Bison quietly ignores all @code{%define}
+definitions for @var{name}.
+@item
+Otherwise, Bison reports an error if there are multiple @code{%define}
+definitions for @var{name}.
+@end itemize
+
+You should avoid using @code{-F} and @code{--force-define} in your
+make files unless you are confident that it is safe to quietly ignore
+any conflicting @code{%define} that may be added to the grammar file.
+
+@item -L @var{language}
+@itemx --language=@var{language}
+Specify the programming language for the generated parser, as if
+@code{%language} was specified (@pxref{Decl Summary, , Bison Declaration
+Summary}).  Currently supported languages include C, C++, and Java.
+@var{language} is case-insensitive.
+
+@item --locations
+Pretend that @code{%locations} was specified.  @xref{Decl Summary}.
+
+@item -p @var{prefix}
+@itemx --name-prefix=@var{prefix}
+Pretend that @code{%name-prefix "@var{prefix}"} was specified (@pxref{Decl
+Summary}).  Obsoleted by @code{-Dapi.prefix=@var{prefix}}.  @xref{Multiple
+Parsers, ,Multiple Parsers in the Same Program}.
+
+@item -l
+@itemx --no-lines
+Don't put any @code{#line} preprocessor commands in the parser
+implementation file.  Ordinarily Bison puts them in the parser
+implementation file so that the C compiler and debuggers will
+associate errors with your source file, the grammar file.  This option
+causes them to associate errors with the parser implementation file,
+treating it as an independent source file in its own right.
+
+@item -S @var{file}
+@itemx --skeleton=@var{file}
+Specify the skeleton to use, similar to @code{%skeleton}
+(@pxref{Decl Summary, , Bison Declaration Summary}).
+
+@c You probably don't need this option unless you are developing Bison.
+@c You should use @option{--language} if you want to specify the skeleton for a
+@c different language, because it is clearer and because it will always
+@c choose the correct skeleton for non-deterministic or push parsers.
+
+If @var{file} does not contain a @code{/}, @var{file} is the name of a skeleton
+file in the Bison installation directory.
+If it does, @var{file} is an absolute file name or a file name relative to the
+current working directory.
+This is similar to how most shells resolve commands.
+
+@item -k
+@itemx --token-table
+Pretend that @code{%token-table} was specified.  @xref{Decl Summary}.
+@end table
+
+@noindent
+Adjust the output:
+
+@table @option
+@item --defines[=@var{file}]
+Pretend that @code{%defines} was specified, i.e., write an extra output
+file containing macro definitions for the token type names defined in
+the grammar, as well as a few other declarations.  @xref{Decl Summary}.
+
+@item -d
+This is the same as @code{--defines} except @code{-d} does not accept a
+@var{file} argument since POSIX Yacc requires that @code{-d} can be bundled
+with other short options.
+
+@item -b @var{file-prefix}
+@itemx --file-prefix=@var{prefix}
+Pretend that @code{%file-prefix} was specified, i.e., specify prefix to use
+for all Bison output file names.  @xref{Decl Summary}.
+
+@item -r @var{things}
+@itemx --report=@var{things}
+Write an extra output file containing verbose description of the comma
+separated list of @var{things} among:
+
+@table @code
+@item state
+Description of the grammar, conflicts (resolved and unresolved), and
+parser's automaton.
+
+@item itemset
+Implies @code{state} and augments the description of the automaton with
+the full set of items for each state, instead of its core only.
+
+@item lookahead
+Implies @code{state} and augments the description of the automaton with
+each rule's lookahead set.
+
+@item solved
+Implies @code{state}.  Explain how conflicts were solved thanks to
+precedence and associativity directives.
+
+@item all
+Enable all the items.
+
+@item none
+Do not generate the report.
+@end table
+
+@item --report-file=@var{file}
+Specify the @var{file} for the verbose description.
+
+@item -v
+@itemx --verbose
+Pretend that @code{%verbose} was specified, i.e., write an extra output
+file containing verbose descriptions of the grammar and
+parser.  @xref{Decl Summary}.
+
+@item -o @var{file}
+@itemx --output=@var{file}
+Specify the @var{file} for the parser implementation file.
+
+The other output files' names are constructed from @var{file} as
+described under the @samp{-v} and @samp{-d} options.
+
+@item -g [@var{file}]
+@itemx --graph[=@var{file}]
+Output a graphical representation of the parser's
+automaton computed by Bison, in @uref{http://www.graphviz.org/, Graphviz}
+@uref{http://www.graphviz.org/doc/info/lang.html, DOT} format.
+@code{@var{file}} is optional.
+If omitted and the grammar file is @file{foo.y}, the output file will be
+@file{foo.dot}.
+
+@item -x [@var{file}]
+@itemx --xml[=@var{file}]
+Output an XML report of the parser's automaton computed by Bison.
+@code{@var{file}} is optional.
+If omitted and the grammar file is @file{foo.y}, the output file will be
+@file{foo.xml}.
+(The current XML schema is experimental and may evolve.
+More user feedback will help to stabilize it.)
+@end table
+
+@node Option Cross Key
+@section Option Cross Key
+
+Here is a list of options, alphabetized by long option, to help you find
+the corresponding short option and directive.
+
+@multitable {@option{--force-define=@var{name}[=@var{value}]}} {@option{-F @var{name}[=@var{value}]}} {@code{%nondeterministic-parser}}
+@headitem Long Option @tab Short Option @tab Bison Directive
+@include cross-options.texi
+@end multitable
+
+@node Yacc Library
+@section Yacc Library
+
+The Yacc library contains default implementations of the
+@code{yyerror} and @code{main} functions.  These default
+implementations are normally not useful, but POSIX requires
+them.  To use the Yacc library, link your program with the
+@option{-ly} option.  Note that Bison's implementation of the Yacc
+library is distributed under the terms of the GNU General
+Public License (@pxref{Copying}).
+
+If you use the Yacc library's @code{yyerror} function, you should
+declare @code{yyerror} as follows:
+
+@example
+int yyerror (char const *);
+@end example
+
+Bison ignores the @code{int} value returned by this @code{yyerror}.
+If you use the Yacc library's @code{main} function, your
+@code{yyparse} function should have the following type signature:
+
+@example
+int yyparse (void);
+@end example
+
+@c ================================================= C++ Bison
+
+@node Other Languages
+@chapter Parsers Written In Other Languages
+
+@menu
+* C++ Parsers::                 The interface to generate C++ parser classes
+* Java Parsers::                The interface to generate Java parser classes
+@end menu
+
+@node C++ Parsers
+@section C++ Parsers
+
+@menu
+* C++ Bison Interface::         Asking for C++ parser generation
+* C++ Semantic Values::         %union vs. C++
+* C++ Location Values::         The position and location classes
+* C++ Parser Interface::        Instantiating and running the parser
+* C++ Scanner Interface::       Exchanges between yylex and parse
+* A Complete C++ Example::      Demonstrating their use
+@end menu
+
+@node C++ Bison Interface
+@subsection C++ Bison Interface
+@c - %skeleton "lalr1.cc"
+@c - Always pure
+@c - initial action
+
+The C++ deterministic parser is selected using the skeleton directive,
+@samp{%skeleton "lalr1.cc"}, or the synonymous command-line option
+@option{--skeleton=lalr1.cc}.
+@xref{Decl Summary}.
+
+When run, @command{bison} will create several entities in the @samp{yy}
+namespace.
+@findex %define namespace
+Use the @samp{%define namespace} directive to change the namespace
+name, see @ref{%define Summary,,namespace}.  The various classes are
+generated in the following files:
+
+@table @file
+@item position.hh
+@itemx location.hh
+The definition of the classes @code{position} and @code{location}, used for
+location tracking.  These files are not generated if the @code{%define}
+variable @code{api.location.type} is defined.  @xref{C++ Location Values}.
+
+@item stack.hh
+An auxiliary class @code{stack} used by the parser.
+
+@item @var{file}.hh
+@itemx @var{file}.cc
+(Assuming the extension of the grammar file was @samp{.yy}.)  The
+declaration and implementation of the C++ parser class.  The basename
+and extension of these two files follow the same rules as with regular C
+parsers (@pxref{Invocation}).
+
+The header is @emph{mandatory}; you must either pass
+@option{-d}/@option{--defines} to @command{bison}, or use the
+@samp{%defines} directive.
+@end table
+
+All these files are documented using Doxygen; run @command{doxygen}
+for a complete and accurate documentation.
+
+@node C++ Semantic Values
+@subsection C++ Semantic Values
+@c - No objects in unions
+@c - YYSTYPE
+@c - Printer and destructor
+
+The @code{%union} directive works as for C, see @ref{Union Decl, ,The
+Collection of Value Types}.  In particular it produces a genuine
+@code{union}@footnote{In the future techniques to allow complex types
+within pseudo-unions (similar to Boost variants) might be implemented to
+alleviate these issues.}, which have a few specific features in C++.
+@itemize @minus
+@item
+The type @code{YYSTYPE} is defined but its use is discouraged: rather
+you should refer to the parser's encapsulated type
+@code{yy::parser::semantic_type}.
+@item
+Non POD (Plain Old Data) types cannot be used.  C++ forbids any
+instance of classes with constructors in unions: only @emph{pointers}
+to such objects are allowed.
+@end itemize
+
+Because objects have to be stored via pointers, memory is not
+reclaimed automatically: using the @code{%destructor} directive is the
+only means to avoid leaks.  @xref{Destructor Decl, , Freeing Discarded
+Symbols}.
+
+
+@node C++ Location Values
+@subsection C++ Location Values
+@c - %locations
+@c - class Position
+@c - class Location
+@c - %define filename_type "const symbol::Symbol"
+
+When the directive @code{%locations} is used, the C++ parser supports
+location tracking, see @ref{Tracking Locations}.
+
+By default, two auxiliary classes define a @code{position}, a single point
+in a file, and a @code{location}, a range composed of a pair of
+@code{position}s (possibly spanning several files).  But if the
+@code{%define} variable @code{api.location.type} is defined, then these
+classes will not be generated, and the user defined type will be used.
+
+@tindex uint
+In this section @code{uint} is an abbreviation for @code{unsigned int}: in
+genuine code only the latter is used.
+
+@menu
+* C++ position::                One point in the source file
+* C++ location::                Two points in the source file
+* User Defined Location Type::  Required interface for locations
+@end menu
+
+@node C++ position
+@subsubsection C++ @code{position}
+
+@deftypeop {Constructor} {position} {} position (std::string* @var{file} = 0, uint @var{line} = 1, uint @var{col} = 1)
+Create a @code{position} denoting a given point.  Note that @code{file} is
+not reclaimed when the @code{position} is destroyed: memory managed must be
+handled elsewhere.
+@end deftypeop
+
+@deftypemethod {position} {void} initialize (std::string* @var{file} = 0, uint @var{line} = 1, uint @var{col} = 1)
+Reset the position to the given values.
+@end deftypemethod
+
+@deftypeivar {position} {std::string*} file
+The name of the file.  It will always be handled as a pointer, the
+parser will never duplicate nor deallocate it.  As an experimental
+feature you may change it to @samp{@var{type}*} using @samp{%define
+filename_type "@var{type}"}.
+@end deftypeivar
+
+@deftypeivar {position} {uint} line
+The line, starting at 1.
+@end deftypeivar
+
+@deftypemethod {position} {uint} lines (int @var{height} = 1)
+Advance by @var{height} lines, resetting the column number.
+@end deftypemethod
+
+@deftypeivar {position} {uint} column
+The column, starting at 1.
+@end deftypeivar
+
+@deftypemethod {position} {uint} columns (int @var{width} = 1)
+Advance by @var{width} columns, without changing the line number.
+@end deftypemethod
+
+@deftypemethod {position} {position&} operator+= (int @var{width})
+@deftypemethodx {position} {position} operator+ (int @var{width})
+@deftypemethodx {position} {position&} operator-= (int @var{width})
+@deftypemethodx {position} {position} operator- (int @var{width})
+Various forms of syntactic sugar for @code{columns}.
+@end deftypemethod
+
+@deftypemethod {position} {bool} operator== (const position& @var{that})
+@deftypemethodx {position} {bool} operator!= (const position& @var{that})
+Whether @code{*this} and @code{that} denote equal/different positions.
+@end deftypemethod
+
+@deftypefun {std::ostream&} operator<< (std::ostream& @var{o}, const position& @var{p})
+Report @var{p} on @var{o} like this:
+@samp{@var{file}:@var{line}.@var{column}}, or
+@samp{@var{line}.@var{column}} if @var{file} is null.
+@end deftypefun
+
+@node C++ location
+@subsubsection C++ @code{location}
+
+@deftypeop {Constructor} {location} {} location (const position& @var{begin}, const position& @var{end})
+Create a @code{Location} from the endpoints of the range.
+@end deftypeop
+
+@deftypeop {Constructor} {location} {} location (const position& @var{pos} = position())
+@deftypeopx {Constructor} {location} {} location (std::string* @var{file}, uint @var{line}, uint @var{col})
+Create a @code{Location} denoting an empty range located at a given point.
+@end deftypeop
+
+@deftypemethod {location} {void} initialize (std::string* @var{file} = 0, uint @var{line} = 1, uint @var{col} = 1)
+Reset the location to an empty range at the given values.
+@end deftypemethod
+
+@deftypeivar {location} {position} begin
+@deftypeivarx {location} {position} end
+The first, inclusive, position of the range, and the first beyond.
+@end deftypeivar
+
+@deftypemethod {location} {uint} columns (int @var{width} = 1)
+@deftypemethodx {location} {uint} lines (int @var{height} = 1)
+Advance the @code{end} position.
+@end deftypemethod
+
+@deftypemethod {location} {location} operator+ (const location& @var{end})
+@deftypemethodx {location} {location} operator+ (int @var{width})
+@deftypemethodx {location} {location} operator+= (int @var{width})
+Various forms of syntactic sugar.
+@end deftypemethod
+
+@deftypemethod {location} {void} step ()
+Move @code{begin} onto @code{end}.
+@end deftypemethod
+
+@deftypemethod {location} {bool} operator== (const location& @var{that})
+@deftypemethodx {location} {bool} operator!= (const location& @var{that})
+Whether @code{*this} and @code{that} denote equal/different ranges of
+positions.
+@end deftypemethod
+
+@deftypefun {std::ostream&} operator<< (std::ostream& @var{o}, const location& @var{p})
+Report @var{p} on @var{o}, taking care of special cases such as: no
+@code{filename} defined, or equal filename/line or column.
+@end deftypefun
+
+@node User Defined Location Type
+@subsubsection User Defined Location Type
+@findex %define api.location.type
+
+Instead of using the built-in types you may use the @code{%define} variable
+@code{api.location.type} to specify your own type:
+
+@example
+%define api.location.type @var{LocationType}
+@end example
+
+The requirements over your @var{LocationType} are:
+@itemize
+@item
+it must be copyable;
+
+@item
+in order to compute the (default) value of @code{@@$} in a reduction, the
+parser basically runs
+@example
+@@$.begin = @@$1.begin;
+@@$.end   = @@$@var{N}.end; // The location of last right-hand side symbol.
+@end example
+@noindent
+so there must be copyable @code{begin} and @code{end} members;
+
+@item
+alternatively you may redefine the computation of the default location, in
+which case these members are not required (@pxref{Location Default Action});
+
+@item
+if traces are enabled, then there must exist an @samp{std::ostream&
+  operator<< (std::ostream& o, const @var{LocationType}& s)} function.
+@end itemize
+
+@sp 1
+
+In programs with several C++ parsers, you may also use the @code{%define}
+variable @code{api.location.type} to share a common set of built-in
+definitions for @code{position} and @code{location}.  For instance, one
+parser @file{master/parser.yy} might use:
+
+@example
+%defines
+%locations
+%define namespace "master::"
+@end example
+
+@noindent
+to generate the @file{master/position.hh} and @file{master/location.hh}
+files, reused by other parsers as follows:
+
+@example
+%define api.location.type "master::location"
+%code requires @{ #include <master/location.hh> @}
+@end example
+
+@node C++ Parser Interface
+@subsection C++ Parser Interface
+@c - define parser_class_name
+@c - Ctor
+@c - parse, error, set_debug_level, debug_level, set_debug_stream,
+@c   debug_stream.
+@c - Reporting errors
+
+The output files @file{@var{output}.hh} and @file{@var{output}.cc}
+declare and define the parser class in the namespace @code{yy}.  The
+class name defaults to @code{parser}, but may be changed using
+@samp{%define parser_class_name "@var{name}"}.  The interface of
+this class is detailed below.  It can be extended using the
+@code{%parse-param} feature: its semantics is slightly changed since
+it describes an additional member of the parser class, and an
+additional argument for its constructor.
+
+@defcv {Type} {parser} {semantic_type}
+@defcvx {Type} {parser} {location_type}
+The types for semantics value and locations.
+@end defcv
+
+@defcv {Type} {parser} {token}
+A structure that contains (only) the @code{yytokentype} enumeration, which
+defines the tokens.  To refer to the token @code{FOO},
+use @code{yy::parser::token::FOO}.  The scanner can use
+@samp{typedef yy::parser::token token;} to ``import'' the token enumeration
+(@pxref{Calc++ Scanner}).
+@end defcv
+
+@deftypemethod {parser} {} parser (@var{type1} @var{arg1}, ...)
+Build a new parser object.  There are no arguments by default, unless
+@samp{%parse-param @{@var{type1} @var{arg1}@}} was used.
+@end deftypemethod
+
+@deftypemethod {parser} {int} parse ()
+Run the syntactic analysis, and return 0 on success, 1 otherwise.
+
+@cindex exceptions
+The whole function is wrapped in a @code{try}/@code{catch} block, so that
+when an exception is thrown, the @code{%destructor}s are called to release
+the lookahead symbol, and the symbols pushed on the stack.
+@end deftypemethod
+
+@deftypemethod {parser} {std::ostream&} debug_stream ()
+@deftypemethodx {parser} {void} set_debug_stream (std::ostream& @var{o})
+Get or set the stream used for tracing the parsing.  It defaults to
+@code{std::cerr}.
+@end deftypemethod
+
+@deftypemethod {parser} {debug_level_type} debug_level ()
+@deftypemethodx {parser} {void} set_debug_level (debug_level @var{l})
+Get or set the tracing level.  Currently its value is either 0, no trace,
+or nonzero, full tracing.
+@end deftypemethod
+
+@deftypemethod {parser} {void} error (const location_type& @var{l}, const std::string& @var{m})
+The definition for this member function must be supplied by the user:
+the parser uses it to report a parser error occurring at @var{l},
+described by @var{m}.
+@end deftypemethod
+
+
+@node C++ Scanner Interface
+@subsection C++ Scanner Interface
+@c - prefix for yylex.
+@c - Pure interface to yylex
+@c - %lex-param
+
+The parser invokes the scanner by calling @code{yylex}.  Contrary to C
+parsers, C++ parsers are always pure: there is no point in using the
+@code{%define api.pure full} directive.  Therefore the interface is as follows.
+
+@deftypemethod {parser} {int} yylex (semantic_type* @var{yylval}, location_type* @var{yylloc}, @var{type1} @var{arg1}, ...)
+Return the next token.  Its type is the return value, its semantic
+value and location being @var{yylval} and @var{yylloc}.  Invocations of
+@samp{%lex-param @{@var{type1} @var{arg1}@}} yield additional arguments.
+@end deftypemethod
+
+
+@node A Complete C++ Example
+@subsection A Complete C++ Example
+
+This section demonstrates the use of a C++ parser with a simple but
+complete example.  This example should be available on your system,
+ready to compile, in the directory @dfn{../bison/examples/calc++}.  It
+focuses on the use of Bison, therefore the design of the various C++
+classes is very naive: no accessors, no encapsulation of members etc.
+We will use a Lex scanner, and more precisely, a Flex scanner, to
+demonstrate the various interaction.  A hand written scanner is
+actually easier to interface with.
+
+@menu
+* Calc++ --- C++ Calculator::   The specifications
+* Calc++ Parsing Driver::       An active parsing context
+* Calc++ Parser::               A parser class
+* Calc++ Scanner::              A pure C++ Flex scanner
+* Calc++ Top Level::            Conducting the band
+@end menu
+
+@node Calc++ --- C++ Calculator
+@subsubsection Calc++ --- C++ Calculator
+
+Of course the grammar is dedicated to arithmetics, a single
+expression, possibly preceded by variable assignments.  An
+environment containing possibly predefined variables such as
+@code{one} and @code{two}, is exchanged with the parser.  An example
+of valid input follows.
+
+@example
+three := 3
+seven := one + two * three
+seven * seven
+@end example
+
+@node Calc++ Parsing Driver
+@subsubsection Calc++ Parsing Driver
+@c - An env
+@c - A place to store error messages
+@c - A place for the result
+
+To support a pure interface with the parser (and the scanner) the
+technique of the ``parsing context'' is convenient: a structure
+containing all the data to exchange.  Since, in addition to simply
+launch the parsing, there are several auxiliary tasks to execute (open
+the file for parsing, instantiate the parser etc.), we recommend
+transforming the simple parsing context structure into a fully blown
+@dfn{parsing driver} class.
+
+The declaration of this driver class, @file{calc++-driver.hh}, is as
+follows.  The first part includes the CPP guard and imports the
+required standard library components, and the declaration of the parser
+class.
+
+@comment file: calc++-driver.hh
+@example
+#ifndef CALCXX_DRIVER_HH
+# define CALCXX_DRIVER_HH
+# include <string>
+# include <map>
+# include "calc++-parser.hh"
+@end example
+
+
+@noindent
+Then comes the declaration of the scanning function.  Flex expects
+the signature of @code{yylex} to be defined in the macro
+@code{YY_DECL}, and the C++ parser expects it to be declared.  We can
+factor both as follows.
+
+@comment file: calc++-driver.hh
+@example
+// Tell Flex the lexer's prototype ...
+# define YY_DECL                                        \
+  yy::calcxx_parser::token_type                         \
+  yylex (yy::calcxx_parser::semantic_type* yylval,      \
+         yy::calcxx_parser::location_type* yylloc,      \
+         calcxx_driver& driver)
+// ... and declare it for the parser's sake.
+YY_DECL;
+@end example
+
+@noindent
+The @code{calcxx_driver} class is then declared with its most obvious
+members.
+
+@comment file: calc++-driver.hh
+@example
+// Conducting the whole scanning and parsing of Calc++.
+class calcxx_driver
+@{
+public:
+  calcxx_driver ();
+  virtual ~calcxx_driver ();
+
+  std::map<std::string, int> variables;
+
+  int result;
+@end example
+
+@noindent
+To encapsulate the coordination with the Flex scanner, it is useful to
+have two members function to open and close the scanning phase.
+
+@comment file: calc++-driver.hh
+@example
+  // Handling the scanner.
+  void scan_begin ();
+  void scan_end ();
+  bool trace_scanning;
+@end example
+
+@noindent
+Similarly for the parser itself.
+
+@comment file: calc++-driver.hh
+@example
+  // Run the parser.  Return 0 on success.
+  int parse (const std::string& f);
+  std::string file;
+  bool trace_parsing;
+@end example
+
+@noindent
+To demonstrate pure handling of parse errors, instead of simply
+dumping them on the standard error output, we will pass them to the
+compiler driver using the following two member functions.  Finally, we
+close the class declaration and CPP guard.
+
+@comment file: calc++-driver.hh
+@example
+  // Error handling.
+  void error (const yy::location& l, const std::string& m);
+  void error (const std::string& m);
+@};
+#endif // ! CALCXX_DRIVER_HH
+@end example
+
+The implementation of the driver is straightforward.  The @code{parse}
+member function deserves some attention.  The @code{error} functions
+are simple stubs, they should actually register the located error
+messages and set error state.
+
+@comment file: calc++-driver.cc
+@example
+#include "calc++-driver.hh"
+#include "calc++-parser.hh"
+
+calcxx_driver::calcxx_driver ()
+  : trace_scanning (false), trace_parsing (false)
+@{
+  variables["one"] = 1;
+  variables["two"] = 2;
+@}
+
+calcxx_driver::~calcxx_driver ()
+@{
+@}
+
+int
+calcxx_driver::parse (const std::string &f)
+@{
+  file = f;
+  scan_begin ();
+  yy::calcxx_parser parser (*this);
+  parser.set_debug_level (trace_parsing);
+  int res = parser.parse ();
+  scan_end ();
+  return res;
+@}
+
+void
+calcxx_driver::error (const yy::location& l, const std::string& m)
+@{
+  std::cerr << l << ": " << m << std::endl;
+@}
+
+void
+calcxx_driver::error (const std::string& m)
+@{
+  std::cerr << m << std::endl;
+@}
+@end example
+
+@node Calc++ Parser
+@subsubsection Calc++ Parser
+
+The grammar file @file{calc++-parser.yy} starts by asking for the C++
+deterministic parser skeleton, the creation of the parser header file,
+and specifies the name of the parser class.  Because the C++ skeleton
+changed several times, it is safer to require the version you designed
+the grammar for.
+
+@comment file: calc++-parser.yy
+@example
+%skeleton "lalr1.cc" /* -*- C++ -*- */
+%require "@value{VERSION}"
+%defines
+%define parser_class_name "calcxx_parser"
+@end example
+
+@noindent
+@findex %code requires
+Then come the declarations/inclusions needed to define the
+@code{%union}.  Because the parser uses the parsing driver and
+reciprocally, both cannot include the header of the other.  Because the
+driver's header needs detailed knowledge about the parser class (in
+particular its inner types), it is the parser's header which will simply
+use a forward declaration of the driver.
+@xref{%code Summary}.
+
+@comment file: calc++-parser.yy
+@example
+%code requires @{
+# include <string>
+class calcxx_driver;
+@}
+@end example
+
+@noindent
+The driver is passed by reference to the parser and to the scanner.
+This provides a simple but effective pure interface, not relying on
+global variables.
+
+@comment file: calc++-parser.yy
+@example
+// The parsing context.
+%parse-param @{ calcxx_driver& driver @}
+%lex-param   @{ calcxx_driver& driver @}
+@end example
+
+@noindent
+Then we request the location tracking feature, and initialize the
+first location's file name.  Afterward new locations are computed
+relatively to the previous locations: the file name will be
+automatically propagated.
+
+@comment file: calc++-parser.yy
+@example
+%locations
+%initial-action
+@{
+  // Initialize the initial location.
+  @@$.begin.filename = @@$.end.filename = &driver.file;
+@};
+@end example
+
+@noindent
+Use the two following directives to enable parser tracing and verbose error
+messages.  However, verbose error messages can contain incorrect information
+(@pxref{LAC}).
+
+@comment file: calc++-parser.yy
+@example
+%debug
+%error-verbose
+@end example
+
+@noindent
+Semantic values cannot use ``real'' objects, but only pointers to
+them.
+
+@comment file: calc++-parser.yy
+@example
+// Symbols.
+%union
+@{
+  int          ival;
+  std::string *sval;
+@};
+@end example
+
+@noindent
+@findex %code
+The code between @samp{%code @{} and @samp{@}} is output in the
+@file{*.cc} file; it needs detailed knowledge about the driver.
+
+@comment file: calc++-parser.yy
+@example
+%code @{
+# include "calc++-driver.hh"
+@}
+@end example
+
+
+@noindent
+The token numbered as 0 corresponds to end of file; the following line
+allows for nicer error messages referring to ``end of file'' instead
+of ``$end''.  Similarly user friendly named are provided for each
+symbol.  Note that the tokens names are prefixed by @code{TOKEN_} to
+avoid name clashes.
+
+@comment file: calc++-parser.yy
+@example
+%token        END      0 "end of file"
+%token        ASSIGN     ":="
+%token <sval> IDENTIFIER "identifier"
+%token <ival> NUMBER     "number"
+%type  <ival> exp
+@end example
+
+@noindent
+To enable memory deallocation during error recovery, use
+@code{%destructor}.
+
+@c FIXME: Document %printer, and mention that it takes a braced-code operand.
+@comment file: calc++-parser.yy
+@example
+%printer    @{ yyoutput << *$$; @} "identifier"
+%destructor @{ delete $$; @} "identifier"
+
+%printer    @{ yyoutput << $$; @} <ival>
+@end example
+
+@noindent
+The grammar itself is straightforward.
+
+@comment file: calc++-parser.yy
+@example
+%%
+%start unit;
+unit: assignments exp  @{ driver.result = $2; @};
+
+assignments:
+  /* Nothing.  */        @{@}
+| assignments assignment @{@};
+
+assignment:
+     "identifier" ":=" exp
+       @{ driver.variables[*$1] = $3; delete $1; @};
+
+%left '+' '-';
+%left '*' '/';
+exp: exp '+' exp   @{ $$ = $1 + $3; @}
+   | exp '-' exp   @{ $$ = $1 - $3; @}
+   | exp '*' exp   @{ $$ = $1 * $3; @}
+   | exp '/' exp   @{ $$ = $1 / $3; @}
+   | "identifier"  @{ $$ = driver.variables[*$1]; delete $1; @}
+   | "number"      @{ $$ = $1; @};
+%%
+@end example
+
+@noindent
+Finally the @code{error} member function registers the errors to the
+driver.
+
+@comment file: calc++-parser.yy
+@example
+void
+yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l,
+                          const std::string& m)
+@{
+  driver.error (l, m);
+@}
+@end example
+
+@node Calc++ Scanner
+@subsubsection Calc++ Scanner
+
+The Flex scanner first includes the driver declaration, then the
+parser's to get the set of defined tokens.
+
+@comment file: calc++-scanner.ll
+@example
+%@{ /* -*- C++ -*- */
+# include <cstdlib>
+# include <cerrno>
+# include <climits>
+# include <string>
+# include "calc++-driver.hh"
+# include "calc++-parser.hh"
+
+/* Work around an incompatibility in flex (at least versions
+   2.5.31 through 2.5.33): it generates code that does
+   not conform to C89.  See Debian bug 333231
+   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
+# undef yywrap
+# define yywrap() 1
+
+/* By default yylex returns int, we use token_type.
+   Unfortunately yyterminate by default returns 0, which is
+   not of token_type.  */
+#define yyterminate() return token::END
+%@}
+@end example
+
+@noindent
+Because there is no @code{#include}-like feature we don't need
+@code{yywrap}, we don't need @code{unput} either, and we parse an
+actual file, this is not an interactive session with the user.
+Finally we enable the scanner tracing features.
+
+@comment file: calc++-scanner.ll
+@example
+%option noyywrap nounput batch debug
+@end example
+
+@noindent
+Abbreviations allow for more readable rules.
+
+@comment file: calc++-scanner.ll
+@example
+id    [a-zA-Z][a-zA-Z_0-9]*
+int   [0-9]+
+blank [ \t]
+@end example
+
+@noindent
+The following paragraph suffices to track locations accurately.  Each
+time @code{yylex} is invoked, the begin position is moved onto the end
+position.  Then when a pattern is matched, the end position is
+advanced of its width.  In case it matched ends of lines, the end
+cursor is adjusted, and each time blanks are matched, the begin cursor
+is moved onto the end cursor to effectively ignore the blanks
+preceding tokens.  Comments would be treated equally.
+
+@comment file: calc++-scanner.ll
+@example
+@group
+%@{
+# define YY_USER_ACTION  yylloc->columns (yyleng);
+%@}
+@end group
+%%
+%@{
+  yylloc->step ();
+%@}
+@{blank@}+   yylloc->step ();
+[\n]+      yylloc->lines (yyleng); yylloc->step ();
+@end example
+
+@noindent
+The rules are simple, just note the use of the driver to report errors.
+It is convenient to use a typedef to shorten
+@code{yy::calcxx_parser::token::identifier} into
+@code{token::identifier} for instance.
+
+@comment file: calc++-scanner.ll
+@example
+%@{
+  typedef yy::calcxx_parser::token token;
+%@}
+         /* Convert ints to the actual type of tokens.  */
+[-+*/]   return yy::calcxx_parser::token_type (yytext[0]);
+
+":="     return token::ASSIGN;
+
+@group
+@{int@}    @{
+           errno = 0;
+           long n = strtol (yytext, NULL, 10);
+           if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
+             driver.error (*yylloc, "integer is out of range");
+           yylval->ival = n;
+           return token::NUMBER;
+         @}
+@end group
+
+@group
+@{id@}     @{
+           yylval->sval = new std::string (yytext);
+           return token::IDENTIFIER;
+         @}
+@end group
+
+.        driver.error (*yylloc, "invalid character");
+%%
+@end example
+
+@noindent
+Finally, because the scanner related driver's member function depend
+on the scanner's data, it is simpler to implement them in this file.
+
+@comment file: calc++-scanner.ll
+@example
+@group
+void
+calcxx_driver::scan_begin ()
+@{
+  yy_flex_debug = trace_scanning;
+  if (file.empty () || file == "-")
+    yyin = stdin;
+  else if (!(yyin = fopen (file.c_str (), "r")))
+    @{
+      error ("cannot open " + file + ": " + strerror(errno));
+      exit (EXIT_FAILURE);
+    @}
+@}
+@end group
+
+@group
+void
+calcxx_driver::scan_end ()
+@{
+  fclose (yyin);
+@}
+@end group
+@end example
+
+@node Calc++ Top Level
+@subsubsection Calc++ Top Level
+
+The top level file, @file{calc++.cc}, poses no problem.
+
+@comment file: calc++.cc
+@example
+#include <iostream>
+#include "calc++-driver.hh"
+
+@group
+int
+main (int argc, char *argv[])
+@{
+  calcxx_driver driver;
+  for (int i = 1; i < argc; ++i)
+    if (argv[i] == std::string ("-p"))
+      driver.trace_parsing = true;
+    else if (argv[i] == std::string ("-s"))
+      driver.trace_scanning = true;
+    else if (!driver.parse (argv[i]))
+      std::cout << driver.result << std::endl;
+@}
+@end group
+@end example
+
+@node Java Parsers
+@section Java Parsers
+
+@menu
+* Java Bison Interface::        Asking for Java parser generation
+* Java Semantic Values::        %type and %token vs. Java
+* Java Location Values::        The position and location classes
+* Java Parser Interface::       Instantiating and running the parser
+* Java Scanner Interface::      Specifying the scanner for the parser
+* Java Action Features::        Special features for use in actions
+* Java Differences::            Differences between C/C++ and Java Grammars
+* Java Declarations Summary::   List of Bison declarations used with Java
+@end menu
+
+@node Java Bison Interface
+@subsection Java Bison Interface
+@c - %language "Java"
+
+(The current Java interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+
+The Java parser skeletons are selected using the @code{%language "Java"}
+directive or the @option{-L java}/@option{--language=java} option.
+
+@c FIXME: Documented bug.
+When generating a Java parser, @code{bison @var{basename}.y} will
+create a single Java source file named @file{@var{basename}.java}
+containing the parser implementation.  Using a grammar file without a
+@file{.y} suffix is currently broken.  The basename of the parser
+implementation file can be changed by the @code{%file-prefix}
+directive or the @option{-p}/@option{--name-prefix} option.  The
+entire parser implementation file name can be changed by the
+@code{%output} directive or the @option{-o}/@option{--output} option.
+The parser implementation file contains a single class for the parser.
+
+You can create documentation for generated parsers using Javadoc.
+
+Contrary to C parsers, Java parsers do not use global variables; the
+state of the parser is always local to an instance of the parser class.
+Therefore, all Java parsers are ``pure'', and the @code{%pure-parser}
+and @code{%define api.pure full} directives does not do anything when used in
+Java.
+
+Push parsers are currently unsupported in Java and @code{%define
+api.push-pull} have no effect.
+
+GLR parsers are currently unsupported in Java.  Do not use the
+@code{glr-parser} directive.
+
+No header file can be generated for Java parsers.  Do not use the
+@code{%defines} directive or the @option{-d}/@option{--defines} options.
+
+@c FIXME: Possible code change.
+Currently, support for debugging and verbose errors are always compiled
+in.  Thus the @code{%debug} and @code{%token-table} directives and the
+@option{-t}/@option{--debug} and @option{-k}/@option{--token-table}
+options have no effect.  This may change in the future to eliminate
+unused code in the generated parser, so use @code{%debug} and
+@code{%verbose-error} explicitly if needed.  Also, in the future the
+@code{%token-table} directive might enable a public interface to
+access the token names and codes.
+
+@node Java Semantic Values
+@subsection Java Semantic Values
+@c - No %union, specify type in %type/%token.
+@c - YYSTYPE
+@c - Printer and destructor
+
+There is no @code{%union} directive in Java parsers.  Instead, the
+semantic values' types (class names) should be specified in the
+@code{%type} or @code{%token} directive:
+
+@example
+%type <Expression> expr assignment_expr term factor
+%type <Integer> number
+@end example
+
+By default, the semantic stack is declared to have @code{Object} members,
+which means that the class types you specify can be of any class.
+To improve the type safety of the parser, you can declare the common
+superclass of all the semantic values using the @code{%define stype}
+directive.  For example, after the following declaration:
+
+@example
+%define stype "ASTNode"
+@end example
+
+@noindent
+any @code{%type} or @code{%token} specifying a semantic type which
+is not a subclass of ASTNode, will cause a compile-time error.
+
+@c FIXME: Documented bug.
+Types used in the directives may be qualified with a package name.
+Primitive data types are accepted for Java version 1.5 or later.  Note
+that in this case the autoboxing feature of Java 1.5 will be used.
+Generic types may not be used; this is due to a limitation in the
+implementation of Bison, and may change in future releases.
+
+Java parsers do not support @code{%destructor}, since the language
+adopts garbage collection.  The parser will try to hold references
+to semantic values for as little time as needed.
+
+Java parsers do not support @code{%printer}, as @code{toString()}
+can be used to print the semantic values.  This however may change
+(in a backwards-compatible way) in future versions of Bison.
+
+
+@node Java Location Values
+@subsection Java Location Values
+@c - %locations
+@c - class Position
+@c - class Location
+
+When the directive @code{%locations} is used, the Java parser supports
+location tracking, see @ref{Tracking Locations}.  An auxiliary user-defined
+class defines a @dfn{position}, a single point in a file; Bison itself
+defines a class representing a @dfn{location}, a range composed of a pair of
+positions (possibly spanning several files).  The location class is an inner
+class of the parser; the name is @code{Location} by default, and may also be
+renamed using @code{%define api.location.type "@var{class-name}"}.
+
+The location class treats the position as a completely opaque value.
+By default, the class name is @code{Position}, but this can be changed
+with @code{%define api.position.type "@var{class-name}"}.  This class must
+be supplied by the user.
+
+
+@deftypeivar {Location} {Position} begin
+@deftypeivarx {Location} {Position} end
+The first, inclusive, position of the range, and the first beyond.
+@end deftypeivar
+
+@deftypeop {Constructor} {Location} {} Location (Position @var{loc})
+Create a @code{Location} denoting an empty range located at a given point.
+@end deftypeop
+
+@deftypeop {Constructor} {Location} {} Location (Position @var{begin}, Position @var{end})
+Create a @code{Location} from the endpoints of the range.
+@end deftypeop
+
+@deftypemethod {Location} {String} toString ()
+Prints the range represented by the location.  For this to work
+properly, the position class should override the @code{equals} and
+@code{toString} methods appropriately.
+@end deftypemethod
+
+
+@node Java Parser Interface
+@subsection Java Parser Interface
+@c - define parser_class_name
+@c - Ctor
+@c - parse, error, set_debug_level, debug_level, set_debug_stream,
+@c   debug_stream.
+@c - Reporting errors
+
+The name of the generated parser class defaults to @code{YYParser}.  The
+@code{YY} prefix may be changed using the @code{%name-prefix} directive
+or the @option{-p}/@option{--name-prefix} option.  Alternatively, use
+@code{%define parser_class_name "@var{name}"} to give a custom name to
+the class.  The interface of this class is detailed below.
+
+By default, the parser class has package visibility.  A declaration
+@code{%define public} will change to public visibility.  Remember that,
+according to the Java language specification, the name of the @file{.java}
+file should match the name of the class in this case.  Similarly, you can
+use @code{abstract}, @code{final} and @code{strictfp} with the
+@code{%define} declaration to add other modifiers to the parser class.
+
+The Java package name of the parser class can be specified using the
+@code{%define package} directive.  The superclass and the implemented
+interfaces of the parser class can be specified with the @code{%define
+extends} and @code{%define implements} directives.
+
+The parser class defines an inner class, @code{Location}, that is used
+for location tracking (see @ref{Java Location Values}), and a inner
+interface, @code{Lexer} (see @ref{Java Scanner Interface}).  Other than
+these inner class/interface, and the members described in the interface
+below, all the other members and fields are preceded with a @code{yy} or
+@code{YY} prefix to avoid clashes with user code.
+
+@c FIXME: The following constants and variables are still undocumented:
+@c @code{bisonVersion}, @code{bisonSkeleton} and @code{errorVerbose}.
+
+The parser class can be extended using the @code{%parse-param}
+directive. Each occurrence of the directive will add a @code{protected
+final} field to the parser class, and an argument to its constructor,
+which initialize them automatically.
+
+Token names defined by @code{%token} and the predefined @code{EOF} token
+name are added as constant fields to the parser class.
+
+@deftypeop {Constructor} {YYParser} {} YYParser (@var{lex_param}, @dots{}, @var{parse_param}, @dots{})
+Build a new parser object with embedded @code{%code lexer}.  There are
+no parameters, unless @code{%parse-param}s and/or @code{%lex-param}s are
+used.
+@end deftypeop
+
+@deftypeop {Constructor} {YYParser} {} YYParser (Lexer @var{lexer}, @var{parse_param}, @dots{})
+Build a new parser object using the specified scanner.  There are no
+additional parameters unless @code{%parse-param}s are used.
+
+If the scanner is defined by @code{%code lexer}, this constructor is
+declared @code{protected} and is called automatically with a scanner
+created with the correct @code{%lex-param}s.
+@end deftypeop
+
+@deftypemethod {YYParser} {boolean} parse ()
+Run the syntactic analysis, and return @code{true} on success,
+@code{false} otherwise.
+@end deftypemethod
+
+@deftypemethod {YYParser} {boolean} recovering ()
+During the syntactic analysis, return @code{true} if recovering
+from a syntax error.
+@xref{Error Recovery}.
+@end deftypemethod
+
+@deftypemethod {YYParser} {java.io.PrintStream} getDebugStream ()
+@deftypemethodx {YYParser} {void} setDebugStream (java.io.printStream @var{o})
+Get or set the stream used for tracing the parsing.  It defaults to
+@code{System.err}.
+@end deftypemethod
+
+@deftypemethod {YYParser} {int} getDebugLevel ()
+@deftypemethodx {YYParser} {void} setDebugLevel (int @var{l})
+Get or set the tracing level.  Currently its value is either 0, no trace,
+or nonzero, full tracing.
+@end deftypemethod
+
+
+@node Java Scanner Interface
+@subsection Java Scanner Interface
+@c - %code lexer
+@c - %lex-param
+@c - Lexer interface
+
+There are two possible ways to interface a Bison-generated Java parser
+with a scanner: the scanner may be defined by @code{%code lexer}, or
+defined elsewhere.  In either case, the scanner has to implement the
+@code{Lexer} inner interface of the parser class.
+
+In the first case, the body of the scanner class is placed in
+@code{%code lexer} blocks.  If you want to pass parameters from the
+parser constructor to the scanner constructor, specify them with
+@code{%lex-param}; they are passed before @code{%parse-param}s to the
+constructor.
+
+In the second case, the scanner has to implement the @code{Lexer} interface,
+which is defined within the parser class (e.g., @code{YYParser.Lexer}).
+The constructor of the parser object will then accept an object
+implementing the interface; @code{%lex-param} is not used in this
+case.
+
+In both cases, the scanner has to implement the following methods.
+
+@deftypemethod {Lexer} {void} yyerror (Location @var{loc}, String @var{msg})
+This method is defined by the user to emit an error message.  The first
+parameter is omitted if location tracking is not active.  Its type can be
+changed using @code{%define api.location.type "@var{class-name}".}
+@end deftypemethod
+
+@deftypemethod {Lexer} {int} yylex ()
+Return the next token.  Its type is the return value, its semantic
+value and location are saved and returned by the their methods in the
+interface.
+
+Use @code{%define lex_throws} to specify any uncaught exceptions.
+Default is @code{java.io.IOException}.
+@end deftypemethod
+
+@deftypemethod {Lexer} {Position} getStartPos ()
+@deftypemethodx {Lexer} {Position} getEndPos ()
+Return respectively the first position of the last token that
+@code{yylex} returned, and the first position beyond it.  These
+methods are not needed unless location tracking is active.
+
+The return type can be changed using @code{%define api.position.type
+"@var{class-name}".}
+@end deftypemethod
+
+@deftypemethod {Lexer} {Object} getLVal ()
+Return the semantic value of the last token that yylex returned.
+
+The return type can be changed using @code{%define stype
+"@var{class-name}".}
+@end deftypemethod
+
+
+@node Java Action Features
+@subsection Special Features for Use in Java Actions
+
+The following special constructs can be uses in Java actions.
+Other analogous C action features are currently unavailable for Java.
+
+Use @code{%define throws} to specify any uncaught exceptions from parser
+actions, and initial actions specified by @code{%initial-action}.
+
+@defvar $@var{n}
+The semantic value for the @var{n}th component of the current rule.
+This may not be assigned to.
+@xref{Java Semantic Values}.
+@end defvar
+
+@defvar $<@var{typealt}>@var{n}
+Like @code{$@var{n}} but specifies a alternative type @var{typealt}.
+@xref{Java Semantic Values}.
+@end defvar
+
+@defvar $$
+The semantic value for the grouping made by the current rule.  As a
+value, this is in the base type (@code{Object} or as specified by
+@code{%define stype}) as in not cast to the declared subtype because
+casts are not allowed on the left-hand side of Java assignments.
+Use an explicit Java cast if the correct subtype is needed.
+@xref{Java Semantic Values}.
+@end defvar
+
+@defvar $<@var{typealt}>$
+Same as @code{$$} since Java always allow assigning to the base type.
+Perhaps we should use this and @code{$<>$} for the value and @code{$$}
+for setting the value but there is currently no easy way to distinguish
+these constructs.
+@xref{Java Semantic Values}.
+@end defvar
+
+@defvar @@@var{n}
+The location information of the @var{n}th component of the current rule.
+This may not be assigned to.
+@xref{Java Location Values}.
+@end defvar
+
+@defvar @@$
+The location information of the grouping made by the current rule.
+@xref{Java Location Values}.
+@end defvar
+
+@deftypefn {Statement} return YYABORT @code{;}
+Return immediately from the parser, indicating failure.
+@xref{Java Parser Interface}.
+@end deftypefn
+
+@deftypefn {Statement} return YYACCEPT @code{;}
+Return immediately from the parser, indicating success.
+@xref{Java Parser Interface}.
+@end deftypefn
+
+@deftypefn {Statement} {return} YYERROR @code{;}
+Start error recovery (without printing an error message).
+@xref{Error Recovery}.
+@end deftypefn
+
+@deftypefn {Function} {boolean} recovering ()
+Return whether error recovery is being done. In this state, the parser
+reads token until it reaches a known state, and then restarts normal
+operation.
+@xref{Error Recovery}.
+@end deftypefn
+
+@deftypefn  {Function} {protected void} yyerror (String msg)
+@deftypefnx {Function} {protected void} yyerror (Position pos, String msg)
+@deftypefnx {Function} {protected void} yyerror (Location loc, String msg)
+Print an error message using the @code{yyerror} method of the scanner
+instance in use.
+@end deftypefn
+
+
+@node Java Differences
+@subsection Differences between C/C++ and Java Grammars
+
+The different structure of the Java language forces several differences
+between C/C++ grammars, and grammars designed for Java parsers.  This
+section summarizes these differences.
+
+@itemize
+@item
+Java lacks a preprocessor, so the @code{YYERROR}, @code{YYACCEPT},
+@code{YYABORT} symbols (@pxref{Table of Symbols}) cannot obviously be
+macros.  Instead, they should be preceded by @code{return} when they
+appear in an action.  The actual definition of these symbols is
+opaque to the Bison grammar, and it might change in the future.  The
+only meaningful operation that you can do, is to return them.
+@xref{Java Action Features}.
+
+Note that of these three symbols, only @code{YYACCEPT} and
+@code{YYABORT} will cause a return from the @code{yyparse}
+method@footnote{Java parsers include the actions in a separate
+method than @code{yyparse} in order to have an intuitive syntax that
+corresponds to these C macros.}.
+
+@item
+Java lacks unions, so @code{%union} has no effect.  Instead, semantic
+values have a common base type: @code{Object} or as specified by
+@samp{%define stype}.  Angle brackets on @code{%token}, @code{type},
+@code{$@var{n}} and @code{$$} specify subtypes rather than fields of
+an union.  The type of @code{$$}, even with angle brackets, is the base
+type since Java casts are not allow on the left-hand side of assignments.
+Also, @code{$@var{n}} and @code{@@@var{n}} are not allowed on the
+left-hand side of assignments. @xref{Java Semantic Values}, and
+@ref{Java Action Features}.
+
+@item
+The prologue declarations have a different meaning than in C/C++ code.
+@table @asis
+@item @code{%code imports}
+blocks are placed at the beginning of the Java source code.  They may
+include copyright notices.  For a @code{package} declarations, it is
+suggested to use @code{%define package} instead.
+
+@item unqualified @code{%code}
+blocks are placed inside the parser class.
+
+@item @code{%code lexer}
+blocks, if specified, should include the implementation of the
+scanner.  If there is no such block, the scanner can be any class
+that implements the appropriate interface (@pxref{Java Scanner
+Interface}).
+@end table
+
+Other @code{%code} blocks are not supported in Java parsers.
+In particular, @code{%@{ @dots{} %@}} blocks should not be used
+and may give an error in future versions of Bison.
+
+The epilogue has the same meaning as in C/C++ code and it can
+be used to define other classes used by the parser @emph{outside}
+the parser class.
+@end itemize
+
+
+@node Java Declarations Summary
+@subsection Java Declarations Summary
+
+This summary only include declarations specific to Java or have special
+meaning when used in a Java parser.
+
+@deffn {Directive} {%language "Java"}
+Generate a Java class for the parser.
+@end deffn
+
+@deffn {Directive} %lex-param @{@var{type} @var{name}@}
+A parameter for the lexer class defined by @code{%code lexer}
+@emph{only}, added as parameters to the lexer constructor and the parser
+constructor that @emph{creates} a lexer.  Default is none.
+@xref{Java Scanner Interface}.
+@end deffn
+
+@deffn {Directive} %name-prefix "@var{prefix}"
+The prefix of the parser class name @code{@var{prefix}Parser} if
+@code{%define parser_class_name} is not used.  Default is @code{YY}.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} %parse-param @{@var{type} @var{name}@}
+A parameter for the parser class added as parameters to constructor(s)
+and as fields initialized by the constructor(s).  Default is none.
+@xref{Java Parser Interface}.
+@end deffn
+
+@deffn {Directive} %token <@var{type}> @var{token} @dots{}
+Declare tokens.  Note that the angle brackets enclose a Java @emph{type}.
+@xref{Java Semantic Values}.
+@end deffn
+
+@deffn {Directive} %type <@var{type}> @var{nonterminal} @dots{}
+Declare the type of nonterminals.  Note that the angle brackets enclose
+a Java @emph{type}.
+@xref{Java Semantic Values}.
+@end deffn
+
+@deffn {Directive} %code @{ @var{code} @dots{} @}
+Code appended to the inside of the parser class.
+@xref{Java Differences}.
+@end deffn
+
+@deffn {Directive} {%code imports} @{ @var{code} @dots{} @}
+Code inserted just after the @code{package} declaration.
+@xref{Java Differences}.
+@end deffn
+
+@deffn {Directive} {%code lexer} @{ @var{code} @dots{} @}
+Code added to the body of a inner lexer class within the parser class.
+@xref{Java Scanner Interface}.
+@end deffn
+
+@deffn {Directive} %% @var{code} @dots{}
+Code (after the second @code{%%}) appended to the end of the file,
+@emph{outside} the parser class.
+@xref{Java Differences}.
+@end deffn
+
+@deffn {Directive} %@{ @var{code} @dots{} %@}
+Not supported.  Use @code{%code import} instead.
+@xref{Java Differences}.
+@end deffn
+
+@deffn {Directive} {%define abstract}
+Whether the parser class is declared @code{abstract}.  Default is false.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define extends} "@var{superclass}"
+The superclass of the parser class.  Default is none.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define final}
+Whether the parser class is declared @code{final}.  Default is false.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define implements} "@var{interfaces}"
+The implemented interfaces of the parser class, a comma-separated list.
+Default is none.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define lex_throws} "@var{exceptions}"
+The exceptions thrown by the @code{yylex} method of the lexer, a
+comma-separated list.  Default is @code{java.io.IOException}.
+@xref{Java Scanner Interface}.
+@end deffn
+
+@deffn {Directive} {%define api.location.type} "@var{class}"
+The name of the class used for locations (a range between two
+positions).  This class is generated as an inner class of the parser
+class by @command{bison}.  Default is @code{Location}.
+Formerly named @code{location_type}.
+@xref{Java Location Values}.
+@end deffn
+
+@deffn {Directive} {%define package} "@var{package}"
+The package to put the parser class in.  Default is none.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define parser_class_name} "@var{name}"
+The name of the parser class.  Default is @code{YYParser} or
+@code{@var{name-prefix}Parser}.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define api.position.type} "@var{class}"
+The name of the class used for positions. This class must be supplied by
+the user.  Default is @code{Position}.
+Formerly named @code{position_type}.
+@xref{Java Location Values}.
+@end deffn
+
+@deffn {Directive} {%define public}
+Whether the parser class is declared @code{public}.  Default is false.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define stype} "@var{class}"
+The base type of semantic values.  Default is @code{Object}.
+@xref{Java Semantic Values}.
+@end deffn
+
+@deffn {Directive} {%define strictfp}
+Whether the parser class is declared @code{strictfp}.  Default is false.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define throws} "@var{exceptions}"
+The exceptions thrown by user-supplied parser actions and
+@code{%initial-action}, a comma-separated list.  Default is none.
+@xref{Java Parser Interface}.
+@end deffn
+
+
+@c ================================================= FAQ
+
+@node FAQ
+@chapter Frequently Asked Questions
+@cindex frequently asked questions
+@cindex questions
+
+Several questions about Bison come up occasionally.  Here some of them
+are addressed.
+
+@menu
+* Memory Exhausted::            Breaking the Stack Limits
+* How Can I Reset the Parser::  @code{yyparse} Keeps some State
+* Strings are Destroyed::       @code{yylval} Loses Track of Strings
+* Implementing Gotos/Loops::    Control Flow in the Calculator
+* Multiple start-symbols::      Factoring closely related grammars
+* Secure?  Conform?::           Is Bison POSIX safe?
+* I can't build Bison::         Troubleshooting
+* Where can I find help?::      Troubleshouting
+* Bug Reports::                 Troublereporting
+* More Languages::              Parsers in C++, Java, and so on
+* Beta Testing::                Experimenting development versions
+* Mailing Lists::               Meeting other Bison users
+@end menu
+
+@node Memory Exhausted
+@section Memory Exhausted
+
+@quotation
+My parser returns with error with a @samp{memory exhausted}
+message.  What can I do?
+@end quotation
+
+This question is already addressed elsewhere, see @ref{Recursion, ,Recursive
+Rules}.
+
+@node How Can I Reset the Parser
+@section How Can I Reset the Parser
+
+The following phenomenon has several symptoms, resulting in the
+following typical questions:
+
+@quotation
+I invoke @code{yyparse} several times, and on correct input it works
+properly; but when a parse error is found, all the other calls fail
+too.  How can I reset the error flag of @code{yyparse}?
+@end quotation
+
+@noindent
+or
+
+@quotation
+My parser includes support for an @samp{#include}-like feature, in
+which case I run @code{yyparse} from @code{yyparse}.  This fails
+although I did specify @samp{%define api.pure full}.
+@end quotation
+
+These problems typically come not from Bison itself, but from
+Lex-generated scanners.  Because these scanners use large buffers for
+speed, they might not notice a change of input file.  As a
+demonstration, consider the following source file,
+@file{first-line.l}:
+
+@example
+@group
+%@{
+#include <stdio.h>
+#include <stdlib.h>
+%@}
+@end group
+%%
+.*\n    ECHO; return 1;
+%%
+@group
+int
+yyparse (char const *file)
+@{
+  yyin = fopen (file, "r");
+  if (!yyin)
+    @{
+      perror ("fopen");
+      exit (EXIT_FAILURE);
+    @}
+@end group
+@group
+  /* One token only.  */
+  yylex ();
+  if (fclose (yyin) != 0)
+    @{
+      perror ("fclose");
+      exit (EXIT_FAILURE);
+    @}
+  return 0;
+@}
+@end group
+
+@group
+int
+main (void)
+@{
+  yyparse ("input");
+  yyparse ("input");
+  return 0;
+@}
+@end group
+@end example
+
+@noindent
+If the file @file{input} contains
+
+@example
+input:1: Hello,
+input:2: World!
+@end example
+
+@noindent
+then instead of getting the first line twice, you get:
+
+@example
+$ @kbd{flex -ofirst-line.c first-line.l}
+$ @kbd{gcc  -ofirst-line   first-line.c -ll}
+$ @kbd{./first-line}
+input:1: Hello,
+input:2: World!
+@end example
+
+Therefore, whenever you change @code{yyin}, you must tell the
+Lex-generated scanner to discard its current buffer and switch to the
+new one.  This depends upon your implementation of Lex; see its
+documentation for more.  For Flex, it suffices to call
+@samp{YY_FLUSH_BUFFER} after each change to @code{yyin}.  If your
+Flex-generated scanner needs to read from several input streams to
+handle features like include files, you might consider using Flex
+functions like @samp{yy_switch_to_buffer} that manipulate multiple
+input buffers.
+
+If your Flex-generated scanner uses start conditions (@pxref{Start
+conditions, , Start conditions, flex, The Flex Manual}), you might
+also want to reset the scanner's state, i.e., go back to the initial
+start condition, through a call to @samp{BEGIN (0)}.
+
+@node Strings are Destroyed
+@section Strings are Destroyed
+
+@quotation
+My parser seems to destroy old strings, or maybe it loses track of
+them.  Instead of reporting @samp{"foo", "bar"}, it reports
+@samp{"bar", "bar"}, or even @samp{"foo\nbar", "bar"}.
+@end quotation
+
+This error is probably the single most frequent ``bug report'' sent to
+Bison lists, but is only concerned with a misunderstanding of the role
+of the scanner.  Consider the following Lex code:
+
+@example
+@group
+%@{
+#include <stdio.h>
+char *yylval = NULL;
+%@}
+@end group
+@group
+%%
+.*    yylval = yytext; return 1;
+\n    /* IGNORE */
+%%
+@end group
+@group
+int
+main ()
+@{
+  /* Similar to using $1, $2 in a Bison action.  */
+  char *fst = (yylex (), yylval);
+  char *snd = (yylex (), yylval);
+  printf ("\"%s\", \"%s\"\n", fst, snd);
+  return 0;
+@}
+@end group
+@end example
+
+If you compile and run this code, you get:
+
+@example
+$ @kbd{flex -osplit-lines.c split-lines.l}
+$ @kbd{gcc  -osplit-lines   split-lines.c -ll}
+$ @kbd{printf 'one\ntwo\n' | ./split-lines}
+"one
+two", "two"
+@end example
+
+@noindent
+this is because @code{yytext} is a buffer provided for @emph{reading}
+in the action, but if you want to keep it, you have to duplicate it
+(e.g., using @code{strdup}).  Note that the output may depend on how
+your implementation of Lex handles @code{yytext}.  For instance, when
+given the Lex compatibility option @option{-l} (which triggers the
+option @samp{%array}) Flex generates a different behavior:
+
+@example
+$ @kbd{flex -l -osplit-lines.c split-lines.l}
+$ @kbd{gcc     -osplit-lines   split-lines.c -ll}
+$ @kbd{printf 'one\ntwo\n' | ./split-lines}
+"two", "two"
+@end example
+
+
+@node Implementing Gotos/Loops
+@section Implementing Gotos/Loops
+
+@quotation
+My simple calculator supports variables, assignments, and functions,
+but how can I implement gotos, or loops?
+@end quotation
+
+Although very pedagogical, the examples included in the document blur
+the distinction to make between the parser---whose job is to recover
+the structure of a text and to transmit it to subsequent modules of
+the program---and the processing (such as the execution) of this
+structure.  This works well with so called straight line programs,
+i.e., precisely those that have a straightforward execution model:
+execute simple instructions one after the others.
+
+@cindex abstract syntax tree
+@cindex AST
+If you want a richer model, you will probably need to use the parser
+to construct a tree that does represent the structure it has
+recovered; this tree is usually called the @dfn{abstract syntax tree},
+or @dfn{AST} for short.  Then, walking through this tree,
+traversing it in various ways, will enable treatments such as its
+execution or its translation, which will result in an interpreter or a
+compiler.
+
+This topic is way beyond the scope of this manual, and the reader is
+invited to consult the dedicated literature.
+
+
+@node Multiple start-symbols
+@section Multiple start-symbols
+
+@quotation
+I have several closely related grammars, and I would like to share their
+implementations.  In fact, I could use a single grammar but with
+multiple entry points.
+@end quotation
+
+Bison does not support multiple start-symbols, but there is a very
+simple means to simulate them.  If @code{foo} and @code{bar} are the two
+pseudo start-symbols, then introduce two new tokens, say
+@code{START_FOO} and @code{START_BAR}, and use them as switches from the
+real start-symbol:
+
+@example
+%token START_FOO START_BAR;
+%start start;
+start:
+  START_FOO foo
+| START_BAR bar;
+@end example
+
+These tokens prevents the introduction of new conflicts.  As far as the
+parser goes, that is all that is needed.
+
+Now the difficult part is ensuring that the scanner will send these
+tokens first.  If your scanner is hand-written, that should be
+straightforward.  If your scanner is generated by Lex, them there is
+simple means to do it: recall that anything between @samp{%@{ ... %@}}
+after the first @code{%%} is copied verbatim in the top of the generated
+@code{yylex} function.  Make sure a variable @code{start_token} is
+available in the scanner (e.g., a global variable or using
+@code{%lex-param} etc.), and use the following:
+
+@example
+  /* @r{Prologue.}  */
+%%
+%@{
+  if (start_token)
+    @{
+      int t = start_token;
+      start_token = 0;
+      return t;
+    @}
+%@}
+  /* @r{The rules.}  */
+@end example
+
+
+@node Secure?  Conform?
+@section Secure?  Conform?
+
+@quotation
+Is Bison secure?  Does it conform to POSIX?
+@end quotation
+
+If you're looking for a guarantee or certification, we don't provide it.
+However, Bison is intended to be a reliable program that conforms to the
+POSIX specification for Yacc.  If you run into problems,
+please send us a bug report.
+
+@node I can't build Bison
+@section I can't build Bison
+
+@quotation
+I can't build Bison because @command{make} complains that
+@code{msgfmt} is not found.
+What should I do?
+@end quotation
+
+Like most GNU packages with internationalization support, that feature
+is turned on by default.  If you have problems building in the @file{po}
+subdirectory, it indicates that your system's internationalization
+support is lacking.  You can re-configure Bison with
+@option{--disable-nls} to turn off this support, or you can install GNU
+gettext from @url{ftp://ftp.gnu.org/gnu/gettext/} and re-configure
+Bison.  See the file @file{ABOUT-NLS} for more information.
+
+
+@node Where can I find help?
+@section Where can I find help?
+
+@quotation
+I'm having trouble using Bison.  Where can I find help?
+@end quotation
+
+First, read this fine manual.  Beyond that, you can send mail to
+@email{help-bison@@gnu.org}.  This mailing list is intended to be
+populated with people who are willing to answer questions about using
+and installing Bison.  Please keep in mind that (most of) the people on
+the list have aspects of their lives which are not related to Bison (!),
+so you may not receive an answer to your question right away.  This can
+be frustrating, but please try not to honk them off; remember that any
+help they provide is purely voluntary and out of the kindness of their
+hearts.
+
+@node Bug Reports
+@section Bug Reports
+
+@quotation
+I found a bug.  What should I include in the bug report?
+@end quotation
+
+Before you send a bug report, make sure you are using the latest
+version.  Check @url{ftp://ftp.gnu.org/pub/gnu/bison/} or one of its
+mirrors.  Be sure to include the version number in your bug report.  If
+the bug is present in the latest version but not in a previous version,
+try to determine the most recent version which did not contain the bug.
+
+If the bug is parser-related, you should include the smallest grammar
+you can which demonstrates the bug.  The grammar file should also be
+complete (i.e., I should be able to run it through Bison without having
+to edit or add anything).  The smaller and simpler the grammar, the
+easier it will be to fix the bug.
+
+Include information about your compilation environment, including your
+operating system's name and version and your compiler's name and
+version.  If you have trouble compiling, you should also include a
+transcript of the build session, starting with the invocation of
+`configure'.  Depending on the nature of the bug, you may be asked to
+send additional files as well (such as `config.h' or `config.cache').
+
+Patches are most welcome, but not required.  That is, do not hesitate to
+send a bug report just because you cannot provide a fix.
+
+Send bug reports to @email{bug-bison@@gnu.org}.
+
+@node More Languages
+@section More Languages
+
+@quotation
+Will Bison ever have C++ and Java support?  How about @var{insert your
+favorite language here}?
+@end quotation
+
+C++ and Java support is there now, and is documented.  We'd love to add other
+languages; contributions are welcome.
+
+@node Beta Testing
+@section Beta Testing
+
+@quotation
+What is involved in being a beta tester?
+@end quotation
+
+It's not terribly involved.  Basically, you would download a test
+release, compile it, and use it to build and run a parser or two.  After
+that, you would submit either a bug report or a message saying that
+everything is okay.  It is important to report successes as well as
+failures because test releases eventually become mainstream releases,
+but only if they are adequately tested.  If no one tests, development is
+essentially halted.
+
+Beta testers are particularly needed for operating systems to which the
+developers do not have easy access.  They currently have easy access to
+recent GNU/Linux and Solaris versions.  Reports about other operating
+systems are especially welcome.
+
+@node Mailing Lists
+@section Mailing Lists
+
+@quotation
+How do I join the help-bison and bug-bison mailing lists?
+@end quotation
+
+See @url{http://lists.gnu.org/}.
+
+@c ================================================= Table of Symbols
+
+@node Table of Symbols
+@appendix Bison Symbols
+@cindex Bison symbols, table of
+@cindex symbols in Bison, table of
+
+@deffn {Variable} @@$
+In an action, the location of the left-hand side of the rule.
+@xref{Tracking Locations}.
+@end deffn
+
+@deffn {Variable} @@@var{n}
+@deffnx {Symbol} @@@var{n}
+In an action, the location of the @var{n}-th symbol of the right-hand side
+of the rule.  @xref{Tracking Locations}.
+
+In a grammar, the Bison-generated nonterminal symbol for a mid-rule action
+with a semantical value.  @xref{Mid-Rule Action Translation}.
+@end deffn
+
+@deffn {Variable} @@@var{name}
+@deffnx {Variable} @@[@var{name}]
+In an action, the location of a symbol addressed by @var{name}.
+@xref{Tracking Locations}.
+@end deffn
+
+@deffn {Symbol} $@@@var{n}
+In a grammar, the Bison-generated nonterminal symbol for a mid-rule action
+with no semantical value.  @xref{Mid-Rule Action Translation}.
+@end deffn
+
+@deffn {Variable} $$
+In an action, the semantic value of the left-hand side of the rule.
+@xref{Actions}.
+@end deffn
+
+@deffn {Variable} $@var{n}
+In an action, the semantic value of the @var{n}-th symbol of the
+right-hand side of the rule.  @xref{Actions}.
+@end deffn
+
+@deffn {Variable} $@var{name}
+@deffnx {Variable} $[@var{name}]
+In an action, the semantic value of a symbol addressed by @var{name}.
+@xref{Actions}.
+@end deffn
+
+@deffn {Delimiter} %%
+Delimiter used to separate the grammar rule section from the
+Bison declarations section or the epilogue.
+@xref{Grammar Layout, ,The Overall Layout of a Bison Grammar}.
+@end deffn
+
+@c Don't insert spaces, or check the DVI output.
+@deffn {Delimiter} %@{@var{code}%@}
+All code listed between @samp{%@{} and @samp{%@}} is copied verbatim
+to the parser implementation file.  Such code forms the prologue of
+the grammar file.  @xref{Grammar Outline, ,Outline of a Bison
+Grammar}.
+@end deffn
+
+@deffn {Construct} /* @dots{} */
+@deffnx {Construct} // @dots{}
+Comments, as in C/C++.
+@end deffn
+
+@deffn {Delimiter} :
+Separates a rule's result from its components.  @xref{Rules, ,Syntax of
+Grammar Rules}.
+@end deffn
+
+@deffn {Delimiter} ;
+Terminates a rule.  @xref{Rules, ,Syntax of Grammar Rules}.
+@end deffn
+
+@deffn {Delimiter} |
+Separates alternate rules for the same result nonterminal.
+@xref{Rules, ,Syntax of Grammar Rules}.
+@end deffn
+
+@deffn {Directive} <*>
+Used to define a default tagged @code{%destructor} or default tagged
+@code{%printer}.
+
+This feature is experimental.
+More user feedback will help to determine whether it should become a permanent
+feature.
+
+@xref{Destructor Decl, , Freeing Discarded Symbols}.
+@end deffn
+
+@deffn {Directive} <>
+Used to define a default tagless @code{%destructor} or default tagless
+@code{%printer}.
+
+This feature is experimental.
+More user feedback will help to determine whether it should become a permanent
+feature.
+
+@xref{Destructor Decl, , Freeing Discarded Symbols}.
+@end deffn
+
+@deffn {Symbol} $accept
+The predefined nonterminal whose only rule is @samp{$accept: @var{start}
+$end}, where @var{start} is the start symbol.  @xref{Start Decl, , The
+Start-Symbol}.  It cannot be used in the grammar.
+@end deffn
+
+@deffn {Directive} %code @{@var{code}@}
+@deffnx {Directive} %code @var{qualifier} @{@var{code}@}
+Insert @var{code} verbatim into the output parser source at the
+default location or at the location specified by @var{qualifier}.
+@xref{%code Summary}.
+@end deffn
+
+@deffn {Directive} %debug
+Equip the parser for debugging.  @xref{Decl Summary}.
+@end deffn
+
+@ifset defaultprec
+@deffn {Directive} %default-prec
+Assign a precedence to rules that lack an explicit @samp{%prec}
+modifier.  @xref{Contextual Precedence, ,Context-Dependent
+Precedence}.
+@end deffn
+@end ifset
+
+@deffn {Directive} %define @var{variable}
+@deffnx {Directive} %define @var{variable} @var{value}
+@deffnx {Directive} %define @var{variable} "@var{value}"
+Define a variable to adjust Bison's behavior.  @xref{%define Summary}.
+@end deffn
+
+@deffn {Directive} %defines
+Bison declaration to create a parser header file, which is usually
+meant for the scanner.  @xref{Decl Summary}.
+@end deffn
+
+@deffn {Directive} %defines @var{defines-file}
+Same as above, but save in the file @var{defines-file}.
+@xref{Decl Summary}.
+@end deffn
+
+@deffn {Directive} %destructor
+Specify how the parser should reclaim the memory associated to
+discarded symbols.  @xref{Destructor Decl, , Freeing Discarded Symbols}.
+@end deffn
+
+@deffn {Directive} %dprec
+Bison declaration to assign a precedence to a rule that is used at parse
+time to resolve reduce/reduce conflicts.  @xref{GLR Parsers, ,Writing
+GLR Parsers}.
+@end deffn
+
+@deffn {Symbol} $end
+The predefined token marking the end of the token stream.  It cannot be
+used in the grammar.
+@end deffn
+
+@deffn {Symbol} error
+A token name reserved for error recovery.  This token may be used in
+grammar rules so as to allow the Bison parser to recognize an error in
+the grammar without halting the process.  In effect, a sentence
+containing an error may be recognized as valid.  On a syntax error, the
+token @code{error} becomes the current lookahead token.  Actions
+corresponding to @code{error} are then executed, and the lookahead
+token is reset to the token that originally caused the violation.
+@xref{Error Recovery}.
+@end deffn
+
+@deffn {Directive} %error-verbose
+Bison declaration to request verbose, specific error message strings
+when @code{yyerror} is called.  @xref{Error Reporting}.
+@end deffn
+
+@deffn {Directive} %file-prefix "@var{prefix}"
+Bison declaration to set the prefix of the output files.  @xref{Decl
+Summary}.
+@end deffn
+
+@deffn {Directive} %glr-parser
+Bison declaration to produce a GLR parser.  @xref{GLR
+Parsers, ,Writing GLR Parsers}.
+@end deffn
+
+@deffn {Directive} %initial-action
+Run user code before parsing.  @xref{Initial Action Decl, , Performing Actions before Parsing}.
+@end deffn
+
+@deffn {Directive} %language
+Specify the programming language for the generated parser.
+@xref{Decl Summary}.
+@end deffn
+
+@deffn {Directive} %left
+Bison declaration to assign left associativity to token(s).
+@xref{Precedence Decl, ,Operator Precedence}.
+@end deffn
+
+@deffn {Directive} %lex-param @{@var{argument-declaration}@}
+Bison declaration to specifying an additional parameter that
+@code{yylex} should accept.  @xref{Pure Calling,, Calling Conventions
+for Pure Parsers}.
+@end deffn
+
+@deffn {Directive} %merge
+Bison declaration to assign a merging function to a rule.  If there is a
+reduce/reduce conflict with a rule having the same merging function, the
+function is applied to the two semantic values to get a single result.
+@xref{GLR Parsers, ,Writing GLR Parsers}.
+@end deffn
+
+@deffn {Directive} %name-prefix "@var{prefix}"
+Obsoleted by the @code{%define} variable @code{api.prefix} (@pxref{Multiple
+Parsers, ,Multiple Parsers in the Same Program}).
+
+Rename the external symbols (variables and functions) used in the parser so
+that they start with @var{prefix} instead of @samp{yy}.  Contrary to
+@code{api.prefix}, do no rename types and macros.
+
+The precise list of symbols renamed in C parsers is @code{yyparse},
+@code{yylex}, @code{yyerror}, @code{yynerrs}, @code{yylval}, @code{yychar},
+@code{yydebug}, and (if locations are used) @code{yylloc}.  If you use a
+push parser, @code{yypush_parse}, @code{yypull_parse}, @code{yypstate},
+@code{yypstate_new} and @code{yypstate_delete} will also be renamed.  For
+example, if you use @samp{%name-prefix "c_"}, the names become
+@code{c_parse}, @code{c_lex}, and so on.  For C++ parsers, see the
+@code{%define namespace} documentation in this section.
+@end deffn
+
+
+@ifset defaultprec
+@deffn {Directive} %no-default-prec
+Do not assign a precedence to rules that lack an explicit @samp{%prec}
+modifier.  @xref{Contextual Precedence, ,Context-Dependent
+Precedence}.
+@end deffn
+@end ifset
+
+@deffn {Directive} %no-lines
+Bison declaration to avoid generating @code{#line} directives in the
+parser implementation file.  @xref{Decl Summary}.
+@end deffn
+
+@deffn {Directive} %nonassoc
+Bison declaration to assign nonassociativity to token(s).
+@xref{Precedence Decl, ,Operator Precedence}.
+@end deffn
+
+@deffn {Directive} %output "@var{file}"
+Bison declaration to set the name of the parser implementation file.
+@xref{Decl Summary}.
+@end deffn
+
+@deffn {Directive} %parse-param @{@var{argument-declaration}@}
+Bison declaration to specifying an additional parameter that
+@code{yyparse} should accept.  @xref{Parser Function,, The Parser
+Function @code{yyparse}}.
+@end deffn
+
+@deffn {Directive} %prec
+Bison declaration to assign a precedence to a specific rule.
+@xref{Contextual Precedence, ,Context-Dependent Precedence}.
+@end deffn
+
+@deffn {Directive} %pure-parser
+Deprecated version of @code{%define api.pure} (@pxref{%define
+Summary,,api.pure}), for which Bison is more careful to warn about
+unreasonable usage.
+@end deffn
+
+@deffn {Directive} %require "@var{version}"
+Require version @var{version} or higher of Bison.  @xref{Require Decl, ,
+Require a Version of Bison}.
+@end deffn
+
+@deffn {Directive} %right
+Bison declaration to assign right associativity to token(s).
+@xref{Precedence Decl, ,Operator Precedence}.
+@end deffn
+
+@deffn {Directive} %skeleton
+Specify the skeleton to use; usually for development.
+@xref{Decl Summary}.
+@end deffn
+
+@deffn {Directive} %start
+Bison declaration to specify the start symbol.  @xref{Start Decl, ,The
+Start-Symbol}.
+@end deffn
+
+@deffn {Directive} %token
+Bison declaration to declare token(s) without specifying precedence.
+@xref{Token Decl, ,Token Type Names}.
+@end deffn
+
+@deffn {Directive} %token-table
+Bison declaration to include a token name table in the parser
+implementation file.  @xref{Decl Summary}.
+@end deffn
+
+@deffn {Directive} %type
+Bison declaration to declare nonterminals.  @xref{Type Decl,
+,Nonterminal Symbols}.
+@end deffn
+
+@deffn {Symbol} $undefined
+The predefined token onto which all undefined values returned by
+@code{yylex} are mapped.  It cannot be used in the grammar, rather, use
+@code{error}.
+@end deffn
+
+@deffn {Directive} %union
+Bison declaration to specify several possible data types for semantic
+values.  @xref{Union Decl, ,The Collection of Value Types}.
+@end deffn
+
+@deffn {Macro} YYABORT
+Macro to pretend that an unrecoverable syntax error has occurred, by
+making @code{yyparse} return 1 immediately.  The error reporting
+function @code{yyerror} is not called.  @xref{Parser Function, ,The
+Parser Function @code{yyparse}}.
+
+For Java parsers, this functionality is invoked using @code{return YYABORT;}
+instead.
+@end deffn
+
+@deffn {Macro} YYACCEPT
+Macro to pretend that a complete utterance of the language has been
+read, by making @code{yyparse} return 0 immediately.
+@xref{Parser Function, ,The Parser Function @code{yyparse}}.
+
+For Java parsers, this functionality is invoked using @code{return YYACCEPT;}
+instead.
+@end deffn
+
+@deffn {Macro} YYBACKUP
+Macro to discard a value from the parser stack and fake a lookahead
+token.  @xref{Action Features, ,Special Features for Use in Actions}.
+@end deffn
+
+@deffn {Variable} yychar
+External integer variable that contains the integer value of the
+lookahead token.  (In a pure parser, it is a local variable within
+@code{yyparse}.)  Error-recovery rule actions may examine this variable.
+@xref{Action Features, ,Special Features for Use in Actions}.
+@end deffn
+
+@deffn {Variable} yyclearin
+Macro used in error-recovery rule actions.  It clears the previous
+lookahead token.  @xref{Error Recovery}.
+@end deffn
+
+@deffn {Macro} YYDEBUG
+Macro to define to equip the parser with tracing code.  @xref{Tracing,
+,Tracing Your Parser}.
+@end deffn
+
+@deffn {Variable} yydebug
+External integer variable set to zero by default.  If @code{yydebug}
+is given a nonzero value, the parser will output information on input
+symbols and parser action.  @xref{Tracing, ,Tracing Your Parser}.
+@end deffn
+
+@deffn {Macro} yyerrok
+Macro to cause parser to recover immediately to its normal mode
+after a syntax error.  @xref{Error Recovery}.
+@end deffn
+
+@deffn {Macro} YYERROR
+Cause an immediate syntax error.  This statement initiates error
+recovery just as if the parser itself had detected an error; however, it
+does not call @code{yyerror}, and does not print any message.  If you
+want to print an error message, call @code{yyerror} explicitly before
+the @samp{YYERROR;} statement.  @xref{Error Recovery}.
+
+For Java parsers, this functionality is invoked using @code{return YYERROR;}
+instead.
+@end deffn
+
+@deffn {Function} yyerror
+User-supplied function to be called by @code{yyparse} on error.
+@xref{Error Reporting, ,The Error
+Reporting Function @code{yyerror}}.
+@end deffn
+
+@deffn {Macro} YYERROR_VERBOSE
+An obsolete macro that you define with @code{#define} in the prologue
+to request verbose, specific error message strings
+when @code{yyerror} is called.  It doesn't matter what definition you
+use for @code{YYERROR_VERBOSE}, just whether you define it.
+Supported by the C skeletons only; using
+@code{%error-verbose} is preferred.  @xref{Error Reporting}.
+@end deffn
+
+@deffn {Macro} YYFPRINTF
+Macro used to output run-time traces.
+@xref{Enabling Traces}.
+@end deffn
+
+@deffn {Macro} YYINITDEPTH
+Macro for specifying the initial size of the parser stack.
+@xref{Memory Management}.
+@end deffn
+
+@deffn {Function} yylex
+User-supplied lexical analyzer function, called with no arguments to get
+the next token.  @xref{Lexical, ,The Lexical Analyzer Function
+@code{yylex}}.
+@end deffn
+
+@deffn {Macro} YYLEX_PARAM
+An obsolete macro for specifying an extra argument (or list of extra
+arguments) for @code{yyparse} to pass to @code{yylex}.  The use of this
+macro is deprecated, and is supported only for Yacc like parsers.
+@xref{Pure Calling,, Calling Conventions for Pure Parsers}.
+@end deffn
+
+@deffn {Variable} yylloc
+External variable in which @code{yylex} should place the line and column
+numbers associated with a token.  (In a pure parser, it is a local
+variable within @code{yyparse}, and its address is passed to
+@code{yylex}.)
+You can ignore this variable if you don't use the @samp{@@} feature in the
+grammar actions.
+@xref{Token Locations, ,Textual Locations of Tokens}.
+In semantic actions, it stores the location of the lookahead token.
+@xref{Actions and Locations, ,Actions and Locations}.
+@end deffn
+
+@deffn {Type} YYLTYPE
+Data type of @code{yylloc}; by default, a structure with four
+members.  @xref{Location Type, , Data Types of Locations}.
+@end deffn
+
+@deffn {Variable} yylval
+External variable in which @code{yylex} should place the semantic
+value associated with a token.  (In a pure parser, it is a local
+variable within @code{yyparse}, and its address is passed to
+@code{yylex}.)
+@xref{Token Values, ,Semantic Values of Tokens}.
+In semantic actions, it stores the semantic value of the lookahead token.
+@xref{Actions, ,Actions}.
+@end deffn
+
+@deffn {Macro} YYMAXDEPTH
+Macro for specifying the maximum size of the parser stack.  @xref{Memory
+Management}.
+@end deffn
+
+@deffn {Variable} yynerrs
+Global variable which Bison increments each time it reports a syntax error.
+(In a pure parser, it is a local variable within @code{yyparse}. In a
+pure push parser, it is a member of yypstate.)
+@xref{Error Reporting, ,The Error Reporting Function @code{yyerror}}.
+@end deffn
+
+@deffn {Function} yyparse
+The parser function produced by Bison; call this function to start
+parsing.  @xref{Parser Function, ,The Parser Function @code{yyparse}}.
+@end deffn
+
+@deffn {Macro} YYPRINT
+Macro used to output token semantic values.  For @file{yacc.c} only.
+Obsoleted by @code{%printer}.
+@xref{The YYPRINT Macro, , The @code{YYPRINT} Macro}.
+@end deffn
+
+@deffn {Function} yypstate_delete
+The function to delete a parser instance, produced by Bison in push mode;
+call this function to delete the memory associated with a parser.
+@xref{Parser Delete Function, ,The Parser Delete Function
+@code{yypstate_delete}}.
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+@end deffn
+
+@deffn {Function} yypstate_new
+The function to create a parser instance, produced by Bison in push mode;
+call this function to create a new parser.
+@xref{Parser Create Function, ,The Parser Create Function
+@code{yypstate_new}}.
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+@end deffn
+
+@deffn {Function} yypull_parse
+The parser function produced by Bison in push mode; call this function to
+parse the rest of the input stream.
+@xref{Pull Parser Function, ,The Pull Parser Function
+@code{yypull_parse}}.
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+@end deffn
+
+@deffn {Function} yypush_parse
+The parser function produced by Bison in push mode; call this function to
+parse a single token.  @xref{Push Parser Function, ,The Push Parser Function
+@code{yypush_parse}}.
+(The current push parsing interface is experimental and may evolve.
+More user feedback will help to stabilize it.)
+@end deffn
+
+@deffn {Macro} YYPARSE_PARAM
+An obsolete macro for specifying the name of a parameter that
+@code{yyparse} should accept.  The use of this macro is deprecated, and
+is supported only for Yacc like parsers.  @xref{Pure Calling,, Calling
+Conventions for Pure Parsers}.
+@end deffn
+
+@deffn {Macro} YYRECOVERING
+The expression @code{YYRECOVERING ()} yields 1 when the parser
+is recovering from a syntax error, and 0 otherwise.
+@xref{Action Features, ,Special Features for Use in Actions}.
+@end deffn
+
+@deffn {Macro} YYSTACK_USE_ALLOCA
+Macro used to control the use of @code{alloca} when the
+deterministic parser in C needs to extend its stacks.  If defined to 0,
+the parser will use @code{malloc} to extend its stacks.  If defined to
+1, the parser will use @code{alloca}.  Values other than 0 and 1 are
+reserved for future Bison extensions.  If not defined,
+@code{YYSTACK_USE_ALLOCA} defaults to 0.
+
+In the all-too-common case where your code may run on a host with a
+limited stack and with unreliable stack-overflow checking, you should
+set @code{YYMAXDEPTH} to a value that cannot possibly result in
+unchecked stack overflow on any of your target hosts when
+@code{alloca} is called.  You can inspect the code that Bison
+generates in order to determine the proper numeric values.  This will
+require some expertise in low-level implementation details.
+@end deffn
+
+@deffn {Type} YYSTYPE
+Data type of semantic values; @code{int} by default.
+@xref{Value Type, ,Data Types of Semantic Values}.
+@end deffn
+
+@node Glossary
+@appendix Glossary
+@cindex glossary
+
+@table @asis
+@item Accepting state
+A state whose only action is the accept action.
+The accepting state is thus a consistent state.
+@xref{Understanding, ,Understanding Your Parser}.
+
+@item Backus-Naur Form (BNF; also called ``Backus Normal Form'')
+Formal method of specifying context-free grammars originally proposed
+by John Backus, and slightly improved by Peter Naur in his 1960-01-02
+committee document contributing to what became the Algol 60 report.
+@xref{Language and Grammar, ,Languages and Context-Free Grammars}.
+
+@item Consistent state
+A state containing only one possible action.  @xref{Default Reductions}.
+
+@item Context-free grammars
+Grammars specified as rules that can be applied regardless of context.
+Thus, if there is a rule which says that an integer can be used as an
+expression, integers are allowed @emph{anywhere} an expression is
+permitted.  @xref{Language and Grammar, ,Languages and Context-Free
+Grammars}.
+
+@item Default reduction
+The reduction that a parser should perform if the current parser state
+contains no other action for the lookahead token.  In permitted parser
+states, Bison declares the reduction with the largest lookahead set to be
+the default reduction and removes that lookahead set.  @xref{Default
+Reductions}.
+
+@item Defaulted state
+A consistent state with a default reduction.  @xref{Default Reductions}.
+
+@item Dynamic allocation
+Allocation of memory that occurs during execution, rather than at
+compile time or on entry to a function.
+
+@item Empty string
+Analogous to the empty set in set theory, the empty string is a
+character string of length zero.
+
+@item Finite-state stack machine
+A ``machine'' that has discrete states in which it is said to exist at
+each instant in time.  As input to the machine is processed, the
+machine moves from state to state as specified by the logic of the
+machine.  In the case of the parser, the input is the language being
+parsed, and the states correspond to various stages in the grammar
+rules.  @xref{Algorithm, ,The Bison Parser Algorithm}.
+
+@item Generalized LR (GLR)
+A parsing algorithm that can handle all context-free grammars, including those
+that are not LR(1).  It resolves situations that Bison's
+deterministic parsing
+algorithm cannot by effectively splitting off multiple parsers, trying all
+possible parsers, and discarding those that fail in the light of additional
+right context.  @xref{Generalized LR Parsing, ,Generalized
+LR Parsing}.
+
+@item Grouping
+A language construct that is (in general) grammatically divisible;
+for example, `expression' or `declaration' in C@.
+@xref{Language and Grammar, ,Languages and Context-Free Grammars}.
+
+@item IELR(1) (Inadequacy Elimination LR(1))
+A minimal LR(1) parser table construction algorithm.  That is, given any
+context-free grammar, IELR(1) generates parser tables with the full
+language-recognition power of canonical LR(1) but with nearly the same
+number of parser states as LALR(1).  This reduction in parser states is
+often an order of magnitude.  More importantly, because canonical LR(1)'s
+extra parser states may contain duplicate conflicts in the case of non-LR(1)
+grammars, the number of conflicts for IELR(1) is often an order of magnitude
+less as well.  This can significantly reduce the complexity of developing a
+grammar.  @xref{LR Table Construction}.
+
+@item Infix operator
+An arithmetic operator that is placed between the operands on which it
+performs some operation.
+
+@item Input stream
+A continuous flow of data between devices or programs.
+
+@item LAC (Lookahead Correction)
+A parsing mechanism that fixes the problem of delayed syntax error
+detection, which is caused by LR state merging, default reductions, and the
+use of @code{%nonassoc}.  Delayed syntax error detection results in
+unexpected semantic actions, initiation of error recovery in the wrong
+syntactic context, and an incorrect list of expected tokens in a verbose
+syntax error message.  @xref{LAC}.
+
+@item Language construct
+One of the typical usage schemas of the language.  For example, one of
+the constructs of the C language is the @code{if} statement.
+@xref{Language and Grammar, ,Languages and Context-Free Grammars}.
+
+@item Left associativity
+Operators having left associativity are analyzed from left to right:
+@samp{a+b+c} first computes @samp{a+b} and then combines with
+@samp{c}.  @xref{Precedence, ,Operator Precedence}.
+
+@item Left recursion
+A rule whose result symbol is also its first component symbol; for
+example, @samp{expseq1 : expseq1 ',' exp;}.  @xref{Recursion, ,Recursive
+Rules}.
+
+@item Left-to-right parsing
+Parsing a sentence of a language by analyzing it token by token from
+left to right.  @xref{Algorithm, ,The Bison Parser Algorithm}.
+
+@item Lexical analyzer (scanner)
+A function that reads an input stream and returns tokens one by one.
+@xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
+
+@item Lexical tie-in
+A flag, set by actions in the grammar rules, which alters the way
+tokens are parsed.  @xref{Lexical Tie-ins}.
+
+@item Literal string token
+A token which consists of two or more fixed characters.  @xref{Symbols}.
+
+@item Lookahead token
+A token already read but not yet shifted.  @xref{Lookahead, ,Lookahead
+Tokens}.
+
+@item LALR(1)
+The class of context-free grammars that Bison (like most other parser
+generators) can handle by default; a subset of LR(1).
+@xref{Mysterious Conflicts}.
+
+@item LR(1)
+The class of context-free grammars in which at most one token of
+lookahead is needed to disambiguate the parsing of any piece of input.
+
+@item Nonterminal symbol
+A grammar symbol standing for a grammatical construct that can
+be expressed through rules in terms of smaller constructs; in other
+words, a construct that is not a token.  @xref{Symbols}.
+
+@item Parser
+A function that recognizes valid sentences of a language by analyzing
+the syntax structure of a set of tokens passed to it from a lexical
+analyzer.
+
+@item Postfix operator
+An arithmetic operator that is placed after the operands upon which it
+performs some operation.
+
+@item Reduction
+Replacing a string of nonterminals and/or terminals with a single
+nonterminal, according to a grammar rule.  @xref{Algorithm, ,The Bison
+Parser Algorithm}.
+
+@item Reentrant
+A reentrant subprogram is a subprogram which can be in invoked any
+number of times in parallel, without interference between the various
+invocations.  @xref{Pure Decl, ,A Pure (Reentrant) Parser}.
+
+@item Reverse polish notation
+A language in which all operators are postfix operators.
+
+@item Right recursion
+A rule whose result symbol is also its last component symbol; for
+example, @samp{expseq1: exp ',' expseq1;}.  @xref{Recursion, ,Recursive
+Rules}.
+
+@item Semantics
+In computer languages, the semantics are specified by the actions
+taken for each instance of the language, i.e., the meaning of
+each statement.  @xref{Semantics, ,Defining Language Semantics}.
+
+@item Shift
+A parser is said to shift when it makes the choice of analyzing
+further input from the stream rather than reducing immediately some
+already-recognized rule.  @xref{Algorithm, ,The Bison Parser Algorithm}.
+
+@item Single-character literal
+A single character that is recognized and interpreted as is.
+@xref{Grammar in Bison, ,From Formal Rules to Bison Input}.
+
+@item Start symbol
+The nonterminal symbol that stands for a complete valid utterance in
+the language being parsed.  The start symbol is usually listed as the
+first nonterminal symbol in a language specification.
+@xref{Start Decl, ,The Start-Symbol}.
+
+@item Symbol table
+A data structure where symbol names and associated data are stored
+during parsing to allow for recognition and use of existing
+information in repeated uses of a symbol.  @xref{Multi-function Calc}.
+
+@item Syntax error
+An error encountered during parsing of an input stream due to invalid
+syntax.  @xref{Error Recovery}.
+
+@item Token
+A basic, grammatically indivisible unit of a language.  The symbol
+that describes a token in the grammar is a terminal symbol.
+The input of the Bison parser is a stream of tokens which comes from
+the lexical analyzer.  @xref{Symbols}.
+
+@item Terminal symbol
+A grammar symbol that has no rules in the grammar and therefore is
+grammatically indivisible.  The piece of text it represents is a token.
+@xref{Language and Grammar, ,Languages and Context-Free Grammars}.
+
+@item Unreachable state
+A parser state to which there does not exist a sequence of transitions from
+the parser's start state.  A state can become unreachable during conflict
+resolution.  @xref{Unreachable States}.
+@end table
+
+@node Copying This Manual
+@appendix Copying This Manual
+@include fdl.texi
+
+@node Bibliography
+@unnumbered Bibliography
+
+@table @asis
+@item [Denny 2008]
+Joel E. Denny and Brian A. Malloy, IELR(1): Practical LR(1) Parser Tables
+for Non-LR(1) Grammars with Conflict Resolution, in @cite{Proceedings of the
+2008 ACM Symposium on Applied Computing} (SAC'08), ACM, New York, NY, USA,
+pp.@: 240--245.  @uref{http://dx.doi.org/10.1145/1363686.1363747}
+
+@item [Denny 2010 May]
+Joel E. Denny, PSLR(1): Pseudo-Scannerless Minimal LR(1) for the
+Deterministic Parsing of Composite Languages, Ph.D. Dissertation, Clemson
+University, Clemson, SC, USA (May 2010).
+@uref{http://proquest.umi.com/pqdlink?did=2041473591&Fmt=7&clientId=79356&RQT=309&VName=PQD}
+
+@item [Denny 2010 November]
+Joel E. Denny and Brian A. Malloy, The IELR(1) Algorithm for Generating
+Minimal LR(1) Parser Tables for Non-LR(1) Grammars with Conflict Resolution,
+in @cite{Science of Computer Programming}, Vol.@: 75, Issue 11 (November
+2010), pp.@: 943--979.  @uref{http://dx.doi.org/10.1016/j.scico.2009.08.001}
+
+@item [DeRemer 1982]
+Frank DeRemer and Thomas Pennello, Efficient Computation of LALR(1)
+Look-Ahead Sets, in @cite{ACM Transactions on Programming Languages and
+Systems}, Vol.@: 4, No.@: 4 (October 1982), pp.@:
+615--649. @uref{http://dx.doi.org/10.1145/69622.357187}
+
+@item [Knuth 1965]
+Donald E. Knuth, On the Translation of Languages from Left to Right, in
+@cite{Information and Control}, Vol.@: 8, Issue 6 (December 1965), pp.@:
+607--639. @uref{http://dx.doi.org/10.1016/S0019-9958(65)90426-2}
+
+@item [Scott 2000]
+Elizabeth Scott, Adrian Johnstone, and Shamsa Sadaf Hussain,
+@cite{Tomita-Style Generalised LR Parsers}, Royal Holloway, University of
+London, Department of Computer Science, TR-00-12 (December 2000).
+@uref{http://www.cs.rhul.ac.uk/research/languages/publications/tomita_style_1.ps}
+@end table
+
+@node Index of Terms
+@unnumbered Index of Terms
+
+@printindex cp
+
+@bye
+
+@c LocalWords: texinfo setfilename settitle setchapternewpage finalout texi FSF
+@c LocalWords: ifinfo smallbook shorttitlepage titlepage GPL FIXME iftex FSF's
+@c LocalWords: akim fn cp syncodeindex vr tp synindex dircategory direntry Naur
+@c LocalWords: ifset vskip pt filll insertcopying sp ISBN Etienne Suvasa Multi
+@c LocalWords: ifnottex yyparse detailmenu GLR RPN Calc var Decls Rpcalc multi
+@c LocalWords: rpcalc Lexer Expr ltcalc mfcalc yylex defaultprec Donnelly Gotos
+@c LocalWords: yyerror pxref LR yylval cindex dfn LALR samp gpl BNF xref yypush
+@c LocalWords: const int paren ifnotinfo AC noindent emph expr stmt findex lr
+@c LocalWords: glr YYSTYPE TYPENAME prog dprec printf decl init stmtMerge POSIX
+@c LocalWords: pre STDC GNUC endif yy YY alloca lf stddef stdlib YYDEBUG yypull
+@c LocalWords: NUM exp subsubsection kbd Ctrl ctype EOF getchar isdigit nonfree
+@c LocalWords: ungetc stdin scanf sc calc ulator ls lm cc NEG prec yyerrok rr
+@c LocalWords: longjmp fprintf stderr yylloc YYLTYPE cos ln Stallman Destructor
+@c LocalWords: symrec val tptr FNCT fnctptr func struct sym enum IEC syntaxes
+@c LocalWords: fnct putsym getsym fname arith fncts atan ptr malloc sizeof Lex
+@c LocalWords: strlen strcpy fctn strcmp isalpha symbuf realloc isalnum DOTDOT
+@c LocalWords: ptypes itype YYPRINT trigraphs yytname expseq vindex dtype Unary
+@c LocalWords: Rhs YYRHSLOC LE nonassoc op deffn typeless yynerrs nonterminal
+@c LocalWords: yychar yydebug msg YYNTOKENS YYNNTS YYNRULES YYNSTATES reentrant
+@c LocalWords: cparse clex deftypefun NE defmac YYACCEPT YYABORT param yypstate
+@c LocalWords: strncmp intval tindex lvalp locp llocp typealt YYBACKUP subrange
+@c LocalWords: YYEMPTY YYEOF YYRECOVERING yyclearin GE def UMINUS maybeword loc
+@c LocalWords: Johnstone Shamsa Sadaf Hussain Tomita TR uref YYMAXDEPTH inline
+@c LocalWords: YYINITDEPTH stmts ref initdcl maybeasm notype Lookahead yyoutput
+@c LocalWords: hexflag STR exdent itemset asis DYYDEBUG YYFPRINTF args Autoconf
+@c LocalWords: infile ypp yxx outfile itemx tex leaderfill Troubleshouting sqrt
+@c LocalWords: hbox hss hfill tt ly yyin fopen fclose ofirst gcc ll lookahead
+@c LocalWords: nbar yytext fst snd osplit ntwo strdup AST Troublereporting th
+@c LocalWords: YYSTACK DVI fdl printindex IELR nondeterministic nonterminals ps
+@c LocalWords: subexpressions declarator nondeferred config libintl postfix LAC
+@c LocalWords: preprocessor nonpositive unary nonnumeric typedef extern rhs sr
+@c LocalWords: yytokentype destructor multicharacter nonnull EBCDIC nterm LR's
+@c LocalWords: lvalue nonnegative XNUM CHR chr TAGLESS tagless stdout api TOK
+@c LocalWords: destructors Reentrancy nonreentrant subgrammar nonassociative Ph
+@c LocalWords: deffnx namespace xml goto lalr ielr runtime lex yacc yyps env
+@c LocalWords: yystate variadic Unshift NLS gettext po UTF Automake LOCALEDIR
+@c LocalWords: YYENABLE bindtextdomain Makefile DEFS CPPFLAGS DBISON DeRemer
+@c LocalWords: autoreconf Pennello multisets nondeterminism Generalised baz ACM
+@c LocalWords: redeclare automata Dparse localedir datadir XSLT midrule Wno
+@c LocalWords: Graphviz multitable headitem hh basename Doxygen fno filename
+@c LocalWords: doxygen ival sval deftypemethod deallocate pos deftypemethodx
+@c LocalWords: Ctor defcv defcvx arg accessors arithmetics CPP ifndef CALCXX
+@c LocalWords: lexer's calcxx bool LPAREN RPAREN deallocation cerrno climits
+@c LocalWords: cstdlib Debian undef yywrap unput noyywrap nounput zA yyleng
+@c LocalWords: errno strtol ERANGE str strerror iostream argc argv Javadoc PSLR
+@c LocalWords: bytecode initializers superclass stype ASTNode autoboxing nls
+@c LocalWords: toString deftypeivar deftypeivarx deftypeop YYParser strictfp
+@c LocalWords: superclasses boolean getErrorVerbose setErrorVerbose deftypecv
+@c LocalWords: getDebugStream setDebugStream getDebugLevel setDebugLevel url
+@c LocalWords: bisonVersion deftypecvx bisonSkeleton getStartPos getEndPos uint
+@c LocalWords: getLVal defvar deftypefn deftypefnx gotos msgfmt Corbett LALR's
+@c LocalWords: subdirectory Solaris nonassociativity perror schemas Malloy ints
+@c LocalWords: Scannerless ispell american ChangeLog smallexample CSTYPE CLTYPE
+@c LocalWords: clval CDEBUG cdebug deftypeopx yyterminate LocationType
+@c LocalWords: parsers parser's
+@c LocalWords: associativity subclasses precedences unresolvable runnable
+@c LocalWords: allocators subunit initializations unreferenced untyped
+@c LocalWords: errorVerbose subtype subtypes
+
+@c Local Variables:
+@c ispell-dictionary: "american"
+@c fill-column: 76
+@c End:
diff --git a/doc/bison.texinfo b/doc/bison.texinfo
deleted file mode 100644
index 6c67b59..0000000
--- a/doc/bison.texinfo
+++ /dev/null
@@ -1,8715 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header
-@setfilename bison.info
-@include version.texi
-@settitle Bison @value{VERSION}
-@setchapternewpage odd
-
-@finalout
-
-@c SMALL BOOK version
-@c This edition has been formatted so that you can format and print it in
-@c the smallbook format.
-@c @smallbook
-
-@c Set following if you want to document %default-prec and %no-default-prec.
-@c This feature is experimental and may change in future Bison versions.
-@c @set defaultprec
-
-@ifnotinfo
-@syncodeindex fn cp
-@syncodeindex vr cp
-@syncodeindex tp cp
-@end ifnotinfo
-@ifinfo
-@synindex fn cp
-@synindex vr cp
-@synindex tp cp
-@end ifinfo
-@comment %**end of header
-
-@copying
-
-This manual is for @acronym{GNU} Bison (version @value{VERSION},
-@value{UPDATED}), the @acronym{GNU} parser generator.
-
-Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998,
-1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the @acronym{GNU} Free Documentation License,
-Version 1.2 or any later version published by the Free Software
-Foundation; with no Invariant Sections, with the Front-Cover texts
-being ``A @acronym{GNU} Manual,'' and with the Back-Cover Texts as in
-(a) below.  A copy of the license is included in the section entitled
-``@acronym{GNU} Free Documentation License.''
-
-(a) The @acronym{FSF}'s Back-Cover Text is: ``You have freedom to copy
-and modify this @acronym{GNU} Manual, like @acronym{GNU} software.
-Copies published by the Free Software Foundation raise funds for
-@acronym{GNU} development.''
-@end quotation
-@end copying
-
-@dircategory Software development
-@direntry
-* bison: (bison).       @acronym{GNU} parser generator (Yacc replacement).
-@end direntry
-
-@titlepage
-@title Bison
-@subtitle The Yacc-compatible Parser Generator
-@subtitle @value{UPDATED}, Bison Version @value{VERSION}
-
-@author by Charles Donnelly and Richard Stallman
-
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@sp 2
-Published by the Free Software Foundation @*
-51 Franklin Street, Fifth Floor @*
-Boston, MA  02110-1301  USA @*
-Printed copies are available from the Free Software Foundation.@*
-@acronym{ISBN} 1-882114-44-2
-@sp 2
-Cover art by Etienne Suvasa.
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top
-@top Bison
-@insertcopying
-@end ifnottex
-
-@menu
-* Introduction::
-* Conditions::
-* Copying::           The @acronym{GNU} General Public License says
-                        how you can copy and share Bison
-
-Tutorial sections:
-* Concepts::          Basic concepts for understanding Bison.
-* Examples::          Three simple explained examples of using Bison.
-
-Reference sections:
-* Grammar File::      Writing Bison declarations and rules.
-* Interface::         C-language interface to the parser function @code{yyparse}.
-* Algorithm::         How the Bison parser works at run-time.
-* Error Recovery::    Writing rules for error recovery.
-* Context Dependency::  What to do if your language syntax is too
-                        messy for Bison to handle straightforwardly.
-* Debugging::         Understanding or debugging Bison parsers.
-* Invocation::        How to run Bison (to produce the parser source file).
-* C++ Language Interface::  Creating C++ parser objects.
-* FAQ::               Frequently Asked Questions
-* Table of Symbols::  All the keywords of the Bison language are explained.
-* Glossary::          Basic concepts are explained.
-* Copying This Manual::  License for copying this manual.
-* Index::             Cross-references to the text.
-
-@detailmenu
- --- The Detailed Node Listing ---
-
-The Concepts of Bison
-
-* Language and Grammar::  Languages and context-free grammars,
-                            as mathematical ideas.
-* Grammar in Bison::  How we represent grammars for Bison's sake.
-* Semantic Values::   Each token or syntactic grouping can have
-                        a semantic value (the value of an integer,
-                        the name of an identifier, etc.).
-* Semantic Actions::  Each rule can have an action containing C code.
-* GLR Parsers::       Writing parsers for general context-free languages.
-* Locations Overview::    Tracking Locations.
-* Bison Parser::      What are Bison's input and output,
-                        how is the output used?
-* Stages::            Stages in writing and running Bison grammars.
-* Grammar Layout::    Overall structure of a Bison grammar file.
-
-Writing @acronym{GLR} Parsers
-
-* Simple GLR Parsers::      Using @acronym{GLR} parsers on unambiguous grammars.
-* Merging GLR Parses::      Using @acronym{GLR} parsers to resolve ambiguities.
-* GLR Semantic Actions::    Deferred semantic actions have special concerns.
-* Compiler Requirements::   @acronym{GLR} parsers require a modern C compiler.
-
-Examples
-
-* RPN Calc::          Reverse polish notation calculator;
-                        a first example with no operator precedence.
-* Infix Calc::        Infix (algebraic) notation calculator.
-                        Operator precedence is introduced.
-* Simple Error Recovery::  Continuing after syntax errors.
-* Location Tracking Calc:: Demonstrating the use of @@@var{n} and @@$.
-* Multi-function Calc::  Calculator with memory and trig functions.
-                           It uses multiple data-types for semantic values.
-* Exercises::         Ideas for improving the multi-function calculator.
-
-Reverse Polish Notation Calculator
-
-* Decls: Rpcalc Decls.  Prologue (declarations) for rpcalc.
-* Rules: Rpcalc Rules.  Grammar Rules for rpcalc, with explanation.
-* Lexer: Rpcalc Lexer.  The lexical analyzer.
-* Main: Rpcalc Main.    The controlling function.
-* Error: Rpcalc Error.  The error reporting function.
-* Gen: Rpcalc Gen.      Running Bison on the grammar file.
-* Comp: Rpcalc Compile. Run the C compiler on the output code.
-
-Grammar Rules for @code{rpcalc}
-
-* Rpcalc Input::
-* Rpcalc Line::
-* Rpcalc Expr::
-
-Location Tracking Calculator: @code{ltcalc}
-
-* Decls: Ltcalc Decls.  Bison and C declarations for ltcalc.
-* Rules: Ltcalc Rules.  Grammar rules for ltcalc, with explanations.
-* Lexer: Ltcalc Lexer.  The lexical analyzer.
-
-Multi-Function Calculator: @code{mfcalc}
-
-* Decl: Mfcalc Decl.      Bison declarations for multi-function calculator.
-* Rules: Mfcalc Rules.    Grammar rules for the calculator.
-* Symtab: Mfcalc Symtab.  Symbol table management subroutines.
-
-Bison Grammar Files
-
-* Grammar Outline::   Overall layout of the grammar file.
-* Symbols::           Terminal and nonterminal symbols.
-* Rules::             How to write grammar rules.
-* Recursion::         Writing recursive rules.
-* Semantics::         Semantic values and actions.
-* Locations::         Locations and actions.
-* Declarations::      All kinds of Bison declarations are described here.
-* Multiple Parsers::  Putting more than one Bison parser in one program.
-
-Outline of a Bison Grammar
-
-* Prologue::          Syntax and usage of the prologue.
-* Bison Declarations::  Syntax and usage of the Bison declarations section.
-* Grammar Rules::     Syntax and usage of the grammar rules section.
-* Epilogue::          Syntax and usage of the epilogue.
-
-Defining Language Semantics
-
-* Value Type::        Specifying one data type for all semantic values.
-* Multiple Types::    Specifying several alternative data types.
-* Actions::           An action is the semantic definition of a grammar rule.
-* Action Types::      Specifying data types for actions to operate on.
-* Mid-Rule Actions::  Most actions go at the end of a rule.
-                      This says when, why and how to use the exceptional
-                        action in the middle of a rule.
-
-Tracking Locations
-
-* Location Type::               Specifying a data type for locations.
-* Actions and Locations::       Using locations in actions.
-* Location Default Action::     Defining a general way to compute locations.
-
-Bison Declarations
-
-* Require Decl::      Requiring a Bison version.
-* Token Decl::        Declaring terminal symbols.
-* Precedence Decl::   Declaring terminals with precedence and associativity.
-* Union Decl::        Declaring the set of all semantic value types.
-* Type Decl::         Declaring the choice of type for a nonterminal symbol.
-* Initial Action Decl::  Code run before parsing starts.
-* Destructor Decl::   Declaring how symbols are freed.
-* Expect Decl::       Suppressing warnings about parsing conflicts.
-* Start Decl::        Specifying the start symbol.
-* Pure Decl::         Requesting a reentrant parser.
-* Decl Summary::      Table of all Bison declarations.
-
-Parser C-Language Interface
-
-* Parser Function::   How to call @code{yyparse} and what it returns.
-* Lexical::           You must supply a function @code{yylex}
-                        which reads tokens.
-* Error Reporting::   You must supply a function @code{yyerror}.
-* Action Features::   Special features for use in actions.
-* Internationalization::  How to let the parser speak in the user's
-                        native language.
-
-The Lexical Analyzer Function @code{yylex}
-
-* Calling Convention::  How @code{yyparse} calls @code{yylex}.
-* Token Values::      How @code{yylex} must return the semantic value
-                        of the token it has read.
-* Token Locations::   How @code{yylex} must return the text location
-                        (line number, etc.) of the token, if the
-                        actions want that.
-* Pure Calling::      How the calling convention differs
-                        in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
-
-The Bison Parser Algorithm
-
-* Look-Ahead::        Parser looks one token ahead when deciding what to do.
-* Shift/Reduce::      Conflicts: when either shifting or reduction is valid.
-* Precedence::        Operator precedence works by resolving conflicts.
-* Contextual Precedence::  When an operator's precedence depends on context.
-* Parser States::     The parser is a finite-state-machine with stack.
-* Reduce/Reduce::     When two rules are applicable in the same situation.
-* Mystery Conflicts::  Reduce/reduce conflicts that look unjustified.
-* Generalized LR Parsing::  Parsing arbitrary context-free grammars.
-* Memory Management:: What happens when memory is exhausted.  How to avoid it.
-
-Operator Precedence
-
-* Why Precedence::    An example showing why precedence is needed.
-* Using Precedence::  How to specify precedence in Bison grammars.
-* Precedence Examples::  How these features are used in the previous example.
-* How Precedence::    How they work.
-
-Handling Context Dependencies
-
-* Semantic Tokens::   Token parsing can depend on the semantic context.
-* Lexical Tie-ins::   Token parsing can depend on the syntactic context.
-* Tie-in Recovery::   Lexical tie-ins have implications for how
-                        error recovery rules must be written.
-
-Debugging Your Parser
-
-* Understanding::     Understanding the structure of your parser.
-* Tracing::           Tracing the execution of your parser.
-
-Invoking Bison
-
-* Bison Options::     All the options described in detail,
-                        in alphabetical order by short options.
-* Option Cross Key::  Alphabetical list of long options.
-* Yacc Library::      Yacc-compatible @code{yylex} and @code{main}.
-
-C++ Language Interface
-
-* C++ Parsers::                 The interface to generate C++ parser classes
-* A Complete C++ Example::      Demonstrating their use
-
-C++ Parsers
-
-* C++ Bison Interface::         Asking for C++ parser generation
-* C++ Semantic Values::         %union vs. C++
-* C++ Location Values::         The position and location classes
-* C++ Parser Interface::        Instantiating and running the parser
-* C++ Scanner Interface::       Exchanges between yylex and parse
-
-A Complete C++ Example
-
-* Calc++ --- C++ Calculator::   The specifications
-* Calc++ Parsing Driver::       An active parsing context
-* Calc++ Parser::               A parser class
-* Calc++ Scanner::              A pure C++ Flex scanner
-* Calc++ Top Level::            Conducting the band
-
-Frequently Asked Questions
-
-* Memory Exhausted::           Breaking the Stack Limits
-* How Can I Reset the Parser:: @code{yyparse} Keeps some State
-* Strings are Destroyed::      @code{yylval} Loses Track of Strings
-* Implementing Gotos/Loops::   Control Flow in the Calculator
-* Multiple start-symbols::     Factoring closely related grammars
-* Secure?  Conform?::          Is Bison @acronym{POSIX} safe?
-* I can't build Bison::        Troubleshooting
-* Where can I find help?::     Troubleshouting
-* Bug Reports::                Troublereporting
-* Other Languages::            Parsers in Java and others
-* Beta Testing::               Experimenting development versions
-* Mailing Lists::              Meeting other Bison users
-
-Copying This Manual
-
-* GNU Free Documentation License::  License for copying this manual.
-
-@end detailmenu
-@end menu
-
-@node Introduction
-@unnumbered Introduction
-@cindex introduction
-
-@dfn{Bison} is a general-purpose parser generator that converts an
-annotated context-free grammar into an @acronym{LALR}(1) or
-@acronym{GLR} parser for that grammar.  Once you are proficient with
-Bison, you can use it to develop a wide range of language parsers, from those
-used in simple desk calculators to complex programming languages.
-
-Bison is upward compatible with Yacc: all properly-written Yacc grammars
-ought to work with Bison with no change.  Anyone familiar with Yacc
-should be able to use Bison with little trouble.  You need to be fluent in
-C or C++ programming in order to use Bison or to understand this manual.
-
-We begin with tutorial chapters that explain the basic concepts of using
-Bison and show three explained examples, each building on the last.  If you
-don't know Bison or Yacc, start by reading these chapters.  Reference
-chapters follow which describe specific aspects of Bison in detail.
-
-Bison was written primarily by Robert Corbett; Richard Stallman made it
-Yacc-compatible.  Wilfred Hansen of Carnegie Mellon University added
-multi-character string literals and other features.
-
-This edition corresponds to version @value{VERSION} of Bison.
-
-@node Conditions
-@unnumbered Conditions for Using Bison
-
-The distribution terms for Bison-generated parsers permit using the
-parsers in nonfree programs.  Before Bison version 2.2, these extra
-permissions applied only when Bison was generating @acronym{LALR}(1)
-parsers in C@.  And before Bison version 1.24, Bison-generated
-parsers could be used only in programs that were free software.
-
-The other @acronym{GNU} programming tools, such as the @acronym{GNU} C
-compiler, have never
-had such a requirement.  They could always be used for nonfree
-software.  The reason Bison was different was not due to a special
-policy decision; it resulted from applying the usual General Public
-License to all of the Bison source code.
-
-The output of the Bison utility---the Bison parser file---contains a
-verbatim copy of a sizable piece of Bison, which is the code for the
-parser's implementation.  (The actions from your grammar are inserted
-into this implementation at one point, but most of the rest of the
-implementation is not changed.)  When we applied the @acronym{GPL}
-terms to the skeleton code for the parser's implementation,
-the effect was to restrict the use of Bison output to free software.
-
-We didn't change the terms because of sympathy for people who want to
-make software proprietary.  @strong{Software should be free.}  But we
-concluded that limiting Bison's use to free software was doing little to
-encourage people to make other software free.  So we decided to make the
-practical conditions for using Bison match the practical conditions for
-using the other @acronym{GNU} tools.
-
-This exception applies when Bison is generating code for a parser.
-You can tell whether the exception applies to a Bison output file by
-inspecting the file for text beginning with ``As a special
-exception@dots{}''.  The text spells out the exact terms of the
-exception.
-
-@include gpl.texi
-
-@node Concepts
-@chapter The Concepts of Bison
-
-This chapter introduces many of the basic concepts without which the
-details of Bison will not make sense.  If you do not already know how to
-use Bison or Yacc, we suggest you start by reading this chapter carefully.
-
-@menu
-* Language and Grammar::  Languages and context-free grammars,
-                            as mathematical ideas.
-* Grammar in Bison::  How we represent grammars for Bison's sake.
-* Semantic Values::   Each token or syntactic grouping can have
-                        a semantic value (the value of an integer,
-                        the name of an identifier, etc.).
-* Semantic Actions::  Each rule can have an action containing C code.
-* GLR Parsers::       Writing parsers for general context-free languages.
-* Locations Overview::    Tracking Locations.
-* Bison Parser::      What are Bison's input and output,
-                        how is the output used?
-* Stages::            Stages in writing and running Bison grammars.
-* Grammar Layout::    Overall structure of a Bison grammar file.
-@end menu
-
-@node Language and Grammar
-@section Languages and Context-Free Grammars
-
-@cindex context-free grammar
-@cindex grammar, context-free
-In order for Bison to parse a language, it must be described by a
-@dfn{context-free grammar}.  This means that you specify one or more
-@dfn{syntactic groupings} and give rules for constructing them from their
-parts.  For example, in the C language, one kind of grouping is called an
-`expression'.  One rule for making an expression might be, ``An expression
-can be made of a minus sign and another expression''.  Another would be,
-``An expression can be an integer''.  As you can see, rules are often
-recursive, but there must be at least one rule which leads out of the
-recursion.
-
-@cindex @acronym{BNF}
-@cindex Backus-Naur form
-The most common formal system for presenting such rules for humans to read
-is @dfn{Backus-Naur Form} or ``@acronym{BNF}'', which was developed in
-order to specify the language Algol 60.  Any grammar expressed in
-@acronym{BNF} is a context-free grammar.  The input to Bison is
-essentially machine-readable @acronym{BNF}.
-
-@cindex @acronym{LALR}(1) grammars
-@cindex @acronym{LR}(1) grammars
-There are various important subclasses of context-free grammar.  Although it
-can handle almost all context-free grammars, Bison is optimized for what
-are called @acronym{LALR}(1) grammars.
-In brief, in these grammars, it must be possible to
-tell how to parse any portion of an input string with just a single
-token of look-ahead.  Strictly speaking, that is a description of an
-@acronym{LR}(1) grammar, and @acronym{LALR}(1) involves additional
-restrictions that are
-hard to explain simply; but it is rare in actual practice to find an
-@acronym{LR}(1) grammar that fails to be @acronym{LALR}(1).
-@xref{Mystery Conflicts, ,Mysterious Reduce/Reduce Conflicts}, for
-more information on this.
-
-@cindex @acronym{GLR} parsing
-@cindex generalized @acronym{LR} (@acronym{GLR}) parsing
-@cindex ambiguous grammars
-@cindex nondeterministic parsing
-
-Parsers for @acronym{LALR}(1) grammars are @dfn{deterministic}, meaning
-roughly that the next grammar rule to apply at any point in the input is
-uniquely determined by the preceding input and a fixed, finite portion
-(called a @dfn{look-ahead}) of the remaining input.  A context-free
-grammar can be @dfn{ambiguous}, meaning that there are multiple ways to
-apply the grammar rules to get the same inputs.  Even unambiguous
-grammars can be @dfn{nondeterministic}, meaning that no fixed
-look-ahead always suffices to determine the next grammar rule to apply.
-With the proper declarations, Bison is also able to parse these more
-general context-free grammars, using a technique known as @acronym{GLR}
-parsing (for Generalized @acronym{LR}).  Bison's @acronym{GLR} parsers
-are able to handle any context-free grammar for which the number of
-possible parses of any given string is finite.
-
-@cindex symbols (abstract)
-@cindex token
-@cindex syntactic grouping
-@cindex grouping, syntactic
-In the formal grammatical rules for a language, each kind of syntactic
-unit or grouping is named by a @dfn{symbol}.  Those which are built by
-grouping smaller constructs according to grammatical rules are called
-@dfn{nonterminal symbols}; those which can't be subdivided are called
-@dfn{terminal symbols} or @dfn{token types}.  We call a piece of input
-corresponding to a single terminal symbol a @dfn{token}, and a piece
-corresponding to a single nonterminal symbol a @dfn{grouping}.
-
-We can use the C language as an example of what symbols, terminal and
-nonterminal, mean.  The tokens of C are identifiers, constants (numeric
-and string), and the various keywords, arithmetic operators and
-punctuation marks.  So the terminal symbols of a grammar for C include
-`identifier', `number', `string', plus one symbol for each keyword,
-operator or punctuation mark: `if', `return', `const', `static', `int',
-`char', `plus-sign', `open-brace', `close-brace', `comma' and many more.
-(These tokens can be subdivided into characters, but that is a matter of
-lexicography, not grammar.)
-
-Here is a simple C function subdivided into tokens:
-
-@ifinfo
-@example
-int             /* @r{keyword `int'} */
-square (int x)  /* @r{identifier, open-paren, keyword `int',}
-                   @r{identifier, close-paren} */
-@{               /* @r{open-brace} */
-  return x * x; /* @r{keyword `return', identifier, asterisk,}
-                   @r{identifier, semicolon} */
-@}               /* @r{close-brace} */
-@end example
-@end ifinfo
-@ifnotinfo
-@example
-int             /* @r{keyword `int'} */
-square (int x)  /* @r{identifier, open-paren, keyword `int', identifier, close-paren} */
-@{               /* @r{open-brace} */
-  return x * x; /* @r{keyword `return', identifier, asterisk, identifier, semicolon} */
-@}               /* @r{close-brace} */
-@end example
-@end ifnotinfo
-
-The syntactic groupings of C include the expression, the statement, the
-declaration, and the function definition.  These are represented in the
-grammar of C by nonterminal symbols `expression', `statement',
-`declaration' and `function definition'.  The full grammar uses dozens of
-additional language constructs, each with its own nonterminal symbol, in
-order to express the meanings of these four.  The example above is a
-function definition; it contains one declaration, and one statement.  In
-the statement, each @samp{x} is an expression and so is @samp{x * x}.
-
-Each nonterminal symbol must have grammatical rules showing how it is made
-out of simpler constructs.  For example, one kind of C statement is the
-@code{return} statement; this would be described with a grammar rule which
-reads informally as follows:
-
-@quotation
-A `statement' can be made of a `return' keyword, an `expression' and a
-`semicolon'.
-@end quotation
-
-@noindent
-There would be many other rules for `statement', one for each kind of
-statement in C.
-
-@cindex start symbol
-One nonterminal symbol must be distinguished as the special one which
-defines a complete utterance in the language.  It is called the @dfn{start
-symbol}.  In a compiler, this means a complete input program.  In the C
-language, the nonterminal symbol `sequence of definitions and declarations'
-plays this role.
-
-For example, @samp{1 + 2} is a valid C expression---a valid part of a C
-program---but it is not valid as an @emph{entire} C program.  In the
-context-free grammar of C, this follows from the fact that `expression' is
-not the start symbol.
-
-The Bison parser reads a sequence of tokens as its input, and groups the
-tokens using the grammar rules.  If the input is valid, the end result is
-that the entire token sequence reduces to a single grouping whose symbol is
-the grammar's start symbol.  If we use a grammar for C, the entire input
-must be a `sequence of definitions and declarations'.  If not, the parser
-reports a syntax error.
-
-@node Grammar in Bison
-@section From Formal Rules to Bison Input
-@cindex Bison grammar
-@cindex grammar, Bison
-@cindex formal grammar
-
-A formal grammar is a mathematical construct.  To define the language
-for Bison, you must write a file expressing the grammar in Bison syntax:
-a @dfn{Bison grammar} file.  @xref{Grammar File, ,Bison Grammar Files}.
-
-A nonterminal symbol in the formal grammar is represented in Bison input
-as an identifier, like an identifier in C@.  By convention, it should be
-in lower case, such as @code{expr}, @code{stmt} or @code{declaration}.
-
-The Bison representation for a terminal symbol is also called a @dfn{token
-type}.  Token types as well can be represented as C-like identifiers.  By
-convention, these identifiers should be upper case to distinguish them from
-nonterminals: for example, @code{INTEGER}, @code{IDENTIFIER}, @code{IF} or
-@code{RETURN}.  A terminal symbol that stands for a particular keyword in
-the language should be named after that keyword converted to upper case.
-The terminal symbol @code{error} is reserved for error recovery.
-@xref{Symbols}.
-
-A terminal symbol can also be represented as a character literal, just like
-a C character constant.  You should do this whenever a token is just a
-single character (parenthesis, plus-sign, etc.): use that same character in
-a literal as the terminal symbol for that token.
-
-A third way to represent a terminal symbol is with a C string constant
-containing several characters.  @xref{Symbols}, for more information.
-
-The grammar rules also have an expression in Bison syntax.  For example,
-here is the Bison rule for a C @code{return} statement.  The semicolon in
-quotes is a literal character token, representing part of the C syntax for
-the statement; the naked semicolon, and the colon, are Bison punctuation
-used in every rule.
-
-@example
-stmt:   RETURN expr ';'
-        ;
-@end example
-
-@noindent
-@xref{Rules, ,Syntax of Grammar Rules}.
-
-@node Semantic Values
-@section Semantic Values
-@cindex semantic value
-@cindex value, semantic
-
-A formal grammar selects tokens only by their classifications: for example,
-if a rule mentions the terminal symbol `integer constant', it means that
-@emph{any} integer constant is grammatically valid in that position.  The
-precise value of the constant is irrelevant to how to parse the input: if
-@samp{x+4} is grammatical then @samp{x+1} or @samp{x+3989} is equally
-grammatical.
-
-But the precise value is very important for what the input means once it is
-parsed.  A compiler is useless if it fails to distinguish between 4, 1 and
-3989 as constants in the program!  Therefore, each token in a Bison grammar
-has both a token type and a @dfn{semantic value}.  @xref{Semantics,
-,Defining Language Semantics},
-for details.
-
-The token type is a terminal symbol defined in the grammar, such as
-@code{INTEGER}, @code{IDENTIFIER} or @code{','}.  It tells everything
-you need to know to decide where the token may validly appear and how to
-group it with other tokens.  The grammar rules know nothing about tokens
-except their types.
-
-The semantic value has all the rest of the information about the
-meaning of the token, such as the value of an integer, or the name of an
-identifier.  (A token such as @code{','} which is just punctuation doesn't
-need to have any semantic value.)
-
-For example, an input token might be classified as token type
-@code{INTEGER} and have the semantic value 4.  Another input token might
-have the same token type @code{INTEGER} but value 3989.  When a grammar
-rule says that @code{INTEGER} is allowed, either of these tokens is
-acceptable because each is an @code{INTEGER}.  When the parser accepts the
-token, it keeps track of the token's semantic value.
-
-Each grouping can also have a semantic value as well as its nonterminal
-symbol.  For example, in a calculator, an expression typically has a
-semantic value that is a number.  In a compiler for a programming
-language, an expression typically has a semantic value that is a tree
-structure describing the meaning of the expression.
-
-@node Semantic Actions
-@section Semantic Actions
-@cindex semantic actions
-@cindex actions, semantic
-
-In order to be useful, a program must do more than parse input; it must
-also produce some output based on the input.  In a Bison grammar, a grammar
-rule can have an @dfn{action} made up of C statements.  Each time the
-parser recognizes a match for that rule, the action is executed.
-@xref{Actions}.
-
-Most of the time, the purpose of an action is to compute the semantic value
-of the whole construct from the semantic values of its parts.  For example,
-suppose we have a rule which says an expression can be the sum of two
-expressions.  When the parser recognizes such a sum, each of the
-subexpressions has a semantic value which describes how it was built up.
-The action for this rule should create a similar sort of value for the
-newly recognized larger expression.
-
-For example, here is a rule that says an expression can be the sum of
-two subexpressions:
-
-@example
-expr: expr '+' expr   @{ $$ = $1 + $3; @}
-        ;
-@end example
-
-@noindent
-The action says how to produce the semantic value of the sum expression
-from the values of the two subexpressions.
-
-@node GLR Parsers
-@section Writing @acronym{GLR} Parsers
-@cindex @acronym{GLR} parsing
-@cindex generalized @acronym{LR} (@acronym{GLR}) parsing
-@findex %glr-parser
-@cindex conflicts
-@cindex shift/reduce conflicts
-@cindex reduce/reduce conflicts
-
-In some grammars, Bison's standard
-@acronym{LALR}(1) parsing algorithm cannot decide whether to apply a
-certain grammar rule at a given point.  That is, it may not be able to
-decide (on the basis of the input read so far) which of two possible
-reductions (applications of a grammar rule) applies, or whether to apply
-a reduction or read more of the input and apply a reduction later in the
-input.  These are known respectively as @dfn{reduce/reduce} conflicts
-(@pxref{Reduce/Reduce}), and @dfn{shift/reduce} conflicts
-(@pxref{Shift/Reduce}).
-
-To use a grammar that is not easily modified to be @acronym{LALR}(1), a
-more general parsing algorithm is sometimes necessary.  If you include
-@code{%glr-parser} among the Bison declarations in your file
-(@pxref{Grammar Outline}), the result is a Generalized @acronym{LR}
-(@acronym{GLR}) parser.  These parsers handle Bison grammars that
-contain no unresolved conflicts (i.e., after applying precedence
-declarations) identically to @acronym{LALR}(1) parsers.  However, when
-faced with unresolved shift/reduce and reduce/reduce conflicts,
-@acronym{GLR} parsers use the simple expedient of doing both,
-effectively cloning the parser to follow both possibilities.  Each of
-the resulting parsers can again split, so that at any given time, there
-can be any number of possible parses being explored.  The parsers
-proceed in lockstep; that is, all of them consume (shift) a given input
-symbol before any of them proceed to the next.  Each of the cloned
-parsers eventually meets one of two possible fates: either it runs into
-a parsing error, in which case it simply vanishes, or it merges with
-another parser, because the two of them have reduced the input to an
-identical set of symbols.
-
-During the time that there are multiple parsers, semantic actions are
-recorded, but not performed.  When a parser disappears, its recorded
-semantic actions disappear as well, and are never performed.  When a
-reduction makes two parsers identical, causing them to merge, Bison
-records both sets of semantic actions.  Whenever the last two parsers
-merge, reverting to the single-parser case, Bison resolves all the
-outstanding actions either by precedences given to the grammar rules
-involved, or by performing both actions, and then calling a designated
-user-defined function on the resulting values to produce an arbitrary
-merged result.
-
-@menu
-* Simple GLR Parsers::      Using @acronym{GLR} parsers on unambiguous grammars.
-* Merging GLR Parses::      Using @acronym{GLR} parsers to resolve ambiguities.
-* GLR Semantic Actions::    Deferred semantic actions have special concerns.
-* Compiler Requirements::   @acronym{GLR} parsers require a modern C compiler.
-@end menu
-
-@node Simple GLR Parsers
-@subsection Using @acronym{GLR} on Unambiguous Grammars
-@cindex @acronym{GLR} parsing, unambiguous grammars
-@cindex generalized @acronym{LR} (@acronym{GLR}) parsing, unambiguous grammars
-@findex %glr-parser
-@findex %expect-rr
-@cindex conflicts
-@cindex reduce/reduce conflicts
-@cindex shift/reduce conflicts
-
-In the simplest cases, you can use the @acronym{GLR} algorithm
-to parse grammars that are unambiguous, but fail to be @acronym{LALR}(1).
-Such grammars typically require more than one symbol of look-ahead,
-or (in rare cases) fall into the category of grammars in which the
-@acronym{LALR}(1) algorithm throws away too much information (they are in
-@acronym{LR}(1), but not @acronym{LALR}(1), @ref{Mystery Conflicts}).
-
-Consider a problem that
-arises in the declaration of enumerated and subrange types in the
-programming language Pascal.  Here are some examples:
-
-@example
-type subrange = lo .. hi;
-type enum = (a, b, c);
-@end example
-
-@noindent
-The original language standard allows only numeric
-literals and constant identifiers for the subrange bounds (@samp{lo}
-and @samp{hi}), but Extended Pascal (@acronym{ISO}/@acronym{IEC}
-10206) and many other
-Pascal implementations allow arbitrary expressions there.  This gives
-rise to the following situation, containing a superfluous pair of
-parentheses:
-
-@example
-type subrange = (a) .. b;
-@end example
-
-@noindent
-Compare this to the following declaration of an enumerated
-type with only one value:
-
-@example
-type enum = (a);
-@end example
-
-@noindent
-(These declarations are contrived, but they are syntactically
-valid, and more-complicated cases can come up in practical programs.)
-
-These two declarations look identical until the @samp{..} token.
-With normal @acronym{LALR}(1) one-token look-ahead it is not
-possible to decide between the two forms when the identifier
-@samp{a} is parsed.  It is, however, desirable
-for a parser to decide this, since in the latter case
-@samp{a} must become a new identifier to represent the enumeration
-value, while in the former case @samp{a} must be evaluated with its
-current meaning, which may be a constant or even a function call.
-
-You could parse @samp{(a)} as an ``unspecified identifier in parentheses'',
-to be resolved later, but this typically requires substantial
-contortions in both semantic actions and large parts of the
-grammar, where the parentheses are nested in the recursive rules for
-expressions.
-
-You might think of using the lexer to distinguish between the two
-forms by returning different tokens for currently defined and
-undefined identifiers.  But if these declarations occur in a local
-scope, and @samp{a} is defined in an outer scope, then both forms
-are possible---either locally redefining @samp{a}, or using the
-value of @samp{a} from the outer scope.  So this approach cannot
-work.
-
-A simple solution to this problem is to declare the parser to
-use the @acronym{GLR} algorithm.
-When the @acronym{GLR} parser reaches the critical state, it
-merely splits into two branches and pursues both syntax rules
-simultaneously.  Sooner or later, one of them runs into a parsing
-error.  If there is a @samp{..} token before the next
-@samp{;}, the rule for enumerated types fails since it cannot
-accept @samp{..} anywhere; otherwise, the subrange type rule
-fails since it requires a @samp{..} token.  So one of the branches
-fails silently, and the other one continues normally, performing
-all the intermediate actions that were postponed during the split.
-
-If the input is syntactically incorrect, both branches fail and the parser
-reports a syntax error as usual.
-
-The effect of all this is that the parser seems to ``guess'' the
-correct branch to take, or in other words, it seems to use more
-look-ahead than the underlying @acronym{LALR}(1) algorithm actually allows
-for.  In this example, @acronym{LALR}(2) would suffice, but also some cases
-that are not @acronym{LALR}(@math{k}) for any @math{k} can be handled this way.
-
-In general, a @acronym{GLR} parser can take quadratic or cubic worst-case time,
-and the current Bison parser even takes exponential time and space
-for some grammars.  In practice, this rarely happens, and for many
-grammars it is possible to prove that it cannot happen.
-The present example contains only one conflict between two
-rules, and the type-declaration context containing the conflict
-cannot be nested.  So the number of
-branches that can exist at any time is limited by the constant 2,
-and the parsing time is still linear.
-
-Here is a Bison grammar corresponding to the example above.  It
-parses a vastly simplified form of Pascal type declarations.
-
-@example
-%token TYPE DOTDOT ID
-
-@group
-%left '+' '-'
-%left '*' '/'
-@end group
-
-%%
-
-@group
-type_decl : TYPE ID '=' type ';'
-     ;
-@end group
-
-@group
-type : '(' id_list ')'
-     | expr DOTDOT expr
-     ;
-@end group
-
-@group
-id_list : ID
-     | id_list ',' ID
-     ;
-@end group
-
-@group
-expr : '(' expr ')'
-     | expr '+' expr
-     | expr '-' expr
-     | expr '*' expr
-     | expr '/' expr
-     | ID
-     ;
-@end group
-@end example
-
-When used as a normal @acronym{LALR}(1) grammar, Bison correctly complains
-about one reduce/reduce conflict.  In the conflicting situation the
-parser chooses one of the alternatives, arbitrarily the one
-declared first.  Therefore the following correct input is not
-recognized:
-
-@example
-type t = (a) .. b;
-@end example
-
-The parser can be turned into a @acronym{GLR} parser, while also telling Bison
-to be silent about the one known reduce/reduce conflict, by
-adding these two declarations to the Bison input file (before the first
-@samp{%%}):
-
-@example
-%glr-parser
-%expect-rr 1
-@end example
-
-@noindent
-No change in the grammar itself is required.  Now the
-parser recognizes all valid declarations, according to the
-limited syntax above, transparently.  In fact, the user does not even
-notice when the parser splits.
-
-So here we have a case where we can use the benefits of @acronym{GLR},
-almost without disadvantages.  Even in simple cases like this, however,
-there are at least two potential problems to beware.  First, always
-analyze the conflicts reported by Bison to make sure that @acronym{GLR}
-splitting is only done where it is intended.  A @acronym{GLR} parser
-splitting inadvertently may cause problems less obvious than an
-@acronym{LALR} parser statically choosing the wrong alternative in a
-conflict.  Second, consider interactions with the lexer (@pxref{Semantic
-Tokens}) with great care.  Since a split parser consumes tokens without
-performing any actions during the split, the lexer cannot obtain
-information via parser actions.  Some cases of lexer interactions can be
-eliminated by using @acronym{GLR} to shift the complications from the
-lexer to the parser.  You must check the remaining cases for
-correctness.
-
-In our example, it would be safe for the lexer to return tokens based on
-their current meanings in some symbol table, because no new symbols are
-defined in the middle of a type declaration.  Though it is possible for
-a parser to define the enumeration constants as they are parsed, before
-the type declaration is completed, it actually makes no difference since
-they cannot be used within the same enumerated type declaration.
-
-@node Merging GLR Parses
-@subsection Using @acronym{GLR} to Resolve Ambiguities
-@cindex @acronym{GLR} parsing, ambiguous grammars
-@cindex generalized @acronym{LR} (@acronym{GLR}) parsing, ambiguous grammars
-@findex %dprec
-@findex %merge
-@cindex conflicts
-@cindex reduce/reduce conflicts
-
-Let's consider an example, vastly simplified from a C++ grammar.
-
-@example
-%@{
-  #include <stdio.h>
-  #define YYSTYPE char const *
-  int yylex (void);
-  void yyerror (char const *);
-%@}
-
-%token TYPENAME ID
-
-%right '='
-%left '+'
-
-%glr-parser
-
-%%
-
-prog :
-     | prog stmt   @{ printf ("\n"); @}
-     ;
-
-stmt : expr ';'  %dprec 1
-     | decl      %dprec 2
-     ;
-
-expr : ID               @{ printf ("%s ", $$); @}
-     | TYPENAME '(' expr ')'
-                        @{ printf ("%s <cast> ", $1); @}
-     | expr '+' expr    @{ printf ("+ "); @}
-     | expr '=' expr    @{ printf ("= "); @}
-     ;
-
-decl : TYPENAME declarator ';'
-                        @{ printf ("%s <declare> ", $1); @}
-     | TYPENAME declarator '=' expr ';'
-                        @{ printf ("%s <init-declare> ", $1); @}
-     ;
-
-declarator : ID         @{ printf ("\"%s\" ", $1); @}
-     | '(' declarator ')'
-     ;
-@end example
-
-@noindent
-This models a problematic part of the C++ grammar---the ambiguity between
-certain declarations and statements.  For example,
-
-@example
-T (x) = y+z;
-@end example
-
-@noindent
-parses as either an @code{expr} or a @code{stmt}
-(assuming that @samp{T} is recognized as a @code{TYPENAME} and
-@samp{x} as an @code{ID}).
-Bison detects this as a reduce/reduce conflict between the rules
-@code{expr : ID} and @code{declarator : ID}, which it cannot resolve at the
-time it encounters @code{x} in the example above.  Since this is a
-@acronym{GLR} parser, it therefore splits the problem into two parses, one for
-each choice of resolving the reduce/reduce conflict.
-Unlike the example from the previous section (@pxref{Simple GLR Parsers}),
-however, neither of these parses ``dies,'' because the grammar as it stands is
-ambiguous.  One of the parsers eventually reduces @code{stmt : expr ';'} and
-the other reduces @code{stmt : decl}, after which both parsers are in an
-identical state: they've seen @samp{prog stmt} and have the same unprocessed
-input remaining.  We say that these parses have @dfn{merged.}
-
-At this point, the @acronym{GLR} parser requires a specification in the
-grammar of how to choose between the competing parses.
-In the example above, the two @code{%dprec}
-declarations specify that Bison is to give precedence
-to the parse that interprets the example as a
-@code{decl}, which implies that @code{x} is a declarator.
-The parser therefore prints
-
-@example
-"x" y z + T <init-declare>
-@end example
-
-The @code{%dprec} declarations only come into play when more than one
-parse survives.  Consider a different input string for this parser:
-
-@example
-T (x) + y;
-@end example
-
-@noindent
-This is another example of using @acronym{GLR} to parse an unambiguous
-construct, as shown in the previous section (@pxref{Simple GLR Parsers}).
-Here, there is no ambiguity (this cannot be parsed as a declaration).
-However, at the time the Bison parser encounters @code{x}, it does not
-have enough information to resolve the reduce/reduce conflict (again,
-between @code{x} as an @code{expr} or a @code{declarator}).  In this
-case, no precedence declaration is used.  Again, the parser splits
-into two, one assuming that @code{x} is an @code{expr}, and the other
-assuming @code{x} is a @code{declarator}.  The second of these parsers
-then vanishes when it sees @code{+}, and the parser prints
-
-@example
-x T <cast> y +
-@end example
-
-Suppose that instead of resolving the ambiguity, you wanted to see all
-the possibilities.  For this purpose, you must merge the semantic
-actions of the two possible parsers, rather than choosing one over the
-other.  To do so, you could change the declaration of @code{stmt} as
-follows:
-
-@example
-stmt : expr ';'  %merge <stmtMerge>
-     | decl      %merge <stmtMerge>
-     ;
-@end example
-
-@noindent
-and define the @code{stmtMerge} function as:
-
-@example
-static YYSTYPE
-stmtMerge (YYSTYPE x0, YYSTYPE x1)
-@{
-  printf ("<OR> ");
-  return "";
-@}
-@end example
-
-@noindent
-with an accompanying forward declaration
-in the C declarations at the beginning of the file:
-
-@example
-%@{
-  #define YYSTYPE char const *
-  static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);
-%@}
-@end example
-
-@noindent
-With these declarations, the resulting parser parses the first example
-as both an @code{expr} and a @code{decl}, and prints
-
-@example
-"x" y z + T <init-declare> x T <cast> y z + = <OR>
-@end example
-
-Bison requires that all of the
-productions that participate in any particular merge have identical
-@samp{%merge} clauses.  Otherwise, the ambiguity would be unresolvable,
-and the parser will report an error during any parse that results in
-the offending merge.
-
-@node GLR Semantic Actions
-@subsection GLR Semantic Actions
-
-@cindex deferred semantic actions
-By definition, a deferred semantic action is not performed at the same time as
-the associated reduction.
-This raises caveats for several Bison features you might use in a semantic
-action in a @acronym{GLR} parser.
-
-@vindex yychar
-@cindex @acronym{GLR} parsers and @code{yychar}
-@vindex yylval
-@cindex @acronym{GLR} parsers and @code{yylval}
-@vindex yylloc
-@cindex @acronym{GLR} parsers and @code{yylloc}
-In any semantic action, you can examine @code{yychar} to determine the type of
-the look-ahead token present at the time of the associated reduction.
-After checking that @code{yychar} is not set to @code{YYEMPTY} or @code{YYEOF},
-you can then examine @code{yylval} and @code{yylloc} to determine the
-look-ahead token's semantic value and location, if any.
-In a nondeferred semantic action, you can also modify any of these variables to
-influence syntax analysis.
-@xref{Look-Ahead, ,Look-Ahead Tokens}.
-
-@findex yyclearin
-@cindex @acronym{GLR} parsers and @code{yyclearin}
-In a deferred semantic action, it's too late to influence syntax analysis.
-In this case, @code{yychar}, @code{yylval}, and @code{yylloc} are set to
-shallow copies of the values they had at the time of the associated reduction.
-For this reason alone, modifying them is dangerous.
-Moreover, the result of modifying them is undefined and subject to change with
-future versions of Bison.
-For example, if a semantic action might be deferred, you should never write it
-to invoke @code{yyclearin} (@pxref{Action Features}) or to attempt to free
-memory referenced by @code{yylval}.
-
-@findex YYERROR
-@cindex @acronym{GLR} parsers and @code{YYERROR}
-Another Bison feature requiring special consideration is @code{YYERROR}
-(@pxref{Action Features}), which you can invoke in a semantic action to
-initiate error recovery.
-During deterministic @acronym{GLR} operation, the effect of @code{YYERROR} is
-the same as its effect in an @acronym{LALR}(1) parser.
-In a deferred semantic action, its effect is undefined.
-@c The effect is probably a syntax error at the split point.
-
-Also, see @ref{Location Default Action, ,Default Action for Locations}, which
-describes a special usage of @code{YYLLOC_DEFAULT} in @acronym{GLR} parsers.
-
-@node Compiler Requirements
-@subsection Considerations when Compiling @acronym{GLR} Parsers
-@cindex @code{inline}
-@cindex @acronym{GLR} parsers and @code{inline}
-
-The @acronym{GLR} parsers require a compiler for @acronym{ISO} C89 or
-later.  In addition, they use the @code{inline} keyword, which is not
-C89, but is C99 and is a common extension in pre-C99 compilers.  It is
-up to the user of these parsers to handle
-portability issues.  For instance, if using Autoconf and the Autoconf
-macro @code{AC_C_INLINE}, a mere
-
-@example
-%@{
-  #include <config.h>
-%@}
-@end example
-
-@noindent
-will suffice.  Otherwise, we suggest
-
-@example
-%@{
-  #if __STDC_VERSION__ < 199901 && ! defined __GNUC__ && ! defined inline
-   #define inline
-  #endif
-%@}
-@end example
-
-@node Locations Overview
-@section Locations
-@cindex location
-@cindex textual location
-@cindex location, textual
-
-Many applications, like interpreters or compilers, have to produce verbose
-and useful error messages.  To achieve this, one must be able to keep track of
-the @dfn{textual location}, or @dfn{location}, of each syntactic construct.
-Bison provides a mechanism for handling these locations.
-
-Each token has a semantic value.  In a similar fashion, each token has an
-associated location, but the type of locations is the same for all tokens and
-groupings.  Moreover, the output parser is equipped with a default data
-structure for storing locations (@pxref{Locations}, for more details).
-
-Like semantic values, locations can be reached in actions using a dedicated
-set of constructs.  In the example above, the location of the whole grouping
-is @code{@@$}, while the locations of the subexpressions are @code{@@1} and
-@code{@@3}.
-
-When a rule is matched, a default action is used to compute the semantic value
-of its left hand side (@pxref{Actions}).  In the same way, another default
-action is used for locations.  However, the action for locations is general
-enough for most cases, meaning there is usually no need to describe for each
-rule how @code{@@$} should be formed.  When building a new location for a given
-grouping, the default behavior of the output parser is to take the beginning
-of the first symbol, and the end of the last symbol.
-
-@node Bison Parser
-@section Bison Output: the Parser File
-@cindex Bison parser
-@cindex Bison utility
-@cindex lexical analyzer, purpose
-@cindex parser
-
-When you run Bison, you give it a Bison grammar file as input.  The output
-is a C source file that parses the language described by the grammar.
-This file is called a @dfn{Bison parser}.  Keep in mind that the Bison
-utility and the Bison parser are two distinct programs: the Bison utility
-is a program whose output is the Bison parser that becomes part of your
-program.
-
-The job of the Bison parser is to group tokens into groupings according to
-the grammar rules---for example, to build identifiers and operators into
-expressions.  As it does this, it runs the actions for the grammar rules it
-uses.
-
-The tokens come from a function called the @dfn{lexical analyzer} that
-you must supply in some fashion (such as by writing it in C).  The Bison
-parser calls the lexical analyzer each time it wants a new token.  It
-doesn't know what is ``inside'' the tokens (though their semantic values
-may reflect this).  Typically the lexical analyzer makes the tokens by
-parsing characters of text, but Bison does not depend on this.
-@xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
-
-The Bison parser file is C code which defines a function named
-@code{yyparse} which implements that grammar.  This function does not make
-a complete C program: you must supply some additional functions.  One is
-the lexical analyzer.  Another is an error-reporting function which the
-parser calls to report an error.  In addition, a complete C program must
-start with a function called @code{main}; you have to provide this, and
-arrange for it to call @code{yyparse} or the parser will never run.
-@xref{Interface, ,Parser C-Language Interface}.
-
-Aside from the token type names and the symbols in the actions you
-write, all symbols defined in the Bison parser file itself
-begin with @samp{yy} or @samp{YY}.  This includes interface functions
-such as the lexical analyzer function @code{yylex}, the error reporting
-function @code{yyerror} and the parser function @code{yyparse} itself.
-This also includes numerous identifiers used for internal purposes.
-Therefore, you should avoid using C identifiers starting with @samp{yy}
-or @samp{YY} in the Bison grammar file except for the ones defined in
-this manual.  Also, you should avoid using the C identifiers
-@samp{malloc} and @samp{free} for anything other than their usual
-meanings.
-
-In some cases the Bison parser file includes system headers, and in
-those cases your code should respect the identifiers reserved by those
-headers.  On some non-@acronym{GNU} hosts, @code{<alloca.h>}, @code{<malloc.h>},
-@code{<stddef.h>}, and @code{<stdlib.h>} are included as needed to
-declare memory allocators and related types.  @code{<libintl.h>} is
-included if message translation is in use
-(@pxref{Internationalization}).  Other system headers may
-be included if you define @code{YYDEBUG} to a nonzero value
-(@pxref{Tracing, ,Tracing Your Parser}).
-
-@node Stages
-@section Stages in Using Bison
-@cindex stages in using Bison
-@cindex using Bison
-
-The actual language-design process using Bison, from grammar specification
-to a working compiler or interpreter, has these parts:
-
-@enumerate
-@item
-Formally specify the grammar in a form recognized by Bison
-(@pxref{Grammar File, ,Bison Grammar Files}).  For each grammatical rule
-in the language, describe the action that is to be taken when an
-instance of that rule is recognized.  The action is described by a
-sequence of C statements.
-
-@item
-Write a lexical analyzer to process input and pass tokens to the parser.
-The lexical analyzer may be written by hand in C (@pxref{Lexical, ,The
-Lexical Analyzer Function @code{yylex}}).  It could also be produced
-using Lex, but the use of Lex is not discussed in this manual.
-
-@item
-Write a controlling function that calls the Bison-produced parser.
-
-@item
-Write error-reporting routines.
-@end enumerate
-
-To turn this source code as written into a runnable program, you
-must follow these steps:
-
-@enumerate
-@item
-Run Bison on the grammar to produce the parser.
-
-@item
-Compile the code output by Bison, as well as any other source files.
-
-@item
-Link the object files to produce the finished product.
-@end enumerate
-
-@node Grammar Layout
-@section The Overall Layout of a Bison Grammar
-@cindex grammar file
-@cindex file format
-@cindex format of grammar file
-@cindex layout of Bison grammar
-
-The input file for the Bison utility is a @dfn{Bison grammar file}.  The
-general form of a Bison grammar file is as follows:
-
-@example
-%@{
-@var{Prologue}
-%@}
-
-@var{Bison declarations}
-
-%%
-@var{Grammar rules}
-%%
-@var{Epilogue}
-@end example
-
-@noindent
-The @samp{%%}, @samp{%@{} and @samp{%@}} are punctuation that appears
-in every Bison grammar file to separate the sections.
-
-The prologue may define types and variables used in the actions.  You can
-also use preprocessor commands to define macros used there, and use
-@code{#include} to include header files that do any of these things.
-You need to declare the lexical analyzer @code{yylex} and the error
-printer @code{yyerror} here, along with any other global identifiers
-used by the actions in the grammar rules.
-
-The Bison declarations declare the names of the terminal and nonterminal
-symbols, and may also describe operator precedence and the data types of
-semantic values of various symbols.
-
-The grammar rules define how to construct each nonterminal symbol from its
-parts.
-
-The epilogue can contain any code you want to use.  Often the
-definitions of functions declared in the prologue go here.  In a
-simple program, all the rest of the program can go here.
-
-@node Examples
-@chapter Examples
-@cindex simple examples
-@cindex examples, simple
-
-Now we show and explain three sample programs written using Bison: a
-reverse polish notation calculator, an algebraic (infix) notation
-calculator, and a multi-function calculator.  All three have been tested
-under BSD Unix 4.3; each produces a usable, though limited, interactive
-desk-top calculator.
-
-These examples are simple, but Bison grammars for real programming
-languages are written the same way.  You can copy these examples into a
-source file to try them.
-
-@menu
-* RPN Calc::          Reverse polish notation calculator;
-                        a first example with no operator precedence.
-* Infix Calc::        Infix (algebraic) notation calculator.
-                        Operator precedence is introduced.
-* Simple Error Recovery::  Continuing after syntax errors.
-* Location Tracking Calc:: Demonstrating the use of @@@var{n} and @@$.
-* Multi-function Calc::  Calculator with memory and trig functions.
-                           It uses multiple data-types for semantic values.
-* Exercises::         Ideas for improving the multi-function calculator.
-@end menu
-
-@node RPN Calc
-@section Reverse Polish Notation Calculator
-@cindex reverse polish notation
-@cindex polish notation calculator
-@cindex @code{rpcalc}
-@cindex calculator, simple
-
-The first example is that of a simple double-precision @dfn{reverse polish
-notation} calculator (a calculator using postfix operators).  This example
-provides a good starting point, since operator precedence is not an issue.
-The second example will illustrate how operator precedence is handled.
-
-The source code for this calculator is named @file{rpcalc.y}.  The
-@samp{.y} extension is a convention used for Bison input files.
-
-@menu
-* Decls: Rpcalc Decls.  Prologue (declarations) for rpcalc.
-* Rules: Rpcalc Rules.  Grammar Rules for rpcalc, with explanation.
-* Lexer: Rpcalc Lexer.  The lexical analyzer.
-* Main: Rpcalc Main.    The controlling function.
-* Error: Rpcalc Error.  The error reporting function.
-* Gen: Rpcalc Gen.      Running Bison on the grammar file.
-* Comp: Rpcalc Compile. Run the C compiler on the output code.
-@end menu
-
-@node Rpcalc Decls
-@subsection Declarations for @code{rpcalc}
-
-Here are the C and Bison declarations for the reverse polish notation
-calculator.  As in C, comments are placed between @samp{/*@dots{}*/}.
-
-@example
-/* Reverse polish notation calculator.  */
-
-%@{
-  #define YYSTYPE double
-  #include <math.h>
-  int yylex (void);
-  void yyerror (char const *);
-%@}
-
-%token NUM
-
-%% /* Grammar rules and actions follow.  */
-@end example
-
-The declarations section (@pxref{Prologue, , The prologue}) contains two
-preprocessor directives and two forward declarations.
-
-The @code{#define} directive defines the macro @code{YYSTYPE}, thus
-specifying the C data type for semantic values of both tokens and
-groupings (@pxref{Value Type, ,Data Types of Semantic Values}).  The
-Bison parser will use whatever type @code{YYSTYPE} is defined as; if you
-don't define it, @code{int} is the default.  Because we specify
-@code{double}, each token and each expression has an associated value,
-which is a floating point number.
-
-The @code{#include} directive is used to declare the exponentiation
-function @code{pow}.
-
-The forward declarations for @code{yylex} and @code{yyerror} are
-needed because the C language requires that functions be declared
-before they are used.  These functions will be defined in the
-epilogue, but the parser calls them so they must be declared in the
-prologue.
-
-The second section, Bison declarations, provides information to Bison
-about the token types (@pxref{Bison Declarations, ,The Bison
-Declarations Section}).  Each terminal symbol that is not a
-single-character literal must be declared here.  (Single-character
-literals normally don't need to be declared.)  In this example, all the
-arithmetic operators are designated by single-character literals, so the
-only terminal symbol that needs to be declared is @code{NUM}, the token
-type for numeric constants.
-
-@node Rpcalc Rules
-@subsection Grammar Rules for @code{rpcalc}
-
-Here are the grammar rules for the reverse polish notation calculator.
-
-@example
-input:    /* empty */
-        | input line
-;
-
-line:     '\n'
-        | exp '\n'      @{ printf ("\t%.10g\n", $1); @}
-;
-
-exp:      NUM           @{ $$ = $1;           @}
-        | exp exp '+'   @{ $$ = $1 + $2;      @}
-        | exp exp '-'   @{ $$ = $1 - $2;      @}
-        | exp exp '*'   @{ $$ = $1 * $2;      @}
-        | exp exp '/'   @{ $$ = $1 / $2;      @}
-         /* Exponentiation */
-        | exp exp '^'   @{ $$ = pow ($1, $2); @}
-         /* Unary minus    */
-        | exp 'n'       @{ $$ = -$1;          @}
-;
-%%
-@end example
-
-The groupings of the rpcalc ``language'' defined here are the expression
-(given the name @code{exp}), the line of input (@code{line}), and the
-complete input transcript (@code{input}).  Each of these nonterminal
-symbols has several alternate rules, joined by the vertical bar @samp{|}
-which is read as ``or''.  The following sections explain what these rules
-mean.
-
-The semantics of the language is determined by the actions taken when a
-grouping is recognized.  The actions are the C code that appears inside
-braces.  @xref{Actions}.
-
-You must specify these actions in C, but Bison provides the means for
-passing semantic values between the rules.  In each action, the
-pseudo-variable @code{$$} stands for the semantic value for the grouping
-that the rule is going to construct.  Assigning a value to @code{$$} is the
-main job of most actions.  The semantic values of the components of the
-rule are referred to as @code{$1}, @code{$2}, and so on.
-
-@menu
-* Rpcalc Input::
-* Rpcalc Line::
-* Rpcalc Expr::
-@end menu
-
-@node Rpcalc Input
-@subsubsection Explanation of @code{input}
-
-Consider the definition of @code{input}:
-
-@example
-input:    /* empty */
-        | input line
-;
-@end example
-
-This definition reads as follows: ``A complete input is either an empty
-string, or a complete input followed by an input line''.  Notice that
-``complete input'' is defined in terms of itself.  This definition is said
-to be @dfn{left recursive} since @code{input} appears always as the
-leftmost symbol in the sequence.  @xref{Recursion, ,Recursive Rules}.
-
-The first alternative is empty because there are no symbols between the
-colon and the first @samp{|}; this means that @code{input} can match an
-empty string of input (no tokens).  We write the rules this way because it
-is legitimate to type @kbd{Ctrl-d} right after you start the calculator.
-It's conventional to put an empty alternative first and write the comment
-@samp{/* empty */} in it.
-
-The second alternate rule (@code{input line}) handles all nontrivial input.
-It means, ``After reading any number of lines, read one more line if
-possible.''  The left recursion makes this rule into a loop.  Since the
-first alternative matches empty input, the loop can be executed zero or
-more times.
-
-The parser function @code{yyparse} continues to process input until a
-grammatical error is seen or the lexical analyzer says there are no more
-input tokens; we will arrange for the latter to happen at end-of-input.
-
-@node Rpcalc Line
-@subsubsection Explanation of @code{line}
-
-Now consider the definition of @code{line}:
-
-@example
-line:     '\n'
-        | exp '\n'  @{ printf ("\t%.10g\n", $1); @}
-;
-@end example
-
-The first alternative is a token which is a newline character; this means
-that rpcalc accepts a blank line (and ignores it, since there is no
-action).  The second alternative is an expression followed by a newline.
-This is the alternative that makes rpcalc useful.  The semantic value of
-the @code{exp} grouping is the value of @code{$1} because the @code{exp} in
-question is the first symbol in the alternative.  The action prints this
-value, which is the result of the computation the user asked for.
-
-This action is unusual because it does not assign a value to @code{$$}.  As
-a consequence, the semantic value associated with the @code{line} is
-uninitialized (its value will be unpredictable).  This would be a bug if
-that value were ever used, but we don't use it: once rpcalc has printed the
-value of the user's input line, that value is no longer needed.
-
-@node Rpcalc Expr
-@subsubsection Explanation of @code{expr}
-
-The @code{exp} grouping has several rules, one for each kind of expression.
-The first rule handles the simplest expressions: those that are just numbers.
-The second handles an addition-expression, which looks like two expressions
-followed by a plus-sign.  The third handles subtraction, and so on.
-
-@example
-exp:      NUM
-        | exp exp '+'     @{ $$ = $1 + $2;    @}
-        | exp exp '-'     @{ $$ = $1 - $2;    @}
-        @dots{}
-        ;
-@end example
-
-We have used @samp{|} to join all the rules for @code{exp}, but we could
-equally well have written them separately:
-
-@example
-exp:      NUM ;
-exp:      exp exp '+'     @{ $$ = $1 + $2;    @} ;
-exp:      exp exp '-'     @{ $$ = $1 - $2;    @} ;
-        @dots{}
-@end example
-
-Most of the rules have actions that compute the value of the expression in
-terms of the value of its parts.  For example, in the rule for addition,
-@code{$1} refers to the first component @code{exp} and @code{$2} refers to
-the second one.  The third component, @code{'+'}, has no meaningful
-associated semantic value, but if it had one you could refer to it as
-@code{$3}.  When @code{yyparse} recognizes a sum expression using this
-rule, the sum of the two subexpressions' values is produced as the value of
-the entire expression.  @xref{Actions}.
-
-You don't have to give an action for every rule.  When a rule has no
-action, Bison by default copies the value of @code{$1} into @code{$$}.
-This is what happens in the first rule (the one that uses @code{NUM}).
-
-The formatting shown here is the recommended convention, but Bison does
-not require it.  You can add or change white space as much as you wish.
-For example, this:
-
-@example
-exp   : NUM | exp exp '+' @{$$ = $1 + $2; @} | @dots{} ;
-@end example
-
-@noindent
-means the same thing as this:
-
-@example
-exp:      NUM
-        | exp exp '+'    @{ $$ = $1 + $2; @}
-        | @dots{}
-;
-@end example
-
-@noindent
-The latter, however, is much more readable.
-
-@node Rpcalc Lexer
-@subsection The @code{rpcalc} Lexical Analyzer
-@cindex writing a lexical analyzer
-@cindex lexical analyzer, writing
-
-The lexical analyzer's job is low-level parsing: converting characters
-or sequences of characters into tokens.  The Bison parser gets its
-tokens by calling the lexical analyzer.  @xref{Lexical, ,The Lexical
-Analyzer Function @code{yylex}}.
-
-Only a simple lexical analyzer is needed for the @acronym{RPN}
-calculator.  This
-lexical analyzer skips blanks and tabs, then reads in numbers as
-@code{double} and returns them as @code{NUM} tokens.  Any other character
-that isn't part of a number is a separate token.  Note that the token-code
-for such a single-character token is the character itself.
-
-The return value of the lexical analyzer function is a numeric code which
-represents a token type.  The same text used in Bison rules to stand for
-this token type is also a C expression for the numeric code for the type.
-This works in two ways.  If the token type is a character literal, then its
-numeric code is that of the character; you can use the same
-character literal in the lexical analyzer to express the number.  If the
-token type is an identifier, that identifier is defined by Bison as a C
-macro whose definition is the appropriate number.  In this example,
-therefore, @code{NUM} becomes a macro for @code{yylex} to use.
-
-The semantic value of the token (if it has one) is stored into the
-global variable @code{yylval}, which is where the Bison parser will look
-for it.  (The C data type of @code{yylval} is @code{YYSTYPE}, which was
-defined at the beginning of the grammar; @pxref{Rpcalc Decls,
-,Declarations for @code{rpcalc}}.)
-
-A token type code of zero is returned if the end-of-input is encountered.
-(Bison recognizes any nonpositive value as indicating end-of-input.)
-
-Here is the code for the lexical analyzer:
-
-@example
-@group
-/* The lexical analyzer returns a double floating point
-   number on the stack and the token NUM, or the numeric code
-   of the character read if not a number.  It skips all blanks
-   and tabs, and returns 0 for end-of-input.  */
-
-#include <ctype.h>
-@end group
-
-@group
-int
-yylex (void)
-@{
-  int c;
-
-  /* Skip white space.  */
-  while ((c = getchar ()) == ' ' || c == '\t')
-    ;
-@end group
-@group
-  /* Process numbers.  */
-  if (c == '.' || isdigit (c))
-    @{
-      ungetc (c, stdin);
-      scanf ("%lf", &yylval);
-      return NUM;
-    @}
-@end group
-@group
-  /* Return end-of-input.  */
-  if (c == EOF)
-    return 0;
-  /* Return a single char.  */
-  return c;
-@}
-@end group
-@end example
-
-@node Rpcalc Main
-@subsection The Controlling Function
-@cindex controlling function
-@cindex main function in simple example
-
-In keeping with the spirit of this example, the controlling function is
-kept to the bare minimum.  The only requirement is that it call
-@code{yyparse} to start the process of parsing.
-
-@example
-@group
-int
-main (void)
-@{
-  return yyparse ();
-@}
-@end group
-@end example
-
-@node Rpcalc Error
-@subsection The Error Reporting Routine
-@cindex error reporting routine
-
-When @code{yyparse} detects a syntax error, it calls the error reporting
-function @code{yyerror} to print an error message (usually but not
-always @code{"syntax error"}).  It is up to the programmer to supply
-@code{yyerror} (@pxref{Interface, ,Parser C-Language Interface}), so
-here is the definition we will use:
-
-@example
-@group
-#include <stdio.h>
-
-/* Called by yyparse on error.  */
-void
-yyerror (char const *s)
-@{
-  fprintf (stderr, "%s\n", s);
-@}
-@end group
-@end example
-
-After @code{yyerror} returns, the Bison parser may recover from the error
-and continue parsing if the grammar contains a suitable error rule
-(@pxref{Error Recovery}).  Otherwise, @code{yyparse} returns nonzero.  We
-have not written any error rules in this example, so any invalid input will
-cause the calculator program to exit.  This is not clean behavior for a
-real calculator, but it is adequate for the first example.
-
-@node Rpcalc Gen
-@subsection Running Bison to Make the Parser
-@cindex running Bison (introduction)
-
-Before running Bison to produce a parser, we need to decide how to
-arrange all the source code in one or more source files.  For such a
-simple example, the easiest thing is to put everything in one file.  The
-definitions of @code{yylex}, @code{yyerror} and @code{main} go at the
-end, in the epilogue of the file
-(@pxref{Grammar Layout, ,The Overall Layout of a Bison Grammar}).
-
-For a large project, you would probably have several source files, and use
-@code{make} to arrange to recompile them.
-
-With all the source in a single file, you use the following command to
-convert it into a parser file:
-
-@example
-bison @var{file}.y
-@end example
-
-@noindent
-In this example the file was called @file{rpcalc.y} (for ``Reverse Polish
-@sc{calc}ulator'').  Bison produces a file named @file{@var{file}.tab.c},
-removing the @samp{.y} from the original file name.  The file output by
-Bison contains the source code for @code{yyparse}.  The additional
-functions in the input file (@code{yylex}, @code{yyerror} and @code{main})
-are copied verbatim to the output.
-
-@node Rpcalc Compile
-@subsection Compiling the Parser File
-@cindex compiling the parser
-
-Here is how to compile and run the parser file:
-
-@example
-@group
-# @r{List files in current directory.}
-$ @kbd{ls}
-rpcalc.tab.c  rpcalc.y
-@end group
-
-@group
-# @r{Compile the Bison parser.}
-# @r{@samp{-lm} tells compiler to search math library for @code{pow}.}
-$ @kbd{cc -lm -o rpcalc rpcalc.tab.c}
-@end group
-
-@group
-# @r{List files again.}
-$ @kbd{ls}
-rpcalc  rpcalc.tab.c  rpcalc.y
-@end group
-@end example
-
-The file @file{rpcalc} now contains the executable code.  Here is an
-example session using @code{rpcalc}.
-
-@example
-$ @kbd{rpcalc}
-@kbd{4 9 +}
-13
-@kbd{3 7 + 3 4 5 *+-}
--13
-@kbd{3 7 + 3 4 5 * + - n}              @r{Note the unary minus, @samp{n}}
-13
-@kbd{5 6 / 4 n +}
--3.166666667
-@kbd{3 4 ^}                            @r{Exponentiation}
-81
-@kbd{^D}                               @r{End-of-file indicator}
-$
-@end example
-
-@node Infix Calc
-@section Infix Notation Calculator: @code{calc}
-@cindex infix notation calculator
-@cindex @code{calc}
-@cindex calculator, infix notation
-
-We now modify rpcalc to handle infix operators instead of postfix.  Infix
-notation involves the concept of operator precedence and the need for
-parentheses nested to arbitrary depth.  Here is the Bison code for
-@file{calc.y}, an infix desk-top calculator.
-
-@example
-/* Infix notation calculator.  */
-
-%@{
-  #define YYSTYPE double
-  #include <math.h>
-  #include <stdio.h>
-  int yylex (void);
-  void yyerror (char const *);
-%@}
-
-/* Bison declarations.  */
-%token NUM
-%left '-' '+'
-%left '*' '/'
-%left NEG     /* negation--unary minus */
-%right '^'    /* exponentiation */
-
-%% /* The grammar follows.  */
-input:    /* empty */
-        | input line
-;
-
-line:     '\n'
-        | exp '\n'  @{ printf ("\t%.10g\n", $1); @}
-;
-
-exp:      NUM                @{ $$ = $1;         @}
-        | exp '+' exp        @{ $$ = $1 + $3;    @}
-        | exp '-' exp        @{ $$ = $1 - $3;    @}
-        | exp '*' exp        @{ $$ = $1 * $3;    @}
-        | exp '/' exp        @{ $$ = $1 / $3;    @}
-        | '-' exp  %prec NEG @{ $$ = -$2;        @}
-        | exp '^' exp        @{ $$ = pow ($1, $3); @}
-        | '(' exp ')'        @{ $$ = $2;         @}
-;
-%%
-@end example
-
-@noindent
-The functions @code{yylex}, @code{yyerror} and @code{main} can be the
-same as before.
-
-There are two important new features shown in this code.
-
-In the second section (Bison declarations), @code{%left} declares token
-types and says they are left-associative operators.  The declarations
-@code{%left} and @code{%right} (right associativity) take the place of
-@code{%token} which is used to declare a token type name without
-associativity.  (These tokens are single-character literals, which
-ordinarily don't need to be declared.  We declare them here to specify
-the associativity.)
-
-Operator precedence is determined by the line ordering of the
-declarations; the higher the line number of the declaration (lower on
-the page or screen), the higher the precedence.  Hence, exponentiation
-has the highest precedence, unary minus (@code{NEG}) is next, followed
-by @samp{*} and @samp{/}, and so on.  @xref{Precedence, ,Operator
-Precedence}.
-
-The other important new feature is the @code{%prec} in the grammar
-section for the unary minus operator.  The @code{%prec} simply instructs
-Bison that the rule @samp{| '-' exp} has the same precedence as
-@code{NEG}---in this case the next-to-highest.  @xref{Contextual
-Precedence, ,Context-Dependent Precedence}.
-
-Here is a sample run of @file{calc.y}:
-
-@need 500
-@example
-$ @kbd{calc}
-@kbd{4 + 4.5 - (34/(8*3+-3))}
-6.880952381
-@kbd{-56 + 2}
--54
-@kbd{3 ^ 2}
-9
-@end example
-
-@node Simple Error Recovery
-@section Simple Error Recovery
-@cindex error recovery, simple
-
-Up to this point, this manual has not addressed the issue of @dfn{error
-recovery}---how to continue parsing after the parser detects a syntax
-error.  All we have handled is error reporting with @code{yyerror}.
-Recall that by default @code{yyparse} returns after calling
-@code{yyerror}.  This means that an erroneous input line causes the
-calculator program to exit.  Now we show how to rectify this deficiency.
-
-The Bison language itself includes the reserved word @code{error}, which
-may be included in the grammar rules.  In the example below it has
-been added to one of the alternatives for @code{line}:
-
-@example
-@group
-line:     '\n'
-        | exp '\n'   @{ printf ("\t%.10g\n", $1); @}
-        | error '\n' @{ yyerrok;                  @}
-;
-@end group
-@end example
-
-This addition to the grammar allows for simple error recovery in the
-event of a syntax error.  If an expression that cannot be evaluated is
-read, the error will be recognized by the third rule for @code{line},
-and parsing will continue.  (The @code{yyerror} function is still called
-upon to print its message as well.)  The action executes the statement
-@code{yyerrok}, a macro defined automatically by Bison; its meaning is
-that error recovery is complete (@pxref{Error Recovery}).  Note the
-difference between @code{yyerrok} and @code{yyerror}; neither one is a
-misprint.
-
-This form of error recovery deals with syntax errors.  There are other
-kinds of errors; for example, division by zero, which raises an exception
-signal that is normally fatal.  A real calculator program must handle this
-signal and use @code{longjmp} to return to @code{main} and resume parsing
-input lines; it would also have to discard the rest of the current line of
-input.  We won't discuss this issue further because it is not specific to
-Bison programs.
-
-@node Location Tracking Calc
-@section Location Tracking Calculator: @code{ltcalc}
-@cindex location tracking calculator
-@cindex @code{ltcalc}
-@cindex calculator, location tracking
-
-This example extends the infix notation calculator with location
-tracking.  This feature will be used to improve the error messages.  For
-the sake of clarity, this example is a simple integer calculator, since
-most of the work needed to use locations will be done in the lexical
-analyzer.
-
-@menu
-* Decls: Ltcalc Decls.  Bison and C declarations for ltcalc.
-* Rules: Ltcalc Rules.  Grammar rules for ltcalc, with explanations.
-* Lexer: Ltcalc Lexer.  The lexical analyzer.
-@end menu
-
-@node Ltcalc Decls
-@subsection Declarations for @code{ltcalc}
-
-The C and Bison declarations for the location tracking calculator are
-the same as the declarations for the infix notation calculator.
-
-@example
-/* Location tracking calculator.  */
-
-%@{
-  #define YYSTYPE int
-  #include <math.h>
-  int yylex (void);
-  void yyerror (char const *);
-%@}
-
-/* Bison declarations.  */
-%token NUM
-
-%left '-' '+'
-%left '*' '/'
-%left NEG
-%right '^'
-
-%% /* The grammar follows.  */
-@end example
-
-@noindent
-Note there are no declarations specific to locations.  Defining a data
-type for storing locations is not needed: we will use the type provided
-by default (@pxref{Location Type, ,Data Types of Locations}), which is a
-four member structure with the following integer fields:
-@code{first_line}, @code{first_column}, @code{last_line} and
-@code{last_column}.
-
-@node Ltcalc Rules
-@subsection Grammar Rules for @code{ltcalc}
-
-Whether handling locations or not has no effect on the syntax of your
-language.  Therefore, grammar rules for this example will be very close
-to those of the previous example: we will only modify them to benefit
-from the new information.
-
-Here, we will use locations to report divisions by zero, and locate the
-wrong expressions or subexpressions.
-
-@example
-@group
-input   : /* empty */
-        | input line
-;
-@end group
-
-@group
-line    : '\n'
-        | exp '\n' @{ printf ("%d\n", $1); @}
-;
-@end group
-
-@group
-exp     : NUM           @{ $$ = $1; @}
-        | exp '+' exp   @{ $$ = $1 + $3; @}
-        | exp '-' exp   @{ $$ = $1 - $3; @}
-        | exp '*' exp   @{ $$ = $1 * $3; @}
-@end group
-@group
-        | exp '/' exp
-            @{
-              if ($3)
-                $$ = $1 / $3;
-              else
-                @{
-                  $$ = 1;
-                  fprintf (stderr, "%d.%d-%d.%d: division by zero",
-                           @@3.first_line, @@3.first_column,
-                           @@3.last_line, @@3.last_column);
-                @}
-            @}
-@end group
-@group
-        | '-' exp %preg NEG     @{ $$ = -$2; @}
-        | exp '^' exp           @{ $$ = pow ($1, $3); @}
-        | '(' exp ')'           @{ $$ = $2; @}
-@end group
-@end example
-
-This code shows how to reach locations inside of semantic actions, by
-using the pseudo-variables @code{@@@var{n}} for rule components, and the
-pseudo-variable @code{@@$} for groupings.
-
-We don't need to assign a value to @code{@@$}: the output parser does it
-automatically.  By default, before executing the C code of each action,
-@code{@@$} is set to range from the beginning of @code{@@1} to the end
-of @code{@@@var{n}}, for a rule with @var{n} components.  This behavior
-can be redefined (@pxref{Location Default Action, , Default Action for
-Locations}), and for very specific rules, @code{@@$} can be computed by
-hand.
-
-@node Ltcalc Lexer
-@subsection The @code{ltcalc} Lexical Analyzer.
-
-Until now, we relied on Bison's defaults to enable location
-tracking.  The next step is to rewrite the lexical analyzer, and make it
-able to feed the parser with the token locations, as it already does for
-semantic values.
-
-To this end, we must take into account every single character of the
-input text, to avoid the computed locations of being fuzzy or wrong:
-
-@example
-@group
-int
-yylex (void)
-@{
-  int c;
-@end group
-
-@group
-  /* Skip white space.  */
-  while ((c = getchar ()) == ' ' || c == '\t')
-    ++yylloc.last_column;
-@end group
-
-@group
-  /* Step.  */
-  yylloc.first_line = yylloc.last_line;
-  yylloc.first_column = yylloc.last_column;
-@end group
-
-@group
-  /* Process numbers.  */
-  if (isdigit (c))
-    @{
-      yylval = c - '0';
-      ++yylloc.last_column;
-      while (isdigit (c = getchar ()))
-        @{
-          ++yylloc.last_column;
-          yylval = yylval * 10 + c - '0';
-        @}
-      ungetc (c, stdin);
-      return NUM;
-    @}
-@end group
-
-  /* Return end-of-input.  */
-  if (c == EOF)
-    return 0;
-
-  /* Return a single char, and update location.  */
-  if (c == '\n')
-    @{
-      ++yylloc.last_line;
-      yylloc.last_column = 0;
-    @}
-  else
-    ++yylloc.last_column;
-  return c;
-@}
-@end example
-
-Basically, the lexical analyzer performs the same processing as before:
-it skips blanks and tabs, and reads numbers or single-character tokens.
-In addition, it updates @code{yylloc}, the global variable (of type
-@code{YYLTYPE}) containing the token's location.
-
-Now, each time this function returns a token, the parser has its number
-as well as its semantic value, and its location in the text.  The last
-needed change is to initialize @code{yylloc}, for example in the
-controlling function:
-
-@example
-@group
-int
-main (void)
-@{
-  yylloc.first_line = yylloc.last_line = 1;
-  yylloc.first_column = yylloc.last_column = 0;
-  return yyparse ();
-@}
-@end group
-@end example
-
-Remember that computing locations is not a matter of syntax.  Every
-character must be associated to a location update, whether it is in
-valid input, in comments, in literal strings, and so on.
-
-@node Multi-function Calc
-@section Multi-Function Calculator: @code{mfcalc}
-@cindex multi-function calculator
-@cindex @code{mfcalc}
-@cindex calculator, multi-function
-
-Now that the basics of Bison have been discussed, it is time to move on to
-a more advanced problem.  The above calculators provided only five
-functions, @samp{+}, @samp{-}, @samp{*}, @samp{/} and @samp{^}.  It would
-be nice to have a calculator that provides other mathematical functions such
-as @code{sin}, @code{cos}, etc.
-
-It is easy to add new operators to the infix calculator as long as they are
-only single-character literals.  The lexical analyzer @code{yylex} passes
-back all nonnumeric characters as tokens, so new grammar rules suffice for
-adding a new operator.  But we want something more flexible: built-in
-functions whose syntax has this form:
-
-@example
-@var{function_name} (@var{argument})
-@end example
-
-@noindent
-At the same time, we will add memory to the calculator, by allowing you
-to create named variables, store values in them, and use them later.
-Here is a sample session with the multi-function calculator:
-
-@example
-$ @kbd{mfcalc}
-@kbd{pi = 3.141592653589}
-3.1415926536
-@kbd{sin(pi)}
-0.0000000000
-@kbd{alpha = beta1 = 2.3}
-2.3000000000
-@kbd{alpha}
-2.3000000000
-@kbd{ln(alpha)}
-0.8329091229
-@kbd{exp(ln(beta1))}
-2.3000000000
-$
-@end example
-
-Note that multiple assignment and nested function calls are permitted.
-
-@menu
-* Decl: Mfcalc Decl.      Bison declarations for multi-function calculator.
-* Rules: Mfcalc Rules.    Grammar rules for the calculator.
-* Symtab: Mfcalc Symtab.  Symbol table management subroutines.
-@end menu
-
-@node Mfcalc Decl
-@subsection Declarations for @code{mfcalc}
-
-Here are the C and Bison declarations for the multi-function calculator.
-
-@smallexample
-@group
-%@{
-  #include <math.h>  /* For math functions, cos(), sin(), etc.  */
-  #include "calc.h"  /* Contains definition of `symrec'.  */
-  int yylex (void);
-  void yyerror (char const *);
-%@}
-@end group
-@group
-%union @{
-  double    val;   /* For returning numbers.  */
-  symrec  *tptr;   /* For returning symbol-table pointers.  */
-@}
-@end group
-%token <val>  NUM        /* Simple double precision number.  */
-%token <tptr> VAR FNCT   /* Variable and Function.  */
-%type  <val>  exp
-
-@group
-%right '='
-%left '-' '+'
-%left '*' '/'
-%left NEG     /* negation--unary minus */
-%right '^'    /* exponentiation */
-@end group
-%% /* The grammar follows.  */
-@end smallexample
-
-The above grammar introduces only two new features of the Bison language.
-These features allow semantic values to have various data types
-(@pxref{Multiple Types, ,More Than One Value Type}).
-
-The @code{%union} declaration specifies the entire list of possible types;
-this is instead of defining @code{YYSTYPE}.  The allowable types are now
-double-floats (for @code{exp} and @code{NUM}) and pointers to entries in
-the symbol table.  @xref{Union Decl, ,The Collection of Value Types}.
-
-Since values can now have various types, it is necessary to associate a
-type with each grammar symbol whose semantic value is used.  These symbols
-are @code{NUM}, @code{VAR}, @code{FNCT}, and @code{exp}.  Their
-declarations are augmented with information about their data type (placed
-between angle brackets).
-
-The Bison construct @code{%type} is used for declaring nonterminal
-symbols, just as @code{%token} is used for declaring token types.  We
-have not used @code{%type} before because nonterminal symbols are
-normally declared implicitly by the rules that define them.  But
-@code{exp} must be declared explicitly so we can specify its value type.
-@xref{Type Decl, ,Nonterminal Symbols}.
-
-@node Mfcalc Rules
-@subsection Grammar Rules for @code{mfcalc}
-
-Here are the grammar rules for the multi-function calculator.
-Most of them are copied directly from @code{calc}; three rules,
-those which mention @code{VAR} or @code{FNCT}, are new.
-
-@smallexample
-@group
-input:   /* empty */
-        | input line
-;
-@end group
-
-@group
-line:
-          '\n'
-        | exp '\n'   @{ printf ("\t%.10g\n", $1); @}
-        | error '\n' @{ yyerrok;                  @}
-;
-@end group
-
-@group
-exp:      NUM                @{ $$ = $1;                         @}
-        | VAR                @{ $$ = $1->value.var;              @}
-        | VAR '=' exp        @{ $$ = $3; $1->value.var = $3;     @}
-        | FNCT '(' exp ')'   @{ $$ = (*($1->value.fnctptr))($3); @}
-        | exp '+' exp        @{ $$ = $1 + $3;                    @}
-        | exp '-' exp        @{ $$ = $1 - $3;                    @}
-        | exp '*' exp        @{ $$ = $1 * $3;                    @}
-        | exp '/' exp        @{ $$ = $1 / $3;                    @}
-        | '-' exp  %prec NEG @{ $$ = -$2;                        @}
-        | exp '^' exp        @{ $$ = pow ($1, $3);               @}
-        | '(' exp ')'        @{ $$ = $2;                         @}
-;
-@end group
-/* End of grammar.  */
-%%
-@end smallexample
-
-@node Mfcalc Symtab
-@subsection The @code{mfcalc} Symbol Table
-@cindex symbol table example
-
-The multi-function calculator requires a symbol table to keep track of the
-names and meanings of variables and functions.  This doesn't affect the
-grammar rules (except for the actions) or the Bison declarations, but it
-requires some additional C functions for support.
-
-The symbol table itself consists of a linked list of records.  Its
-definition, which is kept in the header @file{calc.h}, is as follows.  It
-provides for either functions or variables to be placed in the table.
-
-@smallexample
-@group
-/* Function type.  */
-typedef double (*func_t) (double);
-@end group
-
-@group
-/* Data type for links in the chain of symbols.  */
-struct symrec
-@{
-  char *name;  /* name of symbol */
-  int type;    /* type of symbol: either VAR or FNCT */
-  union
-  @{
-    double var;      /* value of a VAR */
-    func_t fnctptr;  /* value of a FNCT */
-  @} value;
-  struct symrec *next;  /* link field */
-@};
-@end group
-
-@group
-typedef struct symrec symrec;
-
-/* The symbol table: a chain of `struct symrec'.  */
-extern symrec *sym_table;
-
-symrec *putsym (char const *, int);
-symrec *getsym (char const *);
-@end group
-@end smallexample
-
-The new version of @code{main} includes a call to @code{init_table}, a
-function that initializes the symbol table.  Here it is, and
-@code{init_table} as well:
-
-@smallexample
-#include <stdio.h>
-
-@group
-/* Called by yyparse on error.  */
-void
-yyerror (char const *s)
-@{
-  printf ("%s\n", s);
-@}
-@end group
-
-@group
-struct init
-@{
-  char const *fname;
-  double (*fnct) (double);
-@};
-@end group
-
-@group
-struct init const arith_fncts[] =
-@{
-  "sin",  sin,
-  "cos",  cos,
-  "atan", atan,
-  "ln",   log,
-  "exp",  exp,
-  "sqrt", sqrt,
-  0, 0
-@};
-@end group
-
-@group
-/* The symbol table: a chain of `struct symrec'.  */
-symrec *sym_table;
-@end group
-
-@group
-/* Put arithmetic functions in table.  */
-void
-init_table (void)
-@{
-  int i;
-  symrec *ptr;
-  for (i = 0; arith_fncts[i].fname != 0; i++)
-    @{
-      ptr = putsym (arith_fncts[i].fname, FNCT);
-      ptr->value.fnctptr = arith_fncts[i].fnct;
-    @}
-@}
-@end group
-
-@group
-int
-main (void)
-@{
-  init_table ();
-  return yyparse ();
-@}
-@end group
-@end smallexample
-
-By simply editing the initialization list and adding the necessary include
-files, you can add additional functions to the calculator.
-
-Two important functions allow look-up and installation of symbols in the
-symbol table.  The function @code{putsym} is passed a name and the type
-(@code{VAR} or @code{FNCT}) of the object to be installed.  The object is
-linked to the front of the list, and a pointer to the object is returned.
-The function @code{getsym} is passed the name of the symbol to look up.  If
-found, a pointer to that symbol is returned; otherwise zero is returned.
-
-@smallexample
-symrec *
-putsym (char const *sym_name, int sym_type)
-@{
-  symrec *ptr;
-  ptr = (symrec *) malloc (sizeof (symrec));
-  ptr->name = (char *) malloc (strlen (sym_name) + 1);
-  strcpy (ptr->name,sym_name);
-  ptr->type = sym_type;
-  ptr->value.var = 0; /* Set value to 0 even if fctn.  */
-  ptr->next = (struct symrec *)sym_table;
-  sym_table = ptr;
-  return ptr;
-@}
-
-symrec *
-getsym (char const *sym_name)
-@{
-  symrec *ptr;
-  for (ptr = sym_table; ptr != (symrec *) 0;
-       ptr = (symrec *)ptr->next)
-    if (strcmp (ptr->name,sym_name) == 0)
-      return ptr;
-  return 0;
-@}
-@end smallexample
-
-The function @code{yylex} must now recognize variables, numeric values, and
-the single-character arithmetic operators.  Strings of alphanumeric
-characters with a leading letter are recognized as either variables or
-functions depending on what the symbol table says about them.
-
-The string is passed to @code{getsym} for look up in the symbol table.  If
-the name appears in the table, a pointer to its location and its type
-(@code{VAR} or @code{FNCT}) is returned to @code{yyparse}.  If it is not
-already in the table, then it is installed as a @code{VAR} using
-@code{putsym}.  Again, a pointer and its type (which must be @code{VAR}) is
-returned to @code{yyparse}.
-
-No change is needed in the handling of numeric values and arithmetic
-operators in @code{yylex}.
-
-@smallexample
-@group
-#include <ctype.h>
-@end group
-
-@group
-int
-yylex (void)
-@{
-  int c;
-
-  /* Ignore white space, get first nonwhite character.  */
-  while ((c = getchar ()) == ' ' || c == '\t');
-
-  if (c == EOF)
-    return 0;
-@end group
-
-@group
-  /* Char starts a number => parse the number.         */
-  if (c == '.' || isdigit (c))
-    @{
-      ungetc (c, stdin);
-      scanf ("%lf", &yylval.val);
-      return NUM;
-    @}
-@end group
-
-@group
-  /* Char starts an identifier => read the name.       */
-  if (isalpha (c))
-    @{
-      symrec *s;
-      static char *symbuf = 0;
-      static int length = 0;
-      int i;
-@end group
-
-@group
-      /* Initially make the buffer long enough
-         for a 40-character symbol name.  */
-      if (length == 0)
-        length = 40, symbuf = (char *)malloc (length + 1);
-
-      i = 0;
-      do
-@end group
-@group
-        @{
-          /* If buffer is full, make it bigger.        */
-          if (i == length)
-            @{
-              length *= 2;
-              symbuf = (char *) realloc (symbuf, length + 1);
-            @}
-          /* Add this character to the buffer.         */
-          symbuf[i++] = c;
-          /* Get another character.                    */
-          c = getchar ();
-        @}
-@end group
-@group
-      while (isalnum (c));
-
-      ungetc (c, stdin);
-      symbuf[i] = '\0';
-@end group
-
-@group
-      s = getsym (symbuf);
-      if (s == 0)
-        s = putsym (symbuf, VAR);
-      yylval.tptr = s;
-      return s->type;
-    @}
-
-  /* Any other character is a token by itself.        */
-  return c;
-@}
-@end group
-@end smallexample
-
-This program is both powerful and flexible.  You may easily add new
-functions, and it is a simple job to modify this code to install
-predefined variables such as @code{pi} or @code{e} as well.
-
-@node Exercises
-@section Exercises
-@cindex exercises
-
-@enumerate
-@item
-Add some new functions from @file{math.h} to the initialization list.
-
-@item
-Add another array that contains constants and their values.  Then
-modify @code{init_table} to add these constants to the symbol table.
-It will be easiest to give the constants type @code{VAR}.
-
-@item
-Make the program report an error if the user refers to an
-uninitialized variable in any way except to store a value in it.
-@end enumerate
-
-@node Grammar File
-@chapter Bison Grammar Files
-
-Bison takes as input a context-free grammar specification and produces a
-C-language function that recognizes correct instances of the grammar.
-
-The Bison grammar input file conventionally has a name ending in @samp{.y}.
-@xref{Invocation, ,Invoking Bison}.
-
-@menu
-* Grammar Outline::   Overall layout of the grammar file.
-* Symbols::           Terminal and nonterminal symbols.
-* Rules::             How to write grammar rules.
-* Recursion::         Writing recursive rules.
-* Semantics::         Semantic values and actions.
-* Locations::         Locations and actions.
-* Declarations::      All kinds of Bison declarations are described here.
-* Multiple Parsers::  Putting more than one Bison parser in one program.
-@end menu
-
-@node Grammar Outline
-@section Outline of a Bison Grammar
-
-A Bison grammar file has four main sections, shown here with the
-appropriate delimiters:
-
-@example
-%@{
-  @var{Prologue}
-%@}
-
-@var{Bison declarations}
-
-%%
-@var{Grammar rules}
-%%
-
-@var{Epilogue}
-@end example
-
-Comments enclosed in @samp{/* @dots{} */} may appear in any of the sections.
-As a @acronym{GNU} extension, @samp{//} introduces a comment that
-continues until end of line.
-
-@menu
-* Prologue::          Syntax and usage of the prologue.
-* Bison Declarations::  Syntax and usage of the Bison declarations section.
-* Grammar Rules::     Syntax and usage of the grammar rules section.
-* Epilogue::          Syntax and usage of the epilogue.
-@end menu
-
-@node Prologue
-@subsection The prologue
-@cindex declarations section
-@cindex Prologue
-@cindex declarations
-
-The @var{Prologue} section contains macro definitions and declarations
-of functions and variables that are used in the actions in the grammar
-rules.  These are copied to the beginning of the parser file so that
-they precede the definition of @code{yyparse}.  You can use
-@samp{#include} to get the declarations from a header file.  If you
-don't need any C declarations, you may omit the @samp{%@{} and
-@samp{%@}} delimiters that bracket this section.
-
-The @var{Prologue} section is terminated by the the first occurrence
-of @samp{%@}} that is outside a comment, a string literal, or a
-character constant.
-
-You may have more than one @var{Prologue} section, intermixed with the
-@var{Bison declarations}.  This allows you to have C and Bison
-declarations that refer to each other.  For example, the @code{%union}
-declaration may use types defined in a header file, and you may wish to
-prototype functions that take arguments of type @code{YYSTYPE}.  This
-can be done with two @var{Prologue} blocks, one before and one after the
-@code{%union} declaration.
-
-@smallexample
-%@{
-  #include <stdio.h>
-  #include "ptypes.h"
-%@}
-
-%union @{
-  long int n;
-  tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
-@}
-
-%@{
-  static void print_token_value (FILE *, int, YYSTYPE);
-  #define YYPRINT(F, N, L) print_token_value (F, N, L)
-%@}
-
-@dots{}
-@end smallexample
-
-@node Bison Declarations
-@subsection The Bison Declarations Section
-@cindex Bison declarations (introduction)
-@cindex declarations, Bison (introduction)
-
-The @var{Bison declarations} section contains declarations that define
-terminal and nonterminal symbols, specify precedence, and so on.
-In some simple grammars you may not need any declarations.
-@xref{Declarations, ,Bison Declarations}.
-
-@node Grammar Rules
-@subsection The Grammar Rules Section
-@cindex grammar rules section
-@cindex rules section for grammar
-
-The @dfn{grammar rules} section contains one or more Bison grammar
-rules, and nothing else.  @xref{Rules, ,Syntax of Grammar Rules}.
-
-There must always be at least one grammar rule, and the first
-@samp{%%} (which precedes the grammar rules) may never be omitted even
-if it is the first thing in the file.
-
-@node Epilogue
-@subsection The epilogue
-@cindex additional C code section
-@cindex epilogue
-@cindex C code, section for additional
-
-The @var{Epilogue} is copied verbatim to the end of the parser file, just as
-the @var{Prologue} is copied to the beginning.  This is the most convenient
-place to put anything that you want to have in the parser file but which need
-not come before the definition of @code{yyparse}.  For example, the
-definitions of @code{yylex} and @code{yyerror} often go here.  Because
-C requires functions to be declared before being used, you often need
-to declare functions like @code{yylex} and @code{yyerror} in the Prologue,
-even if you define them in the Epilogue.
-@xref{Interface, ,Parser C-Language Interface}.
-
-If the last section is empty, you may omit the @samp{%%} that separates it
-from the grammar rules.
-
-The Bison parser itself contains many macros and identifiers whose names
-start with @samp{yy} or @samp{YY}, so it is a good idea to avoid using
-any such names (except those documented in this manual) in the epilogue
-of the grammar file.
-
-@node Symbols
-@section Symbols, Terminal and Nonterminal
-@cindex nonterminal symbol
-@cindex terminal symbol
-@cindex token type
-@cindex symbol
-
-@dfn{Symbols} in Bison grammars represent the grammatical classifications
-of the language.
-
-A @dfn{terminal symbol} (also known as a @dfn{token type}) represents a
-class of syntactically equivalent tokens.  You use the symbol in grammar
-rules to mean that a token in that class is allowed.  The symbol is
-represented in the Bison parser by a numeric code, and the @code{yylex}
-function returns a token type code to indicate what kind of token has
-been read.  You don't need to know what the code value is; you can use
-the symbol to stand for it.
-
-A @dfn{nonterminal symbol} stands for a class of syntactically
-equivalent groupings.  The symbol name is used in writing grammar rules.
-By convention, it should be all lower case.
-
-Symbol names can contain letters, digits (not at the beginning),
-underscores and periods.  Periods make sense only in nonterminals.
-
-There are three ways of writing terminal symbols in the grammar:
-
-@itemize @bullet
-@item
-A @dfn{named token type} is written with an identifier, like an
-identifier in C@.  By convention, it should be all upper case.  Each
-such name must be defined with a Bison declaration such as
-@code{%token}.  @xref{Token Decl, ,Token Type Names}.
-
-@item
-@cindex character token
-@cindex literal token
-@cindex single-character literal
-A @dfn{character token type} (or @dfn{literal character token}) is
-written in the grammar using the same syntax used in C for character
-constants; for example, @code{'+'} is a character token type.  A
-character token type doesn't need to be declared unless you need to
-specify its semantic value data type (@pxref{Value Type, ,Data Types of
-Semantic Values}), associativity, or precedence (@pxref{Precedence,
-,Operator Precedence}).
-
-By convention, a character token type is used only to represent a
-token that consists of that particular character.  Thus, the token
-type @code{'+'} is used to represent the character @samp{+} as a
-token.  Nothing enforces this convention, but if you depart from it,
-your program will confuse other readers.
-
-All the usual escape sequences used in character literals in C can be
-used in Bison as well, but you must not use the null character as a
-character literal because its numeric code, zero, signifies
-end-of-input (@pxref{Calling Convention, ,Calling Convention
-for @code{yylex}}).  Also, unlike standard C, trigraphs have no
-special meaning in Bison character literals, nor is backslash-newline
-allowed.
-
-@item
-@cindex string token
-@cindex literal string token
-@cindex multicharacter literal
-A @dfn{literal string token} is written like a C string constant; for
-example, @code{"<="} is a literal string token.  A literal string token
-doesn't need to be declared unless you need to specify its semantic
-value data type (@pxref{Value Type}), associativity, or precedence
-(@pxref{Precedence}).
-
-You can associate the literal string token with a symbolic name as an
-alias, using the @code{%token} declaration (@pxref{Token Decl, ,Token
-Declarations}).  If you don't do that, the lexical analyzer has to
-retrieve the token number for the literal string token from the
-@code{yytname} table (@pxref{Calling Convention}).
-
-@strong{Warning}: literal string tokens do not work in Yacc.
-
-By convention, a literal string token is used only to represent a token
-that consists of that particular string.  Thus, you should use the token
-type @code{"<="} to represent the string @samp{<=} as a token.  Bison
-does not enforce this convention, but if you depart from it, people who
-read your program will be confused.
-
-All the escape sequences used in string literals in C can be used in
-Bison as well, except that you must not use a null character within a
-string literal.  Also, unlike Standard C, trigraphs have no special
-meaning in Bison string literals, nor is backslash-newline allowed.  A
-literal string token must contain two or more characters; for a token
-containing just one character, use a character token (see above).
-@end itemize
-
-How you choose to write a terminal symbol has no effect on its
-grammatical meaning.  That depends only on where it appears in rules and
-on when the parser function returns that symbol.
-
-The value returned by @code{yylex} is always one of the terminal
-symbols, except that a zero or negative value signifies end-of-input.
-Whichever way you write the token type in the grammar rules, you write
-it the same way in the definition of @code{yylex}.  The numeric code
-for a character token type is simply the positive numeric code of the
-character, so @code{yylex} can use the identical value to generate the
-requisite code, though you may need to convert it to @code{unsigned
-char} to avoid sign-extension on hosts where @code{char} is signed.
-Each named token type becomes a C macro in
-the parser file, so @code{yylex} can use the name to stand for the code.
-(This is why periods don't make sense in terminal symbols.)
-@xref{Calling Convention, ,Calling Convention for @code{yylex}}.
-
-If @code{yylex} is defined in a separate file, you need to arrange for the
-token-type macro definitions to be available there.  Use the @samp{-d}
-option when you run Bison, so that it will write these macro definitions
-into a separate header file @file{@var{name}.tab.h} which you can include
-in the other source files that need it.  @xref{Invocation, ,Invoking Bison}.
-
-If you want to write a grammar that is portable to any Standard C
-host, you must use only nonnull character tokens taken from the basic
-execution character set of Standard C@.  This set consists of the ten
-digits, the 52 lower- and upper-case English letters, and the
-characters in the following C-language string:
-
-@example
-"\a\b\t\n\v\f\r !\"#%&'()*+,-./:;<=>?[\\]^_@{|@}~"
-@end example
-
-The @code{yylex} function and Bison must use a consistent character set
-and encoding for character tokens.  For example, if you run Bison in an
-@acronym{ASCII} environment, but then compile and run the resulting
-program in an environment that uses an incompatible character set like
-@acronym{EBCDIC}, the resulting program may not work because the tables
-generated by Bison will assume @acronym{ASCII} numeric values for
-character tokens.  It is standard practice for software distributions to
-contain C source files that were generated by Bison in an
-@acronym{ASCII} environment, so installers on platforms that are
-incompatible with @acronym{ASCII} must rebuild those files before
-compiling them.
-
-The symbol @code{error} is a terminal symbol reserved for error recovery
-(@pxref{Error Recovery}); you shouldn't use it for any other purpose.
-In particular, @code{yylex} should never return this value.  The default
-value of the error token is 256, unless you explicitly assigned 256 to
-one of your tokens with a @code{%token} declaration.
-
-@node Rules
-@section Syntax of Grammar Rules
-@cindex rule syntax
-@cindex grammar rule syntax
-@cindex syntax of grammar rules
-
-A Bison grammar rule has the following general form:
-
-@example
-@group
-@var{result}: @var{components}@dots{}
-        ;
-@end group
-@end example
-
-@noindent
-where @var{result} is the nonterminal symbol that this rule describes,
-and @var{components} are various terminal and nonterminal symbols that
-are put together by this rule (@pxref{Symbols}).
-
-For example,
-
-@example
-@group
-exp:      exp '+' exp
-        ;
-@end group
-@end example
-
-@noindent
-says that two groupings of type @code{exp}, with a @samp{+} token in between,
-can be combined into a larger grouping of type @code{exp}.
-
-White space in rules is significant only to separate symbols.  You can add
-extra white space as you wish.
-
-Scattered among the components can be @var{actions} that determine
-the semantics of the rule.  An action looks like this:
-
-@example
-@{@var{C statements}@}
-@end example
-
-@noindent
-@cindex braced code
-This is an example of @dfn{braced code}, that is, C code surrounded by
-braces, much like a compound statement in C@.  Braced code can contain
-any sequence of C tokens, so long as its braces are balanced.  Bison
-does not check the braced code for correctness directly; it merely
-copies the code to the output file, where the C compiler can check it.
-
-Within braced code, the balanced-brace count is not affected by braces
-within comments, string literals, or character constants, but it is
-affected by the C digraphs @samp{<%} and @samp{%>} that represent
-braces.  At the top level braced code must be terminated by @samp{@}}
-and not by a digraph.  Bison does not look for trigraphs, so if braced
-code uses trigraphs you should ensure that they do not affect the
-nesting of braces or the boundaries of comments, string literals, or
-character constants.
-
-Usually there is only one action and it follows the components.
-@xref{Actions}.
-
-@findex |
-Multiple rules for the same @var{result} can be written separately or can
-be joined with the vertical-bar character @samp{|} as follows:
-
-@example
-@group
-@var{result}:    @var{rule1-components}@dots{}
-        | @var{rule2-components}@dots{}
-        @dots{}
-        ;
-@end group
-@end example
-
-@noindent
-They are still considered distinct rules even when joined in this way.
-
-If @var{components} in a rule is empty, it means that @var{result} can
-match the empty string.  For example, here is how to define a
-comma-separated sequence of zero or more @code{exp} groupings:
-
-@example
-@group
-expseq:   /* empty */
-        | expseq1
-        ;
-@end group
-
-@group
-expseq1:  exp
-        | expseq1 ',' exp
-        ;
-@end group
-@end example
-
-@noindent
-It is customary to write a comment @samp{/* empty */} in each rule
-with no components.
-
-@node Recursion
-@section Recursive Rules
-@cindex recursive rule
-
-A rule is called @dfn{recursive} when its @var{result} nonterminal
-appears also on its right hand side.  Nearly all Bison grammars need to
-use recursion, because that is the only way to define a sequence of any
-number of a particular thing.  Consider this recursive definition of a
-comma-separated sequence of one or more expressions:
-
-@example
-@group
-expseq1:  exp
-        | expseq1 ',' exp
-        ;
-@end group
-@end example
-
-@cindex left recursion
-@cindex right recursion
-@noindent
-Since the recursive use of @code{expseq1} is the leftmost symbol in the
-right hand side, we call this @dfn{left recursion}.  By contrast, here
-the same construct is defined using @dfn{right recursion}:
-
-@example
-@group
-expseq1:  exp
-        | exp ',' expseq1
-        ;
-@end group
-@end example
-
-@noindent
-Any kind of sequence can be defined using either left recursion or right
-recursion, but you should always use left recursion, because it can
-parse a sequence of any number of elements with bounded stack space.
-Right recursion uses up space on the Bison stack in proportion to the
-number of elements in the sequence, because all the elements must be
-shifted onto the stack before the rule can be applied even once.
-@xref{Algorithm, ,The Bison Parser Algorithm}, for further explanation
-of this.
-
-@cindex mutual recursion
-@dfn{Indirect} or @dfn{mutual} recursion occurs when the result of the
-rule does not appear directly on its right hand side, but does appear
-in rules for other nonterminals which do appear on its right hand
-side.
-
-For example:
-
-@example
-@group
-expr:     primary
-        | primary '+' primary
-        ;
-@end group
-
-@group
-primary:  constant
-        | '(' expr ')'
-        ;
-@end group
-@end example
-
-@noindent
-defines two mutually-recursive nonterminals, since each refers to the
-other.
-
-@node Semantics
-@section Defining Language Semantics
-@cindex defining language semantics
-@cindex language semantics, defining
-
-The grammar rules for a language determine only the syntax.  The semantics
-are determined by the semantic values associated with various tokens and
-groupings, and by the actions taken when various groupings are recognized.
-
-For example, the calculator calculates properly because the value
-associated with each expression is the proper number; it adds properly
-because the action for the grouping @w{@samp{@var{x} + @var{y}}} is to add
-the numbers associated with @var{x} and @var{y}.
-
-@menu
-* Value Type::        Specifying one data type for all semantic values.
-* Multiple Types::    Specifying several alternative data types.
-* Actions::           An action is the semantic definition of a grammar rule.
-* Action Types::      Specifying data types for actions to operate on.
-* Mid-Rule Actions::  Most actions go at the end of a rule.
-                      This says when, why and how to use the exceptional
-                        action in the middle of a rule.
-@end menu
-
-@node Value Type
-@subsection Data Types of Semantic Values
-@cindex semantic value type
-@cindex value type, semantic
-@cindex data types of semantic values
-@cindex default data type
-
-In a simple program it may be sufficient to use the same data type for
-the semantic values of all language constructs.  This was true in the
-@acronym{RPN} and infix calculator examples (@pxref{RPN Calc, ,Reverse Polish
-Notation Calculator}).
-
-Bison's default is to use type @code{int} for all semantic values.  To
-specify some other type, define @code{YYSTYPE} as a macro, like this:
-
-@example
-#define YYSTYPE double
-@end example
-
-@noindent
-@code{YYSTYPE}'s replacement list should be a type name
-that does not contain parentheses or square brackets.
-This macro definition must go in the prologue of the grammar file
-(@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
-
-@node Multiple Types
-@subsection More Than One Value Type
-
-In most programs, you will need different data types for different kinds
-of tokens and groupings.  For example, a numeric constant may need type
-@code{int} or @code{long int}, while a string constant needs type
-@code{char *}, and an identifier might need a pointer to an entry in the
-symbol table.
-
-To use more than one data type for semantic values in one parser, Bison
-requires you to do two things:
-
-@itemize @bullet
-@item
-Specify the entire collection of possible data types, with the
-@code{%union} Bison declaration (@pxref{Union Decl, ,The Collection of
-Value Types}).
-
-@item
-Choose one of those types for each symbol (terminal or nonterminal) for
-which semantic values are used.  This is done for tokens with the
-@code{%token} Bison declaration (@pxref{Token Decl, ,Token Type Names})
-and for groupings with the @code{%type} Bison declaration (@pxref{Type
-Decl, ,Nonterminal Symbols}).
-@end itemize
-
-@node Actions
-@subsection Actions
-@cindex action
-@vindex $$
-@vindex $@var{n}
-
-An action accompanies a syntactic rule and contains C code to be executed
-each time an instance of that rule is recognized.  The task of most actions
-is to compute a semantic value for the grouping built by the rule from the
-semantic values associated with tokens or smaller groupings.
-
-An action consists of braced code containing C statements, and can be
-placed at any position in the rule;
-it is executed at that position.  Most rules have just one action at the
-end of the rule, following all the components.  Actions in the middle of
-a rule are tricky and used only for special purposes (@pxref{Mid-Rule
-Actions, ,Actions in Mid-Rule}).
-
-The C code in an action can refer to the semantic values of the components
-matched by the rule with the construct @code{$@var{n}}, which stands for
-the value of the @var{n}th component.  The semantic value for the grouping
-being constructed is @code{$$}.  Bison translates both of these
-constructs into expressions of the appropriate type when it copies the
-actions into the parser file.  @code{$$} is translated to a modifiable
-lvalue, so it can be assigned to.
-
-Here is a typical example:
-
-@example
-@group
-exp:    @dots{}
-        | exp '+' exp
-            @{ $$ = $1 + $3; @}
-@end group
-@end example
-
-@noindent
-This rule constructs an @code{exp} from two smaller @code{exp} groupings
-connected by a plus-sign token.  In the action, @code{$1} and @code{$3}
-refer to the semantic values of the two component @code{exp} groupings,
-which are the first and third symbols on the right hand side of the rule.
-The sum is stored into @code{$$} so that it becomes the semantic value of
-the addition-expression just recognized by the rule.  If there were a
-useful semantic value associated with the @samp{+} token, it could be
-referred to as @code{$2}.
-
-Note that the vertical-bar character @samp{|} is really a rule
-separator, and actions are attached to a single rule.  This is a
-difference with tools like Flex, for which @samp{|} stands for either
-``or'', or ``the same action as that of the next rule''.  In the
-following example, the action is triggered only when @samp{b} is found:
-
-@example
-@group
-a-or-b: 'a'|'b'   @{ a_or_b_found = 1; @};
-@end group
-@end example
-
-@cindex default action
-If you don't specify an action for a rule, Bison supplies a default:
-@w{@code{$$ = $1}.}  Thus, the value of the first symbol in the rule
-becomes the value of the whole rule.  Of course, the default action is
-valid only if the two data types match.  There is no meaningful default
-action for an empty rule; every empty rule must have an explicit action
-unless the rule's value does not matter.
-
-@code{$@var{n}} with @var{n} zero or negative is allowed for reference
-to tokens and groupings on the stack @emph{before} those that match the
-current rule.  This is a very risky practice, and to use it reliably
-you must be certain of the context in which the rule is applied.  Here
-is a case in which you can use this reliably:
-
-@example
-@group
-foo:      expr bar '+' expr  @{ @dots{} @}
-        | expr bar '-' expr  @{ @dots{} @}
-        ;
-@end group
-
-@group
-bar:      /* empty */
-        @{ previous_expr = $0; @}
-        ;
-@end group
-@end example
-
-As long as @code{bar} is used only in the fashion shown here, @code{$0}
-always refers to the @code{expr} which precedes @code{bar} in the
-definition of @code{foo}.
-
-@vindex yylval
-It is also possible to access the semantic value of the look-ahead token, if
-any, from a semantic action.
-This semantic value is stored in @code{yylval}.
-@xref{Action Features, ,Special Features for Use in Actions}.
-
-@node Action Types
-@subsection Data Types of Values in Actions
-@cindex action data types
-@cindex data types in actions
-
-If you have chosen a single data type for semantic values, the @code{$$}
-and @code{$@var{n}} constructs always have that data type.
-
-If you have used @code{%union} to specify a variety of data types, then you
-must declare a choice among these types for each terminal or nonterminal
-symbol that can have a semantic value.  Then each time you use @code{$$} or
-@code{$@var{n}}, its data type is determined by which symbol it refers to
-in the rule.  In this example,
-
-@example
-@group
-exp:    @dots{}
-        | exp '+' exp
-            @{ $$ = $1 + $3; @}
-@end group
-@end example
-
-@noindent
-@code{$1} and @code{$3} refer to instances of @code{exp}, so they all
-have the data type declared for the nonterminal symbol @code{exp}.  If
-@code{$2} were used, it would have the data type declared for the
-terminal symbol @code{'+'}, whatever that might be.
-
-Alternatively, you can specify the data type when you refer to the value,
-by inserting @samp{<@var{type}>} after the @samp{$} at the beginning of the
-reference.  For example, if you have defined types as shown here:
-
-@example
-@group
-%union @{
-  int itype;
-  double dtype;
-@}
-@end group
-@end example
-
-@noindent
-then you can write @code{$<itype>1} to refer to the first subunit of the
-rule as an integer, or @code{$<dtype>1} to refer to it as a double.
-
-@node Mid-Rule Actions
-@subsection Actions in Mid-Rule
-@cindex actions in mid-rule
-@cindex mid-rule actions
-
-Occasionally it is useful to put an action in the middle of a rule.
-These actions are written just like usual end-of-rule actions, but they
-are executed before the parser even recognizes the following components.
-
-A mid-rule action may refer to the components preceding it using
-@code{$@var{n}}, but it may not refer to subsequent components because
-it is run before they are parsed.
-
-The mid-rule action itself counts as one of the components of the rule.
-This makes a difference when there is another action later in the same rule
-(and usually there is another at the end): you have to count the actions
-along with the symbols when working out which number @var{n} to use in
-@code{$@var{n}}.
-
-The mid-rule action can also have a semantic value.  The action can set
-its value with an assignment to @code{$$}, and actions later in the rule
-can refer to the value using @code{$@var{n}}.  Since there is no symbol
-to name the action, there is no way to declare a data type for the value
-in advance, so you must use the @samp{$<@dots{}>@var{n}} construct to
-specify a data type each time you refer to this value.
-
-There is no way to set the value of the entire rule with a mid-rule
-action, because assignments to @code{$$} do not have that effect.  The
-only way to set the value for the entire rule is with an ordinary action
-at the end of the rule.
-
-Here is an example from a hypothetical compiler, handling a @code{let}
-statement that looks like @samp{let (@var{variable}) @var{statement}} and
-serves to create a variable named @var{variable} temporarily for the
-duration of @var{statement}.  To parse this construct, we must put
-@var{variable} into the symbol table while @var{statement} is parsed, then
-remove it afterward.  Here is how it is done:
-
-@example
-@group
-stmt:   LET '(' var ')'
-                @{ $<context>$ = push_context ();
-                  declare_variable ($3); @}
-        stmt    @{ $$ = $6;
-                  pop_context ($<context>5); @}
-@end group
-@end example
-
-@noindent
-As soon as @samp{let (@var{variable})} has been recognized, the first
-action is run.  It saves a copy of the current semantic context (the
-list of accessible variables) as its semantic value, using alternative
-@code{context} in the data-type union.  Then it calls
-@code{declare_variable} to add the new variable to that list.  Once the
-first action is finished, the embedded statement @code{stmt} can be
-parsed.  Note that the mid-rule action is component number 5, so the
-@samp{stmt} is component number 6.
-
-After the embedded statement is parsed, its semantic value becomes the
-value of the entire @code{let}-statement.  Then the semantic value from the
-earlier action is used to restore the prior list of variables.  This
-removes the temporary @code{let}-variable from the list so that it won't
-appear to exist while the rest of the program is parsed.
-
-@findex %destructor
-@cindex discarded symbols, mid-rule actions
-@cindex error recovery, mid-rule actions
-In the above example, if the parser initiates error recovery (@pxref{Error
-Recovery}) while parsing the tokens in the embedded statement @code{stmt},
-it might discard the previous semantic context @code{$<context>5} without
-restoring it.
-Thus, @code{$<context>5} needs a destructor (@pxref{Destructor Decl, , Freeing
-Discarded Symbols}).
-However, Bison currently provides no means to declare a destructor for a
-mid-rule action's semantic value.
-
-One solution is to bury the mid-rule action inside a nonterminal symbol and to
-declare a destructor for that symbol:
-
-@example
-@group
-%type <context> let
-%destructor @{ pop_context ($$); @} let
-
-%%
-
-stmt:  let stmt
-               @{ $$ = $2;
-                 pop_context ($1); @}
-       ;
-
-let:   LET '(' var ')'
-               @{ $$ = push_context ();
-                 declare_variable ($3); @}
-       ;
-
-@end group
-@end example
-
-@noindent
-Note that the action is now at the end of its rule.
-Any mid-rule action can be converted to an end-of-rule action in this way, and
-this is what Bison actually does to implement mid-rule actions.
-
-Taking action before a rule is completely recognized often leads to
-conflicts since the parser must commit to a parse in order to execute the
-action.  For example, the following two rules, without mid-rule actions,
-can coexist in a working parser because the parser can shift the open-brace
-token and look at what follows before deciding whether there is a
-declaration or not:
-
-@example
-@group
-compound: '@{' declarations statements '@}'
-        | '@{' statements '@}'
-        ;
-@end group
-@end example
-
-@noindent
-But when we add a mid-rule action as follows, the rules become nonfunctional:
-
-@example
-@group
-compound: @{ prepare_for_local_variables (); @}
-          '@{' declarations statements '@}'
-@end group
-@group
-        | '@{' statements '@}'
-        ;
-@end group
-@end example
-
-@noindent
-Now the parser is forced to decide whether to run the mid-rule action
-when it has read no farther than the open-brace.  In other words, it
-must commit to using one rule or the other, without sufficient
-information to do it correctly.  (The open-brace token is what is called
-the @dfn{look-ahead} token at this time, since the parser is still
-deciding what to do about it.  @xref{Look-Ahead, ,Look-Ahead Tokens}.)
-
-You might think that you could correct the problem by putting identical
-actions into the two rules, like this:
-
-@example
-@group
-compound: @{ prepare_for_local_variables (); @}
-          '@{' declarations statements '@}'
-        | @{ prepare_for_local_variables (); @}
-          '@{' statements '@}'
-        ;
-@end group
-@end example
-
-@noindent
-But this does not help, because Bison does not realize that the two actions
-are identical.  (Bison never tries to understand the C code in an action.)
-
-If the grammar is such that a declaration can be distinguished from a
-statement by the first token (which is true in C), then one solution which
-does work is to put the action after the open-brace, like this:
-
-@example
-@group
-compound: '@{' @{ prepare_for_local_variables (); @}
-          declarations statements '@}'
-        | '@{' statements '@}'
-        ;
-@end group
-@end example
-
-@noindent
-Now the first token of the following declaration or statement,
-which would in any case tell Bison which rule to use, can still do so.
-
-Another solution is to bury the action inside a nonterminal symbol which
-serves as a subroutine:
-
-@example
-@group
-subroutine: /* empty */
-          @{ prepare_for_local_variables (); @}
-        ;
-
-@end group
-
-@group
-compound: subroutine
-          '@{' declarations statements '@}'
-        | subroutine
-          '@{' statements '@}'
-        ;
-@end group
-@end example
-
-@noindent
-Now Bison can execute the action in the rule for @code{subroutine} without
-deciding which rule for @code{compound} it will eventually use.
-
-@node Locations
-@section Tracking Locations
-@cindex location
-@cindex textual location
-@cindex location, textual
-
-Though grammar rules and semantic actions are enough to write a fully
-functional parser, it can be useful to process some additional information,
-especially symbol locations.
-
-The way locations are handled is defined by providing a data type, and
-actions to take when rules are matched.
-
-@menu
-* Location Type::               Specifying a data type for locations.
-* Actions and Locations::       Using locations in actions.
-* Location Default Action::     Defining a general way to compute locations.
-@end menu
-
-@node Location Type
-@subsection Data Type of Locations
-@cindex data type of locations
-@cindex default location type
-
-Defining a data type for locations is much simpler than for semantic values,
-since all tokens and groupings always use the same type.
-
-You can specify the type of locations by defining a macro called
-@code{YYLTYPE}, just as you can specify the semantic value type by
-defining @code{YYSTYPE} (@pxref{Value Type}).
-When @code{YYLTYPE} is not defined, Bison uses a default structure type with
-four members:
-
-@example
-typedef struct YYLTYPE
-@{
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
-@} YYLTYPE;
-@end example
-
-@node Actions and Locations
-@subsection Actions and Locations
-@cindex location actions
-@cindex actions, location
-@vindex @@$
-@vindex @@@var{n}
-
-Actions are not only useful for defining language semantics, but also for
-describing the behavior of the output parser with locations.
-
-The most obvious way for building locations of syntactic groupings is very
-similar to the way semantic values are computed.  In a given rule, several
-constructs can be used to access the locations of the elements being matched.
-The location of the @var{n}th component of the right hand side is
-@code{@@@var{n}}, while the location of the left hand side grouping is
-@code{@@$}.
-
-Here is a basic example using the default data type for locations:
-
-@example
-@group
-exp:    @dots{}
-        | exp '/' exp
-            @{
-              @@$.first_column = @@1.first_column;
-              @@$.first_line = @@1.first_line;
-              @@$.last_column = @@3.last_column;
-              @@$.last_line = @@3.last_line;
-              if ($3)
-                $$ = $1 / $3;
-              else
-                @{
-                  $$ = 1;
-                  fprintf (stderr,
-                           "Division by zero, l%d,c%d-l%d,c%d",
-                           @@3.first_line, @@3.first_column,
-                           @@3.last_line, @@3.last_column);
-                @}
-            @}
-@end group
-@end example
-
-As for semantic values, there is a default action for locations that is
-run each time a rule is matched.  It sets the beginning of @code{@@$} to the
-beginning of the first symbol, and the end of @code{@@$} to the end of the
-last symbol.
-
-With this default action, the location tracking can be fully automatic.  The
-example above simply rewrites this way:
-
-@example
-@group
-exp:    @dots{}
-        | exp '/' exp
-            @{
-              if ($3)
-                $$ = $1 / $3;
-              else
-                @{
-                  $$ = 1;
-                  fprintf (stderr,
-                           "Division by zero, l%d,c%d-l%d,c%d",
-                           @@3.first_line, @@3.first_column,
-                           @@3.last_line, @@3.last_column);
-                @}
-            @}
-@end group
-@end example
-
-@vindex yylloc
-It is also possible to access the location of the look-ahead token, if any,
-from a semantic action.
-This location is stored in @code{yylloc}.
-@xref{Action Features, ,Special Features for Use in Actions}.
-
-@node Location Default Action
-@subsection Default Action for Locations
-@vindex YYLLOC_DEFAULT
-@cindex @acronym{GLR} parsers and @code{YYLLOC_DEFAULT}
-
-Actually, actions are not the best place to compute locations.  Since
-locations are much more general than semantic values, there is room in
-the output parser to redefine the default action to take for each
-rule.  The @code{YYLLOC_DEFAULT} macro is invoked each time a rule is
-matched, before the associated action is run.  It is also invoked
-while processing a syntax error, to compute the error's location.
-Before reporting an unresolvable syntactic ambiguity, a @acronym{GLR}
-parser invokes @code{YYLLOC_DEFAULT} recursively to compute the location
-of that ambiguity.
-
-Most of the time, this macro is general enough to suppress location
-dedicated code from semantic actions.
-
-The @code{YYLLOC_DEFAULT} macro takes three parameters.  The first one is
-the location of the grouping (the result of the computation).  When a
-rule is matched, the second parameter identifies locations of
-all right hand side elements of the rule being matched, and the third
-parameter is the size of the rule's right hand side.
-When a @acronym{GLR} parser reports an ambiguity, which of multiple candidate
-right hand sides it passes to @code{YYLLOC_DEFAULT} is undefined.
-When processing a syntax error, the second parameter identifies locations
-of the symbols that were discarded during error processing, and the third
-parameter is the number of discarded symbols.
-
-By default, @code{YYLLOC_DEFAULT} is defined this way:
-
-@smallexample
-@group
-# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
-    do                                                                  \
-      if (N)                                                            \
-        @{                                                               \
-          (Current).first_line   = YYRHSLOC(Rhs, 1).first_line;         \
-          (Current).first_column = YYRHSLOC(Rhs, 1).first_column;       \
-          (Current).last_line    = YYRHSLOC(Rhs, N).last_line;          \
-          (Current).last_column  = YYRHSLOC(Rhs, N).last_column;        \
-        @}                                                               \
-      else                                                              \
-        @{                                                               \
-          (Current).first_line   = (Current).last_line   =              \
-            YYRHSLOC(Rhs, 0).last_line;                                 \
-          (Current).first_column = (Current).last_column =              \
-            YYRHSLOC(Rhs, 0).last_column;                               \
-        @}                                                               \
-    while (0)
-@end group
-@end smallexample
-
-where @code{YYRHSLOC (rhs, k)} is the location of the @var{k}th symbol
-in @var{rhs} when @var{k} is positive, and the location of the symbol
-just before the reduction when @var{k} and @var{n} are both zero.
-
-When defining @code{YYLLOC_DEFAULT}, you should consider that:
-
-@itemize @bullet
-@item
-All arguments are free of side-effects.  However, only the first one (the
-result) should be modified by @code{YYLLOC_DEFAULT}.
-
-@item
-For consistency with semantic actions, valid indexes within the
-right hand side range from 1 to @var{n}.  When @var{n} is zero, only 0 is a
-valid index, and it refers to the symbol just before the reduction.
-During error processing @var{n} is always positive.
-
-@item
-Your macro should parenthesize its arguments, if need be, since the
-actual arguments may not be surrounded by parentheses.  Also, your
-macro should expand to something that can be used as a single
-statement when it is followed by a semicolon.
-@end itemize
-
-@node Declarations
-@section Bison Declarations
-@cindex declarations, Bison
-@cindex Bison declarations
-
-The @dfn{Bison declarations} section of a Bison grammar defines the symbols
-used in formulating the grammar and the data types of semantic values.
-@xref{Symbols}.
-
-All token type names (but not single-character literal tokens such as
-@code{'+'} and @code{'*'}) must be declared.  Nonterminal symbols must be
-declared if you need to specify which data type to use for the semantic
-value (@pxref{Multiple Types, ,More Than One Value Type}).
-
-The first rule in the file also specifies the start symbol, by default.
-If you want some other symbol to be the start symbol, you must declare
-it explicitly (@pxref{Language and Grammar, ,Languages and Context-Free
-Grammars}).
-
-@menu
-* Require Decl::      Requiring a Bison version.
-* Token Decl::        Declaring terminal symbols.
-* Precedence Decl::   Declaring terminals with precedence and associativity.
-* Union Decl::        Declaring the set of all semantic value types.
-* Type Decl::         Declaring the choice of type for a nonterminal symbol.
-* Initial Action Decl::  Code run before parsing starts.
-* Destructor Decl::   Declaring how symbols are freed.
-* Expect Decl::       Suppressing warnings about parsing conflicts.
-* Start Decl::        Specifying the start symbol.
-* Pure Decl::         Requesting a reentrant parser.
-* Decl Summary::      Table of all Bison declarations.
-@end menu
-
-@node Require Decl
-@subsection Require a Version of Bison
-@cindex version requirement
-@cindex requiring a version of Bison
-@findex %require
-
-You may require the minimum version of Bison to process the grammar.  If
-the requirement is not met, @command{bison} exits with an error (exit
-status 63).
-
-@example
-%require "@var{version}"
-@end example
-
-@node Token Decl
-@subsection Token Type Names
-@cindex declaring token type names
-@cindex token type names, declaring
-@cindex declaring literal string tokens
-@findex %token
-
-The basic way to declare a token type name (terminal symbol) is as follows:
-
-@example
-%token @var{name}
-@end example
-
-Bison will convert this into a @code{#define} directive in
-the parser, so that the function @code{yylex} (if it is in this file)
-can use the name @var{name} to stand for this token type's code.
-
-Alternatively, you can use @code{%left}, @code{%right}, or
-@code{%nonassoc} instead of @code{%token}, if you wish to specify
-associativity and precedence.  @xref{Precedence Decl, ,Operator
-Precedence}.
-
-You can explicitly specify the numeric code for a token type by appending
-a decimal or hexadecimal integer value in the field immediately
-following the token name:
-
-@example
-%token NUM 300
-%token XNUM 0x12d // a GNU extension
-@end example
-
-@noindent
-It is generally best, however, to let Bison choose the numeric codes for
-all token types.  Bison will automatically select codes that don't conflict
-with each other or with normal characters.
-
-In the event that the stack type is a union, you must augment the
-@code{%token} or other token declaration to include the data type
-alternative delimited by angle-brackets (@pxref{Multiple Types, ,More
-Than One Value Type}).
-
-For example:
-
-@example
-@group
-%union @{              /* define stack type */
-  double val;
-  symrec *tptr;
-@}
-%token <val> NUM      /* define token NUM and its type */
-@end group
-@end example
-
-You can associate a literal string token with a token type name by
-writing the literal string at the end of a @code{%token}
-declaration which declares the name.  For example:
-
-@example
-%token arrow "=>"
-@end example
-
-@noindent
-For example, a grammar for the C language might specify these names with
-equivalent literal string tokens:
-
-@example
-%token  <operator>  OR      "||"
-%token  <operator>  LE 134  "<="
-%left  OR  "<="
-@end example
-
-@noindent
-Once you equate the literal string and the token name, you can use them
-interchangeably in further declarations or the grammar rules.  The
-@code{yylex} function can use the token name or the literal string to
-obtain the token type code number (@pxref{Calling Convention}).
-
-@node Precedence Decl
-@subsection Operator Precedence
-@cindex precedence declarations
-@cindex declaring operator precedence
-@cindex operator precedence, declaring
-
-Use the @code{%left}, @code{%right} or @code{%nonassoc} declaration to
-declare a token and specify its precedence and associativity, all at
-once.  These are called @dfn{precedence declarations}.
-@xref{Precedence, ,Operator Precedence}, for general information on
-operator precedence.
-
-The syntax of a precedence declaration is the same as that of
-@code{%token}: either
-
-@example
-%left @var{symbols}@dots{}
-@end example
-
-@noindent
-or
-
-@example
-%left <@var{type}> @var{symbols}@dots{}
-@end example
-
-And indeed any of these declarations serves the purposes of @code{%token}.
-But in addition, they specify the associativity and relative precedence for
-all the @var{symbols}:
-
-@itemize @bullet
-@item
-The associativity of an operator @var{op} determines how repeated uses
-of the operator nest: whether @samp{@var{x} @var{op} @var{y} @var{op}
-@var{z}} is parsed by grouping @var{x} with @var{y} first or by
-grouping @var{y} with @var{z} first.  @code{%left} specifies
-left-associativity (grouping @var{x} with @var{y} first) and
-@code{%right} specifies right-associativity (grouping @var{y} with
-@var{z} first).  @code{%nonassoc} specifies no associativity, which
-means that @samp{@var{x} @var{op} @var{y} @var{op} @var{z}} is
-considered a syntax error.
-
-@item
-The precedence of an operator determines how it nests with other operators.
-All the tokens declared in a single precedence declaration have equal
-precedence and nest together according to their associativity.
-When two tokens declared in different precedence declarations associate,
-the one declared later has the higher precedence and is grouped first.
-@end itemize
-
-@node Union Decl
-@subsection The Collection of Value Types
-@cindex declaring value types
-@cindex value types, declaring
-@findex %union
-
-The @code{%union} declaration specifies the entire collection of
-possible data types for semantic values.  The keyword @code{%union} is
-followed by braced code containing the same thing that goes inside a
-@code{union} in C@.
-
-For example:
-
-@example
-@group
-%union @{
-  double val;
-  symrec *tptr;
-@}
-@end group
-@end example
-
-@noindent
-This says that the two alternative types are @code{double} and @code{symrec
-*}.  They are given names @code{val} and @code{tptr}; these names are used
-in the @code{%token} and @code{%type} declarations to pick one of the types
-for a terminal or nonterminal symbol (@pxref{Type Decl, ,Nonterminal Symbols}).
-
-As an extension to @acronym{POSIX}, a tag is allowed after the
-@code{union}.  For example:
-
-@example
-@group
-%union value @{
-  double val;
-  symrec *tptr;
-@}
-@end group
-@end example
-
-@noindent
-specifies the union tag @code{value}, so the corresponding C type is
-@code{union value}.  If you do not specify a tag, it defaults to
-@code{YYSTYPE}.
-
-As another extension to @acronym{POSIX}, you may specify multiple
-@code{%union} declarations; their contents are concatenated.  However,
-only the first @code{%union} declaration can specify a tag.
-
-Note that, unlike making a @code{union} declaration in C, you need not write
-a semicolon after the closing brace.
-
-@node Type Decl
-@subsection Nonterminal Symbols
-@cindex declaring value types, nonterminals
-@cindex value types, nonterminals, declaring
-@findex %type
-
-@noindent
-When you use @code{%union} to specify multiple value types, you must
-declare the value type of each nonterminal symbol for which values are
-used.  This is done with a @code{%type} declaration, like this:
-
-@example
-%type <@var{type}> @var{nonterminal}@dots{}
-@end example
-
-@noindent
-Here @var{nonterminal} is the name of a nonterminal symbol, and
-@var{type} is the name given in the @code{%union} to the alternative
-that you want (@pxref{Union Decl, ,The Collection of Value Types}).  You
-can give any number of nonterminal symbols in the same @code{%type}
-declaration, if they have the same value type.  Use spaces to separate
-the symbol names.
-
-You can also declare the value type of a terminal symbol.  To do this,
-use the same @code{<@var{type}>} construction in a declaration for the
-terminal symbol.  All kinds of token declarations allow
-@code{<@var{type}>}.
-
-@node Initial Action Decl
-@subsection Performing Actions before Parsing
-@findex %initial-action
-
-Sometimes your parser needs to perform some initializations before
-parsing.  The @code{%initial-action} directive allows for such arbitrary
-code.
-
-@deffn {Directive} %initial-action @{ @var{code} @}
-@findex %initial-action
-Declare that the braced @var{code} must be invoked before parsing each time
-@code{yyparse} is called.  The @var{code} may use @code{$$} and
-@code{@@$} --- initial value and location of the look-ahead --- and the
-@code{%parse-param}.
-@end deffn
-
-For instance, if your locations use a file name, you may use
-
-@example
-%parse-param @{ char const *file_name @};
-%initial-action
-@{
-  @@$.initialize (file_name);
-@};
-@end example
-
-
-@node Destructor Decl
-@subsection Freeing Discarded Symbols
-@cindex freeing discarded symbols
-@findex %destructor
-
-During error recovery (@pxref{Error Recovery}), symbols already pushed
-on the stack and tokens coming from the rest of the file are discarded
-until the parser falls on its feet.  If the parser runs out of memory,
-or if it returns via @code{YYABORT} or @code{YYACCEPT}, all the
-symbols on the stack must be discarded.  Even if the parser succeeds, it
-must discard the start symbol.
-
-When discarded symbols convey heap based information, this memory is
-lost.  While this behavior can be tolerable for batch parsers, such as
-in traditional compilers, it is unacceptable for programs like shells or
-protocol implementations that may parse and execute indefinitely.
-
-The @code{%destructor} directive defines code that is called when a
-symbol is automatically discarded.
-
-@deffn {Directive} %destructor @{ @var{code} @} @var{symbols}
-@findex %destructor
-Invoke the braced @var{code} whenever the parser discards one of the
-@var{symbols}.
-Within @var{code}, @code{$$} designates the semantic value associated
-with the discarded symbol.  The additional parser parameters are also
-available (@pxref{Parser Function, , The Parser Function
-@code{yyparse}}).
-@end deffn
-
-For instance:
-
-@smallexample
-%union
-@{
-  char *string;
-@}
-%token <string> STRING
-%type  <string> string
-%destructor @{ free ($$); @} STRING string
-@end smallexample
-
-@noindent
-guarantees that when a @code{STRING} or a @code{string} is discarded,
-its associated memory will be freed.
-
-@sp 1
-
-@cindex discarded symbols
-@dfn{Discarded symbols} are the following:
-
-@itemize
-@item
-stacked symbols popped during the first phase of error recovery,
-@item
-incoming terminals during the second phase of error recovery,
-@item
-the current look-ahead and the entire stack (except the current
-right-hand side symbols) when the parser returns immediately, and
-@item
-the start symbol, when the parser succeeds.
-@end itemize
-
-The parser can @dfn{return immediately} because of an explicit call to
-@code{YYABORT} or @code{YYACCEPT}, or failed error recovery, or memory
-exhaustion.
-
-Right-hand size symbols of a rule that explicitly triggers a syntax
-error via @code{YYERROR} are not discarded automatically.  As a rule
-of thumb, destructors are invoked only when user actions cannot manage
-the memory.
-
-@node Expect Decl
-@subsection Suppressing Conflict Warnings
-@cindex suppressing conflict warnings
-@cindex preventing warnings about conflicts
-@cindex warnings, preventing
-@cindex conflicts, suppressing warnings of
-@findex %expect
-@findex %expect-rr
-
-Bison normally warns if there are any conflicts in the grammar
-(@pxref{Shift/Reduce, ,Shift/Reduce Conflicts}), but most real grammars
-have harmless shift/reduce conflicts which are resolved in a predictable
-way and would be difficult to eliminate.  It is desirable to suppress
-the warning about these conflicts unless the number of conflicts
-changes.  You can do this with the @code{%expect} declaration.
-
-The declaration looks like this:
-
-@example
-%expect @var{n}
-@end example
-
-Here @var{n} is a decimal integer.  The declaration says there should
-be @var{n} shift/reduce conflicts and no reduce/reduce conflicts.
-Bison reports an error if the number of shift/reduce conflicts differs
-from @var{n}, or if there are any reduce/reduce conflicts.
-
-For normal @acronym{LALR}(1) parsers, reduce/reduce conflicts are more
-serious, and should be eliminated entirely.  Bison will always report
-reduce/reduce conflicts for these parsers.  With @acronym{GLR}
-parsers, however, both kinds of conflicts are routine; otherwise,
-there would be no need to use @acronym{GLR} parsing.  Therefore, it is
-also possible to specify an expected number of reduce/reduce conflicts
-in @acronym{GLR} parsers, using the declaration:
-
-@example
-%expect-rr @var{n}
-@end example
-
-In general, using @code{%expect} involves these steps:
-
-@itemize @bullet
-@item
-Compile your grammar without @code{%expect}.  Use the @samp{-v} option
-to get a verbose list of where the conflicts occur.  Bison will also
-print the number of conflicts.
-
-@item
-Check each of the conflicts to make sure that Bison's default
-resolution is what you really want.  If not, rewrite the grammar and
-go back to the beginning.
-
-@item
-Add an @code{%expect} declaration, copying the number @var{n} from the
-number which Bison printed.  With @acronym{GLR} parsers, add an
-@code{%expect-rr} declaration as well.
-@end itemize
-
-Now Bison will warn you if you introduce an unexpected conflict, but
-will keep silent otherwise.
-
-@node Start Decl
-@subsection The Start-Symbol
-@cindex declaring the start symbol
-@cindex start symbol, declaring
-@cindex default start symbol
-@findex %start
-
-Bison assumes by default that the start symbol for the grammar is the first
-nonterminal specified in the grammar specification section.  The programmer
-may override this restriction with the @code{%start} declaration as follows:
-
-@example
-%start @var{symbol}
-@end example
-
-@node Pure Decl
-@subsection A Pure (Reentrant) Parser
-@cindex reentrant parser
-@cindex pure parser
-@findex %pure-parser
-
-A @dfn{reentrant} program is one which does not alter in the course of
-execution; in other words, it consists entirely of @dfn{pure} (read-only)
-code.  Reentrancy is important whenever asynchronous execution is possible;
-for example, a nonreentrant program may not be safe to call from a signal
-handler.  In systems with multiple threads of control, a nonreentrant
-program must be called only within interlocks.
-
-Normally, Bison generates a parser which is not reentrant.  This is
-suitable for most uses, and it permits compatibility with Yacc.  (The
-standard Yacc interfaces are inherently nonreentrant, because they use
-statically allocated variables for communication with @code{yylex},
-including @code{yylval} and @code{yylloc}.)
-
-Alternatively, you can generate a pure, reentrant parser.  The Bison
-declaration @code{%pure-parser} says that you want the parser to be
-reentrant.  It looks like this:
-
-@example
-%pure-parser
-@end example
-
-The result is that the communication variables @code{yylval} and
-@code{yylloc} become local variables in @code{yyparse}, and a different
-calling convention is used for the lexical analyzer function
-@code{yylex}.  @xref{Pure Calling, ,Calling Conventions for Pure
-Parsers}, for the details of this.  The variable @code{yynerrs} also
-becomes local in @code{yyparse} (@pxref{Error Reporting, ,The Error
-Reporting Function @code{yyerror}}).  The convention for calling
-@code{yyparse} itself is unchanged.
-
-Whether the parser is pure has nothing to do with the grammar rules.
-You can generate either a pure parser or a nonreentrant parser from any
-valid grammar.
-
-@node Decl Summary
-@subsection Bison Declaration Summary
-@cindex Bison declaration summary
-@cindex declaration summary
-@cindex summary, Bison declaration
-
-Here is a summary of the declarations used to define a grammar:
-
-@deffn {Directive} %union
-Declare the collection of data types that semantic values may have
-(@pxref{Union Decl, ,The Collection of Value Types}).
-@end deffn
-
-@deffn {Directive} %token
-Declare a terminal symbol (token type name) with no precedence
-or associativity specified (@pxref{Token Decl, ,Token Type Names}).
-@end deffn
-
-@deffn {Directive} %right
-Declare a terminal symbol (token type name) that is right-associative
-(@pxref{Precedence Decl, ,Operator Precedence}).
-@end deffn
-
-@deffn {Directive} %left
-Declare a terminal symbol (token type name) that is left-associative
-(@pxref{Precedence Decl, ,Operator Precedence}).
-@end deffn
-
-@deffn {Directive} %nonassoc
-Declare a terminal symbol (token type name) that is nonassociative
-(@pxref{Precedence Decl, ,Operator Precedence}).
-Using it in a way that would be associative is a syntax error.
-@end deffn
-
-@ifset defaultprec
-@deffn {Directive} %default-prec
-Assign a precedence to rules lacking an explicit @code{%prec} modifier
-(@pxref{Contextual Precedence, ,Context-Dependent Precedence}).
-@end deffn
-@end ifset
-
-@deffn {Directive} %type
-Declare the type of semantic values for a nonterminal symbol
-(@pxref{Type Decl, ,Nonterminal Symbols}).
-@end deffn
-
-@deffn {Directive} %start
-Specify the grammar's start symbol (@pxref{Start Decl, ,The
-Start-Symbol}).
-@end deffn
-
-@deffn {Directive} %expect
-Declare the expected number of shift-reduce conflicts
-(@pxref{Expect Decl, ,Suppressing Conflict Warnings}).
-@end deffn
-
-
-@sp 1
-@noindent
-In order to change the behavior of @command{bison}, use the following
-directives:
-
-@deffn {Directive} %debug
-In the parser file, define the macro @code{YYDEBUG} to 1 if it is not
-already defined, so that the debugging facilities are compiled.
-@end deffn
-@xref{Tracing, ,Tracing Your Parser}.
-
-@deffn {Directive} %defines
-Write a header file containing macro definitions for the token type
-names defined in the grammar as well as a few other declarations.
-If the parser output file is named @file{@var{name}.c} then this file
-is named @file{@var{name}.h}.
-
-Unless @code{YYSTYPE} is already defined as a macro, the output header
-declares @code{YYSTYPE}.  Therefore, if you are using a @code{%union}
-(@pxref{Multiple Types, ,More Than One Value Type}) with components that
-require other definitions, or if you have defined a @code{YYSTYPE} macro
-(@pxref{Value Type, ,Data Types of Semantic Values}), you need to
-arrange for these definitions to be propagated to all modules, e.g., by
-putting them in a prerequisite header that is included both by your
-parser and by any other module that needs @code{YYSTYPE}.
-
-Unless your parser is pure, the output header declares @code{yylval}
-as an external variable.  @xref{Pure Decl, ,A Pure (Reentrant)
-Parser}.
-
-If you have also used locations, the output header declares
-@code{YYLTYPE} and @code{yylloc} using a protocol similar to that of
-@code{YYSTYPE} and @code{yylval}.  @xref{Locations, ,Tracking
-Locations}.
-
-This output file is normally essential if you wish to put the definition
-of @code{yylex} in a separate source file, because @code{yylex}
-typically needs to be able to refer to the above-mentioned declarations
-and to the token type codes.  @xref{Token Values, ,Semantic Values of
-Tokens}.
-@end deffn
-
-@deffn {Directive} %destructor
-Specify how the parser should reclaim the memory associated to
-discarded symbols.  @xref{Destructor Decl, , Freeing Discarded Symbols}.
-@end deffn
-
-@deffn {Directive} %file-prefix="@var{prefix}"
-Specify a prefix to use for all Bison output file names.  The names are
-chosen as if the input file were named @file{@var{prefix}.y}.
-@end deffn
-
-@deffn {Directive} %locations
-Generate the code processing the locations (@pxref{Action Features,
-,Special Features for Use in Actions}).  This mode is enabled as soon as
-the grammar uses the special @samp{@@@var{n}} tokens, but if your
-grammar does not use it, using @samp{%locations} allows for more
-accurate syntax error messages.
-@end deffn
-
-@deffn {Directive} %name-prefix="@var{prefix}"
-Rename the external symbols used in the parser so that they start with
-@var{prefix} instead of @samp{yy}.  The precise list of symbols renamed
-in C parsers
-is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs},
-@code{yylval}, @code{yychar}, @code{yydebug}, and
-(if locations are used) @code{yylloc}.  For example, if you use
-@samp{%name-prefix="c_"}, the names become @code{c_parse}, @code{c_lex},
-and so on.  In C++ parsers, it is only the surrounding namespace which is
-named @var{prefix} instead of @samp{yy}.
-@xref{Multiple Parsers, ,Multiple Parsers in the Same Program}.
-@end deffn
-
-@ifset defaultprec
-@deffn {Directive} %no-default-prec
-Do not assign a precedence to rules lacking an explicit @code{%prec}
-modifier (@pxref{Contextual Precedence, ,Context-Dependent
-Precedence}).
-@end deffn
-@end ifset
-
-@deffn {Directive} %no-parser
-Do not include any C code in the parser file; generate tables only.  The
-parser file contains just @code{#define} directives and static variable
-declarations.
-
-This option also tells Bison to write the C code for the grammar actions
-into a file named @file{@var{file}.act}, in the form of a
-brace-surrounded body fit for a @code{switch} statement.
-@end deffn
-
-@deffn {Directive} %no-lines
-Don't generate any @code{#line} preprocessor commands in the parser
-file.  Ordinarily Bison writes these commands in the parser file so that
-the C compiler and debuggers will associate errors and object code with
-your source file (the grammar file).  This directive causes them to
-associate errors with the parser file, treating it an independent source
-file in its own right.
-@end deffn
-
-@deffn {Directive} %output="@var{file}"
-Specify @var{file} for the parser file.
-@end deffn
-
-@deffn {Directive} %pure-parser
-Request a pure (reentrant) parser program (@pxref{Pure Decl, ,A Pure
-(Reentrant) Parser}).
-@end deffn
-
-@deffn {Directive} %require "@var{version}"
-Require version @var{version} or higher of Bison.  @xref{Require Decl, ,
-Require a Version of Bison}.
-@end deffn
-
-@deffn {Directive} %token-table
-Generate an array of token names in the parser file.  The name of the
-array is @code{yytname}; @code{yytname[@var{i}]} is the name of the
-token whose internal Bison token code number is @var{i}.  The first
-three elements of @code{yytname} correspond to the predefined tokens
-@code{"$end"},
-@code{"error"}, and @code{"$undefined"}; after these come the symbols
-defined in the grammar file.
-
-The name in the table includes all the characters needed to represent
-the token in Bison.  For single-character literals and literal
-strings, this includes the surrounding quoting characters and any
-escape sequences.  For example, the Bison single-character literal
-@code{'+'} corresponds to a three-character name, represented in C as
-@code{"'+'"}; and the Bison two-character literal string @code{"\\/"}
-corresponds to a five-character name, represented in C as
-@code{"\"\\\\/\""}.
-
-When you specify @code{%token-table}, Bison also generates macro
-definitions for macros @code{YYNTOKENS}, @code{YYNNTS}, and
-@code{YYNRULES}, and @code{YYNSTATES}:
-
-@table @code
-@item YYNTOKENS
-The highest token number, plus one.
-@item YYNNTS
-The number of nonterminal symbols.
-@item YYNRULES
-The number of grammar rules,
-@item YYNSTATES
-The number of parser states (@pxref{Parser States}).
-@end table
-@end deffn
-
-@deffn {Directive} %verbose
-Write an extra output file containing verbose descriptions of the
-parser states and what is done for each type of look-ahead token in
-that state.  @xref{Understanding, , Understanding Your Parser}, for more
-information.
-@end deffn
-
-@deffn {Directive} %yacc
-Pretend the option @option{--yacc} was given, i.e., imitate Yacc,
-including its naming conventions.  @xref{Bison Options}, for more.
-@end deffn
-
-
-@node Multiple Parsers
-@section Multiple Parsers in the Same Program
-
-Most programs that use Bison parse only one language and therefore contain
-only one Bison parser.  But what if you want to parse more than one
-language with the same program?  Then you need to avoid a name conflict
-between different definitions of @code{yyparse}, @code{yylval}, and so on.
-
-The easy way to do this is to use the option @samp{-p @var{prefix}}
-(@pxref{Invocation, ,Invoking Bison}).  This renames the interface
-functions and variables of the Bison parser to start with @var{prefix}
-instead of @samp{yy}.  You can use this to give each parser distinct
-names that do not conflict.
-
-The precise list of symbols renamed is @code{yyparse}, @code{yylex},
-@code{yyerror}, @code{yynerrs}, @code{yylval}, @code{yylloc},
-@code{yychar} and @code{yydebug}.  For example, if you use @samp{-p c},
-the names become @code{cparse}, @code{clex}, and so on.
-
-@strong{All the other variables and macros associated with Bison are not
-renamed.} These others are not global; there is no conflict if the same
-name is used in different parsers.  For example, @code{YYSTYPE} is not
-renamed, but defining this in different ways in different parsers causes
-no trouble (@pxref{Value Type, ,Data Types of Semantic Values}).
-
-The @samp{-p} option works by adding macro definitions to the beginning
-of the parser source file, defining @code{yyparse} as
-@code{@var{prefix}parse}, and so on.  This effectively substitutes one
-name for the other in the entire parser file.
-
-@node Interface
-@chapter Parser C-Language Interface
-@cindex C-language interface
-@cindex interface
-
-The Bison parser is actually a C function named @code{yyparse}.  Here we
-describe the interface conventions of @code{yyparse} and the other
-functions that it needs to use.
-
-Keep in mind that the parser uses many C identifiers starting with
-@samp{yy} and @samp{YY} for internal purposes.  If you use such an
-identifier (aside from those in this manual) in an action or in epilogue
-in the grammar file, you are likely to run into trouble.
-
-@menu
-* Parser Function::   How to call @code{yyparse} and what it returns.
-* Lexical::           You must supply a function @code{yylex}
-                        which reads tokens.
-* Error Reporting::   You must supply a function @code{yyerror}.
-* Action Features::   Special features for use in actions.
-* Internationalization::  How to let the parser speak in the user's
-                        native language.
-@end menu
-
-@node Parser Function
-@section The Parser Function @code{yyparse}
-@findex yyparse
-
-You call the function @code{yyparse} to cause parsing to occur.  This
-function reads tokens, executes actions, and ultimately returns when it
-encounters end-of-input or an unrecoverable syntax error.  You can also
-write an action which directs @code{yyparse} to return immediately
-without reading further.
-
-
-@deftypefun int yyparse (void)
-The value returned by @code{yyparse} is 0 if parsing was successful (return
-is due to end-of-input).
-
-The value is 1 if parsing failed because of invalid input, i.e., input
-that contains a syntax error or that causes @code{YYABORT} to be
-invoked.
-
-The value is 2 if parsing failed due to memory exhaustion.
-@end deftypefun
-
-In an action, you can cause immediate return from @code{yyparse} by using
-these macros:
-
-@defmac YYACCEPT
-@findex YYACCEPT
-Return immediately with value 0 (to report success).
-@end defmac
-
-@defmac YYABORT
-@findex YYABORT
-Return immediately with value 1 (to report failure).
-@end defmac
-
-If you use a reentrant parser, you can optionally pass additional
-parameter information to it in a reentrant way.  To do so, use the
-declaration @code{%parse-param}:
-
-@deffn {Directive} %parse-param @{@var{argument-declaration}@}
-@findex %parse-param
-Declare that an argument declared by the braced-code
-@var{argument-declaration} is an additional @code{yyparse} argument.
-The @var{argument-declaration} is used when declaring
-functions or prototypes.  The last identifier in
-@var{argument-declaration} must be the argument name.
-@end deffn
-
-Here's an example.  Write this in the parser:
-
-@example
-%parse-param @{int *nastiness@}
-%parse-param @{int *randomness@}
-@end example
-
-@noindent
-Then call the parser like this:
-
-@example
-@{
-  int nastiness, randomness;
-  @dots{}  /* @r{Store proper data in @code{nastiness} and @code{randomness}.}  */
-  value = yyparse (&nastiness, &randomness);
-  @dots{}
-@}
-@end example
-
-@noindent
-In the grammar actions, use expressions like this to refer to the data:
-
-@example
-exp: @dots{}    @{ @dots{}; *randomness += 1; @dots{} @}
-@end example
-
-
-@node Lexical
-@section The Lexical Analyzer Function @code{yylex}
-@findex yylex
-@cindex lexical analyzer
-
-The @dfn{lexical analyzer} function, @code{yylex}, recognizes tokens from
-the input stream and returns them to the parser.  Bison does not create
-this function automatically; you must write it so that @code{yyparse} can
-call it.  The function is sometimes referred to as a lexical scanner.
-
-In simple programs, @code{yylex} is often defined at the end of the Bison
-grammar file.  If @code{yylex} is defined in a separate source file, you
-need to arrange for the token-type macro definitions to be available there.
-To do this, use the @samp{-d} option when you run Bison, so that it will
-write these macro definitions into a separate header file
-@file{@var{name}.tab.h} which you can include in the other source files
-that need it.  @xref{Invocation, ,Invoking Bison}.
-
-@menu
-* Calling Convention::  How @code{yyparse} calls @code{yylex}.
-* Token Values::      How @code{yylex} must return the semantic value
-                        of the token it has read.
-* Token Locations::   How @code{yylex} must return the text location
-                        (line number, etc.) of the token, if the
-                        actions want that.
-* Pure Calling::      How the calling convention differs
-                        in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
-@end menu
-
-@node Calling Convention
-@subsection Calling Convention for @code{yylex}
-
-The value that @code{yylex} returns must be the positive numeric code
-for the type of token it has just found; a zero or negative value
-signifies end-of-input.
-
-When a token is referred to in the grammar rules by a name, that name
-in the parser file becomes a C macro whose definition is the proper
-numeric code for that token type.  So @code{yylex} can use the name
-to indicate that type.  @xref{Symbols}.
-
-When a token is referred to in the grammar rules by a character literal,
-the numeric code for that character is also the code for the token type.
-So @code{yylex} can simply return that character code, possibly converted
-to @code{unsigned char} to avoid sign-extension.  The null character
-must not be used this way, because its code is zero and that
-signifies end-of-input.
-
-Here is an example showing these things:
-
-@example
-int
-yylex (void)
-@{
-  @dots{}
-  if (c == EOF)    /* Detect end-of-input.  */
-    return 0;
-  @dots{}
-  if (c == '+' || c == '-')
-    return c;      /* Assume token type for `+' is '+'.  */
-  @dots{}
-  return INT;      /* Return the type of the token.  */
-  @dots{}
-@}
-@end example
-
-@noindent
-This interface has been designed so that the output from the @code{lex}
-utility can be used without change as the definition of @code{yylex}.
-
-If the grammar uses literal string tokens, there are two ways that
-@code{yylex} can determine the token type codes for them:
-
-@itemize @bullet
-@item
-If the grammar defines symbolic token names as aliases for the
-literal string tokens, @code{yylex} can use these symbolic names like
-all others.  In this case, the use of the literal string tokens in
-the grammar file has no effect on @code{yylex}.
-
-@item
-@code{yylex} can find the multicharacter token in the @code{yytname}
-table.  The index of the token in the table is the token type's code.
-The name of a multicharacter token is recorded in @code{yytname} with a
-double-quote, the token's characters, and another double-quote.  The
-token's characters are escaped as necessary to be suitable as input
-to Bison.
-
-Here's code for looking up a multicharacter token in @code{yytname},
-assuming that the characters of the token are stored in
-@code{token_buffer}, and assuming that the token does not contain any
-characters like @samp{"} that require escaping.
-
-@smallexample
-for (i = 0; i < YYNTOKENS; i++)
-  @{
-    if (yytname[i] != 0
-        && yytname[i][0] == '"'
-        && ! strncmp (yytname[i] + 1, token_buffer,
-                      strlen (token_buffer))
-        && yytname[i][strlen (token_buffer) + 1] == '"'
-        && yytname[i][strlen (token_buffer) + 2] == 0)
-      break;
-  @}
-@end smallexample
-
-The @code{yytname} table is generated only if you use the
-@code{%token-table} declaration.  @xref{Decl Summary}.
-@end itemize
-
-@node Token Values
-@subsection Semantic Values of Tokens
-
-@vindex yylval
-In an ordinary (nonreentrant) parser, the semantic value of the token must
-be stored into the global variable @code{yylval}.  When you are using
-just one data type for semantic values, @code{yylval} has that type.
-Thus, if the type is @code{int} (the default), you might write this in
-@code{yylex}:
-
-@example
-@group
-  @dots{}
-  yylval = value;  /* Put value onto Bison stack.  */
-  return INT;      /* Return the type of the token.  */
-  @dots{}
-@end group
-@end example
-
-When you are using multiple data types, @code{yylval}'s type is a union
-made from the @code{%union} declaration (@pxref{Union Decl, ,The
-Collection of Value Types}).  So when you store a token's value, you
-must use the proper member of the union.  If the @code{%union}
-declaration looks like this:
-
-@example
-@group
-%union @{
-  int intval;
-  double val;
-  symrec *tptr;
-@}
-@end group
-@end example
-
-@noindent
-then the code in @code{yylex} might look like this:
-
-@example
-@group
-  @dots{}
-  yylval.intval = value; /* Put value onto Bison stack.  */
-  return INT;            /* Return the type of the token.  */
-  @dots{}
-@end group
-@end example
-
-@node Token Locations
-@subsection Textual Locations of Tokens
-
-@vindex yylloc
-If you are using the @samp{@@@var{n}}-feature (@pxref{Locations, ,
-Tracking Locations}) in actions to keep track of the textual locations
-of tokens and groupings, then you must provide this information in
-@code{yylex}.  The function @code{yyparse} expects to find the textual
-location of a token just parsed in the global variable @code{yylloc}.
-So @code{yylex} must store the proper data in that variable.
-
-By default, the value of @code{yylloc} is a structure and you need only
-initialize the members that are going to be used by the actions.  The
-four members are called @code{first_line}, @code{first_column},
-@code{last_line} and @code{last_column}.  Note that the use of this
-feature makes the parser noticeably slower.
-
-@tindex YYLTYPE
-The data type of @code{yylloc} has the name @code{YYLTYPE}.
-
-@node Pure Calling
-@subsection Calling Conventions for Pure Parsers
-
-When you use the Bison declaration @code{%pure-parser} to request a
-pure, reentrant parser, the global communication variables @code{yylval}
-and @code{yylloc} cannot be used.  (@xref{Pure Decl, ,A Pure (Reentrant)
-Parser}.)  In such parsers the two global variables are replaced by
-pointers passed as arguments to @code{yylex}.  You must declare them as
-shown here, and pass the information back by storing it through those
-pointers.
-
-@example
-int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
-@{
-  @dots{}
-  *lvalp = value;  /* Put value onto Bison stack.  */
-  return INT;      /* Return the type of the token.  */
-  @dots{}
-@}
-@end example
-
-If the grammar file does not use the @samp{@@} constructs to refer to
-textual locations, then the type @code{YYLTYPE} will not be defined.  In
-this case, omit the second argument; @code{yylex} will be called with
-only one argument.
-
-
-If you wish to pass the additional parameter data to @code{yylex}, use
-@code{%lex-param} just like @code{%parse-param} (@pxref{Parser
-Function}).
-
-@deffn {Directive} lex-param @{@var{argument-declaration}@}
-@findex %lex-param
-Declare that the braced-code @var{argument-declaration} is an
-additional @code{yylex} argument declaration.
-@end deffn
-
-For instance:
-
-@example
-%parse-param @{int *nastiness@}
-%lex-param   @{int *nastiness@}
-%parse-param @{int *randomness@}
-@end example
-
-@noindent
-results in the following signature:
-
-@example
-int yylex   (int *nastiness);
-int yyparse (int *nastiness, int *randomness);
-@end example
-
-If @code{%pure-parser} is added:
-
-@example
-int yylex   (YYSTYPE *lvalp, int *nastiness);
-int yyparse (int *nastiness, int *randomness);
-@end example
-
-@noindent
-and finally, if both @code{%pure-parser} and @code{%locations} are used:
-
-@example
-int yylex   (YYSTYPE *lvalp, YYLTYPE *llocp, int *nastiness);
-int yyparse (int *nastiness, int *randomness);
-@end example
-
-@node Error Reporting
-@section The Error Reporting Function @code{yyerror}
-@cindex error reporting function
-@findex yyerror
-@cindex parse error
-@cindex syntax error
-
-The Bison parser detects a @dfn{syntax error} or @dfn{parse error}
-whenever it reads a token which cannot satisfy any syntax rule.  An
-action in the grammar can also explicitly proclaim an error, using the
-macro @code{YYERROR} (@pxref{Action Features, ,Special Features for Use
-in Actions}).
-
-The Bison parser expects to report the error by calling an error
-reporting function named @code{yyerror}, which you must supply.  It is
-called by @code{yyparse} whenever a syntax error is found, and it
-receives one argument.  For a syntax error, the string is normally
-@w{@code{"syntax error"}}.
-
-@findex %error-verbose
-If you invoke the directive @code{%error-verbose} in the Bison
-declarations section (@pxref{Bison Declarations, ,The Bison Declarations
-Section}), then Bison provides a more verbose and specific error message
-string instead of just plain @w{@code{"syntax error"}}.
-
-The parser can detect one other kind of error: memory exhaustion.  This
-can happen when the input contains constructions that are very deeply
-nested.  It isn't likely you will encounter this, since the Bison
-parser normally extends its stack automatically up to a very large limit.  But
-if memory is exhausted, @code{yyparse} calls @code{yyerror} in the usual
-fashion, except that the argument string is @w{@code{"memory exhausted"}}.
-
-In some cases diagnostics like @w{@code{"syntax error"}} are
-translated automatically from English to some other language before
-they are passed to @code{yyerror}.  @xref{Internationalization}.
-
-The following definition suffices in simple programs:
-
-@example
-@group
-void
-yyerror (char const *s)
-@{
-@end group
-@group
-  fprintf (stderr, "%s\n", s);
-@}
-@end group
-@end example
-
-After @code{yyerror} returns to @code{yyparse}, the latter will attempt
-error recovery if you have written suitable error recovery grammar rules
-(@pxref{Error Recovery}).  If recovery is impossible, @code{yyparse} will
-immediately return 1.
-
-Obviously, in location tracking pure parsers, @code{yyerror} should have
-an access to the current location.
-This is indeed the case for the @acronym{GLR}
-parsers, but not for the Yacc parser, for historical reasons.  I.e., if
-@samp{%locations %pure-parser} is passed then the prototypes for
-@code{yyerror} are:
-
-@example
-void yyerror (char const *msg);                 /* Yacc parsers.  */
-void yyerror (YYLTYPE *locp, char const *msg);  /* GLR parsers.   */
-@end example
-
-If @samp{%parse-param @{int *nastiness@}} is used, then:
-
-@example
-void yyerror (int *nastiness, char const *msg);  /* Yacc parsers.  */
-void yyerror (int *nastiness, char const *msg);  /* GLR parsers.   */
-@end example
-
-Finally, @acronym{GLR} and Yacc parsers share the same @code{yyerror} calling
-convention for absolutely pure parsers, i.e., when the calling
-convention of @code{yylex} @emph{and} the calling convention of
-@code{%pure-parser} are pure.  I.e.:
-
-@example
-/* Location tracking.  */
-%locations
-/* Pure yylex.  */
-%pure-parser
-%lex-param   @{int *nastiness@}
-/* Pure yyparse.  */
-%parse-param @{int *nastiness@}
-%parse-param @{int *randomness@}
-@end example
-
-@noindent
-results in the following signatures for all the parser kinds:
-
-@example
-int yylex (YYSTYPE *lvalp, YYLTYPE *llocp, int *nastiness);
-int yyparse (int *nastiness, int *randomness);
-void yyerror (YYLTYPE *locp,
-              int *nastiness, int *randomness,
-              char const *msg);
-@end example
-
-@noindent
-The prototypes are only indications of how the code produced by Bison
-uses @code{yyerror}.  Bison-generated code always ignores the returned
-value, so @code{yyerror} can return any type, including @code{void}.
-Also, @code{yyerror} can be a variadic function; that is why the
-message is always passed last.
-
-Traditionally @code{yyerror} returns an @code{int} that is always
-ignored, but this is purely for historical reasons, and @code{void} is
-preferable since it more accurately describes the return type for
-@code{yyerror}.
-
-@vindex yynerrs
-The variable @code{yynerrs} contains the number of syntax errors
-reported so far.  Normally this variable is global; but if you
-request a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser})
-then it is a local variable which only the actions can access.
-
-@node Action Features
-@section Special Features for Use in Actions
-@cindex summary, action features
-@cindex action features summary
-
-Here is a table of Bison constructs, variables and macros that
-are useful in actions.
-
-@deffn {Variable} $$
-Acts like a variable that contains the semantic value for the
-grouping made by the current rule.  @xref{Actions}.
-@end deffn
-
-@deffn {Variable} $@var{n}
-Acts like a variable that contains the semantic value for the
-@var{n}th component of the current rule.  @xref{Actions}.
-@end deffn
-
-@deffn {Variable} $<@var{typealt}>$
-Like @code{$$} but specifies alternative @var{typealt} in the union
-specified by the @code{%union} declaration.  @xref{Action Types, ,Data
-Types of Values in Actions}.
-@end deffn
-
-@deffn {Variable} $<@var{typealt}>@var{n}
-Like @code{$@var{n}} but specifies alternative @var{typealt} in the
-union specified by the @code{%union} declaration.
-@xref{Action Types, ,Data Types of Values in Actions}.
-@end deffn
-
-@deffn {Macro} YYABORT;
-Return immediately from @code{yyparse}, indicating failure.
-@xref{Parser Function, ,The Parser Function @code{yyparse}}.
-@end deffn
-
-@deffn {Macro} YYACCEPT;
-Return immediately from @code{yyparse}, indicating success.
-@xref{Parser Function, ,The Parser Function @code{yyparse}}.
-@end deffn
-
-@deffn {Macro} YYBACKUP (@var{token}, @var{value});
-@findex YYBACKUP
-Unshift a token.  This macro is allowed only for rules that reduce
-a single value, and only when there is no look-ahead token.
-It is also disallowed in @acronym{GLR} parsers.
-It installs a look-ahead token with token type @var{token} and
-semantic value @var{value}; then it discards the value that was
-going to be reduced by this rule.
-
-If the macro is used when it is not valid, such as when there is
-a look-ahead token already, then it reports a syntax error with
-a message @samp{cannot back up} and performs ordinary error
-recovery.
-
-In either case, the rest of the action is not executed.
-@end deffn
-
-@deffn {Macro} YYEMPTY
-@vindex YYEMPTY
-Value stored in @code{yychar} when there is no look-ahead token.
-@end deffn
-
-@deffn {Macro} YYEOF
-@vindex YYEOF
-Value stored in @code{yychar} when the look-ahead is the end of the input
-stream.
-@end deffn
-
-@deffn {Macro} YYERROR;
-@findex YYERROR
-Cause an immediate syntax error.  This statement initiates error
-recovery just as if the parser itself had detected an error; however, it
-does not call @code{yyerror}, and does not print any message.  If you
-want to print an error message, call @code{yyerror} explicitly before
-the @samp{YYERROR;} statement.  @xref{Error Recovery}.
-@end deffn
-
-@deffn {Macro} YYRECOVERING
-@findex YYRECOVERING
-The expression @code{YYRECOVERING ()} yields 1 when the parser
-is recovering from a syntax error, and 0 otherwise.
-@xref{Error Recovery}.
-@end deffn
-
-@deffn {Variable} yychar
-Variable containing either the look-ahead token, or @code{YYEOF} when the
-look-ahead is the end of the input stream, or @code{YYEMPTY} when no look-ahead
-has been performed so the next token is not yet known.
-Do not modify @code{yychar} in a deferred semantic action (@pxref{GLR Semantic
-Actions}).
-@xref{Look-Ahead, ,Look-Ahead Tokens}.
-@end deffn
-
-@deffn {Macro} yyclearin;
-Discard the current look-ahead token.  This is useful primarily in
-error rules.
-Do not invoke @code{yyclearin} in a deferred semantic action (@pxref{GLR
-Semantic Actions}).
-@xref{Error Recovery}.
-@end deffn
-
-@deffn {Macro} yyerrok;
-Resume generating error messages immediately for subsequent syntax
-errors.  This is useful primarily in error rules.
-@xref{Error Recovery}.
-@end deffn
-
-@deffn {Variable} yylloc
-Variable containing the look-ahead token location when @code{yychar} is not set
-to @code{YYEMPTY} or @code{YYEOF}.
-Do not modify @code{yylloc} in a deferred semantic action (@pxref{GLR Semantic
-Actions}).
-@xref{Actions and Locations, ,Actions and Locations}.
-@end deffn
-
-@deffn {Variable} yylval
-Variable containing the look-ahead token semantic value when @code{yychar} is
-not set to @code{YYEMPTY} or @code{YYEOF}.
-Do not modify @code{yylval} in a deferred semantic action (@pxref{GLR Semantic
-Actions}).
-@xref{Actions, ,Actions}.
-@end deffn
-
-@deffn {Value} @@$
-@findex @@$
-Acts like a structure variable containing information on the textual location
-of the grouping made by the current rule.  @xref{Locations, ,
-Tracking Locations}.
-
-@c Check if those paragraphs are still useful or not.
-
-@c @example
-@c struct @{
-@c   int first_line, last_line;
-@c   int first_column, last_column;
-@c @};
-@c @end example
-
-@c Thus, to get the starting line number of the third component, you would
-@c use @samp{@@3.first_line}.
-
-@c In order for the members of this structure to contain valid information,
-@c you must make @code{yylex} supply this information about each token.
-@c If you need only certain members, then @code{yylex} need only fill in
-@c those members.
-
-@c The use of this feature makes the parser noticeably slower.
-@end deffn
-
-@deffn {Value} @@@var{n}
-@findex @@@var{n}
-Acts like a structure variable containing information on the textual location
-of the @var{n}th component of the current rule.  @xref{Locations, ,
-Tracking Locations}.
-@end deffn
-
-@node Internationalization
-@section Parser Internationalization
-@cindex internationalization
-@cindex i18n
-@cindex NLS
-@cindex gettext
-@cindex bison-po
-
-A Bison-generated parser can print diagnostics, including error and
-tracing messages.  By default, they appear in English.  However, Bison
-also supports outputting diagnostics in the user's native language.  To
-make this work, the user should set the usual environment variables.
-@xref{Users, , The User's View, gettext, GNU @code{gettext} utilities}.
-For example, the shell command @samp{export LC_ALL=fr_CA.UTF-8} might
-set the user's locale to French Canadian using the @acronym{UTF}-8
-encoding.  The exact set of available locales depends on the user's
-installation.
-
-The maintainer of a package that uses a Bison-generated parser enables
-the internationalization of the parser's output through the following
-steps.  Here we assume a package that uses @acronym{GNU} Autoconf and
-@acronym{GNU} Automake.
-
-@enumerate
-@item
-@cindex bison-i18n.m4
-Into the directory containing the @acronym{GNU} Autoconf macros used
-by the package---often called @file{m4}---copy the
-@file{bison-i18n.m4} file installed by Bison under
-@samp{share/aclocal/bison-i18n.m4} in Bison's installation directory.
-For example:
-
-@example
-cp /usr/local/share/aclocal/bison-i18n.m4 m4/bison-i18n.m4
-@end example
-
-@item
-@findex BISON_I18N
-@vindex BISON_LOCALEDIR
-@vindex YYENABLE_NLS
-In the top-level @file{configure.ac}, after the @code{AM_GNU_GETTEXT}
-invocation, add an invocation of @code{BISON_I18N}.  This macro is
-defined in the file @file{bison-i18n.m4} that you copied earlier.  It
-causes @samp{configure} to find the value of the
-@code{BISON_LOCALEDIR} variable, and it defines the source-language
-symbol @code{YYENABLE_NLS} to enable translations in the
-Bison-generated parser.
-
-@item
-In the @code{main} function of your program, designate the directory
-containing Bison's runtime message catalog, through a call to
-@samp{bindtextdomain} with domain name @samp{bison-runtime}.
-For example:
-
-@example
-bindtextdomain ("bison-runtime", BISON_LOCALEDIR);
-@end example
-
-Typically this appears after any other call @code{bindtextdomain
-(PACKAGE, LOCALEDIR)} that your package already has.  Here we rely on
-@samp{BISON_LOCALEDIR} to be defined as a string through the
-@file{Makefile}.
-
-@item
-In the @file{Makefile.am} that controls the compilation of the @code{main}
-function, make @samp{BISON_LOCALEDIR} available as a C preprocessor macro,
-either in @samp{DEFS} or in @samp{AM_CPPFLAGS}.  For example:
-
-@example
-DEFS = @@DEFS@@ -DBISON_LOCALEDIR='"$(BISON_LOCALEDIR)"'
-@end example
-
-or:
-
-@example
-AM_CPPFLAGS = -DBISON_LOCALEDIR='"$(BISON_LOCALEDIR)"'
-@end example
-
-@item
-Finally, invoke the command @command{autoreconf} to generate the build
-infrastructure.
-@end enumerate
-
-
-@node Algorithm
-@chapter The Bison Parser Algorithm
-@cindex Bison parser algorithm
-@cindex algorithm of parser
-@cindex shifting
-@cindex reduction
-@cindex parser stack
-@cindex stack, parser
-
-As Bison reads tokens, it pushes them onto a stack along with their
-semantic values.  The stack is called the @dfn{parser stack}.  Pushing a
-token is traditionally called @dfn{shifting}.
-
-For example, suppose the infix calculator has read @samp{1 + 5 *}, with a
-@samp{3} to come.  The stack will have four elements, one for each token
-that was shifted.
-
-But the stack does not always have an element for each token read.  When
-the last @var{n} tokens and groupings shifted match the components of a
-grammar rule, they can be combined according to that rule.  This is called
-@dfn{reduction}.  Those tokens and groupings are replaced on the stack by a
-single grouping whose symbol is the result (left hand side) of that rule.
-Running the rule's action is part of the process of reduction, because this
-is what computes the semantic value of the resulting grouping.
-
-For example, if the infix calculator's parser stack contains this:
-
-@example
-1 + 5 * 3
-@end example
-
-@noindent
-and the next input token is a newline character, then the last three
-elements can be reduced to 15 via the rule:
-
-@example
-expr: expr '*' expr;
-@end example
-
-@noindent
-Then the stack contains just these three elements:
-
-@example
-1 + 15
-@end example
-
-@noindent
-At this point, another reduction can be made, resulting in the single value
-16.  Then the newline token can be shifted.
-
-The parser tries, by shifts and reductions, to reduce the entire input down
-to a single grouping whose symbol is the grammar's start-symbol
-(@pxref{Language and Grammar, ,Languages and Context-Free Grammars}).
-
-This kind of parser is known in the literature as a bottom-up parser.
-
-@menu
-* Look-Ahead::        Parser looks one token ahead when deciding what to do.
-* Shift/Reduce::      Conflicts: when either shifting or reduction is valid.
-* Precedence::        Operator precedence works by resolving conflicts.
-* Contextual Precedence::  When an operator's precedence depends on context.
-* Parser States::     The parser is a finite-state-machine with stack.
-* Reduce/Reduce::     When two rules are applicable in the same situation.
-* Mystery Conflicts::  Reduce/reduce conflicts that look unjustified.
-* Generalized LR Parsing::  Parsing arbitrary context-free grammars.
-* Memory Management:: What happens when memory is exhausted.  How to avoid it.
-@end menu
-
-@node Look-Ahead
-@section Look-Ahead Tokens
-@cindex look-ahead token
-
-The Bison parser does @emph{not} always reduce immediately as soon as the
-last @var{n} tokens and groupings match a rule.  This is because such a
-simple strategy is inadequate to handle most languages.  Instead, when a
-reduction is possible, the parser sometimes ``looks ahead'' at the next
-token in order to decide what to do.
-
-When a token is read, it is not immediately shifted; first it becomes the
-@dfn{look-ahead token}, which is not on the stack.  Now the parser can
-perform one or more reductions of tokens and groupings on the stack, while
-the look-ahead token remains off to the side.  When no more reductions
-should take place, the look-ahead token is shifted onto the stack.  This
-does not mean that all possible reductions have been done; depending on the
-token type of the look-ahead token, some rules may choose to delay their
-application.
-
-Here is a simple case where look-ahead is needed.  These three rules define
-expressions which contain binary addition operators and postfix unary
-factorial operators (@samp{!}), and allow parentheses for grouping.
-
-@example
-@group
-expr:     term '+' expr
-        | term
-        ;
-@end group
-
-@group
-term:     '(' expr ')'
-        | term '!'
-        | NUMBER
-        ;
-@end group
-@end example
-
-Suppose that the tokens @w{@samp{1 + 2}} have been read and shifted; what
-should be done?  If the following token is @samp{)}, then the first three
-tokens must be reduced to form an @code{expr}.  This is the only valid
-course, because shifting the @samp{)} would produce a sequence of symbols
-@w{@code{term ')'}}, and no rule allows this.
-
-If the following token is @samp{!}, then it must be shifted immediately so
-that @w{@samp{2 !}} can be reduced to make a @code{term}.  If instead the
-parser were to reduce before shifting, @w{@samp{1 + 2}} would become an
-@code{expr}.  It would then be impossible to shift the @samp{!} because
-doing so would produce on the stack the sequence of symbols @code{expr
-'!'}.  No rule allows that sequence.
-
-@vindex yychar
-@vindex yylval
-@vindex yylloc
-The look-ahead token is stored in the variable @code{yychar}.
-Its semantic value and location, if any, are stored in the variables
-@code{yylval} and @code{yylloc}.
-@xref{Action Features, ,Special Features for Use in Actions}.
-
-@node Shift/Reduce
-@section Shift/Reduce Conflicts
-@cindex conflicts
-@cindex shift/reduce conflicts
-@cindex dangling @code{else}
-@cindex @code{else}, dangling
-
-Suppose we are parsing a language which has if-then and if-then-else
-statements, with a pair of rules like this:
-
-@example
-@group
-if_stmt:
-          IF expr THEN stmt
-        | IF expr THEN stmt ELSE stmt
-        ;
-@end group
-@end example
-
-@noindent
-Here we assume that @code{IF}, @code{THEN} and @code{ELSE} are
-terminal symbols for specific keyword tokens.
-
-When the @code{ELSE} token is read and becomes the look-ahead token, the
-contents of the stack (assuming the input is valid) are just right for
-reduction by the first rule.  But it is also legitimate to shift the
-@code{ELSE}, because that would lead to eventual reduction by the second
-rule.
-
-This situation, where either a shift or a reduction would be valid, is
-called a @dfn{shift/reduce conflict}.  Bison is designed to resolve
-these conflicts by choosing to shift, unless otherwise directed by
-operator precedence declarations.  To see the reason for this, let's
-contrast it with the other alternative.
-
-Since the parser prefers to shift the @code{ELSE}, the result is to attach
-the else-clause to the innermost if-statement, making these two inputs
-equivalent:
-
-@example
-if x then if y then win (); else lose;
-
-if x then do; if y then win (); else lose; end;
-@end example
-
-But if the parser chose to reduce when possible rather than shift, the
-result would be to attach the else-clause to the outermost if-statement,
-making these two inputs equivalent:
-
-@example
-if x then if y then win (); else lose;
-
-if x then do; if y then win (); end; else lose;
-@end example
-
-The conflict exists because the grammar as written is ambiguous: either
-parsing of the simple nested if-statement is legitimate.  The established
-convention is that these ambiguities are resolved by attaching the
-else-clause to the innermost if-statement; this is what Bison accomplishes
-by choosing to shift rather than reduce.  (It would ideally be cleaner to
-write an unambiguous grammar, but that is very hard to do in this case.)
-This particular ambiguity was first encountered in the specifications of
-Algol 60 and is called the ``dangling @code{else}'' ambiguity.
-
-To avoid warnings from Bison about predictable, legitimate shift/reduce
-conflicts, use the @code{%expect @var{n}} declaration.  There will be no
-warning as long as the number of shift/reduce conflicts is exactly @var{n}.
-@xref{Expect Decl, ,Suppressing Conflict Warnings}.
-
-The definition of @code{if_stmt} above is solely to blame for the
-conflict, but the conflict does not actually appear without additional
-rules.  Here is a complete Bison input file that actually manifests the
-conflict:
-
-@example
-@group
-%token IF THEN ELSE variable
-%%
-@end group
-@group
-stmt:     expr
-        | if_stmt
-        ;
-@end group
-
-@group
-if_stmt:
-          IF expr THEN stmt
-        | IF expr THEN stmt ELSE stmt
-        ;
-@end group
-
-expr:     variable
-        ;
-@end example
-
-@node Precedence
-@section Operator Precedence
-@cindex operator precedence
-@cindex precedence of operators
-
-Another situation where shift/reduce conflicts appear is in arithmetic
-expressions.  Here shifting is not always the preferred resolution; the
-Bison declarations for operator precedence allow you to specify when to
-shift and when to reduce.
-
-@menu
-* Why Precedence::    An example showing why precedence is needed.
-* Using Precedence::  How to specify precedence in Bison grammars.
-* Precedence Examples::  How these features are used in the previous example.
-* How Precedence::    How they work.
-@end menu
-
-@node Why Precedence
-@subsection When Precedence is Needed
-
-Consider the following ambiguous grammar fragment (ambiguous because the
-input @w{@samp{1 - 2 * 3}} can be parsed in two different ways):
-
-@example
-@group
-expr:     expr '-' expr
-        | expr '*' expr
-        | expr '<' expr
-        | '(' expr ')'
-        @dots{}
-        ;
-@end group
-@end example
-
-@noindent
-Suppose the parser has seen the tokens @samp{1}, @samp{-} and @samp{2};
-should it reduce them via the rule for the subtraction operator?  It
-depends on the next token.  Of course, if the next token is @samp{)}, we
-must reduce; shifting is invalid because no single rule can reduce the
-token sequence @w{@samp{- 2 )}} or anything starting with that.  But if
-the next token is @samp{*} or @samp{<}, we have a choice: either
-shifting or reduction would allow the parse to complete, but with
-different results.
-
-To decide which one Bison should do, we must consider the results.  If
-the next operator token @var{op} is shifted, then it must be reduced
-first in order to permit another opportunity to reduce the difference.
-The result is (in effect) @w{@samp{1 - (2 @var{op} 3)}}.  On the other
-hand, if the subtraction is reduced before shifting @var{op}, the result
-is @w{@samp{(1 - 2) @var{op} 3}}.  Clearly, then, the choice of shift or
-reduce should depend on the relative precedence of the operators
-@samp{-} and @var{op}: @samp{*} should be shifted first, but not
-@samp{<}.
-
-@cindex associativity
-What about input such as @w{@samp{1 - 2 - 5}}; should this be
-@w{@samp{(1 - 2) - 5}} or should it be @w{@samp{1 - (2 - 5)}}?  For most
-operators we prefer the former, which is called @dfn{left association}.
-The latter alternative, @dfn{right association}, is desirable for
-assignment operators.  The choice of left or right association is a
-matter of whether the parser chooses to shift or reduce when the stack
-contains @w{@samp{1 - 2}} and the look-ahead token is @samp{-}: shifting
-makes right-associativity.
-
-@node Using Precedence
-@subsection Specifying Operator Precedence
-@findex %left
-@findex %right
-@findex %nonassoc
-
-Bison allows you to specify these choices with the operator precedence
-declarations @code{%left} and @code{%right}.  Each such declaration
-contains a list of tokens, which are operators whose precedence and
-associativity is being declared.  The @code{%left} declaration makes all
-those operators left-associative and the @code{%right} declaration makes
-them right-associative.  A third alternative is @code{%nonassoc}, which
-declares that it is a syntax error to find the same operator twice ``in a
-row''.
-
-The relative precedence of different operators is controlled by the
-order in which they are declared.  The first @code{%left} or
-@code{%right} declaration in the file declares the operators whose
-precedence is lowest, the next such declaration declares the operators
-whose precedence is a little higher, and so on.
-
-@node Precedence Examples
-@subsection Precedence Examples
-
-In our example, we would want the following declarations:
-
-@example
-%left '<'
-%left '-'
-%left '*'
-@end example
-
-In a more complete example, which supports other operators as well, we
-would declare them in groups of equal precedence.  For example, @code{'+'} is
-declared with @code{'-'}:
-
-@example
-%left '<' '>' '=' NE LE GE
-%left '+' '-'
-%left '*' '/'
-@end example
-
-@noindent
-(Here @code{NE} and so on stand for the operators for ``not equal''
-and so on.  We assume that these tokens are more than one character long
-and therefore are represented by names, not character literals.)
-
-@node How Precedence
-@subsection How Precedence Works
-
-The first effect of the precedence declarations is to assign precedence
-levels to the terminal symbols declared.  The second effect is to assign
-precedence levels to certain rules: each rule gets its precedence from
-the last terminal symbol mentioned in the components.  (You can also
-specify explicitly the precedence of a rule.  @xref{Contextual
-Precedence, ,Context-Dependent Precedence}.)
-
-Finally, the resolution of conflicts works by comparing the precedence
-of the rule being considered with that of the look-ahead token.  If the
-token's precedence is higher, the choice is to shift.  If the rule's
-precedence is higher, the choice is to reduce.  If they have equal
-precedence, the choice is made based on the associativity of that
-precedence level.  The verbose output file made by @samp{-v}
-(@pxref{Invocation, ,Invoking Bison}) says how each conflict was
-resolved.
-
-Not all rules and not all tokens have precedence.  If either the rule or
-the look-ahead token has no precedence, then the default is to shift.
-
-@node Contextual Precedence
-@section Context-Dependent Precedence
-@cindex context-dependent precedence
-@cindex unary operator precedence
-@cindex precedence, context-dependent
-@cindex precedence, unary operator
-@findex %prec
-
-Often the precedence of an operator depends on the context.  This sounds
-outlandish at first, but it is really very common.  For example, a minus
-sign typically has a very high precedence as a unary operator, and a
-somewhat lower precedence (lower than multiplication) as a binary operator.
-
-The Bison precedence declarations, @code{%left}, @code{%right} and
-@code{%nonassoc}, can only be used once for a given token; so a token has
-only one precedence declared in this way.  For context-dependent
-precedence, you need to use an additional mechanism: the @code{%prec}
-modifier for rules.
-
-The @code{%prec} modifier declares the precedence of a particular rule by
-specifying a terminal symbol whose precedence should be used for that rule.
-It's not necessary for that symbol to appear otherwise in the rule.  The
-modifier's syntax is:
-
-@example
-%prec @var{terminal-symbol}
-@end example
-
-@noindent
-and it is written after the components of the rule.  Its effect is to
-assign the rule the precedence of @var{terminal-symbol}, overriding
-the precedence that would be deduced for it in the ordinary way.  The
-altered rule precedence then affects how conflicts involving that rule
-are resolved (@pxref{Precedence, ,Operator Precedence}).
-
-Here is how @code{%prec} solves the problem of unary minus.  First, declare
-a precedence for a fictitious terminal symbol named @code{UMINUS}.  There
-are no tokens of this type, but the symbol serves to stand for its
-precedence:
-
-@example
-@dots{}
-%left '+' '-'
-%left '*'
-%left UMINUS
-@end example
-
-Now the precedence of @code{UMINUS} can be used in specific rules:
-
-@example
-@group
-exp:    @dots{}
-        | exp '-' exp
-        @dots{}
-        | '-' exp %prec UMINUS
-@end group
-@end example
-
-@ifset defaultprec
-If you forget to append @code{%prec UMINUS} to the rule for unary
-minus, Bison silently assumes that minus has its usual precedence.
-This kind of problem can be tricky to debug, since one typically
-discovers the mistake only by testing the code.
-
-The @code{%no-default-prec;} declaration makes it easier to discover
-this kind of problem systematically.  It causes rules that lack a
-@code{%prec} modifier to have no precedence, even if the last terminal
-symbol mentioned in their components has a declared precedence.
-
-If @code{%no-default-prec;} is in effect, you must specify @code{%prec}
-for all rules that participate in precedence conflict resolution.
-Then you will see any shift/reduce conflict until you tell Bison how
-to resolve it, either by changing your grammar or by adding an
-explicit precedence.  This will probably add declarations to the
-grammar, but it helps to protect against incorrect rule precedences.
-
-The effect of @code{%no-default-prec;} can be reversed by giving
-@code{%default-prec;}, which is the default.
-@end ifset
-
-@node Parser States
-@section Parser States
-@cindex finite-state machine
-@cindex parser state
-@cindex state (of parser)
-
-The function @code{yyparse} is implemented using a finite-state machine.
-The values pushed on the parser stack are not simply token type codes; they
-represent the entire sequence of terminal and nonterminal symbols at or
-near the top of the stack.  The current state collects all the information
-about previous input which is relevant to deciding what to do next.
-
-Each time a look-ahead token is read, the current parser state together
-with the type of look-ahead token are looked up in a table.  This table
-entry can say, ``Shift the look-ahead token.''  In this case, it also
-specifies the new parser state, which is pushed onto the top of the
-parser stack.  Or it can say, ``Reduce using rule number @var{n}.''
-This means that a certain number of tokens or groupings are taken off
-the top of the stack, and replaced by one grouping.  In other words,
-that number of states are popped from the stack, and one new state is
-pushed.
-
-There is one other alternative: the table can say that the look-ahead token
-is erroneous in the current state.  This causes error processing to begin
-(@pxref{Error Recovery}).
-
-@node Reduce/Reduce
-@section Reduce/Reduce Conflicts
-@cindex reduce/reduce conflict
-@cindex conflicts, reduce/reduce
-
-A reduce/reduce conflict occurs if there are two or more rules that apply
-to the same sequence of input.  This usually indicates a serious error
-in the grammar.
-
-For example, here is an erroneous attempt to define a sequence
-of zero or more @code{word} groupings.
-
-@example
-sequence: /* empty */
-                @{ printf ("empty sequence\n"); @}
-        | maybeword
-        | sequence word
-                @{ printf ("added word %s\n", $2); @}
-        ;
-
-maybeword: /* empty */
-                @{ printf ("empty maybeword\n"); @}
-        | word
-                @{ printf ("single word %s\n", $1); @}
-        ;
-@end example
-
-@noindent
-The error is an ambiguity: there is more than one way to parse a single
-@code{word} into a @code{sequence}.  It could be reduced to a
-@code{maybeword} and then into a @code{sequence} via the second rule.
-Alternatively, nothing-at-all could be reduced into a @code{sequence}
-via the first rule, and this could be combined with the @code{word}
-using the third rule for @code{sequence}.
-
-There is also more than one way to reduce nothing-at-all into a
-@code{sequence}.  This can be done directly via the first rule,
-or indirectly via @code{maybeword} and then the second rule.
-
-You might think that this is a distinction without a difference, because it
-does not change whether any particular input is valid or not.  But it does
-affect which actions are run.  One parsing order runs the second rule's
-action; the other runs the first rule's action and the third rule's action.
-In this example, the output of the program changes.
-
-Bison resolves a reduce/reduce conflict by choosing to use the rule that
-appears first in the grammar, but it is very risky to rely on this.  Every
-reduce/reduce conflict must be studied and usually eliminated.  Here is the
-proper way to define @code{sequence}:
-
-@example
-sequence: /* empty */
-                @{ printf ("empty sequence\n"); @}
-        | sequence word
-                @{ printf ("added word %s\n", $2); @}
-        ;
-@end example
-
-Here is another common error that yields a reduce/reduce conflict:
-
-@example
-sequence: /* empty */
-        | sequence words
-        | sequence redirects
-        ;
-
-words:    /* empty */
-        | words word
-        ;
-
-redirects:/* empty */
-        | redirects redirect
-        ;
-@end example
-
-@noindent
-The intention here is to define a sequence which can contain either
-@code{word} or @code{redirect} groupings.  The individual definitions of
-@code{sequence}, @code{words} and @code{redirects} are error-free, but the
-three together make a subtle ambiguity: even an empty input can be parsed
-in infinitely many ways!
-
-Consider: nothing-at-all could be a @code{words}.  Or it could be two
-@code{words} in a row, or three, or any number.  It could equally well be a
-@code{redirects}, or two, or any number.  Or it could be a @code{words}
-followed by three @code{redirects} and another @code{words}.  And so on.
-
-Here are two ways to correct these rules.  First, to make it a single level
-of sequence:
-
-@example
-sequence: /* empty */
-        | sequence word
-        | sequence redirect
-        ;
-@end example
-
-Second, to prevent either a @code{words} or a @code{redirects}
-from being empty:
-
-@example
-sequence: /* empty */
-        | sequence words
-        | sequence redirects
-        ;
-
-words:    word
-        | words word
-        ;
-
-redirects:redirect
-        | redirects redirect
-        ;
-@end example
-
-@node Mystery Conflicts
-@section Mysterious Reduce/Reduce Conflicts
-
-Sometimes reduce/reduce conflicts can occur that don't look warranted.
-Here is an example:
-
-@example
-@group
-%token ID
-
-%%
-def:    param_spec return_spec ','
-        ;
-param_spec:
-             type
-        |    name_list ':' type
-        ;
-@end group
-@group
-return_spec:
-             type
-        |    name ':' type
-        ;
-@end group
-@group
-type:        ID
-        ;
-@end group
-@group
-name:        ID
-        ;
-name_list:
-             name
-        |    name ',' name_list
-        ;
-@end group
-@end example
-
-It would seem that this grammar can be parsed with only a single token
-of look-ahead: when a @code{param_spec} is being read, an @code{ID} is
-a @code{name} if a comma or colon follows, or a @code{type} if another
-@code{ID} follows.  In other words, this grammar is @acronym{LR}(1).
-
-@cindex @acronym{LR}(1)
-@cindex @acronym{LALR}(1)
-However, Bison, like most parser generators, cannot actually handle all
-@acronym{LR}(1) grammars.  In this grammar, two contexts, that after
-an @code{ID}
-at the beginning of a @code{param_spec} and likewise at the beginning of
-a @code{return_spec}, are similar enough that Bison assumes they are the
-same.  They appear similar because the same set of rules would be
-active---the rule for reducing to a @code{name} and that for reducing to
-a @code{type}.  Bison is unable to determine at that stage of processing
-that the rules would require different look-ahead tokens in the two
-contexts, so it makes a single parser state for them both.  Combining
-the two contexts causes a conflict later.  In parser terminology, this
-occurrence means that the grammar is not @acronym{LALR}(1).
-
-In general, it is better to fix deficiencies than to document them.  But
-this particular deficiency is intrinsically hard to fix; parser
-generators that can handle @acronym{LR}(1) grammars are hard to write
-and tend to
-produce parsers that are very large.  In practice, Bison is more useful
-as it is now.
-
-When the problem arises, you can often fix it by identifying the two
-parser states that are being confused, and adding something to make them
-look distinct.  In the above example, adding one rule to
-@code{return_spec} as follows makes the problem go away:
-
-@example
-@group
-%token BOGUS
-@dots{}
-%%
-@dots{}
-return_spec:
-             type
-        |    name ':' type
-        /* This rule is never used.  */
-        |    ID BOGUS
-        ;
-@end group
-@end example
-
-This corrects the problem because it introduces the possibility of an
-additional active rule in the context after the @code{ID} at the beginning of
-@code{return_spec}.  This rule is not active in the corresponding context
-in a @code{param_spec}, so the two contexts receive distinct parser states.
-As long as the token @code{BOGUS} is never generated by @code{yylex},
-the added rule cannot alter the way actual input is parsed.
-
-In this particular example, there is another way to solve the problem:
-rewrite the rule for @code{return_spec} to use @code{ID} directly
-instead of via @code{name}.  This also causes the two confusing
-contexts to have different sets of active rules, because the one for
-@code{return_spec} activates the altered rule for @code{return_spec}
-rather than the one for @code{name}.
-
-@example
-param_spec:
-             type
-        |    name_list ':' type
-        ;
-return_spec:
-             type
-        |    ID ':' type
-        ;
-@end example
-
-For a more detailed exposition of @acronym{LALR}(1) parsers and parser
-generators, please see:
-Frank DeRemer and Thomas Pennello, Efficient Computation of
-@acronym{LALR}(1) Look-Ahead Sets, @cite{@acronym{ACM} Transactions on
-Programming Languages and Systems}, Vol.@: 4, No.@: 4 (October 1982),
-pp.@: 615--649 @uref{http://doi.acm.org/10.1145/69622.357187}.
-
-@node Generalized LR Parsing
-@section Generalized @acronym{LR} (@acronym{GLR}) Parsing
-@cindex @acronym{GLR} parsing
-@cindex generalized @acronym{LR} (@acronym{GLR}) parsing
-@cindex ambiguous grammars
-@cindex nondeterministic parsing
-
-Bison produces @emph{deterministic} parsers that choose uniquely
-when to reduce and which reduction to apply
-based on a summary of the preceding input and on one extra token of look-ahead.
-As a result, normal Bison handles a proper subset of the family of
-context-free languages.
-Ambiguous grammars, since they have strings with more than one possible
-sequence of reductions cannot have deterministic parsers in this sense.
-The same is true of languages that require more than one symbol of
-look-ahead, since the parser lacks the information necessary to make a
-decision at the point it must be made in a shift-reduce parser.
-Finally, as previously mentioned (@pxref{Mystery Conflicts}),
-there are languages where Bison's particular choice of how to
-summarize the input seen so far loses necessary information.
-
-When you use the @samp{%glr-parser} declaration in your grammar file,
-Bison generates a parser that uses a different algorithm, called
-Generalized @acronym{LR} (or @acronym{GLR}).  A Bison @acronym{GLR}
-parser uses the same basic
-algorithm for parsing as an ordinary Bison parser, but behaves
-differently in cases where there is a shift-reduce conflict that has not
-been resolved by precedence rules (@pxref{Precedence}) or a
-reduce-reduce conflict.  When a @acronym{GLR} parser encounters such a
-situation, it
-effectively @emph{splits} into a several parsers, one for each possible
-shift or reduction.  These parsers then proceed as usual, consuming
-tokens in lock-step.  Some of the stacks may encounter other conflicts
-and split further, with the result that instead of a sequence of states,
-a Bison @acronym{GLR} parsing stack is what is in effect a tree of states.
-
-In effect, each stack represents a guess as to what the proper parse
-is.  Additional input may indicate that a guess was wrong, in which case
-the appropriate stack silently disappears.  Otherwise, the semantics
-actions generated in each stack are saved, rather than being executed
-immediately.  When a stack disappears, its saved semantic actions never
-get executed.  When a reduction causes two stacks to become equivalent,
-their sets of semantic actions are both saved with the state that
-results from the reduction.  We say that two stacks are equivalent
-when they both represent the same sequence of states,
-and each pair of corresponding states represents a
-grammar symbol that produces the same segment of the input token
-stream.
-
-Whenever the parser makes a transition from having multiple
-states to having one, it reverts to the normal @acronym{LALR}(1) parsing
-algorithm, after resolving and executing the saved-up actions.
-At this transition, some of the states on the stack will have semantic
-values that are sets (actually multisets) of possible actions.  The
-parser tries to pick one of the actions by first finding one whose rule
-has the highest dynamic precedence, as set by the @samp{%dprec}
-declaration.  Otherwise, if the alternative actions are not ordered by
-precedence, but there the same merging function is declared for both
-rules by the @samp{%merge} declaration,
-Bison resolves and evaluates both and then calls the merge function on
-the result.  Otherwise, it reports an ambiguity.
-
-It is possible to use a data structure for the @acronym{GLR} parsing tree that
-permits the processing of any @acronym{LALR}(1) grammar in linear time (in the
-size of the input), any unambiguous (not necessarily
-@acronym{LALR}(1)) grammar in
-quadratic worst-case time, and any general (possibly ambiguous)
-context-free grammar in cubic worst-case time.  However, Bison currently
-uses a simpler data structure that requires time proportional to the
-length of the input times the maximum number of stacks required for any
-prefix of the input.  Thus, really ambiguous or nondeterministic
-grammars can require exponential time and space to process.  Such badly
-behaving examples, however, are not generally of practical interest.
-Usually, nondeterminism in a grammar is local---the parser is ``in
-doubt'' only for a few tokens at a time.  Therefore, the current data
-structure should generally be adequate.  On @acronym{LALR}(1) portions of a
-grammar, in particular, it is only slightly slower than with the default
-Bison parser.
-
-For a more detailed exposition of @acronym{GLR} parsers, please see: Elizabeth
-Scott, Adrian Johnstone and Shamsa Sadaf Hussain, Tomita-Style
-Generalised @acronym{LR} Parsers, Royal Holloway, University of
-London, Department of Computer Science, TR-00-12,
-@uref{http://www.cs.rhul.ac.uk/research/languages/publications/tomita_style_1.ps},
-(2000-12-24).
-
-@node Memory Management
-@section Memory Management, and How to Avoid Memory Exhaustion
-@cindex memory exhaustion
-@cindex memory management
-@cindex stack overflow
-@cindex parser stack overflow
-@cindex overflow of parser stack
-
-The Bison parser stack can run out of memory if too many tokens are shifted and
-not reduced.  When this happens, the parser function @code{yyparse}
-calls @code{yyerror} and then returns 2.
-
-Because Bison parsers have growing stacks, hitting the upper limit
-usually results from using a right recursion instead of a left
-recursion, @xref{Recursion, ,Recursive Rules}.
-
-@vindex YYMAXDEPTH
-By defining the macro @code{YYMAXDEPTH}, you can control how deep the
-parser stack can become before memory is exhausted.  Define the
-macro with a value that is an integer.  This value is the maximum number
-of tokens that can be shifted (and not reduced) before overflow.
-
-The stack space allowed is not necessarily allocated.  If you specify a
-large value for @code{YYMAXDEPTH}, the parser normally allocates a small
-stack at first, and then makes it bigger by stages as needed.  This
-increasing allocation happens automatically and silently.  Therefore,
-you do not need to make @code{YYMAXDEPTH} painfully small merely to save
-space for ordinary inputs that do not need much stack.
-
-However, do not allow @code{YYMAXDEPTH} to be a value so large that
-arithmetic overflow could occur when calculating the size of the stack
-space.  Also, do not allow @code{YYMAXDEPTH} to be less than
-@code{YYINITDEPTH}.
-
-@cindex default stack limit
-The default value of @code{YYMAXDEPTH}, if you do not define it, is
-10000.
-
-@vindex YYINITDEPTH
-You can control how much stack is allocated initially by defining the
-macro @code{YYINITDEPTH} to a positive integer.  For the C
-@acronym{LALR}(1) parser, this value must be a compile-time constant
-unless you are assuming C99 or some other target language or compiler
-that allows variable-length arrays.  The default is 200.
-
-Do not allow @code{YYINITDEPTH} to be greater than @code{YYMAXDEPTH}.
-
-@c FIXME: C++ output.
-Because of semantical differences between C and C++, the
-@acronym{LALR}(1) parsers in C produced by Bison cannot grow when compiled
-by C++ compilers.  In this precise case (compiling a C parser as C++) you are
-suggested to grow @code{YYINITDEPTH}.  The Bison maintainers hope to fix
-this deficiency in a future release.
-
-@node Error Recovery
-@chapter Error Recovery
-@cindex error recovery
-@cindex recovery from errors
-
-It is not usually acceptable to have a program terminate on a syntax
-error.  For example, a compiler should recover sufficiently to parse the
-rest of the input file and check it for errors; a calculator should accept
-another expression.
-
-In a simple interactive command parser where each input is one line, it may
-be sufficient to allow @code{yyparse} to return 1 on error and have the
-caller ignore the rest of the input line when that happens (and then call
-@code{yyparse} again).  But this is inadequate for a compiler, because it
-forgets all the syntactic context leading up to the error.  A syntax error
-deep within a function in the compiler input should not cause the compiler
-to treat the following line like the beginning of a source file.
-
-@findex error
-You can define how to recover from a syntax error by writing rules to
-recognize the special token @code{error}.  This is a terminal symbol that
-is always defined (you need not declare it) and reserved for error
-handling.  The Bison parser generates an @code{error} token whenever a
-syntax error happens; if you have provided a rule to recognize this token
-in the current context, the parse can continue.
-
-For example:
-
-@example
-stmnts:  /* empty string */
-        | stmnts '\n'
-        | stmnts exp '\n'
-        | stmnts error '\n'
-@end example
-
-The fourth rule in this example says that an error followed by a newline
-makes a valid addition to any @code{stmnts}.
-
-What happens if a syntax error occurs in the middle of an @code{exp}?  The
-error recovery rule, interpreted strictly, applies to the precise sequence
-of a @code{stmnts}, an @code{error} and a newline.  If an error occurs in
-the middle of an @code{exp}, there will probably be some additional tokens
-and subexpressions on the stack after the last @code{stmnts}, and there
-will be tokens to read before the next newline.  So the rule is not
-applicable in the ordinary way.
-
-But Bison can force the situation to fit the rule, by discarding part of
-the semantic context and part of the input.  First it discards states
-and objects from the stack until it gets back to a state in which the
-@code{error} token is acceptable.  (This means that the subexpressions
-already parsed are discarded, back to the last complete @code{stmnts}.)
-At this point the @code{error} token can be shifted.  Then, if the old
-look-ahead token is not acceptable to be shifted next, the parser reads
-tokens and discards them until it finds a token which is acceptable.  In
-this example, Bison reads and discards input until the next newline so
-that the fourth rule can apply.  Note that discarded symbols are
-possible sources of memory leaks, see @ref{Destructor Decl, , Freeing
-Discarded Symbols}, for a means to reclaim this memory.
-
-The choice of error rules in the grammar is a choice of strategies for
-error recovery.  A simple and useful strategy is simply to skip the rest of
-the current input line or current statement if an error is detected:
-
-@example
-stmnt: error ';'  /* On error, skip until ';' is read.  */
-@end example
-
-It is also useful to recover to the matching close-delimiter of an
-opening-delimiter that has already been parsed.  Otherwise the
-close-delimiter will probably appear to be unmatched, and generate another,
-spurious error message:
-
-@example
-primary:  '(' expr ')'
-        | '(' error ')'
-        @dots{}
-        ;
-@end example
-
-Error recovery strategies are necessarily guesses.  When they guess wrong,
-one syntax error often leads to another.  In the above example, the error
-recovery rule guesses that an error is due to bad input within one
-@code{stmnt}.  Suppose that instead a spurious semicolon is inserted in the
-middle of a valid @code{stmnt}.  After the error recovery rule recovers
-from the first error, another syntax error will be found straightaway,
-since the text following the spurious semicolon is also an invalid
-@code{stmnt}.
-
-To prevent an outpouring of error messages, the parser will output no error
-message for another syntax error that happens shortly after the first; only
-after three consecutive input tokens have been successfully shifted will
-error messages resume.
-
-Note that rules which accept the @code{error} token may have actions, just
-as any other rules can.
-
-@findex yyerrok
-You can make error messages resume immediately by using the macro
-@code{yyerrok} in an action.  If you do this in the error rule's action, no
-error messages will be suppressed.  This macro requires no arguments;
-@samp{yyerrok;} is a valid C statement.
-
-@findex yyclearin
-The previous look-ahead token is reanalyzed immediately after an error.  If
-this is unacceptable, then the macro @code{yyclearin} may be used to clear
-this token.  Write the statement @samp{yyclearin;} in the error rule's
-action.
-@xref{Action Features, ,Special Features for Use in Actions}.
-
-For example, suppose that on a syntax error, an error handling routine is
-called that advances the input stream to some point where parsing should
-once again commence.  The next symbol returned by the lexical scanner is
-probably correct.  The previous look-ahead token ought to be discarded
-with @samp{yyclearin;}.
-
-@vindex YYRECOVERING
-The expression @code{YYRECOVERING ()} yields 1 when the parser
-is recovering from a syntax error, and 0 otherwise.
-Syntax error diagnostics are suppressed while recovering from a syntax
-error.
-
-@node Context Dependency
-@chapter Handling Context Dependencies
-
-The Bison paradigm is to parse tokens first, then group them into larger
-syntactic units.  In many languages, the meaning of a token is affected by
-its context.  Although this violates the Bison paradigm, certain techniques
-(known as @dfn{kludges}) may enable you to write Bison parsers for such
-languages.
-
-@menu
-* Semantic Tokens::   Token parsing can depend on the semantic context.
-* Lexical Tie-ins::   Token parsing can depend on the syntactic context.
-* Tie-in Recovery::   Lexical tie-ins have implications for how
-                        error recovery rules must be written.
-@end menu
-
-(Actually, ``kludge'' means any technique that gets its job done but is
-neither clean nor robust.)
-
-@node Semantic Tokens
-@section Semantic Info in Token Types
-
-The C language has a context dependency: the way an identifier is used
-depends on what its current meaning is.  For example, consider this:
-
-@example
-foo (x);
-@end example
-
-This looks like a function call statement, but if @code{foo} is a typedef
-name, then this is actually a declaration of @code{x}.  How can a Bison
-parser for C decide how to parse this input?
-
-The method used in @acronym{GNU} C is to have two different token types,
-@code{IDENTIFIER} and @code{TYPENAME}.  When @code{yylex} finds an
-identifier, it looks up the current declaration of the identifier in order
-to decide which token type to return: @code{TYPENAME} if the identifier is
-declared as a typedef, @code{IDENTIFIER} otherwise.
-
-The grammar rules can then express the context dependency by the choice of
-token type to recognize.  @code{IDENTIFIER} is accepted as an expression,
-but @code{TYPENAME} is not.  @code{TYPENAME} can start a declaration, but
-@code{IDENTIFIER} cannot.  In contexts where the meaning of the identifier
-is @emph{not} significant, such as in declarations that can shadow a
-typedef name, either @code{TYPENAME} or @code{IDENTIFIER} is
-accepted---there is one rule for each of the two token types.
-
-This technique is simple to use if the decision of which kinds of
-identifiers to allow is made at a place close to where the identifier is
-parsed.  But in C this is not always so: C allows a declaration to
-redeclare a typedef name provided an explicit type has been specified
-earlier:
-
-@example
-typedef int foo, bar;
-int baz (void)
-@{
-  static bar (bar);      /* @r{redeclare @code{bar} as static variable} */
-  extern foo foo (foo);  /* @r{redeclare @code{foo} as function} */
-  return foo (bar);
-@}
-@end example
-
-Unfortunately, the name being declared is separated from the declaration
-construct itself by a complicated syntactic structure---the ``declarator''.
-
-As a result, part of the Bison parser for C needs to be duplicated, with
-all the nonterminal names changed: once for parsing a declaration in
-which a typedef name can be redefined, and once for parsing a
-declaration in which that can't be done.  Here is a part of the
-duplication, with actions omitted for brevity:
-
-@example
-initdcl:
-          declarator maybeasm '='
-          init
-        | declarator maybeasm
-        ;
-
-notype_initdcl:
-          notype_declarator maybeasm '='
-          init
-        | notype_declarator maybeasm
-        ;
-@end example
-
-@noindent
-Here @code{initdcl} can redeclare a typedef name, but @code{notype_initdcl}
-cannot.  The distinction between @code{declarator} and
-@code{notype_declarator} is the same sort of thing.
-
-There is some similarity between this technique and a lexical tie-in
-(described next), in that information which alters the lexical analysis is
-changed during parsing by other parts of the program.  The difference is
-here the information is global, and is used for other purposes in the
-program.  A true lexical tie-in has a special-purpose flag controlled by
-the syntactic context.
-
-@node Lexical Tie-ins
-@section Lexical Tie-ins
-@cindex lexical tie-in
-
-One way to handle context-dependency is the @dfn{lexical tie-in}: a flag
-which is set by Bison actions, whose purpose is to alter the way tokens are
-parsed.
-
-For example, suppose we have a language vaguely like C, but with a special
-construct @samp{hex (@var{hex-expr})}.  After the keyword @code{hex} comes
-an expression in parentheses in which all integers are hexadecimal.  In
-particular, the token @samp{a1b} must be treated as an integer rather than
-as an identifier if it appears in that context.  Here is how you can do it:
-
-@example
-@group
-%@{
-  int hexflag;
-  int yylex (void);
-  void yyerror (char const *);
-%@}
-%%
-@dots{}
-@end group
-@group
-expr:   IDENTIFIER
-        | constant
-        | HEX '('
-                @{ hexflag = 1; @}
-          expr ')'
-                @{ hexflag = 0;
-                   $$ = $4; @}
-        | expr '+' expr
-                @{ $$ = make_sum ($1, $3); @}
-        @dots{}
-        ;
-@end group
-
-@group
-constant:
-          INTEGER
-        | STRING
-        ;
-@end group
-@end example
-
-@noindent
-Here we assume that @code{yylex} looks at the value of @code{hexflag}; when
-it is nonzero, all integers are parsed in hexadecimal, and tokens starting
-with letters are parsed as integers if possible.
-
-The declaration of @code{hexflag} shown in the prologue of the parser file
-is needed to make it accessible to the actions (@pxref{Prologue, ,The Prologue}).
-You must also write the code in @code{yylex} to obey the flag.
-
-@node Tie-in Recovery
-@section Lexical Tie-ins and Error Recovery
-
-Lexical tie-ins make strict demands on any error recovery rules you have.
-@xref{Error Recovery}.
-
-The reason for this is that the purpose of an error recovery rule is to
-abort the parsing of one construct and resume in some larger construct.
-For example, in C-like languages, a typical error recovery rule is to skip
-tokens until the next semicolon, and then start a new statement, like this:
-
-@example
-stmt:   expr ';'
-        | IF '(' expr ')' stmt @{ @dots{} @}
-        @dots{}
-        error ';'
-                @{ hexflag = 0; @}
-        ;
-@end example
-
-If there is a syntax error in the middle of a @samp{hex (@var{expr})}
-construct, this error rule will apply, and then the action for the
-completed @samp{hex (@var{expr})} will never run.  So @code{hexflag} would
-remain set for the entire rest of the input, or until the next @code{hex}
-keyword, causing identifiers to be misinterpreted as integers.
-
-To avoid this problem the error recovery rule itself clears @code{hexflag}.
-
-There may also be an error recovery rule that works within expressions.
-For example, there could be a rule which applies within parentheses
-and skips to the close-parenthesis:
-
-@example
-@group
-expr:   @dots{}
-        | '(' expr ')'
-                @{ $$ = $2; @}
-        | '(' error ')'
-        @dots{}
-@end group
-@end example
-
-If this rule acts within the @code{hex} construct, it is not going to abort
-that construct (since it applies to an inner level of parentheses within
-the construct).  Therefore, it should not clear the flag: the rest of
-the @code{hex} construct should be parsed with the flag still in effect.
-
-What if there is an error recovery rule which might abort out of the
-@code{hex} construct or might not, depending on circumstances?  There is no
-way you can write the action to determine whether a @code{hex} construct is
-being aborted or not.  So if you are using a lexical tie-in, you had better
-make sure your error recovery rules are not of this kind.  Each rule must
-be such that you can be sure that it always will, or always won't, have to
-clear the flag.
-
-@c ================================================== Debugging Your Parser
-
-@node Debugging
-@chapter Debugging Your Parser
-
-Developing a parser can be a challenge, especially if you don't
-understand the algorithm (@pxref{Algorithm, ,The Bison Parser
-Algorithm}).  Even so, sometimes a detailed description of the automaton
-can help (@pxref{Understanding, , Understanding Your Parser}), or
-tracing the execution of the parser can give some insight on why it
-behaves improperly (@pxref{Tracing, , Tracing Your Parser}).
-
-@menu
-* Understanding::     Understanding the structure of your parser.
-* Tracing::           Tracing the execution of your parser.
-@end menu
-
-@node Understanding
-@section Understanding Your Parser
-
-As documented elsewhere (@pxref{Algorithm, ,The Bison Parser Algorithm})
-Bison parsers are @dfn{shift/reduce automata}.  In some cases (much more
-frequent than one would hope), looking at this automaton is required to
-tune or simply fix a parser.  Bison provides two different
-representation of it, either textually or graphically (as a @acronym{VCG}
-file).
-
-The textual file is generated when the options @option{--report} or
-@option{--verbose} are specified, see @xref{Invocation, , Invoking
-Bison}.  Its name is made by removing @samp{.tab.c} or @samp{.c} from
-the parser output file name, and adding @samp{.output} instead.
-Therefore, if the input file is @file{foo.y}, then the parser file is
-called @file{foo.tab.c} by default.  As a consequence, the verbose
-output file is called @file{foo.output}.
-
-The following grammar file, @file{calc.y}, will be used in the sequel:
-
-@example
-%token NUM STR
-%left '+' '-'
-%left '*'
-%%
-exp: exp '+' exp
-   | exp '-' exp
-   | exp '*' exp
-   | exp '/' exp
-   | NUM
-   ;
-useless: STR;
-%%
-@end example
-
-@command{bison} reports:
-
-@example
-calc.y: warning: 1 useless nonterminal and 1 useless rule
-calc.y:11.1-7: warning: useless nonterminal: useless
-calc.y:11.10-12: warning: useless rule: useless: STR
-calc.y: conflicts: 7 shift/reduce
-@end example
-
-When given @option{--report=state}, in addition to @file{calc.tab.c}, it
-creates a file @file{calc.output} with contents detailed below.  The
-order of the output and the exact presentation might vary, but the
-interpretation is the same.
-
-The first section includes details on conflicts that were solved thanks
-to precedence and/or associativity:
-
-@example
-Conflict in state 8 between rule 2 and token '+' resolved as reduce.
-Conflict in state 8 between rule 2 and token '-' resolved as reduce.
-Conflict in state 8 between rule 2 and token '*' resolved as shift.
-@exdent @dots{}
-@end example
-
-@noindent
-The next section lists states that still have conflicts.
-
-@example
-State 8 conflicts: 1 shift/reduce
-State 9 conflicts: 1 shift/reduce
-State 10 conflicts: 1 shift/reduce
-State 11 conflicts: 4 shift/reduce
-@end example
-
-@noindent
-@cindex token, useless
-@cindex useless token
-@cindex nonterminal, useless
-@cindex useless nonterminal
-@cindex rule, useless
-@cindex useless rule
-The next section reports useless tokens, nonterminal and rules.  Useless
-nonterminals and rules are removed in order to produce a smaller parser,
-but useless tokens are preserved, since they might be used by the
-scanner (note the difference between ``useless'' and ``not used''
-below):
-
-@example
-Useless nonterminals:
-   useless
-
-Terminals which are not used:
-   STR
-
-Useless rules:
-#6     useless: STR;
-@end example
-
-@noindent
-The next section reproduces the exact grammar that Bison used:
-
-@example
-Grammar
-
-  Number, Line, Rule
-    0   5 $accept -> exp $end
-    1   5 exp -> exp '+' exp
-    2   6 exp -> exp '-' exp
-    3   7 exp -> exp '*' exp
-    4   8 exp -> exp '/' exp
-    5   9 exp -> NUM
-@end example
-
-@noindent
-and reports the uses of the symbols:
-
-@example
-Terminals, with rules where they appear
-
-$end (0) 0
-'*' (42) 3
-'+' (43) 1
-'-' (45) 2
-'/' (47) 4
-error (256)
-NUM (258) 5
-
-Nonterminals, with rules where they appear
-
-$accept (8)
-    on left: 0
-exp (9)
-    on left: 1 2 3 4 5, on right: 0 1 2 3 4
-@end example
-
-@noindent
-@cindex item
-@cindex pointed rule
-@cindex rule, pointed
-Bison then proceeds onto the automaton itself, describing each state
-with it set of @dfn{items}, also known as @dfn{pointed rules}.  Each
-item is a production rule together with a point (marked by @samp{.})
-that the input cursor.
-
-@example
-state 0
-
-    $accept  ->  . exp $   (rule 0)
-
-    NUM         shift, and go to state 1
-
-    exp         go to state 2
-@end example
-
-This reads as follows: ``state 0 corresponds to being at the very
-beginning of the parsing, in the initial rule, right before the start
-symbol (here, @code{exp}).  When the parser returns to this state right
-after having reduced a rule that produced an @code{exp}, the control
-flow jumps to state 2.  If there is no such transition on a nonterminal
-symbol, and the look-ahead is a @code{NUM}, then this token is shifted on
-the parse stack, and the control flow jumps to state 1.  Any other
-look-ahead triggers a syntax error.''
-
-@cindex core, item set
-@cindex item set core
-@cindex kernel, item set
-@cindex item set core
-Even though the only active rule in state 0 seems to be rule 0, the
-report lists @code{NUM} as a look-ahead token because @code{NUM} can be
-at the beginning of any rule deriving an @code{exp}.  By default Bison
-reports the so-called @dfn{core} or @dfn{kernel} of the item set, but if
-you want to see more detail you can invoke @command{bison} with
-@option{--report=itemset} to list all the items, include those that can
-be derived:
-
-@example
-state 0
-
-    $accept  ->  . exp $   (rule 0)
-    exp  ->  . exp '+' exp   (rule 1)
-    exp  ->  . exp '-' exp   (rule 2)
-    exp  ->  . exp '*' exp   (rule 3)
-    exp  ->  . exp '/' exp   (rule 4)
-    exp  ->  . NUM   (rule 5)
-
-    NUM         shift, and go to state 1
-
-    exp         go to state 2
-@end example
-
-@noindent
-In the state 1...
-
-@example
-state 1
-
-    exp  ->  NUM .   (rule 5)
-
-    $default    reduce using rule 5 (exp)
-@end example
-
-@noindent
-the rule 5, @samp{exp: NUM;}, is completed.  Whatever the look-ahead token
-(@samp{$default}), the parser will reduce it.  If it was coming from
-state 0, then, after this reduction it will return to state 0, and will
-jump to state 2 (@samp{exp: go to state 2}).
-
-@example
-state 2
-
-    $accept  ->  exp . $   (rule 0)
-    exp  ->  exp . '+' exp   (rule 1)
-    exp  ->  exp . '-' exp   (rule 2)
-    exp  ->  exp . '*' exp   (rule 3)
-    exp  ->  exp . '/' exp   (rule 4)
-
-    $           shift, and go to state 3
-    '+'         shift, and go to state 4
-    '-'         shift, and go to state 5
-    '*'         shift, and go to state 6
-    '/'         shift, and go to state 7
-@end example
-
-@noindent
-In state 2, the automaton can only shift a symbol.  For instance,
-because of the item @samp{exp -> exp . '+' exp}, if the look-ahead if
-@samp{+}, it will be shifted on the parse stack, and the automaton
-control will jump to state 4, corresponding to the item @samp{exp -> exp
-'+' . exp}.  Since there is no default action, any other token than
-those listed above will trigger a syntax error.
-
-The state 3 is named the @dfn{final state}, or the @dfn{accepting
-state}:
-
-@example
-state 3
-
-    $accept  ->  exp $ .   (rule 0)
-
-    $default    accept
-@end example
-
-@noindent
-the initial rule is completed (the start symbol and the end
-of input were read), the parsing exits successfully.
-
-The interpretation of states 4 to 7 is straightforward, and is left to
-the reader.
-
-@example
-state 4
-
-    exp  ->  exp '+' . exp   (rule 1)
-
-    NUM         shift, and go to state 1
-
-    exp         go to state 8
-
-state 5
-
-    exp  ->  exp '-' . exp   (rule 2)
-
-    NUM         shift, and go to state 1
-
-    exp         go to state 9
-
-state 6
-
-    exp  ->  exp '*' . exp   (rule 3)
-
-    NUM         shift, and go to state 1
-
-    exp         go to state 10
-
-state 7
-
-    exp  ->  exp '/' . exp   (rule 4)
-
-    NUM         shift, and go to state 1
-
-    exp         go to state 11
-@end example
-
-As was announced in beginning of the report, @samp{State 8 conflicts:
-1 shift/reduce}:
-
-@example
-state 8
-
-    exp  ->  exp . '+' exp   (rule 1)
-    exp  ->  exp '+' exp .   (rule 1)
-    exp  ->  exp . '-' exp   (rule 2)
-    exp  ->  exp . '*' exp   (rule 3)
-    exp  ->  exp . '/' exp   (rule 4)
-
-    '*'         shift, and go to state 6
-    '/'         shift, and go to state 7
-
-    '/'         [reduce using rule 1 (exp)]
-    $default    reduce using rule 1 (exp)
-@end example
-
-Indeed, there are two actions associated to the look-ahead @samp{/}:
-either shifting (and going to state 7), or reducing rule 1.  The
-conflict means that either the grammar is ambiguous, or the parser lacks
-information to make the right decision.  Indeed the grammar is
-ambiguous, as, since we did not specify the precedence of @samp{/}, the
-sentence @samp{NUM + NUM / NUM} can be parsed as @samp{NUM + (NUM /
-NUM)}, which corresponds to shifting @samp{/}, or as @samp{(NUM + NUM) /
-NUM}, which corresponds to reducing rule 1.
-
-Because in @acronym{LALR}(1) parsing a single decision can be made, Bison
-arbitrarily chose to disable the reduction, see @ref{Shift/Reduce, ,
-Shift/Reduce Conflicts}.  Discarded actions are reported in between
-square brackets.
-
-Note that all the previous states had a single possible action: either
-shifting the next token and going to the corresponding state, or
-reducing a single rule.  In the other cases, i.e., when shifting
-@emph{and} reducing is possible or when @emph{several} reductions are
-possible, the look-ahead is required to select the action.  State 8 is
-one such state: if the look-ahead is @samp{*} or @samp{/} then the action
-is shifting, otherwise the action is reducing rule 1.  In other words,
-the first two items, corresponding to rule 1, are not eligible when the
-look-ahead token is @samp{*}, since we specified that @samp{*} has higher
-precedence than @samp{+}.  More generally, some items are eligible only
-with some set of possible look-ahead tokens.  When run with
-@option{--report=look-ahead}, Bison specifies these look-ahead tokens:
-
-@example
-state 8
-
-    exp  ->  exp . '+' exp  [$, '+', '-', '/']   (rule 1)
-    exp  ->  exp '+' exp .  [$, '+', '-', '/']   (rule 1)
-    exp  ->  exp . '-' exp   (rule 2)
-    exp  ->  exp . '*' exp   (rule 3)
-    exp  ->  exp . '/' exp   (rule 4)
-
-    '*'         shift, and go to state 6
-    '/'         shift, and go to state 7
-
-    '/'         [reduce using rule 1 (exp)]
-    $default    reduce using rule 1 (exp)
-@end example
-
-The remaining states are similar:
-
-@example
-state 9
-
-    exp  ->  exp . '+' exp   (rule 1)
-    exp  ->  exp . '-' exp   (rule 2)
-    exp  ->  exp '-' exp .   (rule 2)
-    exp  ->  exp . '*' exp   (rule 3)
-    exp  ->  exp . '/' exp   (rule 4)
-
-    '*'         shift, and go to state 6
-    '/'         shift, and go to state 7
-
-    '/'         [reduce using rule 2 (exp)]
-    $default    reduce using rule 2 (exp)
-
-state 10
-
-    exp  ->  exp . '+' exp   (rule 1)
-    exp  ->  exp . '-' exp   (rule 2)
-    exp  ->  exp . '*' exp   (rule 3)
-    exp  ->  exp '*' exp .   (rule 3)
-    exp  ->  exp . '/' exp   (rule 4)
-
-    '/'         shift, and go to state 7
-
-    '/'         [reduce using rule 3 (exp)]
-    $default    reduce using rule 3 (exp)
-
-state 11
-
-    exp  ->  exp . '+' exp   (rule 1)
-    exp  ->  exp . '-' exp   (rule 2)
-    exp  ->  exp . '*' exp   (rule 3)
-    exp  ->  exp . '/' exp   (rule 4)
-    exp  ->  exp '/' exp .   (rule 4)
-
-    '+'         shift, and go to state 4
-    '-'         shift, and go to state 5
-    '*'         shift, and go to state 6
-    '/'         shift, and go to state 7
-
-    '+'         [reduce using rule 4 (exp)]
-    '-'         [reduce using rule 4 (exp)]
-    '*'         [reduce using rule 4 (exp)]
-    '/'         [reduce using rule 4 (exp)]
-    $default    reduce using rule 4 (exp)
-@end example
-
-@noindent
-Observe that state 11 contains conflicts not only due to the lack of
-precedence of @samp{/} with respect to @samp{+}, @samp{-}, and
-@samp{*}, but also because the
-associativity of @samp{/} is not specified.
-
-
-@node Tracing
-@section Tracing Your Parser
-@findex yydebug
-@cindex debugging
-@cindex tracing the parser
-
-If a Bison grammar compiles properly but doesn't do what you want when it
-runs, the @code{yydebug} parser-trace feature can help you figure out why.
-
-There are several means to enable compilation of trace facilities:
-
-@table @asis
-@item the macro @code{YYDEBUG}
-@findex YYDEBUG
-Define the macro @code{YYDEBUG} to a nonzero value when you compile the
-parser.  This is compliant with @acronym{POSIX} Yacc.  You could use
-@samp{-DYYDEBUG=1} as a compiler option or you could put @samp{#define
-YYDEBUG 1} in the prologue of the grammar file (@pxref{Prologue, , The
-Prologue}).
-
-@item the option @option{-t}, @option{--debug}
-Use the @samp{-t} option when you run Bison (@pxref{Invocation,
-,Invoking Bison}).  This is @acronym{POSIX} compliant too.
-
-@item the directive @samp{%debug}
-@findex %debug
-Add the @code{%debug} directive (@pxref{Decl Summary, ,Bison
-Declaration Summary}).  This is a Bison extension, which will prove
-useful when Bison will output parsers for languages that don't use a
-preprocessor.  Unless @acronym{POSIX} and Yacc portability matter to
-you, this is
-the preferred solution.
-@end table
-
-We suggest that you always enable the debug option so that debugging is
-always possible.
-
-The trace facility outputs messages with macro calls of the form
-@code{YYFPRINTF (stderr, @var{format}, @var{args})} where
-@var{format} and @var{args} are the usual @code{printf} format and
-arguments.  If you define @code{YYDEBUG} to a nonzero value but do not
-define @code{YYFPRINTF}, @code{<stdio.h>} is automatically included
-and @code{YYPRINTF} is defined to @code{fprintf}.
-
-Once you have compiled the program with trace facilities, the way to
-request a trace is to store a nonzero value in the variable @code{yydebug}.
-You can do this by making the C code do it (in @code{main}, perhaps), or
-you can alter the value with a C debugger.
-
-Each step taken by the parser when @code{yydebug} is nonzero produces a
-line or two of trace information, written on @code{stderr}.  The trace
-messages tell you these things:
-
-@itemize @bullet
-@item
-Each time the parser calls @code{yylex}, what kind of token was read.
-
-@item
-Each time a token is shifted, the depth and complete contents of the
-state stack (@pxref{Parser States}).
-
-@item
-Each time a rule is reduced, which rule it is, and the complete contents
-of the state stack afterward.
-@end itemize
-
-To make sense of this information, it helps to refer to the listing file
-produced by the Bison @samp{-v} option (@pxref{Invocation, ,Invoking
-Bison}).  This file shows the meaning of each state in terms of
-positions in various rules, and also what each state will do with each
-possible input token.  As you read the successive trace messages, you
-can see that the parser is functioning according to its specification in
-the listing file.  Eventually you will arrive at the place where
-something undesirable happens, and you will see which parts of the
-grammar are to blame.
-
-The parser file is a C program and you can use C debuggers on it, but it's
-not easy to interpret what it is doing.  The parser function is a
-finite-state machine interpreter, and aside from the actions it executes
-the same code over and over.  Only the values of variables show where in
-the grammar it is working.
-
-@findex YYPRINT
-The debugging information normally gives the token type of each token
-read, but not its semantic value.  You can optionally define a macro
-named @code{YYPRINT} to provide a way to print the value.  If you define
-@code{YYPRINT}, it should take three arguments.  The parser will pass a
-standard I/O stream, the numeric code for the token type, and the token
-value (from @code{yylval}).
-
-Here is an example of @code{YYPRINT} suitable for the multi-function
-calculator (@pxref{Mfcalc Decl, ,Declarations for @code{mfcalc}}):
-
-@smallexample
-%@{
-  static void print_token_value (FILE *, int, YYSTYPE);
-  #define YYPRINT(file, type, value) print_token_value (file, type, value)
-%@}
-
-@dots{} %% @dots{} %% @dots{}
-
-static void
-print_token_value (FILE *file, int type, YYSTYPE value)
-@{
-  if (type == VAR)
-    fprintf (file, "%s", value.tptr->name);
-  else if (type == NUM)
-    fprintf (file, "%d", value.val);
-@}
-@end smallexample
-
-@c ================================================= Invoking Bison
-
-@node Invocation
-@chapter Invoking Bison
-@cindex invoking Bison
-@cindex Bison invocation
-@cindex options for invoking Bison
-
-The usual way to invoke Bison is as follows:
-
-@example
-bison @var{infile}
-@end example
-
-Here @var{infile} is the grammar file name, which usually ends in
-@samp{.y}.  The parser file's name is made by replacing the @samp{.y}
-with @samp{.tab.c} and removing any leading directory.  Thus, the
-@samp{bison foo.y} file name yields
-@file{foo.tab.c}, and the @samp{bison hack/foo.y} file name yields
-@file{foo.tab.c}.  It's also possible, in case you are writing
-C++ code instead of C in your grammar file, to name it @file{foo.ypp}
-or @file{foo.y++}.  Then, the output files will take an extension like
-the given one as input (respectively @file{foo.tab.cpp} and
-@file{foo.tab.c++}).
-This feature takes effect with all options that manipulate file names like
-@samp{-o} or @samp{-d}.
-
-For example :
-
-@example
-bison -d @var{infile.yxx}
-@end example
-@noindent
-will produce @file{infile.tab.cxx} and @file{infile.tab.hxx}, and
-
-@example
-bison -d -o @var{output.c++} @var{infile.y}
-@end example
-@noindent
-will produce @file{output.c++} and @file{outfile.h++}.
-
-For compatibility with @acronym{POSIX}, the standard Bison
-distribution also contains a shell script called @command{yacc} that
-invokes Bison with the @option{-y} option.
-
-@menu
-* Bison Options::     All the options described in detail,
-                        in alphabetical order by short options.
-* Option Cross Key::  Alphabetical list of long options.
-* Yacc Library::      Yacc-compatible @code{yylex} and @code{main}.
-@end menu
-
-@node Bison Options
-@section Bison Options
-
-Bison supports both traditional single-letter options and mnemonic long
-option names.  Long option names are indicated with @samp{--} instead of
-@samp{-}.  Abbreviations for option names are allowed as long as they
-are unique.  When a long option takes an argument, like
-@samp{--file-prefix}, connect the option name and the argument with
-@samp{=}.
-
-Here is a list of options that can be used with Bison, alphabetized by
-short option.  It is followed by a cross key alphabetized by long
-option.
-
-@c Please, keep this ordered as in `bison --help'.
-@noindent
-Operations modes:
-@table @option
-@item -h
-@itemx --help
-Print a summary of the command-line options to Bison and exit.
-
-@item -V
-@itemx --version
-Print the version number of Bison and exit.
-
-@item --print-localedir
-Print the name of the directory containing locale-dependent data.
-
-@item -y
-@itemx --yacc
-Act more like the traditional Yacc command.  This can cause
-different diagnostics to be generated, and may change behavior in
-other minor ways.  Most importantly, imitate Yacc's output
-file name conventions, so that the parser output file is called
-@file{y.tab.c}, and the other outputs are called @file{y.output} and
-@file{y.tab.h}.  Thus, the following shell script can substitute
-for Yacc, and the Bison distribution contains such a script for
-compatibility with @acronym{POSIX}:
-
-@example
-#! /bin/sh
-bison -y "$@@"
-@end example
-
-The @option{-y}/@option{--yacc} option is intended for use with
-traditional Yacc grammars.  If your grammar uses a Bison extension
-like @samp{%glr-parser}, Bison might not be Yacc-compatible even if
-this option is specified.
-
-@end table
-
-@noindent
-Tuning the parser:
-
-@table @option
-@item -S @var{file}
-@itemx --skeleton=@var{file}
-Specify the skeleton to use.  You probably don't need this option unless
-you are developing Bison.
-
-@item -t
-@itemx --debug
-In the parser file, define the macro @code{YYDEBUG} to 1 if it is not
-already defined, so that the debugging facilities are compiled.
-@xref{Tracing, ,Tracing Your Parser}.
-
-@item --locations
-Pretend that @code{%locations} was specified.  @xref{Decl Summary}.
-
-@item -p @var{prefix}
-@itemx --name-prefix=@var{prefix}
-Pretend that @code{%name-prefix="@var{prefix}"} was specified.
-@xref{Decl Summary}.
-
-@item -l
-@itemx --no-lines
-Don't put any @code{#line} preprocessor commands in the parser file.
-Ordinarily Bison puts them in the parser file so that the C compiler
-and debuggers will associate errors with your source file, the
-grammar file.  This option causes them to associate errors with the
-parser file, treating it as an independent source file in its own right.
-
-@item -n
-@itemx --no-parser
-Pretend that @code{%no-parser} was specified.  @xref{Decl Summary}.
-
-@item -k
-@itemx --token-table
-Pretend that @code{%token-table} was specified.  @xref{Decl Summary}.
-@end table
-
-@noindent
-Adjust the output:
-
-@table @option
-@item -d
-@itemx --defines
-Pretend that @code{%defines} was specified, i.e., write an extra output
-file containing macro definitions for the token type names defined in
-the grammar, as well as a few other declarations.  @xref{Decl Summary}.
-
-@item --defines=@var{defines-file}
-Same as above, but save in the file @var{defines-file}.
-
-@item -b @var{file-prefix}
-@itemx --file-prefix=@var{prefix}
-Pretend that @code{%file-prefix} was specified, i.e, specify prefix to use
-for all Bison output file names.  @xref{Decl Summary}.
-
-@item -r @var{things}
-@itemx --report=@var{things}
-Write an extra output file containing verbose description of the comma
-separated list of @var{things} among:
-
-@table @code
-@item state
-Description of the grammar, conflicts (resolved and unresolved), and
-@acronym{LALR} automaton.
-
-@item look-ahead
-Implies @code{state} and augments the description of the automaton with
-each rule's look-ahead set.
-
-@item itemset
-Implies @code{state} and augments the description of the automaton with
-the full set of items for each state, instead of its core only.
-@end table
-
-@item -v
-@itemx --verbose
-Pretend that @code{%verbose} was specified, i.e, write an extra output
-file containing verbose descriptions of the grammar and
-parser.  @xref{Decl Summary}.
-
-@item -o @var{file}
-@itemx --output=@var{file}
-Specify the @var{file} for the parser file.
-
-The other output files' names are constructed from @var{file} as
-described under the @samp{-v} and @samp{-d} options.
-
-@item -g
-Output a @acronym{VCG} definition of the @acronym{LALR}(1) grammar
-automaton computed by Bison.  If the grammar file is @file{foo.y}, the
-@acronym{VCG} output file will
-be @file{foo.vcg}.
-
-@item --graph=@var{graph-file}
-The behavior of @var{--graph} is the same than @samp{-g}.  The only
-difference is that it has an optional argument which is the name of
-the output graph file.
-@end table
-
-@node Option Cross Key
-@section Option Cross Key
-
-@c FIXME: How about putting the directives too?
-Here is a list of options, alphabetized by long option, to help you find
-the corresponding short option.
-
-@multitable {@option{--defines=@var{defines-file}}} {@option{-b @var{file-prefix}XXX}}
-@headitem Long Option @tab Short Option
-@item @option{--debug}                      @tab @option{-t}
-@item @option{--defines=@var{defines-file}} @tab @option{-d}
-@item @option{--file-prefix=@var{prefix}}   @tab @option{-b @var{file-prefix}}
-@item @option{--graph=@var{graph-file}}     @tab @option{-d}
-@item @option{--help}                       @tab @option{-h}
-@item @option{--name-prefix=@var{prefix}}   @tab @option{-p @var{name-prefix}}
-@item @option{--no-lines}                   @tab @option{-l}
-@item @option{--no-parser}                  @tab @option{-n}
-@item @option{--output=@var{outfile}}       @tab @option{-o @var{outfile}}
-@item @option{--print-localedir}            @tab
-@item @option{--token-table}                @tab @option{-k}
-@item @option{--verbose}                    @tab @option{-v}
-@item @option{--version}                    @tab @option{-V}
-@item @option{--yacc}                       @tab @option{-y}
-@end multitable
-
-@node Yacc Library
-@section Yacc Library
-
-The Yacc library contains default implementations of the
-@code{yyerror} and @code{main} functions.  These default
-implementations are normally not useful, but @acronym{POSIX} requires
-them.  To use the Yacc library, link your program with the
-@option{-ly} option.  Note that Bison's implementation of the Yacc
-library is distributed under the terms of the @acronym{GNU} General
-Public License (@pxref{Copying}).
-
-If you use the Yacc library's @code{yyerror} function, you should
-declare @code{yyerror} as follows:
-
-@example
-int yyerror (char const *);
-@end example
-
-Bison ignores the @code{int} value returned by this @code{yyerror}.
-If you use the Yacc library's @code{main} function, your
-@code{yyparse} function should have the following type signature:
-
-@example
-int yyparse (void);
-@end example
-
-@c ================================================= C++ Bison
-
-@node C++ Language Interface
-@chapter C++ Language Interface
-
-@menu
-* C++ Parsers::                 The interface to generate C++ parser classes
-* A Complete C++ Example::      Demonstrating their use
-@end menu
-
-@node C++ Parsers
-@section C++ Parsers
-
-@menu
-* C++ Bison Interface::         Asking for C++ parser generation
-* C++ Semantic Values::         %union vs. C++
-* C++ Location Values::         The position and location classes
-* C++ Parser Interface::        Instantiating and running the parser
-* C++ Scanner Interface::       Exchanges between yylex and parse
-@end menu
-
-@node C++ Bison Interface
-@subsection C++ Bison Interface
-@c - %skeleton "lalr1.cc"
-@c - Always pure
-@c - initial action
-
-The C++ parser @acronym{LALR}(1) skeleton is named @file{lalr1.cc}.  To
-select it, you may either pass the option @option{--skeleton=lalr1.cc}
-to Bison, or include the directive @samp{%skeleton "lalr1.cc"} in the
-grammar preamble.  When run, @command{bison} will create several
-entities in the @samp{yy} namespace.  Use the @samp{%name-prefix}
-directive to change the namespace name, see @ref{Decl Summary}.  The
-various classes are generated in the following files:
-
-@table @file
-@item position.hh
-@itemx location.hh
-The definition of the classes @code{position} and @code{location},
-used for location tracking.  @xref{C++ Location Values}.
-
-@item stack.hh
-An auxiliary class @code{stack} used by the parser.
-
-@item @var{file}.hh
-@itemx @var{file}.cc
-(Assuming the extension of the input file was @samp{.yy}.)  The
-declaration and implementation of the C++ parser class.  The basename
-and extension of these two files follow the same rules as with regular C
-parsers (@pxref{Invocation}).
-
-The header is @emph{mandatory}; you must either pass
-@option{-d}/@option{--defines} to @command{bison}, or use the
-@samp{%defines} directive.
-@end table
-
-All these files are documented using Doxygen; run @command{doxygen}
-for a complete and accurate documentation.
-
-@node C++ Semantic Values
-@subsection C++ Semantic Values
-@c - No objects in unions
-@c - YSTYPE
-@c - Printer and destructor
-
-The @code{%union} directive works as for C, see @ref{Union Decl, ,The
-Collection of Value Types}.  In particular it produces a genuine
-@code{union}@footnote{In the future techniques to allow complex types
-within pseudo-unions (similar to Boost variants) might be implemented to
-alleviate these issues.}, which have a few specific features in C++.
-@itemize @minus
-@item
-The type @code{YYSTYPE} is defined but its use is discouraged: rather
-you should refer to the parser's encapsulated type
-@code{yy::parser::semantic_type}.
-@item
-Non POD (Plain Old Data) types cannot be used.  C++ forbids any
-instance of classes with constructors in unions: only @emph{pointers}
-to such objects are allowed.
-@end itemize
-
-Because objects have to be stored via pointers, memory is not
-reclaimed automatically: using the @code{%destructor} directive is the
-only means to avoid leaks.  @xref{Destructor Decl, , Freeing Discarded
-Symbols}.
-
-
-@node C++ Location Values
-@subsection C++ Location Values
-@c - %locations
-@c - class Position
-@c - class Location
-@c - %define "filename_type" "const symbol::Symbol"
-
-When the directive @code{%locations} is used, the C++ parser supports
-location tracking, see @ref{Locations, , Locations Overview}.  Two
-auxiliary classes define a @code{position}, a single point in a file,
-and a @code{location}, a range composed of a pair of
-@code{position}s (possibly spanning several files).
-
-@deftypemethod {position} {std::string*} file
-The name of the file.  It will always be handled as a pointer, the
-parser will never duplicate nor deallocate it.  As an experimental
-feature you may change it to @samp{@var{type}*} using @samp{%define
-"filename_type" "@var{type}"}.
-@end deftypemethod
-
-@deftypemethod {position} {unsigned int} line
-The line, starting at 1.
-@end deftypemethod
-
-@deftypemethod {position} {unsigned int} lines (int @var{height} = 1)
-Advance by @var{height} lines, resetting the column number.
-@end deftypemethod
-
-@deftypemethod {position} {unsigned int} column
-The column, starting at 0.
-@end deftypemethod
-
-@deftypemethod {position} {unsigned int} columns (int @var{width} = 1)
-Advance by @var{width} columns, without changing the line number.
-@end deftypemethod
-
-@deftypemethod {position} {position&} operator+= (position& @var{pos}, int @var{width})
-@deftypemethodx {position} {position} operator+ (const position& @var{pos}, int @var{width})
-@deftypemethodx {position} {position&} operator-= (const position& @var{pos}, int @var{width})
-@deftypemethodx {position} {position} operator- (position& @var{pos}, int @var{width})
-Various forms of syntactic sugar for @code{columns}.
-@end deftypemethod
-
-@deftypemethod {position} {position} operator<< (std::ostream @var{o}, const position& @var{p})
-Report @var{p} on @var{o} like this:
-@samp{@var{file}:@var{line}.@var{column}}, or
-@samp{@var{line}.@var{column}} if @var{file} is null.
-@end deftypemethod
-
-@deftypemethod {location} {position} begin
-@deftypemethodx {location} {position} end
-The first, inclusive, position of the range, and the first beyond.
-@end deftypemethod
-
-@deftypemethod {location} {unsigned int} columns (int @var{width} = 1)
-@deftypemethodx {location} {unsigned int} lines (int @var{height} = 1)
-Advance the @code{end} position.
-@end deftypemethod
-
-@deftypemethod {location} {location} operator+ (const location& @var{begin}, const location& @var{end})
-@deftypemethodx {location} {location} operator+ (const location& @var{begin}, int @var{width})
-@deftypemethodx {location} {location} operator+= (const location& @var{loc}, int @var{width})
-Various forms of syntactic sugar.
-@end deftypemethod
-
-@deftypemethod {location} {void} step ()
-Move @code{begin} onto @code{end}.
-@end deftypemethod
-
-
-@node C++ Parser Interface
-@subsection C++ Parser Interface
-@c - define parser_class_name
-@c - Ctor
-@c - parse, error, set_debug_level, debug_level, set_debug_stream,
-@c   debug_stream.
-@c - Reporting errors
-
-The output files @file{@var{output}.hh} and @file{@var{output}.cc}
-declare and define the parser class in the namespace @code{yy}.  The
-class name defaults to @code{parser}, but may be changed using
-@samp{%define "parser_class_name" "@var{name}"}.  The interface of
-this class is detailed below.  It can be extended using the
-@code{%parse-param} feature: its semantics is slightly changed since
-it describes an additional member of the parser class, and an
-additional argument for its constructor.
-
-@defcv {Type} {parser} {semantic_value_type}
-@defcvx {Type} {parser} {location_value_type}
-The types for semantics value and locations.
-@end defcv
-
-@deftypemethod {parser} {} parser (@var{type1} @var{arg1}, ...)
-Build a new parser object.  There are no arguments by default, unless
-@samp{%parse-param @{@var{type1} @var{arg1}@}} was used.
-@end deftypemethod
-
-@deftypemethod {parser} {int} parse ()
-Run the syntactic analysis, and return 0 on success, 1 otherwise.
-@end deftypemethod
-
-@deftypemethod {parser} {std::ostream&} debug_stream ()
-@deftypemethodx {parser} {void} set_debug_stream (std::ostream& @var{o})
-Get or set the stream used for tracing the parsing.  It defaults to
-@code{std::cerr}.
-@end deftypemethod
-
-@deftypemethod {parser} {debug_level_type} debug_level ()
-@deftypemethodx {parser} {void} set_debug_level (debug_level @var{l})
-Get or set the tracing level.  Currently its value is either 0, no trace,
-or nonzero, full tracing.
-@end deftypemethod
-
-@deftypemethod {parser} {void} error (const location_type& @var{l}, const std::string& @var{m})
-The definition for this member function must be supplied by the user:
-the parser uses it to report a parser error occurring at @var{l},
-described by @var{m}.
-@end deftypemethod
-
-
-@node C++ Scanner Interface
-@subsection C++ Scanner Interface
-@c - prefix for yylex.
-@c - Pure interface to yylex
-@c - %lex-param
-
-The parser invokes the scanner by calling @code{yylex}.  Contrary to C
-parsers, C++ parsers are always pure: there is no point in using the
-@code{%pure-parser} directive.  Therefore the interface is as follows.
-
-@deftypemethod {parser} {int} yylex (semantic_value_type& @var{yylval}, location_type& @var{yylloc}, @var{type1} @var{arg1}, ...)
-Return the next token.  Its type is the return value, its semantic
-value and location being @var{yylval} and @var{yylloc}.  Invocations of
-@samp{%lex-param @{@var{type1} @var{arg1}@}} yield additional arguments.
-@end deftypemethod
-
-
-@node A Complete C++ Example
-@section A Complete C++ Example
-
-This section demonstrates the use of a C++ parser with a simple but
-complete example.  This example should be available on your system,
-ready to compile, in the directory @dfn{../bison/examples/calc++}.  It
-focuses on the use of Bison, therefore the design of the various C++
-classes is very naive: no accessors, no encapsulation of members etc.
-We will use a Lex scanner, and more precisely, a Flex scanner, to
-demonstrate the various interaction.  A hand written scanner is
-actually easier to interface with.
-
-@menu
-* Calc++ --- C++ Calculator::   The specifications
-* Calc++ Parsing Driver::       An active parsing context
-* Calc++ Parser::               A parser class
-* Calc++ Scanner::              A pure C++ Flex scanner
-* Calc++ Top Level::            Conducting the band
-@end menu
-
-@node Calc++ --- C++ Calculator
-@subsection Calc++ --- C++ Calculator
-
-Of course the grammar is dedicated to arithmetics, a single
-expression, possibly preceded by variable assignments.  An
-environment containing possibly predefined variables such as
-@code{one} and @code{two}, is exchanged with the parser.  An example
-of valid input follows.
-
-@example
-three := 3
-seven := one + two * three
-seven * seven
-@end example
-
-@node Calc++ Parsing Driver
-@subsection Calc++ Parsing Driver
-@c - An env
-@c - A place to store error messages
-@c - A place for the result
-
-To support a pure interface with the parser (and the scanner) the
-technique of the ``parsing context'' is convenient: a structure
-containing all the data to exchange.  Since, in addition to simply
-launch the parsing, there are several auxiliary tasks to execute (open
-the file for parsing, instantiate the parser etc.), we recommend
-transforming the simple parsing context structure into a fully blown
-@dfn{parsing driver} class.
-
-The declaration of this driver class, @file{calc++-driver.hh}, is as
-follows.  The first part includes the CPP guard and imports the
-required standard library components, and the declaration of the parser
-class.
-
-@comment file: calc++-driver.hh
-@example
-#ifndef CALCXX_DRIVER_HH
-# define CALCXX_DRIVER_HH
-# include <string>
-# include <map>
-# include "calc++-parser.hh"
-@end example
-
-
-@noindent
-Then comes the declaration of the scanning function.  Flex expects
-the signature of @code{yylex} to be defined in the macro
-@code{YY_DECL}, and the C++ parser expects it to be declared.  We can
-factor both as follows.
-
-@comment file: calc++-driver.hh
-@example
-// Announce to Flex the prototype we want for lexing function, ...
-# define YY_DECL					\
-  yy::calcxx_parser::token_type                         \
-  yylex (yy::calcxx_parser::semantic_type* yylval,      \
-         yy::calcxx_parser::location_type* yylloc,      \
-         calcxx_driver& driver)
-// ... and declare it for the parser's sake.
-YY_DECL;
-@end example
-
-@noindent
-The @code{calcxx_driver} class is then declared with its most obvious
-members.
-
-@comment file: calc++-driver.hh
-@example
-// Conducting the whole scanning and parsing of Calc++.
-class calcxx_driver
-@{
-public:
-  calcxx_driver ();
-  virtual ~calcxx_driver ();
-
-  std::map<std::string, int> variables;
-
-  int result;
-@end example
-
-@noindent
-To encapsulate the coordination with the Flex scanner, it is useful to
-have two members function to open and close the scanning phase.
-members.
-
-@comment file: calc++-driver.hh
-@example
-  // Handling the scanner.
-  void scan_begin ();
-  void scan_end ();
-  bool trace_scanning;
-@end example
-
-@noindent
-Similarly for the parser itself.
-
-@comment file: calc++-driver.hh
-@example
-  // Handling the parser.
-  void parse (const std::string& f);
-  std::string file;
-  bool trace_parsing;
-@end example
-
-@noindent
-To demonstrate pure handling of parse errors, instead of simply
-dumping them on the standard error output, we will pass them to the
-compiler driver using the following two member functions.  Finally, we
-close the class declaration and CPP guard.
-
-@comment file: calc++-driver.hh
-@example
-  // Error handling.
-  void error (const yy::location& l, const std::string& m);
-  void error (const std::string& m);
-@};
-#endif // ! CALCXX_DRIVER_HH
-@end example
-
-The implementation of the driver is straightforward.  The @code{parse}
-member function deserves some attention.  The @code{error} functions
-are simple stubs, they should actually register the located error
-messages and set error state.
-
-@comment file: calc++-driver.cc
-@example
-#include "calc++-driver.hh"
-#include "calc++-parser.hh"
-
-calcxx_driver::calcxx_driver ()
-  : trace_scanning (false), trace_parsing (false)
-@{
-  variables["one"] = 1;
-  variables["two"] = 2;
-@}
-
-calcxx_driver::~calcxx_driver ()
-@{
-@}
-
-void
-calcxx_driver::parse (const std::string &f)
-@{
-  file = f;
-  scan_begin ();
-  yy::calcxx_parser parser (*this);
-  parser.set_debug_level (trace_parsing);
-  parser.parse ();
-  scan_end ();
-@}
-
-void
-calcxx_driver::error (const yy::location& l, const std::string& m)
-@{
-  std::cerr << l << ": " << m << std::endl;
-@}
-
-void
-calcxx_driver::error (const std::string& m)
-@{
-  std::cerr << m << std::endl;
-@}
-@end example
-
-@node Calc++ Parser
-@subsection Calc++ Parser
-
-The parser definition file @file{calc++-parser.yy} starts by asking for
-the C++ LALR(1) skeleton, the creation of the parser header file, and
-specifies the name of the parser class.  Because the C++ skeleton
-changed several times, it is safer to require the version you designed
-the grammar for.
-
-@comment file: calc++-parser.yy
-@example
-%skeleton "lalr1.cc"                          /*  -*- C++ -*- */
-%require "2.1a"
-%defines
-%define "parser_class_name" "calcxx_parser"
-@end example
-
-@noindent
-Then come the declarations/inclusions needed to define the
-@code{%union}.  Because the parser uses the parsing driver and
-reciprocally, both cannot include the header of the other.  Because the
-driver's header needs detailed knowledge about the parser class (in
-particular its inner types), it is the parser's header which will simply
-use a forward declaration of the driver.
-
-@comment file: calc++-parser.yy
-@example
-%@{
-# include <string>
-class calcxx_driver;
-%@}
-@end example
-
-@noindent
-The driver is passed by reference to the parser and to the scanner.
-This provides a simple but effective pure interface, not relying on
-global variables.
-
-@comment file: calc++-parser.yy
-@example
-// The parsing context.
-%parse-param @{ calcxx_driver& driver @}
-%lex-param   @{ calcxx_driver& driver @}
-@end example
-
-@noindent
-Then we request the location tracking feature, and initialize the
-first location's file name.  Afterwards new locations are computed
-relatively to the previous locations: the file name will be
-automatically propagated.
-
-@comment file: calc++-parser.yy
-@example
-%locations
-%initial-action
-@{
-  // Initialize the initial location.
-  @@$.begin.filename = @@$.end.filename = &driver.file;
-@};
-@end example
-
-@noindent
-Use the two following directives to enable parser tracing and verbose
-error messages.
-
-@comment file: calc++-parser.yy
-@example
-%debug
-%error-verbose
-@end example
-
-@noindent
-Semantic values cannot use ``real'' objects, but only pointers to
-them.
-
-@comment file: calc++-parser.yy
-@example
-// Symbols.
-%union
-@{
-  int          ival;
-  std::string *sval;
-@};
-@end example
-
-@noindent
-The code between @samp{%@{} and @samp{%@}} after the introduction of the
-@samp{%union} is output in the @file{*.cc} file; it needs detailed
-knowledge about the driver.
-
-@comment file: calc++-parser.yy
-@example
-%@{
-# include "calc++-driver.hh"
-%@}
-@end example
-
-
-@noindent
-The token numbered as 0 corresponds to end of file; the following line
-allows for nicer error messages referring to ``end of file'' instead
-of ``$end''.  Similarly user friendly named are provided for each
-symbol.  Note that the tokens names are prefixed by @code{TOKEN_} to
-avoid name clashes.
-
-@comment file: calc++-parser.yy
-@example
-%token        END      0 "end of file"
-%token        ASSIGN     ":="
-%token <sval> IDENTIFIER "identifier"
-%token <ival> NUMBER     "number"
-%type  <ival> exp        "expression"
-@end example
-
-@noindent
-To enable memory deallocation during error recovery, use
-@code{%destructor}.
-
-@c FIXME: Document %printer, and mention that it takes a braced-code operand.
-@comment file: calc++-parser.yy
-@example
-%printer    @{ debug_stream () << *$$; @} "identifier"
-%destructor @{ delete $$; @} "identifier"
-
-%printer    @{ debug_stream () << $$; @} "number" "expression"
-@end example
-
-@noindent
-The grammar itself is straightforward.
-
-@comment file: calc++-parser.yy
-@example
-%%
-%start unit;
-unit: assignments exp  @{ driver.result = $2; @};
-
-assignments: assignments assignment @{@}
-           | /* Nothing.  */        @{@};
-
-assignment: "identifier" ":=" exp @{ driver.variables[*$1] = $3; @};
-
-%left '+' '-';
-%left '*' '/';
-exp: exp '+' exp   @{ $$ = $1 + $3; @}
-   | exp '-' exp   @{ $$ = $1 - $3; @}
-   | exp '*' exp   @{ $$ = $1 * $3; @}
-   | exp '/' exp   @{ $$ = $1 / $3; @}
-   | "identifier"  @{ $$ = driver.variables[*$1]; @}
-   | "number"      @{ $$ = $1; @};
-%%
-@end example
-
-@noindent
-Finally the @code{error} member function registers the errors to the
-driver.
-
-@comment file: calc++-parser.yy
-@example
-void
-yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l,
-                          const std::string& m)
-@{
-  driver.error (l, m);
-@}
-@end example
-
-@node Calc++ Scanner
-@subsection Calc++ Scanner
-
-The Flex scanner first includes the driver declaration, then the
-parser's to get the set of defined tokens.
-
-@comment file: calc++-scanner.ll
-@example
-%@{                                            /* -*- C++ -*- */
-# include <cstdlib>
-# include <errno.h>
-# include <limits.h>
-# include <string>
-# include "calc++-driver.hh"
-# include "calc++-parser.hh"
-
-/* Work around an incompatibility in flex (at least versions
-   2.5.31 through 2.5.33): it generates code that does
-   not conform to C89.  See Debian bug 333231
-   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
-# undef yywrap
-# define yywrap() 1
-
-/* By default yylex returns int, we use token_type.
-   Unfortunately yyterminate by default returns 0, which is
-   not of token_type.  */
-#define yyterminate() return token::END
-%@}
-@end example
-
-@noindent
-Because there is no @code{#include}-like feature we don't need
-@code{yywrap}, we don't need @code{unput} either, and we parse an
-actual file, this is not an interactive session with the user.
-Finally we enable the scanner tracing features.
-
-@comment file: calc++-scanner.ll
-@example
-%option noyywrap nounput batch debug
-@end example
-
-@noindent
-Abbreviations allow for more readable rules.
-
-@comment file: calc++-scanner.ll
-@example
-id    [a-zA-Z][a-zA-Z_0-9]*
-int   [0-9]+
-blank [ \t]
-@end example
-
-@noindent
-The following paragraph suffices to track locations accurately.  Each
-time @code{yylex} is invoked, the begin position is moved onto the end
-position.  Then when a pattern is matched, the end position is
-advanced of its width.  In case it matched ends of lines, the end
-cursor is adjusted, and each time blanks are matched, the begin cursor
-is moved onto the end cursor to effectively ignore the blanks
-preceding tokens.  Comments would be treated equally.
-
-@comment file: calc++-scanner.ll
-@example
-%@{
-# define YY_USER_ACTION  yylloc->columns (yyleng);
-%@}
-%%
-%@{
-  yylloc->step ();
-%@}
-@{blank@}+   yylloc->step ();
-[\n]+      yylloc->lines (yyleng); yylloc->step ();
-@end example
-
-@noindent
-The rules are simple, just note the use of the driver to report errors.
-It is convenient to use a typedef to shorten
-@code{yy::calcxx_parser::token::identifier} into
-@code{token::identifier} for instance.
-
-@comment file: calc++-scanner.ll
-@example
-%@{
-  typedef yy::calcxx_parser::token token;
-%@}
-           /* Convert ints to the actual type of tokens.  */
-[-+*/]     return yy::calcxx_parser::token_type (yytext[0]);
-":="       return token::ASSIGN;
-@{int@}      @{
-  errno = 0;
-  long n = strtol (yytext, NULL, 10);
-  if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
-    driver.error (*yylloc, "integer is out of range");
-  yylval->ival = n;
-  return token::NUMBER;
-@}
-@{id@}       yylval->sval = new std::string (yytext); return token::IDENTIFIER;
-.          driver.error (*yylloc, "invalid character");
-%%
-@end example
-
-@noindent
-Finally, because the scanner related driver's member function depend
-on the scanner's data, it is simpler to implement them in this file.
-
-@comment file: calc++-scanner.ll
-@example
-void
-calcxx_driver::scan_begin ()
-@{
-  yy_flex_debug = trace_scanning;
-  if (!(yyin = fopen (file.c_str (), "r")))
-    error (std::string ("cannot open ") + file);
-@}
-
-void
-calcxx_driver::scan_end ()
-@{
-  fclose (yyin);
-@}
-@end example
-
-@node Calc++ Top Level
-@subsection Calc++ Top Level
-
-The top level file, @file{calc++.cc}, poses no problem.
-
-@comment file: calc++.cc
-@example
-#include <iostream>
-#include "calc++-driver.hh"
-
-int
-main (int argc, char *argv[])
-@{
-  calcxx_driver driver;
-  for (++argv; argv[0]; ++argv)
-    if (*argv == std::string ("-p"))
-      driver.trace_parsing = true;
-    else if (*argv == std::string ("-s"))
-      driver.trace_scanning = true;
-    else
-      @{
-	driver.parse (*argv);
-	std::cout << driver.result << std::endl;
-      @}
-@}
-@end example
-
-@c ================================================= FAQ
-
-@node FAQ
-@chapter Frequently Asked Questions
-@cindex frequently asked questions
-@cindex questions
-
-Several questions about Bison come up occasionally.  Here some of them
-are addressed.
-
-@menu
-* Memory Exhausted::            Breaking the Stack Limits
-* How Can I Reset the Parser::  @code{yyparse} Keeps some State
-* Strings are Destroyed::       @code{yylval} Loses Track of Strings
-* Implementing Gotos/Loops::    Control Flow in the Calculator
-* Multiple start-symbols::      Factoring closely related grammars
-* Secure?  Conform?::           Is Bison @acronym{POSIX} safe?
-* I can't build Bison::         Troubleshooting
-* Where can I find help?::      Troubleshouting
-* Bug Reports::                 Troublereporting
-* Other Languages::             Parsers in Java and others
-* Beta Testing::                Experimenting development versions
-* Mailing Lists::               Meeting other Bison users
-@end menu
-
-@node Memory Exhausted
-@section Memory Exhausted
-
-@display
-My parser returns with error with a @samp{memory exhausted}
-message.  What can I do?
-@end display
-
-This question is already addressed elsewhere, @xref{Recursion,
-,Recursive Rules}.
-
-@node How Can I Reset the Parser
-@section How Can I Reset the Parser
-
-The following phenomenon has several symptoms, resulting in the
-following typical questions:
-
-@display
-I invoke @code{yyparse} several times, and on correct input it works
-properly; but when a parse error is found, all the other calls fail
-too.  How can I reset the error flag of @code{yyparse}?
-@end display
-
-@noindent
-or
-
-@display
-My parser includes support for an @samp{#include}-like feature, in
-which case I run @code{yyparse} from @code{yyparse}.  This fails
-although I did specify I needed a @code{%pure-parser}.
-@end display
-
-These problems typically come not from Bison itself, but from
-Lex-generated scanners.  Because these scanners use large buffers for
-speed, they might not notice a change of input file.  As a
-demonstration, consider the following source file,
-@file{first-line.l}:
-
-@verbatim
-%{
-#include <stdio.h>
-#include <stdlib.h>
-%}
-%%
-.*\n    ECHO; return 1;
-%%
-int
-yyparse (char const *file)
-{
-  yyin = fopen (file, "r");
-  if (!yyin)
-    exit (2);
-  /* One token only.  */
-  yylex ();
-  if (fclose (yyin) != 0)
-    exit (3);
-  return 0;
-}
-
-int
-main (void)
-{
-  yyparse ("input");
-  yyparse ("input");
-  return 0;
-}
-@end verbatim
-
-@noindent
-If the file @file{input} contains
-
-@verbatim
-input:1: Hello,
-input:2: World!
-@end verbatim
-
-@noindent
-then instead of getting the first line twice, you get:
-
-@example
-$ @kbd{flex -ofirst-line.c first-line.l}
-$ @kbd{gcc  -ofirst-line   first-line.c -ll}
-$ @kbd{./first-line}
-input:1: Hello,
-input:2: World!
-@end example
-
-Therefore, whenever you change @code{yyin}, you must tell the
-Lex-generated scanner to discard its current buffer and switch to the
-new one.  This depends upon your implementation of Lex; see its
-documentation for more.  For Flex, it suffices to call
-@samp{YY_FLUSH_BUFFER} after each change to @code{yyin}.  If your
-Flex-generated scanner needs to read from several input streams to
-handle features like include files, you might consider using Flex
-functions like @samp{yy_switch_to_buffer} that manipulate multiple
-input buffers.
-
-If your Flex-generated scanner uses start conditions (@pxref{Start
-conditions, , Start conditions, flex, The Flex Manual}), you might
-also want to reset the scanner's state, i.e., go back to the initial
-start condition, through a call to @samp{BEGIN (0)}.
-
-@node Strings are Destroyed
-@section Strings are Destroyed
-
-@display
-My parser seems to destroy old strings, or maybe it loses track of
-them.  Instead of reporting @samp{"foo", "bar"}, it reports
-@samp{"bar", "bar"}, or even @samp{"foo\nbar", "bar"}.
-@end display
-
-This error is probably the single most frequent ``bug report'' sent to
-Bison lists, but is only concerned with a misunderstanding of the role
-of the scanner.  Consider the following Lex code:
-
-@verbatim
-%{
-#include <stdio.h>
-char *yylval = NULL;
-%}
-%%
-.*    yylval = yytext; return 1;
-\n    /* IGNORE */
-%%
-int
-main ()
-{
-  /* Similar to using $1, $2 in a Bison action.  */
-  char *fst = (yylex (), yylval);
-  char *snd = (yylex (), yylval);
-  printf ("\"%s\", \"%s\"\n", fst, snd);
-  return 0;
-}
-@end verbatim
-
-If you compile and run this code, you get:
-
-@example
-$ @kbd{flex -osplit-lines.c split-lines.l}
-$ @kbd{gcc  -osplit-lines   split-lines.c -ll}
-$ @kbd{printf 'one\ntwo\n' | ./split-lines}
-"one
-two", "two"
-@end example
-
-@noindent
-this is because @code{yytext} is a buffer provided for @emph{reading}
-in the action, but if you want to keep it, you have to duplicate it
-(e.g., using @code{strdup}).  Note that the output may depend on how
-your implementation of Lex handles @code{yytext}.  For instance, when
-given the Lex compatibility option @option{-l} (which triggers the
-option @samp{%array}) Flex generates a different behavior:
-
-@example
-$ @kbd{flex -l -osplit-lines.c split-lines.l}
-$ @kbd{gcc     -osplit-lines   split-lines.c -ll}
-$ @kbd{printf 'one\ntwo\n' | ./split-lines}
-"two", "two"
-@end example
-
-
-@node Implementing Gotos/Loops
-@section Implementing Gotos/Loops
-
-@display
-My simple calculator supports variables, assignments, and functions,
-but how can I implement gotos, or loops?
-@end display
-
-Although very pedagogical, the examples included in the document blur
-the distinction to make between the parser---whose job is to recover
-the structure of a text and to transmit it to subsequent modules of
-the program---and the processing (such as the execution) of this
-structure.  This works well with so called straight line programs,
-i.e., precisely those that have a straightforward execution model:
-execute simple instructions one after the others.
-
-@cindex abstract syntax tree
-@cindex @acronym{AST}
-If you want a richer model, you will probably need to use the parser
-to construct a tree that does represent the structure it has
-recovered; this tree is usually called the @dfn{abstract syntax tree},
-or @dfn{@acronym{AST}} for short.  Then, walking through this tree,
-traversing it in various ways, will enable treatments such as its
-execution or its translation, which will result in an interpreter or a
-compiler.
-
-This topic is way beyond the scope of this manual, and the reader is
-invited to consult the dedicated literature.
-
-
-@node Multiple start-symbols
-@section Multiple start-symbols
-
-@display
-I have several closely related grammars, and I would like to share their
-implementations.  In fact, I could use a single grammar but with
-multiple entry points.
-@end display
-
-Bison does not support multiple start-symbols, but there is a very
-simple means to simulate them.  If @code{foo} and @code{bar} are the two
-pseudo start-symbols, then introduce two new tokens, say
-@code{START_FOO} and @code{START_BAR}, and use them as switches from the
-real start-symbol:
-
-@example
-%token START_FOO START_BAR;
-%start start;
-start: START_FOO foo
-     | START_BAR bar;
-@end example
-
-These tokens prevents the introduction of new conflicts.  As far as the
-parser goes, that is all that is needed.
-
-Now the difficult part is ensuring that the scanner will send these
-tokens first.  If your scanner is hand-written, that should be
-straightforward.  If your scanner is generated by Lex, them there is
-simple means to do it: recall that anything between @samp{%@{ ... %@}}
-after the first @code{%%} is copied verbatim in the top of the generated
-@code{yylex} function.  Make sure a variable @code{start_token} is
-available in the scanner (e.g., a global variable or using
-@code{%lex-param} etc.), and use the following:
-
-@example
-  /* @r{Prologue.}  */
-%%
-%@{
-  if (start_token)
-    @{
-      int t = start_token;
-      start_token = 0;
-      return t;
-    @}
-%@}
-  /* @r{The rules.}  */
-@end example
-
-
-@node Secure?  Conform?
-@section Secure?  Conform?
-
-@display
-Is Bison secure?  Does it conform to POSIX?
-@end display
-
-If you're looking for a guarantee or certification, we don't provide it.
-However, Bison is intended to be a reliable program that conforms to the
-@acronym{POSIX} specification for Yacc.  If you run into problems,
-please send us a bug report.
-
-@node I can't build Bison
-@section I can't build Bison
-
-@display
-I can't build Bison because @command{make} complains that
-@code{msgfmt} is not found.
-What should I do?
-@end display
-
-Like most GNU packages with internationalization support, that feature
-is turned on by default.  If you have problems building in the @file{po}
-subdirectory, it indicates that your system's internationalization
-support is lacking.  You can re-configure Bison with
-@option{--disable-nls} to turn off this support, or you can install GNU
-gettext from @url{ftp://ftp.gnu.org/gnu/gettext/} and re-configure
-Bison.  See the file @file{ABOUT-NLS} for more information.
-
-
-@node Where can I find help?
-@section Where can I find help?
-
-@display
-I'm having trouble using Bison.  Where can I find help?
-@end display
-
-First, read this fine manual.  Beyond that, you can send mail to
-@email{help-bison@@gnu.org}.  This mailing list is intended to be
-populated with people who are willing to answer questions about using
-and installing Bison.  Please keep in mind that (most of) the people on
-the list have aspects of their lives which are not related to Bison (!),
-so you may not receive an answer to your question right away.  This can
-be frustrating, but please try not to honk them off; remember that any
-help they provide is purely voluntary and out of the kindness of their
-hearts.
-
-@node Bug Reports
-@section Bug Reports
-
-@display
-I found a bug.  What should I include in the bug report?
-@end display
-
-Before you send a bug report, make sure you are using the latest
-version.  Check @url{ftp://ftp.gnu.org/pub/gnu/bison/} or one of its
-mirrors.  Be sure to include the version number in your bug report.  If
-the bug is present in the latest version but not in a previous version,
-try to determine the most recent version which did not contain the bug.
-
-If the bug is parser-related, you should include the smallest grammar
-you can which demonstrates the bug.  The grammar file should also be
-complete (i.e., I should be able to run it through Bison without having
-to edit or add anything).  The smaller and simpler the grammar, the
-easier it will be to fix the bug.
-
-Include information about your compilation environment, including your
-operating system's name and version and your compiler's name and
-version.  If you have trouble compiling, you should also include a
-transcript of the build session, starting with the invocation of
-`configure'.  Depending on the nature of the bug, you may be asked to
-send additional files as well (such as `config.h' or `config.cache').
-
-Patches are most welcome, but not required.  That is, do not hesitate to
-send a bug report just because you can not provide a fix.
-
-Send bug reports to @email{bug-bison@@gnu.org}.
-
-@node Other Languages
-@section Other Languages
-
-@display
-Will Bison ever have C++ support?  How about Java or @var{insert your
-favorite language here}?
-@end display
-
-C++ support is there now, and is documented.  We'd love to add other
-languages; contributions are welcome.
-
-@node Beta Testing
-@section Beta Testing
-
-@display
-What is involved in being a beta tester?
-@end display
-
-It's not terribly involved.  Basically, you would download a test
-release, compile it, and use it to build and run a parser or two.  After
-that, you would submit either a bug report or a message saying that
-everything is okay.  It is important to report successes as well as
-failures because test releases eventually become mainstream releases,
-but only if they are adequately tested.  If no one tests, development is
-essentially halted.
-
-Beta testers are particularly needed for operating systems to which the
-developers do not have easy access.  They currently have easy access to
-recent GNU/Linux and Solaris versions.  Reports about other operating
-systems are especially welcome.
-
-@node Mailing Lists
-@section Mailing Lists
-
-@display
-How do I join the help-bison and bug-bison mailing lists?
-@end display
-
-See @url{http://lists.gnu.org/}.
-
-@c ================================================= Table of Symbols
-
-@node Table of Symbols
-@appendix Bison Symbols
-@cindex Bison symbols, table of
-@cindex symbols in Bison, table of
-
-@deffn {Variable} @@$
-In an action, the location of the left-hand side of the rule.
-@xref{Locations, , Locations Overview}.
-@end deffn
-
-@deffn {Variable} @@@var{n}
-In an action, the location of the @var{n}-th symbol of the right-hand
-side of the rule.  @xref{Locations, , Locations Overview}.
-@end deffn
-
-@deffn {Variable} $$
-In an action, the semantic value of the left-hand side of the rule.
-@xref{Actions}.
-@end deffn
-
-@deffn {Variable} $@var{n}
-In an action, the semantic value of the @var{n}-th symbol of the
-right-hand side of the rule.  @xref{Actions}.
-@end deffn
-
-@deffn {Delimiter} %%
-Delimiter used to separate the grammar rule section from the
-Bison declarations section or the epilogue.
-@xref{Grammar Layout, ,The Overall Layout of a Bison Grammar}.
-@end deffn
-
-@c Don't insert spaces, or check the DVI output.
-@deffn {Delimiter} %@{@var{code}%@}
-All code listed between @samp{%@{} and @samp{%@}} is copied directly to
-the output file uninterpreted.  Such code forms the prologue of the input
-file.  @xref{Grammar Outline, ,Outline of a Bison
-Grammar}.
-@end deffn
-
-@deffn {Construct} /*@dots{}*/
-Comment delimiters, as in C.
-@end deffn
-
-@deffn {Delimiter} :
-Separates a rule's result from its components.  @xref{Rules, ,Syntax of
-Grammar Rules}.
-@end deffn
-
-@deffn {Delimiter} ;
-Terminates a rule.  @xref{Rules, ,Syntax of Grammar Rules}.
-@end deffn
-
-@deffn {Delimiter} |
-Separates alternate rules for the same result nonterminal.
-@xref{Rules, ,Syntax of Grammar Rules}.
-@end deffn
-
-@deffn {Symbol} $accept
-The predefined nonterminal whose only rule is @samp{$accept: @var{start}
-$end}, where @var{start} is the start symbol.  @xref{Start Decl, , The
-Start-Symbol}.  It cannot be used in the grammar.
-@end deffn
-
-@deffn {Directive} %debug
-Equip the parser for debugging.  @xref{Decl Summary}.
-@end deffn
-
-@ifset defaultprec
-@deffn {Directive} %default-prec
-Assign a precedence to rules that lack an explicit @samp{%prec}
-modifier.  @xref{Contextual Precedence, ,Context-Dependent
-Precedence}.
-@end deffn
-@end ifset
-
-@deffn {Directive} %defines
-Bison declaration to create a header file meant for the scanner.
-@xref{Decl Summary}.
-@end deffn
-
-@deffn {Directive} %destructor
-Specify how the parser should reclaim the memory associated to
-discarded symbols.  @xref{Destructor Decl, , Freeing Discarded Symbols}.
-@end deffn
-
-@deffn {Directive} %dprec
-Bison declaration to assign a precedence to a rule that is used at parse
-time to resolve reduce/reduce conflicts.  @xref{GLR Parsers, ,Writing
-@acronym{GLR} Parsers}.
-@end deffn
-
-@deffn {Symbol} $end
-The predefined token marking the end of the token stream.  It cannot be
-used in the grammar.
-@end deffn
-
-@deffn {Symbol} error
-A token name reserved for error recovery.  This token may be used in
-grammar rules so as to allow the Bison parser to recognize an error in
-the grammar without halting the process.  In effect, a sentence
-containing an error may be recognized as valid.  On a syntax error, the
-token @code{error} becomes the current look-ahead token.  Actions
-corresponding to @code{error} are then executed, and the look-ahead
-token is reset to the token that originally caused the violation.
-@xref{Error Recovery}.
-@end deffn
-
-@deffn {Directive} %error-verbose
-Bison declaration to request verbose, specific error message strings
-when @code{yyerror} is called.
-@end deffn
-
-@deffn {Directive} %file-prefix="@var{prefix}"
-Bison declaration to set the prefix of the output files.  @xref{Decl
-Summary}.
-@end deffn
-
-@deffn {Directive} %glr-parser
-Bison declaration to produce a @acronym{GLR} parser.  @xref{GLR
-Parsers, ,Writing @acronym{GLR} Parsers}.
-@end deffn
-
-@deffn {Directive} %initial-action
-Run user code before parsing.  @xref{Initial Action Decl, , Performing Actions before Parsing}.
-@end deffn
-
-@deffn {Directive} %left
-Bison declaration to assign left associativity to token(s).
-@xref{Precedence Decl, ,Operator Precedence}.
-@end deffn
-
-@deffn {Directive} %lex-param @{@var{argument-declaration}@}
-Bison declaration to specifying an additional parameter that
-@code{yylex} should accept.  @xref{Pure Calling,, Calling Conventions
-for Pure Parsers}.
-@end deffn
-
-@deffn {Directive} %merge
-Bison declaration to assign a merging function to a rule.  If there is a
-reduce/reduce conflict with a rule having the same merging function, the
-function is applied to the two semantic values to get a single result.
-@xref{GLR Parsers, ,Writing @acronym{GLR} Parsers}.
-@end deffn
-
-@deffn {Directive} %name-prefix="@var{prefix}"
-Bison declaration to rename the external symbols.  @xref{Decl Summary}.
-@end deffn
-
-@ifset defaultprec
-@deffn {Directive} %no-default-prec
-Do not assign a precedence to rules that lack an explicit @samp{%prec}
-modifier.  @xref{Contextual Precedence, ,Context-Dependent
-Precedence}.
-@end deffn
-@end ifset
-
-@deffn {Directive} %no-lines
-Bison declaration to avoid generating @code{#line} directives in the
-parser file.  @xref{Decl Summary}.
-@end deffn
-
-@deffn {Directive} %nonassoc
-Bison declaration to assign nonassociativity to token(s).
-@xref{Precedence Decl, ,Operator Precedence}.
-@end deffn
-
-@deffn {Directive} %output="@var{file}"
-Bison declaration to set the name of the parser file.  @xref{Decl
-Summary}.
-@end deffn
-
-@deffn {Directive} %parse-param @{@var{argument-declaration}@}
-Bison declaration to specifying an additional parameter that
-@code{yyparse} should accept.  @xref{Parser Function,, The Parser
-Function @code{yyparse}}.
-@end deffn
-
-@deffn {Directive} %prec
-Bison declaration to assign a precedence to a specific rule.
-@xref{Contextual Precedence, ,Context-Dependent Precedence}.
-@end deffn
-
-@deffn {Directive} %pure-parser
-Bison declaration to request a pure (reentrant) parser.
-@xref{Pure Decl, ,A Pure (Reentrant) Parser}.
-@end deffn
-
-@deffn {Directive} %require "@var{version}"
-Require version @var{version} or higher of Bison.  @xref{Require Decl, ,
-Require a Version of Bison}.
-@end deffn
-
-@deffn {Directive} %right
-Bison declaration to assign right associativity to token(s).
-@xref{Precedence Decl, ,Operator Precedence}.
-@end deffn
-
-@deffn {Directive} %start
-Bison declaration to specify the start symbol.  @xref{Start Decl, ,The
-Start-Symbol}.
-@end deffn
-
-@deffn {Directive} %token
-Bison declaration to declare token(s) without specifying precedence.
-@xref{Token Decl, ,Token Type Names}.
-@end deffn
-
-@deffn {Directive} %token-table
-Bison declaration to include a token name table in the parser file.
-@xref{Decl Summary}.
-@end deffn
-
-@deffn {Directive} %type
-Bison declaration to declare nonterminals.  @xref{Type Decl,
-,Nonterminal Symbols}.
-@end deffn
-
-@deffn {Symbol} $undefined
-The predefined token onto which all undefined values returned by
-@code{yylex} are mapped.  It cannot be used in the grammar, rather, use
-@code{error}.
-@end deffn
-
-@deffn {Directive} %union
-Bison declaration to specify several possible data types for semantic
-values.  @xref{Union Decl, ,The Collection of Value Types}.
-@end deffn
-
-@deffn {Macro} YYABORT
-Macro to pretend that an unrecoverable syntax error has occurred, by
-making @code{yyparse} return 1 immediately.  The error reporting
-function @code{yyerror} is not called.  @xref{Parser Function, ,The
-Parser Function @code{yyparse}}.
-@end deffn
-
-@deffn {Macro} YYACCEPT
-Macro to pretend that a complete utterance of the language has been
-read, by making @code{yyparse} return 0 immediately.
-@xref{Parser Function, ,The Parser Function @code{yyparse}}.
-@end deffn
-
-@deffn {Macro} YYBACKUP
-Macro to discard a value from the parser stack and fake a look-ahead
-token.  @xref{Action Features, ,Special Features for Use in Actions}.
-@end deffn
-
-@deffn {Variable} yychar
-External integer variable that contains the integer value of the
-look-ahead token.  (In a pure parser, it is a local variable within
-@code{yyparse}.)  Error-recovery rule actions may examine this variable.
-@xref{Action Features, ,Special Features for Use in Actions}.
-@end deffn
-
-@deffn {Variable} yyclearin
-Macro used in error-recovery rule actions.  It clears the previous
-look-ahead token.  @xref{Error Recovery}.
-@end deffn
-
-@deffn {Macro} YYDEBUG
-Macro to define to equip the parser with tracing code.  @xref{Tracing,
-,Tracing Your Parser}.
-@end deffn
-
-@deffn {Variable} yydebug
-External integer variable set to zero by default.  If @code{yydebug}
-is given a nonzero value, the parser will output information on input
-symbols and parser action.  @xref{Tracing, ,Tracing Your Parser}.
-@end deffn
-
-@deffn {Macro} yyerrok
-Macro to cause parser to recover immediately to its normal mode
-after a syntax error.  @xref{Error Recovery}.
-@end deffn
-
-@deffn {Macro} YYERROR
-Macro to pretend that a syntax error has just been detected: call
-@code{yyerror} and then perform normal error recovery if possible
-(@pxref{Error Recovery}), or (if recovery is impossible) make
-@code{yyparse} return 1.  @xref{Error Recovery}.
-@end deffn
-
-@deffn {Function} yyerror
-User-supplied function to be called by @code{yyparse} on error.
-@xref{Error Reporting, ,The Error
-Reporting Function @code{yyerror}}.
-@end deffn
-
-@deffn {Macro} YYERROR_VERBOSE
-An obsolete macro that you define with @code{#define} in the prologue
-to request verbose, specific error message strings
-when @code{yyerror} is called.  It doesn't matter what definition you
-use for @code{YYERROR_VERBOSE}, just whether you define it.  Using
-@code{%error-verbose} is preferred.
-@end deffn
-
-@deffn {Macro} YYINITDEPTH
-Macro for specifying the initial size of the parser stack.
-@xref{Memory Management}.
-@end deffn
-
-@deffn {Function} yylex
-User-supplied lexical analyzer function, called with no arguments to get
-the next token.  @xref{Lexical, ,The Lexical Analyzer Function
-@code{yylex}}.
-@end deffn
-
-@deffn {Macro} YYLEX_PARAM
-An obsolete macro for specifying an extra argument (or list of extra
-arguments) for @code{yyparse} to pass to @code{yylex}.  The use of this
-macro is deprecated, and is supported only for Yacc like parsers.
-@xref{Pure Calling,, Calling Conventions for Pure Parsers}.
-@end deffn
-
-@deffn {Variable} yylloc
-External variable in which @code{yylex} should place the line and column
-numbers associated with a token.  (In a pure parser, it is a local
-variable within @code{yyparse}, and its address is passed to
-@code{yylex}.)
-You can ignore this variable if you don't use the @samp{@@} feature in the
-grammar actions.
-@xref{Token Locations, ,Textual Locations of Tokens}.
-In semantic actions, it stores the location of the look-ahead token.
-@xref{Actions and Locations, ,Actions and Locations}.
-@end deffn
-
-@deffn {Type} YYLTYPE
-Data type of @code{yylloc}; by default, a structure with four
-members.  @xref{Location Type, , Data Types of Locations}.
-@end deffn
-
-@deffn {Variable} yylval
-External variable in which @code{yylex} should place the semantic
-value associated with a token.  (In a pure parser, it is a local
-variable within @code{yyparse}, and its address is passed to
-@code{yylex}.)
-@xref{Token Values, ,Semantic Values of Tokens}.
-In semantic actions, it stores the semantic value of the look-ahead token.
-@xref{Actions, ,Actions}.
-@end deffn
-
-@deffn {Macro} YYMAXDEPTH
-Macro for specifying the maximum size of the parser stack.  @xref{Memory
-Management}.
-@end deffn
-
-@deffn {Variable} yynerrs
-Global variable which Bison increments each time it reports a syntax error.
-(In a pure parser, it is a local variable within @code{yyparse}.)
-@xref{Error Reporting, ,The Error Reporting Function @code{yyerror}}.
-@end deffn
-
-@deffn {Function} yyparse
-The parser function produced by Bison; call this function to start
-parsing.  @xref{Parser Function, ,The Parser Function @code{yyparse}}.
-@end deffn
-
-@deffn {Macro} YYPARSE_PARAM
-An obsolete macro for specifying the name of a parameter that
-@code{yyparse} should accept.  The use of this macro is deprecated, and
-is supported only for Yacc like parsers.  @xref{Pure Calling,, Calling
-Conventions for Pure Parsers}.
-@end deffn
-
-@deffn {Macro} YYRECOVERING
-The expression @code{YYRECOVERING ()} yields 1 when the parser
-is recovering from a syntax error, and 0 otherwise.
-@xref{Action Features, ,Special Features for Use in Actions}.
-@end deffn
-
-@deffn {Macro} YYSTACK_USE_ALLOCA
-Macro used to control the use of @code{alloca} when the C
-@acronym{LALR}(1) parser needs to extend its stacks.  If defined to 0,
-the parser will use @code{malloc} to extend its stacks.  If defined to
-1, the parser will use @code{alloca}.  Values other than 0 and 1 are
-reserved for future Bison extensions.  If not defined,
-@code{YYSTACK_USE_ALLOCA} defaults to 0.
-
-In the all-too-common case where your code may run on a host with a
-limited stack and with unreliable stack-overflow checking, you should
-set @code{YYMAXDEPTH} to a value that cannot possibly result in
-unchecked stack overflow on any of your target hosts when
-@code{alloca} is called.  You can inspect the code that Bison
-generates in order to determine the proper numeric values.  This will
-require some expertise in low-level implementation details.
-@end deffn
-
-@deffn {Type} YYSTYPE
-Data type of semantic values; @code{int} by default.
-@xref{Value Type, ,Data Types of Semantic Values}.
-@end deffn
-
-@node Glossary
-@appendix Glossary
-@cindex glossary
-
-@table @asis
-@item Backus-Naur Form (@acronym{BNF}; also called ``Backus Normal Form'')
-Formal method of specifying context-free grammars originally proposed
-by John Backus, and slightly improved by Peter Naur in his 1960-01-02
-committee document contributing to what became the Algol 60 report.
-@xref{Language and Grammar, ,Languages and Context-Free Grammars}.
-
-@item Context-free grammars
-Grammars specified as rules that can be applied regardless of context.
-Thus, if there is a rule which says that an integer can be used as an
-expression, integers are allowed @emph{anywhere} an expression is
-permitted.  @xref{Language and Grammar, ,Languages and Context-Free
-Grammars}.
-
-@item Dynamic allocation
-Allocation of memory that occurs during execution, rather than at
-compile time or on entry to a function.
-
-@item Empty string
-Analogous to the empty set in set theory, the empty string is a
-character string of length zero.
-
-@item Finite-state stack machine
-A ``machine'' that has discrete states in which it is said to exist at
-each instant in time.  As input to the machine is processed, the
-machine moves from state to state as specified by the logic of the
-machine.  In the case of the parser, the input is the language being
-parsed, and the states correspond to various stages in the grammar
-rules.  @xref{Algorithm, ,The Bison Parser Algorithm}.
-
-@item Generalized @acronym{LR} (@acronym{GLR})
-A parsing algorithm that can handle all context-free grammars, including those
-that are not @acronym{LALR}(1).  It resolves situations that Bison's
-usual @acronym{LALR}(1)
-algorithm cannot by effectively splitting off multiple parsers, trying all
-possible parsers, and discarding those that fail in the light of additional
-right context.  @xref{Generalized LR Parsing, ,Generalized
-@acronym{LR} Parsing}.
-
-@item Grouping
-A language construct that is (in general) grammatically divisible;
-for example, `expression' or `declaration' in C@.
-@xref{Language and Grammar, ,Languages and Context-Free Grammars}.
-
-@item Infix operator
-An arithmetic operator that is placed between the operands on which it
-performs some operation.
-
-@item Input stream
-A continuous flow of data between devices or programs.
-
-@item Language construct
-One of the typical usage schemas of the language.  For example, one of
-the constructs of the C language is the @code{if} statement.
-@xref{Language and Grammar, ,Languages and Context-Free Grammars}.
-
-@item Left associativity
-Operators having left associativity are analyzed from left to right:
-@samp{a+b+c} first computes @samp{a+b} and then combines with
-@samp{c}.  @xref{Precedence, ,Operator Precedence}.
-
-@item Left recursion
-A rule whose result symbol is also its first component symbol; for
-example, @samp{expseq1 : expseq1 ',' exp;}.  @xref{Recursion, ,Recursive
-Rules}.
-
-@item Left-to-right parsing
-Parsing a sentence of a language by analyzing it token by token from
-left to right.  @xref{Algorithm, ,The Bison Parser Algorithm}.
-
-@item Lexical analyzer (scanner)
-A function that reads an input stream and returns tokens one by one.
-@xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
-
-@item Lexical tie-in
-A flag, set by actions in the grammar rules, which alters the way
-tokens are parsed.  @xref{Lexical Tie-ins}.
-
-@item Literal string token
-A token which consists of two or more fixed characters.  @xref{Symbols}.
-
-@item Look-ahead token
-A token already read but not yet shifted.  @xref{Look-Ahead, ,Look-Ahead
-Tokens}.
-
-@item @acronym{LALR}(1)
-The class of context-free grammars that Bison (like most other parser
-generators) can handle; a subset of @acronym{LR}(1).  @xref{Mystery
-Conflicts, ,Mysterious Reduce/Reduce Conflicts}.
-
-@item @acronym{LR}(1)
-The class of context-free grammars in which at most one token of
-look-ahead is needed to disambiguate the parsing of any piece of input.
-
-@item Nonterminal symbol
-A grammar symbol standing for a grammatical construct that can
-be expressed through rules in terms of smaller constructs; in other
-words, a construct that is not a token.  @xref{Symbols}.
-
-@item Parser
-A function that recognizes valid sentences of a language by analyzing
-the syntax structure of a set of tokens passed to it from a lexical
-analyzer.
-
-@item Postfix operator
-An arithmetic operator that is placed after the operands upon which it
-performs some operation.
-
-@item Reduction
-Replacing a string of nonterminals and/or terminals with a single
-nonterminal, according to a grammar rule.  @xref{Algorithm, ,The Bison
-Parser Algorithm}.
-
-@item Reentrant
-A reentrant subprogram is a subprogram which can be in invoked any
-number of times in parallel, without interference between the various
-invocations.  @xref{Pure Decl, ,A Pure (Reentrant) Parser}.
-
-@item Reverse polish notation
-A language in which all operators are postfix operators.
-
-@item Right recursion
-A rule whose result symbol is also its last component symbol; for
-example, @samp{expseq1: exp ',' expseq1;}.  @xref{Recursion, ,Recursive
-Rules}.
-
-@item Semantics
-In computer languages, the semantics are specified by the actions
-taken for each instance of the language, i.e., the meaning of
-each statement.  @xref{Semantics, ,Defining Language Semantics}.
-
-@item Shift
-A parser is said to shift when it makes the choice of analyzing
-further input from the stream rather than reducing immediately some
-already-recognized rule.  @xref{Algorithm, ,The Bison Parser Algorithm}.
-
-@item Single-character literal
-A single character that is recognized and interpreted as is.
-@xref{Grammar in Bison, ,From Formal Rules to Bison Input}.
-
-@item Start symbol
-The nonterminal symbol that stands for a complete valid utterance in
-the language being parsed.  The start symbol is usually listed as the
-first nonterminal symbol in a language specification.
-@xref{Start Decl, ,The Start-Symbol}.
-
-@item Symbol table
-A data structure where symbol names and associated data are stored
-during parsing to allow for recognition and use of existing
-information in repeated uses of a symbol.  @xref{Multi-function Calc}.
-
-@item Syntax error
-An error encountered during parsing of an input stream due to invalid
-syntax.  @xref{Error Recovery}.
-
-@item Token
-A basic, grammatically indivisible unit of a language.  The symbol
-that describes a token in the grammar is a terminal symbol.
-The input of the Bison parser is a stream of tokens which comes from
-the lexical analyzer.  @xref{Symbols}.
-
-@item Terminal symbol
-A grammar symbol that has no rules in the grammar and therefore is
-grammatically indivisible.  The piece of text it represents is a token.
-@xref{Language and Grammar, ,Languages and Context-Free Grammars}.
-@end table
-
-@node Copying This Manual
-@appendix Copying This Manual
-
-@menu
-* GNU Free Documentation License::  License for copying this manual.
-@end menu
-
-@include fdl.texi
-
-@node Index
-@unnumbered Index
-
-@printindex cp
-
-@bye
-
-@c LocalWords: texinfo setfilename settitle setchapternewpage finalout
-@c LocalWords: ifinfo smallbook shorttitlepage titlepage GPL FIXME iftex
-@c LocalWords: akim fn cp syncodeindex vr tp synindex dircategory direntry
-@c LocalWords: ifset vskip pt filll insertcopying sp ISBN Etienne Suvasa
-@c LocalWords: ifnottex yyparse detailmenu GLR RPN Calc var Decls Rpcalc
-@c LocalWords: rpcalc Lexer Gen Comp Expr ltcalc mfcalc Decl Symtab yylex
-@c LocalWords: yyerror pxref LR yylval cindex dfn LALR samp gpl BNF xref
-@c LocalWords: const int paren ifnotinfo AC noindent emph expr stmt findex
-@c LocalWords: glr YYSTYPE TYPENAME prog dprec printf decl init stmtMerge
-@c LocalWords: pre STDC GNUC endif yy YY alloca lf stddef stdlib YYDEBUG
-@c LocalWords: NUM exp subsubsection kbd Ctrl ctype EOF getchar isdigit
-@c LocalWords: ungetc stdin scanf sc calc ulator ls lm cc NEG prec yyerrok
-@c LocalWords: longjmp fprintf stderr preg yylloc YYLTYPE cos ln
-@c LocalWords: smallexample symrec val tptr FNCT fnctptr func struct sym
-@c LocalWords: fnct putsym getsym fname arith fncts atan ptr malloc sizeof
-@c LocalWords: strlen strcpy fctn strcmp isalpha symbuf realloc isalnum
-@c LocalWords: ptypes itype YYPRINT trigraphs yytname expseq vindex dtype
-@c LocalWords: Rhs YYRHSLOC LE nonassoc op deffn typeless typefull yynerrs
-@c LocalWords: yychar yydebug msg YYNTOKENS YYNNTS YYNRULES YYNSTATES
-@c LocalWords: cparse clex deftypefun NE defmac YYACCEPT YYABORT param
-@c LocalWords: strncmp intval tindex lvalp locp llocp typealt YYBACKUP
-@c LocalWords: YYEMPTY YYEOF YYRECOVERING yyclearin GE def UMINUS maybeword
-@c LocalWords: Johnstone Shamsa Sadaf Hussain Tomita TR uref YYMAXDEPTH
-@c LocalWords: YYINITDEPTH stmnts ref stmnt initdcl maybeasm VCG notype
-@c LocalWords: hexflag STR exdent itemset asis DYYDEBUG YYFPRINTF args
-@c LocalWords: YYPRINTF infile ypp yxx outfile itemx vcg tex leaderfill
-@c LocalWords: hbox hss hfill tt ly yyin fopen fclose ofirst gcc ll
-@c LocalWords: yyrestart nbar yytext fst snd osplit ntwo strdup AST
-@c LocalWords: YYSTACK DVI fdl printindex
diff --git a/doc/bison.x b/doc/bison.x
new file mode 100644
index 0000000..1eaa9fd
--- /dev/null
+++ b/doc/bison.x
@@ -0,0 +1,55 @@
+[name]
+bison \- GNU Project parser generator (yacc replacement)
+
+[description]
+.I Bison
+is a parser generator in the style of
+.IR yacc (1).
+It should be upwardly compatible with input files designed
+for
+.IR yacc .
+.PP
+Input files should follow the
+.I yacc
+convention of ending in
+.BR .y .
+Unlike
+.IR yacc ,
+the generated files do not have fixed names, but instead use the prefix
+of the input file.
+Moreover, if you need to put
+.I C++
+code in the input file, you can end his name by a C++-like extension
+(.ypp or .y++), then bison will follow your extension to name the
+output file (.cpp or .c++).
+For instance, a grammar description file named
+.B parse.yxx
+would produce the generated parser in a file named
+.BR parse.tab.cxx ,
+instead of
+.IR yacc 's
+.B y.tab.c
+or old
+.I Bison
+version's
+.BR parse.tab.c .
+.PP
+This description of the options that can be given to
+.I bison
+is adapted from the node
+.B Invocation
+in the
+.B bison.texinfo
+manual, which should be taken as authoritative.
+.PP
+.I Bison
+supports both traditional single-letter options and mnemonic long
+option names.  Long option names are indicated with
+.B \-\-
+instead of
+.BR \- .
+Abbreviations for option names are allowed as long as they
+are unique.  When a long option takes an argument, like
+.BR \-\-file-prefix ,
+connect the option name and the argument with
+.BR = .
diff --git a/doc/common.x b/doc/common.x
new file mode 100644
index 0000000..60224c3
--- /dev/null
+++ b/doc/common.x
@@ -0,0 +1,4 @@
+[see also]
+.BR lex (1),
+.BR flex (1),
+.BR yacc (1).
diff --git a/doc/cross-options.texi b/doc/cross-options.texi
new file mode 100644
index 0000000..4b71d31
--- /dev/null
+++ b/doc/cross-options.texi
@@ -0,0 +1,95 @@
+@item @option{--debug}
+@tab @option{-t}
+@tab @code{%debug}
+
+@item @option{--define=@var{name}[=@var{value}]}
+@tab @option{-D @var{name}[=@var{value}]}
+@tab @code{%define @var{name} ["@var{value}"]}
+
+@item @option{--defines[=@var{file}]}
+@tab @option{-d}
+@tab @code{%defines [@var{"file"}]}
+
+@item @option{--feature[=@var{feature}]}
+@tab @option{-f [@var{feature}]}
+@tab
+
+@item @option{--file-prefix=@var{prefix}}
+@tab @option{-b @var{prefix}}
+@tab @code{%file-prefix @var{"prefix"}}
+
+@item @option{--force-define=@var{name}[=@var{value}]}
+@tab @option{-F @var{name}[=@var{value}]}
+@tab @code{%define @var{name} ["@var{value}"]}
+
+@item @option{--graph[=@var{file}]}
+@tab @option{-g [@var{file}]}
+@tab
+
+@item @option{--help}
+@tab @option{-h}
+@tab
+
+@item @option{--language=@var{language}}
+@tab @option{-L @var{language}}
+@tab @code{%language @var{"language"}}
+
+@item @option{--locations}
+@tab
+@tab @code{%locations}
+
+@item @option{--name-prefix=@var{prefix}}
+@tab @option{-p @var{prefix}}
+@tab @code{%name-prefix @var{"prefix"}}
+
+@item @option{--no-lines}
+@tab @option{-l}
+@tab @code{%no-lines}
+
+@item @option{--output=@var{file}}
+@tab @option{-o @var{file}}
+@tab @code{%output @var{"file"}}
+
+@item @option{--print-datadir}
+@tab
+@tab
+
+@item @option{--print-localedir}
+@tab
+@tab
+
+@item @option{--report-file=@var{file}}
+@tab
+@tab
+
+@item @option{--report=@var{things}}
+@tab @option{-r @var{things}}
+@tab
+
+@item @option{--skeleton=@var{file}}
+@tab @option{-S @var{file}}
+@tab @code{%skeleton @var{"file"}}
+
+@item @option{--token-table}
+@tab @option{-k}
+@tab @code{%token-table}
+
+@item @option{--verbose}
+@tab @option{-v}
+@tab @code{%verbose}
+
+@item @option{--version}
+@tab @option{-V}
+@tab
+
+@item @option{--warnings[=@var{category}]}
+@tab @option{-W [@var{category}]}
+@tab
+
+@item @option{--xml[=@var{file}]}
+@tab @option{-x [@var{file}]}
+@tab
+
+@item @option{--yacc}
+@tab @option{-y}
+@tab @code{%yacc}
diff --git a/doc/fdl.texi b/doc/fdl.texi
index fe78df8..cb71f05 100644
--- a/doc/fdl.texi
+++ b/doc/fdl.texi
@@ -1,13 +1,12 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
 
-@node GNU Free Documentation License
-@appendixsec GNU Free Documentation License
-
-@cindex FDL, GNU Free Documentation License
-@center Version 1.2, November 2002
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
 
 @display
-Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
-51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{http://fsf.org/}
 
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.
@@ -93,16 +92,16 @@
 of text.  A copy that is not ``Transparent'' is called ``Opaque''.
 
 Examples of suitable formats for Transparent copies include plain
-@sc{ascii} without markup, Texinfo input format, La@TeX{} input
-format, @acronym{SGML} or @acronym{XML} using a publicly available
-@acronym{DTD}, and standard-conforming simple @acronym{HTML},
-PostScript or @acronym{PDF} designed for human modification.  Examples
-of transparent image formats include @acronym{PNG}, @acronym{XCF} and
-@acronym{JPG}.  Opaque formats include proprietary formats that can be
-read and edited only by proprietary word processors, @acronym{SGML} or
-@acronym{XML} for which the @acronym{DTD} and/or processing tools are
-not generally available, and the machine-generated @acronym{HTML},
-PostScript or @acronym{PDF} produced by some word processors for
+ASCII without markup, Texinfo input format, La@TeX{} input
+format, SGML or XML using a publicly available
+DTD, and standard-conforming simple HTML,
+PostScript or PDF designed for human modification.  Examples
+of transparent image formats include PNG, XCF and
+JPG.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, SGML or
+XML for which the DTD and/or processing tools are
+not generally available, and the machine-generated HTML,
+PostScript or PDF produced by some word processors for
 output purposes only.
 
 The ``Title Page'' means, for a printed book, the title page itself,
@@ -112,6 +111,9 @@
 the text near the most prominent appearance of the work's title,
 preceding the beginning of the body of the text.
 
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
 A section ``Entitled XYZ'' means a named subunit of the Document whose
 title either is precisely XYZ or contains XYZ in parentheses following
 text that translates XYZ in another language.  (Here XYZ stands for a
@@ -380,13 +382,30 @@
 @item
 TERMINATION
 
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License.  Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License.  However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
 
 @item
 FUTURE REVISIONS OF THIS LICENSE
@@ -404,11 +423,46 @@
 of any later version that has been published (not as a draft) by the
 Free Software Foundation.  If the Document does not specify a version
 number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
 @end enumerate
 
 @page
-@appendixsubsec ADDENDUM: How to use this License for your documents
+@heading ADDENDUM: How to use this License for your documents
 
 To use this License in a document you have written, include a copy of
 the License in the document and put the following copyright and
@@ -418,7 +472,7 @@
 @group
   Copyright (C)  @var{year}  @var{your name}.
   Permission is granted to copy, distribute and/or modify this document
-  under the terms of the GNU Free Documentation License, Version 1.2
+  under the terms of the GNU Free Documentation License, Version 1.3
   or any later version published by the Free Software Foundation;
   with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   Texts.  A copy of the license is included in the section entitled ``GNU
@@ -427,7 +481,7 @@
 @end smallexample
 
 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the ``with...Texts.'' line with this:
+replace the ``with@dots{}Texts.''@: line with this:
 
 @smallexample
 @group
@@ -449,4 +503,3 @@
 @c Local Variables:
 @c ispell-local-pdict: "ispell-dict"
 @c End:
-
diff --git a/doc/figs/example-reduce.dot b/doc/figs/example-reduce.dot
new file mode 100644
index 0000000..fdd99c5
--- /dev/null
+++ b/doc/figs/example-reduce.dot
@@ -0,0 +1,11 @@
+digraph "reduce.y"
+{
+  node [fontname=courier shape=box]
+  edge [fontname=courier]
+
+  1 [label="State 1\n  3 a: \"0\" .  [\".\"]\l  4 b: \"0\" .  [\";\"]\l"]
+  1 -> "1R3" [label="" style=solid]
+ "1R3" [style=filled shape=diamond fillcolor=yellowgreen label="R3"]
+  1 -> "1R4" [label="[\";\"]" style=solid]
+ "1R4" [style=filled shape=diamond fillcolor=yellowgreen label="R4"]
+}
diff --git a/doc/figs/example-reduce.eps b/doc/figs/example-reduce.eps
new file mode 100644
index 0000000..f1db207
--- /dev/null
+++ b/doc/figs/example-reduce.eps
@@ -0,0 +1,300 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: graphviz version 2.29.20121022.0445 (20121022.0445)
+%%Title: reduce.y
+%%Pages: 1
+%%BoundingBox: 0 0 180 150
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 0 0 180 150
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+0 0 180 150 boxprim clip newpath
+1 1 set_scale 0 rotate 4 5 translate
+% 1
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 172.25 141.5 moveto
+-.25 141.5 lineto
+-.25 88.5 lineto
+172.25 88.5 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+57 126.3 moveto 58 (State 1) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+7.5 111.3 moveto 157 (  3 a: "0" .  ["."]) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+7.5 96.3 moveto 157 (  4 b: "0" .  [";"]) alignedtext
+grestore
+% 1R3
+gsave
+0.21961 0.75294 0.80392 nodecolor
+newpath 47 36 moveto
+17 18 lineto
+47 0 lineto
+77 18 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 47 36 moveto
+17 18 lineto
+47 0 lineto
+77 18 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+38.5 14.3 moveto 17 (R3) alignedtext
+grestore
+% 1->1R3
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 75.34 88.04 moveto
+69.46 73.72 62.22 56.08 56.53 42.22 curveto
+stroke
+0 0 0 edgecolor
+newpath 59.74 40.81 moveto
+52.7 32.89 lineto
+53.26 43.47 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 59.74 40.81 moveto
+52.7 32.89 lineto
+53.26 43.47 lineto
+closepath stroke
+grestore
+% 1R4
+gsave
+0.21961 0.75294 0.80392 nodecolor
+newpath 126 36 moveto
+96 18 lineto
+126 0 lineto
+156 18 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 126 36 moveto
+96 18 lineto
+126 0 lineto
+156 18 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+117.5 14.3 moveto 17 (R4) alignedtext
+grestore
+% 1->1R4
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 96.93 88.04 moveto
+103 73.63 110.48 55.86 116.33 41.96 curveto
+stroke
+0 0 0 edgecolor
+newpath 119.61 43.2 moveto
+120.26 32.62 lineto
+113.16 40.48 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 119.61 43.2 moveto
+120.26 32.62 lineto
+113.16 40.48 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+111 58.3 moveto 42 ([";"]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/doc/figs/example-reduce.pdf b/doc/figs/example-reduce.pdf
new file mode 100644
index 0000000..e7b2d13
--- /dev/null
+++ b/doc/figs/example-reduce.pdf
Binary files differ
diff --git a/doc/figs/example-reduce.png b/doc/figs/example-reduce.png
new file mode 100644
index 0000000..80106ac
--- /dev/null
+++ b/doc/figs/example-reduce.png
Binary files differ
diff --git a/doc/figs/example-shift.dot b/doc/figs/example-shift.dot
new file mode 100644
index 0000000..995ba0e
--- /dev/null
+++ b/doc/figs/example-shift.dot
@@ -0,0 +1,9 @@
+digraph "shift.y"
+{
+  node [fontname=courier shape=box]
+  edge [fontname=courier]
+
+  3 [label="State 3\n  1 exp: a . \".\"\l"]
+  3 -> 6 [style=solid label="\".\""]
+  6 [label="State 6\n  1 exp: a \".\" .\l"]
+}
diff --git a/doc/figs/example-shift.eps b/doc/figs/example-shift.eps
new file mode 100644
index 0000000..ed7ebcc
--- /dev/null
+++ b/doc/figs/example-shift.eps
@@ -0,0 +1,252 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: graphviz version 2.29.20121022.0445 (20121022.0445)
+%%Title: shift.y
+%%Pages: 1
+%%BoundingBox: 0 0 156 136
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 0 0 156 136
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+0 0 156 136 boxprim clip newpath
+1 1 set_scale 0 rotate 4 5 translate
+% 3
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 148.25 128 moveto
+-.25 128 lineto
+-.25 90 lineto
+148.25 90 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+45 112.8 moveto 58 (State 3) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+7.5 97.8 moveto 133 (  1 exp: a . ".") alignedtext
+grestore
+% 6
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 148.25 38 moveto
+-.25 38 lineto
+-.25 0 lineto
+148.25 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+45 22.8 moveto 58 (State 6) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+7.5 7.8 moveto 133 (  1 exp: a "." .) alignedtext
+grestore
+% 3->6
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 74 89.77 moveto
+74 77.85 74 62.04 74 48.48 curveto
+stroke
+0 0 0 edgecolor
+newpath 77.5 48.21 moveto
+74 38.21 lineto
+70.5 48.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 77.5 48.21 moveto
+74 38.21 lineto
+70.5 48.21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+74 60.3 moveto 25 (".") alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/doc/figs/example-shift.pdf b/doc/figs/example-shift.pdf
new file mode 100644
index 0000000..ff185e4
--- /dev/null
+++ b/doc/figs/example-shift.pdf
Binary files differ
diff --git a/doc/figs/example-shift.png b/doc/figs/example-shift.png
new file mode 100644
index 0000000..28fff65
--- /dev/null
+++ b/doc/figs/example-shift.png
Binary files differ
diff --git a/doc/figs/example.dot b/doc/figs/example.dot
new file mode 100644
index 0000000..94fff85
--- /dev/null
+++ b/doc/figs/example.dot
@@ -0,0 +1,35 @@
+// Generated by GNU Bison 2.6.90.
+// Report bugs to <bug-bison@gnu.org>.
+// Home page: <http://www.gnu.org/software/bison/>.
+
+digraph "/tmp/fo.y"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+  0 [label="State 0\n\l  0 $accept: . exp $end\l  1 exp: . a \";\"\l  2    | . b \".\"\l  3 a: . \"0\"\l  4 b: . \"0\"\l"]
+  0 -> 1 [style=solid label="\"0\""]
+  0 -> 2 [style=dashed label="exp"]
+  0 -> 3 [style=dashed label="a"]
+  0 -> 4 [style=dashed label="b"]
+  1 [label="State 1\n\l  3 a: \"0\" .  [\";\"]\l  4 b: \"0\" .  [\".\"]\l"]
+  1 -> "1R3" [style=solid]
+ "1R3" [label="R3", fillcolor=3, shape=diamond, style=filled]
+  1 -> "1R4" [label="[\".\"]", style=solid]
+ "1R4" [label="R4", fillcolor=3, shape=diamond, style=filled]
+  2 [label="State 2\n\l  0 $accept: exp . $end\l"]
+  2 -> 5 [style=solid label="$end"]
+  3 [label="State 3\n\l  1 exp: a . \";\"\l"]
+  3 -> 6 [style=solid label="\";\""]
+  4 [label="State 4\n\l  2 exp: b . \".\"\l"]
+  4 -> 7 [style=solid label="\".\""]
+  5 [label="State 5\n\l  0 $accept: exp $end .\l"]
+  5 -> "5R0" [style=solid]
+ "5R0" [label="Acc", fillcolor=1, shape=diamond, style=filled]
+  6 [label="State 6\n\l  1 exp: a \";\" .\l"]
+  6 -> "6R1" [style=solid]
+ "6R1" [label="R1", fillcolor=3, shape=diamond, style=filled]
+  7 [label="State 7\n\l  2 exp: b \".\" .\l"]
+  7 -> "7R2" [style=solid]
+ "7R2" [label="R2", fillcolor=3, shape=diamond, style=filled]
+}
diff --git a/doc/figs/example.eps b/doc/figs/example.eps
new file mode 100644
index 0000000..33031ba
--- /dev/null
+++ b/doc/figs/example.eps
@@ -0,0 +1,715 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: graphviz version 2.29.20121022.0445 (20121022.0445)
+%%Title: /tmp/fo.y
+%%Pages: 1
+%%BoundingBox: 0 0 739 424
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 0 0 739 424
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+0 0 739 424 boxprim clip newpath
+1 1 set_scale 0 rotate 4 5 translate
+% 0
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 495 416 moveto
+289 416 lineto
+289 302 lineto
+495 302 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+363 400.8 moveto 58 (State 0) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+297 369.8 moveto 190 (  0 $accept: . exp $end) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+297 354.8 moveto 133 (  1 exp: . a ";") alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+297 339.8 moveto 133 (  2    | . b ".") alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+297 324.8 moveto 100 (  3 a: . "0") alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+297 309.8 moveto 100 (  4 b: . "0") alignedtext
+grestore
+% 1
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 172.25 249.5 moveto
+-.25 249.5 lineto
+-.25 180.5 lineto
+172.25 180.5 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+57 234.3 moveto 58 (State 1) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+7.5 203.3 moveto 157 (  3 a: "0" .  [";"]) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+7.5 188.3 moveto 157 (  4 b: "0" .  ["."]) alignedtext
+grestore
+% 0->1
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 288.83 310.12 moveto
+249.32 291.79 204.84 271.15 167.62 253.87 curveto
+stroke
+0 0 0 edgecolor
+newpath 168.86 250.59 moveto
+158.32 249.56 lineto
+165.92 256.94 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 168.86 250.59 moveto
+158.32 249.56 lineto
+165.92 256.94 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+230 272.3 moveto 25 ("0") alignedtext
+grestore
+% 2
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 397 242 moveto
+191 242 lineto
+191 188 lineto
+397 188 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+265 226.8 moveto 58 (State 2) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+199 195.8 moveto 190 (  0 $accept: exp . $end) alignedtext
+grestore
+% 0->2
+gsave
+1 setlinewidth
+dashed
+0 0 0 edgecolor
+newpath 353.27 301.88 moveto
+341.26 284.48 328.39 265.83 317.72 250.37 curveto
+stroke
+0 0 0 edgecolor
+newpath 320.6 248.39 moveto
+312.04 242.14 lineto
+314.84 252.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 320.6 248.39 moveto
+312.04 242.14 lineto
+314.84 252.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+341 272.3 moveto 25 (exp) alignedtext
+grestore
+% 3
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 564.25 242 moveto
+415.75 242 lineto
+415.75 188 lineto
+564.25 188 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+461 226.8 moveto 58 (State 3) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+423.5 195.8 moveto 133 (  1 exp: a . ";") alignedtext
+grestore
+% 0->3
+gsave
+1 setlinewidth
+dashed
+0 0 0 edgecolor
+newpath 430.73 301.88 moveto
+442.74 284.48 455.61 265.83 466.28 250.37 curveto
+stroke
+0 0 0 edgecolor
+newpath 469.16 252.36 moveto
+471.96 242.14 lineto
+463.4 248.39 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 469.16 252.36 moveto
+471.96 242.14 lineto
+463.4 248.39 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+453 272.3 moveto 9 (a) alignedtext
+grestore
+% 4
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 731.25 242 moveto
+582.75 242 lineto
+582.75 188 lineto
+731.25 188 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+628 226.8 moveto 58 (State 4) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+590.5 195.8 moveto 133 (  2 exp: b . ".") alignedtext
+grestore
+% 0->4
+gsave
+1 setlinewidth
+dashed
+0 0 0 edgecolor
+newpath 495.21 302.69 moveto
+530.51 283.78 568.73 263.3 599.15 247 curveto
+stroke
+0 0 0 edgecolor
+newpath 601.17 249.89 moveto
+608.33 242.08 lineto
+597.86 243.72 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 601.17 249.89 moveto
+608.33 242.08 lineto
+597.86 243.72 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+557 272.3 moveto 9 (b) alignedtext
+grestore
+% 1R3
+gsave
+0.2549 0.38039 0.87451 nodecolor
+newpath 36 119 moveto
+6 101 lineto
+36 83 lineto
+66 101 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 36 119 moveto
+6 101 lineto
+36 83 lineto
+66 101 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+27.5 97.3 moveto 17 (R3) alignedtext
+grestore
+% 1->1R3
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 71 180.4 moveto
+62.95 162.36 53.24 140.61 46.09 124.61 curveto
+stroke
+0 0 0 edgecolor
+newpath 49.28 123.17 moveto
+42.01 115.46 lineto
+42.89 126.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 49.28 123.17 moveto
+42.01 115.46 lineto
+42.89 126.02 lineto
+closepath stroke
+grestore
+% 1R4
+gsave
+0.2549 0.38039 0.87451 nodecolor
+newpath 115 119 moveto
+85 101 lineto
+115 83 lineto
+145 101 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 115 119 moveto
+85 101 lineto
+115 83 lineto
+145 101 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+106.5 97.3 moveto 17 (R4) alignedtext
+grestore
+% 1->1R4
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 94.7 180.4 moveto
+99.15 163.22 104.46 142.69 108.54 126.94 curveto
+stroke
+0 0 0 edgecolor
+newpath 112.02 127.47 moveto
+111.14 116.91 lineto
+105.24 125.71 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 112.02 127.47 moveto
+111.14 116.91 lineto
+105.24 125.71 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+104 150.3 moveto 42 (["."]) alignedtext
+grestore
+% 5
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 397 128 moveto
+191 128 lineto
+191 74 lineto
+397 74 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+265 112.8 moveto 58 (State 5) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+199 81.8 moveto 190 (  0 $accept: exp $end .) alignedtext
+grestore
+% 2->5
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 294 187.74 moveto
+294 173 294 154.38 294 138.26 curveto
+stroke
+0 0 0 edgecolor
+newpath 297.5 138.09 moveto
+294 128.09 lineto
+290.5 138.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 297.5 138.09 moveto
+294 128.09 lineto
+290.5 138.09 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+294 150.3 moveto 34 ($end) alignedtext
+grestore
+% 6
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 564.25 128 moveto
+415.75 128 lineto
+415.75 74 lineto
+564.25 74 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+461 112.8 moveto 58 (State 6) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+423.5 81.8 moveto 133 (  1 exp: a ";" .) alignedtext
+grestore
+% 3->6
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 490 187.74 moveto
+490 173 490 154.38 490 138.26 curveto
+stroke
+0 0 0 edgecolor
+newpath 493.5 138.09 moveto
+490 128.09 lineto
+486.5 138.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 493.5 138.09 moveto
+490 128.09 lineto
+486.5 138.09 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+490 150.3 moveto 25 (";") alignedtext
+grestore
+% 7
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 731.25 128 moveto
+582.75 128 lineto
+582.75 74 lineto
+731.25 74 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+628 112.8 moveto 58 (State 7) alignedtext
+0 0 0 nodecolor
+14 /courier set_font
+590.5 81.8 moveto 133 (  2 exp: b "." .) alignedtext
+grestore
+% 4->7
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 657 187.74 moveto
+657 173 657 154.38 657 138.26 curveto
+stroke
+0 0 0 edgecolor
+newpath 660.5 138.09 moveto
+657 128.09 lineto
+653.5 138.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 660.5 138.09 moveto
+657 128.09 lineto
+653.5 138.09 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /courier set_font
+657 150.3 moveto 25 (".") alignedtext
+grestore
+% 5R0
+gsave
+0.55686 0.26667 0.8902 nodecolor
+newpath 294 36 moveto
+256.47 18 lineto
+294 0 lineto
+331.53 18 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 294 36 moveto
+256.47 18 lineto
+294 0 lineto
+331.53 18 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+281.5 14.3 moveto 25 (Acc) alignedtext
+grestore
+% 5->5R0
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 294 73.93 moveto
+294 65.11 294 55.25 294 46.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 297.5 46.09 moveto
+294 36.09 lineto
+290.5 46.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 297.5 46.09 moveto
+294 36.09 lineto
+290.5 46.09 lineto
+closepath stroke
+grestore
+% 6R1
+gsave
+0.2549 0.38039 0.87451 nodecolor
+newpath 490 36 moveto
+460 18 lineto
+490 0 lineto
+520 18 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 490 36 moveto
+460 18 lineto
+490 0 lineto
+520 18 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+481.5 14.3 moveto 17 (R1) alignedtext
+grestore
+% 6->6R1
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 490 73.93 moveto
+490 65.11 490 55.25 490 46.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 493.5 46.09 moveto
+490 36.09 lineto
+486.5 46.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 493.5 46.09 moveto
+490 36.09 lineto
+486.5 46.09 lineto
+closepath stroke
+grestore
+% 7R2
+gsave
+0.2549 0.38039 0.87451 nodecolor
+newpath 657 36 moveto
+627 18 lineto
+657 0 lineto
+687 18 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 657 36 moveto
+627 18 lineto
+657 0 lineto
+687 18 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /courier set_font
+648.5 14.3 moveto 17 (R2) alignedtext
+grestore
+% 7->7R2
+gsave
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 657 73.93 moveto
+657 65.11 657 55.25 657 46.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 660.5 46.09 moveto
+657 36.09 lineto
+653.5 46.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 660.5 46.09 moveto
+657 36.09 lineto
+653.5 46.09 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/doc/figs/example.pdf b/doc/figs/example.pdf
new file mode 100644
index 0000000..15d243f
--- /dev/null
+++ b/doc/figs/example.pdf
Binary files differ
diff --git a/doc/figs/example.png b/doc/figs/example.png
new file mode 100644
index 0000000..69a3eb2
--- /dev/null
+++ b/doc/figs/example.png
Binary files differ
diff --git a/doc/figs/example.y b/doc/figs/example.y
new file mode 100644
index 0000000..d084081
--- /dev/null
+++ b/doc/figs/example.y
@@ -0,0 +1,4 @@
+%%
+exp: a ";" | b ".";
+a: "0";
+b: "0";
diff --git a/doc/gpl-3.0.texi b/doc/gpl-3.0.texi
new file mode 100644
index 0000000..0e2e212
--- /dev/null
+++ b/doc/gpl-3.0.texi
@@ -0,0 +1,717 @@
+@c The GNU General Public License.
+@center Version 3, 29 June 2007
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+@end display
+
+@heading Preamble
+
+The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom
+to share and change all versions of a program---to make sure it remains
+free software for all its users.  We, the Free Software Foundation,
+use the GNU General Public License for most of our software; it
+applies also to any other work released this way by its authors.  You
+can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you
+have certain responsibilities if you distribute copies of the
+software, or if you modify it: responsibilities to respect the freedom
+of others.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too,
+receive or can get the source code.  And you must show them these
+terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the
+manufacturer can do so.  This is fundamentally incompatible with the
+aim of protecting users' freedom to change the software.  The
+systematic pattern of such abuse occurs in the area of products for
+individuals to use, which is precisely where it is most unacceptable.
+Therefore, we have designed this version of the GPL to prohibit the
+practice for those products.  If such problems arise substantially in
+other domains, we stand ready to extend this provision to those
+domains in future versions of the GPL, as needed to protect the
+freedom of users.
+
+Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish
+to avoid the special danger that patents applied to a free program
+could make it effectively proprietary.  To prevent this, the GPL
+assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+@heading TERMS AND CONDITIONS
+
+@enumerate 0
+@item Definitions.
+
+``This License'' refers to version 3 of the GNU General Public License.
+
+``Copyright'' also means copyright-like laws that apply to other kinds
+of works, such as semiconductor masks.
+
+``The Program'' refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as ``you''.  ``Licensees'' and
+``recipients'' may be individuals or organizations.
+
+To ``modify'' a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of
+an exact copy.  The resulting work is called a ``modified version'' of
+the earlier work or a work ``based on'' the earlier work.
+
+A ``covered work'' means either the unmodified Program or a work based
+on the Program.
+
+To ``propagate'' a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+To ``convey'' a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user
+through a computer network, with no transfer of a copy, is not
+conveying.
+
+An interactive user interface displays ``Appropriate Legal Notices'' to
+the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+@item Source Code.
+
+The ``source code'' for a work means the preferred form of the work for
+making modifications to it.  ``Object code'' means any non-source form
+of a work.
+
+A ``Standard Interface'' means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+The ``System Libraries'' of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+``Major Component'', in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+The ``Corresponding Source'' for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can
+regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same
+work.
+
+@item Basic Permissions.
+
+All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force.
+You may convey covered works to others for the sole purpose of having
+them make modifications exclusively for you, or provide you with
+facilities for running those works, provided that you comply with the
+terms of this License in conveying all material for which you do not
+control copyright.  Those thus making or running the covered works for
+you must do so exclusively on your behalf, under your direction and
+control, on terms that prohibit them from making any copies of your
+copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the
+conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+@item Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such
+circumvention is effected by exercising rights under this License with
+respect to the covered work, and you disclaim any intention to limit
+operation or modification of the work as a means of enforcing, against
+the work's users, your or third parties' legal rights to forbid
+circumvention of technological measures.
+
+@item Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+@item Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these
+conditions:
+
+@enumerate a
+@item
+The work must carry prominent notices stating that you modified it,
+and giving a relevant date.
+
+@item
+The work must carry prominent notices stating that it is released
+under this License and any conditions added under section 7.  This
+requirement modifies the requirement in section 4 to ``keep intact all
+notices''.
+
+@item
+You must license the entire work, as a whole, under this License to
+anyone who comes into possession of a copy.  This License will
+therefore apply, along with any applicable section 7 additional terms,
+to the whole of the work, and all its parts, regardless of how they
+are packaged.  This License gives no permission to license the work in
+any other way, but it does not invalidate such permission if you have
+separately received it.
+
+@item
+If the work has interactive user interfaces, each must display
+Appropriate Legal Notices; however, if the Program has interactive
+interfaces that do not display Appropriate Legal Notices, your work
+need not make them do so.
+@end enumerate
+
+A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+``aggregate'' if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+@item  Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these
+ways:
+
+@enumerate a
+@item
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by the
+Corresponding Source fixed on a durable physical medium customarily
+used for software interchange.
+
+@item
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by a written
+offer, valid for at least three years and valid for as long as you
+offer spare parts or customer support for that product model, to give
+anyone who possesses the object code either (1) a copy of the
+Corresponding Source for all the software in the product that is
+covered by this License, on a durable physical medium customarily used
+for software interchange, for a price no more than your reasonable
+cost of physically performing this conveying of source, or (2) access
+to copy the Corresponding Source from a network server at no charge.
+
+@item
+Convey individual copies of the object code with a copy of the written
+offer to provide the Corresponding Source.  This alternative is
+allowed only occasionally and noncommercially, and only if you
+received the object code with such an offer, in accord with subsection
+6b.
+
+@item
+Convey the object code by offering access from a designated place
+(gratis or for a charge), and offer equivalent access to the
+Corresponding Source in the same way through the same place at no
+further charge.  You need not require recipients to copy the
+Corresponding Source along with the object code.  If the place to copy
+the object code is a network server, the Corresponding Source may be
+on a different server (operated by you or a third party) that supports
+equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source.
+Regardless of what server hosts the Corresponding Source, you remain
+obligated to ensure that it is available for as long as needed to
+satisfy these requirements.
+
+@item
+Convey the object code using peer-to-peer transmission, provided you
+inform other peers where the object code and Corresponding Source of
+the work are being offered to the general public at no charge under
+subsection 6d.
+
+@end enumerate
+
+A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+A ``User Product'' is either (1) a ``consumer product'', which means any
+tangible personal property which is normally used for personal,
+family, or household purposes, or (2) anything designed or sold for
+incorporation into a dwelling.  In determining whether a product is a
+consumer product, doubtful cases shall be resolved in favor of
+coverage.  For a particular product received by a particular user,
+``normally used'' refers to a typical or common use of that class of
+product, regardless of the status of the particular user or of the way
+in which the particular user actually uses, or expects or is expected
+to use, the product.  A product is a consumer product regardless of
+whether the product has substantial commercial, industrial or
+non-consumer uses, unless such uses represent the only significant
+mode of use of the product.
+
+``Installation Information'' for a User Product means any methods,
+procedures, authorization keys, or other information required to
+install and execute modified versions of a covered work in that User
+Product from a modified version of its Corresponding Source.  The
+information must suffice to ensure that the continued functioning of
+the modified object code is in no case prevented or interfered with
+solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or
+updates for a work that has been modified or installed by the
+recipient, or for the User Product in which it has been modified or
+installed.  Access to a network may be denied when the modification
+itself materially and adversely affects the operation of the network
+or violates the rules and protocols for communication across the
+network.
+
+Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+@item Additional Terms.
+
+``Additional permissions'' are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders
+of that material) supplement the terms of this License with terms:
+
+@enumerate a
+@item
+Disclaiming warranty or limiting liability differently from the terms
+of sections 15 and 16 of this License; or
+
+@item
+Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices
+displayed by works containing it; or
+
+@item
+Prohibiting misrepresentation of the origin of that material, or
+requiring that modified versions of such material be marked in
+reasonable ways as different from the original version; or
+
+@item
+Limiting the use for publicity purposes of names of licensors or
+authors of the material; or
+
+@item
+Declining to grant rights under trademark law for use of some trade
+names, trademarks, or service marks; or
+
+@item
+Requiring indemnification of licensors and authors of that material by
+anyone who conveys the material (or modified versions of it) with
+contractual assumptions of liability to the recipient, for any
+liability that these contractual assumptions directly impose on those
+licensors and authors.
+@end enumerate
+
+All other non-permissive additional terms are considered ``further
+restrictions'' within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions; the
+above requirements apply either way.
+
+@item Termination.
+
+You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+@item Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run
+a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+@item Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+An ``entity transaction'' is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+@item Patents.
+
+A ``contributor'' is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's ``contributor version''.
+
+A contributor's ``essential patent claims'' are all patent claims owned
+or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, ``control'' includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+In the following three paragraphs, a ``patent license'' is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To ``grant'' such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  ``Knowingly relying'' means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+A patent license is ``discriminatory'' if it does not include within the
+scope of its coverage, prohibits the exercise of, or is conditioned on
+the non-exercise of one or more of the rights that are specifically
+granted under this License.  You may not convey a covered work if you
+are a party to an arrangement with a third party that is in the
+business of distributing software, under which you make payment to the
+third party based on the extent of your activity of conveying the
+work, and under which the third party grants, to any of the parties
+who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by
+you (or copies made from those copies), or (b) primarily for and in
+connection with specific products or compilations that contain the
+covered work, unless you entered into that arrangement, or that patent
+license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+@item No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey
+a covered work so as to satisfy simultaneously your obligations under
+this License and any other pertinent obligations, then as a
+consequence you may not convey it at all.  For example, if you agree
+to terms that obligate you to collect a royalty for further conveying
+from those to whom you convey the Program, the only way you could
+satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+
+@item Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+@item Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions
+of the GNU General Public License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies that a certain numbered version of the GNU General Public
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that numbered version or
+of any later version published by the Free Software Foundation.  If
+the Program does not specify a version number of the GNU General
+Public License, you may choose any version ever published by the Free
+Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions
+of the GNU General Public License can be used, that proxy's public
+statement of acceptance of a version permanently authorizes you to
+choose that version for the Program.
+
+Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+@item Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW@.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE@.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU@.  SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+@item Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
+NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
+LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
+TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
+PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+@item Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+@end enumerate
+
+@heading END OF TERMS AND CONDITIONS
+
+@heading How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the ``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the program's name and a brief idea of what it does.}
+Copyright (C) @var{year} @var{name of author}
+
+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 3 of the License, 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, see @url{http://www.gnu.org/licenses/}.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+@smallexample
+@var{program} Copyright (C) @var{year} @var{name of author}
+This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type @samp{show c} for details.
+@end smallexample
+
+The hypothetical commands @samp{show w} and @samp{show c} should show
+the appropriate parts of the General Public License.  Of course, your
+program's commands might be different; for a GUI interface, you would
+use an ``about box''.
+
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a ``copyright disclaimer'' for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+@url{http://www.gnu.org/licenses/}.
+
+The GNU General Public License does not permit incorporating your
+program into proprietary programs.  If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library.  If this is what you want to do, use
+the GNU Lesser General Public License instead of this License.  But
+first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}.
diff --git a/doc/gpl.texi b/doc/gpl.texi
deleted file mode 100644
index 9903fc8..0000000
--- a/doc/gpl.texi
+++ /dev/null
@@ -1,392 +0,0 @@
-@node Copying
-@unnumbered GNU GENERAL PUBLIC LICENSE
-@center Version 2, June 1991
-
-@c This file is intended to be included in another file.
-
-@display
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-@end display
-
-@unnumberedsec Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software---to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-@iftex
-@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
-@ifinfo
-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end ifinfo
-
-@enumerate 0
-@item
-This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The ``Program'', below,
-refers to any such program or work, and a ``work based on the Program''
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term ``modification''.)  Each licensee is addressed as ``you''.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-@item
-You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-@item
-You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-@enumerate a
-@item
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-
-@item
-You must cause any work that you distribute or publish, that in
-whole or in part contains or is derived from the Program or any
-part thereof, to be licensed as a whole at no charge to all third
-parties under the terms of this License.
-
-@item
-If the modified program normally reads commands interactively
-when run, you must cause it, when started running for such
-interactive use in the most ordinary way, to print or display an
-announcement including an appropriate copyright notice and a
-notice that there is no warranty (or else, saying that you provide
-a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this
-License.  (Exception: if the Program itself is interactive but
-does not normally print such an announcement, your work based on
-the Program is not required to print an announcement.)
-@end enumerate
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-@item
-You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-@enumerate a
-@item
-Accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
-
-@item
-Accompany it with a written offer, valid for at least three
-years, to give any third party, for a charge no more than your
-cost of physically performing source distribution, a complete
-machine-readable copy of the corresponding source code, to be
-distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
-@item
-Accompany it with the information you received as to the offer
-to distribute corresponding source code.  (This alternative is
-allowed only for noncommercial distribution and only if you
-received the program in object code or executable form with such
-an offer, in accord with Subsection b above.)
-@end enumerate
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-@item
-You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-@item
-You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-@item
-Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-@item
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-@item
-If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-@item
-The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and ``any
-later version'', you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-@item
-If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-@iftex
-@heading NO WARRANTY
-@end iftex
-@ifinfo
-@center NO WARRANTY
-@end ifinfo
-
-@item
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-@item
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-@end enumerate
-
-@iftex
-@heading END OF TERMS AND CONDITIONS
-@end iftex
-@ifinfo
-@center END OF TERMS AND CONDITIONS
-@end ifinfo
-
-@page
-@unnumberedsec Appendix: How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the ``copyright'' line and a pointer to where the full notice is found.
-
-@smallexample
-@var{one line to give the program's name and a brief idea of what it does.}
-Copyright (C) @var{yyyy}  @var{name of author}
-
-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 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-@end smallexample
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-@smallexample
-Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-This is free software, and you are welcome to redistribute it
-under certain conditions; type `show c' for details.
-@end smallexample
-
-The hypothetical commands @samp{show w} and @samp{show c} should show
-the appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than @samp{show w} and
-@samp{show c}; they could even be mouse-clicks or menu items---whatever
-suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a ``copyright disclaimer'' for the program, if
-necessary.  Here is a sample; alter the names:
-
-@example
-Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-`Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-@var{signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
-@end example
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/doc/refcard.tex b/doc/refcard.tex
index 3f2ec9b..caabf7e 100644
--- a/doc/refcard.tex
+++ b/doc/refcard.tex
@@ -19,24 +19,22 @@
 \def\finalout{\overfullrule=0pt}
 %\finalout
 
-% Copyright (c) 1998, 2001  Free Software Foundation, Inc.
+% Copyright (c) 1998, 2001, 2009-2012 Free Software Foundation, Inc.
 %
 % This file is part of Bison.
 %
-% Bison is free software; you can redistribute them and/or modify them
-% 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 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.
 %
-% Bison 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.
+% 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 either Flex or Bison; see the file COPYING.  If not, write
-% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-% Boston, MA 02110-1301, USA.
+% along with this program.  If not, see <http://www.gnu.org/licenses/>.
 %
 % This file is intended to be processed by plain TeX (TeX82).
 %
@@ -458,7 +456,7 @@
 \section {Variables and Types}
 %*****************************
 
-\key{Current look ahead token.}                {yychar}
+\key{Current lookahead token.}                 {yychar}
 \key{Debug mode flag.}                         {yydebug}
 \key{Data associated with the current token.}  {yylval}
 \key{Source position of current token.}        {yylloc}
@@ -489,8 +487,8 @@
 \key{Quit parsing immediately. Return 1.}           {YYABORT}
 \key{Quit parsing immediately. Return 0.}           {YYACCEPT}
 \key{Pretend a syntax error occurred.}              {YYERROR}
-\key{Value in {\tt yychar} if no look-ahead token.} {YYEMPTY}
-\key{Clear previous look ahead token.}              {yyclearin}
+\key{Value in {\tt yychar} if no lookahead token.}  {YYEMPTY}
+\key{Clear previous lookahead token.}               {yyclearin}
 \key{Recover normally from an error.}               {yyerrok}
 
 % **************
diff --git a/doc/stamp-vti b/doc/stamp-vti
index e3b7603..545bc9f 100644
--- a/doc/stamp-vti
+++ b/doc/stamp-vti
@@ -1,4 +1,4 @@
-@set UPDATED 30 May 2006
-@set UPDATED-MONTH May 2006
-@set EDITION 2.3
-@set VERSION 2.3
+@set UPDATED 9 December 2012
+@set UPDATED-MONTH December 2012
+@set EDITION 2.7
+@set VERSION 2.7
diff --git a/doc/version.texi b/doc/version.texi
index e3b7603..545bc9f 100644
--- a/doc/version.texi
+++ b/doc/version.texi
@@ -1,4 +1,4 @@
-@set UPDATED 30 May 2006
-@set UPDATED-MONTH May 2006
-@set EDITION 2.3
-@set VERSION 2.3
+@set UPDATED 9 December 2012
+@set UPDATED-MONTH December 2012
+@set EDITION 2.7
+@set VERSION 2.7
diff --git a/doc/yacc.1.in b/doc/yacc.1.in
new file mode 100644
index 0000000..1d07483
--- /dev/null
+++ b/doc/yacc.1.in
@@ -0,0 +1,41 @@
+.TH YACC "1" "November 2007" "@PACKAGE_STRING@" "User Commands"
+.SH NAME
+yacc \- GNU Project parser generator
+.SH SYNOPSIS
+.B yacc
+[\fIOPTION\fR]... \fIFILE\fR
+.SH DESCRIPTION
+.I Yacc
+(Yet Another Compiler Compiler) is a parser generator.  This
+version is a simple wrapper around
+.IR bison (1).
+It passes option
+\fB\-y\fR, \fB\-\-yacc\fR
+to activate the upward compatibility mode.  See
+.IR bison (1)
+for more information.
+.SH AUTHOR
+Written by Paul Eggert.
+.SH "REPORTING BUGS"
+Report bugs to <@PACKAGE_BUGREPORT@>.
+.SH COPYRIGHT
+Copyright \(co @PACKAGE_COPYRIGHT_YEAR@ Free Software Foundation, Inc.
+.br
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+.SH "SEE ALSO"
+.BR lex (1),
+.BR flex (1),
+.BR bison (1).
+.PP
+The full documentation for
+.B bison
+is maintained as a Texinfo manual.  If the
+.B info
+and
+.B bison
+programs are properly installed at your site, the command
+.IP
+.B info bison
+.PP
+should give you access to the complete manual.
diff --git a/etc/Makefile.am b/etc/Makefile.am
new file mode 100644
index 0000000..0261546
--- /dev/null
+++ b/etc/Makefile.am
@@ -0,0 +1,16 @@
+## Copyright (C) 2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+nodist_noinst_SCRIPTS = bench.pl
diff --git a/etc/Makefile.in b/etc/Makefile.in
new file mode 100644
index 0000000..bb4c619
--- /dev/null
+++ b/etc/Makefile.in
@@ -0,0 +1,1526 @@
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = etc
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/bench.pl.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
+	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
+	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
+	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES = bench.pl
+CONFIG_CLEAN_VPATH_FILES =
+SCRIPTS = $(nodist_noinst_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOM4TE = @AUTOM4TE@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BISON_CXX_WORKS = @BISON_CXX_WORKS@
+BISON_C_WORKS = @BISON_C_WORKS@
+BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
+CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOT = @DOT@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
+GCC = @GCC@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
+LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YACC_LIBRARY = @YACC_LIBRARY@
+YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+aclocaldir = @aclocaldir@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+nodist_noinst_SCRIPTS = bench.pl
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits etc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits etc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+bench.pl: $(top_builddir)/config.status $(srcdir)/bench.pl.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+	distclean-generic distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/etc/README b/etc/README
new file mode 100644
index 0000000..e4f2abc
--- /dev/null
+++ b/etc/README
@@ -0,0 +1,38 @@
+* bench.pl
+A primitive Perl script to run benches.  Currently its only bench is
+the usual calculator: it has a lightweight processing part (but not
+null), so it is really emphasizing the cost of the whole parsing
+(including scanning and I/O).
+
+Set the envvars BISON and CC to the programs and flags you want to
+use.  They default to bison and gcc.  To run a non-installed bison
+from a tarball built in _build, I suggest the following.
+
+     BISON=_build/tests/bison CC='gcc -O2' ./bench.pl
+
+(The _build/tests/bison wrapper makes sure that _build/src/bison will
+use the tarballs' skeletons, not those already installed as a
+straightforward use of _build/src/bison would.)
+
+--
+
+Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+
+This file is part of Bison, the GNU Compiler Compiler.
+
+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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+Local Variables:
+mode: outline
+End:
diff --git a/etc/bench.pl.in b/etc/bench.pl.in
new file mode 100755
index 0000000..4d480d5
--- /dev/null
+++ b/etc/bench.pl.in
@@ -0,0 +1,383 @@
+#! /usr/bin/perl -w
+
+# Copyright (C) 2006, 2008-2012 Free Software Foundation, Inc.
+#
+# This file is part of Bison, the GNU Compiler Compiler.
+#
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+use IO::File;
+use Benchmark qw (:all);
+
+my $bison = $ENV{'BISON'} || '@abs_top_builddir@/tests/bison';
+my $cc = $ENV{'CC'} || 'gcc';
+
+##################################################################
+
+sub triangular_grammar ($$$)
+{
+  my ($base, $max, $directives) = @_;
+
+  my $out = new IO::File ">$base.y"
+    or die;
+  print $out <<EOF;
+%error-verbose
+%debug
+%{
+#include <stdio.h>
+#include <stdlib.h>
+
+static int yylex (void);
+static void yyerror (const char *msg);
+%}
+%union
+{
+  int val;
+};
+
+%token END "end"
+%type <val> exp input
+EOF
+
+  for my $size (1 .. $max)
+    {
+      print $out "%token t$size $size \"$size\"\n";
+    };
+
+print $out <<EOF;
+%%
+input:
+  exp        { if (\$1 != 0) abort (); \$\$ = \$1; }
+| input exp  { if (\$2 != \$1 + 1) abort (); \$\$ = \$2; }
+;
+
+exp:
+  END
+    { \$\$ = 0; }
+EOF
+
+for my $size (1 .. $max)
+  {
+    use Text::Wrap;
+    print $out wrap ("| ", "   ",
+		     (map { "\"$_\"" } (1 .. $size)),
+		     " END \n"),
+               "    { \$\$ = $size; }\n";
+  };
+print $out ";\n";
+
+print $out <<EOF;
+%%
+static int
+yylex (void)
+{
+  static int inner = 1;
+  static int outer = 0;
+  if (outer > $max)
+    return 0;
+  else if (inner > outer)
+    {
+      inner = 1;
+      ++outer;
+      return END;
+    }
+  return inner++;
+}
+
+static void
+yyerror (const char *msg)
+{
+  fprintf (stderr, "%s\\n", msg);
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv ("YYDEBUG");
+  return yyparse ();
+}
+EOF
+}
+
+##################################################################
+
+sub calc_input ($$)
+{
+  my ($base, $max) = @_;
+  my $out = new IO::File ">$base.input"
+    or die;
+  foreach (1 .. $max)
+    {
+      print $out "0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99\n";
+      print $out "1+1*(2+2*(3+3*(4+4*(5+5*(6+6*(7+7*(8+8*(9+9*(10+10*(11+11*(12+12*(13+13*(14+14*(15+15*(16+16*(17+17*(18+18*(19+19*(20+20*(21+21*(22+22*(23+23*(24+24*(25+25*(26+26*(27+27*(28+28*(29+29*(30+30*(31+31*(32+32*(33+33*(34+34*(35+35*(36+36*(37+37*(38+38*(39+39*(40+40*(41+41*(42+42*(43+43*(44+44*(45+45*(46+46*(47+47*(48+48*(49+49*(50+50*(51+51*(52+52*(53+53*(54+54*(55+55*(56+56*(57+57*(58+58*(59+59*(60+60*(61+61*(62+62*(63+63*(64+64*(65+65*(66+66*(67+67*(68+68*(69+69*(70+70*(71+71*(72+72*(73+73*(74+74*(75+75*(76+76*(77+77*(78+78*(79+79*(80+80*(81+81*(82+82*(83+83*(84+84*(85+85*(86+86*(87+87*(88+88*(89+89*(90+90*(91+91*(92+92*(93+93*(94+94*(95+95*(96+96*(97+97*(98+98*(99+99*(100+100*(101+101*(102+102*(103+103*(104+104*(105+105*(106+106*(107+107*(108+108*(109+109*(110+110*(111+111*(112+112*(113+113*(114+114*(115+115*(116+116*(117+117*(118+118*(119+119*(120+120*(121+121*(122+122*(123+123*(124+124*(125+125*(126+126*(127+127*(128+128*(129+129*(130+130*(131+131*(132+132*(133+133*(134+134*(135+135*(136+136*(137+137*(138+138*(139+139*(140+140*(141+141*(142+142*(143+143*(144+144*(145+145*(146+146*(147+147*(148+148*(149+149*(150+150*(151+151*(152+152*(153+153*(154+154*(155+155*(156+156*(157+157*(158+158*(159+159*(160+160*(161+161*(162+162*(163+163*(164+164*(165+165*(166+166*(167+167*(168+168*(169+169*(170+170*(171+171*(172+172*(173+173*(174+174*(175+175*(176+176*(177+177*(178+178*(179+179*(180+180*(181+181*(182+182*(183+183*(184+184*(185+185*(186+186*(187+187*(188+188*(189+189*(190+190*(191+191*(192+192*(193+193*(194+194*(195+195*(196+196*(197+197*(198+198*(199+199*(200+200*(201+201*(202+202*(203+203*(204+204*(205+205*(206+206*(207+207*(208+208*(209+209*(210+210*(211+211*(212+212*(213+213*(214+214*(215+215*(216+216*(217+217*(218+218*(219+219*(220+220*(221+221*(222+222*(223+223*(224+224*(225+225*(226+226*(227+227*(228+228*(229+229*(230+230*(231+231*(232+232*(233+233*(234+234*(235+235*(236+236*(237+237*(238+238*(239+239*(240+240*(241+241*(242+242*(243+243*(244+244*(245+245*(246+246*(247+247*(248+248*(249+249*(250+250*(251+251*(252+252*(253+253*(254+254*(255+255*(256+256*(257+257*(258+258*(259+259*(260+260*(261+261*(262+262*(263+263*(264+264*(265+265*(266+266*(267+267*(268+268*(269+269*(270+270*(271+271*(272+272*(273+273*(274+274*(275+275*(276+276*(277+277*(278+278*(279+279*(280+280*(281+281*(282+282*(283+283*(284+284*(285+285*(286+286*(287+287*(288+288*(289+289*(290+290*(291+291*(292+292*(293+293*(294+294*(295+295*(296+296*(297+297*(298+298*(299+299*(300+300*(301+301*(302+302*(303+303*(304+304*(305+305*(306+306*(307+307*(308+308*(309+309*(310+310*(311+311*(312+312*(313+313*(314+314*(315+315*(316+316*(317+317*(318+318*(319+319*(320+320*(321+321*(322+322*(323+323*(324+324*(325+325*(326+326*(327+327*(328+328*(329+329*(330+330*(331+331*(332+332*(333+333*(334+334*(335+335*(336+336*(337+337*(338+338*(339+339*(340+340*(341+341*(342+342*(343+343*(344+344*(345+345*(346+346*(347+347*(348+348*(349+349*(350+350*(351+351*(352+352*(353+353*(354+354*(355+355*(356+356*(357+357*(358+358*(359+359*(360+360*(361+361*(362+362*(363+363*(364+364*(365+365*(366+366*(367+367*(368+368*(369+369*(370+370*(371+371*(372+372*(373+373*(374+374*(375+375*(376+376*(377+377*(378+378*(379+379*(380+380*(381+381*(382+382*(383+383*(384+384*(385+385*(386+386*(387+387*(388+388*(389+389*(390+390*(391+391*(392+392*(393+393*(394+394*(395+395*(396+396*(397+397*(398+398*(399+399*(400+400*(401+401*(402+402*(403+403*(404+404*(405+405*(406+406*(407+407*(408+408*(409+409*(410+410*(411+411*(412+412*(413+413*(414+414*(415+415*(416+416*(417+417*(418+418*(419+419*(420+420*(421+421*(422+422*(423+423*(424+424*(425+425*(426+426*(427+427*(428+428*(429+429*(430+430*(431+431*(432+432*(433+433*(434+434*(435+435*(436+436*(437+437*(438+438*(439+439*(440+440*(441+441*(442+442*(443+443*(444+444*(445+445*(446+446*(447+447*(448+448*(449+449*(450+450*(451+451*(452+452*(453+453*(454+454*(455+455*(456+456*(457+457*(458+458*(459+459*(460+460*(461+461*(462+462*(463+463*(464+464*(465+465*(466+466*(467+467*(468+468*(469+469*(470+470*(471+471*(472+472*(473+473*(474+474*(475+475*(476+476*(477+477*(478+478*(479+479*(480+480*(481+481*(482+482*(483+483*(484+484*(485+485*(486+486*(487+487*(488+488*(489+489*(490+490*(491+491*(492+492*(493+493*(494+494*(495+495*(496+496*(497+497*(498+498*(499+499*(500+500*(501+501*(502+502*(503+503*(504+504*(505+505*(506+506*(507+507*(508+508*(509+509*(510+510*(511+511*(512+512*(513+513*(514+514*(515+515*(516+516*(517+517*(518+518*(519+519*(520+520*(521+521*(522+522*(523+523*(524+524*(525+525*(526+526*(527+527*(528+528*(529+529*(530+530*(531+531*(532+532*(533+533*(534+534*(535+535*(536+536*(537+537*(538+538*(539+539*(540+540*(541+541*(542+542*(543+543*(544+544*(545+545*(546+546*(547+547*(548+548*(549+549*(550+550*(551+551*(552+552*(553+553*(554+554*(555+555*(556+556*(557+557*(558+558*(559+559*(560+560*(561+561*(562+562*(563+563*(564+564*(565+565*(566+566*(567+567*(568+568*(569+569*(570+570*(571+571*(572+572*(573+573*(574+574*(575+575*(576+576*(577+577*(578+578*(579+579*(580+580*(581+581*(582+582*(583+583*(584+584*(585+585*(586+586*(587+587*(588+588*(589+589*(590+590*(591+591*(592+592*(593+593*(594+594*(595+595*(596+596*(597+597*(598+598*(599+599*(600+600*(601+601*(602+602*(603+603*(604+604*(605+605*(606+606*(607+607*(608+608*(609+609*(610+610*(611+611*(612+612*(613+613*(614+614*(615+615*(616+616*(617+617*(618+618*(619+619*(620+620*(621+621*(622+622*(623+623*(624+624*(625+625*(626+626*(627+627*(628+628*(629+629*(630+630*(631+631*(632+632*(633+633*(634+634*(635+635*(636+636*(637+637*(638+638*(639+639*(640+640*(641+641*(642+642*(643+643*(644+644*(645+645*(646+646*(647+647*(648+648*(649+649*(650+650*(651+651*(652+652*(653+653*(654+654*(655+655*(656+656*(657+657*(658+658*(659+659*(660+660*(661+661*(662+662*(663+663*(664+664*(665+665*(666+666*(667+667*(668+668*(669+669*(670+670*(671+671*(672+672*(673+673*(674+674*(675+675*(676+676*(677+677*(678+678*(679+679*(680+680*(681+681*(682+682*(683+683*(684+684*(685+685*(686+686*(687+687*(688+688*(689+689*(690+690*(691+691*(692+692*(693+693*(694+694*(695+695*(696+696*(697+697*(698+698*(699+699*(700+700*(701+701*(702+702*(703+703*(704+704*(705+705*(706+706*(707+707*(708+708*(709+709*(710+710*(711+711*(712+712*(713+713*(714+714*(715+715*(716+716*(717+717*(718+718*(719+719*(720+720*(721+721*(722+722*(723+723*(724+724*(725+725*(726+726*(727+727*(728+728*(729+729*(730+730*(731+731*(732+732*(733+733*(734+734*(735+735*(736+736*(737+737*(738+738*(739+739*(740+740*(741+741*(742+742*(743+743*(744+744*(745+745*(746+746*(747+747*(748+748*(749+749*(750+750*(751+751*(752+752*(753+753*(754+754*(755+755*(756+756*(757+757*(758+758*(759+759*(760+760*(761+761*(762+762*(763+763*(764+764*(765+765*(766+766*(767+767*(768+768*(769+769*(770+770*(771+771*(772+772*(773+773*(774+774*(775+775*(776+776*(777+777*(778+778*(779+779*(780+780*(781+781*(782+782*(783+783*(784+784*(785+785*(786+786*(787+787*(788+788*(789+789*(790+790*(791+791*(792+792*(793+793*(794+794*(795+795*(796+796*(797+797*(798+798*(799+799*(800+800*(801+801*(802+802*(803+803*(804+804*(805+805*(806+806*(807+807*(808+808*(809+809*(810+810*(811+811*(812+812*(813+813*(814+814*(815+815*(816+816*(817+817*(818+818*(819+819*(820+820*(821+821*(822+822*(823+823*(824+824*(825+825*(826+826*(827+827*(828+828*(829+829*(830+830*(831+831*(832+832*(833+833*(834+834*(835+835*(836+836*(837+837*(838+838*(839+839*(840+840*(841+841*(842+842*(843+843*(844+844*(845+845*(846+846*(847+847*(848+848*(849+849*(850+850*(851+851*(852+852*(853+853*(854+854*(855+855*(856+856*(857+857*(858+858*(859+859*(860+860*(861+861*(862+862*(863+863*(864+864*(865+865*(866+866*(867+867*(868+868*(869+869*(870+870*(871+871*(872+872*(873+873*(874+874*(875+875*(876+876*(877+877*(878+878*(879+879*(880+880*(881+881*(882+882*(883+883*(884+884*(885+885*(886+886*(887+887*(888+888*(889+889*(890+890*(891+891*(892+892*(893+893*(894+894*(895+895*(896+896*(897+897*(898+898*(899+899*(900+900*(901+901*(902+902*(903+903*(904+904*(905+905*(906+906*(907+907*(908+908*(909+909*(910+910*(911+911*(912+912*(913+913*(914+914*(915+915*(916+916*(917+917*(918+918*(919+919*(920+920*(921+921*(922+922*(923+923*(924+924*(925+925*(926+926*(927+927*(928+928*(929+929*(930+930*(931+931*(932+932*(933+933*(934+934*(935+935*(936+936*(937+937*(938+938*(939+939*(940+940*(941+941*(942+942*(943+943*(944+944*(945+945*(946+946*(947+947*(948+948*(949+949*(950+950*(951+951*(952+952*(953+953*(954+954*(955+955*(956+956*(957+957*(958+958*(959+959*(960+960*(961+961*(962+962*(963+963*(964+964*(965+965*(966+966*(967+967*(968+968*(969+969*(970+970*(971+971*(972+972*(973+973*(974+974*(975+975*(976+976*(977+977*(978+978*(979+979*(980+980*(981+981*(982+982*(983+983*(984+984*(985+985*(986+986*(987+987*(988+988*(989+989*(990+990*(991+991*(992+992*(993+993*(994+994*(995+995*(996+996*(997+997*(998+998*(999+999*(1000+1000*(1001))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n";
+    }
+}
+
+##################################################################
+
+sub calc_grammar ($$$)
+{
+  my ($base, $max, $directives) = @_;
+
+  my $out = new IO::File ">$base.y"
+    or die;
+  print $out <<EOF;
+%{
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#define USE(Var)
+
+/* Exercise pre-prologue dependency to %union.  */
+typedef int semantic_value;
+
+static semantic_value global_result = 0;
+static int global_count = 0;
+%}
+
+/* Exercise %union. */
+$directives
+%error-verbose
+%union
+{
+  semantic_value ival;
+};
+
+%{
+static int power (int base, int exponent);
+/* yyerror receives the location if:
+   - %location & %pure & %glr
+   - %location & %pure & %yacc & %parse-param. */
+static void yyerror (const char *s);
+#if YYPURE
+static int yylex (YYSTYPE* yylvalp);
+#else
+static int yylex (void);
+#endif
+%}
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison	       */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\\n'
+| exp '\\n'           { USE (\$1); }
+;
+
+exp:
+  NUM                { \$\$ = \$1;             }
+| exp '=' exp
+  {
+    if (\$1 != \$3)
+      fprintf (stderr, "calc: error: %d != %d\\n", \$1, \$3);
+    \$\$ = \$1;
+  }
+| exp '+' exp        { \$\$ = \$1 + \$3;        }
+| exp '-' exp        { \$\$ = \$1 - \$3;        }
+| exp '*' exp        { \$\$ = \$1 * \$3;        }
+| exp '/' exp        { \$\$ = \$1 / \$3;        }
+| '-' exp  %prec NEG { \$\$ = -\$2;            }
+| exp '^' exp        { \$\$ = power (\$1, \$3); }
+| '(' exp ')'        { \$\$ = \$2;             }
+| '(' error ')'      { \$\$ = 1111;           }
+| '!'                { \$\$ = 0; YYERROR;     }
+| '-' error          { \$\$ = 0; YYERROR;     }
+;
+%%
+/* The input.  */
+static FILE *input;
+
+static void
+yyerror (const char *s)
+{
+  fprintf (stderr, "%s\\n", s);
+}
+
+static int
+get_char (void)
+{
+  return getc (input);
+}
+
+
+static void
+unget_char ( int c)
+{
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (void)
+{
+  int c = get_char ();
+  int sign = 1;
+  int n = 0;
+
+  if (c == '-')
+    {
+      c = get_char ();
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char ();
+    }
+
+  unget_char (c);
+
+  return sign * n;
+}
+
+static int
+#if YYPURE
+# define yylval (*yylvalp)
+yylex (YYSTYPE* yylvalp)
+#else
+yylex (void)
+#endif
+{
+  int c;
+
+  /* Skip white space.  */
+  while ((c = get_char ()) == ' ' || c == '\t')
+    continue;
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char ( c);
+      yylval.ival = read_signed_integer ();
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+
+static int
+power (int base, int exponent)
+{
+  assert (0 <= exponent);
+  int res = 1;
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  input = fopen ("calc.input", "r");
+  if (!input)
+    {
+      perror ("calc.input");
+      return 3;
+    }
+
+  status = yyparse ();
+  if (global_result != result)
+    abort ();
+  if (global_count != count)
+    abort ();
+
+  return status;
+}
+EOF
+}
+
+##################################################################
+
+sub compile ($)
+{
+  my ($base) = @_;
+  system ("$bison $base.y -o $base.c") == 0
+    or die;
+  system ("$cc -o $base $base.c") == 0
+    or die;
+}
+
+sub bench_grammar ($)
+{
+  my ($gram) = @_;
+  my %test =
+    (
+     "pull-impure" => '',
+     "pull-pure" => '%define api.pure',
+     "push-impure" => '%define api.push-pull "both"',
+     "push-pure" => '%define api.push-pull "both" %define api.pure',
+    );
+
+  my %bench;
+  while (my ($name, $directives) = each %test)
+    {
+      print STDERR "$name\n";
+      my $generator = "$gram" . "_grammar";
+      &$generator ($name, 200, $directives);
+      compile ($name);
+      $bench{$name} = "system ('./$name');";
+    }
+
+  print "$gram:\n";
+  my $res = timethese (50, \%bench, 'nop');
+  cmpthese ($res, 'nop');
+}
+
+print STDERR "Using $bison, $cc.\n";
+calc_input ('calc', 200);
+bench_grammar ('calc');
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/examples/Makefile b/examples/Makefile
deleted file mode 100644
index 6450a83..0000000
--- a/examples/Makefile
+++ /dev/null
@@ -1,514 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# examples/Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-
-srcdir = .
-top_srcdir = ..
-
-pkgdatadir = $(datadir)/bison
-pkglibdir = $(libdir)/bison
-pkgincludedir = $(includedir)/bison
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /usr/bin/install -c
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-subdir = examples
-DIST_COMMON = $(dist_noinst_SCRIPTS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
-	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
-	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
-	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-SCRIPTS = $(dist_noinst_SCRIPTS)
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-exec-recursive install-info-recursive \
-	install-recursive installcheck-recursive installdirs-recursive \
-	pdf-recursive ps-recursive uninstall-info-recursive \
-	uninstall-recursive
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = calc++
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9
-AMDEP_FALSE = #
-AMDEP_TRUE = 
-AMTAR = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar
-AUTOCONF = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader
-AUTOM4TE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te
-AUTOMAKE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9
-AWK = gawk
-BISON_CXX_WORKS = :
-BISON_CXX_WORKS_FALSE = #
-BISON_CXX_WORKS_TRUE = 
-BISON_LOCALEDIR = /usr/share/locale
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
-CPP = gcc -E
-CPPFLAGS = 
-CXX = g++
-CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = grep -E
-EXEEXT = 
-GCC = yes
-GETOPT_H = 
-GMSGFMT = /usr/bin/msgfmt
-HAVE__BOOL = 1
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
-INTLLIBS = 
-INTL_MACOSX_LIBS = 
-LDFLAGS = 
-LEX = flex
-LEXLIB = -lfl
-LEX_OUTPUT_ROOT = lex.yy
-LIBICONV = -liconv
-LIBINTL = 
-LIBOBJS =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-LIBS = 
-LTLIBICONV = -liconv
-LTLIBINTL = 
-LTLIBOBJS =  dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo
-M4 = /usr/bin/m4
-MAKEINFO = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo
-MKINSTALLDIRS = $(top_builddir)/build-aux/mkinstalldirs
-MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge
-O0CFLAGS = -g 
-O0CXXFLAGS = -g 
-OBJEXT = o
-PACKAGE = bison
-PACKAGE_BUGREPORT = bug-bison@gnu.org
-PACKAGE_NAME = GNU Bison
-PACKAGE_STRING = GNU Bison 2.3
-PACKAGE_TARNAME = bison
-PACKAGE_VERSION = 2.3
-PATH_SEPARATOR = :
-POSUB = po
-RANLIB = ranlib
-SET_MAKE = 
-SHELL = /bin/sh
-STDBOOL_H = 
-STRIP = 
-UNISTD_H = 
-USE_NLS = yes
-VALGRIND = 
-VERSION = 2.3
-WARNING_CFLAGS = 
-WARNING_CXXFLAGS = 
-WERROR_CFLAGS = 
-XGETTEXT = /usr/bin/xgettext
-YACC = bison -y
-YACC_LIBRARY = liby.a
-YACC_SCRIPT = yacc
-ac_ct_CC = gcc
-ac_ct_CXX = g++
-ac_ct_RANLIB = ranlib
-ac_ct_STRIP = 
-aclocaldir = ${datadir}/aclocal
-am__fastdepCC_FALSE = #
-am__fastdepCC_TRUE = 
-am__fastdepCXX_FALSE = #
-am__fastdepCXX_TRUE = 
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-datadir = ${prefix}/share
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-includedir = ${prefix}/include
-infodir = ${prefix}/info
-install_sh = /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localstatedir = ${prefix}/var
-mandir = ${prefix}/man
-mkdir_p = mkdir -p --
-oldincludedir = /usr/include
-prefix = /home/phanna/src/bison
-program_transform_name = s,x,x,
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-sysconfdir = ${prefix}/etc
-target_alias = 
-SUBDIRS = calc++
-dist_noinst_SCRIPTS = extexi
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  examples/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  examples/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-uninstall-info-am:
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(mkdir_p) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	    distdir=`$(am__cd) $(distdir) && pwd`; \
-	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-	    (cd $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$top_distdir" \
-	        distdir="$$distdir/$$subdir" \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(SCRIPTS)
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-exec-am:
-
-install-info: install-info-recursive
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-info-am
-
-uninstall-info: uninstall-info-recursive
-
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
-	clean clean-generic clean-recursive ctags ctags-recursive \
-	distclean distclean-generic distclean-recursive distclean-tags \
-	distdir dvi dvi-am html html-am info info-am install \
-	install-am install-data install-data-am install-exec \
-	install-exec-am install-info install-info-am install-man \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	maintainer-clean-recursive mostlyclean mostlyclean-generic \
-	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am uninstall-info-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/Makefile.am b/examples/Makefile.am
index a51ba98..60a79ad 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,20 +1,18 @@
 ## Process this file with automake to produce Makefile.in -*-Makefile-*-
-## Copyright (C) 2005 Free Software Foundation, Inc.
+## Copyright (C) 2005, 2009-2012 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 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301  USA
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
 if BISON_CXX_WORKS
 SUBDIRS = calc++
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 5daa51c..5070673 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,15 +14,41 @@
 
 @SET_MAKE@
 
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
+pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -40,143 +66,1262 @@
 DIST_COMMON = $(dist_noinst_SCRIPTS) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
 	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
 	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
 	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SCRIPTS = $(dist_noinst_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	html-recursive info-recursive install-data-recursive \
-	install-exec-recursive install-info-recursive \
-	install-recursive installcheck-recursive installdirs-recursive \
-	pdf-recursive ps-recursive uninstall-info-recursive \
-	uninstall-recursive
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = calc++
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOM4TE = @AUTOM4TE@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BISON_CXX_WORKS = @BISON_CXX_WORKS@
-BISON_CXX_WORKS_FALSE = @BISON_CXX_WORKS_FALSE@
-BISON_CXX_WORKS_TRUE = @BISON_CXX_WORKS_TRUE@
+BISON_C_WORKS = @BISON_C_WORKS@
 BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
 CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DOT = @DOT@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
 GCC = @GCC@
 GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
 HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
 LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
 LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
 MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
+MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
-O0CFLAGS = @O0CFLAGS@
-O0CXXFLAGS = @O0CXXFLAGS@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
 POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
 STRIP = @STRIP@
-UNISTD_H = @UNISTD_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
 VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
 YACC = @YACC@
 YACC_LIBRARY = @YACC_LIBRARY@
 YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 aclocaldir = @aclocaldir@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -188,28 +1333,46 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
 @BISON_CXX_WORKS_TRUE@SUBDIRS = calc++
 dist_noinst_SCRIPTS = extexi
 all: all-recursive
@@ -219,14 +1382,14 @@
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  examples/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  examples/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits examples/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -244,16 +1407,16 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-uninstall-info-am:
+$(am__aclocal_m4_deps):
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -262,7 +1425,11 @@
 	done; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
 	  echo "Making $$target in $$subdir"; \
 	  if test "$$subdir" = "."; then \
 	    dot_seen=yes; \
@@ -270,51 +1437,23 @@
 	  else \
 	    local_target="$$target"; \
 	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
 	  || eval $$failcom; \
 	done; \
 	if test "$$dot_seen" = "no"; then \
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
 tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
 	done
 ctags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
 	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -322,14 +1461,14 @@
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
 	mkid -fID $$unique
 tags: TAGS
 
 TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
 	  include_option=--etags-include; \
@@ -341,81 +1480,112 @@
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
 	    test ! -f $$subdir/TAGS || \
-	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
-	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(mkdir_p) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	    distdir=`$(am__cd) $(distdir) && pwd`; \
-	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-	    (cd $$subdir && \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
 	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$top_distdir" \
-	        distdir="$$distdir/$$subdir" \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
 	        distdir) \
 	      || exit 1; \
 	  fi; \
@@ -435,16 +1605,22 @@
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -463,18 +1639,38 @@
 
 html: html-recursive
 
+html-am:
+
 info: info-recursive
 
 info-am:
 
 install-data-am:
 
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
 install-exec-am:
 
+install-html: install-html-recursive
+
+install-html-am:
+
 install-info: install-info-recursive
 
+install-info-am:
+
 install-man:
 
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
@@ -493,21 +1689,25 @@
 
 ps-am:
 
-uninstall-am: uninstall-info-am
+uninstall-am:
 
-uninstall-info: uninstall-info-recursive
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
 
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
-	clean clean-generic clean-recursive ctags ctags-recursive \
-	distclean distclean-generic distclean-recursive distclean-tags \
-	distdir dvi dvi-am html html-am info info-am install \
-	install-am install-data install-data-am install-exec \
-	install-exec-am install-info install-info-am install-man \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	maintainer-clean-recursive mostlyclean mostlyclean-generic \
-	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am uninstall-info-am
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic cscopelist \
+	cscopelist-recursive ctags ctags-recursive distclean \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
+
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/examples/calc++/Makefile.am b/examples/calc++/Makefile.am
new file mode 100644
index 0000000..e8bbbac
--- /dev/null
+++ b/examples/calc++/Makefile.am
@@ -0,0 +1,93 @@
+## Process this file with automake to produce Makefile.in -*-Makefile-*-
+## Copyright (C) 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+## ------------------------------------- ##
+## Running the bison from this tarball.  ##
+## ------------------------------------- ##
+
+BISON = $(top_builddir)/tests/bison
+BISON_IN = $(top_srcdir)/tests/bison.in
+
+$(BISON): $(BISON_IN)
+	$(AM_V_GEN)cd $(top_builddir)/tests && $(MAKE) $(AM_MAKEFLAGS) bison
+
+## ------------ ##
+## Extracting.  ##
+## ------------ ##
+
+doc = $(top_srcdir)/doc/bison.texi
+extexi = $(top_srcdir)/examples/extexi
+# Extract in src.
+$(srcdir)/calc.stamp: $(doc) $(extexi)
+	$(AM_V_GEN)rm -f $@ $@.tmp
+	$(AM_V_at)touch $@.tmp
+	$(AM_V_at)cd $(srcdir) && \
+	   $(AWK) -f ../extexi -v VERSION="$(VERSION)" \
+	     ../../doc/bison.texi -- calc++-parser.yy \
+	     calc++-scanner.ll calc++.cc calc++-driver.hh calc++-driver.cc
+	$(AM_V_at)mv $@.tmp $@
+
+$(calc_extracted): $(srcdir)/calc.stamp
+
+## ------------------- ##
+## Parser generation.  ##
+## ------------------- ##
+
+DEFAULT_INCLUDES = -I. -I$(srcdir)
+BUILT_SOURCES = $(calc_extracted) $(calc_sources_generated)
+CLEANFILES = $(srcdir)/*.output *.tmp
+MAINTAINERCLEANFILES = $(srcdir)/*.stamp $(BUILT_SOURCES)
+
+# Compile the parser and save cycles.
+# This code comes from "Handling Tools that Produce Many Outputs",
+# from the Automake documentation.
+EXTRA_DIST =					\
+  $(srcdir)/calc++-parser.stamp			\
+  $(srcdir)/calc++-parser.yy			\
+  $(srcdir)/calc.stamp
+# Don't depend on $(BISON) otherwise we would rebuild these files
+# in srcdir, including during distcheck, which is forbidden.
+$(srcdir)/calc++-parser.stamp: $(srcdir)/calc++-parser.yy $(BISON_IN)
+	$(AM_V_GEN)rm -f calc++-parser.tmp
+	$(AM_V_at)touch calc++-parser.tmp
+	$(AM_V_at)$(BISON) -d -ra -S lalr1.cc -o $(srcdir)/calc++-parser.cc \
+	  $(srcdir)/calc++-parser.yy
+	$(AM_V_at)mv -f calc++-parser.tmp $@
+
+$(calc_sources_generated): $(srcdir)/calc++-parser.stamp
+	$(AM_V_GEN)if test -f $@; then :; else \
+	  rm -f $(srcdir)/calc++-parser.stamp && \
+	  $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/calc++-parser.stamp; \
+	fi
+
+
+## --------------------------- ##
+## Building & testing calc++.  ##
+## --------------------------- ##
+
+check_PROGRAMS = calc++
+
+calc_sources_extracted = $(srcdir)/calc++-scanner.ll $(srcdir)/calc++.cc \
+  $(srcdir)/calc++-driver.hh $(srcdir)/calc++-driver.cc
+calc_extracted = $(calc_sources_extracted) $(srcdir)/calc++-parser.yy
+calc_sources_generated = \
+  $(srcdir)/stack.hh $(srcdir)/position.hh $(srcdir)/location.hh \
+  $(srcdir)/calc++-parser.hh $(srcdir)/calc++-parser.cc
+
+calc___SOURCES = $(calc_sources_extracted) $(calc_sources_generated)
+
+TESTS = test
+EXTRA_DIST += $(TESTS)
diff --git a/examples/calc++/Makefile.in b/examples/calc++/Makefile.in
new file mode 100644
index 0000000..fdfb030
--- /dev/null
+++ b/examples/calc++/Makefile.in
@@ -0,0 +1,1873 @@
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = calc++$(EXEEXT)
+subdir = examples/calc++
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \
+	calc++-scanner.cc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
+	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
+	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
+	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__objects_1 = calc++-scanner.$(OBJEXT) calc++.$(OBJEXT) \
+	calc++-driver.$(OBJEXT)
+am__objects_2 = calc++-parser.$(OBJEXT)
+am_calc___OBJECTS = $(am__objects_1) $(am__objects_2)
+calc___OBJECTS = $(am_calc___OBJECTS)
+calc___LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
+AM_V_LEX = $(am__v_LEX_@AM_V@)
+am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@)
+am__v_LEX_0 = @echo "  LEX     " $@;
+am__v_LEX_1 = 
+YLWRAP = $(top_srcdir)/build-aux/ylwrap
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(calc___SOURCES)
+DIST_SOURCES = $(calc___SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = $(am__tty_colors_dummy)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOM4TE = @AUTOM4TE@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BISON_CXX_WORKS = @BISON_CXX_WORKS@
+BISON_C_WORKS = @BISON_C_WORKS@
+BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
+CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOT = @DOT@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
+GCC = @GCC@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
+LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YACC_LIBRARY = @YACC_LIBRARY@
+YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+aclocaldir = @aclocaldir@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+BISON = $(top_builddir)/tests/bison
+BISON_IN = $(top_srcdir)/tests/bison.in
+doc = $(top_srcdir)/doc/bison.texi
+extexi = $(top_srcdir)/examples/extexi
+DEFAULT_INCLUDES = -I. -I$(srcdir)
+BUILT_SOURCES = $(calc_extracted) $(calc_sources_generated)
+CLEANFILES = $(srcdir)/*.output *.tmp
+MAINTAINERCLEANFILES = $(srcdir)/*.stamp $(BUILT_SOURCES)
+
+# Compile the parser and save cycles.
+# This code comes from "Handling Tools that Produce Many Outputs",
+# from the Automake documentation.
+EXTRA_DIST = $(srcdir)/calc++-parser.stamp $(srcdir)/calc++-parser.yy \
+	$(srcdir)/calc.stamp $(TESTS)
+calc_sources_extracted = $(srcdir)/calc++-scanner.ll $(srcdir)/calc++.cc \
+  $(srcdir)/calc++-driver.hh $(srcdir)/calc++-driver.cc
+
+calc_extracted = $(calc_sources_extracted) $(srcdir)/calc++-parser.yy
+calc_sources_generated = \
+  $(srcdir)/stack.hh $(srcdir)/position.hh $(srcdir)/location.hh \
+  $(srcdir)/calc++-parser.hh $(srcdir)/calc++-parser.cc
+
+calc___SOURCES = $(calc_sources_extracted) $(calc_sources_generated)
+TESTS = test
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .ll .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits examples/calc++/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits examples/calc++/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+calc++$(EXEEXT): $(calc___OBJECTS) $(calc___DEPENDENCIES) $(EXTRA_calc___DEPENDENCIES) 
+	@rm -f calc++$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(calc___OBJECTS) $(calc___LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calc++-driver.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calc++-parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calc++-scanner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calc++.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+calc++.o: $(srcdir)/calc++.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT calc++.o -MD -MP -MF $(DEPDIR)/calc++.Tpo -c -o calc++.o `test -f '$(srcdir)/calc++.cc' || echo '$(srcdir)/'`$(srcdir)/calc++.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/calc++.Tpo $(DEPDIR)/calc++.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$(srcdir)/calc++.cc' object='calc++.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o calc++.o `test -f '$(srcdir)/calc++.cc' || echo '$(srcdir)/'`$(srcdir)/calc++.cc
+
+calc++.obj: $(srcdir)/calc++.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT calc++.obj -MD -MP -MF $(DEPDIR)/calc++.Tpo -c -o calc++.obj `if test -f '$(srcdir)/calc++.cc'; then $(CYGPATH_W) '$(srcdir)/calc++.cc'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/calc++.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/calc++.Tpo $(DEPDIR)/calc++.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$(srcdir)/calc++.cc' object='calc++.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o calc++.obj `if test -f '$(srcdir)/calc++.cc'; then $(CYGPATH_W) '$(srcdir)/calc++.cc'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/calc++.cc'; fi`
+
+calc++-driver.o: $(srcdir)/calc++-driver.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT calc++-driver.o -MD -MP -MF $(DEPDIR)/calc++-driver.Tpo -c -o calc++-driver.o `test -f '$(srcdir)/calc++-driver.cc' || echo '$(srcdir)/'`$(srcdir)/calc++-driver.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/calc++-driver.Tpo $(DEPDIR)/calc++-driver.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$(srcdir)/calc++-driver.cc' object='calc++-driver.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o calc++-driver.o `test -f '$(srcdir)/calc++-driver.cc' || echo '$(srcdir)/'`$(srcdir)/calc++-driver.cc
+
+calc++-driver.obj: $(srcdir)/calc++-driver.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT calc++-driver.obj -MD -MP -MF $(DEPDIR)/calc++-driver.Tpo -c -o calc++-driver.obj `if test -f '$(srcdir)/calc++-driver.cc'; then $(CYGPATH_W) '$(srcdir)/calc++-driver.cc'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/calc++-driver.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/calc++-driver.Tpo $(DEPDIR)/calc++-driver.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$(srcdir)/calc++-driver.cc' object='calc++-driver.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o calc++-driver.obj `if test -f '$(srcdir)/calc++-driver.cc'; then $(CYGPATH_W) '$(srcdir)/calc++-driver.cc'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/calc++-driver.cc'; fi`
+
+calc++-parser.o: $(srcdir)/calc++-parser.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT calc++-parser.o -MD -MP -MF $(DEPDIR)/calc++-parser.Tpo -c -o calc++-parser.o `test -f '$(srcdir)/calc++-parser.cc' || echo '$(srcdir)/'`$(srcdir)/calc++-parser.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/calc++-parser.Tpo $(DEPDIR)/calc++-parser.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$(srcdir)/calc++-parser.cc' object='calc++-parser.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o calc++-parser.o `test -f '$(srcdir)/calc++-parser.cc' || echo '$(srcdir)/'`$(srcdir)/calc++-parser.cc
+
+calc++-parser.obj: $(srcdir)/calc++-parser.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT calc++-parser.obj -MD -MP -MF $(DEPDIR)/calc++-parser.Tpo -c -o calc++-parser.obj `if test -f '$(srcdir)/calc++-parser.cc'; then $(CYGPATH_W) '$(srcdir)/calc++-parser.cc'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/calc++-parser.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/calc++-parser.Tpo $(DEPDIR)/calc++-parser.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$(srcdir)/calc++-parser.cc' object='calc++-parser.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o calc++-parser.obj `if test -f '$(srcdir)/calc++-parser.cc'; then $(CYGPATH_W) '$(srcdir)/calc++-parser.cc'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/calc++-parser.cc'; fi`
+
+.ll.cc:
+	$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+
+calc++-scanner.cc: $(srcdir)/calc++-scanner.ll
+	$(AM_V_LEX) \
+	$(am__skiplex) \
+	$(SHELL) $(YLWRAP) `test -f '$(srcdir)/calc++-scanner.ll' || echo '$(srcdir)/'`$(srcdir)/calc++-scanner.ll $(LEX_OUTPUT_ROOT).c calc++-scanner.cc -- $(LEX) $(AM_LFLAGS) $(LFLAGS)
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list=' $(TESTS) '; \
+	$(am__tty_colors); \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=XPASS; \
+	      ;; \
+	      *) \
+		col=$$grn; res=PASS; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xfail=`expr $$xfail + 1`; \
+		col=$$lgn; res=XFAIL; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=FAIL; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      col=$$blu; res=SKIP; \
+	    fi; \
+	    echo "$${col}$$res$${std}: $$tst"; \
+	  done; \
+	  if test "$$all" -eq 1; then \
+	    tests="test"; \
+	    All=""; \
+	  else \
+	    tests="tests"; \
+	    All="All "; \
+	  fi; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="$$All$$all $$tests passed"; \
+	    else \
+	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all $$tests failed"; \
+	    else \
+	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    if test "$$skip" -eq 1; then \
+	      skipped="($$skip test was not run)"; \
+	    else \
+	      skipped="($$skip tests were not run)"; \
+	    fi; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  if test "$$failed" -eq 0; then \
+	    col="$$grn"; \
+	  else \
+	    col="$$red"; \
+	  fi; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile
+installdirs:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-rm -f calc++-scanner.cc
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: all check check-am install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am
+
+
+$(BISON): $(BISON_IN)
+	$(AM_V_GEN)cd $(top_builddir)/tests && $(MAKE) $(AM_MAKEFLAGS) bison
+# Extract in src.
+$(srcdir)/calc.stamp: $(doc) $(extexi)
+	$(AM_V_GEN)rm -f $@ $@.tmp
+	$(AM_V_at)touch $@.tmp
+	$(AM_V_at)cd $(srcdir) && \
+	   $(AWK) -f ../extexi -v VERSION="$(VERSION)" \
+	     ../../doc/bison.texi -- calc++-parser.yy \
+	     calc++-scanner.ll calc++.cc calc++-driver.hh calc++-driver.cc
+	$(AM_V_at)mv $@.tmp $@
+
+$(calc_extracted): $(srcdir)/calc.stamp
+# Don't depend on $(BISON) otherwise we would rebuild these files
+# in srcdir, including during distcheck, which is forbidden.
+$(srcdir)/calc++-parser.stamp: $(srcdir)/calc++-parser.yy $(BISON_IN)
+	$(AM_V_GEN)rm -f calc++-parser.tmp
+	$(AM_V_at)touch calc++-parser.tmp
+	$(AM_V_at)$(BISON) -d -ra -S lalr1.cc -o $(srcdir)/calc++-parser.cc \
+	  $(srcdir)/calc++-parser.yy
+	$(AM_V_at)mv -f calc++-parser.tmp $@
+
+$(calc_sources_generated): $(srcdir)/calc++-parser.stamp
+	$(AM_V_GEN)if test -f $@; then :; else \
+	  rm -f $(srcdir)/calc++-parser.stamp && \
+	  $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/calc++-parser.stamp; \
+	fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/calc++/calc++-driver.cc b/examples/calc++/calc++-driver.cc
new file mode 100644
index 0000000..4b40e93
--- /dev/null
+++ b/examples/calc++/calc++-driver.cc
@@ -0,0 +1,38 @@
+#line 10146 "../../doc/bison.texi"
+#include "calc++-driver.hh"
+#include "calc++-parser.hh"
+
+calcxx_driver::calcxx_driver ()
+  : trace_scanning (false), trace_parsing (false)
+{
+  variables["one"] = 1;
+  variables["two"] = 2;
+}
+
+calcxx_driver::~calcxx_driver ()
+{
+}
+
+int
+calcxx_driver::parse (const std::string &f)
+{
+  file = f;
+  scan_begin ();
+  yy::calcxx_parser parser (*this);
+  parser.set_debug_level (trace_parsing);
+  int res = parser.parse ();
+  scan_end ();
+  return res;
+}
+
+void
+calcxx_driver::error (const yy::location& l, const std::string& m)
+{
+  std::cerr << l << ": " << m << std::endl;
+}
+
+void
+calcxx_driver::error (const std::string& m)
+{
+  std::cerr << m << std::endl;
+}
diff --git a/examples/calc++/calc++-driver.hh b/examples/calc++/calc++-driver.hh
new file mode 100644
index 0000000..e0ac6ee
--- /dev/null
+++ b/examples/calc++/calc++-driver.hh
@@ -0,0 +1,42 @@
+#line 10057 "../../doc/bison.texi"
+#ifndef CALCXX_DRIVER_HH
+# define CALCXX_DRIVER_HH
+# include <string>
+# include <map>
+# include "calc++-parser.hh"
+#line 10073 "../../doc/bison.texi"
+// Tell Flex the lexer's prototype ...
+# define YY_DECL                                        \
+  yy::calcxx_parser::token_type                         \
+  yylex (yy::calcxx_parser::semantic_type* yylval,      \
+         yy::calcxx_parser::location_type* yylloc,      \
+         calcxx_driver& driver)
+// ... and declare it for the parser's sake.
+YY_DECL;
+#line 10089 "../../doc/bison.texi"
+// Conducting the whole scanning and parsing of Calc++.
+class calcxx_driver
+{
+public:
+  calcxx_driver ();
+  virtual ~calcxx_driver ();
+
+  std::map<std::string, int> variables;
+
+  int result;
+#line 10107 "../../doc/bison.texi"
+  // Handling the scanner.
+  void scan_begin ();
+  void scan_end ();
+  bool trace_scanning;
+#line 10118 "../../doc/bison.texi"
+  // Run the parser.  Return 0 on success.
+  int parse (const std::string& f);
+  std::string file;
+  bool trace_parsing;
+#line 10132 "../../doc/bison.texi"
+  // Error handling.
+  void error (const yy::location& l, const std::string& m);
+  void error (const std::string& m);
+};
+#endif // ! CALCXX_DRIVER_HH
diff --git a/examples/calc++/calc++-parser.cc b/examples/calc++/calc++-parser.cc
new file mode 100644
index 0000000..f916b59
--- /dev/null
+++ b/examples/calc++/calc++-parser.cc
@@ -0,0 +1,1079 @@
+/* A Bison parser, made by GNU Bison 2.6.90.8-d4fe.  */
+
+/* Skeleton implementation for Bison LALR(1) parsers in C++
+   
+      Copyright (C) 2002-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* First part of user declarations.  */
+
+/* Line 279 of lalr1.cc  */
+#line 38 "../../../../examples/calc++/calc++-parser.cc"
+
+
+#include "calc++-parser.hh"
+
+/* User implementation prologue.  */
+
+/* Line 285 of lalr1.cc  */
+#line 46 "../../../../examples/calc++/calc++-parser.cc"
+/* Unqualified %code blocks.  */
+/* Line 286 of lalr1.cc  */
+#line 10280 "../../doc/bison.texi"
+
+# include "calc++-driver.hh"
+
+
+/* Line 286 of lalr1.cc  */
+#line 55 "../../../../examples/calc++/calc++-parser.cc"
+
+
+# ifndef YY_NULL
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULL nullptr
+#  else
+#   define YY_NULL 0
+#  endif
+# endif
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+# ifndef YYLLOC_DEFAULT
+#  define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                  \
+      if (N)                                                            \
+        {                                                               \
+          (Current).begin  = YYRHSLOC (Rhs, 1).begin;                   \
+          (Current).end    = YYRHSLOC (Rhs, N).end;                     \
+        }                                                               \
+      else                                                              \
+        {                                                               \
+          (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
+        }                                                               \
+    while (/*CONSTCOND*/ false)
+# endif
+
+
+/* Suppress unused-variable warnings by "using" E.  */
+#define YYUSE(e) ((void) (e))
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+/* A pseudo ostream that takes yydebug_ into account.  */
+# define YYCDEBUG if (yydebug_) (*yycdebug_)
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)	\
+do {							\
+  if (yydebug_)						\
+    {							\
+      *yycdebug_ << Title << ' ';			\
+      yy_symbol_print_ ((Type), (Value), (Location));	\
+      *yycdebug_ << std::endl;				\
+    }							\
+} while (false)
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug_)				\
+    yy_reduce_print_ (Rule);		\
+} while (false)
+
+# define YY_STACK_PRINT()		\
+do {					\
+  if (yydebug_)				\
+    yystack_print_ ();			\
+} while (false)
+
+#else /* !YYDEBUG */
+
+# define YYCDEBUG if (false) std::cerr
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) YYUSE(Type)
+# define YY_REDUCE_PRINT(Rule)        static_cast<void>(0)
+# define YY_STACK_PRINT()             static_cast<void>(0)
+
+#endif /* !YYDEBUG */
+
+#define yyerrok		(yyerrstatus_ = 0)
+#define yyclearin	(yychar = yyempty_)
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+#define YYRECOVERING()  (!!yyerrstatus_)
+
+
+namespace yy {
+/* Line 353 of lalr1.cc  */
+#line 150 "../../../../examples/calc++/calc++-parser.cc"
+
+  /* Return YYSTR after stripping away unnecessary quotes and
+     backslashes, so that it's suitable for yyerror.  The heuristic is
+     that double-quoting is unnecessary unless the string contains an
+     apostrophe, a comma, or backslash (other than backslash-backslash).
+     YYSTR is taken from yytname.  */
+  std::string
+  calcxx_parser::yytnamerr_ (const char *yystr)
+  {
+    if (*yystr == '"')
+      {
+        std::string yyr = "";
+        char const *yyp = yystr;
+
+        for (;;)
+          switch (*++yyp)
+            {
+            case '\'':
+            case ',':
+              goto do_not_strip_quotes;
+
+            case '\\':
+              if (*++yyp != '\\')
+                goto do_not_strip_quotes;
+              /* Fall through.  */
+            default:
+              yyr += *yyp;
+              break;
+
+            case '"':
+              return yyr;
+            }
+      do_not_strip_quotes: ;
+      }
+
+    return yystr;
+  }
+
+
+  /// Build a parser object.
+  calcxx_parser::calcxx_parser (calcxx_driver& driver_yyarg)
+    :
+#if YYDEBUG
+      yydebug_ (false),
+      yycdebug_ (&std::cerr),
+#endif
+      driver (driver_yyarg)
+  {
+  }
+
+  calcxx_parser::~calcxx_parser ()
+  {
+  }
+
+#if YYDEBUG
+  /*--------------------------------.
+  | Print this symbol on YYOUTPUT.  |
+  `--------------------------------*/
+
+  inline void
+  calcxx_parser::yy_symbol_value_print_ (int yytype,
+			   const semantic_type* yyvaluep, const location_type* yylocationp)
+  {
+    YYUSE (yylocationp);
+    YYUSE (yyvaluep);
+    std::ostream& yyo = debug_stream ();
+    std::ostream& yyoutput = yyo;
+    YYUSE (yyoutput);
+    switch (yytype)
+      {
+        case 4: /* "identifier" */
+/* Line 423 of lalr1.cc  */
+#line 10309 "../../doc/bison.texi"
+        { yyoutput << *((*yyvaluep).sval); };
+/* Line 423 of lalr1.cc  */
+#line 226 "../../../../examples/calc++/calc++-parser.cc"
+        break;
+      case 5: /* "number" */
+/* Line 423 of lalr1.cc  */
+#line 10312 "../../doc/bison.texi"
+        { yyoutput << ((*yyvaluep).ival); };
+/* Line 423 of lalr1.cc  */
+#line 233 "../../../../examples/calc++/calc++-parser.cc"
+        break;
+      case 14: /* exp */
+/* Line 423 of lalr1.cc  */
+#line 10312 "../../doc/bison.texi"
+        { yyoutput << ((*yyvaluep).ival); };
+/* Line 423 of lalr1.cc  */
+#line 240 "../../../../examples/calc++/calc++-parser.cc"
+        break;
+       default:
+	  break;
+      }
+  }
+
+
+  void
+  calcxx_parser::yy_symbol_print_ (int yytype,
+			   const semantic_type* yyvaluep, const location_type* yylocationp)
+  {
+    *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm")
+	       << ' ' << yytname_[yytype] << " ("
+	       << *yylocationp << ": ";
+    yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
+    *yycdebug_ << ')';
+  }
+#endif
+
+  void
+  calcxx_parser::yydestruct_ (const char* yymsg,
+			   int yytype, semantic_type* yyvaluep, location_type* yylocationp)
+  {
+    YYUSE (yylocationp);
+    YYUSE (yymsg);
+    YYUSE (yyvaluep);
+
+    if (yymsg)
+      YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+    switch (yytype)
+      {
+        case 4: /* "identifier" */
+/* Line 455 of lalr1.cc  */
+#line 10310 "../../doc/bison.texi"
+        { delete ((*yyvaluep).sval); };
+/* Line 455 of lalr1.cc  */
+#line 278 "../../../../examples/calc++/calc++-parser.cc"
+        break;
+
+	default:
+	  break;
+      }
+  }
+
+  void
+  calcxx_parser::yypop_ (unsigned int n)
+  {
+    yystate_stack_.pop (n);
+    yysemantic_stack_.pop (n);
+    yylocation_stack_.pop (n);
+  }
+
+#if YYDEBUG
+  std::ostream&
+  calcxx_parser::debug_stream () const
+  {
+    return *yycdebug_;
+  }
+
+  void
+  calcxx_parser::set_debug_stream (std::ostream& o)
+  {
+    yycdebug_ = &o;
+  }
+
+
+  calcxx_parser::debug_level_type
+  calcxx_parser::debug_level () const
+  {
+    return yydebug_;
+  }
+
+  void
+  calcxx_parser::set_debug_level (debug_level_type l)
+  {
+    yydebug_ = l;
+  }
+#endif
+
+  inline bool
+  calcxx_parser::yy_pact_value_is_default_ (int yyvalue)
+  {
+    return yyvalue == yypact_ninf_;
+  }
+
+  inline bool
+  calcxx_parser::yy_table_value_is_error_ (int yyvalue)
+  {
+    return yyvalue == yytable_ninf_;
+  }
+
+  int
+  calcxx_parser::parse ()
+  {
+    /// Lookahead and lookahead in internal form.
+    int yychar = yyempty_;
+    int yytoken = 0;
+
+    // State.
+    int yyn;
+    int yylen = 0;
+    int yystate = 0;
+
+    // Error handling.
+    int yynerrs_ = 0;
+    int yyerrstatus_ = 0;
+
+    /// Semantic value of the lookahead.
+    static semantic_type yyval_default;
+    semantic_type yylval = yyval_default;
+    /// Location of the lookahead.
+    location_type yylloc;
+    /// The locations where the error started and ended.
+    location_type yyerror_range[3];
+
+    /// $$.
+    semantic_type yyval;
+    /// @$.
+    location_type yyloc;
+
+    int yyresult;
+
+    // FIXME: This shoud be completely indented.  It is not yet to
+    // avoid gratuitous conflicts when merging into the master branch.
+    try
+      {
+    YYCDEBUG << "Starting parse" << std::endl;
+
+
+/* User initialization code.  */
+/* Line 545 of lalr1.cc  */
+#line 10242 "../../doc/bison.texi"
+{
+  // Initialize the initial location.
+  yylloc.begin.filename = yylloc.end.filename = &driver.file;
+}
+/* Line 545 of lalr1.cc  */
+#line 379 "../../../../examples/calc++/calc++-parser.cc"
+
+    /* Initialize the stacks.  The initial state will be pushed in
+       yynewstate, since the latter expects the semantical and the
+       location values to have been already stored, initialize these
+       stacks with a primary value.  */
+    yystate_stack_ = state_stack_type (0);
+    yysemantic_stack_ = semantic_stack_type (0);
+    yylocation_stack_ = location_stack_type (0);
+    yysemantic_stack_.push (yylval);
+    yylocation_stack_.push (yylloc);
+
+    /* New state.  */
+  yynewstate:
+    yystate_stack_.push (yystate);
+    YYCDEBUG << "Entering state " << yystate << std::endl;
+
+    /* Accept?  */
+    if (yystate == yyfinal_)
+      goto yyacceptlab;
+
+    goto yybackup;
+
+    /* Backup.  */
+  yybackup:
+
+    /* Try to take a decision without lookahead.  */
+    yyn = yypact_[yystate];
+    if (yy_pact_value_is_default_ (yyn))
+      goto yydefault;
+
+    /* Read a lookahead token.  */
+    if (yychar == yyempty_)
+      {
+        YYCDEBUG << "Reading a token: ";
+        yychar = yylex (&yylval, &yylloc, driver);
+      }
+
+    /* Convert token to internal form.  */
+    if (yychar <= yyeof_)
+      {
+	yychar = yytoken = yyeof_;
+	YYCDEBUG << "Now at end of input." << std::endl;
+      }
+    else
+      {
+	yytoken = yytranslate_ (yychar);
+	YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+      }
+
+    /* If the proper action on seeing token YYTOKEN is to reduce or to
+       detect an error, take that action.  */
+    yyn += yytoken;
+    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
+      goto yydefault;
+
+    /* Reduce or error.  */
+    yyn = yytable_[yyn];
+    if (yyn <= 0)
+      {
+	if (yy_table_value_is_error_ (yyn))
+	  goto yyerrlab;
+	yyn = -yyn;
+	goto yyreduce;
+      }
+
+    /* Shift the lookahead token.  */
+    YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+    /* Discard the token being shifted.  */
+    yychar = yyempty_;
+
+    yysemantic_stack_.push (yylval);
+    yylocation_stack_.push (yylloc);
+
+    /* Count tokens shifted since error; after three, turn off error
+       status.  */
+    if (yyerrstatus_)
+      --yyerrstatus_;
+
+    yystate = yyn;
+    goto yynewstate;
+
+  /*-----------------------------------------------------------.
+  | yydefault -- do the default action for the current state.  |
+  `-----------------------------------------------------------*/
+  yydefault:
+    yyn = yydefact_[yystate];
+    if (yyn == 0)
+      goto yyerrlab;
+    goto yyreduce;
+
+  /*-----------------------------.
+  | yyreduce -- Do a reduction.  |
+  `-----------------------------*/
+  yyreduce:
+    yylen = yyr2_[yyn];
+    /* If YYLEN is nonzero, implement the default value of the action:
+       `$$ = $1'.  Otherwise, use the top of the stack.
+
+       Otherwise, the following line sets YYVAL to garbage.
+       This behavior is undocumented and Bison
+       users should not rely upon it.  */
+    if (yylen)
+      yyval = yysemantic_stack_[yylen - 1];
+    else
+      yyval = yysemantic_stack_[0];
+
+    // Compute the default @$.
+    {
+      slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
+      YYLLOC_DEFAULT (yyloc, slice, yylen);
+    }
+
+    // Perform the reduction.
+    YY_REDUCE_PRINT (yyn);
+    switch (yyn)
+      {
+          case 2:
+/* Line 670 of lalr1.cc  */
+#line 10322 "../../doc/bison.texi"
+    { driver.result = (yysemantic_stack_[(2) - (2)].ival); }
+    break;
+
+  case 3:
+/* Line 670 of lalr1.cc  */
+#line 10325 "../../doc/bison.texi"
+    {}
+    break;
+
+  case 4:
+/* Line 670 of lalr1.cc  */
+#line 10326 "../../doc/bison.texi"
+    {}
+    break;
+
+  case 5:
+/* Line 670 of lalr1.cc  */
+#line 10330 "../../doc/bison.texi"
+    { driver.variables[*(yysemantic_stack_[(3) - (1)].sval)] = (yysemantic_stack_[(3) - (3)].ival); delete (yysemantic_stack_[(3) - (1)].sval); }
+    break;
+
+  case 6:
+/* Line 670 of lalr1.cc  */
+#line 10334 "../../doc/bison.texi"
+    { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) + (yysemantic_stack_[(3) - (3)].ival); }
+    break;
+
+  case 7:
+/* Line 670 of lalr1.cc  */
+#line 10335 "../../doc/bison.texi"
+    { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) - (yysemantic_stack_[(3) - (3)].ival); }
+    break;
+
+  case 8:
+/* Line 670 of lalr1.cc  */
+#line 10336 "../../doc/bison.texi"
+    { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) * (yysemantic_stack_[(3) - (3)].ival); }
+    break;
+
+  case 9:
+/* Line 670 of lalr1.cc  */
+#line 10337 "../../doc/bison.texi"
+    { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) / (yysemantic_stack_[(3) - (3)].ival); }
+    break;
+
+  case 10:
+/* Line 670 of lalr1.cc  */
+#line 10338 "../../doc/bison.texi"
+    { (yyval.ival) = driver.variables[*(yysemantic_stack_[(1) - (1)].sval)]; delete (yysemantic_stack_[(1) - (1)].sval); }
+    break;
+
+  case 11:
+/* Line 670 of lalr1.cc  */
+#line 10339 "../../doc/bison.texi"
+    { (yyval.ival) = (yysemantic_stack_[(1) - (1)].ival); }
+    break;
+
+
+/* Line 670 of lalr1.cc  */
+#line 559 "../../../../examples/calc++/calc++-parser.cc"
+      default:
+        break;
+      }
+
+    /* User semantic actions sometimes alter yychar, and that requires
+       that yytoken be updated with the new translation.  We take the
+       approach of translating immediately before every use of yytoken.
+       One alternative is translating here after every semantic action,
+       but that translation would be missed if the semantic action
+       invokes YYABORT, YYACCEPT, or YYERROR immediately after altering
+       yychar.  In the case of YYABORT or YYACCEPT, an incorrect
+       destructor might then be invoked immediately.  In the case of
+       YYERROR, subsequent parser actions might lead to an incorrect
+       destructor call or verbose syntax error message before the
+       lookahead is translated.  */
+    YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
+
+    yypop_ (yylen);
+    yylen = 0;
+    YY_STACK_PRINT ();
+
+    yysemantic_stack_.push (yyval);
+    yylocation_stack_.push (yyloc);
+
+    /* Shift the result of the reduction.  */
+    yyn = yyr1_[yyn];
+    yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
+    if (0 <= yystate && yystate <= yylast_
+	&& yycheck_[yystate] == yystate_stack_[0])
+      yystate = yytable_[yystate];
+    else
+      yystate = yydefgoto_[yyn - yyntokens_];
+    goto yynewstate;
+
+  /*------------------------------------.
+  | yyerrlab -- here on detecting error |
+  `------------------------------------*/
+  yyerrlab:
+    /* Make sure we have latest lookahead translation.  See comments at
+       user semantic actions for why this is necessary.  */
+    yytoken = yytranslate_ (yychar);
+
+    /* If not already recovering from an error, report this error.  */
+    if (!yyerrstatus_)
+      {
+	++yynerrs_;
+	if (yychar == yyempty_)
+	  yytoken = yyempty_;
+	error (yylloc, yysyntax_error_ (yystate, yytoken));
+      }
+
+    yyerror_range[1] = yylloc;
+    if (yyerrstatus_ == 3)
+      {
+        /* If just tried and failed to reuse lookahead token after an
+           error, discard it.  */
+        if (yychar <= yyeof_)
+          {
+            /* Return failure if at end of input.  */
+            if (yychar == yyeof_)
+              YYABORT;
+          }
+        else
+          {
+            yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
+            yychar = yyempty_;
+          }
+      }
+
+    /* Else will try to reuse lookahead token after shifting the error
+       token.  */
+    goto yyerrlab1;
+
+
+  /*---------------------------------------------------.
+  | yyerrorlab -- error raised explicitly by YYERROR.  |
+  `---------------------------------------------------*/
+  yyerrorlab:
+
+    /* Pacify compilers like GCC when the user code never invokes
+       YYERROR and the label yyerrorlab therefore never appears in user
+       code.  */
+    if (false)
+      goto yyerrorlab;
+
+    yyerror_range[1] = yylocation_stack_[yylen - 1];
+    /* Do not reclaim the symbols of the rule which action triggered
+       this YYERROR.  */
+    yypop_ (yylen);
+    yylen = 0;
+    yystate = yystate_stack_[0];
+    goto yyerrlab1;
+
+  /*-------------------------------------------------------------.
+  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
+  `-------------------------------------------------------------*/
+  yyerrlab1:
+    yyerrstatus_ = 3;	/* Each real token shifted decrements this.  */
+
+    for (;;)
+      {
+	yyn = yypact_[yystate];
+	if (!yy_pact_value_is_default_ (yyn))
+	{
+	  yyn += yyterror_;
+	  if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
+	    {
+	      yyn = yytable_[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+	/* Pop the current state because it cannot handle the error token.  */
+	if (yystate_stack_.height () == 1)
+	  YYABORT;
+
+	yyerror_range[1] = yylocation_stack_[0];
+	yydestruct_ ("Error: popping",
+		     yystos_[yystate],
+		     &yysemantic_stack_[0], &yylocation_stack_[0]);
+	yypop_ ();
+	yystate = yystate_stack_[0];
+	YY_STACK_PRINT ();
+      }
+
+    yyerror_range[2] = yylloc;
+    // Using YYLLOC is tempting, but would change the location of
+    // the lookahead.  YYLOC is available though.
+    YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
+    yysemantic_stack_.push (yylval);
+    yylocation_stack_.push (yyloc);
+
+    /* Shift the error token.  */
+    YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
+		     &yysemantic_stack_[0], &yylocation_stack_[0]);
+
+    yystate = yyn;
+    goto yynewstate;
+
+    /* Accept.  */
+  yyacceptlab:
+    yyresult = 0;
+    goto yyreturn;
+
+    /* Abort.  */
+  yyabortlab:
+    yyresult = 1;
+    goto yyreturn;
+
+  yyreturn:
+    if (yychar != yyempty_)
+      {
+        /* Make sure we have latest lookahead translation.  See comments
+           at user semantic actions for why this is necessary.  */
+        yytoken = yytranslate_ (yychar);
+        yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval,
+                     &yylloc);
+      }
+
+    /* Do not reclaim the symbols of the rule which action triggered
+       this YYABORT or YYACCEPT.  */
+    yypop_ (yylen);
+    while (1 < yystate_stack_.height ())
+      {
+        yydestruct_ ("Cleanup: popping",
+                     yystos_[yystate_stack_[0]],
+                     &yysemantic_stack_[0],
+                     &yylocation_stack_[0]);
+        yypop_ ();
+      }
+
+    return yyresult;
+    }
+    catch (...)
+      {
+        YYCDEBUG << "Exception caught: cleaning lookahead and stack"
+                 << std::endl;
+        // Do not try to display the values of the reclaimed symbols,
+        // as their printer might throw an exception.
+        if (yychar != yyempty_)
+          {
+            /* Make sure we have latest lookahead translation.  See
+               comments at user semantic actions for why this is
+               necessary.  */
+            yytoken = yytranslate_ (yychar);
+            yydestruct_ (YY_NULL, yytoken, &yylval, &yylloc);
+          }
+
+        while (1 < yystate_stack_.height ())
+          {
+            yydestruct_ (YY_NULL,
+                         yystos_[yystate_stack_[0]],
+                         &yysemantic_stack_[0],
+                         &yylocation_stack_[0]);
+            yypop_ ();
+          }
+        throw;
+      }
+  }
+
+  // Generate an error message.
+  std::string
+  calcxx_parser::yysyntax_error_ (int yystate, int yytoken)
+  {
+    std::string yyres;
+    // Number of reported tokens (one for the "unexpected", one per
+    // "expected").
+    size_t yycount = 0;
+    // Its maximum.
+    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+    // Arguments of yyformat.
+    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+
+    /* There are many possibilities here to consider:
+       - If this state is a consistent state with a default action, then
+         the only way this function was invoked is if the default action
+         is an error action.  In that case, don't check for expected
+         tokens because there are none.
+       - The only way there can be no lookahead present (in yytoken) is
+         if this state is a consistent state with a default action.
+         Thus, detecting the absence of a lookahead is sufficient to
+         determine that there is no unexpected or expected token to
+         report.  In that case, just report a simple "syntax error".
+       - Don't assume there isn't a lookahead just because this state is
+         a consistent state with a default action.  There might have
+         been a previous inconsistent state, consistent state with a
+         non-default action, or user semantic action that manipulated
+         yychar.
+       - Of course, the expected token list depends on states to have
+         correct lookahead information, and it depends on the parser not
+         to perform extra reductions after fetching a lookahead from the
+         scanner and before detecting a syntax error.  Thus, state
+         merging (from LALR or IELR) and default reductions corrupt the
+         expected token list.  However, the list is correct for
+         canonical LR with one exception: it will still contain any
+         token that will not be accepted due to an error action in a
+         later state.
+    */
+    if (yytoken != yyempty_)
+      {
+        yyarg[yycount++] = yytname_[yytoken];
+        int yyn = yypact_[yystate];
+        if (!yy_pact_value_is_default_ (yyn))
+          {
+            /* Start YYX at -YYN if negative to avoid negative indexes in
+               YYCHECK.  In other words, skip the first -YYN actions for
+               this state because they are default actions.  */
+            int yyxbegin = yyn < 0 ? -yyn : 0;
+            /* Stay within bounds of both yycheck and yytname.  */
+            int yychecklim = yylast_ - yyn + 1;
+            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
+            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
+              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
+                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
+                {
+                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                    {
+                      yycount = 1;
+                      break;
+                    }
+                  else
+                    yyarg[yycount++] = yytname_[yyx];
+                }
+          }
+      }
+
+    char const* yyformat = YY_NULL;
+    switch (yycount)
+      {
+#define YYCASE_(N, S)                         \
+        case N:                               \
+          yyformat = S;                       \
+        break
+        YYCASE_(0, YY_("syntax error"));
+        YYCASE_(1, YY_("syntax error, unexpected %s"));
+        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+#undef YYCASE_
+      }
+
+    // Argument number.
+    size_t yyi = 0;
+    for (char const* yyp = yyformat; *yyp; ++yyp)
+      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
+        {
+          yyres += yytnamerr_ (yyarg[yyi++]);
+          ++yyp;
+        }
+      else
+        yyres += *yyp;
+    return yyres;
+  }
+
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+  const signed char calcxx_parser::yypact_ninf_ = -9;
+  const signed char
+  calcxx_parser::yypact_[] =
+  {
+        -9,    13,     5,    -9,    14,    -9,    -9,    -1,     7,     7,
+       7,     7,     7,    -9,    -1,     6,     6,    -9,    -9
+  };
+
+  /* YYDEFACT[S] -- default reduction number in state S.  Performed when
+     YYTABLE doesn't specify something else to do.  Zero means the
+     default is an error.  */
+  const unsigned char
+  calcxx_parser::yydefact_[] =
+  {
+         3,     0,     0,     1,    10,    11,     4,     2,     0,     0,
+       0,     0,     0,    10,     5,     6,     7,     8,     9
+  };
+
+  /* YYPGOTO[NTERM-NUM].  */
+  const signed char
+  calcxx_parser::yypgoto_[] =
+  {
+        -9,    -9,    -9,    -9,    -8
+  };
+
+  /* YYDEFGOTO[NTERM-NUM].  */
+  const signed char
+  calcxx_parser::yydefgoto_[] =
+  {
+        -1,     1,     2,     6,     7
+  };
+
+  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule which
+     number is the opposite.  If YYTABLE_NINF_, syntax error.  */
+  const signed char calcxx_parser::yytable_ninf_ = -1;
+  const unsigned char
+  calcxx_parser::yytable_[] =
+  {
+        14,    15,    16,    17,    18,     9,    10,    11,    12,     4,
+       5,    13,     5,     3,    11,    12,     0,     8
+  };
+
+  /* YYCHECK.  */
+  const signed char
+  calcxx_parser::yycheck_[] =
+  {
+         8,     9,    10,    11,    12,     6,     7,     8,     9,     4,
+       5,     4,     5,     0,     8,     9,    -1,     3
+  };
+
+  /* STOS_[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+  const unsigned char
+  calcxx_parser::yystos_[] =
+  {
+         0,    11,    12,     0,     4,     5,    13,    14,     3,     6,
+       7,     8,     9,     4,    14,    14,    14,    14,    14
+  };
+
+#if YYDEBUG
+  /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
+     to YYLEX-NUM.  */
+  const unsigned short int
+  calcxx_parser::yytoken_number_[] =
+  {
+         0,   256,   257,   258,   259,   260,    43,    45,    42,    47
+  };
+#endif
+
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+  const unsigned char
+  calcxx_parser::yyr1_[] =
+  {
+         0,    10,    11,    12,    12,    13,    14,    14,    14,    14,
+      14,    14
+  };
+
+  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+  const unsigned char
+  calcxx_parser::yyr2_[] =
+  {
+         0,     2,     2,     0,     2,     3,     3,     3,     3,     3,
+       1,     1
+  };
+
+
+  /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+     First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
+  const char*
+  const calcxx_parser::yytname_[] =
+  {
+    "\"end of file\"", "error", "$undefined", "\":=\"", "\"identifier\"",
+  "\"number\"", "'+'", "'-'", "'*'", "'/'", "$accept", "unit",
+  "assignments", "assignment", "exp", YY_NULL
+  };
+
+#if YYDEBUG
+  /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+  const calcxx_parser::rhs_number_type
+  calcxx_parser::yyrhs_[] =
+  {
+        11,     0,    -1,    12,    14,    -1,    -1,    12,    13,    -1,
+       4,     3,    14,    -1,    14,     6,    14,    -1,    14,     7,
+      14,    -1,    14,     8,    14,    -1,    14,     9,    14,    -1,
+       4,    -1,     5,    -1
+  };
+
+  /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+     YYRHS.  */
+  const unsigned char
+  calcxx_parser::yyprhs_[] =
+  {
+         0,     0,     3,     6,     7,    10,    14,    18,    22,    26,
+      30,    32
+  };
+
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+  const unsigned short int
+  calcxx_parser::yyrline_[] =
+  {
+         0, 10322, 10322, 10325, 10326, 10329, 10334, 10335, 10336, 10337,
+   10338, 10339
+  };
+
+  // Print the state stack on the debug stream.
+  void
+  calcxx_parser::yystack_print_ ()
+  {
+    *yycdebug_ << "Stack now";
+    for (state_stack_type::const_iterator i = yystate_stack_.begin ();
+	 i != yystate_stack_.end (); ++i)
+      *yycdebug_ << ' ' << *i;
+    *yycdebug_ << std::endl;
+  }
+
+  // Report on the debug stream that the rule \a yyrule is going to be reduced.
+  void
+  calcxx_parser::yy_reduce_print_ (int yyrule)
+  {
+    unsigned int yylno = yyrline_[yyrule];
+    int yynrhs = yyr2_[yyrule];
+    /* Print the symbols being reduced, and their result.  */
+    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
+	       << " (line " << yylno << "):" << std::endl;
+    /* The symbols being reduced.  */
+    for (int yyi = 0; yyi < yynrhs; yyi++)
+      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
+		       yyrhs_[yyprhs_[yyrule] + yyi],
+		       &(yysemantic_stack_[(yynrhs) - (yyi + 1)]),
+		       &(yylocation_stack_[(yynrhs) - (yyi + 1)]));
+  }
+#endif // YYDEBUG
+
+  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+  calcxx_parser::token_number_type
+  calcxx_parser::yytranslate_ (int t)
+  {
+    static
+    const token_number_type
+    translate_table[] =
+    {
+           0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     8,     6,     2,     7,     2,     9,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5
+    };
+    if ((unsigned int) t <= yyuser_token_number_max_)
+      return translate_table[t];
+    else
+      return yyundef_token_;
+  }
+
+  const int calcxx_parser::yyeof_ = 0;
+  const int calcxx_parser::yylast_ = 17;
+  const int calcxx_parser::yynnts_ = 5;
+  const int calcxx_parser::yyempty_ = -2;
+  const int calcxx_parser::yyfinal_ = 3;
+  const int calcxx_parser::yyterror_ = 1;
+  const int calcxx_parser::yyerrcode_ = 256;
+  const int calcxx_parser::yyntokens_ = 10;
+
+  const unsigned int calcxx_parser::yyuser_token_number_max_ = 260;
+  const calcxx_parser::token_number_type calcxx_parser::yyundef_token_ = 2;
+
+
+} // yy
+/* Line 1141 of lalr1.cc  */
+#line 1070 "../../../../examples/calc++/calc++-parser.cc"
+/* Line 1142 of lalr1.cc  */
+#line 10340 "../../doc/bison.texi"
+
+#line 10349 "../../doc/bison.texi"
+void
+yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l,
+                          const std::string& m)
+{
+  driver.error (l, m);
+}
diff --git a/examples/calc++/calc++-parser.hh b/examples/calc++/calc++-parser.hh
new file mode 100644
index 0000000..aa7b471
--- /dev/null
+++ b/examples/calc++/calc++-parser.hh
@@ -0,0 +1,283 @@
+/* A Bison parser, made by GNU Bison 2.6.90.8-d4fe.  */
+
+/* Skeleton interface for Bison LALR(1) parsers in C++
+   
+      Copyright (C) 2002-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/**
+ ** \file ../../../../examples/calc++/calc++-parser.hh
+ ** Define the yy::parser class.
+ */
+
+/* C++ LALR(1) parser skeleton written by Akim Demaille.  */
+
+#ifndef YY_YY_EXAMPLES_CALC_CALC_PARSER_HH_INCLUDED
+# define YY_YY_EXAMPLES_CALC_CALC_PARSER_HH_INCLUDED
+
+/* "%code requires" blocks.  */
+/* Line 33 of lalr1.cc  */
+#line 10214 "../../doc/bison.texi"
+
+# include <string>
+class calcxx_driver;
+
+
+/* Line 33 of lalr1.cc  */
+#line 53 "../../../../examples/calc++/calc++-parser.hh"
+
+
+#include <string>
+#include <iostream>
+#include "stack.hh"
+#include "location.hh"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 1
+#endif
+
+
+namespace yy {
+/* Line 33 of lalr1.cc  */
+#line 69 "../../../../examples/calc++/calc++-parser.hh"
+
+  /// A Bison parser.
+  class calcxx_parser
+  {
+  public:
+    /// Symbol semantic values.
+#ifndef YYSTYPE
+    union semantic_type
+    {
+/* Line 33 of lalr1.cc  */
+#line 10267 "../../doc/bison.texi"
+
+  int          ival;
+  std::string *sval;
+
+
+/* Line 33 of lalr1.cc  */
+#line 87 "../../../../examples/calc++/calc++-parser.hh"
+    };
+#else
+    typedef YYSTYPE semantic_type;
+#endif
+    /// Symbol locations.
+    typedef location location_type;
+    /// Tokens.
+    struct token
+    {
+      /* Tokens.  */
+   enum yytokentype {
+     END = 0,
+     ASSIGN = 258,
+     IDENTIFIER = 259,
+     NUMBER = 260
+   };
+
+    };
+    /// Token type.
+    typedef token::yytokentype token_type;
+
+    /// Build a parser object.
+    calcxx_parser (calcxx_driver& driver_yyarg);
+    virtual ~calcxx_parser ();
+
+    /// Parse.
+    /// \returns  0 iff parsing succeeded.
+    virtual int parse ();
+
+#if YYDEBUG
+    /// The current debugging stream.
+    std::ostream& debug_stream () const;
+    /// Set the current debugging stream.
+    void set_debug_stream (std::ostream &);
+
+    /// Type for debugging levels.
+    typedef int debug_level_type;
+    /// The current debugging level.
+    debug_level_type debug_level () const;
+    /// Set the current debugging level.
+    void set_debug_level (debug_level_type l);
+#endif
+
+  private:
+    /// Report a syntax error.
+    /// \param loc    where the syntax error is found.
+    /// \param msg    a description of the syntax error.
+    virtual void error (const location_type& loc, const std::string& msg);
+
+    /// Generate an error message.
+    /// \param state   the state where the error occurred.
+    /// \param tok     the lookahead token.
+    virtual std::string yysyntax_error_ (int yystate, int tok);
+
+#if YYDEBUG
+    /// \brief Report a symbol value on the debug stream.
+    /// \param yytype       The token type.
+    /// \param yyvaluep     Its semantic value.
+    /// \param yylocationp  Its location.
+    virtual void yy_symbol_value_print_ (int yytype,
+					 const semantic_type* yyvaluep,
+					 const location_type* yylocationp);
+    /// \brief Report a symbol on the debug stream.
+    /// \param yytype       The token type.
+    /// \param yyvaluep     Its semantic value.
+    /// \param yylocationp  Its location.
+    virtual void yy_symbol_print_ (int yytype,
+				   const semantic_type* yyvaluep,
+				   const location_type* yylocationp);
+#endif
+
+
+    /// State numbers.
+    typedef int state_type;
+    /// State stack type.
+    typedef stack<state_type>    state_stack_type;
+    /// Semantic value stack type.
+    typedef stack<semantic_type> semantic_stack_type;
+    /// location stack type.
+    typedef stack<location_type> location_stack_type;
+
+    /// The state stack.
+    state_stack_type yystate_stack_;
+    /// The semantic value stack.
+    semantic_stack_type yysemantic_stack_;
+    /// The location stack.
+    location_stack_type yylocation_stack_;
+
+    /// Whether the given \c yypact_ value indicates a defaulted state.
+    /// \param yyvalue   the value to check
+    static bool yy_pact_value_is_default_ (int yyvalue);
+
+    /// Whether the given \c yytable_ value indicates a syntax error.
+    /// \param yyvalue   the value to check
+    static bool yy_table_value_is_error_ (int yyvalue);
+
+    /// Internal symbol numbers.
+    typedef unsigned char token_number_type;
+    /* Tables.  */
+    /// For a state, the index in \a yytable_ of its portion.
+    static const signed char yypact_[];
+    static const signed char yypact_ninf_;
+
+    /// For a state, default reduction number.
+    /// Unless\a  yytable_ specifies something else to do.
+    /// Zero means the default is an error.
+    static const unsigned char yydefact_[];
+
+    static const signed char yypgoto_[];
+    static const signed char yydefgoto_[];
+
+    /// What to do in a state.
+    /// \a yytable_[yypact_[s]]: what to do in state \a s.
+    /// - if positive, shift that token.
+    /// - if negative, reduce the rule which number is the opposite.
+    /// - if zero, do what YYDEFACT says.
+    static const unsigned char yytable_[];
+    static const signed char yytable_ninf_;
+
+    static const signed char yycheck_[];
+
+    /// For a state, its accessing symbol.
+    static const unsigned char yystos_[];
+
+    /// For a rule, its LHS.
+    static const unsigned char yyr1_[];
+    /// For a rule, its RHS length.
+    static const unsigned char yyr2_[]; 
+
+    /// Convert the symbol name \a n to a form suitable for a diagnostic.
+    static std::string yytnamerr_ (const char *n);
+
+
+    /// For a symbol, its name in clear.
+    static const char* const yytname_[];
+#if YYDEBUG
+    /// A type to store symbol numbers and -1.
+    typedef signed char rhs_number_type;
+    /// A `-1'-separated list of the rules' RHS.
+    static const rhs_number_type yyrhs_[];
+    /// For each rule, the index of the first RHS symbol in \a yyrhs_.
+    static const unsigned char yyprhs_[];
+    /// For each rule, its source line number.
+    static const unsigned short int yyrline_[];
+    /// For each scanner token number, its symbol number.
+    static const unsigned short int yytoken_number_[];
+    /// Report on the debug stream that the rule \a r is going to be reduced.
+    virtual void yy_reduce_print_ (int r);
+    /// Print the state stack on the debug stream.
+    virtual void yystack_print_ ();
+
+    /* Debugging.  */
+    int yydebug_;
+    std::ostream* yycdebug_;
+#endif
+
+    /// Convert a scanner token number \a t to a symbol number.
+    token_number_type yytranslate_ (int t);
+
+    /// \brief Reclaim the memory associated to a symbol.
+    /// \param yymsg        Why this token is reclaimed.
+    ///                     If null, do not display the symbol, just free it.
+    /// \param yytype       The symbol type.
+    /// \param yyvaluep     Its semantic value.
+    /// \param yylocationp  Its location.
+    inline void yydestruct_ (const char* yymsg,
+			     int yytype,
+			     semantic_type* yyvaluep,
+			     location_type* yylocationp);
+
+    /// Pop \a n symbols the three stacks.
+    inline void yypop_ (unsigned int n = 1);
+
+    /* Constants.  */
+    static const int yyeof_;
+    /* LAST_ -- Last index in TABLE_.  */
+    static const int yylast_;
+    static const int yynnts_;
+    static const int yyempty_;
+    static const int yyfinal_;
+    static const int yyterror_;
+    static const int yyerrcode_;
+    static const int yyntokens_;
+    static const unsigned int yyuser_token_number_max_;
+    static const token_number_type yyundef_token_;
+
+    /* User arguments.  */
+    calcxx_driver& driver;
+  };
+
+} // yy
+/* Line 33 of lalr1.cc  */
+#line 280 "../../../../examples/calc++/calc++-parser.hh"
+
+
+
+#endif /* !YY_YY_EXAMPLES_CALC_CALC_PARSER_HH_INCLUDED  */
diff --git a/examples/calc++/calc++-parser.stamp b/examples/calc++/calc++-parser.stamp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/examples/calc++/calc++-parser.stamp
diff --git a/examples/calc++/calc++-parser.yy b/examples/calc++/calc++-parser.yy
new file mode 100644
index 0000000..19132f5
--- /dev/null
+++ b/examples/calc++/calc++-parser.yy
@@ -0,0 +1,75 @@
+#line 10196 "../../doc/bison.texi"
+%skeleton "lalr1.cc" /* -*- C++ -*- */
+%require "2.6.90.8-d4fe"
+%defines
+%define parser_class_name "calcxx_parser"
+#line 10214 "../../doc/bison.texi"
+%code requires {
+# include <string>
+class calcxx_driver;
+}
+#line 10227 "../../doc/bison.texi"
+// The parsing context.
+%parse-param { calcxx_driver& driver }
+%lex-param   { calcxx_driver& driver }
+#line 10240 "../../doc/bison.texi"
+%locations
+%initial-action
+{
+  // Initialize the initial location.
+  @$.begin.filename = @$.end.filename = &driver.file;
+};
+#line 10255 "../../doc/bison.texi"
+%debug
+%error-verbose
+#line 10265 "../../doc/bison.texi"
+// Symbols.
+%union
+{
+  int          ival;
+  std::string *sval;
+};
+#line 10280 "../../doc/bison.texi"
+%code {
+# include "calc++-driver.hh"
+}
+#line 10295 "../../doc/bison.texi"
+%token        END      0 "end of file"
+%token        ASSIGN     ":="
+%token <sval> IDENTIFIER "identifier"
+%token <ival> NUMBER     "number"
+%type  <ival> exp
+#line 10309 "../../doc/bison.texi"
+%printer    { yyoutput << *$$; } "identifier"
+%destructor { delete $$; } "identifier"
+
+%printer    { yyoutput << $$; } <ival>
+#line 10320 "../../doc/bison.texi"
+%%
+%start unit;
+unit: assignments exp  { driver.result = $2; };
+
+assignments:
+  /* Nothing.  */        {}
+| assignments assignment {};
+
+assignment:
+     "identifier" ":=" exp
+       { driver.variables[*$1] = $3; delete $1; };
+
+%left '+' '-';
+%left '*' '/';
+exp: exp '+' exp   { $$ = $1 + $3; }
+   | exp '-' exp   { $$ = $1 - $3; }
+   | exp '*' exp   { $$ = $1 * $3; }
+   | exp '/' exp   { $$ = $1 / $3; }
+   | "identifier"  { $$ = driver.variables[*$1]; delete $1; }
+   | "number"      { $$ = $1; };
+%%
+#line 10349 "../../doc/bison.texi"
+void
+yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l,
+                          const std::string& m)
+{
+  driver.error (l, m);
+}
diff --git a/examples/calc++/calc++-scanner.cc b/examples/calc++/calc++-scanner.cc
new file mode 100644
index 0000000..c9d9349
--- /dev/null
+++ b/examples/calc++/calc++-scanner.cc
@@ -0,0 +1,2086 @@
+
+#line 3 "calc++-scanner.cc"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+/* %not-for-header */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+
+/* %endif */
+/* %endif */
+/* %ok-for-header */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* %if-c++-only */
+/* %endif */
+
+/* %if-c-only */
+    
+/* %endif */
+
+/* %if-c-only */
+
+/* %endif */
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+/* %if-c-only */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+/* %endif */
+
+/* %if-tables-serialization */
+/* %endif */
+/* end standard C headers. */
+
+/* %if-c-or-c++ */
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* %not-for-header */
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+/* %ok-for-header */
+
+/* %if-reentrant */
+/* %endif */
+
+/* %if-not-reentrant */
+
+/* %endif */
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+/* %if-not-reentrant */
+extern yy_size_t yyleng;
+/* %endif */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+extern FILE *yyin, *yyout;
+/* %endif */
+/* %endif */
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+/* %if-c-only */
+	FILE *yy_input_file;
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	yy_size_t yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+/* %if-not-reentrant */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+/* %endif */
+/* %ok-for-header */
+
+/* %endif */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* %if-c-only Standard (non-C++) definition */
+
+/* %if-not-reentrant */
+/* %not-for-header */
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+/* %ok-for-header */
+
+/* %endif */
+
+void yyrestart (FILE *input_file  );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
+void yy_delete_buffer (YY_BUFFER_STATE b  );
+void yy_flush_buffer (YY_BUFFER_STATE b  );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+
+/* %endif */
+
+void *yyalloc (yy_size_t  );
+void *yyrealloc (void *,yy_size_t  );
+void yyfree (void *  );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        yyensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        yyensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
+/* Begin user sect3 */
+
+#define yywrap() 1
+#define YY_SKIP_YYWRAP
+
+#define FLEX_DEBUG
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+/* %if-c-only Standard (non-C++) definition */
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* %endif */
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
+	yyleng = (size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
+	(yy_c_buf_p) = yy_cp;
+
+/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
+#define YY_NUM_RULES 8
+#define YY_END_OF_BUFFER 9
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[17] =
+    {   0,
+        0,    0,    9,    7,    1,    2,    3,    5,    7,    6,
+        1,    2,    5,    4,    6,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    4,    4,    1,    4,    1,    4,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    6,    1,    1,
+        7,    1,    1,    1,    8,    8,    8,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+        1,    1,    1,    1,    9,    1,    8,    8,    8,    8,
+
+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[10] =
+    {   0,
+        1,    1,    1,    1,    2,    1,    1,    2,    2
+    } ;
+
+static yyconst flex_int16_t yy_base[18] =
+    {   0,
+        0,    0,   18,   19,   15,   13,   19,   10,    7,    0,
+       11,    9,    6,   19,    0,   19,    8
+    } ;
+
+static yyconst flex_int16_t yy_def[18] =
+    {   0,
+       16,    1,   16,   16,   16,   16,   16,   16,   16,   17,
+       16,   16,   16,   16,   17,    0,   16
+    } ;
+
+static yyconst flex_int16_t yy_nxt[29] =
+    {   0,
+        4,    5,    6,    7,    8,    9,    4,   10,    4,   15,
+       13,   12,   11,   14,   13,   12,   11,   16,    3,   16,
+       16,   16,   16,   16,   16,   16,   16,   16
+    } ;
+
+static yyconst flex_int16_t yy_chk[29] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,   17,
+       13,   12,   11,    9,    8,    6,    5,    3,   16,   16,
+       16,   16,   16,   16,   16,   16,   16,   16
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 1;
+
+static yyconst flex_int16_t yy_rule_linenum[8] =
+    {   0,
+       37,   38,   44,   46,   49,   60,   66
+    } ;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "calc++-scanner.ll"
+#line 2 "calc++-scanner.ll"
+# include <cstdlib>
+# include <cerrno>
+# include <climits>
+# include <string>
+# include "calc++-driver.hh"
+# include "calc++-parser.hh"
+
+/* Work around an incompatibility in flex (at least versions
+   2.5.31 through 2.5.33): it generates code that does
+   not conform to C89.  See Debian bug 333231
+   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
+# undef yywrap
+# define yywrap() 1
+
+/* By default yylex returns int, we use token_type.
+   Unfortunately yyterminate by default returns 0, which is
+   not of token_type.  */
+#define yyterminate() return token::END
+#line 30 "calc++-scanner.ll"
+# define YY_USER_ACTION  yylloc->columns (yyleng);
+#line 569 "calc++-scanner.cc"
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+/* %if-c-only */
+#include <unistd.h>
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+/* %if-c-only Reentrant structure and macros (non-C++). */
+/* %if-reentrant */
+/* %if-c-only */
+
+static int yy_init_globals (void );
+
+/* %endif */
+/* %if-reentrant */
+/* %endif */
+/* %endif End reentrant structures and macros. */
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *yyget_in (void );
+
+void yyset_in  (FILE * in_str  );
+
+FILE *yyget_out (void );
+
+void yyset_out  (FILE * out_str  );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number  );
+
+/* %if-bison-bridge */
+/* %endif */
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+/* %ok-for-header */
+
+/* %endif */
+#endif
+
+/* %if-c-only */
+
+/* %endif */
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* %if-c-only Standard (non-C++) definition */
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(yyin); \
+			} \
+		}\
+\
+/* %if-c++-only C++ definition \ */\
+/* %endif */
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+/* %if-c-only */
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+/* %if-tables-serialization structures and prototypes */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* %tables-yydmap generated elements */
+/* %endif */
+/* end tables serialization structures and prototypes */
+
+/* %ok-for-header */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+/* %if-c-only Standard (non-C++) definition */
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+/* %% [6.0] YY_RULE_SETUP definition goes here */
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/* %not-for-header */
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    
+/* %% [7.0] user's declarations go here */
+#line 33 "calc++-scanner.ll"
+
+
+  yylloc->step ();
+
+#line 814 "calc++-scanner.cc"
+
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! yyin )
+/* %if-c-only */
+			yyin = stdin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+		if ( ! yyout )
+/* %if-c-only */
+			yyout = stdout;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			yyensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				yy_create_buffer(yyin,YY_BUF_SIZE );
+		}
+
+		yy_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+/* %% [8.0] yymore()-related code goes here */
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of yytext. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+/* %% [9.0] code to set up and find next match goes here */
+		yy_current_state = (yy_start);
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				(yy_last_accepting_state) = yy_current_state;
+				(yy_last_accepting_cpos) = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 17 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_current_state != 16 );
+		yy_cp = (yy_last_accepting_cpos);
+		yy_current_state = (yy_last_accepting_state);
+
+yy_find_action:
+/* %% [10.0] code to find the action number goes here */
+		yy_act = yy_accept[yy_current_state];
+
+		YY_DO_BEFORE_ACTION;
+
+/* %% [11.0] code for yylineno update goes here */
+
+do_action:	/* This label is used only to access EOF actions. */
+
+/* %% [12.0] debug code goes here */
+		if ( yy_flex_debug )
+			{
+			if ( yy_act == 0 )
+				fprintf( stderr, "--scanner backing up\n" );
+			else if ( yy_act < 8 )
+				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
+				         (long)yy_rule_linenum[yy_act], yytext );
+			else if ( yy_act == 8 )
+				fprintf( stderr, "--accepting default rule (\"%s\")\n",
+				         yytext );
+			else if ( yy_act == 9 )
+				fprintf( stderr, "--(end of buffer or a NUL)\n" );
+			else
+				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
+			}
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+/* %% [13.0] actions go here */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = (yy_hold_char);
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 37 "calc++-scanner.ll"
+yylloc->step ();
+	YY_BREAK
+case 2:
+/* rule 2 can match eol */
+YY_RULE_SETUP
+#line 38 "calc++-scanner.ll"
+yylloc->lines (yyleng); yylloc->step ();
+	YY_BREAK
+
+  typedef yy::calcxx_parser::token token;
+
+/* Convert ints to the actual type of tokens.  */
+case 3:
+YY_RULE_SETUP
+#line 44 "calc++-scanner.ll"
+return yy::calcxx_parser::token_type (yytext[0]);
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 46 "calc++-scanner.ll"
+return token::ASSIGN;
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 49 "calc++-scanner.ll"
+{
+           errno = 0;
+           long n = strtol (yytext, NULL, 10);
+           if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
+             driver.error (*yylloc, "integer is out of range");
+           yylval->ival = n;
+           return token::NUMBER;
+         }
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 60 "calc++-scanner.ll"
+{
+           yylval->sval = new std::string (yytext);
+           return token::IDENTIFIER;
+         }
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 66 "calc++-scanner.ll"
+driver.error (*yylloc, "invalid character");
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 67 "calc++-scanner.ll"
+ECHO;
+	YY_BREAK
+#line 979 "calc++-scanner.cc"
+case YY_STATE_EOF(INITIAL):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
+				yy_cp = (yy_last_accepting_cpos);
+				yy_current_state = (yy_last_accepting_state);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( yywrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of yylex */
+/* %ok-for-header */
+
+/* %if-c++-only */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+/* %if-c-only */
+static int yy_get_next_buffer (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			yy_size_t num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				yy_size_t new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yyrestart(yyin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+/* %if-c-only */
+/* %not-for-header */
+
+    static yy_state_type yy_get_previous_state (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    
+/* %% [15.0] code to get the start state into yy_current_state goes here */
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+/* %% [16.0] code to find the next state goes here */
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			(yy_last_accepting_state) = yy_current_state;
+			(yy_last_accepting_cpos) = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 17 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+/* %if-c-only */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register int yy_is_jam;
+    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
+	register char *yy_cp = (yy_c_buf_p);
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		(yy_last_accepting_state) = yy_current_state;
+		(yy_last_accepting_cpos) = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 17 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 16);
+
+		return yy_is_jam ? 0 : yy_current_state;
+}
+
+/* %if-c-only */
+
+/* %endif */
+
+/* %if-c-only */
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	int c;
+    
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart(yyin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yywrap( ) )
+						return EOF;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve yytext */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+/* %% [19.0] update BOL and yylineno */
+
+	return c;
+}
+/* %if-c-only */
+#endif	/* ifndef YY_NO_INPUT */
+/* %endif */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+/* %if-c-only */
+    void yyrestart  (FILE * input_file )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        yyensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            yy_create_buffer(yyin,YY_BUF_SIZE );
+	}
+
+	yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+	yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+/* %if-c-only */
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		yypop_buffer_state();
+	 *		yypush_buffer_state(new_buffer);
+     */
+	yyensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	yy_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/* %if-c-only */
+static void yy_load_buffer_state  (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+/* %if-c-only */
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	yy_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * 
+ */
+/* %if-c-only */
+    void yy_delete_buffer (YY_BUFFER_STATE  b )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		yyfree((void *) b->yy_ch_buf  );
+
+	yyfree((void *) b  );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+/* %if-c-only */
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+{
+	int oerrno = errno;
+    
+	yy_flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then yy_init_buffer was _probably_
+     * called from yyrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+/* %if-c-only */
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+/* %if-c-only */
+    void yy_flush_buffer (YY_BUFFER_STATE  b )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		yy_load_buffer_state( );
+}
+
+/* %if-c-or-c++ */
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+/* %if-c-only */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	if (new_buffer == NULL)
+		return;
+
+	yyensure_buffer_stack();
+
+	/* This block is copied from yy_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from yy_switch_to_buffer. */
+	yy_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+/* %if-c-only */
+void yypop_buffer_state (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	yy_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		yy_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+/* %if-c-only */
+static void yyensure_buffer_stack (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	yy_size_t num_to_alloc;
+    
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+								  
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	yy_switch_to_buffer(b  );
+
+	return b;
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+    
+	return yy_scan_bytes(yystr,strlen(yystr) );
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) yyalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+/* %endif */
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+/* %if-c-only */
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		yytext[yyleng] = (yy_hold_char); \
+		(yy_c_buf_p) = yytext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		yyleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/* %if-c-only */
+/* %if-reentrant */
+/* %endif */
+
+/** Get the current line number.
+ * 
+ */
+int yyget_lineno  (void)
+{
+        
+    return yylineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *yyget_in  (void)
+{
+        return yyin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *yyget_out  (void)
+{
+        return yyout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+yy_size_t yyget_leng  (void)
+{
+        return yyleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *yyget_text  (void)
+{
+        return yytext;
+}
+
+/* %if-reentrant */
+/* %endif */
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void yyset_lineno (int  line_number )
+{
+    
+    yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE *  in_str )
+{
+        yyin = in_str ;
+}
+
+void yyset_out (FILE *  out_str )
+{
+        yyout = out_str ;
+}
+
+int yyget_debug  (void)
+{
+        return yy_flex_debug;
+}
+
+void yyset_debug (int  bdebug )
+{
+        yy_flex_debug = bdebug ;
+}
+
+/* %endif */
+
+/* %if-reentrant */
+/* %if-bison-bridge */
+/* %endif */
+/* %endif if-c-only */
+
+/* %if-c-only */
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from yylex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * yylex_init()
+     */
+    return 0;
+}
+/* %endif */
+
+/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		yy_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		yypop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	yyfree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * yylex() is called, initialization will occur. */
+    yy_init_globals( );
+
+/* %if-reentrant */
+/* %endif */
+    return 0;
+}
+/* %endif */
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *yyalloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *yyrealloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
+}
+
+/* %if-tables-serialization definitions */
+/* %define-yytables   The name for this specific scanner's tables. */
+#define YYTABLES_NAME "yytables"
+/* %endif */
+
+/* %ok-for-header */
+
+#line 67 "calc++-scanner.ll"
+
+
+
+
+void
+calcxx_driver::scan_begin ()
+{
+  yy_flex_debug = trace_scanning;
+  if (file.empty () || file == "-")
+    yyin = stdin;
+  else if (!(yyin = fopen (file.c_str (), "r")))
+    {
+      error ("cannot open " + file + ": " + strerror(errno));
+      exit (EXIT_FAILURE);
+    }
+}
+
+
+
+void
+calcxx_driver::scan_end ()
+{
+  fclose (yyin);
+}
+
+
diff --git a/examples/calc++/calc++-scanner.ll b/examples/calc++/calc++-scanner.ll
new file mode 100644
index 0000000..05e7fea
--- /dev/null
+++ b/examples/calc++/calc++-scanner.ll
@@ -0,0 +1,90 @@
+%{ /* -*- C++ -*- */
+# include <cstdlib>
+# include <cerrno>
+# include <climits>
+# include <string>
+# include "calc++-driver.hh"
+# include "calc++-parser.hh"
+
+/* Work around an incompatibility in flex (at least versions
+   2.5.31 through 2.5.33): it generates code that does
+   not conform to C89.  See Debian bug 333231
+   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
+# undef yywrap
+# define yywrap() 1
+
+/* By default yylex returns int, we use token_type.
+   Unfortunately yyterminate by default returns 0, which is
+   not of token_type.  */
+#define yyterminate() return token::END
+%}
+
+%option noyywrap nounput batch debug
+
+id    [a-zA-Z][a-zA-Z_0-9]*
+int   [0-9]+
+blank [ \t]
+
+
+%{
+# define YY_USER_ACTION  yylloc->columns (yyleng);
+%}
+
+%%
+%{
+  yylloc->step ();
+%}
+{blank}+   yylloc->step ();
+[\n]+      yylloc->lines (yyleng); yylloc->step ();
+
+%{
+  typedef yy::calcxx_parser::token token;
+%}
+         /* Convert ints to the actual type of tokens.  */
+[-+*/]   return yy::calcxx_parser::token_type (yytext[0]);
+
+":="     return token::ASSIGN;
+
+
+{int}    {
+           errno = 0;
+           long n = strtol (yytext, NULL, 10);
+           if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
+             driver.error (*yylloc, "integer is out of range");
+           yylval->ival = n;
+           return token::NUMBER;
+         }
+
+
+
+{id}     {
+           yylval->sval = new std::string (yytext);
+           return token::IDENTIFIER;
+         }
+
+
+.        driver.error (*yylloc, "invalid character");
+%%
+
+
+void
+calcxx_driver::scan_begin ()
+{
+  yy_flex_debug = trace_scanning;
+  if (file.empty () || file == "-")
+    yyin = stdin;
+  else if (!(yyin = fopen (file.c_str (), "r")))
+    {
+      error ("cannot open " + file + ": " + strerror(errno));
+      exit (EXIT_FAILURE);
+    }
+}
+
+
+
+void
+calcxx_driver::scan_end ()
+{
+  fclose (yyin);
+}
+
diff --git a/examples/calc++/calc++.cc b/examples/calc++/calc++.cc
new file mode 100644
index 0000000..7b0f8fc
--- /dev/null
+++ b/examples/calc++/calc++.cc
@@ -0,0 +1,18 @@
+#line 10507 "../../doc/bison.texi"
+#include <iostream>
+#include "calc++-driver.hh"
+
+
+int
+main (int argc, char *argv[])
+{
+  calcxx_driver driver;
+  for (int i = 1; i < argc; ++i)
+    if (argv[i] == std::string ("-p"))
+      driver.trace_parsing = true;
+    else if (argv[i] == std::string ("-s"))
+      driver.trace_scanning = true;
+    else if (!driver.parse (argv[i]))
+      std::cout << driver.result << std::endl;
+}
+
diff --git a/examples/calc++/calc.stamp b/examples/calc++/calc.stamp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/examples/calc++/calc.stamp
diff --git a/examples/calc++/location.hh b/examples/calc++/location.hh
new file mode 100644
index 0000000..6dd5bc6
--- /dev/null
+++ b/examples/calc++/location.hh
@@ -0,0 +1,181 @@
+/* A Bison parser, made by GNU Bison 2.6.90.8-d4fe.  */
+
+/* Locations for Bison parsers in C++
+   
+      Copyright (C) 2002-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/**
+ ** \file ../../../../examples/calc++/location.hh
+ ** Define the yy::location class.
+ */
+
+#ifndef YY_YY_EXAMPLES_CALC_LOCATION_HH_INCLUDED
+# define YY_YY_EXAMPLES_CALC_LOCATION_HH_INCLUDED
+
+# include "position.hh"
+
+
+namespace yy {
+/* Line 166 of location.cc  */
+#line 47 "../../../../examples/calc++/location.hh"
+
+  /// Abstract a location.
+  class location
+  {
+  public:
+
+    /// Construct a location from \a b to \a e.
+    location (const position& b, const position& e)
+      : begin (b)
+      , end (e)
+    {
+    }
+
+    /// Construct a 0-width location in \a p.
+    explicit location (const position& p = position ())
+      : begin (p)
+      , end (p)
+    {
+    }
+
+    /// Construct a 0-width location in \a f, \a l, \a c.
+    explicit location (std::string* f,
+                       unsigned int l = 1u,
+                       unsigned int c = 1u)
+      : begin (f, l, c)
+      , end (f, l, c)
+    {
+    }
+
+
+    /// Initialization.
+    void initialize (std::string* f = YY_NULL,
+                     unsigned int l = 1u,
+                     unsigned int c = 1u)
+    {
+      begin.initialize (f, l, c);
+      end = begin;
+    }
+
+    /** \name Line and Column related manipulators
+     ** \{ */
+  public:
+    /// Reset initial location to final location.
+    void step ()
+    {
+      begin = end;
+    }
+
+    /// Extend the current location to the COUNT next columns.
+    void columns (unsigned int count = 1)
+    {
+      end += count;
+    }
+
+    /// Extend the current location to the COUNT next lines.
+    void lines (unsigned int count = 1)
+    {
+      end.lines (count);
+    }
+    /** \} */
+
+
+  public:
+    /// Beginning of the located region.
+    position begin;
+    /// End of the located region.
+    position end;
+  };
+
+  /// Join two location objects to create a location.
+  inline const location operator+ (const location& begin, const location& end)
+  {
+    location res = begin;
+    res.end = end.end;
+    return res;
+  }
+
+  /// Add two location objects.
+  inline const location operator+ (const location& begin, unsigned int width)
+  {
+    location res = begin;
+    res.columns (width);
+    return res;
+  }
+
+  /// Add and assign a location.
+  inline location& operator+= (location& res, unsigned int width)
+  {
+    res.columns (width);
+    return res;
+  }
+
+  /// Compare two location objects.
+  inline bool
+  operator== (const location& loc1, const location& loc2)
+  {
+    return loc1.begin == loc2.begin && loc1.end == loc2.end;
+  }
+
+  /// Compare two location objects.
+  inline bool
+  operator!= (const location& loc1, const location& loc2)
+  {
+    return !(loc1 == loc2);
+  }
+
+  /** \brief Intercept output stream redirection.
+   ** \param ostr the destination output stream
+   ** \param loc a reference to the location to redirect
+   **
+   ** Avoid duplicate information.
+   */
+  template <typename YYChar>
+  inline std::basic_ostream<YYChar>&
+  operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
+  {
+    position last = loc.end - 1;
+    ostr << loc.begin;
+    if (last.filename
+	&& (!loc.begin.filename
+	    || *loc.begin.filename != *last.filename))
+      ostr << '-' << last;
+    else if (loc.begin.line != last.line)
+      ostr << '-' << last.line  << '.' << last.column;
+    else if (loc.begin.column != last.column)
+      ostr << '-' << last.column;
+    return ostr;
+  }
+
+
+} // yy
+/* Line 296 of location.cc  */
+#line 180 "../../../../examples/calc++/location.hh"
+
+#endif /* !YY_YY_EXAMPLES_CALC_LOCATION_HH_INCLUDED  */
diff --git a/examples/calc++/position.hh b/examples/calc++/position.hh
new file mode 100644
index 0000000..68ed4cf
--- /dev/null
+++ b/examples/calc++/position.hh
@@ -0,0 +1,172 @@
+/* A Bison parser, made by GNU Bison 2.6.90.8-d4fe.  */
+
+/* Positions for Bison parsers in C++
+   
+      Copyright (C) 2002-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/**
+ ** \file ../../../../examples/calc++/position.hh
+ ** Define the yy::position class.
+ */
+
+#ifndef YY_YY_EXAMPLES_CALC_POSITION_HH_INCLUDED
+# define YY_YY_EXAMPLES_CALC_POSITION_HH_INCLUDED
+
+# include <algorithm> // std::max
+# include <iostream>
+# include <string>
+
+# ifndef YY_NULL
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULL nullptr
+#  else
+#   define YY_NULL 0
+#  endif
+# endif
+
+
+namespace yy {
+/* Line 36 of location.cc  */
+#line 57 "../../../../examples/calc++/position.hh"
+  /// Abstract a position.
+  class position
+  {
+  public:
+
+    /// Construct a position.
+    explicit position (std::string* f = YY_NULL,
+                       unsigned int l = 1u,
+                       unsigned int c = 1u)
+      : filename (f)
+      , line (l)
+      , column (c)
+    {
+    }
+
+
+    /// Initialization.
+    void initialize (std::string* fn = YY_NULL,
+                     unsigned int l = 1u,
+                     unsigned int c = 1u)
+    {
+      filename = fn;
+      line = l;
+      column = c;
+    }
+
+    /** \name Line and Column related manipulators
+     ** \{ */
+    /// (line related) Advance to the COUNT next lines.
+    void lines (int count = 1)
+    {
+      column = 1u;
+      line += count;
+    }
+
+    /// (column related) Advance to the COUNT next columns.
+    void columns (int count = 1)
+    {
+      column = std::max (1u, column + count);
+    }
+    /** \} */
+
+    /// File name to which this position refers.
+    std::string* filename;
+    /// Current line number.
+    unsigned int line;
+    /// Current column number.
+    unsigned int column;
+  };
+
+  /// Add and assign a position.
+  inline position&
+  operator+= (position& res, const int width)
+  {
+    res.columns (width);
+    return res;
+  }
+
+  /// Add two position objects.
+  inline const position
+  operator+ (const position& begin, const int width)
+  {
+    position res = begin;
+    return res += width;
+  }
+
+  /// Add and assign a position.
+  inline position&
+  operator-= (position& res, const int width)
+  {
+    return res += -width;
+  }
+
+  /// Add two position objects.
+  inline const position
+  operator- (const position& begin, const int width)
+  {
+    return begin + -width;
+  }
+
+  /// Compare two position objects.
+  inline bool
+  operator== (const position& pos1, const position& pos2)
+  {
+    return (pos1.line == pos2.line
+            && pos1.column == pos2.column
+            && (pos1.filename == pos2.filename
+                || (pos1.filename && pos2.filename
+                    && *pos1.filename == *pos2.filename)));
+  }
+
+  /// Compare two position objects.
+  inline bool
+  operator!= (const position& pos1, const position& pos2)
+  {
+    return !(pos1 == pos2);
+  }
+
+  /** \brief Intercept output stream redirection.
+   ** \param ostr the destination output stream
+   ** \param pos a reference to the position to redirect
+   */
+  template <typename YYChar>
+  inline std::basic_ostream<YYChar>&
+  operator<< (std::basic_ostream<YYChar>& ostr, const position& pos)
+  {
+    if (pos.filename)
+      ostr << *pos.filename << ':';
+    return ostr << pos.line << '.' << pos.column;
+  }
+
+
+} // yy
+/* Line 148 of location.cc  */
+#line 172 "../../../../examples/calc++/position.hh"
+#endif /* !YY_YY_EXAMPLES_CALC_POSITION_HH_INCLUDED  */
diff --git a/examples/calc++/stack.hh b/examples/calc++/stack.hh
new file mode 100644
index 0000000..e9d51c5
--- /dev/null
+++ b/examples/calc++/stack.hh
@@ -0,0 +1,133 @@
+/* A Bison parser, made by GNU Bison 2.6.90.8-d4fe.  */
+
+/* Stack handling for Bison parsers in C++
+   
+      Copyright (C) 2002-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/**
+ ** \file ../../../../examples/calc++/stack.hh
+ ** Define the yy::stack class.
+ */
+
+#ifndef YY_YY_EXAMPLES_CALC_STACK_HH_INCLUDED
+# define YY_YY_EXAMPLES_CALC_STACK_HH_INCLUDED
+
+# include <deque>
+
+
+namespace yy {
+/* Line 34 of stack.hh  */
+#line 47 "../../../../examples/calc++/stack.hh"
+  template <class T, class S = std::deque<T> >
+  class stack
+  {
+  public:
+    // Hide our reversed order.
+    typedef typename S::reverse_iterator iterator;
+    typedef typename S::const_reverse_iterator const_iterator;
+
+    stack () : seq_ ()
+    {
+    }
+
+    stack (unsigned int n) : seq_ (n)
+    {
+    }
+
+    inline
+    T&
+    operator [] (unsigned int i)
+    {
+      return seq_[i];
+    }
+
+    inline
+    const T&
+    operator [] (unsigned int i) const
+    {
+      return seq_[i];
+    }
+
+    inline
+    void
+    push (const T& t)
+    {
+      seq_.push_front (t);
+    }
+
+    inline
+    void
+    pop (unsigned int n = 1)
+    {
+      for (; n; --n)
+        seq_.pop_front ();
+    }
+
+    inline
+    unsigned int
+    height () const
+    {
+      return seq_.size ();
+    }
+
+    inline const_iterator begin () const { return seq_.rbegin (); }
+    inline const_iterator end () const { return seq_.rend (); }
+
+  private:
+    S seq_;
+  };
+
+  /// Present a slice of the top of a stack.
+  template <class T, class S = stack<T> >
+  class slice
+  {
+  public:
+    slice (const S& stack, unsigned int range)
+      : stack_ (stack)
+      , range_ (range)
+    {
+    }
+
+    inline
+    const T&
+    operator [] (unsigned int i) const
+    {
+      return stack_[range_ - i];
+    }
+
+  private:
+    const S& stack_;
+    unsigned int range_;
+  };
+
+} // yy
+/* Line 116 of stack.hh  */
+#line 132 "../../../../examples/calc++/stack.hh"
+
+#endif /* !YY_YY_EXAMPLES_CALC_STACK_HH_INCLUDED  */
diff --git a/examples/calc++/test b/examples/calc++/test
new file mode 100755
index 0000000..8f4d419
--- /dev/null
+++ b/examples/calc++/test
@@ -0,0 +1,46 @@
+#! /bin/sh
+
+# Copyright (C) 2005-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+test -z "$VERBOSE" && {
+   exec > /dev/null 2>&1
+   set -x
+}
+
+cat >input <<EOF
+a := 1
+b := 2
+c := 3
+d := a + b * c
+d
+EOF
+
+./calc++ input
+./calc++ -p input
+
+cat >input <<EOF
+a := 1
+d := a + b * c
+EOF
+./calc++ input
+
+cat >input <<EOF
+toto := 1
+toto
+EOF
+./calc++ -s input
+
+rm input
diff --git a/examples/extexi b/examples/extexi
index 56a50c8..01f6cf2 100644
--- a/examples/extexi
+++ b/examples/extexi
@@ -1,11 +1,13 @@
 # Extract all examples from the manual source.            -*- AWK -*-
 
 # This file is part of GNU Bison
-# Copyright 1992, 2000, 2001, 2005, 2006 Free Software Foundation, Inc.
+
+# Copyright (C) 1992, 2000-2001, 2005-2006, 2009-2012 Free Software
+# Foundation, Inc.
 #
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -14,9 +16,7 @@
 # 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-1307  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # This script is for use with any Awk that conforms to POSIX.
 # It was derived from a similar script tests/generate.awk in GNU m4.
@@ -111,6 +111,7 @@
 	else
 	  line = "";
 
+      gsub (/"@value\{VERSION\}"/, "\"" VERSION "\"", line)
       gsub (/^@result\{\}/, "", line);
       gsub (/^@error\{\}/,  "", line);
       gsub ("@[{]", "{", line);
diff --git a/lib/Makefile b/lib/Makefile
deleted file mode 100644
index 25490d3..0000000
--- a/lib/Makefile
+++ /dev/null
@@ -1,623 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# lib/Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-
-srcdir = .
-top_srcdir = ..
-
-pkgdatadir = $(datadir)/bison
-pkglibdir = $(libdir)/bison
-pkgincludedir = $(includedir)/bison
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /usr/bin/install -c
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/gnulib.mk dirname.c dirname.h dup-safer.c error.c \
-	error.h exitfail.c exitfail.h fd-safer.c fopen-safer.c \
-	getopt.c getopt1.c hard-locale.c hard-locale.h hash.c hash.h \
-	malloc.c obstack.c obstack.h pipe-safer.c quote.c quote.h \
-	quotearg.c quotearg.h stdio--.h stdio-safer.h stpcpy.c \
-	strdup.c strdup.h strerror.c strndup.c strndup.h strnlen.c \
-	strnlen.h strtol.c strtoul.c strverscmp.c strverscmp.h \
-	unistd--.h unistd-safer.h unlocked-io.h xalloc.h xmalloc.c
-subdir = lib
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
-	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
-	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
-	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)"
-libLIBRARIES_INSTALL = $(INSTALL_DATA)
-LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
-libbison_a_AR = $(AR) $(ARFLAGS)
-am__DEPENDENCIES_1 =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-am__objects_1 = abitset.$(OBJEXT) bitset.$(OBJEXT) \
-	bitset_stats.$(OBJEXT) bitsetv.$(OBJEXT) ebitset.$(OBJEXT) \
-	lbitset.$(OBJEXT) vbitset.$(OBJEXT)
-am__objects_2 = bitsetv-print.$(OBJEXT)
-am__objects_3 = timevar.$(OBJEXT)
-am__objects_4 = get-errno.$(OBJEXT) subpipe.$(OBJEXT) $(am__objects_1) \
-	$(am__objects_2) $(am__objects_3) argmatch.$(OBJEXT) \
-	basename.$(OBJEXT) stripslash.$(OBJEXT) mbswidth.$(OBJEXT) \
-	xalloc-die.$(OBJEXT) xstrndup.$(OBJEXT)
-am_libbison_a_OBJECTS = $(am__objects_4)
-libbison_a_OBJECTS = $(am_libbison_a_OBJECTS)
-liby_a_AR = $(AR) $(ARFLAGS)
-liby_a_LIBADD =
-am_liby_a_OBJECTS = main.$(OBJEXT) yyerror.$(OBJEXT)
-liby_a_OBJECTS = $(am_liby_a_OBJECTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libbison_a_SOURCES) $(liby_a_SOURCES)
-DIST_SOURCES = $(libbison_a_SOURCES) $(liby_a_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9
-AMDEP_FALSE = #
-AMDEP_TRUE = 
-AMTAR = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar
-AUTOCONF = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader
-AUTOM4TE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te
-AUTOMAKE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9
-AWK = gawk
-BISON_CXX_WORKS = :
-BISON_CXX_WORKS_FALSE = #
-BISON_CXX_WORKS_TRUE = 
-BISON_LOCALEDIR = /usr/share/locale
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
-CPP = gcc -E
-CPPFLAGS = 
-CXX = g++
-CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = grep -E
-EXEEXT = 
-GCC = yes
-GETOPT_H = 
-GMSGFMT = /usr/bin/msgfmt
-HAVE__BOOL = 1
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
-INTLLIBS = 
-INTL_MACOSX_LIBS = 
-LDFLAGS = 
-LEX = flex
-LEXLIB = -lfl
-LEX_OUTPUT_ROOT = lex.yy
-LIBICONV = -liconv
-LIBINTL = 
-LIBOBJS =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-LIBS = 
-LTLIBICONV = -liconv
-LTLIBINTL = 
-LTLIBOBJS =  dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo
-M4 = /usr/bin/m4
-MAKEINFO = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo
-MKINSTALLDIRS = $(top_builddir)/build-aux/mkinstalldirs
-MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge
-O0CFLAGS = -g 
-O0CXXFLAGS = -g 
-OBJEXT = o
-PACKAGE = bison
-PACKAGE_BUGREPORT = bug-bison@gnu.org
-PACKAGE_NAME = GNU Bison
-PACKAGE_STRING = GNU Bison 2.3
-PACKAGE_TARNAME = bison
-PACKAGE_VERSION = 2.3
-PATH_SEPARATOR = :
-POSUB = po
-RANLIB = ranlib
-SET_MAKE = 
-SHELL = /bin/sh
-STDBOOL_H = 
-STRIP = 
-UNISTD_H = 
-USE_NLS = yes
-VALGRIND = 
-VERSION = 2.3
-WARNING_CFLAGS = 
-WARNING_CXXFLAGS = 
-WERROR_CFLAGS = 
-XGETTEXT = /usr/bin/xgettext
-YACC = bison -y
-YACC_LIBRARY = liby.a
-YACC_SCRIPT = yacc
-ac_ct_CC = gcc
-ac_ct_CXX = g++
-ac_ct_RANLIB = ranlib
-ac_ct_STRIP = 
-aclocaldir = ${datadir}/aclocal
-am__fastdepCC_FALSE = #
-am__fastdepCC_TRUE = 
-am__fastdepCXX_FALSE = #
-am__fastdepCXX_TRUE = 
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-datadir = ${prefix}/share
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-includedir = ${prefix}/include
-infodir = ${prefix}/info
-install_sh = /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localstatedir = ${prefix}/var
-mandir = ${prefix}/man
-mkdir_p = mkdir -p --
-oldincludedir = /usr/include
-prefix = /home/phanna/src/bison
-program_transform_name = s,x,x,
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-sysconfdir = ${prefix}/etc
-target_alias = 
-AM_CFLAGS = $(WARNING_CFLAGS)
-BUILT_SOURCES = $(GETOPT_H) $(STDBOOL_H) $(UNISTD_H)
-EXTRA_DIST = getopt_.h getopt_int.h stdbool_.h
-MOSTLYCLEANFILES = getopt.h getopt.h-t stdbool.h stdbool.h-t unistd.h
-lib_LIBRARIES = $(YACC_LIBRARY)
-EXTRA_LIBRARIES = liby.a
-noinst_LIBRARIES = libbison.a
-liby_a_SOURCES = main.c yyerror.c
-libbison_a_SOURCES = $(lib_SOURCES)
-
-# This file is generated automatically by "bootstrap".
-
-# This is for those projects which use "gettextize --intl" to put a source-code
-# copy of libintl into their package. In such projects, every Makefile.am needs
-# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory.
-# For the Makefile.ams in other directories it is the maintainer's
-# responsibility; for the one from gnulib we do it here.
-# This option has no effect when the user disables NLS (because then the intl
-# directory contains no libintl.h file) or when the project does not use
-# "gettextize --intl".
-# (commented out by bootstrap) AM_CPPFLAGS += -I$(top_builddir)/intl
-lib_SOURCES = get-errno.h get-errno.c subpipe.h subpipe.c \
-	$(bitsets_sources) $(additional_bitsets_sources) \
-	$(timevars_sources) argmatch.h argmatch.c basename.c \
-	stripslash.c exit.h gettext.h mbswidth.h mbswidth.c stpcpy.h \
-	verify.h xalloc-die.c xstrndup.h xstrndup.c
-
-# Implementation of bitsets
-bitsets_sources = \
-  abitset.c abitset.h bbitset.h bitset.c bitset.h bitset_stats.c	\
-  bitset_stats.h bitsetv.c bitsetv.h ebitset.c ebitset.h lbitset.c	\
-  lbitset.h libiberty.h vbitset.c vbitset.h
-
-
-# Additional bitset operations.
-additional_bitsets_sources = \
-	bitsetv-print.h bitsetv-print.c
-
-
-# timevars, stolen from GCC.
-timevars_sources = \
-	timevar.h timevar.c timevar.def
-
-libbison_a_LIBADD = $(LIBOBJS) $(ALLOCA)
-libbison_a_DEPENDENCIES = $(libbison_a_LIBADD)
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/gnulib.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  lib/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  lib/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-libLIBRARIES: $(lib_LIBRARIES)
-	@$(NORMAL_INSTALL)
-	test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-	@list='$(lib_LIBRARIES)'; for p in $$list; do \
-	  if test -f $$p; then \
-	    f=$(am__strip_dir) \
-	    echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-	    $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-	  else :; fi; \
-	done
-	@$(POST_INSTALL)
-	@list='$(lib_LIBRARIES)'; for p in $$list; do \
-	  if test -f $$p; then \
-	    p=$(am__strip_dir) \
-	    echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \
-	    $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \
-	  else :; fi; \
-	done
-
-uninstall-libLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(lib_LIBRARIES)'; for p in $$list; do \
-	  p=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-	  rm -f "$(DESTDIR)$(libdir)/$$p"; \
-	done
-
-clean-libLIBRARIES:
-	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
-
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libbison.a: $(libbison_a_OBJECTS) $(libbison_a_DEPENDENCIES) 
-	-rm -f libbison.a
-	$(libbison_a_AR) libbison.a $(libbison_a_OBJECTS) $(libbison_a_LIBADD)
-	$(RANLIB) libbison.a
-liby.a: $(liby_a_OBJECTS) $(liby_a_DEPENDENCIES) 
-	-rm -f liby.a
-	$(liby_a_AR) liby.a $(liby_a_OBJECTS) $(liby_a_LIBADD)
-	$(RANLIB) liby.a
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-include $(DEPDIR)/dirname.Po
-include $(DEPDIR)/dup-safer.Po
-include $(DEPDIR)/error.Po
-include $(DEPDIR)/exitfail.Po
-include $(DEPDIR)/fd-safer.Po
-include $(DEPDIR)/fopen-safer.Po
-include $(DEPDIR)/getopt.Po
-include $(DEPDIR)/getopt1.Po
-include $(DEPDIR)/hard-locale.Po
-include $(DEPDIR)/hash.Po
-include $(DEPDIR)/malloc.Po
-include $(DEPDIR)/obstack.Po
-include $(DEPDIR)/pipe-safer.Po
-include $(DEPDIR)/quote.Po
-include $(DEPDIR)/quotearg.Po
-include $(DEPDIR)/stpcpy.Po
-include $(DEPDIR)/strdup.Po
-include $(DEPDIR)/strerror.Po
-include $(DEPDIR)/strndup.Po
-include $(DEPDIR)/strnlen.Po
-include $(DEPDIR)/strtol.Po
-include $(DEPDIR)/strtoul.Po
-include $(DEPDIR)/strverscmp.Po
-include $(DEPDIR)/xmalloc.Po
-include ./$(DEPDIR)/abitset.Po
-include ./$(DEPDIR)/argmatch.Po
-include ./$(DEPDIR)/basename.Po
-include ./$(DEPDIR)/bitset.Po
-include ./$(DEPDIR)/bitset_stats.Po
-include ./$(DEPDIR)/bitsetv-print.Po
-include ./$(DEPDIR)/bitsetv.Po
-include ./$(DEPDIR)/ebitset.Po
-include ./$(DEPDIR)/get-errno.Po
-include ./$(DEPDIR)/lbitset.Po
-include ./$(DEPDIR)/main.Po
-include ./$(DEPDIR)/mbswidth.Po
-include ./$(DEPDIR)/stripslash.Po
-include ./$(DEPDIR)/subpipe.Po
-include ./$(DEPDIR)/timevar.Po
-include ./$(DEPDIR)/vbitset.Po
-include ./$(DEPDIR)/xalloc-die.Po
-include ./$(DEPDIR)/xstrndup.Po
-include ./$(DEPDIR)/yyerror.Po
-
-.c.o:
-	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-#	source='$<' object='$@' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(COMPILE) -c $<
-
-.c.obj:
-	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-#	source='$<' object='$@' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-uninstall-info-am:
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LIBRARIES)
-installdirs:
-	for dir in "$(DESTDIR)$(libdir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
-	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
-clean-am: clean-generic clean-libLIBRARIES clean-noinstLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf $(DEPDIR) ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-exec-am: install-libLIBRARIES
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf $(DEPDIR) ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am uninstall-libLIBRARIES
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLIBRARIES clean-noinstLIBRARIES ctags distclean \
-	distclean-compile distclean-generic distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-exec install-exec-am \
-	install-info install-info-am install-libLIBRARIES install-man \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-info-am \
-	uninstall-libLIBRARIES
-
-
-# We need the following in order to create <getopt.h> when the system
-# doesn't have one that works with the given compiler.
-getopt.h: getopt_.h
-	cp $(srcdir)/getopt_.h $@-t
-	mv $@-t $@
-
-# We need the following in order to create <stdbool.h> when the system
-# doesn't have one that works.
-stdbool.h: stdbool_.h
-	sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool_.h > $@-t
-	mv $@-t $@
-
-# We need the following in order to create an empty placeholder for
-# <unistd.h> when the system doesn't have one.
-unistd.h:
-	echo '/* Empty placeholder for $@.  */' >$@
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/lib/Makefile.am b/lib/Makefile.am
index f4d783e..1abfb75 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,39 +1,36 @@
-## Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+# Make bison/lib.
 
-## 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 of the License, or
-## (at your option) any later version.
+# Copyright (C) 2001-2004, 2006, 2008-2012 Free Software Foundation,
+# Inc.
 
-## 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.
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
-## 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., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301  USA
-
-AM_CFLAGS = $(WARNING_CFLAGS)
-
+AM_CFLAGS =
+AM_CPPFLAGS =
 BUILT_SOURCES =
+CLEANFILES =
 EXTRA_DIST =
+MOSTLYCLEANDIRS =
 MOSTLYCLEANFILES =
+SUFFIXES =
+noinst_LIBRARIES =
 
-lib_LIBRARIES = $(YACC_LIBRARY)
-EXTRA_LIBRARIES = liby.a
-noinst_LIBRARIES = libbison.a
+include gnulib.mk
 
-liby_a_SOURCES = main.c yyerror.c
+AM_CFLAGS += $(WARN_CFLAGS)
 
-libbison_a_SOURCES = $(lib_SOURCES)
-lib_SOURCES = \
-  get-errno.h get-errno.c \
-  subpipe.h subpipe.c \
-  $(bitsets_sources) $(additional_bitsets_sources) $(timevars_sources)
-
-# Implementation of bitsets
+# Implementation of bitsets.
 bitsets_sources = \
   abitset.c abitset.h bbitset.h bitset.c bitset.h bitset_stats.c	\
   bitset_stats.h bitsetv.c bitsetv.h ebitset.c ebitset.h lbitset.c	\
@@ -41,13 +38,18 @@
 
 # Additional bitset operations.
 additional_bitsets_sources = \
-	bitsetv-print.h bitsetv-print.c
+  bitsetv-print.h bitsetv-print.c
 
 # timevars, stolen from GCC.
 timevars_sources = \
-	timevar.h timevar.c timevar.def
+  timevar.h timevar.c timevar.def
 
-libbison_a_LIBADD = $(LIBOBJS) $(ALLOCA)
-libbison_a_DEPENDENCIES = $(libbison_a_LIBADD)
+# Non-gnulib sources in Bison's internal library.
+libbison_a_SOURCES += \
+  get-errno.h get-errno.c \
+  $(bitsets_sources) $(additional_bitsets_sources) $(timevars_sources)
 
-include gnulib.mk
+# The Yacc compatibility library.
+lib_LIBRARIES = $(YACC_LIBRARY)
+EXTRA_LIBRARIES = liby.a
+liby_a_SOURCES = main.c yyerror.c
diff --git a/lib/Makefile.in b/lib/Makefile.in
index d3613e9..1fe885d 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,15 +14,69 @@
 
 @SET_MAKE@
 
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
+# Make bison/lib.
+
+# Copyright (C) 2001-2004, 2006, 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+#
+# This file 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.
+#
+# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libbison --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --makefile-name=gnulib.mk --no-conditional-dependencies --no-libtool --macro-prefix=gl argmatch assert c-strcase calloc-posix close closeout config-h configmake dirname error extensions fdl fopen-safer fprintf-posix getline getopt-gnu gettext git-version-gen gitlog-to-changelog gpl-3.0 hash inttypes isnan javacomp-script javaexec-script ldexpl malloc-gnu mbschr mbsrchr mbswidth obstack obstack-printf perror printf-posix progname quote quotearg readme-release realloc-posix snprintf-posix spawn-pipe sprintf-posix stdbool stpcpy strdup-posix strerror strtoul strverscmp unistd unistd-safer unlocked-io unsetenv update-copyright verify vsnprintf-posix vsprintf-posix warnings xalloc xalloc-die xmemdup0 xstrndup
+
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
+pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -37,180 +91,1338 @@
 build_triplet = @build@
 host_triplet = @host@
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/gnulib.mk dirname.c dirname.h dup-safer.c error.c \
-	error.h exitfail.c exitfail.h fd-safer.c fopen-safer.c \
-	getopt.c getopt1.c hard-locale.c hard-locale.h hash.c hash.h \
-	malloc.c obstack.c obstack.h pipe-safer.c quote.c quote.h \
-	quotearg.c quotearg.h stdio--.h stdio-safer.h stpcpy.c \
-	strdup.c strdup.h strerror.c strndup.c strndup.h strnlen.c \
-	strnlen.h strtol.c strtoul.c strverscmp.c strverscmp.h \
-	unistd--.h unistd-safer.h unlocked-io.h xalloc.h xmalloc.c
+	$(srcdir)/config.in.h $(srcdir)/gnulib.mk \
+	$(top_srcdir)/build-aux/depcomp
+@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__append_1 = uniwidth/width.c
 subdir = lib
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
 	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
 	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
 	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
     *) f=$$p;; \
   esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(libdir)"
-libLIBRARIES_INSTALL = $(INSTALL_DATA)
 LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
-AR = ar
-ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo "  AR      " $@;
+am__v_AR_1 = 
 libbison_a_AR = $(AR) $(ARFLAGS)
-am__DEPENDENCIES_1 = @LIBOBJS@
-am__objects_1 = abitset.$(OBJEXT) bitset.$(OBJEXT) \
+am__DEPENDENCIES_1 =
+am__libbison_a_SOURCES_DIST = argmatch.c binary-io.h binary-io.c \
+	bitrotate.h bitrotate.c c-ctype.h c-ctype.c c-strcase.h \
+	c-strcasecmp.c c-strncasecmp.c cloexec.c close-stream.c \
+	closeout.c dirname.c basename.c dirname-lgpl.c basename-lgpl.c \
+	stripslash.c exitfail.c fatal-signal.h fatal-signal.c \
+	fd-hook.c fd-safer-flag.c dup-safer-flag.c fopen-safer.c \
+	gettext.h hash.c localcharset.h localcharset.c glthread/lock.h \
+	glthread/lock.c math.c mbchar.c mbschr.c mbsrchr.c mbswidth.h \
+	mbswidth.c mbuiter.h mbuiter.c pipe2.c pipe2-safer.c \
+	printf-frexp.c printf-frexpl.c progname.h progname.c \
+	quotearg.c sig-handler.c size_max.h spawn-pipe.h spawn-pipe.c \
+	w32spawn.h stdio.c strnlen1.h strnlen1.c glthread/threadlib.c \
+	unistd.c dup-safer.c fd-safer.c pipe-safer.c uniwidth/width.c \
+	wait-process.h wait-process.c wctype-h.c xmalloc.c \
+	xalloc-die.c xsize.h xsize.c xstrndup.h xstrndup.c get-errno.h \
+	get-errno.c abitset.c abitset.h bbitset.h bitset.c bitset.h \
+	bitset_stats.c bitset_stats.h bitsetv.c bitsetv.h ebitset.c \
+	ebitset.h lbitset.c lbitset.h libiberty.h vbitset.c vbitset.h \
+	bitsetv-print.h bitsetv-print.c timevar.h timevar.c \
+	timevar.def
+@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__objects_1 =  \
+@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@	width.$(OBJEXT)
+am__objects_2 = abitset.$(OBJEXT) bitset.$(OBJEXT) \
 	bitset_stats.$(OBJEXT) bitsetv.$(OBJEXT) ebitset.$(OBJEXT) \
 	lbitset.$(OBJEXT) vbitset.$(OBJEXT)
-am__objects_2 = bitsetv-print.$(OBJEXT)
-am__objects_3 = timevar.$(OBJEXT)
-am__objects_4 = get-errno.$(OBJEXT) subpipe.$(OBJEXT) $(am__objects_1) \
-	$(am__objects_2) $(am__objects_3) argmatch.$(OBJEXT) \
-	basename.$(OBJEXT) stripslash.$(OBJEXT) mbswidth.$(OBJEXT) \
-	xalloc-die.$(OBJEXT) xstrndup.$(OBJEXT)
-am_libbison_a_OBJECTS = $(am__objects_4)
+am__objects_3 = bitsetv-print.$(OBJEXT)
+am__objects_4 = timevar.$(OBJEXT)
+am_libbison_a_OBJECTS = argmatch.$(OBJEXT) binary-io.$(OBJEXT) \
+	bitrotate.$(OBJEXT) c-ctype.$(OBJEXT) c-strcasecmp.$(OBJEXT) \
+	c-strncasecmp.$(OBJEXT) cloexec.$(OBJEXT) \
+	close-stream.$(OBJEXT) closeout.$(OBJEXT) dirname.$(OBJEXT) \
+	basename.$(OBJEXT) dirname-lgpl.$(OBJEXT) \
+	basename-lgpl.$(OBJEXT) stripslash.$(OBJEXT) \
+	exitfail.$(OBJEXT) fatal-signal.$(OBJEXT) fd-hook.$(OBJEXT) \
+	fd-safer-flag.$(OBJEXT) dup-safer-flag.$(OBJEXT) \
+	fopen-safer.$(OBJEXT) hash.$(OBJEXT) localcharset.$(OBJEXT) \
+	lock.$(OBJEXT) math.$(OBJEXT) mbchar.$(OBJEXT) \
+	mbschr.$(OBJEXT) mbsrchr.$(OBJEXT) mbswidth.$(OBJEXT) \
+	mbuiter.$(OBJEXT) pipe2.$(OBJEXT) pipe2-safer.$(OBJEXT) \
+	printf-frexp.$(OBJEXT) printf-frexpl.$(OBJEXT) \
+	progname.$(OBJEXT) quotearg.$(OBJEXT) sig-handler.$(OBJEXT) \
+	spawn-pipe.$(OBJEXT) stdio.$(OBJEXT) strnlen1.$(OBJEXT) \
+	threadlib.$(OBJEXT) unistd.$(OBJEXT) dup-safer.$(OBJEXT) \
+	fd-safer.$(OBJEXT) pipe-safer.$(OBJEXT) $(am__objects_1) \
+	wait-process.$(OBJEXT) wctype-h.$(OBJEXT) xmalloc.$(OBJEXT) \
+	xalloc-die.$(OBJEXT) xsize.$(OBJEXT) xstrndup.$(OBJEXT) \
+	get-errno.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+	$(am__objects_4)
 libbison_a_OBJECTS = $(am_libbison_a_OBJECTS)
 liby_a_AR = $(AR) $(ARFLAGS)
 liby_a_LIBADD =
 am_liby_a_OBJECTS = main.$(OBJEXT) yyerror.$(OBJEXT)
 liby_a_OBJECTS = $(am_liby_a_OBJECTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libbison_a_SOURCES) $(liby_a_SOURCES)
-DIST_SOURCES = $(libbison_a_SOURCES) $(liby_a_SOURCES)
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libbison_a_SOURCES) $(EXTRA_libbison_a_SOURCES) \
+	$(liby_a_SOURCES)
+DIST_SOURCES = $(am__libbison_a_SOURCES_DIST) \
+	$(EXTRA_libbison_a_SOURCES) $(liby_a_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOM4TE = @AUTOM4TE@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BISON_CXX_WORKS = @BISON_CXX_WORKS@
-BISON_CXX_WORKS_FALSE = @BISON_CXX_WORKS_FALSE@
-BISON_CXX_WORKS_TRUE = @BISON_CXX_WORKS_TRUE@
+BISON_C_WORKS = @BISON_C_WORKS@
 BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
 CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DOT = @DOT@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
 GCC = @GCC@
 GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
 HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
 LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
 LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
 MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
+MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
-O0CFLAGS = @O0CFLAGS@
-O0CXXFLAGS = @O0CXXFLAGS@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
 POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
 STRIP = @STRIP@
-UNISTD_H = @UNISTD_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
 VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
 YACC = @YACC@
 YACC_LIBRARY = @YACC_LIBRARY@
 YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 aclocaldir = @aclocaldir@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -222,39 +1434,47 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-AM_CFLAGS = $(WARNING_CFLAGS)
-BUILT_SOURCES = $(GETOPT_H) $(STDBOOL_H) $(UNISTD_H)
-EXTRA_DIST = getopt_.h getopt_int.h stdbool_.h
-MOSTLYCLEANFILES = getopt.h getopt.h-t stdbool.h stdbool.h-t unistd.h
-lib_LIBRARIES = $(YACC_LIBRARY)
-EXTRA_LIBRARIES = liby.a
-noinst_LIBRARIES = libbison.a
-liby_a_SOURCES = main.c yyerror.c
-libbison_a_SOURCES = $(lib_SOURCES)
-
-# This file is generated automatically by "bootstrap".
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = $(WARN_CFLAGS)
 
 # This is for those projects which use "gettextize --intl" to put a source-code
 # copy of libintl into their package. In such projects, every Makefile.am needs
@@ -264,14 +1484,149 @@
 # This option has no effect when the user disables NLS (because then the intl
 # directory contains no libintl.h file) or when the project does not use
 # "gettextize --intl".
-# (commented out by bootstrap) AM_CPPFLAGS += -I$(top_builddir)/intl
-lib_SOURCES = get-errno.h get-errno.c subpipe.h subpipe.c \
-	$(bitsets_sources) $(additional_bitsets_sources) \
-	$(timevars_sources) argmatch.h argmatch.c basename.c \
-	stripslash.c exit.h gettext.h mbswidth.h mbswidth.c stpcpy.h \
-	verify.h xalloc-die.c xstrndup.h xstrndup.c
+AM_CPPFLAGS = -I$(top_builddir)/intl
 
-# Implementation of bitsets
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+BUILT_SOURCES = $(ALLOCA_H) configmake.h $(ERRNO_H) fcntl.h $(FLOAT_H) \
+	$(GETOPT_H) inttypes.h math.h $(SCHED_H) signal.h \
+	arg-nonnull.h c++defs.h warn-on-use.h spawn.h $(STDBOOL_H) \
+	$(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h sys/stat.h \
+	sys/types.h sys/wait.h time.h unistd.h \
+	$(LIBUNISTRING_UNITYPES_H) $(LIBUNISTRING_UNIWIDTH_H) wchar.h \
+	wctype.h
+CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \
+	ref-del.sed
+EXTRA_DIST = alloca.in.h $(top_srcdir)/build-aux/announce-gen \
+	argmatch.h c-strcaseeq.h calloc.c cloexec.h close.c \
+	close-stream.h closeout.h stripslash.c dirname.h \
+	$(top_srcdir)/build-aux/do-release-commit-and-tag dosname.h \
+	dup2.c errno.in.h error.c error.h exitfail.h fcntl.c \
+	fcntl.in.h fd-hook.h float.c float.in.h itold.c fopen.c \
+	stdio--.h stdio-safer.h fpending.c fpending.h fprintf.c \
+	fpucw.h frexp.c frexp.c frexpl.c fseterr.c fseterr.h \
+	stdio-impl.h fstat.c $(top_srcdir)/build-aux/gendocs.sh \
+	getdelim.c getdtablesize.c getline.c getopt.c getopt.in.h \
+	getopt1.c getopt_int.h $(top_srcdir)/build-aux/config.rpath \
+	$(top_srcdir)/build-aux/git-version-gen \
+	$(top_srcdir)/build-aux/gitlog-to-changelog \
+	$(top_srcdir)/build-aux/gnu-web-doc-update \
+	$(top_srcdir)/GNUmakefile $(top_srcdir)/build-aux/gnupload \
+	hash.h $(top_srcdir)/build-aux/config.rpath intprops.h \
+	inttypes.in.h float+.h isnan.c isnand.c float+.h isnan.c \
+	isnand-nolibm.h isnand.c float+.h isnan.c isnanf.c float+.h \
+	isnan.c isnanf-nolibm.h isnanf.c float+.h isnan.c isnanl.c \
+	float+.h isnan.c isnanl-nolibm.h isnanl.c iswblank.c \
+	$(top_srcdir)/build-aux/javacomp.sh.in \
+	$(top_srcdir)/build-aux/javaexec.sh.in ldexpl.c config.charset \
+	ref-add.sin ref-del.sin $(top_srcdir)/maint.mk malloc.c \
+	malloc.c math.in.h mbchar.h mbrtowc.c mbsinit.c memchr.c \
+	memchr.valgrind msvc-inval.c msvc-inval.h msvc-nothrow.c \
+	msvc-nothrow.h obstack.c obstack.h obstack_printf.c open.c \
+	pathmax.h perror.c spawn_int.h spawni.c \
+	spawn_faction_addclose.c spawn_int.h spawn_faction_adddup2.c \
+	spawn_int.h spawn_faction_addopen.c spawn_int.h \
+	spawn_faction_destroy.c spawn_faction_init.c spawn_int.h \
+	spawnattr_destroy.c spawnattr_init.c spawnattr_setflags.c \
+	spawnattr_setsigmask.c spawnp.c printf-frexp.h printf-frexp.c \
+	printf-frexpl.h printf.c quote.h quote.h quotearg.h raise.c \
+	rawmemchr.c rawmemchr.valgrind $(top_srcdir)/README-release \
+	realloc.c sched.in.h sig-handler.h sigaction.c signal.in.h \
+	float+.h signbitd.c signbitf.c signbitl.c sigprocmask.c \
+	$(top_srcdir)/build-aux/snippet/_Noreturn.h \
+	$(top_srcdir)/build-aux/snippet/arg-nonnull.h \
+	$(top_srcdir)/build-aux/snippet/c++defs.h \
+	$(top_srcdir)/build-aux/snippet/warn-on-use.h snprintf.c \
+	spawn.in.h sprintf.c stat.c stdbool.in.h stddef.in.h \
+	stdint.in.h stdio.in.h stdlib.in.h stpcpy.c strchrnul.c \
+	strchrnul.valgrind strdup.c streq.h strerror.c \
+	strerror-override.c strerror-override.h strerror_r.c \
+	string.in.h strndup.c strnlen.c strtol.c strtoul.c \
+	strverscmp.c sys_stat.in.h sys_types.in.h sys_wait.in.h \
+	$(top_srcdir)/build-aux/config.rpath time.in.h unistd.in.h \
+	unistd--.h unistd-safer.h unitypes.in.h localcharset.h \
+	uniwidth.in.h uniwidth/cjk.h unlocked-io.h unsetenv.c \
+	$(top_srcdir)/build-aux/update-copyright \
+	$(top_srcdir)/build-aux/useless-if-before-free asnprintf.c \
+	float+.h printf-args.c printf-args.h printf-parse.c \
+	printf-parse.h vasnprintf.c vasnprintf.h \
+	$(top_srcdir)/build-aux/vc-list-files verify.h vfprintf.c \
+	vsnprintf.c vsprintf.c waitpid.c wchar.in.h wctype.in.h \
+	wcwidth.c xalloc.h xalloc-oversized.h xmemdup0.c xmemdup0.h
+MOSTLYCLEANDIRS = sys sys
+MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \
+	errno.h-t fcntl.h fcntl.h-t float.h float.h-t getopt.h \
+	getopt.h-t inttypes.h inttypes.h-t math.h math.h-t sched.h \
+	sched.h-t signal.h signal.h-t arg-nonnull.h arg-nonnull.h-t \
+	c++defs.h c++defs.h-t warn-on-use.h warn-on-use.h-t spawn.h \
+	spawn.h-t stdbool.h stdbool.h-t stddef.h stddef.h-t stdint.h \
+	stdint.h-t stdio.h stdio.h-t stdlib.h stdlib.h-t string.h \
+	string.h-t sys/stat.h sys/stat.h-t sys/types.h sys/types.h-t \
+	sys/wait.h sys/wait.h-t time.h time.h-t unistd.h unistd.h-t \
+	unitypes.h unitypes.h-t uniwidth.h uniwidth.h-t wchar.h \
+	wchar.h-t wctype.h wctype.h-t
+SUFFIXES = .sed .sin
+noinst_LIBRARIES = libbison.a
+
+# Non-gnulib sources in Bison's internal library.
+libbison_a_SOURCES = argmatch.c binary-io.h binary-io.c bitrotate.h \
+	bitrotate.c c-ctype.h c-ctype.c c-strcase.h c-strcasecmp.c \
+	c-strncasecmp.c cloexec.c close-stream.c closeout.c dirname.c \
+	basename.c dirname-lgpl.c basename-lgpl.c stripslash.c \
+	exitfail.c fatal-signal.h fatal-signal.c fd-hook.c \
+	fd-safer-flag.c dup-safer-flag.c fopen-safer.c gettext.h \
+	hash.c localcharset.h localcharset.c glthread/lock.h \
+	glthread/lock.c math.c mbchar.c mbschr.c mbsrchr.c mbswidth.h \
+	mbswidth.c mbuiter.h mbuiter.c pipe2.c pipe2-safer.c \
+	printf-frexp.c printf-frexpl.c progname.h progname.c \
+	quotearg.c sig-handler.c size_max.h spawn-pipe.h spawn-pipe.c \
+	w32spawn.h stdio.c strnlen1.h strnlen1.c glthread/threadlib.c \
+	unistd.c dup-safer.c fd-safer.c pipe-safer.c $(am__append_1) \
+	wait-process.h wait-process.c wctype-h.c xmalloc.c \
+	xalloc-die.c xsize.h xsize.c xstrndup.h xstrndup.c get-errno.h \
+	get-errno.c $(bitsets_sources) $(additional_bitsets_sources) \
+	$(timevars_sources)
+libbison_a_LIBADD = $(gl_LIBOBJS)
+libbison_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_libbison_a_SOURCES = calloc.c close.c stripslash.c dup2.c \
+	error.c fcntl.c float.c itold.c fopen.c fpending.c fprintf.c \
+	frexp.c frexp.c frexpl.c fseterr.c fstat.c getdelim.c \
+	getdtablesize.c getline.c getopt.c getopt1.c isnan.c isnand.c \
+	isnan.c isnand.c isnan.c isnanf.c isnan.c isnanf.c isnan.c \
+	isnanl.c isnan.c isnanl.c iswblank.c ldexpl.c malloc.c \
+	malloc.c mbrtowc.c mbsinit.c memchr.c msvc-inval.c \
+	msvc-nothrow.c obstack.c obstack_printf.c open.c perror.c \
+	spawni.c spawn_faction_addclose.c spawn_faction_adddup2.c \
+	spawn_faction_addopen.c spawn_faction_destroy.c \
+	spawn_faction_init.c spawnattr_destroy.c spawnattr_init.c \
+	spawnattr_setflags.c spawnattr_setsigmask.c spawnp.c \
+	printf-frexp.c printf.c raise.c rawmemchr.c realloc.c \
+	sigaction.c signbitd.c signbitf.c signbitl.c sigprocmask.c \
+	snprintf.c sprintf.c stat.c stpcpy.c strchrnul.c strdup.c \
+	strerror.c strerror-override.c strerror_r.c strndup.c \
+	strnlen.c strtol.c strtoul.c strverscmp.c unsetenv.c \
+	asnprintf.c printf-args.c printf-parse.c vasnprintf.c \
+	vfprintf.c vsnprintf.c vsprintf.c waitpid.c wcwidth.c \
+	xmemdup0.c
+charset_alias = $(DESTDIR)$(libdir)/charset.alias
+charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all Makefile.am that
+# need it. This is ensured by the applicability 'all' defined above.
+_NORETURN_H = $(top_srcdir)/build-aux/snippet/_Noreturn.h
+ARG_NONNULL_H = arg-nonnull.h
+CXXDEFS_H = c++defs.h
+WARN_ON_USE_H = warn-on-use.h
+
+# Implementation of bitsets.
 bitsets_sources = \
   abitset.c abitset.h bbitset.h bitset.c bitset.h bitset_stats.c	\
   bitset_stats.h bitsetv.c bitsetv.h ebitset.c ebitset.h lbitset.c	\
@@ -280,32 +1635,35 @@
 
 # Additional bitset operations.
 additional_bitsets_sources = \
-	bitsetv-print.h bitsetv-print.c
+  bitsetv-print.h bitsetv-print.c
 
 
 # timevars, stolen from GCC.
 timevars_sources = \
-	timevar.h timevar.c timevar.def
+  timevar.h timevar.c timevar.def
 
-libbison_a_LIBADD = $(LIBOBJS) $(ALLOCA)
-libbison_a_DEPENDENCIES = $(libbison_a_LIBADD)
-all: $(BUILT_SOURCES)
+
+# The Yacc compatibility library.
+lib_LIBRARIES = $(YACC_LIBRARY)
+EXTRA_LIBRARIES = liby.a
+liby_a_SOURCES = main.c yyerror.c
+all: $(BUILT_SOURCES) config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
+.SUFFIXES: .sed .sin .c .o .obj
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/gnulib.mk $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  lib/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  lib/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits lib/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -315,6 +1673,7 @@
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
+$(srcdir)/gnulib.mk:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -323,46 +1682,64 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+	@if test ! -f $@; then rm -f stamp-h1; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.in.h $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status lib/config.h
+$(srcdir)/config.in.h:  $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
 install-libLIBRARIES: $(lib_LIBRARIES)
 	@$(NORMAL_INSTALL)
-	test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-	@list='$(lib_LIBRARIES)'; for p in $$list; do \
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
 	  if test -f $$p; then \
-	    f=$(am__strip_dir) \
-	    echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-	    $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+	    list2="$$list2 $$p"; \
 	  else :; fi; \
-	done
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; }
 	@$(POST_INSTALL)
-	@list='$(lib_LIBRARIES)'; for p in $$list; do \
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
 	  if test -f $$p; then \
-	    p=$(am__strip_dir) \
-	    echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \
-	    $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \
+	    $(am__strip_dir) \
+	    echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \
+	    ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \
 	  else :; fi; \
 	done
 
 uninstall-libLIBRARIES:
 	@$(NORMAL_UNINSTALL)
-	@list='$(lib_LIBRARIES)'; for p in $$list; do \
-	  p=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-	  rm -f "$(DESTDIR)$(libdir)/$$p"; \
-	done
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir)
 
 clean-libLIBRARIES:
 	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
 
 clean-noinstLIBRARIES:
 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libbison.a: $(libbison_a_OBJECTS) $(libbison_a_DEPENDENCIES) 
-	-rm -f libbison.a
-	$(libbison_a_AR) libbison.a $(libbison_a_OBJECTS) $(libbison_a_LIBADD)
-	$(RANLIB) libbison.a
-liby.a: $(liby_a_OBJECTS) $(liby_a_DEPENDENCIES) 
-	-rm -f liby.a
-	$(liby_a_AR) liby.a $(liby_a_OBJECTS) $(liby_a_LIBADD)
-	$(RANLIB) liby.a
+libbison.a: $(libbison_a_OBJECTS) $(libbison_a_DEPENDENCIES) $(EXTRA_libbison_a_DEPENDENCIES) 
+	$(AM_V_at)-rm -f libbison.a
+	$(AM_V_AR)$(libbison_a_AR) libbison.a $(libbison_a_OBJECTS) $(libbison_a_LIBADD)
+	$(AM_V_at)$(RANLIB) libbison.a
+liby.a: $(liby_a_OBJECTS) $(liby_a_DEPENDENCIES) $(EXTRA_liby_a_DEPENDENCIES) 
+	$(AM_V_at)-rm -f liby.a
+	$(AM_V_AR)$(liby_a_AR) liby.a $(liby_a_OBJECTS) $(liby_a_LIBADD)
+	$(AM_V_at)$(RANLIB) liby.a
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -370,147 +1747,309 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dirname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dup-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/exitfail.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fd-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fopen-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/hard-locale.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/hash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/malloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/obstack.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pipe-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/quote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/quotearg.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/stpcpy.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strdup.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strerror.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strndup.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strnlen.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoul.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strverscmp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xmalloc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abitset.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argmatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asnprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary-io.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitrotate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitset.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitset_stats.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitsetv-print.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitsetv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strcasecmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strncasecmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close-stream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closeout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer-flag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ebitset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fatal-signal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-hook.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer-flag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fopen-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpending.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frexp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frexpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fseterr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-errno.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdelim.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnand.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iswblank.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbitset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ldexpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lock.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbschr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrchr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbswidth.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbuiter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obstack.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obstack_printf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perror.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe2-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-args.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-frexp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-frexpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-parse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotearg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raise.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawmemchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sig-handler.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigaction.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigprocmask.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn-pipe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_addclose.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_adddup2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_addopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_destroy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_destroy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_setflags.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_setsigmask.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawni.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stpcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror_r.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subpipe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtol.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoul.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strverscmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threadlib.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timevar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasnprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbitset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsnprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wait-process.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/waitpid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctype-h.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/width.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmemdup0.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsize.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yyerror.Po@am__quote@
 
 .c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-uninstall-info-am:
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+lock.o: glthread/lock.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lock.o -MD -MP -MF $(DEPDIR)/lock.Tpo -c -o lock.o `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lock.Tpo $(DEPDIR)/lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='glthread/lock.c' object='lock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lock.o `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c
+
+lock.obj: glthread/lock.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lock.obj -MD -MP -MF $(DEPDIR)/lock.Tpo -c -o lock.obj `if test -f 'glthread/lock.c'; then $(CYGPATH_W) 'glthread/lock.c'; else $(CYGPATH_W) '$(srcdir)/glthread/lock.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lock.Tpo $(DEPDIR)/lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='glthread/lock.c' object='lock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lock.obj `if test -f 'glthread/lock.c'; then $(CYGPATH_W) 'glthread/lock.c'; else $(CYGPATH_W) '$(srcdir)/glthread/lock.c'; fi`
+
+threadlib.o: glthread/threadlib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT threadlib.o -MD -MP -MF $(DEPDIR)/threadlib.Tpo -c -o threadlib.o `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/threadlib.Tpo $(DEPDIR)/threadlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='glthread/threadlib.c' object='threadlib.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o threadlib.o `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c
+
+threadlib.obj: glthread/threadlib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT threadlib.obj -MD -MP -MF $(DEPDIR)/threadlib.Tpo -c -o threadlib.obj `if test -f 'glthread/threadlib.c'; then $(CYGPATH_W) 'glthread/threadlib.c'; else $(CYGPATH_W) '$(srcdir)/glthread/threadlib.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/threadlib.Tpo $(DEPDIR)/threadlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='glthread/threadlib.c' object='threadlib.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o threadlib.obj `if test -f 'glthread/threadlib.c'; then $(CYGPATH_W) 'glthread/threadlib.c'; else $(CYGPATH_W) '$(srcdir)/glthread/threadlib.c'; fi`
+
+width.o: uniwidth/width.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT width.o -MD -MP -MF $(DEPDIR)/width.Tpo -c -o width.o `test -f 'uniwidth/width.c' || echo '$(srcdir)/'`uniwidth/width.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/width.Tpo $(DEPDIR)/width.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='uniwidth/width.c' object='width.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o width.o `test -f 'uniwidth/width.c' || echo '$(srcdir)/'`uniwidth/width.c
+
+width.obj: uniwidth/width.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT width.obj -MD -MP -MF $(DEPDIR)/width.Tpo -c -o width.obj `if test -f 'uniwidth/width.c'; then $(CYGPATH_W) 'uniwidth/width.c'; else $(CYGPATH_W) '$(srcdir)/uniwidth/width.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/width.Tpo $(DEPDIR)/width.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='uniwidth/width.c' object='width.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o width.obj `if test -f 'uniwidth/width.c'; then $(CYGPATH_W) 'uniwidth/width.c'; else $(CYGPATH_W) '$(srcdir)/uniwidth/width.c'; fi`
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
 	mkid -fID $$unique
 tags: TAGS
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+TAGS:  $(HEADERS) $(SOURCES) config.in.h $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	list='$(SOURCES) $(HEADERS) config.in.h $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+CTAGS:  $(HEADERS) $(SOURCES) config.in.h $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	list='$(SOURCES) $(HEADERS) config.in.h $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
 check-am: all-am
 check: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LIBRARIES)
+all-am: Makefile $(LIBRARIES) config.h all-local
 installdirs:
 	for dir in "$(DESTDIR)$(libdir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) install-am
@@ -523,17 +2062,24 @@
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -545,10 +2091,10 @@
 	mostlyclean-am
 
 distclean: distclean-am
-	-rm -rf $(DEPDIR) ./$(DEPDIR)
+	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
+	distclean-hdr distclean-local distclean-tags
 
 dvi: dvi-am
 
@@ -556,28 +2102,49 @@
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
 
 install-data-am:
 
-install-exec-am: install-libLIBRARIES
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-exec-local install-libLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
 
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf $(DEPDIR) ./$(DEPDIR)
+	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-local
 
 pdf: pdf-am
 
@@ -587,37 +2154,1443 @@
 
 ps-am:
 
-uninstall-am: uninstall-info-am uninstall-libLIBRARIES
+uninstall-am: uninstall-libLIBRARIES uninstall-local
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLIBRARIES clean-noinstLIBRARIES ctags distclean \
-	distclean-compile distclean-generic distclean-tags distdir dvi \
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libLIBRARIES clean-noinstLIBRARIES \
+	cscopelist ctags distclean distclean-compile distclean-generic \
+	distclean-hdr distclean-local distclean-tags distdir dvi \
 	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-exec install-exec-am \
-	install-info install-info-am install-libLIBRARIES install-man \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-info-am \
-	uninstall-libLIBRARIES
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-exec-local install-html \
+	install-html-am install-info install-info-am \
+	install-libLIBRARIES install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am tags \
+	uninstall uninstall-am uninstall-libLIBRARIES uninstall-local
 
 
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status
+@GL_GENERATE_ALLOCA_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_ALLOCA_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+@GL_GENERATE_ALLOCA_H_TRUE@	  cat $(srcdir)/alloca.in.h; \
+@GL_GENERATE_ALLOCA_H_TRUE@	} > $@-t && \
+@GL_GENERATE_ALLOCA_H_TRUE@	mv -f $@-t $@
+@GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status
+@GL_GENERATE_ALLOCA_H_FALSE@	rm -f $@
+
+# Listed in the same order as the GNU makefile conventions, and
+# provided by autoconf 2.59c+.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+	$(AM_V_GEN)rm -f $@-t && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  echo '#define PREFIX "$(prefix)"'; \
+	  echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
+	  echo '#define BINDIR "$(bindir)"'; \
+	  echo '#define SBINDIR "$(sbindir)"'; \
+	  echo '#define LIBEXECDIR "$(libexecdir)"'; \
+	  echo '#define DATAROOTDIR "$(datarootdir)"'; \
+	  echo '#define DATADIR "$(datadir)"'; \
+	  echo '#define SYSCONFDIR "$(sysconfdir)"'; \
+	  echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
+	  echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
+	  echo '#define INCLUDEDIR "$(includedir)"'; \
+	  echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
+	  echo '#define DOCDIR "$(docdir)"'; \
+	  echo '#define INFODIR "$(infodir)"'; \
+	  echo '#define HTMLDIR "$(htmldir)"'; \
+	  echo '#define DVIDIR "$(dvidir)"'; \
+	  echo '#define PDFDIR "$(pdfdir)"'; \
+	  echo '#define PSDIR "$(psdir)"'; \
+	  echo '#define LIBDIR "$(libdir)"'; \
+	  echo '#define LISPDIR "$(lispdir)"'; \
+	  echo '#define LOCALEDIR "$(localedir)"'; \
+	  echo '#define MANDIR "$(mandir)"'; \
+	  echo '#define MANEXT "$(manext)"'; \
+	  echo '#define PKGDATADIR "$(pkgdatadir)"'; \
+	  echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
+	  echo '#define PKGLIBDIR "$(pkglibdir)"'; \
+	  echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
+	} | sed '/""/d' > $@-t && \
+	mv -f $@-t $@
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+@GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status
+@GL_GENERATE_ERRNO_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_ERRNO_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+@GL_GENERATE_ERRNO_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@	      < $(srcdir)/errno.in.h; \
+@GL_GENERATE_ERRNO_H_TRUE@	} > $@-t && \
+@GL_GENERATE_ERRNO_H_TRUE@	mv $@-t $@
+@GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status
+@GL_GENERATE_ERRNO_H_FALSE@	rm -f $@
+
+# We need the following in order to create <fcntl.h> when the system
+# doesn't have one that works with the given compiler.
+fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
+	      -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \
+	      -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \
+	      -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \
+	      -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
+	      -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
+	      -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \
+	      -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
+	      -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/fcntl.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <float.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_FLOAT_H_TRUE@float.h: float.in.h $(top_builddir)/config.status
+@GL_GENERATE_FLOAT_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_FLOAT_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+@GL_GENERATE_FLOAT_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_FLOAT_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_FLOAT_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_FLOAT_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_FLOAT_H_TRUE@	      -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
+@GL_GENERATE_FLOAT_H_TRUE@	      -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+@GL_GENERATE_FLOAT_H_TRUE@	      < $(srcdir)/float.in.h; \
+@GL_GENERATE_FLOAT_H_TRUE@	} > $@-t && \
+@GL_GENERATE_FLOAT_H_TRUE@	mv $@-t $@
+@GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status
+@GL_GENERATE_FLOAT_H_FALSE@	rm -f $@
+
 # We need the following in order to create <getopt.h> when the system
 # doesn't have one that works with the given compiler.
-getopt.h: getopt_.h
-	cp $(srcdir)/getopt_.h $@-t
+getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      < $(srcdir)/getopt.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+
+distclean-local: clean-GNUmakefile
+clean-GNUmakefile:
+	test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
+
+# We need the following in order to create <inttypes.h> when the system
+# doesn't have one that works with the given compiler.
+inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
+	      -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
+	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+	      -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
+	      -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
+	      -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
+	      -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
+	      -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
+	      -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
+	      -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
+	      -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
+	      -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
+	      -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \
+	      -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
+	      -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
+	      -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
+	      -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/inttypes.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to install a simple file in $(libdir)
+# which is shared with other installed packages. We use a list of referencing
+# packages so that "make uninstall" will remove the file if and only if it
+# is not used by another installed package.
+# On systems with glibc-2.1 or newer, the file is redundant, therefore we
+# avoid installing it.
+
+all-local: charset.alias ref-add.sed ref-del.sed
+install-exec-local: install-exec-localcharset
+install-exec-localcharset: all-local
+	if test $(GLIBC21) = no; then \
+	  case '$(host_os)' in \
+	    darwin[56]*) \
+	      need_charset_alias=true ;; \
+	    darwin* | cygwin* | mingw* | pw32* | cegcc*) \
+	      need_charset_alias=false ;; \
+	    *) \
+	      need_charset_alias=true ;; \
+	  esac ; \
+	else \
+	  need_charset_alias=false ; \
+	fi ; \
+	if $$need_charset_alias; then \
+	  $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
+	fi ; \
+	if test -f $(charset_alias); then \
+	  sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
+	  $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	  rm -f $(charset_tmp) ; \
+	else \
+	  if $$need_charset_alias; then \
+	    sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	    rm -f $(charset_tmp) ; \
+	  fi ; \
+	fi
+
+uninstall-local: uninstall-localcharset
+uninstall-localcharset: all-local
+	if test -f $(charset_alias); then \
+	  sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
+	  if grep '^# Packages using this file: $$' $(charset_tmp) \
+	      > /dev/null; then \
+	    rm -f $(charset_alias); \
+	  else \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
+	  fi; \
+	  rm -f $(charset_tmp); \
+	fi
+
+charset.alias: config.charset
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
+	mv t-$@ $@
+.sin.sed:
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
+	mv t-$@ $@
+
+# We need the following in order to create <math.h> when the system
+# doesn't have one that works with the given compiler.
+math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \
+	      -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \
+	      -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \
+	      -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \
+	      -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \
+	      -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \
+	      -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \
+	      -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \
+	      -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \
+	      -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \
+	      -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \
+	      -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \
+	      -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \
+	      -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \
+	      -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \
+	      -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \
+	      -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \
+	      -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \
+	      -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \
+	      -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \
+	      -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \
+	      -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \
+	      -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \
+	      -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \
+	      -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \
+	      -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \
+	      -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \
+	      -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \
+	      -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \
+	      -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \
+	      -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \
+	      -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \
+	      -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \
+	      -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \
+	      -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \
+	      -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \
+	      -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \
+	      -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \
+	      -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \
+	      -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \
+	      -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \
+	      -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \
+	      -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \
+	      -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \
+	      -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \
+	      < $(srcdir)/math.in.h | \
+	  sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \
+	      -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \
+	      -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \
+	      -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \
+	      -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \
+	      -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \
+	      -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \
+	      -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \
+	      -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \
+	      -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \
+	      -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \
+	      -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \
+	      -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \
+	      -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \
+	      -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \
+	      -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \
+	      -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \
+	      -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \
+	      -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \
+	      -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \
+	      -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \
+	      -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \
+	      -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \
+	      -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \
+	      -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \
+	      -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \
+	      -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \
+	      -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \
+	      -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \
+	      -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \
+	      -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \
+	      -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \
+	      -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \
+	      -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \
+	      -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \
+	      -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \
+	      -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \
+	      -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \
+	      -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \
+	      -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \
+	      -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \
+	      -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \
+	      -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \
+	      -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \
+	      -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \
+	      -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \
+	      -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \
+	      -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \
+	      -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \
+	      -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \
+	      -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \
+	  | \
+	  sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \
+	      -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \
+	      -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \
+	      -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \
+	      -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \
+	      -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \
+	      -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \
+	      -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \
+	      -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \
+	      -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \
+	      -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \
+	      -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \
+	      -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \
+	      -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \
+	      -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \
+	      -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \
+	      -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \
+	      -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \
+	      -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \
+	      -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \
+	      -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \
+	      -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \
+	      -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \
+	      -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \
+	      -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \
+	      -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \
+	      -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \
+	      -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \
+	      -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \
+	      -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \
+	      -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \
+	      -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \
+	      -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \
+	      -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \
+	      -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \
+	      -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \
+	      -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \
+	      -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \
+	      -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \
+	      -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \
+	      -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \
+	      -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \
+	      -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \
+	      -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \
+	      -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \
+	      -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \
+	      -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \
+	      -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \
+	      -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \
+	      -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \
+	      -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \
+	      -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \
+	      -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \
+	      -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \
+	      -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \
+	      -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \
+	      -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \
+	      -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \
+	      -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \
+	      -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \
+	      -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \
+	      -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \
+	      -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \
+	      -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \
+	      -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \
+	      -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \
+	      -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \
+	      -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \
+	      -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \
+	      -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \
+	      -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \
+	      -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \
+	      -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \
+	      -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \
+	      -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \
+	      -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \
+	      -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \
+	      -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \
+	      -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \
+	      -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \
+	      -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \
+	      -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \
+	      -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \
+	      -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \
+	      -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \
+	      -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \
+	      -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \
+	      -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \
+	      -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \
+	      -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \
+	      -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \
+	      -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \
+	      -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \
+	      -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \
+	      -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \
+	      -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \
+	      -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \
+	      -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \
+	      -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \
+	      -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \
+	      -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \
+	      -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \
+	      -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \
+	      -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \
+	      -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \
+	      -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \
+	      -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \
+	      -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \
+	      -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \
+	      -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \
+	      -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \
+	      -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \
+	      -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \
+	      -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \
+	      -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \
+	      -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \
+	      -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \
+	      -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \
+	      -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \
+	      -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \
+	      -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \
+	      -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \
+	      -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \
+	      -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \
+	      -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \
+	      -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \
+	      -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+	      -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \
+	      -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \
+	      -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \
+	      -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \
+	      -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \
+	      -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \
+	      -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \
+	      -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \
+	      -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \
+	      -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \
+	      -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \
+	      -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \
+	      -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \
+	      -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \
+	      -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \
+	      -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \
+	      -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \
+	      -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \
+	      -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \
+	      -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \
+	      -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \
+	      -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \
+	      -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \
+	      -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \
+	      -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \
+	      -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \
+	      -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \
+	      -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \
+	      -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \
+	      -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \
+	      -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \
+	      -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create a replacement for <sched.h> when
+# the system doesn't have one.
+@GL_GENERATE_SCHED_H_TRUE@sched.h: sched.in.h $(top_builddir)/config.status
+@GL_GENERATE_SCHED_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_SCHED_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+@GL_GENERATE_SCHED_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_SCHED_H_TRUE@	      -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \
+@GL_GENERATE_SCHED_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_SCHED_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_SCHED_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_SCHED_H_TRUE@	      -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \
+@GL_GENERATE_SCHED_H_TRUE@	      -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \
+@GL_GENERATE_SCHED_H_TRUE@	      < $(srcdir)/sched.in.h; \
+@GL_GENERATE_SCHED_H_TRUE@	} > $@-t && \
+@GL_GENERATE_SCHED_H_TRUE@	mv $@-t $@
+@GL_GENERATE_SCHED_H_FALSE@sched.h: $(top_builddir)/config.status
+@GL_GENERATE_SCHED_H_FALSE@	rm -f $@
+
+# We need the following in order to create <signal.h> when the system
+# doesn't have a complete one.
+signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \
+	      -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''GNULIB_RAISE''@|$(GNULIB_RAISE)|g' \
+	      -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \
+	      -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \
+	      -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \
+	      -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \
+	      -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \
+	      -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \
+	      -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \
+	      -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \
+	      -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \
+	      -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \
+	      -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/signal.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
+# off.
+arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/GL_ARG_NONNULL/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
+	  > $@-t && \
+	mv $@-t $@
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/_GL_CXXDEFS/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/c++defs.h \
+	  > $@-t && \
+	mv $@-t $@
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
+# off.
+warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/^.ifndef/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/warn-on-use.h \
+	  > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create a replacement for <spawn.h> when
+# the system doesn't have one.
+spawn.h: spawn.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN''@/$(GNULIB_POSIX_SPAWN)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNP''@/$(GNULIB_POSIX_SPAWNP)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_INIT''@/$(GNULIB_POSIX_SPAWNATTR_INIT)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_DESTROY''@/$(GNULIB_POSIX_SPAWNATTR_DESTROY)/g' \
+	      -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \
+	      -e 's|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \
+	      -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/spawn.in.h; \
+	} > $@-t && \
 	mv $@-t $@
 
 # We need the following in order to create <stdbool.h> when the system
 # doesn't have one that works.
-stdbool.h: stdbool_.h
-	sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool_.h > $@-t
+@GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDBOOL_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_STDBOOL_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+@GL_GENERATE_STDBOOL_H_TRUE@	  sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+@GL_GENERATE_STDBOOL_H_TRUE@	} > $@-t && \
+@GL_GENERATE_STDBOOL_H_TRUE@	mv $@-t $@
+@GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status
+@GL_GENERATE_STDBOOL_H_FALSE@	rm -f $@
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDDEF_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_STDDEF_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+@GL_GENERATE_STDDEF_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@	      < $(srcdir)/stddef.in.h; \
+@GL_GENERATE_STDDEF_H_TRUE@	} > $@-t && \
+@GL_GENERATE_STDDEF_H_TRUE@	mv $@-t $@
+@GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status
+@GL_GENERATE_STDDEF_H_FALSE@	rm -f $@
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDINT_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_STDINT_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+@GL_GENERATE_STDINT_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      < $(srcdir)/stdint.in.h; \
+@GL_GENERATE_STDINT_H_TRUE@	} > $@-t && \
+@GL_GENERATE_STDINT_H_TRUE@	mv $@-t $@
+@GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status
+@GL_GENERATE_STDINT_H_FALSE@	rm -f $@
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+	      -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \
+	      -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \
+	      -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \
+	      -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \
+	      -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \
+	      -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \
+	      -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \
+	      -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \
+	      -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \
+	      -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \
+	      -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \
+	      -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \
+	      -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \
+	      -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \
+	      -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \
+	      -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \
+	      -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \
+	      -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \
+	      -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \
+	      -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \
+	      -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \
+	      -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \
+	      -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \
+	      -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \
+	      -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \
+	      -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \
+	      -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \
+	      -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \
+	      -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \
+	      -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \
+	      -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \
+	      -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \
+	      -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \
+	      -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \
+	      -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \
+	      -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \
+	      -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \
+	      -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \
+	      -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \
+	      -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \
+	      -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \
+	      -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \
+	      -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \
+	      -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \
+	      -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \
+	      < $(srcdir)/stdio.in.h | \
+	  sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+	      -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \
+	      -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \
+	      -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+	      -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+	      -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+	      -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+	      -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+	      -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+	      -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \
+	      -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \
+	      -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \
+	      -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \
+	      -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+	      -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+	      -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+	      -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+	      -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+	      -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
+	      -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+	      -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+	      -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+	      -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+	      -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+	      -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+	      -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+	      -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+	      -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+	      -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+	      -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+	      -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+	      -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+	      -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+	      -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+	      -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+	      -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+	      -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+	      -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+	      -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+	      -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \
+	      -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+	      -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \
+	      -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+	      -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+	      -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+	      -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+	      -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+	      -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+	      -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
+  $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+	      -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \
+	      -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \
+	      -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \
+	      -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \
+	      -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \
+	      -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \
+	      -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \
+	      -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \
+	      -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \
+	      -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \
+	      -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \
+	      -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \
+	      -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \
+	      -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \
+	      -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \
+	      -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \
+	      -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \
+	      -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
+	      -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
+	      -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
+	      -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \
+	      -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \
+	      -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \
+	      -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \
+	      -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \
+	      -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \
+	      -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \
+	      -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \
+	      < $(srcdir)/stdlib.in.h | \
+	  sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
+	      -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+	      -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+	      -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+	      -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+	      -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \
+	      -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+	      -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+	      -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+	      -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \
+	      -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+	      -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \
+	      -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \
+	      -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \
+	      -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \
+	      -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+	      -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+	      -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+	      -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+	      -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \
+	      -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+	      -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+	      -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+	      -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+	      -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+	      -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
+	      -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \
+	      -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \
+	      -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+	      -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \
+	      -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
+	      -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+	      -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \
+	      -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
+	      -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+	      -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
+	      -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \
+	      -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+	      -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+	      -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+	      -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+	      -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _Noreturn/r $(_NORETURN_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+	      -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+	      -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+	      -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+	      -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+	      -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+	      -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+	      -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+	      -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+	      -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+	      -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+	      -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+	      -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+	      -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+	      -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+	      -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+	      -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+	      -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+	      -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+	      -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+	      -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+	      -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+	      -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+	      -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+	      -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+	      -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+	      -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+	      -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+	      -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+	      -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+	      -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+	      -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+	      -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+	      -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+	      -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
+	      < $(srcdir)/string.in.h | \
+	  sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+	      -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+	      -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+	      -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+	      -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+	      -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+	      -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+	      -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+	      -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+	      -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+	      -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+	      -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+	      -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+	      -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+	      -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+	      -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+	      -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+	      -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+	      -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+	      -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+	      -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+	      -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+	      -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+	      -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+	      -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+	      -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+	      -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+	      -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	      < $(srcdir)/string.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
+	      -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
+	      -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
+	      -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
+	      -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \
+	      -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \
+	      -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \
+	      -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \
+	      -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \
+	      -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \
+	      -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \
+	      -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
+	      -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
+	      -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
+	      -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+	      -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+	      -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+	      -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
+	      -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+	      -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+	      -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
+	      -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+	      -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
+	      -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
+	      -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
+	      -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
+	      -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
+	      -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
+	      -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
+	      -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+	      -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+	      -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
+	      -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
+	      -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_stat.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <sys/types.h> when the system
+# doesn't have one that works with the given compiler.
+sys/types.h: sys_types.in.h $(top_builddir)/config.status
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+	      < $(srcdir)/sys_types.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <sys/wait.h> when the system
+# has one that is incomplete.
+sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \
+	      -e 's/@''GNULIB_WAITPID''@/$(GNULIB_WAITPID)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_wait.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <time.h> when the system
+# doesn't have one that works with the given compiler.
+time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
+	      -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
+	      -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
+	      -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
+	      -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
+	      -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
+	      -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
+	      -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
+	      -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
+	      -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
+	      -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
+	      -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
+	      -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
+	      -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+	      -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/time.in.h; \
+	} > $@-t && \
 	mv $@-t $@
 
 # We need the following in order to create an empty placeholder for
 # <unistd.h> when the system doesn't have one.
-unistd.h:
-	echo '/* Empty placeholder for $@.  */' >$@
+unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+	      -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \
+	      -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
+	      -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
+	      -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \
+	      -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
+	      -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
+	      -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \
+	      -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \
+	      -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \
+	      -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \
+	      -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \
+	      -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \
+	      -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \
+	      -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \
+	      -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \
+	      -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \
+	      -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \
+	      -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \
+	      -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \
+	      -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \
+	      -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \
+	      -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \
+	      -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
+	      -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
+	      -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \
+	      -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \
+	      -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \
+	      -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \
+	      -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \
+	      -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \
+	      -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \
+	      -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \
+	      -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \
+	      -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \
+	      -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \
+	      -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \
+	      -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \
+	      -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \
+	      -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
+	      -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
+	      -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
+	      -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \
+	      -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \
+	      -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \
+	      -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \
+	      < $(srcdir)/unistd.in.h | \
+	  sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+	      -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+	      -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+	      -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+	      -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+	      -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
+	      -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+	      -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \
+	      -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+	      -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+	      -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+	      -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+	      -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+	      -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
+	      -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+	      -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
+	      -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+	      -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+	      -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+	      -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \
+	      -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+	      -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+	      -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
+	      -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+	      -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+	      -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \
+	      -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+	      -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+	      -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+	      -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+	      -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+	      -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+	      -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \
+	      -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \
+	      -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \
+	      -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+	      -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
+	      -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
+	      -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \
+	      -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \
+	      -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+	      -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+	      -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+	      -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+	      -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+	      -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+	      -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \
+	      -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+	      -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \
+	      -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \
+	      -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+	      -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+	      -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
+	      -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+	      -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+	      -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+	      -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+	      -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+	      -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
+	      -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
+	      -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+	      -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+	      -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+	      -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+	      -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
+	      -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+	      -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+	      -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+	      -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+	      -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+	      -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+
+unitypes.h: unitypes.in.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(srcdir)/unitypes.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+
+uniwidth.h: uniwidth.in.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(srcdir)/uniwidth.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+	      -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
+	      -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
+	      -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
+	      -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
+	      -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
+	      -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
+	      -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
+	      -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
+	      -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
+	      -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
+	      -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
+	      -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
+	      -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
+	      -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
+	      -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
+	      -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
+	      -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
+	      -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
+	      -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
+	      -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
+	      -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
+	      -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
+	      -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
+	      -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
+	      -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
+	      -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
+	      -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
+	      -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
+	      -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
+	      -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
+	      -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
+	      -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
+	      -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
+	      -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
+	      -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
+	      < $(srcdir)/wchar.in.h | \
+	  sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+	      -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+	      -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+	      -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+	      -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+	      -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+	      -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+	      -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+	      -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+	      -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+	      -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+	      -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+	      -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+	      -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+	      -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+	      -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+	      -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+	      -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+	      -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+	      -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+	      -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+	      -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+	      -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+	      -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+	      -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+	      -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+	      -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+	      -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+	      -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+	      -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+	      -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
+	      -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
+	      -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
+	      -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
+	      -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+	      -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+	      -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+	      -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+	      -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+	      -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+	      -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+	      -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/wctype.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+mostlyclean-local: mostlyclean-generic
+	@for dir in '' $(MOSTLYCLEANDIRS); do \
+	  if test -n "$$dir" && test -d $$dir; then \
+	    echo "rmdir $$dir"; rmdir $$dir; \
+	  fi; \
+	done; \
+	:
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/lib/abitset.c b/lib/abitset.c
index 17c0a4a..5ffba83 100644
--- a/lib/abitset.c
+++ b/lib/abitset.c
@@ -1,10 +1,13 @@
 /* Array bitsets.
-   Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2003, 2006, 2009-2012 Free Software Foundation,
+   Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,12 +16,9 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "abitset.h"
 #include <stddef.h>
diff --git a/lib/abitset.h b/lib/abitset.h
index a22c919..ad858fa 100644
--- a/lib/abitset.h
+++ b/lib/abitset.h
@@ -1,20 +1,21 @@
 /* Functions to support abitsets.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _ABITSET_H
 #define _ABITSET_H
diff --git a/lib/alloca.in.h b/lib/alloca.in.h
new file mode 100644
index 0000000..d20f4b8
--- /dev/null
+++ b/lib/alloca.in.h
@@ -0,0 +1,63 @@
+/* Memory allocation on the stack.
+
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2012 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 3, 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, see
+   <http://www.gnu.org/licenses/>.
+  */
+
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+   means there is a real alloca function.  */
+#ifndef _GL_ALLOCA_H
+#define _GL_ALLOCA_H
+
+/* alloca (N) returns a pointer to N bytes of memory
+   allocated on the stack, which will last until the function returns.
+   Use of alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns,
+     - for huge N (say, N >= 65536) - you never know how large (or small)
+       the stack is, and when the stack cannot fulfill the memory allocation
+       request, the program just crashes.
+ */
+
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _AIX
+#  define alloca __alloca
+# elif defined _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# elif defined __DECC && defined __VMS
+#  define alloca __ALLOCA
+# elif defined __TANDEM && defined _TNS_E_TARGET
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *_alloca (unsigned short);
+#  pragma intrinsic (_alloca)
+#  define alloca _alloca
+# else
+#  include <stddef.h>
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */
diff --git a/lib/argmatch.c b/lib/argmatch.c
index 36d5845..a713364 100644
--- a/lib/argmatch.c
+++ b/lib/argmatch.c
@@ -1,12 +1,12 @@
 /* argmatch.c -- find a match for a string in an array
 
-   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2003, 2004, 2005 Free
-   Software Foundation, Inc.
+   Copyright (C) 1990, 1998-1999, 2001-2007, 2009-2012 Free Software
+   Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,15 +14,12 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by David MacKenzie <djm@ai.mit.edu>
    Modified by Akim Demaille <demaille@inf.enst.fr> */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 /* Specification.  */
 #include "argmatch.h"
@@ -36,7 +33,6 @@
 #define _(msgid) gettext (msgid)
 
 #include "error.h"
-#include "exit.h"
 #include "quotearg.h"
 #include "quote.h"
 
@@ -81,16 +77,16 @@
    synonyms, i.e., for
      "yes", "yop" -> 0
      "no", "nope" -> 1
-   "y" is a valid argument, for `0', and "n" for `1'.  */
+   "y" is a valid argument, for 0, and "n" for 1.  */
 
 ptrdiff_t
 argmatch (const char *arg, const char *const *arglist,
-	  const char *vallist, size_t valsize)
+          const char *vallist, size_t valsize)
 {
-  size_t i;			/* Temporary index in ARGLIST.  */
-  size_t arglen;		/* Length of ARG.  */
-  ptrdiff_t matchind = -1;	/* Index of first nonexact match.  */
-  bool ambiguous = false;	/* If true, multiple nonexact match(es).  */
+  size_t i;                     /* Temporary index in ARGLIST.  */
+  size_t arglen;                /* Length of ARG.  */
+  ptrdiff_t matchind = -1;      /* Index of first nonexact match.  */
+  bool ambiguous = false;       /* If true, multiple nonexact match(es).  */
 
   arglen = strlen (arg);
 
@@ -98,26 +94,26 @@
   for (i = 0; arglist[i]; i++)
     {
       if (!strncmp (arglist[i], arg, arglen))
-	{
-	  if (strlen (arglist[i]) == arglen)
-	    /* Exact match found.  */
-	    return i;
-	  else if (matchind == -1)
-	    /* First nonexact match found.  */
-	    matchind = i;
-	  else
-	    {
-	      /* Second nonexact match found.  */
-	      if (vallist == NULL
-		  || memcmp (vallist + valsize * matchind,
-			     vallist + valsize * i, valsize))
-		{
-		  /* There is a real ambiguity, or we could not
-		     disambiguate. */
-		  ambiguous = true;
-		}
-	    }
-	}
+        {
+          if (strlen (arglist[i]) == arglen)
+            /* Exact match found.  */
+            return i;
+          else if (matchind == -1)
+            /* First nonexact match found.  */
+            matchind = i;
+          else
+            {
+              /* Second nonexact match found.  */
+              if (vallist == NULL
+                  || memcmp (vallist + valsize * matchind,
+                             vallist + valsize * i, valsize))
+                {
+                  /* There is a real ambiguity, or we could not
+                     disambiguate. */
+                  ambiguous = true;
+                }
+            }
+        }
     }
   if (ambiguous)
     return -2;
@@ -134,11 +130,11 @@
 argmatch_invalid (const char *context, const char *value, ptrdiff_t problem)
 {
   char const *format = (problem == -1
-			? _("invalid argument %s for %s")
-			: _("ambiguous argument %s for %s"));
+                        ? _("invalid argument %s for %s")
+                        : _("ambiguous argument %s for %s"));
 
   error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value),
-	 quote_n (1, context));
+         quote_n (1, context));
 }
 
 /* List the valid arguments for argmatch.
@@ -147,24 +143,24 @@
    VALSIZE is the size of the elements of VALLIST */
 void
 argmatch_valid (const char *const *arglist,
-		const char *vallist, size_t valsize)
+                const char *vallist, size_t valsize)
 {
   size_t i;
   const char *last_val = NULL;
 
   /* We try to put synonyms on the same line.  The assumption is that
      synonyms follow each other */
-  fprintf (stderr, _("Valid arguments are:"));
+  fputs (_("Valid arguments are:"), stderr);
   for (i = 0; arglist[i]; i++)
     if ((i == 0)
-	|| memcmp (last_val, vallist + valsize * i, valsize))
+        || memcmp (last_val, vallist + valsize * i, valsize))
       {
-	fprintf (stderr, "\n  - `%s'", arglist[i]);
-	last_val = vallist + valsize * i;
+        fprintf (stderr, "\n  - %s", quote (arglist[i]));
+        last_val = vallist + valsize * i;
       }
     else
       {
-	fprintf (stderr, ", `%s'", arglist[i]);
+        fprintf (stderr, ", %s", quote (arglist[i]));
       }
   putc ('\n', stderr);
 }
@@ -177,9 +173,9 @@
 
 ptrdiff_t
 __xargmatch_internal (const char *context,
-		      const char *arg, const char *const *arglist,
-		      const char *vallist, size_t valsize,
-		      argmatch_exit_fn exit_fn)
+                      const char *arg, const char *const *arglist,
+                      const char *vallist, size_t valsize,
+                      argmatch_exit_fn exit_fn)
 {
   ptrdiff_t res = argmatch (arg, arglist, vallist, valsize);
   if (res >= 0)
@@ -198,8 +194,8 @@
    return the first corresponding argument in ARGLIST */
 const char *
 argmatch_to_argument (const char *value,
-		      const char *const *arglist,
-		      const char *vallist, size_t valsize)
+                      const char *const *arglist,
+                      const char *vallist, size_t valsize)
 {
   size_t i;
 
@@ -267,14 +263,14 @@
 
   if ((cp = getenv ("VERSION_CONTROL")))
     backup_type = XARGMATCH ("$VERSION_CONTROL", cp,
-			     backup_args, backup_vals);
+                             backup_args, backup_vals);
 
   if (argc == 2)
     backup_type = XARGMATCH (program_name, argv[1],
-			     backup_args, backup_vals);
+                             backup_args, backup_vals);
 
-  printf ("The version control is `%s'\n",
-	  ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals));
+  printf ("The version control is '%s'\n",
+          ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals));
 
   return 0;
 }
diff --git a/lib/argmatch.h b/lib/argmatch.h
index f2dfe59..7e88696 100644
--- a/lib/argmatch.h
+++ b/lib/argmatch.h
@@ -1,12 +1,12 @@
 /* argmatch.h -- definitions and prototypes for argmatch.c
 
-   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2004, 2005 Free Software
+   Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 2009-2012 Free Software
    Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,8 +14,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by David MacKenzie <djm@ai.mit.edu>
    Modified by Akim Demaille <demaille@inf.enst.fr> */
@@ -41,21 +40,21 @@
    to the same values in VALLIST).  */
 
 ptrdiff_t argmatch (char const *arg, char const *const *arglist,
-		    char const *vallist, size_t valsize);
+                    char const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE;
 
 # define ARGMATCH(Arg, Arglist, Vallist) \
   argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist))
 
 /* xargmatch calls this function when it fails.  This function should not
    return.  By default, this is a function that calls ARGMATCH_DIE which
-   in turn defaults to `exit (exit_failure)'.  */
+   in turn defaults to 'exit (exit_failure)'.  */
 typedef void (*argmatch_exit_fn) (void);
 extern argmatch_exit_fn argmatch_die;
 
 /* Report on stderr why argmatch failed.  Report correct values. */
 
 void argmatch_invalid (char const *context, char const *value,
-		       ptrdiff_t problem);
+                       ptrdiff_t problem);
 
 /* Left for compatibility with the old name invalid_arg */
 
@@ -67,37 +66,38 @@
 /* Report on stderr the list of possible arguments.  */
 
 void argmatch_valid (char const *const *arglist,
-		     char const *vallist, size_t valsize);
+                     char const *vallist, size_t valsize);
 
 # define ARGMATCH_VALID(Arglist, Vallist) \
   argmatch_valid (Arglist, (char const *) (Vallist), sizeof *(Vallist))
 
 
 
-/* Same as argmatch, but upon failure, reports a explanation on the
-   failure, and exits using the function EXIT_FN. */
+/* Same as argmatch, but upon failure, report an explanation of the
+   failure, and exit using the function EXIT_FN. */
 
 ptrdiff_t __xargmatch_internal (char const *context,
-				char const *arg, char const *const *arglist,
-				char const *vallist, size_t valsize,
-				argmatch_exit_fn exit_fn);
+                                char const *arg, char const *const *arglist,
+                                char const *vallist, size_t valsize,
+                                argmatch_exit_fn exit_fn);
 
 /* Programmer friendly interface to __xargmatch_internal. */
 
-# define XARGMATCH(Context, Arg, Arglist, Vallist)		\
-  ((Vallist) [__xargmatch_internal (Context, Arg, Arglist,	\
-				    (char const *) (Vallist),	\
-				    sizeof *(Vallist),		\
-				    argmatch_die)])
+# define XARGMATCH(Context, Arg, Arglist, Vallist)              \
+  ((Vallist) [__xargmatch_internal (Context, Arg, Arglist,      \
+                                    (char const *) (Vallist),   \
+                                    sizeof *(Vallist),          \
+                                    argmatch_die)])
 
 /* Convert a value into a corresponding argument. */
 
 char const *argmatch_to_argument (char const *value,
-				  char const *const *arglist,
-				  char const *vallist, size_t valsize);
+                                  char const *const *arglist,
+                                  char const *vallist, size_t valsize)
+  _GL_ATTRIBUTE_PURE;
 
-# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist)			\
-  argmatch_to_argument (Value, Arglist,					\
-			(char const *) (Vallist), sizeof *(Vallist))
+# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist)                  \
+  argmatch_to_argument (Value, Arglist,                                 \
+                        (char const *) (Vallist), sizeof *(Vallist))
 
 #endif /* ARGMATCH_H_ */
diff --git a/lib/asnprintf.c b/lib/asnprintf.c
new file mode 100644
index 0000000..f6f70c9
--- /dev/null
+++ b/lib/asnprintf.c
@@ -0,0 +1,34 @@
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "vasnprintf.h"
+
+#include <stdarg.h>
+
+char *
+asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+{
+  va_list args;
+  char *result;
+
+  va_start (args, format);
+  result = vasnprintf (resultbuf, lengthp, format, args);
+  va_end (args);
+  return result;
+}
diff --git a/lib/basename-lgpl.c b/lib/basename-lgpl.c
new file mode 100644
index 0000000..43ef8c2
--- /dev/null
+++ b/lib/basename-lgpl.c
@@ -0,0 +1,75 @@
+/* basename.c -- return the last element in a file name
+
+   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "dirname.h"
+
+#include <string.h>
+
+/* Return the address of the last file name component of NAME.  If
+   NAME has no relative file name components because it is a file
+   system root, return the empty string.  */
+
+char *
+last_component (char const *name)
+{
+  char const *base = name + FILE_SYSTEM_PREFIX_LEN (name);
+  char const *p;
+  bool saw_slash = false;
+
+  while (ISSLASH (*base))
+    base++;
+
+  for (p = base; *p; p++)
+    {
+      if (ISSLASH (*p))
+        saw_slash = true;
+      else if (saw_slash)
+        {
+          base = p;
+          saw_slash = false;
+        }
+    }
+
+  return (char *) base;
+}
+
+/* Return the length of the basename NAME.  Typically NAME is the
+   value returned by base_name or last_component.  Act like strlen
+   (NAME), except omit all trailing slashes.  */
+
+size_t
+base_len (char const *name)
+{
+  size_t len;
+  size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name);
+
+  for (len = strlen (name);  1 < len && ISSLASH (name[len - 1]);  len--)
+    continue;
+
+  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1
+      && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2])
+    return 2;
+
+  if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len
+      && len == prefix_len && ISSLASH (name[prefix_len]))
+    return prefix_len + 1;
+
+  return len;
+}
diff --git a/lib/basename.c b/lib/basename.c
index 5cc97cd..5f18ffd 100644
--- a/lib/basename.c
+++ b/lib/basename.c
@@ -1,12 +1,12 @@
 /* basename.c -- return the last element in a file name
 
-   Copyright (C) 1990, 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free
-   Software Foundation, Inc.
+   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2012 Free Software
+   Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,66 +14,45 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "dirname.h"
+
 #include <string.h>
-
-/* In general, we can't use the builtin `basename' function if available,
-   since it has different meanings in different environments.
-   In some environments the builtin `basename' modifies its argument.
-
-   Return the address of the last file name component of NAME.  If
-   NAME has no file name components because it is all slashes, return
-   NAME if it is empty, the address of its last slash otherwise.  */
+#include "xalloc.h"
+#include "xstrndup.h"
 
 char *
 base_name (char const *name)
 {
-  char const *base = name + FILE_SYSTEM_PREFIX_LEN (name);
-  char const *p;
+  char const *base = last_component (name);
+  size_t length;
 
-  for (p = base; *p; p++)
+  /* If there is no last component, then name is a file system root or the
+     empty string.  */
+  if (! *base)
+    return xstrndup (name, base_len (name));
+
+  /* Collapse a sequence of trailing slashes into one.  */
+  length = base_len (base);
+  if (ISSLASH (base[length]))
+    length++;
+
+  /* On systems with drive letters, "a/b:c" must return "./b:c" rather
+     than "b:c" to avoid confusion with a drive letter.  On systems
+     with pure POSIX semantics, this is not an issue.  */
+  if (FILE_SYSTEM_PREFIX_LEN (base))
     {
-      if (ISSLASH (*p))
-	{
-	  /* Treat multiple adjacent slashes like a single slash.  */
-	  do p++;
-	  while (ISSLASH (*p));
-
-	  /* If the file name ends in slash, use the trailing slash as
-	     the basename if no non-slashes have been found.  */
-	  if (! *p)
-	    {
-	      if (ISSLASH (*base))
-		base = p - 1;
-	      break;
-	    }
-
-	  /* *P is a non-slash preceded by a slash.  */
-	  base = p;
-	}
+      char *p = xmalloc (length + 3);
+      p[0] = '.';
+      p[1] = '/';
+      memcpy (p + 2, base, length);
+      p[length + 2] = '\0';
+      return p;
     }
 
-  return (char *) base;
-}
-
-/* Return the length of of the basename NAME.  Typically NAME is the
-   value returned by base_name.  Act like strlen (NAME), except omit
-   redundant trailing slashes.  */
-
-size_t
-base_len (char const *name)
-{
-  size_t len;
-
-  for (len = strlen (name);  1 < len && ISSLASH (name[len - 1]);  len--)
-    continue;
-
-  return len;
+  /* Finally, copy the basename.  */
+  return xstrndup (base, length);
 }
diff --git a/lib/bbitset.h b/lib/bbitset.h
index 956fc5c..f819b17 100644
--- a/lib/bbitset.h
+++ b/lib/bbitset.h
@@ -1,20 +1,22 @@
 /* Base bitset stuff.
-   Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2004, 2006, 2009-2012 Free Software Foundation,
+   Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _BBITSET_H
 #define _BBITSET_H
diff --git a/lib/binary-io.c b/lib/binary-io.c
new file mode 100644
index 0000000..8bbdb44
--- /dev/null
+++ b/lib/binary-io.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define BINARY_IO_INLINE _GL_EXTERN_INLINE
+#include "binary-io.h"
diff --git a/lib/binary-io.h b/lib/binary-io.h
new file mode 100644
index 0000000..0f376e3
--- /dev/null
+++ b/lib/binary-io.h
@@ -0,0 +1,72 @@
+/* Binary mode I/O.
+   Copyright (C) 2001, 2003, 2005, 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BINARY_H
+#define _BINARY_H
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is guaranteed by the gnulib <fcntl.h>. */
+#include <fcntl.h>
+
+/* The MSVC7 <stdio.h> doesn't like to be included after '#define fileno ...',
+   so we include it here first.  */
+#include <stdio.h>
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef BINARY_IO_INLINE
+# define BINARY_IO_INLINE _GL_INLINE
+#endif
+
+/* set_binary_mode (fd, mode)
+   sets the binary/text I/O mode of file descriptor fd to the given mode
+   (must be O_BINARY or O_TEXT) and returns the previous mode.  */
+#if O_BINARY
+# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__
+#  include <io.h> /* declares setmode() */
+#  define set_binary_mode setmode
+# else
+#  define set_binary_mode _setmode
+#  undef fileno
+#  define fileno _fileno
+# endif
+#else
+  /* On reasonable systems, binary I/O is the only choice.  */
+  /* Use a function rather than a macro, to avoid gcc warnings
+     "warning: statement with no effect".  */
+BINARY_IO_INLINE int
+set_binary_mode (int fd, int mode)
+{
+  (void) fd;
+  (void) mode;
+  return O_BINARY;
+}
+#endif
+
+/* SET_BINARY (fd);
+   changes the file descriptor fd to perform binary I/O.  */
+#ifdef __DJGPP__
+# include <unistd.h> /* declares isatty() */
+  /* Avoid putting stdin/stdout in binary mode if it is connected to
+     the console, because that would make it impossible for the user
+     to interrupt the program through Ctrl-C or Ctrl-Break.  */
+# define SET_BINARY(fd) ((void) (!isatty (fd) ? (set_binary_mode (fd, O_BINARY), 0) : 0))
+#else
+# define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY))
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _BINARY_H */
diff --git a/lib/bitrotate.c b/lib/bitrotate.c
new file mode 100644
index 0000000..a8f6028
--- /dev/null
+++ b/lib/bitrotate.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define BITROTATE_INLINE _GL_EXTERN_INLINE
+#include "bitrotate.h"
diff --git a/lib/bitrotate.h b/lib/bitrotate.h
new file mode 100644
index 0000000..8a67558
--- /dev/null
+++ b/lib/bitrotate.h
@@ -0,0 +1,133 @@
+/* bitrotate.h - Rotate bits in integers
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Simon Josefsson <simon@josefsson.org>, 2008. */
+
+#ifndef _GL_BITROTATE_H
+#define _GL_BITROTATE_H
+
+#include <limits.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef BITROTATE_INLINE
+# define BITROTATE_INLINE _GL_INLINE
+#endif
+
+#ifdef UINT64_MAX
+/* Given an unsigned 64-bit argument X, return the value corresponding
+   to rotating the bits N steps to the left.  N must be between 1 and
+   63 inclusive. */
+BITROTATE_INLINE uint64_t
+rotl64 (uint64_t x, int n)
+{
+  return ((x << n) | (x >> (64 - n))) & UINT64_MAX;
+}
+
+/* Given an unsigned 64-bit argument X, return the value corresponding
+   to rotating the bits N steps to the right.  N must be between 1 to
+   63 inclusive.*/
+BITROTATE_INLINE uint64_t
+rotr64 (uint64_t x, int n)
+{
+  return ((x >> n) | (x << (64 - n))) & UINT64_MAX;
+}
+#endif
+
+/* Given an unsigned 32-bit argument X, return the value corresponding
+   to rotating the bits N steps to the left.  N must be between 1 and
+   31 inclusive. */
+BITROTATE_INLINE uint32_t
+rotl32 (uint32_t x, int n)
+{
+  return ((x << n) | (x >> (32 - n))) & UINT32_MAX;
+}
+
+/* Given an unsigned 32-bit argument X, return the value corresponding
+   to rotating the bits N steps to the right.  N must be between 1 to
+   31 inclusive.*/
+BITROTATE_INLINE uint32_t
+rotr32 (uint32_t x, int n)
+{
+  return ((x >> n) | (x << (32 - n))) & UINT32_MAX;
+}
+
+/* Given a size_t argument X, return the value corresponding
+   to rotating the bits N steps to the left.  N must be between 1 and
+   (CHAR_BIT * sizeof (size_t) - 1) inclusive.  */
+BITROTATE_INLINE size_t
+rotl_sz (size_t x, int n)
+{
+  return ((x << n) | (x >> ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX;
+}
+
+/* Given a size_t argument X, return the value corresponding
+   to rotating the bits N steps to the right.  N must be between 1 to
+   (CHAR_BIT * sizeof (size_t) - 1) inclusive.  */
+BITROTATE_INLINE size_t
+rotr_sz (size_t x, int n)
+{
+  return ((x >> n) | (x << ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX;
+}
+
+/* Given an unsigned 16-bit argument X, return the value corresponding
+   to rotating the bits N steps to the left.  N must be between 1 to
+   15 inclusive, but on most relevant targets N can also be 0 and 16
+   because 'int' is at least 32 bits and the arguments must widen
+   before shifting. */
+BITROTATE_INLINE uint16_t
+rotl16 (uint16_t x, int n)
+{
+  return ((x << n) | (x >> (16 - n))) & UINT16_MAX;
+}
+
+/* Given an unsigned 16-bit argument X, return the value corresponding
+   to rotating the bits N steps to the right.  N must be in 1 to 15
+   inclusive, but on most relevant targets N can also be 0 and 16
+   because 'int' is at least 32 bits and the arguments must widen
+   before shifting. */
+BITROTATE_INLINE uint16_t
+rotr16 (uint16_t x, int n)
+{
+  return ((x >> n) | (x << (16 - n))) & UINT16_MAX;
+}
+
+/* Given an unsigned 8-bit argument X, return the value corresponding
+   to rotating the bits N steps to the left.  N must be between 1 to 7
+   inclusive, but on most relevant targets N can also be 0 and 8
+   because 'int' is at least 32 bits and the arguments must widen
+   before shifting. */
+BITROTATE_INLINE uint8_t
+rotl8 (uint8_t x, int n)
+{
+  return ((x << n) | (x >> (8 - n))) & UINT8_MAX;
+}
+
+/* Given an unsigned 8-bit argument X, return the value corresponding
+   to rotating the bits N steps to the right.  N must be in 1 to 7
+   inclusive, but on most relevant targets N can also be 0 and 8
+   because 'int' is at least 32 bits and the arguments must widen
+   before shifting. */
+BITROTATE_INLINE uint8_t
+rotr8 (uint8_t x, int n)
+{
+  return ((x >> n) | (x << (8 - n))) & UINT8_MAX;
+}
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_BITROTATE_H */
diff --git a/lib/bitset.c b/lib/bitset.c
index 2924567..d64d5f8 100644
--- a/lib/bitset.c
+++ b/lib/bitset.c
@@ -1,10 +1,12 @@
 /* General bitsets.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,16 +15,14 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
+
+#include "bitset.h"
 
 #include <stdlib.h>
 #include <string.h>
-#include "bitset.h"
 #include "abitset.h"
 #include "lbitset.h"
 #include "ebitset.h"
diff --git a/lib/bitset.h b/lib/bitset.h
index 45c8818..fbc7b77 100644
--- a/lib/bitset.h
+++ b/lib/bitset.h
@@ -1,20 +1,21 @@
 /* Generic bitsets.
-   Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2004, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _BITSET_H
 #define _BITSET_H
diff --git a/lib/bitset_stats.c b/lib/bitset_stats.c
index 7b7fb34..bde9b98 100644
--- a/lib/bitset_stats.c
+++ b/lib/bitset_stats.c
@@ -1,10 +1,12 @@
 /* Bitset statistics.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,8 +15,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* This file is a wrapper bitset implementation for the other bitset
    implementations.  It provides bitset compatibility checking and
@@ -23,16 +24,15 @@
    operations get vectored through here and we then call the appropriate
    routines.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
+
+#include "bitset_stats.h"
 
 #include "bbitset.h"
 #include "abitset.h"
 #include "ebitset.h"
 #include "lbitset.h"
 #include "vbitset.h"
-#include "bitset_stats.h"
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -253,15 +253,15 @@
   if (file)
     {
       if (fread (&bitset_stats_info_data, sizeof (bitset_stats_info_data),
-		 1, file) != 1)
-	{
-	  if (ferror (file))
-	    perror (_("Could not read stats file."));
-	  else
-	    fprintf (stderr, _("Bad stats file size.\n"));
-	}
+                 1, file) != 1)
+        {
+          if (ferror (file))
+            perror (_("cannot read stats file"));
+          else
+            fprintf (stderr, _("bad stats file size\n"));
+        }
       if (fclose (file) != 0)
-	perror (_("Could not read stats file."));
+        perror (_("cannot read stats file"));
     }
   bitset_stats_info_data.runs++;
 }
@@ -283,13 +283,13 @@
   if (file)
     {
       if (fwrite (&bitset_stats_info_data, sizeof (bitset_stats_info_data),
-		  1, file) != 1)
-	perror (_("Could not write stats file."));
+                  1, file) != 1)
+        perror (_("cannot write stats file"));
       if (fclose (file) != 0)
-	perror (_("Could not write stats file."));
+        perror (_("cannot write stats file"));
     }
   else
-    perror (_("Could not open stats file for writing."));
+    perror (_("cannot open stats file for writing"));
 }
 
 
@@ -576,11 +576,9 @@
   bitset_bindex tmp;
   bitset_bindex size;
   bitset_bindex i;
-  enum bitset_type type;
 
   count = BITSET_LIST_ (bset->s.bset, list, num, next);
 
-  type = BITSET_TYPE_ (bset->s.bset);
   BITSET_STATS_LISTS_INC (bset->s.bset);
 
   /* Log histogram of number of set bits.  */
diff --git a/lib/bitset_stats.h b/lib/bitset_stats.h
index 6378c5c..96efd56 100644
--- a/lib/bitset_stats.h
+++ b/lib/bitset_stats.h
@@ -1,20 +1,21 @@
 /* Functions to support bitset statistics.
-   Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2004, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _BITSET_STATS_H
 #define _BITSET_STATS_H
diff --git a/lib/bitsetv-print.c b/lib/bitsetv-print.c
index 0083871..92b617e 100644
--- a/lib/bitsetv-print.c
+++ b/lib/bitsetv-print.c
@@ -1,9 +1,11 @@
 /* Bitset vectors.
-   Copyright (C) 2001, 2002, 2004, 2006 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   Copyright (C) 2001-2002, 2004, 2006, 2009-2012 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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -12,15 +14,13 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
+
+#include "bitsetv-print.h"
 
 #include <stdlib.h>
-#include "bitsetv-print.h"
 
 /*--------------------------------------------------------.
 | Display the MATRIX array of SIZE bitsets of size SIZE.  |
diff --git a/lib/bitsetv-print.h b/lib/bitsetv-print.h
index e54be68..27736ef 100644
--- a/lib/bitsetv-print.h
+++ b/lib/bitsetv-print.h
@@ -1,20 +1,21 @@
 /* Bitset vectors.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Akim Demaille (akim@freefriends.org).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _BITSETV_PRINT_H
 #define _BITSETV_PRINT_H
diff --git a/lib/bitsetv.c b/lib/bitsetv.c
index ae79853..e3bafb9 100644
--- a/lib/bitsetv.c
+++ b/lib/bitsetv.c
@@ -1,9 +1,11 @@
 /* Bitset vectors.
-   Copyright (C) 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   Copyright (C) 2001-2002, 2004-2006, 2009-2012 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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -12,15 +14,13 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
+
+#include "bitsetv.h"
 
 #include <stdlib.h>
-#include "bitsetv.h"
 
 
 /* Create a vector of N_VECS bitsets, each of N_BITS, and of
diff --git a/lib/bitsetv.h b/lib/bitsetv.h
index 652f9e3..34e1604 100644
--- a/lib/bitsetv.h
+++ b/lib/bitsetv.h
@@ -1,20 +1,21 @@
 /* Bitset vectors.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _BITSETV_H
 #define _BITSETV_H
diff --git a/lib/c-ctype.c b/lib/c-ctype.c
new file mode 100644
index 0000000..952d7a8
--- /dev/null
+++ b/lib/c-ctype.c
@@ -0,0 +1,395 @@
+/* Character handling in C locale.
+
+   Copyright 2000-2003, 2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#define NO_C_CTYPE_MACROS
+#include "c-ctype.h"
+
+/* The function isascii is not locale dependent. Its use in EBCDIC is
+   questionable. */
+bool
+c_isascii (int c)
+{
+  return (c >= 0x00 && c <= 0x7f);
+}
+
+bool
+c_isalnum (int c)
+{
+#if C_CTYPE_CONSECUTIVE_DIGITS \
+    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+  return ((c >= '0' && c <= '9')
+          || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
+#else
+  return ((c >= '0' && c <= '9')
+          || (c >= 'A' && c <= 'Z')
+          || (c >= 'a' && c <= 'z'));
+#endif
+#else
+  switch (c)
+    {
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isalpha (int c)
+{
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+  return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
+#else
+  return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
+#endif
+#else
+  switch (c)
+    {
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isblank (int c)
+{
+  return (c == ' ' || c == '\t');
+}
+
+bool
+c_iscntrl (int c)
+{
+#if C_CTYPE_ASCII
+  return ((c & ~0x1f) == 0 || c == 0x7f);
+#else
+  switch (c)
+    {
+    case ' ': case '!': case '"': case '#': case '$': case '%':
+    case '&': case '\'': case '(': case ')': case '*': case '+':
+    case ',': case '-': case '.': case '/':
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case ':': case ';': case '<': case '=': case '>': case '?':
+    case '@':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case '[': case '\\': case ']': case '^': case '_': case '`':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+    case '{': case '|': case '}': case '~':
+      return 0;
+    default:
+      return 1;
+    }
+#endif
+}
+
+bool
+c_isdigit (int c)
+{
+#if C_CTYPE_CONSECUTIVE_DIGITS
+  return (c >= '0' && c <= '9');
+#else
+  switch (c)
+    {
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_islower (int c)
+{
+#if C_CTYPE_CONSECUTIVE_LOWERCASE
+  return (c >= 'a' && c <= 'z');
+#else
+  switch (c)
+    {
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isgraph (int c)
+{
+#if C_CTYPE_ASCII
+  return (c >= '!' && c <= '~');
+#else
+  switch (c)
+    {
+    case '!': case '"': case '#': case '$': case '%': case '&':
+    case '\'': case '(': case ')': case '*': case '+': case ',':
+    case '-': case '.': case '/':
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case ':': case ';': case '<': case '=': case '>': case '?':
+    case '@':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case '[': case '\\': case ']': case '^': case '_': case '`':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+    case '{': case '|': case '}': case '~':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isprint (int c)
+{
+#if C_CTYPE_ASCII
+  return (c >= ' ' && c <= '~');
+#else
+  switch (c)
+    {
+    case ' ': case '!': case '"': case '#': case '$': case '%':
+    case '&': case '\'': case '(': case ')': case '*': case '+':
+    case ',': case '-': case '.': case '/':
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case ':': case ';': case '<': case '=': case '>': case '?':
+    case '@':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case '[': case '\\': case ']': case '^': case '_': case '`':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+    case '{': case '|': case '}': case '~':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_ispunct (int c)
+{
+#if C_CTYPE_ASCII
+  return ((c >= '!' && c <= '~')
+          && !((c >= '0' && c <= '9')
+               || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
+#else
+  switch (c)
+    {
+    case '!': case '"': case '#': case '$': case '%': case '&':
+    case '\'': case '(': case ')': case '*': case '+': case ',':
+    case '-': case '.': case '/':
+    case ':': case ';': case '<': case '=': case '>': case '?':
+    case '@':
+    case '[': case '\\': case ']': case '^': case '_': case '`':
+    case '{': case '|': case '}': case '~':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isspace (int c)
+{
+  return (c == ' ' || c == '\t'
+          || c == '\n' || c == '\v' || c == '\f' || c == '\r');
+}
+
+bool
+c_isupper (int c)
+{
+#if C_CTYPE_CONSECUTIVE_UPPERCASE
+  return (c >= 'A' && c <= 'Z');
+#else
+  switch (c)
+    {
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isxdigit (int c)
+{
+#if C_CTYPE_CONSECUTIVE_DIGITS \
+    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+  return ((c >= '0' && c <= '9')
+          || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
+#else
+  return ((c >= '0' && c <= '9')
+          || (c >= 'A' && c <= 'F')
+          || (c >= 'a' && c <= 'f'));
+#endif
+#else
+  switch (c)
+    {
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+int
+c_tolower (int c)
+{
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+  return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
+#else
+  switch (c)
+    {
+    case 'A': return 'a';
+    case 'B': return 'b';
+    case 'C': return 'c';
+    case 'D': return 'd';
+    case 'E': return 'e';
+    case 'F': return 'f';
+    case 'G': return 'g';
+    case 'H': return 'h';
+    case 'I': return 'i';
+    case 'J': return 'j';
+    case 'K': return 'k';
+    case 'L': return 'l';
+    case 'M': return 'm';
+    case 'N': return 'n';
+    case 'O': return 'o';
+    case 'P': return 'p';
+    case 'Q': return 'q';
+    case 'R': return 'r';
+    case 'S': return 's';
+    case 'T': return 't';
+    case 'U': return 'u';
+    case 'V': return 'v';
+    case 'W': return 'w';
+    case 'X': return 'x';
+    case 'Y': return 'y';
+    case 'Z': return 'z';
+    default: return c;
+    }
+#endif
+}
+
+int
+c_toupper (int c)
+{
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+  return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
+#else
+  switch (c)
+    {
+    case 'a': return 'A';
+    case 'b': return 'B';
+    case 'c': return 'C';
+    case 'd': return 'D';
+    case 'e': return 'E';
+    case 'f': return 'F';
+    case 'g': return 'G';
+    case 'h': return 'H';
+    case 'i': return 'I';
+    case 'j': return 'J';
+    case 'k': return 'K';
+    case 'l': return 'L';
+    case 'm': return 'M';
+    case 'n': return 'N';
+    case 'o': return 'O';
+    case 'p': return 'P';
+    case 'q': return 'Q';
+    case 'r': return 'R';
+    case 's': return 'S';
+    case 't': return 'T';
+    case 'u': return 'U';
+    case 'v': return 'V';
+    case 'w': return 'W';
+    case 'x': return 'X';
+    case 'y': return 'Y';
+    case 'z': return 'Z';
+    default: return c;
+    }
+#endif
+}
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
new file mode 100644
index 0000000..0b31309
--- /dev/null
+++ b/lib/c-ctype.h
@@ -0,0 +1,294 @@
+/* Character handling in C locale.
+
+   These functions work like the corresponding functions in <ctype.h>,
+   except that they have the C (POSIX) locale hardwired, whereas the
+   <ctype.h> functions' behaviour depends on the current locale set via
+   setlocale.
+
+   Copyright (C) 2000-2003, 2006, 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef C_CTYPE_H
+#define C_CTYPE_H
+
+#include <stdbool.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* The functions defined in this file assume the "C" locale and a character
+   set without diacritics (ASCII-US or EBCDIC-US or something like that).
+   Even if the "C" locale on a particular system is an extension of the ASCII
+   character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
+   is ISO-8859-1), the functions in this file recognize only the ASCII
+   characters.  */
+
+
+/* Check whether the ASCII optimizations apply. */
+
+/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that
+   '0', '1', ..., '9' have consecutive integer values.  */
+#define C_CTYPE_CONSECUTIVE_DIGITS 1
+
+#if ('A' <= 'Z') \
+    && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \
+    && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \
+    && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \
+    && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \
+    && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \
+    && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \
+    && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \
+    && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \
+    && ('Y' + 1 == 'Z')
+#define C_CTYPE_CONSECUTIVE_UPPERCASE 1
+#endif
+
+#if ('a' <= 'z') \
+    && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \
+    && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \
+    && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \
+    && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \
+    && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \
+    && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \
+    && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \
+    && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \
+    && ('y' + 1 == 'z')
+#define C_CTYPE_CONSECUTIVE_LOWERCASE 1
+#endif
+
+#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
+/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
+   Testing the value of '\n' and '\r' is not relevant.  */
+#define C_CTYPE_ASCII 1
+#endif
+
+
+/* Function declarations. */
+
+/* Unlike the functions in <ctype.h>, which require an argument in the range
+   of the 'unsigned char' type, the functions here operate on values that are
+   in the 'unsigned char' range or in the 'char' range.  In other words,
+   when you have a 'char' value, you need to cast it before using it as
+   argument to a <ctype.h> function:
+
+         const char *s = ...;
+         if (isalpha ((unsigned char) *s)) ...
+
+   but you don't need to cast it for the functions defined in this file:
+
+         const char *s = ...;
+         if (c_isalpha (*s)) ...
+ */
+
+extern bool c_isascii (int c) _GL_ATTRIBUTE_CONST; /* not locale dependent */
+
+extern bool c_isalnum (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isalpha (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isblank (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_iscntrl (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isdigit (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_islower (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isgraph (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isprint (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_ispunct (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isspace (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isupper (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isxdigit (int c) _GL_ATTRIBUTE_CONST;
+
+extern int c_tolower (int c) _GL_ATTRIBUTE_CONST;
+extern int c_toupper (int c) _GL_ATTRIBUTE_CONST;
+
+
+#if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS
+
+/* ASCII optimizations. */
+
+#undef c_isascii
+#define c_isascii(c) \
+  ({ int __c = (c); \
+     (__c >= 0x00 && __c <= 0x7f); \
+   })
+
+#if C_CTYPE_CONSECUTIVE_DIGITS \
+    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+#undef c_isalnum
+#define c_isalnum(c) \
+  ({ int __c = (c); \
+     ((__c >= '0' && __c <= '9') \
+      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \
+   })
+#else
+#undef c_isalnum
+#define c_isalnum(c) \
+  ({ int __c = (c); \
+     ((__c >= '0' && __c <= '9') \
+      || (__c >= 'A' && __c <= 'Z') \
+      || (__c >= 'a' && __c <= 'z')); \
+   })
+#endif
+#endif
+
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+#undef c_isalpha
+#define c_isalpha(c) \
+  ({ int __c = (c); \
+     ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \
+   })
+#else
+#undef c_isalpha
+#define c_isalpha(c) \
+  ({ int __c = (c); \
+     ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \
+   })
+#endif
+#endif
+
+#undef c_isblank
+#define c_isblank(c) \
+  ({ int __c = (c); \
+     (__c == ' ' || __c == '\t'); \
+   })
+
+#if C_CTYPE_ASCII
+#undef c_iscntrl
+#define c_iscntrl(c) \
+  ({ int __c = (c); \
+     ((__c & ~0x1f) == 0 || __c == 0x7f); \
+   })
+#endif
+
+#if C_CTYPE_CONSECUTIVE_DIGITS
+#undef c_isdigit
+#define c_isdigit(c) \
+  ({ int __c = (c); \
+     (__c >= '0' && __c <= '9'); \
+   })
+#endif
+
+#if C_CTYPE_CONSECUTIVE_LOWERCASE
+#undef c_islower
+#define c_islower(c) \
+  ({ int __c = (c); \
+     (__c >= 'a' && __c <= 'z'); \
+   })
+#endif
+
+#if C_CTYPE_ASCII
+#undef c_isgraph
+#define c_isgraph(c) \
+  ({ int __c = (c); \
+     (__c >= '!' && __c <= '~'); \
+   })
+#endif
+
+#if C_CTYPE_ASCII
+#undef c_isprint
+#define c_isprint(c) \
+  ({ int __c = (c); \
+     (__c >= ' ' && __c <= '~'); \
+   })
+#endif
+
+#if C_CTYPE_ASCII
+#undef c_ispunct
+#define c_ispunct(c) \
+  ({ int _c = (c); \
+     (c_isgraph (_c) && ! c_isalnum (_c)); \
+   })
+#endif
+
+#undef c_isspace
+#define c_isspace(c) \
+  ({ int __c = (c); \
+     (__c == ' ' || __c == '\t' \
+      || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \
+   })
+
+#if C_CTYPE_CONSECUTIVE_UPPERCASE
+#undef c_isupper
+#define c_isupper(c) \
+  ({ int __c = (c); \
+     (__c >= 'A' && __c <= 'Z'); \
+   })
+#endif
+
+#if C_CTYPE_CONSECUTIVE_DIGITS \
+    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+#undef c_isxdigit
+#define c_isxdigit(c) \
+  ({ int __c = (c); \
+     ((__c >= '0' && __c <= '9') \
+      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \
+   })
+#else
+#undef c_isxdigit
+#define c_isxdigit(c) \
+  ({ int __c = (c); \
+     ((__c >= '0' && __c <= '9') \
+      || (__c >= 'A' && __c <= 'F') \
+      || (__c >= 'a' && __c <= 'f')); \
+   })
+#endif
+#endif
+
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#undef c_tolower
+#define c_tolower(c) \
+  ({ int __c = (c); \
+     (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \
+   })
+#undef c_toupper
+#define c_toupper(c) \
+  ({ int __c = (c); \
+     (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \
+   })
+#endif
+
+#endif /* optimizing for speed */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* C_CTYPE_H */
diff --git a/lib/c-strcase.h b/lib/c-strcase.h
new file mode 100644
index 0000000..fdef238
--- /dev/null
+++ b/lib/c-strcase.h
@@ -0,0 +1,56 @@
+/* Case-insensitive string comparison functions in C locale.
+   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef C_STRCASE_H
+#define C_STRCASE_H
+
+#include <stddef.h>
+
+
+/* The functions defined in this file assume the "C" locale and a character
+   set without diacritics (ASCII-US or EBCDIC-US or something like that).
+   Even if the "C" locale on a particular system is an extension of the ASCII
+   character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
+   is ISO-8859-1), the functions in this file recognize only the ASCII
+   characters.  More precisely, one of the string arguments must be an ASCII
+   string; the other one can also contain non-ASCII characters (but then
+   the comparison result will be nonzero).  */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Compare strings S1 and S2, ignoring case, returning less than, equal to or
+   greater than zero if S1 is lexicographically less than, equal to or greater
+   than S2.  */
+extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE;
+
+/* Compare no more than N characters of strings S1 and S2, ignoring case,
+   returning less than, equal to or greater than zero if S1 is
+   lexicographically less than, equal to or greater than S2.  */
+extern int c_strncasecmp (const char *s1, const char *s2, size_t n)
+  _GL_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* C_STRCASE_H */
diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c
new file mode 100644
index 0000000..d8332ca
--- /dev/null
+++ b/lib/c-strcasecmp.c
@@ -0,0 +1,56 @@
+/* c-strcasecmp.c -- case insensitive string comparator in C locale
+   Copyright (C) 1998-1999, 2005-2006, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "c-strcase.h"
+
+#include <limits.h>
+
+#include "c-ctype.h"
+
+int
+c_strcasecmp (const char *s1, const char *s2)
+{
+  register const unsigned char *p1 = (const unsigned char *) s1;
+  register const unsigned char *p2 = (const unsigned char *) s2;
+  unsigned char c1, c2;
+
+  if (p1 == p2)
+    return 0;
+
+  do
+    {
+      c1 = c_tolower (*p1);
+      c2 = c_tolower (*p2);
+
+      if (c1 == '\0')
+        break;
+
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  if (UCHAR_MAX <= INT_MAX)
+    return c1 - c2;
+  else
+    /* On machines where 'char' and 'int' are types of the same size, the
+       difference of two 'unsigned char' values - including the sign bit -
+       doesn't fit in an 'int'.  */
+    return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
+}
diff --git a/lib/c-strcaseeq.h b/lib/c-strcaseeq.h
new file mode 100644
index 0000000..5c4bdff
--- /dev/null
+++ b/lib/c-strcaseeq.h
@@ -0,0 +1,184 @@
+/* Optimized case-insensitive string comparison in C locale.
+   Copyright (C) 2001-2002, 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+#include "c-strcase.h"
+#include "c-ctype.h"
+
+/* STRCASEEQ allows to optimize string comparison with a small literal string.
+     STRCASEEQ (s, "UTF-8", 'U','T','F','-','8',0,0,0,0)
+   is semantically equivalent to
+     c_strcasecmp (s, "UTF-8") == 0
+   just faster.  */
+
+/* Help GCC to generate good code for string comparisons with
+   immediate strings. */
+#if defined (__GNUC__) && defined (__OPTIMIZE__)
+
+/* Case insensitive comparison of ASCII characters.  */
+# if C_CTYPE_ASCII
+#  define CASEEQ(other,upper) \
+     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
+# elif C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#  define CASEEQ(other,upper) \
+     (c_isupper (upper) ? (other) == (upper) || (other) == (upper) - 'A' + 'a' : (other) == (upper))
+# else
+#  define CASEEQ(other,upper) \
+     (c_toupper (other) == (upper))
+# endif
+
+static inline int
+strcaseeq9 (const char *s1, const char *s2)
+{
+  return c_strcasecmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+strcaseeq8 (const char *s1, const char *s2, char s28)
+{
+  if (CASEEQ (s1[8], s28))
+    {
+      if (s28 == 0)
+        return 1;
+      else
+        return strcaseeq9 (s1, s2);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq7 (const char *s1, const char *s2, char s27, char s28)
+{
+  if (CASEEQ (s1[7], s27))
+    {
+      if (s27 == 0)
+        return 1;
+      else
+        return strcaseeq8 (s1, s2, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[6], s26))
+    {
+      if (s26 == 0)
+        return 1;
+      else
+        return strcaseeq7 (s1, s2, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[5], s25))
+    {
+      if (s25 == 0)
+        return 1;
+      else
+        return strcaseeq6 (s1, s2, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[4], s24))
+    {
+      if (s24 == 0)
+        return 1;
+      else
+        return strcaseeq5 (s1, s2, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[3], s23))
+    {
+      if (s23 == 0)
+        return 1;
+      else
+        return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[2], s22))
+    {
+      if (s22 == 0)
+        return 1;
+      else
+        return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[1], s21))
+    {
+      if (s21 == 0)
+        return 1;
+      else
+        return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[0], s20))
+    {
+      if (s20 == 0)
+        return 1;
+      else
+        return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  (c_strcasecmp (s1, s2) == 0)
+
+#endif
diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c
new file mode 100644
index 0000000..47fb5fd
--- /dev/null
+++ b/lib/c-strncasecmp.c
@@ -0,0 +1,56 @@
+/* c-strncasecmp.c -- case insensitive string comparator in C locale
+   Copyright (C) 1998-1999, 2005-2006, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "c-strcase.h"
+
+#include <limits.h>
+
+#include "c-ctype.h"
+
+int
+c_strncasecmp (const char *s1, const char *s2, size_t n)
+{
+  register const unsigned char *p1 = (const unsigned char *) s1;
+  register const unsigned char *p2 = (const unsigned char *) s2;
+  unsigned char c1, c2;
+
+  if (p1 == p2 || n == 0)
+    return 0;
+
+  do
+    {
+      c1 = c_tolower (*p1);
+      c2 = c_tolower (*p2);
+
+      if (--n == 0 || c1 == '\0')
+        break;
+
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  if (UCHAR_MAX <= INT_MAX)
+    return c1 - c2;
+  else
+    /* On machines where 'char' and 'int' are types of the same size, the
+       difference of two 'unsigned char' values - including the sign bit -
+       doesn't fit in an 'int'.  */
+    return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
+}
diff --git a/lib/calloc.c b/lib/calloc.c
new file mode 100644
index 0000000..93da14d
--- /dev/null
+++ b/lib/calloc.c
@@ -0,0 +1,73 @@
+/* calloc() function that is glibc compatible.
+   This wrapper function is required at least on Tru64 UNIX 5.1 and mingw.
+   Copyright (C) 2004-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#include <config.h>
+/* Only the AC_FUNC_CALLOC macro defines 'calloc' already in config.h.  */
+#ifdef calloc
+# define NEED_CALLOC_GNU 1
+# undef calloc
+/* Whereas the gnulib module 'calloc-gnu' defines HAVE_CALLOC_GNU.  */
+#elif GNULIB_CALLOC_GNU && !HAVE_CALLOC_GNU
+# define NEED_CALLOC_GNU 1
+#endif
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <errno.h>
+
+/* Call the system's calloc below.  */
+#undef calloc
+
+/* Allocate and zero-fill an NxS-byte block of memory from the heap.
+   If N or S is zero, allocate and zero-fill a 1-byte block.  */
+
+void *
+rpl_calloc (size_t n, size_t s)
+{
+  void *result;
+
+#if NEED_CALLOC_GNU
+  if (n == 0 || s == 0)
+    {
+      n = 1;
+      s = 1;
+    }
+  else
+    {
+      /* Defend against buggy calloc implementations that mishandle
+         size_t overflow.  */
+      size_t bytes = n * s;
+      if (bytes / s != n)
+        {
+          errno = ENOMEM;
+          return NULL;
+        }
+    }
+#endif
+
+  result = calloc (n, s);
+
+#if !HAVE_CALLOC_POSIX
+  if (result == NULL)
+    errno = ENOMEM;
+#endif
+
+  return result;
+}
diff --git a/lib/cloexec.c b/lib/cloexec.c
new file mode 100644
index 0000000..7919e86
--- /dev/null
+++ b/lib/cloexec.c
@@ -0,0 +1,83 @@
+/* closexec.c - set or clear the close-on-exec descriptor flag
+
+   Copyright (C) 1991, 2004-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+   The code is taken from glibc/manual/llio.texi  */
+
+#include <config.h>
+
+#include "cloexec.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true,
+   or clear the flag if VALUE is false.
+   Return 0 on success, or -1 on error with 'errno' set.
+
+   Note that on MingW, this function does NOT protect DESC from being
+   inherited into spawned children.  Instead, either use dup_cloexec
+   followed by closing the original DESC, or use interfaces such as
+   open or pipe2 that accept flags like O_CLOEXEC to create DESC
+   non-inheritable in the first place.  */
+
+int
+set_cloexec_flag (int desc, bool value)
+{
+#ifdef F_SETFD
+
+  int flags = fcntl (desc, F_GETFD, 0);
+
+  if (0 <= flags)
+    {
+      int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC);
+
+      if (flags == newflags
+          || fcntl (desc, F_SETFD, newflags) != -1)
+        return 0;
+    }
+
+  return -1;
+
+#else /* !F_SETFD */
+
+  /* Use dup2 to reject invalid file descriptors; the cloexec flag
+     will be unaffected.  */
+  if (desc < 0)
+    {
+      errno = EBADF;
+      return -1;
+    }
+  if (dup2 (desc, desc) < 0)
+    /* errno is EBADF here.  */
+    return -1;
+
+  /* There is nothing we can do on this kind of platform.  Punt.  */
+  return 0;
+#endif /* !F_SETFD */
+}
+
+
+/* Duplicates a file handle FD, while marking the copy to be closed
+   prior to exec or spawn.  Returns -1 and sets errno if FD could not
+   be duplicated.  */
+
+int
+dup_cloexec (int fd)
+{
+  return fcntl (fd, F_DUPFD_CLOEXEC, 0);
+}
diff --git a/lib/cloexec.h b/lib/cloexec.h
new file mode 100644
index 0000000..92e9f81
--- /dev/null
+++ b/lib/cloexec.h
@@ -0,0 +1,38 @@
+/* closexec.c - set or clear the close-on-exec descriptor flag
+
+   Copyright (C) 2004, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <stdbool.h>
+
+/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true,
+   or clear the flag if VALUE is false.
+   Return 0 on success, or -1 on error with 'errno' set.
+
+   Note that on MingW, this function does NOT protect DESC from being
+   inherited into spawned children.  Instead, either use dup_cloexec
+   followed by closing the original DESC, or use interfaces such as
+   open or pipe2 that accept flags like O_CLOEXEC to create DESC
+   non-inheritable in the first place.  */
+
+int set_cloexec_flag (int desc, bool value);
+
+/* Duplicates a file handle FD, while marking the copy to be closed
+   prior to exec or spawn.  Returns -1 and sets errno if FD could not
+   be duplicated.  */
+
+int dup_cloexec (int fd);
diff --git a/lib/close-stream.c b/lib/close-stream.c
new file mode 100644
index 0000000..04fa5ec
--- /dev/null
+++ b/lib/close-stream.c
@@ -0,0 +1,78 @@
+/* Close a stream, with nicer error checking than fclose's.
+
+   Copyright (C) 1998-2002, 2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "close-stream.h"
+
+#include <errno.h>
+#include <stdbool.h>
+
+#include "fpending.h"
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+/* Close STREAM.  Return 0 if successful, EOF (setting errno)
+   otherwise.  A failure might set errno to 0 if the error number
+   cannot be determined.
+
+   A failure with errno set to EPIPE may or may not indicate an error
+   situation worth signaling to the user.  See the documentation of the
+   close_stdout_set_ignore_EPIPE function for details.
+
+   If a program writes *anything* to STREAM, that program should close
+   STREAM and make sure that it succeeds before exiting.  Otherwise,
+   suppose that you go to the extreme of checking the return status
+   of every function that does an explicit write to STREAM.  The last
+   printf can succeed in writing to the internal stream buffer, and yet
+   the fclose(STREAM) could still fail (due e.g., to a disk full error)
+   when it tries to write out that buffered data.  Thus, you would be
+   left with an incomplete output file and the offending program would
+   exit successfully.  Even calling fflush is not always sufficient,
+   since some file systems (NFS and CODA) buffer written/flushed data
+   until an actual close call.
+
+   Besides, it's wasteful to check the return value from every call
+   that writes to STREAM -- just let the internal stream state record
+   the failure.  That's what the ferror test is checking below.  */
+
+int
+close_stream (FILE *stream)
+{
+  const bool some_pending = (__fpending (stream) != 0);
+  const bool prev_fail = (ferror (stream) != 0);
+  const bool fclose_fail = (fclose (stream) != 0);
+
+  /* Return an error indication if there was a previous failure or if
+     fclose failed, with one exception: ignore an fclose failure if
+     there was no previous error, no data remains to be flushed, and
+     fclose failed with EBADF.  That can happen when a program like cp
+     is invoked like this 'cp a b >&-' (i.e., with standard output
+     closed) and doesn't generate any output (hence no previous error
+     and nothing to be flushed).  */
+
+  if (prev_fail || (fclose_fail && (some_pending || errno != EBADF)))
+    {
+      if (! fclose_fail)
+        errno = 0;
+      return EOF;
+    }
+
+  return 0;
+}
diff --git a/lib/close-stream.h b/lib/close-stream.h
new file mode 100644
index 0000000..be3d419
--- /dev/null
+++ b/lib/close-stream.h
@@ -0,0 +1,2 @@
+#include <stdio.h>
+int close_stream (FILE *stream);
diff --git a/lib/close.c b/lib/close.c
new file mode 100644
index 0000000..4b7accb
--- /dev/null
+++ b/lib/close.c
@@ -0,0 +1,69 @@
+/* close replacement.
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#include <errno.h>
+
+#include "fd-hook.h"
+#include "msvc-inval.h"
+
+#undef close
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+close_nothrow (int fd)
+{
+  int result;
+
+  TRY_MSVC_INVAL
+    {
+      result = close (fd);
+    }
+  CATCH_MSVC_INVAL
+    {
+      result = -1;
+      errno = EBADF;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+#else
+# define close_nothrow close
+#endif
+
+/* Override close() to call into other gnulib modules.  */
+
+int
+rpl_close (int fd)
+{
+#if WINDOWS_SOCKETS
+  int retval = execute_all_close_hooks (close_nothrow, fd);
+#else
+  int retval = close_nothrow (fd);
+#endif
+
+#if REPLACE_FCHDIR
+  if (retval >= 0)
+    _gl_unregister_fd (fd);
+#endif
+
+  return retval;
+}
diff --git a/lib/closeout.c b/lib/closeout.c
new file mode 100644
index 0000000..eea4024
--- /dev/null
+++ b/lib/closeout.c
@@ -0,0 +1,124 @@
+/* Close standard output and standard error, exiting with a diagnostic on error.
+
+   Copyright (C) 1998-2002, 2004, 2006, 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "closeout.h"
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+#include "close-stream.h"
+#include "error.h"
+#include "exitfail.h"
+#include "quotearg.h"
+
+static const char *file_name;
+
+/* Set the file name to be reported in the event an error is detected
+   by close_stdout.  */
+void
+close_stdout_set_file_name (const char *file)
+{
+  file_name = file;
+}
+
+static bool ignore_EPIPE /* = false */;
+
+/* Specify the reaction to an EPIPE error during the closing of stdout:
+     - If ignore = true, it shall be ignored.
+     - If ignore = false, it shall evoke a diagnostic, along with a nonzero
+       exit status.
+   The default is ignore = false.
+
+   This setting matters only if the SIGPIPE signal is ignored (i.e. its
+   handler set to SIG_IGN) or blocked.  Only particular programs need to
+   temporarily ignore SIGPIPE.  If SIGPIPE is ignored or blocked because
+   it was ignored or blocked in the parent process when it created the
+   child process, it usually is a bug in the parent process: It is bad
+   practice to have SIGPIPE ignored or blocked while creating a child
+   process.
+
+   EPIPE occurs when writing to a pipe or socket that has no readers now,
+   when SIGPIPE is ignored or blocked.
+
+   The ignore = false setting is suitable for a scenario where it is normally
+   guaranteed that the pipe writer terminates before the pipe reader.  In
+   this case, an EPIPE is an indication of a premature termination of the
+   pipe reader and should lead to a diagnostic and a nonzero exit status.
+
+   The ignore = true setting is suitable for a scenario where you don't know
+   ahead of time whether the pipe writer or the pipe reader will terminate
+   first.  In this case, an EPIPE is an indication that the pipe writer can
+   stop doing useless write() calls; this is what close_stdout does anyway.
+   EPIPE is part of the normal pipe/socket shutdown protocol in this case,
+   and should not lead to a diagnostic message.  */
+
+void
+close_stdout_set_ignore_EPIPE (bool ignore)
+{
+  ignore_EPIPE = ignore;
+}
+
+/* Close standard output.  On error, issue a diagnostic and _exit
+   with status 'exit_failure'.
+
+   Also close standard error.  On error, _exit with status 'exit_failure'.
+
+   Since close_stdout is commonly registered via 'atexit', POSIX
+   and the C standard both say that it should not call 'exit',
+   because the behavior is undefined if 'exit' is called more than
+   once.  So it calls '_exit' instead of 'exit'.  If close_stdout
+   is registered via atexit before other functions are registered,
+   the other functions can act before this _exit is invoked.
+
+   Applications that use close_stdout should flush any streams
+   other than stdout and stderr before exiting, since the call to
+   _exit will bypass other buffer flushing.  Applications should
+   be flushing and closing other streams anyway, to check for I/O
+   errors.  Also, applications should not use tmpfile, since _exit
+   can bypass the removal of these files.
+
+   It's important to detect such failures and exit nonzero because many
+   tools (most notably 'make' and other build-management systems) depend
+   on being able to detect failure in other tools via their exit status.  */
+
+void
+close_stdout (void)
+{
+  if (close_stream (stdout) != 0
+      && !(ignore_EPIPE && errno == EPIPE))
+    {
+      char const *write_error = _("write error");
+      if (file_name)
+        error (0, errno, "%s: %s", quotearg_colon (file_name),
+               write_error);
+      else
+        error (0, errno, "%s", write_error);
+
+      _exit (exit_failure);
+    }
+
+   if (close_stream (stderr) != 0)
+     _exit (exit_failure);
+}
diff --git a/lib/closeout.h b/lib/closeout.h
new file mode 100644
index 0000000..5310b28
--- /dev/null
+++ b/lib/closeout.h
@@ -0,0 +1,36 @@
+/* Close standard output and standard error.
+
+   Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef CLOSEOUT_H
+# define CLOSEOUT_H 1
+
+# include <stdbool.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+void close_stdout_set_file_name (const char *file);
+void close_stdout_set_ignore_EPIPE (bool ignore);
+void close_stdout (void);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
diff --git a/lib/config.charset b/lib/config.charset
new file mode 100644
index 0000000..0a3b343
--- /dev/null
+++ b/lib/config.charset
@@ -0,0 +1,684 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+#   Copyright (C) 2000-2004, 2006-2012 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 3, 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, see <http://www.gnu.org/licenses/>.
+#
+# The table consists of lines of the form
+#    ALIAS  CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+#       name              MIME?             used by which systems
+#                                    (darwin = Mac OS X, woe32 = native Windows)
+#
+#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin cygwin
+#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+#   ISO-8859-3              Y   glibc solaris cygwin
+#   ISO-8859-4              Y   osf solaris freebsd netbsd openbsd darwin
+#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+#   ISO-8859-6              Y   glibc aix hpux solaris cygwin
+#   ISO-8859-7              Y   glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin
+#   ISO-8859-8              Y   glibc aix hpux osf solaris cygwin
+#   ISO-8859-9              Y   glibc aix hpux irix osf solaris darwin cygwin
+#   ISO-8859-13                 glibc netbsd openbsd darwin cygwin
+#   ISO-8859-14                 glibc cygwin
+#   ISO-8859-15                 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin
+#   KOI8-R                  Y   glibc solaris freebsd netbsd openbsd darwin
+#   KOI8-U                  Y   glibc freebsd netbsd openbsd darwin cygwin
+#   KOI8-T                      glibc
+#   CP437                       dos
+#   CP775                       dos
+#   CP850                       aix osf dos
+#   CP852                       dos
+#   CP855                       dos
+#   CP856                       aix
+#   CP857                       dos
+#   CP861                       dos
+#   CP862                       dos
+#   CP864                       dos
+#   CP865                       dos
+#   CP866                       freebsd netbsd openbsd darwin dos
+#   CP869                       dos
+#   CP874                       woe32 dos
+#   CP922                       aix
+#   CP932                       aix cygwin woe32 dos
+#   CP943                       aix
+#   CP949                       osf darwin woe32 dos
+#   CP950                       woe32 dos
+#   CP1046                      aix
+#   CP1124                      aix
+#   CP1125                      dos
+#   CP1129                      aix
+#   CP1131                      darwin
+#   CP1250                      woe32
+#   CP1251                      glibc solaris netbsd openbsd darwin cygwin woe32
+#   CP1252                      aix woe32
+#   CP1253                      woe32
+#   CP1254                      woe32
+#   CP1255                      glibc woe32
+#   CP1256                      woe32
+#   CP1257                      woe32
+#   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin
+#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin
+#   EUC-TW                      glibc aix hpux irix osf solaris netbsd
+#   BIG5                    Y   glibc aix hpux osf solaris freebsd netbsd darwin cygwin
+#   BIG5-HKSCS                  glibc solaris darwin
+#   GBK                         glibc aix osf solaris darwin cygwin woe32 dos
+#   GB18030                     glibc solaris netbsd darwin
+#   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
+#   JOHAB                       glibc solaris woe32
+#   TIS-620                     glibc aix hpux osf solaris cygwin
+#   VISCII                  Y   glibc
+#   TCVN5712-1                  glibc
+#   ARMSCII-8                   glibc darwin
+#   GEORGIAN-PS                 glibc cygwin
+#   PT154                       glibc
+#   HP-ROMAN8                   hpux
+#   HP-ARABIC8                  hpux
+#   HP-GREEK8                   hpux
+#   HP-HEBREW8                  hpux
+#   HP-TURKISH8                 hpux
+#   HP-KANA8                    hpux
+#   DEC-KANJI                   osf
+#   DEC-HANYU                   osf
+#   UTF-8                   Y   glibc aix hpux osf solaris netbsd darwin cygwin
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+  linux-gnulibc1*)
+    # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "C ASCII"
+    echo "POSIX ASCII"
+    for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
+             en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
+             en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
+             es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
+             et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
+             fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
+             it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
+             sv_FI sv_SE; do
+      echo "$l ISO-8859-1"
+      echo "$l.iso-8859-1 ISO-8859-1"
+      echo "$l.iso-8859-15 ISO-8859-15"
+      echo "$l.iso-8859-15@euro ISO-8859-15"
+      echo "$l@euro ISO-8859-15"
+      echo "$l.cp-437 CP437"
+      echo "$l.cp-850 CP850"
+      echo "$l.cp-1252 CP1252"
+      echo "$l.cp-1252@euro CP1252"
+      #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
+      echo "$l.utf-8 UTF-8"
+      echo "$l.utf-8@euro UTF-8"
+    done
+    for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
+             sl_SI sr sr_CS sr_YU; do
+      echo "$l ISO-8859-2"
+      echo "$l.iso-8859-2 ISO-8859-2"
+      echo "$l.cp-852 CP852"
+      echo "$l.cp-1250 CP1250"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in mk mk_MK ru ru_RU; do
+      echo "$l ISO-8859-5"
+      echo "$l.iso-8859-5 ISO-8859-5"
+      echo "$l.koi8-r KOI8-R"
+      echo "$l.cp-866 CP866"
+      echo "$l.cp-1251 CP1251"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in ar ar_SA; do
+      echo "$l ISO-8859-6"
+      echo "$l.iso-8859-6 ISO-8859-6"
+      echo "$l.cp-864 CP864"
+      #echo "$l.cp-868 CP868" # not a commonly used encoding
+      echo "$l.cp-1256 CP1256"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in el el_GR gr gr_GR; do
+      echo "$l ISO-8859-7"
+      echo "$l.iso-8859-7 ISO-8859-7"
+      echo "$l.cp-869 CP869"
+      echo "$l.cp-1253 CP1253"
+      echo "$l.cp-1253@euro CP1253"
+      echo "$l.utf-8 UTF-8"
+      echo "$l.utf-8@euro UTF-8"
+    done
+    for l in he he_IL iw iw_IL; do
+      echo "$l ISO-8859-8"
+      echo "$l.iso-8859-8 ISO-8859-8"
+      echo "$l.cp-862 CP862"
+      echo "$l.cp-1255 CP1255"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in tr tr_TR; do
+      echo "$l ISO-8859-9"
+      echo "$l.iso-8859-9 ISO-8859-9"
+      echo "$l.cp-857 CP857"
+      echo "$l.cp-1254 CP1254"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in lt lt_LT lv lv_LV; do
+      #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
+      echo "$l ISO-8859-13"
+    done
+    for l in ru_UA uk uk_UA; do
+      echo "$l KOI8-U"
+    done
+    for l in zh zh_CN; do
+      #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
+      echo "$l GB2312"
+    done
+    for l in ja ja_JP ja_JP.EUC; do
+      echo "$l EUC-JP"
+    done
+    for l in ko ko_KR; do
+      echo "$l EUC-KR"
+    done
+    for l in th th_TH; do
+      echo "$l TIS-620"
+    done
+    for l in fa fa_IR; do
+      #echo "$l ISIRI-3342" # a broken encoding
+      echo "$l.utf-8 UTF-8"
+    done
+    ;;
+  linux* | *-gnu*)
+    # With glibc-2.1 or newer, we don't need any canonicalization,
+    # because glibc has iconv and both glibc and libiconv support all
+    # GNU canonical names directly. Therefore, the Makefile does not
+    # need to install the alias file at all.
+    # The following applies only to glibc-2.0.x and older libcs.
+    echo "ISO_646.IRV:1983 ASCII"
+    ;;
+  aix*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-6 ISO-8859-6"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "IBM-850 CP850"
+    echo "IBM-856 CP856"
+    echo "IBM-921 ISO-8859-13"
+    echo "IBM-922 CP922"
+    echo "IBM-932 CP932"
+    echo "IBM-943 CP943"
+    echo "IBM-1046 CP1046"
+    echo "IBM-1124 CP1124"
+    echo "IBM-1129 CP1129"
+    echo "IBM-1252 CP1252"
+    echo "IBM-eucCN GB2312"
+    echo "IBM-eucJP EUC-JP"
+    echo "IBM-eucKR EUC-KR"
+    echo "IBM-eucTW EUC-TW"
+    echo "big5 BIG5"
+    echo "GBK GBK"
+    echo "TIS-620 TIS-620"
+    echo "UTF-8 UTF-8"
+    ;;
+  hpux*)
+    echo "iso88591 ISO-8859-1"
+    echo "iso88592 ISO-8859-2"
+    echo "iso88595 ISO-8859-5"
+    echo "iso88596 ISO-8859-6"
+    echo "iso88597 ISO-8859-7"
+    echo "iso88598 ISO-8859-8"
+    echo "iso88599 ISO-8859-9"
+    echo "iso885915 ISO-8859-15"
+    echo "roman8 HP-ROMAN8"
+    echo "arabic8 HP-ARABIC8"
+    echo "greek8 HP-GREEK8"
+    echo "hebrew8 HP-HEBREW8"
+    echo "turkish8 HP-TURKISH8"
+    echo "kana8 HP-KANA8"
+    echo "tis620 TIS-620"
+    echo "big5 BIG5"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "hp15CN GB2312"
+    #echo "ccdc ?" # what is this?
+    echo "SJIS SHIFT_JIS"
+    echo "utf8 UTF-8"
+    ;;
+  irix*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "eucCN GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    ;;
+  osf*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "cp850 CP850"
+    echo "big5 BIG5"
+    echo "dechanyu DEC-HANYU"
+    echo "dechanzi GB2312"
+    echo "deckanji DEC-KANJI"
+    echo "deckorean EUC-KR"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "GBK GBK"
+    echo "KSC5601 CP949"
+    echo "sdeckanji EUC-JP"
+    echo "SJIS SHIFT_JIS"
+    echo "TACTIS TIS-620"
+    echo "UTF-8 UTF-8"
+    ;;
+  solaris*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-3 ISO-8859-3"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-6 ISO-8859-6"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "koi8-r KOI8-R"
+    echo "ansi-1251 CP1251"
+    echo "BIG5 BIG5"
+    echo "Big5-HKSCS BIG5-HKSCS"
+    echo "gb2312 GB2312"
+    echo "GBK GBK"
+    echo "GB18030 GB18030"
+    echo "cns11643 EUC-TW"
+    echo "5601 EUC-KR"
+    echo "ko_KR.johap92 JOHAB"
+    echo "eucJP EUC-JP"
+    echo "PCK SHIFT_JIS"
+    echo "TIS620.2533 TIS-620"
+    #echo "sun_eu_greek ?" # what is this?
+    echo "UTF-8 UTF-8"
+    ;;
+  freebsd* | os2*)
+    # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+    # reuse FreeBSD's locale data for OS/2.
+    echo "C ASCII"
+    echo "US-ASCII ASCII"
+    for l in la_LN lt_LN; do
+      echo "$l.ASCII ASCII"
+    done
+    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+             lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+      echo "$l.ISO_8859-1 ISO-8859-1"
+      echo "$l.DIS_8859-15 ISO-8859-15"
+    done
+    for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+      echo "$l.ISO_8859-2 ISO-8859-2"
+    done
+    for l in la_LN lt_LT; do
+      echo "$l.ISO_8859-4 ISO-8859-4"
+    done
+    for l in ru_RU ru_SU; do
+      echo "$l.KOI8-R KOI8-R"
+      echo "$l.ISO_8859-5 ISO-8859-5"
+      echo "$l.CP866 CP866"
+    done
+    echo "uk_UA.KOI8-U KOI8-U"
+    echo "zh_TW.BIG5 BIG5"
+    echo "zh_TW.Big5 BIG5"
+    echo "zh_CN.EUC GB2312"
+    echo "ja_JP.EUC EUC-JP"
+    echo "ja_JP.SJIS SHIFT_JIS"
+    echo "ja_JP.Shift_JIS SHIFT_JIS"
+    echo "ko_KR.EUC EUC-KR"
+    ;;
+  netbsd*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "eucCN GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "BIG5 BIG5"
+    echo "SJIS SHIFT_JIS"
+    ;;
+  openbsd*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    ;;
+  darwin[56]*)
+    # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "C ASCII"
+    for l in en_AU en_CA en_GB en_US la_LN; do
+      echo "$l.US-ASCII ASCII"
+    done
+    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
+             nl_NL no_NO pt_PT sv_SE; do
+      echo "$l ISO-8859-1"
+      echo "$l.ISO8859-1 ISO-8859-1"
+      echo "$l.ISO8859-15 ISO-8859-15"
+    done
+    for l in la_LN; do
+      echo "$l.ISO8859-1 ISO-8859-1"
+      echo "$l.ISO8859-15 ISO-8859-15"
+    done
+    for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
+      echo "$l.ISO8859-2 ISO-8859-2"
+    done
+    for l in la_LN lt_LT; do
+      echo "$l.ISO8859-4 ISO-8859-4"
+    done
+    for l in ru_RU; do
+      echo "$l.KOI8-R KOI8-R"
+      echo "$l.ISO8859-5 ISO-8859-5"
+      echo "$l.CP866 CP866"
+    done
+    for l in bg_BG; do
+      echo "$l.CP1251 CP1251"
+    done
+    echo "uk_UA.KOI8-U KOI8-U"
+    echo "zh_TW.BIG5 BIG5"
+    echo "zh_TW.Big5 BIG5"
+    echo "zh_CN.EUC GB2312"
+    echo "ja_JP.EUC EUC-JP"
+    echo "ja_JP.SJIS SHIFT_JIS"
+    echo "ko_KR.EUC EUC-KR"
+    ;;
+  darwin*)
+    # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is
+    # useless:
+    # - It returns the empty string when LANG is set to a locale of the
+    #   form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
+    #   LC_CTYPE file.
+    # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
+    #   the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
+    # - The documentation says:
+    #     "... all code that calls BSD system routines should ensure
+    #      that the const *char parameters of these routines are in UTF-8
+    #      encoding. All BSD system functions expect their string
+    #      parameters to be in UTF-8 encoding and nothing else."
+    #   It also says
+    #     "An additional caveat is that string parameters for files,
+    #      paths, and other file-system entities must be in canonical
+    #      UTF-8. In a canonical UTF-8 Unicode string, all decomposable
+    #      characters are decomposed ..."
+    #   but this is not true: You can pass non-decomposed UTF-8 strings
+    #   to file system functions, and it is the OS which will convert
+    #   them to decomposed UTF-8 before accessing the file system.
+    # - The Apple Terminal application displays UTF-8 by default.
+    # - However, other applications are free to use different encodings:
+    #   - xterm uses ISO-8859-1 by default.
+    #   - TextEdit uses MacRoman by default.
+    # We prefer UTF-8 over decomposed UTF-8-MAC because one should
+    # minimize the use of decomposed Unicode. Unfortunately, through the
+    # Darwin file system, decomposed UTF-8 strings are leaked into user
+    # space nevertheless.
+    # Then there are also the locales with encodings other than US-ASCII
+    # and UTF-8. These locales can be occasionally useful to users (e.g.
+    # when grepping through ISO-8859-1 encoded text files), when all their
+    # file names are in US-ASCII.
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "KOI8-R KOI8-R"
+    echo "KOI8-U KOI8-U"
+    echo "CP866 CP866"
+    echo "CP949 CP949"
+    echo "CP1131 CP1131"
+    echo "CP1251 CP1251"
+    echo "eucCN GB2312"
+    echo "GB2312 GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "Big5 BIG5"
+    echo "Big5HKSCS BIG5-HKSCS"
+    echo "GBK GBK"
+    echo "GB18030 GB18030"
+    echo "SJIS SHIFT_JIS"
+    echo "ARMSCII-8 ARMSCII-8"
+    echo "PT154 PT154"
+    #echo "ISCII-DEV ?"
+    echo "* UTF-8"
+    ;;
+  beos* | haiku*)
+    # BeOS and Haiku have a single locale, and it has UTF-8 encoding.
+    echo "* UTF-8"
+    ;;
+  msdosdjgpp*)
+    # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "#"
+    echo "# The encodings given here may not all be correct."
+    echo "# If you find that the encoding given for your language and"
+    echo "# country is not the one your DOS machine actually uses, just"
+    echo "# correct it in this file, and send a mail to"
+    echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>"
+    echo "# and Bruno Haible <bruno@clisp.org>."
+    echo "#"
+    echo "C ASCII"
+    # ISO-8859-1 languages
+    echo "ca CP850"
+    echo "ca_ES CP850"
+    echo "da CP865"    # not CP850 ??
+    echo "da_DK CP865" # not CP850 ??
+    echo "de CP850"
+    echo "de_AT CP850"
+    echo "de_CH CP850"
+    echo "de_DE CP850"
+    echo "en CP850"
+    echo "en_AU CP850" # not CP437 ??
+    echo "en_CA CP850"
+    echo "en_GB CP850"
+    echo "en_NZ CP437"
+    echo "en_US CP437"
+    echo "en_ZA CP850" # not CP437 ??
+    echo "es CP850"
+    echo "es_AR CP850"
+    echo "es_BO CP850"
+    echo "es_CL CP850"
+    echo "es_CO CP850"
+    echo "es_CR CP850"
+    echo "es_CU CP850"
+    echo "es_DO CP850"
+    echo "es_EC CP850"
+    echo "es_ES CP850"
+    echo "es_GT CP850"
+    echo "es_HN CP850"
+    echo "es_MX CP850"
+    echo "es_NI CP850"
+    echo "es_PA CP850"
+    echo "es_PY CP850"
+    echo "es_PE CP850"
+    echo "es_SV CP850"
+    echo "es_UY CP850"
+    echo "es_VE CP850"
+    echo "et CP850"
+    echo "et_EE CP850"
+    echo "eu CP850"
+    echo "eu_ES CP850"
+    echo "fi CP850"
+    echo "fi_FI CP850"
+    echo "fr CP850"
+    echo "fr_BE CP850"
+    echo "fr_CA CP850"
+    echo "fr_CH CP850"
+    echo "fr_FR CP850"
+    echo "ga CP850"
+    echo "ga_IE CP850"
+    echo "gd CP850"
+    echo "gd_GB CP850"
+    echo "gl CP850"
+    echo "gl_ES CP850"
+    echo "id CP850"    # not CP437 ??
+    echo "id_ID CP850" # not CP437 ??
+    echo "is CP861"    # not CP850 ??
+    echo "is_IS CP861" # not CP850 ??
+    echo "it CP850"
+    echo "it_CH CP850"
+    echo "it_IT CP850"
+    echo "lt CP775"
+    echo "lt_LT CP775"
+    echo "lv CP775"
+    echo "lv_LV CP775"
+    echo "nb CP865"    # not CP850 ??
+    echo "nb_NO CP865" # not CP850 ??
+    echo "nl CP850"
+    echo "nl_BE CP850"
+    echo "nl_NL CP850"
+    echo "nn CP865"    # not CP850 ??
+    echo "nn_NO CP865" # not CP850 ??
+    echo "no CP865"    # not CP850 ??
+    echo "no_NO CP865" # not CP850 ??
+    echo "pt CP850"
+    echo "pt_BR CP850"
+    echo "pt_PT CP850"
+    echo "sv CP850"
+    echo "sv_SE CP850"
+    # ISO-8859-2 languages
+    echo "cs CP852"
+    echo "cs_CZ CP852"
+    echo "hr CP852"
+    echo "hr_HR CP852"
+    echo "hu CP852"
+    echo "hu_HU CP852"
+    echo "pl CP852"
+    echo "pl_PL CP852"
+    echo "ro CP852"
+    echo "ro_RO CP852"
+    echo "sk CP852"
+    echo "sk_SK CP852"
+    echo "sl CP852"
+    echo "sl_SI CP852"
+    echo "sq CP852"
+    echo "sq_AL CP852"
+    echo "sr CP852"    # CP852 or CP866 or CP855 ??
+    echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
+    echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+    # ISO-8859-3 languages
+    echo "mt CP850"
+    echo "mt_MT CP850"
+    # ISO-8859-5 languages
+    echo "be CP866"
+    echo "be_BE CP866"
+    echo "bg CP866"    # not CP855 ??
+    echo "bg_BG CP866" # not CP855 ??
+    echo "mk CP866"    # not CP855 ??
+    echo "mk_MK CP866" # not CP855 ??
+    echo "ru CP866"
+    echo "ru_RU CP866"
+    echo "uk CP1125"
+    echo "uk_UA CP1125"
+    # ISO-8859-6 languages
+    echo "ar CP864"
+    echo "ar_AE CP864"
+    echo "ar_DZ CP864"
+    echo "ar_EG CP864"
+    echo "ar_IQ CP864"
+    echo "ar_IR CP864"
+    echo "ar_JO CP864"
+    echo "ar_KW CP864"
+    echo "ar_MA CP864"
+    echo "ar_OM CP864"
+    echo "ar_QA CP864"
+    echo "ar_SA CP864"
+    echo "ar_SY CP864"
+    # ISO-8859-7 languages
+    echo "el CP869"
+    echo "el_GR CP869"
+    # ISO-8859-8 languages
+    echo "he CP862"
+    echo "he_IL CP862"
+    # ISO-8859-9 languages
+    echo "tr CP857"
+    echo "tr_TR CP857"
+    # Japanese
+    echo "ja CP932"
+    echo "ja_JP CP932"
+    # Chinese
+    echo "zh_CN GBK"
+    echo "zh_TW CP950" # not CP938 ??
+    # Korean
+    echo "kr CP949"    # not CP934 ??
+    echo "kr_KR CP949" # not CP934 ??
+    # Thai
+    echo "th CP874"
+    echo "th_TH CP874"
+    # Other
+    echo "eo CP850"
+    echo "eo_EO CP850"
+    ;;
+esac
diff --git a/lib/config.in.h b/lib/config.in.h
new file mode 100644
index 0000000..31bb0c5
--- /dev/null
+++ b/lib/config.in.h
@@ -0,0 +1,2267 @@
+/* lib/config.in.h.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
+/* Define to the number of bits in type 'ptrdiff_t'. */
+#undef BITSIZEOF_PTRDIFF_T
+
+/* Define to the number of bits in type 'sig_atomic_t'. */
+#undef BITSIZEOF_SIG_ATOMIC_T
+
+/* Define to the number of bits in type 'size_t'. */
+#undef BITSIZEOF_SIZE_T
+
+/* Define to the number of bits in type 'wchar_t'. */
+#undef BITSIZEOF_WCHAR_T
+
+/* Define to the number of bits in type 'wint_t'. */
+#undef BITSIZEOF_WINT_T
+
+/* Define if you wish *printf() functions that have a safe handling of
+   non-IEEE-754 'long double' values. */
+#undef CHECK_PRINTF_SAFE
+
+/* 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
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'double'. */
+#undef DBL_EXPBIT0_BIT
+
+/* Define as the word index where to find the exponent of 'double'. */
+#undef DBL_EXPBIT0_WORD
+
+/* Define as the bit index in the word where to find the sign of 'double'. */
+#undef DBL_SIGNBIT_BIT
+
+/* Define as the word index where to find the sign of 'double'. */
+#undef DBL_SIGNBIT_WORD
+
+/* Define to 1 if // is a file system root distinct from /. */
+#undef DOUBLE_SLASH_IS_DISTINCT_ROOT
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* Define this to 1 if F_DUPFD behavior does not match POSIX */
+#undef FCNTL_DUPFD_BUGGY
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'float'. */
+#undef FLT_EXPBIT0_BIT
+
+/* Define as the word index where to find the exponent of 'float'. */
+#undef FLT_EXPBIT0_WORD
+
+/* Define as the bit index in the word where to find the sign of 'float'. */
+#undef FLT_SIGNBIT_BIT
+
+/* Define as the word index where to find the sign of 'float'. */
+#undef FLT_SIGNBIT_WORD
+
+/* Define to 1 if fopen() fails to recognize a trailing slash. */
+#undef FOPEN_TRAILING_SLASH_BUG
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module close-stream shall be considered present. */
+#undef GNULIB_CLOSE_STREAM
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module dirname shall be considered present. */
+#undef GNULIB_DIRNAME
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fd-safer-flag shall be considered present. */
+#undef GNULIB_FD_SAFER_FLAG
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fopen-safer shall be considered present. */
+#undef GNULIB_FOPEN_SAFER
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fscanf shall be considered present. */
+#undef GNULIB_FSCANF
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module malloc-gnu shall be considered present. */
+#undef GNULIB_MALLOC_GNU
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module pipe2-safer shall be considered present. */
+#undef GNULIB_PIPE2_SAFER
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module scanf shall be considered present. */
+#undef GNULIB_SCANF
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module snprintf shall be considered present. */
+#undef GNULIB_SNPRINTF
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module strerror shall be considered present. */
+#undef GNULIB_STRERROR
+
+/* Define to 1 when the gnulib module calloc-posix should be tested. */
+#undef GNULIB_TEST_CALLOC_POSIX
+
+/* Define to 1 when the gnulib module cloexec should be tested. */
+#undef GNULIB_TEST_CLOEXEC
+
+/* Define to 1 when the gnulib module close should be tested. */
+#undef GNULIB_TEST_CLOSE
+
+/* Define to 1 when the gnulib module dup2 should be tested. */
+#undef GNULIB_TEST_DUP2
+
+/* Define to 1 when the gnulib module environ should be tested. */
+#undef GNULIB_TEST_ENVIRON
+
+/* Define to 1 when the gnulib module fcntl should be tested. */
+#undef GNULIB_TEST_FCNTL
+
+/* Define to 1 when the gnulib module fopen should be tested. */
+#undef GNULIB_TEST_FOPEN
+
+/* Define to 1 when the gnulib module fprintf-posix should be tested. */
+#undef GNULIB_TEST_FPRINTF_POSIX
+
+/* Define to 1 when the gnulib module frexp should be tested. */
+#undef GNULIB_TEST_FREXP
+
+/* Define to 1 when the gnulib module frexpl should be tested. */
+#undef GNULIB_TEST_FREXPL
+
+/* Define to 1 when the gnulib module fstat should be tested. */
+#undef GNULIB_TEST_FSTAT
+
+/* Define to 1 when the gnulib module getdelim should be tested. */
+#undef GNULIB_TEST_GETDELIM
+
+/* Define to 1 when the gnulib module getdtablesize should be tested. */
+#undef GNULIB_TEST_GETDTABLESIZE
+
+/* Define to 1 when the gnulib module getline should be tested. */
+#undef GNULIB_TEST_GETLINE
+
+/* Define to 1 when the gnulib module getopt-gnu should be tested. */
+#undef GNULIB_TEST_GETOPT_GNU
+
+/* Define to 1 when the gnulib module isnan should be tested. */
+#undef GNULIB_TEST_ISNAN
+
+/* Define to 1 when the gnulib module isnand should be tested. */
+#undef GNULIB_TEST_ISNAND
+
+/* Define to 1 when the gnulib module isnanf should be tested. */
+#undef GNULIB_TEST_ISNANF
+
+/* Define to 1 when the gnulib module isnanl should be tested. */
+#undef GNULIB_TEST_ISNANL
+
+/* Define to 1 when the gnulib module iswblank should be tested. */
+#undef GNULIB_TEST_ISWBLANK
+
+/* Define to 1 when the gnulib module ldexpl should be tested. */
+#undef GNULIB_TEST_LDEXPL
+
+/* Define to 1 when the gnulib module malloc-posix should be tested. */
+#undef GNULIB_TEST_MALLOC_POSIX
+
+/* Define to 1 when the gnulib module mbrtowc should be tested. */
+#undef GNULIB_TEST_MBRTOWC
+
+/* Define to 1 when the gnulib module mbschr should be tested. */
+#undef GNULIB_TEST_MBSCHR
+
+/* Define to 1 when the gnulib module mbsinit should be tested. */
+#undef GNULIB_TEST_MBSINIT
+
+/* Define to 1 when the gnulib module mbsrchr should be tested. */
+#undef GNULIB_TEST_MBSRCHR
+
+/* Define to 1 when the gnulib module memchr should be tested. */
+#undef GNULIB_TEST_MEMCHR
+
+/* Define to 1 when the gnulib module obstack-printf should be tested. */
+#undef GNULIB_TEST_OBSTACK_PRINTF
+
+/* Define to 1 when the gnulib module open should be tested. */
+#undef GNULIB_TEST_OPEN
+
+/* Define to 1 when the gnulib module perror should be tested. */
+#undef GNULIB_TEST_PERROR
+
+/* Define to 1 when the gnulib module pipe2 should be tested. */
+#undef GNULIB_TEST_PIPE2
+
+/* Define to 1 when the gnulib module posix_spawnattr_destroy should be
+   tested. */
+#undef GNULIB_TEST_POSIX_SPAWNATTR_DESTROY
+
+/* Define to 1 when the gnulib module posix_spawnattr_init should be tested.
+   */
+#undef GNULIB_TEST_POSIX_SPAWNATTR_INIT
+
+/* Define to 1 when the gnulib module posix_spawnattr_setflags should be
+   tested. */
+#undef GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS
+
+/* Define to 1 when the gnulib module posix_spawnattr_setsigmask should be
+   tested. */
+#undef GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK
+
+/* Define to 1 when the gnulib module posix_spawnp should be tested. */
+#undef GNULIB_TEST_POSIX_SPAWNP
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_addclose should
+   be tested. */
+#undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_adddup2 should
+   be tested. */
+#undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_addopen should
+   be tested. */
+#undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_destroy should
+   be tested. */
+#undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_init should be
+   tested. */
+#undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT
+
+/* Define to 1 when the gnulib module printf-posix should be tested. */
+#undef GNULIB_TEST_PRINTF_POSIX
+
+/* Define to 1 when the gnulib module raise should be tested. */
+#undef GNULIB_TEST_RAISE
+
+/* Define to 1 when the gnulib module rawmemchr should be tested. */
+#undef GNULIB_TEST_RAWMEMCHR
+
+/* Define to 1 when the gnulib module realloc-posix should be tested. */
+#undef GNULIB_TEST_REALLOC_POSIX
+
+/* Define to 1 when the gnulib module sigaction should be tested. */
+#undef GNULIB_TEST_SIGACTION
+
+/* Define to 1 when the gnulib module signbit should be tested. */
+#undef GNULIB_TEST_SIGNBIT
+
+/* Define to 1 when the gnulib module sigprocmask should be tested. */
+#undef GNULIB_TEST_SIGPROCMASK
+
+/* Define to 1 when the gnulib module snprintf should be tested. */
+#undef GNULIB_TEST_SNPRINTF
+
+/* Define to 1 when the gnulib module sprintf-posix should be tested. */
+#undef GNULIB_TEST_SPRINTF_POSIX
+
+/* Define to 1 when the gnulib module stat should be tested. */
+#undef GNULIB_TEST_STAT
+
+/* Define to 1 when the gnulib module stpcpy should be tested. */
+#undef GNULIB_TEST_STPCPY
+
+/* Define to 1 when the gnulib module strchrnul should be tested. */
+#undef GNULIB_TEST_STRCHRNUL
+
+/* Define to 1 when the gnulib module strdup should be tested. */
+#undef GNULIB_TEST_STRDUP
+
+/* Define to 1 when the gnulib module strerror should be tested. */
+#undef GNULIB_TEST_STRERROR
+
+/* Define to 1 when the gnulib module strerror_r should be tested. */
+#undef GNULIB_TEST_STRERROR_R
+
+/* Define to 1 when the gnulib module strndup should be tested. */
+#undef GNULIB_TEST_STRNDUP
+
+/* Define to 1 when the gnulib module strnlen should be tested. */
+#undef GNULIB_TEST_STRNLEN
+
+/* Define to 1 when the gnulib module strverscmp should be tested. */
+#undef GNULIB_TEST_STRVERSCMP
+
+/* Define to 1 when the gnulib module unsetenv should be tested. */
+#undef GNULIB_TEST_UNSETENV
+
+/* Define to 1 when the gnulib module vfprintf-posix should be tested. */
+#undef GNULIB_TEST_VFPRINTF_POSIX
+
+/* Define to 1 when the gnulib module vsnprintf should be tested. */
+#undef GNULIB_TEST_VSNPRINTF
+
+/* Define to 1 when the gnulib module vsprintf-posix should be tested. */
+#undef GNULIB_TEST_VSPRINTF_POSIX
+
+/* Define to 1 when the gnulib module waitpid should be tested. */
+#undef GNULIB_TEST_WAITPID
+
+/* Define to 1 when the gnulib module wcwidth should be tested. */
+#undef GNULIB_TEST_WCWIDTH
+
+/* Define to 1 if you have the `alarm' function. */
+#undef HAVE_ALARM
+
+/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
+   may be supplied by this distribution. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <bp-sym.h> header file. */
+#undef HAVE_BP_SYM_H
+
+/* Define if the 'calloc' function is POSIX compliant. */
+#undef HAVE_CALLOC_POSIX
+
+/* Define to 1 if you have the `catgets' function. */
+#undef HAVE_CATGETS
+
+/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define to 1 if the system has the type `clock_t'. */
+#undef HAVE_CLOCK_T
+
+/* Define to 1 if you have the `confstr' function. */
+#undef HAVE_CONFSTR
+
+/* Define if the copysignf function is declared in <math.h> and available in
+   libc. */
+#undef HAVE_COPYSIGNF_IN_LIBC
+
+/* Define if the copysignl function is declared in <math.h> and available in
+   libc. */
+#undef HAVE_COPYSIGNL_IN_LIBC
+
+/* Define if the copysign function is declared in <math.h> and available in
+   libc. */
+#undef HAVE_COPYSIGN_IN_LIBC
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_CLEARERR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `clock', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CLOCK
+
+/* Define to 1 if you have the declaration of `copysign', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGN
+
+/* Define to 1 if you have the declaration of `copysignf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGNF
+
+/* Define to 1 if you have the declaration of `copysignl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGNL
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_FEOF_UNLOCKED
+
+/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FERROR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FFLUSH_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FGETS_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FPUTC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FPUTS_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FREAD_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FWRITE_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_GETCHAR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getdelim', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETDELIM
+
+/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
+   */
+#undef HAVE_DECL_GETENV
+
+/* Define to 1 if you have the declaration of `getline', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETLINE
+
+/* Define to 1 if you have the declaration of `getrusage', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETRUSAGE
+
+/* Define to 1 if you have the declaration of `iswblank', and to 0 if you
+   don't. */
+#undef HAVE_DECL_ISWBLANK
+
+/* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MBRTOWC
+
+/* Define to 1 if you have the declaration of `mbsinit', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MBSINIT
+
+/* Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0
+   otherwise. */
+#undef HAVE_DECL_MBSWIDTH_IN_WCHAR_H
+
+/* Define to 1 if you have the declaration of `obstack_printf', and to 0 if
+   you don't. */
+#undef HAVE_DECL_OBSTACK_PRINTF
+
+/* Define to 1 if you have the declaration of `program_invocation_name', and
+   to 0 if you don't. */
+#undef HAVE_DECL_PROGRAM_INVOCATION_NAME
+
+/* Define to 1 if you have the declaration of `program_invocation_short_name',
+   and to 0 if you don't. */
+#undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+
+/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_PUTCHAR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_PUTC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SNPRINTF
+
+/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
+   */
+#undef HAVE_DECL_STRDUP
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRERROR_R
+
+/* Define to 1 if you have the declaration of `strndup', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRNDUP
+
+/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRNLEN
+
+/* Define to 1 if you have the declaration of `sysconf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SYSCONF
+
+/* Define to 1 if you have the declaration of `times', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TIMES
+
+/* Define to 1 if you have the declaration of `towlower', and to 0 if you
+   don't. */
+#undef HAVE_DECL_TOWLOWER
+
+/* Define to 1 if you have the declaration of `unsetenv', and to 0 if you
+   don't. */
+#undef HAVE_DECL_UNSETENV
+
+/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_VSNPRINTF
+
+/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you
+   don't. */
+#undef HAVE_DECL_WCWIDTH
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL__SNPRINTF
+
+/* Define to 1 if you have the declaration of `__fpending', and to 0 if you
+   don't. */
+#undef HAVE_DECL___FPENDING
+
+/* Define to 1 if you have the 'dup2' function. */
+#undef HAVE_DUP2
+
+/* Define if you have the declaration of environ. */
+#undef HAVE_ENVIRON_DECL
+
+/* Define to 1 if you have the `fcntl' function. */
+#undef HAVE_FCNTL
+
+/* Define to 1 if you have the <features.h> header file. */
+#undef HAVE_FEATURES_H
+
+/* Define to 1 if you have the `flockfile' function. */
+#undef HAVE_FLOCKFILE
+
+/* Define if the frexpl function is available in libc. */
+#undef HAVE_FREXPL_IN_LIBC
+
+/* Define if the frexp function is available in libc. */
+#undef HAVE_FREXP_IN_LIBC
+
+/* Define to 1 if you have the `funlockfile' function. */
+#undef HAVE_FUNLOCKFILE
+
+/* Define to 1 if you have the `getdelim' function. */
+#undef HAVE_GETDELIM
+
+/* Define to 1 if you have the `getdtablesize' function. */
+#undef HAVE_GETDTABLESIZE
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#undef HAVE_GETOPT_LONG_ONLY
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_INTMAX_T
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+   declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
+/* Define to 1 if you have the `isascii' function. */
+#undef HAVE_ISASCII
+
+/* Define if the isnan(double) function is available in libc. */
+#undef HAVE_ISNAND_IN_LIBC
+
+/* Define if the isnan(float) function is available in libc. */
+#undef HAVE_ISNANF_IN_LIBC
+
+/* Define if the isnan(long double) function is available in libc. */
+#undef HAVE_ISNANL_IN_LIBC
+
+/* Define to 1 if you have the `iswblank' function. */
+#undef HAVE_ISWBLANK
+
+/* Define to 1 if you have the `iswcntrl' function. */
+#undef HAVE_ISWCNTRL
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if the ldexpl() function is available. */
+#undef HAVE_LDEXPL
+
+/* Define if the ldexpl function is available in libc. */
+#undef HAVE_LDEXPL_IN_LIBC
+
+/* Define if the ldexp function is available in libc. */
+#undef HAVE_LDEXP_IN_LIBC
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if the system has the type 'long long int'. */
+#undef HAVE_LONG_LONG_INT
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define to 1 if your system has a GNU libc compatible 'malloc' function, and
+   to 0 otherwise. */
+#undef HAVE_MALLOC_GNU
+
+/* Define if the 'malloc' function is POSIX compliant. */
+#undef HAVE_MALLOC_POSIX
+
+/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+   config.h and <sys/mman.h>. */
+#undef HAVE_MAP_ANONYMOUS
+
+/* Define to 1 if you have the <math.h> header file. */
+#undef HAVE_MATH_H
+
+/* Define to 1 if you have the `mbrtowc' function. */
+#undef HAVE_MBRTOWC
+
+/* Define to 1 if you have the `mbsinit' function. */
+#undef HAVE_MBSINIT
+
+/* Define to 1 if <wchar.h> declares mbstate_t. */
+#undef HAVE_MBSTATE_T
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mprotect' function. */
+#undef HAVE_MPROTECT
+
+/* Define to 1 on MSVC platforms that have the "invalid parameter handler"
+   concept. */
+#undef HAVE_MSVC_INVALID_PARAMETER_HANDLER
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+#undef HAVE_NL_LANGINFO
+
+/* Define to 1 if libc includes obstacks. */
+#undef HAVE_OBSTACK
+
+/* Define to 1 if you have the `obstack_printf' function. */
+#undef HAVE_OBSTACK_PRINTF
+
+/* Define to 1 if you have the <paths.h> header file. */
+#undef HAVE_PATHS_H
+
+/* Define to 1 if you have the `pipe' function. */
+#undef HAVE_PIPE
+
+/* Define to 1 if you have the `pipe2' function. */
+#undef HAVE_PIPE2
+
+/* Define to 1 if you have the `posix_spawn' function. */
+#undef HAVE_POSIX_SPAWN
+
+/* Define to 1 if the system has the type `posix_spawnattr_t'. */
+#undef HAVE_POSIX_SPAWNATTR_T
+
+/* Define to 1 if the system has the type `posix_spawn_file_actions_t'. */
+#undef HAVE_POSIX_SPAWN_FILE_ACTIONS_T
+
+/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
+#undef HAVE_PTHREAD_MUTEX_RECURSIVE
+
+/* Define if the POSIX multithreading library has read/write locks. */
+#undef HAVE_PTHREAD_RWLOCK
+
+/* Define to 1 if you have the `raise' function. */
+#undef HAVE_RAISE
+
+/* Define to 1 if you have the `rawmemchr' function. */
+#undef HAVE_RAWMEMCHR
+
+/* Define to 1 if acosf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ACOSF
+
+/* Define to 1 if acosl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ACOSL
+
+/* Define to 1 if asinf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ASINF
+
+/* Define to 1 if asinl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ASINL
+
+/* Define to 1 if atanf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ATANF
+
+/* Define to 1 if atanl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ATANL
+
+/* Define to 1 if atoll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ATOLL
+
+/* Define to 1 if btowc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_BTOWC
+
+/* Define to 1 if canonicalize_file_name is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+
+/* Define to 1 if cbrt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CBRT
+
+/* Define to 1 if cbrtf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CBRTF
+
+/* Define to 1 if cbrtl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CBRTL
+
+/* Define to 1 if ceilf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CEILF
+
+/* Define to 1 if ceill is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CEILL
+
+/* Define to 1 if chdir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CHDIR
+
+/* Define to 1 if chown is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CHOWN
+
+/* Define to 1 if copysign is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_COPYSIGN
+
+/* Define to 1 if copysignf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_COPYSIGNF
+
+/* Define to 1 if copysignl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_COPYSIGNL
+
+/* Define to 1 if cosf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_COSF
+
+/* Define to 1 if coshf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_COSHF
+
+/* Define to 1 if cosl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_COSL
+
+/* Define to 1 if dprintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DPRINTF
+
+/* Define to 1 if dup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DUP
+
+/* Define to 1 if dup2 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DUP2
+
+/* Define to 1 if dup3 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DUP3
+
+/* Define to 1 if endusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ENDUSERSHELL
+
+/* Define to 1 if environ is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ENVIRON
+
+/* Define to 1 if euidaccess is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EUIDACCESS
+
+/* Define to 1 if exp2 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EXP2
+
+/* Define to 1 if exp2f is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EXP2F
+
+/* Define to 1 if exp2l is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EXP2L
+
+/* Define to 1 if expf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EXPF
+
+/* Define to 1 if expl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EXPL
+
+/* Define to 1 if expm1 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EXPM1
+
+/* Define to 1 if expm1f is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EXPM1F
+
+/* Define to 1 if expm1l is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EXPM1L
+
+/* Define to 1 if fabsf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FABSF
+
+/* Define to 1 if fabsl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FABSL
+
+/* Define to 1 if faccessat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FACCESSAT
+
+/* Define to 1 if fchdir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCHDIR
+
+/* Define to 1 if fchmodat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCHMODAT
+
+/* Define to 1 if fchownat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCHOWNAT
+
+/* Define to 1 if fcntl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCNTL
+
+/* Define to 1 if fdatasync is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FDATASYNC
+
+/* Define to 1 if ffsl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FFSL
+
+/* Define to 1 if ffsll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FFSLL
+
+/* Define to 1 if floorf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FLOORF
+
+/* Define to 1 if floorl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FLOORL
+
+/* Define to 1 if fma is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FMA
+
+/* Define to 1 if fmaf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FMAF
+
+/* Define to 1 if fmal is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FMAL
+
+/* Define to 1 if fmod is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FMOD
+
+/* Define to 1 if fmodf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FMODF
+
+/* Define to 1 if fmodl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FMODL
+
+/* Define to 1 if fpurge is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FPURGE
+
+/* Define to 1 if frexpf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FREXPF
+
+/* Define to 1 if frexpl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FREXPL
+
+/* Define to 1 if fseeko is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FSEEKO
+
+/* Define to 1 if fstat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FSTAT
+
+/* Define to 1 if fstatat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FSTATAT
+
+/* Define to 1 if fsync is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FSYNC
+
+/* Define to 1 if ftello is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FTELLO
+
+/* Define to 1 if ftruncate is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FTRUNCATE
+
+/* Define to 1 if futimens is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FUTIMENS
+
+/* Define to 1 if getcwd is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETCWD
+
+/* Define to 1 if getdelim is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETDELIM
+
+/* Define to 1 if getdomainname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETDOMAINNAME
+
+/* Define to 1 if getdtablesize is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETDTABLESIZE
+
+/* Define to 1 if getgroups is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETGROUPS
+
+/* Define to 1 if gethostname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETHOSTNAME
+
+/* Define to 1 if getline is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLINE
+
+/* Define to 1 if getloadavg is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOADAVG
+
+/* Define to 1 if getlogin is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOGIN
+
+/* Define to 1 if getlogin_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOGIN_R
+
+/* Define to 1 if getpagesize is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETPAGESIZE
+
+/* Define to 1 if gets is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETS
+
+/* Define to 1 if getsubopt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETSUBOPT
+
+/* Define to 1 if getusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETUSERSHELL
+
+/* Define to 1 if grantpt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GRANTPT
+
+/* Define to 1 if group_member is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GROUP_MEMBER
+
+/* Define to 1 if hypotf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_HYPOTF
+
+/* Define to 1 if hypotl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_HYPOTL
+
+/* Define to 1 if ilogb is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ILOGB
+
+/* Define to 1 if ilogbf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ILOGBF
+
+/* Define to 1 if ilogbl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ILOGBL
+
+/* Define to 1 if imaxabs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_IMAXABS
+
+/* Define to 1 if imaxdiv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_IMAXDIV
+
+/* Define to 1 if initstate is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_INITSTATE
+
+/* Define to 1 if initstate_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_INITSTATE_R
+
+/* Define to 1 if isatty is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ISATTY
+
+/* Define to 1 if iswctype is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ISWCTYPE
+
+/* Define to 1 if lchmod is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LCHMOD
+
+/* Define to 1 if lchown is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LCHOWN
+
+/* Define to 1 if ldexpf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LDEXPF
+
+/* Define to 1 if ldexpl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LDEXPL
+
+/* Define to 1 if link is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LINK
+
+/* Define to 1 if linkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LINKAT
+
+/* Define to 1 if log is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG
+
+/* Define to 1 if log10 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG10
+
+/* Define to 1 if log10f is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG10F
+
+/* Define to 1 if log10l is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG10L
+
+/* Define to 1 if log1p is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG1P
+
+/* Define to 1 if log1pf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG1PF
+
+/* Define to 1 if log1pl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG1PL
+
+/* Define to 1 if log2 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG2
+
+/* Define to 1 if log2f is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG2F
+
+/* Define to 1 if log2l is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOG2L
+
+/* Define to 1 if logb is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOGB
+
+/* Define to 1 if logbf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOGBF
+
+/* Define to 1 if logbl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOGBL
+
+/* Define to 1 if logf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOGF
+
+/* Define to 1 if logl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LOGL
+
+/* Define to 1 if lseek is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LSEEK
+
+/* Define to 1 if lstat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LSTAT
+
+/* Define to 1 if mbrlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBRLEN
+
+/* Define to 1 if mbrtowc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBRTOWC
+
+/* Define to 1 if mbsinit is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSINIT
+
+/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSNRTOWCS
+
+/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSRTOWCS
+
+/* Define to 1 if memmem is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMMEM
+
+/* Define to 1 if mempcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMPCPY
+
+/* Define to 1 if memrchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMRCHR
+
+/* Define to 1 if mkdirat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKDIRAT
+
+/* Define to 1 if mkdtemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKDTEMP
+
+/* Define to 1 if mkfifo is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKFIFO
+
+/* Define to 1 if mkfifoat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKFIFOAT
+
+/* Define to 1 if mknod is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKNOD
+
+/* Define to 1 if mknodat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKNODAT
+
+/* Define to 1 if mkostemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKOSTEMP
+
+/* Define to 1 if mkostemps is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKOSTEMPS
+
+/* Define to 1 if mkstemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKSTEMP
+
+/* Define to 1 if mkstemps is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKSTEMPS
+
+/* Define to 1 if modf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MODF
+
+/* Define to 1 if modff is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MODFF
+
+/* Define to 1 if modfl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MODFL
+
+/* Define to 1 if openat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_OPENAT
+
+/* Define to 1 if pclose is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PCLOSE
+
+/* Define to 1 if pipe is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PIPE
+
+/* Define to 1 if pipe2 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PIPE2
+
+/* Define to 1 if popen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_POPEN
+
+/* Define to 1 if posix_openpt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_OPENPT
+
+/* Define to 1 if posix_spawn is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWN
+
+/* Define to 1 if posix_spawnattr_destroy is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY
+
+/* Define to 1 if posix_spawnattr_getflags is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS
+
+/* Define to 1 if posix_spawnattr_getpgroup is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP
+
+/* Define to 1 if posix_spawnattr_getschedparam is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM
+
+/* Define to 1 if posix_spawnattr_getschedpolicy is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY
+
+/* Define to 1 if posix_spawnattr_getsigdefault is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT
+
+/* Define to 1 if posix_spawnattr_getsigmask is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK
+
+/* Define to 1 if posix_spawnattr_init is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT
+
+/* Define to 1 if posix_spawnattr_setflags is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS
+
+/* Define to 1 if posix_spawnattr_setpgroup is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP
+
+/* Define to 1 if posix_spawnattr_setschedparam is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM
+
+/* Define to 1 if posix_spawnattr_setschedpolicy is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY
+
+/* Define to 1 if posix_spawnattr_setsigdefault is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT
+
+/* Define to 1 if posix_spawnattr_setsigmask is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK
+
+/* Define to 1 if posix_spawnp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWNP
+
+/* Define to 1 if posix_spawn_file_actions_addclose is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+
+/* Define to 1 if posix_spawn_file_actions_adddup2 is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
+
+/* Define to 1 if posix_spawn_file_actions_addopen is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+
+/* Define to 1 if posix_spawn_file_actions_destroy is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY
+
+/* Define to 1 if posix_spawn_file_actions_init is declared even after
+   undefining macros. */
+#undef HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT
+
+/* Define to 1 if powf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_POWF
+
+/* Define to 1 if pread is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PREAD
+
+/* Define to 1 if pthread_sigmask is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PTHREAD_SIGMASK
+
+/* Define to 1 if ptsname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PTSNAME
+
+/* Define to 1 if ptsname_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PTSNAME_R
+
+/* Define to 1 if pwrite is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PWRITE
+
+/* Define to 1 if random is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RANDOM
+
+/* Define to 1 if random_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RANDOM_R
+
+/* Define to 1 if rawmemchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RAWMEMCHR
+
+/* Define to 1 if readlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_READLINK
+
+/* Define to 1 if readlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_READLINKAT
+
+/* Define to 1 if realpath is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_REALPATH
+
+/* Define to 1 if remainder is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_REMAINDER
+
+/* Define to 1 if remainderf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_REMAINDERF
+
+/* Define to 1 if remainderl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_REMAINDERL
+
+/* Define to 1 if renameat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RENAMEAT
+
+/* Define to 1 if rint is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RINT
+
+/* Define to 1 if rintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RINTF
+
+/* Define to 1 if rintl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RINTL
+
+/* Define to 1 if rmdir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RMDIR
+
+/* Define to 1 if round is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ROUND
+
+/* Define to 1 if roundf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ROUNDF
+
+/* Define to 1 if roundl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ROUNDL
+
+/* Define to 1 if rpmatch is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RPMATCH
+
+/* Define to 1 if setenv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETENV
+
+/* Define to 1 if sethostname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETHOSTNAME
+
+/* Define to 1 if setstate is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETSTATE
+
+/* Define to 1 if setstate_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETSTATE_R
+
+/* Define to 1 if setusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETUSERSHELL
+
+/* Define to 1 if sigaction is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SIGACTION
+
+/* Define to 1 if sigaddset is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SIGADDSET
+
+/* Define to 1 if sigdelset is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SIGDELSET
+
+/* Define to 1 if sigemptyset is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SIGEMPTYSET
+
+/* Define to 1 if sigfillset is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SIGFILLSET
+
+/* Define to 1 if sigismember is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SIGISMEMBER
+
+/* Define to 1 if sigpending is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SIGPENDING
+
+/* Define to 1 if sigprocmask is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SIGPROCMASK
+
+/* Define to 1 if sinf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SINF
+
+/* Define to 1 if sinhf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SINHF
+
+/* Define to 1 if sinl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SINL
+
+/* Define to 1 if sleep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SLEEP
+
+/* Define to 1 if snprintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SNPRINTF
+
+/* Define to 1 if sqrtf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SQRTF
+
+/* Define to 1 if sqrtl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SQRTL
+
+/* Define to 1 if srandom is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SRANDOM
+
+/* Define to 1 if srandom_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SRANDOM_R
+
+/* Define to 1 if stat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STAT
+
+/* Define to 1 if stpcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STPCPY
+
+/* Define to 1 if stpncpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STPNCPY
+
+/* Define to 1 if strcasestr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCASESTR
+
+/* Define to 1 if strchrnul is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCHRNUL
+
+/* Define to 1 if strdup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRDUP
+
+/* Define to 1 if strerror_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRERROR_R
+
+/* Define to 1 if strncat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNCAT
+
+/* Define to 1 if strndup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNDUP
+
+/* Define to 1 if strnlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNLEN
+
+/* Define to 1 if strpbrk is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRPBRK
+
+/* Define to 1 if strsep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRSEP
+
+/* Define to 1 if strsignal is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRSIGNAL
+
+/* Define to 1 if strtod is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOD
+
+/* Define to 1 if strtoimax is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOIMAX
+
+/* Define to 1 if strtok_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOK_R
+
+/* Define to 1 if strtoll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOLL
+
+/* Define to 1 if strtoull is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOULL
+
+/* Define to 1 if strtoumax is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOUMAX
+
+/* Define to 1 if strverscmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRVERSCMP
+
+/* Define to 1 if symlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SYMLINK
+
+/* Define to 1 if symlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SYMLINKAT
+
+/* Define to 1 if tanf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TANF
+
+/* Define to 1 if tanhf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TANHF
+
+/* Define to 1 if tanl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TANL
+
+/* Define to 1 if tmpfile is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TMPFILE
+
+/* Define to 1 if towctrans is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TOWCTRANS
+
+/* Define to 1 if trunc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TRUNC
+
+/* Define to 1 if truncf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TRUNCF
+
+/* Define to 1 if truncl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TRUNCL
+
+/* Define to 1 if ttyname_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TTYNAME_R
+
+/* Define to 1 if unlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNLINK
+
+/* Define to 1 if unlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNLINKAT
+
+/* Define to 1 if unlockpt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNLOCKPT
+
+/* Define to 1 if unsetenv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNSETENV
+
+/* Define to 1 if usleep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_USLEEP
+
+/* Define to 1 if utimensat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UTIMENSAT
+
+/* Define to 1 if vdprintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_VDPRINTF
+
+/* Define to 1 if vsnprintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_VSNPRINTF
+
+/* Define to 1 if waitpid is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WAITPID
+
+/* Define to 1 if wcpcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCPCPY
+
+/* Define to 1 if wcpncpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCPNCPY
+
+/* Define to 1 if wcrtomb is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCRTOMB
+
+/* Define to 1 if wcscasecmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCASECMP
+
+/* Define to 1 if wcscat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCAT
+
+/* Define to 1 if wcschr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCHR
+
+/* Define to 1 if wcscmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCMP
+
+/* Define to 1 if wcscoll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCOLL
+
+/* Define to 1 if wcscpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCPY
+
+/* Define to 1 if wcscspn is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCSPN
+
+/* Define to 1 if wcsdup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSDUP
+
+/* Define to 1 if wcslen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSLEN
+
+/* Define to 1 if wcsncasecmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNCASECMP
+
+/* Define to 1 if wcsncat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNCAT
+
+/* Define to 1 if wcsncmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNCMP
+
+/* Define to 1 if wcsncpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNCPY
+
+/* Define to 1 if wcsnlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNLEN
+
+/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNRTOMBS
+
+/* Define to 1 if wcspbrk is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSPBRK
+
+/* Define to 1 if wcsrchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSRCHR
+
+/* Define to 1 if wcsrtombs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSRTOMBS
+
+/* Define to 1 if wcsspn is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSSPN
+
+/* Define to 1 if wcsstr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSSTR
+
+/* Define to 1 if wcstok is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSTOK
+
+/* Define to 1 if wcswidth is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSWIDTH
+
+/* Define to 1 if wcsxfrm is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSXFRM
+
+/* Define to 1 if wctob is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCTOB
+
+/* Define to 1 if wctrans is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCTRANS
+
+/* Define to 1 if wctype is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCTYPE
+
+/* Define to 1 if wcwidth is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCWIDTH
+
+/* Define to 1 if wmemchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMCHR
+
+/* Define to 1 if wmemcmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMCMP
+
+/* Define to 1 if wmemcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMCPY
+
+/* Define to 1 if wmemmove is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMMOVE
+
+/* Define to 1 if wmemset is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMSET
+
+/* Define to 1 if _Exit is declared even after undefining macros. */
+#undef HAVE_RAW_DECL__EXIT
+
+/* Define if the 'realloc' function is POSIX compliant. */
+#undef HAVE_REALLOC_POSIX
+
+/* Define to 1 if 'long double' and 'double' have the same representation. */
+#undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the `sched_setparam' function. */
+#undef HAVE_SCHED_SETPARAM
+
+/* Define to 1 if you have the `sched_setscheduler' function. */
+#undef HAVE_SCHED_SETSCHEDULER
+
+/* Define to 1 if you have the `setegid' function. */
+#undef HAVE_SETEGID
+
+/* Define to 1 if you have the `seteuid' function. */
+#undef HAVE_SETEUID
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define to 1 if you have the `sigaltstack' function. */
+#undef HAVE_SIGALTSTACK
+
+/* Define to 1 if the system has the type `siginfo_t'. */
+#undef HAVE_SIGINFO_T
+
+/* Define to 1 if you have the `siginterrupt' function. */
+#undef HAVE_SIGINTERRUPT
+
+/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
+#undef HAVE_SIGNED_SIG_ATOMIC_T
+
+/* Define to 1 if 'wchar_t' is a signed integer type. */
+#undef HAVE_SIGNED_WCHAR_T
+
+/* Define to 1 if 'wint_t' is a signed integer type. */
+#undef HAVE_SIGNED_WINT_T
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#undef HAVE_SIGSET_T
+
+/* Define to 1 if the system has the type `sig_atomic_t'. */
+#undef HAVE_SIG_ATOMIC_T
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define if the return value of the snprintf function is the number of of
+   bytes (excluding the terminating NUL) that would have been produced if the
+   buffer had been large enough. */
+#undef HAVE_SNPRINTF_RETVAL_C99
+
+/* Define to 1 if you have the <spawn.h> header file. */
+#undef HAVE_SPAWN_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+   uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <stdio_ext.h> header file. */
+#undef HAVE_STDIO_EXT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strchrnul' function. */
+#undef HAVE_STRCHRNUL
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror_r' function. */
+#undef HAVE_STRERROR_R
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strndup' function. */
+#undef HAVE_STRNDUP
+
+/* Define to 1 if you have the `strnlen' function. */
+#undef HAVE_STRNLEN
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* Define to 1 if `sa_sigaction' is a member of `struct sigaction'. */
+#undef HAVE_STRUCT_SIGACTION_SA_SIGACTION
+
+/* Define to 1 if the system has the type `struct tms'. */
+#undef HAVE_STRUCT_TMS
+
+/* Define to 1 if you have the `strverscmp' function. */
+#undef HAVE_STRVERSCMP
+
+/* Define to 1 if you have the `symlink' function. */
+#undef HAVE_SYMLINK
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
+/* Define to 1 if you have the <sys/inttypes.h> header file. */
+#undef HAVE_SYS_INTTYPES_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#undef HAVE_SYS_TIMES_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the `times' function. */
+#undef HAVE_TIMES
+
+/* Define to 1 if you have the `towlower' function. */
+#undef HAVE_TOWLOWER
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `unsetenv' function. */
+#undef HAVE_UNSETENV
+
+/* Define to 1 if the system has the type 'unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the `vasnprintf' function. */
+#undef HAVE_VASNPRINTF
+
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if you have the `waitid' function. */
+#undef HAVE_WAITID
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define to 1 if you have the `wcrtomb' function. */
+#undef HAVE_WCRTOMB
+
+/* Define to 1 if you have the `wcslen' function. */
+#undef HAVE_WCSLEN
+
+/* Define to 1 if you have the `wcsnlen' function. */
+#undef HAVE_WCSNLEN
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#undef HAVE_WCTYPE_H
+
+/* Define to 1 if you have the `wcwidth' function. */
+#undef HAVE_WCWIDTH
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+#undef HAVE_WINSOCK2_H
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
+/* Define to 1 if O_NOATIME works. */
+#undef HAVE_WORKING_O_NOATIME
+
+/* Define to 1 if O_NOFOLLOW works. */
+#undef HAVE_WORKING_O_NOFOLLOW
+
+/* Define if you have the posix_spawn and posix_spawnp functions and they
+   work. */
+#undef HAVE_WORKING_POSIX_SPAWN
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */
+#undef HAVE__SET_INVALID_PARAMETER_HANDLER
+
+/* Define to 1 if you have the `__fpending' function. */
+#undef HAVE___FPENDING
+
+/* Define to 1 if you have the `__fseterr' function. */
+#undef HAVE___FSETERR
+
+/* Define to 1 if you have the `__xpg_strerror_r' function. */
+#undef HAVE___XPG_STRERROR_R
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'long double'. */
+#undef LDBL_EXPBIT0_BIT
+
+/* Define as the word index where to find the exponent of 'long double'. */
+#undef LDBL_EXPBIT0_WORD
+
+/* Define as the bit index in the word where to find the sign of 'long
+   double'. */
+#undef LDBL_SIGNBIT_BIT
+
+/* Define as the word index where to find the sign of 'long double'. */
+#undef LDBL_SIGNBIT_WORD
+
+/* Define to the GNU M4 executable name. */
+#undef M4
+
+/* Define to "-g" if GNU M4 supports -g, otherwise to "". */
+#undef M4_GNU_OPTION
+
+/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
+#undef MAP_ANONYMOUS
+
+/* Define if the mbrtowc function has the NULL pwc argument bug. */
+#undef MBRTOWC_NULL_ARG1_BUG
+
+/* Define if the mbrtowc function has the NULL string argument bug. */
+#undef MBRTOWC_NULL_ARG2_BUG
+
+/* Define if the mbrtowc function does not return 0 for a NUL character. */
+#undef MBRTOWC_NUL_RETVAL_BUG
+
+/* Define if the mbrtowc function returns a wrong return value. */
+#undef MBRTOWC_RETVAL_BUG
+
+/* Define to 1 if assertions should be disabled. */
+#undef NDEBUG
+
+/* Define if the vasnprintf implementation needs special code for the 'a' and
+   'A' directives. */
+#undef NEED_PRINTF_DIRECTIVE_A
+
+/* Define if the vasnprintf implementation needs special code for the 'F'
+   directive. */
+#undef NEED_PRINTF_DIRECTIVE_F
+
+/* Define if the vasnprintf implementation needs special code for the 'ls'
+   directive. */
+#undef NEED_PRINTF_DIRECTIVE_LS
+
+/* Define if the vasnprintf implementation needs special code for 'double'
+   arguments. */
+#undef NEED_PRINTF_DOUBLE
+
+/* Define if the vasnprintf implementation needs special code for surviving
+   out-of-memory conditions. */
+#undef NEED_PRINTF_ENOMEM
+
+/* Define if the vasnprintf implementation needs special code for the ' flag.
+   */
+#undef NEED_PRINTF_FLAG_GROUPING
+
+/* Define if the vasnprintf implementation needs special code for the '-'
+   flag. */
+#undef NEED_PRINTF_FLAG_LEFTADJUST
+
+/* Define if the vasnprintf implementation needs special code for the 0 flag.
+   */
+#undef NEED_PRINTF_FLAG_ZERO
+
+/* Define if the vasnprintf implementation needs special code for infinite
+   'double' arguments. */
+#undef NEED_PRINTF_INFINITE_DOUBLE
+
+/* Define if the vasnprintf implementation needs special code for infinite
+   'long double' arguments. */
+#undef NEED_PRINTF_INFINITE_LONG_DOUBLE
+
+/* Define if the vasnprintf implementation needs special code for 'long
+   double' arguments. */
+#undef NEED_PRINTF_LONG_DOUBLE
+
+/* Define if the vasnprintf implementation needs special code for supporting
+   large precisions without arbitrary bounds. */
+#undef NEED_PRINTF_UNBOUNDED_PRECISION
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Define to 1 if open() fails to recognize a trailing slash. */
+#undef OPEN_TRAILING_SLASH_BUG
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* The copyright year for this package */
+#undef PACKAGE_COPYRIGHT_YEAR
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* the number of pending output bytes on stream 'fp' */
+#undef PENDING_OUTPUT_N_BYTES
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* Define to the type that is the result of default argument promotions of
+   type mode_t. */
+#undef PROMOTED_MODE_T
+
+/* Define if the pthread_in_use() detection is hard. */
+#undef PTHREAD_IN_USE_DETECTION_HARD
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'ptrdiff_t'. */
+#undef PTRDIFF_T_SUFFIX
+
+/* Define if fprintf is overridden by a POSIX compliant gnulib implementation.
+   */
+#undef REPLACE_FPRINTF_POSIX
+
+/* Define to 1 if stat needs help when passed a directory name with a trailing
+   slash */
+#undef REPLACE_FUNC_STAT_DIR
+
+/* Define to 1 if stat needs help when passed a file name with a trailing
+   slash */
+#undef REPLACE_FUNC_STAT_FILE
+
+/* Define if printf is overridden by a POSIX compliant gnulib implementation.
+   */
+#undef REPLACE_PRINTF_POSIX
+
+/* Define to 1 if strerror(0) does not return a message implying success. */
+#undef REPLACE_STRERROR_0
+
+/* Define if vasnprintf exists but is overridden by gnulib. */
+#undef REPLACE_VASNPRINTF
+
+/* Define if vfprintf is overridden by a POSIX compliant gnulib
+   implementation. */
+#undef REPLACE_VFPRINTF_POSIX
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'sig_atomic_t'. */
+#undef SIG_ATOMIC_T_SUFFIX
+
+/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+# undef SIZE_MAX
+#endif
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'size_t'. */
+#undef SIZE_T_SUFFIX
+
+/* 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
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if strerror_r returns char *. */
+#undef STRERROR_R_CHAR_P
+
+/* Define to the prefix of C symbols at the assembler and linker level, either
+   an underscore or empty. */
+#undef USER_LABEL_PREFIX
+
+/* Define if the POSIX multithreading library can be used. */
+#undef USE_POSIX_THREADS
+
+/* Define if references to the POSIX multithreading library should be made
+   weak. */
+#undef USE_POSIX_THREADS_WEAK
+
+/* Define if the GNU Pth multithreading library can be used. */
+#undef USE_PTH_THREADS
+
+/* Define if references to the GNU Pth multithreading library should be made
+   weak. */
+#undef USE_PTH_THREADS_WEAK
+
+/* Define if the old Solaris multithreading library can be used. */
+#undef USE_SOLARIS_THREADS
+
+/* Define if references to the old Solaris multithreading library should be
+   made weak. */
+#undef USE_SOLARIS_THREADS_WEAK
+
+/* Define to 1 if you want getc etc. to use unlocked I/O if available.
+   Unlocked I/O can improve performance in unithreaded apps, but it is not
+   safe for multithreaded apps. */
+#undef USE_UNLOCKED_IO
+
+/* Define if the native Windows multithreading API can be used. */
+#undef USE_WINDOWS_THREADS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if unsetenv returns void instead of int. */
+#undef VOID_UNSETENV
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wchar_t'. */
+#undef WCHAR_T_SUFFIX
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wint_t'. */
+#undef WINT_T_SUFFIX
+
+/* Define if using the dmalloc debugging malloc package */
+#undef WITH_DMALLOC
+
+/* 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__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Define to 1 to internationalize bison runtime messages. */
+#undef YYENABLE_NLS
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+   `char[]'. */
+#undef YYTEXT_POINTER
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define to 1 if Gnulib overrides 'struct stat' on Windows so that struct
+   stat.st_size becomes 64-bit. */
+#undef _GL_WINDOWS_64_BIT_ST_SIZE
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* The _Noreturn keyword of C11.  */
+#if ! (defined _Noreturn \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for 'stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Define to 500 only on HP-UX. */
+#undef _XOPEN_SOURCE
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on Mac OS X.  */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to rpl_ if the getopt replacement functions and variables should be
+   used. */
+#undef __GETOPT_PREFIX
+
+/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
+   _GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
+   _GL_INLINE_HEADER_BEGIN contains useful stuff to put
+     in an include file, before uses of _GL_INLINE.
+     It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
+     when FOO is an inline function in the header; see
+     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
+   _GL_INLINE_HEADER_END contains useful stuff to put
+     in the same include file, after uses of _GL_INLINE.
+
+   Suppress the use of extern inline on Apple's platforms,
+   as Libc-825.25 (2012-09-19) is incompatible with it; see
+   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
+   Perhaps Apple will fix this some day.  */
+#if ((__GNUC__ \
+      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+      : 199901L <= __STDC_VERSION__) \
+     && !defined __APPLE__)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
+# if __GNUC_GNU_INLINE__
+   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
+#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+#  define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+#else
+# define _GL_INLINE static _GL_UNUSED
+# define _GL_EXTERN_INLINE static _GL_UNUSED
+#endif
+
+#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+#  define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+#  define _GL_INLINE_HEADER_CONST_PRAGMA \
+     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+    _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* 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
+
+/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */
+#undef intmax_t
+
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for Mac OS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
+
+/* Define to a type if <wchar.h> does not define. */
+#undef mbstate_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef mode_t
+
+/* Define to the type of st_nlink in struct stat, or a supertype. */
+#undef nlink_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define as the type of the result of subtracting two pointers, if the system
+   doesn't define it. */
+#undef ptrdiff_t
+
+/* 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
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define as an integer type suitable for memory locations that can be
+   accessed atomically even in the presence of asynchronous signals. */
+#undef sig_atomic_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define as a signed type of the same size as size_t. */
+#undef ssize_t
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
+
+/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The __const__ attribute was added in gcc 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
diff --git a/lib/dirname-lgpl.c b/lib/dirname-lgpl.c
new file mode 100644
index 0000000..2895cbc
--- /dev/null
+++ b/lib/dirname-lgpl.c
@@ -0,0 +1,86 @@
+/* dirname.c -- return all but the last element in a file name
+
+   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "dirname.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+/* Return the length of the prefix of FILE that will be used by
+   dir_name.  If FILE is in the working directory, this returns zero
+   even though 'dir_name (FILE)' will return ".".  Works properly even
+   if there are trailing slashes (by effectively ignoring them).  */
+
+size_t
+dir_len (char const *file)
+{
+  size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file);
+  size_t length;
+
+  /* Advance prefix_length beyond important leading slashes.  */
+  prefix_length += (prefix_length != 0
+                    ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+                       && ISSLASH (file[prefix_length]))
+                    : (ISSLASH (file[0])
+                       ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT
+                           && ISSLASH (file[1]) && ! ISSLASH (file[2])
+                           ? 2 : 1))
+                       : 0));
+
+  /* Strip the basename and any redundant slashes before it.  */
+  for (length = last_component (file) - file;
+       prefix_length < length; length--)
+    if (! ISSLASH (file[length - 1]))
+      break;
+  return length;
+}
+
+
+/* In general, we can't use the builtin 'dirname' function if available,
+   since it has different meanings in different environments.
+   In some environments the builtin 'dirname' modifies its argument.
+
+   Return the leading directories part of FILE, allocated with malloc.
+   Works properly even if there are trailing slashes (by effectively
+   ignoring them).  Return NULL on failure.
+
+   If lstat (FILE) would succeed, then { chdir (dir_name (FILE));
+   lstat (base_name (FILE)); } will access the same file.  Likewise,
+   if the sequence { chdir (dir_name (FILE));
+   rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE
+   to "foo" in the same directory FILE was in.  */
+
+char *
+mdir_name (char const *file)
+{
+  size_t length = dir_len (file);
+  bool append_dot = (length == 0
+                     || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+                         && length == FILE_SYSTEM_PREFIX_LEN (file)
+                         && file[2] != '\0' && ! ISSLASH (file[2])));
+  char *dir = malloc (length + append_dot + 1);
+  if (!dir)
+    return NULL;
+  memcpy (dir, file, length);
+  if (append_dot)
+    dir[length++] = '.';
+  dir[length] = '\0';
+  return dir;
+}
diff --git a/lib/dirname.c b/lib/dirname.c
index e2b9d64..627c164 100644
--- a/lib/dirname.c
+++ b/lib/dirname.c
@@ -1,12 +1,12 @@
 /* dirname.c -- return all but the last element in a file name
 
-   Copyright (C) 1990, 1998, 2000, 2001, 2003, 2004, 2005 Free Software
+   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2012 Free Software
    Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,108 +14,25 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "dirname.h"
 
+#include <stdlib.h>
 #include <string.h>
 #include "xalloc.h"
 
-/* Return the length of `dirname (FILE)', or zero if FILE is
-   in the working directory.  Works properly even if
-   there are trailing slashes (by effectively ignoring them).  */
-size_t
-dir_len (char const *file)
-{
-  size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file);
-  size_t length;
-
-  /* Strip the basename and any redundant slashes before it.  */
-  for (length = base_name (file) - file;  prefix_length < length;  length--)
-    if (! ISSLASH (file[length - 1]))
-      return length;
-
-  /* But don't strip the only slash from "/".  */
-  return prefix_length + ISSLASH (file[prefix_length]);
-}
-
-/* Return the leading directories part of FILE,
-   allocated with xmalloc.
-   Works properly even if there are trailing slashes
-   (by effectively ignoring them).  */
+/* Just like mdir_name (dirname-lgpl.c), except, rather than
+   returning NULL upon malloc failure, here, we report the
+   "memory exhausted" condition and exit.  */
 
 char *
 dir_name (char const *file)
 {
-  size_t length = dir_len (file);
-  bool append_dot = (length == FILE_SYSTEM_PREFIX_LEN (file));
-  char *dir = xmalloc (length + append_dot + 1);
-  memcpy (dir, file, length);
-  if (append_dot)
-    dir[length++] = '.';
-  dir[length] = 0;
-  return dir;
+  char *result = mdir_name (file);
+  if (!result)
+    xalloc_die ();
+  return result;
 }
-
-#ifdef TEST_DIRNAME
-/*
-
-Run the test like this (expect no output):
-  gcc -DHAVE_CONFIG_H -DTEST_DIRNAME -I.. -O -Wall \
-     basename.c dirname.c xmalloc.c error.c
-  sed -n '/^BEGIN-DATA$/,/^END-DATA$/p' dirname.c|grep -v DATA|./a.out
-
-If it's been built on a DOS or Windows platforms, run another test like
-this (again, expect no output):
-  sed -n '/^BEGIN-DOS-DATA$/,/^END-DOS-DATA$/p' dirname.c|grep -v DATA|./a.out
-
-BEGIN-DATA
-foo//// .
-bar/foo//// bar
-foo/ .
-/ /
-. .
-a .
-END-DATA
-
-BEGIN-DOS-DATA
-c:///// c:/
-c:/ c:/
-c:/. c:/
-c:foo c:.
-c:foo/bar c:foo
-END-DOS-DATA
-
-*/
-
-# define MAX_BUFF_LEN 1024
-# include <stdio.h>
-
-char *program_name;
-
-int
-main (int argc, char *argv[])
-{
-  char buff[MAX_BUFF_LEN + 1];
-
-  program_name = argv[0];
-
-  buff[MAX_BUFF_LEN] = 0;
-  while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
-    {
-      char file[MAX_BUFF_LEN];
-      char expected_result[MAX_BUFF_LEN];
-      char const *result;
-      sscanf (buff, "%s %s", file, expected_result);
-      result = dir_name (file);
-      if (strcmp (result, expected_result))
-	printf ("%s: got %s, expected %s\n", file, result, expected_result);
-    }
-  return 0;
-}
-#endif
diff --git a/lib/dirname.h b/lib/dirname.h
index 1688ae8..51a685c 100644
--- a/lib/dirname.h
+++ b/lib/dirname.h
@@ -1,11 +1,12 @@
 /*  Take file names apart into directory and base names.
 
-    Copyright (C) 1998, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
+    Copyright (C) 1998, 2001, 2003-2006, 2009-2012 Free Software Foundation,
+    Inc.
 
-    This program is free software; you can redistribute it and/or modify
+    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.
+    the Free Software Foundation; either version 3 of the License, 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
@@ -13,34 +14,32 @@
     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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef DIRNAME_H_
 # define DIRNAME_H_ 1
 
 # include <stdbool.h>
 # include <stddef.h>
+# include "dosname.h"
 
 # ifndef DIRECTORY_SEPARATOR
 #  define DIRECTORY_SEPARATOR '/'
 # endif
 
-# ifndef ISSLASH
-#  define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
+#  define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
 # endif
 
-# ifndef FILE_SYSTEM_PREFIX_LEN
-#  define FILE_SYSTEM_PREFIX_LEN(File_name) 0
-# endif
-
-# define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)])
-# define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F))
-
+# if GNULIB_DIRNAME
 char *base_name (char const *file);
 char *dir_name (char const *file);
-size_t base_len (char const *file);
-size_t dir_len (char const *file);
+# endif
+
+char *mdir_name (char const *file);
+size_t base_len (char const *file) _GL_ATTRIBUTE_PURE;
+size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE;
+char *last_component (char const *file) _GL_ATTRIBUTE_PURE;
 
 bool strip_trailing_slashes (char *file);
 
diff --git a/lib/dosname.h b/lib/dosname.h
new file mode 100644
index 0000000..0468ce4
--- /dev/null
+++ b/lib/dosname.h
@@ -0,0 +1,53 @@
+/* File names on MS-DOS/Windows systems.
+
+   Copyright (C) 2000-2001, 2004-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+   From Paul Eggert and Jim Meyering.  */
+
+#ifndef _DOSNAME_H
+#define _DOSNAME_H
+
+#if (defined _WIN32 || defined __WIN32__ ||     \
+     defined __MSDOS__ || defined __CYGWIN__ || \
+     defined __EMX__ || defined __DJGPP__)
+   /* This internal macro assumes ASCII, but all hosts that support drive
+      letters use ASCII.  */
+# define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a'  \
+                              <= 'z' - 'a')
+# define FILE_SYSTEM_PREFIX_LEN(Filename) \
+          (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0)
+# ifndef __CYGWIN__
+#  define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1
+# endif
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#else
+# define FILE_SYSTEM_PREFIX_LEN(Filename) 0
+# define ISSLASH(C) ((C) == '/')
+#endif
+
+#ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0
+#endif
+
+#if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+#  define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)])
+# else
+#  define IS_ABSOLUTE_FILE_NAME(F)                              \
+     (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0)
+#endif
+#define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F))
+
+#endif /* DOSNAME_H_ */
diff --git a/lib/dup-safer-flag.c b/lib/dup-safer-flag.c
new file mode 100644
index 0000000..e4d1b21
--- /dev/null
+++ b/lib/dup-safer-flag.c
@@ -0,0 +1,38 @@
+/* Duplicate a file descriptor result, avoiding clobbering
+   STD{IN,OUT,ERR}_FILENO, with specific flags.
+
+   Copyright (C) 2001, 2004-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert and Eric Blake.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistd-safer.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+
+/* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or
+   STDERR_FILENO.  If FLAG contains O_CLOEXEC, behave like
+   fcntl(F_DUPFD_CLOEXEC) rather than fcntl(F_DUPFD).  */
+
+int
+dup_safer_flag (int fd, int flag)
+{
+  return fcntl (fd, (flag & O_CLOEXEC) ? F_DUPFD_CLOEXEC : F_DUPFD,
+                STDERR_FILENO + 1);
+}
diff --git a/lib/dup-safer.c b/lib/dup-safer.c
index 8cbee70..0f5d3be 100644
--- a/lib/dup-safer.c
+++ b/lib/dup-safer.c
@@ -1,10 +1,11 @@
 /* Invoke dup, but avoid some glitches.
-   Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   Copyright (C) 2001, 2004-2006, 2009-2012 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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -12,23 +13,16 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "unistd-safer.h"
 
 #include <fcntl.h>
-
 #include <unistd.h>
-#ifndef STDERR_FILENO
-# define STDERR_FILENO 2
-#endif
 
 /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or
    STDERR_FILENO.  */
@@ -36,11 +30,5 @@
 int
 dup_safer (int fd)
 {
-#ifdef F_DUPFD
   return fcntl (fd, F_DUPFD, STDERR_FILENO + 1);
-#else
-  /* fd_safer calls us back, but eventually the recursion unwinds and
-     does the right thing.  */
-  return fd_safer (dup (fd));
-#endif
 }
diff --git a/lib/dup2.c b/lib/dup2.c
new file mode 100644
index 0000000..f6d0f1c
--- /dev/null
+++ b/lib/dup2.c
@@ -0,0 +1,157 @@
+/* Duplicate an open file descriptor to a specified file descriptor.
+
+   Copyright (C) 1999, 2004-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* written by Paul Eggert */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#include <errno.h>
+#include <fcntl.h>
+
+#if HAVE_DUP2
+
+# undef dup2
+
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+/* Get declarations of the native Windows API functions.  */
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+
+#  include "msvc-inval.h"
+
+/* Get _get_osfhandle.  */
+#  include "msvc-nothrow.h"
+
+static int
+ms_windows_dup2 (int fd, int desired_fd)
+{
+  int result;
+
+  /* If fd is closed, mingw hangs on dup2 (fd, fd).  If fd is open,
+     dup2 (fd, fd) returns 0, but all further attempts to use fd in
+     future dup2 calls will hang.  */
+  if (fd == desired_fd)
+    {
+      if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE)
+        {
+          errno = EBADF;
+          return -1;
+        }
+      return fd;
+    }
+
+  /* Wine 1.0.1 return 0 when desired_fd is negative but not -1:
+     http://bugs.winehq.org/show_bug.cgi?id=21289 */
+  if (desired_fd < 0)
+    {
+      errno = EBADF;
+      return -1;
+    }
+
+  TRY_MSVC_INVAL
+    {
+      result = dup2 (fd, desired_fd);
+    }
+  CATCH_MSVC_INVAL
+    {
+      errno = EBADF;
+      result = -1;
+    }
+  DONE_MSVC_INVAL;
+
+  if (result == 0)
+    result = desired_fd;
+
+  return result;
+}
+
+#  define dup2 ms_windows_dup2
+
+# endif
+
+int
+rpl_dup2 (int fd, int desired_fd)
+{
+  int result;
+
+# ifdef F_GETFL
+  /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF.
+     On Cygwin 1.5.x, dup2 (1, 1) returns 0.
+     On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC.  */
+  if (fd == desired_fd)
+    return fcntl (fd, F_GETFL) == -1 ? -1 : fd;
+# endif
+
+  result = dup2 (fd, desired_fd);
+
+  /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x.  */
+  if (result == -1 && errno == EMFILE)
+    errno = EBADF;
+# if REPLACE_FCHDIR
+  if (fd != desired_fd && result != -1)
+    result = _gl_register_dup (fd, result);
+# endif
+  return result;
+}
+
+#else /* !HAVE_DUP2 */
+
+/* On older platforms, dup2 did not exist.  */
+
+# ifndef F_DUPFD
+static int
+dupfd (int fd, int desired_fd)
+{
+  int duplicated_fd = dup (fd);
+  if (duplicated_fd < 0 || duplicated_fd == desired_fd)
+    return duplicated_fd;
+  else
+    {
+      int r = dupfd (fd, desired_fd);
+      int e = errno;
+      close (duplicated_fd);
+      errno = e;
+      return r;
+    }
+}
+# endif
+
+int
+dup2 (int fd, int desired_fd)
+{
+  int result = fcntl (fd, F_GETFL) < 0 ? -1 : fd;
+  if (result == -1 || fd == desired_fd)
+    return result;
+  close (desired_fd);
+# ifdef F_DUPFD
+  result = fcntl (fd, F_DUPFD, desired_fd);
+#  if REPLACE_FCHDIR
+  if (0 <= result)
+    result = _gl_register_dup (fd, result);
+#  endif
+# else
+  result = dupfd (fd, desired_fd);
+# endif
+  if (result == -1 && (errno == EMFILE || errno == EINVAL))
+    errno = EBADF;
+  return result;
+}
+#endif /* !HAVE_DUP2 */
diff --git a/lib/ebitset.c b/lib/ebitset.c
index cedf0e2..9f35499 100644
--- a/lib/ebitset.c
+++ b/lib/ebitset.c
@@ -1,10 +1,12 @@
 /* Functions to support expandable bitsets.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,14 +15,12 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "ebitset.h"
+
 #include "obstack.h"
 #include <stdlib.h>
 #include <string.h>
@@ -1335,17 +1335,12 @@
 bitset
 ebitset_init (bitset bset, bitset_bindex n_bits)
 {
-  bitset_windex size;
-
   bset->b.vtable = &ebitset_vtable;
 
   bset->b.csize = EBITSET_ELT_WORDS;
 
   EBITSET_ZERO_SET (bset);
 
-  size = n_bits ? (n_bits + EBITSET_ELT_BITS - 1) / EBITSET_ELT_BITS
-    : EBITSET_INITIAL_SIZE;
-
   EBITSET_ASIZE (bset) = 0;
   EBITSET_ELTS (bset) = 0;
   ebitset_resize (bset, n_bits);
diff --git a/lib/ebitset.h b/lib/ebitset.h
index dc60273..a25ed28 100644
--- a/lib/ebitset.h
+++ b/lib/ebitset.h
@@ -1,20 +1,21 @@
 /* Functions to support ebitsets.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _EBITSET_H
 #define _EBITSET_H
diff --git a/lib/errno.in.h b/lib/errno.in.h
new file mode 100644
index 0000000..f9612c3
--- /dev/null
+++ b/lib/errno.in.h
@@ -0,0 +1,279 @@
+/* A POSIX-like <errno.h>.
+
+   Copyright (C) 2008-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_ERRNO_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_ERRNO_H@
+
+#ifndef _@GUARD_PREFIX@_ERRNO_H
+#define _@GUARD_PREFIX@_ERRNO_H
+
+
+/* On native Windows platforms, many macros are not defined.  */
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+/* These are the same values as defined by MSVC 10, for interoperability.  */
+
+#  ifndef ENOMSG
+#   define ENOMSG    122
+#   define GNULIB_defined_ENOMSG 1
+#  endif
+
+#  ifndef EIDRM
+#   define EIDRM     111
+#   define GNULIB_defined_EIDRM 1
+#  endif
+
+#  ifndef ENOLINK
+#   define ENOLINK   121
+#   define GNULIB_defined_ENOLINK 1
+#  endif
+
+#  ifndef EPROTO
+#   define EPROTO    134
+#   define GNULIB_defined_EPROTO 1
+#  endif
+
+#  ifndef EBADMSG
+#   define EBADMSG   104
+#   define GNULIB_defined_EBADMSG 1
+#  endif
+
+#  ifndef EOVERFLOW
+#   define EOVERFLOW 132
+#   define GNULIB_defined_EOVERFLOW 1
+#  endif
+
+#  ifndef ENOTSUP
+#   define ENOTSUP   129
+#   define GNULIB_defined_ENOTSUP 1
+#  endif
+
+#  ifndef ENETRESET
+#   define ENETRESET 117
+#   define GNULIB_defined_ENETRESET 1
+#  endif
+
+#  ifndef ECONNABORTED
+#   define ECONNABORTED 106
+#   define GNULIB_defined_ECONNABORTED 1
+#  endif
+
+#  ifndef ECANCELED
+#   define ECANCELED 105
+#   define GNULIB_defined_ECANCELED 1
+#  endif
+
+#  ifndef EOWNERDEAD
+#   define EOWNERDEAD 133
+#   define GNULIB_defined_EOWNERDEAD 1
+#  endif
+
+#  ifndef ENOTRECOVERABLE
+#   define ENOTRECOVERABLE 127
+#   define GNULIB_defined_ENOTRECOVERABLE 1
+#  endif
+
+#  ifndef EINPROGRESS
+#   define EINPROGRESS     112
+#   define EALREADY        103
+#   define ENOTSOCK        128
+#   define EDESTADDRREQ    109
+#   define EMSGSIZE        115
+#   define EPROTOTYPE      136
+#   define ENOPROTOOPT     123
+#   define EPROTONOSUPPORT 135
+#   define EOPNOTSUPP      130
+#   define EAFNOSUPPORT    102
+#   define EADDRINUSE      100
+#   define EADDRNOTAVAIL   101
+#   define ENETDOWN        116
+#   define ENETUNREACH     118
+#   define ECONNRESET      108
+#   define ENOBUFS         119
+#   define EISCONN         113
+#   define ENOTCONN        126
+#   define ETIMEDOUT       138
+#   define ECONNREFUSED    107
+#   define ELOOP           114
+#   define EHOSTUNREACH    110
+#   define EWOULDBLOCK     140
+#   define GNULIB_defined_ESOCK 1
+#  endif
+
+#  ifndef ETXTBSY
+#   define ETXTBSY         139
+#   define ENODATA         120  /* not required by POSIX */
+#   define ENOSR           124  /* not required by POSIX */
+#   define ENOSTR          125  /* not required by POSIX */
+#   define ETIME           137  /* not required by POSIX */
+#   define EOTHER          131  /* not required by POSIX */
+#   define GNULIB_defined_ESTREAMS 1
+#  endif
+
+/* These are intentionally the same values as the WSA* error numbers, defined
+   in <winsock2.h>.  */
+#  define ESOCKTNOSUPPORT 10044  /* not required by POSIX */
+#  define EPFNOSUPPORT    10046  /* not required by POSIX */
+#  define ESHUTDOWN       10058  /* not required by POSIX */
+#  define ETOOMANYREFS    10059  /* not required by POSIX */
+#  define EHOSTDOWN       10064  /* not required by POSIX */
+#  define EPROCLIM        10067  /* not required by POSIX */
+#  define EUSERS          10068  /* not required by POSIX */
+#  define EDQUOT          10069
+#  define ESTALE          10070
+#  define EREMOTE         10071  /* not required by POSIX */
+#  define GNULIB_defined_EWINSOCK 1
+
+# endif
+
+
+/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros
+   EMULTIHOP, ENOLINK, EOVERFLOW are not defined.  */
+# if @EMULTIHOP_HIDDEN@
+#  define EMULTIHOP @EMULTIHOP_VALUE@
+#  define GNULIB_defined_EMULTIHOP 1
+# endif
+# if @ENOLINK_HIDDEN@
+#  define ENOLINK   @ENOLINK_VALUE@
+#  define GNULIB_defined_ENOLINK 1
+# endif
+# if @EOVERFLOW_HIDDEN@
+#  define EOVERFLOW @EOVERFLOW_VALUE@
+#  define GNULIB_defined_EOVERFLOW 1
+# endif
+
+
+/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK,
+   EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined.
+   Likewise, on NonStop Kernel, EDQUOT is not defined.
+   Define them here.  Values >= 2000 seem safe to use: Solaris ESTALE = 151,
+   HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133.
+
+   Note: When one of these systems defines some of these macros some day,
+   binaries will have to be recompiled so that they recognizes the new
+   errno values from the system.  */
+
+# ifndef ENOMSG
+#  define ENOMSG    2000
+#  define GNULIB_defined_ENOMSG 1
+# endif
+
+# ifndef EIDRM
+#  define EIDRM     2001
+#  define GNULIB_defined_EIDRM 1
+# endif
+
+# ifndef ENOLINK
+#  define ENOLINK   2002
+#  define GNULIB_defined_ENOLINK 1
+# endif
+
+# ifndef EPROTO
+#  define EPROTO    2003
+#  define GNULIB_defined_EPROTO 1
+# endif
+
+# ifndef EMULTIHOP
+#  define EMULTIHOP 2004
+#  define GNULIB_defined_EMULTIHOP 1
+# endif
+
+# ifndef EBADMSG
+#  define EBADMSG   2005
+#  define GNULIB_defined_EBADMSG 1
+# endif
+
+# ifndef EOVERFLOW
+#  define EOVERFLOW 2006
+#  define GNULIB_defined_EOVERFLOW 1
+# endif
+
+# ifndef ENOTSUP
+#  define ENOTSUP   2007
+#  define GNULIB_defined_ENOTSUP 1
+# endif
+
+# ifndef ENETRESET
+#  define ENETRESET 2011
+#  define GNULIB_defined_ENETRESET 1
+# endif
+
+# ifndef ECONNABORTED
+#  define ECONNABORTED 2012
+#  define GNULIB_defined_ECONNABORTED 1
+# endif
+
+# ifndef ESTALE
+#  define ESTALE    2009
+#  define GNULIB_defined_ESTALE 1
+# endif
+
+# ifndef EDQUOT
+#  define EDQUOT 2010
+#  define GNULIB_defined_EDQUOT 1
+# endif
+
+# ifndef ECANCELED
+#  define ECANCELED 2008
+#  define GNULIB_defined_ECANCELED 1
+# endif
+
+/* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not
+   defined.  */
+
+# ifndef EOWNERDEAD
+#  if defined __sun
+    /* Use the same values as defined for Solaris >= 8, for
+       interoperability.  */
+#   define EOWNERDEAD      58
+#   define ENOTRECOVERABLE 59
+#  elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+    /* We have a conflict here: pthreads-win32 defines these values
+       differently than MSVC 10.  It's hairy to decide which one to use.  */
+#   if defined __MINGW32__ && !defined USE_WINDOWS_THREADS
+     /* Use the same values as defined by pthreads-win32, for
+        interoperability.  */
+#    define EOWNERDEAD      43
+#    define ENOTRECOVERABLE 44
+#   else
+     /* Use the same values as defined by MSVC 10, for
+        interoperability.  */
+#    define EOWNERDEAD      133
+#    define ENOTRECOVERABLE 127
+#   endif
+#  else
+#   define EOWNERDEAD      2013
+#   define ENOTRECOVERABLE 2014
+#  endif
+#  define GNULIB_defined_EOWNERDEAD 1
+#  define GNULIB_defined_ENOTRECOVERABLE 1
+# endif
+
+# ifndef EILSEQ
+#  define EILSEQ 2015
+#  define GNULIB_defined_EILSEQ 1
+# endif
+
+#endif /* _@GUARD_PREFIX@_ERRNO_H */
+#endif /* _@GUARD_PREFIX@_ERRNO_H */
diff --git a/lib/error.c b/lib/error.c
index 45698be..7d2bc71 100644
--- a/lib/error.c
+++ b/lib/error.c
@@ -1,24 +1,23 @@
 /* Error handler for noninteractive utilities
-   Copyright (C) 1990-1998, 2000-2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1990-1998, 2000-2007, 2009-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
 
-#ifdef HAVE_CONFIG_H
+#if !_LIBC
 # include <config.h>
 #endif
 
@@ -31,9 +30,13 @@
 
 #if !_LIBC && ENABLE_NLS
 # include "gettext.h"
+# define _(msgid) gettext (msgid)
 #endif
 
 #ifdef _LIBC
+# include <libintl.h>
+# include <stdbool.h>
+# include <stdint.h>
 # include <wchar.h>
 # define mbsrtowcs __mbsrtowcs
 #endif
@@ -51,7 +54,7 @@
    function without parameters instead.  */
 void (*error_print_progname) (void);
 
-/* This variable is incremented each time `error' is called.  */
+/* This variable is incremented each time 'error' is called.  */
 unsigned int error_message_count;
 
 #ifdef _LIBC
@@ -59,15 +62,16 @@
 
 # define program_name program_invocation_name
 # include <errno.h>
+# include <limits.h>
 # include <libio/libioP.h>
 
-/* In GNU libc we want do not want to use the common name `error' directly.
+/* In GNU libc we want do not want to use the common name 'error' directly.
    Instead make it a weak alias.  */
 extern void __error (int status, int errnum, const char *message, ...)
      __attribute__ ((__format__ (__printf__, 3, 4)));
 extern void __error_at_line (int status, int errnum, const char *file_name,
-			     unsigned int line_number, const char *message,
-			     ...)
+                             unsigned int line_number, const char *message,
+                             ...)
      __attribute__ ((__format__ (__printf__, 5, 6)));;
 # define error __error
 # define error_at_line __error_at_line
@@ -81,15 +85,29 @@
 
 #else /* not _LIBC */
 
-# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
+# include <fcntl.h>
+# include <unistd.h>
+
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Get declarations of the native Windows API functions.  */
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+/* Get _get_osfhandle.  */
+#  include "msvc-nothrow.h"
+# endif
+
+/* The gnulib override of fcntl is not needed in this file.  */
+# undef fcntl
+
+# if !HAVE_DECL_STRERROR_R
 #  ifndef HAVE_DECL_STRERROR_R
 "this configure-time declaration test was not run"
 #  endif
+#  if STRERROR_R_CHAR_P
 char *strerror_r ();
-# endif
-
-# ifndef SIZE_MAX
-#  define SIZE_MAX ((size_t) -1)
+#  else
+int strerror_r ();
+#  endif
 # endif
 
 /* The calling program should define program_name and set it to the
@@ -98,13 +116,58 @@
 
 # if HAVE_STRERROR_R || defined strerror_r
 #  define __strerror_r strerror_r
+# endif /* HAVE_STRERROR_R || defined strerror_r */
+#endif  /* not _LIBC */
+
+#if !_LIBC
+/* Return non-zero if FD is open.  */
+static int
+is_open (int fd)
+{
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+  /* On native Windows: The initial state of unassigned standard file
+     descriptors is that they are open but point to an INVALID_HANDLE_VALUE.
+     There is no fcntl, and the gnulib replacement fcntl does not support
+     F_GETFL.  */
+  return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE;
+# else
+#  ifndef F_GETFL
+#   error Please port fcntl to your platform
+#  endif
+  return 0 <= fcntl (fd, F_GETFL);
 # endif
-#endif	/* not _LIBC */
+}
+#endif
+
+static void
+flush_stdout (void)
+{
+#if !_LIBC
+  int stdout_fd;
+
+# if GNULIB_FREOPEN_SAFER
+  /* Use of gnulib's freopen-safer module normally ensures that
+       fileno (stdout) == 1
+     whenever stdout is open.  */
+  stdout_fd = STDOUT_FILENO;
+# else
+  /* POSIX states that fileno (stdout) after fclose is unspecified.  But in
+     practice it is not a problem, because stdout is statically allocated and
+     the fd of a FILE stream is stored as a field in its allocated memory.  */
+  stdout_fd = fileno (stdout);
+# endif
+  /* POSIX states that fflush (stdout) after fclose is unspecified; it
+     is safe in glibc, but not on all other platforms.  fflush (NULL)
+     is always defined, but too draconian.  */
+  if (0 <= stdout_fd && is_open (stdout_fd))
+#endif
+    fflush (stdout);
+}
 
 static void
 print_errno_message (int errnum)
 {
-  char const *s = NULL;
+  char const *s;
 
 #if defined HAVE_STRERROR_R || _LIBC
   char errbuf[1024];
@@ -113,23 +176,23 @@
 # else
   if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
     s = errbuf;
+  else
+    s = 0;
 # endif
+#else
+  s = strerror (errnum);
 #endif
 
 #if !_LIBC
-  if (! s && ! (s = strerror (errnum)))
+  if (! s)
     s = _("Unknown system error");
 #endif
 
 #if _LIBC
-  if (_IO_fwide (stderr, 0) > 0)
-    {
-      __fwprintf (stderr, L": %s", s);
-      return;
-    }
-#endif
-
+  __fxprintf (NULL, ": %s", s);
+#else
   fprintf (stderr, ": %s", s);
+#endif
 }
 
 static void
@@ -140,26 +203,65 @@
     {
 # define ALLOCA_LIMIT 2000
       size_t len = strlen (message) + 1;
-      const wchar_t *wmessage = L"out of memory";
-      wchar_t *wbuf = (len < ALLOCA_LIMIT
-		       ? alloca (len * sizeof *wbuf)
-		       : len <= SIZE_MAX / sizeof *wbuf
-		       ? malloc (len * sizeof *wbuf)
-		       : NULL);
+      wchar_t *wmessage = NULL;
+      mbstate_t st;
+      size_t res;
+      const char *tmp;
+      bool use_malloc = false;
 
-      if (wbuf)
-	{
-	  size_t res;
-	  mbstate_t st;
-	  const char *tmp = message;
-	  memset (&st, '\0', sizeof (st));
-	  res = mbsrtowcs (wbuf, &tmp, len, &st);
-	  wmessage = res == (size_t) -1 ? L"???" : wbuf;
-	}
+      while (1)
+        {
+          if (__libc_use_alloca (len * sizeof (wchar_t)))
+            wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
+          else
+            {
+              if (!use_malloc)
+                wmessage = NULL;
+
+              wchar_t *p = (wchar_t *) realloc (wmessage,
+                                                len * sizeof (wchar_t));
+              if (p == NULL)
+                {
+                  free (wmessage);
+                  fputws_unlocked (L"out of memory\n", stderr);
+                  return;
+                }
+              wmessage = p;
+              use_malloc = true;
+            }
+
+          memset (&st, '\0', sizeof (st));
+          tmp = message;
+
+          res = mbsrtowcs (wmessage, &tmp, len, &st);
+          if (res != len)
+            break;
+
+          if (__builtin_expect (len >= SIZE_MAX / 2, 0))
+            {
+              /* This really should not happen if everything is fine.  */
+              res = (size_t) -1;
+              break;
+            }
+
+          len *= 2;
+        }
+
+      if (res == (size_t) -1)
+        {
+          /* The string cannot be converted.  */
+          if (use_malloc)
+            {
+              free (wmessage);
+              use_malloc = false;
+            }
+          wmessage = (wchar_t *) L"???";
+        }
 
       __vfwprintf (stderr, wmessage, args);
-      if (! (len < ALLOCA_LIMIT))
-	free (wbuf);
+
+      if (use_malloc)
+        free (wmessage);
     }
   else
 #endif
@@ -170,11 +272,10 @@
   if (errnum)
     print_errno_message (errnum);
 #if _LIBC
-  if (_IO_fwide (stderr, 0) > 0)
-    putwc (L'\n', stderr);
-  else
+  __fxprintf (NULL, "\n");
+#else
+  putc ('\n', stderr);
 #endif
-    putc ('\n', stderr);
   fflush (stderr);
   if (status)
     exit (status);
@@ -195,10 +296,10 @@
      cancellation.  Therefore disable cancellation for now.  */
   int state = PTHREAD_CANCEL_ENABLE;
   __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
-		   0);
+                   0);
 #endif
 
-  fflush (stdout);
+  flush_stdout ();
 #ifdef _LIBC
   _IO_flockfile (stderr);
 #endif
@@ -207,11 +308,10 @@
   else
     {
 #if _LIBC
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s: ", program_name);
-      else
+      __fxprintf (NULL, "%s: ", program_name);
+#else
+      fprintf (stderr, "%s: ", program_name);
 #endif
-	fprintf (stderr, "%s: ", program_name);
     }
 
   va_start (args, message);
@@ -231,7 +331,7 @@
 
 void
 error_at_line (int status, int errnum, const char *file_name,
-	       unsigned int line_number, const char *message, ...)
+               unsigned int line_number, const char *message, ...)
 {
   va_list args;
 
@@ -241,10 +341,10 @@
       static unsigned int old_line_number;
 
       if (old_line_number == line_number
-	  && (file_name == old_file_name
-	      || strcmp (old_file_name, file_name) == 0))
-	/* Simply return and print nothing.  */
-	return;
+          && (file_name == old_file_name
+              || strcmp (old_file_name, file_name) == 0))
+        /* Simply return and print nothing.  */
+        return;
 
       old_file_name = file_name;
       old_line_number = line_number;
@@ -255,10 +355,10 @@
      cancellation.  Therefore disable cancellation for now.  */
   int state = PTHREAD_CANCEL_ENABLE;
   __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
-		   0);
+                   0);
 #endif
 
-  fflush (stdout);
+  flush_stdout ();
 #ifdef _LIBC
   _IO_flockfile (stderr);
 #endif
@@ -267,22 +367,19 @@
   else
     {
 #if _LIBC
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s: ", program_name);
-      else
+      __fxprintf (NULL, "%s:", program_name);
+#else
+      fprintf (stderr, "%s:", program_name);
 #endif
-	fprintf (stderr, "%s:", program_name);
     }
 
-  if (file_name != NULL)
-    {
 #if _LIBC
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s:%d: ", file_name, line_number);
-      else
+  __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ",
+              file_name, line_number);
+#else
+  fprintf (stderr, file_name != NULL ? "%s:%d: " : " ",
+           file_name, line_number);
 #endif
-	fprintf (stderr, "%s:%d: ", file_name, line_number);
-    }
 
   va_start (args, message);
   error_tail (status, errnum, message, args);
diff --git a/lib/error.h b/lib/error.h
index e5220a2..9c2cb8b 100644
--- a/lib/error.h
+++ b/lib/error.h
@@ -1,65 +1,64 @@
 /* Declaration for error-reporting function
-   Copyright (C) 1995, 1996, 1997, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1995-1997, 2003, 2006, 2008-2012 Free Software Foundation,
+   Inc.
    This file is part of the GNU C Library.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _ERROR_H
 #define _ERROR_H 1
 
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-#  define __format__ format
-#  define __printf__ printf
-# endif
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
 #endif
 
-#ifdef	__cplusplus
+#ifdef __cplusplus
 extern "C" {
 #endif
 
-/* Print a message with `fprintf (stderr, FORMAT, ...)';
+/* Print a message with 'fprintf (stderr, FORMAT, ...)';
    if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
-   If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
+   If STATUS is nonzero, terminate the program with 'exit (STATUS)'.  */
 
 extern void error (int __status, int __errnum, const char *__format, ...)
-     __attribute__ ((__format__ (__printf__, 3, 4)));
+     _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4));
 
 extern void error_at_line (int __status, int __errnum, const char *__fname,
-			   unsigned int __lineno, const char *__format, ...)
-     __attribute__ ((__format__ (__printf__, 5, 6)));
+                           unsigned int __lineno, const char *__format, ...)
+     _GL_ATTRIBUTE_FORMAT ((__printf__, 5, 6));
 
 /* If NULL, error will flush stdout, then print on stderr the program
    name, a colon and a space.  Otherwise, error will call this
    function without parameters instead.  */
 extern void (*error_print_progname) (void);
 
-/* This variable is incremented each time `error' is called.  */
+/* This variable is incremented each time 'error' is called.  */
 extern unsigned int error_message_count;
 
 /* Sometimes we want to have at most one error per line.  This
    variable controls whether this mode is selected or not.  */
 extern int error_one_per_line;
 
-#ifdef	__cplusplus
+#ifdef __cplusplus
 }
 #endif
 
diff --git a/lib/exit.h b/lib/exit.h
deleted file mode 100644
index 9dbfb7c..0000000
--- a/lib/exit.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* exit() function.
-   Copyright (C) 1995, 2001 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _EXIT_H
-#define _EXIT_H
-
-/* Get exit() declaration.  */
-#include <stdlib.h>
-
-/* Some systems do not define EXIT_*, even with STDC_HEADERS.  */
-#ifndef EXIT_SUCCESS
-# define EXIT_SUCCESS 0
-#endif
-#ifndef EXIT_FAILURE
-# define EXIT_FAILURE 1
-#endif
-
-#endif /* _EXIT_H */
diff --git a/lib/exitfail.c b/lib/exitfail.c
index 27d38c3..fdd674c 100644
--- a/lib/exitfail.c
+++ b/lib/exitfail.c
@@ -1,11 +1,11 @@
 /* Failure exit status
 
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2007, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,15 +13,12 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; see the file COPYING.
-   If not, write to the Free Software Foundation,
-   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "exitfail.h"
-#include "exit.h"
+
+#include <stdlib.h>
 
 int volatile exit_failure = EXIT_FAILURE;
diff --git a/lib/exitfail.h b/lib/exitfail.h
index e46cf9c..074f212 100644
--- a/lib/exitfail.h
+++ b/lib/exitfail.h
@@ -1,11 +1,11 @@
 /* Failure exit status
 
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,8 +13,6 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; see the file COPYING.
-   If not, write to the Free Software Foundation,
-   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 extern int volatile exit_failure;
diff --git a/lib/fatal-signal.c b/lib/fatal-signal.c
new file mode 100644
index 0000000..27e9d82
--- /dev/null
+++ b/lib/fatal-signal.c
@@ -0,0 +1,286 @@
+/* Emergency actions in case of a fatal signal.
+   Copyright (C) 2003-2004, 2006-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#include <config.h>
+
+/* Specification.  */
+#include "fatal-signal.h"
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include "sig-handler.h"
+#include "xalloc.h"
+
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
+/* ========================================================================= */
+
+
+/* The list of fatal signals.
+   These are those signals whose default action is to terminate the process
+   without a core dump, except
+     SIGKILL - because it cannot be caught,
+     SIGALRM SIGUSR1 SIGUSR2 SIGPOLL SIGIO SIGLOST - because applications
+       often use them for their own purpose,
+     SIGPROF SIGVTALRM - because they are used for profiling,
+     SIGSTKFLT - because it is more similar to SIGFPE, SIGSEGV, SIGBUS,
+     SIGSYS - because it is more similar to SIGABRT, SIGSEGV,
+     SIGPWR - because it of too special use,
+     SIGRTMIN...SIGRTMAX - because they are reserved for application use.
+   plus
+     SIGXCPU, SIGXFSZ - because they are quite similar to SIGTERM.  */
+
+static int fatal_signals[] =
+  {
+    /* ISO C 99 signals.  */
+#ifdef SIGINT
+    SIGINT,
+#endif
+#ifdef SIGTERM
+    SIGTERM,
+#endif
+    /* POSIX:2001 signals.  */
+#ifdef SIGHUP
+    SIGHUP,
+#endif
+#ifdef SIGPIPE
+    SIGPIPE,
+#endif
+    /* BSD signals.  */
+#ifdef SIGXCPU
+    SIGXCPU,
+#endif
+#ifdef SIGXFSZ
+    SIGXFSZ,
+#endif
+    /* Native Windows signals.  */
+#ifdef SIGBREAK
+    SIGBREAK,
+#endif
+    0
+  };
+
+#define num_fatal_signals (SIZEOF (fatal_signals) - 1)
+
+/* Eliminate signals whose signal handler is SIG_IGN.  */
+
+static void
+init_fatal_signals (void)
+{
+  static bool fatal_signals_initialized = false;
+  if (!fatal_signals_initialized)
+    {
+      size_t i;
+
+      for (i = 0; i < num_fatal_signals; i++)
+        {
+          struct sigaction action;
+
+          if (sigaction (fatal_signals[i], NULL, &action) >= 0
+              && get_handler (&action) == SIG_IGN)
+            fatal_signals[i] = -1;
+        }
+
+      fatal_signals_initialized = true;
+    }
+}
+
+
+/* ========================================================================= */
+
+
+typedef void (*action_t) (void);
+
+/* Type of an entry in the actions array.
+   The 'action' field is accessed from within the fatal_signal_handler(),
+   therefore we mark it as 'volatile'.  */
+typedef struct
+{
+  volatile action_t action;
+}
+actions_entry_t;
+
+/* The registered cleanup actions.  */
+static actions_entry_t static_actions[32];
+static actions_entry_t * volatile actions = static_actions;
+static sig_atomic_t volatile actions_count = 0;
+static size_t actions_allocated = SIZEOF (static_actions);
+
+
+/* The saved signal handlers.
+   Size 32 would not be sufficient: On HP-UX, SIGXCPU = 33, SIGXFSZ = 34.  */
+static struct sigaction saved_sigactions[64];
+
+
+/* Uninstall the handlers.  */
+static void
+uninstall_handlers (void)
+{
+  size_t i;
+
+  for (i = 0; i < num_fatal_signals; i++)
+    if (fatal_signals[i] >= 0)
+      {
+        int sig = fatal_signals[i];
+        if (saved_sigactions[sig].sa_handler == SIG_IGN)
+          saved_sigactions[sig].sa_handler = SIG_DFL;
+        sigaction (sig, &saved_sigactions[sig], NULL);
+      }
+}
+
+
+/* The signal handler.  It gets called asynchronously.  */
+static void
+fatal_signal_handler (int sig)
+{
+  for (;;)
+    {
+      /* Get the last registered cleanup action, in a reentrant way.  */
+      action_t action;
+      size_t n = actions_count;
+      if (n == 0)
+        break;
+      n--;
+      actions_count = n;
+      action = actions[n].action;
+      /* Execute the action.  */
+      action ();
+    }
+
+  /* Now execute the signal's default action.
+     If the signal being delivered was blocked, the re-raised signal would be
+     delivered when this handler returns.  But the way we install this handler,
+     no signal is blocked, and the re-raised signal is delivered already
+     during raise().  */
+  uninstall_handlers ();
+  raise (sig);
+}
+
+
+/* Install the handlers.  */
+static void
+install_handlers (void)
+{
+  size_t i;
+  struct sigaction action;
+
+  action.sa_handler = &fatal_signal_handler;
+  /* If we get a fatal signal while executing fatal_signal_handler, enter
+     fatal_signal_handler recursively, since it is reentrant.  Hence no
+     SA_RESETHAND.  */
+  action.sa_flags = SA_NODEFER;
+  sigemptyset (&action.sa_mask);
+  for (i = 0; i < num_fatal_signals; i++)
+    if (fatal_signals[i] >= 0)
+      {
+        int sig = fatal_signals[i];
+
+        if (!(sig < sizeof (saved_sigactions) / sizeof (saved_sigactions[0])))
+          abort ();
+        sigaction (sig, &action, &saved_sigactions[sig]);
+      }
+}
+
+
+/* Register a cleanup function to be executed when a catchable fatal signal
+   occurs.  */
+void
+at_fatal_signal (action_t action)
+{
+  static bool cleanup_initialized = false;
+  if (!cleanup_initialized)
+    {
+      init_fatal_signals ();
+      install_handlers ();
+      cleanup_initialized = true;
+    }
+
+  if (actions_count == actions_allocated)
+    {
+      /* Extend the actions array.  Note that we cannot use xrealloc(),
+         because then the cleanup() function could access an already
+         deallocated array.  */
+      actions_entry_t *old_actions = actions;
+      size_t old_actions_allocated = actions_allocated;
+      size_t new_actions_allocated = 2 * actions_allocated;
+      actions_entry_t *new_actions =
+        XNMALLOC (new_actions_allocated, actions_entry_t);
+      size_t k;
+
+      /* Don't use memcpy() here, because memcpy takes non-volatile arguments
+         and is therefore not guaranteed to complete all memory stores before
+         the next statement.  */
+      for (k = 0; k < old_actions_allocated; k++)
+        new_actions[k] = old_actions[k];
+      actions = new_actions;
+      actions_allocated = new_actions_allocated;
+      /* Now we can free the old actions array.  */
+      if (old_actions != static_actions)
+        free (old_actions);
+    }
+  /* The two uses of 'volatile' in the types above (and ISO C 99 section
+     5.1.2.3.(5)) ensure that we increment the actions_count only after
+     the new action has been written to the memory location
+     actions[actions_count].  */
+  actions[actions_count].action = action;
+  actions_count++;
+}
+
+
+/* ========================================================================= */
+
+
+static sigset_t fatal_signal_set;
+
+static void
+init_fatal_signal_set (void)
+{
+  static bool fatal_signal_set_initialized = false;
+  if (!fatal_signal_set_initialized)
+    {
+      size_t i;
+
+      init_fatal_signals ();
+
+      sigemptyset (&fatal_signal_set);
+      for (i = 0; i < num_fatal_signals; i++)
+        if (fatal_signals[i] >= 0)
+          sigaddset (&fatal_signal_set, fatal_signals[i]);
+
+      fatal_signal_set_initialized = true;
+    }
+}
+
+/* Temporarily delay the catchable fatal signals.  */
+void
+block_fatal_signals (void)
+{
+  init_fatal_signal_set ();
+  sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL);
+}
+
+/* Stop delaying the catchable fatal signals.  */
+void
+unblock_fatal_signals (void)
+{
+  init_fatal_signal_set ();
+  sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL);
+}
diff --git a/lib/fatal-signal.h b/lib/fatal-signal.h
new file mode 100644
index 0000000..f6628d6
--- /dev/null
+++ b/lib/fatal-signal.h
@@ -0,0 +1,76 @@
+/* Emergency actions in case of a fatal signal.
+   Copyright (C) 2003-2004, 2009-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* It is often useful to do some cleanup action when a usually fatal signal
+   terminates the process, like removing a temporary file or killing a
+   subprocess that may be stuck waiting for a device, pipe or network input.
+   Such signals are SIGHUP, SIGINT, SIGPIPE, SIGTERM, and possibly others.
+   The limitation of this facility is that it cannot work for SIGKILL.
+
+   Signals with a SIG_IGN handler are considered to be non-fatal.  The
+   functions in this file assume that when a SIG_IGN handler is installed
+   for a signal, it was installed before any functions in this file were
+   called and it stays so for the whole lifetime of the process.  */
+
+/* Register a cleanup function to be executed when a catchable fatal signal
+   occurs.
+
+   Restrictions for the cleanup function:
+     - The cleanup function can do all kinds of system calls.
+     - It can also access application dependent memory locations and data
+       structures provided they are in a consistent state. One way to ensure
+       this is through block_fatal_signals()/unblock_fatal_signals(), see
+       below.  Another - more tricky - way to ensure this is the careful use
+       of 'volatile'.
+   However,
+     - malloc() and similarly complex facilities are not safe to be called
+       because they are not guaranteed to be in a consistent state.
+     - Also, the cleanup function must not block the catchable fatal signals
+       and leave them blocked upon return.
+
+   The cleanup function is executed asynchronously.  It is unspecified
+   whether during its execution the catchable fatal signals are blocked
+   or not.  */
+extern void at_fatal_signal (void (*function) (void));
+
+
+/* Sometimes it is necessary to block the usually fatal signals while the
+   data structures being accessed by the cleanup action are being built or
+   reorganized.  This is the case, for example, when a temporary file or
+   directory is created through mkstemp() or mkdtemp(), because these
+   functions create the temporary file or directory _before_ returning its
+   name to the application.  */
+
+/* Temporarily delay the catchable fatal signals.
+   The signals will be blocked (= delayed) until the next call to
+   unblock_fatal_signals().  If the signals are already blocked, a further
+   call to block_fatal_signals() has no effect.  */
+extern void block_fatal_signals (void);
+
+/* Stop delaying the catchable fatal signals.  */
+extern void unblock_fatal_signals (void);
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lib/fcntl.c b/lib/fcntl.c
new file mode 100644
index 0000000..3dfb6b7
--- /dev/null
+++ b/lib/fcntl.c
@@ -0,0 +1,311 @@
+/* Provide file descriptor control.
+
+   Copyright (C) 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake <ebb9@byu.net>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <fcntl.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <unistd.h>
+
+#if !HAVE_FCNTL
+# define rpl_fcntl fcntl
+#endif
+#undef fcntl
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Get declarations of the native Windows API functions.  */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+/* Get _get_osfhandle.  */
+# include "msvc-nothrow.h"
+
+/* Upper bound on getdtablesize().  See lib/getdtablesize.c.  */
+# define OPEN_MAX_MAX 0x10000
+
+/* Duplicate OLDFD into the first available slot of at least NEWFD,
+   which must be positive, with FLAGS determining whether the duplicate
+   will be inheritable.  */
+static int
+dupfd (int oldfd, int newfd, int flags)
+{
+  /* Mingw has no way to create an arbitrary fd.  Iterate until all
+     file descriptors less than newfd are filled up.  */
+  HANDLE curr_process = GetCurrentProcess ();
+  HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd);
+  unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT];
+  unsigned int fds_to_close_bound = 0;
+  int result;
+  BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE;
+  int mode;
+
+  if (newfd < 0 || getdtablesize () <= newfd)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  if (old_handle == INVALID_HANDLE_VALUE
+      || (mode = setmode (oldfd, O_BINARY)) == -1)
+    {
+      /* oldfd is not open, or is an unassigned standard file
+         descriptor.  */
+      errno = EBADF;
+      return -1;
+    }
+  setmode (oldfd, mode);
+  flags |= mode;
+
+  for (;;)
+    {
+      HANDLE new_handle;
+      int duplicated_fd;
+      unsigned int index;
+
+      if (!DuplicateHandle (curr_process,           /* SourceProcessHandle */
+                            old_handle,             /* SourceHandle */
+                            curr_process,           /* TargetProcessHandle */
+                            (PHANDLE) &new_handle,  /* TargetHandle */
+                            (DWORD) 0,              /* DesiredAccess */
+                            inherit,                /* InheritHandle */
+                            DUPLICATE_SAME_ACCESS)) /* Options */
+        {
+          /* TODO: Translate GetLastError () into errno.  */
+          errno = EMFILE;
+          result = -1;
+          break;
+        }
+      duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags);
+      if (duplicated_fd < 0)
+        {
+          CloseHandle (new_handle);
+          errno = EMFILE;
+          result = -1;
+          break;
+        }
+      if (newfd <= duplicated_fd)
+        {
+          result = duplicated_fd;
+          break;
+        }
+
+      /* Set the bit duplicated_fd in fds_to_close[].  */
+      index = (unsigned int) duplicated_fd / CHAR_BIT;
+      if (fds_to_close_bound <= index)
+        {
+          if (sizeof fds_to_close <= index)
+            /* Need to increase OPEN_MAX_MAX.  */
+            abort ();
+          memset (fds_to_close + fds_to_close_bound, '\0',
+                  index + 1 - fds_to_close_bound);
+          fds_to_close_bound = index + 1;
+        }
+      fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT);
+    }
+
+  /* Close the previous fds that turned out to be too small.  */
+  {
+    int saved_errno = errno;
+    unsigned int duplicated_fd;
+
+    for (duplicated_fd = 0;
+         duplicated_fd < fds_to_close_bound * CHAR_BIT;
+         duplicated_fd++)
+      if ((fds_to_close[duplicated_fd / CHAR_BIT]
+           >> (duplicated_fd % CHAR_BIT))
+          & 1)
+        close (duplicated_fd);
+
+    errno = saved_errno;
+  }
+
+# if REPLACE_FCHDIR
+  if (0 <= result)
+    result = _gl_register_dup (oldfd, result);
+# endif
+  return result;
+}
+#endif /* W32 */
+
+/* Perform the specified ACTION on the file descriptor FD, possibly
+   using the argument ARG further described below.  This replacement
+   handles the following actions, and forwards all others on to the
+   native fcntl.  An unrecognized ACTION returns -1 with errno set to
+   EINVAL.
+
+   F_DUPFD - duplicate FD, with int ARG being the minimum target fd.
+   If successful, return the duplicate, which will be inheritable;
+   otherwise return -1 and set errno.
+
+   F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum
+   target fd.  If successful, return the duplicate, which will not be
+   inheritable; otherwise return -1 and set errno.
+
+   F_GETFD - ARG need not be present.  If successful, return a
+   non-negative value containing the descriptor flags of FD (only
+   FD_CLOEXEC is portable, but other flags may be present); otherwise
+   return -1 and set errno.  */
+
+int
+rpl_fcntl (int fd, int action, /* arg */...)
+{
+  va_list arg;
+  int result = -1;
+  va_start (arg, action);
+  switch (action)
+    {
+
+#if !HAVE_FCNTL
+    case F_DUPFD:
+      {
+        int target = va_arg (arg, int);
+        result = dupfd (fd, target, 0);
+        break;
+      }
+#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR
+    case F_DUPFD:
+      {
+        int target = va_arg (arg, int);
+        /* Detect invalid target; needed for cygwin 1.5.x.  */
+        if (target < 0 || getdtablesize () <= target)
+          errno = EINVAL;
+        else
+          {
+            /* Haiku alpha 2 loses fd flags on original.  */
+            int flags = fcntl (fd, F_GETFD);
+            if (flags < 0)
+              {
+                result = -1;
+                break;
+              }
+            result = fcntl (fd, action, target);
+            if (0 <= result && fcntl (fd, F_SETFD, flags) == -1)
+              {
+                int saved_errno = errno;
+                close (result);
+                result = -1;
+                errno = saved_errno;
+              }
+# if REPLACE_FCHDIR
+            if (0 <= result)
+              result = _gl_register_dup (fd, result);
+# endif
+          }
+        break;
+      } /* F_DUPFD */
+#endif /* FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR */
+
+    case F_DUPFD_CLOEXEC:
+      {
+        int target = va_arg (arg, int);
+
+#if !HAVE_FCNTL
+        result = dupfd (fd, target, O_CLOEXEC);
+        break;
+#else /* HAVE_FCNTL */
+        /* Try the system call first, if the headers claim it exists
+           (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we
+           may be running with a glibc that has the macro but with an
+           older kernel that does not support it.  Cache the
+           information on whether the system call really works, but
+           avoid caching failure if the corresponding F_DUPFD fails
+           for any reason.  0 = unknown, 1 = yes, -1 = no.  */
+        static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0;
+        if (0 <= have_dupfd_cloexec)
+          {
+            result = fcntl (fd, action, target);
+            if (0 <= result || errno != EINVAL)
+              {
+                have_dupfd_cloexec = 1;
+# if REPLACE_FCHDIR
+                if (0 <= result)
+                  result = _gl_register_dup (fd, result);
+# endif
+              }
+            else
+              {
+                result = rpl_fcntl (fd, F_DUPFD, target);
+                if (result < 0)
+                  break;
+                have_dupfd_cloexec = -1;
+              }
+          }
+        else
+          result = rpl_fcntl (fd, F_DUPFD, target);
+        if (0 <= result && have_dupfd_cloexec == -1)
+          {
+            int flags = fcntl (result, F_GETFD);
+            if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1)
+              {
+                int saved_errno = errno;
+                close (result);
+                errno = saved_errno;
+                result = -1;
+              }
+          }
+        break;
+#endif /* HAVE_FCNTL */
+      } /* F_DUPFD_CLOEXEC */
+
+#if !HAVE_FCNTL
+    case F_GETFD:
+      {
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+        HANDLE handle = (HANDLE) _get_osfhandle (fd);
+        DWORD flags;
+        if (handle == INVALID_HANDLE_VALUE
+            || GetHandleInformation (handle, &flags) == 0)
+          errno = EBADF;
+        else
+          result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC;
+# else /* !W32 */
+        /* Use dup2 to reject invalid file descriptors.  No way to
+           access this information, so punt.  */
+        if (0 <= dup2 (fd, fd))
+          result = 0;
+# endif /* !W32 */
+        break;
+      } /* F_GETFD */
+#endif /* !HAVE_FCNTL */
+
+      /* Implementing F_SETFD on mingw is not trivial - there is no
+         API for changing the O_NOINHERIT bit on an fd, and merely
+         changing the HANDLE_FLAG_INHERIT bit on the underlying handle
+         can lead to odd state.  It may be possible by duplicating the
+         handle, using _open_osfhandle with the right flags, then
+         using dup2 to move the duplicate onto the original, but that
+         is not supported for now.  */
+
+    default:
+      {
+#if HAVE_FCNTL
+        void *p = va_arg (arg, void *);
+        result = fcntl (fd, action, p);
+#else
+        errno = EINVAL;
+#endif
+        break;
+      }
+    }
+  va_end (arg);
+  return result;
+}
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
new file mode 100644
index 0000000..604c31b
--- /dev/null
+++ b/lib/fcntl.in.h
@@ -0,0 +1,347 @@
+/* Like <fcntl.h>, but with non-working flags defined to 0.
+
+   Copyright (C) 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* written by Paul Eggert */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_system_fcntl_h
+/* Special invocation convention.  */
+
+/* Needed before <sys/stat.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+   <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
+   But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
+   extern "C" { ... } block, which leads to errors in C++ mode with the
+   overridden <sys/stat.h> from gnulib.  These errors are known to be gone
+   with g++ version >= 4.3.  */
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
+# include <sys/stat.h>
+#endif
+#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_FCNTL_H
+
+/* Needed before <sys/stat.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+   <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
+   But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
+   extern "C" { ... } block, which leads to errors in C++ mode with the
+   overridden <sys/stat.h> from gnulib.  These errors are known to be gone
+   with g++ version >= 4.3.  */
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
+# include <sys/stat.h>
+#endif
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
+
+#ifndef _@GUARD_PREFIX@_FCNTL_H
+#define _@GUARD_PREFIX@_FCNTL_H
+
+#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
+# include <unistd.h>
+#endif
+
+/* Native Windows platforms declare open(), creat() in <io.h>.  */
+#if (@GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
+    && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Declare overridden functions.  */
+
+#if @GNULIB_FCNTL@
+# if @REPLACE_FCNTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fcntl
+#   define fcntl rpl_fcntl
+#  endif
+_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
+_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
+# else
+#  if !@HAVE_FCNTL@
+_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
+#  endif
+_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
+# endif
+_GL_CXXALIASWARN (fcntl);
+#elif defined GNULIB_POSIXCHECK
+# undef fcntl
+# if HAVE_RAW_DECL_FCNTL
+_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
+                 "use gnulib module fcntl for portability");
+# endif
+#endif
+
+#if @GNULIB_OPEN@
+# if @REPLACE_OPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef open
+#   define open rpl_open
+#  endif
+_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                             _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+# else
+_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+# endif
+/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
+   default argument.  _GL_CXXALIASWARN does not work in this case.  */
+# if !defined __hpux
+_GL_CXXALIASWARN (open);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef open
+/* Assume open is always declared.  */
+_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
+                 "use gnulib module open for portability");
+#endif
+
+#if @GNULIB_OPENAT@
+# if @REPLACE_OPENAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef openat
+#   define openat rpl_openat
+#  endif
+_GL_FUNCDECL_RPL (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# else
+#  if !@HAVE_OPENAT@
+_GL_FUNCDECL_SYS (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# endif
+_GL_CXXALIASWARN (openat);
+#elif defined GNULIB_POSIXCHECK
+# undef openat
+# if HAVE_RAW_DECL_OPENAT
+_GL_WARN_ON_USE (openat, "openat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+/* Fix up the FD_* macros, only known to be missing on mingw.  */
+
+#ifndef FD_CLOEXEC
+# define FD_CLOEXEC 1
+#endif
+
+/* Fix up the supported F_* macros.  Intentionally leave other F_*
+   macros undefined.  Only known to be missing on mingw.  */
+
+#ifndef F_DUPFD_CLOEXEC
+# define F_DUPFD_CLOEXEC 0x40000000
+/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise.  */
+# define GNULIB_defined_F_DUPFD_CLOEXEC 1
+#else
+# define GNULIB_defined_F_DUPFD_CLOEXEC 0
+#endif
+
+#ifndef F_DUPFD
+# define F_DUPFD 1
+#endif
+
+#ifndef F_GETFD
+# define F_GETFD 2
+#endif
+
+/* Fix up the O_* macros.  */
+
+#if !defined O_DIRECT && defined O_DIRECTIO
+/* Tru64 spells it 'O_DIRECTIO'.  */
+# define O_DIRECT O_DIRECTIO
+#endif
+
+#if !defined O_CLOEXEC && defined O_NOINHERIT
+/* Mingw spells it 'O_NOINHERIT'.  */
+# define O_CLOEXEC O_NOINHERIT
+#endif
+
+#ifndef O_CLOEXEC
+# define O_CLOEXEC 0
+#endif
+
+#ifndef O_DIRECT
+# define O_DIRECT 0
+#endif
+
+#ifndef O_DIRECTORY
+# define O_DIRECTORY 0
+#endif
+
+#ifndef O_DSYNC
+# define O_DSYNC 0
+#endif
+
+#ifndef O_EXEC
+# define O_EXEC O_RDONLY /* This is often close enough in older systems.  */
+#endif
+
+#ifndef O_IGNORE_CTTY
+# define O_IGNORE_CTTY 0
+#endif
+
+#ifndef O_NDELAY
+# define O_NDELAY 0
+#endif
+
+#ifndef O_NOATIME
+# define O_NOATIME 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK O_NDELAY
+#endif
+
+/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
+   value of O_NONBLOCK.  Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
+   or to 0 as fallback.  */
+#if @GNULIB_NONBLOCKING@
+# if O_NONBLOCK
+#  define GNULIB_defined_O_NONBLOCK 0
+# else
+#  define GNULIB_defined_O_NONBLOCK 1
+#  undef O_NONBLOCK
+#  define O_NONBLOCK 0x40000000
+# endif
+#endif
+
+#ifndef O_NOCTTY
+# define O_NOCTTY 0
+#endif
+
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+#ifndef O_NOLINK
+# define O_NOLINK 0
+#endif
+
+#ifndef O_NOLINKS
+# define O_NOLINKS 0
+#endif
+
+#ifndef O_NOTRANS
+# define O_NOTRANS 0
+#endif
+
+#ifndef O_RSYNC
+# define O_RSYNC 0
+#endif
+
+#ifndef O_SEARCH
+# define O_SEARCH O_RDONLY /* This is often close enough in older systems.  */
+#endif
+
+#ifndef O_SYNC
+# define O_SYNC 0
+#endif
+
+#ifndef O_TTY_INIT
+# define O_TTY_INIT 0
+#endif
+
+#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
+# undef O_ACCMODE
+# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is usually declared in fcntl.h  */
+#if !defined O_BINARY && defined _O_BINARY
+  /* For MSC-compatible compilers.  */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+
+#if defined __BEOS__ || defined __HAIKU__
+  /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect.  */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+# define O_TEXT 0
+#endif
+
+/* Fix up the AT_* macros.  */
+
+/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
+   value exceeds INT_MAX, so its use as an int doesn't conform to the
+   C standard, and GCC and Sun C complain in some cases.  If the bug
+   is present, undef AT_FDCWD here, so it can be redefined below.  */
+#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
+# undef AT_FDCWD
+#endif
+
+/* Use the same bit pattern as Solaris 9, but with the proper
+   signedness.  The bit pattern is important, in case this actually is
+   Solaris with the above workaround.  */
+#ifndef AT_FDCWD
+# define AT_FDCWD (-3041965)
+#endif
+
+/* Use the same values as Solaris 9.  This shouldn't matter, but
+   there's no real reason to differ.  */
+#ifndef AT_SYMLINK_NOFOLLOW
+# define AT_SYMLINK_NOFOLLOW 4096
+#endif
+
+#ifndef AT_REMOVEDIR
+# define AT_REMOVEDIR 1
+#endif
+
+/* Solaris 9 lacks these two, so just pick unique values.  */
+#ifndef AT_SYMLINK_FOLLOW
+# define AT_SYMLINK_FOLLOW 2
+#endif
+
+#ifndef AT_EACCESS
+# define AT_EACCESS 4
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_FCNTL_H */
+#endif /* _@GUARD_PREFIX@_FCNTL_H */
+#endif
diff --git a/lib/fd-hook.c b/lib/fd-hook.c
new file mode 100644
index 0000000..8f4ffe2
--- /dev/null
+++ b/lib/fd-hook.c
@@ -0,0 +1,116 @@
+/* Hook for making making file descriptor functions close(), ioctl() extensible.
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2009.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "fd-hook.h"
+
+#include <stdlib.h>
+
+/* Currently, this entire code is only needed for the handling of sockets
+   on native Windows platforms.  */
+#if WINDOWS_SOCKETS
+
+/* The first and last link in the doubly linked list.
+   Initially the list is empty.  */
+static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL };
+
+int
+execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary,
+                     int fd)
+{
+  if (remaining_list == &anchor)
+    /* End of list reached.  */
+    return primary (fd);
+  else
+    return remaining_list->private_close_fn (remaining_list->private_next,
+                                             primary, fd);
+}
+
+int
+execute_all_close_hooks (gl_close_fn primary, int fd)
+{
+  return execute_close_hooks (anchor.private_next, primary, fd);
+}
+
+int
+execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary,
+                     int fd, int request, void *arg)
+{
+  if (remaining_list == &anchor)
+    /* End of list reached.  */
+    return primary (fd, request, arg);
+  else
+    return remaining_list->private_ioctl_fn (remaining_list->private_next,
+                                             primary, fd, request, arg);
+}
+
+int
+execute_all_ioctl_hooks (gl_ioctl_fn primary,
+                         int fd, int request, void *arg)
+{
+  return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg);
+}
+
+void
+register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link)
+{
+  if (close_hook == NULL)
+    close_hook = execute_close_hooks;
+  if (ioctl_hook == NULL)
+    ioctl_hook = execute_ioctl_hooks;
+
+  if (link->private_next == NULL && link->private_prev == NULL)
+    {
+      /* Add the link to the doubly linked list.  */
+      link->private_next = anchor.private_next;
+      link->private_prev = &anchor;
+      link->private_close_fn = close_hook;
+      link->private_ioctl_fn = ioctl_hook;
+      anchor.private_next->private_prev = link;
+      anchor.private_next = link;
+    }
+  else
+    {
+      /* The link is already in use.  */
+      if (link->private_close_fn != close_hook
+          || link->private_ioctl_fn != ioctl_hook)
+        abort ();
+    }
+}
+
+void
+unregister_fd_hook (struct fd_hook *link)
+{
+  struct fd_hook *next = link->private_next;
+  struct fd_hook *prev = link->private_prev;
+
+  if (next != NULL && prev != NULL)
+    {
+      /* The link is in use.  Remove it from the doubly linked list.  */
+      prev->private_next = next;
+      next->private_prev = prev;
+      /* Clear the link, to mark it unused.  */
+      link->private_next = NULL;
+      link->private_prev = NULL;
+      link->private_close_fn = NULL;
+      link->private_ioctl_fn = NULL;
+    }
+}
+
+#endif
diff --git a/lib/fd-hook.h b/lib/fd-hook.h
new file mode 100644
index 0000000..721e9ad
--- /dev/null
+++ b/lib/fd-hook.h
@@ -0,0 +1,119 @@
+/* Hook for making making file descriptor functions close(), ioctl() extensible.
+   Copyright (C) 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef FD_HOOK_H
+#define FD_HOOK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Currently, this entire code is only needed for the handling of sockets
+   on native Windows platforms.  */
+#if WINDOWS_SOCKETS
+
+
+/* Type of function that closes FD.  */
+typedef int (*gl_close_fn) (int fd);
+
+/* Type of function that applies a control request to FD.  */
+typedef int (*gl_ioctl_fn) (int fd, int request, void *arg);
+
+/* An element of the list of file descriptor hooks.
+   In CLOS (Common Lisp Object System) speak, it consists of an "around"
+   method for the close() function and an "around" method for the ioctl()
+   function.
+   The fields of this structure are considered private.  */
+struct fd_hook
+{
+  /* Doubly linked list.  */
+  struct fd_hook *private_next;
+  struct fd_hook *private_prev;
+  /* Function that treats the types of FD that it knows about and calls
+     execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback.  */
+  int (*private_close_fn) (const struct fd_hook *remaining_list,
+                           gl_close_fn primary,
+                           int fd);
+  /* Function that treats the types of FD that it knows about and calls
+     execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a
+     fallback.  */
+  int (*private_ioctl_fn) (const struct fd_hook *remaining_list,
+                           gl_ioctl_fn primary,
+                           int fd, int request, void *arg);
+};
+
+/* This type of function closes FD, applying special knowledge for the FD
+   types it knows about, and calls
+   execute_close_hooks (REMAINING_LIST, PRIMARY, FD)
+   for the other FD types.
+   In CLOS speak, REMAINING_LIST is the remaining list of "around" methods,
+   and PRIMARY is the "primary" method for close().  */
+typedef int (*close_hook_fn) (const struct fd_hook *remaining_list,
+                              gl_close_fn primary,
+                              int fd);
+
+/* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method.
+   Return 0 or -1, like close() would do.  */
+extern int execute_close_hooks (const struct fd_hook *remaining_list,
+                                gl_close_fn primary,
+                                int fd);
+
+/* Execute all close hooks, with PRIMARY as "primary" method.
+   Return 0 or -1, like close() would do.  */
+extern int execute_all_close_hooks (gl_close_fn primary, int fd);
+
+/* This type of function applies a control request to FD, applying special
+   knowledge for the FD types it knows about, and calls
+   execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG)
+   for the other FD types.
+   In CLOS speak, REMAINING_LIST is the remaining list of "around" methods,
+   and PRIMARY is the "primary" method for ioctl().  */
+typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list,
+                              gl_ioctl_fn primary,
+                              int fd, int request, void *arg);
+
+/* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method.
+   Return 0 or -1, like ioctl() would do.  */
+extern int execute_ioctl_hooks (const struct fd_hook *remaining_list,
+                                gl_ioctl_fn primary,
+                                int fd, int request, void *arg);
+
+/* Execute all ioctl hooks, with PRIMARY as "primary" method.
+   Return 0 or -1, like ioctl() would do.  */
+extern int execute_all_ioctl_hooks (gl_ioctl_fn primary,
+                                    int fd, int request, void *arg);
+
+/* Add a function pair to the list of file descriptor hooks.
+   CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change.
+   The LINK variable points to a piece of memory which is guaranteed to be
+   accessible until the corresponding call to unregister_fd_hook.  */
+extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook,
+                              struct fd_hook *link);
+
+/* Removes a hook from the list of file descriptor hooks.  */
+extern void unregister_fd_hook (struct fd_hook *link);
+
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* FD_HOOK_H */
diff --git a/lib/fd-safer-flag.c b/lib/fd-safer-flag.c
new file mode 100644
index 0000000..b090edf
--- /dev/null
+++ b/lib/fd-safer-flag.c
@@ -0,0 +1,52 @@
+/* Adjust a file descriptor result so that it avoids clobbering
+   STD{IN,OUT,ERR}_FILENO, with specific flags.
+
+   Copyright (C) 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert and Eric Blake.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistd-safer.h"
+
+#include <errno.h>
+#include <unistd.h>
+
+/* Return FD, unless FD would be a copy of standard input, output, or
+   error; in that case, return a duplicate of FD, closing FD.  If FLAG
+   contains O_CLOEXEC, the returned FD will have close-on-exec
+   semantics.  On failure to duplicate, close FD, set errno, and
+   return -1.  Preserve errno if FD is negative, so that the caller
+   can always inspect errno when the returned value is negative.
+
+   This function is usefully wrapped around functions that return file
+   descriptors, e.g., fd_safer_flag (open ("file", O_RDONLY | flag), flag).  */
+
+int
+fd_safer_flag (int fd, int flag)
+{
+  if (STDIN_FILENO <= fd && fd <= STDERR_FILENO)
+    {
+      int f = dup_safer_flag (fd, flag);
+      int e = errno;
+      close (fd);
+      errno = e;
+      fd = f;
+    }
+
+  return fd;
+}
diff --git a/lib/fd-safer.c b/lib/fd-safer.c
index 5933bcb..052837b 100644
--- a/lib/fd-safer.c
+++ b/lib/fd-safer.c
@@ -1,11 +1,11 @@
 /* Return a safer copy of a file descriptor.
 
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,26 +13,16 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "unistd-safer.h"
 
 #include <errno.h>
-
 #include <unistd.h>
-#ifndef STDIN_FILENO
-# define STDIN_FILENO 0
-#endif
-#ifndef STDERR_FILENO
-# define STDERR_FILENO 2
-#endif
 
 /* Return FD, unless FD would be a copy of standard input, output, or
    error; in that case, return a duplicate of FD, closing FD.  On
diff --git a/lib/float+.h b/lib/float+.h
new file mode 100644
index 0000000..75e56a1
--- /dev/null
+++ b/lib/float+.h
@@ -0,0 +1,147 @@
+/* Supplemental information about the floating-point formats.
+   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2007.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FLOATPLUS_H
+#define _FLOATPLUS_H
+
+#include <float.h>
+#include <limits.h>
+
+/* Number of bits in the mantissa of a floating-point number, including the
+   "hidden bit".  */
+#if FLT_RADIX == 2
+# define FLT_MANT_BIT FLT_MANT_DIG
+# define DBL_MANT_BIT DBL_MANT_DIG
+# define LDBL_MANT_BIT LDBL_MANT_DIG
+#elif FLT_RADIX == 4
+# define FLT_MANT_BIT (FLT_MANT_DIG * 2)
+# define DBL_MANT_BIT (DBL_MANT_DIG * 2)
+# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2)
+#elif FLT_RADIX == 16
+# define FLT_MANT_BIT (FLT_MANT_DIG * 4)
+# define DBL_MANT_BIT (DBL_MANT_DIG * 4)
+# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4)
+#endif
+
+/* Bit mask that can be used to mask the exponent, as an unsigned number.  */
+#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7)
+#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7)
+#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7)
+
+/* Number of bits used for the exponent of a floating-point number, including
+   the exponent's sign.  */
+#define FLT_EXP_BIT \
+  (FLT_EXP_MASK < 0x100 ? 8 : \
+   FLT_EXP_MASK < 0x200 ? 9 : \
+   FLT_EXP_MASK < 0x400 ? 10 : \
+   FLT_EXP_MASK < 0x800 ? 11 : \
+   FLT_EXP_MASK < 0x1000 ? 12 : \
+   FLT_EXP_MASK < 0x2000 ? 13 : \
+   FLT_EXP_MASK < 0x4000 ? 14 : \
+   FLT_EXP_MASK < 0x8000 ? 15 : \
+   FLT_EXP_MASK < 0x10000 ? 16 : \
+   FLT_EXP_MASK < 0x20000 ? 17 : \
+   FLT_EXP_MASK < 0x40000 ? 18 : \
+   FLT_EXP_MASK < 0x80000 ? 19 : \
+   FLT_EXP_MASK < 0x100000 ? 20 : \
+   FLT_EXP_MASK < 0x200000 ? 21 : \
+   FLT_EXP_MASK < 0x400000 ? 22 : \
+   FLT_EXP_MASK < 0x800000 ? 23 : \
+   FLT_EXP_MASK < 0x1000000 ? 24 : \
+   FLT_EXP_MASK < 0x2000000 ? 25 : \
+   FLT_EXP_MASK < 0x4000000 ? 26 : \
+   FLT_EXP_MASK < 0x8000000 ? 27 : \
+   FLT_EXP_MASK < 0x10000000 ? 28 : \
+   FLT_EXP_MASK < 0x20000000 ? 29 : \
+   FLT_EXP_MASK < 0x40000000 ? 30 : \
+   FLT_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+#define DBL_EXP_BIT \
+  (DBL_EXP_MASK < 0x100 ? 8 : \
+   DBL_EXP_MASK < 0x200 ? 9 : \
+   DBL_EXP_MASK < 0x400 ? 10 : \
+   DBL_EXP_MASK < 0x800 ? 11 : \
+   DBL_EXP_MASK < 0x1000 ? 12 : \
+   DBL_EXP_MASK < 0x2000 ? 13 : \
+   DBL_EXP_MASK < 0x4000 ? 14 : \
+   DBL_EXP_MASK < 0x8000 ? 15 : \
+   DBL_EXP_MASK < 0x10000 ? 16 : \
+   DBL_EXP_MASK < 0x20000 ? 17 : \
+   DBL_EXP_MASK < 0x40000 ? 18 : \
+   DBL_EXP_MASK < 0x80000 ? 19 : \
+   DBL_EXP_MASK < 0x100000 ? 20 : \
+   DBL_EXP_MASK < 0x200000 ? 21 : \
+   DBL_EXP_MASK < 0x400000 ? 22 : \
+   DBL_EXP_MASK < 0x800000 ? 23 : \
+   DBL_EXP_MASK < 0x1000000 ? 24 : \
+   DBL_EXP_MASK < 0x2000000 ? 25 : \
+   DBL_EXP_MASK < 0x4000000 ? 26 : \
+   DBL_EXP_MASK < 0x8000000 ? 27 : \
+   DBL_EXP_MASK < 0x10000000 ? 28 : \
+   DBL_EXP_MASK < 0x20000000 ? 29 : \
+   DBL_EXP_MASK < 0x40000000 ? 30 : \
+   DBL_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+#define LDBL_EXP_BIT \
+  (LDBL_EXP_MASK < 0x100 ? 8 : \
+   LDBL_EXP_MASK < 0x200 ? 9 : \
+   LDBL_EXP_MASK < 0x400 ? 10 : \
+   LDBL_EXP_MASK < 0x800 ? 11 : \
+   LDBL_EXP_MASK < 0x1000 ? 12 : \
+   LDBL_EXP_MASK < 0x2000 ? 13 : \
+   LDBL_EXP_MASK < 0x4000 ? 14 : \
+   LDBL_EXP_MASK < 0x8000 ? 15 : \
+   LDBL_EXP_MASK < 0x10000 ? 16 : \
+   LDBL_EXP_MASK < 0x20000 ? 17 : \
+   LDBL_EXP_MASK < 0x40000 ? 18 : \
+   LDBL_EXP_MASK < 0x80000 ? 19 : \
+   LDBL_EXP_MASK < 0x100000 ? 20 : \
+   LDBL_EXP_MASK < 0x200000 ? 21 : \
+   LDBL_EXP_MASK < 0x400000 ? 22 : \
+   LDBL_EXP_MASK < 0x800000 ? 23 : \
+   LDBL_EXP_MASK < 0x1000000 ? 24 : \
+   LDBL_EXP_MASK < 0x2000000 ? 25 : \
+   LDBL_EXP_MASK < 0x4000000 ? 26 : \
+   LDBL_EXP_MASK < 0x8000000 ? 27 : \
+   LDBL_EXP_MASK < 0x10000000 ? 28 : \
+   LDBL_EXP_MASK < 0x20000000 ? 29 : \
+   LDBL_EXP_MASK < 0x40000000 ? 30 : \
+   LDBL_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+
+/* Number of bits used for a floating-point number: the mantissa (not
+   counting the "hidden bit", since it may or may not be explicit), the
+   exponent, and the sign.  */
+#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1)
+#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1)
+#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1)
+
+/* Number of bytes used for a floating-point number.
+   This can be smaller than the 'sizeof'.  For example, on i386 systems,
+   'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence
+   LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but
+   sizeof (long double) = 12 or = 16.  */
+#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+
+/* Verify that SIZEOF_FLT <= sizeof (float) etc.  */
+typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1];
+typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1];
+typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1];
+
+#endif /* _FLOATPLUS_H */
diff --git a/lib/float.c b/lib/float.c
new file mode 100644
index 0000000..ea31866
--- /dev/null
+++ b/lib/float.c
@@ -0,0 +1,33 @@
+/* Auxiliary definitions for <float.h>.
+   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <float.h>
+
+#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__
+const union gl_long_double_union gl_LDBL_MAX =
+  { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } };
+#elif defined __i386__
+const union gl_long_double_union gl_LDBL_MAX =
+  { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } };
+#else
+/* This declaration is solely to ensure that after preprocessing
+   this file is never empty.  */
+typedef int dummy;
+#endif
diff --git a/lib/float.in.h b/lib/float.in.h
new file mode 100644
index 0000000..b420510
--- /dev/null
+++ b/lib/float.in.h
@@ -0,0 +1,188 @@
+/* A correct <float.h>.
+
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_FLOAT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_FLOAT_H@
+
+#ifndef _@GUARD_PREFIX@_FLOAT_H
+#define _@GUARD_PREFIX@_FLOAT_H
+
+/* 'long double' properties.  */
+
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+/* Number of mantissa units, in base FLT_RADIX.  */
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG   64
+/* Number of decimal digits that is sufficient for representing a number.  */
+# undef LDBL_DIG
+# define LDBL_DIG        18
+/* x-1 where x is the smallest representable number > 1.  */
+# undef LDBL_EPSILON
+# define LDBL_EPSILON    1.0842021724855044340E-19L
+/* Minimum e such that FLT_RADIX^(e-1) is a normalized number.  */
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number.  */
+# undef LDBL_MAX_EXP
+# define LDBL_MAX_EXP    16384
+/* Minimum positive normalized number.  */
+# undef LDBL_MIN
+# define LDBL_MIN        3.3621031431120935063E-4932L
+/* Maximum representable finite number.  */
+# undef LDBL_MAX
+# define LDBL_MAX        1.1897314953572317650E+4932L
+/* Minimum e such that 10^e is in the range of normalized numbers.  */
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP (-4931)
+/* Maximum e such that 10^e is in the range of representable finite numbers.  */
+# undef LDBL_MAX_10_EXP
+# define LDBL_MAX_10_EXP 4932
+#endif
+
+/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of
+   precision in the compiler but 64 bits of precision at runtime.  See
+   <http://lists.gnu.org/archive/html/bug-gnulib/2008-07/msg00063.html>.  */
+#if defined __i386__ && defined __FreeBSD__
+/* Number of mantissa units, in base FLT_RADIX.  */
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG   64
+/* Number of decimal digits that is sufficient for representing a number.  */
+# undef LDBL_DIG
+# define LDBL_DIG        18
+/* x-1 where x is the smallest representable number > 1.  */
+# undef LDBL_EPSILON
+# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */
+/* Minimum e such that FLT_RADIX^(e-1) is a normalized number.  */
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number.  */
+# undef LDBL_MAX_EXP
+# define LDBL_MAX_EXP    16384
+/* Minimum positive normalized number.  */
+# undef LDBL_MIN
+# define LDBL_MIN        3.3621031431120935E-4932L /* = 0x1p-16382L */
+/* Maximum representable finite number.  */
+# undef LDBL_MAX
+/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }.
+   But the largest literal that GCC allows us to write is
+   0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }.
+   So, define it like this through a reference to an external variable
+
+     const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 };
+     extern const long double LDBL_MAX;
+
+   Unfortunately, this is not a constant expression.  */
+union gl_long_double_union
+  {
+    struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd;
+    long double ld;
+  };
+extern const union gl_long_double_union gl_LDBL_MAX;
+# define LDBL_MAX (gl_LDBL_MAX.ld)
+/* Minimum e such that 10^e is in the range of normalized numbers.  */
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP (-4931)
+/* Maximum e such that 10^e is in the range of representable finite numbers.  */
+# undef LDBL_MAX_10_EXP
+# define LDBL_MAX_10_EXP 4932
+#endif
+
+/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are
+   wrong.
+   On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong.  */
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+# undef LDBL_MIN
+# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MAX
+/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }.
+   It is not easy to define:
+     #define LDBL_MAX 1.79769313486231580793728971405302307166e308L
+   is too small, whereas
+     #define LDBL_MAX 1.79769313486231580793728971405302307167e308L
+   is too large.  Apparently a bug in GCC decimal-to-binary conversion.
+   Also, I can't get values larger than
+     #define LDBL63 ((long double) (1ULL << 63))
+     #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL)
+   which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }.
+   So, define it like this through a reference to an external variable
+
+     const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL };
+     extern const long double LDBL_MAX;
+
+   or through a pointer cast
+
+     #define LDBL_MAX \
+       (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL })
+
+   Unfortunately, this is not a constant expression, and the latter expression
+   does not work well when GCC is optimizing..  */
+union gl_long_double_union
+  {
+    struct { double hi; double lo; } dd;
+    long double ld;
+  };
+extern const union gl_long_double_union gl_LDBL_MAX;
+# define LDBL_MAX (gl_LDBL_MAX.ld)
+#endif
+
+/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong.
+   On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON
+   are wrong.  */
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG 106
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+#  undef LDBL_MIN_10_EXP
+#  define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+#  undef LDBL_MIN
+#  define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */
+#  undef LDBL_EPSILON
+#  define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */
+# endif
+#endif
+
+#if @REPLACE_ITOLD@
+/* Pull in a function that fixes the 'int' to 'long double' conversion
+   of glibc 2.7.  */
+extern
+# ifdef __cplusplus
+"C"
+# endif
+void _Qp_itoq (long double *, int);
+static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq;
+#endif
+
+#endif /* _@GUARD_PREFIX@_FLOAT_H */
+#endif /* _@GUARD_PREFIX@_FLOAT_H */
diff --git a/lib/fopen-safer.c b/lib/fopen-safer.c
index 4f2ffa1..38b0093 100644
--- a/lib/fopen-safer.c
+++ b/lib/fopen-safer.c
@@ -1,10 +1,11 @@
 /* Invoke fopen, but avoid some glitches.
-   Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   Copyright (C) 2001, 2004-2006, 2009-2012 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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -12,14 +13,11 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "stdio-safer.h"
 
@@ -27,10 +25,6 @@
 #include <unistd.h>
 #include "unistd-safer.h"
 
-#ifndef STDERR_FILENO
-# define STDERR_FILENO 2
-#endif
-
 /* Like fopen, but do not return stdin, stdout, or stderr.  */
 
 FILE *
@@ -43,26 +37,26 @@
       int fd = fileno (fp);
 
       if (0 <= fd && fd <= STDERR_FILENO)
-	{
-	  int f = dup_safer (fd);
+        {
+          int f = dup_safer (fd);
 
-	  if (f < 0)
-	    {
-	      int e = errno;
-	      fclose (fp);
-	      errno = e;
-	      return NULL;
-	    }
+          if (f < 0)
+            {
+              int e = errno;
+              fclose (fp);
+              errno = e;
+              return NULL;
+            }
 
-	  if (fclose (fp) != 0
-	      || ! (fp = fdopen (f, mode)))
-	    {
-	      int e = errno;
-	      close (f);
-	      errno = e;
-	      return NULL;
-	    }
-	}
+          if (fclose (fp) != 0
+              || ! (fp = fdopen (f, mode)))
+            {
+              int e = errno;
+              close (f);
+              errno = e;
+              return NULL;
+            }
+        }
     }
 
   return fp;
diff --git a/lib/fopen.c b/lib/fopen.c
new file mode 100644
index 0000000..3408192
--- /dev/null
+++ b/lib/fopen.c
@@ -0,0 +1,110 @@
+/* Open a stream to a file.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+/* If the user's config.h happens to include <stdio.h>, let it include only
+   the system's <stdio.h> here, so that orig_fopen doesn't recurse to
+   rpl_fopen.  */
+#define __need_FILE
+#include <config.h>
+
+/* Get the original definition of fopen.  It might be defined as a macro.  */
+#include <stdio.h>
+#undef __need_FILE
+
+static FILE *
+orig_fopen (const char *filename, const char *mode)
+{
+  return fopen (filename, mode);
+}
+
+/* Specification.  */
+/* Write "stdio.h" here, not <stdio.h>, otherwise OSF/1 5.1 DTK cc eliminates
+   this include because of the preliminary #include <stdio.h> above.  */
+#include "stdio.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+FILE *
+rpl_fopen (const char *filename, const char *mode)
+{
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+  if (strcmp (filename, "/dev/null") == 0)
+    filename = "NUL";
+#endif
+
+#if FOPEN_TRAILING_SLASH_BUG
+  /* If the filename ends in a slash and a mode that requires write access is
+     specified, then fail.
+     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
+     says that
+       "A pathname that contains at least one non-slash character and that
+        ends with one or more trailing slashes shall be resolved as if a
+        single dot character ( '.' ) were appended to the pathname."
+     and
+       "The special filename dot shall refer to the directory specified by
+        its predecessor."
+     If the named file already exists as a directory, then if a mode that
+     requires write access is specified, fopen() must fail because POSIX
+     <http://www.opengroup.org/susv3/functions/fopen.html> says that it
+     fails with errno = EISDIR in this case.
+     If the named file does not exist or does not name a directory, then
+     fopen() must fail since the file does not contain a '.' directory.  */
+  {
+    size_t len = strlen (filename);
+    if (len > 0 && filename[len - 1] == '/')
+      {
+        int fd;
+        struct stat statbuf;
+        FILE *fp;
+
+        if (mode[0] == 'w' || mode[0] == 'a')
+          {
+            errno = EISDIR;
+            return NULL;
+          }
+
+        fd = open (filename, O_RDONLY);
+        if (fd < 0)
+          return NULL;
+
+        if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
+          {
+            close (fd);
+            errno = ENOTDIR;
+            return NULL;
+          }
+
+        fp = fdopen (fd, mode);
+        if (fp == NULL)
+          {
+            int saved_errno = errno;
+            close (fd);
+            errno = saved_errno;
+          }
+        return fp;
+      }
+  }
+# endif
+
+  return orig_fopen (filename, mode);
+}
diff --git a/lib/fpending.c b/lib/fpending.c
new file mode 100644
index 0000000..2591d53
--- /dev/null
+++ b/lib/fpending.c
@@ -0,0 +1,30 @@
+/* fpending.c -- return the number of pending output bytes on a stream
+   Copyright (C) 2000, 2004, 2006-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+#include "fpending.h"
+
+/* Return the number of pending (aka buffered, unflushed)
+   bytes on the stream, FP, that is open for writing.  */
+size_t
+__fpending (FILE *fp)
+{
+  return PENDING_OUTPUT_N_BYTES;
+}
diff --git a/lib/fpending.h b/lib/fpending.h
new file mode 100644
index 0000000..0365287
--- /dev/null
+++ b/lib/fpending.h
@@ -0,0 +1,30 @@
+/* Declare __fpending.
+
+   Copyright (C) 2000, 2003, 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+   Written by Jim Meyering.  */
+
+#include <stddef.h>
+#include <stdio.h>
+
+#if HAVE_DECL___FPENDING
+# if HAVE_STDIO_EXT_H
+#  include <stdio_ext.h>
+# endif
+#else
+size_t __fpending (FILE *);
+#endif
diff --git a/lib/fprintf.c b/lib/fprintf.c
new file mode 100644
index 0000000..b1db5f6
--- /dev/null
+++ b/lib/fprintf.c
@@ -0,0 +1,77 @@
+/* Formatted output to a stream.
+   Copyright (C) 2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if 1
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+#include "fseterr.h"
+#include "vasnprintf.h"
+
+/* Print formatted output to the stream FP.
+   Return string length of formatted string.  On error, return a negative
+   value.  */
+int
+fprintf (FILE *fp, const char *format, ...)
+{
+  char buf[2000];
+  char *output;
+  size_t len;
+  size_t lenbuf = sizeof (buf);
+  va_list args;
+
+  va_start (args, format);
+  output = vasnprintf (buf, &lenbuf, format, args);
+  len = lenbuf;
+  va_end (args);
+
+  if (!output)
+    {
+      fseterr (fp);
+      return -1;
+    }
+
+  if (fwrite (output, 1, len, fp) < len)
+    {
+      if (output != buf)
+        {
+          int saved_errno = errno;
+          free (output);
+          errno = saved_errno;
+        }
+      return -1;
+    }
+
+  if (output != buf)
+    free (output);
+
+  if (len > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      fseterr (fp);
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/fpucw.h b/lib/fpucw.h
new file mode 100644
index 0000000..23e4c81
--- /dev/null
+++ b/lib/fpucw.h
@@ -0,0 +1,108 @@
+/* Manipulating the FPU control word.
+   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2007.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FPUCW_H
+#define _FPUCW_H
+
+/* The i386 floating point hardware (the 387 compatible FPU, not the modern
+   SSE/SSE2 hardware) has a controllable rounding precision.  It is specified
+   through the 'PC' bits in the FPU control word ('fctrl' register).  (See
+   the GNU libc i386 <fpu_control.h> header for details.)
+
+   On some platforms, such as Linux or Solaris, the default precision setting
+   is set to "extended precision".  This means that 'long double' instructions
+   operate correctly, but 'double' computations often produce slightly
+   different results as on strictly IEEE 754 conforming systems.
+
+   On some platforms, such as NetBSD, the default precision is set to
+   "double precision".  This means that 'long double' instructions will operate
+   only as 'double', i.e. lead to wrong results.  Similarly on FreeBSD 6.4, at
+   least for the division of 'long double' numbers.
+
+   The FPU control word is under control of the application, i.e. it is
+   not required to be set either way by the ABI.  (In fact, the i386 ABI
+   http://refspecs.freestandards.org/elf/abi386-4.pdf page 3-12 = page 38
+   is not clear about it.  But in any case, gcc treats the control word
+   like a "preserved" register: it emits code that assumes that the control
+   word is preserved across calls, and it restores the control word at the
+   end of functions that modify it.)
+
+   See Vincent Lefèvre's page http://www.vinc17.org/research/extended.en.html
+   for a good explanation.
+   See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for
+   some argumentation which setting should be the default.  */
+
+/* This header file provides the following facilities:
+     fpucw_t                        integral type holding the value of 'fctrl'
+     FPU_PC_MASK                    bit mask denoting the precision control
+     FPU_PC_DOUBLE                  precision control for 53 bits mantissa
+     FPU_PC_EXTENDED                precision control for 64 bits mantissa
+     GET_FPUCW ()                   yields the current FPU control word
+     SET_FPUCW (word)               sets the FPU control word
+     DECL_LONG_DOUBLE_ROUNDING      variable declaration for
+                                    BEGIN/END_LONG_DOUBLE_ROUNDING
+     BEGIN_LONG_DOUBLE_ROUNDING ()  starts a sequence of instructions with
+                                    'long double' safe operation precision
+     END_LONG_DOUBLE_ROUNDING ()    ends a sequence of instructions with
+                                    'long double' safe operation precision
+ */
+
+/* Inline assembler like this works only with GNU C.  */
+#if (defined __i386__ || defined __x86_64__) && defined __GNUC__
+
+typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */
+
+# define FPU_PC_MASK 0x0300
+# define FPU_PC_DOUBLE 0x200    /* glibc calls this _FPU_DOUBLE */
+# define FPU_PC_EXTENDED 0x300  /* glibc calls this _FPU_EXTENDED */
+
+# define GET_FPUCW() \
+  ({ fpucw_t _cw;                                               \
+     __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw));         \
+     _cw;                                                       \
+   })
+# define SET_FPUCW(word) \
+  (void)({ fpucw_t _ncw = (word);                               \
+           __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw));  \
+         })
+
+# define DECL_LONG_DOUBLE_ROUNDING \
+  fpucw_t oldcw;
+# define BEGIN_LONG_DOUBLE_ROUNDING() \
+  (void)(oldcw = GET_FPUCW (),                                  \
+         SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED))
+# define END_LONG_DOUBLE_ROUNDING() \
+  SET_FPUCW (oldcw)
+
+#else
+
+typedef unsigned int fpucw_t;
+
+# define FPU_PC_MASK 0
+# define FPU_PC_DOUBLE 0
+# define FPU_PC_EXTENDED 0
+
+# define GET_FPUCW() 0
+# define SET_FPUCW(word) (void)(word)
+
+# define DECL_LONG_DOUBLE_ROUNDING
+# define BEGIN_LONG_DOUBLE_ROUNDING()
+# define END_LONG_DOUBLE_ROUNDING()
+
+#endif
+
+#endif /* _FPUCW_H */
diff --git a/lib/frexp.c b/lib/frexp.c
new file mode 100644
index 0000000..4f5d0c0
--- /dev/null
+++ b/lib/frexp.c
@@ -0,0 +1,168 @@
+/* Split a double into fraction and mantissa.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paolo Bonzini <bonzini@gnu.org>, 2003, and
+   Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#if ! defined USE_LONG_DOUBLE
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <math.h>
+
+#include <float.h>
+#ifdef USE_LONG_DOUBLE
+# include "isnanl-nolibm.h"
+# include "fpucw.h"
+#else
+# include "isnand-nolibm.h"
+#endif
+
+/* This file assumes FLT_RADIX = 2.  If FLT_RADIX is a power of 2 greater
+   than 2, or not even a power of 2, some rounding errors can occur, so that
+   then the returned mantissa is only guaranteed to be <= 1.0, not < 1.0.  */
+
+#ifdef USE_LONG_DOUBLE
+# define FUNC frexpl
+# define DOUBLE long double
+# define ISNAN isnanl
+# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING
+# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING ()
+# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING ()
+# define L_(literal) literal##L
+#else
+# define FUNC frexp
+# define DOUBLE double
+# define ISNAN isnand
+# define DECL_ROUNDING
+# define BEGIN_ROUNDING()
+# define END_ROUNDING()
+# define L_(literal) literal
+#endif
+
+DOUBLE
+FUNC (DOUBLE x, int *expptr)
+{
+  int sign;
+  int exponent;
+  DECL_ROUNDING
+
+  /* Test for NaN, infinity, and zero.  */
+  if (ISNAN (x) || x + x == x)
+    {
+      *expptr = 0;
+      return x;
+    }
+
+  sign = 0;
+  if (x < 0)
+    {
+      x = - x;
+      sign = -1;
+    }
+
+  BEGIN_ROUNDING ();
+
+  {
+    /* Since the exponent is an 'int', it fits in 64 bits.  Therefore the
+       loops are executed no more than 64 times.  */
+    DOUBLE pow2[64]; /* pow2[i] = 2^2^i */
+    DOUBLE powh[64]; /* powh[i] = 2^-2^i */
+    int i;
+
+    exponent = 0;
+    if (x >= L_(1.0))
+      {
+        /* A positive exponent.  */
+        DOUBLE pow2_i; /* = pow2[i] */
+        DOUBLE powh_i; /* = powh[i] */
+
+        /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i,
+           x * 2^exponent = argument, x >= 1.0.  */
+        for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5);
+             ;
+             i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i)
+          {
+            if (x >= pow2_i)
+              {
+                exponent += (1 << i);
+                x *= powh_i;
+              }
+            else
+              break;
+
+            pow2[i] = pow2_i;
+            powh[i] = powh_i;
+          }
+        /* Avoid making x too small, as it could become a denormalized
+           number and thus lose precision.  */
+        while (i > 0 && x < pow2[i - 1])
+          {
+            i--;
+            powh_i = powh[i];
+          }
+        exponent += (1 << i);
+        x *= powh_i;
+        /* Here 2^-2^i <= x < 1.0.  */
+      }
+    else
+      {
+        /* A negative or zero exponent.  */
+        DOUBLE pow2_i; /* = pow2[i] */
+        DOUBLE powh_i; /* = powh[i] */
+
+        /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i,
+           x * 2^exponent = argument, x < 1.0.  */
+        for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5);
+             ;
+             i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i)
+          {
+            if (x < powh_i)
+              {
+                exponent -= (1 << i);
+                x *= pow2_i;
+              }
+            else
+              break;
+
+            pow2[i] = pow2_i;
+            powh[i] = powh_i;
+          }
+        /* Here 2^-2^i <= x < 1.0.  */
+      }
+
+    /* Invariants: x * 2^exponent = argument, and 2^-2^i <= x < 1.0.  */
+    while (i > 0)
+      {
+        i--;
+        if (x < powh[i])
+          {
+            exponent -= (1 << i);
+            x *= pow2[i];
+          }
+      }
+    /* Here 0.5 <= x < 1.0.  */
+  }
+
+  if (sign < 0)
+    x = - x;
+
+  END_ROUNDING ();
+
+  *expptr = exponent;
+  return x;
+}
diff --git a/lib/frexpl.c b/lib/frexpl.c
new file mode 100644
index 0000000..b74ceeb
--- /dev/null
+++ b/lib/frexpl.c
@@ -0,0 +1,35 @@
+/* Split a 'long double' into fraction and mantissa.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+/* Specification.  */
+# include <math.h>
+
+long double
+frexpl (long double x, int *expptr)
+{
+  return frexp (x, expptr);
+}
+
+#else
+
+# define USE_LONG_DOUBLE
+# include "frexp.c"
+
+#endif
diff --git a/lib/fseterr.c b/lib/fseterr.c
new file mode 100644
index 0000000..4273a46
--- /dev/null
+++ b/lib/fseterr.c
@@ -0,0 +1,79 @@
+/* Set the error indicator of a stream.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "fseterr.h"
+
+#include <errno.h>
+
+#include "stdio-impl.h"
+
+void
+fseterr (FILE *fp)
+{
+  /* Most systems provide FILE as a struct and the necessary bitmask in
+     <stdio.h>, because they need it for implementing getc() and putc() as
+     fast macros.  */
+#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+  fp->_flags |= _IO_ERR_SEEN;
+#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */
+  fp_->_flags |= __SERR;
+#elif defined __EMX__               /* emx+gcc */
+  fp->_flags |= _IOERR;
+#elif defined __minix               /* Minix */
+  fp->_flags |= _IOERR;
+#elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */
+  fp_->_flag |= _IOERR;
+#elif defined __UCLIBC__            /* uClibc */
+  fp->__modeflags |= __FLAG_ERROR;
+#elif defined __QNX__               /* QNX */
+  fp->_Mode |= 0x200 /* _MERR */;
+#elif defined __MINT__              /* Atari FreeMiNT */
+  fp->__error = 1;
+#elif defined EPLAN9                /* Plan9 */
+  if (fp->state != 0 /* CLOSED */)
+    fp->state = 5 /* ERR */;
+#elif 0                             /* unknown  */
+  /* Portable fallback, based on an idea by Rich Felker.
+     Wow! 6 system calls for something that is just a bit operation!
+     Not activated on any system, because there is no way to repair FP when
+     the sequence of system calls fails, and library code should not call
+     abort().  */
+  int saved_errno;
+  int fd;
+  int fd2;
+
+  saved_errno = errno;
+  fflush (fp);
+  fd = fileno (fp);
+  fd2 = dup (fd);
+  if (fd2 >= 0)
+    {
+      close (fd);
+      fputc ('\0', fp); /* This should set the error indicator.  */
+      fflush (fp);      /* Or this.  */
+      if (dup2 (fd2, fd) < 0)
+        /* Whee... we botched the stream and now cannot restore it!  */
+        abort ();
+      close (fd2);
+    }
+  errno = saved_errno;
+#else
+ #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."
+#endif
+}
diff --git a/lib/fseterr.h b/lib/fseterr.h
new file mode 100644
index 0000000..16a1afe
--- /dev/null
+++ b/lib/fseterr.h
@@ -0,0 +1,45 @@
+/* Set the error indicator of a stream.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FSETERR_H
+#define _FSETERR_H
+
+#include <stdio.h>
+
+/* Set the error indicator of the stream FP.
+   The "error indicator" is set when an I/O operation on the stream fails, and
+   is cleared (together with the "end-of-file" indicator) by clearerr (FP).  */
+
+#if HAVE___FSETERR /* musl libc */
+
+# include <stdio_ext.h>
+# define fseterr(fp) __fseterr (fp)
+
+#else
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+extern void fseterr (FILE *fp);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+#endif /* _FSETERR_H */
diff --git a/lib/fstat.c b/lib/fstat.c
new file mode 100644
index 0000000..0418cc6
--- /dev/null
+++ b/lib/fstat.c
@@ -0,0 +1,88 @@
+/* fstat() replacement.
+   Copyright (C) 2011-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* If the user's config.h happens to include <sys/stat.h>, let it include only
+   the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to
+   rpl_fstat.  */
+#define __need_system_sys_stat_h
+#include <config.h>
+
+/* Get the original definition of fstat.  It might be defined as a macro.  */
+#include <sys/types.h>
+#include <sys/stat.h>
+#if _GL_WINDOWS_64_BIT_ST_SIZE
+# undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */
+# define stat _stati64
+# undef fstat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */
+# define fstat _fstati64
+#endif
+#undef __need_system_sys_stat_h
+
+static int
+orig_fstat (int fd, struct stat *buf)
+{
+  return fstat (fd, buf);
+}
+
+/* Specification.  */
+/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
+   eliminates this include because of the preliminary #include <sys/stat.h>
+   above.  */
+#include "sys/stat.h"
+
+#include <errno.h>
+#include <unistd.h>
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+fstat_nothrow (int fd, struct stat *buf)
+{
+  int result;
+
+  TRY_MSVC_INVAL
+    {
+      result = orig_fstat (fd, buf);
+    }
+  CATCH_MSVC_INVAL
+    {
+      result = -1;
+      errno = EBADF;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+#else
+# define fstat_nothrow orig_fstat
+#endif
+
+int
+rpl_fstat (int fd, struct stat *buf)
+{
+#if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY
+  /* Handle the case when rpl_open() used a dummy file descriptor to work
+     around an open() that can't normally visit directories.  */
+  const char *name = _gl_directory_name (fd);
+  if (name != NULL)
+    return stat (name, buf);
+#endif
+
+  return fstat_nothrow (fd, buf);
+}
diff --git a/lib/get-errno.c b/lib/get-errno.c
index 8e8ef58..b77ecc2 100644
--- a/lib/get-errno.c
+++ b/lib/get-errno.c
@@ -1,11 +1,11 @@
 /* get-errno.c - get and set errno.
 
-   Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2006, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, 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
@@ -13,19 +13,16 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
+#include <config.h>
 
 #include "get-errno.h"
 
+#include <errno.h>
+
 /* Get and set errno.  A source file that needs to set or get errno,
    but doesn't need to test for specific errno values, can use these
    functions to avoid namespace pollution.  For example, a file that
diff --git a/lib/get-errno.h b/lib/get-errno.h
index d39a8dd..99ab52f 100644
--- a/lib/get-errno.h
+++ b/lib/get-errno.h
@@ -1,11 +1,11 @@
 /* get-errno.h - get and set errno.
 
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, 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
@@ -13,8 +13,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 extern int get_errno (void);
 extern void set_errno (int);
diff --git a/lib/getdelim.c b/lib/getdelim.c
new file mode 100644
index 0000000..b7af0a2
--- /dev/null
+++ b/lib/getdelim.c
@@ -0,0 +1,135 @@
+/* getdelim.c --- Implementation of replacement getdelim function.
+   Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Ported from glibc by Simon Josefsson. */
+
+#include <config.h>
+
+/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
+   optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below.  */
+#define _GL_ARG_NONNULL(params)
+
+#include <stdio.h>
+
+#include <limits.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#ifndef SSIZE_MAX
+# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
+#endif
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+# define getc_maybe_unlocked(fp)        getc(fp)
+#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED
+# undef flockfile
+# undef funlockfile
+# define flockfile(x) ((void) 0)
+# define funlockfile(x) ((void) 0)
+# define getc_maybe_unlocked(fp)        getc(fp)
+#else
+# define getc_maybe_unlocked(fp)        getc_unlocked(fp)
+#endif
+
+/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and
+   NUL-terminate it).  *LINEPTR is a pointer returned from malloc (or
+   NULL), pointing to *N characters of space.  It is realloc'ed as
+   necessary.  Returns the number of characters read (not including
+   the null terminator), or -1 on error or EOF.  */
+
+ssize_t
+getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
+{
+  ssize_t result;
+  size_t cur_len = 0;
+
+  if (lineptr == NULL || n == NULL || fp == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  flockfile (fp);
+
+  if (*lineptr == NULL || *n == 0)
+    {
+      char *new_lineptr;
+      *n = 120;
+      new_lineptr = (char *) realloc (*lineptr, *n);
+      if (new_lineptr == NULL)
+        {
+          result = -1;
+          goto unlock_return;
+        }
+      *lineptr = new_lineptr;
+    }
+
+  for (;;)
+    {
+      int i;
+
+      i = getc_maybe_unlocked (fp);
+      if (i == EOF)
+        {
+          result = -1;
+          break;
+        }
+
+      /* Make enough space for len+1 (for final NUL) bytes.  */
+      if (cur_len + 1 >= *n)
+        {
+          size_t needed_max =
+            SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
+          size_t needed = 2 * *n + 1;   /* Be generous. */
+          char *new_lineptr;
+
+          if (needed_max < needed)
+            needed = needed_max;
+          if (cur_len + 1 >= needed)
+            {
+              result = -1;
+              errno = EOVERFLOW;
+              goto unlock_return;
+            }
+
+          new_lineptr = (char *) realloc (*lineptr, needed);
+          if (new_lineptr == NULL)
+            {
+              result = -1;
+              goto unlock_return;
+            }
+
+          *lineptr = new_lineptr;
+          *n = needed;
+        }
+
+      (*lineptr)[cur_len] = i;
+      cur_len++;
+
+      if (i == delimiter)
+        break;
+    }
+  (*lineptr)[cur_len] = '\0';
+  result = cur_len ? cur_len : result;
+
+ unlock_return:
+  funlockfile (fp); /* doesn't set errno */
+
+  return result;
+}
diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c
new file mode 100644
index 0000000..f9524fd
--- /dev/null
+++ b/lib/getdtablesize.c
@@ -0,0 +1,86 @@
+/* getdtablesize() function for platforms that don't have it.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+#include <stdio.h>
+
+#include "msvc-inval.h"
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+_setmaxstdio_nothrow (int newmax)
+{
+  int result;
+
+  TRY_MSVC_INVAL
+    {
+      result = _setmaxstdio (newmax);
+    }
+  CATCH_MSVC_INVAL
+    {
+      result = -1;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+# define _setmaxstdio _setmaxstdio_nothrow
+#endif
+
+/* Cache for the previous getdtablesize () result.  */
+static int dtablesize;
+
+int
+getdtablesize (void)
+{
+  if (dtablesize == 0)
+    {
+      /* We are looking for the number N such that the valid file descriptors
+         are 0..N-1.  It can be obtained through a loop as follows:
+           {
+             int fd;
+             for (fd = 3; fd < 65536; fd++)
+               if (dup2 (0, fd) == -1)
+                 break;
+             return fd;
+           }
+         On Windows XP, the result is 2048.
+         The drawback of this loop is that it allocates memory for a libc
+         internal array that is never freed.
+
+         The number N can also be obtained as the upper bound for
+         _getmaxstdio ().  _getmaxstdio () returns the maximum number of open
+         FILE objects.  The sanity check in _setmaxstdio reveals the maximum
+         number of file descriptors.  This too allocates memory, but it is
+         freed when we call _setmaxstdio with the original value.  */
+      int orig_max_stdio = _getmaxstdio ();
+      unsigned int bound;
+      for (bound = 0x10000; _setmaxstdio (bound) < 0; bound = bound / 2)
+        ;
+      _setmaxstdio (orig_max_stdio);
+      dtablesize = bound;
+    }
+  return dtablesize;
+}
+
+#endif
diff --git a/lib/getline.c b/lib/getline.c
new file mode 100644
index 0000000..f422747
--- /dev/null
+++ b/lib/getline.c
@@ -0,0 +1,27 @@
+/* getline.c --- Implementation of replacement getline function.
+   Copyright (C) 2005-2007, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Simon Josefsson. */
+
+#include <config.h>
+
+#include <stdio.h>
+
+ssize_t
+getline (char **lineptr, size_t *n, FILE *stream)
+{
+  return getdelim (lineptr, n, '\n', stream);
+}
diff --git a/lib/getopt.c b/lib/getopt.c
index 83bd6db..4342a34 100644
--- a/lib/getopt.c
+++ b/lib/getopt.c
@@ -1,26 +1,25 @@
 /* Getopt for GNU.
-   NOTE: getopt is now part of the C library, so if you don't know what
+   NOTE: getopt is part of the C library, so if you don't know what
    "Keep this file name-space clean" means, talk to drepper@gnu.org
    before changing it!
-   Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004,2006
-	Free Software Foundation, Inc.
+   Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2012 Free Software
+   Foundation, Inc.
    This file is part of the GNU C Library.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
+#ifndef _LIBC
 # include <config.h>
 #endif
 
@@ -31,10 +30,6 @@
 #include <string.h>
 #include <unistd.h>
 
-#ifdef VMS
-# include <unixlib.h>
-#endif
-
 #ifdef _LIBC
 # include <libintl.h>
 #else
@@ -46,44 +41,41 @@
 # include <wchar.h>
 #endif
 
-#ifndef attribute_hidden
-# define attribute_hidden
-#endif
+/* This version of 'getopt' appears to the caller like standard Unix 'getopt'
+   but it behaves differently for the user, since it allows the user
+   to intersperse the options with the other arguments.
 
-/* Unlike standard Unix `getopt', functions like `getopt_long'
-   let the user intersperse the options with the other arguments.
-
-   As `getopt_long' works, it permutes the elements of ARGV so that,
+   As 'getopt_long' works, it permutes the elements of ARGV so that,
    when it is done, all the options precede everything else.  Thus
    all application programs are extended to handle flexible argument order.
 
-   Using `getopt' or setting the environment variable POSIXLY_CORRECT
+   Using 'getopt' or setting the environment variable POSIXLY_CORRECT
    disables permutation.
-   Then the application's behavior is completely standard.
+   Then the behavior is completely standard.
 
    GNU application programs can use a third alternative mode in which
    they can distinguish the relative order of options and other arguments.  */
 
 #include "getopt_int.h"
 
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
+/* For communication from 'getopt' to the caller.
+   When 'getopt' finds an option that takes an argument,
    the argument value is returned here.
-   Also, when `ordering' is RETURN_IN_ORDER,
+   Also, when 'ordering' is RETURN_IN_ORDER,
    each non-option ARGV-element is returned here.  */
 
 char *optarg;
 
 /* Index in ARGV of the next element to be scanned.
    This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
+   and for communication between successive calls to 'getopt'.
 
-   On entry to `getopt', zero means this is the first call; initialize.
+   On entry to 'getopt', zero means this is the first call; initialize.
 
-   When `getopt' returns -1, this is the index of the first of the
+   When 'getopt' returns -1, this is the index of the first of the
    non-option elements that the caller should itself scan.
 
-   Otherwise, `optind' communicates from one call to the next
+   Otherwise, 'optind' communicates from one call to the next
    how much of ARGV has been scanned so far.  */
 
 /* 1003.2 says this must be 1 before any call.  */
@@ -126,18 +118,18 @@
 
 # ifdef USE_NONOPTION_FLAGS
 #  define SWAP_FLAGS(ch1, ch2) \
-  if (d->__nonoption_flags_len > 0)					      \
-    {									      \
-      char __tmp = __getopt_nonoption_flags[ch1];			      \
-      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];	      \
-      __getopt_nonoption_flags[ch2] = __tmp;				      \
+  if (d->__nonoption_flags_len > 0)                                           \
+    {                                                                         \
+      char __tmp = __getopt_nonoption_flags[ch1];                             \
+      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];          \
+      __getopt_nonoption_flags[ch2] = __tmp;                                  \
     }
 # else
 #  define SWAP_FLAGS(ch1, ch2)
 # endif
-#else	/* !_LIBC */
+#else   /* !_LIBC */
 # define SWAP_FLAGS(ch1, ch2)
-#endif	/* _LIBC */
+#endif  /* _LIBC */
 
 /* Exchange two adjacent subsequences of ARGV.
    One subsequence is elements [first_nonopt,last_nonopt)
@@ -145,7 +137,7 @@
    The other is elements [last_nonopt,optind), which contains all
    the options processed since those non-options were skipped.
 
-   `first_nonopt' and `last_nonopt' are relocated so that they describe
+   'first_nonopt' and 'last_nonopt' are relocated so that they describe
    the new indices of the non-options in ARGV after they are moved.  */
 
 static void
@@ -162,63 +154,63 @@
      but it consists of two parts that need to be swapped next.  */
 
 #if defined _LIBC && defined USE_NONOPTION_FLAGS
-  /* First make sure the handling of the `__getopt_nonoption_flags'
+  /* First make sure the handling of the '__getopt_nonoption_flags'
      string can work normally.  Our top argument must be in the range
      of the string.  */
   if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len)
     {
       /* We must extend the array.  The user plays games with us and
-	 presents new arguments.  */
+         presents new arguments.  */
       char *new_str = malloc (top + 1);
       if (new_str == NULL)
-	d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
+        d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
       else
-	{
-	  memset (__mempcpy (new_str, __getopt_nonoption_flags,
-			     d->__nonoption_flags_max_len),
-		  '\0', top + 1 - d->__nonoption_flags_max_len);
-	  d->__nonoption_flags_max_len = top + 1;
-	  __getopt_nonoption_flags = new_str;
-	}
+        {
+          memset (__mempcpy (new_str, __getopt_nonoption_flags,
+                             d->__nonoption_flags_max_len),
+                  '\0', top + 1 - d->__nonoption_flags_max_len);
+          d->__nonoption_flags_max_len = top + 1;
+          __getopt_nonoption_flags = new_str;
+        }
     }
 #endif
 
   while (top > middle && middle > bottom)
     {
       if (top - middle > middle - bottom)
-	{
-	  /* Bottom segment is the short one.  */
-	  int len = middle - bottom;
-	  register int i;
+        {
+          /* Bottom segment is the short one.  */
+          int len = middle - bottom;
+          register int i;
 
-	  /* Swap it with the top part of the top segment.  */
-	  for (i = 0; i < len; i++)
-	    {
-	      tem = argv[bottom + i];
-	      argv[bottom + i] = argv[top - (middle - bottom) + i];
-	      argv[top - (middle - bottom) + i] = tem;
-	      SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
-	    }
-	  /* Exclude the moved bottom segment from further swapping.  */
-	  top -= len;
-	}
+          /* Swap it with the top part of the top segment.  */
+          for (i = 0; i < len; i++)
+            {
+              tem = argv[bottom + i];
+              argv[bottom + i] = argv[top - (middle - bottom) + i];
+              argv[top - (middle - bottom) + i] = tem;
+              SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
+            }
+          /* Exclude the moved bottom segment from further swapping.  */
+          top -= len;
+        }
       else
-	{
-	  /* Top segment is the short one.  */
-	  int len = top - middle;
-	  register int i;
+        {
+          /* Top segment is the short one.  */
+          int len = top - middle;
+          register int i;
 
-	  /* Swap it with the bottom part of the bottom segment.  */
-	  for (i = 0; i < len; i++)
-	    {
-	      tem = argv[bottom + i];
-	      argv[bottom + i] = argv[middle + i];
-	      argv[middle + i] = tem;
-	      SWAP_FLAGS (bottom + i, middle + i);
-	    }
-	  /* Exclude the moved top segment from further swapping.  */
-	  bottom += len;
-	}
+          /* Swap it with the bottom part of the bottom segment.  */
+          for (i = 0; i < len; i++)
+            {
+              tem = argv[bottom + i];
+              argv[bottom + i] = argv[middle + i];
+              argv[middle + i] = tem;
+              SWAP_FLAGS (bottom + i, middle + i);
+            }
+          /* Exclude the moved top segment from further swapping.  */
+          bottom += len;
+        }
     }
 
   /* Update records for the slots the non-options now occupy.  */
@@ -230,8 +222,9 @@
 /* Initialize the internal data when the first call is made.  */
 
 static const char *
-_getopt_initialize (int argc, char **argv, const char *optstring,
-		    int posixly_correct, struct _getopt_data *d)
+_getopt_initialize (int argc _GL_UNUSED,
+                    char **argv _GL_UNUSED, const char *optstring,
+                    struct _getopt_data *d, int posixly_correct)
 {
   /* Start processing options with ARGV-element 1 (since ARGV-element 0
      is the program name); the sequence of previously skipped
@@ -265,25 +258,25 @@
       && argc == __libc_argc && argv == __libc_argv)
     {
       if (d->__nonoption_flags_max_len == 0)
-	{
-	  if (__getopt_nonoption_flags == NULL
-	      || __getopt_nonoption_flags[0] == '\0')
-	    d->__nonoption_flags_max_len = -1;
-	  else
-	    {
-	      const char *orig_str = __getopt_nonoption_flags;
-	      int len = d->__nonoption_flags_max_len = strlen (orig_str);
-	      if (d->__nonoption_flags_max_len < argc)
-		d->__nonoption_flags_max_len = argc;
-	      __getopt_nonoption_flags =
-		(char *) malloc (d->__nonoption_flags_max_len);
-	      if (__getopt_nonoption_flags == NULL)
-		d->__nonoption_flags_max_len = -1;
-	      else
-		memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
-			'\0', d->__nonoption_flags_max_len - len);
-	    }
-	}
+        {
+          if (__getopt_nonoption_flags == NULL
+              || __getopt_nonoption_flags[0] == '\0')
+            d->__nonoption_flags_max_len = -1;
+          else
+            {
+              const char *orig_str = __getopt_nonoption_flags;
+              int len = d->__nonoption_flags_max_len = strlen (orig_str);
+              if (d->__nonoption_flags_max_len < argc)
+                d->__nonoption_flags_max_len = argc;
+              __getopt_nonoption_flags =
+                (char *) malloc (d->__nonoption_flags_max_len);
+              if (__getopt_nonoption_flags == NULL)
+                d->__nonoption_flags_max_len = -1;
+              else
+                memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
+                        '\0', d->__nonoption_flags_max_len - len);
+            }
+        }
       d->__nonoption_flags_len = d->__nonoption_flags_max_len;
     }
   else
@@ -298,44 +291,48 @@
 
    If an element of ARGV starts with '-', and is not exactly "-" or "--",
    then it is an option element.  The characters of this element
-   (aside from the initial '-') are option characters.  If `getopt'
+   (aside from the initial '-') are option characters.  If 'getopt'
    is called repeatedly, it returns successively each of the option characters
    from each of the option elements.
 
-   If `getopt' finds another option character, it returns that character,
-   updating `optind' and `nextchar' so that the next call to `getopt' can
+   If 'getopt' finds another option character, it returns that character,
+   updating 'optind' and 'nextchar' so that the next call to 'getopt' can
    resume the scan with the following option character or ARGV-element.
 
-   If there are no more option characters, `getopt' returns -1.
-   Then `optind' is the index in ARGV of the first ARGV-element
+   If there are no more option characters, 'getopt' returns -1.
+   Then 'optind' is the index in ARGV of the first ARGV-element
    that is not an option.  (The ARGV-elements have been permuted
    so that those that are not options now come last.)
 
    OPTSTRING is a string containing the legitimate option characters.
    If an option character is seen that is not listed in OPTSTRING,
-   return '?' after printing an error message.  If you set `opterr' to
+   return '?' after printing an error message.  If you set 'opterr' to
    zero, the error message is suppressed but we still return '?'.
 
    If a char in OPTSTRING is followed by a colon, that means it wants an arg,
    so the following text in the same ARGV-element, or the text of the following
-   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   ARGV-element, is returned in 'optarg'.  Two colons mean an option that
    wants an optional arg; if there is text in the current ARGV-element,
-   it is returned in `optarg', otherwise `optarg' is set to zero.
+   it is returned in 'optarg', otherwise 'optarg' is set to zero.
 
-   If OPTSTRING starts with `-' or `+', it requests different methods of
+   If OPTSTRING starts with '-' or '+', it requests different methods of
    handling the non-option ARGV-elements.
    See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
 
-   Long-named options begin with `--' instead of `-'.
+   Long-named options begin with '--' instead of '-'.
    Their names may be abbreviated as long as the abbreviation is unique
    or is an exact match for some defined option.  If they have an
    argument, it follows the option name in the same ARGV-element, separated
-   from the option name by a `=', or else the in next ARGV-element.
-   When `getopt' finds a long-named option, it returns 0 if that option's
-   `flag' field is nonzero, the value of the option's `val' field
-   if the `flag' field is zero.
+   from the option name by a '=', or else the in next ARGV-element.
+   When 'getopt' finds a long-named option, it returns 0 if that option's
+   'flag' field is nonzero, the value of the option's 'val' field
+   if the 'flag' field is zero.
 
-   LONGOPTS is a vector of `struct option' terminated by an
+   The elements of ARGV aren't really const, because we permute them.
+   But we pretend they're const in the prototype to be compatible
+   with other systems.
+
+   LONGOPTS is a vector of 'struct option' terminated by an
    element containing a name which is zero.
 
    LONGIND returns the index in LONGOPT of the long-named option found.
@@ -343,19 +340,14 @@
    recent call.
 
    If LONG_ONLY is nonzero, '-' as well as '--' can introduce
-   long-named options.
-
-   If POSIXLY_CORRECT is nonzero, behave as if the POSIXLY_CORRECT
-   environment variable were set.  */
+   long-named options.  */
 
 int
 _getopt_internal_r (int argc, char **argv, const char *optstring,
-		    const struct option *longopts, int *longind,
-		    int long_only, int posixly_correct, struct _getopt_data *d)
+                    const struct option *longopts, int *longind,
+                    int long_only, struct _getopt_data *d, int posixly_correct)
 {
   int print_errors = d->opterr;
-  if (optstring[0] == ':')
-    print_errors = 0;
 
   if (argc < 1)
     return -1;
@@ -365,11 +357,15 @@
   if (d->optind == 0 || !d->__initialized)
     {
       if (d->optind == 0)
-	d->optind = 1;	/* Don't scan ARGV[0], the program name.  */
-      optstring = _getopt_initialize (argc, argv, optstring,
-				      posixly_correct, d);
+        d->optind = 1;  /* Don't scan ARGV[0], the program name.  */
+      optstring = _getopt_initialize (argc, argv, optstring, d,
+                                      posixly_correct);
       d->__initialized = 1;
     }
+  else if (optstring[0] == '-' || optstring[0] == '+')
+    optstring++;
+  if (optstring[0] == ':')
+    print_errors = 0;
 
   /* Test whether ARGV[optind] points to a non-option argument.
      Either it does not have option syntax, or there is an environment flag
@@ -377,8 +373,8 @@
      is only used when the used in the GNU libc.  */
 #if defined _LIBC && defined USE_NONOPTION_FLAGS
 # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \
-		      || (d->optind < d->__nonoption_flags_len		      \
-			  && __getopt_nonoption_flags[d->optind] == '1'))
+                      || (d->optind < d->__nonoption_flags_len                \
+                          && __getopt_nonoption_flags[d->optind] == '1'))
 #else
 # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
 #endif
@@ -388,78 +384,78 @@
       /* Advance to the next ARGV-element.  */
 
       /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
-	 moved back by the user (who may also have changed the arguments).  */
+         moved back by the user (who may also have changed the arguments).  */
       if (d->__last_nonopt > d->optind)
-	d->__last_nonopt = d->optind;
+        d->__last_nonopt = d->optind;
       if (d->__first_nonopt > d->optind)
-	d->__first_nonopt = d->optind;
+        d->__first_nonopt = d->optind;
 
       if (d->__ordering == PERMUTE)
-	{
-	  /* If we have just processed some options following some non-options,
-	     exchange them so that the options come first.  */
+        {
+          /* If we have just processed some options following some non-options,
+             exchange them so that the options come first.  */
 
-	  if (d->__first_nonopt != d->__last_nonopt
-	      && d->__last_nonopt != d->optind)
-	    exchange ((char **) argv, d);
-	  else if (d->__last_nonopt != d->optind)
-	    d->__first_nonopt = d->optind;
+          if (d->__first_nonopt != d->__last_nonopt
+              && d->__last_nonopt != d->optind)
+            exchange ((char **) argv, d);
+          else if (d->__last_nonopt != d->optind)
+            d->__first_nonopt = d->optind;
 
-	  /* Skip any additional non-options
-	     and extend the range of non-options previously skipped.  */
+          /* Skip any additional non-options
+             and extend the range of non-options previously skipped.  */
 
-	  while (d->optind < argc && NONOPTION_P)
-	    d->optind++;
-	  d->__last_nonopt = d->optind;
-	}
+          while (d->optind < argc && NONOPTION_P)
+            d->optind++;
+          d->__last_nonopt = d->optind;
+        }
 
-      /* The special ARGV-element `--' means premature end of options.
-	 Skip it like a null option,
-	 then exchange with previous non-options as if it were an option,
-	 then skip everything else like a non-option.  */
+      /* The special ARGV-element '--' means premature end of options.
+         Skip it like a null option,
+         then exchange with previous non-options as if it were an option,
+         then skip everything else like a non-option.  */
 
       if (d->optind != argc && !strcmp (argv[d->optind], "--"))
-	{
-	  d->optind++;
+        {
+          d->optind++;
 
-	  if (d->__first_nonopt != d->__last_nonopt
-	      && d->__last_nonopt != d->optind)
-	    exchange ((char **) argv, d);
-	  else if (d->__first_nonopt == d->__last_nonopt)
-	    d->__first_nonopt = d->optind;
-	  d->__last_nonopt = argc;
+          if (d->__first_nonopt != d->__last_nonopt
+              && d->__last_nonopt != d->optind)
+            exchange ((char **) argv, d);
+          else if (d->__first_nonopt == d->__last_nonopt)
+            d->__first_nonopt = d->optind;
+          d->__last_nonopt = argc;
 
-	  d->optind = argc;
-	}
+          d->optind = argc;
+        }
 
       /* If we have done all the ARGV-elements, stop the scan
-	 and back over any non-options that we skipped and permuted.  */
+         and back over any non-options that we skipped and permuted.  */
 
       if (d->optind == argc)
-	{
-	  /* Set the next-arg-index to point at the non-options
-	     that we previously skipped, so the caller will digest them.  */
-	  if (d->__first_nonopt != d->__last_nonopt)
-	    d->optind = d->__first_nonopt;
-	  return -1;
-	}
+        {
+          /* Set the next-arg-index to point at the non-options
+             that we previously skipped, so the caller will digest them.  */
+          if (d->__first_nonopt != d->__last_nonopt)
+            d->optind = d->__first_nonopt;
+          return -1;
+        }
 
       /* If we have come to a non-option and did not permute it,
-	 either stop the scan or describe it to the caller and pass it by.  */
+         either stop the scan or describe it to the caller and pass it by.  */
 
       if (NONOPTION_P)
-	{
-	  if (d->__ordering == REQUIRE_ORDER)
-	    return -1;
-	  d->optarg = argv[d->optind++];
-	  return 1;
-	}
+        {
+          if (d->__ordering == REQUIRE_ORDER)
+            return -1;
+          d->optarg = argv[d->optind++];
+          return 1;
+        }
 
       /* We have found another option-ARGV-element.
-	 Skip the initial punctuation.  */
+         Skip the initial punctuation.  */
 
       d->__nextchar = (argv[d->optind] + 1
-		  + (longopts != NULL && argv[d->optind][1] == '-'));
+                  + (longopts != NULL && argv[d->optind][1] == '-'));
     }
 
   /* Decode the current option-ARGV-element.  */
@@ -479,606 +475,650 @@
 
   if (longopts != NULL
       && (argv[d->optind][1] == '-'
-	  || (long_only && (argv[d->optind][2]
-			    || !strchr (optstring, argv[d->optind][1])))))
+          || (long_only && (argv[d->optind][2]
+                            || !strchr (optstring, argv[d->optind][1])))))
     {
       char *nameend;
+      unsigned int namelen;
       const struct option *p;
       const struct option *pfound = NULL;
+      struct option_list
+      {
+        const struct option *p;
+        struct option_list *next;
+      } *ambig_list = NULL;
       int exact = 0;
-      int ambig = 0;
       int indfound = -1;
       int option_index;
 
       for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
-	/* Do nothing.  */ ;
+        /* Do nothing.  */ ;
+      namelen = nameend - d->__nextchar;
 
       /* Test all long options for either exact match
-	 or abbreviated matches.  */
+         or abbreviated matches.  */
       for (p = longopts, option_index = 0; p->name; p++, option_index++)
-	if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
-	  {
-	    if ((unsigned int) (nameend - d->__nextchar)
-		== (unsigned int) strlen (p->name))
-	      {
-		/* Exact match found.  */
-		pfound = p;
-		indfound = option_index;
-		exact = 1;
-		break;
-	      }
-	    else if (pfound == NULL)
-	      {
-		/* First nonexact match found.  */
-		pfound = p;
-		indfound = option_index;
-	      }
-	    else if (long_only
-		     || pfound->has_arg != p->has_arg
-		     || pfound->flag != p->flag
-		     || pfound->val != p->val)
-	      /* Second or later nonexact match found.  */
-	      ambig = 1;
-	  }
+        if (!strncmp (p->name, d->__nextchar, namelen))
+          {
+            if (namelen == (unsigned int) strlen (p->name))
+              {
+                /* Exact match found.  */
+                pfound = p;
+                indfound = option_index;
+                exact = 1;
+                break;
+              }
+            else if (pfound == NULL)
+              {
+                /* First nonexact match found.  */
+                pfound = p;
+                indfound = option_index;
+              }
+            else if (long_only
+                     || pfound->has_arg != p->has_arg
+                     || pfound->flag != p->flag
+                     || pfound->val != p->val)
+              {
+                /* Second or later nonexact match found.  */
+                struct option_list *newp = malloc (sizeof (*newp));
+                newp->p = p;
+                newp->next = ambig_list;
+                ambig_list = newp;
+              }
+          }
 
-      if (ambig && !exact)
-	{
-	  if (print_errors)
-	    {
+      if (ambig_list != NULL && !exact)
+        {
+          if (print_errors)
+            {
+              struct option_list first;
+              first.p = pfound;
+              first.next = ambig_list;
+              ambig_list = &first;
+
 #if defined _LIBC && defined USE_IN_LIBIO
-	      char *buf;
+              char *buf = NULL;
+              size_t buflen = 0;
 
-	      if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
-			      argv[0], argv[d->optind]) >= 0)
-		{
-		  _IO_flockfile (stderr);
+              FILE *fp = open_memstream (&buf, &buflen);
+              if (fp != NULL)
+                {
+                  fprintf (fp,
+                           _("%s: option '%s' is ambiguous; possibilities:"),
+                           argv[0], argv[d->optind]);
 
-		  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-		  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+                  do
+                    {
+                      fprintf (fp, " '--%s'", ambig_list->p->name);
+                      ambig_list = ambig_list->next;
+                    }
+                  while (ambig_list != NULL);
 
-		  __fxprintf (NULL, "%s", buf);
+                  fputc_unlocked ('\n', fp);
 
-		  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-		  _IO_funlockfile (stderr);
+                  if (__builtin_expect (fclose (fp) != EOF, 1))
+                    {
+                      _IO_flockfile (stderr);
 
-		  free (buf);
-		}
+                      int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                      ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                      __fxprintf (NULL, "%s", buf);
+
+                      ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                      _IO_funlockfile (stderr);
+
+                      free (buf);
+                    }
+                }
 #else
-	      fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
-		       argv[0], argv[d->optind]);
+              fprintf (stderr,
+                       _("%s: option '%s' is ambiguous; possibilities:"),
+                       argv[0], argv[d->optind]);
+              do
+                {
+                  fprintf (stderr, " '--%s'", ambig_list->p->name);
+                  ambig_list = ambig_list->next;
+                }
+              while (ambig_list != NULL);
+
+              fputc ('\n', stderr);
 #endif
-	    }
-	  d->__nextchar += strlen (d->__nextchar);
-	  d->optind++;
-	  d->optopt = 0;
-	  return '?';
-	}
+            }
+          d->__nextchar += strlen (d->__nextchar);
+          d->optind++;
+          d->optopt = 0;
+          return '?';
+        }
+
+      while (ambig_list != NULL)
+        {
+          struct option_list *pn = ambig_list->next;
+          free (ambig_list);
+          ambig_list = pn;
+        }
 
       if (pfound != NULL)
-	{
-	  option_index = indfound;
-	  d->optind++;
-	  if (*nameend)
-	    {
-	      /* Don't test has_arg with >, because some C compilers don't
-		 allow it to be used on enums.  */
-	      if (pfound->has_arg)
-		d->optarg = nameend + 1;
-	      else
-		{
-		  if (print_errors)
-		    {
+        {
+          option_index = indfound;
+          d->optind++;
+          if (*nameend)
+            {
+              /* Don't test has_arg with >, because some C compilers don't
+                 allow it to be used on enums.  */
+              if (pfound->has_arg)
+                d->optarg = nameend + 1;
+              else
+                {
+                  if (print_errors)
+                    {
 #if defined _LIBC && defined USE_IN_LIBIO
-		      char *buf;
-		      int n;
+                      char *buf;
+                      int n;
 #endif
 
-		      if (argv[d->optind - 1][1] == '-')
-			{
-			  /* --option */
+                      if (argv[d->optind - 1][1] == '-')
+                        {
+                          /* --option */
 #if defined _LIBC && defined USE_IN_LIBIO
-			  n = __asprintf (&buf, _("\
-%s: option `--%s' doesn't allow an argument\n"),
-					  argv[0], pfound->name);
+                          n = __asprintf (&buf, _("\
+%s: option '--%s' doesn't allow an argument\n"),
+                                          argv[0], pfound->name);
 #else
-			  fprintf (stderr, _("\
-%s: option `--%s' doesn't allow an argument\n"),
-				   argv[0], pfound->name);
+                          fprintf (stderr, _("\
+%s: option '--%s' doesn't allow an argument\n"),
+                                   argv[0], pfound->name);
 #endif
-			}
-		      else
-			{
-			  /* +option or -option */
+                        }
+                      else
+                        {
+                          /* +option or -option */
 #if defined _LIBC && defined USE_IN_LIBIO
-			  n = __asprintf (&buf, _("\
-%s: option `%c%s' doesn't allow an argument\n"),
-					  argv[0], argv[d->optind - 1][0],
-					  pfound->name);
+                          n = __asprintf (&buf, _("\
+%s: option '%c%s' doesn't allow an argument\n"),
+                                          argv[0], argv[d->optind - 1][0],
+                                          pfound->name);
 #else
-			  fprintf (stderr, _("\
-%s: option `%c%s' doesn't allow an argument\n"),
-				   argv[0], argv[d->optind - 1][0],
-				   pfound->name);
+                          fprintf (stderr, _("\
+%s: option '%c%s' doesn't allow an argument\n"),
+                                   argv[0], argv[d->optind - 1][0],
+                                   pfound->name);
 #endif
-			}
+                        }
 
 #if defined _LIBC && defined USE_IN_LIBIO
-		      if (n >= 0)
-			{
-			  _IO_flockfile (stderr);
+                      if (n >= 0)
+                        {
+                          _IO_flockfile (stderr);
 
-			  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-			  ((_IO_FILE *) stderr)->_flags2
-			    |= _IO_FLAGS2_NOTCANCEL;
+                          int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                          ((_IO_FILE *) stderr)->_flags2
+                            |= _IO_FLAGS2_NOTCANCEL;
 
-			  __fxprintf (NULL, "%s", buf);
+                          __fxprintf (NULL, "%s", buf);
 
-			  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-			  _IO_funlockfile (stderr);
+                          ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                          _IO_funlockfile (stderr);
 
-			  free (buf);
-			}
+                          free (buf);
+                        }
 #endif
-		    }
+                    }
 
-		  d->__nextchar += strlen (d->__nextchar);
+                  d->__nextchar += strlen (d->__nextchar);
 
-		  d->optopt = pfound->val;
-		  return '?';
-		}
-	    }
-	  else if (pfound->has_arg == 1)
-	    {
-	      if (d->optind < argc)
-		d->optarg = argv[d->optind++];
-	      else
-		{
-		  if (print_errors)
-		    {
+                  d->optopt = pfound->val;
+                  return '?';
+                }
+            }
+          else if (pfound->has_arg == 1)
+            {
+              if (d->optind < argc)
+                d->optarg = argv[d->optind++];
+              else
+                {
+                  if (print_errors)
+                    {
 #if defined _LIBC && defined USE_IN_LIBIO
-		      char *buf;
+                      char *buf;
 
-		      if (__asprintf (&buf, _("\
-%s: option `%s' requires an argument\n"),
-				      argv[0], argv[d->optind - 1]) >= 0)
-			{
-			  _IO_flockfile (stderr);
+                      if (__asprintf (&buf, _("\
+%s: option '--%s' requires an argument\n"),
+                                      argv[0], pfound->name) >= 0)
+                        {
+                          _IO_flockfile (stderr);
 
-			  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-			  ((_IO_FILE *) stderr)->_flags2
-			    |= _IO_FLAGS2_NOTCANCEL;
+                          int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                          ((_IO_FILE *) stderr)->_flags2
+                            |= _IO_FLAGS2_NOTCANCEL;
 
-			  __fxprintf (NULL, "%s", buf);
+                          __fxprintf (NULL, "%s", buf);
 
-			  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-			  _IO_funlockfile (stderr);
+                          ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                          _IO_funlockfile (stderr);
 
-			  free (buf);
-			}
+                          free (buf);
+                        }
 #else
-		      fprintf (stderr,
-			       _("%s: option `%s' requires an argument\n"),
-			       argv[0], argv[d->optind - 1]);
+                      fprintf (stderr,
+                               _("%s: option '--%s' requires an argument\n"),
+                               argv[0], pfound->name);
 #endif
-		    }
-		  d->__nextchar += strlen (d->__nextchar);
-		  d->optopt = pfound->val;
-		  return optstring[0] == ':' ? ':' : '?';
-		}
-	    }
-	  d->__nextchar += strlen (d->__nextchar);
-	  if (longind != NULL)
-	    *longind = option_index;
-	  if (pfound->flag)
-	    {
-	      *(pfound->flag) = pfound->val;
-	      return 0;
-	    }
-	  return pfound->val;
-	}
+                    }
+                  d->__nextchar += strlen (d->__nextchar);
+                  d->optopt = pfound->val;
+                  return optstring[0] == ':' ? ':' : '?';
+                }
+            }
+          d->__nextchar += strlen (d->__nextchar);
+          if (longind != NULL)
+            *longind = option_index;
+          if (pfound->flag)
+            {
+              *(pfound->flag) = pfound->val;
+              return 0;
+            }
+          return pfound->val;
+        }
 
       /* Can't find it as a long option.  If this is not getopt_long_only,
-	 or the option starts with '--' or is not a valid short
-	 option, then it's an error.
-	 Otherwise interpret it as a short option.  */
+         or the option starts with '--' or is not a valid short
+         option, then it's an error.
+         Otherwise interpret it as a short option.  */
       if (!long_only || argv[d->optind][1] == '-'
-	  || strchr (optstring, *d->__nextchar) == NULL)
-	{
-	  if (print_errors)
-	    {
+          || strchr (optstring, *d->__nextchar) == NULL)
+        {
+          if (print_errors)
+            {
 #if defined _LIBC && defined USE_IN_LIBIO
-	      char *buf;
-	      int n;
+              char *buf;
+              int n;
 #endif
 
-	      if (argv[d->optind][1] == '-')
-		{
-		  /* --option */
+              if (argv[d->optind][1] == '-')
+                {
+                  /* --option */
 #if defined _LIBC && defined USE_IN_LIBIO
-		  n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
-				  argv[0], d->__nextchar);
+                  n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"),
+                                  argv[0], d->__nextchar);
 #else
-		  fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
-			   argv[0], d->__nextchar);
+                  fprintf (stderr, _("%s: unrecognized option '--%s'\n"),
+                           argv[0], d->__nextchar);
 #endif
-		}
-	      else
-		{
-		  /* +option or -option */
+                }
+              else
+                {
+                  /* +option or -option */
 #if defined _LIBC && defined USE_IN_LIBIO
-		  n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
-				  argv[0], argv[d->optind][0], d->__nextchar);
+                  n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"),
+                                  argv[0], argv[d->optind][0], d->__nextchar);
 #else
-		  fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
-			   argv[0], argv[d->optind][0], d->__nextchar);
+                  fprintf (stderr, _("%s: unrecognized option '%c%s'\n"),
+                           argv[0], argv[d->optind][0], d->__nextchar);
 #endif
-		}
+                }
 
 #if defined _LIBC && defined USE_IN_LIBIO
-	      if (n >= 0)
-		{
-		  _IO_flockfile (stderr);
+              if (n >= 0)
+                {
+                  _IO_flockfile (stderr);
 
-		  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-		  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+                  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		  __fxprintf (NULL, "%s", buf);
+                  __fxprintf (NULL, "%s", buf);
 
-		  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-		  _IO_funlockfile (stderr);
+                  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                  _IO_funlockfile (stderr);
 
-		  free (buf);
-		}
+                  free (buf);
+                }
 #endif
-	    }
-	  d->__nextchar = (char *) "";
-	  d->optind++;
-	  d->optopt = 0;
-	  return '?';
-	}
+            }
+          d->__nextchar = (char *) "";
+          d->optind++;
+          d->optopt = 0;
+          return '?';
+        }
     }
 
   /* Look at and handle the next short option-character.  */
 
   {
     char c = *d->__nextchar++;
-    char *temp = strchr (optstring, c);
+    const char *temp = strchr (optstring, c);
 
-    /* Increment `optind' when we start to process its last character.  */
+    /* Increment 'optind' when we start to process its last character.  */
     if (*d->__nextchar == '\0')
       ++d->optind;
 
-    if (temp == NULL || c == ':')
+    if (temp == NULL || c == ':' || c == ';')
       {
-	if (print_errors)
-	  {
+        if (print_errors)
+          {
 #if defined _LIBC && defined USE_IN_LIBIO
-	      char *buf;
-	      int n;
+              char *buf;
+              int n;
 #endif
 
-	    if (d->__posixly_correct)
-	      {
-		/* 1003.2 specifies the format of this message.  */
 #if defined _LIBC && defined USE_IN_LIBIO
-		n = __asprintf (&buf, _("%s: illegal option -- %c\n"),
-				argv[0], c);
+              n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"),
+                              argv[0], c);
 #else
-		fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
+              fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c);
 #endif
-	      }
-	    else
-	      {
-#if defined _LIBC && defined USE_IN_LIBIO
-		n = __asprintf (&buf, _("%s: invalid option -- %c\n"),
-				argv[0], c);
-#else
-		fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
-#endif
-	      }
 
 #if defined _LIBC && defined USE_IN_LIBIO
-	    if (n >= 0)
-	      {
-		_IO_flockfile (stderr);
+            if (n >= 0)
+              {
+                _IO_flockfile (stderr);
 
-		int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-		((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+                int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		__fxprintf (NULL, "%s", buf);
+                __fxprintf (NULL, "%s", buf);
 
-		((_IO_FILE *) stderr)->_flags2 = old_flags2;
-		_IO_funlockfile (stderr);
+                ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                _IO_funlockfile (stderr);
 
-		free (buf);
-	      }
+                free (buf);
+              }
 #endif
-	  }
-	d->optopt = c;
-	return '?';
+          }
+        d->optopt = c;
+        return '?';
       }
     /* Convenience. Treat POSIX -W foo same as long option --foo */
     if (temp[0] == 'W' && temp[1] == ';')
       {
-	char *nameend;
-	const struct option *p;
-	const struct option *pfound = NULL;
-	int exact = 0;
-	int ambig = 0;
-	int indfound = 0;
-	int option_index;
+        char *nameend;
+        const struct option *p;
+        const struct option *pfound = NULL;
+        int exact = 0;
+        int ambig = 0;
+        int indfound = 0;
+        int option_index;
 
-	/* This is an option that requires an argument.  */
-	if (*d->__nextchar != '\0')
-	  {
-	    d->optarg = d->__nextchar;
-	    /* If we end this ARGV-element by taking the rest as an arg,
-	       we must advance to the next element now.  */
-	    d->optind++;
-	  }
-	else if (d->optind == argc)
-	  {
-	    if (print_errors)
-	      {
-		/* 1003.2 specifies the format of this message.  */
+        if (longopts == NULL)
+          goto no_longs;
+
+        /* This is an option that requires an argument.  */
+        if (*d->__nextchar != '\0')
+          {
+            d->optarg = d->__nextchar;
+            /* If we end this ARGV-element by taking the rest as an arg,
+               we must advance to the next element now.  */
+            d->optind++;
+          }
+        else if (d->optind == argc)
+          {
+            if (print_errors)
+              {
 #if defined _LIBC && defined USE_IN_LIBIO
-		char *buf;
+                char *buf;
 
-		if (__asprintf (&buf,
-				_("%s: option requires an argument -- %c\n"),
-				argv[0], c) >= 0)
-		  {
-		    _IO_flockfile (stderr);
+                if (__asprintf (&buf,
+                                _("%s: option requires an argument -- '%c'\n"),
+                                argv[0], c) >= 0)
+                  {
+                    _IO_flockfile (stderr);
 
-		    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-		    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+                    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		    __fxprintf (NULL, "%s", buf);
+                    __fxprintf (NULL, "%s", buf);
 
-		    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-		    _IO_funlockfile (stderr);
+                    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                    _IO_funlockfile (stderr);
 
-		    free (buf);
-		  }
+                    free (buf);
+                  }
 #else
-		fprintf (stderr, _("%s: option requires an argument -- %c\n"),
-			 argv[0], c);
+                fprintf (stderr,
+                         _("%s: option requires an argument -- '%c'\n"),
+                         argv[0], c);
 #endif
-	      }
-	    d->optopt = c;
-	    if (optstring[0] == ':')
-	      c = ':';
-	    else
-	      c = '?';
-	    return c;
-	  }
-	else
-	  /* We already incremented `d->optind' once;
-	     increment it again when taking next ARGV-elt as argument.  */
-	  d->optarg = argv[d->optind++];
+              }
+            d->optopt = c;
+            if (optstring[0] == ':')
+              c = ':';
+            else
+              c = '?';
+            return c;
+          }
+        else
+          /* We already incremented 'd->optind' once;
+             increment it again when taking next ARGV-elt as argument.  */
+          d->optarg = argv[d->optind++];
 
-	/* optarg is now the argument, see if it's in the
-	   table of longopts.  */
+        /* optarg is now the argument, see if it's in the
+           table of longopts.  */
 
-	for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '=';
-	     nameend++)
-	  /* Do nothing.  */ ;
+        for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '=';
+             nameend++)
+          /* Do nothing.  */ ;
 
-	/* Test all long options for either exact match
-	   or abbreviated matches.  */
-	for (p = longopts, option_index = 0; p->name; p++, option_index++)
-	  if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
-	    {
-	      if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name))
-		{
-		  /* Exact match found.  */
-		  pfound = p;
-		  indfound = option_index;
-		  exact = 1;
-		  break;
-		}
-	      else if (pfound == NULL)
-		{
-		  /* First nonexact match found.  */
-		  pfound = p;
-		  indfound = option_index;
-		}
-	      else
-		/* Second or later nonexact match found.  */
-		ambig = 1;
-	    }
-	if (ambig && !exact)
-	  {
-	    if (print_errors)
-	      {
+        /* Test all long options for either exact match
+           or abbreviated matches.  */
+        for (p = longopts, option_index = 0; p->name; p++, option_index++)
+          if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+            {
+              if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name))
+                {
+                  /* Exact match found.  */
+                  pfound = p;
+                  indfound = option_index;
+                  exact = 1;
+                  break;
+                }
+              else if (pfound == NULL)
+                {
+                  /* First nonexact match found.  */
+                  pfound = p;
+                  indfound = option_index;
+                }
+              else if (long_only
+                       || pfound->has_arg != p->has_arg
+                       || pfound->flag != p->flag
+                       || pfound->val != p->val)
+                /* Second or later nonexact match found.  */
+                ambig = 1;
+            }
+        if (ambig && !exact)
+          {
+            if (print_errors)
+              {
 #if defined _LIBC && defined USE_IN_LIBIO
-		char *buf;
+                char *buf;
 
-		if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
-				argv[0], argv[d->optind]) >= 0)
-		  {
-		    _IO_flockfile (stderr);
+                if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"),
+                                argv[0], d->optarg) >= 0)
+                  {
+                    _IO_flockfile (stderr);
 
-		    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-		    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+                    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		    __fxprintf (NULL, "%s", buf);
+                    __fxprintf (NULL, "%s", buf);
 
-		    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-		    _IO_funlockfile (stderr);
+                    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                    _IO_funlockfile (stderr);
 
-		    free (buf);
-		  }
+                    free (buf);
+                  }
 #else
-		fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
-			 argv[0], argv[d->optind]);
+                fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"),
+                         argv[0], d->optarg);
 #endif
-	      }
-	    d->__nextchar += strlen (d->__nextchar);
-	    d->optind++;
-	    return '?';
-	  }
-	if (pfound != NULL)
-	  {
-	    option_index = indfound;
-	    if (*nameend)
-	      {
-		/* Don't test has_arg with >, because some C compilers don't
-		   allow it to be used on enums.  */
-		if (pfound->has_arg)
-		  d->optarg = nameend + 1;
-		else
-		  {
-		    if (print_errors)
-		      {
+              }
+            d->__nextchar += strlen (d->__nextchar);
+            d->optind++;
+            return '?';
+          }
+        if (pfound != NULL)
+          {
+            option_index = indfound;
+            if (*nameend)
+              {
+                /* Don't test has_arg with >, because some C compilers don't
+                   allow it to be used on enums.  */
+                if (pfound->has_arg)
+                  d->optarg = nameend + 1;
+                else
+                  {
+                    if (print_errors)
+                      {
 #if defined _LIBC && defined USE_IN_LIBIO
-			char *buf;
+                        char *buf;
 
-			if (__asprintf (&buf, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
-					argv[0], pfound->name) >= 0)
-			  {
-			    _IO_flockfile (stderr);
+                        if (__asprintf (&buf, _("\
+%s: option '-W %s' doesn't allow an argument\n"),
+                                        argv[0], pfound->name) >= 0)
+                          {
+                            _IO_flockfile (stderr);
 
-			    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-			    ((_IO_FILE *) stderr)->_flags2
-			      |= _IO_FLAGS2_NOTCANCEL;
+                            int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                            ((_IO_FILE *) stderr)->_flags2
+                              |= _IO_FLAGS2_NOTCANCEL;
 
-			    __fxprintf (NULL, "%s", buf);
+                            __fxprintf (NULL, "%s", buf);
 
-			    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-			    _IO_funlockfile (stderr);
+                            ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                            _IO_funlockfile (stderr);
 
-			    free (buf);
-			  }
+                            free (buf);
+                          }
 #else
-			fprintf (stderr, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
-				 argv[0], pfound->name);
+                        fprintf (stderr, _("\
+%s: option '-W %s' doesn't allow an argument\n"),
+                                 argv[0], pfound->name);
 #endif
-		      }
+                      }
 
-		    d->__nextchar += strlen (d->__nextchar);
-		    return '?';
-		  }
-	      }
-	    else if (pfound->has_arg == 1)
-	      {
-		if (d->optind < argc)
-		  d->optarg = argv[d->optind++];
-		else
-		  {
-		    if (print_errors)
-		      {
+                    d->__nextchar += strlen (d->__nextchar);
+                    return '?';
+                  }
+              }
+            else if (pfound->has_arg == 1)
+              {
+                if (d->optind < argc)
+                  d->optarg = argv[d->optind++];
+                else
+                  {
+                    if (print_errors)
+                      {
 #if defined _LIBC && defined USE_IN_LIBIO
-			char *buf;
+                        char *buf;
 
-			if (__asprintf (&buf, _("\
-%s: option `%s' requires an argument\n"),
-					argv[0], argv[d->optind - 1]) >= 0)
-			  {
-			    _IO_flockfile (stderr);
+                        if (__asprintf (&buf, _("\
+%s: option '-W %s' requires an argument\n"),
+                                        argv[0], pfound->name) >= 0)
+                          {
+                            _IO_flockfile (stderr);
 
-			    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-			    ((_IO_FILE *) stderr)->_flags2
-			      |= _IO_FLAGS2_NOTCANCEL;
+                            int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                            ((_IO_FILE *) stderr)->_flags2
+                              |= _IO_FLAGS2_NOTCANCEL;
 
-			    __fxprintf (NULL, "%s", buf);
+                            __fxprintf (NULL, "%s", buf);
 
-			    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-			    _IO_funlockfile (stderr);
+                            ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                            _IO_funlockfile (stderr);
 
-			    free (buf);
-			  }
+                            free (buf);
+                          }
 #else
-			fprintf (stderr,
-				 _("%s: option `%s' requires an argument\n"),
-				 argv[0], argv[d->optind - 1]);
+                        fprintf (stderr, _("\
+%s: option '-W %s' requires an argument\n"),
+                                 argv[0], pfound->name);
 #endif
-		      }
-		    d->__nextchar += strlen (d->__nextchar);
-		    return optstring[0] == ':' ? ':' : '?';
-		  }
-	      }
-	    d->__nextchar += strlen (d->__nextchar);
-	    if (longind != NULL)
-	      *longind = option_index;
-	    if (pfound->flag)
-	      {
-		*(pfound->flag) = pfound->val;
-		return 0;
-	      }
-	    return pfound->val;
-	  }
-	  d->__nextchar = NULL;
-	  return 'W';	/* Let the application handle it.   */
+                      }
+                    d->__nextchar += strlen (d->__nextchar);
+                    return optstring[0] == ':' ? ':' : '?';
+                  }
+              }
+            else
+              d->optarg = NULL;
+            d->__nextchar += strlen (d->__nextchar);
+            if (longind != NULL)
+              *longind = option_index;
+            if (pfound->flag)
+              {
+                *(pfound->flag) = pfound->val;
+                return 0;
+              }
+            return pfound->val;
+          }
+
+      no_longs:
+        d->__nextchar = NULL;
+        return 'W';   /* Let the application handle it.   */
       }
     if (temp[1] == ':')
       {
-	if (temp[2] == ':')
-	  {
-	    /* This is an option that accepts an argument optionally.  */
-	    if (*d->__nextchar != '\0')
-	      {
-		d->optarg = d->__nextchar;
-		d->optind++;
-	      }
-	    else
-	      d->optarg = NULL;
-	    d->__nextchar = NULL;
-	  }
-	else
-	  {
-	    /* This is an option that requires an argument.  */
-	    if (*d->__nextchar != '\0')
-	      {
-		d->optarg = d->__nextchar;
-		/* If we end this ARGV-element by taking the rest as an arg,
-		   we must advance to the next element now.  */
-		d->optind++;
-	      }
-	    else if (d->optind == argc)
-	      {
-		if (print_errors)
-		  {
-		    /* 1003.2 specifies the format of this message.  */
+        if (temp[2] == ':')
+          {
+            /* This is an option that accepts an argument optionally.  */
+            if (*d->__nextchar != '\0')
+              {
+                d->optarg = d->__nextchar;
+                d->optind++;
+              }
+            else
+              d->optarg = NULL;
+            d->__nextchar = NULL;
+          }
+        else
+          {
+            /* This is an option that requires an argument.  */
+            if (*d->__nextchar != '\0')
+              {
+                d->optarg = d->__nextchar;
+                /* If we end this ARGV-element by taking the rest as an arg,
+                   we must advance to the next element now.  */
+                d->optind++;
+              }
+            else if (d->optind == argc)
+              {
+                if (print_errors)
+                  {
 #if defined _LIBC && defined USE_IN_LIBIO
-		    char *buf;
+                    char *buf;
 
-		    if (__asprintf (&buf, _("\
-%s: option requires an argument -- %c\n"),
-				    argv[0], c) >= 0)
-		      {
-			_IO_flockfile (stderr);
+                    if (__asprintf (&buf, _("\
+%s: option requires an argument -- '%c'\n"),
+                                    argv[0], c) >= 0)
+                      {
+                        _IO_flockfile (stderr);
 
-			int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-			((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+                        int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                        ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-			__fxprintf (NULL, "%s", buf);
+                        __fxprintf (NULL, "%s", buf);
 
-			((_IO_FILE *) stderr)->_flags2 = old_flags2;
-			_IO_funlockfile (stderr);
+                        ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                        _IO_funlockfile (stderr);
 
-			free (buf);
-		      }
+                        free (buf);
+                      }
 #else
-		    fprintf (stderr,
-			     _("%s: option requires an argument -- %c\n"),
-			     argv[0], c);
+                    fprintf (stderr,
+                             _("%s: option requires an argument -- '%c'\n"),
+                             argv[0], c);
 #endif
-		  }
-		d->optopt = c;
-		if (optstring[0] == ':')
-		  c = ':';
-		else
-		  c = '?';
-	      }
-	    else
-	      /* We already incremented `optind' once;
-		 increment it again when taking next ARGV-elt as argument.  */
-	      d->optarg = argv[d->optind++];
-	    d->__nextchar = NULL;
-	  }
+                  }
+                d->optopt = c;
+                if (optstring[0] == ':')
+                  c = ':';
+                else
+                  c = '?';
+              }
+            else
+              /* We already incremented 'optind' once;
+                 increment it again when taking next ARGV-elt as argument.  */
+              d->optarg = argv[d->optind++];
+            d->__nextchar = NULL;
+          }
       }
     return c;
   }
@@ -1086,16 +1126,17 @@
 
 int
 _getopt_internal (int argc, char **argv, const char *optstring,
-		  const struct option *longopts, int *longind,
-		  int long_only, int posixly_correct)
+                  const struct option *longopts, int *longind, int long_only,
+                  int posixly_correct)
 {
   int result;
 
   getopt_data.optind = optind;
   getopt_data.opterr = opterr;
 
-  result = _getopt_internal_r (argc, argv, optstring, longopts, longind,
-			       long_only, posixly_correct, &getopt_data);
+  result = _getopt_internal_r (argc, argv, optstring, longopts,
+                               longind, long_only, &getopt_data,
+                               posixly_correct);
 
   optind = getopt_data.optind;
   optarg = getopt_data.optarg;
@@ -1115,15 +1156,28 @@
 int
 getopt (int argc, char *const *argv, const char *optstring)
 {
-  return _getopt_internal (argc, (char **) argv, optstring, NULL, NULL, 0,
-			   POSIXLY_CORRECT);
+  return _getopt_internal (argc, (char **) argv, optstring,
+                           (const struct option *) 0,
+                           (int *) 0,
+                           0, POSIXLY_CORRECT);
 }
 
+#ifdef _LIBC
+int
+__posix_getopt (int argc, char *const *argv, const char *optstring)
+{
+  return _getopt_internal (argc, argv, optstring,
+                           (const struct option *) 0,
+                           (int *) 0,
+                           0, 1);
+}
+#endif
+
 
 #ifdef TEST
 
 /* Compile with -DTEST to make an executable for use in testing
-   the above definition of `getopt'.  */
+   the above definition of 'getopt'.  */
 
 int
 main (int argc, char **argv)
@@ -1137,51 +1191,51 @@
 
       c = getopt (argc, argv, "abc:d:0123456789");
       if (c == -1)
-	break;
+        break;
 
       switch (c)
-	{
-	case '0':
-	case '1':
-	case '2':
-	case '3':
-	case '4':
-	case '5':
-	case '6':
-	case '7':
-	case '8':
-	case '9':
-	  if (digit_optind != 0 && digit_optind != this_option_optind)
-	    printf ("digits occur in two different argv-elements.\n");
-	  digit_optind = this_option_optind;
-	  printf ("option %c\n", c);
-	  break;
+        {
+        case '0':
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+        case '5':
+        case '6':
+        case '7':
+        case '8':
+        case '9':
+          if (digit_optind != 0 && digit_optind != this_option_optind)
+            printf ("digits occur in two different argv-elements.\n");
+          digit_optind = this_option_optind;
+          printf ("option %c\n", c);
+          break;
 
-	case 'a':
-	  printf ("option a\n");
-	  break;
+        case 'a':
+          printf ("option a\n");
+          break;
 
-	case 'b':
-	  printf ("option b\n");
-	  break;
+        case 'b':
+          printf ("option b\n");
+          break;
 
-	case 'c':
-	  printf ("option c with value `%s'\n", optarg);
-	  break;
+        case 'c':
+          printf ("option c with value '%s'\n", optarg);
+          break;
 
-	case '?':
-	  break;
+        case '?':
+          break;
 
-	default:
-	  printf ("?? getopt returned character code 0%o ??\n", c);
-	}
+        default:
+          printf ("?? getopt returned character code 0%o ??\n", c);
+        }
     }
 
   if (optind < argc)
     {
       printf ("non-option ARGV-elements: ");
       while (optind < argc)
-	printf ("%s ", argv[optind++]);
+        printf ("%s ", argv[optind++]);
       printf ("\n");
     }
 
diff --git a/lib/getopt.in.h b/lib/getopt.in.h
new file mode 100644
index 0000000..06b6dfc
--- /dev/null
+++ b/lib/getopt.in.h
@@ -0,0 +1,253 @@
+/* Declarations for getopt.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2012 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_GETOPT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  We must
+   also inform the replacement unistd.h to not recursively use
+   <getopt.h>; our definitions will be present soon enough.  */
+#if @HAVE_GETOPT_H@
+# define _GL_SYSTEM_GETOPT
+# @INCLUDE_NEXT@ @NEXT_GETOPT_H@
+# undef _GL_SYSTEM_GETOPT
+#endif
+
+#ifndef _@GUARD_PREFIX@_GETOPT_H
+
+#ifndef __need_getopt
+# define _@GUARD_PREFIX@_GETOPT_H 1
+#endif
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+   identifier that prefixes the external functions and variables
+   defined in this header.  When this happens, include the
+   headers that might declare getopt so that they will not cause
+   confusion if included after this file (if the system had <getopt.h>,
+   we have already included it).  Then systematically rename
+   identifiers so that they do not collide with the system functions
+   and variables.  Renaming avoids problems with some compilers and
+   linkers.  */
+#if defined __GETOPT_PREFIX && !defined __need_getopt
+# if !@HAVE_GETOPT_H@
+#  include <stdlib.h>
+#  include <stdio.h>
+#  include <unistd.h>
+# endif
+# undef __need_getopt
+# undef getopt
+# undef getopt_long
+# undef getopt_long_only
+# undef optarg
+# undef opterr
+# undef optind
+# undef optopt
+# undef option
+# define __GETOPT_CONCAT(x, y) x ## y
+# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
+# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
+# define getopt __GETOPT_ID (getopt)
+# define getopt_long __GETOPT_ID (getopt_long)
+# define getopt_long_only __GETOPT_ID (getopt_long_only)
+# define optarg __GETOPT_ID (optarg)
+# define opterr __GETOPT_ID (opterr)
+# define optind __GETOPT_ID (optind)
+# define optopt __GETOPT_ID (optopt)
+# define option __GETOPT_ID (option)
+# define _getopt_internal __GETOPT_ID (getopt_internal)
+#endif
+
+/* Standalone applications get correct prototypes for getopt_long and
+   getopt_long_only; they declare "char **argv".  libc uses prototypes
+   with "char *const *argv" that are incorrect because getopt_long and
+   getopt_long_only can permute argv; this is required for backward
+   compatibility (e.g., for LSB 2.0.1).
+
+   This used to be '#if defined __GETOPT_PREFIX && !defined __need_getopt',
+   but it caused redefinition warnings if both unistd.h and getopt.h were
+   included, since unistd.h includes getopt.h having previously defined
+   __need_getopt.
+
+   The only place where __getopt_argv_const is used is in definitions
+   of getopt_long and getopt_long_only below, but these are visible
+   only if __need_getopt is not defined, so it is quite safe to rewrite
+   the conditional as follows:
+*/
+#if !defined __need_getopt
+# if defined __GETOPT_PREFIX
+#  define __getopt_argv_const /* empty */
+# else
+#  define __getopt_argv_const const
+# endif
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+   standalone, or this is the first header included in the source file.
+   If we are being used with glibc, we need to include <features.h>, but
+   that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
+   not defined, include <ctype.h>, which will pull in <features.h> for us
+   if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
+   doesn't flood the namespace with stuff the way some other headers do.)  */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifndef __THROW
+# ifndef __GNUC_PREREQ
+#  define __GNUC_PREREQ(maj, min) (0)
+# endif
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+#  define __THROW       throw ()
+# else
+#  define __THROW
+# endif
+#endif
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from 'getopt' to the caller.
+   When 'getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when 'ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to 'getopt'.
+
+   On entry to 'getopt', zero means this is the first call; initialize.
+
+   When 'getopt' returns -1, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, 'optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message 'getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+#ifndef __need_getopt
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of 'struct option' terminated by an element containing a name which is
+   zero.
+
+   The field 'has_arg' is:
+   no_argument          (or 0) if the option does not take an argument,
+   required_argument    (or 1) if the option requires an argument,
+   optional_argument    (or 2) if the option takes an optional argument.
+
+   If the field 'flag' is not NULL, it points to a variable that is set
+   to the value given in the field 'val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an 'int' to
+   a compiled-in constant, such as set a value from 'optarg', set the
+   option's 'flag' field to zero and its 'val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero 'flag' field, 'getopt'
+   returns the contents of the 'val' field.  */
+
+# if !GNULIB_defined_struct_option
+struct option
+{
+  const char *name;
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+#  define GNULIB_defined_struct_option 1
+# endif
+
+/* Names for the values of the 'has_arg' field of 'struct option'.  */
+
+# define no_argument            0
+# define required_argument      1
+# define optional_argument      2
+#endif  /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+   arguments in ARGV (ARGC of them, minus the program name) for
+   options given in OPTS.
+
+   Return the option character from OPTS just read.  Return -1 when
+   there are no more options.  For unrecognized options, or options
+   missing arguments, 'optopt' is set to the option letter, and '?' is
+   returned.
+
+   The OPTS string is a list of characters which are recognized option
+   letters, optionally followed by colons, specifying that that letter
+   takes an argument, to be placed in 'optarg'.
+
+   If a letter in OPTS is followed by two colons, its argument is
+   optional.  This behavior is specific to the GNU 'getopt'.
+
+   The argument '--' causes premature termination of argument
+   scanning, explicitly telling 'getopt' that there are no more
+   options.
+
+   If OPTS begins with '-', then non-option arguments are treated as
+   arguments to the option '\1'.  This behavior is specific to the GNU
+   'getopt'.  If OPTS begins with '+', or POSIXLY_CORRECT is set in
+   the environment, then do not permute arguments.  */
+
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+#ifndef __need_getopt
+extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
+                        const char *__shortopts,
+                        const struct option *__longopts, int *__longind)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations.  */
+#undef __need_getopt
+
+#endif /* _@GUARD_PREFIX@_GETOPT_H */
+#endif /* _@GUARD_PREFIX@_GETOPT_H */
diff --git a/lib/getopt1.c b/lib/getopt1.c
index 25d7926..fb2a8f5 100644
--- a/lib/getopt1.c
+++ b/lib/getopt1.c
@@ -1,29 +1,25 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004
-     Free Software Foundation, Inc.
+   Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2012 Free Software
+   Foundation, Inc.
    This file is part of the GNU C Library.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
 #ifdef _LIBC
 # include <getopt.h>
 #else
+# include <config.h>
 # include "getopt.h"
 #endif
 #include "getopt_int.h"
@@ -36,25 +32,25 @@
 #include <stdlib.h>
 #endif
 
-#ifndef	NULL
+#ifndef NULL
 #define NULL 0
 #endif
 
 int
 getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
-	     const struct option *long_options, int *opt_index)
+             const struct option *long_options, int *opt_index)
 {
   return _getopt_internal (argc, (char **) argv, options, long_options,
-			   opt_index, 0, 0);
+                           opt_index, 0, 0);
 }
 
 int
 _getopt_long_r (int argc, char **argv, const char *options,
-		const struct option *long_options, int *opt_index,
-		struct _getopt_data *d)
+                const struct option *long_options, int *opt_index,
+                struct _getopt_data *d)
 {
   return _getopt_internal_r (argc, argv, options, long_options, opt_index,
-			     0, 0, d);
+                             0, d, 0);
 }
 
 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
@@ -64,20 +60,20 @@
 
 int
 getopt_long_only (int argc, char *__getopt_argv_const *argv,
-		  const char *options,
-		  const struct option *long_options, int *opt_index)
+                  const char *options,
+                  const struct option *long_options, int *opt_index)
 {
   return _getopt_internal (argc, (char **) argv, options, long_options,
-			   opt_index, 1, 0);
+                           opt_index, 1, 0);
 }
 
 int
 _getopt_long_only_r (int argc, char **argv, const char *options,
-		     const struct option *long_options, int *opt_index,
-		     struct _getopt_data *d)
+                     const struct option *long_options, int *opt_index,
+                     struct _getopt_data *d)
 {
   return _getopt_internal_r (argc, argv, options, long_options, opt_index,
-			     1, 0, d);
+                             1, d, 0);
 }
 
 
@@ -95,76 +91,76 @@
     {
       int this_option_optind = optind ? optind : 1;
       int option_index = 0;
-      static struct option long_options[] =
+      static const struct option long_options[] =
       {
-	{"add", 1, 0, 0},
-	{"append", 0, 0, 0},
-	{"delete", 1, 0, 0},
-	{"verbose", 0, 0, 0},
-	{"create", 0, 0, 0},
-	{"file", 1, 0, 0},
-	{0, 0, 0, 0}
+        {"add", 1, 0, 0},
+        {"append", 0, 0, 0},
+        {"delete", 1, 0, 0},
+        {"verbose", 0, 0, 0},
+        {"create", 0, 0, 0},
+        {"file", 1, 0, 0},
+        {0, 0, 0, 0}
       };
 
       c = getopt_long (argc, argv, "abc:d:0123456789",
-		       long_options, &option_index);
+                       long_options, &option_index);
       if (c == -1)
-	break;
+        break;
 
       switch (c)
-	{
-	case 0:
-	  printf ("option %s", long_options[option_index].name);
-	  if (optarg)
-	    printf (" with arg %s", optarg);
-	  printf ("\n");
-	  break;
+        {
+        case 0:
+          printf ("option %s", long_options[option_index].name);
+          if (optarg)
+            printf (" with arg %s", optarg);
+          printf ("\n");
+          break;
 
-	case '0':
-	case '1':
-	case '2':
-	case '3':
-	case '4':
-	case '5':
-	case '6':
-	case '7':
-	case '8':
-	case '9':
-	  if (digit_optind != 0 && digit_optind != this_option_optind)
-	    printf ("digits occur in two different argv-elements.\n");
-	  digit_optind = this_option_optind;
-	  printf ("option %c\n", c);
-	  break;
+        case '0':
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+        case '5':
+        case '6':
+        case '7':
+        case '8':
+        case '9':
+          if (digit_optind != 0 && digit_optind != this_option_optind)
+            printf ("digits occur in two different argv-elements.\n");
+          digit_optind = this_option_optind;
+          printf ("option %c\n", c);
+          break;
 
-	case 'a':
-	  printf ("option a\n");
-	  break;
+        case 'a':
+          printf ("option a\n");
+          break;
 
-	case 'b':
-	  printf ("option b\n");
-	  break;
+        case 'b':
+          printf ("option b\n");
+          break;
 
-	case 'c':
-	  printf ("option c with value `%s'\n", optarg);
-	  break;
+        case 'c':
+          printf ("option c with value '%s'\n", optarg);
+          break;
 
-	case 'd':
-	  printf ("option d with value `%s'\n", optarg);
-	  break;
+        case 'd':
+          printf ("option d with value '%s'\n", optarg);
+          break;
 
-	case '?':
-	  break;
+        case '?':
+          break;
 
-	default:
-	  printf ("?? getopt returned character code 0%o ??\n", c);
-	}
+        default:
+          printf ("?? getopt returned character code 0%o ??\n", c);
+        }
     }
 
   if (optind < argc)
     {
       printf ("non-option ARGV-elements: ");
       while (optind < argc)
-	printf ("%s ", argv[optind++]);
+        printf ("%s ", argv[optind++]);
       printf ("\n");
     }
 
diff --git a/lib/getopt_.h b/lib/getopt_.h
deleted file mode 100644
index 3c406e5..0000000
--- a/lib/getopt_.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/* Declarations for getopt.
-   Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _GETOPT_H
-
-#ifndef __need_getopt
-# define _GETOPT_H 1
-#endif
-
-/* Standalone applications should #define __GETOPT_PREFIX to an
-   identifier that prefixes the external functions and variables
-   defined in this header.  When this happens, include the
-   headers that might declare getopt so that they will not cause
-   confusion if included after this file.  Then systematically rename
-   identifiers so that they do not collide with the system functions
-   and variables.  Renaming avoids problems with some compilers and
-   linkers.  */
-#if defined __GETOPT_PREFIX && !defined __need_getopt
-# include <stdlib.h>
-# include <stdio.h>
-# include <unistd.h>
-# undef __need_getopt
-# undef getopt
-# undef getopt_long
-# undef getopt_long_only
-# undef optarg
-# undef opterr
-# undef optind
-# undef optopt
-# define __GETOPT_CONCAT(x, y) x ## y
-# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
-# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
-# define getopt __GETOPT_ID (getopt)
-# define getopt_long __GETOPT_ID (getopt_long)
-# define getopt_long_only __GETOPT_ID (getopt_long_only)
-# define optarg __GETOPT_ID (optarg)
-# define opterr __GETOPT_ID (opterr)
-# define optind __GETOPT_ID (optind)
-# define optopt __GETOPT_ID (optopt)
-#endif
-
-/* Standalone applications get correct prototypes for getopt_long and
-   getopt_long_only; they declare "char **argv".  libc uses prototypes
-   with "char *const *argv" that are incorrect because getopt_long and
-   getopt_long_only can permute argv; this is required for backward
-   compatibility (e.g., for LSB 2.0.1).
-
-   This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
-   but it caused redefinition warnings if both unistd.h and getopt.h were
-   included, since unistd.h includes getopt.h having previously defined
-   __need_getopt.
-
-   The only place where __getopt_argv_const is used is in definitions
-   of getopt_long and getopt_long_only below, but these are visible
-   only if __need_getopt is not defined, so it is quite safe to rewrite
-   the conditional as follows:
-*/
-#if !defined __need_getopt
-# if defined __GETOPT_PREFIX
-#  define __getopt_argv_const /* empty */
-# else
-#  define __getopt_argv_const const
-# endif
-#endif
-
-/* If __GNU_LIBRARY__ is not already defined, either we are being used
-   standalone, or this is the first header included in the source file.
-   If we are being used with glibc, we need to include <features.h>, but
-   that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
-   not defined, include <ctype.h>, which will pull in <features.h> for us
-   if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
-   doesn't flood the namespace with stuff the way some other headers do.)  */
-#if !defined __GNU_LIBRARY__
-# include <ctype.h>
-#endif
-
-#ifndef __THROW
-# ifndef __GNUC_PREREQ
-#  define __GNUC_PREREQ(maj, min) (0)
-# endif
-# if defined __cplusplus && __GNUC_PREREQ (2,8)
-#  define __THROW	throw ()
-# else
-#  define __THROW
-# endif
-#endif
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
-   the argument value is returned here.
-   Also, when `ordering' is RETURN_IN_ORDER,
-   each non-option ARGV-element is returned here.  */
-
-extern char *optarg;
-
-/* Index in ARGV of the next element to be scanned.
-   This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
-
-   On entry to `getopt', zero means this is the first call; initialize.
-
-   When `getopt' returns -1, this is the index of the first of the
-   non-option elements that the caller should itself scan.
-
-   Otherwise, `optind' communicates from one call to the next
-   how much of ARGV has been scanned so far.  */
-
-extern int optind;
-
-/* Callers store zero here to inhibit the error message `getopt' prints
-   for unrecognized options.  */
-
-extern int opterr;
-
-/* Set to an option character which was unrecognized.  */
-
-extern int optopt;
-
-#ifndef __need_getopt
-/* Describe the long-named options requested by the application.
-   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
-   of `struct option' terminated by an element containing a name which is
-   zero.
-
-   The field `has_arg' is:
-   no_argument		(or 0) if the option does not take an argument,
-   required_argument	(or 1) if the option requires an argument,
-   optional_argument	(or 2) if the option takes an optional argument.
-
-   If the field `flag' is not NULL, it points to a variable that is set
-   to the value given in the field `val' when the option is found, but
-   left unchanged if the option is not found.
-
-   To have a long-named option do something other than set an `int' to
-   a compiled-in constant, such as set a value from `optarg', set the
-   option's `flag' field to zero and its `val' field to a nonzero
-   value (the equivalent single-letter option character, if there is
-   one).  For long options that have a zero `flag' field, `getopt'
-   returns the contents of the `val' field.  */
-
-struct option
-{
-  const char *name;
-  /* has_arg can't be an enum because some compilers complain about
-     type mismatches in all the code that assumes it is an int.  */
-  int has_arg;
-  int *flag;
-  int val;
-};
-
-/* Names for the values of the `has_arg' field of `struct option'.  */
-
-# define no_argument		0
-# define required_argument	1
-# define optional_argument	2
-#endif	/* need getopt */
-
-
-/* Get definitions and prototypes for functions to process the
-   arguments in ARGV (ARGC of them, minus the program name) for
-   options given in OPTS.
-
-   Return the option character from OPTS just read.  Return -1 when
-   there are no more options.  For unrecognized options, or options
-   missing arguments, `optopt' is set to the option letter, and '?' is
-   returned.
-
-   The OPTS string is a list of characters which are recognized option
-   letters, optionally followed by colons, specifying that that letter
-   takes an argument, to be placed in `optarg'.
-
-   If a letter in OPTS is followed by two colons, its argument is
-   optional.  This behavior is specific to the GNU `getopt'.
-
-   The argument `--' causes premature termination of argument
-   scanning, explicitly telling `getopt' that there are no more
-   options.
-
-   If OPTS begins with `--', then non-option arguments are treated as
-   arguments to the option '\0'.  This behavior is specific to the GNU
-   `getopt'.  */
-
-extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
-       __THROW;
-
-#ifndef __need_getopt
-extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
-			const char *__shortopts,
-		        const struct option *__longopts, int *__longind)
-       __THROW;
-extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
-			     const char *__shortopts,
-		             const struct option *__longopts, int *__longind)
-       __THROW;
-
-#endif
-
-#ifdef	__cplusplus
-}
-#endif
-
-/* Make sure we later can get all the definitions and declarations.  */
-#undef __need_getopt
-
-#endif /* getopt.h */
diff --git a/lib/getopt_int.h b/lib/getopt_int.h
index 401579f..2da020c 100644
--- a/lib/getopt_int.h
+++ b/lib/getopt_int.h
@@ -1,34 +1,69 @@
 /* Internal declarations for getopt.
-   Copyright (C) 1989-1994,1996-1999,2001,2003,2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2012 Free Software
+   Foundation, Inc.
    This file is part of the GNU C Library.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _GETOPT_INT_H
-#define _GETOPT_INT_H	1
+#define _GETOPT_INT_H   1
+
+#include <getopt.h>
 
 extern int _getopt_internal (int ___argc, char **___argv,
-			     const char *__shortopts,
-		             const struct option *__longopts, int *__longind,
-			     int __long_only, int __posixly_correct);
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind,
+                             int __long_only, int __posixly_correct);
 
 
 /* Reentrant versions which can handle parsing multiple argument
    vectors at the same time.  */
 
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+   If the caller did not specify anything,
+   the default is REQUIRE_ORDER if the environment variable
+   POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+   REQUIRE_ORDER means don't recognize them as options;
+   stop option processing when the first non-option is seen.
+   This is what Unix does.
+   This mode of operation is selected by either setting the environment
+   variable POSIXLY_CORRECT, or using '+' as the first character
+   of the list of option characters, or by calling getopt.
+
+   PERMUTE is the default.  We permute the contents of ARGV as we
+   scan, so that eventually all the non-options are at the end.
+   This allows options to be given in any order, even with programs
+   that were not written to expect this.
+
+   RETURN_IN_ORDER is an option available to programs that were
+   written to expect options and other ARGV-elements in any order
+   and that care about the ordering of the two.  We describe each
+   non-option ARGV-element as if it were the argument of an option
+   with character code 1.  Using '-' as the first character of the
+   list of option characters selects this mode of operation.
+
+   The special argument '--' forces an end of option-scanning regardless
+   of the value of 'ordering'.  In the case of RETURN_IN_ORDER, only
+   '--' can cause 'getopt' to return -1 with 'optind' != ARGC.  */
+
+enum __ord
+  {
+    REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+  };
+
 /* Data type for reentrant functions.  */
 struct _getopt_data
 {
@@ -53,39 +88,8 @@
      by advancing to the next ARGV-element.  */
   char *__nextchar;
 
-  /* Describe how to deal with options that follow non-option ARGV-elements.
-
-     If the caller did not specify anything,
-     the default is REQUIRE_ORDER if the environment variable
-     POSIXLY_CORRECT is defined, PERMUTE otherwise.
-
-     REQUIRE_ORDER means don't recognize them as options;
-     stop option processing when the first non-option is seen.
-     This is what Unix does.
-     This mode of operation is selected by either setting the environment
-     variable POSIXLY_CORRECT, or using `+' as the first character
-     of the list of option characters, or by calling getopt.
-
-     PERMUTE is the default.  We permute the contents of ARGV as we
-     scan, so that eventually all the non-options are at the end.
-     This allows options to be given in any order, even with programs
-     that were not written to expect this.
-
-     RETURN_IN_ORDER is an option available to programs that were
-     written to expect options and other ARGV-elements in any order
-     and that care about the ordering of the two.  We describe each
-     non-option ARGV-element as if it were the argument of an option
-     with character code 1.  Using `-' as the first character of the
-     list of option characters selects this mode of operation.
-
-     The special argument `--' forces an end of option-scanning regardless
-     of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
-     `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
-
-  enum
-    {
-      REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
-    } __ordering;
+  /* See __ord above.  */
+  enum __ord __ordering;
 
   /* If the POSIXLY_CORRECT environment variable is set
      or getopt was called.  */
@@ -95,8 +99,8 @@
   /* Handle permutation of arguments.  */
 
   /* Describe the part of ARGV that contains non-options that have
-     been skipped.  `first_nonopt' is the index in ARGV of the first
-     of them; `last_nonopt' is the index after the last of them.  */
+     been skipped.  'first_nonopt' is the index in ARGV of the first
+     of them; 'last_nonopt' is the index after the last of them.  */
 
   int __first_nonopt;
   int __last_nonopt;
@@ -104,28 +108,28 @@
 #if defined _LIBC && defined USE_NONOPTION_FLAGS
   int __nonoption_flags_max_len;
   int __nonoption_flags_len;
-# endif
+#endif
 };
 
 /* The initializer is necessary to set OPTIND and OPTERR to their
    default values and to clear the initialization flag.  */
-#define _GETOPT_DATA_INITIALIZER	{ 1, 1 }
+#define _GETOPT_DATA_INITIALIZER        { 1, 1 }
 
 extern int _getopt_internal_r (int ___argc, char **___argv,
-			       const char *__shortopts,
-			       const struct option *__longopts, int *__longind,
-			       int __long_only, int __posixly_correct,
-			       struct _getopt_data *__data);
+                               const char *__shortopts,
+                               const struct option *__longopts, int *__longind,
+                               int __long_only, struct _getopt_data *__data,
+                               int __posixly_correct);
 
 extern int _getopt_long_r (int ___argc, char **___argv,
-			   const char *__shortopts,
-			   const struct option *__longopts, int *__longind,
-			   struct _getopt_data *__data);
+                           const char *__shortopts,
+                           const struct option *__longopts, int *__longind,
+                           struct _getopt_data *__data);
 
 extern int _getopt_long_only_r (int ___argc, char **___argv,
-				const char *__shortopts,
-				const struct option *__longopts,
-				int *__longind,
-				struct _getopt_data *__data);
+                                const char *__shortopts,
+                                const struct option *__longopts,
+                                int *__longind,
+                                struct _getopt_data *__data);
 
 #endif /* getopt_int.h */
diff --git a/lib/gettext.h b/lib/gettext.h
index 285cb31..65ca1e6 100644
--- a/lib/gettext.h
+++ b/lib/gettext.h
@@ -1,9 +1,10 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2012 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)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -12,8 +13,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _LIBGETTEXT_H
 #define _LIBGETTEXT_H 1
@@ -24,6 +24,18 @@
 /* Get declarations of GNU message catalog functions.  */
 # include <libintl.h>
 
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+   the gettext() and ngettext() macros.  This is an alternative to calling
+   textdomain(), and is useful for libraries.  */
+# ifdef DEFAULT_TEXT_DOMAIN
+#  undef gettext
+#  define gettext(Msgid) \
+     dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+#  undef ngettext
+#  define ngettext(Msgid1, Msgid2, N) \
+     dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
 #else
 
 /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
@@ -41,7 +53,7 @@
    it now, to make later inclusions of <libintl.h> a NOP.  */
 #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
 # include <cstdlib>
-# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
+# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H
 #  include <libintl.h>
 # endif
 #endif
@@ -51,21 +63,41 @@
    for invalid uses of the value returned from these functions.
    On pre-ANSI systems without 'const', the config.h file is supposed to
    contain "#define const".  */
+# undef gettext
 # define gettext(Msgid) ((const char *) (Msgid))
-# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
-# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# undef dgettext
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# undef dcgettext
+# define dcgettext(Domainname, Msgid, Category) \
+    ((void) (Category), dgettext (Domainname, Msgid))
+# undef ngettext
 # define ngettext(Msgid1, Msgid2, N) \
-    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+    ((N) == 1 \
+     ? ((void) (Msgid2), (const char *) (Msgid1)) \
+     : ((void) (Msgid1), (const char *) (Msgid2)))
+# undef dngettext
 # define dngettext(Domainname, Msgid1, Msgid2, N) \
-    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+    ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# undef dcngettext
 # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
-    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+    ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N))
+# undef textdomain
 # define textdomain(Domainname) ((const char *) (Domainname))
-# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
-# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+# undef bindtextdomain
+# define bindtextdomain(Domainname, Dirname) \
+    ((void) (Domainname), (const char *) (Dirname))
+# undef bind_textdomain_codeset
+# define bind_textdomain_codeset(Domainname, Codeset) \
+    ((void) (Domainname), (const char *) (Codeset))
 
 #endif
 
+/* Prefer gnulib's setlocale override over libintl's setlocale override.  */
+#ifdef GNULIB_defined_setlocale
+# undef setlocale
+# define setlocale rpl_setlocale
+#endif
+
 /* A pseudo function call that serves as a marker for the automated
    extraction of messages, but does not call gettext().  The run-time
    translation is done at a different place in the code.
@@ -75,4 +107,182 @@
    initializer for static 'char[]' or 'const char[]' variables.  */
 #define gettext_noop(String) String
 
+/* The separator between msgctxt and msgid in a .mo file.  */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+   MSGID.  MSGCTXT and MSGID must be string literals.  MSGCTXT should be
+   short and rarely need to change.
+   The letter 'p' stands for 'particular' or 'special'.  */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+              const char *msg_ctxt_id, const char *msgid,
+              int category)
+{
+  const char *translation = dcgettext (domain, msg_ctxt_id, category);
+  if (translation == msg_ctxt_id)
+    return msgid;
+  else
+    return translation;
+}
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+               const char *msg_ctxt_id, const char *msgid,
+               const char *msgid_plural, unsigned long int n,
+               int category)
+{
+  const char *translation =
+    dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+  if (translation == msg_ctxt_id || translation == msgid_plural)
+    return (n == 1 ? msgid : msgid_plural);
+  else
+    return translation;
+}
+
+/* The same thing extended for non-constant arguments.  Here MSGCTXT and MSGID
+   can be arbitrary expressions.  But for string literals these macros are
+   less efficient than those above.  */
+
+#include <string.h>
+
+#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
+     /* || __STDC_VERSION__ >= 199901L */ )
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
+#else
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
+#endif
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+  dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+  dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+                 const char *msgctxt, const char *msgid,
+                 int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcgettext (domain, msg_ctxt_id, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+        free (msg_ctxt_id);
+#endif
+      if (translation != msg_ctxt_id)
+        return translation;
+    }
+  return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+                  const char *msgctxt, const char *msgid,
+                  const char *msgid_plural, unsigned long int n,
+                  int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+        free (msg_ctxt_id);
+#endif
+      if (!(translation == msg_ctxt_id || translation == msgid_plural))
+        return translation;
+    }
+  return (n == 1 ? msgid : msgid_plural);
+}
+
 #endif /* _LIBGETTEXT_H */
diff --git a/lib/glthread/lock.c b/lib/glthread/lock.c
new file mode 100644
index 0000000..bc0df29
--- /dev/null
+++ b/lib/glthread/lock.c
@@ -0,0 +1,1057 @@
+/* Locking in multithreaded situations.
+   Copyright (C) 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h,
+   gthr-win32.h.  */
+
+#include <config.h>
+
+#include "glthread/lock.h"
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+# if HAVE_PTHREAD_RWLOCK
+
+#  if !defined PTHREAD_RWLOCK_INITIALIZER
+
+int
+glthread_rwlock_init_multithreaded (gl_rwlock_t *lock)
+{
+  int err;
+
+  err = pthread_rwlock_init (&lock->rwlock, NULL);
+  if (err != 0)
+    return err;
+  lock->initialized = 1;
+  return 0;
+}
+
+int
+glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock)
+{
+  if (!lock->initialized)
+    {
+      int err;
+
+      err = pthread_mutex_lock (&lock->guard);
+      if (err != 0)
+        return err;
+      if (!lock->initialized)
+        {
+          err = glthread_rwlock_init_multithreaded (lock);
+          if (err != 0)
+            {
+              pthread_mutex_unlock (&lock->guard);
+              return err;
+            }
+        }
+      err = pthread_mutex_unlock (&lock->guard);
+      if (err != 0)
+        return err;
+    }
+  return pthread_rwlock_rdlock (&lock->rwlock);
+}
+
+int
+glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock)
+{
+  if (!lock->initialized)
+    {
+      int err;
+
+      err = pthread_mutex_lock (&lock->guard);
+      if (err != 0)
+        return err;
+      if (!lock->initialized)
+        {
+          err = glthread_rwlock_init_multithreaded (lock);
+          if (err != 0)
+            {
+              pthread_mutex_unlock (&lock->guard);
+              return err;
+            }
+        }
+      err = pthread_mutex_unlock (&lock->guard);
+      if (err != 0)
+        return err;
+    }
+  return pthread_rwlock_wrlock (&lock->rwlock);
+}
+
+int
+glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock)
+{
+  if (!lock->initialized)
+    return EINVAL;
+  return pthread_rwlock_unlock (&lock->rwlock);
+}
+
+int
+glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock)
+{
+  int err;
+
+  if (!lock->initialized)
+    return EINVAL;
+  err = pthread_rwlock_destroy (&lock->rwlock);
+  if (err != 0)
+    return err;
+  lock->initialized = 0;
+  return 0;
+}
+
+#  endif
+
+# else
+
+int
+glthread_rwlock_init_multithreaded (gl_rwlock_t *lock)
+{
+  int err;
+
+  err = pthread_mutex_init (&lock->lock, NULL);
+  if (err != 0)
+    return err;
+  err = pthread_cond_init (&lock->waiting_readers, NULL);
+  if (err != 0)
+    return err;
+  err = pthread_cond_init (&lock->waiting_writers, NULL);
+  if (err != 0)
+    return err;
+  lock->waiting_writers_count = 0;
+  lock->runcount = 0;
+  return 0;
+}
+
+int
+glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock)
+{
+  int err;
+
+  err = pthread_mutex_lock (&lock->lock);
+  if (err != 0)
+    return err;
+  /* Test whether only readers are currently running, and whether the runcount
+     field will not overflow.  */
+  /* POSIX says: "It is implementation-defined whether the calling thread
+     acquires the lock when a writer does not hold the lock and there are
+     writers blocked on the lock."  Let's say, no: give the writers a higher
+     priority.  */
+  while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+         waiting_readers.  */
+      err = pthread_cond_wait (&lock->waiting_readers, &lock->lock);
+      if (err != 0)
+        {
+          pthread_mutex_unlock (&lock->lock);
+          return err;
+        }
+    }
+  lock->runcount++;
+  return pthread_mutex_unlock (&lock->lock);
+}
+
+int
+glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock)
+{
+  int err;
+
+  err = pthread_mutex_lock (&lock->lock);
+  if (err != 0)
+    return err;
+  /* Test whether no readers or writers are currently running.  */
+  while (!(lock->runcount == 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+         waiting_writers.  */
+      lock->waiting_writers_count++;
+      err = pthread_cond_wait (&lock->waiting_writers, &lock->lock);
+      if (err != 0)
+        {
+          lock->waiting_writers_count--;
+          pthread_mutex_unlock (&lock->lock);
+          return err;
+        }
+      lock->waiting_writers_count--;
+    }
+  lock->runcount--; /* runcount becomes -1 */
+  return pthread_mutex_unlock (&lock->lock);
+}
+
+int
+glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock)
+{
+  int err;
+
+  err = pthread_mutex_lock (&lock->lock);
+  if (err != 0)
+    return err;
+  if (lock->runcount < 0)
+    {
+      /* Drop a writer lock.  */
+      if (!(lock->runcount == -1))
+        {
+          pthread_mutex_unlock (&lock->lock);
+          return EINVAL;
+        }
+      lock->runcount = 0;
+    }
+  else
+    {
+      /* Drop a reader lock.  */
+      if (!(lock->runcount > 0))
+        {
+          pthread_mutex_unlock (&lock->lock);
+          return EINVAL;
+        }
+      lock->runcount--;
+    }
+  if (lock->runcount == 0)
+    {
+      /* POSIX recommends that "write locks shall take precedence over read
+         locks", to avoid "writer starvation".  */
+      if (lock->waiting_writers_count > 0)
+        {
+          /* Wake up one of the waiting writers.  */
+          err = pthread_cond_signal (&lock->waiting_writers);
+          if (err != 0)
+            {
+              pthread_mutex_unlock (&lock->lock);
+              return err;
+            }
+        }
+      else
+        {
+          /* Wake up all waiting readers.  */
+          err = pthread_cond_broadcast (&lock->waiting_readers);
+          if (err != 0)
+            {
+              pthread_mutex_unlock (&lock->lock);
+              return err;
+            }
+        }
+    }
+  return pthread_mutex_unlock (&lock->lock);
+}
+
+int
+glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock)
+{
+  int err;
+
+  err = pthread_mutex_destroy (&lock->lock);
+  if (err != 0)
+    return err;
+  err = pthread_cond_destroy (&lock->waiting_readers);
+  if (err != 0)
+    return err;
+  err = pthread_cond_destroy (&lock->waiting_writers);
+  if (err != 0)
+    return err;
+  return 0;
+}
+
+# endif
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+# if HAVE_PTHREAD_MUTEX_RECURSIVE
+
+#  if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+
+int
+glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock)
+{
+  pthread_mutexattr_t attributes;
+  int err;
+
+  err = pthread_mutexattr_init (&attributes);
+  if (err != 0)
+    return err;
+  err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE);
+  if (err != 0)
+    {
+      pthread_mutexattr_destroy (&attributes);
+      return err;
+    }
+  err = pthread_mutex_init (lock, &attributes);
+  if (err != 0)
+    {
+      pthread_mutexattr_destroy (&attributes);
+      return err;
+    }
+  err = pthread_mutexattr_destroy (&attributes);
+  if (err != 0)
+    return err;
+  return 0;
+}
+
+#  else
+
+int
+glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock)
+{
+  pthread_mutexattr_t attributes;
+  int err;
+
+  err = pthread_mutexattr_init (&attributes);
+  if (err != 0)
+    return err;
+  err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE);
+  if (err != 0)
+    {
+      pthread_mutexattr_destroy (&attributes);
+      return err;
+    }
+  err = pthread_mutex_init (&lock->recmutex, &attributes);
+  if (err != 0)
+    {
+      pthread_mutexattr_destroy (&attributes);
+      return err;
+    }
+  err = pthread_mutexattr_destroy (&attributes);
+  if (err != 0)
+    return err;
+  lock->initialized = 1;
+  return 0;
+}
+
+int
+glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock)
+{
+  if (!lock->initialized)
+    {
+      int err;
+
+      err = pthread_mutex_lock (&lock->guard);
+      if (err != 0)
+        return err;
+      if (!lock->initialized)
+        {
+          err = glthread_recursive_lock_init_multithreaded (lock);
+          if (err != 0)
+            {
+              pthread_mutex_unlock (&lock->guard);
+              return err;
+            }
+        }
+      err = pthread_mutex_unlock (&lock->guard);
+      if (err != 0)
+        return err;
+    }
+  return pthread_mutex_lock (&lock->recmutex);
+}
+
+int
+glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock)
+{
+  if (!lock->initialized)
+    return EINVAL;
+  return pthread_mutex_unlock (&lock->recmutex);
+}
+
+int
+glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock)
+{
+  int err;
+
+  if (!lock->initialized)
+    return EINVAL;
+  err = pthread_mutex_destroy (&lock->recmutex);
+  if (err != 0)
+    return err;
+  lock->initialized = 0;
+  return 0;
+}
+
+#  endif
+
+# else
+
+int
+glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock)
+{
+  int err;
+
+  err = pthread_mutex_init (&lock->mutex, NULL);
+  if (err != 0)
+    return err;
+  lock->owner = (pthread_t) 0;
+  lock->depth = 0;
+  return 0;
+}
+
+int
+glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock)
+{
+  pthread_t self = pthread_self ();
+  if (lock->owner != self)
+    {
+      int err;
+
+      err = pthread_mutex_lock (&lock->mutex);
+      if (err != 0)
+        return err;
+      lock->owner = self;
+    }
+  if (++(lock->depth) == 0) /* wraparound? */
+    {
+      lock->depth--;
+      return EAGAIN;
+    }
+  return 0;
+}
+
+int
+glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != pthread_self ())
+    return EPERM;
+  if (lock->depth == 0)
+    return EINVAL;
+  if (--(lock->depth) == 0)
+    {
+      lock->owner = (pthread_t) 0;
+      return pthread_mutex_unlock (&lock->mutex);
+    }
+  else
+    return 0;
+}
+
+int
+glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != (pthread_t) 0)
+    return EBUSY;
+  return pthread_mutex_destroy (&lock->mutex);
+}
+
+# endif
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT;
+
+int
+glthread_once_singlethreaded (pthread_once_t *once_control)
+{
+  /* We don't know whether pthread_once_t is an integer type, a floating-point
+     type, a pointer type, or a structure type.  */
+  char *firstbyte = (char *)once_control;
+  if (*firstbyte == *(const char *)&fresh_once)
+    {
+      /* First time use of once_control.  Invert the first byte.  */
+      *firstbyte = ~ *(const char *)&fresh_once;
+      return 1;
+    }
+  else
+    return 0;
+}
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_PTH_THREADS
+
+/* Use the GNU Pth threads library.  */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+static void
+glthread_once_call (void *arg)
+{
+  void (**gl_once_temp_addr) (void) = (void (**) (void)) arg;
+  void (*initfunction) (void) = *gl_once_temp_addr;
+  initfunction ();
+}
+
+int
+glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void))
+{
+  void (*temp) (void) = initfunction;
+  return (!pth_once (once_control, glthread_once_call, &temp) ? errno : 0);
+}
+
+int
+glthread_once_singlethreaded (pth_once_t *once_control)
+{
+  /* We know that pth_once_t is an integer type.  */
+  if (*once_control == PTH_ONCE_INIT)
+    {
+      /* First time use of once_control.  Invert the marker.  */
+      *once_control = ~ PTH_ONCE_INIT;
+      return 1;
+    }
+  else
+    return 0;
+}
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_SOLARIS_THREADS
+
+/* Use the old Solaris threads library.  */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+int
+glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock)
+{
+  int err;
+
+  err = mutex_init (&lock->mutex, USYNC_THREAD, NULL);
+  if (err != 0)
+    return err;
+  lock->owner = (thread_t) 0;
+  lock->depth = 0;
+  return 0;
+}
+
+int
+glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock)
+{
+  thread_t self = thr_self ();
+  if (lock->owner != self)
+    {
+      int err;
+
+      err = mutex_lock (&lock->mutex);
+      if (err != 0)
+        return err;
+      lock->owner = self;
+    }
+  if (++(lock->depth) == 0) /* wraparound? */
+    {
+      lock->depth--;
+      return EAGAIN;
+    }
+  return 0;
+}
+
+int
+glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != thr_self ())
+    return EPERM;
+  if (lock->depth == 0)
+    return EINVAL;
+  if (--(lock->depth) == 0)
+    {
+      lock->owner = (thread_t) 0;
+      return mutex_unlock (&lock->mutex);
+    }
+  else
+    return 0;
+}
+
+int
+glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != (thread_t) 0)
+    return EBUSY;
+  return mutex_destroy (&lock->mutex);
+}
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+int
+glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void))
+{
+  if (!once_control->inited)
+    {
+      int err;
+
+      /* Use the mutex to guarantee that if another thread is already calling
+         the initfunction, this thread waits until it's finished.  */
+      err = mutex_lock (&once_control->mutex);
+      if (err != 0)
+        return err;
+      if (!once_control->inited)
+        {
+          once_control->inited = 1;
+          initfunction ();
+        }
+      return mutex_unlock (&once_control->mutex);
+    }
+  else
+    return 0;
+}
+
+int
+glthread_once_singlethreaded (gl_once_t *once_control)
+{
+  /* We know that gl_once_t contains an integer type.  */
+  if (!once_control->inited)
+    {
+      /* First time use of once_control.  Invert the marker.  */
+      once_control->inited = ~ 0;
+      return 1;
+    }
+  else
+    return 0;
+}
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_WINDOWS_THREADS
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+void
+glthread_lock_init_func (gl_lock_t *lock)
+{
+  InitializeCriticalSection (&lock->lock);
+  lock->guard.done = 1;
+}
+
+int
+glthread_lock_lock_func (gl_lock_t *lock)
+{
+  if (!lock->guard.done)
+    {
+      if (InterlockedIncrement (&lock->guard.started) == 0)
+        /* This thread is the first one to need this lock.  Initialize it.  */
+        glthread_lock_init (lock);
+      else
+        /* Yield the CPU while waiting for another thread to finish
+           initializing this lock.  */
+        while (!lock->guard.done)
+          Sleep (0);
+    }
+  EnterCriticalSection (&lock->lock);
+  return 0;
+}
+
+int
+glthread_lock_unlock_func (gl_lock_t *lock)
+{
+  if (!lock->guard.done)
+    return EINVAL;
+  LeaveCriticalSection (&lock->lock);
+  return 0;
+}
+
+int
+glthread_lock_destroy_func (gl_lock_t *lock)
+{
+  if (!lock->guard.done)
+    return EINVAL;
+  DeleteCriticalSection (&lock->lock);
+  lock->guard.done = 0;
+  return 0;
+}
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+/* In this file, the waitqueues are implemented as circular arrays.  */
+#define gl_waitqueue_t gl_carray_waitqueue_t
+
+static void
+gl_waitqueue_init (gl_waitqueue_t *wq)
+{
+  wq->array = NULL;
+  wq->count = 0;
+  wq->alloc = 0;
+  wq->offset = 0;
+}
+
+/* Enqueues the current thread, represented by an event, in a wait queue.
+   Returns INVALID_HANDLE_VALUE if an allocation failure occurs.  */
+static HANDLE
+gl_waitqueue_add (gl_waitqueue_t *wq)
+{
+  HANDLE event;
+  unsigned int index;
+
+  if (wq->count == wq->alloc)
+    {
+      unsigned int new_alloc = 2 * wq->alloc + 1;
+      HANDLE *new_array =
+        (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE));
+      if (new_array == NULL)
+        /* No more memory.  */
+        return INVALID_HANDLE_VALUE;
+      /* Now is a good opportunity to rotate the array so that its contents
+         starts at offset 0.  */
+      if (wq->offset > 0)
+        {
+          unsigned int old_count = wq->count;
+          unsigned int old_alloc = wq->alloc;
+          unsigned int old_offset = wq->offset;
+          unsigned int i;
+          if (old_offset + old_count > old_alloc)
+            {
+              unsigned int limit = old_offset + old_count - old_alloc;
+              for (i = 0; i < limit; i++)
+                new_array[old_alloc + i] = new_array[i];
+            }
+          for (i = 0; i < old_count; i++)
+            new_array[i] = new_array[old_offset + i];
+          wq->offset = 0;
+        }
+      wq->array = new_array;
+      wq->alloc = new_alloc;
+    }
+  /* Whether the created event is a manual-reset one or an auto-reset one,
+     does not matter, since we will wait on it only once.  */
+  event = CreateEvent (NULL, TRUE, FALSE, NULL);
+  if (event == INVALID_HANDLE_VALUE)
+    /* No way to allocate an event.  */
+    return INVALID_HANDLE_VALUE;
+  index = wq->offset + wq->count;
+  if (index >= wq->alloc)
+    index -= wq->alloc;
+  wq->array[index] = event;
+  wq->count++;
+  return event;
+}
+
+/* Notifies the first thread from a wait queue and dequeues it.  */
+static void
+gl_waitqueue_notify_first (gl_waitqueue_t *wq)
+{
+  SetEvent (wq->array[wq->offset + 0]);
+  wq->offset++;
+  wq->count--;
+  if (wq->count == 0 || wq->offset == wq->alloc)
+    wq->offset = 0;
+}
+
+/* Notifies all threads from a wait queue and dequeues them all.  */
+static void
+gl_waitqueue_notify_all (gl_waitqueue_t *wq)
+{
+  unsigned int i;
+
+  for (i = 0; i < wq->count; i++)
+    {
+      unsigned int index = wq->offset + i;
+      if (index >= wq->alloc)
+        index -= wq->alloc;
+      SetEvent (wq->array[index]);
+    }
+  wq->count = 0;
+  wq->offset = 0;
+}
+
+void
+glthread_rwlock_init_func (gl_rwlock_t *lock)
+{
+  InitializeCriticalSection (&lock->lock);
+  gl_waitqueue_init (&lock->waiting_readers);
+  gl_waitqueue_init (&lock->waiting_writers);
+  lock->runcount = 0;
+  lock->guard.done = 1;
+}
+
+int
+glthread_rwlock_rdlock_func (gl_rwlock_t *lock)
+{
+  if (!lock->guard.done)
+    {
+      if (InterlockedIncrement (&lock->guard.started) == 0)
+        /* This thread is the first one to need this lock.  Initialize it.  */
+        glthread_rwlock_init (lock);
+      else
+        /* Yield the CPU while waiting for another thread to finish
+           initializing this lock.  */
+        while (!lock->guard.done)
+          Sleep (0);
+    }
+  EnterCriticalSection (&lock->lock);
+  /* Test whether only readers are currently running, and whether the runcount
+     field will not overflow.  */
+  if (!(lock->runcount + 1 > 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+         waiting_readers.  */
+      HANDLE event = gl_waitqueue_add (&lock->waiting_readers);
+      if (event != INVALID_HANDLE_VALUE)
+        {
+          DWORD result;
+          LeaveCriticalSection (&lock->lock);
+          /* Wait until another thread signals this event.  */
+          result = WaitForSingleObject (event, INFINITE);
+          if (result == WAIT_FAILED || result == WAIT_TIMEOUT)
+            abort ();
+          CloseHandle (event);
+          /* The thread which signalled the event already did the bookkeeping:
+             removed us from the waiting_readers, incremented lock->runcount.  */
+          if (!(lock->runcount > 0))
+            abort ();
+          return 0;
+        }
+      else
+        {
+          /* Allocation failure.  Weird.  */
+          do
+            {
+              LeaveCriticalSection (&lock->lock);
+              Sleep (1);
+              EnterCriticalSection (&lock->lock);
+            }
+          while (!(lock->runcount + 1 > 0));
+        }
+    }
+  lock->runcount++;
+  LeaveCriticalSection (&lock->lock);
+  return 0;
+}
+
+int
+glthread_rwlock_wrlock_func (gl_rwlock_t *lock)
+{
+  if (!lock->guard.done)
+    {
+      if (InterlockedIncrement (&lock->guard.started) == 0)
+        /* This thread is the first one to need this lock.  Initialize it.  */
+        glthread_rwlock_init (lock);
+      else
+        /* Yield the CPU while waiting for another thread to finish
+           initializing this lock.  */
+        while (!lock->guard.done)
+          Sleep (0);
+    }
+  EnterCriticalSection (&lock->lock);
+  /* Test whether no readers or writers are currently running.  */
+  if (!(lock->runcount == 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+         waiting_writers.  */
+      HANDLE event = gl_waitqueue_add (&lock->waiting_writers);
+      if (event != INVALID_HANDLE_VALUE)
+        {
+          DWORD result;
+          LeaveCriticalSection (&lock->lock);
+          /* Wait until another thread signals this event.  */
+          result = WaitForSingleObject (event, INFINITE);
+          if (result == WAIT_FAILED || result == WAIT_TIMEOUT)
+            abort ();
+          CloseHandle (event);
+          /* The thread which signalled the event already did the bookkeeping:
+             removed us from the waiting_writers, set lock->runcount = -1.  */
+          if (!(lock->runcount == -1))
+            abort ();
+          return 0;
+        }
+      else
+        {
+          /* Allocation failure.  Weird.  */
+          do
+            {
+              LeaveCriticalSection (&lock->lock);
+              Sleep (1);
+              EnterCriticalSection (&lock->lock);
+            }
+          while (!(lock->runcount == 0));
+        }
+    }
+  lock->runcount--; /* runcount becomes -1 */
+  LeaveCriticalSection (&lock->lock);
+  return 0;
+}
+
+int
+glthread_rwlock_unlock_func (gl_rwlock_t *lock)
+{
+  if (!lock->guard.done)
+    return EINVAL;
+  EnterCriticalSection (&lock->lock);
+  if (lock->runcount < 0)
+    {
+      /* Drop a writer lock.  */
+      if (!(lock->runcount == -1))
+        abort ();
+      lock->runcount = 0;
+    }
+  else
+    {
+      /* Drop a reader lock.  */
+      if (!(lock->runcount > 0))
+        {
+          LeaveCriticalSection (&lock->lock);
+          return EPERM;
+        }
+      lock->runcount--;
+    }
+  if (lock->runcount == 0)
+    {
+      /* POSIX recommends that "write locks shall take precedence over read
+         locks", to avoid "writer starvation".  */
+      if (lock->waiting_writers.count > 0)
+        {
+          /* Wake up one of the waiting writers.  */
+          lock->runcount--;
+          gl_waitqueue_notify_first (&lock->waiting_writers);
+        }
+      else
+        {
+          /* Wake up all waiting readers.  */
+          lock->runcount += lock->waiting_readers.count;
+          gl_waitqueue_notify_all (&lock->waiting_readers);
+        }
+    }
+  LeaveCriticalSection (&lock->lock);
+  return 0;
+}
+
+int
+glthread_rwlock_destroy_func (gl_rwlock_t *lock)
+{
+  if (!lock->guard.done)
+    return EINVAL;
+  if (lock->runcount != 0)
+    return EBUSY;
+  DeleteCriticalSection (&lock->lock);
+  if (lock->waiting_readers.array != NULL)
+    free (lock->waiting_readers.array);
+  if (lock->waiting_writers.array != NULL)
+    free (lock->waiting_writers.array);
+  lock->guard.done = 0;
+  return 0;
+}
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+void
+glthread_recursive_lock_init_func (gl_recursive_lock_t *lock)
+{
+  lock->owner = 0;
+  lock->depth = 0;
+  InitializeCriticalSection (&lock->lock);
+  lock->guard.done = 1;
+}
+
+int
+glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock)
+{
+  if (!lock->guard.done)
+    {
+      if (InterlockedIncrement (&lock->guard.started) == 0)
+        /* This thread is the first one to need this lock.  Initialize it.  */
+        glthread_recursive_lock_init (lock);
+      else
+        /* Yield the CPU while waiting for another thread to finish
+           initializing this lock.  */
+        while (!lock->guard.done)
+          Sleep (0);
+    }
+  {
+    DWORD self = GetCurrentThreadId ();
+    if (lock->owner != self)
+      {
+        EnterCriticalSection (&lock->lock);
+        lock->owner = self;
+      }
+    if (++(lock->depth) == 0) /* wraparound? */
+      {
+        lock->depth--;
+        return EAGAIN;
+      }
+  }
+  return 0;
+}
+
+int
+glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != GetCurrentThreadId ())
+    return EPERM;
+  if (lock->depth == 0)
+    return EINVAL;
+  if (--(lock->depth) == 0)
+    {
+      lock->owner = 0;
+      LeaveCriticalSection (&lock->lock);
+    }
+  return 0;
+}
+
+int
+glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != 0)
+    return EBUSY;
+  DeleteCriticalSection (&lock->lock);
+  lock->guard.done = 0;
+  return 0;
+}
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+void
+glthread_once_func (gl_once_t *once_control, void (*initfunction) (void))
+{
+  if (once_control->inited <= 0)
+    {
+      if (InterlockedIncrement (&once_control->started) == 0)
+        {
+          /* This thread is the first one to come to this once_control.  */
+          InitializeCriticalSection (&once_control->lock);
+          EnterCriticalSection (&once_control->lock);
+          once_control->inited = 0;
+          initfunction ();
+          once_control->inited = 1;
+          LeaveCriticalSection (&once_control->lock);
+        }
+      else
+        {
+          /* Undo last operation.  */
+          InterlockedDecrement (&once_control->started);
+          /* Some other thread has already started the initialization.
+             Yield the CPU while waiting for the other thread to finish
+             initializing and taking the lock.  */
+          while (once_control->inited < 0)
+            Sleep (0);
+          if (once_control->inited <= 0)
+            {
+              /* Take the lock.  This blocks until the other thread has
+                 finished calling the initfunction.  */
+              EnterCriticalSection (&once_control->lock);
+              LeaveCriticalSection (&once_control->lock);
+              if (!(once_control->inited > 0))
+                abort ();
+            }
+        }
+    }
+}
+
+#endif
+
+/* ========================================================================= */
diff --git a/lib/glthread/lock.h b/lib/glthread/lock.h
new file mode 100644
index 0000000..6782d49
--- /dev/null
+++ b/lib/glthread/lock.h
@@ -0,0 +1,927 @@
+/* Locking in multithreaded situations.
+   Copyright (C) 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h,
+   gthr-win32.h.  */
+
+/* This file contains locking primitives for use with a given thread library.
+   It does not contain primitives for creating threads or for other
+   synchronization primitives.
+
+   Normal (non-recursive) locks:
+     Type:                gl_lock_t
+     Declaration:         gl_lock_define(extern, name)
+     Initializer:         gl_lock_define_initialized(, name)
+     Initialization:      gl_lock_init (name);
+     Taking the lock:     gl_lock_lock (name);
+     Releasing the lock:  gl_lock_unlock (name);
+     De-initialization:   gl_lock_destroy (name);
+   Equivalent functions with control of error handling:
+     Initialization:      err = glthread_lock_init (&name);
+     Taking the lock:     err = glthread_lock_lock (&name);
+     Releasing the lock:  err = glthread_lock_unlock (&name);
+     De-initialization:   err = glthread_lock_destroy (&name);
+
+   Read-Write (non-recursive) locks:
+     Type:                gl_rwlock_t
+     Declaration:         gl_rwlock_define(extern, name)
+     Initializer:         gl_rwlock_define_initialized(, name)
+     Initialization:      gl_rwlock_init (name);
+     Taking the lock:     gl_rwlock_rdlock (name);
+                          gl_rwlock_wrlock (name);
+     Releasing the lock:  gl_rwlock_unlock (name);
+     De-initialization:   gl_rwlock_destroy (name);
+   Equivalent functions with control of error handling:
+     Initialization:      err = glthread_rwlock_init (&name);
+     Taking the lock:     err = glthread_rwlock_rdlock (&name);
+                          err = glthread_rwlock_wrlock (&name);
+     Releasing the lock:  err = glthread_rwlock_unlock (&name);
+     De-initialization:   err = glthread_rwlock_destroy (&name);
+
+   Recursive locks:
+     Type:                gl_recursive_lock_t
+     Declaration:         gl_recursive_lock_define(extern, name)
+     Initializer:         gl_recursive_lock_define_initialized(, name)
+     Initialization:      gl_recursive_lock_init (name);
+     Taking the lock:     gl_recursive_lock_lock (name);
+     Releasing the lock:  gl_recursive_lock_unlock (name);
+     De-initialization:   gl_recursive_lock_destroy (name);
+   Equivalent functions with control of error handling:
+     Initialization:      err = glthread_recursive_lock_init (&name);
+     Taking the lock:     err = glthread_recursive_lock_lock (&name);
+     Releasing the lock:  err = glthread_recursive_lock_unlock (&name);
+     De-initialization:   err = glthread_recursive_lock_destroy (&name);
+
+  Once-only execution:
+     Type:                gl_once_t
+     Initializer:         gl_once_define(extern, name)
+     Execution:           gl_once (name, initfunction);
+   Equivalent functions with control of error handling:
+     Execution:           err = glthread_once (&name, initfunction);
+*/
+
+
+#ifndef _LOCK_H
+#define _LOCK_H
+
+#include <errno.h>
+#include <stdlib.h>
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+/* Use the POSIX threads library.  */
+
+# include <pthread.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if PTHREAD_IN_USE_DETECTION_HARD
+
+/* The pthread_in_use() detection needs to be done at runtime.  */
+#  define pthread_in_use() \
+     glthread_in_use ()
+extern int glthread_in_use (void);
+
+# endif
+
+# if USE_POSIX_THREADS_WEAK
+
+/* Use weak references to the POSIX threads library.  */
+
+/* Weak references avoid dragging in external libraries if the other parts
+   of the program don't use them.  Here we use them, because we don't want
+   every program that uses libintl to depend on libpthread.  This assumes
+   that libpthread would not be loaded after libintl; i.e. if libintl is
+   loaded first, by an executable that does not depend on libpthread, and
+   then a module is dynamically loaded that depends on libpthread, libintl
+   will not be multithread-safe.  */
+
+/* The way to test at runtime whether libpthread is present is to test
+   whether a function pointer's value, such as &pthread_mutex_init, is
+   non-NULL.  However, some versions of GCC have a bug through which, in
+   PIC mode, &foo != NULL always evaluates to true if there is a direct
+   call to foo(...) in the same function.  To avoid this, we test the
+   address of a function in libpthread that we don't use.  */
+
+#  pragma weak pthread_mutex_init
+#  pragma weak pthread_mutex_lock
+#  pragma weak pthread_mutex_unlock
+#  pragma weak pthread_mutex_destroy
+#  pragma weak pthread_rwlock_init
+#  pragma weak pthread_rwlock_rdlock
+#  pragma weak pthread_rwlock_wrlock
+#  pragma weak pthread_rwlock_unlock
+#  pragma weak pthread_rwlock_destroy
+#  pragma weak pthread_once
+#  pragma weak pthread_cond_init
+#  pragma weak pthread_cond_wait
+#  pragma weak pthread_cond_signal
+#  pragma weak pthread_cond_broadcast
+#  pragma weak pthread_cond_destroy
+#  pragma weak pthread_mutexattr_init
+#  pragma weak pthread_mutexattr_settype
+#  pragma weak pthread_mutexattr_destroy
+#  ifndef pthread_self
+#   pragma weak pthread_self
+#  endif
+
+#  if !PTHREAD_IN_USE_DETECTION_HARD
+#   pragma weak pthread_cancel
+#   define pthread_in_use() (pthread_cancel != NULL)
+#  endif
+
+# else
+
+#  if !PTHREAD_IN_USE_DETECTION_HARD
+#   define pthread_in_use() 1
+#  endif
+
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef pthread_mutex_t gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS pthread_mutex_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+    PTHREAD_MUTEX_INITIALIZER
+# define glthread_lock_init(LOCK) \
+    (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0)
+# define glthread_lock_lock(LOCK) \
+    (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0)
+# define glthread_lock_unlock(LOCK) \
+    (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0)
+# define glthread_lock_destroy(LOCK) \
+    (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+# if HAVE_PTHREAD_RWLOCK
+
+#  ifdef PTHREAD_RWLOCK_INITIALIZER
+
+typedef pthread_rwlock_t gl_rwlock_t;
+#   define gl_rwlock_define(STORAGECLASS, NAME) \
+      STORAGECLASS pthread_rwlock_t NAME;
+#   define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+      STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer;
+#   define gl_rwlock_initializer \
+      PTHREAD_RWLOCK_INITIALIZER
+#   define glthread_rwlock_init(LOCK) \
+      (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0)
+#   define glthread_rwlock_rdlock(LOCK) \
+      (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0)
+#   define glthread_rwlock_wrlock(LOCK) \
+      (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0)
+#   define glthread_rwlock_unlock(LOCK) \
+      (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0)
+#   define glthread_rwlock_destroy(LOCK) \
+      (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0)
+
+#  else
+
+typedef struct
+        {
+          int initialized;
+          pthread_mutex_t guard;   /* protects the initialization */
+          pthread_rwlock_t rwlock; /* read-write lock */
+        }
+        gl_rwlock_t;
+#   define gl_rwlock_define(STORAGECLASS, NAME) \
+      STORAGECLASS gl_rwlock_t NAME;
+#   define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+      STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+#   define gl_rwlock_initializer \
+      { 0, PTHREAD_MUTEX_INITIALIZER }
+#   define glthread_rwlock_init(LOCK) \
+      (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0)
+#   define glthread_rwlock_rdlock(LOCK) \
+      (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0)
+#   define glthread_rwlock_wrlock(LOCK) \
+      (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0)
+#   define glthread_rwlock_unlock(LOCK) \
+      (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0)
+#   define glthread_rwlock_destroy(LOCK) \
+      (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock);
+
+#  endif
+
+# else
+
+typedef struct
+        {
+          pthread_mutex_t lock; /* protects the remaining fields */
+          pthread_cond_t waiting_readers; /* waiting readers */
+          pthread_cond_t waiting_writers; /* waiting writers */
+          unsigned int waiting_writers_count; /* number of waiting writers */
+          int runcount; /* number of readers running, or -1 when a writer runs */
+        }
+        gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+    { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 }
+# define glthread_rwlock_init(LOCK) \
+    (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0)
+# define glthread_rwlock_rdlock(LOCK) \
+    (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_wrlock(LOCK) \
+    (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_unlock(LOCK) \
+    (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_destroy(LOCK) \
+    (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock);
+
+# endif
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+# if HAVE_PTHREAD_MUTEX_RECURSIVE
+
+#  if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+
+typedef pthread_mutex_t gl_recursive_lock_t;
+#   define gl_recursive_lock_define(STORAGECLASS, NAME) \
+      STORAGECLASS pthread_mutex_t NAME;
+#   define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+      STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer;
+#   ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+#    define gl_recursive_lock_initializer \
+       PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+#   else
+#    define gl_recursive_lock_initializer \
+       PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+#   endif
+#   define glthread_recursive_lock_init(LOCK) \
+      (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0)
+#   define glthread_recursive_lock_lock(LOCK) \
+      (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0)
+#   define glthread_recursive_lock_unlock(LOCK) \
+      (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0)
+#   define glthread_recursive_lock_destroy(LOCK) \
+      (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0)
+extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock);
+
+#  else
+
+typedef struct
+        {
+          pthread_mutex_t recmutex; /* recursive mutex */
+          pthread_mutex_t guard;    /* protects the initialization */
+          int initialized;
+        }
+        gl_recursive_lock_t;
+#   define gl_recursive_lock_define(STORAGECLASS, NAME) \
+      STORAGECLASS gl_recursive_lock_t NAME;
+#   define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+      STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+#   define gl_recursive_lock_initializer \
+      { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 }
+#   define glthread_recursive_lock_init(LOCK) \
+      (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0)
+#   define glthread_recursive_lock_lock(LOCK) \
+      (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0)
+#   define glthread_recursive_lock_unlock(LOCK) \
+      (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0)
+#   define glthread_recursive_lock_destroy(LOCK) \
+      (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock);
+
+#  endif
+
+# else
+
+/* Old versions of POSIX threads on Solaris did not have recursive locks.
+   We have to implement them ourselves.  */
+
+typedef struct
+        {
+          pthread_mutex_t mutex;
+          pthread_t owner;
+          unsigned long depth;
+        }
+        gl_recursive_lock_t;
+#  define gl_recursive_lock_define(STORAGECLASS, NAME) \
+     STORAGECLASS gl_recursive_lock_t NAME;
+#  define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+     STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+#  define gl_recursive_lock_initializer \
+     { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 }
+#  define glthread_recursive_lock_init(LOCK) \
+     (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0)
+#  define glthread_recursive_lock_lock(LOCK) \
+     (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0)
+#  define glthread_recursive_lock_unlock(LOCK) \
+     (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0)
+#  define glthread_recursive_lock_destroy(LOCK) \
+     (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock);
+
+# endif
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef pthread_once_t gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT;
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+    (pthread_in_use ()                                                         \
+     ? pthread_once (ONCE_CONTROL, INITFUNCTION)                               \
+     : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0))
+extern int glthread_once_singlethreaded (pthread_once_t *once_control);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_PTH_THREADS
+
+/* Use the GNU Pth threads library.  */
+
+# include <pth.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if USE_PTH_THREADS_WEAK
+
+/* Use weak references to the GNU Pth threads library.  */
+
+#  pragma weak pth_mutex_init
+#  pragma weak pth_mutex_acquire
+#  pragma weak pth_mutex_release
+#  pragma weak pth_rwlock_init
+#  pragma weak pth_rwlock_acquire
+#  pragma weak pth_rwlock_release
+#  pragma weak pth_once
+
+#  pragma weak pth_cancel
+#  define pth_in_use() (pth_cancel != NULL)
+
+# else
+
+#  define pth_in_use() 1
+
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef pth_mutex_t gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS pth_mutex_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS pth_mutex_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+    PTH_MUTEX_INIT
+# define glthread_lock_init(LOCK) \
+    (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0)
+# define glthread_lock_lock(LOCK) \
+    (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0)
+# define glthread_lock_unlock(LOCK) \
+    (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0)
+# define glthread_lock_destroy(LOCK) \
+    ((void)(LOCK), 0)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef pth_rwlock_t gl_rwlock_t;
+#  define gl_rwlock_define(STORAGECLASS, NAME) \
+     STORAGECLASS pth_rwlock_t NAME;
+#  define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+     STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer;
+#  define gl_rwlock_initializer \
+     PTH_RWLOCK_INIT
+#  define glthread_rwlock_init(LOCK) \
+     (pth_in_use () && !pth_rwlock_init (LOCK) ? errno : 0)
+#  define glthread_rwlock_rdlock(LOCK) \
+     (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RD, 0, NULL) ? errno : 0)
+#  define glthread_rwlock_wrlock(LOCK) \
+     (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RW, 0, NULL) ? errno : 0)
+#  define glthread_rwlock_unlock(LOCK) \
+     (pth_in_use () && !pth_rwlock_release (LOCK) ? errno : 0)
+#  define glthread_rwlock_destroy(LOCK) \
+     ((void)(LOCK), 0)
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+/* In Pth, mutexes are recursive by default.  */
+typedef pth_mutex_t gl_recursive_lock_t;
+#  define gl_recursive_lock_define(STORAGECLASS, NAME) \
+     STORAGECLASS pth_mutex_t NAME;
+#  define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+     STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer;
+#  define gl_recursive_lock_initializer \
+     PTH_MUTEX_INIT
+#  define glthread_recursive_lock_init(LOCK) \
+     (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0)
+#  define glthread_recursive_lock_lock(LOCK) \
+     (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0)
+#  define glthread_recursive_lock_unlock(LOCK) \
+     (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0)
+#  define glthread_recursive_lock_destroy(LOCK) \
+     ((void)(LOCK), 0)
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef pth_once_t gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT;
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+    (pth_in_use ()                                                             \
+     ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION)                \
+     : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0))
+extern int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void));
+extern int glthread_once_singlethreaded (pth_once_t *once_control);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_SOLARIS_THREADS
+
+/* Use the old Solaris threads library.  */
+
+# include <thread.h>
+# include <synch.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if USE_SOLARIS_THREADS_WEAK
+
+/* Use weak references to the old Solaris threads library.  */
+
+#  pragma weak mutex_init
+#  pragma weak mutex_lock
+#  pragma weak mutex_unlock
+#  pragma weak mutex_destroy
+#  pragma weak rwlock_init
+#  pragma weak rw_rdlock
+#  pragma weak rw_wrlock
+#  pragma weak rw_unlock
+#  pragma weak rwlock_destroy
+#  pragma weak thr_self
+
+#  pragma weak thr_suspend
+#  define thread_in_use() (thr_suspend != NULL)
+
+# else
+
+#  define thread_in_use() 1
+
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef mutex_t gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS mutex_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS mutex_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+    DEFAULTMUTEX
+# define glthread_lock_init(LOCK) \
+    (thread_in_use () ? mutex_init (LOCK, USYNC_THREAD, NULL) : 0)
+# define glthread_lock_lock(LOCK) \
+    (thread_in_use () ? mutex_lock (LOCK) : 0)
+# define glthread_lock_unlock(LOCK) \
+    (thread_in_use () ? mutex_unlock (LOCK) : 0)
+# define glthread_lock_destroy(LOCK) \
+    (thread_in_use () ? mutex_destroy (LOCK) : 0)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef rwlock_t gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+    STORAGECLASS rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+    DEFAULTRWLOCK
+# define glthread_rwlock_init(LOCK) \
+    (thread_in_use () ? rwlock_init (LOCK, USYNC_THREAD, NULL) : 0)
+# define glthread_rwlock_rdlock(LOCK) \
+    (thread_in_use () ? rw_rdlock (LOCK) : 0)
+# define glthread_rwlock_wrlock(LOCK) \
+    (thread_in_use () ? rw_wrlock (LOCK) : 0)
+# define glthread_rwlock_unlock(LOCK) \
+    (thread_in_use () ? rw_unlock (LOCK) : 0)
+# define glthread_rwlock_destroy(LOCK) \
+    (thread_in_use () ? rwlock_destroy (LOCK) : 0)
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+/* Old Solaris threads did not have recursive locks.
+   We have to implement them ourselves.  */
+
+typedef struct
+        {
+          mutex_t mutex;
+          thread_t owner;
+          unsigned long depth;
+        }
+        gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_recursive_lock_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+# define gl_recursive_lock_initializer \
+    { DEFAULTMUTEX, (thread_t) 0, 0 }
+# define glthread_recursive_lock_init(LOCK) \
+    (thread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_lock(LOCK) \
+    (thread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_unlock(LOCK) \
+    (thread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_destroy(LOCK) \
+    (thread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock);
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef struct
+        {
+          volatile int inited;
+          mutex_t mutex;
+        }
+        gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX };
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+    (thread_in_use ()                                                          \
+     ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION)                \
+     : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0))
+extern int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void));
+extern int glthread_once_singlethreaded (gl_once_t *once_control);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_WINDOWS_THREADS
+
+# define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+# include <windows.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* We can use CRITICAL_SECTION directly, rather than the native Windows Event,
+   Mutex, Semaphore types, because
+     - we need only to synchronize inside a single process (address space),
+       not inter-process locking,
+     - we don't need to support trylock operations.  (TryEnterCriticalSection
+       does not work on Windows 95/98/ME.  Packages that need trylock usually
+       define their own mutex type.)  */
+
+/* There is no way to statically initialize a CRITICAL_SECTION.  It needs
+   to be done lazily, once only.  For this we need spinlocks.  */
+
+typedef struct { volatile int done; volatile long started; } gl_spinlock_t;
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef struct
+        {
+          gl_spinlock_t guard; /* protects the initialization */
+          CRITICAL_SECTION lock;
+        }
+        gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_lock_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_lock_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+    { { 0, -1 } }
+# define glthread_lock_init(LOCK) \
+    (glthread_lock_init_func (LOCK), 0)
+# define glthread_lock_lock(LOCK) \
+    glthread_lock_lock_func (LOCK)
+# define glthread_lock_unlock(LOCK) \
+    glthread_lock_unlock_func (LOCK)
+# define glthread_lock_destroy(LOCK) \
+    glthread_lock_destroy_func (LOCK)
+extern void glthread_lock_init_func (gl_lock_t *lock);
+extern int glthread_lock_lock_func (gl_lock_t *lock);
+extern int glthread_lock_unlock_func (gl_lock_t *lock);
+extern int glthread_lock_destroy_func (gl_lock_t *lock);
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+/* It is impossible to implement read-write locks using plain locks, without
+   introducing an extra thread dedicated to managing read-write locks.
+   Therefore here we need to use the low-level Event type.  */
+
+typedef struct
+        {
+          HANDLE *array; /* array of waiting threads, each represented by an event */
+          unsigned int count; /* number of waiting threads */
+          unsigned int alloc; /* length of allocated array */
+          unsigned int offset; /* index of first waiting thread in array */
+        }
+        gl_carray_waitqueue_t;
+typedef struct
+        {
+          gl_spinlock_t guard; /* protects the initialization */
+          CRITICAL_SECTION lock; /* protects the remaining fields */
+          gl_carray_waitqueue_t waiting_readers; /* waiting readers */
+          gl_carray_waitqueue_t waiting_writers; /* waiting writers */
+          int runcount; /* number of readers running, or -1 when a writer runs */
+        }
+        gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+    { { 0, -1 } }
+# define glthread_rwlock_init(LOCK) \
+    (glthread_rwlock_init_func (LOCK), 0)
+# define glthread_rwlock_rdlock(LOCK) \
+    glthread_rwlock_rdlock_func (LOCK)
+# define glthread_rwlock_wrlock(LOCK) \
+    glthread_rwlock_wrlock_func (LOCK)
+# define glthread_rwlock_unlock(LOCK) \
+    glthread_rwlock_unlock_func (LOCK)
+# define glthread_rwlock_destroy(LOCK) \
+    glthread_rwlock_destroy_func (LOCK)
+extern void glthread_rwlock_init_func (gl_rwlock_t *lock);
+extern int glthread_rwlock_rdlock_func (gl_rwlock_t *lock);
+extern int glthread_rwlock_wrlock_func (gl_rwlock_t *lock);
+extern int glthread_rwlock_unlock_func (gl_rwlock_t *lock);
+extern int glthread_rwlock_destroy_func (gl_rwlock_t *lock);
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+/* The native Windows documentation says that CRITICAL_SECTION already
+   implements a recursive lock.  But we need not rely on it: It's easy to
+   implement a recursive lock without this assumption.  */
+
+typedef struct
+        {
+          gl_spinlock_t guard; /* protects the initialization */
+          DWORD owner;
+          unsigned long depth;
+          CRITICAL_SECTION lock;
+        }
+        gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_recursive_lock_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+# define gl_recursive_lock_initializer \
+    { { 0, -1 }, 0, 0 }
+# define glthread_recursive_lock_init(LOCK) \
+    (glthread_recursive_lock_init_func (LOCK), 0)
+# define glthread_recursive_lock_lock(LOCK) \
+    glthread_recursive_lock_lock_func (LOCK)
+# define glthread_recursive_lock_unlock(LOCK) \
+    glthread_recursive_lock_unlock_func (LOCK)
+# define glthread_recursive_lock_destroy(LOCK) \
+    glthread_recursive_lock_destroy_func (LOCK)
+extern void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock);
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef struct
+        {
+          volatile int inited;
+          volatile long started;
+          CRITICAL_SECTION lock;
+        }
+        gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_once_t NAME = { -1, -1 };
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+    (glthread_once_func (ONCE_CONTROL, INITFUNCTION), 0)
+extern void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void));
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS)
+
+/* Provide dummy implementation if threads are not supported.  */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef int gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME)
+# define gl_lock_define_initialized(STORAGECLASS, NAME)
+# define glthread_lock_init(NAME) 0
+# define glthread_lock_lock(NAME) 0
+# define glthread_lock_unlock(NAME) 0
+# define glthread_lock_destroy(NAME) 0
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef int gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME)
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME)
+# define glthread_rwlock_init(NAME) 0
+# define glthread_rwlock_rdlock(NAME) 0
+# define glthread_rwlock_wrlock(NAME) 0
+# define glthread_rwlock_unlock(NAME) 0
+# define glthread_rwlock_destroy(NAME) 0
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+typedef int gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME)
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME)
+# define glthread_recursive_lock_init(NAME) 0
+# define glthread_recursive_lock_lock(NAME) 0
+# define glthread_recursive_lock_unlock(NAME) 0
+# define glthread_recursive_lock_destroy(NAME) 0
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef int gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_once_t NAME = 0;
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+    (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0)
+
+#endif
+
+/* ========================================================================= */
+
+/* Macros with built-in error handling.  */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+#define gl_lock_init(NAME) \
+   do                                  \
+     {                                 \
+       if (glthread_lock_init (&NAME)) \
+         abort ();                     \
+     }                                 \
+   while (0)
+#define gl_lock_lock(NAME) \
+   do                                  \
+     {                                 \
+       if (glthread_lock_lock (&NAME)) \
+         abort ();                     \
+     }                                 \
+   while (0)
+#define gl_lock_unlock(NAME) \
+   do                                    \
+     {                                   \
+       if (glthread_lock_unlock (&NAME)) \
+         abort ();                       \
+     }                                   \
+   while (0)
+#define gl_lock_destroy(NAME) \
+   do                                     \
+     {                                    \
+       if (glthread_lock_destroy (&NAME)) \
+         abort ();                        \
+     }                                    \
+   while (0)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+#define gl_rwlock_init(NAME) \
+   do                                    \
+     {                                   \
+       if (glthread_rwlock_init (&NAME)) \
+         abort ();                       \
+     }                                   \
+   while (0)
+#define gl_rwlock_rdlock(NAME) \
+   do                                      \
+     {                                     \
+       if (glthread_rwlock_rdlock (&NAME)) \
+         abort ();                         \
+     }                                     \
+   while (0)
+#define gl_rwlock_wrlock(NAME) \
+   do                                      \
+     {                                     \
+       if (glthread_rwlock_wrlock (&NAME)) \
+         abort ();                         \
+     }                                     \
+   while (0)
+#define gl_rwlock_unlock(NAME) \
+   do                                      \
+     {                                     \
+       if (glthread_rwlock_unlock (&NAME)) \
+         abort ();                         \
+     }                                     \
+   while (0)
+#define gl_rwlock_destroy(NAME) \
+   do                                       \
+     {                                      \
+       if (glthread_rwlock_destroy (&NAME)) \
+         abort ();                          \
+     }                                      \
+   while (0)
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+#define gl_recursive_lock_init(NAME) \
+   do                                            \
+     {                                           \
+       if (glthread_recursive_lock_init (&NAME)) \
+         abort ();                               \
+     }                                           \
+   while (0)
+#define gl_recursive_lock_lock(NAME) \
+   do                                            \
+     {                                           \
+       if (glthread_recursive_lock_lock (&NAME)) \
+         abort ();                               \
+     }                                           \
+   while (0)
+#define gl_recursive_lock_unlock(NAME) \
+   do                                              \
+     {                                             \
+       if (glthread_recursive_lock_unlock (&NAME)) \
+         abort ();                                 \
+     }                                             \
+   while (0)
+#define gl_recursive_lock_destroy(NAME) \
+   do                                               \
+     {                                              \
+       if (glthread_recursive_lock_destroy (&NAME)) \
+         abort ();                                  \
+     }                                              \
+   while (0)
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+#define gl_once(NAME, INITFUNCTION) \
+   do                                           \
+     {                                          \
+       if (glthread_once (&NAME, INITFUNCTION)) \
+         abort ();                              \
+     }                                          \
+   while (0)
+
+/* ========================================================================= */
+
+#endif /* _LOCK_H */
diff --git a/lib/glthread/threadlib.c b/lib/glthread/threadlib.c
new file mode 100644
index 0000000..946268e
--- /dev/null
+++ b/lib/glthread/threadlib.c
@@ -0,0 +1,73 @@
+/* Multithreading primitives.
+   Copyright (C) 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.  */
+
+#include <config.h>
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+/* Use the POSIX threads library.  */
+
+# include <pthread.h>
+# include <stdlib.h>
+
+# if PTHREAD_IN_USE_DETECTION_HARD
+
+/* The function to be executed by a dummy thread.  */
+static void *
+dummy_thread_func (void *arg)
+{
+  return arg;
+}
+
+int
+glthread_in_use (void)
+{
+  static int tested;
+  static int result; /* 1: linked with -lpthread, 0: only with libc */
+
+  if (!tested)
+    {
+      pthread_t thread;
+
+      if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0)
+        /* Thread creation failed.  */
+        result = 0;
+      else
+        {
+          /* Thread creation works.  */
+          void *retval;
+          if (pthread_join (thread, &retval) != 0)
+            abort ();
+          result = 1;
+        }
+      tested = 1;
+    }
+  return result;
+}
+
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+/* This declaration is solely to ensure that after preprocessing
+   this file is never empty.  */
+typedef int dummy;
diff --git a/lib/gnulib.mk b/lib/gnulib.mk
index 3e7b28d..f001169 100644
--- a/lib/gnulib.mk
+++ b/lib/gnulib.mk
@@ -1,23 +1,521 @@
-# This file is generated automatically by "bootstrap".
-lib_SOURCES += argmatch.h argmatch.c
-
-lib_SOURCES += basename.c stripslash.c
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+#
+# This file 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.
+#
+# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libbison --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --makefile-name=gnulib.mk --no-conditional-dependencies --no-libtool --macro-prefix=gl argmatch assert c-strcase calloc-posix close closeout config-h configmake dirname error extensions fdl fopen-safer fprintf-posix getline getopt-gnu gettext git-version-gen gitlog-to-changelog gpl-3.0 hash inttypes isnan javacomp-script javaexec-script ldexpl malloc-gnu mbschr mbsrchr mbswidth obstack obstack-printf perror printf-posix progname quote quotearg readme-release realloc-posix snprintf-posix spawn-pipe sprintf-posix stdbool stpcpy strdup-posix strerror strtoul strverscmp unistd unistd-safer unlocked-io unsetenv update-copyright verify vsnprintf-posix vsprintf-posix warnings xalloc xalloc-die xmemdup0 xstrndup
 
 
-lib_SOURCES += exit.h
+MOSTLYCLEANFILES += core *.stackdump
+
+noinst_LIBRARIES += libbison.a
+
+libbison_a_SOURCES =
+libbison_a_LIBADD = $(gl_LIBOBJS)
+libbison_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_libbison_a_SOURCES =
+
+## begin gnulib module alloca-opt
+
+BUILT_SOURCES += $(ALLOCA_H)
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_ALLOCA_H
+alloca.h: alloca.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(srcdir)/alloca.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+else
+alloca.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += alloca.h alloca.h-t
+
+EXTRA_DIST += alloca.in.h
+
+## end   gnulib module alloca-opt
+
+## begin gnulib module announce-gen
 
 
+EXTRA_DIST += $(top_srcdir)/build-aux/announce-gen
+
+## end   gnulib module announce-gen
+
+## begin gnulib module argmatch
+
+libbison_a_SOURCES += argmatch.c
+
+EXTRA_DIST += argmatch.h
+
+## end   gnulib module argmatch
+
+## begin gnulib module binary-io
+
+libbison_a_SOURCES += binary-io.h binary-io.c
+
+## end   gnulib module binary-io
+
+## begin gnulib module bitrotate
+
+libbison_a_SOURCES += bitrotate.h bitrotate.c
+
+## end   gnulib module bitrotate
+
+## begin gnulib module c-ctype
+
+libbison_a_SOURCES += c-ctype.h c-ctype.c
+
+## end   gnulib module c-ctype
+
+## begin gnulib module c-strcase
+
+libbison_a_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c
+
+## end   gnulib module c-strcase
+
+## begin gnulib module c-strcaseeq
+
+
+EXTRA_DIST += c-strcaseeq.h
+
+## end   gnulib module c-strcaseeq
+
+## begin gnulib module calloc-posix
+
+
+EXTRA_DIST += calloc.c
+
+EXTRA_libbison_a_SOURCES += calloc.c
+
+## end   gnulib module calloc-posix
+
+## begin gnulib module cloexec
+
+libbison_a_SOURCES += cloexec.c
+
+EXTRA_DIST += cloexec.h
+
+## end   gnulib module cloexec
+
+## begin gnulib module close
+
+
+EXTRA_DIST += close.c
+
+EXTRA_libbison_a_SOURCES += close.c
+
+## end   gnulib module close
+
+## begin gnulib module close-stream
+
+libbison_a_SOURCES += close-stream.c
+
+EXTRA_DIST += close-stream.h
+
+## end   gnulib module close-stream
+
+## begin gnulib module closeout
+
+libbison_a_SOURCES += closeout.c
+
+EXTRA_DIST += closeout.h
+
+## end   gnulib module closeout
+
+## begin gnulib module configmake
+
+# Listed in the same order as the GNU makefile conventions, and
+# provided by autoconf 2.59c+.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+	$(AM_V_GEN)rm -f $@-t && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  echo '#define PREFIX "$(prefix)"'; \
+	  echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
+	  echo '#define BINDIR "$(bindir)"'; \
+	  echo '#define SBINDIR "$(sbindir)"'; \
+	  echo '#define LIBEXECDIR "$(libexecdir)"'; \
+	  echo '#define DATAROOTDIR "$(datarootdir)"'; \
+	  echo '#define DATADIR "$(datadir)"'; \
+	  echo '#define SYSCONFDIR "$(sysconfdir)"'; \
+	  echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
+	  echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
+	  echo '#define INCLUDEDIR "$(includedir)"'; \
+	  echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
+	  echo '#define DOCDIR "$(docdir)"'; \
+	  echo '#define INFODIR "$(infodir)"'; \
+	  echo '#define HTMLDIR "$(htmldir)"'; \
+	  echo '#define DVIDIR "$(dvidir)"'; \
+	  echo '#define PDFDIR "$(pdfdir)"'; \
+	  echo '#define PSDIR "$(psdir)"'; \
+	  echo '#define LIBDIR "$(libdir)"'; \
+	  echo '#define LISPDIR "$(lispdir)"'; \
+	  echo '#define LOCALEDIR "$(localedir)"'; \
+	  echo '#define MANDIR "$(mandir)"'; \
+	  echo '#define MANEXT "$(manext)"'; \
+	  echo '#define PKGDATADIR "$(pkgdatadir)"'; \
+	  echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
+	  echo '#define PKGLIBDIR "$(pkglibdir)"'; \
+	  echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
+	} | sed '/""/d' > $@-t && \
+	mv -f $@-t $@
+
+BUILT_SOURCES += configmake.h
+CLEANFILES += configmake.h configmake.h-t
+
+## end   gnulib module configmake
+
+## begin gnulib module dirname
+
+libbison_a_SOURCES += dirname.c basename.c
+
+EXTRA_DIST += stripslash.c
+
+EXTRA_libbison_a_SOURCES += stripslash.c
+
+## end   gnulib module dirname
+
+## begin gnulib module dirname-lgpl
+
+libbison_a_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c
+
+EXTRA_DIST += dirname.h
+
+## end   gnulib module dirname-lgpl
+
+## begin gnulib module do-release-commit-and-tag
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/do-release-commit-and-tag
+
+## end   gnulib module do-release-commit-and-tag
+
+## begin gnulib module dosname
+
+
+EXTRA_DIST += dosname.h
+
+## end   gnulib module dosname
+
+## begin gnulib module dup2
+
+
+EXTRA_DIST += dup2.c
+
+EXTRA_libbison_a_SOURCES += dup2.c
+
+## end   gnulib module dup2
+
+## begin gnulib module errno
+
+BUILT_SOURCES += $(ERRNO_H)
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+if GL_GENERATE_ERRNO_H
+errno.h: errno.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+	      -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+	      -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+	      -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+	      -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+	      -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+	      -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+	      < $(srcdir)/errno.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+errno.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += errno.h errno.h-t
+
+EXTRA_DIST += errno.in.h
+
+## end   gnulib module errno
+
+## begin gnulib module error
+
+
+EXTRA_DIST += error.c error.h
+
+EXTRA_libbison_a_SOURCES += error.c
+
+## end   gnulib module error
+
+## begin gnulib module exitfail
+
+libbison_a_SOURCES += exitfail.c
+
+EXTRA_DIST += exitfail.h
+
+## end   gnulib module exitfail
+
+## begin gnulib module fatal-signal
+
+libbison_a_SOURCES += fatal-signal.h fatal-signal.c
+
+## end   gnulib module fatal-signal
+
+## begin gnulib module fcntl
+
+
+EXTRA_DIST += fcntl.c
+
+EXTRA_libbison_a_SOURCES += fcntl.c
+
+## end   gnulib module fcntl
+
+## begin gnulib module fcntl-h
+
+BUILT_SOURCES += fcntl.h
+
+# We need the following in order to create <fcntl.h> when the system
+# doesn't have one that works with the given compiler.
+fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
+	      -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \
+	      -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \
+	      -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \
+	      -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
+	      -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
+	      -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \
+	      -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
+	      -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/fcntl.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += fcntl.h fcntl.h-t
+
+EXTRA_DIST += fcntl.in.h
+
+## end   gnulib module fcntl-h
+
+## begin gnulib module fd-hook
+
+libbison_a_SOURCES += fd-hook.c
+
+EXTRA_DIST += fd-hook.h
+
+## end   gnulib module fd-hook
+
+## begin gnulib module fd-safer-flag
+
+libbison_a_SOURCES += fd-safer-flag.c dup-safer-flag.c
+
+## end   gnulib module fd-safer-flag
+
+## begin gnulib module float
+
+BUILT_SOURCES += $(FLOAT_H)
+
+# We need the following in order to create <float.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_FLOAT_H
+float.h: float.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
+	      -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+	      < $(srcdir)/float.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+float.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += float.h float.h-t
+
+EXTRA_DIST += float.c float.in.h itold.c
+
+EXTRA_libbison_a_SOURCES += float.c itold.c
+
+## end   gnulib module float
+
+## begin gnulib module fopen
+
+
+EXTRA_DIST += fopen.c
+
+EXTRA_libbison_a_SOURCES += fopen.c
+
+## end   gnulib module fopen
+
+## begin gnulib module fopen-safer
+
+libbison_a_SOURCES += fopen-safer.c
+
+EXTRA_DIST += stdio--.h stdio-safer.h
+
+## end   gnulib module fopen-safer
+
+## begin gnulib module fpending
+
+
+EXTRA_DIST += fpending.c fpending.h
+
+EXTRA_libbison_a_SOURCES += fpending.c
+
+## end   gnulib module fpending
+
+## begin gnulib module fprintf-posix
+
+
+EXTRA_DIST += fprintf.c
+
+EXTRA_libbison_a_SOURCES += fprintf.c
+
+## end   gnulib module fprintf-posix
+
+## begin gnulib module fpucw
+
+
+EXTRA_DIST += fpucw.h
+
+## end   gnulib module fpucw
+
+## begin gnulib module frexp-nolibm
+
+
+EXTRA_DIST += frexp.c
+
+EXTRA_libbison_a_SOURCES += frexp.c
+
+## end   gnulib module frexp-nolibm
+
+## begin gnulib module frexpl-nolibm
+
+
+EXTRA_DIST += frexp.c frexpl.c
+
+EXTRA_libbison_a_SOURCES += frexp.c frexpl.c
+
+## end   gnulib module frexpl-nolibm
+
+## begin gnulib module fseterr
+
+
+EXTRA_DIST += fseterr.c fseterr.h stdio-impl.h
+
+EXTRA_libbison_a_SOURCES += fseterr.c
+
+## end   gnulib module fseterr
+
+## begin gnulib module fstat
+
+
+EXTRA_DIST += fstat.c
+
+EXTRA_libbison_a_SOURCES += fstat.c
+
+## end   gnulib module fstat
+
+## begin gnulib module gendocs
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh
+
+## end   gnulib module gendocs
+
+## begin gnulib module getdelim
+
+
+EXTRA_DIST += getdelim.c
+
+EXTRA_libbison_a_SOURCES += getdelim.c
+
+## end   gnulib module getdelim
+
+## begin gnulib module getdtablesize
+
+
+EXTRA_DIST += getdtablesize.c
+
+EXTRA_libbison_a_SOURCES += getdtablesize.c
+
+## end   gnulib module getdtablesize
+
+## begin gnulib module getline
+
+
+EXTRA_DIST += getline.c
+
+EXTRA_libbison_a_SOURCES += getline.c
+
+## end   gnulib module getline
+
+## begin gnulib module getopt-posix
 
 BUILT_SOURCES += $(GETOPT_H)
-EXTRA_DIST += getopt_.h getopt_int.h
 
 # We need the following in order to create <getopt.h> when the system
 # doesn't have one that works with the given compiler.
-getopt.h: getopt_.h
-	cp $(srcdir)/getopt_.h $@-t
-	mv $@-t $@
+getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      < $(srcdir)/getopt.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
 MOSTLYCLEANFILES += getopt.h getopt.h-t
 
+EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h
+
+EXTRA_libbison_a_SOURCES += getopt.c getopt1.c
+
+## end   gnulib module getopt-posix
+
+## begin gnulib module gettext
+
 # This is for those projects which use "gettextize --intl" to put a source-code
 # copy of libintl into their package. In such projects, every Makefile.am needs
 # -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory.
@@ -26,53 +524,2398 @@
 # This option has no effect when the user disables NLS (because then the intl
 # directory contains no libintl.h file) or when the project does not use
 # "gettextize --intl".
-# (commented out by bootstrap) AM_CPPFLAGS += -I$(top_builddir)/intl
+AM_CPPFLAGS += -I$(top_builddir)/intl
 
-lib_SOURCES += gettext.h
+EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+
+## end   gnulib module gettext
+
+## begin gnulib module gettext-h
+
+libbison_a_SOURCES += gettext.h
+
+## end   gnulib module gettext-h
+
+## begin gnulib module git-version-gen
 
 
+EXTRA_DIST += $(top_srcdir)/build-aux/git-version-gen
+
+## end   gnulib module git-version-gen
+
+## begin gnulib module gitlog-to-changelog
 
 
+EXTRA_DIST += $(top_srcdir)/build-aux/gitlog-to-changelog
 
-lib_SOURCES += mbswidth.h mbswidth.c
+## end   gnulib module gitlog-to-changelog
+
+## begin gnulib module gnu-web-doc-update
 
 
+EXTRA_DIST += $(top_srcdir)/build-aux/gnu-web-doc-update
 
+## end   gnulib module gnu-web-doc-update
+
+## begin gnulib module gnumakefile
+
+distclean-local: clean-GNUmakefile
+clean-GNUmakefile:
+	test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
+
+EXTRA_DIST += $(top_srcdir)/GNUmakefile
+
+## end   gnulib module gnumakefile
+
+## begin gnulib module gnupload
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gnupload
+
+## end   gnulib module gnupload
+
+## begin gnulib module hash
+
+libbison_a_SOURCES += hash.c
+
+EXTRA_DIST += hash.h
+
+## end   gnulib module hash
+
+## begin gnulib module havelib
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+
+## end   gnulib module havelib
+
+## begin gnulib module intprops
+
+
+EXTRA_DIST += intprops.h
+
+## end   gnulib module intprops
+
+## begin gnulib module inttypes-incomplete
+
+BUILT_SOURCES += inttypes.h
+
+# We need the following in order to create <inttypes.h> when the system
+# doesn't have one that works with the given compiler.
+inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
+	      -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
+	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+	      -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
+	      -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
+	      -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
+	      -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
+	      -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
+	      -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
+	      -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
+	      -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
+	      -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
+	      -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \
+	      -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
+	      -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
+	      -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
+	      -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/inttypes.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += inttypes.h inttypes.h-t
+
+EXTRA_DIST += inttypes.in.h
+
+## end   gnulib module inttypes-incomplete
+
+## begin gnulib module isnand
+
+
+EXTRA_DIST += float+.h isnan.c isnand.c
+
+EXTRA_libbison_a_SOURCES += isnan.c isnand.c
+
+## end   gnulib module isnand
+
+## begin gnulib module isnand-nolibm
+
+
+EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c
+
+EXTRA_libbison_a_SOURCES += isnan.c isnand.c
+
+## end   gnulib module isnand-nolibm
+
+## begin gnulib module isnanf
+
+
+EXTRA_DIST += float+.h isnan.c isnanf.c
+
+EXTRA_libbison_a_SOURCES += isnan.c isnanf.c
+
+## end   gnulib module isnanf
+
+## begin gnulib module isnanf-nolibm
+
+
+EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c
+
+EXTRA_libbison_a_SOURCES += isnan.c isnanf.c
+
+## end   gnulib module isnanf-nolibm
+
+## begin gnulib module isnanl
+
+
+EXTRA_DIST += float+.h isnan.c isnanl.c
+
+EXTRA_libbison_a_SOURCES += isnan.c isnanl.c
+
+## end   gnulib module isnanl
+
+## begin gnulib module isnanl-nolibm
+
+
+EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c
+
+EXTRA_libbison_a_SOURCES += isnan.c isnanl.c
+
+## end   gnulib module isnanl-nolibm
+
+## begin gnulib module iswblank
+
+
+EXTRA_DIST += iswblank.c
+
+EXTRA_libbison_a_SOURCES += iswblank.c
+
+## end   gnulib module iswblank
+
+## begin gnulib module javacomp-script
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/javacomp.sh.in
+
+## end   gnulib module javacomp-script
+
+## begin gnulib module javaexec-script
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/javaexec.sh.in
+
+## end   gnulib module javaexec-script
+
+## begin gnulib module ldexpl
+
+
+EXTRA_DIST += ldexpl.c
+
+EXTRA_libbison_a_SOURCES += ldexpl.c
+
+## end   gnulib module ldexpl
+
+## begin gnulib module localcharset
+
+libbison_a_SOURCES += localcharset.h localcharset.c
+
+# We need the following in order to install a simple file in $(libdir)
+# which is shared with other installed packages. We use a list of referencing
+# packages so that "make uninstall" will remove the file if and only if it
+# is not used by another installed package.
+# On systems with glibc-2.1 or newer, the file is redundant, therefore we
+# avoid installing it.
+
+all-local: charset.alias ref-add.sed ref-del.sed
+
+charset_alias = $(DESTDIR)$(libdir)/charset.alias
+charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+install-exec-local: install-exec-localcharset
+install-exec-localcharset: all-local
+	if test $(GLIBC21) = no; then \
+	  case '$(host_os)' in \
+	    darwin[56]*) \
+	      need_charset_alias=true ;; \
+	    darwin* | cygwin* | mingw* | pw32* | cegcc*) \
+	      need_charset_alias=false ;; \
+	    *) \
+	      need_charset_alias=true ;; \
+	  esac ; \
+	else \
+	  need_charset_alias=false ; \
+	fi ; \
+	if $$need_charset_alias; then \
+	  $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
+	fi ; \
+	if test -f $(charset_alias); then \
+	  sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
+	  $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	  rm -f $(charset_tmp) ; \
+	else \
+	  if $$need_charset_alias; then \
+	    sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	    rm -f $(charset_tmp) ; \
+	  fi ; \
+	fi
+
+uninstall-local: uninstall-localcharset
+uninstall-localcharset: all-local
+	if test -f $(charset_alias); then \
+	  sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
+	  if grep '^# Packages using this file: $$' $(charset_tmp) \
+	      > /dev/null; then \
+	    rm -f $(charset_alias); \
+	  else \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
+	  fi; \
+	  rm -f $(charset_tmp); \
+	fi
+
+charset.alias: config.charset
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
+	mv t-$@ $@
+
+SUFFIXES += .sed .sin
+.sin.sed:
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
+	mv t-$@ $@
+
+CLEANFILES += charset.alias ref-add.sed ref-del.sed
+
+EXTRA_DIST += config.charset ref-add.sin ref-del.sin
+
+## end   gnulib module localcharset
+
+## begin gnulib module lock
+
+libbison_a_SOURCES += glthread/lock.h glthread/lock.c
+
+## end   gnulib module lock
+
+## begin gnulib module maintainer-makefile
+
+EXTRA_DIST += $(top_srcdir)/maint.mk
+
+## end   gnulib module maintainer-makefile
+
+## begin gnulib module malloc-gnu
+
+
+EXTRA_DIST += malloc.c
+
+EXTRA_libbison_a_SOURCES += malloc.c
+
+## end   gnulib module malloc-gnu
+
+## begin gnulib module malloc-posix
+
+
+EXTRA_DIST += malloc.c
+
+EXTRA_libbison_a_SOURCES += malloc.c
+
+## end   gnulib module malloc-posix
+
+## begin gnulib module math
+
+BUILT_SOURCES += math.h
+libbison_a_SOURCES += math.c
+
+# We need the following in order to create <math.h> when the system
+# doesn't have one that works with the given compiler.
+math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \
+	      -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \
+	      -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \
+	      -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \
+	      -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \
+	      -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \
+	      -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \
+	      -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \
+	      -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \
+	      -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \
+	      -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \
+	      -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \
+	      -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \
+	      -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \
+	      -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \
+	      -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \
+	      -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \
+	      -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \
+	      -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \
+	      -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \
+	      -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \
+	      -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \
+	      -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \
+	      -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \
+	      -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \
+	      -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \
+	      -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \
+	      -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \
+	      -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \
+	      -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \
+	      -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \
+	      -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \
+	      -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \
+	      -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \
+	      -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \
+	      -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \
+	      -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \
+	      -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \
+	      -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \
+	      -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \
+	      -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \
+	      -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \
+	      -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \
+	      -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \
+	      -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \
+	      < $(srcdir)/math.in.h | \
+	  sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \
+	      -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \
+	      -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \
+	      -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \
+	      -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \
+	      -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \
+	      -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \
+	      -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \
+	      -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \
+	      -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \
+	      -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \
+	      -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \
+	      -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \
+	      -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \
+	      -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \
+	      -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \
+	      -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \
+	      -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \
+	      -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \
+	      -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \
+	      -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \
+	      -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \
+	      -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \
+	      -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \
+	      -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \
+	      -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \
+	      -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \
+	      -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \
+	      -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \
+	      -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \
+	      -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \
+	      -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \
+	      -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \
+	      -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \
+	      -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \
+	      -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \
+	      -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \
+	      -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \
+	      -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \
+	      -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \
+	      -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \
+	      -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \
+	      -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \
+	      -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \
+	      -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \
+	      -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \
+	      -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \
+	      -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \
+	      -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \
+	      -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \
+	      -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \
+	  | \
+	  sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \
+	      -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \
+	      -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \
+	      -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \
+	      -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \
+	      -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \
+	      -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \
+	      -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \
+	      -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \
+	      -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \
+	      -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \
+	      -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \
+	      -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \
+	      -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \
+	      -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \
+	      -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \
+	      -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \
+	      -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \
+	      -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \
+	      -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \
+	      -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \
+	      -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \
+	      -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \
+	      -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \
+	      -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \
+	      -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \
+	      -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \
+	      -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \
+	      -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \
+	      -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \
+	      -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \
+	      -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \
+	      -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \
+	      -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \
+	      -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \
+	      -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \
+	      -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \
+	      -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \
+	      -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \
+	      -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \
+	      -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \
+	      -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \
+	      -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \
+	      -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \
+	      -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \
+	      -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \
+	      -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \
+	      -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \
+	      -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \
+	      -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \
+	      -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \
+	      -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \
+	      -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \
+	      -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \
+	      -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \
+	      -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \
+	      -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \
+	      -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \
+	      -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \
+	      -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \
+	      -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \
+	      -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \
+	      -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \
+	      -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \
+	      -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \
+	      -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \
+	      -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \
+	      -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \
+	      -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \
+	      -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \
+	      -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \
+	      -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \
+	      -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \
+	      -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \
+	      -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \
+	      -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \
+	      -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \
+	      -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \
+	      -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \
+	      -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \
+	      -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \
+	      -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \
+	      -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \
+	      -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \
+	      -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \
+	      -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \
+	      -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \
+	      -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \
+	      -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \
+	      -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \
+	      -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \
+	      -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \
+	      -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \
+	      -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \
+	      -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \
+	      -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \
+	      -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \
+	      -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \
+	      -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \
+	      -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \
+	      -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \
+	      -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \
+	      -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \
+	      -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \
+	      -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \
+	      -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \
+	      -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \
+	      -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \
+	      -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \
+	      -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \
+	      -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \
+	      -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \
+	      -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \
+	      -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \
+	      -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \
+	      -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \
+	      -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \
+	      -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \
+	      -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \
+	      -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \
+	      -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \
+	      -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \
+	      -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \
+	      -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \
+	      -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \
+	      -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \
+	      -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+	      -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \
+	      -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \
+	      -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \
+	      -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \
+	      -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \
+	      -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \
+	      -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \
+	      -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \
+	      -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \
+	      -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \
+	      -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \
+	      -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \
+	      -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \
+	      -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \
+	      -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \
+	      -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \
+	      -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \
+	      -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \
+	      -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \
+	      -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \
+	      -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \
+	      -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \
+	      -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \
+	      -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \
+	      -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \
+	      -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \
+	      -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \
+	      -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \
+	      -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \
+	      -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \
+	      -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \
+	      -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += math.h math.h-t
+
+EXTRA_DIST += math.in.h
+
+## end   gnulib module math
+
+## begin gnulib module mbchar
+
+libbison_a_SOURCES += mbchar.c
+
+EXTRA_DIST += mbchar.h
+
+## end   gnulib module mbchar
+
+## begin gnulib module mbrtowc
+
+
+EXTRA_DIST += mbrtowc.c
+
+EXTRA_libbison_a_SOURCES += mbrtowc.c
+
+## end   gnulib module mbrtowc
+
+## begin gnulib module mbschr
+
+libbison_a_SOURCES += mbschr.c
+
+## end   gnulib module mbschr
+
+## begin gnulib module mbsinit
+
+
+EXTRA_DIST += mbsinit.c
+
+EXTRA_libbison_a_SOURCES += mbsinit.c
+
+## end   gnulib module mbsinit
+
+## begin gnulib module mbsrchr
+
+libbison_a_SOURCES += mbsrchr.c
+
+## end   gnulib module mbsrchr
+
+## begin gnulib module mbswidth
+
+libbison_a_SOURCES += mbswidth.h mbswidth.c
+
+## end   gnulib module mbswidth
+
+## begin gnulib module mbuiter
+
+libbison_a_SOURCES += mbuiter.h mbuiter.c
+
+## end   gnulib module mbuiter
+
+## begin gnulib module memchr
+
+
+EXTRA_DIST += memchr.c memchr.valgrind
+
+EXTRA_libbison_a_SOURCES += memchr.c
+
+## end   gnulib module memchr
+
+## begin gnulib module msvc-inval
+
+
+EXTRA_DIST += msvc-inval.c msvc-inval.h
+
+EXTRA_libbison_a_SOURCES += msvc-inval.c
+
+## end   gnulib module msvc-inval
+
+## begin gnulib module msvc-nothrow
+
+
+EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h
+
+EXTRA_libbison_a_SOURCES += msvc-nothrow.c
+
+## end   gnulib module msvc-nothrow
+
+## begin gnulib module obstack
+
+
+EXTRA_DIST += obstack.c obstack.h
+
+EXTRA_libbison_a_SOURCES += obstack.c
+
+## end   gnulib module obstack
+
+## begin gnulib module obstack-printf
+
+
+EXTRA_DIST += obstack_printf.c
+
+EXTRA_libbison_a_SOURCES += obstack_printf.c
+
+## end   gnulib module obstack-printf
+
+## begin gnulib module open
+
+
+EXTRA_DIST += open.c
+
+EXTRA_libbison_a_SOURCES += open.c
+
+## end   gnulib module open
+
+## begin gnulib module pathmax
+
+
+EXTRA_DIST += pathmax.h
+
+## end   gnulib module pathmax
+
+## begin gnulib module perror
+
+
+EXTRA_DIST += perror.c
+
+EXTRA_libbison_a_SOURCES += perror.c
+
+## end   gnulib module perror
+
+## begin gnulib module pipe2
+
+libbison_a_SOURCES += pipe2.c
+
+## end   gnulib module pipe2
+
+## begin gnulib module pipe2-safer
+
+libbison_a_SOURCES += pipe2-safer.c
+
+## end   gnulib module pipe2-safer
+
+## begin gnulib module posix_spawn-internal
+
+
+EXTRA_DIST += spawn_int.h spawni.c
+
+EXTRA_libbison_a_SOURCES += spawni.c
+
+## end   gnulib module posix_spawn-internal
+
+## begin gnulib module posix_spawn_file_actions_addclose
+
+
+EXTRA_DIST += spawn_faction_addclose.c spawn_int.h
+
+EXTRA_libbison_a_SOURCES += spawn_faction_addclose.c
+
+## end   gnulib module posix_spawn_file_actions_addclose
+
+## begin gnulib module posix_spawn_file_actions_adddup2
+
+
+EXTRA_DIST += spawn_faction_adddup2.c spawn_int.h
+
+EXTRA_libbison_a_SOURCES += spawn_faction_adddup2.c
+
+## end   gnulib module posix_spawn_file_actions_adddup2
+
+## begin gnulib module posix_spawn_file_actions_addopen
+
+
+EXTRA_DIST += spawn_faction_addopen.c spawn_int.h
+
+EXTRA_libbison_a_SOURCES += spawn_faction_addopen.c
+
+## end   gnulib module posix_spawn_file_actions_addopen
+
+## begin gnulib module posix_spawn_file_actions_destroy
+
+
+EXTRA_DIST += spawn_faction_destroy.c
+
+EXTRA_libbison_a_SOURCES += spawn_faction_destroy.c
+
+## end   gnulib module posix_spawn_file_actions_destroy
+
+## begin gnulib module posix_spawn_file_actions_init
+
+
+EXTRA_DIST += spawn_faction_init.c spawn_int.h
+
+EXTRA_libbison_a_SOURCES += spawn_faction_init.c
+
+## end   gnulib module posix_spawn_file_actions_init
+
+## begin gnulib module posix_spawnattr_destroy
+
+
+EXTRA_DIST += spawnattr_destroy.c
+
+EXTRA_libbison_a_SOURCES += spawnattr_destroy.c
+
+## end   gnulib module posix_spawnattr_destroy
+
+## begin gnulib module posix_spawnattr_init
+
+
+EXTRA_DIST += spawnattr_init.c
+
+EXTRA_libbison_a_SOURCES += spawnattr_init.c
+
+## end   gnulib module posix_spawnattr_init
+
+## begin gnulib module posix_spawnattr_setflags
+
+
+EXTRA_DIST += spawnattr_setflags.c
+
+EXTRA_libbison_a_SOURCES += spawnattr_setflags.c
+
+## end   gnulib module posix_spawnattr_setflags
+
+## begin gnulib module posix_spawnattr_setsigmask
+
+
+EXTRA_DIST += spawnattr_setsigmask.c
+
+EXTRA_libbison_a_SOURCES += spawnattr_setsigmask.c
+
+## end   gnulib module posix_spawnattr_setsigmask
+
+## begin gnulib module posix_spawnp
+
+
+EXTRA_DIST += spawnp.c
+
+EXTRA_libbison_a_SOURCES += spawnp.c
+
+## end   gnulib module posix_spawnp
+
+## begin gnulib module printf-frexp
+
+libbison_a_SOURCES += printf-frexp.c
+
+EXTRA_DIST += printf-frexp.h
+
+## end   gnulib module printf-frexp
+
+## begin gnulib module printf-frexpl
+
+libbison_a_SOURCES += printf-frexpl.c
+
+EXTRA_DIST += printf-frexp.c printf-frexpl.h
+
+EXTRA_libbison_a_SOURCES += printf-frexp.c
+
+## end   gnulib module printf-frexpl
+
+## begin gnulib module printf-posix
+
+
+EXTRA_DIST += printf.c
+
+EXTRA_libbison_a_SOURCES += printf.c
+
+## end   gnulib module printf-posix
+
+## begin gnulib module progname
+
+libbison_a_SOURCES += progname.h progname.c
+
+## end   gnulib module progname
+
+## begin gnulib module quote
+
+
+EXTRA_DIST += quote.h
+
+## end   gnulib module quote
+
+## begin gnulib module quotearg
+
+libbison_a_SOURCES += quotearg.c
+
+EXTRA_DIST += quote.h quotearg.h
+
+## end   gnulib module quotearg
+
+## begin gnulib module raise
+
+
+EXTRA_DIST += raise.c
+
+EXTRA_libbison_a_SOURCES += raise.c
+
+## end   gnulib module raise
+
+## begin gnulib module rawmemchr
+
+
+EXTRA_DIST += rawmemchr.c rawmemchr.valgrind
+
+EXTRA_libbison_a_SOURCES += rawmemchr.c
+
+## end   gnulib module rawmemchr
+
+## begin gnulib module readme-release
+
+
+EXTRA_DIST += $(top_srcdir)/README-release
+
+## end   gnulib module readme-release
+
+## begin gnulib module realloc-posix
+
+
+EXTRA_DIST += realloc.c
+
+EXTRA_libbison_a_SOURCES += realloc.c
+
+## end   gnulib module realloc-posix
+
+## begin gnulib module sched
+
+BUILT_SOURCES += $(SCHED_H)
+
+# We need the following in order to create a replacement for <sched.h> when
+# the system doesn't have one.
+if GL_GENERATE_SCHED_H
+sched.h: sched.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \
+	      -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \
+	      < $(srcdir)/sched.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+sched.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += sched.h sched.h-t
+
+EXTRA_DIST += sched.in.h
+
+## end   gnulib module sched
+
+## begin gnulib module sigaction
+
+libbison_a_SOURCES += sig-handler.c
+
+EXTRA_DIST += sig-handler.h sigaction.c
+
+EXTRA_libbison_a_SOURCES += sigaction.c
+
+## end   gnulib module sigaction
+
+## begin gnulib module signal-h
+
+BUILT_SOURCES += signal.h
+
+# We need the following in order to create <signal.h> when the system
+# doesn't have a complete one.
+signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \
+	      -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''GNULIB_RAISE''@|$(GNULIB_RAISE)|g' \
+	      -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \
+	      -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \
+	      -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \
+	      -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \
+	      -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \
+	      -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \
+	      -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \
+	      -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \
+	      -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \
+	      -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \
+	      -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/signal.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += signal.h signal.h-t
+
+EXTRA_DIST += signal.in.h
+
+## end   gnulib module signal-h
+
+## begin gnulib module signbit
+
+
+EXTRA_DIST += float+.h signbitd.c signbitf.c signbitl.c
+
+EXTRA_libbison_a_SOURCES += signbitd.c signbitf.c signbitl.c
+
+## end   gnulib module signbit
+
+## begin gnulib module sigprocmask
+
+
+EXTRA_DIST += sigprocmask.c
+
+EXTRA_libbison_a_SOURCES += sigprocmask.c
+
+## end   gnulib module sigprocmask
+
+## begin gnulib module size_max
+
+libbison_a_SOURCES += size_max.h
+
+## end   gnulib module size_max
+
+## begin gnulib module snippet/_Noreturn
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all Makefile.am that
+# need it. This is ensured by the applicability 'all' defined above.
+
+_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h
+
+## end   gnulib module snippet/_Noreturn
+
+## begin gnulib module snippet/arg-nonnull
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += arg-nonnull.h
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
+# off.
+arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/GL_ARG_NONNULL/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
+
+ARG_NONNULL_H=arg-nonnull.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h
+
+## end   gnulib module snippet/arg-nonnull
+
+## begin gnulib module snippet/c++defs
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += c++defs.h
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/_GL_CXXDEFS/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/c++defs.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += c++defs.h c++defs.h-t
+
+CXXDEFS_H=c++defs.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h
+
+## end   gnulib module snippet/c++defs
+
+## begin gnulib module snippet/warn-on-use
+
+BUILT_SOURCES += warn-on-use.h
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
+# off.
+warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/^.ifndef/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/warn-on-use.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
+
+WARN_ON_USE_H=warn-on-use.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h
+
+## end   gnulib module snippet/warn-on-use
+
+## begin gnulib module snprintf
+
+
+EXTRA_DIST += snprintf.c
+
+EXTRA_libbison_a_SOURCES += snprintf.c
+
+## end   gnulib module snprintf
+
+## begin gnulib module spawn
+
+BUILT_SOURCES += spawn.h
+
+# We need the following in order to create a replacement for <spawn.h> when
+# the system doesn't have one.
+spawn.h: spawn.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN''@/$(GNULIB_POSIX_SPAWN)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNP''@/$(GNULIB_POSIX_SPAWNP)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_INIT''@/$(GNULIB_POSIX_SPAWNATTR_INIT)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)/g' \
+	      -e 's/@''GNULIB_POSIX_SPAWNATTR_DESTROY''@/$(GNULIB_POSIX_SPAWNATTR_DESTROY)/g' \
+	      -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \
+	      -e 's|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \
+	      -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/spawn.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += spawn.h spawn.h-t
+
+EXTRA_DIST += spawn.in.h
+
+## end   gnulib module spawn
+
+## begin gnulib module spawn-pipe
+
+libbison_a_SOURCES += spawn-pipe.h spawn-pipe.c w32spawn.h
+
+## end   gnulib module spawn-pipe
+
+## begin gnulib module sprintf-posix
+
+
+EXTRA_DIST += sprintf.c
+
+EXTRA_libbison_a_SOURCES += sprintf.c
+
+## end   gnulib module sprintf-posix
+
+## begin gnulib module stat
+
+
+EXTRA_DIST += stat.c
+
+EXTRA_libbison_a_SOURCES += stat.c
+
+## end   gnulib module stat
+
+## begin gnulib module stdbool
 
 BUILT_SOURCES += $(STDBOOL_H)
-EXTRA_DIST += stdbool_.h
 
 # We need the following in order to create <stdbool.h> when the system
 # doesn't have one that works.
-stdbool.h: stdbool_.h
-	sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool_.h > $@-t
+if GL_GENERATE_STDBOOL_H
+stdbool.h: stdbool.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+	} > $@-t && \
 	mv $@-t $@
+else
+stdbool.h: $(top_builddir)/config.status
+	rm -f $@
+endif
 MOSTLYCLEANFILES += stdbool.h stdbool.h-t
 
+EXTRA_DIST += stdbool.in.h
 
-lib_SOURCES += stpcpy.h
+## end   gnulib module stdbool
+
+## begin gnulib module stddef
+
+BUILT_SOURCES += $(STDDEF_H)
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDDEF_H
+stddef.h: stddef.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+	      < $(srcdir)/stddef.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stddef.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stddef.h stddef.h-t
+
+EXTRA_DIST += stddef.in.h
+
+## end   gnulib module stddef
+
+## begin gnulib module stdint
+
+BUILT_SOURCES += $(STDINT_H)
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDINT_H
+stdint.h: stdint.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+	      < $(srcdir)/stdint.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stdint.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stdint.h stdint.h-t
+
+EXTRA_DIST += stdint.in.h
+
+## end   gnulib module stdint
+
+## begin gnulib module stdio
+
+BUILT_SOURCES += stdio.h
+libbison_a_SOURCES += stdio.c
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+	      -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \
+	      -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \
+	      -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \
+	      -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \
+	      -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \
+	      -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \
+	      -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \
+	      -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \
+	      -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \
+	      -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \
+	      -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \
+	      -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \
+	      -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \
+	      -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \
+	      -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \
+	      -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \
+	      -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \
+	      -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \
+	      -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \
+	      -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \
+	      -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \
+	      -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \
+	      -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \
+	      -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \
+	      -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \
+	      -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \
+	      -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \
+	      -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \
+	      -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \
+	      -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \
+	      -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \
+	      -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \
+	      -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \
+	      -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \
+	      -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \
+	      -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \
+	      -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \
+	      -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \
+	      -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \
+	      -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \
+	      -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \
+	      -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \
+	      -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \
+	      -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \
+	      -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \
+	      < $(srcdir)/stdio.in.h | \
+	  sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+	      -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \
+	      -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \
+	      -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+	      -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+	      -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+	      -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+	      -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+	      -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+	      -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \
+	      -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \
+	      -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \
+	      -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \
+	      -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+	      -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+	      -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+	      -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+	      -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+	      -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
+	      -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+	      -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+	      -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+	      -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+	      -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+	      -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+	      -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+	      -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+	      -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+	      -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+	      -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+	      -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+	      -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+	      -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+	      -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+	      -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+	      -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+	      -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+	      -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+	      -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+	      -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \
+	      -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+	      -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \
+	      -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+	      -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+	      -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+	      -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+	      -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+	      -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+	      -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += stdio.h stdio.h-t
+
+EXTRA_DIST += stdio.in.h
+
+## end   gnulib module stdio
+
+## begin gnulib module stdlib
+
+BUILT_SOURCES += stdlib.h
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
+  $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+	      -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \
+	      -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \
+	      -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \
+	      -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \
+	      -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \
+	      -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \
+	      -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \
+	      -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \
+	      -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \
+	      -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \
+	      -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \
+	      -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \
+	      -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \
+	      -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \
+	      -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \
+	      -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \
+	      -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \
+	      -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
+	      -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
+	      -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
+	      -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \
+	      -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \
+	      -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \
+	      -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \
+	      -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \
+	      -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \
+	      -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \
+	      -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \
+	      < $(srcdir)/stdlib.in.h | \
+	  sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
+	      -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+	      -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+	      -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+	      -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+	      -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \
+	      -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+	      -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+	      -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+	      -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \
+	      -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+	      -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \
+	      -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \
+	      -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \
+	      -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \
+	      -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+	      -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+	      -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+	      -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+	      -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \
+	      -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+	      -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+	      -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+	      -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+	      -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+	      -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
+	      -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \
+	      -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \
+	      -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+	      -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \
+	      -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
+	      -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+	      -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \
+	      -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
+	      -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+	      -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
+	      -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \
+	      -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+	      -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+	      -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+	      -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+	      -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _Noreturn/r $(_NORETURN_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += stdlib.h stdlib.h-t
+
+EXTRA_DIST += stdlib.in.h
+
+## end   gnulib module stdlib
+
+## begin gnulib module stpcpy
 
 
+EXTRA_DIST += stpcpy.c
+
+EXTRA_libbison_a_SOURCES += stpcpy.c
+
+## end   gnulib module stpcpy
+
+## begin gnulib module strchrnul
 
 
+EXTRA_DIST += strchrnul.c strchrnul.valgrind
+
+EXTRA_libbison_a_SOURCES += strchrnul.c
+
+## end   gnulib module strchrnul
+
+## begin gnulib module strdup-posix
 
 
+EXTRA_DIST += strdup.c
+
+EXTRA_libbison_a_SOURCES += strdup.c
+
+## end   gnulib module strdup-posix
+
+## begin gnulib module streq
 
 
-BUILT_SOURCES += $(UNISTD_H)
+EXTRA_DIST += streq.h
+
+## end   gnulib module streq
+
+## begin gnulib module strerror
+
+
+EXTRA_DIST += strerror.c
+
+EXTRA_libbison_a_SOURCES += strerror.c
+
+## end   gnulib module strerror
+
+## begin gnulib module strerror-override
+
+
+EXTRA_DIST += strerror-override.c strerror-override.h
+
+EXTRA_libbison_a_SOURCES += strerror-override.c
+
+## end   gnulib module strerror-override
+
+## begin gnulib module strerror_r-posix
+
+
+EXTRA_DIST += strerror_r.c
+
+EXTRA_libbison_a_SOURCES += strerror_r.c
+
+## end   gnulib module strerror_r-posix
+
+## begin gnulib module string
+
+BUILT_SOURCES += string.h
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+	      -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+	      -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+	      -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+	      -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+	      -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+	      -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+	      -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+	      -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+	      -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+	      -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+	      -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+	      -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+	      -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+	      -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+	      -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+	      -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+	      -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+	      -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+	      -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+	      -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+	      -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+	      -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+	      -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+	      -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+	      -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+	      -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+	      -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+	      -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+	      -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+	      -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+	      -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+	      -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+	      -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+	      -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
+	      < $(srcdir)/string.in.h | \
+	  sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+	      -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+	      -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+	      -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+	      -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+	      -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+	      -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+	      -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+	      -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+	      -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+	      -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+	      -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+	      -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+	      -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+	      -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+	      -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+	      -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+	      -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+	      -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+	      -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+	      -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+	      -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+	      -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+	      -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+	      -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+	      -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+	      -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+	      -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	      < $(srcdir)/string.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += string.h string.h-t
+
+EXTRA_DIST += string.in.h
+
+## end   gnulib module string
+
+## begin gnulib module strndup
+
+
+EXTRA_DIST += strndup.c
+
+EXTRA_libbison_a_SOURCES += strndup.c
+
+## end   gnulib module strndup
+
+## begin gnulib module strnlen
+
+
+EXTRA_DIST += strnlen.c
+
+EXTRA_libbison_a_SOURCES += strnlen.c
+
+## end   gnulib module strnlen
+
+## begin gnulib module strnlen1
+
+libbison_a_SOURCES += strnlen1.h strnlen1.c
+
+## end   gnulib module strnlen1
+
+## begin gnulib module strtoul
+
+
+EXTRA_DIST += strtol.c strtoul.c
+
+EXTRA_libbison_a_SOURCES += strtol.c strtoul.c
+
+## end   gnulib module strtoul
+
+## begin gnulib module strverscmp
+
+
+EXTRA_DIST += strverscmp.c
+
+EXTRA_libbison_a_SOURCES += strverscmp.c
+
+## end   gnulib module strverscmp
+
+## begin gnulib module sys_stat
+
+BUILT_SOURCES += sys/stat.h
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
+	      -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
+	      -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
+	      -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
+	      -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \
+	      -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \
+	      -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \
+	      -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \
+	      -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \
+	      -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \
+	      -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \
+	      -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
+	      -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
+	      -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
+	      -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+	      -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+	      -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+	      -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
+	      -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+	      -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+	      -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
+	      -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+	      -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
+	      -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
+	      -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
+	      -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
+	      -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
+	      -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
+	      -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
+	      -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+	      -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+	      -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
+	      -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
+	      -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_stat.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_stat.in.h
+
+## end   gnulib module sys_stat
+
+## begin gnulib module sys_types
+
+BUILT_SOURCES += sys/types.h
+
+# We need the following in order to create <sys/types.h> when the system
+# doesn't have one that works with the given compiler.
+sys/types.h: sys_types.in.h $(top_builddir)/config.status
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+	      < $(srcdir)/sys_types.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += sys/types.h sys/types.h-t
+
+EXTRA_DIST += sys_types.in.h
+
+## end   gnulib module sys_types
+
+## begin gnulib module sys_wait
+
+BUILT_SOURCES += sys/wait.h
+
+# We need the following in order to create <sys/wait.h> when the system
+# has one that is incomplete.
+sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \
+	      -e 's/@''GNULIB_WAITPID''@/$(GNULIB_WAITPID)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_wait.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_wait.in.h
+
+## end   gnulib module sys_wait
+
+## begin gnulib module threadlib
+
+libbison_a_SOURCES += glthread/threadlib.c
+
+EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+
+## end   gnulib module threadlib
+
+## begin gnulib module time
+
+BUILT_SOURCES += time.h
+
+# We need the following in order to create <time.h> when the system
+# doesn't have one that works with the given compiler.
+time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
+	      -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
+	      -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
+	      -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
+	      -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
+	      -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
+	      -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
+	      -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
+	      -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
+	      -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
+	      -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
+	      -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
+	      -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
+	      -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+	      -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/time.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += time.h time.h-t
+
+EXTRA_DIST += time.in.h
+
+## end   gnulib module time
+
+## begin gnulib module unistd
+
+BUILT_SOURCES += unistd.h
+libbison_a_SOURCES += unistd.c
 
 # We need the following in order to create an empty placeholder for
 # <unistd.h> when the system doesn't have one.
-unistd.h:
-	echo '/* Empty placeholder for $@.  */' >$@
-MOSTLYCLEANFILES += unistd.h
+unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+	      -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \
+	      -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
+	      -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
+	      -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \
+	      -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
+	      -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
+	      -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \
+	      -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \
+	      -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \
+	      -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \
+	      -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \
+	      -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \
+	      -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \
+	      -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \
+	      -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \
+	      -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \
+	      -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \
+	      -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \
+	      -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \
+	      -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \
+	      -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \
+	      -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \
+	      -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
+	      -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
+	      -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \
+	      -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \
+	      -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \
+	      -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \
+	      -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \
+	      -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \
+	      -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \
+	      -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \
+	      -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \
+	      -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \
+	      -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \
+	      -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \
+	      -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \
+	      -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \
+	      -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
+	      -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
+	      -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
+	      -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \
+	      -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \
+	      -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \
+	      -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \
+	      < $(srcdir)/unistd.in.h | \
+	  sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+	      -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+	      -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+	      -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+	      -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+	      -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
+	      -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+	      -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \
+	      -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+	      -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+	      -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+	      -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+	      -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+	      -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
+	      -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+	      -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
+	      -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+	      -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+	      -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+	      -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \
+	      -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+	      -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+	      -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
+	      -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+	      -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+	      -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \
+	      -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+	      -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+	      -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+	      -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+	      -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+	      -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+	      -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \
+	      -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \
+	      -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \
+	      -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+	      -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
+	      -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
+	      -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \
+	      -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \
+	      -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+	      -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+	      -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+	      -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+	      -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+	      -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+	      -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \
+	      -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+	      -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \
+	      -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \
+	      -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+	      -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+	      -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
+	      -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+	      -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+	      -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+	      -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+	      -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+	      -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
+	      -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
+	      -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+	      -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+	      -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+	      -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+	      -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
+	      -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+	      -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+	      -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+	      -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+	      -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+	      -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += unistd.h unistd.h-t
+
+EXTRA_DIST += unistd.in.h
+
+## end   gnulib module unistd
+
+## begin gnulib module unistd-safer
+
+libbison_a_SOURCES += dup-safer.c fd-safer.c pipe-safer.c
+
+EXTRA_DIST += unistd--.h unistd-safer.h
+
+## end   gnulib module unistd-safer
+
+## begin gnulib module unitypes
+
+BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H)
+
+unitypes.h: unitypes.in.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(srcdir)/unitypes.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+MOSTLYCLEANFILES += unitypes.h unitypes.h-t
+
+EXTRA_DIST += unitypes.in.h
+
+## end   gnulib module unitypes
+
+## begin gnulib module uniwidth/base
+
+BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H)
+
+uniwidth.h: uniwidth.in.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(srcdir)/uniwidth.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+MOSTLYCLEANFILES += uniwidth.h uniwidth.h-t
+
+EXTRA_DIST += localcharset.h uniwidth.in.h
+
+## end   gnulib module uniwidth/base
+
+## begin gnulib module uniwidth/width
+
+if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH
+libbison_a_SOURCES += uniwidth/width.c
+endif
+
+EXTRA_DIST += uniwidth/cjk.h
+
+## end   gnulib module uniwidth/width
+
+## begin gnulib module unlocked-io
 
 
+EXTRA_DIST += unlocked-io.h
 
-lib_SOURCES += verify.h
+## end   gnulib module unlocked-io
+
+## begin gnulib module unsetenv
 
 
-lib_SOURCES += xalloc-die.c
+EXTRA_DIST += unsetenv.c
 
-lib_SOURCES += xstrndup.h xstrndup.c
+EXTRA_libbison_a_SOURCES += unsetenv.c
 
+## end   gnulib module unsetenv
+
+## begin gnulib module update-copyright
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/update-copyright
+
+## end   gnulib module update-copyright
+
+## begin gnulib module useless-if-before-free
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free
+
+## end   gnulib module useless-if-before-free
+
+## begin gnulib module vasnprintf
+
+
+EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h
+
+EXTRA_libbison_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c
+
+## end   gnulib module vasnprintf
+
+## begin gnulib module vc-list-files
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files
+
+## end   gnulib module vc-list-files
+
+## begin gnulib module verify
+
+
+EXTRA_DIST += verify.h
+
+## end   gnulib module verify
+
+## begin gnulib module vfprintf-posix
+
+
+EXTRA_DIST += vfprintf.c
+
+EXTRA_libbison_a_SOURCES += vfprintf.c
+
+## end   gnulib module vfprintf-posix
+
+## begin gnulib module vsnprintf
+
+
+EXTRA_DIST += vsnprintf.c
+
+EXTRA_libbison_a_SOURCES += vsnprintf.c
+
+## end   gnulib module vsnprintf
+
+## begin gnulib module vsprintf-posix
+
+
+EXTRA_DIST += vsprintf.c
+
+EXTRA_libbison_a_SOURCES += vsprintf.c
+
+## end   gnulib module vsprintf-posix
+
+## begin gnulib module wait-process
+
+libbison_a_SOURCES += wait-process.h wait-process.c
+
+## end   gnulib module wait-process
+
+## begin gnulib module waitpid
+
+
+EXTRA_DIST += waitpid.c
+
+EXTRA_libbison_a_SOURCES += waitpid.c
+
+## end   gnulib module waitpid
+
+## begin gnulib module wchar
+
+BUILT_SOURCES += wchar.h
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+	      -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
+	      -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
+	      -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
+	      -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
+	      -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
+	      -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
+	      -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
+	      -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
+	      -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
+	      -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
+	      -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
+	      -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
+	      -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
+	      -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
+	      -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
+	      -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
+	      -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
+	      -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
+	      -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
+	      -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
+	      -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
+	      -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
+	      -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
+	      -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
+	      -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
+	      -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
+	      -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
+	      -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
+	      -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
+	      -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
+	      -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
+	      -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
+	      -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
+	      -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
+	      -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
+	      < $(srcdir)/wchar.in.h | \
+	  sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+	      -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+	      -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+	      -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+	      -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+	      -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+	      -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+	      -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+	      -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+	      -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+	      -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+	      -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+	      -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+	      -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+	      -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+	      -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+	      -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+	      -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+	      -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+	      -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+	      -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+	      -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+	      -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+	      -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+	      -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+	      -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+	      -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+	      -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+	      -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+	      -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += wchar.h wchar.h-t
+
+EXTRA_DIST += wchar.in.h
+
+## end   gnulib module wchar
+
+## begin gnulib module wctype-h
+
+BUILT_SOURCES += wctype.h
+libbison_a_SOURCES += wctype-h.c
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+	      -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
+	      -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
+	      -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
+	      -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
+	      -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+	      -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+	      -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+	      -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+	      -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+	      -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+	      -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+	      -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/wctype.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += wctype.h wctype.h-t
+
+EXTRA_DIST += wctype.in.h
+
+## end   gnulib module wctype-h
+
+## begin gnulib module wcwidth
+
+
+EXTRA_DIST += wcwidth.c
+
+EXTRA_libbison_a_SOURCES += wcwidth.c
+
+## end   gnulib module wcwidth
+
+## begin gnulib module xalloc
+
+libbison_a_SOURCES += xmalloc.c
+
+EXTRA_DIST += xalloc.h
+
+## end   gnulib module xalloc
+
+## begin gnulib module xalloc-die
+
+libbison_a_SOURCES += xalloc-die.c
+
+## end   gnulib module xalloc-die
+
+## begin gnulib module xalloc-oversized
+
+
+EXTRA_DIST += xalloc-oversized.h
+
+## end   gnulib module xalloc-oversized
+
+## begin gnulib module xmemdup0
+
+
+EXTRA_DIST += xmemdup0.c xmemdup0.h
+
+EXTRA_libbison_a_SOURCES += xmemdup0.c
+
+## end   gnulib module xmemdup0
+
+## begin gnulib module xsize
+
+libbison_a_SOURCES += xsize.h xsize.c
+
+## end   gnulib module xsize
+
+## begin gnulib module xstrndup
+
+libbison_a_SOURCES += xstrndup.h xstrndup.c
+
+## end   gnulib module xstrndup
+
+
+mostlyclean-local: mostlyclean-generic
+	@for dir in '' $(MOSTLYCLEANDIRS); do \
+	  if test -n "$$dir" && test -d $$dir; then \
+	    echo "rmdir $$dir"; rmdir $$dir; \
+	  fi; \
+	done; \
+	:
diff --git a/lib/hard-locale.c b/lib/hard-locale.c
deleted file mode 100644
index 98530fc..0000000
--- a/lib/hard-locale.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* hard-locale.c -- Determine whether a locale is hard.
-
-   Copyright (C) 1997, 1998, 1999, 2002, 2003, 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "hard-locale.h"
-
-#include <locale.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "strdup.h"
-
-#ifdef __GLIBC__
-# define GLIBC_VERSION __GLIBC__
-#else
-# define GLIBC_VERSION 0
-#endif
-
-/* Return true if the current CATEGORY locale is hard, i.e. if you
-   can't get away with assuming traditional C or POSIX behavior.  */
-bool
-hard_locale (int category)
-{
-  bool hard = true;
-  char const *p = setlocale (category, NULL);
-
-  if (p)
-    {
-      if (2 <= GLIBC_VERSION)
-	{
-	  if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0)
-	    hard = false;
-	}
-      else
-	{
-	  char *locale = strdup (p);
-	  if (locale)
-	    {
-	      /* Temporarily set the locale to the "C" and "POSIX" locales
-		 to find their names, so that we can determine whether one
-		 or the other is the caller's locale.  */
-	      if (((p = setlocale (category, "C"))
-		   && strcmp (p, locale) == 0)
-		  || ((p = setlocale (category, "POSIX"))
-		      && strcmp (p, locale) == 0))
-		hard = false;
-
-	      /* Restore the caller's locale.  */
-	      setlocale (category, locale);
-	      free (locale);
-	    }
-	}
-    }
-
-  return hard;
-}
diff --git a/lib/hard-locale.h b/lib/hard-locale.h
deleted file mode 100644
index c5cedc0..0000000
--- a/lib/hard-locale.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Determine whether a locale is hard.
-
-   Copyright (C) 1999, 2003, 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef HARD_LOCALE_H_
-# define HARD_LOCALE_H_ 1
-
-# include <stdbool.h>
-
-bool hard_locale (int);
-
-#endif /* HARD_LOCALE_H_ */
diff --git a/lib/hash.c b/lib/hash.c
index f85bd51..1933057 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -1,14 +1,13 @@
 /* hash - hashing table processing.
 
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free
-   Software Foundation, Inc.
+   Copyright (C) 1998-2004, 2006-2007, 2009-2012 Free Software Foundation, Inc.
 
    Written by Jim Meyering, 1992.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -16,22 +15,21 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* A generic hash table package.  */
 
 /* Define USE_OBSTACK to 1 if you want the allocator to use obstacks instead
    of malloc.  If you change USE_OBSTACK, you have to recompile!  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "hash.h"
-#include "xalloc.h"
 
-#include <limits.h>
+#include "bitrotate.h"
+#include "xalloc-oversized.h"
+
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -45,9 +43,11 @@
 # endif
 #endif
 
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
+struct hash_entry
+  {
+    void *data;
+    struct hash_entry *next;
+  };
 
 struct hash_table
   {
@@ -60,10 +60,10 @@
     size_t n_buckets_used;
     size_t n_entries;
 
-    /* Tuning arguments, kept in a physicaly separate structure.  */
+    /* Tuning arguments, kept in a physically separate structure.  */
     const Hash_tuning *tuning;
 
-    /* Three functions are given to `hash_initialize', see the documentation
+    /* Three functions are given to 'hash_initialize', see the documentation
        block for this function.  In a word, HASHER randomizes a user entry
        into a number up from 0 up to some maximum minus 1; COMPARATOR returns
        true if two user entries compare equally; and DATA_FREER is the cleanup
@@ -84,26 +84,26 @@
   };
 
 /* A hash table contains many internal entries, each holding a pointer to
-   some user provided data (also called a user entry).  An entry indistinctly
+   some user-provided data (also called a user entry).  An entry indistinctly
    refers to both the internal entry and its associated user entry.  A user
    entry contents may be hashed by a randomization function (the hashing
-   function, or just `hasher' for short) into a number (or `slot') between 0
+   function, or just "hasher" for short) into a number (or "slot") between 0
    and the current table size.  At each slot position in the hash table,
    starts a linked chain of entries for which the user data all hash to this
    slot.  A bucket is the collection of all entries hashing to the same slot.
 
-   A good `hasher' function will distribute entries rather evenly in buckets.
+   A good "hasher" function will distribute entries rather evenly in buckets.
    In the ideal case, the length of each bucket is roughly the number of
    entries divided by the table size.  Finding the slot for a data is usually
-   done in constant time by the `hasher', and the later finding of a precise
+   done in constant time by the "hasher", and the later finding of a precise
    entry is linear in time with the size of the bucket.  Consequently, a
    larger hash table size (that is, a larger number of buckets) is prone to
-   yielding shorter chains, *given* the `hasher' function behaves properly.
+   yielding shorter chains, *given* the "hasher" function behaves properly.
 
    Long buckets slow down the lookup algorithm.  One might use big hash table
    sizes in hope to reduce the average length of buckets, but this might
    become inordinate, as unused slots in the hash table take some space.  The
-   best bet is to make sure you are using a good `hasher' function (beware
+   best bet is to make sure you are using a good "hasher" function (beware
    that those are not that easy to write! :-), and to use a table size
    larger than the actual number of entries.  */
 
@@ -113,8 +113,8 @@
    1.0).  The growth threshold defaults to 0.8, and the growth factor
    defaults to 1.414, meaning that the table will have doubled its size
    every second time 80% of the buckets get used.  */
-#define DEFAULT_GROWTH_THRESHOLD 0.8
-#define DEFAULT_GROWTH_FACTOR 1.414
+#define DEFAULT_GROWTH_THRESHOLD 0.8f
+#define DEFAULT_GROWTH_FACTOR 1.414f
 
 /* If a deletion empties a bucket and causes the ratio of used buckets to
    table size to become smaller than the shrink threshold (a number between
@@ -122,8 +122,8 @@
    number greater than the shrink threshold but smaller than 1.0).  The shrink
    threshold and factor default to 0.0 and 1.0, meaning that the table never
    shrinks.  */
-#define DEFAULT_SHRINK_THRESHOLD 0.0
-#define DEFAULT_SHRINK_FACTOR 1.0
+#define DEFAULT_SHRINK_THRESHOLD 0.0f
+#define DEFAULT_SHRINK_FACTOR 1.0f
 
 /* Use this to initialize or reset a TUNING structure to
    some sensible values. */
@@ -179,16 +179,16 @@
   for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
     {
       if (bucket->data)
-	{
-	  struct hash_entry const *cursor = bucket;
-	  size_t bucket_length = 1;
+        {
+          struct hash_entry const *cursor = bucket;
+          size_t bucket_length = 1;
 
-	  while (cursor = cursor->next, cursor)
-	    bucket_length++;
+          while (cursor = cursor->next, cursor)
+            bucket_length++;
 
-	  if (bucket_length > max_bucket_length)
-	    max_bucket_length = bucket_length;
-	}
+          if (bucket_length > max_bucket_length)
+            max_bucket_length = bucket_length;
+        }
     }
 
   return max_bucket_length;
@@ -207,17 +207,17 @@
   for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
     {
       if (bucket->data)
-	{
-	  struct hash_entry const *cursor = bucket;
+        {
+          struct hash_entry const *cursor = bucket;
 
-	  /* Count bucket head.  */
-	  n_buckets_used++;
-	  n_entries++;
+          /* Count bucket head.  */
+          n_buckets_used++;
+          n_entries++;
 
-	  /* Count bucket overflow.  */
-	  while (cursor = cursor->next, cursor)
-	    n_entries++;
-	}
+          /* Count bucket overflow.  */
+          while (cursor = cursor->next, cursor)
+            n_entries++;
+        }
     }
 
   if (n_buckets_used == table->n_buckets_used && n_entries == table->n_entries)
@@ -237,10 +237,21 @@
   fprintf (stream, "# entries:         %lu\n", (unsigned long int) n_entries);
   fprintf (stream, "# buckets:         %lu\n", (unsigned long int) n_buckets);
   fprintf (stream, "# buckets used:    %lu (%.2f%%)\n",
-	   (unsigned long int) n_buckets_used,
-	   (100.0 * n_buckets_used) / n_buckets);
+           (unsigned long int) n_buckets_used,
+           (100.0 * n_buckets_used) / n_buckets);
   fprintf (stream, "max bucket length: %lu\n",
-	   (unsigned long int) max_bucket_length);
+           (unsigned long int) max_bucket_length);
+}
+
+/* Hash KEY and return a pointer to the selected bucket.
+   If TABLE->hasher misbehaves, abort.  */
+static struct hash_entry *
+safe_hasher (const Hash_table *table, const void *key)
+{
+  size_t n = table->hasher (key, table->n_buckets);
+  if (! (n < table->n_buckets))
+    abort ();
+  return table->bucket + n;
 }
 
 /* If ENTRY matches an entry already in the hash table, return the
@@ -249,18 +260,14 @@
 void *
 hash_lookup (const Hash_table *table, const void *entry)
 {
-  struct hash_entry const *bucket
-    = table->bucket + table->hasher (entry, table->n_buckets);
+  struct hash_entry const *bucket = safe_hasher (table, entry);
   struct hash_entry const *cursor;
 
-  if (! (bucket < table->bucket_limit))
-    abort ();
-
   if (bucket->data == NULL)
     return NULL;
 
   for (cursor = bucket; cursor; cursor = cursor->next)
-    if (table->comparator (entry, cursor->data))
+    if (entry == cursor->data || table->comparator (entry, cursor->data))
       return cursor->data;
 
   return NULL;
@@ -271,7 +278,9 @@
 /* The functions in this page traverse the hash table and process the
    contained entries.  For the traversal to work properly, the hash table
    should not be resized nor modified while any particular entry is being
-   processed.  In particular, entries should not be added or removed.  */
+   processed.  In particular, entries should not be added, and an entry
+   may be removed only if there is no shrink threshold and the entry being
+   removed has already been passed to hash_get_next.  */
 
 /* Return the first data in the table, or NULL if the table is empty.  */
 
@@ -291,23 +300,24 @@
 }
 
 /* Return the user data for the entry following ENTRY, where ENTRY has been
-   returned by a previous call to either `hash_get_first' or `hash_get_next'.
+   returned by a previous call to either 'hash_get_first' or 'hash_get_next'.
    Return NULL if there are no more entries.  */
 
 void *
 hash_get_next (const Hash_table *table, const void *entry)
 {
-  struct hash_entry const *bucket
-    = table->bucket + table->hasher (entry, table->n_buckets);
+  struct hash_entry const *bucket = safe_hasher (table, entry);
   struct hash_entry const *cursor;
 
-  if (! (bucket < table->bucket_limit))
-    abort ();
-
   /* Find next entry in the same bucket.  */
-  for (cursor = bucket; cursor; cursor = cursor->next)
-    if (cursor->data == entry && cursor->next)
-      return cursor->next->data;
+  cursor = bucket;
+  do
+    {
+      if (cursor->data == entry && cursor->next)
+        return cursor->next->data;
+      cursor = cursor->next;
+    }
+  while (cursor != NULL);
 
   /* Find first entry in any subsequent bucket.  */
   while (++bucket < table->bucket_limit)
@@ -324,7 +334,7 @@
 
 size_t
 hash_get_entries (const Hash_table *table, void **buffer,
-		  size_t buffer_size)
+                  size_t buffer_size)
 {
   size_t counter = 0;
   struct hash_entry const *bucket;
@@ -333,14 +343,14 @@
   for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
     {
       if (bucket->data)
-	{
-	  for (cursor = bucket; cursor; cursor = cursor->next)
-	    {
-	      if (counter >= buffer_size)
-		return counter;
-	      buffer[counter++] = cursor->data;
-	    }
-	}
+        {
+          for (cursor = bucket; cursor; cursor = cursor->next)
+            {
+              if (counter >= buffer_size)
+                return counter;
+              buffer[counter++] = cursor->data;
+            }
+        }
     }
 
   return counter;
@@ -356,7 +366,7 @@
 
 size_t
 hash_do_for_each (const Hash_table *table, Hash_processor processor,
-		  void *processor_data)
+                  void *processor_data)
 {
   size_t counter = 0;
   struct hash_entry const *bucket;
@@ -365,14 +375,14 @@
   for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
     {
       if (bucket->data)
-	{
-	  for (cursor = bucket; cursor; cursor = cursor->next)
-	    {
-	      if (!(*processor) (cursor->data, processor_data))
-		return counter;
-	      counter++;
-	    }
-	}
+        {
+          for (cursor = bucket; cursor; cursor = cursor->next)
+            {
+              if (! processor (cursor->data, processor_data))
+                return counter;
+              counter++;
+            }
+        }
     }
 
   return counter;
@@ -394,10 +404,8 @@
 size_t
 hash_string (const char *string, size_t n_buckets)
 {
-# define ROTATE_LEFT(Value, Shift) \
-  ((Value) << (Shift) | (Value) >> ((sizeof (size_t) * CHAR_BIT) - (Shift)))
 # define HASH_ONE_CHAR(Value, Byte) \
-  ((Byte) + ROTATE_LEFT (Value, 7))
+  ((Byte) + rotl_sz (Value, 7))
 
   size_t value = 0;
   unsigned char ch;
@@ -406,15 +414,14 @@
     value = HASH_ONE_CHAR (value, ch);
   return value % n_buckets;
 
-# undef ROTATE_LEFT
 # undef HASH_ONE_CHAR
 }
 
 #else /* not USE_DIFF_HASH */
 
-/* This one comes from `recode', and performs a bit better than the above as
+/* This one comes from 'recode', and performs a bit better than the above as
    per a few experiments.  It is inspired from a hashing routine found in the
-   very old Cyber `snoop', itself written in typical Greg Mansfield style.
+   very old Cyber 'snoop', itself written in typical Greg Mansfield style.
    (By the way, what happened to this excellent man?  Is he still alive?)  */
 
 size_t
@@ -433,7 +440,7 @@
 /* Return true if CANDIDATE is a prime number.  CANDIDATE should be an odd
    number at least equal to 11.  */
 
-static bool
+static bool _GL_ATTRIBUTE_CONST
 is_prime (size_t candidate)
 {
   size_t divisor = 3;
@@ -452,7 +459,7 @@
 /* Round a given CANDIDATE number up to the nearest prime, and return that
    prime.  Primes lower than 10 are merely skipped.  */
 
-static size_t
+static size_t _GL_ATTRIBUTE_CONST
 next_prime (size_t candidate)
 {
   /* Skip small primes.  */
@@ -462,7 +469,7 @@
   /* Make it definitely odd.  */
   candidate |= 1;
 
-  while (!is_prime (candidate))
+  while (SIZE_MAX != candidate && !is_prime (candidate))
     candidate += 2;
 
   return candidate;
@@ -474,6 +481,27 @@
   *tuning = default_tuning;
 }
 
+/* If the user passes a NULL hasher, we hash the raw pointer.  */
+static size_t
+raw_hasher (const void *data, size_t n)
+{
+  /* When hashing unique pointers, it is often the case that they were
+     generated by malloc and thus have the property that the low-order
+     bits are 0.  As this tends to give poorer performance with small
+     tables, we rotate the pointer value before performing division,
+     in an attempt to improve hash quality.  */
+  size_t val = rotr_sz ((size_t) data, 3);
+  return val % n;
+}
+
+/* If the user passes a NULL comparator, we use pointer comparison.  */
+static bool
+raw_comparator (const void *a, const void *b)
+{
+  return a == b;
+}
+
+
 /* For the given hash TABLE, check the user supplied tuning structure for
    reasonable values, and return true if there is no gross error with it.
    Otherwise, definitively reset the TUNING field to some acceptable default
@@ -484,13 +512,16 @@
 check_tuning (Hash_table *table)
 {
   const Hash_tuning *tuning = table->tuning;
+  float epsilon;
+  if (tuning == &default_tuning)
+    return true;
 
   /* Be a bit stricter than mathematics would require, so that
      rounding errors in size calculations do not cause allocations to
      fail to grow or shrink as they should.  The smallest allocation
      is 11 (due to next_prime's algorithm), so an epsilon of 0.1
      should be good enough.  */
-  float epsilon = 0.1f;
+  epsilon = 0.1f;
 
   if (epsilon < tuning->growth_threshold
       && tuning->growth_threshold < 1 - epsilon
@@ -505,6 +536,26 @@
   return false;
 }
 
+/* Compute the size of the bucket array for the given CANDIDATE and
+   TUNING, or return 0 if there is no possible way to allocate that
+   many entries.  */
+
+static size_t _GL_ATTRIBUTE_PURE
+compute_bucket_size (size_t candidate, const Hash_tuning *tuning)
+{
+  if (!tuning->is_n_buckets)
+    {
+      float new_candidate = candidate / tuning->growth_threshold;
+      if (SIZE_MAX <= new_candidate)
+        return 0;
+      candidate = new_candidate;
+    }
+  candidate = next_prime (candidate);
+  if (xalloc_oversized (candidate, sizeof (struct hash_entry *)))
+    return 0;
+  return candidate;
+}
+
 /* Allocate and return a new hash table, or NULL upon failure.  The initial
    number of buckets is automatically selected so as to _guarantee_ that you
    may insert at least CANDIDATE different user entries before any growth of
@@ -516,35 +567,40 @@
 
    TUNING points to a structure of user-supplied values, in case some fine
    tuning is wanted over the default behavior of the hasher.  If TUNING is
-   NULL, the default tuning parameters are used instead.
+   NULL, the default tuning parameters are used instead.  If TUNING is
+   provided but the values requested are out of bounds or might cause
+   rounding errors, return NULL.
 
-   The user-supplied HASHER function should be provided.  It accepts two
+   The user-supplied HASHER function, when not NULL, accepts two
    arguments ENTRY and TABLE_SIZE.  It computes, by hashing ENTRY contents, a
    slot number for that entry which should be in the range 0..TABLE_SIZE-1.
    This slot number is then returned.
 
-   The user-supplied COMPARATOR function should be provided.  It accepts two
+   The user-supplied COMPARATOR function, when not NULL, accepts two
    arguments pointing to user data, it then returns true for a pair of entries
    that compare equal, or false otherwise.  This function is internally called
-   on entries which are already known to hash to the same bucket index.
+   on entries which are already known to hash to the same bucket index,
+   but which are distinct pointers.
 
    The user-supplied DATA_FREER function, when not NULL, may be later called
    with the user data as an argument, just before the entry containing the
-   data gets freed.  This happens from within `hash_free' or `hash_clear'.
+   data gets freed.  This happens from within 'hash_free' or 'hash_clear'.
    You should specify this function only if you want these functions to free
-   all of your `data' data.  This is typically the case when your data is
+   all of your 'data' data.  This is typically the case when your data is
    simply an auxiliary struct that you have malloc'd to aggregate several
    values.  */
 
 Hash_table *
 hash_initialize (size_t candidate, const Hash_tuning *tuning,
-		 Hash_hasher hasher, Hash_comparator comparator,
-		 Hash_data_freer data_freer)
+                 Hash_hasher hasher, Hash_comparator comparator,
+                 Hash_data_freer data_freer)
 {
   Hash_table *table;
 
-  if (hasher == NULL || comparator == NULL)
-    return NULL;
+  if (hasher == NULL)
+    hasher = raw_hasher;
+  if (comparator == NULL)
+    comparator = raw_comparator;
 
   table = malloc (sizeof *table);
   if (table == NULL)
@@ -556,28 +612,20 @@
   if (!check_tuning (table))
     {
       /* Fail if the tuning options are invalid.  This is the only occasion
-	 when the user gets some feedback about it.  Once the table is created,
-	 if the user provides invalid tuning options, we silently revert to
-	 using the defaults, and ignore further request to change the tuning
-	 options.  */
+         when the user gets some feedback about it.  Once the table is created,
+         if the user provides invalid tuning options, we silently revert to
+         using the defaults, and ignore further request to change the tuning
+         options.  */
       goto fail;
     }
 
-  if (!tuning->is_n_buckets)
-    {
-      float new_candidate = candidate / tuning->growth_threshold;
-      if (SIZE_MAX <= new_candidate)
-	goto fail;
-      candidate = new_candidate;
-    }
-
-  if (xalloc_oversized (candidate, sizeof *table->bucket))
-    goto fail;
-  table->n_buckets = next_prime (candidate);
-  if (xalloc_oversized (table->n_buckets, sizeof *table->bucket))
+  table->n_buckets = compute_bucket_size (candidate, tuning);
+  if (!table->n_buckets)
     goto fail;
 
   table->bucket = calloc (table->n_buckets, sizeof *table->bucket);
+  if (table->bucket == NULL)
+    goto fail;
   table->bucket_limit = table->bucket + table->n_buckets;
   table->n_buckets_used = 0;
   table->n_entries = 0;
@@ -609,30 +657,30 @@
   for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
     {
       if (bucket->data)
-	{
-	  struct hash_entry *cursor;
-	  struct hash_entry *next;
+        {
+          struct hash_entry *cursor;
+          struct hash_entry *next;
 
-	  /* Free the bucket overflow.  */
-	  for (cursor = bucket->next; cursor; cursor = next)
-	    {
-	      if (table->data_freer)
-		(*table->data_freer) (cursor->data);
-	      cursor->data = NULL;
+          /* Free the bucket overflow.  */
+          for (cursor = bucket->next; cursor; cursor = next)
+            {
+              if (table->data_freer)
+                table->data_freer (cursor->data);
+              cursor->data = NULL;
 
-	      next = cursor->next;
-	      /* Relinking is done one entry at a time, as it is to be expected
-		 that overflows are either rare or short.  */
-	      cursor->next = table->free_entry_list;
-	      table->free_entry_list = cursor;
-	    }
+              next = cursor->next;
+              /* Relinking is done one entry at a time, as it is to be expected
+                 that overflows are either rare or short.  */
+              cursor->next = table->free_entry_list;
+              table->free_entry_list = cursor;
+            }
 
-	  /* Free the bucket head.  */
-	  if (table->data_freer)
-	    (*table->data_freer) (bucket->data);
-	  bucket->data = NULL;
-	  bucket->next = NULL;
-	}
+          /* Free the bucket head.  */
+          if (table->data_freer)
+            table->data_freer (bucket->data);
+          bucket->data = NULL;
+          bucket->next = NULL;
+        }
     }
 
   table->n_buckets_used = 0;
@@ -655,15 +703,13 @@
   if (table->data_freer && table->n_entries)
     {
       for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-	{
-	  if (bucket->data)
-	    {
-	      for (cursor = bucket; cursor; cursor = cursor->next)
-		{
-		  (*table->data_freer) (cursor->data);
-		}
-	    }
-	}
+        {
+          if (bucket->data)
+            {
+              for (cursor = bucket; cursor; cursor = cursor->next)
+                table->data_freer (cursor->data);
+            }
+        }
     }
 
 #if USE_OBSTACK
@@ -676,10 +722,10 @@
   for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
     {
       for (cursor = bucket->next; cursor; cursor = next)
-	{
-	  next = cursor->next;
-	  free (cursor);
-	}
+        {
+          next = cursor->next;
+          free (cursor);
+        }
     }
 
   /* Also reclaim the internal list of previously freed entries.  */
@@ -698,7 +744,7 @@
 
 /* Insertion and deletion.  */
 
-/* Get a new hash entry for a bucket overflow, possibly by reclying a
+/* Get a new hash entry for a bucket overflow, possibly by recycling a
    previously freed one.  If this is not possible, allocate a new one.  */
 
 static struct hash_entry *
@@ -742,15 +788,11 @@
 
 static void *
 hash_find_entry (Hash_table *table, const void *entry,
-		 struct hash_entry **bucket_head, bool delete)
+                 struct hash_entry **bucket_head, bool delete)
 {
-  struct hash_entry *bucket
-    = table->bucket + table->hasher (entry, table->n_buckets);
+  struct hash_entry *bucket = safe_hasher (table, entry);
   struct hash_entry *cursor;
 
-  if (! (bucket < table->bucket_limit))
-    abort ();
-
   *bucket_head = bucket;
 
   /* Test for empty bucket.  */
@@ -758,26 +800,26 @@
     return NULL;
 
   /* See if the entry is the first in the bucket.  */
-  if ((*table->comparator) (entry, bucket->data))
+  if (entry == bucket->data || table->comparator (entry, bucket->data))
     {
       void *data = bucket->data;
 
       if (delete)
-	{
-	  if (bucket->next)
-	    {
-	      struct hash_entry *next = bucket->next;
+        {
+          if (bucket->next)
+            {
+              struct hash_entry *next = bucket->next;
 
-	      /* Bump the first overflow entry into the bucket head, then save
-		 the previous first overflow entry for later recycling.  */
-	      *bucket = *next;
-	      free_entry (table, next);
-	    }
-	  else
-	    {
-	      bucket->data = NULL;
-	    }
-	}
+              /* Bump the first overflow entry into the bucket head, then save
+                 the previous first overflow entry for later recycling.  */
+              *bucket = *next;
+              free_entry (table, next);
+            }
+          else
+            {
+              bucket->data = NULL;
+            }
+        }
 
       return data;
     }
@@ -785,163 +827,234 @@
   /* Scan the bucket overflow.  */
   for (cursor = bucket; cursor->next; cursor = cursor->next)
     {
-      if ((*table->comparator) (entry, cursor->next->data))
-	{
-	  void *data = cursor->next->data;
+      if (entry == cursor->next->data
+          || table->comparator (entry, cursor->next->data))
+        {
+          void *data = cursor->next->data;
 
-	  if (delete)
-	    {
-	      struct hash_entry *next = cursor->next;
+          if (delete)
+            {
+              struct hash_entry *next = cursor->next;
 
-	      /* Unlink the entry to delete, then save the freed entry for later
-		 recycling.  */
-	      cursor->next = next->next;
-	      free_entry (table, next);
-	    }
+              /* Unlink the entry to delete, then save the freed entry for later
+                 recycling.  */
+              cursor->next = next->next;
+              free_entry (table, next);
+            }
 
-	  return data;
-	}
+          return data;
+        }
     }
 
   /* No entry found.  */
   return NULL;
 }
 
+/* Internal helper, to move entries from SRC to DST.  Both tables must
+   share the same free entry list.  If SAFE, only move overflow
+   entries, saving bucket heads for later, so that no allocations will
+   occur.  Return false if the free entry list is exhausted and an
+   allocation fails.  */
+
+static bool
+transfer_entries (Hash_table *dst, Hash_table *src, bool safe)
+{
+  struct hash_entry *bucket;
+  struct hash_entry *cursor;
+  struct hash_entry *next;
+  for (bucket = src->bucket; bucket < src->bucket_limit; bucket++)
+    if (bucket->data)
+      {
+        void *data;
+        struct hash_entry *new_bucket;
+
+        /* Within each bucket, transfer overflow entries first and
+           then the bucket head, to minimize memory pressure.  After
+           all, the only time we might allocate is when moving the
+           bucket head, but moving overflow entries first may create
+           free entries that can be recycled by the time we finally
+           get to the bucket head.  */
+        for (cursor = bucket->next; cursor; cursor = next)
+          {
+            data = cursor->data;
+            new_bucket = safe_hasher (dst, data);
+
+            next = cursor->next;
+
+            if (new_bucket->data)
+              {
+                /* Merely relink an existing entry, when moving from a
+                   bucket overflow into a bucket overflow.  */
+                cursor->next = new_bucket->next;
+                new_bucket->next = cursor;
+              }
+            else
+              {
+                /* Free an existing entry, when moving from a bucket
+                   overflow into a bucket header.  */
+                new_bucket->data = data;
+                dst->n_buckets_used++;
+                free_entry (dst, cursor);
+              }
+          }
+        /* Now move the bucket head.  Be sure that if we fail due to
+           allocation failure that the src table is in a consistent
+           state.  */
+        data = bucket->data;
+        bucket->next = NULL;
+        if (safe)
+          continue;
+        new_bucket = safe_hasher (dst, data);
+
+        if (new_bucket->data)
+          {
+            /* Allocate or recycle an entry, when moving from a bucket
+               header into a bucket overflow.  */
+            struct hash_entry *new_entry = allocate_entry (dst);
+
+            if (new_entry == NULL)
+              return false;
+
+            new_entry->data = data;
+            new_entry->next = new_bucket->next;
+            new_bucket->next = new_entry;
+          }
+        else
+          {
+            /* Move from one bucket header to another.  */
+            new_bucket->data = data;
+            dst->n_buckets_used++;
+          }
+        bucket->data = NULL;
+        src->n_buckets_used--;
+      }
+  return true;
+}
+
 /* For an already existing hash table, change the number of buckets through
    specifying CANDIDATE.  The contents of the hash table are preserved.  The
    new number of buckets is automatically selected so as to _guarantee_ that
    the table may receive at least CANDIDATE different user entries, including
    those already in the table, before any other growth of the hash table size
    occurs.  If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the
-   exact number of buckets desired.  */
+   exact number of buckets desired.  Return true iff the rehash succeeded.  */
 
 bool
 hash_rehash (Hash_table *table, size_t candidate)
 {
+  Hash_table storage;
   Hash_table *new_table;
-  struct hash_entry *bucket;
-  struct hash_entry *cursor;
-  struct hash_entry *next;
+  size_t new_size = compute_bucket_size (candidate, table->tuning);
 
-  new_table = hash_initialize (candidate, table->tuning, table->hasher,
-			       table->comparator, table->data_freer);
-  if (new_table == NULL)
+  if (!new_size)
     return false;
+  if (new_size == table->n_buckets)
+    return true;
+  new_table = &storage;
+  new_table->bucket = calloc (new_size, sizeof *new_table->bucket);
+  if (new_table->bucket == NULL)
+    return false;
+  new_table->n_buckets = new_size;
+  new_table->bucket_limit = new_table->bucket + new_size;
+  new_table->n_buckets_used = 0;
+  new_table->n_entries = 0;
+  new_table->tuning = table->tuning;
+  new_table->hasher = table->hasher;
+  new_table->comparator = table->comparator;
+  new_table->data_freer = table->data_freer;
+
+  /* In order for the transfer to successfully complete, we need
+     additional overflow entries when distinct buckets in the old
+     table collide into a common bucket in the new table.  The worst
+     case possible is a hasher that gives a good spread with the old
+     size, but returns a constant with the new size; if we were to
+     guarantee table->n_buckets_used-1 free entries in advance, then
+     the transfer would be guaranteed to not allocate memory.
+     However, for large tables, a guarantee of no further allocation
+     introduces a lot of extra memory pressure, all for an unlikely
+     corner case (most rehashes reduce, rather than increase, the
+     number of overflow entries needed).  So, we instead ensure that
+     the transfer process can be reversed if we hit a memory
+     allocation failure mid-transfer.  */
 
   /* Merely reuse the extra old space into the new table.  */
 #if USE_OBSTACK
-  obstack_free (&new_table->entry_stack, NULL);
   new_table->entry_stack = table->entry_stack;
 #endif
   new_table->free_entry_list = table->free_entry_list;
 
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    if (bucket->data)
-      for (cursor = bucket; cursor; cursor = next)
-	{
-	  void *data = cursor->data;
-	  struct hash_entry *new_bucket
-	    = (new_table->bucket
-	       + new_table->hasher (data, new_table->n_buckets));
+  if (transfer_entries (new_table, table, false))
+    {
+      /* Entries transferred successfully; tie up the loose ends.  */
+      free (table->bucket);
+      table->bucket = new_table->bucket;
+      table->bucket_limit = new_table->bucket_limit;
+      table->n_buckets = new_table->n_buckets;
+      table->n_buckets_used = new_table->n_buckets_used;
+      table->free_entry_list = new_table->free_entry_list;
+      /* table->n_entries and table->entry_stack already hold their value.  */
+      return true;
+    }
 
-	  if (! (new_bucket < new_table->bucket_limit))
-	    abort ();
+  /* We've allocated new_table->bucket (and possibly some entries),
+     exhausted the free list, and moved some but not all entries into
+     new_table.  We must undo the partial move before returning
+     failure.  The only way to get into this situation is if new_table
+     uses fewer buckets than the old table, so we will reclaim some
+     free entries as overflows in the new table are put back into
+     distinct buckets in the old table.
 
-	  next = cursor->next;
-
-	  if (new_bucket->data)
-	    {
-	      if (cursor == bucket)
-		{
-		  /* Allocate or recycle an entry, when moving from a bucket
-		     header into a bucket overflow.  */
-		  struct hash_entry *new_entry = allocate_entry (new_table);
-
-		  if (new_entry == NULL)
-		    return false;
-
-		  new_entry->data = data;
-		  new_entry->next = new_bucket->next;
-		  new_bucket->next = new_entry;
-		}
-	      else
-		{
-		  /* Merely relink an existing entry, when moving from a
-		     bucket overflow into a bucket overflow.  */
-		  cursor->next = new_bucket->next;
-		  new_bucket->next = cursor;
-		}
-	    }
-	  else
-	    {
-	      /* Free an existing entry, when moving from a bucket
-		 overflow into a bucket header.  Also take care of the
-		 simple case of moving from a bucket header into a bucket
-		 header.  */
-	      new_bucket->data = data;
-	      new_table->n_buckets_used++;
-	      if (cursor != bucket)
-		free_entry (new_table, cursor);
-	    }
-	}
-
-  free (table->bucket);
-  table->bucket = new_table->bucket;
-  table->bucket_limit = new_table->bucket_limit;
-  table->n_buckets = new_table->n_buckets;
-  table->n_buckets_used = new_table->n_buckets_used;
+     There are some pathological cases where a single pass through the
+     table requires more intermediate overflow entries than using two
+     passes.  Two passes give worse cache performance and takes
+     longer, but at this point, we're already out of memory, so slow
+     and safe is better than failure.  */
   table->free_entry_list = new_table->free_entry_list;
+  if (! (transfer_entries (table, new_table, true)
+         && transfer_entries (table, new_table, false)))
+    abort ();
   /* table->n_entries already holds its value.  */
-#if USE_OBSTACK
-  table->entry_stack = new_table->entry_stack;
-#endif
-  free (new_table);
-
-  return true;
+  free (new_table->bucket);
+  return false;
 }
 
-/* If ENTRY matches an entry already in the hash table, return the pointer
-   to the entry from the table.  Otherwise, insert ENTRY and return ENTRY.
-   Return NULL if the storage required for insertion cannot be allocated.  */
+/* Insert ENTRY into hash TABLE if there is not already a matching entry.
 
-void *
-hash_insert (Hash_table *table, const void *entry)
+   Return -1 upon memory allocation failure.
+   Return 1 if insertion succeeded.
+   Return 0 if there is already a matching entry in the table,
+   and in that case, if MATCHED_ENT is non-NULL, set *MATCHED_ENT
+   to that entry.
+
+   This interface is easier to use than hash_insert when you must
+   distinguish between the latter two cases.  More importantly,
+   hash_insert is unusable for some types of ENTRY values.  When using
+   hash_insert, the only way to distinguish those cases is to compare
+   the return value and ENTRY.  That works only when you can have two
+   different ENTRY values that point to data that compares "equal".  Thus,
+   when the ENTRY value is a simple scalar, you must use
+   hash_insert_if_absent.  ENTRY must not be NULL.  */
+int
+hash_insert_if_absent (Hash_table *table, void const *entry,
+                       void const **matched_ent)
 {
   void *data;
   struct hash_entry *bucket;
 
-  /* The caller cannot insert a NULL entry.  */
+  /* The caller cannot insert a NULL entry, since hash_lookup returns NULL
+     to indicate "not found", and hash_find_entry uses "bucket->data == NULL"
+     to indicate an empty bucket.  */
   if (! entry)
     abort ();
 
   /* If there's a matching entry already in the table, return that.  */
   if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL)
-    return data;
-
-  /* ENTRY is not matched, it should be inserted.  */
-
-  if (bucket->data)
     {
-      struct hash_entry *new_entry = allocate_entry (table);
-
-      if (new_entry == NULL)
-	return NULL;
-
-      /* Add ENTRY in the overflow of the bucket.  */
-
-      new_entry->data = (void *) entry;
-      new_entry->next = bucket->next;
-      bucket->next = new_entry;
-      table->n_entries++;
-      return (void *) entry;
+      if (matched_ent)
+        *matched_ent = data;
+      return 0;
     }
 
-  /* Add ENTRY right in the bucket head.  */
-
-  bucket->data = (void *) entry;
-  table->n_entries++;
-  table->n_buckets_used++;
-
   /* If the growth threshold of the buckets in use has been reached, increase
      the table size and rehash.  There's no point in checking the number of
      entries:  if the hashing function is ill-conditioned, rehashing is not
@@ -951,28 +1064,80 @@
       > table->tuning->growth_threshold * table->n_buckets)
     {
       /* Check more fully, before starting real work.  If tuning arguments
-	 became invalid, the second check will rely on proper defaults.  */
+         became invalid, the second check will rely on proper defaults.  */
       check_tuning (table);
       if (table->n_buckets_used
-	  > table->tuning->growth_threshold * table->n_buckets)
-	{
-	  const Hash_tuning *tuning = table->tuning;
-	  float candidate =
-	    (tuning->is_n_buckets
-	     ? (table->n_buckets * tuning->growth_factor)
-	     : (table->n_buckets * tuning->growth_factor
-		* tuning->growth_threshold));
+          > table->tuning->growth_threshold * table->n_buckets)
+        {
+          const Hash_tuning *tuning = table->tuning;
+          float candidate =
+            (tuning->is_n_buckets
+             ? (table->n_buckets * tuning->growth_factor)
+             : (table->n_buckets * tuning->growth_factor
+                * tuning->growth_threshold));
 
-	  if (SIZE_MAX <= candidate)
-	    return NULL;
+          if (SIZE_MAX <= candidate)
+            return -1;
 
-	  /* If the rehash fails, arrange to return NULL.  */
-	  if (!hash_rehash (table, candidate))
-	    entry = NULL;
-	}
+          /* If the rehash fails, arrange to return NULL.  */
+          if (!hash_rehash (table, candidate))
+            return -1;
+
+          /* Update the bucket we are interested in.  */
+          if (hash_find_entry (table, entry, &bucket, false) != NULL)
+            abort ();
+        }
     }
 
-  return (void *) entry;
+  /* ENTRY is not matched, it should be inserted.  */
+
+  if (bucket->data)
+    {
+      struct hash_entry *new_entry = allocate_entry (table);
+
+      if (new_entry == NULL)
+        return -1;
+
+      /* Add ENTRY in the overflow of the bucket.  */
+
+      new_entry->data = (void *) entry;
+      new_entry->next = bucket->next;
+      bucket->next = new_entry;
+      table->n_entries++;
+      return 1;
+    }
+
+  /* Add ENTRY right in the bucket head.  */
+
+  bucket->data = (void *) entry;
+  table->n_entries++;
+  table->n_buckets_used++;
+
+  return 1;
+}
+
+/* hash_insert0 is the deprecated name for hash_insert_if_absent.
+   .  */
+int
+hash_insert0 (Hash_table *table, void const *entry, void const **matched_ent)
+{
+  return hash_insert_if_absent (table, entry, matched_ent);
+}
+
+/* If ENTRY matches an entry already in the hash table, return the pointer
+   to the entry from the table.  Otherwise, insert ENTRY and return ENTRY.
+   Return NULL if the storage required for insertion cannot be allocated.
+   This implementation does not support duplicate entries or insertion of
+   NULL.  */
+
+void *
+hash_insert (Hash_table *table, void const *entry)
+{
+  void const *matched_ent;
+  int err = hash_insert_if_absent (table, entry, &matched_ent);
+  return (err == -1
+          ? NULL
+          : (void *) (err == 0 ? matched_ent : entry));
 }
 
 /* If ENTRY is already in the table, remove it and return the just-deleted
@@ -995,27 +1160,45 @@
       table->n_buckets_used--;
 
       /* If the shrink threshold of the buckets in use has been reached,
-	 rehash into a smaller table.  */
+         rehash into a smaller table.  */
 
       if (table->n_buckets_used
-	  < table->tuning->shrink_threshold * table->n_buckets)
-	{
-	  /* Check more fully, before starting real work.  If tuning arguments
-	     became invalid, the second check will rely on proper defaults.  */
-	  check_tuning (table);
-	  if (table->n_buckets_used
-	      < table->tuning->shrink_threshold * table->n_buckets)
-	    {
-	      const Hash_tuning *tuning = table->tuning;
-	      size_t candidate =
-		(tuning->is_n_buckets
-		 ? table->n_buckets * tuning->shrink_factor
-		 : (table->n_buckets * tuning->shrink_factor
-		    * tuning->growth_threshold));
+          < table->tuning->shrink_threshold * table->n_buckets)
+        {
+          /* Check more fully, before starting real work.  If tuning arguments
+             became invalid, the second check will rely on proper defaults.  */
+          check_tuning (table);
+          if (table->n_buckets_used
+              < table->tuning->shrink_threshold * table->n_buckets)
+            {
+              const Hash_tuning *tuning = table->tuning;
+              size_t candidate =
+                (tuning->is_n_buckets
+                 ? table->n_buckets * tuning->shrink_factor
+                 : (table->n_buckets * tuning->shrink_factor
+                    * tuning->growth_threshold));
 
-	      hash_rehash (table, candidate);
-	    }
-	}
+              if (!hash_rehash (table, candidate))
+                {
+                  /* Failure to allocate memory in an attempt to
+                     shrink the table is not fatal.  But since memory
+                     is low, we can at least be kind and free any
+                     spare entries, rather than keeping them tied up
+                     in the free entry list.  */
+#if ! USE_OBSTACK
+                  struct hash_entry *cursor = table->free_entry_list;
+                  struct hash_entry *next;
+                  while (cursor)
+                    {
+                      next = cursor->next;
+                      free (cursor);
+                      cursor = next;
+                    }
+                  table->free_entry_list = NULL;
+#endif
+                }
+            }
+        }
     }
 
   return data;
@@ -1028,22 +1211,22 @@
 void
 hash_print (const Hash_table *table)
 {
-  struct hash_entry const *bucket;
+  struct hash_entry *bucket = (struct hash_entry *) table->bucket;
 
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
+  for ( ; bucket < table->bucket_limit; bucket++)
     {
       struct hash_entry *cursor;
 
       if (bucket)
-	printf ("%lu:\n", (unsigned long int) (bucket - table->bucket));
+        printf ("%lu:\n", (unsigned long int) (bucket - table->bucket));
 
       for (cursor = bucket; cursor; cursor = cursor->next)
-	{
-	  char const *s = cursor->data;
-	  /* FIXME */
-	  if (s)
-	    printf ("  %s\n", s);
-	}
+        {
+          char const *s = cursor->data;
+          /* FIXME */
+          if (s)
+            printf ("  %s\n", s);
+        }
     }
 }
 
diff --git a/lib/hash.h b/lib/hash.h
index ab63a86..06e303b 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -1,11 +1,12 @@
 /* hash - hashing table processing.
-   Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2001, 2003, 2009-2012 Free Software Foundation,
+   Inc.
    Written by Jim Meyering <meyering@ascend.com>, 1998.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,13 +14,12 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* A generic hash table package.  */
 
 /* Make sure USE_OBSTACK is defined to 1 if you want the allocator to use
-   obstacks instead of malloc, and recompile `hash.c' with same setting.  */
+   obstacks instead of malloc, and recompile 'hash.c' with same setting.  */
 
 #ifndef HASH_H_
 # define HASH_H_
@@ -27,27 +27,39 @@
 # include <stdio.h>
 # include <stdbool.h>
 
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The warn_unused_result attribute appeared first in gcc-3.4.0.  */
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#  define _GL_ATTRIBUTE_WUR __attribute__ ((__warn_unused_result__))
+# else
+#  define _GL_ATTRIBUTE_WUR /* empty */
+# endif
+
+# ifndef _GL_ATTRIBUTE_DEPRECATED
+/* The __attribute__((__deprecated__)) feature
+   is available in gcc versions 3.1 and newer.  */
+#  if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1)
+#   define _GL_ATTRIBUTE_DEPRECATED /* empty */
+#  else
+#   define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
+#  endif
+# endif
+
 typedef size_t (*Hash_hasher) (const void *, size_t);
 typedef bool (*Hash_comparator) (const void *, const void *);
 typedef void (*Hash_data_freer) (void *);
 typedef bool (*Hash_processor) (void *, void *);
 
-struct hash_entry
-  {
-    void *data;
-    struct hash_entry *next;
-  };
-
 struct hash_tuning
   {
-    /* This structure is mainly used for `hash_initialize', see the block
-       documentation of `hash_reset_tuning' for more complete comments.  */
+    /* This structure is mainly used for 'hash_initialize', see the block
+       documentation of 'hash_reset_tuning' for more complete comments.  */
 
-    float shrink_threshold;	/* ratio of used buckets to trigger a shrink */
-    float shrink_factor;	/* ratio of new smaller size to original size */
-    float growth_threshold;	/* ratio of used buckets to trigger a growth */
-    float growth_factor;	/* ratio of new bigger size to original size */
-    bool is_n_buckets;		/* if CANDIDATE really means table size */
+    float shrink_threshold;     /* ratio of used buckets to trigger a shrink */
+    float shrink_factor;        /* ratio of new smaller size to original size */
+    float growth_threshold;     /* ratio of used buckets to trigger a growth */
+    float growth_factor;        /* ratio of new bigger size to original size */
+    bool is_n_buckets;          /* if CANDIDATE really means table size */
   };
 
 typedef struct hash_tuning Hash_tuning;
@@ -57,32 +69,39 @@
 typedef struct hash_table Hash_table;
 
 /* Information and lookup.  */
-size_t hash_get_n_buckets (const Hash_table *);
-size_t hash_get_n_buckets_used (const Hash_table *);
-size_t hash_get_n_entries (const Hash_table *);
-size_t hash_get_max_bucket_length (const Hash_table *);
-bool hash_table_ok (const Hash_table *);
+size_t hash_get_n_buckets (const Hash_table *) _GL_ATTRIBUTE_PURE;
+size_t hash_get_n_buckets_used (const Hash_table *) _GL_ATTRIBUTE_PURE;
+size_t hash_get_n_entries (const Hash_table *) _GL_ATTRIBUTE_PURE;
+size_t hash_get_max_bucket_length (const Hash_table *) _GL_ATTRIBUTE_PURE;
+bool hash_table_ok (const Hash_table *) _GL_ATTRIBUTE_PURE;
 void hash_print_statistics (const Hash_table *, FILE *);
 void *hash_lookup (const Hash_table *, const void *);
 
 /* Walking.  */
-void *hash_get_first (const Hash_table *);
+void *hash_get_first (const Hash_table *) _GL_ATTRIBUTE_PURE;
 void *hash_get_next (const Hash_table *, const void *);
 size_t hash_get_entries (const Hash_table *, void **, size_t);
 size_t hash_do_for_each (const Hash_table *, Hash_processor, void *);
 
 /* Allocation and clean-up.  */
-size_t hash_string (const char *, size_t);
+size_t hash_string (const char *, size_t) _GL_ATTRIBUTE_PURE;
 void hash_reset_tuning (Hash_tuning *);
 Hash_table *hash_initialize (size_t, const Hash_tuning *,
-			     Hash_hasher, Hash_comparator,
-			     Hash_data_freer);
+                             Hash_hasher, Hash_comparator,
+                             Hash_data_freer) _GL_ATTRIBUTE_WUR;
 void hash_clear (Hash_table *);
 void hash_free (Hash_table *);
 
 /* Insertion and deletion.  */
-bool hash_rehash (Hash_table *, size_t);
-void *hash_insert (Hash_table *, const void *);
+bool hash_rehash (Hash_table *, size_t) _GL_ATTRIBUTE_WUR;
+void *hash_insert (Hash_table *, const void *) _GL_ATTRIBUTE_WUR;
+
+/* Deprecate this interface.  It has been renamed to hash_insert_if_absent.  */
+int hash_insert0 (Hash_table *table, /* FIXME: remove in 2013 */
+                  const void *entry,
+                  const void **matched_ent) _GL_ATTRIBUTE_DEPRECATED;
+int hash_insert_if_absent (Hash_table *table, const void *entry,
+                           const void **matched_ent);
 void *hash_delete (Hash_table *, const void *);
 
 #endif
diff --git a/lib/intprops.h b/lib/intprops.h
new file mode 100644
index 0000000..2485c78
--- /dev/null
+++ b/lib/intprops.h
@@ -0,0 +1,319 @@
+/* intprops.h -- properties of integer types
+
+   Copyright (C) 2001-2005, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#ifndef _GL_INTPROPS_H
+#define _GL_INTPROPS_H
+
+#include <limits.h>
+
+/* Return an integer value, converted to the same type as the integer
+   expression E after integer type promotion.  V is the unconverted value.  */
+#define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
+
+/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
+   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>.  */
+#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v))
+
+/* The extra casts in the following macros work around compiler bugs,
+   e.g., in Cray C 5.0.3.0.  */
+
+/* True if the arithmetic type T is an integer type.  bool counts as
+   an integer.  */
+#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
+
+/* True if negative values of the signed integer type T use two's
+   complement, ones' complement, or signed magnitude representation,
+   respectively.  Much GNU code assumes two's complement, but some
+   people like to be portable to all possible C hosts.  */
+#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
+#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
+#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
+
+/* True if the signed integer expression E uses two's complement.  */
+#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1)
+
+/* True if the arithmetic type T is signed.  */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* Return 1 if the integer expression E, after integer promotion, has
+   a signed type.  */
+#define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0)
+
+
+/* Minimum and maximum values for integer types and expressions.  These
+   macros have undefined behavior if T is signed and has padding bits.
+   If this is a problem for you, please let us know how to fix it for
+   your host.  */
+
+/* The maximum and minimum values for the integer type T.  */
+#define TYPE_MINIMUM(t)                                                 \
+  ((t) (! TYPE_SIGNED (t)                                               \
+        ? (t) 0                                                         \
+        : TYPE_SIGNED_MAGNITUDE (t)                                     \
+        ? ~ (t) 0                                                       \
+        : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t)                                                 \
+  ((t) (! TYPE_SIGNED (t)                                               \
+        ? (t) -1                                                        \
+        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+
+/* The maximum and minimum values for the type of the expression E,
+   after integer promotion.  E should not have side effects.  */
+#define _GL_INT_MINIMUM(e)                                              \
+  (_GL_INT_SIGNED (e)                                                   \
+   ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e)         \
+   : _GL_INT_CONVERT (e, 0))
+#define _GL_INT_MAXIMUM(e)                                              \
+  (_GL_INT_SIGNED (e)                                                   \
+   ? _GL_SIGNED_INT_MAXIMUM (e)                                         \
+   : _GL_INT_NEGATE_CONVERT (e, 1))
+#define _GL_SIGNED_INT_MAXIMUM(e)                                       \
+  (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1)
+
+
+/* Return 1 if the __typeof__ keyword works.  This could be done by
+   'configure', but for now it's easier to do it by hand.  */
+#if 2 <= __GNUC__ || 0x5110 <= __SUNPRO_C
+# define _GL_HAVE___TYPEOF__ 1
+#else
+# define _GL_HAVE___TYPEOF__ 0
+#endif
+
+/* Return 1 if the integer type or expression T might be signed.  Return 0
+   if it is definitely unsigned.  This macro does not evaluate its argument,
+   and expands to an integer constant expression.  */
+#if _GL_HAVE___TYPEOF__
+# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
+#else
+# define _GL_SIGNED_TYPE_OR_EXPR(t) 1
+#endif
+
+/* Bound on length of the string representing an unsigned integer
+   value representable in B bits.  log10 (2.0) < 146/485.  The
+   smallest value of B where this bound is not tight is 2621.  */
+#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
+
+/* Bound on length of the string representing an integer type or expression T.
+   Subtract 1 for the sign bit if T is signed, and then add 1 more for
+   a minus sign if needed.
+
+   Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is
+   signed, this macro may overestimate the true bound by one byte when
+   applied to unsigned types of size 2, 4, 16, ... bytes.  */
+#define INT_STRLEN_BOUND(t)                                     \
+  (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT                 \
+                          - _GL_SIGNED_TYPE_OR_EXPR (t))        \
+   + _GL_SIGNED_TYPE_OR_EXPR (t))
+
+/* Bound on buffer size needed to represent an integer type or expression T,
+   including the terminating null.  */
+#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
+
+
+/* Range overflow checks.
+
+   The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C
+   operators might not yield numerically correct answers due to
+   arithmetic overflow.  They do not rely on undefined or
+   implementation-defined behavior.  Their implementations are simple
+   and straightforward, but they are a bit harder to use than the
+   INT_<op>_OVERFLOW macros described below.
+
+   Example usage:
+
+     long int i = ...;
+     long int j = ...;
+     if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX))
+       printf ("multiply would overflow");
+     else
+       printf ("product is %ld", i * j);
+
+   Restrictions on *_RANGE_OVERFLOW macros:
+
+   These macros do not check for all possible numerical problems or
+   undefined or unspecified behavior: they do not check for division
+   by zero, for bad shift counts, or for shifting negative numbers.
+
+   These macros may evaluate their arguments zero or multiple times,
+   so the arguments should not have side effects.  The arithmetic
+   arguments (including the MIN and MAX arguments) must be of the same
+   integer type after the usual arithmetic conversions, and the type
+   must have minimum value MIN and maximum MAX.  Unsigned types should
+   use a zero MIN of the proper type.
+
+   These macros are tuned for constant MIN and MAX.  For commutative
+   operations such as A + B, they are also tuned for constant B.  */
+
+/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic.
+   See above for restrictions.  */
+#define INT_ADD_RANGE_OVERFLOW(a, b, min, max)          \
+  ((b) < 0                                              \
+   ? (a) < (min) - (b)                                  \
+   : (max) - (b) < (a))
+
+/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic.
+   See above for restrictions.  */
+#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max)     \
+  ((b) < 0                                              \
+   ? (max) + (b) < (a)                                  \
+   : (a) < (min) + (b))
+
+/* Return 1 if - A would overflow in [MIN,MAX] arithmetic.
+   See above for restrictions.  */
+#define INT_NEGATE_RANGE_OVERFLOW(a, min, max)          \
+  ((min) < 0                                            \
+   ? (a) < - (max)                                      \
+   : 0 < (a))
+
+/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic.
+   See above for restrictions.  Avoid && and || as they tickle
+   bugs in Sun C 5.11 2010/08/13 and other compilers; see
+   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>.  */
+#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max)     \
+  ((b) < 0                                              \
+   ? ((a) < 0                                           \
+      ? (a) < (max) / (b)                               \
+      : (b) == -1                                       \
+      ? 0                                               \
+      : (min) / (b) < (a))                              \
+   : (b) == 0                                           \
+   ? 0                                                  \
+   : ((a) < 0                                           \
+      ? (a) < (min) / (b)                               \
+      : (max) / (b) < (a)))
+
+/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic.
+   See above for restrictions.  Do not check for division by zero.  */
+#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max)       \
+  ((min) < 0 && (b) == -1 && (a) < - (max))
+
+/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic.
+   See above for restrictions.  Do not check for division by zero.
+   Mathematically, % should never overflow, but on x86-like hosts
+   INT_MIN % -1 traps, and the C standard permits this, so treat this
+   as an overflow too.  */
+#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max)    \
+  INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max)
+
+/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic.
+   See above for restrictions.  Here, MIN and MAX are for A only, and B need
+   not be of the same type as the other arguments.  The C standard says that
+   behavior is undefined for shifts unless 0 <= B < wordwidth, and that when
+   A is negative then A << B has undefined behavior and A >> B has
+   implementation-defined behavior, but do not check these other
+   restrictions.  */
+#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max)   \
+  ((a) < 0                                              \
+   ? (a) < (min) >> (b)                                 \
+   : (max) >> (b) < (a))
+
+
+/* The _GL*_OVERFLOW macros have the same restrictions as the
+   *_RANGE_OVERFLOW macros, except that they do not assume that operands
+   (e.g., A and B) have the same type as MIN and MAX.  Instead, they assume
+   that the result (e.g., A + B) has that type.  */
+#define _GL_ADD_OVERFLOW(a, b, min, max)                                \
+  ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max)                  \
+   : (a) < 0 ? (b) <= (a) + (b)                                         \
+   : (b) < 0 ? (a) <= (a) + (b)                                         \
+   : (a) + (b) < (b))
+#define _GL_SUBTRACT_OVERFLOW(a, b, min, max)                           \
+  ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max)             \
+   : (a) < 0 ? 1                                                        \
+   : (b) < 0 ? (a) - (b) <= (a)                                         \
+   : (a) < (b))
+#define _GL_MULTIPLY_OVERFLOW(a, b, min, max)                           \
+  (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a))))       \
+   || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max))
+#define _GL_DIVIDE_OVERFLOW(a, b, min, max)                             \
+  ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max)  \
+   : (a) < 0 ? (b) <= (a) + (b) - 1                                     \
+   : (b) < 0 && (a) + (b) <= (a))
+#define _GL_REMAINDER_OVERFLOW(a, b, min, max)                          \
+  ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max)  \
+   : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b)                     \
+   : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max))
+
+/* Return a nonzero value if A is a mathematical multiple of B, where
+   A is unsigned, B is negative, and MAX is the maximum value of A's
+   type.  A's type must be the same as (A % B)'s type.  Normally (A %
+   -B == 0) suffices, but things get tricky if -B would overflow.  */
+#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max)                            \
+  (((b) < -_GL_SIGNED_INT_MAXIMUM (b)                                   \
+    ? (_GL_SIGNED_INT_MAXIMUM (b) == (max)                              \
+       ? (a)                                                            \
+       : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1))   \
+    : (a) % - (b))                                                      \
+   == 0)
+
+
+/* Integer overflow checks.
+
+   The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators
+   might not yield numerically correct answers due to arithmetic overflow.
+   They work correctly on all known practical hosts, and do not rely
+   on undefined behavior due to signed arithmetic overflow.
+
+   Example usage:
+
+     long int i = ...;
+     long int j = ...;
+     if (INT_MULTIPLY_OVERFLOW (i, j))
+       printf ("multiply would overflow");
+     else
+       printf ("product is %ld", i * j);
+
+   These macros do not check for all possible numerical problems or
+   undefined or unspecified behavior: they do not check for division
+   by zero, for bad shift counts, or for shifting negative numbers.
+
+   These macros may evaluate their arguments zero or multiple times, so the
+   arguments should not have side effects.
+
+   These macros are tuned for their last argument being a constant.
+
+   Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B,
+   A % B, and A << B would overflow, respectively.  */
+
+#define INT_ADD_OVERFLOW(a, b) \
+  _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
+#define INT_SUBTRACT_OVERFLOW(a, b) \
+  _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
+#define INT_NEGATE_OVERFLOW(a) \
+  INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
+#define INT_MULTIPLY_OVERFLOW(a, b) \
+  _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW)
+#define INT_DIVIDE_OVERFLOW(a, b) \
+  _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW)
+#define INT_REMAINDER_OVERFLOW(a, b) \
+  _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW)
+#define INT_LEFT_SHIFT_OVERFLOW(a, b) \
+  INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \
+                                 _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
+
+/* Return 1 if the expression A <op> B would overflow,
+   where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test,
+   assuming MIN and MAX are the minimum and maximum for the result type.
+   Arguments should be free of side effects.  */
+#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow)        \
+  op_result_overflow (a, b,                                     \
+                      _GL_INT_MINIMUM (0 * (b) + (a)),          \
+                      _GL_INT_MAXIMUM (0 * (b) + (a)))
+
+#endif /* _GL_INTPROPS_H */
diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h
new file mode 100644
index 0000000..b9da2b5
--- /dev/null
+++ b/lib/inttypes.in.h
@@ -0,0 +1,1130 @@
+/* Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Derek Price.
+   This file is part of gnulib.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C 99 <inttypes.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* Include the original <inttypes.h> if it exists, and if this file
+   has not been included yet or if this file includes gnulib stdint.h
+   which in turn includes this file.
+   The include_next requires a split double-inclusion guard.  */
+#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+# if @HAVE_INTTYPES_H@
+
+   /* Some pre-C++11 <stdint.h> implementations need this.  */
+#  if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
+#   define __STDC_FORMAT_MACROS 1
+#  endif
+
+#  @INCLUDE_NEXT@ @NEXT_INTTYPES_H@
+# endif
+#endif
+
+#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+#define INTTYPES_H
+
+/* Include <stdint.h> or the gnulib replacement.
+   But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdint.h>
+#endif
+/* Get CHAR_BIT.  */
+#include <limits.h>
+
+#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
+# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* 7.8.1 Macros for format specifiers */
+
+#if defined _TNS_R_TARGET
+   /* Tandem NonStop R series and compatible platforms released before
+      July 2005 support %Ld but not %lld.  */
+# define _LONG_LONG_FORMAT_PREFIX "L"
+#else
+# define _LONG_LONG_FORMAT_PREFIX "ll"
+#endif
+
+#if !defined PRId8 || @PRI_MACROS_BROKEN@
+# undef PRId8
+# ifdef INT8_MAX
+#  define PRId8 "d"
+# endif
+#endif
+#if !defined PRIi8 || @PRI_MACROS_BROKEN@
+# undef PRIi8
+# ifdef INT8_MAX
+#  define PRIi8 "i"
+# endif
+#endif
+#if !defined PRIo8 || @PRI_MACROS_BROKEN@
+# undef PRIo8
+# ifdef UINT8_MAX
+#  define PRIo8 "o"
+# endif
+#endif
+#if !defined PRIu8 || @PRI_MACROS_BROKEN@
+# undef PRIu8
+# ifdef UINT8_MAX
+#  define PRIu8 "u"
+# endif
+#endif
+#if !defined PRIx8 || @PRI_MACROS_BROKEN@
+# undef PRIx8
+# ifdef UINT8_MAX
+#  define PRIx8 "x"
+# endif
+#endif
+#if !defined PRIX8 || @PRI_MACROS_BROKEN@
+# undef PRIX8
+# ifdef UINT8_MAX
+#  define PRIX8 "X"
+# endif
+#endif
+#if !defined PRId16 || @PRI_MACROS_BROKEN@
+# undef PRId16
+# ifdef INT16_MAX
+#  define PRId16 "d"
+# endif
+#endif
+#if !defined PRIi16 || @PRI_MACROS_BROKEN@
+# undef PRIi16
+# ifdef INT16_MAX
+#  define PRIi16 "i"
+# endif
+#endif
+#if !defined PRIo16 || @PRI_MACROS_BROKEN@
+# undef PRIo16
+# ifdef UINT16_MAX
+#  define PRIo16 "o"
+# endif
+#endif
+#if !defined PRIu16 || @PRI_MACROS_BROKEN@
+# undef PRIu16
+# ifdef UINT16_MAX
+#  define PRIu16 "u"
+# endif
+#endif
+#if !defined PRIx16 || @PRI_MACROS_BROKEN@
+# undef PRIx16
+# ifdef UINT16_MAX
+#  define PRIx16 "x"
+# endif
+#endif
+#if !defined PRIX16 || @PRI_MACROS_BROKEN@
+# undef PRIX16
+# ifdef UINT16_MAX
+#  define PRIX16 "X"
+# endif
+#endif
+#if !defined PRId32 || @PRI_MACROS_BROKEN@
+# undef PRId32
+# ifdef INT32_MAX
+#  define PRId32 "d"
+# endif
+#endif
+#if !defined PRIi32 || @PRI_MACROS_BROKEN@
+# undef PRIi32
+# ifdef INT32_MAX
+#  define PRIi32 "i"
+# endif
+#endif
+#if !defined PRIo32 || @PRI_MACROS_BROKEN@
+# undef PRIo32
+# ifdef UINT32_MAX
+#  define PRIo32 "o"
+# endif
+#endif
+#if !defined PRIu32 || @PRI_MACROS_BROKEN@
+# undef PRIu32
+# ifdef UINT32_MAX
+#  define PRIu32 "u"
+# endif
+#endif
+#if !defined PRIx32 || @PRI_MACROS_BROKEN@
+# undef PRIx32
+# ifdef UINT32_MAX
+#  define PRIx32 "x"
+# endif
+#endif
+#if !defined PRIX32 || @PRI_MACROS_BROKEN@
+# undef PRIX32
+# ifdef UINT32_MAX
+#  define PRIX32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
+#  define _PRI64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _PRI64_PREFIX "I64"
+# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#  define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRId64 || @PRI_MACROS_BROKEN@
+#  undef PRId64
+#  define PRId64 _PRI64_PREFIX "d"
+# endif
+# if !defined PRIi64 || @PRI_MACROS_BROKEN@
+#  undef PRIi64
+#  define PRIi64 _PRI64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
+#  define _PRIu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _PRIu64_PREFIX "I64"
+# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#  define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRIo64 || @PRI_MACROS_BROKEN@
+#  undef PRIo64
+#  define PRIo64 _PRIu64_PREFIX "o"
+# endif
+# if !defined PRIu64 || @PRI_MACROS_BROKEN@
+#  undef PRIu64
+#  define PRIu64 _PRIu64_PREFIX "u"
+# endif
+# if !defined PRIx64 || @PRI_MACROS_BROKEN@
+#  undef PRIx64
+#  define PRIx64 _PRIu64_PREFIX "x"
+# endif
+# if !defined PRIX64 || @PRI_MACROS_BROKEN@
+#  undef PRIX64
+#  define PRIX64 _PRIu64_PREFIX "X"
+# endif
+#endif
+
+#if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIdLEAST64
+#  define PRIdLEAST64 PRId64
+# endif
+# if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIiLEAST64
+#  define PRIiLEAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIoLEAST64
+#  define PRIoLEAST64 PRIo64
+# endif
+# if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIuLEAST64
+#  define PRIuLEAST64 PRIu64
+# endif
+# if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIxLEAST64
+#  define PRIxLEAST64 PRIx64
+# endif
+# if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIXLEAST64
+#  define PRIXLEAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define PRIdFAST8 PRId64
+# else
+#  define PRIdFAST8 "d"
+# endif
+#endif
+#if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define PRIiFAST8 PRIi64
+# else
+#  define PRIiFAST8 "i"
+# endif
+#endif
+#if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIoFAST8 PRIo64
+# else
+#  define PRIoFAST8 "o"
+# endif
+#endif
+#if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIuFAST8 PRIu64
+# else
+#  define PRIuFAST8 "u"
+# endif
+#endif
+#if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIxFAST8 PRIx64
+# else
+#  define PRIxFAST8 "x"
+# endif
+#endif
+#if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIXFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIXFAST8 PRIX64
+# else
+#  define PRIXFAST8 "X"
+# endif
+#endif
+#if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define PRIdFAST16 PRId64
+# else
+#  define PRIdFAST16 "d"
+# endif
+#endif
+#if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define PRIiFAST16 PRIi64
+# else
+#  define PRIiFAST16 "i"
+# endif
+#endif
+#if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIoFAST16 PRIo64
+# else
+#  define PRIoFAST16 "o"
+# endif
+#endif
+#if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIuFAST16 PRIu64
+# else
+#  define PRIuFAST16 "u"
+# endif
+#endif
+#if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIxFAST16 PRIx64
+# else
+#  define PRIxFAST16 "x"
+# endif
+#endif
+#if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIXFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIXFAST16 PRIX64
+# else
+#  define PRIXFAST16 "X"
+# endif
+#endif
+#if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define PRIdFAST32 PRId64
+# else
+#  define PRIdFAST32 "d"
+# endif
+#endif
+#if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define PRIiFAST32 PRIi64
+# else
+#  define PRIiFAST32 "i"
+# endif
+#endif
+#if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIoFAST32 PRIo64
+# else
+#  define PRIoFAST32 "o"
+# endif
+#endif
+#if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIuFAST32 PRIu64
+# else
+#  define PRIuFAST32 "u"
+# endif
+#endif
+#if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIxFAST32 PRIx64
+# else
+#  define PRIxFAST32 "x"
+# endif
+#endif
+#if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIXFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIXFAST32 PRIX64
+# else
+#  define PRIXFAST32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIdFAST64
+#  define PRIdFAST64 PRId64
+# endif
+# if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIiFAST64
+#  define PRIiFAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIoFAST64
+#  define PRIoFAST64 PRIo64
+# endif
+# if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIuFAST64
+#  define PRIuFAST64 PRIu64
+# endif
+# if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIxFAST64
+#  define PRIxFAST64 PRIx64
+# endif
+# if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIXFAST64
+#  define PRIXFAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdMAX || @PRI_MACROS_BROKEN@
+# undef PRIdMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+#  define PRIdMAX PRId64
+# else
+#  define PRIdMAX "ld"
+# endif
+#endif
+#if !defined PRIiMAX || @PRI_MACROS_BROKEN@
+# undef PRIiMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+#  define PRIiMAX PRIi64
+# else
+#  define PRIiMAX "li"
+# endif
+#endif
+#if !defined PRIoMAX || @PRI_MACROS_BROKEN@
+# undef PRIoMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define PRIoMAX PRIo64
+# else
+#  define PRIoMAX "lo"
+# endif
+#endif
+#if !defined PRIuMAX || @PRI_MACROS_BROKEN@
+# undef PRIuMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define PRIuMAX PRIu64
+# else
+#  define PRIuMAX "lu"
+# endif
+#endif
+#if !defined PRIxMAX || @PRI_MACROS_BROKEN@
+# undef PRIxMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define PRIxMAX PRIx64
+# else
+#  define PRIxMAX "lx"
+# endif
+#endif
+#if !defined PRIXMAX || @PRI_MACROS_BROKEN@
+# undef PRIXMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define PRIXMAX PRIX64
+# else
+#  define PRIXMAX "lX"
+# endif
+#endif
+
+#if !defined PRIdPTR || @PRI_MACROS_BROKEN@
+# undef PRIdPTR
+# ifdef INTPTR_MAX
+#  define PRIdPTR @PRIPTR_PREFIX@ "d"
+# endif
+#endif
+#if !defined PRIiPTR || @PRI_MACROS_BROKEN@
+# undef PRIiPTR
+# ifdef INTPTR_MAX
+#  define PRIiPTR @PRIPTR_PREFIX@ "i"
+# endif
+#endif
+#if !defined PRIoPTR || @PRI_MACROS_BROKEN@
+# undef PRIoPTR
+# ifdef UINTPTR_MAX
+#  define PRIoPTR @PRIPTR_PREFIX@ "o"
+# endif
+#endif
+#if !defined PRIuPTR || @PRI_MACROS_BROKEN@
+# undef PRIuPTR
+# ifdef UINTPTR_MAX
+#  define PRIuPTR @PRIPTR_PREFIX@ "u"
+# endif
+#endif
+#if !defined PRIxPTR || @PRI_MACROS_BROKEN@
+# undef PRIxPTR
+# ifdef UINTPTR_MAX
+#  define PRIxPTR @PRIPTR_PREFIX@ "x"
+# endif
+#endif
+#if !defined PRIXPTR || @PRI_MACROS_BROKEN@
+# undef PRIXPTR
+# ifdef UINTPTR_MAX
+#  define PRIXPTR @PRIPTR_PREFIX@ "X"
+# endif
+#endif
+
+#if !defined SCNd8 || @PRI_MACROS_BROKEN@
+# undef SCNd8
+# ifdef INT8_MAX
+#  define SCNd8 "hhd"
+# endif
+#endif
+#if !defined SCNi8 || @PRI_MACROS_BROKEN@
+# undef SCNi8
+# ifdef INT8_MAX
+#  define SCNi8 "hhi"
+# endif
+#endif
+#if !defined SCNo8 || @PRI_MACROS_BROKEN@
+# undef SCNo8
+# ifdef UINT8_MAX
+#  define SCNo8 "hho"
+# endif
+#endif
+#if !defined SCNu8 || @PRI_MACROS_BROKEN@
+# undef SCNu8
+# ifdef UINT8_MAX
+#  define SCNu8 "hhu"
+# endif
+#endif
+#if !defined SCNx8 || @PRI_MACROS_BROKEN@
+# undef SCNx8
+# ifdef UINT8_MAX
+#  define SCNx8 "hhx"
+# endif
+#endif
+#if !defined SCNd16 || @PRI_MACROS_BROKEN@
+# undef SCNd16
+# ifdef INT16_MAX
+#  define SCNd16 "hd"
+# endif
+#endif
+#if !defined SCNi16 || @PRI_MACROS_BROKEN@
+# undef SCNi16
+# ifdef INT16_MAX
+#  define SCNi16 "hi"
+# endif
+#endif
+#if !defined SCNo16 || @PRI_MACROS_BROKEN@
+# undef SCNo16
+# ifdef UINT16_MAX
+#  define SCNo16 "ho"
+# endif
+#endif
+#if !defined SCNu16 || @PRI_MACROS_BROKEN@
+# undef SCNu16
+# ifdef UINT16_MAX
+#  define SCNu16 "hu"
+# endif
+#endif
+#if !defined SCNx16 || @PRI_MACROS_BROKEN@
+# undef SCNx16
+# ifdef UINT16_MAX
+#  define SCNx16 "hx"
+# endif
+#endif
+#if !defined SCNd32 || @PRI_MACROS_BROKEN@
+# undef SCNd32
+# ifdef INT32_MAX
+#  define SCNd32 "d"
+# endif
+#endif
+#if !defined SCNi32 || @PRI_MACROS_BROKEN@
+# undef SCNi32
+# ifdef INT32_MAX
+#  define SCNi32 "i"
+# endif
+#endif
+#if !defined SCNo32 || @PRI_MACROS_BROKEN@
+# undef SCNo32
+# ifdef UINT32_MAX
+#  define SCNo32 "o"
+# endif
+#endif
+#if !defined SCNu32 || @PRI_MACROS_BROKEN@
+# undef SCNu32
+# ifdef UINT32_MAX
+#  define SCNu32 "u"
+# endif
+#endif
+#if !defined SCNx32 || @PRI_MACROS_BROKEN@
+# undef SCNx32
+# ifdef UINT32_MAX
+#  define SCNx32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
+#  define _SCN64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _SCN64_PREFIX "I64"
+# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#  define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNd64 || @PRI_MACROS_BROKEN@
+#  undef SCNd64
+#  define SCNd64 _SCN64_PREFIX "d"
+# endif
+# if !defined SCNi64 || @PRI_MACROS_BROKEN@
+#  undef SCNi64
+#  define SCNi64 _SCN64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
+#  define _SCNu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _SCNu64_PREFIX "I64"
+# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#  define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNo64 || @PRI_MACROS_BROKEN@
+#  undef SCNo64
+#  define SCNo64 _SCNu64_PREFIX "o"
+# endif
+# if !defined SCNu64 || @PRI_MACROS_BROKEN@
+#  undef SCNu64
+#  define SCNu64 _SCNu64_PREFIX "u"
+# endif
+# if !defined SCNx64 || @PRI_MACROS_BROKEN@
+#  undef SCNx64
+#  define SCNx64 _SCNu64_PREFIX "x"
+# endif
+#endif
+
+#if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNdLEAST8
+# define SCNdLEAST8 "hhd"
+#endif
+#if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNiLEAST8
+# define SCNiLEAST8 "hhi"
+#endif
+#if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNoLEAST8
+# define SCNoLEAST8 "hho"
+#endif
+#if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNuLEAST8
+# define SCNuLEAST8 "hhu"
+#endif
+#if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNxLEAST8
+# define SCNxLEAST8 "hhx"
+#endif
+#if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNdLEAST16
+# define SCNdLEAST16 "hd"
+#endif
+#if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNiLEAST16
+# define SCNiLEAST16 "hi"
+#endif
+#if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNoLEAST16
+# define SCNoLEAST16 "ho"
+#endif
+#if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNuLEAST16
+# define SCNuLEAST16 "hu"
+#endif
+#if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNxLEAST16
+# define SCNxLEAST16 "hx"
+#endif
+#if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNdLEAST32
+# define SCNdLEAST32 "d"
+#endif
+#if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNiLEAST32
+# define SCNiLEAST32 "i"
+#endif
+#if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNoLEAST32
+# define SCNoLEAST32 "o"
+#endif
+#if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNuLEAST32
+# define SCNuLEAST32 "u"
+#endif
+#if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNxLEAST32
+# define SCNxLEAST32 "x"
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNdLEAST64
+#  define SCNdLEAST64 SCNd64
+# endif
+# if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNiLEAST64
+#  define SCNiLEAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNoLEAST64
+#  define SCNoLEAST64 SCNo64
+# endif
+# if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNuLEAST64
+#  define SCNuLEAST64 SCNu64
+# endif
+# if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNxLEAST64
+#  define SCNxLEAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define SCNdFAST8 SCNd64
+# elif INT_FAST8_MAX == 0x7fff
+#  define SCNdFAST8 "hd"
+# elif INT_FAST8_MAX == 0x7f
+#  define SCNdFAST8 "hhd"
+# else
+#  define SCNdFAST8 "d"
+# endif
+#endif
+#if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define SCNiFAST8 SCNi64
+# elif INT_FAST8_MAX == 0x7fff
+#  define SCNiFAST8 "hi"
+# elif INT_FAST8_MAX == 0x7f
+#  define SCNiFAST8 "hhi"
+# else
+#  define SCNiFAST8 "i"
+# endif
+#endif
+#if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNoFAST8 SCNo64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNoFAST8 "ho"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNoFAST8 "hho"
+# else
+#  define SCNoFAST8 "o"
+# endif
+#endif
+#if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNuFAST8 SCNu64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNuFAST8 "hu"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNuFAST8 "hhu"
+# else
+#  define SCNuFAST8 "u"
+# endif
+#endif
+#if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNxFAST8 SCNx64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNxFAST8 "hx"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNxFAST8 "hhx"
+# else
+#  define SCNxFAST8 "x"
+# endif
+#endif
+#if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define SCNdFAST16 SCNd64
+# elif INT_FAST16_MAX == 0x7fff
+#  define SCNdFAST16 "hd"
+# else
+#  define SCNdFAST16 "d"
+# endif
+#endif
+#if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define SCNiFAST16 SCNi64
+# elif INT_FAST16_MAX == 0x7fff
+#  define SCNiFAST16 "hi"
+# else
+#  define SCNiFAST16 "i"
+# endif
+#endif
+#if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNoFAST16 SCNo64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNoFAST16 "ho"
+# else
+#  define SCNoFAST16 "o"
+# endif
+#endif
+#if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNuFAST16 SCNu64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNuFAST16 "hu"
+# else
+#  define SCNuFAST16 "u"
+# endif
+#endif
+#if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNxFAST16 SCNx64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNxFAST16 "hx"
+# else
+#  define SCNxFAST16 "x"
+# endif
+#endif
+#if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define SCNdFAST32 SCNd64
+# else
+#  define SCNdFAST32 "d"
+# endif
+#endif
+#if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define SCNiFAST32 SCNi64
+# else
+#  define SCNiFAST32 "i"
+# endif
+#endif
+#if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNoFAST32 SCNo64
+# else
+#  define SCNoFAST32 "o"
+# endif
+#endif
+#if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNuFAST32 SCNu64
+# else
+#  define SCNuFAST32 "u"
+# endif
+#endif
+#if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNxFAST32 SCNx64
+# else
+#  define SCNxFAST32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNdFAST64
+#  define SCNdFAST64 SCNd64
+# endif
+# if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNiFAST64
+#  define SCNiFAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNoFAST64
+#  define SCNoFAST64 SCNo64
+# endif
+# if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNuFAST64
+#  define SCNuFAST64 SCNu64
+# endif
+# if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNxFAST64
+#  define SCNxFAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdMAX || @PRI_MACROS_BROKEN@
+# undef SCNdMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+#  define SCNdMAX SCNd64
+# else
+#  define SCNdMAX "ld"
+# endif
+#endif
+#if !defined SCNiMAX || @PRI_MACROS_BROKEN@
+# undef SCNiMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+#  define SCNiMAX SCNi64
+# else
+#  define SCNiMAX "li"
+# endif
+#endif
+#if !defined SCNoMAX || @PRI_MACROS_BROKEN@
+# undef SCNoMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define SCNoMAX SCNo64
+# else
+#  define SCNoMAX "lo"
+# endif
+#endif
+#if !defined SCNuMAX || @PRI_MACROS_BROKEN@
+# undef SCNuMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define SCNuMAX SCNu64
+# else
+#  define SCNuMAX "lu"
+# endif
+#endif
+#if !defined SCNxMAX || @PRI_MACROS_BROKEN@
+# undef SCNxMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define SCNxMAX SCNx64
+# else
+#  define SCNxMAX "lx"
+# endif
+#endif
+
+#if !defined SCNdPTR || @PRI_MACROS_BROKEN@
+# undef SCNdPTR
+# ifdef INTPTR_MAX
+#  define SCNdPTR @PRIPTR_PREFIX@ "d"
+# endif
+#endif
+#if !defined SCNiPTR || @PRI_MACROS_BROKEN@
+# undef SCNiPTR
+# ifdef INTPTR_MAX
+#  define SCNiPTR @PRIPTR_PREFIX@ "i"
+# endif
+#endif
+#if !defined SCNoPTR || @PRI_MACROS_BROKEN@
+# undef SCNoPTR
+# ifdef UINTPTR_MAX
+#  define SCNoPTR @PRIPTR_PREFIX@ "o"
+# endif
+#endif
+#if !defined SCNuPTR || @PRI_MACROS_BROKEN@
+# undef SCNuPTR
+# ifdef UINTPTR_MAX
+#  define SCNuPTR @PRIPTR_PREFIX@ "u"
+# endif
+#endif
+#if !defined SCNxPTR || @PRI_MACROS_BROKEN@
+# undef SCNxPTR
+# ifdef UINTPTR_MAX
+#  define SCNxPTR @PRIPTR_PREFIX@ "x"
+# endif
+#endif
+
+/* 7.8.2 Functions for greatest-width integer types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if @GNULIB_IMAXABS@
+# if !@HAVE_DECL_IMAXABS@
+extern intmax_t imaxabs (intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxabs
+# if HAVE_RAW_DECL_IMAXABS
+_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
+                 "use gnulib module imaxabs for portability");
+# endif
+#endif
+
+#if @GNULIB_IMAXDIV@
+# if !@HAVE_DECL_IMAXDIV@
+#  if !GNULIB_defined_imaxdiv_t
+typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
+#   define GNULIB_defined_imaxdiv_t 1
+#  endif
+extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxdiv
+# if HAVE_RAW_DECL_IMAXDIV
+_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
+                 "use gnulib module imaxdiv for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOIMAX@
+# if @REPLACE_STRTOIMAX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtoimax
+#   define strtoimax rpl_strtoimax
+#  endif
+_GL_FUNCDECL_RPL (strtoimax, intmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int));
+# else
+#  if !@HAVE_DECL_STRTOIMAX@
+#   undef strtoimax
+_GL_FUNCDECL_SYS (strtoimax, intmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int));
+# endif
+_GL_CXXALIASWARN (strtoimax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoimax
+# if HAVE_RAW_DECL_STRTOIMAX
+_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
+                 "use gnulib module strtoimax for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOUMAX@
+# if !@HAVE_DECL_STRTOUMAX@
+#  undef strtoumax
+_GL_FUNCDECL_SYS (strtoumax, uintmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int));
+_GL_CXXALIASWARN (strtoumax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoumax
+# if HAVE_RAW_DECL_STRTOUMAX
+_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
+                 "use gnulib module strtoumax for portability");
+# endif
+#endif
+
+/* Don't bother defining or declaring wcstoimax and wcstoumax, since
+   wide-character functions like this are hardly ever useful.  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/lib/isnan.c b/lib/isnan.c
new file mode 100644
index 0000000..a5a7d92
--- /dev/null
+++ b/lib/isnan.c
@@ -0,0 +1,177 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#include <config.h>
+
+/* Specification.  */
+#ifdef USE_LONG_DOUBLE
+/* Specification found in math.h or isnanl-nolibm.h.  */
+extern int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
+#elif ! defined USE_FLOAT
+/* Specification found in math.h or isnand-nolibm.h.  */
+extern int rpl_isnand (double x);
+#else /* defined USE_FLOAT */
+/* Specification found in math.h or isnanf-nolibm.h.  */
+extern int rpl_isnanf (float x);
+#endif
+
+#include <float.h>
+#include <string.h>
+
+#include "float+.h"
+
+#ifdef USE_LONG_DOUBLE
+# define FUNC rpl_isnanl
+# define DOUBLE long double
+# define MAX_EXP LDBL_MAX_EXP
+# define MIN_EXP LDBL_MIN_EXP
+# if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT
+#  define KNOWN_EXPBIT0_LOCATION
+#  define EXPBIT0_WORD LDBL_EXPBIT0_WORD
+#  define EXPBIT0_BIT LDBL_EXPBIT0_BIT
+# endif
+# define SIZE SIZEOF_LDBL
+# define L_(literal) literal##L
+#elif ! defined USE_FLOAT
+# define FUNC rpl_isnand
+# define DOUBLE double
+# define MAX_EXP DBL_MAX_EXP
+# define MIN_EXP DBL_MIN_EXP
+# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT
+#  define KNOWN_EXPBIT0_LOCATION
+#  define EXPBIT0_WORD DBL_EXPBIT0_WORD
+#  define EXPBIT0_BIT DBL_EXPBIT0_BIT
+# endif
+# define SIZE SIZEOF_DBL
+# define L_(literal) literal
+#else /* defined USE_FLOAT */
+# define FUNC rpl_isnanf
+# define DOUBLE float
+# define MAX_EXP FLT_MAX_EXP
+# define MIN_EXP FLT_MIN_EXP
+# if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
+#  define KNOWN_EXPBIT0_LOCATION
+#  define EXPBIT0_WORD FLT_EXPBIT0_WORD
+#  define EXPBIT0_BIT FLT_EXPBIT0_BIT
+# endif
+# define SIZE SIZEOF_FLT
+# define L_(literal) literal##f
+#endif
+
+#define EXP_MASK ((MAX_EXP - MIN_EXP) | 7)
+
+#define NWORDS \
+  ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double;
+
+int
+FUNC (DOUBLE x)
+{
+#ifdef KNOWN_EXPBIT0_LOCATION
+# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+  /* Special CPU dependent code is needed to treat bit patterns outside the
+     IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities,
+     Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs.
+     These bit patterns are:
+       - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0,
+       - exponent = 0x0000, mantissa bit 63 = 1.
+     The NaN bit pattern is:
+       - exponent = 0x7FFF, mantissa >= 0x8000000000000001.  */
+  memory_double m;
+  unsigned int exponent;
+
+  m.value = x;
+  exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK;
+#  ifdef WORDS_BIGENDIAN
+  /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16.  */
+  if (exponent == 0)
+    return 1 & (m.word[0] >> 15);
+  else if (exponent == EXP_MASK)
+    return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0;
+  else
+    return 1 & ~(m.word[0] >> 15);
+#  else
+  /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0.  */
+  if (exponent == 0)
+    return (m.word[1] >> 31);
+  else if (exponent == EXP_MASK)
+    return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0;
+  else
+    return (m.word[1] >> 31) ^ 1;
+#  endif
+# else
+  /* Be careful to not do any floating-point operation on x, such as x == x,
+     because x may be a signaling NaN.  */
+#  if defined __SUNPRO_C || defined __ICC || defined _MSC_VER \
+      || defined __DECC || defined __TINYC__ \
+      || (defined __sgi && !defined __GNUC__)
+  /* The Sun C 5.0, Intel ICC 10.0, Microsoft Visual C/C++ 9.0, Compaq (ex-DEC)
+     6.4, and TinyCC compilers don't recognize the initializers as constant
+     expressions.  The Compaq compiler also fails when constant-folding
+     0.0 / 0.0 even when constant-folding is not required.  The Microsoft
+     Visual C/C++ compiler also fails when constant-folding 1.0 / 0.0 even
+     when constant-folding is not required. The SGI MIPSpro C compiler
+     complains about "floating-point operation result is out of range".  */
+  static DOUBLE zero = L_(0.0);
+  memory_double nan;
+  DOUBLE plus_inf = L_(1.0) / zero;
+  DOUBLE minus_inf = -L_(1.0) / zero;
+  nan.value = zero / zero;
+#  else
+  static memory_double nan = { L_(0.0) / L_(0.0) };
+  static DOUBLE plus_inf = L_(1.0) / L_(0.0);
+  static DOUBLE minus_inf = -L_(1.0) / L_(0.0);
+#  endif
+  {
+    memory_double m;
+
+    /* A NaN can be recognized through its exponent.  But exclude +Infinity and
+       -Infinity, which have the same exponent.  */
+    m.value = x;
+    if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD])
+         & (EXP_MASK << EXPBIT0_BIT))
+        == 0)
+      return (memcmp (&m.value, &plus_inf, SIZE) != 0
+              && memcmp (&m.value, &minus_inf, SIZE) != 0);
+    else
+      return 0;
+  }
+# endif
+#else
+  /* The configuration did not find sufficient information.  Give up about
+     the signaling NaNs, handle only the quiet NaNs.  */
+  if (x == x)
+    {
+# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+      /* Detect any special bit patterns that pass ==; see comment above.  */
+      memory_double m1;
+      memory_double m2;
+
+      memset (&m1.value, 0, SIZE);
+      memset (&m2.value, 0, SIZE);
+      m1.value = x;
+      m2.value = x + (x ? 0.0L : -0.0L);
+      if (memcmp (&m1.value, &m2.value, SIZE) != 0)
+        return 1;
+# endif
+      return 0;
+    }
+  else
+    return 1;
+#endif
+}
diff --git a/lib/isnand-nolibm.h b/lib/isnand-nolibm.h
new file mode 100644
index 0000000..56fb270
--- /dev/null
+++ b/lib/isnand-nolibm.h
@@ -0,0 +1,33 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if HAVE_ISNAND_IN_LIBC
+/* Get declaration of isnan macro.  */
+# include <math.h>
+# if __GNUC__ >= 4
+   /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#  undef isnand
+#  define isnand(x) __builtin_isnan ((double)(x))
+# else
+#  undef isnand
+#  define isnand(x) isnan ((double)(x))
+# endif
+#else
+/* Test whether X is a NaN.  */
+# undef isnand
+# define isnand rpl_isnand
+extern int isnand (double x);
+#endif
diff --git a/lib/isnand.c b/lib/isnand.c
new file mode 100644
index 0000000..ef815f3
--- /dev/null
+++ b/lib/isnand.c
@@ -0,0 +1,19 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2008.  */
+
+#include "isnan.c"
diff --git a/lib/isnanf-nolibm.h b/lib/isnanf-nolibm.h
new file mode 100644
index 0000000..9d550e0
--- /dev/null
+++ b/lib/isnanf-nolibm.h
@@ -0,0 +1,40 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if HAVE_ISNANF_IN_LIBC
+/* Get declaration of isnan macro or (older) isnanf function.  */
+# include <math.h>
+# if __GNUC__ >= 4
+   /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#  undef isnanf
+#  define isnanf(x) __builtin_isnanf ((float)(x))
+# elif defined isnan
+#  undef isnanf
+#  define isnanf(x) isnan ((float)(x))
+# else
+   /* Get declaration of isnanf(), if not declared in <math.h>.  */
+#  if defined __sgi
+   /* We can't include <ieeefp.h>, because it conflicts with our definition of
+      isnand.  Therefore declare isnanf separately.  */
+extern int isnanf (float x);
+#  endif
+# endif
+#else
+/* Test whether X is a NaN.  */
+# undef isnanf
+# define isnanf rpl_isnanf
+extern int isnanf (float x);
+#endif
diff --git a/lib/isnanf.c b/lib/isnanf.c
new file mode 100644
index 0000000..0816704
--- /dev/null
+++ b/lib/isnanf.c
@@ -0,0 +1,20 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#define USE_FLOAT
+#include "isnan.c"
diff --git a/lib/isnanl-nolibm.h b/lib/isnanl-nolibm.h
new file mode 100644
index 0000000..58d963d
--- /dev/null
+++ b/lib/isnanl-nolibm.h
@@ -0,0 +1,33 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if HAVE_ISNANL_IN_LIBC
+/* Get declaration of isnan macro or (older) isnanl function.  */
+# include <math.h>
+# if __GNUC__ >= 4
+   /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#  undef isnanl
+#  define isnanl(x) __builtin_isnanl ((long double)(x))
+# elif defined isnan
+#  undef isnanl
+#  define isnanl(x) isnan ((long double)(x))
+# endif
+#else
+/* Test whether X is a NaN.  */
+# undef isnanl
+# define isnanl rpl_isnanl
+extern int isnanl (long double x);
+#endif
diff --git a/lib/isnanl.c b/lib/isnanl.c
new file mode 100644
index 0000000..597ac2a
--- /dev/null
+++ b/lib/isnanl.c
@@ -0,0 +1,20 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#define USE_LONG_DOUBLE
+#include "isnan.c"
diff --git a/lib/iswblank.c b/lib/iswblank.c
new file mode 100644
index 0000000..f18de99
--- /dev/null
+++ b/lib/iswblank.c
@@ -0,0 +1,26 @@
+/* Test wide character for being blank.
+   Copyright (C) 2008-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wctype.h>
+
+int
+iswblank (wint_t wc)
+{
+  return wc == ' ' || wc == '\t';
+}
diff --git a/lib/itold.c b/lib/itold.c
new file mode 100644
index 0000000..95ff7e1
--- /dev/null
+++ b/lib/itold.c
@@ -0,0 +1,28 @@
+/* Replacement for 'int' to 'long double' conversion routine.
+   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <float.h>
+
+void
+_Qp_itoq (long double *result, int a)
+{
+  /* Convert from 'int' to 'double', then from 'double' to 'long double'.  */
+  *result = (double) a;
+}
diff --git a/lib/lbitset.c b/lib/lbitset.c
index 7d47a05..aa19f45 100644
--- a/lib/lbitset.c
+++ b/lib/lbitset.c
@@ -1,10 +1,13 @@
 /* Functions to support link list bitsets.
-   Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2004, 2006, 2009-2012 Free Software Foundation,
+   Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,14 +16,12 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "lbitset.h"
+
 #include "obstack.h"
 #include <stddef.h>
 #include <stdlib.h>
@@ -351,7 +352,7 @@
 
       /* ELT is the nearest to the one we want.  If it's not the one
 	 we want, the one we want does not exist.  */
-      if (elt && (windex - elt->index) < LBITSET_ELT_WORDS)
+      if (windex - elt->index < LBITSET_ELT_WORDS)
 	{
 	  bset->b.cindex = elt->index;
 	  bset->b.csize = LBITSET_ELT_WORDS;
@@ -935,17 +936,12 @@
 static void
 lbitset_not (bitset dst, bitset src)
 {
-  lbitset_elt *elt;
   lbitset_elt *selt;
   lbitset_elt *delt;
   bitset_windex i;
   unsigned int j;
   bitset_windex windex;
 
-  /* This is another unfriendly operation for a linked list
-     bitset!  */
-  elt = LBITSET_TAIL (dst);
-
   windex = (BITSET_SIZE_ (dst) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS;
 
   for (i = 0; i < windex; i += LBITSET_ELT_WORDS)
diff --git a/lib/lbitset.h b/lib/lbitset.h
index aaad834..79804da 100644
--- a/lib/lbitset.h
+++ b/lib/lbitset.h
@@ -1,20 +1,21 @@
 /* Functions to support lbitsets.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _LBITSET_H
 #define _LBITSET_H
diff --git a/lib/ldexpl.c b/lib/ldexpl.c
new file mode 100644
index 0000000..a6cfff9
--- /dev/null
+++ b/lib/ldexpl.c
@@ -0,0 +1,89 @@
+/* Emulation for ldexpl.
+   Contributed by Paolo Bonzini
+
+   Copyright 2002-2003, 2007-2012 Free Software Foundation, Inc.
+
+   This file is part of gnulib.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+long double
+ldexpl (long double x, int exp)
+{
+  return ldexp (x, exp);
+}
+
+#else
+
+# include <float.h>
+# include "fpucw.h"
+
+long double
+ldexpl (long double x, int exp)
+{
+  long double factor;
+  int bit;
+  DECL_LONG_DOUBLE_ROUNDING
+
+  BEGIN_LONG_DOUBLE_ROUNDING ();
+
+  /* Check for zero, nan and infinity. */
+  if (!(isnanl (x) || x + x == x))
+    {
+      if (exp < 0)
+        {
+          exp = -exp;
+          factor = 0.5L;
+        }
+      else
+        factor = 2.0L;
+
+      if (exp > 0)
+        for (bit = 1;;)
+          {
+            /* Invariant: Here bit = 2^i, factor = 2^-2^i or = 2^2^i,
+               and bit <= exp.  */
+            if (exp & bit)
+              x *= factor;
+            bit <<= 1;
+            if (bit > exp)
+              break;
+            factor = factor * factor;
+          }
+    }
+
+  END_LONG_DOUBLE_ROUNDING ();
+
+  return x;
+}
+
+#endif
+
+#if 0
+int
+main (void)
+{
+  long double x;
+  int y;
+  for (y = 0; y < 29; y++)
+    printf ("%5d %.16Lg %.16Lg\n", y, ldexpl (0.8L, y), ldexpl (0.8L, -y) * ldexpl (0.8L, y));
+}
+#endif
diff --git a/lib/libiberty.h b/lib/libiberty.h
index e8629e4..ad7b358 100644
--- a/lib/libiberty.h
+++ b/lib/libiberty.h
@@ -1,10 +1,11 @@
 /* Fake libiberty.h for Bison.
-   Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   Copyright (C) 2002-2004, 2009-2012 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.
+   the Free Software Foundation, either version 3 of the License, 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
@@ -12,8 +13,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 /* Bison depends on libiberty's implementation of bitsets, which
@@ -24,7 +24,7 @@
 # define BISON_LIBIBERTY_H_ 1
 
 # ifndef __attribute__
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
+#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
 #   define __attribute__(x)
 #  endif
 # endif
diff --git a/lib/localcharset.c b/lib/localcharset.c
new file mode 100644
index 0000000..8d16c87
--- /dev/null
+++ b/lib/localcharset.c
@@ -0,0 +1,553 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+   Copyright (C) 2000-2006, 2008-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "localcharset.h"
+
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
+# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# define WINDOWS_NATIVE
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
+# ifndef OS2
+#  define OS2
+# endif
+#endif
+
+#if !defined WINDOWS_NATIVE
+# include <unistd.h>
+# if HAVE_LANGINFO_CODESET
+#  include <langinfo.h>
+# else
+#  if 0 /* see comment below */
+#   include <locale.h>
+#  endif
+# endif
+# ifdef __CYGWIN__
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+# endif
+#elif defined WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* Get LIBDIR.  */
+#ifndef LIBDIR
+# include "configmake.h"
+#endif
+
+/* Define O_NOFOLLOW to 0 on platforms where it does not exist.  */
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Native Windows, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+#if HAVE_DECL_GETC_UNLOCKED
+# undef getc
+# define getc getc_unlocked
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+   possible multithread problem in the function get_charset_aliases. If we
+   are running in a threaded environment, and if two threads initialize
+   'charset_aliases' simultaneously, both will produce the same value,
+   and everything will be ok if the two assignments to 'charset_aliases'
+   are atomic. But I don't know what will happen if the two assignments mix.  */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+   read, else NULL.  Its format is:
+   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file.  */
+static const char *
+get_charset_aliases (void)
+{
+  const char *cp;
+
+  cp = charset_aliases;
+  if (cp == NULL)
+    {
+#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__)
+      const char *dir;
+      const char *base = "charset.alias";
+      char *file_name;
+
+      /* Make it possible to override the charset.alias location.  This is
+         necessary for running the testsuite before "make install".  */
+      dir = getenv ("CHARSETALIASDIR");
+      if (dir == NULL || dir[0] == '\0')
+        dir = relocate (LIBDIR);
+
+      /* Concatenate dir and base into freshly allocated file_name.  */
+      {
+        size_t dir_len = strlen (dir);
+        size_t base_len = strlen (base);
+        int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+        file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+        if (file_name != NULL)
+          {
+            memcpy (file_name, dir, dir_len);
+            if (add_slash)
+              file_name[dir_len] = DIRECTORY_SEPARATOR;
+            memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+          }
+      }
+
+      if (file_name == NULL)
+        /* Out of memory.  Treat the file as empty.  */
+        cp = "";
+      else
+        {
+          int fd;
+
+          /* Open the file.  Reject symbolic links on platforms that support
+             O_NOFOLLOW.  This is a security feature.  Without it, an attacker
+             could retrieve parts of the contents (namely, the tail of the
+             first line that starts with "* ") of an arbitrary file by placing
+             a symbolic link to that file under the name "charset.alias" in
+             some writable directory and defining the environment variable
+             CHARSETALIASDIR to point to that directory.  */
+          fd = open (file_name,
+                     O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0));
+          if (fd < 0)
+            /* File not found.  Treat it as empty.  */
+            cp = "";
+          else
+            {
+              FILE *fp;
+
+              fp = fdopen (fd, "r");
+              if (fp == NULL)
+                {
+                  /* Out of memory.  Treat the file as empty.  */
+                  close (fd);
+                  cp = "";
+                }
+              else
+                {
+                  /* Parse the file's contents.  */
+                  char *res_ptr = NULL;
+                  size_t res_size = 0;
+
+                  for (;;)
+                    {
+                      int c;
+                      char buf1[50+1];
+                      char buf2[50+1];
+                      size_t l1, l2;
+                      char *old_res_ptr;
+
+                      c = getc (fp);
+                      if (c == EOF)
+                        break;
+                      if (c == '\n' || c == ' ' || c == '\t')
+                        continue;
+                      if (c == '#')
+                        {
+                          /* Skip comment, to end of line.  */
+                          do
+                            c = getc (fp);
+                          while (!(c == EOF || c == '\n'));
+                          if (c == EOF)
+                            break;
+                          continue;
+                        }
+                      ungetc (c, fp);
+                      if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
+                        break;
+                      l1 = strlen (buf1);
+                      l2 = strlen (buf2);
+                      old_res_ptr = res_ptr;
+                      if (res_size == 0)
+                        {
+                          res_size = l1 + 1 + l2 + 1;
+                          res_ptr = (char *) malloc (res_size + 1);
+                        }
+                      else
+                        {
+                          res_size += l1 + 1 + l2 + 1;
+                          res_ptr = (char *) realloc (res_ptr, res_size + 1);
+                        }
+                      if (res_ptr == NULL)
+                        {
+                          /* Out of memory. */
+                          res_size = 0;
+                          free (old_res_ptr);
+                          break;
+                        }
+                      strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+                      strcpy (res_ptr + res_size - (l2 + 1), buf2);
+                    }
+                  fclose (fp);
+                  if (res_size == 0)
+                    cp = "";
+                  else
+                    {
+                      *(res_ptr + res_size) = '\0';
+                      cp = res_ptr;
+                    }
+                }
+            }
+
+          free (file_name);
+        }
+
+#else
+
+# if defined DARWIN7
+      /* To avoid the trouble of installing a file that is shared by many
+         GNU packages -- many packaging systems have problems with this --,
+         simply inline the aliases here.  */
+      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+           "ISO8859-2" "\0" "ISO-8859-2" "\0"
+           "ISO8859-4" "\0" "ISO-8859-4" "\0"
+           "ISO8859-5" "\0" "ISO-8859-5" "\0"
+           "ISO8859-7" "\0" "ISO-8859-7" "\0"
+           "ISO8859-9" "\0" "ISO-8859-9" "\0"
+           "ISO8859-13" "\0" "ISO-8859-13" "\0"
+           "ISO8859-15" "\0" "ISO-8859-15" "\0"
+           "KOI8-R" "\0" "KOI8-R" "\0"
+           "KOI8-U" "\0" "KOI8-U" "\0"
+           "CP866" "\0" "CP866" "\0"
+           "CP949" "\0" "CP949" "\0"
+           "CP1131" "\0" "CP1131" "\0"
+           "CP1251" "\0" "CP1251" "\0"
+           "eucCN" "\0" "GB2312" "\0"
+           "GB2312" "\0" "GB2312" "\0"
+           "eucJP" "\0" "EUC-JP" "\0"
+           "eucKR" "\0" "EUC-KR" "\0"
+           "Big5" "\0" "BIG5" "\0"
+           "Big5HKSCS" "\0" "BIG5-HKSCS" "\0"
+           "GBK" "\0" "GBK" "\0"
+           "GB18030" "\0" "GB18030" "\0"
+           "SJIS" "\0" "SHIFT_JIS" "\0"
+           "ARMSCII-8" "\0" "ARMSCII-8" "\0"
+           "PT154" "\0" "PT154" "\0"
+         /*"ISCII-DEV" "\0" "?" "\0"*/
+           "*" "\0" "UTF-8" "\0";
+# endif
+
+# if defined VMS
+      /* To avoid the troubles of an extra file charset.alias_vms in the
+         sources of many GNU packages, simply inline the aliases here.  */
+      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+         "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+         section 10.7 "Handling Different Character Sets".  */
+      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+           "ISO8859-2" "\0" "ISO-8859-2" "\0"
+           "ISO8859-5" "\0" "ISO-8859-5" "\0"
+           "ISO8859-7" "\0" "ISO-8859-7" "\0"
+           "ISO8859-8" "\0" "ISO-8859-8" "\0"
+           "ISO8859-9" "\0" "ISO-8859-9" "\0"
+           /* Japanese */
+           "eucJP" "\0" "EUC-JP" "\0"
+           "SJIS" "\0" "SHIFT_JIS" "\0"
+           "DECKANJI" "\0" "DEC-KANJI" "\0"
+           "SDECKANJI" "\0" "EUC-JP" "\0"
+           /* Chinese */
+           "eucTW" "\0" "EUC-TW" "\0"
+           "DECHANYU" "\0" "DEC-HANYU" "\0"
+           "DECHANZI" "\0" "GB2312" "\0"
+           /* Korean */
+           "DECKOREAN" "\0" "EUC-KR" "\0";
+# endif
+
+# if defined WINDOWS_NATIVE || defined __CYGWIN__
+      /* To avoid the troubles of installing a separate file in the same
+         directory as the DLL and of retrieving the DLL's directory at
+         runtime, simply inline the aliases here.  */
+
+      cp = "CP936" "\0" "GBK" "\0"
+           "CP1361" "\0" "JOHAB" "\0"
+           "CP20127" "\0" "ASCII" "\0"
+           "CP20866" "\0" "KOI8-R" "\0"
+           "CP20936" "\0" "GB2312" "\0"
+           "CP21866" "\0" "KOI8-RU" "\0"
+           "CP28591" "\0" "ISO-8859-1" "\0"
+           "CP28592" "\0" "ISO-8859-2" "\0"
+           "CP28593" "\0" "ISO-8859-3" "\0"
+           "CP28594" "\0" "ISO-8859-4" "\0"
+           "CP28595" "\0" "ISO-8859-5" "\0"
+           "CP28596" "\0" "ISO-8859-6" "\0"
+           "CP28597" "\0" "ISO-8859-7" "\0"
+           "CP28598" "\0" "ISO-8859-8" "\0"
+           "CP28599" "\0" "ISO-8859-9" "\0"
+           "CP28605" "\0" "ISO-8859-15" "\0"
+           "CP38598" "\0" "ISO-8859-8" "\0"
+           "CP51932" "\0" "EUC-JP" "\0"
+           "CP51936" "\0" "GB2312" "\0"
+           "CP51949" "\0" "EUC-KR" "\0"
+           "CP51950" "\0" "EUC-TW" "\0"
+           "CP54936" "\0" "GB18030" "\0"
+           "CP65001" "\0" "UTF-8" "\0";
+# endif
+#endif
+
+      charset_aliases = cp;
+    }
+
+  return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset (void)
+{
+  const char *codeset;
+  const char *aliases;
+
+#if !(defined WINDOWS_NATIVE || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+  /* Most systems support nl_langinfo (CODESET) nowadays.  */
+  codeset = nl_langinfo (CODESET);
+
+#  ifdef __CYGWIN__
+  /* Cygwin < 1.7 does not have locales.  nl_langinfo (CODESET) always
+     returns "US-ASCII".  Return the suffix of the locale name from the
+     environment variables (if present) or the codepage as a number.  */
+  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+    {
+      const char *locale;
+      static char buf[2 + 10 + 1];
+
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+        {
+          locale = getenv ("LC_CTYPE");
+          if (locale == NULL || locale[0] == '\0')
+            locale = getenv ("LANG");
+        }
+      if (locale != NULL && locale[0] != '\0')
+        {
+          /* If the locale name contains an encoding after the dot, return
+             it.  */
+          const char *dot = strchr (locale, '.');
+
+          if (dot != NULL)
+            {
+              const char *modifier;
+
+              dot++;
+              /* Look for the possible @... trailer and remove it, if any.  */
+              modifier = strchr (dot, '@');
+              if (modifier == NULL)
+                return dot;
+              if (modifier - dot < sizeof (buf))
+                {
+                  memcpy (buf, dot, modifier - dot);
+                  buf [modifier - dot] = '\0';
+                  return buf;
+                }
+            }
+        }
+
+      /* The Windows API has a function returning the locale's codepage as a
+         number: GetACP().  This encoding is used by Cygwin, unless the user
+         has set the environment variable CYGWIN=codepage:oem (which very few
+         people do).
+         Output directed to console windows needs to be converted (to
+         GetOEMCP() if the console is using a raster font, or to
+         GetConsoleOutputCP() if it is using a TrueType font).  Cygwin does
+         this conversion transparently (see winsup/cygwin/fhandler_console.cc),
+         converting to GetConsoleOutputCP().  This leads to correct results,
+         except when SetConsoleOutputCP has been called and a raster font is
+         in use.  */
+      sprintf (buf, "CP%u", GetACP ());
+      codeset = buf;
+    }
+#  endif
+
+# else
+
+  /* On old systems which lack it, use setlocale or getenv.  */
+  const char *locale = NULL;
+
+  /* But most old systems don't have a complete set of locales.  Some
+     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
+     use setlocale here; it would return "C" when it doesn't support the
+     locale name the user has set.  */
+#  if 0
+  locale = setlocale (LC_CTYPE, NULL);
+#  endif
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+        {
+          locale = getenv ("LC_CTYPE");
+          if (locale == NULL || locale[0] == '\0')
+            locale = getenv ("LANG");
+        }
+    }
+
+  /* On some old systems, one used to set locale = "iso8859_1". On others,
+     you set it to "language_COUNTRY.charset". In any case, we resolve it
+     through the charset.alias file.  */
+  codeset = locale;
+
+# endif
+
+#elif defined WINDOWS_NATIVE
+
+  static char buf[2 + 10 + 1];
+
+  /* The Windows API has a function returning the locale's codepage as a
+     number: GetACP().
+     When the output goes to a console window, it needs to be provided in
+     GetOEMCP() encoding if the console is using a raster font, or in
+     GetConsoleOutputCP() encoding if it is using a TrueType font.
+     But in GUI programs and for output sent to files and pipes, GetACP()
+     encoding is the best bet.  */
+  sprintf (buf, "CP%u", GetACP ());
+  codeset = buf;
+
+#elif defined OS2
+
+  const char *locale;
+  static char buf[2 + 10 + 1];
+  ULONG cp[3];
+  ULONG cplen;
+
+  /* Allow user to override the codeset, as set in the operating system,
+     with standard language environment variables.  */
+  locale = getenv ("LC_ALL");
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_CTYPE");
+      if (locale == NULL || locale[0] == '\0')
+        locale = getenv ("LANG");
+    }
+  if (locale != NULL && locale[0] != '\0')
+    {
+      /* If the locale name contains an encoding after the dot, return it.  */
+      const char *dot = strchr (locale, '.');
+
+      if (dot != NULL)
+        {
+          const char *modifier;
+
+          dot++;
+          /* Look for the possible @... trailer and remove it, if any.  */
+          modifier = strchr (dot, '@');
+          if (modifier == NULL)
+            return dot;
+          if (modifier - dot < sizeof (buf))
+            {
+              memcpy (buf, dot, modifier - dot);
+              buf [modifier - dot] = '\0';
+              return buf;
+            }
+        }
+
+      /* Resolve through the charset.alias file.  */
+      codeset = locale;
+    }
+  else
+    {
+      /* OS/2 has a function returning the locale's codepage as a number.  */
+      if (DosQueryCp (sizeof (cp), cp, &cplen))
+        codeset = "";
+      else
+        {
+          sprintf (buf, "CP%u", cp[0]);
+          codeset = buf;
+        }
+    }
+
+#endif
+
+  if (codeset == NULL)
+    /* The canonical name cannot be determined.  */
+    codeset = "";
+
+  /* Resolve alias. */
+  for (aliases = get_charset_aliases ();
+       *aliases != '\0';
+       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+    if (strcmp (codeset, aliases) == 0
+        || (aliases[0] == '*' && aliases[1] == '\0'))
+      {
+        codeset = aliases + strlen (aliases) + 1;
+        break;
+      }
+
+  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
+     the empty string as denoting "the locale's character encoding",
+     thus GNU libiconv would call this function a second time.  */
+  if (codeset[0] == '\0')
+    codeset = "ASCII";
+
+#ifdef DARWIN7
+  /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
+     (the default codeset) does not work when MB_CUR_MAX is 1.  */
+  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX <= 1)
+    codeset = "ASCII";
+#endif
+
+  return codeset;
+}
diff --git a/lib/localcharset.h b/lib/localcharset.h
new file mode 100644
index 0000000..39dc593
--- /dev/null
+++ b/lib/localcharset.h
@@ -0,0 +1,40 @@
+/* Determine a canonical name for the current locale's character encoding.
+   Copyright (C) 2000-2003, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU CHARSET Library.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/lib/main.c b/lib/main.c
index 98dedf9..7996c7f 100644
--- a/lib/main.c
+++ b/lib/main.c
@@ -1,23 +1,21 @@
 /* Yacc library main function.
 
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/malloc.c b/lib/malloc.c
index 58fa611..e0d5c89 100644
--- a/lib/malloc.c
+++ b/lib/malloc.c
@@ -1,9 +1,10 @@
 /* malloc() function that is glibc compatible.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+
+   Copyright (C) 1997-1998, 2006-2007, 2009-2012 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)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -12,25 +13,44 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
-/* written by Jim Meyering */
+/* written by Jim Meyering and Bruno Haible */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h.  */
+#ifdef malloc
+# define NEED_MALLOC_GNU 1
+# undef malloc
+/* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU.  */
+#elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU
+# define NEED_MALLOC_GNU 1
 #endif
-#undef malloc
 
 #include <stdlib.h>
 
+#include <errno.h>
+
 /* Allocate an N-byte block of memory from the heap.
    If N is zero, allocate a 1-byte block.  */
 
 void *
 rpl_malloc (size_t n)
 {
+  void *result;
+
+#if NEED_MALLOC_GNU
   if (n == 0)
     n = 1;
-  return malloc (n);
+#endif
+
+  result = malloc (n);
+
+#if !HAVE_MALLOC_POSIX
+  if (result == NULL)
+    errno = ENOMEM;
+#endif
+
+  return result;
 }
diff --git a/lib/math.c b/lib/math.c
new file mode 100644
index 0000000..ddb2ded
--- /dev/null
+++ b/lib/math.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define _GL_MATH_INLINE _GL_EXTERN_INLINE
+#include "math.h"
diff --git a/lib/math.in.h b/lib/math.in.h
new file mode 100644
index 0000000..252e205
--- /dev/null
+++ b/lib/math.in.h
@@ -0,0 +1,2275 @@
+/* A GNU-like <math.h>.
+
+   Copyright (C) 2002-2003, 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_MATH_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+
+#ifndef _@GUARD_PREFIX@_MATH_H
+#define _@GUARD_PREFIX@_MATH_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_MATH_INLINE
+# define _GL_MATH_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+#ifdef __cplusplus
+/* Helper macros to define type-generic function FUNC as overloaded functions,
+   rather than as macros like in C.  POSIX declares these with an argument of
+   real-floating (that is, one of float, double, or long double).  */
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \
+static inline int                                                   \
+_gl_cxx_ ## func ## f (float f)                                     \
+{                                                                   \
+  return func (f);                                                  \
+}                                                                   \
+static inline int                                                   \
+_gl_cxx_ ## func ## d (double d)                                    \
+{                                                                   \
+  return func (d);                                                  \
+}                                                                   \
+static inline int                                                   \
+_gl_cxx_ ## func ## l (long double l)                               \
+{                                                                   \
+  return func (l);                                                  \
+}
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \
+inline int                                                          \
+func (float f)                                                      \
+{                                                                   \
+  return _gl_cxx_ ## func ## f (f);                                 \
+}                                                                   \
+inline int                                                          \
+func (double d)                                                     \
+{                                                                   \
+  return _gl_cxx_ ## func ## d (d);                                 \
+}                                                                   \
+inline int                                                          \
+func (long double l)                                                \
+{                                                                   \
+  return _gl_cxx_ ## func ## l (l);                                 \
+}
+#endif
+
+/* Helper macros to define a portability warning for the
+   classification macro FUNC called with VALUE.  POSIX declares the
+   classification macros with an argument of real-floating (that is,
+   one of float, double, or long double).  */
+#define _GL_WARN_REAL_FLOATING_DECL(func) \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## f (float f)                                         \
+{                                                                   \
+  return func (f);                                                  \
+}                                                                   \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## d (double d)                                        \
+{                                                                   \
+  return func (d);                                                  \
+}                                                                   \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## l (long double l)                                   \
+{                                                                   \
+  return func (l);                                                  \
+}                                                                   \
+_GL_WARN_ON_USE (rpl_ ## func ## f, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability");    \
+_GL_WARN_ON_USE (rpl_ ## func ## d, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability");    \
+_GL_WARN_ON_USE (rpl_ ## func ## l, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability")
+#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \
+  (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value)     \
+   : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value)  \
+   : rpl_ ## func ## l (value))
+
+
+#if @REPLACE_ITOLD@
+/* Pull in a function that fixes the 'int' to 'long double' conversion
+   of glibc 2.7.  */
+_GL_EXTERN_C void _Qp_itoq (long double *, int);
+static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq;
+#endif
+
+
+/* POSIX allows platforms that don't support NAN.  But all major
+   machines in the past 15 years have supported something close to
+   IEEE NaN, so we define this unconditionally.  We also must define
+   it on platforms like Solaris 10, where NAN is present but defined
+   as a function pointer rather than a floating point constant.  */
+#if !defined NAN || @REPLACE_NAN@
+# if !GNULIB_defined_NAN
+#  undef NAN
+  /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler
+     choke on the expression 0.0 / 0.0.  */
+#  if defined __DECC || defined _MSC_VER
+_GL_MATH_INLINE float
+_NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#   define NAN (_NaN())
+#  else
+#   define NAN (0.0f / 0.0f)
+#  endif
+#  define GNULIB_defined_NAN 1
+# endif
+#endif
+
+/* Solaris 10 defines HUGE_VAL, but as a function pointer rather
+   than a floating point constant.  */
+#if @REPLACE_HUGE_VAL@
+# undef HUGE_VALF
+# define HUGE_VALF (1.0f / 0.0f)
+# undef HUGE_VAL
+# define HUGE_VAL (1.0 / 0.0)
+# undef HUGE_VALL
+# define HUGE_VALL (1.0L / 0.0L)
+#endif
+
+/* HUGE_VALF is a 'float' Infinity.  */
+#ifndef HUGE_VALF
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f.  */
+#  define HUGE_VALF (1e25f * 1e25f)
+# else
+#  define HUGE_VALF (1.0f / 0.0f)
+# endif
+#endif
+
+/* HUGE_VAL is a 'double' Infinity.  */
+#ifndef HUGE_VAL
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0.  */
+#  define HUGE_VAL (1e250 * 1e250)
+# else
+#  define HUGE_VAL (1.0 / 0.0)
+# endif
+#endif
+
+/* HUGE_VALL is a 'long double' Infinity.  */
+#ifndef HUGE_VALL
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L.  */
+#  define HUGE_VALL (1e250L * 1e250L)
+# else
+#  define HUGE_VALL (1.0L / 0.0L)
+# endif
+#endif
+
+
+/* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined.  */
+#if !(defined FP_ILOGB0 && defined FP_ILOGBNAN)
+# if defined __NetBSD__ || defined __sgi
+  /* NetBSD, IRIX 6.5: match what ilogb() does */
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# elif defined _AIX
+  /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
+# elif defined __sun
+  /* Solaris 9: match what ilogb() does */
+#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
+#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
+# else
+  /* Gnulib defined values.  */
+#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# endif
+#endif
+
+
+#if @GNULIB_ACOSF@
+# if !@HAVE_ACOSF@
+#  undef acosf
+_GL_FUNCDECL_SYS (acosf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (acosf, float, (float x));
+_GL_CXXALIASWARN (acosf);
+#elif defined GNULIB_POSIXCHECK
+# undef acosf
+# if HAVE_RAW_DECL_ACOSF
+_GL_WARN_ON_USE (acosf, "acosf is unportable - "
+                 "use gnulib module acosf for portability");
+# endif
+#endif
+
+#if @GNULIB_ACOSL@
+# if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@
+#  undef acosl
+_GL_FUNCDECL_SYS (acosl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (acosl, long double, (long double x));
+_GL_CXXALIASWARN (acosl);
+#elif defined GNULIB_POSIXCHECK
+# undef acosl
+# if HAVE_RAW_DECL_ACOSL
+_GL_WARN_ON_USE (acosl, "acosl is unportable - "
+                 "use gnulib module acosl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ASINF@
+# if !@HAVE_ASINF@
+#  undef asinf
+_GL_FUNCDECL_SYS (asinf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (asinf, float, (float x));
+_GL_CXXALIASWARN (asinf);
+#elif defined GNULIB_POSIXCHECK
+# undef asinf
+# if HAVE_RAW_DECL_ASINF
+_GL_WARN_ON_USE (asinf, "asinf is unportable - "
+                 "use gnulib module asinf for portability");
+# endif
+#endif
+
+#if @GNULIB_ASINL@
+# if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@
+#  undef asinl
+_GL_FUNCDECL_SYS (asinl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (asinl, long double, (long double x));
+_GL_CXXALIASWARN (asinl);
+#elif defined GNULIB_POSIXCHECK
+# undef asinl
+# if HAVE_RAW_DECL_ASINL
+_GL_WARN_ON_USE (asinl, "asinl is unportable - "
+                 "use gnulib module asinl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ATANF@
+# if !@HAVE_ATANF@
+#  undef atanf
+_GL_FUNCDECL_SYS (atanf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (atanf, float, (float x));
+_GL_CXXALIASWARN (atanf);
+#elif defined GNULIB_POSIXCHECK
+# undef atanf
+# if HAVE_RAW_DECL_ATANF
+_GL_WARN_ON_USE (atanf, "atanf is unportable - "
+                 "use gnulib module atanf for portability");
+# endif
+#endif
+
+#if @GNULIB_ATANL@
+# if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@
+#  undef atanl
+_GL_FUNCDECL_SYS (atanl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (atanl, long double, (long double x));
+_GL_CXXALIASWARN (atanl);
+#elif defined GNULIB_POSIXCHECK
+# undef atanl
+# if HAVE_RAW_DECL_ATANL
+_GL_WARN_ON_USE (atanl, "atanl is unportable - "
+                 "use gnulib module atanl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ATAN2F@
+# if !@HAVE_ATAN2F@
+#  undef atan2f
+_GL_FUNCDECL_SYS (atan2f, float, (float y, float x));
+# endif
+_GL_CXXALIAS_SYS (atan2f, float, (float y, float x));
+_GL_CXXALIASWARN (atan2f);
+#elif defined GNULIB_POSIXCHECK
+# undef atan2f
+# if HAVE_RAW_DECL_ATAN2F
+_GL_WARN_ON_USE (atan2f, "atan2f is unportable - "
+                 "use gnulib module atan2f for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CBRTF@
+# if @REPLACE_CBRTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cbrtf
+#   define cbrtf rpl_cbrtf
+#  endif
+_GL_FUNCDECL_RPL (cbrtf, float, (float x));
+_GL_CXXALIAS_RPL (cbrtf, float, (float x));
+# else
+#  if !@HAVE_DECL_CBRTF@
+_GL_FUNCDECL_SYS (cbrtf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (cbrtf, float, (float x));
+# endif
+_GL_CXXALIASWARN (cbrtf);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrtf
+# if HAVE_RAW_DECL_CBRTF
+_GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - "
+                 "use gnulib module cbrtf for portability");
+# endif
+#endif
+
+#if @GNULIB_CBRT@
+# if !@HAVE_CBRT@
+_GL_FUNCDECL_SYS (cbrt, double, (double x));
+# endif
+_GL_CXXALIAS_SYS (cbrt, double, (double x));
+_GL_CXXALIASWARN (cbrt);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrt
+# if HAVE_RAW_DECL_CBRT
+_GL_WARN_ON_USE (cbrt, "cbrt is unportable - "
+                 "use gnulib module cbrt for portability");
+# endif
+#endif
+
+#if @GNULIB_CBRTL@
+# if @REPLACE_CBRTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cbrtl
+#   define cbrtl rpl_cbrtl
+#  endif
+_GL_FUNCDECL_RPL (cbrtl, long double, (long double x));
+_GL_CXXALIAS_RPL (cbrtl, long double, (long double x));
+# else
+#  if !@HAVE_DECL_CBRTL@
+_GL_FUNCDECL_SYS (cbrtl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (cbrtl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (cbrtl);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrtl
+# if HAVE_RAW_DECL_CBRTL
+_GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - "
+                 "use gnulib module cbrtl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CEILF@
+# if @REPLACE_CEILF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceilf
+#   define ceilf rpl_ceilf
+#  endif
+_GL_FUNCDECL_RPL (ceilf, float, (float x));
+_GL_CXXALIAS_RPL (ceilf, float, (float x));
+# else
+#  if !@HAVE_DECL_CEILF@
+#   undef ceilf
+_GL_FUNCDECL_SYS (ceilf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (ceilf, float, (float x));
+# endif
+_GL_CXXALIASWARN (ceilf);
+#elif defined GNULIB_POSIXCHECK
+# undef ceilf
+# if HAVE_RAW_DECL_CEILF
+_GL_WARN_ON_USE (ceilf, "ceilf is unportable - "
+                 "use gnulib module ceilf for portability");
+# endif
+#endif
+
+#if @GNULIB_CEIL@
+# if @REPLACE_CEIL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define ceil rpl_ceil
+#  endif
+_GL_FUNCDECL_RPL (ceil, double, (double x));
+_GL_CXXALIAS_RPL (ceil, double, (double x));
+# else
+_GL_CXXALIAS_SYS (ceil, double, (double x));
+# endif
+_GL_CXXALIASWARN (ceil);
+#endif
+
+#if @GNULIB_CEILL@
+# if @REPLACE_CEILL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceill
+#   define ceill rpl_ceill
+#  endif
+_GL_FUNCDECL_RPL (ceill, long double, (long double x));
+_GL_CXXALIAS_RPL (ceill, long double, (long double x));
+# else
+#  if !@HAVE_DECL_CEILL@
+#   undef ceill
+_GL_FUNCDECL_SYS (ceill, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (ceill, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (ceill);
+#elif defined GNULIB_POSIXCHECK
+# undef ceill
+# if HAVE_RAW_DECL_CEILL
+_GL_WARN_ON_USE (ceill, "ceill is unportable - "
+                 "use gnulib module ceill for portability");
+# endif
+#endif
+
+
+#if @GNULIB_COPYSIGNF@
+# if !@HAVE_DECL_COPYSIGNF@
+_GL_FUNCDECL_SYS (copysignf, float, (float x, float y));
+# endif
+_GL_CXXALIAS_SYS (copysignf, float, (float x, float y));
+_GL_CXXALIASWARN (copysignf);
+#elif defined GNULIB_POSIXCHECK
+# undef copysignf
+# if HAVE_RAW_DECL_COPYSIGNF
+_GL_WARN_ON_USE (copysignf, "copysignf is unportable - "
+                 "use gnulib module copysignf for portability");
+# endif
+#endif
+
+#if @GNULIB_COPYSIGN@
+# if !@HAVE_COPYSIGN@
+_GL_FUNCDECL_SYS (copysign, double, (double x, double y));
+# endif
+_GL_CXXALIAS_SYS (copysign, double, (double x, double y));
+_GL_CXXALIASWARN (copysign);
+#elif defined GNULIB_POSIXCHECK
+# undef copysign
+# if HAVE_RAW_DECL_COPYSIGN
+_GL_WARN_ON_USE (copysign, "copysign is unportable - "
+                 "use gnulib module copysign for portability");
+# endif
+#endif
+
+#if @GNULIB_COPYSIGNL@
+# if !@HAVE_COPYSIGNL@
+_GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y));
+_GL_CXXALIASWARN (copysignl);
+#elif defined GNULIB_POSIXCHECK
+# undef copysignl
+# if HAVE_RAW_DECL_COPYSIGNL
+_GL_WARN_ON_USE (copysign, "copysignl is unportable - "
+                 "use gnulib module copysignl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_COSF@
+# if !@HAVE_COSF@
+#  undef cosf
+_GL_FUNCDECL_SYS (cosf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (cosf, float, (float x));
+_GL_CXXALIASWARN (cosf);
+#elif defined GNULIB_POSIXCHECK
+# undef cosf
+# if HAVE_RAW_DECL_COSF
+_GL_WARN_ON_USE (cosf, "cosf is unportable - "
+                 "use gnulib module cosf for portability");
+# endif
+#endif
+
+#if @GNULIB_COSL@
+# if !@HAVE_COSL@ || !@HAVE_DECL_COSL@
+#  undef cosl
+_GL_FUNCDECL_SYS (cosl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (cosl, long double, (long double x));
+_GL_CXXALIASWARN (cosl);
+#elif defined GNULIB_POSIXCHECK
+# undef cosl
+# if HAVE_RAW_DECL_COSL
+_GL_WARN_ON_USE (cosl, "cosl is unportable - "
+                 "use gnulib module cosl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_COSHF@
+# if !@HAVE_COSHF@
+#  undef coshf
+_GL_FUNCDECL_SYS (coshf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (coshf, float, (float x));
+_GL_CXXALIASWARN (coshf);
+#elif defined GNULIB_POSIXCHECK
+# undef coshf
+# if HAVE_RAW_DECL_COSHF
+_GL_WARN_ON_USE (coshf, "coshf is unportable - "
+                 "use gnulib module coshf for portability");
+# endif
+#endif
+
+
+#if @GNULIB_EXPF@
+# if !@HAVE_EXPF@
+#  undef expf
+_GL_FUNCDECL_SYS (expf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (expf, float, (float x));
+_GL_CXXALIASWARN (expf);
+#elif defined GNULIB_POSIXCHECK
+# undef expf
+# if HAVE_RAW_DECL_EXPF
+_GL_WARN_ON_USE (expf, "expf is unportable - "
+                 "use gnulib module expf for portability");
+# endif
+#endif
+
+#if @GNULIB_EXPL@
+# if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@
+#  undef expl
+_GL_FUNCDECL_SYS (expl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (expl, long double, (long double x));
+_GL_CXXALIASWARN (expl);
+#elif defined GNULIB_POSIXCHECK
+# undef expl
+# if HAVE_RAW_DECL_EXPL
+_GL_WARN_ON_USE (expl, "expl is unportable - "
+                 "use gnulib module expl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_EXP2F@
+# if !@HAVE_DECL_EXP2F@
+_GL_FUNCDECL_SYS (exp2f, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (exp2f, float, (float x));
+_GL_CXXALIASWARN (exp2f);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2f
+# if HAVE_RAW_DECL_EXP2F
+_GL_WARN_ON_USE (exp2f, "exp2f is unportable - "
+                 "use gnulib module exp2f for portability");
+# endif
+#endif
+
+#if @GNULIB_EXP2@
+# if @REPLACE_EXP2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef exp2
+#   define exp2 rpl_exp2
+#  endif
+_GL_FUNCDECL_RPL (exp2, double, (double x));
+_GL_CXXALIAS_RPL (exp2, double, (double x));
+# else
+#  if !@HAVE_DECL_EXP2@
+_GL_FUNCDECL_SYS (exp2, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (exp2, double, (double x));
+# endif
+_GL_CXXALIASWARN (exp2);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2
+# if HAVE_RAW_DECL_EXP2
+_GL_WARN_ON_USE (exp2, "exp2 is unportable - "
+                 "use gnulib module exp2 for portability");
+# endif
+#endif
+
+#if @GNULIB_EXP2L@
+# if @REPLACE_EXP2L@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef exp2l
+#   define exp2l rpl_exp2l
+#  endif
+_GL_FUNCDECL_RPL (exp2l, long double, (long double x));
+_GL_CXXALIAS_RPL (exp2l, long double, (long double x));
+# else
+#  if !@HAVE_DECL_EXP2L@
+#   undef exp2l
+_GL_FUNCDECL_SYS (exp2l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (exp2l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (exp2l);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2l
+# if HAVE_RAW_DECL_EXP2L
+_GL_WARN_ON_USE (exp2l, "exp2l is unportable - "
+                 "use gnulib module exp2l for portability");
+# endif
+#endif
+
+
+#if @GNULIB_EXPM1F@
+# if @REPLACE_EXPM1F@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1f
+#   define expm1f rpl_expm1f
+#  endif
+_GL_FUNCDECL_RPL (expm1f, float, (float x));
+_GL_CXXALIAS_RPL (expm1f, float, (float x));
+# else
+#  if !@HAVE_EXPM1F@
+_GL_FUNCDECL_SYS (expm1f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (expm1f, float, (float x));
+# endif
+_GL_CXXALIASWARN (expm1f);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1f
+# if HAVE_RAW_DECL_EXPM1F
+_GL_WARN_ON_USE (expm1f, "expm1f is unportable - "
+                 "use gnulib module expm1f for portability");
+# endif
+#endif
+
+#if @GNULIB_EXPM1@
+# if @REPLACE_EXPM1@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1
+#   define expm1 rpl_expm1
+#  endif
+_GL_FUNCDECL_RPL (expm1, double, (double x));
+_GL_CXXALIAS_RPL (expm1, double, (double x));
+# else
+#  if !@HAVE_EXPM1@
+_GL_FUNCDECL_SYS (expm1, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (expm1, double, (double x));
+# endif
+_GL_CXXALIASWARN (expm1);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1
+# if HAVE_RAW_DECL_EXPM1
+_GL_WARN_ON_USE (expm1, "expm1 is unportable - "
+                 "use gnulib module expm1 for portability");
+# endif
+#endif
+
+#if @GNULIB_EXPM1L@
+# if !@HAVE_DECL_EXPM1L@
+#  undef expm1l
+_GL_FUNCDECL_SYS (expm1l, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (expm1l, long double, (long double x));
+_GL_CXXALIASWARN (expm1l);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1l
+# if HAVE_RAW_DECL_EXPM1L
+_GL_WARN_ON_USE (expm1l, "expm1l is unportable - "
+                 "use gnulib module expm1l for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FABSF@
+# if !@HAVE_FABSF@
+#  undef fabsf
+_GL_FUNCDECL_SYS (fabsf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (fabsf, float, (float x));
+_GL_CXXALIASWARN (fabsf);
+#elif defined GNULIB_POSIXCHECK
+# undef fabsf
+# if HAVE_RAW_DECL_FABSF
+_GL_WARN_ON_USE (fabsf, "fabsf is unportable - "
+                 "use gnulib module fabsf for portability");
+# endif
+#endif
+
+#if @GNULIB_FABSL@
+# if @REPLACE_FABSL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fabsl
+#   define fabsl rpl_fabsl
+#  endif
+_GL_FUNCDECL_RPL (fabsl, long double, (long double x));
+_GL_CXXALIAS_RPL (fabsl, long double, (long double x));
+# else
+#  if !@HAVE_FABSL@
+#   undef fabsl
+_GL_FUNCDECL_SYS (fabsl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (fabsl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (fabsl);
+#elif defined GNULIB_POSIXCHECK
+# undef fabsl
+# if HAVE_RAW_DECL_FABSL
+_GL_WARN_ON_USE (fabsl, "fabsl is unportable - "
+                 "use gnulib module fabsl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FLOORF@
+# if @REPLACE_FLOORF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floorf
+#   define floorf rpl_floorf
+#  endif
+_GL_FUNCDECL_RPL (floorf, float, (float x));
+_GL_CXXALIAS_RPL (floorf, float, (float x));
+# else
+#  if !@HAVE_DECL_FLOORF@
+#   undef floorf
+_GL_FUNCDECL_SYS (floorf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (floorf, float, (float x));
+# endif
+_GL_CXXALIASWARN (floorf);
+#elif defined GNULIB_POSIXCHECK
+# undef floorf
+# if HAVE_RAW_DECL_FLOORF
+_GL_WARN_ON_USE (floorf, "floorf is unportable - "
+                 "use gnulib module floorf for portability");
+# endif
+#endif
+
+#if @GNULIB_FLOOR@
+# if @REPLACE_FLOOR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define floor rpl_floor
+#  endif
+_GL_FUNCDECL_RPL (floor, double, (double x));
+_GL_CXXALIAS_RPL (floor, double, (double x));
+# else
+_GL_CXXALIAS_SYS (floor, double, (double x));
+# endif
+_GL_CXXALIASWARN (floor);
+#endif
+
+#if @GNULIB_FLOORL@
+# if @REPLACE_FLOORL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floorl
+#   define floorl rpl_floorl
+#  endif
+_GL_FUNCDECL_RPL (floorl, long double, (long double x));
+_GL_CXXALIAS_RPL (floorl, long double, (long double x));
+# else
+#  if !@HAVE_DECL_FLOORL@
+#   undef floorl
+_GL_FUNCDECL_SYS (floorl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (floorl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (floorl);
+#elif defined GNULIB_POSIXCHECK
+# undef floorl
+# if HAVE_RAW_DECL_FLOORL
+_GL_WARN_ON_USE (floorl, "floorl is unportable - "
+                 "use gnulib module floorl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FMAF@
+# if @REPLACE_FMAF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmaf
+#   define fmaf rpl_fmaf
+#  endif
+_GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z));
+_GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z));
+# else
+#  if !@HAVE_FMAF@
+_GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z));
+#  endif
+_GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z));
+# endif
+_GL_CXXALIASWARN (fmaf);
+#elif defined GNULIB_POSIXCHECK
+# undef fmaf
+# if HAVE_RAW_DECL_FMAF
+_GL_WARN_ON_USE (fmaf, "fmaf is unportable - "
+                 "use gnulib module fmaf for portability");
+# endif
+#endif
+
+#if @GNULIB_FMA@
+# if @REPLACE_FMA@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fma
+#   define fma rpl_fma
+#  endif
+_GL_FUNCDECL_RPL (fma, double, (double x, double y, double z));
+_GL_CXXALIAS_RPL (fma, double, (double x, double y, double z));
+# else
+#  if !@HAVE_FMA@
+_GL_FUNCDECL_SYS (fma, double, (double x, double y, double z));
+#  endif
+_GL_CXXALIAS_SYS (fma, double, (double x, double y, double z));
+# endif
+_GL_CXXALIASWARN (fma);
+#elif defined GNULIB_POSIXCHECK
+# undef fma
+# if HAVE_RAW_DECL_FMA
+_GL_WARN_ON_USE (fma, "fma is unportable - "
+                 "use gnulib module fma for portability");
+# endif
+#endif
+
+#if @GNULIB_FMAL@
+# if @REPLACE_FMAL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmal
+#   define fmal rpl_fmal
+#  endif
+_GL_FUNCDECL_RPL (fmal, long double,
+                  (long double x, long double y, long double z));
+_GL_CXXALIAS_RPL (fmal, long double,
+                  (long double x, long double y, long double z));
+# else
+#  if !@HAVE_FMAL@
+#   undef fmal
+_GL_FUNCDECL_SYS (fmal, long double,
+                  (long double x, long double y, long double z));
+#  endif
+_GL_CXXALIAS_SYS (fmal, long double,
+                  (long double x, long double y, long double z));
+# endif
+_GL_CXXALIASWARN (fmal);
+#elif defined GNULIB_POSIXCHECK
+# undef fmal
+# if HAVE_RAW_DECL_FMAL
+_GL_WARN_ON_USE (fmal, "fmal is unportable - "
+                 "use gnulib module fmal for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FMODF@
+# if @REPLACE_FMODF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmodf
+#   define fmodf rpl_fmodf
+#  endif
+_GL_FUNCDECL_RPL (fmodf, float, (float x, float y));
+_GL_CXXALIAS_RPL (fmodf, float, (float x, float y));
+# else
+#  if !@HAVE_FMODF@
+#   undef fmodf
+_GL_FUNCDECL_SYS (fmodf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (fmodf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (fmodf);
+#elif defined GNULIB_POSIXCHECK
+# undef fmodf
+# if HAVE_RAW_DECL_FMODF
+_GL_WARN_ON_USE (fmodf, "fmodf is unportable - "
+                 "use gnulib module fmodf for portability");
+# endif
+#endif
+
+#if @GNULIB_FMOD@
+# if @REPLACE_FMOD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmod
+#   define fmod rpl_fmod
+#  endif
+_GL_FUNCDECL_RPL (fmod, double, (double x, double y));
+_GL_CXXALIAS_RPL (fmod, double, (double x, double y));
+# else
+_GL_CXXALIAS_SYS (fmod, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (fmod);
+#elif defined GNULIB_POSIXCHECK
+# undef fmod
+# if HAVE_RAW_DECL_FMOD
+_GL_WARN_ON_USE (fmod, "fmod has portability problems - "
+                 "use gnulib module fmod for portability");
+# endif
+#endif
+
+#if @GNULIB_FMODL@
+# if @REPLACE_FMODL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmodl
+#   define fmodl rpl_fmodl
+#  endif
+_GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y));
+# else
+#  if !@HAVE_FMODL@
+#   undef fmodl
+_GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (fmodl);
+#elif defined GNULIB_POSIXCHECK
+# undef fmodl
+# if HAVE_RAW_DECL_FMODL
+_GL_WARN_ON_USE (fmodl, "fmodl is unportable - "
+                 "use gnulib module fmodl for portability");
+# endif
+#endif
+
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if @GNULIB_FREXPF@
+# if @REPLACE_FREXPF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef frexpf
+#   define frexpf rpl_frexpf
+#  endif
+_GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr));
+# else
+#  if !@HAVE_FREXPF@
+#   undef frexpf
+_GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr));
+# endif
+_GL_CXXALIASWARN (frexpf);
+#elif defined GNULIB_POSIXCHECK
+# undef frexpf
+# if HAVE_RAW_DECL_FREXPF
+_GL_WARN_ON_USE (frexpf, "frexpf is unportable - "
+                 "use gnulib module frexpf for portability");
+# endif
+#endif
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if @GNULIB_FREXP@
+# if @REPLACE_FREXP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define frexp rpl_frexp
+#  endif
+_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr));
+# else
+_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
+# endif
+_GL_CXXALIASWARN (frexp);
+#elif defined GNULIB_POSIXCHECK
+# undef frexp
+/* Assume frexp is always declared.  */
+_GL_WARN_ON_USE (frexp, "frexp is unportable - "
+                 "use gnulib module frexp for portability");
+#endif
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef frexpl
+#  define frexpl rpl_frexpl
+# endif
+_GL_FUNCDECL_RPL (frexpl, long double,
+                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr));
+#else
+# if !@HAVE_DECL_FREXPL@
+_GL_FUNCDECL_SYS (frexpl, long double,
+                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
+# endif
+# if @GNULIB_FREXPL@
+_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr));
+# endif
+#endif
+#if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@)
+_GL_CXXALIASWARN (frexpl);
+#endif
+#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK
+# undef frexpl
+# if HAVE_RAW_DECL_FREXPL
+_GL_WARN_ON_USE (frexpl, "frexpl is unportable - "
+                 "use gnulib module frexpl for portability");
+# endif
+#endif
+
+
+/* Return sqrt(x^2+y^2).  */
+#if @GNULIB_HYPOTF@
+# if @REPLACE_HYPOTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypotf
+#   define hypotf rpl_hypotf
+#  endif
+_GL_FUNCDECL_RPL (hypotf, float, (float x, float y));
+_GL_CXXALIAS_RPL (hypotf, float, (float x, float y));
+# else
+#  if !@HAVE_HYPOTF@
+_GL_FUNCDECL_SYS (hypotf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (hypotf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (hypotf);
+#elif defined GNULIB_POSIXCHECK
+# undef hypotf
+# if HAVE_RAW_DECL_HYPOTF
+_GL_WARN_ON_USE (hypotf, "hypotf is unportable - "
+                 "use gnulib module hypotf for portability");
+# endif
+#endif
+
+/* Return sqrt(x^2+y^2).  */
+#if @GNULIB_HYPOT@
+# if @REPLACE_HYPOT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypot
+#   define hypot rpl_hypot
+#  endif
+_GL_FUNCDECL_RPL (hypot, double, (double x, double y));
+_GL_CXXALIAS_RPL (hypot, double, (double x, double y));
+# else
+_GL_CXXALIAS_SYS (hypot, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (hypot);
+#elif defined GNULIB_POSIXCHECK
+# undef hypot
+# if HAVE_RAW_DECL_HYPOT
+_GL_WARN_ON_USE (hypotf, "hypot has portability problems - "
+                 "use gnulib module hypot for portability");
+# endif
+#endif
+
+/* Return sqrt(x^2+y^2).  */
+#if @GNULIB_HYPOTL@
+# if @REPLACE_HYPOTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypotl
+#   define hypotl rpl_hypotl
+#  endif
+_GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y));
+# else
+#  if !@HAVE_HYPOTL@
+_GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (hypotl);
+#elif defined GNULIB_POSIXCHECK
+# undef hypotl
+# if HAVE_RAW_DECL_HYPOTL
+_GL_WARN_ON_USE (hypotl, "hypotl is unportable - "
+                 "use gnulib module hypotl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ILOGBF@
+# if @REPLACE_ILOGBF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogbf
+#   define ilogbf rpl_ilogbf
+#  endif
+_GL_FUNCDECL_RPL (ilogbf, int, (float x));
+_GL_CXXALIAS_RPL (ilogbf, int, (float x));
+# else
+#  if !@HAVE_ILOGBF@
+_GL_FUNCDECL_SYS (ilogbf, int, (float x));
+#  endif
+_GL_CXXALIAS_SYS (ilogbf, int, (float x));
+# endif
+_GL_CXXALIASWARN (ilogbf);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogbf
+# if HAVE_RAW_DECL_ILOGBF
+_GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - "
+                 "use gnulib module ilogbf for portability");
+# endif
+#endif
+
+#if @GNULIB_ILOGB@
+# if @REPLACE_ILOGB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogb
+#   define ilogb rpl_ilogb
+#  endif
+_GL_FUNCDECL_RPL (ilogb, int, (double x));
+_GL_CXXALIAS_RPL (ilogb, int, (double x));
+# else
+#  if !@HAVE_ILOGB@
+_GL_FUNCDECL_SYS (ilogb, int, (double x));
+#  endif
+_GL_CXXALIAS_SYS (ilogb, int, (double x));
+# endif
+_GL_CXXALIASWARN (ilogb);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogb
+# if HAVE_RAW_DECL_ILOGB
+_GL_WARN_ON_USE (ilogb, "ilogb is unportable - "
+                 "use gnulib module ilogb for portability");
+# endif
+#endif
+
+#if @GNULIB_ILOGBL@
+# if !@HAVE_ILOGBL@
+_GL_FUNCDECL_SYS (ilogbl, int, (long double x));
+# endif
+_GL_CXXALIAS_SYS (ilogbl, int, (long double x));
+_GL_CXXALIASWARN (ilogbl);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogbl
+# if HAVE_RAW_DECL_ILOGBL
+_GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - "
+                 "use gnulib module ilogbl for portability");
+# endif
+#endif
+
+
+/* Return x * 2^exp.  */
+#if @GNULIB_LDEXPF@
+# if !@HAVE_LDEXPF@
+#  undef ldexpf
+_GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp));
+# endif
+_GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp));
+_GL_CXXALIASWARN (ldexpf);
+#elif defined GNULIB_POSIXCHECK
+# undef ldexpf
+# if HAVE_RAW_DECL_LDEXPF
+_GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - "
+                 "use gnulib module ldexpf for portability");
+# endif
+#endif
+
+/* Return x * 2^exp.  */
+#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef ldexpl
+#  define ldexpl rpl_ldexpl
+# endif
+_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp));
+_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp));
+#else
+# if !@HAVE_DECL_LDEXPL@
+_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp));
+# endif
+# if @GNULIB_LDEXPL@
+_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp));
+# endif
+#endif
+#if @GNULIB_LDEXPL@
+_GL_CXXALIASWARN (ldexpl);
+#endif
+#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK
+# undef ldexpl
+# if HAVE_RAW_DECL_LDEXPL
+_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - "
+                 "use gnulib module ldexpl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOGF@
+# if @REPLACE_LOGF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logf
+#   define logf rpl_logf
+#  endif
+_GL_FUNCDECL_RPL (logf, float, (float x));
+_GL_CXXALIAS_RPL (logf, float, (float x));
+# else
+#  if !@HAVE_LOGF@
+#   undef logf
+_GL_FUNCDECL_SYS (logf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (logf, float, (float x));
+# endif
+_GL_CXXALIASWARN (logf);
+#elif defined GNULIB_POSIXCHECK
+# undef logf
+# if HAVE_RAW_DECL_LOGF
+_GL_WARN_ON_USE (logf, "logf is unportable - "
+                 "use gnulib module logf for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG@
+# if @REPLACE_LOG@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log
+#   define log rpl_log
+#  endif
+_GL_FUNCDECL_RPL (log, double, (double x));
+_GL_CXXALIAS_RPL (log, double, (double x));
+# else
+_GL_CXXALIAS_SYS (log, double, (double x));
+# endif
+_GL_CXXALIASWARN (log);
+#elif defined GNULIB_POSIXCHECK
+# undef log
+# if HAVE_RAW_DECL_LOG
+_GL_WARN_ON_USE (log, "log has portability problems - "
+                 "use gnulib module log for portability");
+# endif
+#endif
+
+#if @GNULIB_LOGL@
+# if @REPLACE_LOGL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logl
+#   define logl rpl_logl
+#  endif
+_GL_FUNCDECL_RPL (logl, long double, (long double x));
+_GL_CXXALIAS_RPL (logl, long double, (long double x));
+# else
+#  if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@
+#   undef logl
+_GL_FUNCDECL_SYS (logl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (logl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (logl);
+#elif defined GNULIB_POSIXCHECK
+# undef logl
+# if HAVE_RAW_DECL_LOGL
+_GL_WARN_ON_USE (logl, "logl is unportable - "
+                 "use gnulib module logl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOG10F@
+# if @REPLACE_LOG10F@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10f
+#   define log10f rpl_log10f
+#  endif
+_GL_FUNCDECL_RPL (log10f, float, (float x));
+_GL_CXXALIAS_RPL (log10f, float, (float x));
+# else
+#  if !@HAVE_LOG10F@
+#   undef log10f
+_GL_FUNCDECL_SYS (log10f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log10f, float, (float x));
+# endif
+_GL_CXXALIASWARN (log10f);
+#elif defined GNULIB_POSIXCHECK
+# undef log10f
+# if HAVE_RAW_DECL_LOG10F
+_GL_WARN_ON_USE (log10f, "log10f is unportable - "
+                 "use gnulib module log10f for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG10@
+# if @REPLACE_LOG10@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10
+#   define log10 rpl_log10
+#  endif
+_GL_FUNCDECL_RPL (log10, double, (double x));
+_GL_CXXALIAS_RPL (log10, double, (double x));
+# else
+_GL_CXXALIAS_SYS (log10, double, (double x));
+# endif
+_GL_CXXALIASWARN (log10);
+#elif defined GNULIB_POSIXCHECK
+# undef log10
+# if HAVE_RAW_DECL_LOG10
+_GL_WARN_ON_USE (log10, "log10 has portability problems - "
+                 "use gnulib module log10 for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG10L@
+# if @REPLACE_LOG10L@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10l
+#   define log10l rpl_log10l
+#  endif
+_GL_FUNCDECL_RPL (log10l, long double, (long double x));
+_GL_CXXALIAS_RPL (log10l, long double, (long double x));
+# else
+#  if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@
+#   undef log10l
+_GL_FUNCDECL_SYS (log10l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log10l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log10l);
+#elif defined GNULIB_POSIXCHECK
+# undef log10l
+# if HAVE_RAW_DECL_LOG10L
+_GL_WARN_ON_USE (log10l, "log10l is unportable - "
+                 "use gnulib module log10l for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOG1PF@
+# if @REPLACE_LOG1PF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1pf
+#   define log1pf rpl_log1pf
+#  endif
+_GL_FUNCDECL_RPL (log1pf, float, (float x));
+_GL_CXXALIAS_RPL (log1pf, float, (float x));
+# else
+#  if !@HAVE_LOG1PF@
+_GL_FUNCDECL_SYS (log1pf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log1pf, float, (float x));
+# endif
+_GL_CXXALIASWARN (log1pf);
+#elif defined GNULIB_POSIXCHECK
+# undef log1pf
+# if HAVE_RAW_DECL_LOG1PF
+_GL_WARN_ON_USE (log1pf, "log1pf is unportable - "
+                 "use gnulib module log1pf for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG1P@
+# if @REPLACE_LOG1P@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1p
+#   define log1p rpl_log1p
+#  endif
+_GL_FUNCDECL_RPL (log1p, double, (double x));
+_GL_CXXALIAS_RPL (log1p, double, (double x));
+# else
+#  if !@HAVE_LOG1P@
+_GL_FUNCDECL_SYS (log1p, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (log1p, double, (double x));
+# endif
+_GL_CXXALIASWARN (log1p);
+#elif defined GNULIB_POSIXCHECK
+# undef log1p
+# if HAVE_RAW_DECL_LOG1P
+_GL_WARN_ON_USE (log1p, "log1p has portability problems - "
+                 "use gnulib module log1p for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG1PL@
+# if @REPLACE_LOG1PL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1pl
+#   define log1pl rpl_log1pl
+#  endif
+_GL_FUNCDECL_RPL (log1pl, long double, (long double x));
+_GL_CXXALIAS_RPL (log1pl, long double, (long double x));
+# else
+#  if !@HAVE_LOG1PL@
+_GL_FUNCDECL_SYS (log1pl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log1pl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log1pl);
+#elif defined GNULIB_POSIXCHECK
+# undef log1pl
+# if HAVE_RAW_DECL_LOG1PL
+_GL_WARN_ON_USE (log1pl, "log1pl has portability problems - "
+                 "use gnulib module log1pl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOG2F@
+# if @REPLACE_LOG2F@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2f
+#   define log2f rpl_log2f
+#  endif
+_GL_FUNCDECL_RPL (log2f, float, (float x));
+_GL_CXXALIAS_RPL (log2f, float, (float x));
+# else
+#  if !@HAVE_DECL_LOG2F@
+#   undef log2f
+_GL_FUNCDECL_SYS (log2f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log2f, float, (float x));
+# endif
+_GL_CXXALIASWARN (log2f);
+#elif defined GNULIB_POSIXCHECK
+# undef log2f
+# if HAVE_RAW_DECL_LOG2F
+_GL_WARN_ON_USE (log2f, "log2f is unportable - "
+                 "use gnulib module log2f for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG2@
+# if @REPLACE_LOG2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2
+#   define log2 rpl_log2
+#  endif
+_GL_FUNCDECL_RPL (log2, double, (double x));
+_GL_CXXALIAS_RPL (log2, double, (double x));
+# else
+#  if !@HAVE_DECL_LOG2@
+#   undef log2
+_GL_FUNCDECL_SYS (log2, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (log2, double, (double x));
+# endif
+_GL_CXXALIASWARN (log2);
+#elif defined GNULIB_POSIXCHECK
+# undef log2
+# if HAVE_RAW_DECL_LOG2
+_GL_WARN_ON_USE (log2, "log2 is unportable - "
+                 "use gnulib module log2 for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG2L@
+# if @REPLACE_LOG2L@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2l
+#   define log2l rpl_log2l
+#  endif
+_GL_FUNCDECL_RPL (log2l, long double, (long double x));
+_GL_CXXALIAS_RPL (log2l, long double, (long double x));
+# else
+#  if !@HAVE_DECL_LOG2L@
+_GL_FUNCDECL_SYS (log2l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log2l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log2l);
+#elif defined GNULIB_POSIXCHECK
+# undef log2l
+# if HAVE_RAW_DECL_LOG2L
+_GL_WARN_ON_USE (log2l, "log2l is unportable - "
+                 "use gnulib module log2l for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOGBF@
+# if @REPLACE_LOGBF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logbf
+#   define logbf rpl_logbf
+#  endif
+_GL_FUNCDECL_RPL (logbf, float, (float x));
+_GL_CXXALIAS_RPL (logbf, float, (float x));
+# else
+#  if !@HAVE_LOGBF@
+_GL_FUNCDECL_SYS (logbf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (logbf, float, (float x));
+# endif
+_GL_CXXALIASWARN (logbf);
+#elif defined GNULIB_POSIXCHECK
+# undef logbf
+# if HAVE_RAW_DECL_LOGBF
+_GL_WARN_ON_USE (logbf, "logbf is unportable - "
+                 "use gnulib module logbf for portability");
+# endif
+#endif
+
+#if @GNULIB_LOGB@
+# if @REPLACE_LOGB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logb
+#   define logb rpl_logb
+#  endif
+_GL_FUNCDECL_RPL (logb, double, (double x));
+_GL_CXXALIAS_RPL (logb, double, (double x));
+# else
+#  if !@HAVE_DECL_LOGB@
+_GL_FUNCDECL_SYS (logb, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (logb, double, (double x));
+# endif
+_GL_CXXALIASWARN (logb);
+#elif defined GNULIB_POSIXCHECK
+# undef logb
+# if HAVE_RAW_DECL_LOGB
+_GL_WARN_ON_USE (logb, "logb is unportable - "
+                 "use gnulib module logb for portability");
+# endif
+#endif
+
+#if @GNULIB_LOGBL@
+# if @REPLACE_LOGBL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logbl
+#   define logbl rpl_logbl
+#  endif
+_GL_FUNCDECL_RPL (logbl, long double, (long double x));
+_GL_CXXALIAS_RPL (logbl, long double, (long double x));
+# else
+#  if !@HAVE_LOGBL@
+_GL_FUNCDECL_SYS (logbl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (logbl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (logbl);
+#elif defined GNULIB_POSIXCHECK
+# undef logbl
+# if HAVE_RAW_DECL_LOGBL
+_GL_WARN_ON_USE (logbl, "logbl is unportable - "
+                 "use gnulib module logbl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MODFF@
+# if @REPLACE_MODFF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modff
+#   define modff rpl_modff
+#  endif
+_GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modff, float, (float x, float *iptr));
+# else
+#  if !@HAVE_MODFF@
+#   undef modff
+_GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (modff, float, (float x, float *iptr));
+# endif
+_GL_CXXALIASWARN (modff);
+#elif defined GNULIB_POSIXCHECK
+# undef modff
+# if HAVE_RAW_DECL_MODFF
+_GL_WARN_ON_USE (modff, "modff is unportable - "
+                 "use gnulib module modff for portability");
+# endif
+#endif
+
+#if @GNULIB_MODF@
+# if @REPLACE_MODF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modf
+#   define modf rpl_modf
+#  endif
+_GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modf, double, (double x, double *iptr));
+# else
+_GL_CXXALIAS_SYS (modf, double, (double x, double *iptr));
+# endif
+_GL_CXXALIASWARN (modf);
+#elif defined GNULIB_POSIXCHECK
+# undef modf
+# if HAVE_RAW_DECL_MODF
+_GL_WARN_ON_USE (modf, "modf has portability problems - "
+                 "use gnulib module modf for portability");
+# endif
+#endif
+
+#if @GNULIB_MODFL@
+# if @REPLACE_MODFL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modfl
+#   define modfl rpl_modfl
+#  endif
+_GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr)
+                                      _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr));
+# else
+#  if !@HAVE_MODFL@
+#   undef modfl
+_GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr)
+                                      _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr));
+# endif
+_GL_CXXALIASWARN (modfl);
+#elif defined GNULIB_POSIXCHECK
+# undef modfl
+# if HAVE_RAW_DECL_MODFL
+_GL_WARN_ON_USE (modfl, "modfl is unportable - "
+                 "use gnulib module modfl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_POWF@
+# if !@HAVE_POWF@
+#  undef powf
+_GL_FUNCDECL_SYS (powf, float, (float x, float y));
+# endif
+_GL_CXXALIAS_SYS (powf, float, (float x, float y));
+_GL_CXXALIASWARN (powf);
+#elif defined GNULIB_POSIXCHECK
+# undef powf
+# if HAVE_RAW_DECL_POWF
+_GL_WARN_ON_USE (powf, "powf is unportable - "
+                 "use gnulib module powf for portability");
+# endif
+#endif
+
+
+#if @GNULIB_REMAINDERF@
+# if @REPLACE_REMAINDERF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainderf
+#   define remainderf rpl_remainderf
+#  endif
+_GL_FUNCDECL_RPL (remainderf, float, (float x, float y));
+_GL_CXXALIAS_RPL (remainderf, float, (float x, float y));
+# else
+#  if !@HAVE_REMAINDERF@
+_GL_FUNCDECL_SYS (remainderf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (remainderf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (remainderf);
+#elif defined GNULIB_POSIXCHECK
+# undef remainderf
+# if HAVE_RAW_DECL_REMAINDERF
+_GL_WARN_ON_USE (remainderf, "remainderf is unportable - "
+                 "use gnulib module remainderf for portability");
+# endif
+#endif
+
+#if @GNULIB_REMAINDER@
+# if @REPLACE_REMAINDER@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainder
+#   define remainder rpl_remainder
+#  endif
+_GL_FUNCDECL_RPL (remainder, double, (double x, double y));
+_GL_CXXALIAS_RPL (remainder, double, (double x, double y));
+# else
+#  if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@
+_GL_FUNCDECL_SYS (remainder, double, (double x, double y));
+#  endif
+_GL_CXXALIAS_SYS (remainder, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (remainder);
+#elif defined GNULIB_POSIXCHECK
+# undef remainder
+# if HAVE_RAW_DECL_REMAINDER
+_GL_WARN_ON_USE (remainder, "remainder is unportable - "
+                 "use gnulib module remainder for portability");
+# endif
+#endif
+
+#if @GNULIB_REMAINDERL@
+# if @REPLACE_REMAINDERL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainderl
+#   define remainderl rpl_remainderl
+#  endif
+_GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y));
+# else
+#  if !@HAVE_DECL_REMAINDERL@
+#   undef remainderl
+_GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (remainderl);
+#elif defined GNULIB_POSIXCHECK
+# undef remainderl
+# if HAVE_RAW_DECL_REMAINDERL
+_GL_WARN_ON_USE (remainderl, "remainderl is unportable - "
+                 "use gnulib module remainderl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RINTF@
+# if !@HAVE_DECL_RINTF@
+_GL_FUNCDECL_SYS (rintf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (rintf, float, (float x));
+_GL_CXXALIASWARN (rintf);
+#elif defined GNULIB_POSIXCHECK
+# undef rintf
+# if HAVE_RAW_DECL_RINTF
+_GL_WARN_ON_USE (rintf, "rintf is unportable - "
+                 "use gnulib module rintf for portability");
+# endif
+#endif
+
+#if @GNULIB_RINT@
+# if !@HAVE_RINT@
+_GL_FUNCDECL_SYS (rint, double, (double x));
+# endif
+_GL_CXXALIAS_SYS (rint, double, (double x));
+_GL_CXXALIASWARN (rint);
+#elif defined GNULIB_POSIXCHECK
+# undef rint
+# if HAVE_RAW_DECL_RINT
+_GL_WARN_ON_USE (rint, "rint is unportable - "
+                 "use gnulib module rint for portability");
+# endif
+#endif
+
+#if @GNULIB_RINTL@
+# if !@HAVE_RINTL@
+_GL_FUNCDECL_SYS (rintl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (rintl, long double, (long double x));
+_GL_CXXALIASWARN (rintl);
+#elif defined GNULIB_POSIXCHECK
+# undef rintl
+# if HAVE_RAW_DECL_RINTL
+_GL_WARN_ON_USE (rintl, "rintl is unportable - "
+                 "use gnulib module rintl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ROUNDF@
+# if @REPLACE_ROUNDF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef roundf
+#   define roundf rpl_roundf
+#  endif
+_GL_FUNCDECL_RPL (roundf, float, (float x));
+_GL_CXXALIAS_RPL (roundf, float, (float x));
+# else
+#  if !@HAVE_DECL_ROUNDF@
+_GL_FUNCDECL_SYS (roundf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (roundf, float, (float x));
+# endif
+_GL_CXXALIASWARN (roundf);
+#elif defined GNULIB_POSIXCHECK
+# undef roundf
+# if HAVE_RAW_DECL_ROUNDF
+_GL_WARN_ON_USE (roundf, "roundf is unportable - "
+                 "use gnulib module roundf for portability");
+# endif
+#endif
+
+#if @GNULIB_ROUND@
+# if @REPLACE_ROUND@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef round
+#   define round rpl_round
+#  endif
+_GL_FUNCDECL_RPL (round, double, (double x));
+_GL_CXXALIAS_RPL (round, double, (double x));
+# else
+#  if !@HAVE_DECL_ROUND@
+_GL_FUNCDECL_SYS (round, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (round, double, (double x));
+# endif
+_GL_CXXALIASWARN (round);
+#elif defined GNULIB_POSIXCHECK
+# undef round
+# if HAVE_RAW_DECL_ROUND
+_GL_WARN_ON_USE (round, "round is unportable - "
+                 "use gnulib module round for portability");
+# endif
+#endif
+
+#if @GNULIB_ROUNDL@
+# if @REPLACE_ROUNDL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef roundl
+#   define roundl rpl_roundl
+#  endif
+_GL_FUNCDECL_RPL (roundl, long double, (long double x));
+_GL_CXXALIAS_RPL (roundl, long double, (long double x));
+# else
+#  if !@HAVE_DECL_ROUNDL@
+#   undef roundl
+_GL_FUNCDECL_SYS (roundl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (roundl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (roundl);
+#elif defined GNULIB_POSIXCHECK
+# undef roundl
+# if HAVE_RAW_DECL_ROUNDL
+_GL_WARN_ON_USE (roundl, "roundl is unportable - "
+                 "use gnulib module roundl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SINF@
+# if !@HAVE_SINF@
+#  undef sinf
+_GL_FUNCDECL_SYS (sinf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sinf, float, (float x));
+_GL_CXXALIASWARN (sinf);
+#elif defined GNULIB_POSIXCHECK
+# undef sinf
+# if HAVE_RAW_DECL_SINF
+_GL_WARN_ON_USE (sinf, "sinf is unportable - "
+                 "use gnulib module sinf for portability");
+# endif
+#endif
+
+#if @GNULIB_SINL@
+# if !@HAVE_SINL@ || !@HAVE_DECL_SINL@
+#  undef sinl
+_GL_FUNCDECL_SYS (sinl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (sinl, long double, (long double x));
+_GL_CXXALIASWARN (sinl);
+#elif defined GNULIB_POSIXCHECK
+# undef sinl
+# if HAVE_RAW_DECL_SINL
+_GL_WARN_ON_USE (sinl, "sinl is unportable - "
+                 "use gnulib module sinl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SINHF@
+# if !@HAVE_SINHF@
+#  undef sinhf
+_GL_FUNCDECL_SYS (sinhf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sinhf, float, (float x));
+_GL_CXXALIASWARN (sinhf);
+#elif defined GNULIB_POSIXCHECK
+# undef sinhf
+# if HAVE_RAW_DECL_SINHF
+_GL_WARN_ON_USE (sinhf, "sinhf is unportable - "
+                 "use gnulib module sinhf for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SQRTF@
+# if !@HAVE_SQRTF@
+#  undef sqrtf
+_GL_FUNCDECL_SYS (sqrtf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sqrtf, float, (float x));
+_GL_CXXALIASWARN (sqrtf);
+#elif defined GNULIB_POSIXCHECK
+# undef sqrtf
+# if HAVE_RAW_DECL_SQRTF
+_GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - "
+                 "use gnulib module sqrtf for portability");
+# endif
+#endif
+
+#if @GNULIB_SQRTL@
+# if @REPLACE_SQRTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sqrtl
+#   define sqrtl rpl_sqrtl
+#  endif
+_GL_FUNCDECL_RPL (sqrtl, long double, (long double x));
+_GL_CXXALIAS_RPL (sqrtl, long double, (long double x));
+# else
+#  if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@
+#   undef sqrtl
+_GL_FUNCDECL_SYS (sqrtl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (sqrtl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (sqrtl);
+#elif defined GNULIB_POSIXCHECK
+# undef sqrtl
+# if HAVE_RAW_DECL_SQRTL
+_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - "
+                 "use gnulib module sqrtl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TANF@
+# if !@HAVE_TANF@
+#  undef tanf
+_GL_FUNCDECL_SYS (tanf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (tanf, float, (float x));
+_GL_CXXALIASWARN (tanf);
+#elif defined GNULIB_POSIXCHECK
+# undef tanf
+# if HAVE_RAW_DECL_TANF
+_GL_WARN_ON_USE (tanf, "tanf is unportable - "
+                 "use gnulib module tanf for portability");
+# endif
+#endif
+
+#if @GNULIB_TANL@
+# if !@HAVE_TANL@ || !@HAVE_DECL_TANL@
+#  undef tanl
+_GL_FUNCDECL_SYS (tanl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (tanl, long double, (long double x));
+_GL_CXXALIASWARN (tanl);
+#elif defined GNULIB_POSIXCHECK
+# undef tanl
+# if HAVE_RAW_DECL_TANL
+_GL_WARN_ON_USE (tanl, "tanl is unportable - "
+                 "use gnulib module tanl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TANHF@
+# if !@HAVE_TANHF@
+#  undef tanhf
+_GL_FUNCDECL_SYS (tanhf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (tanhf, float, (float x));
+_GL_CXXALIASWARN (tanhf);
+#elif defined GNULIB_POSIXCHECK
+# undef tanhf
+# if HAVE_RAW_DECL_TANHF
+_GL_WARN_ON_USE (tanhf, "tanhf is unportable - "
+                 "use gnulib module tanhf for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TRUNCF@
+# if @REPLACE_TRUNCF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define truncf rpl_truncf
+#  endif
+_GL_FUNCDECL_RPL (truncf, float, (float x));
+_GL_CXXALIAS_RPL (truncf, float, (float x));
+# else
+#  if !@HAVE_DECL_TRUNCF@
+_GL_FUNCDECL_SYS (truncf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (truncf, float, (float x));
+# endif
+_GL_CXXALIASWARN (truncf);
+#elif defined GNULIB_POSIXCHECK
+# undef truncf
+# if HAVE_RAW_DECL_TRUNCF
+_GL_WARN_ON_USE (truncf, "truncf is unportable - "
+                 "use gnulib module truncf for portability");
+# endif
+#endif
+
+#if @GNULIB_TRUNC@
+# if @REPLACE_TRUNC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define trunc rpl_trunc
+#  endif
+_GL_FUNCDECL_RPL (trunc, double, (double x));
+_GL_CXXALIAS_RPL (trunc, double, (double x));
+# else
+#  if !@HAVE_DECL_TRUNC@
+_GL_FUNCDECL_SYS (trunc, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (trunc, double, (double x));
+# endif
+_GL_CXXALIASWARN (trunc);
+#elif defined GNULIB_POSIXCHECK
+# undef trunc
+# if HAVE_RAW_DECL_TRUNC
+_GL_WARN_ON_USE (trunc, "trunc is unportable - "
+                 "use gnulib module trunc for portability");
+# endif
+#endif
+
+#if @GNULIB_TRUNCL@
+# if @REPLACE_TRUNCL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef truncl
+#   define truncl rpl_truncl
+#  endif
+_GL_FUNCDECL_RPL (truncl, long double, (long double x));
+_GL_CXXALIAS_RPL (truncl, long double, (long double x));
+# else
+#  if !@HAVE_DECL_TRUNCL@
+_GL_FUNCDECL_SYS (truncl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (truncl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (truncl);
+#elif defined GNULIB_POSIXCHECK
+# undef truncl
+# if HAVE_RAW_DECL_TRUNCL
+_GL_WARN_ON_USE (truncl, "truncl is unportable - "
+                 "use gnulib module truncl for portability");
+# endif
+#endif
+
+
+/* Definitions of function-like macros come here, after the function
+   declarations.  */
+
+
+#if @GNULIB_ISFINITE@
+# if @REPLACE_ISFINITE@
+_GL_EXTERN_C int gl_isfinitef (float x);
+_GL_EXTERN_C int gl_isfinited (double x);
+_GL_EXTERN_C int gl_isfinitel (long double x);
+#  undef isfinite
+#  define isfinite(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \
+    sizeof (x) == sizeof (double) ? gl_isfinited (x) : \
+    gl_isfinitef (x))
+# endif
+# ifdef __cplusplus
+#  ifdef isfinite
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
+#   undef isfinite
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isfinite
+_GL_WARN_REAL_FLOATING_DECL (isfinite);
+#  undef isfinite
+#  define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x)
+# endif
+#endif
+
+
+#if @GNULIB_ISINF@
+# if @REPLACE_ISINF@
+_GL_EXTERN_C int gl_isinff (float x);
+_GL_EXTERN_C int gl_isinfd (double x);
+_GL_EXTERN_C int gl_isinfl (long double x);
+#  undef isinf
+#  define isinf(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
+    sizeof (x) == sizeof (double) ? gl_isinfd (x) : \
+    gl_isinff (x))
+# endif
+# ifdef __cplusplus
+#  ifdef isinf
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
+#   undef isinf
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isinf
+_GL_WARN_REAL_FLOATING_DECL (isinf);
+#  undef isinf
+#  define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x)
+# endif
+#endif
+
+
+#if @GNULIB_ISNANF@
+/* Test for NaN for 'float' numbers.  */
+# if @HAVE_ISNANF@
+/* The original <math.h> included above provides a declaration of isnan macro
+   or (older) isnanf function.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnanf
+#   define isnanf(x) __builtin_isnanf ((float)(x))
+#  elif defined isnan
+#   undef isnanf
+#   define isnanf(x) isnan ((float)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnanf
+#  define isnanf rpl_isnanf
+_GL_EXTERN_C int isnanf (float x);
+# endif
+#endif
+
+#if @GNULIB_ISNAND@
+/* Test for NaN for 'double' numbers.
+   This function is a gnulib extension, unlike isnan() which applied only
+   to 'double' numbers earlier but now is a type-generic macro.  */
+# if @HAVE_ISNAND@
+/* The original <math.h> included above provides a declaration of isnan
+   macro.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnand
+#   define isnand(x) __builtin_isnan ((double)(x))
+#  else
+#   undef isnand
+#   define isnand(x) isnan ((double)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnand
+#  define isnand rpl_isnand
+_GL_EXTERN_C int isnand (double x);
+# endif
+#endif
+
+#if @GNULIB_ISNANL@
+/* Test for NaN for 'long double' numbers.  */
+# if @HAVE_ISNANL@
+/* The original <math.h> included above provides a declaration of isnan
+   macro or (older) isnanl function.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnanl
+#   define isnanl(x) __builtin_isnanl ((long double)(x))
+#  elif defined isnan
+#   undef isnanl
+#   define isnanl(x) isnan ((long double)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnanl
+#  define isnanl rpl_isnanl
+_GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST;
+# endif
+#endif
+
+/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL!  */
+#if @GNULIB_ISNAN@
+# if @REPLACE_ISNAN@
+/* We can't just use the isnanf macro (e.g.) as exposed by
+   isnanf.h (e.g.) here, because those may end up being macros
+   that recursively expand back to isnan.  So use the gnulib
+   replacements for them directly. */
+#  if @HAVE_ISNANF@ && __GNUC__ >= 4
+#   define gl_isnan_f(x) __builtin_isnanf ((float)(x))
+#  else
+_GL_EXTERN_C int rpl_isnanf (float x);
+#   define gl_isnan_f(x) rpl_isnanf (x)
+#  endif
+#  if @HAVE_ISNAND@ && __GNUC__ >= 4
+#   define gl_isnan_d(x) __builtin_isnan ((double)(x))
+#  else
+_GL_EXTERN_C int rpl_isnand (double x);
+#   define gl_isnan_d(x) rpl_isnand (x)
+#  endif
+#  if @HAVE_ISNANL@ && __GNUC__ >= 4
+#   define gl_isnan_l(x) __builtin_isnanl ((long double)(x))
+#  else
+_GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
+#   define gl_isnan_l(x) rpl_isnanl (x)
+#  endif
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
+    sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
+    gl_isnan_f (x))
+# elif __GNUC__ >= 4
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \
+    sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \
+    __builtin_isnanf ((float)(x)))
+# endif
+# ifdef __cplusplus
+#  ifdef isnan
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
+#   undef isnan
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan)
+#  endif
+# else
+/* Ensure isnan is a macro.  */
+#  ifndef isnan
+#   define isnan isnan
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isnan
+_GL_WARN_REAL_FLOATING_DECL (isnan);
+#  undef isnan
+#  define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x)
+# endif
+#endif
+
+
+#if @GNULIB_SIGNBIT@
+# if @REPLACE_SIGNBIT_USING_GCC@
+#  undef signbit
+   /* GCC 4.0 and newer provides three built-ins for signbit.  */
+#  define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
+    __builtin_signbitf (x))
+# endif
+# if @REPLACE_SIGNBIT@
+#  undef signbit
+_GL_EXTERN_C int gl_signbitf (float arg);
+_GL_EXTERN_C int gl_signbitd (double arg);
+_GL_EXTERN_C int gl_signbitl (long double arg);
+#  if __GNUC__ >= 2 && !defined __STRICT_ANSI__
+#   define _GL_NUM_UINT_WORDS(type) \
+      ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+#   if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
+#    define gl_signbitf_OPTIMIZED_MACRO
+#    define gl_signbitf(arg) \
+       ({ union { float _value;                                         \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (float)];       \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;          \
+        })
+#   endif
+#   if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
+#    define gl_signbitd_OPTIMIZED_MACRO
+#    define gl_signbitd(arg) \
+       ({ union { double _value;                                        \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (double)];      \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;          \
+        })
+#   endif
+#   if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
+#    define gl_signbitl_OPTIMIZED_MACRO
+#    define gl_signbitl(arg) \
+       ({ union { long double _value;                                   \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;        \
+        })
+#   endif
+#  endif
+#  define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? gl_signbitd (x) : \
+    gl_signbitf (x))
+# endif
+# ifdef __cplusplus
+#  ifdef signbit
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
+#   undef signbit
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined signbit
+_GL_WARN_REAL_FLOATING_DECL (signbit);
+#  undef signbit
+#  define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x)
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _@GUARD_PREFIX@_MATH_H */
+#endif /* _@GUARD_PREFIX@_MATH_H */
diff --git a/lib/mbchar.c b/lib/mbchar.c
new file mode 100644
index 0000000..9d372a7
--- /dev/null
+++ b/lib/mbchar.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2001, 2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#include <config.h>
+
+#define MBCHAR_INLINE _GL_EXTERN_INLINE
+
+#include <limits.h>
+
+#include "mbchar.h"
+
+#if IS_BASIC_ASCII
+
+/* Bit table of characters in the ISO C "basic character set".  */
+const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] =
+{
+  0x00001a00,           /* '\t' '\v' '\f' */
+  0xffffffef,           /* ' '...'#' '%'...'?' */
+  0xfffffffe,           /* 'A'...'Z' '[' '\\' ']' '^' '_' */
+  0x7ffffffe            /* 'a'...'z' '{' '|' '}' '~' */
+  /* The remaining bits are 0.  */
+};
+
+#endif /* IS_BASIC_ASCII */
diff --git a/lib/mbchar.h b/lib/mbchar.h
new file mode 100644
index 0000000..001f743
--- /dev/null
+++ b/lib/mbchar.h
@@ -0,0 +1,357 @@
+/* Multibyte character data type.
+   Copyright (C) 2001, 2005-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+/* A multibyte character is a short subsequence of a char* string,
+   representing a single wide character.
+
+   We use multibyte characters instead of wide characters because of
+   the following goals:
+   1) correct multibyte handling, i.e. operate according to the LC_CTYPE
+      locale,
+   2) ease of maintenance, i.e. the maintainer needs not know all details
+      of the ISO C 99 standard,
+   3) don't fail grossly if the input is not in the encoding set by the
+      locale, because often different encodings are in use in the same
+      countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...),
+   4) fast in the case of ASCII characters,
+   5) portability, i.e. don't make unportable assumptions about wchar_t.
+
+   Multibyte characters are only accessed through the mb* macros.
+
+   mb_ptr (mbc)
+     return a pointer to the beginning of the multibyte sequence.
+
+   mb_len (mbc)
+     returns the number of bytes occupied by the multibyte sequence.
+     Always > 0.
+
+   mb_iseq (mbc, sc)
+     returns true if mbc is the standard ASCII character sc.
+
+   mb_isnul (mbc)
+     returns true if mbc is the nul character.
+
+   mb_cmp (mbc1, mbc2)
+     returns a positive, zero, or negative value depending on whether mbc1
+     sorts after, same or before mbc2.
+
+   mb_casecmp (mbc1, mbc2)
+     returns a positive, zero, or negative value depending on whether mbc1
+     sorts after, same or before mbc2, modulo upper/lowercase conversion.
+
+   mb_equal (mbc1, mbc2)
+     returns true if mbc1 and mbc2 are equal.
+
+   mb_caseequal (mbc1, mbc2)
+     returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion.
+
+   mb_isalnum (mbc)
+     returns true if mbc is alphanumeric.
+
+   mb_isalpha (mbc)
+     returns true if mbc is alphabetic.
+
+   mb_isascii(mbc)
+     returns true if mbc is plain ASCII.
+
+   mb_isblank (mbc)
+     returns true if mbc is a blank.
+
+   mb_iscntrl (mbc)
+     returns true if mbc is a control character.
+
+   mb_isdigit (mbc)
+     returns true if mbc is a decimal digit.
+
+   mb_isgraph (mbc)
+     returns true if mbc is a graphic character.
+
+   mb_islower (mbc)
+     returns true if mbc is lowercase.
+
+   mb_isprint (mbc)
+     returns true if mbc is a printable character.
+
+   mb_ispunct (mbc)
+     returns true if mbc is a punctuation character.
+
+   mb_isspace (mbc)
+     returns true if mbc is a space character.
+
+   mb_isupper (mbc)
+     returns true if mbc is uppercase.
+
+   mb_isxdigit (mbc)
+     returns true if mbc is a hexadecimal digit.
+
+   mb_width (mbc)
+     returns the number of columns on the output device occupied by mbc.
+     Always >= 0.
+
+   mb_putc (mbc, stream)
+     outputs mbc on stream, a byte oriented FILE stream opened for output.
+
+   mb_setascii (&mbc, sc)
+     assigns the standard ASCII character sc to mbc.
+
+   mb_copy (&destmbc, &srcmbc)
+     copies srcmbc to destmbc.
+
+   Here are the function prototypes of the macros.
+
+   extern const char *  mb_ptr (const mbchar_t mbc);
+   extern size_t        mb_len (const mbchar_t mbc);
+   extern bool          mb_iseq (const mbchar_t mbc, char sc);
+   extern bool          mb_isnul (const mbchar_t mbc);
+   extern int           mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2);
+   extern int           mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2);
+   extern bool          mb_equal (const mbchar_t mbc1, const mbchar_t mbc2);
+   extern bool          mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2);
+   extern bool          mb_isalnum (const mbchar_t mbc);
+   extern bool          mb_isalpha (const mbchar_t mbc);
+   extern bool          mb_isascii (const mbchar_t mbc);
+   extern bool          mb_isblank (const mbchar_t mbc);
+   extern bool          mb_iscntrl (const mbchar_t mbc);
+   extern bool          mb_isdigit (const mbchar_t mbc);
+   extern bool          mb_isgraph (const mbchar_t mbc);
+   extern bool          mb_islower (const mbchar_t mbc);
+   extern bool          mb_isprint (const mbchar_t mbc);
+   extern bool          mb_ispunct (const mbchar_t mbc);
+   extern bool          mb_isspace (const mbchar_t mbc);
+   extern bool          mb_isupper (const mbchar_t mbc);
+   extern bool          mb_isxdigit (const mbchar_t mbc);
+   extern int           mb_width (const mbchar_t mbc);
+   extern void          mb_putc (const mbchar_t mbc, FILE *stream);
+   extern void          mb_setascii (mbchar_t *new, char sc);
+   extern void          mb_copy (mbchar_t *new, const mbchar_t *old);
+ */
+
+#ifndef _MBCHAR_H
+#define _MBCHAR_H 1
+
+#include <stdbool.h>
+#include <string.h>
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+   <wchar.h>.  */
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef MBCHAR_INLINE
+# define MBCHAR_INLINE _GL_INLINE
+#endif
+
+#define MBCHAR_BUF_SIZE 24
+
+struct mbchar
+{
+  const char *ptr;      /* pointer to current character */
+  size_t bytes;         /* number of bytes of current character, > 0 */
+  bool wc_valid;        /* true if wc is a valid wide character */
+  wchar_t wc;           /* if wc_valid: the current character */
+  char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */
+};
+
+/* EOF (not a real character) is represented with bytes = 0 and
+   wc_valid = false.  */
+
+typedef struct mbchar mbchar_t;
+
+/* Access the current character.  */
+#define mb_ptr(mbc) ((mbc).ptr)
+#define mb_len(mbc) ((mbc).bytes)
+
+/* Comparison of characters.  */
+#define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc))
+#define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0)
+#define mb_cmp(mbc1, mbc2) \
+  ((mbc1).wc_valid                                                      \
+   ? ((mbc2).wc_valid                                                   \
+      ? (int) (mbc1).wc - (int) (mbc2).wc                               \
+      : -1)                                                             \
+   : ((mbc2).wc_valid                                                   \
+      ? 1                                                               \
+      : (mbc1).bytes == (mbc2).bytes                                    \
+        ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes)                 \
+        : (mbc1).bytes < (mbc2).bytes                                   \
+          ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \
+          : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1)))
+#define mb_casecmp(mbc1, mbc2) \
+  ((mbc1).wc_valid                                                      \
+   ? ((mbc2).wc_valid                                                   \
+      ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc)         \
+      : -1)                                                             \
+   : ((mbc2).wc_valid                                                   \
+      ? 1                                                               \
+      : (mbc1).bytes == (mbc2).bytes                                    \
+        ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes)                 \
+        : (mbc1).bytes < (mbc2).bytes                                   \
+          ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \
+          : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1)))
+#define mb_equal(mbc1, mbc2) \
+  ((mbc1).wc_valid && (mbc2).wc_valid                                   \
+   ? (mbc1).wc == (mbc2).wc                                             \
+   : (mbc1).bytes == (mbc2).bytes                                       \
+     && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0)
+#define mb_caseequal(mbc1, mbc2) \
+  ((mbc1).wc_valid && (mbc2).wc_valid                                   \
+   ? towlower ((mbc1).wc) == towlower ((mbc2).wc)                       \
+   : (mbc1).bytes == (mbc2).bytes                                       \
+     && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0)
+
+/* <ctype.h>, <wctype.h> classification.  */
+#define mb_isascii(mbc) \
+  ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127)
+#define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc))
+#define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc))
+#define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc))
+#define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc))
+#define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc))
+#define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc))
+#define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc))
+#define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc))
+#define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc))
+#define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc))
+#define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc))
+#define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc))
+
+/* Extra <wchar.h> function.  */
+
+/* Unprintable characters appear as a small box of width 1.  */
+#define MB_UNPRINTABLE_WIDTH 1
+
+MBCHAR_INLINE int
+mb_width_aux (wint_t wc)
+{
+  int w = wcwidth (wc);
+  /* For unprintable characters, arbitrarily return 0 for control characters
+     and MB_UNPRINTABLE_WIDTH otherwise.  */
+  return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH);
+}
+
+#define mb_width(mbc) \
+  ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH)
+
+/* Output.  */
+#define mb_putc(mbc, stream)  fwrite ((mbc).ptr, 1, (mbc).bytes, (stream))
+
+/* Assignment.  */
+#define mb_setascii(mbc, sc) \
+  ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \
+   (mbc)->wc = (mbc)->buf[0] = (sc))
+
+/* Copying a character.  */
+MBCHAR_INLINE void
+mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc)
+{
+  if (old_mbc->ptr == &old_mbc->buf[0])
+    {
+      memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes);
+      new_mbc->ptr = &new_mbc->buf[0];
+    }
+  else
+    new_mbc->ptr = old_mbc->ptr;
+  new_mbc->bytes = old_mbc->bytes;
+  if ((new_mbc->wc_valid = old_mbc->wc_valid))
+    new_mbc->wc = old_mbc->wc;
+}
+
+
+/* is_basic(c) tests whether the single-byte character c is in the
+   ISO C "basic character set".
+   This is a convenience function, and is in this file only to share code
+   between mbiter_multi.h and mbfile_multi.h.  */
+#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
+/* The character set is ISO-646, not EBCDIC. */
+# define IS_BASIC_ASCII 1
+
+extern const unsigned int is_basic_table[];
+
+MBCHAR_INLINE bool
+is_basic (char c)
+{
+  return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31))
+         & 1;
+}
+
+#else
+
+MBCHAR_INLINE bool
+is_basic (char c)
+{
+  switch (c)
+    {
+    case '\t': case '\v': case '\f':
+    case ' ': case '!': case '"': case '#': case '%':
+    case '&': case '\'': case '(': case ')': case '*':
+    case '+': case ',': case '-': case '.': case '/':
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+    case ':': case ';': case '<': case '=': case '>':
+    case '?':
+    case 'A': case 'B': case 'C': case 'D': case 'E':
+    case 'F': case 'G': case 'H': case 'I': case 'J':
+    case 'K': case 'L': case 'M': case 'N': case 'O':
+    case 'P': case 'Q': case 'R': case 'S': case 'T':
+    case 'U': case 'V': case 'W': case 'X': case 'Y':
+    case 'Z':
+    case '[': case '\\': case ']': case '^': case '_':
+    case 'a': case 'b': case 'c': case 'd': case 'e':
+    case 'f': case 'g': case 'h': case 'i': case 'j':
+    case 'k': case 'l': case 'm': case 'n': case 'o':
+    case 'p': case 'q': case 'r': case 's': case 't':
+    case 'u': case 'v': case 'w': case 'x': case 'y':
+    case 'z': case '{': case '|': case '}': case '~':
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _MBCHAR_H */
diff --git a/lib/mbrtowc.c b/lib/mbrtowc.c
new file mode 100644
index 0000000..e3f354b
--- /dev/null
+++ b/lib/mbrtowc.c
@@ -0,0 +1,402 @@
+/* Convert multibyte character to wide character.
+   Copyright (C) 1999-2002, 2005-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wchar.h>
+
+#if GNULIB_defined_mbstate_t
+/* Implement mbrtowc() on top of mbtowc().  */
+
+# include <errno.h>
+# include <stdlib.h>
+
+# include "localcharset.h"
+# include "streq.h"
+# include "verify.h"
+
+
+verify (sizeof (mbstate_t) >= 4);
+
+static char internal_state[4];
+
+size_t
+mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+  char *pstate = (char *)ps;
+
+  if (s == NULL)
+    {
+      pwc = NULL;
+      s = "";
+      n = 1;
+    }
+
+  if (n == 0)
+    return (size_t)(-2);
+
+  /* Here n > 0.  */
+
+  if (pstate == NULL)
+    pstate = internal_state;
+
+  {
+    size_t nstate = pstate[0];
+    char buf[4];
+    const char *p;
+    size_t m;
+
+    switch (nstate)
+      {
+      case 0:
+        p = s;
+        m = n;
+        break;
+      case 3:
+        buf[2] = pstate[3];
+        /*FALLTHROUGH*/
+      case 2:
+        buf[1] = pstate[2];
+        /*FALLTHROUGH*/
+      case 1:
+        buf[0] = pstate[1];
+        p = buf;
+        m = nstate;
+        buf[m++] = s[0];
+        if (n >= 2 && m < 4)
+          {
+            buf[m++] = s[1];
+            if (n >= 3 && m < 4)
+              buf[m++] = s[2];
+          }
+        break;
+      default:
+        errno = EINVAL;
+        return (size_t)(-1);
+      }
+
+    /* Here m > 0.  */
+
+# if __GLIBC__ || defined __UCLIBC__
+    /* Work around bug <http://sourceware.org/bugzilla/show_bug.cgi?id=9674> */
+    mbtowc (NULL, NULL, 0);
+# endif
+    {
+      int res = mbtowc (pwc, p, m);
+
+      if (res >= 0)
+        {
+          if (pwc != NULL && ((*pwc == 0) != (res == 0)))
+            abort ();
+          if (nstate >= (res > 0 ? res : 1))
+            abort ();
+          res -= nstate;
+          pstate[0] = 0;
+          return res;
+        }
+
+      /* mbtowc does not distinguish between invalid and incomplete multibyte
+         sequences.  But mbrtowc needs to make this distinction.
+         There are two possible approaches:
+           - Use iconv() and its return value.
+           - Use built-in knowledge about the possible encodings.
+         Given the low quality of implementation of iconv() on the systems that
+         lack mbrtowc(), we use the second approach.
+         The possible encodings are:
+           - 8-bit encodings,
+           - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS,
+           - UTF-8.
+         Use specialized code for each.  */
+      if (m >= 4 || m >= MB_CUR_MAX)
+        goto invalid;
+      /* Here MB_CUR_MAX > 1 and 0 < m < 4.  */
+      {
+        const char *encoding = locale_charset ();
+
+        if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0))
+          {
+            /* Cf. unistr/u8-mblen.c.  */
+            unsigned char c = (unsigned char) p[0];
+
+            if (c >= 0xc2)
+              {
+                if (c < 0xe0)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                  }
+                else if (c < 0xf0)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                    if (m == 2)
+                      {
+                        unsigned char c2 = (unsigned char) p[1];
+
+                        if ((c2 ^ 0x80) < 0x40
+                            && (c >= 0xe1 || c2 >= 0xa0)
+                            && (c != 0xed || c2 < 0xa0))
+                          goto incomplete;
+                      }
+                  }
+                else if (c <= 0xf4)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                    else /* m == 2 || m == 3 */
+                      {
+                        unsigned char c2 = (unsigned char) p[1];
+
+                        if ((c2 ^ 0x80) < 0x40
+                            && (c >= 0xf1 || c2 >= 0x90)
+                            && (c < 0xf4 || (c == 0xf4 && c2 < 0x90)))
+                          {
+                            if (m == 2)
+                              goto incomplete;
+                            else /* m == 3 */
+                              {
+                                unsigned char c3 = (unsigned char) p[2];
+
+                                if ((c3 ^ 0x80) < 0x40)
+                                  goto incomplete;
+                              }
+                          }
+                      }
+                  }
+              }
+            goto invalid;
+          }
+
+        /* As a reference for this code, you can use the GNU libiconv
+           implementation.  Look for uses of the RET_TOOFEW macro.  */
+
+        if (STREQ_OPT (encoding,
+                       "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f)
+                  goto incomplete;
+              }
+            if (m == 2)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c == 0x8f)
+                  {
+                    unsigned char c2 = (unsigned char) p[1];
+
+                    if (c2 >= 0xa1 && c2 < 0xff)
+                      goto incomplete;
+                  }
+              }
+            goto invalid;
+          }
+        if (STREQ_OPT (encoding,
+                       "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+            || STREQ_OPT (encoding,
+                          "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+            || STREQ_OPT (encoding,
+                          "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c >= 0xa1 && c < 0xff)
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+        if (STREQ_OPT (encoding,
+                       "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0xa1 && c < 0xff) || c == 0x8e)
+                  goto incomplete;
+              }
+            else /* m == 2 || m == 3 */
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c == 0x8e)
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+        if (STREQ_OPT (encoding,
+                       "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe))
+                  goto incomplete;
+              }
+            else /* m == 2 || m == 3 */
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c >= 0x90 && c <= 0xe3)
+                  {
+                    unsigned char c2 = (unsigned char) p[1];
+
+                    if (c2 >= 0x30 && c2 <= 0x39)
+                      {
+                        if (m == 2)
+                          goto incomplete;
+                        else /* m == 3 */
+                          {
+                            unsigned char c3 = (unsigned char) p[2];
+
+                            if (c3 >= 0x81 && c3 <= 0xfe)
+                              goto incomplete;
+                          }
+                      }
+                  }
+              }
+            goto invalid;
+          }
+        if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)
+                    || (c >= 0xf0 && c <= 0xf9))
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+
+        /* An unknown multibyte encoding.  */
+        goto incomplete;
+      }
+
+     incomplete:
+      {
+        size_t k = nstate;
+        /* Here 0 <= k < m < 4.  */
+        pstate[++k] = s[0];
+        if (k < m)
+          {
+            pstate[++k] = s[1];
+            if (k < m)
+              pstate[++k] = s[2];
+          }
+        if (k != m)
+          abort ();
+      }
+      pstate[0] = m;
+      return (size_t)(-2);
+
+     invalid:
+      errno = EILSEQ;
+      /* The conversion state is undefined, says POSIX.  */
+      return (size_t)(-1);
+    }
+  }
+}
+
+#else
+/* Override the system's mbrtowc() function.  */
+
+# undef mbrtowc
+
+size_t
+rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG
+  if (s == NULL)
+    {
+      pwc = NULL;
+      s = "";
+      n = 1;
+    }
+# endif
+
+# if MBRTOWC_RETVAL_BUG
+  {
+    static mbstate_t internal_state;
+
+    /* Override mbrtowc's internal state.  We cannot call mbsinit() on the
+       hidden internal state, but we can call it on our variable.  */
+    if (ps == NULL)
+      ps = &internal_state;
+
+    if (!mbsinit (ps))
+      {
+        /* Parse the rest of the multibyte character byte for byte.  */
+        size_t count = 0;
+        for (; n > 0; s++, n--)
+          {
+            wchar_t wc;
+            size_t ret = mbrtowc (&wc, s, 1, ps);
+
+            if (ret == (size_t)(-1))
+              return (size_t)(-1);
+            count++;
+            if (ret != (size_t)(-2))
+              {
+                /* The multibyte character has been completed.  */
+                if (pwc != NULL)
+                  *pwc = wc;
+                return (wc == 0 ? 0 : count);
+              }
+          }
+        return (size_t)(-2);
+      }
+  }
+# endif
+
+# if MBRTOWC_NUL_RETVAL_BUG
+  {
+    wchar_t wc;
+    size_t ret = mbrtowc (&wc, s, n, ps);
+
+    if (ret != (size_t)(-1) && ret != (size_t)(-2))
+      {
+        if (pwc != NULL)
+          *pwc = wc;
+        if (wc == 0)
+          ret = 0;
+      }
+    return ret;
+  }
+# else
+  {
+#   if MBRTOWC_NULL_ARG1_BUG
+    wchar_t dummy;
+
+    if (pwc == NULL)
+      pwc = &dummy;
+#   endif
+
+    return mbrtowc (pwc, s, n, ps);
+  }
+# endif
+}
+
+#endif
diff --git a/lib/mbschr.c b/lib/mbschr.c
new file mode 100644
index 0000000..d021d99
--- /dev/null
+++ b/lib/mbschr.c
@@ -0,0 +1,52 @@
+/* Searching a string for a character.
+   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2007.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+#include "mbuiter.h"
+
+/* Locate the first single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.  */
+char *
+mbschr (const char *string, int c)
+{
+  if (MB_CUR_MAX > 1
+      /* Optimization: We know that ASCII characters < 0x30 don't occur as
+         part of multibyte characters longer than 1 byte.  Hence, if c < 0x30,
+         the faster unibyte loop can be used.  */
+      && (unsigned char) c >= 0x30)
+    {
+      mbui_iterator_t iter;
+
+      for (mbui_init (iter, string);; mbui_advance (iter))
+        {
+          if (!mbui_avail (iter))
+            goto notfound;
+          if (mb_len (mbui_cur (iter)) == 1
+              && (unsigned char) * mbui_cur_ptr (iter) == (unsigned char) c)
+            break;
+        }
+      return (char *) mbui_cur_ptr (iter);
+     notfound:
+      return NULL;
+    }
+  else
+    return strchr (string, c);
+}
diff --git a/lib/mbsinit.c b/lib/mbsinit.c
new file mode 100644
index 0000000..638142e
--- /dev/null
+++ b/lib/mbsinit.c
@@ -0,0 +1,61 @@
+/* Test for initial conversion state.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wchar.h>
+
+#include "verify.h"
+
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+
+/* On native Windows, 'mbstate_t' is defined as 'int'.  */
+
+int
+mbsinit (const mbstate_t *ps)
+{
+  return ps == NULL || *ps == 0;
+}
+
+#else
+
+/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
+   and wcrtomb(), wcsrtombs().
+   We assume that
+     - sizeof (mbstate_t) >= 4,
+     - only stateless encodings are supported (such as UTF-8 and EUC-JP, but
+       not ISO-2022 variants),
+     - for each encoding, the number of bytes for a wide character is <= 4.
+       (This maximum is attained for UTF-8, GB18030, EUC-TW.)
+   We define the meaning of mbstate_t as follows:
+     - In mb -> wc direction, mbstate_t's first byte contains the number of
+       buffered bytes (in the range 0..3), followed by up to 3 buffered bytes.
+     - In wc -> mb direction, mbstate_t contains no information. In other
+       words, it is always in the initial state.  */
+
+verify (sizeof (mbstate_t) >= 4);
+
+int
+mbsinit (const mbstate_t *ps)
+{
+  const char *pstate = (const char *)ps;
+
+  return pstate == NULL || pstate[0] == 0;
+}
+
+#endif
diff --git a/lib/mbsrchr.c b/lib/mbsrchr.c
new file mode 100644
index 0000000..ad39a3b
--- /dev/null
+++ b/lib/mbsrchr.c
@@ -0,0 +1,49 @@
+/* Searching a string for the last occurrence of a character.
+   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2007.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+#include "mbuiter.h"
+
+/* Locate the last single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.  */
+char *
+mbsrchr (const char *string, int c)
+{
+  if (MB_CUR_MAX > 1
+      /* Optimization: We know that ASCII characters < 0x30 don't occur as
+         part of multibyte characters longer than 1 byte.  Hence, if c < 0x30,
+         the faster unibyte loop can be used.  */
+      && (unsigned char) c >= 0x30)
+    {
+      const char *result = NULL;
+      mbui_iterator_t iter;
+
+      for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter))
+        {
+          if (mb_len (mbui_cur (iter)) == 1
+              && (unsigned char) * mbui_cur_ptr (iter) == (unsigned char) c)
+            result = mbui_cur_ptr (iter);
+        }
+      return (char *) result;
+    }
+  else
+    return strrchr (string, c);
+}
diff --git a/lib/mbswidth.c b/lib/mbswidth.c
index c9e78d6..d81b5c8 100644
--- a/lib/mbswidth.c
+++ b/lib/mbswidth.c
@@ -1,10 +1,10 @@
 /* Determine the number of screen columns needed for a string.
-   Copyright (C) 2000-2005 Free Software Foundation, Inc.
+   Copyright (C) 2000-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -12,14 +12,11 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <haible@clisp.cons.org>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 /* Specification.  */
 #include "mbswidth.h"
@@ -33,66 +30,19 @@
 #include <ctype.h>
 
 /* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth().  */
-#if HAVE_WCHAR_H
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
-   <wchar.h>.  */
-# include <stdio.h>
-# include <time.h>
-# include <wchar.h>
-#endif
+#include <wchar.h>
 
-/* Get iswprint(), iswcntrl().  */
-#if HAVE_WCTYPE_H
-# include <wctype.h>
-#endif
-#if !defined iswprint && !HAVE_ISWPRINT
-# define iswprint(wc) 1
-#endif
-#if !defined iswcntrl && !HAVE_ISWCNTRL
-# define iswcntrl(wc) 0
-#endif
+/* Get iswcntrl().  */
+#include <wctype.h>
 
-#ifndef mbsinit
-# if !HAVE_MBSINIT
-#  define mbsinit(ps) 1
-# endif
-#endif
-
-#ifndef HAVE_DECL_WCWIDTH
-"this configure-time declaration test was not run"
-#endif
-#if !HAVE_DECL_WCWIDTH
-int wcwidth ();
-#endif
-
-#ifndef wcwidth
-# if !HAVE_WCWIDTH
-/* wcwidth doesn't exist, so assume all printable characters have
-   width 1.  */
-#  define wcwidth(wc) ((wc) == 0 ? 0 : iswprint (wc) ? 1 : -1)
-# endif
-#endif
-
-/* Get ISPRINT.  */
-#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-/* Undefine to protect against the definition in wctype.h of Solaris 2.6.   */
-#undef ISPRINT
-#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
-#undef ISCNTRL
-#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
+/* Get INT_MAX.  */
+#include <limits.h>
 
 /* Returns the number of columns needed to represent the multibyte
    character string pointed to by STRING.  If a non-printable character
    occurs, and MBSW_REJECT_UNPRINTABLE is specified, -1 is returned.
    With flags = MBSW_REJECT_INVALID | MBSW_REJECT_UNPRINTABLE, this is
-   the multibyte analogue of the wcswidth function.
-   If STRING is not of length < INT_MAX / 2, integer overflow can occur.  */
+   the multibyte analogue of the wcswidth function.  */
 int
 mbswidth (const char *string, int flags)
 {
@@ -102,8 +52,7 @@
 /* Returns the number of columns needed to represent the multibyte
    character string pointed to by STRING of length NBYTES.  If a
    non-printable character occurs, and MBSW_REJECT_UNPRINTABLE is
-   specified, -1 is returned.
-   If NBYTES is not < INT_MAX / 2, integer overflow can occur.  */
+   specified, -1 is returned.  */
 int
 mbsnwidth (const char *string, size_t nbytes, int flags)
 {
@@ -112,110 +61,133 @@
   int width;
 
   width = 0;
-#if HAVE_MBRTOWC
   if (MB_CUR_MAX > 1)
     {
       while (p < plimit)
-	switch (*p)
-	  {
-	    case ' ': case '!': case '"': case '#': case '%':
-	    case '&': case '\'': case '(': case ')': case '*':
-	    case '+': case ',': case '-': case '.': case '/':
-	    case '0': case '1': case '2': case '3': case '4':
-	    case '5': case '6': case '7': case '8': case '9':
-	    case ':': case ';': case '<': case '=': case '>':
-	    case '?':
-	    case 'A': case 'B': case 'C': case 'D': case 'E':
-	    case 'F': case 'G': case 'H': case 'I': case 'J':
-	    case 'K': case 'L': case 'M': case 'N': case 'O':
-	    case 'P': case 'Q': case 'R': case 'S': case 'T':
-	    case 'U': case 'V': case 'W': case 'X': case 'Y':
-	    case 'Z':
-	    case '[': case '\\': case ']': case '^': case '_':
-	    case 'a': case 'b': case 'c': case 'd': case 'e':
-	    case 'f': case 'g': case 'h': case 'i': case 'j':
-	    case 'k': case 'l': case 'm': case 'n': case 'o':
-	    case 'p': case 'q': case 'r': case 's': case 't':
-	    case 'u': case 'v': case 'w': case 'x': case 'y':
-	    case 'z': case '{': case '|': case '}': case '~':
-	      /* These characters are printable ASCII characters.  */
-	      p++;
-	      width++;
-	      break;
-	    default:
-	      /* If we have a multibyte sequence, scan it up to its end.  */
-	      {
-		mbstate_t mbstate;
-		memset (&mbstate, 0, sizeof mbstate);
-		do
-		  {
-		    wchar_t wc;
-		    size_t bytes;
-		    int w;
+        switch (*p)
+          {
+            case ' ': case '!': case '"': case '#': case '%':
+            case '&': case '\'': case '(': case ')': case '*':
+            case '+': case ',': case '-': case '.': case '/':
+            case '0': case '1': case '2': case '3': case '4':
+            case '5': case '6': case '7': case '8': case '9':
+            case ':': case ';': case '<': case '=': case '>':
+            case '?':
+            case 'A': case 'B': case 'C': case 'D': case 'E':
+            case 'F': case 'G': case 'H': case 'I': case 'J':
+            case 'K': case 'L': case 'M': case 'N': case 'O':
+            case 'P': case 'Q': case 'R': case 'S': case 'T':
+            case 'U': case 'V': case 'W': case 'X': case 'Y':
+            case 'Z':
+            case '[': case '\\': case ']': case '^': case '_':
+            case 'a': case 'b': case 'c': case 'd': case 'e':
+            case 'f': case 'g': case 'h': case 'i': case 'j':
+            case 'k': case 'l': case 'm': case 'n': case 'o':
+            case 'p': case 'q': case 'r': case 's': case 't':
+            case 'u': case 'v': case 'w': case 'x': case 'y':
+            case 'z': case '{': case '|': case '}': case '~':
+              /* These characters are printable ASCII characters.  */
+              p++;
+              width++;
+              break;
+            default:
+              /* If we have a multibyte sequence, scan it up to its end.  */
+              {
+                mbstate_t mbstate;
+                memset (&mbstate, 0, sizeof mbstate);
+                do
+                  {
+                    wchar_t wc;
+                    size_t bytes;
+                    int w;
 
-		    bytes = mbrtowc (&wc, p, plimit - p, &mbstate);
+                    bytes = mbrtowc (&wc, p, plimit - p, &mbstate);
 
-		    if (bytes == (size_t) -1)
-		      /* An invalid multibyte sequence was encountered.  */
-		      {
-			if (!(flags & MBSW_REJECT_INVALID))
-			  {
-			    p++;
-			    width++;
-			    break;
-			  }
-			else
-			  return -1;
-		      }
+                    if (bytes == (size_t) -1)
+                      /* An invalid multibyte sequence was encountered.  */
+                      {
+                        if (!(flags & MBSW_REJECT_INVALID))
+                          {
+                            p++;
+                            width++;
+                            break;
+                          }
+                        else
+                          return -1;
+                      }
 
-		    if (bytes == (size_t) -2)
-		      /* An incomplete multibyte character at the end.  */
-		      {
-			if (!(flags & MBSW_REJECT_INVALID))
-			  {
-			    p = plimit;
-			    width++;
-			    break;
-			  }
-			else
-			  return -1;
-		      }
+                    if (bytes == (size_t) -2)
+                      /* An incomplete multibyte character at the end.  */
+                      {
+                        if (!(flags & MBSW_REJECT_INVALID))
+                          {
+                            p = plimit;
+                            width++;
+                            break;
+                          }
+                        else
+                          return -1;
+                      }
 
-		    if (bytes == 0)
-		      /* A null wide character was encountered.  */
-		      bytes = 1;
+                    if (bytes == 0)
+                      /* A null wide character was encountered.  */
+                      bytes = 1;
 
-		    w = wcwidth (wc);
-		    if (w >= 0)
-		      /* A printable multibyte character.  */
-		      width += w;
-		    else
-		      /* An unprintable multibyte character.  */
-		      if (!(flags & MBSW_REJECT_UNPRINTABLE))
-			width += (iswcntrl (wc) ? 0 : 1);
-		      else
-			return -1;
+                    w = wcwidth (wc);
+                    if (w >= 0)
+                      /* A printable multibyte character.  */
+                      {
+                        if (w > INT_MAX - width)
+                          goto overflow;
+                        width += w;
+                      }
+                    else
+                      /* An unprintable multibyte character.  */
+                      if (!(flags & MBSW_REJECT_UNPRINTABLE))
+                        {
+                          if (!iswcntrl (wc))
+                            {
+                              if (width == INT_MAX)
+                                goto overflow;
+                              width++;
+                            }
+                        }
+                      else
+                        return -1;
 
-		    p += bytes;
-		  }
-		while (! mbsinit (&mbstate));
-	      }
-	      break;
-	  }
+                    p += bytes;
+                  }
+                while (! mbsinit (&mbstate));
+              }
+              break;
+          }
       return width;
     }
-#endif
 
   while (p < plimit)
     {
       unsigned char c = (unsigned char) *p++;
 
-      if (ISPRINT (c))
-	width++;
+      if (isprint (c))
+        {
+          if (width == INT_MAX)
+            goto overflow;
+          width++;
+        }
       else if (!(flags & MBSW_REJECT_UNPRINTABLE))
-	width += (ISCNTRL (c) ? 0 : 1);
+        {
+          if (!iscntrl (c))
+            {
+              if (width == INT_MAX)
+                goto overflow;
+              width++;
+            }
+        }
       else
-	return -1;
+        return -1;
     }
   return width;
+
+ overflow:
+  return INT_MAX;
 }
diff --git a/lib/mbswidth.h b/lib/mbswidth.h
index 1935e0a..690a5a7 100644
--- a/lib/mbswidth.h
+++ b/lib/mbswidth.h
@@ -1,10 +1,10 @@
 /* Determine the number of screen columns needed for a string.
-   Copyright (C) 2000-2004 Free Software Foundation, Inc.
+   Copyright (C) 2000-2004, 2007, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -12,8 +12,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
 
@@ -30,7 +29,7 @@
 #endif
 
 
-#ifdef	__cplusplus
+#ifdef __cplusplus
 extern "C" {
 #endif
 
@@ -44,7 +43,7 @@
 /* If this bit is set, return -1 upon finding a non-printable character.
    Otherwise, assume unprintable characters have width 0 if they are
    control characters and 1 otherwise.  */
-#define MBSW_REJECT_UNPRINTABLE	2
+#define MBSW_REJECT_UNPRINTABLE 2
 
 
 /* Returns the number of screen columns needed for STRING.  */
@@ -56,6 +55,6 @@
 extern int mbsnwidth (const char *buf, size_t nbytes, int flags);
 
 
-#ifdef	__cplusplus
+#ifdef __cplusplus
 }
 #endif
diff --git a/lib/mbuiter.c b/lib/mbuiter.c
new file mode 100644
index 0000000..9167580
--- /dev/null
+++ b/lib/mbuiter.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define MBUITER_INLINE _GL_EXTERN_INLINE
+#include "mbuiter.h"
diff --git a/lib/mbuiter.h b/lib/mbuiter.h
new file mode 100644
index 0000000..6194d9d
--- /dev/null
+++ b/lib/mbuiter.h
@@ -0,0 +1,229 @@
+/* Iterating through multibyte strings: macros for multi-byte encodings.
+   Copyright (C) 2001, 2005, 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+/* The macros in this file implement forward iteration through a
+   multi-byte string, without knowing its length a-priori.
+
+   With these macros, an iteration loop that looks like
+
+      char *iter;
+      for (iter = buf; *iter != '\0'; iter++)
+        {
+          do_something (*iter);
+        }
+
+   becomes
+
+      mbui_iterator_t iter;
+      for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter))
+        {
+          do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter)));
+        }
+
+   The benefit of these macros over plain use of mbrtowc is:
+   - Handling of invalid multibyte sequences is possible without
+     making the code more complicated, while still preserving the
+     invalid multibyte sequences.
+
+   Compared to mbiter.h, the macros here don't need to know the string's
+   length a-priori.  The downside is that at each step, the look-ahead
+   that guards against overrunning the terminating '\0' is more expensive.
+   The mbui_* macros are therefore suitable when there is a high probability
+   that only the first few multibyte characters need to be inspected.
+   Whereas the mbi_* macros are better if usually the iteration runs
+   through the entire string.
+
+   mbui_iterator_t
+     is a type usable for variable declarations.
+
+   mbui_init (iter, startptr)
+     initializes the iterator, starting at startptr.
+
+   mbui_avail (iter)
+     returns true if there are more multibyte characters available before
+     the end of string is reached. In this case, mbui_cur (iter) is
+     initialized to the next multibyte character.
+
+   mbui_advance (iter)
+     advances the iterator by one multibyte character.
+
+   mbui_cur (iter)
+     returns the current multibyte character, of type mbchar_t.  All the
+     macros defined in mbchar.h can be used on it.
+
+   mbui_cur_ptr (iter)
+     return a pointer to the beginning of the current multibyte character.
+
+   mbui_reloc (iter, ptrdiff)
+     relocates iterator when the string is moved by ptrdiff bytes.
+
+   mbui_copy (&destiter, &srciter)
+     copies srciter to destiter.
+
+   Here are the function prototypes of the macros.
+
+   extern void          mbui_init (mbui_iterator_t iter, const char *startptr);
+   extern bool          mbui_avail (mbui_iterator_t iter);
+   extern void          mbui_advance (mbui_iterator_t iter);
+   extern mbchar_t      mbui_cur (mbui_iterator_t iter);
+   extern const char *  mbui_cur_ptr (mbui_iterator_t iter);
+   extern void          mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff);
+   extern void          mbui_copy (mbui_iterator_t *new, const mbui_iterator_t *old);
+ */
+
+#ifndef _MBUITER_H
+#define _MBUITER_H 1
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+   <wchar.h>.  */
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+#include "mbchar.h"
+#include "strnlen1.h"
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef MBUITER_INLINE
+# define MBUITER_INLINE _GL_INLINE
+#endif
+
+struct mbuiter_multi
+{
+  bool in_shift;        /* true if next byte may not be interpreted as ASCII */
+  mbstate_t state;      /* if in_shift: current shift state */
+  bool next_done;       /* true if mbui_avail has already filled the following */
+  struct mbchar cur;    /* the current character:
+        const char *cur.ptr             pointer to current character
+        The following are only valid after mbui_avail.
+        size_t cur.bytes                number of bytes of current character
+        bool cur.wc_valid               true if wc is a valid wide character
+        wchar_t cur.wc                  if wc_valid: the current character
+        */
+};
+
+MBUITER_INLINE void
+mbuiter_multi_next (struct mbuiter_multi *iter)
+{
+  if (iter->next_done)
+    return;
+  if (iter->in_shift)
+    goto with_shift;
+  /* Handle most ASCII characters quickly, without calling mbrtowc().  */
+  if (is_basic (*iter->cur.ptr))
+    {
+      /* These characters are part of the basic character set.  ISO C 99
+         guarantees that their wide character code is identical to their
+         char code.  */
+      iter->cur.bytes = 1;
+      iter->cur.wc = *iter->cur.ptr;
+      iter->cur.wc_valid = true;
+    }
+  else
+    {
+      assert (mbsinit (&iter->state));
+      iter->in_shift = true;
+    with_shift:
+      iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr,
+                                 strnlen1 (iter->cur.ptr, MB_CUR_MAX),
+                                 &iter->state);
+      if (iter->cur.bytes == (size_t) -1)
+        {
+          /* An invalid multibyte sequence was encountered.  */
+          iter->cur.bytes = 1;
+          iter->cur.wc_valid = false;
+          /* Whether to set iter->in_shift = false and reset iter->state
+             or not is not very important; the string is bogus anyway.  */
+        }
+      else if (iter->cur.bytes == (size_t) -2)
+        {
+          /* An incomplete multibyte character at the end.  */
+          iter->cur.bytes = strlen (iter->cur.ptr);
+          iter->cur.wc_valid = false;
+          /* Whether to set iter->in_shift = false and reset iter->state
+             or not is not important; the string end is reached anyway.  */
+        }
+      else
+        {
+          if (iter->cur.bytes == 0)
+            {
+              /* A null wide character was encountered.  */
+              iter->cur.bytes = 1;
+              assert (*iter->cur.ptr == '\0');
+              assert (iter->cur.wc == 0);
+            }
+          iter->cur.wc_valid = true;
+
+          /* When in the initial state, we can go back treating ASCII
+             characters more quickly.  */
+          if (mbsinit (&iter->state))
+            iter->in_shift = false;
+        }
+    }
+  iter->next_done = true;
+}
+
+MBUITER_INLINE void
+mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff)
+{
+  iter->cur.ptr += ptrdiff;
+}
+
+MBUITER_INLINE void
+mbuiter_multi_copy (struct mbuiter_multi *new_iter, const struct mbuiter_multi *old_iter)
+{
+  if ((new_iter->in_shift = old_iter->in_shift))
+    memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t));
+  else
+    memset (&new_iter->state, 0, sizeof (mbstate_t));
+  new_iter->next_done = old_iter->next_done;
+  mb_copy (&new_iter->cur, &old_iter->cur);
+}
+
+/* Iteration macros.  */
+typedef struct mbuiter_multi mbui_iterator_t;
+#define mbui_init(iter, startptr) \
+  ((iter).cur.ptr = (startptr), \
+   (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \
+   (iter).next_done = false)
+#define mbui_avail(iter) \
+  (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur))
+#define mbui_advance(iter) \
+  ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false)
+
+/* Access to the current character.  */
+#define mbui_cur(iter) (iter).cur
+#define mbui_cur_ptr(iter) (iter).cur.ptr
+
+/* Relocation.  */
+#define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff)
+
+/* Copying an iterator.  */
+#define mbui_copy mbuiter_multi_copy
+
+_GL_INLINE_HEADER_END
+
+#endif /* _MBUITER_H */
diff --git a/lib/memchr.c b/lib/memchr.c
new file mode 100644
index 0000000..b8fb0ef
--- /dev/null
+++ b/lib/memchr.c
@@ -0,0 +1,172 @@
+/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2012
+   Free Software Foundation, Inc.
+
+   Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
+   with help from Dan Sahlin (dan@sics.se) and
+   commentary by Jim Blandy (jimb@ai.mit.edu);
+   adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
+   and implemented by Roland McGrath (roland@ai.mit.edu).
+
+NOTE: The canonical source of this file is maintained with the GNU C Library.
+Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+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 3 of the License, or 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#include <stddef.h>
+
+#if defined _LIBC
+# include <memcopy.h>
+#else
+# define reg_char char
+#endif
+
+#include <limits.h>
+
+#if HAVE_BP_SYM_H || defined _LIBC
+# include <bp-sym.h>
+#else
+# define BP_SYM(sym) sym
+#endif
+
+#undef __memchr
+#ifdef _LIBC
+# undef memchr
+#endif
+
+#ifndef weak_alias
+# define __memchr memchr
+#endif
+
+/* Search no more than N bytes of S for C.  */
+void *
+__memchr (void const *s, int c_in, size_t n)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned reg_char c;
+
+  c = (unsigned char) c_in;
+
+  /* Handle the first few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       n > 0 && (size_t) char_ptr % sizeof (longword) != 0;
+       --n, ++char_ptr)
+    if (*char_ptr == c)
+      return (void *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will test a
+     longword at a time.  The tricky part is testing if *any of the four*
+     bytes in the longword in question are equal to c.  We first use an xor
+     with repeated_c.  This reduces the task to testing whether *any of the
+     four* bytes in longword1 is zero.
+
+     We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     So, the test whether any byte in longword1 is zero is equivalent to
+     testing whether tmp is nonzero.  */
+
+  while (n >= sizeof (longword))
+    {
+      longword longword1 = *longword_ptr ^ repeated_c;
+
+      if ((((longword1 - repeated_one) & ~longword1)
+           & (repeated_one << 7)) != 0)
+        break;
+      longword_ptr++;
+      n -= sizeof (longword);
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that either n < sizeof (longword), or one of the
+     sizeof (longword) bytes starting at char_ptr is == c.  On little-endian
+     machines, we could determine the first such byte without any further
+     memory accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.  Choose code
+     that works in both cases.  */
+
+  for (; n > 0; --n, ++char_ptr)
+    {
+      if (*char_ptr == c)
+        return (void *) char_ptr;
+    }
+
+  return NULL;
+}
+#ifdef weak_alias
+weak_alias (__memchr, BP_SYM (memchr))
+#endif
diff --git a/lib/memchr.valgrind b/lib/memchr.valgrind
new file mode 100644
index 0000000..60f247e
--- /dev/null
+++ b/lib/memchr.valgrind
@@ -0,0 +1,14 @@
+# Suppress a valgrind message about use of uninitialized memory in memchr().
+# POSIX states that when the character is found, memchr must not read extra
+# bytes in an overestimated length (for example, where memchr is used to
+# implement strnlen).  However, we use a safe word read to provide a speedup.
+{
+    memchr-value4
+    Memcheck:Value4
+    fun:rpl_memchr
+}
+{
+    memchr-value8
+    Memcheck:Value8
+    fun:rpl_memchr
+}
diff --git a/lib/msvc-inval.c b/lib/msvc-inval.c
new file mode 100644
index 0000000..ba76a7e
--- /dev/null
+++ b/lib/msvc-inval.c
@@ -0,0 +1,129 @@
+/* Invalid parameter handler for MSVC runtime libraries.
+   Copyright (C) 2011-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "msvc-inval.h"
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \
+    && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING)
+
+/* Get _invalid_parameter_handler type and _set_invalid_parameter_handler
+   declaration.  */
+# include <stdlib.h>
+
+# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING
+
+static void cdecl
+gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+                                   const wchar_t *function,
+                                   const wchar_t *file,
+                                   unsigned int line,
+                                   uintptr_t dummy)
+{
+}
+
+# else
+
+/* Get declarations of the native Windows API functions.  */
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+
+#  if defined _MSC_VER
+
+static void cdecl
+gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+                                   const wchar_t *function,
+                                   const wchar_t *file,
+                                   unsigned int line,
+                                   uintptr_t dummy)
+{
+  RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL);
+}
+
+#  else
+
+/* An index to thread-local storage.  */
+static DWORD tls_index;
+static int tls_initialized /* = 0 */;
+
+/* Used as a fallback only.  */
+static struct gl_msvc_inval_per_thread not_per_thread;
+
+struct gl_msvc_inval_per_thread *
+gl_msvc_inval_current (void)
+{
+  if (!tls_initialized)
+    {
+      tls_index = TlsAlloc ();
+      tls_initialized = 1;
+    }
+  if (tls_index == TLS_OUT_OF_INDEXES)
+    /* TlsAlloc had failed.  */
+    return &not_per_thread;
+  else
+    {
+      struct gl_msvc_inval_per_thread *pointer =
+        (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index);
+      if (pointer == NULL)
+        {
+          /* First call.  Allocate a new 'struct gl_msvc_inval_per_thread'.  */
+          pointer =
+            (struct gl_msvc_inval_per_thread *)
+            malloc (sizeof (struct gl_msvc_inval_per_thread));
+          if (pointer == NULL)
+            /* Could not allocate memory.  Use the global storage.  */
+            pointer = &not_per_thread;
+          TlsSetValue (tls_index, pointer);
+        }
+      return pointer;
+    }
+}
+
+static void cdecl
+gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+                                   const wchar_t *function,
+                                   const wchar_t *file,
+                                   unsigned int line,
+                                   uintptr_t dummy)
+{
+  struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current ();
+  if (current->restart_valid)
+    longjmp (current->restart, 1);
+  else
+    /* An invalid parameter notification from outside the gnulib code.
+       Give the caller a chance to intervene.  */
+    RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL);
+}
+
+#  endif
+
+# endif
+
+static int gl_msvc_inval_initialized /* = 0 */;
+
+void
+gl_msvc_inval_ensure_handler (void)
+{
+  if (gl_msvc_inval_initialized == 0)
+    {
+      _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler);
+      gl_msvc_inval_initialized = 1;
+    }
+}
+
+#endif
diff --git a/lib/msvc-inval.h b/lib/msvc-inval.h
new file mode 100644
index 0000000..eb6930b
--- /dev/null
+++ b/lib/msvc-inval.h
@@ -0,0 +1,222 @@
+/* Invalid parameter handler for MSVC runtime libraries.
+   Copyright (C) 2011-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MSVC_INVAL_H
+#define _MSVC_INVAL_H
+
+/* With MSVC runtime libraries with the "invalid parameter handler" concept,
+   functions like fprintf(), dup2(), or close() crash when the caller passes
+   an invalid argument.  But POSIX wants error codes (such as EINVAL or EBADF)
+   instead.
+   This file defines macros that turn such an invalid parameter notification
+   into a non-local exit.  An error code can then be produced at the target
+   of this exit.  You can thus write code like
+
+     TRY_MSVC_INVAL
+       {
+         <Code that can trigger an invalid parameter notification
+          but does not do 'return', 'break', 'continue', nor 'goto'.>
+       }
+     CATCH_MSVC_INVAL
+       {
+         <Code that handles an invalid parameter notification
+          but does not do 'return', 'break', 'continue', nor 'goto'.>
+       }
+     DONE_MSVC_INVAL;
+
+   This entire block expands to a single statement.
+
+   The handling of invalid parameters can be done in three ways:
+
+     * The default way, which is reasonable for programs (not libraries):
+       AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING])
+
+     * The way for libraries that make "hairy" calls (like close(-1), or
+       fclose(fp) where fileno(fp) is closed, or simply getdtablesize()):
+       AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING])
+
+     * The way for libraries that make no "hairy" calls:
+       AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING])
+ */
+
+#define DEFAULT_HANDLING       0
+#define HAIRY_LIBRARY_HANDLING 1
+#define SANE_LIBRARY_HANDLING  2
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \
+    && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING)
+/* A native Windows platform with the "invalid parameter handler" concept,
+   and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING.  */
+
+# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING
+/* Default handling.  */
+
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+
+/* Ensure that the invalid parameter handler in installed that just returns.
+   Because we assume no other part of the program installs a different
+   invalid parameter handler, this solution is multithread-safe.  */
+extern void gl_msvc_inval_ensure_handler (void);
+
+#  ifdef __cplusplus
+}
+#  endif
+
+#  define TRY_MSVC_INVAL \
+     do                                                                        \
+       {                                                                       \
+         gl_msvc_inval_ensure_handler ();                                      \
+         if (1)
+#  define CATCH_MSVC_INVAL \
+         else
+#  define DONE_MSVC_INVAL \
+       }                                                                       \
+     while (0)
+
+# else
+/* Handling for hairy libraries.  */
+
+#  include <excpt.h>
+
+/* Gnulib can define its own status codes, as described in the page
+   "Raising Software Exceptions" on microsoft.com
+   <http://msdn.microsoft.com/en-us/library/het71c37.aspx>.
+   Our status codes are composed of
+     - 0xE0000000, mandatory for all user-defined status codes,
+     - 0x474E550, a API identifier ("GNU"),
+     - 0, 1, 2, ..., used to distinguish different status codes from the
+       same API.  */
+#  define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0)
+
+#  if defined _MSC_VER
+/* A compiler that supports __try/__except, as described in the page
+   "try-except statement" on microsoft.com
+   <http://msdn.microsoft.com/en-us/library/s58ftw19.aspx>.
+   With __try/__except, we can use the multithread-safe exception handling.  */
+
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+
+/* Ensure that the invalid parameter handler in installed that raises a
+   software exception with code STATUS_GNULIB_INVALID_PARAMETER.
+   Because we assume no other part of the program installs a different
+   invalid parameter handler, this solution is multithread-safe.  */
+extern void gl_msvc_inval_ensure_handler (void);
+
+#   ifdef __cplusplus
+}
+#   endif
+
+#   define TRY_MSVC_INVAL \
+      do                                                                       \
+        {                                                                      \
+          gl_msvc_inval_ensure_handler ();                                     \
+          __try
+#   define CATCH_MSVC_INVAL \
+          __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER     \
+                    ? EXCEPTION_EXECUTE_HANDLER                                \
+                    : EXCEPTION_CONTINUE_SEARCH)
+#   define DONE_MSVC_INVAL \
+        }                                                                      \
+      while (0)
+
+#  else
+/* Any compiler.
+   We can only use setjmp/longjmp.  */
+
+#   include <setjmp.h>
+
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+
+struct gl_msvc_inval_per_thread
+{
+  /* The restart that will resume execution at the code between
+     CATCH_MSVC_INVAL and DONE_MSVC_INVAL.  It is enabled only between
+     TRY_MSVC_INVAL and CATCH_MSVC_INVAL.  */
+  jmp_buf restart;
+
+  /* Tells whether the contents of restart is valid.  */
+  int restart_valid;
+};
+
+/* Ensure that the invalid parameter handler in installed that passes
+   control to the gl_msvc_inval_restart if it is valid, or raises a
+   software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise.
+   Because we assume no other part of the program installs a different
+   invalid parameter handler, this solution is multithread-safe.  */
+extern void gl_msvc_inval_ensure_handler (void);
+
+/* Return a pointer to the per-thread data for the current thread.  */
+extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void);
+
+#   ifdef __cplusplus
+}
+#   endif
+
+#   define TRY_MSVC_INVAL \
+      do                                                                       \
+        {                                                                      \
+          struct gl_msvc_inval_per_thread *msvc_inval_current;                 \
+          gl_msvc_inval_ensure_handler ();                                     \
+          msvc_inval_current = gl_msvc_inval_current ();                       \
+          /* First, initialize gl_msvc_inval_restart.  */                      \
+          if (setjmp (msvc_inval_current->restart) == 0)                       \
+            {                                                                  \
+              /* Then, mark it as valid.  */                                   \
+              msvc_inval_current->restart_valid = 1;
+#   define CATCH_MSVC_INVAL \
+              /* Execution completed.                                          \
+                 Mark gl_msvc_inval_restart as invalid.  */                    \
+              msvc_inval_current->restart_valid = 0;                           \
+            }                                                                  \
+          else                                                                 \
+            {                                                                  \
+              /* Execution triggered an invalid parameter notification.        \
+                 Mark gl_msvc_inval_restart as invalid.  */                    \
+              msvc_inval_current->restart_valid = 0;
+#   define DONE_MSVC_INVAL \
+            }                                                                  \
+        }                                                                      \
+      while (0)
+
+#  endif
+
+# endif
+
+#else
+/* A platform that does not need to the invalid parameter handler,
+   or when SANE_LIBRARY_HANDLING is desired.  */
+
+/* The braces here avoid GCC warnings like
+   "warning: suggest explicit braces to avoid ambiguous 'else'".  */
+# define TRY_MSVC_INVAL \
+    do                                                                         \
+      {                                                                        \
+        if (1)
+# define CATCH_MSVC_INVAL \
+        else
+# define DONE_MSVC_INVAL \
+      }                                                                        \
+    while (0)
+
+#endif
+
+#endif /* _MSVC_INVAL_H */
diff --git a/lib/msvc-nothrow.c b/lib/msvc-nothrow.c
new file mode 100644
index 0000000..e5cf181
--- /dev/null
+++ b/lib/msvc-nothrow.c
@@ -0,0 +1,49 @@
+/* Wrappers that don't throw invalid parameter notifications
+   with MSVC runtime libraries.
+   Copyright (C) 2011-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "msvc-nothrow.h"
+
+/* Get declarations of the native Windows API functions.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#include "msvc-inval.h"
+
+#undef _get_osfhandle
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+intptr_t
+_gl_nothrow_get_osfhandle (int fd)
+{
+  intptr_t result;
+
+  TRY_MSVC_INVAL
+    {
+      result = _get_osfhandle (fd);
+    }
+  CATCH_MSVC_INVAL
+    {
+      result = (intptr_t) INVALID_HANDLE_VALUE;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+#endif
diff --git a/lib/msvc-nothrow.h b/lib/msvc-nothrow.h
new file mode 100644
index 0000000..2b71945
--- /dev/null
+++ b/lib/msvc-nothrow.h
@@ -0,0 +1,43 @@
+/* Wrappers that don't throw invalid parameter notifications
+   with MSVC runtime libraries.
+   Copyright (C) 2011-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MSVC_NOTHROW_H
+#define _MSVC_NOTHROW_H
+
+/* With MSVC runtime libraries with the "invalid parameter handler" concept,
+   functions like fprintf(), dup2(), or close() crash when the caller passes
+   an invalid argument.  But POSIX wants error codes (such as EINVAL or EBADF)
+   instead.
+   This file defines wrappers that turn such an invalid parameter notification
+   into an error code.  */
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+/* Get original declaration of _get_osfhandle.  */
+# include <io.h>
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+
+/* Override _get_osfhandle.  */
+extern intptr_t _gl_nothrow_get_osfhandle (int fd);
+#  define _get_osfhandle _gl_nothrow_get_osfhandle
+
+# endif
+
+#endif
+
+#endif /* _MSVC_NOTHROW_H */
diff --git a/lib/obstack.c b/lib/obstack.c
index 6df0611..fc50f1e 100644
--- a/lib/obstack.c
+++ b/lib/obstack.c
@@ -1,31 +1,25 @@
 /* obstack.c - subroutines used implicitly by object stack macros
 
-   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
-   1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
-   Inc.
+   Copyright (C) 1988-1994, 1996-2006, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifdef _LIBC
 # include <obstack.h>
 # include <shlib-compat.h>
 #else
+# include <config.h>
 # include "obstack.h"
 #endif
 
@@ -40,10 +34,10 @@
    C Library, but also included in many other GNU distributions.  Compiling
    and linking in this code is a waste when using the GNU C library
    (especially if it is a shared library).  Rather than having every GNU
-   program understand `configure --with-gnu-libc' and omit the object
+   program understand 'configure --with-gnu-libc' and omit the object
    files, it is simpler to just do this in the source for each such file.  */
 
-#include <stdio.h>		/* Random thing to get __GNU_LIBRARY__.  */
+#include <stdio.h>              /* Random thing to get __GNU_LIBRARY__.  */
 #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
 # include <gnu-versions.h>
 # if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
@@ -55,13 +49,7 @@
 
 #ifndef ELIDE_CODE
 
-
-# if HAVE_INTTYPES_H
-#  include <inttypes.h>
-# endif
-# if HAVE_STDINT_H || defined _LIBC
-#  include <stdint.h>
-# endif
+# include <stdint.h>
 
 /* Determine default alignment.  */
 union fooround
@@ -86,23 +74,23 @@
 
 /* When we copy a long block of data, this is the unit to do it with.
    On some machines, copying successive ints does not work;
-   in such a case, redefine COPYING_UNIT to `long' (if that works)
-   or `char' as a last resort.  */
+   in such a case, redefine COPYING_UNIT to 'long' (if that works)
+   or 'char' as a last resort.  */
 # ifndef COPYING_UNIT
 #  define COPYING_UNIT int
 # endif
 
 
-/* The functions allocating more room by calling `obstack_chunk_alloc'
-   jump to the handler pointed to by `obstack_alloc_failed_handler'.
+/* The functions allocating more room by calling 'obstack_chunk_alloc'
+   jump to the handler pointed to by 'obstack_alloc_failed_handler'.
    This can be set to a user defined function which should either
    abort gracefully or use longjump - but shouldn't return.  This
    variable by default points to the internal function
-   `print_and_abort'.  */
-static void print_and_abort (void);
+   'print_and_abort'.  */
+static _Noreturn void print_and_abort (void);
 void (*obstack_alloc_failed_handler) (void) = print_and_abort;
 
-/* Exit value used when `print_and_abort' is used.  */
+/* Exit value used when 'print_and_abort' is used.  */
 # include <stdlib.h>
 # ifdef _LIBC
 int obstack_exit_failure = EXIT_FAILURE;
@@ -151,9 +139,9 @@
 
 int
 _obstack_begin (struct obstack *h,
-		int size, int alignment,
-		void *(*chunkfun) (long),
-		void (*freefun) (void *))
+                int size, int alignment,
+                void *(*chunkfun) (long),
+                void (*freefun) (void *))
 {
   register struct _obstack_chunk *chunk; /* points to new chunk */
 
@@ -163,16 +151,16 @@
     /* Default size is what GNU malloc can fit in a 4096-byte block.  */
     {
       /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
-	 Use the values for range checking, because if range checking is off,
-	 the extra bytes won't be missed terribly, but if range checking is on
-	 and we used a larger request, a whole extra 4096 bytes would be
-	 allocated.
+         Use the values for range checking, because if range checking is off,
+         the extra bytes won't be missed terribly, but if range checking is on
+         and we used a larger request, a whole extra 4096 bytes would be
+         allocated.
 
-	 These number are irrelevant to the new GNU malloc.  I suspect it is
-	 less sensitive to the size of the request.  */
+         These number are irrelevant to the new GNU malloc.  I suspect it is
+         less sensitive to the size of the request.  */
       int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
-		    + 4 + DEFAULT_ROUNDING - 1)
-		   & ~(DEFAULT_ROUNDING - 1));
+                    + 4 + DEFAULT_ROUNDING - 1)
+                   & ~(DEFAULT_ROUNDING - 1));
       size = 4096 - extra;
     }
 
@@ -186,7 +174,7 @@
   if (!chunk)
     (*obstack_alloc_failed_handler) ();
   h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
-					       alignment - 1);
+                                               alignment - 1);
   h->chunk_limit = chunk->limit
     = (char *) chunk + h->chunk_size;
   chunk->prev = 0;
@@ -198,9 +186,9 @@
 
 int
 _obstack_begin_1 (struct obstack *h, int size, int alignment,
-		  void *(*chunkfun) (void *, long),
-		  void (*freefun) (void *, void *),
-		  void *arg)
+                  void *(*chunkfun) (void *, long),
+                  void (*freefun) (void *, void *),
+                  void *arg)
 {
   register struct _obstack_chunk *chunk; /* points to new chunk */
 
@@ -210,16 +198,16 @@
     /* Default size is what GNU malloc can fit in a 4096-byte block.  */
     {
       /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
-	 Use the values for range checking, because if range checking is off,
-	 the extra bytes won't be missed terribly, but if range checking is on
-	 and we used a larger request, a whole extra 4096 bytes would be
-	 allocated.
+         Use the values for range checking, because if range checking is off,
+         the extra bytes won't be missed terribly, but if range checking is on
+         and we used a larger request, a whole extra 4096 bytes would be
+         allocated.
 
-	 These number are irrelevant to the new GNU malloc.  I suspect it is
-	 less sensitive to the size of the request.  */
+         These number are irrelevant to the new GNU malloc.  I suspect it is
+         less sensitive to the size of the request.  */
       int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
-		    + 4 + DEFAULT_ROUNDING - 1)
-		   & ~(DEFAULT_ROUNDING - 1));
+                    + 4 + DEFAULT_ROUNDING - 1)
+                   & ~(DEFAULT_ROUNDING - 1));
       size = 4096 - extra;
     }
 
@@ -234,7 +222,7 @@
   if (!chunk)
     (*obstack_alloc_failed_handler) ();
   h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
-					       alignment - 1);
+                                               alignment - 1);
   h->chunk_limit = chunk->limit
     = (char *) chunk + h->chunk_size;
   chunk->prev = 0;
@@ -255,7 +243,7 @@
 {
   register struct _obstack_chunk *old_chunk = h->chunk;
   register struct _obstack_chunk *new_chunk;
-  register long	new_size;
+  register long new_size;
   register long obj_size = h->next_free - h->object_base;
   register long i;
   long already;
@@ -284,12 +272,12 @@
   if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT)
     {
       for (i = obj_size / sizeof (COPYING_UNIT) - 1;
-	   i >= 0; i--)
-	((COPYING_UNIT *)object_base)[i]
-	  = ((COPYING_UNIT *)h->object_base)[i];
+           i >= 0; i--)
+        ((COPYING_UNIT *)object_base)[i]
+          = ((COPYING_UNIT *)h->object_base)[i];
       /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT,
-	 but that can cross a page boundary on a machine
-	 which does not do strict alignment for COPYING_UNITS.  */
+         but that can cross a page boundary on a machine
+         which does not do strict alignment for COPYING_UNITS.  */
       already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT);
     }
   else
@@ -303,8 +291,8 @@
      But not if that chunk might contain an empty object.  */
   if (! h->maybe_empty_object
       && (h->object_base
-	  == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents,
-			  h->alignment_mask)))
+          == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents,
+                          h->alignment_mask)))
     {
       new_chunk->prev = old_chunk->prev;
       CALL_FREEFUN (h, old_chunk);
@@ -330,8 +318,8 @@
 int
 _obstack_allocated_p (struct obstack *h, void *obj)
 {
-  register struct _obstack_chunk *lp;	/* below addr of any objects in this chunk */
-  register struct _obstack_chunk *plp;	/* point to previous chunk if any */
+  register struct _obstack_chunk *lp;   /* below addr of any objects in this chunk */
+  register struct _obstack_chunk *plp;  /* point to previous chunk if any */
 
   lp = (h)->chunk;
   /* We use >= rather than > since the object cannot be exactly at
@@ -351,10 +339,10 @@
 # undef obstack_free
 
 void
-obstack_free (struct obstack *h, void *obj)
+__obstack_free (struct obstack *h, void *obj)
 {
-  register struct _obstack_chunk *lp;	/* below addr of any objects in this chunk */
-  register struct _obstack_chunk *plp;	/* point to previous chunk if any */
+  register struct _obstack_chunk *lp;   /* below addr of any objects in this chunk */
+  register struct _obstack_chunk *plp;  /* point to previous chunk if any */
 
   lp = h->chunk;
   /* We use >= because there cannot be an object at the beginning of a chunk.
@@ -366,7 +354,7 @@
       CALL_FREEFUN (h, lp);
       lp = plp;
       /* If we switch chunks, we can't tell whether the new current
-	 chunk contains an empty object, so assume that it may.  */
+         chunk contains an empty object, so assume that it may.  */
       h->maybe_empty_object = 1;
     }
   if (lp)
@@ -413,15 +401,7 @@
 #  include <libio/iolibio.h>
 # endif
 
-# ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#   define __attribute__(Spec) /* empty */
-#  endif
-# endif
-
-static void
-__attribute__ ((noreturn))
+static _Noreturn void
 print_and_abort (void)
 {
   /* Don't change any of these strings.  Yes, it would be possible to add
@@ -437,4 +417,4 @@
   exit (obstack_exit_failure);
 }
 
-#endif	/* !ELIDE_CODE */
+#endif  /* !ELIDE_CODE */
diff --git a/lib/obstack.h b/lib/obstack.h
index 95dd438..6a44b44 100644
--- a/lib/obstack.h
+++ b/lib/obstack.h
@@ -1,21 +1,20 @@
 /* obstack.h - object stack macros
-   Copyright (C) 1988-1994,1996-1999,2003,2004,2005
-	Free Software Foundation, Inc.
+   Copyright (C) 1988-1994, 1996-1999, 2003-2006, 2009-2012 Free Software
+   Foundation, Inc.
    This file is part of the GNU C Library.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Summary:
 
@@ -33,11 +32,11 @@
 stack is of mature, fixed size and fixed address objects.
 
 These routines grab large chunks of memory, using a function you
-supply, called `obstack_chunk_alloc'.  On occasion, they free chunks,
-by calling `obstack_chunk_free'.  You must define them and declare
+supply, called 'obstack_chunk_alloc'.  On occasion, they free chunks,
+by calling 'obstack_chunk_free'.  You must define them and declare
 them before using any obstack macros.
 
-Each independent stack is represented by a `struct obstack'.
+Each independent stack is represented by a 'struct obstack'.
 Each of the obstack macros expects a pointer to such a structure
 as the first argument.
 
@@ -86,17 +85,17 @@
 break the ordinary 'growth' macro.
 
 Summary:
-	We allocate large chunks.
-	We carve out one object at a time from the current chunk.
-	Once carved, an object never moves.
-	We are free to append data of any size to the currently
-	  growing object.
-	Exactly one object is growing in an obstack at any one time.
-	You can run one obstack per control block.
-	You may have as many control blocks as you dare.
-	Because of the way we do it, you can `unwind' an obstack
-	  back to a previous state. (You may remove objects much
-	  as you would with a stack.)
+        We allocate large chunks.
+        We carve out one object at a time from the current chunk.
+        Once carved, an object never moves.
+        We are free to append data of any size to the currently
+          growing object.
+        Exactly one object is growing in an obstack at any one time.
+        You can run one obstack per control block.
+        You may have as many control blocks as you dare.
+        Because of the way we do it, you can "unwind" an obstack
+          back to a previous state. (You may remove objects much
+          as you would with a stack.)
 */
 
 
@@ -104,10 +103,6 @@
 
 #ifndef _OBSTACK_H
 #define _OBSTACK_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /* We need the type of a pointer subtraction.  If __PTRDIFF_TYPE__ is
    defined, as with GNU C, use that; that way we don't pollute the
@@ -127,75 +122,84 @@
 
 #define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
 
-/* Similiar to _BPTR_ALIGN (B, P, A), except optimize the common case
+/* Similar to _BPTR_ALIGN (B, P, A), except optimize the common case
    where pointers can be converted to integers, aligned as integers,
    and converted back again.  If PTR_INT_TYPE is narrower than a
    pointer (e.g., the AS/400), play it safe and compute the alignment
    relative to B.  Otherwise, use the faster strategy of computing the
    alignment relative to 0.  */
 
-#define __PTR_ALIGN(B, P, A)						    \
+#define __PTR_ALIGN(B, P, A)                                                \
   __BPTR_ALIGN (sizeof (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \
-		P, A)
+                P, A)
 
 #include <string.h>
 
-struct _obstack_chunk		/* Lives at front of each chunk. */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _obstack_chunk           /* Lives at front of each chunk. */
 {
-  char  *limit;			/* 1 past end of this chunk */
-  struct _obstack_chunk *prev;	/* address of prior chunk or NULL */
-  char	contents[4];		/* objects begin here */
+  char  *limit;                 /* 1 past end of this chunk */
+  struct _obstack_chunk *prev;  /* address of prior chunk or NULL */
+  char  contents[4];            /* objects begin here */
 };
 
-struct obstack		/* control current object in current chunk */
+struct obstack          /* control current object in current chunk */
 {
-  long	chunk_size;		/* preferred size to allocate chunks in */
-  struct _obstack_chunk *chunk;	/* address of current struct obstack_chunk */
-  char	*object_base;		/* address of object we are building */
-  char	*next_free;		/* where to add next char to current object */
-  char	*chunk_limit;		/* address of char after current chunk */
+  long  chunk_size;             /* preferred size to allocate chunks in */
+  struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
+  char  *object_base;           /* address of object we are building */
+  char  *next_free;             /* where to add next char to current object */
+  char  *chunk_limit;           /* address of char after current chunk */
   union
   {
     PTR_INT_TYPE tempint;
     void *tempptr;
-  } temp;			/* Temporary for some macros.  */
-  int   alignment_mask;		/* Mask of alignment for each object. */
-  /* These prototypes vary based on `use_extra_arg', and we use
+  } temp;                       /* Temporary for some macros.  */
+  int   alignment_mask;         /* Mask of alignment for each object. */
+  /* These prototypes vary based on 'use_extra_arg', and we use
      casts to the prototypeless function type in all assignments,
      but having prototypes here quiets -Wstrict-prototypes.  */
   struct _obstack_chunk *(*chunkfun) (void *, long);
   void (*freefun) (void *, struct _obstack_chunk *);
-  void *extra_arg;		/* first arg for chunk alloc/dealloc funcs */
-  unsigned use_extra_arg:1;	/* chunk alloc/dealloc funcs take extra arg */
+  void *extra_arg;              /* first arg for chunk alloc/dealloc funcs */
+  unsigned use_extra_arg:1;     /* chunk alloc/dealloc funcs take extra arg */
   unsigned maybe_empty_object:1;/* There is a possibility that the current
-				   chunk contains a zero-length object.  This
-				   prevents freeing the chunk if we allocate
-				   a bigger chunk to replace it. */
-  unsigned alloc_failed:1;	/* No longer used, as we now call the failed
-				   handler on error, but retained for binary
-				   compatibility.  */
+                                   chunk contains a zero-length object.  This
+                                   prevents freeing the chunk if we allocate
+                                   a bigger chunk to replace it. */
+  unsigned alloc_failed:1;      /* No longer used, as we now call the failed
+                                   handler on error, but retained for binary
+                                   compatibility.  */
 };
 
 /* Declare the external functions we use; they are in obstack.c.  */
 
 extern void _obstack_newchunk (struct obstack *, int);
 extern int _obstack_begin (struct obstack *, int, int,
-			    void *(*) (long), void (*) (void *));
+                            void *(*) (long), void (*) (void *));
 extern int _obstack_begin_1 (struct obstack *, int, int,
-			     void *(*) (void *, long),
-			     void (*) (void *, void *), void *);
+                             void *(*) (void *, long),
+                             void (*) (void *, void *), void *);
 extern int _obstack_memory_used (struct obstack *);
 
-void obstack_free (struct obstack *obstack, void *block);
+/* The default name of the function for freeing a chunk is 'obstack_free',
+   but gnulib users can override this by defining '__obstack_free'.  */
+#ifndef __obstack_free
+# define __obstack_free obstack_free
+#endif
+extern void __obstack_free (struct obstack *obstack, void *block);
 
 
-/* Error handler called when `obstack_chunk_alloc' failed to allocate
+/* Error handler called when 'obstack_chunk_alloc' failed to allocate
    more memory.  This can be set to a user defined function which
    should either abort gracefully or use longjump - but shouldn't
    return.  The default action is to print a message and abort.  */
 extern void (*obstack_alloc_failed_handler) (void);
 
-/* Exit value used when `print_and_abort' is used.  */
+/* Exit value used when 'print_and_abort' is used.  */
 extern int obstack_exit_failure;
 
 /* Pointer to beginning of object being allocated or to be allocated next.
@@ -210,32 +214,32 @@
 
 /* Pointer to next byte not yet allocated in current chunk.  */
 
-#define obstack_next_free(h)	((h)->next_free)
+#define obstack_next_free(h)    ((h)->next_free)
 
 /* Mask specifying low bits that should be clear in address of an object.  */
 
 #define obstack_alignment_mask(h) ((h)->alignment_mask)
 
 /* To prevent prototype warnings provide complete argument list.  */
-#define obstack_init(h)						\
-  _obstack_begin ((h), 0, 0,					\
-		  (void *(*) (long)) obstack_chunk_alloc,	\
-		  (void (*) (void *)) obstack_chunk_free)
+#define obstack_init(h)                                         \
+  _obstack_begin ((h), 0, 0,                                    \
+                  (void *(*) (long)) obstack_chunk_alloc,       \
+                  (void (*) (void *)) obstack_chunk_free)
 
-#define obstack_begin(h, size)					\
-  _obstack_begin ((h), (size), 0,				\
-		  (void *(*) (long)) obstack_chunk_alloc,	\
-		  (void (*) (void *)) obstack_chunk_free)
+#define obstack_begin(h, size)                                  \
+  _obstack_begin ((h), (size), 0,                               \
+                  (void *(*) (long)) obstack_chunk_alloc,       \
+                  (void (*) (void *)) obstack_chunk_free)
 
 #define obstack_specify_allocation(h, size, alignment, chunkfun, freefun)  \
-  _obstack_begin ((h), (size), (alignment),				   \
-		  (void *(*) (long)) (chunkfun),			   \
-		  (void (*) (void *)) (freefun))
+  _obstack_begin ((h), (size), (alignment),                                \
+                  (void *(*) (long)) (chunkfun),                           \
+                  (void (*) (void *)) (freefun))
 
 #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
-  _obstack_begin_1 ((h), (size), (alignment),				\
-		    (void *(*) (void *, long)) (chunkfun),		\
-		    (void (*) (void *, void *)) (freefun), (arg))
+  _obstack_begin_1 ((h), (size), (alignment),                           \
+                    (void *(*) (void *, long)) (chunkfun),              \
+                    (void (*) (void *, void *)) (freefun), (arg))
 
 #define obstack_chunkfun(h, newchunkfun) \
   ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
@@ -249,7 +253,7 @@
 
 #define obstack_memory_used(h) _obstack_memory_used (h)
 
-#if defined __GNUC__ && defined __STDC__ && __STDC__
+#if defined __GNUC__
 /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
    does not implement __extension__.  But that compiler doesn't define
    __GNUC_MINOR__.  */
@@ -260,160 +264,160 @@
 /* For GNU C, if not -traditional,
    we can define these macros to compute all args only once
    without using a global variable.
-   Also, we can avoid using the `temp' slot, to make faster code.  */
+   Also, we can avoid using the 'temp' slot, to make faster code.  */
 
-# define obstack_object_size(OBSTACK)					\
-  __extension__								\
-  ({ struct obstack const *__o = (OBSTACK);				\
+# define obstack_object_size(OBSTACK)                                   \
+  __extension__                                                         \
+  ({ struct obstack const *__o = (OBSTACK);                             \
      (unsigned) (__o->next_free - __o->object_base); })
 
-# define obstack_room(OBSTACK)						\
-  __extension__								\
-  ({ struct obstack const *__o = (OBSTACK);				\
+# define obstack_room(OBSTACK)                                          \
+  __extension__                                                         \
+  ({ struct obstack const *__o = (OBSTACK);                             \
      (unsigned) (__o->chunk_limit - __o->next_free); })
 
-# define obstack_make_room(OBSTACK,length)				\
-__extension__								\
-({ struct obstack *__o = (OBSTACK);					\
-   int __len = (length);						\
-   if (__o->chunk_limit - __o->next_free < __len)			\
-     _obstack_newchunk (__o, __len);					\
+# define obstack_make_room(OBSTACK,length)                              \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   int __len = (length);                                                \
+   if (__o->chunk_limit - __o->next_free < __len)                       \
+     _obstack_newchunk (__o, __len);                                    \
    (void) 0; })
 
-# define obstack_empty_p(OBSTACK)					\
-  __extension__								\
-  ({ struct obstack const *__o = (OBSTACK);				\
-     (__o->chunk->prev == 0						\
-      && __o->next_free == __PTR_ALIGN ((char *) __o->chunk,		\
-					__o->chunk->contents,		\
-					__o->alignment_mask)); })
+# define obstack_empty_p(OBSTACK)                                       \
+  __extension__                                                         \
+  ({ struct obstack const *__o = (OBSTACK);                             \
+     (__o->chunk->prev == 0                                             \
+      && __o->next_free == __PTR_ALIGN ((char *) __o->chunk,            \
+                                        __o->chunk->contents,           \
+                                        __o->alignment_mask)); })
 
-# define obstack_grow(OBSTACK,where,length)				\
-__extension__								\
-({ struct obstack *__o = (OBSTACK);					\
-   int __len = (length);						\
-   if (__o->next_free + __len > __o->chunk_limit)			\
-     _obstack_newchunk (__o, __len);					\
-   memcpy (__o->next_free, where, __len);				\
-   __o->next_free += __len;						\
+# define obstack_grow(OBSTACK,where,length)                             \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   int __len = (length);                                                \
+   if (__o->next_free + __len > __o->chunk_limit)                       \
+     _obstack_newchunk (__o, __len);                                    \
+   memcpy (__o->next_free, where, __len);                               \
+   __o->next_free += __len;                                             \
    (void) 0; })
 
-# define obstack_grow0(OBSTACK,where,length)				\
-__extension__								\
-({ struct obstack *__o = (OBSTACK);					\
-   int __len = (length);						\
-   if (__o->next_free + __len + 1 > __o->chunk_limit)			\
-     _obstack_newchunk (__o, __len + 1);				\
-   memcpy (__o->next_free, where, __len);				\
-   __o->next_free += __len;						\
-   *(__o->next_free)++ = 0;						\
+# define obstack_grow0(OBSTACK,where,length)                            \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   int __len = (length);                                                \
+   if (__o->next_free + __len + 1 > __o->chunk_limit)                   \
+     _obstack_newchunk (__o, __len + 1);                                \
+   memcpy (__o->next_free, where, __len);                               \
+   __o->next_free += __len;                                             \
+   *(__o->next_free)++ = 0;                                             \
    (void) 0; })
 
-# define obstack_1grow(OBSTACK,datum)					\
-__extension__								\
-({ struct obstack *__o = (OBSTACK);					\
-   if (__o->next_free + 1 > __o->chunk_limit)				\
-     _obstack_newchunk (__o, 1);					\
-   obstack_1grow_fast (__o, datum);					\
+# define obstack_1grow(OBSTACK,datum)                                   \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   if (__o->next_free + 1 > __o->chunk_limit)                           \
+     _obstack_newchunk (__o, 1);                                        \
+   obstack_1grow_fast (__o, datum);                                     \
    (void) 0; })
 
 /* These assume that the obstack alignment is good enough for pointers
    or ints, and that the data added so far to the current object
    shares that much alignment.  */
 
-# define obstack_ptr_grow(OBSTACK,datum)				\
-__extension__								\
-({ struct obstack *__o = (OBSTACK);					\
-   if (__o->next_free + sizeof (void *) > __o->chunk_limit)		\
-     _obstack_newchunk (__o, sizeof (void *));				\
-   obstack_ptr_grow_fast (__o, datum); })				\
+# define obstack_ptr_grow(OBSTACK,datum)                                \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   if (__o->next_free + sizeof (void *) > __o->chunk_limit)             \
+     _obstack_newchunk (__o, sizeof (void *));                          \
+   obstack_ptr_grow_fast (__o, datum); })                               \
 
-# define obstack_int_grow(OBSTACK,datum)				\
-__extension__								\
-({ struct obstack *__o = (OBSTACK);					\
-   if (__o->next_free + sizeof (int) > __o->chunk_limit)		\
-     _obstack_newchunk (__o, sizeof (int));				\
+# define obstack_int_grow(OBSTACK,datum)                                \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   if (__o->next_free + sizeof (int) > __o->chunk_limit)                \
+     _obstack_newchunk (__o, sizeof (int));                             \
    obstack_int_grow_fast (__o, datum); })
 
-# define obstack_ptr_grow_fast(OBSTACK,aptr)				\
-__extension__								\
-({ struct obstack *__o1 = (OBSTACK);					\
-   *(const void **) __o1->next_free = (aptr);				\
-   __o1->next_free += sizeof (const void *);				\
+# define obstack_ptr_grow_fast(OBSTACK,aptr)                            \
+__extension__                                                           \
+({ struct obstack *__o1 = (OBSTACK);                                    \
+   *(const void **) __o1->next_free = (aptr);                           \
+   __o1->next_free += sizeof (const void *);                            \
    (void) 0; })
 
-# define obstack_int_grow_fast(OBSTACK,aint)				\
-__extension__								\
-({ struct obstack *__o1 = (OBSTACK);					\
-   *(int *) __o1->next_free = (aint);					\
-   __o1->next_free += sizeof (int);					\
+# define obstack_int_grow_fast(OBSTACK,aint)                            \
+__extension__                                                           \
+({ struct obstack *__o1 = (OBSTACK);                                    \
+   *(int *) __o1->next_free = (aint);                                   \
+   __o1->next_free += sizeof (int);                                     \
    (void) 0; })
 
-# define obstack_blank(OBSTACK,length)					\
-__extension__								\
-({ struct obstack *__o = (OBSTACK);					\
-   int __len = (length);						\
-   if (__o->chunk_limit - __o->next_free < __len)			\
-     _obstack_newchunk (__o, __len);					\
-   obstack_blank_fast (__o, __len);					\
+# define obstack_blank(OBSTACK,length)                                  \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   int __len = (length);                                                \
+   if (__o->chunk_limit - __o->next_free < __len)                       \
+     _obstack_newchunk (__o, __len);                                    \
+   obstack_blank_fast (__o, __len);                                     \
    (void) 0; })
 
-# define obstack_alloc(OBSTACK,length)					\
-__extension__								\
-({ struct obstack *__h = (OBSTACK);					\
-   obstack_blank (__h, (length));					\
+# define obstack_alloc(OBSTACK,length)                                  \
+__extension__                                                           \
+({ struct obstack *__h = (OBSTACK);                                     \
+   obstack_blank (__h, (length));                                       \
    obstack_finish (__h); })
 
-# define obstack_copy(OBSTACK,where,length)				\
-__extension__								\
-({ struct obstack *__h = (OBSTACK);					\
-   obstack_grow (__h, (where), (length));				\
+# define obstack_copy(OBSTACK,where,length)                             \
+__extension__                                                           \
+({ struct obstack *__h = (OBSTACK);                                     \
+   obstack_grow (__h, (where), (length));                               \
    obstack_finish (__h); })
 
-# define obstack_copy0(OBSTACK,where,length)				\
-__extension__								\
-({ struct obstack *__h = (OBSTACK);					\
-   obstack_grow0 (__h, (where), (length));				\
+# define obstack_copy0(OBSTACK,where,length)                            \
+__extension__                                                           \
+({ struct obstack *__h = (OBSTACK);                                     \
+   obstack_grow0 (__h, (where), (length));                              \
    obstack_finish (__h); })
 
 /* The local variable is named __o1 to avoid a name conflict
    when obstack_blank is called.  */
-# define obstack_finish(OBSTACK)					\
-__extension__								\
-({ struct obstack *__o1 = (OBSTACK);					\
-   void *__value = (void *) __o1->object_base;				\
-   if (__o1->next_free == __value)					\
-     __o1->maybe_empty_object = 1;					\
-   __o1->next_free							\
-     = __PTR_ALIGN (__o1->object_base, __o1->next_free,			\
-		    __o1->alignment_mask);				\
-   if (__o1->next_free - (char *)__o1->chunk				\
-       > __o1->chunk_limit - (char *)__o1->chunk)			\
-     __o1->next_free = __o1->chunk_limit;				\
-   __o1->object_base = __o1->next_free;					\
+# define obstack_finish(OBSTACK)                                        \
+__extension__                                                           \
+({ struct obstack *__o1 = (OBSTACK);                                    \
+   void *__value = (void *) __o1->object_base;                          \
+   if (__o1->next_free == __value)                                      \
+     __o1->maybe_empty_object = 1;                                      \
+   __o1->next_free                                                      \
+     = __PTR_ALIGN (__o1->object_base, __o1->next_free,                 \
+                    __o1->alignment_mask);                              \
+   if (__o1->next_free - (char *)__o1->chunk                            \
+       > __o1->chunk_limit - (char *)__o1->chunk)                       \
+     __o1->next_free = __o1->chunk_limit;                               \
+   __o1->object_base = __o1->next_free;                                 \
    __value; })
 
-# define obstack_free(OBSTACK, OBJ)					\
-__extension__								\
-({ struct obstack *__o = (OBSTACK);					\
-   void *__obj = (OBJ);							\
+# define obstack_free(OBSTACK, OBJ)                                     \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   void *__obj = (OBJ);                                                 \
    if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit)  \
-     __o->next_free = __o->object_base = (char *)__obj;			\
-   else (obstack_free) (__o, __obj); })
+     __o->next_free = __o->object_base = (char *)__obj;                 \
+   else (__obstack_free) (__o, __obj); })
 
-#else /* not __GNUC__ or not __STDC__ */
+#else /* not __GNUC__ */
 
 # define obstack_object_size(h) \
  (unsigned) ((h)->next_free - (h)->object_base)
 
-# define obstack_room(h)		\
+# define obstack_room(h)                \
  (unsigned) ((h)->chunk_limit - (h)->next_free)
 
 # define obstack_empty_p(h) \
- ((h)->chunk->prev == 0							\
-  && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk,		\
-				    (h)->chunk->contents,		\
-				    (h)->alignment_mask))
+ ((h)->chunk->prev == 0                                                 \
+  && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk,                \
+                                    (h)->chunk->contents,               \
+                                    (h)->alignment_mask))
 
 /* Note that the call to _obstack_newchunk is enclosed in (..., 0)
    so that we can avoid having void expressions
@@ -421,88 +425,88 @@
    Casting the third operand to void was tried before,
    but some compilers won't accept it.  */
 
-# define obstack_make_room(h,length)					\
-( (h)->temp.tempint = (length),						\
-  (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)		\
+# define obstack_make_room(h,length)                                    \
+( (h)->temp.tempint = (length),                                         \
+  (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)              \
    ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0))
 
-# define obstack_grow(h,where,length)					\
-( (h)->temp.tempint = (length),						\
-  (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)		\
-   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),		\
-  memcpy ((h)->next_free, where, (h)->temp.tempint),			\
+# define obstack_grow(h,where,length)                                   \
+( (h)->temp.tempint = (length),                                         \
+  (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)              \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),              \
+  memcpy ((h)->next_free, where, (h)->temp.tempint),                    \
   (h)->next_free += (h)->temp.tempint)
 
-# define obstack_grow0(h,where,length)					\
-( (h)->temp.tempint = (length),						\
-  (((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit)		\
-   ? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0),		\
-  memcpy ((h)->next_free, where, (h)->temp.tempint),			\
-  (h)->next_free += (h)->temp.tempint,					\
+# define obstack_grow0(h,where,length)                                  \
+( (h)->temp.tempint = (length),                                         \
+  (((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit)          \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0),          \
+  memcpy ((h)->next_free, where, (h)->temp.tempint),                    \
+  (h)->next_free += (h)->temp.tempint,                                  \
   *((h)->next_free)++ = 0)
 
-# define obstack_1grow(h,datum)						\
-( (((h)->next_free + 1 > (h)->chunk_limit)				\
-   ? (_obstack_newchunk ((h), 1), 0) : 0),				\
+# define obstack_1grow(h,datum)                                         \
+( (((h)->next_free + 1 > (h)->chunk_limit)                              \
+   ? (_obstack_newchunk ((h), 1), 0) : 0),                              \
   obstack_1grow_fast (h, datum))
 
-# define obstack_ptr_grow(h,datum)					\
-( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)		\
-   ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),		\
+# define obstack_ptr_grow(h,datum)                                      \
+( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)                \
+   ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),                \
   obstack_ptr_grow_fast (h, datum))
 
-# define obstack_int_grow(h,datum)					\
-( (((h)->next_free + sizeof (int) > (h)->chunk_limit)			\
-   ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),			\
+# define obstack_int_grow(h,datum)                                      \
+( (((h)->next_free + sizeof (int) > (h)->chunk_limit)                   \
+   ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),                   \
   obstack_int_grow_fast (h, datum))
 
-# define obstack_ptr_grow_fast(h,aptr)					\
+# define obstack_ptr_grow_fast(h,aptr)                                  \
   (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
 
-# define obstack_int_grow_fast(h,aint)					\
+# define obstack_int_grow_fast(h,aint)                                  \
   (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))
 
-# define obstack_blank(h,length)					\
-( (h)->temp.tempint = (length),						\
-  (((h)->chunk_limit - (h)->next_free < (h)->temp.tempint)		\
-   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),		\
+# define obstack_blank(h,length)                                        \
+( (h)->temp.tempint = (length),                                         \
+  (((h)->chunk_limit - (h)->next_free < (h)->temp.tempint)              \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),              \
   obstack_blank_fast (h, (h)->temp.tempint))
 
-# define obstack_alloc(h,length)					\
+# define obstack_alloc(h,length)                                        \
  (obstack_blank ((h), (length)), obstack_finish ((h)))
 
-# define obstack_copy(h,where,length)					\
+# define obstack_copy(h,where,length)                                   \
  (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
 
-# define obstack_copy0(h,where,length)					\
+# define obstack_copy0(h,where,length)                                  \
  (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
 
-# define obstack_finish(h)						\
-( ((h)->next_free == (h)->object_base					\
-   ? (((h)->maybe_empty_object = 1), 0)					\
-   : 0),								\
-  (h)->temp.tempptr = (h)->object_base,					\
-  (h)->next_free							\
-    = __PTR_ALIGN ((h)->object_base, (h)->next_free,			\
-		   (h)->alignment_mask),				\
-  (((h)->next_free - (char *) (h)->chunk				\
-    > (h)->chunk_limit - (char *) (h)->chunk)				\
-   ? ((h)->next_free = (h)->chunk_limit) : 0),				\
-  (h)->object_base = (h)->next_free,					\
+# define obstack_finish(h)                                              \
+( ((h)->next_free == (h)->object_base                                   \
+   ? (((h)->maybe_empty_object = 1), 0)                                 \
+   : 0),                                                                \
+  (h)->temp.tempptr = (h)->object_base,                                 \
+  (h)->next_free                                                        \
+    = __PTR_ALIGN ((h)->object_base, (h)->next_free,                    \
+                   (h)->alignment_mask),                                \
+  (((h)->next_free - (char *) (h)->chunk                                \
+    > (h)->chunk_limit - (char *) (h)->chunk)                           \
+   ? ((h)->next_free = (h)->chunk_limit) : 0),                          \
+  (h)->object_base = (h)->next_free,                                    \
   (h)->temp.tempptr)
 
-# define obstack_free(h,obj)						\
-( (h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk,		\
-  ((((h)->temp.tempint > 0						\
-    && (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk))	\
-   ? (int) ((h)->next_free = (h)->object_base				\
-	    = (h)->temp.tempint + (char *) (h)->chunk)			\
-   : (((obstack_free) ((h), (h)->temp.tempint + (char *) (h)->chunk), 0), 0)))
+# define obstack_free(h,obj)                                            \
+( (h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk,             \
+  ((((h)->temp.tempint > 0                                              \
+    && (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk))     \
+   ? (int) ((h)->next_free = (h)->object_base                           \
+            = (h)->temp.tempint + (char *) (h)->chunk)                  \
+   : (((__obstack_free) ((h), (h)->temp.tempint + (char *) (h)->chunk), 0), 0)))
 
-#endif /* not __GNUC__ or not __STDC__ */
+#endif /* not __GNUC__ */
 
 #ifdef __cplusplus
-}	/* C++ */
+}       /* C++ */
 #endif
 
 #endif /* obstack.h */
diff --git a/lib/obstack_printf.c b/lib/obstack_printf.c
new file mode 100644
index 0000000..fba0536
--- /dev/null
+++ b/lib/obstack_printf.c
@@ -0,0 +1,91 @@
+/* Formatted output to obstacks.
+   Copyright (C) 2008-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <stdio.h>
+
+#include "obstack.h"
+#include "vasnprintf.h"
+
+#include <errno.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+/* Grow an obstack with formatted output.  Return the number of bytes
+   added to OBS.  No trailing nul byte is added, and the object should
+   be closed with obstack_finish before use.
+
+   Upon memory allocation error, call obstack_alloc_failed_handler.
+   Upon other error, return -1.  */
+int
+obstack_printf (struct obstack *obs, const char *format, ...)
+{
+  va_list args;
+  int result;
+
+  va_start (args, format);
+  result = obstack_vprintf (obs, format, args);
+  va_end (args);
+  return result;
+}
+
+/* Grow an obstack with formatted output.  Return the number of bytes
+   added to OBS.  No trailing nul byte is added, and the object should
+   be closed with obstack_finish before use.
+
+   Upon memory allocation error, call obstack_alloc_failed_handler.
+   Upon other error, return -1.  */
+int
+obstack_vprintf (struct obstack *obs, const char *format, va_list args)
+{
+  /* If we are close to the end of the current obstack chunk, use a
+     stack-allocated buffer and copy, to reduce the likelihood of a
+     small-size malloc.  Otherwise, print directly into the
+     obstack.  */
+  enum { CUTOFF = 1024 };
+  char buf[CUTOFF];
+  char *base = obstack_next_free (obs);
+  size_t len = obstack_room (obs);
+  char *str;
+
+  if (len < CUTOFF)
+    {
+      base = buf;
+      len = CUTOFF;
+    }
+  str = vasnprintf (base, &len, format, args);
+  if (!str)
+    {
+      if (errno == ENOMEM)
+        obstack_alloc_failed_handler ();
+      return -1;
+    }
+  if (str == base && str != buf)
+    /* The output was already computed in place, but we need to
+       account for its size.  */
+    obstack_blank_fast (obs, len);
+  else
+    {
+      /* The output exceeded available obstack space or we used buf;
+         copy the resulting string.  */
+      obstack_grow (obs, str, len);
+      if (str != buf)
+        free (str);
+    }
+  return len;
+}
diff --git a/lib/open.c b/lib/open.c
new file mode 100644
index 0000000..bdfc8db
--- /dev/null
+++ b/lib/open.c
@@ -0,0 +1,181 @@
+/* Open a descriptor to a file.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+/* If the user's config.h happens to include <fcntl.h>, let it include only
+   the system's <fcntl.h> here, so that orig_open doesn't recurse to
+   rpl_open.  */
+#define __need_system_fcntl_h
+#include <config.h>
+
+/* Get the original definition of open.  It might be defined as a macro.  */
+#include <fcntl.h>
+#include <sys/types.h>
+#undef __need_system_fcntl_h
+
+static int
+orig_open (const char *filename, int flags, mode_t mode)
+{
+  return open (filename, flags, mode);
+}
+
+/* Specification.  */
+/* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates
+   this include because of the preliminary #include <fcntl.h> above.  */
+#include "fcntl.h"
+
+#include <errno.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#ifndef REPLACE_OPEN_DIRECTORY
+# define REPLACE_OPEN_DIRECTORY 0
+#endif
+
+int
+open (const char *filename, int flags, ...)
+{
+  mode_t mode;
+  int fd;
+
+  mode = 0;
+  if (flags & O_CREAT)
+    {
+      va_list arg;
+      va_start (arg, flags);
+
+      /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4
+         creates crashing code when 'mode_t' is smaller than 'int'.  */
+      mode = va_arg (arg, PROMOTED_MODE_T);
+
+      va_end (arg);
+    }
+
+#if GNULIB_defined_O_NONBLOCK
+  /* The only known platform that lacks O_NONBLOCK is mingw, but it
+     also lacks named pipes and Unix sockets, which are the only two
+     file types that require non-blocking handling in open().
+     Therefore, it is safe to ignore O_NONBLOCK here.  It is handy
+     that mingw also lacks openat(), so that is also covered here.  */
+  flags &= ~O_NONBLOCK;
+#endif
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+  if (strcmp (filename, "/dev/null") == 0)
+    filename = "NUL";
+#endif
+
+#if OPEN_TRAILING_SLASH_BUG
+  /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR
+     is specified, then fail.
+     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
+     says that
+       "A pathname that contains at least one non-slash character and that
+        ends with one or more trailing slashes shall be resolved as if a
+        single dot character ( '.' ) were appended to the pathname."
+     and
+       "The special filename dot shall refer to the directory specified by
+        its predecessor."
+     If the named file already exists as a directory, then
+       - if O_CREAT is specified, open() must fail because of the semantics
+         of O_CREAT,
+       - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX
+         <http://www.opengroup.org/susv3/functions/open.html> says that it
+         fails with errno = EISDIR in this case.
+     If the named file does not exist or does not name a directory, then
+       - if O_CREAT is specified, open() must fail since open() cannot create
+         directories,
+       - if O_WRONLY or O_RDWR is specified, open() must fail because the
+         file does not contain a '.' directory.  */
+  if (flags & (O_CREAT | O_WRONLY | O_RDWR))
+    {
+      size_t len = strlen (filename);
+      if (len > 0 && filename[len - 1] == '/')
+        {
+          errno = EISDIR;
+          return -1;
+        }
+    }
+#endif
+
+  fd = orig_open (filename, flags, mode);
+
+#if REPLACE_FCHDIR
+  /* Implementing fchdir and fdopendir requires the ability to open a
+     directory file descriptor.  If open doesn't support that (as on
+     mingw), we use a dummy file that behaves the same as directories
+     on Linux (ie. always reports EOF on attempts to read()), and
+     override fstat() in fchdir.c to hide the fact that we have a
+     dummy.  */
+  if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES
+      && ((flags & O_ACCMODE) == O_RDONLY
+          || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH)))
+    {
+      struct stat statbuf;
+      if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))
+        {
+          /* Maximum recursion depth of 1.  */
+          fd = open ("/dev/null", flags, mode);
+          if (0 <= fd)
+            fd = _gl_register_fd (fd, filename);
+        }
+      else
+        errno = EACCES;
+    }
+#endif
+
+#if OPEN_TRAILING_SLASH_BUG
+  /* If the filename ends in a slash and fd does not refer to a directory,
+     then fail.
+     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
+     says that
+       "A pathname that contains at least one non-slash character and that
+        ends with one or more trailing slashes shall be resolved as if a
+        single dot character ( '.' ) were appended to the pathname."
+     and
+       "The special filename dot shall refer to the directory specified by
+        its predecessor."
+     If the named file without the slash is not a directory, open() must fail
+     with ENOTDIR.  */
+  if (fd >= 0)
+    {
+      /* We know len is positive, since open did not fail with ENOENT.  */
+      size_t len = strlen (filename);
+      if (filename[len - 1] == '/')
+        {
+          struct stat statbuf;
+
+          if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
+            {
+              close (fd);
+              errno = ENOTDIR;
+              return -1;
+            }
+        }
+    }
+#endif
+
+#if REPLACE_FCHDIR
+  if (!REPLACE_OPEN_DIRECTORY && 0 <= fd)
+    fd = _gl_register_fd (fd, filename);
+#endif
+
+  return fd;
+}
diff --git a/lib/pathmax.h b/lib/pathmax.h
new file mode 100644
index 0000000..03db7cb
--- /dev/null
+++ b/lib/pathmax.h
@@ -0,0 +1,83 @@
+/* Define PATH_MAX somehow.  Requires sys/types.h.
+   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PATHMAX_H
+# define _PATHMAX_H
+
+/* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename,
+   including the terminating NUL byte.
+   <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html>
+   PATH_MAX is not defined on systems which have no limit on filename length,
+   such as GNU/Hurd.
+
+   This file does *not* define PATH_MAX always.  Programs that use this file
+   can handle the GNU/Hurd case in several ways:
+     - Either with a package-wide handling, or with a per-file handling,
+     - Either through a
+         #ifdef PATH_MAX
+       or through a fallback like
+         #ifndef PATH_MAX
+         # define PATH_MAX 8192
+         #endif
+       or through a fallback like
+         #ifndef PATH_MAX
+         # define PATH_MAX pathconf ("/", _PC_PATH_MAX)
+         #endif
+ */
+
+# include <unistd.h>
+
+# include <limits.h>
+
+# ifndef _POSIX_PATH_MAX
+#  define _POSIX_PATH_MAX 256
+# endif
+
+/* Don't include sys/param.h if it already has been.  */
+# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+#  include <sys/param.h>
+# endif
+
+# if !defined PATH_MAX && defined MAXPATHLEN
+#  define PATH_MAX MAXPATHLEN
+# endif
+
+# ifdef __hpux
+/* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename,
+   *not* including the terminating NUL byte, and is set to 1023.
+   Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is
+   not defined at all any more.  */
+#  undef PATH_MAX
+#  define PATH_MAX 1024
+# endif
+
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com,
+   section "Maximum Path Length Limitation",
+   <http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath>
+   explains that the maximum size of a filename, including the terminating
+   NUL byte, is 260 = 3 + 256 + 1.
+   This is the same value as
+     - FILENAME_MAX in <stdio.h>,
+     - _MAX_PATH in <stdlib.h>,
+     - MAX_PATH in <windef.h>.
+   Undefine the original value, because mingw's <limits.h> gets it wrong.  */
+#  undef PATH_MAX
+#  define PATH_MAX 260
+# endif
+
+#endif /* _PATHMAX_H */
diff --git a/lib/perror.c b/lib/perror.c
new file mode 100644
index 0000000..4853d1b
--- /dev/null
+++ b/lib/perror.c
@@ -0,0 +1,49 @@
+/* Print a message describing error code.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible and Simon Josefsson.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "strerror-override.h"
+
+/* Use the system functions, not the gnulib overrides in this file.  */
+#undef fprintf
+
+void
+perror (const char *string)
+{
+  char stackbuf[STACKBUF_LEN];
+  int ret;
+
+  /* Our implementation guarantees that this will be a non-empty
+     string, even if it returns EINVAL; and stackbuf should be sized
+     large enough to avoid ERANGE.  */
+  ret = strerror_r (errno, stackbuf, sizeof stackbuf);
+  if (ret == ERANGE)
+    abort ();
+
+  if (string != NULL && *string != '\0')
+    fprintf (stderr, "%s: %s\n", string, stackbuf);
+  else
+    fprintf (stderr, "%s\n", stackbuf);
+}
diff --git a/lib/pipe-safer.c b/lib/pipe-safer.c
index fb02d72..d6dce5f 100644
--- a/lib/pipe-safer.c
+++ b/lib/pipe-safer.c
@@ -1,10 +1,10 @@
 /* Invoke pipe, but avoid some glitches.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -12,39 +12,45 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Jim Meyering.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "unistd-safer.h"
 
 #include <unistd.h>
+#include <errno.h>
 
 /* Like pipe, but ensure that neither of the file descriptors is
-   STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO.  */
+   STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO.  Fail with ENOSYS on
+   platforms that lack pipe.  */
 
 int
 pipe_safer (int fd[2])
 {
-  int fail = pipe (fd);
-  if (fail)
-    return fail;
+#if HAVE_PIPE
+  if (pipe (fd) == 0)
+    {
+      int i;
+      for (i = 0; i < 2; i++)
+        {
+          fd[i] = fd_safer (fd[i]);
+          if (fd[i] < 0)
+            {
+              int e = errno;
+              close (fd[1 - i]);
+              errno = e;
+              return -1;
+            }
+        }
 
-  {
-    int i;
-    for (i = 0; i < 2; i++)
-      {
-	int f = fd_safer (fd[i]);
-	if (f < 0)
-	  return -1;
-	fd[i] = f;
-      }
-  }
+      return 0;
+    }
+#else
+  errno = ENOSYS;
+#endif
 
-  return 0;
+  return -1;
 }
diff --git a/lib/pipe2-safer.c b/lib/pipe2-safer.c
new file mode 100644
index 0000000..981a0ff
--- /dev/null
+++ b/lib/pipe2-safer.c
@@ -0,0 +1,52 @@
+/* Invoke pipe2, but avoid some glitches.
+   Copyright (C) 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistd-safer.h"
+
+#include <unistd.h>
+#include <errno.h>
+
+/* Like pipe2, but ensure that neither of the file descriptors is
+   STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO.  */
+
+int
+pipe2_safer (int fd[2], int flags)
+{
+  /* This is a generalization of the pipe_safer implementation.  */
+  if (pipe2 (fd, flags) == 0)
+    {
+      int i;
+      for (i = 0; i < 2; i++)
+        {
+          fd[i] = fd_safer_flag (fd[i], flags);
+          if (fd[i] < 0)
+            {
+              int e = errno;
+              close (fd[1 - i]);
+              errno = e;
+              return -1;
+            }
+        }
+
+      return 0;
+    }
+  return -1;
+}
diff --git a/lib/pipe2.c b/lib/pipe2.c
new file mode 100644
index 0000000..6203fe5
--- /dev/null
+++ b/lib/pipe2.c
@@ -0,0 +1,168 @@
+/* Create a pipe, with specific opening flags.
+   Copyright (C) 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#include <errno.h>
+#include <fcntl.h>
+
+#include "binary-io.h"
+#include "verify.h"
+
+#if GNULIB_defined_O_NONBLOCK
+# include "nonblocking.h"
+#endif
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Native Windows API.  */
+
+# include <io.h>
+
+#endif
+
+int
+pipe2 (int fd[2], int flags)
+{
+  /* Mingw _pipe() corrupts fd on failure; also, if we succeed at
+     creating the pipe but later fail at changing fcntl, we want
+     to leave fd unchanged: http://austingroupbugs.net/view.php?id=467  */
+  int tmp[2];
+  tmp[0] = fd[0];
+  tmp[1] = fd[1];
+
+#if HAVE_PIPE2
+# undef pipe2
+  /* Try the system call first, if it exists.  (We may be running with a glibc
+     that has the function but with an older kernel that lacks it.)  */
+  {
+    /* Cache the information whether the system call really exists.  */
+    static int have_pipe2_really; /* 0 = unknown, 1 = yes, -1 = no */
+    if (have_pipe2_really >= 0)
+      {
+        int result = pipe2 (fd, flags);
+        if (!(result < 0 && errno == ENOSYS))
+          {
+            have_pipe2_really = 1;
+            return result;
+          }
+        have_pipe2_really = -1;
+      }
+  }
+#endif
+
+  /* Check the supported flags.  */
+  if ((flags & ~(O_CLOEXEC | O_NONBLOCK | O_BINARY | O_TEXT)) != 0)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Native Windows API.  */
+
+  if (_pipe (fd, 4096, flags & ~O_NONBLOCK) < 0)
+    {
+      fd[0] = tmp[0];
+      fd[1] = tmp[1];
+      return -1;
+    }
+
+  /* O_NONBLOCK handling.
+     On native Windows platforms, O_NONBLOCK is defined by gnulib.  Use the
+     functions defined by the gnulib module 'nonblocking'.  */
+# if GNULIB_defined_O_NONBLOCK
+  if (flags & O_NONBLOCK)
+    {
+      if (set_nonblocking_flag (fd[0], true) != 0
+          || set_nonblocking_flag (fd[1], true) != 0)
+        goto fail;
+    }
+# else
+  {
+    verify (O_NONBLOCK == 0);
+  }
+# endif
+
+  return 0;
+
+#else
+/* Unix API.  */
+
+  if (pipe (fd) < 0)
+    return -1;
+
+  /* POSIX <http://www.opengroup.org/onlinepubs/9699919799/functions/pipe.html>
+     says that initially, the O_NONBLOCK and FD_CLOEXEC flags are cleared on
+     both fd[0] and fd[1].  */
+
+  /* O_NONBLOCK handling.
+     On Unix platforms, O_NONBLOCK is defined by the system.  Use fcntl().  */
+  if (flags & O_NONBLOCK)
+    {
+      int fcntl_flags;
+
+      if ((fcntl_flags = fcntl (fd[1], F_GETFL, 0)) < 0
+          || fcntl (fd[1], F_SETFL, fcntl_flags | O_NONBLOCK) == -1
+          || (fcntl_flags = fcntl (fd[0], F_GETFL, 0)) < 0
+          || fcntl (fd[0], F_SETFL, fcntl_flags | O_NONBLOCK) == -1)
+        goto fail;
+    }
+
+  if (flags & O_CLOEXEC)
+    {
+      int fcntl_flags;
+
+      if ((fcntl_flags = fcntl (fd[1], F_GETFD, 0)) < 0
+          || fcntl (fd[1], F_SETFD, fcntl_flags | FD_CLOEXEC) == -1
+          || (fcntl_flags = fcntl (fd[0], F_GETFD, 0)) < 0
+          || fcntl (fd[0], F_SETFD, fcntl_flags | FD_CLOEXEC) == -1)
+        goto fail;
+    }
+
+# if O_BINARY
+  if (flags & O_BINARY)
+    {
+      setmode (fd[1], O_BINARY);
+      setmode (fd[0], O_BINARY);
+    }
+  else if (flags & O_TEXT)
+    {
+      setmode (fd[1], O_TEXT);
+      setmode (fd[0], O_TEXT);
+    }
+# endif
+
+  return 0;
+
+#endif
+
+#if GNULIB_defined_O_NONBLOCK || \
+  !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+ fail:
+  {
+    int saved_errno = errno;
+    close (fd[0]);
+    close (fd[1]);
+    fd[0] = tmp[0];
+    fd[1] = tmp[1];
+    errno = saved_errno;
+    return -1;
+  }
+#endif
+}
diff --git a/lib/printf-args.c b/lib/printf-args.c
new file mode 100644
index 0000000..47b20dc
--- /dev/null
+++ b/lib/printf-args.c
@@ -0,0 +1,187 @@
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     PRINTF_FETCHARGS   Name of the function to be defined.
+     STATIC             Set to 'static' to declare the function static.  */
+
+#ifndef PRINTF_FETCHARGS
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifndef PRINTF_FETCHARGS
+# include "printf-args.h"
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_FETCHARGS (va_list args, arguments *a)
+{
+  size_t i;
+  argument *ap;
+
+  for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
+    switch (ap->type)
+      {
+      case TYPE_SCHAR:
+        ap->a.a_schar = va_arg (args, /*signed char*/ int);
+        break;
+      case TYPE_UCHAR:
+        ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
+        break;
+      case TYPE_SHORT:
+        ap->a.a_short = va_arg (args, /*short*/ int);
+        break;
+      case TYPE_USHORT:
+        ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
+        break;
+      case TYPE_INT:
+        ap->a.a_int = va_arg (args, int);
+        break;
+      case TYPE_UINT:
+        ap->a.a_uint = va_arg (args, unsigned int);
+        break;
+      case TYPE_LONGINT:
+        ap->a.a_longint = va_arg (args, long int);
+        break;
+      case TYPE_ULONGINT:
+        ap->a.a_ulongint = va_arg (args, unsigned long int);
+        break;
+#if HAVE_LONG_LONG_INT
+      case TYPE_LONGLONGINT:
+        ap->a.a_longlongint = va_arg (args, long long int);
+        break;
+      case TYPE_ULONGLONGINT:
+        ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
+        break;
+#endif
+      case TYPE_DOUBLE:
+        ap->a.a_double = va_arg (args, double);
+        break;
+      case TYPE_LONGDOUBLE:
+        ap->a.a_longdouble = va_arg (args, long double);
+        break;
+      case TYPE_CHAR:
+        ap->a.a_char = va_arg (args, int);
+        break;
+#if HAVE_WINT_T
+      case TYPE_WIDE_CHAR:
+        /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by
+           default argument promotions", this is not the case in mingw32,
+           where wint_t is 'unsigned short'.  */
+        ap->a.a_wide_char =
+          (sizeof (wint_t) < sizeof (int)
+           ? (wint_t) va_arg (args, int)
+           : va_arg (args, wint_t));
+        break;
+#endif
+      case TYPE_STRING:
+        ap->a.a_string = va_arg (args, const char *);
+        /* A null pointer is an invalid argument for "%s", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_string == NULL)
+          ap->a.a_string = "(NULL)";
+        break;
+#if HAVE_WCHAR_T
+      case TYPE_WIDE_STRING:
+        ap->a.a_wide_string = va_arg (args, const wchar_t *);
+        /* A null pointer is an invalid argument for "%ls", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_wide_string == NULL)
+          {
+            static const wchar_t wide_null_string[] =
+              {
+                (wchar_t)'(',
+                (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L',
+                (wchar_t)')',
+                (wchar_t)0
+              };
+            ap->a.a_wide_string = wide_null_string;
+          }
+        break;
+#endif
+      case TYPE_POINTER:
+        ap->a.a_pointer = va_arg (args, void *);
+        break;
+      case TYPE_COUNT_SCHAR_POINTER:
+        ap->a.a_count_schar_pointer = va_arg (args, signed char *);
+        break;
+      case TYPE_COUNT_SHORT_POINTER:
+        ap->a.a_count_short_pointer = va_arg (args, short *);
+        break;
+      case TYPE_COUNT_INT_POINTER:
+        ap->a.a_count_int_pointer = va_arg (args, int *);
+        break;
+      case TYPE_COUNT_LONGINT_POINTER:
+        ap->a.a_count_longint_pointer = va_arg (args, long int *);
+        break;
+#if HAVE_LONG_LONG_INT
+      case TYPE_COUNT_LONGLONGINT_POINTER:
+        ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
+        break;
+#endif
+#if ENABLE_UNISTDIO
+      /* The unistdio extensions.  */
+      case TYPE_U8_STRING:
+        ap->a.a_u8_string = va_arg (args, const uint8_t *);
+        /* A null pointer is an invalid argument for "%U", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u8_string == NULL)
+          {
+            static const uint8_t u8_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u8_string = u8_null_string;
+          }
+        break;
+      case TYPE_U16_STRING:
+        ap->a.a_u16_string = va_arg (args, const uint16_t *);
+        /* A null pointer is an invalid argument for "%lU", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u16_string == NULL)
+          {
+            static const uint16_t u16_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u16_string = u16_null_string;
+          }
+        break;
+      case TYPE_U32_STRING:
+        ap->a.a_u32_string = va_arg (args, const uint32_t *);
+        /* A null pointer is an invalid argument for "%llU", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u32_string == NULL)
+          {
+            static const uint32_t u32_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u32_string = u32_null_string;
+          }
+        break;
+#endif
+      default:
+        /* Unknown type.  */
+        return -1;
+      }
+  return 0;
+}
diff --git a/lib/printf-args.h b/lib/printf-args.h
new file mode 100644
index 0000000..aa811af
--- /dev/null
+++ b/lib/printf-args.h
@@ -0,0 +1,158 @@
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PRINTF_ARGS_H
+#define _PRINTF_ARGS_H
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     PRINTF_FETCHARGS   Name of the function to be declared.
+     STATIC             Set to 'static' to declare the function static.  */
+
+/* Default parameters.  */
+#ifndef PRINTF_FETCHARGS
+# define PRINTF_FETCHARGS printf_fetchargs
+#endif
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get wchar_t.  */
+#if HAVE_WCHAR_T
+# include <stddef.h>
+#endif
+
+/* Get wint_t.  */
+#if HAVE_WINT_T
+# include <wchar.h>
+#endif
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+
+/* Argument types */
+typedef enum
+{
+  TYPE_NONE,
+  TYPE_SCHAR,
+  TYPE_UCHAR,
+  TYPE_SHORT,
+  TYPE_USHORT,
+  TYPE_INT,
+  TYPE_UINT,
+  TYPE_LONGINT,
+  TYPE_ULONGINT,
+#if HAVE_LONG_LONG_INT
+  TYPE_LONGLONGINT,
+  TYPE_ULONGLONGINT,
+#endif
+  TYPE_DOUBLE,
+  TYPE_LONGDOUBLE,
+  TYPE_CHAR,
+#if HAVE_WINT_T
+  TYPE_WIDE_CHAR,
+#endif
+  TYPE_STRING,
+#if HAVE_WCHAR_T
+  TYPE_WIDE_STRING,
+#endif
+  TYPE_POINTER,
+  TYPE_COUNT_SCHAR_POINTER,
+  TYPE_COUNT_SHORT_POINTER,
+  TYPE_COUNT_INT_POINTER,
+  TYPE_COUNT_LONGINT_POINTER
+#if HAVE_LONG_LONG_INT
+, TYPE_COUNT_LONGLONGINT_POINTER
+#endif
+#if ENABLE_UNISTDIO
+  /* The unistdio extensions.  */
+, TYPE_U8_STRING
+, TYPE_U16_STRING
+, TYPE_U32_STRING
+#endif
+} arg_type;
+
+/* Polymorphic argument */
+typedef struct
+{
+  arg_type type;
+  union
+  {
+    signed char                 a_schar;
+    unsigned char               a_uchar;
+    short                       a_short;
+    unsigned short              a_ushort;
+    int                         a_int;
+    unsigned int                a_uint;
+    long int                    a_longint;
+    unsigned long int           a_ulongint;
+#if HAVE_LONG_LONG_INT
+    long long int               a_longlongint;
+    unsigned long long int      a_ulonglongint;
+#endif
+    float                       a_float;
+    double                      a_double;
+    long double                 a_longdouble;
+    int                         a_char;
+#if HAVE_WINT_T
+    wint_t                      a_wide_char;
+#endif
+    const char*                 a_string;
+#if HAVE_WCHAR_T
+    const wchar_t*              a_wide_string;
+#endif
+    void*                       a_pointer;
+    signed char *               a_count_schar_pointer;
+    short *                     a_count_short_pointer;
+    int *                       a_count_int_pointer;
+    long int *                  a_count_longint_pointer;
+#if HAVE_LONG_LONG_INT
+    long long int *             a_count_longlongint_pointer;
+#endif
+#if ENABLE_UNISTDIO
+    /* The unistdio extensions.  */
+    const uint8_t *             a_u8_string;
+    const uint16_t *            a_u16_string;
+    const uint32_t *            a_u32_string;
+#endif
+  }
+  a;
+}
+argument;
+
+/* Number of directly allocated arguments (no malloc() needed).  */
+#define N_DIRECT_ALLOC_ARGUMENTS 7
+
+typedef struct
+{
+  size_t count;
+  argument *arg;
+  argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS];
+}
+arguments;
+
+
+/* Fetch the arguments, putting them into a. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int PRINTF_FETCHARGS (va_list args, arguments *a);
+
+#endif /* _PRINTF_ARGS_H */
diff --git a/lib/printf-frexp.c b/lib/printf-frexp.c
new file mode 100644
index 0000000..eb47205
--- /dev/null
+++ b/lib/printf-frexp.c
@@ -0,0 +1,190 @@
+/* Split a double into fraction and mantissa, for hexadecimal printf.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if ! defined USE_LONG_DOUBLE
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifdef USE_LONG_DOUBLE
+# include "printf-frexpl.h"
+#else
+# include "printf-frexp.h"
+#endif
+
+#include <float.h>
+#include <math.h>
+#ifdef USE_LONG_DOUBLE
+# include "fpucw.h"
+#endif
+
+/* This file assumes FLT_RADIX = 2.  If FLT_RADIX is a power of 2 greater
+   than 2, or not even a power of 2, some rounding errors can occur, so that
+   then the returned mantissa is only guaranteed to be <= 2.0, not < 2.0.  */
+
+#ifdef USE_LONG_DOUBLE
+# define FUNC printf_frexpl
+# define DOUBLE long double
+# define MIN_EXP LDBL_MIN_EXP
+# if HAVE_FREXPL_IN_LIBC && HAVE_LDEXPL_IN_LIBC
+#  define USE_FREXP_LDEXP
+#  define FREXP frexpl
+#  define LDEXP ldexpl
+# endif
+# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING
+# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING ()
+# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING ()
+# define L_(literal) literal##L
+#else
+# define FUNC printf_frexp
+# define DOUBLE double
+# define MIN_EXP DBL_MIN_EXP
+# if HAVE_FREXP_IN_LIBC && HAVE_LDEXP_IN_LIBC
+#  define USE_FREXP_LDEXP
+#  define FREXP frexp
+#  define LDEXP ldexp
+# endif
+# define DECL_ROUNDING
+# define BEGIN_ROUNDING()
+# define END_ROUNDING()
+# define L_(literal) literal
+#endif
+
+DOUBLE
+FUNC (DOUBLE x, int *expptr)
+{
+  int exponent;
+  DECL_ROUNDING
+
+  BEGIN_ROUNDING ();
+
+#ifdef USE_FREXP_LDEXP
+  /* frexp and ldexp are usually faster than the loop below.  */
+  x = FREXP (x, &exponent);
+
+  x = x + x;
+  exponent -= 1;
+
+  if (exponent < MIN_EXP - 1)
+    {
+      x = LDEXP (x, exponent - (MIN_EXP - 1));
+      exponent = MIN_EXP - 1;
+    }
+#else
+  {
+    /* Since the exponent is an 'int', it fits in 64 bits.  Therefore the
+       loops are executed no more than 64 times.  */
+    DOUBLE pow2[64]; /* pow2[i] = 2^2^i */
+    DOUBLE powh[64]; /* powh[i] = 2^-2^i */
+    int i;
+
+    exponent = 0;
+    if (x >= L_(1.0))
+      {
+        /* A nonnegative exponent.  */
+        {
+          DOUBLE pow2_i; /* = pow2[i] */
+          DOUBLE powh_i; /* = powh[i] */
+
+          /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i,
+             x * 2^exponent = argument, x >= 1.0.  */
+          for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5);
+               ;
+               i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i)
+            {
+              if (x >= pow2_i)
+                {
+                  exponent += (1 << i);
+                  x *= powh_i;
+                }
+              else
+                break;
+
+              pow2[i] = pow2_i;
+              powh[i] = powh_i;
+            }
+        }
+        /* Here 1.0 <= x < 2^2^i.  */
+      }
+    else
+      {
+        /* A negative exponent.  */
+        {
+          DOUBLE pow2_i; /* = pow2[i] */
+          DOUBLE powh_i; /* = powh[i] */
+
+          /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i,
+             x * 2^exponent = argument, x < 1.0, exponent >= MIN_EXP - 1.  */
+          for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5);
+               ;
+               i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i)
+            {
+              if (exponent - (1 << i) < MIN_EXP - 1)
+                break;
+
+              exponent -= (1 << i);
+              x *= pow2_i;
+              if (x >= L_(1.0))
+                break;
+
+              pow2[i] = pow2_i;
+              powh[i] = powh_i;
+            }
+        }
+        /* Here either x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent,
+           or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1.  */
+
+        if (x < L_(1.0))
+          /* Invariants: x * 2^exponent = argument, x < 1.0 and
+             exponent - 2^i < MIN_EXP - 1 <= exponent.  */
+          while (i > 0)
+            {
+              i--;
+              if (exponent - (1 << i) >= MIN_EXP - 1)
+                {
+                  exponent -= (1 << i);
+                  x *= pow2[i];
+                  if (x >= L_(1.0))
+                    break;
+                }
+            }
+
+        /* Here either x < 1.0 and exponent = MIN_EXP - 1,
+           or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1.  */
+      }
+
+    /* Invariants: x * 2^exponent = argument, and
+       either x < 1.0 and exponent = MIN_EXP - 1,
+       or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1.  */
+    while (i > 0)
+      {
+        i--;
+        if (x >= pow2[i])
+          {
+            exponent += (1 << i);
+            x *= powh[i];
+          }
+      }
+    /* Here either x < 1.0 and exponent = MIN_EXP - 1,
+       or 1.0 <= x < 2.0 and exponent >= MIN_EXP - 1.  */
+  }
+#endif
+
+  END_ROUNDING ();
+
+  *expptr = exponent;
+  return x;
+}
diff --git a/lib/printf-frexp.h b/lib/printf-frexp.h
new file mode 100644
index 0000000..985d7d2
--- /dev/null
+++ b/lib/printf-frexp.h
@@ -0,0 +1,23 @@
+/* Split a double into fraction and mantissa, for hexadecimal printf.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Write a finite, positive number x as
+     x = mantissa * 2^exp
+   where exp >= DBL_MIN_EXP - 1,
+         mantissa < 2.0,
+         if x is not a denormalized number then mantissa >= 1.0.
+   Store exp in *EXPPTR and return mantissa.  */
+extern double printf_frexp (double x, int *expptr);
diff --git a/lib/printf-frexpl.c b/lib/printf-frexpl.c
new file mode 100644
index 0000000..568d2ff
--- /dev/null
+++ b/lib/printf-frexpl.c
@@ -0,0 +1,37 @@
+/* Split a 'long double' into fraction and mantissa, for hexadecimal printf.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+/* Specification.  */
+# include "printf-frexpl.h"
+
+# include "printf-frexp.h"
+
+long double
+printf_frexpl (long double x, int *expptr)
+{
+  return printf_frexp (x, expptr);
+}
+
+#else
+
+# define USE_LONG_DOUBLE
+# include "printf-frexp.c"
+
+#endif
diff --git a/lib/printf-frexpl.h b/lib/printf-frexpl.h
new file mode 100644
index 0000000..341dded
--- /dev/null
+++ b/lib/printf-frexpl.h
@@ -0,0 +1,23 @@
+/* Split a 'long double' into fraction and mantissa, for hexadecimal printf.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Write a finite, positive number x as
+     x = mantissa * 2^exp
+   where exp >= LDBL_MIN_EXP - 1,
+         mantissa < 2.0,
+         if x is not a denormalized number then mantissa >= 1.0.
+   Store exp in *EXPPTR and return mantissa.  */
+extern long double printf_frexpl (long double x, int *expptr);
diff --git a/lib/printf-parse.c b/lib/printf-parse.c
new file mode 100644
index 0000000..815fd43
--- /dev/null
+++ b/lib/printf-parse.c
@@ -0,0 +1,638 @@
+/* Formatted output to strings.
+   Copyright (C) 1999-2000, 2002-2003, 2006-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This file can be parametrized with the following macros:
+     CHAR_T             The element type of the format string.
+     CHAR_T_ONLY_ASCII  Set to 1 to enable verification that all characters
+                        in the format string are ASCII.
+     DIRECTIVE          Structure denoting a format directive.
+                        Depends on CHAR_T.
+     DIRECTIVES         Structure denoting the set of format directives of a
+                        format string.  Depends on CHAR_T.
+     PRINTF_PARSE       Function that parses a format string.
+                        Depends on CHAR_T.
+     STATIC             Set to 'static' to declare the function static.
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.  */
+
+#ifndef PRINTF_PARSE
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifndef PRINTF_PARSE
+# include "printf-parse.h"
+#endif
+
+/* Default parameters.  */
+#ifndef PRINTF_PARSE
+# define PRINTF_PARSE printf_parse
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+#endif
+
+/* Get size_t, NULL.  */
+#include <stddef.h>
+
+/* Get intmax_t.  */
+#if defined IN_LIBINTL || defined IN_LIBASPRINTF
+# if HAVE_STDINT_H_WITH_UINTMAX
+#  include <stdint.h>
+# endif
+# if HAVE_INTTYPES_H_WITH_UINTMAX
+#  include <inttypes.h>
+# endif
+#else
+# include <stdint.h>
+#endif
+
+/* malloc(), realloc(), free().  */
+#include <stdlib.h>
+
+/* memcpy().  */
+#include <string.h>
+
+/* errno.  */
+#include <errno.h>
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+#if CHAR_T_ONLY_ASCII
+/* c_isascii().  */
+# include "c-ctype.h"
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
+{
+  const CHAR_T *cp = format;    /* pointer into format */
+  size_t arg_posn = 0;          /* number of regular arguments consumed */
+  size_t d_allocated;           /* allocated elements of d->dir */
+  size_t a_allocated;           /* allocated elements of a->arg */
+  size_t max_width_length = 0;
+  size_t max_precision_length = 0;
+
+  d->count = 0;
+  d_allocated = N_DIRECT_ALLOC_DIRECTIVES;
+  d->dir = d->direct_alloc_dir;
+
+  a->count = 0;
+  a_allocated = N_DIRECT_ALLOC_ARGUMENTS;
+  a->arg = a->direct_alloc_arg;
+
+#define REGISTER_ARG(_index_,_type_) \
+  {                                                                     \
+    size_t n = (_index_);                                               \
+    if (n >= a_allocated)                                               \
+      {                                                                 \
+        size_t memory_size;                                             \
+        argument *memory;                                               \
+                                                                        \
+        a_allocated = xtimes (a_allocated, 2);                          \
+        if (a_allocated <= n)                                           \
+          a_allocated = xsum (n, 1);                                    \
+        memory_size = xtimes (a_allocated, sizeof (argument));          \
+        if (size_overflow_p (memory_size))                              \
+          /* Overflow, would lead to out of memory.  */                 \
+          goto out_of_memory;                                           \
+        memory = (argument *) (a->arg != a->direct_alloc_arg            \
+                               ? realloc (a->arg, memory_size)          \
+                               : malloc (memory_size));                 \
+        if (memory == NULL)                                             \
+          /* Out of memory.  */                                         \
+          goto out_of_memory;                                           \
+        if (a->arg == a->direct_alloc_arg)                              \
+          memcpy (memory, a->arg, a->count * sizeof (argument));        \
+        a->arg = memory;                                                \
+      }                                                                 \
+    while (a->count <= n)                                               \
+      a->arg[a->count++].type = TYPE_NONE;                              \
+    if (a->arg[n].type == TYPE_NONE)                                    \
+      a->arg[n].type = (_type_);                                        \
+    else if (a->arg[n].type != (_type_))                                \
+      /* Ambiguous type for positional argument.  */                    \
+      goto error;                                                       \
+  }
+
+  while (*cp != '\0')
+    {
+      CHAR_T c = *cp++;
+      if (c == '%')
+        {
+          size_t arg_index = ARG_NONE;
+          DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */
+
+          /* Initialize the next directive.  */
+          dp->dir_start = cp - 1;
+          dp->flags = 0;
+          dp->width_start = NULL;
+          dp->width_end = NULL;
+          dp->width_arg_index = ARG_NONE;
+          dp->precision_start = NULL;
+          dp->precision_end = NULL;
+          dp->precision_arg_index = ARG_NONE;
+          dp->arg_index = ARG_NONE;
+
+          /* Test for positional argument.  */
+          if (*cp >= '0' && *cp <= '9')
+            {
+              const CHAR_T *np;
+
+              for (np = cp; *np >= '0' && *np <= '9'; np++)
+                ;
+              if (*np == '$')
+                {
+                  size_t n = 0;
+
+                  for (np = cp; *np >= '0' && *np <= '9'; np++)
+                    n = xsum (xtimes (n, 10), *np - '0');
+                  if (n == 0)
+                    /* Positional argument 0.  */
+                    goto error;
+                  if (size_overflow_p (n))
+                    /* n too large, would lead to out of memory later.  */
+                    goto error;
+                  arg_index = n - 1;
+                  cp = np + 1;
+                }
+            }
+
+          /* Read the flags.  */
+          for (;;)
+            {
+              if (*cp == '\'')
+                {
+                  dp->flags |= FLAG_GROUP;
+                  cp++;
+                }
+              else if (*cp == '-')
+                {
+                  dp->flags |= FLAG_LEFT;
+                  cp++;
+                }
+              else if (*cp == '+')
+                {
+                  dp->flags |= FLAG_SHOWSIGN;
+                  cp++;
+                }
+              else if (*cp == ' ')
+                {
+                  dp->flags |= FLAG_SPACE;
+                  cp++;
+                }
+              else if (*cp == '#')
+                {
+                  dp->flags |= FLAG_ALT;
+                  cp++;
+                }
+              else if (*cp == '0')
+                {
+                  dp->flags |= FLAG_ZERO;
+                  cp++;
+                }
+#if __GLIBC__ >= 2 && !defined __UCLIBC__
+              else if (*cp == 'I')
+                {
+                  dp->flags |= FLAG_LOCALIZED;
+                  cp++;
+                }
+#endif
+              else
+                break;
+            }
+
+          /* Parse the field width.  */
+          if (*cp == '*')
+            {
+              dp->width_start = cp;
+              cp++;
+              dp->width_end = cp;
+              if (max_width_length < 1)
+                max_width_length = 1;
+
+              /* Test for positional argument.  */
+              if (*cp >= '0' && *cp <= '9')
+                {
+                  const CHAR_T *np;
+
+                  for (np = cp; *np >= '0' && *np <= '9'; np++)
+                    ;
+                  if (*np == '$')
+                    {
+                      size_t n = 0;
+
+                      for (np = cp; *np >= '0' && *np <= '9'; np++)
+                        n = xsum (xtimes (n, 10), *np - '0');
+                      if (n == 0)
+                        /* Positional argument 0.  */
+                        goto error;
+                      if (size_overflow_p (n))
+                        /* n too large, would lead to out of memory later.  */
+                        goto error;
+                      dp->width_arg_index = n - 1;
+                      cp = np + 1;
+                    }
+                }
+              if (dp->width_arg_index == ARG_NONE)
+                {
+                  dp->width_arg_index = arg_posn++;
+                  if (dp->width_arg_index == ARG_NONE)
+                    /* arg_posn wrapped around.  */
+                    goto error;
+                }
+              REGISTER_ARG (dp->width_arg_index, TYPE_INT);
+            }
+          else if (*cp >= '0' && *cp <= '9')
+            {
+              size_t width_length;
+
+              dp->width_start = cp;
+              for (; *cp >= '0' && *cp <= '9'; cp++)
+                ;
+              dp->width_end = cp;
+              width_length = dp->width_end - dp->width_start;
+              if (max_width_length < width_length)
+                max_width_length = width_length;
+            }
+
+          /* Parse the precision.  */
+          if (*cp == '.')
+            {
+              cp++;
+              if (*cp == '*')
+                {
+                  dp->precision_start = cp - 1;
+                  cp++;
+                  dp->precision_end = cp;
+                  if (max_precision_length < 2)
+                    max_precision_length = 2;
+
+                  /* Test for positional argument.  */
+                  if (*cp >= '0' && *cp <= '9')
+                    {
+                      const CHAR_T *np;
+
+                      for (np = cp; *np >= '0' && *np <= '9'; np++)
+                        ;
+                      if (*np == '$')
+                        {
+                          size_t n = 0;
+
+                          for (np = cp; *np >= '0' && *np <= '9'; np++)
+                            n = xsum (xtimes (n, 10), *np - '0');
+                          if (n == 0)
+                            /* Positional argument 0.  */
+                            goto error;
+                          if (size_overflow_p (n))
+                            /* n too large, would lead to out of memory
+                               later.  */
+                            goto error;
+                          dp->precision_arg_index = n - 1;
+                          cp = np + 1;
+                        }
+                    }
+                  if (dp->precision_arg_index == ARG_NONE)
+                    {
+                      dp->precision_arg_index = arg_posn++;
+                      if (dp->precision_arg_index == ARG_NONE)
+                        /* arg_posn wrapped around.  */
+                        goto error;
+                    }
+                  REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
+                }
+              else
+                {
+                  size_t precision_length;
+
+                  dp->precision_start = cp - 1;
+                  for (; *cp >= '0' && *cp <= '9'; cp++)
+                    ;
+                  dp->precision_end = cp;
+                  precision_length = dp->precision_end - dp->precision_start;
+                  if (max_precision_length < precision_length)
+                    max_precision_length = precision_length;
+                }
+            }
+
+          {
+            arg_type type;
+
+            /* Parse argument type/size specifiers.  */
+            {
+              int flags = 0;
+
+              for (;;)
+                {
+                  if (*cp == 'h')
+                    {
+                      flags |= (1 << (flags & 1));
+                      cp++;
+                    }
+                  else if (*cp == 'L')
+                    {
+                      flags |= 4;
+                      cp++;
+                    }
+                  else if (*cp == 'l')
+                    {
+                      flags += 8;
+                      cp++;
+                    }
+                  else if (*cp == 'j')
+                    {
+                      if (sizeof (intmax_t) > sizeof (long))
+                        {
+                          /* intmax_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (intmax_t) > sizeof (int))
+                        {
+                          /* intmax_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+                  else if (*cp == 'z' || *cp == 'Z')
+                    {
+                      /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
+                         because the warning facility in gcc-2.95.2 understands
+                         only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784).  */
+                      if (sizeof (size_t) > sizeof (long))
+                        {
+                          /* size_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (size_t) > sizeof (int))
+                        {
+                          /* size_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+                  else if (*cp == 't')
+                    {
+                      if (sizeof (ptrdiff_t) > sizeof (long))
+                        {
+                          /* ptrdiff_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (ptrdiff_t) > sizeof (int))
+                        {
+                          /* ptrdiff_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+#if defined __APPLE__ && defined __MACH__
+                  /* On Mac OS X 10.3, PRIdMAX is defined as "qd".
+                     We cannot change it to "lld" because PRIdMAX must also
+                     be understood by the system's printf routines.  */
+                  else if (*cp == 'q')
+                    {
+                      if (64 / 8 > sizeof (long))
+                        {
+                          /* int64_t = long long */
+                          flags += 16;
+                        }
+                      else
+                        {
+                          /* int64_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+#endif
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                  /* On native Windows, PRIdMAX is defined as "I64d".
+                     We cannot change it to "lld" because PRIdMAX must also
+                     be understood by the system's printf routines.  */
+                  else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4')
+                    {
+                      if (64 / 8 > sizeof (long))
+                        {
+                          /* __int64 = long long */
+                          flags += 16;
+                        }
+                      else
+                        {
+                          /* __int64 = long */
+                          flags += 8;
+                        }
+                      cp += 3;
+                    }
+#endif
+                  else
+                    break;
+                }
+
+              /* Read the conversion character.  */
+              c = *cp++;
+              switch (c)
+                {
+                case 'd': case 'i':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_LONGLONGINT;
+                  else
+#endif
+                  /* If 'long long' exists and is the same as 'long', we parse
+                     "lld" into TYPE_LONGINT.  */
+                  if (flags >= 8)
+                    type = TYPE_LONGINT;
+                  else if (flags & 2)
+                    type = TYPE_SCHAR;
+                  else if (flags & 1)
+                    type = TYPE_SHORT;
+                  else
+                    type = TYPE_INT;
+                  break;
+                case 'o': case 'u': case 'x': case 'X':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_ULONGLONGINT;
+                  else
+#endif
+                  /* If 'unsigned long long' exists and is the same as
+                     'unsigned long', we parse "llu" into TYPE_ULONGINT.  */
+                  if (flags >= 8)
+                    type = TYPE_ULONGINT;
+                  else if (flags & 2)
+                    type = TYPE_UCHAR;
+                  else if (flags & 1)
+                    type = TYPE_USHORT;
+                  else
+                    type = TYPE_UINT;
+                  break;
+                case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+                case 'a': case 'A':
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_LONGDOUBLE;
+                  else
+                    type = TYPE_DOUBLE;
+                  break;
+                case 'c':
+                  if (flags >= 8)
+#if HAVE_WINT_T
+                    type = TYPE_WIDE_CHAR;
+#else
+                    goto error;
+#endif
+                  else
+                    type = TYPE_CHAR;
+                  break;
+#if HAVE_WINT_T
+                case 'C':
+                  type = TYPE_WIDE_CHAR;
+                  c = 'c';
+                  break;
+#endif
+                case 's':
+                  if (flags >= 8)
+#if HAVE_WCHAR_T
+                    type = TYPE_WIDE_STRING;
+#else
+                    goto error;
+#endif
+                  else
+                    type = TYPE_STRING;
+                  break;
+#if HAVE_WCHAR_T
+                case 'S':
+                  type = TYPE_WIDE_STRING;
+                  c = 's';
+                  break;
+#endif
+                case 'p':
+                  type = TYPE_POINTER;
+                  break;
+                case 'n':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_COUNT_LONGLONGINT_POINTER;
+                  else
+#endif
+                  /* If 'long long' exists and is the same as 'long', we parse
+                     "lln" into TYPE_COUNT_LONGINT_POINTER.  */
+                  if (flags >= 8)
+                    type = TYPE_COUNT_LONGINT_POINTER;
+                  else if (flags & 2)
+                    type = TYPE_COUNT_SCHAR_POINTER;
+                  else if (flags & 1)
+                    type = TYPE_COUNT_SHORT_POINTER;
+                  else
+                    type = TYPE_COUNT_INT_POINTER;
+                  break;
+#if ENABLE_UNISTDIO
+                /* The unistdio extensions.  */
+                case 'U':
+                  if (flags >= 16)
+                    type = TYPE_U32_STRING;
+                  else if (flags >= 8)
+                    type = TYPE_U16_STRING;
+                  else
+                    type = TYPE_U8_STRING;
+                  break;
+#endif
+                case '%':
+                  type = TYPE_NONE;
+                  break;
+                default:
+                  /* Unknown conversion character.  */
+                  goto error;
+                }
+            }
+
+            if (type != TYPE_NONE)
+              {
+                dp->arg_index = arg_index;
+                if (dp->arg_index == ARG_NONE)
+                  {
+                    dp->arg_index = arg_posn++;
+                    if (dp->arg_index == ARG_NONE)
+                      /* arg_posn wrapped around.  */
+                      goto error;
+                  }
+                REGISTER_ARG (dp->arg_index, type);
+              }
+            dp->conversion = c;
+            dp->dir_end = cp;
+          }
+
+          d->count++;
+          if (d->count >= d_allocated)
+            {
+              size_t memory_size;
+              DIRECTIVE *memory;
+
+              d_allocated = xtimes (d_allocated, 2);
+              memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
+              if (size_overflow_p (memory_size))
+                /* Overflow, would lead to out of memory.  */
+                goto out_of_memory;
+              memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir
+                                      ? realloc (d->dir, memory_size)
+                                      : malloc (memory_size));
+              if (memory == NULL)
+                /* Out of memory.  */
+                goto out_of_memory;
+              if (d->dir == d->direct_alloc_dir)
+                memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE));
+              d->dir = memory;
+            }
+        }
+#if CHAR_T_ONLY_ASCII
+      else if (!c_isascii (c))
+        {
+          /* Non-ASCII character.  Not supported.  */
+          goto error;
+        }
+#endif
+    }
+  d->dir[d->count].dir_start = cp;
+
+  d->max_width_length = max_width_length;
+  d->max_precision_length = max_precision_length;
+  return 0;
+
+error:
+  if (a->arg != a->direct_alloc_arg)
+    free (a->arg);
+  if (d->dir != d->direct_alloc_dir)
+    free (d->dir);
+  errno = EINVAL;
+  return -1;
+
+out_of_memory:
+  if (a->arg != a->direct_alloc_arg)
+    free (a->arg);
+  if (d->dir != d->direct_alloc_dir)
+    free (d->dir);
+  errno = ENOMEM;
+  return -1;
+}
+
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T_ONLY_ASCII
+#undef CHAR_T
diff --git a/lib/printf-parse.h b/lib/printf-parse.h
new file mode 100644
index 0000000..577099a
--- /dev/null
+++ b/lib/printf-parse.h
@@ -0,0 +1,193 @@
+/* Parse printf format string.
+   Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PRINTF_PARSE_H
+#define _PRINTF_PARSE_H
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     STATIC             Set to 'static' to declare the function static.  */
+
+#if HAVE_FEATURES_H
+# include <features.h> /* for __GLIBC__, __UCLIBC__ */
+#endif
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP       1      /* ' flag */
+#define FLAG_LEFT        2      /* - flag */
+#define FLAG_SHOWSIGN    4      /* + flag */
+#define FLAG_SPACE       8      /* space flag */
+#define FLAG_ALT        16      /* # flag */
+#define FLAG_ZERO       32
+#if __GLIBC__ >= 2 && !defined __UCLIBC__
+# define FLAG_LOCALIZED 64      /* I flag, uses localized digits */
+#endif
+
+/* arg_index value indicating that no argument is consumed.  */
+#define ARG_NONE        (~(size_t)0)
+
+/* xxx_directive: A parsed directive.
+   xxx_directives: A parsed format string.  */
+
+/* Number of directly allocated directives (no malloc() needed).  */
+#define N_DIRECT_ALLOC_DIRECTIVES 7
+
+/* A parsed directive.  */
+typedef struct
+{
+  const char* dir_start;
+  const char* dir_end;
+  int flags;
+  const char* width_start;
+  const char* width_end;
+  size_t width_arg_index;
+  const char* precision_start;
+  const char* precision_end;
+  size_t precision_arg_index;
+  char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+char_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  char_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+  char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
+}
+char_directives;
+
+#if ENABLE_UNISTDIO
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint8_t* dir_start;
+  const uint8_t* dir_end;
+  int flags;
+  const uint8_t* width_start;
+  const uint8_t* width_end;
+  size_t width_arg_index;
+  const uint8_t* precision_start;
+  const uint8_t* precision_end;
+  size_t precision_arg_index;
+  uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u8_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u8_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+  u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
+}
+u8_directives;
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint16_t* dir_start;
+  const uint16_t* dir_end;
+  int flags;
+  const uint16_t* width_start;
+  const uint16_t* width_end;
+  size_t width_arg_index;
+  const uint16_t* precision_start;
+  const uint16_t* precision_end;
+  size_t precision_arg_index;
+  uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u16_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u16_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+  u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
+}
+u16_directives;
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint32_t* dir_start;
+  const uint32_t* dir_end;
+  int flags;
+  const uint32_t* width_start;
+  const uint32_t* width_end;
+  size_t width_arg_index;
+  const uint32_t* precision_start;
+  const uint32_t* precision_end;
+  size_t precision_arg_index;
+  uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u32_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u32_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+  u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
+}
+u32_directives;
+
+#endif
+
+
+/* Parses the format string.  Fills in the number N of directives, and fills
+   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+   to the end of the format string.  Also fills in the arg_type fields of the
+   arguments and the needed count of arguments.  */
+#if ENABLE_UNISTDIO
+extern int
+       ulc_printf_parse (const char *format, char_directives *d, arguments *a);
+extern int
+       u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a);
+extern int
+       u16_printf_parse (const uint16_t *format, u16_directives *d,
+                         arguments *a);
+extern int
+       u32_printf_parse (const uint32_t *format, u32_directives *d,
+                         arguments *a);
+#else
+# ifdef STATIC
+STATIC
+# else
+extern
+# endif
+int printf_parse (const char *format, char_directives *d, arguments *a);
+#endif
+
+#endif /* _PRINTF_PARSE_H */
diff --git a/lib/printf.c b/lib/printf.c
new file mode 100644
index 0000000..11c306b
--- /dev/null
+++ b/lib/printf.c
@@ -0,0 +1,40 @@
+/* Formatted output to a stream.
+   Copyright (C) 2007, 2010-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if 1
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <stdarg.h>
+
+/* Print formatted output to standard output.
+   Return string length of formatted string.  On error, return a negative
+   value.  */
+int
+printf (const char *format, ...)
+{
+  int retval;
+  va_list args;
+
+  va_start (args, format);
+  retval = vfprintf (stdout, format, args);
+  va_end (args);
+
+  return retval;
+}
diff --git a/lib/progname.c b/lib/progname.c
new file mode 100644
index 0000000..bdd4dd7
--- /dev/null
+++ b/lib/progname.c
@@ -0,0 +1,92 @@
+/* Program name management.
+   Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2001.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#include <config.h>
+
+/* Specification.  */
+#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */
+#include "progname.h"
+
+#include <errno.h> /* get program_invocation_name declaration */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* String containing name the program is called with.
+   To be initialized by main().  */
+const char *program_name = NULL;
+
+/* Set program_name, based on argv[0].
+   argv0 must be a string allocated with indefinite extent, and must not be
+   modified after this call.  */
+void
+set_program_name (const char *argv0)
+{
+  /* libtool creates a temporary executable whose name is sometimes prefixed
+     with "lt-" (depends on the platform).  It also makes argv[0] absolute.
+     But the name of the temporary executable is a detail that should not be
+     visible to the end user and to the test suite.
+     Remove this "<dirname>/.libs/" or "<dirname>/.libs/lt-" prefix here.  */
+  const char *slash;
+  const char *base;
+
+  /* Sanity check.  POSIX requires the invoking process to pass a non-NULL
+     argv[0].  */
+  if (argv0 == NULL)
+    {
+      /* It's a bug in the invoking program.  Help diagnosing it.  */
+      fputs ("A NULL argv[0] was passed through an exec system call.\n",
+             stderr);
+      abort ();
+    }
+
+  slash = strrchr (argv0, '/');
+  base = (slash != NULL ? slash + 1 : argv0);
+  if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0)
+    {
+      argv0 = base;
+      if (strncmp (base, "lt-", 3) == 0)
+        {
+          argv0 = base + 3;
+          /* On glibc systems, remove the "lt-" prefix from the variable
+             program_invocation_short_name.  */
+#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+          program_invocation_short_name = (char *) argv0;
+#endif
+        }
+    }
+
+  /* But don't strip off a leading <dirname>/ in general, because when the user
+     runs
+         /some/hidden/place/bin/cp foo foo
+     he should get the error message
+         /some/hidden/place/bin/cp: `foo' and `foo' are the same file
+     not
+         cp: `foo' and `foo' are the same file
+   */
+
+  program_name = argv0;
+
+  /* On glibc systems, the error() function comes from libc and uses the
+     variable program_invocation_name, not program_name.  So set this variable
+     as well.  */
+#if HAVE_DECL_PROGRAM_INVOCATION_NAME
+  program_invocation_name = (char *) argv0;
+#endif
+}
diff --git a/lib/progname.h b/lib/progname.h
new file mode 100644
index 0000000..a75a02e
--- /dev/null
+++ b/lib/progname.h
@@ -0,0 +1,62 @@
+/* Program name management.
+   Copyright (C) 2001-2004, 2006, 2009-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2001.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _PROGNAME_H
+#define _PROGNAME_H
+
+/* Programs using this file should do the following in main():
+     set_program_name (argv[0]);
+ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* String containing name the program is called with.  */
+extern const char *program_name;
+
+/* Set program_name, based on argv[0].
+   argv0 must be a string allocated with indefinite extent, and must not be
+   modified after this call.  */
+extern void set_program_name (const char *argv0);
+
+#if ENABLE_RELOCATABLE
+
+/* Set program_name, based on argv[0], and original installation prefix and
+   directory, for relocatability.  */
+extern void set_program_name_and_installdir (const char *argv0,
+                                             const char *orig_installprefix,
+                                             const char *orig_installdir);
+#undef set_program_name
+#define set_program_name(ARG0) \
+  set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR)
+
+/* Return the full pathname of the current executable, based on the earlier
+   call to set_program_name_and_installdir.  Return NULL if unknown.  */
+extern char *get_full_program_name (void);
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _PROGNAME_H */
diff --git a/lib/quote.c b/lib/quote.c
deleted file mode 100644
index 16cc939..0000000
--- a/lib/quote.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* quote.c - quote arguments for output
-   Copyright (C) 1998, 1999, 2000, 2001, 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Paul Eggert <eggert@twinsun.com> */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "quotearg.h"
-#include "quote.h"
-
-/* Return an unambiguous printable representation of NAME,
-   allocated in slot N, suitable for diagnostics.  */
-char const *
-quote_n (int n, char const *name)
-{
-  return quotearg_n_style (n, locale_quoting_style, name);
-}
-
-/* Return an unambiguous printable representation of NAME,
-   suitable for diagnostics.  */
-char const *
-quote (char const *name)
-{
-  return quote_n (0, name);
-}
diff --git a/lib/quote.h b/lib/quote.h
index 5400ead..e3b332d 100644
--- a/lib/quote.h
+++ b/lib/quote.h
@@ -1,12 +1,11 @@
 /* quote.h - prototypes for quote.c
 
-   Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software
-   Foundation, Inc.
+   Copyright (C) 1998-2001, 2003, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,9 +13,34 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#ifndef QUOTE_H_
+# define QUOTE_H_ 1
 
-char const *quote_n (int n, char const *name);
-char const *quote (char const *name);
+# include <stddef.h>
+
+/* The quoting options used by quote_n and quote.  Its type is incomplete,
+   so it's useful only in expressions like '&quote_quoting_options'.  */
+extern struct quoting_options quote_quoting_options;
+
+/* Return an unambiguous printable representation of ARG (of size
+   ARGSIZE), allocated in slot N, suitable for diagnostics.  If
+   ARGSIZE is SIZE_MAX, use the string length of the argument for
+   ARGSIZE.  */
+char const *quote_n_mem (int n, char const *arg, size_t argsize);
+
+/* Return an unambiguous printable representation of ARG (of size
+   ARGSIZE), suitable for diagnostics.  If ARGSIZE is SIZE_MAX, use
+   the string length of the argument for ARGSIZE.  */
+char const *quote_mem (char const *arg, size_t argsize);
+
+/* Return an unambiguous printable representation of ARG, allocated in
+   slot N, suitable for diagnostics.  */
+char const *quote_n (int n, char const *arg);
+
+/* Return an unambiguous printable representation of ARG, suitable for
+   diagnostics.  */
+char const *quote (char const *arg);
+
+#endif /* !QUOTE_H_ */
diff --git a/lib/quotearg.c b/lib/quotearg.c
index 113239f..7fb866d 100644
--- a/lib/quotearg.c
+++ b/lib/quotearg.c
@@ -1,12 +1,11 @@
 /* quotearg.c - quote arguments for output
 
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006 Free
-   Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,18 +13,25 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert <eggert@twinsun.com> */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
+/* Without this pragma, gcc 4.7.0 20111124 mistakenly suggests that
+   the quoting_options_from_style function might be candidate for
+   attribute 'pure'  */
+#if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__
+# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure"
 #endif
 
+#include <config.h>
+
 #include "quotearg.h"
+#include "quote.h"
 
 #include "xalloc.h"
+#include "c-strcaseeq.h"
+#include "localcharset.h"
 
 #include <ctype.h>
 #include <errno.h>
@@ -33,44 +39,13 @@
 #include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
+#include <wchar.h>
+#include <wctype.h>
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
 
-#if HAVE_WCHAR_H
-
-/* BSD/OS 4.1 wchar.h requires FILE and struct tm to be declared.  */
-# include <stdio.h>
-# include <time.h>
-
-# include <wchar.h>
-#endif
-
-#if !HAVE_MBRTOWC
-/* Disable multibyte processing entirely.  Since MB_CUR_MAX is 1, the
-   other macros are defined only for documentation and to satisfy C
-   syntax.  */
-# undef MB_CUR_MAX
-# define MB_CUR_MAX 1
-# define mbrtowc(pwc, s, n, ps) ((*(pwc) = *(s)) != 0)
-# define iswprint(wc) isprint ((unsigned char) (wc))
-# undef HAVE_MBSINIT
-#endif
-
-#if !defined mbsinit && !HAVE_MBSINIT
-# define mbsinit(ps) 1
-#endif
-
-#ifndef iswprint
-# if HAVE_WCTYPE_H
-#  include <wctype.h>
-# endif
-# if !defined iswprint && !HAVE_ISWPRINT
-#  define iswprint(wc) 1
-# endif
-#endif
-
 #ifndef SIZE_MAX
 # define SIZE_MAX ((size_t) -1)
 #endif
@@ -82,9 +57,18 @@
   /* Basic quoting style.  */
   enum quoting_style style;
 
+  /* Additional flags.  Bitwise combination of enum quoting_flags.  */
+  int flags;
+
   /* Quote the characters indicated by this bit vector even if the
      quoting style would not normally require them to be quoted.  */
   unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1];
+
+  /* The left quote for custom_quoting_style.  */
+  char const *left_quote;
+
+  /* The right quote for custom_quoting_style.  */
+  char const *right_quote;
 };
 
 /* Names of quoting styles.  */
@@ -94,6 +78,7 @@
   "shell",
   "shell-always",
   "c",
+  "c-maybe",
   "escape",
   "locale",
   "clocale",
@@ -107,6 +92,7 @@
   shell_quoting_style,
   shell_always_quoting_style,
   c_quoting_style,
+  c_maybe_quoting_style,
   escape_quoting_style,
   locale_quoting_style,
   clocale_quoting_style
@@ -122,8 +108,8 @@
 clone_quoting_options (struct quoting_options *o)
 {
   int e = errno;
-  struct quoting_options *p = xmalloc (sizeof *p);
-  *p = *(o ? o : &default_quoting_options);
+  struct quoting_options *p = xmemdup (o ? o : &default_quoting_options,
+                                       sizeof *o);
   errno = e;
   return p;
 }
@@ -160,20 +146,88 @@
   return r;
 }
 
+/* In O (or in the default if O is null),
+   set the value of the quoting options flag to I, which can be a
+   bitwise combination of enum quoting_flags, or 0 for default
+   behavior.  Return the old value.  */
+int
+set_quoting_flags (struct quoting_options *o, int i)
+{
+  int r;
+  if (!o)
+    o = &default_quoting_options;
+  r = o->flags;
+  o->flags = i;
+  return r;
+}
+
+void
+set_custom_quoting (struct quoting_options *o,
+                    char const *left_quote, char const *right_quote)
+{
+  if (!o)
+    o = &default_quoting_options;
+  o->style = custom_quoting_style;
+  if (!left_quote || !right_quote)
+    abort ();
+  o->left_quote = left_quote;
+  o->right_quote = right_quote;
+}
+
+/* Return quoting options for STYLE, with no extra quoting.  */
+static struct quoting_options /* NOT PURE!! */
+quoting_options_from_style (enum quoting_style style)
+{
+  struct quoting_options o = { 0, 0, { 0 }, NULL, NULL };
+  if (style == custom_quoting_style)
+    abort ();
+  o.style = style;
+  return o;
+}
+
 /* MSGID approximates a quotation mark.  Return its translation if it
-   has one; otherwise, return either it or "\"", depending on S.  */
+   has one; otherwise, return either it or "\"", depending on S.
+
+   S is either clocale_quoting_style or locale_quoting_style.  */
 static char const *
 gettext_quote (char const *msgid, enum quoting_style s)
 {
   char const *translation = _(msgid);
-  if (translation == msgid && s == clocale_quoting_style)
-    translation = "\"";
-  return translation;
+  char const *locale_code;
+
+  if (translation != msgid)
+    return translation;
+
+  /* For UTF-8 and GB-18030, use single quotes U+2018 and U+2019.
+     Here is a list of other locales that include U+2018 and U+2019:
+
+        ISO-8859-7   0xA1                 KOI8-T       0x91
+        CP869        0x8B                 CP874        0x91
+        CP932        0x81 0x65            CP936        0xA1 0xAE
+        CP949        0xA1 0xAE            CP950        0xA1 0xA5
+        CP1250       0x91                 CP1251       0x91
+        CP1252       0x91                 CP1253       0x91
+        CP1254       0x91                 CP1255       0x91
+        CP1256       0x91                 CP1257       0x91
+        EUC-JP       0xA1 0xC6            EUC-KR       0xA1 0xAE
+        EUC-TW       0xA1 0xE4            BIG5         0xA1 0xA5
+        BIG5-HKSCS   0xA1 0xA5            EUC-CN       0xA1 0xAE
+        GBK          0xA1 0xAE            Georgian-PS  0x91
+        PT154        0x91
+
+     None of these is still in wide use; using iconv is overkill.  */
+  locale_code = locale_charset ();
+  if (STRCASEEQ (locale_code, "UTF-8", 'U','T','F','-','8',0,0,0,0))
+    return msgid[0] == '`' ? "\xe2\x80\x98": "\xe2\x80\x99";
+  if (STRCASEEQ (locale_code, "GB18030", 'G','B','1','8','0','3','0',0,0))
+    return msgid[0] == '`' ? "\xa1\ae": "\xa1\xaf";
+
+  return (s == clocale_quoting_style ? "\"" : "'");
 }
 
 /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
-   argument ARG (of size ARGSIZE), using QUOTING_STYLE and the
-   non-quoting-style part of O to control quoting.
+   argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and
+   QUOTE_THESE_TOO to control quoting.
    Terminate the output with a null character, and return the written
    size of the output, not counting the terminating null.
    If BUFFERSIZE is too small to store the output string, return the
@@ -181,14 +235,16 @@
    If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE.
 
    This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG,
-   ARGSIZE, O), except it uses QUOTING_STYLE instead of the quoting
-   style specified by O, and O may not be null.  */
+   ARGSIZE, O), except it breaks O into its component pieces and is
+   not careful about errno.  */
 
 static size_t
 quotearg_buffer_restyled (char *buffer, size_t buffersize,
-			  char const *arg, size_t argsize,
-			  enum quoting_style quoting_style,
-			  struct quoting_options const *o)
+                          char const *arg, size_t argsize,
+                          enum quoting_style quoting_style, int flags,
+                          unsigned int const *quote_these_too,
+                          char const *left_quote,
+                          char const *right_quote)
 {
   size_t i;
   size_t len = 0;
@@ -196,20 +252,26 @@
   size_t quote_string_len = 0;
   bool backslash_escapes = false;
   bool unibyte_locale = MB_CUR_MAX == 1;
+  bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0;
 
 #define STORE(c) \
     do \
       { \
-	if (len < buffersize) \
-	  buffer[len] = (c); \
-	len++; \
+        if (len < buffersize) \
+          buffer[len] = (c); \
+        len++; \
       } \
     while (0)
 
   switch (quoting_style)
     {
+    case c_maybe_quoting_style:
+      quoting_style = c_quoting_style;
+      elide_outer_quotes = true;
+      /* Fall through.  */
     case c_quoting_style:
-      STORE ('"');
+      if (!elide_outer_quotes)
+        STORE ('"');
       backslash_escapes = true;
       quote_string = "\"";
       quote_string_len = 1;
@@ -217,301 +279,366 @@
 
     case escape_quoting_style:
       backslash_escapes = true;
+      elide_outer_quotes = false;
       break;
 
     case locale_quoting_style:
     case clocale_quoting_style:
+    case custom_quoting_style:
       {
-	/* TRANSLATORS:
-	   Get translations for open and closing quotation marks.
+        if (quoting_style != custom_quoting_style)
+          {
+            /* TRANSLATORS:
+               Get translations for open and closing quotation marks.
+               The message catalog should translate "`" to a left
+               quotation mark suitable for the locale, and similarly for
+               "'".  For example, a French Unicode local should translate
+               these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+               QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+               QUOTATION MARK), respectively.
 
-	   The message catalog should translate "`" to a left
-	   quotation mark suitable for the locale, and similarly for
-	   "'".  If the catalog has no translation,
-	   locale_quoting_style quotes `like this', and
-	   clocale_quoting_style quotes "like this".
+               If the catalog has no translation, we will try to
+               use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+               Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+               current locale is not Unicode, locale_quoting_style
+               will quote 'like this', and clocale_quoting_style will
+               quote "like this".  You should always include translations
+               for "`" and "'" even if U+2018 and U+2019 are appropriate
+               for your locale.
 
-	   For example, an American English Unicode locale should
-	   translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
-	   should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
-	   MARK).  A British English Unicode locale should instead
-	   translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-	   U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
-
-	   If you don't know what to put here, please see
-	   <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
-	   and use glyphs suitable for your language.  */
-
-	char const *left = gettext_quote (N_("`"), quoting_style);
-	char const *right = gettext_quote (N_("'"), quoting_style);
-	for (quote_string = left; *quote_string; quote_string++)
-	  STORE (*quote_string);
-	backslash_escapes = true;
-	quote_string = right;
-	quote_string_len = strlen (quote_string);
+               If you don't know what to put here, please see
+               <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+               and use glyphs suitable for your language.  */
+            left_quote = gettext_quote (N_("`"), quoting_style);
+            right_quote = gettext_quote (N_("'"), quoting_style);
+          }
+        if (!elide_outer_quotes)
+          for (quote_string = left_quote; *quote_string; quote_string++)
+            STORE (*quote_string);
+        backslash_escapes = true;
+        quote_string = right_quote;
+        quote_string_len = strlen (quote_string);
       }
       break;
 
+    case shell_quoting_style:
+      quoting_style = shell_always_quoting_style;
+      elide_outer_quotes = true;
+      /* Fall through.  */
     case shell_always_quoting_style:
-      STORE ('\'');
+      if (!elide_outer_quotes)
+        STORE ('\'');
       quote_string = "'";
       quote_string_len = 1;
       break;
 
-    default:
+    case literal_quoting_style:
+      elide_outer_quotes = false;
       break;
+
+    default:
+      abort ();
     }
 
   for (i = 0;  ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize);  i++)
     {
       unsigned char c;
       unsigned char esc;
+      bool is_right_quote = false;
 
       if (backslash_escapes
-	  && quote_string_len
-	  && i + quote_string_len <= argsize
-	  && memcmp (arg + i, quote_string, quote_string_len) == 0)
-	STORE ('\\');
+          && quote_string_len
+          && i + quote_string_len <= argsize
+          && memcmp (arg + i, quote_string, quote_string_len) == 0)
+        {
+          if (elide_outer_quotes)
+            goto force_outer_quoting_style;
+          is_right_quote = true;
+        }
 
       c = arg[i];
       switch (c)
-	{
-	case '\0':
-	  if (backslash_escapes)
-	    {
-	      STORE ('\\');
-	      STORE ('0');
-	      STORE ('0');
-	      c = '0';
-	    }
-	  break;
+        {
+        case '\0':
+          if (backslash_escapes)
+            {
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              STORE ('\\');
+              /* If quote_string were to begin with digits, we'd need to
+                 test for the end of the arg as well.  However, it's
+                 hard to imagine any locale that would use digits in
+                 quotes, and set_custom_quoting is documented not to
+                 accept them.  */
+              if (i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9')
+                {
+                  STORE ('0');
+                  STORE ('0');
+                }
+              c = '0';
+              /* We don't have to worry that this last '0' will be
+                 backslash-escaped because, again, quote_string should
+                 not start with it and because quote_these_too is
+                 documented as not accepting it.  */
+            }
+          else if (flags & QA_ELIDE_NULL_BYTES)
+            continue;
+          break;
 
-	case '?':
-	  switch (quoting_style)
-	    {
-	    case shell_quoting_style:
-	      goto use_shell_always_quoting_style;
+        case '?':
+          switch (quoting_style)
+            {
+            case shell_always_quoting_style:
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              break;
 
-	    case c_quoting_style:
-	      if (i + 2 < argsize && arg[i + 1] == '?')
-		switch (arg[i + 2])
-		  {
-		  case '!': case '\'':
-		  case '(': case ')': case '-': case '/':
-		  case '<': case '=': case '>':
-		    /* Escape the second '?' in what would otherwise be
-		       a trigraph.  */
-		    c = arg[i + 2];
-		    i += 2;
-		    STORE ('?');
-		    STORE ('\\');
-		    STORE ('?');
-		    break;
+            case c_quoting_style:
+              if ((flags & QA_SPLIT_TRIGRAPHS)
+                  && i + 2 < argsize && arg[i + 1] == '?')
+                switch (arg[i + 2])
+                  {
+                  case '!': case '\'':
+                  case '(': case ')': case '-': case '/':
+                  case '<': case '=': case '>':
+                    /* Escape the second '?' in what would otherwise be
+                       a trigraph.  */
+                    if (elide_outer_quotes)
+                      goto force_outer_quoting_style;
+                    c = arg[i + 2];
+                    i += 2;
+                    STORE ('?');
+                    STORE ('"');
+                    STORE ('"');
+                    STORE ('?');
+                    break;
 
-		  default:
-		    break;
-		  }
-	      break;
+                  default:
+                    break;
+                  }
+              break;
 
-	    default:
-	      break;
-	    }
-	  break;
+            default:
+              break;
+            }
+          break;
 
-	case '\a': esc = 'a'; goto c_escape;
-	case '\b': esc = 'b'; goto c_escape;
-	case '\f': esc = 'f'; goto c_escape;
-	case '\n': esc = 'n'; goto c_and_shell_escape;
-	case '\r': esc = 'r'; goto c_and_shell_escape;
-	case '\t': esc = 't'; goto c_and_shell_escape;
-	case '\v': esc = 'v'; goto c_escape;
-	case '\\': esc = c; goto c_and_shell_escape;
+        case '\a': esc = 'a'; goto c_escape;
+        case '\b': esc = 'b'; goto c_escape;
+        case '\f': esc = 'f'; goto c_escape;
+        case '\n': esc = 'n'; goto c_and_shell_escape;
+        case '\r': esc = 'r'; goto c_and_shell_escape;
+        case '\t': esc = 't'; goto c_and_shell_escape;
+        case '\v': esc = 'v'; goto c_escape;
+        case '\\': esc = c;
+          /* No need to escape the escape if we are trying to elide
+             outer quotes and nothing else is problematic.  */
+          if (backslash_escapes && elide_outer_quotes && quote_string_len)
+            goto store_c;
 
-	c_and_shell_escape:
-	  if (quoting_style == shell_quoting_style)
-	    goto use_shell_always_quoting_style;
-	c_escape:
-	  if (backslash_escapes)
-	    {
-	      c = esc;
-	      goto store_escape;
-	    }
-	  break;
+        c_and_shell_escape:
+          if (quoting_style == shell_always_quoting_style
+              && elide_outer_quotes)
+            goto force_outer_quoting_style;
+          /* Fall through.  */
+        c_escape:
+          if (backslash_escapes)
+            {
+              c = esc;
+              goto store_escape;
+            }
+          break;
 
-	case '{': case '}': /* sometimes special if isolated */
-	  if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
-	    break;
-	  /* Fall through.  */
-	case '#': case '~':
-	  if (i != 0)
-	    break;
-	  /* Fall through.  */
-	case ' ':
-	case '!': /* special in bash */
-	case '"': case '$': case '&':
-	case '(': case ')': case '*': case ';':
-	case '<':
-	case '=': /* sometimes special in 0th or (with "set -k") later args */
-	case '>': case '[':
-	case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
-	case '`': case '|':
-	  /* A shell special character.  In theory, '$' and '`' could
-	     be the first bytes of multibyte characters, which means
-	     we should check them with mbrtowc, but in practice this
-	     doesn't happen so it's not worth worrying about.  */
-	  if (quoting_style == shell_quoting_style)
-	    goto use_shell_always_quoting_style;
-	  break;
+        case '{': case '}': /* sometimes special if isolated */
+          if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
+            break;
+          /* Fall through.  */
+        case '#': case '~':
+          if (i != 0)
+            break;
+          /* Fall through.  */
+        case ' ':
+        case '!': /* special in bash */
+        case '"': case '$': case '&':
+        case '(': case ')': case '*': case ';':
+        case '<':
+        case '=': /* sometimes special in 0th or (with "set -k") later args */
+        case '>': case '[':
+        case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
+        case '`': case '|':
+          /* A shell special character.  In theory, '$' and '`' could
+             be the first bytes of multibyte characters, which means
+             we should check them with mbrtowc, but in practice this
+             doesn't happen so it's not worth worrying about.  */
+          if (quoting_style == shell_always_quoting_style
+              && elide_outer_quotes)
+            goto force_outer_quoting_style;
+          break;
 
-	case '\'':
-	  switch (quoting_style)
-	    {
-	    case shell_quoting_style:
-	      goto use_shell_always_quoting_style;
+        case '\'':
+          if (quoting_style == shell_always_quoting_style)
+            {
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              STORE ('\'');
+              STORE ('\\');
+              STORE ('\'');
+            }
+          break;
 
-	    case shell_always_quoting_style:
-	      STORE ('\'');
-	      STORE ('\\');
-	      STORE ('\'');
-	      break;
+        case '%': case '+': case ',': case '-': case '.': case '/':
+        case '0': case '1': case '2': case '3': case '4': case '5':
+        case '6': case '7': case '8': case '9': case ':':
+        case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+        case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+        case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+        case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+        case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
+        case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
+        case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
+        case 'o': case 'p': case 'q': case 'r': case 's': case 't':
+        case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
+          /* These characters don't cause problems, no matter what the
+             quoting style is.  They cannot start multibyte sequences.
+             A digit or a special letter would cause trouble if it
+             appeared at the beginning of quote_string because we'd then
+             escape by prepending a backslash.  However, it's hard to
+             imagine any locale that would use digits or letters as
+             quotes, and set_custom_quoting is documented not to accept
+             them.  Also, a digit or a special letter would cause
+             trouble if it appeared in quote_these_too, but that's also
+             documented as not accepting them.  */
+          break;
 
-	    default:
-	      break;
-	    }
-	  break;
+        default:
+          /* If we have a multibyte sequence, copy it until we reach
+             its end, find an error, or come back to the initial shift
+             state.  For C-like styles, if the sequence has
+             unprintable characters, escape the whole sequence, since
+             we can't easily escape single characters within it.  */
+          {
+            /* Length of multibyte sequence found so far.  */
+            size_t m;
 
-	case '%': case '+': case ',': case '-': case '.': case '/':
-	case '0': case '1': case '2': case '3': case '4': case '5':
-	case '6': case '7': case '8': case '9': case ':':
-	case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-	case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-	case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-	case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-	case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
-	case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
-	case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
-	case 'o': case 'p': case 'q': case 'r': case 's': case 't':
-	case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
-	  /* These characters don't cause problems, no matter what the
-	     quoting style is.  They cannot start multibyte sequences.  */
-	  break;
+            bool printable;
 
-	default:
-	  /* If we have a multibyte sequence, copy it until we reach
-	     its end, find an error, or come back to the initial shift
-	     state.  For C-like styles, if the sequence has
-	     unprintable characters, escape the whole sequence, since
-	     we can't easily escape single characters within it.  */
-	  {
-	    /* Length of multibyte sequence found so far.  */
-	    size_t m;
+            if (unibyte_locale)
+              {
+                m = 1;
+                printable = isprint (c) != 0;
+              }
+            else
+              {
+                mbstate_t mbstate;
+                memset (&mbstate, 0, sizeof mbstate);
 
-	    bool printable;
+                m = 0;
+                printable = true;
+                if (argsize == SIZE_MAX)
+                  argsize = strlen (arg);
 
-	    if (unibyte_locale)
-	      {
-		m = 1;
-		printable = isprint (c) != 0;
-	      }
-	    else
-	      {
-		mbstate_t mbstate;
-		memset (&mbstate, 0, sizeof mbstate);
+                do
+                  {
+                    wchar_t w;
+                    size_t bytes = mbrtowc (&w, &arg[i + m],
+                                            argsize - (i + m), &mbstate);
+                    if (bytes == 0)
+                      break;
+                    else if (bytes == (size_t) -1)
+                      {
+                        printable = false;
+                        break;
+                      }
+                    else if (bytes == (size_t) -2)
+                      {
+                        printable = false;
+                        while (i + m < argsize && arg[i + m])
+                          m++;
+                        break;
+                      }
+                    else
+                      {
+                        /* Work around a bug with older shells that "see" a '\'
+                           that is really the 2nd byte of a multibyte character.
+                           In practice the problem is limited to ASCII
+                           chars >= '@' that are shell special chars.  */
+                        if ('[' == 0x5b && elide_outer_quotes
+                            && quoting_style == shell_always_quoting_style)
+                          {
+                            size_t j;
+                            for (j = 1; j < bytes; j++)
+                              switch (arg[i + m + j])
+                                {
+                                case '[': case '\\': case '^':
+                                case '`': case '|':
+                                  goto force_outer_quoting_style;
 
-		m = 0;
-		printable = true;
-		if (argsize == SIZE_MAX)
-		  argsize = strlen (arg);
+                                default:
+                                  break;
+                                }
+                          }
 
-		do
-		  {
-		    wchar_t w;
-		    size_t bytes = mbrtowc (&w, &arg[i + m],
-					    argsize - (i + m), &mbstate);
-		    if (bytes == 0)
-		      break;
-		    else if (bytes == (size_t) -1)
-		      {
-			printable = false;
-			break;
-		      }
-		    else if (bytes == (size_t) -2)
-		      {
-			printable = false;
-			while (i + m < argsize && arg[i + m])
-			  m++;
-			break;
-		      }
-		    else
-		      {
-			/* Work around a bug with older shells that "see" a '\'
-			   that is really the 2nd byte of a multibyte character.
-			   In practice the problem is limited to ASCII
-			   chars >= '@' that are shell special chars.  */
-			if ('[' == 0x5b && quoting_style == shell_quoting_style)
-			  {
-			    size_t j;
-			    for (j = 1; j < bytes; j++)
-			      switch (arg[i + m + j])
-				{
-				case '[': case '\\': case '^':
-				case '`': case '|':
-				  goto use_shell_always_quoting_style;
+                        if (! iswprint (w))
+                          printable = false;
+                        m += bytes;
+                      }
+                  }
+                while (! mbsinit (&mbstate));
+              }
 
-				default:
-				  break;
-				}
-			  }
+            if (1 < m || (backslash_escapes && ! printable))
+              {
+                /* Output a multibyte sequence, or an escaped
+                   unprintable unibyte character.  */
+                size_t ilim = i + m;
 
-			if (! iswprint (w))
-			  printable = false;
-			m += bytes;
-		      }
-		  }
-		while (! mbsinit (&mbstate));
-	      }
+                for (;;)
+                  {
+                    if (backslash_escapes && ! printable)
+                      {
+                        if (elide_outer_quotes)
+                          goto force_outer_quoting_style;
+                        STORE ('\\');
+                        STORE ('0' + (c >> 6));
+                        STORE ('0' + ((c >> 3) & 7));
+                        c = '0' + (c & 7);
+                      }
+                    else if (is_right_quote)
+                      {
+                        STORE ('\\');
+                        is_right_quote = false;
+                      }
+                    if (ilim <= i + 1)
+                      break;
+                    STORE (c);
+                    c = arg[++i];
+                  }
 
-	    if (1 < m || (backslash_escapes && ! printable))
-	      {
-		/* Output a multibyte sequence, or an escaped
-		   unprintable unibyte character.  */
-		size_t ilim = i + m;
+                goto store_c;
+              }
+          }
+        }
 
-		for (;;)
-		  {
-		    if (backslash_escapes && ! printable)
-		      {
-			STORE ('\\');
-			STORE ('0' + (c >> 6));
-			STORE ('0' + ((c >> 3) & 7));
-			c = '0' + (c & 7);
-		      }
-		    if (ilim <= i + 1)
-		      break;
-		    STORE (c);
-		    c = arg[++i];
-		  }
-
-		goto store_c;
-	      }
-	  }
-	}
-
-      if (! (backslash_escapes
-	     && o->quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))))
-	goto store_c;
+      if (! ((backslash_escapes || elide_outer_quotes)
+             && quote_these_too
+             && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))
+          && !is_right_quote)
+        goto store_c;
 
     store_escape:
+      if (elide_outer_quotes)
+        goto force_outer_quoting_style;
       STORE ('\\');
 
     store_c:
       STORE (c);
     }
 
-  if (i == 0 && quoting_style == shell_quoting_style)
-    goto use_shell_always_quoting_style;
+  if (len == 0 && quoting_style == shell_always_quoting_style
+      && elide_outer_quotes)
+    goto force_outer_quoting_style;
 
-  if (quote_string)
+  if (quote_string && !elide_outer_quotes)
     for (; *quote_string; quote_string++)
       STORE (*quote_string);
 
@@ -519,9 +646,13 @@
     buffer[len] = '\0';
   return len;
 
- use_shell_always_quoting_style:
+ force_outer_quoting_style:
+  /* Don't reuse quote_these_too, since the addition of outer quotes
+     sufficiently quotes the specified characters.  */
   return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
-				   shell_always_quoting_style, o);
+                                   quoting_style,
+                                   flags & ~QA_ELIDE_OUTER_QUOTES, NULL,
+                                   left_quote, right_quote);
 }
 
 /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
@@ -535,31 +666,89 @@
    ARGSIZE.  */
 size_t
 quotearg_buffer (char *buffer, size_t buffersize,
-		 char const *arg, size_t argsize,
-		 struct quoting_options const *o)
+                 char const *arg, size_t argsize,
+                 struct quoting_options const *o)
 {
   struct quoting_options const *p = o ? o : &default_quoting_options;
   int e = errno;
   size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
-				       p->style, p);
+                                       p->style, p->flags, p->quote_these_too,
+                                       p->left_quote, p->right_quote);
   errno = e;
   return r;
 }
 
-/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly
-   allocated storage containing the quoted string.  */
+/* Equivalent to quotearg_alloc (ARG, ARGSIZE, NULL, O).  */
 char *
 quotearg_alloc (char const *arg, size_t argsize,
-		struct quoting_options const *o)
+                struct quoting_options const *o)
 {
+  return quotearg_alloc_mem (arg, argsize, NULL, o);
+}
+
+/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly
+   allocated storage containing the quoted string, and store the
+   resulting size into *SIZE, if non-NULL.  The result can contain
+   embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not
+   NULL, and set_quoting_flags has not set the null byte elision
+   flag.  */
+char *
+quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size,
+                    struct quoting_options const *o)
+{
+  struct quoting_options const *p = o ? o : &default_quoting_options;
   int e = errno;
-  size_t bufsize = quotearg_buffer (0, 0, arg, argsize, o) + 1;
-  char *buf = xmalloc (bufsize);
-  quotearg_buffer (buf, bufsize, arg, argsize, o);
+  /* Elide embedded null bytes if we can't return a size.  */
+  int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES);
+  size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style,
+                                             flags, p->quote_these_too,
+                                             p->left_quote,
+                                             p->right_quote) + 1;
+  char *buf = xcharalloc (bufsize);
+  quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags,
+                            p->quote_these_too,
+                            p->left_quote, p->right_quote);
   errno = e;
+  if (size)
+    *size = bufsize - 1;
   return buf;
 }
 
+/* A storage slot with size and pointer to a value.  */
+struct slotvec
+{
+  size_t size;
+  char *val;
+};
+
+/* Preallocate a slot 0 buffer, so that the caller can always quote
+   one small component of a "memory exhausted" message in slot 0.  */
+static char slot0[256];
+static unsigned int nslots = 1;
+static struct slotvec slotvec0 = {sizeof slot0, slot0};
+static struct slotvec *slotvec = &slotvec0;
+
+void
+quotearg_free (void)
+{
+  struct slotvec *sv = slotvec;
+  unsigned int i;
+  for (i = 1; i < nslots; i++)
+    free (sv[i].val);
+  if (sv[0].val != slot0)
+    {
+      free (sv[0].val);
+      slotvec0.size = sizeof slot0;
+      slotvec0.val = slot0;
+    }
+  if (sv != &slotvec0)
+    {
+      free (sv);
+      slotvec = &slotvec0;
+    }
+  nslots = 1;
+}
+
 /* Use storage slot N to return a quoted version of argument ARG.
    ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a
    null-terminated string.
@@ -570,60 +759,57 @@
    to allow for future extensions (using negative values).  */
 static char *
 quotearg_n_options (int n, char const *arg, size_t argsize,
-		    struct quoting_options const *options)
+                    struct quoting_options const *options)
 {
   int e = errno;
 
-  /* Preallocate a slot 0 buffer, so that the caller can always quote
-     one small component of a "memory exhausted" message in slot 0.  */
-  static char slot0[256];
-  static unsigned int nslots = 1;
   unsigned int n0 = n;
-  struct slotvec
-    {
-      size_t size;
-      char *val;
-    };
-  static struct slotvec slotvec0 = {sizeof slot0, slot0};
-  static struct slotvec *slotvec = &slotvec0;
+  struct slotvec *sv = slotvec;
 
   if (n < 0)
     abort ();
 
   if (nslots <= n0)
     {
-      /* FIXME: technically, the type of n1 should be `unsigned int',
-	 but that evokes an unsuppressible warning from gcc-4.0.1 and
-	 older.  If gcc ever provides an option to suppress that warning,
-	 revert to the original type, so that the test in xalloc_oversized
-	 is once again performed only at compile time.  */
+      /* FIXME: technically, the type of n1 should be 'unsigned int',
+         but that evokes an unsuppressible warning from gcc-4.0.1 and
+         older.  If gcc ever provides an option to suppress that warning,
+         revert to the original type, so that the test in xalloc_oversized
+         is once again performed only at compile time.  */
       size_t n1 = n0 + 1;
+      bool preallocated = (sv == &slotvec0);
 
-      if (xalloc_oversized (n1, sizeof *slotvec))
-	xalloc_die ();
+      if (xalloc_oversized (n1, sizeof *sv))
+        xalloc_die ();
 
-      if (slotvec == &slotvec0)
-	{
-	  slotvec = xmalloc (sizeof *slotvec);
-	  *slotvec = slotvec0;
-	}
-      slotvec = xrealloc (slotvec, n1 * sizeof *slotvec);
-      memset (slotvec + nslots, 0, (n1 - nslots) * sizeof *slotvec);
+      slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv);
+      if (preallocated)
+        *sv = slotvec0;
+      memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv);
       nslots = n1;
     }
 
   {
-    size_t size = slotvec[n].size;
-    char *val = slotvec[n].val;
-    size_t qsize = quotearg_buffer (val, size, arg, argsize, options);
+    size_t size = sv[n].size;
+    char *val = sv[n].val;
+    /* Elide embedded null bytes since we don't return a size.  */
+    int flags = options->flags | QA_ELIDE_NULL_BYTES;
+    size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize,
+                                             options->style, flags,
+                                             options->quote_these_too,
+                                             options->left_quote,
+                                             options->right_quote);
 
     if (size <= qsize)
       {
-	slotvec[n].size = size = qsize + 1;
-	if (val != slot0)
-	  free (val);
-	slotvec[n].val = val = xmalloc (size);
-	quotearg_buffer (val, size, arg, argsize, options);
+        sv[n].size = size = qsize + 1;
+        if (val != slot0)
+          free (val);
+        sv[n].val = val = xcharalloc (size);
+        quotearg_buffer_restyled (val, size, arg, argsize, options->style,
+                                  flags, options->quote_these_too,
+                                  options->left_quote,
+                                  options->right_quote);
       }
 
     errno = e;
@@ -638,19 +824,21 @@
 }
 
 char *
+quotearg_n_mem (int n, char const *arg, size_t argsize)
+{
+  return quotearg_n_options (n, arg, argsize, &default_quoting_options);
+}
+
+char *
 quotearg (char const *arg)
 {
   return quotearg_n (0, arg);
 }
 
-/* Return quoting options for STYLE, with no extra quoting.  */
-static struct quoting_options
-quoting_options_from_style (enum quoting_style style)
+char *
+quotearg_mem (char const *arg, size_t argsize)
 {
-  struct quoting_options o;
-  o.style = style;
-  memset (o.quote_these_too, 0, sizeof o.quote_these_too);
-  return o;
+  return quotearg_n_mem (0, arg, argsize);
 }
 
 char *
@@ -662,7 +850,7 @@
 
 char *
 quotearg_n_style_mem (int n, enum quoting_style s,
-		      char const *arg, size_t argsize)
+                      char const *arg, size_t argsize)
 {
   struct quoting_options const o = quoting_options_from_style (s);
   return quotearg_n_options (n, arg, argsize, &o);
@@ -675,12 +863,24 @@
 }
 
 char *
-quotearg_char (char const *arg, char ch)
+quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize)
+{
+  return quotearg_n_style_mem (0, s, arg, argsize);
+}
+
+char *
+quotearg_char_mem (char const *arg, size_t argsize, char ch)
 {
   struct quoting_options options;
   options = default_quoting_options;
   set_char_quoting (&options, ch, 1);
-  return quotearg_n_options (0, arg, SIZE_MAX, &options);
+  return quotearg_n_options (0, arg, argsize, &options);
+}
+
+char *
+quotearg_char (char const *arg, char ch)
+{
+  return quotearg_char_mem (arg, SIZE_MAX, ch);
 }
 
 char *
@@ -688,3 +888,76 @@
 {
   return quotearg_char (arg, ':');
 }
+
+char *
+quotearg_colon_mem (char const *arg, size_t argsize)
+{
+  return quotearg_char_mem (arg, argsize, ':');
+}
+
+char *
+quotearg_n_custom (int n, char const *left_quote,
+                   char const *right_quote, char const *arg)
+{
+  return quotearg_n_custom_mem (n, left_quote, right_quote, arg,
+                                SIZE_MAX);
+}
+
+char *
+quotearg_n_custom_mem (int n, char const *left_quote,
+                       char const *right_quote,
+                       char const *arg, size_t argsize)
+{
+  struct quoting_options o = default_quoting_options;
+  set_custom_quoting (&o, left_quote, right_quote);
+  return quotearg_n_options (n, arg, argsize, &o);
+}
+
+char *
+quotearg_custom (char const *left_quote, char const *right_quote,
+                 char const *arg)
+{
+  return quotearg_n_custom (0, left_quote, right_quote, arg);
+}
+
+char *
+quotearg_custom_mem (char const *left_quote, char const *right_quote,
+                     char const *arg, size_t argsize)
+{
+  return quotearg_n_custom_mem (0, left_quote, right_quote, arg,
+                                argsize);
+}
+
+
+/* The quoting option used by the functions of quote.h.  */
+struct quoting_options quote_quoting_options =
+  {
+    locale_quoting_style,
+    0,
+    { 0 },
+    NULL, NULL
+  };
+
+char const *
+quote_n_mem (int n, char const *arg, size_t argsize)
+{
+  return quotearg_n_options (n, arg, argsize, &quote_quoting_options);
+}
+
+char const *
+quote_mem (char const *arg, size_t argsize)
+{
+  return quote_n_mem (0, arg, argsize);
+}
+
+char const *
+quote_n (int n, char const *arg)
+{
+  return quote_n_mem (n, arg, SIZE_MAX);
+}
+
+char const *
+quote (char const *arg)
+{
+  return quote_n (0, arg);
+}
diff --git a/lib/quotearg.h b/lib/quotearg.h
index 24f26f7..e6b08ab 100644
--- a/lib/quotearg.h
+++ b/lib/quotearg.h
@@ -1,12 +1,12 @@
 /* quotearg.h - quote arguments for output
 
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Free Software
-   Foundation, Inc.
+   Copyright (C) 1998-2002, 2004, 2006, 2008-2012 Free Software Foundation,
+   Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,8 +14,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert <eggert@twinsun.com> */
 
@@ -24,34 +23,208 @@
 
 # include <stddef.h>
 
-/* Basic quoting styles.  */
+/* Basic quoting styles.  For each style, an example is given on the
+   input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using
+   quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that
+   style and the default flags and quoted characters.  Note that the
+   examples are shown here as valid C strings rather than what
+   displays on a terminal (with "??/" as a trigraph for "\\").  */
 enum quoting_style
   {
-    /* Output names as-is (ls --quoting-style=literal).  */
+    /* Output names as-is (ls --quoting-style=literal).  Can result in
+       embedded null bytes if QA_ELIDE_NULL_BYTES is not in
+       effect.
+
+       quotearg_buffer:
+       "simple", "\0 \t\n'\"\033??/\\", "a:b"
+       quotearg:
+       "simple", " \t\n'\"\033??/\\", "a:b"
+       quotearg_colon:
+       "simple", " \t\n'\"\033??/\\", "a:b"
+    */
     literal_quoting_style,
 
     /* Quote names for the shell if they contain shell metacharacters
-       or would cause ambiguous output (ls --quoting-style=shell).  */
+       or would cause ambiguous output (ls --quoting-style=shell).
+       Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not
+       in effect.
+
+       quotearg_buffer:
+       "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b"
+       quotearg:
+       "simple", "' \t\n'\\''\"\033??/\\'", "a:b"
+       quotearg_colon:
+       "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+    */
     shell_quoting_style,
 
     /* Quote names for the shell, even if they would normally not
-       require quoting (ls --quoting-style=shell-always).  */
+       require quoting (ls --quoting-style=shell-always).  Can result
+       in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect.
+       Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in
+       effect.
+
+       quotearg_buffer:
+       "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'"
+       quotearg:
+       "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+       quotearg_colon:
+       "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+    */
     shell_always_quoting_style,
 
-    /* Quote names as for a C language string (ls --quoting-style=c).  */
+    /* Quote names as for a C language string (ls --quoting-style=c).
+       Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is
+       in effect.  Split into consecutive strings if
+       QA_SPLIT_TRIGRAPHS.
+
+       quotearg_buffer:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+       quotearg:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+       quotearg_colon:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\""
+    */
     c_quoting_style,
 
     /* Like c_quoting_style except omit the surrounding double-quote
-       characters (ls --quoting-style=escape).  */
+       characters if no quoted characters are encountered.
+
+       quotearg_buffer:
+       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b"
+       quotearg:
+       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b"
+       quotearg_colon:
+       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+    */
+    c_maybe_quoting_style,
+
+    /* Like c_quoting_style except always omit the surrounding
+       double-quote characters and ignore QA_SPLIT_TRIGRAPHS
+       (ls --quoting-style=escape).
+
+       quotearg_buffer:
+       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
+       quotearg:
+       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
+       quotearg_colon:
+       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b"
+    */
     escape_quoting_style,
 
-    /* Like clocale_quoting_style, but quote `like this' instead of
-       "like this" in the default C locale (ls --quoting-style=locale).  */
+    /* Like clocale_quoting_style, but use single quotes in the
+       default C locale or if the program does not use gettext
+       (ls --quoting-style=locale).  For UTF-8 locales, quote
+       characters will use Unicode.
+
+       LC_MESSAGES=C
+       quotearg_buffer:
+       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'"
+       quotearg:
+       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'"
+       quotearg_colon:
+       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a\\:b'"
+
+       LC_MESSAGES=pt_PT.utf8
+       quotearg_buffer:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+       quotearg:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+       quotearg_colon:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
+    */
     locale_quoting_style,
 
     /* Like c_quoting_style except use quotation marks appropriate for
-       the locale (ls --quoting-style=clocale).  */
-    clocale_quoting_style
+       the locale and ignore QA_SPLIT_TRIGRAPHS
+       (ls --quoting-style=clocale).
+
+       LC_MESSAGES=C
+       quotearg_buffer:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+       quotearg:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+       quotearg_colon:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\""
+
+       LC_MESSAGES=pt_PT.utf8
+       quotearg_buffer:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+       quotearg:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+       quotearg_colon:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
+    */
+    clocale_quoting_style,
+
+    /* Like clocale_quoting_style except use the custom quotation marks
+       set by set_custom_quoting.  If custom quotation marks are not
+       set, the behavior is undefined.
+
+       left_quote = right_quote = "'"
+       quotearg_buffer:
+       "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'"
+       quotearg:
+       "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'"
+       quotearg_colon:
+       "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a\\:b'"
+
+       left_quote = "(" and right_quote = ")"
+       quotearg_buffer:
+       "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)"
+       quotearg:
+       "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)"
+       quotearg_colon:
+       "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a\\:b)"
+
+       left_quote = ":" and right_quote = " "
+       quotearg_buffer:
+       ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b "
+       quotearg:
+       ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b "
+       quotearg_colon:
+       ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a\\:b "
+
+       left_quote = "\"'" and right_quote = "'\""
+       Notice that this is treated as a single level of quotes or two
+       levels where the outer quote need not be escaped within the inner
+       quotes.  For two levels where the outer quote must be escaped
+       within the inner quotes, you must use separate quotearg
+       invocations.
+       quotearg_buffer:
+       "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\""
+       quotearg:
+       "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\""
+       quotearg_colon:
+       "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a\\:b'\""
+    */
+    custom_quoting_style
+  };
+
+/* Flags for use in set_quoting_flags.  */
+enum quoting_flags
+  {
+    /* Always elide null bytes from styles that do not quote them,
+       even when the length of the result is available to the
+       caller.  */
+    QA_ELIDE_NULL_BYTES = 0x01,
+
+    /* Omit the surrounding quote characters if no escaped characters
+       are encountered.  Note that if no other character needs
+       escaping, then neither does the escape character.  */
+    QA_ELIDE_OUTER_QUOTES = 0x02,
+
+    /* In the c_quoting_style and c_maybe_quoting_style, split ANSI
+       trigraph sequences into concatenated strings (for example,
+       "?""?/" rather than "??/", which could be confused with
+       "\\").  */
+    QA_SPLIT_TRIGRAPHS = 0x04
   };
 
 /* For now, --quoting-style=literal is the default, but this may change.  */
@@ -84,9 +257,30 @@
    set the value of the quoting options for character C to I.
    Return the old value.  Currently, the only values defined for I are
    0 (the default) and 1 (which means to quote the character even if
-   it would not otherwise be quoted).  */
+   it would not otherwise be quoted).  C must never be a digit or a
+   letter that has special meaning after a backslash (for example, "\t"
+   for tab).  */
 int set_char_quoting (struct quoting_options *o, char c, int i);
 
+/* In O (or in the default if O is null),
+   set the value of the quoting options flag to I, which can be a
+   bitwise combination of enum quoting_flags, or 0 for default
+   behavior.  Return the old value.  */
+int set_quoting_flags (struct quoting_options *o, int i);
+
+/* In O (or in the default if O is null),
+   set the value of the quoting style to custom_quoting_style,
+   set the left quote to LEFT_QUOTE, and set the right quote to
+   RIGHT_QUOTE.  Each of LEFT_QUOTE and RIGHT_QUOTE must be
+   null-terminated and can be the empty string.  Because backslashes are
+   used for escaping, it does not make sense for RIGHT_QUOTE to contain
+   a backslash.  RIGHT_QUOTE must not begin with a digit or a letter
+   that has special meaning after a backslash (for example, "\t" for
+   tab).  */
+void set_custom_quoting (struct quoting_options *o,
+                         char const *left_quote,
+                         char const *right_quote);
+
 /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
    argument ARG (of size ARGSIZE), using O to control quoting.
    If O is null, use the default.
@@ -94,26 +288,49 @@
    size of the output, not counting the terminating null.
    If BUFFERSIZE is too small to store the output string, return the
    value that would have been returned had BUFFERSIZE been large enough.
-   If ARGSIZE is -1, use the string length of the argument for ARGSIZE.  */
+   If ARGSIZE is -1, use the string length of the argument for ARGSIZE.
+   On output, BUFFER might contain embedded null bytes if ARGSIZE was
+   not -1, the style of O does not use backslash escapes, and the
+   flags of O do not request elision of null bytes.*/
 size_t quotearg_buffer (char *buffer, size_t buffersize,
-			char const *arg, size_t argsize,
-			struct quoting_options const *o);
+                        char const *arg, size_t argsize,
+                        struct quoting_options const *o);
 
 /* Like quotearg_buffer, except return the result in a newly allocated
-   buffer.  It is the caller's responsibility to free the result.  */
+   buffer.  It is the caller's responsibility to free the result.  The
+   result will not contain embedded null bytes.  */
 char *quotearg_alloc (char const *arg, size_t argsize,
-		      struct quoting_options const *o);
+                      struct quoting_options const *o);
+
+/* Like quotearg_alloc, except that the length of the result,
+   excluding the terminating null byte, is stored into SIZE if it is
+   non-NULL.  The result might contain embedded null bytes if ARGSIZE
+   was not -1, SIZE was not NULL, the style of O does not use
+   backslash escapes, and the flags of O do not request elision of
+   null bytes.*/
+char *quotearg_alloc_mem (char const *arg, size_t argsize,
+                          size_t *size, struct quoting_options const *o);
 
 /* Use storage slot N to return a quoted version of the string ARG.
    Use the default quoting options.
    The returned value points to static storage that can be
    reused by the next call to this function with the same value of N.
-   N must be nonnegative.  */
+   N must be nonnegative.  The output of all functions in the
+   quotearg_n family are guaranteed to not contain embedded null
+   bytes.*/
 char *quotearg_n (int n, char const *arg);
 
 /* Equivalent to quotearg_n (0, ARG).  */
 char *quotearg (char const *arg);
 
+/* Use storage slot N to return a quoted version of the argument ARG
+   of size ARGSIZE.  This is like quotearg_n (N, ARG), except it can
+   quote null bytes.  */
+char *quotearg_n_mem (int n, char const *arg, size_t argsize);
+
+/* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE).  */
+char *quotearg_mem (char const *arg, size_t argsize);
+
 /* Use style S and storage slot N to return a quoted version of the string ARG.
    This is like quotearg_n (N, ARG), except that it uses S with no other
    options to specify the quoting method.  */
@@ -123,15 +340,52 @@
    argument ARG of size ARGSIZE.  This is like quotearg_n_style
    (N, S, ARG), except it can quote null bytes.  */
 char *quotearg_n_style_mem (int n, enum quoting_style s,
-			    char const *arg, size_t argsize);
+                            char const *arg, size_t argsize);
 
 /* Equivalent to quotearg_n_style (0, S, ARG).  */
 char *quotearg_style (enum quoting_style s, char const *arg);
 
-/* Like quotearg (ARG), except also quote any instances of CH.  */
+/* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE).  */
+char *quotearg_style_mem (enum quoting_style s,
+                          char const *arg, size_t argsize);
+
+/* Like quotearg (ARG), except also quote any instances of CH.
+   See set_char_quoting for a description of acceptable CH values.  */
 char *quotearg_char (char const *arg, char ch);
 
+/* Like quotearg_char (ARG, CH), except it can quote null bytes.  */
+char *quotearg_char_mem (char const *arg, size_t argsize, char ch);
+
 /* Equivalent to quotearg_char (ARG, ':').  */
 char *quotearg_colon (char const *arg);
 
+/* Like quotearg_colon (ARG), except it can quote null bytes.  */
+char *quotearg_colon_mem (char const *arg, size_t argsize);
+
+/* Like quotearg_n_style (N, S, ARG) but with S as custom_quoting_style
+   with left quote as LEFT_QUOTE and right quote as RIGHT_QUOTE.  See
+   set_custom_quoting for a description of acceptable LEFT_QUOTE and
+   RIGHT_QUOTE values.  */
+char *quotearg_n_custom (int n, char const *left_quote,
+                         char const *right_quote, char const *arg);
+
+/* Like quotearg_n_custom (N, LEFT_QUOTE, RIGHT_QUOTE, ARG) except it
+   can quote null bytes.  */
+char *quotearg_n_custom_mem (int n, char const *left_quote,
+                             char const *right_quote,
+                             char const *arg, size_t argsize);
+
+/* Equivalent to quotearg_n_custom (0, LEFT_QUOTE, RIGHT_QUOTE, ARG).  */
+char *quotearg_custom (char const *left_quote, char const *right_quote,
+                       char const *arg);
+
+/* Equivalent to quotearg_n_custom_mem (0, LEFT_QUOTE, RIGHT_QUOTE, ARG,
+                                        ARGSIZE).  */
+char *quotearg_custom_mem (char const *left_quote,
+                           char const *right_quote,
+                           char const *arg, size_t argsize);
+
+/* Free any dynamically allocated memory.  */
+void quotearg_free (void);
+
 #endif /* !QUOTEARG_H_ */
diff --git a/lib/raise.c b/lib/raise.c
new file mode 100644
index 0000000..f975dcd
--- /dev/null
+++ b/lib/raise.c
@@ -0,0 +1,79 @@
+/* Provide a non-threads replacement for the POSIX raise function.
+
+   Copyright (C) 2002-2003, 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#include <config.h>
+
+/* Specification.  */
+#include <signal.h>
+
+#if HAVE_RAISE
+/* Native Windows platform.  */
+
+# include <errno.h>
+
+# include "msvc-inval.h"
+
+# undef raise
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+raise_nothrow (int sig)
+{
+  int result;
+
+  TRY_MSVC_INVAL
+    {
+      result = raise (sig);
+    }
+  CATCH_MSVC_INVAL
+    {
+      result = -1;
+      errno = EINVAL;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+# else
+#  define raise_nothrow raise
+# endif
+
+#else
+/* An old Unix platform.  */
+
+# include <unistd.h>
+
+# define rpl_raise raise
+
+#endif
+
+int
+rpl_raise (int sig)
+{
+#if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE
+  if (sig == SIGPIPE)
+    return _gl_raise_SIGPIPE ();
+#endif
+
+#if HAVE_RAISE
+  return raise_nothrow (sig);
+#else
+  return kill (getpid (), sig);
+#endif
+}
diff --git a/lib/rawmemchr.c b/lib/rawmemchr.c
new file mode 100644
index 0000000..c94a0e1
--- /dev/null
+++ b/lib/rawmemchr.c
@@ -0,0 +1,136 @@
+/* Searching in a string.
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+/* Find the first occurrence of C in S.  */
+void *
+rawmemchr (const void *s, int c_in)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned char c;
+
+  c = (unsigned char) c_in;
+
+  /* Handle the first few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       (size_t) char_ptr % sizeof (longword) != 0;
+       ++char_ptr)
+    if (*char_ptr == c)
+      return (void *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will
+     test a longword at a time.  The tricky part is testing if *any of
+     the four* bytes in the longword in question are equal to NUL or
+     c.  We first use an xor with repeated_c.  This reduces the task
+     to testing whether *any of the four* bytes in longword1 is zero.
+
+     We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     The test whether any byte in longword1 is zero is equivalent
+     to testing whether tmp is nonzero.
+
+     This test can read beyond the end of a string, depending on where
+     C_IN is encountered.  However, this is considered safe since the
+     initialization phase ensured that the read will be aligned,
+     therefore, the read will not cross page boundaries and will not
+     cause a fault.  */
+
+  while (1)
+    {
+      longword longword1 = *longword_ptr ^ repeated_c;
+
+      if ((((longword1 - repeated_one) & ~longword1)
+           & (repeated_one << 7)) != 0)
+        break;
+      longword_ptr++;
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that one of the sizeof (longword) bytes
+     starting at char_ptr is == c.  On little-endian machines, we
+     could determine the first such byte without any further memory
+     accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.
+     Choose code that works in both cases.  */
+
+  char_ptr = (unsigned char *) longword_ptr;
+  while (*char_ptr != c)
+    char_ptr++;
+  return (void *) char_ptr;
+}
diff --git a/lib/rawmemchr.valgrind b/lib/rawmemchr.valgrind
new file mode 100644
index 0000000..6363923
--- /dev/null
+++ b/lib/rawmemchr.valgrind
@@ -0,0 +1,12 @@
+# Suppress a valgrind message about use of uninitialized memory in rawmemchr().
+# This use is OK because it provides only a speedup.
+{
+    rawmemchr-value4
+    Memcheck:Value4
+    fun:rawmemchr
+}
+{
+    rawmemchr-value8
+    Memcheck:Value8
+    fun:rawmemchr
+}
diff --git a/lib/realloc.c b/lib/realloc.c
new file mode 100644
index 0000000..99556cc
--- /dev/null
+++ b/lib/realloc.c
@@ -0,0 +1,79 @@
+/* realloc() function that is glibc compatible.
+
+   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+
+/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h.  */
+#ifdef realloc
+# define NEED_REALLOC_GNU 1
+/* Whereas the gnulib module 'realloc-gnu' defines HAVE_REALLOC_GNU.  */
+#elif GNULIB_REALLOC_GNU && !HAVE_REALLOC_GNU
+# define NEED_REALLOC_GNU 1
+#endif
+
+/* Infer the properties of the system's malloc function.
+   The gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU.  */
+#if GNULIB_MALLOC_GNU && HAVE_MALLOC_GNU
+# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1
+#endif
+
+#include <stdlib.h>
+
+#include <errno.h>
+
+/* Change the size of an allocated block of memory P to N bytes,
+   with error checking.  If N is zero, change it to 1.  If P is NULL,
+   use malloc.  */
+
+void *
+rpl_realloc (void *p, size_t n)
+{
+  void *result;
+
+#if NEED_REALLOC_GNU
+  if (n == 0)
+    {
+      n = 1;
+
+      /* In theory realloc might fail, so don't rely on it to free.  */
+      free (p);
+      p = NULL;
+    }
+#endif
+
+  if (p == NULL)
+    {
+#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE
+      if (n == 0)
+        n = 1;
+#endif
+      result = malloc (n);
+    }
+  else
+    result = realloc (p, n);
+
+#if !HAVE_REALLOC_POSIX
+  if (result == NULL)
+    errno = ENOMEM;
+#endif
+
+  return result;
+}
diff --git a/lib/ref-add.sin b/lib/ref-add.sin
new file mode 100644
index 0000000..4ec043f
--- /dev/null
+++ b/lib/ref-add.sin
@@ -0,0 +1,29 @@
+# Add this package to a list of references stored in a text file.
+#
+#   Copyright (C) 2000, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  ta
+  :a
+  s/ @PACKAGE@ / @PACKAGE@ /
+  tb
+  s/ $/ @PACKAGE@ /
+  :b
+  s/^/# Packages using this file:/
+}
diff --git a/lib/ref-del.sin b/lib/ref-del.sin
new file mode 100644
index 0000000..eb03881
--- /dev/null
+++ b/lib/ref-del.sin
@@ -0,0 +1,24 @@
+# Remove this package from a list of references stored in a text file.
+#
+#   Copyright (C) 2000, 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  s/ @PACKAGE@ / /
+  s/^/# Packages using this file:/
+}
diff --git a/lib/sched.in.h b/lib/sched.in.h
new file mode 100644
index 0000000..3955f07
--- /dev/null
+++ b/lib/sched.in.h
@@ -0,0 +1,57 @@
+/* Replacement <sched.h> for platforms that lack it.
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_SCHED_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_SCHED_H@
+# @INCLUDE_NEXT@ @NEXT_SCHED_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_SCHED_H
+#define _@GUARD_PREFIX@_SCHED_H
+
+/* Get pid_t.
+   This is needed on glibc 2.11 (see
+   glibc bug <http://sourceware.org/bugzilla/show_bug.cgi?id=13198>)
+   and Mac OS X 10.5.  */
+#include <sys/types.h>
+
+#if !@HAVE_STRUCT_SCHED_PARAM@
+
+# if !GNULIB_defined_struct_sched_param
+struct sched_param
+{
+  int sched_priority;
+};
+#  define GNULIB_defined_struct_sched_param 1
+# endif
+
+#endif
+
+#if !(defined SCHED_FIFO && defined SCHED_RR && defined SCHED_OTHER)
+# define SCHED_FIFO   1
+# define SCHED_RR     2
+# define SCHED_OTHER  0
+#endif
+
+#endif /* _@GUARD_PREFIX@_SCHED_H */
+#endif /* _@GUARD_PREFIX@_SCHED_H */
diff --git a/lib/sig-handler.c b/lib/sig-handler.c
new file mode 100644
index 0000000..52c3621
--- /dev/null
+++ b/lib/sig-handler.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define SIG_HANDLER_INLINE _GL_EXTERN_INLINE
+#include "sig-handler.h"
diff --git a/lib/sig-handler.h b/lib/sig-handler.h
new file mode 100644
index 0000000..5bba138
--- /dev/null
+++ b/lib/sig-handler.h
@@ -0,0 +1,51 @@
+/* Convenience declarations when working with <signal.h>.
+
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_SIG_HANDLER_H
+#define _GL_SIG_HANDLER_H
+
+#include <signal.h>
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef SIG_HANDLER_INLINE
+# define SIG_HANDLER_INLINE _GL_INLINE
+#endif
+
+/* Convenience type when working with signal handlers.  */
+typedef void (*sa_handler_t) (int);
+
+/* Return the handler of a signal, as a sa_handler_t value regardless
+   of its true type.  The resulting function can be compared to
+   special values like SIG_IGN but it is not portable to call it.  */
+SIG_HANDLER_INLINE sa_handler_t
+get_handler (struct sigaction const *a)
+{
+#ifdef SA_SIGINFO
+  /* POSIX says that special values like SIG_IGN can only occur when
+     action.sa_flags does not contain SA_SIGINFO.  But in Linux 2.4,
+     for example, sa_sigaction and sa_handler are aliases and a signal
+     is ignored if sa_sigaction (after casting) equals SIG_IGN.  So
+     use (and cast) sa_sigaction in that case.  */
+  if (a->sa_flags & SA_SIGINFO)
+    return (sa_handler_t) a->sa_sigaction;
+#endif
+  return a->sa_handler;
+}
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_SIG_HANDLER_H */
diff --git a/lib/sigaction.c b/lib/sigaction.c
new file mode 100644
index 0000000..659c4ec
--- /dev/null
+++ b/lib/sigaction.c
@@ -0,0 +1,204 @@
+/* POSIX compatible signal blocking.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Written by Eric Blake <ebb9@byu.net>, 2008.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <signal.h>
+
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/* This implementation of sigaction is tailored to native Windows behavior:
+   signal() has SysV semantics (ie. the handler is uninstalled before
+   it is invoked).  This is an inherent data race if an asynchronous
+   signal is sent twice in a row before we can reinstall our handler,
+   but there's nothing we can do about it.  Meanwhile, sigprocmask()
+   is not present, and while we can use the gnulib replacement to
+   provide critical sections, it too suffers from potential data races
+   in the face of an ill-timed asynchronous signal.  And we compound
+   the situation by reading static storage in a signal handler, which
+   POSIX warns is not generically async-signal-safe.  Oh well.
+
+   Additionally:
+     - We don't implement SA_NOCLDSTOP or SA_NOCLDWAIT, because SIGCHLD
+       is not defined.
+     - We don't implement SA_ONSTACK, because sigaltstack() is not present.
+     - We ignore SA_RESTART, because blocking native Windows API calls are
+       not interrupted anyway when an asynchronous signal occurs, and the
+       MSVCRT runtime never sets errno to EINTR.
+     - We don't implement SA_SIGINFO because it is impossible to do so
+       portably.
+
+   POSIX states that an application should not mix signal() and
+   sigaction().  We support the use of signal() within the gnulib
+   sigprocmask() substitute, but all other application code linked
+   with this module should stick with only sigaction().  */
+
+/* Check some of our assumptions.  */
+#if defined SIGCHLD || defined HAVE_SIGALTSTACK || defined HAVE_SIGINTERRUPT
+# error "Revisit the assumptions made in the sigaction module"
+#endif
+
+/* Out-of-range substitutes make a good fallback for uncatchable
+   signals.  */
+#ifndef SIGKILL
+# define SIGKILL (-1)
+#endif
+#ifndef SIGSTOP
+# define SIGSTOP (-1)
+#endif
+
+/* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias
+   for the signal SIGABRT.  Only one signal handler is stored for both
+   SIGABRT and SIGABRT_COMPAT.  SIGABRT_COMPAT is not a signal of its own.  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# undef SIGABRT_COMPAT
+# define SIGABRT_COMPAT 6
+#endif
+
+/* A signal handler.  */
+typedef void (*handler_t) (int signal);
+
+/* Set of current actions.  If sa_handler for an entry is NULL, then
+   that signal is not currently handled by the sigaction handler.  */
+static struct sigaction volatile action_array[NSIG] /* = 0 */;
+
+/* Signal handler that is installed for signals.  */
+static void
+sigaction_handler (int sig)
+{
+  handler_t handler;
+  sigset_t mask;
+  sigset_t oldmask;
+  int saved_errno = errno;
+  if (sig < 0 || NSIG <= sig || !action_array[sig].sa_handler)
+    {
+      /* Unexpected situation; be careful to avoid recursive abort.  */
+      if (sig == SIGABRT)
+        signal (SIGABRT, SIG_DFL);
+      abort ();
+    }
+
+  /* Reinstall the signal handler when required; otherwise update the
+     bookkeeping so that the user's handler may call sigaction and get
+     accurate results.  We know the signal isn't currently blocked, or
+     we wouldn't be in its handler, therefore we know that we are not
+     interrupting a sigaction() call.  There is a race where any
+     asynchronous instance of the same signal occurring before we
+     reinstall the handler will trigger the default handler; oh
+     well.  */
+  handler = action_array[sig].sa_handler;
+  if ((action_array[sig].sa_flags & SA_RESETHAND) == 0)
+    signal (sig, sigaction_handler);
+  else
+    action_array[sig].sa_handler = NULL;
+
+  /* Block appropriate signals.  */
+  mask = action_array[sig].sa_mask;
+  if ((action_array[sig].sa_flags & SA_NODEFER) == 0)
+    sigaddset (&mask, sig);
+  sigprocmask (SIG_BLOCK, &mask, &oldmask);
+
+  /* Invoke the user's handler, then restore prior mask.  */
+  errno = saved_errno;
+  handler (sig);
+  saved_errno = errno;
+  sigprocmask (SIG_SETMASK, &oldmask, NULL);
+  errno = saved_errno;
+}
+
+/* Change and/or query the action that will be taken on delivery of
+   signal SIG.  If not NULL, ACT describes the new behavior.  If not
+   NULL, OACT is set to the prior behavior.  Return 0 on success, or
+   set errno and return -1 on failure.  */
+int
+sigaction (int sig, const struct sigaction *restrict act,
+           struct sigaction *restrict oact)
+{
+  sigset_t mask;
+  sigset_t oldmask;
+  int saved_errno;
+
+  if (sig < 0 || NSIG <= sig || sig == SIGKILL || sig == SIGSTOP
+      || (act && act->sa_handler == SIG_ERR))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+#ifdef SIGABRT_COMPAT
+  if (sig == SIGABRT_COMPAT)
+    sig = SIGABRT;
+#endif
+
+  /* POSIX requires sigaction() to be async-signal-safe.  In other
+     words, if an asynchronous signal can occur while we are anywhere
+     inside this function, the user's handler could then call
+     sigaction() recursively and expect consistent results.  We meet
+     this rule by using sigprocmask to block all signals before
+     modifying any data structure that could be read from a signal
+     handler; this works since we know that the gnulib sigprocmask
+     replacement does not try to use sigaction() from its handler.  */
+  if (!act && !oact)
+    return 0;
+  sigfillset (&mask);
+  sigprocmask (SIG_BLOCK, &mask, &oldmask);
+  if (oact)
+    {
+      if (action_array[sig].sa_handler)
+        *oact = action_array[sig];
+      else
+        {
+          /* Safe to change the handler at will here, since all
+             signals are currently blocked.  */
+          oact->sa_handler = signal (sig, SIG_DFL);
+          if (oact->sa_handler == SIG_ERR)
+            goto failure;
+          signal (sig, oact->sa_handler);
+          oact->sa_flags = SA_RESETHAND | SA_NODEFER;
+          sigemptyset (&oact->sa_mask);
+        }
+    }
+
+  if (act)
+    {
+      /* Safe to install the handler before updating action_array,
+         since all signals are currently blocked.  */
+      if (act->sa_handler == SIG_DFL || act->sa_handler == SIG_IGN)
+        {
+          if (signal (sig, act->sa_handler) == SIG_ERR)
+            goto failure;
+          action_array[sig].sa_handler = NULL;
+        }
+      else
+        {
+          if (signal (sig, sigaction_handler) == SIG_ERR)
+            goto failure;
+          action_array[sig] = *act;
+        }
+    }
+  sigprocmask (SIG_SETMASK, &oldmask, NULL);
+  return 0;
+
+ failure:
+  saved_errno = errno;
+  sigprocmask (SIG_SETMASK, &oldmask, NULL);
+  errno = saved_errno;
+  return -1;
+}
diff --git a/lib/signal.in.h b/lib/signal.in.h
new file mode 100644
index 0000000..8fb1ad1
--- /dev/null
+++ b/lib/signal.in.h
@@ -0,0 +1,447 @@
+/* A GNU-like <signal.h>.
+
+   Copyright (C) 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T)
+/* Special invocation convention:
+   - Inside glibc header files.
+   - On glibc systems we have a sequence of nested includes
+     <signal.h> -> <ucontext.h> -> <signal.h>.
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.
+   - On glibc systems with GCC 4.3 we have a sequence of nested includes
+     <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>.
+     In this situation, some of the functions are not yet declared, therefore
+     we cannot provide the C++ aliases.  */
+
+# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_SIGNAL_H
+
+#define _GL_ALREADY_INCLUDING_SIGNAL_H
+
+/* Define pid_t, uid_t.
+   Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.
+   On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes
+   us; so include <sys/types.h> now, before the second inclusion guard.  */
+#include <sys/types.h>
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@
+
+#undef _GL_ALREADY_INCLUDING_SIGNAL_H
+
+#ifndef _@GUARD_PREFIX@_SIGNAL_H
+#define _@GUARD_PREFIX@_SIGNAL_H
+
+/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 declare
+   pthread_sigmask in <pthread.h>, not in <signal.h>.
+   But avoid namespace pollution on glibc systems.*/
+#if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \
+    && ((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ || defined __sun) \
+    && ! defined __GLIBC__
+# include <pthread.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* On AIX, sig_atomic_t already includes volatile.  C99 requires that
+   'volatile sig_atomic_t' ignore the extra modifier, but C89 did not.
+   Hence, redefine this to a non-volatile type as needed.  */
+#if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+# if !GNULIB_defined_sig_atomic_t
+typedef int rpl_sig_atomic_t;
+#  undef sig_atomic_t
+#  define sig_atomic_t rpl_sig_atomic_t
+#  define GNULIB_defined_sig_atomic_t 1
+# endif
+#endif
+
+/* A set or mask of signals.  */
+#if !@HAVE_SIGSET_T@
+# if !GNULIB_defined_sigset_t
+typedef unsigned int sigset_t;
+#  define GNULIB_defined_sigset_t 1
+# endif
+#endif
+
+/* Define sighandler_t, the type of signal handlers.  A GNU extension.  */
+#if !@HAVE_SIGHANDLER_T@
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_sighandler_t
+typedef void (*sighandler_t) (int);
+#  define GNULIB_defined_sighandler_t 1
+# endif
+# ifdef __cplusplus
+}
+# endif
+#endif
+
+
+#if @GNULIB_SIGNAL_H_SIGPIPE@
+# ifndef SIGPIPE
+/* Define SIGPIPE to a value that does not overlap with other signals.  */
+#  define SIGPIPE 13
+#  define GNULIB_defined_SIGPIPE 1
+/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask',
+   'write', 'stdio'.  */
+# endif
+#endif
+
+
+/* Maximum signal number + 1.  */
+#ifndef NSIG
+# if defined __TANDEM
+#  define NSIG 32
+# endif
+#endif
+
+
+#if @GNULIB_PTHREAD_SIGMASK@
+# if @REPLACE_PTHREAD_SIGMASK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pthread_sigmask
+#   define pthread_sigmask rpl_pthread_sigmask
+#  endif
+_GL_FUNCDECL_RPL (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+_GL_CXXALIAS_RPL (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+# else
+#  if !@HAVE_PTHREAD_SIGMASK@
+_GL_FUNCDECL_SYS (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+#  endif
+_GL_CXXALIAS_SYS (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+# endif
+_GL_CXXALIASWARN (pthread_sigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef pthread_sigmask
+# if HAVE_RAW_DECL_PTHREAD_SIGMASK
+_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - "
+                 "use gnulib module pthread_sigmask for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RAISE@
+# if @REPLACE_RAISE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef raise
+#   define raise rpl_raise
+#  endif
+_GL_FUNCDECL_RPL (raise, int, (int sig));
+_GL_CXXALIAS_RPL (raise, int, (int sig));
+# else
+#  if !@HAVE_RAISE@
+_GL_FUNCDECL_SYS (raise, int, (int sig));
+#  endif
+_GL_CXXALIAS_SYS (raise, int, (int sig));
+# endif
+_GL_CXXALIASWARN (raise);
+#elif defined GNULIB_POSIXCHECK
+# undef raise
+/* Assume raise is always declared.  */
+_GL_WARN_ON_USE (raise, "raise can crash on native Windows - "
+                 "use gnulib module raise for portability");
+#endif
+
+
+#if @GNULIB_SIGPROCMASK@
+# if !@HAVE_POSIX_SIGNALBLOCKING@
+
+#  ifndef GNULIB_defined_signal_blocking
+#   define GNULIB_defined_signal_blocking 1
+#  endif
+
+/* Maximum signal number + 1.  */
+#  ifndef NSIG
+#   define NSIG 32
+#  endif
+
+/* This code supports only 32 signals.  */
+#  if !GNULIB_defined_verify_NSIG_constraint
+typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1];
+#   define GNULIB_defined_verify_NSIG_constraint 1
+#  endif
+
+# endif
+
+/* Test whether a given signal is contained in a signal set.  */
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigismember
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig)
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigismember);
+
+/* Initialize a signal set to the empty set.  */
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigemptyset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigemptyset);
+
+/* Add a signal to a signal set.  */
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigaddset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig)
+                                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigaddset);
+
+/* Remove a signal from a signal set.  */
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigdelset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig)
+                                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigdelset);
+
+/* Fill a signal set with all possible signals.  */
+# if @HAVE_POSIX_SIGNALBLOCKING@
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigfillset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigfillset);
+
+/* Return the set of those blocked signals that are pending.  */
+# if !@HAVE_POSIX_SIGNALBLOCKING@
+_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigpending);
+
+/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET.
+   Then, if SET is not NULL, affect the current set of blocked signals by
+   combining it with *SET as indicated in OPERATION.
+   In this implementation, you are not allowed to change a signal handler
+   while the signal is blocked.  */
+# if !@HAVE_POSIX_SIGNALBLOCKING@
+#  define SIG_BLOCK   0  /* blocked_set = blocked_set | *set; */
+#  define SIG_SETMASK 1  /* blocked_set = *set; */
+#  define SIG_UNBLOCK 2  /* blocked_set = blocked_set & ~*set; */
+_GL_FUNCDECL_SYS (sigprocmask, int,
+                  (int operation, const sigset_t *set, sigset_t *old_set));
+# endif
+_GL_CXXALIAS_SYS (sigprocmask, int,
+                  (int operation, const sigset_t *set, sigset_t *old_set));
+_GL_CXXALIASWARN (sigprocmask);
+
+/* Install the handler FUNC for signal SIG, and return the previous
+   handler.  */
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_function_taking_int_returning_void_t
+typedef void (*_gl_function_taking_int_returning_void_t) (int);
+#  define GNULIB_defined_function_taking_int_returning_void_t 1
+# endif
+# ifdef __cplusplus
+}
+# endif
+# if !@HAVE_POSIX_SIGNALBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define signal rpl_signal
+#  endif
+_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+# else
+_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+# endif
+_GL_CXXALIASWARN (signal);
+
+# if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE
+/* Raise signal SIGPIPE.  */
+_GL_EXTERN_C int _gl_raise_SIGPIPE (void);
+# endif
+
+#elif defined GNULIB_POSIXCHECK
+# undef sigaddset
+# if HAVE_RAW_DECL_SIGADDSET
+_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigdelset
+# if HAVE_RAW_DECL_SIGDELSET
+_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigemptyset
+# if HAVE_RAW_DECL_SIGEMPTYSET
+_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigfillset
+# if HAVE_RAW_DECL_SIGFILLSET
+_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigismember
+# if HAVE_RAW_DECL_SIGISMEMBER
+_GL_WARN_ON_USE (sigismember, "sigismember is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigpending
+# if HAVE_RAW_DECL_SIGPENDING
+_GL_WARN_ON_USE (sigpending, "sigpending is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigprocmask
+# if HAVE_RAW_DECL_SIGPROCMASK
+_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+#endif /* @GNULIB_SIGPROCMASK@ */
+
+
+#if @GNULIB_SIGACTION@
+# if !@HAVE_SIGACTION@
+
+#  if !@HAVE_SIGINFO_T@
+
+#   if !GNULIB_defined_siginfo_types
+
+/* Present to allow compilation, but unsupported by gnulib.  */
+union sigval
+{
+  int sival_int;
+  void *sival_ptr;
+};
+
+/* Present to allow compilation, but unsupported by gnulib.  */
+struct siginfo_t
+{
+  int si_signo;
+  int si_code;
+  int si_errno;
+  pid_t si_pid;
+  uid_t si_uid;
+  void *si_addr;
+  int si_status;
+  long si_band;
+  union sigval si_value;
+};
+typedef struct siginfo_t siginfo_t;
+
+#    define GNULIB_defined_siginfo_types 1
+#   endif
+
+#  endif /* !@HAVE_SIGINFO_T@ */
+
+/* We assume that platforms which lack the sigaction() function also lack
+   the 'struct sigaction' type, and vice versa.  */
+
+#  if !GNULIB_defined_struct_sigaction
+
+struct sigaction
+{
+  union
+  {
+    void (*_sa_handler) (int);
+    /* Present to allow compilation, but unsupported by gnulib.  POSIX
+       says that implementations may, but not must, make sa_sigaction
+       overlap with sa_handler, but we know of no implementation where
+       they do not overlap.  */
+    void (*_sa_sigaction) (int, siginfo_t *, void *);
+  } _sa_func;
+  sigset_t sa_mask;
+  /* Not all POSIX flags are supported.  */
+  int sa_flags;
+};
+#   define sa_handler _sa_func._sa_handler
+#   define sa_sigaction _sa_func._sa_sigaction
+/* Unsupported flags are not present.  */
+#   define SA_RESETHAND 1
+#   define SA_NODEFER 2
+#   define SA_RESTART 4
+
+#   define GNULIB_defined_struct_sigaction 1
+#  endif
+
+_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict,
+                                   struct sigaction *restrict));
+
+# elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+
+#  define sa_sigaction sa_handler
+
+# endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */
+
+_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict,
+                                   struct sigaction *restrict));
+_GL_CXXALIASWARN (sigaction);
+
+#elif defined GNULIB_POSIXCHECK
+# undef sigaction
+# if HAVE_RAW_DECL_SIGACTION
+_GL_WARN_ON_USE (sigaction, "sigaction is unportable - "
+                 "use the gnulib module sigaction for portability");
+# endif
+#endif
+
+/* Some systems don't have SA_NODEFER.  */
+#ifndef SA_NODEFER
+# define SA_NODEFER 0
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_SIGNAL_H */
+#endif /* _@GUARD_PREFIX@_SIGNAL_H */
+#endif
diff --git a/lib/signbitd.c b/lib/signbitd.c
new file mode 100644
index 0000000..7629ff5
--- /dev/null
+++ b/lib/signbitd.c
@@ -0,0 +1,64 @@
+/* signbit() macro: Determine the sign bit of a floating-point number.
+   Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
+#include <string.h>
+#include "isnand-nolibm.h"
+#include "float+.h"
+
+#ifdef gl_signbitd_OPTIMIZED_MACRO
+# undef gl_signbitd
+#endif
+
+int
+gl_signbitd (double arg)
+{
+#if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT
+  /* The use of a union to extract the bits of the representation of a
+     'long double' is safe in practice, despite of the "aliasing rules" of
+     C99, because the GCC docs say
+       "Even with '-fstrict-aliasing', type-punning is allowed, provided the
+        memory is accessed through the union type."
+     and similarly for other compilers.  */
+# define NWORDS \
+    ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+  union { double value; unsigned int word[NWORDS]; } m;
+  m.value = arg;
+  return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;
+#elif HAVE_COPYSIGN_IN_LIBC
+  return copysign (1.0, arg) < 0;
+#else
+  /* This does not do the right thing for NaN, but this is irrelevant for
+     most use cases.  */
+  if (isnand (arg))
+    return 0;
+  if (arg < 0.0)
+    return 1;
+  else if (arg == 0.0)
+    {
+      /* Distinguish 0.0 and -0.0.  */
+      static double plus_zero = 0.0;
+      double arg_mem = arg;
+      return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0);
+    }
+  else
+    return 0;
+#endif
+}
diff --git a/lib/signbitf.c b/lib/signbitf.c
new file mode 100644
index 0000000..f99f992
--- /dev/null
+++ b/lib/signbitf.c
@@ -0,0 +1,64 @@
+/* signbit() macro: Determine the sign bit of a floating-point number.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
+#include <string.h>
+#include "isnanf-nolibm.h"
+#include "float+.h"
+
+#ifdef gl_signbitf_OPTIMIZED_MACRO
+# undef gl_signbitf
+#endif
+
+int
+gl_signbitf (float arg)
+{
+#if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT
+  /* The use of a union to extract the bits of the representation of a
+     'long double' is safe in practice, despite of the "aliasing rules" of
+     C99, because the GCC docs say
+       "Even with '-fstrict-aliasing', type-punning is allowed, provided the
+        memory is accessed through the union type."
+     and similarly for other compilers.  */
+# define NWORDS \
+    ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+  union { float value; unsigned int word[NWORDS]; } m;
+  m.value = arg;
+  return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;
+#elif HAVE_COPYSIGNF_IN_LIBC
+  return copysignf (1.0f, arg) < 0;
+#else
+  /* This does not do the right thing for NaN, but this is irrelevant for
+     most use cases.  */
+  if (isnanf (arg))
+    return 0;
+  if (arg < 0.0f)
+    return 1;
+  else if (arg == 0.0f)
+    {
+      /* Distinguish 0.0f and -0.0f.  */
+      static float plus_zero = 0.0f;
+      float arg_mem = arg;
+      return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0);
+    }
+  else
+    return 0;
+#endif
+}
diff --git a/lib/signbitl.c b/lib/signbitl.c
new file mode 100644
index 0000000..35afcf1
--- /dev/null
+++ b/lib/signbitl.c
@@ -0,0 +1,64 @@
+/* signbit() macro: Determine the sign bit of a floating-point number.
+   Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
+#include <string.h>
+#include "isnanl-nolibm.h"
+#include "float+.h"
+
+#ifdef gl_signbitl_OPTIMIZED_MACRO
+# undef gl_signbitl
+#endif
+
+int
+gl_signbitl (long double arg)
+{
+#if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT
+  /* The use of a union to extract the bits of the representation of a
+     'long double' is safe in practice, despite of the "aliasing rules" of
+     C99, because the GCC docs say
+       "Even with '-fstrict-aliasing', type-punning is allowed, provided the
+        memory is accessed through the union type."
+     and similarly for other compilers.  */
+# define NWORDS \
+    ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+  union { long double value; unsigned int word[NWORDS]; } m;
+  m.value = arg;
+  return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;
+#elif HAVE_COPYSIGNL_IN_LIBC
+  return copysignl (1.0L, arg) < 0;
+#else
+  /* This does not do the right thing for NaN, but this is irrelevant for
+     most use cases.  */
+  if (isnanl (arg))
+    return 0;
+  if (arg < 0.0L)
+    return 1;
+  else if (arg == 0.0L)
+    {
+      /* Distinguish 0.0L and -0.0L.  */
+      static long double plus_zero = 0.0L;
+      long double arg_mem = arg;
+      return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0);
+    }
+  else
+    return 0;
+#endif
+}
diff --git a/lib/sigprocmask.c b/lib/sigprocmask.c
new file mode 100644
index 0000000..aff3b29
--- /dev/null
+++ b/lib/sigprocmask.c
@@ -0,0 +1,349 @@
+/* POSIX compatible signal blocking.
+   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2006.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <signal.h>
+
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
+
+/* We assume that a platform without POSIX signal blocking functions
+   also does not have the POSIX sigaction() function, only the
+   signal() function.  We also assume signal() has SysV semantics,
+   where any handler is uninstalled prior to being invoked.  This is
+   true for native Windows platforms.  */
+
+/* We use raw signal(), but also provide a wrapper rpl_signal() so
+   that applications can query or change a blocked signal.  */
+#undef signal
+
+/* Provide invalid signal numbers as fallbacks if the uncatchable
+   signals are not defined.  */
+#ifndef SIGKILL
+# define SIGKILL (-1)
+#endif
+#ifndef SIGSTOP
+# define SIGSTOP (-1)
+#endif
+
+/* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias
+   for the signal SIGABRT.  Only one signal handler is stored for both
+   SIGABRT and SIGABRT_COMPAT.  SIGABRT_COMPAT is not a signal of its own.  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# undef SIGABRT_COMPAT
+# define SIGABRT_COMPAT 6
+#endif
+#ifdef SIGABRT_COMPAT
+# define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT)
+#else
+# define SIGABRT_COMPAT_MASK 0
+#endif
+
+typedef void (*handler_t) (int);
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static handler_t
+signal_nothrow (int sig, handler_t handler)
+{
+  handler_t result;
+
+  TRY_MSVC_INVAL
+    {
+      result = signal (sig, handler);
+    }
+  CATCH_MSVC_INVAL
+    {
+      result = SIG_ERR;
+      errno = EINVAL;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+# define signal signal_nothrow
+#endif
+
+/* Handling of gnulib defined signals.  */
+
+#if GNULIB_defined_SIGPIPE
+static handler_t SIGPIPE_handler = SIG_DFL;
+#endif
+
+#if GNULIB_defined_SIGPIPE
+static handler_t
+ext_signal (int sig, handler_t handler)
+{
+  switch (sig)
+    {
+    case SIGPIPE:
+      {
+        handler_t old_handler = SIGPIPE_handler;
+        SIGPIPE_handler = handler;
+        return old_handler;
+      }
+    default: /* System defined signal */
+      return signal (sig, handler);
+    }
+}
+# undef signal
+# define signal ext_signal
+#endif
+
+int
+sigismember (const sigset_t *set, int sig)
+{
+  if (sig >= 0 && sig < NSIG)
+    {
+      #ifdef SIGABRT_COMPAT
+      if (sig == SIGABRT_COMPAT)
+        sig = SIGABRT;
+      #endif
+
+      return (*set >> sig) & 1;
+    }
+  else
+    return 0;
+}
+
+int
+sigemptyset (sigset_t *set)
+{
+  *set = 0;
+  return 0;
+}
+
+int
+sigaddset (sigset_t *set, int sig)
+{
+  if (sig >= 0 && sig < NSIG)
+    {
+      #ifdef SIGABRT_COMPAT
+      if (sig == SIGABRT_COMPAT)
+        sig = SIGABRT;
+      #endif
+
+      *set |= 1U << sig;
+      return 0;
+    }
+  else
+    {
+      errno = EINVAL;
+      return -1;
+    }
+}
+
+int
+sigdelset (sigset_t *set, int sig)
+{
+  if (sig >= 0 && sig < NSIG)
+    {
+      #ifdef SIGABRT_COMPAT
+      if (sig == SIGABRT_COMPAT)
+        sig = SIGABRT;
+      #endif
+
+      *set &= ~(1U << sig);
+      return 0;
+    }
+  else
+    {
+      errno = EINVAL;
+      return -1;
+    }
+}
+
+
+int
+sigfillset (sigset_t *set)
+{
+  *set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK;
+  return 0;
+}
+
+/* Set of currently blocked signals.  */
+static volatile sigset_t blocked_set /* = 0 */;
+
+/* Set of currently blocked and pending signals.  */
+static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */;
+
+/* Signal handler that is installed for blocked signals.  */
+static void
+blocked_handler (int sig)
+{
+  /* Reinstall the handler, in case the signal occurs multiple times
+     while blocked.  There is an inherent race where an asynchronous
+     signal in between when the kernel uninstalled the handler and
+     when we reinstall it will trigger the default handler; oh
+     well.  */
+  signal (sig, blocked_handler);
+  if (sig >= 0 && sig < NSIG)
+    pending_array[sig] = 1;
+}
+
+int
+sigpending (sigset_t *set)
+{
+  sigset_t pending = 0;
+  int sig;
+
+  for (sig = 0; sig < NSIG; sig++)
+    if (pending_array[sig])
+      pending |= 1U << sig;
+  *set = pending;
+  return 0;
+}
+
+/* The previous signal handlers.
+   Only the array elements corresponding to blocked signals are relevant.  */
+static volatile handler_t old_handlers[NSIG];
+
+int
+sigprocmask (int operation, const sigset_t *set, sigset_t *old_set)
+{
+  if (old_set != NULL)
+    *old_set = blocked_set;
+
+  if (set != NULL)
+    {
+      sigset_t new_blocked_set;
+      sigset_t to_unblock;
+      sigset_t to_block;
+
+      switch (operation)
+        {
+        case SIG_BLOCK:
+          new_blocked_set = blocked_set | *set;
+          break;
+        case SIG_SETMASK:
+          new_blocked_set = *set;
+          break;
+        case SIG_UNBLOCK:
+          new_blocked_set = blocked_set & ~*set;
+          break;
+        default:
+          errno = EINVAL;
+          return -1;
+        }
+      to_unblock = blocked_set & ~new_blocked_set;
+      to_block = new_blocked_set & ~blocked_set;
+
+      if (to_block != 0)
+        {
+          int sig;
+
+          for (sig = 0; sig < NSIG; sig++)
+            if ((to_block >> sig) & 1)
+              {
+                pending_array[sig] = 0;
+                if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR)
+                  blocked_set |= 1U << sig;
+              }
+        }
+
+      if (to_unblock != 0)
+        {
+          sig_atomic_t received[NSIG];
+          int sig;
+
+          for (sig = 0; sig < NSIG; sig++)
+            if ((to_unblock >> sig) & 1)
+              {
+                if (signal (sig, old_handlers[sig]) != blocked_handler)
+                  /* The application changed a signal handler while the signal
+                     was blocked, bypassing our rpl_signal replacement.
+                     We don't support this.  */
+                  abort ();
+                received[sig] = pending_array[sig];
+                blocked_set &= ~(1U << sig);
+                pending_array[sig] = 0;
+              }
+            else
+              received[sig] = 0;
+
+          for (sig = 0; sig < NSIG; sig++)
+            if (received[sig])
+              raise (sig);
+        }
+    }
+  return 0;
+}
+
+/* Install the handler FUNC for signal SIG, and return the previous
+   handler.  */
+handler_t
+rpl_signal (int sig, handler_t handler)
+{
+  /* We must provide a wrapper, so that a user can query what handler
+     they installed even if that signal is currently blocked.  */
+  if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP
+      && handler != SIG_ERR)
+    {
+      #ifdef SIGABRT_COMPAT
+      if (sig == SIGABRT_COMPAT)
+        sig = SIGABRT;
+      #endif
+
+      if (blocked_set & (1U << sig))
+        {
+          /* POSIX states that sigprocmask and signal are both
+             async-signal-safe.  This is not true of our
+             implementation - there is a slight data race where an
+             asynchronous interrupt on signal A can occur after we
+             install blocked_handler but before we have updated
+             old_handlers for signal B, such that handler A can see
+             stale information if it calls signal(B).  Oh well -
+             signal handlers really shouldn't try to manipulate the
+             installed handlers of unrelated signals.  */
+          handler_t result = old_handlers[sig];
+          old_handlers[sig] = handler;
+          return result;
+        }
+      else
+        return signal (sig, handler);
+    }
+  else
+    {
+      errno = EINVAL;
+      return SIG_ERR;
+    }
+}
+
+#if GNULIB_defined_SIGPIPE
+/* Raise the signal SIGPIPE.  */
+int
+_gl_raise_SIGPIPE (void)
+{
+  if (blocked_set & (1U << SIGPIPE))
+    pending_array[SIGPIPE] = 1;
+  else
+    {
+      handler_t handler = SIGPIPE_handler;
+      if (handler == SIG_DFL)
+        exit (128 + SIGPIPE);
+      else if (handler != SIG_IGN)
+        (*handler) (SIGPIPE);
+    }
+  return 0;
+}
+#endif
diff --git a/lib/size_max.h b/lib/size_max.h
new file mode 100644
index 0000000..9642441
--- /dev/null
+++ b/lib/size_max.h
@@ -0,0 +1,30 @@
+/* size_max.h -- declare SIZE_MAX through system headers
+   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Written by Simon Josefsson.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef GNULIB_SIZE_MAX_H
+#define GNULIB_SIZE_MAX_H
+
+/* Get SIZE_MAX declaration on systems like Solaris 7/8/9.  */
+# include <limits.h>
+/* Get SIZE_MAX declaration on systems like glibc 2.  */
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+/* On systems where these include files don't define it, SIZE_MAX is defined
+   in config.h.  */
+
+#endif /* GNULIB_SIZE_MAX_H */
diff --git a/lib/snprintf.c b/lib/snprintf.c
new file mode 100644
index 0000000..3908442
--- /dev/null
+++ b/lib/snprintf.c
@@ -0,0 +1,71 @@
+/* Formatted output to strings.
+   Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+   Written by Simon Josefsson and Paul Eggert.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "vasnprintf.h"
+
+/* Print formatted output to string STR.  Similar to sprintf, but
+   additional length SIZE limit how much is written into STR.  Returns
+   string length of formatted string (which may be larger than SIZE).
+   STR may be NULL, in which case nothing will be written.  On error,
+   return a negative value.  */
+int
+snprintf (char *str, size_t size, const char *format, ...)
+{
+  char *output;
+  size_t len;
+  size_t lenbuf = size;
+  va_list args;
+
+  va_start (args, format);
+  output = vasnprintf (str, &lenbuf, format, args);
+  len = lenbuf;
+  va_end (args);
+
+  if (!output)
+    return -1;
+
+  if (output != str)
+    {
+      if (size)
+        {
+          size_t pruned_len = (len < size ? len : size - 1);
+          memcpy (str, output, pruned_len);
+          str[pruned_len] = '\0';
+        }
+
+      free (output);
+    }
+
+  if (INT_MAX < len)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/spawn-pipe.c b/lib/spawn-pipe.c
new file mode 100644
index 0000000..e163257
--- /dev/null
+++ b/lib/spawn-pipe.c
@@ -0,0 +1,452 @@
+/* Creation of subprocesses, communicating via pipes.
+   Copyright (C) 2001-2004, 2006-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#include <config.h>
+
+/* Specification.  */
+#include "spawn-pipe.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include "error.h"
+#include "fatal-signal.h"
+#include "unistd-safer.h"
+#include "wait-process.h"
+#include "gettext.h"
+
+#define _(str) gettext (str)
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+/* Native Windows API.  */
+# include <process.h>
+# include "w32spawn.h"
+
+#else
+
+/* Unix API.  */
+# include <spawn.h>
+
+#endif
+
+/* The results of open() in this file are not used with fchdir,
+   therefore save some unnecessary work in fchdir.c.  */
+#undef open
+#undef close
+
+
+#ifdef EINTR
+
+/* EINTR handling for close().
+   These functions can return -1/EINTR even though we don't have any
+   signal handlers set up, namely when we get interrupted via SIGSTOP.  */
+
+static int
+nonintr_close (int fd)
+{
+  int retval;
+
+  do
+    retval = close (fd);
+  while (retval < 0 && errno == EINTR);
+
+  return retval;
+}
+#define close nonintr_close
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+static int
+nonintr_open (const char *pathname, int oflag, mode_t mode)
+{
+  int retval;
+
+  do
+    retval = open (pathname, oflag, mode);
+  while (retval < 0 && errno == EINTR);
+
+  return retval;
+}
+# undef open /* avoid warning on VMS */
+# define open nonintr_open
+#endif
+
+#endif
+
+
+/* Open a pipe connected to a child process.
+ *
+ *           write       system                read
+ *    parent  ->   fd[1]   ->   STDIN_FILENO    ->   child       if pipe_stdin
+ *    parent  <-   fd[0]   <-   STDOUT_FILENO   <-   child       if pipe_stdout
+ *           read        system                write
+ *
+ * At least one of pipe_stdin, pipe_stdout must be true.
+ * pipe_stdin and prog_stdin together determine the child's standard input.
+ * pipe_stdout and prog_stdout together determine the child's standard output.
+ * If pipe_stdin is true, prog_stdin is ignored.
+ * If pipe_stdout is true, prog_stdout is ignored.
+ */
+static pid_t
+create_pipe (const char *progname,
+             const char *prog_path, char **prog_argv,
+             bool pipe_stdin, bool pipe_stdout,
+             const char *prog_stdin, const char *prog_stdout,
+             bool null_stderr,
+             bool slave_process, bool exit_on_error,
+             int fd[2])
+{
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+  /* Native Windows API.
+     This uses _pipe(), dup2(), and spawnv().  It could also be implemented
+     using the low-level functions CreatePipe(), DuplicateHandle(),
+     CreateProcess() and _open_osfhandle(); see the GNU make and GNU clisp
+     and cvs source code.  */
+  int ifd[2];
+  int ofd[2];
+  int orig_stdin;
+  int orig_stdout;
+  int orig_stderr;
+  int child;
+  int nulloutfd;
+  int stdinfd;
+  int stdoutfd;
+  int saved_errno;
+
+  /* FIXME: Need to free memory allocated by prepare_spawn.  */
+  prog_argv = prepare_spawn (prog_argv);
+
+  if (pipe_stdout)
+    if (pipe2_safer (ifd, O_BINARY | O_CLOEXEC) < 0)
+      error (EXIT_FAILURE, errno, _("cannot create pipe"));
+  if (pipe_stdin)
+    if (pipe2_safer (ofd, O_BINARY | O_CLOEXEC) < 0)
+      error (EXIT_FAILURE, errno, _("cannot create pipe"));
+/* Data flow diagram:
+ *
+ *           write        system         read
+ *    parent  ->   ofd[1]   ->   ofd[0]   ->   child       if pipe_stdin
+ *    parent  <-   ifd[0]   <-   ifd[1]   <-   child       if pipe_stdout
+ *           read         system         write
+ *
+ */
+
+  /* Save standard file handles of parent process.  */
+  if (pipe_stdin || prog_stdin != NULL)
+    orig_stdin = dup_safer_noinherit (STDIN_FILENO);
+  if (pipe_stdout || prog_stdout != NULL)
+    orig_stdout = dup_safer_noinherit (STDOUT_FILENO);
+  if (null_stderr)
+    orig_stderr = dup_safer_noinherit (STDERR_FILENO);
+  child = -1;
+
+  /* Create standard file handles of child process.  */
+  nulloutfd = -1;
+  stdinfd = -1;
+  stdoutfd = -1;
+  if ((!pipe_stdin || dup2 (ofd[0], STDIN_FILENO) >= 0)
+      && (!pipe_stdout || dup2 (ifd[1], STDOUT_FILENO) >= 0)
+      && (!null_stderr
+          || ((nulloutfd = open ("NUL", O_RDWR, 0)) >= 0
+              && (nulloutfd == STDERR_FILENO
+                  || (dup2 (nulloutfd, STDERR_FILENO) >= 0
+                      && close (nulloutfd) >= 0))))
+      && (pipe_stdin
+          || prog_stdin == NULL
+          || ((stdinfd = open (prog_stdin, O_RDONLY, 0)) >= 0
+              && (stdinfd == STDIN_FILENO
+                  || (dup2 (stdinfd, STDIN_FILENO) >= 0
+                      && close (stdinfd) >= 0))))
+      && (pipe_stdout
+          || prog_stdout == NULL
+          || ((stdoutfd = open (prog_stdout, O_WRONLY, 0)) >= 0
+              && (stdoutfd == STDOUT_FILENO
+                  || (dup2 (stdoutfd, STDOUT_FILENO) >= 0
+                      && close (stdoutfd) >= 0)))))
+    /* The child process doesn't inherit ifd[0], ifd[1], ofd[0], ofd[1],
+       but it inherits all open()ed or dup2()ed file handles (which is what
+       we want in the case of STD*_FILENO).  */
+    /* Use spawnvpe and pass the environment explicitly.  This is needed if
+       the program has modified the environment using putenv() or [un]setenv().
+       On Windows, programs have two environments, one in the "environment
+       block" of the process and managed through SetEnvironmentVariable(), and
+       one inside the process, in the location retrieved by the 'environ'
+       macro.  When using spawnvp() without 'e', the child process inherits a
+       copy of the environment block - ignoring the effects of putenv() and
+       [un]setenv().  */
+    {
+      child = spawnvpe (P_NOWAIT, prog_path, (const char **) prog_argv,
+                        (const char **) environ);
+      if (child < 0 && errno == ENOEXEC)
+        {
+          /* prog is not a native executable.  Try to execute it as a
+             shell script.  Note that prepare_spawn() has already prepended
+             a hidden element "sh.exe" to prog_argv.  */
+          --prog_argv;
+          child = spawnvpe (P_NOWAIT, prog_argv[0], (const char **) prog_argv,
+                            (const char **) environ);
+        }
+    }
+  if (child == -1)
+    saved_errno = errno;
+  if (stdinfd >= 0)
+    close (stdinfd);
+  if (stdoutfd >= 0)
+    close (stdoutfd);
+  if (nulloutfd >= 0)
+    close (nulloutfd);
+
+  /* Restore standard file handles of parent process.  */
+  if (null_stderr)
+    undup_safer_noinherit (orig_stderr, STDERR_FILENO);
+  if (pipe_stdout || prog_stdout != NULL)
+    undup_safer_noinherit (orig_stdout, STDOUT_FILENO);
+  if (pipe_stdin || prog_stdin != NULL)
+    undup_safer_noinherit (orig_stdin, STDIN_FILENO);
+
+  if (pipe_stdin)
+    close (ofd[0]);
+  if (pipe_stdout)
+    close (ifd[1]);
+  if (child == -1)
+    {
+      if (exit_on_error || !null_stderr)
+        error (exit_on_error ? EXIT_FAILURE : 0, saved_errno,
+               _("%s subprocess failed"), progname);
+      if (pipe_stdout)
+        close (ifd[0]);
+      if (pipe_stdin)
+        close (ofd[1]);
+      errno = saved_errno;
+      return -1;
+    }
+
+  if (pipe_stdout)
+    fd[0] = ifd[0];
+  if (pipe_stdin)
+    fd[1] = ofd[1];
+  return child;
+
+#else
+
+  /* Unix API.  */
+  int ifd[2];
+  int ofd[2];
+  sigset_t blocked_signals;
+  posix_spawn_file_actions_t actions;
+  bool actions_allocated;
+  posix_spawnattr_t attrs;
+  bool attrs_allocated;
+  int err;
+  pid_t child;
+
+  if (pipe_stdout)
+    if (pipe_safer (ifd) < 0)
+      error (EXIT_FAILURE, errno, _("cannot create pipe"));
+  if (pipe_stdin)
+    if (pipe_safer (ofd) < 0)
+      error (EXIT_FAILURE, errno, _("cannot create pipe"));
+/* Data flow diagram:
+ *
+ *           write        system         read
+ *    parent  ->   ofd[1]   ->   ofd[0]   ->   child       if pipe_stdin
+ *    parent  <-   ifd[0]   <-   ifd[1]   <-   child       if pipe_stdout
+ *           read         system         write
+ *
+ */
+
+  if (slave_process)
+    {
+      sigprocmask (SIG_SETMASK, NULL, &blocked_signals);
+      block_fatal_signals ();
+    }
+  actions_allocated = false;
+  attrs_allocated = false;
+  if ((err = posix_spawn_file_actions_init (&actions)) != 0
+      || (actions_allocated = true,
+          (pipe_stdin
+           && (err = posix_spawn_file_actions_adddup2 (&actions,
+                                                       ofd[0], STDIN_FILENO))
+              != 0)
+          || (pipe_stdout
+              && (err = posix_spawn_file_actions_adddup2 (&actions,
+                                                          ifd[1], STDOUT_FILENO))
+                 != 0)
+          || (pipe_stdin
+              && (err = posix_spawn_file_actions_addclose (&actions, ofd[0]))
+                 != 0)
+          || (pipe_stdout
+              && (err = posix_spawn_file_actions_addclose (&actions, ifd[1]))
+                 != 0)
+          || (pipe_stdin
+              && (err = posix_spawn_file_actions_addclose (&actions, ofd[1]))
+                 != 0)
+          || (pipe_stdout
+              && (err = posix_spawn_file_actions_addclose (&actions, ifd[0]))
+                 != 0)
+          || (null_stderr
+              && (err = posix_spawn_file_actions_addopen (&actions,
+                                                          STDERR_FILENO,
+                                                          "/dev/null", O_RDWR,
+                                                          0))
+                 != 0)
+          || (!pipe_stdin
+              && prog_stdin != NULL
+              && (err = posix_spawn_file_actions_addopen (&actions,
+                                                          STDIN_FILENO,
+                                                          prog_stdin, O_RDONLY,
+                                                          0))
+                 != 0)
+          || (!pipe_stdout
+              && prog_stdout != NULL
+              && (err = posix_spawn_file_actions_addopen (&actions,
+                                                          STDOUT_FILENO,
+                                                          prog_stdout, O_WRONLY,
+                                                          0))
+                 != 0)
+          || (slave_process
+              && ((err = posix_spawnattr_init (&attrs)) != 0
+                  || (attrs_allocated = true,
+                      (err = posix_spawnattr_setsigmask (&attrs,
+                                                         &blocked_signals))
+                      != 0
+                      || (err = posix_spawnattr_setflags (&attrs,
+                                                        POSIX_SPAWN_SETSIGMASK))
+                         != 0)))
+          || (err = posix_spawnp (&child, prog_path, &actions,
+                                  attrs_allocated ? &attrs : NULL, prog_argv,
+                                  environ))
+             != 0))
+    {
+      if (actions_allocated)
+        posix_spawn_file_actions_destroy (&actions);
+      if (attrs_allocated)
+        posix_spawnattr_destroy (&attrs);
+      if (slave_process)
+        unblock_fatal_signals ();
+      if (exit_on_error || !null_stderr)
+        error (exit_on_error ? EXIT_FAILURE : 0, err,
+               _("%s subprocess failed"), progname);
+      if (pipe_stdout)
+        {
+          close (ifd[0]);
+          close (ifd[1]);
+        }
+      if (pipe_stdin)
+        {
+          close (ofd[0]);
+          close (ofd[1]);
+        }
+      errno = err;
+      return -1;
+    }
+  posix_spawn_file_actions_destroy (&actions);
+  if (attrs_allocated)
+    posix_spawnattr_destroy (&attrs);
+  if (slave_process)
+    {
+      register_slave_subprocess (child);
+      unblock_fatal_signals ();
+    }
+  if (pipe_stdin)
+    close (ofd[0]);
+  if (pipe_stdout)
+    close (ifd[1]);
+
+  if (pipe_stdout)
+    fd[0] = ifd[0];
+  if (pipe_stdin)
+    fd[1] = ofd[1];
+  return child;
+
+#endif
+}
+
+/* Open a bidirectional pipe.
+ *
+ *           write       system                read
+ *    parent  ->   fd[1]   ->   STDIN_FILENO    ->   child
+ *    parent  <-   fd[0]   <-   STDOUT_FILENO   <-   child
+ *           read        system                write
+ *
+ */
+pid_t
+create_pipe_bidi (const char *progname,
+                  const char *prog_path, char **prog_argv,
+                  bool null_stderr,
+                  bool slave_process, bool exit_on_error,
+                  int fd[2])
+{
+  pid_t result = create_pipe (progname, prog_path, prog_argv,
+                              true, true, NULL, NULL,
+                              null_stderr, slave_process, exit_on_error,
+                              fd);
+  return result;
+}
+
+/* Open a pipe for input from a child process.
+ * The child's stdin comes from a file.
+ *
+ *           read        system                write
+ *    parent  <-   fd[0]   <-   STDOUT_FILENO   <-   child
+ *
+ */
+pid_t
+create_pipe_in (const char *progname,
+                const char *prog_path, char **prog_argv,
+                const char *prog_stdin, bool null_stderr,
+                bool slave_process, bool exit_on_error,
+                int fd[1])
+{
+  int iofd[2];
+  pid_t result = create_pipe (progname, prog_path, prog_argv,
+                              false, true, prog_stdin, NULL,
+                              null_stderr, slave_process, exit_on_error,
+                              iofd);
+  if (result != -1)
+    fd[0] = iofd[0];
+  return result;
+}
+
+/* Open a pipe for output to a child process.
+ * The child's stdout goes to a file.
+ *
+ *           write       system                read
+ *    parent  ->   fd[0]   ->   STDIN_FILENO    ->   child
+ *
+ */
+pid_t
+create_pipe_out (const char *progname,
+                 const char *prog_path, char **prog_argv,
+                 const char *prog_stdout, bool null_stderr,
+                 bool slave_process, bool exit_on_error,
+                 int fd[1])
+{
+  int iofd[2];
+  pid_t result = create_pipe (progname, prog_path, prog_argv,
+                              true, false, NULL, prog_stdout,
+                              null_stderr, slave_process, exit_on_error,
+                              iofd);
+  if (result != -1)
+    fd[0] = iofd[1];
+  return result;
+}
diff --git a/lib/spawn-pipe.h b/lib/spawn-pipe.h
new file mode 100644
index 0000000..ea8ae8f
--- /dev/null
+++ b/lib/spawn-pipe.h
@@ -0,0 +1,147 @@
+/* Creation of subprocesses, communicating via pipes.
+   Copyright (C) 2001-2003, 2006, 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SPAWN_PIPE_H
+#define _SPAWN_PIPE_H
+
+/* Get pid_t.  */
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include <stdbool.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* All these functions create a subprocess and don't wait for its termination.
+   They return the process id of the subprocess.  They also return in fd[]
+   one or two file descriptors for communication with the subprocess.
+   If the subprocess creation fails: if exit_on_error is true, the main
+   process exits with an error message; otherwise, an error message is given
+   if null_stderr is false, then -1 is returned, with errno set, and fd[]
+   remain uninitialized.
+
+   After finishing communication, the caller should call wait_subprocess()
+   to get rid of the subprocess in the process table.
+
+   If slave_process is true, the child process will be terminated when its
+   creator receives a catchable fatal signal or exits normally.  If
+   slave_process is false, the child process will continue running in this
+   case, until it is lucky enough to attempt to communicate with its creator
+   and thus get a SIGPIPE signal.
+
+   If exit_on_error is false, a child process id of -1 should be treated the
+   same way as a subprocess which accepts no input, produces no output and
+   terminates with exit code 127.  Why?  Some errors during posix_spawnp()
+   cause the function posix_spawnp() to return an error code; some other
+   errors cause the subprocess to exit with return code 127.  It is
+   implementation dependent which error is reported which way.  The caller
+   must treat both cases as equivalent.
+
+   It is recommended that no signal is blocked or ignored (i.e. have a
+   signal handler with value SIG_IGN) while any of these functions is called.
+   The reason is that child processes inherit the mask of blocked signals
+   from their parent (both through posix_spawn() and fork()/exec());
+   likewise, signals ignored in the parent are also ignored in the child
+   (except possibly for SIGCHLD).  And POSIX:2001 says [in the description
+   of exec()]:
+       "it should be noted that many existing applications wrongly
+        assume that they start with certain signals set to the default
+        action and/or unblocked. In particular, applications written
+        with a simpler signal model that does not include blocking of
+        signals, such as the one in the ISO C standard, may not behave
+        properly if invoked with some signals blocked. Therefore, it is
+        best not to block or ignore signals across execs without explicit
+        reason to do so, and especially not to block signals across execs
+        of arbitrary (not closely co-operating) programs."  */
+
+/* Open a pipe for output to a child process.
+ * The child's stdout goes to a file.
+ *
+ *           write       system                read
+ *    parent  ->   fd[0]   ->   STDIN_FILENO    ->   child
+ *
+ * Note: When writing to a child process, it is useful to ignore the SIGPIPE
+ * signal and the EPIPE error code.
+ */
+extern pid_t create_pipe_out (const char *progname,
+                              const char *prog_path, char **prog_argv,
+                              const char *prog_stdout, bool null_stderr,
+                              bool slave_process, bool exit_on_error,
+                              int fd[1]);
+
+/* Open a pipe for input from a child process.
+ * The child's stdin comes from a file.
+ *
+ *           read        system                write
+ *    parent  <-   fd[0]   <-   STDOUT_FILENO   <-   child
+ *
+ */
+extern pid_t create_pipe_in (const char *progname,
+                             const char *prog_path, char **prog_argv,
+                             const char *prog_stdin, bool null_stderr,
+                             bool slave_process, bool exit_on_error,
+                             int fd[1]);
+
+/* Open a bidirectional pipe.
+ *
+ *           write       system                read
+ *    parent  ->   fd[1]   ->   STDIN_FILENO    ->   child
+ *    parent  <-   fd[0]   <-   STDOUT_FILENO   <-   child
+ *           read        system                write
+ *
+ * Note: When writing to a child process, it is useful to ignore the SIGPIPE
+ * signal and the EPIPE error code.
+ *
+ * Note: The parent process must be careful to avoid deadlock.
+ * 1) If you write more than PIPE_MAX bytes or, more generally, if you write
+ *    more bytes than the subprocess can handle at once, the subprocess
+ *    may write its data and wait on you to read it, but you are currently
+ *    busy writing.
+ * 2) When you don't know ahead of time how many bytes the subprocess
+ *    will produce, the usual technique of calling read (fd, buf, BUFSIZ)
+ *    with a fixed BUFSIZ will, on Linux 2.2.17 and on BSD systems, cause
+ *    the read() call to block until *all* of the buffer has been filled.
+ *    But the subprocess cannot produce more data until you gave it more
+ *    input.  But you are currently busy reading from it.
+ */
+extern pid_t create_pipe_bidi (const char *progname,
+                               const char *prog_path, char **prog_argv,
+                               bool null_stderr,
+                               bool slave_process, bool exit_on_error,
+                               int fd[2]);
+
+/* The name of the "always silent" device.  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Native Windows API.  */
+# define DEV_NULL "NUL"
+#else
+/* Unix API.  */
+# define DEV_NULL "/dev/null"
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _SPAWN_PIPE_H */
diff --git a/lib/spawn.in.h b/lib/spawn.in.h
new file mode 100644
index 0000000..0f25d17
--- /dev/null
+++ b/lib/spawn.in.h
@@ -0,0 +1,881 @@
+/* Definitions for POSIX spawn interface.
+   Copyright (C) 2000, 2003-2004, 2008-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_SPAWN_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_SPAWN_H@
+# @INCLUDE_NEXT@ @NEXT_SPAWN_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_SPAWN_H
+#define _@GUARD_PREFIX@_SPAWN_H
+
+/* Get definitions of 'struct sched_param' and 'sigset_t'.
+   But avoid namespace pollution on glibc systems.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <sched.h>
+# include <signal.h>
+#endif
+
+#include <sys/types.h>
+
+#ifndef __THROW
+# define __THROW
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".
+   Other compilers use __restrict, __restrict__, and _Restrict, and
+   'configure' might #define 'restrict' to those words, so pick a
+   different name.  */
+#ifndef _Restrict_
+# if 199901L <= __STDC_VERSION__
+#  define _Restrict_ restrict
+# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
+#  define _Restrict_ __restrict
+# else
+#  define _Restrict_
+# endif
+#endif
+/* gcc 3.1 and up support the [restrict] syntax.  Don't trust
+   sys/cdefs.h's definition of __restrict_arr, though, as it
+   mishandles gcc -ansi -pedantic.  */
+#ifndef _Restrict_arr_
+# if ((199901L <= __STDC_VERSION__                                      \
+       || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__))     \
+           && !defined __STRICT_ANSI__))                                        \
+      && !defined __GNUG__)
+#  define _Restrict_arr_ _Restrict_
+# else
+#  define _Restrict_arr_
+# endif
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Data structure to contain attributes for thread creation.  */
+#if @REPLACE_POSIX_SPAWN@
+# define posix_spawnattr_t rpl_posix_spawnattr_t
+#endif
+#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@
+# if !GNULIB_defined_posix_spawnattr_t
+typedef struct
+{
+  short int _flags;
+  pid_t _pgrp;
+  sigset_t _sd;
+  sigset_t _ss;
+  struct sched_param _sp;
+  int _policy;
+  int __pad[16];
+} posix_spawnattr_t;
+#  define GNULIB_defined_posix_spawnattr_t 1
+# endif
+#endif
+
+
+/* Data structure to contain information about the actions to be
+   performed in the new process with respect to file descriptors.  */
+#if @REPLACE_POSIX_SPAWN@
+# define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t
+#endif
+#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+# if !GNULIB_defined_posix_spawn_file_actions_t
+typedef struct
+{
+  int _allocated;
+  int _used;
+  struct __spawn_action *_actions;
+  int __pad[16];
+} posix_spawn_file_actions_t;
+#  define GNULIB_defined_posix_spawn_file_actions_t 1
+# endif
+#endif
+
+
+/* Flags to be set in the 'posix_spawnattr_t'.  */
+#if @HAVE_POSIX_SPAWN@
+/* Use the values from the system, but provide the missing ones.  */
+# ifndef POSIX_SPAWN_SETSCHEDPARAM
+#  define POSIX_SPAWN_SETSCHEDPARAM 0
+# endif
+# ifndef POSIX_SPAWN_SETSCHEDULER
+#  define POSIX_SPAWN_SETSCHEDULER 0
+# endif
+#else
+# if @REPLACE_POSIX_SPAWN@
+/* Use the values from the system, for better compatibility.  */
+/* But this implementation does not support AIX extensions.  */
+#  undef POSIX_SPAWN_FORK_HANDLERS
+# else
+#  define POSIX_SPAWN_RESETIDS           0x01
+#  define POSIX_SPAWN_SETPGROUP          0x02
+#  define POSIX_SPAWN_SETSIGDEF          0x04
+#  define POSIX_SPAWN_SETSIGMASK         0x08
+#  define POSIX_SPAWN_SETSCHEDPARAM      0x10
+#  define POSIX_SPAWN_SETSCHEDULER       0x20
+# endif
+#endif
+/* A GNU extension.  Use the next free bit position.  */
+#define POSIX_SPAWN_USEVFORK \
+  ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1)                     \
+    | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1)                 \
+    | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1)                 \
+    | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1)               \
+    | POSIX_SPAWN_SETSCHEDPARAM                                           \
+    | (POSIX_SPAWN_SETSCHEDPARAM > 0 ? POSIX_SPAWN_SETSCHEDPARAM - 1 : 0) \
+    | POSIX_SPAWN_SETSCHEDULER                                            \
+    | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0))  \
+   + 1)
+#if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap
+typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap
+            [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP
+                | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK
+                | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)
+               & POSIX_SPAWN_USEVFORK)
+              == 0)
+             ? 1 : -1];
+# define GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap 1
+#endif
+
+
+#if @GNULIB_POSIX_SPAWN@
+/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
+   Before running the process perform the actions described in FILE-ACTIONS.
+
+   This function is a possible cancellation points and therefore not
+   marked with __THROW. */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn rpl_posix_spawn
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+_GL_CXXALIAS_RPL (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_]));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_]));
+# endif
+_GL_CXXALIASWARN (posix_spawn);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn
+# if HAVE_RAW_DECL_POSIX_SPAWN
+_GL_WARN_ON_USE (posix_spawn, "posix_spawn is unportable - "
+                 "use gnulib module posix_spawn for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNP@
+/* Similar to 'posix_spawn' but search for FILE in the PATH.
+
+   This function is a possible cancellation points and therefore not
+   marked with __THROW.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnp rpl_posix_spawnp
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+_GL_CXXALIAS_RPL (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[]));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[]));
+# endif
+_GL_CXXALIASWARN (posix_spawnp);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnp
+# if HAVE_RAW_DECL_POSIX_SPAWNP
+_GL_WARN_ON_USE (posix_spawnp, "posix_spawnp is unportable - "
+                 "use gnulib module posix_spawnp for portability");
+# endif
+#endif
+
+
+#if @GNULIB_POSIX_SPAWNATTR_INIT@
+/* Initialize data structure with attributes for 'spawn' to default values.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_init rpl_posix_spawnattr_init
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)
+                                             __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)
+                                             __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_init);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_init
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT
+_GL_WARN_ON_USE (posix_spawnattr_init, "posix_spawnattr_init is unportable - "
+                 "use gnulib module posix_spawnattr_init for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_DESTROY@
+/* Free resources associated with ATTR.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_destroy rpl_posix_spawnattr_destroy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)
+                                                __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)
+                                                __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_destroy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_destroy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY
+_GL_WARN_ON_USE (posix_spawnattr_destroy,
+                 "posix_spawnattr_destroy is unportable - "
+                 "use gnulib module posix_spawnattr_destroy for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+/* Store signal mask for signals with default handling from ATTR in
+   SIGDEFAULT.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getsigdefault);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigdefault
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT
+_GL_WARN_ON_USE (posix_spawnattr_getsigdefault,
+                 "posix_spawnattr_getsigdefault is unportable - "
+                 "use gnulib module posix_spawnattr_getsigdefault for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setsigdefault);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setsigdefault
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT
+_GL_WARN_ON_USE (posix_spawnattr_setsigdefault,
+                 "posix_spawnattr_setsigdefault is unportable - "
+                 "use gnulib module posix_spawnattr_setsigdefault for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+/* Store signal mask for the new process from ATTR in SIGMASK.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getsigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigmask
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK
+_GL_WARN_ON_USE (posix_spawnattr_getsigmask,
+                 "posix_spawnattr_getsigmask is unportable - "
+                 "use gnulib module posix_spawnattr_getsigmask for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+/* Set signal mask for the new process in ATTR to SIGMASK.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setsigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setsigmask
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK
+_GL_WARN_ON_USE (posix_spawnattr_setsigmask,
+                 "posix_spawnattr_setsigmask is unportable - "
+                 "use gnulib module posix_spawnattr_setsigmask for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+/* Get flag word from the attribute structure.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getflags rpl_posix_spawnattr_getflags
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getflags);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getflags
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS
+_GL_WARN_ON_USE (posix_spawnattr_getflags,
+                 "posix_spawnattr_getflags is unportable - "
+                 "use gnulib module posix_spawnattr_getflags for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+/* Store flags in the attribute structure.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setflags rpl_posix_spawnattr_setflags
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setflags);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setflags
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS
+_GL_WARN_ON_USE (posix_spawnattr_setflags,
+                 "posix_spawnattr_setflags is unportable - "
+                 "use gnulib module posix_spawnattr_setflags for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+/* Get process group ID from the attribute structure.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getpgroup);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getpgroup
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP
+_GL_WARN_ON_USE (posix_spawnattr_getpgroup,
+                 "posix_spawnattr_getpgroup is unportable - "
+                 "use gnulib module posix_spawnattr_getpgroup for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+/* Store process group ID in the attribute structure.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setpgroup);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setpgroup
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP
+_GL_WARN_ON_USE (posix_spawnattr_setpgroup,
+                 "posix_spawnattr_setpgroup is unportable - "
+                 "use gnulib module posix_spawnattr_setpgroup for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+/* Get scheduling policy from the attribute structure.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy));
+# else
+#  if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getschedpolicy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getschedpolicy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY
+_GL_WARN_ON_USE (posix_spawnattr_getschedpolicy,
+                 "posix_spawnattr_getschedpolicy is unportable - "
+                 "use gnulib module posix_spawnattr_getschedpolicy for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+/* Store scheduling policy in the attribute structure.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy));
+# else
+#  if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setschedpolicy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setschedpolicy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY
+_GL_WARN_ON_USE (posix_spawnattr_setschedpolicy,
+                 "posix_spawnattr_setschedpolicy is unportable - "
+                 "use gnulib module posix_spawnattr_setschedpolicy for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+/* Get scheduling parameters from the attribute structure.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam));
+# else
+#  if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getschedparam);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getschedparam
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM
+_GL_WARN_ON_USE (posix_spawnattr_getschedparam,
+                 "posix_spawnattr_getschedparam is unportable - "
+                 "use gnulib module posix_spawnattr_getschedparam for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+/* Store scheduling parameters in the attribute structure.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam));
+# else
+#  if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setschedparam);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setschedparam
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM
+_GL_WARN_ON_USE (posix_spawnattr_setschedparam,
+                 "posix_spawnattr_setschedparam is unportable - "
+                 "use gnulib module posix_spawnattr_setschedparam for portability");
+# endif
+#endif
+
+
+#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+/* Initialize data structure for file attribute for 'spawn' call.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_init);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_init
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT
+_GL_WARN_ON_USE (posix_spawn_file_actions_init,
+                 "posix_spawn_file_actions_init is unportable - "
+                 "use gnulib module posix_spawn_file_actions_init for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+/* Free resources associated with FILE-ACTIONS.  */
+# if @REPLACE_POSIX_SPAWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_destroy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_destroy
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY
+_GL_WARN_ON_USE (posix_spawn_file_actions_destroy,
+                 "posix_spawn_file_actions_destroy is unportable - "
+                 "use gnulib module posix_spawn_file_actions_destroy for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'open' for the given file during the 'spawn' call.  */
+# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode)
+                  __THROW _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode)
+                  __THROW _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_addopen);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addopen
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+_GL_WARN_ON_USE (posix_spawn_file_actions_addopen,
+                 "posix_spawn_file_actions_addopen is unportable - "
+                 "use gnulib module posix_spawn_file_actions_addopen for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'close' for the given file descriptor during the 'spawn' call.  */
+# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_addclose);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addclose
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+_GL_WARN_ON_USE (posix_spawn_file_actions_addclose,
+                 "posix_spawn_file_actions_addclose is unportable - "
+                 "use gnulib module posix_spawn_file_actions_addclose for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'dup2' for the given file descriptors during the 'spawn' call.  */
+# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd));
+# else
+#  if !@HAVE_POSIX_SPAWN@
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_adddup2);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_adddup2
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
+_GL_WARN_ON_USE (posix_spawn_file_actions_adddup2,
+                 "posix_spawn_file_actions_adddup2 is unportable - "
+                 "use gnulib module posix_spawn_file_actions_adddup2 for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_SPAWN_H */
+#endif /* _@GUARD_PREFIX@_SPAWN_H */
diff --git a/lib/spawn_faction_addclose.c b/lib/spawn_faction_addclose.c
new file mode 100644
index 0000000..8326bbb
--- /dev/null
+++ b/lib/spawn_faction_addclose.c
@@ -0,0 +1,69 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include <errno.h>
+#include <unistd.h>
+
+#if !_LIBC
+# define __sysconf(open_max) getdtablesize ()
+#endif
+
+#if !HAVE_WORKING_POSIX_SPAWN
+# include "spawn_int.h"
+#endif
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'close' for the given file descriptor during the 'spawn' call.  */
+int
+posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions,
+                                   int fd)
+#undef posix_spawn_file_actions_addclose
+{
+  int maxfd = __sysconf (_SC_OPEN_MAX);
+
+  /* Test for the validity of the file descriptor.  */
+  if (fd < 0 || fd >= maxfd)
+    return EBADF;
+
+#if HAVE_WORKING_POSIX_SPAWN
+  return posix_spawn_file_actions_addclose (file_actions, fd);
+#else
+  /* Allocate more memory if needed.  */
+  if (file_actions->_used == file_actions->_allocated
+      && __posix_spawn_file_actions_realloc (file_actions) != 0)
+    /* This can only mean we ran out of memory.  */
+    return ENOMEM;
+
+  {
+    struct __spawn_action *rec;
+
+    /* Add the new value.  */
+    rec = &file_actions->_actions[file_actions->_used];
+    rec->tag = spawn_do_close;
+    rec->action.open_action.fd = fd;
+
+    /* Account for the new entry.  */
+    ++file_actions->_used;
+
+    return 0;
+  }
+#endif
+}
diff --git a/lib/spawn_faction_adddup2.c b/lib/spawn_faction_adddup2.c
new file mode 100644
index 0000000..08daa52
--- /dev/null
+++ b/lib/spawn_faction_adddup2.c
@@ -0,0 +1,70 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include <errno.h>
+#include <unistd.h>
+
+#if !_LIBC
+# define __sysconf(open_max) getdtablesize ()
+#endif
+
+#if !HAVE_WORKING_POSIX_SPAWN
+# include "spawn_int.h"
+#endif
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'dup2' for the given file descriptors during the 'spawn' call.  */
+int
+posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions,
+                                  int fd, int newfd)
+#undef posix_spawn_file_actions_adddup2
+{
+  int maxfd = __sysconf (_SC_OPEN_MAX);
+
+  /* Test for the validity of the file descriptor.  */
+  if (fd < 0 || newfd < 0 || fd >= maxfd || newfd >= maxfd)
+    return EBADF;
+
+#if HAVE_WORKING_POSIX_SPAWN
+  return posix_spawn_file_actions_adddup2 (file_actions, fd, newfd);
+#else
+  /* Allocate more memory if needed.  */
+  if (file_actions->_used == file_actions->_allocated
+      && __posix_spawn_file_actions_realloc (file_actions) != 0)
+    /* This can only mean we ran out of memory.  */
+    return ENOMEM;
+
+  {
+    struct __spawn_action *rec;
+
+    /* Add the new value.  */
+    rec = &file_actions->_actions[file_actions->_used];
+    rec->tag = spawn_do_dup2;
+    rec->action.dup2_action.fd = fd;
+    rec->action.dup2_action.newfd = newfd;
+
+    /* Account for the new entry.  */
+    ++file_actions->_used;
+
+    return 0;
+  }
+#endif
+}
diff --git a/lib/spawn_faction_addopen.c b/lib/spawn_faction_addopen.c
new file mode 100644
index 0000000..d13fc2c
--- /dev/null
+++ b/lib/spawn_faction_addopen.c
@@ -0,0 +1,73 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include <errno.h>
+#include <unistd.h>
+
+#if !_LIBC
+# define __sysconf(open_max) getdtablesize ()
+#endif
+
+#if !HAVE_WORKING_POSIX_SPAWN
+# include "spawn_int.h"
+#endif
+
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'open' for the given file during the 'spawn' call.  */
+int
+posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *file_actions,
+                                  int fd, const char *path, int oflag,
+                                  mode_t mode)
+#undef posix_spawn_file_actions_addopen
+{
+  int maxfd = __sysconf (_SC_OPEN_MAX);
+
+  /* Test for the validity of the file descriptor.  */
+  if (fd < 0 || fd >= maxfd)
+    return EBADF;
+
+#if HAVE_WORKING_POSIX_SPAWN
+  return posix_spawn_file_actions_addopen (file_actions, fd, path, oflag, mode);
+#else
+  /* Allocate more memory if needed.  */
+  if (file_actions->_used == file_actions->_allocated
+      && __posix_spawn_file_actions_realloc (file_actions) != 0)
+    /* This can only mean we ran out of memory.  */
+    return ENOMEM;
+
+  {
+    struct __spawn_action *rec;
+
+    /* Add the new value.  */
+    rec = &file_actions->_actions[file_actions->_used];
+    rec->tag = spawn_do_open;
+    rec->action.open_action.fd = fd;
+    rec->action.open_action.path = path;
+    rec->action.open_action.oflag = oflag;
+    rec->action.open_action.mode = mode;
+
+    /* Account for the new entry.  */
+    ++file_actions->_used;
+
+    return 0;
+  }
+#endif
+}
diff --git a/lib/spawn_faction_destroy.c b/lib/spawn_faction_destroy.c
new file mode 100644
index 0000000..774d3d9
--- /dev/null
+++ b/lib/spawn_faction_destroy.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include <stdlib.h>
+
+/* Initialize data structure for file attribute for 'spawn' call.  */
+int
+posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
+{
+  /* Free the memory allocated.  */
+  free (file_actions->_actions);
+  return 0;
+}
diff --git a/lib/spawn_faction_init.c b/lib/spawn_faction_init.c
new file mode 100644
index 0000000..373c7da
--- /dev/null
+++ b/lib/spawn_faction_init.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "spawn_int.h"
+
+
+/* Function used to increase the size of the allocated array.  This
+   function is called from the 'add'-functions.  */
+int
+__posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *file_actions)
+{
+  int newalloc = file_actions->_allocated + 8;
+  void *newmem = realloc (file_actions->_actions,
+                          newalloc * sizeof (struct __spawn_action));
+
+  if (newmem == NULL)
+    /* Not enough memory.  */
+    return ENOMEM;
+
+  file_actions->_actions = (struct __spawn_action *) newmem;
+  file_actions->_allocated = newalloc;
+
+  return 0;
+}
+
+
+/* Initialize data structure for file attribute for 'spawn' call.  */
+int
+posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions)
+{
+  /* Simply clear all the elements.  */
+  memset (file_actions, '\0', sizeof (*file_actions));
+  return 0;
+}
diff --git a/lib/spawn_int.h b/lib/spawn_int.h
new file mode 100644
index 0000000..f85c6f7
--- /dev/null
+++ b/lib/spawn_int.h
@@ -0,0 +1,62 @@
+/* Copyright (C) 2000, 2008-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <sys/types.h>
+
+/* Data structure to contain the action information.  */
+struct __spawn_action
+{
+  enum
+  {
+    spawn_do_close,
+    spawn_do_dup2,
+    spawn_do_open
+  } tag;
+
+  union
+  {
+    struct
+    {
+      int fd;
+    } close_action;
+    struct
+    {
+      int fd;
+      int newfd;
+    } dup2_action;
+    struct
+    {
+      int fd;
+      const char *path;
+      int oflag;
+      mode_t mode;
+    } open_action;
+  } action;
+};
+
+#if !_LIBC
+# define __posix_spawn_file_actions_realloc gl_posix_spawn_file_actions_realloc
+#endif
+extern int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *
+                                               file_actions);
+
+#if !_LIBC
+# define __spawni gl_posix_spawn_internal
+#endif
+extern int __spawni (pid_t *pid, const char *path,
+                     const posix_spawn_file_actions_t *file_actions,
+                     const posix_spawnattr_t *attrp, char *const argv[],
+                     char *const envp[], int use_path);
diff --git a/lib/spawnattr_destroy.c b/lib/spawnattr_destroy.c
new file mode 100644
index 0000000..6025ee4
--- /dev/null
+++ b/lib/spawnattr_destroy.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+/* Initialize data structure for file attribute for 'spawn' call.  */
+int
+posix_spawnattr_destroy (posix_spawnattr_t *attr)
+{
+  /* Nothing to do in the moment.  */
+  return 0;
+}
diff --git a/lib/spawnattr_init.c b/lib/spawnattr_init.c
new file mode 100644
index 0000000..7451b4e
--- /dev/null
+++ b/lib/spawnattr_init.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include <string.h>
+
+/* Initialize data structure for file attribute for 'spawn' call.  */
+int
+posix_spawnattr_init (posix_spawnattr_t *attr)
+{
+  /* All elements have to be initialized to the default values which
+     is generally zero.  */
+  memset (attr, '\0', sizeof (*attr));
+
+  return 0;
+}
diff --git a/lib/spawnattr_setflags.c b/lib/spawnattr_setflags.c
new file mode 100644
index 0000000..0def40a
--- /dev/null
+++ b/lib/spawnattr_setflags.c
@@ -0,0 +1,45 @@
+/* Copyright (C) 2000, 2004, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include <errno.h>
+#include <string.h>
+
+#define ALL_FLAGS (POSIX_SPAWN_RESETIDS                                       \
+                   | POSIX_SPAWN_SETPGROUP                                    \
+                   | POSIX_SPAWN_SETSIGDEF                                    \
+                   | POSIX_SPAWN_SETSIGMASK                                   \
+                   | POSIX_SPAWN_SETSCHEDPARAM                                \
+                   | POSIX_SPAWN_SETSCHEDULER                                 \
+                   | POSIX_SPAWN_USEVFORK)
+
+/* Store flags in the attribute structure.  */
+int
+posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags)
+{
+  /* Check no invalid bits are set.  */
+  if (flags & ~ALL_FLAGS)
+    return EINVAL;
+
+  /* Store the flag word.  */
+  attr->_flags = flags;
+
+  return 0;
+}
diff --git a/lib/spawnattr_setsigmask.c b/lib/spawnattr_setsigmask.c
new file mode 100644
index 0000000..7f8e61c
--- /dev/null
+++ b/lib/spawnattr_setsigmask.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include <string.h>
+
+/* Set signal mask for the new process in ATTR to SIGMASK.  */
+int
+posix_spawnattr_setsigmask (posix_spawnattr_t *attr,
+                            const sigset_t *sigmask)
+{
+  /* Copy the sigset_t data to the user buffer.  */
+  memcpy (&attr->_ss, sigmask, sizeof (sigset_t));
+
+  return 0;
+}
diff --git a/lib/spawni.c b/lib/spawni.c
new file mode 100644
index 0000000..649a4b9
--- /dev/null
+++ b/lib/spawni.c
@@ -0,0 +1,374 @@
+/* Guts of POSIX spawn interface.  Generic POSIX.1 version.
+   Copyright (C) 2000-2006, 2008-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+#include "spawn_int.h"
+
+#include <alloca.h>
+#include <errno.h>
+
+#include <fcntl.h>
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+#if _LIBC || HAVE_PATHS_H
+# include <paths.h>
+#else
+# define _PATH_BSHELL "/bin/sh"
+#endif
+
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#if _LIBC
+# include <not-cancel.h>
+#else
+# define close_not_cancel close
+# define open_not_cancel open
+#endif
+
+#if _LIBC
+# include <local-setxid.h>
+#else
+# if !HAVE_SETEUID
+#  define seteuid(id) setresuid (-1, id, -1)
+# endif
+# if !HAVE_SETEGID
+#  define setegid(id) setresgid (-1, id, -1)
+# endif
+# define local_seteuid(id) seteuid (id)
+# define local_setegid(id) setegid (id)
+#endif
+
+#if _LIBC
+# define alloca __alloca
+# define execve __execve
+# define dup2 __dup2
+# define fork __fork
+# define getgid __getgid
+# define getuid __getuid
+# define sched_setparam __sched_setparam
+# define sched_setscheduler __sched_setscheduler
+# define setpgid __setpgid
+# define sigaction __sigaction
+# define sigismember __sigismember
+# define sigprocmask __sigprocmask
+# define strchrnul __strchrnul
+# define vfork __vfork
+#else
+# undef internal_function
+# define internal_function /* empty */
+#endif
+
+
+/* The Unix standard contains a long explanation of the way to signal
+   an error after the fork() was successful.  Since no new wait status
+   was wanted there is no way to signal an error using one of the
+   available methods.  The committee chose to signal an error by a
+   normal program exit with the exit code 127.  */
+#define SPAWN_ERROR     127
+
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+/* Native Windows API.  */
+int
+__spawni (pid_t *pid, const char *file,
+          const posix_spawn_file_actions_t *file_actions,
+          const posix_spawnattr_t *attrp, char *const argv[],
+          char *const envp[], int use_path)
+{
+  /* Not yet implemented.  */
+  return ENOSYS;
+}
+
+#else
+
+
+/* The file is accessible but it is not an executable file.  Invoke
+   the shell to interpret it as a script.  */
+static void
+internal_function
+script_execute (const char *file, char *const argv[], char *const envp[])
+{
+  /* Count the arguments.  */
+  int argc = 0;
+  while (argv[argc++])
+    ;
+
+  /* Construct an argument list for the shell.  */
+  {
+    char **new_argv = (char **) alloca ((argc + 1) * sizeof (char *));
+    new_argv[0] = (char *) _PATH_BSHELL;
+    new_argv[1] = (char *) file;
+    while (argc > 1)
+      {
+        new_argv[argc] = argv[argc - 1];
+        --argc;
+      }
+
+    /* Execute the shell.  */
+    execve (new_argv[0], new_argv, envp);
+  }
+}
+
+
+/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
+   Before running the process perform the actions described in FILE-ACTIONS. */
+int
+__spawni (pid_t *pid, const char *file,
+          const posix_spawn_file_actions_t *file_actions,
+          const posix_spawnattr_t *attrp, char *const argv[],
+          char *const envp[], int use_path)
+{
+  pid_t new_pid;
+  char *path, *p, *name;
+  size_t len;
+  size_t pathlen;
+
+  /* Do this once.  */
+  short int flags = attrp == NULL ? 0 : attrp->_flags;
+
+  /* Avoid gcc warning
+       "variable 'flags' might be clobbered by 'longjmp' or 'vfork'"  */
+  (void) &flags;
+
+  /* Generate the new process.  */
+#if HAVE_VFORK
+  if ((flags & POSIX_SPAWN_USEVFORK) != 0
+      /* If no major work is done, allow using vfork.  Note that we
+         might perform the path searching.  But this would be done by
+         a call to execvp(), too, and such a call must be OK according
+         to POSIX.  */
+      || ((flags & (POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSIGDEF
+                    | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER
+                    | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_RESETIDS)) == 0
+          && file_actions == NULL))
+    new_pid = vfork ();
+  else
+#endif
+    new_pid = fork ();
+
+  if (new_pid != 0)
+    {
+      if (new_pid < 0)
+        return errno;
+
+      /* The call was successful.  Store the PID if necessary.  */
+      if (pid != NULL)
+        *pid = new_pid;
+
+      return 0;
+    }
+
+  /* Set signal mask.  */
+  if ((flags & POSIX_SPAWN_SETSIGMASK) != 0
+      && sigprocmask (SIG_SETMASK, &attrp->_ss, NULL) != 0)
+    _exit (SPAWN_ERROR);
+
+  /* Set signal default action.  */
+  if ((flags & POSIX_SPAWN_SETSIGDEF) != 0)
+    {
+      /* We have to iterate over all signals.  This could possibly be
+         done better but it requires system specific solutions since
+         the sigset_t data type can be very different on different
+         architectures.  */
+      int sig;
+      struct sigaction sa;
+
+      memset (&sa, '\0', sizeof (sa));
+      sa.sa_handler = SIG_DFL;
+
+      for (sig = 1; sig <= NSIG; ++sig)
+        if (sigismember (&attrp->_sd, sig) != 0
+            && sigaction (sig, &sa, NULL) != 0)
+          _exit (SPAWN_ERROR);
+
+    }
+
+#if (_LIBC ? defined _POSIX_PRIORITY_SCHEDULING : HAVE_SCHED_SETPARAM && HAVE_SCHED_SETSCHEDULER)
+  /* Set the scheduling algorithm and parameters.  */
+  if ((flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER))
+      == POSIX_SPAWN_SETSCHEDPARAM)
+    {
+      if (sched_setparam (0, &attrp->_sp) == -1)
+        _exit (SPAWN_ERROR);
+    }
+  else if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0)
+    {
+      if (sched_setscheduler (0, attrp->_policy,
+                              (flags & POSIX_SPAWN_SETSCHEDPARAM) != 0
+                              ? &attrp->_sp : NULL) == -1)
+        _exit (SPAWN_ERROR);
+    }
+#endif
+
+  /* Set the process group ID.  */
+  if ((flags & POSIX_SPAWN_SETPGROUP) != 0
+      && setpgid (0, attrp->_pgrp) != 0)
+    _exit (SPAWN_ERROR);
+
+  /* Set the effective user and group IDs.  */
+  if ((flags & POSIX_SPAWN_RESETIDS) != 0
+      && (local_seteuid (getuid ()) != 0
+          || local_setegid (getgid ()) != 0))
+    _exit (SPAWN_ERROR);
+
+  /* Execute the file actions.  */
+  if (file_actions != NULL)
+    {
+      int cnt;
+
+      for (cnt = 0; cnt < file_actions->_used; ++cnt)
+        {
+          struct __spawn_action *action = &file_actions->_actions[cnt];
+
+          switch (action->tag)
+            {
+            case spawn_do_close:
+              if (close_not_cancel (action->action.close_action.fd) != 0)
+                /* Signal the error.  */
+                _exit (SPAWN_ERROR);
+              break;
+
+            case spawn_do_open:
+              {
+                int new_fd = open_not_cancel (action->action.open_action.path,
+                                              action->action.open_action.oflag
+                                              | O_LARGEFILE,
+                                              action->action.open_action.mode);
+
+                if (new_fd == -1)
+                  /* The 'open' call failed.  */
+                  _exit (SPAWN_ERROR);
+
+                /* Make sure the desired file descriptor is used.  */
+                if (new_fd != action->action.open_action.fd)
+                  {
+                    if (dup2 (new_fd, action->action.open_action.fd)
+                        != action->action.open_action.fd)
+                      /* The 'dup2' call failed.  */
+                      _exit (SPAWN_ERROR);
+
+                    if (close_not_cancel (new_fd) != 0)
+                      /* The 'close' call failed.  */
+                      _exit (SPAWN_ERROR);
+                  }
+              }
+              break;
+
+            case spawn_do_dup2:
+              if (dup2 (action->action.dup2_action.fd,
+                        action->action.dup2_action.newfd)
+                  != action->action.dup2_action.newfd)
+                /* The 'dup2' call failed.  */
+                _exit (SPAWN_ERROR);
+              break;
+            }
+        }
+    }
+
+  if (! use_path || strchr (file, '/') != NULL)
+    {
+      /* The FILE parameter is actually a path.  */
+      execve (file, argv, envp);
+
+      if (errno == ENOEXEC)
+        script_execute (file, argv, envp);
+
+      /* Oh, oh.  'execve' returns.  This is bad.  */
+      _exit (SPAWN_ERROR);
+    }
+
+  /* We have to search for FILE on the path.  */
+  path = getenv ("PATH");
+  if (path == NULL)
+    {
+#if HAVE_CONFSTR
+      /* There is no 'PATH' in the environment.
+         The default search path is the current directory
+         followed by the path 'confstr' returns for '_CS_PATH'.  */
+      len = confstr (_CS_PATH, (char *) NULL, 0);
+      path = (char *) alloca (1 + len);
+      path[0] = ':';
+      (void) confstr (_CS_PATH, path + 1, len);
+#else
+      /* Pretend that the PATH contains only the current directory.  */
+      path = "";
+#endif
+    }
+
+  len = strlen (file) + 1;
+  pathlen = strlen (path);
+  name = alloca (pathlen + len + 1);
+  /* Copy the file name at the top.  */
+  name = (char *) memcpy (name + pathlen + 1, file, len);
+  /* And add the slash.  */
+  *--name = '/';
+
+  p = path;
+  do
+    {
+      char *startp;
+
+      path = p;
+      p = strchrnul (path, ':');
+
+      if (p == path)
+        /* Two adjacent colons, or a colon at the beginning or the end
+           of 'PATH' means to search the current directory.  */
+        startp = name + 1;
+      else
+        startp = (char *) memcpy (name - (p - path), path, p - path);
+
+      /* Try to execute this name.  If it works, execv will not return.  */
+      execve (startp, argv, envp);
+
+      if (errno == ENOEXEC)
+        script_execute (startp, argv, envp);
+
+      switch (errno)
+        {
+        case EACCES:
+        case ENOENT:
+        case ESTALE:
+        case ENOTDIR:
+          /* Those errors indicate the file is missing or not executable
+             by us, in which case we want to just try the next path
+             directory.  */
+          break;
+
+        default:
+          /* Some other error means we found an executable file, but
+             something went wrong executing it; return the error to our
+             caller.  */
+          _exit (SPAWN_ERROR);
+        }
+    }
+  while (*p++ != '\0');
+
+  /* Return with an error.  */
+  _exit (SPAWN_ERROR);
+}
+
+#endif
diff --git a/lib/spawnp.c b/lib/spawnp.c
new file mode 100644
index 0000000..25493eb
--- /dev/null
+++ b/lib/spawnp.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <spawn.h>
+
+#include "spawn_int.h"
+
+/* Spawn a new process executing FILE with the attributes describes in *ATTRP.
+   Before running the process perform the actions described in FILE-ACTIONS. */
+int
+posix_spawnp (pid_t *pid, const char *file,
+              const posix_spawn_file_actions_t *file_actions,
+              const posix_spawnattr_t *attrp, char *const argv[],
+              char *const envp[])
+{
+  return __spawni (pid, file, file_actions, attrp, argv, envp, 1);
+}
diff --git a/lib/sprintf.c b/lib/sprintf.c
new file mode 100644
index 0000000..68c9762
--- /dev/null
+++ b/lib/sprintf.c
@@ -0,0 +1,80 @@
+/* Formatted output to strings.
+   Copyright (C) 2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if 1
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "vasnprintf.h"
+
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+/* Print formatted output to string STR.
+   Return string length of formatted string.  On error, return a negative
+   value.  */
+int
+sprintf (char *str, const char *format, ...)
+{
+  char *output;
+  size_t len;
+  size_t lenbuf;
+  va_list args;
+
+  /* vasnprintf fails with EOVERFLOW when the buffer size argument is larger
+     than INT_MAX (if that fits into a 'size_t' at all).
+     Also note that glibc's iconv fails with E2BIG when we pass a length that
+     is so large that str + lenbuf wraps around, i.e.
+     (uintptr_t) (str + lenbuf) < (uintptr_t) str.
+     Therefore set lenbuf = min (SIZE_MAX, INT_MAX, - (uintptr_t) str - 1).  */
+  lenbuf = (SIZE_MAX < INT_MAX ? SIZE_MAX : INT_MAX);
+  if (lenbuf > ~ (uintptr_t) str)
+    lenbuf = ~ (uintptr_t) str;
+
+  va_start (args, format);
+  output = vasnprintf (str, &lenbuf, format, args);
+  len = lenbuf;
+  va_end (args);
+
+  if (!output)
+    return -1;
+
+  if (output != str)
+    {
+      /* len is near SIZE_MAX.  */
+      free (output);
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  if (len > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/stat.c b/lib/stat.c
new file mode 100644
index 0000000..c0bcb88
--- /dev/null
+++ b/lib/stat.c
@@ -0,0 +1,138 @@
+/* Work around platform bugs in stat.
+   Copyright (C) 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* written by Eric Blake */
+
+/* If the user's config.h happens to include <sys/stat.h>, let it include only
+   the system's <sys/stat.h> here, so that orig_stat doesn't recurse to
+   rpl_stat.  */
+#define __need_system_sys_stat_h
+#include <config.h>
+
+/* Get the original definition of stat.  It might be defined as a macro.  */
+#include <sys/types.h>
+#include <sys/stat.h>
+#undef __need_system_sys_stat_h
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if _GL_WINDOWS_64_BIT_ST_SIZE
+#  undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */
+#  define stat _stati64
+#  define REPLACE_FUNC_STAT_DIR 1
+#  undef REPLACE_FUNC_STAT_FILE
+# elif REPLACE_FUNC_STAT_FILE
+/* mingw64 has a broken stat() function, based on _stat(), in libmingwex.a.
+   Bypass it.  */
+#  define stat _stat
+#  define REPLACE_FUNC_STAT_DIR 1
+#  undef REPLACE_FUNC_STAT_FILE
+# endif
+#endif
+
+static int
+orig_stat (const char *filename, struct stat *buf)
+{
+  return stat (filename, buf);
+}
+
+/* Specification.  */
+/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
+   eliminates this include because of the preliminary #include <sys/stat.h>
+   above.  */
+#include "sys/stat.h"
+
+#include <errno.h>
+#include <limits.h>
+#include <stdbool.h>
+#include <string.h>
+#include "dosname.h"
+#include "verify.h"
+
+#if REPLACE_FUNC_STAT_DIR
+# include "pathmax.h"
+  /* The only known systems where REPLACE_FUNC_STAT_DIR is needed also
+     have a constant PATH_MAX.  */
+# ifndef PATH_MAX
+#  error "Please port this replacement to your platform"
+# endif
+#endif
+
+/* Store information about NAME into ST.  Work around bugs with
+   trailing slashes.  Mingw has other bugs (such as st_ino always
+   being 0 on success) which this wrapper does not work around.  But
+   at least this implementation provides the ability to emulate fchdir
+   correctly.  */
+
+int
+rpl_stat (char const *name, struct stat *st)
+{
+  int result = orig_stat (name, st);
+#if REPLACE_FUNC_STAT_FILE
+  /* Solaris 9 mistakenly succeeds when given a non-directory with a
+     trailing slash.  */
+  if (result == 0 && !S_ISDIR (st->st_mode))
+    {
+      size_t len = strlen (name);
+      if (ISSLASH (name[len - 1]))
+        {
+          errno = ENOTDIR;
+          return -1;
+        }
+    }
+#endif /* REPLACE_FUNC_STAT_FILE */
+#if REPLACE_FUNC_STAT_DIR
+
+  if (result == -1 && errno == ENOENT)
+    {
+      /* Due to mingw's oddities, there are some directories (like
+         c:\) where stat() only succeeds with a trailing slash, and
+         other directories (like c:\windows) where stat() only
+         succeeds without a trailing slash.  But we want the two to be
+         synonymous, since chdir() manages either style.  Likewise, Mingw also
+         reports ENOENT for names longer than PATH_MAX, when we want
+         ENAMETOOLONG, and for stat("file/"), when we want ENOTDIR.
+         Fortunately, mingw PATH_MAX is small enough for stack
+         allocation.  */
+      char fixed_name[PATH_MAX + 1] = {0};
+      size_t len = strlen (name);
+      bool check_dir = false;
+      verify (PATH_MAX <= 4096);
+      if (PATH_MAX <= len)
+        errno = ENAMETOOLONG;
+      else if (len)
+        {
+          strcpy (fixed_name, name);
+          if (ISSLASH (fixed_name[len - 1]))
+            {
+              check_dir = true;
+              while (len && ISSLASH (fixed_name[len - 1]))
+                fixed_name[--len] = '\0';
+              if (!len)
+                fixed_name[0] = '/';
+            }
+          else
+            fixed_name[len++] = '/';
+          result = orig_stat (fixed_name, st);
+          if (result == 0 && check_dir && !S_ISDIR (st->st_mode))
+            {
+              result = -1;
+              errno = ENOTDIR;
+            }
+        }
+    }
+#endif /* REPLACE_FUNC_STAT_DIR */
+  return result;
+}
diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h
new file mode 100644
index 0000000..1f8caee
--- /dev/null
+++ b/lib/stdbool.in.h
@@ -0,0 +1,132 @@
+/* Copyright (C) 2001-2003, 2006-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_STDBOOL_H
+#define _GL_STDBOOL_H
+
+/* ISO C 99 <stdbool.h> for platforms that lack it.  */
+
+/* Usage suggestions:
+
+   Programs that use <stdbool.h> should be aware of some limitations
+   and standards compliance issues.
+
+   Standards compliance:
+
+       - <stdbool.h> must be #included before 'bool', 'false', 'true'
+         can be used.
+
+       - You cannot assume that sizeof (bool) == 1.
+
+       - Programs should not undefine the macros bool, true, and false,
+         as C99 lists that as an "obsolescent feature".
+
+   Limitations of this substitute, when used in a C89 environment:
+
+       - <stdbool.h> must be #included before the '_Bool' type can be used.
+
+       - You cannot assume that _Bool is a typedef; it might be a macro.
+
+       - Bit-fields of type 'bool' are not supported.  Portable code
+         should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
+
+       - In C99, casts and automatic conversions to '_Bool' or 'bool' are
+         performed in such a way that every nonzero value gets converted
+         to 'true', and zero gets converted to 'false'.  This doesn't work
+         with this substitute.  With this substitute, only the values 0 and 1
+         give the expected result when converted to _Bool' or 'bool'.
+
+       - C99 allows the use of (_Bool)0.0 in constant expressions, but
+         this substitute cannot always provide this property.
+
+   Also, it is suggested that programs use 'bool' rather than '_Bool';
+   this isn't required, but 'bool' is more common.  */
+
+
+/* 7.16. Boolean type and values */
+
+/* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
+   definitions below, but temporarily we have to #undef them.  */
+#if defined __BEOS__ && !defined __HAIKU__
+# include <OS.h> /* defines bool but not _Bool */
+# undef false
+# undef true
+#endif
+
+#ifdef __cplusplus
+# define _Bool bool
+# define bool bool
+#else
+# if defined __BEOS__ && !defined __HAIKU__
+  /* A compiler known to have 'bool'.  */
+  /* If the compiler already has both 'bool' and '_Bool', we can assume they
+     are the same types.  */
+#  if !@HAVE__BOOL@
+typedef bool _Bool;
+#  endif
+# else
+#  if !defined __GNUC__
+   /* If @HAVE__BOOL@:
+        Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
+        the built-in _Bool type is used.  See
+          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+        Similar bugs are likely with other compilers as well; this file
+        wouldn't be used if <stdbool.h> was working.
+        So we override the _Bool type.
+      If !@HAVE__BOOL@:
+        Need to define _Bool ourselves. As 'signed char' or as an enum type?
+        Use of a typedef, with SunPRO C, leads to a stupid
+          "warning: _Bool is a keyword in ISO C99".
+        Use of an enum type, with IRIX cc, leads to a stupid
+          "warning(1185): enumerated type mixed with another type".
+        Even the existence of an enum type, without a typedef,
+          "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
+        The only benefit of the enum, debuggability, is not important
+        with these compilers.  So use 'signed char' and no enum.  */
+#   define _Bool signed char
+#  else
+   /* With this compiler, trust the _Bool type if the compiler has it.  */
+#   if !@HAVE__BOOL@
+   /* For the sake of symbolic names in gdb, define true and false as
+      enum constants, not only as macros.
+      It is tempting to write
+         typedef enum { false = 0, true = 1 } _Bool;
+      so that gdb prints values of type 'bool' symbolically.  But then
+      values of type '_Bool' might promote to 'int' or 'unsigned int'
+      (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
+      (see ISO C 99 6.3.1.1.(2)).  So add a negative value to the
+      enum; this ensures that '_Bool' promotes to 'int'.  */
+typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
+#   endif
+#  endif
+# endif
+# define bool _Bool
+#endif
+
+/* The other macros must be usable in preprocessor directives.  */
+#ifdef __cplusplus
+# define false false
+# define true true
+#else
+# define false 0
+# define true 1
+#endif
+
+#define __bool_true_false_are_defined 1
+
+#endif /* _GL_STDBOOL_H */
diff --git a/lib/stdbool_.h b/lib/stdbool_.h
deleted file mode 100644
index efa80ba..0000000
--- a/lib/stdbool_.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright (C) 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
-   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
-
-   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _STDBOOL_H
-#define _STDBOOL_H
-
-/* ISO C 99 <stdbool.h> for platforms that lack it.  */
-
-/* Usage suggestions:
-
-   Programs that use <stdbool.h> should be aware of some limitations
-   and standards compliance issues.
-
-   Standards compliance:
-
-       - <stdbool.h> must be #included before 'bool', 'false', 'true'
-         can be used.
-
-       - You cannot assume that sizeof (bool) == 1.
-
-       - Programs should not undefine the macros bool, true, and false,
-         as C99 lists that as an "obsolescent feature".
-
-   Limitations of this substitute, when used in a C89 environment:
-
-       - <stdbool.h> must be #included before the '_Bool' type can be used.
-
-       - You cannot assume that _Bool is a typedef; it might be a macro.
-
-       - In C99, casts and automatic conversions to '_Bool' or 'bool' are
-         performed in such a way that every nonzero value gets converted
-         to 'true', and zero gets converted to 'false'.  This doesn't work
-         with this substitute.  With this substitute, only the values 0 and 1
-         give the expected result when converted to _Bool' or 'bool'.
-
-   Also, it is suggested that programs use 'bool' rather than '_Bool';
-   this isn't required, but 'bool' is more common.  */
-
-
-/* 7.16. Boolean type and values */
-
-/* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
-   definitions below, but temporarily we have to #undef them.  */
-#ifdef __BEOS__
-# include <OS.h> /* defines bool but not _Bool */
-# undef false
-# undef true
-#endif
-
-/* For the sake of symbolic names in gdb, we define true and false as
-   enum constants, not only as macros.
-   It is tempting to write
-      typedef enum { false = 0, true = 1 } _Bool;
-   so that gdb prints values of type 'bool' symbolically. But if we do
-   this, values of type '_Bool' may promote to 'int' or 'unsigned int'
-   (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
-   (see ISO C 99 6.3.1.1.(2)).  So we add a negative value to the
-   enum; this ensures that '_Bool' promotes to 'int'.  */
-#if defined __cplusplus || defined __BEOS__
-  /* A compiler known to have 'bool'.  */
-  /* If the compiler already has both 'bool' and '_Bool', we can assume they
-     are the same types.  */
-# if !@HAVE__BOOL@
-typedef bool _Bool;
-# endif
-#else
-# if !defined __GNUC__
-   /* If @HAVE__BOOL@:
-        Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
-        the built-in _Bool type is used.  See
-          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-          http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-        Similar bugs are likely with other compilers as well; this file
-        wouldn't be used if <stdbool.h> was working.
-        So we override the _Bool type.
-      If !@HAVE__BOOL@:
-        Need to define _Bool ourselves. As 'signed char' or as an enum type?
-        Use of a typedef, with SunPRO C, leads to a stupid
-          "warning: _Bool is a keyword in ISO C99".
-        Use of an enum type, with IRIX cc, leads to a stupid
-          "warning(1185): enumerated type mixed with another type".
-        The only benefit of the enum type, debuggability, is not important
-        with these compilers.  So use 'signed char' and no typedef.  */
-#  define _Bool signed char
-enum { false = 0, true = 1 };
-# else
-   /* With this compiler, trust the _Bool type if the compiler has it.  */
-#  if !@HAVE__BOOL@
-typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
-#  endif
-# endif
-#endif
-#define bool _Bool
-
-/* The other macros must be usable in preprocessor directives.  */
-#define false 0
-#define true 1
-#define __bool_true_false_are_defined 1
-
-#endif /* _STDBOOL_H */
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
new file mode 100644
index 0000000..17fcaea
--- /dev/null
+++ b/lib/stddef.in.h
@@ -0,0 +1,86 @@
+/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
+
+   Copyright (C) 2009-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * POSIX 2008 <stddef.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/stddef.h.html>
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_wchar_t || defined __need_size_t  \
+  || defined __need_ptrdiff_t || defined __need_NULL \
+  || defined __need_wint_t
+/* Special invocation convention inside gcc header files.  In
+   particular, gcc provides a version of <stddef.h> that blindly
+   redefines NULL even when __need_wint_t was defined, even though
+   wint_t is not normally provided by <stddef.h>.  Hence, we must
+   remember if special invocation has ever been used to obtain wint_t,
+   in which case we need to clean up NULL yet again.  */
+
+# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
+#  ifdef __need_wint_t
+#   undef _@GUARD_PREFIX@_STDDEF_H
+#   define _GL_STDDEF_WINT_T
+#  endif
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+# endif
+
+#else
+/* Normal invocation convention.  */
+
+# ifndef _@GUARD_PREFIX@_STDDEF_H
+
+/* The include_next requires a split double-inclusion guard.  */
+
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+
+#  ifndef _@GUARD_PREFIX@_STDDEF_H
+#   define _@GUARD_PREFIX@_STDDEF_H
+
+/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
+#if @REPLACE_NULL@
+# undef NULL
+# ifdef __cplusplus
+   /* ISO C++ says that the macro NULL must expand to an integer constant
+      expression, hence '((void *) 0)' is not allowed in C++.  */
+#  if __GNUG__ >= 3
+    /* GNU C++ has a __null macro that behaves like an integer ('int' or
+       'long') but has the same size as a pointer.  Use that, to avoid
+       warnings.  */
+#   define NULL __null
+#  else
+#   define NULL 0L
+#  endif
+# else
+#  define NULL ((void *) 0)
+# endif
+#endif
+
+/* Some platforms lack wchar_t.  */
+#if !@HAVE_WCHAR_T@
+# define wchar_t int
+#endif
+
+#  endif /* _@GUARD_PREFIX@_STDDEF_H */
+# endif /* _@GUARD_PREFIX@_STDDEF_H */
+#endif /* __need_XXX */
diff --git a/lib/stdint.in.h b/lib/stdint.in.h
new file mode 100644
index 0000000..e2a0eb1
--- /dev/null
+++ b/lib/stdint.in.h
@@ -0,0 +1,636 @@
+/* Copyright (C) 2001-2002, 2004-2012 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
+   This file is part of gnulib.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ */
+
+#ifndef _@GUARD_PREFIX@_STDINT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* When including a system file that in turn includes <inttypes.h>,
+   use the system <inttypes.h>, not our substitute.  This avoids
+   problems with (for example) VMS, whose <sys/bitypes.h> includes
+   <inttypes.h>.  */
+#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* On Android (Bionic libc), <sys/types.h> includes this file before
+   having defined 'time_t'.  Therefore in this case avoid including
+   other system header files; just include the system's <stdint.h>.
+   Ideally we should test __BIONIC__ here, but it is only defined after
+   <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
+#if defined __ANDROID__ \
+    && defined _SYS_TYPES_H_ && !defined _SSIZE_T_DEFINED_
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#else
+
+/* Get those types that are already defined in other system include
+   files, so that we can "#define int8_t signed char" below without
+   worrying about a later system include file containing a "typedef
+   signed char int8_t;" that will get messed up by our macro.  Our
+   macros should all be consistent with the system versions, except
+   for the "fast" types and macros, which we recommend against using
+   in public interfaces due to compiler differences.  */
+
+#if @HAVE_STDINT_H@
+# if defined __sgi && ! defined __c99
+   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
+      with "This header file is to be used only for c99 mode compilations"
+      diagnostics.  */
+#  define __STDINT_H__
+# endif
+
+  /* Some pre-C++11 <stdint.h> implementations need this.  */
+# ifdef __cplusplus
+#  ifndef __STDC_CONSTANT_MACROS
+#   define __STDC_CONSTANT_MACROS 1
+#  endif
+#  ifndef __STDC_LIMIT_MACROS
+#   define __STDC_LIMIT_MACROS 1
+#  endif
+# endif
+
+  /* Other systems may have an incomplete or buggy <stdint.h>.
+     Include it before <inttypes.h>, since any "#include <stdint.h>"
+     in <inttypes.h> would reinclude us, skipping our contents because
+     _@GUARD_PREFIX@_STDINT_H is defined.
+     The include_next requires a split double-inclusion guard.  */
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#endif
+
+#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _@GUARD_PREFIX@_STDINT_H
+
+/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
+   Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
+   relies on the system <stdint.h> definitions, so include
+   <sys/types.h> after @NEXT_STDINT_H@.  */
+#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
+# include <sys/types.h>
+#endif
+
+/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
+   LONG_MIN, LONG_MAX, ULONG_MAX.  */
+#include <limits.h>
+
+#if @HAVE_INTTYPES_H@
+  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
+     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+     <inttypes.h> also defines intptr_t and uintptr_t.  */
+# include <inttypes.h>
+#elif @HAVE_SYS_INTTYPES_H@
+  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
+     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
+# include <sys/inttypes.h>
+#endif
+
+#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
+  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
+     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
+     included by <sys/types.h>.  */
+# include <sys/bitypes.h>
+#endif
+
+#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for an integer type under the usual assumption.
+   Return an unspecified value if BITS == 0, adding a check to pacify
+   picky compilers.  */
+
+#define _STDINT_MIN(signed, bits, zero) \
+  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
+
+#define _STDINT_MAX(signed, bits, zero) \
+  ((signed) \
+   ? ~ _STDINT_MIN (signed, bits, zero) \
+   : /* The expression for the unsigned case.  The subtraction of (signed) \
+        is a nop in the unsigned case and avoids "signed integer overflow" \
+        warnings in the signed case.  */ \
+     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
+
+#if !GNULIB_defined_stdint_types
+
+/* 7.18.1.1. Exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef int8_t
+#undef uint8_t
+typedef signed char gl_int8_t;
+typedef unsigned char gl_uint8_t;
+#define int8_t gl_int8_t
+#define uint8_t gl_uint8_t
+
+#undef int16_t
+#undef uint16_t
+typedef short int gl_int16_t;
+typedef unsigned short int gl_uint16_t;
+#define int16_t gl_int16_t
+#define uint16_t gl_uint16_t
+
+#undef int32_t
+#undef uint32_t
+typedef int gl_int32_t;
+typedef unsigned int gl_uint32_t;
+#define int32_t gl_int32_t
+#define uint32_t gl_uint32_t
+
+/* If the system defines INT64_MAX, assume int64_t works.  That way,
+   if the underlying platform defines int64_t to be a 64-bit long long
+   int, the code below won't mistakenly define it to be a 64-bit long
+   int, which would mess up C++ name mangling.  We must use #ifdef
+   rather than #if, to avoid an error with HP-UX 10.20 cc.  */
+
+#ifdef INT64_MAX
+# define GL_INT64_T
+#else
+/* Do not undefine int64_t if gnulib is not being used with 64-bit
+   types, since otherwise it breaks platforms like Tandem/NSK.  */
+# if LONG_MAX >> 31 >> 31 == 1
+#  undef int64_t
+typedef long int gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# elif defined _MSC_VER
+#  undef int64_t
+typedef __int64 gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# elif @HAVE_LONG_LONG_INT@
+#  undef int64_t
+typedef long long int gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# endif
+#endif
+
+#ifdef UINT64_MAX
+# define GL_UINT64_T
+#else
+# if ULONG_MAX >> 31 >> 31 >> 1 == 1
+#  undef uint64_t
+typedef unsigned long int gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# elif defined _MSC_VER
+#  undef uint64_t
+typedef unsigned __int64 gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# elif @HAVE_UNSIGNED_LONG_LONG_INT@
+#  undef uint64_t
+typedef unsigned long long int gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# endif
+#endif
+
+/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
+#define _UINT8_T
+#define _UINT32_T
+#define _UINT64_T
+
+
+/* 7.18.1.2. Minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef int_least8_t
+#undef uint_least8_t
+#undef int_least16_t
+#undef uint_least16_t
+#undef int_least32_t
+#undef uint_least32_t
+#undef int_least64_t
+#undef uint_least64_t
+#define int_least8_t int8_t
+#define uint_least8_t uint8_t
+#define int_least16_t int16_t
+#define uint_least16_t uint16_t
+#define int_least32_t int32_t
+#define uint_least32_t uint32_t
+#ifdef GL_INT64_T
+# define int_least64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_least64_t uint64_t
+#endif
+
+/* 7.18.1.3. Fastest minimum-width integer types */
+
+/* Note: Other <stdint.h> substitutes may define these types differently.
+   It is not recommended to use these types in public header files. */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  The following code normally
+   uses types consistent with glibc, as that lessens the chance of
+   incompatibility with older GNU hosts.  */
+
+#undef int_fast8_t
+#undef uint_fast8_t
+#undef int_fast16_t
+#undef uint_fast16_t
+#undef int_fast32_t
+#undef uint_fast32_t
+#undef int_fast64_t
+#undef uint_fast64_t
+typedef signed char gl_int_fast8_t;
+typedef unsigned char gl_uint_fast8_t;
+
+#ifdef __sun
+/* Define types compatible with SunOS 5.10, so that code compiled under
+   earlier SunOS versions works with code compiled under SunOS 5.10.  */
+typedef int gl_int_fast32_t;
+typedef unsigned int gl_uint_fast32_t;
+#else
+typedef long int gl_int_fast32_t;
+typedef unsigned long int gl_uint_fast32_t;
+#endif
+typedef gl_int_fast32_t gl_int_fast16_t;
+typedef gl_uint_fast32_t gl_uint_fast16_t;
+
+#define int_fast8_t gl_int_fast8_t
+#define uint_fast8_t gl_uint_fast8_t
+#define int_fast16_t gl_int_fast16_t
+#define uint_fast16_t gl_uint_fast16_t
+#define int_fast32_t gl_int_fast32_t
+#define uint_fast32_t gl_uint_fast32_t
+#ifdef GL_INT64_T
+# define int_fast64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_fast64_t uint64_t
+#endif
+
+/* 7.18.1.4. Integer types capable of holding object pointers */
+
+#undef intptr_t
+#undef uintptr_t
+typedef long int gl_intptr_t;
+typedef unsigned long int gl_uintptr_t;
+#define intptr_t gl_intptr_t
+#define uintptr_t gl_uintptr_t
+
+/* 7.18.1.5. Greatest-width integer types */
+
+/* Note: These types are compiler dependent. It may be unwise to use them in
+   public header files. */
+
+/* If the system defines INTMAX_MAX, assume that intmax_t works, and
+   similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
+   assuming one type where another is used by the system.  */
+
+#ifndef INTMAX_MAX
+# undef INTMAX_C
+# undef intmax_t
+# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+typedef long long int gl_intmax_t;
+#  define intmax_t gl_intmax_t
+# elif defined GL_INT64_T
+#  define intmax_t int64_t
+# else
+typedef long int gl_intmax_t;
+#  define intmax_t gl_intmax_t
+# endif
+#endif
+
+#ifndef UINTMAX_MAX
+# undef UINTMAX_C
+# undef uintmax_t
+# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+typedef unsigned long long int gl_uintmax_t;
+#  define uintmax_t gl_uintmax_t
+# elif defined GL_UINT64_T
+#  define uintmax_t uint64_t
+# else
+typedef unsigned long int gl_uintmax_t;
+#  define uintmax_t gl_uintmax_t
+# endif
+#endif
+
+/* Verify that intmax_t and uintmax_t have the same size.  Too much code
+   breaks if this is not the case.  If this check fails, the reason is likely
+   to be found in the autoconf macros.  */
+typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
+                                ? 1 : -1];
+
+#define GNULIB_defined_stdint_types 1
+#endif /* !GNULIB_defined_stdint_types */
+
+/* 7.18.2. Limits of specified-width integer types */
+
+/* 7.18.2.1. Limits of exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef INT8_MIN
+#undef INT8_MAX
+#undef UINT8_MAX
+#define INT8_MIN  (~ INT8_MAX)
+#define INT8_MAX  127
+#define UINT8_MAX  255
+
+#undef INT16_MIN
+#undef INT16_MAX
+#undef UINT16_MAX
+#define INT16_MIN  (~ INT16_MAX)
+#define INT16_MAX  32767
+#define UINT16_MAX  65535
+
+#undef INT32_MIN
+#undef INT32_MAX
+#undef UINT32_MAX
+#define INT32_MIN  (~ INT32_MAX)
+#define INT32_MAX  2147483647
+#define UINT32_MAX  4294967295U
+
+#if defined GL_INT64_T && ! defined INT64_MAX
+/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
+   evaluates the latter incorrectly in preprocessor expressions.  */
+# define INT64_MIN  (- INTMAX_C (1) << 63)
+# define INT64_MAX  INTMAX_C (9223372036854775807)
+#endif
+
+#if defined GL_UINT64_T && ! defined UINT64_MAX
+# define UINT64_MAX  UINTMAX_C (18446744073709551615)
+#endif
+
+/* 7.18.2.2. Limits of minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef INT_LEAST8_MIN
+#undef INT_LEAST8_MAX
+#undef UINT_LEAST8_MAX
+#define INT_LEAST8_MIN  INT8_MIN
+#define INT_LEAST8_MAX  INT8_MAX
+#define UINT_LEAST8_MAX  UINT8_MAX
+
+#undef INT_LEAST16_MIN
+#undef INT_LEAST16_MAX
+#undef UINT_LEAST16_MAX
+#define INT_LEAST16_MIN  INT16_MIN
+#define INT_LEAST16_MAX  INT16_MAX
+#define UINT_LEAST16_MAX  UINT16_MAX
+
+#undef INT_LEAST32_MIN
+#undef INT_LEAST32_MAX
+#undef UINT_LEAST32_MAX
+#define INT_LEAST32_MIN  INT32_MIN
+#define INT_LEAST32_MAX  INT32_MAX
+#define UINT_LEAST32_MAX  UINT32_MAX
+
+#undef INT_LEAST64_MIN
+#undef INT_LEAST64_MAX
+#ifdef GL_INT64_T
+# define INT_LEAST64_MIN  INT64_MIN
+# define INT_LEAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_LEAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_LEAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.3. Limits of fastest minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  */
+
+#undef INT_FAST8_MIN
+#undef INT_FAST8_MAX
+#undef UINT_FAST8_MAX
+#define INT_FAST8_MIN  SCHAR_MIN
+#define INT_FAST8_MAX  SCHAR_MAX
+#define UINT_FAST8_MAX  UCHAR_MAX
+
+#undef INT_FAST16_MIN
+#undef INT_FAST16_MAX
+#undef UINT_FAST16_MAX
+#define INT_FAST16_MIN  INT_FAST32_MIN
+#define INT_FAST16_MAX  INT_FAST32_MAX
+#define UINT_FAST16_MAX  UINT_FAST32_MAX
+
+#undef INT_FAST32_MIN
+#undef INT_FAST32_MAX
+#undef UINT_FAST32_MAX
+#ifdef __sun
+# define INT_FAST32_MIN  INT_MIN
+# define INT_FAST32_MAX  INT_MAX
+# define UINT_FAST32_MAX  UINT_MAX
+#else
+# define INT_FAST32_MIN  LONG_MIN
+# define INT_FAST32_MAX  LONG_MAX
+# define UINT_FAST32_MAX  ULONG_MAX
+#endif
+
+#undef INT_FAST64_MIN
+#undef INT_FAST64_MAX
+#ifdef GL_INT64_T
+# define INT_FAST64_MIN  INT64_MIN
+# define INT_FAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_FAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_FAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.4. Limits of integer types capable of holding object pointers */
+
+#undef INTPTR_MIN
+#undef INTPTR_MAX
+#undef UINTPTR_MAX
+#define INTPTR_MIN  LONG_MIN
+#define INTPTR_MAX  LONG_MAX
+#define UINTPTR_MAX  ULONG_MAX
+
+/* 7.18.2.5. Limits of greatest-width integer types */
+
+#ifndef INTMAX_MAX
+# undef INTMAX_MIN
+# ifdef INT64_MAX
+#  define INTMAX_MIN  INT64_MIN
+#  define INTMAX_MAX  INT64_MAX
+# else
+#  define INTMAX_MIN  INT32_MIN
+#  define INTMAX_MAX  INT32_MAX
+# endif
+#endif
+
+#ifndef UINTMAX_MAX
+# ifdef UINT64_MAX
+#  define UINTMAX_MAX  UINT64_MAX
+# else
+#  define UINTMAX_MAX  UINT32_MAX
+# endif
+#endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+#undef PTRDIFF_MIN
+#undef PTRDIFF_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
+# else
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
+# endif
+#else
+# define PTRDIFF_MIN  \
+    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+# define PTRDIFF_MAX  \
+    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+#endif
+
+/* sig_atomic_t limits */
+#undef SIG_ATOMIC_MIN
+#undef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+#define SIG_ATOMIC_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+
+
+/* size_t limit */
+#undef SIZE_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
+# else
+#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
+# endif
+#else
+# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
+#endif
+
+/* wchar_t limits */
+/* Get WCHAR_MIN, WCHAR_MAX.
+   This include is not on the top, above, because on OSF/1 4.0 we have a
+   sequence of nested includes
+   <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
+   <stdint.h> and assumes its types are already defined.  */
+#if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# include <wchar.h>
+# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+#endif
+#undef WCHAR_MIN
+#undef WCHAR_MAX
+#define WCHAR_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+#define WCHAR_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+
+/* wint_t limits */
+#undef WINT_MIN
+#undef WINT_MAX
+#define WINT_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+#define WINT_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+
+/* 7.18.4. Macros for integer constants */
+
+/* 7.18.4.1. Macros for minimum-width integer constants */
+/* According to ISO C 99 Technical Corrigendum 1 */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
+
+#undef INT8_C
+#undef UINT8_C
+#define INT8_C(x) x
+#define UINT8_C(x) x
+
+#undef INT16_C
+#undef UINT16_C
+#define INT16_C(x) x
+#define UINT16_C(x) x
+
+#undef INT32_C
+#undef UINT32_C
+#define INT32_C(x) x
+#define UINT32_C(x) x ## U
+
+#undef INT64_C
+#undef UINT64_C
+#if LONG_MAX >> 31 >> 31 == 1
+# define INT64_C(x) x##L
+#elif defined _MSC_VER
+# define INT64_C(x) x##i64
+#elif @HAVE_LONG_LONG_INT@
+# define INT64_C(x) x##LL
+#endif
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# define UINT64_C(x) x##UL
+#elif defined _MSC_VER
+# define UINT64_C(x) x##ui64
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# define UINT64_C(x) x##ULL
+#endif
+
+/* 7.18.4.2. Macros for greatest-width integer constants */
+
+#ifndef INTMAX_C
+# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#  define INTMAX_C(x)   x##LL
+# elif defined GL_INT64_T
+#  define INTMAX_C(x)   INT64_C(x)
+# else
+#  define INTMAX_C(x)   x##L
+# endif
+#endif
+
+#ifndef UINTMAX_C
+# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#  define UINTMAX_C(x)  x##ULL
+# elif defined GL_UINT64_T
+#  define UINTMAX_C(x)  UINT64_C(x)
+# else
+#  define UINTMAX_C(x)  x##UL
+# endif
+#endif
+
+#endif /* _@GUARD_PREFIX@_STDINT_H */
+#endif /* !(defined __ANDROID__ && ...) */
+#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/lib/stdio--.h b/lib/stdio--.h
index b2765fd..307fbde 100644
--- a/lib/stdio--.h
+++ b/lib/stdio--.h
@@ -1,11 +1,11 @@
 /* Like stdio.h, but redefine some names to avoid glitches.
 
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,13 +13,29 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
 #include <stdio.h>
 #include "stdio-safer.h"
 
-#undef fopen
-#define fopen fopen_safer
+#if GNULIB_FOPEN_SAFER
+# undef fopen
+# define fopen fopen_safer
+#endif
+
+#if GNULIB_FREOPEN_SAFER
+# undef freopen
+# define freopen freopen_safer
+#endif
+
+#if GNULIB_TMPFILE_SAFER
+# undef tmpfile
+# define tmpfile tmpfile_safer
+#endif
+
+#if GNULIB_POPEN_SAFER
+# undef popen
+# define popen popen_safer
+#endif
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
new file mode 100644
index 0000000..920b4d4
--- /dev/null
+++ b/lib/stdio-impl.h
@@ -0,0 +1,112 @@
+/* Implementation details of FILE streams.
+   Copyright (C) 2007-2008, 2010-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Many stdio implementations have the same logic and therefore can share
+   the same implementation of stdio extension API, except that some fields
+   have different naming conventions, or their access requires some casts.  */
+
+
+/* BSD stdio derived implementations.  */
+
+#if defined __NetBSD__                         /* NetBSD */
+/* Get __NetBSD_Version__.  */
+# include <sys/param.h>
+#endif
+
+#include <errno.h>                             /* For detecting Plan9.  */
+
+#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */
+
+# if defined __DragonFly__          /* DragonFly */
+  /* See <http://www.dragonflybsd.org/cvsweb/src/lib/libc/stdio/priv_stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.  */
+#  define fp_ ((struct { struct __FILE_public pub; \
+                         struct { unsigned char *_base; int _size; } _bf; \
+                         void *cookie; \
+                         void *_close; \
+                         void *_read; \
+                         void *_seek; \
+                         void *_write; \
+                         struct { unsigned char *_base; int _size; } _ub; \
+                         int _ur; \
+                         unsigned char _ubuf[3]; \
+                         unsigned char _nbuf[1]; \
+                         struct { unsigned char *_base; int _size; } _lb; \
+                         int _blksize; \
+                         fpos_t _offset; \
+                         /* More fields, not relevant here.  */ \
+                       } *) fp)
+  /* See <http://www.dragonflybsd.org/cvsweb/src/include/stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.  */
+#  define _p pub._p
+#  define _flags pub._flags
+#  define _r pub._r
+#  define _w pub._w
+# else
+#  define fp_ fp
+# endif
+
+# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ /* NetBSD >= 1.5ZA, OpenBSD */
+  /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+     and <http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */
+  struct __sfileext
+    {
+      struct  __sbuf _ub; /* ungetc buffer */
+      /* More fields, not relevant here.  */
+    };
+#  define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
+# else                                         /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */
+#  define fp_ub fp_->_ub
+# endif
+
+# define HASUB(fp) (fp_ub._base != NULL)
+
+#endif
+
+
+/* SystemV derived implementations.  */
+
+#ifdef __TANDEM                     /* NonStop Kernel */
+# ifndef _IOERR
+/* These values were determined by the program 'stdioext-flags' at
+   <http://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00165.html>.  */
+#  define _IOERR   0x40
+#  define _IOREAD  0x80
+#  define _IOWRT    0x4
+#  define _IORW   0x100
+# endif
+#endif
+
+#if defined _IOERR
+
+# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
+#  define fp_ ((struct { unsigned char *_ptr; \
+                         unsigned char *_base; \
+                         unsigned char *_end; \
+                         long _cnt; \
+                         int _file; \
+                         unsigned int _flag; \
+                       } *) fp)
+# else
+#  define fp_ fp
+# endif
+
+# if defined _SCO_DS                /* OpenServer */
+#  define _cnt __cnt
+#  define _ptr __ptr
+#  define _base __base
+#  define _flag __flag
+# endif
+
+#endif
diff --git a/lib/stdio-safer.h b/lib/stdio-safer.h
index 0b9a9ab..ac8a450 100644
--- a/lib/stdio-safer.h
+++ b/lib/stdio-safer.h
@@ -1,11 +1,11 @@
 /* Invoke stdio functions, but avoid some glitches.
 
-   Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2006, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,11 +13,24 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
 #include <stdio.h>
 
+#if GNULIB_FOPEN_SAFER
 FILE *fopen_safer (char const *, char const *);
+#endif
+
+#if GNULIB_FREOPEN_SAFER
+FILE *freopen_safer (char const *, char const *, FILE *);
+#endif
+
+#if GNULIB_POPEN_SAFER
+FILE *popen_safer (char const *, char const *);
+#endif
+
+#if GNULIB_TMPFILE_SAFER
+FILE *tmpfile_safer (void);
+#endif
diff --git a/lib/stdio.c b/lib/stdio.c
new file mode 100644
index 0000000..e6ed829
--- /dev/null
+++ b/lib/stdio.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define _GL_STDIO_INLINE _GL_EXTERN_INLINE
+#include "stdio.h"
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
new file mode 100644
index 0000000..f3b52d2
--- /dev/null
+++ b/lib/stdio.in.h
@@ -0,0 +1,1345 @@
+/* A GNU-like <stdio.h>.
+
+   Copyright (C) 2004, 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H
+/* Special invocation convention:
+   - Inside glibc header files.
+   - On OSF/1 5.1 we have a sequence of nested includes
+     <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> ->
+     <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>.
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.  */
+
+#@INCLUDE_NEXT@ @NEXT_STDIO_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_STDIO_H
+
+#define _GL_ALREADY_INCLUDING_STDIO_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STDIO_H@
+
+#undef _GL_ALREADY_INCLUDING_STDIO_H
+
+#ifndef _@GUARD_PREFIX@_STDIO_H
+#define _@GUARD_PREFIX@_STDIO_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_STDIO_INLINE
+# define _GL_STDIO_INLINE _GL_INLINE
+#endif
+
+/* Get va_list.  Needed on many systems, including glibc 2.8.  */
+#include <stdarg.h>
+
+#include <stddef.h>
+
+/* Get off_t and ssize_t.  Needed on many systems, including glibc 2.8
+   and eglibc 2.11.2.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF
+   indicates to GCC that the function takes a format string and arguments,
+   where the format string directives are the ones standardized by ISO C99
+   and POSIX.  */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF,
+   except that it indicates to GCC that the supported format string directives
+   are the ones of the system printf(), rather than the ones standardized by
+   ISO C99 and POSIX.  */
+#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF
+   indicates to GCC that the function takes a format string and arguments,
+   where the format string directives are the ones standardized by ISO C99
+   and POSIX.  */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF,
+   except that it indicates to GCC that the supported format string directives
+   are the ones of the system scanf(), rather than the ones standardized by
+   ISO C99 and POSIX.  */
+#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+
+/* Solaris 10 declares renameat in <unistd.h>, not in <stdio.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Macros for stringification.  */
+#define _GL_STDIO_STRINGIZE(token) #token
+#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token)
+
+
+#if @GNULIB_DPRINTF@
+# if @REPLACE_DPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dprintf rpl_dprintf
+#  endif
+_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...));
+# else
+#  if !@HAVE_DPRINTF@
+_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (dprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef dprintf
+# if HAVE_RAW_DECL_DPRINTF
+_GL_WARN_ON_USE (dprintf, "dprintf is unportable - "
+                 "use gnulib module dprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_FCLOSE@
+/* Close STREAM and its underlying file descriptor.  */
+# if @REPLACE_FCLOSE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fclose rpl_fclose
+#  endif
+_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fclose, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fclose);
+#elif defined GNULIB_POSIXCHECK
+# undef fclose
+/* Assume fclose is always declared.  */
+_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
+                 "use gnulib module fclose for portable POSIX compliance");
+#endif
+
+#if @GNULIB_FDOPEN@
+# if @REPLACE_FDOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fdopen
+#   define fdopen rpl_fdopen
+#  endif
+_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
+# endif
+_GL_CXXALIASWARN (fdopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fdopen
+/* Assume fdopen is always declared.  */
+_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module fdopen for portability");
+#endif
+
+#if @GNULIB_FFLUSH@
+/* Flush all pending data on STREAM according to POSIX rules.  Both
+   output and seekable input streams are supported.
+   Note! LOSS OF DATA can occur if fflush is applied on an input stream
+   that is _not_seekable_ or on an update stream that is _not_seekable_
+   and in which the most recent operation was input.  Seekability can
+   be tested with lseek(fileno(fp),0,SEEK_CUR).  */
+# if @REPLACE_FFLUSH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fflush rpl_fflush
+#  endif
+_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream));
+_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream));
+# else
+_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fflush);
+#elif defined GNULIB_POSIXCHECK
+# undef fflush
+/* Assume fflush is always declared.  */
+_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - "
+                 "use gnulib module fflush for portable POSIX compliance");
+#endif
+
+#if @GNULIB_FGETC@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fgetc
+#   define fgetc rpl_fgetc
+#  endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fgetc);
+#endif
+
+#if @GNULIB_FGETS@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fgets
+#   define fgets rpl_fgets
+#  endif
+_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream)
+                                 _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fgets);
+#endif
+
+#if @GNULIB_FOPEN@
+# if @REPLACE_FOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fopen
+#   define fopen rpl_fopen
+#  endif
+_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode));
+# endif
+_GL_CXXALIASWARN (fopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fopen
+/* Assume fopen is always declared.  */
+_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module fopen for portability");
+#endif
+
+#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@
+# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \
+     || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fprintf rpl_fprintf
+#  endif
+#  define GNULIB_overrides_fprintf 1
+#  if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  else
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fprintf);
+#endif
+#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_fprintf
+#  undef fprintf
+# endif
+/* Assume fprintf is always declared.  */
+_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - "
+                 "use gnulib module fprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_FPURGE@
+/* Discard all pending buffered I/O data on STREAM.
+   STREAM must not be wide-character oriented.
+   When discarding pending output, the file position is set back to where it
+   was before the write calls.  When discarding pending input, the file
+   position is advanced to match the end of the previously read input.
+   Return 0 if successful.  Upon error, return -1 and set errno.  */
+# if @REPLACE_FPURGE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fpurge rpl_fpurge
+#  endif
+_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream));
+# else
+#  if !@HAVE_DECL_FPURGE@
+_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fpurge);
+#elif defined GNULIB_POSIXCHECK
+# undef fpurge
+# if HAVE_RAW_DECL_FPURGE
+_GL_WARN_ON_USE (fpurge, "fpurge is not always present - "
+                 "use gnulib module fpurge for portability");
+# endif
+#endif
+
+#if @GNULIB_FPUTC@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputc
+#   define fputc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputc);
+#endif
+
+#if @GNULIB_FPUTS@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputs
+#   define fputs rpl_fputs
+#  endif
+_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputs);
+#endif
+
+#if @GNULIB_FREAD@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fread
+#   define fread rpl_fread
+#  endif
+_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)
+                                 _GL_ARG_NONNULL ((4)));
+_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fread);
+#endif
+
+#if @GNULIB_FREOPEN@
+# if @REPLACE_FREOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef freopen
+#   define freopen rpl_freopen
+#  endif
+_GL_FUNCDECL_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# endif
+_GL_CXXALIASWARN (freopen);
+#elif defined GNULIB_POSIXCHECK
+# undef freopen
+/* Assume freopen is always declared.  */
+_GL_WARN_ON_USE (freopen,
+                 "freopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module freopen for portability");
+#endif
+
+#if @GNULIB_FSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fscanf
+#   define fscanf rpl_fscanf
+#  endif
+_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...)
+                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3)
+                               _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fscanf);
+#endif
+
+
+/* Set up the following warnings, based on which modules are in use.
+   GNU Coding Standards discourage the use of fseek, since it imposes
+   an arbitrary limitation on some 32-bit hosts.  Remember that the
+   fseek module depends on the fseeko module, so we only have three
+   cases to consider:
+
+   1. The developer is not using either module.  Issue a warning under
+   GNULIB_POSIXCHECK for both functions, to remind them that both
+   functions have bugs on some systems.  _GL_NO_LARGE_FILES has no
+   impact on this warning.
+
+   2. The developer is using both modules.  They may be unaware of the
+   arbitrary limitations of fseek, so issue a warning under
+   GNULIB_POSIXCHECK.  On the other hand, they may be using both
+   modules intentionally, so the developer can define
+   _GL_NO_LARGE_FILES in the compilation units where the use of fseek
+   is safe, to silence the warning.
+
+   3. The developer is using the fseeko module, but not fseek.  Gnulib
+   guarantees that fseek will still work around platform bugs in that
+   case, but we presume that the developer is aware of the pitfalls of
+   fseek and was trying to avoid it, so issue a warning even when
+   GNULIB_POSIXCHECK is undefined.  Again, _GL_NO_LARGE_FILES can be
+   defined to silence the warning in particular compilation units.
+   In C++ compilations with GNULIB_NAMESPACE, in order to avoid that
+   fseek gets defined as a macro, it is recommended that the developer
+   uses the fseek module, even if he is not calling the fseek function.
+
+   Most gnulib clients that perform stream operations should fall into
+   category 3.  */
+
+#if @GNULIB_FSEEK@
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 2, above.  */
+#  undef fseek
+# endif
+# if @REPLACE_FSEEK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseek
+#   define fseek rpl_fseek
+#  endif
+_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence));
+# else
+_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseek);
+#endif
+
+#if @GNULIB_FSEEKO@
+# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 3, above.  */
+#  undef fseek
+# endif
+# if @REPLACE_FSEEKO@
+/* Provide an fseeko function that is aware of a preceding fflush(), and which
+   detects pipes.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseeko
+#   define fseeko rpl_fseeko
+#  endif
+_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence));
+# else
+#  if ! @HAVE_DECL_FSEEKO@
+_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseeko);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FSEEK_WARN /* Category 1, above.  */
+# undef fseek
+# undef fseeko
+# if HAVE_RAW_DECL_FSEEKO
+_GL_WARN_ON_USE (fseeko, "fseeko is unportable - "
+                 "use gnulib module fseeko for portability");
+# endif
+#endif
+
+#ifdef _GL_FSEEK_WARN
+# undef _GL_FSEEK_WARN
+/* Here, either fseek is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_fseek (declared above).  */
+_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use fseeko function for handling of large files");
+#endif
+
+
+/* ftell, ftello.  See the comments on fseek/fseeko.  */
+
+#if @GNULIB_FTELL@
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 2, above.  */
+#  undef ftell
+# endif
+# if @REPLACE_FTELL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftell
+#   define ftell rpl_ftell
+#  endif
+_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftell, long, (FILE *fp));
+# else
+_GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftell);
+#endif
+
+#if @GNULIB_FTELLO@
+# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 3, above.  */
+#  undef ftell
+# endif
+# if @REPLACE_FTELLO@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftello
+#   define ftello rpl_ftello
+#  endif
+_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp));
+# else
+#  if ! @HAVE_DECL_FTELLO@
+_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftello);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FTELL_WARN /* Category 1, above.  */
+# undef ftell
+# undef ftello
+# if HAVE_RAW_DECL_FTELLO
+_GL_WARN_ON_USE (ftello, "ftello is unportable - "
+                 "use gnulib module ftello for portability");
+# endif
+#endif
+
+#ifdef _GL_FTELL_WARN
+# undef _GL_FTELL_WARN
+/* Here, either ftell is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_ftell (declared above).  */
+_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use ftello function for handling of large files");
+#endif
+
+
+#if @GNULIB_FWRITE@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fwrite
+#   define fwrite rpl_fwrite
+#  endif
+_GL_FUNCDECL_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+
+/* Work around glibc bug 11959
+   <http://sources.redhat.com/bugzilla/show_bug.cgi?id=11959>,
+   which sometimes causes an unwanted diagnostic for fwrite calls.
+   This affects only function declaration attributes, so it's not
+   needed for C++.  */
+#  if !defined __cplusplus && 0 < __USE_FORTIFY_LEVEL
+_GL_STDIO_INLINE size_t _GL_ARG_NONNULL ((1, 4))
+rpl_fwrite (const void *ptr, size_t s, size_t n, FILE *stream)
+{
+  size_t r = fwrite (ptr, s, n, stream);
+  (void) r;
+  return r;
+}
+#   undef fwrite
+#   define fwrite rpl_fwrite
+#  endif
+# endif
+_GL_CXXALIASWARN (fwrite);
+#endif
+
+#if @GNULIB_GETC@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getc
+#   define getc rpl_fgetc
+#  endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (getc, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (getc);
+#endif
+
+#if @GNULIB_GETCHAR@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getchar
+#   define getchar rpl_getchar
+#  endif
+_GL_FUNCDECL_RPL (getchar, int, (void));
+_GL_CXXALIAS_RPL (getchar, int, (void));
+# else
+_GL_CXXALIAS_SYS (getchar, int, (void));
+# endif
+_GL_CXXALIASWARN (getchar);
+#endif
+
+#if @GNULIB_GETDELIM@
+/* Read input, up to (and including) the next occurrence of DELIMITER, from
+   STREAM, store it in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if @REPLACE_GETDELIM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdelim
+#   define getdelim rpl_getdelim
+#  endif
+_GL_FUNCDECL_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+_GL_CXXALIAS_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# else
+#  if !@HAVE_DECL_GETDELIM@
+_GL_FUNCDECL_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# endif
+_GL_CXXALIASWARN (getdelim);
+#elif defined GNULIB_POSIXCHECK
+# undef getdelim
+# if HAVE_RAW_DECL_GETDELIM
+_GL_WARN_ON_USE (getdelim, "getdelim is unportable - "
+                 "use gnulib module getdelim for portability");
+# endif
+#endif
+
+#if @GNULIB_GETLINE@
+/* Read a line, up to (and including) the next newline, from STREAM, store it
+   in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if @REPLACE_GETLINE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getline
+#   define getline rpl_getline
+#  endif
+_GL_FUNCDECL_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# else
+#  if !@HAVE_DECL_GETLINE@
+_GL_FUNCDECL_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# endif
+# if @HAVE_DECL_GETLINE@
+_GL_CXXALIASWARN (getline);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getline
+# if HAVE_RAW_DECL_GETLINE
+_GL_WARN_ON_USE (getline, "getline is unportable - "
+                 "use gnulib module getline for portability");
+# endif
+#endif
+
+/* It is very rare that the developer ever has full control of stdin,
+   so any use of gets warrants an unconditional warning; besides, C11
+   removed it.  */
+#undef gets
+#if HAVE_RAW_DECL_GETS
+_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#endif
+
+
+#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@
+struct obstack;
+/* Grow an obstack with formatted output.  Return the number of
+   bytes added to OBS.  No trailing nul byte is added, and the
+   object should be closed with obstack_finish before use.  Upon
+   memory allocation error, call obstack_alloc_failed_handler.  Upon
+   other error, return -1.  */
+# if @REPLACE_OBSTACK_PRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_printf rpl_obstack_printf
+#  endif
+_GL_FUNCDECL_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# else
+#  if !@HAVE_DECL_OBSTACK_PRINTF@
+_GL_FUNCDECL_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (obstack_printf);
+# if @REPLACE_OBSTACK_PRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_vprintf rpl_obstack_vprintf
+#  endif
+_GL_FUNCDECL_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# else
+#  if !@HAVE_DECL_OBSTACK_PRINTF@
+_GL_FUNCDECL_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (obstack_vprintf);
+#endif
+
+#if @GNULIB_PCLOSE@
+# if !@HAVE_PCLOSE@
+_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pclose, int, (FILE *stream));
+_GL_CXXALIASWARN (pclose);
+#elif defined GNULIB_POSIXCHECK
+# undef pclose
+# if HAVE_RAW_DECL_PCLOSE
+_GL_WARN_ON_USE (pclose, "pclose is unportable - "
+                 "use gnulib module pclose for more portability");
+# endif
+#endif
+
+#if @GNULIB_PERROR@
+/* Print a message to standard error, describing the value of ERRNO,
+   (if STRING is not NULL and not empty) prefixed with STRING and ": ",
+   and terminated with a newline.  */
+# if @REPLACE_PERROR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define perror rpl_perror
+#  endif
+_GL_FUNCDECL_RPL (perror, void, (const char *string));
+_GL_CXXALIAS_RPL (perror, void, (const char *string));
+# else
+_GL_CXXALIAS_SYS (perror, void, (const char *string));
+# endif
+_GL_CXXALIASWARN (perror);
+#elif defined GNULIB_POSIXCHECK
+# undef perror
+/* Assume perror is always declared.  */
+_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
+                 "use gnulib module perror for portability");
+#endif
+
+#if @GNULIB_POPEN@
+# if @REPLACE_POPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef popen
+#   define popen rpl_popen
+#  endif
+_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
+# else
+#  if !@HAVE_POPEN@
+_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
+# endif
+_GL_CXXALIASWARN (popen);
+#elif defined GNULIB_POSIXCHECK
+# undef popen
+# if HAVE_RAW_DECL_POPEN
+_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
+                 "use gnulib module popen or pipe for more portability");
+# endif
+#endif
+
+#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@
+# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \
+     || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+#  if defined __GNUC__
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+/* Don't break __attribute__((format(printf,M,N))).  */
+#    define printf __printf__
+#   endif
+#   if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __asm__ (@ASM_SYMBOL_PREFIX@
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+                    _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+#   else
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __asm__ (@ASM_SYMBOL_PREFIX@
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+                    _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...));
+#  else
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define printf rpl_printf
+#   endif
+_GL_FUNCDECL_RPL (printf, int,
+                  (const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (printf, int, (const char *format, ...));
+#  endif
+#  define GNULIB_overrides_printf 1
+# else
+_GL_CXXALIAS_SYS (printf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (printf);
+#endif
+#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_printf
+#  undef printf
+# endif
+/* Assume printf is always declared.  */
+_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - "
+                 "use gnulib module printf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_PUTC@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putc
+#   define putc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (putc);
+#endif
+
+#if @GNULIB_PUTCHAR@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putchar
+#   define putchar rpl_putchar
+#  endif
+_GL_FUNCDECL_RPL (putchar, int, (int c));
+_GL_CXXALIAS_RPL (putchar, int, (int c));
+# else
+_GL_CXXALIAS_SYS (putchar, int, (int c));
+# endif
+_GL_CXXALIASWARN (putchar);
+#endif
+
+#if @GNULIB_PUTS@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef puts
+#   define puts rpl_puts
+#  endif
+_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (puts, int, (const char *string));
+# else
+_GL_CXXALIAS_SYS (puts, int, (const char *string));
+# endif
+_GL_CXXALIASWARN (puts);
+#endif
+
+#if @GNULIB_REMOVE@
+# if @REPLACE_REMOVE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remove
+#   define remove rpl_remove
+#  endif
+_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (remove, int, (const char *name));
+# else
+_GL_CXXALIAS_SYS (remove, int, (const char *name));
+# endif
+_GL_CXXALIASWARN (remove);
+#elif defined GNULIB_POSIXCHECK
+# undef remove
+/* Assume remove is always declared.  */
+_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - "
+                 "use gnulib module remove for more portability");
+#endif
+
+#if @GNULIB_RENAME@
+# if @REPLACE_RENAME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef rename
+#   define rename rpl_rename
+#  endif
+_GL_FUNCDECL_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# else
+_GL_CXXALIAS_SYS (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# endif
+_GL_CXXALIASWARN (rename);
+#elif defined GNULIB_POSIXCHECK
+# undef rename
+/* Assume rename is always declared.  */
+_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - "
+                 "use gnulib module rename for more portability");
+#endif
+
+#if @GNULIB_RENAMEAT@
+# if @REPLACE_RENAMEAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef renameat
+#   define renameat rpl_renameat
+#  endif
+_GL_FUNCDECL_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# else
+#  if !@HAVE_RENAMEAT@
+_GL_FUNCDECL_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# endif
+_GL_CXXALIASWARN (renameat);
+#elif defined GNULIB_POSIXCHECK
+# undef renameat
+# if HAVE_RAW_DECL_RENAMEAT
+_GL_WARN_ON_USE (renameat, "renameat is not portable - "
+                 "use gnulib module renameat for portability");
+# endif
+#endif
+
+#if @GNULIB_SCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if defined __GNUC__
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef scanf
+/* Don't break __attribute__((format(scanf,M,N))).  */
+#    define scanf __scanf__
+#   endif
+_GL_FUNCDECL_RPL_1 (__scanf__, int,
+                    (const char *format, ...)
+                    __asm__ (@ASM_SYMBOL_PREFIX@
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf))
+                    _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...));
+#  else
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef scanf
+#    define scanf rpl_scanf
+#   endif
+_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...)
+                              _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...));
+#  endif
+# else
+_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (scanf);
+#endif
+
+#if @GNULIB_SNPRINTF@
+# if @REPLACE_SNPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define snprintf rpl_snprintf
+#  endif
+_GL_FUNCDECL_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# else
+#  if !@HAVE_DECL_SNPRINTF@
+_GL_FUNCDECL_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (snprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef snprintf
+# if HAVE_RAW_DECL_SNPRINTF
+_GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
+                 "use gnulib module snprintf for portability");
+# endif
+#endif
+
+/* Some people would argue that all sprintf uses should be warned about
+   (for example, OpenBSD issues a link warning for it),
+   since it can cause security holes due to buffer overruns.
+   However, we believe that sprintf can be used safely, and is more
+   efficient than snprintf in those safe cases; and as proof of our
+   belief, we use sprintf in several gnulib modules.  So this header
+   intentionally avoids adding a warning to sprintf except when
+   GNULIB_POSIXCHECK is defined.  */
+
+#if @GNULIB_SPRINTF_POSIX@
+# if @REPLACE_SPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define sprintf rpl_sprintf
+#  endif
+_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (sprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef sprintf
+/* Assume sprintf is always declared.  */
+_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - "
+                 "use gnulib module sprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_TMPFILE@
+# if @REPLACE_TMPFILE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define tmpfile rpl_tmpfile
+#  endif
+_GL_FUNCDECL_RPL (tmpfile, FILE *, (void));
+_GL_CXXALIAS_RPL (tmpfile, FILE *, (void));
+# else
+_GL_CXXALIAS_SYS (tmpfile, FILE *, (void));
+# endif
+_GL_CXXALIASWARN (tmpfile);
+#elif defined GNULIB_POSIXCHECK
+# undef tmpfile
+# if HAVE_RAW_DECL_TMPFILE
+_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - "
+                 "use gnulib module tmpfile for portability");
+# endif
+#endif
+
+#if @GNULIB_VASPRINTF@
+/* Write formatted output to a string dynamically allocated with malloc().
+   If the memory allocation succeeds, store the address of the string in
+   *RESULT and return the number of resulting bytes, excluding the trailing
+   NUL.  Upon memory allocation error, or some other error, return -1.  */
+# if @REPLACE_VASPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define asprintf rpl_asprintf
+#  endif
+_GL_FUNCDECL_RPL (asprintf, int,
+                  (char **result, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (asprintf, int,
+                  (char **result, const char *format, ...));
+# else
+#  if !@HAVE_VASPRINTF@
+_GL_FUNCDECL_SYS (asprintf, int,
+                  (char **result, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (asprintf, int,
+                  (char **result, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (asprintf);
+# if @REPLACE_VASPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vasprintf rpl_vasprintf
+#  endif
+_GL_FUNCDECL_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# else
+#  if !@HAVE_VASPRINTF@
+_GL_FUNCDECL_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vasprintf);
+#endif
+
+#if @GNULIB_VDPRINTF@
+# if @REPLACE_VDPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vdprintf rpl_vdprintf
+#  endif
+_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args));
+# else
+#  if !@HAVE_VDPRINTF@
+_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+/* Need to cast, because on Solaris, the third parameter will likely be
+                                                    __va_list args.  */
+_GL_CXXALIAS_SYS_CAST (vdprintf, int,
+                       (int fd, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vdprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vdprintf
+# if HAVE_RAW_DECL_VDPRINTF
+_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - "
+                 "use gnulib module vdprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@
+# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \
+     || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vfprintf rpl_vfprintf
+#  endif
+#  define GNULIB_overrides_vfprintf 1
+#  if @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  else
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+                                                      __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vfprintf, int,
+                       (FILE *fp, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfprintf);
+#endif
+#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vfprintf
+#  undef vfprintf
+# endif
+/* Assume vfprintf is always declared.  */
+_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - "
+                 "use gnulib module vfprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+#if @GNULIB_VFSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef vfscanf
+#   define vfscanf rpl_vfscanf
+#  endif
+_GL_FUNCDECL_RPL (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfscanf);
+#endif
+
+#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@
+# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \
+     || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vprintf rpl_vprintf
+#  endif
+#  define GNULIB_overrides_vprintf 1
+#  if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0)
+                                _GL_ARG_NONNULL ((1)));
+#  else
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0)
+                                _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the second parameter is
+                                                          __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vprintf);
+#endif
+#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vprintf
+#  undef vprintf
+# endif
+/* Assume vprintf is always declared.  */
+_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - "
+                 "use gnulib module vprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_VSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef vscanf
+#   define vscanf rpl_vscanf
+#  endif
+_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args)
+                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vscanf);
+#endif
+
+#if @GNULIB_VSNPRINTF@
+# if @REPLACE_VSNPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsnprintf rpl_vsnprintf
+#  endif
+_GL_FUNCDECL_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# else
+#  if !@HAVE_DECL_VSNPRINTF@
+_GL_FUNCDECL_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsnprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsnprintf
+# if HAVE_RAW_DECL_VSNPRINTF
+_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
+                 "use gnulib module vsnprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_VSPRINTF_POSIX@
+# if @REPLACE_VSPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsprintf rpl_vsprintf
+#  endif
+_GL_FUNCDECL_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+                                                       __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vsprintf, int,
+                       (char *str, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsprintf
+/* Assume vsprintf is always declared.  */
+_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - "
+                 "use gnulib module vsprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _@GUARD_PREFIX@_STDIO_H */
+#endif /* _@GUARD_PREFIX@_STDIO_H */
+#endif
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
new file mode 100644
index 0000000..6555840
--- /dev/null
+++ b/lib/stdlib.in.h
@@ -0,0 +1,937 @@
+/* A GNU-like <stdlib.h>.
+
+   Copyright (C) 1995, 2001-2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_malloc_and_calloc
+/* Special invocation convention inside glibc header files.  */
+
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_STDLIB_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#ifndef _@GUARD_PREFIX@_STDLIB_H
+#define _@GUARD_PREFIX@_STDLIB_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>.  */
+#if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS
+# include <sys/wait.h>
+#endif
+
+/* Solaris declares getloadavg() in <sys/loadavg.h>.  */
+#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@
+# include <sys/loadavg.h>
+#endif
+
+/* Native Windows platforms declare mktemp() in <io.h>.  */
+#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+#if @GNULIB_RANDOM_R@
+
+/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included
+   from <stdlib.h> if _REENTRANT is defined.  Include it whenever we need
+   'struct random_data'.  */
+# if @HAVE_RANDOM_H@
+#  include <random.h>
+# endif
+
+# if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@
+#  include <stdint.h>
+# endif
+
+# if !@HAVE_STRUCT_RANDOM_DATA@
+/* Define 'struct random_data'.
+   But allow multiple gnulib generated <stdlib.h> replacements to coexist.  */
+#  if !GNULIB_defined_struct_random_data
+struct random_data
+{
+  int32_t *fptr;                /* Front pointer.  */
+  int32_t *rptr;                /* Rear pointer.  */
+  int32_t *state;               /* Array of state values.  */
+  int rand_type;                /* Type of random number generator.  */
+  int rand_deg;                 /* Degree of random number generator.  */
+  int rand_sep;                 /* Distance between front and rear.  */
+  int32_t *end_ptr;             /* Pointer behind state table.  */
+};
+#   define GNULIB_defined_struct_random_data 1
+#  endif
+# endif
+#endif
+
+#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+/* On Mac OS X 10.3, only <unistd.h> declares mkstemp.  */
+/* On Mac OS X 10.5, only <unistd.h> declares mkstemps.  */
+/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt.  */
+/* But avoid namespace pollution on glibc systems and native Windows.  */
+# include <unistd.h>
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The definition of _Noreturn is copied here.  */
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Some systems do not define EXIT_*, despite otherwise supporting C89.  */
+#ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+#endif
+/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
+   with proper operation of xargs.  */
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#elif EXIT_FAILURE != 1
+# undef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+
+#if @GNULIB__EXIT@
+/* Terminate the current process with the given return code, without running
+   the 'atexit' handlers.  */
+# if !@HAVE__EXIT@
+_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status));
+# endif
+_GL_CXXALIAS_SYS (_Exit, void, (int status));
+_GL_CXXALIASWARN (_Exit);
+#elif defined GNULIB_POSIXCHECK
+# undef _Exit
+# if HAVE_RAW_DECL__EXIT
+_GL_WARN_ON_USE (_Exit, "_Exit is unportable - "
+                 "use gnulib module _Exit for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ATOLL@
+/* Parse a signed decimal integer.
+   Returns the value of the integer.  Errors are not detected.  */
+# if !@HAVE_ATOLL@
+_GL_FUNCDECL_SYS (atoll, long long, (const char *string)
+                                    _GL_ATTRIBUTE_PURE
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (atoll, long long, (const char *string));
+_GL_CXXALIASWARN (atoll);
+#elif defined GNULIB_POSIXCHECK
+# undef atoll
+# if HAVE_RAW_DECL_ATOLL
+_GL_WARN_ON_USE (atoll, "atoll is unportable - "
+                 "use gnulib module atoll for portability");
+# endif
+#endif
+
+#if @GNULIB_CALLOC_POSIX@
+# if @REPLACE_CALLOC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef calloc
+#   define calloc rpl_calloc
+#  endif
+_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size));
+_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size));
+# else
+_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
+# endif
+_GL_CXXALIASWARN (calloc);
+#elif defined GNULIB_POSIXCHECK
+# undef calloc
+/* Assume calloc is always declared.  */
+_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "
+                 "use gnulib module calloc-posix for portability");
+#endif
+
+#if @GNULIB_CANONICALIZE_FILE_NAME@
+# if @REPLACE_CANONICALIZE_FILE_NAME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define canonicalize_file_name rpl_canonicalize_file_name
+#  endif
+_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
+# else
+#  if !@HAVE_CANONICALIZE_FILE_NAME@
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
+# endif
+_GL_CXXALIASWARN (canonicalize_file_name);
+#elif defined GNULIB_POSIXCHECK
+# undef canonicalize_file_name
+# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+_GL_WARN_ON_USE (canonicalize_file_name,
+                 "canonicalize_file_name is unportable - "
+                 "use gnulib module canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if @GNULIB_GETLOADAVG@
+/* Store max(NELEM,3) load average numbers in LOADAVG[].
+   The three numbers are the load average of the last 1 minute, the last 5
+   minutes, and the last 15 minutes, respectively.
+   LOADAVG is an array of NELEM numbers.  */
+# if !@HAVE_DECL_GETLOADAVG@
+_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem));
+_GL_CXXALIASWARN (getloadavg);
+#elif defined GNULIB_POSIXCHECK
+# undef getloadavg
+# if HAVE_RAW_DECL_GETLOADAVG
+_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - "
+                 "use gnulib module getloadavg for portability");
+# endif
+#endif
+
+#if @GNULIB_GETSUBOPT@
+/* Assuming *OPTIONP is a comma separated list of elements of the form
+   "token" or "token=value", getsubopt parses the first of these elements.
+   If the first element refers to a "token" that is member of the given
+   NULL-terminated array of tokens:
+     - It replaces the comma with a NUL byte, updates *OPTIONP to point past
+       the first option and the comma, sets *VALUEP to the value of the
+       element (or NULL if it doesn't contain an "=" sign),
+     - It returns the index of the "token" in the given array of tokens.
+   Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
+   For more details see the POSIX:2001 specification.
+   http://www.opengroup.org/susv3xsh/getsubopt.html */
+# if !@HAVE_GETSUBOPT@
+_GL_FUNCDECL_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+# endif
+_GL_CXXALIAS_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep));
+_GL_CXXALIASWARN (getsubopt);
+#elif defined GNULIB_POSIXCHECK
+# undef getsubopt
+# if HAVE_RAW_DECL_GETSUBOPT
+_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - "
+                 "use gnulib module getsubopt for portability");
+# endif
+#endif
+
+#if @GNULIB_GRANTPT@
+/* Change the ownership and access permission of the slave side of the
+   pseudo-terminal whose master side is specified by FD.  */
+# if !@HAVE_GRANTPT@
+_GL_FUNCDECL_SYS (grantpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (grantpt, int, (int fd));
+_GL_CXXALIASWARN (grantpt);
+#elif defined GNULIB_POSIXCHECK
+# undef grantpt
+# if HAVE_RAW_DECL_GRANTPT
+_GL_WARN_ON_USE (grantpt, "grantpt is not portable - "
+                 "use gnulib module grantpt for portability");
+# endif
+#endif
+
+/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not
+   rely on GNU or POSIX semantics for malloc and realloc (for example,
+   by never specifying a zero size), so it does not need malloc or
+   realloc to be redefined.  */
+#if @GNULIB_MALLOC_POSIX@
+# if @REPLACE_MALLOC@
+#  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+        || _GL_USE_STDLIB_ALLOC)
+#   undef malloc
+#   define malloc rpl_malloc
+#  endif
+_GL_FUNCDECL_RPL (malloc, void *, (size_t size));
+_GL_CXXALIAS_RPL (malloc, void *, (size_t size));
+# else
+_GL_CXXALIAS_SYS (malloc, void *, (size_t size));
+# endif
+_GL_CXXALIASWARN (malloc);
+#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef malloc
+/* Assume malloc is always declared.  */
+_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
+                 "use gnulib module malloc-posix for portability");
+#endif
+
+/* Convert a multibyte character to a wide character.  */
+#if @GNULIB_MBTOWC@
+# if @REPLACE_MBTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbtowc
+#   define mbtowc rpl_mbtowc
+#  endif
+_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+# else
+_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+# endif
+_GL_CXXALIASWARN (mbtowc);
+#endif
+
+#if @GNULIB_MKDTEMP@
+/* Create a unique temporary directory from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the directory name unique.
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+   The directory is created mode 700.  */
+# if !@HAVE_MKDTEMP@
+_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/));
+_GL_CXXALIASWARN (mkdtemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdtemp
+# if HAVE_RAW_DECL_MKDTEMP
+_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - "
+                 "use gnulib module mkdtemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKOSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKOSTEMP@
+_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemp
+# if HAVE_RAW_DECL_MKOSTEMP
+_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - "
+                 "use gnulib module mkostemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKOSTEMPS@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE before a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKOSTEMPS@
+_GL_FUNCDECL_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemps
+# if HAVE_RAW_DECL_MKOSTEMPS
+_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - "
+                 "use gnulib module mkostemps for portability");
+# endif
+#endif
+
+#if @GNULIB_MKSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if @REPLACE_MKSTEMP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkstemp rpl_mkstemp
+#  endif
+_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/));
+# else
+#  if ! @HAVE_MKSTEMP@
+_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/));
+# endif
+_GL_CXXALIASWARN (mkstemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemp
+# if HAVE_RAW_DECL_MKSTEMP
+_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - "
+                 "use gnulib module mkstemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKSTEMPS@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE prior to a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKSTEMPS@
+_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/));
+_GL_CXXALIASWARN (mkstemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemps
+# if HAVE_RAW_DECL_MKSTEMPS
+_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - "
+                 "use gnulib module mkstemps for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_OPENPT@
+/* Return an FD open to the master side of a pseudo-terminal.  Flags should
+   include O_RDWR, and may also include O_NOCTTY.  */
+# if !@HAVE_POSIX_OPENPT@
+_GL_FUNCDECL_SYS (posix_openpt, int, (int flags));
+# endif
+_GL_CXXALIAS_SYS (posix_openpt, int, (int flags));
+_GL_CXXALIASWARN (posix_openpt);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_openpt
+# if HAVE_RAW_DECL_POSIX_OPENPT
+_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - "
+                 "use gnulib module posix_openpt for portability");
+# endif
+#endif
+
+#if @GNULIB_PTSNAME@
+/* Return the pathname of the pseudo-terminal slave associated with
+   the master FD is open on, or NULL on errors.  */
+# if @REPLACE_PTSNAME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ptsname
+#   define ptsname rpl_ptsname
+#  endif
+_GL_FUNCDECL_RPL (ptsname, char *, (int fd));
+_GL_CXXALIAS_RPL (ptsname, char *, (int fd));
+# else
+#  if !@HAVE_PTSNAME@
+_GL_FUNCDECL_SYS (ptsname, char *, (int fd));
+#  endif
+_GL_CXXALIAS_SYS (ptsname, char *, (int fd));
+# endif
+_GL_CXXALIASWARN (ptsname);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname
+# if HAVE_RAW_DECL_PTSNAME
+_GL_WARN_ON_USE (ptsname, "ptsname is not portable - "
+                 "use gnulib module ptsname for portability");
+# endif
+#endif
+
+#if @GNULIB_PTSNAME_R@
+/* Set the pathname of the pseudo-terminal slave associated with
+   the master FD is open on and return 0, or set errno and return
+   non-zero on errors.  */
+# if @REPLACE_PTSNAME_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ptsname_r
+#   define ptsname_r rpl_ptsname_r
+#  endif
+_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len));
+_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len));
+# else
+#  if !@HAVE_PTSNAME_R@
+_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len));
+#  endif
+_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len));
+# endif
+_GL_CXXALIASWARN (ptsname_r);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname_r
+# if HAVE_RAW_DECL_PTSNAME_R
+_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - "
+                 "use gnulib module ptsname_r for portability");
+# endif
+#endif
+
+#if @GNULIB_PUTENV@
+# if @REPLACE_PUTENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putenv
+#   define putenv rpl_putenv
+#  endif
+_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (putenv, int, (char *string));
+# else
+_GL_CXXALIAS_SYS (putenv, int, (char *string));
+# endif
+_GL_CXXALIASWARN (putenv);
+#endif
+
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+#  ifndef RAND_MAX
+#   define RAND_MAX 2147483647
+#  endif
+# endif
+#endif
+
+
+#if @GNULIB_RANDOM@
+# if !@HAVE_RANDOM@
+_GL_FUNCDECL_SYS (random, long, (void));
+# endif
+_GL_CXXALIAS_SYS (random, long, (void));
+_GL_CXXALIASWARN (random);
+#elif defined GNULIB_POSIXCHECK
+# undef random
+# if HAVE_RAW_DECL_RANDOM
+_GL_WARN_ON_USE (random, "random is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM@
+# if !@HAVE_RANDOM@
+_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed));
+# endif
+_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed));
+_GL_CXXALIASWARN (srandom);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom
+# if HAVE_RAW_DECL_SRANDOM
+_GL_WARN_ON_USE (srandom, "srandom is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM@
+# if !@HAVE_RANDOM@
+_GL_FUNCDECL_SYS (initstate, char *,
+                  (unsigned int seed, char *buf, size_t buf_size)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (initstate, char *,
+                  (unsigned int seed, char *buf, size_t buf_size));
+_GL_CXXALIASWARN (initstate);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate, "initstate is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM@
+# if !@HAVE_RANDOM@
+_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state));
+_GL_CXXALIASWARN (setstate);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate, "setstate is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RANDOM_R@
+# if @REPLACE_RANDOM_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef random_r
+#   define random_r rpl_random_r
+#  endif
+_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result));
+# else
+#  if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result));
+# endif
+_GL_CXXALIASWARN (random_r);
+#elif defined GNULIB_POSIXCHECK
+# undef random_r
+# if HAVE_RAW_DECL_RANDOM_R
+_GL_WARN_ON_USE (random_r, "random_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if @REPLACE_RANDOM_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef srandom_r
+#   define srandom_r rpl_srandom_r
+#  endif
+_GL_FUNCDECL_RPL (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state));
+# else
+#  if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (srandom_r);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom_r
+# if HAVE_RAW_DECL_SRANDOM_R
+_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if @REPLACE_RANDOM_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef initstate_r
+#   define initstate_r rpl_initstate_r
+#  endif
+_GL_FUNCDECL_RPL (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state));
+# else
+#  if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (initstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate_r
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if @REPLACE_RANDOM_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setstate_r
+#   define setstate_r rpl_setstate_r
+#  endif
+_GL_FUNCDECL_RPL (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state));
+# else
+#  if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (setstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate_r
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_REALLOC_POSIX@
+# if @REPLACE_REALLOC@
+#  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+        || _GL_USE_STDLIB_ALLOC)
+#   undef realloc
+#   define realloc rpl_realloc
+#  endif
+_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size));
+_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
+# else
+_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
+# endif
+_GL_CXXALIASWARN (realloc);
+#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef realloc
+/* Assume realloc is always declared.  */
+_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
+                 "use gnulib module realloc-posix for portability");
+#endif
+
+#if @GNULIB_REALPATH@
+# if @REPLACE_REALPATH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define realpath rpl_realpath
+#  endif
+_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved));
+# else
+#  if !@HAVE_REALPATH@
+_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved));
+# endif
+_GL_CXXALIASWARN (realpath);
+#elif defined GNULIB_POSIXCHECK
+# undef realpath
+# if HAVE_RAW_DECL_REALPATH
+_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module "
+                 "canonicalize or canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if @GNULIB_RPMATCH@
+/* Test a user response to a question.
+   Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear.  */
+# if !@HAVE_RPMATCH@
+_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (rpmatch, int, (const char *response));
+_GL_CXXALIASWARN (rpmatch);
+#elif defined GNULIB_POSIXCHECK
+# undef rpmatch
+# if HAVE_RAW_DECL_RPMATCH
+_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - "
+                 "use gnulib module rpmatch for portability");
+# endif
+#endif
+
+#if @GNULIB_SETENV@
+/* Set NAME to VALUE in the environment.
+   If REPLACE is nonzero, overwrite an existing value.  */
+# if @REPLACE_SETENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setenv
+#   define setenv rpl_setenv
+#  endif
+_GL_FUNCDECL_RPL (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (setenv, int,
+                  (const char *name, const char *value, int replace));
+# else
+#  if !@HAVE_DECL_SETENV@
+_GL_FUNCDECL_SYS (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (setenv, int,
+                  (const char *name, const char *value, int replace));
+# endif
+# if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@)
+_GL_CXXALIASWARN (setenv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef setenv
+# if HAVE_RAW_DECL_SETENV
+_GL_WARN_ON_USE (setenv, "setenv is unportable - "
+                 "use gnulib module setenv for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOD@
+ /* Parse a double from STRING, updating ENDP if appropriate.  */
+# if @REPLACE_STRTOD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strtod rpl_strtod
+#  endif
+_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp));
+# else
+#  if !@HAVE_STRTOD@
+_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp));
+# endif
+_GL_CXXALIASWARN (strtod);
+#elif defined GNULIB_POSIXCHECK
+# undef strtod
+# if HAVE_RAW_DECL_STRTOD
+_GL_WARN_ON_USE (strtod, "strtod is unportable - "
+                 "use gnulib module strtod for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOLL@
+/* Parse a signed integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
+   to ERANGE.  */
+# if !@HAVE_STRTOLL@
+_GL_FUNCDECL_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoll);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoll
+# if HAVE_RAW_DECL_STRTOLL
+_GL_WARN_ON_USE (strtoll, "strtoll is unportable - "
+                 "use gnulib module strtoll for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOULL@
+/* Parse an unsigned integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is ULLONG_MAX, and errno is set to
+   ERANGE.  */
+# if !@HAVE_STRTOULL@
+_GL_FUNCDECL_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoull);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoull
+# if HAVE_RAW_DECL_STRTOULL
+_GL_WARN_ON_USE (strtoull, "strtoull is unportable - "
+                 "use gnulib module strtoull for portability");
+# endif
+#endif
+
+#if @GNULIB_UNLOCKPT@
+/* Unlock the slave side of the pseudo-terminal whose master side is specified
+   by FD, so that it can be opened.  */
+# if !@HAVE_UNLOCKPT@
+_GL_FUNCDECL_SYS (unlockpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (unlockpt, int, (int fd));
+_GL_CXXALIASWARN (unlockpt);
+#elif defined GNULIB_POSIXCHECK
+# undef unlockpt
+# if HAVE_RAW_DECL_UNLOCKPT
+_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - "
+                 "use gnulib module unlockpt for portability");
+# endif
+#endif
+
+#if @GNULIB_UNSETENV@
+/* Remove the variable NAME from the environment.  */
+# if @REPLACE_UNSETENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unsetenv
+#   define unsetenv rpl_unsetenv
+#  endif
+_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unsetenv, int, (const char *name));
+# else
+#  if !@HAVE_DECL_UNSETENV@
+_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (unsetenv, int, (const char *name));
+# endif
+# if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@)
+_GL_CXXALIASWARN (unsetenv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef unsetenv
+# if HAVE_RAW_DECL_UNSETENV
+_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - "
+                 "use gnulib module unsetenv for portability");
+# endif
+#endif
+
+/* Convert a wide character to a multibyte character.  */
+#if @GNULIB_WCTOMB@
+# if @REPLACE_WCTOMB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctomb
+#   define wctomb rpl_wctomb
+#  endif
+_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc));
+_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc));
+# else
+_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc));
+# endif
+_GL_CXXALIASWARN (wctomb);
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_STDLIB_H */
+#endif /* _@GUARD_PREFIX@_STDLIB_H */
+#endif
diff --git a/lib/stpcpy.c b/lib/stpcpy.c
index acda21a..e857abe 100644
--- a/lib/stpcpy.c
+++ b/lib/stpcpy.c
@@ -1,12 +1,13 @@
 /* stpcpy.c -- copy a string and return pointer to end of new string
-   Copyright (C) 1992, 1995, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2012 Free Software
+   Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C Library.
    Bugs can be reported to bug-glibc@prep.ai.mit.edu.
 
-   This program is free software; you can redistribute it and/or modify it
+   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
+   Free Software Foundation; either version 3 of the License, or any
    later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,18 +16,16 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-   USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include <string.h>
 
 #undef __stpcpy
-#undef stpcpy
+#ifdef _LIBC
+# undef stpcpy
+#endif
 
 #ifndef weak_alias
 # define __stpcpy stpcpy
diff --git a/lib/stpcpy.h b/lib/stpcpy.h
deleted file mode 100644
index 53c4ce0..0000000
--- a/lib/stpcpy.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* String copying.
-   Copyright (C) 1995, 2001, 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _STPCPY_H
-#define _STPCPY_H
-
-#if HAVE_STPCPY
-
-/* Get stpcpy() declaration.  */
-#include <string.h>
-
-#else
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
-extern char *stpcpy (char *dst, const char *src);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-#endif /* _STPCPY_H */
diff --git a/lib/strchrnul.c b/lib/strchrnul.c
new file mode 100644
index 0000000..1be4249
--- /dev/null
+++ b/lib/strchrnul.c
@@ -0,0 +1,142 @@
+/* Searching in a string.
+   Copyright (C) 2003, 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+char *
+strchrnul (const char *s, int c_in)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned char c;
+
+  c = (unsigned char) c_in;
+  if (!c)
+    return rawmemchr (s, 0);
+
+  /* Handle the first few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       (size_t) char_ptr % sizeof (longword) != 0;
+       ++char_ptr)
+    if (!*char_ptr || *char_ptr == c)
+      return (char *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will
+     test a longword at a time.  The tricky part is testing if *any of
+     the four* bytes in the longword in question are equal to NUL or
+     c.  We first use an xor with repeated_c.  This reduces the task
+     to testing whether *any of the four* bytes in longword1 or
+     longword2 is zero.
+
+     Let's consider longword1.  We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     The test whether any byte in longword1 or longword2 is zero is equivalent
+     to testing whether tmp1 is nonzero or tmp2 is nonzero.  We can combine
+     this into a single test, whether (tmp1 | tmp2) is nonzero.
+
+     This test can read more than one byte beyond the end of a string,
+     depending on where the terminating NUL is encountered.  However,
+     this is considered safe since the initialization phase ensured
+     that the read will be aligned, therefore, the read will not cross
+     page boundaries and will not cause a fault.  */
+
+  while (1)
+    {
+      longword longword1 = *longword_ptr ^ repeated_c;
+      longword longword2 = *longword_ptr;
+
+      if (((((longword1 - repeated_one) & ~longword1)
+            | ((longword2 - repeated_one) & ~longword2))
+           & (repeated_one << 7)) != 0)
+        break;
+      longword_ptr++;
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that one of the sizeof (longword) bytes
+     starting at char_ptr is == 0 or == c.  On little-endian machines,
+     we could determine the first such byte without any further memory
+     accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.
+     Choose code that works in both cases.  */
+
+  char_ptr = (unsigned char *) longword_ptr;
+  while (*char_ptr && (*char_ptr != c))
+    char_ptr++;
+  return (char *) char_ptr;
+}
diff --git a/lib/strchrnul.valgrind b/lib/strchrnul.valgrind
new file mode 100644
index 0000000..b14fa13
--- /dev/null
+++ b/lib/strchrnul.valgrind
@@ -0,0 +1,12 @@
+# Suppress a valgrind message about use of uninitialized memory in strchrnul().
+# This use is OK because it provides only a speedup.
+{
+    strchrnul-value4
+    Memcheck:Value4
+    fun:strchrnul
+}
+{
+    strchrnul-value8
+    Memcheck:Value8
+    fun:strchrnul
+}
diff --git a/lib/strdup.c b/lib/strdup.c
index d6d0116..a3f8c86 100644
--- a/lib/strdup.c
+++ b/lib/strdup.c
@@ -1,11 +1,11 @@
-/* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004 Free Software
+/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2012 Free Software
    Foundation, Inc.
 
    This file is part of the GNU C Library.
 
    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)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,23 +14,21 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
+#ifndef _LIBC
 # include <config.h>
 #endif
 
-#ifndef _LIBC
 /* Get specification.  */
-# include "strdup.h"
-#endif
-
-#include <stdlib.h>
 #include <string.h>
 
+#include <stdlib.h>
+
 #undef __strdup
-#undef strdup
+#ifdef _LIBC
+# undef strdup
+#endif
 
 #ifndef weak_alias
 # define __strdup strdup
diff --git a/lib/strdup.h b/lib/strdup.h
deleted file mode 100644
index a0d5fb9..0000000
--- a/lib/strdup.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* strdup.h -- duplicate a string
-   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef STRDUP_H_
-#define STRDUP_H_
-
-/* Get strdup declaration, if available.  */
-#include <string.h>
-
-#if defined HAVE_DECL_STRDUP && !HAVE_DECL_STRDUP && !defined strdup
-/* Duplicate S, returning an identical malloc'd string.  */
-extern char *strdup (const char *s);
-#endif
-
-#endif /* STRDUP_H_ */
diff --git a/lib/streq.h b/lib/streq.h
new file mode 100644
index 0000000..b312f7f
--- /dev/null
+++ b/lib/streq.h
@@ -0,0 +1,176 @@
+/* Optimized string comparison.
+   Copyright (C) 2001-2002, 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+#ifndef _GL_STREQ_H
+#define _GL_STREQ_H
+
+#include <string.h>
+
+/* STREQ_OPT allows to optimize string comparison with a small literal string.
+     STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+   is semantically equivalent to
+     strcmp (s, "EUC-KR") == 0
+   just faster.  */
+
+/* Help GCC to generate good code for string comparisons with
+   immediate strings. */
+#if defined (__GNUC__) && defined (__OPTIMIZE__)
+
+static inline int
+streq9 (const char *s1, const char *s2)
+{
+  return strcmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+streq8 (const char *s1, const char *s2, char s28)
+{
+  if (s1[8] == s28)
+    {
+      if (s28 == 0)
+        return 1;
+      else
+        return streq9 (s1, s2);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq7 (const char *s1, const char *s2, char s27, char s28)
+{
+  if (s1[7] == s27)
+    {
+      if (s27 == 0)
+        return 1;
+      else
+        return streq8 (s1, s2, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+  if (s1[6] == s26)
+    {
+      if (s26 == 0)
+        return 1;
+      else
+        return streq7 (s1, s2, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+  if (s1[5] == s25)
+    {
+      if (s25 == 0)
+        return 1;
+      else
+        return streq6 (s1, s2, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[4] == s24)
+    {
+      if (s24 == 0)
+        return 1;
+      else
+        return streq5 (s1, s2, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[3] == s23)
+    {
+      if (s23 == 0)
+        return 1;
+      else
+        return streq4 (s1, s2, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[2] == s22)
+    {
+      if (s22 == 0)
+        return 1;
+      else
+        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[1] == s21)
+    {
+      if (s21 == 0)
+        return 1;
+      else
+        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[0] == s20)
+    {
+      if (s20 == 0)
+        return 1;
+      else
+        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  (strcmp (s1, s2) == 0)
+
+#endif
+
+#endif /* _GL_STREQ_H */
diff --git a/lib/strerror-override.c b/lib/strerror-override.c
new file mode 100644
index 0000000..f7cac65
--- /dev/null
+++ b/lib/strerror-override.c
@@ -0,0 +1,302 @@
+/* strerror-override.c --- POSIX compatible system error routine
+
+   Copyright (C) 2010-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2010.  */
+
+#include <config.h>
+
+#include "strerror-override.h"
+
+#include <errno.h>
+
+#if GNULIB_defined_EWINSOCK /* native Windows platforms */
+# if HAVE_WINSOCK2_H
+#  include <winsock2.h>
+# endif
+#endif
+
+/* If ERRNUM maps to an errno value defined by gnulib, return a string
+   describing the error.  Otherwise return NULL.  */
+const char *
+strerror_override (int errnum)
+{
+  /* These error messages are taken from glibc/sysdeps/gnu/errlist.c.  */
+  switch (errnum)
+    {
+#if REPLACE_STRERROR_0
+    case 0:
+      return "Success";
+#endif
+
+#if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */
+    case EINPROGRESS:
+      return "Operation now in progress";
+    case EALREADY:
+      return "Operation already in progress";
+    case ENOTSOCK:
+      return "Socket operation on non-socket";
+    case EDESTADDRREQ:
+      return "Destination address required";
+    case EMSGSIZE:
+      return "Message too long";
+    case EPROTOTYPE:
+      return "Protocol wrong type for socket";
+    case ENOPROTOOPT:
+      return "Protocol not available";
+    case EPROTONOSUPPORT:
+      return "Protocol not supported";
+    case EOPNOTSUPP:
+      return "Operation not supported";
+    case EAFNOSUPPORT:
+      return "Address family not supported by protocol";
+    case EADDRINUSE:
+      return "Address already in use";
+    case EADDRNOTAVAIL:
+      return "Cannot assign requested address";
+    case ENETDOWN:
+      return "Network is down";
+    case ENETUNREACH:
+      return "Network is unreachable";
+    case ECONNRESET:
+      return "Connection reset by peer";
+    case ENOBUFS:
+      return "No buffer space available";
+    case EISCONN:
+      return "Transport endpoint is already connected";
+    case ENOTCONN:
+      return "Transport endpoint is not connected";
+    case ETIMEDOUT:
+      return "Connection timed out";
+    case ECONNREFUSED:
+      return "Connection refused";
+    case ELOOP:
+      return "Too many levels of symbolic links";
+    case EHOSTUNREACH:
+      return "No route to host";
+    case EWOULDBLOCK:
+      return "Operation would block";
+#endif
+#if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */
+    case ETXTBSY:
+      return "Text file busy";
+    case ENODATA:
+      return "No data available";
+    case ENOSR:
+      return "Out of streams resources";
+    case ENOSTR:
+      return "Device not a stream";
+    case ETIME:
+      return "Timer expired";
+    case EOTHER:
+      return "Other error";
+#endif
+#if GNULIB_defined_EWINSOCK /* native Windows platforms */
+    case ESOCKTNOSUPPORT:
+      return "Socket type not supported";
+    case EPFNOSUPPORT:
+      return "Protocol family not supported";
+    case ESHUTDOWN:
+      return "Cannot send after transport endpoint shutdown";
+    case ETOOMANYREFS:
+      return "Too many references: cannot splice";
+    case EHOSTDOWN:
+      return "Host is down";
+    case EPROCLIM:
+      return "Too many processes";
+    case EUSERS:
+      return "Too many users";
+    case EDQUOT:
+      return "Disk quota exceeded";
+    case ESTALE:
+      return "Stale NFS file handle";
+    case EREMOTE:
+      return "Object is remote";
+# if HAVE_WINSOCK2_H
+      /* WSA_INVALID_HANDLE maps to EBADF */
+      /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
+      /* WSA_INVALID_PARAMETER maps to EINVAL */
+    case WSA_OPERATION_ABORTED:
+      return "Overlapped operation aborted";
+    case WSA_IO_INCOMPLETE:
+      return "Overlapped I/O event object not in signaled state";
+    case WSA_IO_PENDING:
+      return "Overlapped operations will complete later";
+      /* WSAEINTR maps to EINTR */
+      /* WSAEBADF maps to EBADF */
+      /* WSAEACCES maps to EACCES */
+      /* WSAEFAULT maps to EFAULT */
+      /* WSAEINVAL maps to EINVAL */
+      /* WSAEMFILE maps to EMFILE */
+      /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
+      /* WSAEINPROGRESS maps to EINPROGRESS */
+      /* WSAEALREADY maps to EALREADY */
+      /* WSAENOTSOCK maps to ENOTSOCK */
+      /* WSAEDESTADDRREQ maps to EDESTADDRREQ */
+      /* WSAEMSGSIZE maps to EMSGSIZE */
+      /* WSAEPROTOTYPE maps to EPROTOTYPE */
+      /* WSAENOPROTOOPT maps to ENOPROTOOPT */
+      /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */
+      /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
+      /* WSAEOPNOTSUPP maps to EOPNOTSUPP */
+      /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
+      /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */
+      /* WSAEADDRINUSE maps to EADDRINUSE */
+      /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */
+      /* WSAENETDOWN maps to ENETDOWN */
+      /* WSAENETUNREACH maps to ENETUNREACH */
+      /* WSAENETRESET maps to ENETRESET */
+      /* WSAECONNABORTED maps to ECONNABORTED */
+      /* WSAECONNRESET maps to ECONNRESET */
+      /* WSAENOBUFS maps to ENOBUFS */
+      /* WSAEISCONN maps to EISCONN */
+      /* WSAENOTCONN maps to ENOTCONN */
+      /* WSAESHUTDOWN is ESHUTDOWN */
+      /* WSAETOOMANYREFS is ETOOMANYREFS */
+      /* WSAETIMEDOUT maps to ETIMEDOUT */
+      /* WSAECONNREFUSED maps to ECONNREFUSED */
+      /* WSAELOOP maps to ELOOP */
+      /* WSAENAMETOOLONG maps to ENAMETOOLONG */
+      /* WSAEHOSTDOWN is EHOSTDOWN */
+      /* WSAEHOSTUNREACH maps to EHOSTUNREACH */
+      /* WSAENOTEMPTY maps to ENOTEMPTY */
+      /* WSAEPROCLIM is EPROCLIM */
+      /* WSAEUSERS is EUSERS */
+      /* WSAEDQUOT is EDQUOT */
+      /* WSAESTALE is ESTALE */
+      /* WSAEREMOTE is EREMOTE */
+    case WSASYSNOTREADY:
+      return "Network subsystem is unavailable";
+    case WSAVERNOTSUPPORTED:
+      return "Winsock.dll version out of range";
+    case WSANOTINITIALISED:
+      return "Successful WSAStartup not yet performed";
+    case WSAEDISCON:
+      return "Graceful shutdown in progress";
+    case WSAENOMORE: case WSA_E_NO_MORE:
+      return "No more results";
+    case WSAECANCELLED: case WSA_E_CANCELLED:
+      return "Call was canceled";
+    case WSAEINVALIDPROCTABLE:
+      return "Procedure call table is invalid";
+    case WSAEINVALIDPROVIDER:
+      return "Service provider is invalid";
+    case WSAEPROVIDERFAILEDINIT:
+      return "Service provider failed to initialize";
+    case WSASYSCALLFAILURE:
+      return "System call failure";
+    case WSASERVICE_NOT_FOUND:
+      return "Service not found";
+    case WSATYPE_NOT_FOUND:
+      return "Class type not found";
+    case WSAEREFUSED:
+      return "Database query was refused";
+    case WSAHOST_NOT_FOUND:
+      return "Host not found";
+    case WSATRY_AGAIN:
+      return "Nonauthoritative host not found";
+    case WSANO_RECOVERY:
+      return "Nonrecoverable error";
+    case WSANO_DATA:
+      return "Valid name, no data record of requested type";
+      /* WSA_QOS_* omitted */
+# endif
+#endif
+
+#if GNULIB_defined_ENOMSG
+    case ENOMSG:
+      return "No message of desired type";
+#endif
+
+#if GNULIB_defined_EIDRM
+    case EIDRM:
+      return "Identifier removed";
+#endif
+
+#if GNULIB_defined_ENOLINK
+    case ENOLINK:
+      return "Link has been severed";
+#endif
+
+#if GNULIB_defined_EPROTO
+    case EPROTO:
+      return "Protocol error";
+#endif
+
+#if GNULIB_defined_EMULTIHOP
+    case EMULTIHOP:
+      return "Multihop attempted";
+#endif
+
+#if GNULIB_defined_EBADMSG
+    case EBADMSG:
+      return "Bad message";
+#endif
+
+#if GNULIB_defined_EOVERFLOW
+    case EOVERFLOW:
+      return "Value too large for defined data type";
+#endif
+
+#if GNULIB_defined_ENOTSUP
+    case ENOTSUP:
+      return "Not supported";
+#endif
+
+#if GNULIB_defined_ENETRESET
+    case ENETRESET:
+      return "Network dropped connection on reset";
+#endif
+
+#if GNULIB_defined_ECONNABORTED
+    case ECONNABORTED:
+      return "Software caused connection abort";
+#endif
+
+#if GNULIB_defined_ESTALE
+    case ESTALE:
+      return "Stale NFS file handle";
+#endif
+
+#if GNULIB_defined_EDQUOT
+    case EDQUOT:
+      return "Disk quota exceeded";
+#endif
+
+#if GNULIB_defined_ECANCELED
+    case ECANCELED:
+      return "Operation canceled";
+#endif
+
+#if GNULIB_defined_EOWNERDEAD
+    case EOWNERDEAD:
+      return "Owner died";
+#endif
+
+#if GNULIB_defined_ENOTRECOVERABLE
+    case ENOTRECOVERABLE:
+      return "State not recoverable";
+#endif
+
+#if GNULIB_defined_EILSEQ
+    case EILSEQ:
+      return "Invalid or incomplete multibyte or wide character";
+#endif
+
+    default:
+      return NULL;
+    }
+}
diff --git a/lib/strerror-override.h b/lib/strerror-override.h
new file mode 100644
index 0000000..6468681
--- /dev/null
+++ b/lib/strerror-override.h
@@ -0,0 +1,56 @@
+/* strerror-override.h --- POSIX compatible system error routine
+
+   Copyright (C) 2010-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_STRERROR_OVERRIDE_H
+# define _GL_STRERROR_OVERRIDE_H
+
+# include <errno.h>
+# include <stddef.h>
+
+/* Reasonable buffer size that should never trigger ERANGE; if this
+   proves too small, we intentionally abort(), to remind us to fix
+   this value.  */
+# define STACKBUF_LEN 256
+
+/* If ERRNUM maps to an errno value defined by gnulib, return a string
+   describing the error.  Otherwise return NULL.  */
+# if REPLACE_STRERROR_0 \
+     || GNULIB_defined_ESOCK \
+     || GNULIB_defined_ESTREAMS \
+     || GNULIB_defined_EWINSOCK \
+     || GNULIB_defined_ENOMSG \
+     || GNULIB_defined_EIDRM \
+     || GNULIB_defined_ENOLINK \
+     || GNULIB_defined_EPROTO \
+     || GNULIB_defined_EMULTIHOP \
+     || GNULIB_defined_EBADMSG \
+     || GNULIB_defined_EOVERFLOW \
+     || GNULIB_defined_ENOTSUP \
+     || GNULIB_defined_ENETRESET \
+     || GNULIB_defined_ECONNABORTED \
+     || GNULIB_defined_ESTALE \
+     || GNULIB_defined_EDQUOT \
+     || GNULIB_defined_ECANCELED \
+     || GNULIB_defined_EOWNERDEAD \
+     || GNULIB_defined_ENOTRECOVERABLE \
+     || GNULIB_defined_EILSEQ
+extern const char *strerror_override (int errnum);
+# else
+#  define strerror_override(ignored) NULL
+# endif
+
+#endif /* _GL_STRERROR_OVERRIDE_H */
diff --git a/lib/strerror.c b/lib/strerror.c
index 623821d..587bd21 100644
--- a/lib/strerror.c
+++ b/lib/strerror.c
@@ -1,12 +1,11 @@
-/* strerror.c --- ANSI C compatible system error routine
+/* strerror.c --- POSIX compatible system error routine
 
-   Copyright (C) 1986, 1988, 1989, 1991, 2002, 2003 Free Software
-   Foundation, Inc.
+   Copyright (C) 2007-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,36 +13,58 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
-#include <limits.h>
+/* Specification.  */
+#include <string.h>
 
-/* Don't include <stdio.h>, since it may or may not declare
-   sys_errlist and its declarations may collide with ours.  Just
-   declare the stuff that we need directly.  Standard hosted C89
-   implementations define strerror and they don't need this strerror
-   function, so take some liberties with the standard to cater to
-   ancient or limited freestanding implementations.  */
-int sprintf (char *, char const *, ...);
-extern int sys_nerr;
-extern char *sys_errlist[];
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "intprops.h"
+#include "strerror-override.h"
+#include "verify.h"
+
+/* Use the system functions, not the gnulib overrides in this file.  */
+#undef sprintf
 
 char *
 strerror (int n)
+#undef strerror
 {
-  static char const fmt[] = "Unknown error (%d)";
-  static char mesg[sizeof fmt + sizeof n * CHAR_BIT / 3];
+  static char buf[STACKBUF_LEN];
+  size_t len;
 
-  if (n < 0 || n >= sys_nerr)
+  /* Cast away const, due to the historical signature of strerror;
+     callers should not be modifying the string.  */
+  const char *msg = strerror_override (n);
+  if (msg)
+    return (char *) msg;
+
+  msg = strerror (n);
+
+  /* Our strerror_r implementation might use the system's strerror
+     buffer, so all other clients of strerror have to see the error
+     copied into a buffer that we manage.  This is not thread-safe,
+     even if the system strerror is, but portable programs shouldn't
+     be using strerror if they care about thread-safety.  */
+  if (!msg || !*msg)
     {
-      sprintf (mesg, fmt, n);
-      return mesg;
+      static char const fmt[] = "Unknown error %d";
+      verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n));
+      sprintf (buf, fmt, n);
+      errno = EINVAL;
+      return buf;
     }
-  else
-    return sys_errlist[n];
+
+  /* Fix STACKBUF_LEN if this ever aborts.  */
+  len = strlen (msg);
+  if (sizeof buf <= len)
+    abort ();
+
+  return memcpy (buf, msg, len + 1);
 }
diff --git a/lib/strerror_r.c b/lib/strerror_r.c
new file mode 100644
index 0000000..76f6fc6
--- /dev/null
+++ b/lib/strerror_r.c
@@ -0,0 +1,326 @@
+/* strerror_r.c --- POSIX compatible system error routine
+
+   Copyright (C) 2010-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2010.  */
+
+#include <config.h>
+
+/* Enable declaration of sys_nerr and sys_errlist in <errno.h> on NetBSD.  */
+#define _NETBSD_SOURCE 1
+
+/* Specification.  */
+#include <string.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "strerror-override.h"
+
+#if (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) && HAVE___XPG_STRERROR_R /* glibc >= 2.3.4, cygwin >= 1.7.9 */
+
+# define USE_XPG_STRERROR_R 1
+extern int __xpg_strerror_r (int errnum, char *buf, size_t buflen);
+
+#elif HAVE_DECL_STRERROR_R && !(__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__)
+
+/* The system's strerror_r function is OK, except that its third argument
+   is 'int', not 'size_t', or its return type is wrong.  */
+
+# include <limits.h>
+
+# define USE_SYSTEM_STRERROR_R 1
+
+#else /* (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__ ? !HAVE___XPG_STRERROR_R : !HAVE_DECL_STRERROR_R) */
+
+/* Use the system's strerror().  Exclude glibc and cygwin because the
+   system strerror_r has the wrong return type, and cygwin 1.7.9
+   strerror_r clobbers strerror.  */
+# undef strerror
+
+# define USE_SYSTEM_STRERROR 1
+
+# if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__
+
+/* No locking needed.  */
+
+/* Get catgets internationalization functions.  */
+#  if HAVE_CATGETS
+#   include <nl_types.h>
+#  endif
+
+/* Get sys_nerr, sys_errlist on HP-UX (otherwise only declared in C++ mode).
+   Get sys_nerr, sys_errlist on IRIX (otherwise only declared with _SGIAPI).  */
+#  if defined __hpux || defined __sgi
+extern int sys_nerr;
+extern char *sys_errlist[];
+#  endif
+
+/* Get sys_nerr on Solaris.  */
+#  if defined __sun && !defined _LP64
+extern int sys_nerr;
+#  endif
+
+# else
+
+#  include "glthread/lock.h"
+
+/* This lock protects the buffer returned by strerror().  We assume that
+   no other uses of strerror() exist in the program.  */
+gl_lock_define_initialized(static, strerror_lock)
+
+# endif
+
+#endif
+
+/* On MSVC, there is no snprintf() function, just a _snprintf().
+   It is of lower quality, but sufficient for the simple use here.
+   We only have to make sure to NUL terminate the result (_snprintf
+   does not NUL terminate, like strncpy).  */
+#if !HAVE_SNPRINTF
+static int
+local_snprintf (char *buf, size_t buflen, const char *format, ...)
+{
+  va_list args;
+  int result;
+
+  va_start (args, format);
+  result = _vsnprintf (buf, buflen, format, args);
+  va_end (args);
+  if (buflen > 0 && (result < 0 || result >= buflen))
+    buf[buflen - 1] = '\0';
+  return result;
+}
+# define snprintf local_snprintf
+#endif
+
+/* Copy as much of MSG into BUF as possible, without corrupting errno.
+   Return 0 if MSG fit in BUFLEN, otherwise return ERANGE.  */
+static int
+safe_copy (char *buf, size_t buflen, const char *msg)
+{
+  size_t len = strlen (msg);
+  int ret;
+
+  if (len < buflen)
+    {
+      /* Although POSIX allows memcpy() to corrupt errno, we don't
+         know of any implementation where this is a real problem.  */
+      memcpy (buf, msg, len + 1);
+      ret = 0;
+    }
+  else
+    {
+      memcpy (buf, msg, buflen - 1);
+      buf[buflen - 1] = '\0';
+      ret = ERANGE;
+    }
+  return ret;
+}
+
+
+int
+strerror_r (int errnum, char *buf, size_t buflen)
+#undef strerror_r
+{
+  /* Filter this out now, so that rest of this replacement knows that
+     there is room for a non-empty message and trailing NUL.  */
+  if (buflen <= 1)
+    {
+      if (buflen)
+        *buf = '\0';
+      return ERANGE;
+    }
+  *buf = '\0';
+
+  /* Check for gnulib overrides.  */
+  {
+    char const *msg = strerror_override (errnum);
+
+    if (msg)
+      return safe_copy (buf, buflen, msg);
+  }
+
+  {
+    int ret;
+    int saved_errno = errno;
+
+#if USE_XPG_STRERROR_R
+
+    {
+      ret = __xpg_strerror_r (errnum, buf, buflen);
+      if (ret < 0)
+        ret = errno;
+      if (!*buf)
+        {
+          /* glibc 2.13 would not touch buf on err, so we have to fall
+             back to GNU strerror_r which always returns a thread-safe
+             untruncated string to (partially) copy into our buf.  */
+          safe_copy (buf, buflen, strerror_r (errnum, buf, buflen));
+        }
+    }
+
+#elif USE_SYSTEM_STRERROR_R
+
+    if (buflen > INT_MAX)
+      buflen = INT_MAX;
+
+# ifdef __hpux
+    /* On HP-UX 11.31, strerror_r always fails when buflen < 80; it
+       also fails to change buf on EINVAL.  */
+    {
+      char stackbuf[80];
+
+      if (buflen < sizeof stackbuf)
+        {
+          ret = strerror_r (errnum, stackbuf, sizeof stackbuf);
+          if (ret == 0)
+            ret = safe_copy (buf, buflen, stackbuf);
+        }
+      else
+        ret = strerror_r (errnum, buf, buflen);
+    }
+# else
+    ret = strerror_r (errnum, buf, buflen);
+
+    /* Some old implementations may return (-1, EINVAL) instead of EINVAL.  */
+    if (ret < 0)
+      ret = errno;
+# endif
+
+# ifdef _AIX
+    /* AIX returns 0 rather than ERANGE when truncating strings; try
+       again until we are sure we got the entire string.  */
+    if (!ret && strlen (buf) == buflen - 1)
+      {
+        char stackbuf[STACKBUF_LEN];
+        size_t len;
+        strerror_r (errnum, stackbuf, sizeof stackbuf);
+        len = strlen (stackbuf);
+        /* STACKBUF_LEN should have been large enough.  */
+        if (len + 1 == sizeof stackbuf)
+          abort ();
+        if (buflen <= len)
+          ret = ERANGE;
+      }
+# else
+    /* Solaris 10 does not populate buf on ERANGE.  OpenBSD 4.7
+       truncates early on ERANGE rather than return a partial integer.
+       We prefer the maximal string.  We set buf[0] earlier, and we
+       know of no implementation that modifies buf to be an
+       unterminated string, so this strlen should be portable in
+       practice (rather than pulling in a safer strnlen).  */
+    if (ret == ERANGE && strlen (buf) < buflen - 1)
+      {
+        char stackbuf[STACKBUF_LEN];
+
+        /* STACKBUF_LEN should have been large enough.  */
+        if (strerror_r (errnum, stackbuf, sizeof stackbuf) == ERANGE)
+          abort ();
+        safe_copy (buf, buflen, stackbuf);
+      }
+# endif
+
+#else /* USE_SYSTEM_STRERROR */
+
+    /* Try to do what strerror (errnum) does, but without clobbering the
+       buffer used by strerror().  */
+
+# if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __CYGWIN__ /* NetBSD, HP-UX, native Windows, Cygwin */
+
+    /* NetBSD:         sys_nerr, sys_errlist are declared through _NETBSD_SOURCE
+                       and <errno.h> above.
+       HP-UX:          sys_nerr, sys_errlist are declared explicitly above.
+       native Windows: sys_nerr, sys_errlist are declared in <stdlib.h>.
+       Cygwin:         sys_nerr, sys_errlist are declared in <errno.h>.  */
+    if (errnum >= 0 && errnum < sys_nerr)
+      {
+#  if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux)
+#   if defined __NetBSD__
+        nl_catd catd = catopen ("libc", NL_CAT_LOCALE);
+        const char *errmsg =
+          (catd != (nl_catd)-1
+           ? catgets (catd, 1, errnum, sys_errlist[errnum])
+           : sys_errlist[errnum]);
+#   endif
+#   if defined __hpux
+        nl_catd catd = catopen ("perror", NL_CAT_LOCALE);
+        const char *errmsg =
+          (catd != (nl_catd)-1
+           ? catgets (catd, 1, 1 + errnum, sys_errlist[errnum])
+           : sys_errlist[errnum]);
+#   endif
+#  else
+        const char *errmsg = sys_errlist[errnum];
+#  endif
+        if (errmsg == NULL || *errmsg == '\0')
+          ret = EINVAL;
+        else
+          ret = safe_copy (buf, buflen, errmsg);
+#  if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux)
+        if (catd != (nl_catd)-1)
+          catclose (catd);
+#  endif
+      }
+    else
+      ret = EINVAL;
+
+# elif defined __sgi || (defined __sun && !defined _LP64) /* IRIX, Solaris <= 9 32-bit */
+
+    /* For a valid error number, the system's strerror() function returns
+       a pointer to a not copied string, not to a buffer.  */
+    if (errnum >= 0 && errnum < sys_nerr)
+      {
+        char *errmsg = strerror (errnum);
+
+        if (errmsg == NULL || *errmsg == '\0')
+          ret = EINVAL;
+        else
+          ret = safe_copy (buf, buflen, errmsg);
+      }
+    else
+      ret = EINVAL;
+
+# else
+
+    gl_lock_lock (strerror_lock);
+
+    {
+      char *errmsg = strerror (errnum);
+
+      /* For invalid error numbers, strerror() on
+           - IRIX 6.5 returns NULL,
+           - HP-UX 11 returns an empty string.  */
+      if (errmsg == NULL || *errmsg == '\0')
+        ret = EINVAL;
+      else
+        ret = safe_copy (buf, buflen, errmsg);
+    }
+
+    gl_lock_unlock (strerror_lock);
+
+# endif
+
+#endif
+
+    if (ret == EINVAL && !*buf)
+      snprintf (buf, buflen, "Unknown error %d", errnum);
+
+    errno = saved_errno;
+    return ret;
+  }
+}
diff --git a/lib/string.in.h b/lib/string.in.h
new file mode 100644
index 0000000..f8d7520
--- /dev/null
+++ b/lib/string.in.h
@@ -0,0 +1,1029 @@
+/* A GNU-like <string.h>.
+
+   Copyright (C) 1995-1996, 2001-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_STRING_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#ifndef _@GUARD_PREFIX@_STRING_H
+#define _@GUARD_PREFIX@_STRING_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD defines mbslen as a macro.  */
+#if @GNULIB_MBSLEN@ && defined __MirBSD__
+# include <wchar.h>
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Find the index of the least-significant set bit.  */
+#if @GNULIB_FFSL@
+# if !@HAVE_FFSL@
+_GL_FUNCDECL_SYS (ffsl, int, (long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsl, int, (long int i));
+_GL_CXXALIASWARN (ffsl);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsl
+# if HAVE_RAW_DECL_FFSL
+_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
+# endif
+#endif
+
+
+/* Find the index of the least-significant set bit.  */
+#if @GNULIB_FFSLL@
+# if !@HAVE_FFSLL@
+_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
+_GL_CXXALIASWARN (ffsll);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsll
+# if HAVE_RAW_DECL_FFSLL
+_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
+# endif
+#endif
+
+
+/* Return the first instance of C within N bytes of S, or NULL.  */
+#if @GNULIB_MEMCHR@
+# if @REPLACE_MEMCHR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memchr rpl_memchr
+#  endif
+_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
+# else
+#  if ! @HAVE_MEMCHR@
+_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const void * std::memchr (const void *, int, size_t); }
+       extern "C++" { void * std::memchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memchr,
+                        void *, (void const *__s, int __c, size_t __n),
+                        void const *, (void const *__s, int __c, size_t __n));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
+_GL_CXXALIASWARN1 (memchr, void const *,
+                   (void const *__s, int __c, size_t __n));
+# else
+_GL_CXXALIASWARN (memchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memchr
+/* Assume memchr is always declared.  */
+_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+                 "use gnulib module memchr for portability" );
+#endif
+
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+#if @GNULIB_MEMMEM@
+# if @REPLACE_MEMMEM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memmem rpl_memmem
+#  endif
+_GL_FUNCDECL_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# else
+#  if ! @HAVE_DECL_MEMMEM@
+_GL_FUNCDECL_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# endif
+_GL_CXXALIASWARN (memmem);
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# if HAVE_RAW_DECL_MEMMEM
+_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
+                 "use gnulib module memmem-simple for portability, "
+                 "and module memmem for speed" );
+# endif
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+#if @GNULIB_MEMPCPY@
+# if ! @HAVE_MEMPCPY@
+_GL_FUNCDECL_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n));
+_GL_CXXALIASWARN (mempcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# if HAVE_RAW_DECL_MEMPCPY
+_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
+                 "use gnulib module mempcpy for portability");
+# endif
+#endif
+
+/* Search backwards through a block for a byte (specified as an int).  */
+#if @GNULIB_MEMRCHR@
+# if ! @HAVE_DECL_MEMRCHR@
+_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::memrchr (const void *, int, size_t); }
+       extern "C++" { void * std::memrchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memrchr,
+                        void *, (void const *, int, size_t),
+                        void const *, (void const *, int, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
+_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
+# else
+_GL_CXXALIASWARN (memrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# if HAVE_RAW_DECL_MEMRCHR
+_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
+                 "use gnulib module memrchr for portability");
+# endif
+#endif
+
+/* Find the first occurrence of C in S.  More efficient than
+   memchr(S,C,N), at the expense of undefined behavior if C does not
+   occur within N bytes.  */
+#if @GNULIB_RAWMEMCHR@
+# if ! @HAVE_RAWMEMCHR@
+_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::rawmemchr (const void *, int); }
+       extern "C++" { void * std::rawmemchr (void *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
+                        void *, (void const *__s, int __c_in),
+                        void const *, (void const *__s, int __c_in));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
+_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (rawmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# if HAVE_RAW_DECL_RAWMEMCHR
+_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
+                 "use gnulib module rawmemchr for portability");
+# endif
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
+#if @GNULIB_STPCPY@
+# if ! @HAVE_STPCPY@
+_GL_FUNCDECL_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src));
+_GL_CXXALIASWARN (stpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# if HAVE_RAW_DECL_STPCPY
+_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
+                 "use gnulib module stpcpy for portability");
+# endif
+#endif
+
+/* Copy no more than N bytes of SRC to DST, returning a pointer past the
+   last non-NUL byte written into DST.  */
+#if @GNULIB_STPNCPY@
+# if @REPLACE_STPNCPY@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef stpncpy
+#   define stpncpy rpl_stpncpy
+#  endif
+_GL_FUNCDECL_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# else
+#  if ! @HAVE_STPNCPY@
+_GL_FUNCDECL_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# endif
+_GL_CXXALIASWARN (stpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# if HAVE_RAW_DECL_STPNCPY
+_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+                 "use gnulib module stpncpy for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strchr
+/* Assume strchr is always declared.  */
+_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbschr if you care about internationalization");
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+#if @GNULIB_STRCHRNUL@
+# if @REPLACE_STRCHRNUL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strchrnul rpl_strchrnul
+#  endif
+_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strchrnul, char *,
+                  (const char *str, int ch));
+# else
+#  if ! @HAVE_STRCHRNUL@
+_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * std::strchrnul (const char *, int); }
+       extern "C++" { char * std::strchrnul (char *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (strchrnul,
+                        char *, (char const *__s, int __c_in),
+                        char const *, (char const *__s, int __c_in));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
+_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (strchrnul);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# if HAVE_RAW_DECL_STRCHRNUL
+_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
+                 "use gnulib module strchrnul for portability");
+# endif
+#endif
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if @GNULIB_STRDUP@
+# if @REPLACE_STRDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strdup
+#   define strdup rpl_strdup
+#  endif
+_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
+# else
+#  if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
+    /* strdup exists as a function and as a macro.  Get rid of the macro.  */
+#   undef strdup
+#  endif
+#  if !(@HAVE_DECL_STRDUP@ || defined strdup)
+_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+#elif defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
+_GL_WARN_ON_USE (strdup, "strdup is unportable - "
+                 "use gnulib module strdup for portability");
+# endif
+#endif
+
+/* Append no more than N characters from SRC onto DEST.  */
+#if @GNULIB_STRNCAT@
+# if @REPLACE_STRNCAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strncat
+#   define strncat rpl_strncat
+#  endif
+_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
+# else
+_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
+# endif
+_GL_CXXALIASWARN (strncat);
+#elif defined GNULIB_POSIXCHECK
+# undef strncat
+# if HAVE_RAW_DECL_STRNCAT
+_GL_WARN_ON_USE (strncat, "strncat is unportable - "
+                 "use gnulib module strncat for portability");
+# endif
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING.  */
+#if @GNULIB_STRNDUP@
+# if @REPLACE_STRNDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strndup
+#   define strndup rpl_strndup
+#  endif
+_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
+# else
+#  if ! @HAVE_DECL_STRNDUP@
+_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
+# endif
+_GL_CXXALIASWARN (strndup);
+#elif defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
+_GL_WARN_ON_USE (strndup, "strndup is unportable - "
+                 "use gnulib module strndup for portability");
+# endif
+#endif
+
+/* Find the length (number of bytes) of STRING, but scan at most
+   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
+   return MAXLEN.  */
+#if @GNULIB_STRNLEN@
+# if @REPLACE_STRNLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strnlen
+#   define strnlen rpl_strnlen
+#  endif
+_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
+# else
+#  if ! @HAVE_DECL_STRNLEN@
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
+# endif
+_GL_CXXALIASWARN (strnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# if HAVE_RAW_DECL_STRNLEN
+_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
+                 "use gnulib module strnlen for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strcspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+# undef strcspn
+/* Assume strcspn is always declared.  */
+_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbscspn if you care about internationalization");
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if @GNULIB_STRPBRK@
+# if ! @HAVE_STRPBRK@
+_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const char * strpbrk (const char *, const char *); }
+       extern "C++" { char * strpbrk (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strpbrk,
+                        char *, (char const *__s, char const *__accept),
+                        const char *, (char const *__s, char const *__accept));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
+_GL_CXXALIASWARN1 (strpbrk, char const *,
+                   (char const *__s, char const *__accept));
+# else
+_GL_CXXALIASWARN (strpbrk);
+# endif
+# if defined GNULIB_POSIXCHECK
+/* strpbrk() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+#  undef strpbrk
+_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbspbrk if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# if HAVE_RAW_DECL_STRPBRK
+_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
+                 "use gnulib module strpbrk for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it cannot work with multibyte strings.  */
+# undef strspn
+/* Assume strspn is always declared.  */
+_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbsspn if you care about internationalization");
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strrchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strrchr
+/* Assume strrchr is always declared.  */
+_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbsrchr if you care about internationalization");
+#endif
+
+/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP
+   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of strtok() that is multithread-safe and supports
+   empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strtok_r().  */
+#if @GNULIB_STRSEP@
+# if ! @HAVE_STRSEP@
+_GL_FUNCDECL_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim));
+_GL_CXXALIASWARN (strsep);
+# if defined GNULIB_POSIXCHECK
+#  undef strsep
+_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbssep if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# if HAVE_RAW_DECL_STRSEP
+_GL_WARN_ON_USE (strsep, "strsep is unportable - "
+                 "use gnulib module strsep for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSTR@
+# if @REPLACE_STRSTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strstr rpl_strstr
+#  endif
+_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
+# else
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strstr (const char *, const char *); }
+       extern "C++" { char * strstr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strstr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strstr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strstr() does not work with multibyte strings if the locale encoding is
+   different from UTF-8:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.  */
+# undef strstr
+/* Assume strstr is always declared.  */
+_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
+                 "work correctly on character strings in most "
+                 "multibyte locales - "
+                 "use mbsstr if you care about internationalization, "
+                 "or use strstr if you care about speed");
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+   comparison.  */
+#if @GNULIB_STRCASESTR@
+# if @REPLACE_STRCASESTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strcasestr rpl_strcasestr
+#  endif
+_GL_FUNCDECL_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle));
+# else
+#  if ! @HAVE_STRCASESTR@
+_GL_FUNCDECL_SYS (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strcasestr (const char *, const char *); }
+       extern "C++" { char * strcasestr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strcasestr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strcasestr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strcasestr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strcasestr() does not work with multibyte strings:
+   It is a glibc extension, and glibc implements it only for unibyte
+   locales.  */
+# undef strcasestr
+# if HAVE_RAW_DECL_STRCASESTR
+_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbscasestr if you care about "
+                 "internationalization, or use c-strcasestr if you want "
+                 "a locale independent function");
+# endif
+#endif
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = strtok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   This is a variant of strtok() that is multithread-safe.
+
+   For the POSIX documentation for this function, see:
+   http://www.opengroup.org/susv3xsh/strtok.html
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strsep().  */
+#if @GNULIB_STRTOK_R@
+# if @REPLACE_STRTOK_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtok_r
+#   define strtok_r rpl_strtok_r
+#  endif
+_GL_FUNCDECL_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# else
+#  if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
+#   undef strtok_r
+#  endif
+#  if ! @HAVE_DECL_STRTOK_R@
+_GL_FUNCDECL_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# endif
+_GL_CXXALIASWARN (strtok_r);
+# if defined GNULIB_POSIXCHECK
+_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbstok_r if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# if HAVE_RAW_DECL_STRTOK_R
+_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
+                 "use gnulib module strtok_r for portability");
+# endif
+#endif
+
+
+/* The following functions are not specified by POSIX.  They are gnulib
+   extensions.  */
+
+#if @GNULIB_MBSLEN@
+/* Return the number of multibyte characters in the character string STRING.
+   This considers multibyte characters, unlike strlen, which counts bytes.  */
+# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
+#  undef mbslen
+# endif
+# if @HAVE_MBSLEN@  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbslen rpl_mbslen
+#  endif
+_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
+# else
+_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
+# endif
+_GL_CXXALIASWARN (mbslen);
+#endif
+
+#if @GNULIB_MBSNLEN@
+/* Return the number of multibyte characters in the character string starting
+   at STRING and ending at STRING + LEN.  */
+_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1));
+#endif
+
+#if @GNULIB_MBSCHR@
+/* Locate the first single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbschr);
+#endif
+
+#if @GNULIB_MBSRCHR@
+/* Locate the last single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strrchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux || defined __INTERIX
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbsrchr rpl_mbsrchr /* avoid collision with system function */
+#  endif
+_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbsrchr);
+#endif
+
+#if @GNULIB_MBSSTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
+   Unlike strstr(), this function works correctly in multibyte locales with
+   encodings different from UTF-8.  */
+_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASECMP@
+/* Compare the character strings S1 and S2, ignoring case, returning less than,
+   equal to or greater than zero if S1 is lexicographically less than, equal to
+   or greater than S2.
+   Note: This function may, in multibyte locales, return 0 for strings of
+   different lengths!
+   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSNCASECMP@
+/* Compare the initial segment of the character string S1 consisting of at most
+   N characters with the initial segment of the character string S2 consisting
+   of at most N characters, ignoring case, returning less than, equal to or
+   greater than zero if the initial segment of S1 is lexicographically less
+   than, equal to or greater than the initial segment of S2.
+   Note: This function may, in multibyte locales, return 0 for initial segments
+   of different lengths!
+   Unlike strncasecmp(), this function works correctly in multibyte locales.
+   But beware that N is not a byte count but a character count!  */
+_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPCASECMP@
+/* Compare the initial segment of the character string STRING consisting of
+   at most mbslen (PREFIX) characters with the character string PREFIX,
+   ignoring case.  If the two match, return a pointer to the first byte
+   after this prefix in STRING.  Otherwise, return NULL.
+   Note: This function may, in multibyte locales, return non-NULL if STRING
+   is of smaller length than PREFIX!
+   Unlike strncasecmp(), this function works correctly in multibyte
+   locales.  */
+_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASESTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK, using case-insensitive comparison.
+   Note: This function may, in multibyte locales, return success even if
+   strlen (haystack) < strlen (needle) !
+   Unlike strcasestr(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCSPN@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strcspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPBRK@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the pointer to it, or NULL if none
+   exists.
+   Unlike strpbrk(), this function works correctly in multibyte locales.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
+# else
+_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
+# endif
+_GL_CXXALIASWARN (mbspbrk);
+#endif
+
+#if @GNULIB_MBSSPN@
+/* Find the first occurrence in the character string STRING of any character
+   not in the character string REJECT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSSEP@
+/* Search the next delimiter (multibyte character listed in the character
+   string DELIM) starting at the character string *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP to point
+   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of mbstok_r() that supports empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbstok_r().  */
+_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSTOK_R@
+/* Parse the character string STRING into tokens separated by characters in
+   the character string DELIM.
+   If STRING is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = mbstok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbssep().  */
+_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
+     _GL_ARG_NONNULL ((2, 3));
+#endif
+
+/* Map any int, typically from errno, into an error message.  */
+#if @GNULIB_STRERROR@
+# if @REPLACE_STRERROR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror
+#   define strerror rpl_strerror
+#  endif
+_GL_FUNCDECL_RPL (strerror, char *, (int));
+_GL_CXXALIAS_RPL (strerror, char *, (int));
+# else
+_GL_CXXALIAS_SYS (strerror, char *, (int));
+# endif
+_GL_CXXALIASWARN (strerror);
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+/* Assume strerror is always declared.  */
+_GL_WARN_ON_USE (strerror, "strerror is unportable - "
+                 "use gnulib module strerror to guarantee non-NULL result");
+#endif
+
+/* Map any int, typically from errno, into an error message.  Multithread-safe.
+   Uses the POSIX declaration, not the glibc declaration.  */
+#if @GNULIB_STRERROR_R@
+# if @REPLACE_STRERROR_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror_r
+#   define strerror_r rpl_strerror_r
+#  endif
+_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# else
+#  if !@HAVE_DECL_STRERROR_R@
+_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# endif
+# if @HAVE_DECL_STRERROR_R@
+_GL_CXXALIASWARN (strerror_r);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strerror_r
+# if HAVE_RAW_DECL_STRERROR_R
+_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
+                 "use gnulib module strerror_r-posix for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSIGNAL@
+# if @REPLACE_STRSIGNAL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strsignal rpl_strsignal
+#  endif
+_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
+_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
+# else
+#  if ! @HAVE_DECL_STRSIGNAL@
+_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is
+   'const char *'.  */
+_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
+# endif
+_GL_CXXALIASWARN (strsignal);
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# if HAVE_RAW_DECL_STRSIGNAL
+_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
+                 "use gnulib module strsignal for portability");
+# endif
+#endif
+
+#if @GNULIB_STRVERSCMP@
+# if !@HAVE_STRVERSCMP@
+_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
+_GL_CXXALIASWARN (strverscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef strverscmp
+# if HAVE_RAW_DECL_STRVERSCMP
+_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
+                 "use gnulib module strverscmp for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_STRING_H */
+#endif /* _@GUARD_PREFIX@_STRING_H */
diff --git a/lib/stripslash.c b/lib/stripslash.c
index 9b55da4..ef458c6 100644
--- a/lib/stripslash.c
+++ b/lib/stripslash.c
@@ -1,11 +1,12 @@
 /* stripslash.c -- remove redundant trailing slashes from a file name
 
-   Copyright (C) 1990, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1990, 2001, 2003-2006, 2009-2012 Free Software Foundation,
+   Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,28 +14,32 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "dirname.h"
 
-/* Remove trailing slashes from FILE.
-   Return true if a trailing slash was removed.
-   This is useful when using file name completion from a shell that
-   adds a "/" after directory names (such as tcsh and bash), because
-   the Unix rename and rmdir system calls return an "Invalid argument" error
-   when given a file that ends in "/" (except for the root directory).  */
+/* Remove trailing slashes from FILE.  Return true if a trailing slash
+   was removed.  This is useful when using file name completion from a
+   shell that adds a "/" after directory names (such as tcsh and
+   bash), because on symlinks to directories, several system calls
+   have different semantics according to whether a trailing slash is
+   present.  */
 
 bool
 strip_trailing_slashes (char *file)
 {
-  char *base = base_name (file);
-  char *base_lim = base + base_len (base);
-  bool had_slash = (*base_lim != '\0');
+  char *base = last_component (file);
+  char *base_lim;
+  bool had_slash;
+
+  /* last_component returns "" for file system roots, but we need to turn
+     "///" into "/".  */
+  if (! *base)
+    base = file;
+  base_lim = base + base_len (base);
+  had_slash = (*base_lim != '\0');
   *base_lim = '\0';
   return had_slash;
 }
diff --git a/lib/strndup.c b/lib/strndup.c
index 2626373..4053871 100644
--- a/lib/strndup.c
+++ b/lib/strndup.c
@@ -1,12 +1,11 @@
-/* Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006 Free
-   Software Foundation, Inc.
+/* A replacement function, for systems that lack strndup.
 
-   NOTE: The canonical source of this file is maintained with the GNU C Library.
-   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+   Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2012 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
+   Free Software Foundation; either version 3, or (at your option) any
    later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,41 +14,18 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#if !_LIBC
-# include "strndup.h"
-#endif
+#include <config.h>
 
-#include <stdlib.h>
 #include <string.h>
 
-#if !_LIBC
-# include "strnlen.h"
-# ifndef __strnlen
-#  define __strnlen strnlen
-# endif
-#endif
-
-#undef __strndup
-#if _LIBC
-# undef strndup
-#endif
-
-#ifndef weak_alias
-# define __strndup strndup
-#endif
+#include <stdlib.h>
 
 char *
-__strndup (s, n)
-     const char *s;
-     size_t n;
+strndup (char const *s, size_t n)
 {
-  size_t len = __strnlen (s, n);
+  size_t len = strnlen (s, n);
   char *new = malloc (len + 1);
 
   if (new == NULL)
@@ -58,9 +34,3 @@
   new[len] = '\0';
   return memcpy (new, s, len);
 }
-#ifdef libc_hidden_def
-libc_hidden_def (__strndup)
-#endif
-#ifdef weak_alias
-weak_alias (__strndup, strndup)
-#endif
diff --git a/lib/strndup.h b/lib/strndup.h
deleted file mode 100644
index 8eae493..0000000
--- a/lib/strndup.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Duplicate a size-bounded string.
-   Copyright (C) 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#if HAVE_STRNDUP
-
-/* Get strndup() declaration.  */
-#include <string.h>
-
-#else
-
-#include <stddef.h>
-
-/* Return a newly allocated copy of at most N bytes of STRING.  */
-extern char *strndup (const char *string, size_t n);
-
-#endif
diff --git a/lib/strnlen.c b/lib/strnlen.c
index 09ba788..d36180d 100644
--- a/lib/strnlen.c
+++ b/lib/strnlen.c
@@ -1,10 +1,10 @@
 /* Find the length of STRING, but scan at most MAXLEN characters.
-   Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc.
    Written by Simon Josefsson.
 
    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)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,14 +13,11 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
-#include "strnlen.h"
+#include <string.h>
 
 /* Find the length of STRING, but scan at most MAXLEN characters.
    If no '\0' terminator is found in that many characters, return MAXLEN.  */
diff --git a/lib/strnlen.h b/lib/strnlen.h
deleted file mode 100644
index ba74dba..0000000
--- a/lib/strnlen.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Find the length of STRING, but scan at most MAXLEN characters.
-   Copyright (C) 2005 Free Software Foundation, Inc.
-   Written by Simon Josefsson.
-
-   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef STRNLEN_H
-#define STRNLEN_H
-
-/* Get strnlen declaration, if available.  */
-#include <string.h>
-
-#if defined HAVE_DECL_STRNLEN && !HAVE_DECL_STRNLEN
-/* Find the length (number of bytes) of STRING, but scan at most
-   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
-   return MAXLEN.  */
-extern size_t strnlen(const char *string, size_t maxlen);
-#endif
-
-#endif /* STRNLEN_H */
diff --git a/lib/strnlen1.c b/lib/strnlen1.c
new file mode 100644
index 0000000..52dc507
--- /dev/null
+++ b/lib/strnlen1.c
@@ -0,0 +1,35 @@
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   Copyright (C) 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "strnlen1.h"
+
+#include <string.h>
+
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   If no '\0' terminator is found in that many characters, return MAXLEN.  */
+/* This is the same as strnlen (string, maxlen - 1) + 1.  */
+size_t
+strnlen1 (const char *string, size_t maxlen)
+{
+  const char *end = (const char *) memchr (string, '\0', maxlen);
+  if (end != NULL)
+    return end - string + 1;
+  else
+    return maxlen;
+}
diff --git a/lib/strnlen1.h b/lib/strnlen1.h
new file mode 100644
index 0000000..4c4f0c0
--- /dev/null
+++ b/lib/strnlen1.h
@@ -0,0 +1,40 @@
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   Copyright (C) 2005, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STRNLEN1_H
+#define _STRNLEN1_H
+
+#include <stddef.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   If no '\0' terminator is found in that many characters, return MAXLEN.  */
+/* This is the same as strnlen (string, maxlen - 1) + 1.  */
+extern size_t strnlen1 (const char *string, size_t maxlen)
+  _GL_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _STRNLEN1_H */
diff --git a/lib/strtol.c b/lib/strtol.c
index 9bfbe3c..bf992a8 100644
--- a/lib/strtol.c
+++ b/lib/strtol.c
@@ -1,14 +1,14 @@
 /* Convert string representation of a number into an integer value.
 
-   Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2005
-   Free Software Foundation, Inc.
+   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2012 Free Software
+   Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C
    Library.  Bugs can be reported to bug-glibc@gnu.org.
 
-   This program is free software; you can redistribute it and/or modify it
+   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
+   Free Software Foundation; either version 3 of the License, or any
    later version.
 
    This program is distributed in the hope that it will be useful,
@@ -17,22 +17,16 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifdef _LIBC
 # define USE_NUMBER_GROUPING
+#else
+# include <config.h>
 #endif
 
 #include <ctype.h>
 #include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
 #ifndef __set_errno
 # define __set_errno(Val) errno = (Val)
 #endif
@@ -46,7 +40,7 @@
 # include "../locale/localeinfo.h"
 #endif
 
-/* Nonzero if we are defining `strtoul' or `strtoull', operating on
+/* Nonzero if we are defining 'strtoul' or 'strtoull', operating on
    unsigned integers.  */
 #ifndef UNSIGNED
 # define UNSIGNED 0
@@ -116,13 +110,13 @@
 # endif
 #endif
 
-/* If QUAD is defined, we are defining `strtoll' or `strtoull',
-   operating on `long long int's.  */
+/* If QUAD is defined, we are defining 'strtoll' or 'strtoull',
+   operating on 'long long int's.  */
 #ifdef QUAD
 # define LONG long long
-# define STRTOL_LONG_MIN LONG_LONG_MIN
-# define STRTOL_LONG_MAX LONG_LONG_MAX
-# define STRTOL_ULONG_MAX ULONG_LONG_MAX
+# define STRTOL_LONG_MIN LLONG_MIN
+# define STRTOL_LONG_MAX LLONG_MAX
+# define STRTOL_ULONG_MAX ULLONG_MAX
 
 /* The extra casts in the following macros work around compiler bugs,
    e.g., in Cray C 5.0.3.0.  */
@@ -144,28 +138,28 @@
    your host.  */
 # define TYPE_MINIMUM(t) \
    ((t) (! TYPE_SIGNED (t) \
-	 ? (t) 0 \
-	 : TYPE_SIGNED_MAGNITUDE (t) \
-	 ? ~ (t) 0 \
-	 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+         ? (t) 0 \
+         : TYPE_SIGNED_MAGNITUDE (t) \
+         ? ~ (t) 0 \
+         : ~ TYPE_MAXIMUM (t)))
 # define TYPE_MAXIMUM(t) \
    ((t) (! TYPE_SIGNED (t) \
-	 ? (t) -1 \
-	 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+         ? (t) -1 \
+         : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
 
-# ifndef ULONG_LONG_MAX
-#  define ULONG_LONG_MAX TYPE_MAXIMUM (unsigned long long)
+# ifndef ULLONG_MAX
+#  define ULLONG_MAX TYPE_MAXIMUM (unsigned long long)
 # endif
-# ifndef LONG_LONG_MAX
-#  define LONG_LONG_MAX TYPE_MAXIMUM (long long int)
+# ifndef LLONG_MAX
+#  define LLONG_MAX TYPE_MAXIMUM (long long int)
 # endif
-# ifndef LONG_LONG_MIN
-#  define LONG_LONG_MIN TYPE_MINIMUM (long long int)
+# ifndef LLONG_MIN
+#  define LLONG_MIN TYPE_MINIMUM (long long int)
 # endif
 
 # if __GNUC__ == 2 && __GNUC_MINOR__ < 7
    /* Work around gcc bug with using this constant.  */
-   static const unsigned long long int maxquad = ULONG_LONG_MAX;
+   static const unsigned long long int maxquad = ULLONG_MAX;
 #  undef STRTOL_ULONG_MAX
 #  define STRTOL_ULONG_MAX maxquad
 # endif
@@ -192,11 +186,8 @@
 # define LOCALE_PARAM_PROTO
 #endif
 
-#if defined _LIBC || defined HAVE_WCHAR_H
-# include <wchar.h>
-#endif
-
 #ifdef USE_WIDE_CHAR
+# include <wchar.h>
 # include <wctype.h>
 # define L_(Ch) L##Ch
 # define UCHAR_TYPE wint_t
@@ -211,11 +202,6 @@
 #  define TOUPPER(Ch) towupper (Ch)
 # endif
 #else
-# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
-#  define IN_CTYPE_DOMAIN(c) 1
-# else
-#  define IN_CTYPE_DOMAIN(c) isascii(c)
-# endif
 # define L_(Ch) Ch
 # define UCHAR_TYPE unsigned char
 # define STRING_TYPE char
@@ -224,9 +210,9 @@
 #  define ISALPHA(Ch) __isalpha_l ((Ch), loc)
 #  define TOUPPER(Ch) __toupper_l ((Ch), loc)
 # else
-#  define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch))
-#  define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
-#  define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch))
+#  define ISSPACE(Ch) isspace (Ch)
+#  define ISALPHA(Ch) isalpha (Ch)
+#  define TOUPPER(Ch) toupper (Ch)
 # endif
 #endif
 
@@ -241,7 +227,7 @@
 
 
 
-/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
+/* Convert NPTR to an 'unsigned long int' or 'long int' in base BASE.
    If BASE is 0 the base is determined by the presence of a leading
    zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
    If BASE is < 2 or > 36, it is reset to 10.
@@ -250,7 +236,7 @@
 
 INT
 INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-		   int base, int group LOCALE_PARAM_PROTO)
+                   int base, int group LOCALE_PARAM_PROTO)
 {
   int negative;
   register unsigned LONG int cutoff;
@@ -275,18 +261,18 @@
     {
       grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
       if (*grouping <= 0 || *grouping == CHAR_MAX)
-	grouping = NULL;
+        grouping = NULL;
       else
-	{
-	  /* Figure out the thousands separator character.  */
+        {
+          /* Figure out the thousands separator character.  */
 # if defined _LIBC || defined _HAVE_BTOWC
-	  thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
-	  if (thousands == WEOF)
-	    thousands = L'\0';
+          thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
+          if (thousands == WEOF)
+            thousands = L'\0';
 # endif
-	  if (thousands == L'\0')
-	    grouping = NULL;
-	}
+          if (thousands == L'\0')
+            grouping = NULL;
+        }
     }
   else
     grouping = NULL;
@@ -324,12 +310,12 @@
   if (*s == L_('0'))
     {
       if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
-	{
-	  s += 2;
-	  base = 16;
-	}
+        {
+          s += 2;
+          base = 16;
+        }
       else if (base == 0)
-	base = 8;
+        base = 8;
     }
   else if (base == 0)
     base = 10;
@@ -343,14 +329,14 @@
       /* Find the end of the digit string and check its grouping.  */
       end = s;
       for (c = *end; c != L_('\0'); c = *++end)
-	if ((wchar_t) c != thousands
-	    && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9'))
-	    && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base))
-	  break;
+        if ((wchar_t) c != thousands
+            && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9'))
+            && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base))
+          break;
       if (*s == thousands)
-	end = s;
+        end = s;
       else
-	end = correctly_grouped_prefix (s, end, thousands, grouping);
+        end = correctly_grouped_prefix (s, end, thousands, grouping);
     }
   else
 #endif
@@ -364,23 +350,23 @@
   for (c = *s; c != L_('\0'); c = *++s)
     {
       if (s == end)
-	break;
+        break;
       if (c >= L_('0') && c <= L_('9'))
-	c -= L_('0');
+        c -= L_('0');
       else if (ISALPHA (c))
-	c = TOUPPER (c) - L_('A') + 10;
+        c = TOUPPER (c) - L_('A') + 10;
       else
-	break;
+        break;
       if ((int) c >= base)
-	break;
+        break;
       /* Check for overflow.  */
       if (i > cutoff || (i == cutoff && c > cutlim))
-	overflow = 1;
+        overflow = 1;
       else
-	{
-	  i *= (unsigned LONG int) base;
-	  i += c;
-	}
+        {
+          i *= (unsigned LONG int) base;
+          i += c;
+        }
     }
 
   /* Check if anything actually happened.  */
@@ -394,11 +380,11 @@
 
 #if !UNSIGNED
   /* Check for a value that is within the range of
-     `unsigned LONG int', but outside the range of `LONG int'.  */
+     'unsigned LONG int', but outside the range of 'LONG int'.  */
   if (overflow == 0
       && i > (negative
-	      ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
-	      : (unsigned LONG int) STRTOL_LONG_MAX))
+              ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
+              : (unsigned LONG int) STRTOL_LONG_MAX))
     overflow = 1;
 #endif
 
@@ -419,15 +405,15 @@
   /* We must handle a special case here: the base is 0 or 16 and the
      first two characters are '0' and 'x', but the rest are no
      hexadecimal digits.  This is no error case.  We return 0 and
-     ENDPTR points to the `x`.  */
+     ENDPTR points to the 'x'.  */
   if (endptr != NULL)
     {
       if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
-	  && save[-2] == L_('0'))
-	*endptr = (STRING_TYPE *) &save[-1];
+          && save[-2] == L_('0'))
+        *endptr = (STRING_TYPE *) &save[-1];
       else
-	/*  There was no number to convert.  */
-	*endptr = (STRING_TYPE *) nptr;
+        /*  There was no number to convert.  */
+        *endptr = (STRING_TYPE *) nptr;
     }
 
   return 0L;
@@ -441,7 +427,7 @@
 weak_function
 #endif
 strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-	int base LOCALE_PARAM_PROTO)
+        int base LOCALE_PARAM_PROTO)
 {
   return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
 }
diff --git a/lib/strtoul.c b/lib/strtoul.c
index 79ceed2..e99da41 100644
--- a/lib/strtoul.c
+++ b/lib/strtoul.c
@@ -1,20 +1,19 @@
-/* Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1997, 2009-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#define	UNSIGNED	1
+#define UNSIGNED        1
 
 #include "strtol.c"
diff --git a/lib/strverscmp.c b/lib/strverscmp.c
index 6276bca..490773d 100644
--- a/lib/strverscmp.c
+++ b/lib/strverscmp.c
@@ -1,11 +1,12 @@
 /* Compare strings while treating digits characters numerically.
-   Copyright (C) 1997, 2000, 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000, 2002, 2004, 2006, 2009-2012 Free Software
+   Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997.
 
    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)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,10 +15,9 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
+#if !_LIBC
 # include <config.h>
 #endif
 
@@ -37,12 +37,12 @@
 
 
 /* ISDIGIT differs from isdigit, as follows:
-   - Its arg may be any int or unsigned int; it need not be an unsigned char.
-   - It's guaranteed to evaluate its argument exactly once.
+   - Its arg may be any int or unsigned int; it need not be an unsigned char
+     or EOF.
    - It's typically faster.
    POSIX says that only '0' through '9' are digits.  Prefer ISDIGIT to
-   ISDIGIT_LOCALE unless it's important to use the locale's definition
-   of `digit' even when the host does not conform to POSIX.  */
+   isdigit unless it's important to use the locale's definition
+   of "digit" even when the host does not conform to POSIX.  */
 #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
 
 #undef __strverscmp
@@ -117,8 +117,8 @@
 
     case LEN:
       while (ISDIGIT (*p1++))
-	if (!ISDIGIT (*p2++))
-	  return 1;
+        if (!ISDIGIT (*p2++))
+          return 1;
 
       return ISDIGIT (*p2) ? -1 : diff;
 
diff --git a/lib/strverscmp.h b/lib/strverscmp.h
deleted file mode 100644
index 7edeac5..0000000
--- a/lib/strverscmp.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Compare strings while treating digits characters numerically.
-
-   Copyright (C) 1997, 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef STRVERSCMP_H_
-# define STRVERSCMP_H_
-
-int strverscmp (const char *, const char *);
-
-#endif /* not STRVERSCMP_H_ */
diff --git a/lib/subpipe.c b/lib/subpipe.c
deleted file mode 100644
index 646aa8e..0000000
--- a/lib/subpipe.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Subprocesses with pipes.
-
-   Copyright (C) 2002, 2004, 2005, 2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Paul Eggert <eggert@twinsun.com>
-   and Florian Krohm <florian@edamail.fishkill.ibm.com>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "subpipe.h"
-
-#include <errno.h>
-
-#include <signal.h>
-#if ! defined SIGCHLD && defined SIGCLD
-# define SIGCHLD SIGCLD
-#endif
-
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifndef STDIN_FILENO
-# define STDIN_FILENO 0
-#endif
-#ifndef STDOUT_FILENO
-# define STDOUT_FILENO 1
-#endif
-#if ! HAVE_DUP2 && ! defined dup2
-# include <fcntl.h>
-# define dup2(f, t) (close (t), fcntl (f, F_DUPFD, t))
-#endif
-
-#if HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
-#if HAVE_VFORK_H
-# include <vfork.h>
-#endif
-#if ! HAVE_WORKING_VFORK
-# define vfork fork
-#endif
-
-#include "error.h"
-#include "unistd-safer.h"
-
-#include "gettext.h"
-#define _(Msgid)  gettext (Msgid)
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if ! defined __GNUC__ || __GNUC__ < 2 || \
-(__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
-#  define __attribute__(Spec) /* empty */
-# endif
-#endif
-
-#ifndef ATTRIBUTE_UNUSED
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif
-
-
-/* Initialize this module.  */
-
-void
-init_subpipe (void)
-{
-#ifdef SIGCHLD
-  /* System V fork+wait does not work if SIGCHLD is ignored.  */
-  signal (SIGCHLD, SIG_DFL);
-#endif
-}
-
-
-/* Create a subprocess that is run as a filter.  ARGV is the
-   NULL-terminated argument vector for the subprocess.  Store read and
-   write file descriptors for communication with the subprocess into
-   FD[0] and FD[1]: input meant for the process can be written into
-   FD[0], and output from the process can be read from FD[1].  Return
-   the subprocess id.
-
-   To avoid deadlock, the invoker must not let incoming data pile up
-   in FD[1] while writing data to FD[0].  */
-
-pid_t
-create_subpipe (char const * const *argv, int fd[2])
-{
-  int pipe_fd[2];
-  int child_fd[2];
-  pid_t pid;
-
-  if (pipe (child_fd) != 0
-      || (child_fd[0] = fd_safer (child_fd[0])) < 0
-      || (fd[0] = fd_safer (child_fd[1])) < 0
-      || pipe (pipe_fd) != 0
-      || (fd[1] = fd_safer (pipe_fd[0])) < 0
-      || (child_fd[1] = fd_safer (pipe_fd[1])) < 0)
-    error (EXIT_FAILURE, errno,
-	   "pipe");
-
-  pid = vfork ();
-  if (pid < 0)
-    error (EXIT_FAILURE, errno,
-	   "fork");
-
-  if (! pid)
-    {
-      /* Child.  */
-      close (fd[0]);
-      close (fd[1]);
-      dup2 (child_fd[0], STDIN_FILENO);
-      close (child_fd[0]);
-      dup2 (child_fd[1], STDOUT_FILENO);
-      close (child_fd[1]);
-
-      /* The cast to (char **) rather than (char * const *) is needed
-	 for portability to older hosts with a nonstandard prototype
-	 for execvp.  */
-      execvp (argv[0], (char **) argv);
-
-      _exit (errno == ENOENT ? 127 : 126);
-    }
-
-  /* Parent.  */
-  close (child_fd[0]);
-  close (child_fd[1]);
-  return pid;
-}
-
-
-/* Wait for the subprocess to exit.  */
-
-void
-reap_subpipe (pid_t pid, char const *program)
-{
-#if HAVE_WAITPID || defined waitpid
-  int wstatus;
-  if (waitpid (pid, &wstatus, 0) < 0)
-    error (EXIT_FAILURE, errno,
-	   "waitpid");
-  else
-    {
-      int status = WIFEXITED (wstatus) ? WEXITSTATUS (wstatus) : -1;
-      if (status)
-	error (EXIT_FAILURE, 0,
-	       _(status == 126
-		 ? "subsidiary program `%s' could not be invoked"
-		 : status == 127
-		 ? "subsidiary program `%s' not found"
-		 : status < 0
-		 ? "subsidiary program `%s' failed"
-		 : "subsidiary program `%s' failed (exit status %d)"),
-	       program, status);
-    }
-#endif
-}
-
-void
-end_of_output_subpipe (pid_t pid ATTRIBUTE_UNUSED,
-		       int fd[2] ATTRIBUTE_UNUSED)
-{
-}
diff --git a/lib/subpipe.h b/lib/subpipe.h
deleted file mode 100644
index 1083d32..0000000
--- a/lib/subpipe.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Subprocesses with pipes.
-   Copyright (C) 2002, 2004, 2005 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 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Paul Eggert <eggert@twinsun.com>
-   and Florian Krohm <florian@edamail.fishkill.ibm.com>.  */
-
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-void init_subpipe (void);
-pid_t create_subpipe (char const * const *, int[2]);
-void end_of_output_subpipe (pid_t, int[2]);
-void reap_subpipe (pid_t, char const *);
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
new file mode 100644
index 0000000..ac05ddb
--- /dev/null
+++ b/lib/sys_stat.in.h
@@ -0,0 +1,728 @@
+/* Provide a more complete sys/stat header file.
+   Copyright (C) 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
+
+/* This file is supposed to be used on platforms where <sys/stat.h> is
+   incomplete.  It is intended to provide definitions and prototypes
+   needed by an application.  Start with what the system provides.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_system_sys_stat_h
+/* Special invocation convention.  */
+
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_SYS_STAT_H
+
+/* Get nlink_t.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+
+/* Get struct timespec.  */
+#include <time.h>
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
+
+#ifndef _@GUARD_PREFIX@_SYS_STAT_H
+#define _@GUARD_PREFIX@_SYS_STAT_H
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
+   headers that may declare mkdir().  Native Windows platforms declare mkdir
+   in <io.h> and/or <direct.h>, not in <unistd.h>.  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# include <io.h>     /* mingw32, mingw64 */
+# include <direct.h> /* mingw64, MSVC 9 */
+#endif
+
+/* Native Windows platforms declare umask() in <io.h>.  */
+#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+/* Large File Support on native Windows.  */
+#if @WINDOWS_64_BIT_ST_SIZE@
+# define stat _stati64
+#endif
+
+#ifndef S_IFIFO
+# ifdef _S_IFIFO
+#  define S_IFIFO _S_IFIFO
+# endif
+#endif
+
+#ifndef S_IFMT
+# define S_IFMT 0170000
+#endif
+
+#if STAT_MACROS_BROKEN
+# undef S_ISBLK
+# undef S_ISCHR
+# undef S_ISDIR
+# undef S_ISFIFO
+# undef S_ISLNK
+# undef S_ISNAM
+# undef S_ISMPB
+# undef S_ISMPC
+# undef S_ISNWK
+# undef S_ISREG
+# undef S_ISSOCK
+#endif
+
+#ifndef S_ISBLK
+# ifdef S_IFBLK
+#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+# else
+#  define S_ISBLK(m) 0
+# endif
+#endif
+
+#ifndef S_ISCHR
+# ifdef S_IFCHR
+#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+# else
+#  define S_ISCHR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDIR
+# ifdef S_IFDIR
+#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# else
+#  define S_ISDIR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDOOR /* Solaris 2.5 and up */
+# define S_ISDOOR(m) 0
+#endif
+
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# else
+#  define S_ISFIFO(m) 0
+# endif
+#endif
+
+#ifndef S_ISLNK
+# ifdef S_IFLNK
+#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+# else
+#  define S_ISLNK(m) 0
+# endif
+#endif
+
+#ifndef S_ISMPB /* V7 */
+# ifdef S_IFMPB
+#  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
+#  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
+# else
+#  define S_ISMPB(m) 0
+#  define S_ISMPC(m) 0
+# endif
+#endif
+
+#ifndef S_ISNAM /* Xenix */
+# ifdef S_IFNAM
+#  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
+# else
+#  define S_ISNAM(m) 0
+# endif
+#endif
+
+#ifndef S_ISNWK /* HP/UX */
+# ifdef S_IFNWK
+#  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
+# else
+#  define S_ISNWK(m) 0
+# endif
+#endif
+
+#ifndef S_ISPORT /* Solaris 10 and up */
+# define S_ISPORT(m) 0
+#endif
+
+#ifndef S_ISREG
+# ifdef S_IFREG
+#  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+# else
+#  define S_ISREG(m) 0
+# endif
+#endif
+
+#ifndef S_ISSOCK
+# ifdef S_IFSOCK
+#  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+# else
+#  define S_ISSOCK(m) 0
+# endif
+#endif
+
+
+#ifndef S_TYPEISMQ
+# define S_TYPEISMQ(p) 0
+#endif
+
+#ifndef S_TYPEISTMO
+# define S_TYPEISTMO(p) 0
+#endif
+
+
+#ifndef S_TYPEISSEM
+# ifdef S_INSEM
+#  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
+# else
+#  define S_TYPEISSEM(p) 0
+# endif
+#endif
+
+#ifndef S_TYPEISSHM
+# ifdef S_INSHD
+#  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
+# else
+#  define S_TYPEISSHM(p) 0
+# endif
+#endif
+
+/* high performance ("contiguous data") */
+#ifndef S_ISCTG
+# define S_ISCTG(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with data  */
+#ifndef S_ISOFD
+# define S_ISOFD(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with no data  */
+#ifndef S_ISOFL
+# define S_ISOFL(p) 0
+#endif
+
+/* 4.4BSD whiteout */
+#ifndef S_ISWHT
+# define S_ISWHT(m) 0
+#endif
+
+/* If any of the following are undefined,
+   define them to their de facto standard values.  */
+#if !S_ISUID
+# define S_ISUID 04000
+#endif
+#if !S_ISGID
+# define S_ISGID 02000
+#endif
+
+/* S_ISVTX is a common extension to POSIX.  */
+#ifndef S_ISVTX
+# define S_ISVTX 01000
+#endif
+
+#if !S_IRUSR && S_IREAD
+# define S_IRUSR S_IREAD
+#endif
+#if !S_IRUSR
+# define S_IRUSR 00400
+#endif
+#if !S_IRGRP
+# define S_IRGRP (S_IRUSR >> 3)
+#endif
+#if !S_IROTH
+# define S_IROTH (S_IRUSR >> 6)
+#endif
+
+#if !S_IWUSR && S_IWRITE
+# define S_IWUSR S_IWRITE
+#endif
+#if !S_IWUSR
+# define S_IWUSR 00200
+#endif
+#if !S_IWGRP
+# define S_IWGRP (S_IWUSR >> 3)
+#endif
+#if !S_IWOTH
+# define S_IWOTH (S_IWUSR >> 6)
+#endif
+
+#if !S_IXUSR && S_IEXEC
+# define S_IXUSR S_IEXEC
+#endif
+#if !S_IXUSR
+# define S_IXUSR 00100
+#endif
+#if !S_IXGRP
+# define S_IXGRP (S_IXUSR >> 3)
+#endif
+#if !S_IXOTH
+# define S_IXOTH (S_IXUSR >> 6)
+#endif
+
+#if !S_IRWXU
+# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
+#endif
+#if !S_IRWXG
+# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
+#endif
+#if !S_IRWXO
+# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
+#endif
+
+/* S_IXUGO is a common extension to POSIX.  */
+#if !S_IXUGO
+# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
+#endif
+
+#ifndef S_IRWXUGO
+# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
+#endif
+
+/* Macros for futimens and utimensat.  */
+#ifndef UTIME_NOW
+# define UTIME_NOW (-1)
+# define UTIME_OMIT (-2)
+#endif
+
+
+#if @GNULIB_FCHMODAT@
+# if !@HAVE_FCHMODAT@
+_GL_FUNCDECL_SYS (fchmodat, int,
+                  (int fd, char const *file, mode_t mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (fchmodat, int,
+                  (int fd, char const *file, mode_t mode, int flag));
+_GL_CXXALIASWARN (fchmodat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchmodat
+# if HAVE_RAW_DECL_FCHMODAT
+_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FSTAT@
+# if @REPLACE_FSTAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fstat
+#   define fstat rpl_fstat
+#  endif
+_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
+# else
+_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
+# endif
+_GL_CXXALIASWARN (fstat);
+#elif @WINDOWS_64_BIT_ST_SIZE@
+/* Above, we define stat to _stati64.  */
+# define fstat _fstati64
+#elif defined GNULIB_POSIXCHECK
+# undef fstat
+# if HAVE_RAW_DECL_FSTAT
+_GL_WARN_ON_USE (fstat, "fstat has portability problems - "
+                 "use gnulib module fstat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FSTATAT@
+# if @REPLACE_FSTATAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fstatat
+#   define fstatat rpl_fstatat
+#  endif
+_GL_FUNCDECL_RPL (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags));
+# else
+#  if !@HAVE_FSTATAT@
+_GL_FUNCDECL_SYS (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags));
+# endif
+_GL_CXXALIASWARN (fstatat);
+#elif defined GNULIB_POSIXCHECK
+# undef fstatat
+# if HAVE_RAW_DECL_FSTATAT
+_GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FUTIMENS@
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
+   implementation relies on futimesat, which on Solaris 10 makes an invocation
+   to futimens that is meant to invoke the libc's futimens(), not gnulib's
+   futimens().  */
+# if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef futimens
+#   define futimens rpl_futimens
+#  endif
+_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
+_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
+# else
+#  if !@HAVE_FUTIMENS@
+_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
+#  endif
+_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
+# endif
+# if @HAVE_FUTIMENS@
+_GL_CXXALIASWARN (futimens);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef futimens
+# if HAVE_RAW_DECL_FUTIMENS
+_GL_WARN_ON_USE (futimens, "futimens is not portable - "
+                 "use gnulib module futimens for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LCHMOD@
+/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
+   denotes a symbolic link.  */
+# if !@HAVE_LCHMOD@
+/* The lchmod replacement follows symbolic links.  Callers should take
+   this into account; lchmod should be applied only to arguments that
+   are known to not be symbolic links.  On hosts that lack lchmod,
+   this can lead to race conditions between the check and the
+   invocation of lchmod, but we know of no workarounds that are
+   reliable in general.  You might try requesting support for lchmod
+   from your operating system supplier.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lchmod chmod
+#  endif
+/* Need to cast, because on mingw, the second parameter of chmod is
+                                                int mode.  */
+_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int,
+                         (const char *filename, mode_t mode));
+# else
+#  if 0 /* assume already declared */
+_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
+# endif
+# if @HAVE_LCHMOD@
+_GL_CXXALIASWARN (lchmod);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef lchmod
+# if HAVE_RAW_DECL_LCHMOD
+_GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
+                 "use gnulib module lchmod for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LSTAT@
+# if ! @HAVE_LSTAT@
+/* mingw does not support symlinks, therefore it does not have lstat.  But
+   without links, stat does just fine.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lstat stat
+#  endif
+_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf));
+# elif @REPLACE_LSTAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lstat
+#   define lstat rpl_lstat
+#  endif
+_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf));
+# else
+_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
+# endif
+# if @HAVE_LSTAT@
+_GL_CXXALIASWARN (lstat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef lstat
+# if HAVE_RAW_DECL_LSTAT
+_GL_WARN_ON_USE (lstat, "lstat is unportable - "
+                 "use gnulib module lstat for portability");
+# endif
+#endif
+
+
+#if @REPLACE_MKDIR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef mkdir
+#  define mkdir rpl_mkdir
+# endif
+_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+#else
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
+   Additionally, it declares _mkdir (and depending on compile flags, an
+   alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
+   which are included above.  */
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+#  if !GNULIB_defined_rpl_mkdir
+static int
+rpl_mkdir (char const *name, mode_t mode)
+{
+  return _mkdir (name);
+}
+#   define GNULIB_defined_rpl_mkdir 1
+#  endif
+
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkdir rpl_mkdir
+#  endif
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
+# endif
+#endif
+_GL_CXXALIASWARN (mkdir);
+
+
+#if @GNULIB_MKDIRAT@
+# if !@HAVE_MKDIRAT@
+_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
+                                _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkdirat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdirat
+# if HAVE_RAW_DECL_MKDIRAT
+_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKFIFO@
+# if @REPLACE_MKFIFO@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mkfifo
+#   define mkfifo rpl_mkfifo
+#  endif
+_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
+# else
+#  if !@HAVE_MKFIFO@
+_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
+# endif
+_GL_CXXALIASWARN (mkfifo);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifo
+# if HAVE_RAW_DECL_MKFIFO
+_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
+                 "use gnulib module mkfifo for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKFIFOAT@
+# if !@HAVE_MKFIFOAT@
+_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
+                                 _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkfifoat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifoat
+# if HAVE_RAW_DECL_MKFIFOAT
+_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
+                 "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKNOD@
+# if @REPLACE_MKNOD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mknod
+#   define mknod rpl_mknod
+#  endif
+_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# else
+#  if !@HAVE_MKNOD@
+_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on OSF/1 5.1, the third parameter is '...'.  */
+_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# endif
+_GL_CXXALIASWARN (mknod);
+#elif defined GNULIB_POSIXCHECK
+# undef mknod
+# if HAVE_RAW_DECL_MKNOD
+_GL_WARN_ON_USE (mknod, "mknod is not portable - "
+                 "use gnulib module mknod for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKNODAT@
+# if !@HAVE_MKNODAT@
+_GL_FUNCDECL_SYS (mknodat, int,
+                  (int fd, char const *file, mode_t mode, dev_t dev)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mknodat, int,
+                  (int fd, char const *file, mode_t mode, dev_t dev));
+_GL_CXXALIASWARN (mknodat);
+#elif defined GNULIB_POSIXCHECK
+# undef mknodat
+# if HAVE_RAW_DECL_MKNODAT
+_GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
+                 "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_STAT@
+# if @REPLACE_STAT@
+/* We can't use the object-like #define stat rpl_stat, because of
+   struct stat.  This means that rpl_stat will not be used if the user
+   does (stat)(a,b).  Oh well.  */
+#  if defined _AIX && defined stat && defined _LARGE_FILES
+    /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
+       so we have to replace stat64() instead of stat(). */
+#   undef stat64
+#   define stat64(name, st) rpl_stat (name, st)
+#  elif @WINDOWS_64_BIT_ST_SIZE@
+    /* Above, we define stat to _stati64.  */
+#   if defined __MINGW32__ && defined _stati64
+#    ifndef _USE_32BIT_TIME_T
+      /* The system headers define _stati64 to _stat64.  */
+#     undef _stat64
+#     define _stat64(name, st) rpl_stat (name, st)
+#    endif
+#   elif defined _MSC_VER && defined _stati64
+#    ifdef _USE_32BIT_TIME_T
+      /* The system headers define _stati64 to _stat32i64.  */
+#     undef _stat32i64
+#     define _stat32i64(name, st) rpl_stat (name, st)
+#    else
+      /* The system headers define _stati64 to _stat64.  */
+#     undef _stat64
+#     define _stat64(name, st) rpl_stat (name, st)
+#    endif
+#   else
+#    undef _stati64
+#    define _stati64(name, st) rpl_stat (name, st)
+#   endif
+#  elif defined __MINGW32__ && defined stat
+#   ifdef _USE_32BIT_TIME_T
+     /* The system headers define stat to _stat32i64.  */
+#    undef _stat32i64
+#    define _stat32i64(name, st) rpl_stat (name, st)
+#   else
+     /* The system headers define stat to _stat64.  */
+#    undef _stat64
+#    define _stat64(name, st) rpl_stat (name, st)
+#   endif
+#  elif defined _MSC_VER && defined stat
+#   ifdef _USE_32BIT_TIME_T
+     /* The system headers define stat to _stat32.  */
+#    undef _stat32
+#    define _stat32(name, st) rpl_stat (name, st)
+#   else
+     /* The system headers define stat to _stat64i32.  */
+#    undef _stat64i32
+#    define _stat64i32(name, st) rpl_stat (name, st)
+#   endif
+#  else /* !(_AIX ||__MINGW32__ ||  _MSC_VER) */
+#   undef stat
+#   define stat(name, st) rpl_stat (name, st)
+#  endif /* !_LARGE_FILES */
+_GL_EXTERN_C int stat (const char *name, struct stat *buf)
+                      _GL_ARG_NONNULL ((1, 2));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef stat
+# if HAVE_RAW_DECL_STAT
+_GL_WARN_ON_USE (stat, "stat is unportable - "
+                 "use gnulib module stat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UTIMENSAT@
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
+   implementation relies on futimesat, which on Solaris 10 makes an invocation
+   to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
+   utimensat().  */
+# if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef utimensat
+#   define utimensat rpl_utimensat
+#  endif
+_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag));
+# else
+#  if !@HAVE_UTIMENSAT@
+_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag)
+                                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag));
+# endif
+# if @HAVE_UTIMENSAT@
+_GL_CXXALIASWARN (utimensat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef utimensat
+# if HAVE_RAW_DECL_UTIMENSAT
+_GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
+                 "use gnulib module utimensat for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_SYS_STAT_H */
+#endif /* _@GUARD_PREFIX@_SYS_STAT_H */
+#endif
diff --git a/lib/sys_types.in.h b/lib/sys_types.in.h
new file mode 100644
index 0000000..8139d98
--- /dev/null
+++ b/lib/sys_types.in.h
@@ -0,0 +1,51 @@
+/* Provide a more complete sys/types.h.
+
+   Copyright (C) 2011-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+
+#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
+#define _@GUARD_PREFIX@_SYS_TYPES_H
+
+/* Override off_t if Large File Support is requested on native Windows.  */
+#if @WINDOWS_64_BIT_OFF_T@
+/* Same as int64_t in <stdint.h>.  */
+# if defined _MSC_VER
+#  define off_t __int64
+# else
+#  define off_t long long int
+# endif
+/* Indicator, for gnulib internal purposes.  */
+# define _GL_WINDOWS_64_BIT_OFF_T 1
+#endif
+
+/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
+    && ! defined __GLIBC__
+# include <stddef.h>
+#endif
+
+#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
+#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
diff --git a/lib/sys_wait.in.h b/lib/sys_wait.in.h
new file mode 100644
index 0000000..9264ebb
--- /dev/null
+++ b/lib/sys_wait.in.h
@@ -0,0 +1,129 @@
+/* A POSIX-like <sys/wait.h>.
+   Copyright (C) 2001-2003, 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef _@GUARD_PREFIX@_SYS_WAIT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_SYS_WAIT_H
+#define _@GUARD_PREFIX@_SYS_WAIT_H
+
+/* Get pid_t.  */
+#include <sys/types.h>
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+/* Unix API.  */
+
+/* The following macros apply to an argument x, that is a status of a process,
+   as returned by waitpid().
+   On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and
+   WTERMSIG are bits 7..0, while BeOS uses the opposite.  Therefore programs
+   have to use the abstract macros.  */
+
+/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x)
+   is true.  */
+# ifndef WIFSIGNALED
+#  define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f)
+# endif
+# ifndef WIFEXITED
+#  define WIFEXITED(x) (WTERMSIG (x) == 0)
+# endif
+# ifndef WIFSTOPPED
+#  define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f)
+# endif
+
+/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true.  */
+# ifndef WTERMSIG
+#  define WTERMSIG(x) ((x) & 0x7f)
+# endif
+
+/* The exit status. Only to be accessed if WIFEXITED(x) is true.  */
+# ifndef WEXITSTATUS
+#  define WEXITSTATUS(x) (((x) >> 8) & 0xff)
+# endif
+
+/* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true.  */
+# ifndef WSTOPSIG
+#  define WSTOPSIG(x) (((x) >> 8) & 0x7f)
+# endif
+
+/* True if the process dumped core.  Not standardized by POSIX.  */
+# ifndef WCOREDUMP
+#  define WCOREDUMP(x) ((x) & 0x80)
+# endif
+
+#else
+/* Native Windows API.  */
+
+# include <signal.h> /* for SIGTERM */
+
+/* The following macros apply to an argument x, that is a status of a process,
+   as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess().
+   This value is simply an 'int', not composed of bit fields.  */
+
+/* When an unhandled fatal signal terminates a process, the exit code is 3.  */
+# define WIFSIGNALED(x) ((x) == 3)
+# define WIFEXITED(x) ((x) != 3)
+# define WIFSTOPPED(x) 0
+
+/* The signal that terminated a process is not known posthum.  */
+# define WTERMSIG(x) SIGTERM
+
+# define WEXITSTATUS(x) (x)
+
+/* There are no stopping signals.  */
+# define WSTOPSIG(x) 0
+
+/* There are no core dumps.  */
+# define WCOREDUMP(x) 0
+
+#endif
+
+
+/* Declarations of functions.  */
+
+#if @GNULIB_WAITPID@
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+_GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options));
+# endif
+_GL_CXXALIAS_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options));
+_GL_CXXALIASWARN (waitpid);
+#elif defined GNULIB_POSIXCHECK
+# undef waitpid
+# if HAVE_RAW_DECL_WAITPID
+_GL_WARN_ON_USE (waitpid, "waitpid is unportable - "
+                 "use gnulib module sys_wait for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_SYS_WAIT_H */
+#endif /* _@GUARD_PREFIX@_SYS_WAIT_H */
diff --git a/lib/time.in.h b/lib/time.in.h
new file mode 100644
index 0000000..04cde05
--- /dev/null
+++ b/lib/time.in.h
@@ -0,0 +1,248 @@
+/* A more-standard <time.h>.
+
+   Copyright (C) 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* Don't get in the way of glibc when it includes time.h merely to
+   declare a few standard symbols, rather than to declare all the
+   symbols.  Also, Solaris 8 <time.h> eventually includes itself
+   recursively; if that is happening, just include the system <time.h>
+   without adding our own declarations.  */
+#if (defined __need_time_t || defined __need_clock_t \
+     || defined __need_timespec \
+     || defined _@GUARD_PREFIX@_TIME_H)
+
+# @INCLUDE_NEXT@ @NEXT_TIME_H@
+
+#else
+
+# define _@GUARD_PREFIX@_TIME_H
+
+# @INCLUDE_NEXT@ @NEXT_TIME_H@
+
+/* NetBSD 5.0 mis-defines NULL.  */
+# include <stddef.h>
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
+   Or they define it with the wrong member names or define it in <sys/time.h>
+   (e.g., FreeBSD circa 1997).  Stock Mingw does not define it, but the
+   pthreads-win32 library defines it in <pthread.h>.  */
+# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
+#  if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+#   include <sys/time.h>
+#  elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+#   include <pthread.h>
+/* The pthreads-win32 <pthread.h> also defines a couple of broken macros.  */
+#   undef asctime_r
+#   undef ctime_r
+#   undef gmtime_r
+#   undef localtime_r
+#   undef rand_r
+#   undef strtok_r
+#  else
+
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+
+#   if !GNULIB_defined_struct_timespec
+#    undef timespec
+#    define timespec rpl_timespec
+struct timespec
+{
+  time_t tv_sec;
+  long int tv_nsec;
+};
+#    define GNULIB_defined_struct_timespec 1
+#   endif
+
+#   ifdef __cplusplus
+}
+#   endif
+
+#  endif
+# endif
+
+# if !GNULIB_defined_struct_time_t_must_be_integral
+/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires
+   time_t to be an integer type, even though C99 permits floating
+   point.  We don't know of any implementation that uses floating
+   point, and it is much easier to write code that doesn't have to
+   worry about that corner case, so we force the issue.  */
+struct __time_t_must_be_integral {
+  unsigned int __floating_time_t_unsupported : (time_t) 1;
+};
+#  define GNULIB_defined_struct_time_t_must_be_integral 1
+# endif
+
+/* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
+   return -1 and store the remaining time into RMTP.  See
+   <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
+# if @GNULIB_NANOSLEEP@
+#  if @REPLACE_NANOSLEEP@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define nanosleep rpl_nanosleep
+#   endif
+_GL_FUNCDECL_RPL (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp));
+#  else
+#   if ! @HAVE_NANOSLEEP@
+_GL_FUNCDECL_SYS (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp)
+                  _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_SYS (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp));
+#  endif
+_GL_CXXALIASWARN (nanosleep);
+# endif
+
+/* Return the 'time_t' representation of TP and normalize TP.  */
+# if @GNULIB_MKTIME@
+#  if @REPLACE_MKTIME@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define mktime rpl_mktime
+#   endif
+_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp));
+#  else
+_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
+#  endif
+_GL_CXXALIASWARN (mktime);
+# endif
+
+/* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
+   <http://www.opengroup.org/susv3xsh/localtime_r.html> and
+   <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
+# if @GNULIB_TIME_R@
+#  if @REPLACE_LOCALTIME_R@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef localtime_r
+#    define localtime_r rpl_localtime_r
+#   endif
+_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result)
+                                            _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result));
+#  else
+#   if ! @HAVE_DECL_LOCALTIME_R@
+_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result)
+                                            _GL_ARG_NONNULL ((1, 2)));
+#   endif
+_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result));
+#  endif
+#  if @HAVE_DECL_LOCALTIME_R@
+_GL_CXXALIASWARN (localtime_r);
+#  endif
+#  if @REPLACE_LOCALTIME_R@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef gmtime_r
+#    define gmtime_r rpl_gmtime_r
+#   endif
+_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result)
+                                         _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result));
+#  else
+#   if ! @HAVE_DECL_LOCALTIME_R@
+_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result)
+                                         _GL_ARG_NONNULL ((1, 2)));
+#   endif
+_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result));
+#  endif
+#  if @HAVE_DECL_LOCALTIME_R@
+_GL_CXXALIASWARN (gmtime_r);
+#  endif
+# endif
+
+/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
+   the resulting broken-down time into TM.  See
+   <http://www.opengroup.org/susv3xsh/strptime.html>.  */
+# if @GNULIB_STRPTIME@
+#  if ! @HAVE_STRPTIME@
+_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm)
+                                    _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm));
+_GL_CXXALIASWARN (strptime);
+# endif
+
+/* Convert TM to a time_t value, assuming UTC.  */
+# if @GNULIB_TIMEGM@
+#  if @REPLACE_TIMEGM@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef timegm
+#    define timegm rpl_timegm
+#   endif
+_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm));
+#  else
+#   if ! @HAVE_TIMEGM@
+_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
+#  endif
+_GL_CXXALIASWARN (timegm);
+# endif
+
+/* Encourage applications to avoid unsafe functions that can overrun
+   buffers when given outlandish struct tm values.  Portable
+   applications should use strftime (or even sprintf) instead.  */
+# if defined GNULIB_POSIXCHECK
+#  undef asctime
+_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef asctime_r
+_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef ctime
+_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef ctime_r
+_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+
+#endif
diff --git a/lib/timevar.c b/lib/timevar.c
index d9b533c..355ecb5 100644
--- a/lib/timevar.c
+++ b/lib/timevar.c
@@ -1,10 +1,13 @@
 /* Timing variables for measuring compiler performance.
-   Copyright (C) 2000, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2000, 2002, 2004, 2006, 2009-2012 Free Software
+   Foundation, Inc.
+
    Contributed by Alex Samuel <samuel@codesourcery.com>
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,12 +16,9 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #if IN_GCC
 
diff --git a/lib/timevar.def b/lib/timevar.def
index 04ac392..1143e99 100644
--- a/lib/timevar.def
+++ b/lib/timevar.def
@@ -1,24 +1,24 @@
 /* This file contains the definitions for timing variables used to -*- C -*-
    measure run-time performance of the compiler.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2007, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Akim Demaille <akim@freefriends.org>.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* This file contains timing variable definitions, used by timevar.h
    and timevar.c.
@@ -43,11 +43,16 @@
 DEFTIMEVAR (TV_SETS                  , "computing the sets")
 DEFTIMEVAR (TV_LR0                   , "LR(0)")
 DEFTIMEVAR (TV_LALR                  , "LALR(1)")
+DEFTIMEVAR (TV_IELR_PHASE1           , "IELR(1) Phase 1")
+DEFTIMEVAR (TV_IELR_PHASE2           , "IELR(1) Phase 2")
+DEFTIMEVAR (TV_IELR_PHASE3           , "IELR(1) Phase 3")
+DEFTIMEVAR (TV_IELR_PHASE4           , "IELR(1) Phase 4")
 DEFTIMEVAR (TV_CONFLICTS             , "conflicts")
 
 /* Time spent outputing results.  */
 DEFTIMEVAR (TV_REPORT                , "outputing report")
 DEFTIMEVAR (TV_GRAPH                 , "outputing graph")
+DEFTIMEVAR (TV_XML                   , "outputing xml")
 DEFTIMEVAR (TV_ACTIONS               , "parser action tables")
 DEFTIMEVAR (TV_PARSER                , "outputing parser")
 DEFTIMEVAR (TV_M4                    , "running m4")
diff --git a/lib/timevar.h b/lib/timevar.h
index bbeb402..a28b4cf 100644
--- a/lib/timevar.h
+++ b/lib/timevar.h
@@ -1,10 +1,13 @@
 /* Timing variables for measuring compiler performance.
-   Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2000, 2002, 2004, 2009-2012 Free Software Foundation,
+   Inc.
+
    Contributed by Alex Samuel <samuel@codesourcery.com>
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,8 +16,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef GCC_TIMEVAR_H
 #define GCC_TIMEVAR_H
diff --git a/lib/unistd--.h b/lib/unistd--.h
index 1fe6ce8..78b9e4a 100644
--- a/lib/unistd--.h
+++ b/lib/unistd--.h
@@ -1,11 +1,11 @@
 /* Like unistd.h, but redefine some names to avoid glitches.
 
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,8 +13,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
@@ -26,3 +25,8 @@
 
 #undef pipe
 #define pipe pipe_safer
+
+#if GNULIB_PIPE2_SAFER
+# undef pipe2
+# define pipe2 pipe2_safer
+#endif
diff --git a/lib/unistd-safer.h b/lib/unistd-safer.h
index f95999d..684bf79 100644
--- a/lib/unistd-safer.h
+++ b/lib/unistd-safer.h
@@ -1,11 +1,11 @@
 /* Invoke unistd-like functions, but avoid some glitches.
 
-   Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2005, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,11 +13,19 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-/* Written by Paul Eggert.  */
+/* Written by Paul Eggert and Eric Blake.  */
 
 int dup_safer (int);
 int fd_safer (int);
 int pipe_safer (int[2]);
+
+#if GNULIB_FD_SAFER_FLAG
+int dup_safer_flag (int, int);
+int fd_safer_flag (int, int);
+#endif
+
+#if GNULIB_PIPE2_SAFER
+int pipe2_safer (int[2], int);
+#endif
diff --git a/lib/unistd.c b/lib/unistd.c
new file mode 100644
index 0000000..6c6a8e2
--- /dev/null
+++ b/lib/unistd.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE
+#include "unistd.h"
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
new file mode 100644
index 0000000..6171f77
--- /dev/null
+++ b/lib/unistd.in.h
@@ -0,0 +1,1541 @@
+/* Substitute for and wrapper around <unistd.h>.
+   Copyright (C) 2003-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* Special invocation convention:
+   - On mingw, several headers, including <winsock2.h>, include <unistd.h>,
+     but we need to ensure that both the system <unistd.h> and <winsock2.h>
+     are completely included before we replace gethostname.  */
+#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \
+  && !defined _GL_WINSOCK2_H_WITNESS && defined _WINSOCK2_H
+/* <unistd.h> is being indirectly included for the first time from
+   <winsock2.h>; avoid declaring any overrides.  */
+# if @HAVE_UNISTD_H@
+#  @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+# else
+#  error unexpected; report this to bug-gnulib@gnu.org
+# endif
+# define _GL_WINSOCK2_H_WITNESS
+
+/* Normal invocation.  */
+#elif !defined _@GUARD_PREFIX@_UNISTD_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_UNISTD_H@
+# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+#endif
+
+/* Get all possible declarations of gethostname().  */
+#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \
+  && !defined _GL_INCLUDING_WINSOCK2_H
+# define _GL_INCLUDING_WINSOCK2_H
+# include <winsock2.h>
+# undef _GL_INCLUDING_WINSOCK2_H
+#endif
+
+#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
+#define _@GUARD_PREFIX@_UNISTD_H
+
+/* NetBSD 5.0 mis-defines NULL.  Also get size_t.  */
+#include <stddef.h>
+
+/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>.  */
+/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
+     || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \
+         && defined __CYGWIN__)) \
+    && ! defined __GLIBC__
+# include <stdio.h>
+#endif
+
+/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \
+    && ! defined __GLIBC__
+# include <fcntl.h>
+#endif
+
+/* mingw fails to declare _exit in <unistd.h>.  */
+/* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in
+   <unistd.h>.  */
+/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* Native Windows platforms declare chdir, getcwd, rmdir in
+   <io.h> and/or <direct.h>, not in <unistd.h>.
+   They also declare access(), chmod(), close(), dup(), dup2(), isatty(),
+   lseek(), read(), unlink(), write() in <io.h>.  */
+#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \
+      || defined GNULIB_POSIXCHECK) \
+     && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# include <io.h>     /* mingw32, mingw64 */
+# include <direct.h> /* mingw64, MSVC 9 */
+#elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \
+       || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \
+       || defined GNULIB_POSIXCHECK) \
+      && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+/* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>.
+   NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \
+     || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \
+    && !defined __GLIBC__
+# include <netdb.h>
+#endif
+
+/* MSVC defines off_t in <sys/types.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@
+/* Get off_t.  */
+# include <sys/types.h>
+#endif
+
+#if (@GNULIB_READ@ || @GNULIB_WRITE@ \
+     || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \
+     || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK)
+/* Get ssize_t.  */
+# include <sys/types.h>
+#endif
+
+/* Get getopt(), optarg, optind, opterr, optopt.
+   But avoid namespace pollution on glibc systems.  */
+#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
+# include <getopt.h>
+#endif
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_UNISTD_INLINE
+# define _GL_UNISTD_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Hide some function declarations from <winsock2.h>.  */
+
+#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
+# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef socket
+#   define socket              socket_used_without_including_sys_socket_h
+#   undef connect
+#   define connect             connect_used_without_including_sys_socket_h
+#   undef accept
+#   define accept              accept_used_without_including_sys_socket_h
+#   undef bind
+#   define bind                bind_used_without_including_sys_socket_h
+#   undef getpeername
+#   define getpeername         getpeername_used_without_including_sys_socket_h
+#   undef getsockname
+#   define getsockname         getsockname_used_without_including_sys_socket_h
+#   undef getsockopt
+#   define getsockopt          getsockopt_used_without_including_sys_socket_h
+#   undef listen
+#   define listen              listen_used_without_including_sys_socket_h
+#   undef recv
+#   define recv                recv_used_without_including_sys_socket_h
+#   undef send
+#   define send                send_used_without_including_sys_socket_h
+#   undef recvfrom
+#   define recvfrom            recvfrom_used_without_including_sys_socket_h
+#   undef sendto
+#   define sendto              sendto_used_without_including_sys_socket_h
+#   undef setsockopt
+#   define setsockopt          setsockopt_used_without_including_sys_socket_h
+#   undef shutdown
+#   define shutdown            shutdown_used_without_including_sys_socket_h
+#  else
+    _GL_WARN_ON_USE (socket,
+                     "socket() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (connect,
+                     "connect() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (accept,
+                     "accept() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (bind,
+                     "bind() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getpeername,
+                     "getpeername() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getsockname,
+                     "getsockname() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getsockopt,
+                     "getsockopt() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (listen,
+                     "listen() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (recv,
+                     "recv() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (send,
+                     "send() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (recvfrom,
+                     "recvfrom() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (sendto,
+                     "sendto() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (setsockopt,
+                     "setsockopt() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (shutdown,
+                     "shutdown() used without including <sys/socket.h>");
+#  endif
+# endif
+# if !defined _@GUARD_PREFIX@_SYS_SELECT_H
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef select
+#   define select              select_used_without_including_sys_select_h
+#  else
+    _GL_WARN_ON_USE (select,
+                     "select() used without including <sys/select.h>");
+#  endif
+# endif
+#endif
+
+
+/* OS/2 EMX lacks these macros.  */
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+/* Ensure *_OK macros exist.  */
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+
+/* Declare overridden functions.  */
+
+
+#if defined GNULIB_POSIXCHECK
+/* The access() function is a security risk.  */
+_GL_WARN_ON_USE (access, "the access function is a security risk - "
+                 "use the gnulib module faccessat instead");
+#endif
+
+
+#if @GNULIB_CHDIR@
+_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIASWARN (chdir);
+#elif defined GNULIB_POSIXCHECK
+# undef chdir
+# if HAVE_RAW_DECL_CHDIR
+_GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - "
+                 "use gnulib module chdir for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html.  */
+# if @REPLACE_CHOWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef chown
+#   define chown rpl_chown
+#  endif
+_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid));
+# else
+#  if !@HAVE_CHOWN@
+_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid));
+# endif
+_GL_CXXALIASWARN (chown);
+#elif defined GNULIB_POSIXCHECK
+# undef chown
+# if HAVE_RAW_DECL_CHOWN
+_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and "
+                 "doesn't treat a uid or gid of -1 on some systems - "
+                 "use gnulib module chown for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CLOSE@
+# if @REPLACE_CLOSE@
+/* Automatically included by modules that need a replacement for close.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef close
+#   define close rpl_close
+#  endif
+_GL_FUNCDECL_RPL (close, int, (int fd));
+_GL_CXXALIAS_RPL (close, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (close, int, (int fd));
+# endif
+_GL_CXXALIASWARN (close);
+#elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+# undef close
+# define close close_used_without_requesting_gnulib_module_close
+#elif defined GNULIB_POSIXCHECK
+# undef close
+/* Assume close is always declared.  */
+_GL_WARN_ON_USE (close, "close does not portably work on sockets - "
+                 "use gnulib module close for portability");
+#endif
+
+
+#if @GNULIB_DUP@
+# if @REPLACE_DUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup rpl_dup
+#  endif
+_GL_FUNCDECL_RPL (dup, int, (int oldfd));
+_GL_CXXALIAS_RPL (dup, int, (int oldfd));
+# else
+_GL_CXXALIAS_SYS (dup, int, (int oldfd));
+# endif
+_GL_CXXALIASWARN (dup);
+#elif defined GNULIB_POSIXCHECK
+# undef dup
+# if HAVE_RAW_DECL_DUP
+_GL_WARN_ON_USE (dup, "dup is unportable - "
+                 "use gnulib module dup for portability");
+# endif
+#endif
+
+
+#if @GNULIB_DUP2@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD.  Do nothing if
+   NEWFD = OLDFD, otherwise close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>.  */
+# if @REPLACE_DUP2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup2 rpl_dup2
+#  endif
+_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd));
+_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd));
+# else
+#  if !@HAVE_DUP2@
+_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd));
+#  endif
+_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd));
+# endif
+_GL_CXXALIASWARN (dup2);
+#elif defined GNULIB_POSIXCHECK
+# undef dup2
+# if HAVE_RAW_DECL_DUP2
+_GL_WARN_ON_USE (dup2, "dup2 is unportable - "
+                 "use gnulib module dup2 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_DUP3@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
+   specified flags.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>.  */
+# if @HAVE_DUP3@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup3 rpl_dup3
+#  endif
+_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags));
+# else
+_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags));
+# endif
+_GL_CXXALIASWARN (dup3);
+#elif defined GNULIB_POSIXCHECK
+# undef dup3
+# if HAVE_RAW_DECL_DUP3
+_GL_WARN_ON_USE (dup3, "dup3 is unportable - "
+                 "use gnulib module dup3 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ENVIRON@
+# if !@HAVE_DECL_ENVIRON@
+/* Set of environment variables and values.  An array of strings of the form
+   "VARIABLE=VALUE", terminated with a NULL.  */
+#  if defined __APPLE__ && defined __MACH__
+#   include <crt_externs.h>
+#   define environ (*_NSGetEnviron ())
+#  else
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+extern char **environ;
+#   ifdef __cplusplus
+}
+#   endif
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if HAVE_RAW_DECL_ENVIRON
+_GL_UNISTD_INLINE char ***
+rpl_environ (void)
+{
+  return &environ;
+}
+_GL_WARN_ON_USE (rpl_environ, "environ is unportable - "
+                 "use gnulib module environ for portability");
+#  undef environ
+#  define environ (*rpl_environ ())
+# endif
+#endif
+
+
+#if @GNULIB_EUIDACCESS@
+/* Like access(), except that it uses the effective user id and group id of
+   the current process.  */
+# if !@HAVE_EUIDACCESS@
+_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode));
+_GL_CXXALIASWARN (euidaccess);
+# if defined GNULIB_POSIXCHECK
+/* Like access(), this function is a security risk.  */
+_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - "
+                 "use the gnulib module faccessat instead");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef euidaccess
+# if HAVE_RAW_DECL_EUIDACCESS
+_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - "
+                 "use gnulib module euidaccess for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FACCESSAT@
+# if !@HAVE_FACCESSAT@
+_GL_FUNCDECL_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag));
+_GL_CXXALIASWARN (faccessat);
+#elif defined GNULIB_POSIXCHECK
+# undef faccessat
+# if HAVE_RAW_DECL_FACCESSAT
+_GL_WARN_ON_USE (faccessat, "faccessat is not portable - "
+                 "use gnulib module faccessat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FCHDIR@
+/* Change the process' current working directory to the directory on which
+   the given file descriptor is open.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>.  */
+# if ! @HAVE_FCHDIR@
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+
+/* Gnulib internal hooks needed to maintain the fchdir metadata.  */
+_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename)
+     _GL_ARG_NONNULL ((2));
+_GL_EXTERN_C void _gl_unregister_fd (int fd);
+_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd);
+_GL_EXTERN_C const char *_gl_directory_name (int fd);
+
+# else
+#  if !@HAVE_DECL_FCHDIR@
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+#  endif
+# endif
+_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/));
+_GL_CXXALIASWARN (fchdir);
+#elif defined GNULIB_POSIXCHECK
+# undef fchdir
+# if HAVE_RAW_DECL_FCHDIR
+_GL_WARN_ON_USE (fchdir, "fchdir is unportable - "
+                 "use gnulib module fchdir for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FCHOWNAT@
+# if @REPLACE_FCHOWNAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fchownat
+#   define fchownat rpl_fchownat
+#  endif
+_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# else
+#  if !@HAVE_FCHOWNAT@
+_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# endif
+_GL_CXXALIASWARN (fchownat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchownat
+# if HAVE_RAW_DECL_FCHOWNAT
+_GL_WARN_ON_USE (fchownat, "fchownat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FDATASYNC@
+/* Synchronize changes to a file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>.  */
+# if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@
+_GL_FUNCDECL_SYS (fdatasync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fdatasync, int, (int fd));
+_GL_CXXALIASWARN (fdatasync);
+#elif defined GNULIB_POSIXCHECK
+# undef fdatasync
+# if HAVE_RAW_DECL_FDATASYNC
+_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - "
+                 "use gnulib module fdatasync for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FSYNC@
+/* Synchronize changes, including metadata, to a file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>.  */
+# if !@HAVE_FSYNC@
+_GL_FUNCDECL_SYS (fsync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fsync, int, (int fd));
+_GL_CXXALIASWARN (fsync);
+#elif defined GNULIB_POSIXCHECK
+# undef fsync
+# if HAVE_RAW_DECL_FSYNC
+_GL_WARN_ON_USE (fsync, "fsync is unportable - "
+                 "use gnulib module fsync for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FTRUNCATE@
+/* Change the size of the file to which FD is opened to become equal to LENGTH.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>.  */
+# if @REPLACE_FTRUNCATE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftruncate
+#   define ftruncate rpl_ftruncate
+#  endif
+_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length));
+_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length));
+# else
+#  if !@HAVE_FTRUNCATE@
+_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length));
+#  endif
+_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length));
+# endif
+_GL_CXXALIASWARN (ftruncate);
+#elif defined GNULIB_POSIXCHECK
+# undef ftruncate
+# if HAVE_RAW_DECL_FTRUNCATE
+_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - "
+                 "use gnulib module ftruncate for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETCWD@
+/* Get the name of the current working directory, and put it in SIZE bytes
+   of BUF.
+   Return BUF if successful, or NULL if the directory couldn't be determined
+   or SIZE was too small.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>.
+   Additionally, the gnulib module 'getcwd' guarantees the following GNU
+   extension: If BUF is NULL, an array is allocated with 'malloc'; the array
+   is SIZE bytes long, unless SIZE == 0, in which case it is as big as
+   necessary.  */
+# if @REPLACE_GETCWD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getcwd rpl_getcwd
+#  endif
+_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size));
+_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size));
+# else
+/* Need to cast, because on mingw, the second parameter is
+                                                   int size.  */
+_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size));
+# endif
+_GL_CXXALIASWARN (getcwd);
+#elif defined GNULIB_POSIXCHECK
+# undef getcwd
+# if HAVE_RAW_DECL_GETCWD
+_GL_WARN_ON_USE (getcwd, "getcwd is unportable - "
+                 "use gnulib module getcwd for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETDOMAINNAME@
+/* Return the NIS domain name of the machine.
+   WARNING! The NIS domain name is unrelated to the fully qualified host name
+            of the machine.  It is also unrelated to email addresses.
+   WARNING! The NIS domain name is usually the empty string or "(none)" when
+            not using NIS.
+
+   Put up to LEN bytes of the NIS domain name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if @REPLACE_GETDOMAINNAME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdomainname
+#   define getdomainname rpl_getdomainname
+#  endif
+_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len)
+                                      _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len));
+# else
+#  if !@HAVE_DECL_GETDOMAINNAME@
+_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len)
+                                      _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (getdomainname);
+#elif defined GNULIB_POSIXCHECK
+# undef getdomainname
+# if HAVE_RAW_DECL_GETDOMAINNAME
+_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - "
+                 "use gnulib module getdomainname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETDTABLESIZE@
+/* Return the maximum number of file descriptors in the current process.
+   In POSIX, this is same as sysconf (_SC_OPEN_MAX).  */
+# if !@HAVE_GETDTABLESIZE@
+_GL_FUNCDECL_SYS (getdtablesize, int, (void));
+# endif
+_GL_CXXALIAS_SYS (getdtablesize, int, (void));
+_GL_CXXALIASWARN (getdtablesize);
+#elif defined GNULIB_POSIXCHECK
+# undef getdtablesize
+# if HAVE_RAW_DECL_GETDTABLESIZE
+_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - "
+                 "use gnulib module getdtablesize for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETGROUPS@
+/* Return the supplemental groups that the current process belongs to.
+   It is unspecified whether the effective group id is in the list.
+   If N is 0, return the group count; otherwise, N describes how many
+   entries are available in GROUPS.  Return -1 and set errno if N is
+   not 0 and not large enough.  Fails with ENOSYS on some systems.  */
+# if @REPLACE_GETGROUPS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getgroups
+#   define getgroups rpl_getgroups
+#  endif
+_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups));
+_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups));
+# else
+#  if !@HAVE_GETGROUPS@
+_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups));
+#  endif
+_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups));
+# endif
+_GL_CXXALIASWARN (getgroups);
+#elif defined GNULIB_POSIXCHECK
+# undef getgroups
+# if HAVE_RAW_DECL_GETGROUPS
+_GL_WARN_ON_USE (getgroups, "getgroups is unportable - "
+                 "use gnulib module getgroups for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETHOSTNAME@
+/* Return the standard host name of the machine.
+   WARNING! The host name may or may not be fully qualified.
+
+   Put up to LEN bytes of the host name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the host name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if @UNISTD_H_HAVE_WINSOCK2_H@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef gethostname
+#   define gethostname rpl_gethostname
+#  endif
+_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len));
+# else
+#  if !@HAVE_GETHOSTNAME@
+_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second
+   parameter is
+                                                      int len.  */
+_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (gethostname);
+#elif @UNISTD_H_HAVE_WINSOCK2_H@
+# undef gethostname
+# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
+#elif defined GNULIB_POSIXCHECK
+# undef gethostname
+# if HAVE_RAW_DECL_GETHOSTNAME
+_GL_WARN_ON_USE (gethostname, "gethostname is unportable - "
+                 "use gnulib module gethostname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETLOGIN@
+/* Returns the user's login name, or NULL if it cannot be found.  Upon error,
+   returns NULL with errno set.
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if !@HAVE_GETLOGIN@
+_GL_FUNCDECL_SYS (getlogin, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getlogin, char *, (void));
+_GL_CXXALIASWARN (getlogin);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin
+# if HAVE_RAW_DECL_GETLOGIN
+_GL_WARN_ON_USE (getlogin, "getlogin is unportable - "
+                 "use gnulib module getlogin for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETLOGIN_R@
+/* Copies the user's login name to NAME.
+   The array pointed to by NAME has room for SIZE bytes.
+
+   Returns 0 if successful.  Upon error, an error number is returned, or -1 in
+   the case that the login name cannot be found but no specific error is
+   provided (this case is hopefully rare but is left open by the POSIX spec).
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if @REPLACE_GETLOGIN_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getlogin_r rpl_getlogin_r
+#  endif
+_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size));
+# else
+#  if !@HAVE_DECL_GETLOGIN_R@
+_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Solaris 10 systems, the second argument is
+                                                     int size.  */
+_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size));
+# endif
+_GL_CXXALIASWARN (getlogin_r);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin_r
+# if HAVE_RAW_DECL_GETLOGIN_R
+_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - "
+                 "use gnulib module getlogin_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETPAGESIZE@
+# if @REPLACE_GETPAGESIZE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getpagesize rpl_getpagesize
+#  endif
+_GL_FUNCDECL_RPL (getpagesize, int, (void));
+_GL_CXXALIAS_RPL (getpagesize, int, (void));
+# else
+#  if !@HAVE_GETPAGESIZE@
+#   if !defined getpagesize
+/* This is for POSIX systems.  */
+#    if !defined _gl_getpagesize && defined _SC_PAGESIZE
+#     if ! (defined __VMS && __VMS_VER < 70000000)
+#      define _gl_getpagesize() sysconf (_SC_PAGESIZE)
+#     endif
+#    endif
+/* This is for older VMS.  */
+#    if !defined _gl_getpagesize && defined __VMS
+#     ifdef __ALPHA
+#      define _gl_getpagesize() 8192
+#     else
+#      define _gl_getpagesize() 512
+#     endif
+#    endif
+/* This is for BeOS.  */
+#    if !defined _gl_getpagesize && @HAVE_OS_H@
+#     include <OS.h>
+#     if defined B_PAGE_SIZE
+#      define _gl_getpagesize() B_PAGE_SIZE
+#     endif
+#    endif
+/* This is for AmigaOS4.0.  */
+#    if !defined _gl_getpagesize && defined __amigaos4__
+#     define _gl_getpagesize() 2048
+#    endif
+/* This is for older Unix systems.  */
+#    if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@
+#     include <sys/param.h>
+#     ifdef EXEC_PAGESIZE
+#      define _gl_getpagesize() EXEC_PAGESIZE
+#     else
+#      ifdef NBPG
+#       ifndef CLSIZE
+#        define CLSIZE 1
+#       endif
+#       define _gl_getpagesize() (NBPG * CLSIZE)
+#      else
+#       ifdef NBPC
+#        define _gl_getpagesize() NBPC
+#       endif
+#      endif
+#     endif
+#    endif
+#    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#     define getpagesize() _gl_getpagesize ()
+#    else
+#     if !GNULIB_defined_getpagesize_function
+_GL_UNISTD_INLINE int
+getpagesize ()
+{
+  return _gl_getpagesize ();
+}
+#      define GNULIB_defined_getpagesize_function 1
+#     endif
+#    endif
+#   endif
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t.  */
+_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void));
+# endif
+# if @HAVE_DECL_GETPAGESIZE@
+_GL_CXXALIASWARN (getpagesize);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getpagesize
+# if HAVE_RAW_DECL_GETPAGESIZE
+_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - "
+                 "use gnulib module getpagesize for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETUSERSHELL@
+/* Return the next valid login shell on the system, or NULL when the end of
+   the list has been reached.  */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (getusershell, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getusershell, char *, (void));
+_GL_CXXALIASWARN (getusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef getusershell
+# if HAVE_RAW_DECL_GETUSERSHELL
+_GL_WARN_ON_USE (getusershell, "getusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if @GNULIB_GETUSERSHELL@
+/* Rewind to pointer that is advanced at each getusershell() call.  */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (setusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (setusershell, void, (void));
+_GL_CXXALIASWARN (setusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef setusershell
+# if HAVE_RAW_DECL_SETUSERSHELL
+_GL_WARN_ON_USE (setusershell, "setusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if @GNULIB_GETUSERSHELL@
+/* Free the pointer that is advanced at each getusershell() call and
+   associated resources.  */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (endusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (endusershell, void, (void));
+_GL_CXXALIASWARN (endusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef endusershell
+# if HAVE_RAW_DECL_ENDUSERSHELL
+_GL_WARN_ON_USE (endusershell, "endusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GROUP_MEMBER@
+/* Determine whether group id is in calling user's group list.  */
+# if !@HAVE_GROUP_MEMBER@
+_GL_FUNCDECL_SYS (group_member, int, (gid_t gid));
+# endif
+_GL_CXXALIAS_SYS (group_member, int, (gid_t gid));
+_GL_CXXALIASWARN (group_member);
+#elif defined GNULIB_POSIXCHECK
+# undef group_member
+# if HAVE_RAW_DECL_GROUP_MEMBER
+_GL_WARN_ON_USE (group_member, "group_member is unportable - "
+                 "use gnulib module group-member for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ISATTY@
+# if @REPLACE_ISATTY@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef isatty
+#   define isatty rpl_isatty
+#  endif
+_GL_FUNCDECL_RPL (isatty, int, (int fd));
+_GL_CXXALIAS_RPL (isatty, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (isatty, int, (int fd));
+# endif
+_GL_CXXALIASWARN (isatty);
+#elif defined GNULIB_POSIXCHECK
+# undef isatty
+# if HAVE_RAW_DECL_ISATTY
+_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - "
+                 "use gnulib module isatty for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LCHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Do not follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>.  */
+# if @REPLACE_LCHOWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lchown
+#   define lchown rpl_lchown
+#  endif
+_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group));
+# else
+#  if !@HAVE_LCHOWN@
+_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group));
+# endif
+_GL_CXXALIASWARN (lchown);
+#elif defined GNULIB_POSIXCHECK
+# undef lchown
+# if HAVE_RAW_DECL_LCHOWN
+_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - "
+                 "use gnulib module lchown for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LINK@
+/* Create a new hard link for an existing file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>.  */
+# if @REPLACE_LINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define link rpl_link
+#  endif
+_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2));
+# else
+#  if !@HAVE_LINK@
+_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2));
+# endif
+_GL_CXXALIASWARN (link);
+#elif defined GNULIB_POSIXCHECK
+# undef link
+# if HAVE_RAW_DECL_LINK
+_GL_WARN_ON_USE (link, "link is unportable - "
+                 "use gnulib module link for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LINKAT@
+/* Create a new hard link for an existing file, relative to two
+   directories.  FLAG controls whether symlinks are followed.
+   Return 0 if successful, otherwise -1 and errno set.  */
+# if @REPLACE_LINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef linkat
+#   define linkat rpl_linkat
+#  endif
+_GL_FUNCDECL_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# else
+#  if !@HAVE_LINKAT@
+_GL_FUNCDECL_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# endif
+_GL_CXXALIASWARN (linkat);
+#elif defined GNULIB_POSIXCHECK
+# undef linkat
+# if HAVE_RAW_DECL_LINKAT
+_GL_WARN_ON_USE (linkat, "linkat is unportable - "
+                 "use gnulib module linkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LSEEK@
+/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
+   Return the new offset if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>.  */
+# if @REPLACE_LSEEK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lseek rpl_lseek
+#  endif
+_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+# else
+_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (lseek);
+#elif defined GNULIB_POSIXCHECK
+# undef lseek
+# if HAVE_RAW_DECL_LSEEK
+_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some "
+                 "systems - use gnulib module lseek for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PIPE@
+/* Create a pipe, defaulting to O_BINARY mode.
+   Store the read-end as fd[0] and the write-end as fd[1].
+   Return 0 upon success, or -1 with errno set upon failure.  */
+# if !@HAVE_PIPE@
+_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pipe, int, (int fd[2]));
+_GL_CXXALIASWARN (pipe);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe
+# if HAVE_RAW_DECL_PIPE
+_GL_WARN_ON_USE (pipe, "pipe is unportable - "
+                 "use gnulib module pipe-posix for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PIPE2@
+/* Create a pipe, applying the given flags when opening the read-end of the
+   pipe and the write-end of the pipe.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Store the read-end as fd[0] and the write-end as fd[1].
+   Return 0 upon success, or -1 with errno set upon failure.
+   See also the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>.  */
+# if @HAVE_PIPE2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define pipe2 rpl_pipe2
+#  endif
+_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags));
+# else
+_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags));
+# endif
+_GL_CXXALIASWARN (pipe2);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe2
+# if HAVE_RAW_DECL_PIPE2
+_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - "
+                 "use gnulib module pipe2 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PREAD@
+/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET.
+   Return the number of bytes placed into BUF if successful, otherwise
+   set errno and return -1.  0 indicates EOF.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>.  */
+# if @REPLACE_PREAD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pread
+#   define pread rpl_pread
+#  endif
+_GL_FUNCDECL_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# else
+#  if !@HAVE_PREAD@
+_GL_FUNCDECL_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pread);
+#elif defined GNULIB_POSIXCHECK
+# undef pread
+# if HAVE_RAW_DECL_PREAD
+_GL_WARN_ON_USE (pread, "pread is unportable - "
+                 "use gnulib module pread for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PWRITE@
+/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET.
+   Return the number of bytes written if successful, otherwise
+   set errno and return -1.  0 indicates nothing written.  See the
+   POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>.  */
+# if @REPLACE_PWRITE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pwrite
+#   define pwrite rpl_pwrite
+#  endif
+_GL_FUNCDECL_RPL (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset));
+# else
+#  if !@HAVE_PWRITE@
+_GL_FUNCDECL_SYS (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pwrite);
+#elif defined GNULIB_POSIXCHECK
+# undef pwrite
+# if HAVE_RAW_DECL_PWRITE
+_GL_WARN_ON_USE (pwrite, "pwrite is unportable - "
+                 "use gnulib module pwrite for portability");
+# endif
+#endif
+
+
+#if @GNULIB_READ@
+/* Read up to COUNT bytes from file descriptor FD into the buffer starting
+   at BUF.  See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>.  */
+# if @REPLACE_READ@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef read
+#   define read rpl_read
+#  endif
+_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count));
+# else
+/* Need to cast, because on mingw, the third parameter is
+                                                          unsigned int count
+   and the return type is 'int'.  */
+_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (read);
+#endif
+
+
+#if @GNULIB_READLINK@
+/* Read the contents of the symbolic link FILE and place the first BUFSIZE
+   bytes of it into BUF.  Return the number of bytes placed into BUF if
+   successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>.  */
+# if @REPLACE_READLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define readlink rpl_readlink
+#  endif
+_GL_FUNCDECL_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# else
+#  if !@HAVE_READLINK@
+_GL_FUNCDECL_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# endif
+_GL_CXXALIASWARN (readlink);
+#elif defined GNULIB_POSIXCHECK
+# undef readlink
+# if HAVE_RAW_DECL_READLINK
+_GL_WARN_ON_USE (readlink, "readlink is unportable - "
+                 "use gnulib module readlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_READLINKAT@
+# if !@HAVE_READLINKAT@
+_GL_FUNCDECL_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len)
+                  _GL_ARG_NONNULL ((2, 3)));
+# endif
+_GL_CXXALIAS_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len));
+_GL_CXXALIASWARN (readlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef readlinkat
+# if HAVE_RAW_DECL_READLINKAT
+_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - "
+                 "use gnulib module readlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RMDIR@
+/* Remove the directory DIR.  */
+# if @REPLACE_RMDIR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define rmdir rpl_rmdir
+#  endif
+_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (rmdir, int, (char const *name));
+# else
+_GL_CXXALIAS_SYS (rmdir, int, (char const *name));
+# endif
+_GL_CXXALIASWARN (rmdir);
+#elif defined GNULIB_POSIXCHECK
+# undef rmdir
+# if HAVE_RAW_DECL_RMDIR
+_GL_WARN_ON_USE (rmdir, "rmdir is unportable - "
+                 "use gnulib module rmdir for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SETHOSTNAME@
+/* Set the host name of the machine.
+   The host name may or may not be fully qualified.
+
+   Put LEN bytes of NAME into the host name.
+   Return 0 if successful, otherwise, set errno and return -1.
+
+   Platforms with no ability to set the hostname return -1 and set
+   errno = ENOSYS.  */
+# if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@
+_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5
+   and FreeBSD 6.4 the second parameter is int.  On Solaris 11
+   2011-10, the first parameter is not const.  */
+_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len));
+_GL_CXXALIASWARN (sethostname);
+#elif defined GNULIB_POSIXCHECK
+# undef sethostname
+# if HAVE_RAW_DECL_SETHOSTNAME
+_GL_WARN_ON_USE (sethostname, "sethostname is unportable - "
+                 "use gnulib module sethostname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SLEEP@
+/* Pause the execution of the current thread for N seconds.
+   Returns the number of seconds left to sleep.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>.  */
+# if @REPLACE_SLEEP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sleep
+#   define sleep rpl_sleep
+#  endif
+_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n));
+_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n));
+# else
+#  if !@HAVE_SLEEP@
+_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n));
+#  endif
+_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n));
+# endif
+_GL_CXXALIASWARN (sleep);
+#elif defined GNULIB_POSIXCHECK
+# undef sleep
+# if HAVE_RAW_DECL_SLEEP
+_GL_WARN_ON_USE (sleep, "sleep is unportable - "
+                 "use gnulib module sleep for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SYMLINK@
+# if @REPLACE_SYMLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef symlink
+#   define symlink rpl_symlink
+#  endif
+_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file));
+# else
+#  if !@HAVE_SYMLINK@
+_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file));
+# endif
+_GL_CXXALIASWARN (symlink);
+#elif defined GNULIB_POSIXCHECK
+# undef symlink
+# if HAVE_RAW_DECL_SYMLINK
+_GL_WARN_ON_USE (symlink, "symlink is not portable - "
+                 "use gnulib module symlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SYMLINKAT@
+# if !@HAVE_SYMLINKAT@
+_GL_FUNCDECL_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file)
+                  _GL_ARG_NONNULL ((1, 3)));
+# endif
+_GL_CXXALIAS_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file));
+_GL_CXXALIASWARN (symlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef symlinkat
+# if HAVE_RAW_DECL_SYMLINKAT
+_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
+                 "use gnulib module symlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TTYNAME_R@
+/* Store at most BUFLEN characters of the pathname of the terminal FD is
+   open on in BUF.  Return 0 on success, otherwise an error number.  */
+# if @REPLACE_TTYNAME_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ttyname_r
+#   define ttyname_r rpl_ttyname_r
+#  endif
+_GL_FUNCDECL_RPL (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen));
+# else
+#  if !@HAVE_DECL_TTYNAME_R@
+_GL_FUNCDECL_SYS (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen));
+# endif
+_GL_CXXALIASWARN (ttyname_r);
+#elif defined GNULIB_POSIXCHECK
+# undef ttyname_r
+# if HAVE_RAW_DECL_TTYNAME_R
+_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - "
+                 "use gnulib module ttyname_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UNLINK@
+# if @REPLACE_UNLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlink
+#   define unlink rpl_unlink
+#  endif
+_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unlink, int, (char const *file));
+# else
+_GL_CXXALIAS_SYS (unlink, int, (char const *file));
+# endif
+_GL_CXXALIASWARN (unlink);
+#elif defined GNULIB_POSIXCHECK
+# undef unlink
+# if HAVE_RAW_DECL_UNLINK
+_GL_WARN_ON_USE (unlink, "unlink is not portable - "
+                 "use gnulib module unlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UNLINKAT@
+# if @REPLACE_UNLINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlinkat
+#   define unlinkat rpl_unlinkat
+#  endif
+_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag));
+# else
+#  if !@HAVE_UNLINKAT@
+_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag));
+# endif
+_GL_CXXALIASWARN (unlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef unlinkat
+# if HAVE_RAW_DECL_UNLINKAT
+_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_USLEEP@
+/* Pause the execution of the current thread for N microseconds.
+   Returns 0 on completion, or -1 on range error.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/usleep.html>.  */
+# if @REPLACE_USLEEP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef usleep
+#   define usleep rpl_usleep
+#  endif
+_GL_FUNCDECL_RPL (usleep, int, (useconds_t n));
+_GL_CXXALIAS_RPL (usleep, int, (useconds_t n));
+# else
+#  if !@HAVE_USLEEP@
+_GL_FUNCDECL_SYS (usleep, int, (useconds_t n));
+#  endif
+_GL_CXXALIAS_SYS (usleep, int, (useconds_t n));
+# endif
+_GL_CXXALIASWARN (usleep);
+#elif defined GNULIB_POSIXCHECK
+# undef usleep
+# if HAVE_RAW_DECL_USLEEP
+_GL_WARN_ON_USE (usleep, "usleep is unportable - "
+                 "use gnulib module usleep for portability");
+# endif
+#endif
+
+
+#if @GNULIB_WRITE@
+/* Write up to COUNT bytes starting at BUF to file descriptor FD.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>.  */
+# if @REPLACE_WRITE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef write
+#   define write rpl_write
+#  endif
+_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count));
+# else
+/* Need to cast, because on mingw, the third parameter is
+                                                             unsigned int count
+   and the return type is 'int'.  */
+_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (write);
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _@GUARD_PREFIX@_UNISTD_H */
+#endif /* _@GUARD_PREFIX@_UNISTD_H */
diff --git a/lib/unitypes.in.h b/lib/unitypes.in.h
new file mode 100644
index 0000000..e642b7a
--- /dev/null
+++ b/lib/unitypes.in.h
@@ -0,0 +1,46 @@
+/* Elementary types and macros for the GNU UniString library.
+   Copyright (C) 2002, 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNITYPES_H
+#define _UNITYPES_H
+
+/* Get uint8_t, uint16_t, uint32_t.  */
+#include <stdint.h>
+
+/* Type representing a Unicode character.  */
+typedef uint32_t ucs4_t;
+
+/* Attribute of a function whose result depends only on the arguments
+   (not pointers!) and which has no side effects.  */
+#ifndef _UC_ATTRIBUTE_CONST
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+#  define _UC_ATTRIBUTE_CONST __attribute__ ((__const__))
+# else
+#  define _UC_ATTRIBUTE_CONST
+# endif
+#endif
+
+/* Attribute of a function whose result depends only on the arguments
+   (possibly pointers) and global memory, and which has no side effects.  */
+#ifndef _UC_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define _UC_ATTRIBUTE_PURE
+# endif
+#endif
+
+#endif /* _UNITYPES_H */
diff --git a/lib/uniwidth.in.h b/lib/uniwidth.in.h
new file mode 100644
index 0000000..b90ce19
--- /dev/null
+++ b/lib/uniwidth.in.h
@@ -0,0 +1,72 @@
+/* Display width functions.
+   Copyright (C) 2001-2002, 2005, 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNIWIDTH_H
+#define _UNIWIDTH_H
+
+#include "unitypes.h"
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get locale_charset() declaration.  */
+#include "localcharset.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Display width.  */
+
+/* These functions are locale dependent.  The encoding argument identifies
+   the encoding (e.g. "ISO-8859-2" for Polish).  */
+
+/* Determine number of column positions required for UC.  */
+extern int
+       uc_width (ucs4_t uc, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+/* Determine number of column positions required for first N units
+   (or fewer if S ends before this) in S.  */
+extern int
+       u8_width (const uint8_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u16_width (const uint16_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u32_width (const uint32_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+/* Determine number of column positions required for S.  */
+extern int
+       u8_strwidth (const uint8_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u16_strwidth (const uint16_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u32_strwidth (const uint32_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNIWIDTH_H */
diff --git a/lib/uniwidth/cjk.h b/lib/uniwidth/cjk.h
new file mode 100644
index 0000000..d75c94f
--- /dev/null
+++ b/lib/uniwidth/cjk.h
@@ -0,0 +1,37 @@
+/* Test for CJK encoding.
+   Copyright (C) 2001-2002, 2005-2007, 2009-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "streq.h"
+
+static int
+is_cjk_encoding (const char *encoding)
+{
+  if (0
+      /* Legacy Japanese encodings */
+      || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
+      /* Legacy Chinese encodings */
+      || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+      || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
+      || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
+      || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
+      /* Legacy Korean encodings */
+      || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+      || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
+      || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
+    return 1;
+  return 0;
+}
diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c
new file mode 100644
index 0000000..b6e2c33
--- /dev/null
+++ b/lib/uniwidth/width.c
@@ -0,0 +1,368 @@
+/* Determine display width of Unicode character.
+   Copyright (C) 2001-2002, 2006-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "uniwidth.h"
+
+#include "cjk.h"
+
+/*
+ * Non-spacing attribute table.
+ * Consists of:
+ * - Non-spacing characters; generated from PropList.txt or
+ *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
+ * - Format control characters; generated from
+ *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
+ * - Zero width characters; generated from
+ *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
+ */
+static const unsigned char nonspacing_table_data[27*64] = {
+  /* 0x0000-0x01ff */
+  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
+  0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
+  /* 0x0200-0x03ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
+  /* 0x0400-0x05ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
+  0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
+  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
+  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
+  /* 0x0600-0x07ff */
+  0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
+  0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
+  0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
+  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
+  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
+  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
+  /* 0x0800-0x09ff */
+  0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */
+  0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */
+  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */
+  0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
+  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
+  /* 0x0a00-0x0bff */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
+  0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
+  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
+  0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
+  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
+  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
+  /* 0x0c00-0x0dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
+  0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
+  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
+  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
+  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
+  /* 0x0e00-0x0fff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
+  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
+  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
+  0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
+  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
+  /* 0x1000-0x11ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */
+  0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */
+  0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
+  /* 0x1200-0x13ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
+  0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
+  /* 0x1600-0x17ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
+  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
+  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
+  /* 0x1800-0x19ff */
+  0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
+  0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
+  /* 0x1a00-0x1bff */
+  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
+  0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
+  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
+  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
+  0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */
+  0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */
+  /* 0x1c00-0x1dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
+  0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x00, 0x00, /* 0x1cc0-0x1cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
+  0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, /* 0x1dc0-0x1dff */
+  /* 0x2000-0x21ff */
+  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
+  0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
+  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
+  /* 0x2c00-0x2dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */
+  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */
+  /* 0x3000-0x31ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
+  /* 0xa600-0xa7ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */
+  /* 0xa800-0xa9ff */
+  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
+  0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */
+  0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */
+  0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
+  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
+  /* 0xaa00-0xabff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */
+  0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */
+  0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */
+  /* 0xfa00-0xfbff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
+  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
+  /* 0xfe00-0xffff */
+  0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
+  /* 0x10000-0x101ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */
+  /* 0x10a00-0x10bff */
+  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
+  /* 0x11000-0x111ff */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */
+  0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11040-0x1107f */
+  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11100-0x1113f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11140-0x1117f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11180-0x111bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */
+  /* 0x1d000-0x1d1ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */
+  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
+  /* 0x1d200-0x1d3ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
+  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d3c0-0x1d3ff */
+};
+static const signed char nonspacing_table_ind[240] = {
+   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
+   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
+  14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */
+  16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
+  -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
+  -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */
+  22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */
+  24, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
+  25, 26, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
+};
+
+/* Determine number of column positions required for UC.  */
+int
+uc_width (ucs4_t uc, const char *encoding)
+{
+  /* Test for non-spacing or control character.  */
+  if ((uc >> 9) < 240)
+    {
+      int ind = nonspacing_table_ind[uc >> 9];
+      if (ind >= 0)
+        if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
+          {
+            if (uc > 0 && uc < 0xa0)
+              return -1;
+            else
+              return 0;
+          }
+    }
+  else if ((uc >> 9) == (0xe0000 >> 9))
+    {
+      if (uc >= 0xe0100)
+        {
+          if (uc <= 0xe01ef)
+            return 0;
+        }
+      else
+        {
+          if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
+            return 0;
+        }
+    }
+  /* Test for double-width character.
+   * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt"
+   * and            "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt"
+   */
+  if (uc >= 0x1100
+      && ((uc < 0x1160) /* Hangul Jamo */
+          || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
+          || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
+              && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
+          || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
+          || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
+          || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
+          || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
+          || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
+          || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
+          || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */
+          || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */
+     )   )
+    return 2;
+  /* In ancient CJK encodings, Cyrillic and most other characters are
+     double-width as well.  */
+  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
+      && is_cjk_encoding (encoding))
+    return 2;
+  return 1;
+}
diff --git a/lib/unlocked-io.h b/lib/unlocked-io.h
index d009303..65bfbc4 100644
--- a/lib/unlocked-io.h
+++ b/lib/unlocked-io.h
@@ -1,20 +1,19 @@
 /* Prefer faster, non-thread-safe stdio functions if available.
 
-   Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2001-2004, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Jim Meyering.  */
 
diff --git a/lib/unsetenv.c b/lib/unsetenv.c
new file mode 100644
index 0000000..ddbe9a4
--- /dev/null
+++ b/lib/unsetenv.c
@@ -0,0 +1,127 @@
+/* Copyright (C) 1992, 1995-2002, 2005-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
+   optimizes away the name == NULL test below.  */
+#define _GL_ARG_NONNULL(params)
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <errno.h>
+#if !_LIBC
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#include <string.h>
+#include <unistd.h>
+
+#if !_LIBC
+# define __environ      environ
+#endif
+
+#if _LIBC
+/* This lock protects against simultaneous modifications of 'environ'.  */
+# include <bits/libc-lock.h>
+__libc_lock_define_initialized (static, envlock)
+# define LOCK   __libc_lock_lock (envlock)
+# define UNLOCK __libc_lock_unlock (envlock)
+#else
+# define LOCK
+# define UNLOCK
+#endif
+
+/* In the GNU C library we must keep the namespace clean.  */
+#ifdef _LIBC
+# define unsetenv __unsetenv
+#endif
+
+#if _LIBC || !HAVE_UNSETENV
+
+int
+unsetenv (const char *name)
+{
+  size_t len;
+  char **ep;
+
+  if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  len = strlen (name);
+
+  LOCK;
+
+  ep = __environ;
+  while (*ep != NULL)
+    if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+      {
+        /* Found it.  Remove this pointer by moving later ones back.  */
+        char **dp = ep;
+
+        do
+          dp[0] = dp[1];
+        while (*dp++);
+        /* Continue the loop in case NAME appears again.  */
+      }
+    else
+      ++ep;
+
+  UNLOCK;
+
+  return 0;
+}
+
+#ifdef _LIBC
+# undef unsetenv
+weak_alias (__unsetenv, unsetenv)
+#endif
+
+#else /* HAVE_UNSETENV */
+
+# undef unsetenv
+# if !HAVE_DECL_UNSETENV
+#  if VOID_UNSETENV
+extern void unsetenv (const char *);
+#  else
+extern int unsetenv (const char *);
+#  endif
+# endif
+
+/* Call the underlying unsetenv, in case there is hidden bookkeeping
+   that needs updating beyond just modifying environ.  */
+int
+rpl_unsetenv (const char *name)
+{
+  int result = 0;
+  if (!name || !*name || strchr (name, '='))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  while (getenv (name))
+# if !VOID_UNSETENV
+    result =
+# endif
+      unsetenv (name);
+  return result;
+}
+
+#endif /* HAVE_UNSETENV */
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
new file mode 100644
index 0000000..e6fc523
--- /dev/null
+++ b/lib/vasnprintf.c
@@ -0,0 +1,5606 @@
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 1999, 2002-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This file can be parametrized with the following macros:
+     VASNPRINTF         The name of the function being defined.
+     FCHAR_T            The element type of the format string.
+     DCHAR_T            The element type of the destination (result) string.
+     FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters
+                        in the format string are ASCII. MUST be set if
+                        FCHAR_T and DCHAR_T are not the same type.
+     DIRECTIVE          Structure denoting a format directive.
+                        Depends on FCHAR_T.
+     DIRECTIVES         Structure denoting the set of format directives of a
+                        format string.  Depends on FCHAR_T.
+     PRINTF_PARSE       Function that parses a format string.
+                        Depends on FCHAR_T.
+     DCHAR_CPY          memcpy like function for DCHAR_T[] arrays.
+     DCHAR_SET          memset like function for DCHAR_T[] arrays.
+     DCHAR_MBSNLEN      mbsnlen like function for DCHAR_T[] arrays.
+     SNPRINTF           The system's snprintf (or similar) function.
+                        This may be either snprintf or swprintf.
+     TCHAR_T            The element type of the argument and result string
+                        of the said SNPRINTF function.  This may be either
+                        char or wchar_t.  The code exploits that
+                        sizeof (TCHAR_T) | sizeof (DCHAR_T) and
+                        alignof (TCHAR_T) <= alignof (DCHAR_T).
+     DCHAR_IS_TCHAR     Set to 1 if DCHAR_T and TCHAR_T are the same type.
+     DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[].
+     DCHAR_IS_UINT8_T   Set to 1 if DCHAR_T is uint8_t.
+     DCHAR_IS_UINT16_T  Set to 1 if DCHAR_T is uint16_t.
+     DCHAR_IS_UINT32_T  Set to 1 if DCHAR_T is uint32_t.  */
+
+/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifndef VASNPRINTF
+# include <config.h>
+#endif
+#ifndef IN_LIBINTL
+# include <alloca.h>
+#endif
+
+/* Specification.  */
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  include "vasnwprintf.h"
+# else
+#  include "vasnprintf.h"
+# endif
+#endif
+
+#include <locale.h>     /* localeconv() */
+#include <stdio.h>      /* snprintf(), sprintf() */
+#include <stdlib.h>     /* abort(), malloc(), realloc(), free() */
+#include <string.h>     /* memcpy(), strlen() */
+#include <errno.h>      /* errno */
+#include <limits.h>     /* CHAR_BIT */
+#include <float.h>      /* DBL_MAX_EXP, LDBL_MAX_EXP */
+#if HAVE_NL_LANGINFO
+# include <langinfo.h>
+#endif
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  include "wprintf-parse.h"
+# else
+#  include "printf-parse.h"
+# endif
+#endif
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+#include "verify.h"
+
+#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "float+.h"
+#endif
+
+#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnand-nolibm.h"
+#endif
+
+#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnanl-nolibm.h"
+# include "fpucw.h"
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnand-nolibm.h"
+# include "printf-frexp.h"
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnanl-nolibm.h"
+# include "printf-frexpl.h"
+# include "fpucw.h"
+#endif
+
+/* Default parameters.  */
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  define VASNPRINTF vasnwprintf
+#  define FCHAR_T wchar_t
+#  define DCHAR_T wchar_t
+#  define TCHAR_T wchar_t
+#  define DCHAR_IS_TCHAR 1
+#  define DIRECTIVE wchar_t_directive
+#  define DIRECTIVES wchar_t_directives
+#  define PRINTF_PARSE wprintf_parse
+#  define DCHAR_CPY wmemcpy
+#  define DCHAR_SET wmemset
+# else
+#  define VASNPRINTF vasnprintf
+#  define FCHAR_T char
+#  define DCHAR_T char
+#  define TCHAR_T char
+#  define DCHAR_IS_TCHAR 1
+#  define DIRECTIVE char_directive
+#  define DIRECTIVES char_directives
+#  define PRINTF_PARSE printf_parse
+#  define DCHAR_CPY memcpy
+#  define DCHAR_SET memset
+# endif
+#endif
+#if WIDE_CHAR_VERSION
+  /* TCHAR_T is wchar_t.  */
+# define USE_SNPRINTF 1
+# if HAVE_DECL__SNWPRINTF
+   /* On Windows, the function swprintf() has a different signature than
+      on Unix; we use the function _snwprintf() or - on mingw - snwprintf()
+      instead.  The mingw function snwprintf() has fewer bugs than the
+      MSVCRT function _snwprintf(), so prefer that.  */
+#  if defined __MINGW32__
+#   define SNPRINTF snwprintf
+#  else
+#   define SNPRINTF _snwprintf
+#  endif
+# else
+   /* Unix.  */
+#  define SNPRINTF swprintf
+# endif
+#else
+  /* TCHAR_T is char.  */
+  /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'.
+     But don't use it on BeOS, since BeOS snprintf produces no output if the
+     size argument is >= 0x3000000.
+     Also don't use it on Linux libc5, since there snprintf with size = 1
+     writes any output without bounds, like sprintf.  */
+# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1)
+#  define USE_SNPRINTF 1
+# else
+#  define USE_SNPRINTF 0
+# endif
+# if HAVE_DECL__SNPRINTF
+   /* Windows.  The mingw function snprintf() has fewer bugs than the MSVCRT
+      function _snprintf(), so prefer that.  */
+#  if defined __MINGW32__
+#   define SNPRINTF snprintf
+    /* Here we need to call the native snprintf, not rpl_snprintf.  */
+#   undef snprintf
+#  else
+#   define SNPRINTF _snprintf
+#  endif
+# else
+   /* Unix.  */
+#  define SNPRINTF snprintf
+   /* Here we need to call the native snprintf, not rpl_snprintf.  */
+#  undef snprintf
+# endif
+#endif
+/* Here we need to call the native sprintf, not rpl_sprintf.  */
+#undef sprintf
+
+/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized"
+   warnings in this file.  Use -Dlint to suppress them.  */
+#ifdef lint
+# define IF_LINT(Code) Code
+#else
+# define IF_LINT(Code) /* empty */
+#endif
+
+/* Avoid some warnings from "gcc -Wshadow".
+   This file doesn't use the exp() and remainder() functions.  */
+#undef exp
+#define exp expo
+#undef remainder
+#define remainder rem
+
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION
+# if (HAVE_STRNLEN && !defined _AIX)
+#  define local_strnlen strnlen
+# else
+#  ifndef local_strnlen_defined
+#   define local_strnlen_defined 1
+static size_t
+local_strnlen (const char *string, size_t maxlen)
+{
+  const char *end = memchr (string, '\0', maxlen);
+  return end ? (size_t) (end - string) : maxlen;
+}
+#  endif
+# endif
+#endif
+
+#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T
+# if HAVE_WCSLEN
+#  define local_wcslen wcslen
+# else
+   /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
+      a dependency towards this library, here is a local substitute.
+      Define this substitute only once, even if this file is included
+      twice in the same compilation unit.  */
+#  ifndef local_wcslen_defined
+#   define local_wcslen_defined 1
+static size_t
+local_wcslen (const wchar_t *s)
+{
+  const wchar_t *ptr;
+
+  for (ptr = s; *ptr != (wchar_t) 0; ptr++)
+    ;
+  return ptr - s;
+}
+#  endif
+# endif
+#endif
+
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION
+# if HAVE_WCSNLEN
+#  define local_wcsnlen wcsnlen
+# else
+#  ifndef local_wcsnlen_defined
+#   define local_wcsnlen_defined 1
+static size_t
+local_wcsnlen (const wchar_t *s, size_t maxlen)
+{
+  const wchar_t *ptr;
+
+  for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--)
+    ;
+  return ptr - s;
+}
+#  endif
+# endif
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
+/* Determine the decimal-point character according to the current locale.  */
+# ifndef decimal_point_char_defined
+#  define decimal_point_char_defined 1
+static char
+decimal_point_char (void)
+{
+  const char *point;
+  /* Determine it in a multithread-safe way.  We know nl_langinfo is
+     multithread-safe on glibc systems and Mac OS X systems, but is not required
+     to be multithread-safe by POSIX.  sprintf(), however, is multithread-safe.
+     localeconv() is rarely multithread-safe.  */
+#  if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__))
+  point = nl_langinfo (RADIXCHAR);
+#  elif 1
+  char pointbuf[5];
+  sprintf (pointbuf, "%#.0f", 1.0);
+  point = &pointbuf[1];
+#  else
+  point = localeconv () -> decimal_point;
+#  endif
+  /* The decimal point is always a single byte: either '.' or ','.  */
+  return (point[0] != '\0' ? point[0] : '.');
+}
+# endif
+#endif
+
+#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL
+
+/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
+static int
+is_infinite_or_zero (double x)
+{
+  return isnand (x) || x + x == x;
+}
+
+#endif
+
+#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL
+
+/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
+static int
+is_infinite_or_zerol (long double x)
+{
+  return isnanl (x) || x + x == x;
+}
+
+#endif
+
+#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+
+/* Converting 'long double' to decimal without rare rounding bugs requires
+   real bignums.  We use the naming conventions of GNU gmp, but vastly simpler
+   (and slower) algorithms.  */
+
+typedef unsigned int mp_limb_t;
+# define GMP_LIMB_BITS 32
+verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS);
+
+typedef unsigned long long mp_twolimb_t;
+# define GMP_TWOLIMB_BITS 64
+verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS);
+
+/* Representation of a bignum >= 0.  */
+typedef struct
+{
+  size_t nlimbs;
+  mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc().  */
+} mpn_t;
+
+/* Compute the product of two bignums >= 0.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+multiply (mpn_t src1, mpn_t src2, mpn_t *dest)
+{
+  const mp_limb_t *p1;
+  const mp_limb_t *p2;
+  size_t len1;
+  size_t len2;
+
+  if (src1.nlimbs <= src2.nlimbs)
+    {
+      len1 = src1.nlimbs;
+      p1 = src1.limbs;
+      len2 = src2.nlimbs;
+      p2 = src2.limbs;
+    }
+  else
+    {
+      len1 = src2.nlimbs;
+      p1 = src2.limbs;
+      len2 = src1.nlimbs;
+      p2 = src1.limbs;
+    }
+  /* Now 0 <= len1 <= len2.  */
+  if (len1 == 0)
+    {
+      /* src1 or src2 is zero.  */
+      dest->nlimbs = 0;
+      dest->limbs = (mp_limb_t *) malloc (1);
+    }
+  else
+    {
+      /* Here 1 <= len1 <= len2.  */
+      size_t dlen;
+      mp_limb_t *dp;
+      size_t k, i, j;
+
+      dlen = len1 + len2;
+      dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t));
+      if (dp == NULL)
+        return NULL;
+      for (k = len2; k > 0; )
+        dp[--k] = 0;
+      for (i = 0; i < len1; i++)
+        {
+          mp_limb_t digit1 = p1[i];
+          mp_twolimb_t carry = 0;
+          for (j = 0; j < len2; j++)
+            {
+              mp_limb_t digit2 = p2[j];
+              carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
+              carry += dp[i + j];
+              dp[i + j] = (mp_limb_t) carry;
+              carry = carry >> GMP_LIMB_BITS;
+            }
+          dp[i + len2] = (mp_limb_t) carry;
+        }
+      /* Normalise.  */
+      while (dlen > 0 && dp[dlen - 1] == 0)
+        dlen--;
+      dest->nlimbs = dlen;
+      dest->limbs = dp;
+    }
+  return dest->limbs;
+}
+
+/* Compute the quotient of a bignum a >= 0 and a bignum b > 0.
+   a is written as  a = q * b + r  with 0 <= r < b.  q is the quotient, r
+   the remainder.
+   Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd,
+   q is incremented.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+divide (mpn_t a, mpn_t b, mpn_t *q)
+{
+  /* Algorithm:
+     First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]]
+     with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS).
+     If m<n, then q:=0 and r:=a.
+     If m>=n=1, perform a single-precision division:
+       r:=0, j:=m,
+       while j>0 do
+         {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j =
+               = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta}
+         j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j].
+       Normalise [q[m-1],...,q[0]], yields q.
+     If m>=n>1, perform a multiple-precision division:
+       We have a/b < beta^(m-n+1).
+       s:=intDsize-1-(highest bit in b[n-1]), 0<=s<intDsize.
+       Shift a and b left by s bits, copying them. r:=a.
+       r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2.
+       For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).}
+         Compute q* :
+           q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]).
+           In case of overflow (q* >= beta) set q* := beta-1.
+           Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2]
+           and c3 := b[n-2] * q*.
+           {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow
+            occurred.  Furthermore 0 <= c3 < beta^2.
+            If there was overflow and
+            r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2,
+            the next test can be skipped.}
+           While c3 > c2, {Here 0 <= c2 < c3 < beta^2}
+             Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2].
+           If q* > 0:
+             Put r := r - b * q* * beta^j. In detail:
+               [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]].
+               hence: u:=0, for i:=0 to n-1 do
+                              u := u + q* * b[i],
+                              r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry),
+                              u:=u div beta (+ 1, if carry in subtraction)
+                      r[n+j]:=r[n+j]-u.
+               {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1
+                               < q* + 1 <= beta,
+                the carry u does not overflow.}
+             If a negative carry occurs, put q* := q* - 1
+               and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]].
+         Set q[j] := q*.
+       Normalise [q[m-n],..,q[0]]; this yields the quotient q.
+       Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the
+       rest r.
+       The room for q[j] can be allocated at the memory location of r[n+j].
+     Finally, round-to-even:
+       Shift r left by 1 bit.
+       If r > b or if r = b and q[0] is odd, q := q+1.
+   */
+  const mp_limb_t *a_ptr = a.limbs;
+  size_t a_len = a.nlimbs;
+  const mp_limb_t *b_ptr = b.limbs;
+  size_t b_len = b.nlimbs;
+  mp_limb_t *roomptr;
+  mp_limb_t *tmp_roomptr = NULL;
+  mp_limb_t *q_ptr;
+  size_t q_len;
+  mp_limb_t *r_ptr;
+  size_t r_len;
+
+  /* Allocate room for a_len+2 digits.
+     (Need a_len+1 digits for the real division and 1 more digit for the
+     final rounding of q.)  */
+  roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t));
+  if (roomptr == NULL)
+    return NULL;
+
+  /* Normalise a.  */
+  while (a_len > 0 && a_ptr[a_len - 1] == 0)
+    a_len--;
+
+  /* Normalise b.  */
+  for (;;)
+    {
+      if (b_len == 0)
+        /* Division by zero.  */
+        abort ();
+      if (b_ptr[b_len - 1] == 0)
+        b_len--;
+      else
+        break;
+    }
+
+  /* Here m = a_len >= 0 and n = b_len > 0.  */
+
+  if (a_len < b_len)
+    {
+      /* m<n: trivial case.  q=0, r := copy of a.  */
+      r_ptr = roomptr;
+      r_len = a_len;
+      memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
+      q_ptr = roomptr + a_len;
+      q_len = 0;
+    }
+  else if (b_len == 1)
+    {
+      /* n=1: single precision division.
+         beta^(m-1) <= a < beta^m  ==>  beta^(m-2) <= a/b < beta^m  */
+      r_ptr = roomptr;
+      q_ptr = roomptr + 1;
+      {
+        mp_limb_t den = b_ptr[0];
+        mp_limb_t remainder = 0;
+        const mp_limb_t *sourceptr = a_ptr + a_len;
+        mp_limb_t *destptr = q_ptr + a_len;
+        size_t count;
+        for (count = a_len; count > 0; count--)
+          {
+            mp_twolimb_t num =
+              ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr;
+            *--destptr = num / den;
+            remainder = num % den;
+          }
+        /* Normalise and store r.  */
+        if (remainder > 0)
+          {
+            r_ptr[0] = remainder;
+            r_len = 1;
+          }
+        else
+          r_len = 0;
+        /* Normalise q.  */
+        q_len = a_len;
+        if (q_ptr[q_len - 1] == 0)
+          q_len--;
+      }
+    }
+  else
+    {
+      /* n>1: multiple precision division.
+         beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n  ==>
+         beta^(m-n-1) <= a/b < beta^(m-n+1).  */
+      /* Determine s.  */
+      size_t s;
+      {
+        mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */
+        /* Determine s = GMP_LIMB_BITS - integer_length (msd).
+           Code copied from gnulib's integer_length.c.  */
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+        s = __builtin_clz (msd);
+# else
+#  if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT
+        if (GMP_LIMB_BITS <= DBL_MANT_BIT)
+          {
+            /* Use 'double' operations.
+               Assumes an IEEE 754 'double' implementation.  */
+#   define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7)
+#   define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1)
+#   define NWORDS \
+     ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+            union { double value; unsigned int word[NWORDS]; } m;
+
+            /* Use a single integer to floating-point conversion.  */
+            m.value = msd;
+
+            s = GMP_LIMB_BITS
+                - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK)
+                   - DBL_EXP_BIAS);
+          }
+        else
+#   undef NWORDS
+#  endif
+          {
+            s = 31;
+            if (msd >= 0x10000)
+              {
+                msd = msd >> 16;
+                s -= 16;
+              }
+            if (msd >= 0x100)
+              {
+                msd = msd >> 8;
+                s -= 8;
+              }
+            if (msd >= 0x10)
+              {
+                msd = msd >> 4;
+                s -= 4;
+              }
+            if (msd >= 0x4)
+              {
+                msd = msd >> 2;
+                s -= 2;
+              }
+            if (msd >= 0x2)
+              {
+                msd = msd >> 1;
+                s -= 1;
+              }
+          }
+# endif
+      }
+      /* 0 <= s < GMP_LIMB_BITS.
+         Copy b, shifting it left by s bits.  */
+      if (s > 0)
+        {
+          tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t));
+          if (tmp_roomptr == NULL)
+            {
+              free (roomptr);
+              return NULL;
+            }
+          {
+            const mp_limb_t *sourceptr = b_ptr;
+            mp_limb_t *destptr = tmp_roomptr;
+            mp_twolimb_t accu = 0;
+            size_t count;
+            for (count = b_len; count > 0; count--)
+              {
+                accu += (mp_twolimb_t) *sourceptr++ << s;
+                *destptr++ = (mp_limb_t) accu;
+                accu = accu >> GMP_LIMB_BITS;
+              }
+            /* accu must be zero, since that was how s was determined.  */
+            if (accu != 0)
+              abort ();
+          }
+          b_ptr = tmp_roomptr;
+        }
+      /* Copy a, shifting it left by s bits, yields r.
+         Memory layout:
+         At the beginning: r = roomptr[0..a_len],
+         at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len]  */
+      r_ptr = roomptr;
+      if (s == 0)
+        {
+          memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
+          r_ptr[a_len] = 0;
+        }
+      else
+        {
+          const mp_limb_t *sourceptr = a_ptr;
+          mp_limb_t *destptr = r_ptr;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = a_len; count > 0; count--)
+            {
+              accu += (mp_twolimb_t) *sourceptr++ << s;
+              *destptr++ = (mp_limb_t) accu;
+              accu = accu >> GMP_LIMB_BITS;
+            }
+          *destptr++ = (mp_limb_t) accu;
+        }
+      q_ptr = roomptr + b_len;
+      q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */
+      {
+        size_t j = a_len - b_len; /* m-n */
+        mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */
+        mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */
+        mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */
+          ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd;
+        /* Division loop, traversed m-n+1 times.
+           j counts down, b is unchanged, beta/2 <= b[n-1] < beta.  */
+        for (;;)
+          {
+            mp_limb_t q_star;
+            mp_limb_t c1;
+            if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */
+              {
+                /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow.  */
+                mp_twolimb_t num =
+                  ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS)
+                  | r_ptr[j + b_len - 1];
+                q_star = num / b_msd;
+                c1 = num % b_msd;
+              }
+            else
+              {
+                /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1].  */
+                q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */
+                /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta
+                   <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta
+                   <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta)
+                        {<= beta !}.
+                   If yes, jump directly to the subtraction loop.
+                   (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta
+                    <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */
+                if (r_ptr[j + b_len] > b_msd
+                    || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd)
+                  /* r[j+n] >= b[n-1]+1 or
+                     r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a
+                     carry.  */
+                  goto subtract;
+              }
+            /* q_star = q*,
+               c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta).  */
+            {
+              mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */
+                ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2];
+              mp_twolimb_t c3 = /* b[n-2] * q* */
+                (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star;
+              /* While c2 < c3, increase c2 and decrease c3.
+                 Consider c3-c2.  While it is > 0, decrease it by
+                 b[n-1]*beta+b[n-2].  Because of b[n-1]*beta+b[n-2] >= beta^2/2
+                 this can happen only twice.  */
+              if (c3 > c2)
+                {
+                  q_star = q_star - 1; /* q* := q* - 1 */
+                  if (c3 - c2 > b_msdd)
+                    q_star = q_star - 1; /* q* := q* - 1 */
+                }
+            }
+            if (q_star > 0)
+              subtract:
+              {
+                /* Subtract r := r - b * q* * beta^j.  */
+                mp_limb_t cr;
+                {
+                  const mp_limb_t *sourceptr = b_ptr;
+                  mp_limb_t *destptr = r_ptr + j;
+                  mp_twolimb_t carry = 0;
+                  size_t count;
+                  for (count = b_len; count > 0; count--)
+                    {
+                      /* Here 0 <= carry <= q*.  */
+                      carry =
+                        carry
+                        + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++
+                        + (mp_limb_t) ~(*destptr);
+                      /* Here 0 <= carry <= beta*q* + beta-1.  */
+                      *destptr++ = ~(mp_limb_t) carry;
+                      carry = carry >> GMP_LIMB_BITS; /* <= q* */
+                    }
+                  cr = (mp_limb_t) carry;
+                }
+                /* Subtract cr from r_ptr[j + b_len], then forget about
+                   r_ptr[j + b_len].  */
+                if (cr > r_ptr[j + b_len])
+                  {
+                    /* Subtraction gave a carry.  */
+                    q_star = q_star - 1; /* q* := q* - 1 */
+                    /* Add b back.  */
+                    {
+                      const mp_limb_t *sourceptr = b_ptr;
+                      mp_limb_t *destptr = r_ptr + j;
+                      mp_limb_t carry = 0;
+                      size_t count;
+                      for (count = b_len; count > 0; count--)
+                        {
+                          mp_limb_t source1 = *sourceptr++;
+                          mp_limb_t source2 = *destptr;
+                          *destptr++ = source1 + source2 + carry;
+                          carry =
+                            (carry
+                             ? source1 >= (mp_limb_t) ~source2
+                             : source1 > (mp_limb_t) ~source2);
+                        }
+                    }
+                    /* Forget about the carry and about r[j+n].  */
+                  }
+              }
+            /* q* is determined.  Store it as q[j].  */
+            q_ptr[j] = q_star;
+            if (j == 0)
+              break;
+            j--;
+          }
+      }
+      r_len = b_len;
+      /* Normalise q.  */
+      if (q_ptr[q_len - 1] == 0)
+        q_len--;
+# if 0 /* Not needed here, since we need r only to compare it with b/2, and
+          b is shifted left by s bits.  */
+      /* Shift r right by s bits.  */
+      if (s > 0)
+        {
+          mp_limb_t ptr = r_ptr + r_len;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = r_len; count > 0; count--)
+            {
+              accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS;
+              accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s);
+              *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS);
+            }
+        }
+# endif
+      /* Normalise r.  */
+      while (r_len > 0 && r_ptr[r_len - 1] == 0)
+        r_len--;
+    }
+  /* Compare r << 1 with b.  */
+  if (r_len > b_len)
+    goto increment_q;
+  {
+    size_t i;
+    for (i = b_len;;)
+      {
+        mp_limb_t r_i =
+          (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0)
+          | (i < r_len ? r_ptr[i] << 1 : 0);
+        mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0);
+        if (r_i > b_i)
+          goto increment_q;
+        if (r_i < b_i)
+          goto keep_q;
+        if (i == 0)
+          break;
+        i--;
+      }
+  }
+  if (q_len > 0 && ((q_ptr[0] & 1) != 0))
+    /* q is odd.  */
+    increment_q:
+    {
+      size_t i;
+      for (i = 0; i < q_len; i++)
+        if (++(q_ptr[i]) != 0)
+          goto keep_q;
+      q_ptr[q_len++] = 1;
+    }
+  keep_q:
+  if (tmp_roomptr != NULL)
+    free (tmp_roomptr);
+  q->limbs = q_ptr;
+  q->nlimbs = q_len;
+  return roomptr;
+}
+
+/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal
+   representation.
+   Destroys the contents of a.
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+convert_to_decimal (mpn_t a, size_t extra_zeroes)
+{
+  mp_limb_t *a_ptr = a.limbs;
+  size_t a_len = a.nlimbs;
+  /* 0.03345 is slightly larger than log(2)/(9*log(10)).  */
+  size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1);
+  char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes));
+  if (c_ptr != NULL)
+    {
+      char *d_ptr = c_ptr;
+      for (; extra_zeroes > 0; extra_zeroes--)
+        *d_ptr++ = '0';
+      while (a_len > 0)
+        {
+          /* Divide a by 10^9, in-place.  */
+          mp_limb_t remainder = 0;
+          mp_limb_t *ptr = a_ptr + a_len;
+          size_t count;
+          for (count = a_len; count > 0; count--)
+            {
+              mp_twolimb_t num =
+                ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr;
+              *ptr = num / 1000000000;
+              remainder = num % 1000000000;
+            }
+          /* Store the remainder as 9 decimal digits.  */
+          for (count = 9; count > 0; count--)
+            {
+              *d_ptr++ = '0' + (remainder % 10);
+              remainder = remainder / 10;
+            }
+          /* Normalize a.  */
+          if (a_ptr[a_len - 1] == 0)
+            a_len--;
+        }
+      /* Remove leading zeroes.  */
+      while (d_ptr > c_ptr && d_ptr[-1] == '0')
+        d_ptr--;
+      /* But keep at least one zero.  */
+      if (d_ptr == c_ptr)
+        *d_ptr++ = '0';
+      /* Terminate the string.  */
+      *d_ptr = '\0';
+    }
+  return c_ptr;
+}
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and >= 0:
+   write x as x = 2^e * m, where m is a bignum.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+decode_long_double (long double x, int *ep, mpn_t *mp)
+{
+  mpn_t m;
+  int exp;
+  long double y;
+  size_t i;
+
+  /* Allocate memory for result.  */
+  m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
+  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
+  if (m.limbs == NULL)
+    return NULL;
+  /* Split into exponential part and mantissa.  */
+  y = frexpl (x, &exp);
+  if (!(y >= 0.0L && y < 1.0L))
+    abort ();
+  /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the
+     latter is an integer.  */
+  /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs.
+     I'm not sure whether it's safe to cast a 'long double' value between
+     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
+     'long double' values between 0 and 2^16 (to 'unsigned int' or 'int',
+     doesn't matter).  */
+#  if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0
+#   if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2));
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#   else
+    {
+      mp_limb_t d;
+      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS);
+      d = (int) y;
+      y -= d;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d;
+    }
+#   endif
+#  endif
+  for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#  if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess
+           precision.  */
+  if (!(y == 0.0L))
+    abort ();
+#  endif
+  /* Normalise.  */
+  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
+    m.nlimbs--;
+  *mp = m;
+  *ep = exp - LDBL_MANT_BIT;
+  return m.limbs;
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and >= 0:
+   write x as x = 2^e * m, where m is a bignum.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+decode_double (double x, int *ep, mpn_t *mp)
+{
+  mpn_t m;
+  int exp;
+  double y;
+  size_t i;
+
+  /* Allocate memory for result.  */
+  m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
+  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
+  if (m.limbs == NULL)
+    return NULL;
+  /* Split into exponential part and mantissa.  */
+  y = frexp (x, &exp);
+  if (!(y >= 0.0 && y < 1.0))
+    abort ();
+  /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the
+     latter is an integer.  */
+  /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs.
+     I'm not sure whether it's safe to cast a 'double' value between
+     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
+     'double' values between 0 and 2^16 (to 'unsigned int' or 'int',
+     doesn't matter).  */
+#  if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0
+#   if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2));
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#   else
+    {
+      mp_limb_t d;
+      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS);
+      d = (int) y;
+      y -= d;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d;
+    }
+#   endif
+#  endif
+  for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+  if (!(y == 0.0))
+    abort ();
+  /* Normalise.  */
+  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
+    m.nlimbs--;
+  *mp = m;
+  *ep = exp - DBL_MANT_BIT;
+  return m.limbs;
+}
+
+# endif
+
+/* Assuming x = 2^e * m is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n)
+{
+  int s;
+  size_t extra_zeroes;
+  unsigned int abs_n;
+  unsigned int abs_s;
+  mp_limb_t *pow5_ptr;
+  size_t pow5_len;
+  unsigned int s_limbs;
+  unsigned int s_bits;
+  mpn_t pow5;
+  mpn_t z;
+  void *z_memory;
+  char *digits;
+
+  if (memory == NULL)
+    return NULL;
+  /* x = 2^e * m, hence
+     y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m)
+       = round (2^s * 5^n * m).  */
+  s = e + n;
+  extra_zeroes = 0;
+  /* Factor out a common power of 10 if possible.  */
+  if (s > 0 && n > 0)
+    {
+      extra_zeroes = (s < n ? s : n);
+      s -= extra_zeroes;
+      n -= extra_zeroes;
+    }
+  /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes.
+     Before converting to decimal, we need to compute
+     z = round (2^s * 5^n * m).  */
+  /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same
+     sign.  2.322 is slightly larger than log(5)/log(2).  */
+  abs_n = (n >= 0 ? n : -n);
+  abs_s = (s >= 0 ? s : -s);
+  pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1
+                                    + abs_s / GMP_LIMB_BITS + 1)
+                                   * sizeof (mp_limb_t));
+  if (pow5_ptr == NULL)
+    {
+      free (memory);
+      return NULL;
+    }
+  /* Initialize with 1.  */
+  pow5_ptr[0] = 1;
+  pow5_len = 1;
+  /* Multiply with 5^|n|.  */
+  if (abs_n > 0)
+    {
+      static mp_limb_t const small_pow5[13 + 1] =
+        {
+          1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625,
+          48828125, 244140625, 1220703125
+        };
+      unsigned int n13;
+      for (n13 = 0; n13 <= abs_n; n13 += 13)
+        {
+          mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13];
+          size_t j;
+          mp_twolimb_t carry = 0;
+          for (j = 0; j < pow5_len; j++)
+            {
+              mp_limb_t digit2 = pow5_ptr[j];
+              carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
+              pow5_ptr[j] = (mp_limb_t) carry;
+              carry = carry >> GMP_LIMB_BITS;
+            }
+          if (carry > 0)
+            pow5_ptr[pow5_len++] = (mp_limb_t) carry;
+        }
+    }
+  s_limbs = abs_s / GMP_LIMB_BITS;
+  s_bits = abs_s % GMP_LIMB_BITS;
+  if (n >= 0 ? s >= 0 : s <= 0)
+    {
+      /* Multiply with 2^|s|.  */
+      if (s_bits > 0)
+        {
+          mp_limb_t *ptr = pow5_ptr;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = pow5_len; count > 0; count--)
+            {
+              accu += (mp_twolimb_t) *ptr << s_bits;
+              *ptr++ = (mp_limb_t) accu;
+              accu = accu >> GMP_LIMB_BITS;
+            }
+          if (accu > 0)
+            {
+              *ptr = (mp_limb_t) accu;
+              pow5_len++;
+            }
+        }
+      if (s_limbs > 0)
+        {
+          size_t count;
+          for (count = pow5_len; count > 0;)
+            {
+              count--;
+              pow5_ptr[s_limbs + count] = pow5_ptr[count];
+            }
+          for (count = s_limbs; count > 0;)
+            {
+              count--;
+              pow5_ptr[count] = 0;
+            }
+          pow5_len += s_limbs;
+        }
+      pow5.limbs = pow5_ptr;
+      pow5.nlimbs = pow5_len;
+      if (n >= 0)
+        {
+          /* Multiply m with pow5.  No division needed.  */
+          z_memory = multiply (m, pow5, &z);
+        }
+      else
+        {
+          /* Divide m by pow5 and round.  */
+          z_memory = divide (m, pow5, &z);
+        }
+    }
+  else
+    {
+      pow5.limbs = pow5_ptr;
+      pow5.nlimbs = pow5_len;
+      if (n >= 0)
+        {
+          /* n >= 0, s < 0.
+             Multiply m with pow5, then divide by 2^|s|.  */
+          mpn_t numerator;
+          mpn_t denominator;
+          void *tmp_memory;
+          tmp_memory = multiply (m, pow5, &numerator);
+          if (tmp_memory == NULL)
+            {
+              free (pow5_ptr);
+              free (memory);
+              return NULL;
+            }
+          /* Construct 2^|s|.  */
+          {
+            mp_limb_t *ptr = pow5_ptr + pow5_len;
+            size_t i;
+            for (i = 0; i < s_limbs; i++)
+              ptr[i] = 0;
+            ptr[s_limbs] = (mp_limb_t) 1 << s_bits;
+            denominator.limbs = ptr;
+            denominator.nlimbs = s_limbs + 1;
+          }
+          z_memory = divide (numerator, denominator, &z);
+          free (tmp_memory);
+        }
+      else
+        {
+          /* n < 0, s > 0.
+             Multiply m with 2^s, then divide by pow5.  */
+          mpn_t numerator;
+          mp_limb_t *num_ptr;
+          num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1)
+                                          * sizeof (mp_limb_t));
+          if (num_ptr == NULL)
+            {
+              free (pow5_ptr);
+              free (memory);
+              return NULL;
+            }
+          {
+            mp_limb_t *destptr = num_ptr;
+            {
+              size_t i;
+              for (i = 0; i < s_limbs; i++)
+                *destptr++ = 0;
+            }
+            if (s_bits > 0)
+              {
+                const mp_limb_t *sourceptr = m.limbs;
+                mp_twolimb_t accu = 0;
+                size_t count;
+                for (count = m.nlimbs; count > 0; count--)
+                  {
+                    accu += (mp_twolimb_t) *sourceptr++ << s_bits;
+                    *destptr++ = (mp_limb_t) accu;
+                    accu = accu >> GMP_LIMB_BITS;
+                  }
+                if (accu > 0)
+                  *destptr++ = (mp_limb_t) accu;
+              }
+            else
+              {
+                const mp_limb_t *sourceptr = m.limbs;
+                size_t count;
+                for (count = m.nlimbs; count > 0; count--)
+                  *destptr++ = *sourceptr++;
+              }
+            numerator.limbs = num_ptr;
+            numerator.nlimbs = destptr - num_ptr;
+          }
+          z_memory = divide (numerator, pow5, &z);
+          free (num_ptr);
+        }
+    }
+  free (pow5_ptr);
+  free (memory);
+
+  /* Here y = round (x * 10^n) = z * 10^extra_zeroes.  */
+
+  if (z_memory == NULL)
+    return NULL;
+  digits = convert_to_decimal (z, extra_zeroes);
+  free (z_memory);
+  return digits;
+}
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_long_double (long double x, int n)
+{
+  int e IF_LINT(= 0);
+  mpn_t m;
+  void *memory = decode_long_double (x, &e, &m);
+  return scale10_round_decimal_decoded (e, m, memory, n);
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_double (double x, int n)
+{
+  int e IF_LINT(= 0);
+  mpn_t m;
+  void *memory = decode_double (x, &e, &m);
+  return scale10_round_decimal_decoded (e, m, memory, n);
+}
+
+# endif
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and > 0:
+   Return an approximation for n with 10^n <= x < 10^(n+1).
+   The approximation is usually the right n, but may be off by 1 sometimes.  */
+static int
+floorlog10l (long double x)
+{
+  int exp;
+  long double y;
+  double z;
+  double l;
+
+  /* Split into exponential part and mantissa.  */
+  y = frexpl (x, &exp);
+  if (!(y >= 0.0L && y < 1.0L))
+    abort ();
+  if (y == 0.0L)
+    return INT_MIN;
+  if (y < 0.5L)
+    {
+      while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
+        {
+          y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
+          exp -= GMP_LIMB_BITS;
+        }
+      if (y < (1.0L / (1 << 16)))
+        {
+          y *= 1.0L * (1 << 16);
+          exp -= 16;
+        }
+      if (y < (1.0L / (1 << 8)))
+        {
+          y *= 1.0L * (1 << 8);
+          exp -= 8;
+        }
+      if (y < (1.0L / (1 << 4)))
+        {
+          y *= 1.0L * (1 << 4);
+          exp -= 4;
+        }
+      if (y < (1.0L / (1 << 2)))
+        {
+          y *= 1.0L * (1 << 2);
+          exp -= 2;
+        }
+      if (y < (1.0L / (1 << 1)))
+        {
+          y *= 1.0L * (1 << 1);
+          exp -= 1;
+        }
+    }
+  if (!(y >= 0.5L && y < 1.0L))
+    abort ();
+  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
+  l = exp;
+  z = y;
+  if (z < 0.70710678118654752444)
+    {
+      z *= 1.4142135623730950488;
+      l -= 0.5;
+    }
+  if (z < 0.8408964152537145431)
+    {
+      z *= 1.1892071150027210667;
+      l -= 0.25;
+    }
+  if (z < 0.91700404320467123175)
+    {
+      z *= 1.0905077326652576592;
+      l -= 0.125;
+    }
+  if (z < 0.9576032806985736469)
+    {
+      z *= 1.0442737824274138403;
+      l -= 0.0625;
+    }
+  /* Now 0.95 <= z <= 1.01.  */
+  z = 1 - z;
+  /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...)
+     Four terms are enough to get an approximation with error < 10^-7.  */
+  l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
+  /* Finally multiply with log(2)/log(10), yields an approximation for
+     log10(x).  */
+  l *= 0.30102999566398119523;
+  /* Round down to the next integer.  */
+  return (int) l + (l < 0 ? -1 : 0);
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and > 0:
+   Return an approximation for n with 10^n <= x < 10^(n+1).
+   The approximation is usually the right n, but may be off by 1 sometimes.  */
+static int
+floorlog10 (double x)
+{
+  int exp;
+  double y;
+  double z;
+  double l;
+
+  /* Split into exponential part and mantissa.  */
+  y = frexp (x, &exp);
+  if (!(y >= 0.0 && y < 1.0))
+    abort ();
+  if (y == 0.0)
+    return INT_MIN;
+  if (y < 0.5)
+    {
+      while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
+        {
+          y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
+          exp -= GMP_LIMB_BITS;
+        }
+      if (y < (1.0 / (1 << 16)))
+        {
+          y *= 1.0 * (1 << 16);
+          exp -= 16;
+        }
+      if (y < (1.0 / (1 << 8)))
+        {
+          y *= 1.0 * (1 << 8);
+          exp -= 8;
+        }
+      if (y < (1.0 / (1 << 4)))
+        {
+          y *= 1.0 * (1 << 4);
+          exp -= 4;
+        }
+      if (y < (1.0 / (1 << 2)))
+        {
+          y *= 1.0 * (1 << 2);
+          exp -= 2;
+        }
+      if (y < (1.0 / (1 << 1)))
+        {
+          y *= 1.0 * (1 << 1);
+          exp -= 1;
+        }
+    }
+  if (!(y >= 0.5 && y < 1.0))
+    abort ();
+  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
+  l = exp;
+  z = y;
+  if (z < 0.70710678118654752444)
+    {
+      z *= 1.4142135623730950488;
+      l -= 0.5;
+    }
+  if (z < 0.8408964152537145431)
+    {
+      z *= 1.1892071150027210667;
+      l -= 0.25;
+    }
+  if (z < 0.91700404320467123175)
+    {
+      z *= 1.0905077326652576592;
+      l -= 0.125;
+    }
+  if (z < 0.9576032806985736469)
+    {
+      z *= 1.0442737824274138403;
+      l -= 0.0625;
+    }
+  /* Now 0.95 <= z <= 1.01.  */
+  z = 1 - z;
+  /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...)
+     Four terms are enough to get an approximation with error < 10^-7.  */
+  l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
+  /* Finally multiply with log(2)/log(10), yields an approximation for
+     log10(x).  */
+  l *= 0.30102999566398119523;
+  /* Round down to the next integer.  */
+  return (int) l + (l < 0 ? -1 : 0);
+}
+
+# endif
+
+/* Tests whether a string of digits consists of exactly PRECISION zeroes and
+   a single '1' digit.  */
+static int
+is_borderline (const char *digits, size_t precision)
+{
+  for (; precision > 0; precision--, digits++)
+    if (*digits != '0')
+      return 0;
+  if (*digits != '1')
+    return 0;
+  digits++;
+  return *digits == '\0';
+}
+
+#endif
+
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99
+
+/* Use a different function name, to make it possible that the 'wchar_t'
+   parametrization and the 'char' parametrization get compiled in the same
+   translation unit.  */
+# if WIDE_CHAR_VERSION
+#  define MAX_ROOM_NEEDED wmax_room_needed
+# else
+#  define MAX_ROOM_NEEDED max_room_needed
+# endif
+
+/* Returns the number of TCHAR_T units needed as temporary space for the result
+   of sprintf or SNPRINTF of a single conversion directive.  */
+static size_t
+MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion,
+                 arg_type type, int flags, size_t width, int has_precision,
+                 size_t precision, int pad_ourselves)
+{
+  size_t tmp_length;
+
+  switch (conversion)
+    {
+    case 'd': case 'i': case 'u':
+# if HAVE_LONG_LONG_INT
+      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                          * 0.30103 /* binary -> decimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+# endif
+      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                          * 0.30103 /* binary -> decimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+        tmp_length =
+          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                          * 0.30103 /* binary -> decimal */
+                         )
+          + 1; /* turn floor into ceil */
+      if (tmp_length < precision)
+        tmp_length = precision;
+      /* Multiply by 2, as an estimate for FLAG_GROUP.  */
+      tmp_length = xsum (tmp_length, tmp_length);
+      /* Add 1, to account for a leading sign.  */
+      tmp_length = xsum (tmp_length, 1);
+      break;
+
+    case 'o':
+# if HAVE_LONG_LONG_INT
+      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                          * 0.333334 /* binary -> octal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+# endif
+      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                          * 0.333334 /* binary -> octal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+        tmp_length =
+          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                          * 0.333334 /* binary -> octal */
+                         )
+          + 1; /* turn floor into ceil */
+      if (tmp_length < precision)
+        tmp_length = precision;
+      /* Add 1, to account for a leading sign.  */
+      tmp_length = xsum (tmp_length, 1);
+      break;
+
+    case 'x': case 'X':
+# if HAVE_LONG_LONG_INT
+      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                          * 0.25 /* binary -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+# endif
+      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                          * 0.25 /* binary -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+        tmp_length =
+          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                          * 0.25 /* binary -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      if (tmp_length < precision)
+        tmp_length = precision;
+      /* Add 2, to account for a leading sign or alternate form.  */
+      tmp_length = xsum (tmp_length, 2);
+      break;
+
+    case 'f': case 'F':
+      if (type == TYPE_LONGDOUBLE)
+        tmp_length =
+          (unsigned int) (LDBL_MAX_EXP
+                          * 0.30103 /* binary -> decimal */
+                          * 2 /* estimate for FLAG_GROUP */
+                         )
+          + 1 /* turn floor into ceil */
+          + 10; /* sign, decimal point etc. */
+      else
+        tmp_length =
+          (unsigned int) (DBL_MAX_EXP
+                          * 0.30103 /* binary -> decimal */
+                          * 2 /* estimate for FLAG_GROUP */
+                         )
+          + 1 /* turn floor into ceil */
+          + 10; /* sign, decimal point etc. */
+      tmp_length = xsum (tmp_length, precision);
+      break;
+
+    case 'e': case 'E': case 'g': case 'G':
+      tmp_length =
+        12; /* sign, decimal point, exponent etc. */
+      tmp_length = xsum (tmp_length, precision);
+      break;
+
+    case 'a': case 'A':
+      if (type == TYPE_LONGDOUBLE)
+        tmp_length =
+          (unsigned int) (LDBL_DIG
+                          * 0.831 /* decimal -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+        tmp_length =
+          (unsigned int) (DBL_DIG
+                          * 0.831 /* decimal -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      if (tmp_length < precision)
+        tmp_length = precision;
+      /* Account for sign, decimal point etc. */
+      tmp_length = xsum (tmp_length, 12);
+      break;
+
+    case 'c':
+# if HAVE_WINT_T && !WIDE_CHAR_VERSION
+      if (type == TYPE_WIDE_CHAR)
+        tmp_length = MB_CUR_MAX;
+      else
+# endif
+        tmp_length = 1;
+      break;
+
+    case 's':
+# if HAVE_WCHAR_T
+      if (type == TYPE_WIDE_STRING)
+        {
+#  if WIDE_CHAR_VERSION
+          /* ISO C says about %ls in fwprintf:
+               "If the precision is not specified or is greater than the size
+                of the array, the array shall contain a null wide character."
+             So if there is a precision, we must not use wcslen.  */
+          const wchar_t *arg = ap->arg[arg_index].a.a_wide_string;
+
+          if (has_precision)
+            tmp_length = local_wcsnlen (arg, precision);
+          else
+            tmp_length = local_wcslen (arg);
+#  else
+          /* ISO C says about %ls in fprintf:
+               "If a precision is specified, no more than that many bytes are
+                written (including shift sequences, if any), and the array
+                shall contain a null wide character if, to equal the multibyte
+                character sequence length given by the precision, the function
+                would need to access a wide character one past the end of the
+                array."
+             So if there is a precision, we must not use wcslen.  */
+          /* This case has already been handled separately in VASNPRINTF.  */
+          abort ();
+#  endif
+        }
+      else
+# endif
+        {
+# if WIDE_CHAR_VERSION
+          /* ISO C says about %s in fwprintf:
+               "If the precision is not specified or is greater than the size
+                of the converted array, the converted array shall contain a
+                null wide character."
+             So if there is a precision, we must not use strlen.  */
+          /* This case has already been handled separately in VASNPRINTF.  */
+          abort ();
+# else
+          /* ISO C says about %s in fprintf:
+               "If the precision is not specified or greater than the size of
+                the array, the array shall contain a null character."
+             So if there is a precision, we must not use strlen.  */
+          const char *arg = ap->arg[arg_index].a.a_string;
+
+          if (has_precision)
+            tmp_length = local_strnlen (arg, precision);
+          else
+            tmp_length = strlen (arg);
+# endif
+        }
+      break;
+
+    case 'p':
+      tmp_length =
+        (unsigned int) (sizeof (void *) * CHAR_BIT
+                        * 0.25 /* binary -> hexadecimal */
+                       )
+          + 1 /* turn floor into ceil */
+          + 2; /* account for leading 0x */
+      break;
+
+    default:
+      abort ();
+    }
+
+  if (!pad_ourselves)
+    {
+# if ENABLE_UNISTDIO
+      /* Padding considers the number of characters, therefore the number of
+         elements after padding may be
+           > max (tmp_length, width)
+         but is certainly
+           <= tmp_length + width.  */
+      tmp_length = xsum (tmp_length, width);
+# else
+      /* Padding considers the number of elements, says POSIX.  */
+      if (tmp_length < width)
+        tmp_length = width;
+# endif
+    }
+
+  tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+  return tmp_length;
+}
+
+#endif
+
+DCHAR_T *
+VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
+            const FCHAR_T *format, va_list args)
+{
+  DIRECTIVES d;
+  arguments a;
+
+  if (PRINTF_PARSE (format, &d, &a) < 0)
+    /* errno is already set.  */
+    return NULL;
+
+#define CLEANUP() \
+  if (d.dir != d.direct_alloc_dir)                                      \
+    free (d.dir);                                                       \
+  if (a.arg != a.direct_alloc_arg)                                      \
+    free (a.arg);
+
+  if (PRINTF_FETCHARGS (args, &a) < 0)
+    {
+      CLEANUP ();
+      errno = EINVAL;
+      return NULL;
+    }
+
+  {
+    size_t buf_neededlength;
+    TCHAR_T *buf;
+    TCHAR_T *buf_malloced;
+    const FCHAR_T *cp;
+    size_t i;
+    DIRECTIVE *dp;
+    /* Output string accumulator.  */
+    DCHAR_T *result;
+    size_t allocated;
+    size_t length;
+
+    /* Allocate a small buffer that will hold a directive passed to
+       sprintf or snprintf.  */
+    buf_neededlength =
+      xsum4 (7, d.max_width_length, d.max_precision_length, 6);
+#if HAVE_ALLOCA
+    if (buf_neededlength < 4000 / sizeof (TCHAR_T))
+      {
+        buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T));
+        buf_malloced = NULL;
+      }
+    else
+#endif
+      {
+        size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T));
+        if (size_overflow_p (buf_memsize))
+          goto out_of_memory_1;
+        buf = (TCHAR_T *) malloc (buf_memsize);
+        if (buf == NULL)
+          goto out_of_memory_1;
+        buf_malloced = buf;
+      }
+
+    if (resultbuf != NULL)
+      {
+        result = resultbuf;
+        allocated = *lengthp;
+      }
+    else
+      {
+        result = NULL;
+        allocated = 0;
+      }
+    length = 0;
+    /* Invariants:
+       result is either == resultbuf or == NULL or malloc-allocated.
+       If length > 0, then result != NULL.  */
+
+    /* Ensures that allocated >= needed.  Aborts through a jump to
+       out_of_memory if needed is SIZE_MAX or otherwise too big.  */
+#define ENSURE_ALLOCATION(needed) \
+    if ((needed) > allocated)                                                \
+      {                                                                      \
+        size_t memory_size;                                                  \
+        DCHAR_T *memory;                                                     \
+                                                                             \
+        allocated = (allocated > 0 ? xtimes (allocated, 2) : 12);            \
+        if ((needed) > allocated)                                            \
+          allocated = (needed);                                              \
+        memory_size = xtimes (allocated, sizeof (DCHAR_T));                  \
+        if (size_overflow_p (memory_size))                                   \
+          goto out_of_memory;                                                \
+        if (result == resultbuf || result == NULL)                           \
+          memory = (DCHAR_T *) malloc (memory_size);                         \
+        else                                                                 \
+          memory = (DCHAR_T *) realloc (result, memory_size);                \
+        if (memory == NULL)                                                  \
+          goto out_of_memory;                                                \
+        if (result == resultbuf && length > 0)                               \
+          DCHAR_CPY (memory, result, length);                                \
+        result = memory;                                                     \
+      }
+
+    for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
+      {
+        if (cp != dp->dir_start)
+          {
+            size_t n = dp->dir_start - cp;
+            size_t augmented_length = xsum (length, n);
+
+            ENSURE_ALLOCATION (augmented_length);
+            /* This copies a piece of FCHAR_T[] into a DCHAR_T[].  Here we
+               need that the format string contains only ASCII characters
+               if FCHAR_T and DCHAR_T are not the same type.  */
+            if (sizeof (FCHAR_T) == sizeof (DCHAR_T))
+              {
+                DCHAR_CPY (result + length, (const DCHAR_T *) cp, n);
+                length = augmented_length;
+              }
+            else
+              {
+                do
+                  result[length++] = (unsigned char) *cp++;
+                while (--n > 0);
+              }
+          }
+        if (i == d.count)
+          break;
+
+        /* Execute a single directive.  */
+        if (dp->conversion == '%')
+          {
+            size_t augmented_length;
+
+            if (!(dp->arg_index == ARG_NONE))
+              abort ();
+            augmented_length = xsum (length, 1);
+            ENSURE_ALLOCATION (augmented_length);
+            result[length] = '%';
+            length = augmented_length;
+          }
+        else
+          {
+            if (!(dp->arg_index != ARG_NONE))
+              abort ();
+
+            if (dp->conversion == 'n')
+              {
+                switch (a.arg[dp->arg_index].type)
+                  {
+                  case TYPE_COUNT_SCHAR_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
+                    break;
+                  case TYPE_COUNT_SHORT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_short_pointer = length;
+                    break;
+                  case TYPE_COUNT_INT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_int_pointer = length;
+                    break;
+                  case TYPE_COUNT_LONGINT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
+                    break;
+#if HAVE_LONG_LONG_INT
+                  case TYPE_COUNT_LONGLONGINT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
+                    break;
+#endif
+                  default:
+                    abort ();
+                  }
+              }
+#if ENABLE_UNISTDIO
+            /* The unistdio extensions.  */
+            else if (dp->conversion == 'U')
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                switch (type)
+                  {
+                  case TYPE_U8_STRING:
+                    {
+                      const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string;
+                      const uint8_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u8_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u8_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u8_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (has_width && width > characters
+                          && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT8_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-8 to locale encoding.  */
+                        converted =
+                          u8_conv_to_encoding (locale_charset (),
+                                               iconveh_question_mark,
+                                               arg, arg_end - arg, NULL,
+                                               converted, &converted_len);
+#  else
+                        /* Convert from UTF-8 to UTF-16/UTF-32.  */
+                        converted =
+                          U8_TO_DCHAR (arg, arg_end - arg,
+                                       converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (has_width && width > characters
+                          && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  case TYPE_U16_STRING:
+                    {
+                      const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string;
+                      const uint16_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u16_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u16_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u16_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (has_width && width > characters
+                          && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT16_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-16 to locale encoding.  */
+                        converted =
+                          u16_conv_to_encoding (locale_charset (),
+                                                iconveh_question_mark,
+                                                arg, arg_end - arg, NULL,
+                                                converted, &converted_len);
+#  else
+                        /* Convert from UTF-16 to UTF-8/UTF-32.  */
+                        converted =
+                          U16_TO_DCHAR (arg, arg_end - arg,
+                                        converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (has_width && width > characters
+                          && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  case TYPE_U32_STRING:
+                    {
+                      const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string;
+                      const uint32_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u32_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u32_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u32_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (has_width && width > characters
+                          && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT32_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-32 to locale encoding.  */
+                        converted =
+                          u32_conv_to_encoding (locale_charset (),
+                                                iconveh_question_mark,
+                                                arg, arg_end - arg, NULL,
+                                                converted, &converted_len);
+#  else
+                        /* Convert from UTF-32 to UTF-8/UTF-16.  */
+                        converted =
+                          U32_TO_DCHAR (arg, arg_end - arg,
+                                        converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (has_width && width > characters
+                          && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  default:
+                    abort ();
+                  }
+              }
+#endif
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T
+            else if (dp->conversion == 's'
+# if WIDE_CHAR_VERSION
+                     && a.arg[dp->arg_index].type != TYPE_WIDE_STRING
+# else
+                     && a.arg[dp->arg_index].type == TYPE_WIDE_STRING
+# endif
+                    )
+              {
+                /* The normal handling of the 's' directive below requires
+                   allocating a temporary buffer.  The determination of its
+                   length (tmp_length), in the case when a precision is
+                   specified, below requires a conversion between a char[]
+                   string and a wchar_t[] wide string.  It could be done, but
+                   we have no guarantee that the implementation of sprintf will
+                   use the exactly same algorithm.  Without this guarantee, it
+                   is possible to have buffer overrun bugs.  In order to avoid
+                   such bugs, we implement the entire processing of the 's'
+                   directive ourselves.  */
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 6;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+# if WIDE_CHAR_VERSION
+                /* %s in vasnwprintf.  See the specification of fwprintf.  */
+                {
+                  const char *arg = a.arg[dp->arg_index].a.a_string;
+                  const char *arg_end;
+                  size_t characters;
+
+                  if (has_precision)
+                    {
+                      /* Use only as many bytes as needed to produce PRECISION
+                         wide characters, from the left.  */
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (; precision > 0; precision--)
+                        {
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrlen (arg_end, MB_CUR_MAX, &state);
+#  else
+                          count = mblen (arg_end, MB_CUR_MAX);
+#  endif
+                          if (count == 0)
+                            /* Found the terminating NUL.  */
+                            break;
+                          if (count < 0)
+                            {
+                              /* Invalid or incomplete multibyte character.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end += count;
+                          characters++;
+                        }
+                    }
+                  else if (has_width)
+                    {
+                      /* Use the entire string, and count the number of wide
+                         characters.  */
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (;;)
+                        {
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrlen (arg_end, MB_CUR_MAX, &state);
+#  else
+                          count = mblen (arg_end, MB_CUR_MAX);
+#  endif
+                          if (count == 0)
+                            /* Found the terminating NUL.  */
+                            break;
+                          if (count < 0)
+                            {
+                              /* Invalid or incomplete multibyte character.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end += count;
+                          characters++;
+                        }
+                    }
+                  else
+                    {
+                      /* Use the entire string.  */
+                      arg_end = arg + strlen (arg);
+                      /* The number of characters doesn't matter.  */
+                      characters = 0;
+                    }
+
+                  if (has_width && width > characters
+                      && !(dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - characters;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+
+                  if (has_precision || has_width)
+                    {
+                      /* We know the number of wide characters in advance.  */
+                      size_t remaining;
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      ENSURE_ALLOCATION (xsum (length, characters));
+                      for (remaining = characters; remaining > 0; remaining--)
+                        {
+                          wchar_t wc;
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrtowc (&wc, arg, arg_end - arg, &state);
+#  else
+                          count = mbtowc (&wc, arg, arg_end - arg);
+#  endif
+                          if (count <= 0)
+                            /* mbrtowc not consistent with mbrlen, or mbtowc
+                               not consistent with mblen.  */
+                            abort ();
+                          result[length++] = wc;
+                          arg += count;
+                        }
+                      if (!(arg == arg_end))
+                        abort ();
+                    }
+                  else
+                    {
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      while (arg < arg_end)
+                        {
+                          wchar_t wc;
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrtowc (&wc, arg, arg_end - arg, &state);
+#  else
+                          count = mbtowc (&wc, arg, arg_end - arg);
+#  endif
+                          if (count <= 0)
+                            /* mbrtowc not consistent with mbrlen, or mbtowc
+                               not consistent with mblen.  */
+                            abort ();
+                          ENSURE_ALLOCATION (xsum (length, 1));
+                          result[length++] = wc;
+                          arg += count;
+                        }
+                    }
+
+                  if (has_width && width > characters
+                      && (dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - characters;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+                }
+# else
+                /* %ls in vasnprintf.  See the specification of fprintf.  */
+                {
+                  const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+                  const wchar_t *arg_end;
+                  size_t characters;
+#  if !DCHAR_IS_TCHAR
+                  /* This code assumes that TCHAR_T is 'char'.  */
+                  verify (sizeof (TCHAR_T) == 1);
+                  TCHAR_T *tmpsrc;
+                  DCHAR_T *tmpdst;
+                  size_t tmpdst_len;
+#  endif
+                  size_t w;
+
+                  if (has_precision)
+                    {
+                      /* Use only as many wide characters as needed to produce
+                         at most PRECISION bytes, from the left.  */
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      while (precision > 0)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg_end == 0)
+                            /* Found the terminating null wide character.  */
+                            break;
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg_end, &state);
+#  else
+                          count = wctomb (cbuf, *arg_end);
+#  endif
+                          if (count < 0)
+                            {
+                              /* Cannot convert.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          if (precision < count)
+                            break;
+                          arg_end++;
+                          characters += count;
+                          precision -= count;
+                        }
+                    }
+#  if DCHAR_IS_TCHAR
+                  else if (has_width)
+#  else
+                  else
+#  endif
+                    {
+                      /* Use the entire string, and count the number of
+                         bytes.  */
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (;;)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg_end == 0)
+                            /* Found the terminating null wide character.  */
+                            break;
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg_end, &state);
+#  else
+                          count = wctomb (cbuf, *arg_end);
+#  endif
+                          if (count < 0)
+                            {
+                              /* Cannot convert.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end++;
+                          characters += count;
+                        }
+                    }
+#  if DCHAR_IS_TCHAR
+                  else
+                    {
+                      /* Use the entire string.  */
+                      arg_end = arg + local_wcslen (arg);
+                      /* The number of bytes doesn't matter.  */
+                      characters = 0;
+                    }
+#  endif
+
+#  if !DCHAR_IS_TCHAR
+                  /* Convert the string into a piece of temporary memory.  */
+                  tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T));
+                  if (tmpsrc == NULL)
+                    goto out_of_memory;
+                  {
+                    TCHAR_T *tmpptr = tmpsrc;
+                    size_t remaining;
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                    mbstate_t state;
+                    memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                    for (remaining = characters; remaining > 0; )
+                      {
+                        char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                        int count;
+
+                        if (*arg == 0)
+                          abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                        count = wcrtomb (cbuf, *arg, &state);
+#   else
+                        count = wctomb (cbuf, *arg);
+#   endif
+                        if (count <= 0)
+                          /* Inconsistency.  */
+                          abort ();
+                        memcpy (tmpptr, cbuf, count);
+                        tmpptr += count;
+                        arg++;
+                        remaining -= count;
+                      }
+                    if (!(arg == arg_end))
+                      abort ();
+                  }
+
+                  /* Convert from TCHAR_T[] to DCHAR_T[].  */
+                  tmpdst =
+                    DCHAR_CONV_FROM_ENCODING (locale_charset (),
+                                              iconveh_question_mark,
+                                              tmpsrc, characters,
+                                              NULL,
+                                              NULL, &tmpdst_len);
+                  if (tmpdst == NULL)
+                    {
+                      int saved_errno = errno;
+                      free (tmpsrc);
+                      if (!(result == resultbuf || result == NULL))
+                        free (result);
+                      if (buf_malloced != NULL)
+                        free (buf_malloced);
+                      CLEANUP ();
+                      errno = saved_errno;
+                      return NULL;
+                    }
+                  free (tmpsrc);
+#  endif
+
+                  if (has_width)
+                    {
+#  if ENABLE_UNISTDIO
+                      /* Outside POSIX, it's preferable to compare the width
+                         against the number of _characters_ of the converted
+                         value.  */
+                      w = DCHAR_MBSNLEN (result + length, characters);
+#  else
+                      /* The width is compared against the number of _bytes_
+                         of the converted value, says POSIX.  */
+                      w = characters;
+#  endif
+                    }
+                  else
+                    /* w doesn't matter.  */
+                    w = 0;
+
+                  if (has_width && width > w
+                      && !(dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - w;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+
+#  if DCHAR_IS_TCHAR
+                  if (has_precision || has_width)
+                    {
+                      /* We know the number of bytes in advance.  */
+                      size_t remaining;
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                      ENSURE_ALLOCATION (xsum (length, characters));
+                      for (remaining = characters; remaining > 0; )
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg == 0)
+                            abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg, &state);
+#   else
+                          count = wctomb (cbuf, *arg);
+#   endif
+                          if (count <= 0)
+                            /* Inconsistency.  */
+                            abort ();
+                          memcpy (result + length, cbuf, count);
+                          length += count;
+                          arg++;
+                          remaining -= count;
+                        }
+                      if (!(arg == arg_end))
+                        abort ();
+                    }
+                  else
+                    {
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                      while (arg < arg_end)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg == 0)
+                            abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg, &state);
+#   else
+                          count = wctomb (cbuf, *arg);
+#   endif
+                          if (count <= 0)
+                            {
+                              /* Cannot convert.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          ENSURE_ALLOCATION (xsum (length, count));
+                          memcpy (result + length, cbuf, count);
+                          length += count;
+                          arg++;
+                        }
+                    }
+#  else
+                  ENSURE_ALLOCATION (xsum (length, tmpdst_len));
+                  DCHAR_CPY (result + length, tmpdst, tmpdst_len);
+                  free (tmpdst);
+                  length += tmpdst_len;
+#  endif
+
+                  if (has_width && width > w
+                      && (dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - w;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+                }
+# endif
+              }
+#endif
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+            else if ((dp->conversion == 'a' || dp->conversion == 'A')
+# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE))
+                     && (0
+#  if NEED_PRINTF_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_DOUBLE
+#  endif
+#  if NEED_PRINTF_LONG_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+#  endif
+                        )
+# endif
+                    )
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+                size_t tmp_length;
+                DCHAR_T tmpbuf[700];
+                DCHAR_T *tmp;
+                DCHAR_T *pad_ptr;
+                DCHAR_T *p;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                /* Allocate a temporary buffer of sufficient size.  */
+                if (type == TYPE_LONGDOUBLE)
+                  tmp_length =
+                    (unsigned int) ((LDBL_DIG + 1)
+                                    * 0.831 /* decimal -> hexadecimal */
+                                   )
+                    + 1; /* turn floor into ceil */
+                else
+                  tmp_length =
+                    (unsigned int) ((DBL_DIG + 1)
+                                    * 0.831 /* decimal -> hexadecimal */
+                                   )
+                    + 1; /* turn floor into ceil */
+                if (tmp_length < precision)
+                  tmp_length = precision;
+                /* Account for sign, decimal point etc. */
+                tmp_length = xsum (tmp_length, 12);
+
+                if (tmp_length < width)
+                  tmp_length = width;
+
+                tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (DCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+
+                pad_ptr = NULL;
+                p = tmp;
+                if (type == TYPE_LONGDOUBLE)
+                  {
+# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE
+                    long double arg = a.arg[dp->arg_index].a.a_longdouble;
+
+                    if (isnanl (arg))
+                      {
+                        if (dp->conversion == 'A')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+                        DECL_LONG_DOUBLE_ROUNDING
+
+                        BEGIN_LONG_DOUBLE_ROUNDING ();
+
+                        if (signbit (arg)) /* arg < 0.0L or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0L && arg + arg == arg)
+                          {
+                            if (dp->conversion == 'A')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+                            int exponent;
+                            long double mantissa;
+
+                            if (arg > 0.0L)
+                              mantissa = printf_frexpl (arg, &exponent);
+                            else
+                              {
+                                exponent = 0;
+                                mantissa = 0.0L;
+                              }
+
+                            if (has_precision
+                                && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1)
+                              {
+                                /* Round the mantissa.  */
+                                long double tail = mantissa;
+                                size_t q;
+
+                                for (q = precision; ; q--)
+                                  {
+                                    int digit = (int) tail;
+                                    tail -= digit;
+                                    if (q == 0)
+                                      {
+                                        if (digit & 1 ? tail >= 0.5L : tail > 0.5L)
+                                          tail = 1 - tail;
+                                        else
+                                          tail = - tail;
+                                        break;
+                                      }
+                                    tail *= 16.0L;
+                                  }
+                                if (tail != 0.0L)
+                                  for (q = precision; q > 0; q--)
+                                    tail *= 0.0625L;
+                                mantissa += tail;
+                              }
+
+                            *p++ = '0';
+                            *p++ = dp->conversion - 'A' + 'X';
+                            pad_ptr = p;
+                            {
+                              int digit;
+
+                              digit = (int) mantissa;
+                              mantissa -= digit;
+                              *p++ = '0' + digit;
+                              if ((flags & FLAG_ALT)
+                                  || mantissa > 0.0L || precision > 0)
+                                {
+                                  *p++ = decimal_point_char ();
+                                  /* This loop terminates because we assume
+                                     that FLT_RADIX is a power of 2.  */
+                                  while (mantissa > 0.0L)
+                                    {
+                                      mantissa *= 16.0L;
+                                      digit = (int) mantissa;
+                                      mantissa -= digit;
+                                      *p++ = digit
+                                             + (digit < 10
+                                                ? '0'
+                                                : dp->conversion - 10);
+                                      if (precision > 0)
+                                        precision--;
+                                    }
+                                  while (precision > 0)
+                                    {
+                                      *p++ = '0';
+                                      precision--;
+                                    }
+                                }
+                              }
+                              *p++ = dp->conversion - 'A' + 'P';
+#  if WIDE_CHAR_VERSION
+                              {
+                                static const wchar_t decimal_format[] =
+                                  { '%', '+', 'd', '\0' };
+                                SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                              }
+                              while (*p != '\0')
+                                p++;
+#  else
+                              if (sizeof (DCHAR_T) == 1)
+                                {
+                                  sprintf ((char *) p, "%+d", exponent);
+                                  while (*p != '\0')
+                                    p++;
+                                }
+                              else
+                                {
+                                  char expbuf[6 + 1];
+                                  const char *ep;
+                                  sprintf (expbuf, "%+d", exponent);
+                                  for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                    p++;
+                                }
+#  endif
+                          }
+
+                        END_LONG_DOUBLE_ROUNDING ();
+                      }
+# else
+                    abort ();
+# endif
+                  }
+                else
+                  {
+# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE
+                    double arg = a.arg[dp->arg_index].a.a_double;
+
+                    if (isnand (arg))
+                      {
+                        if (dp->conversion == 'A')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+
+                        if (signbit (arg)) /* arg < 0.0 or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0 && arg + arg == arg)
+                          {
+                            if (dp->conversion == 'A')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+                            int exponent;
+                            double mantissa;
+
+                            if (arg > 0.0)
+                              mantissa = printf_frexp (arg, &exponent);
+                            else
+                              {
+                                exponent = 0;
+                                mantissa = 0.0;
+                              }
+
+                            if (has_precision
+                                && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1)
+                              {
+                                /* Round the mantissa.  */
+                                double tail = mantissa;
+                                size_t q;
+
+                                for (q = precision; ; q--)
+                                  {
+                                    int digit = (int) tail;
+                                    tail -= digit;
+                                    if (q == 0)
+                                      {
+                                        if (digit & 1 ? tail >= 0.5 : tail > 0.5)
+                                          tail = 1 - tail;
+                                        else
+                                          tail = - tail;
+                                        break;
+                                      }
+                                    tail *= 16.0;
+                                  }
+                                if (tail != 0.0)
+                                  for (q = precision; q > 0; q--)
+                                    tail *= 0.0625;
+                                mantissa += tail;
+                              }
+
+                            *p++ = '0';
+                            *p++ = dp->conversion - 'A' + 'X';
+                            pad_ptr = p;
+                            {
+                              int digit;
+
+                              digit = (int) mantissa;
+                              mantissa -= digit;
+                              *p++ = '0' + digit;
+                              if ((flags & FLAG_ALT)
+                                  || mantissa > 0.0 || precision > 0)
+                                {
+                                  *p++ = decimal_point_char ();
+                                  /* This loop terminates because we assume
+                                     that FLT_RADIX is a power of 2.  */
+                                  while (mantissa > 0.0)
+                                    {
+                                      mantissa *= 16.0;
+                                      digit = (int) mantissa;
+                                      mantissa -= digit;
+                                      *p++ = digit
+                                             + (digit < 10
+                                                ? '0'
+                                                : dp->conversion - 10);
+                                      if (precision > 0)
+                                        precision--;
+                                    }
+                                  while (precision > 0)
+                                    {
+                                      *p++ = '0';
+                                      precision--;
+                                    }
+                                }
+                              }
+                              *p++ = dp->conversion - 'A' + 'P';
+#  if WIDE_CHAR_VERSION
+                              {
+                                static const wchar_t decimal_format[] =
+                                  { '%', '+', 'd', '\0' };
+                                SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                              }
+                              while (*p != '\0')
+                                p++;
+#  else
+                              if (sizeof (DCHAR_T) == 1)
+                                {
+                                  sprintf ((char *) p, "%+d", exponent);
+                                  while (*p != '\0')
+                                    p++;
+                                }
+                              else
+                                {
+                                  char expbuf[6 + 1];
+                                  const char *ep;
+                                  sprintf (expbuf, "%+d", exponent);
+                                  for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                    p++;
+                                }
+#  endif
+                          }
+                      }
+# else
+                    abort ();
+# endif
+                  }
+                /* The generated string now extends from tmp to p, with the
+                   zero padding insertion point being at pad_ptr.  */
+                if (has_width && p - tmp < width)
+                  {
+                    size_t pad = width - (p - tmp);
+                    DCHAR_T *end = p + pad;
+
+                    if (flags & FLAG_LEFT)
+                      {
+                        /* Pad with spaces on the right.  */
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+                    else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                      {
+                        /* Pad with zeroes.  */
+                        DCHAR_T *q = end;
+
+                        while (p > pad_ptr)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = '0';
+                      }
+                    else
+                      {
+                        /* Pad with spaces on the left.  */
+                        DCHAR_T *q = end;
+
+                        while (p > tmp)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+
+                    p = end;
+                  }
+
+                {
+                  size_t count = p - tmp;
+
+                  if (count >= tmp_length)
+                    /* tmp_length was incorrectly calculated - fix the
+                       code above!  */
+                    abort ();
+
+                  /* Make room for the result.  */
+                  if (count >= allocated - length)
+                    {
+                      size_t n = xsum (length, count);
+
+                      ENSURE_ALLOCATION (n);
+                    }
+
+                  /* Append the result.  */
+                  memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+                  if (tmp != tmpbuf)
+                    free (tmp);
+                  length += count;
+                }
+              }
+#endif
+#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+            else if ((dp->conversion == 'f' || dp->conversion == 'F'
+                      || dp->conversion == 'e' || dp->conversion == 'E'
+                      || dp->conversion == 'g' || dp->conversion == 'G'
+                      || dp->conversion == 'a' || dp->conversion == 'A')
+                     && (0
+# if NEED_PRINTF_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_DOUBLE
+# elif NEED_PRINTF_INFINITE_DOUBLE
+                         || (a.arg[dp->arg_index].type == TYPE_DOUBLE
+                             /* The systems (mingw) which produce wrong output
+                                for Inf, -Inf, and NaN also do so for -0.0.
+                                Therefore we treat this case here as well.  */
+                             && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double))
+# endif
+# if NEED_PRINTF_LONG_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+# elif NEED_PRINTF_INFINITE_LONG_DOUBLE
+                         || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+                             /* Some systems produce wrong output for Inf,
+                                -Inf, and NaN.  Some systems in this category
+                                (IRIX 5.3) also do so for -0.0.  Therefore we
+                                treat this case here as well.  */
+                             && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble))
+# endif
+                        ))
+              {
+# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE)
+                arg_type type = a.arg[dp->arg_index].type;
+# endif
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+                size_t tmp_length;
+                DCHAR_T tmpbuf[700];
+                DCHAR_T *tmp;
+                DCHAR_T *pad_ptr;
+                DCHAR_T *p;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                /* POSIX specifies the default precision to be 6 for %f, %F,
+                   %e, %E, but not for %g, %G.  Implementations appear to use
+                   the same default precision also for %g, %G.  But for %a, %A,
+                   the default precision is 0.  */
+                if (!has_precision)
+                  if (!(dp->conversion == 'a' || dp->conversion == 'A'))
+                    precision = 6;
+
+                /* Allocate a temporary buffer of sufficient size.  */
+# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE
+                tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1);
+# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE
+                tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0);
+# elif NEED_PRINTF_LONG_DOUBLE
+                tmp_length = LDBL_DIG + 1;
+# elif NEED_PRINTF_DOUBLE
+                tmp_length = DBL_DIG + 1;
+# else
+                tmp_length = 0;
+# endif
+                if (tmp_length < precision)
+                  tmp_length = precision;
+# if NEED_PRINTF_LONG_DOUBLE
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                if (type == TYPE_LONGDOUBLE)
+#  endif
+                  if (dp->conversion == 'f' || dp->conversion == 'F')
+                    {
+                      long double arg = a.arg[dp->arg_index].a.a_longdouble;
+                      if (!(isnanl (arg) || arg + arg == arg))
+                        {
+                          /* arg is finite and nonzero.  */
+                          int exponent = floorlog10l (arg < 0 ? -arg : arg);
+                          if (exponent >= 0 && tmp_length < exponent + precision)
+                            tmp_length = exponent + precision;
+                        }
+                    }
+# endif
+# if NEED_PRINTF_DOUBLE
+#  if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
+                if (type == TYPE_DOUBLE)
+#  endif
+                  if (dp->conversion == 'f' || dp->conversion == 'F')
+                    {
+                      double arg = a.arg[dp->arg_index].a.a_double;
+                      if (!(isnand (arg) || arg + arg == arg))
+                        {
+                          /* arg is finite and nonzero.  */
+                          int exponent = floorlog10 (arg < 0 ? -arg : arg);
+                          if (exponent >= 0 && tmp_length < exponent + precision)
+                            tmp_length = exponent + precision;
+                        }
+                    }
+# endif
+                /* Account for sign, decimal point etc. */
+                tmp_length = xsum (tmp_length, 12);
+
+                if (tmp_length < width)
+                  tmp_length = width;
+
+                tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (DCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+
+                pad_ptr = NULL;
+                p = tmp;
+
+# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                if (type == TYPE_LONGDOUBLE)
+#  endif
+                  {
+                    long double arg = a.arg[dp->arg_index].a.a_longdouble;
+
+                    if (isnanl (arg))
+                      {
+                        if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+                        DECL_LONG_DOUBLE_ROUNDING
+
+                        BEGIN_LONG_DOUBLE_ROUNDING ();
+
+                        if (signbit (arg)) /* arg < 0.0L or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0L && arg + arg == arg)
+                          {
+                            if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+#  if NEED_PRINTF_LONG_DOUBLE
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                char *digits;
+                                size_t ndigits;
+
+                                digits =
+                                  scale10_round_decimal_long_double (arg, precision);
+                                if (digits == NULL)
+                                  {
+                                    END_LONG_DOUBLE_ROUNDING ();
+                                    goto out_of_memory;
+                                  }
+                                ndigits = strlen (digits);
+
+                                if (ndigits > precision)
+                                  do
+                                    {
+                                      --ndigits;
+                                      *p++ = digits[ndigits];
+                                    }
+                                  while (ndigits > precision);
+                                else
+                                  *p++ = '0';
+                                /* Here ndigits <= precision.  */
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > ndigits; precision--)
+                                      *p++ = '0';
+                                    while (ndigits > 0)
+                                      {
+                                        --ndigits;
+                                        *p++ = digits[ndigits];
+                                      }
+                                  }
+
+                                free (digits);
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                int exponent;
+
+                                if (arg == 0.0L)
+                                  {
+                                    exponent = 0;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        for (; precision > 0; precision--)
+                                          *p++ = '0';
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0L.  */
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+
+                                    exponent = floorlog10l (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)precision - exponent);
+                                        if (digits == NULL)
+                                          {
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision + 1)
+                                          break;
+                                        if (ndigits < precision
+                                            || ndigits > precision + 2)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits == precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision+1.  */
+                                    if (is_borderline (digits, precision))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)precision - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision + 1)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision+1.  */
+
+                                    *p++ = digits[--ndigits];
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > 0)
+                                          {
+                                            --ndigits;
+                                            *p++ = digits[ndigits];
+                                          }
+                                      }
+
+                                    free (digits);
+                                  }
+
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                {
+                                  static const wchar_t decimal_format[] =
+                                    { '%', '+', '.', '2', 'd', '\0' };
+                                  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                }
+                                while (*p != '\0')
+                                  p++;
+#   else
+                                if (sizeof (DCHAR_T) == 1)
+                                  {
+                                    sprintf ((char *) p, "%+.2d", exponent);
+                                    while (*p != '\0')
+                                      p++;
+                                  }
+                                else
+                                  {
+                                    char expbuf[6 + 1];
+                                    const char *ep;
+                                    sprintf (expbuf, "%+.2d", exponent);
+                                    for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                      p++;
+                                  }
+#   endif
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                if (precision == 0)
+                                  precision = 1;
+                                /* precision >= 1.  */
+
+                                if (arg == 0.0L)
+                                  /* The exponent is 0, >= -4, < precision.
+                                     Use fixed-point notation.  */
+                                  {
+                                    size_t ndigits = precision;
+                                    /* Number of trailing zeroes that have to be
+                                       dropped.  */
+                                    size_t nzeroes =
+                                      (flags & FLAG_ALT ? 0 : precision - 1);
+
+                                    --ndigits;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > nzeroes)
+                                          {
+                                            --ndigits;
+                                            *p++ = '0';
+                                          }
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0L.  */
+                                    int exponent;
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+                                    size_t nzeroes;
+
+                                    exponent = floorlog10l (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)(precision - 1) - exponent);
+                                        if (digits == NULL)
+                                          {
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision)
+                                          break;
+                                        if (ndigits < precision - 1
+                                            || ndigits > precision + 1)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits < precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision.  */
+                                    if (is_borderline (digits, precision - 1))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)(precision - 1) - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision.  */
+
+                                    /* Determine the number of trailing zeroes
+                                       that have to be dropped.  */
+                                    nzeroes = 0;
+                                    if ((flags & FLAG_ALT) == 0)
+                                      while (nzeroes < ndigits
+                                             && digits[nzeroes] == '0')
+                                        nzeroes++;
+
+                                    /* The exponent is now determined.  */
+                                    if (exponent >= -4
+                                        && exponent < (long)precision)
+                                      {
+                                        /* Fixed-point notation:
+                                           max(exponent,0)+1 digits, then the
+                                           decimal point, then the remaining
+                                           digits without trailing zeroes.  */
+                                        if (exponent >= 0)
+                                          {
+                                            size_t count = exponent + 1;
+                                            /* Note: count <= precision = ndigits.  */
+                                            for (; count > 0; count--)
+                                              *p++ = digits[--ndigits];
+                                            if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                              {
+                                                *p++ = decimal_point_char ();
+                                                while (ndigits > nzeroes)
+                                                  {
+                                                    --ndigits;
+                                                    *p++ = digits[ndigits];
+                                                  }
+                                              }
+                                          }
+                                        else
+                                          {
+                                            size_t count = -exponent - 1;
+                                            *p++ = '0';
+                                            *p++ = decimal_point_char ();
+                                            for (; count > 0; count--)
+                                              *p++ = '0';
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                      }
+                                    else
+                                      {
+                                        /* Exponential notation.  */
+                                        *p++ = digits[--ndigits];
+                                        if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                          {
+                                            *p++ = decimal_point_char ();
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                        *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                        {
+                                          static const wchar_t decimal_format[] =
+                                            { '%', '+', '.', '2', 'd', '\0' };
+                                          SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                        }
+                                        while (*p != '\0')
+                                          p++;
+#   else
+                                        if (sizeof (DCHAR_T) == 1)
+                                          {
+                                            sprintf ((char *) p, "%+.2d", exponent);
+                                            while (*p != '\0')
+                                              p++;
+                                          }
+                                        else
+                                          {
+                                            char expbuf[6 + 1];
+                                            const char *ep;
+                                            sprintf (expbuf, "%+.2d", exponent);
+                                            for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                              p++;
+                                          }
+#   endif
+                                      }
+
+                                    free (digits);
+                                  }
+                              }
+                            else
+                              abort ();
+#  else
+                            /* arg is finite.  */
+                            if (!(arg == 0.0L))
+                              abort ();
+
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+                                *p++ = '+';
+                                *p++ = '0';
+                                *p++ = '0';
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                *p++ = '0';
+                                if (flags & FLAG_ALT)
+                                  {
+                                    size_t ndigits =
+                                      (precision > 0 ? precision - 1 : 0);
+                                    *p++ = decimal_point_char ();
+                                    for (; ndigits > 0; --ndigits)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'a' || dp->conversion == 'A')
+                              {
+                                *p++ = '0';
+                                *p++ = dp->conversion - 'A' + 'X';
+                                pad_ptr = p;
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion - 'A' + 'P';
+                                *p++ = '+';
+                                *p++ = '0';
+                              }
+                            else
+                              abort ();
+#  endif
+                          }
+
+                        END_LONG_DOUBLE_ROUNDING ();
+                      }
+                  }
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                else
+#  endif
+# endif
+# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                  {
+                    double arg = a.arg[dp->arg_index].a.a_double;
+
+                    if (isnand (arg))
+                      {
+                        if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+
+                        if (signbit (arg)) /* arg < 0.0 or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0 && arg + arg == arg)
+                          {
+                            if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+#  if NEED_PRINTF_DOUBLE
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                char *digits;
+                                size_t ndigits;
+
+                                digits =
+                                  scale10_round_decimal_double (arg, precision);
+                                if (digits == NULL)
+                                  goto out_of_memory;
+                                ndigits = strlen (digits);
+
+                                if (ndigits > precision)
+                                  do
+                                    {
+                                      --ndigits;
+                                      *p++ = digits[ndigits];
+                                    }
+                                  while (ndigits > precision);
+                                else
+                                  *p++ = '0';
+                                /* Here ndigits <= precision.  */
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > ndigits; precision--)
+                                      *p++ = '0';
+                                    while (ndigits > 0)
+                                      {
+                                        --ndigits;
+                                        *p++ = digits[ndigits];
+                                      }
+                                  }
+
+                                free (digits);
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                int exponent;
+
+                                if (arg == 0.0)
+                                  {
+                                    exponent = 0;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        for (; precision > 0; precision--)
+                                          *p++ = '0';
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0.  */
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+
+                                    exponent = floorlog10 (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)precision - exponent);
+                                        if (digits == NULL)
+                                          goto out_of_memory;
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision + 1)
+                                          break;
+                                        if (ndigits < precision
+                                            || ndigits > precision + 2)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits == precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision+1.  */
+                                    if (is_borderline (digits, precision))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)precision - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision + 1)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision+1.  */
+
+                                    *p++ = digits[--ndigits];
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > 0)
+                                          {
+                                            --ndigits;
+                                            *p++ = digits[ndigits];
+                                          }
+                                      }
+
+                                    free (digits);
+                                  }
+
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                {
+                                  static const wchar_t decimal_format[] =
+                                    /* Produce the same number of exponent digits
+                                       as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                    { '%', '+', '.', '3', 'd', '\0' };
+#    else
+                                    { '%', '+', '.', '2', 'd', '\0' };
+#    endif
+                                  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                }
+                                while (*p != '\0')
+                                  p++;
+#   else
+                                {
+                                  static const char decimal_format[] =
+                                    /* Produce the same number of exponent digits
+                                       as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                    "%+.3d";
+#    else
+                                    "%+.2d";
+#    endif
+                                  if (sizeof (DCHAR_T) == 1)
+                                    {
+                                      sprintf ((char *) p, decimal_format, exponent);
+                                      while (*p != '\0')
+                                        p++;
+                                    }
+                                  else
+                                    {
+                                      char expbuf[6 + 1];
+                                      const char *ep;
+                                      sprintf (expbuf, decimal_format, exponent);
+                                      for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                        p++;
+                                    }
+                                }
+#   endif
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                if (precision == 0)
+                                  precision = 1;
+                                /* precision >= 1.  */
+
+                                if (arg == 0.0)
+                                  /* The exponent is 0, >= -4, < precision.
+                                     Use fixed-point notation.  */
+                                  {
+                                    size_t ndigits = precision;
+                                    /* Number of trailing zeroes that have to be
+                                       dropped.  */
+                                    size_t nzeroes =
+                                      (flags & FLAG_ALT ? 0 : precision - 1);
+
+                                    --ndigits;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > nzeroes)
+                                          {
+                                            --ndigits;
+                                            *p++ = '0';
+                                          }
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0.  */
+                                    int exponent;
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+                                    size_t nzeroes;
+
+                                    exponent = floorlog10 (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)(precision - 1) - exponent);
+                                        if (digits == NULL)
+                                          goto out_of_memory;
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision)
+                                          break;
+                                        if (ndigits < precision - 1
+                                            || ndigits > precision + 1)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits < precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision.  */
+                                    if (is_borderline (digits, precision - 1))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)(precision - 1) - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision.  */
+
+                                    /* Determine the number of trailing zeroes
+                                       that have to be dropped.  */
+                                    nzeroes = 0;
+                                    if ((flags & FLAG_ALT) == 0)
+                                      while (nzeroes < ndigits
+                                             && digits[nzeroes] == '0')
+                                        nzeroes++;
+
+                                    /* The exponent is now determined.  */
+                                    if (exponent >= -4
+                                        && exponent < (long)precision)
+                                      {
+                                        /* Fixed-point notation:
+                                           max(exponent,0)+1 digits, then the
+                                           decimal point, then the remaining
+                                           digits without trailing zeroes.  */
+                                        if (exponent >= 0)
+                                          {
+                                            size_t count = exponent + 1;
+                                            /* Note: count <= precision = ndigits.  */
+                                            for (; count > 0; count--)
+                                              *p++ = digits[--ndigits];
+                                            if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                              {
+                                                *p++ = decimal_point_char ();
+                                                while (ndigits > nzeroes)
+                                                  {
+                                                    --ndigits;
+                                                    *p++ = digits[ndigits];
+                                                  }
+                                              }
+                                          }
+                                        else
+                                          {
+                                            size_t count = -exponent - 1;
+                                            *p++ = '0';
+                                            *p++ = decimal_point_char ();
+                                            for (; count > 0; count--)
+                                              *p++ = '0';
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                      }
+                                    else
+                                      {
+                                        /* Exponential notation.  */
+                                        *p++ = digits[--ndigits];
+                                        if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                          {
+                                            *p++ = decimal_point_char ();
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                        *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                        {
+                                          static const wchar_t decimal_format[] =
+                                            /* Produce the same number of exponent digits
+                                               as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                            { '%', '+', '.', '3', 'd', '\0' };
+#    else
+                                            { '%', '+', '.', '2', 'd', '\0' };
+#    endif
+                                          SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                        }
+                                        while (*p != '\0')
+                                          p++;
+#   else
+                                        {
+                                          static const char decimal_format[] =
+                                            /* Produce the same number of exponent digits
+                                               as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                            "%+.3d";
+#    else
+                                            "%+.2d";
+#    endif
+                                          if (sizeof (DCHAR_T) == 1)
+                                            {
+                                              sprintf ((char *) p, decimal_format, exponent);
+                                              while (*p != '\0')
+                                                p++;
+                                            }
+                                          else
+                                            {
+                                              char expbuf[6 + 1];
+                                              const char *ep;
+                                              sprintf (expbuf, decimal_format, exponent);
+                                              for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                                p++;
+                                            }
+                                        }
+#   endif
+                                      }
+
+                                    free (digits);
+                                  }
+                              }
+                            else
+                              abort ();
+#  else
+                            /* arg is finite.  */
+                            if (!(arg == 0.0))
+                              abort ();
+
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+                                *p++ = '+';
+                                /* Produce the same number of exponent digits as
+                                   the native printf implementation.  */
+#   if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                *p++ = '0';
+#   endif
+                                *p++ = '0';
+                                *p++ = '0';
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                *p++ = '0';
+                                if (flags & FLAG_ALT)
+                                  {
+                                    size_t ndigits =
+                                      (precision > 0 ? precision - 1 : 0);
+                                    *p++ = decimal_point_char ();
+                                    for (; ndigits > 0; --ndigits)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else
+                              abort ();
+#  endif
+                          }
+                      }
+                  }
+# endif
+
+                /* The generated string now extends from tmp to p, with the
+                   zero padding insertion point being at pad_ptr.  */
+                if (has_width && p - tmp < width)
+                  {
+                    size_t pad = width - (p - tmp);
+                    DCHAR_T *end = p + pad;
+
+                    if (flags & FLAG_LEFT)
+                      {
+                        /* Pad with spaces on the right.  */
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+                    else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                      {
+                        /* Pad with zeroes.  */
+                        DCHAR_T *q = end;
+
+                        while (p > pad_ptr)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = '0';
+                      }
+                    else
+                      {
+                        /* Pad with spaces on the left.  */
+                        DCHAR_T *q = end;
+
+                        while (p > tmp)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+
+                    p = end;
+                  }
+
+                {
+                  size_t count = p - tmp;
+
+                  if (count >= tmp_length)
+                    /* tmp_length was incorrectly calculated - fix the
+                       code above!  */
+                    abort ();
+
+                  /* Make room for the result.  */
+                  if (count >= allocated - length)
+                    {
+                      size_t n = xsum (length, count);
+
+                      ENSURE_ALLOCATION (n);
+                    }
+
+                  /* Append the result.  */
+                  memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+                  if (tmp != tmpbuf)
+                    free (tmp);
+                  length += count;
+                }
+              }
+#endif
+            else
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                int has_width;
+                size_t width;
+#endif
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION
+                int has_precision;
+                size_t precision;
+#endif
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                int prec_ourselves;
+#else
+#               define prec_ourselves 0
+#endif
+#if NEED_PRINTF_FLAG_LEFTADJUST
+#               define pad_ourselves 1
+#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                int pad_ourselves;
+#else
+#               define pad_ourselves 0
+#endif
+                TCHAR_T *fbp;
+                unsigned int prefix_count;
+                int prefixes[2] IF_LINT (= { 0 });
+                int orig_errno;
+#if !USE_SNPRINTF
+                size_t tmp_length;
+                TCHAR_T tmpbuf[700];
+                TCHAR_T *tmp;
+#endif
+
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+#endif
+
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION
+                has_precision = 0;
+                precision = 6;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+#endif
+
+                /* Decide whether to handle the precision ourselves.  */
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                switch (dp->conversion)
+                  {
+                  case 'd': case 'i': case 'u':
+                  case 'o':
+                  case 'x': case 'X': case 'p':
+                    prec_ourselves = has_precision && (precision > 0);
+                    break;
+                  default:
+                    prec_ourselves = 0;
+                    break;
+                  }
+#endif
+
+                /* Decide whether to perform the padding ourselves.  */
+#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION)
+                switch (dp->conversion)
+                  {
+# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
+                  /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need
+                     to perform the padding after this conversion.  Functions
+                     with unistdio extensions perform the padding based on
+                     character count rather than element count.  */
+                  case 'c': case 's':
+# endif
+# if NEED_PRINTF_FLAG_ZERO
+                  case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+                  case 'a': case 'A':
+# endif
+                    pad_ourselves = 1;
+                    break;
+                  default:
+                    pad_ourselves = prec_ourselves;
+                    break;
+                  }
+#endif
+
+#if !USE_SNPRINTF
+                /* Allocate a temporary buffer of sufficient size for calling
+                   sprintf.  */
+                tmp_length =
+                  MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type,
+                                   flags, width, has_precision, precision,
+                                   pad_ourselves);
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (TCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+#endif
+
+                /* Construct the format string for calling snprintf or
+                   sprintf.  */
+                fbp = buf;
+                *fbp++ = '%';
+#if NEED_PRINTF_FLAG_GROUPING
+                /* The underlying implementation doesn't support the ' flag.
+                   Produce no grouping characters in this case; this is
+                   acceptable because the grouping is locale dependent.  */
+#else
+                if (flags & FLAG_GROUP)
+                  *fbp++ = '\'';
+#endif
+                if (flags & FLAG_LEFT)
+                  *fbp++ = '-';
+                if (flags & FLAG_SHOWSIGN)
+                  *fbp++ = '+';
+                if (flags & FLAG_SPACE)
+                  *fbp++ = ' ';
+                if (flags & FLAG_ALT)
+                  *fbp++ = '#';
+#if __GLIBC__ >= 2 && !defined __UCLIBC__
+                if (flags & FLAG_LOCALIZED)
+                  *fbp++ = 'I';
+#endif
+                if (!pad_ourselves)
+                  {
+                    if (flags & FLAG_ZERO)
+                      *fbp++ = '0';
+                    if (dp->width_start != dp->width_end)
+                      {
+                        size_t n = dp->width_end - dp->width_start;
+                        /* The width specification is known to consist only
+                           of standard ASCII characters.  */
+                        if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
+                          {
+                            memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T));
+                            fbp += n;
+                          }
+                        else
+                          {
+                            const FCHAR_T *mp = dp->width_start;
+                            do
+                              *fbp++ = (unsigned char) *mp++;
+                            while (--n > 0);
+                          }
+                      }
+                  }
+                if (!prec_ourselves)
+                  {
+                    if (dp->precision_start != dp->precision_end)
+                      {
+                        size_t n = dp->precision_end - dp->precision_start;
+                        /* The precision specification is known to consist only
+                           of standard ASCII characters.  */
+                        if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
+                          {
+                            memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T));
+                            fbp += n;
+                          }
+                        else
+                          {
+                            const FCHAR_T *mp = dp->precision_start;
+                            do
+                              *fbp++ = (unsigned char) *mp++;
+                            while (--n > 0);
+                          }
+                      }
+                  }
+
+                switch (type)
+                  {
+#if HAVE_LONG_LONG_INT
+                  case TYPE_LONGLONGINT:
+                  case TYPE_ULONGLONGINT:
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                    *fbp++ = 'I';
+                    *fbp++ = '6';
+                    *fbp++ = '4';
+                    break;
+# else
+                    *fbp++ = 'l';
+                    /*FALLTHROUGH*/
+# endif
+#endif
+                  case TYPE_LONGINT:
+                  case TYPE_ULONGINT:
+#if HAVE_WINT_T
+                  case TYPE_WIDE_CHAR:
+#endif
+#if HAVE_WCHAR_T
+                  case TYPE_WIDE_STRING:
+#endif
+                    *fbp++ = 'l';
+                    break;
+                  case TYPE_LONGDOUBLE:
+                    *fbp++ = 'L';
+                    break;
+                  default:
+                    break;
+                  }
+#if NEED_PRINTF_DIRECTIVE_F
+                if (dp->conversion == 'F')
+                  *fbp = 'f';
+                else
+#endif
+                  *fbp = dp->conversion;
+#if USE_SNPRINTF
+# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+                fbp[1] = '%';
+                fbp[2] = 'n';
+                fbp[3] = '\0';
+# else
+                /* On glibc2 systems from glibc >= 2.3 - probably also older
+                   ones - we know that snprintf's return value conforms to
+                   ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and
+                   gl_SNPRINTF_TRUNCATION_C99 pass.
+                   Therefore we can avoid using %n in this situation.
+                   On glibc2 systems from 2004-10-18 or newer, the use of %n
+                   in format strings in writable memory may crash the program
+                   (if compiled with _FORTIFY_SOURCE=2), so we should avoid it
+                   in this situation.  */
+                /* On native Windows systems (such as mingw), we can avoid using
+                   %n because:
+                     - Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
+                       snprintf does not write more than the specified number
+                       of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes
+                       '4', '5', '6' into buf, not '4', '5', '\0'.)
+                     - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf
+                       allows us to recognize the case of an insufficient
+                       buffer size: it returns -1 in this case.
+                   On native Windows systems (such as mingw) where the OS is
+                   Windows Vista, the use of %n in format strings by default
+                   crashes the program. See
+                     <http://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and
+                     <http://msdn2.microsoft.com/en-us/library/ms175782(VS.80).aspx>
+                   So we should avoid %n in this situation.  */
+                fbp[1] = '\0';
+# endif
+#else
+                fbp[1] = '\0';
+#endif
+
+                /* Construct the arguments for calling snprintf or sprintf.  */
+                prefix_count = 0;
+                if (!pad_ourselves && dp->width_arg_index != ARG_NONE)
+                  {
+                    if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                      abort ();
+                    prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
+                  }
+                if (!prec_ourselves && dp->precision_arg_index != ARG_NONE)
+                  {
+                    if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                      abort ();
+                    prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
+                  }
+
+#if USE_SNPRINTF
+                /* The SNPRINTF result is appended after result[0..length].
+                   The latter is an array of DCHAR_T; SNPRINTF appends an
+                   array of TCHAR_T to it.  This is possible because
+                   sizeof (TCHAR_T) divides sizeof (DCHAR_T) and
+                   alignof (TCHAR_T) <= alignof (DCHAR_T).  */
+# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T))
+                /* Ensure that maxlen below will be >= 2.  Needed on BeOS,
+                   where an snprintf() with maxlen==1 acts like sprintf().  */
+                ENSURE_ALLOCATION (xsum (length,
+                                         (2 + TCHARS_PER_DCHAR - 1)
+                                         / TCHARS_PER_DCHAR));
+                /* Prepare checking whether snprintf returns the count
+                   via %n.  */
+                *(TCHAR_T *) (result + length) = '\0';
+#endif
+
+                orig_errno = errno;
+
+                for (;;)
+                  {
+                    int count = -1;
+
+#if USE_SNPRINTF
+                    int retcount = 0;
+                    size_t maxlen = allocated - length;
+                    /* SNPRINTF can fail if its second argument is
+                       > INT_MAX.  */
+                    if (maxlen > INT_MAX / TCHARS_PER_DCHAR)
+                      maxlen = INT_MAX / TCHARS_PER_DCHAR;
+                    maxlen = maxlen * TCHARS_PER_DCHAR;
+# define SNPRINTF_BUF(arg) \
+                    switch (prefix_count)                                   \
+                      {                                                     \
+                      case 0:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             arg, &count);                  \
+                        break;                                              \
+                      case 1:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             prefixes[0], arg, &count);     \
+                        break;                                              \
+                      case 2:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             prefixes[0], prefixes[1], arg, \
+                                             &count);                       \
+                        break;                                              \
+                      default:                                              \
+                        abort ();                                           \
+                      }
+#else
+# define SNPRINTF_BUF(arg) \
+                    switch (prefix_count)                                   \
+                      {                                                     \
+                      case 0:                                               \
+                        count = sprintf (tmp, buf, arg);                    \
+                        break;                                              \
+                      case 1:                                               \
+                        count = sprintf (tmp, buf, prefixes[0], arg);       \
+                        break;                                              \
+                      case 2:                                               \
+                        count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
+                                         arg);                              \
+                        break;                                              \
+                      default:                                              \
+                        abort ();                                           \
+                      }
+#endif
+
+                    errno = 0;
+                    switch (type)
+                      {
+                      case TYPE_SCHAR:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_schar;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_UCHAR:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_SHORT:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_short;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_USHORT:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_INT:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_int;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_UINT:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_uint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_LONGINT:
+                        {
+                          long int arg = a.arg[dp->arg_index].a.a_longint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_ULONGINT:
+                        {
+                          unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_LONG_LONG_INT
+                      case TYPE_LONGLONGINT:
+                        {
+                          long long int arg = a.arg[dp->arg_index].a.a_longlongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_ULONGLONGINT:
+                        {
+                          unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_DOUBLE:
+                        {
+                          double arg = a.arg[dp->arg_index].a.a_double;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_LONGDOUBLE:
+                        {
+                          long double arg = a.arg[dp->arg_index].a.a_longdouble;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_CHAR:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_char;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_WINT_T
+                      case TYPE_WIDE_CHAR:
+                        {
+                          wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_STRING:
+                        {
+                          const char *arg = a.arg[dp->arg_index].a.a_string;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_WCHAR_T
+                      case TYPE_WIDE_STRING:
+                        {
+                          const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_POINTER:
+                        {
+                          void *arg = a.arg[dp->arg_index].a.a_pointer;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      default:
+                        abort ();
+                      }
+
+#if USE_SNPRINTF
+                    /* Portability: Not all implementations of snprintf()
+                       are ISO C 99 compliant.  Determine the number of
+                       bytes that snprintf() has produced or would have
+                       produced.  */
+                    if (count >= 0)
+                      {
+                        /* Verify that snprintf() has NUL-terminated its
+                           result.  */
+                        if (count < maxlen
+                            && ((TCHAR_T *) (result + length)) [count] != '\0')
+                          abort ();
+                        /* Portability hack.  */
+                        if (retcount > count)
+                          count = retcount;
+                      }
+                    else
+                      {
+                        /* snprintf() doesn't understand the '%n'
+                           directive.  */
+                        if (fbp[1] != '\0')
+                          {
+                            /* Don't use the '%n' directive; instead, look
+                               at the snprintf() return value.  */
+                            fbp[1] = '\0';
+                            continue;
+                          }
+                        else
+                          {
+                            /* Look at the snprintf() return value.  */
+                            if (retcount < 0)
+                              {
+# if !HAVE_SNPRINTF_RETVAL_C99
+                                /* HP-UX 10.20 snprintf() is doubly deficient:
+                                   It doesn't understand the '%n' directive,
+                                   *and* it returns -1 (rather than the length
+                                   that would have been required) when the
+                                   buffer is too small.
+                                   But a failure at this point can also come
+                                   from other reasons than a too small buffer,
+                                   such as an invalid wide string argument to
+                                   the %ls directive, or possibly an invalid
+                                   floating-point argument.  */
+                                size_t tmp_length =
+                                  MAX_ROOM_NEEDED (&a, dp->arg_index,
+                                                   dp->conversion, type, flags,
+                                                   width, has_precision,
+                                                   precision, pad_ourselves);
+
+                                if (maxlen < tmp_length)
+                                  {
+                                    /* Make more room.  But try to do through
+                                       this reallocation only once.  */
+                                    size_t bigger_need =
+                                      xsum (length,
+                                            xsum (tmp_length,
+                                                  TCHARS_PER_DCHAR - 1)
+                                            / TCHARS_PER_DCHAR);
+                                    /* And always grow proportionally.
+                                       (There may be several arguments, each
+                                       needing a little more room than the
+                                       previous one.)  */
+                                    size_t bigger_need2 =
+                                      xsum (xtimes (allocated, 2), 12);
+                                    if (bigger_need < bigger_need2)
+                                      bigger_need = bigger_need2;
+                                    ENSURE_ALLOCATION (bigger_need);
+                                    continue;
+                                  }
+# endif
+                              }
+                            else
+                              count = retcount;
+                          }
+                      }
+#endif
+
+                    /* Attempt to handle failure.  */
+                    if (count < 0)
+                      {
+                        /* SNPRINTF or sprintf failed.  Save and use the errno
+                           that it has set, if any.  */
+                        int saved_errno = errno;
+
+                        if (!(result == resultbuf || result == NULL))
+                          free (result);
+                        if (buf_malloced != NULL)
+                          free (buf_malloced);
+                        CLEANUP ();
+                        errno =
+                          (saved_errno != 0
+                           ? saved_errno
+                           : (dp->conversion == 'c' || dp->conversion == 's'
+                              ? EILSEQ
+                              : EINVAL));
+                        return NULL;
+                      }
+
+#if USE_SNPRINTF
+                    /* Handle overflow of the allocated buffer.
+                       If such an overflow occurs, a C99 compliant snprintf()
+                       returns a count >= maxlen.  However, a non-compliant
+                       snprintf() function returns only count = maxlen - 1.  To
+                       cover both cases, test whether count >= maxlen - 1.  */
+                    if ((unsigned int) count + 1 >= maxlen)
+                      {
+                        /* If maxlen already has attained its allowed maximum,
+                           allocating more memory will not increase maxlen.
+                           Instead of looping, bail out.  */
+                        if (maxlen == INT_MAX / TCHARS_PER_DCHAR)
+                          goto overflow;
+                        else
+                          {
+                            /* Need at least (count + 1) * sizeof (TCHAR_T)
+                               bytes.  (The +1 is for the trailing NUL.)
+                               But ask for (count + 2) * sizeof (TCHAR_T)
+                               bytes, so that in the next round, we likely get
+                                 maxlen > (unsigned int) count + 1
+                               and so we don't get here again.
+                               And allocate proportionally, to avoid looping
+                               eternally if snprintf() reports a too small
+                               count.  */
+                            size_t n =
+                              xmax (xsum (length,
+                                          ((unsigned int) count + 2
+                                           + TCHARS_PER_DCHAR - 1)
+                                          / TCHARS_PER_DCHAR),
+                                    xtimes (allocated, 2));
+
+                            ENSURE_ALLOCATION (n);
+                            continue;
+                          }
+                      }
+#endif
+
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                    if (prec_ourselves)
+                      {
+                        /* Handle the precision.  */
+                        TCHAR_T *prec_ptr =
+# if USE_SNPRINTF
+                          (TCHAR_T *) (result + length);
+# else
+                          tmp;
+# endif
+                        size_t prefix_count;
+                        size_t move;
+
+                        prefix_count = 0;
+                        /* Put the additional zeroes after the sign.  */
+                        if (count >= 1
+                            && (*prec_ptr == '-' || *prec_ptr == '+'
+                                || *prec_ptr == ' '))
+                          prefix_count = 1;
+                        /* Put the additional zeroes after the 0x prefix if
+                           (flags & FLAG_ALT) || (dp->conversion == 'p').  */
+                        else if (count >= 2
+                                 && prec_ptr[0] == '0'
+                                 && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X'))
+                          prefix_count = 2;
+
+                        move = count - prefix_count;
+                        if (precision > move)
+                          {
+                            /* Insert zeroes.  */
+                            size_t insert = precision - move;
+                            TCHAR_T *prec_end;
+
+# if USE_SNPRINTF
+                            size_t n =
+                              xsum (length,
+                                    (count + insert + TCHARS_PER_DCHAR - 1)
+                                    / TCHARS_PER_DCHAR);
+                            length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
+                            ENSURE_ALLOCATION (n);
+                            length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
+                            prec_ptr = (TCHAR_T *) (result + length);
+# endif
+
+                            prec_end = prec_ptr + count;
+                            prec_ptr += prefix_count;
+
+                            while (prec_end > prec_ptr)
+                              {
+                                prec_end--;
+                                prec_end[insert] = prec_end[0];
+                              }
+
+                            prec_end += insert;
+                            do
+                              *--prec_end = '0';
+                            while (prec_end > prec_ptr);
+
+                            count += insert;
+                          }
+                      }
+#endif
+
+#if !USE_SNPRINTF
+                    if (count >= tmp_length)
+                      /* tmp_length was incorrectly calculated - fix the
+                         code above!  */
+                      abort ();
+#endif
+
+#if !DCHAR_IS_TCHAR
+                    /* Convert from TCHAR_T[] to DCHAR_T[].  */
+                    if (dp->conversion == 'c' || dp->conversion == 's')
+                      {
+                        /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING
+                           TYPE_WIDE_STRING.
+                           The result string is not certainly ASCII.  */
+                        const TCHAR_T *tmpsrc;
+                        DCHAR_T *tmpdst;
+                        size_t tmpdst_len;
+                        /* This code assumes that TCHAR_T is 'char'.  */
+                        verify (sizeof (TCHAR_T) == 1);
+# if USE_SNPRINTF
+                        tmpsrc = (TCHAR_T *) (result + length);
+# else
+                        tmpsrc = tmp;
+# endif
+                        tmpdst =
+                          DCHAR_CONV_FROM_ENCODING (locale_charset (),
+                                                    iconveh_question_mark,
+                                                    tmpsrc, count,
+                                                    NULL,
+                                                    NULL, &tmpdst_len);
+                        if (tmpdst == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        ENSURE_ALLOCATION (xsum (length, tmpdst_len));
+                        DCHAR_CPY (result + length, tmpdst, tmpdst_len);
+                        free (tmpdst);
+                        count = tmpdst_len;
+                      }
+                    else
+                      {
+                        /* The result string is ASCII.
+                           Simple 1:1 conversion.  */
+# if USE_SNPRINTF
+                        /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a
+                           no-op conversion, in-place on the array starting
+                           at (result + length).  */
+                        if (sizeof (DCHAR_T) != sizeof (TCHAR_T))
+# endif
+                          {
+                            const TCHAR_T *tmpsrc;
+                            DCHAR_T *tmpdst;
+                            size_t n;
+
+# if USE_SNPRINTF
+                            if (result == resultbuf)
+                              {
+                                tmpsrc = (TCHAR_T *) (result + length);
+                                /* ENSURE_ALLOCATION will not move tmpsrc
+                                   (because it's part of resultbuf).  */
+                                ENSURE_ALLOCATION (xsum (length, count));
+                              }
+                            else
+                              {
+                                /* ENSURE_ALLOCATION will move the array
+                                   (because it uses realloc().  */
+                                ENSURE_ALLOCATION (xsum (length, count));
+                                tmpsrc = (TCHAR_T *) (result + length);
+                              }
+# else
+                            tmpsrc = tmp;
+                            ENSURE_ALLOCATION (xsum (length, count));
+# endif
+                            tmpdst = result + length;
+                            /* Copy backwards, because of overlapping.  */
+                            tmpsrc += count;
+                            tmpdst += count;
+                            for (n = count; n > 0; n--)
+                              *--tmpdst = (unsigned char) *--tmpsrc;
+                          }
+                      }
+#endif
+
+#if DCHAR_IS_TCHAR && !USE_SNPRINTF
+                    /* Make room for the result.  */
+                    if (count > allocated - length)
+                      {
+                        /* Need at least count elements.  But allocate
+                           proportionally.  */
+                        size_t n =
+                          xmax (xsum (length, count), xtimes (allocated, 2));
+
+                        ENSURE_ALLOCATION (n);
+                      }
+#endif
+
+                    /* Here count <= allocated - length.  */
+
+                    /* Perform padding.  */
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                    if (pad_ourselves && has_width)
+                      {
+                        size_t w;
+# if ENABLE_UNISTDIO
+                        /* Outside POSIX, it's preferable to compare the width
+                           against the number of _characters_ of the converted
+                           value.  */
+                        w = DCHAR_MBSNLEN (result + length, count);
+# else
+                        /* The width is compared against the number of _bytes_
+                           of the converted value, says POSIX.  */
+                        w = count;
+# endif
+                        if (w < width)
+                          {
+                            size_t pad = width - w;
+
+                            /* Make room for the result.  */
+                            if (xsum (count, pad) > allocated - length)
+                              {
+                                /* Need at least count + pad elements.  But
+                                   allocate proportionally.  */
+                                size_t n =
+                                  xmax (xsum3 (length, count, pad),
+                                        xtimes (allocated, 2));
+
+# if USE_SNPRINTF
+                                length += count;
+                                ENSURE_ALLOCATION (n);
+                                length -= count;
+# else
+                                ENSURE_ALLOCATION (n);
+# endif
+                              }
+                            /* Here count + pad <= allocated - length.  */
+
+                            {
+# if !DCHAR_IS_TCHAR || USE_SNPRINTF
+                              DCHAR_T * const rp = result + length;
+# else
+                              DCHAR_T * const rp = tmp;
+# endif
+                              DCHAR_T *p = rp + count;
+                              DCHAR_T *end = p + pad;
+                              DCHAR_T *pad_ptr;
+# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
+                              if (dp->conversion == 'c'
+                                  || dp->conversion == 's')
+                                /* No zero-padding for string directives.  */
+                                pad_ptr = NULL;
+                              else
+# endif
+                                {
+                                  pad_ptr = (*rp == '-' ? rp + 1 : rp);
+                                  /* No zero-padding of "inf" and "nan".  */
+                                  if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z')
+                                      || (*pad_ptr >= 'a' && *pad_ptr <= 'z'))
+                                    pad_ptr = NULL;
+                                }
+                              /* The generated string now extends from rp to p,
+                                 with the zero padding insertion point being at
+                                 pad_ptr.  */
+
+                              count = count + pad; /* = end - rp */
+
+                              if (flags & FLAG_LEFT)
+                                {
+                                  /* Pad with spaces on the right.  */
+                                  for (; pad > 0; pad--)
+                                    *p++ = ' ';
+                                }
+                              else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                                {
+                                  /* Pad with zeroes.  */
+                                  DCHAR_T *q = end;
+
+                                  while (p > pad_ptr)
+                                    *--q = *--p;
+                                  for (; pad > 0; pad--)
+                                    *p++ = '0';
+                                }
+                              else
+                                {
+                                  /* Pad with spaces on the left.  */
+                                  DCHAR_T *q = end;
+
+                                  while (p > rp)
+                                    *--q = *--p;
+                                  for (; pad > 0; pad--)
+                                    *p++ = ' ';
+                                }
+                            }
+                          }
+                      }
+#endif
+
+                    /* Here still count <= allocated - length.  */
+
+#if !DCHAR_IS_TCHAR || USE_SNPRINTF
+                    /* The snprintf() result did fit.  */
+#else
+                    /* Append the sprintf() result.  */
+                    memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+#endif
+#if !USE_SNPRINTF
+                    if (tmp != tmpbuf)
+                      free (tmp);
+#endif
+
+#if NEED_PRINTF_DIRECTIVE_F
+                    if (dp->conversion == 'F')
+                      {
+                        /* Convert the %f result to upper case for %F.  */
+                        DCHAR_T *rp = result + length;
+                        size_t rc;
+                        for (rc = count; rc > 0; rc--, rp++)
+                          if (*rp >= 'a' && *rp <= 'z')
+                            *rp = *rp - 'a' + 'A';
+                      }
+#endif
+
+                    length += count;
+                    break;
+                  }
+                errno = orig_errno;
+#undef pad_ourselves
+#undef prec_ourselves
+              }
+          }
+      }
+
+    /* Add the final NUL.  */
+    ENSURE_ALLOCATION (xsum (length, 1));
+    result[length] = '\0';
+
+    if (result != resultbuf && length + 1 < allocated)
+      {
+        /* Shrink the allocated memory if possible.  */
+        DCHAR_T *memory;
+
+        memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T));
+        if (memory != NULL)
+          result = memory;
+      }
+
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+    CLEANUP ();
+    *lengthp = length;
+    /* Note that we can produce a big string of a length > INT_MAX.  POSIX
+       says that snprintf() fails with errno = EOVERFLOW in this case, but
+       that's only because snprintf() returns an 'int'.  This function does
+       not have this limitation.  */
+    return result;
+
+#if USE_SNPRINTF
+  overflow:
+    if (!(result == resultbuf || result == NULL))
+      free (result);
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+    CLEANUP ();
+    errno = EOVERFLOW;
+    return NULL;
+#endif
+
+  out_of_memory:
+    if (!(result == resultbuf || result == NULL))
+      free (result);
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+  out_of_memory_1:
+    CLEANUP ();
+    errno = ENOMEM;
+    return NULL;
+  }
+}
+
+#undef MAX_ROOM_NEEDED
+#undef TCHARS_PER_DCHAR
+#undef SNPRINTF
+#undef USE_SNPRINTF
+#undef DCHAR_SET
+#undef DCHAR_CPY
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef DCHAR_IS_TCHAR
+#undef TCHAR_T
+#undef DCHAR_T
+#undef FCHAR_T
+#undef VASNPRINTF
diff --git a/lib/vasnprintf.h b/lib/vasnprintf.h
new file mode 100644
index 0000000..dd86914
--- /dev/null
+++ b/lib/vasnprintf.h
@@ -0,0 +1,79 @@
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 2002-2004, 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _VASNPRINTF_H
+#define _VASNPRINTF_H
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+   You can pass a preallocated buffer for the result in RESULTBUF and its
+   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+   If successful, return the address of the string (this may be = RESULTBUF
+   if no dynamic memory allocation was necessary) and set *LENGTHP to the
+   number of resulting bytes, excluding the trailing NUL.  Upon error, set
+   errno and return NULL.
+
+   When dynamic memory allocation occurs, the preallocated buffer is left
+   alone (with possibly modified contents).  This makes it possible to use
+   a statically allocated or stack-allocated buffer, like this:
+
+          char buf[100];
+          size_t len = sizeof (buf);
+          char *output = vasnprintf (buf, &len, format, args);
+          if (output == NULL)
+            ... error handling ...;
+          else
+            {
+              ... use the output string ...;
+              if (output != buf)
+                free (output);
+            }
+  */
+#if REPLACE_VASNPRINTF
+# define asnprintf rpl_asnprintf
+# define vasnprintf rpl_vasnprintf
+#endif
+extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+       _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4));
+extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+       _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNPRINTF_H */
diff --git a/lib/vbitset.c b/lib/vbitset.c
index d0fe30f..fbe6e7c 100644
--- a/lib/vbitset.c
+++ b/lib/vbitset.c
@@ -1,10 +1,12 @@
 /* Variable array bitsets.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,14 +15,12 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "vbitset.h"
+
 #include <stdlib.h>
 #include <string.h>
 
diff --git a/lib/vbitset.h b/lib/vbitset.h
index bab011c..5b3e810 100644
--- a/lib/vbitset.h
+++ b/lib/vbitset.h
@@ -1,20 +1,21 @@
 /* Functions to support vbitsets.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
-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 of the License, or
-(at your option) any later version.
+   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 3 of the License, 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.
+   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _VBITSET_H
 #define _VBITSET_H
diff --git a/lib/verify.h b/lib/verify.h
index d603b17..0c320b1 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -1,11 +1,11 @@
 /* Compile-time assert-like macros.
 
-   Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,26 +13,43 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
 
-#ifndef VERIFY_H
-# define VERIFY_H 1
+#ifndef _GL_VERIFY_H
+# define _GL_VERIFY_H
+
+
+/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11.
+   This is supported by GCC 4.6.0 and later, in C mode, and its use
+   here generates easier-to-read diagnostics when verify (R) fails.
+
+   Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11.
+   This will likely be supported by future GCC versions, in C++ mode.
+
+   Use this only with GCC.  If we were willing to slow 'configure'
+   down we could also use it with other compilers, but since this
+   affects only the quality of diagnostics, why bother?  */
+# if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined __cplusplus
+#  define _GL_HAVE__STATIC_ASSERT 1
+# endif
+/* The condition (99 < __GNUC__) is temporary, until we know about the
+   first G++ release that supports static_assert.  */
+# if (99 < __GNUC__) && defined __cplusplus
+#  define _GL_HAVE_STATIC_ASSERT 1
+# endif
 
 /* Each of these macros verifies that its argument R is nonzero.  To
    be portable, R should be an integer constant expression.  Unlike
    assert (R), there is no run-time overhead.
 
-   There are two macros, since no single macro can be used in all
-   contexts in C.  verify_true (R) is for scalar contexts, including
-   integer constant expression contexts.  verify (R) is for declaration
-   contexts, e.g., the top level.
+   If _Static_assert works, verify (R) uses it directly.  Similarly,
+   _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct
+   that is an operand of sizeof.
 
-   Symbols ending in "__" are private to this header.
-
-   The code below uses several ideas.
+   The code below uses several ideas for C++ compilers, and for C
+   compilers that do not support _Static_assert:
 
    * The first step is ((R) ? 1 : -1).  Given an expression R, of
      integral or boolean or floating-point type, this yields an
@@ -40,7 +57,9 @@
      constant and nonnegative.
 
    * Next this expression W is wrapped in a type
-     struct verify_type__ { unsigned int verify_error_if_negative_size__: W; }.
+     struct _gl_verify_type {
+       unsigned int _gl_verify_error_if_negative: W;
+     }.
      If W is negative, this yields a compile-time error.  No compiler can
      deal with a bit-field of negative size.
 
@@ -54,7 +73,7 @@
 
        void function (int n) { verify (n < 0); }
 
-   * For the verify macro, the struct verify_type__ will need to
+   * For the verify macro, the struct _gl_verify_type will need to
      somehow be embedded into a declaration.  To be portable, this
      declaration must declare an object, a constant, a function, or a
      typedef name.  If the declared entity uses the type directly,
@@ -70,13 +89,14 @@
      if the entity names are not disambiguated.  A workaround is to
      attach the current line number to the entity name:
 
-       #define GL_CONCAT0(x, y) x##y
-       #define GL_CONCAT(x, y) GL_CONCAT0 (x, y)
-       extern struct {...} * GL_CONCAT(dummy,__LINE__);
+       #define _GL_CONCAT0(x, y) x##y
+       #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+       extern struct {...} * _GL_CONCAT (dummy, __LINE__);
 
      But this has the problem that two invocations of verify from
      within the same macro would collide, since the __LINE__ value
-     would be the same for both invocations.
+     would be the same for both invocations.  (The GCC __COUNTER__
+     macro solves this problem, but is not portable.)
 
      A solution is to use the sizeof operator.  It yields a number,
      getting rid of the identity of the type.  Declarations like
@@ -91,11 +111,11 @@
      Which of the following alternatives can be used?
 
        extern int dummy [sizeof (struct {...})];
-       extern int dummy [sizeof (struct verify_type__ {...})];
+       extern int dummy [sizeof (struct _gl_verify_type {...})];
        extern void dummy (int [sizeof (struct {...})]);
-       extern void dummy (int [sizeof (struct verify_type__ {...})]);
+       extern void dummy (int [sizeof (struct _gl_verify_type {...})]);
        extern int (*dummy (void)) [sizeof (struct {...})];
-       extern int (*dummy (void)) [sizeof (struct verify_type__ {...})];
+       extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})];
 
      In the second and sixth case, the struct type is exported to the
      outer scope; two such declarations therefore collide.  GCC warns
@@ -104,38 +124,122 @@
 
        extern int (*dummy (void)) [sizeof (struct {...})];
 
-   * This implementation exploits the fact that GCC does not warn about
-     the last declaration mentioned above.  If a future version of GCC
-     introduces a warning for this, the problem could be worked around
-     by using code specialized to GCC, e.g.,:
+   * GCC warns about duplicate declarations of the dummy function if
+     -Wredundant-decls is used.  GCC 4.3 and later have a builtin
+     __COUNTER__ macro that can let us generate unique identifiers for
+     each dummy function, to suppress this warning.
 
-       #if 4 <= __GNUC__
-       # define verify(R) \
-	   extern int (* verify_function__ (void)) \
-		      [__builtin_constant_p (R) && (R) ? 1 : -1]
-       #endif
+   * This implementation exploits the fact that older versions of GCC,
+     which do not support _Static_assert, also do not warn about the
+     last declaration mentioned above.
+
+   * GCC warns if -Wnested-externs is enabled and verify() is used
+     within a function body; but inside a function, you can always
+     arrange to use verify_expr() instead.
 
    * In C++, any struct definition inside sizeof is invalid.
      Use a template type to work around the problem.  */
 
+/* Concatenate two preprocessor tokens.  */
+# define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+# define _GL_CONCAT0(x, y) x##y
 
-/* Verify requirement R at compile-time, as an integer constant expression.
-   Return 1.  */
+/* _GL_COUNTER is an integer, preferably one that changes each time we
+   use it.  Use __COUNTER__ if it works, falling back on __LINE__
+   otherwise.  __LINE__ isn't perfect, but it's better than a
+   constant.  */
+# if defined __COUNTER__ && __COUNTER__ != __COUNTER__
+#  define _GL_COUNTER __COUNTER__
+# else
+#  define _GL_COUNTER __LINE__
+# endif
+
+/* Generate a symbol with the given prefix, making it unique if
+   possible.  */
+# define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER)
+
+/* Verify requirement R at compile-time, as an integer constant expression
+   that returns 1.  If R is false, fail at compile-time, preferably
+   with a diagnostic that includes the string-literal DIAGNOSTIC.  */
+
+# define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \
+    (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC)))
 
 # ifdef __cplusplus
+#  if !GNULIB_defined_struct__gl_verify_type
 template <int w>
-  struct verify_type__ { unsigned int verify_error_if_negative_size__: w; };
-#  define verify_true(R) \
-     (!!sizeof (verify_type__<(R) ? 1 : -1>))
+  struct _gl_verify_type {
+    unsigned int _gl_verify_error_if_negative: w;
+  };
+#   define GNULIB_defined_struct__gl_verify_type 1
+#  endif
+#  define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+    _gl_verify_type<(R) ? 1 : -1>
+# elif defined _GL_HAVE__STATIC_ASSERT
+#  define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+     struct {                                   \
+       _Static_assert (R, DIAGNOSTIC);          \
+       int _gl_dummy;                          \
+     }
 # else
-#  define verify_true(R) \
-     (!!sizeof \
-      (struct { unsigned int verify_error_if_negative_size__: (R) ? 1 : -1; }))
+#  define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+     struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; }
 # endif
 
 /* Verify requirement R at compile-time, as a declaration without a
+   trailing ';'.  If R is false, fail at compile-time, preferably
+   with a diagnostic that includes the string-literal DIAGNOSTIC.
+
+   Unfortunately, unlike C11, this implementation must appear as an
+   ordinary declaration, and cannot appear inside struct { ... }.  */
+
+# ifdef _GL_HAVE__STATIC_ASSERT
+#  define _GL_VERIFY _Static_assert
+# else
+#  define _GL_VERIFY(R, DIAGNOSTIC)				       \
+     extern int (*_GL_GENSYM (_gl_verify_function) (void))	       \
+       [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
+# endif
+
+/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h.  */
+# ifdef _GL_STATIC_ASSERT_H
+#  if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert
+#   define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC)
+#  endif
+#  if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert
+#   define static_assert _Static_assert /* C11 requires this #define.  */
+#  endif
+# endif
+
+/* @assert.h omit start@  */
+
+/* Each of these macros verifies that its argument R is nonzero.  To
+   be portable, R should be an integer constant expression.  Unlike
+   assert (R), there is no run-time overhead.
+
+   There are two macros, since no single macro can be used in all
+   contexts in C.  verify_true (R) is for scalar contexts, including
+   integer constant expression contexts.  verify (R) is for declaration
+   contexts, e.g., the top level.  */
+
+/* Verify requirement R at compile-time, as an integer constant expression.
+   Return 1.  This is equivalent to verify_expr (R, 1).
+
+   verify_true is obsolescent; please use verify_expr instead.  */
+
+# define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")")
+
+/* Verify requirement R at compile-time.  Return the value of the
+   expression E.  */
+
+# define verify_expr(R, E) \
+    (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E))
+
+/* Verify requirement R at compile-time, as a declaration without a
    trailing ';'.  */
 
-# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)]
+# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
+
+/* @assert.h omit end@  */
 
 #endif
diff --git a/lib/vfprintf.c b/lib/vfprintf.c
new file mode 100644
index 0000000..4117791
--- /dev/null
+++ b/lib/vfprintf.c
@@ -0,0 +1,74 @@
+/* Formatted output to a stream.
+   Copyright (C) 2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if 1
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+#include "fseterr.h"
+#include "vasnprintf.h"
+
+/* Print formatted output to the stream FP.
+   Return string length of formatted string.  On error, return a negative
+   value.  */
+int
+vfprintf (FILE *fp, const char *format, va_list args)
+{
+  char buf[2000];
+  char *output;
+  size_t len;
+  size_t lenbuf = sizeof (buf);
+
+  output = vasnprintf (buf, &lenbuf, format, args);
+  len = lenbuf;
+
+  if (!output)
+    {
+      fseterr (fp);
+      return -1;
+    }
+
+  if (fwrite (output, 1, len, fp) < len)
+    {
+      if (output != buf)
+        {
+          int saved_errno = errno;
+          free (output);
+          errno = saved_errno;
+        }
+      return -1;
+    }
+
+  if (output != buf)
+    free (output);
+
+  if (len > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      fseterr (fp);
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/vsnprintf.c b/lib/vsnprintf.c
new file mode 100644
index 0000000..304b909
--- /dev/null
+++ b/lib/vsnprintf.c
@@ -0,0 +1,70 @@
+/* Formatted output to strings.
+   Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+   Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if 1
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "vasnprintf.h"
+
+/* Print formatted output to string STR.  Similar to vsprintf, but
+   additional length SIZE limit how much is written into STR.  Returns
+   string length of formatted string (which may be larger than SIZE).
+   STR may be NULL, in which case nothing will be written.  On error,
+   return a negative value.  */
+int
+vsnprintf (char *str, size_t size, const char *format, va_list args)
+{
+  char *output;
+  size_t len;
+  size_t lenbuf = size;
+
+  output = vasnprintf (str, &lenbuf, format, args);
+  len = lenbuf;
+
+  if (!output)
+    return -1;
+
+  if (output != str)
+    {
+      if (size)
+        {
+          size_t pruned_len = (len < size ? len : size - 1);
+          memcpy (str, output, pruned_len);
+          str[pruned_len] = '\0';
+        }
+
+      free (output);
+    }
+
+  if (len > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
new file mode 100644
index 0000000..0c0ad3e
--- /dev/null
+++ b/lib/vsprintf.c
@@ -0,0 +1,77 @@
+/* Formatted output to strings.
+   Copyright (C) 2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if 1
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "vasnprintf.h"
+
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+/* Print formatted output to string STR.
+   Return string length of formatted string.  On error, return a negative
+   value.  */
+int
+vsprintf (char *str, const char *format, va_list args)
+{
+  char *output;
+  size_t len;
+  size_t lenbuf;
+
+  /* vasnprintf fails with EOVERFLOW when the buffer size argument is larger
+     than INT_MAX (if that fits into a 'size_t' at all).
+     Also note that glibc's iconv fails with E2BIG when we pass a length that
+     is so large that str + lenbuf wraps around, i.e.
+     (uintptr_t) (str + lenbuf) < (uintptr_t) str.
+     Therefore set lenbuf = min (SIZE_MAX, INT_MAX, - (uintptr_t) str - 1).  */
+  lenbuf = (SIZE_MAX < INT_MAX ? SIZE_MAX : INT_MAX);
+  if (lenbuf > ~ (uintptr_t) str)
+    lenbuf = ~ (uintptr_t) str;
+
+  output = vasnprintf (str, &lenbuf, format, args);
+  len = lenbuf;
+
+  if (!output)
+    return -1;
+
+  if (output != str)
+    {
+      /* len is near SIZE_MAX.  */
+      free (output);
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  if (len > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/w32spawn.h b/lib/w32spawn.h
new file mode 100644
index 0000000..49a3900
--- /dev/null
+++ b/lib/w32spawn.h
@@ -0,0 +1,222 @@
+/* Auxiliary functions for the creation of subprocesses.  Native Windows API.
+   Copyright (C) 2001, 2003-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Get declarations of the native Windows API functions.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+/* Get _open_osfhandle().  */
+#include <io.h>
+
+#include <stdbool.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+/* Get _get_osfhandle().  */
+#include "msvc-nothrow.h"
+
+#include "cloexec.h"
+#include "xalloc.h"
+
+/* Duplicates a file handle, making the copy uninheritable.
+   Returns -1 for a file handle that is equivalent to closed.  */
+static int
+dup_noinherit (int fd)
+{
+  fd = dup_cloexec (fd);
+  if (fd < 0 && errno == EMFILE)
+    error (EXIT_FAILURE, errno, _("_open_osfhandle failed"));
+
+  return fd;
+}
+
+/* Returns a file descriptor equivalent to FD, except that the resulting file
+   descriptor is none of STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO.
+   FD must be open and non-inheritable.  The result will be non-inheritable as
+   well.
+   If FD < 0, FD itself is returned.  */
+static int
+fd_safer_noinherit (int fd)
+{
+  if (STDIN_FILENO <= fd && fd <= STDERR_FILENO)
+    {
+      /* The recursion depth is at most 3.  */
+      int nfd = fd_safer_noinherit (dup_noinherit (fd));
+      int saved_errno = errno;
+      close (fd);
+      errno = saved_errno;
+      return nfd;
+    }
+  return fd;
+}
+
+/* Duplicates a file handle, making the copy uninheritable and ensuring the
+   result is none of STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO.
+   Returns -1 for a file handle that is equivalent to closed.  */
+static int
+dup_safer_noinherit (int fd)
+{
+  return fd_safer_noinherit (dup_noinherit (fd));
+}
+
+/* Undoes the effect of TEMPFD = dup_safer_noinherit (ORIGFD);  */
+static void
+undup_safer_noinherit (int tempfd, int origfd)
+{
+  if (tempfd >= 0)
+    {
+      if (dup2 (tempfd, origfd) < 0)
+        error (EXIT_FAILURE, errno, _("cannot restore fd %d: dup2 failed"),
+               origfd);
+      close (tempfd);
+    }
+  else
+    {
+      /* origfd was closed or open to no handle at all.  Set it to a closed
+         state.  This is (nearly) equivalent to the original state.  */
+      close (origfd);
+    }
+}
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Windows CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+   - '*', '?' characters may get expanded through wildcard expansion in the
+     callee: By default, in the callee, the initialization code before main()
+     takes the result of GetCommandLine(), wildcard-expands it, and passes it
+     to main(). The exceptions to this rule are:
+       - programs that inspect GetCommandLine() and ignore argv,
+       - mingw programs that have a global variable 'int _CRT_glob = 0;',
+       - Cygwin programs, when invoked from a Cygwin program.
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*?"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+static char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XNMALLOC (1 + argc + 1, char *);
+
+  /* Add an element upfront that can be used when argv[0] turns out to be a
+     script, not a program.
+     On Unix, this would be "/bin/sh". On native Windows, "sh" is actually
+     "sh.exe".  We have to omit the directory part and rely on the search in
+     PATH, because the mingw "mount points" are not visible inside Windows
+     CreateProcess().  */
+  *new_argv++ = "sh.exe";
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+        new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+        {
+          bool quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+          size_t length;
+          unsigned int backslashes;
+          const char *s;
+          char *quoted_string;
+          char *p;
+
+          length = 0;
+          backslashes = 0;
+          if (quote_around)
+            length++;
+          for (s = string; *s != '\0'; s++)
+            {
+              char c = *s;
+              if (c == '"')
+                length += backslashes + 1;
+              length++;
+              if (c == '\\')
+                backslashes++;
+              else
+                backslashes = 0;
+            }
+          if (quote_around)
+            length += backslashes + 1;
+
+          quoted_string = (char *) xmalloc (length + 1);
+
+          p = quoted_string;
+          backslashes = 0;
+          if (quote_around)
+            *p++ = '"';
+          for (s = string; *s != '\0'; s++)
+            {
+              char c = *s;
+              if (c == '"')
+                {
+                  unsigned int j;
+                  for (j = backslashes + 1; j > 0; j--)
+                    *p++ = '\\';
+                }
+              *p++ = c;
+              if (c == '\\')
+                backslashes++;
+              else
+                backslashes = 0;
+            }
+          if (quote_around)
+            {
+              unsigned int j;
+              for (j = backslashes; j > 0; j--)
+                *p++ = '\\';
+              *p++ = '"';
+            }
+          *p = '\0';
+
+          new_argv[i] = quoted_string;
+        }
+      else
+        new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
diff --git a/lib/wait-process.c b/lib/wait-process.c
new file mode 100644
index 0000000..80ed793
--- /dev/null
+++ b/lib/wait-process.c
@@ -0,0 +1,361 @@
+/* Waiting for a subprocess to finish.
+   Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#include <config.h>
+
+/* Specification.  */
+#include "wait-process.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include "error.h"
+#include "fatal-signal.h"
+#include "xalloc.h"
+#include "gettext.h"
+
+#define _(str) gettext (str)
+
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
+
+#if defined _MSC_VER || defined __MINGW32__
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+/* The return value of spawnvp() is really a process handle as returned
+   by CreateProcess().  Therefore we can kill it using TerminateProcess.  */
+#define kill(pid,sig) TerminateProcess ((HANDLE) (pid), sig)
+
+#endif
+
+
+/* Type of an entry in the slaves array.
+   The 'used' bit determines whether this entry is currently in use.
+   (If pid_t was an atomic type like sig_atomic_t, we could just set the
+   'child' field to 0 when unregistering a slave process, and wouldn't need
+   the 'used' field.)
+   The 'used' and 'child' fields are accessed from within the cleanup_slaves()
+   action, therefore we mark them as 'volatile'.  */
+typedef struct
+{
+  volatile sig_atomic_t used;
+  volatile pid_t child;
+}
+slaves_entry_t;
+
+/* The registered slave subprocesses.  */
+static slaves_entry_t static_slaves[32];
+static slaves_entry_t * volatile slaves = static_slaves;
+static sig_atomic_t volatile slaves_count = 0;
+static size_t slaves_allocated = SIZEOF (static_slaves);
+
+/* The termination signal for slave subprocesses.
+   2003-10-07:  Terminator becomes Governator.  */
+#ifdef SIGHUP
+# define TERMINATOR SIGHUP
+#else
+# define TERMINATOR SIGTERM
+#endif
+
+/* The cleanup action.  It gets called asynchronously.  */
+static void
+cleanup_slaves (void)
+{
+  for (;;)
+    {
+      /* Get the last registered slave.  */
+      size_t n = slaves_count;
+      if (n == 0)
+        break;
+      n--;
+      slaves_count = n;
+      /* Skip unused entries in the slaves array.  */
+      if (slaves[n].used)
+        {
+          pid_t slave = slaves[n].child;
+
+          /* Kill the slave.  */
+          kill (slave, TERMINATOR);
+        }
+    }
+}
+
+/* Register a subprocess as being a slave process.  This means that the
+   subprocess will be terminated when its creator receives a catchable fatal
+   signal or exits normally.  Registration ends when wait_subprocess()
+   notices that the subprocess has exited.  */
+void
+register_slave_subprocess (pid_t child)
+{
+  static bool cleanup_slaves_registered = false;
+  if (!cleanup_slaves_registered)
+    {
+      atexit (cleanup_slaves);
+      at_fatal_signal (cleanup_slaves);
+      cleanup_slaves_registered = true;
+    }
+
+  /* Try to store the new slave in an unused entry of the slaves array.  */
+  {
+    slaves_entry_t *s = slaves;
+    slaves_entry_t *s_end = s + slaves_count;
+
+    for (; s < s_end; s++)
+      if (!s->used)
+        {
+          /* The two uses of 'volatile' in the slaves_entry_t type above
+             (and ISO C 99 section 5.1.2.3.(5)) ensure that we mark the
+             entry as used only after the child pid has been written to the
+             memory location s->child.  */
+          s->child = child;
+          s->used = 1;
+          return;
+        }
+  }
+
+  if (slaves_count == slaves_allocated)
+    {
+      /* Extend the slaves array.  Note that we cannot use xrealloc(),
+         because then the cleanup_slaves() function could access an already
+         deallocated array.  */
+      slaves_entry_t *old_slaves = slaves;
+      size_t new_slaves_allocated = 2 * slaves_allocated;
+      slaves_entry_t *new_slaves =
+        (slaves_entry_t *)
+        malloc (new_slaves_allocated * sizeof (slaves_entry_t));
+      if (new_slaves == NULL)
+        {
+          /* xalloc_die() will call exit() which will invoke cleanup_slaves().
+             Additionally we need to kill child, because it's not yet among
+             the slaves list.  */
+          kill (child, TERMINATOR);
+          xalloc_die ();
+        }
+      memcpy (new_slaves, old_slaves,
+              slaves_allocated * sizeof (slaves_entry_t));
+      slaves = new_slaves;
+      slaves_allocated = new_slaves_allocated;
+      /* Now we can free the old slaves array.  */
+      if (old_slaves != static_slaves)
+        free (old_slaves);
+    }
+  /* The three uses of 'volatile' in the types above (and ISO C 99 section
+     5.1.2.3.(5)) ensure that we increment the slaves_count only after the
+     new slave and its 'used' bit have been written to the memory locations
+     that make up slaves[slaves_count].  */
+  slaves[slaves_count].child = child;
+  slaves[slaves_count].used = 1;
+  slaves_count++;
+}
+
+/* Unregister a child from the list of slave subprocesses.  */
+static void
+unregister_slave_subprocess (pid_t child)
+{
+  /* The easiest way to remove an entry from a list that can be used by
+     an asynchronous signal handler is just to mark it as unused.  For this,
+     we rely on sig_atomic_t.  */
+  slaves_entry_t *s = slaves;
+  slaves_entry_t *s_end = s + slaves_count;
+
+  for (; s < s_end; s++)
+    if (s->used && s->child == child)
+      s->used = 0;
+}
+
+
+/* Wait for a subprocess to finish.  Return its exit code.
+   If it didn't terminate correctly, exit if exit_on_error is true, otherwise
+   return 127.  */
+int
+wait_subprocess (pid_t child, const char *progname,
+                 bool ignore_sigpipe, bool null_stderr,
+                 bool slave_process, bool exit_on_error,
+                 int *termsigp)
+{
+#if HAVE_WAITID && defined WNOWAIT && 0
+  /* Commented out because waitid() without WEXITED and with WNOWAIT doesn't
+     work: On Solaris 7 and OSF/1 4.0, it returns -1 and sets errno = ECHILD,
+     and on HP-UX 10.20 it just hangs.  */
+  /* Use of waitid() with WNOWAIT avoids a race condition: If slave_process is
+     true, and this process sleeps a very long time between the return from
+     waitpid() and the execution of unregister_slave_subprocess(), and
+     meanwhile another process acquires the same PID as child, and then - still
+     before unregister_slave_subprocess() - this process gets a fatal signal,
+     it would kill the other totally unrelated process.  */
+  siginfo_t info;
+
+  if (termsigp != NULL)
+    *termsigp = 0;
+  for (;;)
+    {
+      if (waitid (P_PID, child, &info, WEXITED | (slave_process ? WNOWAIT : 0))
+          < 0)
+        {
+# ifdef EINTR
+          if (errno == EINTR)
+            continue;
+# endif
+          if (exit_on_error || !null_stderr)
+            error (exit_on_error ? EXIT_FAILURE : 0, errno,
+                   _("%s subprocess"), progname);
+          return 127;
+        }
+
+      /* info.si_code is set to one of CLD_EXITED, CLD_KILLED, CLD_DUMPED,
+         CLD_TRAPPED, CLD_STOPPED, CLD_CONTINUED.  Loop until the program
+         terminates.  */
+      if (info.si_code == CLD_EXITED
+          || info.si_code == CLD_KILLED || info.si_code == CLD_DUMPED)
+        break;
+    }
+
+  /* The child process has exited or was signalled.  */
+
+  if (slave_process)
+    {
+      /* Unregister the child from the list of slave subprocesses, so that
+         later, when we exit, we don't kill a totally unrelated process which
+         may have acquired the same pid.  */
+      unregister_slave_subprocess (child);
+
+      /* Now remove the zombie from the process list.  */
+      for (;;)
+        {
+          if (waitid (P_PID, child, &info, WEXITED) < 0)
+            {
+# ifdef EINTR
+              if (errno == EINTR)
+                continue;
+# endif
+              if (exit_on_error || !null_stderr)
+                error (exit_on_error ? EXIT_FAILURE : 0, errno,
+                       _("%s subprocess"), progname);
+              return 127;
+            }
+          break;
+        }
+    }
+
+  switch (info.si_code)
+    {
+    case CLD_KILLED:
+    case CLD_DUMPED:
+      if (termsigp != NULL)
+        *termsigp = info.si_status; /* TODO: or info.si_signo? */
+# ifdef SIGPIPE
+      if (info.si_status == SIGPIPE && ignore_sigpipe)
+        return 0;
+# endif
+      if (exit_on_error || (!null_stderr && termsigp == NULL))
+        error (exit_on_error ? EXIT_FAILURE : 0, 0,
+               _("%s subprocess got fatal signal %d"),
+               progname, info.si_status);
+      return 127;
+    case CLD_EXITED:
+      if (info.si_status == 127)
+        {
+          if (exit_on_error || !null_stderr)
+            error (exit_on_error ? EXIT_FAILURE : 0, 0,
+                   _("%s subprocess failed"), progname);
+          return 127;
+        }
+      return info.si_status;
+    default:
+      abort ();
+    }
+#else
+  /* waitpid() is just as portable as wait() nowadays.  */
+  int status;
+
+  if (termsigp != NULL)
+    *termsigp = 0;
+  status = 0;
+  for (;;)
+    {
+      int result = waitpid (child, &status, 0);
+
+      if (result != child)
+        {
+# ifdef EINTR
+          if (errno == EINTR)
+            continue;
+# endif
+# if 0 /* defined ECHILD */
+          if (errno == ECHILD)
+            {
+              /* Child process nonexistent?! Assume it terminated
+                 successfully.  */
+              status = 0;
+              break;
+            }
+# endif
+          if (exit_on_error || !null_stderr)
+            error (exit_on_error ? EXIT_FAILURE : 0, errno,
+                   _("%s subprocess"), progname);
+          return 127;
+        }
+
+      /* One of WIFSIGNALED (status), WIFEXITED (status), WIFSTOPPED (status)
+         must always be true, since we did not specify WCONTINUED in the
+         waitpid() call.  Loop until the program terminates.  */
+      if (!WIFSTOPPED (status))
+        break;
+    }
+
+  /* The child process has exited or was signalled.  */
+
+  if (slave_process)
+    /* Unregister the child from the list of slave subprocesses, so that
+       later, when we exit, we don't kill a totally unrelated process which
+       may have acquired the same pid.  */
+    unregister_slave_subprocess (child);
+
+  if (WIFSIGNALED (status))
+    {
+      if (termsigp != NULL)
+        *termsigp = WTERMSIG (status);
+# ifdef SIGPIPE
+      if (WTERMSIG (status) == SIGPIPE && ignore_sigpipe)
+        return 0;
+# endif
+      if (exit_on_error || (!null_stderr && termsigp == NULL))
+        error (exit_on_error ? EXIT_FAILURE : 0, 0,
+               _("%s subprocess got fatal signal %d"),
+               progname, (int) WTERMSIG (status));
+      return 127;
+    }
+  if (!WIFEXITED (status))
+    abort ();
+  if (WEXITSTATUS (status) == 127)
+    {
+      if (exit_on_error || !null_stderr)
+        error (exit_on_error ? EXIT_FAILURE : 0, 0,
+               _("%s subprocess failed"), progname);
+      return 127;
+    }
+  return WEXITSTATUS (status);
+#endif
+}
diff --git a/lib/wait-process.h b/lib/wait-process.h
new file mode 100644
index 0000000..bd20431
--- /dev/null
+++ b/lib/wait-process.h
@@ -0,0 +1,74 @@
+/* Waiting for a subprocess to finish.
+   Copyright (C) 2001-2003, 2006, 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _WAIT_PROCESS_H
+#define _WAIT_PROCESS_H
+
+/* Get pid_t.  */
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include <stdbool.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Wait for a subprocess to finish.  Return its exit code.
+   If it didn't terminate correctly, exit if exit_on_error is true, otherwise
+   return 127.
+   Arguments:
+   - child is the pid of the subprocess.
+   - progname is the name of the program executed by the subprocess, used for
+     error messages.
+   - If ignore_sigpipe is true, consider a subprocess termination due to
+     SIGPIPE as equivalent to a success.  This is suitable for processes whose
+     only purpose is to write to standard output.  This flag can be safely set
+     to false when the process' standard output is known to go to DEV_NULL.
+   - If null_stderr is true, the usual error message to stderr will be omitted.
+     This is suitable when the subprocess does not fulfill an important task.
+   - slave_process should be set to true if the process has been launched as a
+     slave process.
+   - If exit_on_error is true, any error will cause the main process to exit
+     with an error status.
+   - If termsigp is not NULL: *termsig will be set to the signal that
+     terminated the subprocess (if supported by the platform: not on native
+     Windows platforms), otherwise 0, and the error message about the signal
+     that terminated the subprocess will be omitted.
+   Prerequisites: The signal handler for SIGCHLD should not be set to SIG_IGN,
+   otherwise this function will not work.  */
+extern int wait_subprocess (pid_t child, const char *progname,
+                            bool ignore_sigpipe, bool null_stderr,
+                            bool slave_process, bool exit_on_error,
+                            int *termsigp);
+
+/* Register a subprocess as being a slave process.  This means that the
+   subprocess will be terminated when its creator receives a catchable fatal
+   signal or exits normally.  Registration ends when wait_subprocess()
+   notices that the subprocess has exited.  */
+extern void register_slave_subprocess (pid_t child);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _WAIT_PROCESS_H */
diff --git a/lib/waitpid.c b/lib/waitpid.c
new file mode 100644
index 0000000..9249d4c
--- /dev/null
+++ b/lib/waitpid.c
@@ -0,0 +1,30 @@
+/* Wait for process state change.
+   Copyright (C) 2001-2003, 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <sys/wait.h>
+
+/* Implementation for native Windows systems.  */
+
+#include <process.h> /* for _cwait, WAIT_CHILD */
+
+pid_t
+waitpid (pid_t pid, int *statusp, int options)
+{
+  return _cwait (statusp, pid, WAIT_CHILD);
+}
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
new file mode 100644
index 0000000..f9bc30c
--- /dev/null
+++ b/lib/wchar.in.h
@@ -0,0 +1,1028 @@
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+   Copyright (C) 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
+/* Special invocation convention:
+   - Inside glibc and uClibc header files.
+   - On HP-UX 11.00 we have a sequence of nested includes
+     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+     and once directly.  In both situations 'wint_t' is not yet defined,
+     therefore we cannot provide the function overrides; instead include only
+     the system's <wchar.h>.
+   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+     the latter includes <wchar.h>.  But here, we have no way to detect whether
+     <wctype.h> is completely included or is still being included.  */
+
+#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+#if @HAVE_FEATURES_H@
+# include <features.h> /* for __GLIBC__ */
+#endif
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.
+   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
+   by <stddef.h>.
+   But avoid namespace pollution on glibc systems.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+#endif
+#ifndef __GLIBC__
+# include <stdio.h>
+# include <time.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCHAR_H@
+# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _@GUARD_PREFIX@_WCHAR_H
+#define _@GUARD_PREFIX@_WCHAR_H
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
+   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
+   "unchanged by default argument promotions".  Override it.  */
+# if defined _MSC_VER
+#  if !GNULIB_defined_wint_t
+#   include <crtdefs.h>
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+   implementing mbrtowc for encodings like UTF-8.  */
+#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
+# if !GNULIB_defined_mbstate_t
+typedef int rpl_mbstate_t;
+#  undef mbstate_t
+#  define mbstate_t rpl_mbstate_t
+#  define GNULIB_defined_mbstate_t 1
+# endif
+#endif
+
+
+/* Convert a single-byte character to a wide character.  */
+#if @GNULIB_BTOWC@
+# if @REPLACE_BTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef btowc
+#   define btowc rpl_btowc
+#  endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+#  if !@HAVE_BTOWC@
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+# endif
+_GL_CXXALIASWARN (btowc);
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+                 "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character.  */
+#if @GNULIB_WCTOB@
+# if @REPLACE_WCTOB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctob
+#   define wctob rpl_wctob
+#  endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+#  if !defined wctob && !@HAVE_DECL_WCTOB@
+/* wctob is provided by gnulib, or wctob exists but is not declared.  */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (wctob);
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+                 "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state.  */
+#if @GNULIB_MBSINIT@
+# if @REPLACE_MBSINIT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsinit
+#   define mbsinit rpl_mbsinit
+#  endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+#  if !@HAVE_MBSINIT@
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsinit);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+                 "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character.  */
+#if @GNULIB_MBRTOWC@
+# if @REPLACE_MBRTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrtowc
+#   define mbrtowc rpl_mbrtowc
+#  endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRTOWC@
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrtowc);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+                 "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character.  */
+#if @GNULIB_MBRLEN@
+# if @REPLACE_MBRLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrlen
+#   define mbrlen rpl_mbrlen
+#  endif
+_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRLEN@
+_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrlen);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+                 "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSRTOWCS@
+# if @REPLACE_MBSRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsrtowcs
+#   define mbsrtowcs rpl_mbsrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSRTOWCS@
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+                 "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSNRTOWCS@
+# if @REPLACE_MBSNRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsnrtowcs
+#   define mbsnrtowcs rpl_mbsnrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSNRTOWCS@
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsnrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+                 "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character.  */
+#if @GNULIB_WCRTOMB@
+# if @REPLACE_WCRTOMB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcrtomb
+#   define wcrtomb rpl_wcrtomb
+#  endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# else
+#  if !@HAVE_WCRTOMB@
+_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcrtomb);
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+                 "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSRTOMBS@
+# if @REPLACE_WCSRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsrtombs
+#   define wcsrtombs rpl_wcsrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSRTOMBS@
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+                 "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSNRTOMBS@
+# if @REPLACE_WCSNRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsnrtombs
+#   define wcsnrtombs rpl_wcsnrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSNRTOMBS@
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsnrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+                 "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC.  */
+#if @GNULIB_WCWIDTH@
+# if @REPLACE_WCWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcwidth
+#   define wcwidth rpl_wcwidth
+#  endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+#  if !@HAVE_DECL_WCWIDTH@
+/* wcwidth exists but is not declared.  */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+_GL_CXXALIASWARN (wcwidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+                 "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+/* Search N wide characters of S for C.  */
+#if @GNULIB_WMEMCHR@
+# if !@HAVE_WMEMCHR@
+_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
+         wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wmemchr,
+                        wchar_t *, (const wchar_t *, wchar_t, size_t),
+                        const wchar_t *, (const wchar_t *, wchar_t, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
+                   (const wchar_t *s, wchar_t c, size_t n));
+# else
+_GL_CXXALIASWARN (wmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemchr
+# if HAVE_RAW_DECL_WMEMCHR
+_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
+                 "use gnulib module wmemchr for portability");
+# endif
+#endif
+
+
+/* Compare N wide characters of S1 and S2.  */
+#if @GNULIB_WMEMCMP@
+# if !@HAVE_WMEMCMP@
+_GL_FUNCDECL_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wmemcmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcmp
+# if HAVE_RAW_DECL_WMEMCMP
+_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
+                 "use gnulib module wmemcmp for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST.  */
+#if @GNULIB_WMEMCPY@
+# if !@HAVE_WMEMCPY@
+_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcpy
+# if HAVE_RAW_DECL_WMEMCPY
+_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
+                 "use gnulib module wmemcpy for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
+   overlapping memory areas.  */
+#if @GNULIB_WMEMMOVE@
+# if !@HAVE_WMEMMOVE@
+_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemmove);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemmove
+# if HAVE_RAW_DECL_WMEMMOVE
+_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
+                 "use gnulib module wmemmove for portability");
+# endif
+#endif
+
+
+/* Set N wide characters of S to C.  */
+#if @GNULIB_WMEMSET@
+# if !@HAVE_WMEMSET@
+_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN (wmemset);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemset
+# if HAVE_RAW_DECL_WMEMSET
+_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
+                 "use gnulib module wmemset for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S.  */
+#if @GNULIB_WCSLEN@
+# if !@HAVE_WCSLEN@
+_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
+_GL_CXXALIASWARN (wcslen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcslen
+# if HAVE_RAW_DECL_WCSLEN
+_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
+                 "use gnulib module wcslen for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S, but at most MAXLEN.  */
+#if @GNULIB_WCSNLEN@
+# if !@HAVE_WCSNLEN@
+_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
+_GL_CXXALIASWARN (wcsnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnlen
+# if HAVE_RAW_DECL_WCSNLEN
+_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
+                 "use gnulib module wcsnlen for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST.  */
+#if @GNULIB_WCSCPY@
+# if !@HAVE_WCSCPY@
+_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscpy
+# if HAVE_RAW_DECL_WCSCPY
+_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
+                 "use gnulib module wcscpy for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
+#if @GNULIB_WCPCPY@
+# if !@HAVE_WCPCPY@
+_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpcpy
+# if HAVE_RAW_DECL_WCPCPY
+_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
+                 "use gnulib module wcpcpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N wide characters of SRC to DEST.  */
+#if @GNULIB_WCSNCPY@
+# if !@HAVE_WCSNCPY@
+_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncpy
+# if HAVE_RAW_DECL_WCSNCPY
+_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
+                 "use gnulib module wcsncpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+#if @GNULIB_WCPNCPY@
+# if !@HAVE_WCPNCPY@
+_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpncpy
+# if HAVE_RAW_DECL_WCPNCPY
+_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
+                 "use gnulib module wcpncpy for portability");
+# endif
+#endif
+
+
+/* Append SRC onto DEST.  */
+#if @GNULIB_WCSCAT@
+# if !@HAVE_WCSCAT@
+_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscat
+# if HAVE_RAW_DECL_WCSCAT
+_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
+                 "use gnulib module wcscat for portability");
+# endif
+#endif
+
+
+/* Append no more than N wide characters of SRC onto DEST.  */
+#if @GNULIB_WCSNCAT@
+# if !@HAVE_WCSNCAT@
+_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncat
+# if HAVE_RAW_DECL_WCSNCAT
+_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
+                 "use gnulib module wcsncat for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2.  */
+#if @GNULIB_WCSCMP@
+# if !@HAVE_WCSCMP@
+_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
+                               _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscmp
+# if HAVE_RAW_DECL_WCSCMP
+_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
+                 "use gnulib module wcscmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N wide characters of S1 and S2.  */
+#if @GNULIB_WCSNCMP@
+# if !@HAVE_WCSNCMP@
+_GL_FUNCDECL_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncmp
+# if HAVE_RAW_DECL_WCSNCMP
+_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
+                 "use gnulib module wcsncmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, ignoring case.  */
+#if @GNULIB_WCSCASECMP@
+# if !@HAVE_WCSCASECMP@
+_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscasecmp
+# if HAVE_RAW_DECL_WCSCASECMP
+_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
+                 "use gnulib module wcscasecmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+#if @GNULIB_WCSNCASECMP@
+# if !@HAVE_WCSNCASECMP@
+_GL_FUNCDECL_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncasecmp
+# if HAVE_RAW_DECL_WCSNCASECMP
+_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
+                 "use gnulib module wcsncasecmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
+   category of the current locale.  */
+#if @GNULIB_WCSCOLL@
+# if !@HAVE_WCSCOLL@
+_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+# endif
+_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscoll);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscoll
+# if HAVE_RAW_DECL_WCSCOLL
+_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
+                 "use gnulib module wcscoll for portability");
+# endif
+#endif
+
+
+/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
+   to two transformed strings the result is the as applying 'wcscoll' to the
+   original strings.  */
+#if @GNULIB_WCSXFRM@
+# if !@HAVE_WCSXFRM@
+_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsxfrm);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsxfrm
+# if HAVE_RAW_DECL_WCSXFRM
+_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
+                 "use gnulib module wcsxfrm for portability");
+# endif
+#endif
+
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if @GNULIB_WCSDUP@
+# if !@HAVE_WCSDUP@
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# endif
+_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+_GL_CXXALIASWARN (wcsdup);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsdup
+# if HAVE_RAW_DECL_WCSDUP
+_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
+                 "use gnulib module wcsdup for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of WC in WCS.  */
+#if @GNULIB_WCSCHR@
+# if !@HAVE_WCSCHR@
+_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                     _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcschr (const wchar_t *, wchar_t);
+         wchar_t * std::wcschr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcschr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcschr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcschr
+# if HAVE_RAW_DECL_WCSCHR
+_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
+                 "use gnulib module wcschr for portability");
+# endif
+#endif
+
+
+/* Find the last occurrence of WC in WCS.  */
+#if @GNULIB_WCSRCHR@
+# if !@HAVE_WCSRCHR@
+_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
+         wchar_t * std::wcsrchr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcsrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrchr
+# if HAVE_RAW_DECL_WCSRCHR
+_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
+                 "use gnulib module wcsrchr for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters not in REJECT.  */
+#if @GNULIB_WCSCSPN@
+# if !@HAVE_WCSCSPN@
+_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
+_GL_CXXALIASWARN (wcscspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscspn
+# if HAVE_RAW_DECL_WCSCSPN
+_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
+                 "use gnulib module wcscspn for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters in ACCEPT.  */
+#if @GNULIB_WCSSPN@
+# if !@HAVE_WCSSPN@
+_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
+                                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN (wcsspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsspn
+# if HAVE_RAW_DECL_WCSSPN
+_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
+                 "use gnulib module wcsspn for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence in WCS of any character in ACCEPT.  */
+#if @GNULIB_WCSPBRK@
+# if !@HAVE_WCSPBRK@
+_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
+                  (const wchar_t *wcs, const wchar_t *accept)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
+                   (wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
+                   (const wchar_t *wcs, const wchar_t *accept));
+# else
+_GL_CXXALIASWARN (wcspbrk);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcspbrk
+# if HAVE_RAW_DECL_WCSPBRK
+_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
+                 "use gnulib module wcspbrk for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#if @GNULIB_WCSSTR@
+# if !@HAVE_WCSSTR@
+_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
+                  (const wchar_t *haystack, const wchar_t *needle)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsstr,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
+                   (wchar_t *haystack, const wchar_t *needle));
+_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
+                   (const wchar_t *haystack, const wchar_t *needle));
+# else
+_GL_CXXALIASWARN (wcsstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsstr
+# if HAVE_RAW_DECL_WCSSTR
+_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
+                 "use gnulib module wcsstr for portability");
+# endif
+#endif
+
+
+/* Divide WCS into tokens separated by characters in DELIM.  */
+#if @GNULIB_WCSTOK@
+# if !@HAVE_WCSTOK@
+_GL_FUNCDECL_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+# endif
+_GL_CXXALIAS_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+_GL_CXXALIASWARN (wcstok);
+#elif defined GNULIB_POSIXCHECK
+# undef wcstok
+# if HAVE_RAW_DECL_WCSTOK
+_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
+                 "use gnulib module wcstok for portability");
+# endif
+#endif
+
+
+/* Determine number of column positions required for first N wide
+   characters (or fewer if S ends before this) in S.  */
+#if @GNULIB_WCSWIDTH@
+# if @REPLACE_WCSWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcswidth
+#   define wcswidth rpl_wcswidth
+#  endif
+_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
+# else
+#  if !@HAVE_WCSWIDTH@
+_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
+# endif
+_GL_CXXALIASWARN (wcswidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcswidth
+# if HAVE_RAW_DECL_WCSWIDTH
+_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
+                 "use gnulib module wcswidth for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_WCHAR_H */
+#endif /* _@GUARD_PREFIX@_WCHAR_H */
+#endif
diff --git a/lib/wctype-h.c b/lib/wctype-h.c
new file mode 100644
index 0000000..bb5f847
--- /dev/null
+++ b/lib/wctype-h.c
@@ -0,0 +1,4 @@
+/* Normally this would be wctype.c, but that name's already taken.  */
+#include <config.h>
+#define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE
+#include "wctype.h"
diff --git a/lib/wctype.in.h b/lib/wctype.in.h
new file mode 100644
index 0000000..3c98fa3
--- /dev/null
+++ b/lib/wctype.in.h
@@ -0,0 +1,504 @@
+/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
+
+   Copyright (C) 2006-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible and Paul Eggert.  */
+
+/*
+ * ISO C 99 <wctype.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/wctype.h.html>
+ *
+ * iswctype, towctrans, towlower, towupper, wctrans, wctype,
+ * wctrans_t, and wctype_t are not yet implemented.
+ */
+
+#ifndef _@GUARD_PREFIX@_WCTYPE_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if @HAVE_WINT_T@
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
+   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+
+/* Include the original <wctype.h> if it exists.
+   BeOS 5 has the functions but no <wctype.h>.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCTYPE_H@
+# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_WCTYPE_H
+#define _@GUARD_PREFIX@_WCTYPE_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_WCTYPE_INLINE
+# define _GL_WCTYPE_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
+   #defines a number of identifiers in the application namespace.  Revert
+   these #defines.  */
+#ifdef __sun
+# undef multibyte
+# undef eucw1
+# undef eucw2
+# undef eucw3
+# undef scrw1
+# undef scrw2
+# undef scrw3
+#endif
+
+/* Define wint_t and WEOF.  (Also done in wchar.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
+   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
+   "unchanged by default argument promotions".  Override it.  */
+# if defined _MSC_VER
+#  if !GNULIB_defined_wint_t
+#   include <crtdefs.h>
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+#if !GNULIB_defined_wctype_functions
+
+/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
+   Linux libc5 has <wctype.h> and the functions but they are broken.
+   Assume all 11 functions (all isw* except iswblank) are implemented the
+   same way, or not at all.  */
+# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
+
+/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
+   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
+   refer to system functions like _iswctype that are not in the
+   standard C library.  Rather than try to get ancient buggy
+   implementations like this to work, just disable them.  */
+#  undef iswalnum
+#  undef iswalpha
+#  undef iswblank
+#  undef iswcntrl
+#  undef iswdigit
+#  undef iswgraph
+#  undef iswlower
+#  undef iswprint
+#  undef iswpunct
+#  undef iswspace
+#  undef iswupper
+#  undef iswxdigit
+#  undef towlower
+#  undef towupper
+
+/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
+#  if @REPLACE_ISWCNTRL@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswalnum rpl_iswalnum
+#    define iswalpha rpl_iswalpha
+#    define iswblank rpl_iswblank
+#    define iswcntrl rpl_iswcntrl
+#    define iswdigit rpl_iswdigit
+#    define iswgraph rpl_iswgraph
+#    define iswlower rpl_iswlower
+#    define iswprint rpl_iswprint
+#    define iswpunct rpl_iswpunct
+#    define iswspace rpl_iswspace
+#    define iswupper rpl_iswupper
+#    define iswxdigit rpl_iswxdigit
+#   endif
+#  endif
+#  if @REPLACE_TOWLOWER@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define towlower rpl_towlower
+#    define towupper rpl_towupper
+#   endif
+#  endif
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswalnum
+#  else
+iswalnum
+#  endif
+         (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswalpha
+#  else
+iswalpha
+#  endif
+         (wint_t wc)
+{
+  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswblank
+#  else
+iswblank
+#  endif
+         (wint_t wc)
+{
+  return wc == ' ' || wc == '\t';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswcntrl
+#  else
+iswcntrl
+#  endif
+        (wint_t wc)
+{
+  return (wc & ~0x1f) == 0 || wc == 0x7f;
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswdigit
+#  else
+iswdigit
+#  endif
+         (wint_t wc)
+{
+  return wc >= '0' && wc <= '9';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswgraph
+#  else
+iswgraph
+#  endif
+         (wint_t wc)
+{
+  return wc >= '!' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswlower
+#  else
+iswlower
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'a' && wc <= 'z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswprint
+#  else
+iswprint
+#  endif
+         (wint_t wc)
+{
+  return wc >= ' ' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswpunct
+#  else
+iswpunct
+#  endif
+         (wint_t wc)
+{
+  return (wc >= '!' && wc <= '~'
+          && !((wc >= '0' && wc <= '9')
+               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswspace
+#  else
+iswspace
+#  endif
+         (wint_t wc)
+{
+  return (wc == ' ' || wc == '\t'
+          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswupper
+#  else
+iswupper
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'A' && wc <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswxdigit
+#  else
+iswxdigit
+#  endif
+          (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
+}
+
+_GL_WCTYPE_INLINE wint_t
+#  if @REPLACE_TOWLOWER@
+rpl_towlower
+#  else
+towlower
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
+}
+
+_GL_WCTYPE_INLINE wint_t
+#  if @REPLACE_TOWLOWER@
+rpl_towupper
+#  else
+towupper
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
+}
+
+# elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@)
+/* Only the iswblank function is missing.  */
+
+#  if @REPLACE_ISWBLANK@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswblank rpl_iswblank
+#   endif
+_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
+#  else
+_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
+#  endif
+
+# endif
+
+# if defined __MINGW32__
+
+/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
+   The functions towlower and towupper are implemented in the MSVCRT library
+   to take a wchar_t argument and return a wchar_t result.  mingw declares
+   these functions to take a wint_t argument and return a wint_t result.
+   This means that:
+   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
+      function will look only at the lower 16 bits.  This is allowed according
+      to POSIX.
+   2. The return value is returned in the lower 16 bits of the result register.
+      The upper 16 bits are random: whatever happened to be in that part of the
+      result register.  We need to fix this by adding a zero-extend from
+      wchar_t to wint_t after the call.  */
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towlower (wint_t wc)
+{
+  return (wint_t) (wchar_t) towlower (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towlower rpl_towlower
+#  endif
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towupper (wint_t wc)
+{
+  return (wint_t) (wchar_t) towupper (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towupper rpl_towupper
+#  endif
+
+# endif /* __MINGW32__ */
+
+# define GNULIB_defined_wctype_functions 1
+#endif
+
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (iswalnum);
+_GL_CXXALIASWARN (iswalpha);
+_GL_CXXALIASWARN (iswcntrl);
+_GL_CXXALIASWARN (iswdigit);
+_GL_CXXALIASWARN (iswgraph);
+_GL_CXXALIASWARN (iswlower);
+_GL_CXXALIASWARN (iswprint);
+_GL_CXXALIASWARN (iswpunct);
+_GL_CXXALIASWARN (iswspace);
+_GL_CXXALIASWARN (iswupper);
+_GL_CXXALIASWARN (iswxdigit);
+
+#if @GNULIB_ISWBLANK@
+# if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@
+_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
+# else
+_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (iswblank);
+#endif
+
+#if !@HAVE_WCTYPE_T@
+# if !GNULIB_defined_wctype_t
+typedef void * wctype_t;
+#  define GNULIB_defined_wctype_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character property.  */
+#if @GNULIB_WCTYPE@
+# if !@HAVE_WCTYPE_T@
+_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
+_GL_CXXALIASWARN (wctype);
+#elif defined GNULIB_POSIXCHECK
+# undef wctype
+# if HAVE_RAW_DECL_WCTYPE
+_GL_WARN_ON_USE (wctype, "wctype is unportable - "
+                 "use gnulib module wctype for portability");
+# endif
+#endif
+
+/* Test whether a wide character has a given property.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctype() function.  */
+#if @GNULIB_ISWCTYPE@
+# if !@HAVE_WCTYPE_T@
+_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+# endif
+_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+_GL_CXXALIASWARN (iswctype);
+#elif defined GNULIB_POSIXCHECK
+# undef iswctype
+# if HAVE_RAW_DECL_ISWCTYPE
+_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
+                 "use gnulib module iswctype for portability");
+# endif
+#endif
+
+#if @REPLACE_TOWLOWER@ || defined __MINGW32__
+_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (towlower);
+_GL_CXXALIASWARN (towupper);
+
+#if !@HAVE_WCTRANS_T@
+# if !GNULIB_defined_wctrans_t
+typedef void * wctrans_t;
+#  define GNULIB_defined_wctrans_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character case conversion.  */
+#if @GNULIB_WCTRANS@
+# if !@HAVE_WCTRANS_T@
+_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
+_GL_CXXALIASWARN (wctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef wctrans
+# if HAVE_RAW_DECL_WCTRANS
+_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
+                 "use gnulib module wctrans for portability");
+# endif
+#endif
+
+/* Perform a given case conversion on a wide character.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctrans() function.  */
+#if @GNULIB_TOWCTRANS@
+# if !@HAVE_WCTRANS_T@
+_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+# endif
+_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+_GL_CXXALIASWARN (towctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef towctrans
+# if HAVE_RAW_DECL_TOWCTRANS
+_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
+                 "use gnulib module towctrans for portability");
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _@GUARD_PREFIX@_WCTYPE_H */
+#endif /* _@GUARD_PREFIX@_WCTYPE_H */
diff --git a/lib/wcwidth.c b/lib/wcwidth.c
new file mode 100644
index 0000000..44503b0
--- /dev/null
+++ b/lib/wcwidth.c
@@ -0,0 +1,50 @@
+/* Determine the number of screen columns needed for a character.
+   Copyright (C) 2006-2007, 2010-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wchar.h>
+
+/* Get iswprint.  */
+#include <wctype.h>
+
+#include "localcharset.h"
+#include "streq.h"
+#include "uniwidth.h"
+
+int
+wcwidth (wchar_t wc)
+#undef wcwidth
+{
+  /* In UTF-8 locales, use a Unicode aware width function.  */
+  const char *encoding = locale_charset ();
+  if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0))
+    {
+      /* We assume that in a UTF-8 locale, a wide character is the same as a
+         Unicode character.  */
+      return uc_width (wc, encoding);
+    }
+  else
+    {
+      /* Otherwise, fall back to the system's wcwidth function.  */
+#if HAVE_WCWIDTH
+      return wcwidth (wc);
+#else
+      return wc == 0 ? 0 : iswprint (wc) ? 1 : -1;
+#endif
+    }
+}
diff --git a/lib/xalloc-die.c b/lib/xalloc-die.c
index 9b4a76c..e85d6df 100644
--- a/lib/xalloc-die.c
+++ b/lib/xalloc-die.c
@@ -1,12 +1,12 @@
 /* Report a memory allocation failure and exit.
 
-   Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006 Free
-   Software Foundation, Inc.
+   Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2012 Free Software
+   Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,12 +14,9 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 #include "xalloc.h"
 
@@ -36,7 +33,7 @@
 {
   error (exit_failure, 0, "%s", _("memory exhausted"));
 
-  /* The `noreturn' cannot be given to error, since it may return if
+  /* _Noreturn cannot be given to error, since it may return if
      its first argument is 0.  To help compilers understand the
      xalloc_die does not return, call abort.  Also, the abort is a
      safety feature if exit_failure is 0 (which shouldn't happen).  */
diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h
new file mode 100644
index 0000000..ad777d8
--- /dev/null
+++ b/lib/xalloc-oversized.h
@@ -0,0 +1,38 @@
+/* xalloc-oversized.h -- memory allocation size checking
+
+   Copyright (C) 1990-2000, 2003-2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef XALLOC_OVERSIZED_H_
+# define XALLOC_OVERSIZED_H_
+
+# include <stddef.h>
+
+/* Return 1 if an array of N objects, each of size S, cannot exist due
+   to size arithmetic overflow.  S must be positive and N must be
+   nonnegative.  This is a macro, not a function, so that it
+   works correctly even when SIZE_MAX < N.
+
+   By gnulib convention, SIZE_MAX represents overflow in size
+   calculations, so the conservative dividend to use here is
+   SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value.
+   However, malloc (SIZE_MAX) fails on all known hosts where
+   sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
+   exactly-SIZE_MAX allocations on such hosts; this avoids a test and
+   branch when S is known to be 1.  */
+# define xalloc_oversized(n, s) \
+    ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
+
+#endif /* !XALLOC_OVERSIZED_H_ */
diff --git a/lib/xalloc.h b/lib/xalloc.h
index f80977e..acf30a1 100644
--- a/lib/xalloc.h
+++ b/lib/xalloc.h
@@ -1,12 +1,11 @@
 /* xalloc.h -- malloc with out-of-memory checking
 
-   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2003-2004, 2006-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,66 +13,248 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef XALLOC_H_
-# define XALLOC_H_
+#define XALLOC_H_
 
-# include <stddef.h>
+#include <stddef.h>
 
+#include "xalloc-oversized.h"
 
-# ifdef __cplusplus
+_GL_INLINE_HEADER_BEGIN
+#ifndef XALLOC_INLINE
+# define XALLOC_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
 extern "C" {
-# endif
+#endif
 
 
-# ifndef __attribute__
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
-#   define __attribute__(x)
-#  endif
-# endif
+#if __GNUC__ >= 3
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#else
+# define _GL_ATTRIBUTE_MALLOC
+#endif
 
-# ifndef ATTRIBUTE_NORETURN
-#  define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-# endif
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
+# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
+#else
+# define _GL_ATTRIBUTE_ALLOC_SIZE(args)
+#endif
 
 /* This function is always triggered when memory is exhausted.
    It must be defined by the application, either explicitly
    or by using gnulib's xalloc-die module.  This is the
    function to call when one wants the program to die because of a
    memory allocation failure.  */
-extern void xalloc_die (void) ATTRIBUTE_NORETURN;
+extern _Noreturn void xalloc_die (void);
 
-void *xmalloc (size_t s);
-void *xnmalloc (size_t n, size_t s);
-void *xzalloc (size_t s);
-void *xcalloc (size_t n, size_t s);
-void *xrealloc (void *p, size_t s);
-void *xnrealloc (void *p, size_t n, size_t s);
+void *xmalloc (size_t s)
+      _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1));
+void *xzalloc (size_t s)
+      _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1));
+void *xcalloc (size_t n, size_t s)
+      _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2));
+void *xrealloc (void *p, size_t s)
+      _GL_ATTRIBUTE_ALLOC_SIZE ((2));
 void *x2realloc (void *p, size_t *pn);
-void *x2nrealloc (void *p, size_t *pn, size_t s);
-void *xmemdup (void const *p, size_t s);
-char *xstrdup (char const *str);
+void *xmemdup (void const *p, size_t s)
+      _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((2));
+char *xstrdup (char const *str)
+      _GL_ATTRIBUTE_MALLOC;
 
-/* Return 1 if an array of N objects, each of size S, cannot exist due
-   to size arithmetic overflow.  S must be positive and N must be
-   nonnegative.  This is a macro, not an inline function, so that it
-   works correctly even when SIZE_MAX < N.
+/* In the following macros, T must be an elementary or structure/union or
+   typedef'ed type, or a pointer to such a type.  To apply one of the
+   following macros to a function pointer or array type, you need to typedef
+   it first and use the typedef name.  */
 
-   By gnulib convention, SIZE_MAX represents overflow in size
-   calculations, so the conservative dividend to use here is
-   SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value.
-   However, malloc (SIZE_MAX) fails on all known hosts where
-   sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
-   exactly-SIZE_MAX allocations on such hosts; this avoids a test and
-   branch when S is known to be 1.  */
-# define xalloc_oversized(n, s) \
-    ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
+/* Allocate an object of type T dynamically, with error checking.  */
+/* extern t *XMALLOC (typename t); */
+#define XMALLOC(t) ((t *) xmalloc (sizeof (t)))
 
-# ifdef __cplusplus
+/* Allocate memory for N elements of type T, with error checking.  */
+/* extern t *XNMALLOC (size_t n, typename t); */
+#define XNMALLOC(n, t) \
+   ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t))))
+
+/* Allocate an object of type T dynamically, with error checking,
+   and zero it.  */
+/* extern t *XZALLOC (typename t); */
+#define XZALLOC(t) ((t *) xzalloc (sizeof (t)))
+
+/* Allocate memory for N elements of type T, with error checking,
+   and zero it.  */
+/* extern t *XCALLOC (size_t n, typename t); */
+#define XCALLOC(n, t) \
+   ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t))))
+
+
+/* Allocate an array of N objects, each with S bytes of memory,
+   dynamically, with error checking.  S must be nonzero.  */
+
+XALLOC_INLINE void *xnmalloc (size_t n, size_t s)
+                    _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2));
+XALLOC_INLINE void *
+xnmalloc (size_t n, size_t s)
+{
+  if (xalloc_oversized (n, s))
+    xalloc_die ();
+  return xmalloc (n * s);
 }
-# endif
+
+/* Change the size of an allocated block of memory P to an array of N
+   objects each of S bytes, with error checking.  S must be nonzero.  */
+
+XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s)
+                    _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3));
+XALLOC_INLINE void *
+xnrealloc (void *p, size_t n, size_t s)
+{
+  if (xalloc_oversized (n, s))
+    xalloc_die ();
+  return xrealloc (p, n * s);
+}
+
+/* If P is null, allocate a block of at least *PN such objects;
+   otherwise, reallocate P so that it contains more than *PN objects
+   each of S bytes.  *PN must be nonzero unless P is null, and S must
+   be nonzero.  Set *PN to the new number of objects, and return the
+   pointer to the new block.  *PN is never set to zero, and the
+   returned pointer is never null.
+
+   Repeated reallocations are guaranteed to make progress, either by
+   allocating an initial block with a nonzero size, or by allocating a
+   larger block.
+
+   In the following implementation, nonzero sizes are increased by a
+   factor of approximately 1.5 so that repeated reallocations have
+   O(N) overall cost rather than O(N**2) cost, but the
+   specification for this function does not guarantee that rate.
+
+   Here is an example of use:
+
+     int *p = NULL;
+     size_t used = 0;
+     size_t allocated = 0;
+
+     void
+     append_int (int value)
+       {
+         if (used == allocated)
+           p = x2nrealloc (p, &allocated, sizeof *p);
+         p[used++] = value;
+       }
+
+   This causes x2nrealloc to allocate a block of some nonzero size the
+   first time it is called.
+
+   To have finer-grained control over the initial size, set *PN to a
+   nonzero value before calling this function with P == NULL.  For
+   example:
+
+     int *p = NULL;
+     size_t used = 0;
+     size_t allocated = 0;
+     size_t allocated1 = 1000;
+
+     void
+     append_int (int value)
+       {
+         if (used == allocated)
+           {
+             p = x2nrealloc (p, &allocated1, sizeof *p);
+             allocated = allocated1;
+           }
+         p[used++] = value;
+       }
+
+   */
+
+XALLOC_INLINE void *
+x2nrealloc (void *p, size_t *pn, size_t s)
+{
+  size_t n = *pn;
+
+  if (! p)
+    {
+      if (! n)
+        {
+          /* The approximate size to use for initial small allocation
+             requests, when the invoking code specifies an old size of
+             zero.  This is the largest "small" request for the GNU C
+             library malloc.  */
+          enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
+
+          n = DEFAULT_MXFAST / s;
+          n += !n;
+        }
+    }
+  else
+    {
+      /* Set N = ceil (1.5 * N) so that progress is made if N == 1.
+         Check for overflow, so that N * S stays in size_t range.
+         The check is slightly conservative, but an exact check isn't
+         worth the trouble.  */
+      if ((size_t) -1 / 3 * 2 / s <= n)
+        xalloc_die ();
+      n += (n + 1) / 2;
+    }
+
+  *pn = n;
+  return xrealloc (p, n * s);
+}
+
+/* Return a pointer to a new buffer of N bytes.  This is like xmalloc,
+   except it returns char *.  */
+
+XALLOC_INLINE char *xcharalloc (size_t n)
+                    _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1));
+XALLOC_INLINE char *
+xcharalloc (size_t n)
+{
+  return XNMALLOC (n, char);
+}
+
+#ifdef __cplusplus
+}
+
+/* C++ does not allow conversions from void * to other pointer types
+   without a cast.  Use templates to work around the problem when
+   possible.  */
+
+template <typename T> inline T *
+xrealloc (T *p, size_t s)
+{
+  return (T *) xrealloc ((void *) p, s);
+}
+
+template <typename T> inline T *
+xnrealloc (T *p, size_t n, size_t s)
+{
+  return (T *) xnrealloc ((void *) p, n, s);
+}
+
+template <typename T> inline T *
+x2realloc (T *p, size_t *pn)
+{
+  return (T *) x2realloc ((void *) p, pn);
+}
+
+template <typename T> inline T *
+x2nrealloc (T *p, size_t *pn, size_t s)
+{
+  return (T *) x2nrealloc ((void *) p, pn, s);
+}
+
+template <typename T> inline T *
+xmemdup (T const *p, size_t s)
+{
+  return (T *) xmemdup ((void const *) p, s);
+}
+
+#endif
 
 
 #endif /* !XALLOC_H_ */
diff --git a/lib/xmalloc.c b/lib/xmalloc.c
index 687633c..9755985 100644
--- a/lib/xmalloc.c
+++ b/lib/xmalloc.c
@@ -1,12 +1,11 @@
 /* xmalloc.c -- malloc with out of memory checking
 
-   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2002-2006, 2008-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -14,173 +13,55 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
+
+#define XALLOC_INLINE _GL_EXTERN_INLINE
 
 #include "xalloc.h"
 
 #include <stdlib.h>
 #include <string.h>
 
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
 /* 1 if calloc is known to be compatible with GNU calloc.  This
    matters if we are not also using the calloc module, which defines
-   HAVE_CALLOC and supports the GNU API even on non-GNU platforms.  */
-#if defined HAVE_CALLOC || defined __GLIBC__
+   HAVE_CALLOC_GNU and supports the GNU API even on non-GNU platforms.  */
+#if defined HAVE_CALLOC_GNU || (defined __GLIBC__ && !defined __UCLIBC__)
 enum { HAVE_GNU_CALLOC = 1 };
 #else
 enum { HAVE_GNU_CALLOC = 0 };
 #endif
 
-/* Allocate an array of N objects, each with S bytes of memory,
-   dynamically, with error checking.  S must be nonzero.  */
-
-static inline void *
-xnmalloc_inline (size_t n, size_t s)
-{
-  void *p;
-  if (xalloc_oversized (n, s) || (! (p = malloc (n * s)) && n != 0))
-    xalloc_die ();
-  return p;
-}
-
-void *
-xnmalloc (size_t n, size_t s)
-{
-  return xnmalloc_inline (n, s);
-}
-
 /* Allocate N bytes of memory dynamically, with error checking.  */
 
 void *
 xmalloc (size_t n)
 {
-  return xnmalloc_inline (n, 1);
-}
-
-/* Change the size of an allocated block of memory P to an array of N
-   objects each of S bytes, with error checking.  S must be nonzero.  */
-
-static inline void *
-xnrealloc_inline (void *p, size_t n, size_t s)
-{
-  if (xalloc_oversized (n, s) || (! (p = realloc (p, n * s)) && n != 0))
+  void *p = malloc (n);
+  if (!p && n != 0)
     xalloc_die ();
   return p;
 }
 
-void *
-xnrealloc (void *p, size_t n, size_t s)
-{
-  return xnrealloc_inline (p, n, s);
-}
-
 /* Change the size of an allocated block of memory P to N bytes,
    with error checking.  */
 
 void *
 xrealloc (void *p, size_t n)
 {
-  return xnrealloc_inline (p, n, 1);
-}
-
-
-/* If P is null, allocate a block of at least *PN such objects;
-   otherwise, reallocate P so that it contains more than *PN objects
-   each of S bytes.  *PN must be nonzero unless P is null, and S must
-   be nonzero.  Set *PN to the new number of objects, and return the
-   pointer to the new block.  *PN is never set to zero, and the
-   returned pointer is never null.
-
-   Repeated reallocations are guaranteed to make progress, either by
-   allocating an initial block with a nonzero size, or by allocating a
-   larger block.
-
-   In the following implementation, nonzero sizes are doubled so that
-   repeated reallocations have O(N log N) overall cost rather than
-   O(N**2) cost, but the specification for this function does not
-   guarantee that sizes are doubled.
-
-   Here is an example of use:
-
-     int *p = NULL;
-     size_t used = 0;
-     size_t allocated = 0;
-
-     void
-     append_int (int value)
-       {
-	 if (used == allocated)
-	   p = x2nrealloc (p, &allocated, sizeof *p);
-	 p[used++] = value;
-       }
-
-   This causes x2nrealloc to allocate a block of some nonzero size the
-   first time it is called.
-
-   To have finer-grained control over the initial size, set *PN to a
-   nonzero value before calling this function with P == NULL.  For
-   example:
-
-     int *p = NULL;
-     size_t used = 0;
-     size_t allocated = 0;
-     size_t allocated1 = 1000;
-
-     void
-     append_int (int value)
-       {
-	 if (used == allocated)
-	   {
-	     p = x2nrealloc (p, &allocated1, sizeof *p);
-	     allocated = allocated1;
-	   }
-	 p[used++] = value;
-       }
-
-   */
-
-static inline void *
-x2nrealloc_inline (void *p, size_t *pn, size_t s)
-{
-  size_t n = *pn;
-
-  if (! p)
+  if (!n && p)
     {
-      if (! n)
-	{
-	  /* The approximate size to use for initial small allocation
-	     requests, when the invoking code specifies an old size of
-	     zero.  64 bytes is the largest "small" request for the
-	     GNU C library malloc.  */
-	  enum { DEFAULT_MXFAST = 64 };
-
-	  n = DEFAULT_MXFAST / s;
-	  n += !n;
-	}
-    }
-  else
-    {
-      if (SIZE_MAX / 2 / s < n)
-	xalloc_die ();
-      n *= 2;
+      /* The GNU and C99 realloc behaviors disagree here.  Act like
+         GNU, even if the underlying realloc is C99.  */
+      free (p);
+      return NULL;
     }
 
-  *pn = n;
-  return xrealloc (p, n * s);
-}
-
-void *
-x2nrealloc (void *p, size_t *pn, size_t s)
-{
-  return x2nrealloc_inline (p, pn, s);
+  p = realloc (p, n);
+  if (!p && n)
+    xalloc_die ();
+  return p;
 }
 
 /* If P is null, allocate a block of at least *PN bytes; otherwise,
@@ -192,7 +73,7 @@
 void *
 x2realloc (void *p, size_t *pn)
 {
-  return x2nrealloc_inline (p, pn, 1);
+  return x2nrealloc (p, pn, 1);
 }
 
 /* Allocate S bytes of zeroed memory dynamically, with error checking.
diff --git a/lib/xmemdup0.c b/lib/xmemdup0.c
new file mode 100644
index 0000000..8a80563
--- /dev/null
+++ b/lib/xmemdup0.c
@@ -0,0 +1,44 @@
+/* xmemdup0.c -- copy a block of arbitrary bytes, plus a trailing NUL
+
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "xmemdup0.h"
+#include "xalloc.h"
+
+#include <string.h>
+
+/* Clone an arbitrary block of bytes P of size S, with error checking,
+   and include a terminating NUL byte.  P is of type 'void const *',
+   to make it easier to use this with other mem* functions that return
+   'void *', but since appending a NUL byte only makes sense on bytes,
+   the return type is 'char *'.
+
+   The terminating NUL makes it safe to use strlen or rawmemchr to
+   check for embedded NUL; it also speeds up algorithms such as escape
+   sequence processing on arbitrary memory, by making it always safe
+   to read the byte after the escape character rather than having to
+   check if each escape character is the last byte in the object.  */
+
+char *
+xmemdup0 (void const *p, size_t s)
+{
+  char *result = xcharalloc (s + 1);
+  memcpy (result, p, s);
+  result[s] = 0;
+  return result;
+}
diff --git a/lib/xmemdup0.h b/lib/xmemdup0.h
new file mode 100644
index 0000000..1883b4d
--- /dev/null
+++ b/lib/xmemdup0.h
@@ -0,0 +1,41 @@
+/* xmemdup0.h -- copy a block of arbitrary bytes, plus a trailing NUL
+
+   Copyright (C) 2008-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef XMEMDUP_H_
+# define XMEMDUP_H_
+
+# include <stddef.h>
+
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* This function is always triggered when memory is exhausted.
+   It must be defined by the application, either explicitly
+   or by using gnulib's xalloc-die module.  This is the
+   function to call when one wants the program to die because of a
+   memory allocation failure.  */
+extern _Noreturn void xalloc_die (void);
+
+char *xmemdup0 (void const *p, size_t s);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif /* !XMEMDUP0_H_ */
diff --git a/lib/xsize.c b/lib/xsize.c
new file mode 100644
index 0000000..4b4914c
--- /dev/null
+++ b/lib/xsize.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define XSIZE_INLINE _GL_EXTERN_INLINE
+#include "xsize.h"
diff --git a/lib/xsize.h b/lib/xsize.h
new file mode 100644
index 0000000..a2942b9
--- /dev/null
+++ b/lib/xsize.h
@@ -0,0 +1,114 @@
+/* xsize.h -- Checked size_t computations.
+
+   Copyright (C) 2003, 2008-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _XSIZE_H
+#define _XSIZE_H
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get SIZE_MAX.  */
+#include <limits.h>
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef XSIZE_INLINE
+# define XSIZE_INLINE _GL_INLINE
+#endif
+
+/* The size of memory objects is often computed through expressions of
+   type size_t. Example:
+      void* p = malloc (header_size + n * element_size).
+   These computations can lead to overflow.  When this happens, malloc()
+   returns a piece of memory that is way too small, and the program then
+   crashes while attempting to fill the memory.
+   To avoid this, the functions and macros in this file check for overflow.
+   The convention is that SIZE_MAX represents overflow.
+   malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
+   implementation that uses mmap --, it's recommended to use size_overflow_p()
+   or size_in_bounds_p() before invoking malloc().
+   The example thus becomes:
+      size_t size = xsum (header_size, xtimes (n, element_size));
+      void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
+*/
+
+/* Convert an arbitrary value >= 0 to type size_t.  */
+#define xcast_size_t(N) \
+  ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
+
+/* Sum of two sizes, with overflow check.  */
+XSIZE_INLINE size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum (size_t size1, size_t size2)
+{
+  size_t sum = size1 + size2;
+  return (sum >= size1 ? sum : SIZE_MAX);
+}
+
+/* Sum of three sizes, with overflow check.  */
+XSIZE_INLINE size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum3 (size_t size1, size_t size2, size_t size3)
+{
+  return xsum (xsum (size1, size2), size3);
+}
+
+/* Sum of four sizes, with overflow check.  */
+XSIZE_INLINE size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
+{
+  return xsum (xsum (xsum (size1, size2), size3), size4);
+}
+
+/* Maximum of two sizes, with overflow check.  */
+XSIZE_INLINE size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xmax (size_t size1, size_t size2)
+{
+  /* No explicit check is needed here, because for any n:
+     max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX.  */
+  return (size1 >= size2 ? size1 : size2);
+}
+
+/* Multiplication of a count with an element size, with overflow check.
+   The count must be >= 0 and the element size must be > 0.
+   This is a macro, not a function, so that it works correctly even
+   when N is of a wider type and N > SIZE_MAX.  */
+#define xtimes(N, ELSIZE) \
+  ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
+
+/* Check for overflow.  */
+#define size_overflow_p(SIZE) \
+  ((SIZE) == SIZE_MAX)
+/* Check against overflow.  */
+#define size_in_bounds_p(SIZE) \
+  ((SIZE) != SIZE_MAX)
+
+_GL_INLINE_HEADER_END
+
+#endif /* _XSIZE_H */
diff --git a/lib/xstrndup.c b/lib/xstrndup.c
index a62d4bd..40ffdfe 100644
--- a/lib/xstrndup.c
+++ b/lib/xstrndup.c
@@ -1,11 +1,11 @@
 /* Duplicate a bounded initial segment of a string, with out-of-memory
    checking.
-   Copyright (C) 2003 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006-2007, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,17 +13,14 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
 
 /* Specification.  */
 #include "xstrndup.h"
 
-#include "strndup.h"
+#include <string.h>
 #include "xalloc.h"
 
 /* Return a newly allocated copy of at most N bytes of STRING.
diff --git a/lib/xstrndup.h b/lib/xstrndup.h
index 88354cf..765e9cb 100644
--- a/lib/xstrndup.h
+++ b/lib/xstrndup.h
@@ -1,11 +1,11 @@
 /* Duplicate a bounded initial segment of a string, with out-of-memory
    checking.
-   Copyright (C) 2003 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
@@ -13,8 +13,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
 
diff --git a/lib/yyerror.c b/lib/yyerror.c
index b4ce4ba..332e91e 100644
--- a/lib/yyerror.c
+++ b/lib/yyerror.c
@@ -1,23 +1,23 @@
 /* Yacc library error-printing function.
 
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
 
 #include <stdio.h>
 
@@ -26,5 +26,7 @@
 int
 yyerror (char const *message)
 {
-  return fprintf (stderr, "%s\n", message);
+  fputs (message, stderr);
+  fputc ('\n', stderr);
+  return 0;
 }
diff --git a/linux-lib/alloca.h b/linux-lib/alloca.h
new file mode 100644
index 0000000..a0d618b
--- /dev/null
+++ b/linux-lib/alloca.h
@@ -0,0 +1,64 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Memory allocation on the stack.
+
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2012 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 3, 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, see
+   <http://www.gnu.org/licenses/>.
+  */
+
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+   means there is a real alloca function.  */
+#ifndef _GL_ALLOCA_H
+#define _GL_ALLOCA_H
+
+/* alloca (N) returns a pointer to N bytes of memory
+   allocated on the stack, which will last until the function returns.
+   Use of alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns,
+     - for huge N (say, N >= 65536) - you never know how large (or small)
+       the stack is, and when the stack cannot fulfill the memory allocation
+       request, the program just crashes.
+ */
+
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _AIX
+#  define alloca __alloca
+# elif defined _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# elif defined __DECC && defined __VMS
+#  define alloca __ALLOCA
+# elif defined __TANDEM && defined _TNS_E_TARGET
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *_alloca (unsigned short);
+#  pragma intrinsic (_alloca)
+#  define alloca _alloca
+# else
+#  include <stddef.h>
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */
diff --git a/linux-lib/arg-nonnull.h b/linux-lib/arg-nonnull.h
new file mode 100644
index 0000000..f0dbac7
--- /dev/null
+++ b/linux-lib/arg-nonnull.h
@@ -0,0 +1,10 @@
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
diff --git a/linux-lib/c++defs.h b/linux-lib/c++defs.h
new file mode 100644
index 0000000..3fd6322
--- /dev/null
+++ b/linux-lib/c++defs.h
@@ -0,0 +1,255 @@
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
diff --git a/linux-lib/config.h b/linux-lib/config.h
new file mode 100644
index 0000000..d5456d5
--- /dev/null
+++ b/linux-lib/config.h
@@ -0,0 +1,2268 @@
+/* lib/config.h.  Generated from config.in.h by configure.  */
+/* lib/config.in.h.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+/* #undef AC_APPLE_UNIVERSAL_BUILD */
+
+/* Define to the number of bits in type 'ptrdiff_t'. */
+/* #undef BITSIZEOF_PTRDIFF_T */
+
+/* Define to the number of bits in type 'sig_atomic_t'. */
+/* #undef BITSIZEOF_SIG_ATOMIC_T */
+
+/* Define to the number of bits in type 'size_t'. */
+/* #undef BITSIZEOF_SIZE_T */
+
+/* Define to the number of bits in type 'wchar_t'. */
+/* #undef BITSIZEOF_WCHAR_T */
+
+/* Define to the number of bits in type 'wint_t'. */
+/* #undef BITSIZEOF_WINT_T */
+
+/* Define if you wish *printf() functions that have a safe handling of
+   non-IEEE-754 'long double' values. */
+#define CHECK_PRINTF_SAFE 1
+
+/* 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 */
+
+/* Define to 1 if using `alloca.c'. */
+/* #undef C_ALLOCA */
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'double'. */
+#define DBL_EXPBIT0_BIT 20
+
+/* Define as the word index where to find the exponent of 'double'. */
+#define DBL_EXPBIT0_WORD 1
+
+/* Define as the bit index in the word where to find the sign of 'double'. */
+/* #undef DBL_SIGNBIT_BIT */
+
+/* Define as the word index where to find the sign of 'double'. */
+/* #undef DBL_SIGNBIT_WORD */
+
+/* Define to 1 if // is a file system root distinct from /. */
+/* #undef DOUBLE_SLASH_IS_DISTINCT_ROOT */
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#define ENABLE_NLS 1
+
+/* Define this to 1 if F_DUPFD behavior does not match POSIX */
+/* #undef FCNTL_DUPFD_BUGGY */
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'float'. */
+#define FLT_EXPBIT0_BIT 23
+
+/* Define as the word index where to find the exponent of 'float'. */
+#define FLT_EXPBIT0_WORD 0
+
+/* Define as the bit index in the word where to find the sign of 'float'. */
+/* #undef FLT_SIGNBIT_BIT */
+
+/* Define as the word index where to find the sign of 'float'. */
+/* #undef FLT_SIGNBIT_WORD */
+
+/* Define to 1 if fopen() fails to recognize a trailing slash. */
+/* #undef FOPEN_TRAILING_SLASH_BUG */
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module close-stream shall be considered present. */
+#define GNULIB_CLOSE_STREAM 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module dirname shall be considered present. */
+#define GNULIB_DIRNAME 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fd-safer-flag shall be considered present. */
+#define GNULIB_FD_SAFER_FLAG 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fopen-safer shall be considered present. */
+#define GNULIB_FOPEN_SAFER 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fscanf shall be considered present. */
+#define GNULIB_FSCANF 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module malloc-gnu shall be considered present. */
+#define GNULIB_MALLOC_GNU 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module pipe2-safer shall be considered present. */
+#define GNULIB_PIPE2_SAFER 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module scanf shall be considered present. */
+#define GNULIB_SCANF 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module snprintf shall be considered present. */
+#define GNULIB_SNPRINTF 1
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module strerror shall be considered present. */
+#define GNULIB_STRERROR 1
+
+/* Define to 1 when the gnulib module calloc-posix should be tested. */
+#define GNULIB_TEST_CALLOC_POSIX 1
+
+/* Define to 1 when the gnulib module cloexec should be tested. */
+#define GNULIB_TEST_CLOEXEC 1
+
+/* Define to 1 when the gnulib module close should be tested. */
+#define GNULIB_TEST_CLOSE 1
+
+/* Define to 1 when the gnulib module dup2 should be tested. */
+#define GNULIB_TEST_DUP2 1
+
+/* Define to 1 when the gnulib module environ should be tested. */
+#define GNULIB_TEST_ENVIRON 1
+
+/* Define to 1 when the gnulib module fcntl should be tested. */
+#define GNULIB_TEST_FCNTL 1
+
+/* Define to 1 when the gnulib module fopen should be tested. */
+#define GNULIB_TEST_FOPEN 1
+
+/* Define to 1 when the gnulib module fprintf-posix should be tested. */
+#define GNULIB_TEST_FPRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module frexp should be tested. */
+#define GNULIB_TEST_FREXP 1
+
+/* Define to 1 when the gnulib module frexpl should be tested. */
+#define GNULIB_TEST_FREXPL 1
+
+/* Define to 1 when the gnulib module fstat should be tested. */
+#define GNULIB_TEST_FSTAT 1
+
+/* Define to 1 when the gnulib module getdelim should be tested. */
+#define GNULIB_TEST_GETDELIM 1
+
+/* Define to 1 when the gnulib module getdtablesize should be tested. */
+#define GNULIB_TEST_GETDTABLESIZE 1
+
+/* Define to 1 when the gnulib module getline should be tested. */
+#define GNULIB_TEST_GETLINE 1
+
+/* Define to 1 when the gnulib module getopt-gnu should be tested. */
+#define GNULIB_TEST_GETOPT_GNU 1
+
+/* Define to 1 when the gnulib module isnan should be tested. */
+#define GNULIB_TEST_ISNAN 1
+
+/* Define to 1 when the gnulib module isnand should be tested. */
+#define GNULIB_TEST_ISNAND 1
+
+/* Define to 1 when the gnulib module isnanf should be tested. */
+#define GNULIB_TEST_ISNANF 1
+
+/* Define to 1 when the gnulib module isnanl should be tested. */
+#define GNULIB_TEST_ISNANL 1
+
+/* Define to 1 when the gnulib module iswblank should be tested. */
+#define GNULIB_TEST_ISWBLANK 1
+
+/* Define to 1 when the gnulib module ldexpl should be tested. */
+#define GNULIB_TEST_LDEXPL 1
+
+/* Define to 1 when the gnulib module malloc-posix should be tested. */
+#define GNULIB_TEST_MALLOC_POSIX 1
+
+/* Define to 1 when the gnulib module mbrtowc should be tested. */
+#define GNULIB_TEST_MBRTOWC 1
+
+/* Define to 1 when the gnulib module mbschr should be tested. */
+#define GNULIB_TEST_MBSCHR 1
+
+/* Define to 1 when the gnulib module mbsinit should be tested. */
+#define GNULIB_TEST_MBSINIT 1
+
+/* Define to 1 when the gnulib module mbsrchr should be tested. */
+#define GNULIB_TEST_MBSRCHR 1
+
+/* Define to 1 when the gnulib module memchr should be tested. */
+#define GNULIB_TEST_MEMCHR 1
+
+/* Define to 1 when the gnulib module obstack-printf should be tested. */
+#define GNULIB_TEST_OBSTACK_PRINTF 1
+
+/* Define to 1 when the gnulib module open should be tested. */
+#define GNULIB_TEST_OPEN 1
+
+/* Define to 1 when the gnulib module perror should be tested. */
+#define GNULIB_TEST_PERROR 1
+
+/* Define to 1 when the gnulib module pipe2 should be tested. */
+#define GNULIB_TEST_PIPE2 1
+
+/* Define to 1 when the gnulib module posix_spawnattr_destroy should be
+   tested. */
+#define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1
+
+/* Define to 1 when the gnulib module posix_spawnattr_init should be tested.
+   */
+#define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1
+
+/* Define to 1 when the gnulib module posix_spawnattr_setflags should be
+   tested. */
+#define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1
+
+/* Define to 1 when the gnulib module posix_spawnattr_setsigmask should be
+   tested. */
+#define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1
+
+/* Define to 1 when the gnulib module posix_spawnp should be tested. */
+#define GNULIB_TEST_POSIX_SPAWNP 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_addclose should
+   be tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_adddup2 should
+   be tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_addopen should
+   be tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_destroy should
+   be tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1
+
+/* Define to 1 when the gnulib module posix_spawn_file_actions_init should be
+   tested. */
+#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1
+
+/* Define to 1 when the gnulib module printf-posix should be tested. */
+#define GNULIB_TEST_PRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module raise should be tested. */
+#define GNULIB_TEST_RAISE 1
+
+/* Define to 1 when the gnulib module rawmemchr should be tested. */
+#define GNULIB_TEST_RAWMEMCHR 1
+
+/* Define to 1 when the gnulib module realloc-posix should be tested. */
+#define GNULIB_TEST_REALLOC_POSIX 1
+
+/* Define to 1 when the gnulib module sigaction should be tested. */
+#define GNULIB_TEST_SIGACTION 1
+
+/* Define to 1 when the gnulib module signbit should be tested. */
+#define GNULIB_TEST_SIGNBIT 1
+
+/* Define to 1 when the gnulib module sigprocmask should be tested. */
+#define GNULIB_TEST_SIGPROCMASK 1
+
+/* Define to 1 when the gnulib module snprintf should be tested. */
+#define GNULIB_TEST_SNPRINTF 1
+
+/* Define to 1 when the gnulib module sprintf-posix should be tested. */
+#define GNULIB_TEST_SPRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module stat should be tested. */
+#define GNULIB_TEST_STAT 1
+
+/* Define to 1 when the gnulib module stpcpy should be tested. */
+#define GNULIB_TEST_STPCPY 1
+
+/* Define to 1 when the gnulib module strchrnul should be tested. */
+#define GNULIB_TEST_STRCHRNUL 1
+
+/* Define to 1 when the gnulib module strdup should be tested. */
+#define GNULIB_TEST_STRDUP 1
+
+/* Define to 1 when the gnulib module strerror should be tested. */
+#define GNULIB_TEST_STRERROR 1
+
+/* Define to 1 when the gnulib module strerror_r should be tested. */
+#define GNULIB_TEST_STRERROR_R 1
+
+/* Define to 1 when the gnulib module strndup should be tested. */
+#define GNULIB_TEST_STRNDUP 1
+
+/* Define to 1 when the gnulib module strnlen should be tested. */
+#define GNULIB_TEST_STRNLEN 1
+
+/* Define to 1 when the gnulib module strverscmp should be tested. */
+#define GNULIB_TEST_STRVERSCMP 1
+
+/* Define to 1 when the gnulib module unsetenv should be tested. */
+#define GNULIB_TEST_UNSETENV 1
+
+/* Define to 1 when the gnulib module vfprintf-posix should be tested. */
+#define GNULIB_TEST_VFPRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module vsnprintf should be tested. */
+#define GNULIB_TEST_VSNPRINTF 1
+
+/* Define to 1 when the gnulib module vsprintf-posix should be tested. */
+#define GNULIB_TEST_VSPRINTF_POSIX 1
+
+/* Define to 1 when the gnulib module waitpid should be tested. */
+#define GNULIB_TEST_WAITPID 1
+
+/* Define to 1 when the gnulib module wcwidth should be tested. */
+#define GNULIB_TEST_WCWIDTH 1
+
+/* Define to 1 if you have the `alarm' function. */
+#define HAVE_ALARM 1
+
+/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
+   may be supplied by this distribution. */
+#define HAVE_ALLOCA 1
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#define HAVE_ALLOCA_H 1
+
+/* Define to 1 if you have the <bp-sym.h> header file. */
+/* #undef HAVE_BP_SYM_H */
+
+/* Define if the 'calloc' function is POSIX compliant. */
+#define HAVE_CALLOC_POSIX 1
+
+/* Define to 1 if you have the `catgets' function. */
+#define HAVE_CATGETS 1
+
+/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+/* #undef HAVE_CFLOCALECOPYCURRENT */
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */
+
+/* Define to 1 if the system has the type `clock_t'. */
+#define HAVE_CLOCK_T 1
+
+/* Define to 1 if you have the `confstr' function. */
+/* #undef HAVE_CONFSTR */
+
+/* Define if the copysignf function is declared in <math.h> and available in
+   libc. */
+/* #undef HAVE_COPYSIGNF_IN_LIBC */
+
+/* Define if the copysignl function is declared in <math.h> and available in
+   libc. */
+/* #undef HAVE_COPYSIGNL_IN_LIBC */
+
+/* Define if the copysign function is declared in <math.h> and available in
+   libc. */
+/* #undef HAVE_COPYSIGN_IN_LIBC */
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#define HAVE_DCGETTEXT 1
+
+/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_CLEARERR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `clock', and to 0 if you don't.
+   */
+#define HAVE_DECL_CLOCK 0
+
+/* Define to 1 if you have the declaration of `copysign', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_COPYSIGN */
+
+/* Define to 1 if you have the declaration of `copysignf', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_COPYSIGNF */
+
+/* Define to 1 if you have the declaration of `copysignl', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_COPYSIGNL */
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_FEOF_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FERROR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FFLUSH_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FGETS_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FPUTC_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FPUTS_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FREAD_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FWRITE_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_GETCHAR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETC_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `getdelim', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETDELIM 1
+
+/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
+   */
+#define HAVE_DECL_GETENV 1
+
+/* Define to 1 if you have the declaration of `getline', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETLINE 1
+
+/* Define to 1 if you have the declaration of `getrusage', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETRUSAGE 1
+
+/* Define to 1 if you have the declaration of `iswblank', and to 0 if you
+   don't. */
+#define HAVE_DECL_ISWBLANK 1
+
+/* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_MBRTOWC */
+
+/* Define to 1 if you have the declaration of `mbsinit', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_MBSINIT */
+
+/* Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0
+   otherwise. */
+#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H 0
+
+/* Define to 1 if you have the declaration of `obstack_printf', and to 0 if
+   you don't. */
+#define HAVE_DECL_OBSTACK_PRINTF 1
+
+/* Define to 1 if you have the declaration of `program_invocation_name', and
+   to 0 if you don't. */
+#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1
+
+/* Define to 1 if you have the declaration of `program_invocation_short_name',
+   and to 0 if you don't. */
+#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1
+
+/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_PUTCHAR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_PUTC_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+   don't. */
+#define HAVE_DECL_SNPRINTF 1
+
+/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
+   */
+#define HAVE_DECL_STRDUP 1
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRERROR_R 1
+
+/* Define to 1 if you have the declaration of `strndup', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRNDUP 1
+
+/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRNLEN 1
+
+/* Define to 1 if you have the declaration of `sysconf', and to 0 if you
+   don't. */
+#define HAVE_DECL_SYSCONF 1
+
+/* Define to 1 if you have the declaration of `times', and to 0 if you don't.
+   */
+#define HAVE_DECL_TIMES 1
+
+/* Define to 1 if you have the declaration of `towlower', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_TOWLOWER */
+
+/* Define to 1 if you have the declaration of `unsetenv', and to 0 if you
+   don't. */
+#define HAVE_DECL_UNSETENV 1
+
+/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
+   don't. */
+#define HAVE_DECL_VSNPRINTF 1
+
+/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you
+   don't. */
+#define HAVE_DECL_WCWIDTH 1
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+   don't. */
+#define HAVE_DECL__SNPRINTF 0
+
+/* Define to 1 if you have the declaration of `__fpending', and to 0 if you
+   don't. */
+#define HAVE_DECL___FPENDING 1
+
+/* Define to 1 if you have the 'dup2' function. */
+#define HAVE_DUP2 1
+
+/* Define if you have the declaration of environ. */
+#define HAVE_ENVIRON_DECL 1
+
+/* Define to 1 if you have the `fcntl' function. */
+#define HAVE_FCNTL 1
+
+/* Define to 1 if you have the <features.h> header file. */
+#define HAVE_FEATURES_H 1
+
+/* Define to 1 if you have the `flockfile' function. */
+/* #undef HAVE_FLOCKFILE */
+
+/* Define if the frexpl function is available in libc. */
+#define HAVE_FREXPL_IN_LIBC 1
+
+/* Define if the frexp function is available in libc. */
+#define HAVE_FREXP_IN_LIBC 1
+
+/* Define to 1 if you have the `funlockfile' function. */
+/* #undef HAVE_FUNLOCKFILE */
+
+/* Define to 1 if you have the `getdelim' function. */
+#define HAVE_GETDELIM 1
+
+/* Define to 1 if you have the `getdtablesize' function. */
+#define HAVE_GETDTABLESIZE 1
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#define HAVE_GETOPT_LONG_ONLY 1
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#define HAVE_GETTEXT 1
+
+/* Define if you have the iconv() function and it works. */
+/* #undef HAVE_ICONV */
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#define HAVE_INTMAX_T 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+   declares uintmax_t. */
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
+
+/* Define to 1 if you have the `isascii' function. */
+#define HAVE_ISASCII 1
+
+/* Define if the isnan(double) function is available in libc. */
+#define HAVE_ISNAND_IN_LIBC 1
+
+/* Define if the isnan(float) function is available in libc. */
+#define HAVE_ISNANF_IN_LIBC 1
+
+/* Define if the isnan(long double) function is available in libc. */
+/* #undef HAVE_ISNANL_IN_LIBC */
+
+/* Define to 1 if you have the `iswblank' function. */
+#define HAVE_ISWBLANK 1
+
+/* Define to 1 if you have the `iswcntrl' function. */
+#define HAVE_ISWCNTRL 1
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#define HAVE_LANGINFO_CODESET 1
+
+/* Define if the ldexpl() function is available. */
+#define HAVE_LDEXPL 1
+
+/* Define if the ldexpl function is available in libc. */
+#define HAVE_LDEXPL_IN_LIBC 1
+
+/* Define if the ldexp function is available in libc. */
+#define HAVE_LDEXP_IN_LIBC 1
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if the system has the type 'long long int'. */
+#define HAVE_LONG_LONG_INT 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if your system has a GNU libc compatible 'malloc' function, and
+   to 0 otherwise. */
+#define HAVE_MALLOC_GNU 1
+
+/* Define if the 'malloc' function is POSIX compliant. */
+#define HAVE_MALLOC_POSIX 1
+
+/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+   config.h and <sys/mman.h>. */
+#define HAVE_MAP_ANONYMOUS 1
+
+/* Define to 1 if you have the <math.h> header file. */
+#define HAVE_MATH_H 1
+
+/* Define to 1 if you have the `mbrtowc' function. */
+#define HAVE_MBRTOWC 1
+
+/* Define to 1 if you have the `mbsinit' function. */
+#define HAVE_MBSINIT 1
+
+/* Define to 1 if <wchar.h> declares mbstate_t. */
+#define HAVE_MBSTATE_T 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mprotect' function. */
+#define HAVE_MPROTECT 1
+
+/* Define to 1 on MSVC platforms that have the "invalid parameter handler"
+   concept. */
+/* #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER */
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+/* #undef HAVE_NL_LANGINFO */
+
+/* Define to 1 if libc includes obstacks. */
+#define HAVE_OBSTACK 1
+
+/* Define to 1 if you have the `obstack_printf' function. */
+#define HAVE_OBSTACK_PRINTF 1
+
+/* Define to 1 if you have the <paths.h> header file. */
+/* #undef HAVE_PATHS_H */
+
+/* Define to 1 if you have the `pipe' function. */
+#define HAVE_PIPE 1
+
+/* Define to 1 if you have the `pipe2' function. */
+#define HAVE_PIPE2 1
+
+/* Define to 1 if you have the `posix_spawn' function. */
+#define HAVE_POSIX_SPAWN 1
+
+/* Define to 1 if the system has the type `posix_spawnattr_t'. */
+#define HAVE_POSIX_SPAWNATTR_T 1
+
+/* Define to 1 if the system has the type `posix_spawn_file_actions_t'. */
+#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1
+
+/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
+#define HAVE_PTHREAD_MUTEX_RECURSIVE 1
+
+/* Define if the POSIX multithreading library has read/write locks. */
+#define HAVE_PTHREAD_RWLOCK 1
+
+/* Define to 1 if you have the `raise' function. */
+#define HAVE_RAISE 1
+
+/* Define to 1 if you have the `rawmemchr' function. */
+#define HAVE_RAWMEMCHR 1
+
+/* Define to 1 if acosf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ACOSF 1
+
+/* Define to 1 if acosl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ACOSL 1
+
+/* Define to 1 if asinf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ASINF 1
+
+/* Define to 1 if asinl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ASINL 1
+
+/* Define to 1 if atanf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ATANF 1
+
+/* Define to 1 if atanl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ATANL 1
+
+/* Define to 1 if atoll is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ATOLL 1
+
+/* Define to 1 if btowc is declared even after undefining macros. */
+#define HAVE_RAW_DECL_BTOWC 1
+
+/* Define to 1 if canonicalize_file_name is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_CANONICALIZE_FILE_NAME 1
+
+/* Define to 1 if cbrt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CBRT 1
+
+/* Define to 1 if cbrtf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CBRTF 1
+
+/* Define to 1 if cbrtl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CBRTL 1
+
+/* Define to 1 if ceilf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CEILF 1
+
+/* Define to 1 if ceill is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CEILL 1
+
+/* Define to 1 if chdir is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CHDIR 1
+
+/* Define to 1 if chown is declared even after undefining macros. */
+#define HAVE_RAW_DECL_CHOWN 1
+
+/* Define to 1 if copysign is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COPYSIGN 1
+
+/* Define to 1 if copysignf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COPYSIGNF 1
+
+/* Define to 1 if copysignl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COPYSIGNL 1
+
+/* Define to 1 if cosf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COSF 1
+
+/* Define to 1 if coshf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COSHF 1
+
+/* Define to 1 if cosl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_COSL 1
+
+/* Define to 1 if dprintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_DPRINTF 1
+
+/* Define to 1 if dup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_DUP 1
+
+/* Define to 1 if dup2 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_DUP2 1
+
+/* Define to 1 if dup3 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_DUP3 1
+
+/* Define to 1 if endusershell is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ENDUSERSHELL 1
+
+/* Define to 1 if environ is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ENVIRON 1
+
+/* Define to 1 if euidaccess is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EUIDACCESS 1
+
+/* Define to 1 if exp2 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXP2 1
+
+/* Define to 1 if exp2f is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXP2F 1
+
+/* Define to 1 if exp2l is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXP2L 1
+
+/* Define to 1 if expf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPF 1
+
+/* Define to 1 if expl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPL 1
+
+/* Define to 1 if expm1 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPM1 1
+
+/* Define to 1 if expm1f is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPM1F 1
+
+/* Define to 1 if expm1l is declared even after undefining macros. */
+#define HAVE_RAW_DECL_EXPM1L 1
+
+/* Define to 1 if fabsf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FABSF 1
+
+/* Define to 1 if fabsl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FABSL 1
+
+/* Define to 1 if faccessat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FACCESSAT 1
+
+/* Define to 1 if fchdir is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FCHDIR 1
+
+/* Define to 1 if fchmodat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FCHMODAT 1
+
+/* Define to 1 if fchownat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FCHOWNAT 1
+
+/* Define to 1 if fcntl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FCNTL 1
+
+/* Define to 1 if fdatasync is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FDATASYNC 1
+
+/* Define to 1 if ffsl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FFSL 1
+
+/* Define to 1 if ffsll is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FFSLL 1
+
+/* Define to 1 if floorf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FLOORF 1
+
+/* Define to 1 if floorl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FLOORL 1
+
+/* Define to 1 if fma is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMA 1
+
+/* Define to 1 if fmaf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMAF 1
+
+/* Define to 1 if fmal is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMAL 1
+
+/* Define to 1 if fmod is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMOD 1
+
+/* Define to 1 if fmodf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMODF 1
+
+/* Define to 1 if fmodl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FMODL 1
+
+/* Define to 1 if fpurge is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_FPURGE */
+
+/* Define to 1 if frexpf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FREXPF 1
+
+/* Define to 1 if frexpl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FREXPL 1
+
+/* Define to 1 if fseeko is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FSEEKO 1
+
+/* Define to 1 if fstat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FSTAT 1
+
+/* Define to 1 if fstatat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FSTATAT 1
+
+/* Define to 1 if fsync is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FSYNC 1
+
+/* Define to 1 if ftello is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FTELLO 1
+
+/* Define to 1 if ftruncate is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FTRUNCATE 1
+
+/* Define to 1 if futimens is declared even after undefining macros. */
+#define HAVE_RAW_DECL_FUTIMENS 1
+
+/* Define to 1 if getcwd is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETCWD 1
+
+/* Define to 1 if getdelim is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETDELIM 1
+
+/* Define to 1 if getdomainname is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETDOMAINNAME 1
+
+/* Define to 1 if getdtablesize is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETDTABLESIZE 1
+
+/* Define to 1 if getgroups is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETGROUPS 1
+
+/* Define to 1 if gethostname is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETHOSTNAME 1
+
+/* Define to 1 if getline is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETLINE 1
+
+/* Define to 1 if getloadavg is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETLOADAVG 1
+
+/* Define to 1 if getlogin is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETLOGIN 1
+
+/* Define to 1 if getlogin_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETLOGIN_R 1
+
+/* Define to 1 if getpagesize is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETPAGESIZE 1
+
+/* Define to 1 if gets is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETS 1
+
+/* Define to 1 if getsubopt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETSUBOPT 1
+
+/* Define to 1 if getusershell is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GETUSERSHELL 1
+
+/* Define to 1 if grantpt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GRANTPT 1
+
+/* Define to 1 if group_member is declared even after undefining macros. */
+#define HAVE_RAW_DECL_GROUP_MEMBER 1
+
+/* Define to 1 if hypotf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_HYPOTF 1
+
+/* Define to 1 if hypotl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_HYPOTL 1
+
+/* Define to 1 if ilogb is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ILOGB 1
+
+/* Define to 1 if ilogbf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ILOGBF 1
+
+/* Define to 1 if ilogbl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ILOGBL 1
+
+/* Define to 1 if imaxabs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_IMAXABS 1
+
+/* Define to 1 if imaxdiv is declared even after undefining macros. */
+#define HAVE_RAW_DECL_IMAXDIV 1
+
+/* Define to 1 if initstate is declared even after undefining macros. */
+#define HAVE_RAW_DECL_INITSTATE 1
+
+/* Define to 1 if initstate_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_INITSTATE_R 1
+
+/* Define to 1 if isatty is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ISATTY 1
+
+/* Define to 1 if iswctype is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ISWCTYPE 1
+
+/* Define to 1 if lchmod is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LCHMOD 1
+
+/* Define to 1 if lchown is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LCHOWN 1
+
+/* Define to 1 if ldexpf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LDEXPF 1
+
+/* Define to 1 if ldexpl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LDEXPL 1
+
+/* Define to 1 if link is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LINK 1
+
+/* Define to 1 if linkat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LINKAT 1
+
+/* Define to 1 if log is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG 1
+
+/* Define to 1 if log10 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG10 1
+
+/* Define to 1 if log10f is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG10F 1
+
+/* Define to 1 if log10l is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG10L 1
+
+/* Define to 1 if log1p is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG1P 1
+
+/* Define to 1 if log1pf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG1PF 1
+
+/* Define to 1 if log1pl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG1PL 1
+
+/* Define to 1 if log2 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG2 1
+
+/* Define to 1 if log2f is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG2F 1
+
+/* Define to 1 if log2l is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOG2L 1
+
+/* Define to 1 if logb is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGB 1
+
+/* Define to 1 if logbf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGBF 1
+
+/* Define to 1 if logbl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGBL 1
+
+/* Define to 1 if logf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGF 1
+
+/* Define to 1 if logl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LOGL 1
+
+/* Define to 1 if lseek is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LSEEK 1
+
+/* Define to 1 if lstat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_LSTAT 1
+
+/* Define to 1 if mbrlen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBRLEN 1
+
+/* Define to 1 if mbrtowc is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBRTOWC 1
+
+/* Define to 1 if mbsinit is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBSINIT 1
+
+/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBSNRTOWCS 1
+
+/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBSRTOWCS 1
+
+/* Define to 1 if memmem is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MEMMEM 1
+
+/* Define to 1 if mempcpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MEMPCPY 1
+
+/* Define to 1 if memrchr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MEMRCHR 1
+
+/* Define to 1 if mkdirat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKDIRAT 1
+
+/* Define to 1 if mkdtemp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKDTEMP 1
+
+/* Define to 1 if mkfifo is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKFIFO 1
+
+/* Define to 1 if mkfifoat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKFIFOAT 1
+
+/* Define to 1 if mknod is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKNOD 1
+
+/* Define to 1 if mknodat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKNODAT 1
+
+/* Define to 1 if mkostemp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKOSTEMP 1
+
+/* Define to 1 if mkostemps is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKOSTEMPS 1
+
+/* Define to 1 if mkstemp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKSTEMP 1
+
+/* Define to 1 if mkstemps is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MKSTEMPS 1
+
+/* Define to 1 if modf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MODF 1
+
+/* Define to 1 if modff is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MODFF 1
+
+/* Define to 1 if modfl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MODFL 1
+
+/* Define to 1 if openat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_OPENAT 1
+
+/* Define to 1 if pclose is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PCLOSE 1
+
+/* Define to 1 if pipe is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PIPE 1
+
+/* Define to 1 if pipe2 is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PIPE2 1
+
+/* Define to 1 if popen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POPEN 1
+
+/* Define to 1 if posix_openpt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POSIX_OPENPT 1
+
+/* Define to 1 if posix_spawn is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN 1
+
+/* Define to 1 if posix_spawnattr_destroy is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY 1
+
+/* Define to 1 if posix_spawnattr_getflags is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS 1
+
+/* Define to 1 if posix_spawnattr_getpgroup is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP 1
+
+/* Define to 1 if posix_spawnattr_getschedparam is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM 1
+
+/* Define to 1 if posix_spawnattr_getschedpolicy is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY 1
+
+/* Define to 1 if posix_spawnattr_getsigdefault is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT 1
+
+/* Define to 1 if posix_spawnattr_getsigmask is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK 1
+
+/* Define to 1 if posix_spawnattr_init is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT 1
+
+/* Define to 1 if posix_spawnattr_setflags is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS 1
+
+/* Define to 1 if posix_spawnattr_setpgroup is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP 1
+
+/* Define to 1 if posix_spawnattr_setschedparam is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM 1
+
+/* Define to 1 if posix_spawnattr_setschedpolicy is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY 1
+
+/* Define to 1 if posix_spawnattr_setsigdefault is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT 1
+
+/* Define to 1 if posix_spawnattr_setsigmask is declared even after undefining
+   macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK 1
+
+/* Define to 1 if posix_spawnp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWNP 1
+
+/* Define to 1 if posix_spawn_file_actions_addclose is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE 1
+
+/* Define to 1 if posix_spawn_file_actions_adddup2 is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 1
+
+/* Define to 1 if posix_spawn_file_actions_addopen is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1
+
+/* Define to 1 if posix_spawn_file_actions_destroy is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1
+
+/* Define to 1 if posix_spawn_file_actions_init is declared even after
+   undefining macros. */
+#define HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT 1
+
+/* Define to 1 if powf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_POWF 1
+
+/* Define to 1 if pread is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PREAD 1
+
+/* Define to 1 if pthread_sigmask is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PTHREAD_SIGMASK 1
+
+/* Define to 1 if ptsname is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PTSNAME 1
+
+/* Define to 1 if ptsname_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PTSNAME_R 1
+
+/* Define to 1 if pwrite is declared even after undefining macros. */
+#define HAVE_RAW_DECL_PWRITE 1
+
+/* Define to 1 if random is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RANDOM 1
+
+/* Define to 1 if random_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RANDOM_R 1
+
+/* Define to 1 if rawmemchr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RAWMEMCHR 1
+
+/* Define to 1 if readlink is declared even after undefining macros. */
+#define HAVE_RAW_DECL_READLINK 1
+
+/* Define to 1 if readlinkat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_READLINKAT 1
+
+/* Define to 1 if realpath is declared even after undefining macros. */
+#define HAVE_RAW_DECL_REALPATH 1
+
+/* Define to 1 if remainder is declared even after undefining macros. */
+#define HAVE_RAW_DECL_REMAINDER 1
+
+/* Define to 1 if remainderf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_REMAINDERF 1
+
+/* Define to 1 if remainderl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_REMAINDERL 1
+
+/* Define to 1 if renameat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RENAMEAT 1
+
+/* Define to 1 if rint is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RINT 1
+
+/* Define to 1 if rintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RINTF 1
+
+/* Define to 1 if rintl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RINTL 1
+
+/* Define to 1 if rmdir is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RMDIR 1
+
+/* Define to 1 if round is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ROUND 1
+
+/* Define to 1 if roundf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ROUNDF 1
+
+/* Define to 1 if roundl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_ROUNDL 1
+
+/* Define to 1 if rpmatch is declared even after undefining macros. */
+#define HAVE_RAW_DECL_RPMATCH 1
+
+/* Define to 1 if setenv is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETENV 1
+
+/* Define to 1 if sethostname is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETHOSTNAME 1
+
+/* Define to 1 if setstate is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETSTATE 1
+
+/* Define to 1 if setstate_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETSTATE_R 1
+
+/* Define to 1 if setusershell is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SETUSERSHELL 1
+
+/* Define to 1 if sigaction is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGACTION 1
+
+/* Define to 1 if sigaddset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGADDSET 1
+
+/* Define to 1 if sigdelset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGDELSET 1
+
+/* Define to 1 if sigemptyset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGEMPTYSET 1
+
+/* Define to 1 if sigfillset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGFILLSET 1
+
+/* Define to 1 if sigismember is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGISMEMBER 1
+
+/* Define to 1 if sigpending is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGPENDING 1
+
+/* Define to 1 if sigprocmask is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SIGPROCMASK 1
+
+/* Define to 1 if sinf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SINF 1
+
+/* Define to 1 if sinhf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SINHF 1
+
+/* Define to 1 if sinl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SINL 1
+
+/* Define to 1 if sleep is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SLEEP 1
+
+/* Define to 1 if snprintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SNPRINTF 1
+
+/* Define to 1 if sqrtf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SQRTF 1
+
+/* Define to 1 if sqrtl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SQRTL 1
+
+/* Define to 1 if srandom is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SRANDOM 1
+
+/* Define to 1 if srandom_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SRANDOM_R 1
+
+/* Define to 1 if stat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STAT 1
+
+/* Define to 1 if stpcpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STPCPY 1
+
+/* Define to 1 if stpncpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STPNCPY 1
+
+/* Define to 1 if strcasestr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRCASESTR 1
+
+/* Define to 1 if strchrnul is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRCHRNUL 1
+
+/* Define to 1 if strdup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRDUP 1
+
+/* Define to 1 if strerror_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRERROR_R 1
+
+/* Define to 1 if strncat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNCAT 1
+
+/* Define to 1 if strndup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNDUP 1
+
+/* Define to 1 if strnlen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNLEN 1
+
+/* Define to 1 if strpbrk is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRPBRK 1
+
+/* Define to 1 if strsep is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRSEP 1
+
+/* Define to 1 if strsignal is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRSIGNAL 1
+
+/* Define to 1 if strtod is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOD 1
+
+/* Define to 1 if strtoimax is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOIMAX 1
+
+/* Define to 1 if strtok_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOK_R 1
+
+/* Define to 1 if strtoll is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOLL 1
+
+/* Define to 1 if strtoull is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOULL 1
+
+/* Define to 1 if strtoumax is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOUMAX 1
+
+/* Define to 1 if strverscmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRVERSCMP 1
+
+/* Define to 1 if symlink is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SYMLINK 1
+
+/* Define to 1 if symlinkat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_SYMLINKAT 1
+
+/* Define to 1 if tanf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TANF 1
+
+/* Define to 1 if tanhf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TANHF 1
+
+/* Define to 1 if tanl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TANL 1
+
+/* Define to 1 if tmpfile is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TMPFILE 1
+
+/* Define to 1 if towctrans is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TOWCTRANS 1
+
+/* Define to 1 if trunc is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TRUNC 1
+
+/* Define to 1 if truncf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TRUNCF 1
+
+/* Define to 1 if truncl is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TRUNCL 1
+
+/* Define to 1 if ttyname_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_TTYNAME_R 1
+
+/* Define to 1 if unlink is declared even after undefining macros. */
+#define HAVE_RAW_DECL_UNLINK 1
+
+/* Define to 1 if unlinkat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_UNLINKAT 1
+
+/* Define to 1 if unlockpt is declared even after undefining macros. */
+#define HAVE_RAW_DECL_UNLOCKPT 1
+
+/* Define to 1 if unsetenv is declared even after undefining macros. */
+#define HAVE_RAW_DECL_UNSETENV 1
+
+/* Define to 1 if usleep is declared even after undefining macros. */
+#define HAVE_RAW_DECL_USLEEP 1
+
+/* Define to 1 if utimensat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_UTIMENSAT 1
+
+/* Define to 1 if vdprintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_VDPRINTF 1
+
+/* Define to 1 if vsnprintf is declared even after undefining macros. */
+#define HAVE_RAW_DECL_VSNPRINTF 1
+
+/* Define to 1 if waitpid is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WAITPID 1
+
+/* Define to 1 if wcpcpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCPCPY 1
+
+/* Define to 1 if wcpncpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCPNCPY 1
+
+/* Define to 1 if wcrtomb is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCRTOMB 1
+
+/* Define to 1 if wcscasecmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCASECMP 1
+
+/* Define to 1 if wcscat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCAT 1
+
+/* Define to 1 if wcschr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCHR 1
+
+/* Define to 1 if wcscmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCMP 1
+
+/* Define to 1 if wcscoll is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCOLL 1
+
+/* Define to 1 if wcscpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCPY 1
+
+/* Define to 1 if wcscspn is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSCSPN 1
+
+/* Define to 1 if wcsdup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSDUP 1
+
+/* Define to 1 if wcslen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSLEN 1
+
+/* Define to 1 if wcsncasecmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNCASECMP 1
+
+/* Define to 1 if wcsncat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNCAT 1
+
+/* Define to 1 if wcsncmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNCMP 1
+
+/* Define to 1 if wcsncpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNCPY 1
+
+/* Define to 1 if wcsnlen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNLEN 1
+
+/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSNRTOMBS 1
+
+/* Define to 1 if wcspbrk is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSPBRK 1
+
+/* Define to 1 if wcsrchr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSRCHR 1
+
+/* Define to 1 if wcsrtombs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSRTOMBS 1
+
+/* Define to 1 if wcsspn is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSSPN 1
+
+/* Define to 1 if wcsstr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSSTR 1
+
+/* Define to 1 if wcstok is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSTOK 1
+
+/* Define to 1 if wcswidth is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSWIDTH 1
+
+/* Define to 1 if wcsxfrm is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSXFRM 1
+
+/* Define to 1 if wctob is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCTOB 1
+
+/* Define to 1 if wctrans is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCTRANS 1
+
+/* Define to 1 if wctype is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCTYPE 1
+
+/* Define to 1 if wcwidth is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCWIDTH 1
+
+/* Define to 1 if wmemchr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMCHR 1
+
+/* Define to 1 if wmemcmp is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMCMP 1
+
+/* Define to 1 if wmemcpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMCPY 1
+
+/* Define to 1 if wmemmove is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMMOVE 1
+
+/* Define to 1 if wmemset is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WMEMSET 1
+
+/* Define to 1 if _Exit is declared even after undefining macros. */
+#define HAVE_RAW_DECL__EXIT 1
+
+/* Define if the 'realloc' function is POSIX compliant. */
+#define HAVE_REALLOC_POSIX 1
+
+/* Define to 1 if 'long double' and 'double' have the same representation. */
+/* #undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE */
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setparam' function. */
+/* #undef HAVE_SCHED_SETPARAM */
+
+/* Define to 1 if you have the `sched_setscheduler' function. */
+/* #undef HAVE_SCHED_SETSCHEDULER */
+
+/* Define to 1 if you have the `setegid' function. */
+/* #undef HAVE_SETEGID */
+
+/* Define to 1 if you have the `seteuid' function. */
+/* #undef HAVE_SETEUID */
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the `sigaction' function. */
+#define HAVE_SIGACTION 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+#define HAVE_SIGALTSTACK 1
+
+/* Define to 1 if the system has the type `siginfo_t'. */
+/* #undef HAVE_SIGINFO_T */
+
+/* Define to 1 if you have the `siginterrupt' function. */
+#define HAVE_SIGINTERRUPT 1
+
+/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
+/* #undef HAVE_SIGNED_SIG_ATOMIC_T */
+
+/* Define to 1 if 'wchar_t' is a signed integer type. */
+/* #undef HAVE_SIGNED_WCHAR_T */
+
+/* Define to 1 if 'wint_t' is a signed integer type. */
+/* #undef HAVE_SIGNED_WINT_T */
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `sig_atomic_t'. */
+#define HAVE_SIG_ATOMIC_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+#define HAVE_SNPRINTF 1
+
+/* Define if the return value of the snprintf function is the number of of
+   bytes (excluding the terminating NUL) that would have been produced if the
+   buffer had been large enough. */
+#define HAVE_SNPRINTF_RETVAL_C99 1
+
+/* Define to 1 if you have the <spawn.h> header file. */
+#define HAVE_SPAWN_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+   uintmax_t. */
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+
+/* Define to 1 if you have the <stdio_ext.h> header file. */
+#define HAVE_STDIO_EXT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `stpcpy' function. */
+#define HAVE_STPCPY 1
+
+/* Define to 1 if you have the `strchrnul' function. */
+#define HAVE_STRCHRNUL 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror_r' function. */
+#define HAVE_STRERROR_R 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strndup' function. */
+#define HAVE_STRNDUP 1
+
+/* Define to 1 if you have the `strnlen' function. */
+#define HAVE_STRNLEN 1
+
+/* Define to 1 if you have the `strtoul' function. */
+#define HAVE_STRTOUL 1
+
+/* Define to 1 if `sa_sigaction' is a member of `struct sigaction'. */
+#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1
+
+/* Define to 1 if the system has the type `struct tms'. */
+#define HAVE_STRUCT_TMS 1
+
+/* Define to 1 if you have the `strverscmp' function. */
+#define HAVE_STRVERSCMP 1
+
+/* Define to 1 if you have the `symlink' function. */
+#define HAVE_SYMLINK 1
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+/* #undef HAVE_SYS_BITYPES_H */
+
+/* Define to 1 if you have the <sys/inttypes.h> header file. */
+/* #undef HAVE_SYS_INTTYPES_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#define HAVE_SYS_MMAN_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#define HAVE_SYS_RESOURCE_H 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `times' function. */
+#define HAVE_TIMES 1
+
+/* Define to 1 if you have the `towlower' function. */
+#define HAVE_TOWLOWER 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `unsetenv' function. */
+#define HAVE_UNSETENV 1
+
+/* Define to 1 if the system has the type 'unsigned long long int'. */
+#define HAVE_UNSIGNED_LONG_LONG_INT 1
+
+/* Define to 1 if you have the `vasnprintf' function. */
+/* #undef HAVE_VASNPRINTF */
+
+/* Define to 1 if you have the `vfork' function. */
+/* #undef HAVE_VFORK */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#define HAVE_VSNPRINTF 1
+
+/* Define to 1 if you have the `waitid' function. */
+#define HAVE_WAITID 1
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#define HAVE_WCHAR_H 1
+
+/* Define if you have the 'wchar_t' type. */
+#define HAVE_WCHAR_T 1
+
+/* Define to 1 if you have the `wcrtomb' function. */
+#define HAVE_WCRTOMB 1
+
+/* Define to 1 if you have the `wcslen' function. */
+#define HAVE_WCSLEN 1
+
+/* Define to 1 if you have the `wcsnlen' function. */
+#define HAVE_WCSNLEN 1
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#define HAVE_WCTYPE_H 1
+
+/* Define to 1 if you have the `wcwidth' function. */
+#define HAVE_WCWIDTH 1
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+/* #undef HAVE_WINSOCK2_H */
+
+/* Define if you have the 'wint_t' type. */
+#define HAVE_WINT_T 1
+
+/* Define to 1 if O_NOATIME works. */
+#define HAVE_WORKING_O_NOATIME 1
+
+/* Define to 1 if O_NOFOLLOW works. */
+#define HAVE_WORKING_O_NOFOLLOW 1
+
+/* Define if you have the posix_spawn and posix_spawnp functions and they
+   work. */
+#define HAVE_WORKING_POSIX_SPAWN 1
+
+/* Define to 1 if the system has the type `_Bool'. */
+#define HAVE__BOOL 1
+
+/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */
+/* #undef HAVE__SET_INVALID_PARAMETER_HANDLER */
+
+/* Define to 1 if you have the `__fpending' function. */
+#define HAVE___FPENDING 1
+
+/* Define to 1 if you have the `__fseterr' function. */
+/* #undef HAVE___FSETERR */
+
+/* Define to 1 if you have the `__xpg_strerror_r' function. */
+#define HAVE___XPG_STRERROR_R 1
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'long double'. */
+#define LDBL_EXPBIT0_BIT 0
+
+/* Define as the word index where to find the exponent of 'long double'. */
+#define LDBL_EXPBIT0_WORD 2
+
+/* Define as the bit index in the word where to find the sign of 'long
+   double'. */
+/* #undef LDBL_SIGNBIT_BIT */
+
+/* Define as the word index where to find the sign of 'long double'. */
+/* #undef LDBL_SIGNBIT_WORD */
+
+/* Define to the GNU M4 executable name. */
+#define M4 "/usr/bin/m4"
+
+/* Define to "-g" if GNU M4 supports -g, otherwise to "". */
+#define M4_GNU_OPTION "--gnu"
+
+/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
+/* #undef MAP_ANONYMOUS */
+
+/* Define if the mbrtowc function has the NULL pwc argument bug. */
+/* #undef MBRTOWC_NULL_ARG1_BUG */
+
+/* Define if the mbrtowc function has the NULL string argument bug. */
+/* #undef MBRTOWC_NULL_ARG2_BUG */
+
+/* Define if the mbrtowc function does not return 0 for a NUL character. */
+/* #undef MBRTOWC_NUL_RETVAL_BUG */
+
+/* Define if the mbrtowc function returns a wrong return value. */
+/* #undef MBRTOWC_RETVAL_BUG */
+
+/* Define to 1 if assertions should be disabled. */
+/* #undef NDEBUG */
+
+/* Define if the vasnprintf implementation needs special code for the 'a' and
+   'A' directives. */
+/* #undef NEED_PRINTF_DIRECTIVE_A */
+
+/* Define if the vasnprintf implementation needs special code for the 'F'
+   directive. */
+/* #undef NEED_PRINTF_DIRECTIVE_F */
+
+/* Define if the vasnprintf implementation needs special code for the 'ls'
+   directive. */
+/* #undef NEED_PRINTF_DIRECTIVE_LS */
+
+/* Define if the vasnprintf implementation needs special code for 'double'
+   arguments. */
+/* #undef NEED_PRINTF_DOUBLE */
+
+/* Define if the vasnprintf implementation needs special code for surviving
+   out-of-memory conditions. */
+/* #undef NEED_PRINTF_ENOMEM */
+
+/* Define if the vasnprintf implementation needs special code for the ' flag.
+   */
+/* #undef NEED_PRINTF_FLAG_GROUPING */
+
+/* Define if the vasnprintf implementation needs special code for the '-'
+   flag. */
+/* #undef NEED_PRINTF_FLAG_LEFTADJUST */
+
+/* Define if the vasnprintf implementation needs special code for the 0 flag.
+   */
+/* #undef NEED_PRINTF_FLAG_ZERO */
+
+/* Define if the vasnprintf implementation needs special code for infinite
+   'double' arguments. */
+/* #undef NEED_PRINTF_INFINITE_DOUBLE */
+
+/* Define if the vasnprintf implementation needs special code for infinite
+   'long double' arguments. */
+#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1
+
+/* Define if the vasnprintf implementation needs special code for 'long
+   double' arguments. */
+/* #undef NEED_PRINTF_LONG_DOUBLE */
+
+/* Define if the vasnprintf implementation needs special code for supporting
+   large precisions without arbitrary bounds. */
+/* #undef NEED_PRINTF_UNBOUNDED_PRECISION */
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+/* #undef NO_MINUS_C_MINUS_O */
+
+/* Define to 1 if open() fails to recognize a trailing slash. */
+/* #undef OPEN_TRAILING_SLASH_BUG */
+
+/* Name of package */
+#define PACKAGE "bison"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "bug-bison@gnu.org"
+
+/* The copyright year for this package */
+#define PACKAGE_COPYRIGHT_YEAR 2012
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "GNU Bison"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "GNU Bison 2.7"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "bison"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.gnu.org/software/bison/"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "2.7"
+
+/* the number of pending output bytes on stream 'fp' */
+/* #undef PENDING_OUTPUT_N_BYTES */
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+/* #undef PRI_MACROS_BROKEN */
+
+/* Define to the type that is the result of default argument promotions of
+   type mode_t. */
+#define PROMOTED_MODE_T mode_t
+
+/* Define if the pthread_in_use() detection is hard. */
+/* #undef PTHREAD_IN_USE_DETECTION_HARD */
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'ptrdiff_t'. */
+/* #undef PTRDIFF_T_SUFFIX */
+
+/* Define if fprintf is overridden by a POSIX compliant gnulib implementation.
+   */
+#define REPLACE_FPRINTF_POSIX 1
+
+/* Define to 1 if stat needs help when passed a directory name with a trailing
+   slash */
+/* #undef REPLACE_FUNC_STAT_DIR */
+
+/* Define to 1 if stat needs help when passed a file name with a trailing
+   slash */
+/* #undef REPLACE_FUNC_STAT_FILE */
+
+/* Define if printf is overridden by a POSIX compliant gnulib implementation.
+   */
+#define REPLACE_PRINTF_POSIX 1
+
+/* Define to 1 if strerror(0) does not return a message implying success. */
+/* #undef REPLACE_STRERROR_0 */
+
+/* Define if vasnprintf exists but is overridden by gnulib. */
+/* #undef REPLACE_VASNPRINTF */
+
+/* Define if vfprintf is overridden by a POSIX compliant gnulib
+   implementation. */
+#define REPLACE_VFPRINTF_POSIX 1
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'sig_atomic_t'. */
+/* #undef SIG_ATOMIC_T_SUFFIX */
+
+/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+/* # undef SIZE_MAX */
+#endif
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'size_t'. */
+/* #undef SIZE_T_SUFFIX */
+
+/* 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 */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if strerror_r returns char *. */
+#define STRERROR_R_CHAR_P 1
+
+/* Define to the prefix of C symbols at the assembler and linker level, either
+   an underscore or empty. */
+#define USER_LABEL_PREFIX 
+
+/* Define if the POSIX multithreading library can be used. */
+#define USE_POSIX_THREADS 1
+
+/* Define if references to the POSIX multithreading library should be made
+   weak. */
+#define USE_POSIX_THREADS_WEAK 1
+
+/* Define if the GNU Pth multithreading library can be used. */
+/* #undef USE_PTH_THREADS */
+
+/* Define if references to the GNU Pth multithreading library should be made
+   weak. */
+/* #undef USE_PTH_THREADS_WEAK */
+
+/* Define if the old Solaris multithreading library can be used. */
+/* #undef USE_SOLARIS_THREADS */
+
+/* Define if references to the old Solaris multithreading library should be
+   made weak. */
+/* #undef USE_SOLARIS_THREADS_WEAK */
+
+/* Define to 1 if you want getc etc. to use unlocked I/O if available.
+   Unlocked I/O can improve performance in unithreaded apps, but it is not
+   safe for multithreaded apps. */
+#define USE_UNLOCKED_IO 1
+
+/* Define if the native Windows multithreading API can be used. */
+/* #undef USE_WINDOWS_THREADS */
+
+/* Version number of package */
+#define VERSION "2.7"
+
+/* Define to 1 if unsetenv returns void instead of int. */
+/* #undef VOID_UNSETENV */
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wchar_t'. */
+/* #undef WCHAR_T_SUFFIX */
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wint_t'. */
+/* #undef WINT_T_SUFFIX */
+
+/* Define if using the dmalloc debugging malloc package */
+/* #undef WITH_DMALLOC */
+
+/* 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__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+/* #  undef WORDS_BIGENDIAN */
+# endif
+#endif
+
+/* Define to 1 to internationalize bison runtime messages. */
+#define YYENABLE_NLS 1
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+   `char[]'. */
+#define YYTEXT_POINTER 1
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define to 1 if Gnulib overrides 'struct stat' on Windows so that struct
+   stat.st_size becomes 64-bit. */
+/* #undef _GL_WINDOWS_64_BIT_ST_SIZE */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to 1 if on MINIX. */
+/* #undef _MINIX */
+
+/* The _Noreturn keyword of C11.  */
+#if ! (defined _Noreturn \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+/* #undef _POSIX_1_SOURCE */
+
+/* Define to 1 if you need to in order for 'stat' and other things to work. */
+/* #undef _POSIX_SOURCE */
+
+/* Define to 500 only on HP-UX. */
+/* #undef _XOPEN_SOURCE */
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# define _ALL_SOURCE 1
+#endif
+/* Enable general extensions on Mac OS X.  */
+#ifndef _DARWIN_C_SOURCE
+# define _DARWIN_C_SOURCE 1
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS 1
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# define _TANDEM_SOURCE 1
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+
+
+/* Define to rpl_ if the getopt replacement functions and variables should be
+   used. */
+/* #undef __GETOPT_PREFIX */
+
+/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
+   _GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
+   _GL_INLINE_HEADER_BEGIN contains useful stuff to put
+     in an include file, before uses of _GL_INLINE.
+     It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
+     when FOO is an inline function in the header; see
+     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
+   _GL_INLINE_HEADER_END contains useful stuff to put
+     in the same include file, after uses of _GL_INLINE.
+
+   Suppress the use of extern inline on Apple's platforms,
+   as Libc-825.25 (2012-09-19) is incompatible with it; see
+   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
+   Perhaps Apple will fix this some day.  */
+#if ((__GNUC__ \
+      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+      : 199901L <= __STDC_VERSION__) \
+     && !defined __APPLE__)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
+# if __GNUC_GNU_INLINE__
+   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
+#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+#  define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+#else
+# define _GL_INLINE static _GL_UNUSED
+# define _GL_EXTERN_INLINE static _GL_UNUSED
+#endif
+
+#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+#  define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+#  define _GL_INLINE_HEADER_CONST_PRAGMA \
+     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+    _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+/* #undef gid_t */
+
+/* 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
+
+/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */
+/* #undef intmax_t */
+
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for Mac OS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
+
+/* Define to a type if <wchar.h> does not define. */
+/* #undef mbstate_t */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef mode_t */
+
+/* Define to the type of st_nlink in struct stat, or a supertype. */
+/* #undef nlink_t */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef pid_t */
+
+/* Define as the type of the result of subtracting two pointers, if the system
+   doesn't define it. */
+/* #undef ptrdiff_t */
+
+/* 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.  */
+#define restrict __restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define as an integer type suitable for memory locations that can be
+   accessed atomically even in the presence of asynchronous signals. */
+/* #undef sig_atomic_t */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
+
+/* Define as a signed type of the same size as size_t. */
+/* #undef ssize_t */
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+/* #undef uid_t */
+
+/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The __const__ attribute was added in gcc 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
diff --git a/linux-lib/configmake.h b/linux-lib/configmake.h
new file mode 100644
index 0000000..2a32931
--- /dev/null
+++ b/linux-lib/configmake.h
@@ -0,0 +1,28 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define PREFIX "/usr/local"
+#define EXEC_PREFIX "/usr/local"
+#define BINDIR "/usr/local/bin"
+#define SBINDIR "/usr/local/sbin"
+#define LIBEXECDIR "/usr/local/libexec"
+#define DATAROOTDIR "/usr/local/share"
+#define DATADIR "/usr/local/share"
+#define SYSCONFDIR "/usr/local/etc"
+#define SHAREDSTATEDIR "/usr/local/com"
+#define LOCALSTATEDIR "/usr/local/var"
+#define INCLUDEDIR "/usr/local/include"
+#define OLDINCLUDEDIR "/usr/include"
+#define DOCDIR "/usr/local/share/doc/bison"
+#define INFODIR "/usr/local/share/info"
+#define HTMLDIR "/usr/local/share/doc/bison"
+#define DVIDIR "/usr/local/share/doc/bison"
+#define PDFDIR "/usr/local/share/doc/bison"
+#define PSDIR "/usr/local/share/doc/bison"
+#define LIBDIR "/usr/local/lib"
+#define LISPDIR "/usr/local/share/emacs/site-lisp"
+#define LOCALEDIR "/usr/local/share/locale"
+#define MANDIR "/usr/local/share/man"
+// PKGDATADIR is now passed in from the build system.
+//#define PKGDATADIR "/usr/local/share/bison"
+#define PKGINCLUDEDIR "/usr/local/include/bison"
+#define PKGLIBDIR "/usr/local/lib/bison"
+#define PKGLIBEXECDIR "/usr/local/libexec/bison"
diff --git a/linux-lib/fcntl.h b/linux-lib/fcntl.h
new file mode 100644
index 0000000..9519eed
--- /dev/null
+++ b/linux-lib/fcntl.h
@@ -0,0 +1,659 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Like <fcntl.h>, but with non-working flags defined to 0.
+
+   Copyright (C) 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* written by Paul Eggert */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_system_fcntl_h
+/* Special invocation convention.  */
+
+/* Needed before <sys/stat.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+   <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
+   But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
+   extern "C" { ... } block, which leads to errors in C++ mode with the
+   overridden <sys/stat.h> from gnulib.  These errors are known to be gone
+   with g++ version >= 4.3.  */
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
+# include <sys/stat.h>
+#endif
+#include_next <fcntl.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_FCNTL_H
+
+/* Needed before <sys/stat.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+   <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
+   But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
+   extern "C" { ... } block, which leads to errors in C++ mode with the
+   overridden <sys/stat.h> from gnulib.  These errors are known to be gone
+   with g++ version >= 4.3.  */
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
+# include <sys/stat.h>
+#endif
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <fcntl.h>
+
+#ifndef _GL_FCNTL_H
+#define _GL_FCNTL_H
+
+#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
+# include <unistd.h>
+#endif
+
+/* Native Windows platforms declare open(), creat() in <io.h>.  */
+#if (1 || defined GNULIB_POSIXCHECK) \
+    && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Declare overridden functions.  */
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fcntl
+#   define fcntl rpl_fcntl
+#  endif
+_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
+_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
+#  endif
+_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
+# endif
+_GL_CXXALIASWARN (fcntl);
+#elif defined GNULIB_POSIXCHECK
+# undef fcntl
+# if HAVE_RAW_DECL_FCNTL
+_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
+                 "use gnulib module fcntl for portability");
+# endif
+#endif
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef open
+#   define open rpl_open
+#  endif
+_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                             _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+# else
+_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+# endif
+/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
+   default argument.  _GL_CXXALIASWARN does not work in this case.  */
+# if !defined __hpux
+_GL_CXXALIASWARN (open);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef open
+/* Assume open is always declared.  */
+_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
+                 "use gnulib module open for portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef openat
+#   define openat rpl_openat
+#  endif
+_GL_FUNCDECL_RPL (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# endif
+_GL_CXXALIASWARN (openat);
+#elif defined GNULIB_POSIXCHECK
+# undef openat
+# if HAVE_RAW_DECL_OPENAT
+_GL_WARN_ON_USE (openat, "openat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+/* Fix up the FD_* macros, only known to be missing on mingw.  */
+
+#ifndef FD_CLOEXEC
+# define FD_CLOEXEC 1
+#endif
+
+/* Fix up the supported F_* macros.  Intentionally leave other F_*
+   macros undefined.  Only known to be missing on mingw.  */
+
+#ifndef F_DUPFD_CLOEXEC
+# define F_DUPFD_CLOEXEC 0x40000000
+/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise.  */
+# define GNULIB_defined_F_DUPFD_CLOEXEC 1
+#else
+# define GNULIB_defined_F_DUPFD_CLOEXEC 0
+#endif
+
+#ifndef F_DUPFD
+# define F_DUPFD 1
+#endif
+
+#ifndef F_GETFD
+# define F_GETFD 2
+#endif
+
+/* Fix up the O_* macros.  */
+
+#if !defined O_DIRECT && defined O_DIRECTIO
+/* Tru64 spells it 'O_DIRECTIO'.  */
+# define O_DIRECT O_DIRECTIO
+#endif
+
+#if !defined O_CLOEXEC && defined O_NOINHERIT
+/* Mingw spells it 'O_NOINHERIT'.  */
+# define O_CLOEXEC O_NOINHERIT
+#endif
+
+#ifndef O_CLOEXEC
+# define O_CLOEXEC 0
+#endif
+
+#ifndef O_DIRECT
+# define O_DIRECT 0
+#endif
+
+#ifndef O_DIRECTORY
+# define O_DIRECTORY 0
+#endif
+
+#ifndef O_DSYNC
+# define O_DSYNC 0
+#endif
+
+#ifndef O_EXEC
+# define O_EXEC O_RDONLY /* This is often close enough in older systems.  */
+#endif
+
+#ifndef O_IGNORE_CTTY
+# define O_IGNORE_CTTY 0
+#endif
+
+#ifndef O_NDELAY
+# define O_NDELAY 0
+#endif
+
+#ifndef O_NOATIME
+# define O_NOATIME 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK O_NDELAY
+#endif
+
+/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
+   value of O_NONBLOCK.  Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
+   or to 0 as fallback.  */
+#if 0
+# if O_NONBLOCK
+#  define GNULIB_defined_O_NONBLOCK 0
+# else
+#  define GNULIB_defined_O_NONBLOCK 1
+#  undef O_NONBLOCK
+#  define O_NONBLOCK 0x40000000
+# endif
+#endif
+
+#ifndef O_NOCTTY
+# define O_NOCTTY 0
+#endif
+
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+#ifndef O_NOLINK
+# define O_NOLINK 0
+#endif
+
+#ifndef O_NOLINKS
+# define O_NOLINKS 0
+#endif
+
+#ifndef O_NOTRANS
+# define O_NOTRANS 0
+#endif
+
+#ifndef O_RSYNC
+# define O_RSYNC 0
+#endif
+
+#ifndef O_SEARCH
+# define O_SEARCH O_RDONLY /* This is often close enough in older systems.  */
+#endif
+
+#ifndef O_SYNC
+# define O_SYNC 0
+#endif
+
+#ifndef O_TTY_INIT
+# define O_TTY_INIT 0
+#endif
+
+#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
+# undef O_ACCMODE
+# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is usually declared in fcntl.h  */
+#if !defined O_BINARY && defined _O_BINARY
+  /* For MSC-compatible compilers.  */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+
+#if defined __BEOS__ || defined __HAIKU__
+  /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect.  */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+# define O_TEXT 0
+#endif
+
+/* Fix up the AT_* macros.  */
+
+/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
+   value exceeds INT_MAX, so its use as an int doesn't conform to the
+   C standard, and GCC and Sun C complain in some cases.  If the bug
+   is present, undef AT_FDCWD here, so it can be redefined below.  */
+#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
+# undef AT_FDCWD
+#endif
+
+/* Use the same bit pattern as Solaris 9, but with the proper
+   signedness.  The bit pattern is important, in case this actually is
+   Solaris with the above workaround.  */
+#ifndef AT_FDCWD
+# define AT_FDCWD (-3041965)
+#endif
+
+/* Use the same values as Solaris 9.  This shouldn't matter, but
+   there's no real reason to differ.  */
+#ifndef AT_SYMLINK_NOFOLLOW
+# define AT_SYMLINK_NOFOLLOW 4096
+#endif
+
+#ifndef AT_REMOVEDIR
+# define AT_REMOVEDIR 1
+#endif
+
+/* Solaris 9 lacks these two, so just pick unique values.  */
+#ifndef AT_SYMLINK_FOLLOW
+# define AT_SYMLINK_FOLLOW 2
+#endif
+
+#ifndef AT_EACCESS
+# define AT_EACCESS 4
+#endif
+
+
+#endif /* _GL_FCNTL_H */
+#endif /* _GL_FCNTL_H */
+#endif
diff --git a/linux-lib/inttypes.h b/linux-lib/inttypes.h
new file mode 100644
index 0000000..5a53dba
--- /dev/null
+++ b/linux-lib/inttypes.h
@@ -0,0 +1,1442 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Derek Price.
+   This file is part of gnulib.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C 99 <inttypes.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
+ */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* Include the original <inttypes.h> if it exists, and if this file
+   has not been included yet or if this file includes gnulib stdint.h
+   which in turn includes this file.
+   The include_next requires a split double-inclusion guard.  */
+#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+# if 1
+
+   /* Some pre-C++11 <stdint.h> implementations need this.  */
+#  if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
+#   define __STDC_FORMAT_MACROS 1
+#  endif
+
+#  include_next <inttypes.h>
+# endif
+#endif
+
+#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+#define INTTYPES_H
+
+/* Include <stdint.h> or the gnulib replacement.
+   But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdint.h>
+#endif
+/* Get CHAR_BIT.  */
+#include <limits.h>
+
+#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
+# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* 7.8.1 Macros for format specifiers */
+
+#if defined _TNS_R_TARGET
+   /* Tandem NonStop R series and compatible platforms released before
+      July 2005 support %Ld but not %lld.  */
+# define _LONG_LONG_FORMAT_PREFIX "L"
+#else
+# define _LONG_LONG_FORMAT_PREFIX "ll"
+#endif
+
+#if !defined PRId8 || 0
+# undef PRId8
+# ifdef INT8_MAX
+#  define PRId8 "d"
+# endif
+#endif
+#if !defined PRIi8 || 0
+# undef PRIi8
+# ifdef INT8_MAX
+#  define PRIi8 "i"
+# endif
+#endif
+#if !defined PRIo8 || 0
+# undef PRIo8
+# ifdef UINT8_MAX
+#  define PRIo8 "o"
+# endif
+#endif
+#if !defined PRIu8 || 0
+# undef PRIu8
+# ifdef UINT8_MAX
+#  define PRIu8 "u"
+# endif
+#endif
+#if !defined PRIx8 || 0
+# undef PRIx8
+# ifdef UINT8_MAX
+#  define PRIx8 "x"
+# endif
+#endif
+#if !defined PRIX8 || 0
+# undef PRIX8
+# ifdef UINT8_MAX
+#  define PRIX8 "X"
+# endif
+#endif
+#if !defined PRId16 || 0
+# undef PRId16
+# ifdef INT16_MAX
+#  define PRId16 "d"
+# endif
+#endif
+#if !defined PRIi16 || 0
+# undef PRIi16
+# ifdef INT16_MAX
+#  define PRIi16 "i"
+# endif
+#endif
+#if !defined PRIo16 || 0
+# undef PRIo16
+# ifdef UINT16_MAX
+#  define PRIo16 "o"
+# endif
+#endif
+#if !defined PRIu16 || 0
+# undef PRIu16
+# ifdef UINT16_MAX
+#  define PRIu16 "u"
+# endif
+#endif
+#if !defined PRIx16 || 0
+# undef PRIx16
+# ifdef UINT16_MAX
+#  define PRIx16 "x"
+# endif
+#endif
+#if !defined PRIX16 || 0
+# undef PRIX16
+# ifdef UINT16_MAX
+#  define PRIX16 "X"
+# endif
+#endif
+#if !defined PRId32 || 0
+# undef PRId32
+# ifdef INT32_MAX
+#  define PRId32 "d"
+# endif
+#endif
+#if !defined PRIi32 || 0
+# undef PRIi32
+# ifdef INT32_MAX
+#  define PRIi32 "i"
+# endif
+#endif
+#if !defined PRIo32 || 0
+# undef PRIo32
+# ifdef UINT32_MAX
+#  define PRIo32 "o"
+# endif
+#endif
+#if !defined PRIu32 || 0
+# undef PRIu32
+# ifdef UINT32_MAX
+#  define PRIu32 "u"
+# endif
+#endif
+#if !defined PRIx32 || 0
+# undef PRIx32
+# ifdef UINT32_MAX
+#  define PRIx32 "x"
+# endif
+#endif
+#if !defined PRIX32 || 0
+# undef PRIX32
+# ifdef UINT32_MAX
+#  define PRIX32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (0 ? defined _LP64 : 1)
+#  define _PRI64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _PRI64_PREFIX "I64"
+# elif 1 && LONG_MAX >> 30 == 1
+#  define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRId64 || 0
+#  undef PRId64
+#  define PRId64 _PRI64_PREFIX "d"
+# endif
+# if !defined PRIi64 || 0
+#  undef PRIi64
+#  define PRIi64 _PRI64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (0 ? defined _LP64 : 1)
+#  define _PRIu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _PRIu64_PREFIX "I64"
+# elif 1 && ULONG_MAX >> 31 == 1
+#  define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRIo64 || 0
+#  undef PRIo64
+#  define PRIo64 _PRIu64_PREFIX "o"
+# endif
+# if !defined PRIu64 || 0
+#  undef PRIu64
+#  define PRIu64 _PRIu64_PREFIX "u"
+# endif
+# if !defined PRIx64 || 0
+#  undef PRIx64
+#  define PRIx64 _PRIu64_PREFIX "x"
+# endif
+# if !defined PRIX64 || 0
+#  undef PRIX64
+#  define PRIX64 _PRIu64_PREFIX "X"
+# endif
+#endif
+
+#if !defined PRIdLEAST8 || 0
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || 0
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || 0
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || 0
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || 0
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || 0
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || 0
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || 0
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || 0
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || 0
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || 0
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || 0
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || 0
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || 0
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || 0
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || 0
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || 0
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || 0
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdLEAST64 || 0
+#  undef PRIdLEAST64
+#  define PRIdLEAST64 PRId64
+# endif
+# if !defined PRIiLEAST64 || 0
+#  undef PRIiLEAST64
+#  define PRIiLEAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoLEAST64 || 0
+#  undef PRIoLEAST64
+#  define PRIoLEAST64 PRIo64
+# endif
+# if !defined PRIuLEAST64 || 0
+#  undef PRIuLEAST64
+#  define PRIuLEAST64 PRIu64
+# endif
+# if !defined PRIxLEAST64 || 0
+#  undef PRIxLEAST64
+#  define PRIxLEAST64 PRIx64
+# endif
+# if !defined PRIXLEAST64 || 0
+#  undef PRIXLEAST64
+#  define PRIXLEAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdFAST8 || 0
+# undef PRIdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define PRIdFAST8 PRId64
+# else
+#  define PRIdFAST8 "d"
+# endif
+#endif
+#if !defined PRIiFAST8 || 0
+# undef PRIiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define PRIiFAST8 PRIi64
+# else
+#  define PRIiFAST8 "i"
+# endif
+#endif
+#if !defined PRIoFAST8 || 0
+# undef PRIoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIoFAST8 PRIo64
+# else
+#  define PRIoFAST8 "o"
+# endif
+#endif
+#if !defined PRIuFAST8 || 0
+# undef PRIuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIuFAST8 PRIu64
+# else
+#  define PRIuFAST8 "u"
+# endif
+#endif
+#if !defined PRIxFAST8 || 0
+# undef PRIxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIxFAST8 PRIx64
+# else
+#  define PRIxFAST8 "x"
+# endif
+#endif
+#if !defined PRIXFAST8 || 0
+# undef PRIXFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIXFAST8 PRIX64
+# else
+#  define PRIXFAST8 "X"
+# endif
+#endif
+#if !defined PRIdFAST16 || 0
+# undef PRIdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define PRIdFAST16 PRId64
+# else
+#  define PRIdFAST16 "d"
+# endif
+#endif
+#if !defined PRIiFAST16 || 0
+# undef PRIiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define PRIiFAST16 PRIi64
+# else
+#  define PRIiFAST16 "i"
+# endif
+#endif
+#if !defined PRIoFAST16 || 0
+# undef PRIoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIoFAST16 PRIo64
+# else
+#  define PRIoFAST16 "o"
+# endif
+#endif
+#if !defined PRIuFAST16 || 0
+# undef PRIuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIuFAST16 PRIu64
+# else
+#  define PRIuFAST16 "u"
+# endif
+#endif
+#if !defined PRIxFAST16 || 0
+# undef PRIxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIxFAST16 PRIx64
+# else
+#  define PRIxFAST16 "x"
+# endif
+#endif
+#if !defined PRIXFAST16 || 0
+# undef PRIXFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIXFAST16 PRIX64
+# else
+#  define PRIXFAST16 "X"
+# endif
+#endif
+#if !defined PRIdFAST32 || 0
+# undef PRIdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define PRIdFAST32 PRId64
+# else
+#  define PRIdFAST32 "d"
+# endif
+#endif
+#if !defined PRIiFAST32 || 0
+# undef PRIiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define PRIiFAST32 PRIi64
+# else
+#  define PRIiFAST32 "i"
+# endif
+#endif
+#if !defined PRIoFAST32 || 0
+# undef PRIoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIoFAST32 PRIo64
+# else
+#  define PRIoFAST32 "o"
+# endif
+#endif
+#if !defined PRIuFAST32 || 0
+# undef PRIuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIuFAST32 PRIu64
+# else
+#  define PRIuFAST32 "u"
+# endif
+#endif
+#if !defined PRIxFAST32 || 0
+# undef PRIxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIxFAST32 PRIx64
+# else
+#  define PRIxFAST32 "x"
+# endif
+#endif
+#if !defined PRIXFAST32 || 0
+# undef PRIXFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIXFAST32 PRIX64
+# else
+#  define PRIXFAST32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdFAST64 || 0
+#  undef PRIdFAST64
+#  define PRIdFAST64 PRId64
+# endif
+# if !defined PRIiFAST64 || 0
+#  undef PRIiFAST64
+#  define PRIiFAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoFAST64 || 0
+#  undef PRIoFAST64
+#  define PRIoFAST64 PRIo64
+# endif
+# if !defined PRIuFAST64 || 0
+#  undef PRIuFAST64
+#  define PRIuFAST64 PRIu64
+# endif
+# if !defined PRIxFAST64 || 0
+#  undef PRIxFAST64
+#  define PRIxFAST64 PRIx64
+# endif
+# if !defined PRIXFAST64 || 0
+#  undef PRIXFAST64
+#  define PRIXFAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdMAX || 0
+# undef PRIdMAX
+# if 1
+#  define PRIdMAX PRId64
+# else
+#  define PRIdMAX "ld"
+# endif
+#endif
+#if !defined PRIiMAX || 0
+# undef PRIiMAX
+# if 1
+#  define PRIiMAX PRIi64
+# else
+#  define PRIiMAX "li"
+# endif
+#endif
+#if !defined PRIoMAX || 0
+# undef PRIoMAX
+# if 1
+#  define PRIoMAX PRIo64
+# else
+#  define PRIoMAX "lo"
+# endif
+#endif
+#if !defined PRIuMAX || 0
+# undef PRIuMAX
+# if 1
+#  define PRIuMAX PRIu64
+# else
+#  define PRIuMAX "lu"
+# endif
+#endif
+#if !defined PRIxMAX || 0
+# undef PRIxMAX
+# if 1
+#  define PRIxMAX PRIx64
+# else
+#  define PRIxMAX "lx"
+# endif
+#endif
+#if !defined PRIXMAX || 0
+# undef PRIXMAX
+# if 1
+#  define PRIXMAX PRIX64
+# else
+#  define PRIXMAX "lX"
+# endif
+#endif
+
+#if !defined PRIdPTR || 0
+# undef PRIdPTR
+# ifdef INTPTR_MAX
+#  define PRIdPTR "l" "d"
+# endif
+#endif
+#if !defined PRIiPTR || 0
+# undef PRIiPTR
+# ifdef INTPTR_MAX
+#  define PRIiPTR "l" "i"
+# endif
+#endif
+#if !defined PRIoPTR || 0
+# undef PRIoPTR
+# ifdef UINTPTR_MAX
+#  define PRIoPTR "l" "o"
+# endif
+#endif
+#if !defined PRIuPTR || 0
+# undef PRIuPTR
+# ifdef UINTPTR_MAX
+#  define PRIuPTR "l" "u"
+# endif
+#endif
+#if !defined PRIxPTR || 0
+# undef PRIxPTR
+# ifdef UINTPTR_MAX
+#  define PRIxPTR "l" "x"
+# endif
+#endif
+#if !defined PRIXPTR || 0
+# undef PRIXPTR
+# ifdef UINTPTR_MAX
+#  define PRIXPTR "l" "X"
+# endif
+#endif
+
+#if !defined SCNd8 || 0
+# undef SCNd8
+# ifdef INT8_MAX
+#  define SCNd8 "hhd"
+# endif
+#endif
+#if !defined SCNi8 || 0
+# undef SCNi8
+# ifdef INT8_MAX
+#  define SCNi8 "hhi"
+# endif
+#endif
+#if !defined SCNo8 || 0
+# undef SCNo8
+# ifdef UINT8_MAX
+#  define SCNo8 "hho"
+# endif
+#endif
+#if !defined SCNu8 || 0
+# undef SCNu8
+# ifdef UINT8_MAX
+#  define SCNu8 "hhu"
+# endif
+#endif
+#if !defined SCNx8 || 0
+# undef SCNx8
+# ifdef UINT8_MAX
+#  define SCNx8 "hhx"
+# endif
+#endif
+#if !defined SCNd16 || 0
+# undef SCNd16
+# ifdef INT16_MAX
+#  define SCNd16 "hd"
+# endif
+#endif
+#if !defined SCNi16 || 0
+# undef SCNi16
+# ifdef INT16_MAX
+#  define SCNi16 "hi"
+# endif
+#endif
+#if !defined SCNo16 || 0
+# undef SCNo16
+# ifdef UINT16_MAX
+#  define SCNo16 "ho"
+# endif
+#endif
+#if !defined SCNu16 || 0
+# undef SCNu16
+# ifdef UINT16_MAX
+#  define SCNu16 "hu"
+# endif
+#endif
+#if !defined SCNx16 || 0
+# undef SCNx16
+# ifdef UINT16_MAX
+#  define SCNx16 "hx"
+# endif
+#endif
+#if !defined SCNd32 || 0
+# undef SCNd32
+# ifdef INT32_MAX
+#  define SCNd32 "d"
+# endif
+#endif
+#if !defined SCNi32 || 0
+# undef SCNi32
+# ifdef INT32_MAX
+#  define SCNi32 "i"
+# endif
+#endif
+#if !defined SCNo32 || 0
+# undef SCNo32
+# ifdef UINT32_MAX
+#  define SCNo32 "o"
+# endif
+#endif
+#if !defined SCNu32 || 0
+# undef SCNu32
+# ifdef UINT32_MAX
+#  define SCNu32 "u"
+# endif
+#endif
+#if !defined SCNx32 || 0
+# undef SCNx32
+# ifdef UINT32_MAX
+#  define SCNx32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (0 ? defined _LP64 : 1)
+#  define _SCN64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _SCN64_PREFIX "I64"
+# elif 1 && LONG_MAX >> 30 == 1
+#  define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNd64 || 0
+#  undef SCNd64
+#  define SCNd64 _SCN64_PREFIX "d"
+# endif
+# if !defined SCNi64 || 0
+#  undef SCNi64
+#  define SCNi64 _SCN64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (0 ? defined _LP64 : 1)
+#  define _SCNu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _SCNu64_PREFIX "I64"
+# elif 1 && ULONG_MAX >> 31 == 1
+#  define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNo64 || 0
+#  undef SCNo64
+#  define SCNo64 _SCNu64_PREFIX "o"
+# endif
+# if !defined SCNu64 || 0
+#  undef SCNu64
+#  define SCNu64 _SCNu64_PREFIX "u"
+# endif
+# if !defined SCNx64 || 0
+#  undef SCNx64
+#  define SCNx64 _SCNu64_PREFIX "x"
+# endif
+#endif
+
+#if !defined SCNdLEAST8 || 0
+# undef SCNdLEAST8
+# define SCNdLEAST8 "hhd"
+#endif
+#if !defined SCNiLEAST8 || 0
+# undef SCNiLEAST8
+# define SCNiLEAST8 "hhi"
+#endif
+#if !defined SCNoLEAST8 || 0
+# undef SCNoLEAST8
+# define SCNoLEAST8 "hho"
+#endif
+#if !defined SCNuLEAST8 || 0
+# undef SCNuLEAST8
+# define SCNuLEAST8 "hhu"
+#endif
+#if !defined SCNxLEAST8 || 0
+# undef SCNxLEAST8
+# define SCNxLEAST8 "hhx"
+#endif
+#if !defined SCNdLEAST16 || 0
+# undef SCNdLEAST16
+# define SCNdLEAST16 "hd"
+#endif
+#if !defined SCNiLEAST16 || 0
+# undef SCNiLEAST16
+# define SCNiLEAST16 "hi"
+#endif
+#if !defined SCNoLEAST16 || 0
+# undef SCNoLEAST16
+# define SCNoLEAST16 "ho"
+#endif
+#if !defined SCNuLEAST16 || 0
+# undef SCNuLEAST16
+# define SCNuLEAST16 "hu"
+#endif
+#if !defined SCNxLEAST16 || 0
+# undef SCNxLEAST16
+# define SCNxLEAST16 "hx"
+#endif
+#if !defined SCNdLEAST32 || 0
+# undef SCNdLEAST32
+# define SCNdLEAST32 "d"
+#endif
+#if !defined SCNiLEAST32 || 0
+# undef SCNiLEAST32
+# define SCNiLEAST32 "i"
+#endif
+#if !defined SCNoLEAST32 || 0
+# undef SCNoLEAST32
+# define SCNoLEAST32 "o"
+#endif
+#if !defined SCNuLEAST32 || 0
+# undef SCNuLEAST32
+# define SCNuLEAST32 "u"
+#endif
+#if !defined SCNxLEAST32 || 0
+# undef SCNxLEAST32
+# define SCNxLEAST32 "x"
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdLEAST64 || 0
+#  undef SCNdLEAST64
+#  define SCNdLEAST64 SCNd64
+# endif
+# if !defined SCNiLEAST64 || 0
+#  undef SCNiLEAST64
+#  define SCNiLEAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoLEAST64 || 0
+#  undef SCNoLEAST64
+#  define SCNoLEAST64 SCNo64
+# endif
+# if !defined SCNuLEAST64 || 0
+#  undef SCNuLEAST64
+#  define SCNuLEAST64 SCNu64
+# endif
+# if !defined SCNxLEAST64 || 0
+#  undef SCNxLEAST64
+#  define SCNxLEAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdFAST8 || 0
+# undef SCNdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define SCNdFAST8 SCNd64
+# elif INT_FAST8_MAX == 0x7fff
+#  define SCNdFAST8 "hd"
+# elif INT_FAST8_MAX == 0x7f
+#  define SCNdFAST8 "hhd"
+# else
+#  define SCNdFAST8 "d"
+# endif
+#endif
+#if !defined SCNiFAST8 || 0
+# undef SCNiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define SCNiFAST8 SCNi64
+# elif INT_FAST8_MAX == 0x7fff
+#  define SCNiFAST8 "hi"
+# elif INT_FAST8_MAX == 0x7f
+#  define SCNiFAST8 "hhi"
+# else
+#  define SCNiFAST8 "i"
+# endif
+#endif
+#if !defined SCNoFAST8 || 0
+# undef SCNoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNoFAST8 SCNo64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNoFAST8 "ho"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNoFAST8 "hho"
+# else
+#  define SCNoFAST8 "o"
+# endif
+#endif
+#if !defined SCNuFAST8 || 0
+# undef SCNuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNuFAST8 SCNu64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNuFAST8 "hu"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNuFAST8 "hhu"
+# else
+#  define SCNuFAST8 "u"
+# endif
+#endif
+#if !defined SCNxFAST8 || 0
+# undef SCNxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNxFAST8 SCNx64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNxFAST8 "hx"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNxFAST8 "hhx"
+# else
+#  define SCNxFAST8 "x"
+# endif
+#endif
+#if !defined SCNdFAST16 || 0
+# undef SCNdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define SCNdFAST16 SCNd64
+# elif INT_FAST16_MAX == 0x7fff
+#  define SCNdFAST16 "hd"
+# else
+#  define SCNdFAST16 "d"
+# endif
+#endif
+#if !defined SCNiFAST16 || 0
+# undef SCNiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define SCNiFAST16 SCNi64
+# elif INT_FAST16_MAX == 0x7fff
+#  define SCNiFAST16 "hi"
+# else
+#  define SCNiFAST16 "i"
+# endif
+#endif
+#if !defined SCNoFAST16 || 0
+# undef SCNoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNoFAST16 SCNo64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNoFAST16 "ho"
+# else
+#  define SCNoFAST16 "o"
+# endif
+#endif
+#if !defined SCNuFAST16 || 0
+# undef SCNuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNuFAST16 SCNu64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNuFAST16 "hu"
+# else
+#  define SCNuFAST16 "u"
+# endif
+#endif
+#if !defined SCNxFAST16 || 0
+# undef SCNxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNxFAST16 SCNx64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNxFAST16 "hx"
+# else
+#  define SCNxFAST16 "x"
+# endif
+#endif
+#if !defined SCNdFAST32 || 0
+# undef SCNdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define SCNdFAST32 SCNd64
+# else
+#  define SCNdFAST32 "d"
+# endif
+#endif
+#if !defined SCNiFAST32 || 0
+# undef SCNiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define SCNiFAST32 SCNi64
+# else
+#  define SCNiFAST32 "i"
+# endif
+#endif
+#if !defined SCNoFAST32 || 0
+# undef SCNoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNoFAST32 SCNo64
+# else
+#  define SCNoFAST32 "o"
+# endif
+#endif
+#if !defined SCNuFAST32 || 0
+# undef SCNuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNuFAST32 SCNu64
+# else
+#  define SCNuFAST32 "u"
+# endif
+#endif
+#if !defined SCNxFAST32 || 0
+# undef SCNxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNxFAST32 SCNx64
+# else
+#  define SCNxFAST32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdFAST64 || 0
+#  undef SCNdFAST64
+#  define SCNdFAST64 SCNd64
+# endif
+# if !defined SCNiFAST64 || 0
+#  undef SCNiFAST64
+#  define SCNiFAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoFAST64 || 0
+#  undef SCNoFAST64
+#  define SCNoFAST64 SCNo64
+# endif
+# if !defined SCNuFAST64 || 0
+#  undef SCNuFAST64
+#  define SCNuFAST64 SCNu64
+# endif
+# if !defined SCNxFAST64 || 0
+#  undef SCNxFAST64
+#  define SCNxFAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdMAX || 0
+# undef SCNdMAX
+# if 1
+#  define SCNdMAX SCNd64
+# else
+#  define SCNdMAX "ld"
+# endif
+#endif
+#if !defined SCNiMAX || 0
+# undef SCNiMAX
+# if 1
+#  define SCNiMAX SCNi64
+# else
+#  define SCNiMAX "li"
+# endif
+#endif
+#if !defined SCNoMAX || 0
+# undef SCNoMAX
+# if 1
+#  define SCNoMAX SCNo64
+# else
+#  define SCNoMAX "lo"
+# endif
+#endif
+#if !defined SCNuMAX || 0
+# undef SCNuMAX
+# if 1
+#  define SCNuMAX SCNu64
+# else
+#  define SCNuMAX "lu"
+# endif
+#endif
+#if !defined SCNxMAX || 0
+# undef SCNxMAX
+# if 1
+#  define SCNxMAX SCNx64
+# else
+#  define SCNxMAX "lx"
+# endif
+#endif
+
+#if !defined SCNdPTR || 0
+# undef SCNdPTR
+# ifdef INTPTR_MAX
+#  define SCNdPTR "l" "d"
+# endif
+#endif
+#if !defined SCNiPTR || 0
+# undef SCNiPTR
+# ifdef INTPTR_MAX
+#  define SCNiPTR "l" "i"
+# endif
+#endif
+#if !defined SCNoPTR || 0
+# undef SCNoPTR
+# ifdef UINTPTR_MAX
+#  define SCNoPTR "l" "o"
+# endif
+#endif
+#if !defined SCNuPTR || 0
+# undef SCNuPTR
+# ifdef UINTPTR_MAX
+#  define SCNuPTR "l" "u"
+# endif
+#endif
+#if !defined SCNxPTR || 0
+# undef SCNxPTR
+# ifdef UINTPTR_MAX
+#  define SCNxPTR "l" "x"
+# endif
+#endif
+
+/* 7.8.2 Functions for greatest-width integer types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if 0
+# if !1
+extern intmax_t imaxabs (intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxabs
+# if HAVE_RAW_DECL_IMAXABS
+_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
+                 "use gnulib module imaxabs for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+#  if !GNULIB_defined_imaxdiv_t
+typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
+#   define GNULIB_defined_imaxdiv_t 1
+#  endif
+extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxdiv
+# if HAVE_RAW_DECL_IMAXDIV
+_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
+                 "use gnulib module imaxdiv for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtoimax
+#   define strtoimax rpl_strtoimax
+#  endif
+_GL_FUNCDECL_RPL (strtoimax, intmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int));
+# else
+#  if !1
+#   undef strtoimax
+_GL_FUNCDECL_SYS (strtoimax, intmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int));
+# endif
+_GL_CXXALIASWARN (strtoimax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoimax
+# if HAVE_RAW_DECL_STRTOIMAX
+_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
+                 "use gnulib module strtoimax for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+#  undef strtoumax
+_GL_FUNCDECL_SYS (strtoumax, uintmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int));
+_GL_CXXALIASWARN (strtoumax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoumax
+# if HAVE_RAW_DECL_STRTOUMAX
+_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
+                 "use gnulib module strtoumax for portability");
+# endif
+#endif
+
+/* Don't bother defining or declaring wcstoimax and wcstoumax, since
+   wide-character functions like this are hardly ever useful.  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/linux-lib/math.h b/linux-lib/math.h
new file mode 100644
index 0000000..dd1ed98
--- /dev/null
+++ b/linux-lib/math.h
@@ -0,0 +1,2587 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <math.h>.
+
+   Copyright (C) 2002-2003, 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_MATH_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <math.h>
+
+#ifndef _GL_MATH_H
+#define _GL_MATH_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_MATH_INLINE
+# define _GL_MATH_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+#ifdef __cplusplus
+/* Helper macros to define type-generic function FUNC as overloaded functions,
+   rather than as macros like in C.  POSIX declares these with an argument of
+   real-floating (that is, one of float, double, or long double).  */
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \
+static inline int                                                   \
+_gl_cxx_ ## func ## f (float f)                                     \
+{                                                                   \
+  return func (f);                                                  \
+}                                                                   \
+static inline int                                                   \
+_gl_cxx_ ## func ## d (double d)                                    \
+{                                                                   \
+  return func (d);                                                  \
+}                                                                   \
+static inline int                                                   \
+_gl_cxx_ ## func ## l (long double l)                               \
+{                                                                   \
+  return func (l);                                                  \
+}
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \
+inline int                                                          \
+func (float f)                                                      \
+{                                                                   \
+  return _gl_cxx_ ## func ## f (f);                                 \
+}                                                                   \
+inline int                                                          \
+func (double d)                                                     \
+{                                                                   \
+  return _gl_cxx_ ## func ## d (d);                                 \
+}                                                                   \
+inline int                                                          \
+func (long double l)                                                \
+{                                                                   \
+  return _gl_cxx_ ## func ## l (l);                                 \
+}
+#endif
+
+/* Helper macros to define a portability warning for the
+   classification macro FUNC called with VALUE.  POSIX declares the
+   classification macros with an argument of real-floating (that is,
+   one of float, double, or long double).  */
+#define _GL_WARN_REAL_FLOATING_DECL(func) \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## f (float f)                                         \
+{                                                                   \
+  return func (f);                                                  \
+}                                                                   \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## d (double d)                                        \
+{                                                                   \
+  return func (d);                                                  \
+}                                                                   \
+_GL_MATH_INLINE int                                                 \
+rpl_ ## func ## l (long double l)                                   \
+{                                                                   \
+  return func (l);                                                  \
+}                                                                   \
+_GL_WARN_ON_USE (rpl_ ## func ## f, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability");    \
+_GL_WARN_ON_USE (rpl_ ## func ## d, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability");    \
+_GL_WARN_ON_USE (rpl_ ## func ## l, #func " is unportable - "       \
+                 "use gnulib module " #func " for portability")
+#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \
+  (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value)     \
+   : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value)  \
+   : rpl_ ## func ## l (value))
+
+
+#if 0
+/* Pull in a function that fixes the 'int' to 'long double' conversion
+   of glibc 2.7.  */
+_GL_EXTERN_C void _Qp_itoq (long double *, int);
+static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq;
+#endif
+
+
+/* POSIX allows platforms that don't support NAN.  But all major
+   machines in the past 15 years have supported something close to
+   IEEE NaN, so we define this unconditionally.  We also must define
+   it on platforms like Solaris 10, where NAN is present but defined
+   as a function pointer rather than a floating point constant.  */
+#if !defined NAN || 0
+# if !GNULIB_defined_NAN
+#  undef NAN
+  /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler
+     choke on the expression 0.0 / 0.0.  */
+#  if defined __DECC || defined _MSC_VER
+_GL_MATH_INLINE float
+_NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#   define NAN (_NaN())
+#  else
+#   define NAN (0.0f / 0.0f)
+#  endif
+#  define GNULIB_defined_NAN 1
+# endif
+#endif
+
+/* Solaris 10 defines HUGE_VAL, but as a function pointer rather
+   than a floating point constant.  */
+#if 0
+# undef HUGE_VALF
+# define HUGE_VALF (1.0f / 0.0f)
+# undef HUGE_VAL
+# define HUGE_VAL (1.0 / 0.0)
+# undef HUGE_VALL
+# define HUGE_VALL (1.0L / 0.0L)
+#endif
+
+/* HUGE_VALF is a 'float' Infinity.  */
+#ifndef HUGE_VALF
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f.  */
+#  define HUGE_VALF (1e25f * 1e25f)
+# else
+#  define HUGE_VALF (1.0f / 0.0f)
+# endif
+#endif
+
+/* HUGE_VAL is a 'double' Infinity.  */
+#ifndef HUGE_VAL
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0.  */
+#  define HUGE_VAL (1e250 * 1e250)
+# else
+#  define HUGE_VAL (1.0 / 0.0)
+# endif
+#endif
+
+/* HUGE_VALL is a 'long double' Infinity.  */
+#ifndef HUGE_VALL
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L.  */
+#  define HUGE_VALL (1e250L * 1e250L)
+# else
+#  define HUGE_VALL (1.0L / 0.0L)
+# endif
+#endif
+
+
+/* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined.  */
+#if !(defined FP_ILOGB0 && defined FP_ILOGBNAN)
+# if defined __NetBSD__ || defined __sgi
+  /* NetBSD, IRIX 6.5: match what ilogb() does */
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# elif defined _AIX
+  /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
+# elif defined __sun
+  /* Solaris 9: match what ilogb() does */
+#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
+#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
+# else
+  /* Gnulib defined values.  */
+#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef acosf
+_GL_FUNCDECL_SYS (acosf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (acosf, float, (float x));
+_GL_CXXALIASWARN (acosf);
+#elif defined GNULIB_POSIXCHECK
+# undef acosf
+# if HAVE_RAW_DECL_ACOSF
+_GL_WARN_ON_USE (acosf, "acosf is unportable - "
+                 "use gnulib module acosf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef acosl
+_GL_FUNCDECL_SYS (acosl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (acosl, long double, (long double x));
+_GL_CXXALIASWARN (acosl);
+#elif defined GNULIB_POSIXCHECK
+# undef acosl
+# if HAVE_RAW_DECL_ACOSL
+_GL_WARN_ON_USE (acosl, "acosl is unportable - "
+                 "use gnulib module acosl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef asinf
+_GL_FUNCDECL_SYS (asinf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (asinf, float, (float x));
+_GL_CXXALIASWARN (asinf);
+#elif defined GNULIB_POSIXCHECK
+# undef asinf
+# if HAVE_RAW_DECL_ASINF
+_GL_WARN_ON_USE (asinf, "asinf is unportable - "
+                 "use gnulib module asinf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef asinl
+_GL_FUNCDECL_SYS (asinl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (asinl, long double, (long double x));
+_GL_CXXALIASWARN (asinl);
+#elif defined GNULIB_POSIXCHECK
+# undef asinl
+# if HAVE_RAW_DECL_ASINL
+_GL_WARN_ON_USE (asinl, "asinl is unportable - "
+                 "use gnulib module asinl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef atanf
+_GL_FUNCDECL_SYS (atanf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (atanf, float, (float x));
+_GL_CXXALIASWARN (atanf);
+#elif defined GNULIB_POSIXCHECK
+# undef atanf
+# if HAVE_RAW_DECL_ATANF
+_GL_WARN_ON_USE (atanf, "atanf is unportable - "
+                 "use gnulib module atanf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef atanl
+_GL_FUNCDECL_SYS (atanl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (atanl, long double, (long double x));
+_GL_CXXALIASWARN (atanl);
+#elif defined GNULIB_POSIXCHECK
+# undef atanl
+# if HAVE_RAW_DECL_ATANL
+_GL_WARN_ON_USE (atanl, "atanl is unportable - "
+                 "use gnulib module atanl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef atan2f
+_GL_FUNCDECL_SYS (atan2f, float, (float y, float x));
+# endif
+_GL_CXXALIAS_SYS (atan2f, float, (float y, float x));
+_GL_CXXALIASWARN (atan2f);
+#elif defined GNULIB_POSIXCHECK
+# undef atan2f
+# if HAVE_RAW_DECL_ATAN2F
+_GL_WARN_ON_USE (atan2f, "atan2f is unportable - "
+                 "use gnulib module atan2f for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cbrtf
+#   define cbrtf rpl_cbrtf
+#  endif
+_GL_FUNCDECL_RPL (cbrtf, float, (float x));
+_GL_CXXALIAS_RPL (cbrtf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (cbrtf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (cbrtf, float, (float x));
+# endif
+_GL_CXXALIASWARN (cbrtf);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrtf
+# if HAVE_RAW_DECL_CBRTF
+_GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - "
+                 "use gnulib module cbrtf for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (cbrt, double, (double x));
+# endif
+_GL_CXXALIAS_SYS (cbrt, double, (double x));
+_GL_CXXALIASWARN (cbrt);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrt
+# if HAVE_RAW_DECL_CBRT
+_GL_WARN_ON_USE (cbrt, "cbrt is unportable - "
+                 "use gnulib module cbrt for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cbrtl
+#   define cbrtl rpl_cbrtl
+#  endif
+_GL_FUNCDECL_RPL (cbrtl, long double, (long double x));
+_GL_CXXALIAS_RPL (cbrtl, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (cbrtl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (cbrtl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (cbrtl);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrtl
+# if HAVE_RAW_DECL_CBRTL
+_GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - "
+                 "use gnulib module cbrtl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceilf
+#   define ceilf rpl_ceilf
+#  endif
+_GL_FUNCDECL_RPL (ceilf, float, (float x));
+_GL_CXXALIAS_RPL (ceilf, float, (float x));
+# else
+#  if !1
+#   undef ceilf
+_GL_FUNCDECL_SYS (ceilf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (ceilf, float, (float x));
+# endif
+_GL_CXXALIASWARN (ceilf);
+#elif defined GNULIB_POSIXCHECK
+# undef ceilf
+# if HAVE_RAW_DECL_CEILF
+_GL_WARN_ON_USE (ceilf, "ceilf is unportable - "
+                 "use gnulib module ceilf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define ceil rpl_ceil
+#  endif
+_GL_FUNCDECL_RPL (ceil, double, (double x));
+_GL_CXXALIAS_RPL (ceil, double, (double x));
+# else
+_GL_CXXALIAS_SYS (ceil, double, (double x));
+# endif
+_GL_CXXALIASWARN (ceil);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceill
+#   define ceill rpl_ceill
+#  endif
+_GL_FUNCDECL_RPL (ceill, long double, (long double x));
+_GL_CXXALIAS_RPL (ceill, long double, (long double x));
+# else
+#  if !1
+#   undef ceill
+_GL_FUNCDECL_SYS (ceill, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (ceill, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (ceill);
+#elif defined GNULIB_POSIXCHECK
+# undef ceill
+# if HAVE_RAW_DECL_CEILL
+_GL_WARN_ON_USE (ceill, "ceill is unportable - "
+                 "use gnulib module ceill for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (copysignf, float, (float x, float y));
+# endif
+_GL_CXXALIAS_SYS (copysignf, float, (float x, float y));
+_GL_CXXALIASWARN (copysignf);
+#elif defined GNULIB_POSIXCHECK
+# undef copysignf
+# if HAVE_RAW_DECL_COPYSIGNF
+_GL_WARN_ON_USE (copysignf, "copysignf is unportable - "
+                 "use gnulib module copysignf for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (copysign, double, (double x, double y));
+# endif
+_GL_CXXALIAS_SYS (copysign, double, (double x, double y));
+_GL_CXXALIASWARN (copysign);
+#elif defined GNULIB_POSIXCHECK
+# undef copysign
+# if HAVE_RAW_DECL_COPYSIGN
+_GL_WARN_ON_USE (copysign, "copysign is unportable - "
+                 "use gnulib module copysign for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y));
+_GL_CXXALIASWARN (copysignl);
+#elif defined GNULIB_POSIXCHECK
+# undef copysignl
+# if HAVE_RAW_DECL_COPYSIGNL
+_GL_WARN_ON_USE (copysign, "copysignl is unportable - "
+                 "use gnulib module copysignl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef cosf
+_GL_FUNCDECL_SYS (cosf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (cosf, float, (float x));
+_GL_CXXALIASWARN (cosf);
+#elif defined GNULIB_POSIXCHECK
+# undef cosf
+# if HAVE_RAW_DECL_COSF
+_GL_WARN_ON_USE (cosf, "cosf is unportable - "
+                 "use gnulib module cosf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef cosl
+_GL_FUNCDECL_SYS (cosl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (cosl, long double, (long double x));
+_GL_CXXALIASWARN (cosl);
+#elif defined GNULIB_POSIXCHECK
+# undef cosl
+# if HAVE_RAW_DECL_COSL
+_GL_WARN_ON_USE (cosl, "cosl is unportable - "
+                 "use gnulib module cosl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef coshf
+_GL_FUNCDECL_SYS (coshf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (coshf, float, (float x));
+_GL_CXXALIASWARN (coshf);
+#elif defined GNULIB_POSIXCHECK
+# undef coshf
+# if HAVE_RAW_DECL_COSHF
+_GL_WARN_ON_USE (coshf, "coshf is unportable - "
+                 "use gnulib module coshf for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef expf
+_GL_FUNCDECL_SYS (expf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (expf, float, (float x));
+_GL_CXXALIASWARN (expf);
+#elif defined GNULIB_POSIXCHECK
+# undef expf
+# if HAVE_RAW_DECL_EXPF
+_GL_WARN_ON_USE (expf, "expf is unportable - "
+                 "use gnulib module expf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef expl
+_GL_FUNCDECL_SYS (expl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (expl, long double, (long double x));
+_GL_CXXALIASWARN (expl);
+#elif defined GNULIB_POSIXCHECK
+# undef expl
+# if HAVE_RAW_DECL_EXPL
+_GL_WARN_ON_USE (expl, "expl is unportable - "
+                 "use gnulib module expl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (exp2f, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (exp2f, float, (float x));
+_GL_CXXALIASWARN (exp2f);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2f
+# if HAVE_RAW_DECL_EXP2F
+_GL_WARN_ON_USE (exp2f, "exp2f is unportable - "
+                 "use gnulib module exp2f for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef exp2
+#   define exp2 rpl_exp2
+#  endif
+_GL_FUNCDECL_RPL (exp2, double, (double x));
+_GL_CXXALIAS_RPL (exp2, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (exp2, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (exp2, double, (double x));
+# endif
+_GL_CXXALIASWARN (exp2);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2
+# if HAVE_RAW_DECL_EXP2
+_GL_WARN_ON_USE (exp2, "exp2 is unportable - "
+                 "use gnulib module exp2 for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef exp2l
+#   define exp2l rpl_exp2l
+#  endif
+_GL_FUNCDECL_RPL (exp2l, long double, (long double x));
+_GL_CXXALIAS_RPL (exp2l, long double, (long double x));
+# else
+#  if !1
+#   undef exp2l
+_GL_FUNCDECL_SYS (exp2l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (exp2l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (exp2l);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2l
+# if HAVE_RAW_DECL_EXP2L
+_GL_WARN_ON_USE (exp2l, "exp2l is unportable - "
+                 "use gnulib module exp2l for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1f
+#   define expm1f rpl_expm1f
+#  endif
+_GL_FUNCDECL_RPL (expm1f, float, (float x));
+_GL_CXXALIAS_RPL (expm1f, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (expm1f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (expm1f, float, (float x));
+# endif
+_GL_CXXALIASWARN (expm1f);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1f
+# if HAVE_RAW_DECL_EXPM1F
+_GL_WARN_ON_USE (expm1f, "expm1f is unportable - "
+                 "use gnulib module expm1f for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1
+#   define expm1 rpl_expm1
+#  endif
+_GL_FUNCDECL_RPL (expm1, double, (double x));
+_GL_CXXALIAS_RPL (expm1, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (expm1, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (expm1, double, (double x));
+# endif
+_GL_CXXALIASWARN (expm1);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1
+# if HAVE_RAW_DECL_EXPM1
+_GL_WARN_ON_USE (expm1, "expm1 is unportable - "
+                 "use gnulib module expm1 for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+#  undef expm1l
+_GL_FUNCDECL_SYS (expm1l, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (expm1l, long double, (long double x));
+_GL_CXXALIASWARN (expm1l);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1l
+# if HAVE_RAW_DECL_EXPM1L
+_GL_WARN_ON_USE (expm1l, "expm1l is unportable - "
+                 "use gnulib module expm1l for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef fabsf
+_GL_FUNCDECL_SYS (fabsf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (fabsf, float, (float x));
+_GL_CXXALIASWARN (fabsf);
+#elif defined GNULIB_POSIXCHECK
+# undef fabsf
+# if HAVE_RAW_DECL_FABSF
+_GL_WARN_ON_USE (fabsf, "fabsf is unportable - "
+                 "use gnulib module fabsf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fabsl
+#   define fabsl rpl_fabsl
+#  endif
+_GL_FUNCDECL_RPL (fabsl, long double, (long double x));
+_GL_CXXALIAS_RPL (fabsl, long double, (long double x));
+# else
+#  if !1
+#   undef fabsl
+_GL_FUNCDECL_SYS (fabsl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (fabsl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (fabsl);
+#elif defined GNULIB_POSIXCHECK
+# undef fabsl
+# if HAVE_RAW_DECL_FABSL
+_GL_WARN_ON_USE (fabsl, "fabsl is unportable - "
+                 "use gnulib module fabsl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floorf
+#   define floorf rpl_floorf
+#  endif
+_GL_FUNCDECL_RPL (floorf, float, (float x));
+_GL_CXXALIAS_RPL (floorf, float, (float x));
+# else
+#  if !1
+#   undef floorf
+_GL_FUNCDECL_SYS (floorf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (floorf, float, (float x));
+# endif
+_GL_CXXALIASWARN (floorf);
+#elif defined GNULIB_POSIXCHECK
+# undef floorf
+# if HAVE_RAW_DECL_FLOORF
+_GL_WARN_ON_USE (floorf, "floorf is unportable - "
+                 "use gnulib module floorf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define floor rpl_floor
+#  endif
+_GL_FUNCDECL_RPL (floor, double, (double x));
+_GL_CXXALIAS_RPL (floor, double, (double x));
+# else
+_GL_CXXALIAS_SYS (floor, double, (double x));
+# endif
+_GL_CXXALIASWARN (floor);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floorl
+#   define floorl rpl_floorl
+#  endif
+_GL_FUNCDECL_RPL (floorl, long double, (long double x));
+_GL_CXXALIAS_RPL (floorl, long double, (long double x));
+# else
+#  if !1
+#   undef floorl
+_GL_FUNCDECL_SYS (floorl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (floorl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (floorl);
+#elif defined GNULIB_POSIXCHECK
+# undef floorl
+# if HAVE_RAW_DECL_FLOORL
+_GL_WARN_ON_USE (floorl, "floorl is unportable - "
+                 "use gnulib module floorl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmaf
+#   define fmaf rpl_fmaf
+#  endif
+_GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z));
+_GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z));
+#  endif
+_GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z));
+# endif
+_GL_CXXALIASWARN (fmaf);
+#elif defined GNULIB_POSIXCHECK
+# undef fmaf
+# if HAVE_RAW_DECL_FMAF
+_GL_WARN_ON_USE (fmaf, "fmaf is unportable - "
+                 "use gnulib module fmaf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fma
+#   define fma rpl_fma
+#  endif
+_GL_FUNCDECL_RPL (fma, double, (double x, double y, double z));
+_GL_CXXALIAS_RPL (fma, double, (double x, double y, double z));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fma, double, (double x, double y, double z));
+#  endif
+_GL_CXXALIAS_SYS (fma, double, (double x, double y, double z));
+# endif
+_GL_CXXALIASWARN (fma);
+#elif defined GNULIB_POSIXCHECK
+# undef fma
+# if HAVE_RAW_DECL_FMA
+_GL_WARN_ON_USE (fma, "fma is unportable - "
+                 "use gnulib module fma for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmal
+#   define fmal rpl_fmal
+#  endif
+_GL_FUNCDECL_RPL (fmal, long double,
+                  (long double x, long double y, long double z));
+_GL_CXXALIAS_RPL (fmal, long double,
+                  (long double x, long double y, long double z));
+# else
+#  if !1
+#   undef fmal
+_GL_FUNCDECL_SYS (fmal, long double,
+                  (long double x, long double y, long double z));
+#  endif
+_GL_CXXALIAS_SYS (fmal, long double,
+                  (long double x, long double y, long double z));
+# endif
+_GL_CXXALIASWARN (fmal);
+#elif defined GNULIB_POSIXCHECK
+# undef fmal
+# if HAVE_RAW_DECL_FMAL
+_GL_WARN_ON_USE (fmal, "fmal is unportable - "
+                 "use gnulib module fmal for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmodf
+#   define fmodf rpl_fmodf
+#  endif
+_GL_FUNCDECL_RPL (fmodf, float, (float x, float y));
+_GL_CXXALIAS_RPL (fmodf, float, (float x, float y));
+# else
+#  if !1
+#   undef fmodf
+_GL_FUNCDECL_SYS (fmodf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (fmodf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (fmodf);
+#elif defined GNULIB_POSIXCHECK
+# undef fmodf
+# if HAVE_RAW_DECL_FMODF
+_GL_WARN_ON_USE (fmodf, "fmodf is unportable - "
+                 "use gnulib module fmodf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmod
+#   define fmod rpl_fmod
+#  endif
+_GL_FUNCDECL_RPL (fmod, double, (double x, double y));
+_GL_CXXALIAS_RPL (fmod, double, (double x, double y));
+# else
+_GL_CXXALIAS_SYS (fmod, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (fmod);
+#elif defined GNULIB_POSIXCHECK
+# undef fmod
+# if HAVE_RAW_DECL_FMOD
+_GL_WARN_ON_USE (fmod, "fmod has portability problems - "
+                 "use gnulib module fmod for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmodl
+#   define fmodl rpl_fmodl
+#  endif
+_GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y));
+# else
+#  if !1
+#   undef fmodl
+_GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (fmodl);
+#elif defined GNULIB_POSIXCHECK
+# undef fmodl
+# if HAVE_RAW_DECL_FMODL
+_GL_WARN_ON_USE (fmodl, "fmodl is unportable - "
+                 "use gnulib module fmodl for portability");
+# endif
+#endif
+
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef frexpf
+#   define frexpf rpl_frexpf
+#  endif
+_GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr));
+# else
+#  if !1
+#   undef frexpf
+_GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr));
+# endif
+_GL_CXXALIASWARN (frexpf);
+#elif defined GNULIB_POSIXCHECK
+# undef frexpf
+# if HAVE_RAW_DECL_FREXPF
+_GL_WARN_ON_USE (frexpf, "frexpf is unportable - "
+                 "use gnulib module frexpf for portability");
+# endif
+#endif
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define frexp rpl_frexp
+#  endif
+_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr));
+# else
+_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
+# endif
+_GL_CXXALIASWARN (frexp);
+#elif defined GNULIB_POSIXCHECK
+# undef frexp
+/* Assume frexp is always declared.  */
+_GL_WARN_ON_USE (frexp, "frexp is unportable - "
+                 "use gnulib module frexp for portability");
+#endif
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if 1 && 0
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef frexpl
+#  define frexpl rpl_frexpl
+# endif
+_GL_FUNCDECL_RPL (frexpl, long double,
+                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr));
+#else
+# if !1
+_GL_FUNCDECL_SYS (frexpl, long double,
+                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
+# endif
+# if 1
+_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr));
+# endif
+#endif
+#if 1 && !(0 && !1)
+_GL_CXXALIASWARN (frexpl);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# undef frexpl
+# if HAVE_RAW_DECL_FREXPL
+_GL_WARN_ON_USE (frexpl, "frexpl is unportable - "
+                 "use gnulib module frexpl for portability");
+# endif
+#endif
+
+
+/* Return sqrt(x^2+y^2).  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypotf
+#   define hypotf rpl_hypotf
+#  endif
+_GL_FUNCDECL_RPL (hypotf, float, (float x, float y));
+_GL_CXXALIAS_RPL (hypotf, float, (float x, float y));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (hypotf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (hypotf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (hypotf);
+#elif defined GNULIB_POSIXCHECK
+# undef hypotf
+# if HAVE_RAW_DECL_HYPOTF
+_GL_WARN_ON_USE (hypotf, "hypotf is unportable - "
+                 "use gnulib module hypotf for portability");
+# endif
+#endif
+
+/* Return sqrt(x^2+y^2).  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypot
+#   define hypot rpl_hypot
+#  endif
+_GL_FUNCDECL_RPL (hypot, double, (double x, double y));
+_GL_CXXALIAS_RPL (hypot, double, (double x, double y));
+# else
+_GL_CXXALIAS_SYS (hypot, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (hypot);
+#elif defined GNULIB_POSIXCHECK
+# undef hypot
+# if HAVE_RAW_DECL_HYPOT
+_GL_WARN_ON_USE (hypotf, "hypot has portability problems - "
+                 "use gnulib module hypot for portability");
+# endif
+#endif
+
+/* Return sqrt(x^2+y^2).  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypotl
+#   define hypotl rpl_hypotl
+#  endif
+_GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (hypotl);
+#elif defined GNULIB_POSIXCHECK
+# undef hypotl
+# if HAVE_RAW_DECL_HYPOTL
+_GL_WARN_ON_USE (hypotl, "hypotl is unportable - "
+                 "use gnulib module hypotl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogbf
+#   define ilogbf rpl_ilogbf
+#  endif
+_GL_FUNCDECL_RPL (ilogbf, int, (float x));
+_GL_CXXALIAS_RPL (ilogbf, int, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ilogbf, int, (float x));
+#  endif
+_GL_CXXALIAS_SYS (ilogbf, int, (float x));
+# endif
+_GL_CXXALIASWARN (ilogbf);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogbf
+# if HAVE_RAW_DECL_ILOGBF
+_GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - "
+                 "use gnulib module ilogbf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogb
+#   define ilogb rpl_ilogb
+#  endif
+_GL_FUNCDECL_RPL (ilogb, int, (double x));
+_GL_CXXALIAS_RPL (ilogb, int, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ilogb, int, (double x));
+#  endif
+_GL_CXXALIAS_SYS (ilogb, int, (double x));
+# endif
+_GL_CXXALIASWARN (ilogb);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogb
+# if HAVE_RAW_DECL_ILOGB
+_GL_WARN_ON_USE (ilogb, "ilogb is unportable - "
+                 "use gnulib module ilogb for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (ilogbl, int, (long double x));
+# endif
+_GL_CXXALIAS_SYS (ilogbl, int, (long double x));
+_GL_CXXALIASWARN (ilogbl);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogbl
+# if HAVE_RAW_DECL_ILOGBL
+_GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - "
+                 "use gnulib module ilogbl for portability");
+# endif
+#endif
+
+
+/* Return x * 2^exp.  */
+#if 0
+# if !1
+#  undef ldexpf
+_GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp));
+# endif
+_GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp));
+_GL_CXXALIASWARN (ldexpf);
+#elif defined GNULIB_POSIXCHECK
+# undef ldexpf
+# if HAVE_RAW_DECL_LDEXPF
+_GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - "
+                 "use gnulib module ldexpf for portability");
+# endif
+#endif
+
+/* Return x * 2^exp.  */
+#if 1 && 0
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef ldexpl
+#  define ldexpl rpl_ldexpl
+# endif
+_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp));
+_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp));
+#else
+# if !1
+_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp));
+# endif
+# if 1
+_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp));
+# endif
+#endif
+#if 1
+_GL_CXXALIASWARN (ldexpl);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# undef ldexpl
+# if HAVE_RAW_DECL_LDEXPL
+_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - "
+                 "use gnulib module ldexpl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logf
+#   define logf rpl_logf
+#  endif
+_GL_FUNCDECL_RPL (logf, float, (float x));
+_GL_CXXALIAS_RPL (logf, float, (float x));
+# else
+#  if !1
+#   undef logf
+_GL_FUNCDECL_SYS (logf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (logf, float, (float x));
+# endif
+_GL_CXXALIASWARN (logf);
+#elif defined GNULIB_POSIXCHECK
+# undef logf
+# if HAVE_RAW_DECL_LOGF
+_GL_WARN_ON_USE (logf, "logf is unportable - "
+                 "use gnulib module logf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log
+#   define log rpl_log
+#  endif
+_GL_FUNCDECL_RPL (log, double, (double x));
+_GL_CXXALIAS_RPL (log, double, (double x));
+# else
+_GL_CXXALIAS_SYS (log, double, (double x));
+# endif
+_GL_CXXALIASWARN (log);
+#elif defined GNULIB_POSIXCHECK
+# undef log
+# if HAVE_RAW_DECL_LOG
+_GL_WARN_ON_USE (log, "log has portability problems - "
+                 "use gnulib module log for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logl
+#   define logl rpl_logl
+#  endif
+_GL_FUNCDECL_RPL (logl, long double, (long double x));
+_GL_CXXALIAS_RPL (logl, long double, (long double x));
+# else
+#  if !1 || !1
+#   undef logl
+_GL_FUNCDECL_SYS (logl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (logl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (logl);
+#elif defined GNULIB_POSIXCHECK
+# undef logl
+# if HAVE_RAW_DECL_LOGL
+_GL_WARN_ON_USE (logl, "logl is unportable - "
+                 "use gnulib module logl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10f
+#   define log10f rpl_log10f
+#  endif
+_GL_FUNCDECL_RPL (log10f, float, (float x));
+_GL_CXXALIAS_RPL (log10f, float, (float x));
+# else
+#  if !1
+#   undef log10f
+_GL_FUNCDECL_SYS (log10f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log10f, float, (float x));
+# endif
+_GL_CXXALIASWARN (log10f);
+#elif defined GNULIB_POSIXCHECK
+# undef log10f
+# if HAVE_RAW_DECL_LOG10F
+_GL_WARN_ON_USE (log10f, "log10f is unportable - "
+                 "use gnulib module log10f for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10
+#   define log10 rpl_log10
+#  endif
+_GL_FUNCDECL_RPL (log10, double, (double x));
+_GL_CXXALIAS_RPL (log10, double, (double x));
+# else
+_GL_CXXALIAS_SYS (log10, double, (double x));
+# endif
+_GL_CXXALIASWARN (log10);
+#elif defined GNULIB_POSIXCHECK
+# undef log10
+# if HAVE_RAW_DECL_LOG10
+_GL_WARN_ON_USE (log10, "log10 has portability problems - "
+                 "use gnulib module log10 for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10l
+#   define log10l rpl_log10l
+#  endif
+_GL_FUNCDECL_RPL (log10l, long double, (long double x));
+_GL_CXXALIAS_RPL (log10l, long double, (long double x));
+# else
+#  if !1 || !1
+#   undef log10l
+_GL_FUNCDECL_SYS (log10l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log10l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log10l);
+#elif defined GNULIB_POSIXCHECK
+# undef log10l
+# if HAVE_RAW_DECL_LOG10L
+_GL_WARN_ON_USE (log10l, "log10l is unportable - "
+                 "use gnulib module log10l for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1pf
+#   define log1pf rpl_log1pf
+#  endif
+_GL_FUNCDECL_RPL (log1pf, float, (float x));
+_GL_CXXALIAS_RPL (log1pf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (log1pf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log1pf, float, (float x));
+# endif
+_GL_CXXALIASWARN (log1pf);
+#elif defined GNULIB_POSIXCHECK
+# undef log1pf
+# if HAVE_RAW_DECL_LOG1PF
+_GL_WARN_ON_USE (log1pf, "log1pf is unportable - "
+                 "use gnulib module log1pf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1p
+#   define log1p rpl_log1p
+#  endif
+_GL_FUNCDECL_RPL (log1p, double, (double x));
+_GL_CXXALIAS_RPL (log1p, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (log1p, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (log1p, double, (double x));
+# endif
+_GL_CXXALIASWARN (log1p);
+#elif defined GNULIB_POSIXCHECK
+# undef log1p
+# if HAVE_RAW_DECL_LOG1P
+_GL_WARN_ON_USE (log1p, "log1p has portability problems - "
+                 "use gnulib module log1p for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1pl
+#   define log1pl rpl_log1pl
+#  endif
+_GL_FUNCDECL_RPL (log1pl, long double, (long double x));
+_GL_CXXALIAS_RPL (log1pl, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (log1pl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log1pl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log1pl);
+#elif defined GNULIB_POSIXCHECK
+# undef log1pl
+# if HAVE_RAW_DECL_LOG1PL
+_GL_WARN_ON_USE (log1pl, "log1pl has portability problems - "
+                 "use gnulib module log1pl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2f
+#   define log2f rpl_log2f
+#  endif
+_GL_FUNCDECL_RPL (log2f, float, (float x));
+_GL_CXXALIAS_RPL (log2f, float, (float x));
+# else
+#  if !1
+#   undef log2f
+_GL_FUNCDECL_SYS (log2f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log2f, float, (float x));
+# endif
+_GL_CXXALIASWARN (log2f);
+#elif defined GNULIB_POSIXCHECK
+# undef log2f
+# if HAVE_RAW_DECL_LOG2F
+_GL_WARN_ON_USE (log2f, "log2f is unportable - "
+                 "use gnulib module log2f for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2
+#   define log2 rpl_log2
+#  endif
+_GL_FUNCDECL_RPL (log2, double, (double x));
+_GL_CXXALIAS_RPL (log2, double, (double x));
+# else
+#  if !1
+#   undef log2
+_GL_FUNCDECL_SYS (log2, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (log2, double, (double x));
+# endif
+_GL_CXXALIASWARN (log2);
+#elif defined GNULIB_POSIXCHECK
+# undef log2
+# if HAVE_RAW_DECL_LOG2
+_GL_WARN_ON_USE (log2, "log2 is unportable - "
+                 "use gnulib module log2 for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2l
+#   define log2l rpl_log2l
+#  endif
+_GL_FUNCDECL_RPL (log2l, long double, (long double x));
+_GL_CXXALIAS_RPL (log2l, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (log2l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log2l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log2l);
+#elif defined GNULIB_POSIXCHECK
+# undef log2l
+# if HAVE_RAW_DECL_LOG2L
+_GL_WARN_ON_USE (log2l, "log2l is unportable - "
+                 "use gnulib module log2l for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logbf
+#   define logbf rpl_logbf
+#  endif
+_GL_FUNCDECL_RPL (logbf, float, (float x));
+_GL_CXXALIAS_RPL (logbf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (logbf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (logbf, float, (float x));
+# endif
+_GL_CXXALIASWARN (logbf);
+#elif defined GNULIB_POSIXCHECK
+# undef logbf
+# if HAVE_RAW_DECL_LOGBF
+_GL_WARN_ON_USE (logbf, "logbf is unportable - "
+                 "use gnulib module logbf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logb
+#   define logb rpl_logb
+#  endif
+_GL_FUNCDECL_RPL (logb, double, (double x));
+_GL_CXXALIAS_RPL (logb, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (logb, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (logb, double, (double x));
+# endif
+_GL_CXXALIASWARN (logb);
+#elif defined GNULIB_POSIXCHECK
+# undef logb
+# if HAVE_RAW_DECL_LOGB
+_GL_WARN_ON_USE (logb, "logb is unportable - "
+                 "use gnulib module logb for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logbl
+#   define logbl rpl_logbl
+#  endif
+_GL_FUNCDECL_RPL (logbl, long double, (long double x));
+_GL_CXXALIAS_RPL (logbl, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (logbl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (logbl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (logbl);
+#elif defined GNULIB_POSIXCHECK
+# undef logbl
+# if HAVE_RAW_DECL_LOGBL
+_GL_WARN_ON_USE (logbl, "logbl is unportable - "
+                 "use gnulib module logbl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modff
+#   define modff rpl_modff
+#  endif
+_GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modff, float, (float x, float *iptr));
+# else
+#  if !1
+#   undef modff
+_GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (modff, float, (float x, float *iptr));
+# endif
+_GL_CXXALIASWARN (modff);
+#elif defined GNULIB_POSIXCHECK
+# undef modff
+# if HAVE_RAW_DECL_MODFF
+_GL_WARN_ON_USE (modff, "modff is unportable - "
+                 "use gnulib module modff for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modf
+#   define modf rpl_modf
+#  endif
+_GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modf, double, (double x, double *iptr));
+# else
+_GL_CXXALIAS_SYS (modf, double, (double x, double *iptr));
+# endif
+_GL_CXXALIASWARN (modf);
+#elif defined GNULIB_POSIXCHECK
+# undef modf
+# if HAVE_RAW_DECL_MODF
+_GL_WARN_ON_USE (modf, "modf has portability problems - "
+                 "use gnulib module modf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modfl
+#   define modfl rpl_modfl
+#  endif
+_GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr)
+                                      _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr));
+# else
+#  if !1
+#   undef modfl
+_GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr)
+                                      _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr));
+# endif
+_GL_CXXALIASWARN (modfl);
+#elif defined GNULIB_POSIXCHECK
+# undef modfl
+# if HAVE_RAW_DECL_MODFL
+_GL_WARN_ON_USE (modfl, "modfl is unportable - "
+                 "use gnulib module modfl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef powf
+_GL_FUNCDECL_SYS (powf, float, (float x, float y));
+# endif
+_GL_CXXALIAS_SYS (powf, float, (float x, float y));
+_GL_CXXALIASWARN (powf);
+#elif defined GNULIB_POSIXCHECK
+# undef powf
+# if HAVE_RAW_DECL_POWF
+_GL_WARN_ON_USE (powf, "powf is unportable - "
+                 "use gnulib module powf for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainderf
+#   define remainderf rpl_remainderf
+#  endif
+_GL_FUNCDECL_RPL (remainderf, float, (float x, float y));
+_GL_CXXALIAS_RPL (remainderf, float, (float x, float y));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (remainderf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (remainderf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (remainderf);
+#elif defined GNULIB_POSIXCHECK
+# undef remainderf
+# if HAVE_RAW_DECL_REMAINDERF
+_GL_WARN_ON_USE (remainderf, "remainderf is unportable - "
+                 "use gnulib module remainderf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainder
+#   define remainder rpl_remainder
+#  endif
+_GL_FUNCDECL_RPL (remainder, double, (double x, double y));
+_GL_CXXALIAS_RPL (remainder, double, (double x, double y));
+# else
+#  if !1 || !1
+_GL_FUNCDECL_SYS (remainder, double, (double x, double y));
+#  endif
+_GL_CXXALIAS_SYS (remainder, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (remainder);
+#elif defined GNULIB_POSIXCHECK
+# undef remainder
+# if HAVE_RAW_DECL_REMAINDER
+_GL_WARN_ON_USE (remainder, "remainder is unportable - "
+                 "use gnulib module remainder for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainderl
+#   define remainderl rpl_remainderl
+#  endif
+_GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y));
+# else
+#  if !1
+#   undef remainderl
+_GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (remainderl);
+#elif defined GNULIB_POSIXCHECK
+# undef remainderl
+# if HAVE_RAW_DECL_REMAINDERL
+_GL_WARN_ON_USE (remainderl, "remainderl is unportable - "
+                 "use gnulib module remainderl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (rintf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (rintf, float, (float x));
+_GL_CXXALIASWARN (rintf);
+#elif defined GNULIB_POSIXCHECK
+# undef rintf
+# if HAVE_RAW_DECL_RINTF
+_GL_WARN_ON_USE (rintf, "rintf is unportable - "
+                 "use gnulib module rintf for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (rint, double, (double x));
+# endif
+_GL_CXXALIAS_SYS (rint, double, (double x));
+_GL_CXXALIASWARN (rint);
+#elif defined GNULIB_POSIXCHECK
+# undef rint
+# if HAVE_RAW_DECL_RINT
+_GL_WARN_ON_USE (rint, "rint is unportable - "
+                 "use gnulib module rint for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (rintl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (rintl, long double, (long double x));
+_GL_CXXALIASWARN (rintl);
+#elif defined GNULIB_POSIXCHECK
+# undef rintl
+# if HAVE_RAW_DECL_RINTL
+_GL_WARN_ON_USE (rintl, "rintl is unportable - "
+                 "use gnulib module rintl for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef roundf
+#   define roundf rpl_roundf
+#  endif
+_GL_FUNCDECL_RPL (roundf, float, (float x));
+_GL_CXXALIAS_RPL (roundf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (roundf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (roundf, float, (float x));
+# endif
+_GL_CXXALIASWARN (roundf);
+#elif defined GNULIB_POSIXCHECK
+# undef roundf
+# if HAVE_RAW_DECL_ROUNDF
+_GL_WARN_ON_USE (roundf, "roundf is unportable - "
+                 "use gnulib module roundf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef round
+#   define round rpl_round
+#  endif
+_GL_FUNCDECL_RPL (round, double, (double x));
+_GL_CXXALIAS_RPL (round, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (round, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (round, double, (double x));
+# endif
+_GL_CXXALIASWARN (round);
+#elif defined GNULIB_POSIXCHECK
+# undef round
+# if HAVE_RAW_DECL_ROUND
+_GL_WARN_ON_USE (round, "round is unportable - "
+                 "use gnulib module round for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef roundl
+#   define roundl rpl_roundl
+#  endif
+_GL_FUNCDECL_RPL (roundl, long double, (long double x));
+_GL_CXXALIAS_RPL (roundl, long double, (long double x));
+# else
+#  if !1
+#   undef roundl
+_GL_FUNCDECL_SYS (roundl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (roundl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (roundl);
+#elif defined GNULIB_POSIXCHECK
+# undef roundl
+# if HAVE_RAW_DECL_ROUNDL
+_GL_WARN_ON_USE (roundl, "roundl is unportable - "
+                 "use gnulib module roundl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef sinf
+_GL_FUNCDECL_SYS (sinf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sinf, float, (float x));
+_GL_CXXALIASWARN (sinf);
+#elif defined GNULIB_POSIXCHECK
+# undef sinf
+# if HAVE_RAW_DECL_SINF
+_GL_WARN_ON_USE (sinf, "sinf is unportable - "
+                 "use gnulib module sinf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef sinl
+_GL_FUNCDECL_SYS (sinl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (sinl, long double, (long double x));
+_GL_CXXALIASWARN (sinl);
+#elif defined GNULIB_POSIXCHECK
+# undef sinl
+# if HAVE_RAW_DECL_SINL
+_GL_WARN_ON_USE (sinl, "sinl is unportable - "
+                 "use gnulib module sinl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef sinhf
+_GL_FUNCDECL_SYS (sinhf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sinhf, float, (float x));
+_GL_CXXALIASWARN (sinhf);
+#elif defined GNULIB_POSIXCHECK
+# undef sinhf
+# if HAVE_RAW_DECL_SINHF
+_GL_WARN_ON_USE (sinhf, "sinhf is unportable - "
+                 "use gnulib module sinhf for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef sqrtf
+_GL_FUNCDECL_SYS (sqrtf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (sqrtf, float, (float x));
+_GL_CXXALIASWARN (sqrtf);
+#elif defined GNULIB_POSIXCHECK
+# undef sqrtf
+# if HAVE_RAW_DECL_SQRTF
+_GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - "
+                 "use gnulib module sqrtf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sqrtl
+#   define sqrtl rpl_sqrtl
+#  endif
+_GL_FUNCDECL_RPL (sqrtl, long double, (long double x));
+_GL_CXXALIAS_RPL (sqrtl, long double, (long double x));
+# else
+#  if !1 || !1
+#   undef sqrtl
+_GL_FUNCDECL_SYS (sqrtl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (sqrtl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (sqrtl);
+#elif defined GNULIB_POSIXCHECK
+# undef sqrtl
+# if HAVE_RAW_DECL_SQRTL
+_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - "
+                 "use gnulib module sqrtl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef tanf
+_GL_FUNCDECL_SYS (tanf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (tanf, float, (float x));
+_GL_CXXALIASWARN (tanf);
+#elif defined GNULIB_POSIXCHECK
+# undef tanf
+# if HAVE_RAW_DECL_TANF
+_GL_WARN_ON_USE (tanf, "tanf is unportable - "
+                 "use gnulib module tanf for portability");
+# endif
+#endif
+
+#if 0
+# if !1 || !1
+#  undef tanl
+_GL_FUNCDECL_SYS (tanl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (tanl, long double, (long double x));
+_GL_CXXALIASWARN (tanl);
+#elif defined GNULIB_POSIXCHECK
+# undef tanl
+# if HAVE_RAW_DECL_TANL
+_GL_WARN_ON_USE (tanl, "tanl is unportable - "
+                 "use gnulib module tanl for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+#  undef tanhf
+_GL_FUNCDECL_SYS (tanhf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (tanhf, float, (float x));
+_GL_CXXALIASWARN (tanhf);
+#elif defined GNULIB_POSIXCHECK
+# undef tanhf
+# if HAVE_RAW_DECL_TANHF
+_GL_WARN_ON_USE (tanhf, "tanhf is unportable - "
+                 "use gnulib module tanhf for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define truncf rpl_truncf
+#  endif
+_GL_FUNCDECL_RPL (truncf, float, (float x));
+_GL_CXXALIAS_RPL (truncf, float, (float x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (truncf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (truncf, float, (float x));
+# endif
+_GL_CXXALIASWARN (truncf);
+#elif defined GNULIB_POSIXCHECK
+# undef truncf
+# if HAVE_RAW_DECL_TRUNCF
+_GL_WARN_ON_USE (truncf, "truncf is unportable - "
+                 "use gnulib module truncf for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define trunc rpl_trunc
+#  endif
+_GL_FUNCDECL_RPL (trunc, double, (double x));
+_GL_CXXALIAS_RPL (trunc, double, (double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (trunc, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (trunc, double, (double x));
+# endif
+_GL_CXXALIASWARN (trunc);
+#elif defined GNULIB_POSIXCHECK
+# undef trunc
+# if HAVE_RAW_DECL_TRUNC
+_GL_WARN_ON_USE (trunc, "trunc is unportable - "
+                 "use gnulib module trunc for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef truncl
+#   define truncl rpl_truncl
+#  endif
+_GL_FUNCDECL_RPL (truncl, long double, (long double x));
+_GL_CXXALIAS_RPL (truncl, long double, (long double x));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (truncl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (truncl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (truncl);
+#elif defined GNULIB_POSIXCHECK
+# undef truncl
+# if HAVE_RAW_DECL_TRUNCL
+_GL_WARN_ON_USE (truncl, "truncl is unportable - "
+                 "use gnulib module truncl for portability");
+# endif
+#endif
+
+
+/* Definitions of function-like macros come here, after the function
+   declarations.  */
+
+
+#if 0
+# if 0
+_GL_EXTERN_C int gl_isfinitef (float x);
+_GL_EXTERN_C int gl_isfinited (double x);
+_GL_EXTERN_C int gl_isfinitel (long double x);
+#  undef isfinite
+#  define isfinite(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \
+    sizeof (x) == sizeof (double) ? gl_isfinited (x) : \
+    gl_isfinitef (x))
+# endif
+# ifdef __cplusplus
+#  ifdef isfinite
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
+#   undef isfinite
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isfinite
+_GL_WARN_REAL_FLOATING_DECL (isfinite);
+#  undef isfinite
+#  define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x)
+# endif
+#endif
+
+
+#if 0
+# if 0
+_GL_EXTERN_C int gl_isinff (float x);
+_GL_EXTERN_C int gl_isinfd (double x);
+_GL_EXTERN_C int gl_isinfl (long double x);
+#  undef isinf
+#  define isinf(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
+    sizeof (x) == sizeof (double) ? gl_isinfd (x) : \
+    gl_isinff (x))
+# endif
+# ifdef __cplusplus
+#  ifdef isinf
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
+#   undef isinf
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isinf
+_GL_WARN_REAL_FLOATING_DECL (isinf);
+#  undef isinf
+#  define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x)
+# endif
+#endif
+
+
+#if 1
+/* Test for NaN for 'float' numbers.  */
+# if 1
+/* The original <math.h> included above provides a declaration of isnan macro
+   or (older) isnanf function.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnanf
+#   define isnanf(x) __builtin_isnanf ((float)(x))
+#  elif defined isnan
+#   undef isnanf
+#   define isnanf(x) isnan ((float)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnanf
+#  define isnanf rpl_isnanf
+_GL_EXTERN_C int isnanf (float x);
+# endif
+#endif
+
+#if 1
+/* Test for NaN for 'double' numbers.
+   This function is a gnulib extension, unlike isnan() which applied only
+   to 'double' numbers earlier but now is a type-generic macro.  */
+# if 1
+/* The original <math.h> included above provides a declaration of isnan
+   macro.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnand
+#   define isnand(x) __builtin_isnan ((double)(x))
+#  else
+#   undef isnand
+#   define isnand(x) isnan ((double)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnand
+#  define isnand rpl_isnand
+_GL_EXTERN_C int isnand (double x);
+# endif
+#endif
+
+#if 1
+/* Test for NaN for 'long double' numbers.  */
+# if 0
+/* The original <math.h> included above provides a declaration of isnan
+   macro or (older) isnanl function.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnanl
+#   define isnanl(x) __builtin_isnanl ((long double)(x))
+#  elif defined isnan
+#   undef isnanl
+#   define isnanl(x) isnan ((long double)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnanl
+#  define isnanl rpl_isnanl
+_GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST;
+# endif
+#endif
+
+/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL!  */
+#if 1
+# if 1
+/* We can't just use the isnanf macro (e.g.) as exposed by
+   isnanf.h (e.g.) here, because those may end up being macros
+   that recursively expand back to isnan.  So use the gnulib
+   replacements for them directly. */
+#  if 1 && __GNUC__ >= 4
+#   define gl_isnan_f(x) __builtin_isnanf ((float)(x))
+#  else
+_GL_EXTERN_C int rpl_isnanf (float x);
+#   define gl_isnan_f(x) rpl_isnanf (x)
+#  endif
+#  if 1 && __GNUC__ >= 4
+#   define gl_isnan_d(x) __builtin_isnan ((double)(x))
+#  else
+_GL_EXTERN_C int rpl_isnand (double x);
+#   define gl_isnan_d(x) rpl_isnand (x)
+#  endif
+#  if 0 && __GNUC__ >= 4
+#   define gl_isnan_l(x) __builtin_isnanl ((long double)(x))
+#  else
+_GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
+#   define gl_isnan_l(x) rpl_isnanl (x)
+#  endif
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
+    sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
+    gl_isnan_f (x))
+# elif __GNUC__ >= 4
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \
+    sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \
+    __builtin_isnanf ((float)(x)))
+# endif
+# ifdef __cplusplus
+#  ifdef isnan
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
+#   undef isnan
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan)
+#  endif
+# else
+/* Ensure isnan is a macro.  */
+#  ifndef isnan
+#   define isnan isnan
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isnan
+_GL_WARN_REAL_FLOATING_DECL (isnan);
+#  undef isnan
+#  define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x)
+# endif
+#endif
+
+
+#if 1
+# if 1
+#  undef signbit
+   /* GCC 4.0 and newer provides three built-ins for signbit.  */
+#  define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
+    __builtin_signbitf (x))
+# endif
+# if 0
+#  undef signbit
+_GL_EXTERN_C int gl_signbitf (float arg);
+_GL_EXTERN_C int gl_signbitd (double arg);
+_GL_EXTERN_C int gl_signbitl (long double arg);
+#  if __GNUC__ >= 2 && !defined __STRICT_ANSI__
+#   define _GL_NUM_UINT_WORDS(type) \
+      ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+#   if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
+#    define gl_signbitf_OPTIMIZED_MACRO
+#    define gl_signbitf(arg) \
+       ({ union { float _value;                                         \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (float)];       \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;          \
+        })
+#   endif
+#   if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
+#    define gl_signbitd_OPTIMIZED_MACRO
+#    define gl_signbitd(arg) \
+       ({ union { double _value;                                        \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (double)];      \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;          \
+        })
+#   endif
+#   if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
+#    define gl_signbitl_OPTIMIZED_MACRO
+#    define gl_signbitl(arg) \
+       ({ union { long double _value;                                   \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;        \
+        })
+#   endif
+#  endif
+#  define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? gl_signbitd (x) : \
+    gl_signbitf (x))
+# endif
+# ifdef __cplusplus
+#  ifdef signbit
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
+#   undef signbit
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined signbit
+_GL_WARN_REAL_FLOATING_DECL (signbit);
+#  undef signbit
+#  define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x)
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_MATH_H */
+#endif /* _GL_MATH_H */
diff --git a/linux-lib/signal.h b/linux-lib/signal.h
new file mode 100644
index 0000000..0a15cf3
--- /dev/null
+++ b/linux-lib/signal.h
@@ -0,0 +1,759 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <signal.h>.
+
+   Copyright (C) 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T)
+/* Special invocation convention:
+   - Inside glibc header files.
+   - On glibc systems we have a sequence of nested includes
+     <signal.h> -> <ucontext.h> -> <signal.h>.
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.
+   - On glibc systems with GCC 4.3 we have a sequence of nested includes
+     <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>.
+     In this situation, some of the functions are not yet declared, therefore
+     we cannot provide the C++ aliases.  */
+
+# include_next <signal.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_SIGNAL_H
+
+#define _GL_ALREADY_INCLUDING_SIGNAL_H
+
+/* Define pid_t, uid_t.
+   Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.
+   On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes
+   us; so include <sys/types.h> now, before the second inclusion guard.  */
+#include <sys/types.h>
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <signal.h>
+
+#undef _GL_ALREADY_INCLUDING_SIGNAL_H
+
+#ifndef _GL_SIGNAL_H
+#define _GL_SIGNAL_H
+
+/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 declare
+   pthread_sigmask in <pthread.h>, not in <signal.h>.
+   But avoid namespace pollution on glibc systems.*/
+#if (0 || defined GNULIB_POSIXCHECK) \
+    && ((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ || defined __sun) \
+    && ! defined __GLIBC__
+# include <pthread.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* On AIX, sig_atomic_t already includes volatile.  C99 requires that
+   'volatile sig_atomic_t' ignore the extra modifier, but C89 did not.
+   Hence, redefine this to a non-volatile type as needed.  */
+#if ! 1
+# if !GNULIB_defined_sig_atomic_t
+typedef int rpl_sig_atomic_t;
+#  undef sig_atomic_t
+#  define sig_atomic_t rpl_sig_atomic_t
+#  define GNULIB_defined_sig_atomic_t 1
+# endif
+#endif
+
+/* A set or mask of signals.  */
+#if !1
+# if !GNULIB_defined_sigset_t
+typedef unsigned int sigset_t;
+#  define GNULIB_defined_sigset_t 1
+# endif
+#endif
+
+/* Define sighandler_t, the type of signal handlers.  A GNU extension.  */
+#if !1
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_sighandler_t
+typedef void (*sighandler_t) (int);
+#  define GNULIB_defined_sighandler_t 1
+# endif
+# ifdef __cplusplus
+}
+# endif
+#endif
+
+
+#if 0
+# ifndef SIGPIPE
+/* Define SIGPIPE to a value that does not overlap with other signals.  */
+#  define SIGPIPE 13
+#  define GNULIB_defined_SIGPIPE 1
+/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask',
+   'write', 'stdio'.  */
+# endif
+#endif
+
+
+/* Maximum signal number + 1.  */
+#ifndef NSIG
+# if defined __TANDEM
+#  define NSIG 32
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pthread_sigmask
+#   define pthread_sigmask rpl_pthread_sigmask
+#  endif
+_GL_FUNCDECL_RPL (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+_GL_CXXALIAS_RPL (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+#  endif
+_GL_CXXALIAS_SYS (pthread_sigmask, int,
+                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
+# endif
+_GL_CXXALIASWARN (pthread_sigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef pthread_sigmask
+# if HAVE_RAW_DECL_PTHREAD_SIGMASK
+_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - "
+                 "use gnulib module pthread_sigmask for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef raise
+#   define raise rpl_raise
+#  endif
+_GL_FUNCDECL_RPL (raise, int, (int sig));
+_GL_CXXALIAS_RPL (raise, int, (int sig));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (raise, int, (int sig));
+#  endif
+_GL_CXXALIAS_SYS (raise, int, (int sig));
+# endif
+_GL_CXXALIASWARN (raise);
+#elif defined GNULIB_POSIXCHECK
+# undef raise
+/* Assume raise is always declared.  */
+_GL_WARN_ON_USE (raise, "raise can crash on native Windows - "
+                 "use gnulib module raise for portability");
+#endif
+
+
+#if 1
+# if !1
+
+#  ifndef GNULIB_defined_signal_blocking
+#   define GNULIB_defined_signal_blocking 1
+#  endif
+
+/* Maximum signal number + 1.  */
+#  ifndef NSIG
+#   define NSIG 32
+#  endif
+
+/* This code supports only 32 signals.  */
+#  if !GNULIB_defined_verify_NSIG_constraint
+typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1];
+#   define GNULIB_defined_verify_NSIG_constraint 1
+#  endif
+
+# endif
+
+/* Test whether a given signal is contained in a signal set.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigismember
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig)
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigismember);
+
+/* Initialize a signal set to the empty set.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigemptyset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigemptyset);
+
+/* Add a signal to a signal set.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigaddset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig)
+                                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigaddset);
+
+/* Remove a signal from a signal set.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigdelset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig)
+                                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig));
+_GL_CXXALIASWARN (sigdelset);
+
+/* Fill a signal set with all possible signals.  */
+# if 1
+/* This function is defined as a macro on Mac OS X.  */
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+#   undef sigfillset
+#  endif
+# else
+_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigfillset);
+
+/* Return the set of those blocked signals that are pending.  */
+# if !1
+_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set));
+_GL_CXXALIASWARN (sigpending);
+
+/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET.
+   Then, if SET is not NULL, affect the current set of blocked signals by
+   combining it with *SET as indicated in OPERATION.
+   In this implementation, you are not allowed to change a signal handler
+   while the signal is blocked.  */
+# if !1
+#  define SIG_BLOCK   0  /* blocked_set = blocked_set | *set; */
+#  define SIG_SETMASK 1  /* blocked_set = *set; */
+#  define SIG_UNBLOCK 2  /* blocked_set = blocked_set & ~*set; */
+_GL_FUNCDECL_SYS (sigprocmask, int,
+                  (int operation, const sigset_t *set, sigset_t *old_set));
+# endif
+_GL_CXXALIAS_SYS (sigprocmask, int,
+                  (int operation, const sigset_t *set, sigset_t *old_set));
+_GL_CXXALIASWARN (sigprocmask);
+
+/* Install the handler FUNC for signal SIG, and return the previous
+   handler.  */
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_function_taking_int_returning_void_t
+typedef void (*_gl_function_taking_int_returning_void_t) (int);
+#  define GNULIB_defined_function_taking_int_returning_void_t 1
+# endif
+# ifdef __cplusplus
+}
+# endif
+# if !1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define signal rpl_signal
+#  endif
+_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+# else
+_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t,
+                  (int sig, _gl_function_taking_int_returning_void_t func));
+# endif
+_GL_CXXALIASWARN (signal);
+
+# if !1 && GNULIB_defined_SIGPIPE
+/* Raise signal SIGPIPE.  */
+_GL_EXTERN_C int _gl_raise_SIGPIPE (void);
+# endif
+
+#elif defined GNULIB_POSIXCHECK
+# undef sigaddset
+# if HAVE_RAW_DECL_SIGADDSET
+_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigdelset
+# if HAVE_RAW_DECL_SIGDELSET
+_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigemptyset
+# if HAVE_RAW_DECL_SIGEMPTYSET
+_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigfillset
+# if HAVE_RAW_DECL_SIGFILLSET
+_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigismember
+# if HAVE_RAW_DECL_SIGISMEMBER
+_GL_WARN_ON_USE (sigismember, "sigismember is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigpending
+# if HAVE_RAW_DECL_SIGPENDING
+_GL_WARN_ON_USE (sigpending, "sigpending is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+# undef sigprocmask
+# if HAVE_RAW_DECL_SIGPROCMASK
+_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - "
+                 "use the gnulib module sigprocmask for portability");
+# endif
+#endif /* 1 */
+
+
+#if 1
+# if !1
+
+#  if !1
+
+#   if !GNULIB_defined_siginfo_types
+
+/* Present to allow compilation, but unsupported by gnulib.  */
+union sigval
+{
+  int sival_int;
+  void *sival_ptr;
+};
+
+/* Present to allow compilation, but unsupported by gnulib.  */
+struct siginfo_t
+{
+  int si_signo;
+  int si_code;
+  int si_errno;
+  pid_t si_pid;
+  uid_t si_uid;
+  void *si_addr;
+  int si_status;
+  long si_band;
+  union sigval si_value;
+};
+typedef struct siginfo_t siginfo_t;
+
+#    define GNULIB_defined_siginfo_types 1
+#   endif
+
+#  endif /* !1 */
+
+/* We assume that platforms which lack the sigaction() function also lack
+   the 'struct sigaction' type, and vice versa.  */
+
+#  if !GNULIB_defined_struct_sigaction
+
+struct sigaction
+{
+  union
+  {
+    void (*_sa_handler) (int);
+    /* Present to allow compilation, but unsupported by gnulib.  POSIX
+       says that implementations may, but not must, make sa_sigaction
+       overlap with sa_handler, but we know of no implementation where
+       they do not overlap.  */
+    void (*_sa_sigaction) (int, siginfo_t *, void *);
+  } _sa_func;
+  sigset_t sa_mask;
+  /* Not all POSIX flags are supported.  */
+  int sa_flags;
+};
+#   define sa_handler _sa_func._sa_handler
+#   define sa_sigaction _sa_func._sa_sigaction
+/* Unsupported flags are not present.  */
+#   define SA_RESETHAND 1
+#   define SA_NODEFER 2
+#   define SA_RESTART 4
+
+#   define GNULIB_defined_struct_sigaction 1
+#  endif
+
+_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict,
+                                   struct sigaction *restrict));
+
+# elif !1
+
+#  define sa_sigaction sa_handler
+
+# endif /* !1, !1 */
+
+_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict,
+                                   struct sigaction *restrict));
+_GL_CXXALIASWARN (sigaction);
+
+#elif defined GNULIB_POSIXCHECK
+# undef sigaction
+# if HAVE_RAW_DECL_SIGACTION
+_GL_WARN_ON_USE (sigaction, "sigaction is unportable - "
+                 "use the gnulib module sigaction for portability");
+# endif
+#endif
+
+/* Some systems don't have SA_NODEFER.  */
+#ifndef SA_NODEFER
+# define SA_NODEFER 0
+#endif
+
+
+#endif /* _GL_SIGNAL_H */
+#endif /* _GL_SIGNAL_H */
+#endif
diff --git a/linux-lib/spawn.h b/linux-lib/spawn.h
new file mode 100644
index 0000000..9182ed2
--- /dev/null
+++ b/linux-lib/spawn.h
@@ -0,0 +1,1193 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Definitions for POSIX spawn interface.
+   Copyright (C) 2000, 2003-2004, 2008-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_SPAWN_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <spawn.h>
+#endif
+
+#ifndef _GL_SPAWN_H
+#define _GL_SPAWN_H
+
+/* Get definitions of 'struct sched_param' and 'sigset_t'.
+   But avoid namespace pollution on glibc systems.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <sched.h>
+# include <signal.h>
+#endif
+
+#include <sys/types.h>
+
+#ifndef __THROW
+# define __THROW
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".
+   Other compilers use __restrict, __restrict__, and _Restrict, and
+   'configure' might #define 'restrict' to those words, so pick a
+   different name.  */
+#ifndef _Restrict_
+# if 199901L <= __STDC_VERSION__
+#  define _Restrict_ restrict
+# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
+#  define _Restrict_ __restrict
+# else
+#  define _Restrict_
+# endif
+#endif
+/* gcc 3.1 and up support the [restrict] syntax.  Don't trust
+   sys/cdefs.h's definition of __restrict_arr, though, as it
+   mishandles gcc -ansi -pedantic.  */
+#ifndef _Restrict_arr_
+# if ((199901L <= __STDC_VERSION__                                      \
+       || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__))     \
+           && !defined __STRICT_ANSI__))                                        \
+      && !defined __GNUG__)
+#  define _Restrict_arr_ _Restrict_
+# else
+#  define _Restrict_arr_
+# endif
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Data structure to contain attributes for thread creation.  */
+#if 0
+# define posix_spawnattr_t rpl_posix_spawnattr_t
+#endif
+#if 0 || !1
+# if !GNULIB_defined_posix_spawnattr_t
+typedef struct
+{
+  short int _flags;
+  pid_t _pgrp;
+  sigset_t _sd;
+  sigset_t _ss;
+  struct sched_param _sp;
+  int _policy;
+  int __pad[16];
+} posix_spawnattr_t;
+#  define GNULIB_defined_posix_spawnattr_t 1
+# endif
+#endif
+
+
+/* Data structure to contain information about the actions to be
+   performed in the new process with respect to file descriptors.  */
+#if 0
+# define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t
+#endif
+#if 0 || !1
+# if !GNULIB_defined_posix_spawn_file_actions_t
+typedef struct
+{
+  int _allocated;
+  int _used;
+  struct __spawn_action *_actions;
+  int __pad[16];
+} posix_spawn_file_actions_t;
+#  define GNULIB_defined_posix_spawn_file_actions_t 1
+# endif
+#endif
+
+
+/* Flags to be set in the 'posix_spawnattr_t'.  */
+#if 1
+/* Use the values from the system, but provide the missing ones.  */
+# ifndef POSIX_SPAWN_SETSCHEDPARAM
+#  define POSIX_SPAWN_SETSCHEDPARAM 0
+# endif
+# ifndef POSIX_SPAWN_SETSCHEDULER
+#  define POSIX_SPAWN_SETSCHEDULER 0
+# endif
+#else
+# if 0
+/* Use the values from the system, for better compatibility.  */
+/* But this implementation does not support AIX extensions.  */
+#  undef POSIX_SPAWN_FORK_HANDLERS
+# else
+#  define POSIX_SPAWN_RESETIDS           0x01
+#  define POSIX_SPAWN_SETPGROUP          0x02
+#  define POSIX_SPAWN_SETSIGDEF          0x04
+#  define POSIX_SPAWN_SETSIGMASK         0x08
+#  define POSIX_SPAWN_SETSCHEDPARAM      0x10
+#  define POSIX_SPAWN_SETSCHEDULER       0x20
+# endif
+#endif
+/* A GNU extension.  Use the next free bit position.  */
+#define POSIX_SPAWN_USEVFORK \
+  ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1)                     \
+    | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1)                 \
+    | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1)                 \
+    | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1)               \
+    | POSIX_SPAWN_SETSCHEDPARAM                                           \
+    | (POSIX_SPAWN_SETSCHEDPARAM > 0 ? POSIX_SPAWN_SETSCHEDPARAM - 1 : 0) \
+    | POSIX_SPAWN_SETSCHEDULER                                            \
+    | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0))  \
+   + 1)
+#if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap
+typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap
+            [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP
+                | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK
+                | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)
+               & POSIX_SPAWN_USEVFORK)
+              == 0)
+             ? 1 : -1];
+# define GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap 1
+#endif
+
+
+#if 0
+/* Spawn a new process executing PATH with the attributes describes in *ATTRP.
+   Before running the process perform the actions described in FILE-ACTIONS.
+
+   This function is a possible cancellation points and therefore not
+   marked with __THROW. */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn rpl_posix_spawn
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+_GL_CXXALIAS_RPL (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_]));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn, int,
+                  (pid_t *_Restrict_ __pid,
+                   const char *_Restrict_ __path,
+                   const posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const posix_spawnattr_t *_Restrict_ __attrp,
+                   char *const argv[_Restrict_arr_],
+                   char *const envp[_Restrict_arr_]));
+# endif
+_GL_CXXALIASWARN (posix_spawn);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn
+# if HAVE_RAW_DECL_POSIX_SPAWN
+_GL_WARN_ON_USE (posix_spawn, "posix_spawn is unportable - "
+                 "use gnulib module posix_spawn for portability");
+# endif
+#endif
+
+#if 1
+/* Similar to 'posix_spawn' but search for FILE in the PATH.
+
+   This function is a possible cancellation points and therefore not
+   marked with __THROW.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnp rpl_posix_spawnp
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+_GL_CXXALIAS_RPL (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[]));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[])
+                  _GL_ARG_NONNULL ((2, 5, 6)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnp, int,
+                  (pid_t *__pid, const char *__file,
+                   const posix_spawn_file_actions_t *__file_actions,
+                   const posix_spawnattr_t *__attrp,
+                   char *const argv[], char *const envp[]));
+# endif
+_GL_CXXALIASWARN (posix_spawnp);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnp
+# if HAVE_RAW_DECL_POSIX_SPAWNP
+_GL_WARN_ON_USE (posix_spawnp, "posix_spawnp is unportable - "
+                 "use gnulib module posix_spawnp for portability");
+# endif
+#endif
+
+
+#if 1
+/* Initialize data structure with attributes for 'spawn' to default values.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_init rpl_posix_spawnattr_init
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)
+                                             __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)
+                                             __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_init);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_init
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT
+_GL_WARN_ON_USE (posix_spawnattr_init, "posix_spawnattr_init is unportable - "
+                 "use gnulib module posix_spawnattr_init for portability");
+# endif
+#endif
+
+#if 1
+/* Free resources associated with ATTR.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_destroy rpl_posix_spawnattr_destroy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)
+                                                __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)
+                                                __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_destroy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_destroy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY
+_GL_WARN_ON_USE (posix_spawnattr_destroy,
+                 "posix_spawnattr_destroy is unportable - "
+                 "use gnulib module posix_spawnattr_destroy for portability");
+# endif
+#endif
+
+#if 0
+/* Store signal mask for signals with default handling from ATTR in
+   SIGDEFAULT.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getsigdefault, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigdefault));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getsigdefault);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigdefault
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT
+_GL_WARN_ON_USE (posix_spawnattr_getsigdefault,
+                 "posix_spawnattr_getsigdefault is unportable - "
+                 "use gnulib module posix_spawnattr_getsigdefault for portability");
+# endif
+#endif
+
+#if 0
+/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setsigdefault, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigdefault));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setsigdefault);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setsigdefault
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT
+_GL_WARN_ON_USE (posix_spawnattr_setsigdefault,
+                 "posix_spawnattr_setsigdefault is unportable - "
+                 "use gnulib module posix_spawnattr_setsigdefault for portability");
+# endif
+#endif
+
+#if 0
+/* Store signal mask for the new process from ATTR in SIGMASK.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getsigmask, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   sigset_t *_Restrict_ __sigmask));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getsigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigmask
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK
+_GL_WARN_ON_USE (posix_spawnattr_getsigmask,
+                 "posix_spawnattr_getsigmask is unportable - "
+                 "use gnulib module posix_spawnattr_getsigmask for portability");
+# endif
+#endif
+
+#if 1
+/* Set signal mask for the new process in ATTR to SIGMASK.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setsigmask, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const sigset_t *_Restrict_ __sigmask));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setsigmask);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setsigmask
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK
+_GL_WARN_ON_USE (posix_spawnattr_setsigmask,
+                 "posix_spawnattr_setsigmask is unportable - "
+                 "use gnulib module posix_spawnattr_setsigmask for portability");
+# endif
+#endif
+
+#if 0
+/* Get flag word from the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getflags rpl_posix_spawnattr_getflags
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getflags, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   short int *_Restrict_ __flags));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getflags);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getflags
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS
+_GL_WARN_ON_USE (posix_spawnattr_getflags,
+                 "posix_spawnattr_getflags is unportable - "
+                 "use gnulib module posix_spawnattr_getflags for portability");
+# endif
+#endif
+
+#if 1
+/* Store flags in the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setflags rpl_posix_spawnattr_setflags
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setflags, int,
+                  (posix_spawnattr_t *__attr, short int __flags));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setflags);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setflags
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS
+_GL_WARN_ON_USE (posix_spawnattr_setflags,
+                 "posix_spawnattr_setflags is unportable - "
+                 "use gnulib module posix_spawnattr_setflags for portability");
+# endif
+#endif
+
+#if 0
+/* Get process group ID from the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getpgroup, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   pid_t *_Restrict_ __pgroup));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getpgroup);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getpgroup
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP
+_GL_WARN_ON_USE (posix_spawnattr_getpgroup,
+                 "posix_spawnattr_getpgroup is unportable - "
+                 "use gnulib module posix_spawnattr_getpgroup for portability");
+# endif
+#endif
+
+#if 0
+/* Store process group ID in the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setpgroup, int,
+                  (posix_spawnattr_t *__attr, pid_t __pgroup));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setpgroup);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setpgroup
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP
+_GL_WARN_ON_USE (posix_spawnattr_setpgroup,
+                 "posix_spawnattr_setpgroup is unportable - "
+                 "use gnulib module posix_spawnattr_setpgroup for portability");
+# endif
+#endif
+
+#if 0
+/* Get scheduling policy from the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy));
+# else
+#  if !1 || POSIX_SPAWN_SETSCHEDULER == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getschedpolicy, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   int *_Restrict_ __schedpolicy));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getschedpolicy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getschedpolicy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY
+_GL_WARN_ON_USE (posix_spawnattr_getschedpolicy,
+                 "posix_spawnattr_getschedpolicy is unportable - "
+                 "use gnulib module posix_spawnattr_getschedpolicy for portability");
+# endif
+#endif
+
+#if 0
+/* Store scheduling policy in the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy));
+# else
+#  if !1 || POSIX_SPAWN_SETSCHEDULER == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setschedpolicy, int,
+                  (posix_spawnattr_t *__attr, int __schedpolicy));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setschedpolicy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setschedpolicy
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY
+_GL_WARN_ON_USE (posix_spawnattr_setschedpolicy,
+                 "posix_spawnattr_setschedpolicy is unportable - "
+                 "use gnulib module posix_spawnattr_setschedpolicy for portability");
+# endif
+#endif
+
+#if 0
+/* Get scheduling parameters from the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam));
+# else
+#  if !1 || POSIX_SPAWN_SETSCHEDPARAM == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_getschedparam, int,
+                  (const posix_spawnattr_t *_Restrict_ __attr,
+                   struct sched_param *_Restrict_ __schedparam));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_getschedparam);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getschedparam
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM
+_GL_WARN_ON_USE (posix_spawnattr_getschedparam,
+                 "posix_spawnattr_getschedparam is unportable - "
+                 "use gnulib module posix_spawnattr_getschedparam for portability");
+# endif
+#endif
+
+#if 0
+/* Store scheduling parameters in the attribute structure.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam
+#  endif
+_GL_FUNCDECL_RPL (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam));
+# else
+#  if !1 || POSIX_SPAWN_SETSCHEDPARAM == 0
+_GL_FUNCDECL_SYS (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawnattr_setschedparam, int,
+                  (posix_spawnattr_t *_Restrict_ __attr,
+                   const struct sched_param *_Restrict_ __schedparam));
+# endif
+_GL_CXXALIASWARN (posix_spawnattr_setschedparam);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setschedparam
+# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM
+_GL_WARN_ON_USE (posix_spawnattr_setschedparam,
+                 "posix_spawnattr_setschedparam is unportable - "
+                 "use gnulib module posix_spawnattr_setschedparam for portability");
+# endif
+#endif
+
+
+#if 1
+/* Initialize data structure for file attribute for 'spawn' call.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_init, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_init);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_init
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT
+_GL_WARN_ON_USE (posix_spawn_file_actions_init,
+                 "posix_spawn_file_actions_init is unportable - "
+                 "use gnulib module posix_spawn_file_actions_init for portability");
+# endif
+#endif
+
+#if 1
+/* Free resources associated with FILE-ACTIONS.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_destroy, int,
+                  (posix_spawn_file_actions_t *__file_actions));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_destroy);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_destroy
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY
+_GL_WARN_ON_USE (posix_spawn_file_actions_destroy,
+                 "posix_spawn_file_actions_destroy is unportable - "
+                 "use gnulib module posix_spawn_file_actions_destroy for portability");
+# endif
+#endif
+
+#if 1
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'open' for the given file during the 'spawn' call.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode)
+                  __THROW _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode)
+                  __THROW _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_addopen, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd,
+                   const char *_Restrict_ __path, int __oflag, mode_t __mode));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_addopen);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addopen
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+_GL_WARN_ON_USE (posix_spawn_file_actions_addopen,
+                 "posix_spawn_file_actions_addopen is unportable - "
+                 "use gnulib module posix_spawn_file_actions_addopen for portability");
+# endif
+#endif
+
+#if 1
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'close' for the given file descriptor during the 'spawn' call.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int,
+                  (posix_spawn_file_actions_t *__file_actions, int __fd));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_addclose);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addclose
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+_GL_WARN_ON_USE (posix_spawn_file_actions_addclose,
+                 "posix_spawn_file_actions_addclose is unportable - "
+                 "use gnulib module posix_spawn_file_actions_addclose for portability");
+# endif
+#endif
+
+#if 1
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'dup2' for the given file descriptors during the 'spawn' call.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_adddup2, int,
+                  (posix_spawn_file_actions_t *__file_actions,
+                   int __fd, int __newfd));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_adddup2);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_adddup2
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
+_GL_WARN_ON_USE (posix_spawn_file_actions_adddup2,
+                 "posix_spawn_file_actions_adddup2 is unportable - "
+                 "use gnulib module posix_spawn_file_actions_adddup2 for portability");
+# endif
+#endif
+
+
+#endif /* _GL_SPAWN_H */
+#endif /* _GL_SPAWN_H */
diff --git a/linux-lib/stdio.h b/linux-lib/stdio.h
new file mode 100644
index 0000000..f58f733
--- /dev/null
+++ b/linux-lib/stdio.h
@@ -0,0 +1,1657 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <stdio.h>.
+
+   Copyright (C) 2004, 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H
+/* Special invocation convention:
+   - Inside glibc header files.
+   - On OSF/1 5.1 we have a sequence of nested includes
+     <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> ->
+     <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>.
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.  */
+
+#include_next <stdio.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_STDIO_H
+
+#define _GL_ALREADY_INCLUDING_STDIO_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <stdio.h>
+
+#undef _GL_ALREADY_INCLUDING_STDIO_H
+
+#ifndef _GL_STDIO_H
+#define _GL_STDIO_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_STDIO_INLINE
+# define _GL_STDIO_INLINE _GL_INLINE
+#endif
+
+/* Get va_list.  Needed on many systems, including glibc 2.8.  */
+#include <stdarg.h>
+
+#include <stddef.h>
+
+/* Get off_t and ssize_t.  Needed on many systems, including glibc 2.8
+   and eglibc 2.11.2.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF
+   indicates to GCC that the function takes a format string and arguments,
+   where the format string directives are the ones standardized by ISO C99
+   and POSIX.  */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF,
+   except that it indicates to GCC that the supported format string directives
+   are the ones of the system printf(), rather than the ones standardized by
+   ISO C99 and POSIX.  */
+#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF
+   indicates to GCC that the function takes a format string and arguments,
+   where the format string directives are the ones standardized by ISO C99
+   and POSIX.  */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF,
+   except that it indicates to GCC that the supported format string directives
+   are the ones of the system scanf(), rather than the ones standardized by
+   ISO C99 and POSIX.  */
+#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+
+/* Solaris 10 declares renameat in <unistd.h>, not in <stdio.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (0 || defined GNULIB_POSIXCHECK) && defined __sun \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* Macros for stringification.  */
+#define _GL_STDIO_STRINGIZE(token) #token
+#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token)
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dprintf rpl_dprintf
+#  endif
+_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (dprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef dprintf
+# if HAVE_RAW_DECL_DPRINTF
+_GL_WARN_ON_USE (dprintf, "dprintf is unportable - "
+                 "use gnulib module dprintf for portability");
+# endif
+#endif
+
+#if 0
+/* Close STREAM and its underlying file descriptor.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fclose rpl_fclose
+#  endif
+_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fclose, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fclose);
+#elif defined GNULIB_POSIXCHECK
+# undef fclose
+/* Assume fclose is always declared.  */
+_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
+                 "use gnulib module fclose for portable POSIX compliance");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fdopen
+#   define fdopen rpl_fdopen
+#  endif
+_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
+# endif
+_GL_CXXALIASWARN (fdopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fdopen
+/* Assume fdopen is always declared.  */
+_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module fdopen for portability");
+#endif
+
+#if 0
+/* Flush all pending data on STREAM according to POSIX rules.  Both
+   output and seekable input streams are supported.
+   Note! LOSS OF DATA can occur if fflush is applied on an input stream
+   that is _not_seekable_ or on an update stream that is _not_seekable_
+   and in which the most recent operation was input.  Seekability can
+   be tested with lseek(fileno(fp),0,SEEK_CUR).  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fflush rpl_fflush
+#  endif
+_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream));
+_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream));
+# else
+_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fflush);
+#elif defined GNULIB_POSIXCHECK
+# undef fflush
+/* Assume fflush is always declared.  */
+_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - "
+                 "use gnulib module fflush for portable POSIX compliance");
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fgetc
+#   define fgetc rpl_fgetc
+#  endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fgetc);
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fgets
+#   define fgets rpl_fgets
+#  endif
+_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream)
+                                 _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fgets);
+#endif
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fopen
+#   define fopen rpl_fopen
+#  endif
+_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode));
+# endif
+_GL_CXXALIASWARN (fopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fopen
+/* Assume fopen is always declared.  */
+_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module fopen for portability");
+#endif
+
+#if 1 || 1
+# if (1 && 1) \
+     || (1 && 0 && (0 || 0))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fprintf rpl_fprintf
+#  endif
+#  define GNULIB_overrides_fprintf 1
+#  if 1 || 1
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  else
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fprintf);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_fprintf
+#  undef fprintf
+# endif
+/* Assume fprintf is always declared.  */
+_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - "
+                 "use gnulib module fprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if 0
+/* Discard all pending buffered I/O data on STREAM.
+   STREAM must not be wide-character oriented.
+   When discarding pending output, the file position is set back to where it
+   was before the write calls.  When discarding pending input, the file
+   position is advanced to match the end of the previously read input.
+   Return 0 if successful.  Upon error, return -1 and set errno.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fpurge rpl_fpurge
+#  endif
+_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fpurge);
+#elif defined GNULIB_POSIXCHECK
+# undef fpurge
+# if HAVE_RAW_DECL_FPURGE
+_GL_WARN_ON_USE (fpurge, "fpurge is not always present - "
+                 "use gnulib module fpurge for portability");
+# endif
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputc
+#   define fputc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputc);
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputs
+#   define fputs rpl_fputs
+#  endif
+_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputs);
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fread
+#   define fread rpl_fread
+#  endif
+_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)
+                                 _GL_ARG_NONNULL ((4)));
+_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fread);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef freopen
+#   define freopen rpl_freopen
+#  endif
+_GL_FUNCDECL_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# endif
+_GL_CXXALIASWARN (freopen);
+#elif defined GNULIB_POSIXCHECK
+# undef freopen
+/* Assume freopen is always declared.  */
+_GL_WARN_ON_USE (freopen,
+                 "freopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module freopen for portability");
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fscanf
+#   define fscanf rpl_fscanf
+#  endif
+_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...)
+                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3)
+                               _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fscanf);
+#endif
+
+
+/* Set up the following warnings, based on which modules are in use.
+   GNU Coding Standards discourage the use of fseek, since it imposes
+   an arbitrary limitation on some 32-bit hosts.  Remember that the
+   fseek module depends on the fseeko module, so we only have three
+   cases to consider:
+
+   1. The developer is not using either module.  Issue a warning under
+   GNULIB_POSIXCHECK for both functions, to remind them that both
+   functions have bugs on some systems.  _GL_NO_LARGE_FILES has no
+   impact on this warning.
+
+   2. The developer is using both modules.  They may be unaware of the
+   arbitrary limitations of fseek, so issue a warning under
+   GNULIB_POSIXCHECK.  On the other hand, they may be using both
+   modules intentionally, so the developer can define
+   _GL_NO_LARGE_FILES in the compilation units where the use of fseek
+   is safe, to silence the warning.
+
+   3. The developer is using the fseeko module, but not fseek.  Gnulib
+   guarantees that fseek will still work around platform bugs in that
+   case, but we presume that the developer is aware of the pitfalls of
+   fseek and was trying to avoid it, so issue a warning even when
+   GNULIB_POSIXCHECK is undefined.  Again, _GL_NO_LARGE_FILES can be
+   defined to silence the warning in particular compilation units.
+   In C++ compilations with GNULIB_NAMESPACE, in order to avoid that
+   fseek gets defined as a macro, it is recommended that the developer
+   uses the fseek module, even if he is not calling the fseek function.
+
+   Most gnulib clients that perform stream operations should fall into
+   category 3.  */
+
+#if 0
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 2, above.  */
+#  undef fseek
+# endif
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseek
+#   define fseek rpl_fseek
+#  endif
+_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence));
+# else
+_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseek);
+#endif
+
+#if 0
+# if !0 && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 3, above.  */
+#  undef fseek
+# endif
+# if 0
+/* Provide an fseeko function that is aware of a preceding fflush(), and which
+   detects pipes.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseeko
+#   define fseeko rpl_fseeko
+#  endif
+_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseeko);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FSEEK_WARN /* Category 1, above.  */
+# undef fseek
+# undef fseeko
+# if HAVE_RAW_DECL_FSEEKO
+_GL_WARN_ON_USE (fseeko, "fseeko is unportable - "
+                 "use gnulib module fseeko for portability");
+# endif
+#endif
+
+#ifdef _GL_FSEEK_WARN
+# undef _GL_FSEEK_WARN
+/* Here, either fseek is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_fseek (declared above).  */
+_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use fseeko function for handling of large files");
+#endif
+
+
+/* ftell, ftello.  See the comments on fseek/fseeko.  */
+
+#if 0
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 2, above.  */
+#  undef ftell
+# endif
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftell
+#   define ftell rpl_ftell
+#  endif
+_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftell, long, (FILE *fp));
+# else
+_GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftell);
+#endif
+
+#if 0
+# if !0 && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 3, above.  */
+#  undef ftell
+# endif
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftello
+#   define ftello rpl_ftello
+#  endif
+_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftello);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FTELL_WARN /* Category 1, above.  */
+# undef ftell
+# undef ftello
+# if HAVE_RAW_DECL_FTELLO
+_GL_WARN_ON_USE (ftello, "ftello is unportable - "
+                 "use gnulib module ftello for portability");
+# endif
+#endif
+
+#ifdef _GL_FTELL_WARN
+# undef _GL_FTELL_WARN
+/* Here, either ftell is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_ftell (declared above).  */
+_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use ftello function for handling of large files");
+#endif
+
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fwrite
+#   define fwrite rpl_fwrite
+#  endif
+_GL_FUNCDECL_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+
+/* Work around glibc bug 11959
+   <http://sources.redhat.com/bugzilla/show_bug.cgi?id=11959>,
+   which sometimes causes an unwanted diagnostic for fwrite calls.
+   This affects only function declaration attributes, so it's not
+   needed for C++.  */
+#  if !defined __cplusplus && 0 < __USE_FORTIFY_LEVEL
+_GL_STDIO_INLINE size_t _GL_ARG_NONNULL ((1, 4))
+rpl_fwrite (const void *ptr, size_t s, size_t n, FILE *stream)
+{
+  size_t r = fwrite (ptr, s, n, stream);
+  (void) r;
+  return r;
+}
+#   undef fwrite
+#   define fwrite rpl_fwrite
+#  endif
+# endif
+_GL_CXXALIASWARN (fwrite);
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getc
+#   define getc rpl_fgetc
+#  endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (getc, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (getc);
+#endif
+
+#if 1
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getchar
+#   define getchar rpl_getchar
+#  endif
+_GL_FUNCDECL_RPL (getchar, int, (void));
+_GL_CXXALIAS_RPL (getchar, int, (void));
+# else
+_GL_CXXALIAS_SYS (getchar, int, (void));
+# endif
+_GL_CXXALIASWARN (getchar);
+#endif
+
+#if 1
+/* Read input, up to (and including) the next occurrence of DELIMITER, from
+   STREAM, store it in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdelim
+#   define getdelim rpl_getdelim
+#  endif
+_GL_FUNCDECL_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+_GL_CXXALIAS_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# endif
+_GL_CXXALIASWARN (getdelim);
+#elif defined GNULIB_POSIXCHECK
+# undef getdelim
+# if HAVE_RAW_DECL_GETDELIM
+_GL_WARN_ON_USE (getdelim, "getdelim is unportable - "
+                 "use gnulib module getdelim for portability");
+# endif
+#endif
+
+#if 1
+/* Read a line, up to (and including) the next newline, from STREAM, store it
+   in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getline
+#   define getline rpl_getline
+#  endif
+_GL_FUNCDECL_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# endif
+# if 1
+_GL_CXXALIASWARN (getline);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getline
+# if HAVE_RAW_DECL_GETLINE
+_GL_WARN_ON_USE (getline, "getline is unportable - "
+                 "use gnulib module getline for portability");
+# endif
+#endif
+
+/* It is very rare that the developer ever has full control of stdin,
+   so any use of gets warrants an unconditional warning; besides, C11
+   removed it.  */
+#undef gets
+#if HAVE_RAW_DECL_GETS
+_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#endif
+
+
+#if 1 || 0
+struct obstack;
+/* Grow an obstack with formatted output.  Return the number of
+   bytes added to OBS.  No trailing nul byte is added, and the
+   object should be closed with obstack_finish before use.  Upon
+   memory allocation error, call obstack_alloc_failed_handler.  Upon
+   other error, return -1.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_printf rpl_obstack_printf
+#  endif
+_GL_FUNCDECL_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (obstack_printf);
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_vprintf rpl_obstack_vprintf
+#  endif
+_GL_FUNCDECL_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (obstack_vprintf);
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pclose, int, (FILE *stream));
+_GL_CXXALIASWARN (pclose);
+#elif defined GNULIB_POSIXCHECK
+# undef pclose
+# if HAVE_RAW_DECL_PCLOSE
+_GL_WARN_ON_USE (pclose, "pclose is unportable - "
+                 "use gnulib module pclose for more portability");
+# endif
+#endif
+
+#if 1
+/* Print a message to standard error, describing the value of ERRNO,
+   (if STRING is not NULL and not empty) prefixed with STRING and ": ",
+   and terminated with a newline.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define perror rpl_perror
+#  endif
+_GL_FUNCDECL_RPL (perror, void, (const char *string));
+_GL_CXXALIAS_RPL (perror, void, (const char *string));
+# else
+_GL_CXXALIAS_SYS (perror, void, (const char *string));
+# endif
+_GL_CXXALIASWARN (perror);
+#elif defined GNULIB_POSIXCHECK
+# undef perror
+/* Assume perror is always declared.  */
+_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
+                 "use gnulib module perror for portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef popen
+#   define popen rpl_popen
+#  endif
+_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
+# endif
+_GL_CXXALIASWARN (popen);
+#elif defined GNULIB_POSIXCHECK
+# undef popen
+# if HAVE_RAW_DECL_POPEN
+_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
+                 "use gnulib module popen or pipe for more portability");
+# endif
+#endif
+
+#if 1 || 1
+# if (1 && 1) \
+     || (1 && 0 && (0 || 0))
+#  if defined __GNUC__
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+/* Don't break __attribute__((format(printf,M,N))).  */
+#    define printf __printf__
+#   endif
+#   if 1 || 1
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __asm__ (""
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+                    _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+#   else
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __asm__ (""
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+                    _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...));
+#  else
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define printf rpl_printf
+#   endif
+_GL_FUNCDECL_RPL (printf, int,
+                  (const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (printf, int, (const char *format, ...));
+#  endif
+#  define GNULIB_overrides_printf 1
+# else
+_GL_CXXALIAS_SYS (printf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (printf);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_printf
+#  undef printf
+# endif
+/* Assume printf is always declared.  */
+_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - "
+                 "use gnulib module printf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putc
+#   define putc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (putc);
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putchar
+#   define putchar rpl_putchar
+#  endif
+_GL_FUNCDECL_RPL (putchar, int, (int c));
+_GL_CXXALIAS_RPL (putchar, int, (int c));
+# else
+_GL_CXXALIAS_SYS (putchar, int, (int c));
+# endif
+_GL_CXXALIASWARN (putchar);
+#endif
+
+#if 1
+# if 0 && (0 || 0)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef puts
+#   define puts rpl_puts
+#  endif
+_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (puts, int, (const char *string));
+# else
+_GL_CXXALIAS_SYS (puts, int, (const char *string));
+# endif
+_GL_CXXALIASWARN (puts);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remove
+#   define remove rpl_remove
+#  endif
+_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (remove, int, (const char *name));
+# else
+_GL_CXXALIAS_SYS (remove, int, (const char *name));
+# endif
+_GL_CXXALIASWARN (remove);
+#elif defined GNULIB_POSIXCHECK
+# undef remove
+/* Assume remove is always declared.  */
+_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - "
+                 "use gnulib module remove for more portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef rename
+#   define rename rpl_rename
+#  endif
+_GL_FUNCDECL_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# else
+_GL_CXXALIAS_SYS (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# endif
+_GL_CXXALIASWARN (rename);
+#elif defined GNULIB_POSIXCHECK
+# undef rename
+/* Assume rename is always declared.  */
+_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - "
+                 "use gnulib module rename for more portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef renameat
+#   define renameat rpl_renameat
+#  endif
+_GL_FUNCDECL_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# endif
+_GL_CXXALIASWARN (renameat);
+#elif defined GNULIB_POSIXCHECK
+# undef renameat
+# if HAVE_RAW_DECL_RENAMEAT
+_GL_WARN_ON_USE (renameat, "renameat is not portable - "
+                 "use gnulib module renameat for portability");
+# endif
+#endif
+
+#if 1
+# if 0 && 0
+#  if defined __GNUC__
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef scanf
+/* Don't break __attribute__((format(scanf,M,N))).  */
+#    define scanf __scanf__
+#   endif
+_GL_FUNCDECL_RPL_1 (__scanf__, int,
+                    (const char *format, ...)
+                    __asm__ (""
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf))
+                    _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...));
+#  else
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef scanf
+#    define scanf rpl_scanf
+#   endif
+_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...)
+                              _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...));
+#  endif
+# else
+_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (scanf);
+#endif
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define snprintf rpl_snprintf
+#  endif
+_GL_FUNCDECL_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (snprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef snprintf
+# if HAVE_RAW_DECL_SNPRINTF
+_GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
+                 "use gnulib module snprintf for portability");
+# endif
+#endif
+
+/* Some people would argue that all sprintf uses should be warned about
+   (for example, OpenBSD issues a link warning for it),
+   since it can cause security holes due to buffer overruns.
+   However, we believe that sprintf can be used safely, and is more
+   efficient than snprintf in those safe cases; and as proof of our
+   belief, we use sprintf in several gnulib modules.  So this header
+   intentionally avoids adding a warning to sprintf except when
+   GNULIB_POSIXCHECK is defined.  */
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define sprintf rpl_sprintf
+#  endif
+_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (sprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef sprintf
+/* Assume sprintf is always declared.  */
+_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - "
+                 "use gnulib module sprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define tmpfile rpl_tmpfile
+#  endif
+_GL_FUNCDECL_RPL (tmpfile, FILE *, (void));
+_GL_CXXALIAS_RPL (tmpfile, FILE *, (void));
+# else
+_GL_CXXALIAS_SYS (tmpfile, FILE *, (void));
+# endif
+_GL_CXXALIASWARN (tmpfile);
+#elif defined GNULIB_POSIXCHECK
+# undef tmpfile
+# if HAVE_RAW_DECL_TMPFILE
+_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - "
+                 "use gnulib module tmpfile for portability");
+# endif
+#endif
+
+#if 0
+/* Write formatted output to a string dynamically allocated with malloc().
+   If the memory allocation succeeds, store the address of the string in
+   *RESULT and return the number of resulting bytes, excluding the trailing
+   NUL.  Upon memory allocation error, or some other error, return -1.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define asprintf rpl_asprintf
+#  endif
+_GL_FUNCDECL_RPL (asprintf, int,
+                  (char **result, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (asprintf, int,
+                  (char **result, const char *format, ...));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (asprintf, int,
+                  (char **result, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (asprintf, int,
+                  (char **result, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (asprintf);
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vasprintf rpl_vasprintf
+#  endif
+_GL_FUNCDECL_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vasprintf);
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vdprintf rpl_vdprintf
+#  endif
+_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+/* Need to cast, because on Solaris, the third parameter will likely be
+                                                    __va_list args.  */
+_GL_CXXALIAS_SYS_CAST (vdprintf, int,
+                       (int fd, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vdprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vdprintf
+# if HAVE_RAW_DECL_VDPRINTF
+_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - "
+                 "use gnulib module vdprintf for portability");
+# endif
+#endif
+
+#if 1 || 1
+# if (1 && 1) \
+     || (1 && 0 && (0 || 0))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vfprintf rpl_vfprintf
+#  endif
+#  define GNULIB_overrides_vfprintf 1
+#  if 1
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  else
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+                                                      __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vfprintf, int,
+                       (FILE *fp, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfprintf);
+#endif
+#if !1 && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vfprintf
+#  undef vfprintf
+# endif
+/* Assume vfprintf is always declared.  */
+_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - "
+                 "use gnulib module vfprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+#if 0
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef vfscanf
+#   define vfscanf rpl_vfscanf
+#  endif
+_GL_FUNCDECL_RPL (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfscanf);
+#endif
+
+#if 0 || 1
+# if (0 && 0) \
+     || (1 && 0 && (0 || 0))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vprintf rpl_vprintf
+#  endif
+#  define GNULIB_overrides_vprintf 1
+#  if 0 || 1
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0)
+                                _GL_ARG_NONNULL ((1)));
+#  else
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0)
+                                _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the second parameter is
+                                                          __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vprintf);
+#endif
+#if !0 && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vprintf
+#  undef vprintf
+# endif
+/* Assume vprintf is always declared.  */
+_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - "
+                 "use gnulib module vprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if 0
+# if 0 && 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef vscanf
+#   define vscanf rpl_vscanf
+#  endif
+_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args)
+                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vscanf);
+#endif
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsnprintf rpl_vsnprintf
+#  endif
+_GL_FUNCDECL_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsnprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsnprintf
+# if HAVE_RAW_DECL_VSNPRINTF
+_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
+                 "use gnulib module vsnprintf for portability");
+# endif
+#endif
+
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsprintf rpl_vsprintf
+#  endif
+_GL_FUNCDECL_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+                                                       __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vsprintf, int,
+                       (char *str, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsprintf
+/* Assume vsprintf is always declared.  */
+_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - "
+                 "use gnulib module vsprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_STDIO_H */
+#endif /* _GL_STDIO_H */
+#endif
diff --git a/linux-lib/stdlib.h b/linux-lib/stdlib.h
new file mode 100644
index 0000000..12c9ac1
--- /dev/null
+++ b/linux-lib/stdlib.h
@@ -0,0 +1,1259 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <stdlib.h>.
+
+   Copyright (C) 1995, 2001-2004, 2006-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_malloc_and_calloc
+/* Special invocation convention inside glibc header files.  */
+
+#include_next <stdlib.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_STDLIB_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <stdlib.h>
+
+#ifndef _GL_STDLIB_H
+#define _GL_STDLIB_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>.  */
+#if 0 && !defined WEXITSTATUS
+# include <sys/wait.h>
+#endif
+
+/* Solaris declares getloadavg() in <sys/loadavg.h>.  */
+#if (0 || defined GNULIB_POSIXCHECK) && 0
+# include <sys/loadavg.h>
+#endif
+
+/* Native Windows platforms declare mktemp() in <io.h>.  */
+#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+#if 0
+
+/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included
+   from <stdlib.h> if _REENTRANT is defined.  Include it whenever we need
+   'struct random_data'.  */
+# if 1
+#  include <random.h>
+# endif
+
+# if !1 || 0 || !1
+#  include <stdint.h>
+# endif
+
+# if !1
+/* Define 'struct random_data'.
+   But allow multiple gnulib generated <stdlib.h> replacements to coexist.  */
+#  if !GNULIB_defined_struct_random_data
+struct random_data
+{
+  int32_t *fptr;                /* Front pointer.  */
+  int32_t *rptr;                /* Rear pointer.  */
+  int32_t *state;               /* Array of state values.  */
+  int rand_type;                /* Type of random number generator.  */
+  int rand_deg;                 /* Degree of random number generator.  */
+  int rand_sep;                 /* Distance between front and rear.  */
+  int32_t *end_ptr;             /* Pointer behind state table.  */
+};
+#   define GNULIB_defined_struct_random_data 1
+#  endif
+# endif
+#endif
+
+#if (0 || 0 || 0 || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+/* On Mac OS X 10.3, only <unistd.h> declares mkstemp.  */
+/* On Mac OS X 10.5, only <unistd.h> declares mkstemps.  */
+/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt.  */
+/* But avoid namespace pollution on glibc systems and native Windows.  */
+# include <unistd.h>
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The definition of _Noreturn is copied here.  */
+#if !defined _Noreturn && __STDC_VERSION__ < 201112
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Some systems do not define EXIT_*, despite otherwise supporting C89.  */
+#ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+#endif
+/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
+   with proper operation of xargs.  */
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#elif EXIT_FAILURE != 1
+# undef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+
+#if 0
+/* Terminate the current process with the given return code, without running
+   the 'atexit' handlers.  */
+# if !1
+_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status));
+# endif
+_GL_CXXALIAS_SYS (_Exit, void, (int status));
+_GL_CXXALIASWARN (_Exit);
+#elif defined GNULIB_POSIXCHECK
+# undef _Exit
+# if HAVE_RAW_DECL__EXIT
+_GL_WARN_ON_USE (_Exit, "_Exit is unportable - "
+                 "use gnulib module _Exit for portability");
+# endif
+#endif
+
+
+#if 0
+/* Parse a signed decimal integer.
+   Returns the value of the integer.  Errors are not detected.  */
+# if !1
+_GL_FUNCDECL_SYS (atoll, long long, (const char *string)
+                                    _GL_ATTRIBUTE_PURE
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (atoll, long long, (const char *string));
+_GL_CXXALIASWARN (atoll);
+#elif defined GNULIB_POSIXCHECK
+# undef atoll
+# if HAVE_RAW_DECL_ATOLL
+_GL_WARN_ON_USE (atoll, "atoll is unportable - "
+                 "use gnulib module atoll for portability");
+# endif
+#endif
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef calloc
+#   define calloc rpl_calloc
+#  endif
+_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size));
+_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size));
+# else
+_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
+# endif
+_GL_CXXALIASWARN (calloc);
+#elif defined GNULIB_POSIXCHECK
+# undef calloc
+/* Assume calloc is always declared.  */
+_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "
+                 "use gnulib module calloc-posix for portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define canonicalize_file_name rpl_canonicalize_file_name
+#  endif
+_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
+# endif
+_GL_CXXALIASWARN (canonicalize_file_name);
+#elif defined GNULIB_POSIXCHECK
+# undef canonicalize_file_name
+# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+_GL_WARN_ON_USE (canonicalize_file_name,
+                 "canonicalize_file_name is unportable - "
+                 "use gnulib module canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if 0
+/* Store max(NELEM,3) load average numbers in LOADAVG[].
+   The three numbers are the load average of the last 1 minute, the last 5
+   minutes, and the last 15 minutes, respectively.
+   LOADAVG is an array of NELEM numbers.  */
+# if !1
+_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem));
+_GL_CXXALIASWARN (getloadavg);
+#elif defined GNULIB_POSIXCHECK
+# undef getloadavg
+# if HAVE_RAW_DECL_GETLOADAVG
+_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - "
+                 "use gnulib module getloadavg for portability");
+# endif
+#endif
+
+#if 0
+/* Assuming *OPTIONP is a comma separated list of elements of the form
+   "token" or "token=value", getsubopt parses the first of these elements.
+   If the first element refers to a "token" that is member of the given
+   NULL-terminated array of tokens:
+     - It replaces the comma with a NUL byte, updates *OPTIONP to point past
+       the first option and the comma, sets *VALUEP to the value of the
+       element (or NULL if it doesn't contain an "=" sign),
+     - It returns the index of the "token" in the given array of tokens.
+   Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
+   For more details see the POSIX:2001 specification.
+   http://www.opengroup.org/susv3xsh/getsubopt.html */
+# if !1
+_GL_FUNCDECL_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+# endif
+_GL_CXXALIAS_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep));
+_GL_CXXALIASWARN (getsubopt);
+#elif defined GNULIB_POSIXCHECK
+# undef getsubopt
+# if HAVE_RAW_DECL_GETSUBOPT
+_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - "
+                 "use gnulib module getsubopt for portability");
+# endif
+#endif
+
+#if 0
+/* Change the ownership and access permission of the slave side of the
+   pseudo-terminal whose master side is specified by FD.  */
+# if !1
+_GL_FUNCDECL_SYS (grantpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (grantpt, int, (int fd));
+_GL_CXXALIASWARN (grantpt);
+#elif defined GNULIB_POSIXCHECK
+# undef grantpt
+# if HAVE_RAW_DECL_GRANTPT
+_GL_WARN_ON_USE (grantpt, "grantpt is not portable - "
+                 "use gnulib module grantpt for portability");
+# endif
+#endif
+
+/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not
+   rely on GNU or POSIX semantics for malloc and realloc (for example,
+   by never specifying a zero size), so it does not need malloc or
+   realloc to be redefined.  */
+#if 1
+# if 0
+#  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+        || _GL_USE_STDLIB_ALLOC)
+#   undef malloc
+#   define malloc rpl_malloc
+#  endif
+_GL_FUNCDECL_RPL (malloc, void *, (size_t size));
+_GL_CXXALIAS_RPL (malloc, void *, (size_t size));
+# else
+_GL_CXXALIAS_SYS (malloc, void *, (size_t size));
+# endif
+_GL_CXXALIASWARN (malloc);
+#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef malloc
+/* Assume malloc is always declared.  */
+_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
+                 "use gnulib module malloc-posix for portability");
+#endif
+
+/* Convert a multibyte character to a wide character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbtowc
+#   define mbtowc rpl_mbtowc
+#  endif
+_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+# else
+_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+# endif
+_GL_CXXALIASWARN (mbtowc);
+#endif
+
+#if 0
+/* Create a unique temporary directory from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the directory name unique.
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+   The directory is created mode 700.  */
+# if !1
+_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/));
+_GL_CXXALIASWARN (mkdtemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdtemp
+# if HAVE_RAW_DECL_MKDTEMP
+_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - "
+                 "use gnulib module mkdtemp for portability");
+# endif
+#endif
+
+#if 0
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !1
+_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemp
+# if HAVE_RAW_DECL_MKOSTEMP
+_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - "
+                 "use gnulib module mkostemp for portability");
+# endif
+#endif
+
+#if 0
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE before a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !1
+_GL_FUNCDECL_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemps
+# if HAVE_RAW_DECL_MKOSTEMPS
+_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - "
+                 "use gnulib module mkostemps for portability");
+# endif
+#endif
+
+#if 0
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkstemp rpl_mkstemp
+#  endif
+_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/));
+# endif
+_GL_CXXALIASWARN (mkstemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemp
+# if HAVE_RAW_DECL_MKSTEMP
+_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - "
+                 "use gnulib module mkstemp for portability");
+# endif
+#endif
+
+#if 0
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE prior to a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !1
+_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/));
+_GL_CXXALIASWARN (mkstemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemps
+# if HAVE_RAW_DECL_MKSTEMPS
+_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - "
+                 "use gnulib module mkstemps for portability");
+# endif
+#endif
+
+#if 0
+/* Return an FD open to the master side of a pseudo-terminal.  Flags should
+   include O_RDWR, and may also include O_NOCTTY.  */
+# if !1
+_GL_FUNCDECL_SYS (posix_openpt, int, (int flags));
+# endif
+_GL_CXXALIAS_SYS (posix_openpt, int, (int flags));
+_GL_CXXALIASWARN (posix_openpt);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_openpt
+# if HAVE_RAW_DECL_POSIX_OPENPT
+_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - "
+                 "use gnulib module posix_openpt for portability");
+# endif
+#endif
+
+#if 0
+/* Return the pathname of the pseudo-terminal slave associated with
+   the master FD is open on, or NULL on errors.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ptsname
+#   define ptsname rpl_ptsname
+#  endif
+_GL_FUNCDECL_RPL (ptsname, char *, (int fd));
+_GL_CXXALIAS_RPL (ptsname, char *, (int fd));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ptsname, char *, (int fd));
+#  endif
+_GL_CXXALIAS_SYS (ptsname, char *, (int fd));
+# endif
+_GL_CXXALIASWARN (ptsname);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname
+# if HAVE_RAW_DECL_PTSNAME
+_GL_WARN_ON_USE (ptsname, "ptsname is not portable - "
+                 "use gnulib module ptsname for portability");
+# endif
+#endif
+
+#if 0
+/* Set the pathname of the pseudo-terminal slave associated with
+   the master FD is open on and return 0, or set errno and return
+   non-zero on errors.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ptsname_r
+#   define ptsname_r rpl_ptsname_r
+#  endif
+_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len));
+_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len));
+#  endif
+_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len));
+# endif
+_GL_CXXALIASWARN (ptsname_r);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname_r
+# if HAVE_RAW_DECL_PTSNAME_R
+_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - "
+                 "use gnulib module ptsname_r for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putenv
+#   define putenv rpl_putenv
+#  endif
+_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (putenv, int, (char *string));
+# else
+_GL_CXXALIAS_SYS (putenv, int, (char *string));
+# endif
+_GL_CXXALIASWARN (putenv);
+#endif
+
+
+#if 0
+# if !1
+#  ifndef RAND_MAX
+#   define RAND_MAX 2147483647
+#  endif
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (random, long, (void));
+# endif
+_GL_CXXALIAS_SYS (random, long, (void));
+_GL_CXXALIASWARN (random);
+#elif defined GNULIB_POSIXCHECK
+# undef random
+# if HAVE_RAW_DECL_RANDOM
+_GL_WARN_ON_USE (random, "random is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed));
+# endif
+_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed));
+_GL_CXXALIASWARN (srandom);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom
+# if HAVE_RAW_DECL_SRANDOM
+_GL_WARN_ON_USE (srandom, "srandom is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (initstate, char *,
+                  (unsigned int seed, char *buf, size_t buf_size)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (initstate, char *,
+                  (unsigned int seed, char *buf, size_t buf_size));
+_GL_CXXALIASWARN (initstate);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate, "initstate is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state));
+_GL_CXXALIASWARN (setstate);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate, "setstate is unportable - "
+                 "use gnulib module random for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef random_r
+#   define random_r rpl_random_r
+#  endif
+_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result));
+# endif
+_GL_CXXALIASWARN (random_r);
+#elif defined GNULIB_POSIXCHECK
+# undef random_r
+# if HAVE_RAW_DECL_RANDOM_R
+_GL_WARN_ON_USE (random_r, "random_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef srandom_r
+#   define srandom_r rpl_srandom_r
+#  endif
+_GL_FUNCDECL_RPL (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (srandom_r);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom_r
+# if HAVE_RAW_DECL_SRANDOM_R
+_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef initstate_r
+#   define initstate_r rpl_initstate_r
+#  endif
+_GL_FUNCDECL_RPL (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (initstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate_r
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setstate_r
+#   define setstate_r rpl_setstate_r
+#  endif
+_GL_FUNCDECL_RPL (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (setstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate_r
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+#  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+        || _GL_USE_STDLIB_ALLOC)
+#   undef realloc
+#   define realloc rpl_realloc
+#  endif
+_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size));
+_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
+# else
+_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
+# endif
+_GL_CXXALIASWARN (realloc);
+#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef realloc
+/* Assume realloc is always declared.  */
+_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
+                 "use gnulib module realloc-posix for portability");
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define realpath rpl_realpath
+#  endif
+_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved));
+# endif
+_GL_CXXALIASWARN (realpath);
+#elif defined GNULIB_POSIXCHECK
+# undef realpath
+# if HAVE_RAW_DECL_REALPATH
+_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module "
+                 "canonicalize or canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if 0
+/* Test a user response to a question.
+   Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear.  */
+# if !1
+_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (rpmatch, int, (const char *response));
+_GL_CXXALIASWARN (rpmatch);
+#elif defined GNULIB_POSIXCHECK
+# undef rpmatch
+# if HAVE_RAW_DECL_RPMATCH
+_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - "
+                 "use gnulib module rpmatch for portability");
+# endif
+#endif
+
+#if 0
+/* Set NAME to VALUE in the environment.
+   If REPLACE is nonzero, overwrite an existing value.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setenv
+#   define setenv rpl_setenv
+#  endif
+_GL_FUNCDECL_RPL (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (setenv, int,
+                  (const char *name, const char *value, int replace));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (setenv, int,
+                  (const char *name, const char *value, int replace));
+# endif
+# if !(0 && !1)
+_GL_CXXALIASWARN (setenv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef setenv
+# if HAVE_RAW_DECL_SETENV
+_GL_WARN_ON_USE (setenv, "setenv is unportable - "
+                 "use gnulib module setenv for portability");
+# endif
+#endif
+
+#if 0
+ /* Parse a double from STRING, updating ENDP if appropriate.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strtod rpl_strtod
+#  endif
+_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp));
+# endif
+_GL_CXXALIASWARN (strtod);
+#elif defined GNULIB_POSIXCHECK
+# undef strtod
+# if HAVE_RAW_DECL_STRTOD
+_GL_WARN_ON_USE (strtod, "strtod is unportable - "
+                 "use gnulib module strtod for portability");
+# endif
+#endif
+
+#if 0
+/* Parse a signed integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
+   to ERANGE.  */
+# if !1
+_GL_FUNCDECL_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoll);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoll
+# if HAVE_RAW_DECL_STRTOLL
+_GL_WARN_ON_USE (strtoll, "strtoll is unportable - "
+                 "use gnulib module strtoll for portability");
+# endif
+#endif
+
+#if 0
+/* Parse an unsigned integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is ULLONG_MAX, and errno is set to
+   ERANGE.  */
+# if !1
+_GL_FUNCDECL_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoull);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoull
+# if HAVE_RAW_DECL_STRTOULL
+_GL_WARN_ON_USE (strtoull, "strtoull is unportable - "
+                 "use gnulib module strtoull for portability");
+# endif
+#endif
+
+#if 0
+/* Unlock the slave side of the pseudo-terminal whose master side is specified
+   by FD, so that it can be opened.  */
+# if !1
+_GL_FUNCDECL_SYS (unlockpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (unlockpt, int, (int fd));
+_GL_CXXALIASWARN (unlockpt);
+#elif defined GNULIB_POSIXCHECK
+# undef unlockpt
+# if HAVE_RAW_DECL_UNLOCKPT
+_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - "
+                 "use gnulib module unlockpt for portability");
+# endif
+#endif
+
+#if 1
+/* Remove the variable NAME from the environment.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unsetenv
+#   define unsetenv rpl_unsetenv
+#  endif
+_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unsetenv, int, (const char *name));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (unsetenv, int, (const char *name));
+# endif
+# if !(0 && !1)
+_GL_CXXALIASWARN (unsetenv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef unsetenv
+# if HAVE_RAW_DECL_UNSETENV
+_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - "
+                 "use gnulib module unsetenv for portability");
+# endif
+#endif
+
+/* Convert a wide character to a multibyte character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctomb
+#   define wctomb rpl_wctomb
+#  endif
+_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc));
+_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc));
+# else
+_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc));
+# endif
+_GL_CXXALIASWARN (wctomb);
+#endif
+
+
+#endif /* _GL_STDLIB_H */
+#endif /* _GL_STDLIB_H */
+#endif
diff --git a/linux-lib/string.h b/linux-lib/string.h
new file mode 100644
index 0000000..eb868ed
--- /dev/null
+++ b/linux-lib/string.h
@@ -0,0 +1,1341 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <string.h>.
+
+   Copyright (C) 1995-1996, 2001-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_STRING_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <string.h>
+
+#ifndef _GL_STRING_H
+#define _GL_STRING_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD defines mbslen as a macro.  */
+#if 0 && defined __MirBSD__
+# include <wchar.h>
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (0 || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Find the index of the least-significant set bit.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (ffsl, int, (long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsl, int, (long int i));
+_GL_CXXALIASWARN (ffsl);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsl
+# if HAVE_RAW_DECL_FFSL
+_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
+# endif
+#endif
+
+
+/* Find the index of the least-significant set bit.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
+_GL_CXXALIASWARN (ffsll);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsll
+# if HAVE_RAW_DECL_FFSLL
+_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
+# endif
+#endif
+
+
+/* Return the first instance of C within N bytes of S, or NULL.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memchr rpl_memchr
+#  endif
+_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const void * std::memchr (const void *, int, size_t); }
+       extern "C++" { void * std::memchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memchr,
+                        void *, (void const *__s, int __c, size_t __n),
+                        void const *, (void const *__s, int __c, size_t __n));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
+_GL_CXXALIASWARN1 (memchr, void const *,
+                   (void const *__s, int __c, size_t __n));
+# else
+_GL_CXXALIASWARN (memchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memchr
+/* Assume memchr is always declared.  */
+_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+                 "use gnulib module memchr for portability" );
+#endif
+
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memmem rpl_memmem
+#  endif
+_GL_FUNCDECL_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# endif
+_GL_CXXALIASWARN (memmem);
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# if HAVE_RAW_DECL_MEMMEM
+_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
+                 "use gnulib module memmem-simple for portability, "
+                 "and module memmem for speed" );
+# endif
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+#if 0
+# if ! 1
+_GL_FUNCDECL_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n));
+_GL_CXXALIASWARN (mempcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# if HAVE_RAW_DECL_MEMPCPY
+_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
+                 "use gnulib module mempcpy for portability");
+# endif
+#endif
+
+/* Search backwards through a block for a byte (specified as an int).  */
+#if 0
+# if ! 1
+_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::memrchr (const void *, int, size_t); }
+       extern "C++" { void * std::memrchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memrchr,
+                        void *, (void const *, int, size_t),
+                        void const *, (void const *, int, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
+_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
+# else
+_GL_CXXALIASWARN (memrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# if HAVE_RAW_DECL_MEMRCHR
+_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
+                 "use gnulib module memrchr for portability");
+# endif
+#endif
+
+/* Find the first occurrence of C in S.  More efficient than
+   memchr(S,C,N), at the expense of undefined behavior if C does not
+   occur within N bytes.  */
+#if 1
+# if ! 1
+_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::rawmemchr (const void *, int); }
+       extern "C++" { void * std::rawmemchr (void *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
+                        void *, (void const *__s, int __c_in),
+                        void const *, (void const *__s, int __c_in));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
+_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (rawmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# if HAVE_RAW_DECL_RAWMEMCHR
+_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
+                 "use gnulib module rawmemchr for portability");
+# endif
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
+#if 1
+# if ! 1
+_GL_FUNCDECL_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src));
+_GL_CXXALIASWARN (stpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# if HAVE_RAW_DECL_STPCPY
+_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
+                 "use gnulib module stpcpy for portability");
+# endif
+#endif
+
+/* Copy no more than N bytes of SRC to DST, returning a pointer past the
+   last non-NUL byte written into DST.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef stpncpy
+#   define stpncpy rpl_stpncpy
+#  endif
+_GL_FUNCDECL_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# endif
+_GL_CXXALIASWARN (stpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# if HAVE_RAW_DECL_STPNCPY
+_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+                 "use gnulib module stpncpy for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strchr
+/* Assume strchr is always declared.  */
+_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbschr if you care about internationalization");
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strchrnul rpl_strchrnul
+#  endif
+_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strchrnul, char *,
+                  (const char *str, int ch));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * std::strchrnul (const char *, int); }
+       extern "C++" { char * std::strchrnul (char *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (strchrnul,
+                        char *, (char const *__s, int __c_in),
+                        char const *, (char const *__s, int __c_in));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
+_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (strchrnul);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# if HAVE_RAW_DECL_STRCHRNUL
+_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
+                 "use gnulib module strchrnul for portability");
+# endif
+#endif
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strdup
+#   define strdup rpl_strdup
+#  endif
+_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
+# else
+#  if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
+    /* strdup exists as a function and as a macro.  Get rid of the macro.  */
+#   undef strdup
+#  endif
+#  if !(1 || defined strdup)
+_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+#elif defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
+_GL_WARN_ON_USE (strdup, "strdup is unportable - "
+                 "use gnulib module strdup for portability");
+# endif
+#endif
+
+/* Append no more than N characters from SRC onto DEST.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strncat
+#   define strncat rpl_strncat
+#  endif
+_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
+# else
+_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
+# endif
+_GL_CXXALIASWARN (strncat);
+#elif defined GNULIB_POSIXCHECK
+# undef strncat
+# if HAVE_RAW_DECL_STRNCAT
+_GL_WARN_ON_USE (strncat, "strncat is unportable - "
+                 "use gnulib module strncat for portability");
+# endif
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strndup
+#   define strndup rpl_strndup
+#  endif
+_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
+# endif
+_GL_CXXALIASWARN (strndup);
+#elif defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
+_GL_WARN_ON_USE (strndup, "strndup is unportable - "
+                 "use gnulib module strndup for portability");
+# endif
+#endif
+
+/* Find the length (number of bytes) of STRING, but scan at most
+   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
+   return MAXLEN.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strnlen
+#   define strnlen rpl_strnlen
+#  endif
+_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
+# endif
+_GL_CXXALIASWARN (strnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# if HAVE_RAW_DECL_STRNLEN
+_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
+                 "use gnulib module strnlen for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strcspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+# undef strcspn
+/* Assume strcspn is always declared.  */
+_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbscspn if you care about internationalization");
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if 0
+# if ! 1
+_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const char * strpbrk (const char *, const char *); }
+       extern "C++" { char * strpbrk (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strpbrk,
+                        char *, (char const *__s, char const *__accept),
+                        const char *, (char const *__s, char const *__accept));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
+_GL_CXXALIASWARN1 (strpbrk, char const *,
+                   (char const *__s, char const *__accept));
+# else
+_GL_CXXALIASWARN (strpbrk);
+# endif
+# if defined GNULIB_POSIXCHECK
+/* strpbrk() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+#  undef strpbrk
+_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbspbrk if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# if HAVE_RAW_DECL_STRPBRK
+_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
+                 "use gnulib module strpbrk for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it cannot work with multibyte strings.  */
+# undef strspn
+/* Assume strspn is always declared.  */
+_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbsspn if you care about internationalization");
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strrchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strrchr
+/* Assume strrchr is always declared.  */
+_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbsrchr if you care about internationalization");
+#endif
+
+/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP
+   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of strtok() that is multithread-safe and supports
+   empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strtok_r().  */
+#if 0
+# if ! 1
+_GL_FUNCDECL_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim));
+_GL_CXXALIASWARN (strsep);
+# if defined GNULIB_POSIXCHECK
+#  undef strsep
+_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbssep if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# if HAVE_RAW_DECL_STRSEP
+_GL_WARN_ON_USE (strsep, "strsep is unportable - "
+                 "use gnulib module strsep for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strstr rpl_strstr
+#  endif
+_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
+# else
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strstr (const char *, const char *); }
+       extern "C++" { char * strstr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strstr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strstr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strstr() does not work with multibyte strings if the locale encoding is
+   different from UTF-8:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.  */
+# undef strstr
+/* Assume strstr is always declared.  */
+_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
+                 "work correctly on character strings in most "
+                 "multibyte locales - "
+                 "use mbsstr if you care about internationalization, "
+                 "or use strstr if you care about speed");
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+   comparison.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strcasestr rpl_strcasestr
+#  endif
+_GL_FUNCDECL_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strcasestr (const char *, const char *); }
+       extern "C++" { char * strcasestr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strcasestr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strcasestr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strcasestr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strcasestr() does not work with multibyte strings:
+   It is a glibc extension, and glibc implements it only for unibyte
+   locales.  */
+# undef strcasestr
+# if HAVE_RAW_DECL_STRCASESTR
+_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbscasestr if you care about "
+                 "internationalization, or use c-strcasestr if you want "
+                 "a locale independent function");
+# endif
+#endif
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = strtok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   This is a variant of strtok() that is multithread-safe.
+
+   For the POSIX documentation for this function, see:
+   http://www.opengroup.org/susv3xsh/strtok.html
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strsep().  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtok_r
+#   define strtok_r rpl_strtok_r
+#  endif
+_GL_FUNCDECL_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# else
+#  if 0 || defined GNULIB_POSIXCHECK
+#   undef strtok_r
+#  endif
+#  if ! 1
+_GL_FUNCDECL_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# endif
+_GL_CXXALIASWARN (strtok_r);
+# if defined GNULIB_POSIXCHECK
+_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbstok_r if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# if HAVE_RAW_DECL_STRTOK_R
+_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
+                 "use gnulib module strtok_r for portability");
+# endif
+#endif
+
+
+/* The following functions are not specified by POSIX.  They are gnulib
+   extensions.  */
+
+#if 0
+/* Return the number of multibyte characters in the character string STRING.
+   This considers multibyte characters, unlike strlen, which counts bytes.  */
+# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
+#  undef mbslen
+# endif
+# if 0  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbslen rpl_mbslen
+#  endif
+_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
+# else
+_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
+# endif
+_GL_CXXALIASWARN (mbslen);
+#endif
+
+#if 0
+/* Return the number of multibyte characters in the character string starting
+   at STRING and ending at STRING + LEN.  */
+_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1));
+#endif
+
+#if 1
+/* Locate the first single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbschr);
+#endif
+
+#if 1
+/* Locate the last single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strrchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux || defined __INTERIX
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbsrchr rpl_mbsrchr /* avoid collision with system function */
+#  endif
+_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbsrchr);
+#endif
+
+#if 0
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
+   Unlike strstr(), this function works correctly in multibyte locales with
+   encodings different from UTF-8.  */
+_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Compare the character strings S1 and S2, ignoring case, returning less than,
+   equal to or greater than zero if S1 is lexicographically less than, equal to
+   or greater than S2.
+   Note: This function may, in multibyte locales, return 0 for strings of
+   different lengths!
+   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Compare the initial segment of the character string S1 consisting of at most
+   N characters with the initial segment of the character string S2 consisting
+   of at most N characters, ignoring case, returning less than, equal to or
+   greater than zero if the initial segment of S1 is lexicographically less
+   than, equal to or greater than the initial segment of S2.
+   Note: This function may, in multibyte locales, return 0 for initial segments
+   of different lengths!
+   Unlike strncasecmp(), this function works correctly in multibyte locales.
+   But beware that N is not a byte count but a character count!  */
+_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Compare the initial segment of the character string STRING consisting of
+   at most mbslen (PREFIX) characters with the character string PREFIX,
+   ignoring case.  If the two match, return a pointer to the first byte
+   after this prefix in STRING.  Otherwise, return NULL.
+   Note: This function may, in multibyte locales, return non-NULL if STRING
+   is of smaller length than PREFIX!
+   Unlike strncasecmp(), this function works correctly in multibyte
+   locales.  */
+_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK, using case-insensitive comparison.
+   Note: This function may, in multibyte locales, return success even if
+   strlen (haystack) < strlen (needle) !
+   Unlike strcasestr(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strcspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the pointer to it, or NULL if none
+   exists.
+   Unlike strpbrk(), this function works correctly in multibyte locales.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
+# else
+_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
+# endif
+_GL_CXXALIASWARN (mbspbrk);
+#endif
+
+#if 0
+/* Find the first occurrence in the character string STRING of any character
+   not in the character string REJECT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Search the next delimiter (multibyte character listed in the character
+   string DELIM) starting at the character string *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP to point
+   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of mbstok_r() that supports empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbstok_r().  */
+_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if 0
+/* Parse the character string STRING into tokens separated by characters in
+   the character string DELIM.
+   If STRING is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = mbstok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbssep().  */
+_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
+     _GL_ARG_NONNULL ((2, 3));
+#endif
+
+/* Map any int, typically from errno, into an error message.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror
+#   define strerror rpl_strerror
+#  endif
+_GL_FUNCDECL_RPL (strerror, char *, (int));
+_GL_CXXALIAS_RPL (strerror, char *, (int));
+# else
+_GL_CXXALIAS_SYS (strerror, char *, (int));
+# endif
+_GL_CXXALIASWARN (strerror);
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+/* Assume strerror is always declared.  */
+_GL_WARN_ON_USE (strerror, "strerror is unportable - "
+                 "use gnulib module strerror to guarantee non-NULL result");
+#endif
+
+/* Map any int, typically from errno, into an error message.  Multithread-safe.
+   Uses the POSIX declaration, not the glibc declaration.  */
+#if 1
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror_r
+#   define strerror_r rpl_strerror_r
+#  endif
+_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# endif
+# if 1
+_GL_CXXALIASWARN (strerror_r);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strerror_r
+# if HAVE_RAW_DECL_STRERROR_R
+_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
+                 "use gnulib module strerror_r-posix for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strsignal rpl_strsignal
+#  endif
+_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
+_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
+# else
+#  if ! 1
+_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is
+   'const char *'.  */
+_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
+# endif
+_GL_CXXALIASWARN (strsignal);
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# if HAVE_RAW_DECL_STRSIGNAL
+_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
+                 "use gnulib module strsignal for portability");
+# endif
+#endif
+
+#if 1
+# if !1
+_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
+_GL_CXXALIASWARN (strverscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef strverscmp
+# if HAVE_RAW_DECL_STRVERSCMP
+_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
+                 "use gnulib module strverscmp for portability");
+# endif
+#endif
+
+
+#endif /* _GL_STRING_H */
+#endif /* _GL_STRING_H */
diff --git a/linux-lib/sys/stat.h b/linux-lib/sys/stat.h
new file mode 100644
index 0000000..f0ae983
--- /dev/null
+++ b/linux-lib/sys/stat.h
@@ -0,0 +1,1040 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide a more complete sys/stat header file.
+   Copyright (C) 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
+
+/* This file is supposed to be used on platforms where <sys/stat.h> is
+   incomplete.  It is intended to provide definitions and prototypes
+   needed by an application.  Start with what the system provides.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_system_sys_stat_h
+/* Special invocation convention.  */
+
+#include_next <sys/stat.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_SYS_STAT_H
+
+/* Get nlink_t.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+
+/* Get struct timespec.  */
+#include <time.h>
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <sys/stat.h>
+
+#ifndef _GL_SYS_STAT_H
+#define _GL_SYS_STAT_H
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
+   headers that may declare mkdir().  Native Windows platforms declare mkdir
+   in <io.h> and/or <direct.h>, not in <unistd.h>.  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# include <io.h>     /* mingw32, mingw64 */
+# include <direct.h> /* mingw64, MSVC 9 */
+#endif
+
+/* Native Windows platforms declare umask() in <io.h>.  */
+#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+/* Large File Support on native Windows.  */
+#if 0
+# define stat _stati64
+#endif
+
+#ifndef S_IFIFO
+# ifdef _S_IFIFO
+#  define S_IFIFO _S_IFIFO
+# endif
+#endif
+
+#ifndef S_IFMT
+# define S_IFMT 0170000
+#endif
+
+#if STAT_MACROS_BROKEN
+# undef S_ISBLK
+# undef S_ISCHR
+# undef S_ISDIR
+# undef S_ISFIFO
+# undef S_ISLNK
+# undef S_ISNAM
+# undef S_ISMPB
+# undef S_ISMPC
+# undef S_ISNWK
+# undef S_ISREG
+# undef S_ISSOCK
+#endif
+
+#ifndef S_ISBLK
+# ifdef S_IFBLK
+#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+# else
+#  define S_ISBLK(m) 0
+# endif
+#endif
+
+#ifndef S_ISCHR
+# ifdef S_IFCHR
+#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+# else
+#  define S_ISCHR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDIR
+# ifdef S_IFDIR
+#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# else
+#  define S_ISDIR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDOOR /* Solaris 2.5 and up */
+# define S_ISDOOR(m) 0
+#endif
+
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# else
+#  define S_ISFIFO(m) 0
+# endif
+#endif
+
+#ifndef S_ISLNK
+# ifdef S_IFLNK
+#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+# else
+#  define S_ISLNK(m) 0
+# endif
+#endif
+
+#ifndef S_ISMPB /* V7 */
+# ifdef S_IFMPB
+#  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
+#  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
+# else
+#  define S_ISMPB(m) 0
+#  define S_ISMPC(m) 0
+# endif
+#endif
+
+#ifndef S_ISNAM /* Xenix */
+# ifdef S_IFNAM
+#  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
+# else
+#  define S_ISNAM(m) 0
+# endif
+#endif
+
+#ifndef S_ISNWK /* HP/UX */
+# ifdef S_IFNWK
+#  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
+# else
+#  define S_ISNWK(m) 0
+# endif
+#endif
+
+#ifndef S_ISPORT /* Solaris 10 and up */
+# define S_ISPORT(m) 0
+#endif
+
+#ifndef S_ISREG
+# ifdef S_IFREG
+#  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+# else
+#  define S_ISREG(m) 0
+# endif
+#endif
+
+#ifndef S_ISSOCK
+# ifdef S_IFSOCK
+#  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+# else
+#  define S_ISSOCK(m) 0
+# endif
+#endif
+
+
+#ifndef S_TYPEISMQ
+# define S_TYPEISMQ(p) 0
+#endif
+
+#ifndef S_TYPEISTMO
+# define S_TYPEISTMO(p) 0
+#endif
+
+
+#ifndef S_TYPEISSEM
+# ifdef S_INSEM
+#  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
+# else
+#  define S_TYPEISSEM(p) 0
+# endif
+#endif
+
+#ifndef S_TYPEISSHM
+# ifdef S_INSHD
+#  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
+# else
+#  define S_TYPEISSHM(p) 0
+# endif
+#endif
+
+/* high performance ("contiguous data") */
+#ifndef S_ISCTG
+# define S_ISCTG(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with data  */
+#ifndef S_ISOFD
+# define S_ISOFD(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with no data  */
+#ifndef S_ISOFL
+# define S_ISOFL(p) 0
+#endif
+
+/* 4.4BSD whiteout */
+#ifndef S_ISWHT
+# define S_ISWHT(m) 0
+#endif
+
+/* If any of the following are undefined,
+   define them to their de facto standard values.  */
+#if !S_ISUID
+# define S_ISUID 04000
+#endif
+#if !S_ISGID
+# define S_ISGID 02000
+#endif
+
+/* S_ISVTX is a common extension to POSIX.  */
+#ifndef S_ISVTX
+# define S_ISVTX 01000
+#endif
+
+#if !S_IRUSR && S_IREAD
+# define S_IRUSR S_IREAD
+#endif
+#if !S_IRUSR
+# define S_IRUSR 00400
+#endif
+#if !S_IRGRP
+# define S_IRGRP (S_IRUSR >> 3)
+#endif
+#if !S_IROTH
+# define S_IROTH (S_IRUSR >> 6)
+#endif
+
+#if !S_IWUSR && S_IWRITE
+# define S_IWUSR S_IWRITE
+#endif
+#if !S_IWUSR
+# define S_IWUSR 00200
+#endif
+#if !S_IWGRP
+# define S_IWGRP (S_IWUSR >> 3)
+#endif
+#if !S_IWOTH
+# define S_IWOTH (S_IWUSR >> 6)
+#endif
+
+#if !S_IXUSR && S_IEXEC
+# define S_IXUSR S_IEXEC
+#endif
+#if !S_IXUSR
+# define S_IXUSR 00100
+#endif
+#if !S_IXGRP
+# define S_IXGRP (S_IXUSR >> 3)
+#endif
+#if !S_IXOTH
+# define S_IXOTH (S_IXUSR >> 6)
+#endif
+
+#if !S_IRWXU
+# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
+#endif
+#if !S_IRWXG
+# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
+#endif
+#if !S_IRWXO
+# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
+#endif
+
+/* S_IXUGO is a common extension to POSIX.  */
+#if !S_IXUGO
+# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
+#endif
+
+#ifndef S_IRWXUGO
+# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
+#endif
+
+/* Macros for futimens and utimensat.  */
+#ifndef UTIME_NOW
+# define UTIME_NOW (-1)
+# define UTIME_OMIT (-2)
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (fchmodat, int,
+                  (int fd, char const *file, mode_t mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (fchmodat, int,
+                  (int fd, char const *file, mode_t mode, int flag));
+_GL_CXXALIASWARN (fchmodat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchmodat
+# if HAVE_RAW_DECL_FCHMODAT
+_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fstat
+#   define fstat rpl_fstat
+#  endif
+_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
+# else
+_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
+# endif
+_GL_CXXALIASWARN (fstat);
+#elif 0
+/* Above, we define stat to _stati64.  */
+# define fstat _fstati64
+#elif defined GNULIB_POSIXCHECK
+# undef fstat
+# if HAVE_RAW_DECL_FSTAT
+_GL_WARN_ON_USE (fstat, "fstat has portability problems - "
+                 "use gnulib module fstat for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fstatat
+#   define fstatat rpl_fstatat
+#  endif
+_GL_FUNCDECL_RPL (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags));
+# endif
+_GL_CXXALIASWARN (fstatat);
+#elif defined GNULIB_POSIXCHECK
+# undef fstatat
+# if HAVE_RAW_DECL_FSTATAT
+_GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
+   implementation relies on futimesat, which on Solaris 10 makes an invocation
+   to futimens that is meant to invoke the libc's futimens(), not gnulib's
+   futimens().  */
+# if 0 || (!1 && defined __sun)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef futimens
+#   define futimens rpl_futimens
+#  endif
+_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
+_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
+#  endif
+_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
+# endif
+# if 1
+_GL_CXXALIASWARN (futimens);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef futimens
+# if HAVE_RAW_DECL_FUTIMENS
+_GL_WARN_ON_USE (futimens, "futimens is not portable - "
+                 "use gnulib module futimens for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
+   denotes a symbolic link.  */
+# if !1
+/* The lchmod replacement follows symbolic links.  Callers should take
+   this into account; lchmod should be applied only to arguments that
+   are known to not be symbolic links.  On hosts that lack lchmod,
+   this can lead to race conditions between the check and the
+   invocation of lchmod, but we know of no workarounds that are
+   reliable in general.  You might try requesting support for lchmod
+   from your operating system supplier.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lchmod chmod
+#  endif
+/* Need to cast, because on mingw, the second parameter of chmod is
+                                                int mode.  */
+_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int,
+                         (const char *filename, mode_t mode));
+# else
+#  if 0 /* assume already declared */
+_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
+# endif
+# if 1
+_GL_CXXALIASWARN (lchmod);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef lchmod
+# if HAVE_RAW_DECL_LCHMOD
+_GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
+                 "use gnulib module lchmod for portability");
+# endif
+#endif
+
+
+#if 0
+# if ! 1
+/* mingw does not support symlinks, therefore it does not have lstat.  But
+   without links, stat does just fine.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lstat stat
+#  endif
+_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf));
+# elif 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lstat
+#   define lstat rpl_lstat
+#  endif
+_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf));
+# else
+_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
+# endif
+# if 1
+_GL_CXXALIASWARN (lstat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef lstat
+# if HAVE_RAW_DECL_LSTAT
+_GL_WARN_ON_USE (lstat, "lstat is unportable - "
+                 "use gnulib module lstat for portability");
+# endif
+#endif
+
+
+#if 0
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef mkdir
+#  define mkdir rpl_mkdir
+# endif
+_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+#else
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
+   Additionally, it declares _mkdir (and depending on compile flags, an
+   alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
+   which are included above.  */
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+#  if !GNULIB_defined_rpl_mkdir
+static int
+rpl_mkdir (char const *name, mode_t mode)
+{
+  return _mkdir (name);
+}
+#   define GNULIB_defined_rpl_mkdir 1
+#  endif
+
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkdir rpl_mkdir
+#  endif
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
+# endif
+#endif
+_GL_CXXALIASWARN (mkdir);
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
+                                _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkdirat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdirat
+# if HAVE_RAW_DECL_MKDIRAT
+_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mkfifo
+#   define mkfifo rpl_mkfifo
+#  endif
+_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
+# endif
+_GL_CXXALIASWARN (mkfifo);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifo
+# if HAVE_RAW_DECL_MKFIFO
+_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
+                 "use gnulib module mkfifo for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
+                                 _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkfifoat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifoat
+# if HAVE_RAW_DECL_MKFIFOAT
+_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
+                 "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mknod
+#   define mknod rpl_mknod
+#  endif
+_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on OSF/1 5.1, the third parameter is '...'.  */
+_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# endif
+_GL_CXXALIASWARN (mknod);
+#elif defined GNULIB_POSIXCHECK
+# undef mknod
+# if HAVE_RAW_DECL_MKNOD
+_GL_WARN_ON_USE (mknod, "mknod is not portable - "
+                 "use gnulib module mknod for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (mknodat, int,
+                  (int fd, char const *file, mode_t mode, dev_t dev)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mknodat, int,
+                  (int fd, char const *file, mode_t mode, dev_t dev));
+_GL_CXXALIASWARN (mknodat);
+#elif defined GNULIB_POSIXCHECK
+# undef mknodat
+# if HAVE_RAW_DECL_MKNODAT
+_GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
+                 "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+/* We can't use the object-like #define stat rpl_stat, because of
+   struct stat.  This means that rpl_stat will not be used if the user
+   does (stat)(a,b).  Oh well.  */
+#  if defined _AIX && defined stat && defined _LARGE_FILES
+    /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
+       so we have to replace stat64() instead of stat(). */
+#   undef stat64
+#   define stat64(name, st) rpl_stat (name, st)
+#  elif 0
+    /* Above, we define stat to _stati64.  */
+#   if defined __MINGW32__ && defined _stati64
+#    ifndef _USE_32BIT_TIME_T
+      /* The system headers define _stati64 to _stat64.  */
+#     undef _stat64
+#     define _stat64(name, st) rpl_stat (name, st)
+#    endif
+#   elif defined _MSC_VER && defined _stati64
+#    ifdef _USE_32BIT_TIME_T
+      /* The system headers define _stati64 to _stat32i64.  */
+#     undef _stat32i64
+#     define _stat32i64(name, st) rpl_stat (name, st)
+#    else
+      /* The system headers define _stati64 to _stat64.  */
+#     undef _stat64
+#     define _stat64(name, st) rpl_stat (name, st)
+#    endif
+#   else
+#    undef _stati64
+#    define _stati64(name, st) rpl_stat (name, st)
+#   endif
+#  elif defined __MINGW32__ && defined stat
+#   ifdef _USE_32BIT_TIME_T
+     /* The system headers define stat to _stat32i64.  */
+#    undef _stat32i64
+#    define _stat32i64(name, st) rpl_stat (name, st)
+#   else
+     /* The system headers define stat to _stat64.  */
+#    undef _stat64
+#    define _stat64(name, st) rpl_stat (name, st)
+#   endif
+#  elif defined _MSC_VER && defined stat
+#   ifdef _USE_32BIT_TIME_T
+     /* The system headers define stat to _stat32.  */
+#    undef _stat32
+#    define _stat32(name, st) rpl_stat (name, st)
+#   else
+     /* The system headers define stat to _stat64i32.  */
+#    undef _stat64i32
+#    define _stat64i32(name, st) rpl_stat (name, st)
+#   endif
+#  else /* !(_AIX ||__MINGW32__ ||  _MSC_VER) */
+#   undef stat
+#   define stat(name, st) rpl_stat (name, st)
+#  endif /* !_LARGE_FILES */
+_GL_EXTERN_C int stat (const char *name, struct stat *buf)
+                      _GL_ARG_NONNULL ((1, 2));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef stat
+# if HAVE_RAW_DECL_STAT
+_GL_WARN_ON_USE (stat, "stat is unportable - "
+                 "use gnulib module stat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
+   implementation relies on futimesat, which on Solaris 10 makes an invocation
+   to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
+   utimensat().  */
+# if 0 || (!1 && defined __sun)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef utimensat
+#   define utimensat rpl_utimensat
+#  endif
+_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag)
+                                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag));
+# endif
+# if 1
+_GL_CXXALIASWARN (utimensat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef utimensat
+# if HAVE_RAW_DECL_UTIMENSAT
+_GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
+                 "use gnulib module utimensat for portability");
+# endif
+#endif
+
+
+#endif /* _GL_SYS_STAT_H */
+#endif /* _GL_SYS_STAT_H */
+#endif
diff --git a/linux-lib/sys/types.h b/linux-lib/sys/types.h
new file mode 100644
index 0000000..5051902
--- /dev/null
+++ b/linux-lib/sys/types.h
@@ -0,0 +1,52 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide a more complete sys/types.h.
+
+   Copyright (C) 2011-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#ifndef _GL_SYS_TYPES_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#include_next <sys/types.h>
+
+#ifndef _GL_SYS_TYPES_H
+#define _GL_SYS_TYPES_H
+
+/* Override off_t if Large File Support is requested on native Windows.  */
+#if 0
+/* Same as int64_t in <stdint.h>.  */
+# if defined _MSC_VER
+#  define off_t __int64
+# else
+#  define off_t long long int
+# endif
+/* Indicator, for gnulib internal purposes.  */
+# define _GL_WINDOWS_64_BIT_OFF_T 1
+#endif
+
+/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
+    && ! defined __GLIBC__
+# include <stddef.h>
+#endif
+
+#endif /* _GL_SYS_TYPES_H */
+#endif /* _GL_SYS_TYPES_H */
diff --git a/linux-lib/sys/wait.h b/linux-lib/sys/wait.h
new file mode 100644
index 0000000..c6c63f3
--- /dev/null
+++ b/linux-lib/sys/wait.h
@@ -0,0 +1,431 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A POSIX-like <sys/wait.h>.
+   Copyright (C) 2001-2003, 2005-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef _GL_SYS_WAIT_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* The include_next requires a split double-inclusion guard.  */
+#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include_next <sys/wait.h>
+#endif
+
+#ifndef _GL_SYS_WAIT_H
+#define _GL_SYS_WAIT_H
+
+/* Get pid_t.  */
+#include <sys/types.h>
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+/* Unix API.  */
+
+/* The following macros apply to an argument x, that is a status of a process,
+   as returned by waitpid().
+   On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and
+   WTERMSIG are bits 7..0, while BeOS uses the opposite.  Therefore programs
+   have to use the abstract macros.  */
+
+/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x)
+   is true.  */
+# ifndef WIFSIGNALED
+#  define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f)
+# endif
+# ifndef WIFEXITED
+#  define WIFEXITED(x) (WTERMSIG (x) == 0)
+# endif
+# ifndef WIFSTOPPED
+#  define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f)
+# endif
+
+/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true.  */
+# ifndef WTERMSIG
+#  define WTERMSIG(x) ((x) & 0x7f)
+# endif
+
+/* The exit status. Only to be accessed if WIFEXITED(x) is true.  */
+# ifndef WEXITSTATUS
+#  define WEXITSTATUS(x) (((x) >> 8) & 0xff)
+# endif
+
+/* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true.  */
+# ifndef WSTOPSIG
+#  define WSTOPSIG(x) (((x) >> 8) & 0x7f)
+# endif
+
+/* True if the process dumped core.  Not standardized by POSIX.  */
+# ifndef WCOREDUMP
+#  define WCOREDUMP(x) ((x) & 0x80)
+# endif
+
+#else
+/* Native Windows API.  */
+
+# include <signal.h> /* for SIGTERM */
+
+/* The following macros apply to an argument x, that is a status of a process,
+   as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess().
+   This value is simply an 'int', not composed of bit fields.  */
+
+/* When an unhandled fatal signal terminates a process, the exit code is 3.  */
+# define WIFSIGNALED(x) ((x) == 3)
+# define WIFEXITED(x) ((x) != 3)
+# define WIFSTOPPED(x) 0
+
+/* The signal that terminated a process is not known posthum.  */
+# define WTERMSIG(x) SIGTERM
+
+# define WEXITSTATUS(x) (x)
+
+/* There are no stopping signals.  */
+# define WSTOPSIG(x) 0
+
+/* There are no core dumps.  */
+# define WCOREDUMP(x) 0
+
+#endif
+
+
+/* Declarations of functions.  */
+
+#if 1
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+_GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options));
+# endif
+_GL_CXXALIAS_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options));
+_GL_CXXALIASWARN (waitpid);
+#elif defined GNULIB_POSIXCHECK
+# undef waitpid
+# if HAVE_RAW_DECL_WAITPID
+_GL_WARN_ON_USE (waitpid, "waitpid is unportable - "
+                 "use gnulib module sys_wait for portability");
+# endif
+#endif
+
+
+#endif /* _GL_SYS_WAIT_H */
+#endif /* _GL_SYS_WAIT_H */
diff --git a/linux-lib/time.h b/linux-lib/time.h
new file mode 100644
index 0000000..9bb0188
--- /dev/null
+++ b/linux-lib/time.h
@@ -0,0 +1,560 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A more-standard <time.h>.
+
+   Copyright (C) 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* Don't get in the way of glibc when it includes time.h merely to
+   declare a few standard symbols, rather than to declare all the
+   symbols.  Also, Solaris 8 <time.h> eventually includes itself
+   recursively; if that is happening, just include the system <time.h>
+   without adding our own declarations.  */
+#if (defined __need_time_t || defined __need_clock_t \
+     || defined __need_timespec \
+     || defined _GL_TIME_H)
+
+# include_next <time.h>
+
+#else
+
+# define _GL_TIME_H
+
+# include_next <time.h>
+
+/* NetBSD 5.0 mis-defines NULL.  */
+# include <stddef.h>
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
+   Or they define it with the wrong member names or define it in <sys/time.h>
+   (e.g., FreeBSD circa 1997).  Stock Mingw does not define it, but the
+   pthreads-win32 library defines it in <pthread.h>.  */
+# if ! 1
+#  if 0
+#   include <sys/time.h>
+#  elif 0
+#   include <pthread.h>
+/* The pthreads-win32 <pthread.h> also defines a couple of broken macros.  */
+#   undef asctime_r
+#   undef ctime_r
+#   undef gmtime_r
+#   undef localtime_r
+#   undef rand_r
+#   undef strtok_r
+#  else
+
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+
+#   if !GNULIB_defined_struct_timespec
+#    undef timespec
+#    define timespec rpl_timespec
+struct timespec
+{
+  time_t tv_sec;
+  long int tv_nsec;
+};
+#    define GNULIB_defined_struct_timespec 1
+#   endif
+
+#   ifdef __cplusplus
+}
+#   endif
+
+#  endif
+# endif
+
+# if !GNULIB_defined_struct_time_t_must_be_integral
+/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires
+   time_t to be an integer type, even though C99 permits floating
+   point.  We don't know of any implementation that uses floating
+   point, and it is much easier to write code that doesn't have to
+   worry about that corner case, so we force the issue.  */
+struct __time_t_must_be_integral {
+  unsigned int __floating_time_t_unsupported : (time_t) 1;
+};
+#  define GNULIB_defined_struct_time_t_must_be_integral 1
+# endif
+
+/* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
+   return -1 and store the remaining time into RMTP.  See
+   <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
+# if 0
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define nanosleep rpl_nanosleep
+#   endif
+_GL_FUNCDECL_RPL (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp));
+#  else
+#   if ! 1
+_GL_FUNCDECL_SYS (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp)
+                  _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_SYS (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp));
+#  endif
+_GL_CXXALIASWARN (nanosleep);
+# endif
+
+/* Return the 'time_t' representation of TP and normalize TP.  */
+# if 0
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define mktime rpl_mktime
+#   endif
+_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp));
+#  else
+_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
+#  endif
+_GL_CXXALIASWARN (mktime);
+# endif
+
+/* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
+   <http://www.opengroup.org/susv3xsh/localtime_r.html> and
+   <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
+# if 0
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef localtime_r
+#    define localtime_r rpl_localtime_r
+#   endif
+_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result)
+                                            _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result));
+#  else
+#   if ! 1
+_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result)
+                                            _GL_ARG_NONNULL ((1, 2)));
+#   endif
+_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result));
+#  endif
+#  if 1
+_GL_CXXALIASWARN (localtime_r);
+#  endif
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef gmtime_r
+#    define gmtime_r rpl_gmtime_r
+#   endif
+_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result)
+                                         _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result));
+#  else
+#   if ! 1
+_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result)
+                                         _GL_ARG_NONNULL ((1, 2)));
+#   endif
+_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result));
+#  endif
+#  if 1
+_GL_CXXALIASWARN (gmtime_r);
+#  endif
+# endif
+
+/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
+   the resulting broken-down time into TM.  See
+   <http://www.opengroup.org/susv3xsh/strptime.html>.  */
+# if 0
+#  if ! 1
+_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm)
+                                    _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm));
+_GL_CXXALIASWARN (strptime);
+# endif
+
+/* Convert TM to a time_t value, assuming UTC.  */
+# if 0
+#  if GNULIB_PORTCHECK
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef timegm
+#    define timegm rpl_timegm
+#   endif
+_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm));
+#  else
+#   if ! 1
+_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
+#  endif
+_GL_CXXALIASWARN (timegm);
+# endif
+
+/* Encourage applications to avoid unsafe functions that can overrun
+   buffers when given outlandish struct tm values.  Portable
+   applications should use strftime (or even sprintf) instead.  */
+# if defined GNULIB_POSIXCHECK
+#  undef asctime
+_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef asctime_r
+_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef ctime
+_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+#  undef ctime_r
+_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - "
+                 "better use strftime (or even sprintf) instead");
+# endif
+
+#endif
diff --git a/linux-lib/unistd.h b/linux-lib/unistd.h
new file mode 100644
index 0000000..fabffd6
--- /dev/null
+++ b/linux-lib/unistd.h
@@ -0,0 +1,1853 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Substitute for and wrapper around <unistd.h>.
+   Copyright (C) 2003-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* Special invocation convention:
+   - On mingw, several headers, including <winsock2.h>, include <unistd.h>,
+     but we need to ensure that both the system <unistd.h> and <winsock2.h>
+     are completely included before we replace gethostname.  */
+#if 0 && 0 \
+  && !defined _GL_WINSOCK2_H_WITNESS && defined _WINSOCK2_H
+/* <unistd.h> is being indirectly included for the first time from
+   <winsock2.h>; avoid declaring any overrides.  */
+# if 1
+#  include_next <unistd.h>
+# else
+#  error unexpected; report this to bug-gnulib@gnu.org
+# endif
+# define _GL_WINSOCK2_H_WITNESS
+
+/* Normal invocation.  */
+#elif !defined _GL_UNISTD_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <unistd.h>
+#endif
+
+/* Get all possible declarations of gethostname().  */
+#if 0 && 0 \
+  && !defined _GL_INCLUDING_WINSOCK2_H
+# define _GL_INCLUDING_WINSOCK2_H
+# include <winsock2.h>
+# undef _GL_INCLUDING_WINSOCK2_H
+#endif
+
+#if !defined _GL_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
+#define _GL_UNISTD_H
+
+/* NetBSD 5.0 mis-defines NULL.  Also get size_t.  */
+#include <stddef.h>
+
+/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>.  */
+/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
+     || ((0 || defined GNULIB_POSIXCHECK) \
+         && defined __CYGWIN__)) \
+    && ! defined __GLIBC__
+# include <stdio.h>
+#endif
+
+/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (0 || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \
+    && ! defined __GLIBC__
+# include <fcntl.h>
+#endif
+
+/* mingw fails to declare _exit in <unistd.h>.  */
+/* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in
+   <unistd.h>.  */
+/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* Native Windows platforms declare chdir, getcwd, rmdir in
+   <io.h> and/or <direct.h>, not in <unistd.h>.
+   They also declare access(), chmod(), close(), dup(), dup2(), isatty(),
+   lseek(), read(), unlink(), write() in <io.h>.  */
+#if ((0 || 0 || 0 \
+      || defined GNULIB_POSIXCHECK) \
+     && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# include <io.h>     /* mingw32, mingw64 */
+# include <direct.h> /* mingw64, MSVC 9 */
+#elif (1 || 0 || 1 || 0 \
+       || 0 || 0 || 0 || 0 \
+       || defined GNULIB_POSIXCHECK) \
+      && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+/* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>.
+   NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if ((0 && (defined _AIX || defined __osf__)) \
+     || (0 && defined __TANDEM)) \
+    && !defined __GLIBC__
+# include <netdb.h>
+#endif
+
+/* MSVC defines off_t in <sys/types.h>.
+   May also define off_t to a 64-bit type on native Windows.  */
+#if !1 || 0
+/* Get off_t.  */
+# include <sys/types.h>
+#endif
+
+#if (0 || 0 \
+     || 0 || 0 \
+     || 0 || 0 || defined GNULIB_POSIXCHECK)
+/* Get ssize_t.  */
+# include <sys/types.h>
+#endif
+
+/* Get getopt(), optarg, optind, opterr, optopt.
+   But avoid namespace pollution on glibc systems.  */
+#if 0 && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
+# include <getopt.h>
+#endif
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_UNISTD_INLINE
+# define _GL_UNISTD_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Hide some function declarations from <winsock2.h>.  */
+
+#if 0 && 0
+# if !defined _GL_SYS_SOCKET_H
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef socket
+#   define socket              socket_used_without_including_sys_socket_h
+#   undef connect
+#   define connect             connect_used_without_including_sys_socket_h
+#   undef accept
+#   define accept              accept_used_without_including_sys_socket_h
+#   undef bind
+#   define bind                bind_used_without_including_sys_socket_h
+#   undef getpeername
+#   define getpeername         getpeername_used_without_including_sys_socket_h
+#   undef getsockname
+#   define getsockname         getsockname_used_without_including_sys_socket_h
+#   undef getsockopt
+#   define getsockopt          getsockopt_used_without_including_sys_socket_h
+#   undef listen
+#   define listen              listen_used_without_including_sys_socket_h
+#   undef recv
+#   define recv                recv_used_without_including_sys_socket_h
+#   undef send
+#   define send                send_used_without_including_sys_socket_h
+#   undef recvfrom
+#   define recvfrom            recvfrom_used_without_including_sys_socket_h
+#   undef sendto
+#   define sendto              sendto_used_without_including_sys_socket_h
+#   undef setsockopt
+#   define setsockopt          setsockopt_used_without_including_sys_socket_h
+#   undef shutdown
+#   define shutdown            shutdown_used_without_including_sys_socket_h
+#  else
+    _GL_WARN_ON_USE (socket,
+                     "socket() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (connect,
+                     "connect() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (accept,
+                     "accept() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (bind,
+                     "bind() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getpeername,
+                     "getpeername() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getsockname,
+                     "getsockname() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (getsockopt,
+                     "getsockopt() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (listen,
+                     "listen() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (recv,
+                     "recv() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (send,
+                     "send() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (recvfrom,
+                     "recvfrom() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (sendto,
+                     "sendto() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (setsockopt,
+                     "setsockopt() used without including <sys/socket.h>");
+    _GL_WARN_ON_USE (shutdown,
+                     "shutdown() used without including <sys/socket.h>");
+#  endif
+# endif
+# if !defined _GL_SYS_SELECT_H
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef select
+#   define select              select_used_without_including_sys_select_h
+#  else
+    _GL_WARN_ON_USE (select,
+                     "select() used without including <sys/select.h>");
+#  endif
+# endif
+#endif
+
+
+/* OS/2 EMX lacks these macros.  */
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+/* Ensure *_OK macros exist.  */
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+
+/* Declare overridden functions.  */
+
+
+#if defined GNULIB_POSIXCHECK
+/* The access() function is a security risk.  */
+_GL_WARN_ON_USE (access, "the access function is a security risk - "
+                 "use the gnulib module faccessat instead");
+#endif
+
+
+#if 0
+_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIASWARN (chdir);
+#elif defined GNULIB_POSIXCHECK
+# undef chdir
+# if HAVE_RAW_DECL_CHDIR
+_GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - "
+                 "use gnulib module chdir for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef chown
+#   define chown rpl_chown
+#  endif
+_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid));
+# endif
+_GL_CXXALIASWARN (chown);
+#elif defined GNULIB_POSIXCHECK
+# undef chown
+# if HAVE_RAW_DECL_CHOWN
+_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and "
+                 "doesn't treat a uid or gid of -1 on some systems - "
+                 "use gnulib module chown for portability");
+# endif
+#endif
+
+
+#if 1
+# if 0
+/* Automatically included by modules that need a replacement for close.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef close
+#   define close rpl_close
+#  endif
+_GL_FUNCDECL_RPL (close, int, (int fd));
+_GL_CXXALIAS_RPL (close, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (close, int, (int fd));
+# endif
+_GL_CXXALIASWARN (close);
+#elif 0
+# undef close
+# define close close_used_without_requesting_gnulib_module_close
+#elif defined GNULIB_POSIXCHECK
+# undef close
+/* Assume close is always declared.  */
+_GL_WARN_ON_USE (close, "close does not portably work on sockets - "
+                 "use gnulib module close for portability");
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup rpl_dup
+#  endif
+_GL_FUNCDECL_RPL (dup, int, (int oldfd));
+_GL_CXXALIAS_RPL (dup, int, (int oldfd));
+# else
+_GL_CXXALIAS_SYS (dup, int, (int oldfd));
+# endif
+_GL_CXXALIASWARN (dup);
+#elif defined GNULIB_POSIXCHECK
+# undef dup
+# if HAVE_RAW_DECL_DUP
+_GL_WARN_ON_USE (dup, "dup is unportable - "
+                 "use gnulib module dup for portability");
+# endif
+#endif
+
+
+#if 1
+/* Copy the file descriptor OLDFD into file descriptor NEWFD.  Do nothing if
+   NEWFD = OLDFD, otherwise close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup2 rpl_dup2
+#  endif
+_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd));
+_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd));
+#  endif
+_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd));
+# endif
+_GL_CXXALIASWARN (dup2);
+#elif defined GNULIB_POSIXCHECK
+# undef dup2
+# if HAVE_RAW_DECL_DUP2
+_GL_WARN_ON_USE (dup2, "dup2 is unportable - "
+                 "use gnulib module dup2 for portability");
+# endif
+#endif
+
+
+#if 0
+/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
+   specified flags.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>.  */
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup3 rpl_dup3
+#  endif
+_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags));
+# else
+_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags));
+# endif
+_GL_CXXALIASWARN (dup3);
+#elif defined GNULIB_POSIXCHECK
+# undef dup3
+# if HAVE_RAW_DECL_DUP3
+_GL_WARN_ON_USE (dup3, "dup3 is unportable - "
+                 "use gnulib module dup3 for portability");
+# endif
+#endif
+
+
+#if 1
+# if !1
+/* Set of environment variables and values.  An array of strings of the form
+   "VARIABLE=VALUE", terminated with a NULL.  */
+#  if defined __APPLE__ && defined __MACH__
+#   include <crt_externs.h>
+#   define environ (*_NSGetEnviron ())
+#  else
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+extern char **environ;
+#   ifdef __cplusplus
+}
+#   endif
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if HAVE_RAW_DECL_ENVIRON
+_GL_UNISTD_INLINE char ***
+rpl_environ (void)
+{
+  return &environ;
+}
+_GL_WARN_ON_USE (rpl_environ, "environ is unportable - "
+                 "use gnulib module environ for portability");
+#  undef environ
+#  define environ (*rpl_environ ())
+# endif
+#endif
+
+
+#if 0
+/* Like access(), except that it uses the effective user id and group id of
+   the current process.  */
+# if !1
+_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode));
+_GL_CXXALIASWARN (euidaccess);
+# if defined GNULIB_POSIXCHECK
+/* Like access(), this function is a security risk.  */
+_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - "
+                 "use the gnulib module faccessat instead");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef euidaccess
+# if HAVE_RAW_DECL_EUIDACCESS
+_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - "
+                 "use gnulib module euidaccess for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag));
+_GL_CXXALIASWARN (faccessat);
+#elif defined GNULIB_POSIXCHECK
+# undef faccessat
+# if HAVE_RAW_DECL_FACCESSAT
+_GL_WARN_ON_USE (faccessat, "faccessat is not portable - "
+                 "use gnulib module faccessat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the process' current working directory to the directory on which
+   the given file descriptor is open.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>.  */
+# if ! 1
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+
+/* Gnulib internal hooks needed to maintain the fchdir metadata.  */
+_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename)
+     _GL_ARG_NONNULL ((2));
+_GL_EXTERN_C void _gl_unregister_fd (int fd);
+_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd);
+_GL_EXTERN_C const char *_gl_directory_name (int fd);
+
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+#  endif
+# endif
+_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/));
+_GL_CXXALIASWARN (fchdir);
+#elif defined GNULIB_POSIXCHECK
+# undef fchdir
+# if HAVE_RAW_DECL_FCHDIR
+_GL_WARN_ON_USE (fchdir, "fchdir is unportable - "
+                 "use gnulib module fchdir for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fchownat
+#   define fchownat rpl_fchownat
+#  endif
+_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# endif
+_GL_CXXALIASWARN (fchownat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchownat
+# if HAVE_RAW_DECL_FCHOWNAT
+_GL_WARN_ON_USE (fchownat, "fchownat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Synchronize changes to a file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>.  */
+# if !1 || !1
+_GL_FUNCDECL_SYS (fdatasync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fdatasync, int, (int fd));
+_GL_CXXALIASWARN (fdatasync);
+#elif defined GNULIB_POSIXCHECK
+# undef fdatasync
+# if HAVE_RAW_DECL_FDATASYNC
+_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - "
+                 "use gnulib module fdatasync for portability");
+# endif
+#endif
+
+
+#if 0
+/* Synchronize changes, including metadata, to a file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>.  */
+# if !1
+_GL_FUNCDECL_SYS (fsync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fsync, int, (int fd));
+_GL_CXXALIASWARN (fsync);
+#elif defined GNULIB_POSIXCHECK
+# undef fsync
+# if HAVE_RAW_DECL_FSYNC
+_GL_WARN_ON_USE (fsync, "fsync is unportable - "
+                 "use gnulib module fsync for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the size of the file to which FD is opened to become equal to LENGTH.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftruncate
+#   define ftruncate rpl_ftruncate
+#  endif
+_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length));
+_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length));
+#  endif
+_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length));
+# endif
+_GL_CXXALIASWARN (ftruncate);
+#elif defined GNULIB_POSIXCHECK
+# undef ftruncate
+# if HAVE_RAW_DECL_FTRUNCATE
+_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - "
+                 "use gnulib module ftruncate for portability");
+# endif
+#endif
+
+
+#if 0
+/* Get the name of the current working directory, and put it in SIZE bytes
+   of BUF.
+   Return BUF if successful, or NULL if the directory couldn't be determined
+   or SIZE was too small.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>.
+   Additionally, the gnulib module 'getcwd' guarantees the following GNU
+   extension: If BUF is NULL, an array is allocated with 'malloc'; the array
+   is SIZE bytes long, unless SIZE == 0, in which case it is as big as
+   necessary.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getcwd rpl_getcwd
+#  endif
+_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size));
+_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size));
+# else
+/* Need to cast, because on mingw, the second parameter is
+                                                   int size.  */
+_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size));
+# endif
+_GL_CXXALIASWARN (getcwd);
+#elif defined GNULIB_POSIXCHECK
+# undef getcwd
+# if HAVE_RAW_DECL_GETCWD
+_GL_WARN_ON_USE (getcwd, "getcwd is unportable - "
+                 "use gnulib module getcwd for portability");
+# endif
+#endif
+
+
+#if 0
+/* Return the NIS domain name of the machine.
+   WARNING! The NIS domain name is unrelated to the fully qualified host name
+            of the machine.  It is also unrelated to email addresses.
+   WARNING! The NIS domain name is usually the empty string or "(none)" when
+            not using NIS.
+
+   Put up to LEN bytes of the NIS domain name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdomainname
+#   define getdomainname rpl_getdomainname
+#  endif
+_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len)
+                                      _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len)
+                                      _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (getdomainname);
+#elif defined GNULIB_POSIXCHECK
+# undef getdomainname
+# if HAVE_RAW_DECL_GETDOMAINNAME
+_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - "
+                 "use gnulib module getdomainname for portability");
+# endif
+#endif
+
+
+#if 1
+/* Return the maximum number of file descriptors in the current process.
+   In POSIX, this is same as sysconf (_SC_OPEN_MAX).  */
+# if !1
+_GL_FUNCDECL_SYS (getdtablesize, int, (void));
+# endif
+_GL_CXXALIAS_SYS (getdtablesize, int, (void));
+_GL_CXXALIASWARN (getdtablesize);
+#elif defined GNULIB_POSIXCHECK
+# undef getdtablesize
+# if HAVE_RAW_DECL_GETDTABLESIZE
+_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - "
+                 "use gnulib module getdtablesize for portability");
+# endif
+#endif
+
+
+#if 0
+/* Return the supplemental groups that the current process belongs to.
+   It is unspecified whether the effective group id is in the list.
+   If N is 0, return the group count; otherwise, N describes how many
+   entries are available in GROUPS.  Return -1 and set errno if N is
+   not 0 and not large enough.  Fails with ENOSYS on some systems.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getgroups
+#   define getgroups rpl_getgroups
+#  endif
+_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups));
+_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups));
+#  endif
+_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups));
+# endif
+_GL_CXXALIASWARN (getgroups);
+#elif defined GNULIB_POSIXCHECK
+# undef getgroups
+# if HAVE_RAW_DECL_GETGROUPS
+_GL_WARN_ON_USE (getgroups, "getgroups is unportable - "
+                 "use gnulib module getgroups for portability");
+# endif
+#endif
+
+
+#if 0
+/* Return the standard host name of the machine.
+   WARNING! The host name may or may not be fully qualified.
+
+   Put up to LEN bytes of the host name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the host name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef gethostname
+#   define gethostname rpl_gethostname
+#  endif
+_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second
+   parameter is
+                                                      int len.  */
+_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (gethostname);
+#elif 0
+# undef gethostname
+# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
+#elif defined GNULIB_POSIXCHECK
+# undef gethostname
+# if HAVE_RAW_DECL_GETHOSTNAME
+_GL_WARN_ON_USE (gethostname, "gethostname is unportable - "
+                 "use gnulib module gethostname for portability");
+# endif
+#endif
+
+
+#if 0
+/* Returns the user's login name, or NULL if it cannot be found.  Upon error,
+   returns NULL with errno set.
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if !1
+_GL_FUNCDECL_SYS (getlogin, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getlogin, char *, (void));
+_GL_CXXALIASWARN (getlogin);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin
+# if HAVE_RAW_DECL_GETLOGIN
+_GL_WARN_ON_USE (getlogin, "getlogin is unportable - "
+                 "use gnulib module getlogin for portability");
+# endif
+#endif
+
+
+#if 0
+/* Copies the user's login name to NAME.
+   The array pointed to by NAME has room for SIZE bytes.
+
+   Returns 0 if successful.  Upon error, an error number is returned, or -1 in
+   the case that the login name cannot be found but no specific error is
+   provided (this case is hopefully rare but is left open by the POSIX spec).
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getlogin_r rpl_getlogin_r
+#  endif
+_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Solaris 10 systems, the second argument is
+                                                     int size.  */
+_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size));
+# endif
+_GL_CXXALIASWARN (getlogin_r);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin_r
+# if HAVE_RAW_DECL_GETLOGIN_R
+_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - "
+                 "use gnulib module getlogin_r for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getpagesize rpl_getpagesize
+#  endif
+_GL_FUNCDECL_RPL (getpagesize, int, (void));
+_GL_CXXALIAS_RPL (getpagesize, int, (void));
+# else
+#  if !1
+#   if !defined getpagesize
+/* This is for POSIX systems.  */
+#    if !defined _gl_getpagesize && defined _SC_PAGESIZE
+#     if ! (defined __VMS && __VMS_VER < 70000000)
+#      define _gl_getpagesize() sysconf (_SC_PAGESIZE)
+#     endif
+#    endif
+/* This is for older VMS.  */
+#    if !defined _gl_getpagesize && defined __VMS
+#     ifdef __ALPHA
+#      define _gl_getpagesize() 8192
+#     else
+#      define _gl_getpagesize() 512
+#     endif
+#    endif
+/* This is for BeOS.  */
+#    if !defined _gl_getpagesize && 0
+#     include <OS.h>
+#     if defined B_PAGE_SIZE
+#      define _gl_getpagesize() B_PAGE_SIZE
+#     endif
+#    endif
+/* This is for AmigaOS4.0.  */
+#    if !defined _gl_getpagesize && defined __amigaos4__
+#     define _gl_getpagesize() 2048
+#    endif
+/* This is for older Unix systems.  */
+#    if !defined _gl_getpagesize && 0
+#     include <sys/param.h>
+#     ifdef EXEC_PAGESIZE
+#      define _gl_getpagesize() EXEC_PAGESIZE
+#     else
+#      ifdef NBPG
+#       ifndef CLSIZE
+#        define CLSIZE 1
+#       endif
+#       define _gl_getpagesize() (NBPG * CLSIZE)
+#      else
+#       ifdef NBPC
+#        define _gl_getpagesize() NBPC
+#       endif
+#      endif
+#     endif
+#    endif
+#    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#     define getpagesize() _gl_getpagesize ()
+#    else
+#     if !GNULIB_defined_getpagesize_function
+_GL_UNISTD_INLINE int
+getpagesize ()
+{
+  return _gl_getpagesize ();
+}
+#      define GNULIB_defined_getpagesize_function 1
+#     endif
+#    endif
+#   endif
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t.  */
+_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void));
+# endif
+# if 1
+_GL_CXXALIASWARN (getpagesize);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getpagesize
+# if HAVE_RAW_DECL_GETPAGESIZE
+_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - "
+                 "use gnulib module getpagesize for portability");
+# endif
+#endif
+
+
+#if 0
+/* Return the next valid login shell on the system, or NULL when the end of
+   the list has been reached.  */
+# if !1
+_GL_FUNCDECL_SYS (getusershell, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getusershell, char *, (void));
+_GL_CXXALIASWARN (getusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef getusershell
+# if HAVE_RAW_DECL_GETUSERSHELL
+_GL_WARN_ON_USE (getusershell, "getusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if 0
+/* Rewind to pointer that is advanced at each getusershell() call.  */
+# if !1
+_GL_FUNCDECL_SYS (setusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (setusershell, void, (void));
+_GL_CXXALIASWARN (setusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef setusershell
+# if HAVE_RAW_DECL_SETUSERSHELL
+_GL_WARN_ON_USE (setusershell, "setusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if 0
+/* Free the pointer that is advanced at each getusershell() call and
+   associated resources.  */
+# if !1
+_GL_FUNCDECL_SYS (endusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (endusershell, void, (void));
+_GL_CXXALIASWARN (endusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef endusershell
+# if HAVE_RAW_DECL_ENDUSERSHELL
+_GL_WARN_ON_USE (endusershell, "endusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+
+#if 0
+/* Determine whether group id is in calling user's group list.  */
+# if !1
+_GL_FUNCDECL_SYS (group_member, int, (gid_t gid));
+# endif
+_GL_CXXALIAS_SYS (group_member, int, (gid_t gid));
+_GL_CXXALIASWARN (group_member);
+#elif defined GNULIB_POSIXCHECK
+# undef group_member
+# if HAVE_RAW_DECL_GROUP_MEMBER
+_GL_WARN_ON_USE (group_member, "group_member is unportable - "
+                 "use gnulib module group-member for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef isatty
+#   define isatty rpl_isatty
+#  endif
+_GL_FUNCDECL_RPL (isatty, int, (int fd));
+_GL_CXXALIAS_RPL (isatty, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (isatty, int, (int fd));
+# endif
+_GL_CXXALIASWARN (isatty);
+#elif defined GNULIB_POSIXCHECK
+# undef isatty
+# if HAVE_RAW_DECL_ISATTY
+_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - "
+                 "use gnulib module isatty for portability");
+# endif
+#endif
+
+
+#if 0
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Do not follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lchown
+#   define lchown rpl_lchown
+#  endif
+_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group));
+# endif
+_GL_CXXALIASWARN (lchown);
+#elif defined GNULIB_POSIXCHECK
+# undef lchown
+# if HAVE_RAW_DECL_LCHOWN
+_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - "
+                 "use gnulib module lchown for portability");
+# endif
+#endif
+
+
+#if 0
+/* Create a new hard link for an existing file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define link rpl_link
+#  endif
+_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2));
+# endif
+_GL_CXXALIASWARN (link);
+#elif defined GNULIB_POSIXCHECK
+# undef link
+# if HAVE_RAW_DECL_LINK
+_GL_WARN_ON_USE (link, "link is unportable - "
+                 "use gnulib module link for portability");
+# endif
+#endif
+
+
+#if 0
+/* Create a new hard link for an existing file, relative to two
+   directories.  FLAG controls whether symlinks are followed.
+   Return 0 if successful, otherwise -1 and errno set.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef linkat
+#   define linkat rpl_linkat
+#  endif
+_GL_FUNCDECL_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# endif
+_GL_CXXALIASWARN (linkat);
+#elif defined GNULIB_POSIXCHECK
+# undef linkat
+# if HAVE_RAW_DECL_LINKAT
+_GL_WARN_ON_USE (linkat, "linkat is unportable - "
+                 "use gnulib module linkat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
+   Return the new offset if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lseek rpl_lseek
+#  endif
+_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+# else
+_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (lseek);
+#elif defined GNULIB_POSIXCHECK
+# undef lseek
+# if HAVE_RAW_DECL_LSEEK
+_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some "
+                 "systems - use gnulib module lseek for portability");
+# endif
+#endif
+
+
+#if 0
+/* Create a pipe, defaulting to O_BINARY mode.
+   Store the read-end as fd[0] and the write-end as fd[1].
+   Return 0 upon success, or -1 with errno set upon failure.  */
+# if !1
+_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pipe, int, (int fd[2]));
+_GL_CXXALIASWARN (pipe);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe
+# if HAVE_RAW_DECL_PIPE
+_GL_WARN_ON_USE (pipe, "pipe is unportable - "
+                 "use gnulib module pipe-posix for portability");
+# endif
+#endif
+
+
+#if 1
+/* Create a pipe, applying the given flags when opening the read-end of the
+   pipe and the write-end of the pipe.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Store the read-end as fd[0] and the write-end as fd[1].
+   Return 0 upon success, or -1 with errno set upon failure.
+   See also the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>.  */
+# if 1
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define pipe2 rpl_pipe2
+#  endif
+_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags));
+# else
+_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags));
+# endif
+_GL_CXXALIASWARN (pipe2);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe2
+# if HAVE_RAW_DECL_PIPE2
+_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - "
+                 "use gnulib module pipe2 for portability");
+# endif
+#endif
+
+
+#if 0
+/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET.
+   Return the number of bytes placed into BUF if successful, otherwise
+   set errno and return -1.  0 indicates EOF.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pread
+#   define pread rpl_pread
+#  endif
+_GL_FUNCDECL_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pread);
+#elif defined GNULIB_POSIXCHECK
+# undef pread
+# if HAVE_RAW_DECL_PREAD
+_GL_WARN_ON_USE (pread, "pread is unportable - "
+                 "use gnulib module pread for portability");
+# endif
+#endif
+
+
+#if 0
+/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET.
+   Return the number of bytes written if successful, otherwise
+   set errno and return -1.  0 indicates nothing written.  See the
+   POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef pwrite
+#   define pwrite rpl_pwrite
+#  endif
+_GL_FUNCDECL_RPL (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pwrite);
+#elif defined GNULIB_POSIXCHECK
+# undef pwrite
+# if HAVE_RAW_DECL_PWRITE
+_GL_WARN_ON_USE (pwrite, "pwrite is unportable - "
+                 "use gnulib module pwrite for portability");
+# endif
+#endif
+
+
+#if 0
+/* Read up to COUNT bytes from file descriptor FD into the buffer starting
+   at BUF.  See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef read
+#   define read rpl_read
+#  endif
+_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count));
+# else
+/* Need to cast, because on mingw, the third parameter is
+                                                          unsigned int count
+   and the return type is 'int'.  */
+_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (read);
+#endif
+
+
+#if 0
+/* Read the contents of the symbolic link FILE and place the first BUFSIZE
+   bytes of it into BUF.  Return the number of bytes placed into BUF if
+   successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define readlink rpl_readlink
+#  endif
+_GL_FUNCDECL_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# endif
+_GL_CXXALIASWARN (readlink);
+#elif defined GNULIB_POSIXCHECK
+# undef readlink
+# if HAVE_RAW_DECL_READLINK
+_GL_WARN_ON_USE (readlink, "readlink is unportable - "
+                 "use gnulib module readlink for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len)
+                  _GL_ARG_NONNULL ((2, 3)));
+# endif
+_GL_CXXALIAS_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len));
+_GL_CXXALIASWARN (readlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef readlinkat
+# if HAVE_RAW_DECL_READLINKAT
+_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - "
+                 "use gnulib module readlinkat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Remove the directory DIR.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define rmdir rpl_rmdir
+#  endif
+_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (rmdir, int, (char const *name));
+# else
+_GL_CXXALIAS_SYS (rmdir, int, (char const *name));
+# endif
+_GL_CXXALIASWARN (rmdir);
+#elif defined GNULIB_POSIXCHECK
+# undef rmdir
+# if HAVE_RAW_DECL_RMDIR
+_GL_WARN_ON_USE (rmdir, "rmdir is unportable - "
+                 "use gnulib module rmdir for portability");
+# endif
+#endif
+
+
+#if 0
+/* Set the host name of the machine.
+   The host name may or may not be fully qualified.
+
+   Put LEN bytes of NAME into the host name.
+   Return 0 if successful, otherwise, set errno and return -1.
+
+   Platforms with no ability to set the hostname return -1 and set
+   errno = ENOSYS.  */
+# if !1 || !1
+_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5
+   and FreeBSD 6.4 the second parameter is int.  On Solaris 11
+   2011-10, the first parameter is not const.  */
+_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len));
+_GL_CXXALIASWARN (sethostname);
+#elif defined GNULIB_POSIXCHECK
+# undef sethostname
+# if HAVE_RAW_DECL_SETHOSTNAME
+_GL_WARN_ON_USE (sethostname, "sethostname is unportable - "
+                 "use gnulib module sethostname for portability");
+# endif
+#endif
+
+
+#if 0
+/* Pause the execution of the current thread for N seconds.
+   Returns the number of seconds left to sleep.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sleep
+#   define sleep rpl_sleep
+#  endif
+_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n));
+_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n));
+#  endif
+_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n));
+# endif
+_GL_CXXALIASWARN (sleep);
+#elif defined GNULIB_POSIXCHECK
+# undef sleep
+# if HAVE_RAW_DECL_SLEEP
+_GL_WARN_ON_USE (sleep, "sleep is unportable - "
+                 "use gnulib module sleep for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef symlink
+#   define symlink rpl_symlink
+#  endif
+_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file));
+# endif
+_GL_CXXALIASWARN (symlink);
+#elif defined GNULIB_POSIXCHECK
+# undef symlink
+# if HAVE_RAW_DECL_SYMLINK
+_GL_WARN_ON_USE (symlink, "symlink is not portable - "
+                 "use gnulib module symlink for portability");
+# endif
+#endif
+
+
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file)
+                  _GL_ARG_NONNULL ((1, 3)));
+# endif
+_GL_CXXALIAS_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file));
+_GL_CXXALIASWARN (symlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef symlinkat
+# if HAVE_RAW_DECL_SYMLINKAT
+_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
+                 "use gnulib module symlinkat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Store at most BUFLEN characters of the pathname of the terminal FD is
+   open on in BUF.  Return 0 on success, otherwise an error number.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ttyname_r
+#   define ttyname_r rpl_ttyname_r
+#  endif
+_GL_FUNCDECL_RPL (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen));
+# endif
+_GL_CXXALIASWARN (ttyname_r);
+#elif defined GNULIB_POSIXCHECK
+# undef ttyname_r
+# if HAVE_RAW_DECL_TTYNAME_R
+_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - "
+                 "use gnulib module ttyname_r for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlink
+#   define unlink rpl_unlink
+#  endif
+_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unlink, int, (char const *file));
+# else
+_GL_CXXALIAS_SYS (unlink, int, (char const *file));
+# endif
+_GL_CXXALIASWARN (unlink);
+#elif defined GNULIB_POSIXCHECK
+# undef unlink
+# if HAVE_RAW_DECL_UNLINK
+_GL_WARN_ON_USE (unlink, "unlink is not portable - "
+                 "use gnulib module unlink for portability");
+# endif
+#endif
+
+
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlinkat
+#   define unlinkat rpl_unlinkat
+#  endif
+_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag));
+# endif
+_GL_CXXALIASWARN (unlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef unlinkat
+# if HAVE_RAW_DECL_UNLINKAT
+_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if 0
+/* Pause the execution of the current thread for N microseconds.
+   Returns 0 on completion, or -1 on range error.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/usleep.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef usleep
+#   define usleep rpl_usleep
+#  endif
+_GL_FUNCDECL_RPL (usleep, int, (useconds_t n));
+_GL_CXXALIAS_RPL (usleep, int, (useconds_t n));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (usleep, int, (useconds_t n));
+#  endif
+_GL_CXXALIAS_SYS (usleep, int, (useconds_t n));
+# endif
+_GL_CXXALIASWARN (usleep);
+#elif defined GNULIB_POSIXCHECK
+# undef usleep
+# if HAVE_RAW_DECL_USLEEP
+_GL_WARN_ON_USE (usleep, "usleep is unportable - "
+                 "use gnulib module usleep for portability");
+# endif
+#endif
+
+
+#if 0
+/* Write up to COUNT bytes starting at BUF to file descriptor FD.
+   See the POSIX:2008 specification
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>.  */
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef write
+#   define write rpl_write
+#  endif
+_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count));
+# else
+/* Need to cast, because on mingw, the third parameter is
+                                                             unsigned int count
+   and the return type is 'int'.  */
+_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (write);
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_UNISTD_H */
+#endif /* _GL_UNISTD_H */
diff --git a/linux-lib/unitypes.h b/linux-lib/unitypes.h
new file mode 100644
index 0000000..b85b07a
--- /dev/null
+++ b/linux-lib/unitypes.h
@@ -0,0 +1,47 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Elementary types and macros for the GNU UniString library.
+   Copyright (C) 2002, 2005-2006, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNITYPES_H
+#define _UNITYPES_H
+
+/* Get uint8_t, uint16_t, uint32_t.  */
+#include <stdint.h>
+
+/* Type representing a Unicode character.  */
+typedef uint32_t ucs4_t;
+
+/* Attribute of a function whose result depends only on the arguments
+   (not pointers!) and which has no side effects.  */
+#ifndef _UC_ATTRIBUTE_CONST
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+#  define _UC_ATTRIBUTE_CONST __attribute__ ((__const__))
+# else
+#  define _UC_ATTRIBUTE_CONST
+# endif
+#endif
+
+/* Attribute of a function whose result depends only on the arguments
+   (possibly pointers) and global memory, and which has no side effects.  */
+#ifndef _UC_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define _UC_ATTRIBUTE_PURE
+# endif
+#endif
+
+#endif /* _UNITYPES_H */
diff --git a/linux-lib/uniwidth.h b/linux-lib/uniwidth.h
new file mode 100644
index 0000000..c6466b2
--- /dev/null
+++ b/linux-lib/uniwidth.h
@@ -0,0 +1,73 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Display width functions.
+   Copyright (C) 2001-2002, 2005, 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNIWIDTH_H
+#define _UNIWIDTH_H
+
+#include "unitypes.h"
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get locale_charset() declaration.  */
+#include "localcharset.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Display width.  */
+
+/* These functions are locale dependent.  The encoding argument identifies
+   the encoding (e.g. "ISO-8859-2" for Polish).  */
+
+/* Determine number of column positions required for UC.  */
+extern int
+       uc_width (ucs4_t uc, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+/* Determine number of column positions required for first N units
+   (or fewer if S ends before this) in S.  */
+extern int
+       u8_width (const uint8_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u16_width (const uint16_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u32_width (const uint32_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+/* Determine number of column positions required for S.  */
+extern int
+       u8_strwidth (const uint8_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u16_strwidth (const uint16_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u32_strwidth (const uint32_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNIWIDTH_H */
diff --git a/linux-lib/warn-on-use.h b/linux-lib/warn-on-use.h
new file mode 100644
index 0000000..9aebda4
--- /dev/null
+++ b/linux-lib/warn-on-use.h
@@ -0,0 +1,46 @@
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
diff --git a/linux-lib/wchar.h b/linux-lib/wchar.h
new file mode 100644
index 0000000..54631a3
--- /dev/null
+++ b/linux-lib/wchar.h
@@ -0,0 +1,1340 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+   Copyright (C) 2007-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
+/* Special invocation convention:
+   - Inside glibc and uClibc header files.
+   - On HP-UX 11.00 we have a sequence of nested includes
+     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+     and once directly.  In both situations 'wint_t' is not yet defined,
+     therefore we cannot provide the function overrides; instead include only
+     the system's <wchar.h>.
+   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+     the latter includes <wchar.h>.  But here, we have no way to detect whether
+     <wctype.h> is completely included or is still being included.  */
+
+#include_next <wchar.h>
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+#if 1
+# include <features.h> /* for __GLIBC__ */
+#endif
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.
+   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
+   by <stddef.h>.
+   But avoid namespace pollution on glibc systems.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+#endif
+#ifndef __GLIBC__
+# include <stdio.h>
+# include <time.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <wchar.h>
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _GL_WCHAR_H
+#define _GL_WCHAR_H
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+
+/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
+#if !1 && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
+   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
+   "unchanged by default argument promotions".  Override it.  */
+# if defined _MSC_VER
+#  if !GNULIB_defined_wint_t
+#   include <crtdefs.h>
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+   implementing mbrtowc for encodings like UTF-8.  */
+#if !(1 && 1) || 0
+# if !GNULIB_defined_mbstate_t
+typedef int rpl_mbstate_t;
+#  undef mbstate_t
+#  define mbstate_t rpl_mbstate_t
+#  define GNULIB_defined_mbstate_t 1
+# endif
+#endif
+
+
+/* Convert a single-byte character to a wide character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef btowc
+#   define btowc rpl_btowc
+#  endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+# endif
+_GL_CXXALIASWARN (btowc);
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+                 "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctob
+#   define wctob rpl_wctob
+#  endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+#  if !defined wctob && !1
+/* wctob is provided by gnulib, or wctob exists but is not declared.  */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (wctob);
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+                 "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsinit
+#   define mbsinit rpl_mbsinit
+#  endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsinit);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+                 "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrtowc
+#   define mbrtowc rpl_mbrtowc
+#  endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrtowc);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+                 "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrlen
+#   define mbrlen rpl_mbrlen
+#  endif
+_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrlen);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+                 "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsrtowcs
+#   define mbsrtowcs rpl_mbsrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+                 "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsnrtowcs
+#   define mbsnrtowcs rpl_mbsnrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsnrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+                 "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcrtomb
+#   define wcrtomb rpl_wcrtomb
+#  endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcrtomb);
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+                 "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsrtombs
+#   define wcsrtombs rpl_wcsrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+                 "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsnrtombs
+#   define wcsnrtombs rpl_wcsnrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsnrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+                 "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC.  */
+#if 1
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcwidth
+#   define wcwidth rpl_wcwidth
+#  endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+#  if !1
+/* wcwidth exists but is not declared.  */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+_GL_CXXALIASWARN (wcwidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+                 "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+/* Search N wide characters of S for C.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
+         wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wmemchr,
+                        wchar_t *, (const wchar_t *, wchar_t, size_t),
+                        const wchar_t *, (const wchar_t *, wchar_t, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
+                   (const wchar_t *s, wchar_t c, size_t n));
+# else
+_GL_CXXALIASWARN (wmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemchr
+# if HAVE_RAW_DECL_WMEMCHR
+_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
+                 "use gnulib module wmemchr for portability");
+# endif
+#endif
+
+
+/* Compare N wide characters of S1 and S2.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wmemcmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcmp
+# if HAVE_RAW_DECL_WMEMCMP
+_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
+                 "use gnulib module wmemcmp for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcpy
+# if HAVE_RAW_DECL_WMEMCPY
+_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
+                 "use gnulib module wmemcpy for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
+   overlapping memory areas.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemmove);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemmove
+# if HAVE_RAW_DECL_WMEMMOVE
+_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
+                 "use gnulib module wmemmove for portability");
+# endif
+#endif
+
+
+/* Set N wide characters of S to C.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN (wmemset);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemset
+# if HAVE_RAW_DECL_WMEMSET
+_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
+                 "use gnulib module wmemset for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
+_GL_CXXALIASWARN (wcslen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcslen
+# if HAVE_RAW_DECL_WCSLEN
+_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
+                 "use gnulib module wcslen for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S, but at most MAXLEN.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
+_GL_CXXALIASWARN (wcsnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnlen
+# if HAVE_RAW_DECL_WCSNLEN
+_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
+                 "use gnulib module wcsnlen for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscpy
+# if HAVE_RAW_DECL_WCSCPY
+_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
+                 "use gnulib module wcscpy for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpcpy
+# if HAVE_RAW_DECL_WCPCPY
+_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
+                 "use gnulib module wcpcpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N wide characters of SRC to DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncpy
+# if HAVE_RAW_DECL_WCSNCPY
+_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
+                 "use gnulib module wcsncpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpncpy
+# if HAVE_RAW_DECL_WCPNCPY
+_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
+                 "use gnulib module wcpncpy for portability");
+# endif
+#endif
+
+
+/* Append SRC onto DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscat
+# if HAVE_RAW_DECL_WCSCAT
+_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
+                 "use gnulib module wcscat for portability");
+# endif
+#endif
+
+
+/* Append no more than N wide characters of SRC onto DEST.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncat
+# if HAVE_RAW_DECL_WCSNCAT
+_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
+                 "use gnulib module wcsncat for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
+                               _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscmp
+# if HAVE_RAW_DECL_WCSCMP
+_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
+                 "use gnulib module wcscmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N wide characters of S1 and S2.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncmp
+# if HAVE_RAW_DECL_WCSNCMP
+_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
+                 "use gnulib module wcsncmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, ignoring case.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscasecmp
+# if HAVE_RAW_DECL_WCSCASECMP
+_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
+                 "use gnulib module wcscasecmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncasecmp
+# if HAVE_RAW_DECL_WCSNCASECMP
+_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
+                 "use gnulib module wcsncasecmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
+   category of the current locale.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+# endif
+_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscoll);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscoll
+# if HAVE_RAW_DECL_WCSCOLL
+_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
+                 "use gnulib module wcscoll for portability");
+# endif
+#endif
+
+
+/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
+   to two transformed strings the result is the as applying 'wcscoll' to the
+   original strings.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsxfrm);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsxfrm
+# if HAVE_RAW_DECL_WCSXFRM
+_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
+                 "use gnulib module wcsxfrm for portability");
+# endif
+#endif
+
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# endif
+_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+_GL_CXXALIASWARN (wcsdup);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsdup
+# if HAVE_RAW_DECL_WCSDUP
+_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
+                 "use gnulib module wcsdup for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of WC in WCS.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                     _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcschr (const wchar_t *, wchar_t);
+         wchar_t * std::wcschr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcschr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcschr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcschr
+# if HAVE_RAW_DECL_WCSCHR
+_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
+                 "use gnulib module wcschr for portability");
+# endif
+#endif
+
+
+/* Find the last occurrence of WC in WCS.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
+         wchar_t * std::wcsrchr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcsrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrchr
+# if HAVE_RAW_DECL_WCSRCHR
+_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
+                 "use gnulib module wcsrchr for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters not in REJECT.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
+_GL_CXXALIASWARN (wcscspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscspn
+# if HAVE_RAW_DECL_WCSCSPN
+_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
+                 "use gnulib module wcscspn for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters in ACCEPT.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
+                                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN (wcsspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsspn
+# if HAVE_RAW_DECL_WCSSPN
+_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
+                 "use gnulib module wcsspn for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence in WCS of any character in ACCEPT.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
+                  (const wchar_t *wcs, const wchar_t *accept)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
+                   (wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
+                   (const wchar_t *wcs, const wchar_t *accept));
+# else
+_GL_CXXALIASWARN (wcspbrk);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcspbrk
+# if HAVE_RAW_DECL_WCSPBRK
+_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
+                 "use gnulib module wcspbrk for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
+                  (const wchar_t *haystack, const wchar_t *needle)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsstr,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
+                   (wchar_t *haystack, const wchar_t *needle));
+_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
+                   (const wchar_t *haystack, const wchar_t *needle));
+# else
+_GL_CXXALIASWARN (wcsstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsstr
+# if HAVE_RAW_DECL_WCSSTR
+_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
+                 "use gnulib module wcsstr for portability");
+# endif
+#endif
+
+
+/* Divide WCS into tokens separated by characters in DELIM.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+# endif
+_GL_CXXALIAS_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+_GL_CXXALIASWARN (wcstok);
+#elif defined GNULIB_POSIXCHECK
+# undef wcstok
+# if HAVE_RAW_DECL_WCSTOK
+_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
+                 "use gnulib module wcstok for portability");
+# endif
+#endif
+
+
+/* Determine number of column positions required for first N wide
+   characters (or fewer if S ends before this) in S.  */
+#if 0
+# if 0
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcswidth
+#   define wcswidth rpl_wcswidth
+#  endif
+_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
+# else
+#  if !1
+_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
+# endif
+_GL_CXXALIASWARN (wcswidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcswidth
+# if HAVE_RAW_DECL_WCSWIDTH
+_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
+                 "use gnulib module wcswidth for portability");
+# endif
+#endif
+
+
+#endif /* _GL_WCHAR_H */
+#endif /* _GL_WCHAR_H */
+#endif
diff --git a/linux-lib/wctype.h b/linux-lib/wctype.h
new file mode 100644
index 0000000..196e4ea
--- /dev/null
+++ b/linux-lib/wctype.h
@@ -0,0 +1,806 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
+
+   Copyright (C) 2006-2012 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible and Paul Eggert.  */
+
+/*
+ * ISO C 99 <wctype.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/wctype.h.html>
+ *
+ * iswctype, towctrans, towlower, towupper, wctrans, wctype,
+ * wctrans_t, and wctype_t are not yet implemented.
+ */
+
+#ifndef _GL_WCTYPE_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if 1
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
+   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+
+/* Include the original <wctype.h> if it exists.
+   BeOS 5 has the functions but no <wctype.h>.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if 1
+# include_next <wctype.h>
+#endif
+
+#ifndef _GL_WCTYPE_H
+#define _GL_WCTYPE_H
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_WCTYPE_INLINE
+# define _GL_WCTYPE_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
+   #defines a number of identifiers in the application namespace.  Revert
+   these #defines.  */
+#ifdef __sun
+# undef multibyte
+# undef eucw1
+# undef eucw2
+# undef eucw3
+# undef scrw1
+# undef scrw2
+# undef scrw3
+#endif
+
+/* Define wint_t and WEOF.  (Also done in wchar.in.h.)  */
+#if !1 && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
+   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
+   "unchanged by default argument promotions".  Override it.  */
+# if defined _MSC_VER
+#  if !GNULIB_defined_wint_t
+#   include <crtdefs.h>
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+#if !GNULIB_defined_wctype_functions
+
+/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
+   Linux libc5 has <wctype.h> and the functions but they are broken.
+   Assume all 11 functions (all isw* except iswblank) are implemented the
+   same way, or not at all.  */
+# if ! 1 || 0
+
+/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
+   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
+   refer to system functions like _iswctype that are not in the
+   standard C library.  Rather than try to get ancient buggy
+   implementations like this to work, just disable them.  */
+#  undef iswalnum
+#  undef iswalpha
+#  undef iswblank
+#  undef iswcntrl
+#  undef iswdigit
+#  undef iswgraph
+#  undef iswlower
+#  undef iswprint
+#  undef iswpunct
+#  undef iswspace
+#  undef iswupper
+#  undef iswxdigit
+#  undef towlower
+#  undef towupper
+
+/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
+#  if 0
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswalnum rpl_iswalnum
+#    define iswalpha rpl_iswalpha
+#    define iswblank rpl_iswblank
+#    define iswcntrl rpl_iswcntrl
+#    define iswdigit rpl_iswdigit
+#    define iswgraph rpl_iswgraph
+#    define iswlower rpl_iswlower
+#    define iswprint rpl_iswprint
+#    define iswpunct rpl_iswpunct
+#    define iswspace rpl_iswspace
+#    define iswupper rpl_iswupper
+#    define iswxdigit rpl_iswxdigit
+#   endif
+#  endif
+#  if 0
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define towlower rpl_towlower
+#    define towupper rpl_towupper
+#   endif
+#  endif
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswalnum
+#  else
+iswalnum
+#  endif
+         (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswalpha
+#  else
+iswalpha
+#  endif
+         (wint_t wc)
+{
+  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswblank
+#  else
+iswblank
+#  endif
+         (wint_t wc)
+{
+  return wc == ' ' || wc == '\t';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswcntrl
+#  else
+iswcntrl
+#  endif
+        (wint_t wc)
+{
+  return (wc & ~0x1f) == 0 || wc == 0x7f;
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswdigit
+#  else
+iswdigit
+#  endif
+         (wint_t wc)
+{
+  return wc >= '0' && wc <= '9';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswgraph
+#  else
+iswgraph
+#  endif
+         (wint_t wc)
+{
+  return wc >= '!' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswlower
+#  else
+iswlower
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'a' && wc <= 'z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswprint
+#  else
+iswprint
+#  endif
+         (wint_t wc)
+{
+  return wc >= ' ' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswpunct
+#  else
+iswpunct
+#  endif
+         (wint_t wc)
+{
+  return (wc >= '!' && wc <= '~'
+          && !((wc >= '0' && wc <= '9')
+               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswspace
+#  else
+iswspace
+#  endif
+         (wint_t wc)
+{
+  return (wc == ' ' || wc == '\t'
+          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswupper
+#  else
+iswupper
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'A' && wc <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if 0
+rpl_iswxdigit
+#  else
+iswxdigit
+#  endif
+          (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
+}
+
+_GL_WCTYPE_INLINE wint_t
+#  if 0
+rpl_towlower
+#  else
+towlower
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
+}
+
+_GL_WCTYPE_INLINE wint_t
+#  if 0
+rpl_towupper
+#  else
+towupper
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
+}
+
+# elif 1 && (! 1 || 0)
+/* Only the iswblank function is missing.  */
+
+#  if 0
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswblank rpl_iswblank
+#   endif
+_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
+#  else
+_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
+#  endif
+
+# endif
+
+# if defined __MINGW32__
+
+/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
+   The functions towlower and towupper are implemented in the MSVCRT library
+   to take a wchar_t argument and return a wchar_t result.  mingw declares
+   these functions to take a wint_t argument and return a wint_t result.
+   This means that:
+   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
+      function will look only at the lower 16 bits.  This is allowed according
+      to POSIX.
+   2. The return value is returned in the lower 16 bits of the result register.
+      The upper 16 bits are random: whatever happened to be in that part of the
+      result register.  We need to fix this by adding a zero-extend from
+      wchar_t to wint_t after the call.  */
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towlower (wint_t wc)
+{
+  return (wint_t) (wchar_t) towlower (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towlower rpl_towlower
+#  endif
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towupper (wint_t wc)
+{
+  return (wint_t) (wchar_t) towupper (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towupper rpl_towupper
+#  endif
+
+# endif /* __MINGW32__ */
+
+# define GNULIB_defined_wctype_functions 1
+#endif
+
+#if 0
+_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (iswalnum);
+_GL_CXXALIASWARN (iswalpha);
+_GL_CXXALIASWARN (iswcntrl);
+_GL_CXXALIASWARN (iswdigit);
+_GL_CXXALIASWARN (iswgraph);
+_GL_CXXALIASWARN (iswlower);
+_GL_CXXALIASWARN (iswprint);
+_GL_CXXALIASWARN (iswpunct);
+_GL_CXXALIASWARN (iswspace);
+_GL_CXXALIASWARN (iswupper);
+_GL_CXXALIASWARN (iswxdigit);
+
+#if 1
+# if 0 || 0
+_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
+# else
+_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (iswblank);
+#endif
+
+#if !1
+# if !GNULIB_defined_wctype_t
+typedef void * wctype_t;
+#  define GNULIB_defined_wctype_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character property.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
+_GL_CXXALIASWARN (wctype);
+#elif defined GNULIB_POSIXCHECK
+# undef wctype
+# if HAVE_RAW_DECL_WCTYPE
+_GL_WARN_ON_USE (wctype, "wctype is unportable - "
+                 "use gnulib module wctype for portability");
+# endif
+#endif
+
+/* Test whether a wide character has a given property.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctype() function.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+# endif
+_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+_GL_CXXALIASWARN (iswctype);
+#elif defined GNULIB_POSIXCHECK
+# undef iswctype
+# if HAVE_RAW_DECL_ISWCTYPE
+_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
+                 "use gnulib module iswctype for portability");
+# endif
+#endif
+
+#if 0 || defined __MINGW32__
+_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (towlower);
+_GL_CXXALIASWARN (towupper);
+
+#if !1
+# if !GNULIB_defined_wctrans_t
+typedef void * wctrans_t;
+#  define GNULIB_defined_wctrans_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character case conversion.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
+_GL_CXXALIASWARN (wctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef wctrans
+# if HAVE_RAW_DECL_WCTRANS
+_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
+                 "use gnulib module wctrans for portability");
+# endif
+#endif
+
+/* Perform a given case conversion on a wide character.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctrans() function.  */
+#if 0
+# if !1
+_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+# endif
+_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+_GL_CXXALIASWARN (towctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef towctrans
+# if HAVE_RAW_DECL_TOWCTRANS
+_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
+                 "use gnulib module towctrans for portability");
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_WCTYPE_H */
+#endif /* _GL_WCTYPE_H */
diff --git a/m4/00gnulib.m4 b/m4/00gnulib.m4
new file mode 100644
index 0000000..d978cb8
--- /dev/null
+++ b/m4/00gnulib.m4
@@ -0,0 +1,30 @@
+# 00gnulib.m4 serial 2
+dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This file must be named something that sorts before all other
+dnl gnulib-provided .m4 files.  It is needed until such time as we can
+dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics.
+
+# AC_DEFUN_ONCE([NAME], VALUE)
+# ----------------------------
+# Define NAME to expand to VALUE on the first use (whether by direct
+# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses.
+# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier.  This
+# definition is slower than the version in Autoconf 2.64, because it
+# can only use interfaces that existed since 2.59; but it achieves the
+# same effect.  Quoting is necessary to avoid confusing Automake.
+m4_version_prereq([2.63.263], [],
+[m4_define([AC][_DEFUN_ONCE],
+  [AC][_DEFUN([$1],
+    [AC_REQUIRE([_gl_DEFUN_ONCE([$1])],
+      [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl
+[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])])
+
+# gl_00GNULIB
+# -----------
+# Witness macro that this file has been included.  Needed to force
+# Automake to include this file prior to all other gnulib .m4 files.
+AC_DEFUN([gl_00GNULIB])
diff --git a/m4/alloca.m4 b/m4/alloca.m4
new file mode 100644
index 0000000..656924b
--- /dev/null
+++ b/m4/alloca.m4
@@ -0,0 +1,121 @@
+# alloca.m4 serial 14
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ALLOCA],
+[
+  AC_REQUIRE([AC_FUNC_ALLOCA])
+  if test $ac_cv_func_alloca_works = no; then
+    gl_PREREQ_ALLOCA
+  fi
+
+  # Define an additional variable used in the Makefile substitution.
+  if test $ac_cv_working_alloca_h = yes; then
+    AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [
+      AC_EGREP_CPP([Need own alloca], [
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+        Need own alloca
+#endif
+        ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no])
+    ])
+    if test $gl_cv_rpl_alloca = yes; then
+      dnl OK, alloca can be implemented through a compiler built-in.
+      AC_DEFINE([HAVE_ALLOCA], [1],
+        [Define to 1 if you have 'alloca' after including <alloca.h>,
+         a header that may be supplied by this distribution.])
+      ALLOCA_H=alloca.h
+    else
+      dnl alloca exists as a library function, i.e. it is slow and probably
+      dnl a memory leak. Don't define HAVE_ALLOCA in this case.
+      ALLOCA_H=
+    fi
+  else
+    ALLOCA_H=alloca.h
+  fi
+  AC_SUBST([ALLOCA_H])
+  AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"])
+])
+
+# Prerequisites of lib/alloca.c.
+# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA.
+AC_DEFUN([gl_PREREQ_ALLOCA], [:])
+
+# This works around a bug in autoconf <= 2.68.
+# See <http://lists.gnu.org/archive/html/bug-gnulib/2011-06/msg00277.html>.
+
+m4_version_prereq([2.69], [] ,[
+
+# This is taken from the following Autoconf patch:
+# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497
+
+# _AC_LIBOBJ_ALLOCA
+# -----------------
+# Set up the LIBOBJ replacement of 'alloca'.  Well, not exactly
+# AC_LIBOBJ since we actually set the output variable 'ALLOCA'.
+# Nevertheless, for Automake, AC_LIBSOURCES it.
+m4_define([_AC_LIBOBJ_ALLOCA],
+[# The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+AC_LIBSOURCES(alloca.c)
+AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl
+AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.])
+
+AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray,
+[AC_EGREP_CPP(webecray,
+[#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+], ac_cv_os_cray=yes, ac_cv_os_cray=no)])
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    AC_CHECK_FUNC($ac_func,
+                  [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func,
+                                      [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.])
+    break])
+  done
+fi
+
+AC_CACHE_CHECK([stack direction for C alloca],
+               [ac_cv_c_stack_direction],
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[AC_INCLUDES_DEFAULT
+int
+find_stack_direction (int *addr, int depth)
+{
+  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;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}])],
+               [ac_cv_c_stack_direction=1],
+               [ac_cv_c_stack_direction=-1],
+               [ac_cv_c_stack_direction=0])])
+AH_VERBATIM([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])dnl
+AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+])# _AC_LIBOBJ_ALLOCA
+])
diff --git a/m4/asm-underscore.m4 b/m4/asm-underscore.m4
new file mode 100644
index 0000000..478aa03
--- /dev/null
+++ b/m4/asm-underscore.m4
@@ -0,0 +1,71 @@
+# asm-underscore.m4 serial 2
+dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp.
+
+# gl_ASM_SYMBOL_PREFIX
+# Tests for the prefix of C symbols at the assembly language level and the
+# linker level. This prefix is either an underscore or empty. Defines the
+# C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to
+# a stringified variant of this prefix.
+
+AC_DEFUN([gl_ASM_SYMBOL_PREFIX],
+[
+  dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because
+  dnl 1. It works only for GCC.
+  dnl 2. It is incorrectly defined on some platforms, in some GCC versions.
+  AC_REQUIRE([gl_C_ASM])
+  AC_CACHE_CHECK(
+    [whether C symbols are prefixed with underscore at the linker level],
+    [gl_cv_prog_as_underscore],
+    [cat > conftest.c <<EOF
+#ifdef __cplusplus
+extern "C" int foo (void);
+#endif
+int foo(void) { return 0; }
+EOF
+     # Look for the assembly language name in the .s file.
+     AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
+     if grep _foo conftest.$gl_asmext >/dev/null ; then
+       gl_cv_prog_as_underscore=yes
+     else
+       gl_cv_prog_as_underscore=no
+     fi
+     rm -f conftest*
+    ])
+  if test $gl_cv_prog_as_underscore = yes; then
+    USER_LABEL_PREFIX=_
+  else
+    USER_LABEL_PREFIX=
+  fi
+  AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX],
+    [Define to the prefix of C symbols at the assembler and linker level,
+     either an underscore or empty.])
+  ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"'
+  AC_SUBST([ASM_SYMBOL_PREFIX])
+])
+
+# gl_C_ASM
+# Determines how to produce an assembly language file from C source code.
+# Sets the variables:
+#   gl_asmext - the extension of assembly language output,
+#   gl_c_asm_opt - the C compiler option that produces assembly language output.
+
+AC_DEFUN([gl_C_ASM],
+[
+  AC_EGREP_CPP([MicrosoftCompiler],
+    [
+#ifdef _MSC_VER
+MicrosoftCompiler
+#endif
+    ],
+    [gl_asmext='asm'
+     gl_c_asm_opt='-c -Fa'
+    ],
+    [gl_asmext='s'
+     gl_c_asm_opt='-S'
+    ])
+])
diff --git a/m4/assert.m4 b/m4/assert.m4
new file mode 100644
index 0000000..b748e5e
--- /dev/null
+++ b/m4/assert.m4
@@ -0,0 +1,24 @@
+#serial 7
+
+# Copyright (C) 1998-1999, 2001, 2004, 2008-2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl based on code from Eleftherios Gkioulekas
+dnl Autoconf 2.60 provides AC_HEADER_ASSERT for the same purpose, but
+dnl it has broken semantics for --enable-assert until 2.64.
+AC_DEFUN([gl_ASSERT],
+[
+  AC_MSG_CHECKING([whether to enable assertions])
+  AC_ARG_ENABLE([assert],
+    [AS_HELP_STRING([--disable-assert], [turn off assertions])],
+    [AS_IF([test "x$enableval" = xno],
+      [AC_DEFINE([NDEBUG], [1],
+        [Define to 1 if assertions should be disabled.])],
+      [test "x$enableval" != xyes],
+      [AC_MSG_WARN([invalid argument supplied to --enable-assert])
+      enable_assert=yes])],
+    [enable_assert=yes])
+  AC_MSG_RESULT([$enable_assert])
+])
diff --git a/m4/bison-i18n.m4 b/m4/bison-i18n.m4
index 2fe6c60..208cb56 100644
--- a/m4/bison-i18n.m4
+++ b/m4/bison-i18n.m4
@@ -1,5 +1,7 @@
-# bison-i18n.m4 serial 1 (bison-2.1)
-dnl Copyright (C) 2005 Free Software Foundation, Inc.
+# bison-i18n.m4 serial 2
+
+dnl Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -19,38 +21,27 @@
     exit 1
   fi
   BISON_LOCALEDIR=
+  BISON_USE_NLS=no
   if test "$USE_NLS" = yes; then
+    dnl Determine bison's localedir.
     dnl AC_PROG_YACC sets the YACC variable; other macros set the BISON variable.
-    if test -n "$YACC"; then
-      case "$YACC" in
-        *bison*)
-          if ($YACC --print-localedir) >/dev/null 2>&1; then
-            BISON_LOCALEDIR=`$YACC --print-localedir`
-          fi
-          ;;
-      esac
-    else
-      if test -n "$BISON"; then
-        if test "$BISON" != ":"; then
-          if ($BISON --print-localedir) >/dev/null 2>&1; then
-            BISON_LOCALEDIR=`$BISON --print-localedir`
-          fi
-        fi
-      fi
+    dnl But even is YACC is called "yacc", it may be a script that invokes bison
+    dnl and accepts the --print-localedir option.
+    dnl YACC's default value is empty; BISON's default value is :.
+    if (${YACC-${BISON-:}} --print-localedir) >/dev/null 2>&1; then
+      BISON_LOCALEDIR=`${YACC-${BISON-:}} --print-localedir`
     fi
     AC_SUBST([BISON_LOCALEDIR])
     if test -n "$BISON_LOCALEDIR"; then
+      dnl There is no need to enable internationalization if the user doesn't
+      dnl want message catalogs.  So look at the language/locale names for
+      dnl which the user wants message catalogs.  This is $LINGUAS.  If unset
+      dnl or empty, he wants all of them.
       USER_LINGUAS="${LINGUAS-%UNSET%}"
       if test -n "$USER_LINGUAS"; then
         BISON_USE_NLS=yes
-      else
-        BISON_USE_NLS=no
       fi
-    else
-      BISON_USE_NLS=no
     fi
-  else
-    BISON_USE_NLS=no
   fi
   if test $BISON_USE_NLS = yes; then
     AC_DEFINE([YYENABLE_NLS], 1,
diff --git a/m4/c-working.m4 b/m4/c-working.m4
index ec74035..de1a4c5 100644
--- a/m4/c-working.m4
+++ b/m4/c-working.m4
@@ -1,10 +1,10 @@
 # Sanity test a C compiler.
 
-# Copyright (C) 2006 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
 #
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -13,9 +13,7 @@
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Written by Paul Eggert.
 
@@ -26,4 +24,56 @@
 	 int test_array[CHAR_BIT];]])],
     [],
     [AC_MSG_FAILURE([cannot compile a simple C program])])
+   AC_SUBST([BISON_C_WORKS], [:])
+])
+
+# BISON_CHECK_WITH_POSIXLY_CORRECT(CODE)
+# --------------------------------------
+# Run the Autoconf CODE with POSIXLY_CORRECT set to 1, and restored to
+# its initial value afterwards.
+AC_DEFUN([BISON_CHECK_WITH_POSIXLY_CORRECT],
+[gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }'
+case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in
+  xx) gl_had_POSIXLY_CORRECT=exported ;;
+  x)  gl_had_POSIXLY_CORRECT=yes      ;;
+  *)  gl_had_POSIXLY_CORRECT=         ;;
+esac
+POSIXLY_CORRECT=1
+export POSIXLY_CORRECT
+$1
+case $gl_had_POSIXLY_CORRECT in
+  exported) ;;
+  yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;;
+  *) AS_UNSET([POSIXLY_CORRECT]) ;;
+esac
+])
+
+# BISON_LANG_COMPILER_POSIXLY_CORRECT
+# -----------------------------------
+# Whether the compiler for the current language supports -g in
+# POSIXLY_CORRECT mode.  clang-2.9 on OS X does not, because
+# "clang-mp-2.9 -o test -g test.c" launches "/usr/bin/dsymutil test -o
+# test.dSYM" which fails with "error: unable to open executable '-o'".
+#
+# Sets <LANG>_COMPILER_POSIXLY_CORRECT to true/false.
+AC_DEFUN([BISON_LANG_COMPILER_POSIXLY_CORRECT],
+[AC_CACHE_CHECK([whether $_AC_CC supports POSIXLY_CORRECT=1],
+                [bison_cv_[]_AC_LANG_ABBREV[]_supports_posixly_correct],
+[BISON_CHECK_WITH_POSIXLY_CORRECT(
+[AC_LINK_IFELSE([AC_LANG_PROGRAM],
+                [bison_cv_[]_AC_LANG_ABBREV[]_supports_posixly_correct=yes],
+                [bison_cv_[]_AC_LANG_ABBREV[]_supports_posixly_correct=no])])])
+case $bison_cv_[]_AC_LANG_ABBREV[]_supports_posixly_correct in
+  yes) AC_SUBST(_AC_LANG_PREFIX[_COMPILER_POSIXLY_CORRECT], [true]) ;;
+  no)  AC_SUBST(_AC_LANG_PREFIX[_COMPILER_POSIXLY_CORRECT], [false]);;
+esac
+])
+
+# BISON_C_COMPILER_POSIXLY_CORRECT
+# --------------------------------
+# Whether the C compiler supports -g in POSIXLY_CORRECT mode.
+AC_DEFUN([BISON_C_COMPILER_POSIXLY_CORRECT],
+[AC_LANG_PUSH([C])
+BISON_LANG_COMPILER_POSIXLY_CORRECT
+AC_LANG_POP([C])
 ])
diff --git a/m4/calloc.m4 b/m4/calloc.m4
new file mode 100644
index 0000000..00c5fe4
--- /dev/null
+++ b/m4/calloc.m4
@@ -0,0 +1,85 @@
+# calloc.m4 serial 15
+
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Jim Meyering.
+
+# Determine whether calloc (N, S) returns non-NULL when N*S is zero,
+# and returns NULL when N*S overflows.
+# If so, define HAVE_CALLOC.  Otherwise, define calloc to rpl_calloc
+# and arrange to use a calloc wrapper function that does work in that case.
+
+# _AC_FUNC_CALLOC_IF([IF-WORKS], [IF-NOT])
+# -------------------------------------
+# If 'calloc (0, 0)' is properly handled, run IF-WORKS, otherwise, IF-NOT.
+AC_DEFUN([_AC_FUNC_CALLOC_IF],
+[
+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([for GNU libc compatible calloc],
+    [ac_cv_func_calloc_0_nonnull],
+    [AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [AC_INCLUDES_DEFAULT],
+          [[int result = 0;
+            if (!calloc (0, 0))
+              result |= 1;
+            if (calloc ((size_t) -1 / 8 + 1, 8))
+              result |= 2;
+            return result;
+          ]])],
+       [ac_cv_func_calloc_0_nonnull=yes],
+       [ac_cv_func_calloc_0_nonnull=no],
+       [case "$host_os" in
+                  # Guess yes on glibc systems.
+          *-gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+                  # If we don't know, assume the worst.
+          *)      ac_cv_func_calloc_0_nonnull="guessing no" ;;
+        esac
+       ])])
+  case "$ac_cv_func_calloc_0_nonnull" in
+    *yes)
+      $1
+      ;;
+    *)
+      $2
+      ;;
+  esac
+])# AC_FUNC_CALLOC
+
+
+# gl_FUNC_CALLOC_GNU
+# ------------------
+# Report whether 'calloc (0, 0)' is properly handled, and replace calloc if
+# needed.
+AC_DEFUN([gl_FUNC_CALLOC_GNU],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  _AC_FUNC_CALLOC_IF(
+    [AC_DEFINE([HAVE_CALLOC_GNU], [1],
+               [Define to 1 if your system has a GNU libc compatible 'calloc'
+                function, and to 0 otherwise.])],
+    [AC_DEFINE([HAVE_CALLOC_GNU], [0])
+     REPLACE_CALLOC=1
+    ])
+])# gl_FUNC_CALLOC_GNU
+
+
+# gl_FUNC_CALLOC_POSIX
+# --------------------
+# Test whether 'calloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails), and replace calloc if it is not.
+AC_DEFUN([gl_FUNC_CALLOC_POSIX],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+  if test $gl_cv_func_malloc_posix = yes; then
+    AC_DEFINE([HAVE_CALLOC_POSIX], [1],
+      [Define if the 'calloc' function is POSIX compliant.])
+  else
+    REPLACE_CALLOC=1
+  fi
+])
diff --git a/m4/close-stream.m4 b/m4/close-stream.m4
new file mode 100644
index 0000000..be0c8a2
--- /dev/null
+++ b/m4/close-stream.m4
@@ -0,0 +1,11 @@
+#serial 4
+dnl Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Prerequisites of lib/close-stream.c.
+AC_DEFUN([gl_CLOSE_STREAM],
+[
+  :
+])
diff --git a/m4/close.m4 b/m4/close.m4
new file mode 100644
index 0000000..379e70d
--- /dev/null
+++ b/m4/close.m4
@@ -0,0 +1,33 @@
+# close.m4 serial 8
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_CLOSE],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([gl_MSVC_INVAL])
+  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+    REPLACE_CLOSE=1
+  fi
+  m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [
+    gl_PREREQ_SYS_H_WINSOCK2
+    if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then
+      dnl Even if the 'socket' module is not used here, another part of the
+      dnl application may use it and pass file descriptors that refer to
+      dnl sockets to the close() function. So enable the support for sockets.
+      REPLACE_CLOSE=1
+    fi
+  ])
+  dnl Replace close() for supporting the gnulib-defined fchdir() function,
+  dnl to keep fchdir's bookkeeping up-to-date.
+  m4_ifdef([gl_FUNC_FCHDIR], [
+    if test $REPLACE_CLOSE = 0; then
+      gl_TEST_FCHDIR
+      if test $HAVE_FCHDIR = 0; then
+        REPLACE_CLOSE=1
+      fi
+    fi
+  ])
+])
diff --git a/m4/closeout.m4 b/m4/closeout.m4
new file mode 100644
index 0000000..71395c1
--- /dev/null
+++ b/m4/closeout.m4
@@ -0,0 +1,12 @@
+# closeout.m4 serial 6
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Prerequisites of lib/closeout.c.
+AC_DEFUN([gl_CLOSEOUT],
+[
+  :
+])
diff --git a/m4/codeset.m4 b/m4/codeset.m4
new file mode 100644
index 0000000..cf53d24
--- /dev/null
+++ b/m4/codeset.m4
@@ -0,0 +1,23 @@
+# codeset.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <langinfo.h>]],
+          [[char* cs = nl_langinfo(CODESET); return !cs;]])],
+       [am_cv_langinfo_codeset=yes],
+       [am_cv_langinfo_codeset=no])
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff --git a/m4/config-h.m4 b/m4/config-h.m4
new file mode 100644
index 0000000..b61e22f
--- /dev/null
+++ b/m4/config-h.m4
@@ -0,0 +1,13 @@
+# Say that -DHAVE_CONFIG_H is not needed.
+
+dnl Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+# This package's source files all include config.h unconditionally,
+# so there's no need to pass -DHAVE_CONFIG_H to the compiler.
+AC_DEFUN([gl_CONFIG_H],
+  [AC_CONFIG_COMMANDS_PRE([test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS=])])
diff --git a/m4/configmake.m4 b/m4/configmake.m4
new file mode 100644
index 0000000..8c82371
--- /dev/null
+++ b/m4/configmake.m4
@@ -0,0 +1,50 @@
+# configmake.m4 serial 1
+dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_CONFIGMAKE_PREP
+# ------------------
+# Guarantee all of the standard directory variables, even when used with
+# autoconf 2.59 (datarootdir wasn't supported until 2.59c) or automake
+# 1.9.6 (pkglibexecdir wasn't supported until 1.10b.).
+AC_DEFUN([gl_CONFIGMAKE_PREP],
+[
+  dnl Technically, datadir should default to datarootdir.  But if
+  dnl autoconf is too old to provide datarootdir, then reversing the
+  dnl definition is a reasonable compromise.  Only AC_SUBST a variable
+  dnl if it was not already defined earlier by autoconf.
+  if test "x$datarootdir" = x; then
+    AC_SUBST([datarootdir], ['${datadir}'])
+  fi
+  dnl Copy the approach used in autoconf 2.60.
+  if test "x$docdir" = x; then
+    AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
+      ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
+      ['${datarootdir}/doc/${PACKAGE}'])])
+  fi
+  dnl The remaining variables missing from autoconf 2.59 are easier.
+  if test "x$htmldir" = x; then
+    AC_SUBST([htmldir], ['${docdir}'])
+  fi
+  if test "x$dvidir" = x; then
+    AC_SUBST([dvidir], ['${docdir}'])
+  fi
+  if test "x$pdfdir" = x; then
+    AC_SUBST([pdfdir], ['${docdir}'])
+  fi
+  if test "x$psdir" = x; then
+    AC_SUBST([psdir], ['${docdir}'])
+  fi
+  if test "x$lispdir" = x; then
+    AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp'])
+  fi
+  if test "x$localedir" = x; then
+    AC_SUBST([localedir], ['${datarootdir}/locale'])
+  fi
+
+  dnl Automake 1.9.6 only lacks pkglibexecdir; and since 1.11 merely
+  dnl provides it without AC_SUBST, this blind use of AC_SUBST is safe.
+  AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}'])
+])
diff --git a/m4/cxx.m4 b/m4/cxx.m4
index bae5652..5e266c9 100644
--- a/m4/cxx.m4
+++ b/m4/cxx.m4
@@ -1,11 +1,11 @@
 # -*- Autoconf -*-
 # Sanity-test a C++ compiler.
 #
-# Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2006, 2009-2012 Free Software Foundation, Inc.
 #
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -14,9 +14,7 @@
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Written by Paul Eggert.
 
@@ -60,3 +58,12 @@
  AC_SUBST([BISON_CXX_WORKS])
  AM_CONDITIONAL(BISON_CXX_WORKS, test $bison_cv_cxx_works = yes)
 ])
+
+# BISON_CXX_COMPILER_POSIXLY_CORRECT
+# ----------------------------------
+# Whether the C++ compiler supports -g in POSIXLY_CORRECT mode.
+AC_DEFUN([BISON_CXX_COMPILER_POSIXLY_CORRECT],
+[AC_LANG_PUSH([C++])
+BISON_LANG_COMPILER_POSIXLY_CORRECT
+AC_LANG_POP([C++])
+])
diff --git a/m4/dirname.m4 b/m4/dirname.m4
index e36937d..65639ec 100644
--- a/m4/dirname.m4
+++ b/m4/dirname.m4
@@ -1,16 +1,19 @@
-# dirname.m4 serial 5
-dnl Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#serial 10   -*- autoconf -*-
+dnl Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_DIRNAME],
 [
-  AC_LIBSOURCES([dirname.c, dirname.h])
-  AC_LIBOBJ([dirname])
+  AC_REQUIRE([gl_DIRNAME_LGPL])
+])
 
+AC_DEFUN([gl_DIRNAME_LGPL],
+[
   dnl Prerequisites of lib/dirname.h.
-  AC_REQUIRE([gl_AC_DOS])
+  AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
 
-  dnl No prerequisites of lib/basename.c, lib/dirname.c, lib/stripslash.c.
+  dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c,
+  dnl lib/stripslash.c.
 ])
diff --git a/m4/dmalloc.m4 b/m4/dmalloc.m4
index f724670..90e72f6 100644
--- a/m4/dmalloc.m4
+++ b/m4/dmalloc.m4
@@ -12,7 +12,7 @@
                           http://www.dmalloc.com/dmalloc.tar.gz],
 [if test "$withval" = yes; then
   AC_MSG_RESULT(yes)
-  AC_DEFINE(WITH_DMALLOC,1,
+  AC_DEFINE([WITH_DMALLOC],1,
             [Define if using the dmalloc debugging malloc package])
   LIBS="$LIBS -ldmalloc"
   LDFLAGS="$LDFLAGS -g"
diff --git a/m4/dos.m4 b/m4/dos.m4
deleted file mode 100644
index 0713cf1..0000000
--- a/m4/dos.m4
+++ /dev/null
@@ -1,58 +0,0 @@
-#serial 9
-
-# Define some macros required for proper operation of code in lib/*.c
-# on MSDOS/Windows systems.
-
-# Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# From Jim Meyering.
-
-AC_DEFUN([gl_AC_DOS],
-  [
-    AC_CACHE_CHECK([whether system is Windows or MSDOS], [ac_cv_win_or_dos],
-      [
-        AC_TRY_COMPILE([],
-        [#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__
-neither MSDOS nor Windows
-#endif],
-        [ac_cv_win_or_dos=yes],
-        [ac_cv_win_or_dos=no])
-      ])
-
-    if test x"$ac_cv_win_or_dos" = xyes; then
-      ac_fs_accepts_drive_letter_prefix=1
-      ac_fs_backslash_is_file_name_separator=1
-    else
-      ac_fs_accepts_drive_letter_prefix=0
-      ac_fs_backslash_is_file_name_separator=0
-    fi
-
-    AH_VERBATIM(FILE_SYSTEM_PREFIX_LEN,
-    [#if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
-# define FILE_SYSTEM_PREFIX_LEN(Filename) \
-  ((Filename)[0] && (Filename)[1] == ':' ? 2 : 0)
-#else
-# define FILE_SYSTEM_PREFIX_LEN(Filename) 0
-#endif])
-
-    AC_DEFINE_UNQUOTED([FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX],
-      $ac_fs_accepts_drive_letter_prefix,
-      [Define on systems for which file names may have a so-called
-       `drive letter' prefix, define this to compute the length of that
-       prefix, including the colon.])
-
-    AH_VERBATIM(ISSLASH,
-    [#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#else
-# define ISSLASH(C) ((C) == '/')
-#endif])
-
-    AC_DEFINE_UNQUOTED([FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR],
-      $ac_fs_backslash_is_file_name_separator,
-      [Define if the backslash character may also serve as a file name
-       component separator.])
-  ])
diff --git a/m4/double-slash-root.m4 b/m4/double-slash-root.m4
new file mode 100644
index 0000000..1e03751
--- /dev/null
+++ b/m4/double-slash-root.m4
@@ -0,0 +1,38 @@
+# double-slash-root.m4 serial 4   -*- Autoconf -*-
+dnl Copyright (C) 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_DOUBLE_SLASH_ROOT],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root],
+    [ if test x"$cross_compiling" = xyes ; then
+        # When cross-compiling, there is no way to tell whether // is special
+        # short of a list of hosts.  However, the only known hosts to date
+        # that have a distinct // are Apollo DomainOS (too old to port to),
+        # Cygwin, and z/OS.  If anyone knows of another system for which // has
+        # special semantics and is distinct from /, please report it to
+        # <bug-gnulib@gnu.org>.
+        case $host in
+          *-cygwin | i370-ibm-openedition)
+            gl_cv_double_slash_root=yes ;;
+          *)
+            # Be optimistic and assume that / and // are the same when we
+            # don't know.
+            gl_cv_double_slash_root='unknown, assuming no' ;;
+        esac
+      else
+        set x `ls -di / // 2>/dev/null`
+        if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then
+          gl_cv_double_slash_root=no
+        else
+          gl_cv_double_slash_root=yes
+        fi
+      fi])
+  if test "$gl_cv_double_slash_root" = yes; then
+    AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1],
+      [Define to 1 if // is a file system root distinct from /.])
+  fi
+])
diff --git a/m4/dup2.m4 b/m4/dup2.m4
new file mode 100644
index 0000000..fc86e80
--- /dev/null
+++ b/m4/dup2.m4
@@ -0,0 +1,81 @@
+#serial 18
+dnl Copyright (C) 2002, 2005, 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_DUP2],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  m4_ifdef([gl_FUNC_DUP2_OBSOLETE], [
+    AC_CHECK_FUNCS_ONCE([dup2])
+    if test $ac_cv_func_dup2 = no; then
+      HAVE_DUP2=0
+    fi
+  ], [
+    AC_DEFINE([HAVE_DUP2], [1], [Define to 1 if you have the 'dup2' function.])
+  ])
+  if test $HAVE_DUP2 = 1; then
+    AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works],
+      [AC_RUN_IFELSE([
+         AC_LANG_PROGRAM([[#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>]],
+           [int result = 0;
+#ifdef FD_CLOEXEC
+            if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1)
+              result |= 1;
+#endif
+            if (dup2 (1, 1) == 0)
+              result |= 2;
+#ifdef FD_CLOEXEC
+            if (fcntl (1, F_GETFD) != FD_CLOEXEC)
+              result |= 4;
+#endif
+            close (0);
+            if (dup2 (0, 0) != -1)
+              result |= 8;
+            /* Many gnulib modules require POSIX conformance of EBADF.  */
+            if (dup2 (2, 1000000) == -1 && errno != EBADF)
+              result |= 16;
+            return result;
+           ])
+        ],
+        [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no],
+        [case "$host_os" in
+           mingw*) # on this platform, dup2 always returns 0 for success
+             gl_cv_func_dup2_works="guessing no" ;;
+           cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0
+             gl_cv_func_dup2_works="guessing no" ;;
+           linux*) # On linux between 2008-07-27 and 2009-05-11, dup2 of a
+                   # closed fd may yield -EBADF instead of -1 / errno=EBADF.
+             gl_cv_func_dup2_works="guessing no" ;;
+           freebsd*) # on FreeBSD 6.1, dup2(1,1000000) gives EMFILE, not EBADF.
+             gl_cv_func_dup2_works="guessing no" ;;
+           haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC.
+             gl_cv_func_dup2_works="guessing no" ;;
+           *) gl_cv_func_dup2_works="guessing yes" ;;
+         esac])
+      ])
+    case "$gl_cv_func_dup2_works" in
+      *yes) ;;
+      *)
+        REPLACE_DUP2=1
+        ;;
+    esac
+  fi
+  dnl Replace dup2() for supporting the gnulib-defined fchdir() function,
+  dnl to keep fchdir's bookkeeping up-to-date.
+  m4_ifdef([gl_FUNC_FCHDIR], [
+    gl_TEST_FCHDIR
+    if test $HAVE_FCHDIR = 0; then
+      if test $HAVE_DUP2 = 1; then
+        REPLACE_DUP2=1
+      fi
+    fi
+  ])
+])
+
+# Prerequisites of lib/dup2.c.
+AC_DEFUN([gl_PREREQ_DUP2], [])
diff --git a/m4/environ.m4 b/m4/environ.m4
new file mode 100644
index 0000000..8eb57c9
--- /dev/null
+++ b/m4/environ.m4
@@ -0,0 +1,47 @@
+# environ.m4 serial 6
+dnl Copyright (C) 2001-2004, 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_ENVIRON],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  dnl Persuade glibc <unistd.h> to declare environ.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  gt_CHECK_VAR_DECL(
+    [#if HAVE_UNISTD_H
+     #include <unistd.h>
+     #endif
+     /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>.  */
+     #include <stdlib.h>
+    ],
+    [environ])
+  if test $gt_cv_var_environ_declaration != yes; then
+    HAVE_DECL_ENVIRON=0
+  fi
+])
+
+# Check if a variable is properly declared.
+# gt_CHECK_VAR_DECL(includes,variable)
+AC_DEFUN([gt_CHECK_VAR_DECL],
+[
+  define([gt_cv_var], [gt_cv_var_]$2[_declaration])
+  AC_MSG_CHECKING([if $2 is properly declared])
+  AC_CACHE_VAL([gt_cv_var], [
+    AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[$1
+           extern struct { int foo; } $2;]],
+         [[$2.foo = 1;]])],
+      [gt_cv_var=no],
+      [gt_cv_var=yes])])
+  AC_MSG_RESULT([$gt_cv_var])
+  if test $gt_cv_var = yes; then
+    AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1,
+              [Define if you have the declaration of $2.])
+  fi
+  undefine([gt_cv_var])
+])
diff --git a/m4/errno_h.m4 b/m4/errno_h.m4
new file mode 100644
index 0000000..4e33ba8
--- /dev/null
+++ b/m4/errno_h.m4
@@ -0,0 +1,137 @@
+# errno_h.m4 serial 12
+dnl Copyright (C) 2004, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_HEADER_ERRNO_H],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [
+    AC_EGREP_CPP([booboo],[
+#include <errno.h>
+#if !defined ETXTBSY
+booboo
+#endif
+#if !defined ENOMSG
+booboo
+#endif
+#if !defined EIDRM
+booboo
+#endif
+#if !defined ENOLINK
+booboo
+#endif
+#if !defined EPROTO
+booboo
+#endif
+#if !defined EMULTIHOP
+booboo
+#endif
+#if !defined EBADMSG
+booboo
+#endif
+#if !defined EOVERFLOW
+booboo
+#endif
+#if !defined ENOTSUP
+booboo
+#endif
+#if !defined ENETRESET
+booboo
+#endif
+#if !defined ECONNABORTED
+booboo
+#endif
+#if !defined ESTALE
+booboo
+#endif
+#if !defined EDQUOT
+booboo
+#endif
+#if !defined ECANCELED
+booboo
+#endif
+#if !defined EOWNERDEAD
+booboo
+#endif
+#if !defined ENOTRECOVERABLE
+booboo
+#endif
+#if !defined EILSEQ
+booboo
+#endif
+      ],
+      [gl_cv_header_errno_h_complete=no],
+      [gl_cv_header_errno_h_complete=yes])
+  ])
+  if test $gl_cv_header_errno_h_complete = yes; then
+    ERRNO_H=''
+  else
+    gl_NEXT_HEADERS([errno.h])
+    ERRNO_H='errno.h'
+  fi
+  AC_SUBST([ERRNO_H])
+  AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"])
+  gl_REPLACE_ERRNO_VALUE([EMULTIHOP])
+  gl_REPLACE_ERRNO_VALUE([ENOLINK])
+  gl_REPLACE_ERRNO_VALUE([EOVERFLOW])
+])
+
+# Assuming $1 = EOVERFLOW.
+# The EOVERFLOW errno value ought to be defined in <errno.h>, according to
+# POSIX.  But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and
+# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined.
+# Check for the value of EOVERFLOW.
+# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE.
+AC_DEFUN([gl_REPLACE_ERRNO_VALUE],
+[
+  if test -n "$ERRNO_H"; then
+    AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [
+      AC_EGREP_CPP([yes],[
+#include <errno.h>
+#ifdef ]$1[
+yes
+#endif
+      ],
+      [gl_cv_header_errno_h_]$1[=yes],
+      [gl_cv_header_errno_h_]$1[=no])
+      if test $gl_cv_header_errno_h_]$1[ = no; then
+        AC_EGREP_CPP([yes],[
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef ]$1[
+yes
+#endif
+          ], [gl_cv_header_errno_h_]$1[=hidden])
+        if test $gl_cv_header_errno_h_]$1[ = hidden; then
+          dnl The macro exists but is hidden.
+          dnl Define it to the same value.
+          AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+])
+        fi
+      fi
+    ])
+    case $gl_cv_header_errno_h_]$1[ in
+      yes | no)
+        ]$1[_HIDDEN=0; ]$1[_VALUE=
+        ;;
+      *)
+        ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1["
+        ;;
+    esac
+    AC_SUBST($1[_HIDDEN])
+    AC_SUBST($1[_VALUE])
+  fi
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
diff --git a/m4/error.m4 b/m4/error.m4
index 7c7746e..1190e32 100644
--- a/m4/error.m4
+++ b/m4/error.m4
@@ -1,7 +1,6 @@
-#serial 11
+#serial 14
 
-# Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004 Free Software
-# Foundation, Inc.
+# Copyright (C) 1996-1998, 2001-2004, 2009-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9,9 +8,15 @@
 
 AC_DEFUN([gl_ERROR],
 [
-  AC_FUNC_ERROR_AT_LINE
-  dnl Note: AC_FUNC_ERROR_AT_LINE does AC_LIBSOURCES([error.h, error.c]).
-  gl_PREREQ_ERROR
+  dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer
+  dnl maintained in Autoconf and because it invokes AC_LIBOBJ.
+  AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <error.h>]],
+          [[error_at_line (0, 0, "", 0, "an error occurred");]])],
+       [ac_cv_lib_error_at_line=yes],
+       [ac_cv_lib_error_at_line=no])])
 ])
 
 # Prerequisites of lib/error.c.
diff --git a/m4/exitfail.m4 b/m4/exitfail.m4
deleted file mode 100644
index 5523676..0000000
--- a/m4/exitfail.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-# exitfail.m4 serial 5
-dnl Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_EXITFAIL],
-[
-  AC_LIBSOURCES([exitfail.c, exitfail.h])
-  AC_LIBOBJ([exitfail])
-
-  dnl No prerequisites of lib/exitfail.c.
-  :
-])
diff --git a/m4/exponentd.m4 b/m4/exponentd.m4
new file mode 100644
index 0000000..0ae4ccf
--- /dev/null
+++ b/m4/exponentd.m4
@@ -0,0 +1,116 @@
+# exponentd.m4 serial 3
+dnl Copyright (C) 2007-2008, 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION],
+[
+  AC_CACHE_CHECK([where to find the exponent in a 'double'],
+    [gl_cv_cc_double_expbit0],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { double value; unsigned int word[NWORDS]; } memory_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (double x)
+{
+  memory_double m;
+  size_t i;
+  /* Clear it first, in case sizeof (double) < sizeof (memory_double).  */
+  memset (&m, 0, sizeof (memory_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25);
+  add_to_ored_words (0.5);
+  add_to_ored_words (1.0);
+  add_to_ored_words (2.0);
+  add_to_ored_words (4.0);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+        ]])],
+        [gl_cv_cc_double_expbit0=`cat conftest.out`],
+        [gl_cv_cc_double_expbit0="unknown"],
+        [
+          dnl On ARM, there are two 'double' floating-point formats, used by
+          dnl different sets of instructions: The older FPA instructions assume
+          dnl that they are stored in big-endian word order, while the words
+          dnl (like integer types) are stored in little-endian byte order.
+          dnl The newer VFP instructions assume little-endian order
+          dnl consistently.
+          AC_EGREP_CPP([mixed_endianness], [
+#if defined arm || defined __arm || defined __arm__
+  mixed_endianness
+#endif
+            ],
+            [gl_cv_cc_double_expbit0="unknown"],
+            [
+              pushdef([AC_MSG_CHECKING],[:])dnl
+              pushdef([AC_MSG_RESULT],[:])dnl
+              pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl
+              AC_C_BIGENDIAN(
+                [gl_cv_cc_double_expbit0="word 0 bit 20"],
+                [gl_cv_cc_double_expbit0="word 1 bit 20"],
+                [gl_cv_cc_double_expbit0="unknown"])
+              popdef([AC_MSG_RESULT_UNQUOTED])dnl
+              popdef([AC_MSG_RESULT])dnl
+              popdef([AC_MSG_CHECKING])dnl
+            ])
+        ])
+      rm -f conftest.out
+    ])
+  case "$gl_cv_cc_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'`
+      AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word],
+        [Define as the word index where to find the exponent of 'double'.])
+      AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit],
+        [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.])
+      ;;
+  esac
+])
diff --git a/m4/exponentf.m4 b/m4/exponentf.m4
new file mode 100644
index 0000000..94d1167
--- /dev/null
+++ b/m4/exponentf.m4
@@ -0,0 +1,92 @@
+# exponentf.m4 serial 2
+dnl Copyright (C) 2007-2008, 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION],
+[
+  AC_CACHE_CHECK([where to find the exponent in a 'float'],
+    [gl_cv_cc_float_expbit0],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; } memory_float;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (float x)
+{
+  memory_float m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (float) < sizeof (memory_float).  */
+  memset (&m, 0, sizeof (memory_float));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25f);
+  add_to_ored_words (0.5f);
+  add_to_ored_words (1.0f);
+  add_to_ored_words (2.0f);
+  add_to_ored_words (4.0f);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+        ]])],
+        [gl_cv_cc_float_expbit0=`cat conftest.out`],
+        [gl_cv_cc_float_expbit0="unknown"],
+        [gl_cv_cc_float_expbit0="word 0 bit 23"])
+      rm -f conftest.out
+    ])
+  case "$gl_cv_cc_float_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'`
+      AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word],
+        [Define as the word index where to find the exponent of 'float'.])
+      AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit],
+        [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.])
+      ;;
+  esac
+])
diff --git a/m4/exponentl.m4 b/m4/exponentl.m4
new file mode 100644
index 0000000..a7cd13b
--- /dev/null
+++ b/m4/exponentl.m4
@@ -0,0 +1,98 @@
+# exponentl.m4 serial 3
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION],
+[
+  AC_REQUIRE([gl_BIGENDIAN])
+  AC_CACHE_CHECK([where to find the exponent in a 'long double'],
+    [gl_cv_cc_long_double_expbit0],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { long double value; unsigned int word[NWORDS]; }
+        memory_long_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (long double x)
+{
+  memory_long_double m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (long double) < sizeof (memory_long_double).  */
+  memset (&m, 0, sizeof (memory_long_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25L);
+  add_to_ored_words (0.5L);
+  add_to_ored_words (1.0L);
+  add_to_ored_words (2.0L);
+  add_to_ored_words (4.0L);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+        ]])],
+        [gl_cv_cc_long_double_expbit0=`cat conftest.out`],
+        [gl_cv_cc_long_double_expbit0="unknown"],
+        [
+          dnl When cross-compiling, we don't know. It depends on the
+          dnl ABI and compiler version. There are too many cases.
+          gl_cv_cc_long_double_expbit0="unknown"
+        ])
+      rm -f conftest.out
+    ])
+  case "$gl_cv_cc_long_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'`
+      AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word],
+        [Define as the word index where to find the exponent of 'long double'.])
+      AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit],
+        [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.])
+      ;;
+  esac
+])
diff --git a/m4/extensions.m4 b/m4/extensions.m4
index 4976079..6d17d8a 100644
--- a/m4/extensions.m4
+++ b/m4/extensions.m4
@@ -1,42 +1,123 @@
+# serial 12  -*- Autoconf -*-
 # Enable extensions on systems that normally disable them.
 
-# Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2006-2012 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# This file is only needed in autoconf <= 2.59.  Newer versions of autoconf
-# have a macro AC_USE_SYSTEM_EXTENSIONS with identical semantics.
+# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS
+# Autoconf.  Perhaps we can remove this once we can assume Autoconf
+# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly
+# enough in this area it's likely we'll need to redefine
+# AC_USE_SYSTEM_EXTENSIONS for quite some time.
+
+# If autoconf reports a warning
+#     warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# or  warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# the fix is
+#   1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
+#      but always AC_REQUIREd,
+#   2) to ensure that for each occurrence of
+#        AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+#      or
+#        AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+#      the corresponding gnulib module description has 'extensions' among
+#      its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
+#      invocation occurs in gl_EARLY, not in gl_INIT.
+
+# AC_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+# Remember that #undef in AH_VERBATIM gets replaced with #define by
+# AC_DEFINE.  The goal here is to define all known feature-enabling
+# macros, then, if reports of conflicts are made, disable macros that
+# cause problems on some platforms (such as __EXTENSIONS__).
+AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
+[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
+AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
+  if test "$MINIX" = yes; then
+    AC_DEFINE([_POSIX_SOURCE], [1],
+      [Define to 1 if you need to in order for 'stat' and other
+       things to work.])
+    AC_DEFINE([_POSIX_1_SOURCE], [2],
+      [Define to 2 if the system does not provide POSIX.1 features
+       except with this defined.])
+    AC_DEFINE([_MINIX], [1],
+      [Define to 1 if on MINIX.])
+  fi
+
+  dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500,
+  dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already
+  dnl provided.
+  case "$host_os" in
+    hpux*)
+      AC_DEFINE([_XOPEN_SOURCE], [500],
+        [Define to 500 only on HP-UX.])
+      ;;
+  esac
+
+  AH_VERBATIM([__EXTENSIONS__],
+[/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on Mac OS X.  */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+])
+  AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
+    [ac_cv_safe_to_define___extensions__],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[
+#         define __EXTENSIONS__ 1
+          ]AC_INCLUDES_DEFAULT])],
+       [ac_cv_safe_to_define___extensions__=yes],
+       [ac_cv_safe_to_define___extensions__=no])])
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    AC_DEFINE([__EXTENSIONS__])
+  AC_DEFINE([_ALL_SOURCE])
+  AC_DEFINE([_DARWIN_C_SOURCE])
+  AC_DEFINE([_GNU_SOURCE])
+  AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+  AC_DEFINE([_TANDEM_SOURCE])
+])# AC_USE_SYSTEM_EXTENSIONS
 
 # gl_USE_SYSTEM_EXTENSIONS
 # ------------------------
 # Enable extensions on systems that normally disable them,
 # typically due to standards-conformance issues.
-AC_DEFUN([gl_USE_SYSTEM_EXTENSIONS], [
-  AC_BEFORE([$0], [AC_COMPILE_IFELSE])
-  AC_BEFORE([$0], [AC_RUN_IFELSE])
-
+AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
+[
+  dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS.
+  dnl gnulib does not need it. But if it gets required by third-party macros
+  dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a
+  dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
+  dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE,
+  dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck.
   AC_REQUIRE([AC_GNU_SOURCE])
-  AC_REQUIRE([AC_AIX])
-  AC_REQUIRE([AC_MINIX])
 
-  AH_VERBATIM([__EXTENSIONS__],
-[/* Enable extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif])
-  AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
-    [ac_cv_safe_to_define___extensions__],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM([
-	  #define __EXTENSIONS__ 1
-	  AC_INCLUDES_DEFAULT])],
-       [ac_cv_safe_to_define___extensions__=yes],
-       [ac_cv_safe_to_define___extensions__=no])])
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    AC_DEFINE([__EXTENSIONS__])
-  AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 ])
diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4
new file mode 100644
index 0000000..0a9fc9a
--- /dev/null
+++ b/m4/extern-inline.m4
@@ -0,0 +1,62 @@
+dnl 'extern inline' a la ISO C99.
+
+dnl Copyright 2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_EXTERN_INLINE],
+[
+  AH_VERBATIM([extern_inline],
+[/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
+   _GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
+   _GL_INLINE_HEADER_BEGIN contains useful stuff to put
+     in an include file, before uses of _GL_INLINE.
+     It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
+     when FOO is an inline function in the header; see
+     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
+   _GL_INLINE_HEADER_END contains useful stuff to put
+     in the same include file, after uses of _GL_INLINE.
+
+   Suppress the use of extern inline on Apple's platforms,
+   as Libc-825.25 (2012-09-19) is incompatible with it; see
+   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
+   Perhaps Apple will fix this some day.  */
+#if ((__GNUC__ \
+      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+      : 199901L <= __STDC_VERSION__) \
+     && !defined __APPLE__)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
+# if __GNUC_GNU_INLINE__
+   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
+#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+#  define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+#else
+# define _GL_INLINE static _GL_UNUSED
+# define _GL_EXTERN_INLINE static _GL_UNUSED
+#endif
+
+#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+#  define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+#  define _GL_INLINE_HEADER_CONST_PRAGMA \
+     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+    _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif])
+])
diff --git a/m4/fatal-signal.m4 b/m4/fatal-signal.m4
new file mode 100644
index 0000000..d102de7
--- /dev/null
+++ b/m4/fatal-signal.m4
@@ -0,0 +1,12 @@
+# fatal-signal.m4 serial 9
+dnl Copyright (C) 2003-2004, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FATAL_SIGNAL],
+[
+  AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T])
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  gl_PREREQ_SIG_HANDLER_H
+])
diff --git a/m4/fcntl-o.m4 b/m4/fcntl-o.m4
new file mode 100644
index 0000000..740e78b
--- /dev/null
+++ b/m4/fcntl-o.m4
@@ -0,0 +1,134 @@
+# fcntl-o.m4 serial 4
+dnl Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
+# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
+# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
+AC_DEFUN([gl_FCNTL_O_FLAGS],
+[
+  dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
+  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
+  dnl AC_GNU_SOURCE.
+  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
+    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
+    [AC_REQUIRE([AC_GNU_SOURCE])])
+
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  AC_CHECK_FUNCS_ONCE([symlink])
+  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
+    [AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>
+           #include <sys/stat.h>
+           #if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <io.h>
+           # include <stdlib.h>
+           # defined sleep(n) _sleep ((n) * 1000)
+           #endif
+           #include <fcntl.h>
+           #ifndef O_NOATIME
+            #define O_NOATIME 0
+           #endif
+           #ifndef O_NOFOLLOW
+            #define O_NOFOLLOW 0
+           #endif
+           static int const constants[] =
+            {
+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+            };
+          ]],
+          [[
+            int result = !constants;
+            #if HAVE_SYMLINK
+            {
+              static char const sym[] = "conftest.sym";
+              if (symlink ("/dev/null", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              if (unlink (sym) != 0 || symlink (".", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              unlink (sym);
+            }
+            #endif
+            {
+              static char const file[] = "confdefs.h";
+              int fd = open (file, O_RDONLY | O_NOATIME);
+              if (fd < 0)
+                result |= 8;
+              else
+                {
+                  struct stat st0;
+                  if (fstat (fd, &st0) != 0)
+                    result |= 16;
+                  else
+                    {
+                      char c;
+                      sleep (1);
+                      if (read (fd, &c, 1) != 1)
+                        result |= 24;
+                      else
+                        {
+                          if (close (fd) != 0)
+                            result |= 32;
+                          else
+                            {
+                              struct stat st1;
+                              if (stat (file, &st1) != 0)
+                                result |= 40;
+                              else
+                                if (st0.st_atime != st1.st_atime)
+                                  result |= 64;
+                            }
+                        }
+                    }
+                }
+            }
+            return result;]])],
+       [gl_cv_header_working_fcntl_h=yes],
+       [case $? in #(
+        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+         *) gl_cv_header_working_fcntl_h='no';;
+        esac],
+       [gl_cv_header_working_fcntl_h=cross-compiling])])
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
+    [Define to 1 if O_NOATIME works.])
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
+    [Define to 1 if O_NOFOLLOW works.])
+])
diff --git a/m4/fcntl.m4 b/m4/fcntl.m4
new file mode 100644
index 0000000..0631bd6
--- /dev/null
+++ b/m4/fcntl.m4
@@ -0,0 +1,95 @@
+# fcntl.m4 serial 5
+dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# For now, this module ensures that fcntl()
+# - supports F_DUPFD correctly
+# - supports or emulates F_DUPFD_CLOEXEC
+# - supports F_GETFD
+# Still to be ported to mingw:
+# - F_SETFD
+# - F_GETFL, F_SETFL
+# - F_GETOWN, F_SETOWN
+# - F_GETLK, F_SETLK, F_SETLKW
+AC_DEFUN([gl_FUNC_FCNTL],
+[
+  dnl Persuade glibc to expose F_DUPFD_CLOEXEC.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CHECK_FUNCS_ONCE([fcntl])
+  if test $ac_cv_func_fcntl = no; then
+    gl_REPLACE_FCNTL
+  else
+    dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target
+    dnl haiku alpha 2 F_DUPFD has wrong errno
+    AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly],
+      [gl_cv_func_fcntl_f_dupfd_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <fcntl.h>
+#include <errno.h>
+]], [[int result = 0;
+      if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
+      if (errno != EINVAL) result |= 2;
+      return result;
+         ]])],
+         [gl_cv_func_fcntl_f_dupfd_works=yes],
+         [gl_cv_func_fcntl_f_dupfd_works=no],
+         [# Guess that it works on glibc systems
+          case $host_os in #((
+            *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";;
+            *)      gl_cv_func_fcntl_f_dupfd_works="guessing no";;
+          esac])])
+    case $gl_cv_func_fcntl_f_dupfd_works in
+      *yes) ;;
+      *) gl_REPLACE_FCNTL
+        AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD
+          behavior does not match POSIX]) ;;
+    esac
+
+    dnl Many systems lack F_DUPFD_CLOEXEC
+    AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC],
+      [gl_cv_func_fcntl_f_dupfd_cloexec],
+      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <fcntl.h>
+#ifndef F_DUPFD_CLOEXEC
+choke me
+#endif
+         ]])],
+         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef __linux__
+/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace
+   it to support the semantics on older kernels that failed with EINVAL.  */
+choke me
+#endif
+           ]])],
+           [gl_cv_func_fcntl_f_dupfd_cloexec=yes],
+           [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"])],
+         [gl_cv_func_fcntl_f_dupfd_cloexec=no])])
+    if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then
+      gl_REPLACE_FCNTL
+      dnl No witness macro needed for this bug.
+    fi
+  fi
+  dnl Replace fcntl() for supporting the gnulib-defined fchdir() function,
+  dnl to keep fchdir's bookkeeping up-to-date.
+  m4_ifdef([gl_FUNC_FCHDIR], [
+    gl_TEST_FCHDIR
+    if test $HAVE_FCHDIR = 0; then
+      gl_REPLACE_FCNTL
+    fi
+  ])
+])
+
+AC_DEFUN([gl_REPLACE_FCNTL],
+[
+  AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([fcntl])
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
+  fi
+])
diff --git a/m4/fcntl_h.m4 b/m4/fcntl_h.m4
new file mode 100644
index 0000000..cac28ae
--- /dev/null
+++ b/m4/fcntl_h.m4
@@ -0,0 +1,50 @@
+# serial 15
+# Configure fcntl.h.
+dnl Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN([gl_FCNTL_H],
+[
+  AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+  AC_REQUIRE([gl_FCNTL_O_FLAGS])
+  gl_NEXT_HEADERS([fcntl.h])
+
+  dnl Ensure the type pid_t gets defined.
+  AC_REQUIRE([AC_TYPE_PID_T])
+
+  dnl Ensure the type mode_t gets defined.
+  AC_REQUIRE([AC_TYPE_MODE_T])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, if it is not common
+  dnl enough to be declared everywhere.
+  gl_WARN_ON_USE_PREPARE([[#include <fcntl.h>
+    ]], [fcntl openat])
+])
+
+AC_DEFUN([gl_FCNTL_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_FCNTL_H_DEFAULTS],
+[
+  GNULIB_FCNTL=0;        AC_SUBST([GNULIB_FCNTL])
+  GNULIB_NONBLOCKING=0;  AC_SUBST([GNULIB_NONBLOCKING])
+  GNULIB_OPEN=0;         AC_SUBST([GNULIB_OPEN])
+  GNULIB_OPENAT=0;       AC_SUBST([GNULIB_OPENAT])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_FCNTL=1;          AC_SUBST([HAVE_FCNTL])
+  HAVE_OPENAT=1;         AC_SUBST([HAVE_OPENAT])
+  REPLACE_FCNTL=0;       AC_SUBST([REPLACE_FCNTL])
+  REPLACE_OPEN=0;        AC_SUBST([REPLACE_OPEN])
+  REPLACE_OPENAT=0;      AC_SUBST([REPLACE_OPENAT])
+])
diff --git a/m4/flex.m4 b/m4/flex.m4
new file mode 100644
index 0000000..984c514
--- /dev/null
+++ b/m4/flex.m4
@@ -0,0 +1,111 @@
+# flex.m4 serial 2
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AC_PROG_LEX
+# -----------
+# Look for flex or lex.  Set its associated library to LEXLIB.
+# Check if lex declares yytext as a char * by default, not a char[].
+AN_MAKEVAR([LEX],  [AC_PROG_LEX])
+AN_PROGRAM([lex],  [AC_PROG_LEX])
+AN_PROGRAM([flex], [AC_PROG_LEX])
+AC_DEFUN_ONCE([AC_PROG_LEX],
+[AC_CHECK_PROGS([LEX], [flex lex], [:])
+if test "x$LEX" != "x:"; then
+  _AC_PROG_LEX_YYTEXT_DECL
+fi])
+
+
+# _AC_PROG_LEX_YYTEXT_DECL
+# ------------------------
+# Check whether this is Flex, for the Lex output root, the Lex library,
+# and whether Lex declares yytext as a char * by default.
+m4_define([_AC_PROG_LEX_YYTEXT_DECL],
+[AC_CACHE_CHECK([whether lex is flex],
+                [ac_cv_prog_lex_is_flex],
+[cat >conftest.l <<_ACEOF[
+%option debug nodefault noinput nounput noyywrap never-interactive
+%x SC_CONF_TEST
+%%
+a { BEGIN SC_CONF_TEST; }
+]_ACEOF
+if _AC_DO_VAR([LEX conftest.l]); then
+  ac_cv_prog_lex_is_flex=yes
+else
+  ac_cv_prog_lex_is_flex=no
+fi
+])
+AC_SUBST([LEX_IS_FLEX],
+         [`test "$ac_cv_prog_lex_is_flex" = yes && echo true || echo false`])dnl
+
+cat >conftest.l <<_ACEOF[
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
+    yyless ((input () != 0)); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+  return ! yylex () + ! yywrap ();
+}
+]_ACEOF
+_AC_DO_VAR([LEX conftest.l])
+AC_CACHE_CHECK([lex output file root], [ac_cv_prog_lex_root], [
+if test -f lex.yy.c; then
+  ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+  ac_cv_prog_lex_root=lexyy
+else
+  AC_MSG_ERROR([cannot find output from $LEX; giving up])
+fi])
+AC_SUBST([LEX_OUTPUT_ROOT], [$ac_cv_prog_lex_root])dnl
+
+if test -z "${LEXLIB+set}"; then
+  AC_CACHE_CHECK([lex library], [ac_cv_lib_lex], [
+    ac_save_LIBS=$LIBS
+    ac_cv_lib_lex='none needed'
+    for ac_lib in '' -lfl -ll; do
+      LIBS="$ac_lib $ac_save_LIBS"
+      AC_LINK_IFELSE([AC_LANG_DEFINES_PROVIDED[`cat $LEX_OUTPUT_ROOT.c`]],
+	[ac_cv_lib_lex=$ac_lib])
+      test "$ac_cv_lib_lex" != 'none needed' && break
+    done
+    LIBS=$ac_save_LIBS
+  ])
+  test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+AC_SUBST([LEXLIB])
+
+AC_CACHE_CHECK([whether yytext is a pointer],
+               [ac_cv_prog_lex_yytext_pointer],
+[# POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent.  Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+AC_LINK_IFELSE([AC_LANG_DEFINES_PROVIDED
+  [#define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`]],
+  [ac_cv_prog_lex_yytext_pointer=yes])
+LIBS=$ac_save_LIBS
+])
+dnl
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+  AC_DEFINE([YYTEXT_POINTER], [1],
+	    [Define to 1 if `lex' declares `yytext' as a `char *' by default,
+	     not a `char[]'.])
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+])# _AC_PROG_LEX_YYTEXT_DECL
diff --git a/m4/float_h.m4 b/m4/float_h.m4
new file mode 100644
index 0000000..51c9c7b
--- /dev/null
+++ b/m4/float_h.m4
@@ -0,0 +1,98 @@
+# float_h.m4 serial 9
+dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FLOAT_H],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  FLOAT_H=
+  REPLACE_FLOAT_LDBL=0
+  case "$host_os" in
+    aix* | beos* | openbsd* | mirbsd* | irix*)
+      FLOAT_H=float.h
+      ;;
+    freebsd*)
+      case "$host_cpu" in
+changequote(,)dnl
+        i[34567]86 )
+changequote([,])dnl
+          FLOAT_H=float.h
+          ;;
+        x86_64 )
+          # On x86_64 systems, the C compiler may still be generating
+          # 32-bit code.
+          AC_EGREP_CPP([yes],
+            [#if defined __LP64__ || defined __x86_64__ || defined __amd64__
+             yes
+             #endif],
+            [],
+            [FLOAT_H=float.h])
+          ;;
+      esac
+      ;;
+    linux*)
+      case "$host_cpu" in
+        powerpc*)
+          FLOAT_H=float.h
+          ;;
+      esac
+      ;;
+  esac
+  case "$host_os" in
+    aix* | freebsd* | linux*)
+      if test -n "$FLOAT_H"; then
+        REPLACE_FLOAT_LDBL=1
+      fi
+      ;;
+  esac
+
+  dnl Test against glibc-2.7 Linux/SPARC64 bug.
+  REPLACE_ITOLD=0
+  AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works],
+    [gl_cv_func_itold_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+int i = -1;
+volatile long double ld;
+int main ()
+{
+  ld += i * 1.0L;
+  if (ld > 0)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_itold_works=yes],
+        [gl_cv_func_itold_works=no],
+        [case "$host" in
+           sparc*-*-linux*)
+             AC_EGREP_CPP([yes],
+               [#if defined __LP64__ || defined __arch64__
+                yes
+                #endif],
+               [gl_cv_func_itold_works="guessing no"],
+               [gl_cv_func_itold_works="guessing yes"])
+             ;;
+           *) gl_cv_func_itold_works="guessing yes" ;;
+         esac
+        ])
+    ])
+  case "$gl_cv_func_itold_works" in
+    *no)
+      REPLACE_ITOLD=1
+      dnl We add the workaround to <float.h> but also to <math.h>,
+      dnl to increase the chances that the fix function gets pulled in.
+      FLOAT_H=float.h
+      ;;
+  esac
+
+  if test -n "$FLOAT_H"; then
+    gl_NEXT_HEADERS([float.h])
+  fi
+  AC_SUBST([FLOAT_H])
+  AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"])
+  AC_SUBST([REPLACE_ITOLD])
+])
diff --git a/m4/fopen.m4 b/m4/fopen.m4
new file mode 100644
index 0000000..d56c783
--- /dev/null
+++ b/m4/fopen.m4
@@ -0,0 +1,58 @@
+# fopen.m4 serial 9
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FOPEN],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  case "$host_os" in
+    mingw* | pw*)
+      dnl Replace fopen, for handling of "/dev/null".
+      REPLACE_FOPEN=1
+      dnl fopen on mingw also has the trailing slash bug.
+      gl_cv_func_fopen_slash="guessing no"
+      ;;
+    *)
+      dnl fopen("foo/", "w") should not create a file when the file name has a
+      dnl trailing slash.
+      AC_CACHE_CHECK([whether fopen recognizes a trailing slash],
+        [gl_cv_func_fopen_slash],
+        [
+          AC_RUN_IFELSE(
+            [AC_LANG_SOURCE([[
+#include <stddef.h>
+#include <stdio.h>
+int main ()
+{
+  return fopen ("conftest.sl/", "w") != NULL;
+}]])],
+            [gl_cv_func_fopen_slash=yes],
+            [gl_cv_func_fopen_slash=no],
+            [
+changequote(,)dnl
+             case "$host_os" in
+               aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*)
+                 gl_cv_func_fopen_slash="guessing no" ;;
+               *)
+                 gl_cv_func_fopen_slash="guessing yes" ;;
+             esac
+changequote([,])dnl
+            ])
+          rm -f conftest.sl
+        ])
+      ;;
+  esac
+  case "$gl_cv_func_fopen_slash" in
+    *no)
+      AC_DEFINE([FOPEN_TRAILING_SLASH_BUG], [1],
+        [Define to 1 if fopen() fails to recognize a trailing slash.])
+      REPLACE_FOPEN=1
+      ;;
+  esac
+])
+
+# Prerequisites of lib/fopen.c.
+AC_DEFUN([gl_PREREQ_FOPEN], [:])
diff --git a/m4/fpending.m4 b/m4/fpending.m4
new file mode 100644
index 0000000..33a5c94
--- /dev/null
+++ b/m4/fpending.m4
@@ -0,0 +1,90 @@
+# serial 19
+
+# Copyright (C) 2000-2001, 2004-2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl From Jim Meyering
+dnl Using code from emacs, based on suggestions from Paul Eggert
+dnl and Ulrich Drepper.
+
+dnl Find out how to determine the number of pending output bytes on a stream.
+dnl glibc (2.1.93 and newer) and Solaris provide __fpending.  On other systems,
+dnl we have to grub around in the FILE struct.
+
+AC_DEFUN([gl_FUNC_FPENDING],
+[
+  AC_CHECK_HEADERS_ONCE([stdio_ext.h])
+  AC_CHECK_FUNCS_ONCE([__fpending])
+  fp_headers='
+#     include <stdio.h>
+#     if HAVE_STDIO_EXT_H
+#      include <stdio_ext.h>
+#     endif
+'
+  AC_CHECK_DECLS([__fpending], , , $fp_headers)
+])
+
+AC_DEFUN([gl_PREREQ_FPENDING],
+[
+  AC_CACHE_CHECK(
+              [how to determine the number of pending output bytes on a stream],
+                 ac_cv_sys_pending_output_n_bytes,
+    [
+      for ac_expr in                                                    \
+                                                                        \
+          '# glibc2'                                                    \
+          'fp->_IO_write_ptr - fp->_IO_write_base'                      \
+                                                                        \
+          '# traditional Unix'                                          \
+          'fp->_ptr - fp->_base'                                        \
+                                                                        \
+          '# BSD'                                                       \
+          'fp->_p - fp->_bf._base'                                      \
+                                                                        \
+          '# SCO, Unixware'                                             \
+          '(fp->__ptr ? fp->__ptr - fp->__base : 0)'                    \
+                                                                        \
+          '# QNX'                                                       \
+          '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
+                                                                        \
+          '# old glibc?'                                                \
+          'fp->__bufp - fp->__buffer'                                   \
+                                                                        \
+          '# old glibc iostream?'                                       \
+          'fp->_pptr - fp->_pbase'                                      \
+                                                                        \
+          '# emx+gcc'                                                   \
+          'fp->_ptr - fp->_buffer'                                      \
+                                                                        \
+          '# Minix'                                                     \
+          'fp->_ptr - fp->_buf'                                         \
+                                                                        \
+          '# Plan9'                                                     \
+          'fp->wp - fp->buf'                                            \
+                                                                        \
+          '# VMS'                                                       \
+          '(*fp)->_ptr - (*fp)->_base'                                  \
+                                                                        \
+          '# e.g., DGUX R4.11; the info is not available'               \
+          1                                                             \
+          ; do
+
+        # Skip each embedded comment.
+        case "$ac_expr" in '#'*) continue;; esac
+
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],
+          [[FILE *fp = stdin; (void) ($ac_expr);]])],
+          [fp_done=yes]
+        )
+        test "$fp_done" = yes && break
+      done
+
+      ac_cv_sys_pending_output_n_bytes=$ac_expr
+    ]
+  )
+  AC_DEFINE_UNQUOTED([PENDING_OUTPUT_N_BYTES],
+    $ac_cv_sys_pending_output_n_bytes,
+    [the number of pending output bytes on stream 'fp'])
+])
diff --git a/m4/fpieee.m4 b/m4/fpieee.m4
new file mode 100644
index 0000000..82fd778
--- /dev/null
+++ b/m4/fpieee.m4
@@ -0,0 +1,54 @@
+# fpieee.m4 serial 2
+dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl IEEE 754 standardized three items:
+dnl - The formats of single-float and double-float - nowadays commonly
+dnl   available as 'float' and 'double' in C and C++.
+dnl   No autoconf test needed.
+dnl - The overflow and division by zero behaviour: The result are values
+dnl   '±Inf' and 'NaN', rather than exceptions as it was before.
+dnl   This file provides an autoconf macro for ensuring this behaviour of
+dnl   floating-point operations.
+dnl - A set of conditions (overflow, underflow, inexact, etc.) which can
+dnl   be configured to trigger an exception.
+dnl   This cannot be done in a portable way: it depends on the compiler,
+dnl   libc, kernel, and CPU.  No autoconf macro is provided for this.
+
+dnl Ensure non-trapping behaviour of floating-point overflow and
+dnl floating-point division by zero.
+dnl (For integer overflow, see gcc's -ftrapv option; for integer division by
+dnl zero, see the autoconf macro in intdiv0.m4.)
+
+AC_DEFUN([gl_FP_IEEE],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  # IEEE behaviour is the default on all CPUs except Alpha and SH
+  # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4
+  # and the GCC 4.1.2 manual).
+  case "$host_cpu" in
+    alpha*)
+      # On Alpha systems, a compiler option provides the behaviour.
+      # See the ieee(3) manual page, also available at
+      # <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/0600____.HTM>
+      if test -n "$GCC"; then
+        # GCC has the option -mieee.
+        # For full IEEE compliance (rarely needed), use option -mieee-with-inexact.
+        CPPFLAGS="$CPPFLAGS -mieee"
+      else
+        # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact.
+        # For full IEEE compliance (rarely needed), use option -ieee_with_inexact.
+        CPPFLAGS="$CPPFLAGS -ieee"
+      fi
+      ;;
+    sh*)
+      if test -n "$GCC"; then
+        # GCC has the option -mieee.
+        CPPFLAGS="$CPPFLAGS -mieee"
+      fi
+      ;;
+  esac
+])
diff --git a/m4/fprintf-posix.m4 b/m4/fprintf-posix.m4
new file mode 100644
index 0000000..d083dab
--- /dev/null
+++ b/m4/fprintf-posix.m4
@@ -0,0 +1,110 @@
+# fprintf-posix.m4 serial 14
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FPRINTF_POSIX],
+[
+  AC_REQUIRE([gl_PRINTF_SIZES_C99])
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  AC_REQUIRE([gl_PRINTF_POSITIONS])
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  gl_cv_func_fprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # fprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_fprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_fprintf_posix = no; then
+    gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+    gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+    gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+    gl_PREREQ_VASNPRINTF_FLAG_ZERO
+    gl_PREREQ_VASNPRINTF_PRECISION
+    gl_PREREQ_VASNPRINTF_ENOMEM
+    gl_REPLACE_VASNPRINTF
+    gl_REPLACE_FPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_FPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([fprintf])
+  REPLACE_FPRINTF=1
+  AC_DEFINE([REPLACE_FPRINTF_POSIX], [1],
+    [Define if fprintf is overridden by a POSIX compliant gnulib implementation.])
+  gl_PREREQ_FPRINTF
+])
+
+AC_DEFUN([gl_PREREQ_FPRINTF], [:])
diff --git a/m4/frexp.m4 b/m4/frexp.m4
new file mode 100644
index 0000000..fb8db70
--- /dev/null
+++ b/m4/frexp.m4
@@ -0,0 +1,170 @@
+# frexp.m4 serial 14
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FREXP],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
+  FREXP_LIBM=
+  if test $gl_cv_func_frexp_no_libm = no; then
+    AC_CACHE_CHECK([whether frexp() can be used with libm],
+      [gl_cv_func_frexp_in_libm],
+      [
+        save_LIBS="$LIBS"
+        LIBS="$LIBS -lm"
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[#include <math.h>
+               double x;]],
+             [[int e; return frexp (x, &e) > 0;]])],
+          [gl_cv_func_frexp_in_libm=yes],
+          [gl_cv_func_frexp_in_libm=no])
+        LIBS="$save_LIBS"
+      ])
+    if test $gl_cv_func_frexp_in_libm = yes; then
+      FREXP_LIBM=-lm
+    fi
+  fi
+  if test $gl_cv_func_frexp_no_libm = yes \
+     || test $gl_cv_func_frexp_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $FREXP_LIBM"
+    gl_FUNC_FREXP_WORKS
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_frexp_works" in
+      *yes) gl_func_frexp=yes ;;
+      *)    gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;;
+    esac
+  else
+    gl_func_frexp=no
+  fi
+  if test $gl_func_frexp = yes; then
+    AC_DEFINE([HAVE_FREXP], [1],
+      [Define if the frexp() function is available and works.])
+  fi
+  AC_SUBST([FREXP_LIBM])
+])
+
+AC_DEFUN([gl_FUNC_FREXP_NO_LIBM],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
+  if test $gl_cv_func_frexp_no_libm = yes; then
+    gl_FUNC_FREXP_WORKS
+    case "$gl_cv_func_frexp_works" in
+      *yes) gl_func_frexp_no_libm=yes ;;
+      *)    gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;;
+    esac
+  else
+    gl_func_frexp_no_libm=no
+    dnl Set REPLACE_FREXP here because the system may have frexp in libm.
+    REPLACE_FREXP=1
+  fi
+  if test $gl_func_frexp_no_libm = yes; then
+    AC_DEFINE([HAVE_FREXP_IN_LIBC], [1],
+      [Define if the frexp() function is available in libc.])
+  fi
+])
+
+dnl Test whether frexp() can be used without linking with libm.
+dnl Set gl_cv_func_frexp_no_libm to 'yes' or 'no' accordingly.
+AC_DEFUN([gl_CHECK_FREXP_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether frexp() can be used without linking with libm],
+    [gl_cv_func_frexp_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             double x;]],
+           [[int e; return frexp (x, &e) > 0;]])],
+        [gl_cv_func_frexp_no_libm=yes],
+        [gl_cv_func_frexp_no_libm=no])
+    ])
+])
+
+dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on
+dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw),
+dnl and on negative zero (this fails e.g. on NetBSD 4.99 and mingw).
+AC_DEFUN([gl_FUNC_FREXP_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CHECK_FUNCS_ONCE([alarm])
+  AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#if HAVE_ALARM
+# include <unistd.h>
+#endif
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   ICC 10.0 has a bug when optimizing the expression -zero.
+   The expression -DBL_MIN * DBL_MIN does not work when cross-compiling
+   to PowerPC on Mac OS X 10.5.  */
+#if defined __hpux || defined __sgi || defined __ICC
+static double
+compute_minus_zero (void)
+{
+  return -DBL_MIN * DBL_MIN;
+}
+# define minus_zero compute_minus_zero ()
+#else
+double minus_zero = -0.0;
+#endif
+int main()
+{
+  int result = 0;
+  int i;
+  volatile double x;
+  double zero = 0.0;
+#if HAVE_ALARM
+  /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
+     number.  Let the test fail in this case.  */
+  alarm (5);
+#endif
+  /* Test on denormalized numbers.  */
+  for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5)
+    ;
+  if (x > 0.0)
+    {
+      int exp;
+      double y = frexp (x, &exp);
+      /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022.
+         On NetBSD: y = 0.75. Correct: y = 0.5.  */
+      if (y != 0.5)
+        result |= 1;
+    }
+  /* Test on infinite numbers.  */
+  x = 1.0 / zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (y != x)
+      result |= 2;
+  }
+  /* Test on negative zero.  */
+  x = minus_zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (memcmp (&y, &x, sizeof x))
+      result |= 4;
+  }
+  return result;
+}]])],
+        [gl_cv_func_frexp_works=yes],
+        [gl_cv_func_frexp_works=no],
+        [case "$host_os" in
+           netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";;
+           *)                        gl_cv_func_frexp_works="guessing yes";;
+         esac
+        ])
+    ])
+])
diff --git a/m4/frexpl.m4 b/m4/frexpl.m4
new file mode 100644
index 0000000..774d540
--- /dev/null
+++ b/m4/frexpl.m4
@@ -0,0 +1,231 @@
+# frexpl.m4 serial 20
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FREXPL],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+
+  dnl Persuade glibc <math.h> to declare frexpl().
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  dnl Check whether it's declared.
+  dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
+  AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
+
+  FREXPL_LIBM=
+  if test $HAVE_DECL_FREXPL = 1; then
+    gl_CHECK_FREXPL_NO_LIBM
+    if test $gl_cv_func_frexpl_no_libm = no; then
+      AC_CACHE_CHECK([whether frexpl() can be used with libm],
+        [gl_cv_func_frexpl_in_libm],
+        [
+          save_LIBS="$LIBS"
+          LIBS="$LIBS -lm"
+          AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <math.h>
+                 long double x;]],
+               [[int e; return frexpl (x, &e) > 0;]])],
+            [gl_cv_func_frexpl_in_libm=yes],
+            [gl_cv_func_frexpl_in_libm=no])
+          LIBS="$save_LIBS"
+        ])
+      if test $gl_cv_func_frexpl_in_libm = yes; then
+        FREXPL_LIBM=-lm
+      fi
+    fi
+    if test $gl_cv_func_frexpl_no_libm = yes \
+       || test $gl_cv_func_frexpl_in_libm = yes; then
+      save_LIBS="$LIBS"
+      LIBS="$LIBS $FREXPL_LIBM"
+      gl_FUNC_FREXPL_WORKS
+      LIBS="$save_LIBS"
+      case "$gl_cv_func_frexpl_works" in
+        *yes) gl_func_frexpl=yes ;;
+        *)    gl_func_frexpl=no; REPLACE_FREXPL=1 ;;
+      esac
+    else
+      gl_func_frexpl=no
+    fi
+    if test $gl_func_frexpl = yes; then
+      AC_DEFINE([HAVE_FREXPL], [1],
+        [Define if the frexpl() function is available.])
+    fi
+  fi
+  if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then
+    dnl Find libraries needed to link lib/frexpl.c.
+    if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+      AC_REQUIRE([gl_FUNC_FREXP])
+      FREXPL_LIBM="$FREXP_LIBM"
+    else
+      FREXPL_LIBM=
+    fi
+  fi
+  AC_SUBST([FREXPL_LIBM])
+])
+
+AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+  dnl Check whether it's declared.
+  dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
+  AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
+  if test $HAVE_DECL_FREXPL = 1; then
+    gl_CHECK_FREXPL_NO_LIBM
+    if test $gl_cv_func_frexpl_no_libm = yes; then
+      gl_FUNC_FREXPL_WORKS
+      case "$gl_cv_func_frexpl_works" in
+        *yes) gl_func_frexpl_no_libm=yes ;;
+        *)    gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
+      esac
+    else
+      gl_func_frexpl_no_libm=no
+      dnl Set REPLACE_FREXPL here because the system may have frexpl in libm.
+      REPLACE_FREXPL=1
+    fi
+    if test $gl_func_frexpl_no_libm = yes; then
+      AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1],
+        [Define if the frexpl() function is available in libc.])
+    fi
+  fi
+])
+
+dnl Test whether frexpl() can be used without linking with libm.
+dnl Set gl_cv_func_frexpl_no_libm to 'yes' or 'no' accordingly.
+AC_DEFUN([gl_CHECK_FREXPL_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether frexpl() can be used without linking with libm],
+    [gl_cv_func_frexpl_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             long double x;]],
+           [[int e; return frexpl (x, &e) > 0;]])],
+        [gl_cv_func_frexpl_no_libm=yes],
+        [gl_cv_func_frexpl_no_libm=no])
+    ])
+])
+
+dnl Test whether frexpl() works on finite numbers (this fails on
+dnl Mac OS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers
+dnl (this fails on Mac OS X 10.5/i386), and also on infinite numbers (this
+dnl fails e.g. on IRIX 6.5 and mingw).
+AC_DEFUN([gl_FUNC_FREXPL_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <math.h>
+/* Override the values of <float.h>, like done in float.in.h.  */
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if defined __i386__ && defined __FreeBSD__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+#endif
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+# endif
+#endif
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double frexpl (long double, int *);
+int main()
+{
+  int result = 0;
+  volatile long double x;
+  /* Test on finite numbers that fails on AIX 5.1.  */
+  x = 16.0L;
+  {
+    int exp = -9999;
+    frexpl (x, &exp);
+    if (exp != 5)
+      result |= 1;
+  }
+  /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
+     function returns an invalid (incorrectly normalized) value: it returns
+               y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
+     but the correct result is
+          0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 }  */
+  x = 1.01L;
+  {
+    int exp = -9999;
+    long double y = frexpl (x, &exp);
+    if (!(exp == 1 && y == 0.505L))
+      result |= 2;
+  }
+  /* Test on large finite numbers.  This fails on BeOS at i = 16322, while
+     LDBL_MAX_EXP = 16384.
+     In the loop end test, we test x against Infinity, rather than comparing
+     i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
+      {
+        int exp = -9999;
+        frexpl (x, &exp);
+        if (exp != i)
+          {
+            result |= 4;
+            break;
+          }
+      }
+  }
+  /* Test on denormalized numbers.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+      ;
+    if (x > 0.0L)
+      {
+        int exp;
+        long double y = frexpl (x, &exp);
+        /* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
+           exp = -16382, y = 0.5.  On Mac OS X 10.5: exp = -16384, y = 0.5.  */
+        if (exp != LDBL_MIN_EXP - 1)
+          result |= 8;
+      }
+  }
+  /* Test on infinite numbers.  */
+  x = 1.0L / 0.0L;
+  {
+    int exp;
+    long double y = frexpl (x, &exp);
+    if (y != x)
+      result |= 16;
+  }
+  return result;
+}]])],
+        [gl_cv_func_frexpl_works=yes],
+        [gl_cv_func_frexpl_works=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*)
+              gl_cv_func_frexpl_works="guessing no";;
+           *) gl_cv_func_frexpl_works="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
diff --git a/m4/fseterr.m4 b/m4/fseterr.m4
new file mode 100644
index 0000000..3eb3197
--- /dev/null
+++ b/m4/fseterr.m4
@@ -0,0 +1,10 @@
+# fseterr.m4 serial 1
+dnl Copyright (C) 2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FSETERR],
+[
+  AC_CHECK_FUNCS_ONCE([__fseterr])
+])
diff --git a/m4/fstat.m4 b/m4/fstat.m4
new file mode 100644
index 0000000..a73baa2
--- /dev/null
+++ b/m4/fstat.m4
@@ -0,0 +1,36 @@
+# fstat.m4 serial 4
+dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FSTAT],
+[
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+
+  AC_REQUIRE([gl_MSVC_INVAL])
+  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+    REPLACE_FSTAT=1
+  fi
+
+  AC_REQUIRE([gl_HEADER_SYS_STAT_H])
+  if test $WINDOWS_64_BIT_ST_SIZE = 1; then
+    REPLACE_FSTAT=1
+  fi
+
+  dnl Replace fstat() for supporting the gnulib-defined open() on directories.
+  m4_ifdef([gl_FUNC_FCHDIR], [
+    gl_TEST_FCHDIR
+    if test $HAVE_FCHDIR = 0; then
+      case "$gl_cv_func_open_directory_works" in
+        *yes) ;;
+        *)
+          REPLACE_FSTAT=1
+          ;;
+      esac
+    fi
+  ])
+])
+
+# Prerequisites of lib/fstat.c.
+AC_DEFUN([gl_PREREQ_FSTAT], [:])
diff --git a/m4/getdelim.m4 b/m4/getdelim.m4
new file mode 100644
index 0000000..a6f4872
--- /dev/null
+++ b/m4/getdelim.m4
@@ -0,0 +1,88 @@
+# getdelim.m4 serial 10
+
+dnl Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc.
+dnl
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_PREREQ([2.59])
+
+AC_DEFUN([gl_FUNC_GETDELIM],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+
+  dnl Persuade glibc <stdio.h> to declare getdelim().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_CHECK_DECLS_ONCE([getdelim])
+
+  AC_CHECK_FUNCS_ONCE([getdelim])
+  if test $ac_cv_func_getdelim = yes; then
+    HAVE_GETDELIM=1
+    dnl Found it in some library.  Verify that it works.
+    AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim],
+    [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+    AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#    include <stdio.h>
+#    include <stdlib.h>
+#    include <string.h>
+    int main ()
+    {
+      FILE *in = fopen ("./conftest.data", "r");
+      if (!in)
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getdelim (&line, &siz, '\n', in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 2;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getdelim (&line, &siz, '\n', in) == -1)
+          return 3;
+      }
+      return 0;
+    }
+    ]])], [gl_cv_func_working_getdelim=yes] dnl The library version works.
+    , [gl_cv_func_working_getdelim=no] dnl The library version does NOT work.
+    , dnl We're cross compiling. Assume it works on glibc2 systems.
+      [AC_EGREP_CPP([Lucky GNU user],
+         [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2) && !defined __UCLIBC__
+  Lucky GNU user
+ #endif
+#endif
+         ],
+         [gl_cv_func_working_getdelim="guessing yes"],
+         [gl_cv_func_working_getdelim="guessing no"])]
+    )])
+    case "$gl_cv_func_working_getdelim" in
+      *no)
+        REPLACE_GETDELIM=1
+        ;;
+    esac
+  else
+    HAVE_GETDELIM=0
+  fi
+
+  if test $ac_cv_have_decl_getdelim = no; then
+    HAVE_DECL_GETDELIM=0
+  fi
+])
+
+# Prerequisites of lib/getdelim.c.
+AC_DEFUN([gl_PREREQ_GETDELIM],
+[
+  AC_CHECK_FUNCS([flockfile funlockfile])
+  AC_CHECK_DECLS([getc_unlocked])
+])
diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4
new file mode 100644
index 0000000..88a6117
--- /dev/null
+++ b/m4/getdtablesize.m4
@@ -0,0 +1,17 @@
+# getdtablesize.m4 serial 4
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_GETDTABLESIZE],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([getdtablesize])
+  if test $ac_cv_func_getdtablesize != yes; then
+    HAVE_GETDTABLESIZE=0
+  fi
+])
+
+# Prerequisites of lib/getdtablesize.c.
+AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:])
diff --git a/m4/getline.m4 b/m4/getline.m4
new file mode 100644
index 0000000..72fbc9d
--- /dev/null
+++ b/m4/getline.m4
@@ -0,0 +1,96 @@
+# getline.m4 serial 26
+
+dnl Copyright (C) 1998-2003, 2005-2007, 2009-2012 Free Software Foundation,
+dnl Inc.
+dnl
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_PREREQ([2.59])
+
+dnl See if there's a working, system-supplied version of the getline function.
+dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems
+dnl have a function by that name in -linet that doesn't have anything
+dnl to do with the function we need.
+AC_DEFUN([gl_FUNC_GETLINE],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+
+  dnl Persuade glibc <stdio.h> to declare getline().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_CHECK_DECLS_ONCE([getline])
+
+  gl_getline_needs_run_time_check=no
+  AC_CHECK_FUNC([getline],
+                [dnl Found it in some library.  Verify that it works.
+                 gl_getline_needs_run_time_check=yes],
+                [am_cv_func_working_getline=no])
+  if test $gl_getline_needs_run_time_check = yes; then
+    AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline],
+    [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+    AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#    include <stdio.h>
+#    include <stdlib.h>
+#    include <string.h>
+    int main ()
+    {
+      FILE *in = fopen ("./conftest.data", "r");
+      if (!in)
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getline (&line, &siz, in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 2;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getline (&line, &siz, in) == -1)
+          return 3;
+      }
+      return 0;
+    }
+    ]])], [am_cv_func_working_getline=yes] dnl The library version works.
+    , [am_cv_func_working_getline=no] dnl The library version does NOT work.
+    , dnl We're cross compiling. Assume it works on glibc2 systems.
+      [AC_EGREP_CPP([Lucky GNU user],
+         [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2) && !defined __UCLIBC__
+  Lucky GNU user
+ #endif
+#endif
+         ],
+         [am_cv_func_working_getline="guessing yes"],
+         [am_cv_func_working_getline="guessing no"])]
+    )])
+  fi
+
+  if test $ac_cv_have_decl_getline = no; then
+    HAVE_DECL_GETLINE=0
+  fi
+
+  case "$am_cv_func_working_getline" in
+    *no)
+      dnl Set REPLACE_GETLINE always: Even if we have not found the broken
+      dnl getline function among $LIBS, it may exist in libinet and the
+      dnl executable may be linked with -linet.
+      REPLACE_GETLINE=1
+      ;;
+  esac
+])
+
+# Prerequisites of lib/getline.c.
+AC_DEFUN([gl_PREREQ_GETLINE],
+[
+  :
+])
diff --git a/m4/getopt.m4 b/m4/getopt.m4
index e60b746..f6902b5 100644
--- a/m4/getopt.m4
+++ b/m4/getopt.m4
@@ -1,19 +1,355 @@
-# getopt.m4 serial 12
-dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# getopt.m4 serial 44
+dnl Copyright (C) 2002-2006, 2008-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-# The getopt module assume you want GNU getopt, with getopt_long etc,
-# rather than vanilla POSIX getopt.  This means your your code should
-# always include <getopt.h> for the getopt prototypes.
-
-AC_DEFUN([gl_GETOPT_SUBSTITUTE],
+# Request a POSIX compliant getopt function.
+AC_DEFUN([gl_FUNC_GETOPT_POSIX],
 [
-  AC_LIBOBJ([getopt])
-  AC_LIBOBJ([getopt1])
-  gl_GETOPT_SUBSTITUTE_HEADER
-  gl_PREREQ_GETOPT
+  m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX])
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
+  dnl Other modules can request the gnulib implementation of the getopt
+  dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS.
+  dnl argp.m4 does this.
+  m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [
+    REPLACE_GETOPT=1
+  ], [
+    REPLACE_GETOPT=0
+    if test -n "$gl_replace_getopt"; then
+      REPLACE_GETOPT=1
+    fi
+  ])
+  if test $REPLACE_GETOPT = 1; then
+    dnl Arrange for getopt.h to be created.
+    gl_GETOPT_SUBSTITUTE_HEADER
+  fi
+])
+
+# Request a POSIX compliant getopt function with GNU extensions (such as
+# options with optional arguments) and the functions getopt_long,
+# getopt_long_only.
+AC_DEFUN([gl_FUNC_GETOPT_GNU],
+[
+  m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU])
+
+  AC_REQUIRE([gl_FUNC_GETOPT_POSIX])
+])
+
+# Determine whether to replace the entire getopt facility.
+AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON
+
+  dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  gl_CHECK_NEXT_HEADERS([getopt.h])
+  if test $ac_cv_header_getopt_h = yes; then
+    HAVE_GETOPT_H=1
+  else
+    HAVE_GETOPT_H=0
+  fi
+  AC_SUBST([HAVE_GETOPT_H])
+
+  gl_replace_getopt=
+
+  dnl Test whether <getopt.h> is available.
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
+  fi
+
+  dnl Test whether the function getopt_long is available.
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes])
+  fi
+
+  dnl POSIX 2008 does not specify leading '+' behavior, but see
+  dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on
+  dnl the next version of POSIX.  For now, we only guarantee leading '+'
+  dnl behavior with getopt-gnu.
+  if test -z "$gl_replace_getopt"; then
+    AC_CACHE_CHECK([whether getopt is POSIX compatible],
+      [gl_cv_func_getopt_posix],
+      [
+        dnl Merging these three different test programs into a single one
+        dnl would require a reset mechanism. On BSD systems, it can be done
+        dnl through 'optreset'; on some others (glibc), it can be done by
+        dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1,
+        dnl Solaris 9, musl libc), there is no such mechanism.
+        if test $cross_compiling = no; then
+          dnl Sanity check. Succeeds everywhere (except on MSVC,
+          dnl which lacks <unistd.h> and getopt() entirely).
+          AC_RUN_IFELSE(
+            [AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+  static char program[] = "program";
+  static char a[] = "-a";
+  static char foo[] = "foo";
+  static char bar[] = "bar";
+  char *argv[] = { program, a, foo, bar, NULL };
+  int c;
+
+  c = getopt (4, argv, "ab");
+  if (!(c == 'a'))
+    return 1;
+  c = getopt (4, argv, "ab");
+  if (!(c == -1))
+    return 2;
+  if (!(optind == 2))
+    return 3;
+  return 0;
+}
+]])],
+            [gl_cv_func_getopt_posix=maybe],
+            [gl_cv_func_getopt_posix=no])
+          if test $gl_cv_func_getopt_posix = maybe; then
+            dnl Sanity check with '+'. Succeeds everywhere (except on MSVC,
+            dnl which lacks <unistd.h> and getopt() entirely).
+            AC_RUN_IFELSE(
+              [AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+  static char program[] = "program";
+  static char donald[] = "donald";
+  static char p[] = "-p";
+  static char billy[] = "billy";
+  static char duck[] = "duck";
+  static char a[] = "-a";
+  static char bar[] = "bar";
+  char *argv[] = { program, donald, p, billy, duck, a, bar, NULL };
+  int c;
+
+  c = getopt (7, argv, "+abp:q:");
+  if (!(c == -1))
+    return 4;
+  if (!(strcmp (argv[0], "program") == 0))
+    return 5;
+  if (!(strcmp (argv[1], "donald") == 0))
+    return 6;
+  if (!(strcmp (argv[2], "-p") == 0))
+    return 7;
+  if (!(strcmp (argv[3], "billy") == 0))
+    return 8;
+  if (!(strcmp (argv[4], "duck") == 0))
+    return 9;
+  if (!(strcmp (argv[5], "-a") == 0))
+    return 10;
+  if (!(strcmp (argv[6], "bar") == 0))
+    return 11;
+  if (!(optind == 1))
+    return 12;
+  return 0;
+}
+]])],
+              [gl_cv_func_getopt_posix=maybe],
+              [gl_cv_func_getopt_posix=no])
+          fi
+          if test $gl_cv_func_getopt_posix = maybe; then
+            dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug.
+            AC_RUN_IFELSE(
+              [AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+  static char program[] = "program";
+  static char ab[] = "-ab";
+  char *argv[3] = { program, ab, NULL };
+  if (getopt (2, argv, "ab:") != 'a')
+    return 13;
+  if (getopt (2, argv, "ab:") != '?')
+    return 14;
+  if (optopt != 'b')
+    return 15;
+  if (optind != 2)
+    return 16;
+  return 0;
+}
+]])],
+              [gl_cv_func_getopt_posix=yes],
+              [gl_cv_func_getopt_posix=no])
+          fi
+        else
+          case "$host_os" in
+            darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";;
+            *)                       gl_cv_func_getopt_posix="guessing yes";;
+          esac
+        fi
+      ])
+    case "$gl_cv_func_getopt_posix" in
+      *no) gl_replace_getopt=yes ;;
+    esac
+  fi
+
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu],
+      [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
+       # optstring is necessary for programs like m4 that have POSIX-mandated
+       # semantics for supporting options interspersed with files.
+       # Also, since getopt_long is a GNU extension, we require optind=0.
+       # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT;
+       # so take care to revert to the correct (non-)export state.
+dnl GNU Coding Standards currently allow awk but not env; besides, env
+dnl is ambiguous with environment values that contain newlines.
+       gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }'
+       case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in
+         xx) gl_had_POSIXLY_CORRECT=exported ;;
+         x)  gl_had_POSIXLY_CORRECT=yes      ;;
+         *)  gl_had_POSIXLY_CORRECT=         ;;
+       esac
+       POSIXLY_CORRECT=1
+       export POSIXLY_CORRECT
+       AC_RUN_IFELSE(
+        [AC_LANG_PROGRAM([[#include <getopt.h>
+                           #include <stddef.h>
+                           #include <string.h>
+           ]GL_NOCRASH[
+           ]], [[
+             int result = 0;
+
+             nocrash_init();
+
+             /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
+                and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
+                OSF/1 5.1, Solaris 10.  */
+             {
+               static char conftest[] = "conftest";
+               static char plus[] = "-+";
+               char *argv[3] = { conftest, plus, NULL };
+               opterr = 0;
+               if (getopt (2, argv, "+a") != '?')
+                 result |= 1;
+             }
+             /* This code succeeds on glibc 2.8, mingw,
+                and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
+                IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x.  */
+             {
+               static char program[] = "program";
+               static char p[] = "-p";
+               static char foo[] = "foo";
+               static char bar[] = "bar";
+               char *argv[] = { program, p, foo, bar, NULL };
+
+               optind = 1;
+               if (getopt (4, argv, "p::") != 'p')
+                 result |= 2;
+               else if (optarg != NULL)
+                 result |= 4;
+               else if (getopt (4, argv, "p::") != -1)
+                 result |= 6;
+               else if (optind != 2)
+                 result |= 8;
+             }
+             /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0.  */
+             {
+               static char program[] = "program";
+               static char foo[] = "foo";
+               static char p[] = "-p";
+               char *argv[] = { program, foo, p, NULL };
+               optind = 0;
+               if (getopt (3, argv, "-p") != 1)
+                 result |= 16;
+               else if (getopt (3, argv, "-p") != 'p')
+                 result |= 16;
+             }
+             /* This code fails on glibc 2.11.  */
+             {
+               static char program[] = "program";
+               static char b[] = "-b";
+               static char a[] = "-a";
+               char *argv[] = { program, b, a, NULL };
+               optind = opterr = 0;
+               if (getopt (3, argv, "+:a:b") != 'b')
+                 result |= 32;
+               else if (getopt (3, argv, "+:a:b") != ':')
+                 result |= 32;
+             }
+             /* This code dumps core on glibc 2.14.  */
+             {
+               static char program[] = "program";
+               static char w[] = "-W";
+               static char dummy[] = "dummy";
+               char *argv[] = { program, w, dummy, NULL };
+               optind = opterr = 1;
+               if (getopt (3, argv, "W;") != 'W')
+                 result |= 64;
+             }
+             return result;
+           ]])],
+        [gl_cv_func_getopt_gnu=yes],
+        [gl_cv_func_getopt_gnu=no],
+        [dnl Cross compiling. Assume the worst, even on glibc platforms.
+         gl_cv_func_getopt_gnu="guessing no"
+        ])
+       case $gl_had_POSIXLY_CORRECT in
+         exported) ;;
+         yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;;
+         *) AS_UNSET([POSIXLY_CORRECT]) ;;
+       esac
+      ])
+    if test "$gl_cv_func_getopt_gnu" != yes; then
+      gl_replace_getopt=yes
+    else
+      AC_CACHE_CHECK([for working GNU getopt_long function],
+        [gl_cv_func_getopt_long_gnu],
+        [AC_RUN_IFELSE(
+           [AC_LANG_PROGRAM(
+              [[#include <getopt.h>
+                #include <stddef.h>
+                #include <string.h>
+              ]],
+              [[static const struct option long_options[] =
+                  {
+                    { "xtremely-",no_argument,       NULL, 1003 },
+                    { "xtra",     no_argument,       NULL, 1001 },
+                    { "xtreme",   no_argument,       NULL, 1002 },
+                    { "xtremely", no_argument,       NULL, 1003 },
+                    { NULL,       0,                 NULL, 0 }
+                  };
+                /* This code fails on OpenBSD 5.0.  */
+                {
+                  static char program[] = "program";
+                  static char xtremel[] = "--xtremel";
+                  char *argv[] = { program, xtremel, NULL };
+                  int option_index;
+                  optind = 1; opterr = 0;
+                  if (getopt_long (2, argv, "", long_options, &option_index) != 1003)
+                    return 1;
+                }
+                return 0;
+              ]])],
+           [gl_cv_func_getopt_long_gnu=yes],
+           [gl_cv_func_getopt_long_gnu=no],
+           [dnl Cross compiling. Guess no on OpenBSD, yes otherwise.
+            case "$host_os" in
+              openbsd*) gl_cv_func_getopt_long_gnu="guessing no";;
+              *)        gl_cv_func_getopt_long_gnu="guessing yes";;
+            esac
+           ])
+        ])
+      case "$gl_cv_func_getopt_long_gnu" in
+        *yes) ;;
+        *) gl_replace_getopt=yes ;;
+      esac
+    fi
+  fi
 ])
 
 AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
@@ -25,57 +361,6 @@
   AC_SUBST([GETOPT_H])
 ])
 
-AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
-[
-  if test -z "$GETOPT_H"; then
-    AC_CHECK_HEADERS([getopt.h], [], [GETOPT_H=getopt.h])
-  fi
-
-  if test -z "$GETOPT_H"; then
-    AC_CHECK_FUNCS([getopt_long_only], [], [GETOPT_H=getopt.h])
-  fi
-
-  dnl BSD getopt_long uses an incompatible method to reset option processing,
-  dnl and (as of 2004-10-15) mishandles optional option-arguments.
-  if test -z "$GETOPT_H"; then
-    AC_CHECK_DECL([optreset], [GETOPT_H=getopt.h], [], [#include <getopt.h>])
-  fi
-
-  dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
-  dnl option string (as of 2005-05-05).
-  if test -z "$GETOPT_H"; then
-    AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_gnu_getopt],
-      [AC_RUN_IFELSE(
-	[AC_LANG_PROGRAM([#include <getopt.h>],
-	   [[
-	     char *myargv[3];
-	     myargv[0] = "conftest";
-	     myargv[1] = "-+";
-	     myargv[2] = 0;
-	     return getopt (2, myargv, "+a") != '?';
-	   ]])],
-	[gl_cv_func_gnu_getopt=yes],
-	[gl_cv_func_gnu_getopt=no],
-	[dnl cross compiling - pessimistically guess based on decls
-	 dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
-	 dnl option string (as of 2005-05-05).
-	 AC_CHECK_DECL([getopt_clip],
-	   [gl_cv_func_gnu_getopt=no], [gl_cv_func_gnu_getopt=yes],
-	   [#include <getopt.h>])])])
-    if test "$gl_cv_func_gnu_getopt" = "no"; then
-      GETOPT_H=getopt.h
-    fi
-  fi
-])
-
-AC_DEFUN([gl_GETOPT_IFELSE],
-[
-  AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
-  AS_IF([test -n "$GETOPT_H"], [$1], [$2])
-])
-
-AC_DEFUN([gl_GETOPT], [gl_GETOPT_IFELSE([gl_GETOPT_SUBSTITUTE])])
-
 # Prerequisites of lib/getopt*.
 AC_DEFUN([gl_PREREQ_GETOPT],
 [
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644
index 0000000..017d025
--- /dev/null
+++ b/m4/gettext.m4
@@ -0,0 +1,401 @@
+# gettext.m4 serial 66 (gettext-0.18.2)
+dnl Copyright (C) 1995-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl    default (if it is not specified or empty) is 'no-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.  If NEEDSYMBOL is specified and is
+dnl    'need-formatstring-macros', then GNU gettext implementations that don't
+dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries.  If empty,
+dnl    the value '$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+  dnl Argument checking.
+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+  ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+    [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+  define([gt_included_intl],
+    ifelse([$1], [external],
+      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+      [yes]))
+  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+  gt_NEEDS_INIT
+  AM_GNU_GETTEXT_NEED([$2])
+
+  AC_REQUIRE([AM_PO_SUBDIRS])dnl
+  ifelse(gt_included_intl, yes, [
+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
+  ])
+
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Sometimes libintl requires libiconv, so first search for libiconv.
+  dnl Ideally we would do this search only after the
+  dnl      if test "$USE_NLS" = "yes"; then
+  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl the configure script would need to contain the same shell code
+  dnl again, outside any 'if'. There are two solutions:
+  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+  dnl documented, we avoid it.
+  ifelse(gt_included_intl, yes, , [
+    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+  ])
+
+  dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation.
+  gt_INTL_MACOSX
+
+  dnl Set USE_NLS.
+  AC_REQUIRE([AM_NLS])
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  dnl Add a version number to the cache macros.
+  case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+  dnl If we use NLS figure out what method
+  if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+    ifelse(gt_included_intl, yes, [
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH([included-gettext],
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+    ])
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+         [AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+               ]],
+               [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+               ]])],
+            [eval "$gt_func_gnugettext_libc=yes"],
+            [eval "$gt_func_gnugettext_libc=no"])])
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+          dnl Sometimes libintl requires libiconv, so first search for libiconv.
+          ifelse(gt_included_intl, yes, , [
+            AM_ICONV_LINK
+          ])
+          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+          dnl even if libiconv doesn't exist.
+          AC_LIB_LINKFLAGS_BODY([intl])
+          AC_CACHE_CHECK([for GNU gettext in libintl],
+            [$gt_func_gnugettext_libintl],
+           [gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+            dnl Now see whether libintl exists and does not depend on libiconv.
+            AC_LINK_IFELSE(
+              [AC_LANG_PROGRAM(
+                 [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+                 ]],
+                 [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+                 ]])],
+              [eval "$gt_func_gnugettext_libintl=yes"],
+              [eval "$gt_func_gnugettext_libintl=no"])
+            dnl Now see whether libintl exists and depends on libiconv.
+            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_LINK_IFELSE(
+                [AC_LANG_PROGRAM(
+                   [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+                   ]],
+                   [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+                   ]])],
+                [LIBINTL="$LIBINTL $LIBICONV"
+                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                 eval "$gt_func_gnugettext_libintl=yes"
+                ])
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"])
+        fi
+
+        dnl If an already present or preinstalled GNU gettext() is found,
+        dnl use it.  But if this macro is used in GNU gettext, and GNU
+        dnl gettext is already preinstalled in libintl, we update this
+        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+          dnl Reset the values set by searching for libintl.
+          LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+    ifelse(gt_included_intl, yes, [
+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+          dnl GNU gettext is not found in the C library.
+          dnl Fall back on included GNU gettext library.
+          nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      CATOBJEXT=
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions to use GNU gettext tools.
+        CATOBJEXT=.gmo
+      fi
+    ])
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Some extra flags are needed during linking.
+        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+      AC_DEFINE([ENABLE_NLS], [1],
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  AC_MSG_CHECKING([whether to use NLS])
+  AC_MSG_RESULT([$USE_NLS])
+  if test "$USE_NLS" = "yes"; then
+    AC_MSG_CHECKING([where the gettext function comes from])
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    AC_MSG_RESULT([$gt_source])
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        AC_MSG_CHECKING([how to link with libintl])
+        AC_MSG_RESULT([$LIBINTL])
+        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+      fi
+
+      dnl For backward compatibility. Some packages may be using this.
+      AC_DEFINE([HAVE_GETTEXT], [1],
+       [Define if the GNU gettext() function is already present or preinstalled.])
+      AC_DEFINE([HAVE_DCGETTEXT], [1],
+       [Define if the GNU dcgettext() function is already present or preinstalled.])
+    fi
+
+    dnl We need to process the po/ directory.
+    POSUB=po
+  fi
+
+  ifelse(gt_included_intl, yes, [
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST([BUILD_INCLUDED_LIBINTL])
+    AC_SUBST([USE_INCLUDED_LIBINTL])
+    AC_SUBST([CATOBJEXT])
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST([DATADIRNAME])
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST([INSTOBJEXT])
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST([GENCAT])
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INTLOBJS=
+    if test "$USE_INCLUDED_LIBINTL" = yes; then
+      INTLOBJS="\$(GETTOBJS)"
+    fi
+    AC_SUBST([INTLOBJS])
+
+    dnl Enable libtool support if the surrounding package wishes it.
+    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+    AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+  ])
+
+  dnl For backward compatibility. Some Makefiles may be using this.
+  INTLLIBS="$LIBINTL"
+  AC_SUBST([INTLLIBS])
+
+  dnl Make all documented variables known to autoconf.
+  AC_SUBST([LIBINTL])
+  AC_SUBST([LTLIBINTL])
+  AC_SUBST([POSUB])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+  m4_divert_text([DEFAULTS], [gt_needs=])
+  m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/gettext_gl.m4 b/m4/gettext_gl.m4
deleted file mode 100644
index 023f7bc..0000000
--- a/m4/gettext_gl.m4
+++ /dev/null
@@ -1,427 +0,0 @@
-# gettext.m4 serial 37 (gettext-0.14.4)
-dnl Copyright (C) 1995-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-dnl Macro to add for using GNU gettext.
-
-dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-dnl    default (if it is not specified or empty) is 'no-libtool'.
-dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
-dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
-dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
-dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-dnl    depending on --{enable,disable}-{shared,static} and on the presence of
-dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-dnl    $(top_builddir)/intl/libintl.a will be created.
-dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-dnl    implementations (in libc or libintl) without the ngettext() function
-dnl    will be ignored.  If NEEDSYMBOL is specified and is
-dnl    'need-formatstring-macros', then GNU gettext implementations that don't
-dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
-dnl INTLDIR is used to find the intl libraries.  If empty,
-dnl    the value `$(top_builddir)/intl/' is used.
-dnl
-dnl The result of the configuration is one of three cases:
-dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-dnl    and used.
-dnl    Catalog format: GNU --> install in $(datadir)
-dnl    Catalog extension: .mo after installation, .gmo in source tree
-dnl 2) GNU gettext has been found in the system's C library.
-dnl    Catalog format: GNU --> install in $(datadir)
-dnl    Catalog extension: .mo after installation, .gmo in source tree
-dnl 3) No internationalization, always use English msgid.
-dnl    Catalog format: none
-dnl    Catalog extension: none
-dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-dnl The use of .gmo is historical (it was needed to avoid overwriting the
-dnl GNU format catalogs when building on a platform with an X/Open gettext),
-dnl but we keep it in order not to force irrelevant filename changes on the
-dnl maintainers.
-dnl
-AC_DEFUN([AM_GNU_GETTEXT],
-[
-  dnl Argument checking.
-  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
-    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
-  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
-    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-])])])])
-  define([gt_included_intl], ifelse([$1], [external], [no], [yes]))
-  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
-
-  AC_REQUIRE([AM_PO_SUBDIRS])dnl
-  ifelse(gt_included_intl, yes, [
-    AC_REQUIRE([AM_INTL_SUBDIR])dnl
-  ])
-
-  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
-  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-  AC_REQUIRE([AC_LIB_RPATH])
-
-  dnl Sometimes libintl requires libiconv, so first search for libiconv.
-  dnl Ideally we would do this search only after the
-  dnl      if test "$USE_NLS" = "yes"; then
-  dnl        if test "$gt_cv_func_gnugettext_libc" != "yes"; then
-  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
-  dnl the configure script would need to contain the same shell code
-  dnl again, outside any 'if'. There are two solutions:
-  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
-  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
-  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
-  dnl documented, we avoid it.
-  ifelse(gt_included_intl, yes, , [
-    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-  ])
-
-  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
-  gt_INTL_MACOSX
-
-  dnl Set USE_NLS.
-  AM_NLS
-
-  ifelse(gt_included_intl, yes, [
-    BUILD_INCLUDED_LIBINTL=no
-    USE_INCLUDED_LIBINTL=no
-  ])
-  LIBINTL=
-  LTLIBINTL=
-  POSUB=
-
-  dnl If we use NLS figure out what method
-  if test "$USE_NLS" = "yes"; then
-    gt_use_preinstalled_gnugettext=no
-    ifelse(gt_included_intl, yes, [
-      AC_MSG_CHECKING([whether included gettext is requested])
-      AC_ARG_WITH(included-gettext,
-        [  --with-included-gettext use the GNU gettext library included here],
-        nls_cv_force_use_gnu_gettext=$withval,
-        nls_cv_force_use_gnu_gettext=no)
-      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-
-      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
-      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
-    ])
-        dnl User does not insist on using GNU NLS library.  Figure out what
-        dnl to use.  If GNU gettext is available we use this.  Else we have
-        dnl to fall back to GNU NLS library.
-
-        dnl Add a version number to the cache macros.
-        define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
-        define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
-        define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
-
-        AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
-         [AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;],
-            [bindtextdomain ("", "");
-return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
-            gt_cv_func_gnugettext_libc=yes,
-            gt_cv_func_gnugettext_libc=no)])
-
-        if test "$gt_cv_func_gnugettext_libc" != "yes"; then
-          dnl Sometimes libintl requires libiconv, so first search for libiconv.
-          ifelse(gt_included_intl, yes, , [
-            AM_ICONV_LINK
-          ])
-          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
-          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
-          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
-          dnl even if libiconv doesn't exist.
-          AC_LIB_LINKFLAGS_BODY([intl])
-          AC_CACHE_CHECK([for GNU gettext in libintl],
-            gt_cv_func_gnugettext_libintl,
-           [gt_save_CPPFLAGS="$CPPFLAGS"
-            CPPFLAGS="$CPPFLAGS $INCINTL"
-            gt_save_LIBS="$LIBS"
-            LIBS="$LIBS $LIBINTL"
-            dnl Now see whether libintl exists and does not depend on libiconv.
-            AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);],
-              [bindtextdomain ("", "");
-return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
-              gt_cv_func_gnugettext_libintl=yes,
-              gt_cv_func_gnugettext_libintl=no)
-            dnl Now see whether libintl exists and depends on libiconv.
-            if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
-              LIBS="$LIBS $LIBICONV"
-              AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);],
-                [bindtextdomain ("", "");
-return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
-               [LIBINTL="$LIBINTL $LIBICONV"
-                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
-                gt_cv_func_gnugettext_libintl=yes
-               ])
-            fi
-            CPPFLAGS="$gt_save_CPPFLAGS"
-            LIBS="$gt_save_LIBS"])
-        fi
-
-        dnl If an already present or preinstalled GNU gettext() is found,
-        dnl use it.  But if this macro is used in GNU gettext, and GNU
-        dnl gettext is already preinstalled in libintl, we update this
-        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
-        if test "$gt_cv_func_gnugettext_libc" = "yes" \
-           || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
-                && test "$PACKAGE" != gettext-runtime \
-                && test "$PACKAGE" != gettext-tools; }; then
-          gt_use_preinstalled_gnugettext=yes
-        else
-          dnl Reset the values set by searching for libintl.
-          LIBINTL=
-          LTLIBINTL=
-          INCINTL=
-        fi
-
-    ifelse(gt_included_intl, yes, [
-        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
-          dnl GNU gettext is not found in the C library.
-          dnl Fall back on included GNU gettext library.
-          nls_cv_use_gnu_gettext=yes
-        fi
-      fi
-
-      if test "$nls_cv_use_gnu_gettext" = "yes"; then
-        dnl Mark actions used to generate GNU NLS library.
-        BUILD_INCLUDED_LIBINTL=yes
-        USE_INCLUDED_LIBINTL=yes
-        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
-        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
-        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
-      fi
-
-      CATOBJEXT=
-      if test "$gt_use_preinstalled_gnugettext" = "yes" \
-         || test "$nls_cv_use_gnu_gettext" = "yes"; then
-        dnl Mark actions to use GNU gettext tools.
-        CATOBJEXT=.gmo
-      fi
-    ])
-
-    if test -n "$INTL_MACOSX_LIBS"; then
-      if test "$gt_use_preinstalled_gnugettext" = "yes" \
-         || test "$nls_cv_use_gnu_gettext" = "yes"; then
-        dnl Some extra flags are needed during linking.
-        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
-        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
-      fi
-    fi
-
-    if test "$gt_use_preinstalled_gnugettext" = "yes" \
-       || test "$nls_cv_use_gnu_gettext" = "yes"; then
-      AC_DEFINE(ENABLE_NLS, 1,
-        [Define to 1 if translation of program messages to the user's native language
-   is requested.])
-    else
-      USE_NLS=no
-    fi
-  fi
-
-  AC_MSG_CHECKING([whether to use NLS])
-  AC_MSG_RESULT([$USE_NLS])
-  if test "$USE_NLS" = "yes"; then
-    AC_MSG_CHECKING([where the gettext function comes from])
-    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-      if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
-        gt_source="external libintl"
-      else
-        gt_source="libc"
-      fi
-    else
-      gt_source="included intl directory"
-    fi
-    AC_MSG_RESULT([$gt_source])
-  fi
-
-  if test "$USE_NLS" = "yes"; then
-
-    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-      if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
-        AC_MSG_CHECKING([how to link with libintl])
-        AC_MSG_RESULT([$LIBINTL])
-        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
-      fi
-
-      dnl For backward compatibility. Some packages may be using this.
-      AC_DEFINE(HAVE_GETTEXT, 1,
-       [Define if the GNU gettext() function is already present or preinstalled.])
-      AC_DEFINE(HAVE_DCGETTEXT, 1,
-       [Define if the GNU dcgettext() function is already present or preinstalled.])
-    fi
-
-    dnl We need to process the po/ directory.
-    POSUB=po
-  fi
-
-  ifelse(gt_included_intl, yes, [
-    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
-    dnl to 'yes' because some of the testsuite requires it.
-    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
-      BUILD_INCLUDED_LIBINTL=yes
-    fi
-
-    dnl Make all variables we use known to autoconf.
-    AC_SUBST(BUILD_INCLUDED_LIBINTL)
-    AC_SUBST(USE_INCLUDED_LIBINTL)
-    AC_SUBST(CATOBJEXT)
-
-    dnl For backward compatibility. Some configure.ins may be using this.
-    nls_cv_header_intl=
-    nls_cv_header_libgt=
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    DATADIRNAME=share
-    AC_SUBST(DATADIRNAME)
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    INSTOBJEXT=.mo
-    AC_SUBST(INSTOBJEXT)
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    GENCAT=gencat
-    AC_SUBST(GENCAT)
-
-    dnl For backward compatibility. Some Makefiles may be using this.
-    INTLOBJS=
-    if test "$USE_INCLUDED_LIBINTL" = yes; then
-      INTLOBJS="\$(GETTOBJS)"
-    fi
-    AC_SUBST(INTLOBJS)
-
-    dnl Enable libtool support if the surrounding package wishes it.
-    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
-    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
-  ])
-
-  dnl For backward compatibility. Some Makefiles may be using this.
-  INTLLIBS="$LIBINTL"
-  AC_SUBST(INTLLIBS)
-
-  dnl Make all documented variables known to autoconf.
-  AC_SUBST(LIBINTL)
-  AC_SUBST(LTLIBINTL)
-  AC_SUBST(POSUB)
-])
-
-
-dnl Checks for all prerequisites of the intl subdirectory,
-dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
-dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
-    AC_DEFUN([AM_INTL_SUBDIR], [])
-
-
-dnl Checks for special options needed on MacOS X.
-dnl Defines INTL_MACOSX_LIBS.
-AC_DEFUN([gt_INTL_MACOSX],
-[
-  dnl Check for API introduced in MacOS X 10.2.
-  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
-    gt_cv_func_CFPreferencesCopyAppValue,
-    [gt_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
-     gt_save_LIBS="$LIBS"
-     LIBS="$LIBS -framework CoreFoundation"
-     AC_TRY_LINK([#include <CFPreferences.h>],
-       [CFPreferencesCopyAppValue(NULL, NULL)],
-       [gt_cv_func_CFPreferencesCopyAppValue=yes],
-       [gt_cv_func_CFPreferencesCopyAppValue=no])
-     CPPFLAGS="$gt_save_CPPFLAGS"
-     LIBS="$gt_save_LIBS"])
-  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
-    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
-      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
-  fi
-  dnl Check for API introduced in MacOS X 10.3.
-  AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
-    [gt_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
-     gt_save_LIBS="$LIBS"
-     LIBS="$LIBS -framework CoreFoundation"
-     AC_TRY_LINK([#include <CFLocale.h>], [CFLocaleCopyCurrent();],
-       [gt_cv_func_CFLocaleCopyCurrent=yes],
-       [gt_cv_func_CFLocaleCopyCurrent=no])
-     CPPFLAGS="$gt_save_CPPFLAGS"
-     LIBS="$gt_save_LIBS"])
-  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
-    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
-      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
-  fi
-  INTL_MACOSX_LIBS=
-  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
-    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
-  fi
-  AC_SUBST([INTL_MACOSX_LIBS])
-])
-
-
-dnl gt_CHECK_DECL(FUNC, INCLUDES)
-dnl Check whether a function is declared.
-AC_DEFUN([gt_CHECK_DECL],
-[
-  AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
-    [AC_TRY_COMPILE([$2], [
-#ifndef $1
-  char *p = (char *) $1;
-#endif
-], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
-  if test $ac_cv_have_decl_$1 = yes; then
-    gt_value=1
-  else
-    gt_value=0
-  fi
-  AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
-    [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
new file mode 100644
index 0000000..c938fb1
--- /dev/null
+++ b/m4/glibc21.m4
@@ -0,0 +1,34 @@
+# glibc21.m4 serial 5
+dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.1 or newer, or uClibc.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+  [
+    AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc],
+      [ac_cv_gnu_library_2_1],
+      [AC_EGREP_CPP([Lucky],
+        [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+#ifdef __UCLIBC__
+ Lucky user
+#endif
+        ],
+        [ac_cv_gnu_library_2_1=yes],
+        [ac_cv_gnu_library_2_1=no])
+      ]
+    )
+    AC_SUBST([GLIBC21])
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4
new file mode 100644
index 0000000..15d2b2b
--- /dev/null
+++ b/m4/gnulib-common.m4
@@ -0,0 +1,373 @@
+# gnulib-common.m4 serial 33
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_COMMON
+# is expanded unconditionally through gnulib-tool magic.
+AC_DEFUN([gl_COMMON], [
+  dnl Use AC_REQUIRE here, so that the code is expanded once only.
+  AC_REQUIRE([gl_00GNULIB])
+  AC_REQUIRE([gl_COMMON_BODY])
+])
+AC_DEFUN([gl_COMMON_BODY], [
+  AH_VERBATIM([_Noreturn],
+[/* The _Noreturn keyword of C11.  */
+#if ! (defined _Noreturn \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+])
+  AH_VERBATIM([isoc99_inline],
+[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for Mac OS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif])
+  AH_VERBATIM([unused_parameter],
+[/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The __const__ attribute was added in gcc 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+])
+  dnl Preparation for running test programs:
+  dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
+  dnl to /dev/tty, so they can be redirected to log files.  Such diagnostics
+  dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
+  LIBC_FATAL_STDERR_=1
+  export LIBC_FATAL_STDERR_
+])
+
+# gl_MODULE_INDICATOR_CONDITION
+# expands to a C preprocessor expression that evaluates to 1 or 0, depending
+# whether a gnulib module that has been requested shall be considered present
+# or not.
+m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
+# sets the shell variable that indicates the presence of the given module to
+# a C preprocessor expression that will evaluate to 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
+[
+  gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
+    [GNULIB_[]m4_translit([[$1]],
+                          [abcdefghijklmnopqrstuvwxyz./-],
+                          [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
+    [gl_MODULE_INDICATOR_CONDITION])
+])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable])
+# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION.
+# The shell variable's value is a C preprocessor expression that evaluates
+# to 0 or 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX],
+[
+  m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1],
+    [
+     dnl Simplify the expression VALUE || 1 to 1.
+     $1=1
+    ],
+    [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1],
+                                             [gl_MODULE_INDICATOR_CONDITION])])
+])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition])
+# modifies the shell variable to include the given condition.  The shell
+# variable's value is a C preprocessor expression that evaluates to 0 or 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR],
+[
+  dnl Simplify the expression 1 || CONDITION to 1.
+  if test "$[]$1" != 1; then
+    dnl Simplify the expression 0 || CONDITION to CONDITION.
+    if test "$[]$1" = 0; then
+      $1=$2
+    else
+      $1="($[]$1 || $2)"
+    fi
+  fi
+])
+
+# gl_MODULE_INDICATOR([modulename])
+# defines a C macro indicating the presence of the given module
+# in a location where it can be used.
+#                                             |  Value  |   Value   |
+#                                             | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules:          |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: |    0    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module not present at all:                  |    0    |     0     |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR],
+[
+  AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
+      [abcdefghijklmnopqrstuvwxyz./-],
+      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
+    [gl_MODULE_INDICATOR_CONDITION],
+    [Define to a C preprocessor expression that evaluates to 1 or 0,
+     depending whether the gnulib module $1 shall be considered present.])
+])
+
+# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
+# defines a C macro indicating the presence of the given module
+# in lib or tests. This is useful to determine whether the module
+# should be tested.
+#                                             |  Value  |   Value   |
+#                                             | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules:          |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module not present at all:                  |    0    |     0     |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
+[
+  AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
+      [abcdefghijklmnopqrstuvwxyz./-],
+      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
+    [Define to 1 when the gnulib module $1 should be tested.])
+])
+
+# gl_ASSERT_NO_GNULIB_POSIXCHECK
+# asserts that there will never be a need to #define GNULIB_POSIXCHECK.
+# and thereby enables an optimization of configure and config.h.
+# Used by Emacs.
+AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK],
+[
+  dnl Override gl_WARN_ON_USE_PREPARE.
+  dnl But hide this definition from 'aclocal'.
+  AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], [])
+])
+
+# gl_ASSERT_NO_GNULIB_TESTS
+# asserts that there will be no gnulib tests in the scope of the configure.ac
+# and thereby enables an optimization of config.h.
+# Used by Emacs.
+AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS],
+[
+  dnl Override gl_MODULE_INDICATOR_FOR_TESTS.
+  AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [])
+])
+
+# Test whether <features.h> exists.
+# Set HAVE_FEATURES_H.
+AC_DEFUN([gl_FEATURES_H],
+[
+  AC_CHECK_HEADERS_ONCE([features.h])
+  if test $ac_cv_header_features_h = yes; then
+    HAVE_FEATURES_H=1
+  else
+    HAVE_FEATURES_H=0
+  fi
+  AC_SUBST([HAVE_FEATURES_H])
+])
+
+# m4_foreach_w
+# is a backport of autoconf-2.59c's m4_foreach_w.
+# Remove this macro when we can assume autoconf >= 2.60.
+m4_ifndef([m4_foreach_w],
+  [m4_define([m4_foreach_w],
+    [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
+
+# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
+# ----------------------------------------------------
+# Backport of autoconf-2.63b's macro.
+# Remove this macro when we can assume autoconf >= 2.64.
+m4_ifndef([AS_VAR_IF],
+[m4_define([AS_VAR_IF],
+[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
+
+# gl_PROG_CC_C99
+# Modifies the value of the shell variable CC in an attempt to make $CC
+# understand ISO C99 source code.
+# This is like AC_PROG_CC_C99, except that
+# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60,
+# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC
+#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00367.html>,
+#   but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99
+#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00441.html>.
+# Remaining problems:
+# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options
+#   to CC twice
+#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00431.html>.
+# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard.
+AC_DEFUN([gl_PROG_CC_C99],
+[
+  dnl Change that version number to the minimum Autoconf version that supports
+  dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls.
+  m4_version_prereq([9.0],
+    [AC_REQUIRE([AC_PROG_CC_C99])],
+    [AC_REQUIRE([AC_PROG_CC_STDC])])
+])
+
+# gl_PROG_AR_RANLIB
+# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler.
+# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override
+# the values.
+AC_DEFUN([gl_PROG_AR_RANLIB],
+[
+  dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
+  dnl as "cc", and GCC as "gcc". They have different object file formats and
+  dnl library formats. In particular, the GNU binutils programs ar, ranlib
+  dnl produce libraries that work only with gcc, not with cc.
+  AC_REQUIRE([AC_PROG_CC])
+  AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
+    [
+      AC_EGREP_CPP([Amsterdam],
+        [
+#ifdef __ACK__
+Amsterdam
+#endif
+        ],
+        [gl_cv_c_amsterdam_compiler=yes],
+        [gl_cv_c_amsterdam_compiler=no])
+    ])
+  if test -z "$AR"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      AR='cc -c.a'
+      if test -z "$ARFLAGS"; then
+        ARFLAGS='-o'
+      fi
+    else
+      dnl Use the Automake-documented default values for AR and ARFLAGS,
+      dnl but prefer ${host}-ar over ar (useful for cross-compiling).
+      AC_CHECK_TOOL([AR], [ar], [ar])
+      if test -z "$ARFLAGS"; then
+        ARFLAGS='cru'
+      fi
+    fi
+  else
+    if test -z "$ARFLAGS"; then
+      ARFLAGS='cru'
+    fi
+  fi
+  AC_SUBST([AR])
+  AC_SUBST([ARFLAGS])
+  if test -z "$RANLIB"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      RANLIB=':'
+    else
+      dnl Use the ranlib program if it is available.
+      AC_PROG_RANLIB
+    fi
+  fi
+  AC_SUBST([RANLIB])
+])
+
+# AC_PROG_MKDIR_P
+# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
+# for interoperability with automake-1.9.6 from autoconf-2.62.
+# Remove this macro when we can assume autoconf >= 2.62 or
+# autoconf >= 2.60 && automake >= 1.10.
+m4_ifdef([AC_PROG_MKDIR_P], [
+  dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
+  m4_define([AC_PROG_MKDIR_P],
+    m4_defn([AC_PROG_MKDIR_P])[
+    AC_SUBST([MKDIR_P])])], [
+  dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
+  AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
+    [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+     MKDIR_P='$(mkdir_p)'
+     AC_SUBST([MKDIR_P])])])
+
+# AC_C_RESTRICT
+# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
+# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
+# works.
+# This definition can be removed once autoconf >= 2.62 can be assumed.
+m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.62]),[-1],[
+AC_DEFUN([AC_C_RESTRICT],
+[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
+  [ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+      [[typedef int * int_ptr;
+        int foo (int_ptr $ac_kw ip) {
+        return ip[0];
+       }]],
+      [[int s[1];
+        int * $ac_kw t = s;
+        t[0] = 0;
+        return foo(t)]])],
+      [ac_cv_c_restrict=$ac_kw])
+     test "$ac_cv_c_restrict" != no && break
+   done
+  ])
+ AH_VERBATIM([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
+/* Work around a bug in Sun C++: it does not support _Restrict, even
+   though the corresponding Sun C compiler does, which causes
+   "#define restrict _Restrict" in the previous line.  Perhaps some future
+   version of Sun C++ will work with _Restrict; if so, it'll probably
+   define __RESTRICT, just as Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+#endif])
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) AC_DEFINE([restrict], []) ;;
+   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
+ esac
+])
+])
+
+# gl_BIGENDIAN
+# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
+# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
+# macros invoke AC_C_BIGENDIAN with arguments.
+AC_DEFUN([gl_BIGENDIAN],
+[
+  AC_C_BIGENDIAN
+])
+
+# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
+# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
+# output a spurious "(cached)" mark in the midst of other configure output.
+# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
+# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
+AC_DEFUN([gl_CACHE_VAL_SILENT],
+[
+  saved_as_echo_n="$as_echo_n"
+  as_echo_n=':'
+  AC_CACHE_VAL([$1], [$2])
+  as_echo_n="$saved_as_echo_n"
+])
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
new file mode 100644
index 0000000..939b4b0
--- /dev/null
+++ b/m4/gnulib-comp.m4
@@ -0,0 +1,1317 @@
+# DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+#
+# This file 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.
+#
+# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the compiled summary of the specification in
+# gnulib-cache.m4. It lists the computed macro invocations that need
+# to be invoked from configure.ac.
+# In projects that use version control, this file can be treated like
+# other built files.
+
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Checks for programs", right after AC_PROG_CC, and certainly before
+# any checks for libraries, header files, types and library functions.
+AC_DEFUN([gl_EARLY],
+[
+  m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
+  m4_pattern_allow([^gl_ES$])dnl a valid locale name
+  m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
+  m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
+  AC_REQUIRE([gl_PROG_AR_RANLIB])
+  AC_REQUIRE([AM_PROG_CC_C_O])
+  # Code from module alloca-opt:
+  # Code from module announce-gen:
+  # Code from module argmatch:
+  # Code from module assert:
+  # Code from module binary-io:
+  # Code from module bitrotate:
+  # Code from module c-ctype:
+  # Code from module c-strcase:
+  # Code from module c-strcaseeq:
+  # Code from module calloc-posix:
+  # Code from module cloexec:
+  # Code from module close:
+  # Code from module close-stream:
+  # Code from module closeout:
+  # Code from module config-h:
+  # Code from module configmake:
+  # Code from module dirname:
+  # Code from module dirname-lgpl:
+  # Code from module do-release-commit-and-tag:
+  # Code from module dosname:
+  # Code from module double-slash-root:
+  # Code from module dup2:
+  # Code from module environ:
+  # Code from module errno:
+  # Code from module error:
+  # Code from module exitfail:
+  # Code from module extensions:
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  # Code from module extern-inline:
+  # Code from module fatal-signal:
+  # Code from module fcntl:
+  # Code from module fcntl-h:
+  # Code from module fd-hook:
+  # Code from module fd-safer-flag:
+  # Code from module fdl:
+  # Code from module float:
+  # Code from module fopen:
+  # Code from module fopen-safer:
+  # Code from module fpending:
+  # Code from module fpieee:
+  AC_REQUIRE([gl_FP_IEEE])
+  # Code from module fprintf-posix:
+  # Code from module fpucw:
+  # Code from module frexp-nolibm:
+  # Code from module frexpl-nolibm:
+  # Code from module fseterr:
+  # Code from module fstat:
+  # Code from module gendocs:
+  # Code from module getdelim:
+  # Code from module getdtablesize:
+  # Code from module getline:
+  # Code from module getopt-gnu:
+  # Code from module getopt-posix:
+  # Code from module gettext:
+  # Code from module gettext-h:
+  # Code from module git-version-gen:
+  # Code from module gitlog-to-changelog:
+  # Code from module gnu-web-doc-update:
+  # Code from module gnumakefile:
+  # Code from module gnupload:
+  # Code from module gpl-3.0:
+  # Code from module hash:
+  # Code from module havelib:
+  # Code from module include_next:
+  # Code from module intprops:
+  # Code from module inttypes:
+  # Code from module inttypes-incomplete:
+  # Code from module isnan:
+  # Code from module isnand:
+  # Code from module isnand-nolibm:
+  # Code from module isnanf:
+  # Code from module isnanf-nolibm:
+  # Code from module isnanl:
+  # Code from module isnanl-nolibm:
+  # Code from module iswblank:
+  # Code from module javacomp-script:
+  # Code from module javaexec-script:
+  # Code from module largefile:
+  AC_REQUIRE([AC_SYS_LARGEFILE])
+  # Code from module ldexp:
+  # Code from module ldexpl:
+  # Code from module localcharset:
+  # Code from module lock:
+  # Code from module maintainer-makefile:
+  # Code from module malloc-gnu:
+  # Code from module malloc-posix:
+  # Code from module math:
+  # Code from module mbchar:
+  # Code from module mbrtowc:
+  # Code from module mbschr:
+  # Code from module mbsinit:
+  # Code from module mbsrchr:
+  # Code from module mbswidth:
+  # Code from module mbuiter:
+  # Code from module memchr:
+  # Code from module msvc-inval:
+  # Code from module msvc-nothrow:
+  # Code from module multiarch:
+  # Code from module nocrash:
+  # Code from module obstack:
+  # Code from module obstack-printf:
+  # Code from module open:
+  # Code from module pathmax:
+  # Code from module perror:
+  # Code from module pipe2:
+  # Code from module pipe2-safer:
+  # Code from module posix_spawn-internal:
+  # Code from module posix_spawn_file_actions_addclose:
+  # Code from module posix_spawn_file_actions_adddup2:
+  # Code from module posix_spawn_file_actions_addopen:
+  # Code from module posix_spawn_file_actions_destroy:
+  # Code from module posix_spawn_file_actions_init:
+  # Code from module posix_spawnattr_destroy:
+  # Code from module posix_spawnattr_init:
+  # Code from module posix_spawnattr_setflags:
+  # Code from module posix_spawnattr_setsigmask:
+  # Code from module posix_spawnp:
+  # Code from module printf-frexp:
+  # Code from module printf-frexpl:
+  # Code from module printf-posix:
+  # Code from module printf-safe:
+  # Code from module progname:
+  # Code from module quote:
+  # Code from module quotearg:
+  # Code from module quotearg-simple:
+  # Code from module raise:
+  # Code from module rawmemchr:
+  # Code from module readme-release:
+  # Code from module realloc-posix:
+  # Code from module sched:
+  # Code from module sigaction:
+  # Code from module signal-h:
+  # Code from module signbit:
+  # Code from module sigprocmask:
+  # Code from module size_max:
+  # Code from module snippet/_Noreturn:
+  # Code from module snippet/arg-nonnull:
+  # Code from module snippet/c++defs:
+  # Code from module snippet/warn-on-use:
+  # Code from module snprintf:
+  # Code from module snprintf-posix:
+  # Code from module spawn:
+  # Code from module spawn-pipe:
+  # Code from module sprintf-posix:
+  # Code from module ssize_t:
+  # Code from module stat:
+  # Code from module stdbool:
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module stdio:
+  # Code from module stdlib:
+  # Code from module stpcpy:
+  # Code from module strchrnul:
+  # Code from module strdup-posix:
+  # Code from module streq:
+  # Code from module strerror:
+  # Code from module strerror-override:
+  # Code from module strerror_r-posix:
+  # Code from module string:
+  # Code from module strndup:
+  # Code from module strnlen:
+  # Code from module strnlen1:
+  # Code from module strtoul:
+  # Code from module strverscmp:
+  # Code from module sys_stat:
+  # Code from module sys_types:
+  # Code from module sys_wait:
+  # Code from module threadlib:
+  gl_THREADLIB_EARLY
+  # Code from module time:
+  # Code from module unistd:
+  # Code from module unistd-safer:
+  # Code from module unitypes:
+  # Code from module uniwidth/base:
+  # Code from module uniwidth/width:
+  # Code from module unlocked-io:
+  # Code from module unsetenv:
+  # Code from module update-copyright:
+  # Code from module useless-if-before-free:
+  # Code from module vasnprintf:
+  # Code from module vc-list-files:
+  # Code from module verify:
+  # Code from module vfprintf-posix:
+  # Code from module vsnprintf:
+  # Code from module vsnprintf-posix:
+  # Code from module vsprintf-posix:
+  # Code from module wait-process:
+  # Code from module waitpid:
+  # Code from module warnings:
+  # Code from module wchar:
+  # Code from module wctype-h:
+  # Code from module wcwidth:
+  # Code from module xalloc:
+  # Code from module xalloc-die:
+  # Code from module xalloc-oversized:
+  # Code from module xmemdup0:
+  # Code from module xsize:
+  # Code from module xstrndup:
+])
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Check for header files, types and library functions".
+AC_DEFUN([gl_INIT],
+[
+  AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
+  gl_cond_libtool=false
+  gl_libdeps=
+  gl_ltlibdeps=
+  gl_m4_base='m4'
+  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
+  m4_pushdef([gl_LIBSOURCES_LIST], [])
+  m4_pushdef([gl_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='lib'
+  gl_FUNC_ALLOCA
+  gl_ASSERT
+  gl_FUNC_CALLOC_POSIX
+  if test $REPLACE_CALLOC = 1; then
+    AC_LIBOBJ([calloc])
+  fi
+  gl_STDLIB_MODULE_INDICATOR([calloc-posix])
+  gl_MODULE_INDICATOR_FOR_TESTS([cloexec])
+  gl_FUNC_CLOSE
+  if test $REPLACE_CLOSE = 1; then
+    AC_LIBOBJ([close])
+  fi
+  gl_UNISTD_MODULE_INDICATOR([close])
+  gl_CLOSE_STREAM
+  gl_MODULE_INDICATOR([close-stream])
+  gl_CLOSEOUT
+  gl_CONFIG_H
+  gl_CONFIGMAKE_PREP
+  gl_DIRNAME
+  gl_MODULE_INDICATOR([dirname])
+  gl_DIRNAME_LGPL
+  gl_DOUBLE_SLASH_ROOT
+  gl_FUNC_DUP2
+  if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then
+    AC_LIBOBJ([dup2])
+    gl_PREREQ_DUP2
+  fi
+  gl_UNISTD_MODULE_INDICATOR([dup2])
+  gl_ENVIRON
+  gl_UNISTD_MODULE_INDICATOR([environ])
+  gl_HEADER_ERRNO_H
+  gl_ERROR
+  if test $ac_cv_lib_error_at_line = no; then
+    AC_LIBOBJ([error])
+    gl_PREREQ_ERROR
+  fi
+  m4_ifdef([AM_XGETTEXT_OPTION],
+    [AM_][XGETTEXT_OPTION([--flag=error:3:c-format])
+     AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])])
+  AC_REQUIRE([gl_EXTERN_INLINE])
+  gl_FATAL_SIGNAL
+  gl_FUNC_FCNTL
+  if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
+    AC_LIBOBJ([fcntl])
+  fi
+  gl_FCNTL_MODULE_INDICATOR([fcntl])
+  gl_FCNTL_H
+  gl_MODULE_INDICATOR([fd-safer-flag])
+  gl_FLOAT_H
+  if test $REPLACE_FLOAT_LDBL = 1; then
+    AC_LIBOBJ([float])
+  fi
+  if test $REPLACE_ITOLD = 1; then
+    AC_LIBOBJ([itold])
+  fi
+  gl_FUNC_FOPEN
+  if test $REPLACE_FOPEN = 1; then
+    AC_LIBOBJ([fopen])
+    gl_PREREQ_FOPEN
+  fi
+  gl_STDIO_MODULE_INDICATOR([fopen])
+  gl_MODULE_INDICATOR([fopen-safer])
+  gl_FUNC_FPENDING
+  if test $ac_cv_func___fpending = no; then
+    AC_LIBOBJ([fpending])
+    gl_PREREQ_FPENDING
+  fi
+  gl_FUNC_FPRINTF_POSIX
+  gl_STDIO_MODULE_INDICATOR([fprintf-posix])
+  gl_FUNC_FREXP_NO_LIBM
+  if test $gl_func_frexp_no_libm != yes; then
+    AC_LIBOBJ([frexp])
+  fi
+  gl_MATH_MODULE_INDICATOR([frexp])
+  gl_FUNC_FREXPL_NO_LIBM
+  if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then
+    AC_LIBOBJ([frexpl])
+  fi
+  gl_MATH_MODULE_INDICATOR([frexpl])
+  gl_FUNC_FSETERR
+  if test $ac_cv_func___fseterr = no; then
+    AC_LIBOBJ([fseterr])
+  fi
+  gl_FUNC_FSTAT
+  if test $REPLACE_FSTAT = 1; then
+    AC_LIBOBJ([fstat])
+    gl_PREREQ_FSTAT
+  fi
+  gl_SYS_STAT_MODULE_INDICATOR([fstat])
+  gl_FUNC_GETDELIM
+  if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then
+    AC_LIBOBJ([getdelim])
+    gl_PREREQ_GETDELIM
+  fi
+  gl_STDIO_MODULE_INDICATOR([getdelim])
+  gl_FUNC_GETDTABLESIZE
+  if test $HAVE_GETDTABLESIZE = 0; then
+    AC_LIBOBJ([getdtablesize])
+    gl_PREREQ_GETDTABLESIZE
+  fi
+  gl_UNISTD_MODULE_INDICATOR([getdtablesize])
+  gl_FUNC_GETLINE
+  if test $REPLACE_GETLINE = 1; then
+    AC_LIBOBJ([getline])
+    gl_PREREQ_GETLINE
+  fi
+  gl_STDIO_MODULE_INDICATOR([getline])
+  gl_FUNC_GETOPT_GNU
+  if test $REPLACE_GETOPT = 1; then
+    AC_LIBOBJ([getopt])
+    AC_LIBOBJ([getopt1])
+    gl_PREREQ_GETOPT
+    dnl Arrange for unistd.h to include getopt.h.
+    GNULIB_GL_UNISTD_H_GETOPT=1
+  fi
+  AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT])
+  gl_MODULE_INDICATOR_FOR_TESTS([getopt-gnu])
+  gl_FUNC_GETOPT_POSIX
+  if test $REPLACE_GETOPT = 1; then
+    AC_LIBOBJ([getopt])
+    AC_LIBOBJ([getopt1])
+    gl_PREREQ_GETOPT
+    dnl Arrange for unistd.h to include getopt.h.
+    GNULIB_GL_UNISTD_H_GETOPT=1
+  fi
+  AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT])
+  dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac.
+  AM_GNU_GETTEXT_VERSION([0.18.1])
+  AC_SUBST([LIBINTL])
+  AC_SUBST([LTLIBINTL])
+  # Autoconf 2.61a.99 and earlier don't support linking a file only
+  # in VPATH builds.  But since GNUmakefile is for maintainer use
+  # only, it does not matter if we skip the link with older autoconf.
+  # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH
+  # builds, so use a shell variable to bypass this.
+  GNUmakefile=GNUmakefile
+  m4_if(m4_version_compare([2.61a.100],
+          m4_defn([m4_PACKAGE_VERSION])), [1], [],
+        [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [],
+          [GNUmakefile=$GNUmakefile])])
+  gl_INTTYPES_H
+  gl_INTTYPES_INCOMPLETE
+  gl_ISNAN
+  gl_MATH_MODULE_INDICATOR([isnan])
+  gl_FUNC_ISNAND
+  m4_ifdef([gl_ISNAN], [
+    AC_REQUIRE([gl_ISNAN])
+  ])
+  if test $HAVE_ISNAND = 0 || test $REPLACE_ISNAN = 1; then
+    AC_LIBOBJ([isnand])
+    gl_PREREQ_ISNAND
+  fi
+  gl_MATH_MODULE_INDICATOR([isnand])
+  gl_FUNC_ISNAND_NO_LIBM
+  if test $gl_func_isnand_no_libm != yes; then
+    AC_LIBOBJ([isnand])
+    gl_PREREQ_ISNAND
+  fi
+  gl_FUNC_ISNANF
+  m4_ifdef([gl_ISNAN], [
+    AC_REQUIRE([gl_ISNAN])
+  ])
+  if test $HAVE_ISNANF = 0 || test $REPLACE_ISNAN = 1; then
+    AC_LIBOBJ([isnanf])
+    gl_PREREQ_ISNANF
+  fi
+  gl_MATH_MODULE_INDICATOR([isnanf])
+  gl_FUNC_ISNANF_NO_LIBM
+  if test $gl_func_isnanf_no_libm != yes; then
+    AC_LIBOBJ([isnanf])
+    gl_PREREQ_ISNANF
+  fi
+  gl_FUNC_ISNANL
+  m4_ifdef([gl_ISNAN], [
+    AC_REQUIRE([gl_ISNAN])
+  ])
+  if test $HAVE_ISNANL = 0 || test $REPLACE_ISNAN = 1; then
+    AC_LIBOBJ([isnanl])
+    gl_PREREQ_ISNANL
+  fi
+  gl_MATH_MODULE_INDICATOR([isnanl])
+  gl_FUNC_ISNANL_NO_LIBM
+  if test $gl_func_isnanl_no_libm != yes; then
+    AC_LIBOBJ([isnanl])
+    gl_PREREQ_ISNANL
+  fi
+  gl_FUNC_ISWBLANK
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+    :
+  else
+    if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then
+      AC_LIBOBJ([iswblank])
+    fi
+  fi
+  gl_WCTYPE_MODULE_INDICATOR([iswblank])
+  # You need to invoke gt_JAVACOMP yourself, possibly with arguments.
+  AC_CONFIG_FILES([javacomp.sh:build-aux/javacomp.sh.in])
+  # You need to invoke gt_JAVAEXEC yourself, possibly with arguments.
+  AC_CONFIG_FILES([javaexec.sh:build-aux/javaexec.sh.in])
+  AC_REQUIRE([gl_LARGEFILE])
+  gl_FUNC_LDEXP
+  gl_FUNC_LDEXPL
+  if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then
+    AC_LIBOBJ([ldexpl])
+  fi
+  gl_MATH_MODULE_INDICATOR([ldexpl])
+  gl_LOCALCHARSET
+  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
+  AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
+  gl_LOCK
+  AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER],
+    [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])])
+  gl_FUNC_MALLOC_GNU
+  if test $REPLACE_MALLOC = 1; then
+    AC_LIBOBJ([malloc])
+  fi
+  gl_MODULE_INDICATOR([malloc-gnu])
+  gl_FUNC_MALLOC_POSIX
+  if test $REPLACE_MALLOC = 1; then
+    AC_LIBOBJ([malloc])
+  fi
+  gl_STDLIB_MODULE_INDICATOR([malloc-posix])
+  gl_MATH_H
+  gl_MBCHAR
+  gl_FUNC_MBRTOWC
+  if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
+    AC_LIBOBJ([mbrtowc])
+    gl_PREREQ_MBRTOWC
+  fi
+  gl_WCHAR_MODULE_INDICATOR([mbrtowc])
+  gl_STRING_MODULE_INDICATOR([mbschr])
+  gl_FUNC_MBSINIT
+  if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
+    AC_LIBOBJ([mbsinit])
+    gl_PREREQ_MBSINIT
+  fi
+  gl_WCHAR_MODULE_INDICATOR([mbsinit])
+  gl_STRING_MODULE_INDICATOR([mbsrchr])
+  gl_MBSWIDTH
+  gl_MBITER
+  gl_FUNC_MEMCHR
+  if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
+    AC_LIBOBJ([memchr])
+    gl_PREREQ_MEMCHR
+  fi
+  gl_STRING_MODULE_INDICATOR([memchr])
+  gl_MSVC_INVAL
+  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+    AC_LIBOBJ([msvc-inval])
+  fi
+  gl_MSVC_NOTHROW
+  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+    AC_LIBOBJ([msvc-nothrow])
+  fi
+  gl_MULTIARCH
+  AC_FUNC_OBSTACK
+  dnl Note: AC_FUNC_OBSTACK does AC_LIBSOURCES([obstack.h, obstack.c]).
+  gl_FUNC_OBSTACK_PRINTF
+  if test $ac_cv_func_obstack_printf = no || test $REPLACE_OBSTACK_PRINTF = 1; then
+    AC_LIBOBJ([obstack_printf])
+  fi
+  gl_STDIO_MODULE_INDICATOR([obstack-printf])
+  gl_FUNC_OPEN
+  if test $REPLACE_OPEN = 1; then
+    AC_LIBOBJ([open])
+    gl_PREREQ_OPEN
+  fi
+  gl_FCNTL_MODULE_INDICATOR([open])
+  gl_PATHMAX
+  gl_FUNC_PERROR
+  if test $REPLACE_PERROR = 1; then
+    AC_LIBOBJ([perror])
+  fi
+  gl_STRING_MODULE_INDICATOR([perror])
+  gl_FUNC_PIPE2
+  gl_UNISTD_MODULE_INDICATOR([pipe2])
+  gl_MODULE_INDICATOR([pipe2-safer])
+  gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1; then
+    AC_LIBOBJ([spawn_faction_addclose])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addclose])
+  gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1; then
+    AC_LIBOBJ([spawn_faction_adddup2])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_adddup2])
+  gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then
+    AC_LIBOBJ([spawn_faction_addopen])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addopen])
+  gl_POSIX_SPAWN
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    AC_LIBOBJ([spawn_faction_destroy])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_destroy])
+  gl_POSIX_SPAWN
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    AC_LIBOBJ([spawn_faction_init])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_init])
+  gl_POSIX_SPAWN
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    AC_LIBOBJ([spawnattr_destroy])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_destroy])
+  gl_POSIX_SPAWN
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    AC_LIBOBJ([spawnattr_init])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_init])
+  gl_POSIX_SPAWN
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    AC_LIBOBJ([spawnattr_setflags])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setflags])
+  gl_POSIX_SPAWN
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    AC_LIBOBJ([spawnattr_setsigmask])
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setsigmask])
+  gl_POSIX_SPAWN
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    AC_LIBOBJ([spawnp])
+    AC_LIBOBJ([spawni])
+    gl_PREREQ_POSIX_SPAWN_INTERNAL
+  fi
+  gl_SPAWN_MODULE_INDICATOR([posix_spawnp])
+  gl_FUNC_PRINTF_FREXP
+  gl_FUNC_PRINTF_FREXPL
+  gl_FUNC_PRINTF_POSIX
+  gl_STDIO_MODULE_INDICATOR([printf-posix])
+  m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes])
+  AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
+  AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>])
+  gl_QUOTE
+  gl_QUOTEARG
+  gl_FUNC_RAISE
+  if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then
+    AC_LIBOBJ([raise])
+    gl_PREREQ_RAISE
+  fi
+  gl_SIGNAL_MODULE_INDICATOR([raise])
+  gl_FUNC_RAWMEMCHR
+  if test $HAVE_RAWMEMCHR = 0; then
+    AC_LIBOBJ([rawmemchr])
+    gl_PREREQ_RAWMEMCHR
+  fi
+  gl_STRING_MODULE_INDICATOR([rawmemchr])
+  gl_FUNC_REALLOC_POSIX
+  if test $REPLACE_REALLOC = 1; then
+    AC_LIBOBJ([realloc])
+  fi
+  gl_STDLIB_MODULE_INDICATOR([realloc-posix])
+  gl_SCHED_H
+  gl_SIGACTION
+  if test $HAVE_SIGACTION = 0; then
+    AC_LIBOBJ([sigaction])
+    gl_PREREQ_SIGACTION
+  fi
+  gl_SIGNAL_MODULE_INDICATOR([sigaction])
+  gl_SIGNAL_H
+  gl_SIGNBIT
+  if test $REPLACE_SIGNBIT = 1; then
+    AC_LIBOBJ([signbitf])
+    AC_LIBOBJ([signbitd])
+    AC_LIBOBJ([signbitl])
+  fi
+  gl_MATH_MODULE_INDICATOR([signbit])
+  gl_SIGNALBLOCKING
+  if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
+    AC_LIBOBJ([sigprocmask])
+    gl_PREREQ_SIGPROCMASK
+  fi
+  gl_SIGNAL_MODULE_INDICATOR([sigprocmask])
+  gl_SIZE_MAX
+  gl_FUNC_SNPRINTF
+  gl_STDIO_MODULE_INDICATOR([snprintf])
+  gl_MODULE_INDICATOR([snprintf])
+  gl_FUNC_SNPRINTF_POSIX
+  gl_SPAWN_H
+  gl_SPAWN_PIPE
+  gl_FUNC_SPRINTF_POSIX
+  gl_STDIO_MODULE_INDICATOR([sprintf-posix])
+  gt_TYPE_SSIZE_T
+  gl_FUNC_STAT
+  if test $REPLACE_STAT = 1; then
+    AC_LIBOBJ([stat])
+    gl_PREREQ_STAT
+  fi
+  gl_SYS_STAT_MODULE_INDICATOR([stat])
+  AM_STDBOOL_H
+  gl_STDDEF_H
+  gl_STDINT_H
+  gl_STDIO_H
+  gl_STDLIB_H
+  gl_FUNC_STPCPY
+  if test $HAVE_STPCPY = 0; then
+    AC_LIBOBJ([stpcpy])
+    gl_PREREQ_STPCPY
+  fi
+  gl_STRING_MODULE_INDICATOR([stpcpy])
+  gl_FUNC_STRCHRNUL
+  if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then
+    AC_LIBOBJ([strchrnul])
+    gl_PREREQ_STRCHRNUL
+  fi
+  gl_STRING_MODULE_INDICATOR([strchrnul])
+  gl_FUNC_STRDUP_POSIX
+  if test $ac_cv_func_strdup = no || test $REPLACE_STRDUP = 1; then
+    AC_LIBOBJ([strdup])
+    gl_PREREQ_STRDUP
+  fi
+  gl_STRING_MODULE_INDICATOR([strdup])
+  gl_FUNC_STRERROR
+  if test $REPLACE_STRERROR = 1; then
+    AC_LIBOBJ([strerror])
+  fi
+  gl_MODULE_INDICATOR([strerror])
+  gl_STRING_MODULE_INDICATOR([strerror])
+  AC_REQUIRE([gl_HEADER_ERRNO_H])
+  AC_REQUIRE([gl_FUNC_STRERROR_0])
+  if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then
+    AC_LIBOBJ([strerror-override])
+    gl_PREREQ_SYS_H_WINSOCK2
+  fi
+  gl_FUNC_STRERROR_R
+  if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then
+    AC_LIBOBJ([strerror_r])
+    gl_PREREQ_STRERROR_R
+  fi
+  gl_STRING_MODULE_INDICATOR([strerror_r])
+  gl_HEADER_STRING_H
+  gl_FUNC_STRNDUP
+  if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then
+    AC_LIBOBJ([strndup])
+  fi
+  gl_STRING_MODULE_INDICATOR([strndup])
+  gl_FUNC_STRNLEN
+  if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then
+    AC_LIBOBJ([strnlen])
+    gl_PREREQ_STRNLEN
+  fi
+  gl_STRING_MODULE_INDICATOR([strnlen])
+  gl_FUNC_STRTOUL
+  if test $ac_cv_func_strtoul = no; then
+    AC_LIBOBJ([strtoul])
+  fi
+  gl_FUNC_STRVERSCMP
+  if test $HAVE_STRVERSCMP = 0; then
+    AC_LIBOBJ([strverscmp])
+    gl_PREREQ_STRVERSCMP
+  fi
+  gl_STRING_MODULE_INDICATOR([strverscmp])
+  gl_HEADER_SYS_STAT_H
+  AC_PROG_MKDIR_P
+  gl_SYS_TYPES_H
+  AC_PROG_MKDIR_P
+  gl_SYS_WAIT_H
+  AC_PROG_MKDIR_P
+  gl_THREADLIB
+  gl_HEADER_TIME_H
+  gl_UNISTD_H
+  gl_UNISTD_SAFER
+  gl_LIBUNISTRING_LIBHEADER([0.9], [unitypes.h])
+  gl_LIBUNISTRING_LIBHEADER([0.9], [uniwidth.h])
+  gl_LIBUNISTRING_MODULE([0.9.4], [uniwidth/width])
+  gl_FUNC_GLIBC_UNLOCKED_IO
+  gl_FUNC_UNSETENV
+  if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then
+    AC_LIBOBJ([unsetenv])
+    gl_PREREQ_UNSETENV
+  fi
+  gl_STDLIB_MODULE_INDICATOR([unsetenv])
+  gl_FUNC_VASNPRINTF
+  gl_FUNC_VFPRINTF_POSIX
+  gl_STDIO_MODULE_INDICATOR([vfprintf-posix])
+  gl_FUNC_VSNPRINTF
+  gl_STDIO_MODULE_INDICATOR([vsnprintf])
+  gl_FUNC_VSNPRINTF_POSIX
+  gl_FUNC_VSPRINTF_POSIX
+  gl_STDIO_MODULE_INDICATOR([vsprintf-posix])
+  gl_WAIT_PROCESS
+  gl_FUNC_WAITPID
+  if test $HAVE_WAITPID = 0; then
+    AC_LIBOBJ([waitpid])
+  fi
+  gl_SYS_WAIT_MODULE_INDICATOR([waitpid])
+  gl_WCHAR_H
+  gl_WCTYPE_H
+  gl_FUNC_WCWIDTH
+  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
+    AC_LIBOBJ([wcwidth])
+  fi
+  gl_WCHAR_MODULE_INDICATOR([wcwidth])
+  gl_XALLOC
+  AC_LIBOBJ([xmemdup0])
+  gl_XSIZE
+  gl_XSTRNDUP
+  # End of code from modules
+  m4_ifval(gl_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
+      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([gl_LIBSOURCES_DIR])
+  m4_popdef([gl_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    gl_libobjs=
+    gl_ltlibobjs=
+    if test -n "$gl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gl_libobjs="$gl_libobjs $i.$ac_objext"
+        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
+    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
+  ])
+  gltests_libdeps=
+  gltests_ltlibdeps=
+  m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
+  m4_pushdef([gltests_LIBSOURCES_LIST], [])
+  m4_pushdef([gltests_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='tests'
+changequote(,)dnl
+  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+changequote([, ])dnl
+  AC_SUBST([gltests_WITNESS])
+  gl_module_indicator_condition=$gltests_WITNESS
+  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
+  m4_popdef([gl_MODULE_INDICATOR_CONDITION])
+  m4_ifval(gltests_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
+      for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([gltests_LIBSOURCES_DIR])
+  m4_popdef([gltests_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    gltests_libobjs=
+    gltests_ltlibobjs=
+    if test -n "$gltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
+    AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
+  ])
+  LIBBISON_LIBDEPS="$gl_libdeps"
+  AC_SUBST([LIBBISON_LIBDEPS])
+  LIBBISON_LTLIBDEPS="$gl_ltlibdeps"
+  AC_SUBST([LIBBISON_LTLIBDEPS])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_LIBOBJ], [
+  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
+  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gl_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([gl_LIBSOURCES_DIR], [lib])
+      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_LIBOBJ], [
+  AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
+  gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gltests_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([gltests_LIBSOURCES_DIR], [tests])
+      m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# This macro records the list of files which have been installed by
+# gnulib-tool and may be removed by future gnulib-tool invocations.
+AC_DEFUN([gl_FILE_LIST], [
+  build-aux/announce-gen
+  build-aux/config.rpath
+  build-aux/do-release-commit-and-tag
+  build-aux/gendocs.sh
+  build-aux/git-version-gen
+  build-aux/gitlog-to-changelog
+  build-aux/gnu-web-doc-update
+  build-aux/gnupload
+  build-aux/javacomp.sh.in
+  build-aux/javaexec.sh.in
+  build-aux/snippet/_Noreturn.h
+  build-aux/snippet/arg-nonnull.h
+  build-aux/snippet/c++defs.h
+  build-aux/snippet/warn-on-use.h
+  build-aux/update-copyright
+  build-aux/useless-if-before-free
+  build-aux/vc-list-files
+  doc/fdl.texi
+  doc/gendocs_template
+  doc/gpl-3.0.texi
+  lib/alloca.in.h
+  lib/argmatch.c
+  lib/argmatch.h
+  lib/asnprintf.c
+  lib/basename-lgpl.c
+  lib/basename.c
+  lib/binary-io.c
+  lib/binary-io.h
+  lib/bitrotate.c
+  lib/bitrotate.h
+  lib/c-ctype.c
+  lib/c-ctype.h
+  lib/c-strcase.h
+  lib/c-strcasecmp.c
+  lib/c-strcaseeq.h
+  lib/c-strncasecmp.c
+  lib/calloc.c
+  lib/cloexec.c
+  lib/cloexec.h
+  lib/close-stream.c
+  lib/close-stream.h
+  lib/close.c
+  lib/closeout.c
+  lib/closeout.h
+  lib/config.charset
+  lib/dirname-lgpl.c
+  lib/dirname.c
+  lib/dirname.h
+  lib/dosname.h
+  lib/dup-safer-flag.c
+  lib/dup-safer.c
+  lib/dup2.c
+  lib/errno.in.h
+  lib/error.c
+  lib/error.h
+  lib/exitfail.c
+  lib/exitfail.h
+  lib/fatal-signal.c
+  lib/fatal-signal.h
+  lib/fcntl.c
+  lib/fcntl.in.h
+  lib/fd-hook.c
+  lib/fd-hook.h
+  lib/fd-safer-flag.c
+  lib/fd-safer.c
+  lib/float+.h
+  lib/float.c
+  lib/float.in.h
+  lib/fopen-safer.c
+  lib/fopen.c
+  lib/fpending.c
+  lib/fpending.h
+  lib/fprintf.c
+  lib/fpucw.h
+  lib/frexp.c
+  lib/frexpl.c
+  lib/fseterr.c
+  lib/fseterr.h
+  lib/fstat.c
+  lib/getdelim.c
+  lib/getdtablesize.c
+  lib/getline.c
+  lib/getopt.c
+  lib/getopt.in.h
+  lib/getopt1.c
+  lib/getopt_int.h
+  lib/gettext.h
+  lib/glthread/lock.c
+  lib/glthread/lock.h
+  lib/glthread/threadlib.c
+  lib/hash.c
+  lib/hash.h
+  lib/intprops.h
+  lib/inttypes.in.h
+  lib/isnan.c
+  lib/isnand-nolibm.h
+  lib/isnand.c
+  lib/isnanf-nolibm.h
+  lib/isnanf.c
+  lib/isnanl-nolibm.h
+  lib/isnanl.c
+  lib/iswblank.c
+  lib/itold.c
+  lib/ldexpl.c
+  lib/localcharset.c
+  lib/localcharset.h
+  lib/malloc.c
+  lib/math.c
+  lib/math.in.h
+  lib/mbchar.c
+  lib/mbchar.h
+  lib/mbrtowc.c
+  lib/mbschr.c
+  lib/mbsinit.c
+  lib/mbsrchr.c
+  lib/mbswidth.c
+  lib/mbswidth.h
+  lib/mbuiter.c
+  lib/mbuiter.h
+  lib/memchr.c
+  lib/memchr.valgrind
+  lib/msvc-inval.c
+  lib/msvc-inval.h
+  lib/msvc-nothrow.c
+  lib/msvc-nothrow.h
+  lib/obstack.c
+  lib/obstack.h
+  lib/obstack_printf.c
+  lib/open.c
+  lib/pathmax.h
+  lib/perror.c
+  lib/pipe-safer.c
+  lib/pipe2-safer.c
+  lib/pipe2.c
+  lib/printf-args.c
+  lib/printf-args.h
+  lib/printf-frexp.c
+  lib/printf-frexp.h
+  lib/printf-frexpl.c
+  lib/printf-frexpl.h
+  lib/printf-parse.c
+  lib/printf-parse.h
+  lib/printf.c
+  lib/progname.c
+  lib/progname.h
+  lib/quote.h
+  lib/quotearg.c
+  lib/quotearg.h
+  lib/raise.c
+  lib/rawmemchr.c
+  lib/rawmemchr.valgrind
+  lib/realloc.c
+  lib/ref-add.sin
+  lib/ref-del.sin
+  lib/sched.in.h
+  lib/sig-handler.c
+  lib/sig-handler.h
+  lib/sigaction.c
+  lib/signal.in.h
+  lib/signbitd.c
+  lib/signbitf.c
+  lib/signbitl.c
+  lib/sigprocmask.c
+  lib/size_max.h
+  lib/snprintf.c
+  lib/spawn-pipe.c
+  lib/spawn-pipe.h
+  lib/spawn.in.h
+  lib/spawn_faction_addclose.c
+  lib/spawn_faction_adddup2.c
+  lib/spawn_faction_addopen.c
+  lib/spawn_faction_destroy.c
+  lib/spawn_faction_init.c
+  lib/spawn_int.h
+  lib/spawnattr_destroy.c
+  lib/spawnattr_init.c
+  lib/spawnattr_setflags.c
+  lib/spawnattr_setsigmask.c
+  lib/spawni.c
+  lib/spawnp.c
+  lib/sprintf.c
+  lib/stat.c
+  lib/stdbool.in.h
+  lib/stddef.in.h
+  lib/stdint.in.h
+  lib/stdio--.h
+  lib/stdio-impl.h
+  lib/stdio-safer.h
+  lib/stdio.c
+  lib/stdio.in.h
+  lib/stdlib.in.h
+  lib/stpcpy.c
+  lib/strchrnul.c
+  lib/strchrnul.valgrind
+  lib/strdup.c
+  lib/streq.h
+  lib/strerror-override.c
+  lib/strerror-override.h
+  lib/strerror.c
+  lib/strerror_r.c
+  lib/string.in.h
+  lib/stripslash.c
+  lib/strndup.c
+  lib/strnlen.c
+  lib/strnlen1.c
+  lib/strnlen1.h
+  lib/strtol.c
+  lib/strtoul.c
+  lib/strverscmp.c
+  lib/sys_stat.in.h
+  lib/sys_types.in.h
+  lib/sys_wait.in.h
+  lib/time.in.h
+  lib/unistd--.h
+  lib/unistd-safer.h
+  lib/unistd.c
+  lib/unistd.in.h
+  lib/unitypes.in.h
+  lib/uniwidth.in.h
+  lib/uniwidth/cjk.h
+  lib/uniwidth/width.c
+  lib/unlocked-io.h
+  lib/unsetenv.c
+  lib/vasnprintf.c
+  lib/vasnprintf.h
+  lib/verify.h
+  lib/vfprintf.c
+  lib/vsnprintf.c
+  lib/vsprintf.c
+  lib/w32spawn.h
+  lib/wait-process.c
+  lib/wait-process.h
+  lib/waitpid.c
+  lib/wchar.in.h
+  lib/wctype-h.c
+  lib/wctype.in.h
+  lib/wcwidth.c
+  lib/xalloc-die.c
+  lib/xalloc-oversized.h
+  lib/xalloc.h
+  lib/xmalloc.c
+  lib/xmemdup0.c
+  lib/xmemdup0.h
+  lib/xsize.c
+  lib/xsize.h
+  lib/xstrndup.c
+  lib/xstrndup.h
+  m4/00gnulib.m4
+  m4/alloca.m4
+  m4/asm-underscore.m4
+  m4/assert.m4
+  m4/calloc.m4
+  m4/close-stream.m4
+  m4/close.m4
+  m4/closeout.m4
+  m4/codeset.m4
+  m4/config-h.m4
+  m4/configmake.m4
+  m4/dirname.m4
+  m4/double-slash-root.m4
+  m4/dup2.m4
+  m4/environ.m4
+  m4/errno_h.m4
+  m4/error.m4
+  m4/exponentd.m4
+  m4/exponentf.m4
+  m4/exponentl.m4
+  m4/extensions.m4
+  m4/extern-inline.m4
+  m4/fatal-signal.m4
+  m4/fcntl-o.m4
+  m4/fcntl.m4
+  m4/fcntl_h.m4
+  m4/float_h.m4
+  m4/fopen.m4
+  m4/fpending.m4
+  m4/fpieee.m4
+  m4/fprintf-posix.m4
+  m4/frexp.m4
+  m4/frexpl.m4
+  m4/fseterr.m4
+  m4/fstat.m4
+  m4/getdelim.m4
+  m4/getdtablesize.m4
+  m4/getline.m4
+  m4/getopt.m4
+  m4/gettext.m4
+  m4/glibc2.m4
+  m4/glibc21.m4
+  m4/gnulib-common.m4
+  m4/iconv.m4
+  m4/include_next.m4
+  m4/intdiv0.m4
+  m4/intl.m4
+  m4/intldir.m4
+  m4/intlmacosx.m4
+  m4/intmax.m4
+  m4/intmax_t.m4
+  m4/inttypes-pri.m4
+  m4/inttypes.m4
+  m4/inttypes_h.m4
+  m4/isnan.m4
+  m4/isnand.m4
+  m4/isnanf.m4
+  m4/isnanl.m4
+  m4/iswblank.m4
+  m4/javacomp.m4
+  m4/javaexec.m4
+  m4/largefile.m4
+  m4/lcmessage.m4
+  m4/ldexp.m4
+  m4/ldexpl.m4
+  m4/lib-ld.m4
+  m4/lib-link.m4
+  m4/lib-prefix.m4
+  m4/libunistring-base.m4
+  m4/localcharset.m4
+  m4/locale-fr.m4
+  m4/locale-ja.m4
+  m4/locale-zh.m4
+  m4/lock.m4
+  m4/longlong.m4
+  m4/malloc.m4
+  m4/math_h.m4
+  m4/mbchar.m4
+  m4/mbiter.m4
+  m4/mbrtowc.m4
+  m4/mbsinit.m4
+  m4/mbstate_t.m4
+  m4/mbswidth.m4
+  m4/memchr.m4
+  m4/mmap-anon.m4
+  m4/mode_t.m4
+  m4/msvc-inval.m4
+  m4/msvc-nothrow.m4
+  m4/multiarch.m4
+  m4/nls.m4
+  m4/nocrash.m4
+  m4/obstack-printf.m4
+  m4/off_t.m4
+  m4/open.m4
+  m4/pathmax.m4
+  m4/perror.m4
+  m4/pipe2.m4
+  m4/po.m4
+  m4/posix_spawn.m4
+  m4/printf-frexp.m4
+  m4/printf-frexpl.m4
+  m4/printf-posix-rpl.m4
+  m4/printf-posix.m4
+  m4/printf.m4
+  m4/progtest.m4
+  m4/quote.m4
+  m4/quotearg.m4
+  m4/raise.m4
+  m4/rawmemchr.m4
+  m4/realloc.m4
+  m4/sched_h.m4
+  m4/setenv.m4
+  m4/sig_atomic_t.m4
+  m4/sigaction.m4
+  m4/signal_h.m4
+  m4/signalblocking.m4
+  m4/signbit.m4
+  m4/size_max.m4
+  m4/snprintf-posix.m4
+  m4/snprintf.m4
+  m4/spawn-pipe.m4
+  m4/spawn_h.m4
+  m4/sprintf-posix.m4
+  m4/ssize_t.m4
+  m4/stat.m4
+  m4/stdbool.m4
+  m4/stddef_h.m4
+  m4/stdint.m4
+  m4/stdint_h.m4
+  m4/stdio_h.m4
+  m4/stdlib_h.m4
+  m4/stpcpy.m4
+  m4/strchrnul.m4
+  m4/strdup.m4
+  m4/strerror.m4
+  m4/strerror_r.m4
+  m4/string_h.m4
+  m4/strndup.m4
+  m4/strnlen.m4
+  m4/strtoul.m4
+  m4/strverscmp.m4
+  m4/sys_socket_h.m4
+  m4/sys_stat_h.m4
+  m4/sys_types_h.m4
+  m4/sys_wait_h.m4
+  m4/threadlib.m4
+  m4/time_h.m4
+  m4/uintmax_t.m4
+  m4/unistd-safer.m4
+  m4/unistd_h.m4
+  m4/unlocked-io.m4
+  m4/vasnprintf.m4
+  m4/vfprintf-posix.m4
+  m4/visibility.m4
+  m4/vsnprintf-posix.m4
+  m4/vsnprintf.m4
+  m4/vsprintf-posix.m4
+  m4/wait-process.m4
+  m4/waitpid.m4
+  m4/warn-on-use.m4
+  m4/warnings.m4
+  m4/wchar_h.m4
+  m4/wchar_t.m4
+  m4/wctype_h.m4
+  m4/wcwidth.m4
+  m4/wint_t.m4
+  m4/xalloc.m4
+  m4/xsize.m4
+  m4/xstrndup.m4
+  top/GNUmakefile
+  top/README-release
+  top/maint.mk
+])
diff --git a/m4/gnulib.m4 b/m4/gnulib.m4
deleted file mode 100644
index 2acf101..0000000
--- a/m4/gnulib.m4
+++ /dev/null
@@ -1,66 +0,0 @@
-# This file is generated automatically by "bootstrap".
-AC_DEFUN([GNULIB_AUTOCONF_SNIPPET],[
-
-gl_DIRNAME
-
-gl_ERROR
-
-
-gl_EXITFAIL
-
-dnl gl_USE_SYSTEM_EXTENSIONS must be added quite early to configure.ac.
-
-gl_GETOPT
-
-AM_GNU_GETTEXT([external])
-AM_GNU_GETTEXT_VERSION([0.14.5])
-
-
-gl_HARD_LOCALE
-
-gl_HASH
-
-
-AC_FUNC_MALLOC
-
-gl_MBSWIDTH
-
-gl_OBSTACK
-
-gl_QUOTE
-
-gl_QUOTEARG
-
-AM_STDBOOL_H
-
-gl_STDIO_SAFER
-
-gl_FUNC_STPCPY
-
-gl_FUNC_STRDUP
-
-gl_FUNC_STRERROR
-
-gl_FUNC_STRNDUP
-
-gl_FUNC_STRNLEN
-
-gl_FUNC_STRTOL
-
-gl_FUNC_STRTOUL
-
-gl_FUNC_STRVERSCMP
-
-gl_HEADER_UNISTD
-
-gl_UNISTD_SAFER
-
-gl_FUNC_GLIBC_UNLOCKED_IO
-
-
-gl_XALLOC
-
-
-gl_XSTRNDUP
-
-])
diff --git a/m4/hard-locale.m4 b/m4/hard-locale.m4
deleted file mode 100644
index 640a755..0000000
--- a/m4/hard-locale.m4
+++ /dev/null
@@ -1,12 +0,0 @@
-# hard-locale.m4 serial 6
-dnl Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl No prerequisites of lib/hard-locale.c.
-AC_DEFUN([gl_HARD_LOCALE],
-[
-  AC_LIBSOURCES([hard-locale.c, hard-locale.h])
-  AC_LIBOBJ([hard-locale])
-])
diff --git a/m4/hash.m4 b/m4/hash.m4
deleted file mode 100644
index 948dd97..0000000
--- a/m4/hash.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-# hash.m4 serial 5
-dnl Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_HASH],
-[
-  AC_LIBSOURCES([hash.c, hash.h])
-  AC_LIBOBJ([hash])
-
-  dnl Prerequisites of lib/hash.c.
-  AC_REQUIRE([AM_STDBOOL_H])
-])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
index 654c415..6a47236 100644
--- a/m4/iconv.m4
+++ b/m4/iconv.m4
@@ -1,5 +1,5 @@
-# iconv.m4 serial AM4 (gettext-0.11.3)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+# iconv.m4 serial 18 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2007-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -21,6 +21,7 @@
 [
   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
   dnl those with the standalone portable GNU libiconv installed).
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
 
   dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
   dnl accordingly.
@@ -29,34 +30,170 @@
   dnl Add $INCICONV to CPPFLAGS before performing the following checks,
   dnl because if the user has installed libiconv and not disabled its use
   dnl via --without-libiconv-prefix, he wants to use it. The first
-  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
   am_save_CPPFLAGS="$CPPFLAGS"
   AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
 
-  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
-    AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
-      [iconv_t cd = iconv_open("","");
-       iconv(cd,NULL,NULL,NULL,NULL);
-       iconv_close(cd);],
-      am_cv_func_iconv=yes)
+    AC_LINK_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[
+#include <stdlib.h>
+#include <iconv.h>
+         ]],
+         [[iconv_t cd = iconv_open("","");
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);]])],
+      [am_cv_func_iconv=yes])
     if test "$am_cv_func_iconv" != yes; then
       am_save_LIBS="$LIBS"
       LIBS="$LIBS $LIBICONV"
-      AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
-        [iconv_t cd = iconv_open("","");
-         iconv(cd,NULL,NULL,NULL,NULL);
-         iconv_close(cd);],
-        am_cv_lib_iconv=yes
-        am_cv_func_iconv=yes)
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[
+#include <stdlib.h>
+#include <iconv.h>
+           ]],
+           [[iconv_t cd = iconv_open("","");
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);]])],
+        [am_cv_lib_iconv=yes]
+        [am_cv_func_iconv=yes])
       LIBS="$am_save_LIBS"
     fi
   ])
   if test "$am_cv_func_iconv" = yes; then
-    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+      dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
+      dnl Solaris 10.
+      am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  int result = 0;
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 1;
+        iconv_close (cd_utf8_to_88591);
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          result |= 2;
+        iconv_close (cd_ascii_to_88591);
+      }
+  }
+  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304";
+        static char buf[2] = { (char)0xDE, (char)0xAD };
+        const char *inptr = input;
+        size_t inbytesleft = 1;
+        char *outptr = buf;
+        size_t outbytesleft = 1;
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+          result |= 4;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          result |= 8;
+        iconv_close (cd_88591_to_utf8);
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    result |= 16;
+  return result;
+}]])],
+        [am_cv_func_iconv_works=yes],
+        [am_cv_func_iconv_works=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac
+changequote([,])dnl
+        ])
+      LIBS="$am_save_LIBS"
+    ])
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+    AC_DEFINE([HAVE_ICONV], [1],
+      [Define if you have the iconv() function and it works.])
   fi
   if test "$am_cv_lib_iconv" = yes; then
     AC_MSG_CHECKING([how to link with libiconv])
@@ -68,34 +205,64 @@
     LIBICONV=
     LTLIBICONV=
   fi
-  AC_SUBST(LIBICONV)
-  AC_SUBST(LTLIBICONV)
+  AC_SUBST([LIBICONV])
+  AC_SUBST([LTLIBICONV])
 ])
 
-AC_DEFUN([AM_ICONV],
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl   Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl   Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl   warnings.
+m4_define([gl_iconv_AC_DEFUN],
+  m4_version_prereq([2.64],
+    [[AC_DEFUN_ONCE(
+        [$1], [$2])]],
+    [m4_ifdef([gl_00GNULIB],
+       [[AC_DEFUN_ONCE(
+           [$1], [$2])]],
+       [[AC_DEFUN(
+           [$1], [$2])]])]))
+gl_iconv_AC_DEFUN([AM_ICONV],
 [
   AM_ICONV_LINK
   if test "$am_cv_func_iconv" = yes; then
     AC_MSG_CHECKING([for iconv declaration])
-    AC_CACHE_VAL(am_cv_proto_iconv, [
-      AC_TRY_COMPILE([
+    AC_CACHE_VAL([am_cv_proto_iconv], [
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[
 #include <stdlib.h>
 #include <iconv.h>
 extern
 #ifdef __cplusplus
 "C"
 #endif
-#if defined(__STDC__) || defined(__cplusplus)
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
 #else
 size_t iconv();
 #endif
-], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+           ]],
+           [[]])],
+        [am_cv_proto_iconv_arg1=""],
+        [am_cv_proto_iconv_arg1="const"])
       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    AC_MSG_RESULT([$]{ac_t:-
-         }[$]am_cv_proto_iconv)
-    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+    AC_MSG_RESULT([
+         $am_cv_proto_iconv])
+    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
       [Define as const if the declaration of iconv() needs const.])
+    dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
+    m4_ifdef([gl_ICONV_H_DEFAULTS],
+      [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
+       if test -n "$am_cv_proto_iconv_arg1"; then
+         ICONV_CONST="const"
+       fi
+      ])
   fi
 ])
diff --git a/m4/include_next.m4 b/m4/include_next.m4
new file mode 100644
index 0000000..a60a261
--- /dev/null
+++ b/m4/include_next.m4
@@ -0,0 +1,270 @@
+# include_next.m4 serial 23
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Derek Price.
+
+dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
+dnl
+dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
+dnl 'include' otherwise.
+dnl
+dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
+dnl supports it in the special case that it is the first include directive in
+dnl the given file, or to 'include' otherwise.
+dnl
+dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
+dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
+dnl '#pragma GCC system_header' has the same effect as if the file was found
+dnl through the include search path specified with '-isystem' options (as
+dnl opposed to the search path specified with '-I' options). Namely, gcc
+dnl does not warn about some things, and on some systems (Solaris and Interix)
+dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
+dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
+dnl of plain '__STDC__'.
+dnl
+dnl PRAGMA_COLUMNS can be used in files that override system header files, so
+dnl as to avoid compilation errors on HP NonStop systems when the gnulib file
+dnl is included by a system header file that does a "#pragma COLUMNS 80" (which
+dnl has the effect of truncating the lines of that file and all files that it
+dnl includes to 80 columns) and the gnulib file has lines longer than 80
+dnl columns.
+
+AC_DEFUN([gl_INCLUDE_NEXT],
+[
+  AC_LANG_PREPROC_REQUIRE()
+  AC_CACHE_CHECK([whether the preprocessor supports include_next],
+    [gl_cv_have_include_next],
+    [rm -rf conftestd1a conftestd1b conftestd2
+     mkdir conftestd1a conftestd1b conftestd2
+     dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
+     dnl AIX 6.1 support include_next when used as first preprocessor directive
+     dnl in a file, but not when preceded by another include directive. Check
+     dnl for this bug by including <stdio.h>.
+     dnl Additionally, with this same compiler, include_next is a no-op when
+     dnl used in a header file that was included by specifying its absolute
+     dnl file name. Despite these two bugs, include_next is used in the
+     dnl compiler's <math.h>. By virtue of the second bug, we need to use
+     dnl include_next as well in this case.
+     cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+     gl_save_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+dnl We intentionally avoid using AC_LANG_SOURCE here.
+     AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
+       [gl_cv_have_include_next=yes],
+       [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+        AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
+          [gl_cv_have_include_next=buggy],
+          [gl_cv_have_include_next=no])
+       ])
+     CPPFLAGS="$gl_save_CPPFLAGS"
+     rm -rf conftestd1a conftestd1b conftestd2
+    ])
+  PRAGMA_SYSTEM_HEADER=
+  if test $gl_cv_have_include_next = yes; then
+    INCLUDE_NEXT=include_next
+    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    if test -n "$GCC"; then
+      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+    fi
+  else
+    if test $gl_cv_have_include_next = buggy; then
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    else
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+    fi
+  fi
+  AC_SUBST([INCLUDE_NEXT])
+  AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
+  AC_SUBST([PRAGMA_SYSTEM_HEADER])
+  AC_CACHE_CHECK([whether system header files limit the line length],
+    [gl_cv_pragma_columns],
+    [dnl HP NonStop systems, which define __TANDEM, have this misfeature.
+     AC_EGREP_CPP([choke me],
+       [
+#ifdef __TANDEM
+choke me
+#endif
+       ],
+       [gl_cv_pragma_columns=yes],
+       [gl_cv_pragma_columns=no])
+    ])
+  if test $gl_cv_pragma_columns = yes; then
+    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
+  else
+    PRAGMA_COLUMNS=
+  fi
+  AC_SUBST([PRAGMA_COLUMNS])
+])
+
+# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------------
+# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
+# '<foo.h>'; otherwise define it to be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# Also, if #include_next works as first preprocessing directive in a file,
+# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
+# be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# That way, a header file with the following line:
+#       #@INCLUDE_NEXT@ @NEXT_FOO_H@
+# or
+#       #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
+# behaves (after sed substitution) as if it contained
+#       #include_next <foo.h>
+# even if the compiler does not support include_next.
+# The three "///" are to pacify Sun C 5.8, which otherwise would say
+# "warning: #include of /usr/include/... may be non-portable".
+# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
+# Note: This macro assumes that the header file is not empty after
+# preprocessing, i.e. it does not only define preprocessor macros but also
+# provides some type/enum definitions or function/variable declarations.
+#
+# This macro also checks whether each header exists, by invoking
+# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument.
+AC_DEFUN([gl_CHECK_NEXT_HEADERS],
+[
+  gl_NEXT_HEADERS_INTERNAL([$1], [check])
+])
+
+# gl_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------
+# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist.
+# This is suitable for headers like <stddef.h> that are standardized by C89
+# and therefore can be assumed to exist.
+AC_DEFUN([gl_NEXT_HEADERS],
+[
+  gl_NEXT_HEADERS_INTERNAL([$1], [assume])
+])
+
+# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS.
+AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
+[
+  AC_REQUIRE([gl_INCLUDE_NEXT])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  m4_if([$2], [check],
+    [AC_CHECK_HEADERS_ONCE([$1])
+    ])
+
+dnl FIXME: gl_next_header and gl_header_exists must be used unquoted
+dnl until we can assume autoconf 2.64 or newer.
+  m4_foreach_w([gl_HEADER_NAME], [$1],
+    [AS_VAR_PUSHDEF([gl_next_header],
+                    [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
+     if test $gl_cv_have_include_next = yes; then
+       AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
+     else
+       AC_CACHE_CHECK(
+         [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+         m4_defn([gl_next_header]),
+         [m4_if([$2], [check],
+            [AS_VAR_PUSHDEF([gl_header_exists],
+                            [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
+             if test AS_VAR_GET(gl_header_exists) = yes; then
+             AS_VAR_POPDEF([gl_header_exists])
+            ])
+               AC_LANG_CONFTEST(
+                 [AC_LANG_SOURCE(
+                    [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
+                  )])
+               dnl AIX "xlc -E" and "cc -E" omit #line directives for header
+               dnl files that contain only a #include of other header files and
+               dnl no non-comment tokens of their own. This leads to a failure
+               dnl to detect the absolute name of <dirent.h>, <signal.h>,
+               dnl <poll.h> and others. The workaround is to force preservation
+               dnl of comments through option -C. This ensures all necessary
+               dnl #line directives are present. GCC supports option -C as well.
+               case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+changequote(,)
+               case "$host_os" in
+                 mingw*)
+                   dnl For the sake of native Windows compilers (excluding gcc),
+                   dnl treat backslash as a directory separator, like /.
+                   dnl Actually, these compilers use a double-backslash as
+                   dnl directory separator, inside the
+                   dnl   # line "filename"
+                   dnl directives.
+                   gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+               dnl A sed expression that turns a string into a basic regular
+               dnl expression, for use within "/.../".
+               gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+changequote([,])
+               gl_header_literal_regex=`echo ']m4_defn([gl_HEADER_NAME])[' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+changequote(,)dnl
+                   s|^/[^/]|//&|
+changequote([,])dnl
+                   p
+                   q
+                 }'
+               dnl eval is necessary to expand gl_absname_cpp.
+               dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+               dnl so use subshell.
+               AS_VAR_SET(gl_next_header,
+                 ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+                      sed -n "$gl_absolute_header_sed"`'"'])
+          m4_if([$2], [check],
+            [else
+               AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
+             fi
+            ])
+         ])
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
+       [AS_VAR_GET(gl_next_header)])
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'gl_HEADER_NAME'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=AS_VAR_GET(gl_next_header)
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
+       [$gl_next_as_first_directive])
+     AS_VAR_POPDEF([gl_next_header])])
+])
+
+# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE;
+# this fallback is safe for all earlier autoconf versions.
+m4_define_default([AC_LANG_DEFINES_PROVIDED])
diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4
new file mode 100644
index 0000000..d4da190
--- /dev/null
+++ b/m4/intlmacosx.m4
@@ -0,0 +1,56 @@
+# intlmacosx.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2004-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on Mac OS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+  dnl Check for API introduced in Mac OS X 10.2.
+  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+    [gt_cv_func_CFPreferencesCopyAppValue],
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <CoreFoundation/CFPreferences.h>]],
+          [[CFPreferencesCopyAppValue(NULL, NULL)]])],
+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
+       [gt_cv_func_CFPreferencesCopyAppValue=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+      [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+  fi
+  dnl Check for API introduced in Mac OS X 10.3.
+  AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <CoreFoundation/CFLocale.h>]],
+          [[CFLocaleCopyCurrent();]])],
+       [gt_cv_func_CFLocaleCopyCurrent=yes],
+       [gt_cv_func_CFLocaleCopyCurrent=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
+      [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+  AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/m4/intmax_t.m4 b/m4/intmax_t.m4
new file mode 100644
index 0000000..c1a4a75
--- /dev/null
+++ b/m4/intmax_t.m4
@@ -0,0 +1,67 @@
+# intmax_t.m4 serial 8
+dnl Copyright (C) 1997-2004, 2006-2007, 2009-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_PREREQ([2.53])
+
+# Define intmax_t to 'long' or 'long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_INTMAX_T],
+[
+  dnl For simplicity, we assume that a header file defines 'intmax_t' if and
+  dnl only if it defines 'uintmax_t'.
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+    AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+    test $ac_cv_type_long_long_int = yes \
+      && ac_type='long long' \
+      || ac_type='long'
+    AC_DEFINE_UNQUOTED([intmax_t], [$ac_type],
+     [Define to long or long long if <inttypes.h> and <stdint.h> don't define.])
+  else
+    AC_DEFINE([HAVE_INTMAX_T], [1],
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
+
+dnl An alternative would be to explicitly test for 'intmax_t'.
+
+AC_DEFUN([gt_AC_TYPE_INTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+          ]],
+          [[intmax_t x = -1; return !x;]])],
+       [gt_cv_c_intmax_t=yes],
+       [gt_cv_c_intmax_t=no])])
+  if test $gt_cv_c_intmax_t = yes; then
+    AC_DEFINE([HAVE_INTMAX_T], [1],
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  else
+    AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+    test $ac_cv_type_long_long_int = yes \
+      && ac_type='long long' \
+      || ac_type='long'
+    AC_DEFINE_UNQUOTED([intmax_t], [$ac_type],
+     [Define to long or long long if <stdint.h> and <inttypes.h> don't define.])
+  fi
+])
diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
new file mode 100644
index 0000000..977206f
--- /dev/null
+++ b/m4/inttypes-pri.m4
@@ -0,0 +1,42 @@
+# inttypes-pri.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1997-2002, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.53])
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values.  This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+  AC_CHECK_HEADERS([inttypes.h])
+  if test $ac_cv_header_inttypes_h = yes; then
+    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+      [gt_cv_inttypes_pri_broken],
+      [
+        AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[
+#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+             ]],
+             [[]])],
+          [gt_cv_inttypes_pri_broken=no],
+          [gt_cv_inttypes_pri_broken=yes])
+      ])
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+    AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1],
+      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+  AC_SUBST([PRI_MACROS_BROKEN])
+])
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
new file mode 100644
index 0000000..eec4f41
--- /dev/null
+++ b/m4/inttypes.m4
@@ -0,0 +1,157 @@
+# inttypes.m4 serial 26
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Derek Price, Bruno Haible.
+dnl Test whether <inttypes.h> is supported or must be substituted.
+
+AC_DEFUN([gl_INTTYPES_H],
+[
+  AC_REQUIRE([gl_INTTYPES_INCOMPLETE])
+  gl_INTTYPES_PRI_SCN
+])
+
+AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
+[
+  AC_REQUIRE([gl_STDINT_H])
+  AC_CHECK_HEADERS_ONCE([inttypes.h])
+
+  dnl Override <inttypes.h> always, so that the portability warnings work.
+  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+  gl_CHECK_NEXT_HEADERS([inttypes.h])
+
+  AC_REQUIRE([gl_MULTIARCH])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <inttypes.h>
+    ]], [imaxabs imaxdiv strtoimax strtoumax])
+])
+
+# Ensure that the PRI* and SCN* macros are defined appropriately.
+AC_DEFUN([gl_INTTYPES_PRI_SCN],
+[
+  AC_REQUIRE([gt_INTTYPES_PRI])
+
+  PRIPTR_PREFIX=
+  if test -n "$STDINT_H"; then
+    dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
+    PRIPTR_PREFIX='"l"'
+  else
+    dnl Using the system's <stdint.h>.
+    for glpfx in '' l ll I64; do
+      case $glpfx in
+        '')  gltype1='int';;
+        l)   gltype1='long int';;
+        ll)  gltype1='long long int';;
+        I64) gltype1='__int64';;
+      esac
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([[#include <stdint.h>
+           extern intptr_t foo;
+           extern $gltype1 foo;]])],
+        [PRIPTR_PREFIX='"'$glpfx'"'])
+      test -n "$PRIPTR_PREFIX" && break
+    done
+  fi
+  AC_SUBST([PRIPTR_PREFIX])
+
+  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+    [INT32_MAX_LT_INTMAX_MAX],
+    [defined INT32_MAX && defined INTMAX_MAX],
+    [INT32_MAX < INTMAX_MAX],
+    [sizeof (int) < sizeof (long long int)])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+      [INT64_MAX_EQ_LONG_MAX],
+      [defined INT64_MAX],
+      [INT64_MAX == LONG_MAX],
+      [sizeof (long long int) == sizeof (long int)])
+  else
+    INT64_MAX_EQ_LONG_MAX=-1
+  fi
+  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+    [UINT32_MAX_LT_UINTMAX_MAX],
+    [defined UINT32_MAX && defined UINTMAX_MAX],
+    [UINT32_MAX < UINTMAX_MAX],
+    [sizeof (unsigned int) < sizeof (unsigned long long int)])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+      [UINT64_MAX_EQ_ULONG_MAX],
+      [defined UINT64_MAX],
+      [UINT64_MAX == ULONG_MAX],
+      [sizeof (unsigned long long int) == sizeof (unsigned long int)])
+  else
+    UINT64_MAX_EQ_ULONG_MAX=-1
+  fi
+])
+
+# Define the symbol $1 to be 1 if the condition is true, 0 otherwise.
+# If $2 is true, the condition is $3; otherwise if long long int is supported
+# approximate the condition with $4; otherwise, assume the condition is false.
+# The condition should work on all C99 platforms; the approximations should be
+# good enough to work on all practical pre-C99 platforms.
+# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants.
+AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
+[
+  AC_CACHE_CHECK([whether $3],
+    [gl_cv_test_$1],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if $2
+             #define CONDITION ($3)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION ($4)
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];]])],
+       [gl_cv_test_$1=yes],
+       [gl_cv_test_$1=no])])
+  if test $gl_cv_test_$1 = yes; then
+    $1=1;
+  else
+    $1=0;
+  fi
+  AC_SUBST([$1])
+])
+
+AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
+[
+  GNULIB_IMAXABS=0;      AC_SUBST([GNULIB_IMAXABS])
+  GNULIB_IMAXDIV=0;      AC_SUBST([GNULIB_IMAXDIV])
+  GNULIB_STRTOIMAX=0;    AC_SUBST([GNULIB_STRTOIMAX])
+  GNULIB_STRTOUMAX=0;    AC_SUBST([GNULIB_STRTOUMAX])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_DECL_IMAXABS=1;   AC_SUBST([HAVE_DECL_IMAXABS])
+  HAVE_DECL_IMAXDIV=1;   AC_SUBST([HAVE_DECL_IMAXDIV])
+  HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX])
+  HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX])
+  REPLACE_STRTOIMAX=0;   AC_SUBST([REPLACE_STRTOIMAX])
+  INT32_MAX_LT_INTMAX_MAX=1;  AC_SUBST([INT32_MAX_LT_INTMAX_MAX])
+  INT64_MAX_EQ_LONG_MAX='defined _LP64';  AC_SUBST([INT64_MAX_EQ_LONG_MAX])
+  PRI_MACROS_BROKEN=0;   AC_SUBST([PRI_MACROS_BROKEN])
+  PRIPTR_PREFIX=__PRIPTR_PREFIX;  AC_SUBST([PRIPTR_PREFIX])
+  UINT32_MAX_LT_UINTMAX_MAX=1;  AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX])
+  UINT64_MAX_EQ_ULONG_MAX='defined _LP64';  AC_SUBST([UINT64_MAX_EQ_ULONG_MAX])
+])
diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
new file mode 100644
index 0000000..91c7bca
--- /dev/null
+++ b/m4/inttypes_h.m4
@@ -0,0 +1,29 @@
+# inttypes_h.m4 serial 10
+dnl Copyright (C) 1997-2004, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+#include <sys/types.h>
+#include <inttypes.h>
+          ]],
+          [[uintmax_t i = (uintmax_t) -1; return !i;]])],
+       [gl_cv_header_inttypes_h=yes],
+       [gl_cv_header_inttypes_h=no])])
+  if test $gl_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1],
+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/inttypes_h_gl.m4 b/m4/inttypes_h_gl.m4
deleted file mode 100644
index a5d075d..0000000
--- a/m4/inttypes_h_gl.m4
+++ /dev/null
@@ -1,26 +0,0 @@
-# inttypes_h.m4 serial 6
-dnl Copyright (C) 1997-2004 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
-[
-  AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h,
-  [AC_TRY_COMPILE(
-    [#include <sys/types.h>
-#include <inttypes.h>],
-    [uintmax_t i = (uintmax_t) -1;],
-    gl_cv_header_inttypes_h=yes,
-    gl_cv_header_inttypes_h=no)])
-  if test $gl_cv_header_inttypes_h = yes; then
-    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
-      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
-       and declares uintmax_t. ])
-  fi
-])
diff --git a/m4/isnan.m4 b/m4/isnan.m4
new file mode 100644
index 0000000..7ad7127
--- /dev/null
+++ b/m4/isnan.m4
@@ -0,0 +1,44 @@
+# isnan.m4 serial 5
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_ISNAN],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_FUNC_ISNANF])
+  AC_REQUIRE([gl_FUNC_ISNAND])
+  AC_REQUIRE([gl_FUNC_ISNANL])
+
+  # If we replaced any of the underlying isnan* functions, replace
+  # the isnan macro; it undoubtedly suffers from the same flaws.
+  AC_MSG_CHECKING([whether isnan macro works])
+  if test $gl_func_isnanf = yes \
+     && test $gl_func_isnand = yes \
+     && test $gl_func_isnanl = yes; then
+    AC_MSG_RESULT([yes])
+    ISNAN_LIBM=
+    dnl Append $ISNANF_LIBM to ISNAN_LIBM, avoiding gratuitous duplicates.
+    case " $ISNAN_LIBM " in
+      *" $ISNANF_LIBM "*) ;;
+      *) ISNAN_LIBM="$ISNAN_LIBM $ISNANF_LIBM" ;;
+    esac
+    dnl Append $ISNAND_LIBM to ISNAN_LIBM, avoiding gratuitous duplicates.
+    case " $ISNAN_LIBM " in
+      *" $ISNAND_LIBM "*) ;;
+      *) ISNAN_LIBM="$ISNAN_LIBM $ISNAND_LIBM" ;;
+    esac
+    dnl Append $ISNANL_LIBM to ISNAN_LIBM, avoiding gratuitous duplicates.
+    case " $ISNAN_LIBM " in
+      *" $ISNANL_LIBM "*) ;;
+      *) ISNAN_LIBM="$ISNAN_LIBM $ISNANL_LIBM" ;;
+    esac
+  else
+    AC_MSG_RESULT([no])
+    dnl REPLACE_ISNAN=1 also makes sure the rpl_isnan[fdl] functions get built.
+    REPLACE_ISNAN=1
+    ISNAN_LIBM=
+  fi
+  AC_SUBST([ISNAN_LIBM])
+])
diff --git a/m4/isnand.m4 b/m4/isnand.m4
new file mode 100644
index 0000000..54b64a4
--- /dev/null
+++ b/m4/isnand.m4
@@ -0,0 +1,96 @@
+# isnand.m4 serial 11
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check how to get or define isnand().
+
+AC_DEFUN([gl_FUNC_ISNAND],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  ISNAND_LIBM=
+  gl_HAVE_ISNAND_NO_LIBM
+  if test $gl_cv_func_isnand_no_libm = no; then
+    gl_HAVE_ISNAND_IN_LIBM
+    if test $gl_cv_func_isnand_in_libm = yes; then
+      ISNAND_LIBM=-lm
+    fi
+  fi
+  dnl The variable gl_func_isnand set here is used by isnan.m4.
+  if test $gl_cv_func_isnand_no_libm = yes \
+     || test $gl_cv_func_isnand_in_libm = yes; then
+    gl_func_isnand=yes
+  else
+    gl_func_isnand=no
+    HAVE_ISNAND=0
+  fi
+  AC_SUBST([ISNAND_LIBM])
+])
+
+dnl Check how to get or define isnand() without linking with libm.
+
+AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM],
+[
+  gl_HAVE_ISNAND_NO_LIBM
+  gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm
+  if test $gl_cv_func_isnand_no_libm = yes; then
+    AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1],
+      [Define if the isnan(double) function is available in libc.])
+  fi
+])
+
+dnl Prerequisites of replacement isnand definition. It does not need -lm.
+AC_DEFUN([gl_PREREQ_ISNAND],
+[
+  AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
+])
+
+dnl Test whether isnand() can be used with libm.
+
+AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(double) can be used with libm],
+    [gl_cv_func_isnand_in_libm],
+    [
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #elif defined isnan
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;]],
+           [[return isnand (x);]])],
+        [gl_cv_func_isnand_in_libm=yes],
+        [gl_cv_func_isnand_in_libm=no])
+      LIBS="$save_LIBS"
+    ])
+])
+
+AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm],
+    [gl_cv_func_isnand_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #else
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;]],
+           [[return isnand (x);]])],
+        [gl_cv_func_isnand_no_libm=yes],
+        [gl_cv_func_isnand_no_libm=no])
+    ])
+])
diff --git a/m4/isnanf.m4 b/m4/isnanf.m4
new file mode 100644
index 0000000..97f638a
--- /dev/null
+++ b/m4/isnanf.m4
@@ -0,0 +1,188 @@
+# isnanf.m4 serial 14
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check how to get or define isnanf().
+
+AC_DEFUN([gl_FUNC_ISNANF],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  ISNANF_LIBM=
+  gl_HAVE_ISNANF_NO_LIBM
+  if test $gl_cv_func_isnanf_no_libm = no; then
+    gl_HAVE_ISNANF_IN_LIBM
+    if test $gl_cv_func_isnanf_in_libm = yes; then
+      ISNANF_LIBM=-lm
+    fi
+  fi
+  dnl The variable gl_func_isnanf set here is used by isnan.m4.
+  if test $gl_cv_func_isnanf_no_libm = yes \
+     || test $gl_cv_func_isnanf_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $ISNANF_LIBM"
+    gl_ISNANF_WORKS
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_isnanf_works" in
+      *yes) gl_func_isnanf=yes ;;
+      *)    gl_func_isnanf=no; ISNANF_LIBM= ;;
+    esac
+  else
+    gl_func_isnanf=no
+  fi
+  if test $gl_func_isnanf != yes; then
+    HAVE_ISNANF=0
+  fi
+  AC_SUBST([ISNANF_LIBM])
+])
+
+dnl Check how to get or define isnanf() without linking with libm.
+
+AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM],
+[
+  gl_HAVE_ISNANF_NO_LIBM
+  if test $gl_cv_func_isnanf_no_libm = yes; then
+    gl_ISNANF_WORKS
+  fi
+  if test $gl_cv_func_isnanf_no_libm = yes \
+     && { case "$gl_cv_func_isnanf_works" in
+            *yes) true;;
+            *) false;;
+          esac
+        }; then
+    gl_func_isnanf_no_libm=yes
+    AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1],
+      [Define if the isnan(float) function is available in libc.])
+  else
+    gl_func_isnanf_no_libm=no
+  fi
+])
+
+dnl Prerequisites of replacement isnanf definition. It does not need -lm.
+AC_DEFUN([gl_PREREQ_ISNANF],
+[
+  gl_FLOAT_EXPONENT_LOCATION
+])
+
+dnl Test whether isnanf() can be used without libm.
+AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm],
+    [gl_cv_func_isnanf_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;]],
+           [[return isnanf (x);]])],
+        [gl_cv_func_isnanf_no_libm=yes],
+        [gl_cv_func_isnanf_no_libm=no])
+    ])
+])
+
+dnl Test whether isnanf() can be used with libm.
+AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(float) can be used with libm],
+    [gl_cv_func_isnanf_in_libm],
+    [
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;]],
+           [[return isnanf (x);]])],
+        [gl_cv_func_isnanf_in_libm=yes],
+        [gl_cv_func_isnanf_in_libm=no])
+      LIBS="$save_LIBS"
+    ])
+])
+
+dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1),
+dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN
+dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5).
+AC_DEFUN([gl_ISNANF_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION])
+  AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanf
+# define isnanf(x) __builtin_isnanf ((float)(x))
+#elif defined isnan
+# undef isnanf
+# define isnanf(x) isnan ((float)(x))
+#endif
+/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0.  */
+#ifdef __DECC
+static float
+NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#else
+# define NaN() (0.0f / 0.0f)
+#endif
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; float value; } memory_float;
+int main()
+{
+  int result = 0;
+
+  if (isnanf (1.0f / 0.0f))
+    result |= 1;
+
+  if (!isnanf (NaN ()))
+    result |= 2;
+
+#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
+  /* The isnanf function should be immune against changes in the sign bit and
+     in the mantissa bits.  The xor operation twiddles a bit that can only be
+     a sign bit or a mantissa bit.  */
+  if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0)
+    {
+      memory_float m;
+
+      m.value = NaN ();
+      /* Set the bits below the exponent to 01111...111.  */
+      m.word[0] &= -1U << FLT_EXPBIT0_BIT;
+      m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1;
+      if (!isnanf (m.value))
+        result |= 4;
+    }
+#endif
+
+  return result;
+}]])],
+        [gl_cv_func_isnanf_works=yes],
+        [gl_cv_func_isnanf_works=no],
+        [case "$host_os" in
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no";;
+           *)                gl_cv_func_isnanf_works="guessing yes";;
+         esac
+        ])
+    ])
+])
diff --git a/m4/isnanl.m4 b/m4/isnanl.m4
new file mode 100644
index 0000000..81469ab
--- /dev/null
+++ b/m4/isnanl.m4
@@ -0,0 +1,255 @@
+# isnanl.m4 serial 17
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ISNANL],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  ISNANL_LIBM=
+  gl_HAVE_ISNANL_NO_LIBM
+  if test $gl_cv_func_isnanl_no_libm = no; then
+    gl_HAVE_ISNANL_IN_LIBM
+    if test $gl_cv_func_isnanl_in_libm = yes; then
+      ISNANL_LIBM=-lm
+    fi
+  fi
+  dnl The variable gl_func_isnanl set here is used by isnan.m4.
+  if test $gl_cv_func_isnanl_no_libm = yes \
+     || test $gl_cv_func_isnanl_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $ISNANL_LIBM"
+    gl_FUNC_ISNANL_WORKS
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_isnanl_works" in
+      *yes) gl_func_isnanl=yes ;;
+      *)    gl_func_isnanl=no; ISNANL_LIBM= ;;
+    esac
+  else
+    gl_func_isnanl=no
+  fi
+  if test $gl_func_isnanl != yes; then
+    HAVE_ISNANL=0
+  fi
+  AC_SUBST([ISNANL_LIBM])
+])
+
+AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM],
+[
+  gl_HAVE_ISNANL_NO_LIBM
+  gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm
+  if test $gl_func_isnanl_no_libm = yes; then
+    gl_FUNC_ISNANL_WORKS
+    case "$gl_cv_func_isnanl_works" in
+      *yes) ;;
+      *)    gl_func_isnanl_no_libm=no ;;
+    esac
+  fi
+  if test $gl_func_isnanl_no_libm = yes; then
+    AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1],
+      [Define if the isnan(long double) function is available in libc.])
+  fi
+])
+
+dnl Prerequisites of replacement isnanl definition. It does not need -lm.
+AC_DEFUN([gl_PREREQ_ISNANL],
+[
+  gl_LONG_DOUBLE_EXPONENT_LOCATION
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+])
+
+dnl Test whether isnanl() can be used without libm.
+AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm],
+    [gl_cv_func_isnanl_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;]],
+           [[return isnanl (x);]])],
+        [gl_cv_func_isnanl_no_libm=yes],
+        [gl_cv_func_isnanl_no_libm=no])
+    ])
+])
+
+dnl Test whether isnanl() can be used with libm.
+AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(long double) can be used with libm],
+    [gl_cv_func_isnanl_in_libm],
+    [
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;]],
+           [[return isnanl (x);]])],
+        [gl_cv_func_isnanl_in_libm=yes],
+        [gl_cv_func_isnanl_in_libm=no])
+      LIBS="$save_LIBS"
+    ])
+])
+
+dnl Test whether isnanl() recognizes all numbers which are neither finite nor
+dnl infinite. This test fails e.g. on NetBSD/i386 and on glibc/ia64.
+dnl Also, the GCC >= 4.0 built-in __builtin_isnanl does not pass the tests
+dnl - for pseudo-denormals on i686 and x86_64,
+dnl - for pseudo-zeroes, unnormalized numbers, and pseudo-denormals on ia64.
+AC_DEFUN([gl_FUNC_ISNANL_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_BIGENDIAN])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanl
+# define isnanl(x) __builtin_isnanl ((long double)(x))
+#elif defined isnan
+# undef isnanl
+# define isnanl(x) isnan ((long double)(x))
+#endif
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; long double value; }
+        memory_long_double;
+/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
+   runtime type conversion.  */
+#ifdef __sgi
+static long double NaNl ()
+{
+  double zero = 0.0;
+  return zero / zero;
+}
+#else
+# define NaNl() (0.0L / 0.0L)
+#endif
+int main ()
+{
+  int result = 0;
+
+  if (!isnanl (NaNl ()))
+    result |= 1;
+
+  {
+    memory_long_double m;
+    unsigned int i;
+
+    /* The isnanl function should be immune against changes in the sign bit and
+       in the mantissa bits.  The xor operation twiddles a bit that can only be
+       a sign bit or a mantissa bit (since the exponent never extends to
+       bit 31).  */
+    m.value = NaNl ();
+    m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
+    for (i = 0; i < NWORDS; i++)
+      m.word[i] |= 1;
+    if (!isnanl (m.value))
+      result |= 1;
+  }
+
+#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16),    \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
+     Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
+       Intel IA-64 Architecture Software Developer's Manual, Volume 1:
+       Application Architecture.
+       Table 5-2 "Floating-Point Register Encodings"
+       Figure 5-6 "Memory to Floating-Point Register Data Translation"
+   */
+  { /* Pseudo-NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 64;
+  }
+#endif
+
+  return result;
+}]])],
+        [gl_cv_func_isnanl_works=yes],
+        [gl_cv_func_isnanl_works=no],
+        [case "$host_cpu" in
+                                 # Guess no on ia64, x86_64, i386.
+           ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";;
+           *)
+             case "$host_os" in
+               netbsd*) gl_cv_func_isnanl_works="guessing no";;
+               *)       gl_cv_func_isnanl_works="guessing yes";;
+             esac
+             ;;
+         esac
+        ])
+    ])
+])
diff --git a/m4/iswblank.m4 b/m4/iswblank.m4
new file mode 100644
index 0000000..8e63a03
--- /dev/null
+++ b/m4/iswblank.m4
@@ -0,0 +1,41 @@
+# iswblank.m4 serial 4
+dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ISWBLANK],
+[
+  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+  AC_REQUIRE([gl_WCTYPE_H])
+  dnl Persuade glibc <wctype.h> to declare iswblank().
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_FUNCS_ONCE([iswblank])
+  AC_CHECK_DECLS([iswblank], , , [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+]])
+  if test $ac_cv_func_iswblank = no; then
+    HAVE_ISWBLANK=0
+    if test $ac_cv_have_decl_iswblank = yes; then
+      REPLACE_ISWBLANK=1
+    fi
+  fi
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+    dnl Redefine all of iswcntrl, ..., towupper in <wctype.h>.
+    :
+  else
+    if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then
+      dnl Redefine only iswblank.
+      :
+    fi
+  fi
+
+])
diff --git a/m4/javacomp.m4 b/m4/javacomp.m4
new file mode 100644
index 0000000..8213c9f
--- /dev/null
+++ b/m4/javacomp.m4
@@ -0,0 +1,637 @@
+# javacomp.m4 serial 12
+dnl Copyright (C) 2001-2003, 2006-2007, 2009-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Prerequisites of javacomp.sh.
+# gt_JAVACOMP([source-version], [target-version])
+# Sets HAVE_JAVACOMP to nonempty if javacomp.sh will allow Java source code
+# according to source-version to be compiled to Java bytecode classes in the
+# target-version format.
+#
+# source-version can be:    support for
+#           1.3             inner classes
+#           1.4             assert keyword
+#           1.5             generic classes and methods
+#           1.6             (not yet supported)
+#
+# target-version can be:  classfile version:
+#           1.1                 45.3
+#           1.2                 46.0
+#           1.3                 47.0
+#           1.4                 48.0
+#           1.5                 49.0
+#           1.6                 50.0
+# The classfile version of a .class file can be determined through the "file"
+# command. More portably, the classfile major version can be determined through
+# "od -A n -t d1 -j 7 -N 1 classfile".
+# target-version can also be omitted. In this case, the required target-version
+# is determined from the found JVM (see macro gt_JAVAEXEC):
+#      target-version   for JVM
+#           1.1         JDK 1.1, jview
+#           1.2         JDK/JRE 1.2
+#           1.3         JDK/JRE 1.3, gij 3.3, 3.4
+#           1.4         JDK/JRE 1.4, gij 4.0, 4.1
+#           1.5         JDK/JRE 1.5
+#           1.6         JDK/JRE 1.6
+# Note: gij >= 3.3 can in some cases handle classes compiled with -target 1.4,
+# and gij >= 4.1 can in some cases partially handle classes compiled with
+# -target 1.5, but I have no idea how complete this support is.
+#
+# Specifying target-version is useful when building a library (.jar) that is
+# useful outside the given package. Omitting target-version is useful when
+# building an application.
+#
+# It is unreasonable to ask for:
+#   - target-version < 1.4 with source-version >= 1.4, or
+#   - target-version < 1.5 with source-version >= 1.5, or
+#   - target-version < 1.6 with source-version >= 1.6,
+# because even Sun's javac doesn't support these combinations.
+#
+# It is redundant to ask for a target-version > source-version, since the
+# smaller target-version = source-version will also always work and newer JVMs
+# support the older target-versions too. Except for the case
+# target-version = 1.4, source-version = 1.3, which allows gcj versions 3.0
+# to 3.2 to be used.
+
+AC_DEFUN([gt_JAVACOMP],
+[
+  ifelse([$2], [], [AC_REQUIRE([gt_JAVAEXEC])], [])
+  AC_EGREP_CPP([yes], [
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  yes
+#endif
+], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':')
+  source_version=$1
+  test -n "$source_version" || {
+    AC_MSG_ERROR([missing source-version argument to gt_@&t@JAVACOMP])
+  }
+  ifelse([$2], [],
+    [if test -n "$HAVE_JAVAEXEC"; then
+       dnl Use $CONF_JAVA to determine the JVM's version.
+changequote(,)dnl
+       cat > conftestver.java <<EOF
+public class conftestver {
+  public static void main (String[] args) {
+    System.out.println(System.getProperty("java.specification.version"));
+  }
+}
+EOF
+changequote([,])dnl
+       dnl A precompiled version of conftestver.java, compiled with
+       dnl "javac -target 1.1". This avoids having to compile conftestver.java
+       dnl during each test for a suitable Java compiler.
+       dnl For the conversion from binary to this ASCII encapsulation, avoiding
+       dnl to assume the presence of uudecode, use the command
+       dnl   $ od -A n -t o1 < conftestver.class | tr ' ' '\012'| sort | uniq | sed -e '/^$/d' -e 's,^,\\,' | tr -d '\012'
+       dnl and the long tr command in opposite direction.
+       dnl Finally move the position corresponding to \055 to the last position,
+       dnl to work around a coreutils-5.x bug.
+       echo 'yzwx!$!I!D,!)!3+!4!5*!6,!4!7,!8!9)!:)!;"!(MeienN"!$FGW"!%Ojab"!2QeibRohZblVYZgb"!%hYei"!9FXQfYpYKgYidKUnleidLGW"!,Ujol_bPegb"!3_jicnbmnpblJfYpY/!*!+)!</!=!>"!=fYpYJmkb_ece_YnejiJpblmeji/!?!@)!A/!B!C"!._jicnbmnpbl"!3fYpYKgYidKSZfb_n"!3fYpYKgYidKUqmnbh"!$jon"!8QfYpYKejKTleinUnlbYhL"!.dbnTljkblnq"!EFQfYpYKgYidKUnleidLGQfYpYKgYidKUnleidL"!6fYpYKejKTleinUnlbYh"!)kleingi"!8FQfYpYKgYidKUnleidLGW!D!(!)!!!!!#!"!*!+!"!,!!!@!"!"!!!&Hu!"r!!!"!.!!!(!"!!!"!+!/!0!"!,!!!F!#!"!!!/s!#5$v!%t!&r!!!"!.!!!,!#!!!$!.!%!"!1!!!#!2' \
+         | tr -d '\012\015' \
+         | tr '!"#$%&()*+,./0123456789:;<=>?@ABCDEFGHJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzI' '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\046\050\051\052\056\057\073\074\076\103\106\114\116\117\120\123\124\126\133\141\142\143\144\145\146\147\151\152\154\155\156\157\160\162\163\164\165\166\171\261\262\266\267\270\272\276\312\376\055' \
+         > conftestver.class
+       target_version=`{
+         unset JAVA_HOME
+         echo "$as_me:__oline__: CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver" >&AS_MESSAGE_LOG_FD
+         CLASSPATH=.${CLASSPATH:+$CLASSPATH_SEPARATOR$CLASSPATH} $CONF_JAVA conftestver 2>&AS_MESSAGE_LOG_FD
+       }`
+       case "$target_version" in
+         1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6) ;;
+         null)
+           dnl JDK 1.1.X returns null.
+           target_version=1.1 ;;
+         *) AC_MSG_WARN([unknown target-version $target_version, please update gt_@&t@JAVACOMP macro])
+            target_version=1.1 ;;
+       esac
+     else
+       target_version="1.1"
+     fi
+    ],
+    [target_version=$2])
+  case "$source_version" in
+    1.3) goodcode='class conftest {}'
+         failcode='class conftestfail { static { assert(true); } }' ;;
+    1.4) goodcode='class conftest     { static { assert(true); } }'
+         failcode='class conftestfail<T> { T foo() { return null; } }' ;;
+    1.5) goodcode='class conftest<T>     { T foo() { return null; } }'
+         failcode='class conftestfail syntax error' ;;
+    *) AC_MSG_ERROR([invalid source-version argument to gt_@&t@JAVACOMP: $source_version]) ;;
+  esac
+  case "$target_version" in
+    1.1) cfversion=45 ;;
+    1.2) cfversion=46 ;;
+    1.3) cfversion=47 ;;
+    1.4) cfversion=48 ;;
+    1.5) cfversion=49 ;;
+    1.6) cfversion=50 ;;
+    *) AC_MSG_ERROR([invalid target-version argument to gt_@&t@JAVACOMP: $target_version]) ;;
+  esac
+  # Function to output the classfile version of a file (8th byte) in decimal.
+  if od -A x < /dev/null >/dev/null 2>/dev/null; then
+    # Use POSIX od.
+    func_classfile_version ()
+    {
+      od -A n -t d1 -j 7 -N 1 "[$]1"
+    }
+  else
+    # Use BSD hexdump.
+    func_classfile_version ()
+    {
+      dd if="[$]1" bs=1 count=1 skip=7 2>/dev/null | hexdump -e '1/1 "%3d "'
+      echo
+    }
+  fi
+  AC_MSG_CHECKING([for Java compiler])
+  dnl
+  dnl The support of GNU gcj for target-version and source-version:
+  dnl
+  dnl   gcj 3.0.4 to 4.2 does not have a way to specify the target-version.
+  dnl   It always assumes target-version=1.4 but labels the class files as 1.1.
+  dnl   One consequence of this is that gcj compiles GetURL.java to invalid
+  dnl   bytecode, which crashes with a VerifyError when executed by Sun Java
+  dnl   1.3.1. The bug is registered as java/7066, see
+  dnl   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7066
+  dnl   gcj 4.3 and newer has an option -ftarget=1.X.
+  dnl
+  dnl   For gcj < 3.3, the source-version always is 1.3.
+  dnl   For 3.3 <= gcj < 4.3, the source-version defaults to 1.4; option
+  dnl   "-fno-assert" switches to source-version 1.3.
+  dnl   gcj >= 4.3 has an option -fsource=1.X.
+  dnl
+  dnl The support of Sun javac for target-version and source-version:
+  dnl
+  dnl   javac 1.3:   -target 1.1 1.2 1.3               default: 1.1
+  dnl                                                  source always: 1.3
+  dnl
+  dnl   javac 1.4:   -target 1.1 1.2 1.3 1.4           default: 1.2
+  dnl                -source 1.3 1.4                   default: 1.3
+  dnl                -target 1.1/1.2/1.3 only possible with -source 1.3 or no -source
+  dnl
+  dnl   javac 1.5:   -target 1.1 1.2 1.3 1.4 1.5       default: 1.5
+  dnl                -source 1.3 1.4 1.5               default: 1.5
+  dnl                -target 1.1/1.2/1.3 only possible with -source 1.3
+  dnl                -target 1.4 only possible with -source 1.3/1.4
+  dnl
+  dnl   javac 1.6:   -target 1.1 1.2 1.3 1.4 1.5 1.6   default: 1.6
+  dnl                -source 1.3 1.4 1.5 1.6           default: 1.5
+  dnl                -target 1.1/1.2/1.3 only possible with -source 1.3
+  dnl                -target 1.4 only possible with -source 1.3/1.4
+  dnl                -target 1.5 only possible with -source 1.3/1.4/1.5 or no -source
+  dnl
+  dnl The support of jikes for target-version and source-version:
+  dnl
+  dnl   jikes 1.14 does not have a way to specify the target-version. It
+  dnl   always assumes target-version=1.1.
+  dnl
+  dnl   For jikes 1.14, the source-version always is 1.3.
+  dnl
+  CONF_JAVAC=
+  HAVE_JAVAC_ENVVAR=
+  HAVE_GCJ_C=
+  HAVE_JAVAC=
+  HAVE_JIKES=
+  HAVE_JAVACOMP=
+changequote(,)dnl
+  cat > conftestlib.java <<EOF
+public class conftestlib {
+  public static void main (String[] args) {
+  }
+}
+EOF
+changequote([,])dnl
+  echo "$goodcode" > conftest.java
+  echo "$failcode" > conftestfail.java
+  dnl If the user has set the JAVAC environment variable, use that, if it
+  dnl satisfies the constraints (possibly after adding -target and -source
+  dnl options).
+  if test -n "$JAVAC"; then
+    dnl Try the original $JAVAC.
+    if $JAVAC --version 2>/dev/null | sed -e 1q | grep gcj > /dev/null; then
+      dnl It's a version of gcj.
+changequote(,)dnl
+      if $JAVAC --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then
+changequote([,])dnl
+        dnl It's a version of gcj >= 4.3. Assume the classfile versions are correct.
+        dnl Try $JAVAC.
+        rm -f conftest.class
+        if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD
+             $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+           } \
+           && test -f conftest.class \
+           && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+          dnl Try adding -fsource option if it is useful.
+          rm -f conftest.class
+          rm -f conftestfail.class
+          if { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+               $JAVAC -fsource="$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \
+             && { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                  $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                } \
+             && test -f conftestfail.class \
+             && ! { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                    $JAVAC -fsource="$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                  }; then
+            CONF_JAVAC="$JAVAC -fsource=$source_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          else
+            CONF_JAVAC="$JAVAC"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        else
+          dnl Try with -fsource and -ftarget options.
+          rm -f conftest.class
+          rm -f conftestfail.class
+          if { echo "$as_me:__oline__: $JAVAC -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+               $JAVAC -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+            CONF_JAVAC="$JAVAC -fsource=$source_version -ftarget=$target_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        fi
+      else
+        dnl It's a version of gcj < 4.3. Ignore the version of conftest.class.
+        if test "$target_version" = 1.4 && test "$source_version" = 1.4; then
+          dnl Try $JAVAC.
+          rm -f conftest.class
+          if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD
+               $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+             } \
+             && test -f conftest.class; then
+            CONF_JAVAC="$JAVAC"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        else
+          if test "$target_version" = 1.4 && test "$source_version" = 1.3; then
+            dnl Try $JAVAC and "$JAVAC -fno-assert". But add -fno-assert only if
+            dnl it makes a difference. (It could already be part of $JAVAC.)
+            javac_works=
+            rm -f conftest.class
+            if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                 $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+               } \
+               && test -f conftest.class; then
+              javac_works=1
+            fi
+            javac_noassert_works=
+            rm -f conftest.class
+            if { echo "$as_me:__oline__: $JAVAC -fno-assert -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                 $JAVAC -fno-assert -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+               } \
+               && test -f conftest.class; then
+              javac_noassert_works=1
+            fi
+            if test -n "$javac_works" && test -n "$javac_noassert_works"; then
+              rm -f conftestfail.class
+              if { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                   $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                 } \
+                 && test -f conftestfail.class \
+                 && ! { echo "$as_me:__oline__: $JAVAC -fno-assert -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                        $JAVAC -fno-assert -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                      }; then
+                dnl "$JAVAC -fno-assert" works better than $JAVAC.
+                javac_works=
+              fi
+            fi
+            if test -n "$javac_works"; then
+              CONF_JAVAC="$JAVAC"
+              HAVE_JAVAC_ENVVAR=1
+              HAVE_JAVACOMP=1
+            else
+              if test -n "$javac_noassert_works"; then
+                CONF_JAVAC="$JAVAC -fno-assert"
+                HAVE_JAVAC_ENVVAR=1
+                HAVE_JAVACOMP=1
+              fi
+            fi
+          fi
+        fi
+      fi
+    else
+      dnl It's not gcj. Assume the classfile versions are correct.
+      dnl Try $JAVAC.
+      rm -f conftest.class
+      if { echo "$as_me:__oline__: $JAVAC -d . conftest.java" >&AS_MESSAGE_LOG_FD
+           $JAVAC -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+         } \
+         && test -f conftest.class \
+         && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+        dnl Try adding -source option if it is useful.
+        rm -f conftest.class
+        rm -f conftestfail.class
+        if { echo "$as_me:__oline__: $JAVAC -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+             $JAVAC -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+           } \
+           && test -f conftest.class \
+           && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \
+           && { echo "$as_me:__oline__: $JAVAC -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                $JAVAC -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+              } \
+           && test -f conftestfail.class \
+           && ! { echo "$as_me:__oline__: $JAVAC -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                  $JAVAC -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                }; then
+          CONF_JAVAC="$JAVAC -source $source_version"
+          HAVE_JAVAC_ENVVAR=1
+          HAVE_JAVACOMP=1
+        else
+          CONF_JAVAC="$JAVAC"
+          HAVE_JAVAC_ENVVAR=1
+          HAVE_JAVACOMP=1
+        fi
+      else
+        dnl Try with -target option alone. (Sun javac 1.3.1 has the -target
+        dnl option but no -source option.)
+        rm -f conftest.class
+        if { echo "$as_me:__oline__: $JAVAC -target $target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+             $JAVAC -target "$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+           } \
+           && test -f conftest.class \
+           && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+          dnl Try adding -source option if it is useful.
+          rm -f conftest.class
+          rm -f conftestfail.class
+          if { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+               $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \
+             && { echo "$as_me:__oline__: $JAVAC -target $target_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                  $JAVAC -target "$target_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                } \
+             && test -f conftestfail.class \
+             && ! { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                    $JAVAC -target "$target_version" -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                  }; then
+            CONF_JAVAC="$JAVAC -target $target_version -source $source_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          else
+            CONF_JAVAC="$JAVAC -target $target_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        else
+          dnl Maybe this -target option requires a -source option? Try with
+          dnl -target and -source options. (Supported by Sun javac 1.4 and
+          dnl higher.)
+          rm -f conftest.class
+          if { echo "$as_me:__oline__: $JAVAC -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+               $JAVAC -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+            CONF_JAVAC="$JAVAC -target $target_version -source $source_version"
+            HAVE_JAVAC_ENVVAR=1
+            HAVE_JAVACOMP=1
+          fi
+        fi
+      fi
+    fi
+  fi
+  if test -z "$HAVE_JAVACOMP"; then
+    pushdef([AC_MSG_CHECKING],[:])dnl
+    pushdef([AC_CHECKING],[:])dnl
+    pushdef([AC_MSG_RESULT],[:])dnl
+    AC_CHECK_PROG([HAVE_GCJ_IN_PATH], [gcj], [yes])
+    AC_CHECK_PROG([HAVE_JAVAC_IN_PATH], [javac], [yes])
+    AC_CHECK_PROG([HAVE_JIKES_IN_PATH], [jikes], [yes])
+    popdef([AC_MSG_RESULT])dnl
+    popdef([AC_CHECKING])dnl
+    popdef([AC_MSG_CHECKING])dnl
+    if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_GCJ_IN_PATH"; then
+      dnl Test for a good gcj version (>= 3.0).
+changequote(,)dnl
+      if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^3\.[01]/d' | grep '^[3-9]' >/dev/null; then
+changequote([,])dnl
+        dnl See if libgcj.jar is well installed.
+        if { echo "$as_me:__oline__: gcj -C -d . conftestlib.java" >&AS_MESSAGE_LOG_FD
+             gcj -C -d . conftestlib.java >&AS_MESSAGE_LOG_FD 2>&1
+           }; then
+          dnl OK, gcj works.
+changequote(,)dnl
+          if gcj --version 2>/dev/null | sed -e 's,^[^0-9]*,,' -e 1q | sed -e '/^4\.[012]/d' | grep '^[4-9]' >/dev/null; then
+changequote([,])dnl
+            dnl It's a version of gcj >= 4.3. Assume the classfile versions are correct.
+            dnl Try gcj.
+            rm -f conftest.class
+            if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                 gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+               } \
+               && test -f conftest.class \
+               && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+              dnl Try adding -fsource option if it is useful.
+              rm -f conftest.class
+              rm -f conftestfail.class
+              if { echo "$as_me:__oline__: gcj -C -fsource=$source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                   gcj -C -fsource="$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+                 } \
+                 && test -f conftest.class \
+                 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \
+                 && { echo "$as_me:__oline__: gcj -C -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                      gcj -C -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                    } \
+                 && test -f conftestfail.class \
+                 && ! { echo "$as_me:__oline__: gcj -C -fsource=$source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                        gcj -C -fsource="$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                      }; then
+                CONF_JAVAC="gcj -C -fsource=$source_version"
+                HAVE_JAVAC_ENVVAR=1
+                HAVE_JAVACOMP=1
+              else
+                CONF_JAVAC="gcj -C"
+                HAVE_JAVAC_ENVVAR=1
+                HAVE_JAVACOMP=1
+              fi
+            else
+              dnl Try with -fsource and -ftarget options.
+              rm -f conftest.class
+              rm -f conftestfail.class
+              if { echo "$as_me:__oline__: gcj -C -fsource=$source_version -ftarget=$target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                   gcj -C -fsource="$source_version" -ftarget="$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+                 } \
+                 && test -f conftest.class \
+                 && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+                CONF_JAVAC="gcj -C -fsource=$source_version -ftarget=$target_version"
+                HAVE_JAVAC_ENVVAR=1
+                HAVE_JAVACOMP=1
+              fi
+            fi
+          else
+            dnl It's a version of gcj < 4.3. Ignore the version of conftest.class.
+            dnl Now test whether it supports the desired target-version and
+            dnl source-version.
+            if test "$target_version" = 1.4 && test "$source_version" = 1.4; then
+              rm -f conftest.class
+              if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                   gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+                 } \
+                 && test -f conftest.class; then
+                CONF_JAVAC="gcj -C"
+                HAVE_GCJ_C=1
+                HAVE_JAVACOMP=1
+              fi
+            else
+              if test "$target_version" = 1.4 && test "$source_version" = 1.3; then
+                dnl Try gcj and "gcj -fno-assert". But add -fno-assert only if
+                dnl it works (not gcj < 3.3).
+                rm -f conftest.class
+                if { echo "$as_me:__oline__: gcj -C -fno-assert -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                     gcj -C -fno-assert -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+                   } \
+                   && test -f conftest.class; then
+                  CONF_JAVAC="gcj -C -fno-assert"
+                  HAVE_GCJ_C=1
+                  HAVE_JAVACOMP=1
+                else
+                  rm -f conftest.class
+                  if { echo "$as_me:__oline__: gcj -C -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                       gcj -C -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+                     } \
+                     && test -f conftest.class; then
+                    CONF_JAVAC="gcj -C"
+                    HAVE_GCJ_C=1
+                    HAVE_JAVACOMP=1
+                  fi
+                fi
+              fi
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JAVAC_IN_PATH"; then
+      dnl Test whether javac is usable.
+      if { javac -version >/dev/null 2>/dev/null || test $? -le 2; } \
+         && ( if javac -help 2>&1 >/dev/null | grep at.dms.kjc.Main >/dev/null && javac -help 2>/dev/null | grep 'released.*2000' >/dev/null ; then exit 1; else exit 0; fi ); then
+        dnl OK, javac works.
+        dnl Now test whether it supports the desired target-version and
+        dnl source-version.
+        rm -f conftest.class
+        if { echo "$as_me:__oline__: javac -d . conftest.java" >&AS_MESSAGE_LOG_FD
+             javac -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+           } \
+           && test -f conftest.class \
+           && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+          dnl Try adding -source option if it is useful.
+          rm -f conftest.class
+          rm -f conftestfail.class
+          if { echo "$as_me:__oline__: javac -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+               javac -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \
+             && { echo "$as_me:__oline__: javac -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                  javac -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                } \
+             && test -f conftestfail.class \
+             && ! { echo "$as_me:__oline__: javac -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                    javac -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                  }; then
+            CONF_JAVAC="javac -source $source_version"
+            HAVE_JAVAC=1
+            HAVE_JAVACOMP=1
+          else
+            CONF_JAVAC="javac"
+            HAVE_JAVAC=1
+            HAVE_JAVACOMP=1
+          fi
+        else
+          dnl Try with -target option alone. (Sun javac 1.3.1 has the -target
+          dnl option but no -source option.)
+          rm -f conftest.class
+          if { echo "$as_me:__oline__: javac -target $target_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+               javac -target "$target_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+             } \
+             && test -f conftest.class \
+             && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+            dnl Try adding -source option if it is useful.
+            rm -f conftest.class
+            rm -f conftestfail.class
+            if { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                 javac -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+               } \
+               && test -f conftest.class \
+               && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD \
+               && { echo "$as_me:__oline__: javac -target $target_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                    javac -target "$target_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                  } \
+               && test -f conftestfail.class \
+               && ! { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftestfail.java" >&AS_MESSAGE_LOG_FD
+                      javac -target "$target_version" -source "$source_version" -d . conftestfail.java >&AS_MESSAGE_LOG_FD 2>&1
+                    }; then
+              CONF_JAVAC="javac -target $target_version -source $source_version"
+              HAVE_JAVAC=1
+              HAVE_JAVACOMP=1
+            else
+              CONF_JAVAC="javac -target $target_version"
+              HAVE_JAVAC=1
+              HAVE_JAVACOMP=1
+            fi
+          else
+            dnl Maybe this -target option requires a -source option? Try with
+            dnl -target and -source options. (Supported by Sun javac 1.4 and
+            dnl higher.)
+            rm -f conftest.class
+            if { echo "$as_me:__oline__: javac -target $target_version -source $source_version -d . conftest.java" >&AS_MESSAGE_LOG_FD
+                 javac -target "$target_version" -source "$source_version" -d . conftest.java >&AS_MESSAGE_LOG_FD 2>&1
+               } \
+               && test -f conftest.class \
+               && expr `func_classfile_version conftest.class` '<=' $cfversion >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+              CONF_JAVAC="javac -target $target_version -source $source_version"
+              HAVE_JAVAC=1
+              HAVE_JAVACOMP=1
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test -z "$HAVE_JAVACOMP" && test -n "$HAVE_JIKES_IN_PATH"; then
+      dnl Test whether jikes is usable.
+      if { jikes >/dev/null 2>/dev/null || test $? = 1; } \
+         && (
+              # See if the existing CLASSPATH is sufficient to make jikes work.
+              unset JAVA_HOME
+              jikes conftestlib.java >&AS_MESSAGE_LOG_FD 2>&1
+              error=$?
+              rm -f conftestlib.class
+              exit $error
+            ); then
+        dnl OK, jikes works.
+        dnl Now test whether it supports the desired target-version and
+        dnl source-version.
+        if test "$source_version" = 1.3; then
+          CONF_JAVAC="jikes"
+          HAVE_JIKES=1
+          HAVE_JAVACOMP=1
+        fi
+      fi
+    fi
+  fi
+  rm -f conftest*.java conftest*.class
+  if test -n "$HAVE_JAVACOMP"; then
+    ac_result="$CONF_JAVAC"
+  else
+    ac_result="no"
+  fi
+  AC_MSG_RESULT([$ac_result])
+  AC_SUBST([CONF_JAVAC])
+  AC_SUBST([CLASSPATH])
+  AC_SUBST([CLASSPATH_SEPARATOR])
+  AC_SUBST([HAVE_JAVAC_ENVVAR])
+  AC_SUBST([HAVE_GCJ_C])
+  AC_SUBST([HAVE_JAVAC])
+  AC_SUBST([HAVE_JIKES])
+])
diff --git a/m4/javaexec.m4 b/m4/javaexec.m4
new file mode 100644
index 0000000..18947ad
--- /dev/null
+++ b/m4/javaexec.m4
@@ -0,0 +1,104 @@
+# javaexec.m4 serial 5
+dnl Copyright (C) 2001-2003, 2006, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Prerequisites of javaexec.sh.
+# gt_JAVAEXEC or gt_JAVAEXEC(testclass, its-directory)
+# Sets HAVE_JAVAEXEC to nonempty if javaexec.sh will work.
+
+AC_DEFUN([gt_JAVAEXEC],
+[
+  AC_MSG_CHECKING([for Java virtual machine])
+  AC_EGREP_CPP([yes], [
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  yes
+#endif
+], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':')
+  CONF_JAVA=
+  HAVE_JAVA_ENVVAR=
+  HAVE_GIJ=
+  HAVE_JAVA=
+  HAVE_JRE=
+  HAVE_JVIEW=
+  HAVE_JAVAEXEC=1
+  if test -n "$JAVA"; then
+    HAVE_JAVA_ENVVAR=1
+    CONF_JAVA="$JAVA"
+  else
+    pushdef([AC_MSG_CHECKING],[:])dnl
+    pushdef([AC_CHECKING],[:])dnl
+    pushdef([AC_MSG_RESULT],[:])dnl
+    AC_CHECK_PROG([HAVE_GIJ_IN_PATH], [gij], [yes])
+    AC_CHECK_PROG([HAVE_JAVA_IN_PATH], [java], [yes])
+    AC_CHECK_PROG([HAVE_JRE_IN_PATH], [jre], [yes])
+    AC_CHECK_PROG([HAVE_JVIEW_IN_PATH], [jview], [yes])
+    popdef([AC_MSG_RESULT])dnl
+    popdef([AC_CHECKING])dnl
+    popdef([AC_MSG_CHECKING])dnl
+    ifelse([$1], , , [
+      save_CLASSPATH="$CLASSPATH"
+      CLASSPATH="$2"${CLASSPATH+"$CLASSPATH_SEPARATOR$CLASSPATH"}
+      ])
+    export CLASSPATH
+    if test -n "$HAVE_GIJ_IN_PATH" \
+       && gij --version >/dev/null 2>/dev/null \
+       ifelse([$1], , , [&& {
+         echo "$as_me:__oline__: gij $1" >&AS_MESSAGE_LOG_FD
+         gij $1 >&AS_MESSAGE_LOG_FD 2>&1
+       }]); then
+      HAVE_GIJ=1
+      CONF_JAVA="gij"
+    else
+      if test -n "$HAVE_JAVA_IN_PATH" \
+         && java -version >/dev/null 2>/dev/null \
+         ifelse([$1], , , [&& {
+           echo "$as_me:__oline__: gij $1" >&AS_MESSAGE_LOG_FD
+           java $1 >&AS_MESSAGE_LOG_FD 2>&1
+         }]); then
+        HAVE_JAVA=1
+        CONF_JAVA="java"
+      else
+        if test -n "$HAVE_JRE_IN_PATH" \
+           && (jre >/dev/null 2>/dev/null || test $? = 1) \
+           ifelse([$1], , , [&& {
+             echo "$as_me:__oline__: gij $1" >&AS_MESSAGE_LOG_FD
+             jre $1 >&AS_MESSAGE_LOG_FD 2>&1
+           }]); then
+          HAVE_JRE=1
+          CONF_JAVA="jre"
+        else
+          if test -n "$HAVE_JVIEW_IN_PATH" \
+             && (jview -? >/dev/null 2>/dev/null || test $? = 1) \
+             ifelse([$1], , , [&& {
+               echo "$as_me:__oline__: gij $1" >&AS_MESSAGE_LOG_FD
+               jview $1 >&AS_MESSAGE_LOG_FD 2>&1
+             }]); then
+            HAVE_JVIEW=1
+            CONF_JAVA="jview"
+          else
+            HAVE_JAVAEXEC=
+          fi
+        fi
+      fi
+    fi
+    ifelse([$1], , , [
+      CLASSPATH="$save_CLASSPATH"
+    ])
+  fi
+  if test -n "$HAVE_JAVAEXEC"; then
+    ac_result="$CONF_JAVA"
+  else
+    ac_result="no"
+  fi
+  AC_MSG_RESULT([$ac_result])
+  AC_SUBST([CONF_JAVA])
+  AC_SUBST([CLASSPATH])
+  AC_SUBST([CLASSPATH_SEPARATOR])
+  AC_SUBST([HAVE_JAVA_ENVVAR])
+  AC_SUBST([HAVE_GIJ])
+  AC_SUBST([HAVE_JAVA])
+  AC_SUBST([HAVE_JRE])
+  AC_SUBST([HAVE_JVIEW])
+])
diff --git a/m4/largefile.m4 b/m4/largefile.m4
new file mode 100644
index 0000000..a88850a
--- /dev/null
+++ b/m4/largefile.m4
@@ -0,0 +1,149 @@
+# Enable large files on systems where this is not the default.
+
+# Copyright 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# The following implementation works around a problem in autoconf <= 2.68;
+# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5.
+m4_version_prereq([2.69], [] ,[
+
+# _AC_SYS_LARGEFILE_TEST_INCLUDES
+# -------------------------------
+m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES],
+[@%:@include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721
+                       && LARGE_OFF_T % 2147483647 == 1)
+                      ? 1 : -1]];[]dnl
+])
+
+
+# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE,
+#				CACHE-VAR,
+#				DESCRIPTION,
+#				PROLOGUE, [FUNCTION-BODY])
+# --------------------------------------------------------
+m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE],
+[AC_CACHE_CHECK([for $1 value needed for large files], [$3],
+[while :; do
+  m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
+    [AC_LANG_PROGRAM([$5], [$6])],
+    [$3=no; break])
+  m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
+    [AC_LANG_PROGRAM([@%:@define $1 $2
+$5], [$6])],
+    [$3=$2; break])
+  $3=unknown
+  break
+done])
+case $$3 in #(
+  no | unknown) ;;
+  *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);;
+esac
+rm -rf conftest*[]dnl
+])# _AC_SYS_LARGEFILE_MACRO_VALUE
+
+
+# AC_SYS_LARGEFILE
+# ----------------
+# By default, many hosts won't let programs access large files;
+# one must use special compiler options to get large-file access to work.
+# For more details about this brain damage please see:
+# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html
+AC_DEFUN([AC_SYS_LARGEFILE],
+[AC_ARG_ENABLE(largefile,
+               [  --disable-largefile     omit support for large files])
+if test "$enable_largefile" != no; then
+
+  AC_CACHE_CHECK([for special C compiler options needed for large files],
+    ac_cv_sys_largefile_CC,
+    [ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+         # IRIX 6.2 and later do not support large files by default,
+         # so use the C compiler's -n32 option if that helps.
+         AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])])
+         AC_COMPILE_IFELSE([], [break])
+         CC="$CC -n32"
+         AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break])
+         break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi])
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
+    ac_cv_sys_file_offset_bits,
+    [Number of bits in a file offset, on hosts where this is settable.],
+    [_AC_SYS_LARGEFILE_TEST_INCLUDES])
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
+      ac_cv_sys_large_files,
+      [Define for large files, on AIX-style hosts.],
+      [_AC_SYS_LARGEFILE_TEST_INCLUDES])
+  fi
+
+  AH_VERBATIM([_DARWIN_USE_64_BIT_INODE],
+[/* Enable large inode numbers on Mac OS X.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif])
+fi
+])# AC_SYS_LARGEFILE
+
+])# m4_version_prereq 2.69
+
+# Enable large files on systems where this is implemented by Gnulib, not by the
+# system headers.
+# Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib
+# overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively.
+AC_DEFUN([gl_LARGEFILE],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  case "$host_os" in
+    mingw*)
+      dnl Native Windows.
+      dnl mingw64 defines off_t to a 64-bit type already, if
+      dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE.
+      AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64],
+        [AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM(
+              [[#include <sys/types.h>
+                int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1];
+              ]],
+              [[]])],
+           [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no])
+        ])
+      if test $gl_cv_type_off_t_64 = no; then
+        WINDOWS_64_BIT_OFF_T=1
+      else
+        WINDOWS_64_BIT_OFF_T=0
+      fi
+      dnl But all native Windows platforms (including mingw64) have a 32-bit
+      dnl st_size member in 'struct stat'.
+      WINDOWS_64_BIT_ST_SIZE=1
+      ;;
+    *)
+      dnl Nothing to do on gnulib's side.
+      dnl A 64-bit off_t is
+      dnl   - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX,
+      dnl     OSF/1, Cygwin,
+      dnl   - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on
+      dnl     glibc, HP-UX, Solaris,
+      dnl   - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX,
+      dnl   - impossible to achieve on Minix 3.1.8.
+      WINDOWS_64_BIT_OFF_T=0
+      WINDOWS_64_BIT_ST_SIZE=0
+      ;;
+  esac
+])
diff --git a/m4/ldexp.m4 b/m4/ldexp.m4
new file mode 100644
index 0000000..6d26b56
--- /dev/null
+++ b/m4/ldexp.m4
@@ -0,0 +1,54 @@
+# ldexp.m4 serial 1
+dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_LDEXP],
+[
+  AC_REQUIRE([gl_CHECK_LDEXP_NO_LIBM])
+  LDEXP_LIBM=
+  if test $gl_cv_func_ldexp_no_libm = no; then
+    AC_CACHE_CHECK([whether ldexp() can be used with libm],
+      [gl_cv_func_ldexp_in_libm],
+      [
+        save_LIBS="$LIBS"
+        LIBS="$LIBS -lm"
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM([[#ifndef __NO_MATH_INLINES
+                             # define __NO_MATH_INLINES 1 /* for glibc */
+                             #endif
+                             #include <math.h>
+                             double (*funcptr) (double, int) = ldexp;
+                             double x;]],
+                           [[return ldexp (x, -1) > 0;]])],
+          [gl_cv_func_ldexp_in_libm=yes],
+          [gl_cv_func_ldexp_in_libm=no])
+        LIBS="$save_LIBS"
+      ])
+    if test $gl_cv_func_ldexp_in_libm = yes; then
+      LDEXP_LIBM=-lm
+    fi
+  fi
+  AC_SUBST([LDEXP_LIBM])
+])
+
+dnl Test whether ldexp() can be used without linking with libm.
+dnl Set gl_cv_func_ldexp_no_libm to 'yes' or 'no' accordingly.
+AC_DEFUN([gl_CHECK_LDEXP_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether ldexp() can be used without linking with libm],
+    [gl_cv_func_ldexp_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM([[#ifndef __NO_MATH_INLINES
+                           # define __NO_MATH_INLINES 1 /* for glibc */
+                           #endif
+                           #include <math.h>
+                           double (*funcptr) (double, int) = ldexp;
+                           double x;]],
+                         [[return ldexp (x, -1) > 0;]])],
+        [gl_cv_func_ldexp_no_libm=yes],
+        [gl_cv_func_ldexp_no_libm=no])
+    ])
+])
diff --git a/m4/ldexpl.m4 b/m4/ldexpl.m4
new file mode 100644
index 0000000..6ecdd4f
--- /dev/null
+++ b/m4/ldexpl.m4
@@ -0,0 +1,133 @@
+# ldexpl.m4 serial 16
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_LDEXPL],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+  AC_REQUIRE([gl_FUNC_ISNANL]) dnl for ISNANL_LIBM
+
+  dnl Persuade glibc <math.h> to declare ldexpl().
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  dnl Check whether it's declared.
+  dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>.
+  AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]])
+
+  LDEXPL_LIBM=
+  if test $HAVE_DECL_LDEXPL = 1; then
+    gl_CHECK_LDEXPL_NO_LIBM
+    if test $gl_cv_func_ldexpl_no_libm = no; then
+      AC_CACHE_CHECK([whether ldexpl() can be used with libm],
+        [gl_cv_func_ldexpl_in_libm],
+        [
+          save_LIBS="$LIBS"
+          LIBS="$LIBS -lm"
+          AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <math.h>
+                 long double x;]],
+               [[return ldexpl (x, -1) > 0;]])],
+            [gl_cv_func_ldexpl_in_libm=yes],
+            [gl_cv_func_ldexpl_in_libm=no])
+          LIBS="$save_LIBS"
+        ])
+      if test $gl_cv_func_ldexpl_in_libm = yes; then
+        LDEXPL_LIBM=-lm
+      fi
+    fi
+    if test $gl_cv_func_ldexpl_no_libm = yes \
+       || test $gl_cv_func_ldexpl_in_libm = yes; then
+      save_LIBS="$LIBS"
+      LIBS="$LIBS $LDEXPL_LIBM"
+      gl_FUNC_LDEXPL_WORKS
+      LIBS="$save_LIBS"
+      case "$gl_cv_func_ldexpl_works" in
+        *yes) gl_func_ldexpl=yes ;;
+        *)    gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;;
+      esac
+    else
+      gl_func_ldexpl=no
+    fi
+    if test $gl_func_ldexpl = yes; then
+      AC_DEFINE([HAVE_LDEXPL], [1],
+        [Define if the ldexpl() function is available.])
+    fi
+  fi
+  if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then
+    dnl Find libraries needed to link lib/ldexpl.c.
+    if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+      AC_REQUIRE([gl_FUNC_LDEXP])
+      LDEXPL_LIBM="$LDEXP_LIBM"
+    else
+      LDEXPL_LIBM="$ISNANL_LIBM"
+    fi
+  fi
+  AC_SUBST([LDEXPL_LIBM])
+])
+
+dnl Test whether ldexpl() can be used without linking with libm.
+dnl Set gl_cv_func_ldexpl_no_libm to 'yes' or 'no' accordingly.
+AC_DEFUN([gl_CHECK_LDEXPL_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm],
+    [gl_cv_func_ldexpl_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             long double x;]],
+           [[return ldexpl (x, -1) > 0;]])],
+        [gl_cv_func_ldexpl_no_libm=yes],
+        [gl_cv_func_ldexpl_no_libm=no])
+    ])
+])
+
+dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1
+dnl and Mac OS X 10.4/PowerPC).
+AC_DEFUN([gl_FUNC_LDEXPL_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <math.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double ldexpl (long double, int);
+int main()
+{
+  int result = 0;
+  {
+    volatile long double x = 1.0;
+    volatile long double y = ldexpl (x, -1);
+    if (y != 0.5L)
+      result |= 1;
+  }
+  {
+    volatile long double x = 1.73205L;
+    volatile long double y = ldexpl (x, 0);
+    if (y != x)
+      result |= 2;
+  }
+  return result;
+}]])],
+        [gl_cv_func_ldexpl_works=yes],
+        [gl_cv_func_ldexpl_works=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no";;
+           *)               gl_cv_func_ldexpl_works="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..e1feab5
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,119 @@
+# lib-ld.m4 serial 6
+dnl Copyright (C) 1996-2003, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
+dnl collision with libtool.m4.
+
+dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes
+  ;;
+*)
+  acl_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-2.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+        [assume the C compiler uses GNU ld [default=no]])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+      while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+  acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$acl_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+        test "$with_gnu_ld" != no && break
+        ;;
+      *)
+        test "$with_gnu_ld" != yes && break
+        ;;
+      esac
+    fi
+  done
+  IFS="$acl_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT([$LD])
+else
+  AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-ld_gl.m4 b/m4/lib-ld_gl.m4
deleted file mode 100644
index 96c4e2c..0000000
--- a/m4/lib-ld_gl.m4
+++ /dev/null
@@ -1,110 +0,0 @@
-# lib-ld.m4 serial 3 (gettext-0.13)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  acl_cv_prog_gnu_ld=yes ;;
-*)
-  acl_cv_prog_gnu_ld=no ;;
-esac])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by GCC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]* | [A-Za-z]:[\\/]*)]
-      [re_direlt='/[^/][^/]*/\.\./']
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      acl_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break ;;
-      *)
-	test "$with_gnu_ld" != yes && break ;;
-      esac
-    fi
-  done
-  IFS="$ac_save_ifs"
-else
-  acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
index 244a779..d11b4b4 100644
--- a/m4/lib-link.m4
+++ b/m4/lib-link.m4
@@ -1,58 +1,66 @@
-# lib-link.m4 serial 7 (gettext-0.15)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+# lib-link.m4 serial 26 (gettext-0.18.2)
+dnl Copyright (C) 2001-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Bruno Haible.
 
-AC_PREREQ(2.50)
+AC_PREREQ([2.54])
 
 dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
 dnl the libraries corresponding to explicit and implicit dependencies.
 dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
 dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
 AC_DEFUN([AC_LIB_LINKFLAGS],
 [
   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
   AC_REQUIRE([AC_LIB_RPATH])
-  define([Name],[translit([$1],[./-], [___])])
-  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([Name],[m4_translit([$1],[./+-], [____])])
+  pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+                                   [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
   AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
     AC_LIB_LINKFLAGS_BODY([$1], [$2])
     ac_cv_lib[]Name[]_libs="$LIB[]NAME"
     ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
     ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
   ])
   LIB[]NAME="$ac_cv_lib[]Name[]_libs"
   LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
   INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
   AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
   AC_SUBST([LIB]NAME)
   AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
   dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
   dnl results of this search when this library appears as a dependency.
   HAVE_LIB[]NAME=yes
-  undefine([Name])
-  undefine([NAME])
+  popdef([NAME])
+  popdef([Name])
 ])
 
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
 dnl searches for libname and the libraries corresponding to explicit and
 dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
 dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
 dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
 AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
 [
   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
   AC_REQUIRE([AC_LIB_RPATH])
-  define([Name],[translit([$1],[./-], [___])])
-  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([Name],[m4_translit([$1],[./+-], [____])])
+  pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+                                   [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
 
   dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
   dnl accordingly.
@@ -66,13 +74,26 @@
 
   AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
     ac_save_LIBS="$LIBS"
-    LIBS="$LIBS $LIB[]NAME"
-    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+    dnl because these -l options might require -L options that are present in
+    dnl LIBS. -l options benefit only from the -L options listed before it.
+    dnl Otherwise, add it to the front of LIBS, because it may be a static
+    dnl library that depends on another static library that is present in LIBS.
+    dnl Static libraries benefit only from the static libraries listed after
+    dnl it.
+    case " $LIB[]NAME" in
+      *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+      *)       LIBS="$LIB[]NAME $LIBS" ;;
+    esac
+    AC_LINK_IFELSE(
+      [AC_LANG_PROGRAM([[$3]], [[$4]])],
+      [ac_cv_lib[]Name=yes],
+      [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
     LIBS="$ac_save_LIBS"
   ])
   if test "$ac_cv_lib[]Name" = yes; then
     HAVE_LIB[]NAME=yes
-    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
     AC_MSG_CHECKING([how to link with lib[]$1])
     AC_MSG_RESULT([$LIB[]NAME])
   else
@@ -82,17 +103,25 @@
     CPPFLAGS="$ac_save_CPPFLAGS"
     LIB[]NAME=
     LTLIB[]NAME=
+    LIB[]NAME[]_PREFIX=
   fi
   AC_SUBST([HAVE_LIB]NAME)
   AC_SUBST([LIB]NAME)
   AC_SUBST([LTLIB]NAME)
-  undefine([Name])
-  undefine([NAME])
+  AC_SUBST([LIB]NAME[_PREFIX])
+  popdef([NAME])
+  popdef([Name])
 ])
 
 dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
+dnl   acl_libext,
+dnl   acl_shlibext,
+dnl   acl_libname_spec,
+dnl   acl_library_names_spec,
+dnl   acl_hardcode_libdir_flag_spec,
+dnl   acl_hardcode_libdir_separator,
+dnl   acl_hardcode_direct,
+dnl   acl_hardcode_minus_L.
 AC_DEFUN([AC_LIB_RPATH],
 [
   dnl Tell automake >= 1.10 to complain if config.rpath is missing.
@@ -101,7 +130,7 @@
   AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
   AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
   AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
-  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+  AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
     CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
     ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
     . ./conftest.sh
@@ -109,35 +138,66 @@
     acl_cv_rpath=done
   ])
   wl="$acl_cv_wl"
-  libext="$acl_cv_libext"
-  shlibext="$acl_cv_shlibext"
-  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
-  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
-  hardcode_direct="$acl_cv_hardcode_direct"
-  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
   dnl Determine whether the user wants rpath handling at all.
-  AC_ARG_ENABLE(rpath,
+  AC_ARG_ENABLE([rpath],
     [  --disable-rpath         do not hardcode runtime library paths],
     :, enable_rpath=yes)
 ])
 
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+  pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+                                   [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+  define([acl_frompackage_]NAME, [$2])
+  popdef([NAME])
+  pushdef([PACK],[$2])
+  pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+                                     [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+  define([acl_libsinpackage_]PACKUP,
+    m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
+  popdef([PACKUP])
+  popdef([PACK])
+])
+
 dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
 dnl the libraries corresponding to explicit and implicit dependencies.
 dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
 AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
 [
   AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
-  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+                                   [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+  pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+  pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+                                     [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+  pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+  dnl Autoconf >= 2.61 supports dots in --with options.
+  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)])
   dnl By default, look in $includedir and $libdir.
   use_additional=yes
   AC_LIB_WITH_FINAL_PREFIX([
     eval additional_includedir=\"$includedir\"
     eval additional_libdir=\"$libdir\"
   ])
-  AC_LIB_ARG_WITH([lib$1-prefix],
-[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
-  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
+  AC_ARG_WITH(P_A_C_K[-prefix],
+[[  --with-]]P_A_C_K[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
+  --without-]]P_A_C_K[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
 [
     if test "X$withval" = "Xno"; then
       use_additional=no
@@ -150,6 +210,10 @@
       else
         additional_includedir="$withval/include"
         additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
       fi
     fi
 ])
@@ -158,6 +222,10 @@
   LIB[]NAME=
   LTLIB[]NAME=
   INC[]NAME=
+  LIB[]NAME[]_PREFIX=
+  dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+  dnl computed. So it has to be reset here.
+  HAVE_LIB[]NAME=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
@@ -177,7 +245,7 @@
         names_already_handled="$names_already_handled $name"
         dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
         dnl or AC_LIB_HAVE_LINKFLAGS call.
-        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
         eval value=\"\$HAVE_LIB$uppername\"
         if test -n "$value"; then
           if test "$value" = yes; then
@@ -197,22 +265,55 @@
           found_la=
           found_so=
           found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
           if test $use_additional = yes; then
-            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
-              found_dir="$additional_libdir"
-              found_so="$additional_libdir/lib$name.$shlibext"
-              if test -f "$additional_libdir/lib$name.la"; then
-                found_la="$additional_libdir/lib$name.la"
-              fi
-            else
-              if test -f "$additional_libdir/lib$name.$libext"; then
-                found_dir="$additional_libdir"
-                found_a="$additional_libdir/lib$name.$libext"
-                if test -f "$additional_libdir/lib$name.la"; then
-                  found_la="$additional_libdir/lib$name.la"
+            dir="$additional_libdir"
+            dnl The same code as in the loop below:
+            dnl First look for a shared library.
+            if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
                 fi
               fi
             fi
+            dnl Then look for a static library.
+            if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
           fi
           if test "X$found_dir" = "X"; then
             for x in $LDFLAGS $LTLIB[]NAME; do
@@ -220,21 +321,46 @@
               case "$x" in
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
-                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
-                    found_dir="$dir"
-                    found_so="$dir/lib$name.$shlibext"
-                    if test -f "$dir/lib$name.la"; then
-                      found_la="$dir/lib$name.la"
-                    fi
-                  else
-                    if test -f "$dir/lib$name.$libext"; then
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
                       found_dir="$dir"
-                      found_a="$dir/lib$name.$libext"
-                      if test -f "$dir/lib$name.la"; then
-                        found_la="$dir/lib$name.la"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
                       fi
                     fi
                   fi
+                  dnl Then look for a static library.
+                  if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
                   ;;
               esac
               if test "X$found_dir" != "X"; then
@@ -249,7 +375,9 @@
               dnl Linking with a shared library. We attempt to hardcode its
               dnl directory into the executable's runpath, unless it's the
               dnl standard /usr/lib.
-              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+              if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
                 dnl No hardcoding is needed.
                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
               else
@@ -268,12 +396,12 @@
                   ltrpathdirs="$ltrpathdirs $found_dir"
                 fi
                 dnl The hardcoding into $LIBNAME is system dependent.
-                if test "$hardcode_direct" = yes; then
+                if test "$acl_hardcode_direct" = yes; then
                   dnl Using DIR/libNAME.so during linking hardcodes DIR into the
                   dnl resulting binary.
                   LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
                 else
-                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
                     dnl Use an explicit option to hardcode DIR into the resulting
                     dnl binary.
                     LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
@@ -304,13 +432,13 @@
                     if test -z "$haveit"; then
                       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
                     fi
-                    if test "$hardcode_minus_L" != no; then
+                    if test "$acl_hardcode_minus_L" != no; then
                       dnl FIXME: Not sure whether we should use
                       dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
                       dnl here.
                       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
                     else
-                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
                       dnl here, because this doesn't fit in flags passed to the
                       dnl compiler. So give up. No hardcoding. This affects only
                       dnl very old systems.
@@ -337,6 +465,16 @@
             case "$found_dir" in
               */$acl_libdirstem | */$acl_libdirstem/)
                 basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
                 additional_includedir="$basedir/include"
                 ;;
             esac
@@ -397,9 +535,11 @@
                     dnl   3. if it's already present in $LDFLAGS or the already
                     dnl      constructed $LIBNAME,
                     dnl   4. if it doesn't exist as a directory.
-                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
@@ -498,18 +638,18 @@
     done
   done
   if test "X$rpathdirs" != "X"; then
-    if test -n "$hardcode_libdir_separator"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
       dnl Weird platform: only the last -rpath option counts, the user must
       dnl pass all path elements in one option. We can arrange that for a
       dnl single library, but not when more than one $LIBNAMEs are used.
       alldirs=
       for found_dir in $rpathdirs; do
-        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
       done
-      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
       acl_save_libdir="$libdir"
       libdir="$alldirs"
-      eval flag=\"$hardcode_libdir_flag_spec\"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
       libdir="$acl_save_libdir"
       LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
     else
@@ -517,7 +657,7 @@
       for found_dir in $rpathdirs; do
         acl_save_libdir="$libdir"
         libdir="$found_dir"
-        eval flag=\"$hardcode_libdir_flag_spec\"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
         libdir="$acl_save_libdir"
         LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
       done
@@ -530,6 +670,11 @@
       LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
     done
   fi
+  popdef([P_A_C_K])
+  popdef([PACKLIBS])
+  popdef([PACKUP])
+  popdef([PACK])
+  popdef([NAME])
 ])
 
 dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
@@ -552,3 +697,81 @@
     fi
   done
 ])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem" \
+             && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem" \
+                    && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$acl_hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$acl_hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$acl_hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..007aa05
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,224 @@
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl   "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl   "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64.
+  dnl On glibc systems, the current practice is that on a system supporting
+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+  dnl the compiler's default mode by looking at the compiler's library search
+  dnl path. If at least one of its elements ends in /lib64 or points to a
+  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+  dnl Otherwise we use the default, namely "lib".
+  dnl On Solaris systems, the current practice is that on a system supporting
+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+  dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+  dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  acl_libdirstem=lib
+  acl_libdirstem2=
+  case "$host_os" in
+    solaris*)
+      dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+      dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+      dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+      dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+      dnl symlink is missing, so we set acl_libdirstem2 too.
+      AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+        [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+           ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+        ])
+      if test $gl_cv_solaris_64bit = yes; then
+        acl_libdirstem=lib/64
+        case "$host_cpu" in
+          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
+          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+        esac
+      fi
+      ;;
+    *)
+      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+      if test -n "$searchpath"; then
+        acl_save_IFS="${IFS= 	}"; IFS=":"
+        for searchdir in $searchpath; do
+          if test -d "$searchdir"; then
+            case "$searchdir" in
+              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
+              *) searchdir=`cd "$searchdir" && pwd`
+                 case "$searchdir" in
+                   */lib64 ) acl_libdirstem=lib64 ;;
+                 esac ;;
+            esac
+          fi
+        done
+        IFS="$acl_save_IFS"
+      fi
+      ;;
+  esac
+  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
diff --git a/m4/lib-prefix_gl.m4 b/m4/lib-prefix_gl.m4
deleted file mode 100644
index a8684e1..0000000
--- a/m4/lib-prefix_gl.m4
+++ /dev/null
@@ -1,185 +0,0 @@
-# lib-prefix.m4 serial 5 (gettext-0.15)
-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
-  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
-  AC_REQUIRE([AC_PROG_CC])
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
-  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-  dnl By default, look in $includedir and $libdir.
-  use_additional=yes
-  AC_LIB_WITH_FINAL_PREFIX([
-    eval additional_includedir=\"$includedir\"
-    eval additional_libdir=\"$libdir\"
-  ])
-  AC_LIB_ARG_WITH([lib-prefix],
-[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
-  --without-lib-prefix    don't search for libraries in includedir and libdir],
-[
-    if test "X$withval" = "Xno"; then
-      use_additional=no
-    else
-      if test "X$withval" = "X"; then
-        AC_LIB_WITH_FINAL_PREFIX([
-          eval additional_includedir=\"$includedir\"
-          eval additional_libdir=\"$libdir\"
-        ])
-      else
-        additional_includedir="$withval/include"
-        additional_libdir="$withval/$acl_libdirstem"
-      fi
-    fi
-])
-  if test $use_additional = yes; then
-    dnl Potentially add $additional_includedir to $CPPFLAGS.
-    dnl But don't add it
-    dnl   1. if it's the standard /usr/include,
-    dnl   2. if it's already present in $CPPFLAGS,
-    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
-    dnl   4. if it doesn't exist as a directory.
-    if test "X$additional_includedir" != "X/usr/include"; then
-      haveit=
-      for x in $CPPFLAGS; do
-        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-        if test "X$x" = "X-I$additional_includedir"; then
-          haveit=yes
-          break
-        fi
-      done
-      if test -z "$haveit"; then
-        if test "X$additional_includedir" = "X/usr/local/include"; then
-          if test -n "$GCC"; then
-            case $host_os in
-              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-            esac
-          fi
-        fi
-        if test -z "$haveit"; then
-          if test -d "$additional_includedir"; then
-            dnl Really add $additional_includedir to $CPPFLAGS.
-            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
-          fi
-        fi
-      fi
-    fi
-    dnl Potentially add $additional_libdir to $LDFLAGS.
-    dnl But don't add it
-    dnl   1. if it's the standard /usr/lib,
-    dnl   2. if it's already present in $LDFLAGS,
-    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
-    dnl   4. if it doesn't exist as a directory.
-    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
-      haveit=
-      for x in $LDFLAGS; do
-        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-        if test "X$x" = "X-L$additional_libdir"; then
-          haveit=yes
-          break
-        fi
-      done
-      if test -z "$haveit"; then
-        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
-          if test -n "$GCC"; then
-            case $host_os in
-              linux*) haveit=yes;;
-            esac
-          fi
-        fi
-        if test -z "$haveit"; then
-          if test -d "$additional_libdir"; then
-            dnl Really add $additional_libdir to $LDFLAGS.
-            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
-          fi
-        fi
-      fi
-    fi
-  fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
-  dnl Unfortunately, prefix and exec_prefix get only finally determined
-  dnl at the end of configure.
-  if test "X$prefix" = "XNONE"; then
-    acl_final_prefix="$ac_default_prefix"
-  else
-    acl_final_prefix="$prefix"
-  fi
-  if test "X$exec_prefix" = "XNONE"; then
-    acl_final_exec_prefix='${prefix}'
-  else
-    acl_final_exec_prefix="$exec_prefix"
-  fi
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
-  prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
-  acl_save_prefix="$prefix"
-  prefix="$acl_final_prefix"
-  acl_save_exec_prefix="$exec_prefix"
-  exec_prefix="$acl_final_exec_prefix"
-  $1
-  exec_prefix="$acl_save_exec_prefix"
-  prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
-dnl the basename of the libdir, either "lib" or "lib64".
-AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
-[
-  dnl There is no formal standard regarding lib and lib64. The current
-  dnl practice is that on a system supporting 32-bit and 64-bit instruction
-  dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
-  dnl libraries go under $prefix/lib. We determine the compiler's default
-  dnl mode by looking at the compiler's library search path. If at least
-  dnl of its elements ends in /lib64 or points to a directory whose absolute
-  dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
-  dnl default, namely "lib".
-  acl_libdirstem=lib
-  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
-  if test -n "$searchpath"; then
-    acl_save_IFS="${IFS= 	}"; IFS=":"
-    for searchdir in $searchpath; do
-      if test -d "$searchdir"; then
-        case "$searchdir" in
-          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
-          *) searchdir=`cd "$searchdir" && pwd`
-             case "$searchdir" in
-               */lib64 ) acl_libdirstem=lib64 ;;
-             esac ;;
-        esac
-      fi
-    done
-    IFS="$acl_save_IFS"
-  fi
-])
diff --git a/m4/libunistring-base.m4 b/m4/libunistring-base.m4
new file mode 100644
index 0000000..d91c42b
--- /dev/null
+++ b/m4/libunistring-base.m4
@@ -0,0 +1,141 @@
+# libunistring-base.m4 serial 5
+dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paolo Bonzini and Bruno Haible.
+
+dnl gl_LIBUNISTRING_MODULE([VERSION], [Module])
+dnl Declares that the source files of Module should be compiled, unless we
+dnl are linking with libunistring and its version is >= the given VERSION.
+dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is
+dnl true if the source files of Module should be compiled.
+dnl This macro is to be used for public libunistring API, not for
+dnl undocumented API.
+dnl
+dnl You have to bump the VERSION argument to the next projected version
+dnl number each time you make a change that affects the behaviour of the
+dnl functions defined in Module (even if the sources of Module itself do not
+dnl change).
+
+AC_DEFUN([gl_LIBUNISTRING_MODULE],
+[
+  AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
+  dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
+  dnl gl_LIBUNISTRING_CORE if that macro has been run.
+  AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]),
+    [gl_LIBUNISTRING_VERSION_CMP([$1])])
+])
+
+dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile])
+dnl Declares that HeaderFile should be created, unless we are linking
+dnl with libunistring and its version is >= the given VERSION.
+dnl HeaderFile should be relative to the lib directory and end in '.h'.
+dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty).
+dnl
+dnl When we are linking with the already installed libunistring and its version
+dnl is < VERSION, we create HeaderFile here, because we may compile functions
+dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed
+dnl version.
+dnl When we are linking with the already installed libunistring and its version
+dnl is > VERSION, we don't create HeaderFile here: it could cause compilation
+dnl errors in other libunistring header files if some types are missing.
+dnl
+dnl You have to bump the VERSION argument to the next projected version
+dnl number each time you make a non-comment change to the HeaderFile.
+
+AC_DEFUN([gl_LIBUNISTRING_LIBHEADER],
+[
+  AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
+  dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
+  dnl gl_LIBUNISTRING_CORE if that macro has been run.
+  if gl_LIBUNISTRING_VERSION_CMP([$1]); then
+    LIBUNISTRING_[]AS_TR_CPP([$2])='$2'
+  else
+    LIBUNISTRING_[]AS_TR_CPP([$2])=
+  fi
+  AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2]))
+])
+
+dnl Miscellaneous preparations/initializations.
+
+AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE],
+[
+  dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point.
+  m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])])
+
+  AC_REQUIRE([AC_PROG_AWK])
+
+dnl Sed expressions to extract the parts of a version number.
+changequote(,)
+gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+changequote([,])
+
+  if test "$HAVE_LIBUNISTRING" = yes; then
+    LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
+    LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
+    LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
+  fi
+])
+
+dnl gl_LIBUNISTRING_VERSION_CMP([VERSION])
+dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION
+dnl is less than the VERSION argument.
+AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP],
+[ { test "$HAVE_LIBUNISTRING" != yes \
+    || {
+         dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least.
+         AS_LITERAL_IF([$1],
+           [dnl This is the optimized variant, that assumes the argument is a literal:
+            m4_pushdef([requested_version_major],
+              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])])
+            m4_pushdef([requested_version_minor],
+              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
+            m4_pushdef([requested_version_subminor],
+              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
+            test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor
+                         }
+                    }
+               }
+            m4_popdef([requested_version_subminor])
+            m4_popdef([requested_version_minor])
+            m4_popdef([requested_version_major])
+           ],
+           [dnl This is the unoptimized variant:
+            requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"`
+            requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"`
+            requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"`
+            test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor
+                         }
+                    }
+               }
+           ])
+       }
+  }])
+
+dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the
+dnl same as ORIG, otherwise to 0.
+m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])])
diff --git a/m4/localcharset.m4 b/m4/localcharset.m4
new file mode 100644
index 0000000..8010379
--- /dev/null
+++ b/m4/localcharset.m4
@@ -0,0 +1,17 @@
+# localcharset.m4 serial 7
+dnl Copyright (C) 2002, 2004, 2006, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_LOCALCHARSET],
+[
+  dnl Prerequisites of lib/localcharset.c.
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_REQUIRE([gl_FCNTL_O_FLAGS])
+  AC_CHECK_DECLS_ONCE([getc_unlocked])
+
+  dnl Prerequisites of the lib/Makefile.am snippet.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_GLIBC21])
+])
diff --git a/m4/locale-fr.m4 b/m4/locale-fr.m4
new file mode 100644
index 0000000..71b6847
--- /dev/null
+++ b/m4/locale-fr.m4
@@ -0,0 +1,250 @@
+# locale-fr.m4 serial 17
+dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a french locale with traditional encoding.
+AC_DEFUN([gt_LOCALE_FR],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [
+    AC_LANG_CONFTEST([AC_LANG_SOURCE([
+changequote(,)dnl
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether in the abbreviation of the second month, the second
+     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+     one byte long. This excludes the UTF-8 encoding.  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
+  /* Check whether the decimal separator is a comma.
+     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+     are nl_langinfo(RADIXCHAR) are both ".".  */
+  if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+  return 0;
+}
+changequote([,])dnl
+      ])])
+    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the native Windows locale name.
+          if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr=French_France.1252
+          else
+            # None found.
+            gt_cv_locale_fr=none
+          fi
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the usual locale name.
+          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr=fr_FR
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_fr=fr_FR.ISO-8859-1
+            else
+              # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+              if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_fr=fr_FR.ISO8859-1
+              else
+                # Test for the HP-UX locale name.
+                if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                  gt_cv_locale_fr=fr_FR.iso88591
+                else
+                  # Test for the Solaris 7 locale name.
+                  if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                    gt_cv_locale_fr=fr
+                  else
+                    # None found.
+                    gt_cv_locale_fr=none
+                  fi
+                fi
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+  ])
+  LOCALE_FR=$gt_cv_locale_fr
+  AC_SUBST([LOCALE_FR])
+])
+
+dnl Determine the name of a french locale with UTF-8 encoding.
+AC_DEFUN([gt_LOCALE_FR_UTF8],
+[
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
+    AC_LANG_CONFTEST([AC_LANG_SOURCE([
+changequote(,)dnl
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
+     imitates locale dependent behaviour by looking at the environment
+     variables, and all locales use the UTF-8 encoding.  */
+#if !(defined __BEOS__ || defined __HAIKU__)
+  /* Check whether the given locale name is recognized by the system.  */
+# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+# else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.  */
+# if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+      return 1;
+  }
+# endif
+# ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+  /* Check whether in the abbreviation of the second month, the second
+     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+     two bytes long, with UTF-8 encoding.  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%b", &t) < 4
+      || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+    return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
+  /* Check whether the decimal separator is a comma.
+     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+     are nl_langinfo(RADIXCHAR) are both ".".  */
+  if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+  return 0;
+}
+changequote([,])dnl
+      ])])
+    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the hypothetical native Windows locale name.
+          if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr_utf8=French_France.65001
+          else
+            # None found.
+            gt_cv_locale_fr_utf8=none
+          fi
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the usual locale name.
+          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr_utf8=fr_FR
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_fr_utf8=fr_FR.UTF-8
+            else
+              # Test for the Solaris 7 locale name.
+              if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_fr_utf8=fr.UTF-8
+              else
+                # None found.
+                gt_cv_locale_fr_utf8=none
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+  ])
+  LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+  AC_SUBST([LOCALE_FR_UTF8])
+])
diff --git a/m4/locale-ja.m4 b/m4/locale-ja.m4
new file mode 100644
index 0000000..5ba0e43
--- /dev/null
+++ b/m4/locale-ja.m4
@@ -0,0 +1,136 @@
+# locale-ja.m4 serial 12
+dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a japanese locale with EUC-JP encoding.
+AC_DEFUN([gt_LOCALE_JA],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [
+    AC_LANG_CONFTEST([AC_LANG_SOURCE([
+changequote(,)dnl
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether MB_CUR_MAX is > 1.  This excludes the dysfunctional locales
+     on Cygwin 1.5.x.  */
+  if (MB_CUR_MAX == 1)
+    return 1;
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding (except on MirBSD).  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  return 0;
+}
+changequote([,])dnl
+      ])])
+    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Note that on native Windows, the Japanese locale is
+          # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+          # cannot use it here.
+          gt_cv_locale_ja=none
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the AIX locale name.
+          if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_ja=ja_JP
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_ja=ja_JP.EUC-JP
+            else
+              # Test for the HP-UX, OSF/1, NetBSD locale name.
+              if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_ja=ja_JP.eucJP
+              else
+                # Test for the IRIX, FreeBSD locale name.
+                if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                  gt_cv_locale_ja=ja_JP.EUC
+                else
+                  # Test for the Solaris 7 locale name.
+                  if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                    gt_cv_locale_ja=ja
+                  else
+                    # Special test for NetBSD 1.6.
+                    if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+                      gt_cv_locale_ja=ja_JP.eucJP
+                    else
+                      # None found.
+                      gt_cv_locale_ja=none
+                    fi
+                  fi
+                fi
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+  ])
+  LOCALE_JA=$gt_cv_locale_ja
+  AC_SUBST([LOCALE_JA])
+])
diff --git a/m4/locale-zh.m4 b/m4/locale-zh.m4
new file mode 100644
index 0000000..e5502b2
--- /dev/null
+++ b/m4/locale-zh.m4
@@ -0,0 +1,130 @@
+# locale-zh.m4 serial 12
+dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a chinese locale with GB18030 encoding.
+AC_DEFUN([gt_LOCALE_ZH_CN],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [
+    AC_LANG_CONFTEST([AC_LANG_SOURCE([
+changequote(,)dnl
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding (except on MirBSD).  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  /* Check whether a typical GB18030 multibyte sequence is recognized as a
+     single wide character.  This excludes the GB2312 and GBK encodings.  */
+  if (mblen ("\203\062\332\066", 5) != 4)
+    return 1;
+  return 0;
+}
+changequote([,])dnl
+      ])])
+    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the hypothetical native Windows locale name.
+          if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_zh_CN=Chinese_China.54936
+          else
+            # None found.
+            gt_cv_locale_zh_CN=none
+          fi
+          ;;
+        solaris2.8)
+          # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+          # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+          # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+          gt_cv_locale_zh_CN=none
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the locale name without encoding suffix.
+          if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_zh_CN=zh_CN
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_zh_CN=zh_CN.GB18030
+            else
+              # None found.
+              gt_cv_locale_zh_CN=none
+            fi
+          fi
+          ;;
+      esac
+    else
+      # If there was a link error, due to mblen(), the system is so old that
+      # it certainly doesn't have a chinese locale.
+      gt_cv_locale_zh_CN=none
+    fi
+    rm -fr conftest*
+  ])
+  LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+  AC_SUBST([LOCALE_ZH_CN])
+])
diff --git a/m4/lock.m4 b/m4/lock.m4
new file mode 100644
index 0000000..83da6cc
--- /dev/null
+++ b/m4/lock.m4
@@ -0,0 +1,39 @@
+# lock.m4 serial 13 (gettext-0.18.2)
+dnl Copyright (C) 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_LOCK],
+[
+  AC_REQUIRE([gl_THREADLIB])
+  if test "$gl_threads_api" = posix; then
+    # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
+    # pthread_rwlock_* functions.
+    AC_CHECK_TYPE([pthread_rwlock_t],
+      [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
+         [Define if the POSIX multithreading library has read/write locks.])],
+      [],
+      [#include <pthread.h>])
+    # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+    AC_COMPILE_IFELSE([
+      AC_LANG_PROGRAM(
+        [[#include <pthread.h>]],
+        [[
+#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif
+        ]])],
+      [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1],
+         [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
+  fi
+  gl_PREREQ_LOCK
+])
+
+# Prerequisites of lib/glthread/lock.c.
+AC_DEFUN([gl_PREREQ_LOCK], [:])
diff --git a/m4/longlong.m4 b/m4/longlong.m4
new file mode 100644
index 0000000..b9c65c7
--- /dev/null
+++ b/m4/longlong.m4
@@ -0,0 +1,113 @@
+# longlong.m4 serial 17
+dnl Copyright (C) 1999-2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+     [ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+        if test $ac_cv_type_long_long_int = yes; then
+          dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+          dnl If cross compiling, assume the bug is not important, since
+          dnl nobody cross compiles for this platform as far as we know.
+          AC_RUN_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[@%:@include <limits.h>
+                 @%:@ifndef LLONG_MAX
+                 @%:@ define HALF \
+                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                 @%:@ define LLONG_MAX (HALF - 1 + HALF)
+                 @%:@endif]],
+               [[long long int n = 1;
+                 int i;
+                 for (i = 0; ; i++)
+                   {
+                     long long int m = n << i;
+                     if (m >> i != n)
+                       return 1;
+                     if (LLONG_MAX / 2 < m)
+                       break;
+                   }
+                 return 0;]])],
+            [],
+            [ac_cv_type_long_long_int=no],
+            [:])
+        fi
+      fi])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'long long int'.])
+  fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       AC_LINK_IFELSE(
+         [_AC_TYPE_LONG_LONG_SNIPPET],
+         [],
+         [ac_cv_type_unsigned_long_long_int=no])
+     fi])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'unsigned long long int'.])
+  fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+  AC_LANG_PROGRAM(
+    [[/* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;]],
+    [[/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));]])
+])
diff --git a/m4/m4.m4 b/m4/m4.m4
index 7d8b394..7657458 100644
--- a/m4/m4.m4
+++ b/m4/m4.m4
@@ -1,29 +1,82 @@
-# Copyright 2000 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# m4.m4 serial 12
 
-# BISON_PROG_GNU_M4
-# -----------------
-# Check for GNU m4, at least 1.3 (supports frozen files).
-AC_DEFUN([BISON_PROG_GNU_M4],
-[AC_PATH_PROGS(M4, gm4 gnum4 m4, m4)
-AC_CACHE_CHECK(whether m4 supports frozen files, ac_cv_prog_gnu_m4,
-[ac_cv_prog_gnu_m4=no
-if test x"$M4" != x; then
-  case `$M4 --help < /dev/null 2>&1` in
-    *reload-state*) ac_cv_prog_gnu_m4=yes ;;
-  esac
-fi])])
+# Copyright (C) 2000, 2006-2012 Free Software Foundation, Inc.
+
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.  This file is offered as-is,
+# without warranty of any kind.
+
+# AC_PROG_GNU_M4
+# --------------
+# Check for GNU M4, at least 1.4.6 (all earlier versions had bugs in
+# trace support and regexp support):
+# http://lists.gnu.org/archive/html/bug-gnu-utils/2006-11/msg00096.html
+# http://lists.gnu.org/archive/html/bug-autoconf/2009-07/msg00023.html
+# Also, check whether --error-output (through 1.4.x) or --debugfile (2.0)
+# is supported, and AC_SUBST M4_DEBUGFILE accordingly.
+# Also avoid versions of m4 that trigger strstr bugs.
+AC_DEFUN([AC_PROG_GNU_M4],
+  [AC_ARG_VAR([M4], [Location of GNU M4 1.4.6 or later.  Defaults to the first
+    program of 'm4', 'gm4', or 'gnum4' on PATH that meets Autoconf needs.])
+  AC_CACHE_CHECK([for GNU M4 that supports accurate traces], [ac_cv_path_M4],
+    [rm -f conftest.m4f
+ac_had_posixly_correct=${POSIXLY_CORRECT:+yes}
+AS_UNSET([POSIXLY_CORRECT])
+AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4 gnum4],
+      [dnl Creative quoting here to avoid raw dnl and ifdef in configure.
+      # Root out GNU M4 1.4.5, as well as non-GNU m4 that ignore -t, -F.
+      # Root out GNU M4 1.4.15 with buggy false negative replacement strstr.
+      # Root out Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 with buggy
+      # false positive strstr.
+      ac_snippet=change'quote(<,>)in''dir(<if''def>,mac,bug)'
+      ac_snippet=${ac_snippet}pat'subst(a,\(b\)\|\(a\),\1)d'nl
+      ac_snippet=${ac_snippet}${as_nl}if'else(in''dex(..wi.d.,.d.),-1,bug)'
+      ac_snippet=${ac_snippet}${as_nl}if'else(in''dex(dnl
+;:11-:12-:12-:12-:12-:12-:12-:12-:12.:12.:12.:12.:12.:12.:12.:12.:12-,dnl
+:12-:12-:12-:12-:12-:12-:12-:12-),-1,,strstr-bug2)'
+      test -z "`$ac_path_M4 -F conftest.m4f </dev/null 2>&1`" \
+      && test -z "`AS_ECHO([$ac_snippet]) | $ac_path_M4 --trace=mac 2>&1`" \
+      && test -f conftest.m4f \
+      && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:
+      rm -f conftest.m4f],
+      [AC_MSG_ERROR([no acceptable m4 could be found in \$PATH.
+GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.
+GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
+Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug.])])])
+  M4=$ac_cv_path_M4
+  AC_CACHE_CHECK([whether $ac_cv_path_M4 accepts --gnu],
+    [ac_cv_prog_gnu_m4_gnu],
+    [case `$M4 --help < /dev/null 2>&1` in
+      *--gnu*) ac_cv_prog_gnu_m4_gnu=yes ;;
+      *) ac_cv_prog_gnu_m4_gnu=no ;;
+    esac])
+  if test "$ac_cv_prog_gnu_m4_gnu" = yes; then
+    M4_GNU=--gnu
+  else
+    M4_GNU=
+  fi
+  AC_SUBST([M4_GNU])
+  if test x$ac_had_posixly_correct = xyes; then
+    POSIXLY_CORRECT=:
+    if test $ac_cv_prog_gnu_m4_gnu = no; then
+      AC_MSG_WARN([the version of M4 that was found does not support -g])
+      AC_MSG_WARN([using it with POSIXLY_CORRECT set may cause problems])
+    fi
+  fi
+  AC_CACHE_CHECK([how m4 supports trace files], [ac_cv_prog_gnu_m4_debugfile],
+    [case `$M4 --help < /dev/null 2>&1` in
+      *debugfile*) ac_cv_prog_gnu_m4_debugfile=--debugfile ;;
+      *) ac_cv_prog_gnu_m4_debugfile=--error-output ;;
+    esac])
+  AC_SUBST([M4_DEBUGFILE], [$ac_cv_prog_gnu_m4_debugfile])
+])
+
+# Compatibility for bootstrapping with Autoconf 2.61.
+dnl FIXME - replace this with AC_PREREQ([2.62]) after the release.
+# AC_PATH_PROGS_FEATURE_CHECK was added the same time the slightly broken,
+# undocumented _AC_PATH_PROG_FEATURE_CHECK was deleted.
+m4_ifndef([AC_PATH_PROGS_FEATURE_CHECK],
+  [m4_define([AC_PATH_PROGS_FEATURE_CHECK],
+    [_AC_PATH_PROG_FEATURE_CHECK([$1], [$2], [$3], [$5])
+])])
diff --git a/m4/malloc.m4 b/m4/malloc.m4
new file mode 100644
index 0000000..8fa48e9
--- /dev/null
+++ b/m4/malloc.m4
@@ -0,0 +1,98 @@
+# malloc.m4 serial 14
+dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+m4_version_prereq([2.70], [] ,[
+
+# This is taken from the following Autoconf patch:
+# http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9
+AC_DEFUN([_AC_FUNC_MALLOC_IF],
+[
+  AC_REQUIRE([AC_HEADER_STDC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
+  AC_CHECK_HEADERS([stdlib.h])
+  AC_CACHE_CHECK([for GNU libc compatible malloc],
+    [ac_cv_func_malloc_0_nonnull],
+    [AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+            # include <stdlib.h>
+            #else
+            char *malloc ();
+            #endif
+          ]],
+          [[return ! malloc (0);]])
+       ],
+       [ac_cv_func_malloc_0_nonnull=yes],
+       [ac_cv_func_malloc_0_nonnull=no],
+       [case "$host_os" in
+          # Guess yes on platforms where we know the result.
+          *-gnu* | freebsd* | netbsd* | openbsd* \
+          | hpux* | solaris* | cygwin* | mingw*)
+            ac_cv_func_malloc_0_nonnull=yes ;;
+          # If we don't know, assume the worst.
+          *) ac_cv_func_malloc_0_nonnull=no ;;
+        esac
+       ])
+    ])
+  AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2])
+])# _AC_FUNC_MALLOC_IF
+
+])
+
+# gl_FUNC_MALLOC_GNU
+# ------------------
+# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if
+# it is not.
+AC_DEFUN([gl_FUNC_MALLOC_GNU],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  dnl _AC_FUNC_MALLOC_IF is defined in Autoconf.
+  _AC_FUNC_MALLOC_IF(
+    [AC_DEFINE([HAVE_MALLOC_GNU], [1],
+               [Define to 1 if your system has a GNU libc compatible 'malloc'
+                function, and to 0 otherwise.])],
+    [AC_DEFINE([HAVE_MALLOC_GNU], [0])
+     REPLACE_MALLOC=1
+    ])
+])
+
+# gl_FUNC_MALLOC_POSIX
+# --------------------
+# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails), and replace malloc if it is not.
+AC_DEFUN([gl_FUNC_MALLOC_POSIX],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+  if test $gl_cv_func_malloc_posix = yes; then
+    AC_DEFINE([HAVE_MALLOC_POSIX], [1],
+      [Define if the 'malloc' function is POSIX compliant.])
+  else
+    REPLACE_MALLOC=1
+  fi
+])
+
+# Test whether malloc, realloc, calloc are POSIX compliant,
+# Set gl_cv_func_malloc_posix to yes or no accordingly.
+AC_DEFUN([gl_CHECK_MALLOC_POSIX],
+[
+  AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
+    [gl_cv_func_malloc_posix],
+    [
+      dnl It is too dangerous to try to allocate a large amount of memory:
+      dnl some systems go to their knees when you do that. So assume that
+      dnl all Unix implementations of the function are POSIX compliant.
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[]],
+           [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+             choke me
+             #endif
+            ]])],
+        [gl_cv_func_malloc_posix=yes],
+        [gl_cv_func_malloc_posix=no])
+    ])
+])
diff --git a/m4/math_h.m4 b/m4/math_h.m4
new file mode 100644
index 0000000..338e80d
--- /dev/null
+++ b/m4/math_h.m4
@@ -0,0 +1,353 @@
+# math_h.m4 serial 114
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_MATH_H],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  gl_CHECK_NEXT_HEADERS([math.h])
+
+  AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]],
+      [[/* Solaris 10 has a broken definition of NAN.  Other platforms
+        fail to provide NAN, or provide it only in C99 mode; this
+        test only needs to fail when NAN is provided but wrong.  */
+         float f = 1.0f;
+#ifdef NAN
+         f = NAN;
+#endif
+         return f == 0;]])],
+      [gl_cv_header_math_nan_works=yes],
+      [gl_cv_header_math_nan_works=no])])
+  if test $gl_cv_header_math_nan_works = no; then
+    REPLACE_NAN=1
+  fi
+  AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]],
+      [[/* Solaris 10 has a broken definition of HUGE_VAL.  */
+         double d = HUGE_VAL;
+         return d == 0;]])],
+      [gl_cv_header_math_huge_val_works=yes],
+      [gl_cv_header_math_huge_val_works=no])])
+  if test $gl_cv_header_math_huge_val_works = no; then
+    REPLACE_HUGE_VAL=1
+  fi
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <math.h>]],
+    [acosf acosl asinf asinl atanf atanl
+     cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf
+     expf expl exp2 exp2f exp2l expm1 expm1f expm1l
+     fabsf fabsl floorf floorl fma fmaf fmal
+     fmod fmodf fmodl frexpf frexpl hypotf hypotl
+     ilogb ilogbf ilogbl
+     ldexpf ldexpl
+     log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l
+     logb logbf logbl
+     modf modff modfl powf
+     remainder remainderf remainderl
+     rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl
+     tanf tanl tanhf trunc truncf truncl])
+])
+
+AC_DEFUN([gl_MATH_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_MATH_H_DEFAULTS],
+[
+  GNULIB_ACOSF=0;      AC_SUBST([GNULIB_ACOSF])
+  GNULIB_ACOSL=0;      AC_SUBST([GNULIB_ACOSL])
+  GNULIB_ASINF=0;      AC_SUBST([GNULIB_ASINF])
+  GNULIB_ASINL=0;      AC_SUBST([GNULIB_ASINL])
+  GNULIB_ATANF=0;      AC_SUBST([GNULIB_ATANF])
+  GNULIB_ATANL=0;      AC_SUBST([GNULIB_ATANL])
+  GNULIB_ATAN2F=0;     AC_SUBST([GNULIB_ATAN2F])
+  GNULIB_CBRT=0;       AC_SUBST([GNULIB_CBRT])
+  GNULIB_CBRTF=0;      AC_SUBST([GNULIB_CBRTF])
+  GNULIB_CBRTL=0;      AC_SUBST([GNULIB_CBRTL])
+  GNULIB_CEIL=0;       AC_SUBST([GNULIB_CEIL])
+  GNULIB_CEILF=0;      AC_SUBST([GNULIB_CEILF])
+  GNULIB_CEILL=0;      AC_SUBST([GNULIB_CEILL])
+  GNULIB_COPYSIGN=0;   AC_SUBST([GNULIB_COPYSIGN])
+  GNULIB_COPYSIGNF=0;  AC_SUBST([GNULIB_COPYSIGNF])
+  GNULIB_COPYSIGNL=0;  AC_SUBST([GNULIB_COPYSIGNL])
+  GNULIB_COSF=0;       AC_SUBST([GNULIB_COSF])
+  GNULIB_COSL=0;       AC_SUBST([GNULIB_COSL])
+  GNULIB_COSHF=0;      AC_SUBST([GNULIB_COSHF])
+  GNULIB_EXPF=0;       AC_SUBST([GNULIB_EXPF])
+  GNULIB_EXPL=0;       AC_SUBST([GNULIB_EXPL])
+  GNULIB_EXP2=0;       AC_SUBST([GNULIB_EXP2])
+  GNULIB_EXP2F=0;      AC_SUBST([GNULIB_EXP2F])
+  GNULIB_EXP2L=0;      AC_SUBST([GNULIB_EXP2L])
+  GNULIB_EXPM1=0;      AC_SUBST([GNULIB_EXPM1])
+  GNULIB_EXPM1F=0;     AC_SUBST([GNULIB_EXPM1F])
+  GNULIB_EXPM1L=0;     AC_SUBST([GNULIB_EXPM1L])
+  GNULIB_FABSF=0;      AC_SUBST([GNULIB_FABSF])
+  GNULIB_FABSL=0;      AC_SUBST([GNULIB_FABSL])
+  GNULIB_FLOOR=0;      AC_SUBST([GNULIB_FLOOR])
+  GNULIB_FLOORF=0;     AC_SUBST([GNULIB_FLOORF])
+  GNULIB_FLOORL=0;     AC_SUBST([GNULIB_FLOORL])
+  GNULIB_FMA=0;        AC_SUBST([GNULIB_FMA])
+  GNULIB_FMAF=0;       AC_SUBST([GNULIB_FMAF])
+  GNULIB_FMAL=0;       AC_SUBST([GNULIB_FMAL])
+  GNULIB_FMOD=0;       AC_SUBST([GNULIB_FMOD])
+  GNULIB_FMODF=0;      AC_SUBST([GNULIB_FMODF])
+  GNULIB_FMODL=0;      AC_SUBST([GNULIB_FMODL])
+  GNULIB_FREXPF=0;     AC_SUBST([GNULIB_FREXPF])
+  GNULIB_FREXP=0;      AC_SUBST([GNULIB_FREXP])
+  GNULIB_FREXPL=0;     AC_SUBST([GNULIB_FREXPL])
+  GNULIB_HYPOT=0;      AC_SUBST([GNULIB_HYPOT])
+  GNULIB_HYPOTF=0;     AC_SUBST([GNULIB_HYPOTF])
+  GNULIB_HYPOTL=0;     AC_SUBST([GNULIB_HYPOTL])
+  GNULIB_ILOGB=0;      AC_SUBST([GNULIB_ILOGB])
+  GNULIB_ILOGBF=0;     AC_SUBST([GNULIB_ILOGBF])
+  GNULIB_ILOGBL=0;     AC_SUBST([GNULIB_ILOGBL])
+  GNULIB_ISFINITE=0;   AC_SUBST([GNULIB_ISFINITE])
+  GNULIB_ISINF=0;      AC_SUBST([GNULIB_ISINF])
+  GNULIB_ISNAN=0;      AC_SUBST([GNULIB_ISNAN])
+  GNULIB_ISNANF=0;     AC_SUBST([GNULIB_ISNANF])
+  GNULIB_ISNAND=0;     AC_SUBST([GNULIB_ISNAND])
+  GNULIB_ISNANL=0;     AC_SUBST([GNULIB_ISNANL])
+  GNULIB_LDEXPF=0;     AC_SUBST([GNULIB_LDEXPF])
+  GNULIB_LDEXPL=0;     AC_SUBST([GNULIB_LDEXPL])
+  GNULIB_LOG=0;        AC_SUBST([GNULIB_LOG])
+  GNULIB_LOGF=0;       AC_SUBST([GNULIB_LOGF])
+  GNULIB_LOGL=0;       AC_SUBST([GNULIB_LOGL])
+  GNULIB_LOG10=0;      AC_SUBST([GNULIB_LOG10])
+  GNULIB_LOG10F=0;     AC_SUBST([GNULIB_LOG10F])
+  GNULIB_LOG10L=0;     AC_SUBST([GNULIB_LOG10L])
+  GNULIB_LOG1P=0;      AC_SUBST([GNULIB_LOG1P])
+  GNULIB_LOG1PF=0;     AC_SUBST([GNULIB_LOG1PF])
+  GNULIB_LOG1PL=0;     AC_SUBST([GNULIB_LOG1PL])
+  GNULIB_LOG2=0;       AC_SUBST([GNULIB_LOG2])
+  GNULIB_LOG2F=0;      AC_SUBST([GNULIB_LOG2F])
+  GNULIB_LOG2L=0;      AC_SUBST([GNULIB_LOG2L])
+  GNULIB_LOGB=0;       AC_SUBST([GNULIB_LOGB])
+  GNULIB_LOGBF=0;      AC_SUBST([GNULIB_LOGBF])
+  GNULIB_LOGBL=0;      AC_SUBST([GNULIB_LOGBL])
+  GNULIB_MODF=0;       AC_SUBST([GNULIB_MODF])
+  GNULIB_MODFF=0;      AC_SUBST([GNULIB_MODFF])
+  GNULIB_MODFL=0;      AC_SUBST([GNULIB_MODFL])
+  GNULIB_POWF=0;       AC_SUBST([GNULIB_POWF])
+  GNULIB_REMAINDER=0;  AC_SUBST([GNULIB_REMAINDER])
+  GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF])
+  GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL])
+  GNULIB_RINT=0;       AC_SUBST([GNULIB_RINT])
+  GNULIB_RINTF=0;      AC_SUBST([GNULIB_RINTF])
+  GNULIB_RINTL=0;      AC_SUBST([GNULIB_RINTL])
+  GNULIB_ROUND=0;      AC_SUBST([GNULIB_ROUND])
+  GNULIB_ROUNDF=0;     AC_SUBST([GNULIB_ROUNDF])
+  GNULIB_ROUNDL=0;     AC_SUBST([GNULIB_ROUNDL])
+  GNULIB_SIGNBIT=0;    AC_SUBST([GNULIB_SIGNBIT])
+  GNULIB_SINF=0;       AC_SUBST([GNULIB_SINF])
+  GNULIB_SINL=0;       AC_SUBST([GNULIB_SINL])
+  GNULIB_SINHF=0;      AC_SUBST([GNULIB_SINHF])
+  GNULIB_SQRTF=0;      AC_SUBST([GNULIB_SQRTF])
+  GNULIB_SQRTL=0;      AC_SUBST([GNULIB_SQRTL])
+  GNULIB_TANF=0;       AC_SUBST([GNULIB_TANF])
+  GNULIB_TANL=0;       AC_SUBST([GNULIB_TANL])
+  GNULIB_TANHF=0;      AC_SUBST([GNULIB_TANHF])
+  GNULIB_TRUNC=0;      AC_SUBST([GNULIB_TRUNC])
+  GNULIB_TRUNCF=0;     AC_SUBST([GNULIB_TRUNCF])
+  GNULIB_TRUNCL=0;     AC_SUBST([GNULIB_TRUNCL])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_ACOSF=1;                AC_SUBST([HAVE_ACOSF])
+  HAVE_ACOSL=1;                AC_SUBST([HAVE_ACOSL])
+  HAVE_ASINF=1;                AC_SUBST([HAVE_ASINF])
+  HAVE_ASINL=1;                AC_SUBST([HAVE_ASINL])
+  HAVE_ATANF=1;                AC_SUBST([HAVE_ATANF])
+  HAVE_ATANL=1;                AC_SUBST([HAVE_ATANL])
+  HAVE_ATAN2F=1;               AC_SUBST([HAVE_ATAN2F])
+  HAVE_CBRT=1;                 AC_SUBST([HAVE_CBRT])
+  HAVE_CBRTF=1;                AC_SUBST([HAVE_CBRTF])
+  HAVE_CBRTL=1;                AC_SUBST([HAVE_CBRTL])
+  HAVE_COPYSIGN=1;             AC_SUBST([HAVE_COPYSIGN])
+  HAVE_COPYSIGNL=1;            AC_SUBST([HAVE_COPYSIGNL])
+  HAVE_COSF=1;                 AC_SUBST([HAVE_COSF])
+  HAVE_COSL=1;                 AC_SUBST([HAVE_COSL])
+  HAVE_COSHF=1;                AC_SUBST([HAVE_COSHF])
+  HAVE_EXPF=1;                 AC_SUBST([HAVE_EXPF])
+  HAVE_EXPL=1;                 AC_SUBST([HAVE_EXPL])
+  HAVE_EXPM1=1;                AC_SUBST([HAVE_EXPM1])
+  HAVE_EXPM1F=1;               AC_SUBST([HAVE_EXPM1F])
+  HAVE_FABSF=1;                AC_SUBST([HAVE_FABSF])
+  HAVE_FABSL=1;                AC_SUBST([HAVE_FABSL])
+  HAVE_FMA=1;                  AC_SUBST([HAVE_FMA])
+  HAVE_FMAF=1;                 AC_SUBST([HAVE_FMAF])
+  HAVE_FMAL=1;                 AC_SUBST([HAVE_FMAL])
+  HAVE_FMODF=1;                AC_SUBST([HAVE_FMODF])
+  HAVE_FMODL=1;                AC_SUBST([HAVE_FMODL])
+  HAVE_FREXPF=1;               AC_SUBST([HAVE_FREXPF])
+  HAVE_HYPOTF=1;               AC_SUBST([HAVE_HYPOTF])
+  HAVE_HYPOTL=1;               AC_SUBST([HAVE_HYPOTL])
+  HAVE_ILOGB=1;                AC_SUBST([HAVE_ILOGB])
+  HAVE_ILOGBF=1;               AC_SUBST([HAVE_ILOGBF])
+  HAVE_ILOGBL=1;               AC_SUBST([HAVE_ILOGBL])
+  HAVE_ISNANF=1;               AC_SUBST([HAVE_ISNANF])
+  HAVE_ISNAND=1;               AC_SUBST([HAVE_ISNAND])
+  HAVE_ISNANL=1;               AC_SUBST([HAVE_ISNANL])
+  HAVE_LDEXPF=1;               AC_SUBST([HAVE_LDEXPF])
+  HAVE_LOGF=1;                 AC_SUBST([HAVE_LOGF])
+  HAVE_LOGL=1;                 AC_SUBST([HAVE_LOGL])
+  HAVE_LOG10F=1;               AC_SUBST([HAVE_LOG10F])
+  HAVE_LOG10L=1;               AC_SUBST([HAVE_LOG10L])
+  HAVE_LOG1P=1;                AC_SUBST([HAVE_LOG1P])
+  HAVE_LOG1PF=1;               AC_SUBST([HAVE_LOG1PF])
+  HAVE_LOG1PL=1;               AC_SUBST([HAVE_LOG1PL])
+  HAVE_LOGBF=1;                AC_SUBST([HAVE_LOGBF])
+  HAVE_LOGBL=1;                AC_SUBST([HAVE_LOGBL])
+  HAVE_MODFF=1;                AC_SUBST([HAVE_MODFF])
+  HAVE_MODFL=1;                AC_SUBST([HAVE_MODFL])
+  HAVE_POWF=1;                 AC_SUBST([HAVE_POWF])
+  HAVE_REMAINDER=1;            AC_SUBST([HAVE_REMAINDER])
+  HAVE_REMAINDERF=1;           AC_SUBST([HAVE_REMAINDERF])
+  HAVE_RINT=1;                 AC_SUBST([HAVE_RINT])
+  HAVE_RINTL=1;                AC_SUBST([HAVE_RINTL])
+  HAVE_SINF=1;                 AC_SUBST([HAVE_SINF])
+  HAVE_SINL=1;                 AC_SUBST([HAVE_SINL])
+  HAVE_SINHF=1;                AC_SUBST([HAVE_SINHF])
+  HAVE_SQRTF=1;                AC_SUBST([HAVE_SQRTF])
+  HAVE_SQRTL=1;                AC_SUBST([HAVE_SQRTL])
+  HAVE_TANF=1;                 AC_SUBST([HAVE_TANF])
+  HAVE_TANL=1;                 AC_SUBST([HAVE_TANL])
+  HAVE_TANHF=1;                AC_SUBST([HAVE_TANHF])
+  HAVE_DECL_ACOSL=1;           AC_SUBST([HAVE_DECL_ACOSL])
+  HAVE_DECL_ASINL=1;           AC_SUBST([HAVE_DECL_ASINL])
+  HAVE_DECL_ATANL=1;           AC_SUBST([HAVE_DECL_ATANL])
+  HAVE_DECL_CBRTF=1;           AC_SUBST([HAVE_DECL_CBRTF])
+  HAVE_DECL_CBRTL=1;           AC_SUBST([HAVE_DECL_CBRTL])
+  HAVE_DECL_CEILF=1;           AC_SUBST([HAVE_DECL_CEILF])
+  HAVE_DECL_CEILL=1;           AC_SUBST([HAVE_DECL_CEILL])
+  HAVE_DECL_COPYSIGNF=1;       AC_SUBST([HAVE_DECL_COPYSIGNF])
+  HAVE_DECL_COSL=1;            AC_SUBST([HAVE_DECL_COSL])
+  HAVE_DECL_EXPL=1;            AC_SUBST([HAVE_DECL_EXPL])
+  HAVE_DECL_EXP2=1;            AC_SUBST([HAVE_DECL_EXP2])
+  HAVE_DECL_EXP2F=1;           AC_SUBST([HAVE_DECL_EXP2F])
+  HAVE_DECL_EXP2L=1;           AC_SUBST([HAVE_DECL_EXP2L])
+  HAVE_DECL_EXPM1L=1;          AC_SUBST([HAVE_DECL_EXPM1L])
+  HAVE_DECL_FLOORF=1;          AC_SUBST([HAVE_DECL_FLOORF])
+  HAVE_DECL_FLOORL=1;          AC_SUBST([HAVE_DECL_FLOORL])
+  HAVE_DECL_FREXPL=1;          AC_SUBST([HAVE_DECL_FREXPL])
+  HAVE_DECL_LDEXPL=1;          AC_SUBST([HAVE_DECL_LDEXPL])
+  HAVE_DECL_LOGL=1;            AC_SUBST([HAVE_DECL_LOGL])
+  HAVE_DECL_LOG10L=1;          AC_SUBST([HAVE_DECL_LOG10L])
+  HAVE_DECL_LOG2=1;            AC_SUBST([HAVE_DECL_LOG2])
+  HAVE_DECL_LOG2F=1;           AC_SUBST([HAVE_DECL_LOG2F])
+  HAVE_DECL_LOG2L=1;           AC_SUBST([HAVE_DECL_LOG2L])
+  HAVE_DECL_LOGB=1;            AC_SUBST([HAVE_DECL_LOGB])
+  HAVE_DECL_REMAINDER=1;       AC_SUBST([HAVE_DECL_REMAINDER])
+  HAVE_DECL_REMAINDERL=1;      AC_SUBST([HAVE_DECL_REMAINDERL])
+  HAVE_DECL_RINTF=1;           AC_SUBST([HAVE_DECL_RINTF])
+  HAVE_DECL_ROUND=1;           AC_SUBST([HAVE_DECL_ROUND])
+  HAVE_DECL_ROUNDF=1;          AC_SUBST([HAVE_DECL_ROUNDF])
+  HAVE_DECL_ROUNDL=1;          AC_SUBST([HAVE_DECL_ROUNDL])
+  HAVE_DECL_SINL=1;            AC_SUBST([HAVE_DECL_SINL])
+  HAVE_DECL_SQRTL=1;           AC_SUBST([HAVE_DECL_SQRTL])
+  HAVE_DECL_TANL=1;            AC_SUBST([HAVE_DECL_TANL])
+  HAVE_DECL_TRUNC=1;           AC_SUBST([HAVE_DECL_TRUNC])
+  HAVE_DECL_TRUNCF=1;          AC_SUBST([HAVE_DECL_TRUNCF])
+  HAVE_DECL_TRUNCL=1;          AC_SUBST([HAVE_DECL_TRUNCL])
+  REPLACE_CBRTF=0;             AC_SUBST([REPLACE_CBRTF])
+  REPLACE_CBRTL=0;             AC_SUBST([REPLACE_CBRTL])
+  REPLACE_CEIL=0;              AC_SUBST([REPLACE_CEIL])
+  REPLACE_CEILF=0;             AC_SUBST([REPLACE_CEILF])
+  REPLACE_CEILL=0;             AC_SUBST([REPLACE_CEILL])
+  REPLACE_EXPM1=0;             AC_SUBST([REPLACE_EXPM1])
+  REPLACE_EXPM1F=0;            AC_SUBST([REPLACE_EXPM1F])
+  REPLACE_EXP2=0;              AC_SUBST([REPLACE_EXP2])
+  REPLACE_EXP2L=0;             AC_SUBST([REPLACE_EXP2L])
+  REPLACE_FABSL=0;             AC_SUBST([REPLACE_FABSL])
+  REPLACE_FLOOR=0;             AC_SUBST([REPLACE_FLOOR])
+  REPLACE_FLOORF=0;            AC_SUBST([REPLACE_FLOORF])
+  REPLACE_FLOORL=0;            AC_SUBST([REPLACE_FLOORL])
+  REPLACE_FMA=0;               AC_SUBST([REPLACE_FMA])
+  REPLACE_FMAF=0;              AC_SUBST([REPLACE_FMAF])
+  REPLACE_FMAL=0;              AC_SUBST([REPLACE_FMAL])
+  REPLACE_FMOD=0;              AC_SUBST([REPLACE_FMOD])
+  REPLACE_FMODF=0;             AC_SUBST([REPLACE_FMODF])
+  REPLACE_FMODL=0;             AC_SUBST([REPLACE_FMODL])
+  REPLACE_FREXPF=0;            AC_SUBST([REPLACE_FREXPF])
+  REPLACE_FREXP=0;             AC_SUBST([REPLACE_FREXP])
+  REPLACE_FREXPL=0;            AC_SUBST([REPLACE_FREXPL])
+  REPLACE_HUGE_VAL=0;          AC_SUBST([REPLACE_HUGE_VAL])
+  REPLACE_HYPOT=0;             AC_SUBST([REPLACE_HYPOT])
+  REPLACE_HYPOTF=0;            AC_SUBST([REPLACE_HYPOTF])
+  REPLACE_HYPOTL=0;            AC_SUBST([REPLACE_HYPOTL])
+  REPLACE_ILOGB=0;             AC_SUBST([REPLACE_ILOGB])
+  REPLACE_ILOGBF=0;            AC_SUBST([REPLACE_ILOGBF])
+  REPLACE_ISFINITE=0;          AC_SUBST([REPLACE_ISFINITE])
+  REPLACE_ISINF=0;             AC_SUBST([REPLACE_ISINF])
+  REPLACE_ISNAN=0;             AC_SUBST([REPLACE_ISNAN])
+  REPLACE_LDEXPL=0;            AC_SUBST([REPLACE_LDEXPL])
+  REPLACE_LOG=0;               AC_SUBST([REPLACE_LOG])
+  REPLACE_LOGF=0;              AC_SUBST([REPLACE_LOGF])
+  REPLACE_LOGL=0;              AC_SUBST([REPLACE_LOGL])
+  REPLACE_LOG10=0;             AC_SUBST([REPLACE_LOG10])
+  REPLACE_LOG10F=0;            AC_SUBST([REPLACE_LOG10F])
+  REPLACE_LOG10L=0;            AC_SUBST([REPLACE_LOG10L])
+  REPLACE_LOG1P=0;             AC_SUBST([REPLACE_LOG1P])
+  REPLACE_LOG1PF=0;            AC_SUBST([REPLACE_LOG1PF])
+  REPLACE_LOG1PL=0;            AC_SUBST([REPLACE_LOG1PL])
+  REPLACE_LOG2=0;              AC_SUBST([REPLACE_LOG2])
+  REPLACE_LOG2F=0;             AC_SUBST([REPLACE_LOG2F])
+  REPLACE_LOG2L=0;             AC_SUBST([REPLACE_LOG2L])
+  REPLACE_LOGB=0;              AC_SUBST([REPLACE_LOGB])
+  REPLACE_LOGBF=0;             AC_SUBST([REPLACE_LOGBF])
+  REPLACE_LOGBL=0;             AC_SUBST([REPLACE_LOGBL])
+  REPLACE_MODF=0;              AC_SUBST([REPLACE_MODF])
+  REPLACE_MODFF=0;             AC_SUBST([REPLACE_MODFF])
+  REPLACE_MODFL=0;             AC_SUBST([REPLACE_MODFL])
+  REPLACE_NAN=0;               AC_SUBST([REPLACE_NAN])
+  REPLACE_REMAINDER=0;         AC_SUBST([REPLACE_REMAINDER])
+  REPLACE_REMAINDERF=0;        AC_SUBST([REPLACE_REMAINDERF])
+  REPLACE_REMAINDERL=0;        AC_SUBST([REPLACE_REMAINDERL])
+  REPLACE_ROUND=0;             AC_SUBST([REPLACE_ROUND])
+  REPLACE_ROUNDF=0;            AC_SUBST([REPLACE_ROUNDF])
+  REPLACE_ROUNDL=0;            AC_SUBST([REPLACE_ROUNDL])
+  REPLACE_SIGNBIT=0;           AC_SUBST([REPLACE_SIGNBIT])
+  REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
+  REPLACE_SQRTL=0;             AC_SUBST([REPLACE_SQRTL])
+  REPLACE_TRUNC=0;             AC_SUBST([REPLACE_TRUNC])
+  REPLACE_TRUNCF=0;            AC_SUBST([REPLACE_TRUNCF])
+  REPLACE_TRUNCL=0;            AC_SUBST([REPLACE_TRUNCL])
+])
+
+# gl_LONG_DOUBLE_VS_DOUBLE
+# determines whether 'long double' and 'double' have the same representation.
+# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
+# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
+# The currently known platforms where this is the case are:
+# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
+AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
+[
+  AC_CACHE_CHECK([whether long double and double are the same],
+    [gl_cv_long_double_equals_double],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[#include <float.h>]],
+          [[typedef int check[sizeof (long double) == sizeof (double)
+                              && LDBL_MANT_DIG == DBL_MANT_DIG
+                              && LDBL_MAX_EXP == DBL_MAX_EXP
+                              && LDBL_MIN_EXP == DBL_MIN_EXP
+                              ? 1 : -1];
+          ]])],
+       [gl_cv_long_double_equals_double=yes],
+       [gl_cv_long_double_equals_double=no])
+    ])
+  if test $gl_cv_long_double_equals_double = yes; then
+    AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
+      [Define to 1 if 'long double' and 'double' have the same representation.])
+    HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
+  else
+    HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
+  fi
+  AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])
+])
diff --git a/m4/mbchar.m4 b/m4/mbchar.m4
new file mode 100644
index 0000000..5650381
--- /dev/null
+++ b/m4/mbchar.m4
@@ -0,0 +1,13 @@
+# mbchar.m4 serial 9
+dnl Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl autoconf tests required for use of mbchar.m4
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_MBCHAR],
+[
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+])
diff --git a/m4/mbiter.m4 b/m4/mbiter.m4
new file mode 100644
index 0000000..29a1ef3
--- /dev/null
+++ b/m4/mbiter.m4
@@ -0,0 +1,14 @@
+# mbiter.m4 serial 7
+dnl Copyright (C) 2005, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl autoconf tests required for use of mbiter.h
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_MBITER],
+[
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  :
+])
diff --git a/m4/mbrtowc.m4 b/m4/mbrtowc.m4
index a3bd911..8f829c8 100644
--- a/m4/mbrtowc.m4
+++ b/m4/mbrtowc.m4
@@ -1,22 +1,563 @@
-# mbrtowc.m4 serial 8
-dnl Copyright (C) 2001-2002, 2004-2005 Free Software Foundation, Inc.
+# mbrtowc.m4 serial 25
+dnl Copyright (C) 2001-2002, 2004-2005, 2008-2012 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
+AC_DEFUN([gl_FUNC_MBRTOWC],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  gl_MBSTATE_T_BROKEN
+
+  AC_CHECK_FUNCS_ONCE([mbrtowc])
+  if test $ac_cv_func_mbrtowc = no; then
+    HAVE_MBRTOWC=0
+    AC_CHECK_DECLS([mbrtowc],,, [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+]])
+    if test $ac_cv_have_decl_mbrtowc = yes; then
+      dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although
+      dnl it does not have the function. Avoid a collision with gnulib's
+      dnl replacement.
+      REPLACE_MBRTOWC=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBRTOWC=1
+    else
+      gl_MBRTOWC_NULL_ARG1
+      gl_MBRTOWC_NULL_ARG2
+      gl_MBRTOWC_RETVAL
+      gl_MBRTOWC_NUL_RETVAL
+      case "$gl_cv_func_mbrtowc_null_arg1" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1],
+             [Define if the mbrtowc function has the NULL pwc argument bug.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_null_arg2" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1],
+             [Define if the mbrtowc function has the NULL string argument bug.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_retval" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1],
+             [Define if the mbrtowc function returns a wrong return value.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_nul_retval" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1],
+             [Define if the mbrtowc function does not return 0 for a NUL character.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+    fi
+  fi
+])
+
+dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that
+dnl redefines the semantics of the given mbstate_t type.
+dnl Result is REPLACE_MBSTATE_T.
+dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to
+dnl avoid inconsistencies.
+
+AC_DEFUN([gl_MBSTATE_T_BROKEN],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  AC_CHECK_FUNCS_ONCE([mbsinit])
+  AC_CHECK_FUNCS_ONCE([mbrtowc])
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+    gl_MBRTOWC_INCOMPLETE_STATE
+    gl_MBRTOWC_SANITYCHECK
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+])
+
+dnl Test whether mbrtowc puts the state into non-initial state when parsing an
+dnl incomplete multibyte character.
+dnl Result is gl_cv_func_mbrtowc_incomplete_state.
+
+AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_JA])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc handles incomplete characters],
+    [gl_cv_func_mbrtowc_incomplete_state],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                     # Guess no on AIX and OSF/1.
+        aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+                     # Guess yes otherwise.
+        *)           gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_JA != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_incomplete_state=yes],
+          [gl_cv_func_mbrtowc_incomplete_state=no],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc works not worse than mbtowc.
+dnl Result is gl_cv_func_mbrtowc_sanitycheck.
+
+AC_DEFUN([gl_MBRTOWC_SANITYCHECK],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_ZH_CN])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc],
+    [gl_cv_func_mbrtowc_sanitycheck],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_ZH_CN != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_sanitycheck=yes],
+          [gl_cv_func_mbrtowc_sanitycheck=no],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc supports a NULL pwc argument correctly.
+dnl Result is gl_cv_func_mbrtowc_null_arg1.
+
+AC_DEFUN([gl_MBRTOWC_NULL_ARG1],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument],
+    [gl_cv_func_mbrtowc_null_arg1],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                  # Guess no on Solaris.
+        solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;;
+                  # Guess yes otherwise.
+        *)        gl_cv_func_mbrtowc_null_arg1="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_FR_UTF8 != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "\303\237er";
+      mbstate_t state;
+      wchar_t wc;
+      size_t ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      ret = mbrtowc (&wc, input, 5, &state);
+      if (ret != 2)
+        result |= 1;
+      if (!mbsinit (&state))
+        result |= 2;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      ret = mbrtowc (NULL, input, 5, &state);
+      if (ret != 2) /* Solaris 7 fails here: ret is -1.  */
+        result |= 4;
+      if (!mbsinit (&state))
+        result |= 8;
+    }
+  return result;
+}]])],
+          [gl_cv_func_mbrtowc_null_arg1=yes],
+          [gl_cv_func_mbrtowc_null_arg1=no],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc supports a NULL string argument correctly.
+dnl Result is gl_cv_func_mbrtowc_null_arg2.
+
+AC_DEFUN([gl_MBRTOWC_NULL_ARG2],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument],
+    [gl_cv_func_mbrtowc_null_arg2],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+              # Guess no on OSF/1.
+        osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;;
+              # Guess yes otherwise.
+        *)    gl_cv_func_mbrtowc_null_arg2="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_FR_UTF8 != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+      int ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      mbrtowc (&wc, NULL, 5, &state);
+      /* Check that wc was not modified.  */
+      if (wc != (wchar_t) 0xBADFACE)
+        return 1;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_null_arg2=yes],
+          [gl_cv_func_mbrtowc_null_arg2=no],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc, when parsing the end of a multibyte character,
+dnl correctly returns the number of bytes that were needed to complete the
+dnl character (not the total number of bytes of the multibyte character).
+dnl Result is gl_cv_func_mbrtowc_retval.
+
+AC_DEFUN([gl_MBRTOWC_RETVAL],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
+  AC_REQUIRE([gt_LOCALE_JA])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CACHE_CHECK([whether mbrtowc has a correct return value],
+    [gl_cv_func_mbrtowc_retval],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                                   # Guess no on HP-UX, Solaris, native Windows.
+        hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;;
+                                   # Guess yes otherwise.
+        *)                         gl_cv_func_mbrtowc_retval="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \
+         || { case "$host_os" in mingw*) true;; *) false;; esac; }; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+  int found_some_locale = 0;
+  /* This fails on Solaris.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "B\303\274\303\237er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 1)
+            result |= 1;
+        }
+      found_some_locale = 1;
+    }
+  /* This fails on HP-UX 11.11.  */
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 2)
+            result |= 2;
+        }
+      found_some_locale = 1;
+    }
+  /* This fails on native Windows.  */
+  if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL)
+    {
+      char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 4;
+        }
+      found_some_locale = 1;
+    }
+  if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL)
+    {
+      char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 8;
+        }
+      found_some_locale = 1;
+    }
+  if (setlocale (LC_ALL, "Chinese_China.936") != NULL)
+    {
+      char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 16;
+        }
+      found_some_locale = 1;
+    }
+  return (found_some_locale ? result : 77);
+}]])],
+          [gl_cv_func_mbrtowc_retval=yes],
+          [if test $? != 77; then
+             gl_cv_func_mbrtowc_retval=no
+           fi
+          ],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0.
+dnl Result is gl_cv_func_mbrtowc_nul_retval.
+
+AC_DEFUN([gl_MBRTOWC_NUL_RETVAL],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_ZH_CN])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character],
+    [gl_cv_func_mbrtowc_nul_retval],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                       # Guess no on Solaris 8 and 9.
+        solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+                       # Guess yes otherwise.
+        *)             gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_ZH_CN != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8 and 9.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, "", 1, &state) != 0)
+        return 1;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_nul_retval=yes],
+          [gl_cv_func_mbrtowc_nul_retval=no],
+          [:])
+      fi
+    ])
+])
+
+# Prerequisites of lib/mbrtowc.c.
+AC_DEFUN([gl_PREREQ_MBRTOWC], [
+  :
+])
+
+
 dnl From Paul Eggert
 
-dnl This file can be removed, and gl_FUNC_MBRTOWC replaced with
-dnl AC_FUNC_MBRTOWC, when autoconf 2.60 can be assumed everywhere.
+dnl This is an override of an autoconf macro.
 
-AC_DEFUN([gl_FUNC_MBRTOWC],
+AC_DEFUN([AC_FUNC_MBRTOWC],
 [
   dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60.
   AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
     gl_cv_func_mbrtowc,
     [AC_LINK_IFELSE(
        [AC_LANG_PROGRAM(
-            [[#include <wchar.h>]],
+            [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                 included before <wchar.h>.
+                 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                 must be included before <wchar.h>.  */
+              #include <stddef.h>
+              #include <stdio.h>
+              #include <time.h>
+              #include <wchar.h>]],
             [[wchar_t wc;
               char const s[] = "";
               size_t n = 1;
@@ -25,7 +566,7 @@
        gl_cv_func_mbrtowc=yes,
        gl_cv_func_mbrtowc=no)])
   if test $gl_cv_func_mbrtowc = yes; then
-    AC_DEFINE([HAVE_MBRTOWC], 1,
+    AC_DEFINE([HAVE_MBRTOWC], [1],
       [Define to 1 if mbrtowc and mbstate_t are properly declared.])
   fi
 ])
diff --git a/m4/mbsinit.m4 b/m4/mbsinit.m4
new file mode 100644
index 0000000..da56c3d
--- /dev/null
+++ b/m4/mbsinit.m4
@@ -0,0 +1,51 @@
+# mbsinit.m4 serial 8
+dnl Copyright (C) 2008, 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MBSINIT],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  gl_MBSTATE_T_BROKEN
+
+  AC_CHECK_FUNCS_ONCE([mbsinit])
+  if test $ac_cv_func_mbsinit = no; then
+    HAVE_MBSINIT=0
+    AC_CHECK_DECLS([mbsinit],,, [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+]])
+    if test $ac_cv_have_decl_mbsinit = yes; then
+      dnl On Minix 3.1.8, the system's <wchar.h> declares mbsinit() although
+      dnl it does not have the function. Avoid a collision with gnulib's
+      dnl replacement.
+      REPLACE_MBSINIT=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBSINIT=1
+    else
+      dnl On mingw, mbsinit() always returns 1, which is inappropriate for
+      dnl states produced by mbrtowc() for an incomplete multibyte character
+      dnl in multibyte locales.
+      case "$host_os" in
+        mingw*) REPLACE_MBSINIT=1 ;;
+      esac
+    fi
+  fi
+])
+
+# Prerequisites of lib/mbsinit.c.
+AC_DEFUN([gl_PREREQ_MBSINIT], [
+  :
+])
diff --git a/m4/mbstate_t.m4 b/m4/mbstate_t.m4
index df2a275..61a8190 100644
--- a/m4/mbstate_t.m4
+++ b/m4/mbstate_t.m4
@@ -1,5 +1,5 @@
-# mbstate_t.m4 serial 9
-dnl Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+# mbstate_t.m4 serial 13
+dnl Copyright (C) 2000-2002, 2008-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -13,18 +13,29 @@
 # AC_TYPE_MBSTATE_T
 # -----------------
 AC_DEFUN([AC_TYPE_MBSTATE_T],
-  [AC_CACHE_CHECK([for mbstate_t], ac_cv_type_mbstate_t,
+[
+   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11
+
+   AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t],
      [AC_COMPILE_IFELSE(
-	[AC_LANG_PROGRAM(
-	   [AC_INCLUDES_DEFAULT
-#	    include <wchar.h>],
-	   [mbstate_t x; return sizeof x;])],
-	[ac_cv_type_mbstate_t=yes],
-	[ac_cv_type_mbstate_t=no])])
+        [AC_LANG_PROGRAM(
+           [AC_INCLUDES_DEFAULT[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>]],
+           [[mbstate_t x; return sizeof x;]])],
+        [ac_cv_type_mbstate_t=yes],
+        [ac_cv_type_mbstate_t=no])])
    if test $ac_cv_type_mbstate_t = yes; then
-     AC_DEFINE([HAVE_MBSTATE_T], 1,
-	       [Define to 1 if <wchar.h> declares mbstate_t.])
+     AC_DEFINE([HAVE_MBSTATE_T], [1],
+               [Define to 1 if <wchar.h> declares mbstate_t.])
    else
-     AC_DEFINE([mbstate_t], int,
-	       [Define to a type if <wchar.h> does not define.])
-   fi])
+     AC_DEFINE([mbstate_t], [int],
+               [Define to a type if <wchar.h> does not define.])
+   fi
+])
diff --git a/m4/mbswidth.m4 b/m4/mbswidth.m4
index 878e531..e5d0457 100644
--- a/m4/mbswidth.m4
+++ b/m4/mbswidth.m4
@@ -1,5 +1,5 @@
-# mbswidth.m4 serial 11
-dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+# mbswidth.m4 serial 18
+dnl Copyright (C) 2000-2002, 2004, 2006-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -9,50 +9,37 @@
 
 AC_DEFUN([gl_MBSWIDTH],
 [
-  AC_CHECK_HEADERS_ONCE(wchar.h wctype.h)
-  AC_CHECK_FUNCS_ONCE(isascii iswprint mbsinit)
-  AC_CHECK_FUNCS(iswcntrl wcwidth)
-  gl_FUNC_MBRTOWC
-
-  AC_CACHE_CHECK([whether wcwidth is declared], ac_cv_have_decl_wcwidth,
-    [AC_TRY_COMPILE([
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#if HAVE_STRING_H
-# include <string.h>
-#endif
-#if HAVE_WCHAR_H
-# include <wchar.h>
-#endif
-], [
-#ifndef wcwidth
-  char *p = (char *) wcwidth;
-#endif
-], ac_cv_have_decl_wcwidth=yes, ac_cv_have_decl_wcwidth=no)])
-  if test $ac_cv_have_decl_wcwidth = yes; then
-    ac_val=1
-  else
-    ac_val=0
-  fi
-  AC_DEFINE_UNQUOTED(HAVE_DECL_WCWIDTH, $ac_val,
-    [Define to 1 if you have the declaration of wcwidth(), and to 0 otherwise.])
+  AC_CHECK_HEADERS_ONCE([wchar.h])
+  AC_CHECK_FUNCS_ONCE([isascii mbsinit])
 
   dnl UnixWare 7.1.1 <wchar.h> has a declaration of a function mbswidth()
   dnl that clashes with ours.
   AC_CACHE_CHECK([whether mbswidth is declared in <wchar.h>],
-    ac_cv_have_decl_mbswidth,
-    [AC_TRY_COMPILE([
-#if HAVE_WCHAR_H
-# include <wchar.h>
-#endif
-], [
+    [ac_cv_have_decl_mbswidth],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+          ]],
+          [[
   char *p = (char *) mbswidth;
-], ac_cv_have_decl_mbswidth=yes, ac_cv_have_decl_mbswidth=no)])
+  return !p;
+          ]])],
+       [ac_cv_have_decl_mbswidth=yes],
+       [ac_cv_have_decl_mbswidth=no])])
   if test $ac_cv_have_decl_mbswidth = yes; then
     ac_val=1
   else
     ac_val=0
   fi
-  AC_DEFINE_UNQUOTED(HAVE_DECL_MBSWIDTH_IN_WCHAR_H, $ac_val,
+  AC_DEFINE_UNQUOTED([HAVE_DECL_MBSWIDTH_IN_WCHAR_H], [$ac_val],
     [Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0 otherwise.])
 
   AC_TYPE_MBSTATE_T
diff --git a/m4/memchr.m4 b/m4/memchr.m4
new file mode 100644
index 0000000..0040294
--- /dev/null
+++ b/m4/memchr.m4
@@ -0,0 +1,88 @@
+# memchr.m4 serial 12
+dnl Copyright (C) 2002-2004, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
+[
+  dnl Check for prerequisites for memory fence checks.
+  gl_FUNC_MMAP_ANON
+  AC_CHECK_HEADERS_ONCE([sys/mman.h])
+  AC_CHECK_FUNCS_ONCE([mprotect])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [
+    dnl These days, we assume memchr is present.  But if support for old
+    dnl platforms is desired:
+    AC_CHECK_FUNCS_ONCE([memchr])
+    if test $ac_cv_func_memchr = no; then
+      HAVE_MEMCHR=0
+    fi
+  ])
+  if test $HAVE_MEMCHR = 1; then
+    # Detect platform-specific bugs in some versions of glibc:
+    # memchr should not dereference anything with length 0
+    #   http://bugzilla.redhat.com/499689
+    # memchr should not dereference overestimated length after a match
+    #   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   http://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # Assume that memchr works on platforms that lack mprotect.
+    AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+#  define MAP_FILE 0
+# endif
+#endif
+]], [[
+  int result = 0;
+  char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+  const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+  const int flags = MAP_FILE | MAP_PRIVATE;
+  int fd = open ("/dev/zero", O_RDONLY, 0666);
+  if (fd >= 0)
+# endif
+    {
+      int pagesize = getpagesize ();
+      char *two_pages =
+        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                       flags, fd, 0);
+      if (two_pages != (char *)(-1)
+          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+        fence = two_pages + pagesize;
+    }
+#endif
+  if (fence)
+    {
+      if (memchr (fence, 0, 0))
+        result |= 1;
+      strcpy (fence - 9, "12345678");
+      if (memchr (fence - 9, 0, 79) != fence - 1)
+        result |= 2;
+      if (memchr (fence - 1, 0, 3) != fence - 1)
+        result |= 4;
+    }
+  return result;
+]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no],
+      [dnl Be pessimistic for now.
+       gl_cv_func_memchr_works="guessing no"])])
+    if test "$gl_cv_func_memchr_works" != yes; then
+      REPLACE_MEMCHR=1
+    fi
+  fi
+])
+
+# Prerequisites of lib/memchr.c.
+AC_DEFUN([gl_PREREQ_MEMCHR], [
+  AC_CHECK_HEADERS([bp-sym.h])
+])
diff --git a/m4/mmap-anon.m4 b/m4/mmap-anon.m4
new file mode 100644
index 0000000..748b17d
--- /dev/null
+++ b/m4/mmap-anon.m4
@@ -0,0 +1,55 @@
+# mmap-anon.m4 serial 10
+dnl Copyright (C) 2005, 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Detect how mmap can be used to create anonymous (not file-backed) memory
+# mappings.
+# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS
+#   and MAP_ANON exist and have the same value.
+# - On HP-UX, only MAP_ANONYMOUS exists.
+# - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists.
+# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
+#   used.
+
+AC_DEFUN([gl_FUNC_MMAP_ANON],
+[
+  dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+  # irrelevant for anonymous mappings.
+  AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no])
+
+  # Try to allow MAP_ANONYMOUS.
+  gl_have_mmap_anonymous=no
+  if test $gl_have_mmap = yes; then
+    AC_MSG_CHECKING([for MAP_ANONYMOUS])
+    AC_EGREP_CPP([I cannot identify this map], [
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+    I cannot identify this map
+#endif
+],
+      [gl_have_mmap_anonymous=yes])
+    if test $gl_have_mmap_anonymous != yes; then
+      AC_EGREP_CPP([I cannot identify this map], [
+#include <sys/mman.h>
+#ifdef MAP_ANON
+    I cannot identify this map
+#endif
+],
+        [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON],
+          [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.])
+         gl_have_mmap_anonymous=yes])
+    fi
+    AC_MSG_RESULT([$gl_have_mmap_anonymous])
+    if test $gl_have_mmap_anonymous = yes; then
+      AC_DEFINE([HAVE_MAP_ANONYMOUS], [1],
+        [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+         config.h and <sys/mman.h>.])
+    fi
+  fi
+])
diff --git a/m4/mode_t.m4 b/m4/mode_t.m4
new file mode 100644
index 0000000..40f612a
--- /dev/null
+++ b/m4/mode_t.m4
@@ -0,0 +1,26 @@
+# mode_t.m4 serial 2
+dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# For using mode_t, it's sufficient to use AC_TYPE_MODE_T and
+# include <sys/types.h>.
+
+# Define PROMOTED_MODE_T to the type that is the result of "default argument
+# promotion" (ISO C 6.5.2.2.(6)) of the type mode_t.
+AC_DEFUN([gl_PROMOTED_TYPE_MODE_T],
+[
+  AC_REQUIRE([AC_TYPE_MODE_T])
+  AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [
+    dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int',
+    dnl and to itself otherwise. This assumption is not guaranteed by the ISO C
+    dnl standard, but we don't know of any real-world counterexamples.
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]],
+      [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])],
+      [gl_cv_promoted_mode_t='int'],
+      [gl_cv_promoted_mode_t='mode_t'])
+  ])
+  AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t],
+    [Define to the type that is the result of default argument promotions of type mode_t.])
+])
diff --git a/m4/msvc-inval.m4 b/m4/msvc-inval.m4
new file mode 100644
index 0000000..8db4617
--- /dev/null
+++ b/m4/msvc-inval.m4
@@ -0,0 +1,19 @@
+# msvc-inval.m4 serial 1
+dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_MSVC_INVAL],
+[
+  AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler])
+  if test $ac_cv_func__set_invalid_parameter_handler = yes; then
+    HAVE_MSVC_INVALID_PARAMETER_HANDLER=1
+    AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1],
+      [Define to 1 on MSVC platforms that have the "invalid parameter handler"
+       concept.])
+  else
+    HAVE_MSVC_INVALID_PARAMETER_HANDLER=0
+  fi
+  AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER])
+])
diff --git a/m4/msvc-nothrow.m4 b/m4/msvc-nothrow.m4
new file mode 100644
index 0000000..0125050
--- /dev/null
+++ b/m4/msvc-nothrow.m4
@@ -0,0 +1,10 @@
+# msvc-nothrow.m4 serial 1
+dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_MSVC_NOTHROW],
+[
+  AC_REQUIRE([gl_MSVC_INVAL])
+])
diff --git a/m4/multiarch.m4 b/m4/multiarch.m4
new file mode 100644
index 0000000..0c288b8
--- /dev/null
+++ b/m4/multiarch.m4
@@ -0,0 +1,62 @@
+# multiarch.m4 serial 7
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Determine whether the compiler is or may be producing universal binaries.
+#
+# On Mac OS X 10.5 and later systems, the user can create libraries and
+# executables that work on multiple system types--known as "fat" or
+# "universal" binaries--by specifying multiple '-arch' options to the
+# compiler but only a single '-arch' option to the preprocessor.  Like
+# this:
+#
+#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+#                 CPP="gcc -E" CXXCPP="g++ -E"
+#
+# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly.
+
+AC_DEFUN_ONCE([gl_MULTIARCH],
+[
+  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
+  gl_cv_c_multiarch=no
+  AC_COMPILE_IFELSE(
+    [AC_LANG_SOURCE(
+      [[#ifndef __APPLE_CC__
+         not a universal capable compiler
+        #endif
+        typedef int dummy;
+      ]])],
+    [
+     dnl Check for potential -arch flags.  It is not universal unless
+     dnl there are at least two -arch flags with different values.
+     arch=
+     prev=
+     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+       if test -n "$prev"; then
+         case $word in
+           i?86 | x86_64 | ppc | ppc64)
+             if test -z "$arch" || test "$arch" = "$word"; then
+               arch="$word"
+             else
+               gl_cv_c_multiarch=yes
+             fi
+             ;;
+         esac
+         prev=
+       else
+         if test "x$word" = "x-arch"; then
+           prev=arch
+         fi
+       fi
+     done
+    ])
+  if test $gl_cv_c_multiarch = yes; then
+    APPLE_UNIVERSAL_BUILD=1
+  else
+    APPLE_UNIVERSAL_BUILD=0
+  fi
+  AC_SUBST([APPLE_UNIVERSAL_BUILD])
+])
diff --git a/m4/nls.m4 b/m4/nls.m4
index 2082c3b..0866677 100644
--- a/m4/nls.m4
+++ b/m4/nls.m4
@@ -1,5 +1,6 @@
-# nls.m4 serial 2 (gettext-0.14.3)
-dnl Copyright (C) 1995-2003, 2005 Free Software Foundation, Inc.
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2012 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -17,35 +18,15 @@
 dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
 dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
 
-AC_PREREQ(2.50)
+AC_PREREQ([2.50])
 
 AC_DEFUN([AM_NLS],
 [
   AC_MSG_CHECKING([whether NLS is requested])
   dnl Default is enabled NLS
-  AC_ARG_ENABLE(nls,
+  AC_ARG_ENABLE([nls],
     [  --disable-nls           do not use Native Language Support],
     USE_NLS=$enableval, USE_NLS=yes)
-  AC_MSG_RESULT($USE_NLS)
-  AC_SUBST(USE_NLS)
-])
-
-AC_DEFUN([AM_MKINSTALLDIRS],
-[
-  dnl Tell automake >= 1.10 to complain if mkinstalldirs is missing.
-  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([mkinstalldirs])])
-  dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
-  dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
-  dnl Try to locate it.
-  MKINSTALLDIRS=
-  if test -n "$ac_aux_dir"; then
-    case "$ac_aux_dir" in
-      /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
-      *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
-    esac
-  fi
-  if test -z "$MKINSTALLDIRS"; then
-    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-  fi
-  AC_SUBST(MKINSTALLDIRS)
+  AC_MSG_RESULT([$USE_NLS])
+  AC_SUBST([USE_NLS])
 ])
diff --git a/m4/nocrash.m4 b/m4/nocrash.m4
new file mode 100644
index 0000000..c2638df
--- /dev/null
+++ b/m4/nocrash.m4
@@ -0,0 +1,130 @@
+# nocrash.m4 serial 4
+dnl Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini.
+
+AC_PREREQ([2.13])
+
+dnl Expands to some code for use in .c programs that will cause the configure
+dnl test to exit instead of crashing. This is useful to avoid triggering
+dnl action from a background debugger and to avoid core dumps.
+dnl Usage:   ...
+dnl          ]GL_NOCRASH[
+dnl          ...
+dnl          int main() { nocrash_init(); ... }
+AC_DEFUN([GL_NOCRASH],[[
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X.  */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens.  */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+   EXC_BAD_ACCESS.  */
+static void *
+mach_exception_thread (void *arg)
+{
+  /* Buffer for a message to be received.  */
+  struct {
+    mach_msg_header_t head;
+    mach_msg_body_t msgh_body;
+    char data[1024];
+  } msg;
+  mach_msg_return_t retval;
+  /* Wait for a message on the exception port.  */
+  retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+                     our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+  if (retval != MACH_MSG_SUCCESS)
+    abort ();
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+  mach_port_t self = mach_task_self ();
+  /* Allocate a port on which the thread shall listen for exceptions.  */
+  if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+      == KERN_SUCCESS) {
+    /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html.  */
+    if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+                                MACH_MSG_TYPE_MAKE_SEND)
+        == KERN_SUCCESS) {
+      /* The exceptions we want to catch.  Only EXC_BAD_ACCESS is interesting
+         for us.  */
+      exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+      /* Create the thread listening on the exception port.  */
+      pthread_attr_t attr;
+      pthread_t thread;
+      if (pthread_attr_init (&attr) == 0
+          && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+          && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+        pthread_attr_destroy (&attr);
+        /* Replace the exception port info for these exceptions with our own.
+           Note that we replace the exception port for the entire task, not only
+           for a particular thread.  This has the effect that when our exception
+           port gets the message, the thread specific exception port has already
+           been asked, and we don't need to bother about it.
+           See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html.  */
+        task_set_exception_ports (self, mask, our_exception_port,
+                                  EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+      }
+    }
+  }
+}
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Avoid a crash on native Windows.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+  switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+    {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_IN_PAGE_ERROR:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_GUARD_PAGE:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      exit (1);
+    }
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+  SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems.  */
+#include <signal.h>
+/* A POSIX signal handler.  */
+static void
+exception_handler (int sig)
+{
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+  signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+  signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+]])
diff --git a/m4/obstack-printf.m4 b/m4/obstack-printf.m4
new file mode 100644
index 0000000..a57513e
--- /dev/null
+++ b/m4/obstack-printf.m4
@@ -0,0 +1,41 @@
+# obstack-printf.m4 serial 4
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Eric Blake.
+dnl Test whether obstack_printf() exists.  For now, we assume that
+dnl obstack_vprintf behaves identically, so we only test for one.
+
+AC_DEFUN([gl_FUNC_OBSTACK_PRINTF],
+[
+  dnl Persuade glibc <stdio.h> to declare obstack_printf(), obstack_vprintf().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([obstack_printf])
+  if test $ac_cv_func_obstack_printf = no ; then
+    gl_REPLACE_OBSTACK_PRINTF
+  fi
+
+  gl_DECL_OBSTACK_PRINTF
+])
+
+AC_DEFUN([gl_REPLACE_OBSTACK_PRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  if test $ac_cv_func_obstack_printf = yes; then
+    REPLACE_OBSTACK_PRINTF=1
+  fi
+])
+
+dnl Ensure obstack_printf() and obstack_vprintf() are declared
+dnl (whether or not they are being replaced).
+AC_DEFUN([gl_DECL_OBSTACK_PRINTF],
+[
+  AC_CHECK_DECLS_ONCE([obstack_printf])
+  if test $ac_cv_have_decl_obstack_printf = no; then
+    HAVE_DECL_OBSTACK_PRINTF=0
+  fi
+])
diff --git a/m4/obstack.m4 b/m4/obstack.m4
deleted file mode 100644
index ea60f7f..0000000
--- a/m4/obstack.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-# obstack.m4 serial 4
-dnl Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_OBSTACK],
-[
-  AC_FUNC_OBSTACK
-  dnl Note: AC_FUNC_OBSTACK does AC_LIBSOURCES([obstack.h, obstack.c]).
-  if test $ac_cv_func_obstack = no; then
-    gl_PREREQ_OBSTACK
-  fi
-])
-
-# Prerequisites of lib/obstack.c.
-AC_DEFUN([gl_PREREQ_OBSTACK],
-[
-  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
-  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])
-  :
-])
diff --git a/m4/off_t.m4 b/m4/off_t.m4
new file mode 100644
index 0000000..dfca2df
--- /dev/null
+++ b/m4/off_t.m4
@@ -0,0 +1,18 @@
+# off_t.m4 serial 1
+dnl Copyright (C) 2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check whether to override the 'off_t' type.
+dnl Set WINDOWS_64_BIT_OFF_T.
+
+AC_DEFUN([gl_TYPE_OFF_T],
+[
+  m4_ifdef([gl_LARGEFILE], [
+    AC_REQUIRE([gl_LARGEFILE])
+  ], [
+    WINDOWS_64_BIT_OFF_T=0
+  ])
+  AC_SUBST([WINDOWS_64_BIT_OFF_T])
+])
diff --git a/m4/onceonly.m4 b/m4/onceonly.m4
deleted file mode 100644
index 14d3c0b..0000000
--- a/m4/onceonly.m4
+++ /dev/null
@@ -1,86 +0,0 @@
-# onceonly_2_57.m4 serial 3
-dnl Copyright (C) 2002-2003, 2005 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License.  As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl This file defines some "once only" variants of standard autoconf macros.
-dnl   AC_CHECK_HEADERS_ONCE         like  AC_CHECK_HEADERS
-dnl   AC_CHECK_FUNCS_ONCE           like  AC_CHECK_FUNCS
-dnl   AC_CHECK_DECLS_ONCE           like  AC_CHECK_DECLS
-dnl   AC_REQUIRE([AC_HEADER_STDC])  like  AC_HEADER_STDC
-dnl The advantage is that the check for each of the headers/functions/decls
-dnl will be put only once into the 'configure' file. It keeps the size of
-dnl the 'configure' file down, and avoids redundant output when 'configure'
-dnl is run.
-dnl The drawback is that the checks cannot be conditionalized. If you write
-dnl   if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
-dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
-dnl empty, and the check will be inserted before the body of the AC_DEFUNed
-dnl function.
-
-dnl This is like onceonly.m4, except that it uses diversions to named sections
-dnl DEFAULTS and INIT_PREPARE in order to check all requested headers at once,
-dnl thus reducing the size of 'configure'. Works with autoconf-2.57. The
-dnl size reduction is ca. 9%.
-
-dnl Autoconf version 2.57 or newer is recommended.
-AC_PREREQ(2.57)
-
-# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
-# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
-AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
-  :
-  AC_FOREACH([gl_HEADER_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
-                                                 [./-], [___])), [
-      m4_divert_text([INIT_PREPARE],
-        [gl_header_list="$gl_header_list gl_HEADER_NAME"])
-      gl_HEADERS_EXPANSION
-      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])),
-        [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.])
-    ])
-    AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
-                                                   [./-], [___])))
-  ])
-])
-m4_define([gl_HEADERS_EXPANSION], [
-  m4_divert_text([DEFAULTS], [gl_header_list=])
-  AC_CHECK_HEADERS([$gl_header_list])
-  m4_define([gl_HEADERS_EXPANSION], [])
-])
-
-# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
-# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
-AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
-  :
-  AC_FOREACH([gl_FUNC_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [
-      m4_divert_text([INIT_PREPARE],
-        [gl_func_list="$gl_func_list gl_FUNC_NAME"])
-      gl_FUNCS_EXPANSION
-      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])),
-        [Define to 1 if you have the `]m4_defn([gl_FUNC_NAME])[' function.])
-    ])
-    AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]))
-  ])
-])
-m4_define([gl_FUNCS_EXPANSION], [
-  m4_divert_text([DEFAULTS], [gl_func_list=])
-  AC_CHECK_FUNCS([$gl_func_list])
-  m4_define([gl_FUNCS_EXPANSION], [])
-])
-
-# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
-# AC_CHECK_DECLS(DECL1, DECL2, ...).
-AC_DEFUN([AC_CHECK_DECLS_ONCE], [
-  :
-  AC_FOREACH([gl_DECL_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [
-      AC_CHECK_DECLS(m4_defn([gl_DECL_NAME]))
-    ])
-    AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]))
-  ])
-])
diff --git a/m4/open.m4 b/m4/open.m4
new file mode 100644
index 0000000..2577a22
--- /dev/null
+++ b/m4/open.m4
@@ -0,0 +1,91 @@
+# open.m4 serial 14
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_OPEN],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  case "$host_os" in
+    mingw* | pw*)
+      REPLACE_OPEN=1
+      ;;
+    *)
+      dnl open("foo/") should not create a file when the file name has a
+      dnl trailing slash.  FreeBSD only has the problem on symlinks.
+      AC_CHECK_FUNCS_ONCE([lstat])
+      AC_CACHE_CHECK([whether open recognizes a trailing slash],
+        [gl_cv_func_open_slash],
+        [# Assume that if we have lstat, we can also check symlinks.
+          if test $ac_cv_func_lstat = yes; then
+            touch conftest.tmp
+            ln -s conftest.tmp conftest.lnk
+          fi
+          AC_RUN_IFELSE(
+            [AC_LANG_SOURCE([[
+#include <fcntl.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+int main ()
+{
+  int result = 0;
+#if HAVE_LSTAT
+  if (open ("conftest.lnk/", O_RDONLY) != -1)
+    result |= 1;
+#endif
+  if (open ("conftest.sl/", O_CREAT, 0600) >= 0)
+    result |= 2;
+  return result;
+}]])],
+            [gl_cv_func_open_slash=yes],
+            [gl_cv_func_open_slash=no],
+            [
+changequote(,)dnl
+             case "$host_os" in
+               freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*)
+                 gl_cv_func_open_slash="guessing no" ;;
+               *)
+                 gl_cv_func_open_slash="guessing yes" ;;
+             esac
+changequote([,])dnl
+            ])
+          rm -f conftest.sl conftest.tmp conftest.lnk
+        ])
+      case "$gl_cv_func_open_slash" in
+        *no)
+          AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1],
+            [Define to 1 if open() fails to recognize a trailing slash.])
+          REPLACE_OPEN=1
+          ;;
+      esac
+      ;;
+  esac
+  dnl Replace open() for supporting the gnulib-defined fchdir() function,
+  dnl to keep fchdir's bookkeeping up-to-date.
+  m4_ifdef([gl_FUNC_FCHDIR], [
+    if test $REPLACE_OPEN = 0; then
+      gl_TEST_FCHDIR
+      if test $HAVE_FCHDIR = 0; then
+        REPLACE_OPEN=1
+      fi
+    fi
+  ])
+  dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag.
+  m4_ifdef([gl_NONBLOCKING_IO], [
+    if test $REPLACE_OPEN = 0; then
+      gl_NONBLOCKING_IO
+      if test $gl_cv_have_open_O_NONBLOCK != yes; then
+        REPLACE_OPEN=1
+      fi
+    fi
+  ])
+])
+
+# Prerequisites of lib/open.c.
+AC_DEFUN([gl_PREREQ_OPEN],
+[
+  AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T])
+  :
+])
diff --git a/m4/pathmax.m4 b/m4/pathmax.m4
new file mode 100644
index 0000000..0117861
--- /dev/null
+++ b/m4/pathmax.m4
@@ -0,0 +1,42 @@
+# pathmax.m4 serial 10
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_PATHMAX],
+[
+  dnl Prerequisites of lib/pathmax.h.
+  AC_CHECK_HEADERS_ONCE([sys/param.h])
+])
+
+# Expands to a piece of C program that defines PATH_MAX in the same way as
+# "pathmax.h" will do.
+AC_DEFUN([gl_PATHMAX_SNIPPET], [[
+/* Arrange to define PATH_MAX, like "pathmax.h" does. */
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#include <limits.h>
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+#ifdef __hpux
+# undef PATH_MAX
+# define PATH_MAX 1024
+#endif
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# undef PATH_MAX
+# define PATH_MAX 260
+#endif
+]])
+
+# Prerequisites of gl_PATHMAX_SNIPPET.
+AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ],
+[
+  AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h])
+])
diff --git a/m4/perror.m4 b/m4/perror.m4
new file mode 100644
index 0000000..369a824
--- /dev/null
+++ b/m4/perror.m4
@@ -0,0 +1,63 @@
+# perror.m4 serial 6
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_PERROR],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_REQUIRE([gl_HEADER_ERRNO_H])
+  AC_REQUIRE([gl_FUNC_STRERROR_R])
+  AC_REQUIRE([gl_FUNC_STRERROR_0])
+  dnl We intentionally do not check for the broader REPLACE_STRERROR_R,
+  dnl since on glibc systems, strerror_r is replaced only for signature
+  dnl issues, and perror is just fine.  Rather, we only want to
+  dnl replace perror if strerror_r was replaced for a content fix.
+  if test "$ERRNO_H:$REPLACE_STRERROR_0" != :0; then
+    dnl The system's perror() cannot know about the new errno values we add
+    dnl to <errno.h>, or any fix for strerror(0). Replace it.
+    REPLACE_PERROR=1
+  fi
+  case ${gl_cv_func_strerror_r_works-unset} in
+    unset|*yes)
+      AC_CACHE_CHECK([whether perror matches strerror],
+        [gl_cv_func_perror_works],
+        [AC_RUN_IFELSE(
+           [AC_LANG_PROGRAM(
+              [[#include <errno.h>
+                #include <stdio.h>
+                #include <stdlib.h>
+                #include <string.h>
+              ]],
+              [[char *str = strerror (-1);
+                if (!getenv("CONFTEST_OUTPUT")) return 0;
+                if (!str) str = "";
+                puts (str);
+                errno = -1;
+                perror ("");
+                return 0;
+              ]])],
+           [if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \
+               && cmp conftest.txt1 conftest.txt2 >/dev/null; then
+              gl_cv_func_perror_works=yes
+            else
+              gl_cv_func_perror_works=no
+            fi
+            rm -rf conftest.txt1 conftest.txt2],
+           [gl_cv_func_perror_works=no],
+           [dnl Guess no when cross-compiling.
+            gl_cv_func_perror_works="guessing no"
+           ])
+        ])
+      if test "$gl_cv_func_perror_works" != yes; then
+        REPLACE_PERROR=1
+      fi
+      ;;
+    *)
+      dnl The system's perror() probably inherits the bugs in the
+      dnl system's strerror_r(). Replace it.
+      REPLACE_PERROR=1
+      ;;
+  esac
+])
diff --git a/m4/pipe2.m4 b/m4/pipe2.m4
new file mode 100644
index 0000000..00ad82b
--- /dev/null
+++ b/m4/pipe2.m4
@@ -0,0 +1,18 @@
+# pipe2.m4 serial 2
+dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_PIPE2],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+
+  dnl Persuade glibc <unistd.h> to declare pipe2().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_CHECK_FUNCS_ONCE([pipe2])
+  if test $ac_cv_func_pipe2 != yes; then
+    HAVE_PIPE2=0
+  fi
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644
index 0000000..05d8f7b
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,452 @@
+# po.m4 serial 17b
+dnl Copyright (C) 1995-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AM_NLS])dnl
+
+  dnl Release version of the gettext macros. This is used to ensure that
+  dnl the gettext macros and po/Makefile.in.in are in sync.
+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+
+  dnl Perform the following tests also if --disable-nls has been given,
+  dnl because they are needed for "make dist" to work.
+
+  dnl Search for GNU msgfmt in the PATH.
+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+  dnl The second test excludes FreeBSD msgfmt.
+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+  dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([GMSGFMT_015])
+
+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+  dnl The second test excludes FreeBSD xgettext.
+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  dnl Remove leftover from FreeBSD xgettext call.
+  rm -f messages.po
+
+  dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([XGETTEXT_015])
+
+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+  dnl Installation directories.
+  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+  dnl have to define it here, so that it can be used in po/Makefile.
+  test -n "$localedir" || localedir='${datadir}/locale'
+  AC_SUBST([localedir])
+
+  dnl Support for AM_XGETTEXT_OPTION.
+  test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+  AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+  AC_CONFIG_COMMANDS([po-directories], [[
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          gt_tab=`printf '\t'`
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assignment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assignment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done]],
+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+  # When this code is run, in config.status, two variables have already been
+  # set:
+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+  # - LINGUAS is the value of the environment variable LINGUAS at configure
+  #   time.
+
+changequote(,)dnl
+  # Adjust a relative srcdir.
+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+  # In autoconf-2.13 it is called $ac_given_srcdir.
+  # In autoconf-2.50 it is called $srcdir.
+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+  case "$ac_given_srcdir" in
+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+    /*) top_srcdir="$ac_given_srcdir" ;;
+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  # Find a way to echo strings without interpreting backslash.
+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+    gt_echo='echo'
+  else
+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+      gt_echo='printf %s\n'
+    else
+      echo_func () {
+        cat <<EOT
+$*
+EOT
+      }
+      gt_echo='echo_func'
+    fi
+  fi
+
+  # A sed script that extracts the value of VARIABLE from a Makefile.
+  tab=`printf '\t'`
+  sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{
+  # Seen the first line of the variable definition.
+  s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=//
+  ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+  # Set POTFILES to the value of the Makefile variable POTFILES.
+  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+  # Compute POTFILES_DEPS as
+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+  POTFILES_DEPS=
+  for file in $POTFILES; do
+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+  done
+  POMAKEFILEDEPS=""
+
+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+  fi
+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+    # The LINGUAS file contains the set of available languages.
+    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+  else
+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+  fi
+  # Hide the ALL_LINGUAS assignment from automake < 1.5.
+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+  # Compute POFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+  # Compute UPDATEPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+  # Compute DUMMYPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+  # Compute GMOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+  # Compute PROPERTIESFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # Compute CLASSFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # Compute QMFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+  # Compute MSGFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+  # Compute RESOURCESDLLFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+  case "$ac_given_srcdir" in
+    .) srcdirpre= ;;
+    *) srcdirpre='$(srcdir)/' ;;
+  esac
+  POFILES=
+  UPDATEPOFILES=
+  DUMMYPOFILES=
+  GMOFILES=
+  PROPERTIESFILES=
+  CLASSFILES=
+  QMFILES=
+  MSGFILES=
+  RESOURCESDLLFILES=
+  for lang in $ALL_LINGUAS; do
+    POFILES="$POFILES $srcdirpre$lang.po"
+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    QMFILES="$QMFILES $srcdirpre$lang.qm"
+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+  done
+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
+  # environment variable.
+  INST_LINGUAS=
+  if test -n "$ALL_LINGUAS"; then
+    for presentlang in $ALL_LINGUAS; do
+      useit=no
+      if test "%UNSET%" != "$LINGUAS"; then
+        desiredlanguages="$LINGUAS"
+      else
+        desiredlanguages="$ALL_LINGUAS"
+      fi
+      for desiredlang in $desiredlanguages; do
+        # Use the presentlang catalog if desiredlang is
+        #   a. equal to presentlang, or
+        #   b. a variant of presentlang (because in this case,
+        #      presentlang can be used as a fallback for messages
+        #      which are not translated in the desiredlang catalog).
+        case "$desiredlang" in
+          "$presentlang"*) useit=yes;;
+        esac
+      done
+      if test $useit = yes; then
+        INST_LINGUAS="$INST_LINGUAS $presentlang"
+      fi
+    done
+  fi
+  CATALOGS=
+  JAVACATALOGS=
+  QTCATALOGS=
+  TCLCATALOGS=
+  CSHARPCATALOGS=
+  if test -n "$INST_LINGUAS"; then
+    for lang in $INST_LINGUAS; do
+      CATALOGS="$CATALOGS $lang.gmo"
+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+      QTCATALOGS="$QTCATALOGS $lang.qm"
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+    done
+  fi
+
+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+  tab=`printf '\t'`
+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if test -n "$POMAKEFILEDEPS"; then
+    cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+  fi
+  mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+  XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+  AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/m4/po_gl.m4 b/m4/po_gl.m4
deleted file mode 100644
index f2795ee..0000000
--- a/m4/po_gl.m4
+++ /dev/null
@@ -1,429 +0,0 @@
-# po.m4 serial 7 (gettext-0.14.3)
-dnl Copyright (C) 1995-2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-AC_PREREQ(2.50)
-
-dnl Checks for all prerequisites of the po subdirectory.
-AC_DEFUN([AM_PO_SUBDIRS],
-[
-  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-  AC_REQUIRE([AC_PROG_INSTALL])dnl
-  AC_REQUIRE([AM_MKINSTALLDIRS])dnl
-  AC_REQUIRE([AM_NLS])dnl
-
-  dnl Perform the following tests also if --disable-nls has been given,
-  dnl because they are needed for "make dist" to work.
-
-  dnl Search for GNU msgfmt in the PATH.
-  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
-  dnl The second test excludes FreeBSD msgfmt.
-  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
-     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
-    :)
-  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-
-  dnl Search for GNU xgettext 0.12 or newer in the PATH.
-  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
-  dnl The second test excludes FreeBSD xgettext.
-  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
-     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
-    :)
-  dnl Remove leftover from FreeBSD xgettext call.
-  rm -f messages.po
-
-  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
-  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
-    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
-
-  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
-  dnl Test whether we really found GNU msgfmt.
-  if test "$GMSGFMT" != ":"; then
-    dnl If it is no GNU msgfmt we define it as : so that the
-    dnl Makefiles still can work.
-    if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
-       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
-      : ;
-    else
-      GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
-      AC_MSG_RESULT(
-        [found $GMSGFMT program is not GNU msgfmt; ignore it])
-      GMSGFMT=":"
-    fi
-  fi
-
-  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
-  dnl Test whether we really found GNU xgettext.
-  if test "$XGETTEXT" != ":"; then
-    dnl If it is no GNU xgettext we define it as : so that the
-    dnl Makefiles still can work.
-    if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
-       (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
-      : ;
-    else
-      AC_MSG_RESULT(
-        [found xgettext program is not GNU xgettext; ignore it])
-      XGETTEXT=":"
-    fi
-    dnl Remove leftover from FreeBSD xgettext call.
-    rm -f messages.po
-  fi
-
-  AC_OUTPUT_COMMANDS([
-    for ac_file in $CONFIG_FILES; do
-      # Support "outfile[:infile[:infile...]]"
-      case "$ac_file" in
-        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-      esac
-      # PO directories have a Makefile.in generated from Makefile.in.in.
-      case "$ac_file" in */Makefile.in)
-        # Adjust a relative srcdir.
-        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
-        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
-        # In autoconf-2.13 it is called $ac_given_srcdir.
-        # In autoconf-2.50 it is called $srcdir.
-        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
-        case "$ac_given_srcdir" in
-          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
-          /*) top_srcdir="$ac_given_srcdir" ;;
-          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
-        esac
-        # Treat a directory as a PO directory if and only if it has a
-        # POTFILES.in file. This allows packages to have multiple PO
-        # directories under different names or in different locations.
-        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
-          rm -f "$ac_dir/POTFILES"
-          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
-          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
-          POMAKEFILEDEPS="POTFILES.in"
-          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
-          # on $ac_dir but don't depend on user-specified configuration
-          # parameters.
-          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
-            # The LINGUAS file contains the set of available languages.
-            if test -n "$OBSOLETE_ALL_LINGUAS"; then
-              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
-            fi
-            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-            # Hide the ALL_LINGUAS assigment from automake.
-            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
-            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
-          else
-            # The set of available languages was given in configure.in.
-            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
-          fi
-          # Compute POFILES
-          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
-          # Compute UPDATEPOFILES
-          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
-          # Compute DUMMYPOFILES
-          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
-          # Compute GMOFILES
-          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
-          case "$ac_given_srcdir" in
-            .) srcdirpre= ;;
-            *) srcdirpre='$(srcdir)/' ;;
-          esac
-          POFILES=
-          UPDATEPOFILES=
-          DUMMYPOFILES=
-          GMOFILES=
-          for lang in $ALL_LINGUAS; do
-            POFILES="$POFILES $srcdirpre$lang.po"
-            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
-            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
-            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
-          done
-          # CATALOGS depends on both $ac_dir and the user's LINGUAS
-          # environment variable.
-          INST_LINGUAS=
-          if test -n "$ALL_LINGUAS"; then
-            for presentlang in $ALL_LINGUAS; do
-              useit=no
-              if test "%UNSET%" != "$LINGUAS"; then
-                desiredlanguages="$LINGUAS"
-              else
-                desiredlanguages="$ALL_LINGUAS"
-              fi
-              for desiredlang in $desiredlanguages; do
-                # Use the presentlang catalog if desiredlang is
-                #   a. equal to presentlang, or
-                #   b. a variant of presentlang (because in this case,
-                #      presentlang can be used as a fallback for messages
-                #      which are not translated in the desiredlang catalog).
-                case "$desiredlang" in
-                  "$presentlang"*) useit=yes;;
-                esac
-              done
-              if test $useit = yes; then
-                INST_LINGUAS="$INST_LINGUAS $presentlang"
-              fi
-            done
-          fi
-          CATALOGS=
-          if test -n "$INST_LINGUAS"; then
-            for lang in $INST_LINGUAS; do
-              CATALOGS="$CATALOGS $lang.gmo"
-            done
-          fi
-          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
-          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
-          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
-            if test -f "$f"; then
-              case "$f" in
-                *.orig | *.bak | *~) ;;
-                *) cat "$f" >> "$ac_dir/Makefile" ;;
-              esac
-            fi
-          done
-        fi
-        ;;
-      esac
-    done],
-   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
-    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
-    # from automake.
-    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
-    # Capture the value of LINGUAS because we need it to compute CATALOGS.
-    LINGUAS="${LINGUAS-%UNSET%}"
-   ])
-])
-
-dnl Postprocesses a Makefile in a directory containing PO files.
-AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
-[
-  # When this code is run, in config.status, two variables have already been
-  # set:
-  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
-  # - LINGUAS is the value of the environment variable LINGUAS at configure
-  #   time.
-
-changequote(,)dnl
-  # Adjust a relative srcdir.
-  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
-  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
-  # In autoconf-2.13 it is called $ac_given_srcdir.
-  # In autoconf-2.50 it is called $srcdir.
-  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
-  case "$ac_given_srcdir" in
-    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
-    /*) top_srcdir="$ac_given_srcdir" ;;
-    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
-  esac
-
-  # Find a way to echo strings without interpreting backslash.
-  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
-    gt_echo='echo'
-  else
-    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
-      gt_echo='printf %s\n'
-    else
-      echo_func () {
-        cat <<EOT
-$*
-EOT
-      }
-      gt_echo='echo_func'
-    fi
-  fi
-
-  # A sed script that extracts the value of VARIABLE from a Makefile.
-  sed_x_variable='
-# Test if the hold space is empty.
-x
-s/P/P/
-x
-ta
-# Yes it was empty. Look if we have the expected variable definition.
-/^[	 ]*VARIABLE[	 ]*=/{
-  # Seen the first line of the variable definition.
-  s/^[	 ]*VARIABLE[	 ]*=//
-  ba
-}
-bd
-:a
-# Here we are processing a line from the variable definition.
-# Remove comment, more precisely replace it with a space.
-s/#.*$/ /
-# See if the line ends in a backslash.
-tb
-:b
-s/\\$//
-# Print the line, without the trailing backslash.
-p
-tc
-# There was no trailing backslash. The end of the variable definition is
-# reached. Clear the hold space.
-s/^.*$//
-x
-bd
-:c
-# A trailing backslash means that the variable definition continues in the
-# next line. Put a nonempty string into the hold space to indicate this.
-s/^.*$/P/
-x
-:d
-'
-changequote([,])dnl
-
-  # Set POTFILES to the value of the Makefile variable POTFILES.
-  sed_x_POTFILES="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`"
-  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
-  # Compute POTFILES_DEPS as
-  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
-  POTFILES_DEPS=
-  for file in $POTFILES; do
-    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
-  done
-  POMAKEFILEDEPS=""
-
-  if test -n "$OBSOLETE_ALL_LINGUAS"; then
-    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
-  fi
-  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
-    # The LINGUAS file contains the set of available languages.
-    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
-  else
-    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
-    sed_x_LINGUAS="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`"
-    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
-  fi
-  # Hide the ALL_LINGUAS assigment from automake.
-  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
-  # Compute POFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
-  # Compute UPDATEPOFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
-  # Compute DUMMYPOFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
-  # Compute GMOFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
-  # Compute PROPERTIESFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
-  # Compute CLASSFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
-  # Compute QMFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
-  # Compute MSGFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
-  # Compute RESOURCESDLLFILES
-  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
-  case "$ac_given_srcdir" in
-    .) srcdirpre= ;;
-    *) srcdirpre='$(srcdir)/' ;;
-  esac
-  POFILES=
-  UPDATEPOFILES=
-  DUMMYPOFILES=
-  GMOFILES=
-  PROPERTIESFILES=
-  CLASSFILES=
-  QMFILES=
-  MSGFILES=
-  RESOURCESDLLFILES=
-  for lang in $ALL_LINGUAS; do
-    POFILES="$POFILES $srcdirpre$lang.po"
-    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
-    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
-    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
-    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
-    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
-    QMFILES="$QMFILES $srcdirpre$lang.qm"
-    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
-    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
-    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
-    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
-  done
-  # CATALOGS depends on both $ac_dir and the user's LINGUAS
-  # environment variable.
-  INST_LINGUAS=
-  if test -n "$ALL_LINGUAS"; then
-    for presentlang in $ALL_LINGUAS; do
-      useit=no
-      if test "%UNSET%" != "$LINGUAS"; then
-        desiredlanguages="$LINGUAS"
-      else
-        desiredlanguages="$ALL_LINGUAS"
-      fi
-      for desiredlang in $desiredlanguages; do
-        # Use the presentlang catalog if desiredlang is
-        #   a. equal to presentlang, or
-        #   b. a variant of presentlang (because in this case,
-        #      presentlang can be used as a fallback for messages
-        #      which are not translated in the desiredlang catalog).
-        case "$desiredlang" in
-          "$presentlang"*) useit=yes;;
-        esac
-      done
-      if test $useit = yes; then
-        INST_LINGUAS="$INST_LINGUAS $presentlang"
-      fi
-    done
-  fi
-  CATALOGS=
-  JAVACATALOGS=
-  QTCATALOGS=
-  TCLCATALOGS=
-  CSHARPCATALOGS=
-  if test -n "$INST_LINGUAS"; then
-    for lang in $INST_LINGUAS; do
-      CATALOGS="$CATALOGS $lang.gmo"
-      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
-      QTCATALOGS="$QTCATALOGS $lang.qm"
-      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
-      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
-      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
-      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
-    done
-  fi
-
-  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
-  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
-    # Add dependencies that cannot be formulated as a simple suffix rule.
-    for lang in $ALL_LINGUAS; do
-      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
-      cat >> "$ac_file.tmp" <<EOF
-$frobbedlang.msg: $lang.po
-	@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
-	\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-EOF
-    done
-  fi
-  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
-    # Add dependencies that cannot be formulated as a simple suffix rule.
-    for lang in $ALL_LINGUAS; do
-      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
-      cat >> "$ac_file.tmp" <<EOF
-$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
-	@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
-	\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-EOF
-    done
-  fi
-  if test -n "$POMAKEFILEDEPS"; then
-    cat >> "$ac_file.tmp" <<EOF
-Makefile: $POMAKEFILEDEPS
-EOF
-  fi
-  mv "$ac_file.tmp" "$ac_file"
-])
diff --git a/m4/posix_spawn.m4 b/m4/posix_spawn.m4
new file mode 100644
index 0000000..57928eb
--- /dev/null
+++ b/m4/posix_spawn.m4
@@ -0,0 +1,527 @@
+# posix_spawn.m4 serial 11
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Tests whether the entire posix_spawn facility is available.
+AC_DEFUN([gl_POSIX_SPAWN],
+[
+  AC_REQUIRE([gl_POSIX_SPAWN_BODY])
+])
+
+AC_DEFUN([gl_POSIX_SPAWN_BODY],
+[
+  AC_REQUIRE([gl_SPAWN_H_DEFAULTS])
+  AC_REQUIRE([gl_HAVE_POSIX_SPAWN])
+  dnl Assume that when the main function exists, all the others,
+  dnl except posix_spawnattr_{get,set}sched*, are available as well.
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnp])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_init])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addclose])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_adddup2])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addopen])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_destroy])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_init])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getflags])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setflags])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getpgroup])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setpgroup])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getsigdefault])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setsigdefault])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getsigmask])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setsigmask])
+  dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_destroy])
+  if test $ac_cv_func_posix_spawn = yes; then
+    gl_POSIX_SPAWN_WORKS
+    case "$gl_cv_func_posix_spawn_works" in
+      *yes)
+        AC_DEFINE([HAVE_WORKING_POSIX_SPAWN], [1],
+          [Define if you have the posix_spawn and posix_spawnp functions and
+           they work.])
+        dnl Assume that these functions are available if POSIX_SPAWN_SETSCHEDULER
+        dnl evaluates to nonzero.
+        dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getschedpolicy])
+        dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setschedpolicy])
+        AC_CACHE_CHECK([whether posix_spawnattr_setschedpolicy is supported],
+          [gl_cv_func_spawnattr_setschedpolicy],
+          [AC_EGREP_CPP([POSIX scheduling supported], [
+#include <spawn.h>
+#if POSIX_SPAWN_SETSCHEDULER
+ POSIX scheduling supported
+#endif
+],
+             [gl_cv_func_spawnattr_setschedpolicy=yes],
+             [gl_cv_func_spawnattr_setschedpolicy=no])
+          ])
+        dnl Assume that these functions are available if POSIX_SPAWN_SETSCHEDPARAM
+        dnl evaluates to nonzero.
+        dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getschedparam])
+        dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setschedparam])
+        AC_CACHE_CHECK([whether posix_spawnattr_setschedparam is supported],
+          [gl_cv_func_spawnattr_setschedparam],
+          [AC_EGREP_CPP([POSIX scheduling supported], [
+#include <spawn.h>
+#if POSIX_SPAWN_SETSCHEDPARAM
+ POSIX scheduling supported
+#endif
+],
+             [gl_cv_func_spawnattr_setschedparam=yes],
+             [gl_cv_func_spawnattr_setschedparam=no])
+          ])
+        ;;
+      *) REPLACE_POSIX_SPAWN=1 ;;
+    esac
+  fi
+])
+
+dnl Test whether posix_spawn actually works.
+dnl posix_spawn on AIX 5.3..6.1 has two bugs:
+dnl 1) When it fails to execute the program, the child process exits with
+dnl    exit() rather than _exit(), which causes the stdio buffers to be
+dnl    flushed. Reported by Rainer Tammer.
+dnl 2) The posix_spawn_file_actions_addopen function does not support file
+dnl    names that contain a '*'.
+dnl posix_spawn on AIX 5.3..6.1 has also a third bug: It does not work
+dnl when POSIX threads are used. But we don't test against this bug here.
+AC_DEFUN([gl_POSIX_SPAWN_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether posix_spawn works], [gl_cv_func_posix_spawn_works],
+    [if test $cross_compiling = no; then
+       AC_LINK_IFELSE([AC_LANG_SOURCE([[
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <spawn.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+extern char **environ;
+
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+#ifndef WTERMSIG
+# define WTERMSIG(x) ((x) & 0x7f)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(x) (WTERMSIG (x) == 0)
+#endif
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(x) (((x) >> 8) & 0xff)
+#endif
+
+#define CHILD_PROGRAM_FILENAME "/non/exist/ent"
+
+static int
+fd_safer (int fd)
+{
+  if (0 <= fd && fd <= 2)
+    {
+      int f = fd_safer (dup (fd));
+      int e = errno;
+      close (fd);
+      errno = e;
+      fd = f;
+    }
+
+  return fd;
+}
+
+int
+main ()
+{
+  char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL };
+  int ofd[2];
+  sigset_t blocked_signals;
+  sigset_t fatal_signal_set;
+  posix_spawn_file_actions_t actions;
+  bool actions_allocated;
+  posix_spawnattr_t attrs;
+  bool attrs_allocated;
+  int err;
+  pid_t child;
+  int status;
+  int exitstatus;
+
+  setvbuf (stdout, NULL, _IOFBF, 0);
+  puts ("This should be seen only once.");
+  if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0)
+    {
+      perror ("cannot create pipe");
+      exit (1);
+    }
+  sigprocmask (SIG_SETMASK, NULL, &blocked_signals);
+  sigemptyset (&fatal_signal_set);
+  sigaddset (&fatal_signal_set, SIGINT);
+  sigaddset (&fatal_signal_set, SIGTERM);
+  sigaddset (&fatal_signal_set, SIGHUP);
+  sigaddset (&fatal_signal_set, SIGPIPE);
+  sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL);
+  actions_allocated = false;
+  attrs_allocated = false;
+  if ((err = posix_spawn_file_actions_init (&actions)) != 0
+      || (actions_allocated = true,
+          (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0
+          || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0
+          || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0
+          || (err = posix_spawnattr_init (&attrs)) != 0
+          || (attrs_allocated = true,
+              (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0
+              || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0)
+          || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0))
+    {
+      if (actions_allocated)
+        posix_spawn_file_actions_destroy (&actions);
+      if (attrs_allocated)
+        posix_spawnattr_destroy (&attrs);
+      sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL);
+      if (err == ENOENT)
+        return 0;
+      else
+        {
+          errno = err;
+          perror ("subprocess failed");
+          exit (1);
+        }
+    }
+  posix_spawn_file_actions_destroy (&actions);
+  posix_spawnattr_destroy (&attrs);
+  sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL);
+  close (ofd[0]);
+  close (ofd[1]);
+  status = 0;
+  while (waitpid (child, &status, 0) != child)
+    ;
+  if (!WIFEXITED (status))
+    {
+      fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status);
+      exit (1);
+    }
+  exitstatus = WEXITSTATUS (status);
+  if (exitstatus != 127)
+    {
+      fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus);
+      exit (1);
+    }
+  return 0;
+}
+]])],
+         [if test -s conftest$ac_exeext \
+             && ./conftest$ac_exeext > conftest.out \
+             && echo 'This should be seen only once.' > conftest.ok \
+             && cmp conftest.out conftest.ok > /dev/null; then
+            gl_cv_func_posix_spawn_works=yes
+          else
+            gl_cv_func_posix_spawn_works=no
+          fi],
+         [gl_cv_func_posix_spawn_works=no])
+       if test $gl_cv_func_posix_spawn_works = yes; then
+         AC_RUN_IFELSE([AC_LANG_SOURCE([[
+/* Test whether posix_spawn_file_actions_addopen supports filename arguments
+   that contain special characters such as '*'.  */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <spawn.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+extern char **environ;
+
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+#ifndef WTERMSIG
+# define WTERMSIG(x) ((x) & 0x7f)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(x) (WTERMSIG (x) == 0)
+#endif
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(x) (((x) >> 8) & 0xff)
+#endif
+
+#define CHILD_PROGRAM_FILENAME "conftest"
+#define DATA_FILENAME "conftest%=*#?"
+
+static int
+parent_main (void)
+{
+  FILE *fp;
+  char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL };
+  posix_spawn_file_actions_t actions;
+  bool actions_allocated;
+  int err;
+  pid_t child;
+  int status;
+  int exitstatus;
+
+  /* Create a data file with specific contents.  */
+  fp = fopen (DATA_FILENAME, "wb");
+  if (fp == NULL)
+    {
+      perror ("cannot create data file");
+      return 1;
+    }
+  fwrite ("Halle Potta", 1, 11, fp);
+  if (fflush (fp) || fclose (fp))
+    {
+      perror ("cannot prepare data file");
+      return 2;
+    }
+
+  /* Avoid reading from our stdin, as it could block.  */
+  freopen ("/dev/null", "rb", stdin);
+
+  /* Test whether posix_spawn_file_actions_addopen with this file name
+     actually works, but spawning a child that reads from this file.  */
+  actions_allocated = false;
+  if ((err = posix_spawn_file_actions_init (&actions)) != 0
+      || (actions_allocated = true,
+          (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0
+          || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0))
+    {
+      if (actions_allocated)
+        posix_spawn_file_actions_destroy (&actions);
+      errno = err;
+      perror ("subprocess failed");
+      return 3;
+    }
+  posix_spawn_file_actions_destroy (&actions);
+  status = 0;
+  while (waitpid (child, &status, 0) != child)
+    ;
+  if (!WIFEXITED (status))
+    {
+      fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status);
+      return 4;
+    }
+  exitstatus = WEXITSTATUS (status);
+  if (exitstatus != 0)
+    {
+      fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus);
+      return 5;
+    }
+  return 0;
+}
+
+static int
+child_main (void)
+{
+  char buf[1024];
+
+  /* See if reading from STDIN_FILENO yields the expected contents.  */
+  if (fread (buf, 1, sizeof (buf), stdin) == 11
+      && memcmp (buf, "Halle Potta", 11) == 0)
+    return 0;
+  else
+    return 8;
+}
+
+static void
+cleanup_then_die (int sig)
+{
+  /* Clean up data file.  */
+  unlink (DATA_FILENAME);
+
+  /* Re-raise the signal and die from it.  */
+  signal (sig, SIG_DFL);
+  raise (sig);
+}
+
+int
+main (int argc, char *argv[])
+{
+  int exitstatus;
+
+  if (!(argc > 1 && strcmp (argv[1], "-child") == 0))
+    {
+      /* This is the parent process.  */
+      signal (SIGINT, cleanup_then_die);
+      signal (SIGTERM, cleanup_then_die);
+      #ifdef SIGHUP
+      signal (SIGHUP, cleanup_then_die);
+      #endif
+
+      exitstatus = parent_main ();
+    }
+  else
+    {
+      /* This is the child process.  */
+
+      exitstatus = child_main ();
+    }
+  unlink (DATA_FILENAME);
+  return exitstatus;
+}
+]])],
+           [],
+           [gl_cv_func_posix_spawn_works=no])
+       fi
+     else
+       case "$host_os" in
+         aix*) gl_cv_func_posix_spawn_works="guessing no";;
+         *)    gl_cv_func_posix_spawn_works="guessing yes";;
+       esac
+     fi
+    ])
+])
+
+# Prerequisites of lib/spawni.c.
+AC_DEFUN([gl_PREREQ_POSIX_SPAWN_INTERNAL],
+[
+  AC_CHECK_HEADERS([paths.h])
+  AC_CHECK_FUNCS([confstr sched_setparam sched_setscheduler setegid seteuid vfork])
+])
+
+AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE],
+[
+  AC_REQUIRE([gl_SPAWN_H_DEFAULTS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  gl_POSIX_SPAWN
+  if test $REPLACE_POSIX_SPAWN = 1; then
+    REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1
+  else
+    dnl On Solaris 11 2011-11, posix_spawn_file_actions_addclose succeeds even
+    dnl if the fd argument is out of range.
+    AC_CACHE_CHECK([whether posix_spawn_file_actions_addclose works],
+      [gl_cv_func_posix_spawn_file_actions_addclose_works],
+      [AC_RUN_IFELSE(
+         [AC_LANG_SOURCE([[
+#include <spawn.h>
+int main ()
+{
+  posix_spawn_file_actions_t actions;
+  if (posix_spawn_file_actions_init (&actions) != 0)
+    return 1;
+  if (posix_spawn_file_actions_addclose (&actions, 10000000) == 0)
+    return 2;
+  return 0;
+}]])],
+         [gl_cv_func_posix_spawn_file_actions_addclose_works=yes],
+         [gl_cv_func_posix_spawn_file_actions_addclose_works=no],
+         [# Guess no on Solaris, yes otherwise.
+          case "$host_os" in
+            solaris*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no";;
+            *)        gl_cv_func_posix_spawn_file_actions_addclose_works="guessing yes";;
+          esac
+         ])
+      ])
+    case "$gl_cv_func_posix_spawn_file_actions_addclose_works" in
+      *yes) ;;
+      *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 ;;
+    esac
+  fi
+])
+
+AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2],
+[
+  AC_REQUIRE([gl_SPAWN_H_DEFAULTS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  gl_POSIX_SPAWN
+  if test $REPLACE_POSIX_SPAWN = 1; then
+    REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1
+  else
+    dnl On Solaris 11 2011-11, posix_spawn_file_actions_adddup2 succeeds even
+    dnl if the fd argument is out of range.
+    AC_CACHE_CHECK([whether posix_spawn_file_actions_adddup2 works],
+      [gl_cv_func_posix_spawn_file_actions_adddup2_works],
+      [AC_RUN_IFELSE(
+         [AC_LANG_SOURCE([[
+#include <spawn.h>
+int main ()
+{
+  posix_spawn_file_actions_t actions;
+  if (posix_spawn_file_actions_init (&actions) != 0)
+    return 1;
+  if (posix_spawn_file_actions_adddup2 (&actions, 10000000, 2) == 0)
+    return 2;
+  return 0;
+}]])],
+         [gl_cv_func_posix_spawn_file_actions_adddup2_works=yes],
+         [gl_cv_func_posix_spawn_file_actions_adddup2_works=no],
+         [# Guess no on Solaris, yes otherwise.
+          case "$host_os" in
+            solaris*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";;
+            *)        gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing yes";;
+          esac
+         ])
+      ])
+    case "$gl_cv_func_posix_spawn_file_actions_adddup2_works" in
+      *yes) ;;
+      *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 ;;
+    esac
+  fi
+])
+
+AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN],
+[
+  AC_REQUIRE([gl_SPAWN_H_DEFAULTS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  gl_POSIX_SPAWN
+  if test $REPLACE_POSIX_SPAWN = 1; then
+    REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1
+  else
+    dnl On Solaris 11 2011-11, posix_spawn_file_actions_addopen succeeds even
+    dnl if the fd argument is out of range.
+    AC_CACHE_CHECK([whether posix_spawn_file_actions_addopen works],
+      [gl_cv_func_posix_spawn_file_actions_addopen_works],
+      [AC_RUN_IFELSE(
+         [AC_LANG_SOURCE([[
+#include <spawn.h>
+#include <fcntl.h>
+int main ()
+{
+  posix_spawn_file_actions_t actions;
+  if (posix_spawn_file_actions_init (&actions) != 0)
+    return 1;
+  if (posix_spawn_file_actions_addopen (&actions, 10000000, "foo", 0, O_RDONLY)
+      == 0)
+    return 2;
+  return 0;
+}]])],
+         [gl_cv_func_posix_spawn_file_actions_addopen_works=yes],
+         [gl_cv_func_posix_spawn_file_actions_addopen_works=no],
+         [# Guess no on Solaris, yes otherwise.
+          case "$host_os" in
+            solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";;
+            *)        gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";;
+          esac
+         ])
+      ])
+    case "$gl_cv_func_posix_spawn_file_actions_addopen_works" in
+      *yes) ;;
+      *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 ;;
+    esac
+  fi
+])
diff --git a/m4/printf-frexp.m4 b/m4/printf-frexp.m4
new file mode 100644
index 0000000..de5d641
--- /dev/null
+++ b/m4/printf-frexp.m4
@@ -0,0 +1,38 @@
+# printf-frexp.m4 serial 5
+dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check how to define printf_frexp() without linking with libm.
+
+AC_DEFUN([gl_FUNC_PRINTF_FREXP],
+[
+  AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
+  if test $gl_cv_func_frexp_no_libm = yes; then
+    gl_FUNC_FREXP_WORKS
+    case "$gl_cv_func_frexp_works" in
+      *yes)
+        AC_DEFINE([HAVE_FREXP_IN_LIBC], [1],
+          [Define if the frexp function is available in libc.])
+        ;;
+    esac
+  fi
+
+  AC_CACHE_CHECK([whether ldexp can be used without linking with libm],
+    [gl_cv_func_ldexp_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             double x;
+             int y;]],
+           [[return ldexp (x, y) < 1;]])],
+        [gl_cv_func_ldexp_no_libm=yes],
+        [gl_cv_func_ldexp_no_libm=no])
+    ])
+  if test $gl_cv_func_ldexp_no_libm = yes; then
+    AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1],
+      [Define if the ldexp function is available in libc.])
+  fi
+])
diff --git a/m4/printf-frexpl.m4 b/m4/printf-frexpl.m4
new file mode 100644
index 0000000..c960a49
--- /dev/null
+++ b/m4/printf-frexpl.m4
@@ -0,0 +1,48 @@
+# printf-frexpl.m4 serial 10
+dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check how to define printf_frexpl() without linking with libm.
+
+AC_DEFUN([gl_FUNC_PRINTF_FREXPL],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+
+  dnl Subset of gl_FUNC_FREXPL_NO_LIBM.
+  gl_CHECK_FREXPL_NO_LIBM
+  if test $gl_cv_func_frexpl_no_libm = yes; then
+    gl_FUNC_FREXPL_WORKS
+    case "$gl_cv_func_frexpl_works" in
+      *yes) gl_func_frexpl_no_libm=yes ;;
+      *)    gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
+    esac
+  else
+    gl_func_frexpl_no_libm=no
+    dnl Set REPLACE_FREXPL here because the system may have frexpl in libm.
+    REPLACE_FREXPL=1
+  fi
+  if test $gl_func_frexpl_no_libm = yes; then
+    AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1],
+      [Define if the frexpl function is available in libc.])
+    dnl Also check whether it's declared.
+    dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
+    AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
+  fi
+
+  gl_CHECK_LDEXPL_NO_LIBM
+  if test $gl_cv_func_ldexpl_no_libm = yes; then
+    gl_FUNC_LDEXPL_WORKS
+    case "$gl_cv_func_ldexpl_works" in
+      *yes)
+        AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1],
+          [Define if the ldexpl function is available in libc.])
+        dnl Also check whether it's declared.
+        dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>.
+        AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]])
+        ;;
+    esac
+  fi
+])
diff --git a/m4/printf-posix-rpl.m4 b/m4/printf-posix-rpl.m4
new file mode 100644
index 0000000..5bac077
--- /dev/null
+++ b/m4/printf-posix-rpl.m4
@@ -0,0 +1,26 @@
+# printf-posix-rpl.m4 serial 4
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_PRINTF_POSIX],
+[
+  AC_REQUIRE([gl_FUNC_VFPRINTF_POSIX])
+  if test $gl_cv_func_vfprintf_posix = no; then
+    gl_REPLACE_PRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_PRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_REQUIRE([gl_ASM_SYMBOL_PREFIX])
+  AC_LIBOBJ([printf])
+  REPLACE_PRINTF=1
+  AC_DEFINE([REPLACE_PRINTF_POSIX], [1],
+    [Define if printf is overridden by a POSIX compliant gnulib implementation.])
+  gl_PREREQ_PRINTF
+])
+
+AC_DEFUN([gl_PREREQ_PRINTF], [:])
diff --git a/m4/printf.m4 b/m4/printf.m4
new file mode 100644
index 0000000..751e896
--- /dev/null
+++ b/m4/printf.m4
@@ -0,0 +1,1570 @@
+# printf.m4 serial 50
+dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Test whether the *printf family of functions supports the 'j', 'z', 't',
+dnl 'L' size specifiers. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_sizes_c99.
+
+AC_DEFUN([gl_PRINTF_SIZES_C99],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports size specifiers as in C99],
+    [gl_cv_func_printf_sizes_c99],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+# include <inttypes.h>
+#endif
+static char buf[100];
+int main ()
+{
+  int result = 0;
+#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX
+  buf[0] = '\0';
+  if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0
+      || strcmp (buf, "12345671 33") != 0)
+    result |= 1;
+#endif
+  buf[0] = '\0';
+  if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0
+      || strcmp (buf, "12345672 33") != 0)
+    result |= 2;
+  buf[0] = '\0';
+  if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0
+      || strcmp (buf, "12345673 33") != 0)
+    result |= 4;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0
+      || strcmp (buf, "1.5 33") != 0)
+    result |= 8;
+  return result;
+}]])],
+        [gl_cv_func_printf_sizes_c99=yes],
+        [gl_cv_func_printf_sizes_c99=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_printf_sizes_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_sizes_c99="guessing no";;
+           darwin*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_printf_sizes_c99="guessing no";;
+           openbsd*)             gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_printf_sizes_c99="guessing no";;
+           netbsd*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_sizes_c99="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports 'long double'
+dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_long_double.
+
+AC_DEFUN([gl_PRINTF_LONG_DOUBLE],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports 'long double' arguments],
+    [gl_cv_func_printf_long_double],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[10000];
+int main ()
+{
+  int result = 0;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.750000 33") != 0)
+    result |= 1;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.750000e+00 33") != 0)
+    result |= 2;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.75 33") != 0)
+    result |= 4;
+  return result;
+}]])],
+        [gl_cv_func_printf_long_double=yes],
+        [gl_cv_func_printf_long_double=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           beos*)        gl_cv_func_printf_long_double="guessing no";;
+           mingw* | pw*) gl_cv_func_printf_long_double="guessing no";;
+           *)            gl_cv_func_printf_long_double="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports infinite and NaN
+dnl 'double' arguments and negative zero arguments in the %f, %e, %g
+dnl directives. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_infinite.
+
+AC_DEFUN([gl_PRINTF_INFINITE],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports infinite 'double' arguments],
+    [gl_cv_func_printf_infinite],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static int
+strisnan (const char *string, size_t start_index, size_t end_index)
+{
+  if (start_index < end_index)
+    {
+      if (string[start_index] == '-')
+        start_index++;
+      if (start_index + 3 <= end_index
+          && memcmp (string + start_index, "nan", 3) == 0)
+        {
+          start_index += 3;
+          if (start_index == end_index
+              || (string[start_index] == '(' && string[end_index - 1] == ')'))
+            return 1;
+        }
+    }
+  return 0;
+}
+static int
+have_minus_zero ()
+{
+  static double plus_zero = 0.0;
+  double minus_zero = - plus_zero;
+  return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
+}
+static char buf[10000];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%f", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%f", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%f", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 2;
+  if (sprintf (buf, "%e", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 4;
+  if (sprintf (buf, "%e", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 4;
+  if (sprintf (buf, "%e", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 8;
+  if (sprintf (buf, "%g", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 16;
+  if (sprintf (buf, "%g", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 16;
+  if (sprintf (buf, "%g", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 32;
+  /* This test fails on HP-UX 10.20.  */
+  if (have_minus_zero ())
+    if (sprintf (buf, "%g", - zero) < 0
+        || strcmp (buf, "-0") != 0)
+    result |= 64;
+  return result;
+}]])],
+        [gl_cv_func_printf_infinite=yes],
+        [gl_cv_func_printf_infinite=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on FreeBSD >= 6.
+           freebsd[1-5]*)        gl_cv_func_printf_infinite="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_infinite="guessing no";;
+           darwin*)              gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on HP-UX >= 11.
+           hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";;
+           hpux*)                gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_printf_infinite="guessing no";;
+           netbsd*)              gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_printf_infinite="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_infinite="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports infinite and NaN
+dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_infinite_long_double.
+
+AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE],
+[
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_BIGENDIAN])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  dnl The user can set or unset the variable gl_printf_safe to indicate
+  dnl that he wishes a safe handling of non-IEEE-754 'long double' values.
+  if test -n "$gl_printf_safe"; then
+    AC_DEFINE([CHECK_PRINTF_SAFE], [1],
+      [Define if you wish *printf() functions that have a safe handling of
+       non-IEEE-754 'long double' values.])
+  fi
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments],
+        [gl_cv_func_printf_infinite_long_double],
+        [
+          AC_RUN_IFELSE(
+            [AC_LANG_SOURCE([[
+]GL_NOCRASH[
+#include <float.h>
+#include <stdio.h>
+#include <string.h>
+static int
+strisnan (const char *string, size_t start_index, size_t end_index)
+{
+  if (start_index < end_index)
+    {
+      if (string[start_index] == '-')
+        start_index++;
+      if (start_index + 3 <= end_index
+          && memcmp (string + start_index, "nan", 3) == 0)
+        {
+          start_index += 3;
+          if (start_index == end_index
+              || (string[start_index] == '(' && string[end_index - 1] == ')'))
+            return 1;
+        }
+    }
+  return 0;
+}
+static char buf[10000];
+static long double zeroL = 0.0L;
+int main ()
+{
+  int result = 0;
+  nocrash_init();
+  if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lf", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+  if (sprintf (buf, "%Le", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Le", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Le", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+  if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lg", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16),    \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+  }
+  { /* Pseudo-NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 4;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 4;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 8;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 8;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 16;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 16;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 32;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 32;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 64;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 64;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 64;
+  }
+#endif
+  return result;
+}]])],
+            [gl_cv_func_printf_infinite_long_double=yes],
+            [gl_cv_func_printf_infinite_long_double=no],
+            [
+changequote(,)dnl
+             case "$host_cpu" in
+                                     # Guess no on ia64, x86_64, i386.
+               ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
+               *)
+                 case "$host_os" in
+                                         # Guess yes on glibc systems.
+                   *-gnu*)               gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on FreeBSD >= 6.
+                   freebsd[1-5]*)        gl_cv_func_printf_infinite_long_double="guessing no";;
+                   freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on HP-UX >= 11.
+                   hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
+                   hpux*)                gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # If we don't know, assume the worst.
+                   *)                    gl_cv_func_printf_infinite_long_double="guessing no";;
+                 esac
+                 ;;
+             esac
+changequote([,])dnl
+            ])
+        ])
+      ;;
+    *)
+      gl_cv_func_printf_infinite_long_double="irrelevant"
+      ;;
+  esac
+])
+
+dnl Test whether the *printf family of functions supports the 'a' and 'A'
+dnl conversion specifier for hexadecimal output of floating-point numbers.
+dnl (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_directive_a.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_A],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives],
+    [gl_cv_func_printf_directive_a],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0
+      || (strcmp (buf, "0x1.922p+1 33") != 0
+          && strcmp (buf, "0x3.244p+0 33") != 0
+          && strcmp (buf, "0x6.488p-1 33") != 0
+          && strcmp (buf, "0xc.91p-2 33") != 0))
+    result |= 1;
+  if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0
+      || (strcmp (buf, "-0X1.922P+1 33") != 0
+          && strcmp (buf, "-0X3.244P+0 33") != 0
+          && strcmp (buf, "-0X6.488P-1 33") != 0
+          && strcmp (buf, "-0XC.91P-2 33") != 0))
+    result |= 2;
+  /* This catches a FreeBSD 6.1 bug: it doesn't round.  */
+  if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0
+      || (strcmp (buf, "0x1.83p+0 33") != 0
+          && strcmp (buf, "0x3.05p-1 33") != 0
+          && strcmp (buf, "0x6.0ap-2 33") != 0
+          && strcmp (buf, "0xc.14p-3 33") != 0))
+    result |= 4;
+  /* This catches a FreeBSD 6.1 bug.  See
+     <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
+  if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0
+      || buf[0] == '0')
+    result |= 8;
+  /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug.  */
+  if (sprintf (buf, "%.1a", 1.999) < 0
+      || (strcmp (buf, "0x1.0p+1") != 0
+          && strcmp (buf, "0x2.0p+0") != 0
+          && strcmp (buf, "0x4.0p-1") != 0
+          && strcmp (buf, "0x8.0p-2") != 0))
+    result |= 16;
+  /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a
+     glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+  if (sprintf (buf, "%.1La", 1.999L) < 0
+      || (strcmp (buf, "0x1.0p+1") != 0
+          && strcmp (buf, "0x2.0p+0") != 0
+          && strcmp (buf, "0x4.0p-1") != 0
+          && strcmp (buf, "0x8.0p-2") != 0))
+    result |= 32;
+  return result;
+}]])],
+        [gl_cv_func_printf_directive_a=yes],
+        [gl_cv_func_printf_directive_a=no],
+        [
+         case "$host_os" in
+                                 # Guess yes on glibc >= 2.5 systems.
+           *-gnu*)
+             AC_EGREP_CPP([BZ2908], [
+               #include <features.h>
+               #ifdef __GNU_LIBRARY__
+                #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__
+                 BZ2908
+                #endif
+               #endif
+               ],
+               [gl_cv_func_printf_directive_a="guessing yes"],
+               [gl_cv_func_printf_directive_a="guessing no"])
+             ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_directive_a="guessing no";;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports the %F format
+dnl directive. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_directive_f.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_F],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'F' directive],
+    [gl_cv_func_printf_directive_f],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0
+      || strcmp (buf, "1234567.000000 33") != 0)
+    result |= 1;
+  if (sprintf (buf, "%F", 1.0 / zero) < 0
+      || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
+    result |= 2;
+  /* This catches a Cygwin 1.5.x bug.  */
+  if (sprintf (buf, "%.F", 1234.0) < 0
+      || strcmp (buf, "1234") != 0)
+    result |= 4;
+  return result;
+}]])],
+        [gl_cv_func_printf_directive_f=yes],
+        [gl_cv_func_printf_directive_f=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on FreeBSD >= 6.
+           freebsd[1-5]*)        gl_cv_func_printf_directive_f="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_directive_f="guessing no";;
+           darwin*)              gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_directive_f="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports the %n format
+dnl directive. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_directive_n.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_N],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'n' directive],
+    [gl_cv_func_printf_directive_n],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef _MSC_VER
+/* See page about "Parameter Validation" on msdn.microsoft.com.  */
+static void cdecl
+invalid_parameter_handler (const wchar_t *expression,
+                           const wchar_t *function,
+                           const wchar_t *file, unsigned int line,
+                           uintptr_t dummy)
+{
+  exit (1);
+}
+#endif
+static char fmtstring[10];
+static char buf[100];
+int main ()
+{
+  int count = -1;
+#ifdef _MSC_VER
+  _set_invalid_parameter_handler (invalid_parameter_handler);
+#endif
+  /* Copy the format string.  Some systems (glibc with _FORTIFY_SOURCE=2)
+     support %n in format strings in read-only memory but not in writable
+     memory.  */
+  strcpy (fmtstring, "%d %n");
+  if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0
+      || strcmp (buf, "123 ") != 0
+      || count != 4)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_printf_directive_n=yes],
+        [gl_cv_func_printf_directive_n=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           mingw*) gl_cv_func_printf_directive_n="guessing no";;
+           *)      gl_cv_func_printf_directive_n="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports the %ls format
+dnl directive and in particular, when a precision is specified, whether
+dnl the functions stop converting the wide string argument when the number
+dnl of bytes that have been produced by this conversion equals or exceeds
+dnl the precision.
+dnl Result is gl_cv_func_printf_directive_ls.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_LS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'ls' directive],
+    [gl_cv_func_printf_directive_ls],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <string.h>
+int main ()
+{
+  int result = 0;
+  char buf[100];
+  /* Test whether %ls works at all.
+     This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on
+     Cygwin 1.5.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', 'c', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "abc") != 0)
+      result |= 1;
+  }
+  /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an
+     assertion failure inside libc), but not on OpenBSD 4.0.  */
+  {
+    static const wchar_t wstring[] = { 'a', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "a") != 0)
+      result |= 2;
+  }
+  /* Test whether precisions in %ls are supported as specified in ISO C 99
+     section 7.19.6.1:
+       "If a precision is specified, no more than that many bytes are written
+        (including shift sequences, if any), and the array shall contain a
+        null wide character if, to equal the multibyte character sequence
+        length given by the precision, the function would need to access a
+        wide character one past the end of the array."
+     This test fails on Solaris 10.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%.2ls", wstring) < 0
+        || strcmp (buf, "ab") != 0)
+      result |= 8;
+  }
+  return result;
+}]])],
+        [gl_cv_func_printf_directive_ls=yes],
+        [gl_cv_func_printf_directive_ls=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           openbsd*)        gl_cv_func_printf_directive_ls="guessing no";;
+           irix*)           gl_cv_func_printf_directive_ls="guessing no";;
+           solaris*)        gl_cv_func_printf_directive_ls="guessing no";;
+           cygwin*)         gl_cv_func_printf_directive_ls="guessing no";;
+           beos* | haiku*)  gl_cv_func_printf_directive_ls="guessing no";;
+           *)               gl_cv_func_printf_directive_ls="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports POSIX/XSI format
+dnl strings with positions. (POSIX:2001)
+dnl Result is gl_cv_func_printf_positions.
+
+AC_DEFUN([gl_PRINTF_POSITIONS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions],
+    [gl_cv_func_printf_positions],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}]])],
+        [gl_cv_func_printf_positions=yes],
+        [gl_cv_func_printf_positions=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
+                         gl_cv_func_printf_positions="guessing no";;
+           beos*)        gl_cv_func_printf_positions="guessing no";;
+           mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+           *)            gl_cv_func_printf_positions="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports POSIX/XSI format
+dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001)
+dnl Result is gl_cv_func_printf_flag_grouping.
+
+AC_DEFUN([gl_PRINTF_FLAG_GROUPING],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the grouping flag],
+    [gl_cv_func_printf_flag_grouping],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+int main ()
+{
+  if (sprintf (buf, "%'d %d", 1234567, 99) < 0
+      || buf[strlen (buf) - 1] != '9')
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_printf_flag_grouping=yes],
+        [gl_cv_func_printf_flag_grouping=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           cygwin*)      gl_cv_func_printf_flag_grouping="guessing no";;
+           netbsd*)      gl_cv_func_printf_flag_grouping="guessing no";;
+           mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
+           *)            gl_cv_func_printf_flag_grouping="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports the - flag correctly.
+dnl (ISO C99.) See
+dnl <http://lists.gnu.org/archive/html/bug-coreutils/2008-02/msg00035.html>
+dnl Result is gl_cv_func_printf_flag_leftadjust.
+
+AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly],
+    [gl_cv_func_printf_flag_leftadjust],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+int main ()
+{
+  /* Check that a '-' flag is not annihilated by a negative width.  */
+  if (sprintf (buf, "a%-*sc", -3, "b") < 0
+      || strcmp (buf, "ab  c") != 0)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_printf_flag_leftadjust=yes],
+        [gl_cv_func_printf_flag_leftadjust=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                    # Guess yes on HP-UX 11.
+           hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                    # Guess no on HP-UX 10 and older.
+           hpux*)   gl_cv_func_printf_flag_leftadjust="guessing no";;
+                    # Guess yes otherwise.
+           *)       gl_cv_func_printf_flag_leftadjust="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports padding of non-finite
+dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See
+dnl <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html>
+dnl Result is gl_cv_func_printf_flag_zero.
+
+AC_DEFUN([gl_PRINTF_FLAG_ZERO],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the zero flag correctly],
+    [gl_cv_func_printf_flag_zero],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0
+      || (strcmp (buf, "       inf") != 0
+          && strcmp (buf, "  infinity") != 0))
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_printf_flag_zero=yes],
+        [gl_cv_func_printf_flag_zero=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                   # Guess yes on glibc systems.
+           *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
+                   # Guess yes on BeOS.
+           beos*)  gl_cv_func_printf_flag_zero="guessing yes";;
+                   # If we don't know, assume the worst.
+           *)      gl_cv_func_printf_flag_zero="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports large precisions.
+dnl On mingw, precisions larger than 512 are treated like 512, in integer,
+dnl floating-point or pointer output. On Solaris 10/x86, precisions larger
+dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC,
+dnl precisions larger than 510 in floating-point output yield wrong results.
+dnl On AIX 7.1, precisions larger than 998 in floating-point output yield
+dnl wrong results. On BeOS, precisions larger than 1044 crash the program.
+dnl Result is gl_cv_func_printf_precision.
+
+AC_DEFUN([gl_PRINTF_PRECISION],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports large precisions],
+    [gl_cv_func_printf_precision],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[5000];
+int main ()
+{
+  int result = 0;
+#ifdef __BEOS__
+  /* On BeOS, this would crash and show a dialog box.  Avoid the crash.  */
+  return 1;
+#endif
+  if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3)
+    result |= 1;
+  if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5)
+    result |= 2;
+  if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5
+      || buf[0] != '1')
+    result |= 4;
+  if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5
+      || buf[0] != '1')
+    result |= 4;
+  return result;
+}]])],
+        [gl_cv_func_printf_precision=yes],
+        [gl_cv_func_printf_precision=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           # Guess no only on Solaris, native Windows, and BeOS systems.
+           solaris*)     gl_cv_func_printf_precision="guessing no" ;;
+           mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;;
+           beos*)        gl_cv_func_printf_precision="guessing no" ;;
+           *)            gl_cv_func_printf_precision="guessing yes" ;;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions recovers gracefully in case
+dnl of an out-of-memory condition, or whether it crashes the entire program.
+dnl Result is gl_cv_func_printf_enomem.
+
+AC_DEFUN([gl_PRINTF_ENOMEM],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_MULTIARCH])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf survives out-of-memory conditions],
+    [gl_cv_func_printf_enomem],
+    [
+      gl_cv_func_printf_enomem="guessing no"
+      if test "$cross_compiling" = no; then
+        if test $APPLE_UNIVERSAL_BUILD = 0; then
+          AC_LANG_CONFTEST([AC_LANG_SOURCE([
+]GL_NOCRASH[
+changequote(,)dnl
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <errno.h>
+int main()
+{
+  struct rlimit limit;
+  int ret;
+  nocrash_init ();
+  /* Some printf implementations allocate temporary space with malloc.  */
+  /* On BSD systems, malloc() is limited by RLIMIT_DATA.  */
+#ifdef RLIMIT_DATA
+  if (getrlimit (RLIMIT_DATA, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_DATA, &limit) < 0)
+    return 77;
+#endif
+  /* On Linux systems, malloc() is limited by RLIMIT_AS.  */
+#ifdef RLIMIT_AS
+  if (getrlimit (RLIMIT_AS, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_AS, &limit) < 0)
+    return 77;
+#endif
+  /* Some printf implementations allocate temporary space on the stack.  */
+#ifdef RLIMIT_STACK
+  if (getrlimit (RLIMIT_STACK, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_STACK, &limit) < 0)
+    return 77;
+#endif
+  ret = printf ("%.5000000f", 1.0);
+  return !(ret == 5000002 || (ret < 0 && errno == ENOMEM));
+}
+changequote([,])dnl
+          ])])
+          if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+            (./conftest 2>&AS_MESSAGE_LOG_FD
+             result=$?
+             _AS_ECHO_LOG([\$? = $result])
+             if test $result != 0 && test $result != 77; then result=1; fi
+             exit $result
+            ) >/dev/null 2>/dev/null
+            case $? in
+              0) gl_cv_func_printf_enomem="yes" ;;
+              77) gl_cv_func_printf_enomem="guessing no" ;;
+              *) gl_cv_func_printf_enomem="no" ;;
+            esac
+          else
+            gl_cv_func_printf_enomem="guessing no"
+          fi
+          rm -fr conftest*
+        else
+          dnl A universal build on Apple Mac OS X platforms.
+          dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode.
+          dnl But we need a configuration result that is valid in both modes.
+          gl_cv_func_printf_enomem="guessing no"
+        fi
+      fi
+      if test "$gl_cv_func_printf_enomem" = "guessing no"; then
+changequote(,)dnl
+        case "$host_os" in
+                    # Guess yes on glibc systems.
+          *-gnu*)   gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on Solaris.
+          solaris*) gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on AIX.
+          aix*)     gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on HP-UX/hppa.
+          hpux*)    case "$host_cpu" in
+                      hppa*) gl_cv_func_printf_enomem="guessing yes";;
+                      *)     gl_cv_func_printf_enomem="guessing no";;
+                    esac
+                    ;;
+                    # Guess yes on IRIX.
+          irix*)    gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on OSF/1.
+          osf*)     gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on BeOS.
+          beos*)    gl_cv_func_printf_enomem="guessing yes";;
+                    # Guess yes on Haiku.
+          haiku*)   gl_cv_func_printf_enomem="guessing yes";;
+                    # If we don't know, assume the worst.
+          *)        gl_cv_func_printf_enomem="guessing no";;
+        esac
+changequote([,])dnl
+      fi
+    ])
+])
+
+dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001)
+dnl Result is ac_cv_func_snprintf.
+
+AC_DEFUN([gl_SNPRINTF_PRESENCE],
+[
+  AC_CHECK_FUNCS_ONCE([snprintf])
+])
+
+dnl Test whether the string produced by the snprintf function is always NUL
+dnl terminated. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_snprintf_truncation_c99.
+
+AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_SNPRINTF_PRESENCE])
+  AC_CACHE_CHECK([whether snprintf truncates the result as in C99],
+    [gl_cv_func_snprintf_truncation_c99],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char buf[100];
+int main ()
+{
+  strcpy (buf, "ABCDEF");
+  my_snprintf (buf, 3, "%d %d", 4567, 89);
+  if (memcmp (buf, "45\0DEF", 6) != 0)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_snprintf_truncation_c99=yes],
+        [gl_cv_func_snprintf_truncation_c99=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_snprintf_truncation_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_truncation_c99="guessing no";;
+           darwin*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           openbsd*)             gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           solaris*)             gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_truncation_c99="guessing no";;
+           aix*)                 gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on HP-UX >= 11.
+           hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";;
+           hpux*)                gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on OSF/1 >= 5.
+           osf[3-4]*)            gl_cv_func_snprintf_truncation_c99="guessing no";;
+           osf*)                 gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_truncation_c99="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the return value of the snprintf function is the number
+dnl of bytes (excluding the terminating NUL) that would have been produced
+dnl if the buffer had been large enough. (ISO C99, POSIX:2001)
+dnl For example, this test program fails on IRIX 6.5:
+dnl     ---------------------------------------------------------------------
+dnl     #include <stdio.h>
+dnl     int main()
+dnl     {
+dnl       static char buf[8];
+dnl       int retval = snprintf (buf, 3, "%d", 12345);
+dnl       return retval >= 0 && retval < 3;
+dnl     }
+dnl     ---------------------------------------------------------------------
+dnl Result is gl_cv_func_snprintf_retval_c99.
+
+AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_SNPRINTF_PRESENCE])
+  AC_CACHE_CHECK([whether snprintf returns a byte count as in C99],
+    [gl_cv_func_snprintf_retval_c99],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char buf[100];
+int main ()
+{
+  strcpy (buf, "ABCDEF");
+  if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7)
+    return 1;
+  if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7)
+    return 2;
+  if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7)
+    return 3;
+  return 0;
+}]])],
+        [gl_cv_func_snprintf_retval_c99=yes],
+        [gl_cv_func_snprintf_retval_c99=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_snprintf_retval_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_retval_c99="guessing no";;
+           darwin*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_snprintf_retval_c99="guessing no";;
+           openbsd*)             gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_retval_c99="guessing no";;
+           aix*)                 gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_retval_c99="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_retval_c99="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the snprintf function supports the %n format directive
+dnl also in truncated portions of the format string. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_snprintf_directive_n.
+
+AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_SNPRINTF_PRESENCE])
+  AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive],
+    [gl_cv_func_snprintf_directive_n],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char fmtstring[10];
+static char buf[100];
+int main ()
+{
+  int count = -1;
+  /* Copy the format string.  Some systems (glibc with _FORTIFY_SOURCE=2)
+     support %n in format strings in read-only memory but not in writable
+     memory.  */
+  strcpy (fmtstring, "%d %n");
+  my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55);
+  if (count != 6)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_snprintf_directive_n=yes],
+        [gl_cv_func_snprintf_directive_n=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_snprintf_directive_n="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_directive_n="guessing no";;
+           darwin*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_snprintf_directive_n="guessing no";;
+           solaris*)             gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_directive_n="guessing no";;
+           aix*)                 gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on OSF/1 >= 5.
+           osf[3-4]*)            gl_cv_func_snprintf_directive_n="guessing no";;
+           osf*)                 gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_directive_n="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_directive_n="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the snprintf function, when passed a size = 1, writes any
+dnl output without bounds in this case, behaving like sprintf. This is the
+dnl case on Linux libc5.
+dnl Result is gl_cv_func_snprintf_size1.
+
+AC_DEFUN([gl_SNPRINTF_SIZE1],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_SNPRINTF_PRESENCE])
+  AC_CACHE_CHECK([whether snprintf respects a size of 1],
+    [gl_cv_func_snprintf_size1],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 1, "%d", 12345);
+  return buf[1] != 'E';
+}]])],
+        [gl_cv_func_snprintf_size1=yes],
+        [gl_cv_func_snprintf_size1=no],
+        [gl_cv_func_snprintf_size1="guessing yes"])
+    ])
+])
+
+dnl Test whether the vsnprintf function, when passed a zero size, produces no
+dnl output. (ISO C99, POSIX:2001)
+dnl For example, snprintf nevertheless writes a NUL byte in this case
+dnl on OSF/1 5.1:
+dnl     ---------------------------------------------------------------------
+dnl     #include <stdio.h>
+dnl     int main()
+dnl     {
+dnl       static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+dnl       snprintf (buf, 0, "%d", 12345);
+dnl       return buf[0] != 'D';
+dnl     }
+dnl     ---------------------------------------------------------------------
+dnl And vsnprintf writes any output without bounds in this case, behaving like
+dnl vsprintf, on HP-UX 11 and OSF/1 5.1:
+dnl     ---------------------------------------------------------------------
+dnl     #include <stdarg.h>
+dnl     #include <stdio.h>
+dnl     static int my_snprintf (char *buf, int size, const char *format, ...)
+dnl     {
+dnl       va_list args;
+dnl       int ret;
+dnl       va_start (args, format);
+dnl       ret = vsnprintf (buf, size, format, args);
+dnl       va_end (args);
+dnl       return ret;
+dnl     }
+dnl     int main()
+dnl     {
+dnl       static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+dnl       my_snprintf (buf, 0, "%d", 12345);
+dnl       return buf[0] != 'D';
+dnl     }
+dnl     ---------------------------------------------------------------------
+dnl Result is gl_cv_func_vsnprintf_zerosize_c99.
+
+AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99],
+    [gl_cv_func_vsnprintf_zerosize_c99],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdarg.h>
+#include <stdio.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 0, "%d", 12345);
+  return buf[0] != 'D';
+}]])],
+        [gl_cv_func_vsnprintf_zerosize_c99=yes],
+        [gl_cv_func_vsnprintf_zerosize_c99=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu*)               gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4]*)        gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           darwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Cygwin.
+           cygwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           solaris*)             gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           aix*)                 gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           netbsd*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on mingw.
+           mingw* | pw*)         gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl The results of these tests on various platforms are:
+dnl
+dnl 1 = gl_PRINTF_SIZES_C99
+dnl 2 = gl_PRINTF_LONG_DOUBLE
+dnl 3 = gl_PRINTF_INFINITE
+dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE
+dnl 5 = gl_PRINTF_DIRECTIVE_A
+dnl 6 = gl_PRINTF_DIRECTIVE_F
+dnl 7 = gl_PRINTF_DIRECTIVE_N
+dnl 8 = gl_PRINTF_DIRECTIVE_LS
+dnl 9 = gl_PRINTF_POSITIONS
+dnl 10 = gl_PRINTF_FLAG_GROUPING
+dnl 11 = gl_PRINTF_FLAG_LEFTADJUST
+dnl 12 = gl_PRINTF_FLAG_ZERO
+dnl 13 = gl_PRINTF_PRECISION
+dnl 14 = gl_PRINTF_ENOMEM
+dnl 15 = gl_SNPRINTF_PRESENCE
+dnl 16 = gl_SNPRINTF_TRUNCATION_C99
+dnl 17 = gl_SNPRINTF_RETVAL_C99
+dnl 18 = gl_SNPRINTF_DIRECTIVE_N
+dnl 19 = gl_SNPRINTF_SIZE1
+dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99
+dnl
+dnl 1 = checking whether printf supports size specifiers as in C99...
+dnl 2 = checking whether printf supports 'long double' arguments...
+dnl 3 = checking whether printf supports infinite 'double' arguments...
+dnl 4 = checking whether printf supports infinite 'long double' arguments...
+dnl 5 = checking whether printf supports the 'a' and 'A' directives...
+dnl 6 = checking whether printf supports the 'F' directive...
+dnl 7 = checking whether printf supports the 'n' directive...
+dnl 8 = checking whether printf supports the 'ls' directive...
+dnl 9 = checking whether printf supports POSIX/XSI format strings with positions...
+dnl 10 = checking whether printf supports the grouping flag...
+dnl 11 = checking whether printf supports the left-adjust flag correctly...
+dnl 12 = checking whether printf supports the zero flag correctly...
+dnl 13 = checking whether printf supports large precisions...
+dnl 14 = checking whether printf survives out-of-memory conditions...
+dnl 15 = checking for snprintf...
+dnl 16 = checking whether snprintf truncates the result as in C99...
+dnl 17 = checking whether snprintf returns a byte count as in C99...
+dnl 18 = checking whether snprintf fully supports the 'n' directive...
+dnl 19 = checking whether snprintf respects a size of 1...
+dnl 20 = checking whether vsnprintf respects a zero size as in C99...
+dnl
+dnl . = yes, # = no.
+dnl
+dnl                                  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
+dnl   glibc 2.5                      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+dnl   glibc 2.3.6                    .  .  .  .  #  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+dnl   FreeBSD 5.4, 6.1               .  .  .  .  #  .  .  .  .  .  .  #  .  #  .  .  .  .  .  .
+dnl   Mac OS X 10.5.8                .  .  .  #  #  .  .  .  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   Mac OS X 10.3.9                .  .  .  .  #  .  .  .  .  .  .  #  .  #  .  .  .  .  .  .
+dnl   OpenBSD 3.9, 4.0               .  .  #  #  #  #  .  #  .  #  .  #  .  #  .  .  .  .  .  .
+dnl   Cygwin 1.7.0 (2009)            .  .  .  #  .  .  .  ?  .  .  .  .  .  ?  .  .  .  .  .  .
+dnl   Cygwin 1.5.25 (2008)           .  .  .  #  #  .  .  #  .  .  .  .  .  #  .  .  .  .  .  .
+dnl   Cygwin 1.5.19 (2006)           #  .  .  #  #  #  .  #  .  #  .  #  #  #  .  .  .  .  .  .
+dnl   Solaris 11 2011-11             .  .  #  #  #  .  .  #  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   Solaris 10                     .  .  #  #  #  .  .  #  .  .  .  #  #  .  .  .  .  .  .  .
+dnl   Solaris 2.6 ... 9              #  .  #  #  #  #  .  #  .  .  .  #  #  .  .  .  #  .  .  .
+dnl   Solaris 2.5.1                  #  .  #  #  #  #  .  #  .  .  .  #  .  .  #  #  #  #  #  #
+dnl   AIX 7.1                        .  .  #  #  #  .  .  .  .  .  .  #  #  .  .  .  .  .  .  .
+dnl   AIX 5.2                        .  .  #  #  #  .  .  .  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   AIX 4.3.2, 5.1                 #  .  #  #  #  #  .  .  .  .  .  #  .  .  .  .  #  .  .  .
+dnl   HP-UX 11.31                    .  .  .  .  #  .  .  .  .  .  .  #  .  .  .  .  #  #  .  .
+dnl   HP-UX 11.{00,11,23}            #  .  .  .  #  #  .  .  .  .  .  #  .  .  .  .  #  #  .  #
+dnl   HP-UX 10.20                    #  .  #  .  #  #  .  ?  .  .  #  #  .  .  .  .  #  #  ?  #
+dnl   IRIX 6.5                       #  .  #  #  #  #  .  #  .  .  .  #  .  .  .  .  #  .  .  .
+dnl   OSF/1 5.1                      #  .  #  #  #  #  .  .  .  .  .  #  .  .  .  .  #  .  .  #
+dnl   OSF/1 4.0d                     #  .  #  #  #  #  .  .  .  .  .  #  .  .  #  #  #  #  #  #
+dnl   NetBSD 5.0                     .  .  .  #  #  .  .  .  .  .  .  #  .  #  .  .  .  .  .  .
+dnl   NetBSD 4.0                     .  ?  ?  ?  ?  ?  .  ?  .  ?  ?  ?  ?  ?  .  .  .  ?  ?  ?
+dnl   NetBSD 3.0                     .  .  .  .  #  #  .  ?  #  #  ?  #  .  #  .  .  .  .  .  .
+dnl   Haiku                          .  .  .  #  #  #  .  #  .  .  .  .  .  ?  .  .  ?  .  .  .
+dnl   BeOS                           #  #  .  #  #  #  .  ?  #  .  ?  .  #  ?  .  .  ?  .  .  .
+dnl   old mingw / msvcrt             #  #  #  #  #  #  .  .  #  #  .  #  #  ?  .  #  #  #  .  .
+dnl   MSVC 9                         #  #  #  #  #  #  #  .  #  #  .  #  #  ?  #  #  #  #  .  .
+dnl   mingw 2009-2011                .  #  .  #  .  .  .  .  #  #  .  .  .  ?  .  .  .  .  .  .
+dnl   mingw-w64 2011                 #  #  #  #  #  #  .  .  #  #  .  #  #  ?  .  #  #  #  .  .
diff --git a/m4/progtest.m4 b/m4/progtest.m4
index a56365c..ce3abbc 100644
--- a/m4/progtest.m4
+++ b/m4/progtest.m4
@@ -1,5 +1,5 @@
-# progtest.m4 serial 4 (gettext-0.14.2)
-dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
+# progtest.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1996-2003, 2005, 2008-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -16,7 +16,7 @@
 dnl Authors:
 dnl   Ulrich Drepper <drepper@cygnus.com>, 1996.
 
-AC_PREREQ(2.50)
+AC_PREREQ([2.50])
 
 # Search path for a program which passes the given test.
 
@@ -27,15 +27,14 @@
 # Prepare PATH_SEPARATOR.
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+  # contains only /bin. Note that ksh looks also at the FPATH variable,
+  # so we have to set that as well for the test.
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+    && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+           || PATH_SEPARATOR=';'
+       }
 fi
 
 # Find out how to test for executable files. Don't use a zero-byte file,
@@ -55,7 +54,7 @@
 # Extract the first word of "$2", so it can be a program name with args.
 set dummy $2; ac_word=[$]2
 AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(ac_cv_path_$1,
+AC_CACHE_VAL([ac_cv_path_$1],
 [case "[$]$1" in
   [[\\/]]* | ?:[[\\/]]*)
     ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
@@ -84,9 +83,9 @@
 esac])dnl
 $1="$ac_cv_path_$1"
 if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
-  AC_MSG_RESULT([$]$1)
+  AC_MSG_RESULT([$][$1])
 else
-  AC_MSG_RESULT(no)
+  AC_MSG_RESULT([no])
 fi
-AC_SUBST($1)dnl
+AC_SUBST([$1])dnl
 ])
diff --git a/m4/quote.m4 b/m4/quote.m4
index ca66b53..7b05584 100644
--- a/m4/quote.m4
+++ b/m4/quote.m4
@@ -1,14 +1,13 @@
-# quote.m4 serial 4
-dnl Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+# quote.m4 serial 6
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2012 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_QUOTE],
 [
-  AC_LIBSOURCES([quote.c, quote.h])
-  AC_LIBOBJ([quote])
-
   dnl Prerequisites of lib/quote.c.
   dnl (none)
+  :
 ])
diff --git a/m4/quotearg.m4 b/m4/quotearg.m4
index 98ae133..09c36bb 100644
--- a/m4/quotearg.m4
+++ b/m4/quotearg.m4
@@ -1,17 +1,10 @@
-# quotearg.m4 serial 4
-dnl Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+# quotearg.m4 serial 9
+dnl Copyright (C) 2002, 2004-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_QUOTEARG],
 [
-  AC_LIBSOURCES([quotearg.c, quotearg.h])
-  AC_LIBOBJ([quotearg])
-
-  dnl Prerequisites of lib/quotearg.c.
-  AC_CHECK_HEADERS_ONCE(wchar.h wctype.h)
-  AC_CHECK_FUNCS_ONCE(iswprint mbsinit)
-  AC_TYPE_MBSTATE_T
-  gl_FUNC_MBRTOWC
+  :
 ])
diff --git a/m4/raise.m4 b/m4/raise.m4
new file mode 100644
index 0000000..95e9fc4
--- /dev/null
+++ b/m4/raise.m4
@@ -0,0 +1,34 @@
+# raise.m4 serial 3
+dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RAISE],
+[
+  AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_MSVC_INVAL])
+  AC_CHECK_FUNCS([raise])
+  if test $ac_cv_func_raise = no; then
+    HAVE_RAISE=0
+  else
+    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+      REPLACE_RAISE=1
+    fi
+    m4_ifdef([gl_SIGNALBLOCKING], [
+      gl_SIGNALBLOCKING
+      if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
+        m4_ifdef([gl_SIGNAL_SIGPIPE], [
+          gl_SIGNAL_SIGPIPE
+          if test $gl_cv_header_signal_h_SIGPIPE != yes; then
+            REPLACE_RAISE=1
+          fi
+        ], [:])
+      fi
+    ])
+  fi
+])
+
+# Prerequisites of lib/raise.c.
+AC_DEFUN([gl_PREREQ_RAISE], [:])
diff --git a/m4/rawmemchr.m4 b/m4/rawmemchr.m4
new file mode 100644
index 0000000..1930164
--- /dev/null
+++ b/m4/rawmemchr.m4
@@ -0,0 +1,20 @@
+# rawmemchr.m4 serial 2
+dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RAWMEMCHR],
+[
+  dnl Persuade glibc <string.h> to declare rawmemchr().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS([rawmemchr])
+  if test $ac_cv_func_rawmemchr = no; then
+    HAVE_RAWMEMCHR=0
+  fi
+])
+
+# Prerequisites of lib/strchrnul.c.
+AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:])
diff --git a/m4/realloc.m4 b/m4/realloc.m4
new file mode 100644
index 0000000..954c2f0
--- /dev/null
+++ b/m4/realloc.m4
@@ -0,0 +1,76 @@
+# realloc.m4 serial 13
+dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+m4_version_prereq([2.70], [] ,[
+
+# This is taken from the following Autoconf patch:
+# http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9
+AC_DEFUN([_AC_FUNC_REALLOC_IF],
+[
+  AC_REQUIRE([AC_HEADER_STDC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
+  AC_CHECK_HEADERS([stdlib.h])
+  AC_CACHE_CHECK([for GNU libc compatible realloc],
+    [ac_cv_func_realloc_0_nonnull],
+    [AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+            # include <stdlib.h>
+            #else
+            char *realloc ();
+            #endif
+          ]],
+          [[return ! realloc (0, 0);]])
+       ],
+       [ac_cv_func_realloc_0_nonnull=yes],
+       [ac_cv_func_realloc_0_nonnull=no],
+       [case "$host_os" in
+          # Guess yes on platforms where we know the result.
+          *-gnu* | freebsd* | netbsd* | openbsd* \
+          | hpux* | solaris* | cygwin* | mingw*)
+            ac_cv_func_realloc_0_nonnull=yes ;;
+          # If we don't know, assume the worst.
+          *) ac_cv_func_realloc_0_nonnull=no ;;
+        esac
+       ])
+    ])
+  AS_IF([test $ac_cv_func_realloc_0_nonnull = yes], [$1], [$2])
+])# AC_FUNC_REALLOC
+
+])
+
+# gl_FUNC_REALLOC_GNU
+# -------------------
+# Test whether 'realloc (0, 0)' is handled like in GNU libc, and replace
+# realloc if it is not.
+AC_DEFUN([gl_FUNC_REALLOC_GNU],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  dnl _AC_FUNC_REALLOC_IF is defined in Autoconf.
+  _AC_FUNC_REALLOC_IF(
+    [AC_DEFINE([HAVE_REALLOC_GNU], [1],
+               [Define to 1 if your system has a GNU libc compatible 'realloc'
+                function, and to 0 otherwise.])],
+    [AC_DEFINE([HAVE_REALLOC_GNU], [0])
+     REPLACE_REALLOC=1
+    ])
+])# gl_FUNC_REALLOC_GNU
+
+# gl_FUNC_REALLOC_POSIX
+# ---------------------
+# Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails), and replace realloc if it is not.
+AC_DEFUN([gl_FUNC_REALLOC_POSIX],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+  if test $gl_cv_func_malloc_posix = yes; then
+    AC_DEFINE([HAVE_REALLOC_POSIX], [1],
+      [Define if the 'realloc' function is POSIX compliant.])
+  else
+    REPLACE_REALLOC=1
+  fi
+])
diff --git a/m4/sched_h.m4 b/m4/sched_h.m4
new file mode 100644
index 0000000..5346146
--- /dev/null
+++ b/m4/sched_h.m4
@@ -0,0 +1,40 @@
+# sched_h.m4 serial 6
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Bruno Haible.
+
+AC_DEFUN([gl_SCHED_H],
+[
+  AC_COMPILE_IFELSE(
+    [AC_LANG_PROGRAM([[
+       #include <sched.h>
+       struct sched_param a;
+       int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER };
+       pid_t t1;
+     ]])],
+    [SCHED_H=''],
+    [SCHED_H='sched.h'
+
+     gl_CHECK_NEXT_HEADERS([sched.h])
+
+     if test $ac_cv_header_sched_h = yes; then
+       HAVE_SCHED_H=1
+     else
+       HAVE_SCHED_H=0
+     fi
+     AC_SUBST([HAVE_SCHED_H])
+
+     AC_CHECK_TYPE([struct sched_param],
+       [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0],
+       [#include <sched.h>])
+     AC_SUBST([HAVE_STRUCT_SCHED_PARAM])
+
+     dnl Ensure the type pid_t gets defined.
+     AC_REQUIRE([AC_TYPE_PID_T])
+    ])
+  AC_SUBST([SCHED_H])
+  AM_CONDITIONAL([GL_GENERATE_SCHED_H], [test -n "$SCHED_H"])
+])
diff --git a/m4/setenv.m4 b/m4/setenv.m4
new file mode 100644
index 0000000..e1931e7
--- /dev/null
+++ b/m4/setenv.m4
@@ -0,0 +1,160 @@
+# setenv.m4 serial 26
+dnl Copyright (C) 2001-2004, 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SETENV],
+[
+  AC_REQUIRE([gl_FUNC_SETENV_SEPARATE])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  if test $ac_cv_func_setenv = no; then
+    HAVE_SETENV=0
+  else
+    AC_CACHE_CHECK([whether setenv validates arguments],
+      [gl_cv_func_setenv_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+       #include <stdlib.h>
+       #include <errno.h>
+       #include <string.h>
+      ]], [[
+       int result = 0;
+       {
+         if (setenv ("", "", 0) != -1)
+           result |= 1;
+         else if (errno != EINVAL)
+           result |= 2;
+       }
+       {
+         if (setenv ("a", "=", 1) != 0)
+           result |= 4;
+         else if (strcmp (getenv ("a"), "=") != 0)
+           result |= 8;
+       }
+       return result;
+      ]])],
+      [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no],
+      [case "$host_os" in
+                 # Guess yes on glibc systems.
+         *-gnu*) gl_cv_func_setenv_works="guessing yes" ;;
+                 # If we don't know, assume the worst.
+         *)      gl_cv_func_setenv_works="guessing no" ;;
+       esac
+      ])])
+    case "$gl_cv_func_setenv_works" in
+      *yes) ;;
+      *)
+        REPLACE_SETENV=1
+        ;;
+    esac
+  fi
+])
+
+# Like gl_FUNC_SETENV, except prepare for separate compilation
+# (no REPLACE_SETENV, no AC_LIBOBJ).
+AC_DEFUN([gl_FUNC_SETENV_SEPARATE],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  AC_CHECK_DECLS_ONCE([setenv])
+  if test $ac_cv_have_decl_setenv = no; then
+    HAVE_DECL_SETENV=0
+  fi
+  AC_CHECK_FUNCS_ONCE([setenv])
+  gl_PREREQ_SETENV
+])
+
+AC_DEFUN([gl_FUNC_UNSETENV],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CHECK_DECLS_ONCE([unsetenv])
+  if test $ac_cv_have_decl_unsetenv = no; then
+    HAVE_DECL_UNSETENV=0
+  fi
+  AC_CHECK_FUNCS([unsetenv])
+  if test $ac_cv_func_unsetenv = no; then
+    HAVE_UNSETENV=0
+  else
+    HAVE_UNSETENV=1
+    dnl Some BSDs return void, failing to do error checking.
+    AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[
+#undef _BSD
+#define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */
+#include <stdlib.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+int unsetenv (const char *name);
+            ]],
+            [[]])],
+         [gt_cv_func_unsetenv_ret='int'],
+         [gt_cv_func_unsetenv_ret='void'])])
+    if test $gt_cv_func_unsetenv_ret = 'void'; then
+      AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void
+       instead of int.])
+      REPLACE_UNSETENV=1
+    fi
+
+    dnl Solaris 10 unsetenv does not remove all copies of a name.
+    dnl Haiku alpha 2 unsetenv gets confused by assignment to environ.
+    dnl OpenBSD 4.7 unsetenv("") does not fail.
+    AC_CACHE_CHECK([whether unsetenv obeys POSIX],
+      [gl_cv_func_unsetenv_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+       #include <stdlib.h>
+       #include <errno.h>
+       extern char **environ;
+      ]], [[
+       char entry1[] = "a=1";
+       char entry2[] = "b=2";
+       char *env[] = { entry1, entry2, NULL };
+       if (putenv ((char *) "a=1")) return 1;
+       if (putenv (entry2)) return 2;
+       entry2[0] = 'a';
+       unsetenv ("a");
+       if (getenv ("a")) return 3;
+       if (!unsetenv ("") || errno != EINVAL) return 4;
+       entry2[0] = 'b';
+       environ = env;
+       if (!getenv ("a")) return 5;
+       entry2[0] = 'a';
+       unsetenv ("a");
+       if (getenv ("a")) return 6;
+      ]])],
+      [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no],
+      [case "$host_os" in
+                 # Guess yes on glibc systems.
+         *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;;
+                 # If we don't know, assume the worst.
+         *)      gl_cv_func_unsetenv_works="guessing no" ;;
+       esac
+      ])])
+    case "$gl_cv_func_unsetenv_works" in
+      *yes) ;;
+      *)
+        REPLACE_UNSETENV=1
+        ;;
+    esac
+  fi
+])
+
+# Prerequisites of lib/setenv.c.
+AC_DEFUN([gl_PREREQ_SETENV],
+[
+  AC_REQUIRE([AC_FUNC_ALLOCA])
+  AC_REQUIRE([gl_ENVIRON])
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  AC_CHECK_HEADERS([search.h])
+  AC_CHECK_FUNCS([tsearch])
+])
+
+# Prerequisites of lib/unsetenv.c.
+AC_DEFUN([gl_PREREQ_UNSETENV],
+[
+  AC_REQUIRE([gl_ENVIRON])
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+])
diff --git a/m4/sig_atomic_t.m4 b/m4/sig_atomic_t.m4
new file mode 100644
index 0000000..acda356
--- /dev/null
+++ b/m4/sig_atomic_t.m4
@@ -0,0 +1,14 @@
+# sig_atomic_t.m4 serial 3
+dnl Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gt_TYPE_SIG_ATOMIC_T],
+[
+  AC_CHECK_TYPES([sig_atomic_t], ,
+    [AC_DEFINE([sig_atomic_t], [int],
+       [Define as an integer type suitable for memory locations that can be
+        accessed atomically even in the presence of asynchronous signals.])],
+    [#include <signal.h>])
+])
diff --git a/m4/sigaction.m4 b/m4/sigaction.m4
new file mode 100644
index 0000000..18bfd03
--- /dev/null
+++ b/m4/sigaction.m4
@@ -0,0 +1,40 @@
+# sigaction.m4 serial 7
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Determine if sigaction interface is present.
+AC_DEFUN([gl_SIGACTION],
+[
+  AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([sigaction])
+  if test $ac_cv_func_sigaction = yes; then
+    AC_CHECK_MEMBERS([struct sigaction.sa_sigaction], , ,
+                     [[#include <signal.h>]])
+    if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then
+      HAVE_STRUCT_SIGACTION_SA_SIGACTION=0
+    fi
+  else
+    HAVE_SIGACTION=0
+  fi
+])
+
+# Prerequisites of the part of lib/signal.in.h and of lib/sigaction.c.
+AC_DEFUN([gl_PREREQ_SIGACTION],
+[
+  AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+  AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([AC_TYPE_UID_T])
+  AC_REQUIRE([gl_PREREQ_SIG_HANDLER_H])
+  AC_CHECK_FUNCS_ONCE([sigaltstack siginterrupt])
+  AC_CHECK_TYPES([siginfo_t], [], [], [[
+#include <signal.h>
+  ]])
+  if test $ac_cv_type_siginfo_t = no; then
+    HAVE_SIGINFO_T=0
+  fi
+])
+
+# Prerequisites of lib/sig-handler.h.
+AC_DEFUN([gl_PREREQ_SIG_HANDLER_H], [:])
diff --git a/m4/signal_h.m4 b/m4/signal_h.m4
new file mode 100644
index 0000000..ed4d730
--- /dev/null
+++ b/m4/signal_h.m4
@@ -0,0 +1,83 @@
+# signal_h.m4 serial 18
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_SIGNAL_H],
+[
+  AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
+  gl_NEXT_HEADERS([signal.h])
+
+# AIX declares sig_atomic_t to already include volatile, and C89 compilers
+# then choke on 'volatile sig_atomic_t'.  C99 requires that it compile.
+  AC_CHECK_TYPE([volatile sig_atomic_t], [],
+    [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[
+#include <signal.h>
+    ]])
+
+  dnl Ensure the type pid_t gets defined.
+  AC_REQUIRE([AC_TYPE_PID_T])
+
+  AC_REQUIRE([AC_TYPE_UID_T])
+
+  dnl Persuade glibc <signal.h> to define sighandler_t.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_TYPE([sighandler_t], [], [HAVE_SIGHANDLER_T=0], [[
+#include <signal.h>
+    ]])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <signal.h>
+    ]], [pthread_sigmask sigaction
+    sigaddset sigdelset sigemptyset sigfillset sigismember
+    sigpending sigprocmask])
+])
+
+AC_DEFUN([gl_CHECK_TYPE_SIGSET_T],
+[
+  AC_CHECK_TYPES([sigset_t],
+    [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no],
+    [[
+      #include <signal.h>
+      /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.  */
+      #include <sys/types.h>
+    ]])
+  if test $gl_cv_type_sigset_t != yes; then
+    HAVE_SIGSET_T=0
+  fi
+])
+
+AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_SIGNAL_H_DEFAULTS],
+[
+  GNULIB_PTHREAD_SIGMASK=0;    AC_SUBST([GNULIB_PTHREAD_SIGMASK])
+  GNULIB_RAISE=0;              AC_SUBST([GNULIB_RAISE])
+  GNULIB_SIGNAL_H_SIGPIPE=0;   AC_SUBST([GNULIB_SIGNAL_H_SIGPIPE])
+  GNULIB_SIGPROCMASK=0;        AC_SUBST([GNULIB_SIGPROCMASK])
+  GNULIB_SIGACTION=0;          AC_SUBST([GNULIB_SIGACTION])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING])
+  HAVE_PTHREAD_SIGMASK=1;      AC_SUBST([HAVE_PTHREAD_SIGMASK])
+  HAVE_RAISE=1;                AC_SUBST([HAVE_RAISE])
+  HAVE_SIGSET_T=1;             AC_SUBST([HAVE_SIGSET_T])
+  HAVE_SIGINFO_T=1;            AC_SUBST([HAVE_SIGINFO_T])
+  HAVE_SIGACTION=1;            AC_SUBST([HAVE_SIGACTION])
+  HAVE_STRUCT_SIGACTION_SA_SIGACTION=1;
+                               AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION])
+  HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1;
+                               AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T])
+  HAVE_SIGHANDLER_T=1;         AC_SUBST([HAVE_SIGHANDLER_T])
+  REPLACE_PTHREAD_SIGMASK=0;   AC_SUBST([REPLACE_PTHREAD_SIGMASK])
+  REPLACE_RAISE=0;             AC_SUBST([REPLACE_RAISE])
+])
diff --git a/m4/signalblocking.m4 b/m4/signalblocking.m4
new file mode 100644
index 0000000..d3cbb84
--- /dev/null
+++ b/m4/signalblocking.m4
@@ -0,0 +1,25 @@
+# signalblocking.m4 serial 14
+dnl Copyright (C) 2001-2002, 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Determine available signal blocking primitives. Three different APIs exist:
+# 1) POSIX: sigemptyset, sigaddset, sigprocmask
+# 2) SYSV: sighold, sigrelse
+# 3) BSD: sigblock, sigsetmask
+# For simplicity, here we check only for the POSIX signal blocking.
+AC_DEFUN([gl_SIGNALBLOCKING],
+[
+  AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
+  if test $gl_cv_type_sigset_t = yes; then
+    AC_CHECK_FUNC([sigprocmask], [gl_cv_func_sigprocmask=1])
+  fi
+  if test -z "$gl_cv_func_sigprocmask"; then
+    HAVE_POSIX_SIGNALBLOCKING=0
+  fi
+])
+
+# Prerequisites of lib/sigprocmask.c.
+AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:])
diff --git a/m4/signbit.m4 b/m4/signbit.m4
new file mode 100644
index 0000000..fb707c9
--- /dev/null
+++ b/m4/signbit.m4
@@ -0,0 +1,365 @@
+# signbit.m4 serial 13
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_SIGNBIT],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <math.h>
+/* If signbit is defined as a function, don't use it, since calling it for
+   'float' or 'long double' arguments would involve conversions.
+   If signbit is not declared at all but exists as a library function, don't
+   use it, since the prototype may not match.
+   If signbit is not declared at all but exists as a compiler built-in, don't
+   use it, since it's preferable to use __builtin_signbit* (no warnings,
+   no conversions).  */
+#ifndef signbit
+# error "signbit should be a macro"
+#endif
+#include <string.h>
+]gl_SIGNBIT_TEST_PROGRAM
+])],
+        [gl_cv_func_signbit=yes],
+        [gl_cv_func_signbit=no],
+        [case "$host_os" in
+                   # Guess yes on glibc systems.
+           *-gnu*) gl_cv_func_signbit="guessing yes" ;;
+                   # If we don't know, assume the worst.
+           *)      gl_cv_func_signbit="guessing no" ;;
+         esac
+        ])
+    ])
+  dnl GCC 4.0 and newer provides three built-ins for signbit.
+  dnl They can be used without warnings, also in C++, regardless of <math.h>.
+  dnl But they may expand to calls to functions, which may or may not be in
+  dnl libc.
+  AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_gcc],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#if __GNUC__ >= 4
+# define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
+    __builtin_signbitf (x))
+#else
+# error "signbit should be three compiler built-ins"
+#endif
+#include <string.h>
+]gl_SIGNBIT_TEST_PROGRAM
+])],
+        [gl_cv_func_signbit_gcc=yes],
+        [gl_cv_func_signbit_gcc=no],
+        [case "$host_os" in
+                   # Guess yes on glibc systems.
+           *-gnu*) gl_cv_func_signbit_gcc="guessing yes" ;;
+                   # If we don't know, assume the worst.
+           *)      gl_cv_func_signbit_gcc="guessing no" ;;
+         esac
+        ])
+    ])
+  dnl Use the compiler built-ins whenever possible, because they are more
+  dnl efficient than the system library functions (if they exist).
+  case "$gl_cv_func_signbit_gcc" in
+    *yes)
+      REPLACE_SIGNBIT_USING_GCC=1
+      ;;
+    *)
+      case "$gl_cv_func_signbit" in
+        *yes) ;;
+        *)
+          dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built.
+          REPLACE_SIGNBIT=1
+          gl_FLOAT_SIGN_LOCATION
+          gl_DOUBLE_SIGN_LOCATION
+          gl_LONG_DOUBLE_SIGN_LOCATION
+          if test "$gl_cv_cc_float_signbit" = unknown; then
+            dnl Test whether copysignf() is declared.
+            AC_CHECK_DECLS([copysignf], , , [[#include <math.h>]])
+            if test "$ac_cv_have_decl_copysignf" = yes; then
+              dnl Test whether copysignf() can be used without libm.
+              AC_CACHE_CHECK([whether copysignf can be used without linking with libm],
+                [gl_cv_func_copysignf_no_libm],
+                [
+                  AC_LINK_IFELSE(
+                    [AC_LANG_PROGRAM(
+                       [[#include <math.h>
+                         float x, y;]],
+                       [[return copysignf (x, y) < 0;]])],
+                    [gl_cv_func_copysignf_no_libm=yes],
+                    [gl_cv_func_copysignf_no_libm=no])
+                ])
+              if test $gl_cv_func_copysignf_no_libm = yes; then
+                AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1],
+                  [Define if the copysignf function is declared in <math.h> and available in libc.])
+              fi
+            fi
+          fi
+          if test "$gl_cv_cc_double_signbit" = unknown; then
+            dnl Test whether copysign() is declared.
+            AC_CHECK_DECLS([copysign], , , [[#include <math.h>]])
+            if test "$ac_cv_have_decl_copysign" = yes; then
+              dnl Test whether copysign() can be used without libm.
+              AC_CACHE_CHECK([whether copysign can be used without linking with libm],
+                [gl_cv_func_copysign_no_libm],
+                [
+                  AC_LINK_IFELSE(
+                    [AC_LANG_PROGRAM(
+                       [[#include <math.h>
+                         double x, y;]],
+                       [[return copysign (x, y) < 0;]])],
+                    [gl_cv_func_copysign_no_libm=yes],
+                    [gl_cv_func_copysign_no_libm=no])
+                ])
+              if test $gl_cv_func_copysign_no_libm = yes; then
+                AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1],
+                  [Define if the copysign function is declared in <math.h> and available in libc.])
+              fi
+            fi
+          fi
+          if test "$gl_cv_cc_long_double_signbit" = unknown; then
+            dnl Test whether copysignl() is declared.
+            AC_CHECK_DECLS([copysignl], , , [[#include <math.h>]])
+            if test "$ac_cv_have_decl_copysignl" = yes; then
+              dnl Test whether copysignl() can be used without libm.
+              AC_CACHE_CHECK([whether copysignl can be used without linking with libm],
+                [gl_cv_func_copysignl_no_libm],
+                [
+                  AC_LINK_IFELSE(
+                    [AC_LANG_PROGRAM(
+                       [[#include <math.h>
+                         long double x, y;]],
+                       [[return copysignl (x, y) < 0;]])],
+                    [gl_cv_func_copysignl_no_libm=yes],
+                    [gl_cv_func_copysignl_no_libm=no])
+                ])
+              if test $gl_cv_func_copysignl_no_libm = yes; then
+                AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1],
+                  [Define if the copysignl function is declared in <math.h> and available in libc.])
+              fi
+            fi
+          fi
+          ;;
+      esac
+      ;;
+  esac
+])
+
+AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[
+/* Global variables.
+   Needed because GCC 4 constant-folds __builtin_signbitl (literal)
+   but cannot constant-fold            __builtin_signbitl (variable).  */
+float vf;
+double vd;
+long double vl;
+int main ()
+{
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   So we use -p0f and -p0d instead.  */
+float p0f = 0.0f;
+float m0f = -p0f;
+double p0d = 0.0;
+double m0d = -p0d;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use another constant expression instead.
+   But that expression does not work on other platforms, such as when
+   cross-compiling to PowerPC on Mac OS X 10.5.  */
+long double p0l = 0.0L;
+#if defined __hpux || defined __sgi
+long double m0l = -LDBL_MIN * LDBL_MIN;
+#else
+long double m0l = -p0l;
+#endif
+  int result = 0;
+  if (signbit (vf)) /* link check */
+    vf++;
+  {
+    float plus_inf = 1.0f / p0f;
+    float minus_inf = -1.0f / p0f;
+    if (!(!signbit (255.0f)
+          && signbit (-255.0f)
+          && !signbit (p0f)
+          && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 1;
+  }
+  if (signbit (vd)) /* link check */
+    vd++;
+  {
+    double plus_inf = 1.0 / p0d;
+    double minus_inf = -1.0 / p0d;
+    if (!(!signbit (255.0)
+          && signbit (-255.0)
+          && !signbit (p0d)
+          && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 2;
+  }
+  if (signbit (vl)) /* link check */
+    vl++;
+  {
+    long double plus_inf = 1.0L / p0l;
+    long double minus_inf = -1.0L / p0l;
+    if (signbit (255.0L))
+      result |= 4;
+    if (!signbit (-255.0L))
+      result |= 4;
+    if (signbit (p0l))
+      result |= 8;
+    if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)))
+      result |= 16;
+    if (signbit (plus_inf))
+      result |= 32;
+    if (!signbit (minus_inf))
+      result |= 64;
+  }
+  return result;
+}
+]])
+
+AC_DEFUN([gl_FLOAT_SIGN_LOCATION],
+[
+  gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT])
+])
+
+AC_DEFUN([gl_DOUBLE_SIGN_LOCATION],
+[
+  gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL])
+])
+
+AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION],
+[
+  gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL])
+])
+
+AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION],
+[
+  AC_CACHE_CHECK([where to find the sign bit in a '$1'],
+    [$2],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stddef.h>
+#include <stdio.h>
+#define NWORDS \
+  ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { $1 value; unsigned int word[NWORDS]; }
+        memory_float;
+static memory_float plus = { 1.0$3 };
+static memory_float minus = { -1.0$3 };
+int main ()
+{
+  size_t j, k, i;
+  unsigned int m;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  /* Find the different bit.  */
+  k = 0; m = 0;
+  for (j = 0; j < NWORDS; j++)
+    {
+      unsigned int x = plus.word[j] ^ minus.word[j];
+      if ((x & (x - 1)) || (x && m))
+        {
+          /* More than one bit difference.  */
+          fprintf (fp, "unknown");
+          return 2;
+        }
+      if (x)
+        {
+          k = j;
+          m = x;
+        }
+    }
+  if (m == 0)
+    {
+      /* No difference.  */
+      fprintf (fp, "unknown");
+      return 3;
+    }
+  /* Now m = plus.word[k] ^ ~minus.word[k].  */
+  if (plus.word[k] & ~minus.word[k])
+    {
+      /* Oh? The sign bit is set in the positive and cleared in the negative
+         numbers?  */
+      fprintf (fp, "unknown");
+      return 4;
+    }
+  for (i = 0; ; i++)
+    if ((m >> i) & 1)
+      break;
+  fprintf (fp, "word %d bit %d", (int) k, (int) i);
+  if (fclose (fp) != 0)
+    return 5;
+  return 0;
+}
+        ]])],
+        [$2=`cat conftest.out`],
+        [$2="unknown"],
+        [
+          dnl When cross-compiling, we don't know. It depends on the
+          dnl ABI and compiler version. There are too many cases.
+          $2="unknown"
+        ])
+      rm -f conftest.out
+    ])
+  case "$]$2[" in
+    word*bit*)
+      word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$]$2[" | sed -e 's/word.*bit //'`
+      AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word],
+        [Define as the word index where to find the sign of '$1'.])
+      AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit],
+        [Define as the bit index in the word where to find the sign of '$1'.])
+      ;;
+  esac
+])
+
+# Expands to code that defines a function signbitf(float).
+# It extracts the sign bit of a non-NaN value.
+AC_DEFUN([gl_FLOAT_SIGNBIT_CODE],
+[
+  gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f])
+])
+
+# Expands to code that defines a function signbitd(double).
+# It extracts the sign bit of a non-NaN value.
+AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE],
+[
+  gl_FLOATTYPE_SIGNBIT_CODE([double], [d], [])
+])
+
+# Expands to code that defines a function signbitl(long double).
+# It extracts the sign bit of a non-NaN value.
+AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE],
+[
+  gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L])
+])
+
+AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE],
+[[
+static int
+signbit$2 ($1 value)
+{
+  typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union;
+  static float_union plus_one = { 1.0$3 };   /* unused bits are zero here */
+  static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */
+  /* Compute the sign bit mask as the XOR of plus_one and minus_one.  */
+  float_union u;
+  unsigned int i;
+  u.f = value;
+  for (i = 0; i < sizeof ($1); i++)
+    if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i]))
+      return 1;
+  return 0;
+}
+]])
diff --git a/m4/size_max.m4 b/m4/size_max.m4
new file mode 100644
index 0000000..5a8162b
--- /dev/null
+++ b/m4/size_max.m4
@@ -0,0 +1,79 @@
+# size_max.m4 serial 10
+dnl Copyright (C) 2003, 2005-2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+  AC_CHECK_HEADERS([stdint.h])
+  dnl First test whether the system already has SIZE_MAX.
+  AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
+    gl_cv_size_max=
+    AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], [gl_cv_size_max=yes])
+    if test -z "$gl_cv_size_max"; then
+      dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+      dnl than the type 'unsigned long'. Try hard to find a definition that can
+      dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
+      AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
+        [#include <stddef.h>
+#include <limits.h>], [size_t_bits_minus_1=])
+      AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
+        [#include <stddef.h>], [fits_in_uint=])
+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+        if test $fits_in_uint = 1; then
+          dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+          dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+          AC_COMPILE_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <stddef.h>
+                 extern size_t foo;
+                 extern unsigned long foo;
+               ]],
+               [[]])],
+            [fits_in_uint=0])
+        fi
+        dnl We cannot use 'expr' to simplify this expression, because 'expr'
+        dnl works only with 'long' integers in the host environment, while we
+        dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
+        if test $fits_in_uint = 1; then
+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        else
+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        fi
+      else
+        dnl Shouldn't happen, but who knows...
+        gl_cv_size_max='((size_t)~(size_t)0)'
+      fi
+    fi
+  ])
+  if test "$gl_cv_size_max" != yes; then
+    AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
+      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+  fi
+  dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
+  dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
+  dnl #define by AC_DEFINE_UNQUOTED.
+  AH_VERBATIM([SIZE_MAX],
+[/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+# undef SIZE_MAX
+#endif])
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
diff --git a/m4/snprintf-posix.m4 b/m4/snprintf-posix.m4
new file mode 100644
index 0000000..fc6c24b
--- /dev/null
+++ b/m4/snprintf-posix.m4
@@ -0,0 +1,126 @@
+# snprintf-posix.m4 serial 14
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SNPRINTF_POSIX],
+[
+  AC_REQUIRE([gl_PRINTF_SIZES_C99])
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  AC_REQUIRE([gl_PRINTF_POSITIONS])
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  gl_cv_func_snprintf_posix=no
+  AC_CHECK_FUNCS([snprintf])
+  if test $ac_cv_func_snprintf = yes; then
+    gl_SNPRINTF_TRUNCATION_C99
+    gl_SNPRINTF_RETVAL_C99
+    gl_SNPRINTF_DIRECTIVE_N
+    gl_SNPRINTF_SIZE1
+    gl_VSNPRINTF_ZEROSIZE_C99
+    case "$gl_cv_func_printf_sizes_c99" in
+      *yes)
+        case "$gl_cv_func_printf_long_double" in
+          *yes)
+            case "$gl_cv_func_printf_infinite" in
+              *yes)
+                case "$gl_cv_func_printf_infinite_long_double" in
+                  *yes)
+                    case "$gl_cv_func_printf_directive_a" in
+                      *yes)
+                        case "$gl_cv_func_printf_directive_f" in
+                          *yes)
+                            case "$gl_cv_func_printf_directive_n" in
+                              *yes)
+                                case "$gl_cv_func_printf_directive_ls" in
+                                  *yes)
+                                    case "$gl_cv_func_printf_positions" in
+                                      *yes)
+                                        case "$gl_cv_func_printf_flag_grouping" in
+                                          *yes)
+                                            case "$gl_cv_func_printf_flag_leftadjust" in
+                                              *yes)
+                                                case "$gl_cv_func_printf_flag_zero" in
+                                                  *yes)
+                                                    case "$gl_cv_func_printf_precision" in
+                                                      *yes)
+                                                        case "$gl_cv_func_printf_enomem" in
+                                                          *yes)
+                                                            case "$gl_cv_func_snprintf_truncation_c99" in
+                                                              *yes)
+                                                                case "$gl_cv_func_snprintf_retval_c99" in
+                                                                  *yes)
+                                                                    case "$gl_cv_func_snprintf_directive_n" in
+                                                                      *yes)
+                                                                        case "$gl_cv_func_snprintf_size1" in
+                                                                          *yes)
+                                                                            case "$gl_cv_func_vsnprintf_zerosize_c99" in
+                                                                              *yes)
+                                                                                # snprintf exists and is
+                                                                                # already POSIX compliant.
+                                                                                gl_cv_func_snprintf_posix=yes
+                                                                                ;;
+                                                                            esac
+                                                                            ;;
+                                                                        esac
+                                                                        ;;
+                                                                    esac
+                                                                    ;;
+                                                                esac
+                                                                ;;
+                                                            esac
+                                                            ;;
+                                                        esac
+                                                        ;;
+                                                    esac
+                                                    ;;
+                                                esac
+                                                ;;
+                                            esac
+                                            ;;
+                                        esac
+                                        ;;
+                                    esac
+                                    ;;
+                                esac
+                                ;;
+                            esac
+                            ;;
+                        esac
+                        ;;
+                    esac
+                    ;;
+                esac
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_snprintf_posix = no; then
+    gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+    gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+    gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+    gl_PREREQ_VASNPRINTF_FLAG_ZERO
+    gl_PREREQ_VASNPRINTF_PRECISION
+    gl_PREREQ_VASNPRINTF_ENOMEM
+    gl_REPLACE_VASNPRINTF
+    gl_REPLACE_SNPRINTF
+  fi
+])
diff --git a/m4/snprintf.m4 b/m4/snprintf.m4
new file mode 100644
index 0000000..de94edd
--- /dev/null
+++ b/m4/snprintf.m4
@@ -0,0 +1,54 @@
+# snprintf.m4 serial 6
+dnl Copyright (C) 2002-2004, 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Libintl 0.17 will replace snprintf only if it does not support %1$s,
+dnl but defers to any gnulib snprintf replacements.  Therefore, gnulib
+dnl must guarantee that the decision for replacing snprintf is a superset
+dnl of the reasons checked by libintl.
+AC_DEFUN([gl_FUNC_SNPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  gl_cv_func_snprintf_usable=no
+  AC_CHECK_FUNCS([snprintf])
+  if test $ac_cv_func_snprintf = yes; then
+    gl_SNPRINTF_SIZE1
+    case "$gl_cv_func_snprintf_size1" in
+      *yes)
+        gl_SNPRINTF_RETVAL_C99
+        case "$gl_cv_func_snprintf_retval_c99" in
+          *yes)
+            gl_PRINTF_POSITIONS
+            case "$gl_cv_func_printf_positions" in
+              *yes)
+                gl_cv_func_snprintf_usable=yes
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_snprintf_usable = no; then
+    gl_REPLACE_SNPRINTF
+  fi
+  AC_CHECK_DECLS_ONCE([snprintf])
+  if test $ac_cv_have_decl_snprintf = no; then
+    HAVE_DECL_SNPRINTF=0
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_SNPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([snprintf])
+  if test $ac_cv_func_snprintf = yes; then
+    REPLACE_SNPRINTF=1
+  fi
+  gl_PREREQ_SNPRINTF
+])
+
+# Prerequisites of lib/snprintf.c.
+AC_DEFUN([gl_PREREQ_SNPRINTF], [:])
diff --git a/m4/spawn-pipe.m4 b/m4/spawn-pipe.m4
new file mode 100644
index 0000000..d598ddd
--- /dev/null
+++ b/m4/spawn-pipe.m4
@@ -0,0 +1,11 @@
+# spawn-pipe.m4 serial 2
+dnl Copyright (C) 2004, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_SPAWN_PIPE],
+[
+  dnl Prerequisites of lib/spawn-pipe.c.
+  AC_REQUIRE([AC_TYPE_MODE_T])
+])
diff --git a/m4/spawn_h.m4 b/m4/spawn_h.m4
new file mode 100644
index 0000000..26fec8e
--- /dev/null
+++ b/m4/spawn_h.m4
@@ -0,0 +1,117 @@
+# spawn_h.m4 serial 16
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Bruno Haible.
+
+AC_DEFUN([gl_SPAWN_H],
+[
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_SPAWN_H_DEFAULTS])
+
+  dnl <spawn.h> is always overridden, because of GNULIB_POSIXCHECK.
+  gl_CHECK_NEXT_HEADERS([spawn.h])
+
+  if test $ac_cv_header_spawn_h = yes; then
+    HAVE_SPAWN_H=1
+    AC_CHECK_TYPES([posix_spawnattr_t], [], [HAVE_POSIX_SPAWNATTR_T=0], [[
+#include <spawn.h>
+      ]])
+    AC_CHECK_TYPES([posix_spawn_file_actions_t], [],
+      [HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0], [[
+#include <spawn.h>
+      ]])
+  else
+    HAVE_SPAWN_H=0
+    HAVE_POSIX_SPAWNATTR_T=0
+    HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0
+  fi
+  AC_SUBST([HAVE_SPAWN_H])
+
+  dnl Ensure the type pid_t gets defined.
+  AC_REQUIRE([AC_TYPE_PID_T])
+
+  dnl Ensure the type mode_t gets defined.
+  AC_REQUIRE([AC_TYPE_MODE_T])
+
+  AC_REQUIRE([gl_HAVE_POSIX_SPAWN])
+
+  AC_REQUIRE([AC_C_RESTRICT])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <spawn.h>
+    ]], [posix_spawn posix_spawnp posix_spawnattr_init posix_spawnattr_destroy
+    posix_spawnattr_getsigdefault posix_spawnattr_setsigdefault
+    posix_spawnattr_getsigmask posix_spawnattr_setsigmask
+    posix_spawnattr_getflags posix_spawnattr_setflags
+    posix_spawnattr_getpgroup posix_spawnattr_setpgroup
+    posix_spawnattr_getschedpolicy posix_spawnattr_setschedpolicy
+    posix_spawnattr_getschedparam posix_spawnattr_setschedparam
+    posix_spawn_file_actions_init posix_spawn_file_actions_destroy
+    posix_spawn_file_actions_addopen posix_spawn_file_actions_addclose
+    posix_spawn_file_actions_adddup2])
+])
+
+dnl Checks whether the system has the functions posix_spawn.
+dnl Sets ac_cv_func_posix_spawn and HAVE_POSIX_SPAWN.
+AC_DEFUN([gl_HAVE_POSIX_SPAWN],
+[
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_SPAWN_H_DEFAULTS])
+
+  AC_CHECK_FUNCS_ONCE([posix_spawn])
+  if test $ac_cv_func_posix_spawn != yes; then
+    HAVE_POSIX_SPAWN=0
+  fi
+])
+
+AC_DEFUN([gl_SPAWN_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_SPAWN_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_SPAWN_H_DEFAULTS],
+[
+  GNULIB_POSIX_SPAWN=0;                       AC_SUBST([GNULIB_POSIX_SPAWN])
+  GNULIB_POSIX_SPAWNP=0;                      AC_SUBST([GNULIB_POSIX_SPAWNP])
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0;     AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT])
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE])
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0;  AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2])
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0;  AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN])
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0;  AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY])
+  GNULIB_POSIX_SPAWNATTR_INIT=0;              AC_SUBST([GNULIB_POSIX_SPAWNATTR_INIT])
+  GNULIB_POSIX_SPAWNATTR_GETFLAGS=0;          AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETFLAGS])
+  GNULIB_POSIX_SPAWNATTR_SETFLAGS=0;          AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETFLAGS])
+  GNULIB_POSIX_SPAWNATTR_GETPGROUP=0;         AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETPGROUP])
+  GNULIB_POSIX_SPAWNATTR_SETPGROUP=0;         AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETPGROUP])
+  GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0;     AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM])
+  GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0;     AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM])
+  GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0;    AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY])
+  GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0;    AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY])
+  GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0;     AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT])
+  GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0;     AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT])
+  GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0;        AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGMASK])
+  GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0;        AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGMASK])
+  GNULIB_POSIX_SPAWNATTR_DESTROY=0;           AC_SUBST([GNULIB_POSIX_SPAWNATTR_DESTROY])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_POSIX_SPAWN=1;        AC_SUBST([HAVE_POSIX_SPAWN])
+  HAVE_POSIX_SPAWNATTR_T=1;  AC_SUBST([HAVE_POSIX_SPAWNATTR_T])
+  HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1;
+                             AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_T])
+  REPLACE_POSIX_SPAWN=0;     AC_SUBST([REPLACE_POSIX_SPAWN])
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0;
+                             AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE])
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0;
+                             AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2])
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0;
+                             AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN])
+])
diff --git a/m4/sprintf-posix.m4 b/m4/sprintf-posix.m4
new file mode 100644
index 0000000..2ef5222
--- /dev/null
+++ b/m4/sprintf-posix.m4
@@ -0,0 +1,108 @@
+# sprintf-posix.m4 serial 12
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SPRINTF_POSIX],
+[
+  AC_REQUIRE([gl_PRINTF_SIZES_C99])
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  AC_REQUIRE([gl_PRINTF_POSITIONS])
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  gl_cv_func_sprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # sprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_sprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_sprintf_posix = no; then
+    gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+    gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+    gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+    gl_PREREQ_VASNPRINTF_FLAG_ZERO
+    gl_PREREQ_VASNPRINTF_PRECISION
+    gl_PREREQ_VASNPRINTF_ENOMEM
+    gl_REPLACE_VASNPRINTF
+    gl_REPLACE_SPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_SPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([sprintf])
+  REPLACE_SPRINTF=1
+  gl_PREREQ_SPRINTF
+])
+
+AC_DEFUN([gl_PREREQ_SPRINTF], [:])
diff --git a/m4/ssize_t.m4 b/m4/ssize_t.m4
new file mode 100644
index 0000000..209d64c
--- /dev/null
+++ b/m4/ssize_t.m4
@@ -0,0 +1,23 @@
+# ssize_t.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2001-2003, 2006, 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether ssize_t is defined.
+
+AC_DEFUN([gt_TYPE_SSIZE_T],
+[
+  AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>]],
+          [[int x = sizeof (ssize_t *) + sizeof (ssize_t);
+            return !x;]])],
+       [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])])
+  if test $gt_cv_ssize_t = no; then
+    AC_DEFINE([ssize_t], [int],
+              [Define as a signed type of the same size as size_t.])
+  fi
+])
diff --git a/m4/stat.m4 b/m4/stat.m4
new file mode 100644
index 0000000..0fd117e
--- /dev/null
+++ b/m4/stat.m4
@@ -0,0 +1,71 @@
+# serial 11
+
+# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STAT],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([lstat])
+  dnl mingw is the only known platform where stat(".") and stat("./") differ
+  AC_CACHE_CHECK([whether stat handles trailing slashes on directories],
+      [gl_cv_func_stat_dir_slash],
+      [AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <sys/stat.h>
+]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])],
+         [gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no],
+         [case $host_os in
+            mingw*) gl_cv_func_stat_dir_slash="guessing no";;
+            *) gl_cv_func_stat_dir_slash="guessing yes";;
+          esac])])
+  dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/").
+  dnl (For mingw, this is due to a broken stat() override in libmingwex.a.)
+  dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/").
+  AC_CACHE_CHECK([whether stat handles trailing slashes on files],
+      [gl_cv_func_stat_file_slash],
+      [touch conftest.tmp
+       # Assume that if we have lstat, we can also check symlinks.
+       if test $ac_cv_func_lstat = yes; then
+         ln -s conftest.tmp conftest.lnk
+       fi
+       AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <sys/stat.h>
+]], [[int result = 0;
+      struct stat st;
+      if (!stat ("conftest.tmp/", &st))
+        result |= 1;
+#if HAVE_LSTAT
+      if (!stat ("conftest.lnk/", &st))
+        result |= 2;
+#endif
+      return result;
+           ]])],
+         [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
+         [case "$host_os" in
+                    # Guess yes on glibc systems.
+            *-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
+                    # If we don't know, assume the worst.
+            *)      gl_cv_func_stat_file_slash="guessing no" ;;
+          esac
+         ])
+       rm -f conftest.tmp conftest.lnk])
+  case $gl_cv_func_stat_dir_slash in
+    *no) REPLACE_STAT=1
+      AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs
+        help when passed a directory name with a trailing slash]);;
+  esac
+  case $gl_cv_func_stat_file_slash in
+    *no) REPLACE_STAT=1
+      AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs
+        help when passed a file name with a trailing slash]);;
+  esac
+])
+
+# Prerequisites of lib/stat.c.
+AC_DEFUN([gl_PREREQ_STAT], [:])
diff --git a/m4/stdbool.m4 b/m4/stdbool.m4
index 2204ecd..eabfa64 100644
--- a/m4/stdbool.m4
+++ b/m4/stdbool.m4
@@ -1,15 +1,17 @@
 # Check for stdbool.h that conforms to C99.
 
-dnl Copyright (C) 2002-2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
+#serial 5
+
 # Prepare for substituting <stdbool.h> if it is not supported.
 
 AC_DEFUN([AM_STDBOOL_H],
 [
-  AC_REQUIRE([AC_HEADER_STDBOOL])
+  AC_REQUIRE([AC_CHECK_HEADER_STDBOOL])
 
   # Define two additional variables used in the Makefile substitution.
 
@@ -19,6 +21,7 @@
     STDBOOL_H='stdbool.h'
   fi
   AC_SUBST([STDBOOL_H])
+  AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"])
 
   if test "$ac_cv_type__Bool" = yes; then
     HAVE__BOOL=1
@@ -31,85 +34,67 @@
 # AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
 AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
 
-# This macro is only needed in autoconf <= 2.59.  Newer versions of autoconf
-# have this macro built-in.
+# This version of the macro is needed in autoconf <= 2.68.
 
-AC_DEFUN([AC_HEADER_STDBOOL],
+AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
   [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
      [ac_cv_header_stdbool_h],
-     [AC_TRY_COMPILE(
-	[
-	  #include <stdbool.h>
-	  #ifndef bool
-	   "error: bool is not defined"
-	  #endif
-	  #ifndef false
-	   "error: false is not defined"
-	  #endif
-	  #if false
-	   "error: false is not 0"
-	  #endif
-	  #ifndef true
-	   "error: true is not defined"
-	  #endif
-	  #if true != 1
-	   "error: true is not 1"
-	  #endif
-	  #ifndef __bool_true_false_are_defined
-	   "error: __bool_true_false_are_defined is not defined"
-	  #endif
+     [AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[
+             #include <stdbool.h>
+             #ifndef bool
+              "error: bool is not defined"
+             #endif
+             #ifndef false
+              "error: false is not defined"
+             #endif
+             #if false
+              "error: false is not 0"
+             #endif
+             #ifndef true
+              "error: true is not defined"
+             #endif
+             #if true != 1
+              "error: true is not 1"
+             #endif
+             #ifndef __bool_true_false_are_defined
+              "error: __bool_true_false_are_defined is not defined"
+             #endif
 
-	  struct s { _Bool s: 1; _Bool t; } s;
+             struct s { _Bool s: 1; _Bool t; } s;
 
-	  char a[true == 1 ? 1 : -1];
-	  char b[false == 0 ? 1 : -1];
-	  char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-	  char d[(bool) 0.5 == true ? 1 : -1];
-	  bool e = &s;
-	  char f[(_Bool) 0.0 == false ? 1 : -1];
-	  char g[true];
-	  char h[sizeof (_Bool)];
-	  char i[sizeof s.t];
-	  enum { j = false, k = true, l = false * true, m = true * 256 };
-	  _Bool n[m];
-	  char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-	  char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-	  #if defined __xlc__ || defined __GNUC__
-	   /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
-	      reported by James Lemley on 2005-10-05; see
-	      http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-	      This test is not quite right, since xlc is allowed to
-	      reject this program, as the initializer for xlcbug is
-	      not one of the forms that C requires support for.
-	      However, doing the test right would require a run-time
-	      test, and that would make cross-compilation harder.
-	      Let us hope that IBM fixes the xlc bug, and also adds
-	      support for this kind of constant expression.  In the
-	      meantime, this test will reject xlc, which is OK, since
-	      our stdbool.h substitute should suffice.  We also test
-	      this with GCC, where it should work, to detect more
-	      quickly whether someone messes up the test in the
-	      future.  */
-	   char digs[] = "0123456789";
-	   int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
-	  #endif
-	  /* Catch a bug in an HP-UX C compiler.  See
-	     http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-	     http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-	   */
-	  _Bool q = true;
-	  _Bool *pq = &q;
-	],
-	[
-	  *pq |= q;
-	  *pq |= ! q;
-	  /* Refer to every declared value, to avoid compiler optimizations.  */
-	  return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-		  + !m + !n + !o + !p + !q + !pq);
-	],
-	[ac_cv_header_stdbool_h=yes],
-	[ac_cv_header_stdbool_h=no])])
+             char a[true == 1 ? 1 : -1];
+             char b[false == 0 ? 1 : -1];
+             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+             char d[(bool) 0.5 == true ? 1 : -1];
+             /* See body of main program for 'e'.  */
+             char f[(_Bool) 0.0 == false ? 1 : -1];
+             char g[true];
+             char h[sizeof (_Bool)];
+             char i[sizeof s.t];
+             enum { j = false, k = true, l = false * true, m = true * 256 };
+             /* The following fails for
+                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+             _Bool n[m];
+             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+             /* Catch a bug in an HP-UX C compiler.  See
+                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+              */
+             _Bool q = true;
+             _Bool *pq = &q;
+           ]],
+           [[
+             bool e = &s;
+             *pq |= q;
+             *pq |= ! q;
+             /* Refer to every declared value, to avoid compiler optimizations.  */
+             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+                     + !m + !n + !o + !p + !q + !pq);
+           ]])],
+        [ac_cv_header_stdbool_h=yes],
+        [ac_cv_header_stdbool_h=no])])
    AC_CHECK_TYPES([_Bool])
-   if test $ac_cv_header_stdbool_h = yes; then
-     AC_DEFINE(HAVE_STDBOOL_H, 1, [Define to 1 if stdbool.h conforms to C99.])
-   fi])
+])
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
new file mode 100644
index 0000000..cc11609
--- /dev/null
+++ b/m4/stddef_h.m4
@@ -0,0 +1,47 @@
+dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
+# stddef_h.m4 serial 4
+dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDDEF_H],
+[
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  STDDEF_H=
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
+    [gl_cv_decl_null_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+]])],
+      [gl_cv_decl_null_works=yes],
+      [gl_cv_decl_null_works=no])])
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+  AC_SUBST([STDDEF_H])
+  AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"])
+  if test -n "$STDDEF_H"; then
+    gl_NEXT_HEADERS([stddef.h])
+  fi
+])
+
+AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+AC_DEFUN([gl_STDDEF_H_DEFAULTS],
+[
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
+  HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
+])
diff --git a/m4/stdint.m4 b/m4/stdint.m4
new file mode 100644
index 0000000..28d342e
--- /dev/null
+++ b/m4/stdint.m4
@@ -0,0 +1,484 @@
+# stdint.m4 serial 43
+dnl Copyright (C) 2001-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Bruno Haible.
+dnl Test whether <stdint.h> is supported or must be substituted.
+
+AC_DEFUN_ONCE([gl_STDINT_H],
+[
+  AC_PREREQ([2.59])dnl
+
+  dnl Check for long long int and unsigned long long int.
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+  AC_SUBST([HAVE_LONG_LONG_INT])
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+  AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
+
+  dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does.
+  AC_CHECK_HEADERS_ONCE([wchar.h])
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+  AC_SUBST([HAVE_WCHAR_H])
+
+  dnl Check for <inttypes.h>.
+  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
+  if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+  AC_SUBST([HAVE_INTTYPES_H])
+
+  dnl Check for <sys/types.h>.
+  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
+  if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+  AC_SUBST([HAVE_SYS_TYPES_H])
+
+  gl_CHECK_NEXT_HEADERS([stdint.h])
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+  AC_SUBST([HAVE_STDINT_H])
+
+  dnl Now see whether we need a substitute <stdint.h>.
+  if test $ac_cv_header_stdint_h = yes; then
+    AC_CACHE_CHECK([whether stdint.h conforms to C99],
+      [gl_cv_header_working_stdint_h],
+      [gl_cv_header_working_stdint_h=no
+       AC_COMPILE_IFELSE([
+         AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+]
+gl_STDINT_INCLUDES
+[
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 \
+        ? (t) -1 \
+        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+         ]])],
+         [dnl Determine whether the various *_MIN, *_MAX macros are usable
+          dnl in preprocessor expression. We could do it by compiling a test
+          dnl program for each of these macros. It is faster to run a program
+          dnl that inspects the macro expansion.
+          dnl This detects a bug on HP-UX 11.23/ia64.
+          AC_RUN_IFELSE([
+            AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+]], [[
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return mv - macro_values + 1;
+    }
+  return 0;
+]])],
+              [gl_cv_header_working_stdint_h=yes],
+              [],
+              [dnl When cross-compiling, assume it works.
+               gl_cv_header_working_stdint_h=yes
+              ])
+         ])
+      ])
+  fi
+  if test "$gl_cv_header_working_stdint_h" = yes; then
+    STDINT_H=
+  else
+    dnl Check for <sys/inttypes.h>, and for
+    dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
+    AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
+    if test $ac_cv_header_sys_inttypes_h = yes; then
+      HAVE_SYS_INTTYPES_H=1
+    else
+      HAVE_SYS_INTTYPES_H=0
+    fi
+    AC_SUBST([HAVE_SYS_INTTYPES_H])
+    if test $ac_cv_header_sys_bitypes_h = yes; then
+      HAVE_SYS_BITYPES_H=1
+    else
+      HAVE_SYS_BITYPES_H=0
+    fi
+    AC_SUBST([HAVE_SYS_BITYPES_H])
+
+    gl_STDINT_TYPE_PROPERTIES
+    STDINT_H=stdint.h
+  fi
+  AC_SUBST([STDINT_H])
+  AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
+])
+
+dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
+dnl Determine the size of each of the given types in bits.
+AC_DEFUN([gl_STDINT_BITSIZEOF],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+       [Define to the number of bits in type ']gltype['.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
+      [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
+         [$2
+#include <limits.h>], [result=unknown])
+       eval gl_cv_bitsizeof_${gltype}=\$result
+      ])
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+      dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
+      dnl do a syntax check even on unused #if conditions and give an error
+      dnl on valid C code like this:
+      dnl   #if 0
+      dnl   # if  > 32
+      dnl   # endif
+      dnl   #endif
+      result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
+dnl Determine the signedness of each of the given types.
+dnl Define HAVE_SIGNED_TYPE if type is signed.
+AC_DEFUN([gl_CHECK_TYPES_SIGNED],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+       [Define to 1 if ']gltype[' is a signed integer type.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM([$2[
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
+         result=yes, result=no)
+       eval gl_cv_type_${gltype}_signed=\$result
+      ])
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
+dnl Determine the suffix to use for integer constants of the given types.
+dnl Define t_SUFFIX for each such type.
+AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
+       [Define to l, ll, u, ul, ull, etc., as suitable for
+        constants of type ']gltype['.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([for $gltype integer literal suffix],
+      [gl_cv_type_${gltype}_suffix],
+      [eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM([$2[
+              extern $gltype foo;
+              extern $gltype1 foo;]])],
+           [eval gl_cv_type_${gltype}_suffix=\$glsuf])
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done])
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
+])
+
+dnl gl_STDINT_INCLUDES
+AC_DEFUN([gl_STDINT_INCLUDES],
+[[
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+]])
+
+dnl gl_STDINT_TYPE_PROPERTIES
+dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
+dnl of interest to stdint.in.h.
+AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
+[
+  AC_REQUIRE([gl_MULTIARCH])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
+      [gl_STDINT_INCLUDES])
+  fi
+  gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+  gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
+      [gl_STDINT_INCLUDES])
+  fi
+  gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+
+  dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99
+  dnl requirement that wint_t is "unchanged by default argument promotions".
+  dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t.
+  dnl Set the variable BITSIZEOF_WINT_T accordingly.
+  if test $BITSIZEOF_WINT_T -lt 32; then
+    BITSIZEOF_WINT_T=32
+  fi
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
+
+# Hey Emacs!
+# Local Variables:
+# indent-tabs-mode: nil
+# End:
diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4
new file mode 100644
index 0000000..581de96
--- /dev/null
+++ b/m4/stdint_h.m4
@@ -0,0 +1,27 @@
+# stdint_h.m4 serial 9
+dnl Copyright (C) 1997-2004, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>
+            #include <stdint.h>]],
+          [[uintmax_t i = (uintmax_t) -1; return !i;]])],
+       [gl_cv_header_stdint_h=yes],
+       [gl_cv_header_stdint_h=no])])
+  if test $gl_cv_header_stdint_h = yes; then
+    AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1],
+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/stdint_h_gl.m4 b/m4/stdint_h_gl.m4
deleted file mode 100644
index 3355f35..0000000
--- a/m4/stdint_h_gl.m4
+++ /dev/null
@@ -1,26 +0,0 @@
-# stdint_h.m4 serial 5
-dnl Copyright (C) 1997-2004 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_DEFUN([gl_AC_HEADER_STDINT_H],
-[
-  AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h,
-  [AC_TRY_COMPILE(
-    [#include <sys/types.h>
-#include <stdint.h>],
-    [uintmax_t i = (uintmax_t) -1;],
-    gl_cv_header_stdint_h=yes,
-    gl_cv_header_stdint_h=no)])
-  if test $gl_cv_header_stdint_h = yes; then
-    AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
-      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
-       and declares uintmax_t. ])
-  fi
-])
diff --git a/m4/stdio-safer.m4 b/m4/stdio-safer.m4
deleted file mode 100644
index cb60acb..0000000
--- a/m4/stdio-safer.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-#serial 5
-dnl Copyright (C) 2002, 2005 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_STDIO_SAFER],
-[
-  AC_LIBSOURCES([fopen-safer.c, stdio-safer.h, stdio--.h])
-  AC_LIBOBJ([fopen-safer])
-])
diff --git a/m4/stdio_h.m4 b/m4/stdio_h.m4
new file mode 100644
index 0000000..3bd6580
--- /dev/null
+++ b/m4/stdio_h.m4
@@ -0,0 +1,194 @@
+# stdio_h.m4 serial 43
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDIO_H],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  gl_NEXT_HEADERS([stdio.h])
+
+  dnl No need to create extra modules for these functions. Everyone who uses
+  dnl <stdio.h> likely needs them.
+  GNULIB_FSCANF=1
+  gl_MODULE_INDICATOR([fscanf])
+  GNULIB_SCANF=1
+  gl_MODULE_INDICATOR([scanf])
+  GNULIB_FGETC=1
+  GNULIB_GETC=1
+  GNULIB_GETCHAR=1
+  GNULIB_FGETS=1
+  GNULIB_FREAD=1
+  dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c"
+  dnl "expected source file, required through AC_LIBSOURCES, not found". It is
+  dnl also an optimization, to avoid performing a configure check whose result
+  dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
+  dnl or GNULIB_NONBLOCKING redundant.
+  m4_ifdef([gl_NONBLOCKING_IO], [
+    gl_NONBLOCKING_IO
+    if test $gl_cv_have_nonblocking != yes; then
+      REPLACE_STDIO_READ_FUNCS=1
+      AC_LIBOBJ([stdio-read])
+    fi
+  ])
+
+  dnl No need to create extra modules for these functions. Everyone who uses
+  dnl <stdio.h> likely needs them.
+  GNULIB_FPRINTF=1
+  GNULIB_PRINTF=1
+  GNULIB_VFPRINTF=1
+  GNULIB_VPRINTF=1
+  GNULIB_FPUTC=1
+  GNULIB_PUTC=1
+  GNULIB_PUTCHAR=1
+  GNULIB_FPUTS=1
+  GNULIB_PUTS=1
+  GNULIB_FWRITE=1
+  dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
+  dnl "expected source file, required through AC_LIBSOURCES, not found". It is
+  dnl also an optimization, to avoid performing a configure check whose result
+  dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or
+  dnl GNULIB_SIGPIPE redundant.
+  m4_ifdef([gl_SIGNAL_SIGPIPE], [
+    gl_SIGNAL_SIGPIPE
+    if test $gl_cv_header_signal_h_SIGPIPE != yes; then
+      REPLACE_STDIO_WRITE_FUNCS=1
+      AC_LIBOBJ([stdio-write])
+    fi
+  ])
+  dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
+  dnl "expected source file, required through AC_LIBSOURCES, not found". It is
+  dnl also an optimization, to avoid performing a configure check whose result
+  dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
+  dnl or GNULIB_NONBLOCKING redundant.
+  m4_ifdef([gl_NONBLOCKING_IO], [
+    gl_NONBLOCKING_IO
+    if test $gl_cv_have_nonblocking != yes; then
+      REPLACE_STDIO_WRITE_FUNCS=1
+      AC_LIBOBJ([stdio-write])
+    fi
+  ])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by both C89 and C11.
+  gl_WARN_ON_USE_PREPARE([[#include <stdio.h>
+    ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen
+    renameat snprintf tmpfile vdprintf vsnprintf])
+])
+
+AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDIO_H_DEFAULTS],
+[
+  GNULIB_DPRINTF=0;              AC_SUBST([GNULIB_DPRINTF])
+  GNULIB_FCLOSE=0;               AC_SUBST([GNULIB_FCLOSE])
+  GNULIB_FDOPEN=0;               AC_SUBST([GNULIB_FDOPEN])
+  GNULIB_FFLUSH=0;               AC_SUBST([GNULIB_FFLUSH])
+  GNULIB_FGETC=0;                AC_SUBST([GNULIB_FGETC])
+  GNULIB_FGETS=0;                AC_SUBST([GNULIB_FGETS])
+  GNULIB_FOPEN=0;                AC_SUBST([GNULIB_FOPEN])
+  GNULIB_FPRINTF=0;              AC_SUBST([GNULIB_FPRINTF])
+  GNULIB_FPRINTF_POSIX=0;        AC_SUBST([GNULIB_FPRINTF_POSIX])
+  GNULIB_FPURGE=0;               AC_SUBST([GNULIB_FPURGE])
+  GNULIB_FPUTC=0;                AC_SUBST([GNULIB_FPUTC])
+  GNULIB_FPUTS=0;                AC_SUBST([GNULIB_FPUTS])
+  GNULIB_FREAD=0;                AC_SUBST([GNULIB_FREAD])
+  GNULIB_FREOPEN=0;              AC_SUBST([GNULIB_FREOPEN])
+  GNULIB_FSCANF=0;               AC_SUBST([GNULIB_FSCANF])
+  GNULIB_FSEEK=0;                AC_SUBST([GNULIB_FSEEK])
+  GNULIB_FSEEKO=0;               AC_SUBST([GNULIB_FSEEKO])
+  GNULIB_FTELL=0;                AC_SUBST([GNULIB_FTELL])
+  GNULIB_FTELLO=0;               AC_SUBST([GNULIB_FTELLO])
+  GNULIB_FWRITE=0;               AC_SUBST([GNULIB_FWRITE])
+  GNULIB_GETC=0;                 AC_SUBST([GNULIB_GETC])
+  GNULIB_GETCHAR=0;              AC_SUBST([GNULIB_GETCHAR])
+  GNULIB_GETDELIM=0;             AC_SUBST([GNULIB_GETDELIM])
+  GNULIB_GETLINE=0;              AC_SUBST([GNULIB_GETLINE])
+  GNULIB_OBSTACK_PRINTF=0;       AC_SUBST([GNULIB_OBSTACK_PRINTF])
+  GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
+  GNULIB_PCLOSE=0;               AC_SUBST([GNULIB_PCLOSE])
+  GNULIB_PERROR=0;               AC_SUBST([GNULIB_PERROR])
+  GNULIB_POPEN=0;                AC_SUBST([GNULIB_POPEN])
+  GNULIB_PRINTF=0;               AC_SUBST([GNULIB_PRINTF])
+  GNULIB_PRINTF_POSIX=0;         AC_SUBST([GNULIB_PRINTF_POSIX])
+  GNULIB_PUTC=0;                 AC_SUBST([GNULIB_PUTC])
+  GNULIB_PUTCHAR=0;              AC_SUBST([GNULIB_PUTCHAR])
+  GNULIB_PUTS=0;                 AC_SUBST([GNULIB_PUTS])
+  GNULIB_REMOVE=0;               AC_SUBST([GNULIB_REMOVE])
+  GNULIB_RENAME=0;               AC_SUBST([GNULIB_RENAME])
+  GNULIB_RENAMEAT=0;             AC_SUBST([GNULIB_RENAMEAT])
+  GNULIB_SCANF=0;                AC_SUBST([GNULIB_SCANF])
+  GNULIB_SNPRINTF=0;             AC_SUBST([GNULIB_SNPRINTF])
+  GNULIB_SPRINTF_POSIX=0;        AC_SUBST([GNULIB_SPRINTF_POSIX])
+  GNULIB_STDIO_H_NONBLOCKING=0;  AC_SUBST([GNULIB_STDIO_H_NONBLOCKING])
+  GNULIB_STDIO_H_SIGPIPE=0;      AC_SUBST([GNULIB_STDIO_H_SIGPIPE])
+  GNULIB_TMPFILE=0;              AC_SUBST([GNULIB_TMPFILE])
+  GNULIB_VASPRINTF=0;            AC_SUBST([GNULIB_VASPRINTF])
+  GNULIB_VFSCANF=0;              AC_SUBST([GNULIB_VFSCANF])
+  GNULIB_VSCANF=0;               AC_SUBST([GNULIB_VSCANF])
+  GNULIB_VDPRINTF=0;             AC_SUBST([GNULIB_VDPRINTF])
+  GNULIB_VFPRINTF=0;             AC_SUBST([GNULIB_VFPRINTF])
+  GNULIB_VFPRINTF_POSIX=0;       AC_SUBST([GNULIB_VFPRINTF_POSIX])
+  GNULIB_VPRINTF=0;              AC_SUBST([GNULIB_VPRINTF])
+  GNULIB_VPRINTF_POSIX=0;        AC_SUBST([GNULIB_VPRINTF_POSIX])
+  GNULIB_VSNPRINTF=0;            AC_SUBST([GNULIB_VSNPRINTF])
+  GNULIB_VSPRINTF_POSIX=0;       AC_SUBST([GNULIB_VSPRINTF_POSIX])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_DECL_FPURGE=1;            AC_SUBST([HAVE_DECL_FPURGE])
+  HAVE_DECL_FSEEKO=1;            AC_SUBST([HAVE_DECL_FSEEKO])
+  HAVE_DECL_FTELLO=1;            AC_SUBST([HAVE_DECL_FTELLO])
+  HAVE_DECL_GETDELIM=1;          AC_SUBST([HAVE_DECL_GETDELIM])
+  HAVE_DECL_GETLINE=1;           AC_SUBST([HAVE_DECL_GETLINE])
+  HAVE_DECL_OBSTACK_PRINTF=1;    AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
+  HAVE_DECL_SNPRINTF=1;          AC_SUBST([HAVE_DECL_SNPRINTF])
+  HAVE_DECL_VSNPRINTF=1;         AC_SUBST([HAVE_DECL_VSNPRINTF])
+  HAVE_DPRINTF=1;                AC_SUBST([HAVE_DPRINTF])
+  HAVE_FSEEKO=1;                 AC_SUBST([HAVE_FSEEKO])
+  HAVE_FTELLO=1;                 AC_SUBST([HAVE_FTELLO])
+  HAVE_PCLOSE=1;                 AC_SUBST([HAVE_PCLOSE])
+  HAVE_POPEN=1;                  AC_SUBST([HAVE_POPEN])
+  HAVE_RENAMEAT=1;               AC_SUBST([HAVE_RENAMEAT])
+  HAVE_VASPRINTF=1;              AC_SUBST([HAVE_VASPRINTF])
+  HAVE_VDPRINTF=1;               AC_SUBST([HAVE_VDPRINTF])
+  REPLACE_DPRINTF=0;             AC_SUBST([REPLACE_DPRINTF])
+  REPLACE_FCLOSE=0;              AC_SUBST([REPLACE_FCLOSE])
+  REPLACE_FDOPEN=0;              AC_SUBST([REPLACE_FDOPEN])
+  REPLACE_FFLUSH=0;              AC_SUBST([REPLACE_FFLUSH])
+  REPLACE_FOPEN=0;               AC_SUBST([REPLACE_FOPEN])
+  REPLACE_FPRINTF=0;             AC_SUBST([REPLACE_FPRINTF])
+  REPLACE_FPURGE=0;              AC_SUBST([REPLACE_FPURGE])
+  REPLACE_FREOPEN=0;             AC_SUBST([REPLACE_FREOPEN])
+  REPLACE_FSEEK=0;               AC_SUBST([REPLACE_FSEEK])
+  REPLACE_FSEEKO=0;              AC_SUBST([REPLACE_FSEEKO])
+  REPLACE_FTELL=0;               AC_SUBST([REPLACE_FTELL])
+  REPLACE_FTELLO=0;              AC_SUBST([REPLACE_FTELLO])
+  REPLACE_GETDELIM=0;            AC_SUBST([REPLACE_GETDELIM])
+  REPLACE_GETLINE=0;             AC_SUBST([REPLACE_GETLINE])
+  REPLACE_OBSTACK_PRINTF=0;      AC_SUBST([REPLACE_OBSTACK_PRINTF])
+  REPLACE_PERROR=0;              AC_SUBST([REPLACE_PERROR])
+  REPLACE_POPEN=0;               AC_SUBST([REPLACE_POPEN])
+  REPLACE_PRINTF=0;              AC_SUBST([REPLACE_PRINTF])
+  REPLACE_REMOVE=0;              AC_SUBST([REPLACE_REMOVE])
+  REPLACE_RENAME=0;              AC_SUBST([REPLACE_RENAME])
+  REPLACE_RENAMEAT=0;            AC_SUBST([REPLACE_RENAMEAT])
+  REPLACE_SNPRINTF=0;            AC_SUBST([REPLACE_SNPRINTF])
+  REPLACE_SPRINTF=0;             AC_SUBST([REPLACE_SPRINTF])
+  REPLACE_STDIO_READ_FUNCS=0;    AC_SUBST([REPLACE_STDIO_READ_FUNCS])
+  REPLACE_STDIO_WRITE_FUNCS=0;   AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
+  REPLACE_TMPFILE=0;             AC_SUBST([REPLACE_TMPFILE])
+  REPLACE_VASPRINTF=0;           AC_SUBST([REPLACE_VASPRINTF])
+  REPLACE_VDPRINTF=0;            AC_SUBST([REPLACE_VDPRINTF])
+  REPLACE_VFPRINTF=0;            AC_SUBST([REPLACE_VFPRINTF])
+  REPLACE_VPRINTF=0;             AC_SUBST([REPLACE_VPRINTF])
+  REPLACE_VSNPRINTF=0;           AC_SUBST([REPLACE_VSNPRINTF])
+  REPLACE_VSPRINTF=0;            AC_SUBST([REPLACE_VSPRINTF])
+])
diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
new file mode 100644
index 0000000..9c69f2e
--- /dev/null
+++ b/m4/stdlib_h.m4
@@ -0,0 +1,115 @@
+# stdlib_h.m4 serial 41
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDLIB_H],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  gl_NEXT_HEADERS([stdlib.h])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+    ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt
+    initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps
+    posix_openpt ptsname ptsname_r random random_r realpath rpmatch
+    setenv setstate setstate_r srandom srandom_r
+    strtod strtoll strtoull unlockpt unsetenv])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+  GNULIB__EXIT=0;         AC_SUBST([GNULIB__EXIT])
+  GNULIB_ATOLL=0;         AC_SUBST([GNULIB_ATOLL])
+  GNULIB_CALLOC_POSIX=0;  AC_SUBST([GNULIB_CALLOC_POSIX])
+  GNULIB_CANONICALIZE_FILE_NAME=0;  AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
+  GNULIB_GETLOADAVG=0;    AC_SUBST([GNULIB_GETLOADAVG])
+  GNULIB_GETSUBOPT=0;     AC_SUBST([GNULIB_GETSUBOPT])
+  GNULIB_GRANTPT=0;       AC_SUBST([GNULIB_GRANTPT])
+  GNULIB_MALLOC_POSIX=0;  AC_SUBST([GNULIB_MALLOC_POSIX])
+  GNULIB_MBTOWC=0;        AC_SUBST([GNULIB_MBTOWC])
+  GNULIB_MKDTEMP=0;       AC_SUBST([GNULIB_MKDTEMP])
+  GNULIB_MKOSTEMP=0;      AC_SUBST([GNULIB_MKOSTEMP])
+  GNULIB_MKOSTEMPS=0;     AC_SUBST([GNULIB_MKOSTEMPS])
+  GNULIB_MKSTEMP=0;       AC_SUBST([GNULIB_MKSTEMP])
+  GNULIB_MKSTEMPS=0;      AC_SUBST([GNULIB_MKSTEMPS])
+  GNULIB_POSIX_OPENPT=0;  AC_SUBST([GNULIB_POSIX_OPENPT])
+  GNULIB_PTSNAME=0;       AC_SUBST([GNULIB_PTSNAME])
+  GNULIB_PTSNAME_R=0;     AC_SUBST([GNULIB_PTSNAME_R])
+  GNULIB_PUTENV=0;        AC_SUBST([GNULIB_PUTENV])
+  GNULIB_RANDOM=0;        AC_SUBST([GNULIB_RANDOM])
+  GNULIB_RANDOM_R=0;      AC_SUBST([GNULIB_RANDOM_R])
+  GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+  GNULIB_REALPATH=0;      AC_SUBST([GNULIB_REALPATH])
+  GNULIB_RPMATCH=0;       AC_SUBST([GNULIB_RPMATCH])
+  GNULIB_SETENV=0;        AC_SUBST([GNULIB_SETENV])
+  GNULIB_STRTOD=0;        AC_SUBST([GNULIB_STRTOD])
+  GNULIB_STRTOLL=0;       AC_SUBST([GNULIB_STRTOLL])
+  GNULIB_STRTOULL=0;      AC_SUBST([GNULIB_STRTOULL])
+  GNULIB_SYSTEM_POSIX=0;  AC_SUBST([GNULIB_SYSTEM_POSIX])
+  GNULIB_UNLOCKPT=0;      AC_SUBST([GNULIB_UNLOCKPT])
+  GNULIB_UNSETENV=0;      AC_SUBST([GNULIB_UNSETENV])
+  GNULIB_WCTOMB=0;        AC_SUBST([GNULIB_WCTOMB])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE__EXIT=1;              AC_SUBST([HAVE__EXIT])
+  HAVE_ATOLL=1;              AC_SUBST([HAVE_ATOLL])
+  HAVE_CANONICALIZE_FILE_NAME=1;  AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+  HAVE_DECL_GETLOADAVG=1;    AC_SUBST([HAVE_DECL_GETLOADAVG])
+  HAVE_GETSUBOPT=1;          AC_SUBST([HAVE_GETSUBOPT])
+  HAVE_GRANTPT=1;            AC_SUBST([HAVE_GRANTPT])
+  HAVE_MKDTEMP=1;            AC_SUBST([HAVE_MKDTEMP])
+  HAVE_MKOSTEMP=1;           AC_SUBST([HAVE_MKOSTEMP])
+  HAVE_MKOSTEMPS=1;          AC_SUBST([HAVE_MKOSTEMPS])
+  HAVE_MKSTEMP=1;            AC_SUBST([HAVE_MKSTEMP])
+  HAVE_MKSTEMPS=1;           AC_SUBST([HAVE_MKSTEMPS])
+  HAVE_POSIX_OPENPT=1;       AC_SUBST([HAVE_POSIX_OPENPT])
+  HAVE_PTSNAME=1;            AC_SUBST([HAVE_PTSNAME])
+  HAVE_PTSNAME_R=1;          AC_SUBST([HAVE_PTSNAME_R])
+  HAVE_RANDOM=1;             AC_SUBST([HAVE_RANDOM])
+  HAVE_RANDOM_H=1;           AC_SUBST([HAVE_RANDOM_H])
+  HAVE_RANDOM_R=1;           AC_SUBST([HAVE_RANDOM_R])
+  HAVE_REALPATH=1;           AC_SUBST([HAVE_REALPATH])
+  HAVE_RPMATCH=1;            AC_SUBST([HAVE_RPMATCH])
+  HAVE_SETENV=1;             AC_SUBST([HAVE_SETENV])
+  HAVE_DECL_SETENV=1;        AC_SUBST([HAVE_DECL_SETENV])
+  HAVE_STRTOD=1;             AC_SUBST([HAVE_STRTOD])
+  HAVE_STRTOLL=1;            AC_SUBST([HAVE_STRTOLL])
+  HAVE_STRTOULL=1;           AC_SUBST([HAVE_STRTOULL])
+  HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+  HAVE_SYS_LOADAVG_H=0;      AC_SUBST([HAVE_SYS_LOADAVG_H])
+  HAVE_UNLOCKPT=1;           AC_SUBST([HAVE_UNLOCKPT])
+  HAVE_DECL_UNSETENV=1;      AC_SUBST([HAVE_DECL_UNSETENV])
+  REPLACE_CALLOC=0;          AC_SUBST([REPLACE_CALLOC])
+  REPLACE_CANONICALIZE_FILE_NAME=0;  AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+  REPLACE_MALLOC=0;          AC_SUBST([REPLACE_MALLOC])
+  REPLACE_MBTOWC=0;          AC_SUBST([REPLACE_MBTOWC])
+  REPLACE_MKSTEMP=0;         AC_SUBST([REPLACE_MKSTEMP])
+  REPLACE_PTSNAME=0;         AC_SUBST([REPLACE_PTSNAME])
+  REPLACE_PTSNAME_R=0;       AC_SUBST([REPLACE_PTSNAME_R])
+  REPLACE_PUTENV=0;          AC_SUBST([REPLACE_PUTENV])
+  REPLACE_RANDOM_R=0;        AC_SUBST([REPLACE_RANDOM_R])
+  REPLACE_REALLOC=0;         AC_SUBST([REPLACE_REALLOC])
+  REPLACE_REALPATH=0;        AC_SUBST([REPLACE_REALPATH])
+  REPLACE_SETENV=0;          AC_SUBST([REPLACE_SETENV])
+  REPLACE_STRTOD=0;          AC_SUBST([REPLACE_STRTOD])
+  REPLACE_UNSETENV=0;        AC_SUBST([REPLACE_UNSETENV])
+  REPLACE_WCTOMB=0;          AC_SUBST([REPLACE_WCTOMB])
+])
diff --git a/m4/stpcpy.m4 b/m4/stpcpy.m4
index ce8d92f..8e95457 100644
--- a/m4/stpcpy.m4
+++ b/m4/stpcpy.m4
@@ -1,5 +1,5 @@
-# stpcpy.m4 serial 1
-dnl Copyright (C) 2002 Free Software Foundation, Inc.
+# stpcpy.m4 serial 8
+dnl Copyright (C) 2002, 2007, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -7,11 +7,15 @@
 AC_DEFUN([gl_FUNC_STPCPY],
 [
   dnl Persuade glibc <string.h> to declare stpcpy().
-  AC_REQUIRE([AC_GNU_SOURCE])
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
-  AC_REPLACE_FUNCS(stpcpy)
+  dnl The stpcpy() declaration in lib/string.in.h uses 'restrict'.
+  AC_REQUIRE([AC_C_RESTRICT])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS([stpcpy])
   if test $ac_cv_func_stpcpy = no; then
-    gl_PREREQ_STPCPY
+    HAVE_STPCPY=0
   fi
 ])
 
@@ -19,4 +23,3 @@
 AC_DEFUN([gl_PREREQ_STPCPY], [
   :
 ])
-
diff --git a/m4/strchrnul.m4 b/m4/strchrnul.m4
new file mode 100644
index 0000000..d3dfb9a
--- /dev/null
+++ b/m4/strchrnul.m4
@@ -0,0 +1,50 @@
+# strchrnul.m4 serial 9
+dnl Copyright (C) 2003, 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STRCHRNUL],
+[
+  dnl Persuade glibc <string.h> to declare strchrnul().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS([strchrnul])
+  if test $ac_cv_func_strchrnul = no; then
+    HAVE_STRCHRNUL=0
+  else
+    AC_CACHE_CHECK([whether strchrnul works],
+      [gl_cv_func_strchrnul_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <string.h> /* for strchrnul */
+]], [[const char *buf = "a";
+      return strchrnul (buf, 'b') != buf + 1;
+    ]])],
+        [gl_cv_func_strchrnul_works=yes],
+        [gl_cv_func_strchrnul_works=no],
+        [dnl Cygwin 1.7.9 introduced strchrnul, but it was broken until 1.7.10
+         AC_EGREP_CPP([Lucky user],
+           [
+#if defined __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9)
+  Lucky user
+ #endif
+#else
+  Lucky user
+#endif
+           ],
+           [gl_cv_func_strchrnul_works="guessing yes"],
+           [gl_cv_func_strchrnul_works="guessing no"])
+        ])
+      ])
+    case "$gl_cv_func_strchrnul_works" in
+      *yes) ;;
+      *) REPLACE_STRCHRNUL=1 ;;
+    esac
+  fi
+])
+
+# Prerequisites of lib/strchrnul.c.
+AC_DEFUN([gl_PREREQ_STRCHRNUL], [:])
diff --git a/m4/strdup.m4 b/m4/strdup.m4
index 42325ab..db0c8c1 100644
--- a/m4/strdup.m4
+++ b/m4/strdup.m4
@@ -1,16 +1,35 @@
-# strdup.m4 serial 6
-dnl Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# strdup.m4 serial 13
+
+dnl Copyright (C) 2002-2012 Free Software Foundation, Inc.
+
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_STRDUP],
 [
-  AC_LIBSOURCES([strdup.c, strdup.h])
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([strdup])
+  AC_CHECK_DECLS_ONCE([strdup])
+  if test $ac_cv_have_decl_strdup = no; then
+    HAVE_DECL_STRDUP=0
+  fi
+])
 
-  AC_REPLACE_FUNCS(strdup)
-  AC_CHECK_DECLS_ONCE(strdup)
-  gl_PREREQ_STRDUP
+AC_DEFUN([gl_FUNC_STRDUP_POSIX],
+[
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+  AC_CHECK_FUNCS_ONCE([strdup])
+  if test $ac_cv_func_strdup = yes; then
+    if test $gl_cv_func_malloc_posix != yes; then
+      REPLACE_STRDUP=1
+    fi
+  fi
+  AC_CHECK_DECLS_ONCE([strdup])
+  if test $ac_cv_have_decl_strdup = no; then
+    HAVE_DECL_STRDUP=0
+  fi
 ])
 
 # Prerequisites of lib/strdup.c.
diff --git a/m4/strerror.m4 b/m4/strerror.m4
index 32bc7ed..1c96e52 100644
--- a/m4/strerror.m4
+++ b/m4/strerror.m4
@@ -1,18 +1,96 @@
-# strerror.m4 serial 2
-dnl Copyright (C) 2002 Free Software Foundation, Inc.
+# strerror.m4 serial 17
+dnl Copyright (C) 2002, 2007-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_STRERROR],
 [
-  AC_REPLACE_FUNCS(strerror)
-  if test $ac_cv_func_strerror = no; then
-    gl_PREREQ_STRERROR
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_REQUIRE([gl_HEADER_ERRNO_H])
+  AC_REQUIRE([gl_FUNC_STRERROR_0])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
+    AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
+  ])
+  if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+    AC_CACHE_CHECK([for working strerror function],
+     [gl_cv_func_working_strerror],
+     [AC_RUN_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <string.h>
+           ]],
+           [[if (!*strerror (-2)) return 1;]])],
+        [gl_cv_func_working_strerror=yes],
+        [gl_cv_func_working_strerror=no],
+        [case "$host_os" in
+                   # Guess yes on glibc systems.
+           *-gnu*) gl_cv_func_working_strerror="guessing yes" ;;
+                   # If we don't know, assume the worst.
+           *)      gl_cv_func_working_strerror="guessing no" ;;
+         esac
+        ])
+    ])
+    case "$gl_cv_func_working_strerror" in
+      *yes) ;;
+      *)
+        dnl The system's strerror() fails to return a string for out-of-range
+        dnl integers. Replace it.
+        REPLACE_STRERROR=1
+        ;;
+    esac
+    m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
+      dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's
+      dnl buffer, we must replace strerror.
+      case "$gl_cv_func_strerror_r_works" in
+        *no) REPLACE_STRERROR=1 ;;
+      esac
+    ])
+  else
+    dnl The system's strerror() cannot know about the new errno values we add
+    dnl to <errno.h>, or any fix for strerror(0). Replace it.
+    REPLACE_STRERROR=1
   fi
 ])
 
-# Prerequisites of lib/strerror.c.
-AC_DEFUN([gl_PREREQ_STRERROR], [
-  :
+dnl Detect if strerror(0) passes (that is, does not set errno, and does not
+dnl return a string that matches strerror(-1)).
+AC_DEFUN([gl_FUNC_STRERROR_0],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  REPLACE_STRERROR_0=0
+  AC_CACHE_CHECK([whether strerror(0) succeeds],
+   [gl_cv_func_strerror_0_works],
+   [AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[#include <string.h>
+           #include <errno.h>
+         ]],
+         [[int result = 0;
+           char *str;
+           errno = 0;
+           str = strerror (0);
+           if (!*str) result |= 1;
+           if (errno) result |= 2;
+           if (strstr (str, "nknown") || strstr (str, "ndefined"))
+             result |= 4;
+           return result;]])],
+      [gl_cv_func_strerror_0_works=yes],
+      [gl_cv_func_strerror_0_works=no],
+      [case "$host_os" in
+                 # Guess yes on glibc systems.
+         *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
+                 # If we don't know, assume the worst.
+         *)      gl_cv_func_strerror_0_works="guessing no" ;;
+       esac
+      ])
+  ])
+  case "$gl_cv_func_strerror_0_works" in
+    *yes) ;;
+    *)
+      REPLACE_STRERROR_0=1
+      AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0)
+        does not return a message implying success.])
+      ;;
+  esac
 ])
diff --git a/m4/strerror_r.m4 b/m4/strerror_r.m4
new file mode 100644
index 0000000..bb035eb
--- /dev/null
+++ b/m4/strerror_r.m4
@@ -0,0 +1,173 @@
+# strerror_r.m4 serial 15
+dnl Copyright (C) 2002, 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STRERROR_R],
+[
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
+
+  dnl Persuade Solaris <string.h> to declare strerror_r().
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  dnl Some systems don't declare strerror_r() if _THREAD_SAFE and _REENTRANT
+  dnl are not defined.
+  AC_CHECK_DECLS_ONCE([strerror_r])
+  if test $ac_cv_have_decl_strerror_r = no; then
+    HAVE_DECL_STRERROR_R=0
+  fi
+
+  if test $ac_cv_func_strerror_r = yes; then
+    if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+      if test $gl_cv_func_strerror_r_posix_signature = yes; then
+        case "$gl_cv_func_strerror_r_works" in
+          dnl The system's strerror_r has bugs.  Replace it.
+          *no) REPLACE_STRERROR_R=1 ;;
+        esac
+      else
+        dnl The system's strerror_r() has a wrong signature. Replace it.
+        REPLACE_STRERROR_R=1
+      fi
+    else
+      dnl The system's strerror_r() cannot know about the new errno values we
+      dnl add to <errno.h>, or any fix for strerror(0). Replace it.
+      REPLACE_STRERROR_R=1
+    fi
+  fi
+])
+
+# Prerequisites of lib/strerror_r.c.
+AC_DEFUN([gl_PREREQ_STRERROR_R], [
+  dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
+  AC_CHECK_FUNCS_ONCE([__xpg_strerror_r])
+  AC_CHECK_FUNCS_ONCE([catgets])
+  AC_CHECK_FUNCS_ONCE([snprintf])
+])
+
+# Detect if strerror_r works, but without affecting whether a replacement
+# strerror_r will be used.
+AC_DEFUN([gl_FUNC_STRERROR_R_WORKS],
+[
+  AC_REQUIRE([gl_HEADER_ERRNO_H])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_FUNC_STRERROR_0])
+
+  AC_CHECK_FUNCS_ONCE([strerror_r])
+  if test $ac_cv_func_strerror_r = yes; then
+    if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
+      dnl The POSIX prototype is:  int strerror_r (int, char *, size_t);
+      dnl glibc, Cygwin:           char *strerror_r (int, char *, size_t);
+      dnl AIX 5.1, OSF/1 5.1:      int strerror_r (int, char *, int);
+      AC_CACHE_CHECK([for strerror_r with POSIX signature],
+        [gl_cv_func_strerror_r_posix_signature],
+        [AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM(
+              [[#include <string.h>
+                int strerror_r (int, char *, size_t);
+              ]],
+              [])],
+           [gl_cv_func_strerror_r_posix_signature=yes],
+           [gl_cv_func_strerror_r_posix_signature=no])
+        ])
+      if test $gl_cv_func_strerror_r_posix_signature = yes; then
+        dnl AIX 6.1 strerror_r fails by returning -1, not an error number.
+        dnl HP-UX 11.31 strerror_r always fails when the buffer length argument
+        dnl is less than 80.
+        dnl FreeBSD 8.s strerror_r claims failure on 0
+        dnl Mac OS X 10.5 strerror_r treats 0 like -1
+        dnl Solaris 10 strerror_r corrupts errno on failure
+        AC_CACHE_CHECK([whether strerror_r works],
+          [gl_cv_func_strerror_r_works],
+          [AC_RUN_IFELSE(
+             [AC_LANG_PROGRAM(
+                [[#include <errno.h>
+                  #include <string.h>
+                ]],
+                [[int result = 0;
+                  char buf[79];
+                  if (strerror_r (EACCES, buf, 0) < 0)
+                    result |= 1;
+                  errno = 0;
+                  if (strerror_r (EACCES, buf, sizeof buf) != 0)
+                    result |= 2;
+                  strcpy (buf, "Unknown");
+                  if (strerror_r (0, buf, sizeof buf) != 0)
+                    result |= 4;
+                  if (errno)
+                    result |= 8;
+                  if (strstr (buf, "nknown") || strstr (buf, "ndefined"))
+                    result |= 0x10;
+                  errno = 0;
+                  *buf = 0;
+                  if (strerror_r (-3, buf, sizeof buf) < 0)
+                    result |= 0x20;
+                  if (errno)
+                    result |= 0x40;
+                  if (!*buf)
+                    result |= 0x80;
+                  return result;
+                ]])],
+             [gl_cv_func_strerror_r_works=yes],
+             [gl_cv_func_strerror_r_works=no],
+             [
+changequote(,)dnl
+              case "$host_os" in
+                       # Guess no on AIX.
+                aix*)  gl_cv_func_strerror_r_works="guessing no";;
+                       # Guess no on HP-UX.
+                hpux*) gl_cv_func_strerror_r_works="guessing no";;
+                       # Guess no on BSD variants.
+                *bsd*)  gl_cv_func_strerror_r_works="guessing no";;
+                       # Guess yes otherwise.
+                *)     gl_cv_func_strerror_r_works="guessing yes";;
+              esac
+changequote([,])dnl
+             ])
+          ])
+      else
+        dnl The system's strerror() has a wrong signature.
+        dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
+        AC_CHECK_FUNCS_ONCE([__xpg_strerror_r])
+        dnl In glibc < 2.14, __xpg_strerror_r does not populate buf on failure.
+        dnl In cygwin < 1.7.10, __xpg_strerror_r clobbers strerror's buffer.
+        if test $ac_cv_func___xpg_strerror_r = yes; then
+          AC_CACHE_CHECK([whether __xpg_strerror_r works],
+            [gl_cv_func_strerror_r_works],
+            [AC_RUN_IFELSE(
+               [AC_LANG_PROGRAM(
+                  [[#include <errno.h>
+                    #include <string.h>
+                    extern
+                    #ifdef __cplusplus
+                    "C"
+                    #endif
+                    int __xpg_strerror_r(int, char *, size_t);
+                  ]],
+                  [[int result = 0;
+                    char buf[256] = "^";
+                    char copy[256];
+                    char *str = strerror (-1);
+                    strcpy (copy, str);
+                    if (__xpg_strerror_r (-2, buf, 1) == 0)
+                      result |= 1;
+                    if (*buf)
+                      result |= 2;
+                    __xpg_strerror_r (-2, buf, 256);
+                    if (strcmp (str, copy))
+                      result |= 4;
+                    return result;
+                  ]])],
+               [gl_cv_func_strerror_r_works=yes],
+               [gl_cv_func_strerror_r_works=no],
+               [dnl Guess no on all platforms that have __xpg_strerror_r,
+                dnl at least until fixed glibc and cygwin are more common.
+                gl_cv_func_strerror_r_works="guessing no"
+               ])
+            ])
+        fi
+      fi
+    fi
+  fi
+])
diff --git a/m4/string_h.m4 b/m4/string_h.m4
new file mode 100644
index 0000000..5677e09
--- /dev/null
+++ b/m4/string_h.m4
@@ -0,0 +1,120 @@
+# Configure a GNU-like replacement for <string.h>.
+
+# Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 21
+
+# Written by Paul Eggert.
+
+AC_DEFUN([gl_HEADER_STRING_H],
+[
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_HEADER_STRING_H_BODY])
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_BODY],
+[
+  AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  gl_NEXT_HEADERS([string.h])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <string.h>
+    ]],
+    [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul
+     strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r
+     strerror_r strsignal strverscmp])
+])
+
+AC_DEFUN([gl_STRING_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
+[
+  GNULIB_FFSL=0;        AC_SUBST([GNULIB_FFSL])
+  GNULIB_FFSLL=0;       AC_SUBST([GNULIB_FFSLL])
+  GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
+  GNULIB_MEMMEM=0;      AC_SUBST([GNULIB_MEMMEM])
+  GNULIB_MEMPCPY=0;     AC_SUBST([GNULIB_MEMPCPY])
+  GNULIB_MEMRCHR=0;     AC_SUBST([GNULIB_MEMRCHR])
+  GNULIB_RAWMEMCHR=0;   AC_SUBST([GNULIB_RAWMEMCHR])
+  GNULIB_STPCPY=0;      AC_SUBST([GNULIB_STPCPY])
+  GNULIB_STPNCPY=0;     AC_SUBST([GNULIB_STPNCPY])
+  GNULIB_STRCHRNUL=0;   AC_SUBST([GNULIB_STRCHRNUL])
+  GNULIB_STRDUP=0;      AC_SUBST([GNULIB_STRDUP])
+  GNULIB_STRNCAT=0;     AC_SUBST([GNULIB_STRNCAT])
+  GNULIB_STRNDUP=0;     AC_SUBST([GNULIB_STRNDUP])
+  GNULIB_STRNLEN=0;     AC_SUBST([GNULIB_STRNLEN])
+  GNULIB_STRPBRK=0;     AC_SUBST([GNULIB_STRPBRK])
+  GNULIB_STRSEP=0;      AC_SUBST([GNULIB_STRSEP])
+  GNULIB_STRSTR=0;      AC_SUBST([GNULIB_STRSTR])
+  GNULIB_STRCASESTR=0;  AC_SUBST([GNULIB_STRCASESTR])
+  GNULIB_STRTOK_R=0;    AC_SUBST([GNULIB_STRTOK_R])
+  GNULIB_MBSLEN=0;      AC_SUBST([GNULIB_MBSLEN])
+  GNULIB_MBSNLEN=0;     AC_SUBST([GNULIB_MBSNLEN])
+  GNULIB_MBSCHR=0;      AC_SUBST([GNULIB_MBSCHR])
+  GNULIB_MBSRCHR=0;     AC_SUBST([GNULIB_MBSRCHR])
+  GNULIB_MBSSTR=0;      AC_SUBST([GNULIB_MBSSTR])
+  GNULIB_MBSCASECMP=0;  AC_SUBST([GNULIB_MBSCASECMP])
+  GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
+  GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
+  GNULIB_MBSCASESTR=0;  AC_SUBST([GNULIB_MBSCASESTR])
+  GNULIB_MBSCSPN=0;     AC_SUBST([GNULIB_MBSCSPN])
+  GNULIB_MBSPBRK=0;     AC_SUBST([GNULIB_MBSPBRK])
+  GNULIB_MBSSPN=0;      AC_SUBST([GNULIB_MBSSPN])
+  GNULIB_MBSSEP=0;      AC_SUBST([GNULIB_MBSSEP])
+  GNULIB_MBSTOK_R=0;    AC_SUBST([GNULIB_MBSTOK_R])
+  GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
+  GNULIB_STRERROR_R=0;  AC_SUBST([GNULIB_STRERROR_R])
+  GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
+  GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
+  HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_FFSL=1;                  AC_SUBST([HAVE_FFSL])
+  HAVE_FFSLL=1;                 AC_SUBST([HAVE_FFSLL])
+  HAVE_MEMCHR=1;                AC_SUBST([HAVE_MEMCHR])
+  HAVE_DECL_MEMMEM=1;           AC_SUBST([HAVE_DECL_MEMMEM])
+  HAVE_MEMPCPY=1;               AC_SUBST([HAVE_MEMPCPY])
+  HAVE_DECL_MEMRCHR=1;          AC_SUBST([HAVE_DECL_MEMRCHR])
+  HAVE_RAWMEMCHR=1;             AC_SUBST([HAVE_RAWMEMCHR])
+  HAVE_STPCPY=1;                AC_SUBST([HAVE_STPCPY])
+  HAVE_STPNCPY=1;               AC_SUBST([HAVE_STPNCPY])
+  HAVE_STRCHRNUL=1;             AC_SUBST([HAVE_STRCHRNUL])
+  HAVE_DECL_STRDUP=1;           AC_SUBST([HAVE_DECL_STRDUP])
+  HAVE_DECL_STRNDUP=1;          AC_SUBST([HAVE_DECL_STRNDUP])
+  HAVE_DECL_STRNLEN=1;          AC_SUBST([HAVE_DECL_STRNLEN])
+  HAVE_STRPBRK=1;               AC_SUBST([HAVE_STRPBRK])
+  HAVE_STRSEP=1;                AC_SUBST([HAVE_STRSEP])
+  HAVE_STRCASESTR=1;            AC_SUBST([HAVE_STRCASESTR])
+  HAVE_DECL_STRTOK_R=1;         AC_SUBST([HAVE_DECL_STRTOK_R])
+  HAVE_DECL_STRERROR_R=1;       AC_SUBST([HAVE_DECL_STRERROR_R])
+  HAVE_DECL_STRSIGNAL=1;        AC_SUBST([HAVE_DECL_STRSIGNAL])
+  HAVE_STRVERSCMP=1;            AC_SUBST([HAVE_STRVERSCMP])
+  REPLACE_MEMCHR=0;             AC_SUBST([REPLACE_MEMCHR])
+  REPLACE_MEMMEM=0;             AC_SUBST([REPLACE_MEMMEM])
+  REPLACE_STPNCPY=0;            AC_SUBST([REPLACE_STPNCPY])
+  REPLACE_STRDUP=0;             AC_SUBST([REPLACE_STRDUP])
+  REPLACE_STRSTR=0;             AC_SUBST([REPLACE_STRSTR])
+  REPLACE_STRCASESTR=0;         AC_SUBST([REPLACE_STRCASESTR])
+  REPLACE_STRCHRNUL=0;          AC_SUBST([REPLACE_STRCHRNUL])
+  REPLACE_STRERROR=0;           AC_SUBST([REPLACE_STRERROR])
+  REPLACE_STRERROR_R=0;         AC_SUBST([REPLACE_STRERROR_R])
+  REPLACE_STRNCAT=0;            AC_SUBST([REPLACE_STRNCAT])
+  REPLACE_STRNDUP=0;            AC_SUBST([REPLACE_STRNDUP])
+  REPLACE_STRNLEN=0;            AC_SUBST([REPLACE_STRNLEN])
+  REPLACE_STRSIGNAL=0;          AC_SUBST([REPLACE_STRSIGNAL])
+  REPLACE_STRTOK_R=0;           AC_SUBST([REPLACE_STRTOK_R])
+  UNDEFINE_STRTOK_R=0;          AC_SUBST([UNDEFINE_STRTOK_R])
+])
diff --git a/m4/strndup.m4 b/m4/strndup.m4
index 48b15cc..cef6889 100644
--- a/m4/strndup.m4
+++ b/m4/strndup.m4
@@ -1,49 +1,55 @@
-# strndup.m4 serial 6
-dnl Copyright (C) 2002-2003, 2005-2006 Free Software Foundation, Inc.
+# strndup.m4 serial 21
+dnl Copyright (C) 2002-2003, 2005-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_STRNDUP],
 [
-  AC_LIBSOURCES([strndup.c, strndup.h])
-
   dnl Persuade glibc <string.h> to declare strndup().
-  AC_REQUIRE([AC_GNU_SOURCE])
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
   AC_CHECK_DECLS_ONCE([strndup])
+  AC_CHECK_FUNCS_ONCE([strndup])
+  if test $ac_cv_have_decl_strndup = no; then
+    HAVE_DECL_STRNDUP=0
+  fi
 
-  # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
-  AC_CACHE_CHECK([for working strndup], gl_cv_func_strndup,
-    [AC_RUN_IFELSE([
-       AC_LANG_PROGRAM([#include <string.h>], [[
-#ifndef HAVE_DECL_STRNDUP
-  extern char *strndup (const char *, size_t);
+  if test $ac_cv_func_strndup = yes; then
+    HAVE_STRNDUP=1
+    # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
+    AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works],
+      [AC_RUN_IFELSE([
+         AC_LANG_PROGRAM([[#include <string.h>
+                           #include <stdlib.h>]], [[
+#if !HAVE_DECL_STRNDUP
+  extern
+  #ifdef __cplusplus
+  "C"
+  #endif
+  char *strndup (const char *, size_t);
 #endif
   char *s;
   s = strndup ("some longer string", 15);
   free (s);
   s = strndup ("shorter string", 13);
   return s[13] != '\0';]])],
-       [gl_cv_func_strndup=yes],
-       [gl_cv_func_strndup=no],
-       [AC_EGREP_CPP([too risky], [
-#ifdef _AIX
-            too risky
-#endif
-          ],
-          [gl_cv_func_strndup=no],
-          [gl_cv_func_strndup=yes])])])
-  if test $gl_cv_func_strndup = yes; then
-    AC_DEFINE([HAVE_STRNDUP], 1,
-      [Define if you have the strndup() function and it works.])
+         [gl_cv_func_strndup_works=yes],
+         [gl_cv_func_strndup_works=no],
+         [
+changequote(,)dnl
+          case $host_os in
+            aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";;
+            *)               gl_cv_func_strndup_works="guessing yes";;
+          esac
+changequote([,])dnl
+         ])])
+    case $gl_cv_func_strndup_works in
+      *no) REPLACE_STRNDUP=1 ;;
+    esac
   else
-    AC_LIBOBJ([strndup])
-    AC_DEFINE(strndup, rpl_strndup,
-      [Define to rpl_strndup if the replacement function should be used,])
-    gl_PREREQ_STRNDUP
+    HAVE_STRNDUP=0
   fi
 ])
-
-# Prerequisites of lib/strndup.c.
-AC_DEFUN([gl_PREREQ_STRNDUP], [:])
diff --git a/m4/strnlen.m4 b/m4/strnlen.m4
index 67964c8..d97e307 100644
--- a/m4/strnlen.m4
+++ b/m4/strnlen.m4
@@ -1,29 +1,30 @@
-# strnlen.m4 serial 5
-dnl Copyright (C) 2002-2003, 2005 Free Software Foundation, Inc.
+# strnlen.m4 serial 13
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2012 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_STRNLEN],
 [
-  AC_LIBSOURCES([strnlen.c, strnlen.h])
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
 
   dnl Persuade glibc <string.h> to declare strnlen().
-  AC_REQUIRE([AC_GNU_SOURCE])
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
-  AC_FUNC_STRNLEN
-  if test $ac_cv_func_strnlen_working = no; then
-    # This is necessary because automake-1.6.1 doens't understand
-    # that the above use of AC_FUNC_STRNLEN means we may have to use
-    # lib/strnlen.c.
-    #AC_LIBOBJ(strnlen)
-    AC_DEFINE(strnlen, rpl_strnlen,
-      [Define to rpl_strnlen if the replacement function should be used.])
-    gl_PREREQ_STRNLEN
+  AC_CHECK_DECLS_ONCE([strnlen])
+  if test $ac_cv_have_decl_strnlen = no; then
+    HAVE_DECL_STRNLEN=0
+  else
+    m4_pushdef([AC_LIBOBJ], [:])
+    dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]).
+    AC_FUNC_STRNLEN
+    m4_popdef([AC_LIBOBJ])
+    if test $ac_cv_func_strnlen_working = no; then
+      REPLACE_STRNLEN=1
+    fi
   fi
 ])
 
 # Prerequisites of lib/strnlen.c.
-AC_DEFUN([gl_PREREQ_STRNLEN], [
-  AC_CHECK_DECLS_ONCE(strnlen)
-])
+AC_DEFUN([gl_PREREQ_STRNLEN], [:])
diff --git a/m4/strtol.m4 b/m4/strtol.m4
deleted file mode 100644
index b9308ed..0000000
--- a/m4/strtol.m4
+++ /dev/null
@@ -1,19 +0,0 @@
-# strtol.m4 serial 3
-dnl Copyright (C) 2002, 2003 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_FUNC_STRTOL],
-[
-  AC_REPLACE_FUNCS(strtol)
-  if test $ac_cv_func_strtol = no; then
-    gl_PREREQ_STRTOL
-  fi
-])
-
-# Prerequisites of lib/strtol.c.
-AC_DEFUN([gl_PREREQ_STRTOL], [
-  AC_REQUIRE([AC_HEADER_STDC])
-  AC_CHECK_FUNCS_ONCE(isascii)
-])
diff --git a/m4/strtoul.m4 b/m4/strtoul.m4
index 512cd09..93e2248 100644
--- a/m4/strtoul.m4
+++ b/m4/strtoul.m4
@@ -1,18 +1,10 @@
-# strtoul.m4 serial 2
-dnl Copyright (C) 2002 Free Software Foundation, Inc.
+# strtoul.m4 serial 5
+dnl Copyright (C) 2002, 2006, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_STRTOUL],
 [
-  AC_REPLACE_FUNCS(strtoul)
-  if test $ac_cv_func_strtoul = no; then
-    gl_PREREQ_STRTOUL
-  fi
-])
-
-# Prerequisites of lib/strtoul.c.
-AC_DEFUN([gl_PREREQ_STRTOUL], [
-  gl_PREREQ_STRTOL
+  AC_CHECK_FUNCS([strtoul])
 ])
diff --git a/m4/strverscmp.m4 b/m4/strverscmp.m4
index 46e178b..d744647 100644
--- a/m4/strverscmp.m4
+++ b/m4/strverscmp.m4
@@ -1,19 +1,18 @@
-# strverscmp.m4 serial 3
-dnl Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+# strverscmp.m4 serial 8
+dnl Copyright (C) 2002, 2005-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_STRVERSCMP],
 [
-  AC_LIBSOURCES([strverscmp.c, strverscmp.h])
-
   dnl Persuade glibc <string.h> to declare strverscmp().
-  AC_REQUIRE([AC_GNU_SOURCE])
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
-  AC_REPLACE_FUNCS(strverscmp)
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS([strverscmp])
   if test $ac_cv_func_strverscmp = no; then
-    gl_PREREQ_STRVERSCMP
+    HAVE_STRVERSCMP=0
   fi
 ])
 
diff --git a/m4/subpipe.m4 b/m4/subpipe.m4
deleted file mode 100644
index dbf909c..0000000
--- a/m4/subpipe.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- Autoconf -*-
-# Checks required to run `subpipe'.
-#
-# Copyright (C) 2002, 2003, 2005 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 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
-
-# Written by Paul Eggert <eggert@twinsun.com>.
-
-AC_DEFUN([BISON_PREREQ_SUBPIPE],
-[
- AC_TYPE_PID_T
- AC_HEADER_SYS_WAIT
- AC_CHECK_FUNCS(dup2 waitpid)
- AC_FUNC_FORK
-])
diff --git a/m4/sys_socket_h.m4 b/m4/sys_socket_h.m4
new file mode 100644
index 0000000..acfae41
--- /dev/null
+++ b/m4/sys_socket_h.m4
@@ -0,0 +1,176 @@
+# sys_socket_h.m4 serial 23
+dnl Copyright (C) 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson.
+
+AC_DEFUN([gl_HEADER_SYS_SOCKET],
+[
+  AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have
+  dnl old-style declarations (with return type 'int' instead of 'ssize_t')
+  dnl unless _POSIX_PII_SOCKET is defined.
+  case "$host_os" in
+    osf*)
+      AC_DEFINE([_POSIX_PII_SOCKET], [1],
+        [Define to 1 in order to get the POSIX compatible declarations
+         of socket functions.])
+      ;;
+  esac
+
+  AC_CACHE_CHECK([whether <sys/socket.h> is self-contained],
+    [gl_cv_header_sys_socket_h_selfcontained],
+    [
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])],
+        [gl_cv_header_sys_socket_h_selfcontained=yes],
+        [gl_cv_header_sys_socket_h_selfcontained=no])
+    ])
+  if test $gl_cv_header_sys_socket_h_selfcontained = yes; then
+    dnl If the shutdown function exists, <sys/socket.h> should define
+    dnl SHUT_RD, SHUT_WR, SHUT_RDWR.
+    AC_CHECK_FUNCS([shutdown])
+    if test $ac_cv_func_shutdown = yes; then
+      AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros],
+        [gl_cv_header_sys_socket_h_shut],
+        [
+          AC_COMPILE_IFELSE(
+            [AC_LANG_PROGRAM([[#include <sys/socket.h>]],
+               [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])],
+            [gl_cv_header_sys_socket_h_shut=yes],
+            [gl_cv_header_sys_socket_h_shut=no])
+        ])
+      if test $gl_cv_header_sys_socket_h_shut = no; then
+        SYS_SOCKET_H='sys/socket.h'
+      fi
+    fi
+  fi
+  # We need to check for ws2tcpip.h now.
+  gl_PREREQ_SYS_H_SOCKET
+  AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[
+  /* sys/types.h is not needed according to POSIX, but the
+     sys/socket.h in i386-unknown-freebsd4.10 and
+     powerpc-apple-darwin5.5 required it. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+])
+  if test $ac_cv_type_struct_sockaddr_storage = no; then
+    HAVE_STRUCT_SOCKADDR_STORAGE=0
+  fi
+  if test $ac_cv_type_sa_family_t = no; then
+    HAVE_SA_FAMILY_T=0
+  fi
+  if test $ac_cv_type_struct_sockaddr_storage != no; then
+    AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family],
+      [],
+      [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0],
+      [#include <sys/types.h>
+       #ifdef HAVE_SYS_SOCKET_H
+       #include <sys/socket.h>
+       #endif
+       #ifdef HAVE_WS2TCPIP_H
+       #include <ws2tcpip.h>
+       #endif
+      ])
+  fi
+  if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
+     || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
+    SYS_SOCKET_H='sys/socket.h'
+  fi
+  gl_PREREQ_SYS_H_WINSOCK2
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Some systems require prerequisite headers.  */
+#include <sys/types.h>
+#include <sys/socket.h>
+    ]], [socket connect accept bind getpeername getsockname getsockopt
+    listen recv send recvfrom sendto setsockopt shutdown accept4])
+])
+
+AC_DEFUN([gl_PREREQ_SYS_H_SOCKET],
+[
+  dnl Check prerequisites of the <sys/socket.h> replacement.
+  AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])
+  gl_CHECK_NEXT_HEADERS([sys/socket.h])
+  if test $ac_cv_header_sys_socket_h = yes; then
+    HAVE_SYS_SOCKET_H=1
+    HAVE_WS2TCPIP_H=0
+  else
+    HAVE_SYS_SOCKET_H=0
+    if test $ac_cv_header_ws2tcpip_h = yes; then
+      HAVE_WS2TCPIP_H=1
+    else
+      HAVE_WS2TCPIP_H=0
+    fi
+  fi
+  AC_SUBST([HAVE_SYS_SOCKET_H])
+  AC_SUBST([HAVE_WS2TCPIP_H])
+])
+
+# Common prerequisites of the <sys/socket.h> replacement and of the
+# <sys/select.h> replacement.
+# Sets and substitutes HAVE_WINSOCK2_H.
+AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2],
+[
+  m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])])
+  m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])])
+  AC_CHECK_HEADERS_ONCE([sys/socket.h])
+  if test $ac_cv_header_sys_socket_h != yes; then
+    dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
+    dnl the check for those headers unconditional; yet cygwin reports
+    dnl that the headers are present but cannot be compiled (since on
+    dnl cygwin, all socket information should come from sys/socket.h).
+    AC_CHECK_HEADERS([winsock2.h])
+  fi
+  if test "$ac_cv_header_winsock2_h" = yes; then
+    HAVE_WINSOCK2_H=1
+    UNISTD_H_HAVE_WINSOCK2_H=1
+    SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+  else
+    HAVE_WINSOCK2_H=0
+  fi
+  AC_SUBST([HAVE_WINSOCK2_H])
+])
+
+AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
+[
+  GNULIB_SOCKET=0;      AC_SUBST([GNULIB_SOCKET])
+  GNULIB_CONNECT=0;     AC_SUBST([GNULIB_CONNECT])
+  GNULIB_ACCEPT=0;      AC_SUBST([GNULIB_ACCEPT])
+  GNULIB_BIND=0;        AC_SUBST([GNULIB_BIND])
+  GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME])
+  GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME])
+  GNULIB_GETSOCKOPT=0;  AC_SUBST([GNULIB_GETSOCKOPT])
+  GNULIB_LISTEN=0;      AC_SUBST([GNULIB_LISTEN])
+  GNULIB_RECV=0;        AC_SUBST([GNULIB_RECV])
+  GNULIB_SEND=0;        AC_SUBST([GNULIB_SEND])
+  GNULIB_RECVFROM=0;    AC_SUBST([GNULIB_RECVFROM])
+  GNULIB_SENDTO=0;      AC_SUBST([GNULIB_SENDTO])
+  GNULIB_SETSOCKOPT=0;  AC_SUBST([GNULIB_SETSOCKOPT])
+  GNULIB_SHUTDOWN=0;    AC_SUBST([GNULIB_SHUTDOWN])
+  GNULIB_ACCEPT4=0;     AC_SUBST([GNULIB_ACCEPT4])
+  HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE])
+  HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1;
+                        AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY])
+  HAVE_SA_FAMILY_T=1;   AC_SUBST([HAVE_SA_FAMILY_T])
+  HAVE_ACCEPT4=1;       AC_SUBST([HAVE_ACCEPT4])
+])
diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4
new file mode 100644
index 0000000..8af3353
--- /dev/null
+++ b/m4/sys_stat_h.m4
@@ -0,0 +1,96 @@
+# sys_stat_h.m4 serial 28   -*- Autoconf -*-
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Eric Blake.
+dnl Provide a GNU-like <sys/stat.h>.
+
+AC_DEFUN([gl_HEADER_SYS_STAT_H],
+[
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+
+  dnl Check for broken stat macros.
+  AC_REQUIRE([AC_HEADER_STAT])
+
+  gl_CHECK_NEXT_HEADERS([sys/stat.h])
+
+  dnl Ensure the type mode_t gets defined.
+  AC_REQUIRE([AC_TYPE_MODE_T])
+
+  dnl Whether to override 'struct stat'.
+  m4_ifdef([gl_LARGEFILE], [
+    AC_REQUIRE([gl_LARGEFILE])
+  ], [
+    WINDOWS_64_BIT_ST_SIZE=0
+  ])
+  AC_SUBST([WINDOWS_64_BIT_ST_SIZE])
+  if test $WINDOWS_64_BIT_ST_SIZE = 1; then
+    AC_DEFINE([_GL_WINDOWS_64_BIT_ST_SIZE], [1],
+      [Define to 1 if Gnulib overrides 'struct stat' on Windows so that
+       struct stat.st_size becomes 64-bit.])
+  fi
+
+  dnl Define types that are supposed to be defined in <sys/types.h> or
+  dnl <sys/stat.h>.
+  AC_CHECK_TYPE([nlink_t], [],
+    [AC_DEFINE([nlink_t], [int],
+       [Define to the type of st_nlink in struct stat, or a supertype.])],
+    [#include <sys/types.h>
+     #include <sys/stat.h>])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h>
+    ]], [fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat
+    mknod mknodat stat utimensat])
+]) # gl_HEADER_SYS_STAT_H
+
+AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR
+  GNULIB_FCHMODAT=0;    AC_SUBST([GNULIB_FCHMODAT])
+  GNULIB_FSTAT=0;       AC_SUBST([GNULIB_FSTAT])
+  GNULIB_FSTATAT=0;     AC_SUBST([GNULIB_FSTATAT])
+  GNULIB_FUTIMENS=0;    AC_SUBST([GNULIB_FUTIMENS])
+  GNULIB_LCHMOD=0;      AC_SUBST([GNULIB_LCHMOD])
+  GNULIB_LSTAT=0;       AC_SUBST([GNULIB_LSTAT])
+  GNULIB_MKDIRAT=0;     AC_SUBST([GNULIB_MKDIRAT])
+  GNULIB_MKFIFO=0;      AC_SUBST([GNULIB_MKFIFO])
+  GNULIB_MKFIFOAT=0;    AC_SUBST([GNULIB_MKFIFOAT])
+  GNULIB_MKNOD=0;       AC_SUBST([GNULIB_MKNOD])
+  GNULIB_MKNODAT=0;     AC_SUBST([GNULIB_MKNODAT])
+  GNULIB_STAT=0;        AC_SUBST([GNULIB_STAT])
+  GNULIB_UTIMENSAT=0;   AC_SUBST([GNULIB_UTIMENSAT])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_FCHMODAT=1;      AC_SUBST([HAVE_FCHMODAT])
+  HAVE_FSTATAT=1;       AC_SUBST([HAVE_FSTATAT])
+  HAVE_FUTIMENS=1;      AC_SUBST([HAVE_FUTIMENS])
+  HAVE_LCHMOD=1;        AC_SUBST([HAVE_LCHMOD])
+  HAVE_LSTAT=1;         AC_SUBST([HAVE_LSTAT])
+  HAVE_MKDIRAT=1;       AC_SUBST([HAVE_MKDIRAT])
+  HAVE_MKFIFO=1;        AC_SUBST([HAVE_MKFIFO])
+  HAVE_MKFIFOAT=1;      AC_SUBST([HAVE_MKFIFOAT])
+  HAVE_MKNOD=1;         AC_SUBST([HAVE_MKNOD])
+  HAVE_MKNODAT=1;       AC_SUBST([HAVE_MKNODAT])
+  HAVE_UTIMENSAT=1;     AC_SUBST([HAVE_UTIMENSAT])
+  REPLACE_FSTAT=0;      AC_SUBST([REPLACE_FSTAT])
+  REPLACE_FSTATAT=0;    AC_SUBST([REPLACE_FSTATAT])
+  REPLACE_FUTIMENS=0;   AC_SUBST([REPLACE_FUTIMENS])
+  REPLACE_LSTAT=0;      AC_SUBST([REPLACE_LSTAT])
+  REPLACE_MKDIR=0;      AC_SUBST([REPLACE_MKDIR])
+  REPLACE_MKFIFO=0;     AC_SUBST([REPLACE_MKFIFO])
+  REPLACE_MKNOD=0;      AC_SUBST([REPLACE_MKNOD])
+  REPLACE_STAT=0;       AC_SUBST([REPLACE_STAT])
+  REPLACE_UTIMENSAT=0;  AC_SUBST([REPLACE_UTIMENSAT])
+])
diff --git a/m4/sys_types_h.m4 b/m4/sys_types_h.m4
new file mode 100644
index 0000000..f11eef2
--- /dev/null
+++ b/m4/sys_types_h.m4
@@ -0,0 +1,24 @@
+# sys_types_h.m4 serial 4
+dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_SYS_TYPES_H],
+[
+  AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
+  gl_NEXT_HEADERS([sys/types.h])
+
+  dnl Ensure the type pid_t gets defined.
+  AC_REQUIRE([AC_TYPE_PID_T])
+
+  dnl Ensure the type mode_t gets defined.
+  AC_REQUIRE([AC_TYPE_MODE_T])
+
+  dnl Whether to override the 'off_t' type.
+  AC_REQUIRE([gl_TYPE_OFF_T])
+])
+
+AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
+[
+])
diff --git a/m4/sys_wait_h.m4 b/m4/sys_wait_h.m4
new file mode 100644
index 0000000..c0bba86
--- /dev/null
+++ b/m4/sys_wait_h.m4
@@ -0,0 +1,36 @@
+# sys_wait_h.m4 serial 6
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_SYS_WAIT_H],
+[
+  AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS])
+
+  dnl <sys/wait.h> is always overridden, because of GNULIB_POSIXCHECK.
+  gl_CHECK_NEXT_HEADERS([sys/wait.h])
+
+  dnl Ensure the type pid_t gets defined.
+  AC_REQUIRE([AC_TYPE_PID_T])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <sys/wait.h>]],
+    [waitpid])
+])
+
+AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS],
+[
+  GNULIB_WAITPID=0; AC_SUBST([GNULIB_WAITPID])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+])
diff --git a/m4/threadlib.m4 b/m4/threadlib.m4
new file mode 100644
index 0000000..cb93391
--- /dev/null
+++ b/m4/threadlib.m4
@@ -0,0 +1,371 @@
+# threadlib.m4 serial 10 (gettext-0.18.2)
+dnl Copyright (C) 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl gl_THREADLIB
+dnl ------------
+dnl Tests for a multithreading library to be used.
+dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO
+dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the
+dnl default is 'no', otherwise it is system dependent. In both cases, the user
+dnl can change the choice through the options --enable-threads=choice or
+dnl --disable-threads.
+dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS,
+dnl USE_PTH_THREADS, USE_WINDOWS_THREADS
+dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
+dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
+dnl libtool).
+dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
+dnl programs that really need multithread functionality. The difference
+dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
+dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread".
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+
+AC_DEFUN([gl_THREADLIB_EARLY],
+[
+  AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
+])
+
+dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once.
+
+AC_DEFUN([gl_THREADLIB_EARLY_BODY],
+[
+  dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
+  dnl influences the result of the autoconf tests that test for *_unlocked
+  dnl declarations, on AIX 5 at least. Therefore it must come early.
+  AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
+  AC_BEFORE([$0], [gl_ARGP])dnl
+
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems.
+  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
+  dnl AC_GNU_SOURCE.
+  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
+    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
+    [AC_REQUIRE([AC_GNU_SOURCE])])
+  dnl Check for multithreading.
+  m4_ifdef([gl_THREADLIB_DEFAULT_NO],
+    [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])],
+    [m4_divert_text([DEFAULTS], [gl_use_threads_default=])])
+  AC_ARG_ENABLE([threads],
+AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [
+AC_HELP_STRING([--disable-threads], [build without multithread safety])]),
+    [gl_use_threads=$enableval],
+    [if test -n "$gl_use_threads_default"; then
+       gl_use_threads="$gl_use_threads_default"
+     else
+changequote(,)dnl
+       case "$host_os" in
+         dnl Disable multithreading by default on OSF/1, because it interferes
+         dnl with fork()/exec(): When msgexec is linked with -lpthread, its
+         dnl child process gets an endless segmentation fault inside execvp().
+         dnl Disable multithreading by default on Cygwin 1.5.x, because it has
+         dnl bugs that lead to endless loops or crashes. See
+         dnl <http://cygwin.com/ml/cygwin/2009-08/msg00283.html>.
+         osf*) gl_use_threads=no ;;
+         cygwin*)
+               case `uname -r` in
+                 1.[0-5].*) gl_use_threads=no ;;
+                 *)         gl_use_threads=yes ;;
+               esac
+               ;;
+         *)    gl_use_threads=yes ;;
+       esac
+changequote([,])dnl
+     fi
+    ])
+  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+    # For using <pthread.h>:
+    case "$host_os" in
+      osf*)
+        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+        # groks <pthread.h>. cc also understands the flag -pthread, but
+        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+        # 2. putting a flag into CPPFLAGS that has an effect on the linker
+        # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
+        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+        ;;
+    esac
+    # Some systems optimize for single-threaded programs by default, and
+    # need special flags to disable these optimizations. For example, the
+    # definition of 'errno' in <errno.h>.
+    case "$host_os" in
+      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+    esac
+  fi
+])
+
+dnl The guts of gl_THREADLIB. Needs to be expanded only once.
+
+AC_DEFUN([gl_THREADLIB_BODY],
+[
+  AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
+  gl_threads_api=none
+  LIBTHREAD=
+  LTLIBTHREAD=
+  LIBMULTITHREAD=
+  LTLIBMULTITHREAD=
+  if test "$gl_use_threads" != no; then
+    dnl Check whether the compiler and linker support weak declarations.
+    AC_CACHE_CHECK([whether imported symbols can be declared weak],
+      [gl_cv_have_weak],
+      [gl_cv_have_weak=no
+       dnl First, test whether the compiler accepts it syntactically.
+       AC_LINK_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[extern void xyzzy ();
+#pragma weak xyzzy]],
+            [[xyzzy();]])],
+         [gl_cv_have_weak=maybe])
+       if test $gl_cv_have_weak = maybe; then
+         dnl Second, test whether it actually works. On Cygwin 1.7.2, with
+         dnl gcc 4.3, symbols declared weak always evaluate to the address 0.
+         AC_RUN_IFELSE(
+           [AC_LANG_SOURCE([[
+#include <stdio.h>
+#pragma weak fputs
+int main ()
+{
+  return (fputs == NULL);
+}]])],
+           [gl_cv_have_weak=yes],
+           [gl_cv_have_weak=no],
+           [dnl When cross-compiling, assume that only ELF platforms support
+            dnl weak symbols.
+            AC_EGREP_CPP([Extensible Linking Format],
+              [#ifdef __ELF__
+               Extensible Linking Format
+               #endif
+              ],
+              [gl_cv_have_weak="guessing yes"],
+              [gl_cv_have_weak="guessing no"])
+           ])
+       fi
+      ])
+    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+      # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY.
+      AC_CHECK_HEADER([pthread.h],
+        [gl_have_pthread_h=yes], [gl_have_pthread_h=no])
+      if test "$gl_have_pthread_h" = yes; then
+        # Other possible tests:
+        #   -lpthreads (FSU threads, PCthreads)
+        #   -lgthreads
+        gl_have_pthread=
+        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+        # the second one only in libpthread, and lock.c needs it.
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[#include <pthread.h>]],
+             [[pthread_mutex_lock((pthread_mutex_t*)0);
+               pthread_mutexattr_init((pthread_mutexattr_t*)0);]])],
+          [gl_have_pthread=yes])
+        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+        # since it is defined as a macro on OSF/1.)
+        if test -n "$gl_have_pthread"; then
+          # The program links fine without libpthread. But it may actually
+          # need to link with libpthread in order to create multiple threads.
+          AC_CHECK_LIB([pthread], [pthread_kill],
+            [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+             # On Solaris and HP-UX, most pthread functions exist also in libc.
+             # Therefore pthread_in_use() needs to actually try to create a
+             # thread: pthread_create from libc will fail, whereas
+             # pthread_create will actually create a thread.
+             case "$host_os" in
+               solaris* | hpux*)
+                 AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
+                   [Define if the pthread_in_use() detection is hard.])
+             esac
+            ])
+        else
+          # Some library is needed. Try libpthread and libc_r.
+          AC_CHECK_LIB([pthread], [pthread_kill],
+            [gl_have_pthread=yes
+             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
+             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread])
+          if test -z "$gl_have_pthread"; then
+            # For FreeBSD 4.
+            AC_CHECK_LIB([c_r], [pthread_kill],
+              [gl_have_pthread=yes
+               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
+               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r])
+          fi
+        fi
+        if test -n "$gl_have_pthread"; then
+          gl_threads_api=posix
+          AC_DEFINE([USE_POSIX_THREADS], [1],
+            [Define if the POSIX multithreading library can be used.])
+          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+            if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+              AC_DEFINE([USE_POSIX_THREADS_WEAK], [1],
+                [Define if references to the POSIX multithreading library should be made weak.])
+              LIBTHREAD=
+              LTLIBTHREAD=
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
+        gl_have_solaristhread=
+        gl_save_LIBS="$LIBS"
+        LIBS="$LIBS -lthread"
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[
+#include <thread.h>
+#include <synch.h>
+             ]],
+             [[thr_self();]])],
+          [gl_have_solaristhread=yes])
+        LIBS="$gl_save_LIBS"
+        if test -n "$gl_have_solaristhread"; then
+          gl_threads_api=solaris
+          LIBTHREAD=-lthread
+          LTLIBTHREAD=-lthread
+          LIBMULTITHREAD="$LIBTHREAD"
+          LTLIBMULTITHREAD="$LTLIBTHREAD"
+          AC_DEFINE([USE_SOLARIS_THREADS], [1],
+            [Define if the old Solaris multithreading library can be used.])
+          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+            AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1],
+              [Define if references to the old Solaris multithreading library should be made weak.])
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      fi
+    fi
+    if test "$gl_use_threads" = pth; then
+      gl_save_CPPFLAGS="$CPPFLAGS"
+      AC_LIB_LINKFLAGS([pth])
+      gl_have_pth=
+      gl_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBPTH"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM([[#include <pth.h>]], [[pth_self();]])],
+        [gl_have_pth=yes])
+      LIBS="$gl_save_LIBS"
+      if test -n "$gl_have_pth"; then
+        gl_threads_api=pth
+        LIBTHREAD="$LIBPTH"
+        LTLIBTHREAD="$LTLIBPTH"
+        LIBMULTITHREAD="$LIBTHREAD"
+        LTLIBMULTITHREAD="$LTLIBTHREAD"
+        AC_DEFINE([USE_PTH_THREADS], [1],
+          [Define if the GNU Pth multithreading library can be used.])
+        if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+            AC_DEFINE([USE_PTH_THREADS_WEAK], [1],
+              [Define if references to the GNU Pth multithreading library should be made weak.])
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      else
+        CPPFLAGS="$gl_save_CPPFLAGS"
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      case "$gl_use_threads" in
+        yes | windows | win32) # The 'win32' is for backward compatibility.
+          if { case "$host_os" in
+                 mingw*) true;;
+                 *) false;;
+               esac
+             }; then
+            gl_threads_api=windows
+            AC_DEFINE([USE_WINDOWS_THREADS], [1],
+              [Define if the native Windows multithreading API can be used.])
+          fi
+          ;;
+      esac
+    fi
+  fi
+  AC_MSG_CHECKING([for multithread API to use])
+  AC_MSG_RESULT([$gl_threads_api])
+  AC_SUBST([LIBTHREAD])
+  AC_SUBST([LTLIBTHREAD])
+  AC_SUBST([LIBMULTITHREAD])
+  AC_SUBST([LTLIBMULTITHREAD])
+])
+
+AC_DEFUN([gl_THREADLIB],
+[
+  AC_REQUIRE([gl_THREADLIB_EARLY])
+  AC_REQUIRE([gl_THREADLIB_BODY])
+])
+
+
+dnl gl_DISABLE_THREADS
+dnl ------------------
+dnl Sets the gl_THREADLIB default so that threads are not used by default.
+dnl The user can still override it at installation time, by using the
+dnl configure option '--enable-threads'.
+
+AC_DEFUN([gl_DISABLE_THREADS], [
+  m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no])
+])
+
+
+dnl Survey of platforms:
+dnl
+dnl Platform           Available  Compiler    Supports   test-lock
+dnl                    flavours   option      weak       result
+dnl ---------------    ---------  ---------   --------   ---------
+dnl Linux 2.4/glibc    posix      -lpthread       Y      OK
+dnl
+dnl GNU Hurd/glibc     posix
+dnl
+dnl FreeBSD 5.3        posix      -lc_r           Y
+dnl                    posix      -lkse ?         Y
+dnl                    posix      -lpthread ?     Y
+dnl                    posix      -lthr           Y
+dnl
+dnl FreeBSD 5.2        posix      -lc_r           Y
+dnl                    posix      -lkse           Y
+dnl                    posix      -lthr           Y
+dnl
+dnl FreeBSD 4.0,4.10   posix      -lc_r           Y      OK
+dnl
+dnl NetBSD 1.6         --
+dnl
+dnl OpenBSD 3.4        posix      -lpthread       Y      OK
+dnl
+dnl Mac OS X 10.[123]  posix      -lpthread       Y      OK
+dnl
+dnl Solaris 7,8,9      posix      -lpthread       Y      Sol 7,8: 0.0; Sol 9: OK
+dnl                    solaris    -lthread        Y      Sol 7,8: 0.0; Sol 9: OK
+dnl
+dnl HP-UX 11           posix      -lpthread       N (cc) OK
+dnl                                               Y (gcc)
+dnl
+dnl IRIX 6.5           posix      -lpthread       Y      0.5
+dnl
+dnl AIX 4.3,5.1        posix      -lpthread       N      AIX 4: 0.5; AIX 5: OK
+dnl
+dnl OSF/1 4.0,5.1      posix      -pthread (cc)   N      OK
+dnl                               -lpthread (gcc) Y
+dnl
+dnl Cygwin             posix      -lpthread       Y      OK
+dnl
+dnl Any of the above   pth        -lpth                  0.0
+dnl
+dnl Mingw              windows                    N      OK
+dnl
+dnl BeOS 5             --
+dnl
+dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
+dnl turned off:
+dnl   OK if all three tests terminate OK,
+dnl   0.5 if the first test terminates OK but the second one loops endlessly,
+dnl   0.0 if the first test already loops endlessly.
diff --git a/m4/time_h.m4 b/m4/time_h.m4
new file mode 100644
index 0000000..6415bfb
--- /dev/null
+++ b/m4/time_h.m4
@@ -0,0 +1,109 @@
+# Configure a more-standard replacement for <time.h>.
+
+# Copyright (C) 2000-2001, 2003-2007, 2009-2012 Free Software Foundation, Inc.
+
+# serial 7
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Paul Eggert and Jim Meyering.
+
+AC_DEFUN([gl_HEADER_TIME_H],
+[
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_HEADER_TIME_H_BODY])
+])
+
+AC_DEFUN([gl_HEADER_TIME_H_BODY],
+[
+  AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
+  gl_NEXT_HEADERS([time.h])
+  AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC])
+])
+
+dnl Check whether 'struct timespec' is declared
+dnl in time.h, sys/time.h, or pthread.h.
+
+AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
+[
+  AC_CHECK_HEADERS_ONCE([sys/time.h])
+  AC_CACHE_CHECK([for struct timespec in <time.h>],
+    [gl_cv_sys_struct_timespec_in_time_h],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <time.h>
+          ]],
+          [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+       [gl_cv_sys_struct_timespec_in_time_h=yes],
+       [gl_cv_sys_struct_timespec_in_time_h=no])])
+
+  TIME_H_DEFINES_STRUCT_TIMESPEC=0
+  SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
+  PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
+  if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
+    TIME_H_DEFINES_STRUCT_TIMESPEC=1
+  else
+    AC_CACHE_CHECK([for struct timespec in <sys/time.h>],
+      [gl_cv_sys_struct_timespec_in_sys_time_h],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <sys/time.h>
+            ]],
+            [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+         [gl_cv_sys_struct_timespec_in_sys_time_h=yes],
+         [gl_cv_sys_struct_timespec_in_sys_time_h=no])])
+    if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then
+      SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1
+    else
+      AC_CACHE_CHECK([for struct timespec in <pthread.h>],
+        [gl_cv_sys_struct_timespec_in_pthread_h],
+        [AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM(
+              [[#include <pthread.h>
+              ]],
+              [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+           [gl_cv_sys_struct_timespec_in_pthread_h=yes],
+           [gl_cv_sys_struct_timespec_in_pthread_h=no])])
+      if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then
+        PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1
+      fi
+    fi
+  fi
+  AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC])
+  AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
+  AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
+])
+
+AC_DEFUN([gl_TIME_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
+[
+  GNULIB_MKTIME=0;                       AC_SUBST([GNULIB_MKTIME])
+  GNULIB_NANOSLEEP=0;                    AC_SUBST([GNULIB_NANOSLEEP])
+  GNULIB_STRPTIME=0;                     AC_SUBST([GNULIB_STRPTIME])
+  GNULIB_TIMEGM=0;                       AC_SUBST([GNULIB_TIMEGM])
+  GNULIB_TIME_R=0;                       AC_SUBST([GNULIB_TIME_R])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_DECL_LOCALTIME_R=1;               AC_SUBST([HAVE_DECL_LOCALTIME_R])
+  HAVE_NANOSLEEP=1;                      AC_SUBST([HAVE_NANOSLEEP])
+  HAVE_STRPTIME=1;                       AC_SUBST([HAVE_STRPTIME])
+  HAVE_TIMEGM=1;                         AC_SUBST([HAVE_TIMEGM])
+  dnl If another module says to replace or to not replace, do that.
+  dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
+  dnl this lets maintainers check for portability.
+  REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;  AC_SUBST([REPLACE_LOCALTIME_R])
+  REPLACE_MKTIME=GNULIB_PORTCHECK;       AC_SUBST([REPLACE_MKTIME])
+  REPLACE_NANOSLEEP=GNULIB_PORTCHECK;    AC_SUBST([REPLACE_NANOSLEEP])
+  REPLACE_TIMEGM=GNULIB_PORTCHECK;       AC_SUBST([REPLACE_TIMEGM])
+])
diff --git a/m4/timevar.m4 b/m4/timevar.m4
index 2704a91..f8d3606 100644
--- a/m4/timevar.m4
+++ b/m4/timevar.m4
@@ -1,11 +1,11 @@
 # -*- Autoconf -*-
 # Checks required to run `timevar', a time tracker.
 #
-# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 2002-2003, 2009-2012 Free Software Foundation, Inc.
 #
-# This program is free software; you can redistribute it and/or modify
+# 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 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -14,9 +14,7 @@
 # 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # serial 2
 
diff --git a/m4/uintmax_t_gl.m4 b/m4/uintmax_t_gl.m4
deleted file mode 100644
index bf83ed7..0000000
--- a/m4/uintmax_t_gl.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-# uintmax_t.m4 serial 9
-dnl Copyright (C) 1997-2004 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-AC_PREREQ(2.13)
-
-# Define uintmax_t to 'unsigned long' or 'unsigned long long'
-# if it is not already defined in <stdint.h> or <inttypes.h>.
-
-AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
-[
-  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
-  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
-    AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG])
-    test $ac_cv_type_unsigned_long_long = yes \
-      && ac_type='unsigned long long' \
-      || ac_type='unsigned long'
-    AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
-      [Define to unsigned long or unsigned long long
-       if <stdint.h> and <inttypes.h> don't define.])
-  else
-    AC_DEFINE(HAVE_UINTMAX_T, 1,
-      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
-  fi
-])
diff --git a/m4/ulonglong_gl.m4 b/m4/ulonglong_gl.m4
deleted file mode 100644
index dee10cc..0000000
--- a/m4/ulonglong_gl.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-# ulonglong.m4 serial 4
-dnl Copyright (C) 1999-2004 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.
-
-AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG],
-[
-  AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
-  [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;],
-    [unsigned long long ullmax = (unsigned long long) -1;
-     return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
-    ac_cv_type_unsigned_long_long=yes,
-    ac_cv_type_unsigned_long_long=no)])
-  if test $ac_cv_type_unsigned_long_long = yes; then
-    AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
-      [Define if you have the 'unsigned long long' type.])
-  fi
-])
diff --git a/m4/unistd-safer.m4 b/m4/unistd-safer.m4
index 6fbe4c6..62e295b 100644
--- a/m4/unistd-safer.m4
+++ b/m4/unistd-safer.m4
@@ -1,13 +1,10 @@
-#serial 7
-dnl Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+#serial 9
+dnl Copyright (C) 2002, 2005-2006, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_UNISTD_SAFER],
 [
-  AC_LIBSOURCES([dup-safer.c, fd-safer.c, pipe-safer.c, unistd-safer.h, unistd--.h])
-  AC_LIBOBJ([dup-safer])
-  AC_LIBOBJ([fd-safer])
-  AC_LIBOBJ([pipe-safer])
+  AC_CHECK_FUNCS_ONCE([pipe])
 ])
diff --git a/m4/unistd_h.m4 b/m4/unistd_h.m4
index 9c77f9b..f68fbff 100644
--- a/m4/unistd_h.m4
+++ b/m4/unistd_h.m4
@@ -1,18 +1,186 @@
-# unistd_h.m4 serial 2
-dnl Copyright (C) 2006 Free Software Foundation, Inc.
+# unistd_h.m4 serial 66
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-dnl Written by Simon Josefsson
+dnl Written by Simon Josefsson, Bruno Haible.
 
-AC_DEFUN([gl_HEADER_UNISTD],
+AC_DEFUN([gl_UNISTD_H],
 [
-  dnl Prerequisites of lib/unistd.h.
-  AC_CHECK_HEADERS([unistd.h], [
-    UNISTD_H=''
-  ], [
-    UNISTD_H='unistd.h'
-  ])
-  AC_SUBST(UNISTD_H)
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+
+  gl_CHECK_NEXT_HEADERS([unistd.h])
+  if test $ac_cv_header_unistd_h = yes; then
+    HAVE_UNISTD_H=1
+  else
+    HAVE_UNISTD_H=0
+  fi
+  AC_SUBST([HAVE_UNISTD_H])
+
+  dnl Ensure the type pid_t gets defined.
+  AC_REQUIRE([AC_TYPE_PID_T])
+
+  dnl Determine WINDOWS_64_BIT_OFF_T.
+  AC_REQUIRE([gl_TYPE_OFF_T])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+/* Some systems declare various items in the wrong headers.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <fcntl.h>
+# include <stdio.h>
+# include <stdlib.h>
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+    ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat
+    fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups
+    gethostname getlogin getlogin_r getpagesize
+    getusershell setusershell endusershell
+    group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite
+    readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r
+    unlink unlinkat usleep])
+])
+
+AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_UNISTD_H_DEFAULTS],
+[
+  GNULIB_CHDIR=0;                AC_SUBST([GNULIB_CHDIR])
+  GNULIB_CHOWN=0;                AC_SUBST([GNULIB_CHOWN])
+  GNULIB_CLOSE=0;                AC_SUBST([GNULIB_CLOSE])
+  GNULIB_DUP=0;                  AC_SUBST([GNULIB_DUP])
+  GNULIB_DUP2=0;                 AC_SUBST([GNULIB_DUP2])
+  GNULIB_DUP3=0;                 AC_SUBST([GNULIB_DUP3])
+  GNULIB_ENVIRON=0;              AC_SUBST([GNULIB_ENVIRON])
+  GNULIB_EUIDACCESS=0;           AC_SUBST([GNULIB_EUIDACCESS])
+  GNULIB_FACCESSAT=0;            AC_SUBST([GNULIB_FACCESSAT])
+  GNULIB_FCHDIR=0;               AC_SUBST([GNULIB_FCHDIR])
+  GNULIB_FCHOWNAT=0;             AC_SUBST([GNULIB_FCHOWNAT])
+  GNULIB_FDATASYNC=0;            AC_SUBST([GNULIB_FDATASYNC])
+  GNULIB_FSYNC=0;                AC_SUBST([GNULIB_FSYNC])
+  GNULIB_FTRUNCATE=0;            AC_SUBST([GNULIB_FTRUNCATE])
+  GNULIB_GETCWD=0;               AC_SUBST([GNULIB_GETCWD])
+  GNULIB_GETDOMAINNAME=0;        AC_SUBST([GNULIB_GETDOMAINNAME])
+  GNULIB_GETDTABLESIZE=0;        AC_SUBST([GNULIB_GETDTABLESIZE])
+  GNULIB_GETGROUPS=0;            AC_SUBST([GNULIB_GETGROUPS])
+  GNULIB_GETHOSTNAME=0;          AC_SUBST([GNULIB_GETHOSTNAME])
+  GNULIB_GETLOGIN=0;             AC_SUBST([GNULIB_GETLOGIN])
+  GNULIB_GETLOGIN_R=0;           AC_SUBST([GNULIB_GETLOGIN_R])
+  GNULIB_GETPAGESIZE=0;          AC_SUBST([GNULIB_GETPAGESIZE])
+  GNULIB_GETUSERSHELL=0;         AC_SUBST([GNULIB_GETUSERSHELL])
+  GNULIB_GROUP_MEMBER=0;         AC_SUBST([GNULIB_GROUP_MEMBER])
+  GNULIB_ISATTY=0;               AC_SUBST([GNULIB_ISATTY])
+  GNULIB_LCHOWN=0;               AC_SUBST([GNULIB_LCHOWN])
+  GNULIB_LINK=0;                 AC_SUBST([GNULIB_LINK])
+  GNULIB_LINKAT=0;               AC_SUBST([GNULIB_LINKAT])
+  GNULIB_LSEEK=0;                AC_SUBST([GNULIB_LSEEK])
+  GNULIB_PIPE=0;                 AC_SUBST([GNULIB_PIPE])
+  GNULIB_PIPE2=0;                AC_SUBST([GNULIB_PIPE2])
+  GNULIB_PREAD=0;                AC_SUBST([GNULIB_PREAD])
+  GNULIB_PWRITE=0;               AC_SUBST([GNULIB_PWRITE])
+  GNULIB_READ=0;                 AC_SUBST([GNULIB_READ])
+  GNULIB_READLINK=0;             AC_SUBST([GNULIB_READLINK])
+  GNULIB_READLINKAT=0;           AC_SUBST([GNULIB_READLINKAT])
+  GNULIB_RMDIR=0;                AC_SUBST([GNULIB_RMDIR])
+  GNULIB_SETHOSTNAME=0;          AC_SUBST([GNULIB_SETHOSTNAME])
+  GNULIB_SLEEP=0;                AC_SUBST([GNULIB_SLEEP])
+  GNULIB_SYMLINK=0;              AC_SUBST([GNULIB_SYMLINK])
+  GNULIB_SYMLINKAT=0;            AC_SUBST([GNULIB_SYMLINKAT])
+  GNULIB_TTYNAME_R=0;            AC_SUBST([GNULIB_TTYNAME_R])
+  GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING])
+  GNULIB_UNISTD_H_SIGPIPE=0;     AC_SUBST([GNULIB_UNISTD_H_SIGPIPE])
+  GNULIB_UNLINK=0;               AC_SUBST([GNULIB_UNLINK])
+  GNULIB_UNLINKAT=0;             AC_SUBST([GNULIB_UNLINKAT])
+  GNULIB_USLEEP=0;               AC_SUBST([GNULIB_USLEEP])
+  GNULIB_WRITE=0;                AC_SUBST([GNULIB_WRITE])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_CHOWN=1;           AC_SUBST([HAVE_CHOWN])
+  HAVE_DUP2=1;            AC_SUBST([HAVE_DUP2])
+  HAVE_DUP3=1;            AC_SUBST([HAVE_DUP3])
+  HAVE_EUIDACCESS=1;      AC_SUBST([HAVE_EUIDACCESS])
+  HAVE_FACCESSAT=1;       AC_SUBST([HAVE_FACCESSAT])
+  HAVE_FCHDIR=1;          AC_SUBST([HAVE_FCHDIR])
+  HAVE_FCHOWNAT=1;        AC_SUBST([HAVE_FCHOWNAT])
+  HAVE_FDATASYNC=1;       AC_SUBST([HAVE_FDATASYNC])
+  HAVE_FSYNC=1;           AC_SUBST([HAVE_FSYNC])
+  HAVE_FTRUNCATE=1;       AC_SUBST([HAVE_FTRUNCATE])
+  HAVE_GETDTABLESIZE=1;   AC_SUBST([HAVE_GETDTABLESIZE])
+  HAVE_GETGROUPS=1;       AC_SUBST([HAVE_GETGROUPS])
+  HAVE_GETHOSTNAME=1;     AC_SUBST([HAVE_GETHOSTNAME])
+  HAVE_GETLOGIN=1;        AC_SUBST([HAVE_GETLOGIN])
+  HAVE_GETPAGESIZE=1;     AC_SUBST([HAVE_GETPAGESIZE])
+  HAVE_GROUP_MEMBER=1;    AC_SUBST([HAVE_GROUP_MEMBER])
+  HAVE_LCHOWN=1;          AC_SUBST([HAVE_LCHOWN])
+  HAVE_LINK=1;            AC_SUBST([HAVE_LINK])
+  HAVE_LINKAT=1;          AC_SUBST([HAVE_LINKAT])
+  HAVE_PIPE=1;            AC_SUBST([HAVE_PIPE])
+  HAVE_PIPE2=1;           AC_SUBST([HAVE_PIPE2])
+  HAVE_PREAD=1;           AC_SUBST([HAVE_PREAD])
+  HAVE_PWRITE=1;          AC_SUBST([HAVE_PWRITE])
+  HAVE_READLINK=1;        AC_SUBST([HAVE_READLINK])
+  HAVE_READLINKAT=1;      AC_SUBST([HAVE_READLINKAT])
+  HAVE_SETHOSTNAME=1;     AC_SUBST([HAVE_SETHOSTNAME])
+  HAVE_SLEEP=1;           AC_SUBST([HAVE_SLEEP])
+  HAVE_SYMLINK=1;         AC_SUBST([HAVE_SYMLINK])
+  HAVE_SYMLINKAT=1;       AC_SUBST([HAVE_SYMLINKAT])
+  HAVE_UNLINKAT=1;        AC_SUBST([HAVE_UNLINKAT])
+  HAVE_USLEEP=1;          AC_SUBST([HAVE_USLEEP])
+  HAVE_DECL_ENVIRON=1;    AC_SUBST([HAVE_DECL_ENVIRON])
+  HAVE_DECL_FCHDIR=1;     AC_SUBST([HAVE_DECL_FCHDIR])
+  HAVE_DECL_FDATASYNC=1;  AC_SUBST([HAVE_DECL_FDATASYNC])
+  HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME])
+  HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
+  HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE])
+  HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL])
+  HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME])
+  HAVE_DECL_TTYNAME_R=1;  AC_SUBST([HAVE_DECL_TTYNAME_R])
+  HAVE_OS_H=0;            AC_SUBST([HAVE_OS_H])
+  HAVE_SYS_PARAM_H=0;     AC_SUBST([HAVE_SYS_PARAM_H])
+  REPLACE_CHOWN=0;        AC_SUBST([REPLACE_CHOWN])
+  REPLACE_CLOSE=0;        AC_SUBST([REPLACE_CLOSE])
+  REPLACE_DUP=0;          AC_SUBST([REPLACE_DUP])
+  REPLACE_DUP2=0;         AC_SUBST([REPLACE_DUP2])
+  REPLACE_FCHOWNAT=0;     AC_SUBST([REPLACE_FCHOWNAT])
+  REPLACE_FTRUNCATE=0;    AC_SUBST([REPLACE_FTRUNCATE])
+  REPLACE_GETCWD=0;       AC_SUBST([REPLACE_GETCWD])
+  REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME])
+  REPLACE_GETLOGIN_R=0;   AC_SUBST([REPLACE_GETLOGIN_R])
+  REPLACE_GETGROUPS=0;    AC_SUBST([REPLACE_GETGROUPS])
+  REPLACE_GETPAGESIZE=0;  AC_SUBST([REPLACE_GETPAGESIZE])
+  REPLACE_ISATTY=0;       AC_SUBST([REPLACE_ISATTY])
+  REPLACE_LCHOWN=0;       AC_SUBST([REPLACE_LCHOWN])
+  REPLACE_LINK=0;         AC_SUBST([REPLACE_LINK])
+  REPLACE_LINKAT=0;       AC_SUBST([REPLACE_LINKAT])
+  REPLACE_LSEEK=0;        AC_SUBST([REPLACE_LSEEK])
+  REPLACE_PREAD=0;        AC_SUBST([REPLACE_PREAD])
+  REPLACE_PWRITE=0;       AC_SUBST([REPLACE_PWRITE])
+  REPLACE_READ=0;         AC_SUBST([REPLACE_READ])
+  REPLACE_READLINK=0;     AC_SUBST([REPLACE_READLINK])
+  REPLACE_RMDIR=0;        AC_SUBST([REPLACE_RMDIR])
+  REPLACE_SLEEP=0;        AC_SUBST([REPLACE_SLEEP])
+  REPLACE_SYMLINK=0;      AC_SUBST([REPLACE_SYMLINK])
+  REPLACE_TTYNAME_R=0;    AC_SUBST([REPLACE_TTYNAME_R])
+  REPLACE_UNLINK=0;       AC_SUBST([REPLACE_UNLINK])
+  REPLACE_UNLINKAT=0;     AC_SUBST([REPLACE_UNLINKAT])
+  REPLACE_USLEEP=0;       AC_SUBST([REPLACE_USLEEP])
+  REPLACE_WRITE=0;        AC_SUBST([REPLACE_WRITE])
+  UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
+  UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+                           AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
 ])
diff --git a/m4/unlocked-io.m4 b/m4/unlocked-io.m4
index f58e960..c44adae 100644
--- a/m4/unlocked-io.m4
+++ b/m4/unlocked-io.m4
@@ -1,7 +1,6 @@
-# unlocked-io.m4 serial 13
+# unlocked-io.m4 serial 15
 
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-# Free Software Foundation, Inc.
+# Copyright (C) 1998-2006, 2009-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -17,9 +16,7 @@
 
 AC_DEFUN([gl_FUNC_GLIBC_UNLOCKED_IO],
 [
-  AC_LIBSOURCES([unlocked-io.h])
-
-  AC_DEFINE([USE_UNLOCKED_IO], 1,
+  AC_DEFINE([USE_UNLOCKED_IO], [1],
     [Define to 1 if you want getc etc. to use unlocked I/O if available.
      Unlocked I/O can improve performance in unithreaded apps,
      but it is not safe for multithreaded apps.])
diff --git a/m4/vasnprintf.m4 b/m4/vasnprintf.m4
new file mode 100644
index 0000000..00308c4
--- /dev/null
+++ b/m4/vasnprintf.m4
@@ -0,0 +1,291 @@
+# vasnprintf.m4 serial 36
+dnl Copyright (C) 2002-2004, 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_VASNPRINTF],
+[
+  AC_CHECK_FUNCS_ONCE([vasnprintf])
+  if test $ac_cv_func_vasnprintf = no; then
+    gl_REPLACE_VASNPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_VASNPRINTF],
+[
+  AC_CHECK_FUNCS_ONCE([vasnprintf])
+  AC_LIBOBJ([vasnprintf])
+  AC_LIBOBJ([printf-args])
+  AC_LIBOBJ([printf-parse])
+  AC_LIBOBJ([asnprintf])
+  if test $ac_cv_func_vasnprintf = yes; then
+    AC_DEFINE([REPLACE_VASNPRINTF], [1],
+      [Define if vasnprintf exists but is overridden by gnulib.])
+  fi
+  gl_PREREQ_PRINTF_ARGS
+  gl_PREREQ_PRINTF_PARSE
+  gl_PREREQ_VASNPRINTF
+  gl_PREREQ_ASNPRINTF
+])
+
+# Prerequisites of lib/printf-args.h, lib/printf-args.c.
+AC_DEFUN([gl_PREREQ_PRINTF_ARGS],
+[
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+])
+
+# Prerequisites of lib/printf-parse.h, lib/printf-parse.c.
+AC_DEFUN([gl_PREREQ_PRINTF_PARSE],
+[
+  AC_REQUIRE([gl_FEATURES_H])
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  AC_REQUIRE([AC_TYPE_SIZE_T])
+  AC_CHECK_TYPE([ptrdiff_t], ,
+    [AC_DEFINE([ptrdiff_t], [long],
+       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+    ])
+  AC_REQUIRE([gt_AC_TYPE_INTMAX_T])
+])
+
+# Prerequisites of lib/vasnprintf.c.
+AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF],
+[
+  AC_REQUIRE([AC_FUNC_ALLOCA])
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
+  dnl Use the _snprintf function only if it is declared (because on NetBSD it
+  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+  AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]])
+  dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization
+  dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE.
+  AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
+  dnl We can avoid a lot of code by assuming that snprintf's return value
+  dnl conforms to ISO C99. So check that.
+  AC_REQUIRE([gl_SNPRINTF_RETVAL_C99])
+  case "$gl_cv_func_snprintf_retval_c99" in
+    *yes)
+      AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1],
+        [Define if the return value of the snprintf function is the number of
+         of bytes (excluding the terminating NUL) that would have been produced
+         if the buffer had been large enough.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting 'long double'
+# arguments.
+AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE],
+[
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'long double' arguments.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double'
+# arguments.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE],
+[
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         infinite 'double' arguments.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double'
+# arguments.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE],
+[
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if
+  dnl NEED_PRINTF_LONG_DOUBLE is already set.
+  AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE])
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+          AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1],
+            [Define if the vasnprintf implementation needs special code for
+             infinite 'long double' arguments.])
+          ;;
+      esac
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A],
+[
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1],
+        [Define if the vasnprintf implementation needs special code for
+         the 'a' and 'A' directives.])
+      AC_CHECK_FUNCS([nl_langinfo])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F],
+[
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1],
+        [Define if the vasnprintf implementation needs special code for
+         the 'F' directive.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS],
+[
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1],
+        [Define if the vasnprintf implementation needs special code for
+         the 'ls' directive.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING],
+[
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1],
+        [Define if the vasnprintf implementation needs special code for the
+         ' flag.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST],
+[
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1],
+        [Define if the vasnprintf implementation needs special code for the
+         '-' flag.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO],
+[
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1],
+        [Define if the vasnprintf implementation needs special code for the
+         0 flag.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting large precisions.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION],
+[
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1],
+        [Define if the vasnprintf implementation needs special code for
+         supporting large precisions without arbitrary bounds.])
+      AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'double' arguments.])
+      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'long double' arguments.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory
+# conditions.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM],
+[
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_ENOMEM], [1],
+        [Define if the vasnprintf implementation needs special code for
+         surviving out-of-memory conditions.])
+      AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'double' arguments.])
+      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'long double' arguments.])
+      ;;
+  esac
+])
+
+# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS],
+[
+  AC_REQUIRE([gl_PREREQ_VASNPRINTF])
+  gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+  gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+  gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+  gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+  gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+  gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+  gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+  gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+  gl_PREREQ_VASNPRINTF_FLAG_ZERO
+  gl_PREREQ_VASNPRINTF_PRECISION
+  gl_PREREQ_VASNPRINTF_ENOMEM
+])
+
+# Prerequisites of lib/asnprintf.c.
+AC_DEFUN([gl_PREREQ_ASNPRINTF],
+[
+])
diff --git a/m4/vfprintf-posix.m4 b/m4/vfprintf-posix.m4
new file mode 100644
index 0000000..441bd57
--- /dev/null
+++ b/m4/vfprintf-posix.m4
@@ -0,0 +1,110 @@
+# vfprintf-posix.m4 serial 14
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_VFPRINTF_POSIX],
+[
+  AC_REQUIRE([gl_PRINTF_SIZES_C99])
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  AC_REQUIRE([gl_PRINTF_POSITIONS])
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  gl_cv_func_vfprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # vfprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_vfprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_vfprintf_posix = no; then
+    gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+    gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+    gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+    gl_PREREQ_VASNPRINTF_FLAG_ZERO
+    gl_PREREQ_VASNPRINTF_PRECISION
+    gl_PREREQ_VASNPRINTF_ENOMEM
+    gl_REPLACE_VASNPRINTF
+    gl_REPLACE_VFPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_VFPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([vfprintf])
+  REPLACE_VFPRINTF=1
+  AC_DEFINE([REPLACE_VFPRINTF_POSIX], [1],
+    [Define if vfprintf is overridden by a POSIX compliant gnulib implementation.])
+  gl_PREREQ_VFPRINTF
+])
+
+AC_DEFUN([gl_PREREQ_VFPRINTF], [:])
diff --git a/m4/vsnprintf-posix.m4 b/m4/vsnprintf-posix.m4
new file mode 100644
index 0000000..3e99e5a
--- /dev/null
+++ b/m4/vsnprintf-posix.m4
@@ -0,0 +1,127 @@
+# vsnprintf-posix.m4 serial 15
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_VSNPRINTF_POSIX],
+[
+  AC_REQUIRE([gl_PRINTF_SIZES_C99])
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  AC_REQUIRE([gl_PRINTF_POSITIONS])
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  gl_cv_func_vsnprintf_posix=no
+  AC_CHECK_FUNCS([vsnprintf])
+  if test $ac_cv_func_vsnprintf = yes; then
+    dnl These tests use vsnprintf() if snprintf() does not exist.
+    gl_SNPRINTF_TRUNCATION_C99
+    gl_SNPRINTF_RETVAL_C99
+    gl_SNPRINTF_DIRECTIVE_N
+    gl_SNPRINTF_SIZE1
+    gl_VSNPRINTF_ZEROSIZE_C99
+    case "$gl_cv_func_printf_sizes_c99" in
+      *yes)
+        case "$gl_cv_func_printf_long_double" in
+          *yes)
+            case "$gl_cv_func_printf_infinite" in
+              *yes)
+                case "$gl_cv_func_printf_infinite_long_double" in
+                  *yes)
+                    case "$gl_cv_func_printf_directive_a" in
+                      *yes)
+                        case "$gl_cv_func_printf_directive_f" in
+                          *yes)
+                            case "$gl_cv_func_printf_directive_n" in
+                              *yes)
+                                case "$gl_cv_func_printf_directive_ls" in
+                                  *yes)
+                                    case "$gl_cv_func_printf_positions" in
+                                      *yes)
+                                        case "$gl_cv_func_printf_flag_grouping" in
+                                          *yes)
+                                            case "$gl_cv_func_printf_flag_leftadjust" in
+                                              *yes)
+                                                case "$gl_cv_func_printf_flag_zero" in
+                                                  *yes)
+                                                    case "$gl_cv_func_printf_precision" in
+                                                      *yes)
+                                                        case "$gl_cv_func_printf_enomem" in
+                                                          *yes)
+                                                            case "$gl_cv_func_snprintf_truncation_c99" in
+                                                              *yes)
+                                                                case "$gl_cv_func_snprintf_retval_c99" in
+                                                                  *yes)
+                                                                    case "$gl_cv_func_snprintf_directive_n" in
+                                                                      *yes)
+                                                                        case "$gl_cv_func_snprintf_size1" in
+                                                                          *yes)
+                                                                            case "$gl_cv_func_vsnprintf_zerosize_c99" in
+                                                                              *yes)
+                                                                                # vsnprintf exists and is
+                                                                                # already POSIX compliant.
+                                                                                gl_cv_func_vsnprintf_posix=yes
+                                                                                ;;
+                                                                            esac
+                                                                            ;;
+                                                                        esac
+                                                                        ;;
+                                                                    esac
+                                                                    ;;
+                                                                esac
+                                                                ;;
+                                                            esac
+                                                            ;;
+                                                        esac
+                                                        ;;
+                                                    esac
+                                                    ;;
+                                                esac
+                                                ;;
+                                            esac
+                                            ;;
+                                        esac
+                                        ;;
+                                    esac
+                                    ;;
+                                esac
+                                ;;
+                            esac
+                            ;;
+                        esac
+                        ;;
+                    esac
+                    ;;
+                esac
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_vsnprintf_posix = no; then
+    gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+    gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+    gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+    gl_PREREQ_VASNPRINTF_FLAG_ZERO
+    gl_PREREQ_VASNPRINTF_PRECISION
+    gl_PREREQ_VASNPRINTF_ENOMEM
+    gl_REPLACE_VASNPRINTF
+    gl_REPLACE_VSNPRINTF
+  fi
+])
diff --git a/m4/vsnprintf.m4 b/m4/vsnprintf.m4
new file mode 100644
index 0000000..22ec57b
--- /dev/null
+++ b/m4/vsnprintf.m4
@@ -0,0 +1,54 @@
+# vsnprintf.m4 serial 6
+dnl Copyright (C) 2002-2004, 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Libintl 0.17 will replace vsnprintf only if it does not support %1$s,
+dnl but defers to any gnulib vsnprintf replacements.  Therefore, gnulib
+dnl must guarantee that the decision for replacing vsnprintf is a superset
+dnl of the reasons checked by libintl.
+AC_DEFUN([gl_FUNC_VSNPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  gl_cv_func_vsnprintf_usable=no
+  AC_CHECK_FUNCS([vsnprintf])
+  if test $ac_cv_func_vsnprintf = yes; then
+    gl_SNPRINTF_SIZE1
+    case "$gl_cv_func_snprintf_size1" in
+      *yes)
+        gl_SNPRINTF_RETVAL_C99
+        case "$gl_cv_func_snprintf_retval_c99" in
+          *yes)
+            gl_PRINTF_POSITIONS
+            case "$gl_cv_func_printf_positions" in
+              *yes)
+                gl_cv_func_vsnprintf_usable=yes
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_vsnprintf_usable = no; then
+    gl_REPLACE_VSNPRINTF
+  fi
+  AC_CHECK_DECLS_ONCE([vsnprintf])
+  if test $ac_cv_have_decl_vsnprintf = no; then
+    HAVE_DECL_VSNPRINTF=0
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_VSNPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([vsnprintf])
+  if test $ac_cv_func_vsnprintf = yes; then
+    REPLACE_VSNPRINTF=1
+  fi
+  gl_PREREQ_VSNPRINTF
+])
+
+# Prerequisites of lib/vsnprintf.c.
+AC_DEFUN([gl_PREREQ_VSNPRINTF], [:])
diff --git a/m4/vsprintf-posix.m4 b/m4/vsprintf-posix.m4
new file mode 100644
index 0000000..a6a8692
--- /dev/null
+++ b/m4/vsprintf-posix.m4
@@ -0,0 +1,108 @@
+# vsprintf-posix.m4 serial 12
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_VSPRINTF_POSIX],
+[
+  AC_REQUIRE([gl_PRINTF_SIZES_C99])
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  AC_REQUIRE([gl_PRINTF_POSITIONS])
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  gl_cv_func_vsprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # vsprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_vsprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_vsprintf_posix = no; then
+    gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+    gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+    gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+    gl_PREREQ_VASNPRINTF_FLAG_ZERO
+    gl_PREREQ_VASNPRINTF_PRECISION
+    gl_PREREQ_VASNPRINTF_ENOMEM
+    gl_REPLACE_VASNPRINTF
+    gl_REPLACE_VSPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_VSPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([vsprintf])
+  REPLACE_VSPRINTF=1
+  gl_PREREQ_VSPRINTF
+])
+
+AC_DEFUN([gl_PREREQ_VSPRINTF], [:])
diff --git a/m4/wait-process.m4 b/m4/wait-process.m4
new file mode 100644
index 0000000..24524b0
--- /dev/null
+++ b/m4/wait-process.m4
@@ -0,0 +1,12 @@
+# wait-process.m4 serial 6
+dnl Copyright (C) 2003, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_WAIT_PROCESS],
+[
+  dnl Prerequisites of lib/wait-process.c.
+  AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T])
+  AC_CHECK_FUNCS([waitid])
+])
diff --git a/m4/waitpid.m4 b/m4/waitpid.m4
new file mode 100644
index 0000000..42a83bb
--- /dev/null
+++ b/m4/waitpid.m4
@@ -0,0 +1,14 @@
+# waitpid.m4 serial 2
+dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_WAITPID],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  HAVE_WAITPID=1
+  case $host_os in
+    mingw*) HAVE_WAITPID=0 ;;
+  esac
+])
diff --git a/m4/warn-on-use.m4 b/m4/warn-on-use.m4
new file mode 100644
index 0000000..a77802e
--- /dev/null
+++ b/m4/warn-on-use.m4
@@ -0,0 +1,47 @@
+# warn-on-use.m4 serial 5
+dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
+# ---------------------------------------
+# For each whitespace-separated element in the list of NAMES, define
+# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
+# even after being undefined as a macro.
+#
+# See warn-on-use.h for some hints on how to poison function names, as
+# well as ideas on poisoning global variables and macros.  NAMES may
+# include global variables, but remember that only functions work with
+# _GL_WARN_ON_USE.  Typically, INCLUDES only needs to list a single
+# header, but if the replacement header pulls in other headers because
+# some systems declare functions in the wrong header, then INCLUDES
+# should do likewise.
+#
+# It is generally safe to assume declarations for functions declared
+# in the intersection of C89 and C11 (such as printf) without
+# needing gl_WARN_ON_USE_PREPARE.
+AC_DEFUN([gl_WARN_ON_USE_PREPARE],
+[
+  m4_foreach_w([gl_decl], [$2],
+    [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
+      [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
+       undefining macros.])])dnl
+dnl FIXME: gl_Symbol must be used unquoted until we can assume
+dnl autoconf 2.64 or newer.
+  for gl_func in m4_flatten([$2]); do
+    AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
+    AC_CACHE_CHECK([whether $gl_func is declared without a macro],
+      gl_Symbol,
+      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
+[@%:@undef $gl_func
+  (void) $gl_func;])],
+        [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
+    AS_VAR_IF(gl_Symbol, [yes],
+      [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
+       dnl shortcut - if the raw declaration exists, then set a cache
+       dnl variable to allow skipping any later AC_CHECK_DECL efforts
+       eval ac_cv_have_decl_$gl_func=yes])
+    AS_VAR_POPDEF([gl_Symbol])dnl
+  done
+])
diff --git a/m4/warning.m4 b/m4/warning.m4
deleted file mode 100644
index fe39bec..0000000
--- a/m4/warning.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# Finding valid warning flags for the C Compiler.           -*-Autoconf-*-
-#
-# Copyright (C) 2001, 2002 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 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
-
-# serial 1
-
-AC_DEFUN([BISON_WARNING],
-[AC_MSG_CHECKING(whether compiler accepts $1)
-AC_SUBST(WARNING_CFLAGS)
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $1"
-AC_TRY_COMPILE(,
-[int x;],
-WARNING_CFLAGS="$WARNING_CFLAGS $1"
-AC_MSG_RESULT(yes),
-AC_MSG_RESULT(no))
-CFLAGS="$ac_save_CFLAGS"])
diff --git a/m4/warnings.m4 b/m4/warnings.m4
new file mode 100644
index 0000000..28b8294
--- /dev/null
+++ b/m4/warnings.m4
@@ -0,0 +1,61 @@
+# warnings.m4 serial 7
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_AS_VAR_APPEND(VAR, VALUE)
+# ----------------------------
+# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
+m4_ifdef([AS_VAR_APPEND],
+[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
+[m4_define([gl_AS_VAR_APPEND],
+[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
+
+
+# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED],
+#                       [PROGRAM = AC_LANG_PROGRAM()])
+# -----------------------------------------------------------------
+# Check if the compiler supports OPTION when compiling PROGRAM.
+#
+# FIXME: gl_Warn must be used unquoted until we can assume Autoconf
+# 2.64 or newer.
+AC_DEFUN([gl_COMPILER_OPTION_IF],
+[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
+AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [
+  gl_save_compiler_FLAGS="$gl_Flags"
+  gl_AS_VAR_APPEND(m4_defn([gl_Flags]), [" $1"])
+  AC_COMPILE_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])],
+                    [AS_VAR_SET(gl_Warn, [yes])],
+                    [AS_VAR_SET(gl_Warn, [no])])
+  gl_Flags="$gl_save_compiler_FLAGS"
+])
+AS_VAR_IF(gl_Warn, [yes], [$2], [$3])
+AS_VAR_POPDEF([gl_Flags])dnl
+AS_VAR_POPDEF([gl_Warn])dnl
+])
+
+
+# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS],
+#             [PROGRAM = AC_LANG_PROGRAM()])
+# ---------------------------------------------
+# Adds parameter to WARN_CFLAGS if the compiler supports it when
+# compiling PROGRAM.  For example, gl_WARN_ADD([-Wparentheses]).
+#
+# If VARIABLE is a variable name, AC_SUBST it.
+AC_DEFUN([gl_WARN_ADD],
+[gl_COMPILER_OPTION_IF([$1],
+  [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])],
+  [],
+  [$3])
+m4_ifval([$2],
+         [AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
+         [AC_SUBST([WARN_CFLAGS])])dnl
+])
+
+# Local Variables:
+# mode: autoconf
+# End:
diff --git a/m4/wchar_h.m4 b/m4/wchar_h.m4
new file mode 100644
index 0000000..c7a8b2d
--- /dev/null
+++ b/m4/wchar_h.m4
@@ -0,0 +1,225 @@
+dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
+
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Eric Blake.
+
+# wchar_h.m4 serial 39
+
+AC_DEFUN([gl_WCHAR_H],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
+  dnl Prepare for creating substitute <wchar.h>.
+  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+  dnl character support).
+  dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
+  gl_CHECK_NEXT_HEADERS([wchar.h])
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+  AC_SUBST([HAVE_WCHAR_H])
+
+  AC_REQUIRE([gl_FEATURES_H])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+    ]],
+    [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
+     wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
+     wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
+     wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
+     wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth
+    ])
+])
+
+dnl Check whether <wchar.h> is usable at all.
+AC_DEFUN([gl_WCHAR_H_INLINE_OK],
+[
+  dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
+  dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
+  dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
+  dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
+  dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
+  AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
+    [gl_cv_header_wchar_h_correct_inline],
+    [gl_cv_header_wchar_h_correct_inline=yes
+     AC_LANG_CONFTEST([
+       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+]])])
+     if AC_TRY_EVAL([ac_compile]); then
+       mv conftest.$ac_objext conftest1.$ac_objext
+       AC_LANG_CONFTEST([
+         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int zero (void) { return 0; }
+]])])
+       if AC_TRY_EVAL([ac_compile]); then
+         mv conftest.$ac_objext conftest2.$ac_objext
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+    ])
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted.])
+  fi
+])
+
+AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_WCHAR_H_DEFAULTS],
+[
+  GNULIB_BTOWC=0;       AC_SUBST([GNULIB_BTOWC])
+  GNULIB_WCTOB=0;       AC_SUBST([GNULIB_WCTOB])
+  GNULIB_MBSINIT=0;     AC_SUBST([GNULIB_MBSINIT])
+  GNULIB_MBRTOWC=0;     AC_SUBST([GNULIB_MBRTOWC])
+  GNULIB_MBRLEN=0;      AC_SUBST([GNULIB_MBRLEN])
+  GNULIB_MBSRTOWCS=0;   AC_SUBST([GNULIB_MBSRTOWCS])
+  GNULIB_MBSNRTOWCS=0;  AC_SUBST([GNULIB_MBSNRTOWCS])
+  GNULIB_WCRTOMB=0;     AC_SUBST([GNULIB_WCRTOMB])
+  GNULIB_WCSRTOMBS=0;   AC_SUBST([GNULIB_WCSRTOMBS])
+  GNULIB_WCSNRTOMBS=0;  AC_SUBST([GNULIB_WCSNRTOMBS])
+  GNULIB_WCWIDTH=0;     AC_SUBST([GNULIB_WCWIDTH])
+  GNULIB_WMEMCHR=0;     AC_SUBST([GNULIB_WMEMCHR])
+  GNULIB_WMEMCMP=0;     AC_SUBST([GNULIB_WMEMCMP])
+  GNULIB_WMEMCPY=0;     AC_SUBST([GNULIB_WMEMCPY])
+  GNULIB_WMEMMOVE=0;    AC_SUBST([GNULIB_WMEMMOVE])
+  GNULIB_WMEMSET=0;     AC_SUBST([GNULIB_WMEMSET])
+  GNULIB_WCSLEN=0;      AC_SUBST([GNULIB_WCSLEN])
+  GNULIB_WCSNLEN=0;     AC_SUBST([GNULIB_WCSNLEN])
+  GNULIB_WCSCPY=0;      AC_SUBST([GNULIB_WCSCPY])
+  GNULIB_WCPCPY=0;      AC_SUBST([GNULIB_WCPCPY])
+  GNULIB_WCSNCPY=0;     AC_SUBST([GNULIB_WCSNCPY])
+  GNULIB_WCPNCPY=0;     AC_SUBST([GNULIB_WCPNCPY])
+  GNULIB_WCSCAT=0;      AC_SUBST([GNULIB_WCSCAT])
+  GNULIB_WCSNCAT=0;     AC_SUBST([GNULIB_WCSNCAT])
+  GNULIB_WCSCMP=0;      AC_SUBST([GNULIB_WCSCMP])
+  GNULIB_WCSNCMP=0;     AC_SUBST([GNULIB_WCSNCMP])
+  GNULIB_WCSCASECMP=0;  AC_SUBST([GNULIB_WCSCASECMP])
+  GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP])
+  GNULIB_WCSCOLL=0;     AC_SUBST([GNULIB_WCSCOLL])
+  GNULIB_WCSXFRM=0;     AC_SUBST([GNULIB_WCSXFRM])
+  GNULIB_WCSDUP=0;      AC_SUBST([GNULIB_WCSDUP])
+  GNULIB_WCSCHR=0;      AC_SUBST([GNULIB_WCSCHR])
+  GNULIB_WCSRCHR=0;     AC_SUBST([GNULIB_WCSRCHR])
+  GNULIB_WCSCSPN=0;     AC_SUBST([GNULIB_WCSCSPN])
+  GNULIB_WCSSPN=0;      AC_SUBST([GNULIB_WCSSPN])
+  GNULIB_WCSPBRK=0;     AC_SUBST([GNULIB_WCSPBRK])
+  GNULIB_WCSSTR=0;      AC_SUBST([GNULIB_WCSSTR])
+  GNULIB_WCSTOK=0;      AC_SUBST([GNULIB_WCSTOK])
+  GNULIB_WCSWIDTH=0;    AC_SUBST([GNULIB_WCSWIDTH])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
+  HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
+  HAVE_MBRTOWC=1;       AC_SUBST([HAVE_MBRTOWC])
+  HAVE_MBRLEN=1;        AC_SUBST([HAVE_MBRLEN])
+  HAVE_MBSRTOWCS=1;     AC_SUBST([HAVE_MBSRTOWCS])
+  HAVE_MBSNRTOWCS=1;    AC_SUBST([HAVE_MBSNRTOWCS])
+  HAVE_WCRTOMB=1;       AC_SUBST([HAVE_WCRTOMB])
+  HAVE_WCSRTOMBS=1;     AC_SUBST([HAVE_WCSRTOMBS])
+  HAVE_WCSNRTOMBS=1;    AC_SUBST([HAVE_WCSNRTOMBS])
+  HAVE_WMEMCHR=1;       AC_SUBST([HAVE_WMEMCHR])
+  HAVE_WMEMCMP=1;       AC_SUBST([HAVE_WMEMCMP])
+  HAVE_WMEMCPY=1;       AC_SUBST([HAVE_WMEMCPY])
+  HAVE_WMEMMOVE=1;      AC_SUBST([HAVE_WMEMMOVE])
+  HAVE_WMEMSET=1;       AC_SUBST([HAVE_WMEMSET])
+  HAVE_WCSLEN=1;        AC_SUBST([HAVE_WCSLEN])
+  HAVE_WCSNLEN=1;       AC_SUBST([HAVE_WCSNLEN])
+  HAVE_WCSCPY=1;        AC_SUBST([HAVE_WCSCPY])
+  HAVE_WCPCPY=1;        AC_SUBST([HAVE_WCPCPY])
+  HAVE_WCSNCPY=1;       AC_SUBST([HAVE_WCSNCPY])
+  HAVE_WCPNCPY=1;       AC_SUBST([HAVE_WCPNCPY])
+  HAVE_WCSCAT=1;        AC_SUBST([HAVE_WCSCAT])
+  HAVE_WCSNCAT=1;       AC_SUBST([HAVE_WCSNCAT])
+  HAVE_WCSCMP=1;        AC_SUBST([HAVE_WCSCMP])
+  HAVE_WCSNCMP=1;       AC_SUBST([HAVE_WCSNCMP])
+  HAVE_WCSCASECMP=1;    AC_SUBST([HAVE_WCSCASECMP])
+  HAVE_WCSNCASECMP=1;   AC_SUBST([HAVE_WCSNCASECMP])
+  HAVE_WCSCOLL=1;       AC_SUBST([HAVE_WCSCOLL])
+  HAVE_WCSXFRM=1;       AC_SUBST([HAVE_WCSXFRM])
+  HAVE_WCSDUP=1;        AC_SUBST([HAVE_WCSDUP])
+  HAVE_WCSCHR=1;        AC_SUBST([HAVE_WCSCHR])
+  HAVE_WCSRCHR=1;       AC_SUBST([HAVE_WCSRCHR])
+  HAVE_WCSCSPN=1;       AC_SUBST([HAVE_WCSCSPN])
+  HAVE_WCSSPN=1;        AC_SUBST([HAVE_WCSSPN])
+  HAVE_WCSPBRK=1;       AC_SUBST([HAVE_WCSPBRK])
+  HAVE_WCSSTR=1;        AC_SUBST([HAVE_WCSSTR])
+  HAVE_WCSTOK=1;        AC_SUBST([HAVE_WCSTOK])
+  HAVE_WCSWIDTH=1;      AC_SUBST([HAVE_WCSWIDTH])
+  HAVE_DECL_WCTOB=1;    AC_SUBST([HAVE_DECL_WCTOB])
+  HAVE_DECL_WCWIDTH=1;  AC_SUBST([HAVE_DECL_WCWIDTH])
+  REPLACE_MBSTATE_T=0;  AC_SUBST([REPLACE_MBSTATE_T])
+  REPLACE_BTOWC=0;      AC_SUBST([REPLACE_BTOWC])
+  REPLACE_WCTOB=0;      AC_SUBST([REPLACE_WCTOB])
+  REPLACE_MBSINIT=0;    AC_SUBST([REPLACE_MBSINIT])
+  REPLACE_MBRTOWC=0;    AC_SUBST([REPLACE_MBRTOWC])
+  REPLACE_MBRLEN=0;     AC_SUBST([REPLACE_MBRLEN])
+  REPLACE_MBSRTOWCS=0;  AC_SUBST([REPLACE_MBSRTOWCS])
+  REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
+  REPLACE_WCRTOMB=0;    AC_SUBST([REPLACE_WCRTOMB])
+  REPLACE_WCSRTOMBS=0;  AC_SUBST([REPLACE_WCSRTOMBS])
+  REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
+  REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
+  REPLACE_WCSWIDTH=0;   AC_SUBST([REPLACE_WCSWIDTH])
+])
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
new file mode 100644
index 0000000..534735d
--- /dev/null
+++ b/m4/wchar_t.m4
@@ -0,0 +1,24 @@
+# wchar_t.m4 serial 4 (gettext-0.18.2)
+dnl Copyright (C) 2002-2003, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <stddef.h>
+            wchar_t foo = (wchar_t)'\0';]],
+          [[]])],
+       [gt_cv_c_wchar_t=yes],
+       [gt_cv_c_wchar_t=no])])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
+  fi
+])
diff --git a/m4/wctype_h.m4 b/m4/wctype_h.m4
new file mode 100644
index 0000000..885e6fc
--- /dev/null
+++ b/m4/wctype_h.m4
@@ -0,0 +1,209 @@
+# wctype_h.m4 serial 18
+
+dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
+
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN([gl_WCTYPE_H],
+[
+  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CHECK_FUNCS_ONCE([iswcntrl])
+  if test $ac_cv_func_iswcntrl = yes; then
+    HAVE_ISWCNTRL=1
+  else
+    HAVE_ISWCNTRL=0
+  fi
+  AC_SUBST([HAVE_ISWCNTRL])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  gl_CHECK_NEXT_HEADERS([wctype.h])
+  if test $ac_cv_header_wctype_h = yes; then
+    if test $ac_cv_func_iswcntrl = yes; then
+      dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
+      dnl The other functions are likely broken in the same way.
+      AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
+        [
+          AC_RUN_IFELSE(
+            [AC_LANG_SOURCE([[
+               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                  included before <wchar.h>.
+                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                  must be included before <wchar.h>.  */
+               #include <stddef.h>
+               #include <stdio.h>
+               #include <time.h>
+               #include <wchar.h>
+               #include <wctype.h>
+               int main () { return iswprint ('x') == 0; }
+            ]])],
+            [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
+            [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
+                          #if __GNU_LIBRARY__ == 1
+                          Linux libc5 i18n is broken.
+                          #endif]], [])],
+              [gl_cv_func_iswcntrl_works="guessing yes"],
+              [gl_cv_func_iswcntrl_works="guessing no"])
+            ])
+        ])
+    fi
+    HAVE_WCTYPE_H=1
+  else
+    HAVE_WCTYPE_H=0
+  fi
+  AC_SUBST([HAVE_WCTYPE_H])
+
+  case "$gl_cv_func_iswcntrl_works" in
+    *yes) REPLACE_ISWCNTRL=0 ;;
+    *)    REPLACE_ISWCNTRL=1 ;;
+  esac
+  AC_SUBST([REPLACE_ISWCNTRL])
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+    dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>.
+    :
+  fi
+
+  if test $REPLACE_ISWCNTRL = 1; then
+    REPLACE_TOWLOWER=1
+  else
+    AC_CHECK_FUNCS([towlower])
+    if test $ac_cv_func_towlower = yes; then
+      REPLACE_TOWLOWER=0
+    else
+      AC_CHECK_DECLS([towlower],,,
+        [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+             included before <wchar.h>.
+             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+             must be included before <wchar.h>.  */
+          #include <stddef.h>
+          #include <stdio.h>
+          #include <time.h>
+          #include <wchar.h>
+          #if HAVE_WCTYPE_H
+          # include <wctype.h>
+          #endif
+        ]])
+      if test $ac_cv_have_decl_towlower = yes; then
+        dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and
+        dnl towupper() although it does not have the functions. Avoid a
+        dnl collision with gnulib's replacement.
+        REPLACE_TOWLOWER=1
+      else
+        REPLACE_TOWLOWER=0
+      fi
+    fi
+  fi
+  AC_SUBST([REPLACE_TOWLOWER])
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+    dnl Redefine towlower, towupper in <wctype.h>.
+    :
+  fi
+
+  dnl We assume that the wctype() and iswctype() functions exist if and only
+  dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that
+  dnl exists.
+  dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>.
+  AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #if HAVE_WCTYPE_H
+            # include <wctype.h>
+            #endif
+            wctype_t a;
+          ]],
+          [[]])],
+       [gl_cv_type_wctype_t=yes],
+       [gl_cv_type_wctype_t=no])
+    ])
+  if test $gl_cv_type_wctype_t = no; then
+    HAVE_WCTYPE_T=0
+  fi
+
+  dnl We assume that the wctrans() and towctrans() functions exist if and only
+  dnl if the type wctrans_t is defined in <wctype.h>.
+  AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #include <wctype.h>
+            wctrans_t a;
+          ]],
+          [[]])],
+       [gl_cv_type_wctrans_t=yes],
+       [gl_cv_type_wctrans_t=no])
+    ])
+  if test $gl_cv_type_wctrans_t = no; then
+    HAVE_WCTRANS_T=0
+  fi
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+#include <wctype.h>
+    ]],
+    [wctype iswctype wctrans towctrans
+    ])
+])
+
+AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
+[
+  GNULIB_ISWBLANK=0;    AC_SUBST([GNULIB_ISWBLANK])
+  GNULIB_WCTYPE=0;      AC_SUBST([GNULIB_WCTYPE])
+  GNULIB_ISWCTYPE=0;    AC_SUBST([GNULIB_ISWCTYPE])
+  GNULIB_WCTRANS=0;     AC_SUBST([GNULIB_WCTRANS])
+  GNULIB_TOWCTRANS=0;   AC_SUBST([GNULIB_TOWCTRANS])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_ISWBLANK=1;      AC_SUBST([HAVE_ISWBLANK])
+  HAVE_WCTYPE_T=1;      AC_SUBST([HAVE_WCTYPE_T])
+  HAVE_WCTRANS_T=1;     AC_SUBST([HAVE_WCTRANS_T])
+  REPLACE_ISWBLANK=0;   AC_SUBST([REPLACE_ISWBLANK])
+])
diff --git a/m4/wcwidth.m4 b/m4/wcwidth.m4
new file mode 100644
index 0000000..5f40bcc
--- /dev/null
+++ b/m4/wcwidth.m4
@@ -0,0 +1,101 @@
+# wcwidth.m4 serial 23
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_WCWIDTH],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Persuade glibc <wchar.h> to declare wcwidth().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+
+  AC_CHECK_HEADERS_ONCE([wchar.h])
+  AC_CHECK_FUNCS_ONCE([wcwidth])
+
+  AC_CHECK_DECLS([wcwidth], [], [], [[
+/* AIX 3.2.5 declares wcwidth in <string.h>. */
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+]])
+  if test $ac_cv_have_decl_wcwidth != yes; then
+    HAVE_DECL_WCWIDTH=0
+  fi
+
+  if test $ac_cv_func_wcwidth = yes; then
+    HAVE_WCWIDTH=1
+    dnl On Mac OS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1.
+    dnl On OpenBSD 5.0, wcwidth(0x05B0) (HEBREW POINT SHEVA) returns 1.
+    dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1.
+    dnl This leads to bugs in 'ls' (coreutils).
+    AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales],
+      [gl_cv_func_wcwidth_works],
+      [
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+/* AIX 3.2.5 declares wcwidth in <string.h>. */
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#if !HAVE_DECL_WCWIDTH
+extern
+# ifdef __cplusplus
+"C"
+# endif
+int wcwidth (int);
+#endif
+int main ()
+{
+  int result = 0;
+  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
+    {
+      if (wcwidth (0x0301) > 0)
+        result |= 1;
+      if (wcwidth (0x05B0) > 0)
+        result |= 2;
+      if (wcwidth (0x200B) > 0)
+        result |= 4;
+    }
+  return result;
+}]])],
+          [gl_cv_func_wcwidth_works=yes],
+          [gl_cv_func_wcwidth_works=no],
+          [
+changequote(,)dnl
+           case "$host_os" in
+                     # Guess yes on glibc and AIX 7 systems.
+             *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
+             *)                  gl_cv_func_wcwidth_works="guessing no";;
+           esac
+changequote([,])dnl
+          ])
+      ])
+    case "$gl_cv_func_wcwidth_works" in
+      *yes) ;;
+      *no) REPLACE_WCWIDTH=1 ;;
+    esac
+  else
+    HAVE_WCWIDTH=0
+  fi
+  dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not
+  dnl have the wcwidth function, then it does not declare it.
+])
diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
new file mode 100644
index 0000000..3260cce
--- /dev/null
+++ b/m4/wint_t.m4
@@ -0,0 +1,32 @@
+# wint_t.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+            wint_t foo = (wchar_t)'\0';]],
+          [[]])],
+       [gt_cv_c_wint_t=yes],
+       [gt_cv_c_wint_t=no])])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
+  fi
+])
diff --git a/m4/xalloc.m4 b/m4/xalloc.m4
index c0847dd..6c2d5d0 100644
--- a/m4/xalloc.m4
+++ b/m4/xalloc.m4
@@ -1,25 +1,7 @@
-# xalloc.m4 serial 12
-dnl Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# xalloc.m4 serial 18
+dnl Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-AC_DEFUN([gl_XALLOC],
-[
-  AC_LIBSOURCES([xmalloc.c, xalloc.h])
-  AC_LIBOBJ([xmalloc])
-
-  gl_PREREQ_XALLOC
-  gl_PREREQ_XMALLOC
-])
-
-# Prerequisites of lib/xalloc.h.
-AC_DEFUN([gl_PREREQ_XALLOC], [
-  :
-])
-
-# Prerequisites of lib/xmalloc.c.
-AC_DEFUN([gl_PREREQ_XMALLOC], [
-  AC_REQUIRE([AC_C_INLINE])
-  :
-])
+AC_DEFUN([gl_XALLOC], [:])
diff --git a/m4/xsize.m4 b/m4/xsize.m4
new file mode 100644
index 0000000..d85a5f1
--- /dev/null
+++ b/m4/xsize.m4
@@ -0,0 +1,12 @@
+# xsize.m4 serial 5
+dnl Copyright (C) 2003-2004, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XSIZE],
+[
+  dnl Prerequisites of lib/xsize.h.
+  AC_REQUIRE([gl_SIZE_MAX])
+  AC_CHECK_HEADERS([stdint.h])
+])
diff --git a/m4/xstrndup.m4 b/m4/xstrndup.m4
index 8a30ab1..1642ca5 100644
--- a/m4/xstrndup.m4
+++ b/m4/xstrndup.m4
@@ -1,5 +1,5 @@
 # xstrndup.m4 serial 2
-dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/maint.mk b/maint.mk
new file mode 100644
index 0000000..93c2508
--- /dev/null
+++ b/maint.mk
@@ -0,0 +1,1654 @@
+# -*-Makefile-*-
+# This Makefile fragment tries to be general-purpose enough to be
+# used by many projects via the gnulib maintainer-makefile module.
+
+## Copyright (C) 2001-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# This is reported not to work with make-3.79.1
+# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+ME := maint.mk
+
+# Diagnostic for continued use of deprecated variable.
+# Remove in 2013
+ifneq ($(build_aux),)
+ $(error "$(ME): \
+set $$(_build-aux) relative to $$(srcdir) instead of $$(build_aux)")
+endif
+
+# Helper variables.
+_empty =
+_sp = $(_empty) $(_empty)
+
+# _equal,S1,S2
+# ------------
+# If S1 == S2, return S1, otherwise the empty string.
+_equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
+
+# member-check,VARIABLE,VALID-VALUES
+# ----------------------------------
+# Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and
+# return it.  Die otherwise.
+member-check =								\
+  $(strip								\
+    $(if $($(1)),							\
+      $(if $(findstring $(_sp),$($(1))),				\
+          $(error invalid $(1): '$($(1))', expected $(2)),		\
+          $(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)),	\
+            $(error invalid $(1): '$($(1))', expected $(2)))),		\
+      $(error $(1) undefined)))
+
+# Do not save the original name or timestamp in the .tar.gz file.
+# Use --rsyncable if available.
+gzip_rsyncable := \
+  $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null \
+    && printf %s --rsyncable)
+GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
+
+GIT = git
+VC = $(GIT)
+
+VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir)
+
+# You can override this variable in cfg.mk to set your own regexp
+# matching files to ignore.
+VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$
+
+# This is to preprocess robustly the output of $(VC_LIST), so that even
+# when $(srcdir) is a pathological name like "....", the leading sed command
+# removes only the intended prefix.
+_dot_escaped_srcdir = $(subst .,\.,$(srcdir))
+
+# Post-process $(VC_LIST) output, prepending $(srcdir)/, but only
+# when $(srcdir) is not ".".
+ifeq ($(srcdir),.)
+  _prepend_srcdir_prefix =
+else
+  _prepend_srcdir_prefix = | sed 's|^|$(srcdir)/|'
+endif
+
+# In order to be able to consistently filter "."-relative names,
+# (i.e., with no $(srcdir) prefix), this definition is careful to
+# remove any $(srcdir) prefix, and to restore what it removes.
+_sc_excl = \
+  $(or $(exclude_file_name_regexp--$@),^$$)
+VC_LIST_EXCEPT = \
+  $(VC_LIST) | sed 's|^$(_dot_escaped_srcdir)/||' \
+	| if test -f $(srcdir)/.x-$@; then grep -vEf $(srcdir)/.x-$@; \
+	  else grep -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \
+	| grep -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \
+	$(_prepend_srcdir_prefix)
+
+ifeq ($(origin prev_version_file), undefined)
+  prev_version_file = $(srcdir)/.prev-version
+endif
+
+PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null)
+VERSION_REGEXP = $(subst .,\.,$(VERSION))
+PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION))
+
+ifeq ($(VC),$(GIT))
+  this-vc-tag = v$(VERSION)
+  this-vc-tag-regexp = v$(VERSION_REGEXP)
+else
+  tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
+  tag-this-version = $(subst .,_,$(VERSION))
+  this-vc-tag = $(tag-package)-$(tag-this-version)
+  this-vc-tag-regexp = $(this-vc-tag)
+endif
+my_distdir = $(PACKAGE)-$(VERSION)
+
+# Old releases are stored here.
+release_archive_dir ?= ../release
+
+# If RELEASE_TYPE is undefined, but RELEASE is, use its second word.
+# But overwrite VERSION.
+ifdef RELEASE
+  VERSION := $(word 1, $(RELEASE))
+  RELEASE_TYPE ?= $(word 2, $(RELEASE))
+endif
+
+# Validate and return $(RELEASE_TYPE), or die.
+RELEASE_TYPES = alpha beta stable
+release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES))
+
+# Override gnu_rel_host and url_dir_list in cfg.mk if these are not right.
+# Use alpha.gnu.org for alpha and beta releases.
+# Use ftp.gnu.org for stable releases.
+gnu_ftp_host-alpha = alpha.gnu.org
+gnu_ftp_host-beta = alpha.gnu.org
+gnu_ftp_host-stable = ftp.gnu.org
+gnu_rel_host ?= $(gnu_ftp_host-$(release-type))
+
+url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org),	\
+                     http://ftpmirror.gnu.org/$(PACKAGE),		\
+                     ftp://$(gnu_rel_host)/gnu/$(PACKAGE))
+
+# Override this in cfg.mk if you are using a different format in your
+# NEWS file.
+today = $(shell date +%Y-%m-%d)
+
+# Select which lines of NEWS are searched for $(news-check-regexp).
+# This is a sed line number spec.  The default says that we search
+# lines 1..10 of NEWS for $(news-check-regexp).
+# If you want to search only line 3 or only lines 20-22, use "3" or "20,22".
+news-check-lines-spec ?= 1,10
+news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)'
+
+# Prevent programs like 'sort' from considering distinct strings to be equal.
+# Doing it here saves us from having to set LC_ALL elsewhere in this file.
+export LC_ALL = C
+
+## --------------- ##
+## Sanity checks.  ##
+## --------------- ##
+
+_cfg_mk := $(wildcard $(srcdir)/cfg.mk)
+
+# Collect the names of rules starting with 'sc_'.
+syntax-check-rules := $(sort $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' \
+			$(srcdir)/$(ME) $(_cfg_mk)))
+.PHONY: $(syntax-check-rules)
+
+ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0)
+  local-checks-available += $(syntax-check-rules)
+else
+  local-checks-available += no-vc-detected
+no-vc-detected:
+	@echo "No version control files detected; skipping syntax check"
+endif
+.PHONY: $(local-checks-available)
+
+# Arrange to print the name of each syntax-checking rule just before running it.
+$(syntax-check-rules): %: %.m
+sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules))
+.PHONY: $(sc_m_rules_)
+$(sc_m_rules_):
+	@echo $(patsubst sc_%.m, %, $@)
+	@date +%s.%N > .sc-start-$(basename $@)
+
+# Compute and print the elapsed time for each syntax-check rule.
+sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules))
+.PHONY: $(sc_z_rules_)
+$(sc_z_rules_): %.z: %
+	@end=$$(date +%s.%N);						\
+	start=$$(cat .sc-start-$*);					\
+	rm -f .sc-start-$*;						\
+	awk -v s=$$start -v e=$$end					\
+	  'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null
+
+# The patsubst here is to replace each sc_% rule with its sc_%.z wrapper
+# that computes and prints elapsed time.
+local-check :=								\
+  $(patsubst sc_%, sc_%.z,						\
+    $(filter-out $(local-checks-to-skip), $(local-checks-available)))
+
+syntax-check: $(local-check)
+
+# _sc_search_regexp
+#
+# This macro searches for a given construct in the selected files and
+# then takes some action.
+#
+# Parameters (shell variables):
+#
+#  prohibit | require
+#
+#     Regular expression (ERE) denoting either a forbidden construct
+#     or a required construct.  Those arguments are exclusive.
+#
+#  exclude
+#
+#     Regular expression (ERE) denoting lines to ignore that matched
+#     a prohibit construct.  For example, this can be used to exclude
+#     comments that mention why the nearby code uses an alternative
+#     construct instead of the simpler prohibited construct.
+#
+#  in_vc_files | in_files
+#
+#     grep-E-style regexp selecting the files to check.  For in_vc_files,
+#     the regexp is used to select matching files from the list of all
+#     version-controlled files; for in_files, it's from the names printed
+#     by "find $(srcdir)".  When neither is specified, use all files that
+#     are under version control.
+#
+#  containing | non_containing
+#
+#     Select the files (non) containing strings matching this regexp.
+#     If both arguments are specified then CONTAINING takes
+#     precedence.
+#
+#  with_grep_options
+#
+#     Extra options for grep.
+#
+#  ignore_case
+#
+#     Ignore case.
+#
+#  halt
+#
+#     Message to display before to halting execution.
+#
+# Finally, you may exempt files based on an ERE matching file names.
+# For example, to exempt from the sc_space_tab check all files with the
+# .diff suffix, set this Make variable:
+#
+# exclude_file_name_regexp--sc_space_tab = \.diff$
+#
+# Note that while this functionality is mostly inherited via VC_LIST_EXCEPT,
+# when filtering by name via in_files, we explicitly filter out matching
+# names here as well.
+
+# Initialize each, so that envvar settings cannot interfere.
+export require =
+export prohibit =
+export exclude =
+export in_vc_files =
+export in_files =
+export containing =
+export non_containing =
+export halt =
+export with_grep_options =
+
+# By default, _sc_search_regexp does not ignore case.
+export ignore_case =
+_ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :)
+
+define _sc_say_and_exit
+   dummy=; : so we do not need a semicolon before each use;		\
+   { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; };
+endef
+
+define _sc_search_regexp
+   dummy=; : so we do not need a semicolon before each use;		\
+									\
+   : Check arguments;							\
+   test -n "$$prohibit" && test -n "$$require"				\
+     && { msg='Cannot specify both prohibit and require'		\
+          $(_sc_say_and_exit) } || :;					\
+   test -z "$$prohibit" && test -z "$$require"				\
+     && { msg='Should specify either prohibit or require'		\
+          $(_sc_say_and_exit) } || :;					\
+   test -z "$$prohibit" && test -n "$$exclude"				\
+     && { msg='Use of exclude requires a prohibit pattern'		\
+          $(_sc_say_and_exit) } || :;					\
+   test -n "$$in_vc_files" && test -n "$$in_files"			\
+     && { msg='Cannot specify both in_vc_files and in_files'		\
+          $(_sc_say_and_exit) } || :;					\
+   test "x$$halt" != x							\
+     || { msg='halt not defined' $(_sc_say_and_exit) };			\
+									\
+   : Filter by file name;						\
+   if test -n "$$in_files"; then					\
+     files=$$(find $(srcdir) | grep -E "$$in_files"			\
+              | grep -Ev '$(_sc_excl)');				\
+   else									\
+     files=$$($(VC_LIST_EXCEPT));					\
+     if test -n "$$in_vc_files"; then					\
+       files=$$(echo "$$files" | grep -E "$$in_vc_files");		\
+     fi;								\
+   fi;									\
+									\
+   : Filter by content;							\
+   test -n "$$files" && test -n "$$containing"				\
+     && { files=$$(grep -l "$$containing" $$files); } || :;		\
+   test -n "$$files" && test -n "$$non_containing"			\
+     && { files=$$(grep -vl "$$non_containing" $$files); } || :;	\
+									\
+   : Check for the construct;						\
+   if test -n "$$files"; then						\
+     if test -n "$$prohibit"; then					\
+       grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \
+         | grep -vE "$${exclude:-^$$}"					\
+         && { msg="$$halt" $(_sc_say_and_exit) } || :;			\
+     else								\
+       grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \
+           | grep .							\
+         && { msg="$$halt" $(_sc_say_and_exit) } || :;			\
+     fi									\
+   else :;								\
+   fi || :;
+endef
+
+sc_avoid_if_before_free:
+	@$(srcdir)/$(_build-aux)/useless-if-before-free			\
+		$(useless_free_options)					\
+	    $$($(VC_LIST_EXCEPT) | grep -v useless-if-before-free) &&	\
+	  { echo '$(ME): found useless "if" before "free" above' 1>&2;	\
+	    exit 1; } || :
+
+sc_cast_of_argument_to_free:
+	@prohibit='\<free *\( *\(' halt="don't cast free argument"	\
+	  $(_sc_search_regexp)
+
+sc_cast_of_x_alloc_return_value:
+	@prohibit='\*\) *x(m|c|re)alloc\>'				\
+	halt="don't cast x*alloc return value"				\
+	  $(_sc_search_regexp)
+
+sc_cast_of_alloca_return_value:
+	@prohibit='\*\) *alloca\>'					\
+	halt="don't cast alloca return value"				\
+	  $(_sc_search_regexp)
+
+sc_space_tab:
+	@prohibit='[ ]	'						\
+	halt='found SPACE-TAB sequence; remove the SPACE'		\
+	  $(_sc_search_regexp)
+
+# Don't use *scanf or the old ato* functions in "real" code.
+# They provide no error checking mechanism.
+# Instead, use strto* functions.
+sc_prohibit_atoi_atof:
+	@prohibit='\<([fs]?scanf|ato([filq]|ll)) *\('				\
+	halt='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q'	\
+	  $(_sc_search_regexp)
+
+# Use STREQ rather than comparing strcmp == 0, or != 0.
+sp_ = strcmp *\(.+\)
+sc_prohibit_strcmp:
+	@prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)'		\
+	exclude='# *define STRN?EQ\('					\
+	halt='replace strcmp calls above with STREQ/STRNEQ'		\
+	  $(_sc_search_regexp)
+
+# Really.  You don't want to use this function.
+# It may fail to NUL-terminate the destination,
+# and always NUL-pads out to the specified length.
+sc_prohibit_strncpy:
+	@prohibit='\<strncpy *\('					\
+	halt='do not use strncpy, period'				\
+	  $(_sc_search_regexp)
+
+# Pass EXIT_*, not number, to usage, exit, and error (when exiting)
+# Convert all uses automatically, via these two commands:
+# git grep -l '\<exit *(1)' \
+#  | grep -vEf .x-sc_prohibit_magic_number_exit \
+#  | xargs --no-run-if-empty \
+#      perl -pi -e 's/(^|[^.])\b(exit ?)\(1\)/$1$2(EXIT_FAILURE)/'
+# git grep -l '\<exit *(0)' \
+#  | grep -vEf .x-sc_prohibit_magic_number_exit \
+#  | xargs --no-run-if-empty \
+#      perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/'
+sc_prohibit_magic_number_exit:
+	@prohibit='(^|[^.])\<(usage|exit|error) ?\(-?[0-9]+[,)]'	\
+	exclude='exit \(77\)|error ?\(((0|77),|[^,]*)'			\
+	halt='use EXIT_* values rather than magic number'		\
+	  $(_sc_search_regexp)
+
+# Using EXIT_SUCCESS as the first argument to error is misleading,
+# since when that parameter is 0, error does not exit.  Use '0' instead.
+sc_error_exit_success:
+	@prohibit='error *\(EXIT_SUCCESS,'				\
+	in_vc_files='\.[chly]$$'					\
+	halt='found error (EXIT_SUCCESS'				\
+	 $(_sc_search_regexp)
+
+# "FATAL:" should be fully upper-cased in error messages
+# "WARNING:" should be fully upper-cased, or fully lower-cased
+sc_error_message_warn_fatal:
+	@grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT))		\
+	    | grep -E '"Warning|"Fatal|"fatal' &&			\
+	  { echo '$(ME): use FATAL, WARNING or warning'	1>&2;		\
+	    exit 1; } || :
+
+# Error messages should not start with a capital letter
+sc_error_message_uppercase:
+	@grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT))		\
+	    | grep -E '"[A-Z]'						\
+	    | grep -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' &&		\
+	  { echo '$(ME): found capitalized error message' 1>&2;		\
+	    exit 1; } || :
+
+# Error messages should not end with a period
+sc_error_message_period:
+	@grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT))		\
+	    | grep -E '[^."]\."' &&					\
+	  { echo '$(ME): found error message ending in period' 1>&2;	\
+	    exit 1; } || :
+
+sc_file_system:
+	@prohibit=file''system						\
+	ignore_case=1							\
+	halt='found use of "file''system"; spell it "file system"'	\
+	  $(_sc_search_regexp)
+
+# Don't use cpp tests of this symbol.  All code assumes config.h is included.
+sc_prohibit_have_config_h:
+	@prohibit='^# *if.*HAVE''_CONFIG_H'				\
+	halt='found use of HAVE''_CONFIG_H; remove'			\
+	  $(_sc_search_regexp)
+
+# Nearly all .c files must include <config.h>.  However, we also permit this
+# via inclusion of a package-specific header, if cfg.mk specified one.
+# config_h_header must be suitable for grep -E.
+config_h_header ?= <config\.h>
+sc_require_config_h:
+	@require='^# *include $(config_h_header)'			\
+	in_vc_files='\.c$$'						\
+	halt='the above files do not include <config.h>'		\
+	  $(_sc_search_regexp)
+
+# You must include <config.h> before including any other header file.
+# This can possibly be via a package-specific header, if given by cfg.mk.
+sc_require_config_h_first:
+	@if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then	\
+	  fail=0;							\
+	  for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do		\
+	    grep '^# *include\>' $$i | sed 1q				\
+		| grep -E '^# *include $(config_h_header)' > /dev/null	\
+	      || { echo $$i; fail=1; };					\
+	  done;								\
+	  test $$fail = 1 &&						\
+	    { echo '$(ME): the above files include some other header'	\
+		'before <config.h>' 1>&2; exit 1; } || :;		\
+	else :;								\
+	fi
+
+sc_prohibit_HAVE_MBRTOWC:
+	@prohibit='\bHAVE_MBRTOWC\b'					\
+	halt="do not use $$prohibit; it is always defined"		\
+	  $(_sc_search_regexp)
+
+# To use this "command" macro, you must first define two shell variables:
+# h: the header name, with no enclosing <> or ""
+# re: a regular expression that matches IFF something provided by $h is used.
+define _sc_header_without_use
+  dummy=; : so we do not need a semicolon before each use;		\
+  h_esc=`echo '[<"]'"$$h"'[">]'|sed 's/\./\\\\./g'`;			\
+  if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then		\
+    files=$$(grep -l '^# *include '"$$h_esc"				\
+	     $$($(VC_LIST_EXCEPT) | grep '\.c$$')) &&			\
+    grep -LE "$$re" $$files | grep . &&					\
+      { echo "$(ME): the above files include $$h but don't use it"	\
+	1>&2; exit 1; } || :;						\
+  else :;								\
+  fi
+endef
+
+# Prohibit the inclusion of assert.h without an actual use of assert.
+sc_prohibit_assert_without_use:
+	@h='assert.h' re='\<assert *\(' $(_sc_header_without_use)
+
+# Prohibit the inclusion of close-stream.h without an actual use.
+sc_prohibit_close_stream_without_use:
+	@h='close-stream.h' re='\<close_stream *\(' $(_sc_header_without_use)
+
+# Prohibit the inclusion of getopt.h without an actual use.
+sc_prohibit_getopt_without_use:
+	@h='getopt.h' re='\<getopt(_long)? *\(' $(_sc_header_without_use)
+
+# Don't include quotearg.h unless you use one of its functions.
+sc_prohibit_quotearg_without_use:
+	@h='quotearg.h' re='\<quotearg(_[^ ]+)? *\(' $(_sc_header_without_use)
+
+# Don't include quote.h unless you use one of its functions.
+sc_prohibit_quote_without_use:
+	@h='quote.h' re='\<quote((_n)? *\(|_quoting_options\>)' \
+	  $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_long_options_without_use:
+	@h='long-options.h' re='\<parse_long_options *\(' \
+	  $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_inttostr_without_use:
+	@h='inttostr.h' re='\<(off|[iu]max|uint)tostr *\(' \
+	  $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_ignore_value_without_use:
+	@h='ignore-value.h' re='\<ignore_(value|ptr) *\(' \
+	  $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_error_without_use:
+	@h='error.h' \
+	re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? *\('\
+	  $(_sc_header_without_use)
+
+# Don't include xalloc.h unless you use one of its functions.
+# Consider these symbols:
+# perl -lne '/^# *define (\w+)\(/ and print $1' lib/xalloc.h|grep -v '^__';
+# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/xalloc.h
+# Divide into two sets on case, and filter each through this:
+# | sort | perl -MRegexp::Assemble -le \
+#  'print Regexp::Assemble->new(file => "/dev/stdin")->as_string'|sed 's/\?://g'
+# Note this was produced by the above:
+# _xa1 = \
+#x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup)
+# But we can do better, in at least two ways:
+# 1) take advantage of two "dup"-suffixed strings:
+# x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup)
+# 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable
+# "char|[cmz]"
+# x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup)
+_xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup)
+_xa2 = X([CZ]|N?M)ALLOC
+sc_prohibit_xalloc_without_use:
+	@h='xalloc.h' \
+	re='\<($(_xa1)|$(_xa2)) *\('\
+	  $(_sc_header_without_use)
+
+# Extract function names:
+# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h
+_hash_re = \
+clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning
+_hash_fn = \<($(_hash_re)) *\(
+_hash_struct = (struct )?\<[Hh]ash_(table|tuning)\>
+sc_prohibit_hash_without_use:
+	@h='hash.h' \
+	re='$(_hash_fn)|$(_hash_struct)'\
+	  $(_sc_header_without_use)
+
+sc_prohibit_cloexec_without_use:
+	@h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \
+	  $(_sc_header_without_use)
+
+sc_prohibit_posixver_without_use:
+	@h='posixver.h' re='\<posix2_version *\(' $(_sc_header_without_use)
+
+sc_prohibit_same_without_use:
+	@h='same.h' re='\<same_name *\(' $(_sc_header_without_use)
+
+sc_prohibit_hash_pjw_without_use:
+	@h='hash-pjw.h' \
+	re='\<hash_pjw\>' \
+	  $(_sc_header_without_use)
+
+sc_prohibit_safe_read_without_use:
+	@h='safe-read.h' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \
+	  $(_sc_header_without_use)
+
+sc_prohibit_argmatch_without_use:
+	@h='argmatch.h' \
+	re='(\<(ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<(invalid_arg|argmatch(_exit_fn|_(in)?valid)?) *\()' \
+	  $(_sc_header_without_use)
+
+sc_prohibit_canonicalize_without_use:
+	@h='canonicalize.h' \
+	re='CAN_(EXISTING|ALL_BUT_LAST|MISSING)|canonicalize_(mode_t|filename_mode|file_name)' \
+	  $(_sc_header_without_use)
+
+sc_prohibit_root_dev_ino_without_use:
+	@h='root-dev-ino.h' \
+	re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \
+	  $(_sc_header_without_use)
+
+sc_prohibit_openat_without_use:
+	@h='openat.h' \
+	re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat)\>' \
+	  $(_sc_header_without_use)
+
+# Prohibit the inclusion of c-ctype.h without an actual use.
+ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
+|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
+sc_prohibit_c_ctype_without_use:
+	@h='c-ctype.h' re='\<c_($(ctype_re)) *\(' \
+	  $(_sc_header_without_use)
+
+# The following list was generated by running:
+# man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \
+#   | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt
+_sig_functions = \
+  bsd_signal kill killpg pthread_kill pthread_sigmask raise sigaction \
+  sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore \
+  siginterrupt sigismember signal sigpause sigpending sigprocmask sigqueue \
+  sigrelse sigset sigsuspend sigtimedwait sigwait sigwaitinfo
+_sig_function_re = $(subst $(_sp),|,$(strip $(_sig_functions)))
+# The following were extracted from "man signal.h" manually.
+_sig_types_and_consts =							\
+  MINSIGSTKSZ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK		\
+  SA_RESETHAND SA_RESTART SA_SIGINFO SIGEV_NONE SIGEV_SIGNAL		\
+  SIGEV_THREAD SIGSTKSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SS_DISABLE	\
+  SS_ONSTACK mcontext_t pid_t sig_atomic_t sigevent siginfo_t sigset_t	\
+  sigstack sigval stack_t ucontext_t
+# generated via this:
+# perl -lne '/^#ifdef (SIG\w+)/ and print $1' lib/sig2str.c|sort -u|fmt -70
+_sig_names =								\
+  SIGABRT SIGALRM SIGALRM1 SIGBUS SIGCANCEL SIGCHLD SIGCLD SIGCONT	\
+  SIGDANGER SIGDIL SIGEMT SIGFPE SIGFREEZE SIGGRANT SIGHUP SIGILL	\
+  SIGINFO SIGINT SIGIO SIGIOT SIGKAP SIGKILL SIGKILLTHR SIGLOST SIGLWP	\
+  SIGMIGRATE SIGMSG SIGPHONE SIGPIPE SIGPOLL SIGPRE SIGPROF SIGPWR	\
+  SIGQUIT SIGRETRACT SIGSAK SIGSEGV SIGSOUND SIGSTKFLT SIGSTOP SIGSYS	\
+  SIGTERM SIGTHAW SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1	\
+  SIGUSR2 SIGVIRT SIGVTALRM SIGWAITING SIGWINCH SIGWIND SIGWINDOW	\
+  SIGXCPU SIGXFSZ
+_sig_syms_re = $(subst $(_sp),|,$(strip $(_sig_names) $(_sig_types_and_consts)))
+
+# Prohibit the inclusion of signal.h without an actual use.
+sc_prohibit_signal_without_use:
+	@h='signal.h'							\
+	re='\<($(_sig_function_re)) *\(|\<($(_sig_syms_re))\>'		\
+	  $(_sc_header_without_use)
+
+# Don't include stdio--.h unless you use one of its functions.
+sc_prohibit_stdio--_without_use:
+	@h='stdio--.h' re='\<((f(re)?|p)open|tmpfile) *\('		\
+	  $(_sc_header_without_use)
+
+# Don't include stdio-safer.h unless you use one of its functions.
+sc_prohibit_stdio-safer_without_use:
+	@h='stdio-safer.h' re='\<((f(re)?|p)open|tmpfile)_safer *\('	\
+	  $(_sc_header_without_use)
+
+# Prohibit the inclusion of strings.h without a sensible use.
+# Using the likes of bcmp, bcopy, bzero, index or rindex is not sensible.
+sc_prohibit_strings_without_use:
+	@h='strings.h'							\
+	re='\<(strn?casecmp|ffs(ll)?)\>'				\
+	  $(_sc_header_without_use)
+
+# Get the list of symbol names with this:
+# perl -lne '/^# *define ([A-Z]\w+)\(/ and print $1' lib/intprops.h|fmt
+_intprops_names =							\
+  TYPE_IS_INTEGER TYPE_TWOS_COMPLEMENT TYPE_ONES_COMPLEMENT		\
+  TYPE_SIGNED_MAGNITUDE TYPE_SIGNED TYPE_MINIMUM TYPE_MAXIMUM		\
+  INT_BITS_STRLEN_BOUND INT_STRLEN_BOUND INT_BUFSIZE_BOUND		\
+  INT_ADD_RANGE_OVERFLOW INT_SUBTRACT_RANGE_OVERFLOW			\
+  INT_NEGATE_RANGE_OVERFLOW INT_MULTIPLY_RANGE_OVERFLOW			\
+  INT_DIVIDE_RANGE_OVERFLOW INT_REMAINDER_RANGE_OVERFLOW		\
+  INT_LEFT_SHIFT_RANGE_OVERFLOW INT_ADD_OVERFLOW INT_SUBTRACT_OVERFLOW	\
+  INT_NEGATE_OVERFLOW INT_MULTIPLY_OVERFLOW INT_DIVIDE_OVERFLOW		\
+  INT_REMAINDER_OVERFLOW INT_LEFT_SHIFT_OVERFLOW
+_intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names)))
+# Prohibit the inclusion of intprops.h without an actual use.
+sc_prohibit_intprops_without_use:
+	@h='intprops.h'							\
+	re='\<($(_intprops_syms_re)) *\('				\
+	  $(_sc_header_without_use)
+
+_stddef_syms_re = NULL|offsetof|ptrdiff_t|size_t|wchar_t
+# Prohibit the inclusion of stddef.h without an actual use.
+sc_prohibit_stddef_without_use:
+	@h='stddef.h'							\
+	re='\<($(_stddef_syms_re))\>'					\
+	  $(_sc_header_without_use)
+
+_de1 = dirfd|(close|(fd)?open|read|rewind|seek|tell)dir(64)?(_r)?
+_de2 = (versionsort|struct dirent|getdirentries|alphasort|scandir(at)?)(64)?
+_de3 = MAXNAMLEN|DIR|ino_t|d_ino|d_fileno|d_namlen
+_dirent_syms_re = $(_de1)|$(_de2)|$(_de3)
+# Prohibit the inclusion of dirent.h without an actual use.
+sc_prohibit_dirent_without_use:
+	@h='dirent.h'							\
+	re='\<($(_dirent_syms_re))\>'					\
+	  $(_sc_header_without_use)
+
+# Prohibit the inclusion of verify.h without an actual use.
+sc_prohibit_verify_without_use:
+	@h='verify.h'							\
+	re='\<(verify(true|expr)?|static_assert) *\('			\
+	  $(_sc_header_without_use)
+
+# Don't include xfreopen.h unless you use one of its functions.
+sc_prohibit_xfreopen_without_use:
+	@h='xfreopen.h' re='\<xfreopen *\(' $(_sc_header_without_use)
+
+sc_obsolete_symbols:
+	@prohibit='\<(HAVE''_FCNTL_H|O''_NDELAY)\>'			\
+	halt='do not use HAVE''_FCNTL_H or O'_NDELAY			\
+	  $(_sc_search_regexp)
+
+# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
+
+# Each nonempty ChangeLog line must start with a year number, or a TAB.
+sc_changelog:
+	@prohibit='^[^12	]'					\
+	in_vc_files='^ChangeLog$$'					\
+	halt='found unexpected prefix in a ChangeLog'			\
+	  $(_sc_search_regexp)
+
+# Ensure that each .c file containing a "main" function also
+# calls set_program_name.
+sc_program_name:
+	@require='set_program_name *\(m?argv\[0\]\);'			\
+	in_vc_files='\.c$$'						\
+	containing='\<main *('						\
+	halt='the above files do not call set_program_name'		\
+	  $(_sc_search_regexp)
+
+# Ensure that each .c file containing a "main" function also
+# calls bindtextdomain.
+sc_bindtextdomain:
+	@require='bindtextdomain *\('					\
+	in_vc_files='\.c$$'						\
+	containing='\<main *('						\
+	halt='the above files do not call bindtextdomain'		\
+	  $(_sc_search_regexp)
+
+# Require that the final line of each test-lib.sh-using test be this one:
+# Exit $fail
+# Note: this test requires GNU grep's --label= option.
+Exit_witness_file ?= tests/test-lib.sh
+Exit_base := $(notdir $(Exit_witness_file))
+sc_require_test_exit_idiom:
+	@if test -f $(srcdir)/$(Exit_witness_file); then		\
+	  die=0;							\
+	  for i in $$(grep -l -F 'srcdir/$(Exit_base)'			\
+		$$($(VC_LIST) tests)); do				\
+	    tail -n1 $$i | grep '^Exit .' > /dev/null			\
+	      && : || { die=1; echo $$i; }				\
+	  done;								\
+	  test $$die = 1 &&						\
+	    { echo 1>&2 '$(ME): the final line in each of the above is not:'; \
+	      echo 1>&2 'Exit something';				\
+	      exit 1; } || :;						\
+	fi
+
+sc_trailing_blank:
+	@prohibit='[	 ]$$'						\
+	halt='found trailing blank(s)'					\
+	exclude='^Binary file .* matches$$'				\
+	  $(_sc_search_regexp)
+
+# Match lines like the following, but where there is only one space
+# between the options and the description:
+#   -D, --all-repeated[=delimit-method]  print all duplicate lines\n
+longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)?
+sc_two_space_separator_in_usage:
+	@prohibit='^   *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$'		\
+	halt='help2man requires at least two spaces between an option and its description'\
+	  $(_sc_search_regexp)
+
+# A regexp matching function names like "error" that may be used
+# to emit translatable messages.
+_gl_translatable_diag_func_re ?= error
+
+# Look for diagnostics that aren't marked for translation.
+# This won't find any for which error's format string is on a separate line.
+sc_unmarked_diagnostics:
+	@prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \
+	exclude='(_|ngettext ?)\('					\
+	halt='found unmarked diagnostic(s)'				\
+	  $(_sc_search_regexp)
+
+# Avoid useless parentheses like those in this example:
+# #if defined (SYMBOL) || defined (SYM2)
+sc_useless_cpp_parens:
+	@prohibit='^# *if .*defined *\('				\
+	halt='found useless parentheses in cpp directive'		\
+	  $(_sc_search_regexp)
+
+# List headers for which HAVE_HEADER_H is always true, assuming you are
+# using the appropriate gnulib module.  CAUTION: for each "unnecessary"
+# #if HAVE_HEADER_H that you remove, be sure that your project explicitly
+# requires the gnulib module that guarantees the usability of that header.
+gl_assured_headers_ = \
+  cd $(gnulib_dir)/lib && echo *.in.h|sed 's/\.in\.h//g'
+
+# Convert the list of names to upper case, and replace each space with "|".
+az_ = abcdefghijklmnopqrstuvwxyz
+AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ
+gl_header_upper_case_or_ =						\
+  $$($(gl_assured_headers_)						\
+    | tr $(az_)/.- $(AZ_)___						\
+    | tr -s ' ' '|'							\
+    )
+sc_prohibit_always_true_header_tests:
+	@or=$(gl_header_upper_case_or_);				\
+	re="HAVE_($$or)_H";						\
+	prohibit='\<'"$$re"'\>'						\
+	halt=$$(printf '%s\n'						\
+	'do not test the above HAVE_<header>_H symbol(s);'		\
+	'  with the corresponding gnulib module, they are always true')	\
+	  $(_sc_search_regexp)
+
+sc_prohibit_defined_have_decl_tests:
+	@prohibit='#[	 ]*if(n?def|.*\<defined)\>[	 (]+HAVE_DECL_'	\
+	halt='HAVE_DECL macros are always defined'			\
+	  $(_sc_search_regexp)
+
+# ==================================================================
+gl_other_headers_ ?= \
+  intprops.h	\
+  openat.h	\
+  stat-macros.h
+
+# Perl -lne code to extract "significant" cpp-defined symbols from a
+# gnulib header file, eliminating a few common false-positives.
+# The exempted names below are defined only conditionally in gnulib,
+# and hence sometimes must/may be defined in application code.
+gl_extract_significant_defines_ = \
+  /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\
+    && $$2 !~ /(?:rpl_|_used_without_)/\
+    && $$1 !~ /^(?:NSIG|ENODATA)$$/\
+    && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\
+    and print $$1
+
+# Create a list of regular expressions matching the names
+# of macros that are guaranteed to be defined by parts of gnulib.
+define def_sym_regex
+	gen_h=$(gl_generated_headers_);					\
+	(cd $(gnulib_dir)/lib;						\
+	  for f in *.in.h $(gl_other_headers_); do			\
+	    test -f $$f							\
+	      && perl -lne '$(gl_extract_significant_defines_)' $$f;	\
+	  done;								\
+	) | sort -u							\
+	  | sed 's/^/^ *# *(define|undef)  */;s/$$/\\>/'
+endef
+
+# Don't define macros that we already get from gnulib header files.
+sc_prohibit_always-defined_macros:
+	@if test -d $(gnulib_dir); then					\
+	  case $$(echo all: | grep -l -f - Makefile) in Makefile);; *)	\
+	    echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;;	\
+	  esac;								\
+	  $(def_sym_regex) | grep -E -f - $$($(VC_LIST_EXCEPT))		\
+	    && { echo '$(ME): define the above via some gnulib .h file'	\
+		  1>&2;  exit 1; } || :;				\
+	fi
+# ==================================================================
+
+# Prohibit checked in backup files.
+sc_prohibit_backup_files:
+	@$(VC_LIST) | grep '~$$' &&				\
+	  { echo '$(ME): found version controlled backup file' 1>&2;	\
+	    exit 1; } || :
+
+# Require the latest GPL.
+sc_GPL_version:
+	@prohibit='either ''version [^3]'				\
+	halt='GPL vN, N!=3'						\
+	  $(_sc_search_regexp)
+
+# Require the latest GFDL.  Two regexp, since some .texi files end up
+# line wrapping between 'Free Documentation License,' and 'Version'.
+_GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any)
+sc_GFDL_version:
+	@prohibit='$(_GFDL_regexp)'					\
+	halt='GFDL vN, N!=3'						\
+	  $(_sc_search_regexp)
+
+# Don't use Texinfo's @acronym{}.
+# http://lists.gnu.org/archive/html/bug-gnulib/2010-03/msg00321.html
+texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$
+sc_texinfo_acronym:
+	@prohibit='@acronym\{'						\
+	in_vc_files='$(texinfo_suffix_re_)'				\
+	halt='found use of Texinfo @acronym{}'				\
+	  $(_sc_search_regexp)
+
+cvs_keywords = \
+  Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State
+
+sc_prohibit_cvs_keyword:
+	@prohibit='\$$($(cvs_keywords))\$$'				\
+	halt='do not use CVS keyword expansion'				\
+	  $(_sc_search_regexp)
+
+# This Perl code is slightly obfuscated.  Not only is each "$" doubled
+# because it's in a Makefile, but the $$c's are comments;  we cannot
+# use "#" due to the way the script ends up concatenated onto one line.
+# It would be much more concise, and would produce better output (including
+# counts) if written as:
+#   perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ...
+# but that would be far less efficient, reading the entire contents
+# of each file, rather than just the last two bytes of each.
+# In addition, while the code below detects both blank lines and a missing
+# newline at EOF, the above detects only the former.
+#
+# This is a perl script that is expected to be the single-quoted argument
+# to a command-line "-le".  The remaining arguments are file names.
+# Print the name of each file that does not end in exactly one newline byte.
+# I.e., warn if there are blank lines (2 or more newlines), or if the
+# last byte is not a newline.  However, currently we don't complain
+# about any file that contains exactly one byte.
+# Exit nonzero if at least one such file is found, otherwise, exit 0.
+# Warn about, but otherwise ignore open failure.  Ignore seek/read failure.
+#
+# Use this if you want to remove trailing empty lines from selected files:
+#   perl -pi -0777 -e 's/\n\n+$/\n/' files...
+#
+require_exactly_one_NL_at_EOF_ =					\
+  foreach my $$f (@ARGV)						\
+    {									\
+      open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next;	\
+      my $$p = sysseek (F, -2, 2);					\
+      my $$c = "seek failure probably means file has < 2 bytes; ignore"; \
+      my $$last_two_bytes;						\
+      defined $$p and $$p = sysread F, $$last_two_bytes, 2;		\
+      close F;								\
+      $$c = "ignore read failure";					\
+      $$p && ($$last_two_bytes eq "\n\n"				\
+              || substr ($$last_two_bytes,1) ne "\n")			\
+          and (print $$f), $$fail=1;					\
+    }									\
+  END { exit defined $$fail }
+sc_prohibit_empty_lines_at_EOF:
+	@perl -le '$(require_exactly_one_NL_at_EOF_)' $$($(VC_LIST_EXCEPT)) \
+	  || { echo '$(ME): empty line(s) or no newline at EOF'		\
+		1>&2; exit 1; } || :
+
+# Make sure we don't use st_blocks.  Use ST_NBLOCKS instead.
+# This is a bit of a kludge, since it prevents use of the string
+# even in comments, but for now it does the job with no false positives.
+sc_prohibit_stat_st_blocks:
+	@prohibit='[.>]st_blocks'					\
+	halt='do not use st_blocks; use ST_NBLOCKS'			\
+	  $(_sc_search_regexp)
+
+# Make sure we don't define any S_IS* macros in src/*.c files.
+# They're already defined via gnulib's sys/stat.h replacement.
+sc_prohibit_S_IS_definition:
+	@prohibit='^ *# *define  *S_IS'					\
+	halt='do not define S_IS* macros; include <sys/stat.h>'		\
+	  $(_sc_search_regexp)
+
+# Perl block to convert a match to FILE_NAME:LINENO:TEST,
+# that is shared by two definitions below.
+perl_filename_lineno_text_ =						\
+    -e '  {'								\
+    -e '    $$n = ($$` =~ tr/\n/\n/ + 1);'				\
+    -e '    ($$v = $$&) =~ s/\n/\\n/g;'					\
+    -e '    print "$$ARGV:$$n:$$v\n";'					\
+    -e '  }'
+
+prohibit_doubled_word_RE_ ?= \
+  /\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\b/gims
+prohibit_doubled_word_ =						\
+    -e 'while ($(prohibit_doubled_word_RE_))'				\
+    $(perl_filename_lineno_text_)
+
+# Define this to a regular expression that matches
+# any filename:dd:match lines you want to ignore.
+# The default is to ignore no matches.
+ignore_doubled_word_match_RE_ ?= ^$$
+
+sc_prohibit_doubled_word:
+	@perl -n -0777 $(prohibit_doubled_word_) $$($(VC_LIST_EXCEPT))	\
+	  | grep -vE '$(ignore_doubled_word_match_RE_)'			\
+	  | grep . && { echo '$(ME): doubled words' 1>&2; exit 1; } || :
+
+# A regular expression matching undesirable combinations of words like
+# "can not"; this matches them even when the two words appear on different
+# lines, but not when there is an intervening delimiter like "#" or "*".
+# Similarly undesirable, "See @xref{...}", since an @xref should start
+# a sentence.  Explicitly prohibit any prefix of "see" or "also".
+# Also prohibit a prefix matching "\w+ +".
+# @pxref gets the same see/also treatment and should be parenthesized;
+# presume it must *not* start a sentence.
+bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{
+bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{
+prohibit_undesirable_word_seq_RE_ ?=					\
+  /(?:\bcan\s+not\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims
+prohibit_undesirable_word_seq_ =					\
+    -e 'while ($(prohibit_undesirable_word_seq_RE_))'			\
+    $(perl_filename_lineno_text_)
+# Define this to a regular expression that matches
+# any filename:dd:match lines you want to ignore.
+# The default is to ignore no matches.
+ignore_undesirable_word_sequence_RE_ ?= ^$$
+
+sc_prohibit_undesirable_word_seq:
+	@perl -n -0777 $(prohibit_undesirable_word_seq_)		\
+	     $$($(VC_LIST_EXCEPT))					\
+	  | grep -vE '$(ignore_undesirable_word_sequence_RE_)' | grep .	\
+	  && { echo '$(ME): undesirable word sequence' >&2; exit 1; } || :
+
+_ptm1 = use "test C1 && test C2", not "test C1 -''a C2"
+_ptm2 = use "test C1 || test C2", not "test C1 -''o C2"
+# Using test's -a and -o operators is not portable.
+# We prefer test over [, since the latter is spelled [[ in configure.ac.
+sc_prohibit_test_minus_ao:
+	@prohibit='(\<test| \[+) .+ -[ao] '				\
+	halt='$(_ptm1); $(_ptm2)'					\
+	  $(_sc_search_regexp)
+
+# Avoid a test bashism.
+sc_prohibit_test_double_equal:
+	@prohibit='(\<test| \[+) .+ == '				\
+	containing='#! */bin/[a-z]*sh'					\
+	halt='use "test x = x", not "test x =''= x"'			\
+	  $(_sc_search_regexp)
+
+# Each program that uses proper_name_utf8 must link with one of the
+# ICONV libraries.  Otherwise, some ICONV library must appear in LDADD.
+# The perl -0777 invocation below extracts the possibly-multi-line
+# definition of LDADD from the appropriate Makefile.am and exits 0
+# when it contains "ICONV".
+sc_proper_name_utf8_requires_ICONV:
+	@progs=$$(grep -l 'proper_name_utf8 ''("' $$($(VC_LIST_EXCEPT)));\
+	if test "x$$progs" != x; then					\
+	  fail=0;							\
+	  for p in $$progs; do						\
+	    dir=$$(dirname "$$p");					\
+	    perl -0777							\
+	      -ne 'exit !(/^LDADD =(.+?[^\\]\n)/ms && $$1 =~ /ICONV/)'	\
+	      $$dir/Makefile.am && continue;				\
+	    base=$$(basename "$$p" .c);					\
+	    grep "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null	\
+	      || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \
+	  done;								\
+	  test $$fail = 1 &&						\
+	    { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \
+	      exit 1; } || :;						\
+	fi
+
+# Warn about "c0nst struct Foo const foo[]",
+# but not about "char const *const foo" or "#define const const".
+sc_redundant_const:
+	@prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b'		\
+	halt='redundant "const" in declarations'			\
+	  $(_sc_search_regexp)
+
+sc_const_long_option:
+	@prohibit='^ *static.*struct option '				\
+	exclude='const struct option|struct option const'		\
+	halt='add "const" to the above declarations'			\
+	  $(_sc_search_regexp)
+
+NEWS_hash =								\
+  $$(sed -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p'		\
+       $(srcdir)/NEWS							\
+     | perl -0777 -pe							\
+	's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms'	\
+     | md5sum -								\
+     | sed 's/ .*//')
+
+# Ensure that we don't accidentally insert an entry into an old NEWS block.
+sc_immutable_NEWS:
+	@if test -f $(srcdir)/NEWS; then				\
+	  test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : ||		\
+	    { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; };	\
+	fi
+
+# Update the hash stored above.  Do this after each release and
+# for any corrections to old entries.
+update-NEWS-hash: NEWS
+	perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \
+	  $(srcdir)/cfg.mk
+
+# Ensure that we use only the standard $(VAR) notation,
+# not @...@ in Makefile.am, now that we can rely on automake
+# to emit a definition for each substituted variable.
+# However, there is still one case in which @VAR@ use is not just
+# legitimate, but actually required: when augmenting an automake-defined
+# variable with a prefix.  For example, gettext uses this:
+# MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@
+# otherwise, makeinfo would put German or French (current locale)
+# navigation hints in the otherwise-English documentation.
+#
+# Allow the package to add exceptions via a hook in cfg.mk;
+# for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by
+# setting this to ' && !/PRAGMA_SYSTEM_HEADER/'.
+_makefile_at_at_check_exceptions ?=
+sc_makefile_at_at_check:
+	@perl -ne '/\@\w+\@/'						\
+          -e ' && !/(\w+)\s+=.*\@\1\@$$/'				\
+          -e ''$(_makefile_at_at_check_exceptions)			\
+	  -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}'	\
+	    $$($(VC_LIST_EXCEPT) | grep -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \
+	  && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || :
+
+news-check: NEWS
+	$(AM_V_GEN)if sed -n $(news-check-lines-spec)p $<		\
+	    | grep -E $(news-check-regexp) >/dev/null; then		\
+	  :;								\
+	else								\
+	  echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2;	\
+	  exit 1;							\
+	fi
+
+sc_makefile_TAB_only_indentation:
+	@prohibit='^	[ ]{8}'						\
+	in_vc_files='akefile|\.mk$$'					\
+	halt='found TAB-8-space indentation'				\
+	  $(_sc_search_regexp)
+
+sc_m4_quote_check:
+	@prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]'		\
+	in_vc_files='(^configure\.ac|\.m4)$$'				\
+	halt='quote the first arg to AC_DEF*'				\
+	  $(_sc_search_regexp)
+
+fix_po_file_diag = \
+'you have changed the set of files with translatable diagnostics;\n\
+apply the above patch\n'
+
+# Verify that all source files using _() (more specifically, files that
+# match $(_gl_translatable_string_re)) are listed in po/POTFILES.in.
+po_file ?= $(srcdir)/po/POTFILES.in
+generated_files ?= $(srcdir)/lib/*.[ch]
+_gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$)
+sc_po_check:
+	@if test -f $(po_file); then					\
+	  grep -E -v '^(#|$$)' $(po_file)				\
+	    | grep -v '^src/false\.c$$' | sort > $@-1;			\
+	  files=;							\
+	  for file in $$($(VC_LIST_EXCEPT)) $(generated_files); do	\
+	    test -r $$file || continue;					\
+	    case $$file in						\
+	      *.m4|*.mk) continue ;;					\
+	      *.?|*.??) ;;						\
+	      *) continue;;						\
+	    esac;							\
+	    case $$file in						\
+	    *.[ch])							\
+	      base=`expr " $$file" : ' \(.*\)\..'`;			\
+	      { test -f $$base.l || test -f $$base.y; } && continue;;	\
+	    esac;							\
+	    files="$$files $$file";					\
+	  done;								\
+	  grep -E -l '$(_gl_translatable_string_re)' $$files		\
+	    | sed 's|^$(_dot_escaped_srcdir)/||' | sort -u > $@-2;	\
+	  diff -u -L $(po_file) -L $(po_file) $@-1 $@-2			\
+	    || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; };	\
+	  rm -f $@-1 $@-2;						\
+	fi
+
+# Sometimes it is useful to change the PATH environment variable
+# in Makefiles.  When doing so, it's better not to use the Unix-centric
+# path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'.
+msg = 'Do not use ":" above; use $$(PATH_SEPARATOR) instead'
+sc_makefile_path_separator_check:
+	@prohibit='PATH[=].*:'						\
+	in_vc_files='akefile|\.mk$$'					\
+	halt=$(msg)							\
+	  $(_sc_search_regexp)
+
+# Check that 'make alpha' will not fail at the end of the process,
+# i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release)
+# and is read-only.
+writable-files:
+	$(AM_V_GEN)if test -d $(release_archive_dir); then		\
+	  for file in $(DIST_ARCHIVES); do				\
+	    for p in ./ $(release_archive_dir)/; do			\
+	      test -e $$p$$file || continue;				\
+	      test -w $$p$$file						\
+		|| { echo ERROR: $$p$$file is not writable; fail=1; };	\
+	    done;							\
+	  done;								\
+	  test "$$fail" && exit 1 || : ;				\
+	else :;								\
+	fi
+
+v_etc_file = $(gnulib_dir)/lib/version-etc.c
+sample-test = tests/sample-test
+texi = doc/$(PACKAGE).texi
+# Make sure that the copyright date in $(v_etc_file) is up to date.
+# Do the same for the $(sample-test) and the main doc/.texi file.
+sc_copyright_check:
+	@require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };'		\
+	in_files=$(v_etc_file)						\
+	halt='out of date copyright in $(v_etc_file); update it'	\
+	  $(_sc_search_regexp)
+	@require='# Copyright \(C\) '$$(date +%Y)' Free'		\
+	in_vc_files=$(sample-test)					\
+	halt='out of date copyright in $(sample-test); update it'	\
+	  $(_sc_search_regexp)
+	@require='Copyright @copyright\{\} .*'$$(date +%Y)' Free'	\
+	in_vc_files=$(texi)						\
+	halt='out of date copyright in $(texi); update it'		\
+	  $(_sc_search_regexp)
+
+# If tests/help-version exists and seems to be new enough, assume that its
+# use of init.sh and path_prepend_ is correct, and ensure that every other
+# use of init.sh is identical.
+# This is useful because help-version cross-checks prog --version
+# with $(VERSION), which verifies that its path_prepend_ invocation
+# sets PATH correctly.  This is an inexpensive way to ensure that
+# the other init.sh-using tests also get it right.
+_hv_file ?= $(srcdir)/tests/help-version
+_hv_regex_weak ?= ^ *\. .*/init\.sh"
+# Fix syntax-highlighters "
+_hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh"
+sc_cross_check_PATH_usage_in_tests:
+	@if test -f $(_hv_file); then					\
+	  grep -l 'VERSION mismatch' $(_hv_file) >/dev/null		\
+	    || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2;	\
+		 exit 0; };						\
+	  grep -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null		\
+	    || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \
+		 exit 1; };						\
+	  good=$$(grep -E '$(_hv_regex_strong)' $(_hv_file));		\
+	  grep -LFx "$$good"						\
+		$$(grep -lE '$(_hv_regex_weak)' $$($(VC_LIST_EXCEPT)))	\
+	      | grep . &&						\
+	    { echo "$(ME): the above files use path_prepend_ inconsistently" \
+		1>&2; exit 1; } || :;					\
+	fi
+
+# BRE regex of file contents to identify a test script.
+_test_script_regex ?= \<init\.sh\>
+
+# In tests, use "compare expected actual", not the reverse.
+sc_prohibit_reversed_compare_failure:
+	@prohibit='\<compare [^ ]+ ([^ ]*exp|/dev/null)'		\
+	containing='$(_test_script_regex)'				\
+	halt='reversed compare arguments'				\
+	  $(_sc_search_regexp)
+
+# #if HAVE_... will evaluate to false for any non numeric string.
+# That would be flagged by using -Wundef, however gnulib currently
+# tests many undefined macros, and so we can't enable that option.
+# So at least preclude common boolean strings as macro values.
+sc_Wundef_boolean:
+	@prohibit='^#define.*(yes|no|true|false)$$'			\
+	in_files='$(CONFIG_INCLUDE)'					\
+	halt='Use 0 or 1 for macro values'				\
+	  $(_sc_search_regexp)
+
+# Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might
+# not be constant, or might overflow a stack.  In general, use PATH_MAX as
+# a limit, not an array or alloca size.
+sc_prohibit_path_max_allocation:
+	@prohibit='(\balloca *\([^)]*|\[[^]]*)\bPATH_MAX'		\
+	halt='Avoid stack allocations of size PATH_MAX'			\
+	  $(_sc_search_regexp)
+
+sc_vulnerable_makefile_CVE-2009-4029:
+	@prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \
+	in_files='(^|/)Makefile\.in$$'					\
+	halt=$$(printf '%s\n'						\
+	  'the above files are vulnerable; beware of running'		\
+	  '  "make dist*" rules, and upgrade to fixed automake'		\
+	  '  see http://bugzilla.redhat.com/542609 for details')	\
+	  $(_sc_search_regexp)
+
+sc_vulnerable_makefile_CVE-2012-3386:
+	@prohibit='chmod a\+w \$$\(distdir\)'				\
+	in_files='(^|/)Makefile\.in$$'					\
+	halt=$$(printf '%s\n'						\
+	  'the above files are vulnerable; beware of running'		\
+	  '  "make distcheck", and upgrade to fixed automake'		\
+	  '  see http://bugzilla.redhat.com/CVE-2012-3386 for details')	\
+	  $(_sc_search_regexp)
+
+vc-diff-check:
+	$(AM_V_GEN)(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || :
+	$(AM_V_at)if test -s vc-diffs; then			\
+	  cat vc-diffs;						\
+	  echo "Some files are locally modified:" 1>&2;		\
+	  exit 1;						\
+	else							\
+	  rm vc-diffs;						\
+	fi
+
+rel-files = $(DIST_ARCHIVES)
+
+gnulib_dir ?= $(srcdir)/gnulib
+gnulib-version = $$(cd $(gnulib_dir) && git describe)
+bootstrap-tools ?= autoconf,automake,gnulib
+
+# If it's not already specified, derive the GPG key ID from
+# the signed tag we've just applied to mark this release.
+gpg_key_ID ?=								\
+  $$(cd $(srcdir)							\
+     && git cat-file tag v$(VERSION)					\
+        | gpgv --status-fd 1 --keyring /dev/null - - 2>/dev/null	\
+        | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
+
+translation_project_ ?= coordinator@translationproject.org
+
+# Make info-gnu the default only for a stable release.
+announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT)
+announcement_mail_headers_stable =		\
+  To: info-gnu@gnu.org				\
+  Cc: $(announcement_Cc_)			\
+  Mail-Followup-To: $(PACKAGE_BUGREPORT)
+
+announcement_Cc_alpha = $(translation_project_)
+announcement_mail_headers_alpha =		\
+  To: $(PACKAGE_BUGREPORT)			\
+  Cc: $(announcement_Cc_)
+
+announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha)
+announcement_mail_headers_beta = $(announcement_mail_headers_alpha)
+
+announcement_mail_Cc_ ?= $(announcement_mail_Cc_$(release-type))
+announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type))
+announcement: NEWS ChangeLog $(rel-files)
+# Not $(AM_V_GEN) since the output of this command serves as
+# announcement message: it would start with " GEN announcement".
+	$(AM_V_at)$(srcdir)/$(_build-aux)/announce-gen			\
+	    --mail-headers='$(announcement_mail_headers_)'		\
+	    --release-type=$(release-type)				\
+	    --package=$(PACKAGE)					\
+	    --prev=$(PREV_VERSION)					\
+	    --curr=$(VERSION)						\
+	    --gpg-key-id=$(gpg_key_ID)					\
+	    --srcdir=$(srcdir)						\
+	    --news=$(srcdir)/NEWS					\
+	    --bootstrap-tools=$(bootstrap-tools)			\
+	    $$(case ,$(bootstrap-tools), in (*,gnulib,*)		\
+	       echo --gnulib-version=$(gnulib-version);; esac)		\
+	    --no-print-checksums					\
+	    $(addprefix --url-dir=, $(url_dir_list))
+
+.PHONY: release-commit
+release-commit:
+	$(AM_V_GEN)cd $(srcdir)				\
+	  && $(_build-aux)/do-release-commit-and-tag	\
+	       -C $(abs_builddir) $(RELEASE)
+
+## ---------------- ##
+## Updating files.  ##
+## ---------------- ##
+
+ftp-gnu = ftp://ftp.gnu.org/gnu
+www-gnu = http://www.gnu.org
+
+upload_dest_dir_ ?= $(PACKAGE)
+upload_command =						\
+  $(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS)		\
+  --to $(gnu_rel_host):$(upload_dest_dir_)			\
+  $(rel-files)
+emit_upload_commands:
+	@echo =====================================
+	@echo =====================================
+	@echo '$(upload_command)'
+	@echo '# send the ~/announce-$(my_distdir) e-mail'
+	@echo =====================================
+	@echo =====================================
+
+.PHONY: upload
+upload:
+	$(AM_V_GEN)$(upload_command)
+
+define emit-commit-log
+  printf '%s\n' 'maint: post-release administrivia' ''			\
+    '* NEWS: Add header line for next release.'				\
+    '* .prev-version: Record previous version.'				\
+    '* cfg.mk (old_NEWS_hash): Auto-update.'
+endef
+
+.PHONY: no-submodule-changes
+no-submodule-changes:
+	$(AM_V_GEN)if test -d $(srcdir)/.git; then			\
+	  diff=$$(cd $(srcdir) && git submodule -q foreach		\
+		  git diff-index --name-only HEAD)			\
+	    || exit 1;							\
+	  case $$diff in '') ;;						\
+	    *) echo '$(ME): submodule files are locally modified:';	\
+		echo "$$diff"; exit 1;; esac;				\
+	else								\
+	  : ;								\
+	fi
+
+submodule-checks ?= no-submodule-changes public-submodule-commit
+
+# Ensure that each sub-module commit we're using is public.
+# Without this, it is too easy to tag and release code that
+# cannot be built from a fresh clone.
+.PHONY: public-submodule-commit
+public-submodule-commit:
+	$(AM_V_GEN)if test -d $(srcdir)/.git; then			\
+	  cd $(srcdir) &&						\
+	  git submodule --quiet foreach					\
+	      test '"$$(git rev-parse "$$sha1")"'			\
+	      = '"$$(git merge-base origin "$$sha1")"'			\
+	    || { echo '$(ME): found non-public submodule commit' >&2;	\
+		 exit 1; };						\
+	else								\
+	  : ;								\
+	fi
+# This rule has a high enough utility/cost ratio that it should be a
+# dependent of "check" by default.  However, some of us do occasionally
+# commit a temporary change that deliberately points to a non-public
+# submodule commit, and want to be able to use rules like "make check".
+# In that case, run e.g., "make check gl_public_submodule_commit="
+# to disable this test.
+gl_public_submodule_commit ?= public-submodule-commit
+check: $(gl_public_submodule_commit)
+
+.PHONY: alpha beta stable release
+ALL_RECURSIVE_TARGETS += alpha beta stable
+alpha beta stable: $(local-check) writable-files $(submodule-checks)
+	$(AM_V_GEN)test $@ = stable					\
+	  && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$'		\
+	       || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
+	  || :
+	$(AM_V_at)$(MAKE) vc-diff-check
+	$(AM_V_at)$(MAKE) news-check
+	$(AM_V_at)$(MAKE) distcheck
+	$(AM_V_at)$(MAKE) dist
+	$(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@
+	$(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
+
+release:
+	$(AM_V_GEN)$(MAKE) $(release-type)
+
+# Override this in cfg.mk if you follow different procedures.
+release-prep-hook ?= release-prep
+
+gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?]
+.PHONY: release-prep
+release-prep:
+	$(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \
+	  > ~/announce-$(my_distdir)
+	$(AM_V_at)if test -d $(release_archive_dir); then	\
+	  ln $(rel-files) $(release_archive_dir);		\
+	  chmod a-w $(rel-files);				\
+	fi
+	$(AM_V_at)echo $(VERSION) > $(prev_version_file)
+	$(AM_V_at)$(MAKE) update-NEWS-hash
+	$(AM_V_at)perl -pi						\
+	  -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"'	\
+	  $(srcdir)/NEWS
+	$(AM_V_at)msg=$$($(emit-commit-log)) || exit 1;		\
+	cd $(srcdir) && $(VC) commit -m "$$msg" -a
+
+# Override this with e.g., -s $(srcdir)/some_other_name.texi
+# if the default $(PACKAGE)-derived name doesn't apply.
+gendocs_options_ ?=
+
+.PHONY: web-manual
+web-manual:
+	$(AM_V_GEN)test -z "$(manual_title)" \
+	  && { echo define manual_title in cfg.mk 1>&2; exit 1; } || :
+	$(AM_V_at)cd '$(srcdir)/doc'; \
+	  $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \
+	     -o '$(abs_builddir)/doc/manual' \
+	     --email $(PACKAGE_BUGREPORT) $(PACKAGE) \
+	    "$(PACKAGE_NAME) - $(manual_title)"
+	$(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs."
+
+.PHONY: web-manual-update
+web-manual-update:
+	$(AM_V_GEN)cd $(srcdir) \
+	  && $(_build-aux)/gnu-web-doc-update -C $(abs_builddir)
+
+
+# Code Coverage
+
+init-coverage:
+	$(MAKE) $(AM_MAKEFLAGS) clean
+	lcov --directory . --zerocounters
+
+COVERAGE_CCOPTS ?= "-g --coverage"
+COVERAGE_OUT ?= doc/coverage
+
+build-coverage:
+	$(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS)
+	$(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check
+	mkdir -p $(COVERAGE_OUT)
+	lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \
+		--capture
+
+gen-coverage:
+	genhtml --output-directory $(COVERAGE_OUT) \
+		$(COVERAGE_OUT)/$(PACKAGE).info \
+		--highlight --frames --legend \
+		--title "$(PACKAGE_NAME)"
+
+coverage: init-coverage build-coverage gen-coverage
+
+# Some projects carry local adjustments for gnulib modules via patches in
+# a gnulib patch directory whose default name is gl/ (defined in bootstrap
+# via local_gl_dir=gl).  Those patches become stale as the originals evolve
+# in gnulib.  Use this rule to refresh any stale patches.  It applies each
+# patch to the original in $(gnulib_dir) and uses the temporary result to
+# generate a fuzz-free .diff file.  If you customize the name of your local
+# gnulib patch directory via bootstrap.conf, this rule detects that name.
+# Run this from a non-VPATH (i.e., srcdir) build directory.
+.PHONY: refresh-gnulib-patches
+refresh-gnulib-patches:
+	gl=gl;								\
+	if test -f bootstrap.conf; then					\
+	  t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;'	\
+	       -e 'END{defined $$d and print $$d}' bootstrap.conf);	\
+	  test -n "$$t" && gl=$$t;					\
+	fi;								\
+	for diff in $$(cd $$gl; git ls-files | grep '\.diff$$'); do	\
+	  b=$$(printf %s "$$diff"|sed 's/\.diff$$//');			\
+	  VERSION_CONTROL=none						\
+	    patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1;		\
+	  ( cd $(gnulib_dir) || exit 1;					\
+	    git diff "$$b" > "../$$gl/$$diff";				\
+	    git checkout $$b ) || exit 1;				\
+	done
+
+# Update gettext files.
+PACKAGE ?= $(shell basename $(PWD))
+PO_DOMAIN ?= $(PACKAGE)
+POURL = http://translationproject.org/latest/$(PO_DOMAIN)/
+PODIR ?= po
+refresh-po:
+	rm -f $(PODIR)/*.po && \
+	echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \
+	wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \
+	echo 'en@boldquot' > $(PODIR)/LINGUAS && \
+	echo 'en@quot' >> $(PODIR)/LINGUAS && \
+	ls $(PODIR)/*.po | sed 's/\.po//;s,$(PODIR)/,,' | sort >> $(PODIR)/LINGUAS
+
+ # Running indent once is not idempotent, but running it twice is.
+INDENT_SOURCES ?= $(C_SOURCES)
+.PHONY: indent
+indent:
+	indent $(INDENT_SOURCES)
+	indent $(INDENT_SOURCES)
+
+# If you want to set UPDATE_COPYRIGHT_* environment variables,
+# put the assignments in this variable.
+update-copyright-env ?=
+
+# Run this rule once per year (usually early in January)
+# to update all FSF copyright year lists in your project.
+# If you have an additional project-specific rule,
+# add it in cfg.mk along with a line 'update-copyright: prereq'.
+# By default, exclude all variants of COPYING; you can also
+# add exemptions (such as ChangeLog..* for rotated change logs)
+# in the file .x-update-copyright.
+.PHONY: update-copyright
+update-copyright:
+	$(AM_V_GEN)grep -l -w Copyright                                  \
+	  $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \
+	  | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@
+
+# This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not
+# overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS.
+
+# NOTE: to override any _gl_TS_* default value, you must
+# define the variable(s) using "export" in cfg.mk.
+_gl_TS_dir ?= src
+
+ALL_RECURSIVE_TARGETS += sc_tight_scope
+sc_tight_scope: tight-scope.mk
+	@fail=0;							\
+	if ! grep '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk	\
+		> /dev/null						\
+	   && ! grep -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \
+		> /dev/null 2>&1; then					\
+	    echo '$(ME): skipping $@';					\
+	else								\
+	    $(MAKE) -s -C $(_gl_TS_dir)					\
+		-f Makefile						\
+		-f $(abs_top_srcdir)/cfg.mk				\
+		-f $(abs_top_builddir)/$<				\
+	      _gl_tight_scope						\
+		|| fail=1;						\
+	fi;								\
+	rm -f $<;							\
+	exit $$fail
+
+tight-scope.mk: $(ME)
+	@rm -f $@ $@-t
+	@perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t
+	@chmod a=r $@-t && mv $@-t $@
+
+ifeq (a,b)
+# TS-start
+
+# Most functions should have static scope.
+# Any that don't must be marked with 'extern', but 'main'
+# and 'usage' are exceptions: they're always extern, but
+# do not need to be marked.  Symbols matching '__.*' are
+# reserved by the compiler, so are automatically excluded below.
+_gl_TS_unmarked_extern_functions ?= main usage
+_gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\S+) *\(/
+
+# If your project uses a macro like "XTERN", then put
+# the following in cfg.mk to override this default:
+# export _gl_TS_extern = extern|XTERN
+_gl_TS_extern ?= extern
+
+# The second nm|grep checks for file-scope variables with 'extern' scope.
+# Without gnulib's progname module, you might put program_name here.
+# Symbols matching '__.*' are reserved by the compiler,
+# so are automatically excluded below.
+_gl_TS_unmarked_extern_vars ?=
+
+# NOTE: the _match variables are perl expressions -- not mere regular
+# expressions -- so that you can extend them to match other patterns
+# and easily extract matched variable names.
+# For example, if your project declares some global variables via
+# a macro like this: GLOBAL(type, var_name, initializer), then you
+# can override this definition to automatically extract those names:
+# export _gl_TS_var_match = \
+#   /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/
+_gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/
+
+# The names of object files in (or relative to) $(_gl_TS_dir).
+_gl_TS_obj_files ?= *.$(OBJEXT)
+
+# Files in which to search for the one-line style extern declarations.
+# $(_gl_TS_dir)-relative.
+_gl_TS_headers ?= $(noinst_HEADERS)
+_gl_TS_other_headers ?= *.h
+
+.PHONY: _gl_tight_scope
+_gl_tight_scope: $(bin_PROGRAMS)
+	t=exceptions-$$$$;						\
+	trap 's=$$?; rm -f $$t; exit $$s' 0;				\
+	for sig in 1 2 3 13 15; do					\
+	  eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \
+	done;								\
+	src=`for f in $(SOURCES); do					\
+	       test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`;	\
+	hdr=`for f in $(_gl_TS_headers); do				\
+	       test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`;	\
+	( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_functions);	\
+	  grep -h -A1 '^extern .*[^;]$$' $$src				\
+	    | grep -vE '^(extern |--)' | sed 's/ .*//';			\
+	  perl -lne							\
+	     '$(_gl_TS_function_match) and print "^$$1\$$"' $$hdr;	\
+	) | sort -u > $$t;						\
+	nm -e $(_gl_TS_obj_files) | sed -n 's/.* T //p'|grep -Ev -f $$t	\
+	  && { echo the above functions should have static scope >&2;	\
+	       exit 1; } || : ;						\
+	( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_vars);	\
+	  perl -lne '$(_gl_TS_var_match) and print "^$$1\$$"'		\
+		$$hdr $(_gl_TS_other_headers)				\
+	) | sort -u > $$t;						\
+	nm -e $(_gl_TS_obj_files) | sed -n 's/.* [BCDGRS] //p'		\
+            | sort -u | grep -Ev -f $$t					\
+	  && { echo the above variables should have static scope >&2;	\
+	       exit 1; } || :
+# TS-end
+endif
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..d3a9d62
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,28 @@
+da
+de
+el
+eo
+es
+et
+fi
+fr
+ga
+hr
+id
+it
+ja
+ms
+nb
+nl
+pl
+pt
+pt_BR
+ro
+ru
+sr
+sv
+tr
+uk
+vi
+zh_CN
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..2a71983
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,446 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.18
+GETTEXT_MACRO_VERSION = 0.18
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+	@echo "$(MSGFMT) -c -o $@ $<"; \
+	$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+	@lang=`echo $* | sed -e 's,.*/,,'`; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+	sed -e '/^#/d' $< > t-$@
+	mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+	test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+	  || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+	       exit 1; \
+	     }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+	@$(CHECK_MACRO_VERSION)
+	test ! -f $(srcdir)/$(DOMAIN).pot || \
+	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+	@test ! -f $(srcdir)/$(DOMAIN).pot || { \
+	  echo "touch stamp-po" && \
+	  echo timestamp > stamp-poT && \
+	  mv stamp-poT stamp-po; \
+	}
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+	if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
+	  package_gnu='GNU '; \
+	else \
+	  package_gnu=''; \
+	fi; \
+	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+	else \
+	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+	fi; \
+	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	  *) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --package-name="$${package_gnu}@PACKAGE@" \
+	      --package-version='@VERSION@' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	esac
+	test ! -f $(DOMAIN).po || { \
+	  if test -f $(srcdir)/$(DOMAIN).pot; then \
+	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+	    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+	    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+	    else \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+	      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	    fi; \
+	  else \
+	    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	  fi; \
+	}
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+	$(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+	if test -f "$(srcdir)/$${lang}.po"; then \
+	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+	  cd $(srcdir) \
+	    && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	           '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+	           *) \
+	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+	         esac; \
+	       }; \
+	else \
+	  $(MAKE) $${lang}.po-create; \
+	fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    $(INSTALL_DATA) $(srcdir)/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	  for file in Makevars; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+install-data-no: all
+install-data-yes: all
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+	    fi; \
+	  done; \
+	done
+
+install-strip: install
+
+install-dvi install-html install-info install-pdf install-ps:
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+installdirs-data-no:
+installdirs-data-yes:
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	    fi; \
+	  done; \
+	done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+uninstall-data-no:
+uninstall-data-yes:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+	    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	  done; \
+	done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+	rm -f remove-potcdate.sed
+	rm -f stamp-poT
+	rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+	rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+	$(MAKE) update-po
+	@$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  dists="$$dists Makevars.template"; \
+	fi; \
+	if test -f $(srcdir)/$(DOMAIN).pot; then \
+	  dists="$$dists $(DOMAIN).pot stamp-po"; \
+	fi; \
+	if test -f $(srcdir)/ChangeLog; then \
+	  dists="$$dists ChangeLog"; \
+	fi; \
+	for i in 0 1 2 3 4 5 6 7 8 9; do \
+	  if test -f $(srcdir)/ChangeLog.$$i; then \
+	    dists="$$dists ChangeLog.$$i"; \
+	  fi; \
+	done; \
+	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+	for file in $$dists; do \
+	  if test -f $$file; then \
+	    cp -p $$file $(distdir) || exit 1; \
+	  else \
+	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+	  fi; \
+	done
+
+update-po: Makefile
+	$(MAKE) $(DOMAIN).pot-update
+	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+	$(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+	exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+	if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+	cd $(srcdir); \
+	if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	       '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+	         $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+	       *) \
+	         $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+	     esac; \
+	   }; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "msgmerge for $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+	@:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+	cd $(top_builddir) \
+	  && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..dd6544b
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,53 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ \
+\
+--flag=_:1:pass-c-format\
+--flag=N_:1:pass-c-format\
+--flag=error:3:c-format --flag=error_at_line:5:c-format\
+\
+--from-code=UTF-8\
+--flag=asprintf:2:c-format\
+--flag=complain:1:c-format --flag=complain_at:2:c-format\
+--flag=fatal:1:c-format --flag=fatal_at:2:c-format\
+--flag=warn:1:c-format  --flag=warn_at:2:c-format\
+--flag=unexpected_end:2:c-format\
+$${end_of_xgettext_options+}
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = bug-bison@gnu.org
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES = 
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..ee34879
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,33 @@
+src/complain.c
+src/conflicts.c
+src/files.c
+src/getargs.c
+src/gram.c
+src/graphviz.c
+src/location.c
+src/main.c
+src/muscle-tab.c
+src/parse-gram.y
+src/print.c
+src/print_graph.c
+src/reader.c
+src/reduce.c
+src/scan-code.l
+src/scan-gram.l
+src/scan-skel.l
+src/symlist.c
+src/symtab.c
+
+djgpp/subpipe.c
+lib/argmatch.c
+lib/bitset_stats.c
+lib/closeout.c
+lib/error.c
+lib/getopt.c
+lib/obstack.c
+lib/spawn-pipe.c
+lib/quotearg.c
+lib/timevar.c
+lib/w32spawn.h
+lib/wait-process.c
+lib/xalloc-die.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..af52487
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+	$(MAKE) en@quot.po-update
+en@boldquot.po-create:
+	$(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+	@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+	if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	ll=`echo $$lang | sed -e 's/@.*//'`; \
+	LC_ALL=C; export LC_ALL; \
+	cd $(srcdir); \
+	if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "creation of $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+en@quot.insert-header: insert-header.sin
+	sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+	sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+	rm -f *.insert-header
diff --git a/po/bison.pot b/po/bison.pot
new file mode 100644
index 0000000..6f02c2a
--- /dev/null
+++ b/po/bison.pot
@@ -0,0 +1,1094 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.7\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr ""
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr ""
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr ""
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr ""
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr ""
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr ""
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr ""
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr ""
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr ""
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr ""
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr ""
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr ""
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr ""
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr ""
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr ""
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr ""
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr ""
+
+#: src/gram.c:112
+msgid "empty"
+msgstr ""
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr ""
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr ""
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr ""
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr ""
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr ""
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr ""
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr ""
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr ""
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr ""
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr ""
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr ""
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr ""
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr ""
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr ""
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr ""
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr ""
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr ""
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr ""
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr ""
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr ""
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr ""
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr ""
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr ""
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr ""
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr ""
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr ""
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr ""
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr ""
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr ""
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr ""
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr ""
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr ""
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr ""
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr ""
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr ""
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr ""
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr ""
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr ""
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr ""
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr ""
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr ""
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr ""
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr ""
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr ""
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr ""
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr ""
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr ""
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr ""
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr ""
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr ""
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr ""
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr ""
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr ""
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr ""
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr ""
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr ""
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr ""
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr ""
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr ""
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr ""
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr ""
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr ""
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr ""
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr ""
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr ""
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr ""
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr ""
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr ""
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr ""
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr ""
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr ""
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr ""
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr ""
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr ""
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr ""
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr ""
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr ""
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr ""
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr ""
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr ""
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr ""
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr ""
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr ""
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr ""
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“/g
+s/”/”/g
+s/‘/‘/g
+s/’/’/g
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644
index 0000000..5cab6d6
--- /dev/null
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..bc6e892
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,1243 @@
+# Danish messages for bison.
+# Copyright © 2001, 2002 Free Software Foundation, Inc.
+# Keld Simonsen <keld@dkuug.dk>, 2002.
+# Byrial Ole Jensen <byrial@image.dk>, 2002-2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 1.875d\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2004-05-22 11:14+0200\n"
+"Last-Translator: Byrial Ole Jensen <byrial@image.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "advarsel"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "Fejl ved ind- eller udlæsning"
+
+#: src/complain.c:208 src/complain.c:215
+#, fuzzy
+msgid "fatal error"
+msgstr "fatal fejl: "
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Konflikt mellem regel %d og element %s løstes som skift"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Konflikt mellem regel %d og element %s løstes som reducér"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Konflikt mellem regel %d og element %s løstes som en fejl"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikter: %d skift/reducér, %d reducér/reducér\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikter:  %d skift/reducér\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikter:  %d reducér/reducér\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Tilstand %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr kan kun bruges ved GLR-fortolkere"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "forventede %d skift/reducér-konflikt"
+msgstr[1] "forventede %d skift/reducér-konflikter"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "forventede %d reducér/reducér-konflikt"
+msgstr[1] "forventede %d reducér/reducér-konflikter"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "kan ikke åbne filen \"%s\""
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "kan ikke lukke fil"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "konfliktende uddata til filen %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv med \"%s --help\" for mere information.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Brug: %s [FLAG]... FIL\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Fortolker:\n"
+"  -S, --skeleton=FIL         angiv skeletfilen som skal bruges\n"
+"  -t, --debug                instrumentér fortolkeren for fejlsøgning\n"
+"      --locations            aktivér tilstandsberegning\n"
+"  -p, --name-prefix=PRÆFIKS  tilføj PRÆFIKS for eksterne symboler\n"
+"  -l, --no-lines             generér ikke \"#line\"-direktiver\n"
+"  -n, --no-parser            generér kun tabellerne\n"
+"  -k, --token-table          inkludér en tabel over elementnavne\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Uddata:\n"
+"  -d, --defines              lav også en hovedfil\n"
+"  -r, --report=SAGER         lav også detaljer om automaten\n"
+"  -v, --verbose              samme som \"--report=state\"\n"
+"  -b, --file-prefix=PRÆFIKS  angiv et PRÆFIKS for uddatafiler\n"
+"  -o, --output=FIL           læg uddata i FIL\n"
+"  -g, --graph                lav også en VCG-beskrivelse af automaten\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+#, fuzzy
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"TING er en liste med kommaseparerede ord som kan indeholde:\n"
+"  \"state\"        beskriv tilstandene\n"
+"  \"itemset\"      komplettér kerneobjektmængderne med deres afslutninger\n"
+"  \"lookahead\"    kobl udtrykkeligt fremadkig til objekter\n"
+"  \"solved\"       beskriv løsninger af skift/reducér-konflikter\n"
+"  \"all\"          inkludér al ovenstående information\n"
+"  \"none\"         deaktivér rapporten\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Rapportér fejl til <bug-bison@gnu.org>.\n"
+"Rapportér synpunkter om oversættelsen til <dansk@klid.dk>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Skrevet af Robert Corbett og Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Dette er frit programmel, se kildekoden for kopieringsbetingelser. Der\n"
+"gives INGEN garanti, endog ikke for SALGBARHED eller EGNETHED FOR NOGET\n"
+"BESTEMT FORMÅL.\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "flere %s-deklarationer"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "fejlagtig værdi: %s"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "flere %s-deklarationer"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "manglende operand efter \"%s\""
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "overtallig operand \"%s\""
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "tom"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammatik"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr ""
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr ""
+
+#: src/main.c:146
+#, fuzzy
+msgid "rule useless in parser due to conflicts"
+msgstr "regel aldrig reduceret på grund af konflikter"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "symbol %s redefineret"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr ""
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "fejlagtig værdi: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "manglende identifikator i parameterdeklaration"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " type %d er %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "skift, og gå til tilstand %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "gå til tilstand %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "fejl (ikke-associativ)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reducér med regel %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "acceptér"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Tilstand %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminaler, med regler hvor de forekommer"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Ikke-terminaler, med regler hvor de forekommer"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " til venstre:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " til højre:"
+
+#: src/print.c:510
+#, fuzzy
+msgid "Rules useless in parser due to conflicts"
+msgstr "regel aldrig reduceret på grund af konflikter"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "flere %s-deklarationer"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "resultattypekonflikt ved sammenfletningsfunktion %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+#, fuzzy
+msgid "previous declaration"
+msgstr "flere %s-deklarationer"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "regel givet for %s som er et element"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "typekonflikt for standardhandling: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "tom regel for typet ikke-terminal, og ingen handling"
+
+#: src/reader.c:328
+#, fuzzy, c-format
+msgid "unused value: $%d"
+msgstr "fejlagtig værdi: %s"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr ""
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "kun en %s tilladt per regel"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s påvirker kun GLR-fortolkere"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s skal følges af et positivt tal"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr ""
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "ingen regler i inddatagrammatikken"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "ingen regler i inddatagrammatikken"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "Ikke-terminaler, med regler hvor de forekommer"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "ingen regler i inddatagrammatikken"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "ingen regler i inddatagrammatikken"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "ingen regler i inddatagrammatikken"
+msgstr[1] "ingen regler i inddatagrammatikken"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "startsymbolet %s genererer ingen sætninger"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "heltal uden for gyldigshedsområdet: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "ugyldigt direktiv: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, fuzzy, c-format
+msgid "misleading reference: %s"
+msgstr "redefinition af præcedens for %s"
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "flertydigt argument %s til %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$%d for \"%s\" har ingen erklæret type"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ for \"%s\" har ingen erklæret type"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d for \"%s\" har ingen erklæret type"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "Malplaceret \",\" behandlet som blanktegn"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "ugyldigt direktiv: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "ugyldigt direktiv: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "ugyldigt tegn: %s"
+msgstr[1] "ugyldigt tegn: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ugyldigt tegn: %s"
+msgstr[1] "ugyldigt tegn: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "ugyldigt NUL-tegn"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "ugyldigt NUL-tegn: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "ugyldigt tegn: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "manglende \"%s\" ved slutningen af filen"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "manglende \"%s\" ved slutningen af linjen"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, fuzzy, c-format
+msgid "invalid $ value: $%d"
+msgstr "fejlagtig værdi: %s"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr ""
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "gentagen %s-erklæring for %s"
+
+#: src/symtab.c:164
+#, fuzzy, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "gentagen %s-erklæring for %s"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "symbol %s redefineret"
+
+#: src/symtab.c:346
+#, fuzzy, c-format
+msgid "symbol %s redeclared"
+msgstr "symbol %s redefineret"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redefinition af elementnummer for %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"symbol %s bruges, men er ikke defineret som et element og har ingen regler"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "symbol \"%s\" bruges mere end en gang som en bogstavelig streng"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "symbol \"%s\" har fået mere end én bogstavelig streng"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "gentagen typeerklæring for %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "gentagen typeerklæring for %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "startsymbolet %s er udefineret"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "startsymbolet %s er et element"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "hjælpeprogrammet \"%s\" fejlede"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "hjælpeprogrammet \"%s\" ikke fundet"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ugyldigt argument %s til %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "flertydigt argument %s til %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Gyldige argumenter er:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitmængdeallokeringer, %u frigjort (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitmængdeindstillinger, %u cachede (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitmængdenulstillinger, %u cachede (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitmængdetest, %u cachede (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitmængdelister\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "kaldsloghistogram\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "størrelsesloghistogram\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "densitetshistogram\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitmængdestatistik:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Akkumulerede kørsler = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Kunne ikke læse statistikfil."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Dårlig statistikfilstørrelse.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Kunne ikke skrive statistikfil."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Kunne ikke åbne statistikfil for skrivning."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "fatal fejl: "
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Ukendt systemfejl"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: flaget \"%s\" er flertydigt\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: flaget \"--%s\" tager intet argument\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: flaget \"%c%s\" tager intet argument\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: flaget \"%s\" behøver et argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: ukendt flag \"--%s\"\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: ukendt flag \"%c%s\"\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ugyldigt flag --%c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: flaget behøver et argument -- %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: flaget \"-W %s\" er flertydigt\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: flaget \"-W %s\" tager intet argument\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: flaget \"%s\" behøver et argument\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "hukommelsen opbrugt"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "kan ikke lukke fil"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+# Når vi går over til Unicode mere allmænt måske vi bør oversættta båda disse
+# med U+201D (RIGHT DOUBLE QUOTATION MARK) på svenska.  Eller?
+#
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "\""
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "\""
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Udførelsestider (sekunder)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTALT                :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "tid i %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "tilstand %d"
+
+#~ msgid "warning: "
+#~ msgstr "advarsel: "
+
+#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
+#~ msgstr "GNU bison genererer fortolkere til LALR(1)-grammatiker.\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Hvis et lang flag viser et argument som obligatorisk, er det også\n"
+#~ "obligatorisk for det tilsvarende korte flag. Tilsvarende\n"
+#~ "for valgfrie argumenter.\n"
+
+#~ msgid ""
+#~ "Operation modes:\n"
+#~ "  -h, --help      display this help and exit\n"
+#~ "  -V, --version   output version information and exit\n"
+#~ "  -y, --yacc      emulate POSIX yacc\n"
+#~ msgstr ""
+#~ "Arbejdstilstande:\n"
+#~ "  -h, --help      vis denne hjælpetekst og afslut\n"
+#~ "  -V, --version   vis versionsinformation og afslut\n"
+#~ "  -y, --yacc      emulér POSIX-yacc\n"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "POSIX forbyder deklarationer i grammatikken"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Aldrig reducerede regler"
+
+#~ msgid "useless rule"
+#~ msgstr "ubrugelig regel"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "ubrugelig ikke-terminal: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Ubrugelige ikke-terminaler"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Terminaler som ikke bruges"
+
+#~ msgid "Useless rules"
+#~ msgstr "Ubrugelige regler"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d regel reduceres aldrig\n"
+#~ msgstr[1] "%d regler reduceres aldrig\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d ubrugelig ikke-terminal"
+#~ msgstr[1] "%d ubrugelige ikke-terminaler"
+
+#~ msgid " and "
+#~ msgstr " og "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d ubrugelig regel"
+#~ msgstr[1] "%d ubrugelige regler"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "ugyldig undvigesekvens: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "ukendt undvigesekvens: %s"
+
+#~ msgid "missing `{' in `%s'"
+#~ msgstr "manglende \"{\" i \"%s\""
+
+#~ msgid "invalid $ value"
+#~ msgstr "fejlagtig $-værdi"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "modstridige præcedenser mellem %s og %s"
+
+#~ msgid "conflicting associativities for %s (%s) and %s (%s)"
+#~ msgstr "modstridige associativiteter for %s (%s) og %s (%s)"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "elementerne %s og %s har begge fået nummer %d"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ikke tilladt flag -- %c\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "hjælpeprogrammet \"%s\" kunne ikke startes"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr "hjælpeprogrammet \"%s\" fejlede med afslutningskode %d"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644
index 0000000..e68df5f
--- /dev/null
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..76e1a2a
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,1408 @@
+# This file is distributed under the same license as the bison package.
+# German translation for message of GNU bison.
+# Copyright (C) 1996 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
+# Michael Piefel <piefel@informatik.hu-berlin.de>, 2002, 2003, 2004, 2005, 2006, 2008, 2010, 2011, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-11 20:05+0100\n"
+"Last-Translator: Michael Piefel <piefel@informatik.hu-berlin.de>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "Warnung"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "Fehler"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "fataler Fehler"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+"    Konflikt zwischen Regel %d and Token %s wurde durch Schieben gelöst"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Konflikt zwischen Regel %d and Token %s wurde durch Reduzierung gelöst"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Konflikt zwischen Regel %d and Token %s wurde als Fehler betrachtet"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "Konflikte: %d Schiebe/Reduziere, %d Reduziere/Reduziere\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "Konflikte: %d Schiebe/Reduziere\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "Konflikte: %d Reduziere/Reduziere\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Zustand %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr betrifft nur GLR-Parser"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "erwartete %d Schiebe/Reduziere-Konflikt"
+msgstr[1] "erwartete %d Schiebe/Reduziere-Konflikte"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "erwartete %d Reduziere/Reduziere-Konflikt"
+msgstr[1] "erwartete %d Reduziere/Reduziere-Konflikte"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: kann nicht öffnen"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "Eingabe-/Ausgabe-Fehler"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "kann Datei nicht schließen"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "werde die Eingabedatei %s nicht überschreiben"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "widersprüchliche Ausgaben in Datei %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "„%s --help“ gibt weitere Informationen.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Aufruf: %s [OPTION]... DATEI\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Einen deterministischen LR- oder verallgemeinerten LR-Parser (GLR) "
+"erstellen,\n"
+"unter Zuhilfenahme von LALR(1)-, IELR(1)- oder kanonischen LR(1)-Tabellen.\n"
+"Unterstützung für IELR(1) und kanonische LR(1) is experimentell.\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Erforderliche Argumente für lange Optionen sind auch für Kurzformen "
+"erforderlich.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Das gleiche gilt für optionale Argumente.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Arbeitsmodi:\n"
+"  -h, --help                 diese Hilfe anzeigen und beenden\n"
+"  -V, --version              Versionsinformation anzeigen und beenden\n"
+"      --print-localedir      Verzeichnis mit Locale-abhängigen Daten "
+"anzeigen\n"
+"      --print-datadir        Verzeichnis mit Skeletten und XSLT anzeigen\n"
+"  -y, --yacc                 POSIX’ Yacc emulieren\n"
+"  -W, --warnings[=KATEGORIE]  Warnungen, die in KATEGORIE fallen, anzeigen\n"
+"  -f, --feature[=FEATURE]    verschiedene Features aktivieren\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -L, --language=SPRACHE     die Ausgabesprache bestimmen\n"
+"  -S, --skeleton=DATEI       zu benutzende Skelettdatei angeben\n"
+"  -t, --debug                den Parser auf Debugging-Unterstützung "
+"vorbereiten\n"
+"      --locations            Standortberechnung ermöglichen\n"
+"  -D, --define=NAME[=VALUE]        ähnlich zu „%define NAME \"VALUE\"“\n"
+"  -F, --force-define=NAME[=VALUE]  „%define NAME \"VALUE\"“ überschreiben\n"
+"  -p, --name-prefix=PRÄFIX   PRÄFIX vor alle externen Symbole setzen;\n"
+"                             veraltet, durch „-Dapi.prefix=PREFIX“ ersetzt\n"
+"  -l, --no-lines             keine „#line“-Direktiven erzeugen\n"
+"  -k, --token-table          eine Tabelle der Token-Namen mit einschließen\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Ausgabe:\n"
+"      --defines[=DATEI]      auch eine Header-Datei herstellen\n"
+"  -d                         genauso, aber DATEI kann nicht angegeben "
+"werden\n"
+"  -r, --report=DINGE         auch Details des Automaten ausgeben\n"
+"      --report-file=DATEI    Report in DATEI ausgeben\n"
+"  -v, --verbose              das Gleiche wie „--report=state“\n"
+"  -b, --file-prefix=PRÄFIX   einen PRÄFIX für Ausgabe-Dateien angeben\n"
+"  -o, --output=DATEI         Ausgabe in DATEI schreiben\n"
+"  -g, --graph[=DATEI]        auch einen Graphen des Automaten herstellen\n"
+"  -x, --xml[=DATEI]          auch einen XML-Report des Automaten herstellen\n"
+"                               (das XML-Schema ist experimentell)\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Die Warnungs-Kategorien schließen ein:\n"
+"  „midrule-values“  nicht gesetzte oder nicht benutzte Werte inmitten einer "
+"Regel\n"
+"  „yacc“            Inkompatibilitäten mit POSIX’ YACC\n"
+"  „conflicts-sr“    S/R-Konflikte (standardmäßig an)\n"
+"  „conflicts-rr“    R/R-Konflikte (standardmäßig an)\n"
+"  „deprecated“      veraltete Konstrukte\n"
+"  „other“           alle anderen Warnungen (standardmäßig an)\n"
+"  „all“             alle Warnungen\n"
+"  „no-KATEGORIE“    Warnungen in KATEGORIE abschalten\n"
+"  „none“            alle Warnungen abschalten\n"
+"  „error“           Warnungen als Fehler behandeln\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"DINGE ist eine Liste kommagetrennter Wörter aus:\n"
+"  „state“        die Zustände beschreiben\n"
+"  „itemset“      die Kernsymbolmengen mit ihrem Abschluss vervollständigen\n"
+"  „lookahead“    explizit Vorschautoken mit Symbolen verbinden\n"
+"  „solved“       Schiebe-/Reduzier-Konfliktlösungen beschreiben\n"
+"  „all“          alle oben genannten Informationen\n"
+"  „none“         den Report abschalten\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"FEATURE is eine Liste kommaseparierter Wörter, die einschließen können:\n"
+"  „caret“        Fehler mit Zirkumflexen („^“) markieren\n"
+"  „all“          alle oben genannten\n"
+"  „none“         keins der oben genannten\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Berichten Sie Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "Home-Page von %s: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"Allgemeine Hilfe zur Nutzung von GNU-Software: <http://www.gnu.org/gethelp/"
+">.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Berichten Sie Übersetzungsfehler an <http://translationproject.org/team/de."
+"html>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Für die vollständige Dokumentation rufen Sie „info bison“ auf.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Geschrieben von Robert Corbett und Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es\n"
+"gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE "
+"ZWECKE.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "mehrfache Skelett-Deklarationen sind ungültig"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: unzulässige Sprache"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "mehrfache Sprach-Deklarationen sind ungültig"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: fehlender Operand"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "zusätzlicher Operand %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "leer"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammatik"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Generiert durch %s.\n"
+"// Melden Sie Fehler an <%s>.\n"
+"// Homepage: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "Überlauf bei den Zeilennummern"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "Überlauf bei den Spaltennummern"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "Regel nutzlos im Parser wegen Konflikten"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%define-Variable %s noch einmal definiert"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "vorhergehende Definition"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: undefinierte %%define-Variable %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "ungültiger Wert für Boole’sche %%define-Variable %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "ungültiger Wert für %%define-Variable %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "akzeptierte Werte: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "fehlender Bezeichner in Parameterdeklaration"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " Typ %d ist %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "schiebe und gehe zu Zustand %d über\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "gehe zu Zustand %d über\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "Fehler (nicht assoziativ)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduziere mit Regel %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "annehmen"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "Zustand %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminale und die Regeln, in denen sie verwendet werden"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Nicht-Terminal und die Regeln, in denen sie verwendet werden"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " auf der linken Seite:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " auf der rechten Seite:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Regeln nutzlos im Parser wegen Konflikten"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "mehr als eine %s-Deklaration"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "Rückgabetyp-Konflikt in merge-Funktion %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "vorhergehende Deklaration"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "doppelter Symbolname für %s ignoriert"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "Regel für %s vorhanden, welches aber ein Token ist"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "Typkonflikt bei Default-Aktion: <%s> != <%s>) "
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "leere Regel für Nicht-Terminal mit Typ und keine Aktion"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "unbenutzter Wert: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "nicht gesetzter Wert: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "Token für %%prec ist nicht definiert: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "nur ein %s pro Regel erlaubt"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s betrifft nur GLR-Parser"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s muss von positiver Zahl gefolgt sein"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "Regel ist zu lang"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "Eingabegrammatik enthält keine Regeln"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "Regeln nutzlos in Grammatik"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "Nicht-Terminal nutzlos in Grammatik: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Nicht-Terminale, die in Grammatik nutzlos sind"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Terminale, die in Grammatik unbenutzt sind"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Regeln, die in Grammatik nutzlos sind"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d Nicht-Terminal, das in Grammatik nutzlos ist"
+msgstr[1] "%d Nicht-Terminale, die in Grammatik nutzlos sind"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d Regel, die in Grammatik nutzlos ist"
+msgstr[1] "%d Regeln, die in Grammatik nutzlos sind"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "es lassen sich keine Sätze vom Startsymbol %s ableiten"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "herumstreunendes ‚%s‘"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "ein ‚;‘ könnte am Ende von Aktionscode nötig sein"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "zukünftige Versionen von Bison werden das ‚;‘ nicht hinzufügen"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "Benutzung von YYFAIL, was veraltet ist und bald entfernt wird"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "verweist auf: %c%s bei %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "meinte möglicherweise: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", versteckt dabei %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " bei %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+", kann nicht aus Aktion inmitten einer Regel bei $%d heraus zugegriffen "
+"werden"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "Ganzzahl außerhalb des Wertebereichs: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "ungültiger Verweis: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr "Syntaxfehler nach ‚%c‘, erwarte Ganzzahl, Buchstabe, ‚_‘, ‚[‘ oder ‚$‘"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "Symbol nicht in Produktion gefunden vor $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "Symbol nicht in Produktion gefunden: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "irreführender Verweis: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "mehrdeutiger Verweis: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "expliziter Typ angegeben und ungetypter Grammatik"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ für Regelmitte bei $%d von %s hat keinen deklarierten Typ"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ von %s hat keinen deklarierten Typ"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s von %s hat keinen deklarierten Typ"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "überzähliges „,“ als Freiraum betrachtet"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "ungültige Direktive: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "ungültiger Bezeichner: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "ungültiges Zeichen"
+msgstr[1] "ungültige Zeichen"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "unerwarteter Bezeichner im geklammerten Namen: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "Bezeichner erwartet"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ungültiges Zeichen im geklammerten Namen"
+msgstr[1] "ungültige Zeichen im geklammerten Namen"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "leeres Zeichenliteral"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "zusätzliche Zeichen in Zeichenliteral"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "ungültiges Null-Zeichen"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "ungültige Zahl hinter \\-Flucht: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "ungültiges Zeichen hinter \\-Flucht: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "fehlendes %s am Ende der Datei"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "fehlendes %s am Ende der Zeile"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "nicht geschlossene Direktive %s im Skelett"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "zu wenige Argumente für Direktive %s im Skelett"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "zu viele Argumente für Direktive %s im Skelett"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "unzulässiger $-Wert: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX-Yacc verbietet Bindestriche in Symbolnamen: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "zu viele Symbole in Eingabegrammatik (Maximum ist %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s erneute Deklaration für %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s erneute Deklaration für <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "Symbol %s noch einmal definiert"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "Symbol %s noch einmal deklariert"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "definiere Nutzertokennummer von %s erneut"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"Symbol %s wird benutzt, ist aber nicht als Token definiert und hat keine "
+"Regel"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "Symbol %s wird mehr als einmal als literale Zeichenkette benutzt"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "Symbol %s wird mehr als eine literale Zeichenkette gegeben"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "Tokennummer %d erneut deklariert für %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "vorhergehende Deklaration für %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "das Startsymbol %s ist undefiniert"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "das Startsymbol %s ist ein Token"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "erneute Deklaration für voreingestellten markierten %%destructor"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "erneute Deklaration für voreingestellten nicht-markierten %%destructor"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "erneute Deklaration für voreingestellten markierten %%printer"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "erneute Deklaration für voreingestellten nicht-markierten %%printer"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "Entfernen von „%s“ fehlgeschlagen"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "Erstellen einer temporären Datei fehlgeschlagen"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "Speichern der Standardeingabe fehlgeschlagen"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "Speichern der Standardausgabe fehlgeschlagen"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "Öffnen der Datei tmpfile fehlgeschlagen"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+"Umleiten der Standardausgabe von Bison in die temporäre Datei fehlgeschlagen"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+"Umleiten der Standardeingabe von m4 aus der temporären Datei fehlgeschlagen"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "Öffnen einer temporären Datei fehlgeschlagen"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+"Umleiten der Standardausgabe von m4 in eine temporäre Datei fehlgeschlagen"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "untergeordnetes Programm „%s“ unterbrochen"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "untergeordnetes Programm „%s“ nicht gefunden"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+"Umleiten der Standardeingabe von Bison aus der temporären Datei "
+"fehlgeschlagen"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "unzulässiges Argument %s für %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "mehrdeutiges Argument %s für %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Gültige Argumente sind:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u freigegeben (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u zwischengespeichert (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u zwischengespeichert (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u zwischengespeichert (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "Zähler-Histogramm\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "Größe-Histogramm\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "Dichte-Histogramm\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset-Statistiken:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Gesammelte Durchläufe = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "kann Statistik-Datei nicht lesen"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "ungültige Statistik-Datei-Größe\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "kann Statistik-Datei nicht schreiben"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "kann Statistik-Datei nicht zum Schreiben öffnen"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "Schreibfehler"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Unbekannter Systemfehler"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: Option „%s“ ist mehrdeutig; möglich sind:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: Option „--%s“ erlaubt kein Argument\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: Option „%c%s“ erlaubt kein Argument\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: Option „--%s“ erfordert ein Argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: unbekannte Option „--%s“\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: unbekannte Option „%c%s“\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ungültige Option -- „%c“\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: Option erfordert ein Argument -- „%c“\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: Option „-W %s“ ist mehrdeutig\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: Option „-W %s“ erlaubt kein Argument\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: Option „-W %s“ erfordert ein Argument\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "Speicher ausgeschöpft"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "kann Datei nicht schließen"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "Unterprozess %s fehlgeschlagen"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "“"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Ausführungszeiten (Sekunden)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " ZUSAMMEN              :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "Zeit in %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle fehlgeschlagen"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "kann Dateideskriptor %d nicht wieder herstellen: dup2 fehlgeschlagen"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "Unterprozess %s"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "Unterprozess %s erhielt tödliches Signal %d"
+
+#~ msgid "state %d"
+#~ msgstr "Zustand %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "herumstreunendes ‚@‘"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "undefinierte %%define-Variable „%s“ an muscle_percent_define_get_loc "
+#~ "übergeben"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "undefinierte %%define-Variable „%s“ an muscle_percent_define_get_syncline "
+#~ "übergeben"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "undefinierte %%define-Variable „%s“ an muscle_percent_define_flag_if "
+#~ "übergeben"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "undefinierte %%define-Variable „%s“ an muscle_percent_define_check_values "
+#~ "übergeben"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "nutzloses Nicht-Terminal: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Nutzlose Nicht-Terminale"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Nicht genutzte Terminale"
+
+#~ msgid "Useless rules"
+#~ msgstr "Nutzlose Regeln"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d Regel wurde niemals reduziert\n"
+#~ msgstr[1] "%d Regeln wurden niemals reduziert\n"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "POSIX verbietet Deklarationen in der Grammatik"
+
+#~ msgid "invalid $ value"
+#~ msgstr "unzulässiger $-Wert"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "Vorrang für %s und %s widersprechen sich"
+
+#~ msgid "conflicting associativities for %s (%s) and %s (%s)"
+#~ msgstr "Assoziativitäts-Werte für %s (%s) und %s (%s) widersprechen sich"
+
+#~ msgid "and"
+#~ msgstr "und"
+
+#~ msgid "conflicts: "
+#~ msgstr "Konflikte: "
+
+#~ msgid "State %d contains "
+#~ msgstr "Zustand %d enthält "
+
+#~ msgid "too many gotos (max %d)"
+#~ msgstr "zu viele Gotos (max %d)"
+
+#~ msgid "%s is invalid"
+#~ msgstr "%s ist unzulässig"
+
+#~ msgid "too many states (max %d)"
+#~ msgstr "zu viele Zustände (max %d)"
+
+#~ msgid "%s: no grammar file given\n"
+#~ msgstr "%s: keine Grammatik-Datei angegeben\n"
+
+#~ msgid "%s: extra arguments ignored after `%s'\n"
+#~ msgstr "%s: zusätzliche Argumente nach „%s“ werden ignoriert\n"
+
+#~ msgid "two @prec's in a row"
+#~ msgstr "zwei @prec-Anweisungen nacheinander"
+
+#~ msgid "only one %%dprec allowed per rule"
+#~ msgstr "nur ein %%dprec pro Regel erlaubt"
+
+#~ msgid "Entering append_states, state = %d\n"
+#~ msgstr "Betrete append_states, Zustand = %d\n"
+
+#~ msgid "Processing state %d (reached by %s)\n"
+#~ msgstr "Verarbeite Zustand %d (erreicht von %s)\n"
+
+#~ msgid "undefined associativity"
+#~ msgstr "undefinierte Assoziativität"
+
+#~ msgid "Closure: %s\n"
+#~ msgstr "Abschluss: %s\n"
+
+#~ msgid "  (rule %d)\n"
+#~ msgstr "  (Regel %d)\n"
+
+#~ msgid "input"
+#~ msgstr "Eingabe"
+
+#~ msgid "output"
+#~ msgstr "Ausgabe"
+
+#~ msgid "State %d: %d lookaheads\n"
+#~ msgstr "Zustand %d: %d Vorschauen\n"
+
+#~ msgid "   on %d (%s) -> rule %d\n"
+#~ msgstr "   auf %d (%s) -> Regel %d\n"
+
+#~ msgid "Lookaheads: END\n"
+#~ msgstr "Vorschau: ENDE\n"
+
+#~ msgid "relation_transpose: input\n"
+#~ msgstr "relation_transpose: Eingabe\n"
+
+#~ msgid "relation_transpose: output\n"
+#~ msgstr "relation_transpose: Ausgabe\n"
+
+#~ msgid "unescaped newline in constant"
+#~ msgstr "nicht maskiertes Zeilenendezeichen in Konstante"
+
+#~ msgid "octal value outside range 0...255: `\\%o'"
+#~ msgstr "oktaler Zahlenwert außerhalb des Bereichs 0...255: „\\%o“"
+
+#~ msgid "hexadecimal value above 255: `\\x%x'"
+#~ msgstr "hexadezimaler Zahlenwert größer als 255: „\\x%x“"
+
+# Oder soll man den Begriff "Escapezeichen" verwenden?
+#~ msgid "unknown escape sequence: `\\' followed by `%s'"
+#~ msgstr "unbekanntes Escapezeichen: „\\“ gefolgt von „%s“"
+
+#~ msgid "unterminated type name at end of file"
+#~ msgstr "unerwarteter Typname am Ende der Datei"
+
+#~ msgid "unterminated type name"
+#~ msgstr "unerwarteter Typname"
+
+#~ msgid "use \"...\" for multi-character literal tokens"
+#~ msgstr "für Literal mit mehreren Zeichen bitte \"...\" verwenden"
+
+#~ msgid "    $default\treduce using rule %d (%s)\n"
+#~ msgstr "    $default\treduziere mit Regel %d (%s)\n"
+
+#~ msgid "    $default\taccept\n"
+#~ msgstr "    $default\takzeptiere\n"
+
+#~ msgid "Number, Line, Rule"
+#~ msgstr "Nummer, Zeile, Regel"
+
+#~ msgid "   Skipping to next \\n"
+#~ msgstr "   Überspringe Zeichen bis zum nächsten \\n"
+
+#~ msgid "   Skipping to next %c"
+#~ msgstr "   Überspringe Zeichen bis zum nächten %c"
+
+#~ msgid "unterminated string"
+#~ msgstr "unbeendete Zeichenkette"
+
+#~ msgid "unterminated `%{' definition"
+#~ msgstr "unbeendete „%{“-Definition"
+
+#~ msgid "Premature EOF after %s"
+#~ msgstr "Vorzeitiges EOF nach %s"
+
+#~ msgid "`%s' is invalid in %s"
+#~ msgstr "„%s“ ist in %s nicht erlaubt"
+
+#~ msgid "%type declaration has no <typename>"
+#~ msgstr "%type-Deklaration hat keinen <Typ-Namen>"
+
+#~ msgid "invalid %%type declaration due to item: %s"
+#~ msgstr "ungültige %%type-Deklaration wegen: %s"
+
+#~ msgid "invalid text (%s) - number should be after identifier"
+#~ msgstr "unzulässiger Text (%s) - Zahl sollte nach Bezeichner kommen"
+
+#~ msgid "unexpected item: %s"
+#~ msgstr "unerwartetes Symbol: %s"
+
+#~ msgid "unmatched %s"
+#~ msgstr "%s ohne Gegenstück"
+
+#~ msgid "argument of %%expect is not an integer"
+#~ msgstr "Argument von %%expect ist keine ganze Zahl"
+
+#~ msgid "unrecognized item %s, expected an identifier"
+#~ msgstr "unerwartetes Symbol %s, hier wird ein Bezeichner erwartet"
+
+#~ msgid "expected string constant instead of %s"
+#~ msgstr "hier wird eine Zeichenkette erwartet, nicht %s"
+
+#~ msgid "no input grammar"
+#~ msgstr "keine Eingabe-Grammatik"
+
+#~ msgid "unknown character: %s"
+#~ msgstr "unbekanntes Zeichen: %s"
+
+#~ msgid "ill-formed rule: initial symbol not followed by colon"
+#~ msgstr ""
+#~ "falsch geformte Regel: führendes Symbol wird nicht von einem Semikolon "
+#~ "gefolgt"
+
+#~ msgid "grammar starts with vertical bar"
+#~ msgstr "Grammatik fängt mit einem vertikalen Strich („|“) an"
+
+#~ msgid "previous rule lacks an ending `;'"
+#~ msgstr "vorangehende Regel hat kein abschließendes „;“"
+
+#~ msgid "two actions at end of one rule"
+#~ msgstr "Zwei Aktionen am Ende einer Regel"
+
+#~ msgid "    $   \tgo to state %d\n"
+#~ msgstr "    $   \tgehe zu Zustand %d über\n"
diff --git a/po/el.gmo b/po/el.gmo
new file mode 100644
index 0000000..3405823
--- /dev/null
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..50b4d65
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,1203 @@
+# translation of bison-2.3b.po to Greek
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Lefteris Dimitroulakis <edimitro@tee.gr>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-2.4\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2008-11-30 17:57+0300\n"
+"Last-Translator: Lefteris Dimitroulakis <edimitro@tee.gr>\n"
+"Language-Team: Greek <team@lists.gnome.gr>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=( n !=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "προειδοποίηση"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "σφάλμα I/O"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "μοιραίο σφάλμα"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+"    Η σύγκρουση μεταξύ του κανόνα %d και της λεκτικής μονάδας %s επιλύθηκε "
+"ως ολίσθηση"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Η σύγκρουση μεταξύ του κανόνα %d και της λεκτικής μονάδας %s επιλύθηκε "
+"ως ελάττωση"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Η σύγκρουση μεταξύ του κανόνα %d και της λεκτικής μονάδας %s επιλύθηκε "
+"ως σφάλμα"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "συγκρούσεις: %d ολίσθηση/ελάττωση, %d ελάττωση/ελάττωση\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "συγκρούσεις: %d ολίσθηση/ελάττωση\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "συγκρούσεις: %d ελάττωση/ελάττωση\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Κατάσταση %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr έχει εφαρμογή μόνο σε συντακτικούς αναλυτές GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "ανέμενα %d σύγκρουση ολίσθηση/ελάττωση"
+msgstr[1] "ανέμενα %d συγκρούσεις ολίσθηση/ελάττωση"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "ανέμενα %d σύγκρουση ελάττωση/ελάττωση"
+msgstr[1] "ανέμενα %d συγκρούσεις ελάττωση/ελάττωση"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "αδυναμία ανοίγματος του αρχείου «%s»"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "δεν μπορώ να κλείσω το αρχείο"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "άρνηση γραψίματος πάνω στο αρχείο εισόδου %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "αντικρουόμενες έξοδοι στο αρχείο %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Δοκίμασε «%s --help» για περισσότερες πληροφορίες.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Χρήση: %s [ΕΠΛΟΓΕΣ]... ΑΡΧΕΙΟ\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Υποχρεωτικά ορίσματα σε μακρές επιλογές είναι υποχρεωτικά επίσης και στις "
+"κοντές.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Το ίδιο ισχύει και για τα μη υποχρεωτικά ορίσματα.\n"
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Τρόποι λειτουργίας:\n"
+"  -h, --help                 εμφάνιση αυτής εδώ της βοήθειας κι έξοδος\n"
+"  -V, --version              πληροφορίες έκδοσης κι έξοδος\n"
+"      --print-localedir      ο κατάλογος με τα δεδομένα των locale\n"
+"      --print-datadir        ο κατάλογος με σκελετούς και XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings=[ΚΑΤΗΓΟΡΙΑ]  παρουσιάζει τις προειδοποιήσεις που ανήκουν "
+"στη ΚΑΤΗΓΟΡΙΑ\n"
+"\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Αναλυτής:\n"
+"  -L, --language=ΓΛΩΣΣΑ    προσδιορίζει τη γλώσσα προγραμματισμού στην "
+"έξοδο\n"
+"  -S, --skeleton=ΑΡΧΕΙΟ        προσδιορίζει τον προς χρήση skeleton\n"
+"  -t, --debug                ενεργοποίηση της δυνατότητας αποσφαλμάτωσης\n"
+"      --locations            επιτρέπει τον υπολογισμό των θέσεων\n"
+"  -p, --name-prefix=ΠΡΟΘΕΜΑ    βάλε το ΠΡΟΘΕΜΑ μπροστά από τα εξωτερικά "
+"σύμβολα\n"
+"  -l, --no-lines             να μην δημιουργούνται οδηγίες της μορφής "
+"«#line»\n"
+"  -k, --token-table          συμπεριλαμβάνει πίνακα ονομάτων λεκτικών "
+"μονάδων\n"
+"\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Έξοδος:\n"
+"      --defines[=ΑΡΧΕΙΟ]       παράγει επίσης ένα αρχείο επικεφαλίδας\n"
+"  -d               το ίδιο αλλά χωρίς ορισμό ΑΡΧΕΙΟΥ (για το POSIX Yacc)\n"
+"  -r, --report=ΠΡΑΓΜΑΤΑ      παράγει λεπτομέρειες σχετικές με τα αυτόματα\n"
+"      --report-file=ΑΡΧΕΙΟ                   γράψιμο αναφοράς στο ΑΡΧΕΙΟ\n"
+"  -v, --verbose                           το ίδιο με  «--report=state»\n"
+"  -b, --file-prefix=ΠΡΟΘΕΜΑ   καθορίζει ΠΡΟΘΕΜΑ για τα αρχεία εξόδου\n"
+"  -o, --output=ΑΡΧΕΙΟ          έξοδος στο ΑΡΧΕΙΟ\n"
+"  -g, --graph[=ΑΡΧΕΙΟ]         καθορισμός σε VCG της εξόδου του αυτομάτου\n"
+"  -x, --xml[=ΑΡΧΕΙΟ]           αναφορά από το αυτόματο σε μορφή XML\n"
+"                             (η μορφή XML είναι σε πειραματικό στάδιο)\n"
+"\n"
+
+#: src/getargs.c:361
+#, fuzzy
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Κατηγορίες προειδοποίησης περιλαμβάνουν:\n"
+"  `midrule-values'  μη ενεργοποιημένες ή μη χρησιμοποιούμενες τιμές midrule\n"
+"  `yacc'            ασυμβατότητες με POSIX YACC\n"
+"  `all'             όλες οι προειδοποιήσεις\n"
+"  `no-CATEGORY'     απενεργοποίηση προειδοποιήσεων για την CATEGORY\n"
+"  `none'            απενεργοποίηση όλων των προειδοποιήσεων\n"
+"  `error'           θεώρησε όλες τις προειδοποιήσεις ως σφάλματα\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"ΠΡΑΓΜΑΤΑ είναι μια λίστα λέξεων που χωρίζονται από κόμματα και "
+"περιλαμβάνουν:\n"
+"  `state'        περιγράφει καταστάσεις\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    ρητή συσχέτιση ήδη διαβασμένων λεκτικών μονάδων με items\n"
+"  `solved'       περιγράφει επίλυση συγκρούσεων με ολίσθηση/ελάττωση\n"
+"  `all'          περιλαμβάνει όλες τις παραπάνω πληροφορίες\n"
+"  `none'         απενεργοποίηση αναφοράς\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Αναφορά σφαλμάτων σε <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Γράφτηκε από τους Robert Corbett και Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "πολλαπλές δηλώσεις σκελετού είναι μη έγκυρες"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "μη έγκυρη γλώσσα `%s'"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "πολλαπλές δηλώσεις γλώσσας είναι μη έγκυρες"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "λείπει τελεστέος μετά από «%s»"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "επί πλέον τελεστέος «%s»"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "κενό"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Γραμματική"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "υπερχείλιση αριθμού γραμμών"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "υπερχείλιση αριθμού στηλών"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "ο κανόνας είναι άχρηστος στον αναλυτή λόγω συγκρούσεων"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "το σύμβολο %s ανακαθορίστηκε"
+
+#: src/muscle-tab.c:453
+#, fuzzy
+msgid "previous definition"
+msgstr "προηγούμενη δήλωση"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "μη χρησιμοποιούμενη τιμή: $%d"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "το όνομα λείπει στη δήλωση παραμέτρου"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr "ο τύπος %d είναι %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "ολίσθηση, και μετάβαση στη κατάσταση %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "πήγαινε στην κατάσταση %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "σφάλμα (μη προσεταιριστικό)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "ελάττωση με χρήση του κανόνα %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "αποδοχή"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Κατάσταση %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Τερματικά σύμβολα, με κανόνες όπου εμφανίζονται"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Μη τερματικά σύμβολα, με κανόνες όπου εμφανίζονται"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr "στα αριστερά:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr "στα δεξιά:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Κανόνες άχρηστοι στον αναλυτή λόγω συγκρούσεων"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "πολλαπλές δηλώσεις του %s"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+"σύγκρουση παραγόμενου τύπου στη συνάρτηση συγχώνευσης «%s»: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "προηγούμενη δήλωση"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "κανόνας δοσμένος για %s, που είναι λεκτική μονάδα"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "σύγκρουση τύπων στην προεπιλεγμένη ενέργεια: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "κενός κανόνας για μη τερματικό σύμβολο με τύπο, και ουδεμία ενέργεια"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "μη χρησιμοποιούμενη τιμή: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "μη καθορισμένη τιμή: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "μόνο ένα %s ανά κανόνα έχει επιτραπεί"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s επηρεάζει μόνο αναλυτές GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s πρέπει να ακολουθείται από θετικό αριθμό"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "κανόνας πολύ επιμήκης"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "γραμματική εισόδου χωρίς κανόνες"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "άχρηστος κανόνας στη γραμματική"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "μη τερματικό σύμβολο άχρηστο στη γραμματική: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Μη τερματικά σύμβολα άχρηστα στη γραμματική"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Τερματικά σύμβολα μη χρησιμοποιούμενα στη γραμματική"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Άχρηστοι κανόνες στη γραμματική"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "μη τερματικό σύμβολο %d άχρηστο στη γραμματική"
+msgstr[1] "μη τερματικά σύμβολα %d άχρηστα στη γραμματική"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "ο κανόνας %d είναι άχρηστος στη γραμματική"
+msgstr[1] "οι κανόνες %d είναι άχρηστοι στη γραμματική"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "το αρχικό σύμβολο %s δεν παράγει καμιά πρόταση"
+
+#: src/scan-code.l:188
+#, fuzzy, c-format
+msgid "stray '%s'"
+msgstr "μοναχικό «$»"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "ακέραιος εκτός ορίων: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "μη έγκυρη οδηγία: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "ασαφές όρισμα %s για %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "ρητή δήλωση τύπου δόθηκε σε γραμματική χωρίς τύπους"
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ για την midrule στο $%d του «%s» δεν έχει δηλωμένο τύπο"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ του «%s» δεν έχει δηλωμένο τύπο"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d του «%s» δεν έχει δηλωμένο τύπο"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "μοναχικό « , » θεωρήθηκε ως λευκό διάστημα"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "μη έγκυρη οδηγία: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "μη έγκυρη οδηγία: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "μη έγκυρος χαρακτήρας: %s"
+msgstr[1] "μη έγκυρος χαρακτήρας: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "μη έγκυρος χαρακτήρας: %s"
+msgstr[1] "μη έγκυρος χαρακτήρας: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "μη έγκυρος μηδενικός χαρακτήρας"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "μη έγκυρος μηδενικός χαρακτήρας: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "μη έγκυρος χαρακτήρας: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "στο τέλος του αρχείου λείπει «%s»"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "στο τέλος της γραμμής λείπει «%s»"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "τιμή $ μη έγκυρη: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "πάρα πολλά σύμβολα στη γραμματική εισόδου (το όριο είναι %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "δήλωση ξανά του %s για %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "δήλωση ξανά του %s για <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "το σύμβολο %s ανακαθορίστηκε"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "το σύμβολο %s ξαναδηλώθηκε"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "ορισμός ξανά του αριθμού λεκτικής μονάδας του %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"το σύμβολο %s χρησιμοποιείται, αλλά δεν καθορίζεται ως λεκτική μονάδα και "
+"δεν διαθέτει κανόνες"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr ""
+"το σύμβολο «%s» χρησιμοποιήθηκε περισσότερες από μια φορές ως κυριολεκτικό "
+"αλφαριθμητικό"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr " το σύμβολο «%s» έδωσε περισσότερα του ενός κυριολεκτικά αλφαριθμητικά"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "δήλωση ξανά του %s για %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "προηγούμενη δήλωση"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "το σύμβολο εκκίνησης %s δεν είναι καθορισμένο"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "το σύμβολο εκκίνησης  %s είναι λεκτική μονάδα"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "δήλωση ξανά του προεπιλεγμένου καταστροφέα %%"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "δήλωση ξανά του προεπιλεγμένου καταστροφέα %%"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "δήλωση ξανά του προεπιλεγμένου εκτυπωτή %%"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "δήλωση ξανά του προεπιλεγμένου εκτυπωτή %%"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "το υποπρόγραμμα «%s» δεν ήταν δυνατό να κληθεί"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "το υποπρόγραμμα «%s» δεν ήταν δυνατό να κληθεί"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "μη έγκυρο όρισμα %s για %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "ασαφές όρισμα %s για %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Έγκυρα ορίσματα είναι:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u ελευθερώθηκαν (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u στη βοηθητική μνήμη (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u στη βοηθητική μνήμη (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u στη βοηθητική μνήμη (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "ιστόγραμμα μετρήσεων\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "ιστόγραμμα μεγεθών\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "ιστόγραμμα πυκνότητας\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Στατιστικές των Bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Συσσωρευμένα τρεξίματα = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Αδυναμία ανάγνωσης αρχείου στατιστικών"
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Λάθος μέγεθος αρχείου με στατιστικά.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Δεν μπόρεσα να γράψω το αρχείο με τα στατιστικά."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Δεν μπόρεσα να ανοίξω για γράψιμο το αρχείο με τα στατιστικά."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "μοιραίο σφάλμα"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Άγνωστο σφάλμα συστήματος"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: η επιλογή «%s» είναι ασαφής\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: η επιλογή «--%s» δεν επιτρέπει όρισμα\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: η επιλογή «%c%s» δεν επιτρέπει όρισμα\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: η επιλογή «%s» απαιτεί όρισμα\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: άγνωστη επιλογή «--%s»\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: άγνωστη επιλογή «%c%s»\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: μη έγκυρη επιλογή -- %c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: η επιλογή απαιτεί όρισμα -- %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: η επιλογή «-W %s» είναι ασαφής\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: η επιλογή «-W %s» δεν επιτρέπει όρισμα\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: η επιλογή «%s» απαιτεί όρισμα\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "εξαντλημένη μνήμη"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "δεν μπορώ να κλείσω το αρχείο"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "»"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Χρόνος εκτέλεσης (δευτερόλεπτα)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr "ΣΥΝΟΛΟ                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "χρόνος σε %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "κατάσταση %d"
+
+#, fuzzy
+#~ msgid "stray '@'"
+#~ msgstr "μοναχικό «@»"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Δημιουργία αναλυτών LALR(1) και GLR.\n"
+#~ "\n"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "μη έγκυρη ακολουθία διαφυγής: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "άγνωστη ακολουθία διαφυγής: %s"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "οι λεκτικές μονάδες %s και %s ανάθεσαν τον αριθμό %d και οι δύο"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: παράνομη επιλογή -- %c\n"
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/eo.gmo b/po/eo.gmo
new file mode 100644
index 0000000..742d9f7
--- /dev/null
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000..88fa298
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,1203 @@
+# Esperanto translation
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Felipe Castro <fefcas@gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-09 15:40-0300\n"
+"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "averto"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "eraro"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "neriparebla eraro"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Konflikto inter regulo %d kaj ĵetono %s estis solvata kiel ŝovo"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Konflikto inter regulo %d kaj ĵetono %s estis solvata kiel redukto"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Konflikto inter regulo %d kaj ĵetono %s estis solvata kiel eraro"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konfliktoj: %d ŝovo/redukto, %d redukto/redukto\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konfliktoj: %d ŝovo/redukto\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konfliktoj: %d redukto/redukto\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Stato %d"
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr aplikeblas nur al analiziloj GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "estis atendata %d konflikto ŝovo/redukto"
+msgstr[1] "estis atendataj %d konfliktoj ŝovo/redukto"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "estis atendata %d konflikto redukto/redukto"
+msgstr[1] "estis atendataj %d konfliktoj redukto/redukto"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: ne eblas malfermi"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "enig/eliga eraro"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "ne eblas fermi dosieron"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "ni rifuzas anstataŭigi la enigan dosieron %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "konfliktantaj eligoj al dosiero %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Provu '%s --help' por pli da informo.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Uzado: %s [MODIFILO]... DOSIERO\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Generas determinecan analizilon LR aŭ ĝenerala LR (GLR) aplikante\n"
+"analiz-tabelojn LALR(1), IELR(1), aŭ kanonan LR(1).  Subteno al IELR(1)\n"
+"kaj kanona LR(1) estas eksperimenta.\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Nepraj argumentoj por longaj modifiloj ankaŭ nepras por la mallongaj.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "La samo estas vero por malnepraj argumentoj.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Operaciaj reĝimoj:\n"
+"  -h, --help                 montrigi tiun ĉi helpon kaj eliri\n"
+"  -V, --version              eligi versi-informon kaj eliri\n"
+"      --print-localedir      eligi dosierujon enhavantan lokaĵar-dependan "
+"datumaron\n"
+"      --print-datadir        eligi dosieron enhavantan skeletojn kaj XSLT\n"
+"  -y, --yacc                 ŝajnigi POSIX Yacc\n"
+"  -W, --warnings[=KATEGORIO] raporti la avertojn apartenantajn al KATEGORIO\n"
+"  -f, --feature[=APARTAĴO]   aktivigi diversajn apartaĵojn\n"
+"\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Analizilo:\n"
+"  -L, --language=LINGVO            indiki la eligan program-lingvon\n"
+"  -S, --skeleton=DOSIERO           indiki la skeleton uzotan\n"
+"  -t, --debug                      ekipigi la analizilon por rafinado\n"
+"      --locations                  eligi subtenon al lokigojn\n"
+"  -D, --define=NOMO[=VALORO]       simile al '%define NOMO \"VALORO\"'\n"
+"  -F, --force-define=NOMO[=VALORO] anstataŭigi '%define NOMO \"VALORO\"'\n"
+"  -p, --name-prefix=PREFIKSO       antaŭmeti PREFIKSOn al la eksteraj "
+"simboloj\n"
+"                                   anstataŭiginde per '-Dapi."
+"prefix=PREFIKSO'\n"
+"  -l, --no-lines                   ne generi instrukciojn '#line'\n"
+"  -k, --token-table                inkluzivigi tabelon de ĵetono-nomoj\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Eligo:\n"
+"      --defines[=DOSIERO]    aldone produkti kap-dosieron\n"
+"  -d                         simile sed ne povas indiki DOSIEROn (por POSIX "
+"Yacc)\n"
+"  -r, --report=AFEROJ        aldone produkti detalojn pri la roboto\n"
+"      --report-file=DOSIERO  skribi raporton al DOSIERO\n"
+"  -v, --verbose              same ol `--report=state'\n"
+"  -b, --file-prefix=PREFIKSO indiki PREFISOn por eligaj dosieroj\n"
+"  -o, --output=DOSIERO       konduki eligon al DOSIERO\n"
+"  -g, --graph[=DOSIERO]      aldone eligi grafeon pri la roboto\n"
+"  -x, --xml[=DOSIERO]        aldone eligi raporton XML pri la roboto\n"
+"                             (la XML-skemo estas eksperimenta)\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Avertaj kategorioj inkluzivas:\n"
+"  `midrule-values'  nedifinitaj aŭ neuzitaj mezregulaj valoroj\n"
+"  `yacc'            malkongruoj kun POSIX Yacc\n"
+"  `conflicts-sr'    konfliktoj Ŝ/R (eblegitaj apriore)\n"
+"  `conflicts-rr'    konfliktoj R/R (ebligitaj apriore)\n"
+"  `deprecated'      malrekomendindaj aranĝoj\n"
+"  `other'           ĉiuj aliaj avertoj (ebligitaj apriore)\n"
+"  `all'             ĉiuj avertoj\n"
+"  `no-KATEGORIO'    malebligi avertojn en KATEGORIO\n"
+"  `none'            malebligi ĉiujn avertojn\n"
+"  `error'           trakti avertojn kiel erarojn\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"AFEROJ estas listo de kom-apartitaj vortoj, kiuj povas inkluzivi:\n"
+"  `state'        priskribi la statojn\n"
+"  `itemset'      kompletigi la kernajn elementarojn per iliaj funkcioj\n"
+"  `lookahead'    malimplicite asociigi ĵetonojn 'lookahead' al elementoj\n"
+"  `solved'       priskribi solvadon de konfliktoj ŝovo/redukto\n"
+"  `all'          inkluzivigi la tutan informaron supre\n"
+"  `none'         malebligi la raporton\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"APARTAĴO estas listo da kom-apartitaj vortoj, kiuj povas inkluzivigi:\n"
+"  `caret'        montri erarojn per tajp-montriloj\n"
+"  `all'          ĉio el supre\n"
+"  `none'         malebligi ĉion el supre\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Raportu misojn al <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "%s hejmpaĝo: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"Ĝenerala helpo por uzi programaron GNU: <http://www.gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr "Raportu mistradukojn al <http://translationproject.org/team/>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Por la tuta dokumentaro, lanĉu: info bison.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU-a Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Verkita de Robert Corbett kaj Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Kopirajto (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Tio ĉi estas libera programaro; vidu la kodumaĵon por kopi-kondiĉoj.  "
+"Ekzistas NENIU\n"
+"garantio; eĉ ne por MERKATIGO aŭ TAŬGO POR PRIVATA CELO.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "multoblaj deklaroj de skeleto ne estas valide"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: malvalida lingvo"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "multoblaj deklaroj de lingvo ne estas valide"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: mankas argumento"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "kroma argumento %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "malplena"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramatiko"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Generita de %s.\n"
+"// Raportu misojn al <%s>.\n"
+"// Hejmpaĝo: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "troa lini-numero"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "troa kolumn-numero"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "regulo neutila en analizilo pro konfliktoj"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "'%%define'-variablo %s estis redifinata"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "antaŭa difino"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: nedifinita '%%define'-variablo %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "malvalida valoro por bulea '%%define'-variablo %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "malvalida valoro por '%%define'-variablo %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "akceptita valoro: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "mankas identigilon en deklaro de parametro"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " tipo %d estas %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "ŝovi, kaj iri al stato %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "iri al stato %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "eraro (ne-asociiga)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "redukti uzante regulon %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "akcepti"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "Stato %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminaloj, kun reguloj kie ili aperas"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Neterminaloj, kun reguloj kie ili aperas"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " maldekstre:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " dekstre:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Reguloj neutilaj en analizilo pro konfliktoj"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "multoblaj deklaroj %s"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "kolizio de rezulto-tipo je la kunmiksa funkcio %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "antaŭa deklaro"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "duobligita simbol-nomo por %s estas preteratentita"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "regulo celanta %s, kio estas ĵetono"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "kolizio de tipo je la apriora ago: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "malplena regulo por tipigita neterminalo, kaj neniu ago"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "neuzita valoro: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "nedifinita valoro"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "ĵetono por %%prec ne estas difinita: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "nur po unu %s permesate por regulo"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s influas nur analizilojn GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s devas estis sekvata de pozitiva numero"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "regulo tro longas"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "neniu regulo en eniga gramatiko"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "regulo neutila en gramatiko"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "neterminalo neutila en gramatiko: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Neterminaloj neutilaj en gramatiko"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Terminaloj neuzitaj en gramatiko"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Reguloj neutilaj en gramatiko"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d neterminalo neutila en gramatiko"
+msgstr[1] "%d neterminaloj neutilaj en gramatiko"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d regulo neutila en gramatiko"
+msgstr[1] "%d reguloj neutilaj en gramatiko"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "ekiga simbolo %s ne derivas iun ajn frazon"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "perdita '%s'"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "';' povus esti neceza ĉe la fino de ago-kodo"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "estontaj versioj de Bison ne aldonos la ';'"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "uzo de YYFAIL, kio estas malrekomendinda kaj estos forigata"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "referencas al: %c%s ĉe %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "eble signifis: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", kaŝanta %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " ĉe %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", ne povas esti alirata el mez-regula ago ĉe $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "entjero for de limo: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "malvalida referenco: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"sintaksa eraro post '%c', estas atendata entjero, litero, '_', '[' aŭ '$'"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "simbolo ne trovita en produktado antaŭ $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "simbolo ne trovita en produktado: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "trompiga referenco: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "plursenca referenco: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "malimplicita tipo liverita en netipigita gramatiko"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ por la mezregulo ĉe $%d de %s havas neniun deklaritan tipon "
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ de %s havas neniun deklaritan tipon"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s de %s havas neniun deklaritan tipon"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "perdita ',' traktita kiel blank-spacon"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "malvalida instrukcio: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "malvalida identigilo: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "malvalida signo"
+msgstr[1] "malvalidaj signoj"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "neatendata identigilo en rekt-krampigita nomo: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "identigilo estas atendata"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "malvalida signo en rekt-krampigita nomo"
+msgstr[1] "malvalidaj signoj en rekt-krampigita nomo"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "malplena signo-litero"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "kromaj signoj en signo-litero"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "malvalida nul-signo"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "malvalida numero post \\-eskapo: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "malvalida signo post \\-eskapo: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "mankas %s ĉe la dosierfino"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "mankas %s ĉe la linifino"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "nefermita instrukcio %s en skeleto"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "tro malmultaj argumentoj por instrukcio %s en skeleto"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "tro multaj argumentoj por instrukcio %s en skeleto"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "malvalida valoro $: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX Yacc malpermesas strekojn en simbol-nomoj: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "tro multaj simbolojn en eniga gramatiko (limo estas %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "redeklaro de %s por %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "redeklaro de %s por <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "simbolo %s estas redifinita"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "simbolo %s estas redeklarita"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redifinado de uzant-ĵetona nombro da %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"simbolo %s estas uzata, sed ne estas difinita kiel ĵetonon kaj havas neniun "
+"regulon"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "simbolo %s estas uzata pli ol unufoje kiel literan ĉenon"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "al la simbolo %s estis donata pli ol unu litera ĉeno"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "redeklaro de uzant-ĵetono numero %d por %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "antaŭa deklaro por %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "la ekiga simbolo %s estas nedifinita"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "la ekiga simbolo %s estas ĵetono"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "redeklaro por apriore markita '%%destructor'"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "redeklaro por apriore senmarka '%%destructor'"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "redeklaro por apriore markita '%%printer'"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "redeklaro por apriore senmarka '%%printer'"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "forigo de '%s' fiaskis"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "kreado de provizora dosiero fiaskis"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "konservado de norm-enigo fiaskis"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "konservado de norm-eligo fiaskis"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "malfermo de tmpfile fiaskis"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr "redirektado de la norm-eligo de bison al la provizora dosiero fiaskis "
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr "redirektado de la norm-enigo de m4 de la provizora dosiero fiaskis"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "malfermo de provizora dosiero fiaskis"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr "redirektado de la norm-eligo de m4 al provizora dosiero fiaskis"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "la helpa programo '%s' ĉesis"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "la helpa programo '%s' ne estis trovata"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr "redirektado de la norm-enigo de bison al provizora dosiero fiaskis"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "malvalida argumento %s por %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "plursenca argumento %s por %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Validaj argumentoj estas:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u liberigitaj (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u kaŝmemorigitaj (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u kaŝmemorigitaj (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u kaŝmemorigitaj (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "histogramo pri kalkulo-protokolado\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "histogramo pri grandeco-protokolado\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "histogramo pri denso\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistikoj bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Akumulitaj ruloj = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "ne eblas legi statistikan dosieron"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "malĝusta grando de statistika dosiero\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "Ne eblas skribi statistikan dosieron"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "ne eblas malfermi statistikan dosieron por skribado"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "skriba eraro"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Nekonata sistem-eraro"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: modifilo '%s' estas plursenca; eblecoj:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: modifilo '--%s' ne permesas argumenton\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: modifilo '%c%s' ne permesas argumenton\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: modifilo '--%s' postulas argumenton\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: nerekonita modifilo '--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: nerekonita modifilo '%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: malvalida modifilo -- '%c'\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: la modifilo postulas argumenton -- '%c'\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: modifilo '-W %s' estas plursenca\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: modifilo '-W %s' ne permesas argumenton\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: modifilo '-W %s' postulas argumenton\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoro estas plenigita"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "ne eblas krei dukton"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s subprocezo fiaskis"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "‘"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "’"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Tempoj de plenumado (sekundoj)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTALO                :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "tempo en %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle fiaskis"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ne eblas restarigi fd %d: dup2 fiaskis"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "subprocezo %s"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "subprocezo %s ricevis neripareblan signalon %d"
+
+#~ msgid "state %d"
+#~ msgstr "stato %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "perdita '@'"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "nedifinita '%%define'-variablo '%s' estis pasata al "
+#~ "muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "nedifinita '%%define'-variablo '%s' estis pasata al "
+#~ "muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "nedifinita '%%define'-variablo '%s' estis pasata al "
+#~ "muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "nedifinita '%%define'-variablo '%s' estis pasata al "
+#~ "muscle_percent_define_check_values"
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..8916f1d
--- /dev/null
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..7336ce0
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,1550 @@
+# Mensajes en español para GNU Bison.
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>, 1998.
+#
+# Corregido por:
+#
+# cll - Carlos Linares López        clinares@acm.org
+#                                   clinares@delicias.dia.fi.upm.es
+#
+# Notas:
+#
+# 1. Nicolás, en algunas ocasiones notarás que algunos `msgstr' no están
+# indentados como los `msgid'. No te preocupes, eso es porque yo utilizo
+# el `po-mode' de Emacs, ... Él es el responsable de esas indentaciones
+# del `msgstr' :)
+#
+# 2. Todos los comentarios que contengan "Duda:" debieran revisarse.
+#
+# --------------------------------------------------------------------
+# En mi opinión has hecho un excelente trabajo y te animo a que sigas
+# manteniendo esta traducción y a que lo intentes con otras.
+#
+# (¡te lo dice el tío que ha traducido el paquete más grande: 1406
+# mensajes en el clisp!)
+#
+# 						      Carlos Linares
+# --------------------------------------------------------------------
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison 2.2\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2006-06-05 13:51+0200\n"
+"Last-Translator: Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "aviso"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "Error de E/S"
+
+# Duda: desconozco cuál será el convenio en la lista de correo a
+# propósito de "fatal". Por favor, comprueba que "error grave" es
+# preferido por todos los miembros a "error fatal" - cll
+# veremos que dice la mayoría, como hay otros 2 revisores
+# La verdad es que a mi lo de error fatal me suena fatal
+# ngp
+#
+#: src/complain.c:208 src/complain.c:215
+#, fuzzy
+msgid "fatal error"
+msgstr "error grave: "
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+"    El conflicto entre la regla %d y el terminal %s se resuelve como "
+"desplazamiento."
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    El conflicto entre la regla %d y el terminal %s se resuelve como "
+"reducción."
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    El conflicto entre la regla %d y el terminal %s se resuelve como un "
+"error."
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflictos: %d desplazamiento/reducción, %d reducción/reducción\n"
+
+# Date cuenta de que `%d' puede ser cualquier número decimal. Podría
+# ocurrir, por lo tanto, que tu mensaje en ejecución se vea luego como:
+#
+# 23845789243789 desplazamiento/reducción
+#
+# (¡estoy exagerando!, por supuesto :)
+#
+# Te sugiero por lo tanto que añadas el caso (s) tal y como se hace en
+# español habitualmente.
+# ok
+# ngp
+#
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflictos: %d desplazamiento(s)/reducción(ones)\n"
+
+# Date cuenta de que `%d' puede ser cualquier número decimal. Podría
+# ocurrir, por lo tanto, que tu mensaje en ejecución se vea luego como:
+#
+# 23845789243789 reducción/reducción
+#
+# (¡estoy exagerando!, por supuesto :)
+#
+# Te sugiero por lo tanto que añadas el caso (s) tal y como se hace en
+# español habitualmente.
+#
+# ok
+# ngp
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflictos: %d reducción(ones)/reducción(ones)\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Estado %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr afecta sólo a los analizadores GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "esperado %d conflicto desplazamiento/reducción"
+msgstr[1] "esperados %d conflictos desplazamiento/reducción"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "esperado %d conflicto reducción/reducción"
+msgstr[1] "esperados %d conflictos reducción/reducción"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "no se puede abrir el fichero `%s'"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "no se puede cerrar el fichero"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "salidas en conflicto al fichero %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pruebe `%s --help' para más información.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Utilización: %s [OPCIÓN]... FICHERO\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"Modos de operación:\n"
+"  -h, --help                    muestra esta ayuda y termina\n"
+"  -V, --version                 informa de la versión y termina\n"
+"      --print-localedir         informa del directorio que contiene "
+"información \n"
+"                                dependiente de la configuración local\n"
+"  -y, --yacc                    emula POSIX yacc\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Analizador:\n"
+"  -S, --skeleton=FICHERO     especifica el skeleton a utilizar\n"
+"  -t, --debug                instrumenta al analizador para depuración\n"
+"      --locations            abilita la computación de localizaciones\n"
+"  -p, --name-prefix=PREFIJO  preañade PREFIJO a los símbolos externos\n"
+"  -l, --no-lines             no genera la directiva `#line'\n"
+"  -n, --no-parser            solamente genera las tablas\n"
+" --k, --token-table          incluye una tabla de nombres de terminales\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Salida:\n"
+"  -d, --defines              también produce un fichero de cabecera\n"
+"  -r, --report=THINGS        también produce detalles del automaton\n"
+"  -v, --verbose              también produce una explicación del automaton\n"
+"  -b, --file-prefix=PREFIJO  especifia el PREFIJO para los ficheros de "
+"salida\n"
+"  -o, --output=FICHERO       almacena la salida en FICHERO\n"
+"  -g, --graph                también produce una descripción en VCG del "
+"automaton\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+#, fuzzy
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"THINGS es una lista de palabras separadas por comas que puede incluir:\n"
+"  `state'        describe los estados\n"
+"  `itemset'      completa los conjuntos de ítems núcleo con sus cierres\n"
+"  `lookahead'    asocia explícitamente lookaheads a los ítems\n"
+"  `solved'       describe la resolución de los conflictos desplazamiento/"
+"reducción\n"
+"  `all'          incluye toda la información anterior\n"
+"  `none'         disable the report\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Informe de los errores a <bug-bison@gnu.org>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Escrito por Robert Corbett y Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Esto es software libre; mire el fuente para las condiciones de copia. No "
+"hay\n"
+"NINGUNA garantía; ni siquiera para COMERCIALIZACIÓN o ADAPTACIÓN PARA UN\n"
+"USO PARTICULAR\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "múltiples declaraciones de %s"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "valor no válido: %s"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "múltiples declaraciones de %s"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "falta un operando después de `%s'"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "operando extra `%s'"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "vacío"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramática"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "desbordamiento del número de línea"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "desbordamiento del número de columna"
+
+#: src/main.c:146
+#, fuzzy
+msgid "rule useless in parser due to conflicts"
+msgstr "la regla nunca se redujo debido a los conflictos"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "redefinido el símbolo %s"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr ""
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "valor no válido: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "falta el identificador el la declaración del parámetro"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " el tipo %d es %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "desplazar e ir al estado %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "ir al estado %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "error (no asociativo)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduce usando la regla %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "aceptar"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Estado %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminales con las reglas donde aparecen"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "No terminales con las reglas donde aparecen"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " en la izquierda:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " en la derecha:"
+
+#: src/print.c:510
+#, fuzzy
+msgid "Rules useless in parser due to conflicts"
+msgstr "la regla nunca se redujo debido a los conflictos"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "múltiples declaraciones de %s"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "tipo resultado incompatible en la función combinada %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+#, fuzzy
+msgid "previous declaration"
+msgstr "primera declaración"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "se ha dado una regla para %s, que es un terminal"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "incompatibilidad de tipos en la acción por defecto: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "regla vacía para un no terminal con tipo y no hay ninguna acción"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "valor no usado: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "valor no fijado: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "sólo se permite un %s por regla"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s afecta sólo a los analizadores GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s debe estar seguido por un número positivo"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "la regla es demasiado larga"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "no hay reglas en la gramática de entrada"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "no hay reglas en la gramática de entrada"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "No terminales con las reglas donde aparecen"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "no hay reglas en la gramática de entrada"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "no hay reglas en la gramática de entrada"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "no hay reglas en la gramática de entrada"
+msgstr[1] "no hay reglas en la gramática de entrada"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "El símbolo de inicio (axioma) %s no deriva ninguna sentencia"
+
+#: src/scan-code.l:188
+#, fuzzy, c-format
+msgid "stray '%s'"
+msgstr "`$ extraviado"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "entero fuera de rango: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "directiva no válida: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, fuzzy, c-format
+msgid "misleading reference: %s"
+msgstr "redefinición de la precedencia de %s"
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "argumento %s ambigüo para %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$%d de `%s' no tiene tipo declarado"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ de `%s' no tiene tipo declarado"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d de `%s' no tiene tipo declarado"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "`,' perdido se trato como un espacio en blanco"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "directiva no válida: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "directiva no válida: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "carácter no válido: %s"
+msgstr[1] "carácter no válido: %s"
+
+# En unas ocasiones, has traducido `unexpected' como `no esperado' y, en
+# otras, como `inesperado'. Cualquiera es correcta, por supuesto y, en
+# este caso, la segunda me parece más apropiada - cll
+# ok - ngp
+#: src/scan-gram.l:354
+#, fuzzy, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "ítem inesperado: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "carácter no válido: %s"
+msgstr[1] "carácter no válido: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "carácter nulo no válido"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "carácter nulo no válido: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "carácter no válido: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "falta cadena `%s' al final del fichero"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "falta cadena `%s' al final del fichero"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "valor $ no válido: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "demasiados símbolos en la gramática de entrada (el límite es %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s redeclaración de %s"
+
+#: src/symtab.c:164
+#, fuzzy, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s redeclaración de %s"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "redefinido el símbolo %s"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "redefinido el símbolo %s"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redefinición del número del terminal del usuario de %s"
+
+# `token' se debe traducir como `literal' - cll
+# en terminología de compiladores token es más un terminal - ngp
+#
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"se usa el símbolo %s, pero no está definido como terminal y no tiene reglas"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "símbolo `%s' utilizado más de una vez como cadena literal"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "al símbolo `%s' se le ha dado más de una cadena literal"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "redeclaración del tipo de %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "redeclaración del tipo de %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "el símbolo de inicio (axioma) %s no está definido"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "el símbolo de inicio (axioma) %s es un terminal"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "falló el programa subsidiario `%s'"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "no se encontró el programa subsidiario `%s'"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumento no válido %s para %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumento %s ambigüo para %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Los argumentos válidos son:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u liberados (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u en la caché (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u en la caché (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u en la caché (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "histograma del registro de conteo\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "histograma del registro de tamaño\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "histograma de densidad\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr "Estadísticas de bitset\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Ejecuciones acumuladas = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "No pude leer fichero de estadísticas"
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Fichero de estadística no válido.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "No pude escribir el fichero de estadísticas."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "No pude abrir el fichero de estadísticas para escritura"
+
+# Duda: desconozco cuál será el convenio en la lista de correo a
+# propósito de "fatal". Por favor, comprueba que "error grave" es
+# preferido por todos los miembros a "error fatal" - cll
+# veremos que dice la mayoría, como hay otros 2 revisores
+# La verdad es que a mi lo de error fatal me suena fatal
+# ngp
+#
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "error grave: "
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Error del sistema desconocido"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: la opción `%s' es ambigua\n"
+
+# Pongo esto como en otros .po. sv
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: la opción `--%s' no admite ningún argumento\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: la opción `%c%s' no admite ningún argumento\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: la opción `%s' requiere un argumento\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: opción `--%s' no reconocida\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: opción `%c%s' no reconocida\n"
+
+# ¡Muy bien traducido! En el grupo de traducción ha habido auténticas
+# batallas con el tema "invalid - inválido/a" :) - cll
+# Porque Enrique decía que le recordaba a disminuidos físicos.
+# Francamente, no creo que haya que andar con estas "fobias".
+# Pongo inválida. sv
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opción -- %c no válida\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: la opción -- %c requiere un argumento\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: la opción `-W %s' es ambigua\n"
+
+# Pongo esto como en otros .po. sv
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: la opción `-W %s' no admite ningún argumento\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: la opción `%s' requiere un argumento\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoria agotada"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "no se puede cerrar el fichero"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Tiempos de ejecución (segundo)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTAL                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "tiempo en %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "estado %d"
+
+#, fuzzy
+#~ msgid "stray '@'"
+#~ msgstr "`@ extraviado"
+
+#~ msgid "warning: "
+#~ msgstr "aviso: "
+
+#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
+#~ msgstr "GNU bison genera analizadores para gramáticas LALR(1).\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Si una opción larga muestra un argumento como obligatorio, entonces es "
+#~ "obligatorio\n"
+#~ "para la opción corta equivalente también. De igual forma para los "
+#~ "argumentos opcionales.\n"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Reglas nunca reducidas"
+
+#~ msgid "useless rule"
+#~ msgstr "regla sin uso"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "No terminal sin uso: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "No terminales sin uso"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Terminales que no se usan"
+
+#~ msgid "Useless rules"
+#~ msgstr "Reglas sin uso"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d regla que nunca se ha reducido\n"
+#~ msgstr[1] "%d reglas que nunca se han reducido\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d no terminal sin uso"
+#~ msgstr[1] "%d no terminales sin uso"
+
+#~ msgid " and "
+#~ msgstr " y "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d regla sin uso"
+#~ msgstr[1] "%d reglas sin uso"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "secuencia de escape no válida: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "secuencia de escape no reconocida: %s"
+
+#~ msgid "missing `{' in %s"
+#~ msgstr "falta `{' en %s"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "los terminales %s y %s tienen asignados ambos el número %d"
+
+# ¿Qué encuentras de malo en traducir `illegal' como `ilegal'? Date
+# cuenta de que el mensaje "opción no válida" parece ambigua y hará
+# pensar al usuario de que tal vez la ha usado incorrectamente, sin
+# reparar, por lo tanto, en que la opción misma es ilegal. Esto es, ¡¡no
+# existe!! (porque imagino que es en este sentido como se ha programado)
+# - cll
+# Sobre esto hubo una discusión en la lista hace tiempo,
+# quizás ilegal queda un poco fuerte, alguien decía que parecía que
+# ibas a ir a la carcel por usar la opción.
+# ngp
+#
+# Sí, era Enrique a quien no le gustaba la palabra.
+# No creo que debamos dejar de decir algo por la "corrección política"
+# Yo creo que si el 386 tiene instrucciones *ilegales*, también puede
+# haber opciones ilegales, digo yo, y no por eso las CPUs van
+# a la cárcel (como mucho se cuelgan, je, je, 0ff0 :-). sv
+#
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opción -- %c ilegal\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "no se pudo invocar el programa subsidiario `%s'"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr "falló el programa subsidiario `%s' (estado de salida %d)"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "POSIX prohíbe declaraciones en a gramática"
+
+#~ msgid "invalid $ value"
+#~ msgstr "valor $ no válido"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "precedencias en conflicto entre %s y %s"
+
+#~ msgid "conflicting associativities for %s (%s) and %s (%s)"
+#~ msgstr "conflicto de asociaciatividades para %s (%s) y %s (%s)"
+
+#~ msgid "too many states (max %d)"
+#~ msgstr "demasiados estados (máximo %d)"
+
+#~ msgid "reduce"
+#~ msgstr "reduce"
+
+#~ msgid "shift"
+#~ msgstr "desplaza"
+
+#~ msgid "%d shift/reduce conflict"
+#~ msgid_plural "%d shift/reduce conflicts"
+#~ msgstr[0] "%d conflicto desplazamiento/reducción"
+#~ msgstr[1] "%d conflictos desplazamiento/reducción"
+
+#~ msgid "and"
+#~ msgstr "y"
+
+#~ msgid "State %d contains "
+#~ msgstr "El estado %d contiene"
+
+#~ msgid "conflicts: "
+#~ msgstr "conflictos: "
+
+#~ msgid "%s contains "
+#~ msgstr "%s contiene "
+
+#~ msgid "`%s' is no longer supported"
+#~ msgstr "`%s' ya no está soportado"
+
+# Me parece menos "computadora" decir "ningún fichero de gramática" - cll
+#
+#~ msgid "%s: no grammar file given\n"
+#~ msgstr "%s: no se ha especificado ningún fichero de gramática\n"
+
+# Ignorar es no saber, to ignore es no hacer caso, que no es lo mismo. sv
+#~ msgid "%s: extra arguments ignored after `%s'\n"
+#~ msgstr "%s: los argumentos extra después de '%s' no se tendrán en cuenta\n"
+
+#~ msgid "too many gotos (max %d)"
+#~ msgstr "demasiados gotos (máximo %d)"
+
+# to ignore no es ignorar. Pon otra cosa, please. sv
+#~ msgid "unexpected `/' found and ignored"
+#~ msgstr "se ha encontrado `/' cuando no se esperaba, no se tendrán en cuenta"
+
+#~ msgid "unterminated comment"
+#~ msgstr "comentario sin terminar"
+
+#~ msgid "unexpected end of file"
+#~ msgstr "fin de fichero inesperado"
+
+# ¿unescaped?
+#~ msgid "unescaped newline in constant"
+#~ msgstr "salto de línea en constante sin secuencia de escape"
+
+#~ msgid "octal value outside range 0...255: `\\%o'"
+#~ msgstr "valor octal fuera del rango 0...255: `\\%o'"
+
+#~ msgid "hexadecimal value above 255: `\\x%x'"
+#~ msgstr "valor hexadecimal mayor que 255: `\\x%x'"
+
+#~ msgid "unknown escape sequence: `\\' followed by `%s'"
+#~ msgstr "secuencia de escape desconocida: `\\' seguido de `%s'"
+
+#~ msgid "unterminated type name at end of file"
+#~ msgstr "nombre de tipo sin terminar al final del fichero"
+
+#~ msgid "unterminated type name"
+#~ msgstr "nombre de tipo sin terminar"
+
+# ¿multicarácter o multicaracteres? sv
+#~ msgid "use \"...\" for multi-character literal tokens"
+#~ msgstr "use \"...\" para terminales literales multicarácter"
+
+#~ msgid "`%s' supports no argument: %s"
+#~ msgstr "`%s' no soporta el argumento: %s"
+
+#~ msgid "`%s' requires an argument"
+#~ msgstr "`%s' requiere un argumento"
+
+#~ msgid "   (rule %d)"
+#~ msgstr "   (regla %d)"
+
+#~ msgid "    %-4s\terror (nonassociative)\n"
+#~ msgstr "    %-4s\terror (no asociativo)\n"
+
+#~ msgid ""
+#~ "    $default\treduce using rule %d (%s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "    $default\treduce usando la regla %d (%s)\n"
+#~ "\n"
+
+#~ msgid "    %-4s\t[reduce using rule %d (%s)]\n"
+#~ msgstr "    %-4s\t[reduce usando la regla  %d (%s)]\n"
+
+#~ msgid "    %-4s\treduce using rule %d (%s)\n"
+#~ msgstr "    %-4s\treduce usando la regla  %d (%s)\n"
+
+#~ msgid "    $default\treduce using rule %d (%s)\n"
+#~ msgstr "    $default\treduce usando la regla %d (%s)\n"
+
+#~ msgid "    $default\taccept\n"
+#~ msgstr "    $default\taceptar\n"
+
+#~ msgid "    NO ACTIONS\n"
+#~ msgstr "    SIN ACCIONES\n"
+
+#~ msgid "Number, Line, Rule"
+#~ msgstr "Número, Línea, Regla"
+
+#~ msgid "  %3d %3d %s ->"
+#~ msgstr "  %3d %3d %s ->"
+
+#~ msgid "   Skipping to next \\n"
+#~ msgstr "   Saltando al siguiente \\n"
+
+#~ msgid "   Skipping to next %c"
+#~ msgstr "   Saltando al siguiente %c"
+
+#~ msgid "unterminated string"
+#~ msgstr "cadena sin terminar"
+
+#~ msgid "%s is invalid"
+#~ msgstr "%s no es válido"
+
+#~ msgid "unterminated `%{' definition"
+#~ msgstr "definición `%{' sin terminar"
+
+#~ msgid "Premature EOF after %s"
+#~ msgstr "EOF prematuro después de %s"
+
+#~ msgid "`%s' is invalid in %s"
+#~ msgstr "`%s' no es válido en %s"
+
+#~ msgid "%type declaration has no <typename>"
+#~ msgstr "la declaración %type no tiene <nombre-tipo>"
+
+#~ msgid "invalid %%type declaration due to item: %s"
+#~ msgstr "declaración de %%type no válida debido al ítem: %s"
+
+# Una corrección menor: en realidad, `should' es el pasado y condicional
+# de "to must" y aquí se emplea en su forma condicional. Por eso, he
+# cambiado `debe' por `debería' - cll
+# ahí me has pillado en un olvido del inglés - ngp
+#~ msgid "invalid text (%s) - number should be after identifier"
+#~ msgstr ""
+#~ "texto no válido (%s) - el número debería estar después del identificador"
+
+# Cambio el orden y el sexo. Ahora está "en español". sv
+#~ msgid "unmatched %s"
+#~ msgstr "%s desemparejado/a"
+
+#~ msgid "argument of %%expect is not an integer"
+#~ msgstr "el argumento de %%expect no es un entero"
+
+# No te recomiendo que emplees participios para expresar acciones (¡si
+# me oyera mi antigua profesora de lengua, lloraría de emoción! :). En
+# vez de eso, emplea las conjugaciones habituales, que para eso están :)
+# - cll
+# ok - ngp
+#
+#~ msgid "unrecognized item %s, expected an identifier"
+#~ msgstr "no se reconoce el ítem %s, se esperaba un identificador"
+
+#~ msgid "expected string constant instead of %s"
+#~ msgstr "se esperaba una cadena constante en lugar de %s"
+
+#~ msgid "no input grammar"
+#~ msgstr "no hay gramática de entrada"
+
+#~ msgid "ill-formed rule: initial symbol not followed by colon"
+#~ msgstr "regla mal formada: el símbolo inicial no está seguido por :"
+
+#~ msgid "grammar starts with vertical bar"
+#~ msgstr "la gramática comienza con una barra vertical"
+
+#~ msgid "previous rule lacks an ending `;'"
+#~ msgstr "a la regla previa le falta un `;' al final"
+
+#~ msgid "two @prec's in a row"
+#~ msgstr "dos @prec en una línea"
+
+# Insisto, el empleo de participios a secas me parece como hablar en
+# indio. Por favor, permíteme que añada un "está" :) - cll
+# ok - ngp
+#~ msgid "%%guard present but %%semantic_parser not specified"
+#~ msgstr "%%guard presente pero %%semantic_parser está sin especificar"
+
+#~ msgid "two actions at end of one rule"
+#~ msgstr "dos acciones al final de una regla"
+
+# Únicamente cambio la posición del adjetivo `máximo'. En vez de después
+# de `tabla', después de `tamaño' - cll
+# en inglés era así, pero quizás en español sea mejor como dices
+# ngp
+#
+#~ msgid "maximum table size (%d) exceeded"
+#~ msgstr "excedido el tamaño máximo de la tabla (%d)"
+
+#~ msgid "    $   \tgo to state %d\n"
+#~ msgstr "    $   \tir al estado %d\n"
+
+# Tal vez pueda parecer pedante, pero `inconclusa' me suena muchísimo
+# mejor que `sin terminar' que me parece más "computerizado" - cll
+# quizás un poco cacofónico lo de claúsula inconclusa - ngp
+#
+#~ msgid "unterminated %guard clause"
+#~ msgstr "cláusula %guard sin terminar"
diff --git a/po/et.gmo b/po/et.gmo
new file mode 100644
index 0000000..0e02208
--- /dev/null
+++ b/po/et.gmo
Binary files differ
diff --git a/po/et.po b/po/et.po
new file mode 100644
index 0000000..1332c17
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,1172 @@
+# This file is distributed under the same license as the bison package.
+# Estonian translations for bison.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Toomas Soome <Toomas.Soome@microlink.ee>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-08 19:20+0200\n"
+"Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
+"Language-Team: Estonian <linux-ee@lists.eenet.ee>\n"
+"Language: et\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "hoiatus"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "viga"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "fataalne viga"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Konflikt reegli %d ja märgi %s vahel lahendatud nihkega"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Konflikt reegli %d ja märgi %s vahel lahendatud redutseerimisega"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Konflikt reegli %d ja märgi %s vahel lahendatud veana"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr ""
+"konfliktid: %d nihutamine/redutseerimine, %d redutseerimine/redutseerimine\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konfliktid:  %d nihutamine/redutseerimine\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konfliktid: %d redutseerimine/redutseerimine\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Olek %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr puudutab ainult GLR parsereid"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "eeldasime %d nihutamine/redutseerimine konflikti"
+msgstr[1] "eeldasime %d nihutamine/redutseerimine konflikti"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "eeldasin %d redutseerimine/redutseerimine konflikti"
+msgstr[1] "eeldasin %d redutseerimine/redutseerimine konflikti"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: ei saa avada"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "sisend/väljund viga"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "faili ei õnnestu sulgeda"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "keeldun sisendfaili %s üle kirjutamast"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "konfliktsed väljundid faili %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Lisainfo saamiseks proovige `%s --help'.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Kasuta: %s [VÕTI]...FAIL\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Genereeri determineeritud LR või üldistatud LR (GLR) parser kasutades\n"
+"LALR(1), IELR(1) või kanoonilisi LR(1) parseri tabeleid.  IELR(1) ja\n"
+"kanoonilise LR(1) tugi on eksperimentaalne.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Kohustuslikud argumendid pikkadele võtmetele on kohustuslikus ka "
+"lühikestele.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Sama ka mittekohustuslike argumentide korral.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Töömoodid:\n"
+"  -h, --help                 esita see abiinfo ja lõpeta töö\n"
+"  -V, --version              esita versiooniinfo ja lõpeta töö\n"
+"      --print-localedir      esita lokaadi infot sisaldava kataloogi nimi\n"
+"      --print-datadir        esita skelettide ja XSLT kataloogi nimi\n"
+"  -y, --yacc                 emuleeri POSIX yacc\n"
+"  -W, --warnings[=KATEGOORIA] raporteeri antud kategooria hoiatusi\n"
+"  -f, --feature[=OMADUS]     aktiveeri muid omadusi\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -L, --language=KEEL        määra väljudi programmeerimise keel\n"
+"  -S, --skeleton=FAIL        kasutatava skeleti kirjeldus\n"
+"  -t, --debug                varusta parser silumisinfoga\n"
+"      --locations            luba asukohtade arvestamine\n"
+"  -D, --define=NIMI[=VÄÄRTUS] sama kui '%define NIMI \\\"VÄÄRTUS\\\"'\n"
+"  -F, --force-define=NIMI[=VÄÄRTUS] kirjuta '%define NIMI \\\"VÄÄRTUS\\\"' "
+"üle\n"
+"  -p, --name-prefix=PREFIKS  lisa välissümbolite nimedele PREFIKS\n"
+"                             kasutage selle asemel '-Dapi.prefix=PREFIKS'\n"
+"  -l, --no-lines             ära genereeri '#line' direktiive\n"
+"  -n, --no-parser            genereeri ainult tabelid\n"
+"  -k, --token-table          lisa ka sümbolite nimede tabel\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Väljund:\n"
+"      --defines[=FAIL]       loo ka päisfail\n"
+"  -d                         sama, aga faili nime ei saa määrata (POSIX "
+"Yacc)\n"
+"  -r, --report=ASJAD         väljasta automaadi kohta selgitusi\n"
+"      --report-file=FAIL     kirjuta raport faili\n"
+"  -v, --verbose              sama, kui `--report=state'\n"
+"  -b, --file-prefix=PREFIKS  kasuta väljundfailide nimedes PREFIKSit\n"
+"  -o, --output=FAIL          jäta väljund FAILi\n"
+"  -g, --graph                loo automaadi kirjeldus graafina\n"
+"  -x, --xml[=FAIL]           loo automaadi XML raport\n"
+"                             (XML skeem on eksperimentaalne)\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Hoiatuste kategooriad on järgnevad:\n"
+"  `midrule-values'  seadmata või kasutamata vahereeglite väärtused\n"
+"  `yacc'            mitteühilduvused POSIX Yacc suhtes\n"
+"  `conflicts-sr'    S/R konfliktid (vaikimisi)\n"
+"  `conflicts-rr'    R/R konfliktid (vaikimisi)\n"
+"  `deprecated'      aegunud konstruktsioonid\n"
+"  `other'           kõik muud hoiatused (vaikimisi)\n"
+"  `all'             kõik hoiatused\n"
+"  `no-CATEGORY'     keela antud kategooria hoiatused\n"
+"  `none'            keela kõik hoiatused\n"
+"  `error'           käsitle hoiatusi vigadena\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"ASJAD on loend komadega eraldatud järgnevaid sõnu:\n"
+"  `state'        olekute kirjeldus\n"
+"  `itemset'      täienda põhilisi elemente nende sulunditega\n"
+"  `look-ahead'   seo ettevaatamised elementidega\n"
+"  `solved'       kirjelda nihuta/redutseeri konfliktide lahendamisi\n"
+"  `all'          kogu ülaltoodud info\n"
+"  `none'         blokeeri raport\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"OMADUS on komadega eraldatud järgnevate sõnade loend:\n"
+"  `caret'        märgi vead sümboliga ^\n"
+"  `all'          kõik ülaltoodud\n"
+"  `none'         blokeeri kõik ülaltoodud\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Teatage palun vigadest aadressil <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "%s koduleht: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr "Üldine abiinfo GNU tarkvara kohta: <http://www.gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Tõlkevigadest teatage palun aadressil <http://translationproject.org/team/"
+">.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Täieliku dokumentatsiooni lugemiseks käivitage: info bison.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Kirjutanud Robert Corbett ja Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Autoriõigus © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"See on vaba tarkvara; kopeerimistingimused leiate lähtetekstidest. Garantii\n"
+"PUUDUB; ka müügiks või mingil eesmärgil kasutamiseks.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "korduvad skeleti deklaratsioonid ei ole lubatud"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: vigane keel"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "korduvad keele deklaratsioonid ei ole lubatud"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: puudub operand"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "liigne operand %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "tühi"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammatika"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Genereeris %s.\n"
+"// Vigadest teatage <%s>.\n"
+"// Koduleht: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "rea numbri ületäitumine"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "veeru numbri ületäitumine"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "reegel on konfliktide tõttu kasutu"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%define muutuja %s deklareeriti uuesti"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "eelmine deklaratsioon"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: defineerimata %%define muutuja %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "vigane %%define tõeväärtus muutuja %s väärtus"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "vigane väärtus %%define muutujale %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "lubatud väärtus: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "parameetri deklaratsioonis puudub identifikaator"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " tüüp %d on %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "nihuta ja liigu olekule %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "liigu olekule %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "viga (mitteassotsiatiivne)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "redutseerin kasutades reeglit %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "nõustun"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "Olek %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminalid, koos reeglitega kus nad ilmuvad"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Mitteterminalid, koos reeglitega kus nad ilmuvad"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " vasakul:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " paremal:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Reeglid on parseris konfliktide tõttu kasutud"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "korduvad %s deklaratsioonid"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "tulemuse tüübikonflikt mestimise funktsioonis %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "eelmine deklaratsioon"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "ignoreerin dubleeritud sümboli nime %s"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "%s jaoks on antud reegel, aga see on märk"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "vaikimisi tegevuse tüübikonflikt: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "tüübiga mitteterminalil on tühi reegel ja puudub tegevus"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "kasutamata väärtus: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "seadmata väärtus: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "%%prec märgend ei ole defineeritud: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "reeglis on lubatud ainult üks %s"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s puudutab ainult GLR parsereid"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s järel peab olema positiivne number"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "reegel on liiga pikk"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "sisendgrammatikas pole reegleid"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "reegel ei ole grammatikas kasutatav"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "mitteterminal on grammatikas kasutu: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Mitteterminalid ei ole grammatikas kasutatavad"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Grammatikas mitte kasutatud terminalid"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Grammatikas kasutud reeglid"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d grammatikas kasutu mitteterminal"
+msgstr[1] "%d grammatikas kasutut mitteterminali"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d grammatikas kasutu reegel"
+msgstr[1] "%d grammatikas kasutut reeglit"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "stardisümbolist %s ei tuletata ühtegi lauset"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "liigne '%s'"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "tegevuse koodi lõpus võib olla vaja ';'"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "Bisoni uuemad versioonid ei lisa ';'"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "YYFAIL kasutamine ei ole soovitatav ja eemaldatakse"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "viitab: %c%s kohal %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "arvatavasti mõeldi: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", peidab %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " kohal %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", ei saa vahe reegli tegevusel kasutada kohal $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "number piiridest väljas: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "vigane viide: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr "süntaksi viga peale '%c', ootan numbrit, tähte, '_', '[' või '$'"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "sümbol puudub produktsioonis $%d ees: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "sümbol puudub produktsioonis: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "segadust tekitav viide: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "segane viide: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "tüüpimata grammatikas kasutati konkreetset tüüpi"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ vahereeglis kohal $%d '%s' ei oma deklareeritud tüüpi"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ märgil '%s' ei oma deklareeritud tüüpi"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s märgil '%s' ei oma deklareeritud tüüpi"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "käsitlen juhuslikku ',' kui tühikut"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "vigane juhus: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "vigane identifikaator: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "vigane sümbol"
+msgstr[1] "vigased sümbolid"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "nurksulgudes nimes on eeotamatu identifikaator: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "oodati identifikaatorit"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "vigane sümbol sulgudega nimes"
+msgstr[1] "vigased sümbolid sulgudega nimes"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "tühi sümbol literaal"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "liigsed sümbolid sümbol literaalis"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "vigane null sümbol"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "vigane number peale \\-jada: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "vigane sümbol peale \\-jada: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "faili lõpus puudub %s"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "rea lõpus puudub %s"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "skeletis on sulgemata %s direktiiv"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "skeletis on %s direktiivile liiga vähe argumente"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "skeletis on %s direktiivile liiga palju argumente"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "vigane $ väärtus: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX Yacc keelab kriipsud sümbolite nimedes: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "sisendgrammatikas on liiga palju sümboleid (piirang on %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s uuesti deklareerimine %s jaoks"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s deklareeriti <%s> jaoks uuesti"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "sümbol %s on uuesti defineeritud"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "sümbol %s on uuesti deklareeritud"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "%s kasutaja märgi numbri uuesti defineerimine"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"kasutatakse sümbolit %s, mis ei ole defineeritud märgina ja millel puuduvad "
+"reeglid"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "sümbolit %s on kasutatud enam kui kord literaal sõnena"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "sümbolile %s on antud enam kui üks literaal sõne"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "kasutaja märgi number %d uuesti deklareerimine %s jaoks"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "%s eelmine deklaratsioon"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "stardisümbol %s ei ole defineeritud"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "stardisümbol %s on märk"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "vaikimisi märgitud %%destructor uuesti deklareerimine"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "vaikimisi märkimata %%destructor uuesti deklareerimine"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "vaikimisi märgitud %%printer uuesti deklareerimine"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "vaikimisi märkimata %%printer uuesti deklareerimine"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "'%s' eemaldamine ebaõnnestus"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "ajutise faili loomine ebaõnnestus"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "standardsisendi salvestamine ebaõnnestus"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "standardväljundi salvestamine ebaõnnestus"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "ajutise faili avamine ebaõnnestus"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr "bisoni väljundi suunamine ajutisse faili ebaõnnestus"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr "ajutisest failist m4 sisendi seadmine ebaõnnestus"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "ajutise faili avamine ebaõnnestus"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr "m4 väljundi ajutisse faili suunamine ebaõnnestus"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "lisaprogramm '%s' katkestati"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "lisaprogrammi '%s' ei ole"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr "bisoni sisendi seadmine ajutisest failist ebaõnnestus"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "vigane argument %s %s'le"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "segane argument %s %s'le"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Lubatud argumendid on:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u vabastatud (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u puhverdatud (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u puhverdatud (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u puhverdatud (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "loenduri logi histogramm\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "suuruste logi histogramm\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "tiheduse histogramm\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset statistika:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Salvestatud läbimisi = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "statistika faili ei saa lugeda"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "vigane statistika faili suurus.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "statistika faili ei saa kirjutada"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "statistika faili ei saa kirjutamiseks avada"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "viga kirjutamisel"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Tundmatu süsteemi viga"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: võti '%s' on segane; valikud:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: võti '--%s' ei luba argumenti\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: võti '%c%s' ei luba argumenti\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: võti '--%s' nõuab argumenti\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: tundmatu võti '--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: tundmatu võti '%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: vigane võti -- '%c'\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: võti nõuab argumenti -- '%c'\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: võti '-W %s' on segane\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: võti '-W %s' ei luba argumenti\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: võti '-W %s' nõuab argumenti\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "mälu on otsas"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "toru ei õnnestu luua"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s alamprotsess sai vea"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Täitmise ajad (sekundites)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " KOKKU                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "aeg %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle ebaõnnestus"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ei õnnestu taastada faili pidet %d: dup2 sai vea"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "%s alamprotsess"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s alamprotsess sai fataalse signaali %d"
diff --git a/po/fi.gmo b/po/fi.gmo
new file mode 100644
index 0000000..ef39901
--- /dev/null
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..1e2c98f
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,1248 @@
+# Finnish messages for bison.
+# Copyright © 2010, 2011, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2009-2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-09 18:49+0200\n"
+"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Bookmarks: 136,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "varoitus"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "virhe"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "vakava virhe"
+
+#  (token in computing) An atomic piece of data (esp. the text of a computer program) for which a meaning may be inferred during parsing. Also called a symbol.
+#  (token in computing) An atomic piece of data, such as a word, for which a meaning may be inferred during parsing. Also called a symbol.
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+"    Säännön %d ja merkkisymbolin %s välinen ristiriita on ratkaistu siirtona"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Säännön %d ja merkkisymbolin %s välinen ristiriita on ratkaistu "
+"supistamisena"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Säännön %d ja merkkisymbolin %s välinen ristiriita on ratkaistu virheenä"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "ristiriidat: %d siirto/supistaminen, %d supistaminen/supistaminen\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "ristiriidat: %d siirto/supistaminen\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "ristiriidat: %d supistaminen/supistaminen\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Tila %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr soveltuu vain GLR-jäsentimiin"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "odotettiin %d siirto/supistaminen -ristiriita"
+msgstr[1] "odotettiin %d siirto/supistaminen -ristiriitaa"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "odotettiin %d siirto/supistaminen -ristiriita"
+msgstr[1] "odotettiin %d siirto/supistaminen -ristiriitaa"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: tiedoston avaus epäonnistui"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "syöttö/tulostevirhe"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "tiedoston sulkeminen epäonnistui"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "kieltäydytään korvaamasta syötetiedostoa %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "keskenään ristiriitaisia tulosteita tiedostoon %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pyydä lisätietoja komennolla ”%s --help”.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Käyttö: %s [VALITSIN]... TIEDOSTO\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Tuota deterministinen LR- tai yleistetty LR (GLR) -jäsennin, joka käyttää\n"
+"LALR(1)-, IELR(1)-, tai kanonisia LR(1)-jäsennintauluja.  IELR(1)- ja\n"
+"kanoninen LR(1) -tuki on kokeellinen.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Pakolliset argumentit pitkille valitsimille ovat pakollisia myös lyhyille "
+"valitsimille.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Sama pätee valinnaisille argumenteille.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Toimintotilat:\n"
+"  -h, --help                 näytä tämä opaste ja poistu\n"
+"  -V, --version              tulosta versiotiedot ja poistu\n"
+"      --print-localedir      tulostehakemisto, joka sisältää maa-asetuksesta "
+"riippuvaa dataa\n"
+"      --print-datadir        tulostehakemisto, joka sisältää rungot ja XSLT-"
+"koodin\n"
+"  -y, --yacc                 matki POSIX Yacc -ohjelmaa\n"
+"  -W, --warnings=[KATEGORIA] raportoi tähän KATEGORIAan kuuluvat "
+"varoitukset\n"
+"  -f, --feature[=OMINAISUUS] aktivoi sekalaiset ominaisuudet\n"
+"\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Jäsennin:\n"
+"  -L, --language=KIELI           määrittele tulosteohjelmointikieli\n"
+"  -S, --skeleton=TIEDOSTO        määrittele käytettävä runko\n"
+"  -t, --debug                    lisää jäsennin vianjäljitykseen\n"
+"      --locations                ota käyttöön paikkojen laskenta\n"
+"  -D, --define=NIMI[=ARVO]       samanlainen kuin ”%define NAME \"VALUE\"”\n"
+"  -F, --force-define=NIMI[=ARVO] korvaa määrittelyn ”%define NAME \"VALUE"
+"\"”\n"
+"  -p, --name-prefix=ETULIITE     lisää ETULIITE ulkoisiin symboleihin\n"
+"                                 valitsimen ”-Dapi.prefix=ETULIITE” "
+"vanhentama\n"
+"  -l, --no-lines                 älä tuota ”#line”-direktiivejä\n"
+"  -k, --token-table              sisällytä merkkisymbolinimien taulu\n"
+"\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Tuloste:\n"
+"      --defines[=TIEDOSTO]   tuota myös otsaketiedosto\n"
+"  -d                         samoin, mutta TIEDOSTOn (POSIX \n"
+"                                Yacc-yhteensopivuus)määrittely epäonnistui\n"
+"  -r, --report=THINGS        tuota myös yksityiskohdat automaatissa\n"
+"      --report-file=TIEDOSTO kirjoita raportti TIEDOSTOon\n"
+"  -v, --verbose              sama kuin ”--report=state”\n"
+"  -b, --file-prefix=ETULIITE määrittele ETULIITE tulostetiedostoille\n"
+"  -o, --output=TIEDOSTO      jätä tuloste TIEDOSTOon\n"
+"  -g, --graph[=TIEDOSTO]     tulosta myös automaatin kaavio\n"
+"  -x, --xml[=TIEDOSTO]       tulosta myös automaatin XML-raportti\n"
+"                             (XML-skeema on kokeellinen)\n"
+"\n"
+
+#  Koodissa midrule on keskellä oleva lohko, jota edeltää toprule ja jonka alla on bottomrule.
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Varoituskategoriat sisältävät:\n"
+"  `midrule-values'  asettaa ja poistaa midrule-arvoja\n"
+"  `yacc'            yhteensopimattomuudet POSIX YACC -ohjelman kanssa\n"
+"  `conflicts-sr'    S/R-ristiriidat (oletuksena otettu käyttöön)\n"
+"  `conflicts-rr'    R/R-ristiriidat (oletuksena otettu käyttöön)\n"
+"  `deprecated'      vanhentuneet rakenteet\n"
+"  `other'           kaikki muut varoitukset (oletuksena otettu käyttöön)\n"
+"  `all'             kaikki varoitukset\n"
+"  `no-CATEGORY'     käännä pois päältä kaikki varoitukset kategoriassa "
+"CATEGORY\n"
+"  `none'            käännä pois kaikki varoitukset\n"
+"  `error'           käsittele varoituksia virheinä\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"THINGS on pilkuilla eroteltu luettelo, joka voi sisältää:\n"
+"  `state'        kuvaa tilat\n"
+"  `itemset'      täydentää ydinalkiojoukot niiden sulkeumalla\n"
+"  `lookahead'    eksplisiittisesti liittää ennakointimerkkisymbolit "
+"alkioihin\n"
+"  `solved'       kuvailee siirto/supistaminen -ristiriitojen ratkaisemisen\n"
+"  `all'          sisältää kaikki yllä mainitut tiedot\n"
+"  `none'         poistaa raportoinnin\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"OMINAISUUS on pilkulla eroteltujen sanojen luettelo, joka voi sisältää:\n"
+"  `caret'        näytä virheet sirkumfleksilla\n"
+"  `all'          kaikki yllä\n"
+"  `none'         ota kaikki yllä olevat pois käytöstä\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Ilmoita virheistä (englanniksi) osoitteeseen <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "%s kotisivu: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"Yleinen opaste GNU-ohjelmistojen käyttämisestä: <http://www.gnu.org/gethelp/"
+">.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge."
+"net>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Täydellisen dokumentaation saat suorittamalla komennon: info bison.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Kirjoittajat: Robert Corbett ja Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Tämä on vapaa ohjelmisto: katso lähdekoodista kopiointiehdot. Ohjelmalle EI\n"
+"OLE MITÄÄN TAKUUTA; ei edes KAUPPAKELPOISUUDELLE tai SOPIVUUDELLE TIETTYYN "
+"TARKOITUKSEEN.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "monirunkoesittelyt ovat virheellisiä"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: virheellinen kieli"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "monikieliesittelyt ovat virheellisiä"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: puuttuva operandi"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "ylimääräinen operandi %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "tyhjä"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Kielioppi"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Tuottaja: %s.\n"
+"// Ilmoita vioista osoitteeseen <%s>.\n"
+"// Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists."
+"sourceforge.net>.\n"
+"// Kotisivu: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "rivinumeron ylivuoto"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "sarakenumeron ylivuoto"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "sääntö on hyödytön jäsentimessä ristiriitojen vuoksi"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%define-muuttuja %s on määritelty uudelleen"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "edellinen määrittely"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: määrittelemätön %%define-muuttuja %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "virheellinen arvo kohteelle %%define-booleanmuuttuja %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "virheellinen arvo kohteelle %%define-muuttuja %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "hyväksytty arvo: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "puuttuva tunniste parametriesittelyssä"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " tyyppi %d on %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "siirto, ja siirry tilaan %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "siirry tilaan %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "virhe (ei-assosiatiivinen)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "supistaminen käyttäen sääntöä %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "accept"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "Tila %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Päätteet, säännöillä missä niin tarvitaan"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Ei-päätteet, säännöillä missä niitä tarvitaan"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " vasemmalla:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " oikealla:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Säännöt ovat hyödyttömiä jäsentimessä ristiriitojen vuoksi"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "useita %s esittelyjä"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "tulostyyppien yhteentörmäys merge-funktiossa %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "edellinen esittely"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "kaksoiskappalesymbolinimi kohteelle %s ohitettiin"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "sääntö annettu kohteelle %s, joka on merkkisymboli"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "tyyppien törmäys vastakkain oletustoiminassa: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "tyhjä sääntö tyypitetylle ei-päätteelle, ja ei toimintoa"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "käyttämätön arvo: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "asettamaton arvo: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "merkkisymbolia kohteelle %%prec ei ole määritelty: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "vain yksi %s on sallittu sääntöä kohden"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s vaikuttaa vain GLR-jäsentimiin"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "kohdetta %s on seurattava postiivinen numero"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "sääntö on liian pitkä"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "ei sääntöjä syötekieliopissa"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "sääntö on hyödytön kieliopissa"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "ei-pääte on hyödytön kieliopissa: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Ei-päätteet ovat hyödyttömiä kieliopissa"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Päätteet ovat käyttämättömiä kieliopissa"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Säännöt ovat hyödyttömiä kieliopissa"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d ei-pääte on hyödytön kieliopissa"
+msgstr[1] "%d ei-päätettä ovat hyödyttömiä kieliopissa"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d sääntö on hyödytön kieliopissa"
+msgstr[1] "%d sääntöä ovat hyödyttömiä kieliopissa"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "aloitussymboli %s ei johda lauseeseen"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "yksinäinen ’%s’"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "merkkiä ’;’ saatetaan tarvita toimintakoodin lopussa"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "tulevat Bison-versiot eivät lisää merkkiä ’;’"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "YYFAIL-käyttö, joka on vanhentunut ja poistetaan"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "viittaa kohteeseen: %c%s osoitteessa %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "mahdollisesti tarkoitti: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", piilotetaan %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " osoitteessa %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", ei kyetä käyttämään mid-rule -toimintoa osoitteessa $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "kokonaisluku on lukualueen ulkopuolella: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "virheellinen viite: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"syntaksivirhe merkin ’%c’ jälkeen, odotettiin kokonaislukua, kirjainta, tai "
+"merkkejä ’_’, ’[’, ’$’"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "symbolia ei löytynyt tuotannosta ennen $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "symbolia ei löytynyt tuotannosta: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "harhaanjohtava viite: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "ei-yksiselitteinen viite: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "eksplisiittinen tyyppi annettu tyypittömässä kieliopissa"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ midrule-lohkolle osoitteessa $%d/%s ei ole esiteltyä tyyppiä"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$/%s ei ole esitelty tyyppi"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s/%s ei ole esitelty tyyppi"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "yksinäinen ’,’ käsitellään tyhjemerkkinä"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "virheellinen direktiivi: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "virheellinen tunniste: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "virheellinen merkki: %s"
+msgstr[1] "virheellisiä merkkejä: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "odottamaton tunniste sulkumerkillisessä nimessä: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "odotettiin tunnistetta"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "virheellinen merkki sulkeissa olevassa nimessä: %s"
+msgstr[1] "virheellisiä merkkejä sulkeissa olevassa nimessä: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "tyhjä merkkiliteraali"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "ylimääräisiä merkkejä merkkiliteraalissa"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "virheellinen null-merkki"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "virheellinen numero \\-koodinvaihtomerkin jälkeen: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "virheellinen merkki \\-koodinvaihtomerkin jälkeen: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "puuttuva %s tiedoston lopussa"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "puuttuva %s rivin lopussa"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "sulkematon %s-direktiivi rungossa"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "liian vähän argumentteja %s-direktiiville rungossa"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "liian monta argumenttia %s-direktiiville rungossa"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "virheellinen $-arvo: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX Yacc kieltää ajatusviivat symbolinimissä: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "liian monta symbolia syötekieliopissa (raja on %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s uudelleenesittely kohteelle %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s uudelleenesittely kohteelle <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "symboli %s on määritelty uudelleen"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symboli %s on esitelty uudelleen"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "määritellään uudelleen kohteen %s käyttäjämerkkisymbolinumero"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"symbolia %s käytetään, mutta sitä ei ole määritelty merkkisymbolina eikä "
+"sillä ole sääntöjä"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "symbolia %s on käytetty useammin kuin kerran literaalimerkkijonona"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "symboli %s on annettu useammassa kuin yhdessä literaalimerkkijonossa"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "käyttäjämerkkijononumeron %d uudelleenesittely kohteelle %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "edellinen esittely kohteelle %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "aloitussymboli %s on määrittelemätön"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "aloitussymboli %s on merkkisymboli"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "uudelleenesittely oletusmerkitylle %%destructor"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "uudelleenesittely oletus-ei-merkitylle %%destructor"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "uudelleenesittely oletus-merkitylle %%printer"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "uudelleenesittely oletus-ei-merkitylle %%printer"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "kohteen ’%s’ poistaminen epäonnistui"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "tilapäisen tiedoston luominen epäonnistui"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "vakiosyötön tallentaminen epäonnistui"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "vakiotulosteen tallentaminen epäonnistui"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "tilapäisen tiedoston tmpfile avaaminen epäonnistui"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+"bison-vakiotulosteen edelleenohjaaminen tilapäiseen tiedostoon epäonnistui"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr "m4-vakiosyötteen edelleenohjaaminen tilapäiseen tiedostoon epäonnistui"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "tilapäisen tiedoston avaaminen epäonnistui"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+"m4-vakiotulosteen edelleenohjaaminen tilapäiseen tiedostoon epäonnistui"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "tytärohjelma ’%s’ on keskeytetty"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "tytärohjelmaa ’%s’ ei löytynyt"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+"bison-vakiosyötteen edelleenohjaaminen tilapäiseen tiedostoon epäonnistui"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "virheellinen argumentti %s valitsimelle %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "ei-yksiselitteinen argumentti %s valitsimelle %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Mahdolliset argumentit ovat:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u vapautettu (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u tallennettu välimuistiin (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u tallennettu välimuistiin (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u tallennettu välimuistiin (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "lukumäärälokihistogrammi\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "kokolokihistogrammi\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "tiheyshistogrammi\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bittivektoritilastot:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Kumuloituneet ajot = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "stats-tiedoston lukeminen epäonnistui"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "virheellinen stats-tiedostokoko\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "stats-tiedostoon kirjoittaminen epäonnistui"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "stats-tiedoston avaaminen kirjoittamista varten epäonnistui"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "kirjoitusvirhe"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Tuntematon järjestelmävirhe"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: valitsin ’--%s’ vaatii argumentin\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: tunnistamaton valitsin ’--%s’\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: tunnistamaton valitsin ’%c%s’\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: virheellinen valitsin — ’%c’\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: valitsin vaatii argumentin — ’%c’\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "muisti loppui"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "putken luominen epäonnistui"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s-aliprosessi epäonnistui"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "”"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "”"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Suoritusajat (sekunteja)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " YHTEENSÄ              :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "aika kohteessa %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle epäonnistui"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ei voida palauttaa tiedostotunnistetta %d: dup2 epäonnistui"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "%s-aliprosessi"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s-aliprosessi sai kohtalokkaan signaalin %d"
+
+#~ msgid "state %d"
+#~ msgstr "tila %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "yksinäinen ’@’"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "määrittelemätön %%define-muuttuja ”%s” välitetty kohteelle "
+#~ "muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "määrittelemätön %%define-muuttuja ”%s” välitetty kohteelle "
+#~ "muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "määrittelemätön %%define-muuttuja ”%s” välitetty kohteelle "
+#~ "muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "määrittelemätön %%define-muuttuja ”%s” välitetty kohteelle "
+#~ "muscle_percent_define_check_values"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Tuota LALR(1) ja GLR -jäsentimet.\n"
+#~ "\n"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "merkkisymboleille %s ja %s on annettu sama numero %d"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "virheellinen koodinvaihtosekvenssi: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "tunnistamaton koodinvaihtosekvenssi: %s"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: virheellinen valitsin — %c\n"
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..88749f6
--- /dev/null
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..07da4c6
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,1219 @@
+# Messages français pour Bison.
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996
+# Dominique Boucher a été le traducteur de 1996 à 2000
+# Frédéric Marchal <fmarchal@perso.be>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-11 20:15+0100\n"
+"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms:  nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "avertissement"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "erreur"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "erreur fatale"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Conflit entre la règle %d et le jeton %s résolu par décalage"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Conflit entre la règle %d et le jeton %s résolu par réduction"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Conflit entre la règle %d et le jeton %s résolu comme étant une erreur"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflits: %d décalage/réduction, %d réduction/réduction\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflits: %d décalage/réduction\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflits: %d réduction/réduction\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "État %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr affecte seulement les analyseurs GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "attendait %d conflit par décalage/réduction"
+msgstr[1] "attendait %d conflits par décalage/réduction"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "attendait %d conflit par réduction/réduction"
+msgstr[1] "attendait %d conflits par réduction/réduction"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: ouverture impossible"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "erreur d'entrée/sortie"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "ne peut fermer le fichier"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "refus d'écraser le fichier d'entrée %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "sorties en conflit vers le fichier %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pour en savoir davantage, faites: « %s --help ».\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Usage: %s [OPTION]... FICHIER\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Génération d'un analyseur LR déterministe or d'un LR généralisé (GLR) "
+"employant\n"
+"LALR(1), IELR(1) ou des tables d'analyseur LR(1) canonique. Le support de "
+"IELR(1)\n"
+"et de LR(1) canonique est expérimental.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Les paramètres requis pour les options longues sont également requis pour "
+"les options courtes.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "La même chose est vraie pour les paramètres optionnels.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Modes d'utilisation:\n"
+"  -h, --help                 afficher l'aide-mémoire\n"
+"  -V, --version              afficher le nom et la version du logiciel\n"
+"      --print-localedir      afficher le répertoire contenant les données "
+"avec dépendance des locales\n"
+"      --print-datadir        afficher le répertoire contenant les squelettes "
+"et XSLT\n"
+"  -y, --yacc                 émuler yacc en mode POSIX\n"
+"  -W, --warnings[=CATÉGORIE] signaler les avertissements de la CATÉGORIE\n"
+"  -f, --feature[=FONCTION]   activer des fonctionnalités diverses\n"
+"\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Analyseur:\n"
+"  -L, --language=LANGAGE           indiquer la langage de programmation de "
+"sortie\n"
+"  -S, --skeleton=FICHIER           utiliser le FICHIER squelette\n"
+"  -t, --debug                      activer le mode de mise au point\n"
+"                                   de l'analyseur\n"
+"      --locations                  permettre le calcul des localisations\n"
+"  -D, --define=NOM[=VALEUR]        similaire à « %define NOM \"VALEUR\" »\n"
+"  -F, --force-define=NOM[=VALEUR]  outrepasse « %define NOM \"VALEUR\" »\n"
+"  -p, --name-prefix=PRÉFIXE        accoler le PRÉFIXE aux symboles externes\n"
+"                                   rendu obsolète par « -Dapi."
+"prefix=PRÉFIXE »\n"
+"  -l, --no-lines                   ne pas générer les directives « #line »\n"
+"  -k, --token-table                inclure la table des noms de jetons\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Sortie:\n"
+"      --defines[=FICHIER]    produire un fichier d'en-tête\n"
+"  -d                         idem mais sans spécifier le FICHIER (pour le "
+"Yacc POSIX)\n"
+"  -r, --report=CHOSES        générer les détails concernant l'automate\n"
+"      --report-file=FICHIER  écrire le rapport dans le FICHIER\n"
+"  -v, --verbose              identique à « --report=state »\n"
+"  -b, --file-prefix=PRÉFIXE  utiliser le PRÉFIXE pour le fichier de sortie\n"
+"  -o, --output=FICHIER       produire la sortie dans le FICHIER\n"
+"  -g, --graph[=FICHIER]      produire aussi un graphe de l'automate\n"
+"  -x, --xml[=FICHIER]        produire un rapport XML de l'automate\n"
+"                             (le schéma XML est expérimental)\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Les catégories d'avertissements comprennent:\n"
+"  « midrule-values »  valeur de règle intermédiaire non définie ou "
+"inutilisée\n"
+"  « yacc »            incompatibilité avec le YACC POSIX\n"
+"  « conflicts-sr »    conflits S/R (activé par défaut)\n"
+"  « conflicts-rr »    conflits R/R (activé par défaut)\n"
+"  « deprecated »      constructions obsolètes\n"
+"  « other »           tous les autres avertissements (activé par défaut)\n"
+"  « all »             tous les avertissements\n"
+"  « no-CATÉGORIE »    supprime les avertissements de la CATÉGORIE\n"
+"  « none »            supprime tous les avertissements\n"
+"  « error »           traite les avertissements comme des erreurs\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"CHOSES est une liste de mots séparés par des virgules qui peuvent inclure:\n"
+"  `state'        décrire des états\n"
+"  `itemset'      compléter le corps du jeu d'items avec leur fermeture\n"
+"  `lookahead'    associer explicitement les jetons lookahead aux items\n"
+"  `solved'       décrire la résolution des conflits décalage/réduction\n"
+"  `all'          inclure toutes les informations ci-haut\n"
+"  `none'         désactiver la génération de rapport\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"FONCTION est une liste de mots séparés par des virgules incluant:\n"
+"  « caret »       montrer les erreurs avec des carets\n"
+"  « all »         toutes celles ci-dessus\n"
+"  « none »        aucune de celles ci-dessus\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Rapportez toutes anomalies à <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "page d'accueil de %s: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"Aide générique sur l'utilisation des logiciels GNU: <http://www.gnu.org/help/"
+"gethelp.fr.html>.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Signalez les erreurs de traductions à <http://translationproject.org/team/fr."
+"html>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Pour la documentation complète, exécutez: info bison.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Écrit par Robert Corbett et Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Ce logiciel est libre; voir les sources pour les conditions de\n"
+"reproduction. AUCUNE garantie n'est donnée; tant pour des raisons\n"
+"COMMERCIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "déclarations multiples de squelettes sont inacceptables"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: langage inacceptable"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "les déclarations multiples du langage sont interdits"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: opérande manquante"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "opérande superflu %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "vide"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammaire"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Produit par %s.\n"
+"// Rapporter les bugs à <%s>.\n"
+"// Page d'accueil: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "débordement du nombre de lignes"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "débordement du nombre de colonnes"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "la règle est inutile dans l'analyseur à cause de conflits"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "variable %%define %s redéfinie"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "définition précédente"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: variable %%define %s non définie"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "valeur inacceptable pour %%define de la variable Booléenne %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "valeur inacceptable pour %%define de la variable %s : %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "valeur acceptée : %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "identificateur manquant dans la déclaration de paramètres"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " le type %d est %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "décalage et aller à l'état %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "aller à l'état %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "erreur (non-associative)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "réduction par utilisation de la règle %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "accepter"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$défaut"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "État %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminaux, suivis des règles où ils apparaissent"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Non-terminaux, suivis des règles où ils apparaissent"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " à gauche:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " à droite:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "La règle est inutile dans l'analyseur à cause de conflits"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "déclarations multiples de %s"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+"conflit dans le type du résultat de la fonction de fusion %s : <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "déclaration précédente"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "doublon dans le nom de symbole %s est ignoré"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "la règle pour %s, qui est un terminal"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "conflit de type pour l'action par défaut: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "règle vide pour une catégorie typée et aucune action"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "valeur inutilisée: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "valeur non initialisée: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "le jeton pour %%prec n'est pas défini : %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "seul un %s est permis par règle"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s affecte seulement les analyseurs GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s doit être suivi d'un nombre positif"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "règle trop longue"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "la grammaire n'a pas de règles"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "règle inutile dans la grammaire"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "unité non terminale inutile dans la grammaire : %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Non-terminaux inutiles dans la grammaire"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Terminaux inutilisés dans la grammaire"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Règles inutiles dans la grammaire"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d non terminal inutile dans la grammaire"
+msgstr[1] "%d non terminaux inutiles dans la grammaire"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d règle inutile dans la grammaire"
+msgstr[1] "%d règles inutiles dans la grammaire"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "symbole de départ %s ne produit aucune phrase"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "« %s » superflu"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "un « ; » est peut-être nécessaire à la fin du code d'action"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "les versions suivantes de Bison n'ajouteront pas le « ; »"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "l'utilisation de YYFAIL est obsolète et sera supprimée"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "voir %c%s à %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "signifiait probablement: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", cache %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " à %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", n'est pas accessible depuis une action de milieu de règle à %d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "entier hors limite: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "référence invalide: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"erreur de syntaxe après « %c », attendu : entier, lettre, « _ », « [ » ou "
+"« $ »"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "symbole pas trouvé en production avant $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "symbole pas trouvé en production: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "référence trompeuse: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "référence ambiguë: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "type explicitement attribué à une grammaire sans type"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr ""
+"le $$ de la règle intermédiaire à $%d de « %s » n'a pas de type déclaré"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ de %s n'a pas de type déclaré"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s de %s n'a pas de type déclaré"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "« , » superflue traitée comme un blanc"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "directive invalide: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "identificateur invalide: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "caractère invalide"
+msgstr[1] "caractères invalides"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "identificateur inattendu dans un nom entre accolades: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "un identificateur est attendu"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "caractère invalide dans un nom entre accolades"
+msgstr[1] "caractères invalides dans un nom entre accolades"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "caractère littéral vide"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "caractères en trop dans le caractère littéral"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "caractère nul invalide"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "nombre incorrect après la séquence d'échappement \\ : %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "caractère invalide après la séquence d'échappement \\ : %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "chaîne de caractères %s manquante en fin de fichier"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "%s manquant à la fin de fichier"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "directive %s pas fermée dans le squelette"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "trop peu de paramètres pour la directive %s du squelette"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "trop de paramètres pour la directive %s du squelette"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "valeur $ invalide: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "Le Yacc POSIX interdit les tirets dans les noms de symboles: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "trop de symboles dans la grammaire d'entrée (limite est %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "redéclaration de %s pour %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "redéclaration de %s pour <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "symbole %s est redéfini"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symbole %s est redéclaré"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redéfinition du jeton usager numéro de %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"le symbole %s est utilisé mais ce n'est pas un terminal et il ne possède pas "
+"de règle"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "symbole %s utilisé plus d'une fois dans une chaîne littérale"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "symbole %s présent dans plus d'une chaîne littérale"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "redéclaration du numéro de jeton utilisateur %d pour %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "déclaration précédente de %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "le symbole de départ %s n'est pas défini"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "le symbole de départ %s est un terminal"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "redéclaration du %%destructeur par défaut avec étiquette"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "redéclaration pour le %%destructeur par défaut sans étiquette"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "redéclaration de l'%%imprimante par défaut avec étiquette"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "redéclaration de l'%%imprimante par défaut sans étiquette"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "le suppression de « %s » a échoué"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "la création d'un fichier temporaire a échoué"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "la sauvegarde de stdin a échoué"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "la sauvegarde de stdout a échoué"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "l'ouverture de tmpfile a échoué"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr "la redirection du stdout de bison vers un fichier temporaire a échoué"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr "la redirection du stdin de m4 depuis un fichier temporaire a échoué"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "l'ouverture d'un fichier temporaire a échoué"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr "la redirection du stdout de m4 vers un fichier temporaire a échoué"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "programme subsidiaire « %s » interrompu"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "programme subsidiaire « %s » pas trouvé"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr "la redirection du stdin de bison depuis un fichier temporaire a échoué"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "paramètre %s pas valable pour %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "paramètre %s ambigu pour %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Les paramètres valides sont:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u libérés (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u dans le cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u dans le cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u dans le cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "histogramme des compteurs\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "taille de l'histogramme des compteurs\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "densité de l'histogramme\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistiques des bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Exécutions accumulées = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "ne peut lire le fichier de stats"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "taille erronée du fichier de stats\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "ne peut écrire le fichier de stats"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "impossible d'ouvrir le fichier de stats en écriture"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "erreur d'écriture"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Erreur système inconnue"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: l'option « %s » est ambiguë; les possibilités sont:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: l'option «--%s» n'admet pas de paramètre\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: l'option «%c%s» n'admet pas de paramètre\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: l'option «--%s» requiert un paramètre\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: l'option «--%s» est inconnue\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: l'option «%c%s» est inconnue\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: option non valide -- «%c»\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: l'option requiert un paramètre -- «%c»\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: l'option «-W %s» est ambiguë\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: l'option «-W %s» n'admet pas de paramètre\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: l'option «-W %s» requiert un paramètre\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "mémoire épuisée"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "ne peut créer le tube"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "le sous-processus %s a échoué"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "»"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Temps d'exécution (secondes)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTAL                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "temps dans %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle a échoué"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "impossible de rétablir le fd %d: dup2 a échoué"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "sous-processus %s"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "le sous-processus %s a reçu le signal fatal %d"
+
+#~ msgid "state %d"
+#~ msgstr "état %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "« @ » superflu"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "variable %%define « %s » non définie passée à "
+#~ "muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "variable %%define « %s » non définie passée à "
+#~ "muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "variable %%define « %s » non définie passée à "
+#~ "muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "variable %%define « %s » non définie passée à "
+#~ "muscle_percent_define_check_values"
diff --git a/po/ga.gmo b/po/ga.gmo
new file mode 100644
index 0000000..e91e613
--- /dev/null
+++ b/po/ga.gmo
Binary files differ
diff --git a/po/ga.po b/po/ga.po
new file mode 100644
index 0000000..2191f45
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,1385 @@
+# Irish translations for bison.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Kevin Patrick Scannell <scannell@SLU.EDU>, 2004, 2006, 2008, 2010, 2012
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.5\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-05-22 18:52-0500\n"
+"Last-Translator: Kevin Scannell <kscanne@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :"
+"(n>6 && n<11) ? 3 : 4;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "rabhadh"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "Earráid I/A"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "earráid mharfach"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+"    Coinbhleacht idir riail %d agus teaghrán comharthach %s: réitíodh mar "
+"iomlaoid"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Coinbhleacht idir riail %d agus teaghrán comharthach %s: réitíodh mar "
+"laghdú"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Coinbhleacht idir riail %d agus teaghrán comharthach %s: réitíodh mar "
+"earráid"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "coinbhleachtaí: %d iomlaoid/laghdú, %d laghdú/laghdú\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "coinbhleachtaí: %d iomlaoid/laghdú\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "coinbhleachtaí: %d laghdú/laghdú\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Staid %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "Níl %%expect-rr in úsáid ach le parsálaithe GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "bhíothas ag súil le %d coinbhleacht iomlaoid/laghdú"
+msgstr[1] "bhíothas ag súil le %d choinbhleacht iomlaoid/laghdú"
+msgstr[2] "bhíothas ag súil le %d choinbhleacht iomlaoid/laghdú"
+msgstr[3] "bhíothas ag súil le %d gcoinbhleacht iomlaoid/laghdú"
+msgstr[4] "bhíothas ag súil le %d coinbhleacht iomlaoid/laghdú"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "bhíothas ag súil le %d coinbhleacht laghdú/laghdú"
+msgstr[1] "bhíothas ag súil le %d choinbhleacht laghdú/laghdú"
+msgstr[2] "bhíothas ag súil le %d choinbhleacht laghdú/laghdú"
+msgstr[3] "bhíothas ag súil le %d gcoinbhleacht laghdú/laghdú"
+msgstr[4] "bhíothas ag súil le %d coinbhleacht laghdú/laghdú"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "ní féidir comhad `%s' a oscailt"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "ní féidir comhad a dhúnadh"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "diúltaítear inchomhad %s a fhorscríobh"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "aschuir chontrártha scríofa i gcomhad %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Bain triail as `%s --help' chun tuilleadh eolais a fháil.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Úsáid: %s [ROGHA]... COMHAD\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Cruthaigh parsálaí cinntitheach LR nó parsálaí ginearálaithe LR (GLR)\n"
+"a úsáideann táblaí parsálaithe LALR(1), IELR(1), nó LR(1) canónta.\n"
+"Tacaíocht thurgnamhach amháin ar IELR(1) agus LR(1) canónta.\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Is riachtanach le rogha ghearr aon argóint atá riachtanach leis an rogha "
+"fhada.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Agus mar an gcéanna le haghaidh argóintí roghnacha freisin.\n"
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Móid oibre:\n"
+"  -h, --help                 taispeáin an chabhair seo agus scoir\n"
+"  -V, --version              taispeáin eolas faoin leagan agus scoir\n"
+"      --print-localedir      taispeáin an chomhadlann ina bhfuil sonraí "
+"logchaighdeáin\n"
+"      --print-datadir        taispeáin an chomhadlann ina bhfuil creatlacha "
+"agus XSLT\n"
+"  -y, --yacc                 déan aithris ar Yacc POSIX\n"
+"  -W, --warnings=[CATAGÓIR]  taispeáin na rabhaidh atá i gCATAGÓIR\n"
+"\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parsálaí:\n"
+"  -L, --language=TEANGA      socraigh an ríomhtheanga le haschur\n"
+"                             (gné thurgnamhach é seo)\n"
+"  -S, --skeleton=COMHAD      socraigh an chreatlach le húsáid\n"
+"  -t, --debug                ullmhaigh an parsálaí le haghaidh "
+"dífhabhtaithe\n"
+"      --locations            cumasaigh tacaíocht do shuímh\n"
+"  -D, --define=AINM[=LUACH]  cosúil le `%define AINM \"LUACH\"'\n"
+"  -F, --force-define=AINM[=LUACH]  sáraigh `%define AINM \"LUACH\"'\n"
+"  -p, --name-prefix=RÉIMÍR   cuir RÉIMÍR roimh gach siombail sheachtrach\n"
+"  -l, --no-lines             ná cruthaigh treoracha `#line'\n"
+"  -k, --token-table          cuir tábla d'ainmneacha teaghrán san áireamh\n"
+"\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Aschur:\n"
+"      --defines[=COMHAD]     gin comhad ceanntásca freisin\n"
+"  -d                         mar an gcéanna, ach gan COMHAD (le haghaidh "
+"Yacc POSIX)\n"
+"  -r, --report=RUDAÍ         tabhair sonraí faoin uathoibreán\n"
+"      --report-file=COMHAD   scríobh tuairisc i gCOMHAD\n"
+"  -v, --verbose              ar comhbhrí le `--report=state'\n"
+"  -b, --file-prefix=RÉIMÍR   RÉIMÍR ar aschomhaid\n"
+"  -o, --output=COMHAD        scríobh aschur sa CHOMHAD\n"
+"  -g, --graph[=COMHAD]       scríobh graf an uathoibreáin\n"
+"  -x, --xml[=COMHAD]         scríobh tuairisc ar an uathoibreán mar XML\n"
+"                             (is trialach é an scéimre XML)\n"
+"\n"
+
+#: src/getargs.c:361
+#, fuzzy
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Seo iad catagóirí rabhaidh:\n"
+"  `midrule-values'  luachanna meánrialach gan socrú nó gan úsáid\n"
+"  `yacc'            neamh-chomhoiriúintí le Yacc POSIX\n"
+"  `conflicts-sr'    coinbhleachtaí S/R (réamhshocrú)\n"
+"  `conflicts-rr'    coinbhleachtaí R/R (réamhshocrú)\n"
+"  `other'           gach rabhadh eile (réamhshocrú)\n"
+"  `all'             gach rabhadh\n"
+"  `no-CATAGÓIR'     ná taispeáin rabhaidh ó CATAGÓIR\n"
+"  `none'            ná taispeáin rabhaidh ar bith\n"
+"  `error'           caith le rabhaidh mar earráidí\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"Is éard atá i RUDAÍ ná liosta focal, scartha le camóga, as na roghanna seo:\n"
+"  `state'        déan cur síos ar na staideanna\n"
+"  `itemset'      comhlíon na croíthacair míre lena gclabhsúr\n"
+"  `look-ahead'   ceangail teaghráin réamhfheiceála le míreanna go follasach\n"
+"  `solved'       réiteach de choinbhleachtaí iomlaoid/laghdú\n"
+"  `all'          cuir gach sonra thuas san áireamh\n"
+"  `none'         díchumasaigh an tuairisc\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Seol tuairiscí ar fhabhtanna chuig <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Le Robert Corbett agus Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Is saorbhogearra an ríomhchlár seo; féach ar an bhunchód le haghaidh\n"
+"coinníollacha cóipeála.  Níl baránta ar bith ann; go fiú níl baránta ann\n"
+"d'INDÍOLTACHT nó FEILIÚNACHT D'FHEIDHM AR LEITH.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "ní cheadaítear níos mó ná creatlach amháin"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "teanga neamhbhailí `%s'"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "ní cheadaítear níos mó ná teanga amháin"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "oibreann ar iarraidh i ndiaidh `%s'"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "oibreann breise `%s'"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "folamh"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramadach"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Cruthaithe ag %s.\n"
+"// Tuairiscí ar fhabhtanna chuig <%s>.\n"
+"// Leathanach baile: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "líne-uimhir thar maoil"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "uimhir an cholúin thar maoil"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "riail gan tairbhe sa pharsálaí de bhrí coinbhleachtaí"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "sainmhíniú nua ar athróg %%define `%s'"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "sainmhíniú roimhe seo"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, fuzzy, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "luach neamhbhailí ar athróg %%define `%s': `%s'"
+
+#: src/muscle-tab.c:550
+#, fuzzy, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "luach neamhbhailí ar athróg Boole %%define `%s'"
+
+#: src/muscle-tab.c:609
+#, fuzzy, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "luach neamhbhailí ar athróg %%define `%s': `%s'"
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "luach glactha: `%s'"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "aitheantóir ar iarraidh i bhfógra paraiméadair"
+
+# don't know if alignment matters here, so use 4-letter 'sórt' vs. 'cineál'-KPS
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " de chineál %d is %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "déan iomlaoid, agus téigh go staid %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "téigh go staid %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "earráid (neamh-chomhthiomsaitheach)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "laghdaigh, ag úsáid rialach %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "glac leis"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$réamhshocraithe"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Staid %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Sloinn dolaghdaithe, le rialacha más cuí"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Sloinn inlaghdaithe, le rialacha más cuí"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " ar clé:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " ar dheis:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Rialacha gan tairbhe sa pharsálaí de bhrí coinbhleachtaí"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "níos mó ná fógra amháin %s"
+
+# FRTF caismirt
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+"caismirt idir cineálacha toraidh i bhfeidhm chumaiscthe `%s': <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "fógra roimhe seo"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "rinneadh neamhaird d'ainm dúbailte ar %s"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "tugadh riail i gcomhair %s atá ina theaghrán comharthach"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "caismirt idir cineálacha leis an ghníomh réamhshocraithe: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr ""
+"riail fholamh i gcomhair teaghrán inlaghdaithe le cineál, ach níl aon ghníomh"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "luach gan úsáid: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "luach gan socrú: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "teaghrán comharthach le haghaidh %%prec gan sainmhíniú: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "ní cheadaítear ach %s amháin an riail"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "Níl %s curtha i bhfeidhm ach ar pharsálaithe GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "Ní foláir uimhir dheimhneach a theacht i ndiaidh %s"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "riail rófhada"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "níl aon riail sa ghramadach ionchurtha"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "riail gan tairbhe sa ghramadach"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "slonn inlaghdaithe gan tairbhe sa ghramadach: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Sloinn inlaghdaithe gan tairbhe sa ghramadach"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Sloinn dolaghdaithe gan úsáid sa ghramadach"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Rialacha gan tairbhe sa ghramadach"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d slonn inlaghdaithe gan tairbhe sa ghramadach"
+msgstr[1] "%d shlonn inlaghdaithe gan tairbhe sa ghramadach"
+msgstr[2] "%d shlonn inlaghdaithe gan tairbhe sa ghramadach"
+msgstr[3] "%d slonn inlaghdaithe gan tairbhe sa ghramadach"
+msgstr[4] "%d slonn inlaghdaithe gan tairbhe sa ghramadach"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d riail gan tairbhe sa ghramadach"
+msgstr[1] "%d riail gan tairbhe sa ghramadach"
+msgstr[2] "%d riail gan tairbhe sa ghramadach"
+msgstr[3] "%d riail gan tairbhe sa ghramadach"
+msgstr[4] "%d riail gan tairbhe sa ghramadach"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "níl aon abairt díorthaithe ón siombail tosaigh %s"
+
+#: src/scan-code.l:188
+#, fuzzy, c-format
+msgid "stray '%s'"
+msgstr "`$' ar strae"
+
+#: src/scan-code.l:229
+#, fuzzy
+msgid "a ';' might be needed at the end of action code"
+msgstr "seans go bhfuil `;' ar iarraidh ag deireadh an ghnímh"
+
+#: src/scan-code.l:232
+#, fuzzy
+msgid "future versions of Bison will not add the ';'"
+msgstr "ní chuirfear `;' leis i leaganacha de Bison amach anseo"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "tá YYFAIL i léig agus bainfear amach é sa todhchaí"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "déanann sé tagairt do: %c%s ag %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "b'fhéidir: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", %c á chur i bhfolach"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " ag %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", níl aon fháil air ó ghníomh meánrialach ag $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "slánuimhir as raon: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "tagairt neamhbhailí: %s"
+
+#: src/scan-code.l:619
+#, fuzzy, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"earráid chomhréire tar éis `%c', bhíothas ag súil le slánuimhir, litir, `_', "
+"`[', or `$'"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "siombail gan aimsiú i riail ghramadaí roimh $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "siombail gan aimsiú i riail ghramadaí: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "tagairt mhíthreorach: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "tagairt dhébhríoch: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "cineál follasach i ngramadach gan chineálacha"
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "Níl aon chineál fógartha ag $$ na meánrialach ag $%d de `%s'"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "Níl aon chineál fógartha ag $$ de `%s'"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "Níl aon chineál fógartha ag $%s de `%s'"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "`,' ar seachrán, caith leis mar spás bán"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "treoir neamhbhailí: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "aitheantóir neamhbhailí: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "carachtar neamhbhailí: %s"
+msgstr[1] "carachtar neamhbhailí: %s"
+msgstr[2] "carachtar neamhbhailí: %s"
+msgstr[3] "carachtar neamhbhailí: %s"
+msgstr[4] "carachtar neamhbhailí: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "aitheantóir gan súil leis in ainm idir lúibíní: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "bhíothas ag súil le haitheantóir"
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "carachtar neamhbhailí in ainm idir lúibíní: %s"
+msgstr[1] "carachtar neamhbhailí in ainm idir lúibíní: %s"
+msgstr[2] "carachtar neamhbhailí in ainm idir lúibíní: %s"
+msgstr[3] "carachtar neamhbhailí in ainm idir lúibíní: %s"
+msgstr[4] "carachtar neamhbhailí in ainm idir lúibíní: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "carachtar litriúil folamh"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "carachtair bhreise i gcarachtar litriúil"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "carachtar neamhbhailí nialasach"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "uimhir neamhbhailí tar éis éalúcháin-\\: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "carachtar neamhbhailí tar éis éalúcháin-\\: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "`%s' ar iarraidh ag críoch an chomhaid"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "`%s' ar iarraidh ag críoch na líne"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "treoir %s gan dúnadh i gcreatlach"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "easpa argóintí do threoir %s i gcreatlach"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "an iomarca argóintí do threoir %s i gcreatlach"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "luach neamhbhailí $: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "Ní cheadaíonn Yacc POSIX daiseanna in ainmneacha: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "an iomarca siombailí sa ghramadach ionchurtha (uasmhéid %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "athfhógra %s ar %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "athfhógra %s ar <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "sainmhíniú nua ar shiombail %s"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "athfhógra ar shiombail %s"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "sainmhíniú nua ar an uimhir theaghráin do %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"tá siombail %s in úsáid, ach níl sé ina teaghrán comharthach agus níl aon "
+"riail aici"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "siombail `%s' in úsáid níos mó ná uair amháin mar theaghrán litriúil"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "tá níos mó ná aon teaghrán litriúil amháin ag an tsiombail `%s'"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "athfhógra ar uimhir theaghráin %d do %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "fógra roimhe seo ar %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "siombail tosaigh %s gan sainmhíniú"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "is teaghrán comharthach í an tsiombail tosaigh %s"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "athfhógra ar %%destructor réamhshocraithe clibeáilte"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "athfhógra ar %%destructor réamhshocraithe gan chlib"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "athfhógra ar %%printer réamhshocraithe clibeáilte"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "athfhógra ar %%printer réamhshocraithe gan chlib"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, fuzzy, c-format
+msgid "opening of tmpfile failed"
+msgstr "theip ar _open_osfhandle"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "theip ar an fhochlár `%s'"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "fochlár `%s' gan aimsiú"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argóint neamhbhailí %s chun %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argóint dhébhríoch %s chun %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Na hargóintí bailí:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u scaoilte (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u curtha i dtaisce (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u curtha i dtaisce (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u curtha i dtaisce (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "histeagram loga áirimh\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "histeagram loga méid\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "histeagram dlúithe\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Staitistic Bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Rití carnacha = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Níorbh fhéidir an comhad staitistice a léamh."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Méid comhaid staitistice earráideach.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Níorbh fhéidir scríobh ar an chomhad staitistice."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Níorbh fhéidir an comhad staitistice a oscailt chun scríobh ann."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "earráid mharfach"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Earráid chórais anaithnid"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: Tá an rogha '%s' débhríoch\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha '--%s'\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha '%c%s'\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: tá argóint de dhíth i ndiaidh na rogha '--%s'\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: rogha anaithnid '--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: rogha anaithnid '%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: rogha neamhbhailí -- '%c'\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: tá argóint de dhíth i ndiaidh na rogha -- '%c'\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: Tá an rogha '-W %s' débhríoch\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha '-W %s'\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: tá argóint de dhíth i ndiaidh na rogha '-W %s'\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "cuimhne ídithe"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "ní féidir píopa a chruthú"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "theip ar fhophróiseas %s"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Agaí rite (soicindí)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " IOMLÁN                :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "aga i %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "theip ar _open_osfhandle"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ní féidir fd %d a athchóiriú: theip ar dup2"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "fophróiseas %s"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "fuair fophróiseas %s comhartha marfach %d"
+
+#~ msgid "state %d"
+#~ msgstr "staid %d"
+
+#, fuzzy
+#~ msgid "stray '@'"
+#~ msgstr "`@' ar strae"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "athróg %%define `%s' gan sainmhíniú seolta chuig "
+#~ "muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "athróg %%define `%s' gan sainmhíniú seolta chuig "
+#~ "muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "athróg %%define `%s' gan sainmhíniú seolta chuig "
+#~ "muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "athróg %%define `%s' gan sainmhíniú seolta chuig "
+#~ "muscle_percent_define_check_values"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Gin parsálaithe LALR(1) agus GLR.\n"
+#~ "\n"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr ""
+#~ "tá teaghráin chomharthach ann (%s agus %s) leis an uimhir chéanna (%d)"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "éalúchán neamhbhailí: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "seicheamh éalúcháin anaithnid: %s"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: rogha neamhcheadaithe -- %c\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "níorbh fhéidir an fochlár `%s' a rith"
+
+#~ msgid "%d nonterminal"
+#~ msgid_plural "%d nonterminals"
+#~ msgstr[0] "%d slonn dolaghdaithe"
+#~ msgstr[1] "%d shlonn dolaghdaithe"
+#~ msgstr[2] "%d shlonn dolaghdaithe"
+#~ msgstr[3] "%d slonn dolaghdaithe"
+#~ msgstr[4] "%d slonn dolaghdaithe"
+
+#~ msgid " and "
+#~ msgstr " agus "
+
+#~ msgid "%d rule"
+#~ msgid_plural "%d rules"
+#~ msgstr[0] "%d riail"
+#~ msgstr[1] "%d riail"
+#~ msgstr[2] "%d riail"
+#~ msgstr[3] "%d riail"
+#~ msgstr[4] "%d riail"
+
+#~ msgid " useless in grammar"
+#~ msgstr " gan tairbhe sa ghramadach"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Is riachtanach le rogha ghearr aon argóint atá riachtanach\n"
+#~ "leis an rogha fhada, agus ar an nós céanna leis na hargóintí roghnacha.\n"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Rialacha nach laghdaithe riamh"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Sloinn dolaghdaithe nach in úsáid"
+
+#~ msgid "warning: "
+#~ msgstr "rabhadh: "
+
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "earráid chomhréire: ní féidir cúlú"
+
+#~ msgid "Stack now"
+#~ msgstr "Cruach anois"
+
+#~ msgid "Reducing stack by rule %d (line %u), "
+#~ msgstr "Cruach á laghdú, ag úsáid rialach %d (líne %u)"
+
+#~ msgid "parser stack overflow"
+#~ msgstr "cruach pharsála thar maoil"
+
+#~ msgid "Stack size increased to %lu\n"
+#~ msgstr "Méadaíodh an chruach go %lu\n"
+
+#~ msgid "Entering state %d\n"
+#~ msgstr "Ag dul go staid %d\n"
+
+#~ msgid "Reading a token: "
+#~ msgstr "Teaghrán comharthach á léamh: "
+
+#~ msgid "Now at end of input.\n"
+#~ msgstr "Ag deireadh an ionchuir.\n"
+
+#~ msgid "Next token is"
+#~ msgstr "An chéad teaghrán comharthach eile"
+
+#~ msgid "Shifting"
+#~ msgstr "Ag déanamh iomlaoid"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "Ní cheadaítear fógraí sa ghramadach de réir POSIX"
+
+#~ msgid "syntax error, unexpected %s"
+#~ msgstr "earráid chomhréire, %s gan choinne"
+
+#~ msgid "syntax error, unexpected %s, expecting %s"
+#~ msgstr "earráid chomhréire, %s gan choinne, bhíothas ag súil le %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s"
+#~ msgstr "earráid chomhréire, %s gan choinne, bhíothas ag súil le %s nó %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+#~ msgstr ""
+#~ "earráid chomhréire, %s gan choinne, bhíothas ag súil le %s nó %s nó %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+#~ msgstr ""
+#~ "earráid chomhréire, %s gan choinne, bhíothas ag súil le %s nó %s nó %s nó "
+#~ "%s"
+
+#~ msgid "syntax error; also memory exhausted"
+#~ msgstr "earráid chomhréire; cuimhne ídithe freisin"
+
+#~ msgid "syntax error"
+#~ msgstr "earráid chomhréire"
+
+#~ msgid "Error: discarding"
+#~ msgstr "Earráid: curtha i leataobh"
+
+#~ msgid "Error: popping"
+#~ msgstr "Earráid: á phlobadh"
+
+#~ msgid "Error: discarding lookahead"
+#~ msgstr "Earráid: réamhfheiceáil curtha i leataobh"
+
+#~ msgid "missing `{' in `%s'"
+#~ msgstr "`{' ar iarraidh i `%s'"
+
+#~ msgid "invalid $ value"
+#~ msgstr "luach $ neamhbhailí"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr "theip ar an fhochlár `%s' (stádas scortha %d)"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "tosaíochtaí contrártha idir %s agus %s"
+
+#~ msgid "conflicting associativities for %s (%s) and %s (%s)"
+#~ msgstr "comhthiomsaitheacht chontrártha idir %s (%s) agus %s (%s)"
diff --git a/po/hr.gmo b/po/hr.gmo
new file mode 100644
index 0000000..ddd1c1c
--- /dev/null
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 0000000..43f1621
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,1481 @@
+# Translation of bison to Croatian.
+# Copyright © 2002, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Denis Lackovic <delacko@fly.srk.fer.hr>, 2002.
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.6.5\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-11-09 16:52+0100\n"
+"Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 1.4\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "upozorenje"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "U/I greška"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "fatalna greška"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Konflikt između pravila %d i simbola %s razriješen kao pomak"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Konflikt između pravila %d i simbola %s razriješen kao redukcija"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Konflikt između pravila %d i simbola %s razriješen kao greška"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikti: %d pomakni/reduciraj, %d reduciraj/reduciraj\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikti: %d pomakni/reduciraj\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikti: %d reduciraj/reduciraj\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Stanje %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr se primjenjuje samo na GLR analizatore"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "očekujem %d pomakni/reduciraj konflikt"
+msgstr[1] "očekujem %d pomakni/reduciraj konflikta"
+msgstr[2] "očekujem %d pomakni/reduciraj konflikata"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "očekujem %d reduciraj/reduciraj konflikt"
+msgstr[1] "očekujem %d reduciraj/reduciraj konflikta"
+msgstr[2] "očekujem %d reduciraj/reduciraj konflikata"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: ne mogu otvoriti"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "ulazno/izlazna greška"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "ne mogu zatvoriti datoteku"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "odbijam pisati preko ulazne datoteke %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "konfliktni izlazi u datoteku %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pokušajte „%s --help” za više informacija.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Uporaba: %s [OPCIJA]... DATOTEKA\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Stvori deterministički LR ili općeniti LR (GLR) analizator koji\n"
+"koristi LALR(1), IELR(1) ili kanonske LR(1) tablice analize.\n"
+"Podrška za IELR(1) i kanonski LR(1) je eksperimentalna.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Obavezni argumenti dugačkih opcija također su obavezni za kratke opcije.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Isto vrijedi i za opcionalne argumente.\n"
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Načini rada:\n"
+"  -h, --help                 prikaži ovu pomoć i izađi\n"
+"  -V, --version              ispiši informacije o inačici i izađi\n"
+"      --print-localedir      ispiši direktorij s podacima ovisnima o lokalu\n"
+"      --print-datadir        ispiši direktorij s predlošcima i XSLT-om\n"
+"  -y, --yacc                 emuliraj POSIX Yacc\n"
+"  -W, --warnings[=KATEGORIJA]  prijavi upozorenja iz KATEGORIJE\n"
+"\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -L, --language=JEZIK             navedi izlazni programski jezik\n"
+"                                   (ovo je eksperimentalna mogućnost)\n"
+"  -S, --skeleton=DATOTEKA          navedi predložak za korištenje\n"
+"  -t, --debug                      pripremi analizator za ispravljanje "
+"grešaka\n"
+"      --locations                  omogući podršku za lokacije\n"
+"  -D, --define=IME[=VRIJEDNOST]    slično kao „%define IME \"VRIJEDNOST\"”\n"
+"  -F, --force-define=IME[=VRIJEDNOST]  promijeni „%define IME \"VRIJEDNOST"
+"\"”\n"
+"  -p, --name-prefix=PREFIKS        dodaj PREFIKS ispred vanjskih simbola\n"
+"                                   zastarjelo zbog „-Dapi.prefix=PREFIKS”\n"
+"  -l, --no-lines                   ne stvaraj „#line” propise\n"
+"  -k, --token-table                uključi tablicu imena simbola\n"
+"\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Izlaz:\n"
+"      --defines[=DATOTEKA]   također napravi datoteku zaglavlja\n"
+"  -d                         isto, bez navođenja datoteke (za POSIX Yacc)\n"
+"  -r, --report=STVARI        također napravi pojedinosti o automatima\n"
+"      --report-file=DATOTEKA spremi izvještaj u DATOTEKU\n"
+"  -v, --verbose              isto kao „--report=state”\n"
+"  -b, --file-prefix=PREFIKS  navedi PREFIKS za izlazne datoteke\n"
+"  -o, --output=DATOTEKA      spremi izlaz u DATOTEKU\n"
+"  -g, --graph[=DATOTEKA]     također ispiši graf automata\n"
+"  -x, --xml[=DATOTEKA]       također ispiši XML izvještaj o automatu\n"
+"                             (XML shema je eksperimentalna)\n"
+"\n"
+
+#: src/getargs.c:361
+#, fuzzy
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Kategorije upozorenja uključuju:\n"
+"  „midrule-values”  nepostavljene ili nekorištene midrule vrijednosti\n"
+"  „yacc”            nekompatibilnosti za POSIX Yacc\n"
+"  „conflicts-sr”    P/R konflikte (uobičajeno uključeno)\n"
+"  „conflicts-rr”    R/R konflikte (uobičajeno uključeno)\n"
+"  „other”           sva ostala upozorenja (uobičajeno uključeno)\n"
+"  „all”             sva upozorenja\n"
+"  „no-KATEGORIJA”   isključi upozorenja iz KATEGORIJE\n"
+"  „none”            isključi sva upozorenja\n"
+"  „error”           postupaj s upozorenjima kao s greškama\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"STVARI su riječi odvojene zarezom koje mogu biti:\n"
+"  „state”        opiši stanja\n"
+"  „itemset”      dovrši osnovne skupove predmeta s njihovim zaključenjem\n"
+"  „lookahead”    eksplicitno dodijeli „lookahead” simbole predmetima\n"
+"  „solved”       opiši rješavanje pomakni/reduciraj konflikata\n"
+"  „all”          uključi sve gore navedene informacije\n"
+"  „none”         onemogući izvještaj\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Prijavite greške na <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "%s početna stranica: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"Općenita pomoć za korištenje GNU softvera: <http://www.gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Prijavite greške prijevoda na <http://translationproject.org/team/hr.html>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Za prikaz cjelokupne dokumentacije pokrenite „info bison”.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Napisali Robert Corbett i Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Ovo je slobodan softver, pogledajte kod za upute o kopiranju. NEMA "
+"jamstava,\n"
+"čak ni za TRGOVINSKU PRIKLADNOST ili ODGOVARANJE ODREĐENOJ SVRSI.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "višestruke deklaracije predloška nisu ispravne"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: neispravan jezik"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "višestruke deklaracije jezika nisu ispravne"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: nedostaje operand"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "operand viška %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "prazno"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramatika"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Napravio %s.\n"
+"// Prijavite greške na <%s>.\n"
+"// Početna stranica: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "preljev broja redaka"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "preljev broja stupaca"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "pravilo beskorisno u analizatoru zbog konflikata"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%define varijabla %s je ponovo definirana"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "prethodna definicija"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: nedefinirana %%define varijabla %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "neispravna vrijednost %%define logičke varijable %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "neispravna vrijednost %%define varijable %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "prihvaćena vrijednost: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "nedostaje identifikator u deklaraciji paremetra"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " vrsta %d je %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "pomakni i idi u stanje %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "idi u stanje %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "greška (neasocijativna)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduciraj koristeći pravilo %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "prihvati"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Stanje %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Završni znakovi, s pravilima gdje se pojavljuju"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Nezavršni znakovi, s pravilima gdje se pojavljuju"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " s lijeva:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " s desna:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Pravila su beskorisna u analizatoru zbog konflikata"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "višestruke %s deklaracije"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "sukob rezultantne vrste u funkciji spajanja %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "prethodna deklaracija"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "dvostruko ime simbola za %s je zanemareno"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "navedeno je pravilo za %s, a to je simbol"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "sukob vrsta u zadanoj radnji: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "prazno pravilo za nezavršni znak i nema radnje"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "nekorištena vrijednost: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "nepostavljena vrijednost: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "simbol za %%prec nije definiran: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "samo je jedan %s dozvoljen po pravilu"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s utječe samo na GLR analizatore"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "nakon %s mora slijediti pozitivan broj"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "pravilo je predugačko"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "nema pravila u ulaznoj gramatici"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "pravilo je beskorisno u gramatici"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "nezavršni znak je beskoristan u gramatici: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Nezavršni znakovi beskorisni u gramatici"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Završni znakovi nekorišteni u gramatici"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Pravila beskorisna u gramatici"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d nezavršni znak beskoristan u gramatici"
+msgstr[1] "%d nezavršna znaka beskorisna u gramatici"
+msgstr[2] "%d nezavršnih znakova beskorisnih u gramatici"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d pravilo beskorisno u gramatici"
+msgstr[1] "%d pravila beskorisna u gramatici"
+msgstr[2] "%d pravila beskorisnih u gramatici"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "početni simbol %s ne daje niti jednu rečenicu"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "zalutali „%s”"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "može biti potrebna „;” na kraju koda radnje"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "buduće inačice Bisona neće dodavati „;”"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "korištenje YYFAIL, što je zastarjelo i bit će uklonjeno"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "odnosi se na: %c%s na %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "vjerojatno znači: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", skrivajući %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " na %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", ne može mu pristupiti mid-rule radnja na $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "cijeli broj izvan granica: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "neispravna referenca: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"sintaksna greška nakon „%c”, očekujem cijeli broj, slovo, „_”, „[” ili „$”"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "simbol nije pronađen u proizvodnji prije $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "simbol nije pronađen u proizvodnji: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "krivo navodeća referenca: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "višeznačna referenca: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "navedena eksplicitna vrsta u neunesenoj gramatici"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ za srednje pravilo na $%d od %s nema deklariranu vrstu"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ od %s nema deklariranu vrstu"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s od %s nema deklariranu vrstu"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "postupam sa zalutalim „,” kao praznim prostorom"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "neispravan propis: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "neispravan identifikator: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "neispravan znak: %s"
+msgstr[1] "neispravan znak: %s"
+msgstr[2] "neispravan znak: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "neočekivani identifikator u zagrađenom imenu: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "očekujem identifikator"
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "neispravan znak u zagrađenom imenu: %s"
+msgstr[1] "neispravan znak u zagrađenom imenu: %s"
+msgstr[2] "neispravan znak u zagrađenom imenu: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "prazna znakovna konstanta"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "višak znakova u znakovnoj konstanti"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "neispravan prazan znak"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "neispravan broj nakon \\-izlaza: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "neispravan znak nakon \\-izlaza: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "nedostaje %s na kraju datoteke"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "nedostaje %s na kraju retka"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "nezatvoren %s propis u predlošku"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "premalo argumenata %s propisa u predlošku"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "premalo argumenata %s propisa u predlošku"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "neispravna $ vrijednost: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX Yacc zabranjuje povlake u imenima simbola: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "previše simbola u ulaznoj gramatici (ograničenje je %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "ponovna deklaracija %s za %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "ponovna deklaracija %s za <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "simbol %s ponovo definiran"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "simbol %s ponovo deklariran"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "ponovo definiram broj korisničkog simbola od %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr "simbol %s je korišten, ali nije definiran kao simbol i nema pravila"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "simbol %s je korišten više puta kao konstantan niz"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "simbolu %s je dano više od jednog konstantnog niza"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "ponovna deklaracija broja korisničkog simbola %d za %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "prethodna deklaracija za %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "početni simbol %s nije definiran"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "početni simbol %s je simbol"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "ponovna deklaracija za zadani označeni %%destructor"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "ponovna deklaracija za zadani neoznačeni %%destructor"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "ponovna deklaracija za zadani označeni %%printer"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "ponovna deklaracija za zadani neoznačeni %%printer"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "uklanjanje „%s” nije uspjelo"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "stvaranje privremene datoteke nije uspjelo"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "spremanje standardnog ulaza nije uspjelo"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "spremanje standardnog izlaza nije uspjelo"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "otvaranje privremene datoteke nije uspjelo"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+"preusmjeravanje standardnog izlaza programa bison u privremenu datoteku nije "
+"uspjelo"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+"preusmjeravanje standardnog ulaza programa m4 iz privremene datoteke nije "
+"uspjelo"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "otvaranje privremene datoteke nije uspjelo"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+"preusmjeravanje standardnog izlaza programa u privremenu datoteku nije "
+"uspjelo"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "podređeni program „%s” je prekinut"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "podređeni program „%s” nije pronađen"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+"preusmjeravanje standardnog ulaza programa bison iz privremene datoteke nije "
+"uspjelo"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "neispravan argument %s za %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "višeznačan argument %s za %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Ispravni argumenti su:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u oslobođeno (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u u spremniku (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u u spremniku (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u u spremniku (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "histogram dnevnika brojanja\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "histogram dnevnika veličine\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "histogram gustoće\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistike postavljanja bitova:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Akumulirana izvršavanja = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "ne mogu čitati datoteku stanja"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "neispravna veličina datoteke stanja\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "ne mogu zapisati datoteku stanja"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "ne mogu otvoriti datoteku stanja za pisanje"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "greška pisanja"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Nepoznata greška sustava"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: opcija „%s” je višeznačna, mogućnosti:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: opcija „--%s” ne dozvoljava argument\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: opcija „%c%s” ne dozvoljava argument\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: opcija „--%s” zahtijeva argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: neprepoznata opcija „--%s”\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: neprepoznata opcija „%c%s”\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: neispravna opcija -- „%c”\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opcija zahtijeva argument -- „%c”\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: opcija „-W %s” je višeznačna\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: opcija „-W %s” ne dozvoljava argument\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: opcija „-W %s” zahtijeva argument\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memorija iscrpljena"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "ne mogu napraviti cjevovod"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s potproces nije uspio"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "”"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Vremena izvršavanja (u sekundama)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " UKUPNO                :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "vrijeme u %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle nije uspio"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ne mogu obnoviti fd %d: dup2 nije uspio"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "%s potproces"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s potproces je primio fatalni signal %d"
+
+#~ msgid "state %d"
+#~ msgstr "stanje %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "stray „@”"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "nedefinirana %%define varijabla „%s” je proslijeđena "
+#~ "muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "nedefinirana %%define varijabla „%s” je proslijeđena "
+#~ "muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "nedefinirana %%define varijabla „%s” je proslijeđena "
+#~ "muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "nedefinirana %%define varijable „%s” je proslijeđena "
+#~ "muscle_percent_define_check_values"
+
+#~ msgid "too many states (max %d)"
+#~ msgstr "previše stanja (maks %d)"
+
+#~ msgid "reduce"
+#~ msgstr "reduciraj"
+
+#~ msgid "shift"
+#~ msgstr "pomakni"
+
+#~ msgid "%d shift/reduce conflict"
+#~ msgid_plural "%d shift/reduce conflicts"
+#~ msgstr[0] "%d pomakni/reduciraj konflikat"
+#~ msgstr[1] "%d pomakni/reduciraj konflikata"
+
+#~ msgid "and"
+#~ msgstr "i"
+
+#~ msgid "State %d contains "
+#~ msgstr "Stanje %d sadrži"
+
+#~ msgid "conflicts: "
+#~ msgstr "konflikt:"
+
+#~ msgid "%s contains "
+#~ msgstr "%s sadrži"
+
+#~ msgid "    %-4s\t[reduce using rule %d (%s)]\n"
+#~ msgstr "    %-4s\t[reduciraj koristeći pravilo %d (%s)]\n"
+
+#~ msgid ""
+#~ "    $default\treduce using rule %d (%s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "    $default\treduciraj koristeći pravilo %d (%s)\n"
+#~ "\n"
+
+#~ msgid "    %-4s\treduce using rule %d (%s)\n"
+#~ msgstr "    %-4s\treduciraj koristeći pravilo %d (%s)\n"
+
+#~ msgid "    $default\treduce using rule %d (%s)\n"
+#~ msgstr "    $default\treduciraj koristeći pravilo %d (%s)\n"
+
+#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
+#~ msgstr "GNU bison generira parsere za LALR(1) gramatike.\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Ako duga opcija kaže da je argument obavezan, tada je on obavezan\n"
+#~ "i za ekvivalentnu kratku opciju. Slično je i za opcionalne argumente.\n"
+
+#~ msgid ""
+#~ "Operation modes:\n"
+#~ "  -h, --help      display this help and exit\n"
+#~ "  -V, --version   output version information and exit\n"
+#~ "  -y, --yacc      emulate POSIX yacc\n"
+#~ msgstr ""
+#~ "Načini rada:\n"
+#~ "  -h, --help      prikaži ovu pomoć i izađi\n"
+#~ "  -V, --version   prikaži verziju i izađi\n"
+#~ "  -y, --yacc      emuliraj POSIX yacc\n"
+
+#~ msgid ""
+#~ "Output:\n"
+#~ "  -d, --defines              also produce a header file\n"
+#~ "  -v, --verbose              also produce an explanation of the "
+#~ "automaton\n"
+#~ "  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+#~ "  -o, --output=FILE          leave output to FILE\n"
+#~ "  -g, --graph                also produce a VCG description of the "
+#~ "automaton\n"
+#~ msgstr ""
+#~ "Izlaz:\n"
+#~ "  -d, --defines              također proizvedi header datoteku\n"
+#~ "  -v, --verbose              također proizvedi objašnjenje automata\n"
+#~ "  -b, --file-prefix=PREFIKS   specificiraj PREFIKS za izlazne datoteke\n"
+#~ "  -o, --output=DATOTEKA          ispiši izlaz u DATOTEKU\n"
+#~ "  -g, --graph                također proizvedi VCG opis automata\n"
+
+#~ msgid "`%s' is no longer supported"
+#~ msgstr "`%s' više nije podržano"
+
+#~ msgid "%s: no grammar file given\n"
+#~ msgstr "%s: nije data datoteka sa gramatikom\n"
+
+#~ msgid "%s: extra arguments ignored after `%s'\n"
+#~ msgstr "%s: dodatni argumenti se ignoriraju nakon `%s'\n"
+
+#~ msgid "too many gotos (max %d)"
+#~ msgstr "previše goto-a (maksimalno %d)"
+
+#~ msgid "unexpected `/' found and ignored"
+#~ msgstr "neočekivan  `/' nađen i zanemaren"
+
+#~ msgid "unterminated comment"
+#~ msgstr "nezavršeni komentar"
+
+#~ msgid "unexpected end of file"
+#~ msgstr "neočekivan kraj datoteke"
+
+#~ msgid "unescaped newline in constant"
+#~ msgstr "neočekivan znak za novu liniju u konstanti"
+
+#~ msgid "octal value outside range 0...255: `\\%o'"
+#~ msgstr "oktalna vrijednost izvan dosega 0...255: `\\%o'"
+
+#~ msgid "hexadecimal value above 255: `\\x%x'"
+#~ msgstr "heksadecimalna vrijednost viša od 255: `\\x%x'"
+
+#~ msgid "unknown escape sequence: `\\' followed by `%s'"
+#~ msgstr "nepoznata escape sekvenca: `\\' koju slijedi `%s'"
+
+#~ msgid "unterminated type name at end of file"
+#~ msgstr "nezavršeno ime tipa pri kraju datoteke"
+
+#~ msgid "unterminated type name"
+#~ msgstr "nezavršeno ime tipa"
+
+#~ msgid "use \"...\" for multi-character literal tokens"
+#~ msgstr "koristi \"...\" za višebajtne znakove"
+
+#~ msgid "`%s' supports no argument: %s"
+#~ msgstr "`%s' ne podržava argument: %s"
+
+#~ msgid "`%s' requires an argument"
+#~ msgstr "`%s' zahtijeva argument"
+
+#~ msgid "maximum table size (%d) exceeded"
+#~ msgstr "maksimalna veličina tablice (%d) prekoračena"
+
+#~ msgid "   (rule %d)"
+#~ msgstr "   (pravilo %d)"
+
+#~ msgid "    $default\taccept\n"
+#~ msgstr "    $default\tprihvati\n"
+
+#~ msgid "    NO ACTIONS\n"
+#~ msgstr "    NEMA AKCIJA\n"
+
+#~ msgid "    %-4s\terror (nonassociative)\n"
+#~ msgstr "    %-4s\tgreška (nonassociative)\n"
+
+#~ msgid "    %-4s\tgo to state %d\n"
+#~ msgstr "    %-4s\tidu u stanje %d\n"
+
+#~ msgid "Number, Line, Rule"
+#~ msgstr "Broj, Linija, Pravilo"
+
+#~ msgid "  %3d %3d %s ->"
+#~ msgstr "  %3d %3d %s ->"
+
+#~ msgid "   Skipping to next \\n"
+#~ msgstr "   Preskačem na slijedeće \\n"
+
+#~ msgid "   Skipping to next %c"
+#~ msgstr "   Preskačem na slijedeći %c"
+
+#~ msgid "unterminated string"
+#~ msgstr "nezavršeni znakovni niz"
+
+#~ msgid "invalid @ value"
+#~ msgstr "nedozvoljena  @ vrijednost"
+
+#~ msgid "%s is invalid"
+#~ msgstr "%s je nedozvoljeno"
+
+#~ msgid "unterminated `%{' definition"
+#~ msgstr "nezavršena `%{' definicija"
+
+#~ msgid "Premature EOF after %s"
+#~ msgstr "Preuranjeni EOF nakon %s"
+
+#~ msgid "`%s' is invalid in %s"
+#~ msgstr "`%s' je nedozvoljen u %s"
+
+#~ msgid "%type declaration has no <typename>"
+#~ msgstr "%type deklaracija nema  <typename>"
+
+#~ msgid "invalid %%type declaration due to item: %s"
+#~ msgstr "nedozvoljena %%type deklaracija zbog: %s"
+
+#~ msgid "invalid text (%s) - number should be after identifier"
+#~ msgstr "nedozvoljeno tekst (%s) - broj bi trebao biti nakon identifikatora"
+
+#~ msgid "unmatched %s"
+#~ msgstr "nije pronađen %s"
+
+#~ msgid "argument of %%expect is not an integer"
+#~ msgstr "argument od %%expect nije cijeli broj"
+
+#~ msgid "unrecognized item %s, expected an identifier"
+#~ msgstr "neprepoznati %s, očekivan nakon identifikatora"
+
+#~ msgid "expected string constant instead of %s"
+#~ msgstr "očekivana znakovna konstana umjesto %s"
+
+#~ msgid "unrecognized: %s"
+#~ msgstr "neprepoznati: %s"
+
+#~ msgid "no input grammar"
+#~ msgstr "nema ulazne gramatike"
+
+#~ msgid "unterminated %guard clause"
+#~ msgstr "nezavršena %guard klauzula"
+
+#~ msgid "ill-formed rule: initial symbol not followed by colon"
+#~ msgstr "loše pravilo: zarez ne bi trebao slijediti početni simbol"
+
+#~ msgid "grammar starts with vertical bar"
+#~ msgstr "gramatika počinje sa okomitom crtom"
+
+#~ msgid "previous rule lacks an ending `;'"
+#~ msgstr "prethodnom pravilu nedostaje završetak `;'"
+
+#~ msgid "two @prec's in a row"
+#~ msgstr "dva @prec's u retku"
+
+#~ msgid "%%guard present but %%semantic_parser not specified"
+#~ msgstr "%%guard prisutan ali %%semantic_parser nije specificiran"
+
+#~ msgid "two actions at end of one rule"
+#~ msgstr "dvije akcije pri kraju jednog pravila"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "objema znakovima %s i %s je pridružen broj %d"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "konflikt u prethodnici za %s and %s"
+
+#~ msgid "Useless nonterminals:"
+#~ msgstr "Beskorisni nezavršni znakovi:"
+
+#~ msgid "Terminals which are not used:"
+#~ msgstr "Završni znakovi koji nisu korišteni:"
+
+#~ msgid "Useless rules:"
+#~ msgstr "Beskorisna pravila:"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d pravilo nije nikad reducirano\n"
+#~ msgstr[1] "%d pravila nisu nikad reducirana\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d beskorisan nezavršni znak"
+#~ msgstr[1] "%d beskorisnih nezavršnih znakova"
+
+#~ msgid " and "
+#~ msgstr " i"
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d beskorisno pravilo"
+#~ msgstr[1] "%d beskorisnih pravila"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: nedozvoljena opcija -- %c\n"
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644
index 0000000..eb657e4
--- /dev/null
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..fdbdb1e
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,1250 @@
+# Pesan bahasa indonesia untuk bison
+# bison 1.875 (Indonesian)
+# Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Tedi Heriyanto <tedi_h@gmx.net>, 2002, 2003.
+# Tedi Heriyanto <tedi_heriyanto@yahoo.com>, 2006.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2008, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-2.4.1b\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-02-27 07:30+0700\n"
+"Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "peringatan"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "Kesalahan I/O"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "kesalahan fatal"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Konflik antara aturan %d dan token %s diselesaikan sebagai shift"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Konflik antara aturan %d dan token %s diselesaikan sebagai reduce"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Konflik antara aturan %d dan token %s diselesaikan sebagai kesalahan"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflik: %d geser/kurangi, %d kurangi/kurangi\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflik: %d geser/kurangi\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflik: %d kurangi/kurangi\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "State %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr hanya berlaku bagi parser GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "mengharapkan %d shift/reduce konflik"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "diharapkan %d kurangi/kurangi konflik"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "tidak dapat membuka file `%s'"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "tidak dapat menutup file"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "menolak untuk overwrite berkas masukan %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "output konflik ke file %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Penggunaan: %s [OPTION]... FILE\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr "Argumen wajib untuk opsi panjang juga wajib untuk opsi pendek juga.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Itu juga benar untuk opsional argumen.\n"
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Mode Operasi:\n"
+"  -h, --help                 tampilkan bantuan ini dan keluar\n"
+"  -V, --version              tampilkan informasi versi dan keluar\n"
+"       --print-localedir     direktori hasil berisikan data locale-"
+"dependent\n"
+"       --print-datadir       direktori hasil berisikan kerangka dan XSLT\n"
+"  -y, --yacc                 emulasikan POSIX yacc\n"
+"  -W, --warnings=[KATEGORI]  laporkan peringatan kegagalan dalam KATEGORI\n"
+"\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -L, --language=BAHASA      spesifikasikan bahasa keluaran pemrograman\n"
+"                             (ini adalah fitur uji coba)\n"
+"  -S, --skeleton=FILE        specifikasikan rangka yang akan digunakan\n"
+"  -t, --debug                instrumen parser untuk debugging\n"
+"      --locations            aktifkan lokasi perhitungan\n"
+"  -p, --name-prefix=PREFIX   tambahkan PREFIX ke simbol eksternal\n"
+"  -l, --no-lines             jangan hasilkan direktiv `#line'\n"
+"  -n, --no-parser            hasilkan hanya tabel\n"
+"  -k, --token-table          sertakan tabel nama token\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Output:\n"
+"      --defines              juga hasilkan file header\n"
+"  -d                         seperti itu tetapi tidak dapat "
+"menspesifikasikan BERKAS (untuk POSIX Yacc)\n"
+"  -r, --report=THINGS        juga hasilkan detil tentang otomaton\n"
+"      --report-file=BERKAS   tulis laporan ke BERKAS\n"
+"  -v, --verbose              sama seperti `--report=state'\n"
+"  -b, --file-prefix=PREFIX   spesifikasikan PREFIX untuk file output\n"
+"  -o, --output=FILE          simpan output ke FILE\n"
+"  -g, --graph                juga hasilkan deskripsi VCG automaton\n"
+
+#: src/getargs.c:361
+#, fuzzy
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Kategori peringatan termasuk:\n"
+"  `midrule-values'  unset atau tidak menggunakan aturan midrule\n"
+"  `yacc'            tidak kompatibel dengan POSIX YACC\n"
+"  `all'             seluruh peringatan\n"
+"  `no-CATEGORY'     non-aktifkan peringatan di KATEGORI\n"
+"  `none'            non-aktifkan seluruh peringatan\n"
+"  `error'           perlakukan peringatan sebagai errors\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"THINGS adalah daftar kata yang dipisahkan koma mencakup:\n"
+"  `state'        menggambarkan state\n"
+"  `itemset'      lengkapi himpunan item inti dengan klosurnya\n"
+"  `lookahead'    asosiasikan lookaheads ke item secara eksplisit\n"
+"  `solved'       gambarkan penyelesaian konflik shift/reduce\n"
+"  `all'          sertakan semua informasi di atas\n"
+"  `none'         tiadakan laporan\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Laporkan bugs ke <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Written by Robert Corbett and Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "deklarasi kerangka ganda tidak valid"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "bahasa tidak valid: `%s'"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "deklarasi bahasa ganda tidak valid"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "operand hilang setelah `%s'"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "operand ekstra `%s'"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "kosong"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammar"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "overflow nomor baris"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "overflow jumlah kolom"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "aturan tidak berguna dalam parser karena konflik"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "%s `%s' didefinisikan ulang"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "definisi sebelumnya"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, fuzzy, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "nilai tidak valid untuk %%define variable `%s': `%s'"
+
+#: src/muscle-tab.c:550
+#, fuzzy, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "nilai tidak valid untuk %%define Boolean variable `%s'"
+
+#: src/muscle-tab.c:609
+#, fuzzy, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "nilai tidak valid untuk %%define variable `%s': `%s'"
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "nilai tidak digunakan: $%d"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "identifier tidak ada dalam deklarasi parameter"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " tipe %d adalah %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "geser, dan ke state %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "ke state %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "kesalahan(nonasosiatif)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "kurangi gunakan aturan %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "terima"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "State %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminal, dengan aturan tempat mereka muncul"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Nonterminal, dengan aturan tempat mereka muncul"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " di kiri:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " di kanan:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "aturan tidak berguna dalam parser karena konflik"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "deklarasi ganda %s"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "tipe hasil bentrok pada fungsi merge '%s': <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "deklarasi sebelumnya"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "aturan diberikan untuk %s, yang merupakan sebuah token"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "bentrokan tipe pada aksi baku: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "aturan kosong untuk nonterminal typed, dan tidak ada aksi"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "nilai tidak digunakan: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "nilai tidak diset: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "tanda untuk %%prec belum didefinisikan: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "hanya satu %s yang dibolehkan per aturan"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s hanya mempengaruhi parser GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s harus diikuti angka positif"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "aturan terlalu panjang"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "tidak ada aturan dalam tata bahasa masukan"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "aturan tidak berguna dalam tata bahasa"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "bukan terminal tidak berguna dalam tata bahasa: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Bukan terminal, tidak berguna dalam tata bahasa"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Terminal tidak digunakan dalam tata bahasa"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Aturan tidak berguna dalam tata bahasa"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d bukan terminal tidak berguna dalam tata bahasa"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d aturan tidak berguna dalam tata bahasa"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "simbol awal %s tidak melahirkan kalimat"
+
+#: src/scan-code.l:188
+#, fuzzy, c-format
+msgid "stray '%s'"
+msgstr "kelebihan `$'"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "integer ke luar batas: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "direktif tidak valid: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "argumen %s ambigu untuk %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "tipe eksplisit diberikan dalam tata bahasa yang tidak diketikan"
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr ""
+"$$ untuk aturan tengah di $%d dari `%s' tidak memiliki tipe yang terdeklarasi"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ dari `%s' tidak memiliki tipe yang terdeklarasi"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d dari `%s' tidak memiliki tipe yang terdeklarasi"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "stray `,' dianggap sebagai white space"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "direktif tidak valid: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "direktif tidak valid: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "karakter tidak valid: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "karakter tidak valid setelah \\-escape: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "karakter null tidak valid"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "nomor tidak valid setelah \\-escape: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "karakter tidak valid setelah \\-escape: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "kehilangan `%s' di akhir file"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "hilang `%s' di akhir baris"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "direktif %s tidak tertutup dalam kerangka"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "terlalu sedikit argumen untuk direktif %s dalam skeleton"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "terlalu banyak argumen untuk direktif %s dalam skeleton"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "nilai $ tidak valid: %d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "terlalu banyak simbol dalam grammar input (batasnya adalah %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s redeklarasi untuk %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s redeklarasi untuk <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "simbol %s didefinisikan ulang"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "simbol %s dideklarasikan ulang"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "mendefinisikan ulang nomor token user %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"simbol %s digunakan, namun tidak didefinisikan sebagai token dan tidak "
+"memiliki aturan"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "simbol `%s' digunakan lebih dari satu kali sebagai string literal"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "simbol `%s' diberikan lebih dari satu string literal"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "%s redeklarasi untuk %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "deklarasi sebelumnya"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "simbol awal %s tidak didefinisikan"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "simbol awal %s adalah sebuah token"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "deklarasi ulang untuk tagged %%destructor baku"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "deklarasi ulang untuk tagless %%destructor baku"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "deklarasi ulang untuk tagged %%printer baku"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "deklarasi ulang untuk taggless %%printer baku"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "program subsider `%s' tidak dapat dipanggil"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "program subsider `%s' tidak dapat dipanggil"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argument %s tidak valid untuk %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumen %s ambigu untuk %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Argumen valid adalah:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u freed (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u cached (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u cached (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u cached (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "hitung log histogram\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "ukuran log histogram\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "kepadatan histogram\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistik bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Run terakumulasi = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Tidak dapat membaca file stat."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Ukuran file stat buruk.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Tidak dapat menulis file stat."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Tidak dapat membuka file stat untuk ditulisi."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "kesalahan fatal"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Kesalahan sistem tidak dikenal"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: pilihan '%s' ambigu\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: pilihan '--%s' tidak membolehkan sebuah argumen\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: pilihan '%c%s' tidak membolehkan sebuah argumen\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: pilihan '%s' membutuhkan sebuah argumen\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: pilihan tidak dikenal '--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: pilihan tidak dikenal '%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: pilihan tidak valid -- '%c'\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: pilihan membutuhkan sebuah argumen -- '%c'\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: pilihan '-W %s' ambigu\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: pilihan '-W %s' tidak membolehkan sebuah argumen\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: pilihan '%s' membutuhkan sebuah argumen\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memori habis"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "tidak dapat menutup file"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Waktu eksekusi (detik)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTAL                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "waktu dalam %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "state %d"
+
+#, fuzzy
+#~ msgid "stray '@'"
+#~ msgstr "kelebihan `@'"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "tidak terdefinisi %%define variabel `%s' dilewatkan ke "
+#~ "muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "tidak terdefinisi %%define variabel `%s' dilewatkan ke "
+#~ "muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "tidak terdefinisi %%define variable `%s' dilewatkan ke "
+#~ "muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "tidak terdefinisi %%define variabel `%s' dilewatkan ke "
+#~ "muscle_percent_define_check_values"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Hasilkan parser LALR(1) dan GLR.\n"
+#~ "\n"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "token %s dan %s keduanya memiliki angka %d"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "urutan escape tidak valid: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "urutan escape tidak dikenal: %s"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: option ilegal -- %c\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Jika option panjang menyatakan argumen sebagai mandatori, maka ia "
+#~ "mandatori juga\n"
+#~ "untuk option pendek.  Hal yang sama untuk argumen opsional.\n"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Aturan tidak pernah dikurangi"
+
+#~ msgid "useless rule"
+#~ msgstr "aturan tidak berguna"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "nonterminal tidak berguna: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Nonterminal tidak berguna"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Terminal yang tidak digunakan"
+
+#~ msgid "Useless rules"
+#~ msgstr "Useless rules"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "Aturan %d tidak pernah dikurangi\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "nonterminal tidak berguna %d"
+
+#~ msgid " and "
+#~ msgstr " dan "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "aturan tidak berguna %d"
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644
index 0000000..710d7b6
--- /dev/null
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..88e1f10
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,1293 @@
+# Italian translation for message of GNU bison.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Paolo Bonzini <bonzini@gnu.org>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.0\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-05-23 12:37+0100\n"
+"Last-Translator: Paolo Bonzini <bonzini@gnu.org>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "attenzione"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "errore di input/output"
+
+#: src/complain.c:208 src/complain.c:215
+#, fuzzy
+msgid "fatal error"
+msgstr "errore fatale: "
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Conflitto tra la regola %d e il token %s risolto come shift"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Conflitto tra la regola %d e il token %s risolto come riduzione"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Conflitto tra la regola %d e il token %s risolto come errore"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflitti: %d shift/riduzione, %d riduzione/riduzione\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr " %d conflitti shift/riduzione\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr " %d conflitti riduzione/riduzione\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Stato %d"
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr considerato solo nei parser GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "atteso %d conflitto shift/riduzione"
+msgstr[1] "attesi %d conflitti shift/riduzione"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "atteso %d conflitto riduzione/riduzione"
+msgstr[1] "attesi %d conflitti riduzione/riduzione"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "impossibile aprire il file `%s'"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, fuzzy, c-format
+msgid "cannot close file"
+msgstr "impossibile chiudere il file `%s'"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "conflitto nell'output sul file %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Provare `%s --help' per ulteriori informazioni.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Utilizzo: %s [OPZIONE]... FILE\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -S, --skeleton=FILE        specifica lo scheletro da usare\n"
+"  -t, --debug                aggiunge informazioni di debug al parser\n"
+"      --locations            abilita il calcolo delle locazioni (@N)\n"
+"  -p, --name-prefix=PREFISSO prepone PREFIX ai simboli globali\n"
+"  -l, --no-lines             non genera direttive `#line'\n"
+"  -n, --no-parser            genera le sole tabelle\n"
+"  -k, --token-table          include una tabella di nomi dei token\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Output:\n"
+"  -d, --defines              produce anche uno header\n"
+"  -r, --report=PARTI         produce anche dettagli sull'automa\n"
+"  -v, --verbose              produce anche una spiegazione dell'automa\n"
+"  -b, --file-prefix=PREFISSO specifica un prefisso per il file di output\n"
+"  -o, --output=FILE          lascia l'output in FILE\n"
+"  -g, --graph                produce anche una descrizione VCG dell'automa\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+#, fuzzy
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"PARTI è un elenco di parole separate da virgola scelte tra:\n"
+"  `state'        descrive gli stati\n"
+"  `itemset'      completa gli insiemi dei simboli con la loro chiusura "
+"transitiva\n"
+"  `look-ahead'   associa i token di prospezione ai simboli\n"
+"  `solved'       descrive la riduzione dei conflitti shift/riduzione\n"
+"  `all'          include tutte queste informazioni\n"
+"  `none'         disabilita la produzione del rapporto\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Segnalare eventuali bug a <bug-bison@gnu.org>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Scritto da Robert Corbett e Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Questo e' software libero; vedere il sorgente per le condizioni cui e'\n"
+"sottoposta la copia. NON c'è ALCUNA garanzia, neanche di\n"
+"COMMERCIABILITA` o di ADEGUATEZZA AD UN PARTICOLARE SCOPO.\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "dichiarazioni multiple per %s"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "valore non valido: %s"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "dichiarazioni multiple per %s"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "manca un operando dopo `%s'"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "operando non richiesto `%s'"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "vuoto"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammatica"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr ""
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr ""
+
+#: src/main.c:146
+#, fuzzy
+msgid "rule useless in parser due to conflicts"
+msgstr "regola mai ridotta a causa dei conflitti"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "simbolo %s ridefinito"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr ""
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "valore non valido: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "manca un identificatore nella dichirazione di un parametro"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " il tipo %d è %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "shift e prosecuzione allo stato %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "prosecuzione allo stato %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "errore (non associativo)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "riduzione con la regola %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "accetta"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Stato %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Simboli terminali e regole in cui appaiono"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Simboli nonterminali e regole in cui appaiono"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " nel primo membro:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " nel secondo membro:"
+
+#: src/print.c:510
+#, fuzzy
+msgid "Rules useless in parser due to conflicts"
+msgstr "regola mai ridotta a causa dei conflitti"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "dichiarazioni multiple per %s"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+"conflitto nei tipi del risultato della funzione di merge %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+#, fuzzy
+msgid "previous declaration"
+msgstr "prima dichiarazione"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "fornita una regola per il token %s"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "conflitto di tipo nell'azione di default: <%s> e <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "regola vuota e nessuna azione per un nonterminale con tipo"
+
+#: src/reader.c:328
+#, fuzzy, c-format
+msgid "unused value: $%d"
+msgstr "valore non valido: %s"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr ""
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "solo un %s è permesso in una regola"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s considerato solo nei parser GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s deve essere seguito da un intero positivo"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr ""
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "nessuna regola nella grammatica di input"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "nessuna regola nella grammatica di input"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "Simboli nonterminali e regole in cui appaiono"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "nessuna regola nella grammatica di input"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "nessuna regola nella grammatica di input"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "nessuna regola nella grammatica di input"
+msgstr[1] "nessuna regola nella grammatica di input"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "dal simbolo iniziale %s non deriva alcuna frase"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "intero fuori dai limiti: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "direttiva non valida: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "argomento ambiguo %s per %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "Manca una dichiarazione di tipo per $%d di `%s'"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "Manca una dichiarazione di tipo per $$ di `%s'"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "Manca una dichiarazione di tipo per $%d di `%s'"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "`,' inattesa interpretata come uno spazio"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "direttiva non valida: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "direttiva non valida: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "carattere non valido: %s"
+msgstr[1] "carattere non valido: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "carattere non valido: %s"
+msgstr[1] "carattere non valido: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "carattere nullo non valido"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "carattere nullo non valido: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "carattere non valido: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "manca un `%s' alla fine del file"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "manca un `%s' alla fine della linea"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, fuzzy, c-format
+msgid "invalid $ value: $%d"
+msgstr "valore non valido: %s"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "troppi simboli nella grammatica (il limite è %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "dichiarazione due volte di %s per %s"
+
+#: src/symtab.c:164
+#, fuzzy, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "dichiarazione due volte di %s per %s"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "simbolo %s ridefinito"
+
+#: src/symtab.c:346
+#, fuzzy, c-format
+msgid "symbol %s redeclared"
+msgstr "simbolo %s ridefinito"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "numero di token definito dall'utente specificato due volte per %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr "usato il simbolo %s, ma non è un token e non ha regole"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "simbolo `%s' usato più di una volta in una stringa letterale"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "il simbolo `%s' dà pi&grave; di una stringa letterale"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "dichiarazione due volte di %s per %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "dichiarazione due volte di %s per %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "simbolo iniziale %s non definito"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "specificato il token %s come simbolo iniziale"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "esecuzione del programma ausiliario `%s' fallita"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "impossibile trovare il programma ausiliario `%s'"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argomento non valido %s per %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argomento ambiguo %s per %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Gli argomenti validi sono:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_alloc, %u liberati (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_set, %u in cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_reset, %u in cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_test, %u in cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_list\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "istogramma dei conteggi\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "istogramma delle dimensioni\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "istogranna delle densità\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistiche dei bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Esecuzioni accumulate = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Impossibile leggere il file delle statistiche."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Dimensione errata del file delle statistiche.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Impossibile scrivere il file delle statistiche."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Impossibile aprire in scrittura il file delle statistiche."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "errore fatale: "
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Errore di sistema sconosciuto"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: l'opzione `%s' è ambigua\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: l'opzione `--%s' non ammette argomenti\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: l'opzione `%c%s' non ammette argomenti\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: l'opzione `%s' richiede un argomento\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: opzione sconosciuta `--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: opzione sconosciuta `%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opzione non valida -- %c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: l'opzione richiede un argomento -- %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: l'opzione `-W %s' è ambigua\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: l'opzione `-W %s' non ammette un argomento\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: l'opzione `%s' richiede un argomento\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoria esaurita"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "impossibile chiudere il file `%s'"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Tempo di esecuzione (in secondi)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTALE                :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "tempo in %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "stato %d"
+
+#~ msgid "warning: "
+#~ msgstr "attenzione: "
+
+#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
+#~ msgstr "GNU bison genera parser per grammatiche LALR(1).\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Se un argomento è indicato come obbligatorio in un'opzione lunga, allora\n"
+#~ "è obbligatorio anche per l'equivalente opzione corta.  Analogamente per\n"
+#~ "gli argomenti opzionali.\n"
+
+#~ msgid ""
+#~ "Operation modes:\n"
+#~ "  -h, --help      display this help and exit\n"
+#~ "  -V, --version   output version information and exit\n"
+#~ "  -y, --yacc      emulate POSIX yacc\n"
+#~ msgstr ""
+#~ "Modalità operative:\n"
+#~ "  -h, --help      mostra questo aiuto ed esce\n"
+#~ "  -V, --version   mostra informazioni sulla versione ed esce\n"
+#~ "  -y, --yacc      emula il comportamento di POSIX yacc\n"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "POSIX proibisce l'uso di dichiarazioni interne alla grammatica"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Regole mai ridotte"
+
+#~ msgid "useless rule"
+#~ msgstr "regola inutile"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "simbolo nonterminale inutilizzato: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Simboli nonterminali inutili"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Simboli terminali inutilizzati"
+
+#~ msgid "Useless rules"
+#~ msgstr "Regole inutili"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d regola non applicata\n"
+#~ msgstr[1] "%d regole non applicate\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d simbolo nonterminale inutilizzato"
+#~ msgstr[1] "%d simboli nonterminali inutilizzati"
+
+#~ msgid " and "
+#~ msgstr " e "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d regola inutile"
+#~ msgstr[1] "%d regole inutili"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "escape non valido: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "escape non riconosciuto: %s"
+
+#~ msgid "missing `{' in `%s'"
+#~ msgstr "manca un `{' in `%s'"
+
+#~ msgid "invalid $ value"
+#~ msgstr "valore $ non valido"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "i token %s e %s hanno lo stesso numero %d"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opzione non valida -- %c\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "impossibile invocare il programma ausiliario `%s'"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr ""
+#~ "esecuzione del programma ausiliario `%s' fallita (codice di uscita %d)"
+
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "errore di sintassi: impossibile tornare indietro"
+
+#~ msgid "Stack now"
+#~ msgstr "Contenuto dello stack"
+
+#~ msgid "Reducing stack by rule %d (line %u), "
+#~ msgstr "riduzione con la regola %d (linea %u)"
+
+#~ msgid "parser stack overflow"
+#~ msgstr "stack troppo grande"
+
+#~ msgid "Stack size increased to %lu\n"
+#~ msgstr "La nuova dimensione dello stack è %lu\n"
+
+#~ msgid "Entering state %d\n"
+#~ msgstr "Prosecuzione allo stato %d\n"
+
+#~ msgid "Reading a token: "
+#~ msgstr "Leggo un token: "
+
+#~ msgid "Now at end of input.\n"
+#~ msgstr "Ora alla fine del file.\n"
+
+#~ msgid "Next token is"
+#~ msgstr "Il prossimo token è"
+
+#~ msgid "Shifting"
+#~ msgstr "Shift"
+
+#~ msgid "syntax error, unexpected %s"
+#~ msgstr "errore di sintassi, %s non atteso"
+
+#~ msgid "syntax error, unexpected %s, expecting %s"
+#~ msgstr "errore di sintassi, atteso %2$s e non %1$s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s"
+#~ msgstr "errore di sintassi, atteso %2$s o %3$s e non %1$s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+#~ msgstr "errore di sintassi, atteso %2$s o %3$s o %4$s e non %1$s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+#~ msgstr "errore di sintassi, atteso %2$s o %3$s o %4$s o %5$s e non %1$s"
+
+#~ msgid "syntax error; also memory exhausted"
+#~ msgstr "errore di sintassi; memoria esaurita"
+
+#~ msgid "syntax error"
+#~ msgstr "errore di sintassi"
+
+#~ msgid "Error: discarding"
+#~ msgstr "Errore: scarto"
+
+#~ msgid "Error: popping"
+#~ msgstr "Errore: pop di"
+
+#~ msgid "Error: discarding lookahead"
+#~ msgstr "Errore: scarto il lookahead"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644
index 0000000..4e8482a
--- /dev/null
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..da8fa06
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,1760 @@
+# Japanese message for GNU bison
+# Copyright (C) 2001, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 2001.
+# Yasuaki Taniguchi <yasuakit@gmail.com>, 2010
+# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2012
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison 2.5.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-06-10 18:47+0900\n"
+"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "警告"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "エラー"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "致命的エラー"
+
+#: src/conflicts.c:77
+#, fuzzy, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
+
+#: src/conflicts.c:86
+#, fuzzy, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
+
+#: src/conflicts.c:94
+#, fuzzy, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
+
+#: src/conflicts.c:492
+#, fuzzy, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "変化記号を半音低くする"
+
+#: src/conflicts.c:495
+#, fuzzy, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "変化記号を半音低くする"
+
+#: src/conflicts.c:497
+#, fuzzy, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "発光を減らす(_L)"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "状態 %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr ""
+
+#: src/conflicts.c:616
+#, fuzzy, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "本来 %d 個のシフト/還元衝突であるはずです\n"
+
+#: src/conflicts.c:621
+#, fuzzy, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "ホスト名の衝突\n"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: 開くことができません"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "入力/出力エラーです"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "ファイルを閉じることができません"
+
+#: src/files.c:352
+#, fuzzy, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr " ファイルを上書きしようとした際, 再取得に失敗しました"
+
+#: src/files.c:362
+#, fuzzy, c-format
+msgid "conflicting outputs to file %s"
+msgstr "リモートファイルへの参照"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "`%s --help' で詳細情報を参照してください\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "使い方: %s [オプション]... ファイル\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+#, fuzzy
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr "長いオプションに必須の引数は短いオプションにも必須です.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "オプションの引数についても同様です。\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"構文解析器:\n"
+"  -S, --skeleton=FILE        利用するスケルトンを指定する\n"
+"  -t, --debug                構文解析のデバッグ用の手段\n"
+"      --locations            計算結果位置を有効にする\n"
+"  -p, --name-prefix=PREFIX   PREFIX を外部シンボルとして先頭に挿入する\n"
+"  -l, --no-lines             `#line' ディレクティブを生成しない\n"
+"  -n, --no-parser            テーブルのみを生成する\n"
+"  -k, --token-table          トークン名のテーブルを含める\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"バグを発見したら <%s> 宛に報告して下さい。\n"
+"翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してくださ"
+"い。\n"
+
+#: src/getargs.c:396
+#, fuzzy, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "%s のホームページ: <%s>\n"
+
+#: src/getargs.c:397
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/>\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Robert Corbett と Richard Stallman によって書かれました\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"[参考訳 -- 法的効力は英文が適用されます]\n"
+"これはフリーソフトウェアです -- 複製についての条件はソースを見ましょう。\n"
+"一切の保証はありません -- 商業性や目的適合性についての保証すらありません。\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "%s が複数個宣言されました"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: 無効な言語"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "%s が複数個宣言されました"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: オペランドがありません"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "余分なオペランド %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "空"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "文法"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "行番号がオーバーフローしました"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "列番号がオーバーフローしました"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "衝突のせいでパーサ内の規則が使用できません"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "変数インデックスが不正です"
+
+#: src/muscle-tab.c:453
+#, fuzzy
+msgid "previous definition"
+msgstr "前の定義がここにありました"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, fuzzy, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "警告: 未定義の変数 `%.*s'"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, fuzzy, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "アイコン型として不適切な値 '%s'"
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "無効な値\n"
+
+#: src/parse-gram.y:747
+#, fuzzy, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "マクロ仮引数リストに ')' がありません"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " タイプ %d は %s です\n"
+
+#: src/print.c:164
+#, fuzzy, c-format
+msgid "shift, and go to state %d\n"
+msgstr "    %-4s\tシフト、および状態 %d へ\n"
+
+#: src/print.c:166
+#, fuzzy, c-format
+msgid "go to state %d\n"
+msgstr "先頭に移動"
+
+#: src/print.c:203
+#, fuzzy
+msgid "error (nonassociative)\n"
+msgstr "%s サブプロセス入出力エラー"
+
+#: src/print.c:226
+#, fuzzy, c-format
+msgid "reduce using rule %d (%s)"
+msgstr " (\"%s\"からの規則, %d行)"
+
+#: src/print.c:228
+#, fuzzy, c-format
+msgid "accept"
+msgstr "許可する(_A)"
+
+#: src/print.c:264 src/print.c:338
+#, fuzzy
+msgid "$default"
+msgstr "デフォルト"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "状態 %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "出現位置の規則による終端"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "出現位置の規則による非終端"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " 左辺:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " 右辺:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "衝突のせいでパーサ内の規則が使用できません"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "%s が複数個宣言されました"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "初期状態の動作では型 (`%s' `%s') が衝突します"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+#, fuzzy
+msgid "previous declaration"
+msgstr "スコープの宣言"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "%s の重複するシンボル名を無視します"
+
+#: src/reader.c:249
+#, fuzzy, c-format
+msgid "rule given for %s, which is a token"
+msgstr "%s に規則が与えられ、それはトークンとなります"
+
+#: src/reader.c:304
+#, fuzzy, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "初期状態の動作では型 (`%s' `%s') が衝突します"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "空の型付き非終端アイテム用規則であり、動作が起りません"
+
+#: src/reader.c:328
+#, fuzzy, c-format
+msgid "unused value: $%d"
+msgstr "無効な値\n"
+
+#: src/reader.c:330
+#, fuzzy
+msgid "unset value: $$"
+msgstr "無効な値\n"
+
+#: src/reader.c:341
+#, fuzzy, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "トークン %s の値は適切な UTF-8 文字列ではありません"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, fuzzy, c-format
+msgid "only one %s allowed per rule"
+msgstr "一つの条件部につき一つしか `else' を使えません"
+
+#: src/reader.c:441 src/reader.c:456
+#, fuzzy, c-format
+msgid "%s affects only GLR parsers"
+msgstr "コード変換はテキスト型添付ファイルにのみ有効。"
+
+#: src/reader.c:443
+#, fuzzy, c-format
+msgid "%s must be followed by positive number"
+msgstr "フィールド名 `%.*s' の後はコロンでなければなりません"
+
+#: src/reader.c:554
+#, fuzzy, c-format
+msgid "rule is too long"
+msgstr "述部が長すぎます"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "入力した文法に規則が定義されていません"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "入力した文法に規則が定義されていません"
+
+#: src/reduce.c:302
+#, fuzzy, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "入力した文法に規則が定義されていません"
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "入力した文法に規則が定義されていません"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "入力した文法に規則が定義されていません"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "入力した文法に規則が定義されていません"
+
+#: src/reduce.c:385
+#, fuzzy, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "入力した文法に規則が定義されていません"
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "入力した文法に規則が定義されていません"
+
+#: src/reduce.c:419
+#, fuzzy, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "開始シンボル %s はどの文にも由来しません"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "将来のバージョンの Bison は ';' を追加しません"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, fuzzy, c-format
+msgid "refers to: %c%s at %s"
+msgstr "'%s' はディレクトリを指しています"
+
+#: src/scan-code.l:450
+#, fuzzy, c-format
+msgid "possibly meant: %c"
+msgstr "多分、カウントが間違っています。"
+
+#: src/scan-code.l:459
+#, fuzzy, c-format
+msgid ", hiding %c"
+msgstr "入/退出メッセージの制限"
+
+#: src/scan-code.l:467
+#, fuzzy, c-format
+msgid " at %s"
+msgstr "%s (%s) at "
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "整数が値の範囲外です: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "無効な参照: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"'%c' の後に文法エラーがあります。整数、文字、'_', '[','$' が来るはずです。"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, fuzzy, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "%s が gflares_list 中に見付かりません"
+
+#: src/scan-code.l:648
+#, fuzzy, c-format
+msgid "misleading reference: %s"
+msgstr "高度の単位"
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "高度の単位"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$%d 個の `%s' が宣言された型を持っていません"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "`%s' の $$ に宣言のない型があります"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "`%s' の $$ に宣言のない型があります"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr ""
+
+#: src/scan-gram.l:222
+#, fuzzy, c-format
+msgid "invalid directive: %s"
+msgstr "無効な #%s 指示です"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "不正なURN %1: 不適切な名前空間識別子"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "無効な文字: `%s'"
+
+#: src/scan-gram.l:354
+#, fuzzy, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "識別子 \"%s\" は C++ の特別な演算子名です"
+
+#: src/scan-gram.l:376
+#, fuzzy, c-format
+msgid "an identifier expected"
+msgstr "識別子が期待されています."
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "無効なユーザ名 \"%s\" が %s:%d にあります。中断します"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "空の文字定数"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, fuzzy, c-format
+msgid "extra characters in character literal"
+msgstr "リテラル中で null 文字が確保されました"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "無効な null 文字"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "-q= の後に番号が期待されますが、%s が与えられました\n"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "エスケープキャラクタを決定できません"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "ファイル末尾に %s がありません"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "行末に %s がありません"
+
+#: src/scan-skel.l:146
+#, fuzzy, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "文字列が命令の途中で終わっています."
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "無効な $ 値: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, fuzzy, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "シンボルが多すぎます (トークン + 非終端アイテム) -- 最大 %d"
+
+#: src/symtab.c:154
+#, fuzzy, c-format
+msgid "%s redeclaration for %s"
+msgstr "\"%s\" のラベル:"
+
+#: src/symtab.c:164
+#, fuzzy, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "\"%s\" のラベル:"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "シンボル %s が再定義されました"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "シンボル %s が再宣言されました"
+
+#: src/symtab.c:367
+#, fuzzy, c-format
+msgid "redefining user token number of %s"
+msgstr "%s に先行した再定義です"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"シンボル %s が使われていますが、トークンとして定義されておらず、規則を持ちま"
+"せん"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "シンボル `%s' はリテラル文字列として複数回使われました"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "シンボル `%s' は複数のリテラル文字列が与えられました"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "%s の型が再定義されました"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "%s に対する以前の宣言"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "開始シンボル %s は定義されていません"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "開始シンボル %s はトークンです"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "'%s' の削除に失敗しました"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "一時ファイルの生成に失敗しました"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "標準入力の保存に失敗しました"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "標準出力の保存に失敗しました"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, fuzzy, c-format
+msgid "opening of tmpfile failed"
+msgstr "辞書を開くのに失敗しました: %s"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, fuzzy, c-format
+msgid "opening of a temporary file failed"
+msgstr "作業用ファイルのオープンに失敗しました"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "シグナルによる割り込み"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "%s: シェルプログラムが見つかりませんでした"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%2$s に対する引数 %1$s が間違っています"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%2$s に対する引数 %1$s が曖昧です"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "有効な引数:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr ""
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:190
+#, fuzzy, c-format
+msgid "%u bitset_lists\n"
+msgstr "パッケージリストを読み込んでいます"
+
+#: lib/bitset_stats.c:192
+#, fuzzy
+msgid "count log histogram\n"
+msgstr ""
+"ヒストグラムダイアログを開きます。\n"
+"アクティブな画像のヒストグラムを表示します。"
+
+#: lib/bitset_stats.c:195
+#, fuzzy
+msgid "size log histogram\n"
+msgstr "ログの合計サイズ:"
+
+#: lib/bitset_stats.c:198
+#, fuzzy
+msgid "density histogram\n"
+msgstr "ヒストグラムの種類"
+
+#: lib/bitset_stats.c:212
+#, fuzzy, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr "<b>統計オプション</b>"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr ""
+" 元ファイル \"%s\" を読めません\n"
+" %s "
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr ""
+"<b>ファイル:</b> %s\n"
+"<b>サイズ:</b> %s\n"
+"<b>画像のサイズ:</b> %dx%d"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr ""
+" ターゲットファイル \"%s\" に書き込めません\n"
+" %s "
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "バックアップファイル \"%s\" を書き込み用に開くことができません"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "書き込みエラー"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "不明なシステムエラー"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: オプション '%s' は曖昧です; 候補:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: オプション '--%s' は引数を取ることができません\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: オプション '%c%s' は引数を取ることができません\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: オプション '--%s' には引数が必要です\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: オプション '--%s' を認識できません\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: オプション '%c%s' を認識できません\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: 無効なオプション -- '%c'\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: オプションには引数が必要です -- '%c'\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: オプション '-W %s' は曖昧です\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: オプション '-W %s' は引数を取ることができません\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: オプション '-W %s' には引数が必要です\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "メモリを使い果たしました"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "パイプを作成できません"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s サブプロセスが失敗しました"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"実行時間 (秒)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " 合計                  :"
+
+#: lib/timevar.c:561
+#, fuzzy, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "現在のシステム時間: %ld = %s\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle に失敗しました"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ファイル記述子 (fd) %d をリストアできません: dup2 に失敗しました"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "%s 子プロセス"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s 子プロセスが致命的なシグナル %d を受信しました"
+
+#~ msgid "state %d"
+#~ msgstr "状態 %d"
+
+#, fuzzy
+#~ msgid "%s `%s' redefined"
+#~ msgstr "シンボル %s が再定義されました"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "トークン %s と %s の双方が番号 %d に割り当てられました"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: %s の値は %s の値以下です"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: ARGP_HELP_FMT パラメータには値が必要です"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: ARGP_HELP_FMT パラメータは正の値でなければいけません"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: 不明な ARGP_HELP_FMT パラメータ"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "ARGP_HELP_FMT 中にごみがあります: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "長い形式のオプションで必須または任意の引数は、それに対応する短い形式のオプ"
+#~ "ションでも同様に必須または任意です。"
+
+#~ msgid "Usage:"
+#~ msgstr "使用法:"
+
+#~ msgid "  or: "
+#~ msgstr "または: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPTION...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "詳細は `%s --help' または `%s --usage' を実行して下さい。\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr ""
+#~ "バグを発見したら <%s> に報告して下さい。\n"
+#~ "翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してく"
+#~ "ださい。\n"
+
+#~ msgid "give this help list"
+#~ msgstr "このヘルプを表示する"
+
+#~ msgid "give a short usage message"
+#~ msgstr "短い使用方法を表示する"
+
+#~ msgid "NAME"
+#~ msgstr "名前"
+
+#~ msgid "set the program name"
+#~ msgstr "プログラム名を設定する"
+
+#~ msgid "SECS"
+#~ msgstr "SECS"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "SECS 秒でハング (デフォルト 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "プログラムのバージョンを表示する"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(プログラムエラー) 不明なバージョン!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: 引数が多すぎます\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(プログラムエラー) オプションは認識されているべきです!?"
+
+#~ msgid "program error"
+#~ msgstr "プログラムエラー"
+
+#~ msgid "stack overflow"
+#~ msgstr "スタックオーバーフロー"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "一時ディレクトリを作成できません。 $TMPDIR を設定してみてください"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "テンプレート \"%s\" を使用した一時ディレクトリを作成できません"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "一時ディレクトリ %s を削除できません"
+
+#~ msgid "error closing file"
+#~ msgstr "ファイルクローズエラー"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "%s のパーミッションを保存しています"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "\"%s\"を読込むため開いている際にエラーが発生しました"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "\"%s\"の読込み中にエラーが発生しました"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "\"%s\"の書込み中にエラーが発生しました"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "\"%s\"の読込み後にエラーが発生しました"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen()に失敗しました"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "C# コンパイラが見つりません。pnet をインストールしてみてください"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "C# 仮想マシンが見つかりません。pnet をインストールしてみてください"
+
+#~ msgid "regular empty file"
+#~ msgstr "通常の空ファイル"
+
+#~ msgid "regular file"
+#~ msgstr "通常ファイル"
+
+#~ msgid "directory"
+#~ msgstr "ディレクトリ"
+
+#~ msgid "block special file"
+#~ msgstr "ブロックスペシャルファイル"
+
+#~ msgid "character special file"
+#~ msgstr "キャラクタスペシャルファイル"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "シンボリックリンク"
+
+#~ msgid "socket"
+#~ msgstr "ソケット"
+
+#~ msgid "message queue"
+#~ msgstr "メッセージキュー"
+
+#~ msgid "semaphore"
+#~ msgstr "セマフォ"
+
+#~ msgid "shared memory object"
+#~ msgstr "共有メモリオブジェクト"
+
+#~ msgid "typed memory object"
+#~ msgstr "型付メモリオブジェクト"
+
+#~ msgid "weird file"
+#~ msgstr "不明なファイル"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "ホスト名に対する Address family がサポートされていません"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "名前解決に一時的に失敗しました"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "ai_flags に対する誤った値です"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "名前解決でリカバリできない失敗が発生しました"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family はサポートされていません"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "メモリ配置に失敗しました"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "ホスト名にアドレスが割り当てられていません"
+
+#~ msgid "Name or service not known"
+#~ msgstr "名前またはサービスが不明です"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "ai_socktype に対して Servname がサポートされていません"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype はサポートされていません"
+
+#~ msgid "System error"
+#~ msgstr "システムエラー"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "引数バッファが小さすぎます"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "要求された処理は実行中です"
+
+#~ msgid "Request canceled"
+#~ msgstr "要求がキャンセルされました"
+
+#~ msgid "Request not canceled"
+#~ msgstr "要求がキャンセルされませんでした"
+
+#~ msgid "All requests done"
+#~ msgstr "すべての要求が完了しました"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "シグナル割り込みが発生しました"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "パラメーター文字列が正しくエンコードされていません"
+
+#~ msgid "Unknown error"
+#~ msgstr "不明なエラー"
+
+#~ msgid "%s: option '%s' requires an argument\n"
+#~ msgstr "%s: オプション '--%s' は引数が必要です\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "compile_java_class への source_version 引数が無効です"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "compile_java_class への target_version 引数が無効です"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "\"%s\" の作成に失敗しました"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "\"%s\" ファイルの書き込み中にエラーが発生しました"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Java コンパイラが見つかりません。 gcj をインストールするか、またはt "
+#~ "$JAVAC を設定してみてください"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Java 仮想マシンが見つかりません。 gij をインストールするか、または $JAVA "
+#~ "を設定してみてください"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s サブプロセス I/O エラー"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "%s のパーミッションを変更できません"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "ディレクトリ %s を作成できません"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "現在の作業ディレクトリを記録することができません"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "初期作業ディレクトリに戻るのに失敗しました"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "/dev/zeroを読込み用に開けません"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "読み込みスレッドの作成に失敗しました"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "%s 子プロセスへ非ブロック I/O を設定できません"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "%s 子プロセスとの通信に失敗しました"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "%s 子プロセスへの書き込みに失敗しました"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "%s 子プロセスからの読み込みに失敗しました"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "子プロセス %s が終了コード %d で終了しました"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "%s 子プロセスが終了コード %d で終了しました"
+
+#~ msgid "Success"
+#~ msgstr "成功です"
+
+#~ msgid "No match"
+#~ msgstr "一致しません"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "無効な正規表現です"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "無効な照合文字です"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "無効な文字クラス名です"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "終端のバックスラッシュ"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "無効な前方参照です"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "[ または [^ が不一致です"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "( または \\( が不一致です"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "\\{ が不一致です"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "\\{\\} の中身が無効です"
+
+#~ msgid "Invalid range end"
+#~ msgstr "無効な範囲終了です"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "メモリを使い果たしました"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "無効な前方正規表現です"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "正規表現が途中で終了しました"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "正規表現が大きすぎます"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr ") または \\) が不一致です"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "以前に正規表現がありません"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[yY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "%s のパーミッションを設定します"
+
+#~ msgid "Hangup"
+#~ msgstr "Hangup"
+
+#~ msgid "Interrupt"
+#~ msgstr "割り込み"
+
+#~ msgid "Quit"
+#~ msgstr "終了"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Illegal instruction"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Trace/breakpoint trap"
+
+#~ msgid "Aborted"
+#~ msgstr "中止"
+
+#~ msgid "Floating point exception"
+#~ msgstr "浮動小数点例外"
+
+#~ msgid "Killed"
+#~ msgstr "強制終了"
+
+#~ msgid "Bus error"
+#~ msgstr "バスエラー"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Segmentation fault"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Broken pipe"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Alarm clock"
+
+#~ msgid "Terminated"
+#~ msgstr "Terminated"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "緊急 I/O 状態"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "停止 (シグナル)"
+
+#~ msgid "Stopped"
+#~ msgstr "停止"
+
+#~ msgid "Continued"
+#~ msgstr "継続"
+
+#~ msgid "Child exited"
+#~ msgstr "子プロセス終了"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "停止 (tty 入力)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "停止 (tty 出力)"
+
+#~ msgid "I/O possible"
+#~ msgstr "I/O 可能"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "CPU時間制限を超過しました"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "ファイルサイズ制限を超過しました"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "仮想タイマーが終了しました"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "プロファイリングタイマーが終了しました"
+
+#~ msgid "Window changed"
+#~ msgstr "Window が変更されました"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "ユーザー定義シグナル1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "ユーザー定義シグナル2"
+
+#~ msgid "EMT trap"
+#~ msgstr "EMT トラップ"
+
+#~ msgid "Bad system call"
+#~ msgstr "間違ったシステムコール"
+
+#~ msgid "Stack fault"
+#~ msgstr "スタックエラー"
+
+#~ msgid "Information request"
+#~ msgstr "情報要求"
+
+#~ msgid "Power failure"
+#~ msgstr "電源エラー"
+
+#~ msgid "Resource lost"
+#~ msgstr "リソースが無くなりました"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "閉じたパイプまたはソケットへの書き込みでエラーが発生しました"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "リアルタイムシグナル %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "不明なシグナル %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv 関数が使えません"
+
+#~ msgid "iconv function not available"
+#~ msgstr "iconv 関数が有効ではありません"
+
+#~ msgid "character out of range"
+#~ msgstr "範囲外の文字"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "U+%04X をローカル文字セットに変換できません"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "U+%04X をローカル文字セット %s に変換できません"
+
+#~ msgid "invalid user"
+#~ msgstr "無効なユーザ"
+
+#~ msgid "invalid group"
+#~ msgstr "無効なグループ"
+
+#~ msgid "invalid spec"
+#~ msgstr "無効な指定"
+
+#~ msgid "unable to display error message"
+#~ msgstr "エラーメッセージを表示できません"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "パッケージ作成者: %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "パッケージ作成者: %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "(C)"
+
+#~ msgid ""
+#~ "\n"
+#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+#~ "html>.\n"
+#~ "This is free software: you are free to change and redistribute it.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/"
+#~ "gpl.html>.\n"
+#~ "This is free software: you are free to change and redistribute it.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "作者 %s。\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "作者 %s および %s。\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "作者 %s、 %s、および %s。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "作者 %s、 %s、 %s、\n"
+#~ "および %s。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "作者 %s、 %s、 %s、\n"
+#~ "%s、および %s。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "作者 %s、 %s、 %s、\n"
+#~ "%s、 %s、および %s。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "作者 %s、 %s、 %s、\n"
+#~ "%s、 %s、 %s、および %s。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "作者 %s、 %s、 %s、\n"
+#~ "%s、 %s、 %s、 %s、\n"
+#~ "および %s。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "作者 %s、 %s、 %s、\n"
+#~ "%s、 %s、 %s、 %s、\n"
+#~ "%s、および %s。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "作者 %s、 %s、 %s、\n"
+#~ "%s、 %s、 %s、 %s、\n"
+#~ "%s、 %s、 および他の方々。\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "バグを発見したら <%s> に報告して下さい。\n"
+#~ "翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してく"
+#~ "ださい。\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "%s のバグは <%s> に報告してください。\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s のホームページ: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "stdin"
+#~ msgstr "標準入力"
+
+#~ msgid "stdout"
+#~ msgstr "標準出力"
+
+#~ msgid "stderr"
+#~ msgstr "標準エラー出力"
+
+#~ msgid "unknown stream"
+#~ msgstr "不明なストリーム"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "%s をモード %s で再度開くことに失敗しました"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "問題を回避するために LC_ALL='C' を指定してください."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "比較した文字列は %s と %s です."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "書式設定を行った出力を実行することができません"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "引数 `%3$s' に対して %1$s%2$s が無効です"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "引数 `%3$s' に対して無効な接尾辞 %1$s%2$s です"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "引数 `%3$s' に対する %1$s%2$s が大きすぎます"
diff --git a/po/ms.gmo b/po/ms.gmo
new file mode 100644
index 0000000..8e4e2ac
--- /dev/null
+++ b/po/ms.gmo
Binary files differ
diff --git a/po/ms.po b/po/ms.po
new file mode 100644
index 0000000..643bc56
--- /dev/null
+++ b/po/ms.po
@@ -0,0 +1,1189 @@
+# Bison Bahasa Melayu (Malay) (ms).
+# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the Bison package.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>, 2003, 2004, 2005, 2006, 2007, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.4.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2009-01-13 00:35+0800\n"
+"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>\n"
+"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 0.9.5\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "amaran"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "Ralat I/O"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "ralat maut"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Konflik antara hukum %d dan token %s diselesaikan sebagai pindahan"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Konflik antara hukum %d dan token %s diselesaikan sebagai pengurangan"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Konflik antara hukum %d dan token %s diselesaikan sebagai ralat"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflik: %d pemindahan/pengurangan, %d pengurangan/pengurangan\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflik: %d pemindahan/pengurangan\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflik: %d pengurangan/pengurangan\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Keadaan %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr hanya berkesan kepada parser GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "jangkaan %d konflik pemindahan/pengurangan"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "dijangkakan %d pengurangan/pengurangan konflik"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "tidak dapat membuka fail `%s'"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "tidak dapat menutup fail"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "enggan untuk menulisganti fail masukan %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "keluaran berkonflik kepada fail %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Cuba `%s --help' untuk lebih maklumat.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Penggunaan: %s [PILIHAN]... FAIL\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Hujah wajib kepada pilihan panjang adalah wajib untuk pilihan pendek juga.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Perkara yang sama bagi hujah pilihan.\n"
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Mod operasi:\n"
+"  -h, --help                 papar bantuan ini dan keluar\n"
+"  -V, --version              keluarkan maklumat versi dan keluar\n"
+"      --print-localedir      keluarkan direktori mengandungi data bergantung "
+"locale\n"
+"      --print-datadir        keluarkan direktori mengandungi rangka dan "
+"XSLT\n"
+"  -y, --yacc                 tiru POSIX yacc\n"
+"  -W, --warnings=[KATEGORI]  lapor amaran yang berada dalam KATEGORI\n"
+"\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Penghurai:\n"
+"  -L, --language=BAHASA      nyatakan bahasa pengaturcaraan keluaran\n"
+"                             (ini adalah ciri ujikaji)\n"
+"  -S, --skeleton=FAIL        nyatakan rangka untuk digunakan\n"
+"  -t, --debug                peralatan parser untuk nyahpepijat\n"
+"      --locations            hidupkan pengiraan lokasi\n"
+"  -p, --name-prefix=AWALAN   tambah AWALAN kepada simbol luaran\n"
+"  -l, --no-lines             jangan jana arahan `#line'\n"
+"  -k, --token-table          sertakan jadual nama token\n"
+"\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Keluaran:\n"
+"      --defines[=FAIL]       juga hasilkan fail pengepala\n"
+"  -d,                        sama juga tetapi tidak boleh menyatakan FAIL "
+"(untuk Yacc POSIX)\n"
+"  -r, --report=PERKARA       juga hasilkan butir terperinci bagi automaton\n"
+"      --report-file=FAIL     tulis laporan ke FAIL\n"
+"  -v, --verbose              sama seperti `--report=state'\n"
+"  -b, --file-prefix=AWALAN   nyatakan AWALAN untuk fail keluaran\n"
+"  -o, --output=FAIL          biarkan keluaran kepada FAIL\n"
+"  -g, --graph                juga hasilkan graf bagi automaton\n"
+"  -x, --xml[=FAIL]           juga hasilkan laporan XML bagi automaton\n"
+"                             (skema XML adalah masih tahap kajian)\n"
+"\n"
+
+#: src/getargs.c:361
+#, fuzzy
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Kategori amaran termasuk:\n"
+"  `midrule-values'  nilai hukumtengah nyahtetap atau tidak digunakan\n"
+"  `yacc'            tidak serasi dengan POSIX YACC\n"
+"  `all'             semua amaran\n"
+"  `no-CATEGORY'     matikan amaran dalam CATEGORY\n"
+"  `none'            matikan semua amaran\n"
+"  `error'           jadikan amaran sebagai ralat\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"PERKARA adalah senarai perkataan dipisah koma yang boleh termasuk:\n"
+"  `state'        nyatakan keadaan\n"
+"  `itemset'      lengkapkan set perkara asas dengan penutupnya\n"
+"  `lookahead'    dengan jelas kaitkan token lookahead kepada perkara\n"
+"  `solved'       nyatakan penyelesaian konflik pemindahan/pengurangan\n"
+"  `all'          masukkan semua maklumat diatas\n"
+"  `none'         matikan laporan\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Lapor pepijat ke <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Ditulis oleh Robert Corbett dan Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Hakcipta (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Ini adalah perisian bebas; lihat sumber untuk syarat menyalin.  TIADA\n"
+"jaminan disediakan; tidak juga untuk KEBOLEHDAGANGAN atau KEUPAYAAN UNTUK "
+"SESUATU TUJUAN KHUSUS.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "pelbagai rangka pengisytiharan tidak sah"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "bahasa `%s' tidak sah"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "pelbagai pengisytiharan bahasa adalah tidak sah"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "operan hilang selepas `%s'"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "operan tambahan `%s'"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "kosong"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Tatabahasa"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "nombor baris melimpah"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "nombor lajur melimpah"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "hukum tidak digunakan kerana konflik"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "simbol %s ditakrif semula"
+
+#: src/muscle-tab.c:453
+#, fuzzy
+msgid "previous definition"
+msgstr "pengisytiharan terdahulu"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "nilai tidak digunakan: $%d"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "pengecam hilang dalam parameter pengisytiharan"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " jenis %d adalah %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "pindah, dan pergi ke keadaan %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "pergi ke keadaan %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "ralat (tidak bergabung)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "kurang menggunakan hukum %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "terima"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Keadaan %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminal, dengan hukum dimana mereka kelihatan"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Tidak terminal, dengan hukum dimana mereka kelihatan"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " pada kiri:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " pada kanan:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Hukum tidak digunakan dalam penghurai kerana konflik"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "pelbagai pengisytiharan %s"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "jenis hasil bertelingkah pada fungsi gabung %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "pengisytiharan terdahulu"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "hukum diberi untuk %s, dimana ia adalah token"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "pertelingkahan jenis pada tindakan default: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "hukum kosong untuk bukan terminal ditaip, dan tiada tindakan"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "nilai tidak digunakan: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "nyahtetap nilai: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "hanya satu %s dibenarkan setiap hukum"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s hanya berkesan kepada parser GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s mesti diikuti dengan nombor positif"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "peraturan terlalu panjang"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "tiada hukum dalam masukan tatabahasa"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "hukum tidak digunakan tatabahasa"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "bukan terminal tidak berguna dalam tatabahasa: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Bukan terminal tidak digunakan dalam tatabahasa"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Terminal tidak digunakan dalam tatabahasa"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Hukum tidak berguna dalam tatabahasa"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d bukan terminal tidak digunakan dalam tatabahasa"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d hukum tidak digunakan dalam tatabahasa"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "simbol permulaan %s tidak menghasilkan sebarang perkataan"
+
+#: src/scan-code.l:188
+#, fuzzy, c-format
+msgid "stray '%s'"
+msgstr "`$' lilau"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "integer diluar julat: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "arahan tidak sah: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "hujah kabur %s untuk %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "Jenis tidak tersirat diberikan dalam tatabahasa tanpa jenis"
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr ""
+"$$ untuk hukum pertengahan pada $%d bagi `%s' tidak mempunyai jenis "
+"dinyatakan"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ bagi `%s' tiada jenis dinyatakan"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d bagi `%s' tiada jenis dinyatakan"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "`,' sesat dianggap sebagai ruang"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "arahan tidak sah: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "arahan tidak sah: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "aksara tidak sah: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "aksara tidak sah: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "aksara null tidak sah"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "aksara null tidak sah: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "aksara tidak sah: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "`%s' hilang pada penghujung fail"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "`%s' hilang pada penghujung baris"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "nilai $ tidak sah: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "terlalu banyak simbol dalam tatabahasa masukan (had adalah %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s pengisytiharan semula untuk %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s pengisytiharan semula untuk <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "simbol %s ditakrif semula"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "simbol %s ditakrif semula"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "mentakrif semula nombor token pengguna %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"simbol %s digunakan, tetapi tidak ditakrifkan sebagai token atau mempunyai "
+"hukum"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "simbol `%s' digunakan lebih dari sekali sebagai rentetan perkataan"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "simbol `%s' diberikan lebih daripada satu rentetan perkataan"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "%s pengisytiharan semula untuk %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "pengisytiharan terdahulu"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "simbol permulaan %s tidak ditakrifkan"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "simbol permulaan %s adalah token"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "pengisytiharan semula untuk %%destructor ditag default"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "pengisytiharan semula untuk %%destructor tanpa tag default"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "pengisytiharan semula untuk %%printer ditag default"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "pengisytiharan semula untuk %%printer tanpa tag default"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "program subsidiari `%s' tidak dapat dilaksanakan"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "program subsidiari `%s' tidak dapat dilaksanakan"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "hujah tidak sah %s untuk %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "hujah kabur %s untuk %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Hujah yang sah adalah:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u dibebaskan (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u disimpan (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u disimpan (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u disimpan (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "kira histogram log\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "saiz histogram log\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "histogram kepadatan\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistik bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Pelaksanaan terkumpul = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Tidak dapat membaca fail stats."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Saiz fail stats tidak betul.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Tidak dapat menulis fail stats."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Tidak dapat membuka fail stats untuk menulis."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "ralat maut"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Ralat sistem tidak diketahui"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: pilihan `%s' adalah kabur\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: pilihan `--%s' tidak mengizinkan hujah\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: pilihan `%c%s' tidak mengizinkan hujah\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: pilihan `%s' memerlukan hujah\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: pilihan tidak dikenali `--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: pilihan tidak dikenali '%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: pilihan tidak sah -- %c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: pilihan memerlukan hujah -- %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: pilihan `-W %s' adalah kabur\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: pilihan `-W %s' tidak mengizinkan hujah\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: pilihan `%s' memerlukan hujah\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "kehabisan memori"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "tidak dapat menutup fail"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Masa pelaksanaan (saat)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " JUMLAH                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "masa dalam %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "keadaan %d"
+
+#, fuzzy
+#~ msgid "stray '@'"
+#~ msgstr "`@' lilau"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Janakan penghurai LALR(1) dan GLR.\n"
+#~ "\n"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "turutan escape tidak sah: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "turutan escape tidak dikenali: %s"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "token %s dan %s kedua-dunya diberi nombor %d"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: pilihan salah  -- %c\n"
diff --git a/po/nb.gmo b/po/nb.gmo
new file mode 100644
index 0000000..e0b39ad
--- /dev/null
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..a3bec7b
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,1255 @@
+# Norwegian bokmål translation of GNU bison.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Trond Endrestøl <Trond.Endrestol@gtf.ol.no>, 2004.
+#
+# Send this file as an gzipped attachment to:
+# translation@iro.umontreal.ca
+# with the subject:
+# TP-Robot PACKAGE-VERSION.TEAM.po
+#
+# The subject for the Norwegian bokmål translation of GNU bison 2.0
+# would then be:
+# TP-Robot bison-2.0.nb.po
+#
+# Here's the URL for the Norwegian translation team:
+# http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?team=no
+#
+# Here's the URL for the current translations of GNU bison:
+# http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?domain=bison
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.0\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-03-01 10:06+0100\n"
+"Last-Translator: Trond Endrestøl <Trond.Endrestol@gtf.ol.no>\n"
+"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "advarsel"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "I/O-feil"
+
+#: src/complain.c:208 src/complain.c:215
+#, fuzzy
+msgid "fatal error"
+msgstr "alvorlig feil: "
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Konflikt mellom regel %d og token %s ble løst som skift"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Konflikt mellom regel %d og token %s ble løst som reduksjon"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Konflikt mellom regel %d og token %s ble løst som en feil"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikter: %d skift/reduksjon, %d reduksjon/reduksjon\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikter: %d skift/reduksjon\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikter: %d reduksjon/reduksjon\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Tilstand %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr gjelder bare for GLR-parsere"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "forventet %d skift/reduksjon-konflikt"
+msgstr[1] "forventet %d skift/reduksjon-konflikter"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "forventet %d reduksjon/reduksjon-konflikt"
+msgstr[1] "forventet %d reduksjon/reduksjon-konflikter"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "kan ikke åpne filen «%s»"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "kan ikke lukke filen"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "motstridende output til fila %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv «%s --help» for mer informasjon.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Bruksmåte: %s [VALG]... FIL\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -S, --skeleton=FIL         angi skjelettet som skal brukes\n"
+"  -t, --debug                legge parseren til rette for debugging\n"
+"      --locations            slå på beregning av plassering\n"
+"  -p, --name-prefix=PREFIKS  sette PREFIKS i forkant av navnene til\n"
+"                             de eksterne symbolene\n"
+"  -l, --no-lines             ikke generer «#line»-direktiver\n"
+"  -n, --no-parser            bare generer tabellene\n"
+"  -k, --token-table          legg ved en tabell med tokennavnene\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Output:\n"
+"  -d, --defines              også lag en headerfil\n"
+"  -r, --report=TING          også lag detaljer om automaten\n"
+"  -v, --verbose              samme som «--report=state»\n"
+"  -b, --file-prefix=PREFIKS  angi et PREFIKS for outputfiler\n"
+"  -o, --output=FIL           send output til FIL\n"
+"  -g, --graph                også lag en VCG-beskrivelse av automaten\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+#, fuzzy
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"TING er en liste med kommaseparerte ord hentet fra denne lista:\n"
+"  «state»        beskrive tilstandene\n"
+"  «itemset»      fullføre de sentrale punktmengdene med deres slutning\n"
+"  «lookahead»    eksplisitt assosiere lookaheads med punkter\n"
+"  «solved»       beskrive løsing av skift/reduksjon-konflikter\n"
+"  «all»          inkludere alt av den overstående informasjonen\n"
+"  «none»         slå av all rapportering\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Rapporter feil til <bug-bison@gnu.org>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Skrevet av Robert Corbett og Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Dette er fri programvare; se i kildekoden for kopieringsbetingelser.\n"
+"Det er INGEN garanti; ikke en gang for SALGBARHET eller SKIKKETHET\n"
+"FOR ET BESTEMT FORMÅL.\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "flere deklarasjoner av %s"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "ugyldig verdi: %s"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "flere deklarasjoner av %s"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "mangler operand etter «%s»"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "ekstra operand «%s»"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "tom"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammatikk"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr ""
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr ""
+
+#: src/main.c:146
+#, fuzzy
+msgid "rule useless in parser due to conflicts"
+msgstr "regel ble aldri redusert på grunn av konflikter"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "symbolet %s ble redefinert"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr ""
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "ugyldig verdi: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "mangler identifikator i parameterdeklarasjonen"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " type %d er %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "skift og gå til tilstand %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "gå til tilstand %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "feil (ikke-assosiativ)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduksjon ved hjelp av regel %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "aksept"
+
+# Det er vel ikke så mye å oversette denne med.
+# [TE, 2004-06-02]
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Tilstand %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminaler med regler hvor de opptrer"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Ikke-terminaler med regler hvor de opptrer"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " til venstre:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " til høyre:"
+
+#: src/print.c:510
+#, fuzzy
+msgid "Rules useless in parser due to conflicts"
+msgstr "regel ble aldri redusert på grunn av konflikter"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "flere deklarasjoner av %s"
+
+# Denne oversettelsen er en smule ullen.  Må sjekke kildekoden og prøve
+# et eksempel for å vite hva denne strengen bør oversettes med.  Dersom
+# andre har gode hint, så for all del, syng ut!  [TE, 2004-05-31]
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "kollisjon på resultattype for flettefunksjon %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+#, fuzzy
+msgid "previous declaration"
+msgstr "første deklarasjon"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "regel er angitt for %s, som er et token"
+
+# Denne oversettelsen er også en smule ullen.
+# [TE, 2004-05-31]
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "kollisjon på type for standard handling: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "tom regel for typet ikke-terminal og ingen handling"
+
+#: src/reader.c:328
+#, fuzzy, c-format
+msgid "unused value: $%d"
+msgstr "ugyldig verdi: %s"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr ""
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "bare en %s pr regel er tillatt"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s påvirker bare GLR-parsere"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s må bli fulgt av et positivt tall"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr ""
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "ingen regler i den angitte grammatikken"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "ingen regler i den angitte grammatikken"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "Ikke-terminaler med regler hvor de opptrer"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "ingen regler i den angitte grammatikken"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "ingen regler i den angitte grammatikken"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "ingen regler i den angitte grammatikken"
+msgstr[1] "ingen regler i den angitte grammatikken"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "startsymbolet %s avleder ingen setninger"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "heltall utenfor tallområde: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "ugyldig direktiv: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "flertydig argument %s for %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$%d av «%s» har ingen deklarert type"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ til «%s» har ingen deklarert type"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d av «%s» har ingen deklarert type"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "overflødig «,» ble behandlet som tomrom"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "ugyldig direktiv: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "ugyldig direktiv: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "ugyldig tegn: %s"
+msgstr[1] "ugyldig tegn: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ugyldig tegn: %s"
+msgstr[1] "ugyldig tegn: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "ugyldig null-tegn"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "ugyldig null-tegn: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "ugyldig tegn: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "mangler «%s» ved slutten av filen"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "mangler «%s» på slutten av linjen"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, fuzzy, c-format
+msgid "invalid $ value: $%d"
+msgstr "ugyldig verdi: %s"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "for mange symboler i inputgrammatikken (grensen er %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s er en redeklarasjon av %s"
+
+#: src/symtab.c:164
+#, fuzzy, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s er en redeklarasjon av %s"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "symbolet %s ble redefinert"
+
+#: src/symtab.c:346
+#, fuzzy, c-format
+msgid "symbol %s redeclared"
+msgstr "symbolet %s ble redefinert"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redefinerer brukertokennummeret til %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"symbolet %s er brukt, men er ikke definert som et token og har ingen regler"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "symbolet «%s» er brukt mer enn en gang som en literalstreng"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "symbolet «%s» er gitt mer enn en literalstreng"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "%s er en redeklarasjon av %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "%s er en redeklarasjon av %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "startsymbolet %s er udefinert"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "startsymbolet %s er et token"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "hjelpeprogrammet «%s» mislyktes"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "fant ikke hjelpeprogrammet «%s»"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ugyldig argument %s for %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "flertydig argument %s for %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Gyldige argumenter er:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u frigjort (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u mellomlagret (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u mellomlagret (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u mellomlagret (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "count log histogram\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "size log histogram\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "tetthetshistogram\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitmengdestatistikk:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Akkumulerte kjøringer = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Kunne ikke lese statsfilen."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Feil størrelse på statsfilen.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Kunne ikke skrive statsfilen."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Kunne ikke åpne statsfilen for skriving."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "alvorlig feil: "
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Ukjent systemfeil"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: valget «%s» er flertydig\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: valget «--%s» tillater ikke et argument\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: valget «%c%s» tillater ikke et argument\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: valget «%s» krever et argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: ukjent valg «--%s»\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: ukjent valg «%c%s»\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ugyldig valg -- %c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: valget krevet et argument -- %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: valget «-W %s» er flertydig\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: valget «-W %s» tillater ikke et argument\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: valget «%s» krever et argument\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "minne er uttømt"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "kan ikke lukke filen"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "»"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Utføringstider (sekunder)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTAL                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "tid for %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "tilstand %d"
+
+#~ msgid "warning: "
+#~ msgstr "advarsel: "
+
+#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
+#~ msgstr "GNU bison genererer parsere for LALR(1)-grammatikk.\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Dersom et langt valg viser et obligatorisk argument, så er argumentet\n"
+#~ "også obligatorisk for det tilsvarende korte valget.  Det samme gjelder\n"
+#~ "for valgfrie argumenter.\n"
+
+#~ msgid ""
+#~ "Operation modes:\n"
+#~ "  -h, --help      display this help and exit\n"
+#~ "  -V, --version   output version information and exit\n"
+#~ "  -y, --yacc      emulate POSIX yacc\n"
+#~ msgstr ""
+#~ "Virkemåter:\n"
+#~ "  -h, --help      vise denne hjelpen og avslutte\n"
+#~ "  -V, --version   skrive versjonsnummer og avslutte\n"
+#~ "  -y, --yacc      emulere POSIX yacc\n"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "POSIX forbyr deklarasjoner i grammatikken"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Regler som aldri ble redusert"
+
+#~ msgid "useless rule"
+#~ msgstr "ubrukelig regel"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "ubrukelig ikke-terminal: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Ubrukelige ikke-terminaler"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Terminaler som er ikke er i bruk"
+
+#~ msgid "Useless rules"
+#~ msgstr "Ubrukelige regler"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d regel ble aldri redusert\n"
+#~ msgstr[1] "%d regler ble aldri redusert\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d ubrukelig ikke-terminal"
+#~ msgstr[1] "%d ubrukelige ikke-terminaler"
+
+#~ msgid " and "
+#~ msgstr " og "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d ubrukelig regel"
+#~ msgstr[1] "%d ubrukelige regler"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "ugyldig escapesekvens: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "ugjenkjennelig escapesekvens: %s"
+
+#~ msgid "missing `{' in `%s'"
+#~ msgstr "mangler «{» in «%s»"
+
+#~ msgid "invalid $ value"
+#~ msgstr "ugyldig $-verdi"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "tokene %s og %s er begge tilordnet nummeret %d"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ulovlig valg -- %c\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "kunne ikke starte opp hjelpeprogrammet «%s»"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr "hjelpeprogrammet «%s» mislyktes (returverdi %d)"
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644
index 0000000..dd590e4
--- /dev/null
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..ef97320
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,1223 @@
+# Dutch messages for GNU bison.
+# This file is distributed under the same license as the bison package.
+# Copyright (C) 1996, 2002, 2003, 2004, 2005, 2006, 2008, 2010 Free Software Foundation, Inc.
+# Tim Van Holder <tim.van.holder@telenet.be>, 2002, 2003, 2004, 2005, 2006, 2008, 2010.
+# Erick Branderhorst <branderh@debian.org>, 1996.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.4.3\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-11-04 16:36+0100\n"
+"Last-Translator: Tim Van Holder <tim.van.holder@telenet.be>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "let op"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "I/O-fout"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "fatale fout"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Conflict tussen regel %d en token %s opgelost als shift"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Conflict tussen regel %d en token %s opgelost als reductie"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Conflict tussen regel %d en token %s opgelost als een fout"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflicten: %d shift/reductie, %d reductie/reductie\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflicten: %d shift/reductie\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflicten: %d reductie/reductie\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Staat %d"
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr is enkel van toepassing op GLR-parsers"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "er werd %d shift/reductie conflict verwacht"
+msgstr[1] "er werden %d shift/reductie conflicten verwacht"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "er werd %d reductie/reductie conflict verwacht"
+msgstr[1] "er werden %d reductie/reductie conflicten verwacht"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "kan bestand `%s' niet openen"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "kan bestand niet sluiten"
+
+# Betere formulering (ik-vorm vermijden)?
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "ik weiger om invoerbestand %s te overschrijven"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "conflicterende uitvoer naar bestand %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Probeer `%s --help' voor meer informatie.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Gebruik: %s [OPTIE]... BESTAND\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Wanneer een lange optie een argument als verplicht aanduidt, dan is dat\n"
+"argument eveneens verplicht bij de overeenkomstige korte optie.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Hetzelfde geldt voor optionele argumenten.\n"
+
+# Misschien beter 'een POSIX-compatibele yacc'?
+# En de tekst voor -W kan beter denk ik.
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Werkwijzes:\n"
+"  -h, --help                 toon deze hulptekst en beëindig het programma\n"
+"  -V, --version              toon versie-informatie en beëindig het "
+"programma\n"
+"      --print-localedir      toon de folder met regio-afhankelijke gegevens\n"
+"      --print-datadir        toon de folder met skeletten en XSLT-bestanden\n"
+"  -y, --yacc                 emuleer POSIX Yacc\n"
+"  -W, --warnings[=SOORT]     waarschuw over problemen (van het type SOORT)\n"
+
+# Correcte vervoeging van 'voorvoegen'?
+# Betere vertaling voor 'directives'?
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -L, --language=TAAL        geef de te gebruiken programmeertaal op\n"
+"  -S, --skeleton=BESTAND     geef het te gebruiken skeletbestand op\n"
+"  -t, --debug                maak de parser geschikt voor debugging\n"
+"      --locations            houd symboollokaties bij\n"
+"  -p, --name-prefix=PREFIX   geef de externe symboolnamen deze PREFIX\n"
+"  -l, --no-lines             genereer geen `#line' directieven\n"
+"  -k, --token-table          genereer ook een tabel van tokennamen\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Uitvoer:\n"
+"      --defines[=BESTAND]    genereer ook een header-bestand\n"
+"  -d                         idem, maar bestand kan niet opegegeven worden\n"
+"                             (voor POSIX Yacc)\n"
+"  -r, --report=DINGEN        genereer ook details over de automaat\n"
+"      --report-file=BESTAND  schrijf het rapport weg in BESTAND\n"
+"  -v, --verbose              hetzelfde als `--report=state'\n"
+"  -b, --file-prefix=PREFIX   geef de uitvoerbestandsnamen deze PREFIX\n"
+"  -o, --output=BESTAND       schrijf uitvoer naar BESTAND\n"
+"  -g, --graph[=BESTAND]      genereer ook een graaf van de automaat\n"
+"  -x, --xml[=BESTAND]        genereer ook een XML-rapport over de automaat\n"
+"                             (het XML schema is experimenteel)\n"
+"\n"
+
+#: src/getargs.c:361
+#, fuzzy
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Soorten van waarschuwing zijn:\n"
+"  `midrule-values'  midrule waarden die niet gezet of gebruikt worden\n"
+"  `yacc'            dingen die niet compatibel zijn met POSIX Yacc\n"
+"  `all'             alle waarschuwingen\n"
+"  `no-SOORT'        geen waarschuwingen van type SOORT\n"
+"  `none'            helemaal geen waarschuwingen\n"
+"  `error'           beschouw waarschuwingen als fouten\n"
+"\n"
+
+# Verschillende dingen die beter zouden moeten kunnen - zeker de 'itemset' tekst
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"DINGEN is een door komma's gescheiden lijst van woorden; geldige woorden "
+"zijn:\n"
+"  `state'        beschrijf de toestanden van de automaat\n"
+"  `itemset'      vervolledig de verzamelingen van kern-items met hun "
+"closures\n"
+"  `look-ahead'   verbind look-ahead tokens expliciet met items\n"
+"  `solved'       beschrijf het oplossen van shift/reductie conflicten\n"
+"  `all'          produceer alle bovengenoemde informatie\n"
+"  `none'         schakel de rapportering uit\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+"Meld bugs aan <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Geschreven door Robert Corbett en Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Dit is vrije software; zie de broncode voor kopieercondities.  Er is GEEN\n"
+"garantie; zelfs niet voor VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD\n"
+"DOEL.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "meerdere skeletten opgeven is niet toegestaan"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "ongeldige taal `%s'"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "meerdere talen opgeven is niet toegestaan"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "operand ontbreekt na `%s'"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "overtollige operand `%s'"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "leeg"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammatica"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "overflow van lijnnummers"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "overflow van kolomnummers"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "regel is nutteloos in de grammatica omwille van conflicten"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "%s `%s' opnieuw gedefinieerd"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "eerdere definitie"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, fuzzy, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "ongeldige waarde voor %%define variabele `%s': `%s'"
+
+#: src/muscle-tab.c:550
+#, fuzzy, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "ongeldige waarde voor Booleaanse %%define variabele `%s'"
+
+#: src/muscle-tab.c:609
+#, fuzzy, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "ongeldige waarde voor %%define variabele `%s': `%s'"
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "waarde niet gebruikt: $%d"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "naam ontbreekt in parameterdeclaratie"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " type %d is %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "shift, en ga naar toestand %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "ga naar toestand %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "fout (niet associatief)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduceren via regel %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "accepteer"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$standaard"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Staat %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Eindsymbolen, met de regels waarin ze voorkomen"
+
+# Betere vertaling voor non-terminals? 'tussensymbolen'?
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Niet-eindsymbolen, met de regels waarin ze voorkomen"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " links:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " rechts:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Regels die, omwille van conflicten, nutteloos zijn in de grammatica"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "meerdere %s declaraties"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "conflict tussen resultaattypes bij merge-functie `%s': <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "eerdere declaratie"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "regel opgegeven voor token (%s)"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "type-conflict bij standaardaktie: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "lege regel voor niet-eindsymbool met type, en geen actie"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "waarde niet gebruikt: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "waarde niet gezet: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "token voor %%prec is niet gedefinieerd: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "slechts één %s toegestaan per regel"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s is enkel van toepassing op GLR-parsers"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s moet gevolgd worden door een positief getal"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "regel is te lang"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "invoergrammatica bevat geen regels"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "regel is nutteloos in de grammatica"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "niet-eindsymbool is nutteloos in de grammatica: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Niet-eindsymbolen die nutteloos zijn in de grammatica"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Eindsymbolen die niet gebruikt worden in de grammatica"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Regels die nutteloos zijn in de grammatica"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d niet-eindsymbool is nutteloos in de grammatica"
+msgstr[1] "%d niet-eindsymbolen zijn nutteloos in de grammatica"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d regel is nutteloos in de grammatica"
+msgstr[1] "%d regels zijn nutteloos in de grammatica"
+
+# Ik _denk_ dat dit correct weergeeft wat er bedoeld wordt (m.a.w. er is geen regel voor het startsymbool)
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "uit startsymbool %s kan geen enkele zin afgeleid worden"
+
+#: src/scan-code.l:188
+#, fuzzy, c-format
+msgid "stray '%s'"
+msgstr "losse `$'"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+# Hier zou wel het bereik bij vermeld mogen worden...
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "integer buiten bereik: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "ongeldig commando: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "argument %s voor %s is niet eenduidig"
+
+# betere vertaling voor 'untyped'?
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "expliciet type opgegeven in een typeloze grammatica"
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ voor de midrule op $%d van `%s' heeft geen gedeclareerd type"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ van `%s' heeft geen gedeclareerd type"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d van `%s' heeft geen gedeclareerd type"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "losse `,' behandeld als witruimte"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "ongeldig commando: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "ongeldig commando: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "ongeldig teken: %s"
+msgstr[1] "ongeldig teken: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ongeldig teken na \\-escape: %s"
+msgstr[1] "ongeldig teken na \\-escape: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "ongeldig null-teken"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "ongeldig getal na \\-escape: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "ongeldig teken na \\-escape: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "`%s' ontbreekt aan einde van bestand"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "`%s' ontbreekt aan einde van regel"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "onbeëindigd %s commando in skelet"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "te weinig argumenten voor %s commando in skelet"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "teveel argumenten voor %s commando in skelet"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "ongeldige $-waarde: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "te veel symbolen in de invoergrammatica (de limiet is %d)"
+
+# Dit ziet er als een potentieel slechte originele string uit - wat kan er in die eerste '%s' staan?
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s herdeclaratie voor %s"
+
+# Dit ziet er als een potentieel slechte originele string uit - wat kan er in die eerste '%s' staan?
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s herdeclaratie voor <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "symbool %s opnieuw gedefinieerd"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symbool %s opnieuw gedeclareerd"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "herdefinitie van het door de gebruiker gekozen tokennummer van %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"symbool %s wordt gebruikt, maar is niet gedefinieerd als een token en heeft "
+"geen regels"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "symbool `%s' meer dan eens gebruikt als een letterlijke string"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "symbool `%s' krijgt meer dan één letterlijke string toegewezen"
+
+# Dit ziet er als een potentieel slechte originele string uit - wat kan er in die eerste '%s' staan?
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "%s herdeclaratie voor %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "eerdere declaratie"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "het startsymbool %s is niet gedefinieerd"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "het startsymbool %s is een token"
+
+# tagged en tagless? wasdavooriet?
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "herdeclaratie van standaard \"tagged\" %%destructor"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "herdeclaratie van standaard \"tagless\" %%destructor"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "herdeclaratie van standaard \"tagged\" %%printer"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "herdeclaratie van standaard \"tagless\" %%printer"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, fuzzy, c-format
+msgid "opening of tmpfile failed"
+msgstr "_open_osfhandle mislukt"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr ""
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr ""
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ongeldig argument %s voor %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argument %s voor %s is niet eenduidig"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Geldige argumenten zijn:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u vrijgegeven (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u gecached (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u gecached (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u gecached (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "histogram van aantal gezette bits\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "histogram van bitset-groottes\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "histogram van dichtheid aan gezette bits\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset-statistieken:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Aantal uitvoeringen = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Kon het statistiekenbestand niet lezen."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Het statistiekenbestand heeft een verkeerde grootte.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Kon niet schrijven naar het statistiekenbestand."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Kon het statistiekenbestand niet openen voor schrijven."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "fatale fout"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Onbekende systeemfout"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: optie '%s' is niet eenduidig\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: optie '--%s' staat geen argument toe\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: optie '%c%s' staat geen argument toe\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: optie '--%s' vereist een argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: onbekende optie '--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: onbekende optie '%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ongeldige optie -- '%c'\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: optie vereist een argument -- '%c'\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: optie '-W %s' is niet eenduidig\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: optie '-W %s' staat geen argument toe\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: optie '-W %s' vereist een argument\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "geen geheugen meer beschikbaar"
+
+# Is hier een Nederlandse term voor? "Datapijp"? "Sluis" (via "doorsluizen" als vertaling voor "pipe" als werkwoord)?
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "kan geen pipe aanmaken"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s subproces mislukt"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Uitvoeringstijden (in seconden)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTAAL                :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "tijd in %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle mislukt"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "kan fd %d niet herstellen: dup2 mislukt"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "%s subproces"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s subproces kreeg fataal signaal %d"
+
+#~ msgid "state %d"
+#~ msgstr "toestand %d"
+
+#, fuzzy
+#~ msgid "stray '@'"
+#~ msgstr "losse `@'"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "niet-gedefinieerde %%define variabele `%s' doorgegeven aan "
+#~ "muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "niet-gedefinieerde %%define variabele `%s' doorgegeven aan "
+#~ "muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "niet-gedefinieerde %%define variabele `%s' doorgegeven aan "
+#~ "muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "niet-gedefinieerde %%define variabele `%s' doorgegeven aan "
+#~ "muscle_percent_define_check_values"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Genereer LALR(1) en GLR parsers.\n"
+#~ "\n"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "tokens %s en %s hebben beide nummer %d toegewezen gekregen"
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644
index 0000000..eb721ab
--- /dev/null
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..73ce275
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,1378 @@
+# Polish translations for GNU Bison package.
+# Copyright (C) 2004, 2005, 2006, 2008, 2010, 2011, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Wojciech Polak <polak@gnu.org>, 2004, 2005, 2006, 2008, 2010, 2011, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-10 19:24+0100\n"
+"Last-Translator: Wojciech Polak <polak@gnu.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "ostrzeżenie"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "błąd"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "fatalny błąd"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+"    Konflikt pomiędzy regułą %d i symbolem leksykalnym %s rozwiązany jako "
+"przesunięcie"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Konflikt pomiędzy regułą %d i symbolem leksykalnym %s rozwiązany jako "
+"redukcja"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Konflikt pomiędzy regułą %d i symbolem leksykalnym %s rozwiązany jako "
+"błąd"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikty: %d przesunięcie/redukcja, %d redukcja/redukcja\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikty: %d przesunięcie/redukcja\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikty: %d redukcja/redukcja\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Stan %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr odnosi się tylko do analizatorów składni GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "spodziewano się %d konfliktu przesunięcie/redukcja"
+msgstr[1] "spodziewano się %d konfliktów przesunięcie/redukcja"
+msgstr[2] "spodziewano się %d konfliktów przesunięcie/redukcja"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "spodziewano się %d konfliktu redukcja/redukcja"
+msgstr[1] "spodziewano się %d konfliktów redukcja/redukcja"
+msgstr[2] "spodziewano się %d konfliktów redukcja/redukcja"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: nie można otworzyć"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "błąd wejścia/wyjścia"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "nie można zamknąć pliku"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "odmowa nadpisania pliku wejściowego %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "konflikt wyjść do pliku %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Spróbuj `%s --help' aby uzyskać więcej informacji.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Użycie: %s [OPCJA]... PLIK\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Tworzy deterministyczny analizator składni LR lub uogólniony LR (GLR)\n"
+"używając tablic LALR(1), IELR(1) lub kanonicznej LR(1).\n"
+"Wsparcie dla IELR(1) i kanonicznego LR(1) jest eksperymentalne.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Obowiązkowe argumenty dla długich opcji są obowiązkowe również dla krótkich "
+"opcji.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "To samo dotyczy argumentów opcjonalnych.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Tryby działania:\n"
+"  -h, --help                 wyświetla pomoc i kończy pracę\n"
+"  -V, --version              wyświetla informacje o wersji i kończy pracę\n"
+"      --print-localedir      wyświetla katalog z danymi dotyczącymi "
+"lokalizacji\n"
+"      --print-datadir        wyświetla katalog zawierający szkielety i XSLT\n"
+"  -y, --yacc                 emuluje POSIX Yacc\n"
+"  -W, --warnings[=KATEGORIA] zgłasza ostrzeżenia dotyczące danej kategorii\n"
+"  -f, --feature[=FUNKCJA]    aktywuje różne funkcje programu\n"
+"\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Analizator składni:\n"
+"  -L, --language=JĘZYK       używa wyjściowy język programowania\n"
+"  -S, --skeleton=PLIK        używa podanego szkieletu\n"
+"  -t, --debug                produkuje analizator zdolny do odpluskwiania\n"
+"      --locations            włącza obliczanie lokacji\n"
+"  -D, --define=NAZWA[=WARTOŚĆ] podobnie jak `%define NAZWA \"WARTOŚĆ\"'\n"
+"  -F, --force-define=NAZWA[=WARTOŚC] nadpisuje `%define NAZWA \"WARTOŚĆ\"'\n"
+"  -p, --name-prefix=PREFIKS  dopisuje początkowy PREFIKS do zewnętrznych "
+"symboli\n"
+"                             zastąpione przez '-Dapi.prefix=PREFIKS'\n"
+"  -l, --no-lines             zabrania tworzenia dyrektyw `#line'\n"
+"  -k, --token-table          dołącza tablicę nazw symboli leksykalnych\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Wyjście:\n"
+"      --defines[=PLIK]       produkuje także plik nagłówkowy\n"
+"  -d                         podobnie, ale bez podania PLIKU (dla POSIX "
+"Yacc)\n"
+"  -r, --report=LISTA         produkuje także szczegóły na temat automatu\n"
+"      --report-file=PLIK     zapisuje raport do PLIKU\n"
+"  -v, --verbose              to samo co `--report=state'\n"
+"  -b, --file-prefix=PREFIKS  ustaw PREFIKS dla plików wyjściowych\n"
+"  -o, --output=PLIK          przekierowuje wyjście do PLIKU\n"
+"  -g, --graph[=PLIK]         produkuje także graf automatu\n"
+"  -x, --xml[=PLIK]           produkuje także raport XML na temat automatu\n"
+"                             (schemat XML jest eksperymentalny)\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Kategorie ostrzeżeń:\n"
+"  `midrule-values'  nieustawione lub nieużywane wartości reguł\n"
+"  `yacc'            niekompatybilności z POSIX Yacc\n"
+"  `conflicts-sr'    konflikty przesunięcie/redukcja (domyślnie włączone)\n"
+"  `conflicts-rr'    konflikty redukcja/redukcja (domyślnie włączone)\n"
+"  `deprecated'      przestrzałe konstrukcje\n"
+"  `other'           wszystkie inne ostrzeżenia (domyślnie włączone)\n"
+"  `all'             wszystkie ostrzeżenia\n"
+"  `no-KATEGORIA'    wyłącza ostrzeżenia w KATEGORII\n"
+"  `none'            wyłącza wszystkie ostrzeżenia\n"
+"  `error'           traktuje ostrzeżenia jako błędy\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"LISTA stanowi słowa przedzielone przecinkami. Dopuszczalne są następujące "
+"słowa:\n"
+"  `state'        opisuje stany\n"
+"  `itemset'      dodaje symbole pochodne do listy symboli podstawowych\n"
+"  `look-ahead'   drukuje listę możliwych w każdej pozycji symboli-następców\n"
+"  `solved'       opisuje rozwiązanie konfliktów przesunięcie/redukcja\n"
+"  `all'          dołącza wszystkie powyższe informacje\n"
+"  `none'         wyłącza raport\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"FUNKCJA stanowi słowa przedzielone przecinkami. Dopuszczalne są następujące "
+"słowa:\n"
+"  `caret'        pokazuje błędy przy użyciu karety (symbol ^)\n"
+"  `all'          wszystkie powyższe\n"
+"  `none'         żadne z powyższych\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "O błędach programu poinformuj <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "strona domowa %s: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr "Pomoc w używaniu oprogramowania GNU: <http://www.gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"O błędach tłumaczenia poinformuj <translation-team-pl@lists.sourceforge."
+"net>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Dla pełnej dokumentacji, uruchom: info bison\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Napisany przez Roberta Corbetta i Richarda Stallmana.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Niniejszy program jest wolnym oprogramowaniem; warunki kopiowania są "
+"opisane\n"
+"w źródłach. Autorzy nie dają ŻADNYCH gwarancji, w tym również gwarancji\n"
+"PRZYDATNOŚCI DO SPRZEDAŻY LUB DO KONKRETNYCH CELÓW.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "wielokrotne deklaracje szkieletu są nieprawidłowe"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: nieprawidłowy język"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "wielokrotne deklaracje językowe są nieprawidłowe"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: brakujący argument"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "dodatkowy argument %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "pusta"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramatyka"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Utworzone przez %s.\n"
+"// Błędy proszę zgłaszać na adres <%s>.\n"
+"// Strona domowa: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "przepełnienie numeru linii"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "przepełnienie numeru kolumny"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "bezużyteczna reguła w analizatorze z powodu konfliktów"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "zredefiniowana zmienna %%define %s"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "poprzednia definicja"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: niezdefiniowana zmienna %%define %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "nieprawidłowa wartość dla boole'owskiej zmiennej %%define %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "nieprawidłowa wartość dla zmiennej %%define %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "zaakceptowana wartość: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "brakujący identyfikator w deklaracji parametrów"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " typ %d jest %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "przesunięcie, i przejście do stanu %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "przejście do stanu %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "błąd (symbol niełączący się)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "redukcja przy użyciu reguły %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "akceptowanie"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$domyślnie"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "Stan %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Symbole terminalne i reguły, w których występują"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Symbole nieterminalne i reguły, w których występują"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " po lewej:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " po prawej:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Bezużyteczne reguły w analizatorze z powodu konfliktów"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "wielokrotne deklaracje %s"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "niezgodność typów powrotu przy połączeniu funkcji %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "poprzednia deklaracja"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "zignorowano powtórzoną nazwę symbolu dla %s"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "reguła dana dla symbolu leksykalnego %s"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "konflikt typu w domyślnej akcji: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr ""
+"pusta reguła i brak akcji dla symbolu nieterminalnego z określeniem typu"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "nieużywana wartość: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "nieustawiona wartość: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "symbol leksykalny dla %%prec nie jest zdefiniowany: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "tylko jedno %s dozwolone na jedną regułę"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s wpływa tylko na analizatory składni GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "za %s musi być umieszczona liczba dodatnia"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "zbyt długa reguła"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "brak reguł w gramatyce wejściowej"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "reguła bezużyteczna w gramatyce"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "Symbol nieterminalny bezużyteczny w gramatyce: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Symbole nieterminalne bezużyteczne w gramatyce"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Nieużywane symbole terminalne w gramatyce"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Bezużyteczne reguły w gramatyce"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d bezużyteczny symbol nieterminalny w gramatyce"
+msgstr[1] "%d bezużyteczne symbole nieterminalne w gramatyce"
+msgstr[2] "%d bezużytecznych symboli nieterminalnych w gramatyce"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d bezużyteczna reguła w gramatyce"
+msgstr[1] "%d bezużyteczne reguły w gramatyce"
+msgstr[2] "%d bezużytecznych reguł w gramatyce"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "początkowy symbol %s nie dziedziczy żadnego zdania"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "zabłąkany '%s'"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "znak ';' może być konieczny na końcu kodu akcji"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "przyszłe wersje Bisona nie będą dodawać znaku ';'"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "użycie YYFAIL, które jest przestarzałe i będzie usunięte"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "odnosi się do: %c%s w %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "może chodziło o: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", ukrywanie %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " w %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", nie jest dostępne z akcji mid-rule w $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "liczba całkowita poza zakresem: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "nieprawidłowe odwołanie: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"błąd składni za znakiem '%c', spodziewano się liczby, litery, '_', '[', lub "
+"'$'"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "nie znaleziono symbolu w produkcji przed $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "nie znaleziono symbolu w produkcji: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "mylące odniesienie: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "niejednoznaczne odniesienie: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "jawny typ w gramatyce beztypowej"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr ""
+"$$ w pozycji $%d należący do pośredniej reguły %s nie posiada "
+"zadeklarowanego typu"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ należący do %s nie posiada zadeklarowanego typu"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s należący do %s nie posiada zadeklarowanego typu"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "zabłąkany znak ',' potraktowany jako biały znak"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "nieprawidłowa dyrektywa: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "nieprawidłowy identyfikator: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "nieprawidłowy znak"
+msgstr[1] "nieprawidłowe znaki"
+msgstr[2] "nieprawidłowych znaków"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "niespodziewany identyfikator w nazwie: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "oczekiwano identyfikatora"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "nieprawidłowy znak w nazwie"
+msgstr[1] "nieprawidłowe znaki w nazwie"
+msgstr[2] "nieprawidłowych znaków w nazwie"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "pusty literalny znak"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "dodatkowe znaki w literalnym znaku"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "nieprawidłowy pusty znak"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "nieprawidłowa liczba po \\-escape: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "nieprawidłowy znak po \\-escape: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "brakujący %s na końcu pliku"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "brakujący %s na końcu linii"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "niedomknięta dyrektywa %s w szkielecie"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "za mało argumentów dla dyrektywy %s w szkielecie"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "za dużo argumentów dla dyrektywy %s w szkielecie"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "nieprawidłowa wartość $: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX Yacc zabrania myślników w nazwach symboli: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "zbyt dużo symboli w gramatyce wejściowej (limit wynosi %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s redeklaracja dla %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s redeklaracja dla <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "zredefiniowany symbol %s"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "zredefiniowany symbol %s"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "przedefiniowanie numeru symbolu leksykalnego %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"użyty symbol %s nie jest zdefiniowany jako symbol leksykalny i nie posiada "
+"reguł"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "symbol %s użyty więcej niż jeden raz jako łańcuch literalny"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "symbol %s podany więcej niż jeden łańcuch literalny"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "redeklaracja numeru symbolu leksykalnego %d dla %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "poprzednia deklaracja dla %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "symbol początkowy %s jest niezdefiniowany"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "symbol początkowy %s jest symbolem leksykalnym"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "domyślny oznaczony %%destructor deklarowany ponownie"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "domyślny nieoznaczony %%destructor deklarowany ponownie"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "domyślny oznaczony %%printer deklarowany ponownie"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "domyślny nieoznaczony %%printer deklarowany ponownie"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "usuwanie '%s' nie powiodło się"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "utworzenie tymczasowego pliku nie powiodło się"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "zapisanie standardowego wejścia nie powiodło się"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "zapisanie standardowego wyjścia nie powiodło się"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "otwarcie tmpfile nie powiodło się"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr "nie powiodło się przekierowanie stdout bisona do tymczasowego pliku"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr "nie powiodło się przekierowanie stdin m4 z tymczasowego pliku"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "otwarcie tymczasowego pliku nie powiodło się"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr "nie powiodło się przekierowanie stdout m4 do tymczasowego pliku"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "dodatkowy program '%s' przerwany"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "dodatkowy program '%s' nie znaleziony"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr "nie powiodło się przekierowanie stdin bisona z tymczasowego pliku"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "nieprawidłowy argument %s dla %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "niejednoznaczny argument %s dla %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Prawidłowe argumenty to:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u zwolnione (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u zapamiętane (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u zapamiętane (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u zapamiętane (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "histogram rejestru zliczeń\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "histogram rejestru wielkości\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "histogram gęstości\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statystyki bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Zakumulowane przebiegi = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "nie można odczytać pliku statystyk"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "zły rozmiar pliku statystyk\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "nie można zapisać pliku statystyk"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "nie można otworzyć pliku statystyk do zapisu"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "błąd zapisu"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Nieznany błąd systemu"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: opcja '%s' jest niejednoznaczna; możliwości:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: opcja '--%s' nie może mieć argumentów\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: opcja '%c%s' nie może mieć argumentów\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: opcja '--%s' wymaga argumentu\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: nieznana opcja '--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: nieznana opcja '%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: błędna opcja -- '%c'\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opcja wymaga argumentu -- '%c'\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: opcja '-W %s' jest niejednoznaczna\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: opcja '-W %s' nie może mieć argumentów\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: opcja '-W %s' wymaga argumentu\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "pamięć wyczerpana"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "nie można utworzyć potoku"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "podproces %s nie powiódł się"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Czas wykonania (w sekundach)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " CAŁKOWITY             :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "czas w %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle nie powiodło się"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "nie można odzyskać fd %d: wywołanie dup2 nie powiodło się"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "podproces %s"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "podproces %s otrzymał nieprawidłowy sygnał %d"
+
+#~ msgid "state %d"
+#~ msgstr "stan %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "zabłąkany '@'"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "niezdefiniowana zmienna %%define `%s' przekazana do "
+#~ "muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "niezdefiniowana zmienna %%define `%s' przekazana do "
+#~ "muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "niezdefiniowana zmienna %%define `%s' przekazana do "
+#~ "muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "niezdefiniowana zmienna %%define `%s' przekazana do "
+#~ "muscle_percent_define_check_values"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "GNU Bison tworzy analizatory składni LALR(1) i GLR.\n"
+#~ "\n"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "oba symbole leksykalne %s i %s mają przypisaną wartość %d"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "dodatkowy program `%s' nie mógł być wywołany"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "nieprawidłowa sekwencja ucieczki: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "nierozpoznana sekwencja ucieczki: %s"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: niewłaściwa opcja -- %c\n"
+
+#~ msgid "%d nonterminal"
+#~ msgid_plural "%d nonterminals"
+#~ msgstr[0] "%d nieterminal"
+#~ msgstr[1] "%d nieterminale"
+#~ msgstr[2] "%d nieterminali"
+
+#~ msgid " and "
+#~ msgstr " i "
+
+#~ msgid "%d rule"
+#~ msgid_plural "%d rules"
+#~ msgstr[0] "%d reguła"
+#~ msgstr[1] "%d reguły"
+#~ msgstr[2] "%d reguł"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Jeśli długa opcja posiada obowiązkowy argument, to wtedy obowiązkowy "
+#~ "jest\n"
+#~ "on także dla równoważnej jej opcji krótkiej.  Podobnie jest dla "
+#~ "argumentów\n"
+#~ "opcjonalnych.\n"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Reguły nieredukowalne"
+
+#~ msgid "useless rule"
+#~ msgstr "bezużyteczna reguła"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "bezużyteczny symbol nieterminalny: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Bezużyteczne symbole nieterminalne"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Symbole terminalne, które nie są użyte"
+
+#~ msgid "Useless rules"
+#~ msgstr "Bezużyteczne reguły"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d nieredukowalna reguła\n"
+#~ msgstr[1] "%d nieredukowalne reguły\n"
+#~ msgstr[2] "%d nieredukowalnych reguł\n"
+
+#~ msgid "warning: "
+#~ msgstr "ostrzeżenie: "
+
+#~ msgid "missing `{' in %s"
+#~ msgstr "brakuje `{' w %s"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr "dodatkowy program `%s' nie powiódł się (kod wyjścia %d)"
+
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "błąd składni: nie można cofnąć przesunięcia symbolu leksykalnego"
+
+#~ msgid "Stack now"
+#~ msgstr "Stos obecnie"
+
+#~ msgid "Reducing stack by rule %d (line %u), "
+#~ msgstr "Redukcja stosu poprzez regułę %d (linia %u), "
+
+#~ msgid "parser stack overflow"
+#~ msgstr "przepełnienie stosu analizatora"
+
+#~ msgid "Stack size increased to %lu\n"
+#~ msgstr "Rozmiar stosu zwiększony do %lu\n"
+
+#~ msgid "Entering state %d\n"
+#~ msgstr "Wejście w stan %d\n"
+
+#~ msgid "Reading a token: "
+#~ msgstr "Odczyt symbolu leksykalnego: "
+
+#~ msgid "Now at end of input.\n"
+#~ msgstr "Teraz na końcu wejścia.\n"
+
+#~ msgid "Next token is"
+#~ msgstr "Następny symbol leksykalny to"
+
+#~ msgid "Shifting"
+#~ msgstr "Przesunięcie"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "POSIX zabrania deklaracji w gramatyce"
+
+#~ msgid "syntax error, unexpected %s"
+#~ msgstr "błąd składni, niespodziewany symbol %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s"
+#~ msgstr "błąd składni, niespodziewany symbol %s, oczekiwano %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s"
+#~ msgstr "błąd składni, niespodziewany symbol %s, oczekiwano %s lub %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+#~ msgstr "błąd składni, niespodziewany %s, oczekiwano %s lub %s lub %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+#~ msgstr ""
+#~ "błąd składni, niespodziewany symbol %s, oczekiwano %s lub %s lub %s lub %s"
+
+#~ msgid "syntax error; also memory exhausted"
+#~ msgstr "błąd składni; ponadto wyczerpana pamięć"
+
+#~ msgid "syntax error"
+#~ msgstr "błąd składni"
+
+#~ msgid "Error: discarding"
+#~ msgstr "Błąd: odrzucenie"
+
+#~ msgid "Error: popping"
+#~ msgstr "Błąd: zdejmowanie"
+
+#~ msgid "Error: discarding lookahead"
+#~ msgstr "Błąd: odrzucenie symbolu-następcy"
+
+#~ msgid "invalid $ value"
+#~ msgstr "nieprawidłowa wartość $"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "konflikt pierwszeństw dla %s i %s"
+
+#~ msgid "conflicting associativities for %s (%s) and %s (%s)"
+#~ msgstr "konflikt łączności operatorów dla %s (%s) i %s (%s)"
diff --git a/po/pt.gmo b/po/pt.gmo
new file mode 100644
index 0000000..7171673
--- /dev/null
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..ba03fc1
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,1104 @@
+# bison-2.4.1: Translation to Portuguese.
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Hugo Patrício <hugo.a.patricio@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-2.4.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2009-01-28 00:15+0100\n"
+"Last-Translator: Hugo Patrício <hugo.a.patricio@gmail.com>\n"
+"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Portuguese\n"
+"X-Poedit-Country: PORTUGAL\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "aviso"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "Erro de E/S"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "erro fatal"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr ""
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr ""
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr ""
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "cannot close file"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr ""
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr ""
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Escrito por Robert Corbett e Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr ""
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr ""
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr ""
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr ""
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr ""
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "vazio"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramática"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "ultrapassado o número de linhas"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "ultrapassado o número de colunas"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr ""
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr ""
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr ""
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr ""
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr ""
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr "tipo %d é %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr ""
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "ir para o estado %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "erro (não-associativo)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr ""
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "aceite"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr ""
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "ir para o estado %d\n"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr ""
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr ""
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr "à esquerda:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr "à direita:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr ""
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr ""
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr ""
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr ""
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr ""
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr ""
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr ""
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr ""
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr ""
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "regra é muito longa"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr ""
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr ""
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr ""
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr ""
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr ""
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr ""
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "integral fora de alcance: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "directriz inválida: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr ""
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ de `%s' não tem tipo declarado"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ de `%s' não tem tipo declarado"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d de `%s' não tem tipo declarado"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr ""
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "directriz inválida: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "directriz inválida: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "caracter inválido: %s"
+msgstr[1] "caracter inválido: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "caracter inválido: %s"
+msgstr[1] "caracter inválido: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "caracter nulo inválido"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "caracter nulo inválido: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "caracter inválido: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr ""
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr ""
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr ""
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr ""
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr ""
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr ""
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr ""
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr ""
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr ""
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr ""
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr ""
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr ""
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr ""
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr ""
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr ""
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr ""
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr ""
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr ""
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr ""
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr ""
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr ""
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr ""
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr ""
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "cannot close file"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "cannot close file"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr ""
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "erro fatal"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr ""
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr ""
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr ""
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr ""
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memória exausta"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "cannot close file"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr ""
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr ""
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr ""
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "sequência de escape inválida: %s"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644
index 0000000..650acc5
--- /dev/null
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..143a8dd
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,1236 @@
+# bison: translation to Brazilian Portuguese (pt_BR)
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Alexandre Folle de Menezes <afmenez@terra.com.br>, 2002, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 1.875\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2003-01-06 02:30-0300\n"
+"Last-Translator: Alexandre Folle de Menezes <afmenez@terra.com.br>\n"
+"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "aviso"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "Erro de E/S"
+
+#: src/complain.c:208 src/complain.c:215
+#, fuzzy
+msgid "fatal error"
+msgstr "erro fatal: "
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Conflito entre a regra %d e a token %s resolvido como `shift`."
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Conflito entre a regra %d e a token %s resolvido como `reduce`."
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Conflito entre a regra %d e a token %s resolvido como um erro."
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflitos: %d de deslocamento/redução, %d de redução/redução\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflitos: %d de deslocamento/redução\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflitos: %d de redução/redução\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Estado %d"
+
+#: src/conflicts.c:582
+#, fuzzy, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%s afeta apenas analisadores GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "esperado: %d conflito de deslocamento/redução"
+msgstr[1] "esperados: %d conflitos de deslocamento/redução"
+
+#: src/conflicts.c:621
+#, fuzzy, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "esperados 0 conflitos de redução/redução"
+msgstr[1] "esperados 0 conflitos de redução/redução"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "impossível abrir o arquivo `%s'"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "impossível fechar o arquivo"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "saídas conflitantes para o arquivo %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "tente `%s --help' para mais informações.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Uso: %s [OPCAO]... ARQUIVO\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Analizador:\n"
+"  -S, --skeleton=arquivo     especifica o skeleto a ser usado\n"
+"  -t, --debug                instrumenta o analisador para depuração\n"
+"      --locations            habilita a computação de localizações\n"
+"  -p, --name-prefix=PREFIXO  adiciona PREFIXO aos símbolos externos\n"
+"  -l, --no-lines             não gera diretivas `#line'\n"
+"  -n, --no-parser            apenas gera as tabelas\n"
+" --k, --token-table          inclui uma tabela de nomes de tokens\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Saída:\n"
+"  -d, --defines              também produz um arquivo de cabeçalho\n"
+"  -r, --report=ITENS         também produz detalhes do autômato\n"
+"  -v, --verbose              o mesmo que `--report=state'\n"
+"  -b, --file-prefix=PREFIXO  especifica o PREFIXO para os arquivos de saída\n"
+"  -o, --output=ARQUIVO       armazena a saída em ARQUIVO\n"
+"  -g, --graph                também produz uma descrição em VCG do autômato\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+#, fuzzy
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"ITENS é uma lista separada por vírgulas, que pode incluir:\n"
+"  `state'        descreve os estados\n"
+"  `itemset'      completa os conjuntos de ítens básicos com seus "
+"fechamentos\n"
+"  `lookahead'    associa explicitamente as previsões com os ítens\n"
+"  `solved'       descreve a solução de conflitos de deslocamento/redução\n"
+"  `all'          inclui todas as informações acima\n"
+"  `none'         desabilita o relatório\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Informe os erros para <bug-bison@gnu.org>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Escrito por Robert Corbett e Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Este é um software livre; veja o código fonte para condições de copyright. "
+"Não\n"
+"existe NENHUMA garantia; nem mesmo a garantia implícita de COMERCIABILIDADE "
+"ou\n"
+"ADEQUAÇÃO À QUALQUER FINALIDADE PARTICULAR.\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "declarações de %s múltiplas"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "valor inválido: %s"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "declarações de %s múltiplas"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "falta operando depois de `%s'"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "operando `%s' sobrando"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "vazio"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramática"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr ""
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr ""
+
+#: src/main.c:146
+#, fuzzy
+msgid "rule useless in parser due to conflicts"
+msgstr "regra não reduzida por causa de conflitos"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "símbolo %s redefinido"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr ""
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "valor inválido: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "identificador faltando na declaração do parâmetro"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " tipo %d é %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "deslocar, e ir ao estado %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "ir ao estado %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "erro (não associativo)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduzir usando a regra %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "aceitar"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$padrão"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Estado %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminais, com as regras onde eles aparecem"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Não-terminais com as regras onde eles aparecem"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " à esquerda:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " à direita:"
+
+#: src/print.c:510
+#, fuzzy
+msgid "Rules useless in parser due to conflicts"
+msgstr "regra não reduzida por causa de conflitos"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "declarações de %s múltiplas"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "tipo de resultado conflita na fução de mescla %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+#, fuzzy
+msgid "previous declaration"
+msgstr "declarações de %s múltiplas"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "regra fornecida para %s, que é um token"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "conflito de tipos na ação padrão: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "regra vazia para um não-terminal com tipo, e não há ações"
+
+#: src/reader.c:328
+#, fuzzy, c-format
+msgid "unused value: $%d"
+msgstr "valor inválido: %s"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr ""
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "apenas um %s é permitido por regra"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s afeta apenas analisadores GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s deve ser seguido por um número positivo"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr ""
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "não há regras na gramática de entrada"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "não há regras na gramática de entrada"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "Não-terminais com as regras onde eles aparecem"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "não há regras na gramática de entrada"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "não há regras na gramática de entrada"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "não há regras na gramática de entrada"
+msgstr[1] "não há regras na gramática de entrada"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "símbolo de início %s não deriva nenhuma sentença"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "inteiro fora de faixa: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "diretiva inválida: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, fuzzy, c-format
+msgid "misleading reference: %s"
+msgstr "redefinindo precedência de %s"
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "argumento %s ambíguo para %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$%d de `%s' não tem tipo declarado"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ de `%s' não tem tipo declarado"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d de `%s' não tem tipo declarado"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "`,' perdida tratada como branco"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "diretiva inválida: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "diretiva inválida: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "caractere inválido: %s"
+msgstr[1] "caractere inválido: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "caractere inválido: %s"
+msgstr[1] "caractere inválido: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, fuzzy, c-format
+msgid "invalid null character"
+msgstr "caractere inválido: %s"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "seqüência de escape inválida: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "caractere inválido: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "`%s' faltando no final do arquivo"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "`%s' faltando no final do arquivo"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, fuzzy, c-format
+msgid "invalid $ value: $%d"
+msgstr "valor inválido: %s"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr ""
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "redeclaração de %s para %s"
+
+#: src/symtab.c:164
+#, fuzzy, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "redeclaração de %s para %s"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "símbolo %s redefinido"
+
+#: src/symtab.c:346
+#, fuzzy, c-format
+msgid "symbol %s redeclared"
+msgstr "símbolo %s redefinido"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redefinindo número de token de usuário de %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr "símbolo %s usado, mas não definido como uma token e não tem regras"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "símbolo `%s' usado mais the uma vez como uma string literal"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "símbolo `%s' associado a mais de uma string literal"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "redeclaração de tipo para %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "redeclaração de tipo para %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "o símbolo de início %s não está definido"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "o símbolo de início %s é um terminal"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "programa subsidiário `%s' falhou"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "programa subsidiário `%s' não foi encontrado"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumento %s inválido para %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumento %s ambíguo para %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Argumentos válidos são:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u liberados (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u em cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u em cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u em cache (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "histograma de log de contagens\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "histograma de log de tamanhos\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "histograma de densidades\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Estatísticas de bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Execuções acumuladas = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Impossível ler o arquivo de estatísticas."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Tamanho do arquivo de estatísticas com erro.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Impossível de escrever no arquivo de estatísticas."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Impossível abrir arquivo de estatísticas para escrita."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "erro fatal: "
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Erro de sistema desconhecido"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: a opção `%s' é ambígua\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: a opção `--%s' no admite nenhum argumento\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: a opção `%c%s' não admite nenhum argumento\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: a opção `%s' exige um argumento\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: opção `--%s' não reconhecida\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: opção `%c%s' não reconhecida\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opção -- %c inválida\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: a opção -- %c exige um argumento\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: a opção `-W %s' é ambígua\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: a opção `-W %s' não admite nenhum argumento\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: a opção `%s' exige um argumento\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memória esgotada"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "impossível fechar o arquivo"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Tempos de execução (segundos)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTAL                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "tempo em  %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "estado %d"
+
+#~ msgid "warning: "
+#~ msgstr "aviso: "
+
+#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
+#~ msgstr "GNU bison gera analisadores para gramáticas LALR(1).\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Se uma opção longa mostra um argumento como obrigatório, então ele é\n"
+#~ "obrigatório para a opção curta equivalente também.  Igualmente para os\n"
+#~ "argumentos opcionais.\n"
+
+#~ msgid ""
+#~ "Operation modes:\n"
+#~ "  -h, --help      display this help and exit\n"
+#~ "  -V, --version   output version information and exit\n"
+#~ "  -y, --yacc      emulate POSIX yacc\n"
+#~ msgstr ""
+#~ "Modos de operação:\n"
+#~ "  -h, --help      exibe esta ajuda e sai\n"
+#~ "  -V, --version   mostra informações de versão e sai\n"
+#~ "  -y, --yacc      emula o yacc POSIX\n"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "o POSIX proíbe declarações na gramática"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Regras nunca reduzidas"
+
+#~ msgid "useless rule"
+#~ msgstr "regra inútil"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "não-terminal inútil: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Não-terminais inúteis"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Terminais que não foram usados"
+
+#~ msgid "Useless rules"
+#~ msgstr "Regras inúteis"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d regra que nunca foi reduzida\n"
+#~ msgstr[1] "%d regras que nunca foram reduzidas\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d não-terminal inútil"
+#~ msgstr[1] "%d não-terminal inútil"
+
+#~ msgid " and "
+#~ msgstr " e "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d regra inútil"
+#~ msgstr[1] "%d regras inúteis"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "seqüência de escape não reconhecida: %s"
+
+#~ msgid "missing `{' in `%s'"
+#~ msgstr "falta `{' em `%s'"
+
+#~ msgid "invalid $ value"
+#~ msgstr "valor $ inválido"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "precedências conflitantes para  %s e %s"
+
+#~ msgid "conflicting associativities for %s (%s) and %s (%s)"
+#~ msgstr "valores associativos conflitantes para %s (%s) e %s (%s)"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "tokens %s e %s associadas ao mesmo número %d"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opção -- %c ilegal\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "programa subsidiário `%s' não pôde ser invocado"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr "programa subsidiário `%s' falhou (estado de saída %d)"
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644
index 0000000..5f4a906
--- /dev/null
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..5ee6027
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,1302 @@
+# Mesajele în limba românã pentru GNU Bison.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Acest fiºier este distribuit sub aceeaºi licenþã ca ºi pachetul bison.
+# Laurentiu Buzdugan <lbuz@rolix.org>, 2003,2004,2005.
+#
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.0a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-06-03 12:00-0500\n"
+"Last-Translator: Laurentiu Buzdugan <lbuz@rolix.org>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "avertisment"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "Eroare I/O"
+
+#: src/complain.c:208 src/complain.c:215
+#, fuzzy
+msgid "fatal error"
+msgstr "eroare fatalã: "
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Conflict între regula %d ºi elementul (token) %s rezolvat ca shift"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Conflict între regula %d ºi elementul (token) %s rezolvat ca reduce"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Conflict între regula %d ºi elementul (token) %s rezolvat ca eroare"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflicte: %d shift/reduce, %d reduce/reduce\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflicte: %d shift/reduce\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflicte: %d reduce/reduce\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Stare %d"
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%% expect-rr poate fi folosit numai pentru parsere GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "am aºteptat %d conflict shift/reduce"
+msgstr[1] "am aºteptat %d conflicte shift/reduce"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "am aºteptat %d conflict reduce/reduce"
+msgstr[1] "am aºteptat %d conflicte reduce/reduce"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "nu am putut deschide fiºierul `%s'"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "nu pot închide fiºierul"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "ieºiri în conflict în fiºierul %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Încercaþi `%s --help' pentru informaþii suplimentare.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Folosire: %s [OPÞIUNE]... FIªIER\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -S, --skeleton=FIªIER      specificã scheletul de folosit\n"
+"  -t, --debug                instrumenteazã parserul pentru depanare\n"
+"      --locations            activeazã calculul locaþiilor\n"
+"  -p, --name-prefix=PREFIX   pune prefix PREFIX la simbolurile externe\n"
+"  -l, --no-lines             nu genera directive `#line'\n"
+"  -n, --no-parser            genereazã numai tabelele\n"
+"  -k, --token-table          include un tabel cu nume de elemente\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Ieºire:\n"
+"  -d, --defines              creazã ºi un fiºier header\n"
+"  -r, --report=LUCRURI       creazã ºi detalii despre automaton\n"
+"  -v, --verbose              la fel ca `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specificã un PREFIX pentru fiºierele ieºire\n"
+"  -o, --output=FIªIER        creazã ieºire în FIªIER\n"
+"  -g, --graph                creazã ºi o descriere VCG a automaton-ului\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+#, fuzzy
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"LUCRURI este o listã de cuvinte separate de virgulã ce pot fi:\n"
+"  `state'        descrie stãrile\n"
+"  `itemset'      completeazã seturile de elemente nucleu cu închiderea lor\n"
+"  `look-ahead'   asociazã explicit lookaheads la elemente\n"
+"  `solved'       descrie rezolvarea conflictelor shift/reduce\n"
+"  `all'          include toatã informaþia de mai sus\n"
+"  `none'         deactiveazã raportarea\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Raportaþi bug-uri la <bug-bison@gnu.org>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Scris de Robert Corbett ºi Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Acesta este software liber; vedeþi codul sursã pentru condiþii despre "
+"copiere.\n"
+"Nu existã nici o garanþie; nici chiar pentru COMERCIALIZARE sau de "
+"POTRIVIRE\n"
+"PENTRU UN SCOP ANUME.\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "declaraþii %s multiple"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "valoare invalidã: %s"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "declaraþii %s multiple"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "operator lipsã dupã `%s'"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "extra operator `%s'"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "goleºte"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramaticã"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr ""
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr ""
+
+#: src/main.c:146
+#, fuzzy
+msgid "rule useless in parser due to conflicts"
+msgstr "regula nu este redusã niciodatã din cauza conflictelor"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "simbol %s redefinit"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr ""
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "valoare invalidã: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "identificator lipsã în declaraþia parametrului"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " tipul %d este %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "shift, ºi mergi în starea %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "mergi în starea %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "eroare (ne-asociativitate)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduce folosind regula %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "accept"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$implicit"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Stare %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminale, cu reguli acolo unde acestea apar"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Non-terminale, cu reguli acolo unde acestea apar"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " pe stânga:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " pe dreapta:"
+
+#: src/print.c:510
+#, fuzzy
+msgid "Rules useless in parser due to conflicts"
+msgstr "regula nu este redusã niciodatã din cauza conflictelor"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "declaraþii %s multiple"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+"tipul rezultatului în conflict cu funcþia de combinare %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+#, fuzzy
+msgid "previous declaration"
+msgstr "prima declaraþie"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "regula datã pentru %s, care este un element (token)"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "conflict de tip pentru acþiunea implicitã: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "regulã vidã pentru nonterminal cu tip, ºi nici o acþiune"
+
+#: src/reader.c:328
+#, fuzzy, c-format
+msgid "unused value: $%d"
+msgstr "valoare invalidã: %s"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr ""
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "un singur %s permis pe fiecare regulã"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s afecteazã numai parsere GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s trebuie sã fie urmat de numere pozitive"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr ""
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "nici o regulã în gramatica furnizatã"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "nici o regulã în gramatica furnizatã"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "Non-terminale, cu reguli acolo unde acestea apar"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "nici o regulã în gramatica furnizatã"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "nici o regulã în gramatica furnizatã"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "nici o regulã în gramatica furnizatã"
+msgstr[1] "nici o regulã în gramatica furnizatã"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "simbol de start %s nu deriveazã nici o propoziþie"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "întreg în afara domeniului: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "directivã invalidã: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "argument ambiguu %s pentru %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$%d a lui `%s' nu are nici un tip declarat"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ a lui `%s' nu are nici un tip declarat"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d a lui `%s' nu are nici un tip declarat"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "Virgulã `,' rãtãcitã tratatã ca spaþiu gol"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "directivã invalidã: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "directivã invalidã: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "caracter invalid: %s"
+msgstr[1] "caracter invalid: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "caracter invalid: %s"
+msgstr[1] "caracter invalid: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "caracter null invalid"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "caracter null invalid: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "caracter invalid: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "`%s' lipsã la sfârºitul fiºierului"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "`%s' lipsã la sfârºitul liniei"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, fuzzy, c-format
+msgid "invalid $ value: $%d"
+msgstr "valoare invalidã: %s"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "prea multe simboluri în gramatica de intrare (limita este %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "redeclarare %s pentru %s"
+
+#: src/symtab.c:164
+#, fuzzy, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "redeclarare %s pentru %s"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "simbol %s redefinit"
+
+#: src/symtab.c:346
+#, fuzzy, c-format
+msgid "symbol %s redeclared"
+msgstr "simbol %s redefinit"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "numãrul elementului (token) definit de utilizator redefinit pentru %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"simbolul %s e folosit, dar nu este definit ca element (token) ºi nu are nici "
+"o regulã"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "simbolul `%s' este folosit de mai multe ori ca ºir literar"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "simbolului `%s' îi este dat mai mult de un singur ºir literar"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "redeclarare %s pentru %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "redeclarare %s pentru %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "simbolul de start %s nu este definit"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "simbolul de start %s este un element (token)"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "programul auxiliar `%s' a eºuat"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "programul auxiliar `%s' nu a fost gãsit"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argument invalid %s pentru %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argument ambiguu %s pentru %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Argumente valide sunt:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u eliberate (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u stocate (cached) (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u stocate (cached) (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u stocate (cached) (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "numãrã histograma jurnal\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "dimensiune histogramã jurnal\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "densitate histogramã\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistici bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Rulãri acumulate = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Nu am putut citi fiºierul de statistici."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Dimensiune fiºier cu statistici incorectã.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Nu am putut scrie fiºier statistici."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Nu am putut deschide fiºierul de statistici pentru scriere."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "eroare fatalã: "
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Eroare de sistem necunoscutã"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: opþiunea `%s' este ambiguã\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `--%s' nu permite un argument\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `%c%s' nu permite un argument\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: opþiunea `%s' necesitã un argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: opþiune nerecunoscutã `--%s'\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: opþiune nerecunoscutã `%c%s'\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opþiune ilegalã -- %c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opþiunea necesitã un argument -- %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: opþiunea `-W %s' este ambiguã\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `-W %s' nu permite un argument\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: opþiunea `%s' necesitã un argument\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memorie epuizatã"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "nu pot închide fiºierul"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Timp de execuþie (secunde)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTAL                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "timp în %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "stare %d"
+
+#~ msgid "warning: "
+#~ msgstr "avertisment: "
+
+#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
+#~ msgstr "GNU bison genereazã parsere pentru gramatici LALR(1).\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Dacã o opþiune lungã aratã un argument ca necesar, atunci el este "
+#~ "necesar\n"
+#~ "ºi pentru opþiunea scurtã echivalentã. Similar pentru argumentele "
+#~ "opþionale.\n"
+
+#~ msgid ""
+#~ "Operation modes:\n"
+#~ "  -h, --help      display this help and exit\n"
+#~ "  -V, --version   output version information and exit\n"
+#~ "  -y, --yacc      emulate POSIX yacc\n"
+#~ msgstr ""
+#~ "Moduri de operare:\n"
+#~ "  -h, --help      afiºeazã acest mesaj ºi terminã\n"
+#~ "  -V, --version   afiºeazã informaþii despre versiune ºi terminã\n"
+#~ "  -y, --yacc      emuleazã POSIX yacc\n"
+
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "eroare de sintaxã: nu pot da înapoi"
+
+#~ msgid "Stack now"
+#~ msgstr "Stiva curentã"
+
+#~ msgid "Reducing stack by rule %d (line %u), "
+#~ msgstr "Stivã redusã folosind regula %d (linia %u), "
+
+#~ msgid "parser stack overflow"
+#~ msgstr "depãsire de stivã pentru parser"
+
+#~ msgid "Stack size increased to %lu\n"
+#~ msgstr "Dimensiune stivei crescutã la %lu\n"
+
+#~ msgid "Entering state %d\n"
+#~ msgstr "Intru în starea %d\n"
+
+#~ msgid "Reading a token: "
+#~ msgstr "Citesc un element (token): "
+
+#~ msgid "Now at end of input.\n"
+#~ msgstr "Acum la sfârºitul intrãrii.\n"
+
+#~ msgid "Next token is"
+#~ msgstr "Urmãtorul element (token) este"
+
+#~ msgid "Shifting"
+#~ msgstr "Shift-ez"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "POSIX interzice declaraþii în gramaticã"
+
+#~ msgid "syntax error, unexpected %s"
+#~ msgstr "eroare de sintaxã, %s neaºteptat"
+
+#~ msgid "syntax error, unexpected %s, expecting %s"
+#~ msgstr "eroare de sintaxã, %s neaºteptat, aºtept %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s"
+#~ msgstr "eroare de sintaxã, %s neaºteptat, aºtept %s sau %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+#~ msgstr "eroare de sintaxã, %s neaºteptat, aºtept %s sau %s sau %s"
+
+#~ msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+#~ msgstr "eroare de sintaxã, %s neaºteptat, aºtept %s sau %s sau %s sau %s"
+
+#~ msgid "syntax error; also memory exhausted"
+#~ msgstr "eroare de sintaxã ºi memorie epuizatã"
+
+#~ msgid "syntax error"
+#~ msgstr "eroare de sintaxã"
+
+#~ msgid "Error: discarding"
+#~ msgstr "Eroare: elimin"
+
+#~ msgid "Error: popping"
+#~ msgstr "Eroare: scot (popping)"
+
+#~ msgid "Error: discarding lookahead"
+#~ msgstr "Eroare: elimin lookahead"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Regulile nu au fost reduse"
+
+#~ msgid "useless rule"
+#~ msgstr "regulã fãrã rost"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "nonterminal fãrã rost: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Nonterminale fãrã rost"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Terminale care nu sunt folosite"
+
+#~ msgid "Useless rules"
+#~ msgstr "Reguli fãrã rost"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d regulã niciodatã redusã\n"
+#~ msgstr[1] "%d reguli niciodatã reduse\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d nonterminal fãrã rost"
+#~ msgstr[1] "%d nonterminale fãrã rost"
+
+#~ msgid " and "
+#~ msgstr " ºi "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d regulã fãrã rost"
+#~ msgstr[1] "%d reguli fãrã rost"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "secvenþã escape invalidã: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "secvenþã escape nerecunoscutã: %s"
+
+#~ msgid "missing `{' in `%s'"
+#~ msgstr "`{' lipsã în `%s'"
+
+#~ msgid "invalid $ value"
+#~ msgstr "valoare $ invalidã"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr ""
+#~ "ambelor elementele (tokens) %s ºi %s le sunt alocate acelaºi numãr %d"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opþiune ilegalã -- %c\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "programul auxiliar `%s' nu poate fi invocat"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr "programul auxiliar `%s' a eºuat (stare de terminare %d)"
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644
index 0000000..da33f07
--- /dev/null
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..23a211c
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,1539 @@
+# Translation of bison messages to Russian
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Dmitry S. Sivachenko <dima@Chg.RU>, 1999, 2000, 2001, 2002.
+# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2009.
+# Pavel Maryanov <acid_jack@ukr.net>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.4.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2009-02-04 19:44+0200\n"
+"Last-Translator: Pavel Maryanov <acid_jack@ukr.net>\n"
+"Language-Team: Russian <gnu@mx.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "предупреждение"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "ошибка ввода-вывода"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "фатальная ошибка"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Конфликт между правилом %d и лексемой %s разрешен сдвигом"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Конфликт между правилом %d и лексемой %s разрешен выводом"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Конфликт между правилом %d и лексемой %s разрешен как ошибка"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "конфликты: %d сдвига/вывода, %d вывода/вывода\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "конфликты: %d сдвига/вывода\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "конфликты: %d вывода/вывода\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Состояние %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr применимо только к GLR парсерам"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "ожидался %d конфликт сдвига/вывода"
+msgstr[1] "ожидалось %d конфликта сдвига/вывода"
+msgstr[2] "ожидалось %d конфликтов сдвига/вывода"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "ожидался %d конфликт вывода/вывода"
+msgstr[1] "ожидалось %d конфликта вывода/вывода"
+msgstr[2] "ожидалось %d конфликтов вывода/вывода"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "не удается открыть файл «%s»"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "не удается закрыть файл"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "отказ перезаписи входного файла %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "конфликт вывода в файл %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Используйте «%s --help» для дополнительной информации.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Использование: %s [КЛЮЧИ]... ФАЙЛ\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr "Соответствующие длянные опции также соответствуют и коротким опциям.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "То-же допустимо для опциональных параметров.\n"
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Режимы функционирования:\n"
+"  -h, --help                  вывести эту справку и выйти\n"
+"  -V, --version               вывести информацию о версии и выйти\n"
+"      --print-localedir       вывести каталог, содержащий зависимые от "
+"локали данные\n"
+"      --print-datadir         вывести каталог содержащий заготовки и XSLT\n"
+"  -y, --yacc                  имитировать POSIX yacc\n"
+"  -W, --warnings=[КАТЕГОРИЯ]  выводить предупреждения в соответствии с "
+"КАТЕГОРИЕЙ\n"
+"\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Анализатор:\n"
+"  -L, --language=ЯЗЫК        указать выходной язык программирования\n"
+"                             (эксперементальная функция)\n"
+"  -S, --skeleton=ФАЙЛ        указать файл шаблона\n"
+"  -t, --debug                настроить анализатор для отладки\n"
+"      --locations            включить вычисление местоположений\n"
+"  -p, --name-prefix=ПРЕФИКС  подставить ПРЕФИКС для внешних символов\n"
+"  -l, --no-lines             не генерировать директивы «#line»\n"
+"  -k, --token-table          включить таблицу имен лексем\n"
+"\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Вывод:\n"
+"      --defines[=ФАЙЛ]       создать также файл заголовков\n"
+"  -d                         или если мы не можем указать ФАЙЛ "
+"(совместимость с POSIX Yacc)\n"
+"  -r, --report=ВЕЩИ          создать также пояснения в автомату\n"
+"      --report-file=FILE     записать отчет в ФАЙЛ\n"
+"  -v, --verbose              то же, что и «--report=state»\n"
+"  -b, --file-prefix=ПРЕФИКС  указать ПРЕФИКС для выходных файлов\n"
+"  -o, --output=ФАЙЛ          поместить вывод в ФАЙЛ\n"
+"  -g, --graph[=ФАЙЛ]         также вывести граф автомата\n"
+"  -x, --xml[=ФАЙЛ]           также вывести XML отчет автомата\n"
+"                             (сценарий XML - эксперементальный)\n"
+"\n"
+
+#: src/getargs.c:361
+#, fuzzy
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Категории предупреждения включают:\n"
+"  «midrule-values»  неназначенные или неиспользуемые значения в правилах\n"
+"  «yacc»            несовместимости с POSIX YACC\n"
+"  «all»             все предупреждения\n"
+"  «no-КАТЕГОРИЯ»    выключить предупреждения в КАТЕГОРИЯ\n"
+"  «none»            выключить все предупреждения\n"
+"  «error»           воспринимать все предупреждения как ошибки\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"ВЕЩИ - это список разделенных запятой слов, который может включать:\n"
+"  «state»        описать состояния\n"
+"  «itemset»      полный набор основных элементов вместе с их соседями\n"
+"  «look-ahead»   точные соответствия следующих токенов элементам\n"
+"  «solved»       описание решения конфликтов сдвига/вывода\n"
+"  «all»          включить всю эту информацию\n"
+"  «none»         отключить отчет\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Ошибки сообщайте по адресу <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Авторы: Роберт Корбет и Ричард Столмен.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Это свободная программа; условия распространения смотрите в исходных "
+"текстах.\n"
+"НИКАКИХ гарантий не предоставляется, даже гарантии ПОЛЕЗНОСТИ или "
+"ПРИГОДНОСТИ\n"
+"ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "множественные описания скелета не применимо"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "недопустимый язык «%s»"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "множественные описания языка не применимо"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "после «%s» пропущен операнд"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "лишний операнд «%s»"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "пусто"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Грамматика"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "переполнение номера строки"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "переполнение номера столбца"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "правило не применимо в парсере из-за конфликтов"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "повторное определение символа %s"
+
+#: src/muscle-tab.c:453
+#, fuzzy
+msgid "previous definition"
+msgstr "предыдущее описание"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "неиспользуемая переменная: $%d"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "в описании параметра отсутствует идентификатор"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " тип %d является %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "сдвиг, и переход в состояние %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "переход в состояние %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "ошибка (неассоциативная)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "вывод с использованием правила %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "принять"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Состояние %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Терминальные символы с правилами, в которых они появляются"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Нетерминальные символы с правилами, в которых они появляются"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " налево:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " направо:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Правило не применимо в парсере из-за конфликтов"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "множественное описание %s"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "конфликт типов результата при слиянии функции «%s»: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "предыдущее описание"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "правило задано для %s, который является лексемой"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "конфликт типов на действии по умолчанию: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr ""
+"пустое правило для типизированного нетерминального символа, и нет действия"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "неиспользуемая переменная: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "неуказанное значение: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "только одно %s разрешено на правило"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s влияет только на GLR парсеры"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "за %s должно следовать положительное число"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "слишком длинное правило"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "отсутствуют правила во входной грамматике"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "бесполезное правило в грамматике"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "нетерминал бесполезен в грамматике: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Нетерминал бесполезен в грамматике"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Терминалы не используются в грамматике"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Правила не используются в грамматике"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d нетерминал бесполезен в грамматике"
+msgstr[1] "%d нетерминала бесполезно в грамматике"
+msgstr[2] "%d нетерминалов бесполезно в грамматике"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d правило бесполезно в грамматике"
+msgstr[1] "%d правила бесполезно в грамматике"
+msgstr[2] "%d правила бесполезно в грамматике"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "начальный символ %s не выводит ни одного предложения"
+
+#: src/scan-code.l:188
+#, fuzzy, c-format
+msgid "stray '%s'"
+msgstr "некорректный «$»"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "выход за границы диапазона целого: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "неверная директива: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, fuzzy, c-format
+msgid "misleading reference: %s"
+msgstr "переопределение приоритета для %s"
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "неоднозначный аргумент %s для %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "указан тип в нетипизированной грамматике"
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ для правила $%d из «%s» не имеет описанного типа"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ в «%s» не имеет описанного типа"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%d из «%s» не имеет описанного типа"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "лишняя «,» считается пробелом"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "неверная директива: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "неверная директива: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "недопустимый символ: %s"
+msgstr[1] "недопустимый символ: %s"
+msgstr[2] "недопустимый символ: %s"
+
+#: src/scan-gram.l:354
+#, fuzzy, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "неожиданный элемент: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "недопустимый символ: %s"
+msgstr[1] "недопустимый символ: %s"
+msgstr[2] "недопустимый символ: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "недопустимый нулевой символ"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "недопустимый нулевой символ: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "недопустимый символ: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "отсутствует «%s» в конце файла"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "отсутствует «%s» в конце строки"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "недопустимое $ значение: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "слишком много символов во входящей грамматике (максимально %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "повторное описание %s для %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s повторно описан для <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "повторное определение символа %s"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "переопределение символа %s"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "переопределение номера лексемы пользователя для %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr "символ %s используется, но не определен как лексема и не имеет правил"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "символ «%s» используется более одного раза как строка литерала"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "символ «%s» указан более одной строки литерала"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "повторное описание типа для %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "предыдущее описание"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "начальный символ %s не определен"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "начальный символ %s является лексемой"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "переопределение для стандартного назначенного %%destructor"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "переопределение для стандартного неназначенного %%destructor"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "переопределение для стандартного назначенного %%printer"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "переопределение для стандартного неназначенного %%printer"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "вспомогательная программа `%s' завершилась неудачно"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "вспомогательная программа `%s' не найдена"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "недопустимый аргумент %s для %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "неоднозначный аргумент %s для %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Допустимые аргументы:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u освобождено (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u кэшировано (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u кэшировано (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u кэшировано (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "посчитать гистограмму журнала\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "гистограмма размера журнала\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "гистограмма плотности\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Статистика bitset:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Накоплено запусков = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Не удается прочитать файл статистики."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Неверный размер файла статистики.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Не удается записать в файл статистики."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Не удается открыть файл статистики для записи."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "фатальная ошибка"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Неизвестная системная ошибка"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: неоднозначный ключ «%s»\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: ключ «--%s» должен использоваться без аргумента\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: ключ «%c%s» должен использоваться без аргумента\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: ключ «%s» должен использоваться с аргументом\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: неизвестный ключ «--%s»\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: неизвестный ключ «%c%s»\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: неверный ключ -- %c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: ключ должен использоваться с аргументом -- %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: неоднозначный ключ «-W %s»\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: ключ «-W %s» должен использоваться без аргумента\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: ключ «%s» должен использоваться с аргументом\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "память исчерпана"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "не удается закрыть файл"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "»"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Время выполнения (сек.)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " СУММА                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "время в %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "состояние %d"
+
+#, fuzzy
+#~ msgid "stray '@'"
+#~ msgstr "некорректный «@»"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Генерирует LALR(1) и GLR парсеры.\n"
+#~ "\n"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "недопустимая экранирующая последовательность: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "нераспознанная экранирующая последовательность: %s"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "обеим лексемам %s и %s присвоен номер %d"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: недопустимый ключ -- %c\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "не удается выполнить вспомогательную программу «%s»"
+
+#~ msgid "warning: "
+#~ msgstr "предупреждение: "
+
+#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
+#~ msgstr "GNU bison генерирует анализаторы для грамматик LALR(1).\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Если длинная форма ключа определяет аргумент как обязательный, то он "
+#~ "также\n"
+#~ "является обязательным для короткой формы.  То же касается необязательных\n"
+#~ "аргументов.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Operation modes:\n"
+#~ "  -h, --help      display this help and exit\n"
+#~ "  -V, --version   output version information and exit\n"
+#~ "  -y, --yacc      emulate POSIX yacc\n"
+#~ msgstr ""
+#~ "Режимы функционирования:\n"
+#~ "  -h, --help             вывести эту справку и выйти\n"
+#~ "  -V, --version          вывести информацию о версии и выйти\n"
+#~ "      --print-localedir  вывести каталог, содержащий зависимые от локали "
+#~ "данные\n"
+#~ "  -y, --yacc             имитировать POSIX yacc\n"
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "POSIX запрещает помещать описания в грамматике"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Правила не сведены"
+
+#~ msgid "useless rule"
+#~ msgstr "бесполезное правило"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "бесполезные нетерминал: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Бесполезные нетерминалы"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Неиспользованные терминалы"
+
+#~ msgid "Useless rules"
+#~ msgstr "Бесполезные правила"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d правило не сведено\n"
+#~ msgstr[1] "%d правила не сведено\n"
+#~ msgstr[2] "%d правил не сведено\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d бесполезный нетерминал"
+#~ msgstr[1] "%d бесполезных нетерминала"
+#~ msgstr[2] "%d бесполезных нетерминалов"
+
+#~ msgid " and "
+#~ msgstr " и "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d бесполезное правило"
+#~ msgstr[1] "%d бесполезных правила"
+#~ msgstr[2] "%d бесполезных правил"
+
+#, fuzzy
+#~ msgid "missing `{' in `%s'"
+#~ msgstr "отсутствует `{' в %s"
+
+#~ msgid "invalid $ value"
+#~ msgstr "неверное $ значение"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "противоречивые приоритеты для %s и %s"
+
+#~ msgid "conflicting associativities for %s (%s) and %s (%s)"
+#~ msgstr "противоречивые значения ассоциативности для %s (%s) и %s (%s)"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr ""
+#~ "вспомогательная программа `%s' завершилась неудачно (код завершения %d)"
+
+#~ msgid "too many states (max %d)"
+#~ msgstr "слишком много состояний (максимально %d)"
+
+#~ msgid "reduce"
+#~ msgstr "вывод"
+
+#~ msgid "shift"
+#~ msgstr "сдвиг"
+
+#~ msgid "%d shift/reduce conflict"
+#~ msgid_plural "%d shift/reduce conflicts"
+#~ msgstr[0] "%d конфликт сдвига/вывода"
+#~ msgstr[1] "%d конфликта сдвига/вывода"
+#~ msgstr[2] "%d конфликтов сдвига/вывода"
+
+#~ msgid "and"
+#~ msgstr "и"
+
+#~ msgid "State %d contains "
+#~ msgstr "Состояние %d содержит "
+
+#~ msgid "conflicts: "
+#~ msgstr "конфликты: "
+
+#~ msgid "%s contains "
+#~ msgstr "%s содержит "
+
+#~ msgid "`%s' is no longer supported"
+#~ msgstr "`%s' больше не поддерживается"
+
+#~ msgid "%s: no grammar file given\n"
+#~ msgstr "%s: не задан файл с грамматикой\n"
+
+#~ msgid "%s: extra arguments ignored after `%s'\n"
+#~ msgstr "%s: лишние аргументы после `%s' игнорированы\n"
+
+#~ msgid "too many gotos (max %d)"
+#~ msgstr "слишком много goto (максимально %d)"
+
+#~ msgid "unexpected `/' found and ignored"
+#~ msgstr "встречен и проигнорирован неожиданный символ `/'"
+
+#~ msgid "unterminated comment"
+#~ msgstr "незаконченный комментарий"
+
+#~ msgid "unexpected end of file"
+#~ msgstr "неожиданный конец файла"
+
+#~ msgid "unescaped newline in constant"
+#~ msgstr "неэкранированный перевод строки в константе"
+
+#~ msgid "octal value outside range 0...255: `\\%o'"
+#~ msgstr "восьмеричная величина за пределами диапазона 0...255: `\\%o'"
+
+#~ msgid "hexadecimal value above 255: `\\x%x'"
+#~ msgstr "шестнадцатеричная величина превышает 255: `\\x%x'"
+
+#~ msgid "unknown escape sequence: `\\' followed by `%s'"
+#~ msgstr "неизвестная escape-последовательность: `%s' после `\\'"
+
+#~ msgid "unterminated type name at end of file"
+#~ msgstr "незаконченное имя типа в конце файла"
+
+#~ msgid "unterminated type name"
+#~ msgstr "незаконченное имя типа"
+
+#~ msgid "use \"...\" for multi-character literal tokens"
+#~ msgstr "используйте \"...\" для многосимвольных литеральных лексем"
+
+#~ msgid "`%s' supports no argument: %s"
+#~ msgstr "`%s' не поддерживает аргумента %s"
+
+#~ msgid "`%s' requires an argument"
+#~ msgstr "ключ `%s' должен использоваться с аргументом"
+
+#~ msgid "   (rule %d)"
+#~ msgstr "   (правило %d)"
+
+#~ msgid "    %-4s\terror (nonassociative)\n"
+#~ msgstr "    %-4s\tошибка (неассоциативная)\n"
+
+#~ msgid ""
+#~ "    $default\treduce using rule %d (%s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "    $default\tвывод с использованием правила %d (%s)\n"
+#~ "\n"
+
+#~ msgid "    %-4s\t[reduce using rule %d (%s)]\n"
+#~ msgstr "    %-4s\t[вывод с использованием правила %d (%s)]\n"
+
+#~ msgid "    %-4s\treduce using rule %d (%s)\n"
+#~ msgstr "    %-4s\tвывод с использованием правила %d (%s)\n"
+
+#~ msgid "    $default\treduce using rule %d (%s)\n"
+#~ msgstr "    $default\tвывод с использованием правила %d (%s)\n"
+
+#~ msgid "    $default\taccept\n"
+#~ msgstr "    $default\tпринятие\n"
+
+#~ msgid "    NO ACTIONS\n"
+#~ msgstr "    НЕТ ДЕЙСТВИЙ\n"
+
+#~ msgid "Number, Line, Rule"
+#~ msgstr "Номер, Строка, Правило"
+
+#~ msgid "  %3d %3d %s ->"
+#~ msgstr "  %3d %3d %s ->"
+
+#~ msgid "   Skipping to next \\n"
+#~ msgstr "   Пропуск до следующего \\n"
+
+#~ msgid "   Skipping to next %c"
+#~ msgstr "   Пропуск до следующего %c"
+
+#~ msgid "unterminated string"
+#~ msgstr "незаконченная строка"
+
+#~ msgid "%s is invalid"
+#~ msgstr "неверный знак %s"
+
+#~ msgid "unterminated `%{' definition"
+#~ msgstr "незаконченное определение `%{'"
+
+#~ msgid "Premature EOF after %s"
+#~ msgstr "Преждевременный конец файла после %s"
+
+#~ msgid "`%s' is invalid in %s"
+#~ msgstr "`%s' неверно в %s"
+
+#~ msgid "%type declaration has no <typename>"
+#~ msgstr "описание %type не имеет <имя_типа>"
+
+#~ msgid "invalid %%type declaration due to item: %s"
+#~ msgstr "неверное описание %%type из-за элемента: %s"
+
+#~ msgid "invalid text (%s) - number should be after identifier"
+#~ msgstr "неверный текст (%s) - число должно следовать за идентификатором"
+
+#~ msgid "unmatched %s"
+#~ msgstr "непарная %s"
+
+#~ msgid "argument of %%expect is not an integer"
+#~ msgstr "аргумент %%expect не является целым числом"
+
+#~ msgid "unrecognized item %s, expected an identifier"
+#~ msgstr "нераспознанный элемент %s, ожидался идентификатор"
+
+#~ msgid "expected string constant instead of %s"
+#~ msgstr "вместо %s ожидалась строковая постоянная"
+
+#~ msgid "no input grammar"
+#~ msgstr "нет входной грамматики"
+
+#~ msgid "ill-formed rule: initial symbol not followed by colon"
+#~ msgstr "неверное правило: двоеточие не следует за начальным символом"
+
+#~ msgid "grammar starts with vertical bar"
+#~ msgstr "грамматика начинается с вертикальной черты"
+
+#~ msgid "previous rule lacks an ending `;'"
+#~ msgstr "в предыдущем правиле отсутствует завершающая `;'"
+
+#~ msgid "two @prec's in a row"
+#~ msgstr "два @prec подряд"
+
+#~ msgid "%%guard present but %%semantic_parser not specified"
+#~ msgstr "%%guard присутствует, а %%semantic_parser не задан"
+
+#~ msgid "two actions at end of one rule"
+#~ msgstr "два действия в конце одного правила"
+
+#~ msgid "maximum table size (%d) exceeded"
+#~ msgstr "превышен максимальный размер таблицы (%d)"
+
+#~ msgid "    $   \tgo to state %d\n"
+#~ msgstr "    $   \tпереход в состояние %d\n"
+
+#~ msgid "unterminated %guard clause"
+#~ msgstr "незаконченный оператор %guard"
+
+#~ msgid " 1 shift/reduce conflict"
+#~ msgstr " 1 конфликт сдвига/вывода"
+
+#~ msgid "%s contains"
+#~ msgstr "%s содержит"
+
+#~ msgid "DERIVES"
+#~ msgstr "DERIVES"
+
+#~ msgid "%s derives"
+#~ msgstr "%s выводит"
+
+#~ msgid "%s: internal error: %s\n"
+#~ msgstr "%s: внутренняя ошибка: %s\n"
+
+#~ msgid "Entering set_nullable"
+#~ msgstr "Вход в set_nullable"
+
+#~ msgid "\t\t/* empty */"
+#~ msgstr "\t\t/* пусто */"
+
+#~ msgid "multiple %%header_extension declarations"
+#~ msgstr "множественные описания %%header_extension"
+
+#~ msgid "multiple %%source_extension declarations"
+#~ msgstr "множественные описания %%source_extension"
+
+#~ msgid ""
+#~ "Variables\n"
+#~ "---------\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Переменные\n"
+#~ "----------\n"
+#~ "\n"
+
+#~ msgid "Value  Sprec    Sassoc    Tag\n"
+#~ msgstr "Знач   Приор    Ассоц     Тег\n"
+
+#~ msgid ""
+#~ "Rules\n"
+#~ "-----\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Правила\n"
+#~ "-------\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Rules interpreted\n"
+#~ "-----------------\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Интерпретированные правила\n"
+#~ "--------------------------\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "reduced %s defines %d terminal%s, %d nonterminal%s, and %d production%s.\n"
+#~ msgstr ""
+#~ "выведенный %s определяет %d терминалов%s, %d нетерминалов%s, и %d правил "
+#~ "вывода%s.\n"
+
+#~ msgid "@%s is invalid"
+#~ msgstr "неверный знак @%s"
diff --git a/po/sr.gmo b/po/sr.gmo
new file mode 100644
index 0000000..ed72072
--- /dev/null
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..32fe71d
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,1190 @@
+# Serbian translation for bison.
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-2.6.2\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-08-09 22:38+0200\n"
+"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <gnu@prevod.org>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "упозорење"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "кобна грешка"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "кобна грешка"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Сукоб правила „%d“ и симбола „%s“ је решен као помак"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Сукоб правила „%d“ и симбола „%s“ је решен као смањење"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Сукоб правила „%d“ и симбола „%s“ је решен као грешка"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "сукоби: %d помак/смањење, %d смањење/смањење\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "сукоби: %d помак/смањење\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "сукоби: %d смањење/смањење\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Стање: %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%очекуј-рр се примењује само на ГЛР обрађиваче"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "очекиван је %d сукоб помака/смањења"
+msgstr[1] "очекивана су %d сукоба помака/смањења"
+msgstr[2] "очекивано је %d сукоба помака/смањења"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "очекиван је %d сукоб смањења/смањења"
+msgstr[1] "очекивана су %d сукоба смањења/смањења"
+msgstr[2] "очекивано је %d сукоба смањења/смањења"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: не могу да отворим"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "улазна/излазна грешка"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "не могу да затворим датотеку"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "одбијам да преснимим изворну датотеку „%s“"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "сукобљавам излазе у датотеку „%s“"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Пробајте „%s --help“ за више података.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Употреба: %s [ОПЦИЈА]... ДАТОТЕКА\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Створите одредничко ЛР или уопштено ЛР (ГЛР) упослење обрађивача\n"
+"ЛАЛР(1), ИЕЛР(1) или табеле утврђеног ЛР(1) обрађивача. Подршка за\n"
+"ИЕЛР(1) и утврђени ЛР(1) је пробна.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Обавезни аргументи за дуге опције су обавезни и за кратке опције такође.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Исто је тачно и за опционалне аргументе.\n"
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Режими деловања:\n"
+"  -h, --help                   приказује ову помоћ\n"
+"  -V, --version                исписује податке о издању и излази\n"
+"      --print-localedir        излазни директоријум који садржи месно-"
+"зависне податке\n"
+"      --print-datadir          излазни директоријум који садржи структуру и "
+"ИксСЛТ\n"
+"  -y, --yacc                   опонаша ПОСИКС-ов Јацц\n"
+"  -W, --warnings[=КАТЕГОРИЈА]  извештава о упозорењима у КАТЕГОРИЈИ\n"
+"\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -L, --language=ЈЕЗИК                наводи излазни језик програмирања\n"
+"                                      (ово је пробна функција)\n"
+"  -S, --skeleton=ДАТОТЕКА             одређује скелет за коришћење\n"
+"  -t, --debug                         мери обрађивач за уклањање грешака\n"
+"      --locations                     укључује подршку места\n"
+"  -D, --define=НАЗИВ[=ВРЕДНОСТ]       слично као „%define НАЗИВ 'ВРЕДНОСТ'“\n"
+"  -F, --force-define=НАЗИВ[=ВЕДНОСТ]  преписује „%define НАЗИВ 'ВРЕДНОСТ'“\n"
+"  -p, --name-prefix=ПРЕФИКС           додаје ПРЕФИКС спољним симболима\n"
+"                                      превазиђено је уз „-Dapi."
+"prefix=ПРЕФИКС“\n"
+"  -l, --no-lines                      не ствара смерницу „#line“\n"
+"  -k, --token-table                   укључује табелу назива симбола\n"
+"\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Излаз:\n"
+"      --defines[=ДАТОТЕКА]    ствара датотеку заглавља\n"
+"  -d                          исто тако али не може да наведе ДАТОТЕКУ (за "
+"ПОСИКС Јацц)\n"
+"  -r, --report=СТВАРИ         такође резултира појединостима о аутомату\n"
+"      --report-file=ДАТОТЕКА  записује извештај у ДАТОТЕКУ\n"
+"  -v, --verbose               исто као „--report=state“\n"
+"  -b, --file-prefix=ПРЕФИКС   наводи ПРЕФИКС за датотеке излаза\n"
+"  -o, --output=ДАТОТЕКА       исписује излаз у ДАТОТЕКУ\n"
+"  -g, --graph[=ДАТОТЕКА]      такође даје график аутомата\n"
+"  -x, --xml[=ДАТОТЕКА]        такође даје ИксМЛ извештај о аутомату\n"
+"                              (ИксМЛ шема је испитивачка)\n"
+"\n"
+
+#: src/getargs.c:361
+#, fuzzy
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Категорије упозорења укључују:\n"
+"  „midrule-values“  неподешене или некоришћене вредности средњег правила\n"
+"  „yacc“            несагласности са ПОСИКС Јацц-ом\n"
+"  „conflicts-sr“    С/Р сукоби (унапред укључено)\n"
+"  „conflicts-rr“    Р/Р сукоби (унапред укључено)\n"
+"  „other“           сва друга упозорења (унапред укључено)\n"
+"  „all“             сва упозорења\n"
+"  „no-CATEGORY“     искључује упозорења у КАТЕГОРИЈИ\n"
+"  „none“            искључује сва упозорења\n"
+"  „error“           упозорења сматра грешкама\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"СТВАРИ представљају зарезом одвојене речи у које могу да спадају:\n"
+"  „state“        описује стања\n"
+"  „itemset“      довршава подешавања кључне ставке њиховим завршетком\n"
+"  „lookahead“    изричито придружује симболе предувида ставкама\n"
+"  „solved“       описује решавање сукоба помака/смањења\n"
+"  „all“          укључује све горње податке\n"
+"  „none“         искључује извештај\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Грешке пријавите на <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "бизон (Гну Бизон) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Написали су Роберт Корбет и Ричард Столман.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Ауторска права (C) %d Задужбина слободног софтвера, Доо.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Ово је слободан софтвер; погледајте извор за услове умножавања.  Не постоји\n"
+"НИКАКВА гаранција; чак ни за ТРЖИШНУ ВРЕДНОСТ или за ИСПУЊАВАЊЕ ОДРЕЂЕНЕ "
+"ПОТРЕБЕ.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "вишеструке објаве скице су неисправне"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: неисправан језик"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "вишеструке објаве језика су неисправне"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: недостаје операнд"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "додатни операнд %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "празно"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Основа"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Направљено програмом „%s“.\n"
+"// Грешке пријавите на <%s>.\n"
+"// Страница пројекта: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "прекорачење броја редова"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "прекорачење броја колона"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "бескорисна правила у обрађивачу због сукоба"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%define променљива „%s“ је поново одређена"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "претходна одредница"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: неодређена %%define променљива „%s“"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "неисправна вредност %%define логичке променљиве „%s“"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "неисправна вредност %%define променљиве „%s“: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "прихваћена вредност: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "недостаје указивач у објави параметра"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " врста %d је %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "помера, и иде на стање %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "иде на стање %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "грешка (непридруживо)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "смањује користећи правило %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "прихвата"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$основно"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Стање: %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Терминали, са правилима где се појављују"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Нетерминали, са правилима где се појављују"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " на лево:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " на десно:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Бескорисна правила у обрађивачу због сукоба"
+
+# bug: "multiple properties" or "multiple song"?
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "вишеструке %s објаве"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "неслагање врсте резултата функције спајања %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "претходна објава"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "занемарен је удвојени назив симбола за „%s“"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "дато је правило за %s, које је симбол"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "неслагање врсте основне радње: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "празно правило за укуцани нетерминал, и нема радње"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "неупотребљена вредност: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "неподешена вредност: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "симбол за %%prec није одређен: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "дозвољен је само један „%s“ по правилу"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "„%s“ има дејства само на ГЛР обрађиваче"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "након %s мора да следи позитиван број"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "правило је предуго"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "нема правила у основи улаза"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "правило је бескорисно у основи"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "не-терминал је бескористан у основи: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Не-терминали су бескорисни у основи"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Терминали су неупотребљени у основи"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Правила су бескорисна у основи"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d не-терминал је бескористан у основи"
+msgstr[1] "%d не-терминала су бескорисна у основи"
+msgstr[2] "%d не-терминала је бескорисно у основи"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d правило је бескорисно у основи"
+msgstr[1] "%d правила су бескорисна у основи"
+msgstr[2] "%d правила је бескорисно у основи"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "почетни симбол %s не изводи никакав исказ"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "залутало „%s“"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "на крају кода радње може бити потребна тачка и зарез (;)"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "будућа издања Бизона неће додавати „;“"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "„YYFAIL“ је застарело у употреби и биће уклоњено"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "односи се на: %c%s у %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "могуће значење: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", кријем %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " у %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", не може бити приступљен из радње средњег правила у $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "цео број је ван опсега: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "неисправна референца: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr "садржајна грешка након „%c“, очекујем цео број, слово, _, [, или $"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "симбол није пронађен у производњи пре $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "симбол није пронађен у производњи: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "неисправна референца: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "нејасна референца: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "дата је изричита врста у неуписаној основи"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ за средње правило при $%d од %s нема објављену врсту"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ од %s нема објављену врсту"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s од %s нема објављену врсту"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "залутали зарез (,) је схваћен као размак"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "неисправна директива: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "неисправна одређивач: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "неисправан знак: %s"
+msgstr[1] "неисправан знак: %s"
+msgstr[2] "неисправан знак: %s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "неочекивани одређивач у називу у заградама: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "очекиван је одређивач"
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "неисправан знак у називу у заградама: %s"
+msgstr[1] "неисправан знак у називу у заградама: %s"
+msgstr[2] "неисправан знак у називу у заградама: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "дословност празног знака"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "додатни знаци у дословности знака"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "неисправан ништавни знак"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "неисправан број након „\\-escape“: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "неисправан знак након „\\-escape“: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "недостаје „%s“ на крају датотеке"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "недостаје „%s“ на крају реда"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "незатворена %s смерница у костуру"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "премало аргумената за %s смерницу у костуру"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "превише аргумената за %s смерницу у костуру"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "неисправна $ вредност: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "ПОСИКС Јацц забрањује цртице у називима симбола: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "превише симбола у улазној основи (ограничење је %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s поновни проглас за %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s поновни проглас за <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "симбол „%s“ је поново одређен"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "симбол „%s“ је поново објављен"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "поновно одређујем број симбола корисника од %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr "коришћен је симбол „%s“, али није одређен као обележје и нема правила"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "симбол %s је коришћен више пута као дословна ниска"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "симболу %s је дата више од једне дословне ниске"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "поновна објава броја %d корисничког симбола за %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "претходна објава за %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "полазни симбол „%s“ није одређен"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "полазни симбол „%s“ је обележје"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "поновна објава за основног означеног %%уништавача"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "поновна објава за основног неозначеног %%уништавача"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "поновна објава за основног означеног %%штампача"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "поновна објава за основног неозначеног %%штампача"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "није успело уклањање „%s“"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "стварање привремене датотеке није успело"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "чување стандардног улаза није успело"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "чување стандардног излаза није успело"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "отварање привремене датотеке није успело"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+"преусмеравање бизоновог стандардног излаза на привремену датотеку није успело"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr "преусмеравање м4 стандардног улаза из привремене датотеке није успело"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "отварање привремене датотеке није успело"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr "преусмеравање м4 стандардног излаза на привремену датотеку није успело"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "прекинут је припомоћни програм „%s“"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "није пронађен припомоћни програм „%s“"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+"преусмеравање бизоновог стандардног улаза из привремене датотеке није успело"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "неисправан аргумент „%s“ за „%s“"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "нејасан аргумент „%s“ за „%s“"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Исправни аргументи су:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u ослобођено (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u у остави (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u у остави (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u у остави (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "хистограм дневника бројања\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "хистограм дневника величине\n"
+
+#
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "хистограм густине\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Статистика подешавања бита:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Укупно покретања = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "не могу да прочитам датотеку статистике"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "лоша величина датотеке статистике\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "не могу да упишем датотеку статистике"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "не могу да отворим датотеку статистике за упис"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "грешка уписа"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Непозната грешка система"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: опција „%s“ је нејасна; могућности:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: опција „--%s“ не дозвољава аргумент\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: опција „%c%s“ не дозвољава аргумент\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: опција „--%s“ захтева аргумент\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: непозната опција „--%s“\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: непозната опција „%c%s“\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: неисправна опција -- „%c“\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: опција захтева аргумент -- „%c“\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: опција „-W %s“ је нејасна\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: опција „-W %s“ не дозвољава аргумент\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: опција „-W %s“ захтева аргумент\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "меморија је потрошена"
+
+#
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "не могу да направим спојку"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s потпроцес није успео"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "“"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Времена извршавања (у секундама)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " УКУПНО                :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "време у %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "„_open_osfhandle“ није успело"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "не могу да повратим фд %d: „dup2“ није успело"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "%s потпроцес"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s потпроцес је добио кобни сигнал %d"
+
+#~ msgid "state %d"
+#~ msgstr "стање %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "залутало „@“"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644
index 0000000..954b6c1
--- /dev/null
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..c2dbff1
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,1179 @@
+# Swedish messages for bison.
+# Copyright © 2001-2006, 2008, 2010, 2011, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Göran Uddeborg <goeran@uddeborg.se>, 2001-2006, 2008, 2010, 2011, 2012.
+#
+# $Revision: 1.88 $
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-09 21:06+0100\n"
+"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "varning"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "fel"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "ödesdigert fel"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Konflikt mellan regel %d och element %s löstes som skift"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Konflikt mellan regel %d och element %s löstes som reducera"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Konflikt mellan regel %d och element %s löstes som ett fel"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikter: %d skifta/reducera, %d reducera/reducera\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikter: %d skifta/reducera\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikter: %d reducera/reducera\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Tillstånd %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr gäller endast GLR-parsrar"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "förväntade %d skifta/reducerakonflikt"
+msgstr[1] "förväntade %d skifta/reducerakonflikter"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "förväntade %d reducera/reducerakonflikt"
+msgstr[1] "förväntade %d reducera/reducerakonflikter"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: kan inte öppna"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "in-/utfel"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "kan inte stänga fil"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "vägrar att skriva över indatafilen %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "motstridiga utmatningar till filen %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Försök med \"%s --help\" för mer information.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Användning: %s [FLAGGA]... FIL\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Generera en deterministisk LR- eller generaliserad LR- (GLR-)parser som\n"
+"använder LALR(1), IELR(1) eller kanonisk LR(1) parsningstabeller.  Stöd\n"
+"för IELR(1) och kanonisk LR(1) är experimentellt.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Obligatoriska argument till långa flaggor är obligatoriska även för de "
+"korta.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Detsamma gäller valfria argument.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Arbetslägen:\n"
+"  -h, --help                 visa denna hjälptext och avsluta\n"
+"  -V, --version              visa versionsinformation och avsluta\n"
+"      --print-localedir      skriv katalogen som innehåller lokalberoende "
+"data\n"
+"      --print-datadir        skriv katalogen som innehåller skelett och "
+"XSLT\n"
+"  -y, --yacc                 emulera POSIX-Yacc\n"
+"  -W, --warnings[=KATEGORI]  rapportera varningarna som faller inom "
+"KATEGORI\n"
+"  -f, --feature[=FUNKTION]   aktivera diverse funktioner\n"
+"\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Parser:\n"
+"  -L, --language=SPRÅK             ange programspråk för utmatning\n"
+"  -S, --skeleton=FIL               ange skelettfilen som skall användas\n"
+"  -t, --debug                      instrumentera parsern för felsökning\n"
+"      --locations                  aktivera stöd för lägen\n"
+"  -D, --define=NAMN[=VÄRDE]        motsvarar '%define NAMN \"VÄRDE\"'\n"
+"  -F, --force-define=NAMN[=VÄRDE]  åsidosätt '%define NAMN \"VÄRDE\"'\n"
+"  -p, --name-prefix=PREFIX         lägg till PREFIX före externa symboler\n"
+"                                   undanbedes till förmån för\n"
+"                                   '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   generera inte \"#line\"-direktiv\n"
+"  -k, --token-table                inkludera en tabell över elementnamn\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Utdata:\n"
+"      --defines[=FIL]        skapa också en huvudfil\n"
+"  -d                         detsamma, utan att kunna ange FIL (för POSIX-"
+"Yacc)\n"
+"  -r, --report=SAKER         skapa också detaljer om automaten\n"
+"      --report-file=FIL      skriv en rapport till FIL\n"
+"  -v, --verbose              samma som \"--report=state\"\n"
+"  -b, --file-prefix=PREFIX   ange ett PREFIX för utdatafiler\n"
+"  -o, --output=FIL           lägg utdata i FIL\n"
+"  -g, --graph[=FIL]          skapa också en graf av automaten\n"
+"  -x, --xml[=FIL]            skapa också en XML-rapport om automaten\n"
+"                             (XML-schemat är experimentellt)\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Varningskategorier innefattar:\n"
+"  \"midrule-values\"  ej satta eller oanvända värden mitt i regler\n"
+"  \"yacc\"            inkompatibiliteter med POSIX Yacc\n"
+"  \"conflicts-sr\"    S/R-konflikter (normalt aktivt)\n"
+"  \"conflicts-rr\"    R/R-konflikter (normalt aktivt)\n"
+"  \"deprecated\"      föråldrade konstruktioner\n"
+"  \"other\"           alla andra varningar (normalt aktivt)\n"
+"  \"all\"             alla varningarna\n"
+"  \"no-KATEGORI\"     slå av varningar i KATEGORI\n"
+"  \"none\"            slå av alla varningarna\n"
+"  \"error\"           behandla varningar som fel\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"SAKER är en lista med kommaseparerade ord som kan innehålla:\n"
+"  \"state\"        beskriv tillstånden\n"
+"  \"itemset\"      komplettera kärnobjektmängderna med sina höljen\n"
+"  \"lookahead\"    koppla uttryckligen framåtblickande element till objekt\n"
+"  \"solved\"       beskriv lösningar av skifta/reducerakonflikter\n"
+"  \"all\"          inkludera all ovanstående information\n"
+"  \"none\"         avaktivera rapporten\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"FUNKTION är en lista av kommaseparerade ord som kan inkludera:\n"
+"  `caret'        visa alla fel med cirkumflex\n"
+"  `all'          alla ovanstående\n"
+"  `none'         avaktivera alla ovanstående\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Rapportera fel till <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "%s hemsida: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"Allmän hjälp om att använda GNU-program: <http://www.gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Rapportera synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "För fullständig dokumentation, kör: info bison.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Skriven av Robert Corbett och Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Detta är fri programvara, se källkoden för kopieringsvillkor.  Det\n"
+"finns INGEN garanti, inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR ETT\n"
+"SPECIELLT ÄNDAMÅL.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "flera skelettdeklarationer är inte tillåtet"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: ogiltigt språk"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "flera språkdeklarationer är inte tillåtet"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: saknad operand"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "extra operand %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "tom"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Grammatik"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Genererad av %s.\n"
+"// Rapportera fel till <%s>.\n"
+"// Hemsida: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "radnummerspill"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "kolumnnummerspill"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "oanvändbar regel i parsern på grund av konflikter"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%define-variabeln %s omdefinierad"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "föregående definition"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: odefinierad  %%define-variabel %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "ogiltigt värde för boolesk %%define-variabel %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "ogiltigt värde för %%define-variabeln %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "accepterat värde: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "identiferare saknas i parameterdeklaration"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " typ %d är %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "skifta, och gå till tillstånd %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "gå till tillstånd %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "fel (ickeassociativ)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reducera med regel %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "acceptera"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$standard"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "Tillstånd %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Terminaler, med regler där de förekommer"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Icketerminaler, med regler där de förekommer"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " till vänster:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " till höger:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Oanvändbara regler i parser på grund av konflikter"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "flera %s-deklarationer"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "resultattypskonflikt vid sammanslagningsfunktion %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "föregående deklaration"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "duplicerat symbolnamn för %s ignorerat"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "regel given för %s, som är ett element"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "typkonflikt för standardåtgärd: <%s> <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "tom regel för typad icketerminal, och ingen åtgärd"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "oanvänt värde: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "ej satt värde: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "elementet för %%prec är inte definierat: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "endast en %s tillåts per regel"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s påverkar endast GLR-parsrar"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s måste följas av ett positivt tal"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "regeln är för lång"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "inga regler i ingrammatiken"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "oanvändbar regel i grammatiken"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "oanvändbar icketerminal i grammatiken: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Oanvändbara icketerminaler i grammatiken"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Oanvända terminaler i grammatiken"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Oanvändbara regler i grammatiken"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d oanvändbar icketerminal i grammatiken"
+msgstr[1] "%d oanvändbara icketerminaler i grammatiken"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d oanvändbar regel i grammatiken"
+msgstr[1] "%d oanvändbara regler i grammatiken"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "startsymbolen %s genererar inga meningar"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "vilsekommet \"%s\""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "ett \";\" kan behövas i slutet av åtgärdskoden"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "framtida versioner av Bison kommer inte lägga till \";\""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "användning av YYFAIL, som avrådes ifrån och kommer tas bort"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "refererar till: %c%s vid %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "möjligen avsett: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", döljer %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " vid %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", kan inte nås från åtgärd mitt i regeln vid $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "heltal utanför intervall: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "ogiltig referens: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"syntaxfel efter \"%c\", siffra, bokstav, \"_\", \"[\" eller \"$\" förväntades"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "symbol inte funnen i produktion före $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "symbol inte funnen i produktion: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "vilseledande referens: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "tvetydigt argument: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "explicit typ given i otypad grammatik"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ för mitt-i-regeln vid $%d av %s har ingen deklarerad typ"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ för %s har ingen deklarerad typ"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s för %s har ingen deklarerad typ"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "vilsekommet \",\" hanterat som blank"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "ogiltigt direktiv: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "ogiltig identifierare: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "ogiltigt tecken"
+msgstr[1] "ogiltiga tecken"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "oväntad identifierare i namn inom klamrar: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "en identifierare förväntades"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ogiltigt tecken i namn i klamrar"
+msgstr[1] "ogiltiga tecken i namn i klamrar"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "tom teckenkonstant"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "extra bokstäver i teckenkonstant"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "ogiltigt nolltecken"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "ogiltigt tal efter \\-specialsekvens: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "ogiltigt tecken efter \\-specialsekvens: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "saknat %s vid filslut"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "saknat %s vid radslut"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "oavslutat %s-direktiv i skelettet"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "för få argument till %s-direktiv i skelettet"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "för många argument till %s-direktiv i skelettet"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "felaktigt $-värde: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX-Yacc förbjuder bindestreck i symbolnamn: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "för många symboler i ingrammatiken (gränsen är %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s-omdeklaration för %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s-omdeklaration för <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "symbolen %s omdefinierad"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symbolen %s omdeklarerad"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "omdefinition av elementnummer för %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"symbolen %s används, men är inte definierad som ett element och har inga "
+"regler"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "symbolen %s används mer än en gång som en bokstavlig sträng"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "symbolen %s har fått mer än en bokstavlig sträng"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "användarsymbol nummer %d omdeklarerad för %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "föregående deklaration för %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "startsymbolen %s är odefinierad"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "startsymbolen %s är ett element"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "omdeklaration av standard-%%destructor med tagg"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "omdeklaration av standard-%%destructor utan tagg"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "omdeklaration av standard-%%printer med tagg"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "omdeklaration av standard-%%printer utan tagg"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "att ta bort \"%s\" misslyckades"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "att skapa en temporärfil misslyckades"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "att spara standard in misslyckades"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "att spara standard ut misslyckades"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "att öppna en temporärfil misslyckades"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr "omdirigering av bisons standard ut till temporärfilen misslyckades"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr "omdirigering av m4:as standard in från temporärfilen misslyckades"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "att öppna en temporärfil misslyckades"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr "omdirigering av m4:as standard ut till en temporärfil misslyckades"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "underprogrammet \"%s\" avbröts"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "underprogrammet \"%s\" finns inte"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr "omdirigering av bisons standard in från temporärfilen misslyckades"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ogiltigt argument %s till %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "tvetydigt argument %s till %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Giltiga argument är:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitmängdallokeringar, %u frianden (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitmängdmängder, %u cachade (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitmängdåterställanden, %u cachade (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitmängdtester, %u cachade (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitmängdlistor\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "anropslogghistogram\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "storlekslogghistogram\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "densitetshistogram\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitmängdsstatistik:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Ackumulerade körningar = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "kan inte läsa statistikfilen"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "dålig statistikfilstorlek\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "kan inte skriva statistikfilen"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "kan inte öppna statistikfil för skrivning"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "skrivfel"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Okänt systemfel"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: flaggan \"%s\" är mångtydig; möjligheter:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"--%s\" tar inget argument\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"%c%s\" tar inget argument\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: flaggan \"--%s\" behöver ett argument\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: okänd flagga \"--%s\"\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: okänd flagga \"%c%s\"\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ogiltig flagga --\"%c\"\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: flaggan behöver ett argument -- \"%c\"\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: flaggan \"-W %s\" är tvetydig\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: flaggan \"-W %s\" behöver ett argument\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "minnet slut"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "kan inte skapa rör"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s-underprocess misslyckades"
+
+# När vi går över till Unicode mer allmänt kanske vi bör översätta båda dessa
+# med U+201D (RIGHT DOUBLE QUOTATION MARK) på svenska.  Eller?
+#
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "\""
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "\""
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Exekveringstider (sekunder)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOTALT                :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "tid i %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle misslyckades"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "det går inte att återställa fb %d: dup2 misslyckades"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "%s-underprocess"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s-underprocess fick en ödesdiger signal %d"
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644
index 0000000..f032991
--- /dev/null
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..175b931
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,1409 @@
+# Turkish translations for GNU Bison messages.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Altuð Bayram <altugbayram_2000@yahoo.com>, 2001.
+# Çaðrý Çöltekin <cagri@xs4all.nl>, 2003 - 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison 2.0\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-03-20 22:03+0100\n"
+"Last-Translator: Çaðrý Çöltekin <cagri@xs4all.nl>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "uyarý"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "G/Ç hatasý"
+
+#: src/complain.c:208 src/complain.c:215
+#, fuzzy
+msgid "fatal error"
+msgstr "ölümcül hata: "
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    %d durumu %s andacý arasýndaki çeliþki kaydýrýlarak çözümlendi"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    %d durumu %s andacý arasýndaki çeliþki indirgenerek çözümlendi"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    %d durumu %s andacý arasýndaki çeliþki hata olarak çözümlendi"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "çeliþkiler: %d öteleme/indirgeme, %d indirgeme/indirgeme\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "çeliþkiler: %d öteleme/indirgeme\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "çeliþkiler: %d indirgeme/indirgeme\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Durum %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr sadece GLR ayrýþtýrýcýlarý için geçerlidir"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "%d öteleme/indirgeme çeliþkisi bekleniyor"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "%d indirgeme/indirgeme çeliþkisi bekleniyor"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "`%s' dosyasý açýlamýyor"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "dosya kapatýlamýyor"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "%s dosyasýna çeliþen çýktýlar"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Daha fazla bilgi için `%s --help' yazýn.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Kullaným: %s [SEÇENEK]... DOSYA\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"Çalýþma kipleri:\n"
+"  -h, --help      bu yardýmý göster ve çýk\n"
+"  -V, --version   sürüm bilgisini ver ve çýk\n"
+"  -y, --yacc      POSIX yacc öykünmesi\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Ayrýþtýrýcý:\n"
+"  -S, --skeleton=FILE        kullanýlacak iskeleti belirt\n"
+"  -t, --debug                ayrýþtýrýcýya hata ayýklayýcý ekle\n"
+"      --locations            konum hesaplamalarýný etkinleþtir\n"
+"  -p, --name-prefix=ÖNEK     dýþ simgelerin baþýna ÖNEK ekle\n"
+"  -l, --no-lines             `#line' yönergelerini üretme\n"
+"  -n, --no-parser            sadece tablolarý üret\n"
+"  -k, --token-table          andaç isimlerinin bir tablosunu içer\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Çýktý:\n"
+"  -d, --defines              bir baþlýk dosyasý da üret\n"
+"  -r, --report=SEÇENEKLER    otomatta ayrýntýlý bilgi de göster\n"
+"  -v, --verbose              otomatýn bir açýklamasýný da üret\n"
+"  -b, --file-prefix=ÖNEK     çýktý dosyalarý için bir ÖNEK belir\n"
+"  -o, --output=DOSYA         çýktýyý DOSYAya yaz\n"
+"  -g, --graph                otomatýn bir VCG grafik açýklamasýný da üret\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+# DUZELT: cevrilmemis iki mesaj var
+#: src/getargs.c:376
+#, fuzzy
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"SEÇENEKLER aþaðýdaki anhtar sözcüklerden virgülle ayýrarak oluþturulabilir:\n"
+"  `state'        durumlarý açýkla\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookaheads to items\n"
+"  `solved'       öteleme/indigerme çeliþkilerinin çözümünü açýkla\n"
+"  `all'          yukarýdaki bilgilerini tümünü gosterir\n"
+"  `none'         raporu üretme\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Hatalarý <bug-bison@gnu.org>'a,\n"
+"çeviri hatalarýný <gnu-tr-u12a@lists.sourceforge.net>'e bildirin.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Yazanlar: Robert Corbett ve Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Telif Hakký (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Bu bir serbest yazýlýmdýr; kopyalama koþullarý için kaynak koduna bakýnýz.\n"
+"Hiçbir garantisi yoktur; hatta SATILABÝLÝRLÝÐÝ veya ÞAHSÝ KULLANIMINIZA\n"
+"UYGUNLUÐU için bile garanti verilmez.\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "çoklu %s bildirimleri"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "geçersiz karakter: %s"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "çoklu %s bildirimleri"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "`%s'ten sonra eksik iþleç"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "fazla iþleç: `%s'"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "boþ"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Gramer"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr ""
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr ""
+
+#: src/main.c:146
+#, fuzzy
+msgid "rule useless in parser due to conflicts"
+msgstr "çeliskiler yüzünden kural indirgenemedi"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "%s simgesi tekrar tanýmlanmýþ"
+
+#: src/muscle-tab.c:453
+#, fuzzy
+msgid "previous definition"
+msgstr "ilk bildirim"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "geçersiz deðer: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "parametre bildiriminde eksik tanýtýcý"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " tip %d %s'dir\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "ötele, ve durum %d'ye git\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "durum %d'ye git\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "hata (birleþmeli deðil)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "kural %d (%s) ile indirgeme"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "onayla"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$öntanýmlý"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "Durum %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Sabit simgeler, içinde geçtikleri kurallarla birlikte"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Deðiþken simgeler, içinde geçtikleri kurallarla birlikte"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " (sol tarafta):"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " (sað tarafta):"
+
+#: src/print.c:510
+#, fuzzy
+msgid "Rules useless in parser due to conflicts"
+msgstr "çeliskiler yüzünden kural indirgenemedi"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "çoklu %s bildirimleri"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "birleþtirme iþlevi `%s'de tip çatýþmasý: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+#, fuzzy
+msgid "previous declaration"
+msgstr "ilk bildirim"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "bir andaç olan %s için kural verilmiþ"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "öntanýmlý eylem üzerinde tip çatýþmasý: `%s' != `%s'"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr ""
+"Tipli deðiþken simge için boþ kural tanýmlanmýþ, ve eylem belirtilmemiþ"
+
+#: src/reader.c:328
+#, fuzzy, c-format
+msgid "unused value: $%d"
+msgstr "geçersiz deðer: %s"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr ""
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "her kural icin sadece bir %s kullanýlabilir"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s sadece GLR ayrýþtýrýcýlarý etkiler"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s'i pozitif bir sayý izlemeli"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr ""
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "girdi gramer içinde kural yok"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "girdi gramer içinde kural yok"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "Deðiþken simgeler, içinde geçtikleri kurallarla birlikte"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "girdi gramer içinde kural yok"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "girdi gramer içinde kural yok"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "girdi gramer içinde kural yok"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "baþlangýç simgesi %s herhangi bir cümleden türemiyor"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "tam sayý kapsam dýþý: %s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "geçersiz yönerge: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, fuzzy, c-format
+msgid "misleading reference: %s"
+msgstr "%s'in önceliði tekrar tanýmlanýyor"
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "%s argümaný, %s için belirsiz"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, fuzzy, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "`%2$s''in %1$d'i için bildirilmiþ tip yok"
+
+#: src/scan-code.l:764
+#, fuzzy, c-format
+msgid "$$ of %s has no declared type"
+msgstr "`%s''in $$'ý için bildirilmiþ tip yok"
+
+#: src/scan-code.l:786
+#, fuzzy, c-format
+msgid "$%s of %s has no declared type"
+msgstr "`%2$s''in %1$d'i için bildirilmiþ tip yok"
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "fazladan `,' boþluk olarak algýlandý"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "geçersiz yönerge: %s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "geçersiz yönerge: %s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "geçersiz karakter: %s"
+
+#: src/scan-gram.l:354
+#, fuzzy, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "beklenmeyen öðe: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "geçersiz karakter: %s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "geçersiz 'null' karakter"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "geçersiz karakter: %s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "geçersiz karakter: %s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "dosyanýn sonunda eksik `%s'"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "satýr sonunda eksik `%s'"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, fuzzy, c-format
+msgid "invalid $ value: $%d"
+msgstr "geçersiz deðer: %s"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "girdi gramerde çok fazla simge var (sýnýr: %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%2$s için tekrar %1$s bildirimi"
+
+#: src/symtab.c:164
+#, fuzzy, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%2$s için tekrar %1$s bildirimi"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "%s simgesi tekrar tanýmlanmýþ"
+
+#: src/symtab.c:346
+#, fuzzy, c-format
+msgid "symbol %s redeclared"
+msgstr "%s simgesi tekrar tanýmlanmýþ"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "kullanýcý andacý %s tekrar tanýmlanýyor"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"simge %s kullanýlmýþ, fakat andaç olarak tanýmlanmamýþ ve kurallarý yok"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "simge `%s', yalýn dizge olarak birden fazla kullanýlmýþ"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "simge `%s', birden fazla yalýn dizgeye atanmýþ"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "%s için tekrar tip bildirimi"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "ilk bildirim"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "baþlangýç simgesi %s tanýmlanmamýþ"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "baþlangýç simgesi %s bir andaç"
+
+#: src/symtab.c:935
+#, fuzzy, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "%2$s için tekrar %1$s bildirimi"
+
+#: src/symtab.c:950
+#, fuzzy, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "%2$s için tekrar %1$s bildirimi"
+
+#: src/symtab.c:965
+#, fuzzy, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "%2$s için tekrar %1$s bildirimi"
+
+#: src/symtab.c:980
+#, fuzzy, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "%2$s için tekrar %1$s bildirimi"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "alt program `%s' baþarýsýz"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "alt program `%s' bulunamadý"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "geçersiz argüman: %2$s için %1$s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%s argümaný, %s için belirsiz"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Geçerli argümanlar:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u serbest býrakýlan (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u önbellek kullanýmý (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u önbellek kullanýmý (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u önbellek kullanýmý (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "sayý histogramý\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "büyükük histogramý\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "yogunluk histogramý\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset istatistikleri:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Toplam çalýþtýrýlan = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Ýstatistik dosyasý okunamadý."
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "Ýstatistik dosyasý büyüklüðü yanlýþ.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Ýstatistik dosyasýna yazýlamadý."
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Ýstatistik dosyasý yazmak için açýlamadý."
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "ölümcül hata: "
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Bilinmeyen sistem hatasý"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: `%s' seçeneði belirsiz\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: `--%s' seçeneði argümansýz kullanýlýr\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: seçenek `%c%s' argümansýz kullanýlýr\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: `%s' seçeneði bir argümanla kullanýlýr\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: `--%s' seçeneði bilinmiyor\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: `%c%s' seçeneði bilinmiyor\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: geçersiz seçenek -- %c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: seçenek bir argümanla kullanýlýr -- %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: `-W %s' seçeneði belirsiz\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: `-W %s' seçeneði argümansýz kullanýlýr\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: `%s' seçeneði bir argümanla kullanýlýr\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "bellek tükendi"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "dosya kapatýlamýyor"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Çalýþma süresi (saniye)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TOPLAM                : "
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "%s'te geçen zaman: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "durum %d"
+
+#, fuzzy
+#~ msgid "GNU bison generates LALR(1) and GLR parsers.\n"
+#~ msgstr "GNU bison LALR(1) gramerler için ayrýþtýrýcýlar üretir.\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "Eðer bir uzun seçenek bir argümaný gerektirirse, bu gereklilik, denk olan "
+#~ "kýsa\n"
+#~ "seçenek için de geçerlidir.  Bu durum, seçimli argümanlar için de "
+#~ "geçerlidir.\n"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "Hiç indirgenmeyen kurallar"
+
+#~ msgid "useless rule"
+#~ msgstr "gereksiz kural"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "gereksiz deðiþken simge: %s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "Gereksiz deðiþken simgeler"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "Kullanýlmayan sabit simgeler"
+
+#~ msgid "Useless rules"
+#~ msgstr "Gereksiz kurallar"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d kural hiç indirgenmedi\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d gereksiz deðiþken simge"
+
+#~ msgid " and "
+#~ msgstr " ve "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d gereksiz kural"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "geçersiz önceleme dizgesi: %s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "tanýnmayan önceleme dizgesi: %s"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "%s ve %s andaçlarýnýn her ikisi %d sayýsýna atandmýþ"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: kural dýþý seçenek -- %c\n"
+
+#~ msgid "subsidiary program `%s' could not be invoked"
+#~ msgstr "alt program `%s' çalýþtýrýlamadý"
+
+#~ msgid "warning: "
+#~ msgstr "uyarý: "
+
+#~ msgid "POSIX forbids declarations in the grammar"
+#~ msgstr "Gramer içindeki bildirimler POSIX'e uygun deðildir"
+
+#~ msgid "missing `{' in `%s'"
+#~ msgstr "`%s' içinde eksik `{'"
+
+#~ msgid "invalid $ value"
+#~ msgstr "geçersiz $ deðeri"
+
+#~ msgid "subsidiary program `%s' failed (exit status %d)"
+#~ msgstr "alt program `%s' baþarýsýz (hata kodu: %d)"
+
+#~ msgid "conflicting precedences for %s and %s"
+#~ msgstr "%s ve %s için çeliþen öncelikler"
+
+#~ msgid "conflicting associativities for %s (%s) and %s (%s)"
+#~ msgstr "%s (%s) ve %s (%s) için çeliþen birleþmeli deðerler"
+
+#~ msgid "too many states (max %d)"
+#~ msgstr "çok fazla durum (en fazla %d)"
+
+#~ msgid "reduce"
+#~ msgstr "indirgeme"
+
+#~ msgid "shift"
+#~ msgstr "shift"
+
+#~ msgid "%d shift/reduce conflict"
+#~ msgid_plural "%d shift/reduce conflicts"
+#~ msgstr[0] "%d öteleme/indirgeme çeliþkisi"
+
+#~ msgid "and"
+#~ msgstr "ve"
+
+#~ msgid "State %d contains "
+#~ msgstr "%d durumu içerir"
+
+#~ msgid "conflicts: "
+#~ msgstr "çeliþkiler: "
+
+#~ msgid "%s contains "
+#~ msgstr "%s içerir"
+
+#~ msgid "`%s' is no longer supported"
+#~ msgstr "`%s' artýk desteklenmeyecek"
+
+#~ msgid "%s: no grammar file given\n"
+#~ msgstr "%s: gramer dosyasý verilmemiþ\n"
+
+#~ msgid "%s: extra arguments ignored after `%s'\n"
+#~ msgstr "%s: '%s' den sonraki argümanlar yoksayýldý\n"
+
+#~ msgid "too many gotos (max %d)"
+#~ msgstr "gotos çok fazla (en fazla %d)"
+
+#~ msgid "unexpected `/' found and ignored"
+#~ msgstr "beklenmeyen `/' bulundu ve yoksayýldý"
+
+#~ msgid "unterminated comment"
+#~ msgstr "sonlandýrýlmamýþ açýklama"
+
+#~ msgid "unexpected end of file"
+#~ msgstr "beklenmeyen dosya sonu"
+
+#~ msgid "unescaped newline in constant"
+#~ msgstr "sabit içinde kaçamayan yeni satýr"
+
+#~ msgid "octal value outside range 0...255: `\\%o'"
+#~ msgstr "sekizli deðer 0...255'in dýþýnda: `\\%o'"
+
+#~ msgid "hexadecimal value above 255: `\\x%x'"
+#~ msgstr "onaltýlýk deðer 255'in üstünde: `\\x%x'"
+
+#~ msgid "unknown escape sequence: `\\' followed by `%s'"
+#~ msgstr "bilinmeyen kaçýþ sýrasý: `\\' `%s' tarafýndan takip edildi"
+
+#~ msgid "unterminated type name at end of file"
+#~ msgstr "dosya sonunda sonlandýrýlmamýþ tip adý"
+
+#~ msgid "unterminated type name"
+#~ msgstr "sonlandýrýlmamýþ tip ismi"
+
+#~ msgid "use \"...\" for multi-character literal tokens"
+#~ msgstr "çok-karakterli yazýn andaçlarý için \"...\" kullan"
+
+#~ msgid "`%s' supports no argument: %s"
+#~ msgstr "`%s' argüman %s'i desteklemez"
+
+#~ msgid "`%s' requires an argument"
+#~ msgstr "`%s' bir argüman gerektirir"
+
+#~ msgid "   (rule %d)"
+#~ msgstr "   (kural %d)"
+
+#~ msgid "    %-4s\terror (nonassociative)\n"
+#~ msgstr "    %-4s\thata (birleþmeli deðil)\n"
+
+#~ msgid ""
+#~ "    $default\treduce using rule %d (%s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "    $default\tindirgeme kural %d (%s)'i kullanýyor\n"
+#~ "\n"
+
+#~ msgid "    %-4s\t[reduce using rule %d (%s)]\n"
+#~ msgstr "    %-4s\t[indirgeme kural %d (%s)'i kullanýyor]\n"
+
+#~ msgid "    %-4s\treduce using rule %d (%s)\n"
+#~ msgstr "    %-4s\tindirgeme kural %d (%s)'i kullanýyor\n"
+
+#~ msgid "    $default\treduce using rule %d (%s)\n"
+#~ msgstr "    $default\tindirgeme kural %d (%s)'i kullanýyor\n"
+
+#~ msgid "    $default\taccept\n"
+#~ msgstr "    $default\tonayla\n"
+
+#~ msgid "    NO ACTIONS\n"
+#~ msgstr "    EYLEM YOK\n"
+
+#~ msgid "Number, Line, Rule"
+#~ msgstr "Sayý, Satýr, Kural"
+
+#~ msgid "  %3d %3d %s ->"
+#~ msgstr "  %3d %3d %s ->"
+
+#~ msgid "   Skipping to next \\n"
+#~ msgstr "   Sonrakine atlanýyor \\n"
+
+#~ msgid "   Skipping to next %c"
+#~ msgstr "   Sonraki  %c'ye atlanýyor"
+
+#~ msgid "unterminated string"
+#~ msgstr "sonlandýrýlmamýþ dizge"
+
+#~ msgid "%s is invalid"
+#~ msgstr "%s geçersizdir"
+
+#~ msgid "unterminated `%{' definition"
+#~ msgstr "`%{' tanýmlamasý sonlandýrýlmamýþ"
+
+#~ msgid "Premature EOF after %s"
+#~ msgstr "%s'den sonra erken EOF"
+
+#~ msgid "`%s' is invalid in %s"
+#~ msgstr "`%s' %s içinde geçersizdir"
+
+#~ msgid "%type declaration has no <typename>"
+#~ msgstr "%type bildirimi <tipadý>'na sahip deðil"
+
+#~ msgid "invalid %%type declaration due to item: %s"
+#~ msgstr "geçersiz %%type bildirimine neden olan öðe: `%s'"
+
+#~ msgid "invalid text (%s) - number should be after identifier"
+#~ msgstr "geçersiz metin (%s) - sayý tanýtýcýdan sonra olmalýdýr"
+
+#~ msgid "unmatched %s"
+#~ msgstr "eþlenemeyen %s"
+
+#~ msgid "argument of %%expect is not an integer"
+#~ msgstr "%%expect'in argümaný bir tamsayý deðildir"
+
+#~ msgid "unrecognized item %s, expected an identifier"
+#~ msgstr "%s öðesi tanýnmadý, beklenen bir tanýtýcýdýr"
+
+#~ msgid "expected string constant instead of %s"
+#~ msgstr "%s'in yerine sabit dizge beklendi"
+
+#~ msgid "no input grammar"
+#~ msgstr "girdi grameri yok"
+
+#~ msgid "ill-formed rule: initial symbol not followed by colon"
+#~ msgstr "kötü-biçemli kural: baþlangýç simgesini takip eden \":\" yok"
+
+#~ msgid "grammar starts with vertical bar"
+#~ msgstr "gramer düþey çubuk ile baþlýyor"
+
+#~ msgid "previous rule lacks an ending `;'"
+#~ msgstr "önceki kuralda bir bitiþ `;' eksik"
+
+#~ msgid "two @prec's in a row"
+#~ msgstr "bir satýrda iki @prec"
+
+#~ msgid "%%guard present but %%semantic_parser not specified"
+#~ msgstr "%%guard sunulmuþ fakat %%semantic_parser belirlenmemiþ"
+
+#~ msgid "two actions at end of one rule"
+#~ msgstr "bir kuralýn sonunda iki eylem"
+
+#~ msgid "maximum table size (%d) exceeded"
+#~ msgstr "en büyük tablo uzunluðu (%d) aþýldý"
+
+#~ msgid "    $   \tgo to state %d\n"
+#~ msgstr "    $   \tdurum %d'ye git\n"
+
+#~ msgid "unterminated %guard clause"
+#~ msgstr "sonlandýrýlmamýþ %guard yantümcesi"
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644
index 0000000..ea20e55
--- /dev/null
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..fef0d25
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,1216 @@
+# Ukrainian translation of bison.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2007.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-08 18:21+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "попередження"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "помилка"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "критична помилка: "
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    Конфлікт між правилом %d та лексемою %s розв'язаний зсувом"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Конфлікт між правилом %d та лексемою %s розв'язаний виводу"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    Конфлікт між правилом %d та лексемою %s розв'язаний як помилка"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "конфлікти: %d зсуву/виводу, %d виводу/виводу\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "конфлікти: %d зсуву/виводу\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "конфлікти: %d виводу/виводу\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Стан %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr застосовується лише до аналізатору GLR"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "очікувався %d конфлікт зсуву/виводу"
+msgstr[1] "очікувалося %d конфлікти зсуву/виводу"
+msgstr[2] "очікувалося %d конфліктів зсуву/виводу"
+msgstr[3] "очікувався %d конфлікт зсуву/виводу"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "очікувався %d конфлікт виводу/виводу"
+msgstr[1] "очікувалося %d конфлікти виводу/виводу"
+msgstr[2] "очікувалося %d конфліктів виводу/виводу"
+msgstr[3] "очікувався %d конфлікт виводу/виводу"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: не вдалося відкрити"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "помилка введення-виведення"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "не вдається закрити файл"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "відмовлено у перезаписі файла вхідних даних %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "суперечливий вивід у файл %s"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Використовуйте `%s --help' для додаткової інформації.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Використання: %s [КЛЮЧІ]... ФАЙЛ\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Створити детерміністичний аналізатор LR або узагальнений LR (GLR) з\n"
+"використанням LALR(1), IELR(1) або канонічних таблиць LR(1). Підтримку\n"
+"IELR(1) та канонічних таблиць LR(1) ще недостатньо перевірено.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Обов’язкові аргументи для довгих форм запису параметрів є обов’язковими і "
+"для скорочених форм.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Те саме стосується необов’язкових аргументів.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Режими роботи:\n"
+"  -h, --help                 вивести цю довідку і завершити роботу\n"
+"  -V, --version              вивести інформацію щодо версії і завершити "
+"роботу\n"
+"      --print-localedir      вивести назву каталогу, де містяться залежні "
+"від локалі дані\n"
+"      --print-datadir        вивести назву каталогу, де містяться шаблони та "
+"XSLT\n"
+"  -y, --yacc                 імітувати Yacc POSIX\n"
+"  -W, --warnings[=КАТЕГОРІЯ] виводити попередження з категорії КАТЕГОРІЯ\n"
+"  -f, --feature[=МОЖЛИВІСТЬ] задіяти різноманітні можливості\n"
+"\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Аналізатор:\n"
+"  -L, --language=МОВА              вказати мову програмування виведених "
+"даних\n"
+"                                   (недостатньо перевірена можливість)\n"
+"  -S, --skeleton=ФАЙЛ              вказати шаблон, який слід використати\n"
+"  -t, --debug                      налаштувати аналізатор для діагностики\n"
+"      --locations                  увімкнути підтримку місць\n"
+"  -D, --define=НАЗВА[=ЗНАЧЕННЯ]    відповідник `%define НАЗВА \"ЗНАЧЕННЯ\"'\n"
+"  -F, --force-define=НАЗВА[=ЗНАЧЕННЯ] перевизначити `%define НАЗВА \"ЗНАЧЕННЯ"
+"\"'\n"
+"  -p, --name-prefix=ПРЕФІКС        додавати ПРЕФІКС до зовнішніх символів,\n"
+"                                   слід надавати перевагу '-Dapi."
+"prefix=ПРЕФІКС'\n"
+"  -l, --no-lines                   не створювати інструкцій `#line'\n"
+"  -k, --token-table                включити таблицю назв елементів\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Виведення:\n"
+"      --defines[=ФАЙЛ]       створити також файл заголовків\n"
+"  -d                         подібне, але без можливості вказати ФАЙЛ (для "
+"Yacc POSIX)\n"
+"  -r, --report=ЕЛЕМЕНТИ      також створити автоматичні записи подробиць\n"
+"      --report-file=ФАЙЛ     записати звіт до ФАЙЛа\n"
+"  -v, --verbose              те саме, що і `--report=state'\n"
+"  -b, --file-prefix=ПРЕФІКС  вказати ПРЕФІКС файла результатів\n"
+"  -o, --output=ФАЙЛ          вивести дані до ФАЙЛа\n"
+"  -g, --graph[=ФАЙЛ]         вивести граф автомата\n"
+"  -x, --xml[=ФАЙЛ]           вивести звіт автомата у форматі XML\n"
+"                             (схему XML перевірено недостатньо)\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Категорії попереджень:\n"
+"  `midrule-values'  невстановлені або невикористані проміжні значення\n"
+"  `yacc'            несумісності з Yacc POSIX\n"
+"  `conflicts-sr'    S/R-конфлікти (типово увімкнено)\n"
+"  `conflicts-rr'    R/R conflicts (типово увімкнено)\n"
+"  `deprecated'      застарілі конструкції\n"
+"  `other'           всі інші попередження (типово увімкнено)\n"
+"  `all'             всі попередження\n"
+"  `no-КАТЕГОРІЯ'    вимкнути попередження з КАТЕГОРІЇ\n"
+"  `none'            вимкнути всі попередження\n"
+"  `error'           вважати попередження помилками\n"
+"\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"THINGS - список розділених комою слів, які можуть включати:\n"
+"  `state'        описує стани\n"
+"  `itemset'      завершити набір елементів ядра та закрити їх\n"
+"  `lookahead'    явна прив'язати ознаки lookahead до елементів\n"
+"  `solved'       описати вирішення конфліктів зсуву/виводу\n"
+"  `all'          включати всю наведену вище інформацію\n"
+"  `none'         вимкнути звіт\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"МОЖЛИВІСТЬ — список слів, відокремлених комами. Можливі слова:\n"
+"  `caret'        показати помилки, пов’язані з символами ^\n"
+"  `all'          всі, вказані вище\n"
+"  `none'         вимкнути, всі вказані вище\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Сповіщайте про помилки за адресою <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "Домашня сторінка %s: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"Загальна довідка щодо використання програмного забезпечення GNU: <http://www."
+"gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Звіти щодо вад у перекладах слід надсилати за адресами, вказаними тут: "
+"<http://translationproject.org/team/>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+"З повною документацією можна ознайомитися за допомогою команди info bison.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Автори: Роберт Корбет та Річард Столмен.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Це програмне забезпечення є вільним, умови копіювання викладено у його "
+"початкових кодах.\n"
+"Умовами ліцензування програми НЕ передбачено жодних гарантій, зокрема "
+"гарантій працездатності\n"
+"або придатності для певної мети.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "не можна використовувати декілька оголошень шаблонів"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: некоректна мова"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "визначення декількох оголошень мов є некоректним"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: пропущено операнд"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "зайвий операнд %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "порожній"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Граматика"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Створено за допомогою %s.\n"
+"// Про вади повідомляйте на адресу <%s>.\n"
+"// Домашня сторінка: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "переповнення номеру рядка"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "переповнення номеру стовпчика"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "правило є зайвим у аналізаторі через конфлікти"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "змінну %%define %s перевизначено"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "попереднє визначення"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: невизначена змінна %%define %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "некоректне значення булевої змінної %%define %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "некоректне значення змінної %%define %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "прийняте значення: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "у описі параметра відсутній ідентифікатор"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " тип %d є %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "зсув, та перехід у стан %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "перехід у стан %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "помилка (не асоціативна)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "вивід з використанням правила %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "прийняти"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "Стан %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Термінальні символи з правилами, у яких вони з'являються"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Нетермінальні символи з правилами, у яких вони з'являються"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " ліворуч:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " праворуч:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Правила є зайвими у аналізаторі через конфлікти"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "багатократні описи %s"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "конфлікт типів результатів під час об’єднання функції %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "попереднє оголошення"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "проігноровано дублікат назви символу %s"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "правило задано для %s, який є лексемою"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "конфлікт типів на типовій дії: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr ""
+"порожнє правило для типізованого нетермінального символу, та відсутня дія"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "не використане значення: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "не встановлене значення: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "елемент %%prec не визначено: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "у правилі допускається лише один %s"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s впливає лише на аналізатори GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "за %s повинно слідувати додатне число"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "правило надто довге"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "відсутні правила у вхідній граматиці"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "зайве правило у граматиці"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "нетермінал є зайвим у граматиці: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Нетермінали зайві у граматиці"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Невикористані термінали у граматиці"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Зайві правила у граматиці"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d зайвий нетермінал у граматиці"
+msgstr[1] "%d зайві нетермінали у граматиці"
+msgstr[2] "%d зайвих нетерміналів у граматиці"
+msgstr[3] "%d зайвий нетермінал у граматиці"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d зайве правило у граматиці"
+msgstr[1] "%d зайві правила у граматиці"
+msgstr[2] "%d зайвих правил у граматиці"
+msgstr[3] "%d зайве правило у граматиці"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "початковий символ %s не виводить жодного речення"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "зайвий символ '%s'"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "наприкінці коду дії можливо потрібен символ ';'"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "у майбутніх версіях Bison символ ';' не додаватиметься"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+"використання YYFAIL. Вважається застарілим, буде вилучено у наступних "
+"версіях."
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "посилається на: %c%s у %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "ймовірно мало бути: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", приховування %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " у %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", доступ з дії проміжного правила неможливий у $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "вихід за межі діапазону цілого числа: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "некоректне посилання: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"синтаксична помилка після '%c'. Мало бути вказано ціле число, літеру, '_', "
+"'[' або '$'"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "у продукції не знайдено символу до $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "у продукції не знайдено символу: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "помилкове посилання: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "неоднозначне посилання: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "у нетипізованій граматиці явним чином вказано тип"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ для проміжного правила у $%d %s немає оголошеного типу"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ %s не має оголошеного типу"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s %s не має оголошеного типу"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "зайва кома, вважатиметься пробілом"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "некоректна директива: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "некоректний ідентифікатор: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "некоректні символи"
+msgstr[1] "некоректні символи"
+msgstr[2] "некоректні символи"
+msgstr[3] "некоректний символ"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "неочікуваний ідентифікатор у назву у дужках: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "мало бути вказано ідентифікатор"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "некоректні символи у назві у дужках"
+msgstr[1] "некоректні символи у назві у дужках"
+msgstr[2] "некоректні символи у назві у дужках"
+msgstr[3] "некоректний символ у назві у дужках"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "порожня символьна стала"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "зайві символи у символьній сталій"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "неприпустимий null-символ"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "некоректне число після екранування \\: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "некоректний символ після екранування \\: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "не вистачає %s наприкінці файла"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "не вистачає %s наприкінці рядка"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "незавершена інструкція %s у шаблоні"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "занадто мало аргументів у інструкції %s шаблона"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "занадто багато аргументів у інструкції %s шаблона"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "некоректне $ значення: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "Yacc POSIX забороняє використання дефісів у назва символів: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "надто багато символів (лексеми плюс нетермінали); максимально %d"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "повторний опис %s для %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "повторний опис %s для <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "повторне визначення символу %s"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "символ %s визначений повторно"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "перевизначення номера лексеми користувача для %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"символ %s використовується, але не визначений як лексема та не має правил"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "символ %s використано декілька разів як сталий рядок символів"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "символ %s вказано декілька сталих рядків (літералів)"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "повторне оголошення елемента користувача з номером %d для %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "попереднє оголошення %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "початковий символ %s невизначений"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "початковий символ %s є лексемою"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "повторне оголошення типового %%destructor з міткою"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "повторне оголошення типового %%destructor без мітки"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "повторне оголошення типового %%printer з міткою"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "повторне оголошення типового %%printer без мітки"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "спроба вилучення «%s» зазнала невдачі"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "спроба створення тимчасового файла зазнала невдачі"
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "спроба збереження stdin зазнала невдачі"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "спроба збереження stdout зазнала невдачі"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "спроба відкриття файла тимчасових даних зазнала невдачі"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+"спроба переспрямовування стандартного виведення bison до тимчасового файла "
+"зазнала невдачі"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+"спроба переспрямовування стандартного джерела даних m4 з тимчасового файла "
+"зазнала невдачі"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "не вдалося відкрити файл тимчасових даних"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+"спроба переспрямовування стандартного виведення m4 до тимчасового файла "
+"зазнала невдачі"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "виконання допоміжної програми '%s' перервано"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "не вдалося знайти допоміжну програму '%s'"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+"спроба переспрямовування стандартного джерела даних bison з тимчасового "
+"файла зазнала невдачі"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "неприпустимий аргумент %s для %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "неоднозначний аргумент %s для %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Допустимі аргументи:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u звільнено (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u кешовано (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u кешовано (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u кешовано (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "гістограма журналу лічильників\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "гістограма журналу розміру\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "гістограма щільності\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Статистика бітових полів:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Акумульовані запуски = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "не вдалося прочитати файл статистичних даних"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "помилковий розмір файла статистичних даних\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "не вдалося записати файл статистичних даних."
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "не вдалося відкрити файл статистичних даних для запису"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "помилка запису"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Невідома системна помилка"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: неоднозначний параметр «%s»; можливі варіанти:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: додавання аргументів до параметра «--%s» не передбачено\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: додавання аргументів до параметра «%c%s» не передбачено\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: до параметра «--%s» слід додати аргумент\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: невідомий параметр «--%s»\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: невідомий параметр «%c%s»\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: некоректний параметр — «%c»\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: до параметра слід додати аргумент — «%c»\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: параметр «-W %s» не є однозначним\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: додавання аргументів до параметра «-W %s» не передбачено\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: до параметра «-W %s» слід додати аргумент\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "пам'ять вичерпано"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "не вдалося створити канал"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "Помилка підпроцесу %s"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "'"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Час виконання (у секунда)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " ЗАГАЛОМ               :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "час у %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "Помилка _open_osfhandle"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "Не вдалося відновити fd %d: помилка dup2"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "Підпроцес %s"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "Підпроцесом %s отримано сигнал щодо аварійного завершення %d"
+
+#~ msgid "state %d"
+#~ msgstr "стан %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "зайвий символ '@'"
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644
index 0000000..87053a3
--- /dev/null
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..543232c
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,1215 @@
+# Vietnamese Translation for Bison.
+# Copyright © 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-09 08:31+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Team-Website: <http://translationproject.org/team/vi.html>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "cảnh báo"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+msgid "error"
+msgstr "lỗi"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "lỗi nghiêm trọng"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+"    Xung đột giữa quy tắc %d và thẻ bài %s được phân giải là dịch (shift)"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Xung đột giữa quy tắc %d và thẻ bài %s được phân giải là rút gọn "
+"(reduce)."
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+"    Xung đột giữa quy tắc %d và thẻ bài %s được phân giải là một lỗi (error)."
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "xung đột: %d dịch/giảm, %d giảm/giảm\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "xung đột: %d dịch/giảm\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "xung đột: %d giảm/giảm\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "Tình trạng %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr chỉ áp dụng cho bộ phân tích kiểu GLR."
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "mong đợi %d lần xung đột dịch/giảm"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "mong đợi %d lần xung đột giảm/giảm"
+
+#: src/files.c:114
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: không thể mở"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr "lỗi vào/ra"
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "không thể đóng tập tin"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "từ chối ghi đè lên tập tin đầu vào %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "tập tin “%s” có nhiều kết xuất xung đột với nhau"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Hãy chạy câu lệnh “%s --help” (trợ giúp) để xem thêm thông tin.\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Sử dụng: %s [TÙY_CHỌN]... TẬP_TIN\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+"Tạo ra một bộ phân tích tất định LR hay RL được khái quát hoá dùng\n"
+"bảng phân tích LALR(1), IELR(1), hay canonical LR(1). Việc hỗ trợ  IELR(1) "
+"và\n"
+"canonical LR(1) chỉ là thử nghiệm.\n"
+"\n"
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Mọi đối số bắt buộc phải sử dụng với tùy chọn dài cũng bắt buộc với tùy chọn "
+"ngắn.\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "Cũng vậy với đối số còn tùy chọn.\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Chế độ thao tác:\n"
+"  -h, --help                 hiển thị trợ giúp này, sau đó thoát\n"
+"  -V, --version              xuất thông tin phiên bản, sau đó thoát\n"
+"      --print-localedir      xuất thư mục chứa dữ liệu phụ thuộc vào miền "
+"địa phương\n"
+"      --print-datadir        xuất thư mục chứa khung sườn và XSLT\n"
+"  -y, --yacc                 mô phỏng POSIX Yacc\n"
+"  -W, --warnings[=LOẠI]      thông báo các cảnh báo thuộc về phân LOẠI này\n"
+"  -f, --feature[=TÍNH-NĂNG]  kích hoạt các TÍNH-NĂNG\n"
+"\n"
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"Bộ phân tích cú pháp:\n"
+"  -L, --language=NGÔN_NGỮ          chỉ định ngôn ngữ lập trình kết xuất\n"
+"                                   (đây là một tính năng vẫn còn thực "
+"nghiệm)\n"
+"  -S, --skeleton=TẬP_TIN           chỉ định khung sườn cần dùng\n"
+"  -t, --debug                      đặt phân tích để gỡ lỗi\n"
+"      --locations                  cho phép hỗ trợ về vị trí\n"
+"  -D, --define=NAME[=VALUE]        tương tự như `%define NAME “VALUE”'\n"
+"  -F, --force-define=NAME[=VALUE]  đè lên `%define NAME “VALUE”'\n"
+"  -p, --name-prefix=TIỀN_TỐ        đặt tiền tố nào vào trước ký hiệu ngoài\n"
+"                                   phản đối bởi '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   không tạo chỉ thị kiểu “#line”\n"
+"  -k, --token-table                bao gồm bảng các tên thẻ bài\n"
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"Kết xuất:\n"
+"      --defines[=TẬP_TIN]    cũng tạo một tập tin phần đầu\n"
+"  -d                    cũng vậy nhưng không thể đặt TẬP_TIN (cho POSIX "
+"Yacc)\n"
+"  -r, --report=CÁI           cũng hiện chi tiết về hàm tự động\n"
+"      --report-file=TẬP_TIN  ghi báo cáo vào tập tin này\n"
+"  -v, --verbose              tương đương với `--report=state'\n"
+"  -b, --file-prefix=TIỀN_TỐ  xác định một tiền tố cho các tập tin kết xuất\n"
+"  -o, --output=TẬP_TIN       xuất vào tập tin này\n"
+"  -g, --graph[=TẬP_TIN]      cũng xuất một đồ thị về hàm tự động\n"
+"  -x, --xml[=TẬP_TIN]        cũng xuất một báo cáo XML về hàm tự động\n"
+"                              (giản đồ XML vẫn còn là thực nghiệm)\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+"Các loại cảnh báo bao gồm:\n"
+" • midrule-values   giá trị ở giữa quy tắc mà chưa dùng hay đặt\n"
+" • yacc             sự không tương thích với POSIX YACC\n"
+" • `conflicts-sr'   xung đột S/R (bật theo mặc định)\n"
+" • `conflicts-rr'   xung đột R/R (bật theo mặc định)\n"
+" • `deprecated'     các chỉ lệnh đã cũ\n"
+" • `other'          mọi cảnh báo khác (bật theo mặc định)\n"
+" • all              tất cả các cảnh báo\n"
+" • no-LOẠI          tắt cảnh báo với LOẠI\n"
+" • none             tắt mọi cảnh báo\n"
+" • error            xử lý cảnh báo dưới dạng lỗi\n"
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"CÁI là danh sách những từ định giới bằng dấu phẩy có thể bao gồm:\n"
+" • state         diễn tả các tình trạng\n"
+" • itemset       điền nốt mỗi tập hợp mục lõi với kết thúc nó\n"
+" • look-ahead    liên quan dứt khoát mỗi thẻ bài nhìn trước đến mục\n"
+" • solved        diễn tả tiến trình giải sự xung đột kiểu dời/giảm\n"
+" • all           bao gồm tất cả thông tin trên\n"
+" • none          tắt báo cáo\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+"TÍNH-NĂNG là một danh sách các từ cách nhau bằng dấu phẩy, bao gồm:\n"
+" • `caret'       hiển thị lỗi bằng dấu ^\n"
+" • `all'         tất cả các thứ ở trên\n"
+" • `none'        tắt tất cả các thứ ở trên\n"
+"  "
+
+#: src/getargs.c:395
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Hãy thông báo lỗi cho <%s>.\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "Trang chủ %s: <%s>.\n"
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr "Hướng dẫn chung về phần mềm GNU: <http://www.gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Hãy thông báo lỗi dịch cho <http://translationproject.org/team/vi.html>.\n"
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Để đọc tài liệu dạng đầy đủ, chạy lệnh: info bison.\n"
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Tác giả: Robert Corbett và Richard Stallman.\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Bản quyền © %d Tổ chức Phần mềm Tự do.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Chương trình này là phần mềm tự do; xem mã nguồn để tìm điều kiện sao chép.\n"
+"KHÔNG CÓ BẢO HÀNH GÌ CẢ, THẬM CHÍ KHÔNG CÓ BẢO ĐẢM ĐƯỢC NGỤ Ý\n"
+"KHẢ NĂNG BÁN HAY KHẢ NĂNG LÀM ĐƯỢC VIỆC DỨT KHOÁT.\n"
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "chỉ cho phép một khai báo khung sườn"
+
+#: src/getargs.c:476
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: ngôn ngữ không hợp lệ"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "chỉ cho phép một khai báo ngôn ngữ"
+
+#: src/getargs.c:747
+#, c-format
+msgid "%s: missing operand"
+msgstr "%s: thiếu toán hạng"
+
+#: src/getargs.c:749
+#, c-format
+msgid "extra operand %s"
+msgstr "toán hạng bổ xung %s"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "rỗng"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "Ngữ pháp"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Tạo ra bởi %s.\n"
+"// Báo cáo lỗi tới <%s>.\n"
+"// Trang chủ: <%s>.\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "tràn số thứ tự dòng"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "tràn số thứ tự cột"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "quy tắc vô ích trong bộ phân tích bởi vì các xung đột"
+
+#: src/muscle-tab.c:450
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%biến định nghĩa %s bị định nghĩa lại"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "lời định nghĩa trước"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: chưa định nghĩa %%define biến %s"
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "gặp giá trị sai đối với biến Bun %%define %s"
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "gặp giá trị sai đối với biến %%define %s: %s"
+
+#: src/muscle-tab.c:613
+#, c-format
+msgid "accepted value: %s"
+msgstr "giá trị không được chấp nhận: %s"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "thiếu dấu nhận diện trong khai báo tham số"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " kiểu %d là %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "dời, và chuyển sang trạng thái %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "chuyển sang tình trạng %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "lỗi (không kết hợp)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "rút gọn dùng quy tắc %d (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "chấp nhận"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, c-format
+msgid "State %d"
+msgstr "Trạng thái %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "Đồ kết thúc, với quy tắc nơi mà có"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "Đồ không kết thúc, với quy tắc nơi mà có"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr " bên trái:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr " bên phải:"
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "Quy tắc vô ích trong cơ chế phân tích do xung đột"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "nhiều khai báo %s"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "kết quả mâu thuẫn kiểu khi hợp vào hàm %s: <%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "khai báo trước"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "tên ký hiệu bị trùng lắp cho %s bị bỏ qua"
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "đưa ra quy tắc cho %s, mà là thẻ bài"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "kiểu xung đột ở hành động mặc định: <%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "quy tắc rỗng cho đồ không kết thúc có kiểu, cũng không có hành động"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "giá trị chưa dùng: $%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "giá trị chưa đặt: $$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "chưa xác định thẻ bài cho %%prec: %s"
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "chỉ cho phép một %s cho mỗi quy tắc"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s chỉ ảnh hưởng đến cơ chế phân tích kiểu GLR"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s phải có con số dương theo sau"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "quy tắc quá dài"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "không có quy tắc trong ngữ pháp nhập vào"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "quy tắc vô ích trong ngữ pháp"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "đồ không kết thúc vô ích trong ngữ pháp: %s"
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr "Đồ không kết thúc vô ích trong ngữ pháp"
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr "Đồ kết thúc chưa dùng trong ngữ pháp"
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "Quy tắc vô ích trong ngữ pháp"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d đồ không kết thúc vô ích trong ngữ pháp"
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d quy tắc vô ích trong ngữ pháp"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "ký hiệu bắt đầu %s không nhận được câu"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr "ký hiệu '%s' lạc"
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr "một dấu ';' có lẽ là cần thiết tại cuối của câu lệnh hành động"
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr "phiên bản tiếp theo của Bison sẽ không thêm ';'"
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "sử dụng YYFAIL, việc này không được tán thành và sẽ bị gỡ bỏ"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "tham chiếu đến: %c%s tại %s"
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "có lẽ có ý là: %c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ", ẩn %c"
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " ở %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ", không thể truy cập được từ hành động quy-tắc-trung tại $%d"
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "số nguyên nằm ngoài phạm vi: %s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "sai tham chiếu: %s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr "lỗi sai cú pháp sau '%c', cần số nguyên, chữ, '_', '[', hoặc '$'"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "ký hiệu không tìm thấy trong thủ tục trước $%d: %.*s"
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "ký hiệu không tìm thấy trong thủ tục: %.*s"
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr "tham chiếu không đúng chỗ: %s"
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "tham chiếu chưa rõ ràng: %s"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "đưa ra kiểu dứt khoát theo ngữ cảnh không đặt kiểu"
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ cho quy tắc giữa ở $%d của %s không có kiểu được khai báo"
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ của %s không khai báo kiểu"
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s của %s không khai báo kiểu"
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "dấu phẩy ',' thất lạc được đối đãi như là khoảng trắng"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "chỉ thị không hợp lệ: %s"
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "định danh không hợp lệ: %s"
+
+#: src/scan-gram.l:295
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "ký tự không hợp lệ"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "không cần một định danh trong tên đặt trong dấu ngoặc: %s"
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "cần một định danh"
+
+#: src/scan-gram.l:381
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ký tự không hợp lệ trong tên đặt trong dấu ngoặc"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr "ký tự trống theo kiểu văn chương"
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr "các ký tự mở rộng trong câu chữ"
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "ký tự vô giá trị không hợp lệ"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "gặp số sai nằm sau \\-escape: %s"
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "gặp ký tự sai nằm sau \\-escape: %s"
+
+#: src/scan-gram.l:901
+#, c-format
+msgid "missing %s at end of file"
+msgstr "thiếu %s tại kết thúc tập tin"
+
+#: src/scan-gram.l:912
+#, c-format
+msgid "missing %s at end of line"
+msgstr "thiếu %s tại cuối dòng"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "gặp chỉ thị %s chưa đóng trong khung sườn"
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "quá ít đối số cho chỉ thị %s trong khung sườn"
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "quá nhiều đối số cho chỉ thị %s trong khung sườn"
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "giá trị $ không hợp lệ: $%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX Yacc cấm chỉ sự va chạm trong các tên ký hiệu: %s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "quá nhiều ký hiệu trong ngữ pháp nhập vào (giới hạn %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s khai báo lại cho %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s khai báo lại cho <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "ký hiệu %s đã được định nghĩa lại"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "ký hiệu %s đã được khai báo lại"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "đang định nghĩa lại số thứ tự thẻ bài người dùng của %s"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"ký hiệu %s được dùng, nhưng chưa được định nghĩa như là thẻ bài, cũng không "
+"có quy tắc"
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "ký hiệu %s sử dụng cho nhiều hơn một chuỗi nghĩa chữ"
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "ký hiệu %s nhận nhiều hơn một chuỗi nghĩa chữ"
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "số thẻ người dùng %d khai báo lại cho %s"
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr "khai báo trước đây cho %s"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "chưa định nghĩa ký hiệu bắt đầu %s"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "ký hiệu bắt đầu %s là một thẻ bài"
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "khai báo lại cho %%destructor có thẻ mặc định"
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "khai báo lại cho %%destructor không có thẻ mặc định"
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "khai báo lại cho %%printer có thẻ mặc định"
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "khai báo lại cho %%printer không có thẻ mặc định"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr "việc gỡ bỏ của '%s' gặp lỗi"
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr "việc tạo tin tạm thời gặp lỗi."
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr "ghi lại stdin gặp lỗi"
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr "ghi lại stdout gặp lỗi"
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr "việc mở tập tin tmpfile gặp lỗi"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr "chuyển hướng stdout của bison tới tập tin tạm gặp lỗi"
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr "chuyển hướng stdin của m4 từ tập tin tạm gặp lỗi"
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr "việc mở tập tin tạm thời gặp lỗi"
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr "chuyển hướng stdout của m4 tới tập tin tạm gặp lỗi"
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "chương trình chạy bổ trợ '%s' bị ngắt giữa chừng"
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "không tìm thấy chương trình chạy bổ trợ '%s'"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr "chuyển hướng stdin của bison từ tập tin tạm gặp lỗi"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "đối số không hợp lệ %s cho %s"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "đối số chưa rõ ràng %s cho %s"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "Đối số hợp lệ:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs (cấp bộ bit), %u đã giải phóng (%.2f%%).\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets (bộ bộ bit), %u đã lưu tạm (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets (đặt lại bộ bit), %u đã lưu tạm (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests (thử bộ bit), %u đã lưu tạm (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists (danh sách bộ bit)\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "biểu đồ tần xuất ghi lưu số đếm\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "biểu đồ tần xuất ghi lưu kích cỡ\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "biểu đồ tần xuất mật độ\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Thống kê bít:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Lần chạy tích lũy = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+msgid "cannot read stats file"
+msgstr "không thể đọc tập tin thống kê (stats)"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr "kích cỡ tập tin thống kê (stats) sai.\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+msgid "cannot write stats file"
+msgstr "không thể ghi tập tin thống kê (stats)"
+
+#: lib/bitset_stats.c:292
+msgid "cannot open stats file for writing"
+msgstr "không thể mở tập tin thống kê (stats) để ghi"
+
+#: lib/closeout.c:112
+msgid "write error"
+msgstr "lỗi ghi"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "Lỗi hệ thống không rõ"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s: tùy chọn “%s” chưa rõ ràng; khả năng là:"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: tùy chọn “--%s” không cho phép đối số\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: tùy chọn “%c%s” không cho phép đối số\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s: tùy chọn “--%s” yêu cầu một đối số\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: không nhận ra tùy chọn “--%s”\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: không nhận ra tùy chọn “%c%s”\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: tùy chọn không hợp lệ -- “%c”\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: tùy chọn yêu cầu một đối số -- “%c”\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: tùy chọn “-W %s” chưa rõ ràng\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: tùy chọn “-W %s” không cho phép đối số\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s: tùy chọn “-W %s” yêu cầu một đối số\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "hết bộ nhớ"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "không thể tạo ống dẫn"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "tiến trình con %s bị lỗi"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "“"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "”"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Thời gian thực hiện (giây)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " TỔNG                  :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "thời gian theo %s: %ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle gặp lỗi"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "không thể phục hồi bộ mô tả tập tin %d: dup2 gặp lỗi"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "tiến trình con %s"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "tiến trình con %s đã nhận tín hiệu nghiệm trọng %d"
+
+#~ msgid "state %d"
+#~ msgstr "tình trạng %d"
+
+#~ msgid "stray '@'"
+#~ msgstr "lạc '@'"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr ""
+#~ "biến %%define chưa xác định \"%s\" được gửi qua cho hàm "
+#~ "\"muscle_percent_define_get_loc\""
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "biến %%define chưa xác định \"%s\" được gửi qua cho hàm "
+#~ "\"muscle_percent_define_get_syncline\""
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "biến %%define chưa xác định \"%s\" được gửi qua cho hàm "
+#~ "\"muscle_percent_define_flag_if\""
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "biến %%define chưa xác định \"%s\" được gửi qua cho hàm "
+#~ "\"muscle_percent_define_flag_check_values\""
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr "Tạo cơ chế phân tích kiểu LALR(1) và GLR.\n"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "cả thẻ bài %s lẫn %s đều được gán số %d"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644
index 0000000..5ab309e
--- /dev/null
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..a1fb052
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,1126 @@
+# Chinese simplified translation for bison.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Wylmer Wang <wantinghard@gmail.com>, 2011.
+# Ji ZhengYu <zhengyuji@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.5\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2011-07-25 11:00中国标准时间\n"
+"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "警告"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "I/O 错误"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "致命错误"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "状态 %d"
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr 只应用于 GLR 解析器"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] ""
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] ""
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "无法打开文件“%s”"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "无法关闭文件"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "拒绝覆盖输入文件 %s"
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "到文件 %s 的输出冲突"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "尝试“%s --help”了解更多信息。\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "用法:%s [选项]... 文件\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr "长选项的强制参数对短选项也是强制的。\n"
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr "可选项也是如此。\n"
+
+#: src/getargs.c:316
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:329
+#, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+
+#: src/getargs.c:346
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"向 <%s> 报告问题。\n"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "由 Robert Corbett 和 Richard Stallman 编写。\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "版权所有 (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+
+#: src/getargs.c:458
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr ""
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "无效的语言“%s”"
+
+#: src/getargs.c:479
+msgid "multiple language declarations are invalid"
+msgstr "多语言声明是无效的"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "“%s”后缺少操作符"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "额外的操作符“%s”"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "空"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "语法"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// 由 %s 生成。\n"
+"// 向 <%s> 报告问题。\n"
+"// 主页:<%s>。\n"
+"\n"
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "行号溢出"
+
+#: src/location.c:95
+#, c-format
+msgid "column number overflow"
+msgstr "列号溢出"
+
+#: src/main.c:146
+msgid "rule useless in parser due to conflicts"
+msgstr "由于冲突,解析器中的规则不起作用"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "重新定义了 %%define 变量“%s”"
+
+#: src/muscle-tab.c:453
+msgid "previous definition"
+msgstr "上次定义"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, fuzzy, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%%define 变量 %s 的值无效:“%s”"
+
+#: src/muscle-tab.c:550
+#, fuzzy, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "%%define 布尔型变量 %s 的值无效"
+
+#: src/muscle-tab.c:609
+#, fuzzy, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "%%define 变量 %s 的值无效:“%s”"
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "接受的值:“%s”"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "参数声明中缺少识别符"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr " 类型 %d 为 %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr ""
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "转到状态 %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr ""
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr ""
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "接受"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "状态 %d"
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr ""
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr ""
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr ""
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr ""
+
+#: src/print.c:510
+msgid "Rules useless in parser due to conflicts"
+msgstr "由于冲突,解析器中的规则不起作用"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "多次 %s 定义"
+
+#: src/reader.c:133
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "上次声明"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr ""
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr ""
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr ""
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "未使用的值:$%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "未设置的值:$$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr ""
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s 只影响 GLR 解析器"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s 后面只能跟正数"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "规则过长"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "输入语法中没有规则"
+
+#: src/reduce.c:241
+msgid "rule useless in grammar"
+msgstr "语法中的规则无效"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+msgid "Nonterminals useless in grammar"
+msgstr ""
+
+#: src/reduce.c:363
+msgid "Terminals unused in grammar"
+msgstr ""
+
+#: src/reduce.c:372
+msgid "Rules useless in grammar"
+msgstr "语法中的规则无效"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+
+#: src/reduce.c:390
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] ""
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr ""
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr "使用了 YYFAIL,它已经废弃并将被移除"
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr "可能指:%c"
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr " 位于 %s"
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "整数超出范围:%s"
+
+#: src/scan-code.l:610
+#, c-format
+msgid "invalid reference: %s"
+msgstr "无效引用:%s"
+
+#: src/scan-code.l:619
+#, fuzzy, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr "“%c”后语法错误,应为整数、字母、“_”、“[”或“$”"
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr ""
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr ""
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr ""
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr ""
+
+#: src/scan-gram.l:149
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr ""
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr ""
+
+#: src/scan-gram.l:250
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "无效标识符:%s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "无效字符:%s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr "应有一个标识符"
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "无效字符:%s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "无效的空字符"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr ""
+
+#: src/scan-gram.l:573
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr ""
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "文件末尾缺少“%s”"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "行尾缺少“%s”"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "无效的 $ 值:$%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX Yacc 禁止符号名中有破折号:%s"
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "输入语法中的符号过多(限制为 %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr ""
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr ""
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "符号 %s 重复定义"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "符号 %s 重复声明"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr ""
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+
+#: src/symtab.c:415
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr ""
+
+#: src/symtab.c:418
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr ""
+
+#: src/symtab.c:535
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr ""
+
+#: src/symtab.c:539
+#, c-format
+msgid "previous declaration for %s"
+msgstr ""
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "起始符号 %s 未定义"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr ""
+
+#: src/symtab.c:935
+#, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr ""
+
+#: src/symtab.c:950
+#, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr ""
+
+#: src/symtab.c:965
+#, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr ""
+
+#: src/symtab.c:980
+#, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr ""
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, fuzzy, c-format
+msgid "opening of tmpfile failed"
+msgstr "_open_osfhandle 失败"
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr ""
+
+#: djgpp/subpipe.c:241
+#, c-format
+msgid "subsidiary program '%s' not found"
+msgstr ""
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%2$s 的参数 %1$s 无效"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "有效参数为:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr ""
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr ""
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr ""
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr ""
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr ""
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "密度直方图\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "累计运行 = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "无法创建管道"
+
+#: lib/bitset_stats.c:261
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "无法创建管道"
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "无法打开文件“%s”"
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "致命错误"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "未知系统错误"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s:“--%s”选项不允许有参数\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s:“%c%s”选项不允许有参数\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s:“--%s”选项需要一个参数\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s:无法识别的选项“--%s”\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s:无法识别的选项“%c%s”\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s:无效选项 -- “%c”\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s:选项需要一个参数 -- “%c”\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s:“-W %s”选项不允许有参数\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s:“-W %s”选项需要一个参数\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "内存耗尽"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, c-format
+msgid "cannot create pipe"
+msgstr "无法创建管道"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s 子进程失败"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "“"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "”"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"执行时间(秒)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " 总计                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr ""
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle 失败"
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "无法恢复文件描述符 %d:dup2 失败"
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr "%s 子进程"
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s 子进程收到致命信号 %d"
+
+#~ msgid "state %d"
+#~ msgstr "状态 %d"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
+#~ msgstr "将未定义的 %%define 变量“%s” 传递给了 muscle_percent_define_get_loc"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_get_syncline"
+#~ msgstr ""
+#~ "将未定义的 %%define 变量“%s”传递给了 muscle_percent_define_get_syncline"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to muscle_percent_define_flag_if"
+#~ msgstr ""
+#~ "将未定义的 %%define 变量 “%s” 传递给了 muscle_percent_define_flag_if"
+
+#~ msgid ""
+#~ "undefined %%define variable `%s' passed to "
+#~ "muscle_percent_define_check_values"
+#~ msgstr ""
+#~ "将未定义的 %%define 变量 “%s” 传递给了 muscle_percent_define_check_values"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644
index 0000000..deb6b02
--- /dev/null
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..83fd214
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,1195 @@
+# Traditional Chinese Messages for bison.
+# Copyright (C) 2006, 07 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Wei-Lun Chao <chaoweilun@gmail.com>, 2006, 07.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.3a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2007-07-23 22:36+0800\n"
+"Last-Translator: Wei-Lun Chao <chaoweilun@gmail.com>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
+#: src/complain.c:198
+msgid "warning"
+msgstr "警告"
+
+#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#, fuzzy
+msgid "error"
+msgstr "輸入/輸出錯誤"
+
+#: src/complain.c:208 src/complain.c:215
+msgid "fatal error"
+msgstr "嚴重錯誤"
+
+#: src/conflicts.c:77
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as shift"
+msgstr "    在規則 %d 與記號 %s 之間的衝突以偏移來解決"
+
+#: src/conflicts.c:86
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgstr "    在規則 %d 與記號 %s 之間的衝突以縮減來解決"
+
+#: src/conflicts.c:94
+#, c-format
+msgid "    Conflict between rule %d and token %s resolved as an error"
+msgstr "    在規則 %d 與記號 %s 之間的衝突以視為錯誤來解決"
+
+#: src/conflicts.c:492
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "衝突:%d 項偏移/縮減,%d 項縮減/縮減\n"
+
+#: src/conflicts.c:495
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "衝突:%d 項偏移/縮減\n"
+
+#: src/conflicts.c:497
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "衝突:%d 項縮減/縮減\n"
+
+#: src/conflicts.c:515
+#, c-format
+msgid "State %d "
+msgstr "狀態 %d "
+
+#: src/conflicts.c:582
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr 只套用到 GLR 剖析器"
+
+#: src/conflicts.c:616
+#, c-format
+msgid "expected %d shift/reduce conflict"
+msgid_plural "expected %d shift/reduce conflicts"
+msgstr[0] "預期有 %d 項偏移/縮減衝突"
+
+#: src/conflicts.c:621
+#, c-format
+msgid "expected %d reduce/reduce conflict"
+msgid_plural "expected %d reduce/reduce conflicts"
+msgstr[0] "預期有 %d 項縮減/縮減衝突"
+
+#: src/files.c:114
+#, fuzzy, c-format
+msgid "%s: cannot open"
+msgstr "無法開啟檔案「%s」"
+
+#: src/files.c:130
+#, c-format
+msgid "input/output error"
+msgstr ""
+
+#: src/files.c:133
+#, c-format
+msgid "cannot close file"
+msgstr "無法關閉檔案"
+
+#: src/files.c:352
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr ""
+
+#: src/files.c:362
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "輸出至檔案 %s 時發生衝突"
+
+#: src/getargs.c:292
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "請嘗試執行「%s --help」來獲取更多資訊。\n"
+
+#: src/getargs.c:301
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "用法:%s [選項]... 檔案\n"
+
+#: src/getargs.c:302
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n"
+"canonical LR(1) support is experimental.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:309
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+
+#: src/getargs.c:312
+msgid "The same is true for optional arguments.\n"
+msgstr ""
+
+#: src/getargs.c:316
+#, fuzzy
+msgid ""
+"\n"
+"Operation modes:\n"
+"  -h, --help                 display this help and exit\n"
+"  -V, --version              output version information and exit\n"
+"      --print-localedir      output directory containing locale-dependent "
+"data\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"  -y, --yacc                 emulate POSIX Yacc\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"\n"
+msgstr ""
+"操作模式:\n"
+"  -h, --help                 顯示此說明並離開\n"
+"  -V, --version              輸出版本資訊並離開\n"
+"      --print-localedir      輸出包含語區相依資料的目錄\n"
+"  -y, --yacc                 模擬 POSIX yacc\n"
+
+#: src/getargs.c:329
+#, fuzzy, c-format
+msgid ""
+"Parser:\n"
+"  -L, --language=LANGUAGE          specify the output programming language\n"
+"  -S, --skeleton=FILE              specify the skeleton to use\n"
+"  -t, --debug                      instrument the parser for debugging\n"
+"      --locations                  enable location support\n"
+"  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n"
+"                                   deprecated by '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   don't generate '#line' directives\n"
+"  -k, --token-table                include a table of token names\n"
+msgstr ""
+"剖析器:\n"
+"  -S, --skeleton=FILE        指定所使用的架構\n"
+"  -t, --debug                提供用於偵錯的剖析器\n"
+"      --locations            啟用位置計算\n"
+"  -p, --name-prefix=PREFIX   前置 PREFIX 於外部符號\n"
+"  -l, --no-lines             不產生「#line」指令\n"
+"  -n, --no-parser            只產生表格\n"
+"  -k, --token-table          包含記號名稱表格\n"
+
+#: src/getargs.c:346
+#, fuzzy
+msgid ""
+"Output:\n"
+"      --defines[=FILE]       also produce a header file\n"
+"  -d                         likewise but cannot specify FILE (for POSIX "
+"Yacc)\n"
+"  -r, --report=THINGS        also produce details on the automaton\n"
+"      --report-file=FILE     write report to FILE\n"
+"  -v, --verbose              same as `--report=state'\n"
+"  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n"
+"  -o, --output=FILE          leave output to FILE\n"
+"  -g, --graph[=FILE]         also output a graph of the automaton\n"
+"  -x, --xml[=FILE]           also output an XML report of the automaton\n"
+"                             (the XML schema is experimental)\n"
+msgstr ""
+"輸出:\n"
+"  -d, --defines              同時產生標頭檔案\n"
+"  -r, --report=THINGS        同時在自動裝置上產生細節\n"
+"  -v, --verbose              如同「--report=state」\n"
+"  -b, --file-prefix=PREFIX   指定用於輸出檔案的 PREFIX\n"
+"  -o, --output=FILE          保留輸出到 FILE\n"
+"  -g, --graph                同時產生自動裝置 VCG 的描述\n"
+
+#: src/getargs.c:361
+msgid ""
+"Warning categories include:\n"
+"  `midrule-values'  unset or unused midrule values\n"
+"  `yacc'            incompatibilities with POSIX Yacc\n"
+"  `conflicts-sr'    S/R conflicts (enabled by default)\n"
+"  `conflicts-rr'    R/R conflicts (enabled by default)\n"
+"  `deprecated'      obsolete constructs\n"
+"  `other'           all other warnings (enabled by default)\n"
+"  `all'             all the warnings\n"
+"  `no-CATEGORY'     turn off warnings in CATEGORY\n"
+"  `none'            turn off all the warnings\n"
+"  `error'           treat warnings as errors\n"
+msgstr ""
+
+#: src/getargs.c:376
+msgid ""
+"THINGS is a list of comma separated words that can include:\n"
+"  `state'        describe the states\n"
+"  `itemset'      complete the core item sets with their closure\n"
+"  `lookahead'    explicitly associate lookahead tokens to items\n"
+"  `solved'       describe shift/reduce conflicts solving\n"
+"  `all'          include all the above information\n"
+"  `none'         disable the report\n"
+msgstr ""
+"THINGS 是以逗號所分隔的字詞清單,其中可以包含:\n"
+"  `state'        描述狀態\n"
+"  `itemset'      完成核心項目集合並附有它們的結束\n"
+"  `lookahead'    明確地將預估記號關聯到項目\n"
+"  `solved'       描述正在解決的偏移/縮減衝突\n"
+"  `all'          包含所有以上的資訊\n"
+"  `none'         停用報告\n"
+
+#: src/getargs.c:387
+msgid ""
+"FEATURE is a list of comma separated words that can include:\n"
+"  `caret'        show errors with carets\n"
+"  `all'          all of the above\n"
+"  `none'         disable all of the above\n"
+"  "
+msgstr ""
+
+#: src/getargs.c:395
+#, fuzzy, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "回報錯誤請寄 <"
+
+#: src/getargs.c:396
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr ""
+
+#: src/getargs.c:397
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+
+#. TRANSLATORS: Replace LANG_CODE in this URL with your language
+#. code <http://translationproject.org/team/LANG_CODE.html> to
+#. form one of the URLs at http://translationproject.org/team/.
+#. Otherwise, replace the entire URL with your translation team's
+#. email address.
+#: src/getargs.c:410
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+
+#: src/getargs.c:412
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+
+#: src/getargs.c:428
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:430
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "由 Robert Corbett 與 Richard Stallman 編寫。\n"
+
+#: src/getargs.c:434
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "版權所有 (C) %d 自由軟體基金會。\n"
+
+#: src/getargs.c:437
+msgid ""
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"這是自由軟體;請參考原始碼的版權聲明。本軟體不提供任何保證,甚至不會包括\n"
+"可售性或適用於任何特定目的的保證。\n"
+
+#: src/getargs.c:458
+#, fuzzy, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "多重 %s 宣告"
+
+#: src/getargs.c:476
+#, fuzzy, c-format
+msgid "%s: invalid language"
+msgstr "無效的字元:%s"
+
+#: src/getargs.c:479
+#, fuzzy
+msgid "multiple language declarations are invalid"
+msgstr "多重 %s 宣告"
+
+#: src/getargs.c:747
+#, fuzzy, c-format
+msgid "%s: missing operand"
+msgstr "「%s」之後缺少了運算元"
+
+#: src/getargs.c:749
+#, fuzzy, c-format
+msgid "extra operand %s"
+msgstr "多餘的運算元「%s」"
+
+#: src/gram.c:112
+msgid "empty"
+msgstr "空白"
+
+#: src/gram.c:201
+msgid "Grammar"
+msgstr "文法"
+
+#: src/graphviz.c:45
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+
+#: src/location.c:93 src/scan-gram.l:859
+#, c-format
+msgid "line number overflow"
+msgstr "列號溢位"
+
+#: src/location.c:95
+#, fuzzy, c-format
+msgid "column number overflow"
+msgstr "列號溢位"
+
+#: src/main.c:146
+#, fuzzy
+msgid "rule useless in parser due to conflicts"
+msgstr "由於發生衝突導致規則一直無法縮減"
+
+#: src/muscle-tab.c:450
+#, fuzzy, c-format
+msgid "%%define variable %s redefined"
+msgstr "符號 %s 被重新定義"
+
+#: src/muscle-tab.c:453
+#, fuzzy
+msgid "previous definition"
+msgstr "前次宣告"
+
+#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
+#: src/muscle-tab.c:624
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:550
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr ""
+
+#: src/muscle-tab.c:609
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr ""
+
+#: src/muscle-tab.c:613
+#, fuzzy, c-format
+msgid "accepted value: %s"
+msgstr "未使用的值:$%d"
+
+#: src/parse-gram.y:747
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "在參數宣告中缺少識別項"
+
+#: src/print.c:47
+#, c-format
+msgid " type %d is %s\n"
+msgstr "類型 %d 為 %s\n"
+
+#: src/print.c:164
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "偏移,並進入狀態 %d\n"
+
+#: src/print.c:166
+#, c-format
+msgid "go to state %d\n"
+msgstr "進入狀態 %d\n"
+
+#: src/print.c:203
+msgid "error (nonassociative)\n"
+msgstr "錯誤 (非相聯的)\n"
+
+#: src/print.c:226
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "使用規則 %d 以縮減 (%s)"
+
+#: src/print.c:228
+#, c-format
+msgid "accept"
+msgstr "接受"
+
+#: src/print.c:264 src/print.c:338
+msgid "$default"
+msgstr "$預設"
+
+#: src/print.c:373 src/print_graph.c:78
+#, fuzzy, c-format
+msgid "State %d"
+msgstr "狀態 %d "
+
+#: src/print.c:409
+msgid "Terminals, with rules where they appear"
+msgstr "終結語詞,附有它們出現處的規則"
+
+#: src/print.c:436
+msgid "Nonterminals, with rules where they appear"
+msgstr "非終結語詞,附有它們出現處的規則"
+
+#: src/print.c:465
+#, c-format
+msgid " on left:"
+msgstr "於左側:"
+
+#: src/print.c:482
+#, c-format
+msgid " on right:"
+msgstr "於右側:"
+
+#: src/print.c:510
+#, fuzzy
+msgid "Rules useless in parser due to conflicts"
+msgstr "由於發生衝突導致規則一直無法縮減"
+
+#: src/reader.c:62
+#, c-format
+msgid "multiple %s declarations"
+msgstr "多重 %s 宣告"
+
+#: src/reader.c:133
+#, fuzzy, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "結果類型與合併功能相抵觸「%s」:<%s> != <%s>"
+
+#: src/reader.c:139 src/symtab.c:156 src/symtab.c:166 src/symtab.c:938
+#: src/symtab.c:953 src/symtab.c:968 src/symtab.c:983
+msgid "previous declaration"
+msgstr "前次宣告"
+
+#: src/reader.c:205
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr ""
+
+#: src/reader.c:249
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "用於 %s 這項記號的規則"
+
+#: src/reader.c:304
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "類型與預設動作相抵觸:<%s> != <%s>"
+
+#: src/reader.c:310
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "空白規則用於賦予類型的非終結語詞,以及沒有動作"
+
+#: src/reader.c:328
+#, c-format
+msgid "unused value: $%d"
+msgstr "未使用的值:$%d"
+
+#: src/reader.c:330
+msgid "unset value: $$"
+msgstr "解除設定值:$$"
+
+#: src/reader.c:341
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr ""
+
+#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "每個規則只允許一個 %s"
+
+#: src/reader.c:441 src/reader.c:456
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s 只影響 GLR 剖析器"
+
+#: src/reader.c:443
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s 必須在正數之後"
+
+#: src/reader.c:554
+#, c-format
+msgid "rule is too long"
+msgstr "規則太長"
+
+#: src/reader.c:672
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "在輸入文法中沒有規則"
+
+#: src/reduce.c:241
+#, fuzzy
+msgid "rule useless in grammar"
+msgstr "在輸入文法中沒有規則"
+
+#: src/reduce.c:302
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr ""
+
+#: src/reduce.c:350
+#, fuzzy
+msgid "Nonterminals useless in grammar"
+msgstr "非終結語詞,附有它們出現處的規則"
+
+#: src/reduce.c:363
+#, fuzzy
+msgid "Terminals unused in grammar"
+msgstr "在輸入文法中沒有規則"
+
+#: src/reduce.c:372
+#, fuzzy
+msgid "Rules useless in grammar"
+msgstr "在輸入文法中沒有規則"
+
+#: src/reduce.c:385
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] ""
+
+#: src/reduce.c:390
+#, fuzzy, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "在輸入文法中沒有規則"
+
+#: src/reduce.c:419
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "啟始符號 %s 不衍生任何句子"
+
+#: src/scan-code.l:188
+#, c-format
+msgid "stray '%s'"
+msgstr ""
+
+#: src/scan-code.l:229
+msgid "a ';' might be needed at the end of action code"
+msgstr ""
+
+#: src/scan-code.l:232
+msgid "future versions of Bison will not add the ';'"
+msgstr ""
+
+#: src/scan-code.l:254
+#, c-format
+msgid "use of YYFAIL, which is deprecated and will be removed"
+msgstr ""
+
+#: src/scan-code.l:431 src/scan-code.l:434
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr ""
+
+#: src/scan-code.l:450
+#, c-format
+msgid "possibly meant: %c"
+msgstr ""
+
+#: src/scan-code.l:459
+#, c-format
+msgid ", hiding %c"
+msgstr ""
+
+#: src/scan-code.l:467
+#, c-format
+msgid " at %s"
+msgstr ""
+
+#: src/scan-code.l:472
+#, c-format
+msgid ", cannot be accessed from mid-rule action at $%d"
+msgstr ""
+
+#: src/scan-code.l:521 src/scan-gram.l:783
+#, c-format
+msgid "integer out of range: %s"
+msgstr "整數超過範圍:%s"
+
+#: src/scan-code.l:610
+#, fuzzy, c-format
+msgid "invalid reference: %s"
+msgstr "無效的指令:%s"
+
+#: src/scan-code.l:619
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+
+#: src/scan-code.l:626
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr ""
+
+#: src/scan-code.l:633
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr ""
+
+#: src/scan-code.l:648
+#, c-format
+msgid "misleading reference: %s"
+msgstr ""
+
+#: src/scan-code.l:663
+#, fuzzy, c-format
+msgid "ambiguous reference: %s"
+msgstr "%2$s 的引數 %1$s 不明確"
+
+#: src/scan-code.l:700
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr ""
+
+#: src/scan-code.l:759
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr ""
+
+#: src/scan-code.l:764
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr ""
+
+#: src/scan-code.l:786
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr ""
+
+#: src/scan-gram.l:149
+#, fuzzy, c-format
+msgid "stray ',' treated as white space"
+msgstr "零星的「,」會被視為空白"
+
+#: src/scan-gram.l:222
+#, c-format
+msgid "invalid directive: %s"
+msgstr "無效的指令:%s"
+
+#: src/scan-gram.l:250
+#, fuzzy, c-format
+msgid "invalid identifier: %s"
+msgstr "無效的指令:%s"
+
+#: src/scan-gram.l:295
+#, fuzzy
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "無效的字元:%s"
+
+#: src/scan-gram.l:354
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr ""
+
+#: src/scan-gram.l:376
+#, c-format
+msgid "an identifier expected"
+msgstr ""
+
+#: src/scan-gram.l:381
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "無效的字元:%s"
+
+#: src/scan-gram.l:481 src/scan-gram.l:502
+#, c-format
+msgid "empty character literal"
+msgstr ""
+
+#: src/scan-gram.l:486 src/scan-gram.l:507
+#, c-format
+msgid "extra characters in character literal"
+msgstr ""
+
+#: src/scan-gram.l:518
+#, c-format
+msgid "invalid null character"
+msgstr "無效的空字元"
+
+#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#, fuzzy, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "無效的空字元:%s"
+
+#: src/scan-gram.l:573
+#, fuzzy, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "無效的字元:%s"
+
+#: src/scan-gram.l:901
+#, fuzzy, c-format
+msgid "missing %s at end of file"
+msgstr "檔案末端缺少「%s」"
+
+#: src/scan-gram.l:912
+#, fuzzy, c-format
+msgid "missing %s at end of line"
+msgstr "列尾缺少「%s」"
+
+#: src/scan-skel.l:146
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:291
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/scan-skel.l:298
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr ""
+
+#: src/symlist.c:211
+#, c-format
+msgid "invalid $ value: $%d"
+msgstr "無效的 $ 值:$%d"
+
+#: src/symtab.c:71
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr ""
+
+#: src/symtab.c:91
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "在輸入文法中太多符號 (限制為 %d)"
+
+#: src/symtab.c:154
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "%s 重複宣告了 %s"
+
+#: src/symtab.c:164
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "%s 重複宣告了 <%s>"
+
+#: src/symtab.c:332
+#, c-format
+msgid "symbol %s redefined"
+msgstr "符號 %s 被重新定義"
+
+#: src/symtab.c:346
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "符號 %s 被重新宣告"
+
+#: src/symtab.c:367
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "重新定義 %s 的使用者記號數目"
+
+#: src/symtab.c:395
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr "符號 %s 已使用過,但是並未定義為記號也沒有規則"
+
+#: src/symtab.c:415
+#, fuzzy, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "符號「%s」被超過一次做為常值字串使用"
+
+#: src/symtab.c:418
+#, fuzzy, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "符號「%s」給予一個以上的原文字串"
+
+#: src/symtab.c:535
+#, fuzzy, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "%s 重複宣告了 %s"
+
+#: src/symtab.c:539
+#, fuzzy, c-format
+msgid "previous declaration for %s"
+msgstr "前次宣告"
+
+#: src/symtab.c:915
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "未定義起始符號 %s"
+
+#: src/symtab.c:919
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "起始符號 %s 是一項記號"
+
+#: src/symtab.c:935
+#, fuzzy, c-format
+msgid "redeclaration for default tagged %%destructor"
+msgstr "重複宣告了預設的 %%destructor"
+
+#: src/symtab.c:950
+#, fuzzy, c-format
+msgid "redeclaration for default tagless %%destructor"
+msgstr "重複宣告了預設的 %%destructor"
+
+#: src/symtab.c:965
+#, fuzzy, c-format
+msgid "redeclaration for default tagged %%printer"
+msgstr "重複宣告了預設的 %%printer"
+
+#: src/symtab.c:980
+#, fuzzy, c-format
+msgid "redeclaration for default tagless %%printer"
+msgstr "重複宣告了預設的 %%printer"
+
+#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
+#, c-format
+msgid "removing of '%s' failed"
+msgstr ""
+
+#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#, c-format
+msgid "creation of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:127
+#, c-format
+msgid "saving stdin failed"
+msgstr ""
+
+#: djgpp/subpipe.c:131
+#, c-format
+msgid "saving stdout failed"
+msgstr ""
+
+#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
+#, c-format
+msgid "opening of tmpfile failed"
+msgstr ""
+
+#: djgpp/subpipe.c:157
+#, c-format
+msgid "redirecting bison's stdout to the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:201
+#, c-format
+msgid "redirecting m4's stdin from the temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:212
+#, c-format
+msgid "opening of a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:218
+#, c-format
+msgid "redirecting m4's stdout to a temporary file failed"
+msgstr ""
+
+#: djgpp/subpipe.c:234
+#, fuzzy, c-format
+msgid "subsidiary program '%s' interrupted"
+msgstr "無法執行輔助程式「%s」"
+
+#: djgpp/subpipe.c:241
+#, fuzzy, c-format
+msgid "subsidiary program '%s' not found"
+msgstr "無法執行輔助程式「%s」"
+
+#: djgpp/subpipe.c:265
+#, c-format
+msgid "redirecting bison's stdin from the temporary file failed"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%2$s 的引數 %1$s 無效"
+
+#: lib/argmatch.c:134
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%2$s 的引數 %1$s 不明確"
+
+#: lib/argmatch.c:153
+msgid "Valid arguments are:"
+msgstr "有效的引數為:"
+
+#: lib/bitset_stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs,%u 已釋放 (%.2f%%)。\n"
+
+#: lib/bitset_stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets,%u 已快取 (%.2f%%)\n"
+
+#: lib/bitset_stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets,%u 已快取 (%.2f%%)\n"
+
+#: lib/bitset_stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests,%u 已快取 (%.2f%%)\n"
+
+#: lib/bitset_stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset_lists\n"
+
+#: lib/bitset_stats.c:192
+msgid "count log histogram\n"
+msgstr "計算日誌長條圖\n"
+
+#: lib/bitset_stats.c:195
+msgid "size log histogram\n"
+msgstr "調整日誌長條圖大小\n"
+
+#: lib/bitset_stats.c:198
+msgid "density histogram\n"
+msgstr "密度長條圖\n"
+
+#: lib/bitset_stats.c:212
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset 統計:\n"
+"\n"
+
+#: lib/bitset_stats.c:215
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "累積的執行 = %u\n"
+
+#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "無法讀取統計檔。"
+
+#: lib/bitset_stats.c:261
+#, fuzzy, c-format
+msgid "bad stats file size\n"
+msgstr "不當的統計檔大小。\n"
+
+#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "無法寫入統計檔。"
+
+#: lib/bitset_stats.c:292
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "寫入時無法開啟統計檔。"
+
+#: lib/closeout.c:112
+#, fuzzy
+msgid "write error"
+msgstr "嚴重錯誤"
+
+#: lib/error.c:188
+msgid "Unknown system error"
+msgstr "不明的系統錯誤"
+
+#: lib/getopt.c:547 lib/getopt.c:576
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous; possibilities:"
+msgstr "%s:選項「%s」不明確\n"
+
+#: lib/getopt.c:624 lib/getopt.c:628
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s:選項「--%s」不可配合引數使用\n"
+
+#: lib/getopt.c:637 lib/getopt.c:642
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s:選項「%c%s」不可配合引數使用\n"
+
+#: lib/getopt.c:685 lib/getopt.c:704
+#, fuzzy, c-format
+msgid "%s: option '--%s' requires an argument\n"
+msgstr "%s:選項「%s」需要引數\n"
+
+#: lib/getopt.c:742 lib/getopt.c:745
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s:無法識別的選項「--%s」\n"
+
+#: lib/getopt.c:753 lib/getopt.c:756
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s:無法識別的選項「%c%s」\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s:無效的選項 ─ %c\n"
+
+#: lib/getopt.c:861 lib/getopt.c:878 lib/getopt.c:1088 lib/getopt.c:1106
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s:選項需要引數 ─ %c\n"
+
+#: lib/getopt.c:934 lib/getopt.c:950
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s:選項「-W %s」不明確\n"
+
+#: lib/getopt.c:974 lib/getopt.c:992
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s:選項「-W %s」不可配合引數使用\n"
+
+#: lib/getopt.c:1013 lib/getopt.c:1031
+#, fuzzy, c-format
+msgid "%s: option '-W %s' requires an argument\n"
+msgstr "%s:選項「%s」需要引數\n"
+
+#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "記憶體耗盡"
+
+#: lib/spawn-pipe.c:140 lib/spawn-pipe.c:143 lib/spawn-pipe.c:264
+#: lib/spawn-pipe.c:267
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "無法關閉檔案"
+
+#: lib/spawn-pipe.c:234 lib/spawn-pipe.c:348 lib/wait-process.c:282
+#: lib/wait-process.c:356
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'".  For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK).  If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this".  You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:312
+msgid "`"
+msgstr "「"
+
+#: lib/quotearg.c:313
+msgid "'"
+msgstr "」"
+
+#: lib/timevar.c:475
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"執行時間 (秒)\n"
+
+#: lib/timevar.c:525
+msgid " TOTAL                 :"
+msgstr " 總計                 :"
+
+#: lib/timevar.c:561
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "%s 中的時間:%ld.%06ld (%ld%%)\n"
+
+#: lib/w32spawn.h:43
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:84
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:274 lib/wait-process.c:346
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "state %d"
+#~ msgstr "狀態 %d"
+
+#~ msgid "GNU bison generates LALR(1) and GLR parsers.\n"
+#~ msgstr "GNU bison 產生 LALR(1) 與 GLR 剖析器。\n"
+
+#~ msgid ""
+#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
+#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
+#~ msgstr ""
+#~ "如果某個長選項必須使用引數,在對等的短選項中這些引數也是必須的。\n"
+#~ "選擇性的引數也有類似的規定。\n"
+
+#~ msgid "Rules never reduced"
+#~ msgstr "永不縮減的規則"
+
+#~ msgid "useless rule"
+#~ msgstr "沒用到的規則"
+
+#~ msgid "useless nonterminal: %s"
+#~ msgstr "沒用到的非終結符號:%s"
+
+#~ msgid "Useless nonterminals"
+#~ msgstr "沒用到的非終結符號"
+
+#~ msgid "Terminals which are not used"
+#~ msgstr "沒用到的終結符號"
+
+#~ msgid "Useless rules"
+#~ msgstr "沒用到的規則"
+
+#~ msgid "%d rule never reduced\n"
+#~ msgid_plural "%d rules never reduced\n"
+#~ msgstr[0] "%d 條規則永不縮減\n"
+
+#~ msgid "%d useless nonterminal"
+#~ msgid_plural "%d useless nonterminals"
+#~ msgstr[0] "%d 項沒用到的非終結符號"
+
+#~ msgid " and "
+#~ msgstr " 和 "
+
+#~ msgid "%d useless rule"
+#~ msgid_plural "%d useless rules"
+#~ msgstr[0] "%d 條沒用到的規則"
+
+#~ msgid "invalid escape sequence: %s"
+#~ msgstr "無效的跳脫序列:%s"
+
+#~ msgid "unrecognized escape sequence: %s"
+#~ msgstr "無法辨識的跳脫序列:%s"
+
+#~ msgid "tokens %s and %s both assigned number %d"
+#~ msgstr "記號 %s 與 %s 兩者都指派了數字 %d"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s:不合法的選項 ─ %c\n"
diff --git a/runtime-po/LINGUAS b/runtime-po/LINGUAS
new file mode 100644
index 0000000..30d62d8
--- /dev/null
+++ b/runtime-po/LINGUAS
@@ -0,0 +1,37 @@
+ast
+da
+de
+el
+eo
+es
+et
+fi
+fr
+ga
+gl
+hr
+hu
+id
+it
+ja
+ky
+lt
+lv
+ms
+nb
+nl
+pl
+pt
+pt_BR
+ro
+ru
+sl
+sq
+sr
+sv
+th
+tr
+uk
+vi
+zh_CN
+zh_TW
diff --git a/runtime-po/Makefile.in.in b/runtime-po/Makefile.in.in
new file mode 100644
index 0000000..2a71983
--- /dev/null
+++ b/runtime-po/Makefile.in.in
@@ -0,0 +1,446 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.18
+GETTEXT_MACRO_VERSION = 0.18
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+	@echo "$(MSGFMT) -c -o $@ $<"; \
+	$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+	@lang=`echo $* | sed -e 's,.*/,,'`; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+	sed -e '/^#/d' $< > t-$@
+	mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+	test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+	  || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+	       exit 1; \
+	     }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+	@$(CHECK_MACRO_VERSION)
+	test ! -f $(srcdir)/$(DOMAIN).pot || \
+	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+	@test ! -f $(srcdir)/$(DOMAIN).pot || { \
+	  echo "touch stamp-po" && \
+	  echo timestamp > stamp-poT && \
+	  mv stamp-poT stamp-po; \
+	}
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+	if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
+	  package_gnu='GNU '; \
+	else \
+	  package_gnu=''; \
+	fi; \
+	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+	else \
+	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+	fi; \
+	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	  *) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --package-name="$${package_gnu}@PACKAGE@" \
+	      --package-version='@VERSION@' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	esac
+	test ! -f $(DOMAIN).po || { \
+	  if test -f $(srcdir)/$(DOMAIN).pot; then \
+	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+	    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+	    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+	    else \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+	      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	    fi; \
+	  else \
+	    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	  fi; \
+	}
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+	$(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+	if test -f "$(srcdir)/$${lang}.po"; then \
+	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+	  cd $(srcdir) \
+	    && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	           '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+	           *) \
+	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+	         esac; \
+	       }; \
+	else \
+	  $(MAKE) $${lang}.po-create; \
+	fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    $(INSTALL_DATA) $(srcdir)/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	  for file in Makevars; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+install-data-no: all
+install-data-yes: all
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+	    fi; \
+	  done; \
+	done
+
+install-strip: install
+
+install-dvi install-html install-info install-pdf install-ps:
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+installdirs-data-no:
+installdirs-data-yes:
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	    fi; \
+	  done; \
+	done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+uninstall-data-no:
+uninstall-data-yes:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+	    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	  done; \
+	done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+	rm -f remove-potcdate.sed
+	rm -f stamp-poT
+	rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+	rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+	$(MAKE) update-po
+	@$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  dists="$$dists Makevars.template"; \
+	fi; \
+	if test -f $(srcdir)/$(DOMAIN).pot; then \
+	  dists="$$dists $(DOMAIN).pot stamp-po"; \
+	fi; \
+	if test -f $(srcdir)/ChangeLog; then \
+	  dists="$$dists ChangeLog"; \
+	fi; \
+	for i in 0 1 2 3 4 5 6 7 8 9; do \
+	  if test -f $(srcdir)/ChangeLog.$$i; then \
+	    dists="$$dists ChangeLog.$$i"; \
+	  fi; \
+	done; \
+	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+	for file in $$dists; do \
+	  if test -f $$file; then \
+	    cp -p $$file $(distdir) || exit 1; \
+	  else \
+	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+	  fi; \
+	done
+
+update-po: Makefile
+	$(MAKE) $(DOMAIN).pot-update
+	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+	$(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+	exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+	if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+	cd $(srcdir); \
+	if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	       '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+	         $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+	       *) \
+	         $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+	     esac; \
+	   }; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "msgmerge for $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+	@:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+	cd $(top_builddir) \
+	  && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/runtime-po/Makevars b/runtime-po/Makevars
new file mode 100644
index 0000000..c53d357
--- /dev/null
+++ b/runtime-po/Makevars
@@ -0,0 +1,55 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = bison-runtime
+
+# These two variables depend on the location of this directory.
+subdir = runtime-po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ \
+\
+--flag=_:1:pass-c-format\
+--flag=N_:1:pass-c-format\
+--flag=error:3:c-format --flag=error_at_line:5:c-format\
+\
+--from-code=UTF-8\
+--flag=asprintf:2:c-format\
+--flag=complain:1:c-format --flag=complain_at:2:c-format\
+--flag=fatal:1:c-format --flag=fatal_at:2:c-format\
+--flag=warn:1:c-format  --flag=warn_at:2:c-format\
+--flag=unexpected_end:2:c-format\
+\
+--keyword=YY_ \
+$${end_of_xgettext_options+}
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = bug-bison@gnu.org
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/runtime-po/POTFILES.in b/runtime-po/POTFILES.in
new file mode 100644
index 0000000..7e73063
--- /dev/null
+++ b/runtime-po/POTFILES.in
@@ -0,0 +1,3 @@
+data/glr.c
+data/lalr1.cc
+data/yacc.c
diff --git a/runtime-po/Rules-quot b/runtime-po/Rules-quot
new file mode 100644
index 0000000..af52487
--- /dev/null
+++ b/runtime-po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+	$(MAKE) en@quot.po-update
+en@boldquot.po-create:
+	$(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+	@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+	if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	ll=`echo $$lang | sed -e 's/@.*//'`; \
+	LC_ALL=C; export LC_ALL; \
+	cd $(srcdir); \
+	if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "creation of $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+en@quot.insert-header: insert-header.sin
+	sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+	sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+	rm -f *.insert-header
diff --git a/runtime-po/ast.gmo b/runtime-po/ast.gmo
new file mode 100644
index 0000000..a4a8781
--- /dev/null
+++ b/runtime-po/ast.gmo
Binary files differ
diff --git a/runtime-po/ast.po b/runtime-po/ast.po
new file mode 100644
index 0000000..19ede81
--- /dev/null
+++ b/runtime-po/ast.po
@@ -0,0 +1,62 @@
+# Mensajes en español para GNU Bison.
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Marquinos <maacub@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4.1a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-02-03 17:17+0100\n"
+"Last-Translator: Marquinos <maacub@gmail.com>\n"
+"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n"
+"Language: ast\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "fallu de sistasis: nun puede facese copia de seguridá"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sistasis ye ambigüa"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "fallu de sistasis"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "fallu de sistasis, %s nun esperáu"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "fallu de sistasis, %s nun esperáu, esperáu %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "fallu de sistasis, %s nun esperáu, esperáu %s o %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "fallu de sistasis, %s nun esperáu, esperáu %s o %s o %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "fallu de sistasis, %s nun esperáu, esperáu %s o %s o %s o %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memoria escosada"
diff --git a/runtime-po/bison-runtime.pot b/runtime-po/bison-runtime.pot
new file mode 100644
index 0000000..99536ac
--- /dev/null
+++ b/runtime-po/bison-runtime.pot
@@ -0,0 +1,62 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 2.7\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr ""
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr ""
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr ""
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr ""
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr ""
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr ""
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr ""
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr ""
diff --git a/runtime-po/boldquot.sed b/runtime-po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/runtime-po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“/g
+s/”/”/g
+s/‘/‘/g
+s/’/’/g
diff --git a/runtime-po/da.gmo b/runtime-po/da.gmo
new file mode 100644
index 0000000..30ebc8a
--- /dev/null
+++ b/runtime-po/da.gmo
Binary files differ
diff --git a/runtime-po/da.po b/runtime-po/da.po
new file mode 100644
index 0000000..4aceebc
--- /dev/null
+++ b/runtime-po/da.po
@@ -0,0 +1,65 @@
+# Danish messages for bison.
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Keld Simonsen <keld@dkuug.dk>, 2002.
+# Byrial Ole Jensen <byrial@image.dk>, 2002-2004.
+# Joe Hansen <joedalton2@yahoo.dk>, 2008.
+# Keld Simonsen <keld@dkuug.dk>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime-2.3b\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2008-08-25 00:00+0000\n"
+"Last-Translator: Keld Simonsen <keld@dkuug.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "syntaksfejl: kan ikke lave sikkerhedskopi"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "syntaks er tvetydig"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "syntaksfejl"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "syntaksfejl, uventet %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "syntaksfejl, uventet %s, forventede %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "syntaksfejl, uventet %s, forventede %s eller %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "syntaksfejl, uventet %s, forventede %s eller %s eller %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "syntaksfejl, uventet %s, forventede %s eller %s eller %s eller %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "hukommelsen opbrugt"
diff --git a/runtime-po/de.gmo b/runtime-po/de.gmo
new file mode 100644
index 0000000..680c88b
--- /dev/null
+++ b/runtime-po/de.gmo
Binary files differ
diff --git a/runtime-po/de.po b/runtime-po/de.po
new file mode 100644
index 0000000..97a896a
--- /dev/null
+++ b/runtime-po/de.po
@@ -0,0 +1,63 @@
+# German translation for messages of GNU bison (runtime module).
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
+# Michael Piefel <piefel@informatik.hu-berlin.de>, 2002, 2003, 2004, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.3a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2006-12-12 09:38+0100\n"
+"Last-Translator: Michael Piefel <piefel@informatik.hu-berlin.de>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "Syntaxfehler: Kann nicht zurück gehen"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "Syntax ist mehrdeutig"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "Syntaxfehler"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "Syntaxfehler, unerwartetes %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "Syntaxfehler, unerwartetes %s, hatte %s erwartet"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "Syntaxfehler, unerwartetes %s, hatte %s oder %s erwartet"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "Syntaxfehler, unerwartetes %s, hatte %s oder %s oder %s erwartet"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"Syntaxfehler, unerwartetes %s, hatte %s oder %s oder %s oder %s erwartet"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "Speicher ausgeschöpft"
diff --git a/runtime-po/el.gmo b/runtime-po/el.gmo
new file mode 100644
index 0000000..09c3e95
--- /dev/null
+++ b/runtime-po/el.gmo
Binary files differ
diff --git a/runtime-po/el.po b/runtime-po/el.po
new file mode 100644
index 0000000..bae711b
--- /dev/null
+++ b/runtime-po/el.po
@@ -0,0 +1,62 @@
+# translation of bison-runtime.2.3b.po to Greek
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Lefteris Dimitroulakis <edimitro@tee.gr>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime-2.3b\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2008-06-21 19:17+0300\n"
+"Last-Translator: Lefteris Dimitroulakis <edimitro@tee.gr>\n"
+"Language-Team: Greek <team@lists.gnome.gr>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "συντακτικό σφάλμα: δεν μπορώ να κάνω πίσω"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "ασαφής σύνταξη"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "συντακτικό σφάλμα"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "συντακτικό σφάλμα, αναπάντεχο %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "συντακτικό σφάλμα, αναπάντεχο %s, αναμενόμενο %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "συντακτικό σφάλμα, αναπάντεχο %s, αναμενόμενο %s ή %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "συντακτικό σφάλμα, αναπάντεχο %s, αναμενόμενο %s ή %s ή %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "συντακτικό σφάλμα, αναπάντεχο %s, αναμενόμενο %s ή %s ή %s ή %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "η μνήμη εξαντλήθηκε"
diff --git a/runtime-po/en@boldquot.header b/runtime-po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/runtime-po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/runtime-po/en@quot.header b/runtime-po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/runtime-po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/runtime-po/eo.gmo b/runtime-po/eo.gmo
new file mode 100644
index 0000000..3c3573d
--- /dev/null
+++ b/runtime-po/eo.gmo
Binary files differ
diff --git a/runtime-po/eo.po b/runtime-po/eo.po
new file mode 100644
index 0000000..e166a93
--- /dev/null
+++ b/runtime-po/eo.po
@@ -0,0 +1,61 @@
+# Esperanto translation
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Felipe Castro <fefcas@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4.3\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-11-21 14:43-0300\n"
+"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "sintaks-eraro: ni ne povas sekurkopii"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sintakso estas plursenca"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "sintaks-eraro"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "sintaks-eraro, neatendita %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "sintaks-eraro, neatendita %s, ni atendis %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "sintaks-eraro, neatendita %s, ni atendis %s aŭ %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "sintaks-eraro, neatendita %s, ni atendis %s aŭ %s aŭ %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "sintaks-eraro, neatendita %s, ni atendis %s aŭ %s aŭ %s aŭ %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memoro eluzita"
diff --git a/runtime-po/es.gmo b/runtime-po/es.gmo
new file mode 100644
index 0000000..2591452
--- /dev/null
+++ b/runtime-po/es.gmo
Binary files differ
diff --git a/runtime-po/es.po b/runtime-po/es.po
new file mode 100644
index 0000000..b42be5e
--- /dev/null
+++ b/runtime-po/es.po
@@ -0,0 +1,85 @@
+# Mensajes en español para GNU Bison.
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>, 1998.
+#
+# Corregido por:
+#
+# cll - Carlos Linares López        clinares@acm.org
+#                                   clinares@delicias.dia.fi.upm.es
+#
+# Notas:
+#
+# 1. Nicolás, en algunas ocasiones notarás que algunos `msgstr' no están
+# indentados como los `msgid'. No te preocupes, eso es porque yo utilizo
+# el `po-mode' de Emacs, ... Él es el responsable de esas indentaciones
+# del `msgstr' :)
+#
+# 2. Todos los comentarios que contengan "Duda:" debieran revisarse.
+#
+# --------------------------------------------------------------------
+# En mi opinión has hecho un excelente trabajo y te animo a que sigas
+# manteniendo esta traducción y a que lo intentes con otras.
+#
+# (¡te lo dice el tío que ha traducido el paquete más grande: 1406
+# mensajes en el clisp!)
+#
+# 						      Carlos Linares
+# --------------------------------------------------------------------
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison 1.875\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2003-01-02 12:47+0100\n"
+"Last-Translator: Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr ""
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr ""
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr ""
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr ""
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr ""
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr ""
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr ""
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memoria agotada"
diff --git a/runtime-po/et.gmo b/runtime-po/et.gmo
new file mode 100644
index 0000000..24f2bcd
--- /dev/null
+++ b/runtime-po/et.gmo
Binary files differ
diff --git a/runtime-po/et.po b/runtime-po/et.po
new file mode 100644
index 0000000..ccf01c8
--- /dev/null
+++ b/runtime-po/et.po
@@ -0,0 +1,61 @@
+# This file is distributed under the same license as the bison package.
+# Estonian translations for bison.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Toomas Soome <Toomas.Soome@microlink.ee>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.5-rc1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2011-05-03 22:19+0300\n"
+"Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
+"Language-Team: Estonian <linux-ee@lists.eenet.ee>\n"
+"Language: et\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "süntaksi viga: ei saa toetada"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "süntaks on segane"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "süntaksi viga"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "süntaksi viga, ootamatu %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "süntaksi viga, ootamatu %s, ootasin %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "süntaksi viga, ootamatu %s, ootasin %s või %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "süntaksi viga, ootamatu %s, ootasin %s või %s või %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "süntaksi viga, ootamatu %s, ootasin %s või %s või %s või %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "mälu on otsas"
diff --git a/runtime-po/fi.gmo b/runtime-po/fi.gmo
new file mode 100644
index 0000000..b35e92a
--- /dev/null
+++ b/runtime-po/fi.gmo
Binary files differ
diff --git a/runtime-po/fi.po b/runtime-po/fi.po
new file mode 100644
index 0000000..15bf1a1
--- /dev/null
+++ b/runtime-po/fi.po
@@ -0,0 +1,64 @@
+# Finnish messages for bison-runtime.
+# Copyright © 2007, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Jorma Karvonen <karvjorm@users.sf.net>, 2007.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-09 17:25+0200\n"
+"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "syntaksivirhe: ei voida tehdä varmuuskopiota"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "syntaksi on moniselitteinen"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "syntaksivirhe"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "syntaksivirhe, odottamaton %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "syntaksivirhe, odottamaton %s, odotetaan %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "syntaksivirhe, odottamaton %s, odotetaan %s tai %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "syntaksivirhe, odottamaton %s, odotetaan %s tai %s tai %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "syntaksivirhe, odottamaton %s, odotetaan %s tai %s tai %s tai %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "muisti loppui"
diff --git a/runtime-po/fr.gmo b/runtime-po/fr.gmo
new file mode 100644
index 0000000..d8d9057
--- /dev/null
+++ b/runtime-po/fr.gmo
Binary files differ
diff --git a/runtime-po/fr.po b/runtime-po/fr.po
new file mode 100644
index 0000000..a67f089
--- /dev/null
+++ b/runtime-po/fr.po
@@ -0,0 +1,62 @@
+# Messages français pour Bison.
+# Copyright © 2004 Free Software Foundation, Inc.
+# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996
+# Dominique Boucher a été le traducteur de 1996 à 2000
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison-runtime 2.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-09-21 08:00-0500\n"
+"Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "erreur de syntaxe: ne peut reculer"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "syntaxe ambiguë"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "erreur de syntaxe"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "erreur de syntaxe, %s inattendu"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "erreur de syntaxe, %s inattendu, attendait %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "erreur de syntaxe, %s inattendu, attendait %s ou %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "erreur de syntaxe, %s inattendu, attendait %s ou %s ou %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "erreur de syntaxe, %s inattendu, attendait %s ou %s ou %s ou %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "mémoire épuisée"
diff --git a/runtime-po/ga.gmo b/runtime-po/ga.gmo
new file mode 100644
index 0000000..82b63e0
--- /dev/null
+++ b/runtime-po/ga.gmo
Binary files differ
diff --git a/runtime-po/ga.po b/runtime-po/ga.po
new file mode 100644
index 0000000..351d0fc
--- /dev/null
+++ b/runtime-po/ga.po
@@ -0,0 +1,62 @@
+# Irish translations for bison.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Kevin Patrick Scannell <scannell@SLU.EDU>, 2004, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-09-18 23:14-0500\n"
+"Last-Translator: Kevin Patrick Scannell <scannell@SLU.EDU>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "earráid chomhréire: ní féidir cúlú"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "comhréir dhébhríoch"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "earráid chomhréire"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "earráid chomhréire, %s gan choinne"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "earráid chomhréire, %s gan choinne, bhíothas ag súil le %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "earráid chomhréire, %s gan choinne, bhíothas ag súil le %s nó %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "earráid chomhréire, %s gan choinne, bhíothas ag súil le %s nó %s nó %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"earráid chomhréire, %s gan choinne, bhíothas ag súil le %s nó %s nó %s nó %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "cuimhne ídithe"
diff --git a/runtime-po/gl.gmo b/runtime-po/gl.gmo
new file mode 100644
index 0000000..b4e05a5
--- /dev/null
+++ b/runtime-po/gl.gmo
Binary files differ
diff --git a/runtime-po/gl.po b/runtime-po/gl.po
new file mode 100644
index 0000000..8dbbcca
--- /dev/null
+++ b/runtime-po/gl.po
@@ -0,0 +1,66 @@
+# Galician translation for bison-runtime package.
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Leandro Regueiro <leandro.regueiro@gmail.com>, 2010.
+#
+# Proxecto Trasno - Adaptación do software libre á lingua galega:  Se desexas
+# colaborar connosco, podes atopar máis información en <http://trasno.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4.3\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-11-30 16:43+0100\n"
+"Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
+"Language-Team: Galician <proxecto@trasno.net>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "erro de sintaxe: non foi posible realizar unha copia de seguridade"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "a sintaxe é ambigua"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "erro de sintaxe"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "erro de sintaxe, non se agardaba %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "erro de sintaxe, non se agardaba %s, agardábase %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "erro de sintaxe, non se agardaba %s, agardábase %s ou %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "erro de sintaxe, non se agardaba %s, agardábase %s ou %s ou %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "erro de sintaxe, non se agardaba %s, agardábase %s ou %s ou %s ou %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memoria esgotada"
diff --git a/runtime-po/hr.gmo b/runtime-po/hr.gmo
new file mode 100644
index 0000000..dab7710
--- /dev/null
+++ b/runtime-po/hr.gmo
Binary files differ
diff --git a/runtime-po/hr.po b/runtime-po/hr.po
new file mode 100644
index 0000000..7de7430
--- /dev/null
+++ b/runtime-po/hr.po
@@ -0,0 +1,64 @@
+# Translation of bison-runtime to Croatian.
+# Copyright © 2002, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Denis Lackovic <delacko@fly.srk.fer.hr>, 2002.
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.6.5\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-11-09 17:02+0100\n"
+"Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "sintaksna greška: ne mogu napraviti sigurnosnu kopiju"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sintaksa je višeznačna"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "sintaksna greška"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "sintaksna greška, neočekivani %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "sintaksna greška, neočekivani %s, očekujem %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "sintaksna greška, neočekivani %s, očekujem %s ili %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "sintaksna greška, neočekivani %s, očekujem %s, %s ili %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "sintaksna greška, neočekivani %s, očekujem %s, %s, %s ili %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memorija iscrpljena"
diff --git a/runtime-po/hu.gmo b/runtime-po/hu.gmo
new file mode 100644
index 0000000..18b6438
--- /dev/null
+++ b/runtime-po/hu.gmo
Binary files differ
diff --git a/runtime-po/hu.po b/runtime-po/hu.po
new file mode 100644
index 0000000..af383eb
--- /dev/null
+++ b/runtime-po/hu.po
@@ -0,0 +1,62 @@
+# Translation of bison-runtime
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Kéménczy Kálmán <kkemenczy@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4.3\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-08-30 05:23+0200\n"
+"Last-Translator: Kéménczy Kálmán <kkemenczy@gmail.com>\n"
+"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "szintaktikai hiba: nem menthető"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "kétértelmű szintaxis"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "szintaktikai hiba"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "szintaktikai hiba, nem várt %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "szintaktikai hiba, nem várt %s, várt: %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "szintaktikai hiba, nem várt %s, várt: %s, vagy %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "szintaktikai hiba, nem várt %s, várt: %s, vagy %s, vagy %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "szintaktikai hiba, nem várt %s, várt: %s, vagy %s, vagy %s, vagy %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "a memória kiürült"
diff --git a/runtime-po/id.gmo b/runtime-po/id.gmo
new file mode 100644
index 0000000..2307386
--- /dev/null
+++ b/runtime-po/id.gmo
Binary files differ
diff --git a/runtime-po/id.po b/runtime-po/id.po
new file mode 100644
index 0000000..818fd79
--- /dev/null
+++ b/runtime-po/id.po
@@ -0,0 +1,67 @@
+# translation of bison-runtime-2.0b.id.po to Indonesia
+# bison-runtime-2.0b (Indonesian)
+# Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison 1.50 package.
+# Tedi Heriyanto <tedi_heriyanto@yahoo.com>, 2002, 2003, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.0b.id\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-09-14 20:39+0700\n"
+"Last-Translator: Tedi Heriyanto <tedi_heriyanto@yahoo.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.10\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "kesalahan sintaks: tidak dapat membackup"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sintaks rancu"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "kesalahan sintaks"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "kesalahan sintaks, %s tidak diharapkan"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "kesalahan sintaks, %s tidak diharapkan, mengharapkan %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "kesalahan sintaks, %s tidak diharapkan, mengharapkan %s atau %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr ""
+"kesalahan sintaks, %s tidak diharapkan, mengharapkan %s atau %s atau %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"kesalahan sintaks, %s tidak diharapkan, mengharapkan %s atau %s atau %s atau "
+"%s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memori habis"
diff --git a/runtime-po/insert-header.sin b/runtime-po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/runtime-po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/runtime-po/it.gmo b/runtime-po/it.gmo
new file mode 100644
index 0000000..505879a
--- /dev/null
+++ b/runtime-po/it.gmo
Binary files differ
diff --git a/runtime-po/it.po b/runtime-po/it.po
new file mode 100644
index 0000000..cc22968
--- /dev/null
+++ b/runtime-po/it.po
@@ -0,0 +1,65 @@
+# ITALIAN TRANSLATION OF BISON-RUNTIME
+# Copyright (C) 2002, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Paolo Bonzini <bonzini@gnu.org>, 2002.
+# Vincenzo Campanella <vinz65@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4.3\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-10-25 07:35+0100\n"
+"Last-Translator: Vincenzo Campanella <vinz65@gmail.com>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"First-Translator: Paolo Bonzini <bonzini@gnu.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "errore di sintassi: impossibile tornare indietro"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "la sintassi è ambigua"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "errore di sintassi"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "errore di sintassi, %s non atteso"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "errore di sintassi, ricevuto %s anziché %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "errore di sintassi, ricevuto %s anziché %s o %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "errore di sintassi, ricevuto %s anziché %s, %s o %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "errore di sintassi, ricevuto %s anziché %s, %s, %s o %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memoria esaurita"
diff --git a/runtime-po/ja.gmo b/runtime-po/ja.gmo
new file mode 100644
index 0000000..d75c106
--- /dev/null
+++ b/runtime-po/ja.gmo
Binary files differ
diff --git a/runtime-po/ja.po b/runtime-po/ja.po
new file mode 100644
index 0000000..6e2a199
--- /dev/null
+++ b/runtime-po/ja.po
@@ -0,0 +1,63 @@
+# Japanese message for GNU bison 2.4 (runtime)
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 2001.
+# Yasuaki Taniguchi <yasuakit@gmail.com>, 2010
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-01-10 14:26+0900\n"
+"Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "構文エラー: バックアップすることができません"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "構文が曖昧です"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "構文エラー"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "構文エラー、予期しない %s です"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "構文エラー、予期しない %s です。予期されるのは %s です"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "構文エラー、予期しない %s です。予期されるのは %s または %s です"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "構文エラー、 予期しない %s です。予期されるのは %s、%s または %s です"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"構文エラー、予期しない %s です。予期されるのは %s、%s、%s、または %s です。"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "メモリを使い果たしました"
diff --git a/runtime-po/ky.gmo b/runtime-po/ky.gmo
new file mode 100644
index 0000000..3460529
--- /dev/null
+++ b/runtime-po/ky.gmo
Binary files differ
diff --git a/runtime-po/ky.po b/runtime-po/ky.po
new file mode 100644
index 0000000..6d6a65a
--- /dev/null
+++ b/runtime-po/ky.po
@@ -0,0 +1,63 @@
+# Translation of 'bison-runtime' messages to Kirghiz.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Ilyas Bakirov <just_ilyas@yahoo.com>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.3a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2008-01-29 11:47+0600\n"
+"Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
+"Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n"
+"Language: ky\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Kyrgyz\n"
+"X-Poedit-Country: KYRGYZSTAN\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "синтаксис катасы: көчурмө алынган жок"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "синтаксис анык эмес"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "синтаксис катасы"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "синтаксис катасы, күтүлбөгөн %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "синтаксис катасы, күтүлбөгөн %s, %s күтүлүүдө"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "синтаксис катасы, күтүлбөгөн %s, %s же %s күтүлүүдө"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "синтаксис катасы, күтүлбөгөн %s, %s же %s же %s күтүлүүдө"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "синтаксис катасы, күтүлбөгөн %s, %s же %s же %s же %s күтүлүүдө"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "эс колдонулуп бүттүү"
diff --git a/runtime-po/lt.gmo b/runtime-po/lt.gmo
new file mode 100644
index 0000000..e41eddc
--- /dev/null
+++ b/runtime-po/lt.gmo
Binary files differ
diff --git a/runtime-po/lt.po b/runtime-po/lt.po
new file mode 100644
index 0000000..a75532c
--- /dev/null
+++ b/runtime-po/lt.po
@@ -0,0 +1,64 @@
+# translation of bison-runtime-2.3a to Lithuanian
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Gintautas Miliauskas <gintas@akl.lt>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime-2.3a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2008-05-14 02:10+0300\n"
+"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
+"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
+"%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "sintaksės klaida: negalima grįžti"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sintaksė dviprasmė"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "sintaksės klaida"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "sintaksės klaida, netikėtas %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "sintaksės klaida, netikėtas %s, tikėtasi %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "sintaksės klaida, netikėtas %s, tikėtasi %s arba %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "sintaksės klaida, netikėtas %s, tikėtasi %s arba %s arba %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "sintaksės klaida, netikėtas %s, tikėtasi %s arba %s arba %s arba %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "baigėsi atmintis"
diff --git a/runtime-po/lv.gmo b/runtime-po/lv.gmo
new file mode 100644
index 0000000..5064b98
--- /dev/null
+++ b/runtime-po/lv.gmo
Binary files differ
diff --git a/runtime-po/lv.po b/runtime-po/lv.po
new file mode 100644
index 0000000..7315658
--- /dev/null
+++ b/runtime-po/lv.po
@@ -0,0 +1,65 @@
+# Latvian translation of bison-runtime
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Arvis Lācis <arvis.lacis@inbox.lv>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime-2.4\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2009-07-28 21:28+0200\n"
+"Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n"
+"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Latvian\n"
+"X-Poedit-Country: LATVIA\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "sintakses kļūda: nevar dublēt datus"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sintakse ir divdomīga"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "sintakses kļūda"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "sintakses kļūda, negaidīts %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "sintakses kļūda, negaidīts %s, tika gaidīts %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "sintakses kļūda, negaidīts %s, tika gaidīts %s vai %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "sintakses kļūda, negaidīts %s, tika gaidīts %s vai %s, vai %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "sintakses kļūda, negaidīts %s, tika gaidīts %s vai %s, vai %s, vai %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "izsmelta atmiņa"
diff --git a/runtime-po/ms.gmo b/runtime-po/ms.gmo
new file mode 100644
index 0000000..708d245
--- /dev/null
+++ b/runtime-po/ms.gmo
Binary files differ
diff --git a/runtime-po/ms.po b/runtime-po/ms.po
new file mode 100644
index 0000000..61dd323
--- /dev/null
+++ b/runtime-po/ms.po
@@ -0,0 +1,64 @@
+# Bison-runtime Bahasa Melayu (Malay) (ms).
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This file is distributed under the same license as the Bison-runtime package.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-10-10 10:50+0800\n"
+"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>\n"
+"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 0.9.5\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "ralat sintaks: tidak dapat mengundur"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sintaks adalah kabur"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "ralat sintaks"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "ralat sintaks, tidak menjangka %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "ralat sintaks, tidak menjangka %s, menjangka %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "ralat sintaks, tidak menjangka %s, menjangka %s atau %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "ralat sintaks, tidak menjangka %s, menjangka %s atau %s atau %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"ralat sintaks, tidak menjangka %s, menjangka %s atau %s atau %s atau %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "kehabisan memori"
diff --git a/runtime-po/nb.gmo b/runtime-po/nb.gmo
new file mode 100644
index 0000000..7bf83bd
--- /dev/null
+++ b/runtime-po/nb.gmo
Binary files differ
diff --git a/runtime-po/nb.po b/runtime-po/nb.po
new file mode 100644
index 0000000..e69c5ca
--- /dev/null
+++ b/runtime-po/nb.po
@@ -0,0 +1,77 @@
+# Norwegian bokmål translation of GNU bison.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Trond Endrestøl <Trond.Endrestol@gtf.ol.no>, 2004.
+#
+# Send this file as an gzipped attachment to:
+# translation@iro.umontreal.ca
+# with the subject:
+# TP-Robot PACKAGE-VERSION.TEAM.po
+#
+# The subject for the Norwegian bokmål translation of GNU bison-runtime 2.1
+# would then be:
+# TP-Robot bison-runtime-2.1.nb.po
+#
+# Here's the URL for the Norwegian bokmål translation team:
+# http://www.iro.umontreal.ca/translation/registry.cgi?team=nb
+#
+# Here's the URL for the current translations of GNU bison-runtime:
+# http://www.iro.umontreal.ca/translation/registry.cgi?domain=bison-runtime
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-09-21 09:35+0200\n"
+"Last-Translator: Trond Endrestøl <Trond.Endrestol@gtf.ol.no>\n"
+"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "syntaksfeil: kan ikke gå tilbake"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "syntaksen er flertydig"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "syntaksfeil"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "syntaksfeil, uforventet %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "syntaksfeil, uforventet %s, forventet %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "syntaksfeil, uforventet %s, forventet %s eller %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "syntaksfeil, uforventet %s, forventet %s eller %s eller %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "syntaksfeil, uforventet %s, forventet %s eller %s eller %s eller %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "minne er uttømt"
diff --git a/runtime-po/nl.gmo b/runtime-po/nl.gmo
new file mode 100644
index 0000000..d17c65b
--- /dev/null
+++ b/runtime-po/nl.gmo
Binary files differ
diff --git a/runtime-po/nl.po b/runtime-po/nl.po
new file mode 100644
index 0000000..991861b
--- /dev/null
+++ b/runtime-po/nl.po
@@ -0,0 +1,62 @@
+# Dutch messages for GNU bison.
+# Copyright (C) 1996, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Tim Van Holder <tim.van.holder@telenet.be>, 2002, 2003, 2004, 2005.
+# Erick Branderhorst <branderh@debian.org>, 1996.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-09-21 11:22+0200\n"
+"Last-Translator: Tim Van Holder <tim.van.holder@telenet.be>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "syntaxfout: kan niet terugkeren"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "syntax is niet eenduidig"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "syntaxfout"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "syntaxfout, %s onverwacht"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "syntaxfout, %s onverwacht (%s verwacht)"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "syntaxfout, %s onverwacht (%s of %s verwacht)"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "syntaxfout, %s onverwacht (%s of %s of %s verwacht)"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "syntaxfout, %s onverwacht (%s of %s of %s of %s verwacht)"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "geen geheugen meer beschikbaar"
diff --git a/runtime-po/pl.gmo b/runtime-po/pl.gmo
new file mode 100644
index 0000000..9945a0a
--- /dev/null
+++ b/runtime-po/pl.gmo
Binary files differ
diff --git a/runtime-po/pl.po b/runtime-po/pl.po
new file mode 100644
index 0000000..773023d
--- /dev/null
+++ b/runtime-po/pl.po
@@ -0,0 +1,64 @@
+# Polish translations for GNU Bison package.
+# Copyright (C) 2004, 2005, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Wojciech Polak <polak@gnu.org>, 2004, 2005, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4.1a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-01-30 19:11+0100\n"
+"Last-Translator: Wojciech Polak <polak@gnu.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "błąd składni: nie można cofnąć przesunięcia symbolu leksykalnego"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "składnia jest niejednoznaczna"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "błąd składni"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "błąd składni, niespodziewany symbol %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "błąd składni, niespodziewany symbol %s, oczekiwano %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "błąd składni, niespodziewany symbol %s, oczekiwano %s lub %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "błąd składni, niespodziewany %s, oczekiwano %s lub %s lub %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"błąd składni, niespodziewany symbol %s, oczekiwano %s lub %s lub %s lub %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "pamięć wyczerpana"
diff --git a/runtime-po/pt.gmo b/runtime-po/pt.gmo
new file mode 100644
index 0000000..fbcf44e
--- /dev/null
+++ b/runtime-po/pt.gmo
Binary files differ
diff --git a/runtime-po/pt.po b/runtime-po/pt.po
new file mode 100644
index 0000000..dafc71f
--- /dev/null
+++ b/runtime-po/pt.po
@@ -0,0 +1,64 @@
+# bison-runtime-2.4: Translation to Portuguese.
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Hugo Patrício <hugo.a.patricio@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime-2.4\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2009-01-27 03:16+0100\n"
+"Last-Translator: Hugo Patrício <hugo.a.patricio@gmail.com>\n"
+"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Portuguese\n"
+"X-Poedit-Country: PORTUGAL\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "erro de sintaxe: não é possível voltar"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "a sintaxe é ambígua"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "erro de sintaxe"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "erro de sintaxe, %s inesperado"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "erro de sintaxe, %s inesperado, esperando %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "erro de sintaxe, %s inesperado, esperando %s ou %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "erro de sintaxe, %s inesperado, esperando %s ou %s ou %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "erro de sintaxe, %s inesperado, esperando %s ou %s ou %s ou %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memória exausta"
diff --git a/runtime-po/pt_BR.gmo b/runtime-po/pt_BR.gmo
new file mode 100644
index 0000000..65c9ec4
--- /dev/null
+++ b/runtime-po/pt_BR.gmo
Binary files differ
diff --git a/runtime-po/pt_BR.po b/runtime-po/pt_BR.po
new file mode 100644
index 0000000..da57a52
--- /dev/null
+++ b/runtime-po/pt_BR.po
@@ -0,0 +1,61 @@
+# Brazilian Portuguese Translation (pt_BR).
+# Copyright © 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison-runtime package.
+# Leslie Harlley Watter <leslie@watter.org>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.3a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2007-05-03 22:39-0300\n"
+"Last-Translator: Leslie Harlley Watter <leslie@watter.org>\n"
+"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "erro de sintaxe: não é possível voltar"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "a sintaxe é ambígua"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "erro de sintaxe"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "erro de sintaxe, %s não esperado"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "erro de sintaxe, %s não esperado, esperando %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "erro de sintaxe, %s não esperado, esperando %s ou %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "erro de sintaxe, %s não esperado, esperando %s ou %s ou %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "erro de sintaxe, %s não esperado, esperando %s ou %s ou %s ou %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "falta de memória"
diff --git a/runtime-po/quot.sed b/runtime-po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/runtime-po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/runtime-po/remove-potcdate.sin b/runtime-po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/runtime-po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/runtime-po/ro.gmo b/runtime-po/ro.gmo
new file mode 100644
index 0000000..0b34653
--- /dev/null
+++ b/runtime-po/ro.gmo
Binary files differ
diff --git a/runtime-po/ro.po b/runtime-po/ro.po
new file mode 100644
index 0000000..5528cce
--- /dev/null
+++ b/runtime-po/ro.po
@@ -0,0 +1,65 @@
+# Mesajele în limba românã pentru GNU Bison.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Acest fiºier este distribuit sub aceeaºi licenþã ca ºi pachetul bison.
+# Laurentiu Buzdugan <lbuz@rolix.org>, 2003,2004,2005.
+#
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-09-20 12:00-0500\n"
+"Last-Translator: Laurentiu Buzdugan <lbuz@rolix.org>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || ((n%100) > 0 && (n"
+"%100) < 20)) ? 1 : 2);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "eroare de sintaxã: nu pot da înapoi"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sintaxa este ambiguã"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "eroare de sintaxã"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "eroare de sintaxã, %s neaºteptat"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "eroare de sintaxã, %s neaºteptat, aºtept %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "eroare de sintaxã, %s neaºteptat, aºtept %s sau %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "eroare de sintaxã, %s neaºteptat, aºtept %s sau %s sau %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "eroare de sintaxã, %s neaºteptat, aºtept %s sau %s sau %s sau %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "memorie epuizatã"
diff --git a/runtime-po/ru.gmo b/runtime-po/ru.gmo
new file mode 100644
index 0000000..6436645
--- /dev/null
+++ b/runtime-po/ru.gmo
Binary files differ
diff --git a/runtime-po/ru.po b/runtime-po/ru.po
new file mode 100644
index 0000000..0b8569c
--- /dev/null
+++ b/runtime-po/ru.po
@@ -0,0 +1,66 @@
+# Translation of bison-runtime messages to Russian
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Dmitry S. Sivachenko <dima@Chg.RU>, 1999,2000,2001,2002.
+# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2009.
+# Pavel Maryanov <acid_jack@ukr.net>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2009-02-04 19:48+0200\n"
+"Last-Translator: Pavel Maryanov <acid_jack@ukr.net>\n"
+"Language-Team: Russian <gnu@mx.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "синтаксическая ошибка: не удалось создать резервную копию"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "неоднозначный синтаксис"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "синтаксическая ошибка"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "синтаксическая ошибка, непредвиденная %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "синтаксическая ошибка, непредвиденная %s, ожидается %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "синтаксическая ошибка, непредвиденная %s, ожидается %s или %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "синтаксическая ошибка, непредвиденная %s, ожидается %s или %s, или %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"синтаксическая ошибка, непредвиденная %s, ожидается %s или %s, или %s, или %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "недостаточно памяти"
diff --git a/runtime-po/sl.gmo b/runtime-po/sl.gmo
new file mode 100644
index 0000000..51e5501
--- /dev/null
+++ b/runtime-po/sl.gmo
Binary files differ
diff --git a/runtime-po/sl.po b/runtime-po/sl.po
new file mode 100644
index 0000000..4be5213
--- /dev/null
+++ b/runtime-po/sl.po
@@ -0,0 +1,64 @@
+# Slovenian translation of bison-runtime.
+# Copyright (C) 2005 - 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Matej Urbančič <matej.urban@gmail.com>, 2005.
+# Klemen Košir <klemen.kosir@gmx.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.5\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-03-05 10:15+0100\n"
+"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
+"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "skladenjska napaka: vrnitev ni mogoča"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "dvoumna skladnja"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "skladenjska napaka"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "skladenjska napaka, nepričakovan %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "skladenjska napaka, nepričakovan %s, pričakuje se %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "skladenjska napaka, nepričakovan %s, pričakuje se %s ali %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "skladenjska napaka, nepričakovan %s, pričakuje se %s , %s ali %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "skladenjska napaka, nepričakovan %s, pričakuje se %s , %s , %s ali %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "zmanjkalo je pomnilnika"
diff --git a/runtime-po/sq.gmo b/runtime-po/sq.gmo
new file mode 100644
index 0000000..cfd7128
--- /dev/null
+++ b/runtime-po/sq.gmo
Binary files differ
diff --git a/runtime-po/sq.po b/runtime-po/sq.po
new file mode 100644
index 0000000..0a23643
--- /dev/null
+++ b/runtime-po/sq.po
@@ -0,0 +1,62 @@
+# Albanian translation of bison-runtime
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Agron Selimaj <linuxmaster@verizon.net>, 2012.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.6.2\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-10-08 21:35+0500\n"
+"Last-Translator: Agron Selimaj <linuxmaster@verizon.net>\n"
+"Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "gabim sintaksor: nuk mund të ruaj një kopje"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "sintaksa është e ngjashme me të tjera"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "gabim sintaksor"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "gabim sintaksor, %s i papritur"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "gabim sintaksor, %s i papritur, pritet %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "gabim sintaksor, %s i papritur, pritet %s ose %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "gabim sintaksor, %s i papritur, pritet %s ose %s ose %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "gabim sintaksor, %s i papritur, pritet %s ose %s ose %s ose %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "nuk mbeti kujtesë më"
diff --git a/runtime-po/sr.gmo b/runtime-po/sr.gmo
new file mode 100644
index 0000000..26fe0b0
--- /dev/null
+++ b/runtime-po/sr.gmo
Binary files differ
diff --git a/runtime-po/sr.po b/runtime-po/sr.po
new file mode 100644
index 0000000..b8171f6
--- /dev/null
+++ b/runtime-po/sr.po
@@ -0,0 +1,64 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime-2.5\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2011-12-20 11:07+0200\n"
+"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <gnu@prevod.org>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Virtaal 0.7.0\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "грешка синтаксе: не могу да се вратим горе "
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "синтакса је нејасна"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "грешка синтаксе"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "грешка синтаксе, није очекивано %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "грешка синтаксе, није очекивано %s, очекивано је %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "грешка синтаксе, није очекивано %s, очекивано је %s или %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "грешка синтаксе, није очекивано %s, очекивано је %s или %s или %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"грешка синтаксе, није очекивано %s, очекивано је %s или %s или %s или %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "меморија је потрошена"
diff --git a/runtime-po/stamp-po b/runtime-po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/runtime-po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/runtime-po/sv.gmo b/runtime-po/sv.gmo
new file mode 100644
index 0000000..cca4abe
--- /dev/null
+++ b/runtime-po/sv.gmo
Binary files differ
diff --git a/runtime-po/sv.po b/runtime-po/sv.po
new file mode 100644
index 0000000..d9dfe21
--- /dev/null
+++ b/runtime-po/sv.po
@@ -0,0 +1,64 @@
+# Swedish messages for bison.
+# Copyright © 2001-2006, 2008, 2010, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Göran Uddeborg <goeran@uddeborg.se>, 2001-2006, 2008, 2010, 2012.
+#
+# $Revision: 1.31 $
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-09 21:10+0100\n"
+"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "syntaxfel: kan inte backa"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "tvetydig syntax"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "syntaxfel"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "syntaxfel, oväntad %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "syntaxfel, oväntad %s, förväntade %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "syntaxfel, oväntad %s, förväntade %s eller %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "syntaxfel, oväntad %s, förväntade %s eller %s eller %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "syntaxfel, oväntad %s, förväntade %s eller %s eller %s eller %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "minnet slut"
diff --git a/runtime-po/th.gmo b/runtime-po/th.gmo
new file mode 100644
index 0000000..f5c4633
--- /dev/null
+++ b/runtime-po/th.gmo
Binary files differ
diff --git a/runtime-po/th.po b/runtime-po/th.po
new file mode 100644
index 0000000..7768def
--- /dev/null
+++ b/runtime-po/th.po
@@ -0,0 +1,65 @@
+# Translation bison-runtime to Thai.
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Seksan Poltree <seksan.poltree@gmail.com>, 2007-2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.4.2\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2010-03-23 01:30+0700\n"
+"Last-Translator: Seksan Poltree <seksan.poltree@gmail.com>\n"
+"Language-Team: Thai <translation-team-th@lists.sourceforge.net>\n"
+"Language: th\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Thai\n"
+"X-Poedit-Country: THAILAND\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "ข้อผิดพลาดวากยสัมพันธ์: ไม่สามารถสำรองข้อมูล"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "วากยสัมพันธ์คลุมเครือไม่ชัดเจน"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "ข้อผิดพลาดวากยสัมพันธ์"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "ข้อผิดพลาดวากยสัมพันธ์, ไม่คาดว่าจะเป็น %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "ข้อผิดพลาดวากยสัมพันธ์, ไม่คาดว่าจะเป็น %s, คาดว่าจะเป็น %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "ข้อผิดพลาดวากยสัมพันธ์, ไม่คาดว่าจะเป็น %s, คาดว่าจะเป็น %s หรือ %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "ข้อผิดพลาดวากยสัมพันธ์, ไม่คาดว่าจะเป็น %s, คาดว่าจะเป็น %s หรือ %s หรือ %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "ข้อผิดพลาดวากยสัมพันธ์, ไม่คาดว่าจะเป็น %s, คาดว่าจะเป็น %s หรือ %s หรือ %s หรือ %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "หน่วยความจำถูกใช้จนหมดสิ้น"
diff --git a/runtime-po/tr.gmo b/runtime-po/tr.gmo
new file mode 100644
index 0000000..3ee0e34
--- /dev/null
+++ b/runtime-po/tr.gmo
Binary files differ
diff --git a/runtime-po/tr.po b/runtime-po/tr.po
new file mode 100644
index 0000000..fa20cf6
--- /dev/null
+++ b/runtime-po/tr.po
@@ -0,0 +1,62 @@
+# Turkish translations for GNU Bison messages.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Altuð Bayram <altugbayram_2000@yahoo.com>, 2001.
+# Çaðrý Çöltekin <cagri@xs4all.nl>, 2003 - 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison 2.0\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-03-20 22:03+0100\n"
+"Last-Translator: Çaðrý Çöltekin <cagri@xs4all.nl>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr ""
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr ""
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr ""
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr ""
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr ""
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr ""
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr ""
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "bellek tükendi"
diff --git a/runtime-po/uk.gmo b/runtime-po/uk.gmo
new file mode 100644
index 0000000..e1b225e
--- /dev/null
+++ b/runtime-po/uk.gmo
Binary files differ
diff --git a/runtime-po/uk.po b/runtime-po/uk.po
new file mode 100644
index 0000000..f585c59
--- /dev/null
+++ b/runtime-po/uk.po
@@ -0,0 +1,63 @@
+# Ukrainian translation of bison-runtime.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.3a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2007-07-13 20:35+0300\n"
+"Last-Translator: Maxim V. Dziumanenko <dziumanenko@gmail.com>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "синтаксична помилка: не вдається зробити резервну копію"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "синтаксис неоднозначний"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "синтаксична помилка"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "синтаксична помилка, неочікуваний %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "синтаксична помилка, неочікуваний %s, очікувалось %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "синтаксична помилка, неочікуваний %s, очікувалось %s або %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "синтаксична помилка, неочікуваний %s, очікувалось %s, або %s, або %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr ""
+"синтаксична помилка, неочікуваний %s, очікувалось %s, або %s, або %s, або %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "пам'ять вичерпано'"
diff --git a/runtime-po/vi.gmo b/runtime-po/vi.gmo
new file mode 100644
index 0000000..02041c4
--- /dev/null
+++ b/runtime-po/vi.gmo
Binary files differ
diff --git a/runtime-po/vi.po b/runtime-po/vi.po
new file mode 100644
index 0000000..8ff95be
--- /dev/null
+++ b/runtime-po/vi.po
@@ -0,0 +1,66 @@
+# Vietnamese Translation for Bison-runtime.
+# Copyright © 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime-2.6.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2012-12-09 08:31+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Team-Website: <http://translationproject.org/team/vi.html>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "lỗi cú pháp: không thể sao lưu dự phòng"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "cú pháp chưa rõ ràng"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "lỗi cú pháp"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "lỗi cú pháp, gặp %s bất thường"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "lỗi cú pháp, gặp %s bất thường, cần %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "lỗi cú pháp, gặp %s bất thường, cần %s hoặc %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "lỗi cú pháp, gặp %s bất thường, cần %s hoặc %s hay %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "lỗi cú pháp, gặp %s bất thường, cần %s hoặc %s hoặc %s hay %s "
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "hết bộ nhớ"
diff --git a/runtime-po/zh_CN.gmo b/runtime-po/zh_CN.gmo
new file mode 100644
index 0000000..fc79627
--- /dev/null
+++ b/runtime-po/zh_CN.gmo
Binary files differ
diff --git a/runtime-po/zh_CN.po b/runtime-po/zh_CN.po
new file mode 100644
index 0000000..36ebb75
--- /dev/null
+++ b/runtime-po/zh_CN.po
@@ -0,0 +1,61 @@
+# Simplified Chinese translation for bison-runtime.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+#
+# Meng Jie <zuxyhere@eastday.com>, 2005, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.3a\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2007-08-13 23:19+0800\n"
+"Last-Translator: Meng Jie <zuxy.meng@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "语法错误:不能备份"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "语法有歧义"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "语法错误"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "语法错误,非预期的 %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "语法错误,非预期的 %s,需要 %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "语法错误,非预期的 %s,需要 %s 或 %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "语法错误,非预期的 %s,需要 %s,%s 或 %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "语法错误,非预期的 %s,需要 %s,%s,%s 或 %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "内存耗尽"
diff --git a/runtime-po/zh_TW.gmo b/runtime-po/zh_TW.gmo
new file mode 100644
index 0000000..abc7dbc
--- /dev/null
+++ b/runtime-po/zh_TW.gmo
Binary files differ
diff --git a/runtime-po/zh_TW.po b/runtime-po/zh_TW.po
new file mode 100644
index 0000000..b441464
--- /dev/null
+++ b/runtime-po/zh_TW.po
@@ -0,0 +1,61 @@
+# Traditional Chinese Messages for bison-runtime
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# Wei-Lun Chao <chaoweilun@pcmail.com.tw>, 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"PO-Revision-Date: 2005-09-27 10:31+0800\n"
+"Last-Translator: Wei-Lun Chao <chaoweilun@pcmail.com.tw>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: data/glr.c:855 data/yacc.c:776
+msgid "syntax error: cannot back up"
+msgstr "語法錯誤:無法備份"
+
+#: data/glr.c:1729
+msgid "syntax is ambiguous"
+msgstr "語法不明確"
+
+#: data/glr.c:2014 data/glr.c:2094 data/glr.c:2134 data/glr.c:2399
+#: data/lalr1.cc:947 data/lalr1.cc:967 data/yacc.c:1351 data/yacc.c:1856
+#: data/yacc.c:1862
+msgid "syntax error"
+msgstr "語法錯誤"
+
+#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "語法錯誤,預期之外的 %s"
+
+#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "語法錯誤,預期之外的 %s,預期為 %s"
+
+#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "語法錯誤,預期之外的 %s,預期為 %s 或 %s"
+
+#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "語法錯誤,預期之外的 %s,預期為 %s、%s 或 %s"
+
+#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "語法錯誤,預期之外的 %s,預期為 %s、%s、%s 或 %s"
+
+#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
+#: data/yacc.c:2013
+msgid "memory exhausted"
+msgstr "記憶體耗盡"
diff --git a/src/AnnotationList.c b/src/AnnotationList.c
new file mode 100644
index 0000000..4c1e0ae
--- /dev/null
+++ b/src/AnnotationList.c
@@ -0,0 +1,807 @@
+/* IELR's inadequacy annotation list.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+#include "system.h"
+
+#include "AnnotationList.h"
+#include "lalr.h"
+#include "ielr.h"
+
+/**
+ * \pre
+ *   - <tt>annotations_obstackp != NULL</tt>.
+ * \post
+ *   - \c result is a new \c AnnotationList with one node whose:
+ *     - \c inadequacyNode member is \c NULL.
+ *     - \c contributions member is allocated with \c contribution_count
+ *       uninitialized elements.
+ *   - All memory was allocated on \c annotations_obstackp.
+ */
+static AnnotationList*
+AnnotationList__alloc_on_obstack (ContributionIndex contribution_count,
+                                  struct obstack *annotations_obstackp)
+{
+  AnnotationList *result;
+  size_t contributions_size =
+    contribution_count * sizeof result->contributions[0];
+  result = obstack_alloc (annotations_obstackp,
+                          offsetof (AnnotationList, contributions)
+                          + contributions_size);
+  result->next = NULL;
+  result->inadequacyNode = NULL;
+  return result;
+}
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - <tt>0 <= ci < self->inadequacyNode->contributionCount</tt>.
+ * \post
+ *   - \c result = true iff contribution \c ci in \c self represents an
+ *     "always" contribution.
+ */
+static bool
+AnnotationList__isContributionAlways (AnnotationList const *self,
+                                      ContributionIndex ci)
+{
+  aver (0 <= ci && ci < self->inadequacyNode->contributionCount);
+  return self->contributions[ci] == NULL;
+}
+
+/**
+ * \pre
+ *   - \c self is a single node.
+ *   - \c self annotates the same state as every other node in \c list, and
+ *     that state has \c nitems kernel items.
+ * \post
+ *   - If the list \c list already contains an identical annotation to \c self,
+ *     \c self was discarded, \c result is false, and the caller is responsible
+ *     for the memory of \c self.
+ *   - Otherwise, \c list now contains the node \c self, \c result is true, and
+ *     \c list assumes responsibility for the memory of \c self.
+ *   - The sort in \c list is:
+ *     - Sort in reverse order on the unique ID of the associated
+ *       inadequacy node.  Because these IDs are assigned in ascending
+ *       order, this should mean that the insertion position within an
+ *       annotation list is usually near the beginning with other
+ *       annotations associated with the same inadequacy.
+ *     - Next, sort on the first contribution that is different as follows:
+ *       - Sort an always-contribution before a never-contribution before a
+ *         potential-contribution.
+ *       - Two always-contributions are identical.
+ *       - Two never-contributions are identical.
+ *       - For two potential-contributions, sort on the contributions' kernel
+ *         item bitsets interpreted as binary numbers.
+ *  - The sorting has a few effects:
+ *    - It accelerates elimination of identical annotations during insertion.
+ *    - It determines how the output of \c AnnotationList__debug is sorted.
+ *    - Other than that, it's probably not important.
+ */
+static bool
+AnnotationList__insertInto (AnnotationList *self, AnnotationList **list,
+                            size_t nitems)
+{
+  AnnotationList **node;
+  for (node = list; *node; node = &(*node)->next)
+    {
+      int cmp = 0;
+      ContributionIndex ci;
+      if (self->inadequacyNode->id < (*node)->inadequacyNode->id)
+        cmp = 1;
+      else if ((*node)->inadequacyNode->id < self->inadequacyNode->id)
+        cmp = -1;
+      else
+        for (ci = 0;
+             cmp == 0 && ci < self->inadequacyNode->contributionCount;
+             ++ci)
+          {
+            if (AnnotationList__isContributionAlways (self, ci))
+              {
+                if (!AnnotationList__isContributionAlways (*node, ci))
+                  cmp = -1;
+              }
+            else if (AnnotationList__isContributionAlways (*node, ci))
+              cmp = 1;
+            else
+              {
+                size_t item;
+                for (item = 0; cmp == 0 && item < nitems; ++item)
+                  {
+                    if (!Sbitset__test (self->contributions[ci], item))
+                      {
+                        if (Sbitset__test ((*node)->contributions[ci], item))
+                          cmp = -1;
+                      }
+                    else if (!Sbitset__test ((*node)->contributions[ci], item))
+                      cmp = 1;
+                  }
+              }
+          }
+      if (cmp < 0)
+        {
+          self->next = *node;
+          *node = self;
+          break;
+        }
+      else if (cmp == 0)
+        {
+          self = NULL;
+          break;
+        }
+    }
+  if (!*node)
+    *node = self;
+  return self != NULL;
+}
+
+static bitset
+AnnotationList__compute_shift_tokens (transitions *trans)
+{
+  bitset shift_tokens = bitset_create (ntokens, BITSET_FIXED);
+  int i;
+  FOR_EACH_SHIFT (trans, i)
+    bitset_set (shift_tokens, TRANSITION_SYMBOL (trans, i));
+  return shift_tokens;
+}
+
+static bitset
+AnnotationList__compute_conflicted_tokens (bitset shift_tokens,
+                                           reductions *reds)
+{
+  bitset conflicted_tokens = bitset_create (ntokens, BITSET_FIXED);
+  bitset conflicted_tokens_rule = bitset_create (ntokens, BITSET_FIXED);
+  bitset tokens = bitset_create (ntokens, BITSET_FIXED);
+  int i;
+
+  bitset_copy (tokens, shift_tokens);
+  for (i = 0; i < reds->num; ++i)
+    {
+      bitset_and (conflicted_tokens_rule, tokens, reds->lookahead_tokens[i]);
+      bitset_or (conflicted_tokens,
+                 conflicted_tokens, conflicted_tokens_rule);
+      bitset_or (tokens, tokens, reds->lookahead_tokens[i]);
+      /* Check that rules are sorted on rule number or the next step in
+         AnnotationList__compute_from_inadequacies will misbehave.  */
+      aver (i == 0 || reds->rules[i-1] < reds->rules[i]);
+    }
+
+  bitset_free (tokens);
+  bitset_free (conflicted_tokens_rule);
+
+  return conflicted_tokens;
+}
+
+static bool
+AnnotationList__compute_lhs_contributions (state *s, rule *the_rule,
+                                           symbol_number conflicted_token,
+                                           bitsetv follow_kernel_items,
+                                           bitsetv always_follows,
+                                           state ***predecessors,
+                                           bitset **item_lookahead_sets,
+                                           Sbitset *items,
+                                           struct obstack
+                                             *annotations_obstackp)
+{
+  goto_number lhs_goto = map_goto (s->number, the_rule->lhs->number);
+  if (bitset_test (always_follows[lhs_goto], conflicted_token))
+    return true;
+  *items = Sbitset__new_on_obstack (s->nitems, annotations_obstackp);
+  {
+    bitset_iterator biter_item;
+    bitset_bindex item;
+    BITSET_FOR_EACH (biter_item, follow_kernel_items[lhs_goto], item, 0)
+      if (ielr_item_has_lookahead (s, 0, item, conflicted_token,
+                                   predecessors, item_lookahead_sets))
+        Sbitset__set (*items, item);
+  }
+  return false;
+}
+
+static void
+AnnotationList__computePredecessorAnnotations (AnnotationList *self, state *s,
+                                               bitsetv follow_kernel_items,
+                                               bitsetv always_follows,
+                                               state ***predecessors,
+                                               bitset **item_lookahead_sets,
+                                               AnnotationList
+                                                 **annotation_lists,
+                                               AnnotationIndex
+                                                 *annotation_counts,
+                                               struct obstack
+                                                 *annotations_obstackp)
+{
+  state **predecessor;
+  for (predecessor = predecessors[s->number]; *predecessor; ++predecessor)
+    {
+      AnnotationList *annotation_node =
+        AnnotationList__alloc_on_obstack (
+          self->inadequacyNode->contributionCount, annotations_obstackp);
+      annotation_node->inadequacyNode = self->inadequacyNode;
+      bool potential_contribution = false;
+      bitset *lookaheads = NULL;
+      {
+        ContributionIndex ci;
+        for (ci = 0; ci < self->inadequacyNode->contributionCount; ++ci)
+          {
+            symbol_number contribution_token =
+              InadequacyList__getContributionToken (self->inadequacyNode, ci)
+                ->number;
+            if (AnnotationList__isContributionAlways (self, ci))
+              {
+                annotation_node->contributions[ci] = NULL;
+                continue;
+              }
+            annotation_node->contributions[ci] =
+              Sbitset__new_on_obstack ((*predecessor)->nitems,
+                                       annotations_obstackp);
+            {
+              size_t predecessor_item = 0;
+              Sbitset sbiter_item;
+              Sbitset__Index self_item;
+              SBITSET__FOR_EACH (self->contributions[ci], s->nitems,
+                                 sbiter_item, self_item)
+                {
+                  /* If this kernel item is the beginning of a RHS, it must be
+                     the kernel item in the start state, and so it has an empty
+                     lookahead set.  Thus, it can't contribute to inadequacies,
+                     and so it should never have been identified as a
+                     contribution.  If, instead, this kernel item is the
+                     successor of the start state's kernel item, the lookahead
+                     set is still empty, and so it also should never have been
+                     identified as a contribution.  This situation is fortunate
+                     because we want to avoid the - 2 below in both cases.  */
+                  aver (s->items[self_item] > 1);
+                  /* If this kernel item is next to the beginning of the RHS,
+                     then check all of the predecessor's goto follows for the
+                     LHS.  */
+                  if (item_number_is_rule_number (ritem[s->items[self_item]
+                                                        - 2]))
+                    {
+                      Sbitset items;
+                      unsigned int rulei;
+                      for (rulei = s->items[self_item];
+                           !item_number_is_rule_number (ritem[rulei]);
+                           ++rulei)
+                        ;
+                      if (AnnotationList__compute_lhs_contributions (
+                            *predecessor,
+                            &rules[item_number_as_rule_number (ritem[rulei])],
+                            contribution_token,
+                            follow_kernel_items, always_follows, predecessors,
+                            item_lookahead_sets, &items, annotations_obstackp))
+                        {
+                          obstack_free (annotations_obstackp,
+                                        annotation_node->contributions[ci]);
+                          annotation_node->contributions[ci] = NULL;
+                          break;
+                        }
+                      else
+                        {
+                          Sbitset__or (annotation_node->contributions[ci],
+                                       annotation_node->contributions[ci],
+                                       items, (*predecessor)->nitems);
+                          obstack_free (annotations_obstackp, items);
+                        }
+                    }
+                  /* If this kernel item is later in the RHS, then check the
+                     predecessor item's lookahead set.  */
+                  else
+                    {
+                      /* We don't have to start the predecessor item search at
+                         the beginning every time because items from both
+                         states are sorted by their indices in ritem.  */
+                      for (;
+                           predecessor_item < (*predecessor)->nitems;
+                           ++predecessor_item)
+                        if ((*predecessor)->items[predecessor_item]
+                            == s->items[self_item] - 1)
+                          break;
+                      aver (predecessor_item != (*predecessor)->nitems);
+                      if (ielr_item_has_lookahead (*predecessor, 0,
+                                                   predecessor_item,
+                                                   contribution_token,
+                                                   predecessors,
+                                                   item_lookahead_sets))
+                        Sbitset__set (annotation_node->contributions[ci],
+                                      predecessor_item);
+                    }
+                }
+            }
+            if (annotation_node->contributions[ci])
+              {
+                Sbitset biter;
+                Sbitset__Index i;
+                SBITSET__FOR_EACH (annotation_node->contributions[ci],
+                                   (*predecessor)->nitems, biter, i)
+                  {
+                    potential_contribution = true;
+                    if (!lookaheads)
+                      {
+                        size_t j;
+                        lookaheads = xnmalloc ((*predecessor)->nitems,
+                                               sizeof *lookaheads);
+                        for (j = 0; j < (*predecessor)->nitems; ++j)
+                          lookaheads[j] = NULL;
+                      }
+                    if (!lookaheads[i])
+                      lookaheads[i] = bitset_create (ntokens, BITSET_FIXED);
+                    bitset_set (lookaheads[i], contribution_token);
+                  }
+              }
+          }
+      }
+
+      /* If the predecessor has any contributions besides just "always" and
+         "never" contributions:
+         - If the dominant contribution is split-stable, the annotation could
+           not affect merging on this predecessor state or its eventual
+           predecessor states.  Moreover, all contributions that affect
+           whether the dominant contribution remains dominant must be "always"
+           or "never" contributions in order for the dominant contribution to
+           be split-stable.  Thus, the dominant contribution computation result
+           in eventual successor states will not be affected by lookaheads
+           tracked for this predecessor state.  (Also, as in the isocore
+           compatibility test, we depend on the fact that isocores with equal
+           dominant contributions will have the same dominant contribution when
+           merged.  Otherwise, we might have to worry that the presence of a
+           potential contribution might somehow be the culprit of that behavior
+           and thus need to be tracked regardless of the split stability of the
+           dominant contribution.)  Thus, go ahead and discard the annotation
+           to save space now plus time during state splitting.
+         - Otherwise, record the annotation, and compute any resulting
+           annotations needed on predecessor states.  */
+      if (potential_contribution)
+        {
+          if (ContributionIndex__none
+              != AnnotationList__computeDominantContribution (
+                   annotation_node, (*predecessor)->nitems, lookaheads, true))
+            {
+              obstack_free (annotations_obstackp, annotation_node);
+              annotation_node = NULL;
+            }
+          {
+            size_t i;
+            for (i = 0; i < (*predecessor)->nitems; ++i)
+              if (lookaheads[i])
+                bitset_free (lookaheads[i]);
+            free (lookaheads);
+          }
+          if (annotation_node)
+            {
+              if (AnnotationList__insertInto (annotation_node,
+                                              &annotation_lists[(*predecessor)
+                                                                ->number],
+                                              (*predecessor)->nitems))
+                {
+                  ++annotation_counts[(*predecessor)->number];
+                  AnnotationList__computePredecessorAnnotations (
+                    annotation_node, *predecessor,
+                    follow_kernel_items, always_follows, predecessors,
+                    item_lookahead_sets, annotation_lists, annotation_counts,
+                    annotations_obstackp);
+                }
+              else
+                obstack_free (annotations_obstackp, annotation_node);
+            }
+        }
+      else
+        obstack_free (annotations_obstackp, annotation_node);
+    }
+}
+
+void
+AnnotationList__compute_from_inadequacies (
+  state *s, bitsetv follow_kernel_items, bitsetv always_follows,
+  state ***predecessors, bitset **item_lookahead_sets,
+  InadequacyList **inadequacy_lists, AnnotationList **annotation_lists,
+  AnnotationIndex *annotation_counts,
+  ContributionIndex *max_contributionsp,
+  struct obstack *annotations_obstackp,
+  InadequacyListNodeCount *inadequacy_list_node_count)
+{
+  bitsetv all_lookaheads;
+  bitset shift_tokens;
+  bitset conflicted_tokens;
+  bitset_iterator biter_conflict;
+  bitset_bindex conflicted_token;
+
+  /* Return an empty list if s->lookahead_tokens = NULL.  */
+  if (s->consistent)
+    return;
+
+  all_lookaheads = bitsetv_create (s->nitems, ntokens, BITSET_FIXED);
+  bitsetv_ones (all_lookaheads);
+  shift_tokens = AnnotationList__compute_shift_tokens (s->transitions);
+  conflicted_tokens =
+    AnnotationList__compute_conflicted_tokens (shift_tokens, s->reductions);
+
+  /* Add an inadequacy annotation for each conflicted_token.  */
+  BITSET_FOR_EACH (biter_conflict, conflicted_tokens, conflicted_token, 0)
+    {
+      AnnotationList *annotation_node;
+      /* FIXME: Would a BITSET_FRUGAL or BITEST_SPARSE be more efficient?  Now
+         or convert it inside InadequacyList__new_conflict?  */
+      bitset actions = bitset_create (s->reductions->num + 1, BITSET_FIXED);
+      ContributionIndex contribution_count = 0;
+      bool potential_contribution = false;
+
+      /* Allocate the annotation node.  */
+      {
+        int rule_i;
+        for (rule_i = 0; rule_i < s->reductions->num; ++rule_i)
+          if (bitset_test (s->reductions->lookahead_tokens[rule_i],
+                           conflicted_token))
+            ++contribution_count;
+        if (bitset_test (shift_tokens, conflicted_token))
+          ++contribution_count;
+        annotation_node =
+          AnnotationList__alloc_on_obstack (contribution_count,
+                                            annotations_obstackp);
+      }
+
+      /* Add a contribution for each reduction that has conflicted_token as a
+         lookahead.  */
+      {
+        ContributionIndex ci = 0;
+        int item_i = 0;
+        int rule_i;
+        for (rule_i = 0; rule_i < s->reductions->num; ++rule_i)
+          {
+            rule *the_rule = s->reductions->rules[rule_i];
+            if (bitset_test (s->reductions->lookahead_tokens[rule_i],
+                             conflicted_token))
+              {
+                bitset_set (actions, rule_i);
+                /* If this reduction is on a kernel item, just add it.  */
+                if (!item_number_is_rule_number (the_rule->rhs[0]))
+                  {
+                    annotation_node->contributions[ci] =
+                      Sbitset__new_on_obstack (s->nitems,
+                                               annotations_obstackp);
+                    /* Catch item_i up to rule_i.  This works because both are
+                       sorted on rule number.  */
+                    while (!item_number_is_rule_number (
+                             ritem[s->items[item_i]])
+                           || item_number_as_rule_number (
+                                ritem[s->items[item_i]])
+                              != the_rule->number)
+                      {
+                        ++item_i;
+                        aver (item_i < s->nitems);
+                      }
+                    Sbitset__set (annotation_node->contributions[ci], item_i);
+                  }
+                /* Otherwise, add the kernel items whose lookahead sets
+                   contribute the conflicted token to this reduction's
+                   lookahead set.  */
+                else if (AnnotationList__compute_lhs_contributions (
+                           s, the_rule, conflicted_token, follow_kernel_items,
+                           always_follows, predecessors, item_lookahead_sets,
+                           &annotation_node->contributions[ci],
+                           annotations_obstackp))
+                  {
+                    annotation_node->contributions[ci++] = NULL;
+                    continue;
+                  }
+                /* The lookahead token has to come from somewhere.  */
+                aver (!Sbitset__isEmpty (annotation_node->contributions[ci],
+                                         s->nitems));
+                ++ci;
+                potential_contribution = true;
+              }
+          }
+      }
+
+      /* If there are any contributions besides just "always" contributions:
+         - If there's also a shift contribution, record it.
+         - If the dominant contribution is split-stable, then the annotation
+           could not affect merging, so go ahead and discard the annotation and
+           the inadequacy to save space now plus time during state splitting.
+         - Otherwise, record the annotation and the inadequacy, and compute any
+           resulting annotations needed on predecessor states.  */
+      if (potential_contribution)
+        {
+          if (bitset_test (shift_tokens, conflicted_token))
+            {
+              bitset_set (actions, s->reductions->num);
+              annotation_node->contributions[contribution_count - 1] = NULL;
+            }
+          {
+            InadequacyList *conflict_node =
+              InadequacyList__new_conflict (
+                s, symbols[conflicted_token], actions,
+                inadequacy_list_node_count);
+            actions = NULL;
+            annotation_node->inadequacyNode = conflict_node;
+            if (ContributionIndex__none
+                != AnnotationList__computeDominantContribution (
+                     annotation_node, s->nitems, all_lookaheads, true))
+              {
+                obstack_free (annotations_obstackp, annotation_node);
+                InadequacyList__delete (conflict_node);
+              }
+            else
+              {
+                InadequacyList__prependTo (conflict_node,
+                                           &inadequacy_lists[s->number]);
+                aver (AnnotationList__insertInto (
+                        annotation_node, &annotation_lists[s->number],
+                        s->nitems));
+                /* This aver makes sure the
+                   AnnotationList__computeDominantContribution check above
+                   does discard annotations in the simplest case of a S/R
+                   conflict with no token precedence.  */
+                aver (!bitset_test (shift_tokens, conflicted_token)
+                      || symbols[conflicted_token]->prec);
+                ++annotation_counts[s->number];
+                if (contribution_count > *max_contributionsp)
+                  *max_contributionsp = contribution_count;
+                AnnotationList__computePredecessorAnnotations (
+                  annotation_node, s,
+                  follow_kernel_items, always_follows, predecessors,
+                  item_lookahead_sets, annotation_lists, annotation_counts,
+                  annotations_obstackp);
+              }
+          }
+        }
+      else
+        {
+          bitset_free (actions);
+          obstack_free (annotations_obstackp, annotation_node);
+        }
+    }
+
+  bitsetv_free (all_lookaheads);
+  bitset_free (shift_tokens);
+  bitset_free (conflicted_tokens);
+}
+
+void
+AnnotationList__debug (AnnotationList const *self, size_t nitems, int spaces)
+{
+  AnnotationList const *a;
+  AnnotationIndex ai;
+  for (a = self, ai = 0; a; a = a->next, ++ai)
+    {
+      {
+        int j;
+        for (j = 0; j < spaces; ++j)
+          putc (' ', stderr);
+      }
+      fprintf (stderr, "Annotation %d (manifesting state %d):\n",
+               ai, a->inadequacyNode->manifestingState->number);
+      {
+        ContributionIndex ci;
+        bitset_bindex rulei = 0; /* init suppresses compiler warning */
+        rulei = bitset_first (a->inadequacyNode->inadequacy.conflict.actions);
+        for (ci = 0; ci < a->inadequacyNode->contributionCount; ++ci)
+          {
+            symbol_number token =
+              InadequacyList__getContributionToken (a->inadequacyNode, ci)
+                ->number;
+            {
+              int j;
+              for (j = 0; j < spaces+2; ++j)
+                putc (' ', stderr);
+            }
+            if (ci == InadequacyList__getShiftContributionIndex (
+                        a->inadequacyNode))
+              fprintf (stderr, "Contributes shift of token %d.\n", token);
+            else
+              {
+                fprintf (stderr, "Contributes token %d", token);
+                aver (rulei != BITSET_BINDEX_MAX);
+                fprintf (stderr, " as lookahead, rule number %d",
+                         a->inadequacyNode->manifestingState
+                           ->reductions->rules[rulei]->number);
+                rulei =
+                  bitset_next (a->inadequacyNode->inadequacy.conflict.actions,
+                               rulei+1);
+                if (AnnotationList__isContributionAlways (a, ci))
+                  fprintf (stderr, " always.");
+                else
+                  {
+                    fprintf (stderr, ", items: ");
+                    Sbitset__fprint (a->contributions[ci], nitems, stderr);
+                  }
+                fprintf (stderr, "\n");
+              }
+          }
+      }
+    }
+}
+
+void
+AnnotationList__computeLookaheadFilter (AnnotationList const *self,
+                                        size_t nitems,
+                                        bitsetv lookahead_filter)
+{
+  bitsetv_zero (lookahead_filter);
+  for (; self; self = self->next)
+    {
+      ContributionIndex ci;
+      for (ci = 0; ci < self->inadequacyNode->contributionCount; ++ci)
+        if (!AnnotationList__isContributionAlways (self, ci))
+          {
+            Sbitset__Index item;
+            Sbitset biter;
+            symbol_number token =
+              InadequacyList__getContributionToken (self->inadequacyNode, ci)
+                ->number;
+            SBITSET__FOR_EACH (self->contributions[ci], nitems, biter, item)
+              bitset_set (lookahead_filter[item], token);
+          }
+    }
+}
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - \c nitems is the number of kernel items in the LR(0) state that \c self
+ *     annotates.
+ *   - \c lookaheads describes the lookahead sets on the kernel items of some
+ *     isocore of the LR(0) state that \c self annotates.  Either:
+ *     - <tt>lookaheads = NULL</tt> only if the lookahead set on every kernel
+ *       item is empty.
+ *     - For any <tt>0 <= i < nitems</tt>, <tt>lookaheads[i]</tt> is either:
+ *       - \c NULL only if the lookahead set on kernel item \c i is empty.
+ *       - The (possibly empty) lookahead set on kernel item \c i.
+ *   - <tt>0 <= ci < self->inadequacyNode->contributionCount</tt>.
+ * \post
+ *   - \c result = true iff contribution \c ci in \c self is made by the state
+ *     described by \c lookaheads.
+ */
+static bool
+AnnotationList__stateMakesContribution (AnnotationList const *self,
+                                        size_t nitems, ContributionIndex ci,
+                                        bitset *lookaheads)
+{
+  if (AnnotationList__isContributionAlways (self, ci))
+    return true;
+  if (!lookaheads)
+    return false;
+  {
+    symbol_number token =
+      InadequacyList__getContributionToken (self->inadequacyNode, ci)->number;
+    Sbitset__Index item;
+    Sbitset biter;
+    SBITSET__FOR_EACH (self->contributions[ci], nitems, biter, item)
+      if (lookaheads[item] && bitset_test (lookaheads[item], token))
+        return true;
+  }
+  return false;
+}
+
+ContributionIndex
+AnnotationList__computeDominantContribution (AnnotationList const *self,
+                                             size_t nitems, bitset *lookaheads,
+                                             bool require_split_stable)
+{
+  symbol *token;
+  ContributionIndex const ci_shift =
+    InadequacyList__getShiftContributionIndex (self->inadequacyNode);
+
+  token = self->inadequacyNode->inadequacy.conflict.token;
+
+  /* S/R conflict.  */
+  if (ci_shift != ContributionIndex__none)
+    {
+      bool find_stable_domination_over_shift = false;
+      bool find_stable_error_action_domination = false;
+      {
+        ContributionIndex ci;
+        int actioni;
+        ContributionIndex ci_rr_dominator = ContributionIndex__none;
+        int shift_precedence = token->prec;
+
+        /* If the token has no precedence set, shift is always chosen.  */
+        if (!shift_precedence)
+          return ci_shift;
+
+        /* Figure out which reductions contribute, which of those would
+           dominate in a R/R comparison, and whether any reduction dominates
+           the shift so that the R/R comparison is actually needed.  */
+        for (ci = 0, actioni = bitset_first (self->inadequacyNode->inadequacy
+                                             .conflict.actions);
+             ci < self->inadequacyNode->contributionCount;
+             ++ci, actioni = bitset_next (self->inadequacyNode->inadequacy
+                                          .conflict.actions, actioni+1))
+          {
+            int reduce_precedence = 0;
+            if (ci == ci_shift)
+              continue;
+            {
+              rule *r = self->inadequacyNode->manifestingState
+                          ->reductions->rules[actioni];
+              if (r->prec)
+                reduce_precedence = r->prec->prec;
+            }
+            /* If there's no need to check whether this reduction actually
+               contributes because the shift eliminates it from the R/R
+               comparison anyway, continue to the next reduction.  */
+            if (reduce_precedence
+                && (reduce_precedence < shift_precedence
+                    || (reduce_precedence == shift_precedence
+                        && token->assoc == right_assoc)))
+              continue;
+            if (!AnnotationList__stateMakesContribution (self, nitems, ci,
+                                                         lookaheads))
+              continue;
+            /* This uneliminated reduction contributes, so see if it can cause
+               an error action.  */
+            if (reduce_precedence == shift_precedence
+                 && token->assoc == non_assoc)
+              {
+                /* It's not possible to find split-stable domination over
+                   shift after a potential %nonassoc.  */
+                if (find_stable_domination_over_shift)
+                  return ContributionIndex__none;
+                if (!require_split_stable
+                    || AnnotationList__isContributionAlways (self, ci))
+                  return ContributionIndex__error_action;
+                find_stable_error_action_domination = true;
+              }
+            /* Consider this uneliminated contributing reduction in the R/R
+               comparison.  */
+            if (ci_rr_dominator == ContributionIndex__none)
+              ci_rr_dominator = ci;
+            /* If precedence is set for this uneliminated contributing
+               reduction, it dominates the shift, so try to figure out which
+               reduction dominates the R/R comparison.  */
+            if (reduce_precedence)
+              {
+                /* It's not possible to find split-stable error action
+                   domination after a potential reduction.  */
+                if (find_stable_error_action_domination)
+                  return ContributionIndex__none;
+                if (!require_split_stable)
+                  return ci_rr_dominator;
+                if (!AnnotationList__isContributionAlways (self,
+                                                           ci_rr_dominator))
+                  return ContributionIndex__none;
+                if (AnnotationList__isContributionAlways (self, ci))
+                  return ci_rr_dominator;
+                find_stable_domination_over_shift = true;
+              }
+          }
+      }
+      if (find_stable_domination_over_shift
+          || find_stable_error_action_domination)
+        return ContributionIndex__none;
+      /* No reduce or error action domination found, so shift dominates.  */
+      return ci_shift;
+    }
+
+  /* R/R conflict, so the reduction with the lowest rule number dominates.
+     Fortunately, contributions are sorted by rule number.  */
+  {
+    ContributionIndex ci;
+    for (ci = 0; ci < self->inadequacyNode->contributionCount; ++ci)
+      if (AnnotationList__stateMakesContribution (self, nitems, ci,
+                                                  lookaheads))
+        {
+          if (require_split_stable
+              && !AnnotationList__isContributionAlways (self, ci))
+            return ContributionIndex__none;
+          return ci;
+        }
+  }
+  return ContributionIndex__none;
+}
diff --git a/src/AnnotationList.h b/src/AnnotationList.h
new file mode 100644
index 0000000..3088a83
--- /dev/null
+++ b/src/AnnotationList.h
@@ -0,0 +1,182 @@
+/* IELR's inadequacy annotation list.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ANNOTATION_LIST_H_
+# define ANNOTATION_LIST_H_
+
+#include <bitsetv.h>
+#include "Sbitset.h"
+#include "InadequacyList.h"
+#include "state.h"
+
+typedef unsigned int AnnotationIndex;
+
+/**
+ * A node in a list of annotations on a particular LR(0) state.  Each
+ * annotation records how isocores of that LR(0) state might contribute to an
+ * individual inadequacy, which might manifest in a different state.  Don't
+ * break encapsulation by modifying the fields directly.  Use the provided
+ * interface functions.
+ */
+typedef struct AnnotationList
+{
+  /** The next node in the list or \c NULL if none.  */
+  struct AnnotationList *next;
+  /** The \c InadequacyList node describing how this inadequacy manifests.  */
+  InadequacyList *inadequacyNode;
+  /**
+   * List of how the "always", "never", and potential contributions of the
+   * inadequacy might be made by isocores of the annotated LR(0) state:
+   *   - The number of rows is the number of contributions.  That is,
+   *     <tt>AnnotationList::inadequacyNode->contributionCount</tt>.
+   *   - The token associated with contribution \c i is
+   *     <tt>InadequacyList__getContributionToken (AnnotationList::inadequacyNode, i)</tt>.
+   *   - Iff <tt>AnnotationList::contributions[i] = NULL</tt>, contribution
+   *     \c i is an "always" contribution.  That is, for every isocore of the
+   *     annotated LR(0) state, its core or the core of one its eventual
+   *     successors will definitely make this contribution to the inadequacy.
+   *     It may contribute by either:
+   *     - Creating a shift of contribution <tt>i</tt>'s token in the state
+   *       that can manifest the inadequacy.
+   *     - Propagating that token to the lookahead set of contribution
+   *       <tt>i</tt>'s reduction in the state that can manifest the
+   *       inadequacy.
+   *   - Otherwise:
+   *     - The number of columns in <tt>AnnotationList::contributions[i]</tt>
+   *       is the number of kernel items in any isocore of the annotated LR(0)
+   *       state.
+   *     - Iff <tt>AnnotationList::contributions[i]</tt> is empty, contribution
+   *       \c i is a "never" contribution.  That is, no isocore of the
+   *       annotated LR(0) state can make this contribution to the inadequacy.
+   *     - Otherwise, for each bit \c j that is set in
+   *       <tt>AnnotationList::contributions[i]</tt>, if the token associated
+   *       with contribution \c i is present in the lookahead set of kernel
+   *       item \c j of an isocore of the annotated LR(0) state, that isocore
+   *       will make contribution \c i to the inadequacy by propagating the
+   *       contribution's token to the lookahead set of the contribution's
+   *       reduction in the state that can manifest the inadequacy.
+   */
+  Sbitset contributions[1];
+} AnnotationList;
+
+/**
+ * \pre
+ *   - <tt>s != NULL</tt>.
+ *   - \c follow_kernel_items, \c always_follows, and \c predecessors were
+ *     computed by \c ielr_compute_auxiliary_tables.
+ *   - The size of each of \c annotation_lists and \c annotation_counts is
+ *     \c ::nstates.
+ *   - If no \c InadequacyList nodes are currently allocated for the
+ *     parser tables to which \c s belongs, then it is best if
+ *     <tt>*inadequacy_list_node_count</tt> is zero to avoid overflow.
+ *     Otherwise, <tt>*inadequacy_list_node_count</tt> has not been
+ *     modified by any function except
+ *     \c AnnotationList__compute_from_inadequacies since the invocation
+ *     of \c AnnotationList__compute_from_inadequacies that constructed
+ *     the first of the \c InadequacyList nodes currently allocated for
+ *     those parser tables.
+ * \post
+ *   - <tt>inadequacy_lists[s->number]</tt> now describes all inadequacies that
+ *     manifest in \c s.
+ *   - For every state <tt>states[i]</tt>, <tt>annotation_lists[i]</tt> now
+ *     contains all annotations associated with all inadequacies that manifest
+ *     in \c s.
+ *   - <tt>annotation_counts[i]</tt> was incremented by the number of new
+ *     annotations added to <tt>states[i]</tt>.
+ *   - <tt>*max_contributionsp</tt> is the higher of:
+ *     - The maximum number of contributions computed per annotation.
+ *     - <tt>*max_contributionsp \@pre</tt>.
+ *   - All memory for all new annotations was allocated on
+ *     \c annotations_obstackp.
+ */
+void
+AnnotationList__compute_from_inadequacies (
+  state *s, bitsetv follow_kernel_items, bitsetv always_follows,
+  state ***predecessors, bitset **item_lookahead_sets,
+  InadequacyList **inadequacy_lists, AnnotationList **annotation_lists,
+  AnnotationIndex *annotation_counts,
+  ContributionIndex *max_contributionsp,
+  struct obstack *annotations_obstackp,
+  InadequacyListNodeCount *inadequacy_list_node_count);
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - \c nitems is the number of kernel items in the LR(0) state that every
+ *     node in the list \c self annotates.
+ * \post
+ *   - A textual representation of all nodes in the list \c self was printed to
+ *     stderr.  \c spaces spaces were printed before each line of the text.
+ */
+void AnnotationList__debug (AnnotationList const *self, size_t nitems,
+                            int spaces);
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - \c nitems is the number of kernel items in the LR(0) state that \c self
+ *     annotates.
+ *   - The number of rows in \c lookahead_filter is at least \c nitems, and the
+ *     number of columns is \c ::ntokens.
+ * \post
+ *   - <tt>lookahead_filter[i][j]</tt> is set iff some annotation in the list
+ *     \c self lists token \c j in kernel item \c i as a contributor.
+ */
+void AnnotationList__computeLookaheadFilter (AnnotationList const *self,
+                                             size_t nitems,
+                                             bitsetv lookahead_filter);
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - \c nitems is the number of kernel items in the LR(0) state that \c self
+ *     annotates.
+ *   - \c lookaheads describes the lookahead sets on the kernel items of some
+ *     isocore of the LR(0) state that \c self annotates.  Either:
+ *     - <tt>lookaheads = NULL</tt> only if the lookahead set on every kernel
+ *       item is empty.
+ *     - For any <tt>0 <= i < nitems</tt>, <tt>lookaheads[i]</tt> is either:
+ *       - \c NULL only if the lookahead set on kernel item \c i is empty.
+ *       - The (possibly empty) lookahead set on kernel item \c i.
+ * \post
+ *   - If <tt>require_split_stable = false</tt>, \c result = either:
+ *     - \c ContributionIndex__none iff the state described by \c lookaheads
+ *       makes none of the contributions in \c self.
+ *     - The index of the dominating contribution in \c self that is made by
+ *       that state.
+ *     - \c ContributionIndex__error_action to indicate that the inadequacy
+ *       manifests as a conflict and that a syntax error action (because of a
+ *       %nonassoc) dominates instead.
+ *   - Otherwise, \c result is the same as if <tt>require_split_stable =
+ *     false</tt> except that it is also \c ContributionIndex__none if there
+ *     are contributions made by the state but the dominating contribution is
+ *     not split-stable.  By split-stable, we mean that the dominating
+ *     contribution cannot change due to loss of one or more potential
+ *     contributions due to loss of lookaheads due to splitting of the state.
+ *   - After determining which contributions are actually made by the state,
+ *     the algorithm for determining which contribution dominates in the
+ *     conflict is intended to choose exactly the same action as conflicts.c
+ *     would choose... no matter how crazy conflicts.c's choice is.
+ */
+ContributionIndex
+AnnotationList__computeDominantContribution (AnnotationList const *self,
+                                             size_t nitems, bitset *lookaheads,
+                                             bool require_split_stable);
+
+#endif /* !ANNOTATION_LIST_H_ */
diff --git a/src/InadequacyList.c b/src/InadequacyList.c
new file mode 100644
index 0000000..838685b
--- /dev/null
+++ b/src/InadequacyList.c
@@ -0,0 +1,79 @@
+/* IELR's inadequacy list.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+#include "system.h"
+
+#include "InadequacyList.h"
+
+ContributionIndex const ContributionIndex__none = -1;
+ContributionIndex const ContributionIndex__error_action = -2;
+
+InadequacyList *
+InadequacyList__new_conflict (state *manifesting_state, symbol *token,
+                              bitset actions,
+                              InadequacyListNodeCount *node_count)
+{
+  InadequacyList *result = xmalloc (sizeof *result);
+  result->id = (*node_count)++;
+  aver (*node_count != 0);
+  result->next = NULL;
+  result->manifestingState = manifesting_state;
+  result->contributionCount = bitset_count (actions);
+  result->inadequacy.conflict.token = token;
+  result->inadequacy.conflict.actions = actions;
+  return result;
+}
+
+void
+InadequacyList__delete (InadequacyList *self)
+{
+  while (self)
+    {
+      InadequacyList *node = self;
+      self = self->next;
+      bitset_free (node->inadequacy.conflict.actions);
+      free (node);
+    }
+}
+
+ContributionIndex
+InadequacyList__getShiftContributionIndex (InadequacyList const *self)
+{
+  if (!bitset_test (self->inadequacy.conflict.actions,
+                    self->manifestingState->reductions->num))
+    return ContributionIndex__none;
+  return self->contributionCount - 1;
+}
+
+symbol *
+InadequacyList__getContributionToken (InadequacyList const *self,
+                                      ContributionIndex i)
+{
+  aver (0 <= i && i < self->contributionCount);
+  return self->inadequacy.conflict.token;
+}
+
+void
+InadequacyList__prependTo (InadequacyList *self, InadequacyList **list)
+{
+  InadequacyList *head_old = *list;
+  *list = self;
+  self->next = head_old;
+}
diff --git a/src/InadequacyList.h b/src/InadequacyList.h
new file mode 100644
index 0000000..d8120dd
--- /dev/null
+++ b/src/InadequacyList.h
@@ -0,0 +1,156 @@
+/* IELR's inadequacy list.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef INADEQUACY_LIST_H_
+# define INADEQUACY_LIST_H_
+
+#include <bitset.h>
+#include "gram.h"
+#include "state.h"
+#include "symtab.h"
+
+/**
+ * A unique ID assigned to every \c InadequacyList node.
+ *
+ * This must remain unsigned so that the overflow check in
+ * \c InadequacyList__new_conflict works properly.
+ */
+typedef unsigned long long int InadequacyListNodeCount;
+
+/**
+ * For a conflict, each rule in the grammar can have at most one contributing
+ * reduction except that rule 0 cannot have any because the reduction on rule 0
+ * cannot have lookaheads.  For a conflict, exactly one shift can contribute.
+ * Thus the number of rules in the grammar is an upper bound on the number of
+ * possible contributions to any conflict.  The maximum number of possible
+ * items in a state is also an upper bound, but the \c nitems member of \c
+ * state is currently a \c size_t and thus, if changed, risks becoming out of
+ * sync with this type.  Whatever the type, it must support negatives for sake
+ * of the special values below.
+ */
+typedef rule_number ContributionIndex;
+
+/* Special \c ContributionIndex used to indicate null result when looking for a
+   contribution.  */
+extern ContributionIndex const ContributionIndex__none;
+
+/* Special \c ContributionIndex used by
+   \c AnnotationList__computeDominantContribution to signal when the action
+   chosen in a conflict is a syntax error because of a %nonassoc.  */
+extern ContributionIndex const ContributionIndex__error_action;
+
+/**
+ * The description of a conflict.  Don't break encapsulation by modifying the
+ * fields directly.  Use the provided interface functions for
+ * \c InadequacyList.
+ */
+typedef struct {
+  /** The \c token passed to \c InadequacyList__new_conflict.  */
+  symbol *token;
+  /** The \c actions passed to \c InadequacyList__new_conflict.  */
+  bitset actions;
+} Conflict;
+
+/**
+ * A node in a list that describes all the inadequacies that manifest in a
+ * particular state.  Don't break encapsulation by modifying the fields
+ * directly.  Use the provided interface functions.
+ */
+typedef struct InadequacyList {
+  struct InadequacyList *next;
+  InadequacyListNodeCount id;
+  state *manifestingState;
+  ContributionIndex contributionCount;
+  union {
+    Conflict conflict;
+  } inadequacy;
+} InadequacyList;
+
+/**
+ * \pre
+ *   - <tt>manifesting_state != NULL</tt>.
+ *   - \c token is a token.
+ *   - The size of \c actions is
+ *     <tt>manifesting_state->reductions->num + 1</tt>.
+ *   - If the set of all \c InadequacyList nodes with which the new
+ *     \c InadequacyList node might be compared is currently empty, then
+ *     it is best if <tt>*node_count</t> is zero so that the node count
+ *     does not eventually overflow.  However, if that set is not
+ *     currently empty, then <tt>*node_count</tt> has not been modified
+ *     by any function except \c InadequacyList__new_conflict since the
+ *     invocation of \c InadequacyList__new_conflict that constructed
+ *     the first existing member of that set.
+ * \post
+ *   - \c result is a new \c InadequacyList with one node indicating that, in
+ *     \c manifesting_state, the following actions are in conflict on \c token:
+ *     - Shift iff
+ *       <tt>bitset_test (actions, manifesting_state->reductions->num)</tt>.
+ *     - For any \c i such that
+ *       <tt>0 <= i < manifesting_state->reductions->num</tt>, the reduction
+ *       for the rule <tt>manifesting_state->reductions->rules[i]</tt> iff
+ *       <tt>actions[i]</tt> is set.
+ *   - Given any node \c n from the set of all existing
+ *     \c InadequacyList nodes with which \c result might be compared
+ *     such that <tt>n != result</tt>, then <tt>n->id < result->id</tt>.
+ *   - \c result assumes responsibility for the memory of \c actions.
+ */
+InadequacyList *InadequacyList__new_conflict (
+  state *manifesting_state, symbol *token, bitset actions,
+  InadequacyListNodeCount *node_count);
+
+/**
+ * \post
+ *   - All memory associated with all nodes in the list \c self was freed.
+ */
+void InadequacyList__delete (InadequacyList *self);
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ * \post
+ *   - \c result = either:
+ *     - \c ContributionIndex__none iff there is no shift contribution in
+ *       \c self (perhaps because \c self isn't a conflict).
+ *     - The index of the shift contribution, otherwise.
+ */
+ContributionIndex
+InadequacyList__getShiftContributionIndex (InadequacyList const *self);
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - <tt>0 <= i < self->contributionCount</tt>.
+ * \post
+ *   - \c result = the token associated with contribution \c i in the
+ *     inadequacy described by the node \c self.
+ */
+symbol *InadequacyList__getContributionToken (InadequacyList const *self,
+                                              ContributionIndex i);
+
+/**
+ * \pre
+ *   - \c self is a single node.
+ *   - <tt>list != NULL</tt>.
+ * \post
+ *   - \c list now contains \c self as its first node.
+ *   - \c list assumes responsibility for the memory of \c self.
+ */
+void InadequacyList__prependTo (InadequacyList *self, InadequacyList **list);
+
+#endif /* !INADEQUACY_LIST_H_ */
diff --git a/src/LR0.c b/src/LR0.c
index 259b891..37bfe81 100644
--- a/src/LR0.c
+++ b/src/LR0.c
@@ -1,24 +1,22 @@
-/* Generate the nondeterministic finite state machine for Bison.
+/* Generate the LR(0) parser states for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 2000, 2001, 2002, 2004, 2005 Free
+   Copyright (C) 1984, 1986, 1989, 2000-2002, 2004-2007, 2009-2012 Free
    Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 /* See comments in state.h for the data structures that represent it.
@@ -28,7 +26,6 @@
 #include "system.h"
 
 #include <bitset.h>
-#include <quotearg.h>
 
 #include "LR0.h"
 #include "closure.h"
@@ -169,6 +166,10 @@
 | shifted.  For each symbol in the grammar, kernel_base[symbol]  |
 | points to a vector of item numbers activated if that symbol is |
 | shifted, and kernel_size[symbol] is their numbers.             |
+|                                                                |
+| itemset is sorted on item index in ritem, which is sorted on   |
+| rule number.  Compute each kernel_base[symbol] with the same   |
+| sort.                                                          |
 `---------------------------------------------------------------*/
 
 static void
@@ -183,8 +184,8 @@
 
   nshifts = 0;
 
-  for (i = 0; i < nritemset; ++i)
-    if (ritem[itemset[i]] >= 0)
+  for (i = 0; i < nitemset; ++i)
+    if (item_number_is_symbol_number (ritem[itemset[i]]))
       {
 	symbol_number sym = item_number_as_symbol_number (ritem[itemset[i]]);
 	if (!kernel_size[sym])
@@ -272,7 +273,7 @@
   size_t i;
 
   /* Find and count the active items that represent ends of rules. */
-  for (i = 0; i < nritemset; ++i)
+  for (i = 0; i < nitemset; ++i)
     {
       item_number item = ritem[itemset[i]];
       if (item_number_is_rule_number (item))
@@ -282,7 +283,7 @@
 	  if (r == 0)
 	    {
 	      /* This is "reduce 0", i.e., accept. */
-	      assert (!final_state);
+	      aver (!final_state);
 	      final_state = s;
 	    }
 	}
@@ -327,8 +328,8 @@
 
 
 /*-------------------------------------------------------------------.
-| Compute the nondeterministic finite state machine (see state.h for |
-| details) from the grammar.                                         |
+| Compute the LR(0) parser states (see state.h for details) from the |
+| grammar.                                                           |
 `-------------------------------------------------------------------*/
 
 void
@@ -351,10 +352,8 @@
 	fprintf (stderr, "Processing state %d (reached by %s)\n",
 		 s->number,
 		 symbols[s->accessing_symbol]->tag);
-      /* Set up ruleset and itemset for the transitions out of this
-         state.  ruleset gets a 1 bit for each rule that could reduce
-         now.  itemset gets a vector of all the items that could be
-         accepted next.  */
+      /* Set up itemset for the transitions out of this state.  itemset gets a
+         vector of all the items that could be accepted next.  */
       closure (s->items, s->nitems);
       /* Record the reductions allowed out of this state.  */
       save_reductions (s);
diff --git a/src/LR0.h b/src/LR0.h
index 6004538..45f922a 100644
--- a/src/LR0.h
+++ b/src/LR0.h
@@ -1,22 +1,22 @@
-/* Generate the nondeterministic finite state machine for bison,
-   Copyright 1984, 1986, 1989, 2000, 2001, 2002  Free Software Foundation, Inc.
+/* Generate the LR(0) parser states for Bison.
+
+   Copyright (C) 1984, 1986, 1989, 2000-2002, 2009-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef LR0_H_
 # define LR0_H_
diff --git a/src/Makefile b/src/Makefile
deleted file mode 100644
index eeb1d5b..0000000
--- a/src/Makefile
+++ /dev/null
@@ -1,655 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# src/Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-
-
-srcdir = .
-top_srcdir = ..
-
-pkgdatadir = $(datadir)/bison
-pkglibdir = $(libdir)/bison
-pkgincludedir = $(includedir)/bison
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /usr/bin/install -c
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-bin_PROGRAMS = bison$(EXEEXT)
-subdir = src
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in parse-gram.c \
-	scan-gram.c scan-skel.c
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
-	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
-	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
-	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-PROGRAMS = $(bin_PROGRAMS)
-am_bison_OBJECTS = LR0.$(OBJEXT) assoc.$(OBJEXT) closure.$(OBJEXT) \
-	complain.$(OBJEXT) conflicts.$(OBJEXT) derives.$(OBJEXT) \
-	files.$(OBJEXT) getargs.$(OBJEXT) gram.$(OBJEXT) \
-	lalr.$(OBJEXT) location.$(OBJEXT) main.$(OBJEXT) \
-	muscle_tab.$(OBJEXT) nullable.$(OBJEXT) output.$(OBJEXT) \
-	parse-gram.$(OBJEXT) print.$(OBJEXT) print_graph.$(OBJEXT) \
-	reader.$(OBJEXT) reduce.$(OBJEXT) relation.$(OBJEXT) \
-	scan-gram-c.$(OBJEXT) scan-skel-c.$(OBJEXT) state.$(OBJEXT) \
-	symlist.$(OBJEXT) symtab.$(OBJEXT) tables.$(OBJEXT) \
-	uniqstr.$(OBJEXT) vcg.$(OBJEXT)
-bison_OBJECTS = $(am_bison_OBJECTS)
-bison_LDADD = $(LDADD)
-am__DEPENDENCIES_1 =
-bison_DEPENDENCIES = ../lib/libbison.a $(am__DEPENDENCIES_1)
-binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
-SCRIPTS = $(bin_SCRIPTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
-YLWRAP = $(top_srcdir)/build-aux/ylwrap
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
-SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES)
-DIST_SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9
-AMDEP_FALSE = #
-AMDEP_TRUE = 
-AMTAR = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar
-AUTOCONF = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader
-AUTOM4TE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te
-AUTOMAKE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9
-AWK = gawk
-BISON_CXX_WORKS = :
-BISON_CXX_WORKS_FALSE = #
-BISON_CXX_WORKS_TRUE = 
-BISON_LOCALEDIR = /usr/share/locale
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
-CPP = gcc -E
-CPPFLAGS = 
-CXX = g++
-CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H -DPKGDATADIR=\"$(pkgdatadir)\" \
-	-DLOCALEDIR=\"$(datadir)/locale\"
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = grep -E
-EXEEXT = 
-GCC = yes
-GETOPT_H = 
-GMSGFMT = /usr/bin/msgfmt
-HAVE__BOOL = 1
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
-INTLLIBS = 
-INTL_MACOSX_LIBS = 
-LDFLAGS = 
-LEX = flex
-LEXLIB = -lfl
-LEX_OUTPUT_ROOT = lex.yy
-LIBICONV = -liconv
-LIBINTL = 
-LIBOBJS =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-LIBS = 
-LTLIBICONV = -liconv
-LTLIBINTL = 
-LTLIBOBJS =  dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo
-M4 = /usr/bin/m4
-MAKEINFO = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo
-MKINSTALLDIRS = $(top_builddir)/build-aux/mkinstalldirs
-MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge
-O0CFLAGS = -g 
-O0CXXFLAGS = -g 
-OBJEXT = o
-PACKAGE = bison
-PACKAGE_BUGREPORT = bug-bison@gnu.org
-PACKAGE_NAME = GNU Bison
-PACKAGE_STRING = GNU Bison 2.3
-PACKAGE_TARNAME = bison
-PACKAGE_VERSION = 2.3
-PATH_SEPARATOR = :
-POSUB = po
-RANLIB = ranlib
-SET_MAKE = 
-SHELL = /bin/sh
-STDBOOL_H = 
-STRIP = 
-UNISTD_H = 
-USE_NLS = yes
-VALGRIND = 
-VERSION = 2.3
-WARNING_CFLAGS = 
-WARNING_CXXFLAGS = 
-WERROR_CFLAGS = 
-XGETTEXT = /usr/bin/xgettext
-
-# Use our own Bison to build the parser.  Of course, you ought to
-# keep a sane version of Bison nearby...
-YACC = ../tests/bison -y
-YACC_LIBRARY = liby.a
-YACC_SCRIPT = yacc
-ac_ct_CC = gcc
-ac_ct_CXX = g++
-ac_ct_RANLIB = ranlib
-ac_ct_STRIP = 
-aclocaldir = ${datadir}/aclocal
-am__fastdepCC_FALSE = #
-am__fastdepCC_TRUE = 
-am__fastdepCXX_FALSE = #
-am__fastdepCXX_TRUE = 
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-datadir = ${prefix}/share
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-includedir = ${prefix}/include
-infodir = ${prefix}/info
-install_sh = /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localstatedir = ${prefix}/var
-mandir = ${prefix}/man
-mkdir_p = mkdir -p --
-oldincludedir = /usr/include
-prefix = /home/phanna/src/bison
-program_transform_name = s,x,x,
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-sysconfdir = ${prefix}/etc
-target_alias = 
-AM_CFLAGS = $(WARNING_CFLAGS) $(WERROR_CFLAGS)
-AM_CPPFLAGS = -I$(top_srcdir)/lib -I../lib
-AM_YFLAGS = "-dv"
-LDADD = ../lib/libbison.a $(LIBINTL)
-bin_SCRIPTS = $(YACC_SCRIPT)
-EXTRA_SCRIPTS = yacc
-bison_SOURCES = \
-	LR0.c LR0.h				  \
-	assoc.c assoc.h				  \
-	closure.c closure.h			  \
-	complain.c complain.h			  \
-	conflicts.c conflicts.h			  \
-	derives.c derives.h			  \
-	files.c files.h				  \
-	getargs.c getargs.h			  \
-	gram.c gram.h				  \
-	lalr.h lalr.c				  \
-	location.c location.h			  \
-	main.c					  \
-	muscle_tab.c muscle_tab.h		  \
-	nullable.c nullable.h			  \
-	output.c output.h			  \
-	parse-gram.h parse-gram.y		  \
-	print.c print.h				  \
-	print_graph.c print_graph.h		  \
-	reader.c reader.h			  \
-	reduce.c reduce.h			  \
-	relation.c relation.h			  \
-	scan-gram-c.c				  \
-	scan-skel-c.c scan-skel.h		  \
-	state.c state.h				  \
-	symlist.c symlist.h			  \
-	symtab.c symtab.h			  \
-	system.h				  \
-	tables.h tables.c			  \
-	uniqstr.c uniqstr.h			  \
-	vcg.c vcg.h				  \
-	vcg_defaults.h
-
-EXTRA_bison_SOURCES = scan-skel.l scan-gram.l
-BUILT_SOURCES = scan-skel.c scan-gram.c parse-gram.c parse-gram.h
-MOSTLYCLEANFILES = yacc
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .l .o .obj .y
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-binPROGRAMS: $(bin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
-	  else :; fi; \
-	done
-
-uninstall-binPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
-	done
-
-clean-binPROGRAMS:
-	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-bison$(EXEEXT): $(bison_OBJECTS) $(bison_DEPENDENCIES) 
-	@rm -f bison$(EXEEXT)
-	$(LINK) $(bison_LDFLAGS) $(bison_OBJECTS) $(bison_LDADD) $(LIBS)
-install-binSCRIPTS: $(bin_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-	@list='$(bin_SCRIPTS)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f $$d$$p; then \
-	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-	    echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-	    $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
-	  else :; fi; \
-	done
-
-uninstall-binSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(bin_SCRIPTS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
-	done
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-include ./$(DEPDIR)/LR0.Po
-include ./$(DEPDIR)/assoc.Po
-include ./$(DEPDIR)/closure.Po
-include ./$(DEPDIR)/complain.Po
-include ./$(DEPDIR)/conflicts.Po
-include ./$(DEPDIR)/derives.Po
-include ./$(DEPDIR)/files.Po
-include ./$(DEPDIR)/getargs.Po
-include ./$(DEPDIR)/gram.Po
-include ./$(DEPDIR)/lalr.Po
-include ./$(DEPDIR)/location.Po
-include ./$(DEPDIR)/main.Po
-include ./$(DEPDIR)/muscle_tab.Po
-include ./$(DEPDIR)/nullable.Po
-include ./$(DEPDIR)/output.Po
-include ./$(DEPDIR)/parse-gram.Po
-include ./$(DEPDIR)/print.Po
-include ./$(DEPDIR)/print_graph.Po
-include ./$(DEPDIR)/reader.Po
-include ./$(DEPDIR)/reduce.Po
-include ./$(DEPDIR)/relation.Po
-include ./$(DEPDIR)/scan-gram-c.Po
-include ./$(DEPDIR)/scan-gram.Po
-include ./$(DEPDIR)/scan-skel-c.Po
-include ./$(DEPDIR)/scan-skel.Po
-include ./$(DEPDIR)/state.Po
-include ./$(DEPDIR)/symlist.Po
-include ./$(DEPDIR)/symtab.Po
-include ./$(DEPDIR)/tables.Po
-include ./$(DEPDIR)/uniqstr.Po
-include ./$(DEPDIR)/vcg.Po
-
-.c.o:
-	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-#	source='$<' object='$@' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(COMPILE) -c $<
-
-.c.obj:
-	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-#	source='$<' object='$@' libtool=no \
-#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
-#	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.l.c:
-	$(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
-
-.y.c:
-	$(YACCCOMPILE) $<
-	if test -f y.tab.h; then \
-	  to=`echo "$*_H" | sed \
-                -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
-                -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`; \
-	  sed -e "/^#/!b" -e "s/Y_TAB_H/$$to/g" -e "s|y\.tab\.h|$*.h|" \
-            y.tab.h >$*.ht; \
-	  rm -f y.tab.h; \
-	  if cmp -s $*.ht $*.h; then \
-	    rm -f $*.ht ;\
-	  else \
-	    mv $*.ht $*.h; \
-	  fi; \
-	fi
-	if test -f y.output; then \
-	  mv y.output $*.output; \
-	fi
-	sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@t && mv $@t $@
-	rm -f y.tab.c
-uninstall-info-am:
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(PROGRAMS) $(SCRIPTS)
-installdirs:
-	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
-	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-rm -f parse-gram.c
-	-rm -f scan-gram.c
-	-rm -f scan-skel.c
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
-clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-exec-am: install-binPROGRAMS install-binSCRIPTS
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
-	uninstall-info-am
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-	clean-generic ctags distclean distclean-compile \
-	distclean-generic distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-binPROGRAMS \
-	install-binSCRIPTS install-data install-data-am install-exec \
-	install-exec-am install-info install-info-am install-man \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-binPROGRAMS \
-	uninstall-binSCRIPTS uninstall-info-am
-
-
-yacc:
-	echo '#! /bin/sh' >$@
-	echo 'exec $(bindir)/bison -y "$$@"' >>$@
-	chmod a+x $@
-
-echo:
-	echo $(bison_SOURCES) $(noinst_HEADERS)
-
-# The following rule is not designed to be portable,
-# and relies on tools that not everyone has.
-
-# Most functions in src/*.c should have static scope.
-# Any that don't must be marked with `extern', but `main'
-# and `usage' are exceptions.  They're always extern, but
-# don't need to be marked.
-#
-# The second nm|grep checks for file-scope variables with `extern' scope.
-sc_tight_scope: $(all_programs)
-	@t=exceptions-$$$$;						\
-	trap 's=$$?; rm -f $$t; exit $$s' 0 1 2 13 15;			\
-	( printf '^main$$\n^usage$$\n';					\
-	  grep -h -A1 '^extern .*[^;]$$' $(SOURCES)			\
-	    | grep -vE '^(extern |--)' |sed 's/^/^/;s/ .*/$$/' ) > $$t;	\
-	if nm -e *.$(OBJEXT)						\
-	    | sed -n 's/.* T //p'					\
-	    | grep -Ev -f $$t; then					\
-	  echo 'the above functions should have static scope' 1>&2;	\
-	  exit 1;							\
-	fi;								\
-	( printf '^program_name$$\n';					\
-	  sed -n 's/^extern .*[* ]\([a-zA-Z_][a-zA-Z_0-9]*\);$$/^\1$$/p' \
-	    $$(ls $(SOURCES) | grep '\.h$$') /dev/null) > $$t;		\
-	if nm -e *.$(OBJEXT)						\
-	    | sed -n 's/.* [BD] //p'					\
-	    | grep -Ev -f $$t; then					\
-	  echo 'the above variables should have static scope' 1>&2;	\
-	  exit 1;							\
-	fi
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/Makefile.am b/src/Makefile.am
index c973e9e..511b905 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,82 +1,89 @@
-## Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Make bison/src.
 
-## 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 of the License, or
-## (at your option) any later version.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 
-## 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.
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
-## 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., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301  USA
-
-DEFS += -DPKGDATADIR=\"$(pkgdatadir)\" -DLOCALEDIR=\"$(datadir)/locale\"
-
-AM_CFLAGS = $(WARNING_CFLAGS) $(WERROR_CFLAGS)
-AM_CPPFLAGS = -I$(top_srcdir)/lib -I../lib
-AM_YFLAGS = "-dv"
-
-LDADD = ../lib/libbison.a $(LIBINTL)
-
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir)/lib
+BISON = ../tests/bison
 # Use our own Bison to build the parser.  Of course, you ought to
 # keep a sane version of Bison nearby...
-YACC = ../tests/bison -y
+YACC = $(BISON) -y
+AM_YFLAGS = -d -v --warnings=all,error --report=all
+
+LDADD = ../lib/libbison.a $(LIBINTL)
 
 bin_PROGRAMS = bison
 bin_SCRIPTS = $(YACC_SCRIPT)
 EXTRA_SCRIPTS = yacc
 
-bison_SOURCES =					  \
-	LR0.c LR0.h				  \
-	assoc.c assoc.h				  \
-	closure.c closure.h			  \
-	complain.c complain.h			  \
-	conflicts.c conflicts.h			  \
-	derives.c derives.h			  \
-	files.c files.h				  \
-	getargs.c getargs.h			  \
-	gram.c gram.h				  \
-	lalr.h lalr.c				  \
-	location.c location.h			  \
-	main.c					  \
-	muscle_tab.c muscle_tab.h		  \
-	nullable.c nullable.h			  \
-	output.c output.h			  \
-	parse-gram.h parse-gram.y		  \
-	print.c print.h				  \
-	print_graph.c print_graph.h		  \
-	reader.c reader.h			  \
-	reduce.c reduce.h			  \
-	relation.c relation.h			  \
-	scan-gram-c.c				  \
-	scan-skel-c.c scan-skel.h		  \
-	state.c state.h				  \
-	symlist.c symlist.h			  \
-	symtab.c symtab.h			  \
-	system.h				  \
-	tables.h tables.c			  \
-	uniqstr.c uniqstr.h			  \
-	vcg.c vcg.h				  \
-	vcg_defaults.h
+bison_SOURCES =                                 \
+  AnnotationList.c AnnotationList.h             \
+  InadequacyList.c InadequacyList.h             \
+  LR0.c LR0.h                                   \
+  Sbitset.c Sbitset.h                           \
+  assoc.c assoc.h                               \
+  closure.c closure.h                           \
+  complain.c complain.h                         \
+  conflicts.c conflicts.h                       \
+  derives.c derives.h                           \
+  files.c files.h                               \
+  flex-scanner.h                                \
+  getargs.c getargs.h                           \
+  gram.c gram.h                                 \
+  lalr.h lalr.c                                 \
+  ielr.h ielr.c                                 \
+  location.c location.h                         \
+  main.c                                        \
+  muscle-tab.c muscle-tab.h                     \
+  named-ref.c named-ref.h                       \
+  nullable.c nullable.h                         \
+  output.c output.h                             \
+  parse-gram.y                                  \
+  print.c print.h                               \
+  print_graph.c print_graph.h                   \
+  print-xml.c print-xml.h                       \
+  reader.c reader.h                             \
+  reduce.c reduce.h                             \
+  relation.c relation.h                         \
+  scan-code.h scan-code-c.c                     \
+  scan-gram.h scan-gram-c.c                     \
+  scan-skel.h scan-skel-c.c                     \
+  state.c state.h                               \
+  symlist.c symlist.h                           \
+  symtab.c symtab.h                             \
+  system.h                                      \
+  tables.h tables.c                             \
+  uniqstr.c uniqstr.h                           \
+  graphviz.c graphviz.h
 
-EXTRA_bison_SOURCES = scan-skel.l scan-gram.l
+EXTRA_bison_SOURCES = scan-code.l scan-skel.l scan-gram.l
 
-BUILT_SOURCES = scan-skel.c scan-gram.c parse-gram.c parse-gram.h
+BUILT_SOURCES =                                 \
+  parse-gram.c parse-gram.h                     \
+  scan-code.c                                   \
+  scan-skel.c                                   \
+  scan-gram.c
 
 MOSTLYCLEANFILES = yacc
 
 yacc:
-	echo '#! /bin/sh' >$@
-	echo 'exec $(bindir)/bison -y "$$@"' >>$@
-	chmod a+x $@
+	$(AM_V_GEN)echo '#! /bin/sh' >$@
+	$(AM_V_at)echo "exec '$(bindir)/bison' -y "'"$$@"' >>$@
+	$(AM_V_at)chmod a+x $@
 
-echo:
-	echo $(bison_SOURCES) $(noinst_HEADERS)
 
 # The following rule is not designed to be portable,
 # and relies on tools that not everyone has.
diff --git a/src/Makefile.in b/src/Makefile.in
index 7de9081..304f2ce 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,16 +14,46 @@
 
 @SET_MAKE@
 
+# Make bison/src.
 
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
+# Copyright (C) 2001-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
+pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -39,171 +69,1305 @@
 host_triplet = @host@
 bin_PROGRAMS = bison$(EXEEXT)
 subdir = src
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in parse-gram.c \
-	scan-gram.c scan-skel.c
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \
+	parse-gram.c parse-gram.h scan-code.c scan-gram.c scan-skel.c
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
 	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
 	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
 	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
-am_bison_OBJECTS = LR0.$(OBJEXT) assoc.$(OBJEXT) closure.$(OBJEXT) \
-	complain.$(OBJEXT) conflicts.$(OBJEXT) derives.$(OBJEXT) \
-	files.$(OBJEXT) getargs.$(OBJEXT) gram.$(OBJEXT) \
-	lalr.$(OBJEXT) location.$(OBJEXT) main.$(OBJEXT) \
-	muscle_tab.$(OBJEXT) nullable.$(OBJEXT) output.$(OBJEXT) \
+am_bison_OBJECTS = AnnotationList.$(OBJEXT) InadequacyList.$(OBJEXT) \
+	LR0.$(OBJEXT) Sbitset.$(OBJEXT) assoc.$(OBJEXT) \
+	closure.$(OBJEXT) complain.$(OBJEXT) conflicts.$(OBJEXT) \
+	derives.$(OBJEXT) files.$(OBJEXT) getargs.$(OBJEXT) \
+	gram.$(OBJEXT) lalr.$(OBJEXT) ielr.$(OBJEXT) \
+	location.$(OBJEXT) main.$(OBJEXT) muscle-tab.$(OBJEXT) \
+	named-ref.$(OBJEXT) nullable.$(OBJEXT) output.$(OBJEXT) \
 	parse-gram.$(OBJEXT) print.$(OBJEXT) print_graph.$(OBJEXT) \
-	reader.$(OBJEXT) reduce.$(OBJEXT) relation.$(OBJEXT) \
-	scan-gram-c.$(OBJEXT) scan-skel-c.$(OBJEXT) state.$(OBJEXT) \
-	symlist.$(OBJEXT) symtab.$(OBJEXT) tables.$(OBJEXT) \
-	uniqstr.$(OBJEXT) vcg.$(OBJEXT)
+	print-xml.$(OBJEXT) reader.$(OBJEXT) reduce.$(OBJEXT) \
+	relation.$(OBJEXT) scan-code-c.$(OBJEXT) scan-gram-c.$(OBJEXT) \
+	scan-skel-c.$(OBJEXT) state.$(OBJEXT) symlist.$(OBJEXT) \
+	symtab.$(OBJEXT) tables.$(OBJEXT) uniqstr.$(OBJEXT) \
+	graphviz.$(OBJEXT)
 bison_OBJECTS = $(am_bison_OBJECTS)
 bison_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
 bison_DEPENDENCIES = ../lib/libbison.a $(am__DEPENDENCIES_1)
-binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 SCRIPTS = $(bin_SCRIPTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
+AM_V_LEX = $(am__v_LEX_@AM_V@)
+am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@)
+am__v_LEX_0 = @echo "  LEX     " $@;
+am__v_LEX_1 = 
 YLWRAP = $(top_srcdir)/build-aux/ylwrap
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
+		   -e s/c++$$/h++/ -e s/c$$/h/
+YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
+AM_V_YACC = $(am__v_YACC_@AM_V@)
+am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
+am__v_YACC_0 = @echo "  YACC    " $@;
+am__v_YACC_1 = 
 SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES)
 DIST_SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOM4TE = @AUTOM4TE@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BISON_CXX_WORKS = @BISON_CXX_WORKS@
-BISON_CXX_WORKS_FALSE = @BISON_CXX_WORKS_FALSE@
-BISON_CXX_WORKS_TRUE = @BISON_CXX_WORKS_TRUE@
+BISON_C_WORKS = @BISON_C_WORKS@
 BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
 CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@ -DPKGDATADIR=\"$(pkgdatadir)\" \
-	-DLOCALEDIR=\"$(datadir)/locale\"
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
+DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DOT = @DOT@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
 GCC = @GCC@
 GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
 HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
 LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
 LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
 MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
+MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
-O0CFLAGS = @O0CFLAGS@
-O0CXXFLAGS = @O0CXXFLAGS@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
 POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
 STRIP = @STRIP@
-UNISTD_H = @UNISTD_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
 VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
-
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
 # Use our own Bison to build the parser.  Of course, you ought to
 # keep a sane version of Bison nearby...
-YACC = ../tests/bison -y
+YACC = $(BISON) -y
 YACC_LIBRARY = @YACC_LIBRARY@
 YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 aclocaldir = @aclocaldir@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -215,69 +1379,100 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-AM_CFLAGS = $(WARNING_CFLAGS) $(WERROR_CFLAGS)
-AM_CPPFLAGS = -I$(top_srcdir)/lib -I../lib
-AM_YFLAGS = "-dv"
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir)/lib
+BISON = ../tests/bison
+AM_YFLAGS = -d -v --warnings=all,error --report=all
 LDADD = ../lib/libbison.a $(LIBINTL)
 bin_SCRIPTS = $(YACC_SCRIPT)
 EXTRA_SCRIPTS = yacc
 bison_SOURCES = \
-	LR0.c LR0.h				  \
-	assoc.c assoc.h				  \
-	closure.c closure.h			  \
-	complain.c complain.h			  \
-	conflicts.c conflicts.h			  \
-	derives.c derives.h			  \
-	files.c files.h				  \
-	getargs.c getargs.h			  \
-	gram.c gram.h				  \
-	lalr.h lalr.c				  \
-	location.c location.h			  \
-	main.c					  \
-	muscle_tab.c muscle_tab.h		  \
-	nullable.c nullable.h			  \
-	output.c output.h			  \
-	parse-gram.h parse-gram.y		  \
-	print.c print.h				  \
-	print_graph.c print_graph.h		  \
-	reader.c reader.h			  \
-	reduce.c reduce.h			  \
-	relation.c relation.h			  \
-	scan-gram-c.c				  \
-	scan-skel-c.c scan-skel.h		  \
-	state.c state.h				  \
-	symlist.c symlist.h			  \
-	symtab.c symtab.h			  \
-	system.h				  \
-	tables.h tables.c			  \
-	uniqstr.c uniqstr.h			  \
-	vcg.c vcg.h				  \
-	vcg_defaults.h
+  AnnotationList.c AnnotationList.h             \
+  InadequacyList.c InadequacyList.h             \
+  LR0.c LR0.h                                   \
+  Sbitset.c Sbitset.h                           \
+  assoc.c assoc.h                               \
+  closure.c closure.h                           \
+  complain.c complain.h                         \
+  conflicts.c conflicts.h                       \
+  derives.c derives.h                           \
+  files.c files.h                               \
+  flex-scanner.h                                \
+  getargs.c getargs.h                           \
+  gram.c gram.h                                 \
+  lalr.h lalr.c                                 \
+  ielr.h ielr.c                                 \
+  location.c location.h                         \
+  main.c                                        \
+  muscle-tab.c muscle-tab.h                     \
+  named-ref.c named-ref.h                       \
+  nullable.c nullable.h                         \
+  output.c output.h                             \
+  parse-gram.y                                  \
+  print.c print.h                               \
+  print_graph.c print_graph.h                   \
+  print-xml.c print-xml.h                       \
+  reader.c reader.h                             \
+  reduce.c reduce.h                             \
+  relation.c relation.h                         \
+  scan-code.h scan-code-c.c                     \
+  scan-gram.h scan-gram-c.c                     \
+  scan-skel.h scan-skel-c.c                     \
+  state.c state.h                               \
+  symlist.c symlist.h                           \
+  symtab.c symtab.h                             \
+  system.h                                      \
+  tables.h tables.c                             \
+  uniqstr.c uniqstr.h                           \
+  graphviz.c graphviz.h
 
-EXTRA_bison_SOURCES = scan-skel.l scan-gram.l
-BUILT_SOURCES = scan-skel.c scan-gram.c parse-gram.c parse-gram.h
+EXTRA_bison_SOURCES = scan-code.l scan-skel.l scan-gram.l
+BUILT_SOURCES = \
+  parse-gram.c parse-gram.h                     \
+  scan-code.c                                   \
+  scan-skel.c                                   \
+  scan-gram.c
+
 MOSTLYCLEANFILES = yacc
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -288,14 +1483,14 @@
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits src/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -313,51 +1508,119 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
-	  else :; fi; \
-	done
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	      echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	      $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
 
 uninstall-binPROGRAMS:
 	@$(NORMAL_UNINSTALL)
-	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
-	done
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
 clean-binPROGRAMS:
 	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-bison$(EXEEXT): $(bison_OBJECTS) $(bison_DEPENDENCIES) 
+
+installcheck-binPROGRAMS: $(bin_PROGRAMS)
+	bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
+	  case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+	   *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+	  esac; \
+	  f=`echo "$$p" | \
+	     sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  for opt in --help --version; do \
+	    if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+	         2>c$${pid}_.err </dev/null \
+		 && test -n "`cat c$${pid}_.out`" \
+		 && test -z "`cat c$${pid}_.err`"; then :; \
+	    else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+	  done; \
+	done; rm -f c$${pid}_.???; exit $$bad
+parse-gram.h: parse-gram.c
+	@if test ! -f $@; then rm -f parse-gram.c; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) parse-gram.c; else :; fi
+bison$(EXEEXT): $(bison_OBJECTS) $(bison_DEPENDENCIES) $(EXTRA_bison_DEPENDENCIES) 
 	@rm -f bison$(EXEEXT)
-	$(LINK) $(bison_LDFLAGS) $(bison_OBJECTS) $(bison_LDADD) $(LIBS)
+	$(AM_V_CCLD)$(LINK) $(bison_OBJECTS) $(bison_LDADD) $(LIBS)
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  if test -f $$d$$p; then \
-	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-	    echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-	    $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
-	  else :; fi; \
-	done
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	     } \
+	; done
 
 uninstall-binSCRIPTS:
 	@$(NORMAL_UNINSTALL)
-	@list='$(bin_SCRIPTS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
-	done
+	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+
+installcheck-binSCRIPTS: $(bin_SCRIPTS)
+	bad=0; pid=$$$$; list="$(bin_SCRIPTS)"; for p in $$list; do \
+	  case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+	   *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+	  esac; \
+	  f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \
+	  for opt in --help --version; do \
+	    if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+	         2>c$${pid}_.err </dev/null \
+		 && test -n "`cat c$${pid}_.out`" \
+		 && test -z "`cat c$${pid}_.err`"; then :; \
+	    else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+	  done; \
+	done; rm -f c$${pid}_.???; exit $$bad
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -365,7 +1628,10 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AnnotationList.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InadequacyList.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LR0.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sbitset.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assoc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closure.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complain.Po@am__quote@
@@ -374,18 +1640,24 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/files.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getargs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gram.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graphviz.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ielr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lalr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/location.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/muscle_tab.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/muscle-tab.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/named-ref.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nullable.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/output.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-gram.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-xml.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_graph.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reduce.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relation.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scan-code-c.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scan-code.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scan-gram-c.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scan-gram.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scan-skel-c.Po@am__quote@
@@ -395,119 +1667,120 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symtab.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tables.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uniqstr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcg.Po@am__quote@
 
 .c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .l.c:
-	$(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+	$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
 
 .y.c:
-	$(YACCCOMPILE) $<
-	if test -f y.tab.h; then \
-	  to=`echo "$*_H" | sed \
-                -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
-                -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`; \
-	  sed -e "/^#/!b" -e "s/Y_TAB_H/$$to/g" -e "s|y\.tab\.h|$*.h|" \
-            y.tab.h >$*.ht; \
-	  rm -f y.tab.h; \
-	  if cmp -s $*.ht $*.h; then \
-	    rm -f $*.ht ;\
-	  else \
-	    mv $*.ht $*.h; \
-	  fi; \
-	fi
-	if test -f y.output; then \
-	  mv y.output $*.output; \
-	fi
-	sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@t && mv $@t $@
-	rm -f y.tab.c
-uninstall-info-am:
+	$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
 	mkid -fID $$unique
 tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 	  done | \
-	  $(AWK) '    { files[$$0] = 1; } \
-	       END { for (i in files) print i; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -517,7 +1790,7 @@
 all-am: Makefile $(PROGRAMS) $(SCRIPTS)
 installdirs:
 	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) install-am
@@ -530,10 +1803,15 @@
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
@@ -541,11 +1819,14 @@
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 	-rm -f parse-gram.c
+	-rm -f parse-gram.h
+	-rm -f scan-code.c
 	-rm -f scan-gram.c
 	-rm -f scan-skel.c
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
@@ -565,19 +1846,39 @@
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
 
 install-data-am:
 
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
 install-exec-am: install-binPROGRAMS install-binSCRIPTS
 
+install-html: install-html-am
+
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
-installcheck-am:
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am: installcheck-binPROGRAMS installcheck-binSCRIPTS
 
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
@@ -596,29 +1897,30 @@
 
 ps-am:
 
-uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
-	uninstall-info-am
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS
+
+.MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-	clean-generic ctags distclean distclean-compile \
+	clean-generic cscopelist ctags distclean distclean-compile \
 	distclean-generic distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-binPROGRAMS \
-	install-binSCRIPTS install-data install-data-am install-exec \
-	install-exec-am install-info install-info-am install-man \
-	install-strip installcheck installcheck-am installdirs \
+	install-binSCRIPTS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am \
+	installcheck-binPROGRAMS installcheck-binSCRIPTS installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
 	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
 	tags uninstall uninstall-am uninstall-binPROGRAMS \
-	uninstall-binSCRIPTS uninstall-info-am
+	uninstall-binSCRIPTS
 
 
 yacc:
-	echo '#! /bin/sh' >$@
-	echo 'exec $(bindir)/bison -y "$$@"' >>$@
-	chmod a+x $@
-
-echo:
-	echo $(bison_SOURCES) $(noinst_HEADERS)
+	$(AM_V_GEN)echo '#! /bin/sh' >$@
+	$(AM_V_at)echo "exec '$(bindir)/bison' -y "'"$$@"' >>$@
+	$(AM_V_at)chmod a+x $@
 
 # The following rule is not designed to be portable,
 # and relies on tools that not everyone has.
@@ -650,6 +1952,7 @@
 	  echo 'the above variables should have static scope' 1>&2;	\
 	  exit 1;							\
 	fi
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/src/Sbitset.c b/src/Sbitset.c
new file mode 100644
index 0000000..ce65f37
--- /dev/null
+++ b/src/Sbitset.c
@@ -0,0 +1,80 @@
+/* A simple, memory-efficient bitset implementation.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+#include "system.h"
+
+#include "Sbitset.h"
+
+Sbitset
+Sbitset__new (Sbitset__Index nbits)
+{
+  /* Some functions, like Sbitset__last_byte_mask, will fail if nbits = 0.  */
+  aver (nbits);
+  return xcalloc (1, Sbitset__nbytes (nbits));
+}
+
+Sbitset
+Sbitset__new_on_obstack (Sbitset__Index nbits, struct obstack *obstackp)
+{
+  Sbitset result;
+  Sbitset ptr;
+  Sbitset end;
+  aver (nbits);
+  result = obstack_alloc (obstackp, Sbitset__nbytes (nbits));
+  for (ptr = result, end = result + Sbitset__nbytes (nbits); ptr < end; ++ptr)
+    *ptr = 0;
+  return result;
+}
+
+void
+Sbitset__delete (Sbitset self)
+{
+  free (self);
+}
+
+bool
+Sbitset__isEmpty (Sbitset self, Sbitset__Index nbits)
+{
+  Sbitset last = self + Sbitset__nbytes (nbits) - 1;
+  for (; self < last; ++self)
+    if (*self != 0)
+      return false;
+  return ((*last) & Sbitset__last_byte_mask (nbits)) == 0;
+}
+
+void
+Sbitset__fprint(Sbitset self, Sbitset__Index nbits, FILE *file)
+{
+  Sbitset__Index i;
+  Sbitset itr;
+  bool first = true;
+  fprintf (file,
+           "nbits = %" SBITSET__INDEX__CONVERSION_SPEC ", set = {",
+           nbits);
+  SBITSET__FOR_EACH (self, nbits, itr, i)
+    {
+      if (first)
+        first = false;
+      else
+        fprintf (file, ",");
+      fprintf (file, " %" SBITSET__INDEX__CONVERSION_SPEC, i);
+    }
+  fprintf (file, " }");
+}
diff --git a/src/Sbitset.h b/src/Sbitset.h
new file mode 100644
index 0000000..4a32402
--- /dev/null
+++ b/src/Sbitset.h
@@ -0,0 +1,92 @@
+/* A simple, memory-efficient bitset implementation.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef SBITSET_H_
+# define SBITSET_H_
+
+typedef unsigned char *Sbitset;
+typedef size_t Sbitset__Index;
+#define SBITSET__INDEX__CONVERSION_SPEC "zu"
+
+#define Sbitset__nbytes(NBITS) \
+  (((NBITS) + CHAR_BIT - 1) / CHAR_BIT)
+#define Sbitset__byteAddress(SELF, INDEX) \
+  (((SELF) + (INDEX) / CHAR_BIT))
+#define Sbitset__bit_mask(INDEX) \
+  (1 << (CHAR_BIT - 1 - (INDEX) % CHAR_BIT))
+#define Sbitset__last_byte_mask(NBITS) \
+  (UCHAR_MAX << (CHAR_BIT - 1 - ((NBITS) - 1) % CHAR_BIT))
+
+/* nbits must not be 0.  */
+Sbitset Sbitset__new (Sbitset__Index nbits);
+Sbitset Sbitset__new_on_obstack (Sbitset__Index nbits,
+                                 struct obstack *obstackp);
+void Sbitset__delete (Sbitset self);
+
+#define Sbitset__test(SELF, INDEX)                                            \
+  ((*Sbitset__byteAddress ((SELF), (INDEX)) & Sbitset__bit_mask (INDEX)) != 0)
+
+bool Sbitset__isEmpty (Sbitset self, Sbitset__Index nbits);
+
+void Sbitset__fprint(Sbitset self, Sbitset__Index nbits, FILE *file);
+
+#define Sbitset__set(SELF, INDEX)                                             \
+do {                                                                          \
+  *Sbitset__byteAddress ((SELF), (INDEX)) =                                   \
+    *Sbitset__byteAddress ((SELF), (INDEX)) | Sbitset__bit_mask (INDEX);      \
+} while(0)
+
+#define Sbitset__reset(SELF, INDEX)                                           \
+do {                                                                          \
+  *Sbitset__byteAddress ((SELF), (INDEX)) =                                   \
+    *Sbitset__byteAddress ((SELF), (INDEX)) & ~Sbitset__bit_mask (INDEX);     \
+} while(0)
+
+/* NBITS is the size of the bitset.  More than NBITS bits might be reset.  */
+#define Sbitset__zero(SELF, NBITS)                                            \
+do {                                                                          \
+  memset (SELF, 0, Sbitset__nbytes (NBITS));                                  \
+} while(0)
+
+/* NBITS is the size of the bitset.  More than NBITS bits might be set.  */
+#define Sbitset__ones(SELF, NBITS)                                            \
+do {                                                                          \
+  memset (SELF, UCHAR_MAX, Sbitset__nbytes (NBITS));                          \
+} while(0)
+
+/* NBITS is the size of every bitset.  More than NBITS bits might be set.  */
+#define Sbitset__or(SELF, OTHER1, OTHER2, NBITS)                              \
+do {                                                                          \
+  Sbitset ptr_self = (SELF);                                                  \
+  Sbitset ptr_other1 = (OTHER1);                                              \
+  Sbitset ptr_other2 = (OTHER2);                                              \
+  Sbitset end_self = ptr_self + Sbitset__nbytes (NBITS);                      \
+  for (; ptr_self < end_self; ++ptr_self, ++ptr_other1, ++ptr_other2)         \
+    *ptr_self = *ptr_other1 | *ptr_other2;                                    \
+} while(0)
+
+#define SBITSET__FOR_EACH(SELF, NBITS, ITER, INDEX)                           \
+  for ((ITER) = (SELF); (ITER) < (SELF) + Sbitset__nbytes (NBITS); ++(ITER))  \
+    if (*(ITER) != 0)                                                         \
+      for ((INDEX) = ((ITER)-(SELF))*CHAR_BIT;                                \
+           (INDEX) < (NBITS) && (SELF)+(INDEX)/CHAR_BIT < (ITER)+1;           \
+           ++(INDEX))                                                         \
+        if (((*ITER) & Sbitset__bit_mask (INDEX)) != 0)
+
+#endif /* !SBITSET_H_ */
diff --git a/src/assoc.c b/src/assoc.c
index 6f9a3b5..989cb26 100644
--- a/src/assoc.c
+++ b/src/assoc.c
@@ -1,22 +1,22 @@
 /* Associativity information.
-   Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2005-2006, 2009-2012 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
diff --git a/src/assoc.h b/src/assoc.h
index 778a451..54f9b65 100644
--- a/src/assoc.h
+++ b/src/assoc.h
@@ -1,22 +1,21 @@
 /* Associativity information.
-   Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2006, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef ASSOC_H_
 # define ASSOC_H_
diff --git a/src/closure.c b/src/closure.c
index 001b831..d9bc5ff 100644
--- a/src/closure.c
+++ b/src/closure.c
@@ -1,24 +1,22 @@
 /* Closures for Bison
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002, 2004, 2005 Free
+   Copyright (C) 1984, 1989, 2000-2002, 2004-2005, 2007, 2009-2012 Free
    Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
@@ -26,7 +24,6 @@
 #include <bitset.h>
 #include <bitsetv-print.h>
 #include <bitsetv.h>
-#include <quotearg.h>
 
 #include "closure.h"
 #include "derives.h"
@@ -37,7 +34,7 @@
 
 /* NITEMSET is the size of the array ITEMSET.  */
 item_number *itemset;
-size_t nritemset;
+size_t nitemset;
 
 static bitset ruleset;
 
@@ -213,30 +210,32 @@
     if (ISVAR (ritem[core[c]]))
       bitset_or (ruleset, ruleset, FDERIVES (ritem[core[c]]));
 
-  nritemset = 0;
+  /* core is sorted on item index in ritem, which is sorted on rule number.
+     Compute itemset with the same sort.  */
+  nitemset = 0;
   c = 0;
   BITSET_FOR_EACH (iter, ruleset, ruleno, 0)
     {
       item_number itemno = rules[ruleno].rhs - ritem;
       while (c < n && core[c] < itemno)
 	{
-	  itemset[nritemset] = core[c];
-	  nritemset++;
+	  itemset[nitemset] = core[c];
+	  nitemset++;
 	  c++;
 	}
-      itemset[nritemset] = itemno;
-      nritemset++;
+      itemset[nitemset] = itemno;
+      nitemset++;
     };
 
   while (c < n)
     {
-      itemset[nritemset] = core[c];
-      nritemset++;
+      itemset[nitemset] = core[c];
+      nitemset++;
       c++;
     }
 
   if (trace_flag & trace_sets)
-    print_closure ("output", itemset, nritemset);
+    print_closure ("output", itemset, nitemset);
 }
 
 
diff --git a/src/closure.h b/src/closure.h
index a2582e8..0f96a8b 100644
--- a/src/closure.h
+++ b/src/closure.h
@@ -1,24 +1,22 @@
 /* Subroutines for bison
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software
+   Copyright (C) 1984, 1989, 2000-2002, 2007, 2009-2012 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef CLOSURE_H_
 # define CLOSURE_H_
@@ -32,7 +30,7 @@
 void new_closure (unsigned int n);
 
 
-/* Given the kernel (aka core) of a state (a vector of item numbers
+/* Given the kernel (aka core) of a state (a sorted vector of item numbers
    ITEMS, of length N), set up RULESET and ITEMSET to indicate what
    rules could be run and which items could be accepted when those
    items are the active ones.
@@ -41,7 +39,7 @@
    all rules which could potentially describe the next input to be
    read.
 
-   ITEMSET is a vector of item numbers; NITEMSET is its size
+   ITEMSET is a sorted vector of item numbers; NITEMSET is its size
    (actually, points to just beyond the end of the part of it that is
    significant).  CLOSURE places there the indices of all items which
    represent units of input that could arrive next.  */
@@ -54,6 +52,6 @@
 void free_closure (void);
 
 extern item_number *itemset;
-extern size_t nritemset;
+extern size_t nitemset;
 
 #endif /* !CLOSURE_H_ */
diff --git a/src/complain.c b/src/complain.c
index 927dbb6..ede0ccf 100644
--- a/src/complain.c
+++ b/src/complain.c
@@ -1,11 +1,12 @@
 /* Declaration for error-reporting function for Bison.
 
-   Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2000-2002, 2004-2006, 2009-2012 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 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.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -13,9 +14,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-   USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Based on error.c and error.h,
    written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
@@ -24,57 +23,124 @@
 #include "system.h"
 
 #include <stdarg.h>
+#include <progname.h>
 
 #include "complain.h"
 #include "files.h"
+#include "getargs.h"
 
-/* The calling program should define program_name and set it to the
-   name of the executing program.  */
-extern char *program_name;
-
-/* This variable is set each time `warn' is called.  */
-bool warning_issued;
-
-/* This variable is set each time `complain' is called.  */
 bool complaint_issued;
+static unsigned *indent_ptr = 0;
 
 
+
+/** Report an error message.
+ *
+ * \param loc     the location, defaulting to the current file,
+ *                or the program name.
+ * \param prefix  put before the message (e.g., "warning").
+ * \param message the error message, a printf format string.  Iff it
+ *                ends with ": ", then no trailing newline is printed,
+ *                and the caller should print the remaining
+ *                newline-terminated message to stderr.
+ * \param args    the arguments of the format string.
+ */
+static
+void
+error_message (location *loc,
+	       const char *prefix,
+	       const char *message, va_list args)
+{
+  unsigned pos = 0;
+
+  if (loc)
+    pos += location_print (stderr, *loc);
+  else
+    pos += fprintf(stderr, "%s", current_file ? current_file : program_name);
+  pos += fprintf(stderr, ": ");
+
+  if (indent_ptr)
+    {
+      if (!*indent_ptr)
+        *indent_ptr = pos;
+      else if (*indent_ptr > pos)
+        fprintf (stderr, "%*s", *indent_ptr - pos, "");
+      indent_ptr = 0;
+    }
+
+  if (prefix)
+    fprintf (stderr, "%s: ", prefix);
+
+  vfprintf (stderr, message, args);
+  {
+    size_t l = strlen (message);
+    if (l < 2 || message[l - 2] != ':' || message[l - 1] != ' ')
+      {
+        putc ('\n', stderr);
+        fflush (stderr);
+        if (loc && feature_flag & feature_caret)
+          location_caret (stderr, *loc);
+      }
+  }
+  fflush (stderr);
+}
+
+/** Wrap error_message() with varargs handling. */
+#define ERROR_MESSAGE(Loc, Prefix, Message)	\
+{						\
+  va_list args;					\
+  va_start (args, Message);			\
+  error_message (Loc, Prefix, Message, args);	\
+  va_end (args);				\
+}
+
+
 /*--------------------------------.
 | Report a warning, and proceed.  |
 `--------------------------------*/
 
 void
+set_warning_issued (void)
+{
+  static bool warning_issued = false;
+  if (!warning_issued && (warnings_flag & warnings_error))
+    {
+      fprintf (stderr, "%s: warnings being treated as errors\n", program_name);
+      complaint_issued = true;
+    }
+  warning_issued = true;
+}
+
+void
 warn_at (location loc, const char *message, ...)
 {
-  va_list args;
+  if (!(warnings_flag & warnings_other))
+    return;
+  set_warning_issued ();
+  ERROR_MESSAGE (&loc, _("warning"), message);
+}
 
-  location_print (stderr, loc);
-  fputs (": ", stderr);
-  fputs (_("warning: "), stderr);
-
-  va_start (args, message);
-  vfprintf (stderr, message, args);
-  va_end (args);
-
-  warning_issued = true;
-  putc ('\n', stderr);
+void
+warn_at_indent (location loc, unsigned *indent,
+                const char *message, ...)
+{
+  if (!(warnings_flag & warnings_other))
+    return;
+  set_warning_issued ();
+  indent_ptr = indent;
+  ERROR_MESSAGE (&loc, *indent ? NULL : _("warning"), message);
 }
 
 void
 warn (const char *message, ...)
 {
-  va_list args;
-
-  fprintf (stderr, "%s: %s", current_file ? current_file : program_name, _("warning: "));
-
-  va_start (args, message);
-  vfprintf (stderr, message, args);
-  va_end (args);
-
-  warning_issued = true;
-  putc ('\n', stderr);
+  if (!(warnings_flag & warnings_other))
+    return;
+  set_warning_issued ();
+  ERROR_MESSAGE (NULL, _("warning"), message);
 }
-
+
+
 /*-----------------------------------------------------------.
 | An error has occurred, but we can proceed, and die later.  |
 `-----------------------------------------------------------*/
@@ -82,34 +148,56 @@
 void
 complain_at (location loc, const char *message, ...)
 {
-  va_list args;
-
-  location_print (stderr, loc);
-  fputs (": ", stderr);
-
-  va_start (args, message);
-  vfprintf (stderr, message, args);
-  va_end (args);
-
+  ERROR_MESSAGE (&loc, _("error"), message);
   complaint_issued = true;
-  putc ('\n', stderr);
+}
+
+void
+complain_at_indent (location loc, unsigned *indent,
+                    const char *message, ...)
+{
+  indent_ptr = indent;
+  ERROR_MESSAGE (&loc, *indent ? NULL : _("error"), message);
+  complaint_issued = true;
 }
 
 void
 complain (const char *message, ...)
 {
-  va_list args;
-
-  fprintf (stderr, "%s: ", current_file ? current_file : program_name);
-
-  va_start (args, message);
-  vfprintf (stderr, message, args);
-  va_end (args);
-
+  ERROR_MESSAGE (NULL, _("error"), message);
   complaint_issued = true;
-  putc ('\n', stderr);
 }
-
+
+
+/*--------------------------------------------------------------.
+| An incompatibility with POSIX Yacc: mapped either to warn* or |
+| complain* depending on yacc_flag.                             |
+`--------------------------------------------------------------*/
+
+void
+yacc_at (location loc, const char *message, ...)
+{
+  if (yacc_flag)
+    {
+      ERROR_MESSAGE (&loc, NULL, message);
+      complaint_issued = true;
+    }
+  else if (warnings_flag & warnings_yacc)
+    {
+      set_warning_issued ();
+      ERROR_MESSAGE (&loc, _("warning"), message);
+    }
+}
+
+void
+midrule_value_at (location loc, const char *message, ...)
+{
+  if (!(warnings_flag & warnings_midrule_values))
+    return;
+  set_warning_issued ();
+  ERROR_MESSAGE (&loc, _("warning"), message);
+}
+
 /*-------------------------------------------------.
 | A severe error has occurred, we cannot proceed.  |
 `-------------------------------------------------*/
@@ -117,31 +205,13 @@
 void
 fatal_at (location loc, const char *message, ...)
 {
-  va_list args;
-
-  location_print (stderr, loc);
-  fputs (": ", stderr);
-  fputs (_("fatal error: "), stderr);
-
-  va_start (args, message);
-  vfprintf (stderr, message, args);
-  va_end (args);
-  putc ('\n', stderr);
+  ERROR_MESSAGE (&loc, _("fatal error"), message);
   exit (EXIT_FAILURE);
 }
 
 void
 fatal (const char *message, ...)
 {
-  va_list args;
-
-  fprintf (stderr, "%s: ", current_file ? current_file : program_name);
-
-  fputs (_("fatal error: "), stderr);
-
-  va_start (args, message);
-  vfprintf (stderr, message, args);
-  va_end (args);
-  putc ('\n', stderr);
+  ERROR_MESSAGE (NULL, _("fatal error"), message);
   exit (EXIT_FAILURE);
 }
diff --git a/src/complain.h b/src/complain.h
index 9ae334a..997d577 100644
--- a/src/complain.h
+++ b/src/complain.h
@@ -1,10 +1,12 @@
 /* Declaration for error-reporting function for Bison.
-   Copyright (C) 2000, 2001, 2002 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.
+   Copyright (C) 2000-2002, 2006, 2009-2012 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 3 of the License, 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
@@ -12,9 +14,7 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-   USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef COMPLAIN_H_
 # define COMPLAIN_H_ 1
@@ -25,7 +25,18 @@
 extern "C" {
 # endif
 
-/* Informative messages, but we proceed.  */
+/* Sub-messages indent. */
+#define SUB_INDENT (4)
+
+/** Record that a warning is about to be issued, and treat it as an
+    error if <tt>warnings_flag & warnings_error</tt>.  This is exported
+    only for the sake of Yacc-compatible conflict reports in conflicts.c.
+    All other warnings should be implemented in complain.c and should use
+    the normal warning format.  */
+void set_warning_issued (void);
+
+/** Informative messages, but we proceed.  Report iff
+    <tt>warnings_flag & warnings_other</tt>.  */
 
 void warn (char const *format, ...)
   __attribute__ ((__format__ (__printf__, 1, 2)));
@@ -33,7 +44,14 @@
 void warn_at (location loc, char const *format, ...)
   __attribute__ ((__format__ (__printf__, 2, 3)));
 
-/* Something bad happened, but let's continue and die later.  */
+/* Generate a message aligned by an indent.
+   When *indent == 0, assign message's indent to *indent,
+   When *indent > 0, align the message by *indent value. */
+void warn_at_indent (location loc, unsigned *indent,
+                     char const *format, ...)
+  __attribute__ ((__format__ (__printf__, 3, 4)));
+
+/** An error, but we continue and die later.  */
 
 void complain (char const *format, ...)
   __attribute__ ((__format__ (__printf__, 1, 2)));
@@ -41,7 +59,26 @@
 void complain_at (location loc, char const *format, ...)
   __attribute__ ((__format__ (__printf__, 2, 3)));
 
-/* Something bad happened, and let's die now.  */
+/* Generate a message aligned by an indent.
+   When *indent == 0, assign message's indent to *indent,
+   When *indent > 0, align the message by *indent value. */
+void complain_at_indent (location loc, unsigned *indent,
+                         char const *format, ...)
+  __attribute__ ((__format__ (__printf__, 3, 4)));
+
+/** An incompatibility with POSIX Yacc: mapped either to warn* or
+    complain* depending on yacc_flag. */
+
+void yacc_at (location loc, char const *format, ...)
+  __attribute__ ((__format__ (__printf__, 2, 3)));
+
+/** A midrule-value warning.  Report iff
+    <tt>warnings_flag & warnings_midrule_values</tt>.  */
+
+void midrule_value_at (location loc, char const *format, ...)
+  __attribute__ ((__format__ (__printf__, 2, 3)));
+
+/** A fatal error, causing immediate exit.  */
 
 void fatal (char const *format, ...)
   __attribute__ ((__noreturn__, __format__ (__printf__, 1, 2)));
@@ -49,10 +86,7 @@
 void fatal_at (location loc, char const *format, ...)
   __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
 
-/* This variable is set each time `warn' is called.  */
-extern bool warning_issued;
-
-/* This variable is set each time `complain' is called.  */
+/** Whether an error was reported.  */
 extern bool complaint_issued;
 
 # ifdef	__cplusplus
diff --git a/src/conflicts.c b/src/conflicts.c
index 13121f6..ba0b6ed 100644
--- a/src/conflicts.c
+++ b/src/conflicts.c
@@ -1,24 +1,22 @@
-/* Find and resolve or report look-ahead conflicts for bison,
+/* Find and resolve or report lookahead conflicts for bison,
 
-   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 1992, 2000-2007, 2009-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
@@ -32,6 +30,7 @@
 #include "getargs.h"
 #include "gram.h"
 #include "lalr.h"
+#include "print-xml.h"
 #include "reader.h"
 #include "state.h"
 #include "symtab.h"
@@ -41,9 +40,10 @@
 int expected_rr_conflicts = -1;
 static char *conflicts;
 static struct obstack solved_conflicts_obstack;
+static struct obstack solved_conflicts_xml_obstack;
 
 static bitset shift_set;
-static bitset look_ahead_set;
+static bitset lookahead_set;
 
 
 
@@ -73,24 +73,26 @@
 	{
 	case shift_resolution:
 	case right_resolution:
-	  obstack_fgrow2 (&solved_conflicts_obstack,
-			  _("\
-    Conflict between rule %d and token %s resolved as shift"),
+	  obstack_printf (&solved_conflicts_obstack,
+			  _("    Conflict between rule %d and token %s"
+			    " resolved as shift"),
 			  r->number,
 			  symbols[token]->tag);
 	  break;
+
 	case reduce_resolution:
 	case left_resolution:
-	  obstack_fgrow2 (&solved_conflicts_obstack,
-			  _("\
-    Conflict between rule %d and token %s resolved as reduce"),
+	  obstack_printf (&solved_conflicts_obstack,
+			  _("    Conflict between rule %d and token %s"
+			    " resolved as reduce"),
 			  r->number,
 			  symbols[token]->tag);
 	  break;
+
 	case nonassoc_resolution:
-	  obstack_fgrow2 (&solved_conflicts_obstack,
-			  _("\
-    Conflict between rule %d and token %s resolved as an error"),
+	  obstack_printf (&solved_conflicts_obstack,
+			  _("    Conflict between rule %d and token %s"
+			    " resolved as an error"),
 			  r->number,
 			  symbols[token]->tag);
 	  break;
@@ -100,45 +102,119 @@
       switch (resolution)
 	{
 	case shift_resolution:
-	  obstack_fgrow2 (&solved_conflicts_obstack,
+	  obstack_printf (&solved_conflicts_obstack,
 			  " (%s < %s)",
 			  r->prec->tag,
 			  symbols[token]->tag);
 	  break;
 
 	case reduce_resolution:
-	  obstack_fgrow2 (&solved_conflicts_obstack,
+	  obstack_printf (&solved_conflicts_obstack,
 			  " (%s < %s)",
 			  symbols[token]->tag,
 			  r->prec->tag);
 	  break;
 
 	case left_resolution:
-	  obstack_fgrow1 (&solved_conflicts_obstack,
+	  obstack_printf (&solved_conflicts_obstack,
 			  " (%%left %s)",
 			  symbols[token]->tag);
 	  break;
 
 	case right_resolution:
-	  obstack_fgrow1 (&solved_conflicts_obstack,
+	  obstack_printf (&solved_conflicts_obstack,
 			  " (%%right %s)",
 			  symbols[token]->tag);
 	  break;
+
 	case nonassoc_resolution:
-	  obstack_fgrow1 (&solved_conflicts_obstack,
+	  obstack_printf (&solved_conflicts_obstack,
 			  " (%%nonassoc %s)",
 			  symbols[token]->tag);
 	  break;
 	}
+
       obstack_sgrow (&solved_conflicts_obstack, ".\n");
     }
+
+  /* XML report */
+  if (xml_flag)
+    {
+      /* The description of the resolution. */
+      switch (resolution)
+        {
+        case shift_resolution:
+        case right_resolution:
+          obstack_printf (&solved_conflicts_xml_obstack,
+                          "        <resolution rule=\"%d\" symbol=\"%s\""
+                          " type=\"shift\">",
+                          r->number,
+                          xml_escape (symbols[token]->tag));
+          break;
+
+        case reduce_resolution:
+        case left_resolution:
+          obstack_printf (&solved_conflicts_xml_obstack,
+                          "        <resolution rule=\"%d\" symbol=\"%s\""
+                          " type=\"reduce\">",
+                          r->number,
+                          xml_escape (symbols[token]->tag));
+          break;
+
+        case nonassoc_resolution:
+          obstack_printf (&solved_conflicts_xml_obstack,
+                          "        <resolution rule=\"%d\" symbol=\"%s\""
+                          " type=\"error\">",
+                          r->number,
+                          xml_escape (symbols[token]->tag));
+          break;
+        }
+
+      /* The reason. */
+      switch (resolution)
+        {
+        case shift_resolution:
+          obstack_printf (&solved_conflicts_xml_obstack,
+                          "%s &lt; %s",
+                          xml_escape_n (0, r->prec->tag),
+                          xml_escape_n (1, symbols[token]->tag));
+          break;
+
+        case reduce_resolution:
+          obstack_printf (&solved_conflicts_xml_obstack,
+                          "%s &lt; %s",
+                          xml_escape_n (0, symbols[token]->tag),
+                          xml_escape_n (1, r->prec->tag));
+          break;
+
+        case left_resolution:
+          obstack_printf (&solved_conflicts_xml_obstack,
+                          "%%left %s",
+                          xml_escape (symbols[token]->tag));
+          break;
+
+        case right_resolution:
+          obstack_printf (&solved_conflicts_xml_obstack,
+                          "%%right %s",
+                          xml_escape (symbols[token]->tag));
+          break;
+
+        case nonassoc_resolution:
+          obstack_printf (&solved_conflicts_xml_obstack,
+                          "%%nonassoc %s",
+                          xml_escape (symbols[token]->tag));
+      break;
+        }
+
+      obstack_sgrow (&solved_conflicts_xml_obstack, "</resolution>\n");
+    }
 }
 
 
 /*------------------------------------------------------------------.
 | Turn off the shift recorded for the specified token in the        |
 | specified state.  Used when we resolve a shift-reduce conflict in |
-| favor of the reduction.                                           |
+| favor of the reduction or as an error (%nonassoc).                |
 `------------------------------------------------------------------*/
 
 static void
@@ -147,7 +223,7 @@
   transitions *trans = s->transitions;
   int i;
 
-  bitset_reset (look_ahead_set, token);
+  bitset_reset (lookahead_set, token);
   for (i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
 	&& TRANSITION_SYMBOL (trans, i) == token)
@@ -156,15 +232,15 @@
 
 
 /*--------------------------------------------------------------------.
-| Turn off the reduce recorded for the specified token for the        |
-| specified look-ahead.  Used when we resolve a shift-reduce conflict |
-| in favor of the shift.                                              |
+| Turn off the reduce recorded for the specified token in the         |
+| specified lookahead set.  Used when we resolve a shift-reduce       |
+| conflict in favor of the shift or as an error (%nonassoc).          |
 `--------------------------------------------------------------------*/
 
 static void
-flush_reduce (bitset look_ahead_tokens, int token)
+flush_reduce (bitset lookahead_tokens, int token)
 {
-  bitset_reset (look_ahead_tokens, token);
+  bitset_reset (lookahead_tokens, token);
 }
 
 
@@ -174,25 +250,25 @@
 | rule has a precedence.  A conflict is resolved by modifying the   |
 | shift or reduce tables so that there is no longer a conflict.     |
 |                                                                   |
-| RULENO is the number of the look-ahead bitset to consider.      |
+| RULENO is the number of the lookahead bitset to consider.         |
 |                                                                   |
-| ERRORS can be used to store discovered explicit errors.           |
+| ERRORS and NERRS can be used to store discovered explicit         |
+| errors.                                                           |
 `------------------------------------------------------------------*/
 
 static void
-resolve_sr_conflict (state *s, int ruleno, symbol **errors)
+resolve_sr_conflict (state *s, int ruleno, symbol **errors, int *nerrs)
 {
   symbol_number i;
   reductions *reds = s->reductions;
   /* Find the rule to reduce by to get precedence of reduction.  */
   rule *redrule = reds->rules[ruleno];
   int redprec = redrule->prec->prec;
-  bitset look_ahead_tokens = reds->look_ahead_tokens[ruleno];
-  int nerrs = 0;
+  bitset lookahead_tokens = reds->lookahead_tokens[ruleno];
 
   for (i = 0; i < ntokens; i++)
-    if (bitset_test (look_ahead_tokens, i)
-	&& bitset_test (look_ahead_set, i)
+    if (bitset_test (lookahead_tokens, i)
+	&& bitset_test (lookahead_set, i)
 	&& symbols[i]->prec)
       {
 	/* Shift-reduce conflict occurs for token number i
@@ -206,7 +282,7 @@
 	else if (symbols[i]->prec > redprec)
 	  {
 	    log_resolution (redrule, i, shift_resolution);
-	    flush_reduce (look_ahead_tokens, i);
+	    flush_reduce (lookahead_tokens, i);
 	  }
 	else
 	  /* Matching precedence levels.
@@ -221,7 +297,7 @@
 
 	    case right_assoc:
 	      log_resolution (redrule, i, right_resolution);
-	      flush_reduce (look_ahead_tokens, i);
+	      flush_reduce (lookahead_tokens, i);
 	      break;
 
 	    case left_assoc:
@@ -232,25 +308,12 @@
 	    case non_assoc:
 	      log_resolution (redrule, i, nonassoc_resolution);
 	      flush_shift (s, i);
-	      flush_reduce (look_ahead_tokens, i);
+	      flush_reduce (lookahead_tokens, i);
 	      /* Record an explicit error for this token.  */
-	      errors[nerrs++] = symbols[i];
+	      errors[(*nerrs)++] = symbols[i];
 	      break;
 	    }
       }
-
-  if (nerrs)
-    {
-      /* Some tokens have been explicitly made errors.  Allocate a
-	 permanent errs structure for this state, to record them.  */
-      state_errs_set (s, nerrs, errors);
-    }
-
-  if (obstack_object_size (&solved_conflicts_obstack))
-    {
-      obstack_1grow (&solved_conflicts_obstack, '\0');
-      s->solved_conflicts = obstack_finish (&solved_conflicts_obstack);
-    }
 }
 
 
@@ -258,7 +321,7 @@
 | Solve the S/R conflicts of state S using the                       |
 | precedence/associativity, and flag it inconsistent if it still has |
 | conflicts.  ERRORS can be used as storage to compute the list of   |
-| look-ahead tokens on which S raises a syntax error (%nonassoc).    |
+| lookahead tokens on which S raises a syntax error (%nonassoc).     |
 `-------------------------------------------------------------------*/
 
 static void
@@ -267,31 +330,48 @@
   int i;
   transitions *trans = s->transitions;
   reductions *reds = s->reductions;
+  int nerrs = 0;
 
   if (s->consistent)
     return;
 
-  bitset_zero (look_ahead_set);
+  bitset_zero (lookahead_set);
 
   FOR_EACH_SHIFT (trans, i)
-    bitset_set (look_ahead_set, TRANSITION_SYMBOL (trans, i));
+    bitset_set (lookahead_set, TRANSITION_SYMBOL (trans, i));
 
-  /* Loop over all rules which require look-ahead in this state.  First
+  /* Loop over all rules which require lookahead in this state.  First
      check for shift-reduce conflict, and try to resolve using
      precedence.  */
   for (i = 0; i < reds->num; ++i)
     if (reds->rules[i]->prec && reds->rules[i]->prec->prec
-	&& !bitset_disjoint_p (reds->look_ahead_tokens[i], look_ahead_set))
-      resolve_sr_conflict (s, i, errors);
+	&& !bitset_disjoint_p (reds->lookahead_tokens[i], lookahead_set))
+      resolve_sr_conflict (s, i, errors, &nerrs);
 
-  /* Loop over all rules which require look-ahead in this state.  Check
+  if (nerrs)
+    {
+      /* Some tokens have been explicitly made errors.  Allocate a
+         permanent errs structure for this state, to record them.  */
+      state_errs_set (s, nerrs, errors);
+    }
+  if (obstack_object_size (&solved_conflicts_obstack))
+    {
+      obstack_1grow (&solved_conflicts_obstack, '\0');
+      s->solved_conflicts = obstack_finish (&solved_conflicts_obstack);
+    }
+  if (obstack_object_size (&solved_conflicts_xml_obstack))
+    {
+      obstack_1grow (&solved_conflicts_xml_obstack, '\0');
+      s->solved_conflicts_xml = obstack_finish (&solved_conflicts_xml_obstack);
+    }
+
+  /* Loop over all rules which require lookahead in this state.  Check
      for conflicts not resolved above.  */
   for (i = 0; i < reds->num; ++i)
     {
-      if (!bitset_disjoint_p (reds->look_ahead_tokens[i], look_ahead_set))
+      if (!bitset_disjoint_p (reds->lookahead_tokens[i], lookahead_set))
 	conflicts[s->number] = 1;
-
-      bitset_or (look_ahead_set, look_ahead_set, reds->look_ahead_tokens[i]);
+      bitset_or (lookahead_set, lookahead_set, reds->lookahead_tokens[i]);
     }
 }
 
@@ -305,13 +385,14 @@
 conflicts_solve (void)
 {
   state_number i;
-  /* List of look-ahead tokens on which we explicitly raise a syntax error.  */
+  /* List of lookahead tokens on which we explicitly raise a syntax error.  */
   symbol **errors = xnmalloc (ntokens + 1, sizeof *errors);
 
   conflicts = xcalloc (nstates, sizeof *conflicts);
   shift_set = bitset_create (ntokens, BITSET_FIXED);
-  look_ahead_set = bitset_create (ntokens, BITSET_FIXED);
+  lookahead_set = bitset_create (ntokens, BITSET_FIXED);
   obstack_init (&solved_conflicts_obstack);
+  obstack_init (&solved_conflicts_xml_obstack);
 
   for (i = 0; i < nstates; i++)
     {
@@ -327,6 +408,17 @@
 }
 
 
+void
+conflicts_update_state_numbers (state_number old_to_new[],
+                                state_number nstates_old)
+{
+  state_number i;
+  for (i = 0; i < nstates_old; ++i)
+    if (old_to_new[i] != nstates_old)
+      conflicts[old_to_new[i]] = conflicts[i];
+}
+
+
 /*---------------------------------------------.
 | Count the number of shift/reduce conflicts.  |
 `---------------------------------------------*/
@@ -342,18 +434,18 @@
   if (!trans)
     return 0;
 
-  bitset_zero (look_ahead_set);
+  bitset_zero (lookahead_set);
   bitset_zero (shift_set);
 
   FOR_EACH_SHIFT (trans, i)
     bitset_set (shift_set, TRANSITION_SYMBOL (trans, i));
 
   for (i = 0; i < reds->num; ++i)
-    bitset_or (look_ahead_set, look_ahead_set, reds->look_ahead_tokens[i]);
+    bitset_or (lookahead_set, lookahead_set, reds->lookahead_tokens[i]);
 
-  bitset_and (look_ahead_set, look_ahead_set, shift_set);
+  bitset_and (lookahead_set, lookahead_set, shift_set);
 
-  src_count = bitset_count (look_ahead_set);
+  src_count = bitset_count (lookahead_set);
 
   return src_count;
 }
@@ -378,7 +470,7 @@
       int count = 0;
       int j;
       for (j = 0; j < reds->num; ++j)
-	if (bitset_test (reds->look_ahead_tokens[j], i))
+	if (bitset_test (reds->lookahead_tokens[j], i))
 	  count++;
 
       if (count >= 2)
@@ -433,7 +525,7 @@
 /*--------------------------------------------------------.
 | Total the number of S/R and R/R conflicts.  Unlike the  |
 | code in conflicts_output, however, count EACH pair of   |
-| reductions for the same state and look-ahead as one     |
+| reductions for the same state and lookahead as one      |
 | conflict.						  |
 `--------------------------------------------------------*/
 
@@ -502,8 +594,17 @@
     return;
 
   /* Report the total number of conflicts on STDERR.  */
+  if (expected_sr_conflicts == -1 && expected_rr_conflicts == -1)
+    {
+      if (!(warnings_flag & warnings_conflicts_sr))
+        src_total = 0;
+      if (!(warnings_flag & warnings_conflicts_rr))
+        rrc_total = 0;
+    }
   if (src_total | rrc_total)
     {
+      if (expected_sr_conflicts == -1 && expected_rr_conflicts == -1)
+        set_warning_issued ();
       if (! yacc_flag)
 	fprintf (stderr, "%s: ", current_file);
       conflict_report (stderr, src_total, rrc_total);
@@ -530,6 +631,7 @@
 {
   free (conflicts);
   bitset_free (shift_set);
-  bitset_free (look_ahead_set);
+  bitset_free (lookahead_set);
   obstack_free (&solved_conflicts_obstack, NULL);
+  obstack_free (&solved_conflicts_xml_obstack, NULL);
 }
diff --git a/src/conflicts.h b/src/conflicts.h
index 4389e5e..5a03454 100644
--- a/src/conflicts.h
+++ b/src/conflicts.h
@@ -1,28 +1,41 @@
-/* Find and resolve or report look-ahead conflicts for bison,
-   Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
+/* Find and resolve or report lookahead conflicts for bison,
+
+   Copyright (C) 2000-2002, 2004, 2007, 2009-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef CONFLICTS_H_
 # define CONFLICTS_H_
 # include "state.h"
 
 void conflicts_solve (void);
+
+/**
+ * Update state numbers recorded in internal arrays such that:
+ *   - \c nstates_old is the old number of states.
+ *   - Where \c i is the old state number, <tt>old_to_new[i]</tt> is either:
+ *     - \c nstates_old if state \c i is removed because it is unreachable.
+ *     - The new state number.
+ *   - The highest new state number is the number of remaining states - 1.
+ *   - The numerical order of the remaining states has not changed.
+ */
+void conflicts_update_state_numbers (state_number old_to_new[],
+                                     state_number nstates_old);
+
 void conflicts_print (void);
 int conflicts_total_count (void);
 void conflicts_output (FILE *out);
diff --git a/src/derives.c b/src/derives.c
index 2e4ff31..ce5a6a5 100644
--- a/src/derives.c
+++ b/src/derives.c
@@ -1,24 +1,22 @@
 /* Match rules with nonterminals for bison,
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002, 2003, 2005 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2003, 2005, 2009-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
diff --git a/src/derives.h b/src/derives.h
index 9a45dc9..f25e502 100644
--- a/src/derives.h
+++ b/src/derives.h
@@ -1,24 +1,22 @@
 /* Match rules with nonterminals for bison,
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software
+   Copyright (C) 1984, 1989, 2000-2002, 2009-2012 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef DERIVES_H_
 # define DERIVES_H_
diff --git a/src/files.c b/src/files.c
index f3bb0f9..f698c7e 100644
--- a/src/files.c
+++ b/src/files.c
@@ -1,42 +1,38 @@
 /* Open and close files for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005
-   Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
 #include <error.h>
+#include <dirname.h>
 #include <get-errno.h>
 #include <quote.h>
+#include <quotearg.h>
+#include <stdio-safer.h>
 #include <xstrndup.h>
 
 #include "complain.h"
-#include "dirname.h"
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
-#include "stdio-safer.h"
-
-struct obstack pre_prologue_obstack;
-struct obstack post_prologue_obstack;
 
 /* Initializing some values below (such SPEC_NAME_PREFIX to `yy') is
    tempting, but don't do that: for the time being our handling of the
@@ -48,10 +44,15 @@
 char const *spec_outfile = NULL;       /* for -o. */
 char const *spec_file_prefix = NULL;   /* for -b. */
 char const *spec_name_prefix = NULL;   /* for -p. */
-char const *spec_verbose_file = NULL;  /* for --verbose. */
-char const *spec_graph_file = NULL;    /* for -g. */
-char const *spec_defines_file = NULL;  /* for --defines. */
-char const *parser_file_name;
+char *spec_verbose_file = NULL;  /* for --verbose. */
+char *spec_graph_file = NULL;    /* for -g. */
+char *spec_xml_file = NULL;      /* for -x. */
+char *spec_defines_file = NULL;  /* for --defines. */
+char *parser_file_name;
+
+/* All computed output file names.  */
+static char **file_names = NULL;
+static int file_names_count = 0;
 
 uniqstr grammar_file = NULL;
 uniqstr current_file = NULL;
@@ -72,14 +73,14 @@
    empty string (meaning the current directory); otherwise it is
    `dir/'.  */
 
-static char const *all_but_ext;
-static char const *all_but_tab_ext;
-char const *dir_prefix;
+char *all_but_ext;
+static char *all_but_tab_ext;
+char *dir_prefix;
 
 /* C source file extension (the parser source).  */
-static char const *src_extension = NULL;
+static char *src_extension = NULL;
 /* Header file extension (if option ``-d'' is specified).  */
-static char const *header_extension = NULL;
+static char *header_extension = NULL;
 
 /*-----------------------------------------------------------------.
 | Return a newly allocated string composed of the concatenation of |
@@ -109,7 +110,8 @@
 
   ptr = fopen_safer (name, mode);
   if (!ptr)
-    error (EXIT_FAILURE, get_errno (), _("cannot open file `%s'"), name);
+    error (EXIT_FAILURE, get_errno (),
+           _("%s: cannot open"), quotearg_colon (name));
 
   return ptr;
 }
@@ -125,7 +127,7 @@
     return;
 
   if (ferror (ptr))
-    error (EXIT_FAILURE, 0, _("I/O error"));
+    error (EXIT_FAILURE, 0, _("input/output error"));
 
   if (fclose (ptr) != 0)
     error (EXIT_FAILURE, get_errno (), _("cannot close file"));
@@ -136,31 +138,24 @@
 | Compute ALL_BUT_EXT, ALL_BUT_TAB_EXT and output files extensions. |
 `------------------------------------------------------------------*/
 
-/* Replace all characters FROM by TO in the string IN.
-   and returns a new allocated string.  */
-static char *
-tr (const char *in, char from, char to)
-{
-  char *temp;
-  char *out = xmalloc (strlen (in) + 1);
-
-  for (temp = out; *in; in++, out++)
-    if (*in == from)
-      *out = to;
-    else
-      *out = *in;
-  *out = 0;
-  return (temp);
-}
-
 /* Compute extensions from the grammar file extension.  */
 static void
 compute_exts_from_gf (const char *ext)
 {
-  src_extension = tr (ext, 'y', 'c');
-  src_extension = tr (src_extension, 'Y', 'C');
-  header_extension = tr (ext, 'y', 'h');
-  header_extension = tr (header_extension, 'Y', 'H');
+  if (strcmp (ext, ".y") == 0)
+    {
+      src_extension = xstrdup (language->src_extension);
+      header_extension = xstrdup (language->header_extension);
+    }
+  else
+    {
+      src_extension = xstrdup (ext);
+      header_extension = xstrdup (ext);
+      tr (src_extension, 'y', 'c');
+      tr (src_extension, 'Y', 'C');
+      tr (header_extension, 'y', 'h');
+      tr (header_extension, 'Y', 'H');
+    }
 }
 
 /* Compute extensions from the given c source file extension.  */
@@ -171,8 +166,9 @@
      so the extenions must be computed unconditionally from the file name
      given by this option.  */
   src_extension = xstrdup (ext);
-  header_extension = tr (ext, 'c', 'h');
-  header_extension = tr (header_extension, 'C', 'H');
+  header_extension = xstrdup (ext);
+  tr (header_extension, 'c', 'h');
+  tr (header_extension, 'C', 'H');
 }
 
 
@@ -208,10 +204,10 @@
 file_name_split (const char *file_name,
 		 const char **base, const char **tab, const char **ext)
 {
-  *base = base_name (file_name);
+  *base = last_component (file_name);
 
   /* Look for the extension, i.e., look for the last dot. */
-  *ext = strrchr (*base, '.');
+  *ext = mbsrchr (*base, '.');
   *tab = NULL;
 
   /* If there is an extension, check if there is a `.tab' part right
@@ -264,25 +260,30 @@
       if (spec_file_prefix)
 	{
 	  /* If --file-prefix=foo was specified, ALL_BUT_TAB_EXT = `foo'.  */
-	  dir_prefix = xstrndup (grammar_file, base - grammar_file);
+	  dir_prefix =
+            xstrndup (spec_file_prefix,
+                      last_component (spec_file_prefix) - spec_file_prefix);
 	  all_but_tab_ext = xstrdup (spec_file_prefix);
 	}
       else if (yacc_flag)
 	{
 	  /* If --yacc, then the output is `y.tab.c'.  */
-	  dir_prefix = "";
-	  all_but_tab_ext = "y";
+	  dir_prefix = xstrdup ("");
+	  all_but_tab_ext = xstrdup ("y");
 	}
       else
 	{
 	  /* Otherwise, ALL_BUT_TAB_EXT is computed from the input
 	     grammar: `foo/bar.yy' => `bar'.  */
-	  dir_prefix = "";
+	  dir_prefix = xstrdup ("");
 	  all_but_tab_ext =
 	    xstrndup (base, (strlen (base) - (ext ? strlen (ext) : 0)));
 	}
 
-      all_but_ext = concat2 (all_but_tab_ext, TAB_EXT);
+      if (language->add_tab)
+        all_but_ext = concat2 (all_but_tab_ext, TAB_EXT);
+      else
+        all_but_ext = xstrdup (all_but_tab_ext);
 
       /* Compute the extensions from the grammar file name.  */
       if (ext && !yacc_flag)
@@ -297,44 +298,99 @@
 void
 compute_output_file_names (void)
 {
-  char const *name[4];
-  int i;
-  int j;
-  int names = 0;
-
   compute_file_name_parts ();
 
   /* If not yet done. */
   if (!src_extension)
-    src_extension = ".c";
+    src_extension = xstrdup (".c");
   if (!header_extension)
-    header_extension = ".h";
+    header_extension = xstrdup (".h");
 
-  name[names++] = parser_file_name =
-    spec_outfile ? spec_outfile : concat2 (all_but_ext, src_extension);
+  parser_file_name =
+    (spec_outfile
+     ? xstrdup (spec_outfile)
+     : concat2 (all_but_ext, src_extension));
 
   if (defines_flag)
     {
       if (! spec_defines_file)
 	spec_defines_file = concat2 (all_but_ext, header_extension);
-      name[names++] = spec_defines_file;
     }
 
   if (graph_flag)
     {
       if (! spec_graph_file)
-	spec_graph_file = concat2 (all_but_tab_ext, ".vcg");
-      name[names++] = spec_graph_file;
+	spec_graph_file = concat2 (all_but_tab_ext, ".dot");
+      output_file_name_check (&spec_graph_file);
+    }
+
+  if (xml_flag)
+    {
+      if (! spec_xml_file)
+	spec_xml_file = concat2 (all_but_tab_ext, ".xml");
+      output_file_name_check (&spec_xml_file);
     }
 
   if (report_flag)
     {
-      spec_verbose_file = concat2 (all_but_tab_ext, OUTPUT_EXT);
-      name[names++] = spec_verbose_file;
+      if (!spec_verbose_file)
+        spec_verbose_file = concat2 (all_but_tab_ext, OUTPUT_EXT);
+      output_file_name_check (&spec_verbose_file);
     }
 
-  for (j = 0; j < names; j++)
-    for (i = 0; i < j; i++)
-      if (strcmp (name[i], name[j]) == 0)
-	warn (_("conflicting outputs to file %s"), quote (name[i]));
+  free (all_but_tab_ext);
+  free (src_extension);
+  free (header_extension);
+}
+
+void
+output_file_name_check (char **file_name)
+{
+  bool conflict = false;
+  if (0 == strcmp (*file_name, grammar_file))
+    {
+      complain (_("refusing to overwrite the input file %s"),
+                quote (*file_name));
+      conflict = true;
+    }
+  else
+    {
+      int i;
+      for (i = 0; i < file_names_count; i++)
+        if (0 == strcmp (file_names[i], *file_name))
+          {
+            warn (_("conflicting outputs to file %s"),
+                  quote (*file_name));
+            conflict = true;
+          }
+    }
+  if (conflict)
+    {
+      free (*file_name);
+      *file_name = strdup ("/dev/null");
+    }
+  else
+    {
+      file_names = xnrealloc (file_names, ++file_names_count,
+                              sizeof *file_names);
+      file_names[file_names_count-1] = xstrdup (*file_name);
+    }
+}
+
+void
+output_file_names_free (void)
+{
+  free (all_but_ext);
+  free (spec_verbose_file);
+  free (spec_graph_file);
+  free (spec_xml_file);
+  free (spec_defines_file);
+  free (parser_file_name);
+  free (dir_prefix);
+  {
+    int i;
+    for (i = 0; i < file_names_count; i++)
+      free (file_names[i]);
+  }
+  free (file_names);
 }
diff --git a/src/files.h b/src/files.h
index ba9fec2..8f0bec0 100644
--- a/src/files.h
+++ b/src/files.h
@@ -1,22 +1,22 @@
 /* File names and variables for bison,
-   Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+   Copyright (C) 1984, 1989, 2000-2002, 2006-2007, 2009-2012 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef FILES_H_
 # define FILES_H_
@@ -27,7 +27,7 @@
 extern char const *spec_outfile;
 
 /* File name for the parser (i.e., the one above, or its default.) */
-extern char const *parser_file_name;
+extern char *parser_file_name;
 
 /* Symbol prefix specified with -p, or 0 if no -p.  */
 extern const char *spec_name_prefix;
@@ -36,21 +36,19 @@
 extern char const *spec_file_prefix;
 
 /* --verbose. */
-extern char const *spec_verbose_file;
+extern char *spec_verbose_file;
 
-/* File name specified for the output VCG graph.  */
-extern char const *spec_graph_file;
+/* File name specified for the output graph.  */
+extern char *spec_graph_file;
+
+/* File name specified for the xml output.  */
+extern char *spec_xml_file;
 
 /* File name specified with --defines.  */
-extern char const *spec_defines_file;
+extern char *spec_defines_file;
 
 /* Directory prefix of output file names.  */
-extern char const *dir_prefix;
-
-
-/* If semantic parser, output a .h file that defines YYSTYPE... */
-extern struct obstack pre_prologue_obstack;
-extern struct obstack post_prologue_obstack;
+extern char *dir_prefix;
 
 /* The file name as given on the command line.
    Not named "input_file" because Flex uses this name for an argument,
@@ -60,7 +58,12 @@
 /* The current file name.  Might change with %include, or with #line.  */
 extern uniqstr current_file;
 
+/* The computed base for output file names.  */
+extern char *all_but_ext;
+
 void compute_output_file_names (void);
+void output_file_names_free (void);
+void output_file_name_check (char **file_name);
 
 FILE *xfopen (const char *name, const char *mode);
 void xfclose (FILE *ptr);
diff --git a/src/flex-scanner.h b/src/flex-scanner.h
new file mode 100644
index 0000000..c854c29
--- /dev/null
+++ b/src/flex-scanner.h
@@ -0,0 +1,91 @@
+/* Common parts between scan-code.l, scan-gram.l, and scan-skel.l.
+
+   Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef FLEX_PREFIX
+# error "FLEX_PREFIX not defined"
+#endif
+
+/* Flex full version as a number.  */
+#define FLEX_VERSION                    \
+  ((YY_FLEX_MAJOR_VERSION) * 1000000    \
+   + (YY_FLEX_MINOR_VERSION) * 1000     \
+   + (YY_FLEX_SUBMINOR_VERSION))
+
+/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used.  */
+# if FLEX_VERSION <= 2005031
+int   FLEX_PREFIX (get_lineno) (void);
+FILE *FLEX_PREFIX (get_in) (void);
+FILE *FLEX_PREFIX (get_out) (void);
+int   FLEX_PREFIX (get_leng) (void);
+char *FLEX_PREFIX (get_text) (void);
+void  FLEX_PREFIX (set_lineno) (int);
+void  FLEX_PREFIX (set_in) (FILE *);
+void  FLEX_PREFIX (set_out) (FILE *);
+int   FLEX_PREFIX (get_debug) (void);
+void  FLEX_PREFIX (set_debug) (int);
+int   FLEX_PREFIX (lex_destroy) (void);
+#endif
+
+#define last_string    FLEX_PREFIX (last_string)
+
+/* It seems to be a nice "feature" of Flex that one cannot use yytext,
+   yyleng etc. when a prefix is given, since there is no longer a
+   #define, but rather the token is actually changed in the output.
+   However, this is not true for Flex 2.5.4.  */
+#ifndef yyleng
+# define yyleng  FLEX_PREFIX (leng)
+#endif
+#ifndef yytext
+# define yytext  FLEX_PREFIX (text)
+#endif
+
+/* Non-reentrant scanners generated by Flex 2.5.9 and later (and some earlier
+   versions according to the Flex manual) leak memory if yylex_destroy is not
+   invoked.  However, yylex_destroy is not defined before Flex 2.5.9, so give
+   an implementation here that at least appears to work with Flex 2.5.4.  */
+#if FLEX_VERSION <= 2005009
+# define yylex_destroy() yy_delete_buffer (YY_CURRENT_BUFFER)
+#endif
+
+/* OBSTACK_FOR_STRING -- Used to store all the characters that we need to
+   keep (to construct ID, STRINGS etc.).  Use the following macros to
+   use it.
+
+   Use STRING_GROW to append what has just been matched, and
+   STRING_FINISH to end the string (it puts the ending 0).
+   STRING_FINISH also stores this string in LAST_STRING, which can be
+   used, and which is used by STRING_FREE to free the last string.  */
+
+#ifndef FLEX_NO_OBSTACK
+
+static struct obstack obstack_for_string;
+
+# define STRING_GROW   \
+  obstack_grow (&obstack_for_string, yytext, yyleng)
+
+# define STRING_FINISH					\
+  do {							\
+    obstack_1grow (&obstack_for_string, '\0');		\
+    last_string = obstack_finish (&obstack_for_string);	\
+  } while (0)
+
+# define STRING_FREE \
+  obstack_free (&obstack_for_string, last_string)
+
+#endif
diff --git a/src/getargs.c b/src/getargs.c
index 13b0d32..ab2a28e 100644
--- a/src/getargs.c
+++ b/src/getargs.c
@@ -1,29 +1,30 @@
 /* Parse command line arguments for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
+#include "output.h"
 
 #include <argmatch.h>
+#include <c-strcase.h>
+#include <configmake.h>
 #include <error.h>
 
 /* Hack to get <getopt.h> to declare getopt with a prototype.  */
@@ -39,17 +40,21 @@
 # undef HACK_FOR___GNU_LIBRARY___PROTOTYPE
 #endif
 
+#include <progname.h>
+
 #include "complain.h"
 #include "files.h"
 #include "getargs.h"
+#include "muscle-tab.h"
+#include "quote.h"
 #include "uniqstr.h"
 
-bool debug_flag;
+bool debug;
 bool defines_flag;
 bool graph_flag;
+bool xml_flag;
 bool locations_flag;
 bool no_lines_flag;
-bool no_parser_flag;
 bool token_table_flag;
 bool yacc_flag;	/* for -y */
 
@@ -57,15 +62,119 @@
 
 bool nondeterministic_parser = false;
 bool glr_parser = false;
-bool pure_parser = false;
 
+int feature_flag = feature_none;
 int report_flag = report_none;
 int trace_flag = trace_none;
+int warnings_flag = warnings_conflicts_sr | warnings_conflicts_rr
+                    | warnings_other;
 
+static struct bison_language const valid_languages[] = {
+  { "c", "c-skel.m4", ".c", ".h", true },
+  { "c++", "c++-skel.m4", ".cc", ".hh", true },
+  { "java", "java-skel.m4", ".java", ".java", false },
+  { "", "", "", "", false }
+};
+
+int skeleton_prio = default_prio;
 const char *skeleton = NULL;
+int language_prio = default_prio;
+struct bison_language const *language = &valid_languages[0];
 const char *include = NULL;
 
-extern char *program_name;
+
+/** Decode an option's set of keys.
+ *
+ *  \param option   option being decoded.
+ *  \param keys     array of valid subarguments.
+ *  \param values   array of corresponding (int) values.
+ *  \param all      the all value.
+ *  \param flags    the flags to update
+ *  \param args     comma separated list of effective subarguments to decode.
+ *                  If 0, then activate all the flags.
+ *
+ *  If VALUE != 0 then KEY sets flags and no-KEY clears them.
+ *  If VALUE == 0 then KEY clears all flags from \c all and no-KEY sets all
+ *  flags from \c all.  Thus no-none = all and no-all = none.
+ */
+static void
+flags_argmatch (const char *option,
+		const char * const keys[], const int values[],
+		int all, int *flags, char *args)
+{
+  if (args)
+    {
+      args = strtok (args, ",");
+      while (args)
+	{
+	  int no = strncmp (args, "no-", 3) == 0 ? 3 : 0;
+	  int value = XARGMATCH (option, args + no, keys, values);
+	  if (value == 0)
+	    {
+	      if (no)
+		*flags |= all;
+	      else
+		*flags &= ~all;
+	    }
+	  else
+	    {
+	      if (no)
+		*flags &= ~value;
+	      else
+		*flags |= value;
+	    }
+	  args = strtok (NULL, ",");
+	}
+    }
+  else
+    *flags |= all;
+}
+
+/** Decode a set of sub arguments.
+ *
+ *  \param FlagName  the flag familly to update.
+ *  \param Args      the effective sub arguments to decode.
+ *
+ *  \arg FlagName_args   the list of keys.
+ *  \arg FlagName_types  the list of values.
+ *  \arg FlagName_all    the all value.
+ *  \arg FlagName_flag   the flag to update.
+ */
+#define FLAGS_ARGMATCH(FlagName, Args)					\
+  flags_argmatch ("--" #FlagName, FlagName ## _args, FlagName ## _types, \
+		  FlagName ## _all, &FlagName ## _flag, Args)
+
+
+/*----------------------.
+| --report's handling.  |
+`----------------------*/
+
+static const char * const report_args[] =
+{
+  /* In a series of synonyms, present the most meaningful first, so
+     that argmatch_valid be more readable.  */
+  "none",
+  "state", "states",
+  "itemset", "itemsets",
+  "lookahead", "lookaheads", "look-ahead",
+  "solved",
+  "all",
+  0
+};
+
+static const int report_types[] =
+{
+  report_none,
+  report_states, report_states,
+  report_states | report_itemsets, report_states | report_itemsets,
+  report_states | report_lookahead_tokens,
+  report_states | report_lookahead_tokens,
+  report_states | report_lookahead_tokens,
+  report_states | report_solved_conflicts,
+  report_all
+};
+
+ARGMATCH_VERIFY (report_args, report_types);
 
 
 /*---------------------.
@@ -76,18 +185,20 @@
 {
   /* In a series of synonyms, present the most meaningful first, so
      that argmatch_valid be more readable.  */
-  "none       - no report",
+  "none       - no traces",
   "scan       - grammar scanner traces",
   "parse      - grammar parser traces",
-  "automaton  - contruction of the automaton",
+  "automaton  - construction of the automaton",
   "bitsets    - use of bitsets",
-  "grammar    - reading, reducing of the grammar",
+  "grammar    - reading, reducing the grammar",
   "resource   - memory consumption (where available)",
   "sets       - grammar sets: firsts, nullable etc.",
+  "muscles    - m4 definitions passed to the skeleton",
   "tools      - m4 invocation",
   "m4         - m4 traces",
   "skeleton   - skeleton postprocessing",
   "time       - time consumption",
+  "ielr       - IELR conversion",
   "all        - all of the above",
   0
 };
@@ -102,84 +213,71 @@
   trace_grammar,
   trace_resource,
   trace_sets,
+  trace_muscles,
   trace_tools,
   trace_m4,
   trace_skeleton,
   trace_time,
+  trace_ielr,
   trace_all
 };
 
 ARGMATCH_VERIFY (trace_args, trace_types);
 
-static void
-trace_argmatch (char *args)
-{
-  if (args)
-    {
-      args = strtok (args, ",");
-      do
-	{
-	  int trace = XARGMATCH ("--trace", args,
-				 trace_args, trace_types);
-	  if (trace == trace_none)
-	    trace_flag = trace_none;
-	  else
-	    trace_flag |= trace;
-	}
-      while ((args = strtok (NULL, ",")));
-    }
-  else
-    trace_flag = trace_all;
-}
 
+/*------------------------.
+| --warnings's handling.  |
+`------------------------*/
 
-/*----------------------.
-| --report's handling.  |
-`----------------------*/
-
-static const char * const report_args[] =
+static const char * const warnings_args[] =
 {
   /* In a series of synonyms, present the most meaningful first, so
      that argmatch_valid be more readable.  */
+  "none            - no warnings",
+  "midrule-values  - unset or unused midrule values",
+  "yacc            - incompatibilities with POSIX Yacc",
+  "conflicts-sr    - S/R conflicts",
+  "conflicts-rr    - R/R conflicts",
+  "other           - all other warnings",
+  "all             - all of the above",
+  "error           - warnings are errors",
+  0
+};
+
+static const int warnings_types[] =
+{
+  warnings_none,
+  warnings_midrule_values,
+  warnings_yacc,
+  warnings_conflicts_sr,
+  warnings_conflicts_rr,
+  warnings_other,
+  warnings_all,
+  warnings_error
+};
+
+ARGMATCH_VERIFY (warnings_args, warnings_types);
+
+/*-----------------------.
+| --feature's handling.  |
+`-----------------------*/
+
+static const char * const feature_args[] =
+{
   "none",
-  "state", "states",
-  "itemset", "itemsets",
-  "look-ahead", "lookahead", "lookaheads",
-  "solved",
+  "caret", "diagnostics-show-caret",
   "all",
   0
 };
 
-static const int report_types[] =
+static const int feature_types[] =
 {
-  report_none,
-  report_states, report_states,
-  report_states | report_itemsets, report_states | report_itemsets,
-  report_states | report_look_ahead_tokens,
-  report_states | report_look_ahead_tokens,
-  report_states | report_look_ahead_tokens,
-  report_states | report_solved_conflicts,
-  report_all
+  feature_none,
+  feature_caret, feature_caret,
+  feature_all
 };
 
-ARGMATCH_VERIFY (report_args, report_types);
-
-static void
-report_argmatch (char *args)
-{
-  args = strtok (args, ",");
-  do
-    {
-      int report = XARGMATCH ("--report", args,
-			      report_args, report_types);
-      if (report == report_none)
-	report_flag = report_none;
-      else
-	report_flag |= report;
-    }
-  while ((args = strtok (NULL, ",")));
-}
-
+ARGMATCH_VERIFY (feature_args, feature_types);
 
 /*-------------------------------------------.
 | Display the help message and exit STATUS.  |
@@ -195,50 +293,83 @@
 	     program_name);
   else
     {
-      /* Some efforts were made to ease the translators' task, please
-	 continue.  */
-      fputs (_("\
-GNU bison generates parsers for LALR(1) grammars.\n"), stdout);
-      putc ('\n', stdout);
+      /* For ../build-aux/cross-options.pl to work, use the format:
+		^  -S, --long[=ARGS] (whitespace)
+	 A --long option is required.
+	 Otherwise, add exceptions to ../build-aux/cross-options.pl.  */
 
-      fprintf (stdout, _("\
-Usage: %s [OPTION]... FILE\n"), program_name);
-      putc ('\n', stdout);
+      printf (_("Usage: %s [OPTION]... FILE\n"), program_name);
+      fputs (_("\
+Generate a deterministic LR or generalized LR (GLR) parser employing\n\
+LALR(1), IELR(1), or canonical LR(1) parser tables.  IELR(1) and\n\
+canonical LR(1) support is experimental.\n\
+\n\
+"), stdout);
 
       fputs (_("\
-If a long option shows an argument as mandatory, then it is mandatory\n\
-for the equivalent short option also.  Similarly for optional arguments.\n"),
-	     stdout);
-      putc ('\n', stdout);
+Mandatory arguments to long options are mandatory for short options too.\n\
+"), stdout);
+      fputs (_("\
+The same is true for optional arguments.\n\
+"), stdout);
 
       fputs (_("\
+\n\
 Operation modes:\n\
   -h, --help                 display this help and exit\n\
   -V, --version              output version information and exit\n\
       --print-localedir      output directory containing locale-dependent data\n\
-  -y, --yacc                 emulate POSIX yacc\n"), stdout);
-      putc ('\n', stdout);
+      --print-datadir        output directory containing skeletons and XSLT\n\
+  -y, --yacc                 emulate POSIX Yacc\n\
+  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n\
+  -f, --feature[=FEATURE]    activate miscellaneous features\n\
+\n\
+"), stdout);
 
       fputs (_("\
 Parser:\n\
-  -S, --skeleton=FILE        specify the skeleton to use\n\
-  -t, --debug                instrument the parser for debugging\n\
-      --locations            enable locations computation\n\
-  -p, --name-prefix=PREFIX   prepend PREFIX to the external symbols\n\
-  -l, --no-lines             don't generate `#line' directives\n\
-  -n, --no-parser            generate the tables only\n\
-  -k, --token-table          include a table of token names\n\
+  -L, --language=LANGUAGE          specify the output programming language\n\
+  -S, --skeleton=FILE              specify the skeleton to use\n\
+  -t, --debug                      instrument the parser for debugging\n\
+      --locations                  enable location support\n\
+  -D, --define=NAME[=VALUE]        similar to '%define NAME \"VALUE\"'\n\
+  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n\
+  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols\n\
+                                   deprecated by '-Dapi.prefix=PREFIX'\n\
+  -l, --no-lines                   don't generate '#line' directives\n\
+  -k, --token-table                include a table of token names\n\
+"), stdout);
+      putc ('\n', stdout);
+
+      /* Keep -d and --defines separate so that ../build-aux/cross-options.pl
+       * won't assume that -d also takes an argument.  */
+      fputs (_("\
+Output:\n\
+      --defines[=FILE]       also produce a header file\n\
+  -d                         likewise but cannot specify FILE (for POSIX Yacc)\n\
+  -r, --report=THINGS        also produce details on the automaton\n\
+      --report-file=FILE     write report to FILE\n\
+  -v, --verbose              same as `--report=state'\n\
+  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n\
+  -o, --output=FILE          leave output to FILE\n\
+  -g, --graph[=FILE]         also output a graph of the automaton\n\
+  -x, --xml[=FILE]           also output an XML report of the automaton\n\
+                             (the XML schema is experimental)\n\
 "), stdout);
       putc ('\n', stdout);
 
       fputs (_("\
-Output:\n\
-  -d, --defines              also produce a header file\n\
-  -r, --report=THINGS        also produce details on the automaton\n\
-  -v, --verbose              same as `--report=state'\n\
-  -b, --file-prefix=PREFIX   specify a PREFIX for output files\n\
-  -o, --output=FILE          leave output to FILE\n\
-  -g, --graph                also produce a VCG description of the automaton\n\
+Warning categories include:\n\
+  `midrule-values'  unset or unused midrule values\n\
+  `yacc'            incompatibilities with POSIX Yacc\n\
+  `conflicts-sr'    S/R conflicts (enabled by default)\n\
+  `conflicts-rr'    R/R conflicts (enabled by default)\n\
+  `deprecated'      obsolete constructs\n\
+  `other'           all other warnings (enabled by default)\n\
+  `all'             all the warnings\n\
+  `no-CATEGORY'     turn off warnings in CATEGORY\n\
+  `none'            turn off all the warnings\n\
+  `error'           treat warnings as errors\n\
 "), stdout);
       putc ('\n', stdout);
 
@@ -246,7 +377,7 @@
 THINGS is a list of comma separated words that can include:\n\
   `state'        describe the states\n\
   `itemset'      complete the core item sets with their closure\n\
-  `look-ahead'   explicitly associate look-ahead tokens to items\n\
+  `lookahead'    explicitly associate lookahead tokens to items\n\
   `solved'       describe shift/reduce conflicts solving\n\
   `all'          include all the above information\n\
   `none'         disable the report\n\
@@ -254,7 +385,31 @@
       putc ('\n', stdout);
 
       fputs (_("\
-Report bugs to <bug-bison@gnu.org>.\n"), stdout);
+FEATURE is a list of comma separated words that can include:\n\
+  `caret'        show errors with carets\n\
+  `all'          all of the above\n\
+  `none'         disable all of the above\n\
+  "), stdout);
+
+      putc ('\n', stdout);
+      printf (_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+      printf (_("%s home page: <%s>.\n"), PACKAGE_NAME, PACKAGE_URL);
+      fputs (_("General help using GNU software: "
+               "<http://www.gnu.org/gethelp/>.\n"),
+             stdout);
+      /* Don't output this redundant message for English locales.
+         Note we still output for 'C' so that it gets included in the
+         man page.  */
+      const char *lc_messages = setlocale (LC_MESSAGES, NULL);
+      if (lc_messages && strcmp (lc_messages, "en_"))
+        /* TRANSLATORS: Replace LANG_CODE in this URL with your language
+           code <http://translationproject.org/team/LANG_CODE.html> to
+           form one of the URLs at http://translationproject.org/team/.
+           Otherwise, replace the entire URL with your translation team's
+           email address.  */
+        fputs (_("Report translation bugs to "
+                 "<http://translationproject.org/team/>.\n"), stdout);
+      fputs (_("For complete documentation, run: info bison.\n"), stdout);
     }
 
   exit (status);
@@ -276,7 +431,8 @@
   putc ('\n', stdout);
 
   fprintf (stdout,
-	   _("Copyright (C) %d Free Software Foundation, Inc.\n"), 2006);
+	   _("Copyright (C) %d Free Software Foundation, Inc.\n"),
+	   PACKAGE_COPYRIGHT_YEAR);
 
   fputs (_("\
 This is free software; see the source for copying conditions.  There is NO\n\
@@ -286,26 +442,96 @@
 }
 
 
+/*-------------------------------------.
+| --skeleton and --language handling.  |
+`--------------------------------------*/
+
+void
+skeleton_arg (char const *arg, int prio, location loc)
+{
+  if (prio < skeleton_prio)
+    {
+      skeleton_prio = prio;
+      skeleton = arg;
+    }
+  else if (prio == skeleton_prio)
+    complain_at (loc, _("multiple skeleton declarations are invalid"));
+}
+
+void
+language_argmatch (char const *arg, int prio, location loc)
+{
+  char const *msg;
+
+  if (prio < language_prio)
+    {
+      int i;
+      for (i = 0; valid_languages[i].language[0]; i++)
+        if (c_strcasecmp (arg, valid_languages[i].language) == 0)
+          {
+            language_prio = prio;
+            language = &valid_languages[i];
+            return;
+          }
+      msg = _("%s: invalid language");
+    }
+  else if (language_prio == prio)
+    msg = _("multiple language declarations are invalid");
+  else
+    return;
+
+  complain_at (loc, msg, quotearg_colon (arg));
+}
+
 /*----------------------.
 | Process the options.  |
 `----------------------*/
 
-/* Shorts options.  */
-static char const short_options[] = "yvegdhr:ltknVo:b:p:S:T::";
+/* Shorts options.
+   Should be computed from long_options.  */
+static char const short_options[] =
+  "D:"
+  "F:"
+  "L:"
+  "S:"
+  "T::"
+  "V"
+  "W::"
+  "b:"
+  "d"
+  "f::"
+  "e"
+  "g::"
+  "h"
+  "k"
+  "l"
+  "n"
+  "o:"
+  "p:"
+  "r:"
+  "t"
+  "v"
+  "x::"
+  "y"
+  ;
 
 /* Values for long options that do not have single-letter equivalents.  */
 enum
 {
   LOCATIONS_OPTION = CHAR_MAX + 1,
-  PRINT_LOCALEDIR_OPTION
+  PRINT_LOCALEDIR_OPTION,
+  PRINT_DATADIR_OPTION,
+  REPORT_FILE_OPTION
 };
 
 static struct option const long_options[] =
 {
   /* Operation modes. */
-  { "help",            no_argument,	0,   'h' },
-  { "version",         no_argument,	0,   'V' },
-  { "print-localedir", no_argument,	0,   PRINT_LOCALEDIR_OPTION },
+  { "help",            no_argument,	  0,   'h' },
+  { "version",         no_argument,	  0,   'V' },
+  { "print-localedir", no_argument,	  0,   PRINT_LOCALEDIR_OPTION },
+  { "print-datadir",   no_argument,	  0,   PRINT_DATADIR_OPTION   },
+  { "warnings",        optional_argument, 0,   'W' },
 
   /* Parser. */
   { "name-prefix",   required_argument,	  0,   'p' },
@@ -316,7 +542,9 @@
   { "output",	   required_argument,	0,   'o' },
   { "output-file", required_argument,	0,   'o' },
   { "graph",	   optional_argument,	0,   'g' },
+  { "xml",         optional_argument,   0,   'x' },
   { "report",	   required_argument,   0,   'r' },
+  { "report-file", required_argument,   0,   REPORT_FILE_OPTION },
   { "verbose",	   no_argument,	        0,   'v' },
 
   /* Hidden. */
@@ -324,6 +552,7 @@
 
   /* Output.  */
   { "defines",     optional_argument,   0,   'd' },
+  { "feature",     optional_argument,   0,   'f' },
 
   /* Operation modes.  */
   { "fixed-output-files", no_argument,  0,   'y' },
@@ -331,11 +560,13 @@
 
   /* Parser.  */
   { "debug",	      no_argument,               0,   't' },
+  { "define",	      required_argument,         0,   'D' },
+  { "force-define",   required_argument,         0,   'F' },
   { "locations",      no_argument,		 0, LOCATIONS_OPTION },
   { "no-lines",       no_argument,               0,   'l' },
-  { "no-parser",      no_argument,               0,   'n' },
   { "raw",            no_argument,               0,     0 },
   { "skeleton",       required_argument,         0,   'S' },
+  { "language",       required_argument,         0,   'L' },
   { "token-table",    no_argument,               0,   'k' },
 
   {0, 0, 0, 0}
@@ -349,6 +580,19 @@
 # define AS_FILE_NAME(File) (File)
 #endif
 
+/* Build a location for the current command line argument. */
+static
+location
+command_line_location (void)
+{
+  location res;
+  /* "<command line>" is used in GCC's messages about -D. */
+  boundary_set (&res.start, uniqstr_new ("<command line>"), optind - 1, -1);
+  res.end = res.start;
+  return res;
+}
+
+
 void
 getargs (int argc, char *argv[])
 {
@@ -358,89 +602,139 @@
 	 != -1)
     switch (c)
       {
+        /* ASCII Sorting for short options (i.e., upper case then
+           lower case), and then long-only options.  */
+
       case 0:
 	/* Certain long options cause getopt_long to return 0.  */
 	break;
 
-      case 'y':
-	yacc_flag = true;
-	break;
-
-      case 'h':
-	usage (EXIT_SUCCESS);
-
-      case 'V':
-	version ();
-	exit (EXIT_SUCCESS);
-
-      case PRINT_LOCALEDIR_OPTION:
-	printf ("%s\n", LOCALEDIR);
-	exit (EXIT_SUCCESS);
-
-      case 'g':
-	/* Here, the -g and --graph=FILE options are differentiated.  */
-	graph_flag = true;
-	if (optarg)
-	  spec_graph_file = AS_FILE_NAME (optarg);
-	break;
-
-      case 'v':
-	report_flag |= report_states;
-	break;
-
-      case 'S':
-	skeleton = AS_FILE_NAME (optarg);
+      case 'D': /* -DNAME[=VALUE]. */
+      case 'F': /* -FNAME[=VALUE]. */
+        {
+          char* name = optarg;
+          char* value = mbschr (optarg, '=');
+          if (value)
+            *value++ = 0;
+          muscle_percent_define_insert (name, command_line_location (),
+                                        value ? value : "",
+                                        c == 'D' ? MUSCLE_PERCENT_DEFINE_D
+                                                 : MUSCLE_PERCENT_DEFINE_F);
+        }
 	break;
 
       case 'I':
 	include = AS_FILE_NAME (optarg);
 	break;
 
+      case 'L':
+	language_argmatch (optarg, command_line_prio,
+			   command_line_location ());
+	break;
+
+      case 'S':
+	skeleton_arg (AS_FILE_NAME (optarg), command_line_prio,
+		      command_line_location ());
+	break;
+
+      case 'T':
+	FLAGS_ARGMATCH (trace, optarg);
+	break;
+
+      case 'V':
+	version ();
+	exit (EXIT_SUCCESS);
+
+      case 'f':
+        FLAGS_ARGMATCH (feature, optarg);
+        break;
+
+      case 'W':
+	FLAGS_ARGMATCH (warnings, optarg);
+	break;
+
+      case 'b':
+	spec_file_prefix = AS_FILE_NAME (optarg);
+	break;
+
       case 'd':
-	/* Here, the -d and --defines options are differentiated.  */
-	defines_flag = true;
+        /* Here, the -d and --defines options are differentiated.  */
+        defines_flag = true;
+        if (optarg)
+          {
+            free (spec_defines_file);
+            spec_defines_file = xstrdup (AS_FILE_NAME (optarg));
+          }
+        break;
+
+      case 'g':
+	graph_flag = true;
 	if (optarg)
-	  spec_defines_file = AS_FILE_NAME (optarg);
+          {
+            free (spec_graph_file);
+            spec_graph_file = xstrdup (AS_FILE_NAME (optarg));
+          }
+	break;
+
+      case 'h':
+	usage (EXIT_SUCCESS);
+
+      case 'k':
+	token_table_flag = true;
 	break;
 
       case 'l':
 	no_lines_flag = true;
 	break;
 
-      case LOCATIONS_OPTION:
-	locations_flag = true;
-	break;
-
-      case 'k':
-	token_table_flag = true;
-	break;
-
-      case 'n':
-	no_parser_flag = true;
-	break;
-
-      case 't':
-	debug_flag = true;
-	break;
-
       case 'o':
 	spec_outfile = AS_FILE_NAME (optarg);
 	break;
 
-      case 'b':
-	spec_file_prefix = AS_FILE_NAME (optarg);
-	break;
-
       case 'p':
 	spec_name_prefix = optarg;
 	break;
 
       case 'r':
-	report_argmatch (optarg);
+	FLAGS_ARGMATCH (report, optarg);
 	break;
 
-      case 'T':
-	trace_argmatch (optarg);
+      case 't':
+	debug = true;
+	break;
+
+      case 'v':
+	report_flag |= report_states;
+	break;
+
+      case 'x':
+	xml_flag = true;
+	if (optarg)
+          {
+            free (spec_xml_file);
+            spec_xml_file = xstrdup (AS_FILE_NAME (optarg));
+          }
+	break;
+
+      case 'y':
+	yacc_flag = true;
+	break;
+
+      case LOCATIONS_OPTION:
+	locations_flag = true;
+	break;
+
+      case PRINT_LOCALEDIR_OPTION:
+	printf ("%s\n", LOCALEDIR);
+	exit (EXIT_SUCCESS);
+
+      case PRINT_DATADIR_OPTION:
+	printf ("%s\n", compute_pkgdatadir ());
+	exit (EXIT_SUCCESS);
+
+      case REPORT_FILE_OPTION:
+        free (spec_verbose_file);
+	spec_verbose_file = xstrdup (AS_FILE_NAME (optarg));
 	break;
 
       default:
@@ -450,11 +744,20 @@
   if (argc - optind != 1)
     {
       if (argc - optind < 1)
-	error (0, 0, _("missing operand after `%s'"), argv[argc - 1]);
+        error (0, 0, _("%s: missing operand"), quotearg_colon (argv[argc - 1]));
       else
-	error (0, 0, _("extra operand `%s'"), argv[optind + 1]);
+        error (0, 0, _("extra operand %s"), quote (argv[optind + 1]));
       usage (EXIT_FAILURE);
     }
 
   current_file = grammar_file = uniqstr_new (argv[optind]);
+  MUSCLE_INSERT_C_STRING ("file_name", grammar_file);
+}
+
+void
+tr (char *s, char from, char to)
+{
+  for (; *s; s++)
+    if (*s == from)
+      *s = to;
 }
diff --git a/src/getargs.h b/src/getargs.h
index 816eb95..b2126fc 100644
--- a/src/getargs.h
+++ b/src/getargs.h
@@ -1,41 +1,45 @@
 /* Parse command line arguments for bison.
-   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef GETARGS_H_
 # define GETARGS_H_
 
+#include "location.h"
+
+enum { command_line_prio, grammar_prio, default_prio };
+
 /* flags set by % directives */
 
 /* for -S */
 extern char const *skeleton;
+extern int skeleton_prio;
 
 /* for -I */
 extern char const *include;
 
-extern bool debug_flag;			/* for -t */
+extern bool debug;			/* for -t */
 extern bool defines_flag;		/* for -d */
 extern bool graph_flag;			/* for -g */
+extern bool xml_flag;			/* for -x */
 extern bool locations_flag;
 extern bool no_lines_flag;		/* for -l */
-extern bool no_parser_flag;		/* for -n */
 extern bool token_table_flag;		/* for -k */
 extern bool yacc_flag;			/* for -y */
 
@@ -48,48 +52,109 @@
 
 extern bool glr_parser;
 
-/* PURE_PARSER is true if should generate a parser that is all pure
-   and reentrant.  */
-
-extern bool pure_parser;
-
 /* NONDETERMINISTIC_PARSER is true iff conflicts are accepted.  This
    is used by the GLR parser, and might be used in BackTracking
    parsers too.  */
 
 extern bool nondeterministic_parser;
 
-/* --trace.  */
-enum trace
-  {
-    trace_none      = 0,
-    trace_scan      = 1 << 0,
-    trace_parse     = 1 << 1,
-    trace_resource  = 1 << 2,
-    trace_sets      = 1 << 3,
-    trace_bitsets   = 1 << 4,
-    trace_tools     = 1 << 5,
-    trace_automaton = 1 << 6,
-    trace_grammar   = 1 << 7,
-    trace_time      = 1 << 8,
-    trace_skeleton  = 1 << 9,
-    trace_m4        = 1 << 10,
-    trace_all       = ~0
-  };
-extern int trace_flag;
 
-/* --report.  */
+/* --language.  */
+struct bison_language
+{
+  char language[sizeof "Java"];
+  char skeleton[sizeof "java-skel.m4"];
+  char src_extension[sizeof ".java"];
+  char header_extension[sizeof ".java"];
+  bool add_tab;
+};
+
+extern int language_prio;
+extern struct bison_language const *language;
+
+/*-----------.
+| --report.  |
+`-----------*/
+
 enum report
   {
     report_none             = 0,
     report_states           = 1 << 0,
     report_itemsets         = 1 << 1,
-    report_look_ahead_tokens= 1 << 2,
+    report_lookahead_tokens = 1 << 2,
     report_solved_conflicts = 1 << 3,
     report_all              = ~0
   };
+/** What appears in the *.output file.  */
 extern int report_flag;
 
+/*----------.
+| --trace.  |
+`----------*/
+enum trace
+  {
+    trace_none      = 0,       /**< No traces. */
+    trace_scan      = 1 << 0,  /**< Grammar scanner traces. */
+    trace_parse     = 1 << 1,  /**< Grammar parser traces. */
+    trace_resource  = 1 << 2,  /**< Memory allocation. */
+    trace_sets      = 1 << 3,  /**< Grammar sets: firsts, nullable etc. */
+    trace_bitsets   = 1 << 4,  /**< Use of bitsets. */
+    trace_tools     = 1 << 5,  /**< m4 invocation. */
+    trace_automaton = 1 << 6,  /**< Construction of the automaton. */
+    trace_grammar   = 1 << 7,  /**< Reading, reducing the grammar. */
+    trace_time      = 1 << 8,  /**< Time consumption. */
+    trace_skeleton  = 1 << 9,  /**< Skeleton postprocessing. */
+    trace_m4        = 1 << 10, /**< M4 traces. */
+    trace_muscles   = 1 << 11, /**< M4 definitions of the muscles. */
+    trace_ielr      = 1 << 12, /**< IELR conversion. */
+    trace_all       = ~0       /**< All of the above.  */
+  };
+/** What debug items bison displays during its run.  */
+extern int trace_flag;
+
+/*-------------.
+| --warnings.  |
+`-------------*/
+
+enum warnings
+  {
+    warnings_none             = 0,      /**< Issue no warnings.  */
+    warnings_error            = 1 << 0, /**< Warnings are treated as errors.  */
+    warnings_midrule_values   = 1 << 1, /**< Unset or unused midrule values.  */
+    warnings_yacc             = 1 << 2, /**< POSIXME.  */
+    warnings_conflicts_sr     = 1 << 3, /**< S/R conflicts.  */
+    warnings_conflicts_rr     = 1 << 4, /**< R/R conflicts.  */
+    warnings_other            = 1 << 5, /**< All other warnings.  */
+    warnings_all              = ~warnings_error /**< All above warnings.  */
+  };
+/** What warnings are issued.  */
+extern int warnings_flag;
+
+/*-------------.
+| --features.  |
+`-------------*/
+
+enum feature
+  {
+    feature_none  = 0,         /**< No additional feature.  */
+    feature_caret = 1 << 0,    /**< Enhance the output of errors with carets.  */
+    feature_all   = ~0         /**< All above features.  */
+  };
+/** What additional features to use.  */
+extern int feature_flag;
+
+/** Process the command line arguments.
+ *
+ *  \param argc   size of \a argv
+ *  \param argv   list of arguments.
+ */
 void getargs (int argc, char *argv[]);
 
+/* Used by parse-gram.y.  */
+void language_argmatch (char const *arg, int prio, location loc);
+void skeleton_arg (const char *arg, int prio, location loc);
+
+/** In the string \c s, replace all characters \c from by \c to.  */
+void tr (char *s, char from, char to);
+
 #endif /* !GETARGS_H_ */
diff --git a/src/gram.c b/src/gram.c
index 28666b0..5730e59 100644
--- a/src/gram.c
+++ b/src/gram.c
@@ -1,31 +1,30 @@
 /* Allocate input grammar variables for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 2001, 2002, 2003, 2005, 2006 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 2001-2003, 2005-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
-#include <quotearg.h>
-
+#include "complain.h"
+#include "getargs.h"
 #include "gram.h"
+#include "print-xml.h"
 #include "reader.h"
 #include "reduce.h"
 #include "symtab.h"
@@ -47,46 +46,24 @@
 
 int max_user_token_number = 256;
 
-/*--------------------------------------------------------------.
-| Return true IFF the rule has a `number' smaller than NRULES.  |
-`--------------------------------------------------------------*/
-
 bool
-rule_useful_p (rule *r)
+rule_useful_in_grammar_p (rule *r)
 {
   return r->number < nrules;
 }
 
-
-/*-------------------------------------------------------------.
-| Return true IFF the rule has a `number' higher than NRULES.  |
-`-------------------------------------------------------------*/
-
 bool
-rule_useless_p (rule *r)
+rule_useless_in_grammar_p (rule *r)
 {
-  return !rule_useful_p (r);
+  return !rule_useful_in_grammar_p (r);
 }
 
-
-/*--------------------------------------------------------------------.
-| Return true IFF the rule is not flagged as useful *and* is useful.  |
-| In other words, it was discarded because of conflicts.              |
-`--------------------------------------------------------------------*/
-
 bool
-rule_never_reduced_p (rule *r)
+rule_useless_in_parser_p (rule *r)
 {
-  return !r->useful && rule_useful_p (r);
+  return !r->useful && rule_useful_in_grammar_p (r);
 }
 
-
-/*----------------------------------------------------------------.
-| Print this RULE's number and lhs on OUT.  If a PREVIOUS_LHS was |
-| already displayed (by a previous call for another rule), avoid  |
-| useless repetitions.                                            |
-`----------------------------------------------------------------*/
-
 void
 rule_lhs_print (rule *r, symbol *previous_lhs, FILE *out)
 {
@@ -104,10 +81,11 @@
     }
 }
 
-
-/*--------------------------------------.
-| Return the number of symbols in RHS.  |
-`--------------------------------------*/
+void
+rule_lhs_print_xml (rule *r, FILE *out, int level)
+{
+  xml_printf (out, level, "<lhs>%s</lhs>", r->lhs->tag);
+}
 
 int
 rule_rhs_length (rule *r)
@@ -119,11 +97,6 @@
   return res;
 }
 
-
-/*-------------------------------.
-| Print this rule's RHS on OUT.  |
-`-------------------------------*/
-
 void
 rule_rhs_print (rule *r, FILE *out)
 {
@@ -140,10 +113,25 @@
     }
 }
 
-
-/*-------------------------.
-| Print this rule on OUT.  |
-`-------------------------*/
+static void
+rule_rhs_print_xml (rule *r, FILE *out, int level)
+{
+  if (*r->rhs >= 0)
+    {
+      item_number *rp;
+      xml_puts (out, level, "<rhs>");
+      for (rp = r->rhs; *rp >= 0; rp++)
+	xml_printf (out, level + 1, "<symbol>%s</symbol>",
+		    xml_escape (symbols[*rp]->tag));
+      xml_puts (out, level, "</rhs>");
+    }
+  else
+    {
+      xml_puts (out, level, "<rhs>");
+      xml_puts (out, level + 1, "<empty/>");
+      xml_puts (out, level, "</rhs>");
+    }
+}
 
 void
 rule_print (rule *r, FILE *out)
@@ -152,11 +140,6 @@
   rule_rhs_print (r, out);
 }
 
-
-/*------------------------.
-| Dump RITEM for traces.  |
-`------------------------*/
-
 void
 ritem_print (FILE *out)
 {
@@ -170,11 +153,6 @@
   fputs ("\n\n", out);
 }
 
-
-/*------------------------------------------.
-| Return the size of the longest rule RHS.  |
-`------------------------------------------*/
-
 size_t
 ritem_longest_rhs (void)
 {
@@ -191,11 +169,6 @@
   return max;
 }
 
-
-/*-----------------------------------------------------------------.
-| Print the grammar's rules that match FILTER on OUT under TITLE.  |
-`-----------------------------------------------------------------*/
-
 void
 grammar_rules_partial_print (FILE *out, const char *title,
 			     rule_filter filter)
@@ -222,21 +195,48 @@
     fputs ("\n\n", out);
 }
 
-
-/*------------------------------------------.
-| Print the grammar's useful rules on OUT.  |
-`------------------------------------------*/
-
 void
 grammar_rules_print (FILE *out)
 {
-  grammar_rules_partial_print (out, _("Grammar"), rule_useful_p);
+  grammar_rules_partial_print (out, _("Grammar"), rule_useful_in_grammar_p);
 }
 
+void
+grammar_rules_print_xml (FILE *out, int level)
+{
+  rule_number r;
+  bool first = true;
 
-/*-------------------.
-| Dump the grammar.  |
-`-------------------*/
+  for (r = 0; r < nrules + nuseless_productions; r++)
+    {
+      if (first)
+	xml_puts (out, level + 1, "<rules>");
+      first = false;
+      {
+        char const *usefulness;
+        if (rule_useless_in_grammar_p (&rules[r]))
+          usefulness = "useless-in-grammar";
+        else if (rule_useless_in_parser_p (&rules[r]))
+          usefulness = "useless-in-parser";
+        else
+          usefulness = "useful";
+        xml_indent (out, level + 2);
+        fprintf (out, "<rule number=\"%d\" usefulness=\"%s\"",
+                 rules[r].number, usefulness);
+        if (rules[r].precsym)
+          fprintf (out, " percent_prec=\"%s\"",
+                   xml_escape (rules[r].precsym->tag));
+        fputs (">\n", out);
+      }
+      rule_lhs_print_xml (&rules[r], out, level + 3);
+      rule_rhs_print_xml (&rules[r], out, level + 3);
+      xml_puts (out, level + 2, "</rule>");
+    }
+  if (!first)
+    xml_puts (out, level + 1, "</rules>");
+  else
+   xml_puts (out, level + 1, "<rules/>");
+}
 
 void
 grammar_dump (FILE *out, const char *title)
@@ -301,24 +301,24 @@
   fprintf (out, "\n\n");
 }
 
-
-/*------------------------------------------------------------------.
-| Report on STDERR the rules that are not flagged USEFUL, using the |
-| MESSAGE (which can be `useless rule' when invoked after grammar   |
-| reduction, or `never reduced' after conflicts were taken into     |
-| account).                                                         |
-`------------------------------------------------------------------*/
-
 void
-grammar_rules_never_reduced_report (const char *message)
+grammar_rules_useless_report (const char *message)
 {
   rule_number r;
   for (r = 0; r < nrules ; ++r)
     if (!rules[r].useful)
       {
-	location_print (stderr, rules[r].location);
-	fprintf (stderr, ": %s: %s: ", _("warning"), message);
-	rule_print (&rules[r], stderr);
+        if (feature_flag & feature_caret)
+          warn_at (rules[r].location, "%s", message);
+        else
+          {
+            warn_at (rules[r].location, "%s: ", message);
+            if (warnings_flag & warnings_other)
+              {
+                rule_print (&rules[r], stderr);
+                fflush (stderr);
+              }
+          }
       }
 }
 
diff --git a/src/gram.h b/src/gram.h
index b8f316a..3f75dd8 100644
--- a/src/gram.h
+++ b/src/gram.h
@@ -1,24 +1,22 @@
 /* Data definitions for internal representation of Bison's input.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2001, 2002, 2003, 2004, 2005
-   Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2001-2007, 2009-2012 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef GRAM_H_
 # define GRAM_H_
@@ -115,6 +113,7 @@
 extern int nvars;
 
 typedef int item_number;
+#define ITEM_NUMBER_MAX INT_MAX
 extern item_number *ritem;
 extern unsigned int nritems;
 
@@ -146,6 +145,7 @@
 
 /* Rule numbers.  */
 typedef int rule_number;
+#define RULE_NUMBER_MAX INT_MAX
 extern rule_number nrules;
 
 static inline item_number
@@ -204,20 +204,23 @@
 /* A function that selects a rule.  */
 typedef bool (*rule_filter) (rule *);
 
-/* Return true IFF the rule has a `number' smaller than NRULES.  */
-bool rule_useful_p (rule *r);
+/* Return true IFF the rule has a `number' smaller than NRULES.  That is, it is
+   useful in the grammar.  */
+bool rule_useful_in_grammar_p (rule *r);
 
-/* Return true IFF the rule has a `number' higher than NRULES.  */
-bool rule_useless_p (rule *r);
+/* Return true IFF the rule has a `number' higher than NRULES.  That is, it is
+   useless in the grammar.  */
+bool rule_useless_in_grammar_p (rule *r);
 
-/* Return true IFF the rule is not flagged as useful *and* is useful.
-   In other words, it was discarded because of conflicts.  */
-bool rule_never_reduced_p (rule *r);
+/* Return true IFF the rule is not flagged as useful but is useful in the
+   grammar.  In other words, it was discarded because of conflicts.  */
+bool rule_useless_in_parser_p (rule *r);
 
 /* Print this rule's number and lhs on OUT.  If a PREVIOUS_LHS was
    already displayed (by a previous call for another rule), avoid
    useless repetitions.  */
 void rule_lhs_print (rule *r, symbol *previous_lhs, FILE *out);
+void rule_lhs_print_xml (rule *r, FILE *out, int level);
 
 /* Return the length of the RHS.  */
 int rule_rhs_length (rule *r);
@@ -248,22 +251,23 @@
 /* Return the size of the longest rule RHS.  */
 size_t ritem_longest_rhs (void);
 
-/* Print the grammar's rules numbers from BEGIN (inclusive) to END
-   (exclusive) on OUT under TITLE.  */
+/* Print the grammar's rules that match FILTER on OUT under TITLE.  */
 void grammar_rules_partial_print (FILE *out, const char *title,
 				  rule_filter filter);
 
-/* Print the grammar's rules on OUT.  */
+/* Print the grammar's useful rules on OUT.  */
 void grammar_rules_print (FILE *out);
+/* Print all of the grammar's rules with a "usefulness" attribute.  */
+void grammar_rules_print_xml (FILE *out, int level);
 
 /* Dump the grammar. */
 void grammar_dump (FILE *out, const char *title);
 
 /* Report on STDERR the rules that are not flagged USEFUL, using the
-   MESSAGE (which can be `useless rule' when invoked after grammar
-   reduction, or `never reduced' after conflicts were taken into
-   account).  */
-void grammar_rules_never_reduced_report (const char *message);
+   MESSAGE (which can be `rule useless in grammar' when invoked after grammar
+   reduction, or `rule useless in parser due to conflicts' after conflicts
+   were taken into account).  */
+void grammar_rules_useless_report (const char *message);
 
 /* Free the packed grammar. */
 void grammar_free (void);
diff --git a/src/graphviz.c b/src/graphviz.c
new file mode 100644
index 0000000..9da5f6e
--- /dev/null
+++ b/src/graphviz.c
@@ -0,0 +1,218 @@
+/* Output Graphviz specification of a state machine generated by Bison.
+
+   Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert and Satya Kiran Popuri.  */
+
+#include <config.h>
+#include "system.h"
+
+#include <quotearg.h>
+
+#include "files.h"
+#include "gram.h"
+#include "graphviz.h"
+#include "tables.h"
+
+/* Return an unambiguous printable representation for NAME, suitable
+   for C strings.  Use slot 2 since the user may use slots 0 and 1.  */
+
+static char *
+quote (char const *name)
+{
+  return quotearg_n_style (2, c_quoting_style, name);
+}
+
+void
+start_graph (FILE *fout)
+{
+  fprintf (fout,
+           _("// Generated by %s.\n"
+             "// Report bugs to <%s>.\n"
+             "// Home page: <%s>.\n"
+             "\n"),
+           PACKAGE_STRING,
+           PACKAGE_BUGREPORT,
+           PACKAGE_URL);
+  fprintf (fout,
+           "digraph %s\n"
+           "{\n",
+           quote (grammar_file));
+  fprintf (fout,
+           "  node [fontname = courier, shape = box, colorscheme = paired6]\n"
+           "  edge [fontname = courier]\n"
+           "\n");
+}
+
+void
+output_node (int id, char const *label, FILE *fout)
+{
+  fprintf (fout, "  %d [label=\"%s\"]\n", id, label);
+}
+
+void
+output_edge (int source, int destination, char const *label,
+             char const *style, FILE *fout)
+{
+  fprintf (fout, "  %d -> %d [style=%s", source, destination, style);
+  if (label)
+    fprintf (fout, " label=%s", quote (label));
+  fputs ("]\n", fout);
+}
+
+char const *
+escape (char const *name)
+{
+  char *q = quote (name);
+  q[strlen (q) - 1] = '\0';
+  return q + 1;
+}
+
+static void
+no_reduce_bitset_init (state const *s, bitset *no_reduce_set)
+{
+  int n;
+  *no_reduce_set = bitset_create (ntokens, BITSET_FIXED);
+  bitset_zero (*no_reduce_set);
+  FOR_EACH_SHIFT (s->transitions, n)
+    bitset_set (*no_reduce_set, TRANSITION_SYMBOL (s->transitions, n));
+  for (n = 0; n < s->errs->num; ++n)
+    if (s->errs->symbols[n])
+      bitset_set (*no_reduce_set, s->errs->symbols[n]->number);
+}
+
+static void
+conclude_red (struct obstack *out, int source, rule_number ruleno,
+              bool enabled, bool first, FILE *fout)
+{
+  /* If no lookahead tokens were valid transitions, this reduction is
+     actually hidden, so cancel everything. */
+  if (first)
+    (void) obstack_finish0 (out);
+  else
+    {
+      char const *ed = enabled ? "" : "d";
+      char const *color = enabled ? ruleno ? "3" : "1" : "5";
+
+      /* First, build the edge's head. The name of reduction nodes is "nRm",
+         with n the source state and m the rule number. This is because we
+         don't want all the reductions bearing a same rule number to point to
+         the same state, since that is not the desired format. */
+      fprintf (fout, "  %1$d -> \"%1$dR%2$d%3$s\" [",
+               source, ruleno, ed);
+
+      /* (The lookahead tokens have been added to the beginning of the
+         obstack, in the caller function.) */
+      if (! obstack_empty_p (out))
+        {
+          char *label = obstack_finish0 (out);
+          fprintf (fout, "label=\"[%s]\", ", label);
+          obstack_free (out, label);
+        }
+
+      /* Then, the edge's tail. */
+      fprintf (fout, "style=solid]\n");
+
+      /* Build the associated diamond representation of the target rule. */
+      fprintf (fout, " \"%dR%d%s\" [label=\"",
+               source, ruleno, ed);
+      if (ruleno)
+        fprintf (fout, "R%d", ruleno);
+      else
+        fprintf (fout, "Acc");
+
+      fprintf (fout, "\", fillcolor=%s, shape=diamond, style=filled]\n",
+               color);
+    }
+}
+
+static bool
+print_token (struct obstack *out, bool first, char const *tok)
+{
+  char const *q = escape (tok);
+
+  if (! first)
+    obstack_sgrow (out, ", ");
+  obstack_sgrow (out, q);
+  return false;
+}
+
+void
+output_red (state const *s, reductions const *reds, FILE *fout)
+{
+  bitset no_reduce_set;
+  int j;
+  int source = s->number;
+
+  /* Two obstacks are needed: one for the enabled reductions, and one
+     for the disabled reductions, because in the end we want two
+     separate edges, even though in most cases only one will actually
+     be printed. */
+  struct obstack dout;
+  struct obstack eout;
+
+  no_reduce_bitset_init (s, &no_reduce_set);
+  obstack_init (&dout);
+  obstack_init (&eout);
+
+  for (j = 0; j < reds->num; ++j)
+    {
+      bool defaulted = false;
+      bool firstd = true;
+      bool firste = true;
+      rule_number ruleno = reds->rules[j]->number;
+      rule *default_reduction = NULL;
+
+      if (yydefact[s->number] != 0)
+        default_reduction = &rules[yydefact[s->number] - 1];
+
+      /* Build the lookahead tokens lists, one for enabled transitions and one
+         for disabled transistions. */
+      if (default_reduction && default_reduction == reds->rules[j])
+        defaulted = true;
+      if (reds->lookahead_tokens)
+        {
+          int i;
+          for (i = 0; i < ntokens; i++)
+            if (bitset_test (reds->lookahead_tokens[j], i))
+              {
+                if (bitset_test (no_reduce_set, i))
+                  firstd = print_token (&dout, firstd, symbols[i]->tag);
+                else
+                  {
+                    if (! defaulted)
+                      firste = print_token (&eout, firste, symbols[i]->tag);
+                    bitset_set (no_reduce_set, i);
+                  }
+              }
+        }
+
+      /* Do the actual output. */
+      conclude_red (&dout, source, ruleno, false, firstd, fout);
+      conclude_red (&eout, source, ruleno, true, firste && !defaulted, fout);
+    }
+  obstack_free (&dout, 0);
+  obstack_free (&eout, 0);
+  bitset_free (no_reduce_set);
+}
+
+void
+finish_graph (FILE *fout)
+{
+  fputs ("}\n", fout);
+}
diff --git a/src/graphviz.h b/src/graphviz.h
new file mode 100644
index 0000000..239cdd2
--- /dev/null
+++ b/src/graphviz.h
@@ -0,0 +1,71 @@
+/* Output Graphviz specification of a state machine generated by Bison.
+
+   Copyright (C) 2006, 2010-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert and Satya Kiran Popuri.  */
+
+#ifndef GRAPHVIZ_H_
+# define GRAPHVIZ_H_
+
+#include "state.h"
+
+/** Begin a Dot graph.
+ *
+ * \param fout   output stream.
+ */
+void start_graph (FILE *fout);
+
+/** Output a Dot node.
+ *
+ * \param id     identifier of the node
+ * \param label  human readable label of the node (no Dot escaping needed).
+ * \param fout   output stream.
+ */
+void output_node (int id, char const *label, FILE *fout);
+
+/** Output a Dot edge.
+ * \param source       id of the source node
+ * \param destination  id of the target node
+ * \param label        human readable label of the edge
+ *                     (no Dot escaping needed).  Can be 0.
+ * \param style        Dot style of the edge (e.g., "dotted" or "solid").
+ * \param fout         output stream.
+ */
+void output_edge (int source, int destination, char const *label,
+                  char const *style, FILE *fout);
+
+/** Output a reduction.
+ * \param s            current state
+ * \param reds         the set of reductions
+ * \param fout         output stream.
+ */
+void output_red (state const *s, reductions const *reds, FILE *fout);
+
+/** End a Dot graph.
+ *
+ * \param fout  output stream.
+ */
+void finish_graph (FILE *fout);
+
+/** Escape a lookahead token.
+ *
+ * \param name         the token.
+ */
+char const *escape (char const *name);
+
+#endif /* ! GRAPHVIZ_H_ */
diff --git a/src/ielr.c b/src/ielr.c
new file mode 100644
index 0000000..e6aa6f5
--- /dev/null
+++ b/src/ielr.c
@@ -0,0 +1,1200 @@
+/* IELR main implementation.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+#include "system.h"
+
+#include "ielr.h"
+
+#include <bitset.h>
+#include <timevar.h>
+
+#include "AnnotationList.h"
+#include "derives.h"
+#include "getargs.h"
+#include "lalr.h"
+#include "muscle-tab.h"
+#include "nullable.h"
+#include "relation.h"
+#include "state.h"
+#include "symtab.h"
+
+/** Records the value of the \%define variable lr.type.  */
+typedef enum { LR_TYPE__LALR, LR_TYPE__IELR, LR_TYPE__CANONICAL_LR } LrType;
+
+/**
+ * \post:
+ *   - \c result = a new \c bitset of size \c ::nritems such that any bit \c i
+ *     is set iff <tt>ritem[i]</tt> is a nonterminal after which all ritems in
+ *     the same RHS are nullable nonterminals.  In other words, the follows of
+ *     a goto on <tt>ritem[i]</tt> include the lookahead set of the item.
+ */
+static bitset
+ielr_compute_ritem_sees_lookahead_set (void)
+{
+  bitset result = bitset_create (nritems, BITSET_FIXED);
+  unsigned int i = nritems-1;
+  while (i>0)
+    {
+      --i;
+      while (!item_number_is_rule_number (ritem[i])
+             && ISVAR (ritem[i])
+             && nullable [item_number_as_symbol_number (ritem[i]) - ntokens])
+        bitset_set (result, i--);
+      if (!item_number_is_rule_number (ritem[i]) && ISVAR (ritem[i]))
+        bitset_set (result, i--);
+      while (!item_number_is_rule_number (ritem[i]) && i>0)
+        --i;
+    }
+  if (trace_flag & trace_ielr)
+    {
+      fprintf (stderr, "ritem_sees_lookahead_set:\n");
+      debug_bitset (result);
+      fprintf (stderr, "\n");
+    }
+  return result;
+}
+
+/**
+ * \pre:
+ *   - \c ritem_sees_lookahead_set was computed by
+ *     \c ielr_compute_ritem_sees_lookahead_set.
+ * \post:
+ *   - Each of \c *edgesp and \c *edge_countsp is a new array of size
+ *     \c ::ngotos.
+ *   - <tt>(*edgesp)[i]</tt> points to a \c goto_number array of size
+ *     <tt>(*edge_countsp)[i]+1</tt>.
+ *   - In such a \c goto_number array, the last element is \c ::END_NODE.
+ *   - All remaining elements are the indices of the gotos to which there is an
+ *     internal follow edge from goto \c i.
+ *   - There is an internal follow edge from goto \c i to goto \c j iff both:
+ *     - The from states of gotos \c i and \c j are the same.
+ *     - The transition nonterminal for goto \c i appears as the first RHS
+ *       symbol of at least one production for which both:
+ *       - The LHS is the transition symbol of goto \c j.
+ *       - All other RHS symbols are nullable nonterminals.
+ *     - In other words, the follows of goto \c i include the follows of
+ *       goto \c j and it's an internal edge because the from states are the
+ *       same.
+ */
+static void
+ielr_compute_internal_follow_edges (bitset ritem_sees_lookahead_set,
+                                    goto_number ***edgesp, int **edge_countsp)
+{
+  *edgesp = xnmalloc (ngotos, sizeof **edgesp);
+  *edge_countsp = xnmalloc (ngotos, sizeof **edge_countsp);
+  {
+    bitset sources = bitset_create (ngotos, BITSET_FIXED);
+    goto_number i;
+    for (i = 0; i < ngotos; ++i)
+      (*edge_countsp)[i] = 0;
+    for (i = 0; i < ngotos; ++i)
+      {
+        int nsources = 0;
+        {
+          rule **rulep;
+          for (rulep = derives[states[to_state[i]]->accessing_symbol
+                               - ntokens];
+               *rulep;
+               ++rulep)
+            {
+              /* If there is at least one RHS symbol, if the first RHS symbol
+                 is a nonterminal, and if all remaining RHS symbols (if any)
+                 are nullable nonterminals, create an edge from the LHS
+                 symbol's goto to the first RHS symbol's goto such that the RHS
+                 symbol's goto will be the source of the edge after the
+                 eventual relation_transpose below.
+
+                 Unlike in ielr_compute_always_follows, I use a bitset for
+                 edges rather than an array because it is possible that
+                 multiple RHS's with the same first symbol could fit and thus
+                 that we could end up with redundant edges.  With the
+                 possibility of redundant edges, it's hard to know ahead of
+                 time how large to make such an array.  Another possible
+                 redundancy is that source and destination might be the same
+                 goto.  Eliminating all these possible redundancies now might
+                 possibly help performance a little.  I have not proven any of
+                 this, but I'm guessing the bitset shouldn't entail much of a
+                 performance penalty, if any.  */
+              if (bitset_test (ritem_sees_lookahead_set,
+                               (*rulep)->rhs - ritem))
+                {
+                  goto_number source =
+                    map_goto (from_state[i],
+                              item_number_as_symbol_number (*(*rulep)->rhs));
+                  if (i != source && !bitset_test (sources, source))
+                    {
+                      bitset_set (sources, source);
+                      ++nsources;
+                      ++(*edge_countsp)[source];
+                    }
+                }
+            }
+        }
+        if (nsources == 0)
+          (*edgesp)[i] = NULL;
+        else
+          {
+            (*edgesp)[i] = xnmalloc (nsources + 1, sizeof *(*edgesp)[i]);
+            {
+              bitset_iterator biter_source;
+              bitset_bindex source;
+              int j = 0;
+              BITSET_FOR_EACH (biter_source, sources, source, 0)
+                (*edgesp)[i][j++] = source;
+            }
+            (*edgesp)[i][nsources] = END_NODE;
+          }
+        bitset_zero (sources);
+      }
+    bitset_free (sources);
+  }
+
+  relation_transpose (edgesp, ngotos);
+
+  if (trace_flag & trace_ielr)
+    {
+      fprintf (stderr, "internal_follow_edges:\n");
+      relation_print (*edgesp, ngotos, stderr);
+    }
+}
+
+/**
+ * \pre:
+ *   - \c ritem_sees_lookahead_set was computed by
+ *     \c ielr_compute_ritem_sees_lookahead_set.
+ *   - \c internal_follow_edges was computed by
+ *     \c ielr_compute_internal_follow_edges.
+ * \post:
+ *   - \c *follow_kernel_itemsp is a new \c bitsetv in which the number of rows
+ *     is \c ngotos and the number of columns is maximum number of kernel items
+ *     in any state.
+ *   - <tt>(*follow_kernel_itemsp)[i][j]</tt> is set iff the follows of goto
+ *     \c i include the lookahead set of item \c j in the from state of goto
+ *     \c i.
+ *   - Thus, <tt>(*follow_kernel_itemsp)[i][j]</tt> is always unset if there is
+ *     no item \c j in the from state of goto \c i.
+ */
+static void
+ielr_compute_follow_kernel_items (bitset ritem_sees_lookahead_set,
+                                  goto_number **internal_follow_edges,
+                                  bitsetv *follow_kernel_itemsp)
+{
+  {
+    size_t max_nitems = 0;
+    state_number i;
+    for (i = 0; i < nstates; ++i)
+      if (states[i]->nitems > max_nitems)
+        max_nitems = states[i]->nitems;
+    *follow_kernel_itemsp = bitsetv_create (ngotos, max_nitems, BITSET_FIXED);
+  }
+  {
+    goto_number i;
+    for (i = 0; i < ngotos; ++i)
+      {
+        size_t nitems = states[from_state[i]]->nitems;
+        item_number *items = states[from_state[i]]->items;
+        size_t j;
+        for (j = 0; j < nitems; ++j)
+          /* If this item has this goto and if all subsequent symbols in this
+             RHS (if any) are nullable nonterminals, then record this item as
+             one whose lookahead set is included in this goto's follows.  */
+          if (item_number_is_symbol_number (ritem[items[j]])
+              && item_number_as_symbol_number (ritem[items[j]])
+                == states[to_state[i]]->accessing_symbol
+              && bitset_test (ritem_sees_lookahead_set, items[j]))
+            bitset_set ((*follow_kernel_itemsp)[i], j);
+      }
+  }
+  relation_digraph (internal_follow_edges, ngotos, follow_kernel_itemsp);
+
+  if (trace_flag & trace_ielr)
+    {
+      fprintf (stderr, "follow_kernel_items:\n");
+      debug_bitsetv (*follow_kernel_itemsp);
+    }
+}
+
+/**
+ * \pre
+ *   - \c *edgesp and \c edge_counts were computed by
+ *     \c ielr_compute_internal_follow_edges.
+ * \post
+ *   - \c *always_followsp is a new \c bitsetv with \c ngotos rows and
+ *     \c ntokens columns.
+ *   - <tt>(*always_followsp)[i][j]</tt> is set iff token \c j is an always
+ *     follow (that is, it's computed by internal and successor edges) of goto
+ *     \c i.
+ *   - Rows of \c *edgesp have been realloc'ed and extended to include
+ *     successor follow edges.  \c edge_counts has not been updated.
+ */
+static void
+ielr_compute_always_follows (goto_number ***edgesp,
+                             int const edge_counts[],
+                             bitsetv *always_followsp)
+{
+  *always_followsp = bitsetv_create (ngotos, ntokens, BITSET_FIXED);
+  {
+    goto_number *edge_array = xnmalloc (ngotos, sizeof *edge_array);
+    goto_number i;
+    for (i = 0; i < ngotos; ++i)
+      {
+        goto_number nedges = edge_counts[i];
+        {
+          int j;
+          transitions *trans = states[to_state[i]]->transitions;
+          FOR_EACH_SHIFT (trans, j)
+            bitset_set ((*always_followsp)[i], TRANSITION_SYMBOL (trans, j));
+          for (; j < trans->num; ++j)
+            {
+              symbol_number sym = TRANSITION_SYMBOL (trans, j);
+              if (nullable[sym - ntokens])
+                edge_array[nedges++] = map_goto (to_state[i], sym);
+            }
+        }
+        if (nedges - edge_counts[i])
+          {
+            (*edgesp)[i] =
+              xnrealloc ((*edgesp)[i], nedges + 1, sizeof *(*edgesp)[i]);
+            memcpy ((*edgesp)[i] + edge_counts[i], edge_array + edge_counts[i],
+                    (nedges - edge_counts[i]) * sizeof *(*edgesp)[i]);
+            (*edgesp)[i][nedges] = END_NODE;
+          }
+      }
+    free (edge_array);
+  }
+  relation_digraph (*edgesp, ngotos, always_followsp);
+
+  if (trace_flag & trace_ielr)
+    {
+      fprintf (stderr, "always follow edges:\n");
+      relation_print (*edgesp, ngotos, stderr);
+      fprintf (stderr, "always_follows:\n");
+      debug_bitsetv (*always_followsp);
+    }
+}
+
+/**
+ * \post
+ *   - \c result is a new array of size \c ::nstates.
+ *   - <tt>result[i]</tt> is an array of pointers to the predecessor
+ *     <tt>state</tt>'s of state \c i.
+ *   - The last element of such an array is \c NULL.
+ */
+static state ***
+ielr_compute_predecessors (void)
+{
+  state_number i;
+  int *predecessor_counts = xnmalloc (nstates, sizeof *predecessor_counts);
+  state ***result = xnmalloc (nstates, sizeof *result);
+  for (i = 0; i < nstates; ++i)
+    predecessor_counts[i] = 0;
+  for (i = 0; i < nstates; ++i)
+    {
+      int j;
+      for (j = 0; j < states[i]->transitions->num; ++j)
+        ++predecessor_counts[states[i]->transitions->states[j]->number];
+    }
+  for (i = 0; i < nstates; ++i)
+    {
+      result[i] = xnmalloc (predecessor_counts[i]+1, sizeof *result[i]);
+      result[i][predecessor_counts[i]] = NULL;
+      predecessor_counts[i] = 0;
+    }
+  for (i = 0; i < nstates; ++i)
+    {
+      int j;
+      for (j = 0; j < states[i]->transitions->num; ++j)
+        {
+          state_number k = states[i]->transitions->states[j]->number;
+          result[k][predecessor_counts[k]++] = states[i];
+        }
+    }
+  free (predecessor_counts);
+  return result;
+}
+
+/**
+ * \post
+ *   - \c *follow_kernel_itemsp and \c *always_followsp were computed by
+ *     \c ielr_compute_follow_kernel_items and
+ *     \c ielr_compute_always_follows.
+ *   - Iff <tt>predecessorsp != NULL</tt>, then \c *predecessorsp was computed
+ *     by \c ielr_compute_predecessors.
+ */
+static void
+ielr_compute_auxiliary_tables (bitsetv *follow_kernel_itemsp,
+                               bitsetv *always_followsp,
+                               state ****predecessorsp)
+{
+  goto_number **edges;
+  int *edge_counts;
+  {
+    bitset ritem_sees_lookahead_set = ielr_compute_ritem_sees_lookahead_set ();
+    ielr_compute_internal_follow_edges (ritem_sees_lookahead_set,
+                                        &edges, &edge_counts);
+    ielr_compute_follow_kernel_items (ritem_sees_lookahead_set, edges,
+                                      follow_kernel_itemsp);
+    bitset_free (ritem_sees_lookahead_set);
+  }
+  ielr_compute_always_follows (&edges, edge_counts, always_followsp);
+  {
+    int i;
+    for (i = 0; i < ngotos; ++i)
+      free (edges[i]);
+  }
+  free (edges);
+  free (edge_counts);
+  if (predecessorsp)
+    *predecessorsp = ielr_compute_predecessors ();
+}
+
+/**
+ * \note
+ *   - FIXME: It might be an interesting experiment to compare the space and
+ *     time efficiency of computing \c item_lookahead_sets either:
+ *     - Fully up front.
+ *     - Just-in-time, as implemented below.
+ *     - Not at all.  That is, just let annotations continue even when
+ *       unnecessary.
+ */
+bool
+ielr_item_has_lookahead (state *s, symbol_number lhs, size_t item,
+                         symbol_number lookahead, state ***predecessors,
+                         bitset **item_lookahead_sets)
+{
+  if (!item_lookahead_sets[s->number])
+    {
+      size_t i;
+      item_lookahead_sets[s->number] =
+        xnmalloc (s->nitems, sizeof item_lookahead_sets[s->number][0]);
+      for (i = 0; i < s->nitems; ++i)
+        item_lookahead_sets[s->number][i] = NULL;
+    }
+  if (!item_lookahead_sets[s->number][item])
+    {
+      item_lookahead_sets[s->number][item] =
+        bitset_create (ntokens, BITSET_FIXED);
+      /* If this kernel item is the beginning of a RHS, it must be the kernel
+         item in the start state, and so its LHS has no follows and no goto to
+         check.  If, instead, this kernel item is the successor of the start
+         state's kernel item, there are still no follows and no goto.  This
+         situation is fortunate because we want to avoid the - 2 below in both
+         cases.
+
+         Actually, IELR(1) should never invoke this function for either of
+         those cases because (1) follow_kernel_items will never reference a
+         kernel item for this RHS because the end token blocks sight of the
+         lookahead set from the RHS's only nonterminal, and (2) no reduction
+         has a lookback dependency on this lookahead set.  Nevertheless, I
+         didn't change this test to an aver just in case the usage of this
+         function evolves to need those two cases.  In both cases, the current
+         implementation returns the right result.  */
+      if (s->items[item] > 1)
+        {
+          /* If the LHS symbol of this item isn't known (because this is a
+             top-level invocation), go get it.  */
+          if (!lhs)
+            {
+              unsigned int i;
+              for (i = s->items[item];
+                   !item_number_is_rule_number (ritem[i]);
+                   ++i)
+                ;
+              lhs = rules[item_number_as_rule_number (ritem[i])].lhs->number;
+            }
+          /* If this kernel item is next to the beginning of the RHS, then
+             check all predecessors' goto follows for the LHS.  */
+          if (item_number_is_rule_number (ritem[s->items[item] - 2]))
+            {
+              state **predecessor;
+              aver (lhs != accept->number);
+              for (predecessor = predecessors[s->number];
+                   *predecessor;
+                   ++predecessor)
+                bitset_or (item_lookahead_sets[s->number][item],
+                           item_lookahead_sets[s->number][item],
+                           goto_follows[map_goto ((*predecessor)->number,
+                                                  lhs)]);
+            }
+          /* If this kernel item is later in the RHS, then check all
+             predecessor items' lookahead sets.  */
+          else
+            {
+              state **predecessor;
+              for (predecessor = predecessors[s->number];
+                   *predecessor;
+                   ++predecessor)
+                {
+                  size_t predecessor_item;
+                  for (predecessor_item = 0;
+                       predecessor_item < (*predecessor)->nitems;
+                       ++predecessor_item)
+                    if ((*predecessor)->items[predecessor_item]
+                        == s->items[item] - 1)
+                      break;
+                  aver (predecessor_item != (*predecessor)->nitems);
+                  ielr_item_has_lookahead (*predecessor, lhs,
+                                           predecessor_item, 0 /*irrelevant*/,
+                                           predecessors, item_lookahead_sets);
+                  bitset_or (item_lookahead_sets[s->number][item],
+                             item_lookahead_sets[s->number][item],
+                             item_lookahead_sets[(*predecessor)->number]
+                                                [predecessor_item]);
+                }
+            }
+        }
+    }
+  return bitset_test (item_lookahead_sets[s->number][item], lookahead);
+}
+
+/**
+ * \pre
+ *   - \c follow_kernel_items, \c always_follows, and \c predecessors
+ *     were computed by \c ielr_compute_auxiliary_tables.
+ * \post
+ *   - Each of <tt>*inadequacy_listsp</tt> and <tt>*annotation_listsp</tt>
+ *     points to a new array of size \c ::nstates.
+ *   - For <tt>0 <= i < ::nstates</tt>:
+ *     - <tt>(*inadequacy_listsp)[i]</tt> contains the \c InadequacyList head
+ *       node for <tt>states[i]</tt>.
+ *     - <tt>(*annotation_listsp)[i]</tt> contains the \c AnnotationList head
+ *       node for <tt>states[i]</tt>.
+ *   - <tt>*max_annotationsp</tt> is the maximum number of annotations per
+ *     state.
+ */
+static void
+ielr_compute_annotation_lists (bitsetv follow_kernel_items,
+                               bitsetv always_follows, state ***predecessors,
+                               AnnotationIndex *max_annotationsp,
+                               InadequacyList ***inadequacy_listsp,
+                               AnnotationList ***annotation_listsp,
+                               struct obstack *annotations_obstackp)
+{
+  bitset **item_lookahead_sets =
+    xnmalloc (nstates, sizeof *item_lookahead_sets);
+  AnnotationIndex *annotation_counts =
+    xnmalloc (nstates, sizeof *annotation_counts);
+  ContributionIndex max_contributions = 0;
+  unsigned int total_annotations = 0;
+  state_number i;
+
+  *inadequacy_listsp = xnmalloc (nstates, sizeof **inadequacy_listsp);
+  *annotation_listsp = xnmalloc (nstates, sizeof **annotation_listsp);
+  for (i = 0; i < nstates; ++i)
+    {
+      item_lookahead_sets[i] = NULL;
+      (*inadequacy_listsp)[i] = NULL;
+      (*annotation_listsp)[i] = NULL;
+      annotation_counts[i] = 0;
+    }
+  {
+    InadequacyListNodeCount inadequacy_list_node_count = 0;
+    for (i = 0; i < nstates; ++i)
+      AnnotationList__compute_from_inadequacies (
+        states[i], follow_kernel_items, always_follows, predecessors,
+        item_lookahead_sets, *inadequacy_listsp, *annotation_listsp,
+        annotation_counts, &max_contributions, annotations_obstackp,
+        &inadequacy_list_node_count);
+  }
+  *max_annotationsp = 0;
+  for (i = 0; i < nstates; ++i)
+    {
+      if (annotation_counts[i] > *max_annotationsp)
+        *max_annotationsp = annotation_counts[i];
+      total_annotations += annotation_counts[i];
+    }
+  if (trace_flag & trace_ielr)
+    {
+      for (i = 0; i < nstates; ++i)
+        {
+          fprintf (stderr, "Inadequacy annotations for state %d:\n", i);
+          AnnotationList__debug ((*annotation_listsp)[i],
+                                 states[i]->nitems, 2);
+        }
+      fprintf (stderr, "Number of LR(0)/LALR(1) states: %d\n", nstates);
+      fprintf (stderr, "Average number of annotations per state: %f\n",
+               (float)total_annotations/nstates);
+      fprintf (stderr, "Max number of annotations per state: %d\n",
+               *max_annotationsp);
+      fprintf (stderr, "Max number of contributions per annotation: %d\n",
+               max_contributions);
+    }
+  for (i = 0; i < nstates; ++i)
+    if (item_lookahead_sets[i])
+      {
+        size_t j;
+        for (j = 0; j < states[i]->nitems; ++j)
+          if (item_lookahead_sets[i][j])
+            bitset_free (item_lookahead_sets[i][j]);
+        free (item_lookahead_sets[i]);
+      }
+  free (item_lookahead_sets);
+  free (annotation_counts);
+}
+
+typedef struct state_list {
+  struct state_list *next;
+  state *state;
+  /** Has this state been recomputed as a successor of another state?  */
+  bool recomputedAsSuccessor;
+  /**
+   * \c NULL iff all lookahead sets are empty.  <tt>lookaheads[i] = NULL</tt>
+   * iff the lookahead set on item \c i is empty.
+   */
+  bitset *lookaheads;
+  /**
+   * nextIsocore is the next state in a circularly linked-list of all states
+   * with the same core.  The one originally computed by generate_states in
+   * LR0.c is lr0Isocore.
+   */
+  struct state_list *lr0Isocore;
+  struct state_list *nextIsocore;
+} state_list;
+
+/**
+ * \pre
+ *   - \c follow_kernel_items and \c always_follows were computed by
+ *     \c ielr_compute_auxiliary_tables.
+ *   - <tt>n->class = nterm_sym</tt>.
+ * \post
+ *   - \c follow_set contains the follow set for the goto on nonterminal \c n
+ *     in state \c s based on the lookaheads stored in <tt>s->lookaheads</tt>.
+ */
+static void
+ielr_compute_goto_follow_set (bitsetv follow_kernel_items,
+                              bitsetv always_follows, state_list *s,
+                              symbol *n, bitset follow_set)
+{
+  goto_number n_goto = map_goto (s->lr0Isocore->state->number, n->number);
+  bitset_copy (follow_set, always_follows[n_goto]);
+  if (s->lookaheads)
+    {
+      bitset_iterator biter_item;
+      bitset_bindex item;
+      BITSET_FOR_EACH (biter_item, follow_kernel_items[n_goto], item, 0)
+        if (s->lookaheads[item])
+          bitset_or (follow_set, follow_set, s->lookaheads[item]);
+    }
+}
+
+/**
+ * \pre
+ *   - \c follow_kernel_items and \c always_follows were computed by
+ *     \c ielr_compute_auxiliary_tables.
+ *   - \c lookahead_filter was computed by
+ *     \c AnnotationList__computeLookaheadFilter for the original LR(0) isocore
+ *     of \c t.
+ *   - The number of rows in \c lookaheads is at least the number of items in
+ *     \c t, and the number of columns is \c ::ntokens.
+ * \post
+ *   - <tt>lookaheads[i][j]</tt> is set iff both:
+ *     - <tt>lookahead_filter[i][j]</tt> is set.
+ *     - The isocore of \c t that will be the transition successor of \c s will
+ *       inherit from \c s token \c j into the lookahead set of item \c i.
+ */
+static void
+ielr_compute_lookaheads (bitsetv follow_kernel_items, bitsetv always_follows,
+                         state_list *s, state *t, bitsetv lookahead_filter,
+                         bitsetv lookaheads)
+{
+  size_t s_item = 0;
+  size_t t_item;
+  bitsetv_zero (lookaheads);
+  for (t_item = 0; t_item < t->nitems; ++t_item)
+    {
+      /* If this kernel item is the beginning of a RHS, it must be the
+         kernel item in the start state, but t is supposed to be a successor
+         state.  If, instead, this kernel item is the successor of the start
+         state's kernel item, the lookahead set is empty.  This second case is
+         a special case to avoid the - 2 below, but the next successor can be
+         handled fine without special casing it.  */
+      aver (t->items[t_item] != 0);
+      if (t->items[t_item] > 1
+          && !bitset_empty_p (lookahead_filter[t_item]))
+        {
+          if (item_number_is_rule_number (ritem[t->items[t_item] - 2]))
+            {
+              unsigned int rule_item;
+              for (rule_item = t->items[t_item];
+                   !item_number_is_rule_number (ritem[rule_item]);
+                   ++rule_item)
+                ;
+              ielr_compute_goto_follow_set (
+                follow_kernel_items, always_follows, s,
+                rules[item_number_as_rule_number (ritem[rule_item])].lhs,
+                lookaheads[t_item]);
+            }
+          else if (s->lookaheads)
+            {
+              /* We don't have to start the s item search at the beginning
+                 every time because items from both states are sorted by their
+                 indices in ritem.  */
+              for (; s_item < s->state->nitems; ++s_item)
+                if (s->state->items[s_item] == t->items[t_item] - 1)
+                  break;
+              aver (s_item != s->state->nitems);
+              if (s->lookaheads[s_item])
+                bitset_copy (lookaheads[t_item], s->lookaheads[s_item]);
+            }
+          bitset_and (lookaheads[t_item],
+                      lookaheads[t_item], lookahead_filter[t_item]);
+        }
+    }
+}
+
+/**
+ * \pre
+ *   - \c follow_kernel_items and \c always_follows were computed by
+ *     \c ielr_compute_auxiliary_tables.
+ *   - Either:
+ *     - <tt>annotation_lists = NULL</tt> and all bits in work2 are set.
+ *     - \c annotation_lists was computed by \c ielr_compute_annotation_lists.
+ *   - The number of rows in each of \c lookaheads and \c work2 is the maximum
+ *     number of items in any state.  The number of columns in each is
+ *     \c ::ntokens.
+ *   - \c lookaheads was computed by \c ielr_compute_lookaheads for \c t.
+ *   - \c ::nstates is the total number of states, some not yet fully computed,
+ *     in the list ending at \c *last_statep.  It is at least the number of
+ *     original LR(0) states.
+ *   - The size of \c work1 is at least the number of annotations for the LR(0)
+ *     isocore of \c t.
+ * \post
+ *   - Either:
+ *     - In the case that <tt>annotation_lists != NULL</tt>,
+ *       <tt>lookaheads \@pre</tt> was merged with some isocore of \c t if
+ *       permitted by the annotations for the original LR(0) isocore of \c t.
+ *       If this changed the lookaheads in that isocore, those changes were
+ *       propagated to all already computed transition successors recursively
+ *       possibly resulting in the splitting of some of those successors.
+ *     - In the case that <tt>annotation_lists = NULL</tt>,
+ *       <tt>lookaheads \@pre</tt> was merged with some isocore of \c t if the
+ *       isocore's lookahead sets were identical to those specified by
+ *       <tt>lookaheads \@pre</tt>.
+ *     - If no such merge was permitted, a new isocore of \c t containing
+ *       <tt>lookaheads \@pre</tt> was appended to the state list whose
+ *       previous tail was <tt>*last_statep \@pre</tt> and \c ::nstates was
+ *       incremented.  It was also appended to \c t's isocore list.
+ *   - <tt>*tp</tt> = the isocore of \c t into which
+ *     <tt>lookaheads \@pre</tt> was placed/merged.
+ *   - \c lookaheads, \c work1, and \c work2 may have been altered.
+ */
+static void
+ielr_compute_state (bitsetv follow_kernel_items, bitsetv always_follows,
+                    AnnotationList **annotation_lists, state *t,
+                    bitsetv lookaheads, state_list **last_statep,
+                    ContributionIndex work1[], bitsetv work2, state **tp)
+{
+  state_list *lr0_isocore = t->state_list->lr0Isocore;
+  state_list **this_isocorep;
+  bool has_lookaheads;
+
+  /* Determine whether there's an isocore of t with which these lookaheads can
+     be merged.  */
+  {
+    AnnotationIndex ai;
+    AnnotationList *a;
+    if (annotation_lists)
+      for (ai = 0, a = annotation_lists[lr0_isocore->state->number];
+           a;
+           ++ai, a = a->next)
+        work1[ai] =
+          AnnotationList__computeDominantContribution (
+            a, lr0_isocore->state->nitems, lookaheads, false);
+    for (this_isocorep = &t->state_list;
+         this_isocorep == &t->state_list || *this_isocorep != t->state_list;
+         this_isocorep = &(*this_isocorep)->nextIsocore)
+      {
+        if (!(*this_isocorep)->recomputedAsSuccessor)
+          break;
+        if (annotation_lists)
+          {
+            for (ai = 0, a = annotation_lists[lr0_isocore->state->number];
+                 a;
+                 ++ai, a = a->next)
+              {
+                if (work1[ai] != ContributionIndex__none)
+                  {
+                    /* This isocore compatibility test depends on the fact
+                       that, if the dominant contributions are the same for the
+                       two isocores, then merging their lookahead sets will not
+                       produce a state with a different dominant contribution.
+                       */
+                    ContributionIndex ci =
+                      AnnotationList__computeDominantContribution (
+                        a, lr0_isocore->state->nitems,
+                        (*this_isocorep)->lookaheads, false);
+                    if (ci != ContributionIndex__none && work1[ai] != ci)
+                      break;
+                  }
+              }
+            if (!a)
+              break;
+          }
+        else
+          {
+            size_t i;
+            for (i = 0; i < t->nitems; ++i)
+              {
+                if (!(*this_isocorep)->lookaheads
+                    || !(*this_isocorep)->lookaheads[i])
+                  {
+                    if (!bitset_empty_p (lookaheads[i]))
+                      break;
+                  }
+                /* bitset_equal_p uses the size of the first argument,
+                   so lookaheads[i] must be the second argument.  */
+                else if (!bitset_equal_p ((*this_isocorep)->lookaheads[i],
+                                          lookaheads[i]))
+                  break;
+              }
+            if (i == t->nitems)
+              break;
+          }
+      }
+  }
+
+  has_lookaheads = false;
+  {
+    size_t i;
+    for (i = 0; i < lr0_isocore->state->nitems; ++i)
+      if (!bitset_empty_p (lookaheads[i]))
+        {
+          has_lookaheads = true;
+          break;
+        }
+  }
+
+  /* Merge with an existing isocore.  */
+  if (this_isocorep == &t->state_list || *this_isocorep != t->state_list)
+    {
+      bool new_lookaheads = false;
+      *tp = (*this_isocorep)->state;
+
+      /* Merge lookaheads into the state and record whether any of them are
+         actually new.  */
+      if (has_lookaheads)
+        {
+          size_t i;
+          if (!(*this_isocorep)->lookaheads)
+            {
+              (*this_isocorep)->lookaheads =
+                xnmalloc (t->nitems, sizeof (*this_isocorep)->lookaheads);
+              for (i = 0; i < t->nitems; ++i)
+                (*this_isocorep)->lookaheads[i] = NULL;
+            }
+          for (i = 0; i < t->nitems; ++i)
+            if (!bitset_empty_p (lookaheads[i]))
+              {
+                if (!(*this_isocorep)->lookaheads[i])
+                  (*this_isocorep)->lookaheads[i] =
+                    bitset_create (ntokens, BITSET_FIXED);
+                bitset_andn (lookaheads[i],
+                             lookaheads[i], (*this_isocorep)->lookaheads[i]);
+                bitset_or ((*this_isocorep)->lookaheads[i],
+                           lookaheads[i], (*this_isocorep)->lookaheads[i]);
+                if (!bitset_empty_p (lookaheads[i]))
+                  new_lookaheads = true;
+              }
+        }
+
+      /* If new lookaheads were merged, propagate those lookaheads to the
+         successors, possibly splitting them.  If *tp is being recomputed for
+         the first time, this isn't necessary because the main
+         ielr_split_states loop will handle the successors later.  */
+      if (!(*this_isocorep)->recomputedAsSuccessor)
+        (*this_isocorep)->recomputedAsSuccessor = true;
+      else if (new_lookaheads)
+        {
+          int i;
+          /* When merging demands identical lookahead sets, it is impossible to
+             merge new lookaheads.  */
+          aver (annotation_lists);
+          for (i = 0; i < (*tp)->transitions->num; ++i)
+            {
+              state *t2 = (*tp)->transitions->states[i];
+              /* At any time, there's at most one state for which we have so
+                 far initially recomputed only some of its successors in the
+                 main ielr_split_states loop.  Because we recompute successors
+                 in order, we can just stop at the first such successor.  Of
+                 course, *tp might be a state some of whose successors have
+                 been recomputed as successors of other states rather than as
+                 successors of *tp.  It's fine if we go ahead and propagate to
+                 some of those.  We'll propagate to them again (but stop when
+                 we see nothing changes) and to the others when we reach *tp in
+                 the main ielr_split_states loop later.  */
+              if (!t2->state_list->recomputedAsSuccessor)
+                break;
+              AnnotationList__computeLookaheadFilter (
+                annotation_lists[t2->state_list->lr0Isocore->state->number],
+                t2->nitems, work2);
+              ielr_compute_lookaheads (follow_kernel_items, always_follows,
+                                       (*this_isocorep), t2, work2,
+                                       lookaheads);
+              /* FIXME: If splitting t2 here, it's possible that lookaheads
+                 that had already propagated from *tp to t2 will be left in t2
+                 after *tp has been removed as t2's predecessor:
+                 - We're going to recompute all lookaheads in phase 4, so these
+                   extra lookaheads won't appear in the final parser table.
+                 - If t2 has just one annotation, then these extra lookaheads
+                   cannot alter the dominating contribution to the associated
+                   inadequacy and thus cannot needlessly prevent a future merge
+                   of some new state with t2.  We can be sure of this because:
+                   - The fact that we're splitting t2 now means that some
+                     predecessors (at least one) other than *tp must be
+                     propagating contributions to t2.
+                   - The fact that t2 was merged in the first place means that,
+                     if *tp propagated any contributions, the dominating
+                     contribution must be the same as that from those other
+                     predecessors.
+                   - Thus, if some new state to be merged with t2 in the future
+                     proves to be compatible with the contributions propagated
+                     by the other predecessors, it will also be compatible with
+                     the contributions made by the extra lookaheads left behind
+                     by *tp.
+                 - However, if t2 has more than one annotation and these extra
+                   lookaheads contribute to one of their inadequacies, it's
+                   possible these extra lookaheads may needlessly prevent a
+                   future merge with t2.  For example:
+                   - Let's say there's an inadequacy A that makes the split
+                     necessary as follows:
+                     - There's currently just one other predecessor and it
+                       propagates to t2 some contributions to inadequacy A.
+                     - The new lookaheads that we were attempting to propagate
+                       from *tp to t2 made contributions to inadequacy A with a
+                       different dominating contribution than those from that
+                       other predecessor.
+                     - The extra lookaheads either make no contribution to
+                       inadequacy A or have the same dominating contribution as
+                       the contributions from the other predecessor.  Either
+                       way, as explained above, they can't prevent a future
+                       merge.
+                   - Let's say there's an inadequacy B that causes the trouble
+                     with future merges as follows:
+                     - The extra lookaheads make contributions to inadequacy B.
+                     - Those extra contributions did not prevent the original
+                       merge to create t2 because the other predecessor
+                       propagates to t2 no contributions to inadequacy B.
+                     - Thus, those extra contributions may prevent a future
+                       merge with t2 even though the merge would be fine if *tp
+                       had not left them behind.
+                 - Is the latter case common enough to worry about?
+                 - Perhaps we should track all predecessors and iterate them
+                   now to recreate t2 without those extra lookaheads.  */
+              ielr_compute_state (follow_kernel_items, always_follows,
+                                  annotation_lists, t2, lookaheads,
+                                  last_statep, work1, work2,
+                                  &(*tp)->transitions->states[i]);
+            }
+        }
+    }
+
+  /* Create a new isocore.  */
+  else
+    {
+      state_list *old_isocore = *this_isocorep;
+      (*last_statep)->next = *this_isocorep = xmalloc (sizeof **last_statep);
+      *last_statep = *this_isocorep;
+      (*last_statep)->state = *tp = state_new_isocore (t);
+      (*tp)->state_list = *last_statep;
+      (*last_statep)->recomputedAsSuccessor = true;
+      (*last_statep)->next = NULL;
+      (*last_statep)->lookaheads = NULL;
+      if (has_lookaheads)
+        {
+          size_t i;
+          (*last_statep)->lookaheads =
+            xnmalloc (t->nitems, sizeof (*last_statep)->lookaheads);
+          for (i = 0; i < t->nitems; ++i)
+            {
+              if (bitset_empty_p (lookaheads[i]))
+                (*last_statep)->lookaheads[i] = NULL;
+              else
+                {
+                  (*last_statep)->lookaheads[i] =
+                    bitset_create (ntokens, BITSET_FIXED);
+                  bitset_copy ((*last_statep)->lookaheads[i], lookaheads[i]);
+                }
+            }
+        }
+      (*last_statep)->lr0Isocore = lr0_isocore;
+      (*last_statep)->nextIsocore = old_isocore;
+    }
+}
+
+/**
+ * \pre
+ *   - \c follow_kernel_items and \c always_follows were computed by
+ *     \c ielr_compute_auxiliary_tables.
+ *   - Either:
+ *     - <tt>annotation_lists = NULL</tt> and <tt>max_annotations=0</tt>.
+ *     - \c annotation_lists and \c max_annotations were computed by
+ *       \c ielr_compute_annotation_lists.
+ * \post
+ *   - \c ::states is of size \c ::nstates (which might be greater than
+ *     <tt>::nstates \@pre</tt>) and no longer contains any LR(1)-relative
+ *     inadequacy.  \c annotation_lists was used to determine state
+ *     compatibility or, if <tt>annotation_lists = NULL</tt>, the canonical
+ *     LR(1) state compatibility test was used.
+ *   - If <tt>annotation_lists = NULL</tt>, reduction lookahead sets were
+ *     computed in all states.  TV_IELR_PHASE4 was pushed while they were
+ *     computed from item lookahead sets.
+ */
+static void
+ielr_split_states (bitsetv follow_kernel_items, bitsetv always_follows,
+                   AnnotationList **annotation_lists,
+                   AnnotationIndex max_annotations)
+{
+  state_list *first_state;
+  state_list *last_state;
+  bitsetv lookahead_filter = NULL;
+  bitsetv lookaheads;
+
+  /* Set up state list and some reusable bitsets.  */
+  {
+    size_t max_nitems = 0;
+    state_number i;
+    state_list **nodep = &first_state;
+    for (i = 0; i < nstates; ++i)
+      {
+        *nodep = states[i]->state_list = last_state = xmalloc (sizeof **nodep);
+        (*nodep)->state = states[i];
+        (*nodep)->recomputedAsSuccessor = false;
+        (*nodep)->lookaheads = NULL;
+        (*nodep)->lr0Isocore = *nodep;
+        (*nodep)->nextIsocore = *nodep;
+        nodep = &(*nodep)->next;
+        if (states[i]->nitems > max_nitems)
+          max_nitems = states[i]->nitems;
+      }
+    *nodep = NULL;
+    lookahead_filter = bitsetv_create (max_nitems, ntokens, BITSET_FIXED);
+    if (!annotation_lists)
+      bitsetv_ones (lookahead_filter);
+    lookaheads = bitsetv_create (max_nitems, ntokens, BITSET_FIXED);
+  }
+
+  /* Recompute states.  */
+  {
+    ContributionIndex *work = xnmalloc (max_annotations, sizeof *work);
+    state_list *this_state;
+    for (this_state = first_state; this_state; this_state = this_state->next)
+      {
+        state *s = this_state->state;
+        int i;
+        for (i = 0; i < s->transitions->num; ++i)
+          {
+            state *t = s->transitions->states[i];
+            if (annotation_lists)
+              AnnotationList__computeLookaheadFilter (
+                annotation_lists[t->state_list->lr0Isocore->state->number],
+                t->nitems, lookahead_filter);
+            ielr_compute_lookaheads (follow_kernel_items, always_follows,
+                                     this_state, t, lookahead_filter,
+                                     lookaheads);
+            ielr_compute_state (follow_kernel_items, always_follows,
+                                annotation_lists, t, lookaheads, &last_state,
+                                work, lookahead_filter,
+                                &s->transitions->states[i]);
+          }
+      }
+    free (work);
+  }
+
+  bitsetv_free (lookahead_filter);
+  bitsetv_free (lookaheads);
+
+  /* Store states back in the states array.  */
+  states = xnrealloc (states, nstates, sizeof *states);
+  {
+    state_list *node;
+    for (node = first_state; node; node = node->next)
+      states[node->state->number] = node->state;
+  }
+
+  /* In the case of canonical LR(1), copy item lookahead sets to reduction
+     lookahead sets.  */
+  if (!annotation_lists)
+    {
+      timevar_push (TV_IELR_PHASE4);
+      initialize_LA ();
+      state_list *node;
+      for (node = first_state; node; node = node->next)
+        if (!node->state->consistent)
+          {
+            size_t i = 0;
+            item_number *itemset = node->state->items;
+            size_t r;
+            for (r = 0; r < node->state->reductions->num; ++r)
+              {
+                rule *this_rule = node->state->reductions->rules[r];
+                bitset lookahead_set =
+                  node->state->reductions->lookahead_tokens[r];
+                if (item_number_is_rule_number (*this_rule->rhs))
+                  ielr_compute_goto_follow_set (follow_kernel_items,
+                                                always_follows, node,
+                                                this_rule->lhs, lookahead_set);
+                else if (node->lookaheads)
+                  {
+                    /* We don't need to start the kernel item search back at
+                       i=0 because both items and reductions are sorted on rule
+                       number.  */
+                    while (!item_number_is_rule_number (ritem[itemset[i]])
+                           || item_number_as_rule_number (ritem[itemset[i]])
+                              != this_rule->number)
+                      {
+                        ++i;
+                        aver (i < node->state->nitems);
+                      }
+                    if (node->lookaheads[i])
+                      bitset_copy (lookahead_set, node->lookaheads[i]);
+                  }
+              }
+          }
+      timevar_pop (TV_IELR_PHASE4);
+    }
+
+  /* Free state list.  */
+  while (first_state)
+    {
+      state_list *node = first_state;
+      if (node->lookaheads)
+        {
+          size_t i;
+          for (i = 0; i < node->state->nitems; ++i)
+            if (node->lookaheads[i])
+              bitset_free (node->lookaheads[i]);
+          free (node->lookaheads);
+        }
+      first_state = node->next;
+      free (node);
+    }
+}
+
+void
+ielr (void)
+{
+  LrType lr_type;
+
+  /* Examine user options.  */
+  {
+    char *type = muscle_percent_define_get ("lr.type");
+    if (0 == strcmp (type, "lalr"))
+      lr_type = LR_TYPE__LALR;
+    else if (0 == strcmp (type, "ielr"))
+      lr_type = LR_TYPE__IELR;
+    else if (0 == strcmp (type, "canonical-lr"))
+      lr_type = LR_TYPE__CANONICAL_LR;
+    else
+      aver (false);
+    free (type);
+  }
+
+  /* Phase 0: LALR(1).  */
+  timevar_push (TV_LALR);
+  if (lr_type == LR_TYPE__CANONICAL_LR)
+    set_goto_map ();
+  else
+    lalr ();
+  if (lr_type == LR_TYPE__LALR)
+    {
+      bitsetv_free (goto_follows);
+      timevar_pop (TV_LALR);
+      return;
+    }
+  timevar_pop (TV_LALR);
+
+  {
+    bitsetv follow_kernel_items;
+    bitsetv always_follows;
+    InadequacyList **inadequacy_lists = NULL;
+    AnnotationList **annotation_lists = NULL;
+    struct obstack annotations_obstack;
+    AnnotationIndex max_annotations = 0;
+
+    {
+      /* Phase 1: Compute Auxiliary Tables.  */
+      state ***predecessors;
+      timevar_push (TV_IELR_PHASE1);
+      ielr_compute_auxiliary_tables (
+        &follow_kernel_items, &always_follows,
+        lr_type == LR_TYPE__CANONICAL_LR ? NULL : &predecessors);
+      timevar_pop (TV_IELR_PHASE1);
+
+      /* Phase 2: Compute Annotations.  */
+      timevar_push (TV_IELR_PHASE2);
+      if (lr_type != LR_TYPE__CANONICAL_LR)
+        {
+          obstack_init (&annotations_obstack);
+          ielr_compute_annotation_lists (follow_kernel_items, always_follows,
+                                         predecessors, &max_annotations,
+                                         &inadequacy_lists, &annotation_lists,
+                                         &annotations_obstack);
+          {
+            state_number i;
+            for (i = 0; i < nstates; ++i)
+              free (predecessors[i]);
+          }
+          free (predecessors);
+          bitsetv_free (goto_follows);
+          lalr_free ();
+        }
+      timevar_pop (TV_IELR_PHASE2);
+    }
+
+    /* Phase 3: Split States.  */
+    timevar_push (TV_IELR_PHASE3);
+    {
+      state_number nstates_lr0 = nstates;
+      ielr_split_states (follow_kernel_items, always_follows,
+                         annotation_lists, max_annotations);
+      if (inadequacy_lists)
+        {
+          state_number i;
+          for (i = 0; i < nstates_lr0; ++i)
+            InadequacyList__delete (inadequacy_lists[i]);
+        }
+    }
+    free (inadequacy_lists);
+    if (annotation_lists)
+      obstack_free (&annotations_obstack, NULL);
+    free (annotation_lists);
+    bitsetv_free (follow_kernel_items);
+    bitsetv_free (always_follows);
+    timevar_pop (TV_IELR_PHASE3);
+  }
+
+  /* Phase 4: Compute Reduction Lookaheads.  */
+  timevar_push (TV_IELR_PHASE4);
+  free (goto_map);
+  free (from_state);
+  free (to_state);
+  if (lr_type == LR_TYPE__CANONICAL_LR)
+    {
+      /* Reduction lookaheads are computed in ielr_split_states above
+         but are timed as part of phase 4. */
+      set_goto_map ();
+    }
+  else
+    {
+      lalr ();
+      bitsetv_free (goto_follows);
+    }
+  timevar_pop (TV_IELR_PHASE4);
+}
diff --git a/src/ielr.h b/src/ielr.h
new file mode 100644
index 0000000..7b22380
--- /dev/null
+++ b/src/ielr.h
@@ -0,0 +1,46 @@
+/* IELR main implementation.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef IELR_H_
+# define IELR_H_
+
+#include <bitset.h>
+
+#include "state.h"
+
+/**
+ * \pre
+ *   - \c ::states is of size \c ::nstates and defines an LR(0) parser
+ *     for the users's grammar.
+ *   - \c ::ntokens is the number of tokens in the grammar.
+ * \post
+ *   - \c ::states is of size \c ::nstates (which might be greater than
+ *     <tt>::nstates \@pre</tt>) and defines the type of parser specified by
+ *     the value of the \c \%define variable \c lr.type.  Its value can be:
+ *     - \c "lalr".
+ *     - \c "ielr".
+ *     - \c "canonical-lr".
+ */
+void ielr (void);
+
+bool ielr_item_has_lookahead (state *s, symbol_number lhs, size_t item,
+                              symbol_number lookahead, state ***predecessors,
+                              bitset **item_lookahead_sets);
+
+#endif /* !IELR_H_ */
diff --git a/src/lalr.c b/src/lalr.c
index 65c55ab..9866154 100644
--- a/src/lalr.c
+++ b/src/lalr.c
@@ -1,28 +1,25 @@
-/* Compute look-ahead criteria for Bison.
+/* Compute lookahead criteria for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 2000-2012 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
-/* Compute how to make the finite state machine deterministic; find
-   which rules need look-ahead in each state, and which look-ahead
+/* Find which rules need lookahead in each state, and which lookahead
    tokens they accept.  */
 
 #include <config.h>
@@ -30,7 +27,6 @@
 
 #include <bitset.h>
 #include <bitsetv.h>
-#include <quotearg.h>
 
 #include "LR0.h"
 #include "complain.h"
@@ -38,15 +34,17 @@
 #include "getargs.h"
 #include "gram.h"
 #include "lalr.h"
+#include "muscle-tab.h"
 #include "nullable.h"
 #include "reader.h"
 #include "relation.h"
 #include "symtab.h"
 
 goto_number *goto_map;
-static goto_number ngotos;
+goto_number ngotos;
 state_number *from_state;
 state_number *to_state;
+bitsetv goto_follows = NULL;
 
 /* Linked list of goto numbers.  */
 typedef struct goto_list
@@ -56,7 +54,7 @@
 } goto_list;
 
 
-/* LA is a LR by NTOKENS matrix of bits.  LA[l, i] is 1 if the rule
+/* LA is an NLA by NTOKENS matrix of bits.  LA[l, i] is 1 if the rule
    LArule[l] is applicable in the appropriate state when the next
    token is symbol i.  If LA[l, i] and LA[l, j] are both 1 for i != j,
    it is a conflict.  */
@@ -65,17 +63,13 @@
 size_t nLA;
 
 
-/* And for the famous F variable, which name is so descriptive that a
-   comment is hardly needed.  <grin>.  */
-static bitsetv F = NULL;
-
 static goto_number **includes;
 static goto_list **lookback;
 
 
 
 
-static void
+void
 set_goto_map (void)
 {
   state_number s;
@@ -94,7 +88,7 @@
 	  ngotos++;
 
 	  /* Abort if (ngotos + 1) would overflow.  */
-	  assert (ngotos != GOTO_NUMBER_MAXIMUM);
+	  aver (ngotos != GOTO_NUMBER_MAXIMUM);
 
 	  goto_map[TRANSITION_SYMBOL (sp, i) - ntokens]++;
 	}
@@ -135,12 +129,7 @@
 }
 
 
-
-/*----------------------------------------------------------.
-| Map a state/symbol pair into its numeric representation.  |
-`----------------------------------------------------------*/
-
-static goto_number
+goto_number
 map_goto (state_number s0, symbol_number sym)
 {
   goto_number high;
@@ -153,7 +142,7 @@
 
   for (;;)
     {
-      assert (low <= high);
+      aver (low <= high);
       middle = (low + high) / 2;
       s = from_state[middle];
       if (s == s0)
@@ -175,7 +164,7 @@
 
   goto_number i;
 
-  F = bitsetv_create (ngotos, ntokens, BITSET_FIXED);
+  goto_follows = bitsetv_create (ngotos, ntokens, BITSET_FIXED);
 
   for (i = 0; i < ngotos; i++)
     {
@@ -184,7 +173,7 @@
 
       int j;
       FOR_EACH_SHIFT (sp, j)
-	bitset_set (F[i], TRANSITION_SYMBOL (sp, j));
+	bitset_set (goto_follows[i], TRANSITION_SYMBOL (sp, j));
 
       for (; j < sp->num; j++)
 	{
@@ -204,7 +193,7 @@
 	}
     }
 
-  relation_digraph (reads, ngotos, &F);
+  relation_digraph (reads, ngotos, &goto_follows);
 
   for (i = 0; i < ngotos; i++)
     free (reads[i]);
@@ -219,9 +208,9 @@
 {
   int ri = state_reduction_find (s, r);
   goto_list *sp = xmalloc (sizeof *sp);
-  sp->next = lookback[(s->reductions->look_ahead_tokens - LA) + ri];
+  sp->next = lookback[(s->reductions->lookahead_tokens - LA) + ri];
   sp->value = gotono;
-  lookback[(s->reductions->look_ahead_tokens - LA) + ri] = sp;
+  lookback[(s->reductions->lookahead_tokens - LA) + ri] = sp;
 }
 
 
@@ -264,8 +253,8 @@
 	  while (!done)
 	    {
 	      done = true;
-	      /* Each rhs ends in an item number, and there is a
-		 sentinel before the first rhs, so it is safe to
+	      /* Each rhs ends in a rule number, and there is a
+		 sentinel (ritem[-1]=0) before the first rhs, so it is safe to
 		 decrement RP here.  */
 	      rp--;
 	      if (ISVAR (*rp))
@@ -304,7 +293,7 @@
 {
   goto_number i;
 
-  relation_digraph (includes, ngotos, &F);
+  relation_digraph (includes, ngotos, &goto_follows);
 
   for (i = 0; i < ngotos; i++)
     free (includes[i]);
@@ -314,128 +303,142 @@
 
 
 static void
-compute_look_ahead_tokens (void)
+compute_lookahead_tokens (void)
 {
   size_t i;
   goto_list *sp;
 
   for (i = 0; i < nLA; i++)
     for (sp = lookback[i]; sp; sp = sp->next)
-      bitset_or (LA[i], LA[i], F[sp->value]);
+      bitset_or (LA[i], LA[i], goto_follows[sp->value]);
 
   /* Free LOOKBACK. */
   for (i = 0; i < nLA; i++)
     LIST_FREE (goto_list, lookback[i]);
 
   free (lookback);
-  bitsetv_free (F);
 }
 
 
-/*-----------------------------------------------------.
-| Count the number of look-ahead tokens required for S |
-| (N_LOOK_AHEAD_TOKENS member).                        |
-`-----------------------------------------------------*/
+/*----------------------------------------------------.
+| Count the number of lookahead tokens required for S |
+| (N_LOOKAHEAD_TOKENS member).                        |
+`----------------------------------------------------*/
 
 static int
-state_look_ahead_tokens_count (state *s)
+state_lookahead_tokens_count (state *s, bool default_reduction_only_for_accept)
 {
-  int k;
-  int n_look_ahead_tokens = 0;
+  int n_lookahead_tokens = 0;
   reductions *rp = s->reductions;
   transitions *sp = s->transitions;
 
-  /* We need a look-ahead either to distinguish different
-     reductions (i.e., there are two or more), or to distinguish a
-     reduction from a shift.  Otherwise, it is straightforward,
-     and the state is `consistent'.  */
+  /* Transitions are only disabled during conflict resolution, and that
+     hasn't happened yet, so there should be no need to check that
+     transition 0 hasn't been disabled before checking if it is a shift.
+     However, this check was performed at one time, so we leave it as an
+     aver.  */
+  aver (sp->num == 0 || !TRANSITION_IS_DISABLED (sp, 0));
+
+  /* We need a lookahead either to distinguish different reductions
+     (i.e., there are two or more), or to distinguish a reduction from a
+     shift.  Otherwise, it is straightforward, and the state is
+     `consistent'.  However, do not treat a state with any reductions as
+     consistent unless it is the accepting state (because there is never
+     a lookahead token that makes sense there, and so no lookahead token
+     should be read) if the user has otherwise disabled default
+     reductions.  */
   if (rp->num > 1
-      || (rp->num == 1 && sp->num &&
-	  !TRANSITION_IS_DISABLED (sp, 0) && TRANSITION_IS_SHIFT (sp, 0)))
-    n_look_ahead_tokens += rp->num;
+      || (rp->num == 1 && sp->num && TRANSITION_IS_SHIFT (sp, 0))
+      || (rp->num == 1 && rp->rules[0]->number != 0
+          && default_reduction_only_for_accept))
+    n_lookahead_tokens += rp->num;
   else
     s->consistent = 1;
 
-  for (k = 0; k < sp->num; k++)
-    if (!TRANSITION_IS_DISABLED (sp, k) && TRANSITION_IS_ERROR (sp, k))
-      {
-	s->consistent = 0;
-	break;
-      }
-
-  return n_look_ahead_tokens;
+  return n_lookahead_tokens;
 }
 
 
-/*-----------------------------------------------------.
-| Compute LA, NLA, and the look_ahead_tokens members.  |
-`-----------------------------------------------------*/
+/*----------------------------------------------------.
+| Compute LA, NLA, and the lookahead_tokens members.  |
+`----------------------------------------------------*/
 
-static void
+void
 initialize_LA (void)
 {
   state_number i;
   bitsetv pLA;
+  bool default_reduction_only_for_accept;
+  {
+    char *default_reductions =
+      muscle_percent_define_get ("lr.default-reductions");
+    default_reduction_only_for_accept =
+      0 == strcmp (default_reductions, "accepting");
+    free (default_reductions);
+  }
 
-  /* Compute the total number of reductions requiring a look-ahead.  */
+  /* Compute the total number of reductions requiring a lookahead.  */
   nLA = 0;
   for (i = 0; i < nstates; i++)
-    nLA += state_look_ahead_tokens_count (states[i]);
+    nLA +=
+      state_lookahead_tokens_count (states[i],
+                                    default_reduction_only_for_accept);
   /* Avoid having to special case 0.  */
   if (!nLA)
     nLA = 1;
 
   pLA = LA = bitsetv_create (nLA, ntokens, BITSET_FIXED);
-  lookback = xcalloc (nLA, sizeof *lookback);
 
-  /* Initialize the members LOOK_AHEAD_TOKENS for each state whose reductions
-     require look-ahead tokens.  */
+  /* Initialize the members LOOKAHEAD_TOKENS for each state whose reductions
+     require lookahead tokens.  */
   for (i = 0; i < nstates; i++)
     {
-      int count = state_look_ahead_tokens_count (states[i]);
+      int count =
+        state_lookahead_tokens_count (states[i],
+                                      default_reduction_only_for_accept);
       if (count)
 	{
-	  states[i]->reductions->look_ahead_tokens = pLA;
+	  states[i]->reductions->lookahead_tokens = pLA;
 	  pLA += count;
 	}
     }
 }
 
 
-/*----------------------------------------------.
-| Output the look-ahead tokens for each state.  |
-`----------------------------------------------*/
+/*---------------------------------------------.
+| Output the lookahead tokens for each state.  |
+`---------------------------------------------*/
 
 static void
-look_ahead_tokens_print (FILE *out)
+lookahead_tokens_print (FILE *out)
 {
   state_number i;
   int j, k;
-  fprintf (out, "Look-ahead tokens: BEGIN\n");
+  fprintf (out, "Lookahead tokens: BEGIN\n");
   for (i = 0; i < nstates; ++i)
     {
       reductions *reds = states[i]->reductions;
       bitset_iterator iter;
-      int n_look_ahead_tokens = 0;
+      int n_lookahead_tokens = 0;
 
-      if (reds->look_ahead_tokens)
+      if (reds->lookahead_tokens)
 	for (k = 0; k < reds->num; ++k)
-	  if (reds->look_ahead_tokens[k])
-	    ++n_look_ahead_tokens;
+	  if (reds->lookahead_tokens[k])
+	    ++n_lookahead_tokens;
 
-      fprintf (out, "State %d: %d look-ahead tokens\n",
-	       i, n_look_ahead_tokens);
+      fprintf (out, "State %d: %d lookahead tokens\n",
+	       i, n_lookahead_tokens);
 
-      if (reds->look_ahead_tokens)
+      if (reds->lookahead_tokens)
 	for (j = 0; j < reds->num; ++j)
-	  BITSET_FOR_EACH (iter, reds->look_ahead_tokens[j], k, 0)
+	  BITSET_FOR_EACH (iter, reds->lookahead_tokens[j], k, 0)
 	  {
 	    fprintf (out, "   on %d (%s) -> rule %d\n",
 		     k, symbols[k]->tag,
 		     reds->rules[j]->number);
 	  };
     }
-  fprintf (out, "Look-ahead tokens: END\n");
+  fprintf (out, "Lookahead tokens: END\n");
 }
 
 void
@@ -444,12 +447,47 @@
   initialize_LA ();
   set_goto_map ();
   initialize_F ();
+  lookback = xcalloc (nLA, sizeof *lookback);
   build_relations ();
   compute_FOLLOWS ();
-  compute_look_ahead_tokens ();
+  compute_lookahead_tokens ();
 
   if (trace_flag & trace_sets)
-    look_ahead_tokens_print (stderr);
+    lookahead_tokens_print (stderr);
+}
+
+
+void
+lalr_update_state_numbers (state_number old_to_new[], state_number nstates_old)
+{
+  goto_number ngotos_reachable = 0;
+  symbol_number nonterminal = 0;
+  aver (nsyms == nvars + ntokens);
+  {
+    goto_number i;
+    for (i = 0; i < ngotos; ++i)
+      {
+        while (i == goto_map[nonterminal])
+          goto_map[nonterminal++] = ngotos_reachable;
+        /* If old_to_new[from_state[i]] = nstates_old, remove this goto
+           entry.  */
+        if (old_to_new[from_state[i]] != nstates_old)
+          {
+            /* from_state[i] is not removed, so it and thus to_state[i] are
+               reachable, so to_state[i] != nstates_old.  */
+            aver (old_to_new[to_state[i]] != nstates_old);
+            from_state[ngotos_reachable] = old_to_new[from_state[i]];
+            to_state[ngotos_reachable] = old_to_new[to_state[i]];
+            ++ngotos_reachable;
+          }
+      }
+  }
+  while (nonterminal <= nvars)
+    {
+      aver (ngotos == goto_map[nonterminal]);
+      goto_map[nonterminal++] = ngotos_reachable;
+    }
+  ngotos = ngotos_reachable;
 }
 
 
@@ -458,6 +496,6 @@
 {
   state_number s;
   for (s = 0; s < nstates; ++s)
-    states[s]->reductions->look_ahead_tokens = NULL;
+    states[s]->reductions->lookahead_tokens = NULL;
   bitsetv_free (LA);
 }
diff --git a/src/lalr.h b/src/lalr.h
index a2c1753..75e957e 100644
--- a/src/lalr.h
+++ b/src/lalr.h
@@ -1,24 +1,22 @@
-/* Compute look-ahead criteria for bison,
+/* Compute lookahead criteria for bison,
 
-   Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004, 2006-2007,
+   2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef LALR_H_
 # define LALR_H_
@@ -32,36 +30,77 @@
 /* Import the definition of CORE, TRANSITIONS and REDUCTIONS. */
 # include "state.h"
 
-/* Compute how to make the finite state machine deterministic; find
-   which rules need look-ahead in each state, and which look-ahead
-   tokens they accept.  */
 
+/** Build the LALR(1) automaton.
+
+   Find which rules need lookahead in each state, and which lookahead
+   tokens they accept.
+
+   Also builds:
+     - #goto_map
+     - #from_state
+     - #to_state
+     - #goto_follows
+*/
 void lalr (void);
 
-/* Release the information related to look-ahead tokens.  Can be performed
-   once the action tables are computed.  */
+/**
+ * Set #nLA and allocate all reduction lookahead sets.  Normally invoked by
+ * #lalr.
+ */
+void initialize_LA (void);
 
+/**
+ * Build only:
+ *   - #goto_map
+ *   - #from_state
+ *   - #to_state
+ * Normally invoked by #lalr.
+ */
+void set_goto_map (void);
+
+/**
+ * Update state numbers recorded in #goto_map, #from_state, and #to_state such
+ * that:
+ *   - \c nstates_old is the old number of states.
+ *   - Where \c i is the old state number, <tt>old_to_new[i]</tt> is either:
+ *     - \c nstates_old if state \c i is removed because it is unreachable.
+ *       Thus, remove all goto entries involving this state.
+ *     - The new state number.
+ */
+void lalr_update_state_numbers (state_number old_to_new[],
+                                state_number nstates_old);
+
+
+/** Release the information related to lookahead tokens.
+
+   Can be performed once the action tables are computed.  */
 void lalr_free (void);
 
-
-/* lalr() builds these data structures. */
-
-/* GOTO_MAP, FROM_STATE and TO_STATE -- record each shift transition
-   which accepts a variable (a nonterminal).
-
-   FROM_STATE[T] -- state number which a transition leads from.
-   TO_STATE[T] -- state number it leads to.
-
-   All the transitions that accept a particular variable are grouped
-   together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and
-   TO_STATE of the first of them.  */
-
 typedef size_t goto_number;
 # define GOTO_NUMBER_MAXIMUM ((goto_number) -1)
 
+/** Index into #from_state and #to_state.
+
+   All the transitions that accept a particular variable are grouped
+   together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and
+   TO_STATE of the first of them.  */
 extern goto_number *goto_map;
+
+/** The size of #from_state and #to_state.  */
+extern goto_number ngotos;
+
+/** State number which a transition leads from.  */
 extern state_number *from_state;
+
+/** State number it leads to.  */
 extern state_number *to_state;
 
+/** Map a state/symbol pair into its numeric representation.  */
+goto_number map_goto (state_number s0, symbol_number sym);
+
+/* goto_follows[i] is the set of tokens following goto i.  */
+extern bitsetv goto_follows;
+
 
 #endif /* !LALR_H_ */
diff --git a/src/location.c b/src/location.c
index ecd3658..24301ec 100644
--- a/src/location.c
+++ b/src/location.c
@@ -1,48 +1,230 @@
 /* Locations for Bison
 
-   Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
+#include <mbswidth.h>
 #include <quotearg.h>
 
+#include "complain.h"
 #include "location.h"
 
-location const empty_location;
+location const empty_location = EMPTY_LOCATION_INIT;
+
+/* If BUF is null, add BUFSIZE (which in this case must be less than
+   INT_MAX) to COLUMN; otherwise, add mbsnwidth (BUF, BUFSIZE, 0) to
+   COLUMN.  If an overflow occurs, or might occur but is undetectable,
+   return INT_MAX.  Assume COLUMN is nonnegative.  */
+
+static inline int
+add_column_width (int column, char const *buf, size_t bufsize)
+{
+  size_t width;
+  unsigned int remaining_columns = INT_MAX - column;
+
+  if (buf)
+    {
+      if (INT_MAX / 2 <= bufsize)
+	return INT_MAX;
+      width = mbsnwidth (buf, bufsize, 0);
+    }
+  else
+    width = bufsize;
+
+  return width <= remaining_columns ? column + width : INT_MAX;
+}
+
+/* Set *LOC and adjust scanner cursor to account for token TOKEN of
+   size SIZE.  */
+
+void
+location_compute (location *loc, boundary *cur, char const *token, size_t size)
+{
+  int line = cur->line;
+  int column = cur->column;
+  char const *p0 = token;
+  char const *p = token;
+  char const *lim = token + size;
+
+  loc->start = *cur;
+
+  for (p = token; p < lim; p++)
+    switch (*p)
+      {
+      case '\n':
+	line += line < INT_MAX;
+	column = 1;
+	p0 = p + 1;
+	break;
+
+      case '\t':
+	column = add_column_width (column, p0, p - p0);
+	column = add_column_width (column, NULL, 8 - ((column - 1) & 7));
+	p0 = p + 1;
+	break;
+
+      default:
+	break;
+      }
+
+  cur->line = line;
+  cur->column = column = add_column_width (column, p0, p - p0);
+
+  loc->end = *cur;
+
+  if (line == INT_MAX && loc->start.line != INT_MAX)
+    warn_at (*loc, _("line number overflow"));
+  if (column == INT_MAX && loc->start.column != INT_MAX)
+    warn_at (*loc, _("column number overflow"));
+}
+
 
 /* Output to OUT the location LOC.
    Warning: it uses quotearg's slot 3.  */
-void
+unsigned
 location_print (FILE *out, location loc)
 {
-  fprintf (out, "%s:%d.%d",
-	   quotearg_n_style (3, escape_quoting_style, loc.start.file),
-	   loc.start.line, loc.start.column);
-
+  unsigned res = 0;
+  int end_col = 0 != loc.end.column ? loc.end.column - 1 : 0;
+  res += fprintf (out, "%s",
+                  quotearg_n_style (3, escape_quoting_style, loc.start.file));
+  if (0 <= loc.start.line)
+    {
+      res += fprintf (out, ":%d", loc.start.line);
+      if (0 <= loc.start.column)
+        res += fprintf (out, ".%d", loc.start.column);
+    }
   if (loc.start.file != loc.end.file)
-    fprintf (out, "-%s:%d.%d",
-	     quotearg_n_style (3, escape_quoting_style, loc.end.file),
-	     loc.end.line, loc.end.column - 1);
-  else if (loc.start.line < loc.end.line)
-    fprintf (out, "-%d.%d", loc.end.line, loc.end.column - 1);
-  else if (loc.start.column < loc.end.column - 1)
-    fprintf (out, "-%d", loc.end.column - 1);
+    {
+      res += fprintf (out, "-%s",
+                      quotearg_n_style (3, escape_quoting_style,
+                                        loc.end.file));
+      if (0 <= loc.end.line)
+        {
+          res += fprintf (out, ":%d", loc.end.line);
+          if (0 <= end_col)
+            res += fprintf (out, ".%d", end_col);
+        }
+    }
+  else if (0 <= loc.end.line)
+    {
+      if (loc.start.line < loc.end.line)
+        {
+          res += fprintf (out, "-%d", loc.end.line);
+          if (0 <= end_col)
+            res += fprintf (out, ".%d", end_col);
+        }
+      else if (0 <= end_col && loc.start.column < end_col)
+        res += fprintf (out, "-%d", end_col);
+    }
+
+  return res;
+}
+
+
+/* Persistant data used by location_caret to avoid reopening and rereading the
+   same file all over for each error.  */
+struct caret_info
+{
+  FILE *source;
+  size_t line;
+  size_t offset;
+};
+
+static struct caret_info caret_info = { NULL, 1, 0 };
+
+void
+cleanup_caret ()
+{
+  if (caret_info.source)
+    fclose (caret_info.source);
+}
+
+void
+location_caret (FILE *out, location loc)
+{
+  /* FIXME: find a way to support multifile locations, and only open once each
+     file. That would make the procedure future-proof.  */
+  if (! (caret_info.source
+         || (caret_info.source = fopen (loc.start.file, "r")))
+      || loc.start.column == -1 || loc.start.line == -1)
+    return;
+
+  /* If the line we want to quote is seekable (the same line as the previous
+     location), just seek it. If it was before, we lost track of it, so
+     return to the start of file.  */
+  if (caret_info.line <= loc.start.line)
+    fseek (caret_info.source, caret_info.offset, SEEK_SET);
+  else
+    {
+      caret_info.line = 1;
+      caret_info.offset = 0;
+      fseek (caret_info.source, caret_info.offset, SEEK_SET);
+    }
+
+  /* Advance to the line's position, keeping track of the offset.  */
+  while (caret_info.line < loc.start.line)
+    caret_info.line += fgetc (caret_info.source) == '\n';
+  caret_info.offset = ftell (caret_info.source);
+
+  /* Read the actual line.  Don't update the offset, so that we keep a pointer
+     to the start of the line.  */
+  {
+    char *buf = NULL;
+    size_t size = 0;
+    ssize_t len = getline (&buf, &size, caret_info.source);
+    if (0 < len)
+      {
+        /* The caret of a multiline location ends with the first line.  */
+        int end = loc.start.line != loc.end.line ? len : loc.end.column;
+
+        /* Quote the file, indent by a single column.  */
+        fputc (' ', out);
+        fwrite (buf, 1, len, out);
+
+        /* Print the caret, with the same indent as above.  */
+        fprintf (out, " %*s", loc.start.column - 1, "");
+        {
+          int i = loc.start.column;
+          do
+            fputc ('^', out);
+          while (++i < end);
+        }
+        fputc ('\n', out);
+      }
+    free (buf);
+  }
+}
+
+void
+boundary_set_from_string (boundary *bound, char *loc_str)
+{
+  /* Must search in reverse since the file name field may
+   * contain `.' or `:'.  */
+  char *delim = mbsrchr (loc_str, '.');
+  aver (delim);
+  *delim = '\0';
+  bound->column = atoi (delim+1);
+  delim = mbsrchr (loc_str, ':');
+  aver (delim);
+  *delim = '\0';
+  bound->line = atoi (delim+1);
+  bound->file = uniqstr_new (loc_str);
 }
diff --git a/src/location.h b/src/location.h
index 49d2a2e..c1859ae 100644
--- a/src/location.h
+++ b/src/location.h
@@ -1,22 +1,21 @@
 /* Locations for Bison
-   Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef LOCATION_H_
 # define LOCATION_H_
@@ -29,17 +28,46 @@
   /* The name of the file that contains the boundary.  */
   uniqstr file;
 
-  /* The (origin-1) line that contains the boundary.
-     If this is INT_MAX, the line number has overflowed.  */
+  /* If nonnegative, the (origin-1) line that contains the boundary.
+     If this is INT_MAX, the line number has overflowed.
+
+     Meaningless and not displayed if negative.
+  */
   int line;
 
-  /* The (origin-1) column just after the boundary.  This is neither a
-     byte count, nor a character count; it is a column count.
-     If this is INT_MAX, the column number has overflowed.  */
+  /* If nonnegative, the (origin-1) column just after the boundary.
+     This is neither a byte count, nor a character count; it is a
+     column count.  If this is INT_MAX, the column number has
+     overflowed.
+
+     Meaningless and not displayed if negative.
+  */
   int column;
 
 } boundary;
 
+/* Set the position of \a a. */
+static inline void
+boundary_set (boundary *b, const char *f, int l, int c)
+{
+  b->file = f;
+  b->line = l;
+  b->column = c;
+}
+
+/* Return -1, 0, 1, depending whether a is before, equal, or
+   after b.  */
+static inline int
+boundary_cmp (boundary a, boundary b)
+{
+  int res = strcmp (a.file, b.file);
+  if (!res)
+    res = a.line - b.line;
+  if (!res)
+    res = a.column - b.column;
+  return res;
+}
+
 /* Return nonzero if A and B are equal boundaries.  */
 static inline bool
 equal_boundaries (boundary a, boundary b)
@@ -60,10 +88,39 @@
 
 } location;
 
-#define YYLTYPE location
+#define GRAM_LTYPE location
 
+#define EMPTY_LOCATION_INIT {{NULL, 0, 0}, {NULL, 0, 0}}
 extern location const empty_location;
 
-void location_print (FILE *out, location loc);
+/* Set *LOC and adjust scanner cursor to account for token TOKEN of
+   size SIZE.  */
+void location_compute (location *loc,
+		       boundary *cur, char const *token, size_t size);
+
+/* Print location to file. Return number of actually printed
+   characters.  */
+unsigned location_print (FILE *out, location loc);
+
+/* Free any allocated ressources and close any open file handles that are
+   left-over by the usage of location_caret.  */
+void cleanup_caret (void);
+
+/* Output to OUT the line and caret corresponding to location LOC.  */
+void location_caret (FILE *out, location loc);
+
+/* Return -1, 0, 1, depending whether a is before, equal, or
+   after b.  */
+static inline int
+location_cmp (location a, location b)
+{
+  int res = boundary_cmp (a.start, b.start);
+  if (!res)
+    res = boundary_cmp (a.end, b.end);
+  return res;
+}
+
+/* LOC_STR must be formatted as `file:line.column', it will be modified.  */
+void boundary_set_from_string (boundary *bound, char *loc_str);
 
 #endif /* ! defined LOCATION_H_ */
diff --git a/src/main.c b/src/main.c
index 8769fef..184d789 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,33 +1,35 @@
 /* Top level entry point of Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000, 2001, 2002, 2004, 2005
-   Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000-2002, 2004-2012 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
 #include <bitset_stats.h>
 #include <bitset.h>
+#include <configmake.h>
+#include <progname.h>
+#include <quotearg.h>
 #include <timevar.h>
 
 #include "LR0.h"
+#include "closeout.h"
 #include "complain.h"
 #include "conflicts.h"
 #include "derives.h"
@@ -35,32 +37,45 @@
 #include "getargs.h"
 #include "gram.h"
 #include "lalr.h"
-#include "muscle_tab.h"
+#include "ielr.h"
+#include "muscle-tab.h"
 #include "nullable.h"
 #include "output.h"
 #include "print.h"
 #include "print_graph.h"
+#include "print-xml.h"
+#include <quote.h>
 #include "reader.h"
 #include "reduce.h"
+#include "scan-code.h"
+#include "scan-gram.h"
+#include "scan-skel.h"
 #include "symtab.h"
 #include "tables.h"
 #include "uniqstr.h"
 
-/* The name this program was run with, for messages.  */
-char *program_name;
-
-
 
 int
 main (int argc, char *argv[])
 {
-  program_name = argv[0];
+  set_program_name (argv[0]);
   setlocale (LC_ALL, "");
   (void) bindtextdomain (PACKAGE, LOCALEDIR);
   (void) bindtextdomain ("bison-runtime", LOCALEDIR);
   (void) textdomain (PACKAGE);
 
+  {
+    char const *cp = getenv ("LC_CTYPE");
+    if (cp && !strcmp (cp, "C"))
+      set_custom_quoting (&quote_quoting_options, "'", "'");
+    else
+      set_quoting_style (&quote_quoting_options, locale_quoting_style);
+  }
+
+  atexit (close_stdout);
+
   uniqstrs_new ();
+  muscle_init ();
 
   getargs (argc, argv);
 
@@ -71,8 +86,6 @@
   if (trace_flag & trace_bitsets)
     bitset_stats_enable ();
 
-  muscle_init ();
-
   /* Read the input.  Copy some parts of it to FGUARD, FACTION, FTABLE
      and FATTRS.  In file reader.c.  The other parts are recorded in
      the grammar; see gram.h.  */
@@ -96,23 +109,31 @@
   nullable_compute ();
   timevar_pop (TV_SETS);
 
-  /* Convert to nondeterministic finite state machine.  In file LR0.
-     See state.h for more info.  */
+  /* Compute LR(0) parser states.  See state.h for more info.  */
   timevar_push (TV_LR0);
   generate_states ();
   timevar_pop (TV_LR0);
 
-  /* make it deterministic.  In file lalr.  */
-  timevar_push (TV_LALR);
-  lalr ();
-  timevar_pop (TV_LALR);
+  /* Add lookahead sets to parser states.  Except when LALR(1) is
+     requested, split states to eliminate LR(1)-relative
+     inadequacies.  */
+  ielr ();
 
   /* Find and record any conflicts: places where one token of
-     look-ahead is not enough to disambiguate the parsing.  In file
+     lookahead is not enough to disambiguate the parsing.  In file
      conflicts.  Also resolve s/r conflicts based on precedence
      declarations.  */
   timevar_push (TV_CONFLICTS);
   conflicts_solve ();
+  if (!muscle_percent_define_flag_if ("lr.keep-unreachable-states"))
+    {
+      state_number *old_to_new = xnmalloc (nstates, sizeof *old_to_new);
+      state_number nstates_old = nstates;
+      state_remove_unreachable_states (old_to_new);
+      lalr_update_state_numbers (old_to_new, nstates_old);
+      conflicts_update_state_numbers (old_to_new, nstates_old);
+      free (old_to_new);
+    }
   conflicts_print ();
   timevar_pop (TV_CONFLICTS);
 
@@ -121,8 +142,8 @@
   tables_generate ();
   timevar_pop (TV_ACTIONS);
 
-  grammar_rules_never_reduced_report
-    (_("rule never reduced because of conflicts"));
+  grammar_rules_useless_report
+    (_("rule useless in parser due to conflicts"));
 
   /* Output file names. */
   compute_output_file_names ();
@@ -135,7 +156,7 @@
       timevar_pop (TV_REPORT);
     }
 
-  /* Output the VCG graph.  */
+  /* Output the graph.  */
   if (graph_flag)
     {
       timevar_push (TV_GRAPH);
@@ -143,12 +164,20 @@
       timevar_pop (TV_GRAPH);
     }
 
+  /* Output xml.  */
+  if (xml_flag)
+    {
+      timevar_push (TV_XML);
+      print_xml ();
+      timevar_pop (TV_XML);
+    }
+
   /* Stop if there were errors, to avoid trashing previous output
      files.  */
   if (complaint_issued)
     goto finish;
 
-  /* Look-ahead tokens are no longer needed. */
+  /* Lookahead tokens are no longer needed. */
   timevar_push (TV_FREE);
   lalr_free ();
   timevar_pop (TV_FREE);
@@ -166,12 +195,16 @@
   reduce_free ();
   conflicts_free ();
   grammar_free ();
+  output_file_names_free ();
 
   /* The scanner memory cannot be released right after parsing, as it
      contains things such as user actions, prologue, epilogue etc.  */
-  scanner_free ();
+  gram_scanner_free ();
   muscle_free ();
   uniqstrs_free ();
+  code_scanner_free ();
+  skel_scanner_free ();
+  quotearg_free ();
   timevar_pop (TV_FREE);
 
   if (trace_flag & trace_bitsets)
@@ -183,5 +216,7 @@
   timevar_stop (TV_TOTAL);
   timevar_print (stderr);
 
+  cleanup_caret ();
+
   return complaint_issued ? EXIT_FAILURE : EXIT_SUCCESS;
 }
diff --git a/src/muscle-tab.c b/src/muscle-tab.c
new file mode 100644
index 0000000..936af70
--- /dev/null
+++ b/src/muscle-tab.c
@@ -0,0 +1,669 @@
+/* Muscle table manager for Bison.
+
+   Copyright (C) 2001-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+#include "system.h"
+
+#include <hash.h>
+
+#include "complain.h"
+#include "files.h"
+#include "getargs.h"
+#include "muscle-tab.h"
+#include "quote.h"
+
+/* A key-value pair, along with storage that can be reclaimed when
+   this pair is no longer needed.  */
+typedef struct
+{
+  char const *key;
+  char const *value;
+  char *storage;
+} muscle_entry;
+
+/* An obstack used to create some entries.  */
+struct obstack muscle_obstack;
+
+/* Initial capacity of muscles hash table.  */
+#define HT_INITIAL_CAPACITY 257
+
+static struct hash_table *muscle_table = NULL;
+
+static bool
+hash_compare_muscles (void const *x, void const *y)
+{
+  muscle_entry const *m1 = x;
+  muscle_entry const *m2 = y;
+  return strcmp (m1->key, m2->key) == 0;
+}
+
+static size_t
+hash_muscle (const void *x, size_t tablesize)
+{
+  muscle_entry const *m = x;
+  return hash_string (m->key, tablesize);
+}
+
+/*-----------------------------------------------------------------.
+| Create the MUSCLE_TABLE, and initialize it with default values.  |
+| Also set up the MUSCLE_OBSTACK.                                  |
+`-----------------------------------------------------------------*/
+
+static void
+muscle_entry_free (void *entry)
+{
+  muscle_entry *mentry = entry;
+  free (mentry->storage);
+  free (mentry);
+}
+
+void
+muscle_init (void)
+{
+  /* Initialize the muscle obstack.  */
+  obstack_init (&muscle_obstack);
+
+  muscle_table = hash_initialize (HT_INITIAL_CAPACITY, NULL, hash_muscle,
+				  hash_compare_muscles, muscle_entry_free);
+
+  /* Version and input file.  */
+  MUSCLE_INSERT_STRING ("version", VERSION);
+}
+
+
+/*------------------------------------------------------------.
+| Free all the memory consumed by the muscle machinery only.  |
+`------------------------------------------------------------*/
+
+void
+muscle_free (void)
+{
+  hash_free (muscle_table);
+  obstack_free (&muscle_obstack, NULL);
+}
+
+
+
+/*------------------------------------------------------------.
+| Insert (KEY, VALUE).  If KEY already existed, overwrite the |
+| previous value.                                             |
+`------------------------------------------------------------*/
+
+void
+muscle_insert (char const *key, char const *value)
+{
+  muscle_entry probe;
+  muscle_entry *entry;
+
+  probe.key = key;
+  entry = hash_lookup (muscle_table, &probe);
+
+  if (!entry)
+    {
+      /* First insertion in the hash. */
+      entry = xmalloc (sizeof *entry);
+      entry->key = key;
+      if (!hash_insert (muscle_table, entry))
+        xalloc_die ();
+    }
+  else
+    free (entry->storage);
+  entry->value = value;
+  entry->storage = NULL;
+}
+
+
+/*-------------------------------------------------------------------.
+| Append VALUE to the current value of KEY.  If KEY did not already  |
+| exist, create it.  Use MUSCLE_OBSTACK.  De-allocate the previously |
+| associated value.  Copy VALUE and SEPARATOR.                       |
+`-------------------------------------------------------------------*/
+
+void
+muscle_grow (const char *key, const char *val, const char *separator)
+{
+  muscle_entry probe;
+  muscle_entry *entry = NULL;
+
+  probe.key = key;
+  entry = hash_lookup (muscle_table, &probe);
+
+  if (!entry)
+    {
+      /* First insertion in the hash. */
+      entry = xmalloc (sizeof *entry);
+      entry->key = key;
+      if (!hash_insert (muscle_table, entry))
+        xalloc_die ();
+      entry->value = entry->storage = xstrdup (val);
+    }
+  else
+    {
+      /* Grow the current value. */
+      char *new_val;
+      obstack_sgrow (&muscle_obstack, entry->value);
+      free (entry->storage);
+      obstack_sgrow (&muscle_obstack, separator);
+      obstack_sgrow (&muscle_obstack, val);
+      obstack_1grow (&muscle_obstack, 0);
+      new_val = obstack_finish (&muscle_obstack);
+      entry->value = entry->storage = xstrdup (new_val);
+      obstack_free (&muscle_obstack, new_val);
+    }
+}
+
+/*------------------------------------------------------------------.
+| Using muscle_grow, append a synchronization line for the location |
+| LOC to the current value of KEY.                                  |
+`------------------------------------------------------------------*/
+
+static void
+muscle_syncline_grow (char const *key, location loc)
+{
+  char *extension = NULL;
+  obstack_printf (&muscle_obstack, "]b4_syncline(%d, ", loc.start.line);
+  obstack_quote (&muscle_obstack,
+                 quotearg_style (c_quoting_style, loc.start.file));
+  obstack_sgrow (&muscle_obstack, ")[");
+  obstack_1grow (&muscle_obstack, 0);
+  extension = obstack_finish (&muscle_obstack);
+  muscle_grow (key, extension, "");
+  obstack_free (&muscle_obstack, extension);
+}
+
+/*------------------------------------------------------------------.
+| Append VALUE to the current value of KEY, using muscle_grow.  But |
+| in addition, issue a synchronization line for the location LOC    |
+| using muscle_syncline_grow.                                       |
+`------------------------------------------------------------------*/
+
+void
+muscle_code_grow (const char *key, const char *val, location loc)
+{
+  muscle_syncline_grow (key, loc);
+  muscle_grow (key, val, "\n");
+}
+
+
+void muscle_pair_list_grow (const char *muscle,
+			    const char *a1, const char *a2)
+{
+  char *pair;
+  obstack_sgrow (&muscle_obstack, "[");
+  obstack_quote (&muscle_obstack, a1);
+  obstack_sgrow (&muscle_obstack, ", ");
+  obstack_quote (&muscle_obstack, a2);
+  obstack_sgrow (&muscle_obstack, "]");
+  obstack_1grow (&muscle_obstack, 0);
+  pair = obstack_finish (&muscle_obstack);
+  muscle_grow (muscle, pair, ",\n");
+  obstack_free (&muscle_obstack, pair);
+}
+
+
+/*----------------------------------------------------------------------------.
+| Find the value of muscle KEY.  Unlike MUSCLE_FIND, this is always reliable  |
+| to determine whether KEY has a value.                                       |
+`----------------------------------------------------------------------------*/
+
+char const *
+muscle_find_const (char const *key)
+{
+  muscle_entry probe;
+  muscle_entry *result = NULL;
+
+  probe.key = key;
+  result = hash_lookup (muscle_table, &probe);
+  if (result)
+    return result->value;
+  return NULL;
+}
+
+
+/*----------------------------------------------------------------------------.
+| Find the value of muscle KEY.  Abort if muscle_insert was invoked more      |
+| recently than muscle_grow for KEY since muscle_find can't return a          |
+| char const *.                                                               |
+`----------------------------------------------------------------------------*/
+
+char *
+muscle_find (char const *key)
+{
+  muscle_entry probe;
+  muscle_entry *result = NULL;
+
+  probe.key = key;
+  result = hash_lookup (muscle_table, &probe);
+  if (result)
+    {
+      aver (result->value == result->storage);
+      return result->storage;
+    }
+  return NULL;
+}
+
+
+/* In the format `file_name:line.column', append BOUND to MUSCLE.  Use
+   digraphs for special characters in the file name.  */
+
+static void
+muscle_boundary_grow (char const *key, boundary bound)
+{
+  char *extension;
+  obstack_sgrow  (&muscle_obstack, "[[");
+  obstack_escape (&muscle_obstack, bound.file);
+  obstack_1grow  (&muscle_obstack, ':');
+  obstack_printf (&muscle_obstack, "%d", bound.line);
+  obstack_1grow  (&muscle_obstack, '.');
+  obstack_printf (&muscle_obstack, "%d", bound.column);
+  obstack_sgrow  (&muscle_obstack, "]]");
+  obstack_1grow  (&muscle_obstack, '\0');
+  extension = obstack_finish (&muscle_obstack);
+  muscle_grow (key, extension, "");
+  obstack_free (&muscle_obstack, extension);
+}
+
+
+/* In the format `[[file_name:line.column]], [[file_name:line.column]]',
+   append LOC to MUSCLE.  Use digraphs for special characters in each
+   file name.  */
+
+static void
+muscle_location_grow (char const *key, location loc)
+{
+  muscle_boundary_grow (key, loc.start);
+  muscle_grow (key, "", ", ");
+  muscle_boundary_grow (key, loc.end);
+}
+
+#define COMMON_DECODE(Value)                                    \
+  case '$':                                                     \
+    aver (*++(Value) == ']');                                   \
+    aver (*++(Value) == '[');                                   \
+    obstack_sgrow (&muscle_obstack, "$");                       \
+    break;                                                      \
+  case '@':                                                     \
+    switch (*++(Value))                                         \
+      {                                                         \
+        case '@': obstack_sgrow (&muscle_obstack, "@" ); break; \
+        case '{': obstack_sgrow (&muscle_obstack, "[" ); break; \
+        case '}': obstack_sgrow (&muscle_obstack, "]" ); break; \
+        default: aver (false); break;                           \
+      }                                                         \
+    break;                                                      \
+  default:                                                      \
+    obstack_1grow (&muscle_obstack, *(Value));                  \
+    break;
+
+/* Reverse of obstack_escape.  */
+static char *
+string_decode (char const *key)
+{
+  char const *value;
+  char *value_decoded;
+  char *result;
+
+  value = muscle_find_const (key);
+  if (!value)
+    return NULL;
+  do {
+    switch (*value)
+      {
+        COMMON_DECODE (value)
+        case '[':
+        case ']':
+          aver (false);
+          break;
+      }
+  } while (*value++);
+  value_decoded = obstack_finish (&muscle_obstack);
+  result = xstrdup (value_decoded);
+  obstack_free (&muscle_obstack, value_decoded);
+  return result;
+}
+
+/* Reverse of muscle_location_grow.  */
+static location
+location_decode (char const *key)
+{
+  location loc;
+  char const *value = muscle_find_const (key);
+  aver (value);
+  aver (*value == '[');
+  aver (*++value == '[');
+  while (*++value)
+    switch (*value)
+      {
+        COMMON_DECODE (value)
+        case '[':
+          aver (false);
+          break;
+        case ']':
+          {
+            char *boundary_str;
+            aver (*++value == ']');
+            obstack_1grow (&muscle_obstack, '\0');
+            boundary_str = obstack_finish (&muscle_obstack);
+            switch (*++value)
+              {
+                case ',':
+                  boundary_set_from_string (&loc.start, boundary_str);
+                  obstack_free (&muscle_obstack, boundary_str);
+                  aver (*++value == ' ');
+                  aver (*++value == '[');
+                  aver (*++value == '[');
+                  break;
+                case '\0':
+                  boundary_set_from_string (&loc.end, boundary_str);
+                  obstack_free (&muscle_obstack, boundary_str);
+                  return loc;
+                  break;
+                default:
+                  aver (false);
+                  break;
+              }
+          }
+          break;
+      }
+  aver (false);
+  return loc;
+}
+
+void
+muscle_user_name_list_grow (char const *key, char const *user_name,
+                            location loc)
+{
+  muscle_grow (key, "[[[[", ",");
+  muscle_grow (key, user_name, "");
+  muscle_grow (key, "]], ", "");
+  muscle_location_grow (key, loc);
+  muscle_grow (key, "]]", "");
+}
+
+/** If the \a variable name is obsolete, return the name to use,
+ * otherwise \a variable. */
+static
+char const *
+muscle_percent_variable_update (char const *variable)
+{
+  typedef struct
+  {
+    const char *obsolete;
+    const char *updated;
+  } conversion_type;
+  const conversion_type conversion[] =
+    {
+      { "api.push_pull", "api.push-pull", },
+      { "location_type", "api.location.type", },
+      { "lr.keep_unreachable_states", "lr.keep-unreachable-states", },
+    };
+  char const *res = variable;
+  int i;
+  for (i = 0; i < ARRAY_CARDINALITY (conversion); ++i)
+    if (STREQ (conversion[i].obsolete, variable))
+      {
+        res = conversion[i].updated;
+        break;
+      }
+  return res;
+}
+
+void
+muscle_percent_define_insert (char const *var, location variable_loc,
+                              char const *value,
+                              muscle_percent_define_how how)
+{
+  /* Backward compatibility.  */
+  char const *variable = muscle_percent_variable_update (var);
+  char const *name = UNIQSTR_CONCAT ("percent_define(", variable, ")");
+  char const *loc_name = UNIQSTR_CONCAT ("percent_define_loc(", variable, ")");
+  char const *syncline_name =
+    UNIQSTR_CONCAT ("percent_define_syncline(", variable, ")");
+  char const *how_name = UNIQSTR_CONCAT ("percent_define_how(", variable, ")");
+
+  /* Command-line options are processed before the grammar file.  */
+  if (how == MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE
+      && muscle_find_const (name))
+    {
+      unsigned i = 0;
+      muscle_percent_define_how how_old =
+        atoi (muscle_find_const (how_name));
+      if (how_old == MUSCLE_PERCENT_DEFINE_F)
+        return;
+      complain_at_indent (variable_loc, &i,
+                          _("%%define variable %s redefined"), quote (variable));
+      i += SUB_INDENT;
+      complain_at_indent (muscle_percent_define_get_loc (variable), &i,
+                          _("previous definition"));
+    }
+
+  MUSCLE_INSERT_STRING (name, value);
+  muscle_insert (loc_name, "");
+  muscle_location_grow (loc_name, variable_loc);
+  muscle_insert (syncline_name, "");
+  muscle_syncline_grow (syncline_name, variable_loc);
+  muscle_user_name_list_grow ("percent_define_user_variables", variable,
+                              variable_loc);
+  MUSCLE_INSERT_INT (how_name, how);
+}
+
+char *
+muscle_percent_define_get (char const *variable)
+{
+  char const *name;
+  char const *usage_name;
+  char *value;
+
+  name = UNIQSTR_CONCAT ("percent_define(", variable, ")");
+  usage_name = UNIQSTR_CONCAT ("percent_define_bison_variables(",
+                               variable, ")");
+
+  muscle_insert (usage_name, "");
+  value = string_decode (name);
+  if (!value)
+    value = xstrdup ("");
+  return value;
+}
+
+location
+muscle_percent_define_get_loc (char const *variable)
+{
+  char const *loc_name;
+  loc_name = UNIQSTR_CONCAT ("percent_define_loc(", variable, ")");
+  if (!muscle_find_const (loc_name))
+    fatal(_("%s: undefined %%define variable %s"),
+          "muscle_percent_define_get_loc", quote (variable));
+  return location_decode (loc_name);
+}
+
+char const *
+muscle_percent_define_get_syncline (char const *variable)
+{
+  char const *syncline_name;
+  char const *syncline;
+  syncline_name =
+    UNIQSTR_CONCAT ("percent_define_syncline(", variable, ")");
+  syncline = muscle_find_const (syncline_name);
+  if (!syncline)
+    fatal(_("%s: undefined %%define variable %s"),
+          "muscle_percent_define_get_syncline", quote (variable));
+  return syncline;
+}
+
+bool
+muscle_percent_define_ifdef (char const *variable)
+{
+  char const *name;
+  char const *usage_name;
+  char const *value;
+
+  name = UNIQSTR_CONCAT ("percent_define(", variable, ")");
+  usage_name =
+    UNIQSTR_CONCAT ("percent_define_bison_variables(", variable, ")");
+
+  value = muscle_find_const (name);
+  if (value)
+    {
+      muscle_insert (usage_name, "");
+      return true;
+    }
+
+  return false;
+}
+
+bool
+muscle_percent_define_flag_if (char const *variable)
+{
+  char const *invalid_boolean_name;
+  bool result = false;
+
+  invalid_boolean_name =
+    UNIQSTR_CONCAT ("percent_define_invalid_boolean(", variable, ")");
+
+  if (muscle_percent_define_ifdef (variable))
+    {
+      char *value = muscle_percent_define_get (variable);
+      if (value[0] == '\0' || 0 == strcmp (value, "true"))
+        result = true;
+      else if (0 == strcmp (value, "false"))
+        result = false;
+      else if (!muscle_find_const (invalid_boolean_name))
+        {
+          muscle_insert (invalid_boolean_name, "");
+          complain_at(muscle_percent_define_get_loc (variable),
+                      _("invalid value for %%define Boolean variable %s"),
+                      quote (variable));
+        }
+      free (value);
+    }
+  else
+    fatal(_("%s: undefined %%define variable %s"),
+          "muscle_percent_define_flag", quote (variable));
+
+  return result;
+}
+
+void
+muscle_percent_define_default (char const *variable, char const *value)
+{
+  char const *name;
+  char const *loc_name;
+  char const *syncline_name;
+  name = UNIQSTR_CONCAT ("percent_define(", variable, ")");
+  loc_name = UNIQSTR_CONCAT ("percent_define_loc(", variable, ")");
+  syncline_name =
+    UNIQSTR_CONCAT ("percent_define_syncline(", variable, ")");
+  if (!muscle_find_const (name))
+    {
+      location loc;
+      MUSCLE_INSERT_STRING (name, value);
+      loc.start.file = loc.end.file = "<default value>";
+      loc.start.line = loc.end.line = -1;
+      loc.start.column = loc.end.column = -1;
+      muscle_insert (loc_name, "");
+      muscle_location_grow (loc_name, loc);
+      muscle_insert (syncline_name, "");
+    }
+}
+
+void
+muscle_percent_define_check_values (char const * const *values)
+{
+  for (; *values; ++values)
+    {
+      char const * const *variablep = values;
+      char const *name;
+      char *value;
+
+      name = UNIQSTR_CONCAT ("percent_define(", *variablep, ")");
+
+      value = string_decode (name);
+      if (value)
+        {
+          for (++values; *values; ++values)
+            {
+              if (0 == strcmp (value, *values))
+                break;
+            }
+          if (!*values)
+            {
+              unsigned i = 0;
+              location loc = muscle_percent_define_get_loc (*variablep);
+              complain_at_indent (loc, &i,
+                                _("invalid value for %%define variable %s: %s"),
+                                  quote (*variablep), quote_n (1, value));
+              i += SUB_INDENT;
+              for (values = variablep + 1; *values; ++values)
+                complain_at_indent (loc, &i, _("accepted value: %s"),
+                                    quote (*values));
+            }
+          else
+            {
+              while (*values)
+                ++values;
+            }
+          free (value);
+        }
+      else
+        fatal (_("%s: undefined %%define variable %s"),
+               "muscle_percent_define_check_values", quote (*variablep));
+    }
+}
+
+void
+muscle_percent_code_grow (char const *qualifier, location qualifier_loc,
+                          char const *code, location code_loc)
+{
+  char const *name;
+  name = UNIQSTR_CONCAT ("percent_code(", qualifier, ")");
+  muscle_code_grow (name, code, code_loc);
+  muscle_user_name_list_grow ("percent_code_user_qualifiers", qualifier,
+                               qualifier_loc);
+}
+
+
+/*------------------------------------------------.
+| Output the definition of ENTRY as a m4_define.  |
+`------------------------------------------------*/
+
+static inline bool
+muscle_m4_output (muscle_entry *entry, FILE *out)
+{
+  fprintf (out, "m4_define([b4_%s],\n", entry->key);
+  fprintf (out, "[[%s]])\n\n\n", entry->value);
+  return true;
+}
+
+static bool
+muscle_m4_output_processor (void *entry, void *out)
+{
+  return muscle_m4_output (entry, out);
+}
+
+
+/*----------------------------------------------------------------.
+| Output the definition of all the current muscles into a list of |
+| m4_defines.                                                     |
+`----------------------------------------------------------------*/
+
+void
+muscles_m4_output (FILE *out)
+{
+  hash_do_for_each (muscle_table, muscle_m4_output_processor, out);
+}
diff --git a/src/muscle-tab.h b/src/muscle-tab.h
new file mode 100644
index 0000000..696103f
--- /dev/null
+++ b/src/muscle-tab.h
@@ -0,0 +1,191 @@
+/* Muscle table manager for Bison,
+
+   Copyright (C) 2001-2003, 2006-2007, 2009-2012 Free Software
+   Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef MUSCLE_TAB_H_
+# define MUSCLE_TAB_H_
+
+# include <quotearg.h>
+
+# include "location.h"
+
+void muscle_init (void);
+void muscle_insert (char const *key, char const *value);
+char const *muscle_find_const (char const *key);
+char *muscle_find (char const *key);
+void muscle_free (void);
+
+
+/* An obstack dedicated to receive muscle keys and values.  */
+extern struct obstack muscle_obstack;
+
+#define MUSCLE_INSERT_BOOL(Key, Value)                          \
+  do {                                                          \
+    int v = Value;                                              \
+    MUSCLE_INSERT_INT (Key, v);                                 \
+  } while (0)
+
+#define MUSCLE_INSERT_INT(Key, Value)                           \
+  do {                                                          \
+    obstack_printf (&muscle_obstack, "%d", Value);              \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+#define MUSCLE_INSERT_LONG_INT(Key, Value)                      \
+  do {                                                          \
+    obstack_printf (&muscle_obstack, "%ld", Value);             \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+#define MUSCLE_INSERT_STRING_RAW(Key, Value)                    \
+  do {                                                          \
+    obstack_sgrow (&muscle_obstack, Value);                     \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+#define MUSCLE_INSERT_STRING(Key, Value)                        \
+  do {                                                          \
+    obstack_escape (&muscle_obstack, Value);                    \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+#define MUSCLE_INSERT_C_STRING(Key, Value)                      \
+  do {                                                          \
+    obstack_escape (&muscle_obstack,                            \
+                    quotearg_style (c_quoting_style, Value));   \
+    obstack_1grow (&muscle_obstack, 0);                         \
+    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+  } while (0)
+
+/* Append VALUE to the current value of KEY.  If KEY did not already
+   exist, create it.  Use MUSCLE_OBSTACK.  De-allocate the previously
+   associated value.  Copy VALUE and SEPARATOR.  */
+
+void muscle_grow (const char *key, const char *value, const char *separator);
+
+
+/* Append VALUE to the current value of KEY, using muscle_grow.  But
+   in addition, issue a synchronization line for the location LOC.  */
+
+void muscle_code_grow (const char *key, const char *value, location loc);
+
+
+/* MUSCLE is an M4 list of pairs.  Create or extend it with the pair
+   (A1, A2) after escaping both values with digraphs.  Note that because the
+   muscle values are output *double* quoted, one needs to strip the first level
+   of quotes to reach the list itself.  */
+void muscle_pair_list_grow (const char *muscle,
+                            const char *a1, const char *a2);
+
+/* Grow KEY for the occurrence of the name USER_NAME at LOC appropriately for
+   use with b4_check_user_names in ../data/bison.m4.  USER_NAME is not escaped
+   with digraphs, so it must not contain `[' or `]'.  */
+void muscle_user_name_list_grow (char const *key, char const *user_name,
+                                 location loc);
+
+/* Indicates whether a variable's value was specified with -D/--define, with
+   -F/--force-define, or in the grammar file.  */
+typedef enum {
+  MUSCLE_PERCENT_DEFINE_D = 0, MUSCLE_PERCENT_DEFINE_F,
+  MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE
+} muscle_percent_define_how;
+
+/* Define the muscles for %define variable VARIABLE with VALUE specified
+   at VARIABLE_LOC in the manner HOW unless it was specified in the
+   grammar file while the previous definition for VARIABLE was specified
+   with -F/--force-define.  Complain if a previous definition is being
+   overridden and the new definition is specified in the grammar file.
+   (These rules support the documented behavior as long as command-line
+   definitions are processed before grammar file definitions.)  Record
+   this as a user occurrence of VARIABLE by invoking
+   muscle_user_name_list_grow.  */
+void muscle_percent_define_insert (char const *variable, location variable_loc,
+                                   char const *value,
+                                   muscle_percent_define_how how);
+
+/* Mimic b4_percent_define_get in ../data/bison.m4 exactly.  That is, if the
+   %define variable VARIABLE is defined, return its value.  Otherwise, return
+   the empty string.  Also, record Bison's usage of VARIABLE by defining
+   b4_percent_define_bison_variables(VARIABLE).  The caller is responsible for
+   freeing the memory of the returned string.  */
+char *muscle_percent_define_get (char const *variable);
+
+/* Mimic muscle_percent_define_get_loc in ../data/bison.m4 exactly.  That is,
+   if the %define variable VARIABLE is undefined, complain fatally since that's
+   a Bison error.  Otherwise, return its definition location in a form
+   approriate for the first argument of warn_at, complain_at, or fatal_at.
+   Don't record this as a Bison usage of VARIABLE as there's no reason to
+   suspect that the user-supplied value has yet influenced the output.  */
+location muscle_percent_define_get_loc (char const *variable);
+
+/* Mimic muscle_percent_define_get_syncline in ../data/bison.m4 exactly.  That
+   is, if the %define variable VARIABLE is undefined, complain fatally since
+   that's a Bison error.  Otherwise, return its definition location as a
+   b4_syncline invocation.  Don't record this as a Bison usage of VARIABLE as
+   there's no reason to suspect that the user-supplied value has yet influenced
+   the output.  */
+char const *muscle_percent_define_get_syncline (char const *variable);
+
+/* Mimic b4_percent_define_ifdef in ../data/bison.m4 exactly.  That is, if the
+   %define variable VARIABLE is defined, return true.  Otherwise, return false.
+   Also, record Bison's usage of VARIABLE by defining
+   b4_percent_define_bison_variables(VARIABLE).  */
+bool muscle_percent_define_ifdef (char const *variable);
+
+/* Mimic b4_percent_define_flag_if in ../data/bison.m4 exactly.  That is, if
+   the %define variable VARIABLE is defined to "" or "true", return true.  If
+   it is defined to "false", return false.  Complain if it is undefined (a
+   Bison error since the default value should have been set already) or defined
+   to any other value (possibly a user error).  Also, record Bison's usage of
+   VARIABLE by defining b4_percent_define_bison_variables(VARIABLE).  */
+bool muscle_percent_define_flag_if (char const *variable);
+
+/* Mimic b4_percent_define_default in ../data/bison.m4 exactly.  That is, if
+   the %define variable VARIABLE is undefined, set its value to VALUE.
+   Don't record this as a Bison usage of VARIABLE as there's no reason to
+   suspect that the value has yet influenced the output.  */
+void muscle_percent_define_default (char const *variable, char const *value);
+
+/* Mimic b4_percent_define_check_values in ../data/bison.m4 exactly except that
+   the VALUES structure is more appropriate for C.  That is, VALUES points to a
+   list of strings that is partitioned into sublists by NULL's, one terminating
+   each sublist.  The last sublist is followed by a second NULL.  For each
+   sublist, the first string is the name of a %define variable, and all
+   remaining strings in that sublist are the valid values for that variable.
+   Complain if such a variable is undefined (a Bison error since the default
+   value should have been set already) or defined to any other value (possibly
+   a user error).  Don't record this as a Bison usage of the variable as
+   there's no reason to suspect that the value has yet influenced the
+   output.  */
+void muscle_percent_define_check_values (char const * const *values);
+
+/* Grow the muscle for the %code qualifier QUALIFIER appearing at
+   QUALIFIER_LOC with code CODE appearing at CODE_LOC.  Record this as a
+   user occurrence of QUALIFIER by invoking
+   muscle_user_name_list_grow.  */
+void muscle_percent_code_grow (char const *qualifier, location qualifier_loc,
+                               char const *code, location code_loc);
+
+void muscles_m4_output (FILE *out);
+
+#endif /* not MUSCLE_TAB_H_ */
diff --git a/src/muscle_tab.c b/src/muscle_tab.c
deleted file mode 100644
index 2d71085..0000000
--- a/src/muscle_tab.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/* Muscle table manager for Bison.
-
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software
-   Foundation, Inc.
-
-   This file is part of Bison, the GNU Compiler Compiler.
-
-   Bison 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.
-
-   Bison 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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-#include "system.h"
-
-#include <hash.h>
-#include <quotearg.h>
-
-#include "files.h"
-#include "muscle_tab.h"
-#include "getargs.h"
-
-typedef struct
-{
-  const char *key;
-  char *value;
-} muscle_entry;
-
-/* An obstack used to create some entries.  */
-struct obstack muscle_obstack;
-
-/* Initial capacity of muscles hash table.  */
-#define HT_INITIAL_CAPACITY 257
-
-static struct hash_table *muscle_table = NULL;
-
-static bool
-hash_compare_muscles (void const *x, void const *y)
-{
-  muscle_entry const *m1 = x;
-  muscle_entry const *m2 = y;
-  return strcmp (m1->key, m2->key) == 0;
-}
-
-static size_t
-hash_muscle (const void *x, size_t tablesize)
-{
-  muscle_entry const *m = x;
-  return hash_string (m->key, tablesize);
-}
-
-/*-----------------------------------------------------------------.
-| Create the MUSCLE_TABLE, and initialize it with default values.  |
-| Also set up the MUSCLE_OBSTACK.                                  |
-`-----------------------------------------------------------------*/
-
-void
-muscle_init (void)
-{
-  /* Initialize the muscle obstack.  */
-  obstack_init (&muscle_obstack);
-
-  muscle_table = hash_initialize (HT_INITIAL_CAPACITY, NULL, hash_muscle,
-				  hash_compare_muscles, free);
-
-  /* Version and input file.  */
-  MUSCLE_INSERT_STRING ("version", VERSION);
-  MUSCLE_INSERT_C_STRING ("file_name", grammar_file);
-}
-
-
-/*------------------------------------------------------------.
-| Free all the memory consumed by the muscle machinery only.  |
-`------------------------------------------------------------*/
-
-void
-muscle_free (void)
-{
-  hash_free (muscle_table);
-  obstack_free (&muscle_obstack, NULL);
-}
-
-
-
-/*------------------------------------------------------------.
-| Insert (KEY, VALUE).  If KEY already existed, overwrite the |
-| previous value.                                             |
-`------------------------------------------------------------*/
-
-void
-muscle_insert (const char *key, char *value)
-{
-  muscle_entry probe;
-  muscle_entry *entry;
-
-  probe.key = key;
-  entry = hash_lookup (muscle_table, &probe);
-
-  if (!entry)
-    {
-      /* First insertion in the hash. */
-      entry = xmalloc (sizeof *entry);
-      entry->key = key;
-      hash_insert (muscle_table, entry);
-    }
-  entry->value = value;
-}
-
-
-/*-------------------------------------------------------------------.
-| Append VALUE to the current value of KEY.  If KEY did not already  |
-| exist, create it.  Use MUSCLE_OBSTACK.  De-allocate the previously |
-| associated value.  Copy VALUE and SEPARATOR.                       |
-`-------------------------------------------------------------------*/
-
-void
-muscle_grow (const char *key, const char *val, const char *separator)
-{
-  muscle_entry probe;
-  muscle_entry *entry = NULL;
-
-  probe.key = key;
-  entry = hash_lookup (muscle_table, &probe);
-
-  if (!entry)
-    {
-      /* First insertion in the hash. */
-      entry = xmalloc (sizeof *entry);
-      entry->key = key;
-      hash_insert (muscle_table, entry);
-      entry->value = xstrdup (val);
-    }
-  else
-    {
-      /* Grow the current value. */
-      char *new_val;
-      obstack_sgrow (&muscle_obstack, entry->value);
-      free (entry->value);
-      obstack_sgrow (&muscle_obstack, separator);
-      obstack_sgrow (&muscle_obstack, val);
-      obstack_1grow (&muscle_obstack, 0);
-      new_val = obstack_finish (&muscle_obstack);
-      entry->value = xstrdup (new_val);
-      obstack_free (&muscle_obstack, new_val);
-    }
-}
-
-
-/*------------------------------------------------------------------.
-| Append VALUE to the current value of KEY, using muscle_grow.  But |
-| in addition, issue a synchronization line for the location LOC.   |
-`------------------------------------------------------------------*/
-
-void
-muscle_code_grow (const char *key, const char *val, location loc)
-{
-  char *extension = NULL;
-  obstack_fgrow1 (&muscle_obstack, "]b4_syncline(%d, [[", loc.start.line);
-  MUSCLE_OBSTACK_SGROW (&muscle_obstack,
-			quotearg_style (c_quoting_style, loc.start.file));
-  obstack_sgrow (&muscle_obstack, "]])[\n");
-  obstack_sgrow (&muscle_obstack, val);
-  obstack_1grow (&muscle_obstack, 0);
-  extension = obstack_finish (&muscle_obstack);
-  muscle_grow (key, extension, "");
-}
-
-
-/*-------------------------------------------------------------------.
-| MUSCLE is an M4 list of pairs.  Create or extend it with the pair  |
-| (A1, A2).  Note that because the muscle values are output *double* |
-| quoted, one needs to strip the first level of quotes to reach the  |
-| list itself.                                                       |
-`-------------------------------------------------------------------*/
-
-void muscle_pair_list_grow (const char *muscle,
-			    const char *a1, const char *a2)
-{
-  char *pair;
-  obstack_fgrow2 (&muscle_obstack, "[[[%s]], [[%s]]]", a1, a2);
-  obstack_1grow (&muscle_obstack, 0);
-  pair = obstack_finish (&muscle_obstack);
-  muscle_grow (muscle, pair, ",\n");
-  obstack_free (&muscle_obstack, pair);
-}
-
-/*-------------------------------.
-| Find the value of muscle KEY.  |
-`-------------------------------*/
-
-char *
-muscle_find (const char *key)
-{
-  muscle_entry probe;
-  muscle_entry *result = NULL;
-
-  probe.key = key;
-  result = hash_lookup (muscle_table, &probe);
-  return result ? result->value : NULL;
-}
-
-
-/*------------------------------------------------.
-| Output the definition of ENTRY as a m4_define.  |
-`------------------------------------------------*/
-
-static inline bool
-muscle_m4_output (muscle_entry *entry, FILE *out)
-{
-  fprintf (out, "m4_define([b4_%s],\n", entry->key);
-  fprintf (out, "[[%s]])\n\n\n", entry->value);
-  return true;
-}
-
-static bool
-muscle_m4_output_processor (void *entry, void *out)
-{
-  return muscle_m4_output (entry, out);
-}
-
-
-/*----------------------------------------------------------------.
-| Output the definition of all the current muscles into a list of |
-| m4_defines.                                                     |
-`----------------------------------------------------------------*/
-
-void
-muscles_m4_output (FILE *out)
-{
-  hash_do_for_each (muscle_table, muscle_m4_output_processor, out);
-}
diff --git a/src/muscle_tab.h b/src/muscle_tab.h
deleted file mode 100644
index 9e8ac24..0000000
--- a/src/muscle_tab.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Muscle table manager for Bison,
-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of Bison, the GNU Compiler Compiler.
-
-   Bison 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.
-
-   Bison 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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#ifndef MUSCLE_TAB_H_
-# define MUSCLE_TAB_H_
-
-# include "location.h"
-
-void muscle_init (void);
-void muscle_insert (const char *key, char *value);
-char *muscle_find (const char *key);
-void muscle_free (void);
-
-
-/* An obstack dedicated to receive muscle keys and values.  */
-extern struct obstack muscle_obstack;
-
-#define MUSCLE_INSERT_BOOL(Key, Value)				\
-{								\
-  int v = Value;						\
-  MUSCLE_INSERT_INT (Key, v);					\
-}
-
-#define MUSCLE_INSERT_INT(Key, Value)				\
-{								\
-  obstack_fgrow1 (&muscle_obstack, "%d", Value);		\
-  obstack_1grow (&muscle_obstack, 0);				\
-  muscle_insert (Key, obstack_finish (&muscle_obstack));	\
-}
-
-#define MUSCLE_INSERT_LONG_INT(Key, Value)			\
-{								\
-  obstack_fgrow1 (&muscle_obstack, "%ld", Value);		\
-  obstack_1grow (&muscle_obstack, 0);				\
-  muscle_insert (Key, obstack_finish (&muscle_obstack));	\
-}
-
-#define MUSCLE_INSERT_STRING(Key, Value)			\
-{								\
-  obstack_sgrow (&muscle_obstack, Value);			\
-  obstack_1grow (&muscle_obstack, 0);				\
-  muscle_insert (Key, obstack_finish (&muscle_obstack));	\
-}
-
-#define MUSCLE_OBSTACK_SGROW(Obstack, Value)			\
-{								\
-  char const *p;						\
-  for (p = Value; *p; p++)					\
-    switch (*p)							\
-      {								\
-      case '$':	obstack_sgrow (Obstack, "$]["); break;		\
-      case '@':	obstack_sgrow (Obstack, "@@" ); break;		\
-      case '[':	obstack_sgrow (Obstack, "@{" ); break;		\
-      case ']':	obstack_sgrow (Obstack, "@}" ); break;		\
-      default: obstack_1grow (Obstack, *p); break;		\
-      }								\
-}
-
-#define MUSCLE_INSERT_C_STRING(Key, Value)			\
-{								\
-  MUSCLE_OBSTACK_SGROW (&muscle_obstack,			\
-			quotearg_style (c_quoting_style,	\
-					Value));		\
-  obstack_1grow (&muscle_obstack, 0);				\
-  muscle_insert (Key, obstack_finish (&muscle_obstack));	\
-}
-
-/* Insert (KEY, VALUE).  If KEY already existed, overwrite the
-   previous value.  Uses MUSCLE_OBSTACK.  De-allocates the previously
-   associated value.  VALUE and SEPARATOR are copied.  */
-
-void muscle_grow (const char *key, const char *value, const char *separator);
-
-
-/* Append VALUE to the current value of KEY, using muscle_grow.  But
-   in addition, issue a synchronization line for the location LOC.  */
-
-void muscle_code_grow (const char *key, const char *value, location loc);
-
-
-/* MUSCLE is an M4 list of pairs.  Create or extend it with the pair
-   (A1, A2).  Note that because the muscle values are output *double*
-   quoted, one needs to strip the first level of quotes to reach the
-   list itself.  */
-
-void muscle_pair_list_grow (const char *muscle,
-			    const char *a1, const char *a2);
-
-void muscles_m4_output (FILE *out);
-
-#endif /* not MUSCLE_TAB_H_ */
diff --git a/src/named-ref.c b/src/named-ref.c
new file mode 100644
index 0000000..bf7a3f7
--- /dev/null
+++ b/src/named-ref.c
@@ -0,0 +1,46 @@
+/* Named symbol references for Bison
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+#include "system.h"
+
+#include "named-ref.h"
+
+named_ref *
+named_ref_new (uniqstr id, location loc)
+{
+  named_ref *res = xmalloc (sizeof *res);
+
+  res->id = id;
+  res->loc = loc;
+
+  return res;
+}
+
+named_ref *
+named_ref_copy (const named_ref *r)
+{
+  return named_ref_new (r->id, r->loc);
+}
+
+void
+named_ref_free (named_ref *r)
+{
+  free (r);
+}
diff --git a/src/named-ref.h b/src/named-ref.h
new file mode 100644
index 0000000..00c972c
--- /dev/null
+++ b/src/named-ref.h
@@ -0,0 +1,46 @@
+/* Named symbol references for Bison
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef NAMED_REF_H_
+# define NAMED_REF_H_
+
+#include "location.h"
+#include "uniqstr.h"
+
+/* Named reference object. Keeps information about
+   a symbolic name of a symbol in a rule. */
+typedef struct named_ref
+{
+  /* Symbolic named given by user. */
+  uniqstr id;
+
+  /* Location of the symbolic name. Not including brackets. */
+  location loc;
+} named_ref;
+
+/* Allocate a named reference object. */
+named_ref *named_ref_new (uniqstr id, location loc);
+
+/* Allocate and return a copy.  */
+named_ref *named_ref_copy (const named_ref *r);
+
+/* Free a named reference object. */
+void named_ref_free (named_ref *r);
+
+#endif /* !NAMED_REF_H_ */
diff --git a/src/nullable.c b/src/nullable.c
index 83a90e9..1e7f5d1 100644
--- a/src/nullable.c
+++ b/src/nullable.c
@@ -1,24 +1,22 @@
 /* Calculate which nonterminals can expand into the null string for Bison.
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2006, 2009-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 /* Set up NULLABLE, a vector saying which nonterminals can expand into
@@ -104,8 +102,8 @@
 	else
 	  {
 	    /* This rule has an empty RHS. */
-	    assert (item_number_as_rule_number (rules_ruleno->rhs[0])
-		    == ruleno);
+	    aver (item_number_as_rule_number (rules_ruleno->rhs[0])
+		  == ruleno);
 	    if (rules_ruleno->useful
 		&& ! nullable[rules_ruleno->lhs->number - ntokens])
 	      {
diff --git a/src/nullable.h b/src/nullable.h
index d5106c7..f7b2912 100644
--- a/src/nullable.h
+++ b/src/nullable.h
@@ -1,22 +1,21 @@
 /* Part of the bison parser generator,
-   Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+
+   Copyright (C) 2000, 2002, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef NULLABLE_H_
 # define NULLABLE_H_
diff --git a/src/output.c b/src/output.c
index 6a02bb3..3852729 100644
--- a/src/output.c
+++ b/src/output.c
@@ -1,46 +1,46 @@
 /* Output the generated parsing program for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
+#include <configmake.h>
 #include <error.h>
 #include <get-errno.h>
 #include <quotearg.h>
-#include <subpipe.h>
+#include <spawn-pipe.h>
 #include <timevar.h>
+#include <wait-process.h>
 
 #include "complain.h"
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
-#include "muscle_tab.h"
+#include "muscle-tab.h"
 #include "output.h"
 #include "reader.h"
+#include "scan-code.h"    /* max_left_semantic_context */
 #include "scan-skel.h"
 #include "symtab.h"
 #include "tables.h"
 
-
 static struct obstack format_obstack;
 
 
@@ -68,7 +68,7 @@
   int i;								\
   int j = 1;								\
 									\
-  obstack_fgrow1 (&format_obstack, "%6d", first);			\
+  obstack_printf (&format_obstack, "%6d", first);			\
   for (i = begin; i < end; ++i)						\
     {									\
       obstack_1grow (&format_obstack, ',');				\
@@ -79,7 +79,7 @@
 	}								\
       else								\
 	++j;								\
-      obstack_fgrow1 (&format_obstack, "%6d", table_data[i]);		\
+      obstack_printf (&format_obstack, "%6d", table_data[i]);		\
       if (table_data[i] < min)						\
 	min = table_data[i];						\
       if (max < table_data[i])						\
@@ -91,10 +91,10 @@
   lmin = min;								\
   lmax = max;								\
   /* Build `NAME_min' and `NAME_max' in the obstack. */			\
-  obstack_fgrow1 (&format_obstack, "%s_min", name);			\
+  obstack_printf (&format_obstack, "%s_min", name);			\
   obstack_1grow (&format_obstack, 0);					\
   MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmin);	\
-  obstack_fgrow1 (&format_obstack, "%s_max", name);			\
+  obstack_printf (&format_obstack, "%s_max", name);			\
   obstack_1grow (&format_obstack, 0);					\
   MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmax);	\
 }
@@ -108,29 +108,39 @@
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_state_number_table, state_number)
 
 
-/*--------------------------------------------------------------------.
-| Print to OUT a representation of STRING escaped both for C and M4.  |
-`--------------------------------------------------------------------*/
+/*----------------------------------------------------------------.
+| Print to OUT a representation of CP quoted and escaped for M4.  |
+`----------------------------------------------------------------*/
 
 static void
-escaped_output (FILE *out, char const *string)
+quoted_output (FILE *out, char const *cp)
 {
-  char const *p;
   fprintf (out, "[[");
 
-  for (p = quotearg_style (c_quoting_style, string); *p; p++)
-    switch (*p)
+  for (; *cp; cp++)
+    switch (*cp)
       {
       case '$': fputs ("$][", out); break;
       case '@': fputs ("@@",  out); break;
       case '[': fputs ("@{",  out); break;
       case ']': fputs ("@}",  out); break;
-      default: fputc (*p, out); break;
+      default:  fputc (*cp,   out); break;
       }
 
   fprintf (out, "]]");
 }
 
+/*----------------------------------------------------------------.
+| Print to OUT a representation of STRING quoted and escaped both |
+| for C and M4.                                                   |
+`----------------------------------------------------------------*/
+
+static void
+string_output (FILE *out, char const *string)
+{
+  quoted_output (out, quotearg_style (c_quoting_style, string));
+}
+
 
 /*------------------------------------------------------------------.
 | Prepare the muscles related to the symbols: translate, tname, and |
@@ -140,7 +150,6 @@
 static void
 prepare_symbols (void)
 {
-  MUSCLE_INSERT_BOOL ("token_table", token_table_flag);
   MUSCLE_INSERT_INT ("tokens_number", ntokens);
   MUSCLE_INSERT_INT ("nterms_number", nvars);
   MUSCLE_INSERT_INT ("undef_token_number", undeftoken->number);
@@ -156,9 +165,12 @@
     int i;
     /* We assume that the table will be output starting at column 2. */
     int j = 2;
+    struct quoting_options *qo = clone_quoting_options (0);
+    set_quoting_style (qo, c_quoting_style);
+    set_quoting_flags (qo, QA_SPLIT_TRIGRAPHS);
     for (i = 0; i < nsyms; i++)
       {
-	char const *cp = quotearg_style (c_quoting_style, symbols[i]->tag);
+	char *cp = quotearg_alloc (symbols[i]->tag, -1, qo);
 	/* Width of the next token, including the two quotes, the
 	   comma and the space.  */
 	int width = strlen (cp) + 2;
@@ -171,13 +183,13 @@
 
 	if (i)
 	  obstack_1grow (&format_obstack, ' ');
-	MUSCLE_OBSTACK_SGROW (&format_obstack, cp);
+	obstack_escape (&format_obstack, cp);
+        free (cp);
 	obstack_1grow (&format_obstack, ',');
 	j += width;
       }
-    /* Add a NULL entry to list of tokens (well, 0, as NULL might not be
-       defined).  */
-    obstack_sgrow (&format_obstack, " 0");
+    free (qo);
+    obstack_sgrow (&format_obstack, " ]b4_null[");
 
     /* Finish table and store. */
     obstack_1grow (&format_obstack, 0);
@@ -236,7 +248,7 @@
       /* Merger-function index (GLR).  */
       merger[r] = rules[r].merger;
     }
-  assert (i == nritems);
+  aver (i == nritems);
 
   muscle_insert_item_number_table ("rhs", rhs, ritem[0], 1, nritems);
   muscle_insert_unsigned_int_table ("prhs", prhs, 0, 0, nrules);
@@ -289,20 +301,16 @@
 {
   rule_number r;
 
-  fputs ("m4_define([b4_actions], \n[[", out);
+  fputs ("m4_define([b4_actions], \n[", out);
   for (r = 0; r < nrules; ++r)
     if (rules[r].action)
       {
-	fprintf (out, "  case %d:\n", r + 1);
-
-	fprintf (out, "]b4_syncline(%d, ",
+	fprintf (out, "b4_case(%d, [b4_syncline(%d, ", r + 1,
 		 rules[r].action_location.start.line);
-	escaped_output (out, rules[r].action_location.start.file);
-	fprintf (out, ")[\n");
-	fprintf (out, "    %s\n    break;\n\n",
-		 rules[r].action);
+	string_output (out, rules[r].action_location.start.file);
+	fprintf (out, ")\n[    %s]])\n\n", rules[r].action);
       }
-  fputs ("]])\n\n", out);
+  fputs ("])\n\n", out);
 }
 
 /*--------------------------------------.
@@ -344,10 +352,10 @@
       symbol *sym = symbols[i];
       int number = sym->user_token_number;
 
-      /* At this stage, if there are literal aliases, they are part of
-	 SYMBOLS, so we should not find symbols which are the aliases
-	 here.  */
-      assert (number != USER_NUMBER_ALIAS);
+      /* At this stage, if there are literal string aliases, they are
+         part of SYMBOLS, so we should not find their aliased symbols
+         here.  */
+      aver (number != USER_NUMBER_HAS_STRING_ALIAS);
 
       /* Skip error token.  */
       if (sym == errtoken)
@@ -364,9 +372,11 @@
       if (sym->tag[0] == '\'' || sym->tag[0] == '\"')
 	continue;
 
-      /* Don't #define nonliteral tokens whose names contain periods
-	 or '$' (as does the default value of the EOF token).  */
-      if (strchr (sym->tag, '.') || strchr (sym->tag, '$'))
+      /* Don't #define nonliteral tokens whose names contain periods,
+         dashes or '$' (as does the default value of the EOF token).  */
+      if (mbschr (sym->tag, '.')
+          || mbschr (sym->tag, '-')
+          || mbschr (sym->tag, '$'))
 	continue;
 
       fprintf (out, "%s[[[%s]], %d]",
@@ -377,68 +387,44 @@
 }
 
 
-/*---------------------------------------.
-| Output the symbol destructors to OUT.  |
-`---------------------------------------*/
+/*---------------------------------------------------.
+| Output the symbol destructors or printers to OUT.  |
+`---------------------------------------------------*/
 
 static void
-symbol_destructors_output (FILE *out)
+symbol_code_props_output (FILE *out, char const *what,
+                          code_props const *(*get)(symbol const *))
 {
   int i;
   char const *sep = "";
 
-  fputs ("m4_define([b4_symbol_destructors], \n[", out);
+  fputs ("m4_define([b4_symbol_", out);
+  fputs (what, out);
+  fputs ("], \n[", out);
   for (i = 0; i < nsyms; ++i)
-    if (symbols[i]->destructor)
-      {
-	symbol *sym = symbols[i];
-
-	/* Filename, lineno,
-	   Symbol-name, Symbol-number,
-	   destructor, optional typename.  */
-	fprintf (out, "%s[", sep);
-	sep = ",\n";
-	escaped_output (out, sym->destructor_location.start.file);
-	fprintf (out, ", %d, ", sym->destructor_location.start.line);
-	escaped_output (out, sym->tag);
-	fprintf (out, ", %d, [[%s]]", sym->number, sym->destructor);
-	if (sym->type_name)
-	  fprintf (out, ", [[%s]]", sym->type_name);
-	fputc (']', out);
-      }
-  fputs ("])\n\n", out);
-}
-
-
-/*------------------------------------.
-| Output the symbol printers to OUT.  |
-`------------------------------------*/
-
-static void
-symbol_printers_output (FILE *out)
-{
-  int i;
-  char const *sep = "";
-
-  fputs ("m4_define([b4_symbol_printers], \n[", out);
-  for (i = 0; i < nsyms; ++i)
-    if (symbols[i]->printer)
-      {
-	symbol *sym = symbols[i];
-
-	/* Filename, lineno,
-	   Symbol-name, Symbol-number,
-	   printer, optional typename.  */
-	fprintf (out, "%s[", sep);
-	sep = ",\n";
-	escaped_output (out, sym->printer_location.start.file);
-	fprintf (out, ", %d, ", sym->printer_location.start.line);
-	escaped_output (out, sym->tag);
-	fprintf (out, ", %d, [[%s]]", sym->number, sym->printer);
-	if (sym->type_name)
-	  fprintf (out, ", [[%s]]", sym->type_name);
-	fputc (']', out);
-      }
+    {
+      symbol *sym = symbols[i];
+      char const *code = (*get) (sym)->code;
+      if (code)
+        {
+          location loc = (*get) (sym)->location;
+          /* Filename, lineno,
+             Symbol-name, Symbol-number,
+             code, optional typename.  */
+          fprintf (out, "%s[", sep);
+          sep = ",\n";
+          string_output (out, loc.start.file);
+          fprintf (out, ", %d, ", loc.start.line);
+          quoted_output (out, sym->tag);
+          fprintf (out, ", %d, [[%s]]", sym->number, code);
+          if (sym->type_name)
+            {
+              fputs (", ", out);
+              quoted_output (out, sym->type_name);
+            }
+          fputc (']', out);
+        }
+    }
   fputs ("])\n\n", out);
 }
 
@@ -447,7 +433,7 @@
 prepare_actions (void)
 {
   /* Figure out the actions for the specified state, indexed by
-     look-ahead token type.  */
+     lookahead token type.  */
 
   muscle_insert_rule_number_table ("defact", yydefact,
 				   yydefact[0], 1, nstates);
@@ -490,6 +476,23 @@
 				    0, 1, conflict_list_cnt);
 }
 
+/*--------------------------------------------.
+| Output the definitions of all the muscles.  |
+`--------------------------------------------*/
+
+static void
+muscles_output (FILE *out)
+{
+  fputs ("m4_init()\n", out);
+
+  user_actions_output (out);
+  merger_output (out);
+  token_definitions_output (out);
+  symbol_code_props_output (out, "destructors", &symbol_destructor_get);
+  symbol_code_props_output (out, "printers", &symbol_printer_get);
+
+  muscles_m4_output (out);
+}
 
 /*---------------------------.
 | Call the skeleton parser.  |
@@ -499,21 +502,19 @@
 output_skeleton (void)
 {
   FILE *in;
-  FILE *out;
   int filter_fd[2];
-  char const *argv[6];
+  char const *argv[10];
   pid_t pid;
 
-  /* Compute the names of the package data dir and skeleton file.
-     Test whether m4sugar.m4 is readable, to check for proper
-     installation.  A faulty installation can cause deadlock, so a
-     cheap sanity check is worthwhile.  */
+  /* Compute the names of the package data dir and skeleton files.  */
   char const m4sugar[] = "m4sugar/m4sugar.m4";
+  char const m4bison[] = "bison.m4";
   char *full_m4sugar;
+  char *full_m4bison;
   char *full_skeleton;
   char const *p;
   char const *m4 = (p = getenv ("M4")) ? p : M4;
-  char const *pkgdatadir = (p = getenv ("BISON_PKGDATADIR")) ? p : PKGDATADIR;
+  char const *pkgdatadir = compute_pkgdatadir ();
   size_t skeleton_size = strlen (skeleton) + 1;
   size_t pkgdatadirlen = strlen (pkgdatadir);
   while (pkgdatadirlen && pkgdatadir[pkgdatadirlen - 1] == '/')
@@ -521,77 +522,128 @@
   full_skeleton = xmalloc (pkgdatadirlen + 1
 			   + (skeleton_size < sizeof m4sugar
 			      ? sizeof m4sugar : skeleton_size));
-  strcpy (full_skeleton, pkgdatadir);
+  memcpy (full_skeleton, pkgdatadir, pkgdatadirlen);
   full_skeleton[pkgdatadirlen] = '/';
   strcpy (full_skeleton + pkgdatadirlen + 1, m4sugar);
   full_m4sugar = xstrdup (full_skeleton);
-  strcpy (full_skeleton + pkgdatadirlen + 1, skeleton);
+  strcpy (full_skeleton + pkgdatadirlen + 1, m4bison);
+  full_m4bison = xstrdup (full_skeleton);
+  if (mbschr (skeleton, '/'))
+    strcpy (full_skeleton, skeleton);
+  else
+    strcpy (full_skeleton + pkgdatadirlen + 1, skeleton);
+
+  /* Test whether m4sugar.m4 is readable, to check for proper
+     installation.  A faulty installation can cause deadlock, so a
+     cheap sanity check is worthwhile.  */
   xfclose (xfopen (full_m4sugar, "r"));
 
   /* Create an m4 subprocess connected to us via two pipes.  */
 
   if (trace_flag & trace_tools)
-    fprintf (stderr, "running: %s %s - %s\n",
-	     m4, full_m4sugar, full_skeleton);
+    fprintf (stderr, "running: %s %s - %s %s\n",
+             m4, full_m4sugar, full_m4bison, full_skeleton);
 
-  argv[0] = m4;
-  argv[1] = full_m4sugar;
-  argv[2] = "-";
-  argv[3] = full_skeleton;
-  argv[4] = trace_flag & trace_m4 ? "-dV" : NULL;
-  argv[5] = NULL;
+  /* Some future version of GNU M4 (most likely 1.6) may treat the -dV in a
+     position-dependent manner.  Keep it as the first argument so that all
+     files are traced.
 
-  init_subpipe ();
-  pid = create_subpipe (argv, filter_fd);
+     See the thread starting at
+     <http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>
+     for details.  */
+  {
+    int i = 0;
+    argv[i++] = m4;
+
+    /* When POSIXLY_CORRECT is set, GNU M4 1.6 and later disable GNU
+       extensions, which Bison's skeletons depend on.  With older M4,
+       it has no effect.  M4 1.4.12 added a -g/--gnu command-line
+       option to make it explicit that a program wants GNU M4
+       extensions even when POSIXLY_CORRECT is set.
+
+       See the thread starting at
+       <http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>
+       for details.  */
+    if (*M4_GNU_OPTION)
+      argv[i++] = M4_GNU_OPTION;
+
+    argv[i++] = "-I";
+    argv[i++] = pkgdatadir;
+    if (trace_flag & trace_m4)
+      argv[i++] = "-dV";
+    argv[i++] = full_m4sugar;
+    argv[i++] = "-";
+    argv[i++] = full_m4bison;
+    argv[i++] = full_skeleton;
+    argv[i++] = NULL;
+    aver (i <= ARRAY_CARDINALITY (argv));
+  }
+
+  /* The ugly cast is because gnulib gets the const-ness wrong.  */
+  pid = create_pipe_bidi ("m4", m4, (char **)(void*)argv, false, true,
+                          true, filter_fd);
   free (full_m4sugar);
+  free (full_m4bison);
   free (full_skeleton);
 
-  out = fdopen (filter_fd[0], "w");
-  if (! out)
-    error (EXIT_FAILURE, get_errno (),
-	   "fdopen");
-
-  /* Output the definitions of all the muscles.  */
-  fputs ("m4_init()\n", out);
-
-  user_actions_output (out);
-  merger_output (out);
-  token_definitions_output (out);
-  symbol_destructors_output (out);
-  symbol_printers_output (out);
-
-  muscles_m4_output (out);
-
-  fputs ("m4_wrap([m4_divert_pop(0)])\n", out);
-  fputs ("m4_divert_push(0)dnl\n", out);
-  xfclose (out);
+  if (trace_flag & trace_muscles)
+    muscles_output (stderr);
+  {
+    FILE *out = fdopen (filter_fd[1], "w");
+    if (! out)
+      error (EXIT_FAILURE, get_errno (),
+             "fdopen");
+    muscles_output (out);
+    xfclose (out);
+  }
 
   /* Read and process m4's output.  */
   timevar_push (TV_M4);
-  end_of_output_subpipe (pid, filter_fd);
-  in = fdopen (filter_fd[1], "r");
+  in = fdopen (filter_fd[0], "r");
   if (! in)
     error (EXIT_FAILURE, get_errno (),
 	   "fdopen");
   scan_skel (in);
+  /* scan_skel should have read all of M4's output.  Otherwise, when we
+     close the pipe, we risk letting M4 report a broken-pipe to the
+     Bison user.  */
+  aver (feof (in));
   xfclose (in);
-  reap_subpipe (pid, m4);
+  wait_subprocess (pid, "m4", false, false, true, true, NULL);
   timevar_pop (TV_M4);
 }
 
 static void
 prepare (void)
 {
+  /* BISON_USE_PUSH_FOR_PULL is for the test suite and should not be documented
+     for the user.  */
+  char const *use_push_for_pull_env = getenv ("BISON_USE_PUSH_FOR_PULL");
+  bool use_push_for_pull_flag = false;
+  if (use_push_for_pull_env != NULL
+      && use_push_for_pull_env[0] != '\0'
+      && 0 != strcmp (use_push_for_pull_env, "0"))
+    use_push_for_pull_flag = true;
+
   /* Flags. */
-  MUSCLE_INSERT_BOOL ("debug_flag", debug_flag);
+  MUSCLE_INSERT_BOOL ("debug_flag", debug);
   MUSCLE_INSERT_BOOL ("defines_flag", defines_flag);
   MUSCLE_INSERT_BOOL ("error_verbose_flag", error_verbose);
+  MUSCLE_INSERT_BOOL ("glr_flag", glr_parser);
   MUSCLE_INSERT_BOOL ("locations_flag", locations_flag);
-  MUSCLE_INSERT_BOOL ("pure_flag", pure_parser);
+  MUSCLE_INSERT_BOOL ("nondeterministic_flag", nondeterministic_parser);
   MUSCLE_INSERT_BOOL ("synclines_flag", !no_lines_flag);
+  MUSCLE_INSERT_BOOL ("tag_seen_flag", tag_seen);
+  MUSCLE_INSERT_BOOL ("token_table_flag", token_table_flag);
+  MUSCLE_INSERT_BOOL ("use_push_for_pull_flag", use_push_for_pull_flag);
+  MUSCLE_INSERT_BOOL ("yacc_flag", yacc_flag);
 
   /* File names.  */
-  MUSCLE_INSERT_STRING ("prefix", spec_name_prefix ? spec_name_prefix : "yy");
+  if (spec_name_prefix)
+    MUSCLE_INSERT_STRING ("prefix", spec_name_prefix);
+
+  MUSCLE_INSERT_STRING ("file_name_all_but_ext", all_but_ext);
+
 #define DEFINE(Name) MUSCLE_INSERT_STRING (#Name, Name ? Name : "")
   DEFINE (dir_prefix);
   DEFINE (parser_file_name);
@@ -603,26 +655,18 @@
   DEFINE (spec_verbose_file);
 #undef DEFINE
 
-  /* User Code.  */
-  obstack_1grow (&pre_prologue_obstack, 0);
-  obstack_1grow (&post_prologue_obstack, 0);
-  muscle_insert ("pre_prologue", obstack_finish (&pre_prologue_obstack));
-  muscle_insert ("post_prologue", obstack_finish (&post_prologue_obstack));
-
-  /* Find the right skeleton file.  */
-  if (!skeleton)
-    {
-      if (glr_parser || nondeterministic_parser)
-	skeleton = "glr.c";
-      else
-	skeleton = "yacc.c";
-    }
-
-  /* About the skeletons. */
-  {
-    char const *pkgdatadir = getenv ("BISON_PKGDATADIR");
-    MUSCLE_INSERT_STRING ("pkgdatadir", pkgdatadir ? pkgdatadir : PKGDATADIR);
+  /* Find the right skeleton file, and add muscles about the skeletons.  */
+  if (skeleton)
     MUSCLE_INSERT_C_STRING ("skeleton", skeleton);
+  else
+    skeleton = language->skeleton;
+
+  /* About the skeletons.  */
+  {
+    /* b4_pkgdatadir is used inside m4_include in the skeletons, so digraphs
+       would never be expanded.  Hopefully no one has M4-special characters in
+       his Bison installation path.  */
+    MUSCLE_INSERT_STRING_RAW ("pkgdatadir", compute_pkgdatadir ());
   }
 }
 
@@ -647,6 +691,11 @@
   output_skeleton ();
 
   obstack_free (&format_obstack, NULL);
-  obstack_free (&pre_prologue_obstack, NULL);
-  obstack_free (&post_prologue_obstack, NULL);
+}
+
+char const *
+compute_pkgdatadir (void)
+{
+  char const *pkgdatadir = getenv ("BISON_PKGDATADIR");
+  return pkgdatadir ? pkgdatadir : PKGDATADIR;
 }
diff --git a/src/output.h b/src/output.h
index 784f227..6c428d5 100644
--- a/src/output.h
+++ b/src/output.h
@@ -1,27 +1,28 @@
 /* Output the generated parsing program for bison,
-   Copyright (C) 2000, 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
+
+   Copyright (C) 2000-2003, 2006-2007, 2009-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef OUTPUT_H_
 # define OUTPUT_H_
 
 /* Output the parsing tables and the parser code to FTABLE.  */
 void output (void);
+char const *compute_pkgdatadir (void);
 
 #endif /* !OUTPUT_H_ */
diff --git a/src/parse-gram.c b/src/parse-gram.c
index 2b77f3e..5633b4e 100644
--- a/src/parse-gram.c
+++ b/src/parse-gram.c
@@ -1,24 +1,21 @@
-/* A Bison parser, made by GNU Bison 2.2a.  */
+/* A Bison parser, made by GNU Bison 2.6.5.63-3ada.  */
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
+/* Bison implementation for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2012 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.
-
+   the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -29,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -47,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.2a"
+#define YYBISON_VERSION "2.6.5.63-3ada"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -55,143 +52,37 @@
 /* Pure parsers.  */
 #define YYPURE 1
 
-/* Using locations.  */
-#define YYLSP_NEEDED 1
+/* Push parsers.  */
+#define YYPUSH 0
 
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Substitute the type names.  */
+#define YYSTYPE         GRAM_STYPE
+#define YYLTYPE         GRAM_LTYPE
 /* Substitute the variable and function names.  */
-#define yyparse gram_parse
-#define yylex   gram_lex
-#define yyerror gram_error
-#define yylval  gram_lval
-#define yychar  gram_char
-#define yydebug gram_debug
-#define yynerrs gram_nerrs
-#define yylloc gram_lloc
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     GRAM_EOF = 0,
-     STRING = 258,
-     INT = 259,
-     PERCENT_TOKEN = 260,
-     PERCENT_NTERM = 261,
-     PERCENT_TYPE = 262,
-     PERCENT_DESTRUCTOR = 263,
-     PERCENT_PRINTER = 264,
-     PERCENT_UNION = 265,
-     PERCENT_LEFT = 266,
-     PERCENT_RIGHT = 267,
-     PERCENT_NONASSOC = 268,
-     PERCENT_PREC = 269,
-     PERCENT_DPREC = 270,
-     PERCENT_MERGE = 271,
-     PERCENT_DEBUG = 272,
-     PERCENT_DEFAULT_PREC = 273,
-     PERCENT_DEFINE = 274,
-     PERCENT_DEFINES = 275,
-     PERCENT_ERROR_VERBOSE = 276,
-     PERCENT_EXPECT = 277,
-     PERCENT_EXPECT_RR = 278,
-     PERCENT_FILE_PREFIX = 279,
-     PERCENT_GLR_PARSER = 280,
-     PERCENT_INITIAL_ACTION = 281,
-     PERCENT_LEX_PARAM = 282,
-     PERCENT_LOCATIONS = 283,
-     PERCENT_NAME_PREFIX = 284,
-     PERCENT_NO_DEFAULT_PREC = 285,
-     PERCENT_NO_LINES = 286,
-     PERCENT_NONDETERMINISTIC_PARSER = 287,
-     PERCENT_OUTPUT = 288,
-     PERCENT_PARSE_PARAM = 289,
-     PERCENT_PURE_PARSER = 290,
-     PERCENT_REQUIRE = 291,
-     PERCENT_SKELETON = 292,
-     PERCENT_START = 293,
-     PERCENT_TOKEN_TABLE = 294,
-     PERCENT_VERBOSE = 295,
-     PERCENT_YACC = 296,
-     TYPE = 297,
-     EQUAL = 298,
-     SEMICOLON = 299,
-     PIPE = 300,
-     ID = 301,
-     ID_COLON = 302,
-     PERCENT_PERCENT = 303,
-     PROLOGUE = 304,
-     EPILOGUE = 305,
-     BRACED_CODE = 306
-   };
-#endif
-/* Tokens.  */
-#define GRAM_EOF 0
-#define STRING 258
-#define INT 259
-#define PERCENT_TOKEN 260
-#define PERCENT_NTERM 261
-#define PERCENT_TYPE 262
-#define PERCENT_DESTRUCTOR 263
-#define PERCENT_PRINTER 264
-#define PERCENT_UNION 265
-#define PERCENT_LEFT 266
-#define PERCENT_RIGHT 267
-#define PERCENT_NONASSOC 268
-#define PERCENT_PREC 269
-#define PERCENT_DPREC 270
-#define PERCENT_MERGE 271
-#define PERCENT_DEBUG 272
-#define PERCENT_DEFAULT_PREC 273
-#define PERCENT_DEFINE 274
-#define PERCENT_DEFINES 275
-#define PERCENT_ERROR_VERBOSE 276
-#define PERCENT_EXPECT 277
-#define PERCENT_EXPECT_RR 278
-#define PERCENT_FILE_PREFIX 279
-#define PERCENT_GLR_PARSER 280
-#define PERCENT_INITIAL_ACTION 281
-#define PERCENT_LEX_PARAM 282
-#define PERCENT_LOCATIONS 283
-#define PERCENT_NAME_PREFIX 284
-#define PERCENT_NO_DEFAULT_PREC 285
-#define PERCENT_NO_LINES 286
-#define PERCENT_NONDETERMINISTIC_PARSER 287
-#define PERCENT_OUTPUT 288
-#define PERCENT_PARSE_PARAM 289
-#define PERCENT_PURE_PARSER 290
-#define PERCENT_REQUIRE 291
-#define PERCENT_SKELETON 292
-#define PERCENT_START 293
-#define PERCENT_TOKEN_TABLE 294
-#define PERCENT_VERBOSE 295
-#define PERCENT_YACC 296
-#define TYPE 297
-#define EQUAL 298
-#define SEMICOLON 299
-#define PIPE 300
-#define ID 301
-#define ID_COLON 302
-#define PERCENT_PERCENT 303
-#define PROLOGUE 304
-#define EPILOGUE 305
-#define BRACED_CODE 306
-
-
-
+#define yyparse         gram_parse
+#define yylex           gram_lex
+#define yyerror         gram_error
+#define yylval          gram_lval
+#define yychar          gram_char
+#define yydebug         gram_debug
+#define yynerrs         gram_nerrs
+#define yylloc          gram_lloc
 
 /* Copy the first part of user declarations.  */
+/* Line 360 of yacc.c  */
 #line 1 "parse-gram.y"
 /* Bison Grammar Parser                             -*- C -*-
 
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -200,24 +91,25 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301  USA
-*/
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
+#include "c-ctype.h"
 #include "complain.h"
 #include "conflicts.h"
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
-#include "muscle_tab.h"
+#include "muscle-tab.h"
+#include "named-ref.h"
 #include "quotearg.h"
 #include "reader.h"
 #include "symlist.h"
-#include "strverscmp.h"
+#include "scan-gram.h"
+#include "scan-code.h"
+#include "xmemdup0.h"
 
 #define YYLLOC_DEFAULT(Current, Rhs, N)  (Current) = lloc_default (Rhs, N)
 static YYLTYPE lloc_default (YYLTYPE const *, int);
@@ -234,32 +126,58 @@
 	gram_error (&yylloc, Msg)
 static void gram_error (location const *, char const *);
 
-static void add_param (char const *, char *, location);
+static char const *char_name (char);
+
+/** Add a lex-param or a parse-param.
+ *
+ * \param type  \a lex_param or \a parse_param
+ * \param decl  the formal argument
+ * \param loc   the location in the source.
+ */
+static void add_param (char const *type, char *decl, location loc);
+
 
 static symbol_class current_class = unknown_sym;
-static uniqstr current_type = 0;
-static symbol *current_lhs;
+static uniqstr current_type = NULL;
+static symbol *current_lhs_symbol;
 static location current_lhs_location;
+static named_ref *current_lhs_named_ref;
 static int current_prec = 0;
 
-#ifdef UINT_FAST8_MAX
-# define YYTYPE_UINT8 uint_fast8_t
-#endif
-#ifdef INT_FAST8_MAX
-# define YYTYPE_INT8 int_fast8_t
-#endif
-#ifdef UINT_FAST16_MAX
-# define YYTYPE_UINT16 uint_fast16_t
-#endif
-#ifdef INT_FAST16_MAX
-# define YYTYPE_INT16 int_fast16_t
-#endif
+/** Set the new current left-hand side symbol, possibly common
+ * to several right-hand side parts of rule.
+ */
+static
+void
+current_lhs(symbol *sym, location loc, named_ref *ref)
+{
+  current_lhs_symbol = sym;
+  current_lhs_location = loc;
+  /* In order to simplify memory management, named references for lhs
+     are always assigned by deep copy into the current symbol_list
+     node.  This is because a single named-ref in the grammar may
+     result in several uses when the user factors lhs between several
+     rules using "|".  Therefore free the parser's original copy.  */
+  free (current_lhs_named_ref);
+  current_lhs_named_ref = ref;
+}
 
 
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
+#define YYTYPE_INT16 int_fast16_t
+#define YYTYPE_INT8 int_fast8_t
+#define YYTYPE_UINT16 uint_fast16_t
+#define YYTYPE_UINT8 uint_fast8_t
+
+/* Line 360 of yacc.c  */
+#line 173 "parse-gram.c"
+
+# ifndef YY_NULL
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULL nullptr
+#  else
+#   define YY_NULL 0
+#  endif
+# endif
 
 /* Enabling verbose error messages.  */
 #ifdef YYERROR_VERBOSE
@@ -269,49 +187,209 @@
 # define YYERROR_VERBOSE 1
 #endif
 
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+/* In a future release of Bison, this section will be replaced
+   by #include "parse-gram.h".  */
+#ifndef YY_GRAM_Y_TAB_H_INCLUDED
+# define YY_GRAM_Y_TAB_H_INCLUDED
+/* Enabling traces.  */
+#ifndef GRAM_DEBUG
+# if defined YYDEBUG
+#  if YYDEBUG
+#   define GRAM_DEBUG 1
+#  else
+#   define GRAM_DEBUG 0
+#  endif
+# else /* ! defined YYDEBUG */
+#  define GRAM_DEBUG 1
+# endif /* ! defined YYDEBUG */
+#endif  /* ! defined GRAM_DEBUG */
+#if GRAM_DEBUG
+extern int gram_debug;
 #endif
 
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 94 "parse-gram.y"
+/* Tokens.  */
+#ifndef GRAM_TOKENTYPE
+# define GRAM_TOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum gram_tokentype {
+     GRAM_EOF = 0,
+     STRING = 258,
+     INT = 259,
+     PERCENT_TOKEN = 260,
+     PERCENT_NTERM = 261,
+     PERCENT_TYPE = 262,
+     PERCENT_DESTRUCTOR = 263,
+     PERCENT_PRINTER = 264,
+     PERCENT_LEFT = 265,
+     PERCENT_RIGHT = 266,
+     PERCENT_NONASSOC = 267,
+     PERCENT_PREC = 268,
+     PERCENT_DPREC = 269,
+     PERCENT_MERGE = 270,
+     PERCENT_CODE = 271,
+     PERCENT_DEBUG = 272,
+     PERCENT_DEFAULT_PREC = 273,
+     PERCENT_DEFINE = 274,
+     PERCENT_DEFINES = 275,
+     PERCENT_ERROR_VERBOSE = 276,
+     PERCENT_EXPECT = 277,
+     PERCENT_EXPECT_RR = 278,
+     PERCENT_FILE_PREFIX = 279,
+     PERCENT_GLR_PARSER = 280,
+     PERCENT_INITIAL_ACTION = 281,
+     PERCENT_LANGUAGE = 282,
+     PERCENT_LEX_PARAM = 283,
+     PERCENT_LOCATIONS = 284,
+     PERCENT_NAME_PREFIX = 285,
+     PERCENT_NO_DEFAULT_PREC = 286,
+     PERCENT_NO_LINES = 287,
+     PERCENT_NONDETERMINISTIC_PARSER = 288,
+     PERCENT_OUTPUT = 289,
+     PERCENT_PARSE_PARAM = 290,
+     PERCENT_PURE_PARSER = 291,
+     PERCENT_REQUIRE = 292,
+     PERCENT_SKELETON = 293,
+     PERCENT_START = 294,
+     PERCENT_TOKEN_TABLE = 295,
+     PERCENT_VERBOSE = 296,
+     PERCENT_YACC = 297,
+     BRACED_CODE = 298,
+     BRACKETED_ID = 299,
+     CHAR = 300,
+     EPILOGUE = 301,
+     EQUAL = 302,
+     ID = 303,
+     ID_COLON = 304,
+     PERCENT_PERCENT = 305,
+     PIPE = 306,
+     PROLOGUE = 307,
+     SEMICOLON = 308,
+     TYPE = 309,
+     TYPE_TAG_ANY = 310,
+     TYPE_TAG_NONE = 311,
+     PERCENT_UNION = 312
+   };
+#endif
+/* Tokens.  */
+#define GRAM_EOF 0
+#define STRING 258
+#define INT 259
+#define PERCENT_TOKEN 260
+#define PERCENT_NTERM 261
+#define PERCENT_TYPE 262
+#define PERCENT_DESTRUCTOR 263
+#define PERCENT_PRINTER 264
+#define PERCENT_LEFT 265
+#define PERCENT_RIGHT 266
+#define PERCENT_NONASSOC 267
+#define PERCENT_PREC 268
+#define PERCENT_DPREC 269
+#define PERCENT_MERGE 270
+#define PERCENT_CODE 271
+#define PERCENT_DEBUG 272
+#define PERCENT_DEFAULT_PREC 273
+#define PERCENT_DEFINE 274
+#define PERCENT_DEFINES 275
+#define PERCENT_ERROR_VERBOSE 276
+#define PERCENT_EXPECT 277
+#define PERCENT_EXPECT_RR 278
+#define PERCENT_FILE_PREFIX 279
+#define PERCENT_GLR_PARSER 280
+#define PERCENT_INITIAL_ACTION 281
+#define PERCENT_LANGUAGE 282
+#define PERCENT_LEX_PARAM 283
+#define PERCENT_LOCATIONS 284
+#define PERCENT_NAME_PREFIX 285
+#define PERCENT_NO_DEFAULT_PREC 286
+#define PERCENT_NO_LINES 287
+#define PERCENT_NONDETERMINISTIC_PARSER 288
+#define PERCENT_OUTPUT 289
+#define PERCENT_PARSE_PARAM 290
+#define PERCENT_PURE_PARSER 291
+#define PERCENT_REQUIRE 292
+#define PERCENT_SKELETON 293
+#define PERCENT_START 294
+#define PERCENT_TOKEN_TABLE 295
+#define PERCENT_VERBOSE 296
+#define PERCENT_YACC 297
+#define BRACED_CODE 298
+#define BRACKETED_ID 299
+#define CHAR 300
+#define EPILOGUE 301
+#define EQUAL 302
+#define ID 303
+#define ID_COLON 304
+#define PERCENT_PERCENT 305
+#define PIPE 306
+#define PROLOGUE 307
+#define SEMICOLON 308
+#define TYPE 309
+#define TYPE_TAG_ANY 310
+#define TYPE_TAG_NONE 311
+#define PERCENT_UNION 312
+
+
+
+#if ! defined GRAM_STYPE && ! defined GRAM_STYPE_IS_DECLARED
+typedef union GRAM_STYPE
 {
+/* Line 376 of yacc.c  */
+#line 115 "parse-gram.y"
+
   symbol *symbol;
   symbol_list *list;
   int integer;
-  char *chars;
+  char const *chars;
+  char *code;
   assoc assoc;
   uniqstr uniqstr;
-}
-/* Line 193 of yacc.c.  */
-#line 290 "parse-gram.c"
-	YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
+  unsigned char character;
+  named_ref *named_ref;
+
+
+/* Line 376 of yacc.c  */
+#line 353 "parse-gram.c"
+} GRAM_STYPE;
+# define GRAM_STYPE_IS_TRIVIAL 1
+# define gram_stype GRAM_STYPE /* obsolescent; will be withdrawn */
+# define GRAM_STYPE_IS_DECLARED 1
 #endif
 
-#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE
+#if ! defined GRAM_LTYPE && ! defined GRAM_LTYPE_IS_DECLARED
+typedef struct GRAM_LTYPE
 {
   int first_line;
   int first_column;
   int last_line;
   int last_column;
-} YYLTYPE;
-# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
-# define YYLTYPE_IS_DECLARED 1
-# define YYLTYPE_IS_TRIVIAL 1
+} GRAM_LTYPE;
+# define gram_ltype GRAM_LTYPE /* obsolescent; will be withdrawn */
+# define GRAM_LTYPE_IS_DECLARED 1
+# define GRAM_LTYPE_IS_TRIVIAL 1
 #endif
 
 
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int gram_parse (void *YYPARSE_PARAM);
+#else
+int gram_parse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int gram_parse (void);
+#else
+int gram_parse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_GRAM_Y_TAB_H_INCLUDED  */
+
 /* Copy the second part of user declarations.  */
 
-
-/* Line 216 of yacc.c.  */
-#line 315 "parse-gram.c"
+/* Line 379 of yacc.c  */
+#line 393 "parse-gram.c"
 
 #ifdef short
 # undef short
@@ -361,70 +439,46 @@
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
 #  endif
 # endif
 # ifndef YY_
-#  define YY_(msgid) msgid
+#  define YY_(Msgid) Msgid
 # endif
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
 #else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
 #endif
 
 /* Identity function, used to suppress warnings about constant conditions.  */
 #ifndef lint
-# define YYID(n) (n)
+# define YYID(N) (N)
 #else
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static int
-YYID (int i)
+YYID (int yyi)
 #else
 static int
-YYID (i)
-    int i;
+YYID (yyi)
+    int yyi;
 #endif
 {
-  return i;
+  return yyi;
 }
 #endif
 
-#if ! defined yyoverflow || YYERROR_VERBOSE
+#if 1
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
 
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
 # ifdef YYSTACK_ALLOC
    /* Pacify GCC's `empty if-body' warning.  */
 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
@@ -441,43 +495,44 @@
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
 	     && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 # endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+# define YYCOPY_NEEDED 1
+#endif
 
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
-	     && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+	 || (defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL \
+	     && defined GRAM_STYPE_IS_TRIVIAL && GRAM_STYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss;
-  YYSTYPE yyvs;
-    YYLTYPE yyls;
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+  YYLTYPE yyls_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
@@ -489,35 +544,19 @@
      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
       + 2 * YYSTACK_GAP_MAXIMUM)
 
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
+# define YYCOPY_NEEDED 1
 
 /* Relocate STACK from its old location to the new one.  The
    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
     do									\
       {									\
 	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack, Stack, yysize);				\
-	Stack = &yyptr->Stack;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
 	yyptr += yynewbytes / sizeof (*yyptr);				\
       }									\
@@ -525,23 +564,43 @@
 
 #endif
 
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(Dst, Src, Count) \
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+#  else
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYSIZE_T yyi;                         \
+          for (yyi = 0; yyi < (Count); yyi++)   \
+            (Dst)[yyi] = (Src)[yyi];            \
+        }                                       \
+      while (YYID (0))
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   161
+#define YYLAST   160
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  52
+#define YYNTOKENS  58
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  26
+#define YYNNTS  34
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  82
+#define YYNRULES  108
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  111
+#define YYNSTATES  148
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   306
+#define YYMAXUTOK   312
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -579,90 +638,105 @@
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57
 };
 
-#if YYDEBUG
+#if GRAM_DEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
-static const yytype_uint8 yyprhs[] =
+static const yytype_uint16 yyprhs[] =
 {
-       0,     0,     3,     8,     9,    12,    14,    16,    18,    21,
-      25,    27,    29,    32,    35,    39,    41,    43,    45,    47,
-      51,    53,    55,    59,    61,    63,    66,    69,    71,    73,
-      75,    77,    79,    81,    84,    86,    89,    92,    94,    96,
-      97,   101,   102,   106,   110,   114,   116,   118,   120,   121,
-     123,   125,   128,   130,   132,   135,   138,   142,   144,   147,
-     149,   152,   154,   157,   160,   161,   165,   167,   171,   174,
-     175,   178,   181,   185,   189,   193,   195,   197,   198,   201,
-     203,   205,   206
+       0,     0,     3,     8,     9,    12,    14,    16,    18,    22,
+      24,    27,    29,    32,    35,    38,    42,    44,    47,    50,
+      53,    55,    58,    62,    64,    66,    69,    73,    76,    78,
+      81,    84,    86,    88,    90,    92,    94,    96,    99,   103,
+     107,   109,   111,   114,   118,   119,   121,   125,   126,   130,
+     131,   135,   139,   143,   145,   147,   149,   150,   152,   154,
+     157,   159,   162,   164,   167,   169,   172,   174,   176,   178,
+     180,   182,   184,   187,   190,   194,   196,   199,   201,   204,
+     206,   209,   212,   213,   218,   220,   224,   227,   228,   232,
+     236,   240,   244,   248,   249,   251,   253,   255,   256,   258,
+     260,   262,   264,   266,   268,   270,   272,   274,   275
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      53,     0,    -1,    54,    48,    66,    77,    -1,    -1,    54,
-      55,    -1,    56,    -1,    49,    -1,    17,    -1,    19,    76,
-      -1,    19,    76,    76,    -1,    20,    -1,    21,    -1,    22,
-       4,    -1,    23,     4,    -1,    24,    43,    76,    -1,    25,
-      -1,    26,    -1,    27,    -1,    28,    -1,    29,    43,    76,
-      -1,    31,    -1,    32,    -1,    33,    43,    76,    -1,    34,
-      -1,    35,    -1,    36,    76,    -1,    37,    76,    -1,    39,
-      -1,    40,    -1,    41,    -1,    44,    -1,    60,    -1,    57,
-      -1,    38,    72,    -1,    10,    -1,     8,    63,    -1,     9,
-      63,    -1,    18,    -1,    30,    -1,    -1,     6,    58,    65,
-      -1,    -1,     5,    59,    65,    -1,     7,    42,    63,    -1,
-      61,    62,    63,    -1,    11,    -1,    12,    -1,    13,    -1,
-      -1,    42,    -1,    72,    -1,    63,    72,    -1,    42,    -1,
-      46,    -1,    46,     4,    -1,    46,    75,    -1,    46,     4,
-      75,    -1,    64,    -1,    65,    64,    -1,    67,    -1,    66,
-      67,    -1,    68,    -1,    56,    44,    -1,     1,    44,    -1,
-      -1,    47,    69,    70,    -1,    71,    -1,    70,    45,    71,
-      -1,    70,    44,    -1,    -1,    71,    72,    -1,    71,    73,
-      -1,    71,    14,    72,    -1,    71,    15,     4,    -1,    71,
-      16,    42,    -1,    46,    -1,    75,    -1,    -1,    74,    51,
-      -1,     3,    -1,     3,    -1,    -1,    48,    50,    -1
+      59,     0,    -1,    60,    50,    77,    91,    -1,    -1,    60,
+      61,    -1,    62,    -1,    52,    -1,    17,    -1,    19,    84,
+      85,    -1,    20,    -1,    20,     3,    -1,    21,    -1,    22,
+       4,    -1,    23,     4,    -1,    24,     3,    -1,    24,    47,
+       3,    -1,    25,    -1,    26,    43,    -1,    27,     3,    -1,
+      28,    43,    -1,    29,    -1,    30,     3,    -1,    30,    47,
+       3,    -1,    32,    -1,    33,    -1,    34,     3,    -1,    34,
+      47,     3,    -1,    35,    43,    -1,    36,    -1,    37,     3,
+      -1,    38,     3,    -1,    40,    -1,    41,    -1,    42,    -1,
+      53,    -1,    67,    -1,    64,    -1,    39,    89,    -1,     8,
+      43,    73,    -1,     9,    43,    73,    -1,    18,    -1,    31,
+      -1,    16,    86,    -1,    16,    48,    86,    -1,    -1,    48,
+      -1,    57,    63,    86,    -1,    -1,     6,    65,    76,    -1,
+      -1,     5,    66,    76,    -1,     7,    54,    72,    -1,    68,
+      69,    70,    -1,    10,    -1,    11,    -1,    12,    -1,    -1,
+      54,    -1,    71,    -1,    70,    71,    -1,    89,    -1,    89,
+       4,    -1,    89,    -1,    72,    89,    -1,    74,    -1,    73,
+      74,    -1,    89,    -1,    54,    -1,    55,    -1,    56,    -1,
+      54,    -1,    87,    -1,    87,     4,    -1,    87,    90,    -1,
+      87,     4,    90,    -1,    75,    -1,    76,    75,    -1,    78,
+      -1,    77,    78,    -1,    79,    -1,    62,    53,    -1,     1,
+      53,    -1,    -1,    88,    83,    80,    81,    -1,    82,    -1,
+      81,    51,    82,    -1,    81,    53,    -1,    -1,    82,    89,
+      83,    -1,    82,    43,    83,    -1,    82,    13,    89,    -1,
+      82,    14,     4,    -1,    82,    15,    54,    -1,    -1,    44,
+      -1,    48,    -1,     3,    -1,    -1,    48,    -1,     3,    -1,
+      43,    -1,    48,    -1,    45,    -1,    49,    -1,    87,    -1,
+      90,    -1,     3,    -1,    -1,    50,    46,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   202,   202,   210,   212,   216,   217,   218,   219,   224,
-     225,   226,   227,   228,   229,   230,   235,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   256,   257,   258,   262,   278,   285,   292,   296,   303,
-     303,   308,   308,   313,   323,   338,   339,   340,   344,   345,
-     351,   352,   357,   361,   366,   372,   378,   389,   390,   399,
-     400,   406,   407,   408,   415,   415,   419,   420,   421,   426,
-     427,   429,   430,   432,   434,   439,   440,   456,   456,   462,
-     471,   476,   478
+       0,   230,   230,   238,   240,   244,   245,   255,   256,   261,
+     262,   267,   268,   269,   270,   271,   272,   277,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   311,
+     312,   336,   337,   338,   339,   343,   344,   345,   349,   361,
+     373,   377,   381,   388,   403,   404,   408,   420,   420,   425,
+     425,   430,   441,   456,   457,   458,   462,   463,   468,   470,
+     475,   476,   481,   483,   488,   489,   493,   494,   495,   496,
+     501,   506,   511,   517,   523,   534,   535,   544,   545,   551,
+     552,   553,   560,   560,   568,   569,   570,   575,   577,   579,
+     581,   583,   585,   590,   592,   603,   604,   609,   610,   611,
+     620,   640,   642,   651,   656,   657,   662,   669,   671
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if GRAM_DEBUG || YYERROR_VERBOSE || 1
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
   "\"end of file\"", "error", "$undefined", "\"string\"", "\"integer\"",
-  "\"%token\"", "\"%nterm\"", "\"%type\"", "\"%destructor {...}\"",
-  "\"%printer {...}\"", "\"%union {...}\"", "\"%left\"", "\"%right\"",
-  "\"%nonassoc\"", "\"%prec\"", "\"%dprec\"", "\"%merge\"", "\"%debug\"",
+  "\"%token\"", "\"%nterm\"", "\"%type\"", "\"%destructor\"",
+  "\"%printer\"", "\"%left\"", "\"%right\"", "\"%nonassoc\"", "\"%prec\"",
+  "\"%dprec\"", "\"%merge\"", "\"%code\"", "\"%debug\"",
   "\"%default-prec\"", "\"%define\"", "\"%defines\"", "\"%error-verbose\"",
   "\"%expect\"", "\"%expect-rr\"", "\"%file-prefix\"", "\"%glr-parser\"",
-  "\"%initial-action {...}\"", "\"%lex-param {...}\"", "\"%locations\"",
-  "\"%name-prefix\"", "\"%no-default-prec\"", "\"%no-lines\"",
-  "\"%nondeterministic-parser\"", "\"%output\"", "\"%parse-param {...}\"",
-  "\"%pure-parser\"", "\"%require\"", "\"%skeleton\"", "\"%start\"",
-  "\"%token-table\"", "\"%verbose\"", "\"%yacc\"", "\"type\"", "\"=\"",
-  "\";\"", "\"|\"", "\"identifier\"", "\"identifier:\"", "\"%%\"",
-  "\"%{...%}\"", "\"epilogue\"", "\"{...}\"", "$accept", "input",
-  "declarations", "declaration", "grammar_declaration",
-  "symbol_declaration", "@1", "@2", "precedence_declaration",
-  "precedence_declarator", "type.opt", "symbols.1", "symbol_def",
-  "symbol_defs.1", "grammar", "rules_or_grammar_declaration", "rules",
-  "@3", "rhses.1", "rhs", "symbol", "action", "@4", "string_as_id",
-  "string_content", "epilogue.opt", 0
+  "\"%initial-action\"", "\"%language\"", "\"%lex-param\"",
+  "\"%locations\"", "\"%name-prefix\"", "\"%no-default-prec\"",
+  "\"%no-lines\"", "\"%nondeterministic-parser\"", "\"%output\"",
+  "\"%parse-param\"", "\"%pure-parser\"", "\"%require\"", "\"%skeleton\"",
+  "\"%start\"", "\"%token-table\"", "\"%verbose\"", "\"%yacc\"",
+  "\"{...}\"", "\"[identifier]\"", "\"char\"", "\"epilogue\"", "\"=\"",
+  "\"identifier\"", "\"identifier:\"", "\"%%\"", "\"|\"", "\"%{...%}\"",
+  "\";\"", "\"type\"", "\"<*>\"", "\"<>\"", "\"%union\"", "$accept",
+  "input", "prologue_declarations", "prologue_declaration",
+  "grammar_declaration", "union_name", "symbol_declaration", "$@1", "$@2",
+  "precedence_declaration", "precedence_declarator", "type.opt",
+  "symbols.prec", "symbol.prec", "symbols.1", "generic_symlist",
+  "generic_symlist_item", "symbol_def", "symbol_defs.1", "grammar",
+  "rules_or_grammar_declaration", "rules", "$@3", "rhses.1", "rhs",
+  "named_ref.opt", "variable", "content.opt", "braceless", "id",
+  "id_colon", "symbol", "string_as_id", "epilogue.opt", YY_NULL
 };
 #endif
 
@@ -676,155 +750,175 @@
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306
+     305,   306,   307,   308,   309,   310,   311,   312
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    52,    53,    54,    54,    55,    55,    55,    55,    55,
-      55,    55,    55,    55,    55,    55,    55,    55,    55,    55,
-      55,    55,    55,    55,    55,    55,    55,    55,    55,    55,
-      55,    56,    56,    56,    56,    56,    56,    56,    56,    58,
-      57,    59,    57,    57,    60,    61,    61,    61,    62,    62,
-      63,    63,    64,    64,    64,    64,    64,    65,    65,    66,
-      66,    67,    67,    67,    69,    68,    70,    70,    70,    71,
-      71,    71,    71,    71,    71,    72,    72,    74,    73,    75,
-      76,    77,    77
+       0,    58,    59,    60,    60,    61,    61,    61,    61,    61,
+      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
+      61,    61,    61,    61,    61,    61,    61,    61,    61,    61,
+      61,    61,    61,    61,    61,    62,    62,    62,    62,    62,
+      62,    62,    62,    62,    63,    63,    62,    65,    64,    66,
+      64,    64,    67,    68,    68,    68,    69,    69,    70,    70,
+      71,    71,    72,    72,    73,    73,    74,    74,    74,    74,
+      75,    75,    75,    75,    75,    76,    76,    77,    77,    78,
+      78,    78,    80,    79,    81,    81,    81,    82,    82,    82,
+      82,    82,    82,    83,    83,    84,    84,    85,    85,    85,
+      86,    87,    87,    88,    89,    89,    90,    91,    91
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     4,     0,     2,     1,     1,     1,     2,     3,
-       1,     1,     2,     2,     3,     1,     1,     1,     1,     3,
-       1,     1,     3,     1,     1,     2,     2,     1,     1,     1,
-       1,     1,     1,     2,     1,     2,     2,     1,     1,     0,
-       3,     0,     3,     3,     3,     1,     1,     1,     0,     1,
-       1,     2,     1,     1,     2,     2,     3,     1,     2,     1,
-       2,     1,     2,     2,     0,     3,     1,     3,     2,     0,
-       2,     2,     3,     3,     3,     1,     1,     0,     2,     1,
-       1,     0,     2
+       0,     2,     4,     0,     2,     1,     1,     1,     3,     1,
+       2,     1,     2,     2,     2,     3,     1,     2,     2,     2,
+       1,     2,     3,     1,     1,     2,     3,     2,     1,     2,
+       2,     1,     1,     1,     1,     1,     1,     2,     3,     3,
+       1,     1,     2,     3,     0,     1,     3,     0,     3,     0,
+       3,     3,     3,     1,     1,     1,     0,     1,     1,     2,
+       1,     2,     1,     2,     1,     2,     1,     1,     1,     1,
+       1,     1,     2,     2,     3,     1,     2,     1,     2,     1,
+       2,     2,     0,     4,     1,     3,     2,     0,     3,     3,
+       3,     3,     3,     0,     1,     1,     1,     0,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     0,     2
 };
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       3,     0,     0,     1,    41,    39,     0,     0,     0,    34,
-      45,    46,    47,     7,    37,     0,    10,    11,     0,     0,
-       0,    15,    16,    17,    18,     0,    38,    20,    21,     0,
-      23,    24,     0,     0,     0,    27,    28,    29,    30,     0,
-       6,     4,     5,    32,    31,    48,     0,     0,     0,    79,
-      75,    35,    50,    76,    36,    80,     8,    12,    13,     0,
-       0,     0,    25,    26,    33,     0,    64,     0,     0,    59,
-      61,    49,     0,    52,    53,    57,    42,    40,    43,    51,
-       9,    14,    19,    22,    63,    69,    62,     0,    60,     2,
-      44,    54,    55,    58,    65,    66,    82,    56,    68,    69,
-       0,     0,     0,    70,    71,     0,    67,    72,    73,    74,
-      78
+       3,     0,     0,     1,    49,    47,     0,     0,     0,    53,
+      54,    55,     0,     7,    40,     0,     9,    11,     0,     0,
+       0,    16,     0,     0,     0,    20,     0,    41,    23,    24,
+       0,     0,    28,     0,     0,     0,    31,    32,    33,     0,
+       6,    34,    44,     4,     5,    36,    35,    56,     0,     0,
+       0,     0,     0,   100,     0,    42,    96,    95,    97,    10,
+      12,    13,    14,     0,    17,    18,    19,    21,     0,    25,
+       0,    27,    29,    30,   106,   102,   101,   104,    37,   105,
+       0,   103,     0,     0,    77,    79,    93,    45,     0,    57,
+       0,    70,    75,    50,    71,    48,    51,    62,    67,    68,
+      69,    38,    64,    66,    39,    43,    99,    98,     8,    15,
+      22,    26,    81,    80,     0,    78,     2,    94,    82,    46,
+      52,    58,    60,    76,    72,    73,    63,    65,   108,    87,
+      59,    61,    74,    83,    84,    87,    86,     0,     0,     0,
+      93,    93,    85,    90,    91,    92,    89,    88
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int8 yydefgoto[] =
+static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     2,    41,    67,    43,    47,    46,    44,    45,
-      72,    51,    75,    76,    68,    69,    70,    85,    94,    95,
-      52,   104,   105,    53,    56,    89
+      -1,     1,     2,    43,    82,    88,    45,    49,    48,    46,
+      47,    90,   120,   121,    96,   101,   102,    92,    93,    83,
+      84,    85,   129,   133,   134,   118,    58,   108,    55,    77,
+      86,   103,    79,   116
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -69
-static const yytype_int8 yypact[] =
+#define YYPACT_NINF -91
+static const yytype_int16 yypact[] =
 {
-     -69,     5,   112,   -69,   -69,   -69,   -35,     0,     0,   -69,
-     -69,   -69,   -69,   -69,   -69,    13,   -69,   -69,    20,    31,
-     -18,   -69,   -69,   -69,   -69,    -6,   -69,   -69,   -69,    -5,
-     -69,   -69,    13,    13,     0,   -69,   -69,   -69,   -69,    69,
-     -69,   -69,   -69,   -69,   -69,    -2,   -38,   -38,     0,   -69,
-     -69,     0,   -69,   -69,     0,   -69,    13,   -69,   -69,    13,
-      13,    13,   -69,   -69,   -69,    -8,   -69,     3,    21,   -69,
-     -69,   -69,     0,   -69,     6,   -69,   -38,   -38,     0,   -69,
-     -69,   -69,   -69,   -69,   -69,   -69,   -69,     2,   -69,   -69,
-       0,    39,   -69,   -69,   -33,    -1,   -69,   -69,   -69,   -69,
-       0,    44,     1,   -69,   -69,     4,    -1,   -69,   -69,   -69,
-     -69
+     -91,     3,   103,   -91,   -91,   -91,   -36,     2,    10,   -91,
+     -91,   -91,     9,   -91,   -91,    32,    60,   -91,    65,    67,
+      27,   -91,    41,    73,    51,   -91,    39,   -91,   -91,   -91,
+      40,    52,   -91,    93,    95,    33,   -91,   -91,   -91,    15,
+     -91,   -91,    53,   -91,   -91,   -91,   -91,    46,    43,    43,
+      33,    11,    11,   -91,    61,   -91,   -91,   -91,    35,   -91,
+     -91,   -91,   -91,   100,   -91,   -91,   -91,   -91,   102,   -91,
+     113,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,
+      64,   -91,    94,     1,   -91,   -91,    62,   -91,    61,   -91,
+      33,   -91,   -91,    43,    86,    43,    33,   -91,   -91,   -91,
+     -91,    11,   -91,   -91,    11,   -91,   -91,   -91,   -91,   -91,
+     -91,   -91,   -91,   -91,    72,   -91,   -91,   -91,   -91,   -91,
+      33,   -91,   142,   -91,   145,   -91,   -91,   -91,   -91,   -91,
+     -91,   -91,   -91,    17,    34,   -91,   -91,    33,   146,    97,
+      62,    62,    34,   -91,   -91,   -91,   -91,   -91
 };
 
 /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
+static const yytype_int16 yypgoto[] =
 {
-     -69,   -69,   -69,   -69,    47,   -69,   -69,   -69,   -69,   -69,
-     -69,    -7,   -58,     7,   -69,   -15,   -69,   -69,   -69,   -42,
-     -34,   -69,   -69,   -68,    30,   -69
+     -91,   -91,   -91,   -91,   147,   -91,   -91,   -91,   -91,   -91,
+     -91,   -91,   -91,    37,   -91,   106,   -60,   -33,   105,   -91,
+      69,   -91,   -91,   -91,    24,   -48,   -91,   -91,   -49,   -20,
+     -91,   -35,   -90,   -91
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -82
-static const yytype_int8 yytable[] =
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -108
+static const yytype_int16 yytable[] =
 {
-      64,    54,    49,    49,    73,     3,    92,    48,    74,    49,
-      91,    98,    99,   100,   101,   102,    55,    79,    93,    93,
-      79,   -81,    65,    97,    57,    59,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    58,    84,    60,    61,    14,
-      71,    78,    49,   109,    79,    50,    50,    86,   108,    42,
-     -77,    26,    96,    88,    77,   110,    79,   106,     0,    34,
-       0,   103,    62,    63,     0,    90,   107,     0,    66,    87,
-      65,     0,   103,     0,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,     0,     0,     0,    80,    14,     0,    81,
-      82,    83,     0,     0,     0,     0,     0,     0,     0,    26,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
-       0,     0,     0,     0,     0,     0,    66,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,     0,     0,     0,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,     0,     0,    38,     0,     0,     0,
-      39,    40
+      78,  -107,    80,     3,   125,   105,     4,     5,     6,     7,
+       8,     9,    10,    11,    74,    97,    80,    12,    50,    14,
+       4,     5,     6,     7,     8,     9,    10,    11,    94,    94,
+      62,    12,    27,    14,   132,    56,    74,    74,   106,   119,
+      35,   127,    67,    69,   127,    51,    27,   137,   138,   139,
+      81,   114,    53,    52,    35,   122,    75,    54,    42,    76,
+     123,   126,   123,    59,    81,    98,    99,   100,   135,    60,
+     136,    61,    42,    94,    63,    94,    65,   140,    75,    75,
+      57,    76,    76,   107,    64,   122,    68,    70,    75,    74,
+     124,    76,   146,   147,    66,    71,    72,    91,    73,   141,
+      89,    87,   143,   109,    53,   110,   117,   141,     4,     5,
+       6,     7,     8,     9,    10,    11,   111,   112,   128,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,   131,   113,    74,    44,
+     144,   145,   115,    39,    95,    40,    41,   130,   104,   142,
+      42
 };
 
-static const yytype_int8 yycheck[] =
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-91)))
+
+#define yytable_value_is_error(Yytable_value) \
+  YYID (0)
+
+static const yytype_uint8 yycheck[] =
 {
-      34,     8,     3,     3,    42,     0,    74,    42,    46,     3,
-       4,    44,    45,    14,    15,    16,     3,    51,    76,    77,
-      54,     0,     1,    91,     4,    43,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,     4,    44,    43,    43,    18,
-      42,    48,     3,    42,    78,    46,    46,    44,     4,     2,
-      51,    30,    50,    68,    47,    51,    90,    99,    -1,    38,
-      -1,    95,    32,    33,    -1,    72,   100,    -1,    47,    48,
-       1,    -1,   106,    -1,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    -1,    -1,    -1,    56,    18,    -1,    59,
-      60,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    30,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    47,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    -1,    44,    -1,    -1,    -1,
-      48,    49
+      35,     0,     1,     0,    94,    54,     5,     6,     7,     8,
+       9,    10,    11,    12,     3,    50,     1,    16,    54,    18,
+       5,     6,     7,     8,     9,    10,    11,    12,    48,    49,
+       3,    16,    31,    18,   124,     3,     3,     3,     3,    88,
+      39,   101,     3,     3,   104,    43,    31,    13,    14,    15,
+      49,    50,    43,    43,    39,    90,    45,    48,    57,    48,
+      93,    96,    95,     3,    49,    54,    55,    56,    51,     4,
+      53,     4,    57,    93,    47,    95,     3,    43,    45,    45,
+      48,    48,    48,    48,    43,   120,    47,    47,    45,     3,
+       4,    48,   140,   141,    43,    43,     3,    54,     3,   134,
+      54,    48,   137,     3,    43,     3,    44,   142,     5,     6,
+       7,     8,     9,    10,    11,    12,     3,    53,    46,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,     4,    53,     3,     2,
+       4,    54,    83,    50,    49,    52,    53,   120,    52,   135,
+      57
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    53,    54,     0,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    17,    18,    19,    20,    21,    22,    23,
+       0,    59,    60,     0,     5,     6,     7,     8,     9,    10,
+      11,    12,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    44,    48,
-      49,    55,    56,    57,    60,    61,    59,    58,    42,     3,
-      46,    63,    72,    75,    63,     3,    76,     4,     4,    43,
-      43,    43,    76,    76,    72,     1,    47,    56,    66,    67,
-      68,    42,    62,    42,    46,    64,    65,    65,    63,    72,
-      76,    76,    76,    76,    44,    69,    44,    48,    67,    77,
-      63,     4,    75,    64,    70,    71,    50,    75,    44,    45,
-      14,    15,    16,    72,    73,    74,    71,    72,     4,    42,
-      51
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    50,
+      52,    53,    57,    61,    62,    64,    67,    68,    66,    65,
+      54,    43,    43,    43,    48,    86,     3,    48,    84,     3,
+       4,     4,     3,    47,    43,     3,    43,     3,    47,     3,
+      47,    43,     3,     3,     3,    45,    48,    87,    89,    90,
+       1,    49,    62,    77,    78,    79,    88,    48,    63,    54,
+      69,    54,    75,    76,    87,    76,    72,    89,    54,    55,
+      56,    73,    74,    89,    73,    86,     3,    48,    85,     3,
+       3,     3,    53,    53,    50,    78,    91,    44,    83,    86,
+      70,    71,    89,    75,     4,    90,    89,    74,    46,    80,
+      71,     4,    90,    81,    82,    51,    53,    13,    14,    15,
+      43,    89,    82,    89,     4,    54,    83,    83
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -839,30 +933,40 @@
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
 
 #define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
+#define YYBACKUP(Token, Value)                                  \
+do                                                              \
+  if (yychar == YYEMPTY)                                        \
+    {                                                           \
+      yychar = (Token);                                         \
+      yylval = (Value);                                         \
+      YYPOPSTACK (yylen);                                       \
+      yystate = *yyssp;                                         \
+      YY_LAC_DISCARD ("YYBACKUP");                              \
+      goto yybackup;                                            \
+    }                                                           \
+  else                                                          \
+    {                                                           \
       yyerror (YY_("syntax error: cannot back up")); \
       YYERROR;							\
     }								\
 while (YYID (0))
 
-
+/* Error token number */
 #define YYTERROR	1
 #define YYERRCODE	256
 
@@ -871,38 +975,43 @@
    If N is 0, then set CURRENT to the empty location which ends
    the previous symbol: RHS[0] (always defined).  */
 
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
 #ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
+# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
+    do                                                                  \
+      if (YYID (N))                                                     \
+        {                                                               \
+          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+        }                                                               \
+      else                                                              \
+        {                                                               \
+          (Current).first_line   = (Current).last_line   =              \
+            YYRHSLOC (Rhs, 0).last_line;                                \
+          (Current).first_column = (Current).last_column =              \
+            YYRHSLOC (Rhs, 0).last_column;                              \
+        }                                                               \
     while (YYID (0))
 #endif
 
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+
 
 /* YY_LOCATION_PRINT -- Print the location on the stream.
    This macro was not mandated originally: define only if we know
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
+# if defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                                   \
+  do {                                                                   \
+    fprintf (File, "%d.%d", (Loc).first_line, (Loc).first_column);       \
+    if ((Loc).first_line < (Loc).last_line)                              \
+      fprintf (File, "-%d.%d", (Loc).last_line,  (Loc).last_column - 1); \
+    else if ((Loc).first_column < (Loc).last_column - 1)                 \
+      fprintf (File, "-%d", (Loc).last_column - 1);                      \
+  } while (0)
 # else
 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
 # endif
@@ -910,7 +1019,6 @@
 
 
 /* YYLEX -- calling `yylex' with the right arguments.  */
-
 #ifdef YYLEX_PARAM
 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
 #else
@@ -918,7 +1026,7 @@
 #endif
 
 /* Enable debugging if requested.  */
-#if YYDEBUG
+#if GRAM_DEBUG
 
 # ifndef YYFPRINTF
 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
@@ -961,6 +1069,8 @@
     YYLTYPE const * const yylocationp;
 #endif
 {
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   if (!yyvaluep)
     return;
   YYUSE (yylocationp);
@@ -972,85 +1082,131 @@
 # endif
   switch (yytype)
     {
-      case 3: /* "\"string\"" */
-#line 179 "parse-gram.y"
-	{ fprintf (stderr, "\"%s\"", (yyvaluep->chars)); };
-#line 979 "parse-gram.c"
+      case 3: /* "string" */
+/* Line 812 of yacc.c  */
+#line 205 "parse-gram.y"
+	{ fputs (quotearg_style (c_quoting_style, ((*yyvaluep).chars)), stderr); };
+/* Line 812 of yacc.c  */
+#line 1091 "parse-gram.c"
 	break;
-      case 4: /* "\"integer\"" */
-#line 192 "parse-gram.y"
-	{ fprintf (stderr, "%d", (yyvaluep->integer)); };
-#line 984 "parse-gram.c"
+      case 4: /* "integer" */
+/* Line 812 of yacc.c  */
+#line 217 "parse-gram.y"
+	{ fprintf (stderr, "%d", ((*yyvaluep).integer)); };
+/* Line 812 of yacc.c  */
+#line 1098 "parse-gram.c"
 	break;
-      case 8: /* "\"%destructor {...}\"" */
-#line 181 "parse-gram.y"
-	{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 989 "parse-gram.c"
+      case 43: /* "{...}" */
+/* Line 812 of yacc.c  */
+#line 207 "parse-gram.y"
+	{ fprintf (stderr, "{\n%s\n}", ((*yyvaluep).code)); };
+/* Line 812 of yacc.c  */
+#line 1105 "parse-gram.c"
 	break;
-      case 9: /* "\"%printer {...}\"" */
-#line 181 "parse-gram.y"
-	{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 994 "parse-gram.c"
+      case 44: /* "[identifier]" */
+/* Line 812 of yacc.c  */
+#line 212 "parse-gram.y"
+	{ fprintf (stderr, "[%s]", ((*yyvaluep).uniqstr)); };
+/* Line 812 of yacc.c  */
+#line 1112 "parse-gram.c"
 	break;
-      case 10: /* "\"%union {...}\"" */
-#line 181 "parse-gram.y"
-	{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 999 "parse-gram.c"
+      case 45: /* "char" */
+/* Line 812 of yacc.c  */
+#line 199 "parse-gram.y"
+	{ fputs (char_name (((*yyvaluep).character)), stderr); };
+/* Line 812 of yacc.c  */
+#line 1119 "parse-gram.c"
 	break;
-      case 26: /* "\"%initial-action {...}\"" */
-#line 181 "parse-gram.y"
-	{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1004 "parse-gram.c"
+      case 46: /* "epilogue" */
+/* Line 812 of yacc.c  */
+#line 207 "parse-gram.y"
+	{ fprintf (stderr, "{\n%s\n}", ((*yyvaluep).chars)); };
+/* Line 812 of yacc.c  */
+#line 1126 "parse-gram.c"
 	break;
-      case 27: /* "\"%lex-param {...}\"" */
-#line 181 "parse-gram.y"
-	{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1009 "parse-gram.c"
+      case 48: /* "identifier" */
+/* Line 812 of yacc.c  */
+#line 211 "parse-gram.y"
+	{ fputs (((*yyvaluep).uniqstr), stderr); };
+/* Line 812 of yacc.c  */
+#line 1133 "parse-gram.c"
 	break;
-      case 34: /* "\"%parse-param {...}\"" */
-#line 181 "parse-gram.y"
-	{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1014 "parse-gram.c"
+      case 49: /* "identifier:" */
+/* Line 812 of yacc.c  */
+#line 213 "parse-gram.y"
+	{ fprintf (stderr, "%s:", ((*yyvaluep).uniqstr)); };
+/* Line 812 of yacc.c  */
+#line 1140 "parse-gram.c"
 	break;
-      case 42: /* "\"type\"" */
-#line 190 "parse-gram.y"
-	{ fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); };
-#line 1019 "parse-gram.c"
+      case 52: /* "%{...%}" */
+/* Line 812 of yacc.c  */
+#line 207 "parse-gram.y"
+	{ fprintf (stderr, "{\n%s\n}", ((*yyvaluep).chars)); };
+/* Line 812 of yacc.c  */
+#line 1147 "parse-gram.c"
 	break;
-      case 46: /* "\"identifier\"" */
-#line 194 "parse-gram.y"
-	{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
-#line 1024 "parse-gram.c"
+      case 54: /* "type" */
+/* Line 812 of yacc.c  */
+#line 214 "parse-gram.y"
+	{ fprintf (stderr, "<%s>", ((*yyvaluep).uniqstr)); };
+/* Line 812 of yacc.c  */
+#line 1154 "parse-gram.c"
 	break;
-      case 47: /* "\"identifier:\"" */
-#line 196 "parse-gram.y"
-	{ fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); };
-#line 1029 "parse-gram.c"
+      case 71: /* symbol.prec */
+/* Line 812 of yacc.c  */
+#line 220 "parse-gram.y"
+	{ fprintf (stderr, "%s", ((*yyvaluep).symbol)->tag); };
+/* Line 812 of yacc.c  */
+#line 1161 "parse-gram.c"
 	break;
-      case 49: /* "\"%{...%}\"" */
-#line 181 "parse-gram.y"
-	{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1034 "parse-gram.c"
+      case 84: /* variable */
+/* Line 812 of yacc.c  */
+#line 211 "parse-gram.y"
+	{ fputs (((*yyvaluep).uniqstr), stderr); };
+/* Line 812 of yacc.c  */
+#line 1168 "parse-gram.c"
 	break;
-      case 50: /* "\"epilogue\"" */
-#line 181 "parse-gram.y"
-	{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
-#line 1039 "parse-gram.c"
+      case 85: /* content.opt */
+/* Line 812 of yacc.c  */
+#line 207 "parse-gram.y"
+	{ fprintf (stderr, "{\n%s\n}", ((*yyvaluep).chars)); };
+/* Line 812 of yacc.c  */
+#line 1175 "parse-gram.c"
 	break;
-      case 72: /* "symbol" */
-#line 194 "parse-gram.y"
-	{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
-#line 1044 "parse-gram.c"
+      case 86: /* braceless */
+/* Line 812 of yacc.c  */
+#line 207 "parse-gram.y"
+	{ fprintf (stderr, "{\n%s\n}", ((*yyvaluep).chars)); };
+/* Line 812 of yacc.c  */
+#line 1182 "parse-gram.c"
 	break;
-      case 75: /* "string_as_id" */
-#line 194 "parse-gram.y"
-	{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
-#line 1049 "parse-gram.c"
+      case 87: /* id */
+/* Line 812 of yacc.c  */
+#line 220 "parse-gram.y"
+	{ fprintf (stderr, "%s", ((*yyvaluep).symbol)->tag); };
+/* Line 812 of yacc.c  */
+#line 1189 "parse-gram.c"
 	break;
-      case 76: /* "string_content" */
-#line 179 "parse-gram.y"
-	{ fprintf (stderr, "\"%s\"", (yyvaluep->chars)); };
-#line 1054 "parse-gram.c"
+      case 88: /* id_colon */
+/* Line 812 of yacc.c  */
+#line 221 "parse-gram.y"
+	{ fprintf (stderr, "%s:", ((*yyvaluep).symbol)->tag); };
+/* Line 812 of yacc.c  */
+#line 1196 "parse-gram.c"
+	break;
+      case 89: /* symbol */
+/* Line 812 of yacc.c  */
+#line 220 "parse-gram.y"
+	{ fprintf (stderr, "%s", ((*yyvaluep).symbol)->tag); };
+/* Line 812 of yacc.c  */
+#line 1203 "parse-gram.c"
+	break;
+      case 90: /* string_as_id */
+/* Line 812 of yacc.c  */
+#line 220 "parse-gram.y"
+	{ fprintf (stderr, "%s", ((*yyvaluep).symbol)->tag); };
+/* Line 812 of yacc.c  */
+#line 1210 "parse-gram.c"
 	break;
       default:
 	break;
@@ -1094,17 +1250,20 @@
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
 #else
 static void
-yy_stack_print (bottom, top)
-    yytype_int16 *bottom;
-    yytype_int16 *top;
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
   YYFPRINTF (stderr, "\n");
 }
 
@@ -1139,11 +1298,11 @@
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
-      fprintf (stderr, "   $%d = ", yyi + 1);
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
 		       &(yyvsp[(yyi + 1) - (yynrhs)])
 		       , &(yylsp[(yyi + 1) - (yynrhs)])		       );
-      fprintf (stderr, "\n");
+      YYFPRINTF (stderr, "\n");
     }
 }
 
@@ -1156,12 +1315,12 @@
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
 int yydebug;
-#else /* !YYDEBUG */
+#else /* !GRAM_DEBUG */
 # define YYDPRINTF(Args)
 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
+#endif /* !GRAM_DEBUG */
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
@@ -1180,7 +1339,239 @@
 # define YYMAXDEPTH 10000
 #endif
 
-
+/* Given a state stack such that *YYBOTTOM is its bottom, such that
+   *YYTOP is either its top or is YYTOP_EMPTY to indicate an empty
+   stack, and such that *YYCAPACITY is the maximum number of elements it
+   can hold without a reallocation, make sure there is enough room to
+   store YYADD more elements.  If not, allocate a new stack using
+   YYSTACK_ALLOC, copy the existing elements, and adjust *YYBOTTOM,
+   *YYTOP, and *YYCAPACITY to reflect the new capacity and memory
+   location.  If *YYBOTTOM != YYBOTTOM_NO_FREE, then free the old stack
+   using YYSTACK_FREE.  Return 0 if successful or if no reallocation is
+   required.  Return 1 if memory is exhausted.  */
+static int
+yy_lac_stack_realloc (YYSIZE_T *yycapacity, YYSIZE_T yyadd,
+#if GRAM_DEBUG
+                      char const *yydebug_prefix,
+                      char const *yydebug_suffix,
+#endif
+                      yytype_int16 **yybottom,
+                      yytype_int16 *yybottom_no_free,
+                      yytype_int16 **yytop, yytype_int16 *yytop_empty)
+{
+  YYSIZE_T yysize_old =
+    *yytop == yytop_empty ? 0 : *yytop - *yybottom + 1;
+  YYSIZE_T yysize_new = yysize_old + yyadd;
+  if (*yycapacity < yysize_new)
+    {
+      YYSIZE_T yyalloc = 2 * yysize_new;
+      yytype_int16 *yybottom_new;
+      /* Use YYMAXDEPTH for maximum stack size given that the stack
+         should never need to grow larger than the main state stack
+         needs to grow without LAC.  */
+      if (YYMAXDEPTH < yysize_new)
+        {
+          YYDPRINTF ((stderr, "%smax size exceeded%s", yydebug_prefix,
+                      yydebug_suffix));
+          return 1;
+        }
+      if (YYMAXDEPTH < yyalloc)
+        yyalloc = YYMAXDEPTH;
+      yybottom_new =
+        (yytype_int16*) YYSTACK_ALLOC (yyalloc * sizeof *yybottom_new);
+      if (!yybottom_new)
+        {
+          YYDPRINTF ((stderr, "%srealloc failed%s", yydebug_prefix,
+                      yydebug_suffix));
+          return 1;
+        }
+      if (*yytop != yytop_empty)
+        {
+          YYCOPY (yybottom_new, *yybottom, yysize_old);
+          *yytop = yybottom_new + (yysize_old - 1);
+        }
+      if (*yybottom != yybottom_no_free)
+        YYSTACK_FREE (*yybottom);
+      *yybottom = yybottom_new;
+      *yycapacity = yyalloc;
+    }
+  return 0;
+}
+
+/* Establish the initial context for the current lookahead if no initial
+   context is currently established.
+
+   We define a context as a snapshot of the parser stacks.  We define
+   the initial context for a lookahead as the context in which the
+   parser initially examines that lookahead in order to select a
+   syntactic action.  Thus, if the lookahead eventually proves
+   syntactically unacceptable (possibly in a later context reached via a
+   series of reductions), the initial context can be used to determine
+   the exact set of tokens that would be syntactically acceptable in the
+   lookahead's place.  Moreover, it is the context after which any
+   further semantic actions would be erroneous because they would be
+   determined by a syntactically unacceptable token.
+
+   YY_LAC_ESTABLISH should be invoked when a reduction is about to be
+   performed in an inconsistent state (which, for the purposes of LAC,
+   includes consistent states that don't know they're consistent because
+   their default reductions have been disabled).  Iff there is a
+   lookahead token, it should also be invoked before reporting a syntax
+   error.  This latter case is for the sake of the debugging output.
+
+   For parse.lac=full, the implementation of YY_LAC_ESTABLISH is as
+   follows.  If no initial context is currently established for the
+   current lookahead, then check if that lookahead can eventually be
+   shifted if syntactic actions continue from the current context.
+   Report a syntax error if it cannot.  */
+#define YY_LAC_ESTABLISH                                         \
+do {                                                             \
+  if (!yy_lac_established)                                       \
+    {                                                            \
+      YYDPRINTF ((stderr,                                        \
+                  "LAC: initial context established for %s\n",   \
+                  yytname[yytoken]));                            \
+      yy_lac_established = 1;                                    \
+      {                                                          \
+        int yy_lac_status =                                      \
+          yy_lac (yyesa, &yyes, &yyes_capacity, yyssp, yytoken); \
+        if (yy_lac_status == 2)                                  \
+          goto yyexhaustedlab;                                   \
+        if (yy_lac_status == 1)                                  \
+          goto yyerrlab;                                         \
+      }                                                          \
+    }                                                            \
+} while (YYID (0))
+
+/* Discard any previous initial lookahead context because of Event,
+   which may be a lookahead change or an invalidation of the currently
+   established initial context for the current lookahead.
+
+   The most common example of a lookahead change is a shift.  An example
+   of both cases is syntax error recovery.  That is, a syntax error
+   occurs when the lookahead is syntactically erroneous for the
+   currently established initial context, so error recovery manipulates
+   the parser stacks to try to find a new initial context in which the
+   current lookahead is syntactically acceptable.  If it fails to find
+   such a context, it discards the lookahead.  */
+#if GRAM_DEBUG
+# define YY_LAC_DISCARD(Event)                                           \
+do {                                                                     \
+  if (yy_lac_established)                                                \
+    {                                                                    \
+      if (yydebug)                                                       \
+        YYFPRINTF (stderr, "LAC: initial context discarded due to "      \
+                   Event "\n");                                          \
+      yy_lac_established = 0;                                            \
+    }                                                                    \
+} while (YYID (0))
+#else
+# define YY_LAC_DISCARD(Event) yy_lac_established = 0
+#endif
+
+/* Given the stack whose top is *YYSSP, return 0 iff YYTOKEN can
+   eventually (after perhaps some reductions) be shifted, return 1 if
+   not, or return 2 if memory is exhausted.  As preconditions and
+   postconditions: *YYES_CAPACITY is the allocated size of the array to
+   which *YYES points, and either *YYES = YYESA or *YYES points to an
+   array allocated with YYSTACK_ALLOC.  yy_lac may overwrite the
+   contents of either array, alter *YYES and *YYES_CAPACITY, and free
+   any old *YYES other than YYESA.  */
+static int
+yy_lac (yytype_int16 *yyesa, yytype_int16 **yyes,
+        YYSIZE_T *yyes_capacity, yytype_int16 *yyssp, int yytoken)
+{
+  yytype_int16 *yyes_prev = yyssp;
+  yytype_int16 *yyesp = yyes_prev;
+  YYDPRINTF ((stderr, "LAC: checking lookahead %s:", yytname[yytoken]));
+  if (yytoken == YYUNDEFTOK)
+    {
+      YYDPRINTF ((stderr, " Always Err\n"));
+      return 1;
+    }
+  while (1)
+    {
+      int yyrule = yypact[*yyesp];
+      if (yypact_value_is_default (yyrule)
+          || (yyrule += yytoken) < 0 || YYLAST < yyrule
+          || yycheck[yyrule] != yytoken)
+        {
+          yyrule = yydefact[*yyesp];
+          if (yyrule == 0)
+            {
+              YYDPRINTF ((stderr, " Err\n"));
+              return 1;
+            }
+        }
+      else
+        {
+          yyrule = yytable[yyrule];
+          if (yytable_value_is_error (yyrule))
+            {
+              YYDPRINTF ((stderr, " Err\n"));
+              return 1;
+            }
+          if (0 < yyrule)
+            {
+              YYDPRINTF ((stderr, " S%d\n", yyrule));
+              return 0;
+            }
+          yyrule = -yyrule;
+        }
+      {
+        YYSIZE_T yylen = yyr2[yyrule];
+        YYDPRINTF ((stderr, " R%d", yyrule - 1));
+        if (yyesp != yyes_prev)
+          {
+            YYSIZE_T yysize = yyesp - *yyes + 1;
+            if (yylen < yysize)
+              {
+                yyesp -= yylen;
+                yylen = 0;
+              }
+            else
+              {
+                yylen -= yysize;
+                yyesp = yyes_prev;
+              }
+          }
+        if (yylen)
+          yyesp = yyes_prev -= yylen;
+      }
+      {
+        int yystate;
+        {
+          int yylhs = yyr1[yyrule] - YYNTOKENS;
+          yystate = yypgoto[yylhs] + *yyesp;
+          if (yystate < 0 || YYLAST < yystate
+              || yycheck[yystate] != *yyesp)
+            yystate = yydefgoto[yylhs];
+          else
+            yystate = yytable[yystate];
+        }
+        if (yyesp == yyes_prev)
+          {
+            yyesp = *yyes;
+            *yyesp = yystate;
+          }
+        else
+          {
+            if (yy_lac_stack_realloc (yyes_capacity, 1,
+#if GRAM_DEBUG
+                                      " (", ")",
+#endif
+                                      yyes, yyesa, &yyesp, yyes_prev))
+              {
+                YYDPRINTF ((stderr, "\n"));
+                return 2;
+              }
+            *++yyesp = yystate;
+          }
+        YYDPRINTF ((stderr, " G%d", yystate));
+      }
+    }
+}
+
 
 #if YYERROR_VERBOSE
 
@@ -1283,115 +1674,147 @@
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.  In order to see if a particular token T is a
+   valid looakhead, invoke yy_lac (YYESA, YYES, YYES_CAPACITY, YYSSP, T).
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store or if
+   yy_lac returned 2.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyesa, yytype_int16 **yyes,
+                YYSIZE_T *yyes_capacity, yytype_int16 *yyssp, int yytoken)
 {
-  int yyn = yypact[yystate];
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = YY_NULL;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
 
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+       In the first two cases, it might appear that the current syntax
+       error should have been detected in the previous state when yy_lac
+       was invoked.  However, at that time, there might have been a
+       different syntax error that discarded a different initial context
+       during error recovery, leaving behind the current lookahead.
+  */
+  if (yytoken != YYEMPTY)
     {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
+      int yyn = yypact[*yyssp];
+      YYDPRINTF ((stderr, "Constructing syntax error message\n"));
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          int yyx;
 
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+          for (yyx = 0; yyx < YYNTOKENS; ++yyx)
+            if (yyx != YYTERROR && yyx != YYUNDEFTOK)
+              {
+                {
+                  int yy_lac_status = yy_lac (yyesa, yyes, yyes_capacity,
+                                              yyssp, yyx);
+                  if (yy_lac_status == 2)
+                    return 2;
+                  if (yy_lac_status == 1)
+                    continue;
+                }
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
+# if GRAM_DEBUG
+      else if (yydebug)
+        YYFPRINTF (stderr, "No expected tokens.\n");
 # endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
     }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
+
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
@@ -1425,25 +1848,6 @@
 	break;
     }
 }
-
-
-/* Prevent warnings from -Wmissing-prototypes.  */
-
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
 
 
 
@@ -1474,24 +1878,92 @@
 #endif
 #endif
 {
-  /* The look-ahead symbol.  */
+/* The lookahead symbol.  */
 int yychar;
 
-/* The semantic value of the look-ahead symbol.  */
-YYSTYPE yylval;
 
-/* Number of syntax errors so far.  */
-int yynerrs;
-/* Location data for the look-ahead symbol.  */
-YYLTYPE yylloc;
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+/* Default value used for initialization, for pacifying older GCCs
+   or non-GCC compilers.  */
+static YYSTYPE yyval_default;
+# define YY_INITIAL_VALUE(Value) = Value
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
 
-  int yystate;
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+
+/* Location data for the lookahead symbol.  */
+YYLTYPE yylloc
+# if defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL
+  = { 1, 1, 1, 1 }
+# endif
+;
+
+
+    /* Number of syntax errors so far.  */
+    int yynerrs;
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+       `yyls': related to locations.
+
+       Refer to the stacks through separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    /* The location stack.  */
+    YYLTYPE yylsa[YYINITDEPTH];
+    YYLTYPE *yyls;
+    YYLTYPE *yylsp;
+
+    /* The locations where the error started and ended.  */
+    YYLTYPE yyerror_range[3];
+
+    YYSIZE_T yystacksize;
+
+    yytype_int16 yyesa[20];
+    yytype_int16 *yyes;
+    YYSIZE_T yyes_capacity;
+
+  int yy_lac_established = 0;
   int yyn;
   int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
+  /* Lookahead token as an internal (translated) token number.  */
   int yytoken = 0;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+  YYLTYPE yyloc;
+
 #if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
@@ -1499,77 +1971,40 @@
   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  yytype_int16 yyssa[YYINITDEPTH];
-  yytype_int16 *yyss = yyssa;
-  yytype_int16 *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
-
-  /* The location stack.  */
-  YYLTYPE yylsa[YYINITDEPTH];
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-  /* The locations where the error started and ended.  */
-  YYLTYPE yyerror_range[2];
-
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
 
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-  YYLTYPE yyloc;
-
   /* The number of symbols on the RHS of the reduced rule.
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
+  yyssp = yyss = yyssa;
+  yyvsp = yyvs = yyvsa;
+  yylsp = yyls = yylsa;
+  yystacksize = YYINITDEPTH;
+
+  yyes = yyesa;
+  yyes_capacity = sizeof yyesa / sizeof *yyes;
+  if (YYMAXDEPTH < yyes_capacity)
+    yyes_capacity = YYMAXDEPTH;
+
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yystate = 0;
   yyerrstatus = 0;
   yynerrs = 0;
-  yychar = YYEMPTY;		/* Cause a token to be read.  */
+  yychar = YYEMPTY; /* Cause a token to be read.  */
 
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-  yylsp = yyls;
-#if YYLTYPE_IS_TRIVIAL
-  /* Initialize the default location before parsing starts.  */
-  yylloc.first_line   = yylloc.last_line   = 1;
-  yylloc.first_column = yylloc.last_column = 0;
-#endif
-
-
-  /* User initialization code.  */
-#line 84 "parse-gram.y"
+/* User initialization code.  */
+/* Line 1560 of yacc.c  */
+#line 107 "parse-gram.y"
 {
   /* Bison's grammar can initial empty locations, hence a default
      location is needed. */
-  yylloc.start.file   = yylloc.end.file   = current_file;
-  yylloc.start.line   = yylloc.end.line   = 1;
-  yylloc.start.column = yylloc.end.column = 0;
+  boundary_set (&yylloc.start, current_file, 1, 1);
+  boundary_set (&yylloc.end, current_file, 1, 1);
 }
-/* Line 1078 of yacc.c.  */
-#line 1573 "parse-gram.c"
+/* Line 1560 of yacc.c  */
+#line 2008 "parse-gram.c"
   yylsp[0] = yylloc;
   goto yysetstate;
 
@@ -1607,6 +2042,7 @@
 		    &yyvs1, yysize * sizeof (*yyvsp),
 		    &yyls1, yysize * sizeof (*yylsp),
 		    &yystacksize);
+
 	yyls = yyls1;
 	yyss = yyss1;
 	yyvs = yyvs1;
@@ -1628,9 +2064,9 @@
 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
 	if (! yyptr)
 	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss);
-	YYSTACK_RELOCATE (yyvs);
-	YYSTACK_RELOCATE (yyls);
+	YYSTACK_RELOCATE (yyss_alloc, yyss);
+	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+	YYSTACK_RELOCATE (yyls_alloc, yyls);
 #  undef YYSTACK_RELOCATE
 	if (yyss1 != yyssa)
 	  YYSTACK_FREE (yyss1);
@@ -1651,6 +2087,9 @@
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
   goto yybackup;
 
 /*-----------.
@@ -1659,16 +2098,16 @@
 yybackup:
 
   /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
+     lookahead token if we need one and don't already have one.  */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -1690,33 +2129,36 @@
      detect an error, take that action.  */
   yyn += yytoken;
   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
+    {
+      YY_LAC_ESTABLISH;
+      goto yydefault;
+    }
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
+      YY_LAC_ESTABLISH;
       yyn = -yyn;
       goto yyreduce;
     }
 
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
   /* Count tokens shifted since error; after three, turn off error
      status.  */
   if (yyerrstatus)
     yyerrstatus--;
 
-  /* Shift the look-ahead token.  */
+  /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
-  /* Discard the shifted token unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+  YY_LAC_DISCARD ("shift");
 
   yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
   *++yylsp = yylloc;
   goto yynewstate;
 
@@ -1751,299 +2193,516 @@
   /* Default location.  */
   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
   YY_REDUCE_PRINT (yyn);
-  switch (yyn)
+  {
+    int yychar_backup = yychar;
+    switch (yyn)
+      {
+          case 6:
+/* Line 1778 of yacc.c  */
+#line 246 "parse-gram.y"
     {
-        case 6:
-#line 217 "parse-gram.y"
-    { prologue_augment ((yyvsp[(1) - (1)].chars), (yylsp[(1) - (1)])); }
+      code_props plain_code;
+      code_props_plain_init (&plain_code, (yyvsp[(1) - (1)].chars), (yylsp[(1) - (1)]));
+      code_props_translate_code (&plain_code);
+      gram_scanner_last_string_free ();
+      muscle_code_grow (union_seen ? "post_prologue" : "pre_prologue",
+                        plain_code.code, (yylsp[(1) - (1)]));
+      code_scanner_last_string_free ();
+    }
     break;
 
   case 7:
-#line 218 "parse-gram.y"
-    { debug_flag = true; }
+/* Line 1778 of yacc.c  */
+#line 255 "parse-gram.y"
+    { debug = true; }
     break;
 
   case 8:
-#line 220 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 257 "parse-gram.y"
     {
-      static char one[] = "1";
-      muscle_insert ((yyvsp[(2) - (2)].chars), one);
+      muscle_percent_define_insert ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars),
+                                    MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
     }
     break;
 
   case 9:
-#line 224 "parse-gram.y"
-    { muscle_insert ((yyvsp[(2) - (3)].chars), (yyvsp[(3) - (3)].chars)); }
-    break;
-
-  case 10:
-#line 225 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 261 "parse-gram.y"
     { defines_flag = true; }
     break;
 
+  case 10:
+/* Line 1778 of yacc.c  */
+#line 263 "parse-gram.y"
+    {
+      defines_flag = true;
+      spec_defines_file = xstrdup ((yyvsp[(2) - (2)].chars));
+    }
+    break;
+
   case 11:
-#line 226 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 267 "parse-gram.y"
     { error_verbose = true; }
     break;
 
   case 12:
-#line 227 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 268 "parse-gram.y"
     { expected_sr_conflicts = (yyvsp[(2) - (2)].integer); }
     break;
 
   case 13:
-#line 228 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 269 "parse-gram.y"
     { expected_rr_conflicts = (yyvsp[(2) - (2)].integer); }
     break;
 
   case 14:
-#line 229 "parse-gram.y"
-    { spec_file_prefix = (yyvsp[(3) - (3)].chars); }
+/* Line 1778 of yacc.c  */
+#line 270 "parse-gram.y"
+    { spec_file_prefix = (yyvsp[(2) - (2)].chars); }
     break;
 
   case 15:
-#line 231 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 271 "parse-gram.y"
+    { spec_file_prefix = (yyvsp[(3) - (3)].chars); }
+    break;
+
+  case 16:
+/* Line 1778 of yacc.c  */
+#line 273 "parse-gram.y"
     {
       nondeterministic_parser = true;
       glr_parser = true;
     }
     break;
 
-  case 16:
-#line 236 "parse-gram.y"
+  case 17:
+/* Line 1778 of yacc.c  */
+#line 278 "parse-gram.y"
     {
-      muscle_code_grow ("initial_action", (yyvsp[(1) - (1)].chars), (yylsp[(1) - (1)]));
+      code_props action;
+      code_props_symbol_action_init (&action, (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)]));
+      code_props_translate_code (&action);
+      gram_scanner_last_string_free ();
+      muscle_code_grow ("initial_action", action.code, (yylsp[(2) - (2)]));
+      code_scanner_last_string_free ();
     }
     break;
 
-  case 17:
-#line 239 "parse-gram.y"
-    { add_param ("lex_param", (yyvsp[(1) - (1)].chars), (yylsp[(1) - (1)])); }
-    break;
-
   case 18:
-#line 240 "parse-gram.y"
-    { locations_flag = true; }
+/* Line 1778 of yacc.c  */
+#line 286 "parse-gram.y"
+    { language_argmatch ((yyvsp[(2) - (2)].chars), grammar_prio, (yylsp[(1) - (2)])); }
     break;
 
   case 19:
-#line 241 "parse-gram.y"
-    { spec_name_prefix = (yyvsp[(3) - (3)].chars); }
+/* Line 1778 of yacc.c  */
+#line 287 "parse-gram.y"
+    { add_param ("lex_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
     break;
 
   case 20:
-#line 242 "parse-gram.y"
-    { no_lines_flag = true; }
+/* Line 1778 of yacc.c  */
+#line 288 "parse-gram.y"
+    { locations_flag = true; }
     break;
 
   case 21:
-#line 243 "parse-gram.y"
-    { nondeterministic_parser = true; }
+/* Line 1778 of yacc.c  */
+#line 289 "parse-gram.y"
+    { spec_name_prefix = (yyvsp[(2) - (2)].chars); }
     break;
 
   case 22:
-#line 244 "parse-gram.y"
-    { spec_outfile = (yyvsp[(3) - (3)].chars); }
+/* Line 1778 of yacc.c  */
+#line 290 "parse-gram.y"
+    { spec_name_prefix = (yyvsp[(3) - (3)].chars); }
     break;
 
   case 23:
-#line 245 "parse-gram.y"
-    { add_param ("parse_param", (yyvsp[(1) - (1)].chars), (yylsp[(1) - (1)])); }
+/* Line 1778 of yacc.c  */
+#line 291 "parse-gram.y"
+    { no_lines_flag = true; }
     break;
 
   case 24:
-#line 246 "parse-gram.y"
-    { pure_parser = true; }
+/* Line 1778 of yacc.c  */
+#line 292 "parse-gram.y"
+    { nondeterministic_parser = true; }
     break;
 
   case 25:
-#line 247 "parse-gram.y"
-    { version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); }
+/* Line 1778 of yacc.c  */
+#line 293 "parse-gram.y"
+    { spec_outfile = (yyvsp[(2) - (2)].chars); }
     break;
 
   case 26:
-#line 248 "parse-gram.y"
-    { skeleton = (yyvsp[(2) - (2)].chars); }
+/* Line 1778 of yacc.c  */
+#line 294 "parse-gram.y"
+    { spec_outfile = (yyvsp[(3) - (3)].chars); }
     break;
 
   case 27:
-#line 249 "parse-gram.y"
-    { token_table_flag = true; }
+/* Line 1778 of yacc.c  */
+#line 295 "parse-gram.y"
+    { add_param ("parse_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
     break;
 
   case 28:
-#line 250 "parse-gram.y"
-    { report_flag = report_states; }
+/* Line 1778 of yacc.c  */
+#line 297 "parse-gram.y"
+    {
+      /* %pure-parser is deprecated in favor of `%define api.pure', so use
+         `%define api.pure' in a backward-compatible manner here.  First, don't
+         complain if %pure-parser is specified multiple times.  */
+      if (!muscle_find_const ("percent_define(api.pure)"))
+        muscle_percent_define_insert ("api.pure", (yylsp[(1) - (1)]), "",
+                                      MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+      /* In all cases, use api.pure now so that the backend doesn't complain if
+         the skeleton ignores api.pure, but do warn now if there's a previous
+         conflicting definition from an actual %define.  */
+      if (!muscle_percent_define_flag_if ("api.pure"))
+        muscle_percent_define_insert ("api.pure", (yylsp[(1) - (1)]), "",
+                                      MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+    }
     break;
 
   case 29:
-#line 251 "parse-gram.y"
-    { yacc_flag = true; }
+/* Line 1778 of yacc.c  */
+#line 311 "parse-gram.y"
+    { version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); }
+    break;
+
+  case 30:
+/* Line 1778 of yacc.c  */
+#line 313 "parse-gram.y"
+    {
+      char const *skeleton_user = (yyvsp[(2) - (2)].chars);
+      if (mbschr (skeleton_user, '/'))
+        {
+          size_t dir_length = strlen (current_file);
+          char *skeleton_build;
+          while (dir_length && current_file[dir_length - 1] != '/')
+            --dir_length;
+          while (dir_length && current_file[dir_length - 1] == '/')
+            --dir_length;
+          skeleton_build =
+            xmalloc (dir_length + 1 + strlen (skeleton_user) + 1);
+          if (dir_length > 0)
+            {
+              memcpy (skeleton_build, current_file, dir_length);
+              skeleton_build[dir_length++] = '/';
+            }
+          strcpy (skeleton_build + dir_length, skeleton_user);
+          skeleton_user = uniqstr_new (skeleton_build);
+          free (skeleton_build);
+        }
+      skeleton_arg (skeleton_user, grammar_prio, (yylsp[(1) - (2)]));
+    }
+    break;
+
+  case 31:
+/* Line 1778 of yacc.c  */
+#line 336 "parse-gram.y"
+    { token_table_flag = true; }
+    break;
+
+  case 32:
+/* Line 1778 of yacc.c  */
+#line 337 "parse-gram.y"
+    { report_flag |= report_states; }
     break;
 
   case 33:
-#line 259 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 338 "parse-gram.y"
+    { yacc_flag = true; }
+    break;
+
+  case 37:
+/* Line 1778 of yacc.c  */
+#line 346 "parse-gram.y"
     {
       grammar_start_symbol_set ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]));
     }
     break;
 
-  case 34:
-#line 263 "parse-gram.y"
+  case 38:
+/* Line 1778 of yacc.c  */
+#line 350 "parse-gram.y"
     {
-      char const *body = (yyvsp[(1) - (1)].chars);
-
-      if (typed)
-	{
-	  /* Concatenate the union bodies, turning the first one's
-	     trailing '}' into '\n', and omitting the second one's '{'.  */
-	  char *code = muscle_find ("stype");
-	  code[strlen (code) - 1] = '\n';
-	  body++;
-	}
-
-      typed = true;
-      muscle_code_grow ("stype", body, (yylsp[(1) - (1)]));
+      code_props code;
+      code_props_symbol_action_init (&code, (yyvsp[(2) - (3)].code), (yylsp[(2) - (3)]));
+      code_props_translate_code (&code);
+      {
+        symbol_list *list;
+        for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
+          symbol_list_destructor_set (list, &code);
+        symbol_list_free ((yyvsp[(3) - (3)].list));
+      }
     }
     break;
 
-  case 35:
-#line 279 "parse-gram.y"
+  case 39:
+/* Line 1778 of yacc.c  */
+#line 362 "parse-gram.y"
     {
-      symbol_list *list;
-      for (list = (yyvsp[(2) - (2)].list); list; list = list->next)
-	symbol_destructor_set (list->sym, (yyvsp[(1) - (2)].chars), (yylsp[(1) - (2)]));
-      symbol_list_free ((yyvsp[(2) - (2)].list));
+      code_props code;
+      code_props_symbol_action_init (&code, (yyvsp[(2) - (3)].code), (yylsp[(2) - (3)]));
+      code_props_translate_code (&code);
+      {
+        symbol_list *list;
+        for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
+          symbol_list_printer_set (list, &code);
+        symbol_list_free ((yyvsp[(3) - (3)].list));
+      }
     }
     break;
 
-  case 36:
-#line 286 "parse-gram.y"
-    {
-      symbol_list *list;
-      for (list = (yyvsp[(2) - (2)].list); list; list = list->next)
-	symbol_printer_set (list->sym, (yyvsp[(1) - (2)].chars), (yylsp[(1) - (2)]));
-      symbol_list_free ((yyvsp[(2) - (2)].list));
-    }
-    break;
-
-  case 37:
-#line 293 "parse-gram.y"
+  case 40:
+/* Line 1778 of yacc.c  */
+#line 374 "parse-gram.y"
     {
       default_prec = true;
     }
     break;
 
-  case 38:
-#line 297 "parse-gram.y"
+  case 41:
+/* Line 1778 of yacc.c  */
+#line 378 "parse-gram.y"
     {
       default_prec = false;
     }
     break;
 
-  case 39:
-#line 303 "parse-gram.y"
-    { current_class = nterm_sym; }
-    break;
-
-  case 40:
-#line 304 "parse-gram.y"
-    {
-      current_class = unknown_sym;
-      current_type = NULL;
-    }
-    break;
-
-  case 41:
-#line 308 "parse-gram.y"
-    { current_class = token_sym; }
-    break;
-
   case 42:
-#line 309 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 382 "parse-gram.y"
     {
-      current_class = unknown_sym;
-      current_type = NULL;
+      /* Do not invoke muscle_percent_code_grow here since it invokes
+         muscle_user_name_list_grow.  */
+      muscle_code_grow ("percent_code()", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]));
+      code_scanner_last_string_free ();
     }
     break;
 
   case 43:
-#line 314 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 389 "parse-gram.y"
     {
-      symbol_list *list;
-      for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
-	symbol_type_set (list->sym, (yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]));
-      symbol_list_free ((yyvsp[(3) - (3)].list));
+      muscle_percent_code_grow ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars), (yylsp[(3) - (3)]));
+      code_scanner_last_string_free ();
     }
     break;
 
   case 44:
-#line 324 "parse-gram.y"
+/* Line 1778 of yacc.c  */
+#line 403 "parse-gram.y"
+    {}
+    break;
+
+  case 45:
+/* Line 1778 of yacc.c  */
+#line 404 "parse-gram.y"
+    { muscle_code_grow ("union_name", (yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
+    break;
+
+  case 46:
+/* Line 1778 of yacc.c  */
+#line 409 "parse-gram.y"
+    {
+      union_seen = true;
+      muscle_code_grow ("stype", (yyvsp[(3) - (3)].chars), (yylsp[(3) - (3)]));
+      code_scanner_last_string_free ();
+    }
+    break;
+
+  case 47:
+/* Line 1778 of yacc.c  */
+#line 420 "parse-gram.y"
+    { current_class = nterm_sym; }
+    break;
+
+  case 48:
+/* Line 1778 of yacc.c  */
+#line 421 "parse-gram.y"
+    {
+      current_class = unknown_sym;
+      current_type = NULL;
+    }
+    break;
+
+  case 49:
+/* Line 1778 of yacc.c  */
+#line 425 "parse-gram.y"
+    { current_class = token_sym; }
+    break;
+
+  case 50:
+/* Line 1778 of yacc.c  */
+#line 426 "parse-gram.y"
+    {
+      current_class = unknown_sym;
+      current_type = NULL;
+    }
+    break;
+
+  case 51:
+/* Line 1778 of yacc.c  */
+#line 431 "parse-gram.y"
+    {
+      symbol_list *list;
+      tag_seen = true;
+      for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
+	symbol_type_set (list->content.sym, (yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]));
+      symbol_list_free ((yyvsp[(3) - (3)].list));
+    }
+    break;
+
+  case 52:
+/* Line 1778 of yacc.c  */
+#line 442 "parse-gram.y"
     {
       symbol_list *list;
       ++current_prec;
       for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
 	{
-	  symbol_type_set (list->sym, current_type, (yylsp[(2) - (3)]));
-	  symbol_precedence_set (list->sym, current_prec, (yyvsp[(1) - (3)].assoc), (yylsp[(1) - (3)]));
+	  symbol_type_set (list->content.sym, current_type, (yylsp[(2) - (3)]));
+	  symbol_precedence_set (list->content.sym, current_prec, (yyvsp[(1) - (3)].assoc), (yylsp[(1) - (3)]));
 	}
       symbol_list_free ((yyvsp[(3) - (3)].list));
       current_type = NULL;
     }
     break;
 
-  case 45:
-#line 338 "parse-gram.y"
+  case 53:
+/* Line 1778 of yacc.c  */
+#line 456 "parse-gram.y"
     { (yyval.assoc) = left_assoc; }
     break;
 
-  case 46:
-#line 339 "parse-gram.y"
+  case 54:
+/* Line 1778 of yacc.c  */
+#line 457 "parse-gram.y"
     { (yyval.assoc) = right_assoc; }
     break;
 
-  case 47:
-#line 340 "parse-gram.y"
+  case 55:
+/* Line 1778 of yacc.c  */
+#line 458 "parse-gram.y"
     { (yyval.assoc) = non_assoc; }
     break;
 
-  case 48:
-#line 344 "parse-gram.y"
+  case 56:
+/* Line 1778 of yacc.c  */
+#line 462 "parse-gram.y"
     { current_type = NULL; }
     break;
 
-  case 49:
-#line 345 "parse-gram.y"
-    { current_type = (yyvsp[(1) - (1)].uniqstr); }
+  case 57:
+/* Line 1778 of yacc.c  */
+#line 463 "parse-gram.y"
+    { current_type = (yyvsp[(1) - (1)].uniqstr); tag_seen = true; }
     break;
 
-  case 50:
-#line 351 "parse-gram.y"
-    { (yyval.list) = symbol_list_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
+  case 58:
+/* Line 1778 of yacc.c  */
+#line 469 "parse-gram.y"
+    { (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
     break;
 
-  case 51:
-#line 352 "parse-gram.y"
-    { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)])); }
+  case 59:
+/* Line 1778 of yacc.c  */
+#line 471 "parse-gram.y"
+    { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); }
     break;
 
-  case 52:
-#line 358 "parse-gram.y"
+  case 60:
+/* Line 1778 of yacc.c  */
+#line 475 "parse-gram.y"
+    { (yyval.symbol) = (yyvsp[(1) - (1)].symbol); }
+    break;
+
+  case 61:
+/* Line 1778 of yacc.c  */
+#line 476 "parse-gram.y"
+    { (yyval.symbol) = (yyvsp[(1) - (2)].symbol); symbol_user_token_number_set ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].integer), (yylsp[(2) - (2)])); }
+    break;
+
+  case 62:
+/* Line 1778 of yacc.c  */
+#line 482 "parse-gram.y"
+    { (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
+    break;
+
+  case 63:
+/* Line 1778 of yacc.c  */
+#line 484 "parse-gram.y"
+    { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); }
+    break;
+
+  case 64:
+/* Line 1778 of yacc.c  */
+#line 488 "parse-gram.y"
+    { (yyval.list) = (yyvsp[(1) - (1)].list); }
+    break;
+
+  case 65:
+/* Line 1778 of yacc.c  */
+#line 489 "parse-gram.y"
+    { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); }
+    break;
+
+  case 66:
+/* Line 1778 of yacc.c  */
+#line 493 "parse-gram.y"
+    { (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
+    break;
+
+  case 67:
+/* Line 1778 of yacc.c  */
+#line 494 "parse-gram.y"
+    { (yyval.list) = symbol_list_type_new ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
+    break;
+
+  case 68:
+/* Line 1778 of yacc.c  */
+#line 495 "parse-gram.y"
+    { (yyval.list) = symbol_list_default_tagged_new ((yylsp[(1) - (1)])); }
+    break;
+
+  case 69:
+/* Line 1778 of yacc.c  */
+#line 496 "parse-gram.y"
+    { (yyval.list) = symbol_list_default_tagless_new ((yylsp[(1) - (1)])); }
+    break;
+
+  case 70:
+/* Line 1778 of yacc.c  */
+#line 502 "parse-gram.y"
     {
        current_type = (yyvsp[(1) - (1)].uniqstr);
+       tag_seen = true;
      }
     break;
 
-  case 53:
-#line 362 "parse-gram.y"
+  case 71:
+/* Line 1778 of yacc.c  */
+#line 507 "parse-gram.y"
     {
        symbol_class_set ((yyvsp[(1) - (1)].symbol), current_class, (yylsp[(1) - (1)]), true);
        symbol_type_set ((yyvsp[(1) - (1)].symbol), current_type, (yylsp[(1) - (1)]));
      }
     break;
 
-  case 54:
-#line 367 "parse-gram.y"
+  case 72:
+/* Line 1778 of yacc.c  */
+#line 512 "parse-gram.y"
     {
       symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
       symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)]));
@@ -2051,8 +2710,9 @@
     }
     break;
 
-  case 55:
-#line 373 "parse-gram.y"
+  case 73:
+/* Line 1778 of yacc.c  */
+#line 518 "parse-gram.y"
     {
       symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
       symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)]));
@@ -2060,8 +2720,9 @@
     }
     break;
 
-  case 56:
-#line 379 "parse-gram.y"
+  case 74:
+/* Line 1778 of yacc.c  */
+#line 524 "parse-gram.y"
     {
       symbol_class_set ((yyvsp[(1) - (3)].symbol), current_class, (yylsp[(1) - (3)]), true);
       symbol_type_set ((yyvsp[(1) - (3)].symbol), current_type, (yylsp[(1) - (3)]));
@@ -2070,94 +2731,184 @@
     }
     break;
 
-  case 63:
-#line 409 "parse-gram.y"
+  case 81:
+/* Line 1778 of yacc.c  */
+#line 554 "parse-gram.y"
     {
       yyerrok;
     }
     break;
 
-  case 64:
-#line 415 "parse-gram.y"
-    { current_lhs = (yyvsp[(1) - (1)].symbol); current_lhs_location = (yylsp[(1) - (1)]); }
+  case 82:
+/* Line 1778 of yacc.c  */
+#line 560 "parse-gram.y"
+    { current_lhs ((yyvsp[(1) - (2)].symbol), (yylsp[(1) - (2)]), (yyvsp[(2) - (2)].named_ref)); }
     break;
 
-  case 66:
-#line 419 "parse-gram.y"
+  case 83:
+/* Line 1778 of yacc.c  */
+#line 561 "parse-gram.y"
+    {
+    /* Free the current lhs. */
+    current_lhs (0, (yylsp[(1) - (4)]), 0);
+  }
+    break;
+
+  case 84:
+/* Line 1778 of yacc.c  */
+#line 568 "parse-gram.y"
     { grammar_current_rule_end ((yylsp[(1) - (1)])); }
     break;
 
-  case 67:
-#line 420 "parse-gram.y"
+  case 85:
+/* Line 1778 of yacc.c  */
+#line 569 "parse-gram.y"
     { grammar_current_rule_end ((yylsp[(3) - (3)])); }
     break;
 
-  case 69:
-#line 426 "parse-gram.y"
-    { grammar_current_rule_begin (current_lhs, current_lhs_location); }
+  case 87:
+/* Line 1778 of yacc.c  */
+#line 575 "parse-gram.y"
+    { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
+				  current_lhs_named_ref); }
     break;
 
-  case 70:
-#line 428 "parse-gram.y"
-    { grammar_current_rule_symbol_append ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)])); }
+  case 88:
+/* Line 1778 of yacc.c  */
+#line 578 "parse-gram.y"
+    { grammar_current_rule_symbol_append ((yyvsp[(2) - (3)].symbol), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].named_ref)); }
     break;
 
-  case 72:
-#line 431 "parse-gram.y"
+  case 89:
+/* Line 1778 of yacc.c  */
+#line 580 "parse-gram.y"
+    { grammar_current_rule_action_append ((yyvsp[(2) - (3)].code), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].named_ref)); }
+    break;
+
+  case 90:
+/* Line 1778 of yacc.c  */
+#line 582 "parse-gram.y"
     { grammar_current_rule_prec_set ((yyvsp[(3) - (3)].symbol), (yylsp[(3) - (3)])); }
     break;
 
-  case 73:
-#line 433 "parse-gram.y"
+  case 91:
+/* Line 1778 of yacc.c  */
+#line 584 "parse-gram.y"
     { grammar_current_rule_dprec_set ((yyvsp[(3) - (3)].integer), (yylsp[(3) - (3)])); }
     break;
 
-  case 74:
-#line 435 "parse-gram.y"
+  case 92:
+/* Line 1778 of yacc.c  */
+#line 586 "parse-gram.y"
     { grammar_current_rule_merge_set ((yyvsp[(3) - (3)].uniqstr), (yylsp[(3) - (3)])); }
     break;
 
-  case 75:
-#line 439 "parse-gram.y"
-    { (yyval.symbol) = (yyvsp[(1) - (1)].symbol); }
+  case 93:
+/* Line 1778 of yacc.c  */
+#line 590 "parse-gram.y"
+    { (yyval.named_ref) = 0; }
     break;
 
-  case 76:
-#line 440 "parse-gram.y"
-    { (yyval.symbol) = (yyvsp[(1) - (1)].symbol); }
+  case 94:
+/* Line 1778 of yacc.c  */
+#line 592 "parse-gram.y"
+    { (yyval.named_ref) = named_ref_new((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
     break;
 
-  case 77:
-#line 456 "parse-gram.y"
-    { grammar_current_rule_action_append (last_string, last_braced_code_loc); }
+  case 96:
+/* Line 1778 of yacc.c  */
+#line 604 "parse-gram.y"
+    { (yyval.uniqstr) = uniqstr_new ((yyvsp[(1) - (1)].chars)); }
     break;
 
-  case 79:
-#line 463 "parse-gram.y"
+  case 97:
+/* Line 1778 of yacc.c  */
+#line 609 "parse-gram.y"
+    { (yyval.chars) = ""; }
+    break;
+
+  case 98:
+/* Line 1778 of yacc.c  */
+#line 610 "parse-gram.y"
+    { (yyval.chars) = (yyvsp[(1) - (1)].uniqstr); }
+    break;
+
+  case 100:
+/* Line 1778 of yacc.c  */
+#line 621 "parse-gram.y"
+    {
+      code_props plain_code;
+      (yyvsp[(1) - (1)].code)[strlen ((yyvsp[(1) - (1)].code)) - 1] = '\n';
+      code_props_plain_init (&plain_code, (yyvsp[(1) - (1)].code)+1, (yylsp[(1) - (1)]));
+      code_props_translate_code (&plain_code);
+      gram_scanner_last_string_free ();
+      (yyval.chars) = plain_code.code;
+    }
+    break;
+
+  case 101:
+/* Line 1778 of yacc.c  */
+#line 641 "parse-gram.y"
+    { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
+    break;
+
+  case 102:
+/* Line 1778 of yacc.c  */
+#line 643 "parse-gram.y"
+    {
+      (yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)]));
+      symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
+      symbol_user_token_number_set ((yyval.symbol), (yyvsp[(1) - (1)].character), (yylsp[(1) - (1)]));
+    }
+    break;
+
+  case 103:
+/* Line 1778 of yacc.c  */
+#line 651 "parse-gram.y"
+    { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
+    break;
+
+  case 106:
+/* Line 1778 of yacc.c  */
+#line 663 "parse-gram.y"
     {
       (yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[(1) - (1)].chars)), (yylsp[(1) - (1)]));
       symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
     }
     break;
 
-  case 80:
-#line 472 "parse-gram.y"
-    { (yyval.chars) = (yyvsp[(1) - (1)].chars); }
-    break;
-
-  case 82:
-#line 479 "parse-gram.y"
+  case 108:
+/* Line 1778 of yacc.c  */
+#line 672 "parse-gram.y"
     {
-      muscle_code_grow ("epilogue", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]));
-      scanner_last_string_free ();
+      code_props plain_code;
+      code_props_plain_init (&plain_code, (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]));
+      code_props_translate_code (&plain_code);
+      gram_scanner_last_string_free ();
+      muscle_code_grow ("epilogue", plain_code.code, (yylsp[(2) - (2)]));
+      code_scanner_last_string_free ();
     }
     break;
 
 
-/* Line 1267 of yacc.c.  */
-#line 2159 "parse-gram.c"
-      default: break;
-    }
+/* Line 1778 of yacc.c  */
+#line 2896 "parse-gram.c"
+        default: break;
+      }
+    if (yychar_backup != yychar)
+      YY_LAC_DISCARD ("yychar change");
+  }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -2186,6 +2937,10 @@
 | yyerrlab -- here on detecting error |
 `------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -2193,45 +2948,47 @@
 #if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyesa, &yyes, &yyes_capacity, \
+                                        yyssp, yytoken)
       {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (yymsg);
-	  }
-	else
-	  {
-	    yyerror (YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        if (yychar != YYEMPTY)
+          YY_LAC_ESTABLISH;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
-  yyerror_range[0] = yylloc;
+  yyerror_range[1] = yylloc;
 
   if (yyerrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
+      /* If just tried and failed to reuse lookahead token after an
 	 error, discard it.  */
 
       if (yychar <= YYEOF)
@@ -2248,7 +3005,7 @@
 	}
     }
 
-  /* Else will try to reuse look-ahead token after shifting the error
+  /* Else will try to reuse lookahead token after shifting the error
      token.  */
   goto yyerrlab1;
 
@@ -2264,7 +3021,7 @@
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  yyerror_range[0] = yylsp[1-yylen];
+  yyerror_range[1] = yylsp[1-yylen];
   /* Do not reclaim the symbols of the rule which action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
@@ -2283,7 +3040,7 @@
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
+      if (!yypact_value_is_default (yyn))
 	{
 	  yyn += YYTERROR;
 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -2298,7 +3055,7 @@
       if (yyssp == yyss)
 	YYABORT;
 
-      yyerror_range[0] = *yylsp;
+      yyerror_range[1] = *yylsp;
       yydestruct ("Error: popping",
 		  yystos[yystate], yyvsp, yylsp);
       YYPOPSTACK (1);
@@ -2306,15 +3063,18 @@
       YY_STACK_PRINT (yyss, yyssp);
     }
 
-  if (yyn == YYFINAL)
-    YYACCEPT;
+  /* If the stack popping above didn't lose the initial context for the
+     current lookahead token, the shift below will for sure.  */
+  YY_LAC_DISCARD ("error recovery");
 
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 
-  yyerror_range[1] = yylloc;
+  yyerror_range[2] = yylloc;
   /* Using YYLLOC is tempting, but would change the location of
-     the look-ahead.  YYLOC is available though.  */
-  YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+     the lookahead.  YYLOC is available though.  */
+  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
   *++yylsp = yyloc;
 
   /* Shift the error token.  */
@@ -2338,7 +3098,7 @@
   yyresult = 1;
   goto yyreturn;
 
-#ifndef yyoverflow
+#if 1
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -2349,9 +3109,14 @@
 #endif
 
 yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval, &yylloc);
+  if (yychar != YYEMPTY)
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, &yylloc);
+    }
   /* Do not reclaim the symbols of the rule which action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
@@ -2366,6 +3131,8 @@
   if (yyss != yyssa)
     YYSTACK_FREE (yyss);
 #endif
+  if (yyes != yyesa)
+    YYSTACK_FREE (yyes);
 #if YYERROR_VERBOSE
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
@@ -2375,7 +3142,8 @@
 }
 
 
-#line 485 "parse-gram.y"
+/* Line 2041 of yacc.c  */
+#line 682 "parse-gram.y"
 
 
 
@@ -2395,7 +3163,7 @@
   loc.start = rhs[n].end;
   loc.end = rhs[n].end;
 
-  /* Ignore empty nonterminals the start of the the right-hand side.
+  /* Ignore empty nonterminals the start of the right-hand side.
      Do not bother to ignore them at the end of the right-hand side,
      since empty nonterminals have the same end as their predecessors.  */
   for (i = 1; i <= n; i++)
@@ -2432,42 +3200,35 @@
 
   /* Strip the surrounding '{' and '}', and any blanks just inside
      the braces.  */
-  while (*--p == ' ' || *p == '\t')
-    continue;
+  --p;
+  while (c_isspace ((unsigned char) *p))
+    --p;
   p[1] = '\0';
-  while (*++decl == ' ' || *decl == '\t')
-    continue;
+  ++decl;
+  while (c_isspace ((unsigned char) *decl))
+    ++decl;
 
   if (! name_start)
     complain_at (loc, _("missing identifier in parameter declaration"));
   else
     {
-      char *name;
-      size_t name_len;
-
-      for (name_len = 1;
-	   memchr (alphanum, name_start[name_len], sizeof alphanum);
-	   name_len++)
-	continue;
-
-      name = xmalloc (name_len + 1);
-      memcpy (name, name_start, name_len);
-      name[name_len] = '\0';
+      char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
       muscle_pair_list_grow (type, decl, name);
       free (name);
     }
 
-  scanner_last_string_free ();
+  gram_scanner_last_string_free ();
 }
 
+
 static void
 version_check (location const *loc, char const *version)
 {
   if (strverscmp (version, PACKAGE_VERSION) > 0)
     {
       complain_at (*loc, "require bison %s, but have %s",
-		   version, PACKAGE_VERSION);
-      exit (63);
+                   version, PACKAGE_VERSION);
+      exit (EX_MISMATCH);
     }
 }
 
@@ -2483,3 +3244,15 @@
   return yytname[YYTRANSLATE (type)];
 }
 
+static char const *
+char_name (char c)
+{
+  if (c == '\'')
+    return "'\\''";
+  else
+    {
+      char buf[4];
+      buf[0] = '\''; buf[1] = c; buf[2] = '\''; buf[3] = '\0';
+      return quotearg_style (escape_quoting_style, buf);
+    }
+}
diff --git a/src/parse-gram.h b/src/parse-gram.h
index 2d37fc1..c709098 100644
--- a/src/parse-gram.h
+++ b/src/parse-gram.h
@@ -1,24 +1,21 @@
-/* A Bison parser, made by GNU Bison 2.2a.  */
+/* A Bison parser, made by GNU Bison 2.6.5.63-3ada.  */
 
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
+/* Bison interface for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2012 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.
-
+   the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -29,16 +26,34 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
+#ifndef YY_GRAM__________SRC_PARSE_GRAM_H_INCLUDED
+# define YY_GRAM__________SRC_PARSE_GRAM_H_INCLUDED
+/* Enabling traces.  */
+#ifndef GRAM_DEBUG
+# if defined YYDEBUG
+#  if YYDEBUG
+#   define GRAM_DEBUG 1
+#  else
+#   define GRAM_DEBUG 0
+#  endif
+# else /* ! defined YYDEBUG */
+#  define GRAM_DEBUG 1
+# endif /* ! defined YYDEBUG */
+#endif  /* ! defined GRAM_DEBUG */
+#if GRAM_DEBUG
+extern int gram_debug;
+#endif
+
 /* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
+#ifndef GRAM_TOKENTYPE
+# define GRAM_TOKENTYPE
    /* Put the tokens into the symbol table, so that GDB and other debuggers
       know about them.  */
-   enum yytokentype {
+   enum gram_tokentype {
      GRAM_EOF = 0,
      STRING = 258,
      INT = 259,
@@ -47,13 +62,13 @@
      PERCENT_TYPE = 262,
      PERCENT_DESTRUCTOR = 263,
      PERCENT_PRINTER = 264,
-     PERCENT_UNION = 265,
-     PERCENT_LEFT = 266,
-     PERCENT_RIGHT = 267,
-     PERCENT_NONASSOC = 268,
-     PERCENT_PREC = 269,
-     PERCENT_DPREC = 270,
-     PERCENT_MERGE = 271,
+     PERCENT_LEFT = 265,
+     PERCENT_RIGHT = 266,
+     PERCENT_NONASSOC = 267,
+     PERCENT_PREC = 268,
+     PERCENT_DPREC = 269,
+     PERCENT_MERGE = 270,
+     PERCENT_CODE = 271,
      PERCENT_DEBUG = 272,
      PERCENT_DEFAULT_PREC = 273,
      PERCENT_DEFINE = 274,
@@ -64,31 +79,37 @@
      PERCENT_FILE_PREFIX = 279,
      PERCENT_GLR_PARSER = 280,
      PERCENT_INITIAL_ACTION = 281,
-     PERCENT_LEX_PARAM = 282,
-     PERCENT_LOCATIONS = 283,
-     PERCENT_NAME_PREFIX = 284,
-     PERCENT_NO_DEFAULT_PREC = 285,
-     PERCENT_NO_LINES = 286,
-     PERCENT_NONDETERMINISTIC_PARSER = 287,
-     PERCENT_OUTPUT = 288,
-     PERCENT_PARSE_PARAM = 289,
-     PERCENT_PURE_PARSER = 290,
-     PERCENT_REQUIRE = 291,
-     PERCENT_SKELETON = 292,
-     PERCENT_START = 293,
-     PERCENT_TOKEN_TABLE = 294,
-     PERCENT_VERBOSE = 295,
-     PERCENT_YACC = 296,
-     TYPE = 297,
-     EQUAL = 298,
-     SEMICOLON = 299,
-     PIPE = 300,
-     ID = 301,
-     ID_COLON = 302,
-     PERCENT_PERCENT = 303,
-     PROLOGUE = 304,
-     EPILOGUE = 305,
-     BRACED_CODE = 306
+     PERCENT_LANGUAGE = 282,
+     PERCENT_LEX_PARAM = 283,
+     PERCENT_LOCATIONS = 284,
+     PERCENT_NAME_PREFIX = 285,
+     PERCENT_NO_DEFAULT_PREC = 286,
+     PERCENT_NO_LINES = 287,
+     PERCENT_NONDETERMINISTIC_PARSER = 288,
+     PERCENT_OUTPUT = 289,
+     PERCENT_PARSE_PARAM = 290,
+     PERCENT_PURE_PARSER = 291,
+     PERCENT_REQUIRE = 292,
+     PERCENT_SKELETON = 293,
+     PERCENT_START = 294,
+     PERCENT_TOKEN_TABLE = 295,
+     PERCENT_VERBOSE = 296,
+     PERCENT_YACC = 297,
+     BRACED_CODE = 298,
+     BRACKETED_ID = 299,
+     CHAR = 300,
+     EPILOGUE = 301,
+     EQUAL = 302,
+     ID = 303,
+     ID_COLON = 304,
+     PERCENT_PERCENT = 305,
+     PIPE = 306,
+     PROLOGUE = 307,
+     SEMICOLON = 308,
+     TYPE = 309,
+     TYPE_TAG_ANY = 310,
+     TYPE_TAG_NONE = 311,
+     PERCENT_UNION = 312
    };
 #endif
 /* Tokens.  */
@@ -100,13 +121,13 @@
 #define PERCENT_TYPE 262
 #define PERCENT_DESTRUCTOR 263
 #define PERCENT_PRINTER 264
-#define PERCENT_UNION 265
-#define PERCENT_LEFT 266
-#define PERCENT_RIGHT 267
-#define PERCENT_NONASSOC 268
-#define PERCENT_PREC 269
-#define PERCENT_DPREC 270
-#define PERCENT_MERGE 271
+#define PERCENT_LEFT 265
+#define PERCENT_RIGHT 266
+#define PERCENT_NONASSOC 267
+#define PERCENT_PREC 268
+#define PERCENT_DPREC 269
+#define PERCENT_MERGE 270
+#define PERCENT_CODE 271
 #define PERCENT_DEBUG 272
 #define PERCENT_DEFAULT_PREC 273
 #define PERCENT_DEFINE 274
@@ -117,67 +138,91 @@
 #define PERCENT_FILE_PREFIX 279
 #define PERCENT_GLR_PARSER 280
 #define PERCENT_INITIAL_ACTION 281
-#define PERCENT_LEX_PARAM 282
-#define PERCENT_LOCATIONS 283
-#define PERCENT_NAME_PREFIX 284
-#define PERCENT_NO_DEFAULT_PREC 285
-#define PERCENT_NO_LINES 286
-#define PERCENT_NONDETERMINISTIC_PARSER 287
-#define PERCENT_OUTPUT 288
-#define PERCENT_PARSE_PARAM 289
-#define PERCENT_PURE_PARSER 290
-#define PERCENT_REQUIRE 291
-#define PERCENT_SKELETON 292
-#define PERCENT_START 293
-#define PERCENT_TOKEN_TABLE 294
-#define PERCENT_VERBOSE 295
-#define PERCENT_YACC 296
-#define TYPE 297
-#define EQUAL 298
-#define SEMICOLON 299
-#define PIPE 300
-#define ID 301
-#define ID_COLON 302
-#define PERCENT_PERCENT 303
-#define PROLOGUE 304
-#define EPILOGUE 305
-#define BRACED_CODE 306
+#define PERCENT_LANGUAGE 282
+#define PERCENT_LEX_PARAM 283
+#define PERCENT_LOCATIONS 284
+#define PERCENT_NAME_PREFIX 285
+#define PERCENT_NO_DEFAULT_PREC 286
+#define PERCENT_NO_LINES 287
+#define PERCENT_NONDETERMINISTIC_PARSER 288
+#define PERCENT_OUTPUT 289
+#define PERCENT_PARSE_PARAM 290
+#define PERCENT_PURE_PARSER 291
+#define PERCENT_REQUIRE 292
+#define PERCENT_SKELETON 293
+#define PERCENT_START 294
+#define PERCENT_TOKEN_TABLE 295
+#define PERCENT_VERBOSE 296
+#define PERCENT_YACC 297
+#define BRACED_CODE 298
+#define BRACKETED_ID 299
+#define CHAR 300
+#define EPILOGUE 301
+#define EQUAL 302
+#define ID 303
+#define ID_COLON 304
+#define PERCENT_PERCENT 305
+#define PIPE 306
+#define PROLOGUE 307
+#define SEMICOLON 308
+#define TYPE 309
+#define TYPE_TAG_ANY 310
+#define TYPE_TAG_NONE 311
+#define PERCENT_UNION 312
 
 
 
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 94 "parse-gram.y"
+#if ! defined GRAM_STYPE && ! defined GRAM_STYPE_IS_DECLARED
+typedef union GRAM_STYPE
 {
+/* Line 2042 of yacc.c  */
+#line 115 "parse-gram.y"
+
   symbol *symbol;
   symbol_list *list;
   int integer;
-  char *chars;
+  char const *chars;
+  char *code;
   assoc assoc;
   uniqstr uniqstr;
-}
-/* Line 1529 of yacc.c.  */
-#line 162 "parse-gram.h"
-	YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
+  unsigned char character;
+  named_ref *named_ref;
+
+
+/* Line 2042 of yacc.c  */
+#line 194 "parse-gram.h"
+} GRAM_STYPE;
+# define GRAM_STYPE_IS_TRIVIAL 1
+# define gram_stype GRAM_STYPE /* obsolescent; will be withdrawn */
+# define GRAM_STYPE_IS_DECLARED 1
 #endif
 
-
-
-#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE
+#if ! defined GRAM_LTYPE && ! defined GRAM_LTYPE_IS_DECLARED
+typedef struct GRAM_LTYPE
 {
   int first_line;
   int first_column;
   int last_line;
   int last_column;
-} YYLTYPE;
-# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
-# define YYLTYPE_IS_DECLARED 1
-# define YYLTYPE_IS_TRIVIAL 1
+} GRAM_LTYPE;
+# define gram_ltype GRAM_LTYPE /* obsolescent; will be withdrawn */
+# define GRAM_LTYPE_IS_DECLARED 1
+# define GRAM_LTYPE_IS_TRIVIAL 1
 #endif
 
 
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int gram_parse (void *YYPARSE_PARAM);
+#else
+int gram_parse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int gram_parse (void);
+#else
+int gram_parse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_GRAM__________SRC_PARSE_GRAM_H_INCLUDED  */
diff --git a/src/parse-gram.y b/src/parse-gram.y
index e189e14..5f77a5b 100644
--- a/src/parse-gram.y
+++ b/src/parse-gram.y
@@ -1,12 +1,12 @@
 %{/* Bison Grammar Parser                             -*- C -*-
 
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,24 +15,25 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301  USA
-*/
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
+#include "c-ctype.h"
 #include "complain.h"
 #include "conflicts.h"
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
-#include "muscle_tab.h"
+#include "muscle-tab.h"
+#include "named-ref.h"
 #include "quotearg.h"
 #include "reader.h"
 #include "symlist.h"
-#include "strverscmp.h"
+#include "scan-gram.h"
+#include "scan-code.h"
+#include "xmemdup0.h"
 
 #define YYLLOC_DEFAULT(Current, Rhs, N)  (Current) = lloc_default (Rhs, N)
 static YYLTYPE lloc_default (YYLTYPE const *, int);
@@ -49,55 +50,78 @@
 	gram_error (&yylloc, Msg)
 static void gram_error (location const *, char const *);
 
-static void add_param (char const *, char *, location);
+static char const *char_name (char);
+
+/** Add a lex-param or a parse-param.
+ *
+ * \param type  \a lex_param or \a parse_param
+ * \param decl  the formal argument
+ * \param loc   the location in the source.
+ */
+static void add_param (char const *type, char *decl, location loc);
+
 
 static symbol_class current_class = unknown_sym;
-static uniqstr current_type = 0;
-static symbol *current_lhs;
+static uniqstr current_type = NULL;
+static symbol *current_lhs_symbol;
 static location current_lhs_location;
+static named_ref *current_lhs_named_ref;
 static int current_prec = 0;
 
-#ifdef UINT_FAST8_MAX
-# define YYTYPE_UINT8 uint_fast8_t
-#endif
-#ifdef INT_FAST8_MAX
-# define YYTYPE_INT8 int_fast8_t
-#endif
-#ifdef UINT_FAST16_MAX
-# define YYTYPE_UINT16 uint_fast16_t
-#endif
-#ifdef INT_FAST16_MAX
-# define YYTYPE_INT16 int_fast16_t
-#endif
+/** Set the new current left-hand side symbol, possibly common
+ * to several right-hand side parts of rule.
+ */
+static
+void
+current_lhs(symbol *sym, location loc, named_ref *ref)
+{
+  current_lhs_symbol = sym;
+  current_lhs_location = loc;
+  /* In order to simplify memory management, named references for lhs
+     are always assigned by deep copy into the current symbol_list
+     node.  This is because a single named-ref in the grammar may
+     result in several uses when the user factors lhs between several
+     rules using "|".  Therefore free the parser's original copy.  */
+  free (current_lhs_named_ref);
+  current_lhs_named_ref = ref;
+}
+
+
+#define YYTYPE_INT16 int_fast16_t
+#define YYTYPE_INT8 int_fast8_t
+#define YYTYPE_UINT16 uint_fast16_t
+#define YYTYPE_UINT8 uint_fast8_t
 %}
 
 %debug
-%verbose
+%define api.prefix "gram_"
+%define api.pure
+%define parse.lac full
 %defines
-%locations
-%pure-parser
 %error-verbose
-%defines
-%name-prefix="gram_"
+%expect 0
+%locations
+%verbose
 
 %initial-action
 {
   /* Bison's grammar can initial empty locations, hence a default
      location is needed. */
-  @$.start.file   = @$.end.file   = current_file;
-  @$.start.line   = @$.end.line   = 1;
-  @$.start.column = @$.end.column = 0;
+  boundary_set (&@$.start, current_file, 1, 1);
+  boundary_set (&@$.end, current_file, 1, 1);
 }
 
-/* Only NUMBERS have a value.  */
 %union
 {
   symbol *symbol;
   symbol_list *list;
   int integer;
-  char *chars;
+  char const *chars;
+  char *code;
   assoc assoc;
   uniqstr uniqstr;
+  unsigned char character;
+  named_ref *named_ref;
 };
 
 /* Define the tokens together with their human representation.  */
@@ -109,10 +133,8 @@
 %token PERCENT_NTERM       "%nterm"
 
 %token PERCENT_TYPE        "%type"
-%token PERCENT_DESTRUCTOR  "%destructor {...}"
-%token PERCENT_PRINTER     "%printer {...}"
-
-%token PERCENT_UNION       "%union {...}"
+%token PERCENT_DESTRUCTOR  "%destructor"
+%token PERCENT_PRINTER     "%printer"
 
 %token PERCENT_LEFT        "%left"
 %token PERCENT_RIGHT       "%right"
@@ -128,6 +150,7 @@
 `----------------------*/
 
 %token
+  PERCENT_CODE            "%code"
   PERCENT_DEBUG           "%debug"
   PERCENT_DEFAULT_PREC    "%default-prec"
   PERCENT_DEFINE          "%define"
@@ -137,8 +160,9 @@
   PERCENT_EXPECT_RR	  "%expect-rr"
   PERCENT_FILE_PREFIX     "%file-prefix"
   PERCENT_GLR_PARSER      "%glr-parser"
-  PERCENT_INITIAL_ACTION  "%initial-action {...}"
-  PERCENT_LEX_PARAM       "%lex-param {...}"
+  PERCENT_INITIAL_ACTION  "%initial-action"
+  PERCENT_LANGUAGE        "%language"
+  PERCENT_LEX_PARAM       "%lex-param"
   PERCENT_LOCATIONS       "%locations"
   PERCENT_NAME_PREFIX     "%name-prefix"
   PERCENT_NO_DEFAULT_PREC "%no-default-prec"
@@ -146,7 +170,7 @@
   PERCENT_NONDETERMINISTIC_PARSER
 			  "%nondeterministic-parser"
   PERCENT_OUTPUT          "%output"
-  PERCENT_PARSE_PARAM     "%parse-param {...}"
+  PERCENT_PARSE_PARAM     "%parse-param"
   PERCENT_PURE_PARSER     "%pure-parser"
   PERCENT_REQUIRE	  "%require"
   PERCENT_SKELETON        "%skeleton"
@@ -156,50 +180,54 @@
   PERCENT_YACC            "%yacc"
 ;
 
-%token TYPE            "type"
+%token BRACED_CODE     "{...}"
+%token BRACKETED_ID    "[identifier]"
+%token CHAR            "char"
+%token EPILOGUE        "epilogue"
 %token EQUAL           "="
-%token SEMICOLON       ";"
-%token PIPE            "|"
 %token ID              "identifier"
 %token ID_COLON        "identifier:"
 %token PERCENT_PERCENT "%%"
+%token PIPE            "|"
 %token PROLOGUE        "%{...%}"
-%token EPILOGUE        "epilogue"
-%token BRACED_CODE     "{...}"
+%token SEMICOLON       ";"
+%token TYPE            "type"
+%token TYPE_TAG_ANY    "<*>"
+%token TYPE_TAG_NONE   "<>"
 
+%type <character> CHAR
+%printer { fputs (char_name ($$), stderr); } CHAR
 
-%type <chars> STRING string_content
-	      "%destructor {...}"
-	      "%initial-action {...}"
-	      "%lex-param {...}"
-	      "%parse-param {...}"
-	      "%printer {...}"
-	      "%union {...}"
-	      PROLOGUE EPILOGUE
-%printer { fprintf (stderr, "\"%s\"", $$); }
-	      STRING string_content
+/* braceless is not to be used for rule or symbol actions, as it
+   calls code_props_plain_init.  */
+%type <chars> STRING "%{...%}" EPILOGUE braceless content.opt
+%type <code> "{...}"
+%printer { fputs (quotearg_style (c_quoting_style, $$), stderr); }
+	 STRING
 %printer { fprintf (stderr, "{\n%s\n}", $$); }
-	      "%destructor {...}"
-	      "%initial-action {...}"
-	      "%lex-param {...}"
-	      "%parse-param {...}"
-	      "%printer {...}"
-	      "%union {...}"
-	      PROLOGUE EPILOGUE
-%type <uniqstr> TYPE
+	 braceless content.opt "{...}" "%{...%}" EPILOGUE
+
+%type <uniqstr> BRACKETED_ID ID ID_COLON TYPE variable
+%printer { fputs ($$, stderr); } <uniqstr>
+%printer { fprintf (stderr, "[%s]", $$); } BRACKETED_ID
+%printer { fprintf (stderr, "%s:", $$); } ID_COLON
 %printer { fprintf (stderr, "<%s>", $$); } TYPE
+
 %type <integer> INT
-%printer { fprintf (stderr, "%d", $$); } INT
-%type <symbol> ID symbol string_as_id
-%printer { fprintf (stderr, "%s", $$->tag); } ID symbol string_as_id
-%type <symbol> ID_COLON
-%printer { fprintf (stderr, "%s:", $$->tag); } ID_COLON
+%printer { fprintf (stderr, "%d", $$); } <integer>
+
+%type <symbol> id id_colon string_as_id symbol symbol.prec
+%printer { fprintf (stderr, "%s", $$->tag); } <symbol>
+%printer { fprintf (stderr, "%s:", $$->tag); } id_colon
+
 %type <assoc> precedence_declarator
-%type <list>  symbols.1
+%type <list>  symbols.1 symbols.prec generic_symlist generic_symlist_item
+%type <named_ref> named_ref.opt
+
 %%
 
 input:
-  declarations "%%" grammar epilogue.opt
+  prologue_declarations "%%" grammar epilogue.opt
 ;
 
 
@@ -207,48 +235,107 @@
 	| Declarations: before the first %%.  |
 	`------------------------------------*/
 
-declarations:
+prologue_declarations:
   /* Nothing */
-| declarations declaration
+| prologue_declarations prologue_declaration
 ;
 
-declaration:
+prologue_declaration:
   grammar_declaration
-| PROLOGUE                                 { prologue_augment ($1, @1); }
-| "%debug"                                 { debug_flag = true; }
-| "%define" string_content
+| "%{...%}"
     {
-      static char one[] = "1";
-      muscle_insert ($2, one);
+      code_props plain_code;
+      code_props_plain_init (&plain_code, $1, @1);
+      code_props_translate_code (&plain_code);
+      gram_scanner_last_string_free ();
+      muscle_code_grow (union_seen ? "post_prologue" : "pre_prologue",
+                        plain_code.code, @1);
+      code_scanner_last_string_free ();
     }
-| "%define" string_content string_content  { muscle_insert ($2, $3); }
-| "%defines"                               { defines_flag = true; }
-| "%error-verbose"                         { error_verbose = true; }
-| "%expect" INT                            { expected_sr_conflicts = $2; }
-| "%expect-rr" INT			   { expected_rr_conflicts = $2; }
-| "%file-prefix" "=" string_content        { spec_file_prefix = $3; }
+| "%debug"                         { debug = true; }
+| "%define" variable content.opt
+    {
+      muscle_percent_define_insert ($2, @2, $3,
+                                    MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+    }
+| "%defines"                       { defines_flag = true; }
+| "%defines" STRING
+    {
+      defines_flag = true;
+      spec_defines_file = xstrdup ($2);
+    }
+| "%error-verbose"                 { error_verbose = true; }
+| "%expect" INT                    { expected_sr_conflicts = $2; }
+| "%expect-rr" INT		   { expected_rr_conflicts = $2; }
+| "%file-prefix" STRING            { spec_file_prefix = $2; }
+| "%file-prefix" "=" STRING        { spec_file_prefix = $3; } /* deprecated */
 | "%glr-parser"
     {
       nondeterministic_parser = true;
       glr_parser = true;
     }
-| "%initial-action {...}"
+| "%initial-action" "{...}"
     {
-      muscle_code_grow ("initial_action", $1, @1);
+      code_props action;
+      code_props_symbol_action_init (&action, $2, @2);
+      code_props_translate_code (&action);
+      gram_scanner_last_string_free ();
+      muscle_code_grow ("initial_action", action.code, @2);
+      code_scanner_last_string_free ();
     }
-| "%lex-param {...}"			   { add_param ("lex_param", $1, @1); }
-| "%locations"                             { locations_flag = true; }
-| "%name-prefix" "=" string_content        { spec_name_prefix = $3; }
-| "%no-lines"                              { no_lines_flag = true; }
-| "%nondeterministic-parser"		   { nondeterministic_parser = true; }
-| "%output" "=" string_content             { spec_outfile = $3; }
-| "%parse-param {...}"			   { add_param ("parse_param", $1, @1); }
-| "%pure-parser"                           { pure_parser = true; }
-| "%require" string_content                { version_check (&@2, $2); }
-| "%skeleton" string_content               { skeleton = $2; }
-| "%token-table"                           { token_table_flag = true; }
-| "%verbose"                               { report_flag = report_states; }
-| "%yacc"                                  { yacc_flag = true; }
+| "%language" STRING		{ language_argmatch ($2, grammar_prio, @1); }
+| "%lex-param" "{...}"		{ add_param ("lex_param", $2, @2); }
+| "%locations"                  { locations_flag = true; }
+| "%name-prefix" STRING         { spec_name_prefix = $2; }
+| "%name-prefix" "=" STRING     { spec_name_prefix = $3; } /* deprecated */
+| "%no-lines"                   { no_lines_flag = true; }
+| "%nondeterministic-parser"	{ nondeterministic_parser = true; }
+| "%output" STRING              { spec_outfile = $2; }
+| "%output" "=" STRING          { spec_outfile = $3; }  /* deprecated */
+| "%parse-param" "{...}"	{ add_param ("parse_param", $2, @2); }
+| "%pure-parser"
+    {
+      /* %pure-parser is deprecated in favor of `%define api.pure', so use
+         `%define api.pure' in a backward-compatible manner here.  First, don't
+         complain if %pure-parser is specified multiple times.  */
+      if (!muscle_find_const ("percent_define(api.pure)"))
+        muscle_percent_define_insert ("api.pure", @1, "",
+                                      MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+      /* In all cases, use api.pure now so that the backend doesn't complain if
+         the skeleton ignores api.pure, but do warn now if there's a previous
+         conflicting definition from an actual %define.  */
+      if (!muscle_percent_define_flag_if ("api.pure"))
+        muscle_percent_define_insert ("api.pure", @1, "",
+                                      MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+    }
+| "%require" STRING             { version_check (&@2, $2); }
+| "%skeleton" STRING
+    {
+      char const *skeleton_user = $2;
+      if (mbschr (skeleton_user, '/'))
+        {
+          size_t dir_length = strlen (current_file);
+          char *skeleton_build;
+          while (dir_length && current_file[dir_length - 1] != '/')
+            --dir_length;
+          while (dir_length && current_file[dir_length - 1] == '/')
+            --dir_length;
+          skeleton_build =
+            xmalloc (dir_length + 1 + strlen (skeleton_user) + 1);
+          if (dir_length > 0)
+            {
+              memcpy (skeleton_build, current_file, dir_length);
+              skeleton_build[dir_length++] = '/';
+            }
+          strcpy (skeleton_build + dir_length, skeleton_user);
+          skeleton_user = uniqstr_new (skeleton_build);
+          free (skeleton_build);
+        }
+      skeleton_arg (skeleton_user, grammar_prio, @1);
+    }
+| "%token-table"                { token_table_flag = true; }
+| "%verbose"                    { report_flag |= report_states; }
+| "%yacc"                       { yacc_flag = true; }
 | /*FIXME: Err?  What is this horror doing here? */ ";"
 ;
 
@@ -259,35 +346,29 @@
     {
       grammar_start_symbol_set ($2, @2);
     }
-| "%union {...}"
+| "%destructor" "{...}" generic_symlist
     {
-      char const *body = $1;
-
-      if (typed)
-	{
-	  /* Concatenate the union bodies, turning the first one's
-	     trailing '}' into '\n', and omitting the second one's '{'.  */
-	  char *code = muscle_find ("stype");
-	  code[strlen (code) - 1] = '\n';
-	  body++;
-	}
-
-      typed = true;
-      muscle_code_grow ("stype", body, @1);
+      code_props code;
+      code_props_symbol_action_init (&code, $2, @2);
+      code_props_translate_code (&code);
+      {
+        symbol_list *list;
+        for (list = $3; list; list = list->next)
+          symbol_list_destructor_set (list, &code);
+        symbol_list_free ($3);
+      }
     }
-| "%destructor {...}" symbols.1
+| "%printer" "{...}" generic_symlist
     {
-      symbol_list *list;
-      for (list = $2; list; list = list->next)
-	symbol_destructor_set (list->sym, $1, @1);
-      symbol_list_free ($2);
-    }
-| "%printer {...}" symbols.1
-    {
-      symbol_list *list;
-      for (list = $2; list; list = list->next)
-	symbol_printer_set (list->sym, $1, @1);
-      symbol_list_free ($2);
+      code_props code;
+      code_props_symbol_action_init (&code, $2, @2);
+      code_props_translate_code (&code);
+      {
+        symbol_list *list;
+        for (list = $3; list; list = list->next)
+          symbol_list_printer_set (list, &code);
+        symbol_list_free ($3);
+      }
     }
 | "%default-prec"
     {
@@ -297,8 +378,44 @@
     {
       default_prec = false;
     }
+| "%code" braceless
+    {
+      /* Do not invoke muscle_percent_code_grow here since it invokes
+         muscle_user_name_list_grow.  */
+      muscle_code_grow ("percent_code()", $2, @2);
+      code_scanner_last_string_free ();
+    }
+| "%code" ID braceless
+    {
+      muscle_percent_code_grow ($2, @2, $3, @3);
+      code_scanner_last_string_free ();
+    }
 ;
 
+
+/*----------*
+ | %union.  |
+ *----------*/
+
+%token PERCENT_UNION "%union";
+
+union_name:
+  /* Nothing. */ {}
+| ID             { muscle_code_grow ("union_name", $1, @1); }
+;
+
+grammar_declaration:
+  "%union" union_name braceless
+    {
+      union_seen = true;
+      muscle_code_grow ("stype", $3, @3);
+      code_scanner_last_string_free ();
+    }
+;
+
+
+
+
 symbol_declaration:
   "%nterm" { current_class = nterm_sym; } symbol_defs.1
     {
@@ -313,21 +430,22 @@
 | "%type" TYPE symbols.1
     {
       symbol_list *list;
+      tag_seen = true;
       for (list = $3; list; list = list->next)
-	symbol_type_set (list->sym, $2, @2);
+	symbol_type_set (list->content.sym, $2, @2);
       symbol_list_free ($3);
     }
 ;
 
 precedence_declaration:
-  precedence_declarator type.opt symbols.1
+  precedence_declarator type.opt symbols.prec
     {
       symbol_list *list;
       ++current_prec;
       for (list = $3; list; list = list->next)
 	{
-	  symbol_type_set (list->sym, current_type, @2);
-	  symbol_precedence_set (list->sym, current_prec, $1, @1);
+	  symbol_type_set (list->content.sym, current_type, @2);
+	  symbol_precedence_set (list->content.sym, current_prec, $1, @1);
 	}
       symbol_list_free ($3);
       current_type = NULL;
@@ -342,14 +460,40 @@
 
 type.opt:
   /* Nothing. */ { current_type = NULL; }
-| TYPE           { current_type = $1; }
+| TYPE           { current_type = $1; tag_seen = true; }
 ;
 
-/* One or more nonterminals to be %typed. */
+/* Just like symbols.1 but accept INT for the sake of POSIX.  */
+symbols.prec:
+  symbol.prec
+    { $$ = symbol_list_sym_new ($1, @1); }
+| symbols.prec symbol.prec
+    { $$ = symbol_list_prepend ($1, symbol_list_sym_new ($2, @2)); }
+;
 
+symbol.prec:
+    symbol { $$ = $1; }
+  | symbol INT { $$ = $1; symbol_user_token_number_set ($1, $2, @2); }
+  ;
+
+/* One or more symbols to be %typed. */
 symbols.1:
-  symbol            { $$ = symbol_list_new ($1, @1); }
-| symbols.1 symbol  { $$ = symbol_list_prepend ($1, $2, @2); }
+  symbol
+    { $$ = symbol_list_sym_new ($1, @1); }
+| symbols.1 symbol
+    { $$ = symbol_list_prepend ($1, symbol_list_sym_new ($2, @2)); }
+;
+
+generic_symlist:
+  generic_symlist_item { $$ = $1; }
+| generic_symlist generic_symlist_item { $$ = symbol_list_prepend ($1, $2); }
+;
+
+generic_symlist_item:
+  symbol            { $$ = symbol_list_sym_new ($1, @1); }
+| TYPE              { $$ = symbol_list_type_new ($1, @1); }
+| "<*>"             { $$ = symbol_list_default_tagged_new (@1); }
+| "<>"             { $$ = symbol_list_default_tagless_new (@1); }
 ;
 
 /* One token definition.  */
@@ -357,25 +501,26 @@
   TYPE
      {
        current_type = $1;
+       tag_seen = true;
      }
-| ID
+| id
      {
        symbol_class_set ($1, current_class, @1, true);
        symbol_type_set ($1, current_type, @1);
      }
-| ID INT
+| id INT
     {
       symbol_class_set ($1, current_class, @1, true);
       symbol_type_set ($1, current_type, @1);
       symbol_user_token_number_set ($1, $2, @2);
     }
-| ID string_as_id
+| id string_as_id
     {
       symbol_class_set ($1, current_class, @1, true);
       symbol_type_set ($1, current_type, @1);
       symbol_make_alias ($1, $2, @$);
     }
-| ID INT string_as_id
+| id INT string_as_id
     {
       symbol_class_set ($1, current_class, @1, true);
       symbol_type_set ($1, current_type, @1);
@@ -412,7 +557,11 @@
 ;
 
 rules:
-  ID_COLON { current_lhs = $1; current_lhs_location = @1; } rhses.1
+  id_colon named_ref.opt { current_lhs ($1, @1, $2); } rhses.1
+  {
+    /* Free the current lhs. */
+    current_lhs (0, @1, 0);
+  }
 ;
 
 rhses.1:
@@ -423,10 +572,12 @@
 
 rhs:
   /* Nothing.  */
-    { grammar_current_rule_begin (current_lhs, current_lhs_location); }
-| rhs symbol
-    { grammar_current_rule_symbol_append ($2, @2); }
-| rhs action
+    { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
+				  current_lhs_named_ref); }
+| rhs symbol named_ref.opt
+    { grammar_current_rule_symbol_append ($2, @2, $3); }
+| rhs "{...}" named_ref.opt
+    { grammar_current_rule_action_append ($2, @2, $3); }
 | rhs "%prec" symbol
     { grammar_current_rule_prec_set ($3, @3); }
 | rhs "%dprec" INT
@@ -435,26 +586,75 @@
     { grammar_current_rule_merge_set ($3, @3); }
 ;
 
-symbol:
-  ID              { $$ = $1; }
-| string_as_id    { $$ = $1; }
+named_ref.opt:
+  /* Nothing. */ { $$ = 0; }
+|
+  BRACKETED_ID   { $$ = named_ref_new($1, @1); }
 ;
 
-/* Handle the semantics of an action specially, with a mid-rule
-   action, so that grammar_current_rule_action_append is invoked
-   immediately after the braced code is read by the scanner.
 
-   This implementation relies on the LALR(1) parsing algorithm.
-   If grammar_current_rule_action_append were executed in a normal
-   action for this rule, then when the input grammar contains two
-   successive actions, the scanner would have to read both actions
-   before reducing this rule.  That wouldn't work, since the scanner
-   relies on all preceding input actions being processed by
-   grammar_current_rule_action_append before it scans the next
-   action.  */
-action:
-    { grammar_current_rule_action_append (last_string, last_braced_code_loc); }
-  BRACED_CODE
+/*----------------------------*
+ | variable and content.opt.  |
+ *---------------------------*/
+
+/* The STRING form of variable is deprecated and is not M4-friendly.
+   For example, M4 fails for `%define "[" "value"'.  */
+variable:
+  ID
+| STRING { $$ = uniqstr_new ($1); }
+;
+
+/* Some content or empty by default. */
+content.opt:
+  /* Nothing. */   { $$ = ""; }
+| ID { $$ = $1; }
+| STRING
+;
+
+
+/*-------------*
+ | braceless.  |
+ *-------------*/
+
+braceless:
+  "{...}"
+    {
+      code_props plain_code;
+      $1[strlen ($1) - 1] = '\n';
+      code_props_plain_init (&plain_code, $1+1, @1);
+      code_props_translate_code (&plain_code);
+      gram_scanner_last_string_free ();
+      $$ = plain_code.code;
+    }
+;
+
+
+/*---------------*
+ | Identifiers.  |
+ *---------------*/
+
+/* Identifiers are returned as uniqstr values by the scanner.
+   Depending on their use, we may need to make them genuine symbols.  */
+
+id:
+  ID
+    { $$ = symbol_from_uniqstr ($1, @1); }
+| CHAR
+    {
+      $$ = symbol_get (char_name ($1), @1);
+      symbol_class_set ($$, token_sym, @1, false);
+      symbol_user_token_number_set ($$, $1, @1);
+    }
+;
+
+id_colon:
+  ID_COLON { $$ = symbol_from_uniqstr ($1, @1); }
+;
+
+
+symbol:
+  id
+| string_as_id
 ;
 
 /* A string used as an ID: quote it.  */
@@ -466,19 +666,16 @@
     }
 ;
 
-/* A string used for its contents.  Don't quote it.  */
-string_content:
-  STRING
-    { $$ = $1; }
-;
-
-
 epilogue.opt:
   /* Nothing.  */
 | "%%" EPILOGUE
     {
-      muscle_code_grow ("epilogue", $2, @2);
-      scanner_last_string_free ();
+      code_props plain_code;
+      code_props_plain_init (&plain_code, $2, @2);
+      code_props_translate_code (&plain_code);
+      gram_scanner_last_string_free ();
+      muscle_code_grow ("epilogue", plain_code.code, @2);
+      code_scanner_last_string_free ();
     }
 ;
 
@@ -501,7 +698,7 @@
   loc.start = rhs[n].end;
   loc.end = rhs[n].end;
 
-  /* Ignore empty nonterminals the start of the the right-hand side.
+  /* Ignore empty nonterminals the start of the right-hand side.
      Do not bother to ignore them at the end of the right-hand side,
      since empty nonterminals have the same end as their predecessors.  */
   for (i = 1; i <= n; i++)
@@ -538,42 +735,35 @@
 
   /* Strip the surrounding '{' and '}', and any blanks just inside
      the braces.  */
-  while (*--p == ' ' || *p == '\t')
-    continue;
+  --p;
+  while (c_isspace ((unsigned char) *p))
+    --p;
   p[1] = '\0';
-  while (*++decl == ' ' || *decl == '\t')
-    continue;
+  ++decl;
+  while (c_isspace ((unsigned char) *decl))
+    ++decl;
 
   if (! name_start)
     complain_at (loc, _("missing identifier in parameter declaration"));
   else
     {
-      char *name;
-      size_t name_len;
-
-      for (name_len = 1;
-	   memchr (alphanum, name_start[name_len], sizeof alphanum);
-	   name_len++)
-	continue;
-
-      name = xmalloc (name_len + 1);
-      memcpy (name, name_start, name_len);
-      name[name_len] = '\0';
+      char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
       muscle_pair_list_grow (type, decl, name);
       free (name);
     }
 
-  scanner_last_string_free ();
+  gram_scanner_last_string_free ();
 }
 
+
 static void
 version_check (location const *loc, char const *version)
 {
   if (strverscmp (version, PACKAGE_VERSION) > 0)
     {
       complain_at (*loc, "require bison %s, but have %s",
-		   version, PACKAGE_VERSION);
-      exit (63);
+                   version, PACKAGE_VERSION);
+      exit (EX_MISMATCH);
     }
 }
 
@@ -588,3 +778,16 @@
 {
   return yytname[YYTRANSLATE (type)];
 }
+
+static char const *
+char_name (char c)
+{
+  if (c == '\'')
+    return "'\\''";
+  else
+    {
+      char buf[4];
+      buf[0] = '\''; buf[1] = c; buf[2] = '\''; buf[3] = '\0';
+      return quotearg_style (escape_quoting_style, buf);
+    }
+}
diff --git a/src/print-xml.c b/src/print-xml.c
new file mode 100644
index 0000000..e37a741
--- /dev/null
+++ b/src/print-xml.c
@@ -0,0 +1,538 @@
+/* Print an xml on generated parser, for Bison,
+
+   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+#include "system.h"
+
+#include <stdarg.h>
+
+#include <bitset.h>
+
+#include "LR0.h"
+#include "closure.h"
+#include "conflicts.h"
+#include "files.h"
+#include "getargs.h"
+#include "gram.h"
+#include "lalr.h"
+#include "print.h"
+#include "print-xml.h"
+#include "reader.h"
+#include "reduce.h"
+#include "state.h"
+#include "symtab.h"
+#include "tables.h"
+
+static bitset no_reduce_set;
+struct escape_buf
+{
+  char *ptr;
+  size_t size;
+};
+static struct escape_buf escape_bufs[3];
+
+
+/*--------------------------------.
+| Report information on a state.  |
+`--------------------------------*/
+
+static void
+print_core (FILE *out, int level, state *s)
+{
+  size_t i;
+  item_number *sitems = s->items;
+  size_t snritems = s->nitems;
+
+  /* Output all the items of a state, not only its kernel.  */
+  closure (sitems, snritems);
+  sitems = itemset;
+  snritems = nitemset;
+
+  if (!snritems) {
+    xml_puts (out, level, "<itemset/>");
+    return;
+  }
+
+  xml_puts (out, level, "<itemset>");
+
+  for (i = 0; i < snritems; i++)
+    {
+      bool printed = false;
+      item_number *sp;
+      item_number *sp1;
+      rule_number r;
+
+      sp1 = sp = ritem + sitems[i];
+
+      while (*sp >= 0)
+	sp++;
+
+      r = item_number_as_rule_number (*sp);
+      sp = rules[r].rhs;
+
+      /* Display the lookahead tokens?  */
+      if (item_number_is_rule_number (*sp1))
+	{
+	  reductions *reds = s->reductions;
+	  int red = state_reduction_find (s, &rules[r]);
+	  /* Print item with lookaheads if there are. */
+	  if (reds->lookahead_tokens && red != -1)
+	    {
+	      xml_printf (out, level + 1,
+			  "<item rule-number=\"%d\" point=\"%d\">",
+			  rules[r].number, sp1 - sp);
+	      state_rule_lookahead_tokens_print_xml (s, &rules[r],
+						     out, level + 2);
+	      xml_puts (out, level + 1, "</item>");
+	      printed = true;
+	    }
+	}
+
+      if (!printed)
+	{
+	  xml_printf (out, level + 1,
+		      "<item rule-number=\"%d\" point=\"%d\"/>",
+		      rules[r].number,
+		      sp1 - sp);
+	}
+    }
+  xml_puts (out, level, "</itemset>");
+}
+
+
+/*-----------------------------------------------------------.
+| Report the shifts if DISPLAY_SHIFTS_P or the gotos of S on |
+| OUT.                                                       |
+`-----------------------------------------------------------*/
+
+static void
+print_transitions (state *s, FILE *out, int level)
+{
+  transitions *trans = s->transitions;
+  int n = 0;
+  int i;
+
+  for (i = 0; i < trans->num; i++)
+    if (!TRANSITION_IS_DISABLED (trans, i))
+      {
+	n++;
+      }
+
+  /* Nothing to report. */
+  if (!n) {
+    xml_puts (out, level, "<transitions/>");
+    return;
+  }
+
+  /* Report lookahead tokens and shifts.  */
+  xml_puts (out, level, "<transitions>");
+
+  for (i = 0; i < trans->num; i++)
+    if (!TRANSITION_IS_DISABLED (trans, i)
+	&& TRANSITION_IS_SHIFT (trans, i))
+      {
+	symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)];
+	char const *tag = sym->tag;
+	state *s1 = trans->states[i];
+
+	xml_printf (out, level + 1,
+		    "<transition type=\"shift\" symbol=\"%s\" state=\"%d\"/>",
+		    xml_escape (tag), s1->number);
+      }
+
+  for (i = 0; i < trans->num; i++)
+    if (!TRANSITION_IS_DISABLED (trans, i)
+	&& !TRANSITION_IS_SHIFT (trans, i))
+      {
+	symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)];
+	char const *tag = sym->tag;
+	state *s1 = trans->states[i];
+
+	xml_printf (out, level + 1,
+		    "<transition type=\"goto\" symbol=\"%s\" state=\"%d\"/>",
+		    xml_escape (tag), s1->number);
+      }
+
+  xml_puts (out, level, "</transitions>");
+}
+
+
+/*--------------------------------------------------------.
+| Report the explicit errors of S raised from %nonassoc.  |
+`--------------------------------------------------------*/
+
+static void
+print_errs (FILE *out, int level, state *s)
+{
+  errs *errp = s->errs;
+  bool count = false;
+  int i;
+
+  for (i = 0; i < errp->num; ++i)
+    if (errp->symbols[i])
+      count = true;
+
+  /* Nothing to report. */
+  if (!count) {
+    xml_puts (out, level, "<errors/>");
+    return;
+  }
+
+  /* Report lookahead tokens and errors.  */
+  xml_puts (out, level, "<errors>");
+  for (i = 0; i < errp->num; ++i)
+    if (errp->symbols[i])
+      {
+	char const *tag = errp->symbols[i]->tag;
+	xml_printf (out, level + 1,
+		    "<error symbol=\"%s\">nonassociative</error>",
+		    xml_escape (tag));
+      }
+  xml_puts (out, level, "</errors>");
+}
+
+
+/*-------------------------------------------------------------------------.
+| Report a reduction of RULE on LOOKAHEAD_TOKEN (which can be `default').  |
+| If not ENABLED, the rule is masked by a shift or a reduce (S/R and       |
+| R/R conflicts).                                                          |
+`-------------------------------------------------------------------------*/
+
+static void
+print_reduction (FILE *out, int level, char const *lookahead_token,
+		 rule *r, bool enabled)
+{
+  if (r->number)
+    xml_printf (out, level,
+		"<reduction symbol=\"%s\" rule=\"%d\" enabled=\"%s\"/>",
+		xml_escape (lookahead_token),
+		r->number,
+		enabled ? "true" : "false");
+  else
+    xml_printf (out, level,
+		"<reduction symbol=\"%s\" rule=\"accept\" enabled=\"%s\"/>",
+		xml_escape (lookahead_token),
+		enabled ? "true" : "false");
+}
+
+
+/*-------------------------------------------.
+| Report on OUT the reduction actions of S.  |
+`-------------------------------------------*/
+
+static void
+print_reductions (FILE *out, int level, state *s)
+{
+  transitions *trans = s->transitions;
+  reductions *reds = s->reductions;
+  rule *default_reduction = NULL;
+  int report = false;
+  int i, j;
+
+  if (reds->num == 0)
+    {
+      xml_puts (out, level, "<reductions/>");
+      return;
+    }
+
+  if (yydefact[s->number] != 0)
+    default_reduction = &rules[yydefact[s->number] - 1];
+
+  bitset_zero (no_reduce_set);
+  FOR_EACH_SHIFT (trans, i)
+    bitset_set (no_reduce_set, TRANSITION_SYMBOL (trans, i));
+  for (i = 0; i < s->errs->num; ++i)
+    if (s->errs->symbols[i])
+      bitset_set (no_reduce_set, s->errs->symbols[i]->number);
+
+  if (default_reduction)
+    report = true;
+
+  if (reds->lookahead_tokens)
+    for (i = 0; i < ntokens; i++)
+      {
+	bool count = bitset_test (no_reduce_set, i);
+
+	for (j = 0; j < reds->num; ++j)
+	  if (bitset_test (reds->lookahead_tokens[j], i))
+	    {
+	      if (! count)
+		{
+		  if (reds->rules[j] != default_reduction)
+		    report = true;
+		  count = true;
+		}
+	      else
+		{
+		  report = true;
+		}
+	    }
+      }
+
+  /* Nothing to report. */
+  if (!report) {
+    xml_puts (out, level, "<reductions/>");
+    return;
+  }
+
+  xml_puts (out, level, "<reductions>");
+
+  /* Report lookahead tokens (or $default) and reductions.  */
+  if (reds->lookahead_tokens)
+    for (i = 0; i < ntokens; i++)
+      {
+	bool defaulted = false;
+	bool count = bitset_test (no_reduce_set, i);
+
+	for (j = 0; j < reds->num; ++j)
+	  if (bitset_test (reds->lookahead_tokens[j], i))
+	    {
+	      if (! count)
+		{
+		  if (reds->rules[j] != default_reduction)
+		    print_reduction (out, level + 1, symbols[i]->tag,
+				     reds->rules[j], true);
+		  else
+		    defaulted = true;
+		  count = true;
+		}
+	      else
+		{
+		  if (defaulted)
+		    print_reduction (out, level + 1, symbols[i]->tag,
+				     default_reduction, true);
+		  defaulted = false;
+		  print_reduction (out, level + 1, symbols[i]->tag,
+				   reds->rules[j], false);
+		}
+	    }
+      }
+
+  if (default_reduction)
+    print_reduction (out, level + 1,
+		     "$default", default_reduction, true);
+
+  xml_puts (out, level, "</reductions>");
+}
+
+
+/*--------------------------------------------------------------.
+| Report on OUT all the actions (shifts, gotos, reductions, and |
+| explicit erros from %nonassoc) of S.                          |
+`--------------------------------------------------------------*/
+
+static void
+print_actions (FILE *out, int level, state *s)
+{
+  xml_puts (out, level, "<actions>");
+  print_transitions (s, out, level + 1);
+  print_errs (out, level + 1, s);
+  print_reductions (out, level + 1, s);
+  xml_puts (out, level, "</actions>");
+}
+
+
+/*----------------------------------.
+| Report all the data on S on OUT.  |
+`----------------------------------*/
+
+static void
+print_state (FILE *out, int level, state *s)
+{
+  fputc ('\n', out);
+  xml_printf (out, level, "<state number=\"%d\">", s->number);
+  print_core (out, level + 1, s);
+  print_actions (out, level + 1, s);
+  if (s->solved_conflicts_xml)
+    {
+      xml_puts (out, level + 1, "<solved-conflicts>");
+      fputs (s->solved_conflicts_xml, out);
+      xml_puts (out, level + 1, "</solved-conflicts>");
+    }
+  else
+    xml_puts (out, level + 1, "<solved-conflicts/>");
+  xml_puts (out, level, "</state>");
+}
+
+
+/*-----------------------------------------.
+| Print information on the whole grammar.  |
+`-----------------------------------------*/
+
+static void
+print_grammar (FILE *out, int level)
+{
+  symbol_number i;
+
+  fputc ('\n', out);
+  xml_puts (out, level, "<grammar>");
+  grammar_rules_print_xml (out, level);
+
+  /* Terminals */
+  xml_puts (out, level + 1, "<terminals>");
+  for (i = 0; i < max_user_token_number + 1; i++)
+    if (token_translations[i] != undeftoken->number)
+      {
+	char const *tag = symbols[token_translations[i]]->tag;
+        int precedence = symbols[token_translations[i]]->prec;
+        assoc associativity = symbols[token_translations[i]]->assoc;
+        xml_indent (out, level + 2);
+        fprintf (out,
+                 "<terminal symbol-number=\"%d\" token-number=\"%d\""
+                 " name=\"%s\" usefulness=\"%s\"",
+                 token_translations[i], i, xml_escape (tag),
+                 reduce_token_unused_in_grammar (token_translations[i])
+                   ? "unused-in-grammar" : "useful");
+        if (precedence)
+          fprintf (out, " prec=\"%d\"", precedence);
+        if (associativity != undef_assoc)
+          fprintf (out, " assoc=\"%s\"", assoc_to_string (associativity) + 1);
+        fputs ("/>\n", out);
+      }
+  xml_puts (out, level + 1, "</terminals>");
+
+  /* Nonterminals */
+  xml_puts (out, level + 1, "<nonterminals>");
+  for (i = ntokens; i < nsyms + nuseless_nonterminals; i++)
+    {
+      char const *tag = symbols[i]->tag;
+      xml_printf (out, level + 2,
+		  "<nonterminal symbol-number=\"%d\" name=\"%s\""
+                  " usefulness=\"%s\"/>",
+		  i, xml_escape (tag),
+                  reduce_nonterminal_useless_in_grammar (i)
+                    ? "useless-in-grammar" : "useful");
+    }
+  xml_puts (out, level + 1, "</nonterminals>");
+  xml_puts (out, level, "</grammar>");
+}
+
+void
+xml_indent (FILE *out, int level)
+{
+  int i;
+  for (i = 0; i < level; i++)
+    fputs ("  ", out);
+}
+
+void
+xml_puts (FILE *out, int level, char const *s)
+{
+  xml_indent (out, level);
+  fputs (s, out);
+  fputc ('\n', out);
+}
+
+void
+xml_printf (FILE *out, int level, char const *fmt, ...)
+{
+  va_list arglist;
+
+  xml_indent (out, level);
+
+  va_start (arglist, fmt);
+  vfprintf (out, fmt, arglist);
+  va_end (arglist);
+
+  fputc ('\n', out);
+}
+
+static char const *
+xml_escape_string (struct escape_buf *buf, char const *str)
+{
+  size_t len = strlen (str);
+  size_t max_expansion = sizeof "&quot;" - 1;
+  char *p;
+
+  if (buf->size <= max_expansion * len)
+    {
+      buf->size = max_expansion * len + 1;
+      buf->ptr = x2realloc (buf->ptr, &buf->size);
+    }
+  p = buf->ptr;
+
+  for (; *str; str++)
+    switch (*str)
+      {
+      default: *p++ = *str; break;
+      case '&': p = stpcpy (p, "&amp;" ); break;
+      case '<': p = stpcpy (p, "&lt;"  ); break;
+      case '>': p = stpcpy (p, "&gt;"  ); break;
+      case '"': p = stpcpy (p, "&quot;"); break;
+      }
+
+  *p = '\0';
+  return buf->ptr;
+}
+
+char const *
+xml_escape_n (int n, char const *str)
+{
+  return xml_escape_string (escape_bufs + n, str);
+}
+
+char const *
+xml_escape (char const *str)
+{
+  return xml_escape_n (0, str);
+}
+
+void
+print_xml (void)
+{
+  state_number i;
+  int level = 0;
+
+  FILE *out = xfopen (spec_xml_file, "w");
+
+  fputs ("<?xml version=\"1.0\"?>\n\n", out);
+  xml_printf (out, level,
+              "<bison-xml-report version=\"%s\" bug-report=\"%s\""
+              " url=\"%s\">",
+              xml_escape_n (0, VERSION),
+              xml_escape_n (1, PACKAGE_BUGREPORT),
+              xml_escape_n (2, PACKAGE_URL));
+
+  fputc ('\n', out);
+  xml_printf (out, level + 1, "<filename>%s</filename>",
+	      xml_escape (grammar_file));
+
+  /* print grammar */
+  print_grammar (out, level + 1);
+
+  new_closure (nritems);
+  no_reduce_set =  bitset_create (ntokens, BITSET_FIXED);
+
+  /* print automaton */
+  fputc ('\n', out);
+  xml_puts (out, level + 1, "<automaton>");
+  for (i = 0; i < nstates; i++)
+    print_state (out, level + 2, states[i]);
+  xml_puts (out, level + 1, "</automaton>");
+
+  bitset_free (no_reduce_set);
+  free_closure ();
+
+  xml_puts (out, 0, "</bison-xml-report>");
+
+  free (escape_bufs[0].ptr);
+  free (escape_bufs[1].ptr);
+
+  xfclose (out);
+}
diff --git a/src/print-xml.h b/src/print-xml.h
new file mode 100644
index 0000000..c0ea2e7
--- /dev/null
+++ b/src/print-xml.h
@@ -0,0 +1,30 @@
+/* Output an xml of the generated parser, for Bison.
+
+   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef PRINT_XML_H_
+# define PRINT_XML_H_
+
+void xml_indent (FILE *out, int level);
+void xml_puts (FILE *, int, char const *);
+void xml_printf (FILE *, int, char const *, ...);
+char const *xml_escape_n (int n, char const *str);
+char const *xml_escape (char const *str);
+void print_xml (void);
+
+#endif /* !PRINT_XML_H_ */
diff --git a/src/print.c b/src/print.c
index cb1600c..5fdb28b 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1,30 +1,27 @@
 /* Print information on generated parser, for bison,
 
-   Copyright (C) 1984, 1986, 1989, 2000, 2001, 2002, 2003, 2004, 2005
-   Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 2000-2005, 2007, 2009-2012 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
 #include <bitset.h>
-#include <quotearg.h>
 
 #include "LR0.h"
 #include "closure.h"
@@ -33,14 +30,15 @@
 #include "getargs.h"
 #include "gram.h"
 #include "lalr.h"
+#include "muscle-tab.h"
 #include "print.h"
 #include "reader.h"
 #include "reduce.h"
 #include "state.h"
 #include "symtab.h"
+#include "tables.h"
 
-static bitset shift_set;
-static bitset look_ahead_set;
+static bitset no_reduce_set;
 
 #if 0
 static void
@@ -81,7 +79,7 @@
     {
       closure (sitems, snritems);
       sitems = itemset;
-      snritems = nritemset;
+      snritems = nitemset;
     }
 
   if (!snritems)
@@ -111,9 +109,10 @@
       for (/* Nothing */; *sp >= 0; ++sp)
 	fprintf (out, " %s", symbols[*sp]->tag);
 
-      /* Display the look-ahead tokens?  */
-      if (report_flag & report_look_ahead_tokens)
-	state_rule_look_ahead_tokens_print (s, &rules[r], out);
+      /* Display the lookahead tokens?  */
+      if (report_flag & report_lookahead_tokens
+          && item_number_is_rule_number (*sp1))
+	state_rule_lookahead_tokens_print (s, &rules[r], out);
 
       fputc ('\n', out);
     }
@@ -132,7 +131,7 @@
   size_t width = 0;
   int i;
 
-  /* Compute the width of the look-ahead token column.  */
+  /* Compute the width of the lookahead token column.  */
   for (i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
 	&& TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
@@ -148,7 +147,7 @@
   fputc ('\n', out);
   width += 2;
 
-  /* Report look-ahead tokens and shifts.  */
+  /* Report lookahead tokens and shifts.  */
   for (i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
 	&& TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
@@ -180,7 +179,7 @@
   size_t width = 0;
   int i;
 
-  /* Compute the width of the look-ahead token column.  */
+  /* Compute the width of the lookahead token column.  */
   for (i = 0; i < errp->num; ++i)
     if (errp->symbols[i])
       max_length (&width, errp->symbols[i]->tag);
@@ -192,7 +191,7 @@
   fputc ('\n', out);
   width += 2;
 
-  /* Report look-ahead tokens and errors.  */
+  /* Report lookahead tokens and errors.  */
   for (i = 0; i < errp->num; ++i)
     if (errp->symbols[i])
       {
@@ -206,85 +205,20 @@
 }
 
 
-/*-------------------------------------------------------------.
-| Return the default rule of S if it has one, NULL otherwise.  |
-`-------------------------------------------------------------*/
-
-static rule *
-state_default_rule (state *s)
-{
-  reductions *reds = s->reductions;
-  rule *default_rule = NULL;
-  int cmax = 0;
-  int i;
-
-  /* No need for a look-ahead.  */
-  if (s->consistent)
-    return reds->rules[0];
-
-  /* 1. Each reduction is possibly masked by the look-ahead tokens on which
-     we shift (S/R conflicts)...  */
-  bitset_zero (shift_set);
-  {
-    transitions *trans = s->transitions;
-    FOR_EACH_SHIFT (trans, i)
-      {
-	/* If this state has a shift for the error token, don't use a
-	     default rule.  */
-	if (TRANSITION_IS_ERROR (trans, i))
-	  return NULL;
-	bitset_set (shift_set, TRANSITION_SYMBOL (trans, i));
-      }
-  }
-
-  /* 2. Each reduction is possibly masked by the look-ahead tokens on which
-     we raise an error (due to %nonassoc).  */
-  {
-    errs *errp = s->errs;
-    for (i = 0; i < errp->num; i++)
-      if (errp->symbols[i])
-	bitset_set (shift_set, errp->symbols[i]->number);
-  }
-
-  for (i = 0; i < reds->num; ++i)
-    {
-      int count = 0;
-
-      /* How many non-masked look-ahead tokens are there for this
-	 reduction?  */
-      bitset_andn (look_ahead_set, reds->look_ahead_tokens[i], shift_set);
-      count = bitset_count (look_ahead_set);
-
-      if (count > cmax)
-	{
-	  cmax = count;
-	  default_rule = reds->rules[i];
-	}
-
-      /* 3. And finally, each reduction is possibly masked by previous
-	 reductions (in R/R conflicts, we keep the first reductions).
-	 */
-      bitset_or (shift_set, shift_set, reds->look_ahead_tokens[i]);
-    }
-
-  return default_rule;
-}
-
-
-/*--------------------------------------------------------------------------.
-| Report a reduction of RULE on LOOK_AHEAD_TOKEN (which can be `default').  |
-| If not ENABLED, the rule is masked by a shift or a reduce (S/R and        |
-| R/R conflicts).                                                           |
-`--------------------------------------------------------------------------*/
+/*-------------------------------------------------------------------------.
+| Report a reduction of RULE on LOOKAHEAD_TOKEN (which can be `default').  |
+| If not ENABLED, the rule is masked by a shift or a reduce (S/R and       |
+| R/R conflicts).                                                          |
+`-------------------------------------------------------------------------*/
 
 static void
 print_reduction (FILE *out, size_t width,
-		 const char *look_ahead_token,
+		 const char *lookahead_token,
 		 rule *r, bool enabled)
 {
   int j;
-  fprintf (out, "    %s", look_ahead_token);
-  for (j = width - strlen (look_ahead_token); j > 0; --j)
+  fprintf (out, "    %s", lookahead_token);
+  for (j = width - strlen (lookahead_token); j > 0; --j)
     fputc (' ', out);
   if (!enabled)
     fputc ('[', out);
@@ -307,34 +241,39 @@
 {
   transitions *trans = s->transitions;
   reductions *reds = s->reductions;
-  rule *default_rule = NULL;
+  rule *default_reduction = NULL;
   size_t width = 0;
   int i, j;
+  bool default_reduction_only = true;
 
   if (reds->num == 0)
     return;
 
-  default_rule = state_default_rule (s);
+  if (yydefact[s->number] != 0)
+    default_reduction = &rules[yydefact[s->number] - 1];
 
-  bitset_zero (shift_set);
+  bitset_zero (no_reduce_set);
   FOR_EACH_SHIFT (trans, i)
-    bitset_set (shift_set, TRANSITION_SYMBOL (trans, i));
+    bitset_set (no_reduce_set, TRANSITION_SYMBOL (trans, i));
+  for (i = 0; i < s->errs->num; ++i)
+    if (s->errs->symbols[i])
+      bitset_set (no_reduce_set, s->errs->symbols[i]->number);
 
-  /* Compute the width of the look-ahead token column.  */
-  if (default_rule)
+  /* Compute the width of the lookahead token column.  */
+  if (default_reduction)
     width = strlen (_("$default"));
 
-  if (reds->look_ahead_tokens)
+  if (reds->lookahead_tokens)
     for (i = 0; i < ntokens; i++)
       {
-	bool count = bitset_test (shift_set, i);
+	bool count = bitset_test (no_reduce_set, i);
 
 	for (j = 0; j < reds->num; ++j)
-	  if (bitset_test (reds->look_ahead_tokens[j], i))
+	  if (bitset_test (reds->lookahead_tokens[j], i))
 	    {
 	      if (! count)
 		{
-		  if (reds->rules[j] != default_rule)
+		  if (reds->rules[j] != default_reduction)
 		    max_length (&width, symbols[i]->tag);
 		  count = true;
 		}
@@ -352,32 +291,38 @@
   fputc ('\n', out);
   width += 2;
 
-  /* Report look-ahead tokens (or $default) and reductions.  */
-  if (reds->look_ahead_tokens)
+  /* Report lookahead tokens (or $default) and reductions.  */
+  if (reds->lookahead_tokens)
     for (i = 0; i < ntokens; i++)
       {
 	bool defaulted = false;
-	bool count = bitset_test (shift_set, i);
+	bool count = bitset_test (no_reduce_set, i);
+        if (count)
+          default_reduction_only = false;
 
 	for (j = 0; j < reds->num; ++j)
-	  if (bitset_test (reds->look_ahead_tokens[j], i))
+	  if (bitset_test (reds->lookahead_tokens[j], i))
 	    {
 	      if (! count)
 		{
-		  if (reds->rules[j] != default_rule)
-		    print_reduction (out, width,
-				     symbols[i]->tag,
-				     reds->rules[j], true);
+		  if (reds->rules[j] != default_reduction)
+                    {
+                      default_reduction_only = false;
+                      print_reduction (out, width,
+                                       symbols[i]->tag,
+                                       reds->rules[j], true);
+                    }
 		  else
 		    defaulted = true;
 		  count = true;
 		}
 	      else
 		{
+                  default_reduction_only = false;
 		  if (defaulted)
 		    print_reduction (out, width,
 				     symbols[i]->tag,
-				     default_rule, true);
+				     default_reduction, true);
 		  defaulted = false;
 		  print_reduction (out, width,
 				   symbols[i]->tag,
@@ -386,9 +331,17 @@
 	    }
       }
 
-  if (default_rule)
-    print_reduction (out, width,
-		     _("$default"), default_rule, true);
+  if (default_reduction)
+    {
+      char *default_reductions =
+        muscle_percent_define_get ("lr.default-reductions");
+      print_reduction (out, width, _("$default"), default_reduction, true);
+      aver (0 == strcmp (default_reductions, "most")
+            || (0 == strcmp (default_reductions, "consistent")
+                && default_reduction_only)
+            || (reds->num == 1 && reds->rules[0]->number == 0));
+      free (default_reductions);
+    }
 }
 
 
@@ -417,7 +370,7 @@
 print_state (FILE *out, state *s)
 {
   fputs ("\n\n", out);
-  fprintf (out, _("state %d"), s->number);
+  fprintf (out, _("State %d"), s->number);
   fputc ('\n', out);
   print_core (out, s);
   print_actions (out, s);
@@ -464,7 +417,7 @@
 	buffer[0] = 0;
 	column = strlen (tag);
 	fputs (tag, out);
-	END_TEST (50);
+	END_TEST (65);
 	sprintf (buffer, " (%d)", i);
 
 	for (r = 0; r < nrules; r++)
@@ -508,14 +461,16 @@
 
       if (left_count > 0)
 	{
-	  END_TEST (50);
+	  END_TEST (65);
 	  sprintf (buffer + strlen (buffer), _(" on left:"));
 
 	  for (r = 0; r < nrules; r++)
 	    {
-	      END_TEST (65);
 	      if (rules[r].lhs->number == i)
-		sprintf (buffer + strlen (buffer), " %d", r);
+		{
+		  END_TEST (65);
+		  sprintf (buffer + strlen (buffer), " %d", r);
+		}
 	    }
 	}
 
@@ -523,7 +478,7 @@
 	{
 	  if (left_count > 0)
 	    sprintf (buffer + strlen (buffer), ",");
-	  END_TEST (50);
+	  END_TEST (65);
 	  sprintf (buffer + strlen (buffer), _(" on right:"));
 	  for (r = 0; r < nrules; r++)
 	    {
@@ -552,7 +507,8 @@
 
   reduce_output (out);
   grammar_rules_partial_print (out,
-			       _("Rules never reduced"), rule_never_reduced_p);
+			       _("Rules useless in parser due to conflicts"),
+                                 rule_useless_in_parser_p);
   conflicts_output (out);
 
   print_grammar (out);
@@ -562,12 +518,10 @@
   if (report_flag & report_itemsets)
     new_closure (nritems);
   /* Storage for print_reductions.  */
-  shift_set =  bitset_create (ntokens, BITSET_FIXED);
-  look_ahead_set = bitset_create (ntokens, BITSET_FIXED);
+  no_reduce_set =  bitset_create (ntokens, BITSET_FIXED);
   for (i = 0; i < nstates; i++)
     print_state (out, states[i]);
-  bitset_free (shift_set);
-  bitset_free (look_ahead_set);
+  bitset_free (no_reduce_set);
   if (report_flag & report_itemsets)
     free_closure ();
 
diff --git a/src/print.h b/src/print.h
index 1daa577..f528aaf 100644
--- a/src/print.h
+++ b/src/print.h
@@ -1,22 +1,21 @@
 /* Print information on generated parser, for bison,
-   Copyright 2000 Free Software Foundation, Inc.
+
+   Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef PRINT_H_
 # define PRINT_H_
diff --git a/src/print_graph.c b/src/print_graph.c
index 9580f3f..f4742b1 100644
--- a/src/print_graph.c
+++ b/src/print_graph.c
@@ -1,29 +1,25 @@
-/* Output a VCG description on generated parser, for Bison,
+/* Output a graph of the generated parser, for Bison.
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001-2007, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
-#include <quotearg.h>
-
 #include "LR0.h"
 #include "closure.h"
 #include "complain.h"
@@ -31,26 +27,44 @@
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
+#include "graphviz.h"
 #include "lalr.h"
 #include "print_graph.h"
 #include "reader.h"
 #include "state.h"
 #include "symtab.h"
-#include "vcg.h"
-
-static graph static_graph;
-static FILE *fgraph = NULL;
 
 
 /*----------------------------.
 | Construct the node labels.  |
 `----------------------------*/
 
+/* Print the lhs of a rule in such a manner that there is no vertical
+   repetition, like in *.output files. */
+
+static void
+print_lhs (struct obstack *oout, rule *previous_rule, rule *r)
+{
+  if (previous_rule && STREQ (previous_rule->lhs->tag, r->lhs->tag))
+    {
+      int i;
+      for (i = 0; i < strlen (r->lhs->tag); ++i)
+        obstack_1grow (oout, ' ');
+      obstack_1grow (oout, '|');
+    }
+  else
+    {
+      obstack_sgrow (oout, escape (r->lhs->tag));
+      obstack_1grow (oout, ':');
+    }
+}
+
 static void
 print_core (struct obstack *oout, state *s)
 {
-  size_t i;
   item_number *sitems = s->items;
+  rule *previous_rule = NULL;
+  size_t i;
   size_t snritems = s->nitems;
 
   /* Output all the items of a state, not only its kernel.  */
@@ -58,10 +72,11 @@
     {
       closure (sitems, snritems);
       sitems = itemset;
-      snritems = nritemset;
+      snritems = nitemset;
     }
 
-  obstack_fgrow1 (oout, "state %2d\n", s->number);
+  obstack_printf (oout, _("State %d"), s->number);
+  obstack_sgrow (oout, "\\n\\l");
   for (i = 0; i < snritems; i++)
     {
       item_number *sp;
@@ -71,45 +86,47 @@
       sp1 = sp = ritem + sitems[i];
 
       while (*sp >= 0)
-	sp++;
+        sp++;
 
       r = item_number_as_rule_number (*sp);
 
-      if (i)
-	obstack_1grow (oout, '\n');
-      obstack_fgrow1 (oout, " %s -> ",
-		      rules[r].lhs->tag);
+      obstack_printf (oout, "%3d ", r);
+      print_lhs (oout, previous_rule, &rules[r]);
+      previous_rule = &rules[r];
 
       for (sp = rules[r].rhs; sp < sp1; sp++)
-	obstack_fgrow1 (oout, "%s ", symbols[*sp]->tag);
+        obstack_printf (oout, " %s", escape (symbols[*sp]->tag));
 
-      obstack_1grow (oout, '.');
+      obstack_sgrow (oout, " .");
 
       for (/* Nothing */; *sp >= 0; ++sp)
-	obstack_fgrow1 (oout, " %s", symbols[*sp]->tag);
+        obstack_printf (oout, " %s", escape (symbols[*sp]->tag));
 
-      /* Experimental feature: display the look-ahead tokens. */
-      if (report_flag & report_look_ahead_tokens)
-	{
-	  /* Find the reduction we are handling.  */
-	  reductions *reds = s->reductions;
-	  int redno = state_reduction_find (s, &rules[r]);
+      /* Experimental feature: display the lookahead tokens. */
+      if (report_flag & report_lookahead_tokens
+          && item_number_is_rule_number (*sp1))
+        {
+          /* Find the reduction we are handling.  */
+          reductions *reds = s->reductions;
+          int redno = state_reduction_find (s, &rules[r]);
 
-	  /* Print them if there are.  */
-	  if (reds->look_ahead_tokens && redno != -1)
-	    {
-	      bitset_iterator biter;
-	      int k;
-	      char const *sep = "";
-	      obstack_sgrow (oout, "[");
-	      BITSET_FOR_EACH (biter, reds->look_ahead_tokens[redno], k, 0)
-		{
-		  obstack_fgrow2 (oout, "%s%s", sep, symbols[k]->tag);
-		  sep = ", ";
-		}
-	      obstack_sgrow (oout, "]");
-	    }
-	}
+          /* Print them if there are.  */
+          if (reds->lookahead_tokens && redno != -1)
+            {
+              bitset_iterator biter;
+              int k;
+              char const *sep = "";
+              obstack_sgrow (oout, "  [");
+              BITSET_FOR_EACH (biter, reds->lookahead_tokens[redno], k, 0)
+                {
+                  obstack_sgrow (oout, sep);
+                  obstack_sgrow (oout, escape (symbols[k]->tag));
+                  sep = ", ";
+                }
+              obstack_1grow (oout, ']');
+            }
+        }
+      obstack_sgrow (oout, "\\l");
     }
 }
 
@@ -120,17 +137,12 @@
 `---------------------------------------------------------------*/
 
 static void
-print_actions (state *s, const char *node_name)
+print_actions (state const *s, FILE *fgraph)
 {
+  transitions const *trans = s->transitions;
   int i;
 
-  transitions *trans = s->transitions;
-  reductions *reds = s->reductions;
-
-  static char buff[10];
-  edge e;
-
-  if (!trans->num && !reds)
+  if (!trans->num && !s->reductions)
     return;
 
   for (i = 0; i < trans->num; i++)
@@ -139,24 +151,21 @@
 	state *s1 = trans->states[i];
 	symbol_number sym = s1->accessing_symbol;
 
-	new_edge (&e);
+	/* Shifts are solid, gotos are dashed, and error is dotted.  */
+	char const *style =
+	  (TRANSITION_IS_ERROR (trans, i) ? "dotted"
+	   : TRANSITION_IS_SHIFT (trans, i) ? "solid"
+	   : "dashed");
 
-	if (s->number > s1->number)
-	  e.type = back_edge;
-	open_edge (&e, fgraph);
-	/* The edge source is the current node.  */
-	e.sourcename = node_name;
-	sprintf (buff, "%d", s1->number);
-	e.targetname = buff;
-	/* Shifts are blue, gotos are green, and error is red. */
-	if (TRANSITION_IS_ERROR (trans, i))
-	  e.color = red;
-	else
-	  e.color = TRANSITION_IS_SHIFT (trans, i) ? blue : green;
-	e.label = symbols[sym]->tag;
-	output_edge (&e, fgraph);
-	close_edge (fgraph);
+	if (TRANSITION_IS_ERROR (trans, i)
+	    && strcmp (symbols[sym]->tag, "error") != 0)
+	  abort ();
+	output_edge (s->number, s1->number,
+		     TRANSITION_IS_ERROR (trans, i) ? NULL : symbols[sym]->tag,
+		     style, fgraph);
       }
+  /* Display reductions. */
+  output_red (s, s->reductions, fgraph);
 }
 
 
@@ -166,29 +175,19 @@
 `-------------------------------------------------------------*/
 
 static void
-print_state (state *s)
+print_state (state *s, FILE *fgraph)
 {
-  static char name[10];
   struct obstack node_obstack;
-  node n;
 
-  /* The labels of the nodes are their the items.  */
+  /* A node's label contains its items.  */
   obstack_init (&node_obstack);
-  new_node (&n);
-  sprintf (name, "%d", s->number);
-  n.title = name;
   print_core (&node_obstack, s);
   obstack_1grow (&node_obstack, '\0');
-  n.label = obstack_finish (&node_obstack);
-
-  open_node (fgraph);
-  output_node (&n, fgraph);
-  close_node (fgraph);
+  output_node (s->number, obstack_finish (&node_obstack), fgraph);
+  obstack_free (&node_obstack, 0);
 
   /* Output the edges.  */
-  print_actions (s, name);
-
-  obstack_free (&node_obstack, 0);
+  print_actions (s, fgraph);
 }
 
 
@@ -196,32 +195,15 @@
 print_graph (void)
 {
   state_number i;
-
-  /* Output file.  */
-  fgraph = xfopen (spec_graph_file, "w");
-
-  new_graph (&static_graph);
-
-  static_graph.display_edge_labels = yes;
-
-  static_graph.port_sharing = no;
-  static_graph.finetuning = yes;
-  static_graph.priority_phase = yes;
-  static_graph.splines = yes;
-
-  static_graph.crossing_weight = median;
-
-  /* Output graph options. */
-  open_graph (fgraph);
-  output_graph (&static_graph, fgraph);
+  FILE *fgraph = xfopen (spec_graph_file, "w");
+  start_graph (fgraph);
 
   /* Output nodes and edges. */
   new_closure (nritems);
   for (i = 0; i < nstates; i++)
-    print_state (states[i]);
+    print_state (states[i], fgraph);
   free_closure ();
 
-  /* Close graph. */
-  close_graph (&static_graph, fgraph);
+  finish_graph (fgraph);
   xfclose (fgraph);
 }
diff --git a/src/print_graph.h b/src/print_graph.h
index befc531..02aa8b3 100644
--- a/src/print_graph.h
+++ b/src/print_graph.h
@@ -1,22 +1,21 @@
-/* Output a VCG description on generated parser, for bison,
-   Copyright 2000 Free Software Foundation, Inc.
+/* Output a graph of the generated parser, for Bison.
+
+   Copyright (C) 2000, 2006, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef PRINT_GRAPH_H_
 # define PRINT_GRAPH_H_
diff --git a/src/reader.c b/src/reader.c
index d07ce5c..735e700 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -1,40 +1,41 @@
 /* Input parser for Bison
 
-   Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000, 2001, 2002, 2003,
-   2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000-2003, 2005-2007,
+   2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
-#include <quotearg.h>
+#include <quote.h>
 
 #include "complain.h"
 #include "conflicts.h"
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
-#include "muscle_tab.h"
+#include "muscle-tab.h"
 #include "reader.h"
 #include "symlist.h"
 #include "symtab.h"
+#include "scan-gram.h"
+#include "scan-code.h"
 
+static void prepare_percent_define_front_end_variables (void);
 static void check_and_convert_grammar (void);
 
 static symbol_list *grammar = NULL;
@@ -42,7 +43,10 @@
 merger_list *merge_functions;
 
 /* Was %union seen?  */
-bool typed = false;
+bool union_seen = false;
+
+/* Was a tag seen?  */
+bool tag_seen = false;
 
 /* Should rules have a default precedence?  */
 bool default_prec = true;
@@ -64,35 +68,15 @@
     }
 }
 
-
-/*----------------------------------------------------------------.
-| There are two prologues: one before %union, one after.  Augment |
-| the current one.                                                |
-`----------------------------------------------------------------*/
-
-void
-prologue_augment (const char *prologue, location loc)
-{
-  struct obstack *oout =
-    !typed ? &pre_prologue_obstack : &post_prologue_obstack;
-
-  obstack_fgrow1 (oout, "]b4_syncline(%d, [[", loc.start.line);
-  MUSCLE_OBSTACK_SGROW (oout,
-			quotearg_style (c_quoting_style, loc.start.file));
-  obstack_sgrow (oout, "]])[\n");
-  obstack_sgrow (oout, prologue);
-}
-
 
 
-/*-------------------------------------------------------------------.
-| Return the merger index for a merging function named NAME, whose   |
-| arguments have type TYPE.  Records the function, if new, in        |
-| MERGER_LIST.							     |
-`-------------------------------------------------------------------*/
+/*------------------------------------------------------------------------.
+| Return the merger index for a merging function named NAME.  Records the |
+| function, if new, in MERGER_LIST.                                       |
+`------------------------------------------------------------------------*/
 
 static int
-get_merge_function (uniqstr name, uniqstr type, location loc)
+get_merge_function (uniqstr name)
 {
   merger_list *syms;
   merger_list head;
@@ -101,9 +85,6 @@
   if (! glr_parser)
     return 0;
 
-  if (type == NULL)
-    type = uniqstr_new ("");
-
   head.next = merge_functions;
   for (syms = &head, n = 1; syms->next; syms = syms->next, n += 1)
     if (UNIQSTR_EQ (name, syms->next->name))
@@ -112,16 +93,55 @@
     {
       syms->next = xmalloc (sizeof syms->next[0]);
       syms->next->name = uniqstr_new (name);
-      syms->next->type = uniqstr_new (type);
+      /* After all symbol type declarations have been parsed, packgram invokes
+	 record_merge_function_type to set the type.  */
+      syms->next->type = NULL;
       syms->next->next = NULL;
       merge_functions = head.next;
     }
-  else if (!UNIQSTR_EQ (type, syms->next->type))
-    warn_at (loc, _("result type clash on merge function %s: <%s> != <%s>"),
-	     name, type, syms->next->type);
   return n;
 }
 
+/*-------------------------------------------------------------------------.
+| For the existing merging function with index MERGER, record the result   |
+| type as TYPE as required by the lhs of the rule whose %merge declaration |
+| is at DECLARATION_LOC.                                                   |
+`-------------------------------------------------------------------------*/
+
+static void
+record_merge_function_type (int merger, uniqstr type, location declaration_loc)
+{
+  int merger_find;
+  merger_list *merge_function;
+
+  if (merger <= 0)
+    return;
+
+  if (type == NULL)
+    type = uniqstr_new ("");
+
+  merger_find = 1;
+  for (merge_function = merge_functions;
+       merge_function != NULL && merger_find != merger;
+       merge_function = merge_function->next)
+    merger_find += 1;
+  aver (merge_function != NULL && merger_find == merger);
+  if (merge_function->type != NULL && !UNIQSTR_EQ (merge_function->type, type))
+    {
+      unsigned indent = 0;
+      complain_at_indent (declaration_loc, &indent,
+                          _("result type clash on merge function %s: "
+                            "<%s> != <%s>"),
+                          quote (merge_function->name), type,
+                          merge_function->type);
+      indent += SUB_INDENT;
+      complain_at_indent (merge_function->type_declaration_location, &indent,
+                          _("previous declaration"));
+   }
+  merge_function->type = uniqstr_new (type);
+  merge_function->type_declaration_location = declaration_loc;
+}
+
 /*--------------------------------------.
 | Free all merge-function definitions.	|
 `--------------------------------------*/
@@ -154,10 +174,10 @@
 static symbol_list *grammar_end = NULL;
 
 /* Append SYM to the grammar.  */
-static void
+static symbol_list *
 grammar_symbol_append (symbol *sym, location loc)
 {
-  symbol_list *p = symbol_list_new (sym, loc);
+  symbol_list *p = symbol_list_sym_new (sym, loc);
 
   if (grammar_end)
     grammar_end->next = p;
@@ -170,12 +190,31 @@
      part of it.  */
   if (sym)
     ++nritems;
+
+  return p;
 }
 
+static void
+assign_named_ref (symbol_list *p, named_ref *name)
+{
+  symbol *sym = p->content.sym;
+
+  if (name->id == sym->tag)
+    {
+      warn_at (name->loc,
+	       _("duplicated symbol name for %s ignored"),
+	       quote (sym->tag));
+      named_ref_free (name);
+    }
+  else
+    p->named_ref = name;
+}
+
+
 /* The rule currently being defined, and the previous rule.
    CURRENT_RULE points to the first LHS of the current rule, while
    PREVIOUS_RULE_END points to the *end* of the previous rule (NULL).  */
-symbol_list *current_rule = NULL;
+static symbol_list *current_rule = NULL;
 static symbol_list *previous_rule_end = NULL;
 
 
@@ -184,19 +223,19 @@
 `----------------------------------------------*/
 
 void
-grammar_current_rule_begin (symbol *lhs, location loc)
+grammar_current_rule_begin (symbol *lhs, location loc,
+			    named_ref *lhs_name)
 {
-  if (!start_flag)
-    {
-      startsymbol = lhs;
-      startsymbol_location = loc;
-      start_flag = true;
-    }
+  symbol_list* p;
 
   /* Start a new rule and record its lhs.  */
   ++nrules;
   previous_rule_end = grammar_end;
-  grammar_symbol_append (lhs, loc);
+
+  p = grammar_symbol_append (lhs, loc);
+  if (lhs_name)
+    assign_named_ref (p, named_ref_copy (lhs_name));
+
   current_rule = grammar_end;
 
   /* Mark the rule's lhs as a nonterminal if not already so.  */
@@ -212,16 +251,28 @@
 
 
 /*----------------------------------------------------------------------.
-| A symbol should be used if it has a destructor, or if it is a         |
-| mid-rule symbol (i.e., the generated LHS replacing a mid-rule         |
-| action) that was assigned to, as in "exp: { $$ = 1; } { $$ = $1; }".  |
+| A symbol should be used if either:                                    |
+|   1. It has a destructor.                                             |
+|   2. The symbol is a mid-rule symbol (i.e., the generated LHS         |
+|      replacing a mid-rule action) that was assigned to or used, as in |
+|      "exp: { $$ = 1; } { $$ = $1; }".                                 |
 `----------------------------------------------------------------------*/
 
 static bool
-symbol_should_be_used (symbol_list const *s)
+symbol_should_be_used (symbol_list const *s, bool *midrule_warning)
 {
-  return (s->sym->destructor
-	  || (s->midrule && s->midrule->used));
+  if (symbol_destructor_get (s->content.sym)->code)
+    return true;
+  if ((s->midrule && s->midrule->action_props.is_value_used)
+      || (s->midrule_parent_rule
+          && symbol_list_n_get (s->midrule_parent_rule,
+                                s->midrule_parent_rhs_index)
+               ->action_props.is_value_used))
+    {
+      *midrule_warning = true;
+      return true;
+    }
+  return false;
 }
 
 /*----------------------------------------------------------------.
@@ -239,13 +290,13 @@
 
      Don't worry about the default action if $$ is untyped, since $$'s
      value can't be used.  */
-  if (!r->action && r->sym->type_name)
+  if (!r->action_props.code && r->content.sym->type_name)
     {
-      symbol *first_rhs = r->next->sym;
+      symbol *first_rhs = r->next->content.sym;
       /* If $$ is being set in default way, report if any type mismatch.  */
       if (first_rhs)
 	{
-	  char const *lhs_type = r->sym->type_name;
+	  char const *lhs_type = r->content.sym->type_name;
 	  const char *rhs_type =
 	    first_rhs->type_name ? first_rhs->type_name : "";
 	  if (!UNIQSTR_EQ (lhs_type, rhs_type))
@@ -263,18 +314,32 @@
   {
     symbol_list const *l = r;
     int n = 0;
-    for (; l && l->sym; l = l->next, ++n)
-      if (! (l->used
-	     || !symbol_should_be_used (l)
-	     /* The default action, $$ = $1, `uses' both.  */
-	     || (!r->action && (n == 0 || n == 1))))
-	{
-	  if (n)
-	    warn_at (r->location, _("unused value: $%d"), n);
-	  else
-	    warn_at (r->location, _("unset value: $$"));
-	}
+    for (; l && l->content.sym; l = l->next, ++n)
+      {
+        bool midrule_warning = false;
+        if (!l->action_props.is_value_used
+            && symbol_should_be_used (l, &midrule_warning)
+            /* The default action, $$ = $1, `uses' both.  */
+            && (r->action_props.code || (n != 0 && n != 1)))
+          {
+            void (*warn_at_ptr)(location, char const*, ...) =
+              midrule_warning ? midrule_value_at : warn_at;
+            if (n)
+              warn_at_ptr (l->location, _("unused value: $%d"), n);
+            else
+              warn_at_ptr (l->location, _("unset value: $$"));
+          }
+      }
   }
+
+  /* See comments in grammar_current_rule_prec_set for how POSIX
+     mandates this complaint.  It's only for identifiers, so skip
+     it for char literals and strings, which are always tokens.  */
+  if (r->ruleprec
+      && r->ruleprec->tag[0] != '\'' && r->ruleprec->tag[0] != '"'
+      && !r->ruleprec->declared && !r->ruleprec->prec)
+    warn_at (r->location, _("token for %%prec is not defined: %s"),
+             r->ruleprec->tag);
 }
 
 
@@ -288,7 +353,6 @@
   /* Put an empty link in the list to mark the end of this rule  */
   grammar_symbol_append (NULL, grammar_end->location);
   current_rule->location = loc;
-  grammar_rule_check (current_rule);
 }
 
 
@@ -308,9 +372,12 @@
 
   /* Make a DUMMY nonterminal, whose location is that of the midrule
      action.  Create the MIDRULE.  */
-  location dummy_location = current_rule->action_location;
+  location dummy_location = current_rule->action_props.location;
   symbol *dummy = dummy_symbol_get (dummy_location);
-  symbol_list *midrule = symbol_list_new (dummy, dummy_location);
+  symbol_list *midrule = symbol_list_sym_new (dummy, dummy_location);
+
+  /* Remember named_ref of previous action. */
+  named_ref *action_name = current_rule->action_props.named_ref;
 
   /* Make a new rule, whose body is empty, before the current one, so
      that the action just read can belong to it.  */
@@ -318,13 +385,11 @@
   ++nritems;
   /* Attach its location and actions to that of the DUMMY.  */
   midrule->location = dummy_location;
-  midrule->action = current_rule->action;
-  midrule->action_location = dummy_location;
-  current_rule->action = NULL;
-  /* If $$ was used in the action, the LHS of the enclosing rule was
-     incorrectly flagged as used.  */
-  midrule->used = current_rule->used;
-  current_rule->used = false;
+  code_props_rule_action_init (&midrule->action_props,
+                               current_rule->action_props.code,
+                               current_rule->action_props.location,
+                               midrule, 0);
+  code_props_none_init (&current_rule->action_props);
 
   if (previous_rule_end)
     previous_rule_end->next = midrule;
@@ -332,16 +397,18 @@
     grammar = midrule;
 
   /* End the dummy's rule.  */
-  midrule->next = symbol_list_new (NULL, dummy_location);
-  grammar_rule_check (midrule);
+  midrule->next = symbol_list_sym_new (NULL, dummy_location);
   midrule->next->next = current_rule;
 
   previous_rule_end = midrule->next;
 
   /* Insert the dummy nonterminal replacing the midrule action into
      the current rule.  Bind it to its dedicated rule.  */
-  grammar_current_rule_symbol_append (dummy, dummy_location);
+  grammar_current_rule_symbol_append (dummy, dummy_location,
+                                      action_name);
   grammar_end->midrule = midrule;
+  midrule->midrule_parent_rule = current_rule;
+  midrule->midrule_parent_rhs_index = symbol_list_length (current_rule->next);
 }
 
 /* Set the precedence symbol of the current rule to PRECSYM. */
@@ -349,6 +416,17 @@
 void
 grammar_current_rule_prec_set (symbol *precsym, location loc)
 {
+  /* POSIX says that any identifier is a nonterminal if it does not
+     appear on the LHS of a grammar rule and is not defined by %token
+     or by one of the directives that assigns precedence to a token.  We
+     ignore this here because the only kind of identifier that POSIX
+     allows to follow a %prec is a token and because assuming it's a
+     token now can produce more logical error messages.  Nevertheless,
+     grammar_rule_check does obey what we believe is the real intent of
+     POSIX here: that an error be reported for any identifier that
+     appears after %prec but that is not defined separately as a
+     token.  */
+  symbol_class_set (precsym, token_sym, loc, false);
   if (current_rule->ruleprec)
     complain_at (loc, _("only one %s allowed per rule"), "%prec");
   current_rule->ruleprec = precsym;
@@ -378,30 +456,37 @@
     warn_at (loc, _("%s affects only GLR parsers"), "%merge");
   if (current_rule->merger != 0)
     complain_at (loc, _("only one %s allowed per rule"), "%merge");
-  current_rule->merger =
-    get_merge_function (name, current_rule->sym->type_name, loc);
+  current_rule->merger = get_merge_function (name);
+  current_rule->merger_declaration_location = loc;
 }
 
 /* Attach SYM to the current rule.  If needed, move the previous
    action as a mid-rule action.  */
 
 void
-grammar_current_rule_symbol_append (symbol *sym, location loc)
+grammar_current_rule_symbol_append (symbol *sym, location loc,
+				    named_ref *name)
 {
-  if (current_rule->action)
+  symbol_list *p;
+  if (current_rule->action_props.code)
     grammar_midrule_action ();
-  grammar_symbol_append (sym, loc);
+  p = grammar_symbol_append (sym, loc);
+  if (name)
+    assign_named_ref(p, name);
 }
 
 /* Attach an ACTION to the current rule.  */
 
 void
-grammar_current_rule_action_append (const char *action, location loc)
+grammar_current_rule_action_append (const char *action, location loc,
+				    named_ref *name)
 {
-  /* There's no need to invoke grammar_midrule_action here, since the
-     scanner already did it if necessary.  */
-  current_rule->action = action;
-  current_rule->action_location = loc;
+  if (current_rule->action_props.code)
+    grammar_midrule_action ();
+  /* After all symbol declarations have been parsed, packgram invokes
+     code_props_translate_code.  */
+  code_props_rule_action_init (&current_rule->action_props, action, loc,
+                               current_rule, name);
 }
 
 
@@ -426,10 +511,13 @@
 
   while (p)
     {
+      int rule_length = 0;
       symbol *ruleprec = p->ruleprec;
+      record_merge_function_type (p->merger, p->content.sym->type_name,
+				  p->merger_declaration_location);
       rules[ruleno].user_number = ruleno;
       rules[ruleno].number = ruleno;
-      rules[ruleno].lhs = p->sym;
+      rules[ruleno].lhs = p->content.sym;
       rules[ruleno].rhs = ritem + itemno;
       rules[ruleno].prec = NULL;
       rules[ruleno].dprec = p->dprec;
@@ -437,21 +525,42 @@
       rules[ruleno].precsym = NULL;
       rules[ruleno].location = p->location;
       rules[ruleno].useful = true;
-      rules[ruleno].action = p->action;
-      rules[ruleno].action_location = p->action_location;
+      rules[ruleno].action = p->action_props.code;
+      rules[ruleno].action_location = p->action_props.location;
 
-      p = p->next;
-      while (p && p->sym)
+      /* If the midrule's $$ is set or its $n is used, remove the `$' from the
+	 symbol name so that it's a user-defined symbol so that the default
+	 %destructor and %printer apply.  */
+      if (p->midrule_parent_rule
+          && (p->action_props.is_value_used
+	      || symbol_list_n_get (p->midrule_parent_rule,
+				    p->midrule_parent_rhs_index)
+                   ->action_props.is_value_used))
+	p->content.sym->tag += 1;
+
+      /* Don't check the generated rule 0.  It has no action, so some rhs
+	 symbols may appear unused, but the parsing algorithm ensures that
+	 %destructor's are invoked appropriately.  */
+      if (p != grammar)
+	grammar_rule_check (p);
+
+      for (p = p->next; p && p->content.sym; p = p->next)
 	{
+	  ++rule_length;
+
+	  /* Don't allow rule_length == INT_MAX, since that might
+	     cause confusion with strtol if INT_MAX == LONG_MAX.  */
+	  if (rule_length == INT_MAX)
+	      fatal_at (rules[ruleno].location, _("rule is too long"));
+
 	  /* item_number = symbol_number.
 	     But the former needs to contain more: negative rule numbers. */
-	  ritem[itemno++] = symbol_number_as_item_number (p->sym->number);
+	  ritem[itemno++] =
+            symbol_number_as_item_number (p->content.sym->number);
 	  /* A rule gets by default the precedence and associativity
-	     of the last token in it.  */
-	  if (p->sym->class == token_sym && default_prec)
-	    rules[ruleno].prec = p->sym;
-	  if (p)
-	    p = p->next;
+	     of its last token.  */
+	  if (p->content.sym->class == token_sym && default_prec)
+	    rules[ruleno].prec = p->content.sym;
 	}
 
       /* If this rule has a %prec,
@@ -461,14 +570,17 @@
 	  rules[ruleno].precsym = ruleprec;
 	  rules[ruleno].prec = ruleprec;
 	}
+      /* An item ends by the rule number (negated).  */
       ritem[itemno++] = rule_number_as_item_number (ruleno);
+      aver (itemno < ITEM_NUMBER_MAX);
       ++ruleno;
+      aver (ruleno < RULE_NUMBER_MAX);
 
       if (p)
 	p = p->next;
     }
 
-  assert (itemno == nritems);
+  aver (itemno == nritems);
 
   if (trace_flag & trace_sets)
     ritem_print (stderr);
@@ -503,16 +615,13 @@
   undeftoken->class = token_sym;
   undeftoken->number = ntokens++;
 
-  /* Initialize the obstacks. */
-  obstack_init (&pre_prologue_obstack);
-  obstack_init (&post_prologue_obstack);
-
   gram_in = xfopen (grammar_file, "r");
 
   gram__flex_debug = trace_flag & trace_scan;
   gram_debug = trace_flag & trace_parse;
-  scanner_initialize ();
+  gram_scanner_initialize ();
   gram_parse ();
+  prepare_percent_define_front_end_variables ();
 
   if (! complaint_issued)
     check_and_convert_grammar ();
@@ -520,6 +629,35 @@
   xfclose (gram_in);
 }
 
+static void
+prepare_percent_define_front_end_variables (void)
+{
+  /* Set %define front-end variable defaults.  */
+  muscle_percent_define_default ("lr.keep-unreachable-states", "false");
+  {
+    char *lr_type;
+    /* IELR would be a better default, but LALR is historically the
+       default.  */
+    muscle_percent_define_default ("lr.type", "lalr");
+    lr_type = muscle_percent_define_get ("lr.type");
+    if (0 != strcmp (lr_type, "canonical-lr"))
+      muscle_percent_define_default ("lr.default-reductions", "most");
+    else
+      muscle_percent_define_default ("lr.default-reductions", "accepting");
+    free (lr_type);
+  }
+
+  /* Check %define front-end variables.  */
+  {
+    static char const * const values[] = {
+      "lr.type", "lalr", "ielr", "canonical-lr", NULL,
+      "lr.default-reductions", "most", "consistent", "accepting", NULL,
+      NULL
+    };
+    muscle_percent_define_check_values (values);
+  }
+}
+
 
 /*-------------------------------------------------------------.
 | Check the grammar that has just been read, and convert it to |
@@ -533,9 +671,6 @@
   if (nrules == 0)
     fatal (_("no rules in the input grammar"));
 
-  /* Report any undefined symbols and consider them nonterminals.  */
-  symbols_check_defined ();
-
   /* If the user did not define her ENDTOKEN, do it now. */
   if (!endtoken)
     {
@@ -546,31 +681,69 @@
       endtoken->user_token_number = 0;
     }
 
+  /* Report any undefined symbols and consider them nonterminals.  */
+  symbols_check_defined ();
+
+  /* Find the start symbol if no %start.  */
+  if (!start_flag)
+    {
+      symbol_list *node;
+      for (node = grammar;
+           node != NULL && symbol_is_dummy (node->content.sym);
+           node = node->next)
+        {
+          for (node = node->next;
+               node != NULL && node->content.sym != NULL;
+               node = node->next)
+            ;
+        }
+      aver (node != NULL);
+      grammar_start_symbol_set (node->content.sym,
+                                node->content.sym->location);
+    }
+
   /* Insert the initial rule, whose line is that of the first rule
      (not that of the start symbol):
 
      accept: %start EOF.  */
   {
-    symbol_list *p = symbol_list_new (accept, empty_location);
+    symbol_list *p = symbol_list_sym_new (accept, empty_location);
     p->location = grammar->location;
-    p->next = symbol_list_new (startsymbol, empty_location);
-    p->next->next = symbol_list_new (endtoken, empty_location);
-    p->next->next->next = symbol_list_new (NULL, empty_location);
+    p->next = symbol_list_sym_new (startsymbol, empty_location);
+    p->next->next = symbol_list_sym_new (endtoken, empty_location);
+    p->next->next->next = symbol_list_sym_new (NULL, empty_location);
     p->next->next->next->next = grammar;
     nrules += 1;
     nritems += 3;
     grammar = p;
   }
 
-  assert (nsyms <= SYMBOL_NUMBER_MAXIMUM && nsyms == ntokens + nvars);
+  aver (nsyms <= SYMBOL_NUMBER_MAXIMUM && nsyms == ntokens + nvars);
 
   /* Assign the symbols their symbol numbers.  Write #defines for the
      token symbols into FDEFINES if requested.  */
   symbols_pack ();
 
+  /* Scan rule actions after invoking symbol_check_alias_consistency (in
+     symbols_pack above) so that token types are set correctly before the rule
+     action type checking.
+
+     Before invoking grammar_rule_check (in packgram below) on any rule, make
+     sure all actions have already been scanned in order to set `used' flags.
+     Otherwise, checking that a midrule's $$ should be set will not always work
+     properly because the check must forward-reference the midrule's parent
+     rule.  For the same reason, all the `used' flags must be set before
+     checking whether to remove `$' from any midrule symbol name (also in
+     packgram).  */
+  {
+    symbol_list *sym;
+    for (sym = grammar; sym; sym = sym->next)
+      code_props_translate_code (&sym->action_props);
+  }
+
   /* Convert the grammar into the format described in gram.h.  */
   packgram ();
 
   /* The grammar as a symbol_list is no longer needed. */
-  LIST_FREE (symbol_list, grammar);
+  symbol_list_free (grammar);
 }
diff --git a/src/reader.h b/src/reader.h
index f110f70..e154deb 100644
--- a/src/reader.h
+++ b/src/reader.h
@@ -1,30 +1,29 @@
 /* Input parser for Bison
 
-   Copyright (C) 2000, 2001, 2002, 2003, 2005, 2006 Free Software
+   Copyright (C) 2000-2003, 2005-2007, 2009-2012 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef READER_H_
 # define READER_H_
 
 # include "location.h"
 # include "symlist.h"
+# include "named-ref.h"
 
 # include "parse-gram.h"
 
@@ -33,28 +32,9 @@
   struct merger_list* next;
   uniqstr name;
   uniqstr type;
+  location type_declaration_location;
 } merger_list;
 
-/* From the scanner.  */
-extern FILE *gram_in;
-extern int gram__flex_debug;
-extern boundary scanner_cursor;
-extern char *last_string;
-extern location last_braced_code_loc;
-extern int max_left_semantic_context;
-void scanner_initialize (void);
-void scanner_free (void);
-void scanner_last_string_free (void);
-
-/* These are declared by the scanner, but not used.  We put them here
-   to pacify "make syntax-check".  */
-extern FILE *gram_out;
-extern int gram_lineno;
-
-# define YY_DECL int gram_lex (YYSTYPE *val, location *loc)
-YY_DECL;
-
-
 /* From the parser.  */
 extern int gram_debug;
 int gram_parse (void);
@@ -63,23 +43,27 @@
 
 /* From reader.c. */
 void grammar_start_symbol_set (symbol *sym, location loc);
-void prologue_augment (const char *prologue, location loc);
-void grammar_current_rule_begin (symbol *lhs, location loc);
+void grammar_current_rule_begin (symbol *lhs, location loc,
+				 named_ref *lhs_named_ref);
 void grammar_current_rule_end (location loc);
 void grammar_midrule_action (void);
 void grammar_current_rule_prec_set (symbol *precsym, location loc);
 void grammar_current_rule_dprec_set (int dprec, location loc);
 void grammar_current_rule_merge_set (uniqstr name, location loc);
-void grammar_current_rule_symbol_append (symbol *sym, location loc);
-void grammar_current_rule_action_append (const char *action, location loc);
-extern symbol_list *current_rule;
+void grammar_current_rule_symbol_append (symbol *sym, location loc,
+					 named_ref *nref);
+void grammar_current_rule_action_append (const char *action, location loc,
+					 named_ref *nref);
 void reader (void);
 void free_merger_functions (void);
 
 extern merger_list *merge_functions;
 
 /* Was %union seen?  */
-extern bool typed;
+extern bool union_seen;
+
+/* Was a tag seen?  */
+extern bool tag_seen;
 
 /* Should rules have a default precedence?  */
 extern bool default_prec;
diff --git a/src/reduce.c b/src/reduce.c
index 1bb40f0..5338393 100644
--- a/src/reduce.c
+++ b/src/reduce.c
@@ -1,24 +1,22 @@
 /* Grammar reduction for Bison.
 
-   Copyright (C) 1988, 1989, 2000, 2001, 2002, 2003, 2005, 2006 Free
-   Software Foundation, Inc.
+   Copyright (C) 1988-1989, 2000-2003, 2005-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 /* Reduce the grammar: Find and eliminate unreachable terminals,
@@ -31,12 +29,12 @@
 #include "system.h"
 
 #include <bitset.h>
-#include <quotearg.h>
 
 #include "complain.h"
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
+#include "print-xml.h"
 #include "reader.h"
 #include "reduce.h"
 #include "symtab.h"
@@ -240,7 +238,7 @@
     rule_number r;
     for (r = 0; r < nrules; r++)
       rules[r].useful = bitset_test (P, r);
-    grammar_rules_never_reduced_report (_("useless rule"));
+    grammar_rules_useless_report (_("rule useless in grammar"));
   }
 
   /* Map the nonterminals to their new index: useful first, useless
@@ -301,7 +299,7 @@
     if (!bitset_test (V, i))
       {
 	nontermmap[i - ntokens] = n++;
-	warn_at (symbols[i]->location, _("useless nonterminal: %s"),
+	warn_at (symbols[i]->location, _("nonterminal useless in grammar: %s"),
 		 symbols[i]->tag);
       }
 
@@ -349,7 +347,7 @@
   if (nuseless_nonterminals > 0)
     {
       int i;
-      fprintf (out, "%s\n\n", _("Useless nonterminals"));
+      fprintf (out, "%s\n\n", _("Nonterminals useless in grammar"));
       for (i = 0; i < nuseless_nonterminals; ++i)
 	fprintf (out, "   %s\n", symbols[nsyms + i]->tag);
       fputs ("\n\n", out);
@@ -359,10 +357,10 @@
     bool b = false;
     int i;
     for (i = 0; i < ntokens; i++)
-      if (!bitset_test (V, i) && !bitset_test (V1, i))
+      if (reduce_token_unused_in_grammar (i))
 	{
 	  if (!b)
-	    fprintf (out, "%s\n\n", _("Terminals which are not used"));
+	    fprintf (out, "%s\n\n", _("Terminals unused in grammar"));
 	  b = true;
 	  fprintf (out, "   %s\n", symbols[i]->tag);
 	}
@@ -371,14 +369,11 @@
   }
 
   if (nuseless_productions > 0)
-    grammar_rules_partial_print (out, _("Useless rules"),
-				 rule_useless_p);
+    grammar_rules_partial_print (out, _("Rules useless in grammar"),
+				 rule_useless_in_grammar_p);
 }
 
 
-
-
-
 /*-------------------------------.
 | Report the results to STDERR.  |
 `-------------------------------*/
@@ -386,29 +381,16 @@
 static void
 reduce_print (void)
 {
-  if (yacc_flag && nuseless_productions)
-    fprintf (stderr, ngettext ("%d rule never reduced\n",
-			       "%d rules never reduced\n",
-			       nuseless_productions),
-	     nuseless_productions);
-
-  fprintf (stderr, "%s: %s: ", grammar_file, _("warning"));
-
   if (nuseless_nonterminals > 0)
-    fprintf (stderr, ngettext ("%d useless nonterminal",
-			       "%d useless nonterminals",
-			       nuseless_nonterminals),
-	     nuseless_nonterminals);
-
-  if (nuseless_nonterminals > 0 && nuseless_productions > 0)
-    fprintf (stderr, _(" and "));
-
+    warn (ngettext ("%d nonterminal useless in grammar",
+                    "%d nonterminals useless in grammar",
+                    nuseless_nonterminals),
+          nuseless_nonterminals);
   if (nuseless_productions > 0)
-    fprintf (stderr, ngettext ("%d useless rule",
-			       "%d useless rules",
-			       nuseless_productions),
-	     nuseless_productions);
-  fprintf (stderr, "\n");
+    warn (ngettext ("%d rule useless in grammar",
+                    "%d rules useless in grammar",
+                    nuseless_productions),
+          nuseless_productions);
 }
 
 void
@@ -455,6 +437,19 @@
     }
 }
 
+bool
+reduce_token_unused_in_grammar (symbol_number i)
+{
+  aver (i < ntokens);
+  return !bitset_test (V, i) && !bitset_test (V1, i);
+}
+
+bool
+reduce_nonterminal_useless_in_grammar (symbol_number i)
+{
+  aver (ntokens <= i && i < nsyms + nuseless_nonterminals);
+  return nsyms <= i;
+}
 
 /*-----------------------------------------------------------.
 | Free the global sets used to compute the reduced grammar.  |
diff --git a/src/reduce.h b/src/reduce.h
index dfdab65..c28824f 100644
--- a/src/reduce.h
+++ b/src/reduce.h
@@ -1,29 +1,30 @@
 /* Grammar reduction for Bison.
 
-   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2000-2002, 2007, 2009-2012 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef REDUCE_H_
 # define REDUCE_H_
 
 void reduce_grammar (void);
 void reduce_output (FILE *out);
+bool reduce_token_unused_in_grammar (symbol_number i);
+bool reduce_nonterminal_useless_in_grammar (symbol_number i);
 void reduce_free (void);
 
 extern symbol_number nuseless_nonterminals;
diff --git a/src/relation.c b/src/relation.c
index 1d2b42d..49424c0 100644
--- a/src/relation.c
+++ b/src/relation.c
@@ -1,22 +1,22 @@
 /* Binary relations.
-   Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004-2005, 2009-2012 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
diff --git a/src/relation.h b/src/relation.h
index 479e42e..88c69b7 100644
--- a/src/relation.h
+++ b/src/relation.h
@@ -1,22 +1,21 @@
 /* Binary relations.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 #ifndef RELATION_H_
diff --git a/src/scan-code-c.c b/src/scan-code-c.c
new file mode 100644
index 0000000..4a018f8
--- /dev/null
+++ b/src/scan-code-c.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#include "system.h"
+#include "scan-code.c"
diff --git a/src/scan-code.c b/src/scan-code.c
new file mode 100644
index 0000000..8201dc9
--- /dev/null
+++ b/src/scan-code.c
@@ -0,0 +1,3148 @@
+#line 2 "scan-code.c"
+
+#line 4 "scan-code.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+/* %not-for-header */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+#define yy_create_buffer code__create_buffer
+#define yy_delete_buffer code__delete_buffer
+#define yy_flex_debug code__flex_debug
+#define yy_init_buffer code__init_buffer
+#define yy_flush_buffer code__flush_buffer
+#define yy_load_buffer_state code__load_buffer_state
+#define yy_switch_to_buffer code__switch_to_buffer
+#define yyin code_in
+#define yyleng code_leng
+#define yylex code_lex
+#define yylineno code_lineno
+#define yyout code_out
+#define yyrestart code_restart
+#define yytext code_text
+#define yywrap code_wrap
+#define yyalloc code_alloc
+#define yyrealloc code_realloc
+#define yyfree code_free
+
+/* %endif */
+/* %endif */
+/* %ok-for-header */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* %if-c++-only */
+/* %endif */
+
+/* %if-c-only */
+    
+/* %endif */
+
+/* %if-c-only */
+
+/* %endif */
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+/* %if-c-only */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+/* %endif */
+
+/* %if-tables-serialization */
+/* %endif */
+/* end standard C headers. */
+
+/* %if-c-or-c++ */
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* %not-for-header */
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+/* %ok-for-header */
+
+/* %if-reentrant */
+/* %endif */
+
+/* %if-not-reentrant */
+
+/* %endif */
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE code_restart(code_in  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+/* %if-not-reentrant */
+extern yy_size_t code_leng;
+/* %endif */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+extern FILE *code_in, *code_out;
+/* %endif */
+/* %endif */
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up code_text. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up code_text again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+/* %if-c-only */
+	FILE *yy_input_file;
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	yy_size_t yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via code_restart()), so that the user can continue scanning by
+	 * just pointing code_in at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+/* %if-not-reentrant */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+/* %endif */
+/* %ok-for-header */
+
+/* %endif */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* %if-c-only Standard (non-C++) definition */
+
+/* %if-not-reentrant */
+/* %not-for-header */
+
+/* yy_hold_char holds the character lost when code_text is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t code_leng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow code_wrap()'s to do buffer switches
+ * instead of setting up a fresh code_in.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+/* %ok-for-header */
+
+/* %endif */
+
+void code_restart (FILE *input_file  );
+void code__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE code__create_buffer (FILE *file,int size  );
+void code__delete_buffer (YY_BUFFER_STATE b  );
+void code__flush_buffer (YY_BUFFER_STATE b  );
+void code_push_buffer_state (YY_BUFFER_STATE new_buffer  );
+void code_pop_buffer_state (void );
+
+static void code_ensure_buffer_stack (void );
+static void code__load_buffer_state (void );
+static void code__init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER code__flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE code__scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE code__scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE code__scan_bytes (yyconst char *bytes,yy_size_t len  );
+
+/* %endif */
+
+void *code_alloc (yy_size_t  );
+void *code_realloc (void *,yy_size_t  );
+void code_free (void *  );
+
+#define yy_new_buffer code__create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        code_ensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            code__create_buffer(code_in,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        code_ensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            code__create_buffer(code_in,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* %% [1.0] code_text/code_in/code_out/yy_state_type/code_lineno etc. def's & init go here */
+/* Begin user sect3 */
+
+#define code_wrap() 1
+#define YY_SKIP_YYWRAP
+
+#define FLEX_DEBUG
+
+typedef unsigned char YY_CHAR;
+
+FILE *code_in = (FILE *) 0, *code_out = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int code_lineno;
+
+int code_lineno = 1;
+
+extern char *code_text;
+#define yytext_ptr code_text
+
+/* %if-c-only Standard (non-C++) definition */
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* %endif */
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up code_text.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+/* %% [2.0] code to fiddle code_text and code_leng for yymore() goes here \ */\
+	code_leng = (size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+/* %% [3.0] code to copy yytext_ptr to code_text[] goes here, if %array \ */\
+	(yy_c_buf_p) = yy_cp;
+
+/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
+#define YY_NUM_RULES 29
+#define YY_END_OF_BUFFER 30
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[101] =
+    {   0,
+        0,    0,    0,    0,    3,    3,    4,    4,    4,    4,
+       19,   19,    0,    0,   30,   28,   27,   28,    2,   28,
+        6,   28,    5,   24,   21,   20,   20,    8,   18,   11,
+        7,   24,   15,   11,   23,   23,   12,   24,   16,   17,
+        8,   11,    7,   28,   11,   12,    1,    0,    0,    3,
+        4,    4,    4,    4,   13,    0,   13,   13,    0,    0,
+        9,   10,    0,   14,    0,   14,   14,    0,   23,   23,
+        0,   19,   25,    0,   26,    0,    0,    0,    0,    0,
+        0,    0,   13,    0,    0,    0,    0,   14,    0,   23,
+        0,    0,    0,    0,    0,   23,    0,   23,   22,    0
+
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        4,    2,    5,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    6,    7,    8,    1,    1,    9,    1,
+        1,   10,    1,    1,   11,   12,   13,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,    1,   15,   16,
+        1,   17,    1,   18,   19,   20,   20,   20,   20,   21,
+       20,   20,   22,   20,   20,   23,   20,   20,   20,   20,
+       20,   20,   20,   20,   20,   20,   20,   20,   24,   20,
+       25,   26,   27,    1,   20,    1,   20,   20,   20,   20,
+
+       20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
+       20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
+       20,   20,   28,    1,   29,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[31] =
+    {   0,
+        1,    1,    2,    1,    1,    1,    1,    3,    1,    1,
+        4,    5,    1,    6,    1,    1,    2,    1,    7,    7,
+        7,    7,    7,    7,    3,    1,    8,    1,    1,    2
+    } ;
+
+static yyconst flex_int16_t yy_base[113] =
+    {   0,
+        0,    1,   21,   41,   66,    0,    4,    8,   12,   14,
+       93,    0,  118,    0,  242,  243,  243,    7,  243,    0,
+      243,   39,  243,  243,  243,  243,  243,  243,  243,  138,
+      243,   34,  243,   42,    0,  217,  243,   33,  243,  243,
+      243,    8,  243,   44,  232,  243,  243,   59,   69,  213,
+      243,   73,  212,   76,  243,  223,    0,  222,    0,    0,
+      243,  243,   79,  243,  205,    0,  202,    0,    0,  188,
+       83,  175,  243,    0,  243,   86,   19,  126,  130,  135,
+      138,  122,    0,  151,  140,  162,  143,    0,  128,  132,
+      168,  130,  128,  108,   37,   36,   47,   29,    0,  243,
+
+      172,  180,  186,  188,  192,  199,  203,  207,  210,  217,
+      222,  227
+    } ;
+
+static yyconst flex_int16_t yy_def[113] =
+    {   0,
+      101,  101,  101,  101,  101,    5,    5,    5,    5,    5,
+      100,   11,  101,   13,  100,  100,  100,  100,  100,  100,
+      100,  102,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  103,  104,  104,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  105,  100,  106,  107,
+      100,  100,  100,  100,  100,  108,  100,  109,  104,  104,
+      100,  100,  100,  110,  100,  100,  100,  100,  100,  100,
+      100,  102,  105,  106,  111,  100,  100,  108,  112,  104,
+      100,  110,   30,  111,  112,  104,  100,  104,  104,    0,
+
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100
+    } ;
+
+static yyconst flex_int16_t yy_nxt[274] =
+    {   0,
+      100,   49,   50,   49,  100,  100,   16,   17,   17,   21,
+       16,  100,  100,   21,   16,   73,   16,   17,   17,   47,
+       23,  100,   23,   74,   17,   17,   17,   17,   17,   22,
+       18,   47,   48,   22,   71,   72,   71,   22,   17,   22,
+       52,   53,   52,   61,   48,   17,   62,   17,   17,   64,
+       18,   99,   65,   61,   73,   67,   62,   98,   17,   63,
+       76,   77,   76,   64,   54,   17,   68,   17,   19,   63,
+       49,   50,   49,   17,   79,   53,   79,   81,   82,   81,
+       86,   87,   86,   17,   71,   72,   71,   76,   77,   76,
+       17,   20,   17,   24,   25,   26,   24,   27,   28,   29,
+
+       30,   31,   24,   24,   24,   32,   24,   33,   24,   24,
+       34,   35,   35,   35,   35,   35,   36,   37,   38,   37,
+       39,   40,   24,   41,  100,   42,   43,   49,   50,   49,
+       44,   79,   53,   79,   55,   45,   79,   53,   79,   81,
+       82,   81,   46,  100,   46,   55,   97,   54,   56,   57,
+       96,   58,   61,   59,   64,   62,   57,   57,   57,   57,
+       57,   57,   60,   86,   87,   86,   55,   93,   63,   71,
+       72,   71,   16,   16,   16,   16,   16,   16,   16,   16,
+       51,   51,   51,   51,   51,   51,   51,   51,   66,   66,
+       66,   66,   66,   69,   69,   83,   83,   83,   83,   84,
+
+       91,   84,   84,   84,   84,   84,   84,   85,   90,   85,
+       88,   88,   88,   88,   89,   67,   89,   92,   67,   92,
+       92,   92,   92,   92,   92,   94,   94,   94,   94,   94,
+       95,   95,   95,   95,   95,   58,   58,   80,   78,   75,
+       70,  100,   15,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100
+    } ;
+
+static yyconst flex_int16_t yy_chk[274] =
+    {   0,
+        0,   20,   20,   20,    0,    0,    7,    1,    2,    7,
+        8,    0,    0,    8,    9,   42,   10,    1,    2,   18,
+        9,    0,   10,   42,    1,    2,    1,    2,    3,    7,
+        3,   77,   18,    8,   38,   38,   38,    9,    3,   10,
+       22,   22,   22,   32,   77,    3,   32,    3,    4,   34,
+        4,   98,   34,   44,   97,   34,   44,   96,    4,   32,
+       48,   48,   48,   95,   22,    4,   34,    4,    5,   44,
+       49,   49,   49,    5,   52,   52,   52,   54,   54,   54,
+       63,   63,   63,    5,   71,   71,   71,   76,   76,   76,
+        5,    5,    5,   11,   11,   11,   11,   11,   11,   11,
+
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   13,   82,   13,   13,   78,   78,   78,
+       13,   79,   79,   79,   94,   13,   80,   80,   80,   81,
+       81,   81,   13,   93,   13,   30,   92,   82,   30,   30,
+       90,   30,   87,   30,   89,   87,   30,   30,   30,   30,
+       30,   30,   30,   86,   86,   86,   85,   84,   87,   91,
+       91,   91,  101,  101,  101,  101,  101,  101,  101,  101,
+      102,  102,  102,  102,  102,  102,  102,  102,  103,  103,
+      103,  103,  103,  104,  104,  105,  105,  105,  105,  106,
+
+       72,  106,  106,  106,  106,  106,  106,  107,   70,  107,
+      108,  108,  108,  108,  109,   67,  109,  110,   65,  110,
+      110,  110,  110,  110,  110,  111,  111,  111,  111,  111,
+      112,  112,  112,  112,  112,   58,   56,   53,   50,   45,
+       36,   15,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
+      100,  100,  100
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int code__flex_debug;
+int code__flex_debug = 1;
+
+static yyconst flex_int16_t yy_rule_linenum[29] =
+    {   0,
+      132,  142,  143,  153,  158,  163,  169,  174,  179,  183,
+      187,  192,  200,  207,  215,  216,  217,  244,  246,  247,
+      248,  252,  260,  262,  267,  275,  285,  288
+    } ;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *code_text;
+#line 1 "scan-code.l"
+/* Bison Action Scanner                             -*- C -*-
+
+   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+#define YY_NO_INPUT 1
+#line 24 "scan-code.l"
+/* Work around a bug in flex 2.5.31.  See Debian bug 333231
+   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
+#undef code_wrap
+#define code_wrap() 1
+
+#define FLEX_PREFIX(Id) code_ ## Id
+#include "flex-scanner.h"
+
+#include "complain.h"
+#include "reader.h"
+#include "getargs.h"
+#include "scan-code.h"
+#include "symlist.h"
+
+#include <c-ctype.h>
+#include <get-errno.h>
+#include <quote.h>
+
+/* The current calling start condition: SC_RULE_ACTION or
+   SC_SYMBOL_ACTION. */
+# define YY_DECL static char *code_lex (code_props *self, int sc_context)
+YY_DECL;
+
+#define YY_USER_ACTION  location_compute (loc, &loc->end, code_text, code_leng);
+
+static char *fetch_type_name (char *cp, char const **type_name,
+                              location dollar_loc);
+
+static void handle_action_dollar (symbol_list *rule, char *cp,
+				  location dollar_loc);
+static void handle_action_at (symbol_list *rule, char *cp, location at_loc);
+
+/* A string to be pushed to obstack after dollar/at has been handled. */
+static char *ref_tail_fields;
+
+static location the_location;
+static location *loc = &the_location;
+
+/* A string representing the most recent translation.  */
+static char *last_string;
+
+/* True if an untyped $$ or $n was seen.  */
+static bool untyped_var_seen;
+
+/* C and C++ comments in code. */
+
+/* Strings and characters in code. */
+
+/* Whether in a rule or symbol action.  Specifies the translation
+of $ and @.  */
+
+/* POSIX says that a tag must be both an id and a C union member, but
+   historically almost any character is allowed in a tag.  We disallow
+   NUL and newline, as this simplifies our implementation.  */
+/* Zero or more instances of backslash-newline.  Following GCC, allow
+   white space between the backslash and the newline.  */
+/* C style identifier. Must start with letter. Will be used for
+   named symbol references. Shall be kept synchronized with
+   scan-gram.l "letter" and "id". */
+#line 735 "scan-code.c"
+
+#define INITIAL 0
+#define SC_COMMENT 1
+#define SC_LINE_COMMENT 2
+#define SC_STRING 3
+#define SC_CHARACTER 4
+#define SC_RULE_ACTION 5
+#define SC_SYMBOL_ACTION 6
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+/* %if-c-only */
+#include <unistd.h>
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+/* %if-c-only Reentrant structure and macros (non-C++). */
+/* %if-reentrant */
+/* %if-c-only */
+
+static int yy_init_globals (void );
+
+/* %endif */
+/* %if-reentrant */
+/* %endif */
+/* %endif End reentrant structures and macros. */
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int code_lex_destroy (void );
+
+int code_get_debug (void );
+
+void code_set_debug (int debug_flag  );
+
+YY_EXTRA_TYPE code_get_extra (void );
+
+void code_set_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *code_get_in (void );
+
+void code_set_in  (FILE * in_str  );
+
+FILE *code_get_out (void );
+
+void code_set_out  (FILE * out_str  );
+
+yy_size_t code_get_leng (void );
+
+char *code_get_text (void );
+
+int code_get_lineno (void );
+
+void code_set_lineno (int line_number  );
+
+/* %if-bison-bridge */
+/* %endif */
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int code_wrap (void );
+#else
+extern int code_wrap (void );
+#endif
+#endif
+
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+/* %ok-for-header */
+
+/* %endif */
+#endif
+
+/* %if-c-only */
+
+/* %endif */
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* %if-c-only Standard (non-C++) definition */
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( code_text, code_leng, 1, code_out )) {} } while (0)
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( code_in )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( code_in ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, code_in))==0 && ferror(code_in)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(code_in); \
+			} \
+		}\
+\
+/* %if-c++-only C++ definition \ */\
+/* %endif */
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+/* %if-c-only */
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+/* %if-tables-serialization structures and prototypes */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* %tables-yydmap generated elements */
+/* %endif */
+/* end tables serialization structures and prototypes */
+
+/* %ok-for-header */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+/* %if-c-only Standard (non-C++) definition */
+
+extern int code_lex (void);
+
+#define YY_DECL int code_lex (void)
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after code_text and code_leng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+/* %% [6.0] YY_RULE_SETUP definition goes here */
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/* %not-for-header */
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    
+/* %% [7.0] user's declarations go here */
+#line 94 "scan-code.l"
+
+
+
+  /* Nesting level of the current code in braces.  */
+  int braces_level = 0;
+
+  /* Whether a semicolon is probably needed.
+
+     The heuristic is that a semicolon is not needed after '{', '}',
+     ';', or a C preprocessor directive, and that whitespaces and
+     comments do not affect this flag.  Note that '{' does not need a
+     semicolon because of '{}'.  A semicolon may be needed before a
+     cpp directive, but don't bother.
+
+     While it is maintained in several start-conditions (factoring
+     opportunities), it is meaningful only for SC_RULE_ACTION. */
+  bool need_semicolon = false;
+
+  /* Whether in a C preprocessor directive.  Don't use a start condition
+     for this because, at the end of strings and comments, we still need
+     to know whether we're in a directive.  */
+  bool in_cpp = false;
+
+  /* This scanner is special: it is invoked only once, henceforth
+     is expected to return only once.  This initialization is
+     therefore done once per action to translate. */
+  aver (sc_context == SC_SYMBOL_ACTION
+	|| sc_context == SC_RULE_ACTION
+	|| sc_context == INITIAL);
+  BEGIN sc_context;
+
+
+  /*------------------------------------------------------------.
+  | Scanning a C comment.  The initial '/ *' is already eaten.  |
+  `------------------------------------------------------------*/
+
+#line 1018 "scan-code.c"
+
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! code_in )
+/* %if-c-only */
+			code_in = stdin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+		if ( ! code_out )
+/* %if-c-only */
+			code_out = stdout;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			code_ensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				code__create_buffer(code_in,YY_BUF_SIZE );
+		}
+
+		code__load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+/* %% [8.0] yymore()-related code goes here */
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of code_text. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+/* %% [9.0] code to set up and find next match goes here */
+		yy_current_state = (yy_start);
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				(yy_last_accepting_state) = yy_current_state;
+				(yy_last_accepting_cpos) = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 101 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_current_state != 100 );
+		yy_cp = (yy_last_accepting_cpos);
+		yy_current_state = (yy_last_accepting_state);
+
+yy_find_action:
+/* %% [10.0] code to find the action number goes here */
+		yy_act = yy_accept[yy_current_state];
+
+		YY_DO_BEFORE_ACTION;
+
+/* %% [11.0] code for code_lineno update goes here */
+
+do_action:	/* This label is used only to access EOF actions. */
+
+/* %% [12.0] debug code goes here */
+		if ( code__flex_debug )
+			{
+			if ( yy_act == 0 )
+				fprintf( stderr, "--scanner backing up\n" );
+			else if ( yy_act < 29 )
+				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
+				         (long)yy_rule_linenum[yy_act], code_text );
+			else if ( yy_act == 29 )
+				fprintf( stderr, "--accepting default rule (\"%s\")\n",
+				         code_text );
+			else if ( yy_act == 30 )
+				fprintf( stderr, "--(end of buffer or a NUL)\n" );
+			else
+				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
+			}
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+/* %% [13.0] actions go here */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = (yy_hold_char);
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			goto yy_find_action;
+
+case 1:
+/* rule 1 can match eol */
+YY_RULE_SETUP
+#line 132 "scan-code.l"
+STRING_GROW; BEGIN sc_context;
+	YY_BREAK
+
+/*--------------------------------------------------------------.
+  | Scanning a line comment.  The initial '//' is already eaten.  |
+  `--------------------------------------------------------------*/
+
+
+case 2:
+/* rule 2 can match eol */
+YY_RULE_SETUP
+#line 142 "scan-code.l"
+STRING_GROW; BEGIN sc_context;
+	YY_BREAK
+case 3:
+/* rule 3 can match eol */
+YY_RULE_SETUP
+#line 143 "scan-code.l"
+STRING_GROW;
+	YY_BREAK
+
+/*--------------------------------------------.
+  | Scanning user-code characters and strings.  |
+  `--------------------------------------------*/
+
+
+case 4:
+/* rule 4 can match eol */
+YY_RULE_SETUP
+#line 153 "scan-code.l"
+STRING_GROW;
+	YY_BREAK
+
+
+
+case 5:
+YY_RULE_SETUP
+#line 158 "scan-code.l"
+STRING_GROW; BEGIN sc_context;
+	YY_BREAK
+
+
+
+case 6:
+YY_RULE_SETUP
+#line 163 "scan-code.l"
+STRING_GROW; BEGIN sc_context;
+	YY_BREAK
+
+
+
+case 7:
+YY_RULE_SETUP
+#line 169 "scan-code.l"
+{
+    STRING_GROW;
+    BEGIN SC_CHARACTER;
+    need_semicolon = true;
+  }
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 174 "scan-code.l"
+{
+    STRING_GROW;
+    BEGIN SC_STRING;
+    need_semicolon = true;
+  }
+	YY_BREAK
+case 9:
+/* rule 9 can match eol */
+YY_RULE_SETUP
+#line 179 "scan-code.l"
+{
+    STRING_GROW;
+    BEGIN SC_COMMENT;
+  }
+	YY_BREAK
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+#line 183 "scan-code.l"
+{
+    STRING_GROW;
+    BEGIN SC_LINE_COMMENT;
+  }
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 187 "scan-code.l"
+{
+    warn_at (*loc, _("stray '%s'"), code_text);
+    obstack_escape (&obstack_for_string, code_text);
+    need_semicolon = true;
+  }
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 192 "scan-code.l"
+{
+    obstack_escape (&obstack_for_string, code_text);
+    need_semicolon = true;
+  }
+	YY_BREAK
+
+
+
+case 13:
+YY_RULE_SETUP
+#line 200 "scan-code.l"
+{
+    ref_tail_fields = NULL;
+    handle_action_dollar (self->rule, code_text, *loc);
+    if (ref_tail_fields)
+      obstack_sgrow (&obstack_for_string, ref_tail_fields);
+    need_semicolon = true;
+  }
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 207 "scan-code.l"
+{
+    ref_tail_fields = NULL;
+    handle_action_at (self->rule, code_text, *loc);
+    if (ref_tail_fields)
+      obstack_sgrow (&obstack_for_string, ref_tail_fields);
+    need_semicolon = true;
+  }
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 215 "scan-code.l"
+STRING_GROW;                 need_semicolon = false;
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 216 "scan-code.l"
+STRING_GROW; ++braces_level; need_semicolon = false;
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 217 "scan-code.l"
+{
+    bool outer_brace = --braces_level == 0;
+
+    /* As an undocumented Bison extension, append ';' before the last
+       brace in braced code, so that the user code can omit trailing
+       ';'.  But do not append ';' if emulating Yacc, since Yacc does
+       not append one.  This is deprecated since release 2.4.1.  */
+    if (outer_brace && !yacc_flag && language_prio == default_prio
+        && skeleton_prio == default_prio && need_semicolon && ! in_cpp)
+      {
+        unsigned int indent = 0;
+        warn_at_indent (*loc, &indent,
+                       _("a ';' might be needed at the end of action code"));
+        indent += SUB_INDENT;
+        warn_at_indent (*loc, &indent,
+                       _("future versions of Bison will not add the ';'"));
+        obstack_1grow (&obstack_for_string, ';');
+      }
+
+    STRING_GROW;
+    need_semicolon = false;
+  }
+	YY_BREAK
+/* Preprocessing directives should only be recognized at the beginning
+     of lines, allowing whitespace including comments, but in C/C++,
+     '#' can only be the start of preprocessor directives or within
+     '#define' directives anyway, so don't bother with begin of line.  */
+case 18:
+YY_RULE_SETUP
+#line 244 "scan-code.l"
+STRING_GROW; in_cpp = true;
+	YY_BREAK
+case 19:
+/* rule 19 can match eol */
+YY_RULE_SETUP
+#line 246 "scan-code.l"
+STRING_GROW;
+	YY_BREAK
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+#line 247 "scan-code.l"
+STRING_GROW; if (in_cpp) in_cpp = need_semicolon = false;
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 248 "scan-code.l"
+STRING_GROW;
+	YY_BREAK
+/* YYFAIL is undocumented and was formally deprecated in Bison
+     2.4.2.  */
+case 22:
+YY_RULE_SETUP
+#line 252 "scan-code.l"
+{
+    STRING_GROW; need_semicolon = true;
+    warn_at (*loc, _("use of YYFAIL, which is deprecated and will be"
+                     " removed"));
+  }
+	YY_BREAK
+/* The sole purpose of this is to make sure identifiers that merely
+     contain YYFAIL don't produce the above warning.  */
+case 23:
+YY_RULE_SETUP
+#line 260 "scan-code.l"
+STRING_GROW; need_semicolon = true;
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 262 "scan-code.l"
+STRING_GROW; need_semicolon = true;
+	YY_BREAK
+
+
+
+case 25:
+YY_RULE_SETUP
+#line 267 "scan-code.l"
+{
+    const char *type_name = NULL;
+    fetch_type_name (code_text + 1, &type_name, *loc)[-1] = 0;
+    obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar(");
+    obstack_quote (&obstack_for_string, type_name);
+    obstack_sgrow (&obstack_for_string, ")[");
+    self->is_value_used = true;
+  }
+	YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 275 "scan-code.l"
+{
+    obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
+    locations_flag = true;
+  }
+	YY_BREAK
+
+
+
+/* Escape M4 quoting characters in C code.  */
+case 27:
+YY_RULE_SETUP
+#line 285 "scan-code.l"
+obstack_escape (&obstack_for_string, code_text);
+	YY_BREAK
+/* By default, grow the string obstack with the input.  */
+case 28:
+/* rule 28 can match eol */
+YY_RULE_SETUP
+#line 288 "scan-code.l"
+STRING_GROW;
+	YY_BREAK
+/* End of processing. */
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(SC_COMMENT):
+case YY_STATE_EOF(SC_LINE_COMMENT):
+case YY_STATE_EOF(SC_STRING):
+case YY_STATE_EOF(SC_CHARACTER):
+case YY_STATE_EOF(SC_RULE_ACTION):
+case YY_STATE_EOF(SC_SYMBOL_ACTION):
+#line 291 "scan-code.l"
+STRING_FINISH; return last_string;
+	YY_BREAK
+
+case 29:
+YY_RULE_SETUP
+#line 294 "scan-code.l"
+YY_FATAL_ERROR( "flex scanner jammed" );
+	YY_BREAK
+#line 1402 "scan-code.c"
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed code_in at a new source and called
+			 * code_lex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = code_in;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
+				yy_cp = (yy_last_accepting_cpos);
+				yy_current_state = (yy_last_accepting_state);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( code_wrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * code_text, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of code_lex */
+/* %ok-for-header */
+
+/* %if-c++-only */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+/* %if-c-only */
+static int yy_get_next_buffer (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			yy_size_t num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				yy_size_t new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					code_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			code_restart(code_in  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) code_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+/* %if-c-only */
+/* %not-for-header */
+
+    static yy_state_type yy_get_previous_state (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    
+/* %% [15.0] code to get the start state into yy_current_state goes here */
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+/* %% [16.0] code to find the next state goes here */
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 30);
+		if ( yy_accept[yy_current_state] )
+			{
+			(yy_last_accepting_state) = yy_current_state;
+			(yy_last_accepting_cpos) = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 101 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+/* %if-c-only */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	register int yy_is_jam;
+    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
+	register char *yy_cp = (yy_c_buf_p);
+
+	register YY_CHAR yy_c = 30;
+	if ( yy_accept[yy_current_state] )
+		{
+		(yy_last_accepting_state) = yy_current_state;
+		(yy_last_accepting_cpos) = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 101 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 100);
+
+		return yy_is_jam ? 0 : yy_current_state;
+}
+
+/* %if-c-only */
+
+/* %endif */
+
+/* %if-c-only */
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	int c;
+    
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					code_restart(code_in );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( code_wrap( ) )
+						return EOF;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve code_text */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+/* %% [19.0] update BOL and code_lineno */
+
+	return c;
+}
+/* %if-c-only */
+#endif	/* ifndef YY_NO_INPUT */
+/* %endif */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+/* %if-c-only */
+    void code_restart  (FILE * input_file )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        code_ensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            code__create_buffer(code_in,YY_BUF_SIZE );
+	}
+
+	code__init_buffer(YY_CURRENT_BUFFER,input_file );
+	code__load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+/* %if-c-only */
+    void code__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		code_pop_buffer_state();
+	 *		code_push_buffer_state(new_buffer);
+     */
+	code_ensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	code__load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (code_wrap()) processing, but the only time this flag
+	 * is looked at is after code_wrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/* %if-c-only */
+static void code__load_buffer_state  (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	code_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+/* %if-c-only */
+    YY_BUFFER_STATE code__create_buffer  (FILE * file, int  size )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) code_alloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in code__create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) code_alloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in code__create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	code__init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with code__create_buffer()
+ * 
+ */
+/* %if-c-only */
+    void code__delete_buffer (YY_BUFFER_STATE  b )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		code_free((void *) b->yy_ch_buf  );
+
+	code_free((void *) b  );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a code_restart() or at EOF.
+ */
+/* %if-c-only */
+    static void code__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+{
+	int oerrno = errno;
+    
+	code__flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then code__init_buffer was _probably_
+     * called from code_restart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+/* %if-c-only */
+
+        b->yy_is_interactive = 0;
+    
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+/* %if-c-only */
+    void code__flush_buffer (YY_BUFFER_STATE  b )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		code__load_buffer_state( );
+}
+
+/* %if-c-or-c++ */
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+/* %if-c-only */
+void code_push_buffer_state (YY_BUFFER_STATE new_buffer )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	if (new_buffer == NULL)
+		return;
+
+	code_ensure_buffer_stack();
+
+	/* This block is copied from code__switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from code__switch_to_buffer. */
+	code__load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+/* %if-c-only */
+void code_pop_buffer_state (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	code__delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		code__load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+/* %if-c-only */
+static void code_ensure_buffer_stack (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	yy_size_t num_to_alloc;
+    
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)code_alloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in code_ensure_buffer_stack()" );
+								  
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)code_realloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in code_ensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE code__scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) code_alloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in code__scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	code__switch_to_buffer(b  );
+
+	return b;
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan a string. The next call to code_lex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       code__scan_bytes() instead.
+ */
+YY_BUFFER_STATE code__scan_string (yyconst char * yystr )
+{
+    
+	return code__scan_bytes(yystr,strlen(yystr) );
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan the given bytes. The next call to code_lex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE code__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) code_alloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in code__scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = code__scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in code__scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+/* %endif */
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+/* %if-c-only */
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up code_text. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		code_text[code_leng] = (yy_hold_char); \
+		(yy_c_buf_p) = code_text + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		code_leng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/* %if-c-only */
+/* %if-reentrant */
+/* %endif */
+
+/** Get the current line number.
+ * 
+ */
+int code_get_lineno  (void)
+{
+        
+    return code_lineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *code_get_in  (void)
+{
+        return code_in;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *code_get_out  (void)
+{
+        return code_out;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+yy_size_t code_get_leng  (void)
+{
+        return code_leng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *code_get_text  (void)
+{
+        return code_text;
+}
+
+/* %if-reentrant */
+/* %endif */
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void code_set_lineno (int  line_number )
+{
+    
+    code_lineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see code__switch_to_buffer
+ */
+void code_set_in (FILE *  in_str )
+{
+        code_in = in_str ;
+}
+
+void code_set_out (FILE *  out_str )
+{
+        code_out = out_str ;
+}
+
+int code_get_debug  (void)
+{
+        return code__flex_debug;
+}
+
+void code_set_debug (int  bdebug )
+{
+        code__flex_debug = bdebug ;
+}
+
+/* %endif */
+
+/* %if-reentrant */
+/* %if-bison-bridge */
+/* %endif */
+/* %endif if-c-only */
+
+/* %if-c-only */
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from code_lex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    code_in = stdin;
+    code_out = stdout;
+#else
+    code_in = (FILE *) 0;
+    code_out = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * code_lex_init()
+     */
+    return 0;
+}
+/* %endif */
+
+/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
+/* code_lex_destroy is for both reentrant and non-reentrant scanners. */
+int code_lex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		code__delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		code_pop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	code_free((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * code_lex() is called, initialization will occur. */
+    yy_init_globals( );
+
+/* %if-reentrant */
+/* %endif */
+    return 0;
+}
+/* %endif */
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *code_alloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *code_realloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void code_free (void * ptr )
+{
+	free( (char *) ptr );	/* see code_realloc() for (char *) cast */
+}
+
+/* %if-tables-serialization definitions */
+/* %define-yytables   The name for this specific scanner's tables. */
+#define YYTABLES_NAME "yytables"
+/* %endif */
+
+/* %ok-for-header */
+
+#line 294 "scan-code.l"
+
+
+
+static inline bool
+is_dot_or_dash (char ch)
+{
+  return ch == '.' || ch == '-';
+}
+
+static inline bool
+contains_dot_or_dash (const char* p)
+{
+  for (; *p; ++p)
+    if (is_dot_or_dash (*p))
+      return true;
+  return false;
+}
+
+/* Defines a variant of a symbolic name resolution. */
+typedef struct
+{
+  /* Index in symbol list. */
+  unsigned symbol_index;
+
+  /* Matched symbol id and loc. */
+  uniqstr id;
+  location loc;
+
+  /* Hiding named reference. */
+  named_ref* hidden_by;
+
+  /* Error flags. May contain zero (no errors) or
+     a combination of VARIANT_* values. */
+  unsigned err;
+} variant;
+
+/* Set when the variant refers to a symbol hidden
+   by an explicit symbol reference. */
+#define VARIANT_HIDDEN (1 << 0)
+
+/* Set when the variant refers to a symbol containing
+   dots or dashes. Will require explicit bracketing. */
+#define VARIANT_BAD_BRACKETING (1 << 1)
+
+/* Set when the variant refers to a symbol which is
+   not visible from current midrule. */
+#define VARIANT_NOT_VISIBLE_FROM_MIDRULE (1 << 2)
+
+static variant *variant_table = NULL;
+static unsigned variant_table_size = 0;
+static unsigned variant_count = 0;
+
+static variant *
+variant_table_grow (void)
+{
+  ++variant_count;
+  if (variant_count > variant_table_size)
+    {
+      while (variant_count > variant_table_size)
+	variant_table_size = 2 * variant_table_size + 3;
+      variant_table = xnrealloc (variant_table, variant_table_size,
+				 sizeof *variant_table);
+    }
+  return &variant_table[variant_count - 1];
+}
+
+static void
+variant_table_free (void)
+{
+  free (variant_table);
+  variant_table = NULL;
+  variant_table_size = variant_count = 0;
+}
+
+static char *
+find_prefix_end (const char *prefix, char *begin, char *end)
+{
+  char *ptr = begin;
+
+  for (; *prefix && ptr != end; ++prefix, ++ptr)
+    if (*prefix != *ptr)
+      return 0;
+
+  if (*prefix)
+    return 0;
+
+  return ptr;
+}
+
+static variant *
+variant_add (uniqstr id, location id_loc, unsigned symbol_index,
+	     char *cp, char *cp_end, bool explicit_bracketing)
+{
+  char *prefix_end;
+
+  prefix_end = find_prefix_end (id, cp, cp_end);
+  if (prefix_end &&
+      (prefix_end == cp_end ||
+       (!explicit_bracketing && is_dot_or_dash (*prefix_end))))
+    {
+      variant *r = variant_table_grow ();
+      r->symbol_index = symbol_index;
+      r->id = id;
+      r->loc = id_loc;
+      r->hidden_by = NULL;
+      r->err = 0;
+      return r;
+    }
+  else
+    return NULL;
+}
+
+static const char *
+get_at_spec (unsigned symbol_index)
+{
+  static char at_buf[20];
+  if (symbol_index == 0)
+    strcpy (at_buf, "$$");
+  else
+    snprintf (at_buf, sizeof at_buf, "$%u", symbol_index);
+  return at_buf;
+}
+
+static void
+show_sub_messages (const char* cp, bool explicit_bracketing,
+                   int midrule_rhs_index, char dollar_or_at,
+                   bool is_warning, unsigned indent)
+{
+  unsigned i;
+
+  for (i = 0; i < variant_count; ++i)
+    {
+      const variant *var = &variant_table[i];
+      const char *at_spec = get_at_spec (var->symbol_index);
+
+      if (var->err == 0)
+        {
+          if (is_warning)
+            warn_at_indent (var->loc, &indent, _("refers to: %c%s at %s"),
+                            dollar_or_at, var->id, at_spec);
+          else
+            complain_at_indent (var->loc, &indent, _("refers to: %c%s at %s"),
+                                dollar_or_at, var->id, at_spec);
+        }
+      else
+	{
+	  static struct obstack msg_buf;
+	  const char *tail = explicit_bracketing ? "" :
+	    cp + strlen (var->id);
+	  const char *id = var->hidden_by ? var->hidden_by->id :
+	    var->id;
+	  location id_loc = var->hidden_by ? var->hidden_by->loc :
+	    var->loc;
+
+	  /* Create the explanation message. */
+	  obstack_init (&msg_buf);
+
+	  obstack_printf (&msg_buf, _("possibly meant: %c"), dollar_or_at);
+	  if (contains_dot_or_dash (id))
+	    obstack_printf (&msg_buf, "[%s]", id);
+	  else
+	    obstack_sgrow (&msg_buf, id);
+	  obstack_sgrow (&msg_buf, tail);
+
+	  if (var->err & VARIANT_HIDDEN)
+	    {
+	      obstack_printf (&msg_buf, _(", hiding %c"), dollar_or_at);
+	      if (contains_dot_or_dash (var->id))
+		obstack_printf (&msg_buf, "[%s]", var->id);
+	      else
+		obstack_sgrow (&msg_buf, var->id);
+	      obstack_sgrow (&msg_buf, tail);
+	    }
+
+	  obstack_printf (&msg_buf, _(" at %s"), at_spec);
+
+	  if (var->err & VARIANT_NOT_VISIBLE_FROM_MIDRULE)
+            {
+              const char *format =
+                _(", cannot be accessed from mid-rule action at $%d");
+              obstack_printf (&msg_buf, format, midrule_rhs_index);
+            }
+
+	  obstack_1grow (&msg_buf, '\0');
+          if (is_warning)
+            warn_at_indent (id_loc, &indent, "%s",
+                            (char *) obstack_finish (&msg_buf));
+          else
+            complain_at_indent (id_loc, &indent, "%s",
+                                (char *) obstack_finish (&msg_buf));
+	  obstack_free (&msg_buf, 0);
+	}
+    }
+}
+
+/* Returned from "parse_ref" when the reference
+   is inappropriate. */
+#define INVALID_REF (INT_MIN)
+
+/* Returned from "parse_ref" when the reference
+   points to LHS ($$) of the current rule or midrule. */
+#define LHS_REF (INT_MIN + 1)
+
+/* Parse named or positional reference. In case of positional
+   references, can return negative values for $-n "deep" stack
+   accesses. */
+static long int
+parse_ref (char *cp, symbol_list *rule, int rule_length,
+	   int midrule_rhs_index, char *text, location text_loc,
+	   char dollar_or_at)
+{
+  symbol_list *l;
+  char *cp_end;
+  bool explicit_bracketing;
+  unsigned i;
+  unsigned valid_variants = 0;
+  unsigned valid_variant_index = 0;
+
+  if ('$' == *cp)
+    return LHS_REF;
+
+  if (c_isdigit (*cp) || (*cp == '-' && c_isdigit (* (cp + 1))))
+    {
+      long int num = strtol (cp, &cp, 10);
+      if (1 - INT_MAX + rule_length <= num && num <= rule_length)
+	return num;
+      else
+	{
+	  complain_at (text_loc, _("integer out of range: %s"),
+                       quote (text));
+	  return INVALID_REF;
+	}
+    }
+
+  if ('[' == *cp)
+    {
+      /* Ignore the brackets. */
+      char *p;
+      for (p = ++cp; *p != ']'; ++p)
+	continue;
+      cp_end = p;
+
+      explicit_bracketing = true;
+    }
+  else
+    {
+      /* Take all characters of the name. */
+      char* p;
+      for (p = cp; *p; ++p)
+	if (is_dot_or_dash (*p))
+	  {
+	    ref_tail_fields = p;
+	    break;
+	  }
+      for (p = cp; *p; ++p)
+	continue;
+      cp_end = p;
+
+      explicit_bracketing = false;
+    }
+
+  /* Add all relevant variants. */
+  {
+    unsigned symbol_index;
+    variant_count = 0;
+    for (symbol_index = 0, l = rule; !symbol_list_null (l);
+         ++symbol_index, l = l->next)
+      {
+	variant *var;
+	if (l->content_type != SYMLIST_SYMBOL)
+	  continue;
+
+	var = variant_add (l->content.sym->tag, l->sym_loc,
+                           symbol_index, cp, cp_end, explicit_bracketing);
+	if (var && l->named_ref)
+	  var->hidden_by = l->named_ref;
+
+	if (l->named_ref)
+	  variant_add (l->named_ref->id, l->named_ref->loc,
+                       symbol_index, cp, cp_end, explicit_bracketing);
+      }
+  }
+
+  /* Check errors. */
+  for (i = 0; i < variant_count; ++i)
+    {
+      variant *var = &variant_table[i];
+      unsigned symbol_index = var->symbol_index;
+
+      /* Check visibility from mid-rule actions. */
+      if (midrule_rhs_index != 0
+	  && (symbol_index == 0 || midrule_rhs_index < symbol_index))
+        var->err |= VARIANT_NOT_VISIBLE_FROM_MIDRULE;
+
+      /* Check correct bracketing. */
+      if (!explicit_bracketing && contains_dot_or_dash (var->id))
+        var->err |= VARIANT_BAD_BRACKETING;
+
+      /* Check using of hidden symbols. */
+      if (var->hidden_by)
+        var->err |= VARIANT_HIDDEN;
+
+      if (!var->err)
+        {
+          valid_variant_index = i;
+          ++valid_variants;
+        }
+    }
+
+  switch (valid_variants)
+    {
+    case 0:
+      {
+        unsigned len = (explicit_bracketing || !ref_tail_fields) ?
+          cp_end - cp : ref_tail_fields - cp;
+        unsigned indent = 0;
+
+        complain_at_indent (text_loc, &indent, _("invalid reference: %s"),
+                            quote (text));
+        indent += SUB_INDENT;
+        if (len == 0)
+          {
+            location sym_loc = text_loc;
+            sym_loc.start.column += 1;
+            sym_loc.end = sym_loc.start;
+            const char *format =
+              _("syntax error after '%c', expecting integer, letter,"
+                " '_', '[', or '$'");
+            complain_at_indent (sym_loc, &indent, format, dollar_or_at);
+          }
+        else if (midrule_rhs_index)
+          {
+            const char *format =
+              _("symbol not found in production before $%d: %.*s");
+            complain_at_indent (rule->location, &indent, format,
+                                midrule_rhs_index, len, cp);
+          }
+        else
+          {
+            const char *format =
+              _("symbol not found in production: %.*s");
+            complain_at_indent (rule->location, &indent, format,
+                                len, cp);
+          }
+
+        if (variant_count > 0)
+          show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
+                             dollar_or_at, false, indent);
+        return INVALID_REF;
+      }
+    case 1:
+      {
+        unsigned indent = 0;
+        if (variant_count > 1)
+          {
+            warn_at_indent (text_loc, &indent, _("misleading reference: %s"),
+                            quote (text));
+            show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
+                               dollar_or_at, true, indent + SUB_INDENT);
+          }
+        {
+          unsigned symbol_index =
+            variant_table[valid_variant_index].symbol_index;
+          return (symbol_index == midrule_rhs_index) ? LHS_REF : symbol_index;
+        }
+      }
+    case 2:
+    default:
+      {
+        unsigned indent = 0;
+        complain_at_indent (text_loc, &indent, _("ambiguous reference: %s"),
+                            quote (text));
+        show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
+                           dollar_or_at, false, indent + SUB_INDENT);
+        return INVALID_REF;
+      }
+    }
+
+  /* Not reachable. */
+  return INVALID_REF;
+}
+
+/* Keeps track of the maximum number of semantic values to the left of
+   a handle (those referenced by $0, $-1, etc.) are required by the
+   semantic actions of this grammar. */
+int max_left_semantic_context = 0;
+
+
+/* If CP points to a typename (i.e., <.*?>), set TYPE_NAME to its
+   beginning (i.e., after the opening "<", and return the pointer
+   immediately after it.  */
+
+static
+char *
+fetch_type_name (char *cp, char const **type_name,
+                 location dollar_loc)
+{
+  if (*cp == '<')
+    {
+      *type_name = ++cp;
+      while (*cp != '>')
+	++cp;
+
+      /* The '>' symbol will be later replaced by '\0'. Original
+	 'text' is needed for error messages. */
+      ++cp;
+      if (untyped_var_seen)
+	complain_at (dollar_loc, _("explicit type given in untyped grammar"));
+      tag_seen = true;
+    }
+  return cp;
+}
+
+/*------------------------------------------------------------------.
+| TEXT is pointing to a wannabee semantic value (i.e., a '$').      |
+|                                                                   |
+| Possible inputs: $[<TYPENAME>]($|integer)                         |
+|                                                                   |
+| Output to OBSTACK_FOR_STRING a reference to this semantic value.  |
+`------------------------------------------------------------------*/
+
+static void
+handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
+{
+  char const *type_name = NULL;
+  char *cp = text + 1;
+  symbol_list *effective_rule;
+  int effective_rule_length;
+  int n;
+
+  if (rule->midrule_parent_rule)
+    {
+      effective_rule = rule->midrule_parent_rule;
+      effective_rule_length = rule->midrule_parent_rhs_index - 1;
+    }
+  else
+    {
+      effective_rule = rule;
+      effective_rule_length = symbol_list_length (rule->next);
+    }
+
+  /* Get the type name if explicit. */
+  cp = fetch_type_name (cp, &type_name, dollar_loc);
+
+  n = parse_ref (cp, effective_rule, effective_rule_length,
+		 rule->midrule_parent_rhs_index, text, dollar_loc, '$');
+
+  /* End type_name. */
+  if (type_name)
+    cp[-1] = '\0';
+
+  switch (n)
+    {
+    case INVALID_REF:
+      break;
+
+    case LHS_REF:
+      if (!type_name)
+	type_name = symbol_list_n_type_name_get (rule, dollar_loc, 0);
+
+      if (!type_name)
+        {
+          if (union_seen | tag_seen)
+            {
+              if (rule->midrule_parent_rule)
+                complain_at (dollar_loc,
+                             _("$$ for the midrule at $%d of %s"
+                               " has no declared type"),
+                             rule->midrule_parent_rhs_index,
+                             quote (effective_rule->content.sym->tag));
+              else
+                complain_at (dollar_loc, _("$$ of %s has no declared type"),
+                             quote (rule->content.sym->tag));
+            }
+          else
+            untyped_var_seen = true;
+        }
+
+      obstack_sgrow (&obstack_for_string, "]b4_lhs_value(");
+      obstack_quote (&obstack_for_string, type_name);
+      obstack_sgrow (&obstack_for_string, ")[");
+      rule->action_props.is_value_used = true;
+      break;
+
+    default:
+      if (max_left_semantic_context < 1 - n)
+	max_left_semantic_context = 1 - n;
+      if (!type_name && 0 < n)
+	type_name =
+	  symbol_list_n_type_name_get (effective_rule, dollar_loc, n);
+      if (!type_name)
+        {
+          if (union_seen | tag_seen)
+            complain_at (dollar_loc, _("$%s of %s has no declared type"),
+                         cp, quote (effective_rule->content.sym->tag));
+          else
+            untyped_var_seen = true;
+        }
+
+      obstack_printf (&obstack_for_string,
+		      "]b4_rhs_value(%d, %d, ", effective_rule_length, n);
+      obstack_quote (&obstack_for_string, type_name);
+      obstack_sgrow (&obstack_for_string, ")[");
+      if (n > 0)
+	symbol_list_n_get (effective_rule, n)->action_props.is_value_used =
+	  true;
+      break;
+    }
+}
+
+
+/*------------------------------------------------------.
+| TEXT is a location token (i.e., a '@...').  Output to |
+| OBSTACK_FOR_STRING a reference to this location.      |
+`------------------------------------------------------*/
+
+static void
+handle_action_at (symbol_list *rule, char *text, location at_loc)
+{
+  char *cp = text + 1;
+  symbol_list *effective_rule;
+  int effective_rule_length;
+  int n;
+
+  if (rule->midrule_parent_rule)
+    {
+      effective_rule = rule->midrule_parent_rule;
+      effective_rule_length = rule->midrule_parent_rhs_index - 1;
+    }
+  else
+    {
+      effective_rule = rule;
+      effective_rule_length = symbol_list_length (rule->next);
+    }
+
+  locations_flag = true;
+
+  n = parse_ref (cp, effective_rule, effective_rule_length,
+                 rule->midrule_parent_rhs_index, text, at_loc, '@');
+  switch (n)
+    {
+    case INVALID_REF:
+      break;
+
+    case LHS_REF:
+      obstack_sgrow (&obstack_for_string, "]b4_lhs_location[");
+      break;
+
+    default:
+      obstack_printf (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
+		      effective_rule_length, n);
+      break;
+    }
+}
+
+
+/*-------------------------.
+| Initialize the scanner.  |
+`-------------------------*/
+
+/* Translate the dollars and ats in \a self, in the context \a sc_context
+   (SC_RULE_ACTION, SC_SYMBOL_ACTION, INITIAL).  */
+
+static char const *
+translate_action (code_props *self, int sc_context)
+{
+  char *res;
+  static bool initialized = false;
+  if (!initialized)
+    {
+      obstack_init (&obstack_for_string);
+      code__flex_debug = 0;
+      initialized = true;
+    }
+
+  loc->start = loc->end = self->location.start;
+  code__switch_to_buffer (code__scan_string (self->code));
+  res = code_lex (self, sc_context);
+  code__delete_buffer (YY_CURRENT_BUFFER);
+
+  return res;
+}
+
+/*------------------------------------------------------------------------.
+| Implementation of the public interface as documented in "scan-code.h".  |
+`------------------------------------------------------------------------*/
+
+void
+code_props_none_init (code_props *self)
+{
+  *self = code_props_none;
+}
+
+code_props const code_props_none = CODE_PROPS_NONE_INIT;
+
+void
+code_props_plain_init (code_props *self, char const *code,
+		       location code_loc)
+{
+  self->kind = CODE_PROPS_PLAIN;
+  self->code = code;
+  self->location = code_loc;
+  self->is_value_used = false;
+  self->rule = NULL;
+  self->named_ref = NULL;
+}
+
+void
+code_props_symbol_action_init (code_props *self, char const *code,
+                               location code_loc)
+{
+  self->kind = CODE_PROPS_SYMBOL_ACTION;
+  self->code = code;
+  self->location = code_loc;
+  self->is_value_used = false;
+  self->rule = NULL;
+  self->named_ref = NULL;
+}
+
+void
+code_props_rule_action_init (code_props *self, char const *code,
+                             location code_loc, symbol_list *rule,
+			     named_ref *name)
+{
+  self->kind = CODE_PROPS_RULE_ACTION;
+  self->code = code;
+  self->location = code_loc;
+  self->is_value_used = false;
+  self->rule = rule;
+  self->named_ref = name;
+}
+
+void
+code_props_translate_code (code_props *self)
+{
+  switch (self->kind)
+    {
+      case CODE_PROPS_NONE:
+        break;
+      case CODE_PROPS_PLAIN:
+        self->code = translate_action (self, INITIAL);
+        break;
+      case CODE_PROPS_SYMBOL_ACTION:
+        self->code = translate_action (self, SC_SYMBOL_ACTION);
+        break;
+      case CODE_PROPS_RULE_ACTION:
+        self->code = translate_action (self, SC_RULE_ACTION);
+        break;
+    }
+}
+
+void
+code_scanner_last_string_free (void)
+{
+  STRING_FREE;
+}
+
+void
+code_scanner_free (void)
+{
+  obstack_free (&obstack_for_string, 0);
+  variant_table_free ();
+
+  /* Reclaim Flex's buffers.  */
+  code_lex_destroy ();
+}
+
diff --git a/src/scan-code.h b/src/scan-code.h
new file mode 100644
index 0000000..c8d554d
--- /dev/null
+++ b/src/scan-code.h
@@ -0,0 +1,176 @@
+/* Bison code properties structure and scanner.
+
+   Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef SCAN_CODE_H_
+# define SCAN_CODE_H_
+
+# include "location.h"
+# include "named-ref.h"
+
+struct symbol_list;
+
+/**
+ * Keeps track of the maximum number of semantic values to the left of a handle
+ * (those referenced by $0, $-1, etc.) that are required by the semantic
+ * actions of this grammar.
+ */
+extern int max_left_semantic_context;
+
+/**
+ * A code passage captured from the grammar file and possibly translated,
+ * and/or properties associated with such a code passage.  Don't break
+ * encapsulation by modifying the fields directly.  Use the provided interface
+ * functions.
+ */
+typedef struct code_props {
+  /** Set by the init functions.  */
+  enum {
+    CODE_PROPS_NONE, CODE_PROPS_PLAIN,
+    CODE_PROPS_SYMBOL_ACTION, CODE_PROPS_RULE_ACTION
+  } kind;
+
+  /**
+   * \c NULL iff \c code_props::kind is \c CODE_PROPS_NONE.
+   * Memory is allocated in an obstack freed elsewhere.
+   */
+  char const *code;
+  /** Undefined iff \c code_props::code is \c NULL.  */
+  location location;
+
+  /**
+   * \c false iff either:
+   *   - \c code_props_translate_code has never previously been invoked for
+   *     the \c code_props that would contain the code passage associated
+   *     with \c self.  (That \c code_props is not the same as this one if this
+   *     one is for a RHS \c symbol_list node.  Instead, it's the \c code_props
+   *     for the LHS symbol of the same rule.)
+   *   - \c code_props_translate_code has been invoked for that \c code_props,
+   *     but the symbol value associated with this \c code_props was not
+   *     referenced in the code passage.
+   */
+  bool is_value_used;
+
+  /** \c NULL iff \c code_props::kind is not \c CODE_PROPS_RULE_ACTION.  */
+  struct symbol_list *rule;
+
+  /* Named reference. */
+  named_ref *named_ref;
+} code_props;
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ * \post
+ *   - \c self has been overwritten to contain no code.
+ */
+void code_props_none_init (code_props *self);
+
+/** Equivalent to \c code_props_none_init.  */
+#define CODE_PROPS_NONE_INIT \
+  {CODE_PROPS_NONE, NULL, EMPTY_LOCATION_INIT, false, NULL, NULL}
+
+/** Initialized by \c CODE_PROPS_NONE_INIT with no further modification.  */
+extern code_props const code_props_none;
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - <tt>code != NULL</tt>.
+ *   - \c code is an untranslated code passage containing no Bison escapes.
+ *   - \c code was extracted from the grammar file at \c code_loc.
+ * \post
+ *   - \c self has been overwritten to represent the specified plain code
+ *     passage.
+ *   - \c self will become invalid if the caller frees \c code before invoking
+ *     \c code_props_translate_code on \c self.
+ */
+void code_props_plain_init (code_props *self, char const *code,
+                            location code_loc);
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - <tt>code != NULL</tt>.
+ *   - \c code is an untranslated code passage.  The only Bison escapes it
+ *     might contain are $$ and \@$, referring to a single symbol.
+ *   - \c code was extracted from the grammar file at \c code_loc.
+ * \post
+ *   - \c self has been overwritten to represent the specified symbol action.
+ *   - \c self will become invalid if the caller frees \c code before invoking
+ *     \c code_props_translate_code on \c self.
+ */
+void code_props_symbol_action_init (code_props *self, char const *code,
+                                    location code_loc);
+
+/**
+ * \pre
+ *   - <tt>self != NULL</tt>.
+ *   - <tt>code != NULL</tt>.
+ *   - <tt>rule != NULL</tt>.
+ *   - \c code is the untranslated action of the rule for which \c rule is the
+ *     LHS node.  Thus, \c code possibly contains Bison escapes such as $$, $1,
+ *     $2, etc referring to the values of the rule.
+ *   - \c code was extracted from the grammar file at \c code_loc.
+ * \post
+ *   - \c self has been overwritten to represent the specified rule action.
+ *   - \c self does not claim responsibility for the memory of \c rule.
+ *   - \c self will become invalid if:
+ *     - The caller frees \c code before invoking \c code_props_translate_code
+ *       on \c self.
+ *     - The caller frees \c rule.
+ */
+void code_props_rule_action_init (code_props *self, char const *code,
+                                  location code_loc, struct symbol_list *rule,
+                                  named_ref *name);
+
+/**
+ * \pre
+ *   - If there's a code passage contained in \c self and it contains Bison
+ *     escapes, all grammar declarations have already been parsed as they may
+ *     affect warnings and complaints issued here.
+ * \post
+ *   - All M4-special symbols and Bison escapes have been translated in
+ *     \c self->code.
+ *   - <tt>self->code != self->code\@pre</tt> unless
+ *     <tt>self->code\@pre = NULL</tt>.
+ */
+void code_props_translate_code (code_props *self);
+
+/**
+ * \pre
+ *   - None.
+ * \post
+ *   - The dynamic memory allocated by the previous invocation of
+ *     \c code_props_translate_code (if any) was freed.  The \c code_props
+ *     instance for which \c code_props_translate_code was invoked is now
+ *     invalid.
+ */
+void code_scanner_last_string_free (void);
+
+/**
+ * \pre
+ *   - None.
+ * \post
+ *   - All dynamic memory allocated during invocations of
+ *     \c code_props_translate_code (if any) has been freed.  All \c code_props
+ *     instances may now be invalid.
+ */
+void code_scanner_free (void);
+
+#endif /* !SCAN_CODE_H_ */
diff --git a/src/scan-code.l b/src/scan-code.l
new file mode 100644
index 0000000..560d343
--- /dev/null
+++ b/src/scan-code.l
@@ -0,0 +1,958 @@
+/* Bison Action Scanner                             -*- C -*-
+
+   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+%option debug nodefault noinput nounput noyywrap never-interactive
+%option prefix="code_" outfile="lex.yy.c"
+
+%{
+/* Work around a bug in flex 2.5.31.  See Debian bug 333231
+   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
+#undef code_wrap
+#define code_wrap() 1
+
+#define FLEX_PREFIX(Id) code_ ## Id
+#include "flex-scanner.h"
+
+#include "complain.h"
+#include "reader.h"
+#include "getargs.h"
+#include "scan-code.h"
+#include "symlist.h"
+
+#include <c-ctype.h>
+#include <get-errno.h>
+#include <quote.h>
+
+/* The current calling start condition: SC_RULE_ACTION or
+   SC_SYMBOL_ACTION. */
+# define YY_DECL static char *code_lex (code_props *self, int sc_context)
+YY_DECL;
+
+#define YY_USER_ACTION  location_compute (loc, &loc->end, yytext, yyleng);
+
+static char *fetch_type_name (char *cp, char const **type_name,
+                              location dollar_loc);
+
+static void handle_action_dollar (symbol_list *rule, char *cp,
+				  location dollar_loc);
+static void handle_action_at (symbol_list *rule, char *cp, location at_loc);
+
+/* A string to be pushed to obstack after dollar/at has been handled. */
+static char *ref_tail_fields;
+
+static location the_location;
+static location *loc = &the_location;
+
+/* A string representing the most recent translation.  */
+static char *last_string;
+
+/* True if an untyped $$ or $n was seen.  */
+static bool untyped_var_seen;
+
+%}
+ /* C and C++ comments in code. */
+%x SC_COMMENT SC_LINE_COMMENT
+ /* Strings and characters in code. */
+%x SC_STRING SC_CHARACTER
+ /* Whether in a rule or symbol action.  Specifies the translation
+    of $ and @.  */
+%x SC_RULE_ACTION SC_SYMBOL_ACTION
+
+
+/* POSIX says that a tag must be both an id and a C union member, but
+   historically almost any character is allowed in a tag.  We disallow
+   NUL and newline, as this simplifies our implementation.  */
+tag	 [^\0\n>]+
+
+/* Zero or more instances of backslash-newline.  Following GCC, allow
+   white space between the backslash and the newline.  */
+splice	 (\\[ \f\t\v]*\n)*
+
+/* C style identifier. Must start with letter. Will be used for
+   named symbol references. Shall be kept synchronized with
+   scan-gram.l "letter" and "id". */
+letter	  [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
+id	  {letter}({letter}|[-0-9])*
+ref      -?[0-9]+|{id}|"["{id}"]"|"$"
+
+%%
+
+%{
+  /* Nesting level of the current code in braces.  */
+  int braces_level = 0;
+
+  /* Whether a semicolon is probably needed.
+
+     The heuristic is that a semicolon is not needed after '{', '}',
+     ';', or a C preprocessor directive, and that whitespaces and
+     comments do not affect this flag.  Note that '{' does not need a
+     semicolon because of '{}'.  A semicolon may be needed before a
+     cpp directive, but don't bother.
+
+     While it is maintained in several start-conditions (factoring
+     opportunities), it is meaningful only for SC_RULE_ACTION. */
+  bool need_semicolon = false;
+
+  /* Whether in a C preprocessor directive.  Don't use a start condition
+     for this because, at the end of strings and comments, we still need
+     to know whether we're in a directive.  */
+  bool in_cpp = false;
+
+  /* This scanner is special: it is invoked only once, henceforth
+     is expected to return only once.  This initialization is
+     therefore done once per action to translate. */
+  aver (sc_context == SC_SYMBOL_ACTION
+	|| sc_context == SC_RULE_ACTION
+	|| sc_context == INITIAL);
+  BEGIN sc_context;
+%}
+
+  /*------------------------------------------------------------.
+  | Scanning a C comment.  The initial '/ *' is already eaten.  |
+  `------------------------------------------------------------*/
+
+<SC_COMMENT>
+{
+  "*"{splice}"/"  STRING_GROW; BEGIN sc_context;
+}
+
+
+  /*--------------------------------------------------------------.
+  | Scanning a line comment.  The initial '//' is already eaten.  |
+  `--------------------------------------------------------------*/
+
+<SC_LINE_COMMENT>
+{
+  "\n"		 STRING_GROW; BEGIN sc_context;
+  {splice}	 STRING_GROW;
+}
+
+
+  /*--------------------------------------------.
+  | Scanning user-code characters and strings.  |
+  `--------------------------------------------*/
+
+<SC_CHARACTER,SC_STRING>
+{
+  {splice}|\\{splice}.	STRING_GROW;
+}
+
+<SC_CHARACTER>
+{
+  "'"		STRING_GROW; BEGIN sc_context;
+}
+
+<SC_STRING>
+{
+  "\""		STRING_GROW; BEGIN sc_context;
+}
+
+
+<SC_RULE_ACTION,SC_SYMBOL_ACTION>
+{
+  "'" {
+    STRING_GROW;
+    BEGIN SC_CHARACTER;
+    need_semicolon = true;
+  }
+  "\"" {
+    STRING_GROW;
+    BEGIN SC_STRING;
+    need_semicolon = true;
+  }
+  "/"{splice}"*" {
+    STRING_GROW;
+    BEGIN SC_COMMENT;
+  }
+  "/"{splice}"/" {
+    STRING_GROW;
+    BEGIN SC_LINE_COMMENT;
+  }
+  [$@]  {
+    warn_at (*loc, _("stray '%s'"), yytext);
+    obstack_escape (&obstack_for_string, yytext);
+    need_semicolon = true;
+  }
+  [\[\]]  {
+    obstack_escape (&obstack_for_string, yytext);
+    need_semicolon = true;
+  }
+}
+
+<SC_RULE_ACTION>
+{
+  "$"("<"{tag}">")?{ref}  {
+    ref_tail_fields = NULL;
+    handle_action_dollar (self->rule, yytext, *loc);
+    if (ref_tail_fields)
+      obstack_sgrow (&obstack_for_string, ref_tail_fields);
+    need_semicolon = true;
+  }
+  "@"{ref} {
+    ref_tail_fields = NULL;
+    handle_action_at (self->rule, yytext, *loc);
+    if (ref_tail_fields)
+      obstack_sgrow (&obstack_for_string, ref_tail_fields);
+    need_semicolon = true;
+  }
+
+  ";"  STRING_GROW;                 need_semicolon = false;
+  "{"  STRING_GROW; ++braces_level; need_semicolon = false;
+  "}"  {
+    bool outer_brace = --braces_level == 0;
+
+    /* As an undocumented Bison extension, append ';' before the last
+       brace in braced code, so that the user code can omit trailing
+       ';'.  But do not append ';' if emulating Yacc, since Yacc does
+       not append one.  This is deprecated since release 2.4.1.  */
+    if (outer_brace && !yacc_flag && language_prio == default_prio
+        && skeleton_prio == default_prio && need_semicolon && ! in_cpp)
+      {
+        unsigned int indent = 0;
+        warn_at_indent (*loc, &indent,
+                       _("a ';' might be needed at the end of action code"));
+        indent += SUB_INDENT;
+        warn_at_indent (*loc, &indent,
+                       _("future versions of Bison will not add the ';'"));
+        obstack_1grow (&obstack_for_string, ';');
+      }
+
+    STRING_GROW;
+    need_semicolon = false;
+  }
+
+  /* Preprocessing directives should only be recognized at the beginning
+     of lines, allowing whitespace including comments, but in C/C++,
+     '#' can only be the start of preprocessor directives or within
+     '#define' directives anyway, so don't bother with begin of line.  */
+  "#"       STRING_GROW; in_cpp = true;
+
+  {splice}  STRING_GROW;
+  [\n\r]    STRING_GROW; if (in_cpp) in_cpp = need_semicolon = false;
+  [ \t\f]   STRING_GROW;
+
+  /* YYFAIL is undocumented and was formally deprecated in Bison
+     2.4.2.  */
+  YYFAIL {
+    STRING_GROW; need_semicolon = true;
+    warn_at (*loc, _("use of YYFAIL, which is deprecated and will be"
+                     " removed"));
+  }
+
+  /* The sole purpose of this is to make sure identifiers that merely
+     contain YYFAIL don't produce the above warning.  */
+  [A-Za-z_][0-9A-Za-z_]* STRING_GROW; need_semicolon = true;
+
+  . STRING_GROW; need_semicolon = true;
+}
+
+<SC_SYMBOL_ACTION>
+{
+  "$"("<"{tag}">")?"$" {
+    const char *type_name = NULL;
+    fetch_type_name (yytext + 1, &type_name, *loc)[-1] = 0;
+    obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar(");
+    obstack_quote (&obstack_for_string, type_name);
+    obstack_sgrow (&obstack_for_string, ")[");
+    self->is_value_used = true;
+  }
+  "@$" {
+    obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
+    locations_flag = true;
+  }
+}
+
+
+<*>
+{
+  /* Escape M4 quoting characters in C code.  */
+  [$@\[\]]    obstack_escape (&obstack_for_string, yytext);
+
+  /* By default, grow the string obstack with the input.  */
+  .|\n        STRING_GROW;
+
+  /* End of processing. */
+  <<EOF>>     STRING_FINISH; return last_string;
+}
+
+%%
+
+static inline bool
+is_dot_or_dash (char ch)
+{
+  return ch == '.' || ch == '-';
+}
+
+static inline bool
+contains_dot_or_dash (const char* p)
+{
+  for (; *p; ++p)
+    if (is_dot_or_dash (*p))
+      return true;
+  return false;
+}
+
+/* Defines a variant of a symbolic name resolution. */
+typedef struct
+{
+  /* Index in symbol list. */
+  unsigned symbol_index;
+
+  /* Matched symbol id and loc. */
+  uniqstr id;
+  location loc;
+
+  /* Hiding named reference. */
+  named_ref* hidden_by;
+
+  /* Error flags. May contain zero (no errors) or
+     a combination of VARIANT_* values. */
+  unsigned err;
+} variant;
+
+/* Set when the variant refers to a symbol hidden
+   by an explicit symbol reference. */
+#define VARIANT_HIDDEN (1 << 0)
+
+/* Set when the variant refers to a symbol containing
+   dots or dashes. Will require explicit bracketing. */
+#define VARIANT_BAD_BRACKETING (1 << 1)
+
+/* Set when the variant refers to a symbol which is
+   not visible from current midrule. */
+#define VARIANT_NOT_VISIBLE_FROM_MIDRULE (1 << 2)
+
+static variant *variant_table = NULL;
+static unsigned variant_table_size = 0;
+static unsigned variant_count = 0;
+
+static variant *
+variant_table_grow (void)
+{
+  ++variant_count;
+  if (variant_count > variant_table_size)
+    {
+      while (variant_count > variant_table_size)
+	variant_table_size = 2 * variant_table_size + 3;
+      variant_table = xnrealloc (variant_table, variant_table_size,
+				 sizeof *variant_table);
+    }
+  return &variant_table[variant_count - 1];
+}
+
+static void
+variant_table_free (void)
+{
+  free (variant_table);
+  variant_table = NULL;
+  variant_table_size = variant_count = 0;
+}
+
+static char *
+find_prefix_end (const char *prefix, char *begin, char *end)
+{
+  char *ptr = begin;
+
+  for (; *prefix && ptr != end; ++prefix, ++ptr)
+    if (*prefix != *ptr)
+      return 0;
+
+  if (*prefix)
+    return 0;
+
+  return ptr;
+}
+
+static variant *
+variant_add (uniqstr id, location id_loc, unsigned symbol_index,
+	     char *cp, char *cp_end, bool explicit_bracketing)
+{
+  char *prefix_end;
+
+  prefix_end = find_prefix_end (id, cp, cp_end);
+  if (prefix_end &&
+      (prefix_end == cp_end ||
+       (!explicit_bracketing && is_dot_or_dash (*prefix_end))))
+    {
+      variant *r = variant_table_grow ();
+      r->symbol_index = symbol_index;
+      r->id = id;
+      r->loc = id_loc;
+      r->hidden_by = NULL;
+      r->err = 0;
+      return r;
+    }
+  else
+    return NULL;
+}
+
+static const char *
+get_at_spec (unsigned symbol_index)
+{
+  static char at_buf[20];
+  if (symbol_index == 0)
+    strcpy (at_buf, "$$");
+  else
+    snprintf (at_buf, sizeof at_buf, "$%u", symbol_index);
+  return at_buf;
+}
+
+static void
+show_sub_messages (const char* cp, bool explicit_bracketing,
+                   int midrule_rhs_index, char dollar_or_at,
+                   bool is_warning, unsigned indent)
+{
+  unsigned i;
+
+  for (i = 0; i < variant_count; ++i)
+    {
+      const variant *var = &variant_table[i];
+      const char *at_spec = get_at_spec (var->symbol_index);
+
+      if (var->err == 0)
+        {
+          if (is_warning)
+            warn_at_indent (var->loc, &indent, _("refers to: %c%s at %s"),
+                            dollar_or_at, var->id, at_spec);
+          else
+            complain_at_indent (var->loc, &indent, _("refers to: %c%s at %s"),
+                                dollar_or_at, var->id, at_spec);
+        }
+      else
+	{
+	  static struct obstack msg_buf;
+	  const char *tail = explicit_bracketing ? "" :
+	    cp + strlen (var->id);
+	  const char *id = var->hidden_by ? var->hidden_by->id :
+	    var->id;
+	  location id_loc = var->hidden_by ? var->hidden_by->loc :
+	    var->loc;
+
+	  /* Create the explanation message. */
+	  obstack_init (&msg_buf);
+
+	  obstack_printf (&msg_buf, _("possibly meant: %c"), dollar_or_at);
+	  if (contains_dot_or_dash (id))
+	    obstack_printf (&msg_buf, "[%s]", id);
+	  else
+	    obstack_sgrow (&msg_buf, id);
+	  obstack_sgrow (&msg_buf, tail);
+
+	  if (var->err & VARIANT_HIDDEN)
+	    {
+	      obstack_printf (&msg_buf, _(", hiding %c"), dollar_or_at);
+	      if (contains_dot_or_dash (var->id))
+		obstack_printf (&msg_buf, "[%s]", var->id);
+	      else
+		obstack_sgrow (&msg_buf, var->id);
+	      obstack_sgrow (&msg_buf, tail);
+	    }
+
+	  obstack_printf (&msg_buf, _(" at %s"), at_spec);
+
+	  if (var->err & VARIANT_NOT_VISIBLE_FROM_MIDRULE)
+            {
+              const char *format =
+                _(", cannot be accessed from mid-rule action at $%d");
+              obstack_printf (&msg_buf, format, midrule_rhs_index);
+            }
+
+	  obstack_1grow (&msg_buf, '\0');
+          if (is_warning)
+            warn_at_indent (id_loc, &indent, "%s",
+                            (char *) obstack_finish (&msg_buf));
+          else
+            complain_at_indent (id_loc, &indent, "%s",
+                                (char *) obstack_finish (&msg_buf));
+	  obstack_free (&msg_buf, 0);
+	}
+    }
+}
+
+/* Returned from "parse_ref" when the reference
+   is inappropriate. */
+#define INVALID_REF (INT_MIN)
+
+/* Returned from "parse_ref" when the reference
+   points to LHS ($$) of the current rule or midrule. */
+#define LHS_REF (INT_MIN + 1)
+
+/* Parse named or positional reference. In case of positional
+   references, can return negative values for $-n "deep" stack
+   accesses. */
+static long int
+parse_ref (char *cp, symbol_list *rule, int rule_length,
+	   int midrule_rhs_index, char *text, location text_loc,
+	   char dollar_or_at)
+{
+  symbol_list *l;
+  char *cp_end;
+  bool explicit_bracketing;
+  unsigned i;
+  unsigned valid_variants = 0;
+  unsigned valid_variant_index = 0;
+
+  if ('$' == *cp)
+    return LHS_REF;
+
+  if (c_isdigit (*cp) || (*cp == '-' && c_isdigit (* (cp + 1))))
+    {
+      long int num = strtol (cp, &cp, 10);
+      if (1 - INT_MAX + rule_length <= num && num <= rule_length)
+	return num;
+      else
+	{
+	  complain_at (text_loc, _("integer out of range: %s"),
+                       quote (text));
+	  return INVALID_REF;
+	}
+    }
+
+  if ('[' == *cp)
+    {
+      /* Ignore the brackets. */
+      char *p;
+      for (p = ++cp; *p != ']'; ++p)
+	continue;
+      cp_end = p;
+
+      explicit_bracketing = true;
+    }
+  else
+    {
+      /* Take all characters of the name. */
+      char* p;
+      for (p = cp; *p; ++p)
+	if (is_dot_or_dash (*p))
+	  {
+	    ref_tail_fields = p;
+	    break;
+	  }
+      for (p = cp; *p; ++p)
+	continue;
+      cp_end = p;
+
+      explicit_bracketing = false;
+    }
+
+  /* Add all relevant variants. */
+  {
+    unsigned symbol_index;
+    variant_count = 0;
+    for (symbol_index = 0, l = rule; !symbol_list_null (l);
+         ++symbol_index, l = l->next)
+      {
+	variant *var;
+	if (l->content_type != SYMLIST_SYMBOL)
+	  continue;
+
+	var = variant_add (l->content.sym->tag, l->sym_loc,
+                           symbol_index, cp, cp_end, explicit_bracketing);
+	if (var && l->named_ref)
+	  var->hidden_by = l->named_ref;
+
+	if (l->named_ref)
+	  variant_add (l->named_ref->id, l->named_ref->loc,
+                       symbol_index, cp, cp_end, explicit_bracketing);
+      }
+  }
+
+  /* Check errors. */
+  for (i = 0; i < variant_count; ++i)
+    {
+      variant *var = &variant_table[i];
+      unsigned symbol_index = var->symbol_index;
+
+      /* Check visibility from mid-rule actions. */
+      if (midrule_rhs_index != 0
+	  && (symbol_index == 0 || midrule_rhs_index < symbol_index))
+        var->err |= VARIANT_NOT_VISIBLE_FROM_MIDRULE;
+
+      /* Check correct bracketing. */
+      if (!explicit_bracketing && contains_dot_or_dash (var->id))
+        var->err |= VARIANT_BAD_BRACKETING;
+
+      /* Check using of hidden symbols. */
+      if (var->hidden_by)
+        var->err |= VARIANT_HIDDEN;
+
+      if (!var->err)
+        {
+          valid_variant_index = i;
+          ++valid_variants;
+        }
+    }
+
+  switch (valid_variants)
+    {
+    case 0:
+      {
+        unsigned len = (explicit_bracketing || !ref_tail_fields) ?
+          cp_end - cp : ref_tail_fields - cp;
+        unsigned indent = 0;
+
+        complain_at_indent (text_loc, &indent, _("invalid reference: %s"),
+                            quote (text));
+        indent += SUB_INDENT;
+        if (len == 0)
+          {
+            location sym_loc = text_loc;
+            sym_loc.start.column += 1;
+            sym_loc.end = sym_loc.start;
+            const char *format =
+              _("syntax error after '%c', expecting integer, letter,"
+                " '_', '[', or '$'");
+            complain_at_indent (sym_loc, &indent, format, dollar_or_at);
+          }
+        else if (midrule_rhs_index)
+          {
+            const char *format =
+              _("symbol not found in production before $%d: %.*s");
+            complain_at_indent (rule->location, &indent, format,
+                                midrule_rhs_index, len, cp);
+          }
+        else
+          {
+            const char *format =
+              _("symbol not found in production: %.*s");
+            complain_at_indent (rule->location, &indent, format,
+                                len, cp);
+          }
+
+        if (variant_count > 0)
+          show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
+                             dollar_or_at, false, indent);
+        return INVALID_REF;
+      }
+    case 1:
+      {
+        unsigned indent = 0;
+        if (variant_count > 1)
+          {
+            warn_at_indent (text_loc, &indent, _("misleading reference: %s"),
+                            quote (text));
+            show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
+                               dollar_or_at, true, indent + SUB_INDENT);
+          }
+        {
+          unsigned symbol_index =
+            variant_table[valid_variant_index].symbol_index;
+          return (symbol_index == midrule_rhs_index) ? LHS_REF : symbol_index;
+        }
+      }
+    case 2:
+    default:
+      {
+        unsigned indent = 0;
+        complain_at_indent (text_loc, &indent, _("ambiguous reference: %s"),
+                            quote (text));
+        show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
+                           dollar_or_at, false, indent + SUB_INDENT);
+        return INVALID_REF;
+      }
+    }
+
+  /* Not reachable. */
+  return INVALID_REF;
+}
+
+/* Keeps track of the maximum number of semantic values to the left of
+   a handle (those referenced by $0, $-1, etc.) are required by the
+   semantic actions of this grammar. */
+int max_left_semantic_context = 0;
+
+
+/* If CP points to a typename (i.e., <.*?>), set TYPE_NAME to its
+   beginning (i.e., after the opening "<", and return the pointer
+   immediately after it.  */
+
+static
+char *
+fetch_type_name (char *cp, char const **type_name,
+                 location dollar_loc)
+{
+  if (*cp == '<')
+    {
+      *type_name = ++cp;
+      while (*cp != '>')
+	++cp;
+
+      /* The '>' symbol will be later replaced by '\0'. Original
+	 'text' is needed for error messages. */
+      ++cp;
+      if (untyped_var_seen)
+	complain_at (dollar_loc, _("explicit type given in untyped grammar"));
+      tag_seen = true;
+    }
+  return cp;
+}
+
+/*------------------------------------------------------------------.
+| TEXT is pointing to a wannabee semantic value (i.e., a '$').      |
+|                                                                   |
+| Possible inputs: $[<TYPENAME>]($|integer)                         |
+|                                                                   |
+| Output to OBSTACK_FOR_STRING a reference to this semantic value.  |
+`------------------------------------------------------------------*/
+
+static void
+handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
+{
+  char const *type_name = NULL;
+  char *cp = text + 1;
+  symbol_list *effective_rule;
+  int effective_rule_length;
+  int n;
+
+  if (rule->midrule_parent_rule)
+    {
+      effective_rule = rule->midrule_parent_rule;
+      effective_rule_length = rule->midrule_parent_rhs_index - 1;
+    }
+  else
+    {
+      effective_rule = rule;
+      effective_rule_length = symbol_list_length (rule->next);
+    }
+
+  /* Get the type name if explicit. */
+  cp = fetch_type_name (cp, &type_name, dollar_loc);
+
+  n = parse_ref (cp, effective_rule, effective_rule_length,
+		 rule->midrule_parent_rhs_index, text, dollar_loc, '$');
+
+  /* End type_name. */
+  if (type_name)
+    cp[-1] = '\0';
+
+  switch (n)
+    {
+    case INVALID_REF:
+      break;
+
+    case LHS_REF:
+      if (!type_name)
+	type_name = symbol_list_n_type_name_get (rule, dollar_loc, 0);
+
+      if (!type_name)
+        {
+          if (union_seen | tag_seen)
+            {
+              if (rule->midrule_parent_rule)
+                complain_at (dollar_loc,
+                             _("$$ for the midrule at $%d of %s"
+                               " has no declared type"),
+                             rule->midrule_parent_rhs_index,
+                             quote (effective_rule->content.sym->tag));
+              else
+                complain_at (dollar_loc, _("$$ of %s has no declared type"),
+                             quote (rule->content.sym->tag));
+            }
+          else
+            untyped_var_seen = true;
+        }
+
+      obstack_sgrow (&obstack_for_string, "]b4_lhs_value(");
+      obstack_quote (&obstack_for_string, type_name);
+      obstack_sgrow (&obstack_for_string, ")[");
+      rule->action_props.is_value_used = true;
+      break;
+
+    default:
+      if (max_left_semantic_context < 1 - n)
+	max_left_semantic_context = 1 - n;
+      if (!type_name && 0 < n)
+	type_name =
+	  symbol_list_n_type_name_get (effective_rule, dollar_loc, n);
+      if (!type_name)
+        {
+          if (union_seen | tag_seen)
+            complain_at (dollar_loc, _("$%s of %s has no declared type"),
+                         cp, quote (effective_rule->content.sym->tag));
+          else
+            untyped_var_seen = true;
+        }
+
+      obstack_printf (&obstack_for_string,
+		      "]b4_rhs_value(%d, %d, ", effective_rule_length, n);
+      obstack_quote (&obstack_for_string, type_name);
+      obstack_sgrow (&obstack_for_string, ")[");
+      if (n > 0)
+	symbol_list_n_get (effective_rule, n)->action_props.is_value_used =
+	  true;
+      break;
+    }
+}
+
+
+/*------------------------------------------------------.
+| TEXT is a location token (i.e., a '@...').  Output to |
+| OBSTACK_FOR_STRING a reference to this location.      |
+`------------------------------------------------------*/
+
+static void
+handle_action_at (symbol_list *rule, char *text, location at_loc)
+{
+  char *cp = text + 1;
+  symbol_list *effective_rule;
+  int effective_rule_length;
+  int n;
+
+  if (rule->midrule_parent_rule)
+    {
+      effective_rule = rule->midrule_parent_rule;
+      effective_rule_length = rule->midrule_parent_rhs_index - 1;
+    }
+  else
+    {
+      effective_rule = rule;
+      effective_rule_length = symbol_list_length (rule->next);
+    }
+
+  locations_flag = true;
+
+  n = parse_ref (cp, effective_rule, effective_rule_length,
+                 rule->midrule_parent_rhs_index, text, at_loc, '@');
+  switch (n)
+    {
+    case INVALID_REF:
+      break;
+
+    case LHS_REF:
+      obstack_sgrow (&obstack_for_string, "]b4_lhs_location[");
+      break;
+
+    default:
+      obstack_printf (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
+		      effective_rule_length, n);
+      break;
+    }
+}
+
+
+/*-------------------------.
+| Initialize the scanner.  |
+`-------------------------*/
+
+/* Translate the dollars and ats in \a self, in the context \a sc_context
+   (SC_RULE_ACTION, SC_SYMBOL_ACTION, INITIAL).  */
+
+static char const *
+translate_action (code_props *self, int sc_context)
+{
+  char *res;
+  static bool initialized = false;
+  if (!initialized)
+    {
+      obstack_init (&obstack_for_string);
+      yy_flex_debug = 0;
+      initialized = true;
+    }
+
+  loc->start = loc->end = self->location.start;
+  yy_switch_to_buffer (yy_scan_string (self->code));
+  res = code_lex (self, sc_context);
+  yy_delete_buffer (YY_CURRENT_BUFFER);
+
+  return res;
+}
+
+/*------------------------------------------------------------------------.
+| Implementation of the public interface as documented in "scan-code.h".  |
+`------------------------------------------------------------------------*/
+
+void
+code_props_none_init (code_props *self)
+{
+  *self = code_props_none;
+}
+
+code_props const code_props_none = CODE_PROPS_NONE_INIT;
+
+void
+code_props_plain_init (code_props *self, char const *code,
+		       location code_loc)
+{
+  self->kind = CODE_PROPS_PLAIN;
+  self->code = code;
+  self->location = code_loc;
+  self->is_value_used = false;
+  self->rule = NULL;
+  self->named_ref = NULL;
+}
+
+void
+code_props_symbol_action_init (code_props *self, char const *code,
+                               location code_loc)
+{
+  self->kind = CODE_PROPS_SYMBOL_ACTION;
+  self->code = code;
+  self->location = code_loc;
+  self->is_value_used = false;
+  self->rule = NULL;
+  self->named_ref = NULL;
+}
+
+void
+code_props_rule_action_init (code_props *self, char const *code,
+                             location code_loc, symbol_list *rule,
+			     named_ref *name)
+{
+  self->kind = CODE_PROPS_RULE_ACTION;
+  self->code = code;
+  self->location = code_loc;
+  self->is_value_used = false;
+  self->rule = rule;
+  self->named_ref = name;
+}
+
+void
+code_props_translate_code (code_props *self)
+{
+  switch (self->kind)
+    {
+      case CODE_PROPS_NONE:
+        break;
+      case CODE_PROPS_PLAIN:
+        self->code = translate_action (self, INITIAL);
+        break;
+      case CODE_PROPS_SYMBOL_ACTION:
+        self->code = translate_action (self, SC_SYMBOL_ACTION);
+        break;
+      case CODE_PROPS_RULE_ACTION:
+        self->code = translate_action (self, SC_RULE_ACTION);
+        break;
+    }
+}
+
+void
+code_scanner_last_string_free (void)
+{
+  STRING_FREE;
+}
+
+void
+code_scanner_free (void)
+{
+  obstack_free (&obstack_for_string, 0);
+  variant_table_free ();
+
+  /* Reclaim Flex's buffers.  */
+  yylex_destroy ();
+}
diff --git a/src/scan-gram-c.c b/src/scan-gram-c.c
index 8f12e2c..6bacac6 100644
--- a/src/scan-gram-c.c
+++ b/src/scan-gram-c.c
@@ -1,2 +1,3 @@
 #include <config.h>
+#include "system.h"
 #include "scan-gram.c"
diff --git a/src/scan-gram.c b/src/scan-gram.c
index 04cf539..41d99a5 100644
--- a/src/scan-gram.c
+++ b/src/scan-gram.c
@@ -6,10 +6,37 @@
 
 /* A lexical scanner generated by flex */
 
+/* %not-for-header */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+#define yy_create_buffer gram__create_buffer
+#define yy_delete_buffer gram__delete_buffer
+#define yy_flex_debug gram__flex_debug
+#define yy_init_buffer gram__init_buffer
+#define yy_flush_buffer gram__flush_buffer
+#define yy_load_buffer_state gram__load_buffer_state
+#define yy_switch_to_buffer gram__switch_to_buffer
+#define yyin gram_in
+#define yyleng gram_leng
+#define yylex gram_lex
+#define yylineno gram_lineno
+#define yyout gram_out
+#define yyrestart gram_restart
+#define yytext gram_text
+#define yywrap gram_wrap
+#define yyalloc gram_alloc
+#define yyrealloc gram_realloc
+#define yyfree gram_free
+
+/* %endif */
+/* %endif */
+/* %ok-for-header */
+
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 31
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -47,7 +74,15 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
 #include <inttypes.h>
 typedef int8_t flex_int8_t;
 typedef uint8_t flex_uint8_t;
@@ -62,7 +97,6 @@
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -93,6 +127,8 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 /* %endif */
@@ -107,11 +143,12 @@
 
 #else	/* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif	/* __STDC__ */
+#endif	/* defined (__STDC__) */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -169,13 +206,22 @@
 #define YY_BUF_SIZE 16384
 #endif
 
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
 #define YY_TYPEDEF_YY_BUFFER_STATE
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
 /* %if-not-reentrant */
-extern int gram_leng;
+extern yy_size_t gram_leng;
 /* %endif */
 
 /* %if-c-only */
@@ -206,16 +252,6 @@
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
-#endif
-
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -238,7 +274,7 @@
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	int yy_n_chars;
+	yy_size_t yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -322,12 +358,12 @@
 
 /* yy_hold_char holds the character lost when gram_text is formed. */
 static char yy_hold_char;
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int gram_leng;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t gram_leng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1;		/* whether we need to initialize */
+static int yy_init = 0;		/* whether we need to initialize */
 static int yy_start = 0;	/* start state number */
 
 /* Flag which is used to allow gram_wrap()'s to do buffer switches
@@ -354,7 +390,7 @@
 
 YY_BUFFER_STATE gram__scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE gram__scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE gram__scan_bytes (yyconst char *bytes,int len  );
+YY_BUFFER_STATE gram__scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 /* %endif */
 
@@ -389,7 +425,7 @@
 /* %% [1.0] gram_text/gram_in/gram_out/yy_state_type/gram_lineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define gram_wrap(n) 1
+#define gram_wrap() 1
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
@@ -438,58 +474,61 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[461] =
+static yyconst flex_int16_t yy_accept[482] =
     {   0,
-        0,    0,    0,    0,   66,   66,    0,    0,   84,   84,
-       84,   84,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  110,   59,    2,    2,
-       54,   59,   53,    1,   50,   59,   51,   51,   49,   59,
-       47,   56,   48,   59,  107,  108,  103,  107,  104,  105,
-      106,   65,  107,   63,   63,   88,   87,  107,   86,   85,
-       61,    2,    1,   61,   60,   61,   68,   67,  107,   71,
-       70,   69,   93,    2,    1,   93,   93,   90,  100,  107,
-       89,  107,  107,  101,   94,   96,  107,   58,   46,   46,
-       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   77,   77,
+       93,   93,   93,   93,    0,    0,    0,    0,  110,   65,
+        2,    2,   59,   65,   58,   65,    1,   54,   65,   55,
+       55,   51,   65,   49,   54,   64,   61,   50,   65,   74,
+       74,  107,   78,   78,  107,   80,   79,   79,   68,    2,
+        1,   68,   67,   66,   68,  108,   99,  107,   98,  107,
+      107,  107,  102,  104,  107,   76,  107,   97,   96,  107,
+       95,   94,   71,    2,    1,   69,   71,   71,   70,   71,
+       72,    2,    1,   72,   72,   65,    0,   63,   48,   48,
 
-       46,   46,   46,   46,   46,   46,   55,   50,    4,    3,
-       51,    0,    0,    0,   64,    0,    0,   66,   62,   84,
-       84,   84,   84,   83,   81,   72,   83,   74,   75,   76,
-       77,   78,   79,   83,   80,   83,   98,    0,   98,    0,
-       95,    0,   91,   92,    0,   94,   97,    0,   99,    0,
-       99,  102,   46,   46,   46,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
-       46,    3,   52,   57,    0,    0,    0,    0,    0,    0,
-        0,    0,   72,    0,    0,   73,    0,    0,    0,    0,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   60,   54,   54,
+        4,    3,   57,   55,   57,    0,    0,   53,    0,   73,
+       92,   90,   81,   92,   83,   84,   85,   86,   87,   88,
+       92,   89,   92,  106,  100,  101,    0,  103,    0,  102,
+      105,    0,   75,    0,    0,   77,   93,   93,   93,   93,
+       71,   69,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,    3,   57,   56,   62,   52,    0,
 
-        0,    0,    0,   46,   46,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   46,   46,   46,    0,   72,    0,
-        0,    0,   46,   46,   46,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   20,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   46,   46,   32,   46,   46,   46,
-       46,   46,   46,   39,   46,   42,   46,   46,   45,    0,
-        0,    0,   46,    7,   46,   46,   46,   12,   46,   46,
-       46,   46,   46,   46,   46,   46,   23,   46,   46,   46,
+       81,    0,    0,   82,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,    0,   81,    0,    0,   48,    7,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   22,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   34,   48,   48,   48,   48,   48,   48,
+       41,   48,   44,   48,   48,   47,    0,    0,    0,   48,
 
-       46,   46,   29,   46,   46,   46,   46,   46,   36,   46,
-       38,   40,   43,   46,    0,    0,   82,    6,   46,    9,
-       46,   46,   14,   46,   46,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   30,   46,   46,   46,   46,   46,
-       46,   46,    0,   46,   10,   46,   46,   46,   46,   46,
-       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
-       33,   46,   35,   46,   46,   44,    0,   46,   46,   46,
-       46,   46,   46,   46,   46,   46,   46,   46,   46,   26,
-       27,   46,   46,   46,   37,   46,    0,   46,   46,   46,
-       15,   46,   46,   46,   46,   21,   22,   46,   46,   46,
+        8,   48,   48,   48,   13,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   25,   48,   48,   48,   48,   48,
+       31,   48,   48,   48,   48,   48,   38,   48,   40,   42,
+       45,   48,    0,    0,   91,    6,   48,   10,   48,   48,
+       15,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   32,   48,   48,   48,   48,   48,   48,
+       48,    0,   48,   11,   48,   48,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+       35,   48,   37,   48,   48,   46,    5,    0,   48,   48,
+       48,   48,   48,   48,   48,   48,   21,   48,   48,   48,
 
-       46,   46,   46,    0,    0,   46,   11,   46,   46,   46,
-       19,   46,   46,   46,   46,   46,   46,   46,    5,   46,
-       46,   16,   46,   46,   24,   46,   46,   31,   34,   41,
-        8,   46,   46,   46,   46,   46,   13,   46,   46,   46,
-       46,   46,   18,   46,   46,   46,   25,   46,   46,   46,
-       46,   46,   17,   46,   46,   46,   46,   46,   28,    0
+       48,   28,   29,   48,   48,   48,   39,   48,    0,   48,
+       48,   48,   16,   48,   48,   48,   48,   23,   24,   48,
+       48,   48,   48,   48,   48,    0,    0,   48,   12,   48,
+       48,   48,   20,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   17,   48,   48,   26,   48,   48,   33,   36,
+       43,    9,   48,   48,   48,   48,   48,   14,   48,   48,
+       48,   48,   48,   19,   48,   48,   48,   27,   48,   48,
+       48,   48,   48,   18,   48,   48,   48,   48,   48,   30,
+        0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -497,17 +536,17 @@
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         2,    2,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    4,    1,    5,    6,    7,    8,    1,    9,    1,
-        1,   10,    1,   11,   12,   13,   14,   15,   16,   16,
+        1,    4,    5,    6,    7,    5,    8,    5,    9,    5,
+        5,   10,    5,   11,   12,   13,   14,   15,   16,   16,
        16,   16,   16,   16,   16,   17,   17,   18,   19,   20,
-       21,   22,   23,   24,   25,   25,   25,   25,   25,   25,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   26,   13,   13,   27,   13,   13,
-       28,   29,   30,    1,   31,    1,   32,   33,   34,   35,
+       21,   22,   23,    5,   24,   24,   24,   24,   24,   24,
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,   25,   25,   26,   25,   25,   27,   25,   25,
+       28,   29,   30,    5,   31,    5,   32,   33,   34,   35,
 
-       36,   37,   38,   39,   40,   13,   41,   42,   43,   44,
-       45,   46,   47,   48,   49,   50,   51,   52,   13,   53,
-       54,   13,   55,   56,   57,    1,    1,    1,    1,    1,
+       36,   37,   38,   39,   40,   25,   41,   42,   43,   44,
+       45,   46,   47,   48,   49,   50,   51,   52,   25,   53,
+       54,   25,   55,   56,   57,    5,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -526,310 +565,352 @@
 
 static yyconst flex_int32_t yy_meta[59] =
     {   0,
-        1,    1,    2,    1,    1,    1,    3,    1,    1,    1,
-        1,    4,    5,    1,    6,    6,    6,    1,    1,    1,
-        1,    7,    1,    3,    6,    5,    5,    3,    1,    3,
-        5,    6,    6,    6,    6,    6,    6,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    1,    1,    1,    7
+        1,    2,    3,    2,    4,    5,    4,    5,    5,    5,
+        5,    6,    7,    8,    9,    9,    9,    4,    5,    5,
+        5,    5,    4,    9,   10,   10,   10,   11,    4,   12,
+       10,    9,    9,    9,    9,    9,    9,   10,   10,   10,
+       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+       10,   10,   10,   10,    5,    5,    5,   13
     } ;
 
-static yyconst flex_int16_t yy_base[483] =
+static yyconst flex_int16_t yy_base[508] =
     {   0,
-        0,  733,   56,   57,   65,   68,  728,  727,   96,   99,
-      106,  109,  138,  144,   85,  102,  142,  150,  161,  174,
-      206,    0,  162,  182,  220,  225,  736,  740,  740,  740,
-      740,  275,  740,  740,    0,   51,  176,   61,  740,    0,
-      740,  740,  740,  693,  740,  740,  740,  103,  740,  740,
-      740,  740,  164,  740,  720,  740,  740,  192,  740,  740,
-      740,  740,  740,   59,  740,  691,  740,  740,  326,  740,
-      740,  740,  740,  740,  740,   60,  690,  740,  231,  132,
-      740,  187,   71,  243,  740,  740,  674,  740,    0,  690,
-       75,  151,  689,  686,  683,   74,  690,  173,  674,  220,
+        0,  899,  895,  894,   56,   57,   58,   61,   70,   89,
+       96,  115,  119,  128,   62,  129,   72,   91,   66,   77,
+      138,  143,   80,  142,  185,  896,  150,  155,  902,    0,
+      907,  907,  907,  243,  907,  907,  907,  301,   98,  288,
+       62,  907,  146,  907,  315,  907,  907,  907,  859,  907,
+      886,  907,  907,  907,  368,  907,  907,  907,  907,  907,
+      907,  116,  907,  907,  857,  907,  907,  841,  907,  297,
+       91,  155,  907,  907,  126,  907,  175,  907,  907,  325,
+      907,  907,    0,  907,    0,    0,  307,  907,  907,  855,
+      907,  907,  907,  322,  854,    0,    0,  907,    0,  855,
 
-      147,  157,  220,  680,  687,  690,  740,    0,  740,    0,
-      269,    0,  699,  680,  740,  287,  290,  690,  740,  740,
-      293,  689,  301,  740,  740,   67,    0,  740,  740,  740,
-      740,  740,  740,    0,  740,    0,  740,  317,  321,    0,
-      740,  341,  740,  740,  344,  740,  740,  358,  740,  349,
-      352,  740,    0,  673,  220,  668,  667,  668,  131,  665,
-      672,  188,  677,  662,  666,  223,  672,  657,  658,  226,
-      657,  657,  665,  666,  669,  652,  658,  652,  657,  648,
-      661,    0,    0,  740,  650,  369,  250,  378,  381,  384,
-      387,  269,  324,    0,    0,    0,  671,  390,  152,  393,
+      849,  114,  117,  853,  850,  847,  303,  854,  302,  838,
+      305,  306,  132,  304,  844,  851,  854,  907,  421,    0,
+      907,    0,    0,  345,  465,  863,  862,  907,  843,  907,
+      907,  907,  165,    0,  907,  907,  907,  907,  907,  907,
+        0,  907,    0,  907,  907,  907,  361,  907,  364,  907,
+      907,  367,  907,  376,  383,  853,  907,  386,  852,  400,
+        0,    0,    0,    0,  836,  844,  359,  830,  829,  830,
+      270,  827,  834,  829,  272,  838,  823,  827,  383,  833,
+      818,  819,  315,  818,  818,  826,  827,  830,  813,  819,
+      813,  818,  809,  822,    0,    0,    0,  907,  907,  811,
 
-      388,  397,  202,  660,  640,  238,  640,  653,  643,  651,
-      650,  649,  672,  633,  632,  669,  648,  641,  642,  315,
-      241,  629,  630,  626,  640,  629,  636,  620,  631,  627,
-      620,  624,  630,  629,  619,  630,  628,  625,  740,    0,
-        0,  396,  612,  621,  607,  613,  608,  621,  606,  619,
-      640,  616,  604,  609,    0,  602,  597,  610,  344,  609,
-      604,  594,  606,  598,  589,  603,    0,  588,  392,  597,
-      586,  599,  584,    0,  589,    0,  588,  586,    0,  626,
-        0,    0,  575,    0,  586,  591,  575,    0,  393,  575,
-      578,  394,  591,  590,  589,  580,    0,  573,  581,  573,
+      360,    0,    0,    0,  407,  403,  421,  321,  427,  427,
+      434,  343,  438,  450,  455,  458,  378,  822,  817,  801,
+      278,  801,  814,  804,  812,  811,  810,  833,  794,  805,
+      792,  829,  808,  801,  802,  364,  411,  789,  790,  786,
+      800,  789,  796,  780,  791,  787,  780,  784,  790,  789,
+      779,  790,  788,  785,  907,    0,    0,  772,    0,  781,
+      767,  773,  768,  781,  766,  779,  800,  776,  764,  769,
+      757,    0,  761,  756,  769,  433,  768,  763,  753,  765,
+      757,  748,  762,    0,  747,  436,  756,  745,  758,  743,
+        0,  748,    0,  747,  745,    0,  785,    0,    0,  734,
 
-      567,  565,    0,  564,  601,  576,  565,  562,    0,  559,
-        0,  395,    0,  559,  399,    0,  740,    0,  557,  557,
-      571,  552,  397,  555,  557,  553,  558,  551,  553,  549,
-      564,  559,  549,  557,    0,  546,  543,  558,  553,  543,
-      537,  550,  414,  407,    0,  535,  548,  535,  546,  530,
-      531,  567,  546,  533,  540,  524,  525,  539,  524,  539,
-        0,  522,    0,  525,  536,    0,  562,  520,  520,  516,
-      515,  525,  511,  524,  527,  515,  508,  519,  513,    0,
-        0,  511,  505,  503,    0,  518,  545,  501,  500,  514,
-        0,  506,  499,  496,  509,    0,    0,  502,  491,  500,
+        0,  745,  750,  734,    0,  437,  734,  737,  443,  750,
+      749,  748,  747,  738,    0,  731,  739,  731,  725,  723,
+        0,  722,  759,  734,  723,  720,    0,  717,    0,  453,
+        0,  717,  454,    0,  907,    0,  715,  715,  729,  710,
+      454,  713,  715,  711,  716,  719,  708,  710,  706,  721,
+      716,  706,  714,    0,  703,  700,  715,  710,  700,  694,
+      707,  488,  463,    0,  692,  705,  692,  703,  687,  688,
+      724,  699,  702,  689,  696,  680,  681,  695,  680,  695,
+        0,  678,    0,  681,  692,    0,  907,  717,  676,  676,
+      672,  671,  681,  667,  680,  683,    0,  671,  664,  675,
 
-      507,  502,  495,  531,  348,  499,    0,  489,  480,  481,
-        0,  481,  477,  408,  485,  485,  479,  490,  740,  491,
-      475,    0,  473,  482,    0,  475,  480,    0,    0,    0,
-        0,  483,  409,  473,  469,  467,    0,  478,  470,  472,
-      452,  455,    0,  445,  432,  395,    0,  402,  399,  422,
-      384,  386,    0,  395,  374,  361,  318,  251,    0,  740,
-      440,  447,  454,  461,  464,  470,  476,  483,  487,  493,
-      281,  275,  236,  218,  500,  206,  151,  138,  116,  102,
-       56,  506
+      669,    0,    0,  667,  661,  659,    0,  674,  700,  657,
+      656,  670,    0,  662,  655,  652,  665,    0,    0,  658,
+      647,  656,  663,  658,  651,  686,  470,  655,    0,  645,
+      626,  623,    0,  611,  603,  465,  598,  595,  588,  599,
+      600,  584,    0,  579,  588,    0,  579,  584,    0,    0,
+        0,    0,  555,  475,  541,  534,  530,    0,  539,  530,
+      537,  519,  528,    0,  533,  526,  521,    0,  527,  524,
+      483,  444,  444,    0,  456,  438,  434,  442,  424,    0,
+      907,  506,  519,  532,  545,  558,  571,  578,  588,  600,
+      613,  626,  634,  641,  648,  658,  666,  454,  406,  389,
+
+      384,  373,  138,  102,   88,   57,  676
     } ;
 
-static yyconst flex_int16_t yy_def[483] =
+static yyconst flex_int16_t yy_def[508] =
     {   0,
-      460,    1,  461,  461,  461,  461,  462,  462,  461,  461,
-      461,  461,  463,  463,  461,  461,  461,  461,  464,  464,
-      461,   21,   21,   21,   21,   21,  460,  460,  460,  460,
-      460,  460,  460,  460,  465,  460,  460,  460,  460,  466,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  467,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  468,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
+      481,    1,  482,  482,  483,  483,  483,  483,  484,  484,
+      483,  483,  483,  483,  483,  483,  483,  483,  483,  483,
+      483,  483,  483,  483,  481,   25,  485,  485,  481,  486,
+      481,  481,  481,  481,  481,  481,  481,  487,  481,  488,
+      488,  481,  489,  481,  487,  481,  481,  481,  486,  481,
+      481,  481,  481,  481,  490,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  491,
+      481,  481,  492,  481,  492,  493,  481,  481,  481,  492,
+      481,  481,  481,  481,  481,  486,  494,  481,  495,  495,
 
-      469,  469,  469,  469,  469,  469,  460,  465,  460,  470,
-      460,  471,  466,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  472,  460,  460,  460,
-      460,  460,  460,  473,  460,  474,  460,  460,  460,  475,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  470,  471,  460,  460,  460,  460,  460,  460,  460,
-      460,  467,  460,  476,  477,  474,  475,  460,  460,  460,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  481,  487,   45,
+      481,  496,  497,  488,  497,  489,  489,  481,  481,  481,
+      481,  481,  481,  498,  481,  481,  481,  481,  481,  481,
+      499,  481,  500,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      492,  493,  494,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  496,  497,  125,  481,  481,  481,
 
-      460,  460,  460,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  460,  460,  478,
-      479,  460,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  460,
-      480,  481,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
+      481,  501,  502,  500,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  491,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  481,  481,  503,  504,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  481,  505,  506,  495,
 
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  460,  473,  460,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  460,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  460,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  482,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  481,  499,  481,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  481,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  481,  481,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
 
-      469,  469,  469,  482,  482,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  460,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
-      469,  469,  469,  469,  469,  469,  469,  469,  469,    0,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460
+      495,  495,  495,  495,  495,  495,  495,  495,  507,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  507,  507,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
+        0,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+
+      481,  481,  481,  481,  481,  481,  481
     } ;
 
-static yyconst flex_int16_t yy_nxt[799] =
+static yyconst flex_int16_t yy_nxt[966] =
     {   0,
-       28,   29,   30,   29,   31,   28,   28,   32,   33,   28,
-       34,   28,   35,   36,   37,   38,   38,   28,   39,   40,
-       41,   28,   28,   28,   35,   35,   35,   28,   28,   28,
-       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
-       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
-       35,   35,   35,   35,   42,   43,   28,   28,   46,   46,
-      109,  317,   47,   47,  110,   48,   48,   52,  109,  109,
-       52,   47,  110,  110,   47,  111,  111,  111,  146,   49,
-       49,  193,  193,   50,   50,   51,   51,   67,   49,   68,
-      147,   49,   50,   53,   51,   50,   53,   51,   56,  148,
+       30,   31,   32,   31,   30,   33,   30,   34,   35,   36,
+       37,   30,   38,   39,   40,   41,   41,   30,   42,   43,
+       44,   36,   30,   45,   45,   45,   45,   46,   30,   30,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   47,   48,   36,   30,   53,   53,
+       57,   54,   54,   57,   66,  335,   58,   67,   76,   58,
+       69,   60,   32,   60,   66,   70,  124,  124,  124,   76,
+       61,   75,   81,   62,   55,   55,   55,   63,   82,   55,
+       60,   32,   60,   66,   77,   65,  334,   64,   66,   61,
 
-       57,   56,   47,   57,   67,   47,   68,  316,   59,  162,
-      155,   59,   47,   69,   60,   47,  115,   60,  163,   49,
-      156,  282,   49,   50,   58,   51,   50,   58,   51,   49,
-       69,  116,   49,   50,   58,   51,   50,   58,   51,   62,
-       30,   62,   70,  281,   71,   62,   30,   62,   63,   66,
-       72,   64,   71,  141,   63,   65,  241,   64,   72,   70,
-      142,   65,   74,   30,   74,  117,  118,  117,   47,   87,
-       69,   75,  211,  141,   76,   74,   30,   74,   69,   77,
-      142,   45,  172,  212,   75,   49,  173,   76,   47,   87,
-      111,  111,  111,  121,  122,  121,  143,  174,  157,   70,
+       75,   67,   62,   68,   69,   77,   63,  121,   80,   70,
+      299,  122,  148,   56,   56,   56,   64,   66,   56,  149,
+       67,   66,   68,   69,   67,  121,   71,   69,   70,  122,
+       66,   66,   70,   67,   67,   71,   69,   69,   72,  153,
+       78,   70,   70,   79,   81,   78,  298,   72,   79,  167,
+       82,   92,   32,   92,  154,  127,   92,   32,   92,  168,
+       93,   95,  150,   94,  169,   93,   80,  128,   94,  170,
+       80,   80,  187,   73,  151,   74,  155,  156,  155,  201,
+      201,  188,   73,  152,   74,   83,   84,   32,   84,   83,
+       83,   83,   83,   83,   83,   85,   83,   86,   87,   88,
 
-      144,   45,  112,  158,  165,   49,  175,   70,   46,  146,
-       78,  240,   79,   80,   81,  145,   45,  166,   45,   82,
-      123,  147,  167,  196,  215,   83,   47,   45,  112,   84,
-      148,   47,   45,   50,  220,   51,   45,  137,   45,   45,
-      216,  195,  138,   49,   45,  139,  139,  139,   49,  149,
-      140,  169,  205,  220,  150,  176,  206,  151,  151,  151,
-       85,  225,   86,  115,  177,  226,  221,  170,  207,  245,
-      171,  460,  262,  178,   45,  263,   45,  246,  116,   45,
-      194,   45,   88,  111,  111,  111,  183,   89,  186,  187,
-      186,  117,  118,  117,  189,  122,  189,  123,  459,   89,
+       88,   88,   83,   83,   83,   83,   83,   83,   86,   86,
+       86,   86,   83,   83,   89,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   83,
+       83,   83,   83,   97,   97,   97,   97,   97,   97,   97,
+       98,   97,   97,   97,   97,   99,   97,   97,   97,   97,
+       97,   97,   97,   97,   97,   97,   99,   99,   99,   99,
+       97,   97,   97,   99,   99,  100,  101,  102,  103,  104,
+      105,   99,  106,   99,  107,  108,  109,  110,  111,   99,
+      112,  113,  114,  115,  116,   99,  117,  118,   97,   97,
 
-       89,   89,  191,  192,  191,   89,   89,   90,   89,   91,
-       92,   93,   94,   89,   95,   89,   96,   97,   98,   99,
-      100,   89,  101,  102,  103,  104,  105,   89,  106,  107,
-      125,  139,  139,  139,  125,  139,  139,  139,  239,  239,
-      126,  126,  198,  199,  198,  200,  201,  200,  125,  260,
-      419,  127,  405,  458,  125,  298,  261,  128,  129,  202,
-      203,  202,  130,  151,  151,  151,  151,  151,  151,  131,
-      186,  187,  186,  132,  298,  133,  134,  135,  136,  117,
-      118,  117,  189,  122,  189,  189,  122,  189,  191,  192,
-      191,  198,  199,  198,  200,  201,  200,  143,  202,  203,
+       97,   96,  124,  124,  124,   96,  145,   96,  231,  261,
+      146,  226,  119,  119,  125,  481,  121,  262,   96,  481,
+      122,  481,  227,   96,  232,  147,  158,  159,  158,   96,
+       96,  121,  481,  178,  174,  122,  182,  481,  175,  189,
+      125,  185,  148,  481,  481,  186,  179,  176,  190,  149,
+      241,  180,  183,  160,  242,  184,  153,  191,   96,  124,
+      124,  124,  205,  206,  205,  207,  208,  207,  209,  210,
+      209,  154,  481,  132,  255,  255,  132,  211,  212,  211,
+      481,  257,  133,  133,  155,  156,  155,  214,  159,  214,
+      132,  220,  256,  134,  236,  221,  132,  204,  277,  135,
 
-      202,  144,  137,  307,  322,  325,  341,  138,  348,  457,
-      139,  139,  139,  343,  343,  343,  145,  367,  368,  426,
-      438,  456,  307,  322,  325,  341,  455,  348,  343,  343,
-      343,  454,  453,  452,  451,  450,  449,  368,  426,  438,
-       45,   45,   45,   45,   45,   45,   45,   54,   54,   54,
-       54,   54,   54,   54,   61,   61,   61,   61,   61,   61,
-       61,   73,   73,   73,   73,   73,   73,   73,  108,  108,
-      113,  448,  113,  113,  113,  113,  120,  120,  447,  120,
-      120,  120,  120,  124,  124,  124,  124,  124,  124,  124,
-      153,  153,  153,  182,  446,  182,  182,  182,  182,  182,
+      136,  216,  217,  216,  137,  278,  160,  222,  205,  206,
+      205,  138,  145,  236,  203,  139,  146,  140,  141,  142,
+      143,   96,  207,  208,  207,   96,  237,   96,  209,  210,
+      209,  147,  119,  119,  150,  211,  212,  211,   96,  155,
+      156,  155,  279,   96,  316,  280,  151,  325,  340,   96,
+       96,  214,  159,  214,  343,  152,  214,  159,  214,  216,
+      217,  216,  202,  316,  360,  367,  325,  340,  362,  362,
+      362,  480,  387,  343,  389,  427,  447,  479,   96,  197,
+      197,  197,  478,  360,  367,  477,  459,  476,  197,  475,
+      387,  388,  474,  389,  473,  447,  197,  197,  197,  197,
 
-      197,  445,  197,  197,  197,  197,  404,  444,  404,  404,
-      404,  404,  404,  443,  442,  441,  440,  439,  437,  436,
-      435,  434,  433,  432,  431,  430,  429,  428,  427,  425,
-      424,  423,  422,  421,  420,  405,  418,  417,  416,  415,
-      414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
-      403,  402,  401,  400,  399,  398,  397,  396,  395,  394,
-      393,  392,  391,  390,  389,  388,  387,  386,  385,  384,
-      383,  382,  381,  380,  379,  378,  377,  376,  375,  374,
-      373,  372,  371,  370,  369,  366,  365,  364,  363,  362,
-      361,  360,  359,  358,  357,  356,  355,  354,  353,  352,
+      197,  197,  362,  362,  362,  459,   50,   50,   50,   50,
+       50,   50,   50,   50,   50,   50,   50,   50,   50,   52,
+       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
+       52,   52,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   96,  472,
+      471,   96,  470,   96,   96,  469,  468,  467,  466,   96,
+       96,  120,  465,  464,  120,  463,  120,  120,  462,  120,
+      120,  461,  120,  120,  123,  460,  123,  123,  126,  126,
+      458,  126,  126,  126,  126,  126,  126,  126,  126,  126,
 
-      351,  350,  349,  347,  346,  345,  344,  342,  340,  339,
-      338,  337,  336,  335,  334,  333,  332,  331,  330,  329,
-      328,  327,  326,  324,  323,  321,  320,  319,  318,  315,
-      314,  313,  312,  311,  310,  309,  308,  306,  305,  304,
-      303,  302,  301,  300,  299,  297,  296,  295,  294,  293,
-      292,  291,  290,  289,  288,  287,  286,  285,  284,  283,
-      280,  279,  278,  277,  276,  275,  274,  273,  272,  271,
-      270,  269,  268,  267,  266,  265,  264,  259,  258,  257,
-      256,  255,  254,  253,  252,  251,  250,  249,  248,  247,
-      244,  243,  242,  238,  237,  236,  235,  234,  233,  232,
+      131,  131,  131,  131,  131,  131,  131,  131,  131,  131,
+      131,  131,  131,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  457,  456,  157,  161,  455,  454,  161,
+      161,  161,  453,  452,  451,  450,  161,  449,  161,  162,
+      162,  448,  162,  162,  163,  163,  163,  163,  163,  163,
+      163,  163,  163,  164,  164,  446,  164,  164,  195,  195,
+      445,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  196,  196,  444,  196,  196,  426,  426,  443,  426,
+      426,  426,  426,  426,  426,  426,  426,  426,  426,  442,
+      441,  427,  440,  439,  438,  437,  436,  435,  434,  433,
 
-      231,  230,  229,  228,  227,  224,  223,  222,  219,  218,
-      217,  214,  213,  210,  209,  208,  204,  190,  188,  185,
-      184,  181,  180,  179,  168,  164,  161,  160,  159,  154,
-      152,  114,  114,  119,  114,  460,   55,   55,   44,   27,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460
+      432,  431,  430,  429,  428,  427,  425,  424,  423,  422,
+      421,  420,  419,  418,  417,  416,  415,  414,  413,  412,
+      411,  410,  409,  408,  407,  406,  405,  404,  403,  402,
+      401,  400,  399,  398,  397,  396,  395,  394,  393,  392,
+      391,  390,  386,  385,  384,  383,  382,  381,  380,  379,
+      378,  377,  376,  375,  374,  373,  372,  371,  370,  369,
+      368,  366,  365,  364,  363,  361,  359,  358,  357,  356,
+      355,  354,  353,  352,  351,  350,  349,  348,  347,  346,
+      345,  344,  342,  341,  339,  338,  337,  336,  333,  332,
+      331,  330,  329,  328,  327,  326,  324,  323,  322,  321,
 
+      320,  319,  318,  317,  315,  314,  313,  312,  311,  310,
+      309,  308,  307,  306,  305,  304,  303,  302,  301,  300,
+      297,  296,  295,  294,  293,  292,  291,  290,  289,  288,
+      287,  286,  285,  284,  283,  282,  281,  276,  275,  274,
+      273,  272,  271,  270,  269,  268,  267,  266,  265,  264,
+      263,  260,  259,  258,  254,  253,  252,  251,  250,  249,
+      248,  247,  246,  245,  244,  243,  240,  239,  238,  235,
+      234,  233,  230,  229,  228,  225,  224,  223,  219,  218,
+      215,  213,  200,  199,  198,  194,  193,  192,  181,  177,
+      173,  172,  171,  166,  165,  129,  129,  144,  129,  130,
+
+      129,  481,   90,   51,   51,   49,   29,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481
     } ;
 
-static yyconst flex_int16_t yy_chk[799] =
+static yyconst flex_int16_t yy_chk[966] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    3,    4,
-       36,  481,    3,    4,   36,    3,    4,    5,   64,   76,
-        6,    5,   64,   76,    6,   38,   38,   38,   83,    3,
-        4,  126,  126,    3,    4,    3,    4,   15,    5,   15,
-       83,    6,    5,    5,    5,    6,    6,    6,    9,   83,
+        1,    1,    1,    1,    1,    1,    1,    1,    5,    6,
+        7,    5,    6,    8,   15,  506,    7,   15,   19,    8,
+       15,    9,    9,    9,   17,   15,   41,   41,   41,   20,
+        9,   17,   23,    9,    5,    6,    7,    9,   23,    8,
+       10,   10,   10,   18,   19,   10,  505,    9,   11,   10,
 
-        9,   10,    9,   10,   16,   10,   16,  480,   11,   96,
-       91,   12,   11,   15,   11,   12,   48,   12,   96,    9,
-       91,  479,   10,    9,    9,    9,   10,   10,   10,   11,
-       16,   48,   12,   11,   11,   11,   12,   12,   12,   13,
-       13,   13,   15,  478,   17,   14,   14,   14,   13,   14,
-       17,   13,   18,   80,   14,   13,  477,   14,   18,   16,
-       80,   14,   19,   19,   19,   53,   53,   53,   23,   23,
-       17,   19,  159,  199,   19,   20,   20,   20,   18,   20,
-      199,   23,  101,  159,   20,   23,  101,   20,   24,   24,
-       37,   37,   37,   58,   58,   58,   82,  102,   92,   17,
+       18,   11,   10,   11,   11,   20,   10,   39,   23,   11,
+      504,   39,   71,    5,    6,    7,   10,   12,    8,   71,
+       12,   13,   12,   12,   13,   62,   13,   13,   12,   62,
+       14,   16,   13,   14,   16,   14,   14,   16,   13,   75,
+       21,   14,   16,   21,   24,   22,  503,   14,   22,  102,
+       24,   27,   27,   27,   75,   43,   28,   28,   28,  102,
+       27,   28,   72,   27,  103,   28,   21,   43,   28,  103,
+       24,   22,  113,   13,   72,   13,   77,   77,   77,  133,
+      133,  113,   14,   72,   14,   25,   25,   25,   25,   25,
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
 
-       82,   24,   37,   92,   98,   24,  102,   18,   21,  203,
-       21,  476,   21,   21,   21,   82,   23,   98,   23,   21,
-       58,  203,   98,  474,  162,   21,   25,   25,   37,   21,
-      203,   26,   26,   21,  166,   21,   24,   79,   24,   25,
-      162,  473,   79,   25,   26,   79,   79,   79,   26,   84,
-       79,  100,  155,  166,   84,  103,  155,   84,   84,   84,
-       21,  170,   21,  187,  103,  170,  166,  100,  155,  206,
-      100,  192,  221,  103,   25,  221,   25,  206,  187,   26,
-      472,   26,   32,  111,  111,  111,  471,   32,  116,  116,
-      116,  117,  117,  117,  121,  121,  121,  192,  458,   32,
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,   25,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
 
-       32,   32,  123,  123,  123,   32,   32,   32,   32,   32,
-       32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
-       32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
-       69,  138,  138,  138,   69,  139,  139,  139,  193,  193,
-       69,   69,  142,  142,  142,  145,  145,  145,   69,  220,
-      405,   69,  405,  457,   69,  259,  220,   69,   69,  148,
-      148,  148,   69,  150,  150,  150,  151,  151,  151,   69,
-      186,  186,  186,   69,  259,   69,   69,   69,   69,  188,
-      188,  188,  189,  189,  189,  190,  190,  190,  191,  191,
-      191,  198,  198,  198,  200,  200,  200,  201,  202,  202,
+       34,   38,   40,   40,   40,   38,   70,   38,  175,  221,
+       70,  171,   38,   38,   40,   45,   87,  221,   38,   45,
+       87,   45,  171,   38,  175,   70,   80,   80,   80,   38,
+       38,   94,   45,  109,  107,   94,  111,   45,  107,  114,
+       40,  112,  208,   45,   45,  112,  109,  107,  114,  208,
+      183,  109,  111,   80,  183,  111,  212,  114,   38,  124,
+      124,  124,  147,  147,  147,  149,  149,  149,  152,  152,
+      152,  212,   45,   55,  201,  201,   55,  154,  154,  154,
+      217,  502,   55,   55,  155,  155,  155,  158,  158,  158,
+       55,  167,  501,   55,  179,  167,   55,  500,  236,   55,
 
-      202,  201,  242,  269,  289,  292,  312,  242,  323,  456,
-      242,  242,  242,  315,  315,  315,  201,  343,  344,  414,
-      433,  455,  269,  289,  292,  312,  454,  323,  343,  343,
-      343,  452,  451,  450,  449,  448,  446,  344,  414,  433,
-      461,  461,  461,  461,  461,  461,  461,  462,  462,  462,
-      462,  462,  462,  462,  463,  463,  463,  463,  463,  463,
-      463,  464,  464,  464,  464,  464,  464,  464,  465,  465,
-      466,  445,  466,  466,  466,  466,  467,  467,  444,  467,
-      467,  467,  467,  468,  468,  468,  468,  468,  468,  468,
-      469,  469,  469,  470,  442,  470,  470,  470,  470,  470,
+       55,  160,  160,  160,   55,  236,  217,  167,  205,  205,
+      205,   55,  206,  179,  499,   55,  206,   55,   55,   55,
+       55,  119,  207,  207,  207,  119,  179,  119,  209,  209,
+      209,  206,  119,  119,  210,  211,  211,  211,  119,  213,
+      213,  213,  237,  119,  276,  237,  210,  286,  306,  119,
+      119,  214,  214,  214,  309,  210,  215,  215,  215,  216,
+      216,  216,  498,  276,  330,  341,  286,  306,  333,  333,
+      333,  479,  427,  309,  363,  427,  436,  478,  119,  125,
+      125,  125,  477,  330,  341,  476,  454,  475,  125,  473,
+      362,  362,  472,  363,  471,  436,  125,  125,  125,  125,
 
-      475,  441,  475,  475,  475,  475,  482,  440,  482,  482,
-      482,  482,  482,  439,  438,  436,  435,  434,  432,  427,
-      426,  424,  423,  421,  420,  418,  417,  416,  415,  413,
-      412,  410,  409,  408,  406,  404,  403,  402,  401,  400,
-      399,  398,  395,  394,  393,  392,  390,  389,  388,  387,
-      386,  384,  383,  382,  379,  378,  377,  376,  375,  374,
-      373,  372,  371,  370,  369,  368,  367,  365,  364,  362,
-      360,  359,  358,  357,  356,  355,  354,  353,  352,  351,
-      350,  349,  348,  347,  346,  342,  341,  340,  339,  338,
-      337,  336,  334,  333,  332,  331,  330,  329,  328,  327,
+      125,  125,  362,  362,  362,  454,  482,  482,  482,  482,
+      482,  482,  482,  482,  482,  482,  482,  482,  482,  483,
+      483,  483,  483,  483,  483,  483,  483,  483,  483,  483,
+      483,  483,  484,  484,  484,  484,  484,  484,  484,  484,
+      484,  484,  484,  484,  484,  485,  485,  485,  485,  485,
+      485,  485,  485,  485,  485,  485,  485,  485,  486,  470,
+      469,  486,  467,  486,  486,  466,  465,  463,  462,  486,
+      486,  487,  461,  460,  487,  459,  487,  487,  457,  487,
+      487,  456,  487,  487,  488,  455,  488,  488,  489,  489,
+      453,  489,  489,  489,  489,  489,  489,  489,  489,  489,
 
-      326,  325,  324,  322,  321,  320,  319,  314,  310,  308,
-      307,  306,  305,  304,  302,  301,  300,  299,  298,  296,
-      295,  294,  293,  291,  290,  287,  286,  285,  283,  280,
-      278,  277,  275,  273,  272,  271,  270,  268,  266,  265,
-      264,  263,  262,  261,  260,  258,  257,  256,  254,  253,
-      252,  251,  250,  249,  248,  247,  246,  245,  244,  243,
-      238,  237,  236,  235,  234,  233,  232,  231,  230,  229,
-      228,  227,  226,  225,  224,  223,  222,  219,  218,  217,
-      216,  215,  214,  213,  212,  211,  210,  209,  208,  207,
-      205,  204,  197,  185,  181,  180,  179,  178,  177,  176,
+      490,  490,  490,  490,  490,  490,  490,  490,  490,  490,
+      490,  490,  490,  491,  491,  491,  491,  491,  491,  491,
+      491,  491,  491,  448,  447,  491,  492,  445,  444,  492,
+      492,  492,  442,  441,  440,  439,  492,  438,  492,  493,
+      493,  437,  493,  493,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  495,  495,  435,  495,  495,  496,  496,
+      434,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+      496,  497,  497,  432,  497,  497,  507,  507,  431,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  430,
+      428,  426,  425,  424,  423,  422,  421,  420,  417,  416,
 
-      175,  174,  173,  172,  171,  169,  168,  167,  165,  164,
-      163,  161,  160,  158,  157,  156,  154,  122,  118,  114,
-      113,  106,  105,  104,   99,   97,   95,   94,   93,   90,
-       87,   77,   66,   55,   44,   27,    8,    7,    2,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460
+      415,  414,  412,  411,  410,  409,  408,  406,  405,  404,
+      401,  400,  399,  398,  396,  395,  394,  393,  392,  391,
+      390,  389,  388,  385,  384,  382,  380,  379,  378,  377,
+      376,  375,  374,  373,  372,  371,  370,  369,  368,  367,
+      366,  365,  361,  360,  359,  358,  357,  356,  355,  353,
+      352,  351,  350,  349,  348,  347,  346,  345,  344,  343,
+      342,  340,  339,  338,  337,  332,  328,  326,  325,  324,
+      323,  322,  320,  319,  318,  317,  316,  314,  313,  312,
+      311,  310,  308,  307,  304,  303,  302,  300,  297,  295,
+      294,  292,  290,  289,  288,  287,  285,  283,  282,  281,
 
+      280,  279,  278,  277,  275,  274,  273,  271,  270,  269,
+      268,  267,  266,  265,  264,  263,  262,  261,  260,  258,
+      254,  253,  252,  251,  250,  249,  248,  247,  246,  245,
+      244,  243,  242,  241,  240,  239,  238,  235,  234,  233,
+      232,  231,  230,  229,  228,  227,  226,  225,  224,  223,
+      222,  220,  219,  218,  200,  194,  193,  192,  191,  190,
+      189,  188,  187,  186,  185,  184,  182,  181,  180,  178,
+      177,  176,  174,  173,  172,  170,  169,  168,  166,  165,
+      159,  156,  129,  127,  126,  117,  116,  115,  110,  108,
+      106,  105,  104,  101,  100,   95,   90,   68,   65,   51,
+
+       49,   29,   26,    4,    3,    2,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -840,18 +921,18 @@
 
 static yyconst flex_int16_t yy_rule_linenum[109] =
     {   0,
-      197,  198,  199,  200,  208,  219,  220,  221,  222,  223,
-      224,  225,  226,  227,  228,  229,  230,  231,  232,  233,
-      234,  235,  236,  237,  238,  239,  240,  241,  242,  243,
-      244,  245,  246,  247,  248,  249,  250,  251,  252,  253,
-      254,  255,  256,  257,  258,  260,  264,  265,  266,  268,
-      275,  279,  285,  288,  291,  294,  305,  313,  320,  337,
-      343,  364,  365,  376,  387,  388,  400,  408,  419,  435,
-      441,  451,  461,  472,  473,  474,  475,  476,  477,  478,
-      481,  483,  492,  504,  509,  510,  516,  517,  528,  534,
-      540,  546,  562,  596,  597,  598,  634,  636,  637,  639,
+      149,  150,  151,  152,  160,  178,  179,  180,  181,  182,
+      183,  184,  185,  186,  187,  188,  189,  190,  191,  192,
+      193,  194,  195,  196,  197,  198,  199,  200,  201,  202,
+      203,  204,  205,  206,  207,  208,  209,  210,  211,  212,
+      213,  214,  215,  216,  217,  218,  219,  221,  225,  226,
+      227,  228,  229,  231,  238,  242,  249,  254,  257,  260,
+      263,  271,  279,  286,  293,  312,  327,  332,  351,  363,
+      379,  394,  411,  412,  423,  434,  435,  447,  473,  518,
+      528,  537,  547,  548,  549,  550,  551,  552,  553,  556,
+      558,  566,  583,  588,  589,  595,  596,  607,  613,  619,
 
-      643,  658,  693,  694,  695,  696,  704,  705
+      625,  641,  642,  643,  659,  678,  718,  719
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -865,13 +946,13 @@
 #line 1 "scan-gram.l"
 /* Bison Grammar Scanner                             -*- C -*-
 
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -880,153 +961,109 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301  USA
-*/
-#line 27 "scan-gram.l"
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+#define YY_NO_INPUT 1
+#line 24 "scan-gram.l"
 /* Work around a bug in flex 2.5.31.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
 #undef gram_wrap
 #define gram_wrap() 1
 
-#include "system.h"
-
-#include <mbswidth.h>
-#include <quote.h>
+#define FLEX_PREFIX(Id) gram_ ## Id
+#include "flex-scanner.h"
 
 #include "complain.h"
 #include "files.h"
-#include "getargs.h"
 #include "gram.h"
 #include "quotearg.h"
 #include "reader.h"
 #include "uniqstr.h"
 
-#define YY_USER_INIT					\
-  do							\
-    {							\
-      scanner_cursor.file = current_file;		\
-      scanner_cursor.line = 1;				\
-      scanner_cursor.column = 1;			\
-      code_start = scanner_cursor;			\
-    }							\
-  while (0)
+#include <c-ctype.h>
+#include <mbswidth.h>
+#include <quote.h>
 
-/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used.  */
-int gram_get_lineno (void);
-FILE *gram_get_in (void);
-FILE *gram_get_out (void);
-int gram_get_leng (void);
-char *gram_get_text (void);
-void gram_set_lineno (int);
-void gram_set_in (FILE *);
-void gram_set_out (FILE *);
-int gram_get_debug (void);
-void gram_set_debug (int);
-int gram_lex_destroy (void);
+#include "scan-gram.h"
+
+#define YY_DECL GRAM_LEX_DECL
+
+#define YY_USER_INIT					\
+   code_start = scanner_cursor = loc->start;		\
 
 /* Location of scanner cursor.  */
-boundary scanner_cursor;
+static boundary scanner_cursor;
 
-static void adjust_location (location *, char const *, size_t);
-#define YY_USER_ACTION  adjust_location (loc, gram_text, gram_leng);
+#define YY_USER_ACTION  location_compute (loc, &scanner_cursor, gram_text, gram_leng);
 
 static size_t no_cr_read (FILE *, char *, size_t);
 #define YY_INPUT(buf, result, size) ((result) = no_cr_read (gram_in, buf, size))
 
-
-/* OBSTACK_FOR_STRING -- Used to store all the characters that we need to
-   keep (to construct ID, STRINGS etc.).  Use the following macros to
-   use it.
-
-   Use STRING_GROW to append what has just been matched, and
-   STRING_FINISH to end the string (it puts the ending 0).
-   STRING_FINISH also stores this string in LAST_STRING, which can be
-   used, and which is used by STRING_FREE to free the last string.  */
-
-static struct obstack obstack_for_string;
-
-/* A string representing the most recently saved token.  */
-char *last_string;
-
-/* The location of the most recently saved token, if it was a
-   BRACED_CODE token; otherwise, this has an unspecified value.  */
-location last_braced_code_loc;
-
-#define STRING_GROW   \
-  obstack_grow (&obstack_for_string, gram_text, gram_leng)
-
-#define STRING_FINISH					\
-  do {							\
-    obstack_1grow (&obstack_for_string, '\0');		\
-    last_string = obstack_finish (&obstack_for_string);	\
+#define ROLLBACK_CURRENT_TOKEN                                  \
+  do {                                                          \
+    scanner_cursor.column -= mbsnwidth (gram_text, gram_leng, 0);	\
+    yyless (0);                                                 \
   } while (0)
 
-#define STRING_FREE \
-  obstack_free (&obstack_for_string, last_string)
+/* A string representing the most recently saved token.  */
+static char *last_string;
+
+/* Bracketed identifier. */
+static uniqstr bracketed_id_str = 0;
+static location bracketed_id_loc;
+static boundary bracketed_id_start;
+static int bracketed_id_context_state = 0;
 
 void
-scanner_last_string_free (void)
+gram_scanner_last_string_free (void)
 {
   STRING_FREE;
 }
 
-/* Within well-formed rules, RULE_LENGTH is the number of values in
-   the current rule so far, which says where to find `$0' with respect
-   to the top of the stack.  It is not the same as the rule->length in
-   the case of mid rule actions.
-
-   Outside of well-formed rules, RULE_LENGTH has an undefined value.  */
-static int rule_length;
-
-static void rule_length_overflow (location) __attribute__ ((__noreturn__));
-
-/* Increment the rule length by one, checking for overflow.  */
-static inline void
-increment_rule_length (location loc)
-{
-  rule_length++;
-
-  /* Don't allow rule_length == INT_MAX, since that might cause
-     confusion with strtol if INT_MAX == LONG_MAX.  */
-  if (rule_length == INT_MAX)
-    rule_length_overflow (loc);
-}
-
-static void handle_dollar (int token_type, char *cp, location loc);
-static void handle_at (int token_type, char *cp, location loc);
 static void handle_syncline (char *, location);
 static unsigned long int scan_integer (char const *p, int base, location loc);
 static int convert_ucn_to_byte (char const *hex_text);
 static void unexpected_eof (boundary, char const *);
 static void unexpected_newline (boundary, char const *);
 
+/* A C-like comment in directives/rules. */
 
+/* Strings and characters in directives/rules. */
 
+/* A identifier was just read in directives/rules.  Special state
+to capture the sequence 'identifier :'. */
 
+/* Three types of user code:
+- prologue (code between '%{' '%}' in the first section, before %%);
+- actions, printers, union, etc, (between braced in the middle section);
+- epilogue (everything after the second %%). */
 
+/* C and C++ comments in code. */
+
+/* Strings and characters in code. */
+
+/* Bracketed identifiers support. */
 
 /* POSIX says that a tag must be both an id and a C union member, but
    historically almost any character is allowed in a tag.  We disallow
    NUL and newline, as this simplifies our implementation.  */
 /* Zero or more instances of backslash-newline.  Following GCC, allow
    white space between the backslash and the newline.  */
-#line 1016 "scan-gram.c"
+#line 1052 "scan-gram.c"
 
 #define INITIAL 0
-#define SC_COMMENT 1
-#define SC_LINE_COMMENT 2
-#define SC_YACC_COMMENT 3
-#define SC_STRING 4
-#define SC_CHARACTER 5
-#define SC_AFTER_IDENTIFIER 6
-#define SC_ESCAPED_STRING 7
-#define SC_ESCAPED_CHARACTER 8
-#define SC_PRE_CODE 9
-#define SC_BRACED_CODE 10
-#define SC_PROLOGUE 11
-#define SC_EPILOGUE 12
+#define SC_YACC_COMMENT 1
+#define SC_ESCAPED_STRING 2
+#define SC_ESCAPED_CHARACTER 3
+#define SC_AFTER_IDENTIFIER 4
+#define SC_PROLOGUE 5
+#define SC_BRACED_CODE 6
+#define SC_EPILOGUE 7
+#define SC_COMMENT 8
+#define SC_LINE_COMMENT 9
+#define SC_STRING 10
+#define SC_CHARACTER 11
+#define SC_BRACKETED_ID 12
+#define SC_RETURN_BRACKETED_ID 13
 
 #ifndef YY_NO_UNISTD_H
 /* Special case for "unistd.h", since it is non-ANSI. We include it way
@@ -1046,11 +1083,46 @@
 
 /* %if-c-only Reentrant structure and macros (non-C++). */
 /* %if-reentrant */
+/* %if-c-only */
+
+static int yy_init_globals (void );
+
+/* %endif */
 /* %if-reentrant */
 /* %endif */
+/* %endif End reentrant structures and macros. */
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int gram_lex_destroy (void );
+
+int gram_get_debug (void );
+
+void gram_set_debug (int debug_flag  );
+
+YY_EXTRA_TYPE gram_get_extra (void );
+
+void gram_set_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *gram_get_in (void );
+
+void gram_set_in  (FILE * in_str  );
+
+FILE *gram_get_out (void );
+
+void gram_set_out  (FILE * out_str  );
+
+yy_size_t gram_get_leng (void );
+
+char *gram_get_text (void );
+
+int gram_get_lineno (void );
+
+void gram_set_lineno (int line_number  );
+
 /* %if-bison-bridge */
 /* %endif */
-/* %endif End reentrant structures and macros. */
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1107,7 +1179,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( gram_text, gram_leng, 1, gram_out )
+#define ECHO do { if (fwrite( gram_text, gram_leng, 1, gram_out )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1232,20 +1304,17 @@
 	register int yy_act;
     
 /* %% [7.0] user's declarations go here */
-#line 165 "scan-gram.l"
+#line 120 "scan-gram.l"
 
 
   /* Nesting level of the current code in braces.  */
-  int braces_level IF_LINT (= 0);
+  int braces_level PACIFY_CC (= 0);
 
   /* Parent context state, when applicable.  */
-  int context_state IF_LINT (= 0);
-
-  /* Token type to return, when applicable.  */
-  int token_type IF_LINT (= 0);
+  int context_state PACIFY_CC (= 0);
 
   /* Location of most recent identifier, when applicable.  */
-  location id_loc IF_LINT (= empty_location);
+  location id_loc PACIFY_CC (= empty_location);
 
   /* Where containing code started, when applicable.  Its initial
      value is relevant only when gram_lex is invoked in the SC_EPILOGUE
@@ -1254,7 +1323,7 @@
 
   /* Where containing comment or string or character literal started,
      when applicable.  */
-  boundary token_start IF_LINT (= scanner_cursor);
+  boundary token_start PACIFY_CC (= scanner_cursor);
 
 
 
@@ -1262,11 +1331,11 @@
   | Scanning white space.  |
   `-----------------------*/
 
-#line 1266 "scan-gram.c"
+#line 1335 "scan-gram.c"
 
-	if ( (yy_init) )
+	if ( !(yy_init) )
 		{
-		(yy_init) = 0;
+		(yy_init) = 1;
 
 #ifdef YY_USER_INIT
 		YY_USER_INIT;
@@ -1326,13 +1395,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 461 )
+				if ( yy_current_state >= 482 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 460 );
+		while ( yy_current_state != 481 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1376,21 +1445,21 @@
 /* Comments and white space.  */
 case 1:
 YY_RULE_SETUP
-#line 197 "scan-gram.l"
-warn_at (*loc, _("stray `,' treated as white space"));
+#line 149 "scan-gram.l"
+warn_at (*loc, _("stray ',' treated as white space"));
 	YY_BREAK
 case 2:
 /* rule 2 can match eol */
-#line 199 "scan-gram.l"
+#line 151 "scan-gram.l"
 case 3:
 /* rule 3 can match eol */
 YY_RULE_SETUP
-#line 199 "scan-gram.l"
-;
+#line 151 "scan-gram.l"
+continue;
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 200 "scan-gram.l"
+#line 152 "scan-gram.l"
 {
     token_start = loc->start;
     context_state = YY_START;
@@ -1402,7 +1471,7 @@
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
-#line 208 "scan-gram.l"
+#line 160 "scan-gram.l"
 {
     handle_syncline (gram_text + sizeof "#line " - 1, *loc);
   }
@@ -1411,292 +1480,324 @@
 /*----------------------------.
   | Scanning Bison directives.  |
   `----------------------------*/
+/* For directives that are also command line options, the regex must be
+	"%..."
+     after "[-_]"s are removed, and the directive must match the --long
+     option name, with a single string argument.  Otherwise, add exceptions
+     to ../build-aux/cross-options.pl.  */
 
 
 case 6:
 YY_RULE_SETUP
-#line 219 "scan-gram.l"
+#line 178 "scan-gram.l"
 return PERCENT_NONASSOC;
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 220 "scan-gram.l"
-return PERCENT_DEBUG;
+#line 179 "scan-gram.l"
+return PERCENT_CODE;
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 221 "scan-gram.l"
-return PERCENT_DEFAULT_PREC;
+#line 180 "scan-gram.l"
+return PERCENT_DEBUG;
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 222 "scan-gram.l"
-return PERCENT_DEFINE;
+#line 181 "scan-gram.l"
+return PERCENT_DEFAULT_PREC;
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 223 "scan-gram.l"
-return PERCENT_DEFINES;
+#line 182 "scan-gram.l"
+return PERCENT_DEFINE;
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 224 "scan-gram.l"
-token_type = PERCENT_DESTRUCTOR; BEGIN SC_PRE_CODE;
+#line 183 "scan-gram.l"
+return PERCENT_DEFINES;
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 225 "scan-gram.l"
-return PERCENT_DPREC;
+#line 184 "scan-gram.l"
+return PERCENT_DESTRUCTOR;
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 226 "scan-gram.l"
-return PERCENT_ERROR_VERBOSE;
+#line 185 "scan-gram.l"
+return PERCENT_DPREC;
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 227 "scan-gram.l"
-return PERCENT_EXPECT;
+#line 186 "scan-gram.l"
+return PERCENT_ERROR_VERBOSE;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 228 "scan-gram.l"
-return PERCENT_EXPECT_RR;
+#line 187 "scan-gram.l"
+return PERCENT_EXPECT;
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 229 "scan-gram.l"
-return PERCENT_FILE_PREFIX;
+#line 188 "scan-gram.l"
+return PERCENT_EXPECT_RR;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 230 "scan-gram.l"
-return PERCENT_YACC;
+#line 189 "scan-gram.l"
+return PERCENT_FILE_PREFIX;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 231 "scan-gram.l"
-token_type = PERCENT_INITIAL_ACTION; BEGIN SC_PRE_CODE;
+#line 190 "scan-gram.l"
+return PERCENT_YACC;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 232 "scan-gram.l"
-return PERCENT_GLR_PARSER;
+#line 191 "scan-gram.l"
+return PERCENT_INITIAL_ACTION;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 233 "scan-gram.l"
-return PERCENT_LEFT;
+#line 192 "scan-gram.l"
+return PERCENT_GLR_PARSER;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 234 "scan-gram.l"
-token_type = PERCENT_LEX_PARAM; BEGIN SC_PRE_CODE;
+#line 193 "scan-gram.l"
+return PERCENT_LANGUAGE;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 235 "scan-gram.l"
-return PERCENT_LOCATIONS;
+#line 194 "scan-gram.l"
+return PERCENT_LEFT;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 236 "scan-gram.l"
-return PERCENT_MERGE;
+#line 195 "scan-gram.l"
+return PERCENT_LEX_PARAM;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 237 "scan-gram.l"
-return PERCENT_NAME_PREFIX;
+#line 196 "scan-gram.l"
+return PERCENT_LOCATIONS;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 238 "scan-gram.l"
-return PERCENT_NO_DEFAULT_PREC;
+#line 197 "scan-gram.l"
+return PERCENT_MERGE;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 239 "scan-gram.l"
-return PERCENT_NO_LINES;
+#line 198 "scan-gram.l"
+return PERCENT_NAME_PREFIX;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 240 "scan-gram.l"
-return PERCENT_NONASSOC;
+#line 199 "scan-gram.l"
+return PERCENT_NO_DEFAULT_PREC;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 241 "scan-gram.l"
-return PERCENT_NONDETERMINISTIC_PARSER;
+#line 200 "scan-gram.l"
+return PERCENT_NO_LINES;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 242 "scan-gram.l"
-return PERCENT_NTERM;
+#line 201 "scan-gram.l"
+return PERCENT_NONASSOC;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 243 "scan-gram.l"
-return PERCENT_OUTPUT;
+#line 202 "scan-gram.l"
+return PERCENT_NONDETERMINISTIC_PARSER;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 244 "scan-gram.l"
-token_type = PERCENT_PARSE_PARAM; BEGIN SC_PRE_CODE;
+#line 203 "scan-gram.l"
+return PERCENT_NTERM;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 245 "scan-gram.l"
-rule_length--; return PERCENT_PREC;
+#line 204 "scan-gram.l"
+return PERCENT_OUTPUT;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 246 "scan-gram.l"
-token_type = PERCENT_PRINTER; BEGIN SC_PRE_CODE;
+#line 205 "scan-gram.l"
+return PERCENT_PARSE_PARAM;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 247 "scan-gram.l"
-return PERCENT_PURE_PARSER;
+#line 206 "scan-gram.l"
+return PERCENT_PREC;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 248 "scan-gram.l"
-return PERCENT_REQUIRE;
+#line 207 "scan-gram.l"
+return PERCENT_PRINTER;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 249 "scan-gram.l"
-return PERCENT_RIGHT;
+#line 208 "scan-gram.l"
+return PERCENT_PURE_PARSER;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 250 "scan-gram.l"
-return PERCENT_SKELETON;
+#line 209 "scan-gram.l"
+return PERCENT_REQUIRE;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 251 "scan-gram.l"
-return PERCENT_START;
+#line 210 "scan-gram.l"
+return PERCENT_RIGHT;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 252 "scan-gram.l"
-return PERCENT_TOKEN;
+#line 211 "scan-gram.l"
+return PERCENT_SKELETON;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 253 "scan-gram.l"
-return PERCENT_TOKEN;
+#line 212 "scan-gram.l"
+return PERCENT_START;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 254 "scan-gram.l"
-return PERCENT_TOKEN_TABLE;
+#line 213 "scan-gram.l"
+return PERCENT_TOKEN;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 255 "scan-gram.l"
-return PERCENT_TYPE;
+#line 214 "scan-gram.l"
+return PERCENT_TOKEN;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 256 "scan-gram.l"
-token_type = PERCENT_UNION; BEGIN SC_PRE_CODE;
+#line 215 "scan-gram.l"
+return PERCENT_TOKEN_TABLE;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 257 "scan-gram.l"
-return PERCENT_VERBOSE;
+#line 216 "scan-gram.l"
+return PERCENT_TYPE;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 258 "scan-gram.l"
-return PERCENT_YACC;
+#line 217 "scan-gram.l"
+return PERCENT_UNION;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 260 "scan-gram.l"
+#line 218 "scan-gram.l"
+return PERCENT_VERBOSE;
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 219 "scan-gram.l"
+return PERCENT_YACC;
+	YY_BREAK
+case 48:
+/* rule 48 can match eol */
+YY_RULE_SETUP
+#line 221 "scan-gram.l"
 {
     complain_at (*loc, _("invalid directive: %s"), quote (gram_text));
   }
 	YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 264 "scan-gram.l"
-return EQUAL;
-	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 265 "scan-gram.l"
-rule_length = 0; return PIPE;
-	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 266 "scan-gram.l"
-return SEMICOLON;
+#line 225 "scan-gram.l"
+return EQUAL;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 268 "scan-gram.l"
-{
-    val->symbol = symbol_get (gram_text, *loc);
-    id_loc = *loc;
-    increment_rule_length (*loc);
-    BEGIN SC_AFTER_IDENTIFIER;
-  }
+#line 226 "scan-gram.l"
+return PIPE;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 275 "scan-gram.l"
+#line 227 "scan-gram.l"
+return SEMICOLON;
+	YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 228 "scan-gram.l"
+return TYPE_TAG_ANY;
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 229 "scan-gram.l"
+return TYPE_TAG_NONE;
+	YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 231 "scan-gram.l"
+{
+    val->uniqstr = uniqstr_new (gram_text);
+    id_loc = *loc;
+    bracketed_id_str = NULL;
+    BEGIN SC_AFTER_IDENTIFIER;
+  }
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 238 "scan-gram.l"
 {
     val->integer = scan_integer (gram_text, 10, *loc);
     return INT;
   }
 	YY_BREAK
-case 52:
+case 56:
 YY_RULE_SETUP
-#line 279 "scan-gram.l"
+#line 242 "scan-gram.l"
 {
     val->integer = scan_integer (gram_text, 16, *loc);
     return INT;
   }
 	YY_BREAK
-/* Characters.  We don't check there is only one.  */
-case 53:
+/* Identifiers may not start with a digit.  Yet, don't silently
+     accept "1FOO" as "1 FOO".  */
+case 57:
 YY_RULE_SETUP
-#line 285 "scan-gram.l"
-STRING_GROW; token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
+#line 249 "scan-gram.l"
+{
+    complain_at (*loc, _("invalid identifier: %s"), quote (gram_text));
+  }
+	YY_BREAK
+/* Characters.  */
+case 58:
+YY_RULE_SETUP
+#line 254 "scan-gram.l"
+token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
 	YY_BREAK
 /* Strings. */
-case 54:
+case 59:
 YY_RULE_SETUP
-#line 288 "scan-gram.l"
+#line 257 "scan-gram.l"
 token_start = loc->start; BEGIN SC_ESCAPED_STRING;
 	YY_BREAK
 /* Prologue. */
-case 55:
+case 60:
 YY_RULE_SETUP
-#line 291 "scan-gram.l"
+#line 260 "scan-gram.l"
 code_start = loc->start; BEGIN SC_PROLOGUE;
 	YY_BREAK
 /* Code in between braces.  */
-case 56:
+case 61:
 YY_RULE_SETUP
-#line 294 "scan-gram.l"
+#line 263 "scan-gram.l"
 {
-    if (current_rule && current_rule->action)
-      grammar_midrule_action ();
     STRING_GROW;
-    token_type = BRACED_CODE;
     braces_level = 0;
     code_start = loc->start;
     BEGIN SC_BRACED_CODE;
   }
 	YY_BREAK
 /* A type. */
-case 57:
+case 62:
 YY_RULE_SETUP
-#line 305 "scan-gram.l"
+#line 271 "scan-gram.l"
 {
     obstack_grow (&obstack_for_string, gram_text + 1, gram_leng - 2);
     STRING_FINISH;
@@ -1705,9 +1806,9 @@
     return TYPE;
   }
 	YY_BREAK
-case 58:
+case 63:
 YY_RULE_SETUP
-#line 313 "scan-gram.l"
+#line 279 "scan-gram.l"
 {
     static int percent_percent_count;
     if (++percent_percent_count == 2)
@@ -1715,15 +1816,27 @@
     return PERCENT_PERCENT;
   }
 	YY_BREAK
-case 59:
+case 64:
 YY_RULE_SETUP
-#line 320 "scan-gram.l"
+#line 286 "scan-gram.l"
 {
-    complain_at (*loc, _("invalid character: %s"), quote (gram_text));
+    bracketed_id_str = NULL;
+    bracketed_id_start = loc->start;
+    bracketed_id_context_state = YY_START;
+    BEGIN SC_BRACKETED_ID;
+  }
+	YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 293 "scan-gram.l"
+{
+    complain_at (*loc, "%s: %s",
+                 ngettext ("invalid character", "invalid characters", gram_leng),
+                 quote_mem (gram_text, gram_leng));
   }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 324 "scan-gram.l"
+#line 299 "scan-gram.l"
 {
     loc->start = loc->end = scanner_cursor;
     yyterminate ();
@@ -1735,92 +1848,182 @@
   `-----------------------------------------------------------------*/
 
 
-case 60:
+case 66:
 YY_RULE_SETUP
-#line 337 "scan-gram.l"
+#line 312 "scan-gram.l"
 {
-    rule_length = 0;
+    if (bracketed_id_str)
+      {
+	ROLLBACK_CURRENT_TOKEN;
+	BEGIN SC_RETURN_BRACKETED_ID;
+	*loc = id_loc;
+	return ID;
+      }
+    else
+      {
+	bracketed_id_start = loc->start;
+	bracketed_id_context_state = YY_START;
+	BEGIN SC_BRACKETED_ID;
+      }
+  }
+	YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 327 "scan-gram.l"
+{
+    BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
-    BEGIN INITIAL;
     return ID_COLON;
   }
 	YY_BREAK
-case 61:
+case 68:
 YY_RULE_SETUP
-#line 343 "scan-gram.l"
+#line 332 "scan-gram.l"
 {
-    scanner_cursor.column -= mbsnwidth (gram_text, gram_leng, 0);
-    yyless (0);
+    ROLLBACK_CURRENT_TOKEN;
+    BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
-    BEGIN INITIAL;
     return ID;
   }
 	YY_BREAK
 case YY_STATE_EOF(SC_AFTER_IDENTIFIER):
-#line 350 "scan-gram.l"
+#line 338 "scan-gram.l"
 {
+    BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
-    BEGIN INITIAL;
     return ID;
   }
 	YY_BREAK
 
+/*--------------------------------.
+  | Scanning bracketed identifiers. |
+  `--------------------------------*/
+
+
+case 69:
+YY_RULE_SETUP
+#line 351 "scan-gram.l"
+{
+    if (bracketed_id_str)
+      {
+	complain_at (*loc, _("unexpected identifier in bracketed name: %s"),
+		     quote (gram_text));
+      }
+    else
+      {
+	bracketed_id_str = uniqstr_new (gram_text);
+	bracketed_id_loc = *loc;
+      }
+  }
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 363 "scan-gram.l"
+{
+    BEGIN bracketed_id_context_state;
+    if (bracketed_id_str)
+      {
+	if (INITIAL == bracketed_id_context_state)
+	  {
+	    val->uniqstr = bracketed_id_str;
+	    bracketed_id_str = 0;
+	    *loc = bracketed_id_loc;
+	    return BRACKETED_ID;
+	  }
+      }
+    else
+      complain_at (*loc, _("an identifier expected"));
+  }
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 379 "scan-gram.l"
+{
+    complain_at (*loc, "%s: %s",
+                 ngettext ("invalid character in bracketed name",
+                           "invalid characters in bracketed name", gram_leng),
+                 quote_mem (gram_text, gram_leng));
+  }
+	YY_BREAK
+case YY_STATE_EOF(SC_BRACKETED_ID):
+#line 386 "scan-gram.l"
+{
+    BEGIN bracketed_id_context_state;
+    unexpected_eof (bracketed_id_start, "]");
+  }
+	YY_BREAK
+
+
+
+case 72:
+YY_RULE_SETUP
+#line 394 "scan-gram.l"
+{
+    ROLLBACK_CURRENT_TOKEN;
+    val->uniqstr = bracketed_id_str;
+    bracketed_id_str = 0;
+    *loc = bracketed_id_loc;
+    BEGIN INITIAL;
+    return BRACKETED_ID;
+  }
+	YY_BREAK
+
 /*---------------------------------------------------------------.
-  | Scanning a Yacc comment.  The initial `/ *' is already eaten.  |
+  | Scanning a Yacc comment.  The initial '/ *' is already eaten.  |
   `---------------------------------------------------------------*/
 
 
-case 62:
+case 73:
 YY_RULE_SETUP
-#line 364 "scan-gram.l"
+#line 411 "scan-gram.l"
 BEGIN context_state;
 	YY_BREAK
-case 63:
-/* rule 63 can match eol */
+case 74:
+/* rule 74 can match eol */
 YY_RULE_SETUP
-#line 365 "scan-gram.l"
-;
+#line 412 "scan-gram.l"
+continue;
 	YY_BREAK
 case YY_STATE_EOF(SC_YACC_COMMENT):
-#line 366 "scan-gram.l"
+#line 413 "scan-gram.l"
 unexpected_eof (token_start, "*/"); BEGIN context_state;
 	YY_BREAK
 
 /*------------------------------------------------------------.
-  | Scanning a C comment.  The initial `/ *' is already eaten.  |
+  | Scanning a C comment.  The initial '/ *' is already eaten.  |
   `------------------------------------------------------------*/
 
 
-case 64:
-/* rule 64 can match eol */
+case 75:
+/* rule 75 can match eol */
 YY_RULE_SETUP
-#line 376 "scan-gram.l"
+#line 423 "scan-gram.l"
 STRING_GROW; BEGIN context_state;
 	YY_BREAK
 case YY_STATE_EOF(SC_COMMENT):
-#line 377 "scan-gram.l"
+#line 424 "scan-gram.l"
 unexpected_eof (token_start, "*/"); BEGIN context_state;
 	YY_BREAK
 
 /*--------------------------------------------------------------.
-  | Scanning a line comment.  The initial `//' is already eaten.  |
+  | Scanning a line comment.  The initial '//' is already eaten.  |
   `--------------------------------------------------------------*/
 
 
-case 65:
-/* rule 65 can match eol */
+case 76:
+/* rule 76 can match eol */
 YY_RULE_SETUP
-#line 387 "scan-gram.l"
+#line 434 "scan-gram.l"
 STRING_GROW; BEGIN context_state;
 	YY_BREAK
-case 66:
-/* rule 66 can match eol */
+case 77:
+/* rule 77 can match eol */
 YY_RULE_SETUP
-#line 388 "scan-gram.l"
+#line 435 "scan-gram.l"
 STRING_GROW;
 	YY_BREAK
 case YY_STATE_EOF(SC_LINE_COMMENT):
-#line 389 "scan-gram.l"
+#line 436 "scan-gram.l"
 BEGIN context_state;
 	YY_BREAK
 
@@ -1830,27 +2033,30 @@
   `------------------------------------------------*/
 
 
-case 67:
+case 78:
+/* rule 78 can match eol */
 YY_RULE_SETUP
-#line 400 "scan-gram.l"
+#line 447 "scan-gram.l"
 {
+    if (gram_text[0] == '\n')
+      unexpected_newline (token_start, "\"");
     STRING_FINISH;
     loc->start = token_start;
     val->chars = last_string;
-    increment_rule_length (*loc);
     BEGIN INITIAL;
     return STRING;
   }
 	YY_BREAK
-case 68:
-/* rule 68 can match eol */
-YY_RULE_SETUP
-#line 408 "scan-gram.l"
-unexpected_newline (token_start, "\"");	BEGIN INITIAL;
-	YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_STRING):
-#line 409 "scan-gram.l"
-unexpected_eof (token_start, "\"");	BEGIN INITIAL;
+#line 456 "scan-gram.l"
+{
+    unexpected_eof (token_start, "\"");
+    STRING_FINISH;
+    loc->start = token_start;
+    val->chars = last_string;
+    BEGIN INITIAL;
+    return STRING;
+  }
 	YY_BREAK
 
 /*----------------------------------------------------------.
@@ -1859,42 +2065,61 @@
   `----------------------------------------------------------*/
 
 
-case 69:
+case 79:
+/* rule 79 can match eol */
 YY_RULE_SETUP
-#line 419 "scan-gram.l"
+#line 473 "scan-gram.l"
 {
-    unsigned char last_string_1;
-    STRING_GROW;
     STRING_FINISH;
     loc->start = token_start;
-    val->symbol = symbol_get (quotearg_style (escape_quoting_style,
-					      last_string),
-			      *loc);
-    symbol_class_set (val->symbol, token_sym, *loc, false);
-    last_string_1 = last_string[1];
-    symbol_user_token_number_set (val->symbol, last_string_1, *loc);
+    val->character = last_string[0];
+    {
+      /* FIXME: Eventually, make these errors.  */
+      if (last_string[0] == '\0')
+        {
+          warn_at (*loc, _("empty character literal"));
+          /* '\0' seems dangerous even if we are about to complain.  */
+          val->character = '\'';
+        }
+      else if (last_string[1] != '\0')
+        warn_at (*loc, _("extra characters in character literal"));
+    }
+    if (gram_text[0] == '\n')
+      unexpected_newline (token_start, "'");
     STRING_FREE;
-    increment_rule_length (*loc);
     BEGIN INITIAL;
-    return ID;
+    return CHAR;
   }
 	YY_BREAK
-case 70:
-/* rule 70 can match eol */
-YY_RULE_SETUP
-#line 435 "scan-gram.l"
-unexpected_newline (token_start, "'");	BEGIN INITIAL;
-	YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
-#line 436 "scan-gram.l"
-unexpected_eof (token_start, "'");	BEGIN INITIAL;
+#line 494 "scan-gram.l"
+{
+    STRING_FINISH;
+    loc->start = token_start;
+    val->character = last_string[0];
+    {
+      /* FIXME: Eventually, make these errors.  */
+      if (last_string[0] == '\0')
+        {
+          warn_at (*loc, _("empty character literal"));
+          /* '\0' seems dangerous even if we are about to complain.  */
+          val->character = '\'';
+        }
+      else if (last_string[1] != '\0')
+        warn_at (*loc, _("extra characters in character literal"));
+    }
+    unexpected_eof (token_start, "'");
+    STRING_FREE;
+    BEGIN INITIAL;
+    return CHAR;
+  }
 	YY_BREAK
 
 
 
-case 71:
+case 80:
 YY_RULE_SETUP
-#line 441 "scan-gram.l"
+#line 518 "scan-gram.l"
 complain_at (*loc, _("invalid null character"));
 	YY_BREAK
 
@@ -1903,94 +2128,96 @@
   `----------------------------*/
 
 
-case 72:
-YY_RULE_SETUP
-#line 451 "scan-gram.l"
-{
-    unsigned long int c = strtoul (gram_text + 1, NULL, 8);
-    if (UCHAR_MAX < c)
-      complain_at (*loc, _("invalid escape sequence: %s"), quote (gram_text));
-    else if (! c)
-      complain_at (*loc, _("invalid null character: %s"), quote (gram_text));
-    else
-      obstack_1grow (&obstack_for_string, c);
-  }
-	YY_BREAK
-case 73:
-YY_RULE_SETUP
-#line 461 "scan-gram.l"
-{
-    verify (UCHAR_MAX < ULONG_MAX);
-    unsigned long int c = strtoul (gram_text + 2, NULL, 16);
-    if (UCHAR_MAX < c)
-      complain_at (*loc, _("invalid escape sequence: %s"), quote (gram_text));
-    else if (! c)
-      complain_at (*loc, _("invalid null character: %s"), quote (gram_text));
-    else
-      obstack_1grow (&obstack_for_string, c);
-  }
-	YY_BREAK
-case 74:
-YY_RULE_SETUP
-#line 472 "scan-gram.l"
-obstack_1grow (&obstack_for_string, '\a');
-	YY_BREAK
-case 75:
-YY_RULE_SETUP
-#line 473 "scan-gram.l"
-obstack_1grow (&obstack_for_string, '\b');
-	YY_BREAK
-case 76:
-YY_RULE_SETUP
-#line 474 "scan-gram.l"
-obstack_1grow (&obstack_for_string, '\f');
-	YY_BREAK
-case 77:
-YY_RULE_SETUP
-#line 475 "scan-gram.l"
-obstack_1grow (&obstack_for_string, '\n');
-	YY_BREAK
-case 78:
-YY_RULE_SETUP
-#line 476 "scan-gram.l"
-obstack_1grow (&obstack_for_string, '\r');
-	YY_BREAK
-case 79:
-YY_RULE_SETUP
-#line 477 "scan-gram.l"
-obstack_1grow (&obstack_for_string, '\t');
-	YY_BREAK
-case 80:
-YY_RULE_SETUP
-#line 478 "scan-gram.l"
-obstack_1grow (&obstack_for_string, '\v');
-	YY_BREAK
-/* \\[\"\'?\\] would be shorter, but it confuses xgettext.  */
 case 81:
 YY_RULE_SETUP
-#line 481 "scan-gram.l"
-obstack_1grow (&obstack_for_string, gram_text[1]);
+#line 528 "scan-gram.l"
+{
+    unsigned long int c = strtoul (gram_text + 1, NULL, 8);
+    if (!c || UCHAR_MAX < c)
+      complain_at (*loc, _("invalid number after \\-escape: %s"),
+                   gram_text+1);
+    else
+      obstack_1grow (&obstack_for_string, c);
+  }
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 483 "scan-gram.l"
+#line 537 "scan-gram.l"
 {
-    int c = convert_ucn_to_byte (gram_text);
-    if (c < 0)
-      complain_at (*loc, _("invalid escape sequence: %s"), quote (gram_text));
-    else if (! c)
-      complain_at (*loc, _("invalid null character: %s"), quote (gram_text));
+    verify (UCHAR_MAX < ULONG_MAX);
+    unsigned long int c = strtoul (gram_text + 2, NULL, 16);
+    if (!c || UCHAR_MAX < c)
+      complain_at (*loc, _("invalid number after \\-escape: %s"),
+                   gram_text+1);
     else
       obstack_1grow (&obstack_for_string, c);
   }
 	YY_BREAK
 case 83:
-/* rule 83 can match eol */
 YY_RULE_SETUP
-#line 492 "scan-gram.l"
+#line 547 "scan-gram.l"
+obstack_1grow (&obstack_for_string, '\a');
+	YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 548 "scan-gram.l"
+obstack_1grow (&obstack_for_string, '\b');
+	YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 549 "scan-gram.l"
+obstack_1grow (&obstack_for_string, '\f');
+	YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 550 "scan-gram.l"
+obstack_1grow (&obstack_for_string, '\n');
+	YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 551 "scan-gram.l"
+obstack_1grow (&obstack_for_string, '\r');
+	YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 552 "scan-gram.l"
+obstack_1grow (&obstack_for_string, '\t');
+	YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 553 "scan-gram.l"
+obstack_1grow (&obstack_for_string, '\v');
+	YY_BREAK
+/* \\[\"\'?\\] would be shorter, but it confuses xgettext.  */
+case 90:
+YY_RULE_SETUP
+#line 556 "scan-gram.l"
+obstack_1grow (&obstack_for_string, gram_text[1]);
+	YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 558 "scan-gram.l"
 {
-    complain_at (*loc, _("unrecognized escape sequence: %s"), quote (gram_text));
-    STRING_GROW;
+    int c = convert_ucn_to_byte (gram_text);
+    if (c <= 0)
+      complain_at (*loc, _("invalid number after \\-escape: %s"),
+                   gram_text+1);
+    else
+      obstack_1grow (&obstack_for_string, c);
+  }
+	YY_BREAK
+case 92:
+/* rule 92 can match eol */
+YY_RULE_SETUP
+#line 566 "scan-gram.l"
+{
+    char const *p = gram_text + 1;
+    /* Quote only if escaping won't make the character visible.  */
+    if (c_isspace ((unsigned char) *p) && c_isprint ((unsigned char) *p))
+      p = quote (p);
+    else
+      p = quotearg_style_mem (escape_quoting_style, p, 1);
+    complain_at (*loc, _("invalid character after \\-escape: %s"), p);
   }
 	YY_BREAK
 
@@ -1999,46 +2226,46 @@
   `--------------------------------------------*/
 
 
-case 84:
-/* rule 84 can match eol */
+case 93:
+/* rule 93 can match eol */
 YY_RULE_SETUP
-#line 504 "scan-gram.l"
+#line 583 "scan-gram.l"
 STRING_GROW;
 	YY_BREAK
 
 
 
-case 85:
+case 94:
 YY_RULE_SETUP
-#line 509 "scan-gram.l"
+#line 588 "scan-gram.l"
 STRING_GROW; BEGIN context_state;
 	YY_BREAK
-case 86:
-/* rule 86 can match eol */
+case 95:
+/* rule 95 can match eol */
 YY_RULE_SETUP
-#line 510 "scan-gram.l"
+#line 589 "scan-gram.l"
 unexpected_newline (token_start, "'"); BEGIN context_state;
 	YY_BREAK
 case YY_STATE_EOF(SC_CHARACTER):
-#line 511 "scan-gram.l"
+#line 590 "scan-gram.l"
 unexpected_eof (token_start, "'"); BEGIN context_state;
 	YY_BREAK
 
 
 
-case 87:
+case 96:
 YY_RULE_SETUP
-#line 516 "scan-gram.l"
+#line 595 "scan-gram.l"
 STRING_GROW; BEGIN context_state;
 	YY_BREAK
-case 88:
-/* rule 88 can match eol */
+case 97:
+/* rule 97 can match eol */
 YY_RULE_SETUP
-#line 517 "scan-gram.l"
+#line 596 "scan-gram.l"
 unexpected_newline (token_start, "\""); BEGIN context_state;
 	YY_BREAK
 case YY_STATE_EOF(SC_STRING):
-#line 518 "scan-gram.l"
+#line 597 "scan-gram.l"
 unexpected_eof (token_start, "\""); BEGIN context_state;
 	YY_BREAK
 
@@ -2047,9 +2274,9 @@
   `---------------------------------------------------*/
 
 
-case 89:
+case 98:
 YY_RULE_SETUP
-#line 528 "scan-gram.l"
+#line 607 "scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2057,9 +2284,9 @@
     BEGIN SC_CHARACTER;
   }
 	YY_BREAK
-case 90:
+case 99:
 YY_RULE_SETUP
-#line 534 "scan-gram.l"
+#line 613 "scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2067,10 +2294,10 @@
     BEGIN SC_STRING;
   }
 	YY_BREAK
-case 91:
-/* rule 91 can match eol */
+case 100:
+/* rule 100 can match eol */
 YY_RULE_SETUP
-#line 540 "scan-gram.l"
+#line 619 "scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2078,10 +2305,10 @@
     BEGIN SC_COMMENT;
   }
 	YY_BREAK
-case 92:
-/* rule 92 can match eol */
+case 101:
+/* rule 101 can match eol */
 YY_RULE_SETUP
-#line 546 "scan-gram.l"
+#line 625 "scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2089,136 +2316,59 @@
   }
 	YY_BREAK
 
-/*---------------------------------------------------------------.
-  | Scanning after %union etc., possibly followed by white space.  |
-  | For %union only, allow arbitrary C code to appear before the   |
-  | following brace, as an extension to POSIX.			   |
-  `---------------------------------------------------------------*/
+/*-----------------------------------------------------------.
+  | Scanning some code in braces (actions). The initial "{" is |
+  | already eaten.                                             |
+  `-----------------------------------------------------------*/
 
 
-case 93:
+case 102:
+/* rule 102 can match eol */
 YY_RULE_SETUP
-#line 562 "scan-gram.l"
-{
-    bool valid = gram_text[0] == '{' || token_type == PERCENT_UNION;
-    scanner_cursor.column -= mbsnwidth (gram_text, gram_leng, 0);
-    yyless (0);
-
-    if (valid)
-      {
-	braces_level = -1;
-	code_start = loc->start;
-	BEGIN SC_BRACED_CODE;
-      }
-    else
-      {
-	complain_at (*loc, _("missing `{' in %s"),
-		     token_name (token_type));
-	obstack_sgrow (&obstack_for_string, "{}");
-	STRING_FINISH;
-	val->chars = last_string;
-	BEGIN INITIAL;
-	return token_type;
-      }
-  }
-	YY_BREAK
-case YY_STATE_EOF(SC_PRE_CODE):
-#line 585 "scan-gram.l"
-unexpected_eof (scanner_cursor, "{}"); BEGIN INITIAL;
-	YY_BREAK
-
-/*---------------------------------------------------------------.
-  | Scanning some code in braces (%union and actions). The initial |
-  | "{" is already eaten.                                          |
-  `---------------------------------------------------------------*/
-
-
-case 94:
-/* rule 94 can match eol */
-YY_RULE_SETUP
-#line 596 "scan-gram.l"
+#line 641 "scan-gram.l"
 STRING_GROW; braces_level++;
 	YY_BREAK
-case 95:
-/* rule 95 can match eol */
+case 103:
+/* rule 103 can match eol */
 YY_RULE_SETUP
-#line 597 "scan-gram.l"
+#line 642 "scan-gram.l"
 STRING_GROW; braces_level--;
 	YY_BREAK
-case 96:
-YY_RULE_SETUP
-#line 598 "scan-gram.l"
-{
-    bool outer_brace = --braces_level < 0;
-
-    /* As an undocumented Bison extension, append `;' before the last
-       brace in braced code, so that the user code can omit trailing
-       `;'.  But do not append `;' if emulating Yacc, since Yacc does
-       not append one.
-
-       FIXME: Bison should warn if a semicolon seems to be necessary
-       here, and should omit the semicolon if it seems unnecessary
-       (e.g., after ';', '{', or '}', each followed by comments or
-       white space).  Such a warning shouldn't depend on --yacc; it
-       should depend on a new --pedantic option, which would cause
-       Bison to warn if it detects an extension to POSIX.  --pedantic
-       should also diagnose other Bison extensions like %yacc.
-       Perhaps there should also be a GCC-style --pedantic-errors
-       option, so that such warnings are diagnosed as errors.  */
-    if (outer_brace && token_type == BRACED_CODE && ! yacc_flag)
-      obstack_1grow (&obstack_for_string, ';');
-
-    obstack_1grow (&obstack_for_string, '}');
-
-    if (outer_brace)
-      {
-	STRING_FINISH;
-	loc->start = code_start;
-	val->chars = last_string;
-	increment_rule_length (*loc);
-	last_braced_code_loc = *loc;
-	BEGIN INITIAL;
-	return token_type;
-      }
-  }
-	YY_BREAK
-/* Tokenize `<<%' correctly (as `<<' `%') rather than incorrrectly
-     (as `<' `<%').  */
-case 97:
-/* rule 97 can match eol */
-YY_RULE_SETUP
-#line 634 "scan-gram.l"
-STRING_GROW;
-	YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 636 "scan-gram.l"
-handle_dollar (token_type, gram_text, *loc);
-	YY_BREAK
-case 99:
-YY_RULE_SETUP
-#line 637 "scan-gram.l"
-handle_at (token_type, gram_text, *loc);
-	YY_BREAK
-case 100:
-YY_RULE_SETUP
-#line 639 "scan-gram.l"
-{
-    warn_at (*loc, _("stray `$'"));
-    obstack_sgrow (&obstack_for_string, "$][");
-  }
-	YY_BREAK
-case 101:
+case 104:
 YY_RULE_SETUP
 #line 643 "scan-gram.l"
 {
-    warn_at (*loc, _("stray `@'"));
-    obstack_sgrow (&obstack_for_string, "@@");
+    obstack_1grow (&obstack_for_string, '}');
+
+    --braces_level;
+    if (braces_level < 0)
+      {
+	STRING_FINISH;
+	loc->start = code_start;
+	val->code = last_string;
+	BEGIN INITIAL;
+	return BRACED_CODE;
+      }
   }
 	YY_BREAK
+/* Tokenize '<<%' correctly (as '<<' '%') rather than incorrrectly
+     (as '<' '<%').  */
+case 105:
+/* rule 105 can match eol */
+YY_RULE_SETUP
+#line 659 "scan-gram.l"
+STRING_GROW;
+	YY_BREAK
 case YY_STATE_EOF(SC_BRACED_CODE):
-#line 648 "scan-gram.l"
-unexpected_eof (code_start, "}"); BEGIN INITIAL;
+#line 661 "scan-gram.l"
+{
+    unexpected_eof (code_start, "}");
+    STRING_FINISH;
+    loc->start = code_start;
+    val->code = last_string;
+    BEGIN INITIAL;
+    return BRACED_CODE;
+  }
 	YY_BREAK
 
 /*--------------------------------------------------------------.
@@ -2226,9 +2376,9 @@
   `--------------------------------------------------------------*/
 
 
-case 102:
+case 106:
 YY_RULE_SETUP
-#line 658 "scan-gram.l"
+#line 678 "scan-gram.l"
 {
     STRING_FINISH;
     loc->start = code_start;
@@ -2238,8 +2388,15 @@
   }
 	YY_BREAK
 case YY_STATE_EOF(SC_PROLOGUE):
-#line 666 "scan-gram.l"
-unexpected_eof (code_start, "%}"); BEGIN INITIAL;
+#line 686 "scan-gram.l"
+{
+    unexpected_eof (code_start, "%}");
+    STRING_FINISH;
+    loc->start = code_start;
+    val->chars = last_string;
+    BEGIN INITIAL;
+    return PROLOGUE;
+  }
 	YY_BREAK
 
 /*---------------------------------------------------------------.
@@ -2249,7 +2406,7 @@
 
 
 case YY_STATE_EOF(SC_EPILOGUE):
-#line 677 "scan-gram.l"
+#line 704 "scan-gram.l"
 {
     STRING_FINISH;
     loc->start = code_start;
@@ -2259,49 +2416,25 @@
   }
 	YY_BREAK
 
-/*-----------------------------------------.
-  | Escape M4 quoting characters in C code.  |
-  `-----------------------------------------*/
-
-
-case 103:
-YY_RULE_SETUP
-#line 693 "scan-gram.l"
-obstack_sgrow (&obstack_for_string, "$][");
-	YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 694 "scan-gram.l"
-obstack_sgrow (&obstack_for_string, "@@");
-	YY_BREAK
-case 105:
-YY_RULE_SETUP
-#line 695 "scan-gram.l"
-obstack_sgrow (&obstack_for_string, "@{");
-	YY_BREAK
-case 106:
-YY_RULE_SETUP
-#line 696 "scan-gram.l"
-obstack_sgrow (&obstack_for_string, "@}");
-	YY_BREAK
-
 /*-----------------------------------------------------.
   | By default, grow the string obstack with the input.  |
   `-----------------------------------------------------*/
 case 107:
-#line 705 "scan-gram.l"
+#line 719 "scan-gram.l"
 case 108:
 /* rule 108 can match eol */
 YY_RULE_SETUP
-#line 705 "scan-gram.l"
+#line 719 "scan-gram.l"
 STRING_GROW;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 707 "scan-gram.l"
+#line 721 "scan-gram.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 2305 "scan-gram.c"
+#line 2436 "scan-gram.c"
+case YY_STATE_EOF(SC_RETURN_BRACKETED_ID):
+	yyterminate();
 
 	case YY_END_OF_BUFFER:
 		{
@@ -2499,21 +2632,21 @@
 
 	else
 		{
-			size_t num_to_read =
+			yy_size_t num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
 			{ /* Not enough room in the buffer - grow it. */
 
 			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
 
 			int yy_c_buf_p_offset =
 				(int) ((yy_c_buf_p) - b->yy_ch_buf);
 
 			if ( b->yy_is_our_buffer )
 				{
-				int new_size = b->yy_buf_size * 2;
+				yy_size_t new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -2568,6 +2701,14 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) gram_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
 	(yy_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -2606,7 +2747,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 461 )
+			if ( yy_current_state >= 482 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2639,13 +2780,13 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 461 )
+		if ( yy_current_state >= 482 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 460);
+	yy_is_jam = (yy_current_state == 481);
 
-	return yy_is_jam ? 0 : yy_current_state;
+		return yy_is_jam ? 0 : yy_current_state;
 }
 
 /* %if-c-only */
@@ -2680,7 +2821,7 @@
 
 		else
 			{ /* need more input */
-			int offset = (yy_c_buf_p) - (yytext_ptr);
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -2865,13 +3006,6 @@
 	gram_free((void *) b  );
 }
 
-/* %if-c-only */
-
-/* %endif */
-
-/* %if-c++-only */
-/* %endif */
-
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
  * such as during a gram_restart() or at EOF.
@@ -3014,7 +3148,7 @@
 /* %if-c++-only */
 /* %endif */
 {
-	int num_to_alloc;
+	yy_size_t num_to_alloc;
     
 	if (!(yy_buffer_stack)) {
 
@@ -3026,7 +3160,9 @@
 		(yy_buffer_stack) = (struct yy_buffer_state**)gram_alloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
-		
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in gram_ensure_buffer_stack()" );
+								  
 		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
 				
 		(yy_buffer_stack_max) = num_to_alloc;
@@ -3044,6 +3180,8 @@
 								((yy_buffer_stack),
 								num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in gram_ensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -3092,28 +3230,28 @@
 /* %if-c-only */
 /** Setup the input buffer state to scan a string. The next call to gram_lex() will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param yystr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
  *       gram__scan_bytes() instead.
  */
-YY_BUFFER_STATE gram__scan_string (yyconst char * yy_str )
+YY_BUFFER_STATE gram__scan_string (yyconst char * yystr )
 {
     
-	return gram__scan_bytes(yy_str,strlen(yy_str) );
+	return gram__scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
 /** Setup the input buffer state to scan the given bytes. The next call to gram_lex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE gram__scan_bytes  (yyconst char * bytes, int  len )
+YY_BUFFER_STATE gram__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -3121,15 +3259,15 @@
 	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = len + 2;
+	n = _yybytes_len + 2;
 	buf = (char *) gram_alloc(n  );
 	if ( ! buf )
 		YY_FATAL_ERROR( "out of dynamic memory in gram__scan_bytes()" );
 
-	for ( i = 0; i < len; ++i )
-		buf[i] = bytes[i];
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
 
-	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
 	b = gram__scan_buffer(buf,n );
 	if ( ! b )
@@ -3209,7 +3347,7 @@
 /** Get the length of the current token.
  * 
  */
-int gram_get_leng  (void)
+yy_size_t gram_get_leng  (void)
 {
         return gram_leng;
 }
@@ -3267,6 +3405,36 @@
 /* %if-reentrant */
 /* %if-bison-bridge */
 /* %endif */
+/* %endif if-c-only */
+
+/* %if-c-only */
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from gram_lex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    gram_in = stdin;
+    gram_out = stdout;
+#else
+    gram_in = (FILE *) 0;
+    gram_out = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * gram_lex_init()
+     */
+    return 0;
+}
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
@@ -3285,6 +3453,10 @@
 	gram_free((yy_buffer_stack) );
 	(yy_buffer_stack) = NULL;
 
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * gram_lex() is called, initialization will occur. */
+    yy_init_globals( );
+
 /* %if-reentrant */
 /* %endif */
     return 0;
@@ -3299,7 +3471,7 @@
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
 	register int i;
-    	for ( i = 0; i < n; ++i )
+	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
 }
 #endif
@@ -3308,7 +3480,7 @@
 static int yy_flex_strlen (yyconst char * s )
 {
 	register int n;
-    	for ( n = 0; s[n]; ++n )
+	for ( n = 0; s[n]; ++n )
 		;
 
 	return n;
@@ -3344,93 +3516,8 @@
 
 /* %ok-for-header */
 
-#undef YY_NEW_FILE
-#undef YY_FLUSH_BUFFER
-#undef yy_set_bol
-#undef yy_new_buffer
-#undef yy_set_interactive
-#undef yytext_ptr
-#undef YY_DO_BEFORE_ACTION
+#line 721 "scan-gram.l"
 
-#ifdef YY_DECL_IS_OURS
-#undef YY_DECL_IS_OURS
-#undef YY_DECL
-#endif
-#line 707 "scan-gram.l"
-
-
-
-/* Keeps track of the maximum number of semantic values to the left of
-   a handle (those referenced by $0, $-1, etc.) are required by the
-   semantic actions of this grammar. */
-int max_left_semantic_context = 0;
-
-/* If BUF is null, add BUFSIZE (which in this case must be less than
-   INT_MAX) to COLUMN; otherwise, add mbsnwidth (BUF, BUFSIZE, 0) to
-   COLUMN.  If an overflow occurs, or might occur but is undetectable,
-   return INT_MAX.  Assume COLUMN is nonnegative.  */
-
-static inline int
-add_column_width (int column, char const *buf, size_t bufsize)
-{
-  size_t width;
-  unsigned int remaining_columns = INT_MAX - column;
-
-  if (buf)
-    {
-      if (INT_MAX / 2 <= bufsize)
-	return INT_MAX;
-      width = mbsnwidth (buf, bufsize, 0);
-    }
-  else
-    width = bufsize;
-
-  return width <= remaining_columns ? column + width : INT_MAX;
-}
-
-/* Set *LOC and adjust scanner cursor to account for token TOKEN of
-   size SIZE.  */
-
-static void
-adjust_location (location *loc, char const *token, size_t size)
-{
-  int line = scanner_cursor.line;
-  int column = scanner_cursor.column;
-  char const *p0 = token;
-  char const *p = token;
-  char const *lim = token + size;
-
-  loc->start = scanner_cursor;
-
-  for (p = token; p < lim; p++)
-    switch (*p)
-      {
-      case '\n':
-	line += line < INT_MAX;
-	column = 1;
-	p0 = p + 1;
-	break;
-
-      case '\t':
-	column = add_column_width (column, p0, p - p0);
-	column = add_column_width (column, NULL, 8 - ((column - 1) & 7));
-	p0 = p + 1;
-	break;
-
-      default:
-	break;
-      }
-
-  scanner_cursor.line = line;
-  scanner_cursor.column = column = add_column_width (column, p0, p - p0);
-
-  loc->end = scanner_cursor;
-
-  if (line == INT_MAX && loc->start.line != INT_MAX)
-    warn_at (*loc, _("line number overflow"));
-  if (column == INT_MAX && loc->start.column != INT_MAX)
-    warn_at (*loc, _("column number overflow"));
-}
 
 
 /* Read bytes from FP into buffer BUF of size SIZE.  Return the
@@ -3480,173 +3567,6 @@
 }
 
 
-/*------------------------------------------------------------------.
-| TEXT is pointing to a wannabee semantic value (i.e., a `$').      |
-|                                                                   |
-| Possible inputs: $[<TYPENAME>]($|integer)                         |
-|                                                                   |
-| Output to OBSTACK_FOR_STRING a reference to this semantic value.  |
-`------------------------------------------------------------------*/
-
-static inline bool
-handle_action_dollar (char *text, location loc)
-{
-  const char *type_name = NULL;
-  char *cp = text + 1;
-
-  if (! current_rule)
-    return false;
-
-  /* Get the type name if explicit. */
-  if (*cp == '<')
-    {
-      type_name = ++cp;
-      while (*cp != '>')
-	++cp;
-      *cp = '\0';
-      ++cp;
-    }
-
-  if (*cp == '$')
-    {
-      if (!type_name)
-	type_name = symbol_list_n_type_name_get (current_rule, loc, 0);
-      if (!type_name && typed)
-	complain_at (loc, _("$$ of `%s' has no declared type"),
-		     current_rule->sym->tag);
-      if (!type_name)
-	type_name = "";
-      obstack_fgrow1 (&obstack_for_string,
-		      "]b4_lhs_value([%s])[", type_name);
-      current_rule->used = true;
-    }
-  else
-    {
-      long int num = strtol (cp, NULL, 10);
-
-      if (1 - INT_MAX + rule_length <= num && num <= rule_length)
-	{
-	  int n = num;
-	  if (max_left_semantic_context < 1 - n)
-	    max_left_semantic_context = 1 - n;
-	  if (!type_name && 0 < n)
-	    type_name = symbol_list_n_type_name_get (current_rule, loc, n);
-	  if (!type_name && typed)
-	    complain_at (loc, _("$%d of `%s' has no declared type"),
-			 n, current_rule->sym->tag);
-	  if (!type_name)
-	    type_name = "";
-	  obstack_fgrow3 (&obstack_for_string,
-			  "]b4_rhs_value(%d, %d, [%s])[",
-			  rule_length, n, type_name);
-	  symbol_list_n_used_set (current_rule, n, true);
-	}
-      else
-	complain_at (loc, _("integer out of range: %s"), quote (text));
-    }
-
-  return true;
-}
-
-
-/*----------------------------------------------------------------.
-| Map `$?' onto the proper M4 symbol, depending on its TOKEN_TYPE |
-| (are we in an action?).                                         |
-`----------------------------------------------------------------*/
-
-static void
-handle_dollar (int token_type, char *text, location loc)
-{
-  switch (token_type)
-    {
-    case BRACED_CODE:
-      if (handle_action_dollar (text, loc))
-	return;
-      break;
-
-    case PERCENT_DESTRUCTOR:
-    case PERCENT_INITIAL_ACTION:
-    case PERCENT_PRINTER:
-      if (text[1] == '$')
-	{
-	  obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar[");
-	  return;
-	}
-      break;
-
-    default:
-      break;
-    }
-
-  complain_at (loc, _("invalid value: %s"), quote (text));
-}
-
-
-/*------------------------------------------------------.
-| TEXT is a location token (i.e., a `@...').  Output to |
-| OBSTACK_FOR_STRING a reference to this location.      |
-`------------------------------------------------------*/
-
-static inline bool
-handle_action_at (char *text, location loc)
-{
-  char *cp = text + 1;
-  locations_flag = true;
-
-  if (! current_rule)
-    return false;
-
-  if (*cp == '$')
-    obstack_sgrow (&obstack_for_string, "]b4_lhs_location[");
-  else
-    {
-      long int num = strtol (cp, NULL, 10);
-
-      if (1 - INT_MAX + rule_length <= num && num <= rule_length)
-	{
-	  int n = num;
-	  obstack_fgrow2 (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
-			  rule_length, n);
-	}
-      else
-	complain_at (loc, _("integer out of range: %s"), quote (text));
-    }
-
-  return true;
-}
-
-
-/*----------------------------------------------------------------.
-| Map `@?' onto the proper M4 symbol, depending on its TOKEN_TYPE |
-| (are we in an action?).                                         |
-`----------------------------------------------------------------*/
-
-static void
-handle_at (int token_type, char *text, location loc)
-{
-  switch (token_type)
-    {
-    case BRACED_CODE:
-      handle_action_at (text, loc);
-      return;
-
-    case PERCENT_INITIAL_ACTION:
-    case PERCENT_DESTRUCTOR:
-    case PERCENT_PRINTER:
-      if (text[1] == '$')
-	{
-	  obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
-	  return;
-	}
-      break;
-
-    default:
-      break;
-    }
-
-  complain_at (loc, _("invalid value: %s"), quote (text));
-}
-
 
 /*------------------------------------------------------.
 | Scan NUMBER for a base-BASE integer at location LOC.  |
@@ -3725,36 +3645,28 @@
 }
 
 
-/*----------------------------------------------------------------.
-| Handle `#line INT "FILE"'.  ARGS has already skipped `#line '.  |
-`----------------------------------------------------------------*/
+/*---------------------------------------------------------------------.
+| Handle '#line INT( "FILE")?\n'.  ARGS has already skipped '#line '.  |
+`---------------------------------------------------------------------*/
 
 static void
 handle_syncline (char *args, location loc)
 {
-  char *after_num;
-  unsigned long int lineno = strtoul (args, &after_num, 10);
-  char *file = strchr (after_num, '"') + 1;
-  *strchr (file, '"') = '\0';
+  char *file;
+  unsigned long int lineno = strtoul (args, &file, 10);
   if (INT_MAX <= lineno)
     {
       warn_at (loc, _("line number overflow"));
       lineno = INT_MAX;
     }
-  scanner_cursor.file = current_file = uniqstr_new (file);
-  scanner_cursor.line = lineno;
-  scanner_cursor.column = 1;
-}
 
-
-/*---------------------------------.
-| Report a rule that is too long.  |
-`---------------------------------*/
-
-static void
-rule_length_overflow (location loc)
-{
-  fatal_at (loc, _("rule is too long"));
+  file = mbschr (file, '"');
+  if (file)
+    {
+      *mbschr (file + 1, '"') = '\0';
+      current_file = uniqstr_new (file + 1);
+    }
+  boundary_set (&scanner_cursor, current_file, lineno, 1);
 }
 
 
@@ -3770,6 +3682,10 @@
   location loc;
   loc.start = start;
   loc.end = scanner_cursor;
+  token_end = quote (token_end);
+  /* Instead of '\'', display "'".  */
+  if (!strcmp (token_end, "'\\''"))
+    token_end = "\"'\"";
   complain_at (loc, _(msgid), token_end);
 }
 
@@ -3782,7 +3698,7 @@
 static void
 unexpected_eof (boundary start, char const *token_end)
 {
-  unexpected_end (start, N_("missing `%s' at end of file"), token_end);
+  unexpected_end (start, N_("missing %s at end of file"), token_end);
 }
 
 
@@ -3793,7 +3709,7 @@
 static void
 unexpected_newline (boundary start, char const *token_end)
 {
-  unexpected_end (start, N_("missing `%s' at end of line"), token_end);
+  unexpected_end (start, N_("missing %s at end of line"), token_end);
 }
 
 
@@ -3802,7 +3718,7 @@
 `-------------------------*/
 
 void
-scanner_initialize (void)
+gram_scanner_initialize (void)
 {
   obstack_init (&obstack_for_string);
 }
@@ -3813,10 +3729,10 @@
 `-----------------------------------------------*/
 
 void
-scanner_free (void)
+gram_scanner_free (void)
 {
   obstack_free (&obstack_for_string, 0);
   /* Reclaim Flex's buffers.  */
-  gram__delete_buffer (YY_CURRENT_BUFFER);
+  gram_lex_destroy ();
 }
 
diff --git a/src/scan-gram.h b/src/scan-gram.h
new file mode 100644
index 0000000..72138a2
--- /dev/null
+++ b/src/scan-gram.h
@@ -0,0 +1,38 @@
+/* Bison Grammar Scanner
+
+   Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   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 3 of the License, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef SCAN_GRAM_H_
+# define SCAN_GRAM_H_
+
+/* From the scanner.  */
+extern FILE *gram_in;
+extern int gram__flex_debug;
+void gram_scanner_initialize (void);
+void gram_scanner_free (void);
+void gram_scanner_last_string_free (void);
+
+/* These are declared by the scanner, but not used.  We put them here
+   to pacify "make syntax-check".  */
+extern FILE *gram_out;
+extern int gram_lineno;
+
+# define GRAM_LEX_DECL int gram_lex (GRAM_STYPE *val, location *loc)
+GRAM_LEX_DECL;
+
+#endif /* !SCAN_GRAM_H_ */
diff --git a/src/scan-gram.l b/src/scan-gram.l
index cf704c7..9083dce 100644
--- a/src/scan-gram.l
+++ b/src/scan-gram.l
@@ -1,12 +1,12 @@
 /* Bison Grammar Scanner                             -*- C -*-
 
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   This program is free software; you can redistribute it and/or modify
+   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 of the License, or
+   the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,12 +15,9 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301  USA
-*/
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-%option debug nodefault nounput noyywrap never-interactive
+%option debug nodefault noinput nounput noyywrap never-interactive
 %option prefix="gram_" outfile="lex.yy.c"
 
 %{
@@ -29,112 +26,56 @@
 #undef gram_wrap
 #define gram_wrap() 1
 
-#include "system.h"
-
-#include <mbswidth.h>
-#include <quote.h>
+#define FLEX_PREFIX(Id) gram_ ## Id
+#include "flex-scanner.h"
 
 #include "complain.h"
 #include "files.h"
-#include "getargs.h"
 #include "gram.h"
 #include "quotearg.h"
 #include "reader.h"
 #include "uniqstr.h"
 
-#define YY_USER_INIT					\
-  do							\
-    {							\
-      scanner_cursor.file = current_file;		\
-      scanner_cursor.line = 1;				\
-      scanner_cursor.column = 1;			\
-      code_start = scanner_cursor;			\
-    }							\
-  while (0)
+#include <c-ctype.h>
+#include <mbswidth.h>
+#include <quote.h>
 
-/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used.  */
-int gram_get_lineno (void);
-FILE *gram_get_in (void);
-FILE *gram_get_out (void);
-int gram_get_leng (void);
-char *gram_get_text (void);
-void gram_set_lineno (int);
-void gram_set_in (FILE *);
-void gram_set_out (FILE *);
-int gram_get_debug (void);
-void gram_set_debug (int);
-int gram_lex_destroy (void);
+#include "scan-gram.h"
+
+#define YY_DECL GRAM_LEX_DECL
+
+#define YY_USER_INIT					\
+   code_start = scanner_cursor = loc->start;		\
 
 /* Location of scanner cursor.  */
-boundary scanner_cursor;
+static boundary scanner_cursor;
 
-static void adjust_location (location *, char const *, size_t);
-#define YY_USER_ACTION  adjust_location (loc, yytext, yyleng);
+#define YY_USER_ACTION  location_compute (loc, &scanner_cursor, yytext, yyleng);
 
 static size_t no_cr_read (FILE *, char *, size_t);
 #define YY_INPUT(buf, result, size) ((result) = no_cr_read (yyin, buf, size))
 
-
-/* OBSTACK_FOR_STRING -- Used to store all the characters that we need to
-   keep (to construct ID, STRINGS etc.).  Use the following macros to
-   use it.
-
-   Use STRING_GROW to append what has just been matched, and
-   STRING_FINISH to end the string (it puts the ending 0).
-   STRING_FINISH also stores this string in LAST_STRING, which can be
-   used, and which is used by STRING_FREE to free the last string.  */
-
-static struct obstack obstack_for_string;
-
-/* A string representing the most recently saved token.  */
-char *last_string;
-
-/* The location of the most recently saved token, if it was a
-   BRACED_CODE token; otherwise, this has an unspecified value.  */
-location last_braced_code_loc;
-
-#define STRING_GROW   \
-  obstack_grow (&obstack_for_string, yytext, yyleng)
-
-#define STRING_FINISH					\
-  do {							\
-    obstack_1grow (&obstack_for_string, '\0');		\
-    last_string = obstack_finish (&obstack_for_string);	\
+#define ROLLBACK_CURRENT_TOKEN                                  \
+  do {                                                          \
+    scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0);	\
+    yyless (0);                                                 \
   } while (0)
 
-#define STRING_FREE \
-  obstack_free (&obstack_for_string, last_string)
+/* A string representing the most recently saved token.  */
+static char *last_string;
+
+/* Bracketed identifier. */
+static uniqstr bracketed_id_str = 0;
+static location bracketed_id_loc;
+static boundary bracketed_id_start;
+static int bracketed_id_context_state = 0;
 
 void
-scanner_last_string_free (void)
+gram_scanner_last_string_free (void)
 {
   STRING_FREE;
 }
 
-/* Within well-formed rules, RULE_LENGTH is the number of values in
-   the current rule so far, which says where to find `$0' with respect
-   to the top of the stack.  It is not the same as the rule->length in
-   the case of mid rule actions.
-
-   Outside of well-formed rules, RULE_LENGTH has an undefined value.  */
-static int rule_length;
-
-static void rule_length_overflow (location) __attribute__ ((__noreturn__));
-
-/* Increment the rule length by one, checking for overflow.  */
-static inline void
-increment_rule_length (location loc)
-{
-  rule_length++;
-
-  /* Don't allow rule_length == INT_MAX, since that might cause
-     confusion with strtol if INT_MAX == LONG_MAX.  */
-  if (rule_length == INT_MAX)
-    rule_length_overflow (loc);
-}
-
-static void handle_dollar (int token_type, char *cp, location loc);
-static void handle_at (int token_type, char *cp, location loc);
 static void handle_syncline (char *, location);
 static unsigned long int scan_integer (char const *p, int base, location loc);
 static int convert_ucn_to_byte (char const *hex_text);
@@ -142,15 +83,29 @@
 static void unexpected_newline (boundary, char const *);
 
 %}
-%x SC_COMMENT SC_LINE_COMMENT SC_YACC_COMMENT
-%x SC_STRING SC_CHARACTER
-%x SC_AFTER_IDENTIFIER
+ /* A C-like comment in directives/rules. */
+%x SC_YACC_COMMENT
+ /* Strings and characters in directives/rules. */
 %x SC_ESCAPED_STRING SC_ESCAPED_CHARACTER
-%x SC_PRE_CODE SC_BRACED_CODE SC_PROLOGUE SC_EPILOGUE
+ /* A identifier was just read in directives/rules.  Special state
+    to capture the sequence 'identifier :'. */
+%x SC_AFTER_IDENTIFIER
 
-letter	  [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
-id	  {letter}({letter}|[0-9])*
-directive %{letter}({letter}|[0-9]|-)*
+ /* Three types of user code:
+    - prologue (code between '%{' '%}' in the first section, before %%);
+    - actions, printers, union, etc, (between braced in the middle section);
+    - epilogue (everything after the second %%). */
+%x SC_PROLOGUE SC_BRACED_CODE SC_EPILOGUE
+ /* C and C++ comments in code. */
+%x SC_COMMENT SC_LINE_COMMENT
+ /* Strings and characters in code. */
+%x SC_STRING SC_CHARACTER
+ /* Bracketed identifiers support. */
+%x SC_BRACKETED_ID SC_RETURN_BRACKETED_ID
+
+letter	   [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
+notletter [^.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]{-}[%\{]
+id	  {letter}({letter}|[-0-9])*
 int	  [0-9]+
 
 /* POSIX says that a tag must be both an id and a C union member, but
@@ -165,16 +120,13 @@
 %%
 %{
   /* Nesting level of the current code in braces.  */
-  int braces_level IF_LINT (= 0);
+  int braces_level PACIFY_CC (= 0);
 
   /* Parent context state, when applicable.  */
-  int context_state IF_LINT (= 0);
-
-  /* Token type to return, when applicable.  */
-  int token_type IF_LINT (= 0);
+  int context_state PACIFY_CC (= 0);
 
   /* Location of most recent identifier, when applicable.  */
-  location id_loc IF_LINT (= empty_location);
+  location id_loc PACIFY_CC (= empty_location);
 
   /* Where containing code started, when applicable.  Its initial
      value is relevant only when yylex is invoked in the SC_EPILOGUE
@@ -183,7 +135,7 @@
 
   /* Where containing comment or string or character literal started,
      when applicable.  */
-  boundary token_start IF_LINT (= scanner_cursor);
+  boundary token_start PACIFY_CC (= scanner_cursor);
 %}
 
 
@@ -191,12 +143,12 @@
   | Scanning white space.  |
   `-----------------------*/
 
-<INITIAL,SC_AFTER_IDENTIFIER,SC_PRE_CODE>
+<INITIAL,SC_AFTER_IDENTIFIER,SC_BRACKETED_ID,SC_RETURN_BRACKETED_ID>
 {
   /* Comments and white space.  */
-  ","	       warn_at (*loc, _("stray `,' treated as white space"));
+  ","          warn_at (*loc, _("stray ',' treated as white space"));
   [ \f\n\t\v]  |
-  "//".*       ;
+  "//".*       continue;
   "/*" {
     token_start = loc->start;
     context_state = YY_START;
@@ -205,7 +157,7 @@
 
   /* #line directives are not documented, and may be withdrawn or
      modified in future versions of Bison.  */
-  ^"#line "{int}" \"".*"\"\n" {
+  ^"#line "{int}(" \"".*"\"")?"\n" {
     handle_syncline (yytext + sizeof "#line " - 1, *loc);
   }
 }
@@ -214,61 +166,72 @@
   /*----------------------------.
   | Scanning Bison directives.  |
   `----------------------------*/
+
+  /* For directives that are also command line options, the regex must be
+	"%..."
+     after "[-_]"s are removed, and the directive must match the --long
+     option name, with a single string argument.  Otherwise, add exceptions
+     to ../build-aux/cross-options.pl.  */
+
 <INITIAL>
 {
-  "%binary"               return PERCENT_NONASSOC;
-  "%debug"                return PERCENT_DEBUG;
-  "%default"[-_]"prec"    return PERCENT_DEFAULT_PREC;
-  "%define"               return PERCENT_DEFINE;
-  "%defines"              return PERCENT_DEFINES;
-  "%destructor"		  token_type = PERCENT_DESTRUCTOR; BEGIN SC_PRE_CODE;
-  "%dprec"		  return PERCENT_DPREC;
-  "%error"[-_]"verbose"   return PERCENT_ERROR_VERBOSE;
-  "%expect"               return PERCENT_EXPECT;
-  "%expect"[-_]"rr"	  return PERCENT_EXPECT_RR;
-  "%file-prefix"          return PERCENT_FILE_PREFIX;
+  "%binary"                         return PERCENT_NONASSOC;
+  "%code"                           return PERCENT_CODE;
+  "%debug"                          return PERCENT_DEBUG;
+  "%default"[-_]"prec"              return PERCENT_DEFAULT_PREC;
+  "%define"                         return PERCENT_DEFINE;
+  "%defines"                        return PERCENT_DEFINES;
+  "%destructor"                     return PERCENT_DESTRUCTOR;
+  "%dprec"                          return PERCENT_DPREC;
+  "%error"[-_]"verbose"             return PERCENT_ERROR_VERBOSE;
+  "%expect"                         return PERCENT_EXPECT;
+  "%expect"[-_]"rr"                 return PERCENT_EXPECT_RR;
+  "%file-prefix"                    return PERCENT_FILE_PREFIX;
   "%fixed"[-_]"output"[-_]"files"   return PERCENT_YACC;
-  "%initial-action"       token_type = PERCENT_INITIAL_ACTION; BEGIN SC_PRE_CODE;
-  "%glr-parser"           return PERCENT_GLR_PARSER;
-  "%left"                 return PERCENT_LEFT;
-  "%lex-param"		  token_type = PERCENT_LEX_PARAM; BEGIN SC_PRE_CODE;
-  "%locations"            return PERCENT_LOCATIONS;
-  "%merge"		  return PERCENT_MERGE;
-  "%name"[-_]"prefix"     return PERCENT_NAME_PREFIX;
-  "%no"[-_]"default"[-_]"prec"	return PERCENT_NO_DEFAULT_PREC;
-  "%no"[-_]"lines"        return PERCENT_NO_LINES;
-  "%nonassoc"             return PERCENT_NONASSOC;
-  "%nondeterministic-parser"   return PERCENT_NONDETERMINISTIC_PARSER;
-  "%nterm"                return PERCENT_NTERM;
-  "%output"               return PERCENT_OUTPUT;
-  "%parse-param"	  token_type = PERCENT_PARSE_PARAM; BEGIN SC_PRE_CODE;
-  "%prec"                 rule_length--; return PERCENT_PREC;
-  "%printer"              token_type = PERCENT_PRINTER; BEGIN SC_PRE_CODE;
-  "%pure"[-_]"parser"     return PERCENT_PURE_PARSER;
-  "%require"              return PERCENT_REQUIRE;
-  "%right"                return PERCENT_RIGHT;
-  "%skeleton"             return PERCENT_SKELETON;
-  "%start"                return PERCENT_START;
-  "%term"                 return PERCENT_TOKEN;
-  "%token"                return PERCENT_TOKEN;
-  "%token"[-_]"table"     return PERCENT_TOKEN_TABLE;
-  "%type"                 return PERCENT_TYPE;
-  "%union"		  token_type = PERCENT_UNION; BEGIN SC_PRE_CODE;
-  "%verbose"              return PERCENT_VERBOSE;
-  "%yacc"                 return PERCENT_YACC;
+  "%initial-action"                 return PERCENT_INITIAL_ACTION;
+  "%glr-parser"                     return PERCENT_GLR_PARSER;
+  "%language"                       return PERCENT_LANGUAGE;
+  "%left"                           return PERCENT_LEFT;
+  "%lex-param"                      return PERCENT_LEX_PARAM;
+  "%locations"                      return PERCENT_LOCATIONS;
+  "%merge"                          return PERCENT_MERGE;
+  "%name"[-_]"prefix"               return PERCENT_NAME_PREFIX;
+  "%no"[-_]"default"[-_]"prec"      return PERCENT_NO_DEFAULT_PREC;
+  "%no"[-_]"lines"                  return PERCENT_NO_LINES;
+  "%nonassoc"                       return PERCENT_NONASSOC;
+  "%nondeterministic-parser"        return PERCENT_NONDETERMINISTIC_PARSER;
+  "%nterm"                          return PERCENT_NTERM;
+  "%output"                         return PERCENT_OUTPUT;
+  "%parse-param"                    return PERCENT_PARSE_PARAM;
+  "%prec"                           return PERCENT_PREC;
+  "%printer"                        return PERCENT_PRINTER;
+  "%pure"[-_]"parser"               return PERCENT_PURE_PARSER;
+  "%require"                        return PERCENT_REQUIRE;
+  "%right"                          return PERCENT_RIGHT;
+  "%skeleton"                       return PERCENT_SKELETON;
+  "%start"                          return PERCENT_START;
+  "%term"                           return PERCENT_TOKEN;
+  "%token"                          return PERCENT_TOKEN;
+  "%token"[-_]"table"               return PERCENT_TOKEN_TABLE;
+  "%type"                           return PERCENT_TYPE;
+  "%union"                          return PERCENT_UNION;
+  "%verbose"                        return PERCENT_VERBOSE;
+  "%yacc"                           return PERCENT_YACC;
 
-  {directive} {
+  "%"{id}|"%"{notletter}([[:graph:]])+ {
     complain_at (*loc, _("invalid directive: %s"), quote (yytext));
   }
 
   "="                     return EQUAL;
-  "|"                     rule_length = 0; return PIPE;
+  "|"                     return PIPE;
   ";"                     return SEMICOLON;
+  "<*>"                   return TYPE_TAG_ANY;
+  "<>"                    return TYPE_TAG_NONE;
 
   {id} {
-    val->symbol = symbol_get (yytext, *loc);
+    val->uniqstr = uniqstr_new (yytext);
     id_loc = *loc;
-    increment_rule_length (*loc);
+    bracketed_id_str = NULL;
     BEGIN SC_AFTER_IDENTIFIER;
   }
 
@@ -281,8 +244,14 @@
     return INT;
   }
 
-  /* Characters.  We don't check there is only one.  */
-  "'"	      STRING_GROW; token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
+  /* Identifiers may not start with a digit.  Yet, don't silently
+     accept "1FOO" as "1 FOO".  */
+  {int}{id} {
+    complain_at (*loc, _("invalid identifier: %s"), quote (yytext));
+  }
+
+  /* Characters.  */
+  "'"	      token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
 
   /* Strings. */
   "\""	      token_start = loc->start; BEGIN SC_ESCAPED_STRING;
@@ -292,10 +261,7 @@
 
   /* Code in between braces.  */
   "{" {
-    if (current_rule && current_rule->action)
-      grammar_midrule_action ();
     STRING_GROW;
-    token_type = BRACED_CODE;
     braces_level = 0;
     code_start = loc->start;
     BEGIN SC_BRACED_CODE;
@@ -317,8 +283,17 @@
     return PERCENT_PERCENT;
   }
 
-  . {
-    complain_at (*loc, _("invalid character: %s"), quote (yytext));
+  "[" {
+    bracketed_id_str = NULL;
+    bracketed_id_start = loc->start;
+    bracketed_id_context_state = YY_START;
+    BEGIN SC_BRACKETED_ID;
+  }
+
+  [^\[%A-Za-z0-9_<>{}\"\'*;|=/, \f\n\t\v]+|. {
+    complain_at (*loc, "%s: %s",
+                 ngettext ("invalid character", "invalid characters", yyleng),
+                 quote_mem (yytext, yyleng));
   }
 
   <<EOF>> {
@@ -334,41 +309,113 @@
 
 <SC_AFTER_IDENTIFIER>
 {
+  "[" {
+    if (bracketed_id_str)
+      {
+	ROLLBACK_CURRENT_TOKEN;
+	BEGIN SC_RETURN_BRACKETED_ID;
+	*loc = id_loc;
+	return ID;
+      }
+    else
+      {
+	bracketed_id_start = loc->start;
+	bracketed_id_context_state = YY_START;
+	BEGIN SC_BRACKETED_ID;
+      }
+  }
   ":" {
-    rule_length = 0;
+    BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
-    BEGIN INITIAL;
     return ID_COLON;
   }
   . {
-    scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0);
-    yyless (0);
+    ROLLBACK_CURRENT_TOKEN;
+    BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
-    BEGIN INITIAL;
     return ID;
   }
   <<EOF>> {
+    BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
-    BEGIN INITIAL;
     return ID;
   }
 }
 
+  /*--------------------------------.
+  | Scanning bracketed identifiers. |
+  `--------------------------------*/
+
+<SC_BRACKETED_ID>
+{
+  {id} {
+    if (bracketed_id_str)
+      {
+	complain_at (*loc, _("unexpected identifier in bracketed name: %s"),
+		     quote (yytext));
+      }
+    else
+      {
+	bracketed_id_str = uniqstr_new (yytext);
+	bracketed_id_loc = *loc;
+      }
+  }
+  "]" {
+    BEGIN bracketed_id_context_state;
+    if (bracketed_id_str)
+      {
+	if (INITIAL == bracketed_id_context_state)
+	  {
+	    val->uniqstr = bracketed_id_str;
+	    bracketed_id_str = 0;
+	    *loc = bracketed_id_loc;
+	    return BRACKETED_ID;
+	  }
+      }
+    else
+      complain_at (*loc, _("an identifier expected"));
+  }
+
+  [^\].A-Za-z0-9_/ \f\n\t\v]+|. {
+    complain_at (*loc, "%s: %s",
+                 ngettext ("invalid character in bracketed name",
+                           "invalid characters in bracketed name", yyleng),
+                 quote_mem (yytext, yyleng));
+  }
+
+  <<EOF>> {
+    BEGIN bracketed_id_context_state;
+    unexpected_eof (bracketed_id_start, "]");
+  }
+}
+
+<SC_RETURN_BRACKETED_ID>
+{
+  . {
+    ROLLBACK_CURRENT_TOKEN;
+    val->uniqstr = bracketed_id_str;
+    bracketed_id_str = 0;
+    *loc = bracketed_id_loc;
+    BEGIN INITIAL;
+    return BRACKETED_ID;
+  }
+}
+
 
   /*---------------------------------------------------------------.
-  | Scanning a Yacc comment.  The initial `/ *' is already eaten.  |
+  | Scanning a Yacc comment.  The initial '/ *' is already eaten.  |
   `---------------------------------------------------------------*/
 
 <SC_YACC_COMMENT>
 {
   "*/"     BEGIN context_state;
-  .|\n	   ;
+  .|\n	   continue;
   <<EOF>>  unexpected_eof (token_start, "*/"); BEGIN context_state;
 }
 
 
   /*------------------------------------------------------------.
-  | Scanning a C comment.  The initial `/ *' is already eaten.  |
+  | Scanning a C comment.  The initial '/ *' is already eaten.  |
   `------------------------------------------------------------*/
 
 <SC_COMMENT>
@@ -379,7 +426,7 @@
 
 
   /*--------------------------------------------------------------.
-  | Scanning a line comment.  The initial `//' is already eaten.  |
+  | Scanning a line comment.  The initial '//' is already eaten.  |
   `--------------------------------------------------------------*/
 
 <SC_LINE_COMMENT>
@@ -397,16 +444,23 @@
 
 <SC_ESCAPED_STRING>
 {
-  "\"" {
+  "\""|"\n" {
+    if (yytext[0] == '\n')
+      unexpected_newline (token_start, "\"");
     STRING_FINISH;
     loc->start = token_start;
     val->chars = last_string;
-    increment_rule_length (*loc);
     BEGIN INITIAL;
     return STRING;
   }
-  \n		unexpected_newline (token_start, "\"");	BEGIN INITIAL;
-  <<EOF>>	unexpected_eof (token_start, "\"");	BEGIN INITIAL;
+  <<EOF>> {
+    unexpected_eof (token_start, "\"");
+    STRING_FINISH;
+    loc->start = token_start;
+    val->chars = last_string;
+    BEGIN INITIAL;
+    return STRING;
+  }
 }
 
   /*----------------------------------------------------------.
@@ -416,24 +470,47 @@
 
 <SC_ESCAPED_CHARACTER>
 {
-  "'" {
-    unsigned char last_string_1;
-    STRING_GROW;
+  "'"|"\n" {
     STRING_FINISH;
     loc->start = token_start;
-    val->symbol = symbol_get (quotearg_style (escape_quoting_style,
-					      last_string),
-			      *loc);
-    symbol_class_set (val->symbol, token_sym, *loc, false);
-    last_string_1 = last_string[1];
-    symbol_user_token_number_set (val->symbol, last_string_1, *loc);
+    val->character = last_string[0];
+    {
+      /* FIXME: Eventually, make these errors.  */
+      if (last_string[0] == '\0')
+        {
+          warn_at (*loc, _("empty character literal"));
+          /* '\0' seems dangerous even if we are about to complain.  */
+          val->character = '\'';
+        }
+      else if (last_string[1] != '\0')
+        warn_at (*loc, _("extra characters in character literal"));
+    }
+    if (yytext[0] == '\n')
+      unexpected_newline (token_start, "'");
     STRING_FREE;
-    increment_rule_length (*loc);
     BEGIN INITIAL;
-    return ID;
+    return CHAR;
   }
-  \n		unexpected_newline (token_start, "'");	BEGIN INITIAL;
-  <<EOF>>	unexpected_eof (token_start, "'");	BEGIN INITIAL;
+  <<EOF>> {
+    STRING_FINISH;
+    loc->start = token_start;
+    val->character = last_string[0];
+    {
+      /* FIXME: Eventually, make these errors.  */
+      if (last_string[0] == '\0')
+        {
+          warn_at (*loc, _("empty character literal"));
+          /* '\0' seems dangerous even if we are about to complain.  */
+          val->character = '\'';
+        }
+      else if (last_string[1] != '\0')
+        warn_at (*loc, _("extra characters in character literal"));
+    }
+    unexpected_eof (token_start, "'");
+    STRING_FREE;
+    BEGIN INITIAL;
+    return CHAR;
+  }
 }
 
 <SC_ESCAPED_CHARACTER,SC_ESCAPED_STRING>
@@ -450,10 +527,9 @@
 {
   \\[0-7]{1,3} {
     unsigned long int c = strtoul (yytext + 1, NULL, 8);
-    if (UCHAR_MAX < c)
-      complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
-    else if (! c)
-      complain_at (*loc, _("invalid null character: %s"), quote (yytext));
+    if (!c || UCHAR_MAX < c)
+      complain_at (*loc, _("invalid number after \\-escape: %s"),
+                   yytext+1);
     else
       obstack_1grow (&obstack_for_string, c);
   }
@@ -461,10 +537,9 @@
   \\x[0-9abcdefABCDEF]+ {
     verify (UCHAR_MAX < ULONG_MAX);
     unsigned long int c = strtoul (yytext + 2, NULL, 16);
-    if (UCHAR_MAX < c)
-      complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
-    else if (! c)
-      complain_at (*loc, _("invalid null character: %s"), quote (yytext));
+    if (!c || UCHAR_MAX < c)
+      complain_at (*loc, _("invalid number after \\-escape: %s"),
+                   yytext+1);
     else
       obstack_1grow (&obstack_for_string, c);
   }
@@ -482,16 +557,20 @@
 
   \\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} {
     int c = convert_ucn_to_byte (yytext);
-    if (c < 0)
-      complain_at (*loc, _("invalid escape sequence: %s"), quote (yytext));
-    else if (! c)
-      complain_at (*loc, _("invalid null character: %s"), quote (yytext));
+    if (c <= 0)
+      complain_at (*loc, _("invalid number after \\-escape: %s"),
+                   yytext+1);
     else
       obstack_1grow (&obstack_for_string, c);
   }
   \\(.|\n)	{
-    complain_at (*loc, _("unrecognized escape sequence: %s"), quote (yytext));
-    STRING_GROW;
+    char const *p = yytext + 1;
+    /* Quote only if escaping won't make the character visible.  */
+    if (c_isspace ((unsigned char) *p) && c_isprint ((unsigned char) *p))
+      p = quote (p);
+    else
+      p = quotearg_style_mem (escape_quoting_style, p, 1);
+    complain_at (*loc, _("invalid character after \\-escape: %s"), p);
   }
 }
 
@@ -501,7 +580,7 @@
 
 <SC_CHARACTER,SC_STRING>
 {
-  {splice}|\\{splice}[^\n$@\[\]]	STRING_GROW;
+  {splice}|\\{splice}[^\n\[\]]	STRING_GROW;
 }
 
 <SC_CHARACTER>
@@ -551,101 +630,42 @@
 }
 
 
-  /*---------------------------------------------------------------.
-  | Scanning after %union etc., possibly followed by white space.  |
-  | For %union only, allow arbitrary C code to appear before the   |
-  | following brace, as an extension to POSIX.			   |
-  `---------------------------------------------------------------*/
 
-<SC_PRE_CODE>
-{
-  . {
-    bool valid = yytext[0] == '{' || token_type == PERCENT_UNION;
-    scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0);
-    yyless (0);
-
-    if (valid)
-      {
-	braces_level = -1;
-	code_start = loc->start;
-	BEGIN SC_BRACED_CODE;
-      }
-    else
-      {
-	complain_at (*loc, _("missing `{' in %s"),
-		     token_name (token_type));
-	obstack_sgrow (&obstack_for_string, "{}");
-	STRING_FINISH;
-	val->chars = last_string;
-	BEGIN INITIAL;
-	return token_type;
-      }
-  }
-
-  <<EOF>>  unexpected_eof (scanner_cursor, "{}"); BEGIN INITIAL;
-}
-
-
-  /*---------------------------------------------------------------.
-  | Scanning some code in braces (%union and actions). The initial |
-  | "{" is already eaten.                                          |
-  `---------------------------------------------------------------*/
+  /*-----------------------------------------------------------.
+  | Scanning some code in braces (actions). The initial "{" is |
+  | already eaten.                                             |
+  `-----------------------------------------------------------*/
 
 <SC_BRACED_CODE>
 {
   "{"|"<"{splice}"%"  STRING_GROW; braces_level++;
   "%"{splice}">"      STRING_GROW; braces_level--;
   "}" {
-    bool outer_brace = --braces_level < 0;
-
-    /* As an undocumented Bison extension, append `;' before the last
-       brace in braced code, so that the user code can omit trailing
-       `;'.  But do not append `;' if emulating Yacc, since Yacc does
-       not append one.
-
-       FIXME: Bison should warn if a semicolon seems to be necessary
-       here, and should omit the semicolon if it seems unnecessary
-       (e.g., after ';', '{', or '}', each followed by comments or
-       white space).  Such a warning shouldn't depend on --yacc; it
-       should depend on a new --pedantic option, which would cause
-       Bison to warn if it detects an extension to POSIX.  --pedantic
-       should also diagnose other Bison extensions like %yacc.
-       Perhaps there should also be a GCC-style --pedantic-errors
-       option, so that such warnings are diagnosed as errors.  */
-    if (outer_brace && token_type == BRACED_CODE && ! yacc_flag)
-      obstack_1grow (&obstack_for_string, ';');
-
     obstack_1grow (&obstack_for_string, '}');
 
-    if (outer_brace)
+    --braces_level;
+    if (braces_level < 0)
       {
 	STRING_FINISH;
 	loc->start = code_start;
-	val->chars = last_string;
-	increment_rule_length (*loc);
-	last_braced_code_loc = *loc;
+	val->code = last_string;
 	BEGIN INITIAL;
-	return token_type;
+	return BRACED_CODE;
       }
   }
 
-  /* Tokenize `<<%' correctly (as `<<' `%') rather than incorrrectly
-     (as `<' `<%').  */
+  /* Tokenize '<<%' correctly (as '<<' '%') rather than incorrrectly
+     (as '<' '<%').  */
   "<"{splice}"<"  STRING_GROW;
 
-  "$"("<"{tag}">")?(-?[0-9]+|"$")  handle_dollar (token_type, yytext, *loc);
-  "@"(-?[0-9]+|"$")		   handle_at (token_type, yytext, *loc);
-
-  "$"  {
-    warn_at (*loc, _("stray `$'"));
-    obstack_sgrow (&obstack_for_string, "$][");
+  <<EOF>> {
+    unexpected_eof (code_start, "}");
+    STRING_FINISH;
+    loc->start = code_start;
+    val->code = last_string;
+    BEGIN INITIAL;
+    return BRACED_CODE;
   }
-  "@"  {
-    warn_at (*loc, _("stray `@'"));
-    obstack_sgrow (&obstack_for_string, "@@");
-  }
-
-  <<EOF>>  unexpected_eof (code_start, "}"); BEGIN INITIAL;
 }
 
 
@@ -663,7 +683,14 @@
     return PROLOGUE;
   }
 
-  <<EOF>>  unexpected_eof (code_start, "%}"); BEGIN INITIAL;
+  <<EOF>> {
+    unexpected_eof (code_start, "%}");
+    STRING_FINISH;
+    loc->start = code_start;
+    val->chars = last_string;
+    BEGIN INITIAL;
+    return PROLOGUE;
+  }
 }
 
 
@@ -684,19 +711,6 @@
 }
 
 
-  /*-----------------------------------------.
-  | Escape M4 quoting characters in C code.  |
-  `-----------------------------------------*/
-
-<SC_COMMENT,SC_LINE_COMMENT,SC_STRING,SC_CHARACTER,SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE>
-{
-  \$	obstack_sgrow (&obstack_for_string, "$][");
-  \@	obstack_sgrow (&obstack_for_string, "@@");
-  \[	obstack_sgrow (&obstack_for_string, "@{");
-  \]	obstack_sgrow (&obstack_for_string, "@}");
-}
-
-
   /*-----------------------------------------------------.
   | By default, grow the string obstack with the input.  |
   `-----------------------------------------------------*/
@@ -706,79 +720,6 @@
 
 %%
 
-/* Keeps track of the maximum number of semantic values to the left of
-   a handle (those referenced by $0, $-1, etc.) are required by the
-   semantic actions of this grammar. */
-int max_left_semantic_context = 0;
-
-/* If BUF is null, add BUFSIZE (which in this case must be less than
-   INT_MAX) to COLUMN; otherwise, add mbsnwidth (BUF, BUFSIZE, 0) to
-   COLUMN.  If an overflow occurs, or might occur but is undetectable,
-   return INT_MAX.  Assume COLUMN is nonnegative.  */
-
-static inline int
-add_column_width (int column, char const *buf, size_t bufsize)
-{
-  size_t width;
-  unsigned int remaining_columns = INT_MAX - column;
-
-  if (buf)
-    {
-      if (INT_MAX / 2 <= bufsize)
-	return INT_MAX;
-      width = mbsnwidth (buf, bufsize, 0);
-    }
-  else
-    width = bufsize;
-
-  return width <= remaining_columns ? column + width : INT_MAX;
-}
-
-/* Set *LOC and adjust scanner cursor to account for token TOKEN of
-   size SIZE.  */
-
-static void
-adjust_location (location *loc, char const *token, size_t size)
-{
-  int line = scanner_cursor.line;
-  int column = scanner_cursor.column;
-  char const *p0 = token;
-  char const *p = token;
-  char const *lim = token + size;
-
-  loc->start = scanner_cursor;
-
-  for (p = token; p < lim; p++)
-    switch (*p)
-      {
-      case '\n':
-	line += line < INT_MAX;
-	column = 1;
-	p0 = p + 1;
-	break;
-
-      case '\t':
-	column = add_column_width (column, p0, p - p0);
-	column = add_column_width (column, NULL, 8 - ((column - 1) & 7));
-	p0 = p + 1;
-	break;
-
-      default:
-	break;
-      }
-
-  scanner_cursor.line = line;
-  scanner_cursor.column = column = add_column_width (column, p0, p - p0);
-
-  loc->end = scanner_cursor;
-
-  if (line == INT_MAX && loc->start.line != INT_MAX)
-    warn_at (*loc, _("line number overflow"));
-  if (column == INT_MAX && loc->start.column != INT_MAX)
-    warn_at (*loc, _("column number overflow"));
-}
-
-
 /* Read bytes from FP into buffer BUF of size SIZE.  Return the
    number of bytes read.  Remove '\r' from input, treating \r\n
    and isolated \r as \n.  */
@@ -826,173 +767,6 @@
 }
 
 
-/*------------------------------------------------------------------.
-| TEXT is pointing to a wannabee semantic value (i.e., a `$').      |
-|                                                                   |
-| Possible inputs: $[<TYPENAME>]($|integer)                         |
-|                                                                   |
-| Output to OBSTACK_FOR_STRING a reference to this semantic value.  |
-`------------------------------------------------------------------*/
-
-static inline bool
-handle_action_dollar (char *text, location loc)
-{
-  const char *type_name = NULL;
-  char *cp = text + 1;
-
-  if (! current_rule)
-    return false;
-
-  /* Get the type name if explicit. */
-  if (*cp == '<')
-    {
-      type_name = ++cp;
-      while (*cp != '>')
-	++cp;
-      *cp = '\0';
-      ++cp;
-    }
-
-  if (*cp == '$')
-    {
-      if (!type_name)
-	type_name = symbol_list_n_type_name_get (current_rule, loc, 0);
-      if (!type_name && typed)
-	complain_at (loc, _("$$ of `%s' has no declared type"),
-		     current_rule->sym->tag);
-      if (!type_name)
-	type_name = "";
-      obstack_fgrow1 (&obstack_for_string,
-		      "]b4_lhs_value([%s])[", type_name);
-      current_rule->used = true;
-    }
-  else
-    {
-      long int num = strtol (cp, NULL, 10);
-
-      if (1 - INT_MAX + rule_length <= num && num <= rule_length)
-	{
-	  int n = num;
-	  if (max_left_semantic_context < 1 - n)
-	    max_left_semantic_context = 1 - n;
-	  if (!type_name && 0 < n)
-	    type_name = symbol_list_n_type_name_get (current_rule, loc, n);
-	  if (!type_name && typed)
-	    complain_at (loc, _("$%d of `%s' has no declared type"),
-			 n, current_rule->sym->tag);
-	  if (!type_name)
-	    type_name = "";
-	  obstack_fgrow3 (&obstack_for_string,
-			  "]b4_rhs_value(%d, %d, [%s])[",
-			  rule_length, n, type_name);
-	  symbol_list_n_used_set (current_rule, n, true);
-	}
-      else
-	complain_at (loc, _("integer out of range: %s"), quote (text));
-    }
-
-  return true;
-}
-
-
-/*----------------------------------------------------------------.
-| Map `$?' onto the proper M4 symbol, depending on its TOKEN_TYPE |
-| (are we in an action?).                                         |
-`----------------------------------------------------------------*/
-
-static void
-handle_dollar (int token_type, char *text, location loc)
-{
-  switch (token_type)
-    {
-    case BRACED_CODE:
-      if (handle_action_dollar (text, loc))
-	return;
-      break;
-
-    case PERCENT_DESTRUCTOR:
-    case PERCENT_INITIAL_ACTION:
-    case PERCENT_PRINTER:
-      if (text[1] == '$')
-	{
-	  obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar[");
-	  return;
-	}
-      break;
-
-    default:
-      break;
-    }
-
-  complain_at (loc, _("invalid value: %s"), quote (text));
-}
-
-
-/*------------------------------------------------------.
-| TEXT is a location token (i.e., a `@...').  Output to |
-| OBSTACK_FOR_STRING a reference to this location.      |
-`------------------------------------------------------*/
-
-static inline bool
-handle_action_at (char *text, location loc)
-{
-  char *cp = text + 1;
-  locations_flag = true;
-
-  if (! current_rule)
-    return false;
-
-  if (*cp == '$')
-    obstack_sgrow (&obstack_for_string, "]b4_lhs_location[");
-  else
-    {
-      long int num = strtol (cp, NULL, 10);
-
-      if (1 - INT_MAX + rule_length <= num && num <= rule_length)
-	{
-	  int n = num;
-	  obstack_fgrow2 (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
-			  rule_length, n);
-	}
-      else
-	complain_at (loc, _("integer out of range: %s"), quote (text));
-    }
-
-  return true;
-}
-
-
-/*----------------------------------------------------------------.
-| Map `@?' onto the proper M4 symbol, depending on its TOKEN_TYPE |
-| (are we in an action?).                                         |
-`----------------------------------------------------------------*/
-
-static void
-handle_at (int token_type, char *text, location loc)
-{
-  switch (token_type)
-    {
-    case BRACED_CODE:
-      handle_action_at (text, loc);
-      return;
-
-    case PERCENT_INITIAL_ACTION:
-    case PERCENT_DESTRUCTOR:
-    case PERCENT_PRINTER:
-      if (text[1] == '$')
-	{
-	  obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
-	  return;
-	}
-      break;
-
-    default:
-      break;
-    }
-
-  complain_at (loc, _("invalid value: %s"), quote (text));
-}
-
 
 /*------------------------------------------------------.
 | Scan NUMBER for a base-BASE integer at location LOC.  |
@@ -1071,36 +845,28 @@
 }
 
 
-/*----------------------------------------------------------------.
-| Handle `#line INT "FILE"'.  ARGS has already skipped `#line '.  |
-`----------------------------------------------------------------*/
+/*---------------------------------------------------------------------.
+| Handle '#line INT( "FILE")?\n'.  ARGS has already skipped '#line '.  |
+`---------------------------------------------------------------------*/
 
 static void
 handle_syncline (char *args, location loc)
 {
-  char *after_num;
-  unsigned long int lineno = strtoul (args, &after_num, 10);
-  char *file = strchr (after_num, '"') + 1;
-  *strchr (file, '"') = '\0';
+  char *file;
+  unsigned long int lineno = strtoul (args, &file, 10);
   if (INT_MAX <= lineno)
     {
       warn_at (loc, _("line number overflow"));
       lineno = INT_MAX;
     }
-  scanner_cursor.file = current_file = uniqstr_new (file);
-  scanner_cursor.line = lineno;
-  scanner_cursor.column = 1;
-}
 
-
-/*---------------------------------.
-| Report a rule that is too long.  |
-`---------------------------------*/
-
-static void
-rule_length_overflow (location loc)
-{
-  fatal_at (loc, _("rule is too long"));
+  file = mbschr (file, '"');
+  if (file)
+    {
+      *mbschr (file + 1, '"') = '\0';
+      current_file = uniqstr_new (file + 1);
+    }
+  boundary_set (&scanner_cursor, current_file, lineno, 1);
 }
 
 
@@ -1116,6 +882,10 @@
   location loc;
   loc.start = start;
   loc.end = scanner_cursor;
+  token_end = quote (token_end);
+  /* Instead of '\'', display "'".  */
+  if (!strcmp (token_end, "'\\''"))
+    token_end = "\"'\"";
   complain_at (loc, _(msgid), token_end);
 }
 
@@ -1128,7 +898,7 @@
 static void
 unexpected_eof (boundary start, char const *token_end)
 {
-  unexpected_end (start, N_("missing `%s' at end of file"), token_end);
+  unexpected_end (start, N_("missing %s at end of file"), token_end);
 }
 
 
@@ -1139,7 +909,7 @@
 static void
 unexpected_newline (boundary start, char const *token_end)
 {
-  unexpected_end (start, N_("missing `%s' at end of line"), token_end);
+  unexpected_end (start, N_("missing %s at end of line"), token_end);
 }
 
 
@@ -1148,7 +918,7 @@
 `-------------------------*/
 
 void
-scanner_initialize (void)
+gram_scanner_initialize (void)
 {
   obstack_init (&obstack_for_string);
 }
@@ -1159,9 +929,9 @@
 `-----------------------------------------------*/
 
 void
-scanner_free (void)
+gram_scanner_free (void)
 {
   obstack_free (&obstack_for_string, 0);
   /* Reclaim Flex's buffers.  */
-  yy_delete_buffer (YY_CURRENT_BUFFER);
+  yylex_destroy ();
 }
diff --git a/src/scan-skel-c.c b/src/scan-skel-c.c
index 1a047cf..fb1aea6 100644
--- a/src/scan-skel-c.c
+++ b/src/scan-skel-c.c
@@ -1,2 +1,3 @@
 #include <config.h>
+#include "system.h"
 #include "scan-skel.c"
diff --git a/src/scan-skel.c b/src/scan-skel.c
index f2dd18c..9841730 100644
--- a/src/scan-skel.c
+++ b/src/scan-skel.c
@@ -6,10 +6,37 @@
 
 /* A lexical scanner generated by flex */
 
+/* %not-for-header */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+#define yy_create_buffer skel__create_buffer
+#define yy_delete_buffer skel__delete_buffer
+#define yy_flex_debug skel__flex_debug
+#define yy_init_buffer skel__init_buffer
+#define yy_flush_buffer skel__flush_buffer
+#define yy_load_buffer_state skel__load_buffer_state
+#define yy_switch_to_buffer skel__switch_to_buffer
+#define yyin skel_in
+#define yyleng skel_leng
+#define yylex skel_lex
+#define yylineno skel_lineno
+#define yyout skel_out
+#define yyrestart skel_restart
+#define yytext skel_text
+#define yywrap skel_wrap
+#define yyalloc skel_alloc
+#define yyrealloc skel_realloc
+#define yyfree skel_free
+
+/* %endif */
+/* %endif */
+/* %ok-for-header */
+
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 31
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -47,7 +74,15 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
 #include <inttypes.h>
 typedef int8_t flex_int8_t;
 typedef uint8_t flex_uint8_t;
@@ -62,7 +97,6 @@
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -93,6 +127,8 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 /* %endif */
@@ -107,11 +143,12 @@
 
 #else	/* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif	/* __STDC__ */
+#endif	/* defined (__STDC__) */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -169,13 +206,22 @@
 #define YY_BUF_SIZE 16384
 #endif
 
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
 #define YY_TYPEDEF_YY_BUFFER_STATE
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
 /* %if-not-reentrant */
-extern int skel_leng;
+extern yy_size_t skel_leng;
 /* %endif */
 
 /* %if-c-only */
@@ -206,16 +252,6 @@
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
-#endif
-
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -238,7 +274,7 @@
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	int yy_n_chars;
+	yy_size_t yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -322,12 +358,12 @@
 
 /* yy_hold_char holds the character lost when skel_text is formed. */
 static char yy_hold_char;
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int skel_leng;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t skel_leng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1;		/* whether we need to initialize */
+static int yy_init = 0;		/* whether we need to initialize */
 static int yy_start = 0;	/* start state number */
 
 /* Flag which is used to allow skel_wrap()'s to do buffer switches
@@ -354,7 +390,7 @@
 
 YY_BUFFER_STATE skel__scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE skel__scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE skel__scan_bytes (yyconst char *bytes,int len  );
+YY_BUFFER_STATE skel__scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 /* %endif */
 
@@ -389,7 +425,7 @@
 /* %% [1.0] skel_text/skel_in/skel_out/yy_state_type/skel_lineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define skel_wrap(n) 1
+#define skel_wrap() 1
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
@@ -429,8 +465,8 @@
 	(yy_c_buf_p) = yy_cp;
 
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 13
-#define YY_END_OF_BUFFER 14
+#define YY_NUM_RULES 22
+#define YY_END_OF_BUFFER 23
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -438,33 +474,31 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[69] =
+static yyconst flex_int16_t yy_accept[45] =
     {   0,
-        0,    0,   14,   12,   11,   10,   12,   10,    2,   10,
-       10,    3,    4,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-        6,    5,   10,   10,   10,   10,   10,   10,    1,    0,
-       10,   10,   10,   10,   10,   10,   10,   10,    7,   10,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   10,   10,    9,    8,    0
+        0,    0,    0,    0,    0,    0,   23,   11,   10,    9,
+       12,   19,   21,   20,   20,   11,    9,    5,    1,    9,
+        4,    9,    2,    3,   12,   19,   17,   18,   13,   16,
+       14,   15,    8,    9,    9,    9,    9,    9,    9,    9,
+        9,    7,    6,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
     {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    1,    1,    1,    1,    1,    1,    4,
+        5,    1,    1,    5,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    6,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    3,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    4,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    5,    1,    6,    1,    1,    7,
+        1,    1,    1,    1,    7,    8,    7,    7,    7,    7,
 
-        8,    9,    1,   10,   11,    1,    1,   12,   13,   14,
-       15,   16,    1,   17,   18,   19,   20,    1,    1,   21,
-        1,    1,   22,    1,   23,    1,    1,    1,    1,    1,
+        9,   10,    7,    7,   11,    7,    7,   12,    7,   13,
+       14,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,   15,    1,   16,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -481,79 +515,66 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[24] =
+static yyconst flex_int32_t yy_meta[17] =
     {   0,
-        1,    2,    1,    3,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1
+        1,    1,    2,    3,    1,    4,    1,    5,    1,    1,
+        1,    1,    1,    1,    5,    5
     } ;
 
-static yyconst flex_int16_t yy_base[74] =
+static yyconst flex_int16_t yy_base[53] =
     {   0,
-        0,    1,  107,    0,  138,    2,    0,    4,  138,   24,
-       39,  138,  138,    1,   63,   45,    0,    2,    3,    9,
-        5,   18,   22,   28,   11,   21,   33,   38,   34,   32,
-      138,  138,   49,   46,   59,   54,   30,   81,  138,    8,
-       58,   56,   47,   65,   61,   69,   68,   66,  138,   78,
-       79,   77,   80,   87,   88,   91,   95,   89,   90,   97,
-      100,  104,  106,  112,  114,  138,  138,  138,  125,    0,
-      128,  131,  134
+        0,    1,   60,   26,    6,    8,   29,    0,  105,   11,
+        0,   25,  105,  105,  105,    0,    0,  105,  105,   41,
+      105,   46,  105,  105,    0,  105,  105,  105,  105,  105,
+      105,  105,  105,   60,    4,   23,   25,   28,   43,   38,
+       57,  105,  105,  105,   71,   76,   81,   86,   91,   96,
+        0,  101
     } ;
 
-static yyconst flex_int16_t yy_def[74] =
+static yyconst flex_int16_t yy_def[53] =
     {   0,
-       69,   69,   68,   70,   68,   71,   70,   71,   68,   71,
-       10,   68,   68,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       68,   68,   10,   10,   72,   10,   10,   72,   68,   73,
-       10,   10,   10,   10,   10,   10,   10,   10,   68,   10,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   10,   10,   68,   68,    0,   68,   68,
-       68,   68,   68
+       45,   45,   46,   46,   47,   47,   44,   48,   44,   44,
+       49,   50,   44,   44,   44,   48,   51,   44,   44,   52,
+       44,   44,   44,   44,   49,   44,   44,   44,   44,   44,
+       44,   44,   44,   52,   34,   34,   34,   34,   34,   34,
+       34,   44,   44,    0,   44,   44,   44,   44,   44,   44,
+       44,   44
     } ;
 
-static yyconst flex_int16_t yy_nxt[162] =
+static yyconst flex_int16_t yy_nxt[122] =
     {   0,
-        7,    5,    5,    6,    6,    9,   22,   68,   10,   39,
-        8,    8,    8,    8,   23,    8,   11,   18,   21,    8,
-       25,    8,   24,   12,   13,   68,   68,   68,    8,   27,
-       29,    8,    8,   26,   14,   28,   31,   30,    8,   34,
-       43,   32,    8,    8,    8,   68,   68,   15,    8,    8,
-       16,   35,   33,   36,   37,   20,    8,    8,   17,    8,
-       39,   45,   40,   41,    8,   44,    8,   46,    8,   42,
-       47,    8,   49,   19,   50,    8,    8,   48,    8,    8,
-       40,   40,   39,   51,   40,   52,   53,    8,    8,    8,
-        8,   56,   57,   54,   60,   61,   55,    8,    8,    8,
+       17,   44,    9,    9,   44,   10,   10,   14,   15,   14,
+       15,   17,   17,   18,   37,   17,   19,   20,   21,   20,
+       20,   20,   20,   20,   22,   23,   24,   27,   44,   28,
+       29,   12,   30,   20,   38,   20,   40,   39,   20,   31,
+       32,   17,   17,   42,   33,   17,   17,   17,   20,   33,
+       17,   41,   20,   20,   20,   34,   20,   35,   20,   20,
+       17,   17,   43,   33,   17,   12,   44,   20,   44,   44,
+       36,    8,    8,    8,    8,    8,   11,   11,   11,   11,
+       11,   13,   13,   13,   13,   13,   16,   44,   16,   44,
+       16,   25,   25,   25,   44,   25,   26,   26,   26,   26,
 
-        8,    8,   40,   40,   58,    8,   68,    8,   59,   62,
-        8,   64,   63,   65,    8,   66,    8,   67,   68,   68,
-       68,   68,    8,   68,    8,    4,    4,    4,    8,   68,
-        8,   38,   38,   38,   40,   40,   40,    3,   68,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       68
+       26,   20,   44,   20,    7,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       44
     } ;
 
-static yyconst flex_int16_t yy_chk[162] =
+static yyconst flex_int16_t yy_chk[122] =
     {   0,
-       70,    1,    2,    1,    2,    6,   18,    8,    6,   40,
-       17,   14,   18,   19,   19,   21,    6,   14,   17,   20,
-       21,   25,   20,    6,    6,    8,    8,   10,   22,   23,
-       25,   26,   23,   22,   10,   24,   27,   26,   24,   30,
-       37,   28,   30,   27,   29,   10,   10,   11,   28,   11,
-       11,   33,   29,   33,   34,   16,   34,   43,   11,   33,
-       35,   42,   35,   36,   36,   41,   42,   43,   41,   36,
-       44,   45,   46,   15,   47,   44,   48,   45,   47,   46,
-       35,   35,   38,   48,   38,   50,   51,   52,   50,   51,
-       53,   54,   55,   52,   58,   59,   53,   54,   55,   58,
+       51,    0,    1,    2,    0,    1,    2,    5,    5,    6,
+        6,   10,   10,   10,   35,   10,   10,   10,   10,   10,
+       10,   10,   10,   10,   10,   10,   10,   12,    7,   12,
+       12,    4,   12,   36,   36,   37,   38,   37,   38,   12,
+       12,   20,   20,   40,   20,   20,   22,   22,   40,   22,
+       22,   39,   22,   39,   22,   22,   22,   22,   22,   22,
+       34,   34,   41,   34,   34,    3,    0,   41,    0,    0,
+       34,   45,   45,   45,   45,   45,   46,   46,   46,   46,
+       46,   47,   47,   47,   47,   47,   48,    0,   48,    0,
+       48,   49,   49,   49,    0,   49,   50,   50,   50,   50,
 
-       59,   56,   38,   38,   56,   57,    3,   60,   57,   60,
-       61,   62,   61,   63,   62,   64,   63,   65,    0,    0,
-        0,    0,   64,    0,   65,   69,   69,   69,   71,    0,
-       71,   72,   72,   72,   73,   73,   73,   68,   68,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       68
+       50,   52,    0,   52,   44,   44,   44,   44,   44,   44,
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       44
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -562,10 +583,11 @@
 extern int skel__flex_debug;
 int skel__flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[13] =
+static yyconst flex_int16_t yy_rule_linenum[22] =
     {   0,
-       70,   97,   98,   99,  101,  102,  103,  104,  105,  108,
-      109,  110
+       72,   73,   74,   75,   76,   78,   79,   81,   90,   91,
+       92,  105,  107,  108,  109,  110,  111,  113,  134,  139,
+      140
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -579,33 +601,33 @@
 #line 1 "scan-skel.l"
 /* Scan Bison Skeletons.                                       -*- C -*-
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-   Foundation, Inc.
+   Copyright (C) 2001-2007, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
-#line 27 "scan-skel.l"
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+#define YY_NO_INPUT 1
+#line 24 "scan-skel.l"
 /* Work around a bug in flex 2.5.31.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
 #undef skel_wrap
 #define skel_wrap() 1
 
-#include "system.h"
+#define FLEX_PREFIX(Id) skel_ ## Id
+#include "flex-scanner.h"
 
+#include <dirname.h>
 #include <error.h>
 #include <quotearg.h>
 
@@ -614,29 +636,25 @@
 #include "files.h"
 #include "scan-skel.h"
 
-/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used.  */
-int skel_lex (void);
-int skel_get_lineno (void);
-FILE *skel_get_in (void);
-FILE *skel_get_out (void);
-int skel_get_leng (void);
-char *skel_get_text (void);
-void skel_set_lineno (int);
-void skel_set_in (FILE *);
-void skel_set_out (FILE *);
-int skel_get_debug (void);
-void skel_set_debug (int);
-int skel_lex_destroy (void);
+#define YY_DECL static int skel_lex (void)
+YY_DECL;
 
 #define QPUTS(String) \
    fputs (quotearg_style (c_quoting_style, String), skel_out)
 
-#define BASE_QPUTS(File) \
-   QPUTS (base_name (File))
+static void at_directive_perform (int at_directive_argc,
+                                  char *at_directive_argv[],
+                                  char **outnamep, int *out_linenop);
+static void fail_for_at_directive_too_many_args (char const *at_directive_name);
+static void fail_for_at_directive_too_few_args (char const *at_directive_name);
+static void fail_for_invalid_at (char const *at);
 
-#line 638 "scan-skel.c"
+
+#line 654 "scan-skel.c"
 
 #define INITIAL 0
+#define SC_AT_DIRECTIVE_ARGS 1
+#define SC_AT_DIRECTIVE_SKIP_WS 2
 
 #ifndef YY_NO_UNISTD_H
 /* Special case for "unistd.h", since it is non-ANSI. We include it way
@@ -656,11 +674,46 @@
 
 /* %if-c-only Reentrant structure and macros (non-C++). */
 /* %if-reentrant */
+/* %if-c-only */
+
+static int yy_init_globals (void );
+
+/* %endif */
 /* %if-reentrant */
 /* %endif */
+/* %endif End reentrant structures and macros. */
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int skel_lex_destroy (void );
+
+int skel_get_debug (void );
+
+void skel_set_debug (int debug_flag  );
+
+YY_EXTRA_TYPE skel_get_extra (void );
+
+void skel_set_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *skel_get_in (void );
+
+void skel_set_in  (FILE * in_str  );
+
+FILE *skel_get_out (void );
+
+void skel_set_out  (FILE * out_str  );
+
+yy_size_t skel_get_leng (void );
+
+char *skel_get_text (void );
+
+int skel_get_lineno (void );
+
+void skel_set_lineno (int line_number  );
+
 /* %if-bison-bridge */
 /* %endif */
-/* %endif End reentrant structures and macros. */
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -717,7 +770,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( skel_text, skel_leng, 1, skel_out )
+#define ECHO do { if (fwrite( skel_text, skel_leng, 1, skel_out )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -839,19 +892,26 @@
 	register int yy_act;
     
 /* %% [7.0] user's declarations go here */
-#line 63 "scan-skel.l"
+#line 58 "scan-skel.l"
 
 
 
-  int lineno IF_LINT (= 0);
+  int out_lineno PACIFY_CC (= 0);
   char *outname = NULL;
 
+  /* Currently, only the @warn, @complain, @fatal, @warn_at, @complain_at, and
+     @fatal_at directives take multiple arguments, and the last three already
+     can't take more than 7.  at_directive_argv[0] is the directive name.  */
+  #define AT_DIRECTIVE_ARGC_MAX 8
+  int at_directive_argc = 0;
+  char *at_directive_argv[AT_DIRECTIVE_ARGC_MAX];
 
-#line 851 "scan-skel.c"
 
-	if ( (yy_init) )
+#line 911 "scan-skel.c"
+
+	if ( !(yy_init) )
 		{
-		(yy_init) = 0;
+		(yy_init) = 1;
 
 #ifdef YY_USER_INIT
 		YY_USER_INIT;
@@ -910,13 +970,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 69 )
+				if ( yy_current_state >= 45 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 68 );
+		while ( yy_current_state != 44 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -935,13 +995,13 @@
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 13 )
+			else if ( yy_act < 22 )
 				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
 				         (long)yy_rule_linenum[yy_act], skel_text );
-			else if ( yy_act == 13 )
+			else if ( yy_act == 22 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
 				         skel_text );
-			else if ( yy_act == 14 )
+			else if ( yy_act == 23 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -958,95 +1018,71 @@
 			goto yy_find_action;
 
 case 1:
-/* rule 1 can match eol */
 YY_RULE_SETUP
-#line 70 "scan-skel.l"
-{
-  char const *file_name = skel_text + sizeof "@output " - 1;
-  skel_text[skel_leng - 1] = '\0';
-
-  /* Decode special file names.  They include the directory part,
-     contrary to their "free" occurrences, used for issuing #includes,
-     which must not include the directory part.  */
-
-  if (*file_name == '@')
-    {
-      if (strcmp (file_name, "@output_header_name@") == 0)
-	file_name = spec_defines_file;
-      else if (strcmp (file_name, "@output_parser_name@") == 0)
-	file_name = parser_file_name;
-      else
-	fatal ("invalid token in skeleton: %s", skel_text);
-    }
-  if (outname)
-    {
-      free (outname);
-      xfclose (skel_out);
-    }
-  outname = xstrdup (file_name);
-  skel_out = xfopen (outname, "w");
-  lineno = 1;
-}
+#line 72 "scan-skel.l"
+fputc ('@', skel_out);
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 97 "scan-skel.l"
-fputc ('@', skel_out);
+#line 73 "scan-skel.l"
+fputc ('[', skel_out);
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 98 "scan-skel.l"
-fputc ('[', skel_out);
+#line 74 "scan-skel.l"
+fputc (']', skel_out);
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 99 "scan-skel.l"
-fputc (']', skel_out);
+#line 75 "scan-skel.l"
+continue;  /* Used by b4_cat in ../data/bison.m4.  */
 	YY_BREAK
 case 5:
+/* rule 5 can match eol */
 YY_RULE_SETUP
-#line 101 "scan-skel.l"
-fprintf (skel_out, "%d", lineno + 1);
+#line 76 "scan-skel.l"
+continue;
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 102 "scan-skel.l"
-QPUTS (outname);
+#line 78 "scan-skel.l"
+fprintf (skel_out, "%d", out_lineno + 1);
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 103 "scan-skel.l"
-QPUTS (dir_prefix);
+#line 79 "scan-skel.l"
+QPUTS (outname);
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 104 "scan-skel.l"
-BASE_QPUTS (parser_file_name);
-	YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 105 "scan-skel.l"
-BASE_QPUTS (spec_defines_file);
+#line 81 "scan-skel.l"
+{
+  skel_text[skel_leng-1] = '\0';
+  obstack_grow (&obstack_for_string, skel_text, skel_leng);
+  at_directive_argv[at_directive_argc++] =
+    obstack_finish (&obstack_for_string);
+  BEGIN SC_AT_DIRECTIVE_ARGS;
+}
 	YY_BREAK
 /* This pattern must not match more than the previous @ patterns. */
-case 10:
+case 9:
 YY_RULE_SETUP
-#line 108 "scan-skel.l"
-fatal ("invalid @ in skeleton: %s", skel_text);
+#line 90 "scan-skel.l"
+fail_for_invalid_at (skel_text);
+	YY_BREAK
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+#line 91 "scan-skel.l"
+out_lineno++; ECHO;
 	YY_BREAK
 case 11:
-/* rule 11 can match eol */
 YY_RULE_SETUP
-#line 109 "scan-skel.l"
-lineno++; ECHO;
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 110 "scan-skel.l"
+#line 92 "scan-skel.l"
 ECHO;
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 112 "scan-skel.l"
+#line 94 "scan-skel.l"
 {
   if (outname)
     {
@@ -1056,12 +1092,100 @@
   return EOF;
 }
 	YY_BREAK
+
+
+case 12:
+/* rule 12 can match eol */
+YY_RULE_SETUP
+#line 105 "scan-skel.l"
+STRING_GROW;
+	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 120 "scan-skel.l"
+#line 107 "scan-skel.l"
+obstack_1grow (&obstack_for_string, '@');
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 108 "scan-skel.l"
+obstack_1grow (&obstack_for_string, '[');
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 109 "scan-skel.l"
+obstack_1grow (&obstack_for_string, ']');
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 110 "scan-skel.l"
+continue; /* For starting an argument that begins with whitespace. */
+	YY_BREAK
+case 17:
+/* rule 17 can match eol */
+YY_RULE_SETUP
+#line 111 "scan-skel.l"
+continue;
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 113 "scan-skel.l"
+{
+    if (at_directive_argc >= AT_DIRECTIVE_ARGC_MAX)
+      fail_for_at_directive_too_many_args (at_directive_argv[0]);
+
+    obstack_1grow (&obstack_for_string, '\0');
+    at_directive_argv[at_directive_argc++] =
+      obstack_finish (&obstack_for_string);
+
+    /* Like M4, skip whitespace after a comma.  */
+    if (skel_text[1] == ',')
+      BEGIN SC_AT_DIRECTIVE_SKIP_WS;
+    else
+      {
+        at_directive_perform (at_directive_argc, at_directive_argv,
+                              &outname, &out_lineno);
+        obstack_free (&obstack_for_string, at_directive_argv[0]);
+        at_directive_argc = 0;
+        BEGIN INITIAL;
+      }
+  }
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 134 "scan-skel.l"
+fail_for_invalid_at (skel_text);
+	YY_BREAK
+
+
+
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+#line 139 "scan-skel.l"
+continue;
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 140 "scan-skel.l"
+{ yyless (0); BEGIN SC_AT_DIRECTIVE_ARGS; }
+	YY_BREAK
+
+
+
+case YY_STATE_EOF(SC_AT_DIRECTIVE_ARGS):
+case YY_STATE_EOF(SC_AT_DIRECTIVE_SKIP_WS):
+#line 145 "scan-skel.l"
+{
+    fatal (_("unclosed %s directive in skeleton"), at_directive_argv[0]);
+  }
+	YY_BREAK
+
+case 22:
+YY_RULE_SETUP
+#line 150 "scan-skel.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 1065 "scan-skel.c"
+#line 1189 "scan-skel.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -1259,21 +1383,21 @@
 
 	else
 		{
-			size_t num_to_read =
+			yy_size_t num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
 			{ /* Not enough room in the buffer - grow it. */
 
 			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
 
 			int yy_c_buf_p_offset =
 				(int) ((yy_c_buf_p) - b->yy_ch_buf);
 
 			if ( b->yy_is_our_buffer )
 				{
-				int new_size = b->yy_buf_size * 2;
+				yy_size_t new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -1328,6 +1452,14 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) skel_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
 	(yy_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -1365,7 +1497,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 69 )
+			if ( yy_current_state >= 45 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1398,13 +1530,13 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 69 )
+		if ( yy_current_state >= 45 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 68);
+	yy_is_jam = (yy_current_state == 44);
 
-	return yy_is_jam ? 0 : yy_current_state;
+		return yy_is_jam ? 0 : yy_current_state;
 }
 
 /* %if-c-only */
@@ -1439,7 +1571,7 @@
 
 		else
 			{ /* need more input */
-			int offset = (yy_c_buf_p) - (yytext_ptr);
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -1623,13 +1755,6 @@
 	skel_free((void *) b  );
 }
 
-/* %if-c-only */
-
-/* %endif */
-
-/* %if-c++-only */
-/* %endif */
-
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
  * such as during a skel_restart() or at EOF.
@@ -1772,7 +1897,7 @@
 /* %if-c++-only */
 /* %endif */
 {
-	int num_to_alloc;
+	yy_size_t num_to_alloc;
     
 	if (!(yy_buffer_stack)) {
 
@@ -1784,7 +1909,9 @@
 		(yy_buffer_stack) = (struct yy_buffer_state**)skel_alloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
-		
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in skel_ensure_buffer_stack()" );
+								  
 		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
 				
 		(yy_buffer_stack_max) = num_to_alloc;
@@ -1802,6 +1929,8 @@
 								((yy_buffer_stack),
 								num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in skel_ensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -1850,28 +1979,28 @@
 /* %if-c-only */
 /** Setup the input buffer state to scan a string. The next call to skel_lex() will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param yystr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
  *       skel__scan_bytes() instead.
  */
-YY_BUFFER_STATE skel__scan_string (yyconst char * yy_str )
+YY_BUFFER_STATE skel__scan_string (yyconst char * yystr )
 {
     
-	return skel__scan_bytes(yy_str,strlen(yy_str) );
+	return skel__scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
 /** Setup the input buffer state to scan the given bytes. The next call to skel_lex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE skel__scan_bytes  (yyconst char * bytes, int  len )
+YY_BUFFER_STATE skel__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -1879,15 +2008,15 @@
 	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = len + 2;
+	n = _yybytes_len + 2;
 	buf = (char *) skel_alloc(n  );
 	if ( ! buf )
 		YY_FATAL_ERROR( "out of dynamic memory in skel__scan_bytes()" );
 
-	for ( i = 0; i < len; ++i )
-		buf[i] = bytes[i];
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
 
-	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
 	b = skel__scan_buffer(buf,n );
 	if ( ! b )
@@ -1967,7 +2096,7 @@
 /** Get the length of the current token.
  * 
  */
-int skel_get_leng  (void)
+yy_size_t skel_get_leng  (void)
 {
         return skel_leng;
 }
@@ -2025,6 +2154,36 @@
 /* %if-reentrant */
 /* %if-bison-bridge */
 /* %endif */
+/* %endif if-c-only */
+
+/* %if-c-only */
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from skel_lex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    skel_in = stdin;
+    skel_out = stdout;
+#else
+    skel_in = (FILE *) 0;
+    skel_out = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * skel_lex_init()
+     */
+    return 0;
+}
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
@@ -2043,6 +2202,10 @@
 	skel_free((yy_buffer_stack) );
 	(yy_buffer_stack) = NULL;
 
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * skel_lex() is called, initialization will occur. */
+    yy_init_globals( );
+
 /* %if-reentrant */
 /* %endif */
     return 0;
@@ -2057,7 +2220,7 @@
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
 	register int i;
-    	for ( i = 0; i < n; ++i )
+	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
 }
 #endif
@@ -2066,7 +2229,7 @@
 static int yy_flex_strlen (yyconst char * s )
 {
 	register int n;
-    	for ( n = 0; s[n]; ++n )
+	for ( n = 0; s[n]; ++n )
 		;
 
 	return n;
@@ -2102,19 +2265,7 @@
 
 /* %ok-for-header */
 
-#undef YY_NEW_FILE
-#undef YY_FLUSH_BUFFER
-#undef yy_set_bol
-#undef yy_new_buffer
-#undef yy_set_interactive
-#undef yytext_ptr
-#undef YY_DO_BEFORE_ACTION
-
-#ifdef YY_DECL_IS_OURS
-#undef YY_DECL_IS_OURS
-#undef YY_DECL
-#endif
-#line 120 "scan-skel.l"
+#line 150 "scan-skel.l"
 
 
 
@@ -2125,10 +2276,152 @@
 void
 scan_skel (FILE *in)
 {
+  static bool initialized = false;
+  if (!initialized)
+    {
+      initialized = true;
+      obstack_init (&obstack_for_string);
+    }
   skel_in = in;
   skel__flex_debug = trace_flag & trace_skeleton;
   skel_lex ();
+}
+
+void
+skel_scanner_free (void)
+{
+  obstack_free (&obstack_for_string, 0);
   /* Reclaim Flex's buffers.  */
-  skel__delete_buffer (YY_CURRENT_BUFFER);
+  skel_lex_destroy ();
+}
+
+static void
+at_directive_perform (int at_directive_argc,
+                      char *at_directive_argv[],
+                      char **outnamep, int *out_linenop)
+{
+  if (0 == strcmp (at_directive_argv[0], "@basename"))
+    {
+      if (at_directive_argc > 2)
+        fail_for_at_directive_too_many_args (at_directive_argv[0]);
+      fputs (last_component (at_directive_argv[1]), skel_out);
+    }
+  else if (0 == strcmp (at_directive_argv[0], "@warn")
+           || 0 == strcmp (at_directive_argv[0], "@complain")
+           || 0 == strcmp (at_directive_argv[0], "@fatal"))
+    {
+      void (*func)(char const *, ...);
+      switch (at_directive_argv[0][1])
+        {
+          case 'w': func = warn; break;
+          case 'c': func = complain; break;
+          case 'f': func = fatal; break;
+          default: aver (false); break;
+        }
+      switch (at_directive_argc)
+        {
+          case 2:
+            func (_(at_directive_argv[1]));
+            break;
+          case 3:
+            func (_(at_directive_argv[1]), at_directive_argv[2]);
+            break;
+          case 4:
+            func (_(at_directive_argv[1]), at_directive_argv[2],
+                  at_directive_argv[3]);
+            break;
+          case 5:
+            func (_(at_directive_argv[1]), at_directive_argv[2],
+                  at_directive_argv[3], at_directive_argv[4]);
+            break;
+          case 6:
+            func (_(at_directive_argv[1]), at_directive_argv[2],
+                  at_directive_argv[3], at_directive_argv[4],
+                  at_directive_argv[5]);
+            break;
+          default:
+            fail_for_at_directive_too_many_args (at_directive_argv[0]);
+            break;
+        }
+    }
+  else if (0 == strcmp (at_directive_argv[0], "@warn_at")
+           || 0 == strcmp (at_directive_argv[0], "@complain_at")
+           || 0 == strcmp (at_directive_argv[0], "@fatal_at"))
+    {
+      void (*func)(location, char const *, ...);
+      location loc;
+      if (at_directive_argc < 4)
+        fail_for_at_directive_too_few_args (at_directive_argv[0]);
+      switch (at_directive_argv[0][1])
+        {
+          case 'w': func = warn_at; break;
+          case 'c': func = complain_at; break;
+          case 'f': func = fatal_at; break;
+          default: aver (false); break;
+        }
+      boundary_set_from_string (&loc.start, at_directive_argv[1]);
+      boundary_set_from_string (&loc.end, at_directive_argv[2]);
+      switch (at_directive_argc)
+        {
+          case 4:
+            func (loc, _(at_directive_argv[3]));
+            break;
+          case 5:
+            func (loc, _(at_directive_argv[3]), at_directive_argv[4]);
+            break;
+          case 6:
+            func (loc, _(at_directive_argv[3]), at_directive_argv[4],
+                  at_directive_argv[5]);
+            break;
+          case 7:
+            func (loc, _(at_directive_argv[3]), at_directive_argv[4],
+                  at_directive_argv[5], at_directive_argv[6]);
+            break;
+          case 8:
+            func (loc, _(at_directive_argv[3]), at_directive_argv[4],
+                  at_directive_argv[5], at_directive_argv[6],
+                  at_directive_argv[7]);
+            break;
+          default:
+            fail_for_at_directive_too_many_args (at_directive_argv[0]);
+            break;
+        }
+    }
+  else if (0 == strcmp (at_directive_argv[0], "@output"))
+    {
+      if (at_directive_argc > 2)
+        fail_for_at_directive_too_many_args (at_directive_argv[0]);
+      if (*outnamep)
+        {
+          free (*outnamep);
+          xfclose (skel_out);
+        }
+      *outnamep = xstrdup (at_directive_argv[1]);
+      output_file_name_check (outnamep);
+      skel_out = xfopen (*outnamep, "w");
+      *out_linenop = 1;
+    }
+  else
+    fail_for_invalid_at (at_directive_argv[0]);
+}
+
+static void
+fail_for_at_directive_too_few_args (char const *at_directive_name)
+{
+  fatal (_("too few arguments for %s directive in skeleton"),
+         at_directive_name);
+}
+
+static void
+fail_for_at_directive_too_many_args (char const *at_directive_name)
+{
+  fatal (_("too many arguments for %s directive in skeleton"),
+         at_directive_name);
+}
+
+static void
+fail_for_invalid_at (char const *at)
+{
+  fatal ("invalid @ in skeleton: %s", at);
 }
 
diff --git a/src/scan-skel.h b/src/scan-skel.h
index a7e14c3..2c6930b 100644
--- a/src/scan-skel.h
+++ b/src/scan-skel.h
@@ -1,23 +1,21 @@
 /* Scan Bison Skeletons.
 
-   Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 void scan_skel (FILE *);
 
@@ -26,3 +24,4 @@
 extern FILE *skel_out;
 extern int skel__flex_debug;
 extern int skel_lineno;
+void skel_scanner_free (void);
diff --git a/src/scan-skel.l b/src/scan-skel.l
index c84eea1..ed61b5c 100644
--- a/src/scan-skel.l
+++ b/src/scan-skel.l
@@ -1,26 +1,23 @@
 /* Scan Bison Skeletons.                                       -*- C -*-
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-   Foundation, Inc.
+   Copyright (C) 2001-2007, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-%option nodefault noyywrap nounput never-interactive debug
+%option nodefault noyywrap noinput nounput never-interactive debug
 %option prefix="skel_" outfile="lex.yy.c"
 
 %{
@@ -29,8 +26,10 @@
 #undef skel_wrap
 #define skel_wrap() 1
 
-#include "system.h"
+#define FLEX_PREFIX(Id) skel_ ## Id
+#include "flex-scanner.h"
 
+#include <dirname.h>
 #include <error.h>
 #include <quotearg.h>
 
@@ -39,77 +38,60 @@
 #include "files.h"
 #include "scan-skel.h"
 
-/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used.  */
-int skel_lex (void);
-int skel_get_lineno (void);
-FILE *skel_get_in (void);
-FILE *skel_get_out (void);
-int skel_get_leng (void);
-char *skel_get_text (void);
-void skel_set_lineno (int);
-void skel_set_in (FILE *);
-void skel_set_out (FILE *);
-int skel_get_debug (void);
-void skel_set_debug (int);
-int skel_lex_destroy (void);
+#define YY_DECL static int skel_lex (void)
+YY_DECL;
 
 #define QPUTS(String) \
    fputs (quotearg_style (c_quoting_style, String), yyout)
 
-#define BASE_QPUTS(File) \
-   QPUTS (base_name (File))
-
+static void at_directive_perform (int at_directive_argc,
+                                  char *at_directive_argv[],
+                                  char **outnamep, int *out_linenop);
+static void fail_for_at_directive_too_many_args (char const *at_directive_name);
+static void fail_for_at_directive_too_few_args (char const *at_directive_name);
+static void fail_for_invalid_at (char const *at);
 %}
+
+%x SC_AT_DIRECTIVE_ARGS
+%x SC_AT_DIRECTIVE_SKIP_WS
+
 %%
 
 %{
-  int lineno IF_LINT (= 0);
+  int out_lineno PACIFY_CC (= 0);
   char *outname = NULL;
+
+  /* Currently, only the @warn, @complain, @fatal, @warn_at, @complain_at, and
+     @fatal_at directives take multiple arguments, and the last three already
+     can't take more than 7.  at_directive_argv[0] is the directive name.  */
+  #define AT_DIRECTIVE_ARGC_MAX 8
+  int at_directive_argc = 0;
+  char *at_directive_argv[AT_DIRECTIVE_ARGC_MAX];
 %}
 
-"@output ".*\n {
-  char const *file_name = yytext + sizeof "@output " - 1;
-  yytext[yyleng - 1] = '\0';
+"@@" fputc ('@', yyout);
+"@{" fputc ('[', yyout);
+"@}" fputc (']', yyout);
+"@`" continue;  /* Used by b4_cat in ../data/bison.m4.  */
+@\n  continue;
 
-  /* Decode special file names.  They include the directory part,
-     contrary to their "free" occurrences, used for issuing #includes,
-     which must not include the directory part.  */
+"@oline@"  fprintf (yyout, "%d", out_lineno + 1);
+"@ofile@"  QPUTS (outname);
 
-  if (*file_name == '@')
-    {
-      if (strcmp (file_name, "@output_header_name@") == 0)
-	file_name = spec_defines_file;
-      else if (strcmp (file_name, "@output_parser_name@") == 0)
-	file_name = parser_file_name;
-      else
-	fatal ("invalid token in skeleton: %s", yytext);
-    }
-  if (outname)
-    {
-      free (outname);
-      xfclose (yyout);
-    }
-  outname = xstrdup (file_name);
-  yyout = xfopen (outname, "w");
-  lineno = 1;
+@[a-z_]+"(" {
+  yytext[yyleng-1] = '\0';
+  obstack_grow (&obstack_for_string, yytext, yyleng);
+  at_directive_argv[at_directive_argc++] =
+    obstack_finish (&obstack_for_string);
+  BEGIN SC_AT_DIRECTIVE_ARGS;
 }
 
-"@@"	   fputc ('@', yyout);
-"@{"	   fputc ('[', yyout);
-"@}"	   fputc (']', yyout);
-
-"@oline@"  fprintf (yyout, "%d", lineno + 1);
-"@ofile@"  QPUTS (outname);
-"@dir_prefix@" QPUTS (dir_prefix);
-"@output_parser_name@"	BASE_QPUTS (parser_file_name);
-"@output_header_name@"	BASE_QPUTS (spec_defines_file);
-
   /* This pattern must not match more than the previous @ patterns. */
-@[^{}@\n]* fatal ("invalid @ in skeleton: %s", yytext);
-\n	   lineno++; ECHO;
-[^@\n]+	   ECHO;
+@[^@{}`(\n]*  fail_for_invalid_at (yytext);
+\n            out_lineno++; ECHO;
+[^@\n]+       ECHO;
 
-<<EOF>> {
+<INITIAL><<EOF>> {
   if (outname)
     {
       free (outname);
@@ -117,6 +99,54 @@
     }
   return EOF;
 }
+
+<SC_AT_DIRECTIVE_ARGS>
+{
+  [^@]+  STRING_GROW;
+
+  "@@"   obstack_1grow (&obstack_for_string, '@');
+  "@{"   obstack_1grow (&obstack_for_string, '[');
+  "@}"   obstack_1grow (&obstack_for_string, ']');
+  "@`"   continue; /* For starting an argument that begins with whitespace. */
+  @\n    continue;
+
+  @[,)] {
+    if (at_directive_argc >= AT_DIRECTIVE_ARGC_MAX)
+      fail_for_at_directive_too_many_args (at_directive_argv[0]);
+
+    obstack_1grow (&obstack_for_string, '\0');
+    at_directive_argv[at_directive_argc++] =
+      obstack_finish (&obstack_for_string);
+
+    /* Like M4, skip whitespace after a comma.  */
+    if (yytext[1] == ',')
+      BEGIN SC_AT_DIRECTIVE_SKIP_WS;
+    else
+      {
+        at_directive_perform (at_directive_argc, at_directive_argv,
+                              &outname, &out_lineno);
+        obstack_free (&obstack_for_string, at_directive_argv[0]);
+        at_directive_argc = 0;
+        BEGIN INITIAL;
+      }
+  }
+
+  @.?  fail_for_invalid_at (yytext);
+}
+
+<SC_AT_DIRECTIVE_SKIP_WS>
+{
+  [ \t\r\n]    continue;
+  .            { yyless (0); BEGIN SC_AT_DIRECTIVE_ARGS; }
+}
+
+<SC_AT_DIRECTIVE_ARGS,SC_AT_DIRECTIVE_SKIP_WS>
+{
+  <<EOF>> {
+    fatal (_("unclosed %s directive in skeleton"), at_directive_argv[0]);
+  }
+}
+
 %%
 
 /*------------------------.
@@ -126,9 +156,151 @@
 void
 scan_skel (FILE *in)
 {
+  static bool initialized = false;
+  if (!initialized)
+    {
+      initialized = true;
+      obstack_init (&obstack_for_string);
+    }
   skel_in = in;
   skel__flex_debug = trace_flag & trace_skeleton;
   skel_lex ();
+}
+
+void
+skel_scanner_free (void)
+{
+  obstack_free (&obstack_for_string, 0);
   /* Reclaim Flex's buffers.  */
-  yy_delete_buffer (YY_CURRENT_BUFFER);
+  yylex_destroy ();
+}
+
+static void
+at_directive_perform (int at_directive_argc,
+                      char *at_directive_argv[],
+                      char **outnamep, int *out_linenop)
+{
+  if (0 == strcmp (at_directive_argv[0], "@basename"))
+    {
+      if (at_directive_argc > 2)
+        fail_for_at_directive_too_many_args (at_directive_argv[0]);
+      fputs (last_component (at_directive_argv[1]), yyout);
+    }
+  else if (0 == strcmp (at_directive_argv[0], "@warn")
+           || 0 == strcmp (at_directive_argv[0], "@complain")
+           || 0 == strcmp (at_directive_argv[0], "@fatal"))
+    {
+      void (*func)(char const *, ...);
+      switch (at_directive_argv[0][1])
+        {
+          case 'w': func = warn; break;
+          case 'c': func = complain; break;
+          case 'f': func = fatal; break;
+          default: aver (false); break;
+        }
+      switch (at_directive_argc)
+        {
+          case 2:
+            func (_(at_directive_argv[1]));
+            break;
+          case 3:
+            func (_(at_directive_argv[1]), at_directive_argv[2]);
+            break;
+          case 4:
+            func (_(at_directive_argv[1]), at_directive_argv[2],
+                  at_directive_argv[3]);
+            break;
+          case 5:
+            func (_(at_directive_argv[1]), at_directive_argv[2],
+                  at_directive_argv[3], at_directive_argv[4]);
+            break;
+          case 6:
+            func (_(at_directive_argv[1]), at_directive_argv[2],
+                  at_directive_argv[3], at_directive_argv[4],
+                  at_directive_argv[5]);
+            break;
+          default:
+            fail_for_at_directive_too_many_args (at_directive_argv[0]);
+            break;
+        }
+    }
+  else if (0 == strcmp (at_directive_argv[0], "@warn_at")
+           || 0 == strcmp (at_directive_argv[0], "@complain_at")
+           || 0 == strcmp (at_directive_argv[0], "@fatal_at"))
+    {
+      void (*func)(location, char const *, ...);
+      location loc;
+      if (at_directive_argc < 4)
+        fail_for_at_directive_too_few_args (at_directive_argv[0]);
+      switch (at_directive_argv[0][1])
+        {
+          case 'w': func = warn_at; break;
+          case 'c': func = complain_at; break;
+          case 'f': func = fatal_at; break;
+          default: aver (false); break;
+        }
+      boundary_set_from_string (&loc.start, at_directive_argv[1]);
+      boundary_set_from_string (&loc.end, at_directive_argv[2]);
+      switch (at_directive_argc)
+        {
+          case 4:
+            func (loc, _(at_directive_argv[3]));
+            break;
+          case 5:
+            func (loc, _(at_directive_argv[3]), at_directive_argv[4]);
+            break;
+          case 6:
+            func (loc, _(at_directive_argv[3]), at_directive_argv[4],
+                  at_directive_argv[5]);
+            break;
+          case 7:
+            func (loc, _(at_directive_argv[3]), at_directive_argv[4],
+                  at_directive_argv[5], at_directive_argv[6]);
+            break;
+          case 8:
+            func (loc, _(at_directive_argv[3]), at_directive_argv[4],
+                  at_directive_argv[5], at_directive_argv[6],
+                  at_directive_argv[7]);
+            break;
+          default:
+            fail_for_at_directive_too_many_args (at_directive_argv[0]);
+            break;
+        }
+    }
+  else if (0 == strcmp (at_directive_argv[0], "@output"))
+    {
+      if (at_directive_argc > 2)
+        fail_for_at_directive_too_many_args (at_directive_argv[0]);
+      if (*outnamep)
+        {
+          free (*outnamep);
+          xfclose (yyout);
+        }
+      *outnamep = xstrdup (at_directive_argv[1]);
+      output_file_name_check (outnamep);
+      yyout = xfopen (*outnamep, "w");
+      *out_linenop = 1;
+    }
+  else
+    fail_for_invalid_at (at_directive_argv[0]);
+}
+
+static void
+fail_for_at_directive_too_few_args (char const *at_directive_name)
+{
+  fatal (_("too few arguments for %s directive in skeleton"),
+         at_directive_name);
+}
+
+static void
+fail_for_at_directive_too_many_args (char const *at_directive_name)
+{
+  fatal (_("too many arguments for %s directive in skeleton"),
+         at_directive_name);
+}
+
+static void
+fail_for_invalid_at (char const *at)
+{
+  fatal ("invalid @ in skeleton: %s", at);
 }
diff --git a/src/state.c b/src/state.c
index 4eb39f9..666e0cc 100644
--- a/src/state.c
+++ b/src/state.c
@@ -1,24 +1,21 @@
-/* Type definitions for nondeterministic finite state machine for Bison.
+/* Type definitions for the finite state machine for Bison.
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-   Foundation, Inc.
+   Copyright (C) 2001-2007, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
@@ -28,6 +25,7 @@
 #include "complain.h"
 #include "gram.h"
 #include "state.h"
+#include "print-xml.h"
 
 
 			/*-------------------.
@@ -61,7 +59,7 @@
   int j;
   for (j = 0; ; j++)
     {
-      assert (j < shifts->num);
+      aver (j < shifts->num);
       if (TRANSITION_SYMBOL (shifts, j) == sym)
 	return shifts->states[j];
     }
@@ -105,7 +103,7 @@
   size_t rules_size = num * sizeof *reds;
   reductions *res = xmalloc (offsetof (reductions, rules) + rules_size);
   res->num = num;
-  res->look_ahead_tokens = NULL;
+  res->lookahead_tokens = NULL;
   memcpy (res->rules, reds, rules_size);
   return res;
 }
@@ -135,7 +133,7 @@
   state *res;
   size_t items_size = nitems * sizeof *core;
 
-  assert (nstates < STATE_NUMBER_MAXIMUM);
+  aver (nstates < STATE_NUMBER_MAXIMUM);
 
   res = xmalloc (offsetof (state, items) + items_size);
   res->number = nstates++;
@@ -143,8 +141,10 @@
   res->transitions = NULL;
   res->reductions = NULL;
   res->errs = NULL;
+  res->state_list = NULL;
   res->consistent = 0;
   res->solved_conflicts = NULL;
+  res->solved_conflicts_xml = NULL;
 
   res->nitems = nitems;
   memcpy (res->items, core, items_size);
@@ -154,6 +154,32 @@
   return res;
 }
 
+state *
+state_new_isocore (state const *s)
+{
+  state *res;
+  size_t items_size = s->nitems * sizeof *s->items;
+
+  aver (nstates < STATE_NUMBER_MAXIMUM);
+
+  res = xmalloc (offsetof (state, items) + items_size);
+  res->number = nstates++;
+  res->accessing_symbol = s->accessing_symbol;
+  res->transitions =
+    transitions_new (s->transitions->num, s->transitions->states);
+  res->reductions = reductions_new (s->reductions->num, s->reductions->rules);
+  res->errs = NULL;
+  res->state_list = NULL;
+  res->consistent = s->consistent;
+  res->solved_conflicts = NULL;
+  res->solved_conflicts_xml = NULL;
+
+  res->nitems = s->nitems;
+  memcpy (res->items, s->items, items_size);
+
+  return res;
+}
+
 
 /*---------.
 | Free S.  |
@@ -176,7 +202,7 @@
 void
 state_transitions_set (state *s, int num, state **trans)
 {
-  assert (!s->transitions);
+  aver (!s->transitions);
   s->transitions = transitions_new (num, trans);
 }
 
@@ -188,7 +214,7 @@
 void
 state_reductions_set (state *s, int num, rule **reds)
 {
-  assert (!s->reductions);
+  aver (!s->reductions);
   s->reductions = reductions_new (num, reds);
 }
 
@@ -212,32 +238,32 @@
 void
 state_errs_set (state *s, int num, symbol **tokens)
 {
-  assert (!s->errs);
+  aver (!s->errs);
   s->errs = errs_new (num, tokens);
 }
 
 
 
-/*---------------------------------------------------.
-| Print on OUT all the look-ahead tokens such that S |
-| wants to reduce R.                                 |
-`---------------------------------------------------*/
+/*--------------------------------------------------.
+| Print on OUT all the lookahead tokens such that S |
+| wants to reduce R.                                |
+`--------------------------------------------------*/
 
 void
-state_rule_look_ahead_tokens_print (state *s, rule *r, FILE *out)
+state_rule_lookahead_tokens_print (state *s, rule *r, FILE *out)
 {
   /* Find the reduction we are handling.  */
   reductions *reds = s->reductions;
   int red = state_reduction_find (s, r);
 
   /* Print them if there are.  */
-  if (reds->look_ahead_tokens && red != -1)
+  if (reds->lookahead_tokens && red != -1)
     {
       bitset_iterator biter;
       int k;
       char const *sep = "";
       fprintf (out, "  [");
-      BITSET_FOR_EACH (biter, reds->look_ahead_tokens[red], k, 0)
+      BITSET_FOR_EACH (biter, reds->lookahead_tokens[red], k, 0)
 	{
 	  fprintf (out, "%s%s", sep, symbols[k]->tag);
 	  sep = ", ";
@@ -246,6 +272,29 @@
     }
 }
 
+void
+state_rule_lookahead_tokens_print_xml (state *s, rule *r,
+				       FILE *out, int level)
+{
+  /* Find the reduction we are handling.  */
+  reductions *reds = s->reductions;
+  int red = state_reduction_find (s, r);
+
+  /* Print them if there are.  */
+  if (reds->lookahead_tokens && red != -1)
+    {
+      bitset_iterator biter;
+      int k;
+      xml_puts (out, level, "<lookaheads>");
+      BITSET_FOR_EACH (biter, reds->lookahead_tokens[red], k, 0)
+	{
+	  xml_printf (out, level + 1, "<symbol>%s</symbol>",
+		      xml_escape (symbols[k]->tag));
+	}
+      xml_puts (out, level, "</lookaheads>");
+    }
+}
+
 
 /*---------------------.
 | A state hash table.  |
@@ -329,7 +378,8 @@
 void
 state_hash_insert (state *s)
 {
-  hash_insert (state_table, s);
+  if (!hash_insert (state_table, s))
+    xalloc_die ();
 }
 
 
@@ -352,6 +402,52 @@
   return entry;
 }
 
+
+/*--------------------------------------------------------.
+| Record S and all states reachable from S in REACHABLE.  |
+`--------------------------------------------------------*/
+
+static void
+state_record_reachable_states (state *s, bitset reachable)
+{
+  if (bitset_test (reachable, s->number))
+    return;
+  bitset_set (reachable, s->number);
+  {
+    int i;
+    for (i = 0; i < s->transitions->num; ++i)
+      if (!TRANSITION_IS_DISABLED (s->transitions, i))
+        state_record_reachable_states (s->transitions->states[i], reachable);
+  }
+}
+
+void
+state_remove_unreachable_states (state_number old_to_new[])
+{
+  state_number nstates_reachable = 0;
+  bitset reachable = bitset_create (nstates, BITSET_FIXED);
+  state_record_reachable_states (states[0], reachable);
+  {
+    state_number i;
+    for (i = 0; i < nstates; ++i)
+      {
+        if (bitset_test (reachable, states[i]->number))
+          {
+            states[nstates_reachable] = states[i];
+            states[nstates_reachable]->number = nstates_reachable;
+            old_to_new[i] = nstates_reachable++;
+          }
+        else
+          {
+            state_free (states[i]);
+            old_to_new[i] = nstates;
+          }
+      }
+  }
+  nstates = nstates_reachable;
+  bitset_free (reachable);
+}
+
 /* All the decorated states, indexed by the state number.  */
 state **states = NULL;
 
diff --git a/src/state.h b/src/state.h
index 440cd46..dfdc49d 100644
--- a/src/state.h
+++ b/src/state.h
@@ -1,24 +1,22 @@
-/* Type definitions for nondeterministic finite state machine for Bison.
+/* Type definitions for the finite state machine for Bison.
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002, 2003, 2004 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2004, 2007, 2009-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 /* These type definitions are used to represent a nondeterministic
@@ -44,13 +42,13 @@
    ACCESSING_SYMBOL of the core.
 
    Each core contains a vector of NITEMS items which are the indices
-   in the RITEMS vector of the items that are selected in this state.
+   in the RITEM vector of the items that are selected in this state.
 
-   The two types of actions are shifts/gotos (push the look-ahead token
+   The two types of actions are shifts/gotos (push the lookahead token
    and read another/goto to the state designated by a nterm) and
    reductions (combine the last n things on the stack via a rule,
    replace them with the symbol that the rule derives, and leave the
-   look-ahead token alone).  When the states are generated, these
+   lookahead token alone).  When the states are generated, these
    actions are represented in two other lists.
 
    Each transition structure describes the possible transitions out
@@ -63,9 +61,8 @@
    deletes transitions by having them point to zero.
 
    Each reductions structure describes the possible reductions at the
-   state whose number is in the number field.  The data is a list of
-   nreds rules, represented by their rule numbers.  first_reduction
-   points to the list of these structures.
+   state whose number is in the number field.  rules is an array of
+   num rules.  lookahead_tokens is an array of bitsets, one per rule.
 
    Conflict resolution can decide that certain tokens in certain
    states should explicitly be errors (for implementing %nonassoc).
@@ -185,7 +182,8 @@
 typedef struct
 {
   int num;
-  bitset *look_ahead_tokens;
+  bitset *lookahead_tokens;
+  /* Sorted ascendingly on rule number.  */
   rule *rules[1];
 } reductions;
 
@@ -195,6 +193,8 @@
 | states.  |
 `---------*/
 
+struct state_list;
+
 struct state
 {
   state_number number;
@@ -203,15 +203,22 @@
   reductions *reductions;
   errs *errs;
 
-  /* Nonzero if no look-ahead is needed to decide what to do in state S.  */
+  /* When an includer (such as ielr.c) needs to store states in a list, the
+     includer can define struct state_list as the list node structure and can
+     store in this member a reference to the node containing each state.  */
+  struct state_list *state_list;
+
+  /* If non-zero, then no lookahead sets on reduce actions are needed to
+     decide what to do in state S.  */
   char consistent;
 
   /* If some conflicts were solved thanks to precedence/associativity,
      a human readable description of the resolution.  */
   const char *solved_conflicts;
+  const char *solved_conflicts_xml;
 
-  /* Its items.  Must be last, since ITEMS can be arbitrarily large.
-     */
+  /* Its items.  Must be last, since ITEMS can be arbitrarily large.  Sorted
+     ascendingly on item index in RITEM, which is sorted on rule number.  */
   size_t nitems;
   item_number items[1];
 };
@@ -222,6 +229,7 @@
 /* Create a new state with ACCESSING_SYMBOL for those items.  */
 state *state_new (symbol_number accessing_symbol,
 		  size_t core_size, item_number *core);
+state *state_new_isocore (state const *s);
 
 /* Set the transitions of STATE.  */
 void state_transitions_set (state *s, int num, state **trans);
@@ -234,9 +242,11 @@
 /* Set the errs of STATE.  */
 void state_errs_set (state *s, int num, symbol **errors);
 
-/* Print on OUT all the look-ahead tokens such that this STATE wants to
+/* Print on OUT all the lookahead tokens such that this STATE wants to
    reduce R.  */
-void state_rule_look_ahead_tokens_print (state *s, rule *r, FILE *out);
+void state_rule_lookahead_tokens_print (state *s, rule *r, FILE *out);
+void state_rule_lookahead_tokens_print_xml (state *s, rule *r,
+					    FILE *out, int level);
 
 /* Create/destroy the states hash table.  */
 void state_hash_new (void);
@@ -249,9 +259,16 @@
 /* Insert STATE in the state hash table.  */
 void state_hash_insert (state *s);
 
+/* Remove unreachable states, renumber remaining states, update NSTATES, and
+   write to OLD_TO_NEW a mapping of old state numbers to new state numbers such
+   that the old value of NSTATES is written as the new state number for removed
+   states.  The size of OLD_TO_NEW must be the old value of NSTATES.  */
+void state_remove_unreachable_states (state_number old_to_new[]);
+
 /* All the states, indexed by the state number.  */
 extern state **states;
 
 /* Free all the states.  */
 void states_free (void);
+
 #endif /* !STATE_H_ */
diff --git a/src/symlist.c b/src/symlist.c
index 70db82f..69ac8a1 100644
--- a/src/symlist.c
+++ b/src/symlist.c
@@ -1,23 +1,22 @@
 /* Lists of symbols for Bison
 
-   Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005-2007, 2009-2012 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
@@ -31,66 +30,130 @@
 `--------------------------------------*/
 
 symbol_list *
-symbol_list_new (symbol *sym, location loc)
+symbol_list_sym_new (symbol *sym, location loc)
 {
   symbol_list *res = xmalloc (sizeof *res);
 
-  res->sym = sym;
-  res->location = loc;
+  res->content_type = SYMLIST_SYMBOL;
+  res->content.sym = sym;
+  res->location = res->sym_loc = loc;
 
   res->midrule = NULL;
+  res->midrule_parent_rule = NULL;
+  res->midrule_parent_rhs_index = 0;
 
-  res->action = NULL;
-  res->used = false;
+  code_props_none_init (&res->action_props);
 
   res->ruleprec = NULL;
   res->dprec = 0;
   res->merger = 0;
 
+  res->named_ref = NULL;
+
   res->next = NULL;
 
   return res;
 }
 
 
-/*------------------.
-| Print this list.  |
-`------------------*/
+/*--------------------------------------------.
+| Create a list containing TYPE_NAME at LOC.  |
+`--------------------------------------------*/
+
+symbol_list *
+symbol_list_type_new (uniqstr type_name, location loc)
+{
+  symbol_list *res = xmalloc (sizeof *res);
+
+  res->content_type = SYMLIST_TYPE;
+  res->content.type_name = type_name;
+  res->location = res->sym_loc = loc;
+  res->named_ref = NULL;
+  res->next = NULL;
+
+  return res;
+}
+
+
+/*----------------------------------------.
+| Create a list containing a <*> at LOC.  |
+`----------------------------------------*/
+
+symbol_list *
+symbol_list_default_tagged_new (location loc)
+{
+  symbol_list *res = xmalloc (sizeof *res);
+
+  res->content_type = SYMLIST_DEFAULT_TAGGED;
+  res->location = res->sym_loc = loc;
+  res->named_ref = NULL;
+  res->next = NULL;
+
+  return res;
+}
+
+
+/*---------------------------------------.
+| Create a list containing a <> at LOC.  |
+`---------------------------------------*/
+
+symbol_list *
+symbol_list_default_tagless_new (location loc)
+{
+  symbol_list *res = xmalloc (sizeof *res);
+
+  res->content_type = SYMLIST_DEFAULT_TAGLESS;
+  res->location = res->sym_loc = loc;
+  res->named_ref = NULL;
+  res->next = NULL;
+
+  return res;
+}
+
+
+/*-----------------------------------------------------------------------.
+| Print this list, for which every content_type must be SYMLIST_SYMBOL.  |
+`-----------------------------------------------------------------------*/
 
 void
-symbol_list_print (const symbol_list *l, FILE *f)
+symbol_list_syms_print (const symbol_list *l, FILE *f)
 {
-  for (/* Nothing. */; l && l->sym; l = l->next)
+  for (/* Nothing. */; l && l->content.sym; l = l->next)
     {
-      symbol_print (l->sym, f);
-      fprintf (stderr, l->used ? " used" : " unused");
-      if (l && l->sym)
+      symbol_print (l->content.sym, f);
+      fprintf (stderr, l->action_props.is_value_used ? " used" : " unused");
+      if (l && l->content.sym)
 	fprintf (f, ", ");
     }
 }
 
 
-/*---------------------------------.
-| Prepend SYM at LOC to the LIST.  |
-`---------------------------------*/
+/*---------------------------.
+| Prepend NODE to the LIST.  |
+`---------------------------*/
 
 symbol_list *
-symbol_list_prepend (symbol_list *list, symbol *sym, location loc)
+symbol_list_prepend (symbol_list *list, symbol_list *node)
 {
-  symbol_list *res = symbol_list_new (sym, loc);
-  res->next = list;
-  return res;
+  node->next = list;
+  return node;
 }
 
 
-/*-------------------------------------------------.
-| Free the LIST, but not the symbols it contains.  |
-`-------------------------------------------------*/
+/*-----------------------------------------------.
+| Free the LIST, but not the items it contains.  |
+`-----------------------------------------------*/
 
 void
 symbol_list_free (symbol_list *list)
 {
-  LIST_FREE (symbol_list, list);
+  symbol_list *node, *next;
+  for (node = list; node; node = next)
+    {
+      next = node->next;
+      named_ref_free (node->named_ref);
+      free (node);
+    }
 }
 
 
@@ -98,19 +161,21 @@
 | Return its length.  |
 `--------------------*/
 
-unsigned int
-symbol_list_length (const symbol_list *l)
+int
+symbol_list_length (symbol_list const *l)
 {
   int res = 0;
-  for (/* Nothing. */; l; l = l->next)
+  for (/* Nothing. */;
+       l && !(l->content_type == SYMLIST_SYMBOL && l->content.sym == NULL);
+       l = l->next)
     ++res;
   return res;
 }
 
 
-/*--------------------------------.
-| Get symbol N in symbol list L.  |
-`--------------------------------*/
+/*------------------------------.
+| Get item N in symbol list L.  |
+`------------------------------*/
 
 symbol_list *
 symbol_list_n_get (symbol_list *l, int n)
@@ -123,7 +188,8 @@
   for (i = 0; i < n; ++i)
     {
       l = l->next;
-      if (l == NULL || l->sym == NULL)
+      if (l == NULL
+          || (l->content_type == SYMLIST_SYMBOL && l->content.sym == NULL))
 	return NULL;
     }
 
@@ -145,18 +211,55 @@
       complain_at (loc, _("invalid $ value: $%d"), n);
       return NULL;
     }
-  return l->sym->type_name;
+  aver (l->content_type == SYMLIST_SYMBOL);
+  return l->content.sym->type_name;
 }
 
-
-/*----------------------------------------.
-| The symbol N in symbol list L is USED.  |
-`----------------------------------------*/
+bool
+symbol_list_null (symbol_list *node)
+{
+  return !node ||
+    (node->content_type == SYMLIST_SYMBOL && !(node->content.sym));
+}
 
 void
-symbol_list_n_used_set (symbol_list *l, int n, bool used)
+symbol_list_destructor_set (symbol_list *node, code_props const *destructor)
 {
-  l = symbol_list_n_get (l, n);
-  if (l)
-    l->used = used;
+  switch (node->content_type)
+    {
+      case SYMLIST_SYMBOL:
+        symbol_destructor_set (node->content.sym, destructor);
+        break;
+      case SYMLIST_TYPE:
+        semantic_type_destructor_set (
+          semantic_type_get (node->content.type_name), destructor);
+        break;
+      case SYMLIST_DEFAULT_TAGGED:
+        default_tagged_destructor_set (destructor);
+        break;
+      case SYMLIST_DEFAULT_TAGLESS:
+        default_tagless_destructor_set (destructor);
+        break;
+    }
+}
+
+void
+symbol_list_printer_set (symbol_list *node, code_props const *printer)
+{
+  switch (node->content_type)
+    {
+      case SYMLIST_SYMBOL:
+        symbol_printer_set (node->content.sym, printer);
+        break;
+      case SYMLIST_TYPE:
+        semantic_type_printer_set (
+          semantic_type_get (node->content.type_name), printer);
+        break;
+      case SYMLIST_DEFAULT_TAGGED:
+        default_tagged_printer_set (printer);
+        break;
+      case SYMLIST_DEFAULT_TAGLESS:
+        default_tagless_printer_set (printer);
+        break;
+    }
 }
diff --git a/src/symlist.h b/src/symlist.h
index 0423d01..63577f7 100644
--- a/src/symlist.h
+++ b/src/symlist.h
@@ -1,83 +1,129 @@
 /* Lists of symbols for Bison
 
-   Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005-2007, 2009-2012 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef SYMLIST_H_
 # define SYMLIST_H_
 
 # include "location.h"
+# include "scan-code.h"
 # include "symtab.h"
+# include "named-ref.h"
 
 /* A list of symbols, used during the parsing to store the rules.  */
 typedef struct symbol_list
 {
-  /* The symbol.  */
-  symbol *sym;
+  /**
+   * Whether this node contains a symbol, a semantic type, a \c <*>, or a
+   * \c <>.
+   */
+  enum {
+    SYMLIST_SYMBOL, SYMLIST_TYPE,
+    SYMLIST_DEFAULT_TAGGED, SYMLIST_DEFAULT_TAGLESS
+  } content_type;
+  union {
+    /**
+     * The symbol or \c NULL iff
+     * <tt>symbol_list::content_type = SYMLIST_SYMBOL</tt>.
+     */
+    symbol *sym;
+    /**
+     * The semantic type iff <tt>symbol_list::content_type = SYMLIST_TYPE</tt>.
+     */
+    uniqstr type_name;
+  } content;
   location location;
 
-  /* If this symbol is the generated lhs for a mid-rule, a pointer to
-     that mid-rule.  */
+  /* Proper location of the symbol, not all the rule */
+  location sym_loc;
+
+  /* If this symbol is the generated lhs for a midrule but this is the rule in
+     whose rhs it appears, MIDRULE = a pointer to that midrule.  */
   struct symbol_list *midrule;
 
-  /* The action is attached to the LHS of a rule. */
-  const char *action;
-  location action_location;
+  /* If this symbol is the generated lhs for a midrule and this is that
+     midrule, MIDRULE_PARENT_RULE = a pointer to the rule in whose rhs it
+     appears, and MIDRULE_PARENT_RHS_INDEX = its rhs index (1-origin) in the
+     parent rule.  */
+  struct symbol_list *midrule_parent_rule;
+  int midrule_parent_rhs_index;
 
-  /* Whether this symbol's value is used in the current action. */
-  bool used;
+  /* The action is attached to the LHS of a rule, but action properties for
+   * each RHS are also stored here.  */
+  code_props action_props;
 
   /* Precedence/associativity.  */
   symbol *ruleprec;
   int dprec;
   int merger;
+  location merger_declaration_location;
+
+  /* Named reference. */
+  named_ref *named_ref;
 
   /* The list.  */
   struct symbol_list *next;
 } symbol_list;
 
 
-/* Create a list containing SYM at LOC.  */
-symbol_list *symbol_list_new (symbol *sym, location loc);
+/** Create a list containing \c sym at \c loc.  */
+symbol_list *symbol_list_sym_new (symbol *sym, location loc);
 
-/* Print it.  */
-void symbol_list_print (const symbol_list *l, FILE *f);
+/** Create a list containing \c type_name at \c loc.  */
+symbol_list *symbol_list_type_new (uniqstr type_name, location loc);
 
-/* Prepend SYM at LOC to the LIST.  */
-symbol_list *symbol_list_prepend (symbol_list *l,
-				  symbol *sym,
-				  location loc);
+/** Create a list containing a \c <*> at \c loc.  */
+symbol_list *symbol_list_default_tagged_new (location loc);
+/** Create a list containing a \c <> at \c loc.  */
+symbol_list *symbol_list_default_tagless_new (location loc);
 
-/* Free the LIST, but not the symbols it contains.  */
-void symbol_list_free (symbol_list *l);
+/** Print this list.
 
-/* Return its length. */
-unsigned int symbol_list_length (const symbol_list *l);
+  \pre For every node \c n in the list, <tt>n->content_type =
+  SYMLIST_SYMBOL</tt>.  */
+void symbol_list_syms_print (const symbol_list *l, FILE *f);
 
-/* Get symbol N in symbol list L.  */
+/** Prepend \c node to \c list.  */
+symbol_list *symbol_list_prepend (symbol_list *list, symbol_list *node);
+
+/** Free \c list, but not the items it contains.  */
+void symbol_list_free (symbol_list *list);
+
+/** Return the length of \c l. */
+int symbol_list_length (symbol_list const *l);
+
+/** Get item \c n in symbol list \c l.  */
 symbol_list *symbol_list_n_get (symbol_list *l, int n);
 
 /* Get the data type (alternative in the union) of the value for
    symbol N in rule RULE.  */
 uniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n);
 
-/* The symbol N in symbol list L is USED.  */
-void symbol_list_n_used_set (symbol_list *l, int n, bool used);
+/* Check whether the node is a border element of a rule. */
+bool symbol_list_null (symbol_list *node);
+
+/** Set the \c \%destructor for \c node as \c code at \c loc.  */
+void symbol_list_destructor_set (symbol_list *node,
+                                 code_props const *destructor);
+
+/** Set the \c \%printer for \c node as \c code at \c loc.  */
+void symbol_list_printer_set (symbol_list *node,
+                              code_props const *printer);
 
 #endif /* !SYMLIST_H_ */
diff --git a/src/symtab.c b/src/symtab.c
index ef59c6e..56cfe51 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -1,35 +1,39 @@
 /* Symbol table manager for Bison.
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002, 2004, 2005, 2006 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2002, 2004-2012 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
 #include <hash.h>
-#include <quotearg.h>
 
 #include "complain.h"
 #include "gram.h"
 #include "symtab.h"
 
+/*-------------------------------------------------------------------.
+| Symbols sorted by tag.  Allocated by the first invocation of       |
+| symbols_do, after which no more symbols should be created.         |
+`-------------------------------------------------------------------*/
+
+static symbol **symbols_sorted = NULL;
+
 /*------------------------.
 | Distinguished symbols.  |
 `------------------------*/
@@ -41,6 +45,15 @@
 symbol *startsymbol = NULL;
 location startsymbol_location;
 
+/*---------------------------------------.
+| Default %destructor's and %printer's.  |
+`---------------------------------------*/
+
+static code_props default_tagged_destructor = CODE_PROPS_NONE_INIT;
+static code_props default_tagless_destructor = CODE_PROPS_NONE_INIT;
+static code_props default_tagged_printer = CODE_PROPS_NONE_INIT;
+static code_props default_tagless_printer = CODE_PROPS_NONE_INIT;
+
 /*---------------------------------.
 | Create a new symbol, named TAG.  |
 `---------------------------------*/
@@ -51,12 +64,19 @@
   symbol *res = xmalloc (sizeof *res);
 
   uniqstr_assert (tag);
+
+  /* If the tag is not a string (starts with a double quote), check
+     that it is valid for Yacc. */
+  if (tag[0] != '\"' && tag[0] != '\'' && mbschr (tag, '-'))
+    yacc_at (loc, _("POSIX Yacc forbids dashes in symbol names: %s"),
+             tag);
+
   res->tag = tag;
   res->location = loc;
 
   res->type_name = NULL;
-  res->destructor = NULL;
-  res->printer = NULL;
+  code_props_none_init (&res->destructor);
+  code_props_none_init (&res->printer);
 
   res->number = NUMBER_UNDEFINED;
   res->prec = 0;
@@ -74,6 +94,23 @@
   return res;
 }
 
+/*----------------------------------------.
+| Create a new semantic type, named TAG.  |
+`----------------------------------------*/
+
+static semantic_type *
+semantic_type_new (uniqstr tag)
+{
+  semantic_type *res = xmalloc (sizeof *res);
+
+  uniqstr_assert (tag);
+  res->tag = tag;
+  code_props_none_init (&res->destructor);
+  code_props_none_init (&res->printer);
+
+  return res;
+}
+
 
 /*-----------------.
 | Print a symbol.  |
@@ -83,6 +120,10 @@
   if (s->Attr)						\
     fprintf (f, " %s { %s }", #Attr, s->Attr)
 
+#define SYMBOL_CODE_PRINT(Attr)                         \
+  if (s->Attr.code)                                     \
+    fprintf (f, " %s { %s }", #Attr, s->Attr.code)
+
 void
 symbol_print (symbol *s, FILE *f)
 {
@@ -90,14 +131,15 @@
     {
       fprintf (f, "\"%s\"", s->tag);
       SYMBOL_ATTR_PRINT (type_name);
-      SYMBOL_ATTR_PRINT (destructor);
-      SYMBOL_ATTR_PRINT (printer);
+      SYMBOL_CODE_PRINT (destructor);
+      SYMBOL_CODE_PRINT (printer);
     }
   else
     fprintf (f, "<NULL>");
 }
 
 #undef SYMBOL_ATTR_PRINT
+#undef SYMBOL_CODE_PRINT
 
 /*------------------------------------------------------------------.
 | Complain that S's WHAT is redeclared at SECOND, and was first set |
@@ -105,12 +147,26 @@
 `------------------------------------------------------------------*/
 
 static void
-redeclaration (symbol* s, const char *what, location first, location second)
+symbol_redeclaration (symbol *s, const char *what, location first,
+                      location second)
 {
-  complain_at (second, _("%s redeclaration for %s"), what, s->tag);
-  complain_at (first, _("first declaration"));
+  unsigned i = 0;
+  complain_at_indent (second, &i, _("%s redeclaration for %s"), what, s->tag);
+  i += SUB_INDENT;
+  complain_at_indent (first, &i, _("previous declaration"));
 }
 
+static void
+semantic_type_redeclaration (semantic_type *s, const char *what, location first,
+                             location second)
+{
+  unsigned i = 0;
+  complain_at_indent (second, &i, _("%s redeclaration for <%s>"), what, s->tag);
+  i += SUB_INDENT;
+  complain_at_indent (first, &i, _("previous declaration"));
+}
+
+
 
 /*-----------------------------------------------------------------.
 | Set the TYPE_NAME associated with SYM.  Does nothing if passed 0 |
@@ -123,47 +179,123 @@
   if (type_name)
     {
       if (sym->type_name)
-	redeclaration (sym, "%type", sym->type_location, loc);
+	symbol_redeclaration (sym, "%type", sym->type_location, loc);
       uniqstr_assert (type_name);
       sym->type_name = type_name;
       sym->type_location = loc;
     }
 }
 
-
-/*------------------------------------------------------------------.
-| Set the DESTRUCTOR associated with SYM.  Do nothing if passed 0.  |
-`------------------------------------------------------------------*/
+/*-----------------------------------------.
+| Set the DESTRUCTOR associated with SYM.  |
+`-----------------------------------------*/
 
 void
-symbol_destructor_set (symbol *sym, const char *destructor, location loc)
+symbol_destructor_set (symbol *sym, code_props const *destructor)
 {
-  if (destructor)
-    {
-      if (sym->destructor)
-	redeclaration (sym, "%destructor", sym->destructor_location, loc);
-      sym->destructor = destructor;
-      sym->destructor_location = loc;
-    }
+  if (sym->destructor.code)
+    symbol_redeclaration (sym, "%destructor", sym->destructor.location,
+                          destructor->location);
+  sym->destructor = *destructor;
 }
 
-
-/*---------------------------------------------------------------.
-| Set the PRINTER associated with SYM.  Do nothing if passed 0.  |
-`---------------------------------------------------------------*/
+/*------------------------------------------.
+| Set the DESTRUCTOR associated with TYPE.  |
+`------------------------------------------*/
 
 void
-symbol_printer_set (symbol *sym, const char *printer, location loc)
+semantic_type_destructor_set (semantic_type *type,
+                              code_props const *destructor)
 {
-  if (printer)
-    {
-      if (sym->printer)
-	redeclaration (sym, "%printer", sym->destructor_location, loc);
-      sym->printer = printer;
-      sym->printer_location = loc;
-    }
+  if (type->destructor.code)
+    semantic_type_redeclaration (type, "%destructor",
+                                 type->destructor.location,
+                                 destructor->location);
+  type->destructor = *destructor;
 }
 
+/*---------------------------------------.
+| Get the computed %destructor for SYM.  |
+`---------------------------------------*/
+
+code_props const *
+symbol_destructor_get (symbol const *sym)
+{
+  /* Per-symbol %destructor.  */
+  if (sym->destructor.code)
+    return &sym->destructor;
+
+  /* Per-type %destructor.  */
+  if (sym->type_name)
+    {
+      code_props const *destructor =
+        &semantic_type_get (sym->type_name)->destructor;
+      if (destructor->code)
+        return destructor;
+    }
+
+  /* Apply default %destructor's only to user-defined symbols.  */
+  if (sym->tag[0] == '$' || sym == errtoken)
+    return &code_props_none;
+
+  if (sym->type_name)
+    return &default_tagged_destructor;
+  return &default_tagless_destructor;
+}
+
+/*--------------------------------------.
+| Set the PRINTER associated with SYM.  |
+`--------------------------------------*/
+
+void
+symbol_printer_set (symbol *sym, code_props const *printer)
+{
+  if (sym->printer.code)
+    symbol_redeclaration (sym, "%printer",
+                          sym->printer.location, printer->location);
+  sym->printer = *printer;
+}
+
+/*---------------------------------------.
+| Set the PRINTER associated with TYPE.  |
+`---------------------------------------*/
+
+void
+semantic_type_printer_set (semantic_type *type, code_props const *printer)
+{
+  if (type->printer.code)
+    semantic_type_redeclaration (type, "%printer",
+                                 type->printer.location, printer->location);
+  type->printer = *printer;
+}
+
+/*------------------------------------.
+| Get the computed %printer for SYM.  |
+`------------------------------------*/
+
+code_props const *
+symbol_printer_get (symbol const *sym)
+{
+  /* Per-symbol %printer.  */
+  if (sym->printer.code)
+    return &sym->printer;
+
+  /* Per-type %printer.  */
+  if (sym->type_name)
+    {
+      code_props const *printer = &semantic_type_get (sym->type_name)->printer;
+      if (printer->code)
+        return printer;
+    }
+
+  /* Apply the default %printer only to user-defined symbols.  */
+  if (sym->tag[0] == '$' || sym == errtoken)
+    return &code_props_none;
+
+  if (sym->type_name)
+    return &default_tagged_printer;
+  return &default_tagless_printer;
+}
 
 /*-----------------------------------------------------------------.
 | Set the PRECEDENCE associated with SYM.  Does nothing if invoked |
@@ -176,7 +308,8 @@
   if (a != undef_assoc)
     {
       if (sym->prec != 0)
-	redeclaration (sym, assoc_to_string (a), sym->prec_location, loc);
+	symbol_redeclaration (sym, assoc_to_string (a), sym->prec_location,
+                              loc);
       sym->prec = prec;
       sym->assoc = a;
       sym->prec_location = loc;
@@ -223,21 +356,26 @@
 void
 symbol_user_token_number_set (symbol *sym, int user_token_number, location loc)
 {
-  assert (sym->class == token_sym);
+  int *user_token_numberp;
 
-  if (sym->user_token_number != USER_NUMBER_UNDEFINED
-      && sym->user_token_number != user_token_number)
+  if (sym->user_token_number != USER_NUMBER_HAS_STRING_ALIAS)
+    user_token_numberp = &sym->user_token_number;
+  else
+    user_token_numberp = &sym->alias->user_token_number;
+  if (*user_token_numberp != USER_NUMBER_UNDEFINED
+      && *user_token_numberp != user_token_number)
     complain_at (loc, _("redefining user token number of %s"), sym->tag);
 
-  sym->user_token_number = user_token_number;
+  *user_token_numberp = user_token_number;
   /* User defined $end token? */
   if (user_token_number == 0)
     {
       endtoken = sym;
-      endtoken->number = 0;
       /* It is always mapped to 0, so it was already counted in
 	 NTOKENS.  */
-      --ntokens;
+      if (endtoken->number != NUMBER_UNDEFINED)
+        --ntokens;
+      endtoken->number = 0;
     }
 }
 
@@ -270,34 +408,24 @@
 }
 
 
-/*------------------------------------------------------------------.
-| Declare the new symbol SYM.  Make it an alias of SYMVAL, and type |
-| SYMVAL with SYM's type.                                           |
-`------------------------------------------------------------------*/
-
 void
-symbol_make_alias (symbol *sym, symbol *symval, location loc)
+symbol_make_alias (symbol *sym, symbol *str, location loc)
 {
-  if (symval->alias)
-    warn_at (loc, _("symbol `%s' used more than once as a literal string"),
-	     symval->tag);
+  if (str->alias)
+    warn_at (loc, _("symbol %s used more than once as a literal string"),
+             str->tag);
   else if (sym->alias)
-    warn_at (loc, _("symbol `%s' given more than one literal string"),
-	     sym->tag);
+    warn_at (loc, _("symbol %s given more than one literal string"),
+             sym->tag);
   else
     {
-      symval->class = token_sym;
-      symval->user_token_number = sym->user_token_number;
-      sym->user_token_number = USER_NUMBER_ALIAS;
-      symval->alias = sym;
-      sym->alias = symval;
-      /* sym and symval combined are only one symbol.  */
-      nsyms--;
-      ntokens--;
-      assert (ntokens == sym->number || ntokens == symval->number);
-      sym->number = symval->number =
-	(symval->number < sym->number) ? symval->number : sym->number;
-      symbol_type_set (symval, sym->type_name, loc);
+      str->class = token_sym;
+      str->user_token_number = sym->user_token_number;
+      sym->user_token_number = USER_NUMBER_HAS_STRING_ALIAS;
+      str->alias = sym;
+      sym->alias = str;
+      str->number = sym->number;
+      symbol_type_set (str, sym->type_name, loc);
     }
 }
 
@@ -310,48 +438,47 @@
 static inline void
 symbol_check_alias_consistency (symbol *this)
 {
-  symbol *alias = this;
-  symbol *orig  = this->alias;
+  symbol *sym = this;
+  symbol *str = this->alias;
 
-  /* Check only those that _are_ the aliases.  */
-  if (!(this->alias && this->user_token_number == USER_NUMBER_ALIAS))
+  /* Check only the symbol in the symbol-string pair.  */
+  if (!(this->alias
+        && this->user_token_number == USER_NUMBER_HAS_STRING_ALIAS))
     return;
 
-  if (orig->type_name != alias->type_name)
+  if (str->type_name != sym->type_name)
     {
-      if (orig->type_name)
-	symbol_type_set (alias, orig->type_name, orig->type_location);
+      if (str->type_name)
+	symbol_type_set (sym, str->type_name, str->type_location);
       else
-	symbol_type_set (orig, alias->type_name, alias->type_location);
+	symbol_type_set (str, sym->type_name, sym->type_location);
     }
 
 
-  if (orig->destructor || alias->destructor)
+  if (str->destructor.code || sym->destructor.code)
     {
-      if (orig->destructor)
-	symbol_destructor_set (alias, orig->destructor,
-			       orig->destructor_location);
+      if (str->destructor.code)
+	symbol_destructor_set (sym, &str->destructor);
       else
-	symbol_destructor_set (orig, alias->destructor,
-			       alias->destructor_location);
+	symbol_destructor_set (str, &sym->destructor);
     }
 
-  if (orig->printer || alias->printer)
+  if (str->printer.code || sym->printer.code)
     {
-      if (orig->printer)
-	symbol_printer_set (alias, orig->printer, orig->printer_location);
+      if (str->printer.code)
+	symbol_printer_set (sym, &str->printer);
       else
-	symbol_printer_set (orig, alias->printer, alias->printer_location);
+	symbol_printer_set (str, &sym->printer);
     }
 
-  if (alias->prec || orig->prec)
+  if (sym->prec || str->prec)
     {
-      if (orig->prec)
-	symbol_precedence_set (alias, orig->prec, orig->assoc,
-			       orig->prec_location);
+      if (str->prec)
+	symbol_precedence_set (sym, str->prec, str->assoc,
+			       str->prec_location);
       else
-	symbol_precedence_set (orig, alias->prec, alias->assoc,
-			       alias->prec_location);
+	symbol_precedence_set (str, sym->prec, sym->assoc,
+			       sym->prec_location);
     }
 }
 
@@ -372,31 +499,11 @@
 static inline bool
 symbol_pack (symbol *this)
 {
+  aver (this->number != NUMBER_UNDEFINED);
   if (this->class == nterm_sym)
-    {
-      this->number += ntokens;
-    }
-  else if (this->alias)
-    {
-      /* This symbol and its alias are a single token defn.
-	 Allocate a tokno, and assign to both check agreement of
-	 prec and assoc fields and make both the same */
-      if (this->number == NUMBER_UNDEFINED)
-	{
-	  if (this == endtoken || this->alias == endtoken)
-	    this->number = this->alias->number = 0;
-	  else
-	    {
-	      assert (this->alias->number != NUMBER_UNDEFINED);
-	      this->number = this->alias->number;
-	    }
-	}
-      /* Do not do processing below for USER_NUMBER_ALIASes.  */
-      if (this->user_token_number == USER_NUMBER_ALIAS)
-	return true;
-    }
-  else /* this->class == token_sym */
-    assert (this->number != NUMBER_UNDEFINED);
+    this->number += ntokens;
+  else if (this->user_token_number == USER_NUMBER_HAS_STRING_ALIAS)
+    return true;
 
   symbols[this->number] = this;
   return true;
@@ -409,7 +516,29 @@
 }
 
 
+static void
+user_token_number_redeclaration (int num, symbol *first, symbol *second)
+{
+  unsigned i = 0;
+  /* User token numbers are not assigned during the parsing, but in a
+     second step, via a traversal of the symbol table sorted on tag.
 
+     However, error messages make more sense if we keep the first
+     declaration first.  */
+  if (location_cmp (first->location, second->location) > 0)
+    {
+      symbol* tmp = first;
+      first = second;
+      second = tmp;
+    }
+  complain_at_indent (second->location, &i,
+                      _("user token number %d redeclaration for %s"),
+                      num, second->tag);
+  i += SUB_INDENT;
+  complain_at_indent (first->location, &i,
+                      _("previous declaration for %s"),
+                      first->tag);
+}
 
 /*--------------------------------------------------.
 | Put THIS in TOKEN_TRANSLATIONS if it is a token.  |
@@ -420,14 +549,14 @@
 {
   /* Non-terminal? */
   if (this->class == token_sym
-      && this->user_token_number != USER_NUMBER_ALIAS)
+      && this->user_token_number != USER_NUMBER_HAS_STRING_ALIAS)
     {
       /* A token which translation has already been set? */
       if (token_translations[this->user_token_number] != undeftoken->number)
-	complain_at (this->location,
-		     _("tokens %s and %s both assigned number %d"),
-		     symbols[token_translations[this->user_token_number]]->tag,
-		     this->tag, this->user_token_number);
+	user_token_number_redeclaration
+          (this->user_token_number,
+           symbols[token_translations[this->user_token_number]],
+           this);
 
       token_translations[this->user_token_number] = this->number;
     }
@@ -442,14 +571,15 @@
 }
 
 
-/*----------------------.
-| A symbol hash table.  |
-`----------------------*/
+/*---------------------------------------.
+| Symbol and semantic type hash tables.  |
+`---------------------------------------*/
 
-/* Initial capacity of symbols hash table.  */
+/* Initial capacity of symbol and semantic type hash table.  */
 #define HT_INITIAL_CAPACITY 257
 
 static struct hash_table *symbol_table = NULL;
+static struct hash_table *semantic_type_table = NULL;
 
 static inline bool
 hash_compare_symbol (const symbol *m1, const symbol *m2)
@@ -458,12 +588,25 @@
   return UNIQSTR_EQ (m1->tag, m2->tag);
 }
 
+static inline bool
+hash_compare_semantic_type (const semantic_type *m1, const semantic_type *m2)
+{
+  /* Since names are unique, we can compare the pointers themselves.  */
+  return UNIQSTR_EQ (m1->tag, m2->tag);
+}
+
 static bool
 hash_symbol_comparator (void const *m1, void const *m2)
 {
   return hash_compare_symbol (m1, m2);
 }
 
+static bool
+hash_semantic_type_comparator (void const *m1, void const *m2)
+{
+  return hash_compare_semantic_type (m1, m2);
+}
+
 static inline size_t
 hash_symbol (const symbol *m, size_t tablesize)
 {
@@ -471,12 +614,24 @@
   return ((uintptr_t) m->tag) % tablesize;
 }
 
+static inline size_t
+hash_semantic_type (const semantic_type *m, size_t tablesize)
+{
+  /* Since names are unique, we can hash the pointer itself.  */
+  return ((uintptr_t) m->tag) % tablesize;
+}
+
 static size_t
 hash_symbol_hasher (void const *m, size_t tablesize)
 {
   return hash_symbol (m, tablesize);
 }
 
+static size_t
+hash_semantic_type_hasher (void const *m, size_t tablesize)
+{
+  return hash_semantic_type (m, tablesize);
+}
 
 /*-------------------------------.
 | Create the symbol hash table.  |
@@ -490,6 +645,62 @@
 				  hash_symbol_hasher,
 				  hash_symbol_comparator,
 				  free);
+  semantic_type_table = hash_initialize (HT_INITIAL_CAPACITY,
+				         NULL,
+				         hash_semantic_type_hasher,
+				         hash_semantic_type_comparator,
+				         free);
+}
+
+
+/*----------------------------------------------------------------.
+| Find the symbol named KEY, and return it.  If it does not exist |
+| yet, create it.                                                 |
+`----------------------------------------------------------------*/
+
+symbol *
+symbol_from_uniqstr (const uniqstr key, location loc)
+{
+  symbol probe;
+  symbol *entry;
+
+  probe.tag = key;
+  entry = hash_lookup (symbol_table, &probe);
+
+  if (!entry)
+    {
+      /* First insertion in the hash. */
+      aver (!symbols_sorted);
+      entry = symbol_new (key, loc);
+      if (!hash_insert (symbol_table, entry))
+        xalloc_die ();
+    }
+  return entry;
+}
+
+
+/*-----------------------------------------------------------------------.
+| Find the semantic type named KEY, and return it.  If it does not exist |
+| yet, create it.                                                        |
+`-----------------------------------------------------------------------*/
+
+semantic_type *
+semantic_type_from_uniqstr (const uniqstr key)
+{
+  semantic_type probe;
+  semantic_type *entry;
+
+  probe.tag = key;
+  entry = hash_lookup (semantic_type_table, &probe);
+
+  if (!entry)
+    {
+      /* First insertion in the hash. */
+      entry = semantic_type_new (key);
+      if (!hash_insert (semantic_type_table, entry))
+        xalloc_die ();
+    }
+  return entry;
 }
 
 
@@ -501,20 +712,19 @@
 symbol *
 symbol_get (const char *key, location loc)
 {
-  symbol probe;
-  symbol *entry;
+  return symbol_from_uniqstr (uniqstr_new (key), loc);
+}
 
-  key = uniqstr_new (key);
-  probe.tag = key;
-  entry = hash_lookup (symbol_table, &probe);
 
-  if (!entry)
-    {
-      /* First insertion in the hash. */
-      entry = symbol_new (key, loc);
-      hash_insert (symbol_table, entry);
-    }
-  return entry;
+/*-----------------------------------------------------------------------.
+| Find the semantic type named KEY, and return it.  If it does not exist |
+| yet, create it.                                                        |
+`-----------------------------------------------------------------------*/
+
+semantic_type *
+semantic_type_get (const char *key)
+{
+  return semantic_type_from_uniqstr (uniqstr_new (key));
 }
 
 
@@ -532,13 +742,18 @@
 
   symbol *sym;
 
-  sprintf (buf, "@%d", ++dummy_count);
+  sprintf (buf, "$@%d", ++dummy_count);
   sym = symbol_get (buf, loc);
   sym->class = nterm_sym;
   sym->number = nvars++;
   return sym;
 }
 
+bool
+symbol_is_dummy (const symbol *sym)
+{
+  return sym->tag[0] == '@' || (sym->tag[0] == '$' && sym->tag[1] == '@');
+}
 
 /*-------------------.
 | Free the symbols.  |
@@ -548,7 +763,9 @@
 symbols_free (void)
 {
   hash_free (symbol_table);
+  hash_free (semantic_type_table);
   free (symbols);
+  free (symbols_sorted);
 }
 
 
@@ -557,13 +774,36 @@
 | terminals.                                                     |
 `---------------------------------------------------------------*/
 
+static int
+symbols_cmp (symbol const *a, symbol const *b)
+{
+  return strcmp (a->tag, b->tag);
+}
+
+static int
+symbols_cmp_qsort (void const *a, void const *b)
+{
+  return symbols_cmp (*(symbol * const *)a, *(symbol * const *)b);
+}
+
 static void
 symbols_do (Hash_processor processor, void *processor_data)
 {
-  hash_do_for_each (symbol_table, processor, processor_data);
+  size_t count = hash_get_n_entries (symbol_table);
+  if (!symbols_sorted)
+    {
+      symbols_sorted = xnmalloc (count, sizeof *symbols_sorted);
+      hash_get_entries (symbol_table, (void**)symbols_sorted, count);
+      qsort (symbols_sorted, count, sizeof *symbols_sorted,
+             symbols_cmp_qsort);
+    }
+  {
+    size_t i;
+    for (i = 0; i < count; ++i)
+      processor (symbols_sorted[i], processor_data);
+  }
 }
 
-
 /*--------------------------------------------------------------.
 | Check that all the symbols are defined.  Report any undefined |
 | symbols and consider them nonterminals.                       |
@@ -639,11 +879,35 @@
 void
 symbols_pack (void)
 {
-  symbols = xcalloc (nsyms, sizeof *symbols);
-
   symbols_do (symbol_check_alias_consistency_processor, NULL);
+
+  symbols = xcalloc (nsyms, sizeof *symbols);
   symbols_do (symbol_pack_processor, NULL);
 
+  /* Aliases leave empty slots in symbols, so remove them.  */
+  {
+    int writei;
+    int readi;
+    int nsyms_old = nsyms;
+    for (writei = 0, readi = 0; readi < nsyms_old; readi += 1)
+      {
+        if (symbols[readi] == NULL)
+          {
+            nsyms -= 1;
+            ntokens -= 1;
+          }
+        else
+          {
+            symbols[writei] = symbols[readi];
+            symbols[writei]->number = writei;
+            if (symbols[writei]->alias)
+              symbols[writei]->alias->number = writei;
+            writei += 1;
+          }
+      }
+  }
+  symbols = xnrealloc (symbols, nsyms, sizeof *symbols);
+
   symbols_token_translations_init ();
 
   if (startsymbol->class == unknown_sym)
@@ -655,3 +919,68 @@
 	      _("the start symbol %s is a token"),
 	      startsymbol->tag);
 }
+
+
+/*--------------------------------------------------.
+| Set default tagged/tagless %destructor/%printer.  |
+`--------------------------------------------------*/
+
+void
+default_tagged_destructor_set (code_props const *destructor)
+{
+  if (default_tagged_destructor.code)
+    {
+      unsigned i = 0;
+      complain_at_indent (destructor->location, &i,
+                          _("redeclaration for default tagged %%destructor"));
+      i += SUB_INDENT;
+      complain_at_indent (default_tagged_destructor.location, &i,
+		          _("previous declaration"));
+    }
+  default_tagged_destructor = *destructor;
+}
+
+void
+default_tagless_destructor_set (code_props const *destructor)
+{
+  if (default_tagless_destructor.code)
+    {
+      unsigned i = 0;
+      complain_at_indent (destructor->location, &i,
+                          _("redeclaration for default tagless %%destructor"));
+      i += SUB_INDENT;
+      complain_at_indent (default_tagless_destructor.location, &i,
+                          _("previous declaration"));
+    }
+  default_tagless_destructor = *destructor;
+}
+
+void
+default_tagged_printer_set (code_props const *printer)
+{
+  if (default_tagged_printer.code)
+    {
+      unsigned i = 0;
+      complain_at_indent (printer->location, &i,
+                          _("redeclaration for default tagged %%printer"));
+      i += SUB_INDENT;
+      complain_at_indent (default_tagged_printer.location, &i,
+		          _("previous declaration"));
+    }
+  default_tagged_printer = *printer;
+}
+
+void
+default_tagless_printer_set (code_props const *printer)
+{
+  if (default_tagless_printer.code)
+    {
+      unsigned i = 0;
+      complain_at_indent (printer->location, &i,
+                          _("redeclaration for default tagless %%printer"));
+      i += SUB_INDENT;
+      complain_at_indent (default_tagless_printer.location, &i,
+		          _("previous declaration"));
+    }
+  default_tagless_printer = *printer;
+}
diff --git a/src/symtab.h b/src/symtab.h
index 0f852b7..7d8cf98 100644
--- a/src/symtab.h
+++ b/src/symtab.h
@@ -1,46 +1,50 @@
 /* Definitions for symtab.c and callers, part of Bison.
 
-   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 1992, 2000-2002, 2004-2007, 2009-2012 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/**
+ * \file symtab.h
+ * \brief Manipulating ::symbol.
+ */
 
 #ifndef SYMTAB_H_
 # define SYMTAB_H_
 
 # include "assoc.h"
 # include "location.h"
+# include "scan-code.h"
 # include "uniqstr.h"
 
 /*----------.
 | Symbols.  |
 `----------*/
 
-/* Symbol classes.  */
+/** Symbol classes.  */
 typedef enum
 {
-  unknown_sym,
-  token_sym,		/* terminal symbol */
-  nterm_sym		/* non-terminal */
+  unknown_sym,          /**< Undefined.  */
+  token_sym,		/**< Terminal. */
+  nterm_sym		/**< Non-terminal. */
 } symbol_class;
 
 
-/* Internal token numbers. */
+/** Internal token numbers. */
 typedef int symbol_number;
 #define SYMBOL_NUMBER_MAXIMUM INT_MAX
 
@@ -51,22 +55,36 @@
    symbol_check_alias_consistency.  */
 struct symbol
 {
-  /* The key, name of the symbol.  */
+  /** The key, name of the symbol.  */
   uniqstr tag;
-  /* The location of its first occurrence.  */
+  /** The location of its first occurrence.  */
   location location;
 
-  /* Its %type and associated printer and destructor.  */
+  /** Its \c \%type.
+
+      Beware that this is the type_name as was entered by the user,
+      including silly things such as "]" if she entered "%token <]> t".
+      Therefore, when outputting type_name to M4, be sure to escape it
+      into "@}".  See quoted_output for instance.  */
   uniqstr type_name;
+
+  /** Its \c \%type's location.  */
   location type_location;
 
-  /* Does not own the memory. */
-  const char *destructor;
-  location destructor_location;
+  /** Any \c \%destructor declared specifically for this symbol.
 
-  /* Does not own the memory. */
-  const char *printer;
-  location printer_location;
+      Access this field only through <tt>symbol</tt>'s interface
+      functions.  For example, if <tt>symbol::destructor = NULL</tt>, a
+      default \c \%destructor or a per-type \c \%destructor might be
+      appropriate, and \c symbol_destructor_get will compute the
+      correct one.  */
+  code_props destructor;
+
+  /** Any \c \%printer declared specifically for this symbol.
+
+      Access this field only through <tt>symbol</tt>'s interface functions.
+      \sa symbol::destructor  */
+  code_props printer;
 
   symbol_number number;
   location prec_location;
@@ -74,89 +92,165 @@
   assoc assoc;
   int user_token_number;
 
-  /* Points to the other in the identifier-symbol pair for an alias.
-     Special value USER_NUMBER_ALIAS in the identifier half of the
-     identifier-symbol pair for an alias.  */
+  /* Points to the other in the symbol-string pair for an alias.
+     Special value USER_NUMBER_HAS_STRING_ALIAS in the symbol half of the
+     symbol-string pair for an alias.  */
   symbol *alias;
   symbol_class class;
   bool declared;
 };
 
-/* Undefined user number.  */
+/** Undefined user number.  */
 #define USER_NUMBER_UNDEFINED -1
 
-/* `symbol->user_token_number == USER_NUMBER_ALIAS' means this symbol
-   *has* (not is) a string literal alias.  For instance, `%token foo
+/* `symbol->user_token_number == USER_NUMBER_HAS_STRING_ALIAS' means
+   this symbol has a literal string alias.  For instance, `%token foo
    "foo"' has `"foo"' numbered regularly, and `foo' numbered as
-   USER_NUMBER_ALIAS.  */
-#define USER_NUMBER_ALIAS -9991
+   USER_NUMBER_HAS_STRING_ALIAS.  */
+#define USER_NUMBER_HAS_STRING_ALIAS -9991
 
 /* Undefined internal token number.  */
 #define NUMBER_UNDEFINED (-1)
 
-/* Print a symbol (for debugging). */
+/** Print a symbol (for debugging). */
 void symbol_print (symbol *s, FILE *f);
 
-/* Fetch (or create) the symbol associated to KEY.  */
+/** Fetch (or create) the symbol associated to KEY.  */
+symbol *symbol_from_uniqstr (const uniqstr key, location loc);
+
+/** Fetch (or create) the symbol associated to KEY.  */
 symbol *symbol_get (const char *key, location loc);
 
-/* Generate a dummy nonterminal, whose name cannot conflict with the
-   user's names.  */
+/** Generate a dummy nonterminal.
+
+   Its name cannot conflict with the user's names.  */
 symbol *dummy_symbol_get (location loc);
 
-/* Declare the new symbol SYM.  Make it an alias of SYMVAL.  */
-void symbol_make_alias (symbol *sym, symbol *symval, location loc);
+/** Is this a dummy nonterminal?  */
+bool symbol_is_dummy (const symbol *sym);
 
-/* Set the TYPE_NAME associated with SYM.  Do nothing if passed 0 as
-   TYPE_NAME.  */
+/**
+ * Make \c str the literal string alias of \c sym.  Copy token number,
+ * symbol number, and type from \c sym to \c str.
+ */
+void symbol_make_alias (symbol *sym, symbol *str, location loc);
+
+/** Set the \c type_name associated with \c sym.
+
+    Do nothing if passed 0 as \c type_name.  */
 void symbol_type_set (symbol *sym, uniqstr type_name, location loc);
 
-/* Set the DESTRUCTOR associated with SYM.  */
-void symbol_destructor_set (symbol *sym, const char *destructor, location loc);
+/** Set the \c destructor associated with \c sym.  */
+void symbol_destructor_set (symbol *sym, code_props const *destructor);
 
-/* Set the PRINTER associated with SYM.  */
-void symbol_printer_set (symbol *sym, const char *printer, location loc);
+/** Get the computed \c \%destructor for \c sym, which was initialized with
+    \c code_props_none_init if there's no \c \%destructor.  */
+code_props const *symbol_destructor_get (symbol const *sym);
 
-/* Set the PRECEDENCE associated with SYM.  Ensure that SYMBOL is a
-   terminal.  Do nothing if invoked with UNDEF_ASSOC as ASSOC.  */
+/** Set the \c printer associated with \c sym.  */
+void symbol_printer_set (symbol *sym, code_props const *printer);
+
+/** Get the computed \c \%printer for \c sym, which was initialized with
+    \c code_props_none_init if there's no \c \%printer.  */
+code_props const *symbol_printer_get (symbol const *sym);
+
+/* Set the \c precedence associated with \c sym.
+
+   Ensure that \a symbol is a terminal.
+   Do nothing if invoked with \c undef_assoc as \c assoc.  */
 void symbol_precedence_set (symbol *sym, int prec, assoc a, location loc);
 
-/* Set the CLASS associated with SYM.  */
+/** Set the \c class associated with \c sym.  */
 void symbol_class_set (symbol *sym, symbol_class class, location loc,
 		       bool declaring);
 
-/* Set the USER_TOKEN_NUMBER associated with SYM.  */
+/** Set the \c user_token_number associated with \c sym.  */
 void symbol_user_token_number_set (symbol *sym, int user_number, location loc);
 
 
-/* Distinguished symbols.  AXIOM is the real start symbol, that used
-   by the automaton.  STARTSYMBOL is the one specified by the user.
-   */
+/** The error token. */
 extern symbol *errtoken;
+/** The token for unknown tokens.  */
 extern symbol *undeftoken;
+/** The end of input token.  */
 extern symbol *endtoken;
+/** The genuine start symbol.
+
+   $accept: start-symbol $end */
 extern symbol *accept;
+
+/** The user start symbol. */
 extern symbol *startsymbol;
+/** The location of the \c \%start declaration.  */
 extern location startsymbol_location;
 
 
-/*---------------.
-| Symbol table.  |
-`---------------*/
+/*-----------------.
+| Semantic types.  |
+`-----------------*/
 
+/** A semantic type and its associated \c \%destructor and \c \%printer.
 
-/* Create the symbol table.  */
+   Access the fields of this struct only through the interface functions in
+   this file.  \sa symbol::destructor  */
+typedef struct {
+  /** The key, name of the semantic type.  */
+  uniqstr tag;
+
+  /** Any \c %destructor declared for this semantic type.  */
+  code_props destructor;
+  /** Any \c %printer declared for this semantic type.  */
+  code_props printer;
+} semantic_type;
+
+/** Fetch (or create) the semantic type associated to KEY.  */
+semantic_type *semantic_type_from_uniqstr (const uniqstr key);
+
+/** Fetch (or create) the semantic type associated to KEY.  */
+semantic_type *semantic_type_get (const char *key);
+
+/** Set the \c destructor associated with \c type.  */
+void semantic_type_destructor_set (semantic_type *type,
+                                   code_props const *destructor);
+
+/** Set the \c printer associated with \c type.  */
+void semantic_type_printer_set (semantic_type *type,
+                                code_props const *printer);
+
+/*----------------------------------.
+| Symbol and semantic type tables.  |
+`----------------------------------*/
+
+/** Create the symbol and semantic type tables.  */
 void symbols_new (void);
 
-/* Free all the memory allocated for symbols.  */
+/** Free all the memory allocated for symbols and semantic types.  */
 void symbols_free (void);
 
-/* Check that all the symbols are defined.  Report any undefined
-   symbols and consider them nonterminals.  */
+/** Check that all the symbols are defined.
+
+    Report any undefined symbols and consider them nonterminals.  */
 void symbols_check_defined (void);
 
-/* Perform various sanity checks, assign symbol numbers, and set up
-   TOKEN_TRANSLATIONS.  */
+/** Sanity checks and #token_translations construction.
+
+   Perform various sanity checks, assign symbol numbers, and set up
+   #token_translations.  */
 void symbols_pack (void);
 
+
+/*---------------------------------------.
+| Default %destructor's and %printer's.  |
+`---------------------------------------*/
+
+/** Set the default \c \%destructor for tagged values.  */
+void default_tagged_destructor_set (code_props const *destructor);
+/** Set the default \c \%destructor for tagless values.  */
+void default_tagless_destructor_set (code_props const *destructor);
+
+/** Set the default \c \%printer for tagged values.  */
+void default_tagged_printer_set (code_props const *printer);
+/** Set the default \c \%printer for tagless values.  */
+void default_tagless_printer_set (code_props const *printer);
+
 #endif /* !SYMTAB_H_ */
diff --git a/src/system.h b/src/system.h
index 6315790..35ff876 100644
--- a/src/system.h
+++ b/src/system.h
@@ -1,12 +1,11 @@
 /* System-dependent definitions for Bison.
 
-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
-   Software Foundation, Inc.
+   Copyright (C) 2000-2007, 2009-2012 Free Software Foundation, Inc.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, 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
@@ -14,188 +13,212 @@
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef BISON_SYSTEM_H
-#define BISON_SYSTEM_H
+# define BISON_SYSTEM_H
 
 /* flex 2.5.31 gratutiously defines macros like INT8_MIN.  But this
    runs afoul of pre-C99 compilers that have <inttypes.h> or
    <stdint.h>, which are included below if available.  It also runs
    afoul of pre-C99 compilers that define these macros in <limits.h>.  */
-#if ! defined __STDC_VERSION__ || __STDC_VERSION__ < 199901
-# undef INT8_MIN
-# undef INT16_MIN
-# undef INT32_MIN
-# undef INT8_MAX
-# undef INT16_MAX
-# undef UINT8_MAX
-# undef INT32_MAX
-# undef UINT16_MAX
-# undef UINT32_MAX
-#endif
+# if ! defined __STDC_VERSION__ || __STDC_VERSION__ < 199901
+#  undef INT8_MIN
+#  undef INT16_MIN
+#  undef INT32_MIN
+#  undef INT8_MAX
+#  undef INT16_MAX
+#  undef UINT8_MAX
+#  undef INT32_MAX
+#  undef UINT16_MAX
+#  undef UINT32_MAX
+# endif
 
-#include <limits.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "unlocked-io.h"
-
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-#if HAVE_UNISTD_H
+# include <limits.h>
+# include <stddef.h>
+# include <stdlib.h>
+# include <string.h>
 # include <unistd.h>
-#endif
-
-#if HAVE_INTTYPES_H
 # include <inttypes.h>
-#endif
-#if HAVE_STDINT_H
-# include <stdint.h>
-#endif
 
-#if ! HAVE_UINTPTR_T
+#define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
+#define STREQ(L, R)  (strcmp(L, R) == 0)
+#define STRNEQ(L, R) (!STREQ(L, R))
+
+# ifndef UINTPTR_MAX
 /* This isn't perfect, but it's good enough for Bison, which needs
    only to hash pointers.  */
 typedef size_t uintptr_t;
-#endif
+# endif
 
-#include <verify.h>
-#include <xalloc.h>
+/* Version mismatch. */
+# define EX_MISMATCH 63
 
+/*---------.
+| Gnulib.  |
+`---------*/
 
-/*---------------------.
-| Missing prototypes.  |
-`---------------------*/
-
-#include <stpcpy.h>
-
-/* From lib/basename.c. */
-char *base_name (char const *name);
+# include <unlocked-io.h>
+# include <verify.h>
+# include <xalloc.h>
 
 
 /*-----------------.
 | GCC extensions.  |
 `-----------------*/
 
-/* Use this to suppress gcc's `...may be used before initialized'
-   warnings.  */
-#ifdef lint
-# define IF_LINT(Code) Code
-#else
-# define IF_LINT(Code) /* empty */
-#endif
+/* Use PACIFY_CC to indicate that Code is unimportant to the logic of Bison
+   but that it is necessary for suppressing compiler warnings.  For example,
+   Code might be a variable initializer that's always overwritten before the
+   variable is used.
 
-#ifndef __attribute__
+   PACIFY_CC is intended to be useful only as a comment as it does not alter
+   Code.  It is tempting to redefine PACIFY_CC so that it will suppress Code
+   when configuring without --enable-gcc-warnings.  However, that would mean
+   that, for maintainers, Bison would compile with potentially less warnings
+   and safer logic than it would for users.  Due to the overhead of M4,
+   suppressing Code is unlikely to offer any significant improvement in
+   Bison's performance anyway.  */
+# define PACIFY_CC(Code) Code
+
+# ifndef __attribute__
 /* This feature is available in gcc versions 2.5 and later.  */
-# if (! defined __GNUC__ || __GNUC__ < 2 \
-      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__)
-#  define __attribute__(Spec) /* empty */
+#  if (! defined __GNUC__ || __GNUC__ < 2 \
+       || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+#   define __attribute__(Spec) /* empty */
+#  endif
 # endif
-#endif
 
 /* The __-protected variants of `format' and `printf' attributes
    are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __format__ format
-# define __printf__ printf
-#endif
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __format__ format
+#  define __printf__ printf
+# endif
 
-#ifndef ATTRIBUTE_NORETURN
-# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-#endif
+# ifndef ATTRIBUTE_NORETURN
+#  define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# endif
 
-#ifndef ATTRIBUTE_UNUSED
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif
+# ifndef ATTRIBUTE_UNUSED
+#  define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# endif
+
 
 /*------.
 | NLS.  |
 `------*/
 
-#include <locale.h>
+# include <locale.h>
 
-#include <gettext.h>
-#define _(Msgid)  gettext (Msgid)
-#define N_(Msgid) (Msgid)
-
-
-/*-------------------------------.
-| Fix broken compilation flags.  |
-`-------------------------------*/
-
-#ifndef LOCALEDIR
-# define LOCALEDIR "/usr/local/share/locale"
-#endif
+# include <gettext.h>
+# define _(Msgid)  gettext (Msgid)
+# define N_(Msgid) (Msgid)
 
 
 /*-----------.
 | Booleans.  |
 `-----------*/
 
-#include <stdbool.h>
+# include <stdbool.h>
+
+
+
+/*-------------.
+| Assertions.  |
+`-------------*/
+
+/* In the past, Bison defined aver to simply invoke abort in the case of
+   a failed assertion.  The rationale was that <assert.h>'s assertions
+   were too heavyweight and could be disabled too easily.  See
+   discussions at
+   <http://lists.gnu.org/archive/html/bison-patches/2006-01/msg00080.html>
+   <http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00111.html>.
+
+   However, normal assert output can be helpful during development and
+   in bug reports from users.  Moreover, it's not clear now that
+   <assert.h>'s assertions are significantly heavyweight.  Finally, if
+   users want to experiment with disabling assertions, it's debatable
+   whether it's our responsibility to stop them.  See discussion
+   starting at
+   <http://lists.gnu.org/archive/html/bison-patches/2009-09/msg00013.html>.
+
+   For now, we use assert but we call it aver throughout Bison in case
+   we later wish to try another scheme.
+*/
+# include <assert.h>
+# define aver assert
 
 
 /*-----------.
 | Obstacks.  |
 `-----------*/
 
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free  free
-#include <obstack.h>
+# define obstack_chunk_alloc xmalloc
+# define obstack_chunk_free  free
+# include <obstack.h>
 
-#define obstack_sgrow(Obs, Str) \
+# define obstack_sgrow(Obs, Str)                \
   obstack_grow (Obs, Str, strlen (Str))
 
-#define obstack_fgrow1(Obs, Format, Arg1)	\
-do {						\
-  char buf[4096];				\
-  sprintf (buf, Format, Arg1);			\
-  obstack_grow (Obs, buf, strlen (buf));	\
-} while (0)
+/* Output Str escaped for our postprocessing (i.e., escape M4 special
+   characters).
 
-#define obstack_fgrow2(Obs, Format, Arg1, Arg2)	\
-do {						\
-  char buf[4096];				\
-  sprintf (buf, Format, Arg1, Arg2);		\
-  obstack_grow (Obs, buf, strlen (buf));	\
-} while (0)
+   For instance "[foo]" -> "@{foo@}", "$$" -> "$][$][". */
 
-#define obstack_fgrow3(Obs, Format, Arg1, Arg2, Arg3)	\
-do {							\
-  char buf[4096];					\
-  sprintf (buf, Format, Arg1, Arg2, Arg3);		\
-  obstack_grow (Obs, buf, strlen (buf));		\
-} while (0)
+# define obstack_escape(Obs, Str)                       \
+  do {                                                  \
+    char const *p;                                      \
+    for (p = Str; *p; p++)                              \
+      switch (*p)                                       \
+        {                                               \
+        case '$': obstack_sgrow (Obs, "$]["); break;    \
+        case '@': obstack_sgrow (Obs, "@@" ); break;    \
+        case '[': obstack_sgrow (Obs, "@{" ); break;    \
+        case ']': obstack_sgrow (Obs, "@}" ); break;    \
+        default:  obstack_1grow (Obs, *p   ); break;    \
+        }                                               \
+  } while (0)
 
-#define obstack_fgrow4(Obs, Format, Arg1, Arg2, Arg3, Arg4)	\
-do {								\
-  char buf[4096];						\
-  sprintf (buf, Format, Arg1, Arg2, Arg3, Arg4);		\
-  obstack_grow (Obs, buf, strlen (buf));			\
-} while (0)
 
+/* Output Str both quoted for M4 (i.e., embed in [[...]]), and escaped
+   for our postprocessing (i.e., escape M4 special characters).  If
+   Str is empty (or NULL), output "[]" instead of "[[]]" as it make M4
+   programming easier (m4_ifval can be used).
+
+   For instance "[foo]" -> "[[@{foo@}]]", "$$" -> "[[$][$][]]". */
+
+# define obstack_quote(Obs, Str)                \
+  do {                                          \
+    char const* obstack_quote_p = Str;          \
+    if (obstack_quote_p && obstack_quote_p[0])  \
+      {                                         \
+        obstack_sgrow (Obs, "[[");              \
+        obstack_escape (Obs, obstack_quote_p);  \
+        obstack_sgrow (Obs, "]]");              \
+      }                                         \
+    else                                        \
+      obstack_sgrow (Obs, "[]");                \
+  } while (0)
+
+
+/* Append the ending 0, finish Obs, and return the string.  */
+
+# define obstack_finish0(Obs)                           \
+  (obstack_1grow (Obs, '\0'), (char *) obstack_finish (Obs))
 
 
 /*-----------------------------------------.
 | Extensions to use for the output files.  |
 `-----------------------------------------*/
 
-#ifndef OUTPUT_EXT
-# define OUTPUT_EXT ".output"
-#endif
+# ifndef OUTPUT_EXT
+#  define OUTPUT_EXT ".output"
+# endif
 
-#ifndef TAB_EXT
-# define TAB_EXT ".tab"
-#endif
-
-#ifndef DEFAULT_TMPDIR
-# define DEFAULT_TMPDIR "/tmp"
-#endif
+# ifndef TAB_EXT
+#  define TAB_EXT ".tab"
+# endif
 
 
 
@@ -203,20 +226,15 @@
 | Free a linked list.  |
 `---------------------*/
 
-#define LIST_FREE(Type, List)			\
-do {						\
-  Type *_node, *_next;				\
-  for (_node = List; _node; _node = _next)	\
-    {						\
-      _next = _node->next;			\
-      free (_node);				\
-    }						\
-} while (0)
-
-
-/* Assertions.  <assert.h>'s assertions are too heavyweight, and can
-   be disabled too easily, so implement it separately here.  */
-#define assert(x) ((void) ((x) || (abort (), 0)))
+# define LIST_FREE(Type, List)                  \
+  do {                                          \
+    Type *_node, *_next;                        \
+    for (_node = List; _node; _node = _next)    \
+      {                                         \
+        _next = _node->next;                    \
+        free (_node);                           \
+      }                                         \
+  } while (0)
 
 
 /*---------------------------------------------.
diff --git a/src/tables.c b/src/tables.c
index c938139..eb827b7 100644
--- a/src/tables.c
+++ b/src/tables.c
@@ -1,30 +1,27 @@
 /* Output the generated parsing program for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004,
-   2005 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2006, 2009-2012 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
 
 #include <bitsetv.h>
-#include <quotearg.h>
 
 #include "complain.h"
 #include "conflicts.h"
@@ -32,6 +29,7 @@
 #include "getargs.h"
 #include "gram.h"
 #include "lalr.h"
+#include "muscle-tab.h"
 #include "reader.h"
 #include "symtab.h"
 #include "tables.h"
@@ -127,7 +125,7 @@
 base_number *table;
 base_number *check;
 /* The value used in TABLE to denote explicit syntax errors
-   (%nonassoc), a negative infinite.  First defaults to ACTION_NUMBER_MININUM,
+   (%nonassoc), a negative infinite.  First defaults to ACTION_NUMBER_MINIMUM,
    but in order to keep small tables, renumbered as TABLE_ERROR, which
    is the smallest (non error) value minus 1.  */
 base_number table_ninf = 0;
@@ -198,18 +196,18 @@
 	/* Find all reductions for token J, and record all that do not
 	   match ACTROW[J].  */
 	for (i = 0; i < reds->num; i += 1)
-	  if (bitset_test (reds->look_ahead_tokens[i], j)
+	  if (bitset_test (reds->lookahead_tokens[i], j)
 	      && (actrow[j]
 		  != rule_number_as_item_number (reds->rules[i]->number)))
 	    {
-	      assert (0 < conflict_list_free);
+	      aver (0 < conflict_list_free);
 	      conflict_list[conflict_list_cnt] = reds->rules[i]->number + 1;
 	      conflict_list_cnt += 1;
 	      conflict_list_free -= 1;
 	    }
 
 	/* Leave a 0 at the end.  */
-	assert (0 < conflict_list_free);
+	aver (0 < conflict_list_free);
 	conflict_list[conflict_list_cnt] = 0;
 	conflict_list_cnt += 1;
 	conflict_list_free -= 1;
@@ -219,7 +217,7 @@
 
 /*------------------------------------------------------------------.
 | Decide what to do for each type of token if seen as the           |
-| look-ahead in specified state.  The value returned is used as the |
+| lookahead in specified state.  The value returned is used as the  |
 | default action (yydefact) for the state.  In addition, ACTROW is  |
 | filled with what to do for each kind of token, index by symbol    |
 | number, with zero meaning do the default action.  The value       |
@@ -227,7 +225,7 @@
 | situation is an error.  The parser recognizes this value	    |
 | specially.							    |
 |                                                                   |
-| This is where conflicts are resolved.  The loop over look-ahead   |
+| This is where conflicts are resolved.  The loop over lookahead    |
 | rules considered lower-numbered rules last, and the last rule     |
 | considered that likes a token gets to handle it.                  |
 |                                                                   |
@@ -241,7 +239,7 @@
 action_row (state *s)
 {
   int i;
-  rule *default_rule = NULL;
+  rule *default_reduction = NULL;
   reductions *reds = s->reductions;
   transitions *trans = s->transitions;
   errs *errp = s->errs;
@@ -252,17 +250,17 @@
   for (i = 0; i < ntokens; i++)
     actrow[i] = conflrow[i] = 0;
 
-  if (reds->look_ahead_tokens)
+  if (reds->lookahead_tokens)
     {
       int j;
       bitset_iterator biter;
       /* loop over all the rules available here which require
-	 look-ahead (in reverse order to give precedence to the first
+	 lookahead (in reverse order to give precedence to the first
 	 rule) */
       for (i = reds->num - 1; i >= 0; --i)
 	/* and find each token which the rule finds acceptable
 	   to come next */
-	BITSET_FOR_EACH (biter, reds->look_ahead_tokens[i], j, 0)
+	BITSET_FOR_EACH (biter, reds->lookahead_tokens[i], j, 0)
 	{
 	  /* and record this rule as the rule to use if that
 	     token follows.  */
@@ -305,13 +303,24 @@
       actrow[sym->number] = ACTION_NUMBER_MINIMUM;
     }
 
+  /* Turn off default reductions where requested by the user.  See
+     state_lookahead_tokens_count in lalr.c to understand when states are
+     labeled as consistent.  */
+  {
+    char *default_reductions =
+      muscle_percent_define_get ("lr.default-reductions");
+    if (0 != strcmp (default_reductions, "most") && !s->consistent)
+      nodefault = true;
+    free (default_reductions);
+  }
+
   /* Now find the most common reduction and make it the default action
      for this state.  */
 
   if (reds->num >= 1 && !nodefault)
     {
       if (s->consistent)
-	default_rule = reds->rules[0];
+	default_reduction = reds->rules[0];
       else
 	{
 	  int max = 0;
@@ -328,7 +337,7 @@
 	      if (count > max)
 		{
 		  max = count;
-		  default_rule = r;
+		  default_reduction = r;
 		}
 	    }
 
@@ -342,17 +351,18 @@
 	    {
 	      int j;
 	      for (j = 0; j < ntokens; j++)
-		if (actrow[j] == rule_number_as_item_number (default_rule->number)
+		if (actrow[j]
+                    == rule_number_as_item_number (default_reduction->number)
 		    && ! (nondeterministic_parser && conflrow[j]))
 		  actrow[j] = 0;
 	    }
 	}
     }
 
-  /* If have no default rule, the default is an error.
+  /* If have no default reduction, the default is an error.
      So replace any action which says "error" with "use default".  */
 
-  if (!default_rule)
+  if (!default_reduction)
     for (i = 0; i < ntokens; i++)
       if (actrow[i] == ACTION_NUMBER_MINIMUM)
 	actrow[i] = 0;
@@ -360,7 +370,7 @@
   if (conflicted)
     conflict_row (s);
 
-  return default_rule;
+  return default_reduction;
 }
 
 
@@ -410,7 +420,7 @@
 
 /*------------------------------------------------------------------.
 | Figure out the actions for the specified state, indexed by        |
-| look-ahead token type.                                            |
+| lookahead token type.                                             |
 |                                                                   |
 | The YYDEFACT table is output now.  The detailed info is saved for |
 | putting into YYTABLE later.                                       |
@@ -441,8 +451,8 @@
 
   for (i = 0; i < nstates; ++i)
     {
-      rule *default_rule = action_row (states[i]);
-      yydefact[i] = default_rule ? default_rule->number + 1 : 0;
+      rule *default_reduction = action_row (states[i]);
+      yydefact[i] = default_reduction ? default_reduction->number + 1 : 0;
       save_row (i);
 
       /* Now that the parser was computed, we can find which rules are
@@ -673,14 +683,14 @@
   base_number *to = tos[i];
   unsigned int *conflict_to = conflict_tos[i];
 
-  assert (t);
+  aver (t != 0);
 
   for (j = lowzero - from[0]; ; j++)
     {
       int k;
       bool ok = true;
 
-      assert (j < table_size);
+      aver (j < table_size);
 
       for (k = 0; ok && k < t; k++)
 	{
@@ -713,7 +723,7 @@
 	  if (loc > high)
 	    high = loc;
 
-	  assert (BASE_MINIMUM <= j && j <= BASE_MAXIMUM);
+	  aver (BASE_MINIMUM <= j && j <= BASE_MAXIMUM);
 	  return j;
 	}
     }
diff --git a/src/tables.h b/src/tables.h
index 911917f..8b5c1fa 100644
--- a/src/tables.h
+++ b/src/tables.h
@@ -1,22 +1,21 @@
 /* Prepare the LALR and GLR parser tables.
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison 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 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.
 
-   Bison 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.
+   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 Bison; see the file COPYING.  If not, write to the Free
-   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef TABLES_H_
 # define TABLES_H_
@@ -47,33 +46,13 @@
 
    YYSTOS[S] = the symbol number of the symbol that leads to state S.
 
-   YYDEFACT[S] = default rule to reduce with in state s, when YYTABLE
-   doesn't specify something else to do.  Zero means the default is an
-   error.
-
-   YYDEFGOTO[I] = default state to go to after a reduction of a rule
-   that generates variable NTOKENS + I, except when YYTABLE specifies
-   something else to do.
-
-   YYPACT[S] = index in YYTABLE of the portion describing state S.
-   The look-ahead token's type is used to index that portion to find
-   out what to do.
-
-   If the value in YYTABLE is positive, we shift the token and go to
-   that state.
-
-   If the value is negative, it is minus a rule number to reduce by.
-
-   If the value is zero, the default action from YYDEFACT[S] is used.
-
-   YYPGOTO[I] = the index in YYTABLE of the portion describing what to
-   do after reducing a rule that derives variable I + NTOKENS.  This
-   portion is indexed by the parser state number, S, as of before the
-   text for this nonterminal was read.  The value from YYTABLE is the
-   state to go to if the corresponding value in YYCHECK is S.
+   YYFINAL = the state number of the termination state.
 
    YYTABLE = a vector filled with portions for different uses, found
-   via YYPACT and YYPGOTO.
+   via YYPACT and YYPGOTO, described below.
+
+   YYLAST ( = high) the number of the last element of YYTABLE, i.e.,
+   sizeof (YYTABLE) - 1.
 
    YYCHECK = a vector indexed in parallel with YYTABLE.  It indicates,
    in a roundabout way, the bounds of the portion you are trying to
@@ -85,10 +64,53 @@
    default (from YYDEFACT or YYDEFGOTO) should be used.  Otherwise,
    YYTABLE[P+I] should be used.
 
-   YYFINAL = the state number of the termination state.
+   YYDEFACT[S] = default reduction number in state s.  Performed when
+   YYTABLE doesn't specify something else to do.  Zero means the default
+   is an error.
 
-   YYLAST ( = high) the number of the last element of YYTABLE, i.e.,
-   sizeof (YYTABLE) - 1.  */
+   YYDEFGOTO[I] = default state to go to after a reduction of a rule
+   that generates variable NTOKENS + I, except when YYTABLE specifies
+   something else to do.
+
+   YYPACT[S] = index in YYTABLE of the portion describing state S.
+   The lookahead token's number, I, is used to index that portion of
+   YYTABLE to find out what action to perform.
+
+   If YYPACT[S] == YYPACT_NINF, if YYPACT[S] + I is outside the bounds
+   of YYTABLE (from 0 to YYLAST), or I is outside the bounds for portion
+   S (that is, YYCHECK[YYPACT[S] + I] != I), then the default action
+   (that is, YYDEFACT[S]) should be used instead of YYTABLE.  Otherwise,
+   the value YYTABLE[YYPACT[S] + I] should be used even if
+   YYPACT[S] < 0.
+
+   If the value in YYTABLE is positive, we shift the token and go to
+   that state.
+
+   If the value is negative, it is minus a rule number to reduce by.
+
+   If the value is YYTABLE_NINF, it's a syntax error.
+
+   YYPGOTO[I] = the index in YYTABLE of the portion describing what to
+   do after reducing a rule that derives variable I + NTOKENS.  This
+   portion is indexed by the parser state number, S, as of before the
+   text for this nonterminal was read.
+
+   If YYPGOTO[I] + S is outside the bounds of YYTABLE (from 0 to YYLAST)
+   or if S is outside the bounds of the portion for I (that is,
+   YYCHECK[YYPGOTO[I] + S] != S), then the default state (that is,
+   YYDEFGOTO[I]) should be used instead of YYTABLE.  Otherwise,
+   YYTABLE[YYPGOTO[I] + S] is the state to go to even if YYPGOTO[I] < 0.
+
+   When the above YYPACT, YYPGOTO, and YYCHECK tests determine that a
+   value from YYTABLE should be used, that value is never zero, so it is
+   useless to check for zero.  When those tests indicate that the value
+   from YYDEFACT or YYDEFGOTO should be used instead, the value from
+   YYTABLE *might* be zero, which, as a consequence of the way in which
+   the tables are constructed, also happens to indicate that YYDEFACT or
+   YYDEFGOTO should be used.  However, the YYTABLE value cannot be
+   trusted when the YYDEFACT or YYDEFGOTO value should be used.  In
+   summary, forget about zero values in YYTABLE.
+*/
 
 extern int nvectors;
 
diff --git a/src/uniqstr.c b/src/uniqstr.c
index 8804a80..62d09ca 100644
--- a/src/uniqstr.c
+++ b/src/uniqstr.c
@@ -1,23 +1,21 @@
 /* Keep a unique copy of strings.
 
-   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2002-2005, 2009-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "system.h"
@@ -25,6 +23,7 @@
 #include <error.h>
 #include <hash.h>
 #include <quotearg.h>
+#include <stdarg.h>
 
 #include "uniqstr.h"
 
@@ -49,11 +48,27 @@
     {
       /* First insertion in the hash. */
       res = xstrdup (str);
-      hash_insert (uniqstrs_table, res);
+      if (!hash_insert (uniqstrs_table, res))
+        xalloc_die ();
     }
   return res;
 }
 
+uniqstr
+uniqstr_vsprintf (char const *format, ...)
+{
+  va_list args;
+  size_t length;
+  va_start (args, format);
+  length = vsnprintf (NULL, 0, format, args);
+  va_end (args);
+
+  char res[length + 1];
+  va_start (args, format);
+  vsprintf (res, format, args);
+  va_end (args);
+  return uniqstr_new (res);
+}
 
 /*------------------------------.
 | Abort if S is not a uniqstr.  |
diff --git a/src/uniqstr.h b/src/uniqstr.h
index ab482be..677ecc4 100644
--- a/src/uniqstr.h
+++ b/src/uniqstr.h
@@ -1,23 +1,21 @@
 /* Keeping a unique copy of strings.
 
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2008-2012 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   Bison is distributed in the hope that it will be useful,
+   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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef UNIQSTR_H_
 # define UNIQSTR_H_
@@ -31,8 +29,18 @@
 /* Return the uniqstr for STR.  */
 uniqstr uniqstr_new (char const *str);
 
+/* Return a uniqstr built by vsprintf.  In order to simply concatenate
+   strings, use UNIQSTR_CONCAT, which is a convenient wrapper around
+   this function.  */
+uniqstr uniqstr_vsprintf (char const *format, ...)
+  __attribute__ ((__format__ (__printf__, 1, 2)));
+
 /* Two uniqstr values have the same value iff they are the same.  */
-#define UNIQSTR_EQ(USTR1, USTR2) ((USTR1) == (USTR2))
+#define UNIQSTR_EQ(USTR1, USTR2) (!!((USTR1) == (USTR2)))
+
+/* Compare two uniqstr a la strcmp: negative for <, nul for =, and
+   positive for >.  Undefined order, relies on addresses.  */
+#define UNIQSTR_CMP(USTR1, USTR2) ((USTR1) - (USTR2))
 
 /*--------------------------------------.
 | Initializing, destroying, debugging.  |
@@ -50,4 +58,41 @@
 /* Report them all.  */
 void uniqstrs_print (void);
 
+/*----------------.
+| Concatenation.  |
+`----------------*/
+
+/* Concatenate at most 20 strings and return a uniqstr.  The goal of
+   this macro is to make the caller's code a little more succinct
+   without a trivial uniqstr_vsprintf format string to maintain
+   (for example, "%s%s%s") while still benefitting from gcc's type
+   checking.  Unfortunately, because of the missing format string in the
+   macro invocation, the argument number reported by gcc for a bad
+   argument type is 1 too large.  */
+#define UNIQSTR_CONCAT(...)                                            \
+  uniqstr_vsprintf (UNIQSTR_GEN_FORMAT (__VA_ARGS__,                   \
+                                        "%s", "%s", "%s", "%s", "%s",  \
+                                        "%s", "%s", "%s", "%s", "%s",  \
+                                        "%s", "%s", "%s", "%s", "%s",  \
+                                        "%s", "%s", "%s", "%s", "%s"), \
+                    __VA_ARGS__)
+
+#define UNIQSTR_GEN_FORMAT(F1,  F2,  F3,  F4,  F5,  \
+                           F6,  F7,  F8,  F9,  F10, \
+                           F11, F12, F13, F14, F15, \
+                           F16, F17, F18, F19, F20, \
+                           ...)                     \
+  UNIQSTR_GEN_FORMAT_ (__VA_ARGS__,                 \
+                       "", "", "", "", "",          \
+                       "", "", "", "", "",          \
+                       "", "", "", "", "",          \
+                       "", "", "", "", "")
+
+#define UNIQSTR_GEN_FORMAT_(F1,  F2,  F3,  F4,  F5,       \
+                            F6,  F7,  F8,  F9,  F10,      \
+                            F11, F12, F13, F14, F15,      \
+                            F16, F17, F18, F19, F20, ...) \
+  F1  F2  F3  F4  F5  F6  F7  F8  F9  F10                 \
+  F11 F12 F13 F14 F15 F16 F17 F18 F19 F20
+
 #endif /* ! defined UNIQSTR_H_ */
diff --git a/src/vcg.c b/src/vcg.c
deleted file mode 100644
index 25fbb64..0000000
--- a/src/vcg.c
+++ /dev/null
@@ -1,841 +0,0 @@
-/* VCG description handler for Bison.
-
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-   Foundation, Inc.
-
-   This file is part of Bison, the GNU Compiler Compiler.
-
-   Bison 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.
-
-   Bison 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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-#include "system.h"
-
-#include <quotearg.h>
-
-#include "vcg.h"
-#include "vcg_defaults.h"
-
-/* Return an unambiguous printable representated, for NAME, suitable
-   for C strings.  Use slot 2 since the user may use slots 0 and 1.
-   */
-
-static char const *
-quote (char const *name)
-{
-  return quotearg_n_style (2, c_quoting_style, name);
-}
-
-
-/* Initialize a graph with the default values. */
-void
-new_graph (graph *g)
-{
-  g->title = G_TITLE;
-  g->label = G_LABEL;
-
-  g->infos[0] = G_INFOS1;
-  g->infos[1] = G_INFOS2;
-  g->infos[2] = G_INFOS3;
-
-  g->color = G_COLOR;
-  g->textcolor = G_TEXTCOLOR;
-  g->bordercolor = G_BORDERCOLOR;
-
-  g->width = G_WIDTH;
-  g->height = G_HEIGHT;
-  g->borderwidth = G_BORDERWIDTH;
-  g->x = G_X;
-  g->y = G_Y;
-  g->folding = G_FOLDING;
-  g->shrink = G_SHRINK;
-  g->stretch = G_STRETCH;
-
-  g->textmode = G_TEXTMODE;
-  g->shape = G_SHAPE;
-
-  g->vertical_order = G_VERTICAL_ORDER;
-  g->horizontal_order = G_HORIZONTAL_ORDER;
-
-  g->xmax = G_XMAX; /* Not output. */
-  g->ymax = G_YMAX; /* Not output. */
-
-  g->xbase = G_XBASE;
-  g->ybase = G_YBASE;
-
-  g->xspace = G_XSPACE;
-  g->yspace = G_YSPACE;
-  g->xlspace = G_XLSPACE; /* Not output. */
-
-  g->xraster = G_XRASTER;
-  g->yraster = G_YRASTER;
-  g->xlraster = G_XLRASTER;
-
-  g->hidden = G_HIDDEN; /* No default value. */
-
-  g->classname = G_CLASSNAME; /* No class name association. */
-
-  g->layout_downfactor = G_LAYOUT_DOWNFACTOR;
-  g->layout_upfactor = G_LAYOUT_UPFACTOR;
-  g->layout_nearfactor = G_LAYOUT_NEARFACTOR;
-  g->layout_splinefactor = G_LAYOUT_SPLINEFACTOR;
-
-  g->late_edge_labels = G_LATE_EDGE_LABELS;
-  g->display_edge_labels = G_DISPLAY_EDGE_LABELS;
-  g->dirty_edge_labels = G_DIRTY_EDGE_LABELS;
-  g->finetuning = G_FINETUNING;
-  g->ignore_singles = G_IGNORE_SINGLES;
-  g->priority_phase = G_PRIORITY_PHASE;
-  g->manhattan_edges = G_MANHATTAN_EDGES;
-  g->smanhattan_edges = G_SMANHATTAN_EDGES;
-  g->near_edges = G_NEAR_EDGES;
-
-  g->orientation = G_ORIENTATION;
-  g->node_alignment = G_NODE_ALIGNMENT;
-  g->port_sharing = G_PORT_SHARING;
-  g->arrow_mode = G_ARROW_MODE;
-  g->treefactor = G_TREEFACTOR;
-  g->spreadlevel = G_SPREADLEVEL;
-  g->crossing_weight = G_CROSSING_WEIGHT;
-  g->crossing_phase2 = G_CROSSING_PHASE2;
-  g->crossing_optimization = G_CROSSING_OPTIMIZATION;
-  g->view = G_VIEW;
-
-  g->edges = G_EDGES;
-  g->nodes = G_NODES;
-  g->splines = G_SPLINES;
-
-  g->bmax = G_BMAX;
-  g->cmin = G_CMIN;
-  g->cmax = G_CMAX;
-  g->pmin = G_PMIN;
-  g->pmax = G_PMAX;
-  g->rmin = G_RMIN;
-  g->rmax = G_RMAX;
-  g->smax = G_SMAX;
-
-  g->node_list = G_NODE_LIST;
-  g->edge_list = G_EDGE_LIST;
-
-  new_edge (&g->edge);
-  new_node (&g->node);
-}
-
-/* Initialize a node with the default values. */
-void
-new_node (node *n)
-{
-  n->title = N_TITLE;
-  n->label = N_LABEL;
-
-  n->locx = N_LOCX; /* Default unspcified. */
-  n->locy = N_LOCY; /* Default unspcified. */
-
-  n->vertical_order = N_VERTICAL_ORDER;	/* Default unspcified. */
-  n->horizontal_order = N_HORIZONTAL_ORDER;	/* Default unspcified. */
-
-  n->width = N_WIDTH; /* We assume that we can't define it now. */
-  n->height = N_HEIGHT; /* Also. */
-
-  n->shrink = N_SHRINK;
-  n->stretch = N_STRETCH;
-
-  n->folding = N_FOLDING; /* No explicit default value. */
-
-  n->shape = N_SHAPE;
-  n->textmode = N_TEXTMODE;
-  n->borderwidth = N_BORDERWIDTH;
-
-  n->color = N_COLOR;
-  n->textcolor = N_TEXTCOLOR;
-  n->bordercolor = N_BORDERCOLOR;
-
-  n->infos[0] = N_INFOS1;
-  n->infos[1] = N_INFOS2;
-  n->infos[2] = N_INFOS3;
-
-  n->next = N_NEXT;
-}
-
-/* Initialize an edge with the default values. */
-void
-new_edge (edge *e)
-{
-  e->type = E_EDGE_TYPE;
-
-  e->sourcename = E_SOURCENAME;
-  e->targetname = E_TARGETNAME;
-  e->label = E_LABEL;
-
-  e->linestyle = E_LINESTYLE;
-  e->thickness = E_THICKNESS;
-
-  e->class = E_CLASS;
-
-  e->color = E_COLOR;
-  e->textcolor = E_TEXTCOLOR;
-  e->arrowcolor = E_ARROWCOLOR;
-  e->backarrowcolor = E_BACKARROWCOLOR;
-
-  e->arrowsize = E_ARROWSIZE;
-  e->backarrowsize = E_BACKARROWSIZE;
-  e->arrowstyle = E_ARROWSTYLE;
-
-  e->backarrowstyle = E_BACKARROWSTYLE;
-
-  e->priority = E_PRIORITY;
-
-  e->anchor = E_ANCHOR;
-
-  e->horizontal_order = E_HORIZONTAL_ORDER;
-
-  e->next = E_NEXT;
-}
-
-/*----------------------------------------------.
-| Get functions.	                        |
-| Return string corresponding to an enum value. |
-`----------------------------------------------*/
-
-static const char *
-get_color_str (enum color color)
-{
-  switch (color)
-    {
-    default:		abort ();
-    case white:		return "white";
-    case blue:		return "blue";
-    case red:		return "red";
-    case green:		return "green";
-    case yellow:	return "yellow";
-    case magenta:	return "magenta";
-    case cyan:		return "cyan";
-    case darkgrey:	return "darkgrey";
-    case darkblue:	return "darkblue";
-    case darkred:	return "darkred";
-    case darkgreen:	return "darkgreen";
-    case darkyellow:	return "darkyellow";
-    case darkmagenta:	return "darkmagenta";
-    case darkcyan:	return "darkcyan";
-    case gold:		return "gold";
-    case lightgrey:	return "lightgrey";
-    case lightblue:	return "lightblue";
-    case lightred:	return "lightred";
-    case lightgreen:	return "lightgreen";
-    case lightyellow:	return "lightyellow";
-    case lightmagenta:	return "lightmagenta";
-    case lightcyan:	return "lightcyan";
-    case lilac:		return "lilac";
-    case turquoise:	return "turquoise";
-    case aquamarine:	return "aquamarine";
-    case khaki:		return "khaki";
-    case purple:	return "purple";
-    case yellowgreen:	return "yellowgreen";
-    case pink:		return "pink";
-    case orange:	return "orange";
-    case orchid:	return "orchid";
-    case black:		return "black";
-    }
-}
-
-static const char *
-get_textmode_str (enum textmode textmode)
-{
-  switch (textmode)
-    {
-    default:		abort ();
-    case centered:	return "center";
-    case left_justify:	return "left_justify";
-    case right_justify:	return "right_justify";
-    }
-}
-
-static const char *
-get_shape_str (enum shape shape)
-{
-  switch (shape)
-    {
-    default:		abort ();
-    case box:		return "box";
-    case rhomb:		return "rhomb";
-    case ellipse:	return "ellipse";
-    case triangle:	return "triangle";
-    }
-}
-
-static const char *
-get_decision_str (enum decision decision)
-{
-  switch (decision)
-    {
-    default:	abort ();
-    case no:	return "no";
-    case yes:	return "yes";
-    }
-}
-
-static const char *
-get_orientation_str (enum orientation orientation)
-{
-  switch (orientation)
-    {
-    default:		abort ();
-    case top_to_bottom:	return "top_to_bottom";
-    case bottom_to_top: return "bottom_to_top";
-    case left_to_right: return "left_to_right";
-    case right_to_left: return "right_to_left";
-    }
-}
-
-static const char *
-get_node_alignment_str (enum alignment alignment)
-{
-  switch (alignment)
-    {
-    default:		abort ();
-    case center:	return "center";
-    case top:		return "top";
-    case bottom:	return "bottom";
-    }
-}
-
-static const char *
-get_arrow_mode_str (enum arrow_mode arrow_mode)
-{
-  switch (arrow_mode)
-    {
-    default:		abort ();
-    case fixed:		return "fixed";
-    case free_a:	return "free";
-    }
-}
-
-static const char *
-get_crossing_type_str (enum crossing_type crossing_type)
-{
-  switch (crossing_type)
-    {
-    default:		abort ();
-    case bary:		return "bary";
-    case median:	return "median";
-    case barymedian:	return "barymedian";
-    case medianbary:	return "medianbary";
-    }
-}
-
-static const char *
-get_view_str (enum view view)
-{
-  /* There is no way with vcg 1.30 to specify a normal view explicitly,
-     so it is an error here if view == normal_view.  */
-  switch (view)
-    {
-    default:		abort ();
-    case cfish:		return "cfish";
-    case pfish:		return "pfish";
-    case fcfish:	return "fcfish";
-    case fpfish:	return "fpfish";
-    }
-}
-
-static const char *
-get_linestyle_str (enum linestyle linestyle)
-{
-  switch (linestyle)
-    {
-    default:		abort ();
-    case continuous:	return "continuous";
-    case dashed:	return "dashed";
-    case dotted:	return "dotted";
-    case invisible:	return "invisible";
-    }
-}
-
-static const char *
-get_arrowstyle_str (enum arrowstyle arrowstyle)
-{
-  switch (arrowstyle)
-    {
-    default:	abort ();
-    case solid:	return "solid";
-    case line:	return "line";
-    case none:	return "none";
-    }
-}
-
-/*------------------------------.
-| Add functions.	        |
-| Edge and nodes into a graph.  |
-`------------------------------*/
-
-void
-add_node (graph *g, node *n)
-{
-  n->next = g->node_list;
-  g->node_list = n;
-}
-
-void
-add_edge (graph *g, edge *e)
-{
-  e->next = g->edge_list;
-  g->edge_list = e;
-}
-
-void
-add_classname (graph *g, int val, const char *name)
-{
-  struct classname *classname = xmalloc (sizeof *classname);
-  classname->no = val;
-  classname->name = name;
-  classname->next = g->classname;
-  g->classname = classname;
-}
-
-void
-add_infoname (graph *g, int integer, const char *str)
-{
-  struct infoname *infoname = xmalloc (sizeof *infoname);
-  infoname->integer = integer;
-  infoname->chars = str;
-  infoname->next = g->infoname;
-  g->infoname = infoname;
-}
-
-/* Build a colorentry struct and add it to the list.  */
-void
-add_colorentry (graph *g, int color_idx, int red_cp,
-		int green_cp, int blue_cp)
-{
-  struct colorentry *ce = xmalloc (sizeof *ce);
-  ce->color_index = color_idx;
-  ce->red_cp = red_cp;
-  ce->green_cp = green_cp;
-  ce->blue_cp = blue_cp;
-  ce->next = g->colorentry;
-  g->colorentry = ce;
-}
-
-/*-------------------------------------.
-| Open and close functions (formatted) |
-`-------------------------------------*/
-
-void
-open_edge (edge *e, FILE *fout)
-{
-  switch (e->type)
-    {
-    case normal_edge:
-      fputs ("\tedge: {\n", fout);
-      break;
-    case back_edge:
-      fputs ("\tbackedge: {\n", fout);
-      break;
-    case near_edge:
-      fputs ("\tnearedge: {\n", fout);
-      break;
-    case bent_near_edge:
-      fputs ("\tbentnearedge: {\n", fout);
-      break;
-    default:
-      fputs ("\tedge: {\n", fout);
-    }
-}
-
-void
-close_edge (FILE *fout)
-{
-  fputs ("\t}\n", fout);
-}
-
-void
-open_node (FILE *fout)
-{
-  fputs ("\tnode: {\n", fout);
-}
-
-void
-close_node (FILE *fout)
-{
-  fputs ("\t}\n", fout);
-}
-
-void
-open_graph (FILE *fout)
-{
-  fputs ("graph: {\n", fout);
-}
-
-void
-close_graph (graph *g, FILE *fout)
-{
-  fputc ('\n', fout);
-
-  /* FIXME: Unallocate nodes and edges if required.  */
-  {
-    node *n;
-
-    for (n = g->node_list; n; n = n->next)
-      {
-	open_node (fout);
-	output_node (n, fout);
-	close_node (fout);
-      }
-  }
-
-  fputc ('\n', fout);
-
-  {
-    edge *e;
-
-    for (e = g->edge_list; e; e = e->next)
-      {
-	open_edge (e, fout);
-	output_edge (e, fout);
-	close_edge (fout);
-      }
-  }
-
-  fputs ("}\n", fout);
-}
-
-/*-------------------------------------------.
-| Output functions (formatted) in file FOUT  |
-`-------------------------------------------*/
-
-void
-output_node (node *n, FILE *fout)
-{
-  if (n->title != N_TITLE)
-    fprintf (fout, "\t\ttitle:\t%s\n", quote (n->title));
-  if (n->label != N_LABEL)
-    fprintf (fout, "\t\tlabel:\t%s\n", quote (n->label));
-
-  if ((n->locx != N_LOCX) && (n->locy != N_LOCY))
-    fprintf (fout, "\t\tloc { x: %d  y: %d }\t\n", n->locx, n->locy);
-
-  if (n->vertical_order != N_VERTICAL_ORDER)
-    fprintf (fout, "\t\tvertical_order:\t%d\n", n->vertical_order);
-  if (n->horizontal_order != N_HORIZONTAL_ORDER)
-    fprintf (fout, "\t\thorizontal_order:\t%d\n", n->horizontal_order);
-
-  if (n->width != N_WIDTH)
-    fprintf (fout, "\t\twidth:\t%d\n", n->width);
-  if (n->height != N_HEIGHT)
-    fprintf (fout, "\t\theight:\t%d\n", n->height);
-
-  if (n->shrink != N_SHRINK)
-    fprintf (fout, "\t\tshrink:\t%d\n", n->shrink);
-  if (n->stretch != N_STRETCH)
-    fprintf (fout, "\t\tstretch:\t%d\n", n->stretch);
-
-  if (n->folding != N_FOLDING)
-    fprintf (fout, "\t\tfolding:\t%d\n", n->folding);
-
-  if (n->textmode != N_TEXTMODE)
-    fprintf (fout, "\t\ttextmode:\t%s\n",
-	     get_textmode_str (n->textmode));
-
-  if (n->shape != N_SHAPE)
-    fprintf (fout, "\t\tshape:\t%s\n", get_shape_str (n->shape));
-
-  if (n->borderwidth != N_BORDERWIDTH)
-    fprintf (fout, "\t\tborderwidth:\t%d\n", n->borderwidth);
-
-  if (n->color != N_COLOR)
-    fprintf (fout, "\t\tcolor:\t%s\n", get_color_str (n->color));
-  if (n->textcolor != N_TEXTCOLOR)
-    fprintf (fout, "\t\ttextcolor:\t%s\n",
-	     get_color_str (n->textcolor));
-  if (n->bordercolor != N_BORDERCOLOR)
-    fprintf (fout, "\t\tbordercolor:\t%s\n",
-	     get_color_str (n->bordercolor));
-
-  {
-    int i;
-    for (i = 0; i < 3; ++i)
-      if (n->infos[i])
-	fprintf (fout, "\t\tinfo%d:\t%s\n",
-		 i, quote (n->infos[i]));
-  }
-}
-
-void
-output_edge (edge *e, FILE *fout)
-{
-  /* FIXME: SOURCENAME and TARGETNAME are mandatory
-     so it has to be fatal not to give these informations.  */
-  if (e->sourcename != E_SOURCENAME)
-    fprintf (fout, "\t\tsourcename:\t%s\n", quote (e->sourcename));
-  if (e->targetname != E_TARGETNAME)
-    fprintf (fout, "\t\ttargetname:\t%s\n", quote (e->targetname));
-
-  if (e->label != E_LABEL)
-    fprintf (fout, "\t\tlabel:\t%s\n", quote (e->label));
-
-  if (e->linestyle != E_LINESTYLE)
-    fprintf (fout, "\t\tlinestyle:\t%s\n", get_linestyle_str (e->linestyle));
-
-  if (e->thickness != E_THICKNESS)
-    fprintf (fout, "\t\tthickness:\t%d\n", e->thickness);
-  if (e->class != E_CLASS)
-    fprintf (fout, "\t\tclass:\t%d\n", e->class);
-
-  if (e->color != E_COLOR)
-    fprintf (fout, "\t\tcolor:\t%s\n", get_color_str (e->color));
-  if (e->color != E_TEXTCOLOR)
-    fprintf (fout, "\t\ttextcolor:\t%s\n",
-	     get_color_str (e->textcolor));
-  if (e->arrowcolor != E_ARROWCOLOR)
-    fprintf (fout, "\t\tarrowcolor:\t%s\n",
-	     get_color_str (e->arrowcolor));
-  if (e->backarrowcolor != E_BACKARROWCOLOR)
-    fprintf (fout, "\t\tbackarrowcolor:\t%s\n",
-	     get_color_str (e->backarrowcolor));
-
-  if (e->arrowsize != E_ARROWSIZE)
-    fprintf (fout, "\t\tarrowsize:\t%d\n", e->arrowsize);
-  if (e->backarrowsize != E_BACKARROWSIZE)
-    fprintf (fout, "\t\tbackarrowsize:\t%d\n", e->backarrowsize);
-
-  if (e->arrowstyle != E_ARROWSTYLE)
-    fprintf (fout, "\t\tarrowstyle:\t%s\n",
-	     get_arrowstyle_str (e->arrowstyle));
-  if (e->backarrowstyle != E_BACKARROWSTYLE)
-    fprintf (fout, "\t\tbackarrowstyle:\t%s\n",
-	     get_arrowstyle_str (e->backarrowstyle));
-
-  if (e->priority != E_PRIORITY)
-    fprintf (fout, "\t\tpriority:\t%d\n", e->priority);
-  if (e->anchor != E_ANCHOR)
-    fprintf (fout, "\t\tanchor:\t%d\n", e->anchor);
-  if (e->horizontal_order != E_HORIZONTAL_ORDER)
-    fprintf (fout, "\t\thorizontal_order:\t%d\n", e->horizontal_order);
-}
-
-void
-output_graph (graph *g, FILE *fout)
-{
-  if (g->title)
-    fprintf (fout, "\ttitle:\t%s\n", quote (g->title));
-  if (g->label)
-    fprintf (fout, "\tlabel:\t%s\n", quote (g->label));
-
-  {
-    int i;
-    for (i = 0; i < 3; ++i)
-      if (g->infos[i])
-	fprintf (fout, "\tinfo%d:\t%s\n", i, quote (g->infos[i]));
-  }
-
-  if (g->color != G_COLOR)
-    fprintf (fout, "\tcolor:\t%s\n", get_color_str (g->color));
-  if (g->textcolor != G_TEXTCOLOR)
-    fprintf (fout, "\ttextcolor:\t%s\n", get_color_str (g->textcolor));
-  if (g->bordercolor != G_BORDERCOLOR)
-    fprintf (fout, "\tbordercolor:\t%s\n",
-	     get_color_str (g->bordercolor));
-
-  if (g->width != G_WIDTH)
-    fprintf (fout, "\twidth:\t%d\n", g->width);
-  if (g->height != G_HEIGHT)
-    fprintf (fout, "\theight:\t%d\n", g->height);
-  if (g->borderwidth != G_BORDERWIDTH)
-    fprintf (fout, "\tborderwidth:\t%d\n", g->borderwidth);
-
-  if (g->x != G_X)
-    fprintf (fout, "\tx:\t%d\n", g->x);
-  if (g->y != G_Y)
-    fprintf (fout, "\ty:\t%d\n", g->y);
-
-  if (g->folding != G_FOLDING)
-    fprintf (fout, "\tfolding:\t%d\n", g->folding);
-
-  if (g->shrink != G_SHRINK)
-    fprintf (fout, "\tshrink:\t%d\n", g->shrink);
-  if (g->stretch != G_STRETCH)
-    fprintf (fout, "\tstretch:\t%d\n", g->stretch);
-
-  if (g->textmode != G_TEXTMODE)
-    fprintf (fout, "\ttextmode:\t%s\n",
-	     get_textmode_str (g->textmode));
-
-  if (g->shape != G_SHAPE)
-    fprintf (fout, "\tshape:\t%s\n", get_shape_str (g->shape));
-
-  if (g->vertical_order != G_VERTICAL_ORDER)
-    fprintf (fout, "\tvertical_order:\t%d\n", g->vertical_order);
-  if (g->horizontal_order != G_HORIZONTAL_ORDER)
-    fprintf (fout, "\thorizontal_order:\t%d\n", g->horizontal_order);
-
-  if (g->xmax != G_XMAX)
-    fprintf (fout, "\txmax:\t%d\n", g->xmax);
-  if (g->ymax != G_YMAX)
-    fprintf (fout, "\tymax:\t%d\n", g->ymax);
-
-  if (g->xbase != G_XBASE)
-    fprintf (fout, "\txbase:\t%d\n", g->xbase);
-  if (g->ybase != G_YBASE)
-    fprintf (fout, "\tybase:\t%d\n", g->ybase);
-
-  if (g->xspace != G_XSPACE)
-    fprintf (fout, "\txspace:\t%d\n", g->xspace);
-  if (g->yspace != G_YSPACE)
-    fprintf (fout, "\tyspace:\t%d\n", g->yspace);
-  if (g->xlspace != G_XLSPACE)
-    fprintf (fout, "\txlspace:\t%d\n", g->xlspace);
-
-  if (g->xraster != G_XRASTER)
-    fprintf (fout, "\txraster:\t%d\n", g->xraster);
-  if (g->yraster != G_YRASTER)
-    fprintf (fout, "\tyraster:\t%d\n", g->yraster);
-  if (g->xlraster != G_XLRASTER)
-    fprintf (fout, "\txlraster:\t%d\n", g->xlraster);
-
-  if (g->hidden != G_HIDDEN)
-    fprintf (fout, "\thidden:\t%d\n", g->hidden);
-
-  /* FIXME: Unallocate struct list if required.
-     Maybe with a little function.  */
-  if (g->classname != G_CLASSNAME)
-    {
-      struct classname *ite;
-
-      for (ite = g->classname; ite; ite = ite->next)
-	fprintf (fout, "\tclassname %d :\t%s\n", ite->no, ite->name);
-    }
-
-  if (g->infoname != G_INFONAME)
-    {
-      struct infoname *ite;
-
-      for (ite = g->infoname; ite; ite = ite->next)
-	fprintf (fout, "\tinfoname %d :\t%s\n", ite->integer, ite->chars);
-    }
-
-  if (g->colorentry != G_COLORENTRY)
-    {
-      struct colorentry *ite;
-
-      for (ite = g->colorentry; ite; ite = ite->next)
-	{
-	  fprintf (fout, "\tcolorentry %d :\t%d %d %d\n",
-		   ite->color_index,
-		   ite->red_cp,
-		   ite->green_cp,
-		   ite->blue_cp);
-	}
-    }
-
-  if (g->layout_downfactor != G_LAYOUT_DOWNFACTOR)
-    fprintf (fout, "\tlayout_downfactor:\t%d\n", g->layout_downfactor);
-  if (g->layout_upfactor != G_LAYOUT_UPFACTOR)
-    fprintf (fout, "\tlayout_upfactor:\t%d\n", g->layout_upfactor);
-  if (g->layout_nearfactor != G_LAYOUT_NEARFACTOR)
-    fprintf (fout, "\tlayout_nearfactor:\t%d\n", g->layout_nearfactor);
-  if (g->layout_splinefactor != G_LAYOUT_SPLINEFACTOR)
-    fprintf (fout, "\tlayout_splinefactor:\t%d\n",
-	     g->layout_splinefactor);
-
-  if (g->late_edge_labels != G_LATE_EDGE_LABELS)
-    fprintf (fout, "\tlate_edge_labels:\t%s\n",
-	     get_decision_str (g->late_edge_labels));
-  if (g->display_edge_labels != G_DISPLAY_EDGE_LABELS)
-    fprintf (fout, "\tdisplay_edge_labels:\t%s\n",
-	     get_decision_str (g->display_edge_labels));
-  if (g->dirty_edge_labels != G_DIRTY_EDGE_LABELS)
-    fprintf (fout, "\tdirty_edge_labels:\t%s\n",
-	     get_decision_str (g->dirty_edge_labels));
-  if (g->finetuning != G_FINETUNING)
-    fprintf (fout, "\tfinetuning:\t%s\n",
-	     get_decision_str (g->finetuning));
-  if (g->ignore_singles != G_IGNORE_SINGLES)
-    fprintf (fout, "\tignore_singles:\t%s\n",
-	     get_decision_str (g->ignore_singles));
-  if (g->priority_phase != G_PRIORITY_PHASE)
-    fprintf (fout, "\tpriority_phase:\t%s\n",
-	     get_decision_str (g->priority_phase));
-  if (g->manhattan_edges != G_MANHATTAN_EDGES)
-    fprintf (fout,
-	     "\tmanhattan_edges:\t%s\n",
-	     get_decision_str (g->manhattan_edges));
-  if (g->smanhattan_edges != G_SMANHATTAN_EDGES)
-    fprintf (fout,
-	     "\tsmanhattan_edges:\t%s\n",
-	     get_decision_str (g->smanhattan_edges));
-  if (g->near_edges != G_NEAR_EDGES)
-    fprintf (fout, "\tnear_edges:\t%s\n",
-	     get_decision_str (g->near_edges));
-
-  if (g->orientation != G_ORIENTATION)
-    fprintf (fout, "\torientation:\t%s\n",
-	     get_orientation_str (g->orientation));
-
-  if (g->node_alignment != G_NODE_ALIGNMENT)
-    fprintf (fout, "\tnode_alignment:\t%s\n",
-	     get_node_alignment_str (g->node_alignment));
-
-  if (g->port_sharing != G_PORT_SHARING)
-    fprintf (fout, "\tport_sharing:\t%s\n",
-	     get_decision_str (g->port_sharing));
-
-  if (g->arrow_mode != G_ARROW_MODE)
-    fprintf (fout, "\tarrow_mode:\t%s\n",
-	     get_arrow_mode_str (g->arrow_mode));
-
-  if (g->treefactor != G_TREEFACTOR)
-    fprintf (fout, "\ttreefactor:\t%f\n", g->treefactor);
-  if (g->spreadlevel != G_SPREADLEVEL)
-    fprintf (fout, "\tspreadlevel:\t%d\n", g->spreadlevel);
-
-  if (g->crossing_weight != G_CROSSING_WEIGHT)
-    fprintf (fout, "\tcrossing_weight:\t%s\n",
-	     get_crossing_type_str (g->crossing_weight));
-  if (g->crossing_phase2 != G_CROSSING_PHASE2)
-    fprintf (fout, "\tcrossing_phase2:\t%s\n",
-	     get_decision_str (g->crossing_phase2));
-  if (g->crossing_optimization != G_CROSSING_OPTIMIZATION)
-    fprintf (fout, "\tcrossing_optimization:\t%s\n",
-	     get_decision_str (g->crossing_optimization));
-
-  if (g->view != normal_view)
-    fprintf (fout, "\tview:\t%s\n", get_view_str (g->view));
-
-  if (g->edges != G_EDGES)
-    fprintf (fout, "\tedges:\t%s\n", get_decision_str (g->edges));
-
-  if (g->nodes != G_NODES)
-    fprintf (fout,"\tnodes:\t%s\n", get_decision_str (g->nodes));
-
-  if (g->splines != G_SPLINES)
-    fprintf (fout, "\tsplines:\t%s\n", get_decision_str (g->splines));
-
-  if (g->bmax != G_BMAX)
-    fprintf (fout, "\tbmax:\t%d\n", g->bmax);
-  if (g->cmin != G_CMIN)
-    fprintf (fout, "\tcmin:\t%d\n", g->cmin);
-  if (g->cmax != G_CMAX)
-    fprintf (fout, "\tcmax:\t%d\n", g->cmax);
-  if (g->pmin != G_PMIN)
-    fprintf (fout, "\tpmin:\t%d\n", g->pmin);
-  if (g->pmax != G_PMAX)
-    fprintf (fout, "\tpmax:\t%d\n", g->pmax);
-  if (g->rmin != G_RMIN)
-    fprintf (fout, "\trmin:\t%d\n", g->rmin);
-  if (g->rmax != G_RMAX)
-    fprintf (fout, "\trmax:\t%d\n", g->rmax);
-  if (g->smax != G_SMAX)
-    fprintf (fout, "\tsmax:\t%d\n", g->smax);
-}
diff --git a/src/vcg.h b/src/vcg.h
deleted file mode 100644
index ed35603..0000000
--- a/src/vcg.h
+++ /dev/null
@@ -1,963 +0,0 @@
-/* VCG description handler for Bison.
-
-   Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
-
-   This file is part of Bison, the GNU Compiler Compiler.
-
-   Bison 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.
-
-   Bison 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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#ifndef VCG_H_
-# define VCG_H_
-
-/* VCG color map. The 32 prime predefined colors. */
-enum color
-{
-  white		= 0,
-  blue,
-  red,
-  green		= 3,
-  yellow,
-  magenta,
-  cyan		= 6,
-  darkgrey,
-  darkblue,
-  darkred	= 9,
-  darkgreen,
-  darkyellow,
-  darkmagenta	= 12,
-  darkcyan,
-  gold,
-  lightgrey	= 15,
-  lightblue,
-  lightred,
-  lightgreen	= 18,
-  lightyellow,
-  lightmagenta,
-  lightcyan	= 21,
-  lilac,
-  turquoise,
-  aquamarine	= 24,
-  khaki,
-  purple,
-  yellowgreen	= 27,
-  pink,
-  orange,
-  orchid,
-  black		= 31
-};
-
-/* VCG textmode. Specify the adjustement of the text within the border of a summary node. */
-enum textmode
-{
-  centered,
-  left_justify,
-  right_justify
-};
-
-/* VCG shapes. Used for nodes shapes. */
-enum shape
-{
-  box,
-  rhomb,
-  ellipse,
-  triangle
-};
-
-/* Structure for colorentries.  */
-struct colorentry
-{
-  int color_index;
-  int red_cp;
-  int green_cp;
-  int blue_cp;
-  struct colorentry *next;
-};
-
-/* Structure to construct lists of classnames. */
-struct classname
-{
-  int no; /* Class number */
-  const char *name; /* Name associated to the class no. */
-  struct classname *next; /* next name class association. */
-};
-
-/* Structure is in infoname.  */
-struct infoname
-{
-  int integer;
-  char const *chars;
-  struct infoname *next;
-};
-
-/* VCG decision yes/no. */
-enum decision
-{
-  yes,
-  no
-};
-
-/* VCG graph orientation. */
-enum orientation
-{
-  top_to_bottom,
-  bottom_to_top,
-  left_to_right,
-  right_to_left
-};
-
-/* VCG alignment for node alignement. */
-enum alignment
-{
-  center,
-  top,
-  bottom
-};
-
-/* VCG arrow mode. */
-enum arrow_mode
-{
-  fixed,
-  free_a
-};
-
-/* VCG crossing weight type. */
-enum crossing_type
-{
-  bary,
-  median,
-  barymedian,
-  medianbary
-};
-
-/* VCG views. */
-enum view
-{
-  normal_view,
-  cfish,
-  pfish,
-  fcfish,
-  fpfish
-};
-
-/*------------------------------------------------------.
-| Node attributs list. structure that describes a node. |
-`------------------------------------------------------*/
-
-struct node
-{
-  /* Title the unique string identifying the node. This attribute is
-     mandatory. */
-  const char *title;
-
-  /* Label the text displayed inside the node. If no label is specified
-     then the title of the node will be used. Note that this text may
-     contain control characters like NEWLINE that influences the size of
-     the node. */
-  const char *label;
-
-  /* loc is the location as x, y position relatively to the system of
-     coordinates of the graph. Locations are specified in the form
-     loc: - x: xpos y: ypos "". The locations of nodes are only valid,
-     if the whole graph is fully specified with locations and no part is
-     folded. The layout algorithm of the tool calculates appropriate x, y
-     positions, if at least one node that must be drawn (i.e., is not
-     hidden by folding or edge classes) does not have fixed specified
-     locations.
-     Default is none. */
-  int locx;
-  int locy;
-
-  /* vertical order is the level position (rank) of the node. We can also
-     specify level: int. Level specifications are only valid, if the
-     layout is calculated, i.e. if at least one node does not have a
-     fixed location specification. The layout algorithm partitioned all
-     nodes into levels 0...maxlevel. Nodes at the level 0 are on the
-     upper corner. The algorithm is able to calculate appropriate levels
-     for the nodes automatically, if no fixed levels are given.
-     Specifications of levels are additional constraints, that may be
-     ignored, if they are in conflict with near edge specifications.
-     Default values are unspecified. */
-  int vertical_order;
-
-  /* horizontal order is the horizontal position of the node within a
-     level. The nodes which are specified with horizontal positions are
-     ordered according to these positions within the levels. The nodes
-     which do not have this attribute are inserted into this ordering by
-     the crossing reduction mechanism. Note that connected components are
-     handled separately, thus it is not possible to intermix such
-     components by specifying a horizontal order. If the algorithm for
-     downward laid out trees is used, the horizontal order influences
-     only the order of the child nodes at a node, but not the order of
-     the whole level.
-     Default is unspecified. */
-  int horizontal_order;
-
-  /* width, height is the width and height of a node including the border.
-     If no value (in pixels) is given then width and height are
-     calculated from the size of the label.
-     Default are width and height of the label. */
-  int width;
-  int height;
-
-  /* shrink, stretch gives the shrinking and stretching factor of the
-     node. The values of the attributes width, height, borderwidth and
-     the size of the label text is scaled by ((stretch=shrink) \Lambda
-     100) percent. Note that the actual scale value is determined by the
-     scale value of a node relatively to a scale value of the graph,
-     i.e. if (stretch,shrink) = (2,1) for the graph and (stretch,shrink)
-     = (2,1) for the node of the graph, then the node is scaled by the
-     factor 4 compared to the normal size. The scale value can also be
-     specified by scaling: float.
-     Default are 1,1. */
-  int shrink;
-  int stretch;
-
-  /* folding specifies the default folding of the nodes. The folding k
-     (with k ? 0) means that the graph part that is reachable via edges
-     of a class less or equal to k is folded and displayed as one node.
-     There are commands to unfold such summary nodes, see section 5. If
-     no folding is specified for a node, then the node may be folded if
-     it is in the region of another node that starts the folding. If
-     folding 0 is specified, then the node is never folded. In this case
-     the folding stops at the predecessors of this node, if it is
-     reachable from another folding node. The summary node inherits some
-     attributes from the original node which starts the folding (all
-     color attributes, textmode and label, but not the location). A
-     folded region may contain folded regions with smaller folding class
-     values (nested foldings). If there is more than one node that start
-     the folding of the same region (this implies that the folding class
-     values are equal) then the attributes are inherited by one of these
-     nodes nondeterministically. If foldnode attributes are specified,
-     then the summary node attributes are inherited from these attributes.
-     Default is none. */
-  int folding;
-
-  /* shape specifies the visual appearance of a node: box, rhomb, ellipse,
-     and triangle. The drawing of ellipses is much slower than the drawing
-     of the other shapes.
-     Default is box. */
-  enum shape shape;
-
-  /* textmode specifies the adjustment of the text within the border of a
-     node. The possibilities are center, left.justify and right.justify.
-     Default is center. */
-  enum textmode textmode;
-
-  /* borderwidth specifies the thickness of the node's border in pixels.
-     color is the background color of the node. If none is given, the
-     node is white. For the possibilities, see the attribute color for
-     graphs.
-     Default is 2. */
-  int borderwidth;
-
-  /* node color.
-     Default is white or transparent, */
-  enum color color;
-
-  /* textcolor is the color for the label text. bordercolor is the color
-     of the border. Default color is the textcolor. info1, info2, info3
-     combines additional text labels with a node or a folded graph. info1,
-     Default is black. */
-  enum color textcolor;
-
-  /* info2, info3 can be selected from the menu. The corresponding text
-     labels can be shown by mouse clicks on nodes.
-     Default are null strings. */
-  const char *infos[3];
-
-  /* Node border color.
-     Default is textcolor. */
-  enum color bordercolor;
-
-  /* Next node node... */
-  struct node *next;
-};
-
-/* typedef alias. */
-typedef struct node node;
-
-/*-------------------------------------------------------.
-| Edge attributs list. Structure that describes an edge. |
-`-------------------------------------------------------*/
-
-/* VCG Edge type. */
-enum edge_type
-{
-  normal_edge,
-  back_edge,
-  near_edge,
-  bent_near_edge
-};
-
-/* Structs enum definitions for edges. */
-enum linestyle
-{
-  continuous,
-  dashed,
-  dotted,
-  invisible
-};
-
-enum arrowstyle
-{
-  solid,
-  line,
-  none
-};
-
-/* The struct edge itself. */
-struct edge
-{
-
-  /* Edge type.
-     Default is normal edge. */
-  enum edge_type type;
-
-  /* Sourcename is the title of the source node of the edge.
-     Default: none. */
-  const char *sourcename; /* Mandatory. */
-
-  /* Targetname is the title of the target node of the edge.
-     Default: none. */
-  const char *targetname; /* Mandatory. */
-
-  /* Label specifies the label of the edge. It is drawn if
-     display.edge.labels is set to yes.
-     Default: no label. */
-  const char *label;
-
-  /* Linestyle specifies the style the edge is drawn. Possibilities are:
-     ffl continuous a solid line is drawn ( -- ) ffl dashed the edge
-     consists of single dashes ( - - - ) ffl dotted the edge is made of
-     single dots ( \Delta  \Delta  \Delta  ) ffl invisible the edge is not
-     drawn. The attributes of its shape (color, thickness) are ignored.
-     To draw a dashed or dotted line needs more time than solid lines.
-     Default is continuous. */
-  enum linestyle linestyle;
-
-  /* Thickness is the thickness of an edge.
-     Default is 2. */
-  int thickness;
-
-  /* Class specifies the folding class of the edge. Nodes reachable by
-     edges of a class less or equal to a constant k specify folding
-     regions of k. See the node attribute folding and the folding commands.
-     Default is 1. */
-  int class;
-
-  /* color is the color of the edge.
-     Default is black. */
-  enum color color;
-
-  /* textcolor is the color of the label of the edge. arrowcolor,
-     backarrowcolor is the color of the arrow head and of the backarrow
-     head. priority The positions of the nodes are mainly determined by
-     the incoming and outgoing edges. One can think of rubberbands instead
-     of edges that pull a node into its position. The priority of an edges
-     corresponds to the strength of the rubberband.
-     Default is color. */
-  enum color textcolor;
-
-  /* Arrow color.
-     Default is color. */
-  enum color arrowcolor;
-
-  /* BackArrow color.
-     Default is color. */
-  enum color backarrowcolor;
-
-  /* arrowsize, backarrowsize The arrow head is a right-angled, isosceles
-     triangle and the cathetuses have length arrowsize.
-     Default is 10. */
-  int arrowsize;
-
-  /* Backarrow size
-     Default is 0. */
-  int backarrowsize;
-
-  /* arrowstyle, backarrowstyle Each edge has two arrow heads: the one
-     appears at the target node (the normal arrow head), the other appears
-     at the source node (the backarrow head). Normal edges only have the
-     normal solid arrow head, while the backarrow head is not drawn, i.e.
-     it is none. Arrowstyle is the style of the normal arrow head, and
-     backarrowstyle is the style of the backarrow head. Styles are none,
-     i.e. no arrow head, solid, and line.
-     Default is solid. */
-  enum arrowstyle arrowstyle;
-
-  /* Default is none. */
-  enum arrowstyle backarrowstyle;
-
-  /* Default is 1. */
-  int priority;
-
-  /* Anchor. An anchor point describes the vertical position in a node
-     where an edge goes out. This is useful, if node labels are several
-     lines long, and outgoing edges are related to label lines. (E.g.,
-     this allows a nice visualization of structs containing pointers as
-     fields.).
-     Default is none. */
-  int anchor;
-
-  /* Horizontal order is the horizontal position the edge. This is of
-     interest only if the edge crosses several levels because it specifies
-     the point where the edge crosses the level. within a level. The nodes
-     which are specified with horizontal positions are ordered according
-     to these positions within a level. The horizontal position of a long
-     edge that crosses the level specifies between which two node of that
-     level the edge has to be drawn. Other edges which do not have this
-     attribute are inserted into this ordering by the crossing reduction
-     mechanism. Note that connected components are handled separately,
-     thus it is not possible to intermix such components by specifying a
-     horizontal order.
-     Default is unspcified. */
-  int horizontal_order;
-
-  /*
-  ** Next edge node...
-  */
-  struct edge *next;
-
-};
-
-/*
-** typedef alias.
-*/
-typedef struct edge edge;
-
-/*--------------------------------------------------------.
-| Graph attributs list. Structure that describes a graph. |
-`--------------------------------------------------------*/
-
-struct graph
-{
-  /* Graph title or name.
-     Title specifies the name (a string) associated with the graph. The
-     default name of a subgraph is the name of the outer graph, and the
-     name of the outmost graph is the name of the specification input
-     file. The name of a graph is used to identify this graph, e.g., if
-     we want to express that an edge points to a subgraph. Such edges
-     point to the root of the graph, i.e. the first node of the graph or
-     the root of the first subgraph in the graph, if the subgraph is
-     visualized explicitly.
-     By default, it's the name of the vcg graph file description. */
-  const char *title;
-
-  /* Graph label.
-     Label the text displayed inside the node, when the graph is folded
-     to a node. If no label is specified then the title of the graph will
-     be used. Note that this text may contain control characters like
-     NEWLINE that influences the size of the node.
-     By default, it takes the title value */
-  const char *label;
-
-  /* Any informations.
-     Info1, info2, info3 combines additional text labels with a node or a
-     folded graph. info1, info2, info3 can be selected from the menu
-     interactively. The corresponding text labels can be shown by mouse
-     clicks on nodes.
-     Default values are empty strings (here NULL pointers) */
-  const char *infos[3];
-
-  /* Background color and summary node colors
-     Color specifies the background color for the outermost graph, or the
-     color of the summary node for subgraphs. Colors are given in the enum
-     declared above. If more than these default colors are needed, a
-     color map with maximal 256 entries can be used. The first 32 entries
-     correspond to the colors just listed. A color of the color map can
-     selected by the color map index, an integer, for instance red has
-     index 2, green has index 3, etc.
-     Default is white for background and white or transparent for summary
-     nodes. */
-  enum color color;
-
-  /* Textcolor.
-     need explanations ???
-     default is black for summary nodes. */
-  enum color textcolor;
-
-  /* Bordercolor is the color of the summary node's border. Default color
-     is the textcolor. width, height are width and height of the
-     displayed part of the window of the outermost graph in pixels, or
-     width and height of the summary node of inner subgraphs.
-     Default is the default of the textcolor. */
-  enum color bordercolor;
-
-  /* Width, height are width and height of the displayed part of the
-     window of the outermost graph in pixels, or width and height of the
-     summary node of inner subgraphs.
-     Default value is 100. */
-  int width;
-  int height;
-
-  /* Specify the thickness if summary node's border in pixels.
-     default value is 2. */
-  int borderwidth;
-
-  /* x, y are the x-position and y-position of the graph's window in
-     pixels, relatively to the root screen, if it is the outermost graph.
-     The origin of the window is upper, left hand. For inner subgraphs,
-     it is the position of the folded summary node. The position can also
-     be specified in the form loc: fx:int y:intg.
-     The default value is 0. */
-  int x;
-  int y;
-
-  /* folding of a subgraph is 1, if the subgraph is fused, and 0, if the
-     subgraph is visualized explicitly. There are commands to unfold such
-     summary nodes.
-     Default value is 0 */
-  int folding;
-
-  /* Shrink, stretch gives the shrinking and stretching factor for the
-     graph's representation (default is 1, 1). ((stretch=shrink) \Lambda
-     100) is the scaling of the graph in percentage, e.g.,
-     (stretch,shrink) = (1,1) or (2,2) or (3,3) : : : is normal size,
-     (stretch,shrink) = (1,2) is half size, (stretch,shrink) = (2,1) is
-     double size. For subgraphs, it is also the scaling factor of the
-     summary node. The scaling factor can also be specified by scaling:
-     float (here, scaling 1.0 means normal size). */
-  int shrink;
-  int stretch;
-
-  /* textmode specifies the adjustment of the text within the border of a
-     summary node. The possibilities are center, left.justify and
-     right.justify.
-     Default value is center.*/
-  enum textmode textmode;
-
-  /* Shape can be specified for subgraphs only. It is the shape of the
-     subgraph summary node that appears if the subgraph is folded: box,
-     rhomb, ellipse, and triangle. vertical order is the level position
-     (rank) of the summary node of an inner subgraph, if this subgraph is
-     folded. We can also specify level: int. The level is only
-     recognized, if an automatical layout is calculated. horizontal order
-     is the horizontal position of the summary node within a level. The
-     nodes which are specified with horizontal positions are ordered
-     according to these positions within the levels. The nodes which do
-     not have this attribute are inserted into this ordering by the
-     crossing reduction mechanism. Note that connected
-     components are handled separately, thus it is not possible to
-     intermix such components by specifying a horizontal order. If the
-     algorithm for downward laid out trees is used, the horizontal order
-     influences only the order of the child nodes at a node, but not the
-     order of the whole level.
-     Default is box, other: rhomb, ellipse, triangle. */
-  enum shape shape;
-
-  /* Vertical order is the level position (rank) of the summary node of an
-     inner subgraph, if this subgraph is folded. We can also specify
-     level: int. The level is only recognized, if an automatical layout is
-     calculated.  */
-  int vertical_order;
-
-  /* Horizontal order is the horizontal position of the summary node within
-     a level. The nodes which are specified with horizontal positions are
-     ordered according to these positions within the levels. The nodes which
-     do not have this attribute are inserted into this ordering by the
-     crossing reduction mechanism. Note that connected components are
-     handled separately, thus it is not possible to intermix such components
-     by specifying a horizontal order. If the algorithm for downward laid
-     out trees is used, the horizontal order influences only the order of
-     the child nodes at a node, but not the order of the whole level.  */
-  int horizontal_order;
-
-  /* xmax, ymax specify the maximal size of the virtual window that is
-     used to display the graph. This is usually larger than the displayed
-     part, thus the width and height of the displayed part cannot be
-     greater than xmax and ymax. Only those parts of the graph are drawn
-     that are inside the virtual window. The virtual window can be moved
-     over the potential infinite system of coordinates by special
-     positioning commands.
-     Defaults are 90 and 90. */
-  int xmax;
-  int ymax;
-
-  /* xy-base: specify the upper left corner coordinates of the graph
-     relatively to the root window.
-     Defaults are 5, 5. */
-  int xbase;
-  int ybase;
-
-  /* xspace, yspace the minimum horizontal and vertical distance between
-     nodes. xlspace is the horizontal distance between lines at the
-     points where they cross the levels. (At these points, dummy nodes
-     are used. In fact, this is the horizontal distance between dummy
-     nodes.) It is recommended to set xlspace to a larger value, if
-     splines are used to draw edges, to prevent sharp bendings.
-     Default are 20 and 70. */
-  int xspace;
-  int yspace;
-
-  /* The horizontal space between lines at the point where they cross
-     the levels.
-     defaults value is 1/2 xspace (polygone) and 4/5 xspace (splines)*/
-  int xlspace;
-
-  /* xraster, yraster specifies the raster distance for the position of
-     the nodes. The center of a node is aligned to this raster. xlraster
-     is the horizontal raster for the positions of the line control
-     points (the dummy nodes). It should be a divisor of xraster.
-     defaults are 1,1. */
-  int xraster;
-  int yraster;
-
-  /* xlraster is the horizontal raster for the positions of the line
-     control points (the dummy nodes). It should be a divisor of xraster.
-     defaults is 1. */
-  int xlraster;
-
-  /* hidden specifies the classes of edges that are hidden.
-     Edges that are within such a class are not laid out nor drawn.
-     Nodes that are only reachable (forward or backward) by edges of an
-     hidden class are not drawn. However, nodes that are not reachable
-     at all are drawn. (But see attribute ignore.singles.) Specification
-     of classes of hidden edges allows to hide parts of a graph, e.g.,
-     annotations of a syntax tree. This attribute is only allowed at the
-     outermost level. More than one settings are possible to specify
-     exactly the set of classes that are hidden. Note the important
-     difference between hiding of edges and the edge line style invisible.
-     Hidden edges are not existent in the layout. Edges with line style
-     invisible are existent in the layout; they need space and may
-     produce crossings and influence the layout, but you cannot see
-     them.
-     No default value. */
-  int hidden;
-
-  /* Classname allows to introduce names for the edge classes. The names
-     are used in the menus. infoname allows to introduce names for the
-     additional text labels. The names are used in the menus.
-     defaults are 1,2,3...
-     By default, no class names. */
-  struct classname *classname;
-
-  /* Infoname allows to introduce names for the additional text labels.
-     The names are used in the menus.
-     Infoname is given by an integer and a string.
-     The default value is NULL.  */
-  struct infoname *infoname;
-
-  /* Colorentry allows to fill the color map. A color is a triplet of integer
-     values for the red/green/blue-part. Each integer is between 0 (off) and
-     255 (on), e.g., 0 0 0 is black and 255 255 255 is white. For instance
-     colorentry 75 : 70 130 180 sets the map entry 75 to steel blue. This
-     color can be used by specifying just the number 75.
-     Default id NULL.  */
-  struct colorentry *colorentry;
-
-  /* Layout downfactor, layout upfactor, layout nearfactor The layout
-     algorithm partitions the set of edges into edges pointing upward,
-     edges pointing downward, and edges pointing sidewards. The last type
-     of edges is also called near edges. If the layout.downfactor is
-     large compared to the layout.upfactor and the layout.nearfactor,
-     then the positions of the nodes is mainly determined by the edges
-     pointing downwards. If the layout.upfactor is large compared to the
-     layout.downfactor and the layout.nearfactor, then the positions of
-     the nodes is mainly determined by the edges pointing upwards. If the
-     layout.nearfactor is large, then the positions of the nodes is
-     mainly determined by the edges pointing sidewards. These attributes
-     have no effect, if the method for downward laid out trees is used.
-     Default is normal. */
-  int layout_downfactor;
-  int layout_upfactor;
-  int layout_nearfactor;
-  /* Layout splinefactor determines the bending at splines. The factor
-     100 indicates a very sharp bending, a factor 1 indicates a very flat
-     bending. Useful values are 30 : : : 80. */
-  int layout_splinefactor;
-
-  /* Late edge labels yes means that the graph is first partitioned and
-     then, labels are introduced. The default algorithm first creates
-     labels and then partitions the graph, which yield a more compact
-     layout, but may have more crossings.
-     Default is no. */
-  enum decision late_edge_labels;
-
-  /* Display edge labels yes means display labels and no means don't
-     display edge labels.
-     Default vaule is no. */
-  enum decision display_edge_labels;
-
-  /* Dirty edge labels yes enforces a fast layout of edge labels, which
-     may very ugly because several labels may be drawn at the same place.
-     Dirty edge labels cannot be used if splines are used.
-     Default is no.
-  */
-  enum decision dirty_edge_labels;
-
-  /* Finetuning no switches the fine tuning phase of the graph layout
-     algorithm off, while it is on as default. The fine tuning phase
-     tries to give all edges the same length.
-     Default is yes. */
-  enum decision finetuning;
-
-  /* Ignore singles yes hides all nodes which would appear single and
-     unconnected from the remaining graph. Such nodes have no edge at all
-     and are sometimes very ugly. Default is to show all nodes.
-     Default is no. */
-  enum decision ignore_singles;
-
-  /* priority phase yes replaces the normal pendulum method by a
-     specialized method: It forces straight long edges with 90 degree,
-     just as the straight phase. In fact, the straight phase is a fine
-     tune phase of the priority method. This phase is also recommended,
-     if an orthogonal layout is selected (see manhattan.edges).
-     Default is no. */
-  enum decision priority_phase;
-
-  /* manhattan edges yes switches the orthogonal layout on. Orthogonal
-     layout (or manhattan layout) means that all edges consist of line
-     segments with gradient 0 or 90 degree. Vertical edge segments might
-     by shared by several edges, while horizontal edge segments are never
-     shared. This results in very aesthetical layouts just for flowcharts.
-     If the orthogonal layout is used, then the priority phase and
-     straight phase should be used. Thus, these both phases are switched
-     on, too, unless priority layout and straight line tuning are
-     switched off explicitly.
-     Default is no. */
-  enum decision manhattan_edges;
-
-  /* Smanhattan edges yes switches a specialized orthogonal layout on:
-     Here, all horizontal edge segments between two levels share the same
-     horizontal line, i.e. not only vertical edge segments are shared,
-     but horizontal edge segments are shared by several edges, too. This
-     looks nice for trees but might be too confusing in general, because
-     the location of an edge might be ambiguously.
-     Default is no. */
-  enum decision smanhattan_edges;
-
-  /* Near edges no suppresses near edges and bent near edges in the
-     graph layout.
-     Default is yes. */
-  enum decision near_edges;
-
-  /* Orientation specifies the orientation of the graph: top.to.bottom,
-     bottom.to.top, left.to.right or right.to.left. Note: the normal
-     orientation is top.to.bottom. All explanations here are given
-     relatively to the normal orientation, i.e., e.g., if the orientation
-     is left to right, the attribute xlspace is not the horizontal but
-     the vertical distance between lines, etc.
-     Default is to_to_bottom. */
-  enum orientation orientation;
-
-  /* Node alignment specified the vertical alignment of nodes at the
-     horizontal reference line of the levels. If top is specified, the
-     tops of all nodes of a level have the same y-coordinate; on bottom,
-     the bottoms have the same y-coordinate, on center the nodes are
-     centered at the levels.
-     Default is center. */
-  enum alignment node_alignment;
-
-  /* Port sharing no suppresses the sharing of ports of edges at the
-     nodes. Normally, if multiple edges are adjacent to the same node,
-     and the arrow head of all these edges has the same visual appearance
-     (color, size, etc.), then these edges may share a port at a node,
-     i.e. only one arrow head is draw, and all edges are incoming into
-     this arrow head. This allows to have many edges adjacent to one node
-     without getting confused by too many arrow heads. If no port sharing
-     is used, each edge has its own port, i.e. its own place where it is
-     adjacent to the node.
-     Default is yes. */
-  enum decision port_sharing;
-
-  /* Arrow mode fixed (default) should be used, if port sharing is used,
-     because then, only a fixed set of rotations for the arrow heads are
-     used. If the arrow mode is free, then each arrow head is rotated
-     individually to each edge. But this can yield to a black spot, where
-     nothing is recognizable, if port sharing is used, since all these
-     qdifferently rotated arrow heads are drawn at the same place. If the
-     arrow mode is fixed, then the arrow head is rotated only in steps of
-     45 degree, and only one arrow head occurs at each port.
-     Default is fixed. */
-  enum arrow_mode arrow_mode;
-
-  /* Treefactor The algorithm tree for downward laid out trees tries to
-     produce a medium dense, balanced tree-like layout. If the tree
-     factor is greater than 0.5, the tree edges are spread, i.e. they
-     get a larger gradient. This may improve the readability of the tree.
-     Note: it is not obvious whether spreading results in a more dense or
-     wide layout. For a tree, there is a tree factor such that the whole
-     tree is minimal wide.
-     Default is 0.5. */
-  float treefactor;
-
-  /* Spreadlevel This parameter only influences the algorithm tree, too.
-     For large, balanced trees, spreading of the uppermost nodes would
-     enlarge the width of the tree too much, such that the tree does not
-     fit anymore in a window. Thus, the spreadlevel specifies the minimal
-     level (rank) where nodes are spread. Nodes of levels upper than
-     spreadlevel are not spread.
-     Default is 1. */
-  int spreadlevel;
-
-  /* Crossing weight specifies the weight that is used for the crossing
-     reduction: bary (default), median, barymedian or medianbary. We
-     cannot give a general recommendation, which is the best method. For
-     graphs with very large average degree of edges (number of incoming
-     and outgoing edges at a node), the weight bary is the fastest
-     method. With the weights barymedian and medianbary, equal weights of
-     different nodes are not very probable, thus the crossing reduction
-     phase 2 might be very fast.
-     Default is bary. */
-  enum crossing_type crossing_weight;
-
-  /* Crossing phase2 is the most time consuming phase of the crossing
-     reduction. In this phase, the nodes that happen to have equal
-     crossing weights are permuted. By specifying no, this phase is
-     suppressed.
-     Default is yes. */
-  enum decision crossing_phase2;
-
-  /* Crossing optimization is a postprocessing phase after the normal
-     crossing reduction: we try to optimize locally, by exchanging pairs
-     of nodes to reduce the crossings. Although this phase is not very
-     time consuming, it can be suppressed by specifying no.
-     Default is yes. */
-  enum decision crossing_optimization;
-
-  /* View allows to select the fisheye views. Because
-     of the fixed size of the window that shows the graph, we normally
-     can only see a small amount of a large graph. If we shrink the graph
-     such that it fits into the window, we cannot recognize any detail
-     anymore. Fisheye views are coordinate transformations: the view onto
-     the graph is distort, to overcome this usage deficiency. The polar
-     fisheye is easy to explain: assume a projection of the plane that
-     contains the graph picture onto a spheric ball. If we now look onto
-     this ball in 3 D, we have a polar fisheye view. There is a focus
-     point which is magnified such that we see all details. Parts of the
-     plane that are far away from the focus point are demagnified very
-     much. Cartesian fisheye have a similar effect; only the formula for
-     the coordinate transformation is different. Selecting cfish means
-     the cartesian fisheye is used which demagnifies such that the whole
-     graph is visible (self adaptable cartesian fisheye). With fcfish,
-     the cartesian fisheye shows the region of a fixed radius around the
-     focus point (fixed radius cartesian fisheye). This region might be
-     smaller than the whole graph, but the demagnification needed to show
-     this region in the window is also not so large, thus more details
-     are recognizable. With pfish the self adaptable polar fisheye is
-     selected that shows the whole graph, and with fpfish the fixed
-     radius polar fisheye is selected.
-     Default is normal view.  */
-  enum view view;
-
-  /* Edges no suppresses the drawing of edges.
-     Default is yes. */
-  enum decision edges;
-
-  /* Nodes no suppresses the drawing of nodes.
-     Default is yes. */
-  enum decision nodes;
-
-  /* Splines specifies whether splines are used to draw edges (yes or no).
-     As default, polygon segments are used to draw edges, because this is
-     much faster. Note that the spline drawing routine is not fully
-     validated, and is very slow. Its use is mainly to prepare high
-     quality PostScript output for very small graphs.
-     Default is no. */
-  enum decision splines;
-
-  /* Bmax set the maximal number of iterations that are done for the
-     reduction of edge bendings.
-   Default is 100. */
-  int bmax;
-
-  /* Cmin set the minimal number of iterations that are done for the
-     crossing reduction with the crossing weights. The normal method
-     stops if two consecutive checks does not reduce the number of
-     crossings anymore. However, this increasing of the number of
-     crossings might be locally, such that after some more iterations,
-     the crossing number might decrease much more.
-     Default is 0. */
-  int cmin;
-
-  /* Cmax set the maximal number of interactions for crossing reduction.
-     This is helpful for speeding up the layout process.
-     Default is -1, which represents infinity.  */
-  int cmax;
-
-  /* Pmin set the minimal number of iterations that is done with the
-     pendulum method. Similar to the crossing reduction, this method
-     stops if the `imbalancement weight' does not decreases anymore.
-     However, the increasing of the imbalancement weight might be locally,
-     such that after some more iterations, the imbalancement weight might
-     decrease much more.
-     Default is 0. */
-  int pmin;
-
-  /* Pmax set the maximal number of iterations of the pendulum method.
-     This is helpful for speedup the layout process.
-     Default is 100. */
-  int pmax;
-
-  /* Rmin set the minimal number of iterations that is done with the
-     rubberband method. This is similar as for the pendulum method.
-     Default is 0. */
-  int rmin;
-
-  /* Rmax set the maximal number of iterations of the rubberband method.
-     This is helpful for speedup the layout process.
-     Default is 100. */
-  int rmax;
-
-  /* Smax set the maximal number of iterations of the straight line
-     recognition phase (useful only, if the straight line recognition
-     phase is switched on, see attribute straight.phase).
-     Default is 100. */
-  int smax;
-
-  /* Generic values.
-   */
-  node node;
-  edge edge;
-
-  /* List of nodes declared.
-     Pointer. */
-  node *node_list;
-
-  /* List of edges declared.
-     Pointer. */
-  edge *edge_list;
-
-};
-
-/* Graph typedefs. */
-typedef struct graph graph;
-
-void new_graph (graph *g);
-void new_node (node *n);
-void new_edge (edge *e);
-
-void add_node (graph *g, node *n);
-void add_edge (graph *g, edge *e);
-
-void add_colorentry (graph *g, int color_idx, int red_cp,
-		     int green_cp, int blue_cp);
-void add_classname (graph *g, int val, const char *name);
-void add_infoname (graph *g, int val, const char *name);
-
-void open_node (FILE *fout);
-void output_node (node *n, FILE *fout);
-void close_node (FILE *fout);
-
-void open_edge (edge *e, FILE *fout);
-void output_edge (edge *e, FILE *fout);
-void close_edge (FILE *fout);
-
-void open_graph (FILE *fout);
-void output_graph (graph *g, FILE *fout);
-void close_graph (graph *g, FILE *fout);
-
-#endif /* VCG_H_ */
diff --git a/src/vcg_defaults.h b/src/vcg_defaults.h
deleted file mode 100644
index 78e24b5..0000000
--- a/src/vcg_defaults.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/* VCG description handler for Bison.
-
-   Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
-
-   This file is part of Bison, the GNU Compiler Compiler.
-
-   Bison 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.
-
-   Bison 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 Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-#ifndef VCG_DEFAULTS_H_
-# define VCG_DEFAULTS_H_
-
-/* Graph defaults. */
-# define G_TITLE		NULL
-# define G_LABEL		NULL
-# define G_INFOS1		NULL
-# define G_INFOS2		NULL
-# define G_INFOS3		NULL
-
-# define G_COLOR		white
-# define G_TEXTCOLOR		black
-# define G_BORDERCOLOR		G_TEXTCOLOR
-
-# define G_WIDTH		100
-# define G_HEIGHT		100
-# define G_BORDERWIDTH		2
-
-# define G_X			0
-# define G_Y			0
-
-# define G_FOLDING		0
-
-# define G_SHRINK		1
-# define G_STRETCH		1
-
-# define G_TEXTMODE		centered
-# define G_SHAPE		box
-
-# define G_VERTICAL_ORDER	0	/* Unspecified for subgraphs.  */
-# define G_HORIZONTAL_ORDER	0	/* Unspecified for subgraphs.  */
-
-# define G_XMAX			90	/* Not output.  */
-# define G_YMAX			90	/* Not output.  */
-
-# define G_XBASE		5
-# define G_YBASE		5
-
-# define G_XSPACE		20
-# define G_YSPACE		70
-# define G_XLSPACE		(G_XSPACE / 2)	/* Not output */
-
-# define G_XRASTER		1
-# define G_YRASTER		1
-# define G_XLRASTER		1
-
-# define G_HIDDEN		(-1)	/* No default value.  */
-
-# define G_CLASSNAME		NULL	/* No class name association.  */
-# define G_INFONAME		NULL
-# define G_COLORENTRY		NULL
-
-# define G_LAYOUTALGORITHM	normal
-# define G_LAYOUT_DOWNFACTOR	1
-# define G_LAYOUT_UPFACTOR	1
-# define G_LAYOUT_NEARFACTOR	1
-# define G_LAYOUT_SPLINEFACTOR	70
-
-# define G_LATE_EDGE_LABELS	no
-# define G_DISPLAY_EDGE_LABELS	no
-# define G_DIRTY_EDGE_LABELS	no
-# define G_FINETUNING		yes
-# define G_IGNORE_SINGLES	no
-# define G_LONG_STRAIGHT_PHASE	no
-# define G_PRIORITY_PHASE	no
-# define G_MANHATTAN_EDGES	no
-# define G_SMANHATTAN_EDGES	no
-# define G_NEAR_EDGES		yes
-
-# define G_ORIENTATION		top_to_bottom
-# define G_NODE_ALIGNMENT	center
-# define G_PORT_SHARING		yes
-# define G_ARROW_MODE		fixed
-# define G_TREEFACTOR		0.5
-# define G_SPREADLEVEL		1
-# define G_CROSSING_WEIGHT	bary
-# define G_CROSSING_PHASE2	yes
-# define G_CROSSING_OPTIMIZATION	yes
-# define G_VIEW			normal_view
-
-# define G_EDGES		yes
-# define G_NODES		yes
-# define G_SPLINES		no
-
-# define G_BMAX			100
-# define G_CMIN			0
-# define G_CMAX			(-1)	/* Infinity */
-# define G_PMIN			0
-# define G_PMAX			100
-# define G_RMIN			0
-# define G_RMAX			100
-# define G_SMAX			100
-
-# define G_NODE_LIST		NULL
-# define G_EDGE_LIST		NULL
-
-/* Nodes defaults. */
-# define N_TITLE		NULL
-# define N_LABEL		NULL
-
-# define N_LOCX			(-1)	/* Default unspcified */
-# define N_LOCY			(-1)	/* Default unspcified */
-
-# define N_VERTICAL_ORDER	(-1)	/* Default unspcified */
-# define N_HORIZONTAL_ORDER	(-1)	/* Default unspcified */
-
-# define N_WIDTH		(-1)	/* We assume that we can't define it now. */
-# define N_HEIGHT		(-1)	/* also. */
-
-# define N_SHRINK		1
-# define N_STRETCH		1
-
-# define N_FOLDING		(-1)	/* no explicit default value. */
-
-# define N_SHAPE		box
-# define N_TEXTMODE		centered
-# define N_BORDERWIDTH		2
-
-# define N_COLOR		white
-# define N_TEXTCOLOR		black
-# define N_BORDERCOLOR		N_TEXTCOLOR
-
-# define N_INFOS1		NULL
-# define N_INFOS2		NULL
-# define N_INFOS3		NULL
-
-# define N_NEXT			NULL
-
-/* Edge defaults. */
-# define E_EDGE_TYPE		normal_edge
-
-# define E_SOURCENAME		NULL	/* Mandatory. */
-# define E_TARGETNAME		NULL	/* Mandatory. */
-# define E_LABEL		NULL
-
-# define E_LINESTYLE		continuous
-# define E_THICKNESS		2
-
-# define E_CLASS		1
-
-# define E_COLOR		black
-# define E_TEXTCOLOR		E_COLOR
-# define E_ARROWCOLOR		E_COLOR
-# define E_BACKARROWCOLOR	E_COLOR
-
-# define E_ARROWSIZE		10
-# define E_BACKARROWSIZE	0
-
-# define E_ARROWSTYLE		solid
-# define E_BACKARROWSTYLE	none
-
-# define E_PRIORITY		1
-
-# define E_ANCHOR		(-1)
-
-# define E_HORIZONTAL_ORDER	(-1)
-
-# define E_NEXT			NULL
-
-#endif /* not VCG_DEFAULTS_H_ */
diff --git a/src/yacc b/src/yacc
deleted file mode 100755
index eda226d..0000000
--- a/src/yacc
+++ /dev/null
@@ -1,2 +0,0 @@
-#! /bin/sh
-exec /home/phanna/src/bison/bin/bison -y "$@"
diff --git a/stamp-h1 b/stamp-h1
deleted file mode 100644
index 4547fe1..0000000
--- a/stamp-h1
+++ /dev/null
@@ -1 +0,0 @@
-timestamp for config.h
diff --git a/tests/Makefile b/tests/Makefile
deleted file mode 100644
index 62b28e6..0000000
--- a/tests/Makefile
+++ /dev/null
@@ -1,423 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# tests/Makefile.  Generated from Makefile.in by configure.
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-srcdir = .
-top_srcdir = ..
-
-pkgdatadir = $(datadir)/bison
-pkglibdir = $(libdir)/bison
-pkgincludedir = $(includedir)/bison
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /usr/bin/install -c
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = x86_64-unknown-linux-gnu
-host_triplet = x86_64-unknown-linux-gnu
-subdir = tests
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/atlocal.in $(srcdir)/bison.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
-	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
-	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
-	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = atlocal bison
-SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run aclocal-1.9
-AMDEP_FALSE = #
-AMDEP_TRUE = 
-AMTAR = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run tar
-AUTOCONF = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoconf
-AUTOHEADER = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autoheader
-AUTOM4TE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run autom4te
-AUTOMAKE = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run automake-1.9
-AWK = gawk
-BISON_CXX_WORKS = :
-BISON_CXX_WORKS_FALSE = #
-BISON_CXX_WORKS_TRUE = 
-BISON_LOCALEDIR = /usr/share/locale
-CC = gcc
-CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
-CPP = gcc -E
-CPPFLAGS = 
-CXX = g++
-CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
-CYGPATH_W = echo
-DEFS = -DHAVE_CONFIG_H
-DEPDIR = .deps
-ECHO_C = 
-ECHO_N = -n
-ECHO_T = 
-EGREP = grep -E
-EXEEXT = 
-GCC = yes
-GETOPT_H = 
-GMSGFMT = /usr/bin/msgfmt
-HAVE__BOOL = 1
-INSTALL_DATA = ${INSTALL} -m 644
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_SCRIPT = ${INSTALL}
-INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
-INTLLIBS = 
-INTL_MACOSX_LIBS = 
-LDFLAGS = 
-LEX = flex
-LEXLIB = -lfl
-LEX_OUTPUT_ROOT = lex.yy
-LIBICONV = -liconv
-LIBINTL = 
-LIBOBJS =  dirname$U.o exitfail$U.o hard-locale$U.o hash$U.o quote$U.o quotearg$U.o fopen-safer$U.o dup-safer$U.o fd-safer$U.o pipe-safer$U.o xmalloc$U.o
-LIBS = 
-LTLIBICONV = -liconv
-LTLIBINTL = 
-LTLIBOBJS =  dirname$U.lo exitfail$U.lo hard-locale$U.lo hash$U.lo quote$U.lo quotearg$U.lo fopen-safer$U.lo dup-safer$U.lo fd-safer$U.lo pipe-safer$U.lo xmalloc$U.lo
-M4 = /usr/bin/m4
-MAKEINFO = ${SHELL} /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/missing --run makeinfo
-MKINSTALLDIRS = $(top_builddir)/build-aux/mkinstalldirs
-MSGFMT = /usr/bin/msgfmt
-MSGMERGE = /usr/bin/msgmerge
-O0CFLAGS = -g 
-O0CXXFLAGS = -g 
-OBJEXT = o
-PACKAGE = bison
-PACKAGE_BUGREPORT = bug-bison@gnu.org
-PACKAGE_NAME = GNU Bison
-PACKAGE_STRING = GNU Bison 2.3
-PACKAGE_TARNAME = bison
-PACKAGE_VERSION = 2.3
-PATH_SEPARATOR = :
-POSUB = po
-RANLIB = ranlib
-SET_MAKE = 
-SHELL = /bin/sh
-STDBOOL_H = 
-STRIP = 
-UNISTD_H = 
-USE_NLS = yes
-VALGRIND = 
-VERSION = 2.3
-WARNING_CFLAGS = 
-WARNING_CXXFLAGS = 
-WERROR_CFLAGS = 
-XGETTEXT = /usr/bin/xgettext
-YACC = bison -y
-YACC_LIBRARY = liby.a
-YACC_SCRIPT = yacc
-ac_ct_CC = gcc
-ac_ct_CXX = g++
-ac_ct_RANLIB = ranlib
-ac_ct_STRIP = 
-aclocaldir = ${datadir}/aclocal
-am__fastdepCC_FALSE = #
-am__fastdepCC_TRUE = 
-am__fastdepCXX_FALSE = #
-am__fastdepCXX_TRUE = 
-am__include = include
-am__leading_dot = .
-am__quote = 
-am__tar = ${AMTAR} chof - "$$tardir"
-am__untar = ${AMTAR} xf -
-bindir = ${exec_prefix}/bin
-build = x86_64-unknown-linux-gnu
-build_alias = 
-build_cpu = x86_64
-build_os = linux-gnu
-build_vendor = unknown
-datadir = ${prefix}/share
-exec_prefix = ${prefix}
-host = x86_64-unknown-linux-gnu
-host_alias = 
-host_cpu = x86_64
-host_os = linux-gnu
-host_vendor = unknown
-includedir = ${prefix}/include
-infodir = ${prefix}/info
-install_sh = /usr/local/google/workspace/WebKit/tools/bison-2.3/build-aux/install-sh
-libdir = ${exec_prefix}/lib
-libexecdir = ${exec_prefix}/libexec
-localstatedir = ${prefix}/var
-mandir = ${prefix}/man
-mkdir_p = mkdir -p --
-oldincludedir = /usr/include
-prefix = /home/phanna/src/bison
-program_transform_name = s,x,x,
-sbindir = ${exec_prefix}/sbin
-sharedstatedir = ${prefix}/com
-sysconfdir = ${prefix}/etc
-target_alias = 
-EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4
-DISTCLEANFILES = atconfig $(check_SCRIPTS)
-MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
-TESTSUITE_AT = \
-	local.at \
-	testsuite.at \
-	input.at \
-	output.at sets.at reduce.at \
-	synclines.at headers.at actions.at conflicts.at \
-	calc.at \
-        torture.at existing.at regression.at \
-        c++.at \
-	cxx-type.at glr-regression.at
-
-TESTSUITE = $(srcdir)/testsuite
-AUTOTEST = $(AUTOM4TE) --language=autotest
-check_SCRIPTS = bison
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  tests/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-atlocal: $(top_builddir)/config.status $(srcdir)/atlocal.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-bison: $(top_builddir)/config.status $(srcdir)/bison.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-uninstall-info-am:
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
-	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-	$(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS)
-	$(MAKE) $(AM_MAKEFLAGS) check-local
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-local mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-exec-am:
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am: installcheck-local
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-info-am
-
-.PHONY: all all-am check check-am check-local clean clean-generic \
-	clean-local distclean distclean-generic distdir dvi dvi-am \
-	html html-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-strip installcheck \
-	installcheck-am installcheck-local installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
-	uninstall-info-am
-
-
-$(srcdir)/package.m4: $(top_srcdir)/configure.ac
-	{ \
-	  echo '# Signature of the current package.'; \
-	  echo 'm4_define([AT_PACKAGE_NAME],      [$(PACKAGE_NAME)])'; \
-	  echo 'm4_define([AT_PACKAGE_TARNAME],   [$(PACKAGE_TARNAME)])'; \
-	  echo 'm4_define([AT_PACKAGE_VERSION],   [$(PACKAGE_VERSION)])'; \
-	  echo 'm4_define([AT_PACKAGE_STRING],    [$(PACKAGE_STRING)])'; \
-	  echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
-	} >$(srcdir)/package.m4
-$(TESTSUITE): package.m4 $(TESTSUITE_AT)
-	$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
-	mv $@.tmp $@
-
-atconfig: $(top_builddir)/config.status
-	cd $(top_builddir) && ./config.status tests/$@
-
-clean-local:
-	test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
-
-check-local: atconfig atlocal $(TESTSUITE)
-	$(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
-
-# Run the test suite on the *installed* tree.
-installcheck-local:
-	$(SHELL) $(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
-
-# Be real mean with it.
-.PHONY: maintainer-check-g++
-maintainer-check-g++: $(TESTSUITE)
-	$(TESTSUITE) CC='$(CXX)'
-
-.PHONY: maintainer-check-posix
-maintainer-check-posix: $(TESTSUITE)
-	$(TESTSUITE) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
-
-.PHONY: maintainer-check-valgrind
-maintainer-check-valgrind: $(TESTSUITE)
-	test -z '$(VALGRIND)' || \
-	   $(TESTSUITE) PREBISON='$(VALGRIND) -q' PREPARSER='$(VALGRIND) -q'
-
-.PHONY: maintainer-check
-maintainer-check: maintainer-check-posix maintainer-check-valgrind maintainer-check-g++
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7cf188a..b6848d7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -2,23 +2,20 @@
 
 ## Makefile for Bison testsuite.
 
-## Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-## Foundation, Inc.
+## Copyright (C) 2000-2012 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., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301, USA.
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
 EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4
 
@@ -29,15 +26,16 @@
 ## package.m4.  ##
 ## ------------ ##
 
-$(srcdir)/package.m4: $(top_srcdir)/configure.ac
-	{ \
+$(srcdir)/package.m4: $(top_srcdir)/configure
+	$(AM_V_GEN) { \
 	  echo '# Signature of the current package.'; \
 	  echo 'm4_define([AT_PACKAGE_NAME],      [$(PACKAGE_NAME)])'; \
 	  echo 'm4_define([AT_PACKAGE_TARNAME],   [$(PACKAGE_TARNAME)])'; \
 	  echo 'm4_define([AT_PACKAGE_VERSION],   [$(PACKAGE_VERSION)])'; \
 	  echo 'm4_define([AT_PACKAGE_STRING],    [$(PACKAGE_STRING)])'; \
 	  echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
-	} >$(srcdir)/package.m4
+	} >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
 
 ## ------------ ##
 ## Test suite.  ##
@@ -46,20 +44,22 @@
 TESTSUITE_AT = \
 	local.at \
 	testsuite.at \
-	input.at \
-	output.at sets.at reduce.at \
+	input.at named-refs.at \
+	output.at skeletons.at sets.at reduce.at \
 	synclines.at headers.at actions.at conflicts.at \
 	calc.at \
         torture.at existing.at regression.at \
         c++.at \
-	cxx-type.at glr-regression.at
+        java.at \
+	cxx-type.at glr-regression.at \
+	push.at
 
 TESTSUITE = $(srcdir)/testsuite
 
 AUTOTEST = $(AUTOM4TE) --language=autotest
-$(TESTSUITE): package.m4 $(TESTSUITE_AT)
-	$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
-	mv $@.tmp $@
+$(TESTSUITE): $(srcdir)/package.m4 $(TESTSUITE_AT)
+	$(AM_V_GEN) $(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
+	$(AM_V_at) mv $@.tmp $@
 
 atconfig: $(top_builddir)/config.status
 	cd $(top_builddir) && ./config.status tests/$@
@@ -73,22 +73,35 @@
 check_SCRIPTS = bison
 
 # Run the test suite on the *installed* tree.
-installcheck-local:
-	$(SHELL) $(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
+installcheck-local: atconfig atlocal $(TESTSUITE)
+	$(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
 
 # Be real mean with it.
 .PHONY: maintainer-check-g++
-maintainer-check-g++: $(TESTSUITE)
-	$(TESTSUITE) CC='$(CXX)'
+maintainer-check-g++: atconfig atlocal $(TESTSUITE)
+	$(TESTSUITE) $(TESTSUITEFLAGS) --compile-c-with-cxx
 
 .PHONY: maintainer-check-posix
-maintainer-check-posix: $(TESTSUITE)
-	$(TESTSUITE) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
+maintainer-check-posix: atconfig atlocal $(TESTSUITE)
+	$(TESTSUITE) $(TESTSUITEFLAGS) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
 
 .PHONY: maintainer-check-valgrind
-maintainer-check-valgrind: $(TESTSUITE)
-	test -z '$(VALGRIND)' || \
-	   $(TESTSUITE) PREBISON='$(VALGRIND) -q' PREPARSER='$(VALGRIND) -q'
+maintainer-check-valgrind: atconfig atlocal $(TESTSUITE)
+	test -z '$(VALGRIND)' ||					\
+	  $(TESTSUITE) $(TESTSUITEFLAGS)				\
+	  PREBISON='$(VALGRIND_PREBISON)' PREPARSER='$(VALGRIND) -q'	\
+	  VALGRIND_OPTS='--leak-check=full --show-reachable=yes'
 
 .PHONY: maintainer-check
 maintainer-check: maintainer-check-posix maintainer-check-valgrind maintainer-check-g++
+
+.PHONY: maintainer-push-check
+maintainer-push-check:
+	BISON_USE_PUSH_FOR_PULL=1 $(MAKE) $(AM_MAKEFLAGS) maintainer-check
+
+.PHONY: maintainer-xml-check
+maintainer-xml-check:
+	BISON_TEST_XML=1 $(MAKE) $(AM_MAKEFLAGS) maintainer-check
+
+.PHONY: maintainer-release-check
+maintainer-release-check: maintainer-check maintainer-push-check maintainer-xml-check
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 20f9b3c..405e291 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.12.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,15 +13,41 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
+
+# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
+pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -39,133 +65,1221 @@
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(srcdir)/atlocal.in $(srcdir)/bison.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/bison-i18n.m4 \
-	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/cxx.m4 \
-	$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dmalloc.m4 \
-	$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/error.m4 \
-	$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
-	$(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext_gl.m4 \
-	$(top_srcdir)/m4/gnulib.m4 $(top_srcdir)/m4/hard-locale.m4 \
-	$(top_srcdir)/m4/hash.m4 $(top_srcdir)/m4/iconv.m4 \
-	$(top_srcdir)/m4/inttypes_h_gl.m4 \
-	$(top_srcdir)/m4/lib-ld_gl.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix_gl.m4 $(top_srcdir)/m4/m4.m4 \
-	$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbstate_t.m4 \
-	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/onceonly.m4 \
-	$(top_srcdir)/m4/po_gl.m4 $(top_srcdir)/m4/progtest.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+	$(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \
+	$(top_srcdir)/m4/assert.m4 $(top_srcdir)/m4/bison-i18n.m4 \
+	$(top_srcdir)/m4/c-working.m4 $(top_srcdir)/m4/calloc.m4 \
+	$(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+	$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/configmake.m4 \
+	$(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/dirname.m4 \
+	$(top_srcdir)/m4/dmalloc.m4 \
+	$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+	$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+	$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \
+	$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
+	$(top_srcdir)/m4/extensions.m4 \
+	$(top_srcdir)/m4/extern-inline.m4 \
+	$(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+	$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+	$(top_srcdir)/m4/flex.m4 $(top_srcdir)/m4/float_h.m4 \
+	$(top_srcdir)/m4/fopen.m4 $(top_srcdir)/m4/fpending.m4 \
+	$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fprintf-posix.m4 \
+	$(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \
+	$(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \
+	$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+	$(top_srcdir)/m4/gnulib-common.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/include_next.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnan.m4 \
+	$(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \
+	$(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/iswblank.m4 \
+	$(top_srcdir)/m4/javacomp.m4 $(top_srcdir)/m4/javaexec.m4 \
+	$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexp.m4 \
+	$(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libunistring-base.m4 \
+	$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+	$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/malloc.m4 \
+	$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
+	$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+	$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+	$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/memchr.m4 \
+	$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+	$(top_srcdir)/m4/msvc-inval.m4 \
+	$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/off_t.m4 \
+	$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \
+	$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/pipe2.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \
+	$(top_srcdir)/m4/printf-frexp.m4 \
+	$(top_srcdir)/m4/printf-frexpl.m4 \
+	$(top_srcdir)/m4/printf-posix-rpl.m4 \
+	$(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \
 	$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
-	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stdint_h_gl.m4 \
-	$(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stpcpy.m4 \
+	$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+	$(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \
+	$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
+	$(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \
+	$(top_srcdir)/m4/size_max.m4 \
+	$(top_srcdir)/m4/snprintf-posix.m4 \
+	$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/spawn-pipe.m4 \
+	$(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/sprintf-posix.m4 \
+	$(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat.m4 \
+	$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+	$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+	$(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strchrnul.m4 \
 	$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
+	$(top_srcdir)/m4/strerror_r.m4 $(top_srcdir)/m4/string_h.m4 \
 	$(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
-	$(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoul.m4 \
-	$(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/subpipe.m4 \
-	$(top_srcdir)/m4/timevar.m4 $(top_srcdir)/m4/uintmax_t_gl.m4 \
-	$(top_srcdir)/m4/ulonglong_gl.m4 \
+	$(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_socket_h.m4 \
+	$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_types_h.m4 \
+	$(top_srcdir)/m4/sys_wait_h.m4 $(top_srcdir)/m4/threadlib.m4 \
+	$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/timevar.m4 \
 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/warning.m4 \
-	$(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrndup.m4 \
+	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vfprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf-posix.m4 \
+	$(top_srcdir)/m4/vsnprintf.m4 \
+	$(top_srcdir)/m4/vsprintf-posix.m4 \
+	$(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \
+	$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
+	$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
+	$(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+	$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
 CONFIG_CLEAN_FILES = atlocal bison
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
 ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOM4TE = @AUTOM4TE@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BISON_CXX_WORKS = @BISON_CXX_WORKS@
-BISON_CXX_WORKS_FALSE = @BISON_CXX_WORKS_FALSE@
-BISON_CXX_WORKS_TRUE = @BISON_CXX_WORKS_TRUE@
+BISON_C_WORKS = @BISON_C_WORKS@
 BISON_LOCALEDIR = @BISON_LOCALEDIR@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CLASSPATH = @CLASSPATH@
+CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CONF_JAVA = @CONF_JAVA@
+CONF_JAVAC = @CONF_JAVAC@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
+CXX_COMPILER_POSIXLY_CORRECT = @CXX_COMPILER_POSIXLY_CORRECT@
 CYGPATH_W = @CYGPATH_W@
+C_COMPILER_POSIXLY_CORRECT = @C_COMPILER_POSIXLY_CORRECT@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DOT = @DOT@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
 GCC = @GCC@
 GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@
+GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@
+GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
+GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
+GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@
+GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
+GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
+GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
+GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
+GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
+GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WAITPID = @GNULIB_WAITPID@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GCJ_C = @HAVE_GCJ_C@
+HAVE_GCJ_IN_PATH = @HAVE_GCJ_IN_PATH@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GIJ = @HAVE_GIJ@
+HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_JAVA = @HAVE_JAVA@
+HAVE_JAVAC = @HAVE_JAVAC@
+HAVE_JAVAC_ENVVAR = @HAVE_JAVAC_ENVVAR@
+HAVE_JAVAC_IN_PATH = @HAVE_JAVAC_IN_PATH@
+HAVE_JAVA_ENVVAR = @HAVE_JAVA_ENVVAR@
+HAVE_JAVA_IN_PATH = @HAVE_JAVA_IN_PATH@
+HAVE_JIKES = @HAVE_JIKES@
+HAVE_JIKES_IN_PATH = @HAVE_JIKES_IN_PATH@
+HAVE_JRE = @HAVE_JRE@
+HAVE_JRE_IN_PATH = @HAVE_JRE_IN_PATH@
+HAVE_JVIEW = @HAVE_JVIEW@
+HAVE_JVIEW_IN_PATH = @HAVE_JVIEW_IN_PATH@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+HAVE_POWF = @HAVE_POWF@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
 HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+HELP2MAN = @HELP2MAN@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+ISNAND_LIBM = @ISNAND_LIBM@
+ISNANF_LIBM = @ISNANF_LIBM@
+ISNANL_LIBM = @ISNANL_LIBM@
+ISNAN_LIBM = @ISNAN_LIBM@
+LDEXPL_LIBM = @LDEXPL_LIBM@
+LDEXP_LIBM = @LDEXP_LIBM@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 LEXLIB = @LEXLIB@
+LEX_IS_FLEX = @LEX_IS_FLEX@
 LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBBISON_LIBDEPS = @LIBBISON_LIBDEPS@
+LIBBISON_LTLIBDEPS = @LIBBISON_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
 LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
 MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
+MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
-O0CFLAGS = @O0CFLAGS@
-O0CXXFLAGS = @O0CXXFLAGS@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_SPAWN_H = @NEXT_SPAWN_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_COPYRIGHT_YEAR = @PACKAGE_COPYRIGHT_YEAR@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
 POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SCHED_H = @SCHED_H@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
 STRIP = @STRIP@
-UNISTD_H = @UNISTD_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VALGRIND = @VALGRIND@
+VALGRIND_PREBISON = @VALGRIND_PREBISON@
 VERSION = @VERSION@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+WARN_CXXFLAGS_TEST = @WARN_CXXFLAGS_TEST@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WERROR_CFLAGS = @WERROR_CFLAGS@
+WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XSLTPROC = @XSLTPROC@
 YACC = @YACC@
 YACC_LIBRARY = @YACC_LIBRARY@
 YACC_SCRIPT = @YACC_SCRIPT@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 aclocaldir = @aclocaldir@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -177,41 +1291,61 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
 EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4
 DISTCLEANFILES = atconfig $(check_SCRIPTS)
 MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
 TESTSUITE_AT = \
 	local.at \
 	testsuite.at \
-	input.at \
-	output.at sets.at reduce.at \
+	input.at named-refs.at \
+	output.at skeletons.at sets.at reduce.at \
 	synclines.at headers.at actions.at conflicts.at \
 	calc.at \
         torture.at existing.at regression.at \
         c++.at \
-	cxx-type.at glr-regression.at
+        java.at \
+	cxx-type.at glr-regression.at \
+	push.at
 
 TESTSUITE = $(srcdir)/testsuite
 AUTOTEST = $(AUTOM4TE) --language=autotest
@@ -223,14 +1357,14 @@
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  tests/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits tests/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -248,42 +1382,47 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 atlocal: $(top_builddir)/config.status $(srcdir)/atlocal.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 bison: $(top_builddir)/config.status $(srcdir)/bison.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-uninstall-info-am:
 tags: TAGS
 TAGS:
 
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -303,16 +1442,22 @@
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
@@ -333,18 +1478,38 @@
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
 
 install-data-am:
 
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
 install-exec-am:
 
+install-html: install-html-am
+
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
 installcheck-am: installcheck-local
 
 maintainer-clean: maintainer-clean-am
@@ -363,31 +1528,35 @@
 
 ps-am:
 
-uninstall-am: uninstall-info-am
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
 
 .PHONY: all all-am check check-am check-local clean clean-generic \
 	clean-local distclean distclean-generic distdir dvi dvi-am \
 	html html-am info info-am install install-am install-data \
-	install-data-am install-exec install-exec-am install-info \
-	install-info-am install-man install-strip installcheck \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
 	installcheck-am installcheck-local installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
-	uninstall-info-am
+	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
 
 
-$(srcdir)/package.m4: $(top_srcdir)/configure.ac
-	{ \
+$(srcdir)/package.m4: $(top_srcdir)/configure
+	$(AM_V_GEN) { \
 	  echo '# Signature of the current package.'; \
 	  echo 'm4_define([AT_PACKAGE_NAME],      [$(PACKAGE_NAME)])'; \
 	  echo 'm4_define([AT_PACKAGE_TARNAME],   [$(PACKAGE_TARNAME)])'; \
 	  echo 'm4_define([AT_PACKAGE_VERSION],   [$(PACKAGE_VERSION)])'; \
 	  echo 'm4_define([AT_PACKAGE_STRING],    [$(PACKAGE_STRING)])'; \
 	  echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
-	} >$(srcdir)/package.m4
-$(TESTSUITE): package.m4 $(TESTSUITE_AT)
-	$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
-	mv $@.tmp $@
+	} >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+$(TESTSUITE): $(srcdir)/package.m4 $(TESTSUITE_AT)
+	$(AM_V_GEN) $(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
+	$(AM_V_at) mv $@.tmp $@
 
 atconfig: $(top_builddir)/config.status
 	cd $(top_builddir) && ./config.status tests/$@
@@ -399,25 +1568,39 @@
 	$(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
 
 # Run the test suite on the *installed* tree.
-installcheck-local:
-	$(SHELL) $(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
+installcheck-local: atconfig atlocal $(TESTSUITE)
+	$(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
 
 # Be real mean with it.
 .PHONY: maintainer-check-g++
-maintainer-check-g++: $(TESTSUITE)
-	$(TESTSUITE) CC='$(CXX)'
+maintainer-check-g++: atconfig atlocal $(TESTSUITE)
+	$(TESTSUITE) $(TESTSUITEFLAGS) --compile-c-with-cxx
 
 .PHONY: maintainer-check-posix
-maintainer-check-posix: $(TESTSUITE)
-	$(TESTSUITE) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
+maintainer-check-posix: atconfig atlocal $(TESTSUITE)
+	$(TESTSUITE) $(TESTSUITEFLAGS) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
 
 .PHONY: maintainer-check-valgrind
-maintainer-check-valgrind: $(TESTSUITE)
-	test -z '$(VALGRIND)' || \
-	   $(TESTSUITE) PREBISON='$(VALGRIND) -q' PREPARSER='$(VALGRIND) -q'
+maintainer-check-valgrind: atconfig atlocal $(TESTSUITE)
+	test -z '$(VALGRIND)' ||					\
+	  $(TESTSUITE) $(TESTSUITEFLAGS)				\
+	  PREBISON='$(VALGRIND_PREBISON)' PREPARSER='$(VALGRIND) -q'	\
+	  VALGRIND_OPTS='--leak-check=full --show-reachable=yes'
 
 .PHONY: maintainer-check
 maintainer-check: maintainer-check-posix maintainer-check-valgrind maintainer-check-g++
+
+.PHONY: maintainer-push-check
+maintainer-push-check:
+	BISON_USE_PUSH_FOR_PULL=1 $(MAKE) $(AM_MAKEFLAGS) maintainer-check
+
+.PHONY: maintainer-xml-check
+maintainer-xml-check:
+	BISON_TEST_XML=1 $(MAKE) $(AM_MAKEFLAGS) maintainer-check
+
+.PHONY: maintainer-release-check
+maintainer-release-check: maintainer-check maintainer-push-check maintainer-xml-check
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/tests/actions.at b/tests/actions.at
index 7a03fb0..97c08c2 100644
--- a/tests/actions.at
+++ b/tests/actions.at
@@ -1,20 +1,19 @@
 # Executing Actions.                               -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2001-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[User Actions.]])
 
@@ -29,14 +28,13 @@
 # instead of being attached to the empty rule dedicated to this
 # action.
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([[input.y]],
 [[%error-verbose
 %debug
 %{
-# include <stdio.h>
-# include <stdlib.h>
-  static void yyerror (const char *msg);
-  static int yylex (void);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
 %}
 %%
 exp:     { putchar ('0'); }
@@ -52,27 +50,17 @@
          { putchar ('\n'); }
    ;
 %%
-static int
-yylex (void)
-{
-  static const char *input = "123456789";
-  return *input++;
-}
-
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["123456789"])[
 int
 main (void)
 {
   return yyparse ();
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([bison -d -v -o input.c input.y])
+AT_BISON_CHECK([-d -v -o input.c input.y])
 AT_COMPILE([input])
 AT_PARSER_CHECK([./input], 0,
 [[0123456789
@@ -81,6 +69,184 @@
 AT_CLEANUP
 
 
+## ------------------ ##
+## Initial location.  ##
+## ------------------ ##
+
+# AT_TEST(SKELETON-NAME, DIRECTIVES, [MORE-DIRECTIVES], [LOCATION = 1.1])
+# -----------------------------------------------------------------------
+# Check that the initial location is correct.
+m4_pushdef([AT_TEST],
+[AT_SETUP([Initial location: $1 $2])
+
+AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1" $2])
+AT_DATA_GRAMMAR([[input.y]],
+[[%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "$1"
+]$2[
+]$3[
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+}
+%%
+exp: { ]AT_SKEL_CC_IF([[std::cerr << @$ << std::endl]],
+                      [[YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr)]])[; }
+%%
+]AT_YYERROR_DEFINE[
+
+]AT_YYLEX_PROTOTYPE[
+{]AT_PURE_IF([
+  YYUSE(lvalp);
+  YYUSE(llocp);], [AT_SKEL_CC_IF([
+  YYUSE(lvalp);
+  YYUSE(llocp);])])[
+  return 'x';
+}
+
+int
+main (void)
+{]AT_SKEL_CC_IF([[
+  yy::parser p;
+  p.set_debug_level (!!getenv("YYDEBUG"));
+  return p.parse ();]], [[
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse (]AT_PARAM_IF([0])[);]])[
+}
+]])
+
+AT_FULL_COMPILE([input])
+AT_PARSER_CHECK([./input], 1, [],
+[m4_default([$4], [1.1])
+m4_default([$4], [1.1])[: syntax error
+]])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+])
+
+## FIXME: test Java, and iterate over skeletons.
+AT_TEST([yacc.c])
+AT_TEST([yacc.c], [%define api.pure full])
+AT_TEST([yacc.c], [%define api.pure %parse-param { int x }])
+AT_TEST([yacc.c], [%define api.push-pull both])
+AT_TEST([yacc.c], [%define api.push-pull both %define api.pure full])
+AT_TEST([glr.c])
+AT_TEST([glr.c], [%define api.pure])
+AT_TEST([lalr1.cc])
+AT_TEST([glr.cc])
+
+## A very different test, based on PostgreSQL's implementation of the
+## locations.  See
+## http://lists.gnu.org/archive/html/bug-bison/2012-11/msg00023.html
+##
+## Weirdly enough, to trigger the warning with GCC 4.7, we must not
+## use fprintf, so run the test twice: once to check the warning
+## (absence thereof), and another time to check the value.
+AT_TEST([yacc.c], [%define api.pure full],
+[[%{
+# define YYLTYPE int
+# define YY_LOCATION_PRINT(Stream, Loc)      \
+   (void) (Loc)
+# define YYLLOC_DEFAULT(Current, Rhs, N)    \
+  (Current) = ((Rhs)[N ? 1 : 0])
+%}
+]],
+[@&t@])
+
+AT_TEST([yacc.c], [%define api.pure full],
+[[%{
+# define YYLTYPE int
+# define YY_LOCATION_PRINT(Stream, Loc)      \
+    fprintf ((Stream), "%d", (Loc))
+# define YYLLOC_DEFAULT(Current, Rhs, N)    \
+  (Current) = ((Rhs)[N ? 1 : 0])
+%}
+]],
+[0])
+
+
+m4_popdef([AT_TEST])
+
+
+
+## ---------------- ##
+## Location Print.  ##
+## ---------------- ##
+
+# AT_TEST(SKELETON-NAME, DIRECTIVES, [MORE-DIRECTIVES], [LOCATION = 1.1])
+# -----------------------------------------------------------------------
+# Check that the initial location is correct.
+m4_pushdef([AT_TEST],
+[AT_SETUP([Location print: $1 $2])
+
+AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1" $2])
+AT_DATA_GRAMMAR([[input.y]],
+[[%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "$1"
+]$2[
+]$3[
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+}
+%%
+exp:;
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+
+int
+main (void)
+{
+#define TEST(L1, C1, L2, C2)          \
+  ]AT_LOC_FIRST_LINE[ = L1;           \
+  ]AT_LOC_FIRST_COLUMN[ = C1;         \
+  ]AT_LOC_LAST_LINE[ = L2;            \
+  ]AT_LOC_LAST_COLUMN[ = C2;          \
+  ]YY_LOCATION_PRINT(stdout, AT_LOC)[;\
+  putchar ('\n');
+
+  TEST(1, 1, 1, 1);
+  TEST(2, 1, 2, 10);
+  TEST(3, 1, 4, 1);
+  TEST(5, 1, 6, 10);
+
+  TEST(7, 2, 0, 2);
+  TEST(8, 0, 8, 0);
+  return 0;
+}
+]])
+
+AT_FULL_COMPILE([input])
+AT_PARSER_CHECK([./input], 0,
+[[1.1
+2.1-9
+3.1-4.0
+5.1-6.9
+7.2
+8.0
+]])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+])
+
+## FIXME: test Java, and iterate over skeletons.
+AT_TEST([yacc.c])
+AT_TEST([glr.c])
+#AT_TEST([lalr1.cc])
+#AT_TEST([glr.cc])
+
+m4_popdef([AT_TEST])
 
 
 
@@ -90,14 +256,13 @@
 
 AT_SETUP([Exotic Dollars])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([[input.y]],
 [[%error-verbose
 %debug
 %{
-# include <stdio.h>
-# include <stdlib.h>
-  static void yyerror (const char *msg);
-  static int yylex (void);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
 # define USE(Var)
 %}
 
@@ -128,18 +293,8 @@
 ;
 
 %%
-static int
-yylex (void)
-{
-  return EOF;
-}
-
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
 int
 main (void)
 {
@@ -147,12 +302,47 @@
 }
 ]])
 
-AT_CHECK([bison -d -v -o input.c input.y], 0)
+AT_BISON_CHECK([-d -v -o input.c input.y], 0)
 AT_COMPILE([input])
 AT_PARSER_CHECK([./input], 0,
 [[15
 ]])
 
+# Make sure that fields after $n or $-n are parsed correctly.  At one
+# point while implementing dashes in symbol names, we were dropping
+# fields after $-n.
+AT_DATA_GRAMMAR([[input.y]],
+[[
+%{
+#include <stdio.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+  typedef struct { int val; } stype;
+# define YYSTYPE stype
+%}
+
+%%
+start: one two { $$.val = $1.val + $2.val; } sum ;
+one: { $$.val = 1; } ;
+two: { $$.val = 2; } ;
+sum: { printf ("%d\n", $0.val + $-1.val + $-2.val); } ;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+
+AT_FULL_COMPILE([input])
+AT_PARSER_CHECK([[./input]], [[0]],
+[[6
+]])
+
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
@@ -161,45 +351,49 @@
 ## Printers and Destructors.  ##
 ## -------------------------- ##
 
-# _AT_CHECK_PRINTER_AND_DESTRUCTOR($1, $2, $3, $4, BISON-DIRECTIVE, UNION-FLAG)
-# -----------------------------------------------------------------------------
+# _AT_CHECK_PRINTER_AND_DESTRUCTOR($1, $2, $3, $4,
+#                                  BISON-DIRECTIVE, UNION-FLAG)
+# -------------------------------------------------------------
 m4_define([_AT_CHECK_PRINTER_AND_DESTRUCTOR],
 [# Make sure complex $n work.
-m4_if([$1$2$3], $[1]$[2]$[3], [],
+m4_if([$1$2$3$4], $[1]$[2]$[3]$[4], [],
        [m4_fatal([$0: Invalid arguments: $@])])dnl
 
 # Be sure to pass all the %directives to this macro to have correct
 # helping macros.  So don't put any directly in the Bison file.
 AT_BISON_OPTION_PUSHDEFS([$5])
 AT_DATA_GRAMMAR([[input.y]],
-[[%{
+[[%code requires {
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 
 #define YYINITDEPTH 10
 #define YYMAXDEPTH 10
-]AT_LALR1_CC_IF(
-  [#define RANGE(Location) (Location).begin.line, (Location).end.line],
-  [#define RANGE(Location) (Location).first_line, (Location).last_line])
-[%}
+#define RANGE(Location) ]AT_LALR1_CC_IF([(Location).begin.line, (Location).end.line],
+      [(Location).first_line, (Location).last_line])[
 
-$5]
-m4_ifval([$6], [%union
+/* Display the symbol type Symbol.  */
+#define V(Symbol, Value, Location, Sep) \
+   fprintf (stderr, #Symbol " (%d@%d-%d)" Sep, Value, RANGE(Location))
+}
+
+$5
+]m4_ifval([$6], [%union
 {
   int ival;
 }])
-AT_LALR1_CC_IF([%define "global_tokens_and_yystype"])
-[
-%{
-]AT_LALR1_CC_IF([typedef yy::location YYLTYPE;
-                m4_ifval([$6], , [#define YYSTYPE int])])
-[static int yylex (]AT_LEX_FORMALS[);
-]AT_LALR1_CC_IF([], [static void yyerror (const char *msg);])
-[%}
+AT_LALR1_CC_IF([%define global_tokens_and_yystype])
+m4_ifval([$6], [[%code provides {]], [[%code {]])
+AT_LALR1_CC_IF([typedef yy::location YYLTYPE;])[
+]AT_YYLEX_DECLARE[
+]AT_LALR1_CC_IF([], [AT_YYERROR_DECLARE])
+[}
 
-]m4_ifval([$6], [%type <ival> '(' 'x' 'y' ')' ';' thing line input])[
+]m4_ifval([$6], [%type <ival> '(' 'x' 'y' ')' ';' thing line input END])[
 
+/* FIXME: This %printer isn't actually tested.  */
 %printer
   {
     ]AT_LALR1_CC_IF([debug_stream () << $$;],
@@ -208,25 +402,30 @@
   input line thing 'x' 'y'
 
 %destructor
-  { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
   input
 
 %destructor
-  { printf ("Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
   line
 
 %destructor
-  { printf ("Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
   thing
 
 %destructor
-  { printf ("Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'x'
 
 %destructor
-  { printf ("Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'y'
 
+%token END 0
+%destructor
+  { fprintf (stderr, "Freeing token END (%d@%d-%d)\n", $$, RANGE (@$)); }
+  END
+
 %%
 /*
    This grammar is made to exercise error recovery.
@@ -239,14 +438,15 @@
   /* Nothing. */
     {
       $$ = 0;
-      printf ("input (%d@%d-%d): /* Nothing */\n", $$, RANGE (@$));
+      V(input, $$, @$, ": /* Nothing */\n");
     }
 | line input /* Right recursive to load the stack so that popping at
-		EOF can	be exercised.  */
+                END can be exercised.  */
     {
       $$ = 2;
-      printf ("input (%d@%d-%d): line (%d@%d-%d) input (%d@%d-%d)\n",
-	      $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2));
+      V(input, $$, @$, ": ");
+      V(line,  $1, @1, " ");
+      V(input, $2, @2, "\n");
     }
 ;
 
@@ -254,28 +454,36 @@
   thing thing thing ';'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): thing (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ';' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V(thing, $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(;,     $4, @4, "\n");
     }
 | '(' thing thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(')',   $4, @4, "\n");
     }
 | '(' thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(')',   $3, @3, "\n");
     }
 | '(' error ')'
     {
       $$ = -1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) error (@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      fprintf (stderr, "error (@%d-%d) ", RANGE (@2));
+      V(')',   $3, @3, "\n");
     }
 ;
 
@@ -283,46 +491,35 @@
   'x'
     {
       $$ = $1;
-      printf ("thing (%d@%d-%d): 'x' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1));
+      V(thing, $$, @$, ": ");
+      V('x',   $1, @1, "\n");
     }
 ;
 %%
 /* Alias to ARGV[1]. */
-const char *source = 0;
+const char *source = YY_NULL;
 
-static int
-yylex (]AT_LEX_FORMALS[)
+]AT_YYERROR_DEFINE[
+
+static
+]AT_YYLEX_PROTOTYPE[
 {
   static unsigned int counter = 0;
 
   int c = ]AT_VAL[]m4_ifval([$6], [.ival])[ = counter++;
   /* As in BASIC, line numbers go from 10 to 10.  */
-]AT_LALR1_CC_IF(
-[ AT_LOC.begin.line = AT_LOC.begin.column = 10 * c;
-  AT_LOC.end.line = AT_LOC.end.column = AT_LOC.begin.line + 9;
-],
-[ AT_LOC.first_line = AT_LOC.first_column = 10 * c;
-  AT_LOC.last_line = AT_LOC.last_column = AT_LOC.first_line + 9;
-])[
-
+  ]AT_LOC_FIRST_LINE[ = ]AT_LOC_FIRST_COLUMN[ = 10 * c;
+  ]AT_LOC_LAST_LINE[ = ]AT_LOC_LAST_COLUMN[ = ]AT_LOC_FIRST_LINE[ + 9;
+  assert (0 <= c && c <= strlen (source));
   if (source[c])
-    printf ("sending: '%c'", source[c]);
+    fprintf (stderr, "sending: '%c'", source[c]);
   else
-    printf ("sending: EOF");
-  printf (" (%d@%d-%d)\n", c, RANGE (]AT_LOC[));
+    fprintf (stderr, "sending: END");
+  fprintf (stderr, " (%d@%d-%d)\n", c, RANGE (]AT_LOC[));
   return source[c];
 }
-
 ]AT_LALR1_CC_IF(
-[/* A C++ error reporting function. */
-void
-yy::parser::error (const location& l, const std::string& m)
-{
-  printf ("%d-%d: %s\n", RANGE (l), m.c_str());
-}
-
-static bool yydebug;
+[static bool yydebug;
 int
 yyparse ()
 {
@@ -330,12 +527,7 @@
   parser.set_debug_level (yydebug);
   return parser.parse ();
 }
-],
-[static void
-yyerror (const char *msg)
-{
-  printf ("%d-%d: %s\n", RANGE (yylloc), msg);
-}])[
+])[
 
 int
 main (int argc, const char *argv[])
@@ -347,19 +539,15 @@
   status = yyparse ();
   switch (status)
     {
-      case 0: printf ("Successful parse.\n"); break;
-      case 1: printf ("Parsing FAILED.\n"); break;
-      default: printf ("Parsing FAILED (status %d).\n", status); break;
+      case 0: fprintf (stderr, "Successful parse.\n"); break;
+      case 1: fprintf (stderr, "Parsing FAILED.\n"); break;
+      default: fprintf (stderr, "Parsing FAILED (status %d).\n", status); break;
     }
   return status;
 }
 ]])
 
-AT_LALR1_CC_IF(
-  [AT_CHECK([bison -o input.cc input.y])
-   AT_COMPILE_CXX([input])],
-  [AT_CHECK([bison -o input.c input.y])
-   AT_COMPILE([input])])
+AT_FULL_COMPILE([input])
 
 
 # Check the location of "empty"
@@ -367,15 +555,16 @@
 # I.e., epsilon-reductions, as in "(x)" which ends by reducing
 # an empty "line" nterm.
 # FIXME: This location is not satisfying.  Depend on the lookahead?
-AT_PARSER_CHECK([./input '(x)'], 0,
+AT_PARSER_CHECK([./input '(x)'], 0, [],
 [[sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
 line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (0@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
 ]])
@@ -385,16 +574,17 @@
 # ---------------------------------
 # '(y)' is an error, but can be recovered from.  But what's the location
 # of the error itself ('y'), and of the resulting reduction ('(error)').
-AT_PARSER_CHECK([./input '(y)'], 0,
+AT_PARSER_CHECK([./input '(y)'], 0, [],
 [[sending: '(' (0@0-9)
 sending: 'y' (1@10-19)
-10-19: syntax error, unexpected 'y', expecting 'x'
+10.10-19.18: syntax error, unexpected 'y', expecting 'x'
 Freeing token 'y' (1@10-19)
 sending: ')' (2@20-29)
 line (-1@0-29): '(' (0@0-9) error (@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (-1@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
 ]])
@@ -414,14 +604,14 @@
 #     '(', 'x', ')',
 #     '(', 'x', ')',
 #     'y'
-AT_PARSER_CHECK([./input '(xxxxx)(x)(x)y'], 1,
+AT_PARSER_CHECK([./input '(xxxxx)(x)(x)y'], 1, [],
 [[sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: 'x' (2@20-29)
 thing (2@20-29): 'x' (2@20-29)
 sending: 'x' (3@30-39)
-30-39: syntax error, unexpected 'x', expecting ')'
+30.30-39.38: syntax error, unexpected 'x', expecting ')'
 Freeing nterm thing (2@20-29)
 Freeing nterm thing (1@10-19)
 Freeing token 'x' (3@30-39)
@@ -446,18 +636,51 @@
 input (2@100-129): line (10@100-129) input (0@129-129)
 input (2@70-129): line (7@70-99) input (2@100-129)
 input (2@0-129): line (-1@0-69) input (2@70-129)
-130-139: syntax error, unexpected 'y', expecting $end
+130.130-139.138: syntax error, unexpected 'y', expecting END
 Freeing nterm input (2@0-129)
 Freeing token 'y' (13@130-139)
 Parsing FAILED.
 ]])
 
+
+# Syntax error caught by the parser where lookahead = END
+# --------------------------------------------------------
+# Load the stack and provoke an error that cannot be caught by the
+# grammar, to check that the stack is cleared.  And make sure the
+# lookahead is freed.
+#
+#     '(', 'x', ')',
+#     '(', 'x', ')',
+#     'x'
+AT_PARSER_CHECK([./input '(x)(x)x'], 1, [],
+[[sending: '(' (0@0-9)
+sending: 'x' (1@10-19)
+thing (1@10-19): 'x' (1@10-19)
+sending: ')' (2@20-29)
+line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
+sending: '(' (3@30-39)
+sending: 'x' (4@40-49)
+thing (4@40-49): 'x' (4@40-49)
+sending: ')' (5@50-59)
+line (3@30-59): '(' (3@30-39) thing (4@40-49) ')' (5@50-59)
+sending: 'x' (6@60-69)
+thing (6@60-69): 'x' (6@60-69)
+sending: END (7@70-79)
+70.70-79.78: syntax error, unexpected END, expecting 'x'
+Freeing nterm thing (6@60-69)
+Freeing nterm line (3@30-59)
+Freeing nterm line (0@0-29)
+Freeing token END (7@70-79)
+Parsing FAILED.
+]])
+
+
 # Check destruction upon stack overflow
 # -------------------------------------
 # Upon stack overflow, all symbols on the stack should be destroyed.
 # Only check for yacc.c.
 AT_YACC_IF([
-AT_PARSER_CHECK([./input '(x)(x)(x)(x)(x)(x)(x)'], 2,
+AT_PARSER_CHECK([./input '(x)(x)(x)(x)(x)(x)(x)'], 2, [],
 [[sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
@@ -492,7 +715,7 @@
 sending: 'x' (19@190-199)
 thing (19@190-199): 'x' (19@190-199)
 sending: ')' (20@200-209)
-200-209: memory exhausted
+200.200-209.208: memory exhausted
 Freeing nterm thing (19@190-199)
 Freeing nterm line (15@150-179)
 Freeing nterm line (12@120-149)
@@ -504,13 +727,14 @@
 ]])
 ])
 
-])
+AT_BISON_OPTION_POPDEFS
+])# _AT_CHECK_PRINTER_AND_DESTRUCTOR
 
 
 # AT_CHECK_PRINTER_AND_DESTRUCTOR([BISON-OPTIONS], [UNION-FLAG], [SKIP_FLAG])
 # ---------------------------------------------------------------------------
 m4_define([AT_CHECK_PRINTER_AND_DESTRUCTOR],
-[AT_SETUP([Printers and Destructors $2: $1])
+[AT_SETUP([Printers and Destructors$2]m4_ifval([$1], [[: $1]]))
 
 $3
 _AT_CHECK_PRINTER_AND_DESTRUCTOR($[1], $[2], $[3], $[4],
@@ -525,13 +749,1008 @@
 
 
 AT_CHECK_PRINTER_AND_DESTRUCTOR([])
-AT_CHECK_PRINTER_AND_DESTRUCTOR([], [with union])
+AT_CHECK_PRINTER_AND_DESTRUCTOR([], [ with union])
 
-# These tests currently fail on a Debian GNU/Linux 3.0r2 x86 host,
-# but the 2nd test succeeds on a Solaris 9 sparc hosts (Forte 7 cc).
-# Skip them until we figure out what the problem is.
 AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"])
-AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"], [with union])
+AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"], [ with union])
 
 AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser])
-AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union])
+AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [ with union])
+
+
+
+## ----------------------------------------- ##
+## Default tagless %printer and %destructor. ##
+## ----------------------------------------- ##
+
+# Check that the right %printer and %destructor are called, that they're not
+# called for $end, and that $$ and @$ work correctly.
+
+AT_SETUP([Default tagless %printer and %destructor])
+AT_BISON_OPTION_PUSHDEFS([%locations])
+AT_DATA_GRAMMAR([[input.y]],
+[[%error-verbose
+%debug
+%locations
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+]AT_YYLEX_DECLARE[
+]AT_YYERROR_DECLARE[
+# define USE(SYM)
+%}
+
+%printer {
+  fprintf (yyoutput, "<*> printer should not be called.\n");
+} <*>
+
+%printer {
+  fprintf (yyoutput, "<> printer for '%c' @ %d", $$, @$.first_column);
+} <>
+%destructor {
+  fprintf (stdout, "<> destructor for '%c' @ %d.\n", $$, @$.first_column);
+} <>
+
+%printer {
+  fprintf (yyoutput, "'b'/'c' printer for '%c' @ %d", $$, @$.first_column);
+} 'b' 'c'
+%destructor {
+  fprintf (stdout, "'b'/'c' destructor for '%c' @ %d.\n", $$, @$.first_column);
+} 'b' 'c'
+
+%destructor {
+  fprintf (yyoutput, "<*> destructor should not be called.\n");
+} <*>
+
+%%
+
+start: 'a' 'b' 'c' 'd' 'e' { $$ = 'S'; USE(($1, $2, $3, $4, $5)); } ;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["abcd"], [[yylval = res]])[
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input])
+AT_PARSER_CHECK([./input], 1,
+[[<> destructor for 'd' @ 4.
+'b'/'c' destructor for 'c' @ 3.
+'b'/'c' destructor for 'b' @ 2.
+<> destructor for 'a' @ 1.
+]],
+[[Starting parse
+Entering state 0
+Reading a token: Next token is token 'a' (1.1: <> printer for 'a' @ 1)
+Shifting token 'a' (1.1: <> printer for 'a' @ 1)
+Entering state 1
+Reading a token: Next token is token 'b' (1.2: 'b'/'c' printer for 'b' @ 2)
+Shifting token 'b' (1.2: 'b'/'c' printer for 'b' @ 2)
+Entering state 3
+Reading a token: Next token is token 'c' (1.3: 'b'/'c' printer for 'c' @ 3)
+Shifting token 'c' (1.3: 'b'/'c' printer for 'c' @ 3)
+Entering state 5
+Reading a token: Next token is token 'd' (1.4: <> printer for 'd' @ 4)
+Shifting token 'd' (1.4: <> printer for 'd' @ 4)
+Entering state 6
+Reading a token: Now at end of input.
+1.5: syntax error, unexpected $end, expecting 'e'
+Error: popping token 'd' (1.4: <> printer for 'd' @ 4)
+Stack now 0 1 3 5
+Error: popping token 'c' (1.3: 'b'/'c' printer for 'c' @ 3)
+Stack now 0 1 3
+Error: popping token 'b' (1.2: 'b'/'c' printer for 'b' @ 2)
+Stack now 0 1
+Error: popping token 'a' (1.1: <> printer for 'a' @ 1)
+Stack now 0
+Cleanup: discarding lookahead token $end (1.5: )
+Stack now 0
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## ------------------------------------------------------ ##
+## Default tagged and per-type %printer and %destructor.  ##
+## ------------------------------------------------------ ##
+
+AT_SETUP([Default tagged and per-type %printer and %destructor])
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%error-verbose
+%debug
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+# define USE(SYM)
+%}
+
+%printer {
+  fprintf (yyoutput, "<> printer should not be called.\n");
+} <>
+
+%union { int field0; int field1; int field2; }
+%type <field0> start 'a' 'g'
+%type <field1> 'e'
+%type <field2> 'f'
+%printer {
+  fprintf (yyoutput, "<*>/<field2>/e printer");
+} <*> 'e' <field2>
+%destructor {
+  fprintf (stdout, "<*>/<field2>/e destructor.\n");
+} <*> 'e' <field2>
+
+%type <field1> 'b'
+%printer { fprintf (yyoutput, "<field1> printer"); } <field1>
+%destructor { fprintf (stdout, "<field1> destructor.\n"); } <field1>
+
+%type <field0> 'c'
+%printer { fprintf (yyoutput, "'c' printer"); } 'c'
+%destructor { fprintf (stdout, "'c' destructor.\n"); } 'c'
+
+%type <field1> 'd'
+%printer { fprintf (yyoutput, "'d' printer"); } 'd'
+%destructor { fprintf (stdout, "'d' destructor.\n"); } 'd'
+
+%destructor {
+  fprintf (yyoutput, "<> destructor should not be called.\n");
+} <>
+
+%%
+
+start:
+  'a' 'b' 'c' 'd' 'e' 'f' 'g'
+    {
+      USE(($1, $2, $3, $4, $5, $6, $7));
+      $$ = 'S';
+    }
+  ;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["abcdef"])[
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input])
+AT_PARSER_CHECK([./input], 1,
+[[<*>/<field2>/e destructor.
+<*>/<field2>/e destructor.
+'d' destructor.
+'c' destructor.
+<field1> destructor.
+<*>/<field2>/e destructor.
+]],
+[[Starting parse
+Entering state 0
+Reading a token: Next token is token 'a' (<*>/<field2>/e printer)
+Shifting token 'a' (<*>/<field2>/e printer)
+Entering state 1
+Reading a token: Next token is token 'b' (<field1> printer)
+Shifting token 'b' (<field1> printer)
+Entering state 3
+Reading a token: Next token is token 'c' ('c' printer)
+Shifting token 'c' ('c' printer)
+Entering state 5
+Reading a token: Next token is token 'd' ('d' printer)
+Shifting token 'd' ('d' printer)
+Entering state 6
+Reading a token: Next token is token 'e' (<*>/<field2>/e printer)
+Shifting token 'e' (<*>/<field2>/e printer)
+Entering state 7
+Reading a token: Next token is token 'f' (<*>/<field2>/e printer)
+Shifting token 'f' (<*>/<field2>/e printer)
+Entering state 8
+Reading a token: Now at end of input.
+syntax error, unexpected $end, expecting 'g'
+Error: popping token 'f' (<*>/<field2>/e printer)
+Stack now 0 1 3 5 6 7
+Error: popping token 'e' (<*>/<field2>/e printer)
+Stack now 0 1 3 5 6
+Error: popping token 'd' ('d' printer)
+Stack now 0 1 3 5
+Error: popping token 'c' ('c' printer)
+Stack now 0 1 3
+Error: popping token 'b' (<field1> printer)
+Stack now 0 1
+Error: popping token 'a' (<*>/<field2>/e printer)
+Stack now 0
+Cleanup: discarding lookahead token $end ()
+Stack now 0
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## ------------------------------------------------------------- ##
+## Default %printer and %destructor for user-defined end token.  ##
+## ------------------------------------------------------------- ##
+
+AT_SETUP([Default %printer and %destructor for user-defined end token])
+
+# _AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN(TYPED)
+# -------------------------------------------------------------
+m4_define([_AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN],
+[m4_if($1, 0,
+  [m4_pushdef([kind], []) m4_pushdef([not_kind], [*])],
+  [m4_pushdef([kind], [*]) m4_pushdef([not_kind], [])])
+
+AT_BISON_OPTION_PUSHDEFS([%locations])
+AT_DATA_GRAMMAR([[input]]$1[[.y]],
+[[%error-verbose
+%debug
+%locations
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+# define USE(SYM)
+%}
+
+%destructor {
+  fprintf (yyoutput, "<]]not_kind[[> destructor should not be called.\n");
+} <]]not_kind[[>
+
+%token END 0
+%printer {
+  fprintf (yyoutput, "<]]kind[[> for '%c' @ %d", $$, @$.first_column);
+} <]]kind[[>
+%destructor {
+  fprintf (stdout, "<]]kind[[> for '%c' @ %d.\n", $$, @$.first_column);
+} <]]kind[[>
+
+%printer {
+  fprintf (yyoutput, "<]]not_kind[[> printer should not be called.\n");
+} <]]not_kind[[>
+
+]]m4_if($1, 0, [[[
+]]],
+[[[%union { char tag; }
+%type <tag> start END]]])[[
+
+%%
+
+start: { $$ = 'S'; } ;
+
+%%
+
+static int
+yylex (void)
+{
+  static int called;
+  if (called++)
+    abort ();
+  yylval]]m4_if($1, 0,, [[[.tag]]])[[ = 'E';
+  yylloc.first_line = yylloc.last_line = 1;
+  yylloc.first_column = yylloc.last_column = 1;
+  return 0;
+}
+]AT_YYERROR_DEFINE[
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-o input$1.c input$1.y])
+AT_COMPILE([input$1])
+AT_PARSER_CHECK([./input$1], 0,
+[[<]]kind[[> for 'E' @ 1.
+<]]kind[[> for 'S' @ 1.
+]],
+[[Starting parse
+Entering state 0
+Reducing stack by rule 1 (line 42):
+-> $$ = nterm start (1.1: <]]kind[[> for 'S' @ 1)
+Stack now 0
+Entering state 1
+Reading a token: Now at end of input.
+Shifting token END (1.1: <]]kind[[> for 'E' @ 1)
+Entering state 2
+Stack now 0 1 2
+Cleanup: popping token END (1.1: <]]kind[[> for 'E' @ 1)
+Cleanup: popping nterm start (1.1: <]]kind[[> for 'S' @ 1)
+]])
+
+m4_popdef([kind])
+m4_popdef([not_kind])
+])
+
+_AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN(0)
+_AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN(1)
+
+AT_CLEANUP
+
+
+
+## ------------------------------------------------------------------ ##
+## Default %printer and %destructor are not for error or $undefined.  ##
+## ------------------------------------------------------------------ ##
+
+AT_SETUP([Default %printer and %destructor are not for error or $undefined])
+
+# If Bison were to apply the default %printer and %destructor to the error
+# token or to $undefined:
+#   - For the error token:
+#     - It would generate warnings for unused $n.
+#     - It would invoke the %printer and %destructor on the error token's
+#       semantic value, which would be initialized from the lookahead, which
+#       would be destroyed separately.
+#   - For $undefined, who knows what the semantic value would be.
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%debug
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+# define USE(SYM)
+%}
+
+%printer {
+  fprintf (yyoutput, "'%c'", $$);
+} <> <*>
+%destructor {
+  fprintf (stderr, "DESTROY '%c'\n", $$);
+} <> <*>
+
+%%
+
+start:
+  { $$ = 'S'; }
+  /* In order to reveal the problems that this bug caused during parsing, add
+   * $2 to USE.  */
+  | 'a' error 'b' 'c' { USE(($1, $3, $4)); $$ = 'S'; }
+  ;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["abd"], [yylval = res])[
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input])
+AT_PARSER_CHECK([./input], [1], [],
+[[Starting parse
+Entering state 0
+Reading a token: Next token is token 'a' ('a')
+Shifting token 'a' ('a')
+Entering state 1
+Reading a token: Next token is token 'b' ('b')
+syntax error
+Shifting token error ()
+Entering state 3
+Next token is token 'b' ('b')
+Shifting token 'b' ('b')
+Entering state 5
+Reading a token: Next token is token $undefined ()
+Error: popping token 'b' ('b')
+DESTROY 'b'
+Stack now 0 1 3
+Error: popping token error ()
+Stack now 0 1
+Shifting token error ()
+Entering state 3
+Next token is token $undefined ()
+Error: discarding token $undefined ()
+Error: popping token error ()
+Stack now 0 1
+Shifting token error ()
+Entering state 3
+Reading a token: Now at end of input.
+Cleanup: discarding lookahead token $end ()
+Stack now 0 1 3
+Cleanup: popping token error ()
+Cleanup: popping token 'a' ('a')
+DESTROY 'a'
+]])
+
+AT_CLEANUP
+
+
+
+## ------------------------------------------------------ ##
+## Default %printer and %destructor are not for $accept.  ##
+## ------------------------------------------------------ ##
+
+AT_SETUP([Default %printer and %destructor are not for $accept])
+
+# If YYSTYPE is a union and Bison were to apply the default %printer and
+# %destructor to $accept:
+#   - The %printer and %destructor code generated for $accept would always be
+#     dead code because $accept is currently never shifted onto the stack.
+#   - $$ for $accept would always be of type YYSTYPE because it's not possible
+#     to declare `%type <field> $accept'.  (Also true for $undefined.)
+#   - Thus, the compiler might complain that the user code assumes the wrong
+#     type for $$ since the code might assume the type associated with a
+#     specific union field, which is especially reasonable in C++ since that
+#     type may be a base type.  This test case checks for this problem.  (Also
+#     true for $undefined and the error token, so there are three warnings for
+#     %printer and three for %destructor.)
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%debug /* So that %printer is actually compiled.  */
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+# define USE(SYM)
+%}
+
+%printer {
+  char chr = $$;
+  fprintf (yyoutput, "'%c'", chr);
+} <> <*>
+%destructor {
+  char chr = $$;
+  fprintf (stderr, "DESTROY '%c'\n", chr);
+} <> <*>
+
+%union { char chr; }
+%type <chr> start
+
+%%
+
+start: { USE($$); } ;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input])
+
+AT_CLEANUP
+
+
+
+## ------------------------------------------------------ ##
+## Default %printer and %destructor for mid-rule values.  ##
+## ------------------------------------------------------ ##
+
+AT_SETUP([Default %printer and %destructor for mid-rule values])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%debug /* So that %printer is actually compiled.  */
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+# define USE(SYM)
+# define YYLTYPE int
+# define YYLLOC_DEFAULT(Current, Rhs, N) (void)(Rhs)
+# define YY_LOCATION_PRINT(File, Loc)
+%}
+
+%printer { fprintf (yyoutput, "%d", @$); } <>
+%destructor { fprintf (stderr, "DESTROY %d\n", @$); } <>
+%printer { fprintf (yyoutput, "<*> printer should not be called"); } <*>
+%destructor { fprintf (yyoutput, "<*> destructor should not be called"); } <*>
+
+%%
+
+start:
+  {           @$ = 1; } // Not set or used.
+  { USE ($$); @$ = 2; } // Both set and used.
+  { USE ($$); @$ = 3; } // Only set.
+  {           @$ = 4; } // Only used.
+  'c'
+  { USE (($$, $2, $4, $5)); @$ = 0; }
+  ;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-o input.c input.y], 0,,
+[[input.y:33.3-23: warning: unset value: $$
+input.y:32.3-23: warning: unused value: $3
+]])
+
+AT_BISON_CHECK([-fcaret -o input.c input.y], 0,,
+[[input.y:33.3-23: warning: unset value: $$
+   {           @$ = 4; } // Only used.
+   ^^^^^^^^^^^^^^^^^^^^^
+input.y:32.3-23: warning: unused value: $3
+   { USE ($$); @$ = 3; } // Only set.
+   ^^^^^^^^^^^^^^^^^^^^^
+]])
+
+AT_COMPILE([input])
+AT_PARSER_CHECK([./input], 1,,
+[[Starting parse
+Entering state 0
+Reducing stack by rule 1 (line 30):
+-> $$ = nterm $@1 (: )
+Stack now 0
+Entering state 2
+Reducing stack by rule 2 (line 31):
+-> $$ = nterm @2 (: 2)
+Stack now 0 2
+Entering state 4
+Reducing stack by rule 3 (line 32):
+-> $$ = nterm @3 (: 3)
+Stack now 0 2 4
+Entering state 5
+Reducing stack by rule 4 (line 33):
+-> $$ = nterm @4 (: 4)
+Stack now 0 2 4 5
+Entering state 6
+Reading a token: Now at end of input.
+syntax error
+Error: popping nterm @4 (: 4)
+DESTROY 4
+Stack now 0 2 4 5
+Error: popping nterm @3 (: 3)
+DESTROY 3
+Stack now 0 2 4
+Error: popping nterm @2 (: 2)
+DESTROY 2
+Stack now 0 2
+Error: popping nterm $@1 (: )
+Stack now 0
+Cleanup: discarding lookahead token $end (: )
+Stack now 0
+]])
+
+AT_CLEANUP
+
+
+## ----------------------- ##
+## @$ implies %locations.  ##
+## ----------------------- ##
+
+# Bison once forgot to check for @$ in actions other than semantic actions.
+
+# AT_CHECK_ACTION_LOCATIONS(ACTION-DIRECTIVE)
+# -------------------------------------------
+m4_define([AT_CHECK_ACTION_LOCATIONS],
+[AT_SETUP([[@$ in ]$1[ implies %locations]])
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%code {
+  #include <stdio.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+}
+
+%debug
+
+]$1[ {
+  fprintf (stderr, "%d\n", @$.first_line);
+} ]m4_if($1, [%initial-action], [], [[start]])[
+
+%%
+
+start:  ;
+
+%%
+
+static int
+yylex (void)
+{
+  return 0;
+}
+
+]AT_YYERROR_DEFINE[
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+
+AT_BISON_CHECK([[-o input.c input.y]])
+AT_COMPILE([[input]])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP])
+
+AT_CHECK_ACTION_LOCATIONS([[%initial-action]])
+AT_CHECK_ACTION_LOCATIONS([[%destructor]])
+AT_CHECK_ACTION_LOCATIONS([[%printer]])
+
+
+## ------------------------- ##
+## Qualified $$ in actions.  ##
+## ------------------------- ##
+
+# Check that we can used qualified $$ (v.g., $<type>$) not only in
+# rule actions, but also where $$ is valid: %printer and %destructor.
+#
+# FIXME: Not actually checking %destructor, but it's the same code as
+# %printer...
+#
+# To do that, use a semantic value that has two fields (sem_type),
+# declare symbols to have only one of these types (INT, float), and
+# use $<type>$ to get the other one.  Including for symbols that are
+# not typed (UNTYPED).
+
+m4_pushdef([AT_TEST],
+[AT_SETUP([[Qualified $$ in actions: $1]])
+
+AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1"])
+
+AT_DATA_GRAMMAR([[input.y]],
+[[%skeleton "$1"
+%defines   // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%locations // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%debug
+%code requires
+{
+  typedef struct sem_type
+  {
+    int ival;
+    float fval;
+  } sem_type;
+
+# define YYSTYPE sem_type
+
+]AT_SKEL_CC_IF([[
+# include <iostream>
+  static void
+  report (std::ostream& yyo, int ival, float fval)
+  {
+    yyo << "ival: " << ival << ", fval: " <<  fval;
+  }
+]], [[
+# include <stdio.h>
+  static void
+  report (FILE* yyo, int ival, float fval)
+  {
+    fprintf (yyo, "ival: %d, fval: %1.1f", ival, fval);
+  }
+]])[
+}
+
+%code
+{
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+
+%token UNTYPED
+%token <ival> INT
+%type <fval> float
+%printer { report (yyo, $$,       $<fval>$); } <ival>;
+%printer { report (yyo, $<ival>$, $$      ); } <fval>;
+%printer { report (yyo, $<ival>$, $<fval>$); } <>;
+
+%initial-action
+{
+  $<ival>$ = 42;
+  $<fval>$ = 4.2;
+}
+
+%%
+float: UNTYPED INT
+{
+  $$       = $<fval>1 + $<fval>2;
+  $<ival>$ = $<ival>1 + $][2;
+};
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(AT_SKEL_CC_IF([[{yy::parser::token::UNTYPED,
+                                 yy::parser::token::INT,
+                                  EOF}]],
+                               [[{UNTYPED, INT, EOF}]]),
+                 [AT_VAL.ival = toknum * 10; AT_VAL.fval = toknum / 10.0;])[
+int
+main (void)
+{]AT_SKEL_CC_IF([[
+  yy::parser p;
+  p.set_debug_level(1);
+  return p.parse ();]], [[
+  yydebug = 1;
+  return yyparse ();]])[
+}
+]])
+
+AT_FULL_COMPILE([[input]])
+AT_PARSER_CHECK([./input], 0, [], [stderr])
+# Don't be too picky on the traces, GLR is not exactly the same.  Keep
+# only the lines from the printer.
+#
+# Don't care about locations.  FIXME: remove their removal when Bison
+# supports C++ without locations.
+AT_CHECK([[sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr]], 0,
+[[Reading a token: Next token is token UNTYPED (ival: 10, fval: 0.1)
+Shifting token UNTYPED (ival: 10, fval: 0.1)
+Reading a token: Next token is token INT (ival: 20, fval: 0.2)
+Shifting token INT (ival: 20, fval: 0.2)
+   $][1 = token UNTYPED (ival: 10, fval: 0.1)
+   $][2 = token INT (ival: 20, fval: 0.2)
+-> $$ = nterm float (ival: 30, fval: 0.3)
+Cleanup: popping nterm float (ival: 30, fval: 0.3)
+]])
+
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
+])
+
+AT_TEST([yacc.c])
+AT_TEST([glr.c])
+AT_TEST([lalr1.cc])
+AT_TEST([glr.cc])
+
+m4_popdef([AT_TEST])
+
+## ----------------------------------------------- ##
+## Fix user actions without a trailing semicolon.  ##
+## ----------------------------------------------- ##
+
+AT_SETUP([[Fix user actions without a trailing semicolon]])
+
+# This feature is undocumented, but we accidentally broke it in 2.3a,
+# and there was a complaint at:
+# <http://lists.gnu.org/archive/html/bug-bison/2008-11/msg00001.html>.
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA([input.y],
+[[%%
+start: test2 test1 test0 testc;
+
+test2
+: 'a' { semi;			/* TEST:N:2 */ }
+| 'b' { if (0) {no_semi}	/* TEST:N:2 */ }
+| 'c' { if (0) {semi;}		/* TEST:N:2 */ }
+| 'd' { semi;   no_semi		/* TEST:Y:2 */ }
+| 'e' { semi(); no_semi()	/* TEST:Y:2 */ }
+| 'f' { semi[]; no_semi[]	/* TEST:Y:2 */ }
+| 'g' { semi++; no_semi++	/* TEST:Y:2 */ }
+| 'h' { {no_semi} no_semi	/* TEST:Y:2 */ }
+| 'i' { {semi;}   no_semi	/* TEST:Y:2 */ }
+;
+test1
+  : 'a' { semi;			// TEST:N:1 ;
+} | 'b' { if (0) {no_semi}	// TEST:N:1 ;
+} | 'c' { if (0) {semi;}	// TEST:N:1 ;
+} | 'd' { semi;   no_semi	// TEST:Y:1 ;
+} | 'e' { semi(); no_semi()	// TEST:Y:1 ;
+} | 'f' { semi[]; no_semi[]	// TEST:Y:1 ;
+} | 'g' { semi++; no_semi++	// TEST:Y:1 ;
+} | 'h' { {no_semi} no_semi	// TEST:Y:1 ;
+} | 'i' { {semi;}   no_semi	// TEST:Y:1 ;
+} ;
+test0
+  : 'a' { semi;			// TEST:N:1 {}
+} | 'b' { if (0) {no_semi}	// TEST:N:1 {}
+} | 'c' { if (0) {semi;}	// TEST:N:1 {}
+} | 'd' { semi;   no_semi	// TEST:Y:1 {}
+} | 'e' { semi(); no_semi()	// TEST:Y:1 {}
+} | 'f' { semi[]; no_semi[]	// TEST:Y:1 {}
+} | 'g' { semi++; no_semi++	// TEST:Y:1 {}
+} | 'h' { {no_semi} no_semi	// TEST:Y:1 {}
+} | 'i' { {semi;}   no_semi	// TEST:Y:1 {}
+} ;
+
+testc
+: 'a' {
+#define TEST_MACRO_N \
+[]"broken\" $ @ $$ @$ [];\
+string;"}
+| 'b' {
+no_semi
+#define TEST_MACRO_N \
+[]"broken\" $ @ $$ @$ [];\
+string;"}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([[-o input.c input.y]], [0], [],
+[[input.y:8.48: warning: a ';' might be needed at the end of action code
+input.y:8.48:     future versions of Bison will not add the ';'
+input.y:9.48: warning: a ';' might be needed at the end of action code
+input.y:9.48:     future versions of Bison will not add the ';'
+input.y:10.48: warning: a ';' might be needed at the end of action code
+input.y:10.48:     future versions of Bison will not add the ';'
+input.y:11.48: warning: a ';' might be needed at the end of action code
+input.y:11.48:     future versions of Bison will not add the ';'
+input.y:12.48: warning: a ';' might be needed at the end of action code
+input.y:12.48:     future versions of Bison will not add the ';'
+input.y:13.48: warning: a ';' might be needed at the end of action code
+input.y:13.48:     future versions of Bison will not add the ';'
+input.y:20.1: warning: a ';' might be needed at the end of action code
+input.y:20.1:     future versions of Bison will not add the ';'
+input.y:21.1: warning: a ';' might be needed at the end of action code
+input.y:21.1:     future versions of Bison will not add the ';'
+input.y:22.1: warning: a ';' might be needed at the end of action code
+input.y:22.1:     future versions of Bison will not add the ';'
+input.y:23.1: warning: a ';' might be needed at the end of action code
+input.y:23.1:     future versions of Bison will not add the ';'
+input.y:24.1: warning: a ';' might be needed at the end of action code
+input.y:24.1:     future versions of Bison will not add the ';'
+input.y:25.1: warning: a ';' might be needed at the end of action code
+input.y:25.1:     future versions of Bison will not add the ';'
+input.y:31.1: warning: a ';' might be needed at the end of action code
+input.y:31.1:     future versions of Bison will not add the ';'
+input.y:32.1: warning: a ';' might be needed at the end of action code
+input.y:32.1:     future versions of Bison will not add the ';'
+input.y:33.1: warning: a ';' might be needed at the end of action code
+input.y:33.1:     future versions of Bison will not add the ';'
+input.y:34.1: warning: a ';' might be needed at the end of action code
+input.y:34.1:     future versions of Bison will not add the ';'
+input.y:35.1: warning: a ';' might be needed at the end of action code
+input.y:35.1:     future versions of Bison will not add the ';'
+input.y:36.1: warning: a ';' might be needed at the end of action code
+input.y:36.1:     future versions of Bison will not add the ';'
+]])
+
+AT_MATCHES_CHECK([input.c], [[/\* TEST:N:2 \*/ \}$]],       [[3]])
+AT_MATCHES_CHECK([input.c], [[/\* TEST:Y:2 \*/ ;\}$]],      [[6]])
+AT_MATCHES_CHECK([input.c], [[// TEST:N:1 [;{}]*\n\}$]],    [[6]])
+AT_MATCHES_CHECK([input.c], [[// TEST:Y:1 [;{}]*\n;\}$]],  [[12]])
+AT_MATCHES_CHECK([input.c], [[#define TEST_MACRO_N \\\n\[\]"broken\\" \$ \@ \$\$ \@\$ \[\];\\\nstring;"\}]], [[2]])
+
+AT_CLEANUP
+
+
+## -------------------------------------------------- ##
+## Destroying lookahead assigned by semantic action.  ##
+## -------------------------------------------------- ##
+
+AT_SETUP([[Destroying lookahead assigned by semantic action]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+  #define USE(Var)
+}
+
+%destructor { fprintf (stderr, "'a' destructor\n"); } 'a'
+%destructor { fprintf (stderr, "'b' destructor\n"); } 'b'
+
+%%
+
+// In a previous version of Bison, yychar assigned by the semantic
+// action below was not translated into yytoken before the lookahead was
+// discarded and thus before its destructor (selected according to
+// yytoken) was called in order to return from yyparse.  This would
+// happen even if YYACCEPT was performed in a later semantic action as
+// long as only consistent states with default reductions were visited
+// in between.  However, we leave YYACCEPT in the same semantic action
+// for this test in order to show that skeletons cannot simply translate
+// immediately after every semantic action because a semantic action
+// that has set yychar might not always return normally.  Instead,
+// skeletons must translate before every use of yytoken.
+start: 'a' accept { USE($1); } ;
+accept: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yychar = 'b';
+  YYACCEPT;
+} ;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["a"])[
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+AT_BISON_CHECK([[-o input.c input.y]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]], [[0]], [],
+[['b' destructor
+'a' destructor
+]])
+
+AT_CLEANUP
+
+## ---------- ##
+## YYBACKUP.  ##
+## ---------- ##
+
+AT_SETUP([[YYBACKUP]])
+
+AT_BISON_OPTION_PUSHDEFS([%pure-parser])
+
+AT_DATA_GRAMMAR([input.y],
+[[
+%error-verbose
+%debug
+%pure-parser
+%code {
+# include <stdio.h>
+# include <stdlib.h>
+# include <assert.h>
+
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+%%
+input:
+  exp exp {}
+;
+
+exp:
+  'a'     { printf ("a: %d\n", $1); }
+| 'b'     { YYBACKUP('a', 123); }
+| 'c' 'd' { YYBACKUP('a', 456); }
+;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["bcd"], [*lvalp = (toknum + 1) * 10])[
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([[-o input.c input.y]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]], [[0]],
+[[a: 123
+a: 456
+]])
+
+AT_CLEANUP
diff --git a/tests/atconfig b/tests/atconfig
deleted file mode 100644
index 0f2b26b..0000000
--- a/tests/atconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-# Configurable variable values for building test suites.
-# Generated by ./config.status.
-# Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# The test suite will define top_srcdir=/../.. etc.
-at_testdir='tests'
-abs_builddir='/usr/local/google/workspace/WebKit/tools/bison-2.3/tests'
-at_srcdir='.'
-abs_srcdir='/usr/local/google/workspace/WebKit/tools/bison-2.3/tests'
-at_top_srcdir='..'
-abs_top_srcdir='/usr/local/google/workspace/WebKit/tools/bison-2.3/tests/..'
-at_top_builddir='../'
-abs_top_builddir='/usr/local/google/workspace/WebKit/tools/bison-2.3/tests/../.'
-
-AUTOTEST_PATH='tests'
-
-SHELL=${CONFIG_SHELL-'/bin/sh'}
diff --git a/tests/atlocal b/tests/atlocal
deleted file mode 100644
index 849fd10..0000000
--- a/tests/atlocal
+++ /dev/null
@@ -1,30 +0,0 @@
-# tests/atlocal.  Generated from atlocal.in by configure.					-*- shell-script -*-
-# Configurable variable values for Bison test suite.
-# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-# We need a C compiler.
-CC='gcc'
-
-# We want no optimization.
-CFLAGS='-g   '
-
-# We need `config.h'.
-CPPFLAGS="-DHAVE_CONFIG_H=1 -I$abs_top_builddir "
-
-# Is the compiler GCC?
-GCC='yes'
-
-# The C++ compiler.
-CXX='g++'
-
-# If 'exit 77'; skip all C++ tests; otherwise ':'.
-BISON_CXX_WORKS=':'
-
-# We want no optimization with C++, too.
-CXXFLAGS='-g   '
-
-# Are special link options needed?
-LDFLAGS=''
-
-# Are special libraries needed?
-LIBS=' '
diff --git a/tests/atlocal.in b/tests/atlocal.in
index 15c99e6..f817f94 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -1,30 +1,103 @@
 # @configure_input@					-*- shell-script -*-
 # Configurable variable values for Bison test suite.
-# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-# We need a C compiler.
-CC='@CC@'
-
-# We want no optimization.
-CFLAGS='@O0CFLAGS@ @WARNING_CFLAGS@ @WERROR_CFLAGS@'
+# Copyright (C) 2000-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 
 # We need `config.h'.
-CPPFLAGS="-DHAVE_CONFIG_H=1 -I$abs_top_builddir @CPPFLAGS@"
+CPPFLAGS="-I$abs_top_builddir/lib @CPPFLAGS@"
+
+# Don't just check if $POSIXLY_CORRECT is set, as Bash, when launched
+# as /bin/sh, sets the shell variable POSIXLY_CORRECT to y, but not
+# the environment variable.
+if env | grep '^POSIXLY_CORRECT=' >/dev/null; then
+  POSIXLY_CORRECT_IS_EXPORTED=true
+else
+  POSIXLY_CORRECT_IS_EXPORTED=false
+fi
+
+## ------------------- ##
+## C/C++ Compilation.  ##
+## ------------------- ##
+
+: ${CC='@CC@'}
+: ${CXX='@CXX@'}
 
 # Is the compiler GCC?
 GCC='@GCC@'
 
-# The C++ compiler.
-CXX='@CXX@'
+# Sometimes a test group needs to ignore gcc warnings, so it locally
+# sets CFLAGS to this.
+  NO_WERROR_CFLAGS='@CFLAGS@   @WARN_CFLAGS@   @WARN_CFLAGS_TEST@'
+NO_WERROR_CXXFLAGS='@CXXFLAGS@ @WARN_CXXFLAGS@ @WARN_CXXFLAGS_TEST@'
 
-# If 'exit 77'; skip all C++ tests; otherwise ':'.
+# But most of the time, we want -Werror.
+  CFLAGS="$NO_WERROR_CFLAGS   @WERROR_CFLAGS@"
+CXXFLAGS="$NO_WERROR_CXXFLAGS @WERROR_CXXFLAGS@"
+
+# If 'exit 77'; skip all C/C++ tests; otherwise ':'.
+BISON_C_WORKS='@BISON_C_WORKS@'
 BISON_CXX_WORKS='@BISON_CXX_WORKS@'
 
-# We want no optimization with C++, too.
-CXXFLAGS='@O0CXXFLAGS@ @WARNING_CXXFLAGS@ @WERROR_CFLAGS@'
+# Whether the compiler supports POSIXLY_CORRECT defined.
+: ${C_COMPILER_POSIXLY_CORRECT='@C_COMPILER_POSIXLY_CORRECT@'}
+: ${CXX_COMPILER_POSIXLY_CORRECT='@CXX_COMPILER_POSIXLY_CORRECT@'}
+
+if $POSIXLY_CORRECT_IS_EXPORTED; then
+  $C_COMPILER_POSIXLY_CORRECT ||
+    BISON_C_WORKS="as_fn_error 77 POSIXLY_CORRECT"
+  $CXX_COMPILER_POSIXLY_CORRECT ||
+    BISON_CXX_WORKS="as_fn_error 77 POSIXLY_CORRECT"
+fi
+
+# Handle --compile-c-with-cxx here, once CXX and CXXFLAGS are known.
+if "$at_arg_compile_c_with_cxx"; then
+  CC_IS_CXX=1
+  CC=$CXX
+  NO_WERROR_CFLAGS=$NO_WERROR_CXXFLAGS
+  CFLAGS=$CXXFLAGS
+  BISON_C_WORKS=$BISON_CXX_WORKS
+else
+  CC_IS_CXX=0
+fi
+
+
+## ------- ##
+## Other.  ##
+## ------- ##
+
+# Empty if no javac was found
+CONF_JAVAC='@CONF_JAVAC@'
+
+# Empty if no Java VM was found
+CONF_JAVA='@CONF_JAVA@'
+
+# We need egrep.
+: ${EGREP='@EGREP@'}
+
+# Use simple quotes (lib/quote.c).
+LC_CTYPE=C
+export LC_CTYPE
 
 # Are special link options needed?
 LDFLAGS='@LDFLAGS@'
 
 # Are special libraries needed?
-LIBS='@LIBS@ @INTLLIBS@'
+LIBS="$abs_top_builddir/lib/libbison.a @LIBS@ @INTLLIBS@"
+
+# Empty if no xsltproc was found
+: ${XSLTPROC='@XSLTPROC@'}
+
+: ${PERL='@PERL@'}
diff --git a/tests/bison b/tests/bison
deleted file mode 100755
index 82dd651..0000000
--- a/tests/bison
+++ /dev/null
@@ -1,8 +0,0 @@
-#! /bin/sh
-# tests/bison.  Generated from bison.in by configure.
-# Wrapper around a non installed bison to make it work as an installed one.
-
-# Use the shipped files, not those installed.
-BISON_PKGDATADIR='/usr/local/google/workspace/WebKit/tools/bison-2.3/tests/../data'
-export BISON_PKGDATADIR
-exec $PREBISON '/usr/local/google/workspace/WebKit/tools/bison-2.3/tests/.././src/bison' ${1+"$@"}
diff --git a/tests/bison.in b/tests/bison.in
index b90c087..f21b2bc 100644
--- a/tests/bison.in
+++ b/tests/bison.in
@@ -2,7 +2,54 @@
 # @configure_input@
 # Wrapper around a non installed bison to make it work as an installed one.
 
+# Copyright (C) 2001-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+abs_top_srcdir='@abs_top_srcdir@'
+abs_top_builddir='@abs_top_builddir@'
+: ${PERL='@PERL@'}
+
 # Use the shipped files, not those installed.
-BISON_PKGDATADIR='@abs_top_srcdir@/data'
+BISON_PKGDATADIR=$abs_top_srcdir/data
 export BISON_PKGDATADIR
-exec $PREBISON '@abs_top_builddir@/src/bison' ${1+"$@"}
+
+$PREBISON "$abs_top_builddir/src/bison" ${1+"$@"}
+status=$?
+
+# As a special dark magic, if we are actually using this wrapper to
+# compile Bison's src/parse-gram.y, post-process the synclines to
+# avoid dependencies on the user's set up (srcdir vs. builddir).
+for i
+do
+  case $i in
+    */parse-gram.y)
+    if $PERL --version >/dev/null; then
+      # We are called by ylwrap which still uses y.tab.*, and
+      # post-processes the synclines on y.tab.c itself.  Don't let it
+      # do it.  Besides, it leaves "parse-gram.y" as the source,
+      # dropping the src/ part.
+      $PERL -pi -e 's{"y\.tab\.}{"parse-gram.}g;'    \
+                -e 's{".*/(parse-gram\.y)"}{"$1"}g;' \
+           y.tab.[ch]
+    fi
+    ;;
+  esac
+done
+
+exit $status
+
+# Local Variables:
+# mode: shell-script
+# End:
diff --git a/tests/c++.at b/tests/c++.at
index e1bd906..a5d8385 100644
--- a/tests/c++.at
+++ b/tests/c++.at
@@ -1,20 +1,20 @@
-# Checking the output filenames.                    -*- Autotest -*-
-# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+# Checking the C++ Features.                    -*- Autotest -*-
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2004-2005, 2007, 2009-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[C++ Features.]])
 
@@ -30,6 +30,7 @@
 	 [m4_fatal([invalid argument: $1])])
 AT_SETUP([Doxygen $1 Documentation])
 
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
 AT_DATA([input.yy],
 [[%skeleton "lalr1.cc"
 %locations
@@ -38,13 +39,10 @@
 %%
 exp:;
 %%
-yy::parser::error (const location& l, const std::string& m)
-{
-  std::cerr << l << s << std::endl;
-}
+]AT_YYERROR_DEFINE[
 ]])
 
-AT_CHECK([bison -o input.cc input.yy], 0)
+AT_BISON_CHECK([-o input.cc input.yy], 0)
 
 AT_DATA([Doxyfile],
 [# The PROJECT_NAME tag is a single word (or a sequence of words
@@ -94,6 +92,7 @@
 AT_CHECK([doxygen --version || exit 77], 0, ignore)
 AT_CHECK([doxygen], 0, [], [ignore])
 
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 m4_popdef([AT_DOXYGEN_PRIVATE])
@@ -101,3 +100,318 @@
 
 AT_CHECK_DOXYGEN([Public])
 AT_CHECK_DOXYGEN([Private])
+
+## ------------ ##
+## Namespaces.  ##
+## ------------ ##
+
+# AT_CHECK_NAMESPACE(NAMESPACE-DECL, [COMPILE-ERROR])
+# ---------------------------------------------------
+# See if Bison can handle %define namespace "NAMESPACE-DECL".  If COMPILE-ERROR
+# is specified, then Bison should accept the input, but compilation will fail,
+# so don't check compilation.
+m4_define([AT_CHECK_NAMESPACE],
+[
+
+AT_DATA_GRAMMAR([[input.y]],
+[[%language "C++"
+%defines
+%define namespace "]$1["
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+]$1[::parser::error (const ]$1[::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  ]$1[::parser p;
+  return p.parse ();
+}
+]])
+
+AT_BISON_CHECK([[-o input.cc input.y]])
+
+m4_if([$#], [1],
+[AT_COMPILE_CXX([[input]], [[input.cc]])
+AT_PARSER_CHECK([[./input]])])
+
+])
+
+AT_SETUP([[Relative namespace references]])
+AT_CHECK_NAMESPACE([[foo]])
+AT_CHECK_NAMESPACE([[foo::bar]])
+AT_CHECK_NAMESPACE([[foo::bar::baz]])
+AT_CLEANUP
+
+AT_SETUP([[Absolute namespace references]])
+AT_CHECK_NAMESPACE([[::foo]])
+AT_CHECK_NAMESPACE([[::foo::bar]])
+AT_CHECK_NAMESPACE([[::foo::bar::baz]])
+AT_CHECK_NAMESPACE([[	::foo]])
+AT_CHECK_NAMESPACE([[  	 ::foo::bar]])
+AT_CHECK_NAMESPACE([[  ::foo::bar::baz]])
+AT_CLEANUP
+
+AT_SETUP([[Syntactically invalid namespace references]])
+AT_CHECK_NAMESPACE([[:foo:bar]], [[-]])
+AT_CHECK_NAMESPACE([[foo: :bar]], [[-]])
+# This one is interesting because `[3]' is encoded as `@<:@3@:>@', which
+# contains single occurrences of `:'.
+AT_CHECK_NAMESPACE([[foo[3]::bar::baz]], [[-]])
+AT_CHECK_NAMESPACE([[foo::bar,baz]], [[-]])
+AT_CHECK_NAMESPACE([[foo::bar::(baz]], [[-]])
+AT_CLEANUP
+
+
+## ------------------ ##
+## Exception safety.  ##
+## ------------------ ##
+
+AT_SETUP([[Exception safety]])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([[input.yy]],
+[[%skeleton "lalr1.cc"
+%defines // FIXME: Mandated in 2.6.
+%debug
+%error-verbose
+
+%code requires
+{
+  #include <cassert>
+  #include <cstdlib> // size_t and getenv.
+  #include <iostream>
+  #include <list>
+
+  bool debug = false;
+
+  /// A class that counts its number of instances.
+  struct Object
+  {
+    typedef std::list<const Object*> objects;
+    static objects instances;
+    char val;
+
+    static bool
+    empty ()
+    {
+      return instances.empty();
+    }
+
+    static void
+    log (Object const *o, const std::string& msg)
+    {
+      if (debug)
+        {
+          if (o)
+            std::cerr << o << "->";
+          std::cerr << msg << " {";
+          const char* sep = " ";
+          for (objects::const_iterator i = instances.begin(),
+                                       i_end = instances.end();
+               i != i_end;
+               ++i)
+            {
+              std::cerr << sep << *i;
+              sep = ", ";
+            }
+          std::cerr << " }" << std::endl;
+        }
+    }
+
+    Object (char v)
+      : val (v)
+    {
+      instances.push_back(this);
+      log (this, "Object::Object");
+    }
+
+    ~Object ()
+    {
+      instances.remove(this);
+      log (this, "Object::~Object");
+    }
+  };
+}
+
+%code
+{
+  #include <cassert>
+  #include <cstring> // strchr
+  #include <stdexcept>
+  int yylex (yy::parser::semantic_type *);
+  Object::objects Object::instances;
+  static char const *input;
+}
+
+%union
+{
+  Object *obj;
+}
+
+%initial-action
+{
+  if (strchr (input, 'i'))
+    throw std::runtime_error ("initial-action");
+}
+
+%destructor { delete $$; } <obj>;
+%printer
+{
+  yyo << $$ << " '" << $$->val << '\'';
+  if ($$->val == 'p')
+    throw std::runtime_error ("printer");
+} <obj>;
+
+%token <obj> 'a' 'E' 'e' 'p' 'R' 's' 'T'
+%type  <obj> list item
+
+%%
+
+start: list { delete $1; };
+
+list:
+  item       { $$ = $1; }
+| item list  { $$ = $1; delete $2; } // Right recursion to load the stack.
+;
+
+item:
+  'a'  { $$ = $1; }
+| 'e'  { YYUSE ($$); YYUSE($1); error (location_type(), "syntax error"); }
+// Not just 'E', otherwise we reduce when 'E' is the lookahead, and
+// then the stack is emptied, defeating the point of the test.
+| 'E' 'a' { YYUSE($1); $$ = $2; }
+| 'R'  { $$ = YY_NULL; delete $1; YYERROR; }
+| 'p'  { $$ = $1; }
+| 's'  { $$ = $1; throw std::runtime_error ("reduction"); }
+| 'T'  { $$ = YY_NULL; delete $1; YYABORT; }
+| error { $$ = YY_NULL; yyerrok; }
+;
+%%
+
+int
+yylex (yy::parser::semantic_type *lvalp)
+{
+  // 'a': no error.
+  // 'e': user action calls error.
+  // 'E': syntax error, with yyerror that throws.
+  // 'i': initial action throws.
+  // 'l': yylex throws.
+  // 'R': call YYERROR in the action
+  // 's': reduction throws.
+  // 'T': call YYABORT in the action
+  switch (int res = *input++)
+  {
+    case 'l':
+      throw std::runtime_error ("yylex");
+    default:
+      lvalp->obj = new Object (res);
+      // Fall through.
+    case 0:
+      return res;
+  }
+}
+
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  YYUSE (l);
+  throw std::runtime_error (m);
+}
+
+int
+main (int argc, const char *argv[])
+{
+  switch (argc)
+  {
+    case 2:
+      input = argv[1];
+      break;
+    case 3:
+      assert (!strcmp (argv[1], "--debug"));
+      debug = 1;
+      input = argv[2];
+      break;
+    default:
+      abort ();
+  }
+
+  yy::parser parser;
+  debug |= !!getenv ("YYDEBUG");
+  parser.set_debug_level (debug);
+  int res = 2;
+  try
+  {
+    res = parser.parse ();
+  }
+  catch (const std::exception& e)
+  {
+    std::cerr << "exception caught: " << e.what () << std::endl;
+  }
+  catch (...)
+  {
+    std::cerr << "unknown exception caught" << std::endl;
+  }
+  Object::log (YY_NULL, "end");
+  assert (Object::empty());
+  return res;
+}
+]])
+AT_BISON_CHECK([[-o input.cc --report=all input.yy]])
+AT_COMPILE_CXX([[input]])
+
+AT_PARSER_CHECK([[./input aaaas]], [[2]], [[]],
+[[exception caught: reduction
+]])
+
+AT_PARSER_CHECK([[./input aaaal]], [[2]], [[]],
+[[exception caught: yylex
+]])
+
+AT_PARSER_CHECK([[./input i]], [[2]], [[]],
+[[exception caught: initial-action
+]])
+
+AT_PARSER_CHECK([[./input aaaap]])
+
+AT_PARSER_CHECK([[./input --debug aaaap]], [[2]], [[]], [[stderr]])
+AT_CHECK([[grep '^exception caught: printer$' stderr]], [], [ignore])
+
+AT_PARSER_CHECK([[./input aaaae]], [[2]], [[]],
+[[exception caught: syntax error
+]])
+
+AT_PARSER_CHECK([[./input aaaaE]], [[2]], [[]],
+[[exception caught: syntax error, unexpected $end, expecting 'a'
+]])
+
+AT_PARSER_CHECK([[./input aaaaT]], [[1]])
+
+# There is error-recovery, so exit success.
+AT_PARSER_CHECK([[./input aaaaR]], [[0]])
+
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
diff --git a/tests/calc.at b/tests/calc.at
index dedf568..f72836e 100644
--- a/tests/calc.at
+++ b/tests/calc.at
@@ -1,22 +1,19 @@
 # Simple calculator.                         -*- Autotest -*-
 
-# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-# Foundation, Inc.
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ## ---------------------------------------------------- ##
 ## Compile the grammar described in the documentation.  ##
@@ -30,85 +27,267 @@
 
 # _AT_DATA_CALC_Y($1, $2, $3, [BISON-DIRECTIVES])
 # -----------------------------------------------
-# Produce `calc.y'.  Don't call this macro directly, because it contains
-# some occurrences of `$1' etc. which will be interpreted by m4.  So
-# you should call it with $1, $2, and $3 as arguments, which is what
-# AT_DATA_CALC_Y does.
+# Produce `calc.y' and, if %defines was specified, `calc-lex.c' or
+# `calc-lex.cc'.
+#
+# Don't call this macro directly, because it contains some occurrences
+# of `$1' etc. which will be interpreted by m4.  So you should call it
+# with $1, $2, and $3 as arguments, which is what AT_DATA_CALC_Y does.
+#
+# When %defines is not passed, generate a single self-contained file.
+# Otherwise, generate three: calc.y with the parser, calc-lex.c with
+# the scanner, and calc-main.c with "main()".  This is in order to
+# stress the use of the generated parser header.  To avoid code
+# duplication, AT_CALC_LEX and AT_CALC_MAIN contain the body of these
+# two later files.
 m4_define([_AT_DATA_CALC_Y],
 [m4_if([$1$2$3], $[1]$[2]$[3], [],
        [m4_fatal([$0: Invalid arguments: $@])])dnl
-AT_DATA_GRAMMAR([calc.y],
-[[/* Infix notation calculator--calc */
-]$4
-AT_SKEL_CC_IF(
-[%define "global_tokens_and_yystype"])[
-%{
-#include <stdio.h>
 
-#include <stdlib.h>
-#include <string.h>
+m4_pushdef([AT_CALC_MAIN],
+[#include <assert.h>
 #if HAVE_UNISTD_H
 # include <unistd.h>
 #else
 # undef alarm
 # define alarm(seconds) /* empty */
 #endif
-#include <ctype.h>
-#define USE(Var)
 
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
+AT_SKEL_CC_IF([[
+/* A C++ ]AT_NAME_PREFIX[parse that simulates the C signature.  */
+int
+]AT_NAME_PREFIX[parse (]AT_PARAM_IF([semantic_value *result, int *count]))[
+{
+  ]AT_NAME_PREFIX[::parser parser]AT_PARAM_IF([ (result, count)])[;
+#if ]AT_API_PREFIX[DEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+]])[
 
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+]AT_SKEL_CC_IF([], [m4_bmatch([$4], [%debug],
+[  ]AT_NAME_PREFIX[debug = 1;])])[
+  status = ]AT_NAME_PREFIX[parse (]AT_PARAM_IF([[&result, &count]])[);
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+]])
+
+
+m4_pushdef([AT_CALC_LEX],
+[[#include <ctype.h>
+
+]AT_YYLEX_DECLARE_EXTERN[
+static int get_char (]AT_YYLEX_FORMALS[);
+static void unget_char (]AT_YYLEX_PRE_FORMALS[ int c);
+
+]AT_LOCATION_IF([
+static AT_YYLTYPE last_yylloc;
+])[
+static int
+get_char (]AT_YYLEX_FORMALS[)
+{
+  int res = getc (input);
+  ]AT_USE_LEX_ARGS[;
+]AT_LOCATION_IF([
+  last_yylloc = AT_LOC;
+  if (res == '\n')
+    {
+      AT_LOC_LAST_LINE++;
+      AT_LOC_LAST_COLUMN = 1;
+    }
+  else
+    AT_LOC_LAST_COLUMN++;
+])[
+  return res;
+}
+
+static void
+unget_char (]AT_YYLEX_PRE_FORMALS[ int c)
+{
+  ]AT_USE_LEX_ARGS[;
+]AT_LOCATION_IF([
+  /* Wrong when C == `\n'. */
+  AT_LOC = last_yylloc;
+])[
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (]AT_YYLEX_FORMALS[)
+{
+  int c = get_char (]AT_YYLEX_ARGS[);
+  int sign = 1;
+  int n = 0;
+
+  ]AT_USE_LEX_ARGS[;
+  if (c == '-')
+    {
+      c = get_char (]AT_YYLEX_ARGS[);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (]AT_YYLEX_ARGS[);
+    }
+
+  unget_char (]AT_YYLEX_PRE_ARGS[ c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+]AT_YYLEX_PROTOTYPE[
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+]AT_LOCATION_IF(
+[     AT_LOC_FIRST_COLUMN = AT_LOC_LAST_COLUMN;
+      AT_LOC_FIRST_LINE   = AT_LOC_LAST_LINE;
+])[
+    }
+  while ((c = get_char (]AT_YYLEX_ARGS[)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (]AT_YYLEX_PRE_ARGS[ c);
+      ]AT_VAL[.ival = read_signed_integer (]AT_YYLEX_ARGS[);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+]])
+
+AT_DATA_GRAMMAR([calc.y],
+[[/* Infix notation calculator--calc */
+]$4
+AT_SKEL_CC_IF(
+[%define global_tokens_and_yystype])[
+%code requires
+{
+]AT_LOCATION_TYPE_IF([[
+# include <iostream>
+  struct Point
+  {
+    int l;
+    int c;
+  };
+
+  struct Span
+  {
+    Point first;
+    Point last;
+  };
+
+# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
+  do                                                                    \
+    if (N)                                                              \
+      {                                                                 \
+        (Current).first = YYRHSLOC (Rhs, 1).first;                      \
+        (Current).last  = YYRHSLOC (Rhs, N).last;                       \
+      }                                                                 \
+    else                                                                \
+      {                                                                 \
+        (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last;      \
+      }                                                                 \
+  while (false)
+
+]])[
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { ]AT_SKEL_CC_IF([[yyoutput << $$]],
+                          [[fprintf (yyoutput, "%d", $$)]])[; } <ival>;
 
-%{
-static int power (int base, int exponent);
-]AT_SKEL_CC_IF(
-[#ifndef YYLTYPE
-[#] define YYLTYPE AT_NAME_PREFIX::location
-#endif
-#define first_line   begin.line
-#define first_column begin.column
-#define last_line    end.line
-#define last_column  end.column
-],
-[/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])
-                     AT_PARAM_IF([semantic_value *result, int *count, ])
-                     const char *s
-                     );])[
-static int yylex (]AT_LEX_FORMALS[);
-static int get_char (]AT_LEX_FORMALS[);
-static void unget_char (]AT_LEX_PRE_FORMALS[ int c);
-%}
-
-]AT_SKEL_CC_IF(
-[/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++. */
-%initial-action {
-  @$.initialize (0);
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
 }
-])[
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE_EXTERN[
+}
+
+]AT_SKEL_CC_IF([AT_LOCATION_TYPE_IF([[
+%initial-action
+{
+  @$.first.l = @$.first.c = 1;
+  @$.last = @$.first;
+}]])])[
 
 /* Bison Declarations */
 %token CALC_EOF 0 "end of input"
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -141,213 +320,58 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
-
-]AT_SKEL_CC_IF(
-[/* A C++ error reporting function.  */
-void
-AT_NAME_PREFIX::parser::error (const location& l, const std::string& m)
-{
-  (void) l;
-  std::cerr << AT_LOCATION_IF([l << ": " << ])m << std::endl;
-}
-
-int
-yyparse (AT_PARAM_IF([semantic_value *result, int *count]))
-{
-  AT_NAME_PREFIX::parser parser[]AT_PARAM_IF([ (result, count)]);
-  parser.set_debug_level (!!YYDEBUG);
-  return parser.parse ();
-}
-],
-[static void
-yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])
-         AT_PARAM_IF([semantic_value *result, int *count, ])
-         const char *s)
-{
-AT_PARAM_IF([(void) result; (void) count;])
-AT_YYERROR_SEES_LOC_IF([
-  fprintf (stderr, "%d.%d",
-           AT_LOC.first_line, AT_LOC.first_column);
-  if (AT_LOC.first_line != AT_LOC.last_line)
-    fprintf (stderr, "-%d.%d",
-	     AT_LOC.last_line,  AT_LOC.last_column - 1);
-  else if (AT_LOC.first_column != AT_LOC.last_column - 1)
-    fprintf (stderr, "-%d",
-	     AT_LOC.last_column - 1);
-  fprintf (stderr, ": ");])
-  fprintf (stderr, "%s\n", s);
-}])[
-
-
-]AT_LOCATION_IF([
-static YYLTYPE last_yylloc;
-])[
-static int
-get_char (]AT_LEX_FORMALS[)
-{
-  int res = getc (input);
-  ]AT_USE_LEX_ARGS[;
-]AT_LOCATION_IF([
-  last_yylloc = AT_LOC;
-  if (res == '\n')
-    {
-      AT_LOC.last_line++;
-      AT_LOC.last_column = 0;
-    }
-  else
-    AT_LOC.last_column++;
-])[
-  return res;
-}
-
-
-static void
-unget_char (]AT_LEX_PRE_FORMALS[ int c)
-{
-  ]AT_USE_LEX_ARGS[;
-]AT_LOCATION_IF([
-  /* Wrong when C == `\n'. */
-  AT_LOC = last_yylloc;
-])[
-  ungetc (c, input);
-}
-
-static int
-read_signed_integer (]AT_LEX_FORMALS[)
-{
-  int c = get_char (]AT_LEX_ARGS[);
-  int sign = 1;
-  int n = 0;
-
-  ]AT_USE_LEX_ARGS[;
-  if (c == '-')
-    {
-      c = get_char (]AT_LEX_ARGS[);
-      sign = -1;
-    }
-
-  while (isdigit (c))
-    {
-      n = 10 * n + (c - '0');
-      c = get_char (]AT_LEX_ARGS[);
-    }
-
-  unget_char (]AT_LEX_PRE_ARGS[ c);
-
-  return sign * n;
-}
-
-
-
-/*---------------------------------------------------------------.
-| Lexical analyzer returns an integer on the stack and the token |
-| NUM, or the ASCII character read if not a number.  Skips all   |
-| blanks and tabs, returns 0 for EOF.                            |
-`---------------------------------------------------------------*/
-
-static int
-yylex (]AT_LEX_FORMALS[)
-{
-  static int init = 1;
-  int c;
-
-  if (init)
-    {
-      init = 0;
-]AT_LOCATION_IF([
-      AT_LOC.last_column = 0;
-      AT_LOC.last_line = 1;
-])[
-    }
-
-]AT_LOCATION_IF([
- AT_LOC.first_column = AT_LOC.last_column;
-  AT_LOC.first_line   = AT_LOC.last_line;
-])[
-
-  /* Skip white space.  */
-  while ((c = get_char (]AT_LEX_ARGS[)) == ' ' || c == '\t')
-    {
-]AT_LOCATION_IF(
-[     AT_LOC.first_column = AT_LOC.last_column;
-      AT_LOC.first_line   = AT_LOC.last_line;
-])[
-    }
-
-  /* process numbers   */
-  if (c == '.' || isdigit (c))
-    {
-      unget_char (]AT_LEX_PRE_ARGS[ c);
-      ]AT_VAL[.ival = read_signed_integer (]AT_LEX_ARGS[);
-      return NUM;
-    }
-
-  /* Return end-of-file.  */
-  if (c == EOF)
-    return CALC_EOF;
-
-  /* Return single chars. */
-  return c;
-}
 
 static int
 power (int base, int exponent)
 {
   int res = 1;
-  if (exponent < 0)
-    exit (3);
+  assert (0 <= exponent);
   for (/* Niente */; exponent; --exponent)
     res *= base;
   return res;
 }
 
+]AT_SKEL_CC_IF(
+[AT_LOCATION_TYPE_IF([[
+  std::ostream&
+  operator<< (std::ostream& o, const Span& s)
+  {
+    o << s.first.l << '.' << s.first.c;
+    if (s.first.l != s.last.l)
+      o << '-' << s.last.l << '.' << s.last.c - 1;
+    else if (s.first.c != s.last.c - 1)
+      o << '-' << s.last.c - 1;
+    return o;
+  }
+]])])[
+]AT_YYERROR_DEFINE[
+]AT_DEFINES_IF([],
+[AT_CALC_LEX
+AT_CALC_MAIN])])
 
-int
-main (int argc, const char **argv)
-{
-  semantic_value result = 0;
-  int count = 0;
-  int status;
+AT_DEFINES_IF([AT_DATA_SOURCE([[calc-lex.c]AT_SKEL_CC_IF([[c]])],
+[[#include "calc.h]AT_SKEL_CC_IF([[h]])["
 
-  /* This used to be alarm (10), but that isn't enough time for
-     a July 1995 vintage DEC Alphastation 200 4/100 system,
-     according to Nelson H. F. Beebe.  100 seconds is enough.  */
-  alarm (100);
+]AT_CALC_LEX])
+AT_DATA_SOURCE([[calc-main.c]AT_SKEL_CC_IF([[c]])],
+[[#include "calc.h]AT_SKEL_CC_IF([[h]])["
 
-  if (argc == 2)
-    input = fopen (argv[1], "r");
-  else
-    input = stdin;
-
-  if (!input)
-    {
-      perror (argv[1]);
-      return 3;
-    }
-
-]AT_SKEL_CC_IF([], [m4_bmatch([$4], [%debug],
-[  yydebug = 1;])])[
-  status = yyparse (]AT_PARAM_IF([&result, &count])[);
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
-  return status;
-}
-]])
+]AT_CALC_MAIN])
+])
+m4_popdef([AT_CALC_MAIN])
+m4_popdef([AT_CALC_LEX])
 ])# _AT_DATA_CALC_Y
 
 
 # AT_DATA_CALC_Y([BISON-OPTIONS])
 # -------------------------------
-# Produce `calc.y'.
+# Produce `calc.y' and, if %defines was specified, `calc-lex.c' or
+# `calc-lex.cc'.
 m4_define([AT_DATA_CALC_Y],
 [_AT_DATA_CALC_Y($[1], $[2], $[3], [$1])
 ])
@@ -410,11 +434,13 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[[0-9$]]* = /d
 /^yydestructor:/d' stderr >at-stderr
@@ -436,26 +462,39 @@
 ])
 
 
-# AT_CHECK_CALC([BISON-OPTIONS, [EXPECTED-TO-FAIL]])
-# --------------------------------------------------
+# AT_CHECK_SPACES([FILE])
+# -----------------------
+# Make sure we did not introduce bad spaces.  Checked here because all
+# the skeletons are (or should be) exercized here.
+m4_define([AT_CHECK_SPACES],
+[AT_CHECK([$PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' $1
+])dnl
+])
+
+
+# AT_CHECK_CALC([BISON-OPTIONS])
+# ------------------------------
 # Start a testing chunk which compiles `calc' grammar with
 # BISON-OPTIONS, and performs several tests over the parser.
-# However, if EXPECTED-TO-FAIL is nonempty, this test is expected to fail.
 m4_define([AT_CHECK_CALC],
-[# We use integers to avoid dependencies upon the precision of doubles.
-AT_SETUP([Calculator $1])
+[m4_ifval([$2], [m4_fatal([$0: expected a single argument])])
 
-m4_ifval([$2], [AT_CHECK([exit 77])])
+# We use integers to avoid dependencies upon the precision of doubles.
+AT_SETUP([Calculator $1])
 
 AT_BISON_OPTION_PUSHDEFS([$1])
 
 AT_DATA_CALC_Y([$1])
-
-AT_SKEL_CC_IF(
-  [AT_CHECK([bison -o calc.cc calc.y])
-   AT_COMPILE_CXX([calc])],
-  [AT_CHECK([bison -o calc.c calc.y])
-   AT_COMPILE([calc])])
+AT_FULL_COMPILE([calc], AT_DEFINES_IF([[lex], [main]]))
+AT_CHECK_SPACES([calc.AT_SKEL_CC_IF([cc], [c])])
+AT_DEFINES_IF([AT_CHECK_SPACES([calc.AT_SKEL_CC_IF([hh], [h])])])
 
 # Test the priorities.
 _AT_CHECK_CALC([$1],
@@ -475,22 +514,22 @@
                [842])
 
 # Some syntax errors.
-_AT_CHECK_CALC_ERROR([$1], [1], [0 0], [15],
-                     [1.2: syntax error, unexpected number])
+_AT_CHECK_CALC_ERROR([$1], [1], [1 2], [15],
+                     [1.3: syntax error, unexpected number])
 _AT_CHECK_CALC_ERROR([$1], [1], [1//2], [20],
-                     [1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'])
+                     [1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'])
 _AT_CHECK_CALC_ERROR([$1], [1], [error], [5],
-                     [1.0: syntax error, unexpected $undefined])
+                     [1.1: syntax error, unexpected $undefined])
 _AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [30],
-                     [1.6: syntax error, unexpected '='])
+                     [1.7: syntax error, unexpected '='])
 _AT_CHECK_CALC_ERROR([$1], [1],
                      [
 +1],
                      [20],
-                     [2.0: syntax error, unexpected '+'])
+                     [2.1: syntax error, unexpected '+'])
 # Exercise error messages with EOF: work on an empty file.
 _AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [4],
-                     [1.0: syntax error, unexpected end of input])
+                     [1.1: syntax error, unexpected end of input])
 
 # Exercise the error token: without it, we die at the first error,
 # hence be sure to
@@ -503,29 +542,37 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
 _AT_CHECK_CALC_ERROR([$1], [0],
                      [() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1],
                      [250],
-[1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+[1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1])
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
-_AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [102],
-[1.9: syntax error, unexpected number
+# POSIX says the lookahead causing the error should not be discarded.
+_AT_CHECK_CALC_ERROR([$1], [0], [(!) + (1 2) = 1], [102],
+[1.10: syntax error, unexpected number
 calc: error: 2222 != 1])
-_AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (0 0) = 1], [113],
-[1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+_AT_CHECK_CALC_ERROR([$1], [0], [(- *) + (1 2) = 1], [113],
+[1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1])
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+_AT_CHECK_CALC_ERROR([$1], [0], [(* *) + (*) + (*)], [113],
+[1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'])
+
 AT_BISON_OPTION_POPDEFS
 
 AT_CLEANUP
@@ -551,22 +598,27 @@
 
 AT_CHECK_CALC_LALR([%defines])
 AT_CHECK_CALC_LALR([%locations])
-AT_CHECK_CALC_LALR([%name-prefix="calc"])
+
+AT_CHECK_CALC_LALR([%name-prefix="calc"]) dnl test deprecated `='
 AT_CHECK_CALC_LALR([%verbose])
 AT_CHECK_CALC_LALR([%yacc])
 AT_CHECK_CALC_LALR([%error-verbose])
 
-AT_CHECK_CALC_LALR([%pure-parser %locations])
+AT_CHECK_CALC_LALR([%define api.pure full %locations])
+AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure full %locations])
 AT_CHECK_CALC_LALR([%error-verbose %locations])
 
-AT_CHECK_CALC_LALR([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%error-verbose %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%error-verbose %locations %defines %define api.prefix "calc" %verbose %yacc])
 
 AT_CHECK_CALC_LALR([%debug])
-AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%define api.pure full %verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure full %verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_LALR([%define api.pure %error-verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
 
 
 # ----------------------- #
@@ -587,22 +639,25 @@
 
 AT_CHECK_CALC_GLR([%defines])
 AT_CHECK_CALC_GLR([%locations])
-AT_CHECK_CALC_GLR([%name-prefix="calc"])
+AT_CHECK_CALC_GLR([%name-prefix "calc"])
+AT_CHECK_CALC_GLR([%define api.prefix "calc"])
 AT_CHECK_CALC_GLR([%verbose])
 AT_CHECK_CALC_GLR([%yacc])
 AT_CHECK_CALC_GLR([%error-verbose])
 
-AT_CHECK_CALC_GLR([%pure-parser %locations])
+AT_CHECK_CALC_GLR([%define api.pure %locations])
 AT_CHECK_CALC_GLR([%error-verbose %locations])
 
-AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix "calc" %verbose %yacc])
 
 AT_CHECK_CALC_GLR([%debug])
-AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_GLR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_GLR([%define api.pure %error-verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
 
 
 # ----------------------------- #
@@ -611,21 +666,26 @@
 
 AT_BANNER([[Simple LALR(1) C++ Calculator.]])
 
+# First let's try using %skeleton
+AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations])
+
 # AT_CHECK_CALC_LALR1_CC([BISON-OPTIONS])
 # ---------------------------------------
 # Start a testing chunk which compiles `calc' grammar with
 # the C++ skeleton, and performs several tests over the parser.
 m4_define([AT_CHECK_CALC_LALR1_CC],
-[AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations] $@)])
+[AT_CHECK_CALC([%language "C++" %defines %locations] $@)])
 
 AT_CHECK_CALC_LALR1_CC([])
-AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%define api.location.type Span])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %define api.prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %define api.prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc])
-
-AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
 
 
 
@@ -635,19 +695,25 @@
 
 AT_BANNER([[Simple GLR C++ Calculator.]])
 
+# Again, we try also using %skeleton.
+AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations])
+
 # AT_CHECK_CALC_GLR_CC([BISON-OPTIONS])
 # -------------------------------------
 # Start a testing chunk which compiles `calc' grammar with
 # the GLR C++ skeleton, and performs several tests over the parser.
 m4_define([AT_CHECK_CALC_GLR_CC],
-[AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations] $@)])
+[AT_CHECK_CALC([%language "C++" %glr-parser %defines %locations] $@)])
 
-#AT_CHECK_CALC_GLR_CC([])
-#AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([])
+AT_CHECK_CALC_GLR_CC([%define api.location.type Span])
+AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%error-verbose %define api.prefix "calc" %verbose %yacc])
 
-# AT_CHECK_CALC_GLR_CC([%debug])
-#AT_CHECK_CALC_GLR_CC([%error-verbose %debug %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%debug])
+AT_CHECK_CALC_GLR_CC([%error-verbose %debug %name-prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
diff --git a/tests/conflicts.at b/tests/conflicts.at
index 1cbf23a..5653b48 100644
--- a/tests/conflicts.at
+++ b/tests/conflicts.at
@@ -1,21 +1,20 @@
 # Exercising Bison on conflicts.                         -*- Autotest -*-
 
-# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2002-2005, 2007, 2009-2012 Free Software Foundation,
+# Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[Conflicts.]])
 
@@ -38,8 +37,14 @@
 e: 'e' | /* Nothing. */;
 ]])
 
-AT_CHECK([bison -o input.c input.y], 0, [],
-[[input.y:4.9: warning: rule never reduced because of conflicts: e: /* empty */
+AT_BISON_CHECK([-o input.c input.y], 0, [],
+[[input.y:4.9: warning: rule useless in parser due to conflicts: e: /* empty */
+]])
+
+AT_BISON_CHECK([-fcaret -o input.c input.y], 0, [],
+[[input.y:4.9: warning: rule useless in parser due to conflicts
+ e: 'e' | /* Nothing. */;
+         ^
 ]])
 
 AT_CLEANUP
@@ -51,30 +56,26 @@
 
 AT_SETUP([%nonassoc and eof])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([input.y],
 [[
 %{
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
+#include <assert.h>
 
 #define YYERROR_VERBOSE 1
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
 /* The current argument. */
-static const char *input = NULL;
+static const char *input;
 
 static int
 yylex (void)
 {
-  /* No token stands for end of file. */
-  if (input && *input)
-    return *input++;
-  else
-    return 0;
+  static size_t toknum;
+  assert (toknum <= strlen (input));
+  return input[toknum++];
 }
 
 %}
@@ -90,37 +91,454 @@
 int
 main (int argc, const char *argv[])
 {
-  if (argc > 1)
-    input = argv[1];
+  input = argc <= 1 ? "" : argv[1];
   return yyparse ();
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-# Specify the output files to avoid problems on different file systems.
-AT_CHECK([bison -o input.c input.y])
+m4_pushdef([AT_NONASSOC_AND_EOF_CHECK],
+[AT_BISON_CHECK([$1[ -o input.c input.y]])
 AT_COMPILE([input])
 
+m4_pushdef([AT_EXPECTING], [m4_if($2, [correct], [[, expecting $end]])])
+
 AT_PARSER_CHECK([./input '0<0'])
-# FIXME: This is an actual bug, but a new one, in the sense that
-# no one has ever spotted it!  The messages are *wrong*: there should
-# be nothing there, it should be expected eof.
 AT_PARSER_CHECK([./input '0<0<0'], [1], [],
-         [syntax error, unexpected '<', expecting '<' or '>'
+         [syntax error, unexpected '<'AT_EXPECTING
 ])
 
 AT_PARSER_CHECK([./input '0>0'])
 AT_PARSER_CHECK([./input '0>0>0'], [1], [],
-         [syntax error, unexpected '>', expecting '<' or '>'
+         [syntax error, unexpected '>'AT_EXPECTING
 ])
 
 AT_PARSER_CHECK([./input '0<0>0'], [1], [],
-         [syntax error, unexpected '>', expecting '<' or '>'
+         [syntax error, unexpected '>'AT_EXPECTING
 ])
 
+m4_popdef([AT_EXPECTING])])
+
+# Expected token list is missing.
+AT_NONASSOC_AND_EOF_CHECK([], [[incorrect]])
+
+# We must disable default reductions in inconsistent states in order to
+# have an explicit list of all expected tokens.
+AT_NONASSOC_AND_EOF_CHECK([[-Dlr.default-reductions=consistent]],
+                          [[correct]])
+
+# lr.default-reductions=consistent happens to work for this test case.
+# However, for other grammars, lookahead sets can be merged for
+# different left contexts, so it is still possible to have an incorrect
+# expected list.  Canonical LR is almost a general solution (that is, it
+# can fail only when %nonassoc is used), so make sure it gives the same
+# result as above.
+AT_NONASSOC_AND_EOF_CHECK([[-Dlr.type=canonical-lr]], [[correct]])
+
+# parse.lac=full is a completely general solution that does not require
+# any of the above sacrifices.  Of course, it does not extend the
+# language-recognition power of LALR to (IE)LR, but it does ensure that
+# the reported list of expected tokens matches what the given parser
+# would have accepted in place of the unexpected token.
+AT_NONASSOC_AND_EOF_CHECK([[-Dparse.lac=full]], [[correct]])
+
+m4_popdef([AT_NONASSOC_AND_EOF_CHECK])
+
 AT_CLEANUP
 
 
 
+## -------------------------------------- ##
+## %error-verbose and consistent errors.  ##
+## -------------------------------------- ##
+
+AT_SETUP([[%error-verbose and consistent errors]])
+
+m4_pushdef([AT_CONSISTENT_ERRORS_CHECK], [
+
+AT_BISON_OPTION_PUSHDEFS([$1])
+
+m4_pushdef([AT_YYLEX_PROTOTYPE],
+[AT_SKEL_CC_IF([[int yylex (yy::parser::semantic_type *lvalp)]],
+               [[int yylex (YYSTYPE *lvalp)]])])
+
+AT_SKEL_JAVA_IF([AT_DATA], [AT_DATA_GRAMMAR])([input.y],
+[AT_SKEL_JAVA_IF([[
+
+%code imports {
+  import java.io.IOException;
+}]], [[
+
+%code {]AT_SKEL_CC_IF([[
+  #include <cassert>
+  #include <string>]], [[
+  #include <assert.h>
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE])[
+  ]AT_YYLEX_PROTOTYPE[;
+  #define USE(Var)
+}
+
+]AT_SKEL_CC_IF([[%defines]], [[%define api.pure]])])[
+
+]$1[
+
+%error-verbose
+
+%%
+
+]$2[
+
+]AT_SKEL_JAVA_IF([[%code lexer {]], [[%%]])[
+
+/*--------.
+| yylex.  |
+`--------*/]AT_SKEL_JAVA_IF([[
+
+public String input = "]$3[";
+public int index = 0;
+public int yylex ()
+{
+  if (index < input.length ())
+    return input.charAt (index++);
+  else
+    return 0;
+}
+public Object getLVal ()
+{
+  return new Integer(1);
+}]], [[
+
+]AT_YYLEX_PROTOTYPE[
+{
+  static char const *input = "]$3[";
+  *lvalp = 1;
+  return *input++;
+}]])[
+]AT_YYERROR_DEFINE[
+]AT_SKEL_JAVA_IF([[
+};
+
+%%]])[
+
+/*-------.
+| main.  |
+`-------*/]AT_SKEL_JAVA_IF([[
+
+class input
+{
+  public static void main (String args[]) throws IOException
+  {
+    YYParser p = new YYParser ();
+    p.parse ();
+  }
+}]], [AT_SKEL_CC_IF([[
+
+int
+main (void)
+{
+  yy::parser parser;
+  return parser.parse ();
+}]], [[
+
+int
+main (void)
+{
+  return yyparse ();
+}]])])[
+]])
+
+AT_FULL_COMPILE([[input]])
+
+m4_pushdef([AT_EXPECTING], [m4_if($5, [ab], [[, expecting 'a' or 'b']],
+                                  $5, [a],  [[, expecting 'a']],
+                                  $5, [b],  [[, expecting 'b']])])
+
+AT_SKEL_JAVA_IF([AT_JAVA_PARSER_CHECK([[input]], [[0]]],
+                [AT_PARSER_CHECK([[./input]], [[1]]]),
+[[]],
+[[syntax error, unexpected ]$4[]AT_EXPECTING[
+]])
+
+m4_popdef([AT_EXPECTING])
+m4_popdef([AT_YYLEX_PROTOTYPE])
+AT_BISON_OPTION_POPDEFS
+
+])
+
+m4_pushdef([AT_PREVIOUS_STATE_GRAMMAR],
+[[%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+]])
+
+m4_pushdef([AT_PREVIOUS_STATE_INPUT], [[a]])
+
+# Unfortunately, no expected tokens are reported even though 'b' can be
+# accepted.  Nevertheless, the main point of this test is to make sure
+# that at least the unexpected token is reported.  In a previous version
+# of Bison, it wasn't reported because the error is detected in a
+# consistent state with an error action, and that case always triggered
+# the simple "syntax error" message.
+#
+# The point isn't to test IELR here, but state merging happens to
+# complicate this example.
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[none]])
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr
+                             %glr-parser]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[none]])
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr
+                             %language "c++"]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[none]])
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr
+                             %language "java"]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[end of input]], [[none]])
+
+# Even canonical LR doesn't foresee the error for 'a'!
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr
+                             %define lr.default-reductions consistent]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[ab]])
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr
+                             %define lr.default-reductions accepting]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[ab]])
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type canonical-lr]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[ab]])
+
+# Only LAC gets it right.
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type canonical-lr
+                             %define parse.lac full]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[b]])
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr
+                             %define parse.lac full]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[b]])
+
+m4_popdef([AT_PREVIOUS_STATE_GRAMMAR])
+m4_popdef([AT_PREVIOUS_STATE_INPUT])
+
+m4_pushdef([AT_USER_ACTION_GRAMMAR],
+[[%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($][3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($][1, $][2, $][5)); }
+| 'a' error
+  { USE ($][1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == ]AT_SKEL_CC_IF([[yyempty_]], [[YYEMPTY]])[);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($][1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+]])
+m4_pushdef([AT_USER_ACTION_INPUT], [[aa]])
+
+AT_CONSISTENT_ERRORS_CHECK([[]],
+                           [AT_USER_ACTION_GRAMMAR],
+                           [AT_USER_ACTION_INPUT],
+                           [['b']], [[none]])
+AT_CONSISTENT_ERRORS_CHECK([[%glr-parser]],
+                           [AT_USER_ACTION_GRAMMAR],
+                           [AT_USER_ACTION_INPUT],
+                           [['b']], [[none]])
+AT_CONSISTENT_ERRORS_CHECK([[%language "c++"]],
+                           [AT_USER_ACTION_GRAMMAR],
+                           [AT_USER_ACTION_INPUT],
+                           [['b']], [[none]])
+# No Java test because yychar cannot be manipulated by users.
+
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.default-reductions consistent]],
+                           [AT_USER_ACTION_GRAMMAR],
+                           [AT_USER_ACTION_INPUT],
+                           [['b']], [[none]])
+
+# Canonical LR doesn't foresee the error for 'a'!
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.default-reductions accepting]],
+                           [AT_USER_ACTION_GRAMMAR],
+                           [AT_USER_ACTION_INPUT],
+                           [[$end]], [[a]])
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.type canonical-lr]],
+                           [AT_USER_ACTION_GRAMMAR],
+                           [AT_USER_ACTION_INPUT],
+                           [[$end]], [[a]])
+
+AT_CONSISTENT_ERRORS_CHECK([[%define parse.lac full]],
+                           [AT_USER_ACTION_GRAMMAR],
+                           [AT_USER_ACTION_INPUT],
+                           [['b']], [[none]])
+AT_CONSISTENT_ERRORS_CHECK([[%define parse.lac full
+                             %define lr.default-reductions accepting]],
+                           [AT_USER_ACTION_GRAMMAR],
+                           [AT_USER_ACTION_INPUT],
+                           [[$end]], [[none]])
+
+m4_popdef([AT_USER_ACTION_GRAMMAR])
+m4_popdef([AT_USER_ACTION_INPUT])
+
+m4_popdef([AT_CONSISTENT_ERRORS_CHECK])
+
+AT_CLEANUP
+
+
+
+## ------------------------------------------------------- ##
+## LAC: %nonassoc requires splitting canonical LR states.  ##
+## ------------------------------------------------------- ##
+
+# This test case demonstrates that, when %nonassoc is used, canonical
+# LR(1) parser table construction followed by conflict resolution
+# without further state splitting is not always sufficient to produce a
+# parser that can detect all syntax errors as soon as possible on one
+# token of lookahead.  However, LAC solves the problem completely even
+# with minimal LR parser tables.
+
+AT_SETUP([[LAC: %nonassoc requires splitting canonical LR states]])
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%code {
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+
+%error-verbose
+%nonassoc 'a'
+
+%%
+
+start:
+  'a' problem 'a' // First context.
+| 'b' problem 'b' // Second context.
+| 'c' reduce-nonassoc // Just makes reduce-nonassoc useful.
+;
+
+problem:
+  look reduce-nonassoc
+| look 'a'
+| look 'b'
+;
+
+// For the state reached after shifting the 'a' in these productions,
+// lookahead sets are the same in both the first and second contexts.
+// Thus, canonical LR reuses the same state for both contexts.  However,
+// the lookahead 'a' for the reduction "look: 'a'" later becomes an
+// error action only in the first context.  In order to immediately
+// detect the syntax error on 'a' here for only the first context, this
+// canonical LR state would have to be split into two states, and the
+// 'a' lookahead would have to be removed from only one of the states.
+look:
+  'a' // Reduction lookahead set is always ['a', 'b'].
+| 'a' 'b'
+| 'a' 'c' // 'c' is forgotten as an expected token.
+;
+
+reduce-nonassoc: %prec 'a';
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["aaa"])[
+
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+# Show canonical LR's failure.
+AT_BISON_CHECK([[-Dlr.type=canonical-lr -o input.c input.y]],
+               [[0]], [[]],
+[[input.y: conflicts: 2 shift/reduce
+]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]], [[1]], [[]],
+[[syntax error, unexpected 'a', expecting 'b'
+]])
+
+# It's corrected by LAC.
+AT_BISON_CHECK([[-Dlr.type=canonical-lr -Dparse.lac=full \
+                 -o input.c input.y]], [[0]], [[]],
+[[input.y: conflicts: 2 shift/reduce
+]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]], [[1]], [[]],
+[[syntax error, unexpected 'a', expecting 'b' or 'c'
+]])
+
+# IELR is sufficient when LAC is used.
+AT_BISON_CHECK([[-Dlr.type=ielr -Dparse.lac=full -o input.c input.y]],
+               [[0]], [[]],
+[[input.y: conflicts: 2 shift/reduce
+]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]], [[1]], [[]],
+[[syntax error, unexpected 'a', expecting 'b' or 'c'
+]])
+
+AT_CLEANUP
+
 ## ------------------------- ##
 ## Unresolved SR Conflicts.  ##
 ## ------------------------- ##
@@ -135,7 +553,7 @@
 exp: exp OP exp | NUM;
 ]])
 
-AT_CHECK([bison -o input.c --report=all input.y], 0, [],
+AT_BISON_CHECK([-o input.c --report=all input.y], 0, [],
 [input.y: conflicts: 1 shift/reduce
 ])
 
@@ -168,7 +586,7 @@
     on left: 1 2, on right: 0 1
 
 
-state 0
+State 0
 
     0 $accept: . exp $end
     1 exp: . exp OP exp
@@ -179,14 +597,14 @@
     exp  go to state 2
 
 
-state 1
+State 1
 
     2 exp: NUM .
 
     $default  reduce using rule 2 (exp)
 
 
-state 2
+State 2
 
     0 $accept: exp . $end
     1 exp: exp . OP exp
@@ -195,14 +613,14 @@
     OP    shift, and go to state 4
 
 
-state 3
+State 3
 
     0 $accept: exp $end .
 
     $default  accept
 
 
-state 4
+State 4
 
     1 exp: . exp OP exp
     1    | exp OP . exp
@@ -213,9 +631,9 @@
     exp  go to state 5
 
 
-state 5
+State 5
 
-    1 exp: exp . OP exp  [$end, OP]
+    1 exp: exp . OP exp
     1    | exp OP exp .  [$end, OP]
 
     OP  shift, and go to state 4
@@ -243,7 +661,7 @@
 exp: exp OP exp | NUM;
 ]])
 
-AT_CHECK([bison -o input.c --report=all input.y])
+AT_BISON_CHECK([-o input.c --report=all input.y])
 
 # Check the contents of the report.
 AT_CHECK([cat input.output], [],
@@ -271,7 +689,7 @@
     on left: 1 2, on right: 0 1
 
 
-state 0
+State 0
 
     0 $accept: . exp $end
     1 exp: . exp OP exp
@@ -282,14 +700,14 @@
     exp  go to state 2
 
 
-state 1
+State 1
 
     2 exp: NUM .
 
     $default  reduce using rule 2 (exp)
 
 
-state 2
+State 2
 
     0 $accept: exp . $end
     1 exp: exp . OP exp
@@ -298,14 +716,14 @@
     OP    shift, and go to state 4
 
 
-state 3
+State 3
 
     0 $accept: exp $end .
 
     $default  accept
 
 
-state 4
+State 4
 
     1 exp: . exp OP exp
     1    | exp OP . exp
@@ -316,9 +734,9 @@
     exp  go to state 5
 
 
-state 5
+State 5
 
-    1 exp: exp . OP exp  [$end, OP]
+    1 exp: exp . OP exp
     1    | exp OP exp .  [$end, OP]
 
     $default  reduce using rule 1 (exp)
@@ -365,14 +783,14 @@
 %%
 ]])
 
-AT_CHECK([bison -o input.c --report=all input.y], 0, [],
+AT_BISON_CHECK([-o input.c --report=all input.y], 0, [],
 [[input.y: conflicts: 1 reduce/reduce
-input.y:4.6-8: warning: rule never reduced because of conflicts: id: '0'
+input.y:4.6-8: warning: rule useless in parser due to conflicts: id: '0'
 ]])
 
 # Check the contents of the report.
 AT_CHECK([cat input.output], [],
-[[Rules never reduced
+[[Rules useless in parser due to conflicts
 
     4 id: '0'
 
@@ -411,7 +829,7 @@
     on left: 4, on right: 2
 
 
-state 0
+State 0
 
     0 $accept: . exp $end
     1 exp: . num
@@ -426,7 +844,7 @@
     id   go to state 4
 
 
-state 1
+State 1
 
     3 num: '0' .  [$end]
     4 id: '0' .  [$end]
@@ -436,28 +854,28 @@
     $default  reduce using rule 3 (num)
 
 
-state 2
+State 2
 
     0 $accept: exp . $end
 
     $end  shift, and go to state 5
 
 
-state 3
+State 3
 
     1 exp: num .
 
     $default  reduce using rule 1 (exp)
 
 
-state 4
+State 4
 
     2 exp: id .
 
     $default  reduce using rule 2 (exp)
 
 
-state 5
+State 5
 
     0 $accept: exp $end .
 
@@ -482,9 +900,9 @@
 exp: exp OP exp | NUM;
 ]])
 
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
 [input.y: conflicts: 1 shift/reduce
-input.y: expected 0 shift/reduce conflicts
+input.y: error: expected 0 shift/reduce conflicts
 ])
 AT_CLEANUP
 
@@ -502,7 +920,7 @@
 exp: exp OP exp | NUM;
 ]])
 
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
 AT_CLEANUP
 
 
@@ -519,16 +937,16 @@
 exp: exp OP exp | NUM;
 ]])
 
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
 [input.y: conflicts: 1 shift/reduce
-input.y: expected 2 shift/reduce conflicts
+input.y: error: expected 2 shift/reduce conflicts
 ])
 AT_CLEANUP
 
 
-## ------------------------------ ##
-## %expect with reduce conflicts  ##
-## ------------------------------ ##
+## ------------------------------- ##
+## %expect with reduce conflicts.  ##
+## ------------------------------- ##
 
 AT_SETUP([%expect with reduce conflicts])
 
@@ -539,16 +957,33 @@
 a: 'a';
 ]])
 
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
 [input.y: conflicts: 1 reduce/reduce
-input.y: expected 0 reduce/reduce conflicts
+input.y: error: expected 0 reduce/reduce conflicts
 ])
 AT_CLEANUP
 
 
-## ------------------------------- ##
-## %no-default-prec without %prec  ##
-## ------------------------------- ##
+## ------------------------- ##
+## %prec with user strings.  ##
+## ------------------------- ##
+
+AT_SETUP([%prec with user string])
+
+AT_DATA([[input.y]],
+[[%%
+exp:
+  "foo" %prec "foo"
+;
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_CLEANUP
+
+
+## -------------------------------- ##
+## %no-default-prec without %prec.  ##
+## -------------------------------- ##
 
 AT_SETUP([%no-default-prec without %prec])
 
@@ -566,15 +1001,15 @@
    ;
 ]])
 
-AT_CHECK([bison -o input.c input.y], 0, [],
+AT_BISON_CHECK([-o input.c input.y], 0, [],
 [[input.y: conflicts: 4 shift/reduce
 ]])
 AT_CLEANUP
 
 
-## ---------------------------- ##
-## %no-default-prec with %prec  ##
-## ---------------------------- ##
+## ----------------------------- ##
+## %no-default-prec with %prec.  ##
+## ----------------------------- ##
 
 AT_SETUP([%no-default-prec with %prec])
 
@@ -592,13 +1027,13 @@
    ;
 ]])
 
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
 AT_CLEANUP
 
 
-## ---------------- ##
-## %default-prec    ##
-## ---------------- ##
+## --------------- ##
+## %default-prec.  ##
+## --------------- ##
 
 AT_SETUP([%default-prec])
 
@@ -616,5 +1051,466 @@
    ;
 ]])
 
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
+AT_CLEANUP
+
+
+## ---------------------------------------------- ##
+## Unreachable States After Conflict Resolution.  ##
+## ---------------------------------------------- ##
+
+AT_SETUP([[Unreachable States After Conflict Resolution]])
+
+# If conflict resolution makes states unreachable, remove those states, report
+# rules that are then unused, and don't report conflicts in those states.  Test
+# what happens when a nonterminal becomes useless as a result of state removal
+# since that causes lalr.o's goto map to be rewritten.
+
+AT_DATA([[input.y]],
+[[%output "input.c"
+%left 'a'
+
+%%
+
+start: resolved_conflict 'a' reported_conflicts 'a' ;
+
+/* S/R conflict resolved as reduce, so the state with item
+ * (resolved_conflict: 'a' . unreachable1) and all it transition successors are
+ * unreachable, and the associated production is useless.  */
+resolved_conflict:
+    'a' unreachable1
+  | %prec 'a'
+  ;
+
+/* S/R conflict that need not be reported since it is unreachable because of
+ * the previous conflict resolution.  Nonterminal unreachable1 and all its
+ * productions are useless.  */
+unreachable1:
+    'a' unreachable2
+  |
+  ;
+
+/* Likewise for a R/R conflict and nonterminal unreachable2.  */
+unreachable2: | ;
+
+/* Make sure remaining S/R and R/R conflicts are still reported correctly even
+ * when their states are renumbered due to state removal.  */
+reported_conflicts:
+    'a'
+  | 'a'
+  |
+  ;
+
+]])
+
+AT_BISON_CHECK([[--report=all input.y]], 0, [],
+[[input.y: conflicts: 1 shift/reduce, 1 reduce/reduce
+input.y:12.5-20: warning: rule useless in parser due to conflicts: resolved_conflict: 'a' unreachable1
+input.y:20.5-20: warning: rule useless in parser due to conflicts: unreachable1: 'a' unreachable2
+input.y:21.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
+input.y:25.13: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input.y:25.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input.y:31.5-7: warning: rule useless in parser due to conflicts: reported_conflicts: 'a'
+input.y:32.4: warning: rule useless in parser due to conflicts: reported_conflicts: /* empty */
+]])
+
+AT_CHECK([[cat input.output]], 0,
+[[Rules useless in parser due to conflicts
+
+    2 resolved_conflict: 'a' unreachable1
+
+    4 unreachable1: 'a' unreachable2
+    5             | /* empty */
+
+    6 unreachable2: /* empty */
+    7             | /* empty */
+
+    9 reported_conflicts: 'a'
+   10                   | /* empty */
+
+
+State 4 conflicts: 1 shift/reduce
+State 5 conflicts: 1 reduce/reduce
+
+
+Grammar
+
+    0 $accept: start $end
+
+    1 start: resolved_conflict 'a' reported_conflicts 'a'
+
+    2 resolved_conflict: 'a' unreachable1
+    3                  | /* empty */
+
+    4 unreachable1: 'a' unreachable2
+    5             | /* empty */
+
+    6 unreachable2: /* empty */
+    7             | /* empty */
+
+    8 reported_conflicts: 'a'
+    9                   | 'a'
+   10                   | /* empty */
+
+
+Terminals, with rules where they appear
+
+$end (0) 0
+'a' (97) 1 2 4 8 9
+error (256)
+
+
+Nonterminals, with rules where they appear
+
+$accept (4)
+    on left: 0
+start (5)
+    on left: 1, on right: 0
+resolved_conflict (6)
+    on left: 2 3, on right: 1
+unreachable1 (7)
+    on left: 4 5, on right: 2
+unreachable2 (8)
+    on left: 6 7, on right: 4
+reported_conflicts (9)
+    on left: 8 9 10, on right: 1
+
+
+State 0
+
+    0 $accept: . start $end
+    1 start: . resolved_conflict 'a' reported_conflicts 'a'
+    2 resolved_conflict: . 'a' unreachable1
+    3                  | .  ['a']
+
+    $default  reduce using rule 3 (resolved_conflict)
+
+    start              go to state 1
+    resolved_conflict  go to state 2
+
+    Conflict between rule 3 and token 'a' resolved as reduce (%left 'a').
+
+
+State 1
+
+    0 $accept: start . $end
+
+    $end  shift, and go to state 3
+
+
+State 2
+
+    1 start: resolved_conflict . 'a' reported_conflicts 'a'
+
+    'a'  shift, and go to state 4
+
+
+State 3
+
+    0 $accept: start $end .
+
+    $default  accept
+
+
+State 4
+
+    1 start: resolved_conflict 'a' . reported_conflicts 'a'
+    8 reported_conflicts: . 'a'
+    9                   | . 'a'
+   10                   | .  ['a']
+
+    'a'  shift, and go to state 5
+
+    'a'  [reduce using rule 10 (reported_conflicts)]
+
+    reported_conflicts  go to state 6
+
+
+State 5
+
+    8 reported_conflicts: 'a' .  ['a']
+    9                   | 'a' .  ['a']
+
+    'a'       reduce using rule 8 (reported_conflicts)
+    'a'       [reduce using rule 9 (reported_conflicts)]
+    $default  reduce using rule 8 (reported_conflicts)
+
+
+State 6
+
+    1 start: resolved_conflict 'a' reported_conflicts . 'a'
+
+    'a'  shift, and go to state 7
+
+
+State 7
+
+    1 start: resolved_conflict 'a' reported_conflicts 'a' .
+
+    $default  reduce using rule 1 (start)
+]])
+
+AT_DATA([[input-keep.y]],
+[[%define lr.keep-unreachable-states
+]])
+AT_CHECK([[cat input.y >> input-keep.y]])
+
+AT_BISON_CHECK([[input-keep.y]], 0, [],
+[[input-keep.y: conflicts: 2 shift/reduce, 2 reduce/reduce
+input-keep.y:22.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
+input-keep.y:26.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input-keep.y:32.5-7: warning: rule useless in parser due to conflicts: reported_conflicts: 'a'
+input-keep.y:33.4: warning: rule useless in parser due to conflicts: reported_conflicts: /* empty */
+]])
+
+AT_CLEANUP
+
+
+## ------------------------------------------------------------ ##
+## Solved conflicts report for multiple reductions in a state.  ##
+## ------------------------------------------------------------ ##
+
+AT_SETUP([[Solved conflicts report for multiple reductions in a state]])
+
+# Used to lose earlier solved conflict messages even within a single S/R/R.
+
+AT_DATA([[input.y]],
+[[%left 'a'
+%right 'b'
+%right 'c'
+%right 'd'
+%%
+start:
+    'a'
+  | empty_a 'a'
+  | 'b'
+  | empty_b 'b'
+  | 'c'
+  | empty_c1 'c'
+  | empty_c2 'c'
+  | empty_c3 'c'
+  ;
+empty_a: %prec 'a' ;
+empty_b: %prec 'b' ;
+empty_c1: %prec 'c' ;
+empty_c2: %prec 'c' ;
+empty_c3: %prec 'd' ;
+]])
+AT_BISON_CHECK([[--report=all -o input.c input.y]], 0, [], [ignore])
+AT_CHECK([[cat input.output | sed -n '/^State 0$/,/^State 1$/p']], 0,
+[[State 0
+
+    0 $accept: . start $end
+    1 start: . 'a'
+    2      | . empty_a 'a'
+    3      | . 'b'
+    4      | . empty_b 'b'
+    5      | . 'c'
+    6      | . empty_c1 'c'
+    7      | . empty_c2 'c'
+    8      | . empty_c3 'c'
+    9 empty_a: .  ['a']
+   10 empty_b: .  []
+   11 empty_c1: .  []
+   12 empty_c2: .  []
+   13 empty_c3: .  ['c']
+
+    'b'  shift, and go to state 1
+
+    'c'       reduce using rule 13 (empty_c3)
+    $default  reduce using rule 9 (empty_a)
+
+    start     go to state 2
+    empty_a   go to state 3
+    empty_b   go to state 4
+    empty_c1  go to state 5
+    empty_c2  go to state 6
+    empty_c3  go to state 7
+
+    Conflict between rule 9 and token 'a' resolved as reduce (%left 'a').
+    Conflict between rule 10 and token 'b' resolved as shift (%right 'b').
+    Conflict between rule 11 and token 'c' resolved as shift (%right 'c').
+    Conflict between rule 12 and token 'c' resolved as shift (%right 'c').
+    Conflict between rule 13 and token 'c' resolved as reduce ('c' < 'd').
+
+
+State 1
+]])
+
+AT_CLEANUP
+
+
+## ------------------------------------------------------------ ##
+## %nonassoc error actions for multiple reductions in a state.  ##
+## ------------------------------------------------------------ ##
+
+# Used to abort when trying to resolve conflicts as %nonassoc error actions for
+# multiple reductions in a state.
+
+# For a %nonassoc error action token, used to print the first remaining
+# reduction on that token without brackets.
+
+AT_SETUP([[%nonassoc error actions for multiple reductions in a state]])
+
+AT_DATA([[input.y]],
+[[%nonassoc 'a' 'b' 'c'
+%%
+start:
+    'a'
+  | empty_a 'a'
+  | 'b'
+  | empty_b 'b'
+  | 'c'
+  | empty_c1 'c'
+  | empty_c2 'c'
+  | empty_c3 'c'
+  ;
+empty_a: %prec 'a' ;
+empty_b: %prec 'b' ;
+empty_c1: %prec 'c' ;
+empty_c2: %prec 'c' ;
+empty_c3: %prec 'c' ;
+]])
+
+AT_BISON_CHECK([[--report=all -o input.c input.y]], 0, [], [ignore])
+AT_CHECK([[cat input.output | sed -n '/^State 0$/,/^State 1$/p']], 0,
+[[State 0
+
+    0 $accept: . start $end
+    1 start: . 'a'
+    2      | . empty_a 'a'
+    3      | . 'b'
+    4      | . empty_b 'b'
+    5      | . 'c'
+    6      | . empty_c1 'c'
+    7      | . empty_c2 'c'
+    8      | . empty_c3 'c'
+    9 empty_a: .  []
+   10 empty_b: .  []
+   11 empty_c1: .  []
+   12 empty_c2: .  ['c']
+   13 empty_c3: .  ['c']
+
+    'a'  error (nonassociative)
+    'b'  error (nonassociative)
+    'c'  error (nonassociative)
+
+    'c'  [reduce using rule 12 (empty_c2)]
+    'c'  [reduce using rule 13 (empty_c3)]
+
+    start     go to state 1
+    empty_a   go to state 2
+    empty_b   go to state 3
+    empty_c1  go to state 4
+    empty_c2  go to state 5
+    empty_c3  go to state 6
+
+    Conflict between rule 9 and token 'a' resolved as an error (%nonassoc 'a').
+    Conflict between rule 10 and token 'b' resolved as an error (%nonassoc 'b').
+    Conflict between rule 11 and token 'c' resolved as an error (%nonassoc 'c').
+
+
+State 1
+]])
+AT_CLEANUP
+
+
+## --------------------------------- ##
+## -W versus %expect and %expect-rr  ##
+## --------------------------------- ##
+
+AT_SETUP([[-W versus %expect and %expect-rr]])
+
+AT_DATA([[sr-rr.y]],
+[[%glr-parser
+%%
+start: 'a' | A 'a' | B 'a' ;
+A: ;
+B: ;
+]])
+AT_DATA([[sr.y]],
+[[%glr-parser
+%%
+start: 'a' | A 'a' ;
+A: ;
+]])
+AT_DATA([[rr.y]],
+[[%glr-parser
+%%
+start: A | B ;
+A: ;
+B: ;
+]])
+
+AT_BISON_CHECK([[sr-rr.y]], [[0]], [[]],
+[[sr-rr.y: conflicts: 1 shift/reduce, 1 reduce/reduce
+]])
+AT_BISON_CHECK([[-Wno-conflicts-sr sr-rr.y]], [[0]], [[]],
+[[sr-rr.y: conflicts: 1 reduce/reduce
+]])
+AT_BISON_CHECK([[-Wno-conflicts-rr sr-rr.y]], [[0]], [[]],
+[[sr-rr.y: conflicts: 1 shift/reduce
+]])
+
+[for gram in sr-rr sr rr; do
+  for sr_exp_i in '' 0 1 2; do
+    for rr_exp_i in '' 0 1 2; do
+      test -z "$sr_exp_i" && test -z "$rr_exp_i" && continue
+
+      # Build grammar file.
+      sr_exp=0
+      rr_exp=0
+      file=$gram
+      directives=
+      if test -n "$sr_exp_i"; then
+        sr_exp=$sr_exp_i
+        file=$file-expect-$sr_exp
+        directives="%expect $sr_exp"
+      fi
+      if test -n "$rr_exp_i"; then
+        rr_exp=$rr_exp_i
+        file=$file-expect-rr-$rr_exp
+        directives="$directives %expect-rr $rr_exp"
+      fi
+      file=$file.y
+      echo "$directives" > $file
+      cat $gram.y >> $file
+
+      # Count actual conflicts.
+      conflicts=
+      sr_count=0
+      rr_count=0
+      if test $gram = sr || test $gram = sr-rr; then
+        conflicts="1 shift/reduce"
+        sr_count=1
+      fi
+      if test $gram = rr || test $gram = sr-rr; then
+        if test -n "$conflicts"; then
+          conflicts="$conflicts, "
+        fi
+        conflicts="${conflicts}1 reduce/reduce"
+        rr_count=1
+      fi
+
+      # Run tests.
+      if test $sr_count -eq $sr_exp && test $rr_count -eq $rr_exp; then
+        ]AT_BISON_CHECK([[-Wnone $file]])[
+        ]AT_BISON_CHECK([[-Werror $file]])[
+      else
+        echo "$file: conflicts: $conflicts" > experr
+        if test $sr_count -ne $sr_exp; then
+          if test $sr_exp -ne 1; then s=s; else s= ; fi
+          echo "$file: error: expected $sr_exp shift/reduce conflict$s" >> experr
+        fi
+        if test $rr_count -ne $rr_exp; then
+          if test $rr_exp -ne 1; then s=s; else s= ; fi
+          echo "$file: error: expected $rr_exp reduce/reduce conflict$s" >> experr
+        fi
+        ]AT_BISON_CHECK([[-Wnone $file]], [[1]], [[]], [[experr]])[
+        ]AT_BISON_CHECK([[-Werror $file]], [[1]], [[]], [[experr]])[
+      fi
+    done
+  done
+done]
+
 AT_CLEANUP
diff --git a/tests/cxx-type.at b/tests/cxx-type.at
index b716a1d..b0e5fdc 100644
--- a/tests/cxx-type.at
+++ b/tests/cxx-type.at
@@ -1,20 +1,19 @@
 # Checking GLR Parsing.                         -*- Autotest -*-
-# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2002-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[C++ Type Syntax (GLR).]])
 
@@ -24,15 +23,15 @@
 # and with RESOLVE1 and RESOLVE2 as annotations on the conflicted rule for
 # stmt.  Then compile the result.
 m4_define([_AT_TEST_GLR_CXXTYPES],
-[
-AT_BISON_OPTION_PUSHDEFS([$1])
+[AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 
 AT_DATA_GRAMMAR([types.y],
 [[/* Simplified C++ Type and Expression Grammar.  */
 
 $1
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -52,33 +51,22 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
 ]m4_bmatch([$2], [stmtMerge],
 [ static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);])[
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
 
 %token TYPENAME ID
 
@@ -93,35 +81,35 @@
 
 prog :
      | prog stmt   {
-			char *output;]AT_LOCATION_IF([
-			printf ("%d.%d-%d.%d: ",
-			     @2.first_line, @2.first_column,
-			     @2.last_line, @2.last_column);])[
-			output = node_to_string (]$[2);
-			printf ("%s\n", output);
-			free (output);
-			free_node (]$[2);
-		   }
+                        char *output;]AT_LOCATION_IF([
+                        printf ("%d.%d-%d.%d: ",
+                             @2.first_line, @2.first_column,
+                             @2.last_line, @2.last_column);])[
+                        output = node_to_string (]$[2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node (]$[2);
+                   }
      ;
 
-stmt : expr ';'  $2	{ $$ = ]$[1; }
+stmt : expr ';'  $2     { $$ = ]$[1; }
      | decl      $3
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", ]$[3, ]$[1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", ]$[1, ]$[3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", ]$[1, ]$[3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", ]$[3, ]$[1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", ]$[1, ]$[3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", ]$[1, ]$[3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", ]$[1, ]$[2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", ]$[1, ]$[2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", ]$[1,
-					  ]$[2, ]$[4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", ]$[1,
+                                          ]$[2, ]$[4); }
      ;
 
 declarator : ID
@@ -134,19 +122,20 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+]AT_YYERROR_DEFINE[
+
+]AT_YYLEX_PROTOTYPE[
 {
   char buffer[256];
   int c;
@@ -163,73 +152,58 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;]AT_LOCATION_IF([[
+            yylloc.first_line = yylloc.last_line = lineNum;
+            yylloc.first_column = colNum;]])[
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }]AT_LOCATION_IF([[
+            yylloc.last_column = colNum-1;]])[
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -297,7 +271,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -313,7 +287,7 @@
 [[static YYSTYPE
 stmtMerge (YYSTYPE x0, YYSTYPE x1)
 {
-  return new_nterm ("<OR>(%s,%s)", x0, x1, 0);
+  return new_nterm ("<OR>(%s,%s)", x0, x1, YY_NULL);
 }
 ]])
 )
@@ -344,7 +318,7 @@
 This is total garbage, but it should be ignored.
 ]])
 
-AT_CHECK([bison -o types.c types.y], 0, [], ignore)
+AT_BISON_CHECK([-o types.c types.y], 0, [], ignore)
 AT_COMPILE([types])
 AT_BISON_OPTION_POPDEFS
 ])
@@ -401,71 +375,79 @@
 [[syntax error
 ]])
 
+m4_define([_AT_GLR_STDERR_WITH_LOC],
+[[17.5: syntax error
+]])
+
 m4_define([_AT_VERBOSE_GLR_STDERR],
 [[syntax error, unexpected ID, expecting '=' or '+' or ')'
 ]])
 
+m4_define([_AT_VERBOSE_GLR_STDERR_WITH_LOC],
+[[17.5: syntax error, unexpected ID, expecting '=' or '+' or ')'
+]])
+
 ## ---------------------------------------------------- ##
 ## Compile the grammar described in the documentation.  ##
 ## ---------------------------------------------------- ##
 
 AT_SETUP([GLR: Resolve ambiguity, impure, no locations])
 _AT_TEST_GLR_CXXTYPES([],
-		      [%dprec 1], [%dprec 2])
+                      [%dprec 1], [%dprec 2])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR)
+                [_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR])
 AT_CLEANUP
 
 AT_SETUP([GLR: Resolve ambiguity, impure, locations])
 _AT_TEST_GLR_CXXTYPES([%locations],[%dprec 1],[%dprec 2])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
+                [_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
 AT_CLEANUP
 
 AT_SETUP([GLR: Resolve ambiguity, pure, no locations])
-_AT_TEST_GLR_CXXTYPES([%pure-parser],
-		      [%dprec 1], [%dprec 2])
+_AT_TEST_GLR_CXXTYPES([%define api.pure],
+                      [%dprec 1], [%dprec 2])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR)
+                [_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR])
 AT_CLEANUP
 
 AT_SETUP([GLR: Resolve ambiguity, pure, locations])
-_AT_TEST_GLR_CXXTYPES([%pure-parser %locations],
-		      [%dprec 1], [%dprec 2])
+_AT_TEST_GLR_CXXTYPES([%define api.pure %locations],
+                      [%dprec 1], [%dprec 2])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
+                [_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
 AT_CLEANUP
 
 AT_SETUP([GLR: Merge conflicting parses, impure, no locations])
 _AT_TEST_GLR_CXXTYPES([],
-		      [%merge <stmtMerge>], [%merge <stmtMerge>])
+                      [%merge <stmtMerge>], [%merge <stmtMerge>])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR)
+                [_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR])
 AT_CLEANUP
 
 AT_SETUP([GLR: Merge conflicting parses, impure, locations])
 _AT_TEST_GLR_CXXTYPES([%locations],
-		      [%merge <stmtMerge>], [%merge <stmtMerge>])
+                      [%merge <stmtMerge>], [%merge <stmtMerge>])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
+                [_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
 AT_CLEANUP
 
 AT_SETUP([GLR: Merge conflicting parses, pure, no locations])
-_AT_TEST_GLR_CXXTYPES([%pure-parser],
-		      [%merge <stmtMerge>], [%merge <stmtMerge>])
+_AT_TEST_GLR_CXXTYPES([%define api.pure],
+                      [%merge <stmtMerge>], [%merge <stmtMerge>])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR)
+                [_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR])
 AT_CLEANUP
 AT_SETUP([GLR: Merge conflicting parses, pure, locations])
-_AT_TEST_GLR_CXXTYPES([%pure-parser %locations],
-		      [%merge <stmtMerge>],[%merge <stmtMerge>])
+_AT_TEST_GLR_CXXTYPES([%define api.pure %locations],
+                      [%merge <stmtMerge>],[%merge <stmtMerge>])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
+                [_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
 AT_CLEANUP
 
 AT_SETUP([GLR: Verbose messages, resolve ambiguity, impure, no locations])
 _AT_TEST_GLR_CXXTYPES([%error-verbose],
-		      [%merge <stmtMerge>], [%merge <stmtMerge>])
+                      [%merge <stmtMerge>], [%merge <stmtMerge>])
 AT_PARSER_CHECK([[./types test-input]], 0,
-		_AT_AMBIG_GLR_OUTPUT, _AT_VERBOSE_GLR_STDERR)
+                [_AT_AMBIG_GLR_OUTPUT], [_AT_VERBOSE_GLR_STDERR])
 AT_CLEANUP
diff --git a/tests/existing.at b/tests/existing.at
index 9db625a..1b6fa4d 100644
--- a/tests/existing.at
+++ b/tests/existing.at
@@ -1,39 +1,83 @@
 # Exercising Bison on actual grammars.                   -*- Autotest -*-
 
-# Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
+# Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2012 Free Software
+# Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[Existing Grammars.]])
-## ----------------- ##
-## GNU AWK Grammar.  ##
-## ----------------- ##
 
-AT_SETUP([GNU AWK Grammar])
+# AT_TEST_EXISTING_GRAMMAR(DESCRIPTION,
+#                          DECLS, GRAMMAR, INPUT,
+#                          BISON-STDERR, LAST-STATE, LALR1-DIFF,
+#                          [OTHER-CHECKS],
+#                          [PARSER-EXIT-VALUE],
+#                          [PARSER-STDOUT], [PARSER-STDERR])
+# --------------------------------------------------------------
+m4_define([AT_TEST_EXISTING_GRAMMAR], [_AT_TEST_EXISTING_GRAMMAR([$][1], $@)])
+
+m4_define([_AT_TEST_EXISTING_GRAMMAR],
+[
+dnl See how the parser tables have changed.  As the .output format evolves, the
+dnl diff comments with line numbers might be a pain to maintain.  When that
+dnl time comes, just use sed to drop the line numbers.  For now, as LR(1)
+dnl support is rapidly evolving, let's keep that information to be careful.
+dnl However, we don't do diffs for canonical LR(1) because the diff is huge.
+m4_pushdef([AT_LALR1_DIFF_CHECK],
+[dnl We need diff -u, which is not portable.
+AT_CHECK([diff -u /dev/null /dev/null || exit 77], [0], [ignore])
+
+AT_CHECK([[sed 's/^%define lr.type .*$//' input.y > input-lalr.y]])
+AT_BISON_CHECK([[--report=all input-lalr.y]], [[0]], [ignore], [ignore])
+AT_CHECK([[diff -u input-lalr.output input.output \
+           | sed -n '/^@@/,$p' | sed 's/^ $//']],
+         [[0]], [$1])])
+
+AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]],
+                         [[%define lr.type lalr
+]$3],
+                         [$4], [$5], [$6], [$7],
+                         [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
+AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]],
+                         [[%define lr.type ielr
+]$3],
+                         [$4], [$5], [$6], [$7],
+                         [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
+AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]],
+                         [[last-state,no-xml]],
+                         [[%define lr.type canonical-lr
+]$3],
+                         [$4], [$5], [$6], [$7],
+                         [$9], [$10], [$11], [$12])
+
+m4_popdef([AT_LALR1_DIFF_CHECK])
+])
+
+
+
+## ----------------------- ##
+## GNU AWK 3.1.0 Grammar.  ##
+## ----------------------- ##
 
 # We have been careful to strip all the actions excepts the
-# mid-rule actions.  We rely on %expect to check that there are
-# indeed 65 SR conflicts.
+# mid-rule actions.
 #
-# Bison was once wrong, due to an incorrect computation of nullable.
-# It reported 485 SR conflicts!
+# There are 65 SR conflicts.  Bison was once wrong, due to an incorrect
+# computation of nullable.  It reported 485 SR conflicts!
 
-AT_DATA([[input.y]],
-[[%expect 65
+AT_TEST_EXISTING_GRAMMAR([[GNU AWK 3.1.0 Grammar]],
+[[%error-verbose
 
 %token FUNC_CALL NAME REGEXP
 %token ERROR
@@ -68,8 +112,8 @@
 %left INCREMENT DECREMENT
 %left '$'
 %left '(' ')'
-%%
-
+]],
+[[
 start
 	: opt_nls program opt_nls
 	;
@@ -346,31 +390,398 @@
 
 comma	: ',' opt_nls
 	;
+]],
 
-%%
-]])
+dnl INPUT
+dnl
+dnl For example, in AWK:
+dnl
+dnl   getline $!4*0;
+dnl
+dnl The grammar below (from GNU AWK 3.1.0) using canonical LR(1) or IELR(1)
+dnl parses it as:
+dnl
+dnl   getline $!(4*0);
+dnl
+dnl That is, they shift `*' immediately and make it part of the getline
+dnl argument.
+dnl
+dnl The grammar below using LALR(1) parses it as a syntax error.  So does
+dnl GNU AWK 3.0.6, 3.1.0, and 3.1.1.  They reduce the full getline expression
+dnl before shifting `*' even though `*' is not a valid lookahead.
+dnl
+dnl GNU AWK 3.1.2, 3.1.3, 3.1.4, and 3.1.5 parse it as:
+dnl
+dnl   (getline $!4)*0;
+dnl
+dnl That is, like the other versions of GNU AWK, they reduce the full getline
+dnl expression before shifting `*'.  However, because of a different LHS on the
+dnl getline rule, `*' actually is a valid lookahead.  Solaris /usr/xpg4/bin/awk
+dnl and the Open Group awk specification seem to agree:
+dnl
+dnl   http://www.opengroup.org/pubs/online/7908799/xcu/awk.html
+dnl
+dnl /bin/nawk and /bin/awk on Solaris 10 report it as a syntax error, but they
+dnl don't like even `print $!4;'.
+[[LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';']],
 
-# Pass plenty of options, to exercise plenty of code, even if we
-# don't actually check the output.  But SEGV is watching us, and
-# so might do dmalloc.
-AT_CHECK([[bison --verbose --defines input.y]])
+dnl BISON-STDERR
+[AT_COND_CASE([[canonical LR]],
+[[input.y: conflicts: 265 shift/reduce]],
+[[input.y: conflicts: 65 shift/reduce]])[
+]],
 
-AT_CLEANUP
+dnl LAST-STATE
+[AT_COND_CASE([[LALR]], [[319]], [[canonical LR]], [[2358]], [[328]])],
+
+dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
+dnl Isocore map from LALR(1) state number to new state number plus descriptions
+dnl of any change in the actions resulting in a change in accepted language:
+dnl   - 24 -> 320
+dnl   - 16 -> 321
+dnl   - 17 -> 322
+dnl   - 20 -> 323
+dnl   - 21 -> 324
+dnl   - 54 -> 325
+dnl   - 56 -> 326: reduce -> shift on '*', '/', and '%'
+dnl   - 58 -> 327: reduce -> shift on '*', '/', and '%'
+dnl   - 61 -> 328: reduce -> shift on '*', '/', and '%'
+[AT_COND_CASE([[LALR]], [],
+[[@@ -712,7 +712,7 @@
+   156         | . '$' non_post_simp_exp
+
+     NAME  shift, and go to state 9
+-    '$'   shift, and go to state 24
++    '$'   shift, and go to state 320
+
+     NAME      [reduce using rule 152 (opt_variable)]
+     '$'       [reduce using rule 152 (opt_variable)]
+@@ -5379,7 +5379,7 @@
+   156         | . '$' non_post_simp_exp
+
+     NAME  shift, and go to state 9
+-    '$'   shift, and go to state 24
++    '$'   shift, and go to state 320
+
+     NAME      [reduce using rule 152 (opt_variable)]
+     '$'       [reduce using rule 152 (opt_variable)]
+@@ -5399,7 +5399,7 @@
+   156         | . '$' non_post_simp_exp
+
+     NAME  shift, and go to state 9
+-    '$'   shift, and go to state 24
++    '$'   shift, and go to state 320
+
+     NAME      [reduce using rule 152 (opt_variable)]
+     '$'       [reduce using rule 152 (opt_variable)]
+@@ -6214,7 +6214,7 @@
+   156         | . '$' non_post_simp_exp
+
+     NAME  shift, and go to state 9
+-    '$'   shift, and go to state 24
++    '$'   shift, and go to state 320
+
+     NAME      [reduce using rule 152 (opt_variable)]
+     '$'       [reduce using rule 152 (opt_variable)]
+@@ -11099,3 +11099,274 @@
+    45 statement: LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement .
+
+     $default  reduce using rule 45 (statement)
++
++
++State 320
++
++  139 non_post_simp_exp: . '!' simp_exp
++  140                  | . '(' exp r_paren
++  141                  | . LEX_BUILTIN '(' opt_expression_list r_paren
++  142                  | . LEX_LENGTH '(' opt_expression_list r_paren
++  143                  | . LEX_LENGTH
++  144                  | . FUNC_CALL '(' opt_expression_list r_paren
++  145                  | . variable
++  146                  | . INCREMENT variable
++  147                  | . DECREMENT variable
++  148                  | . YNUMBER
++  149                  | . YSTRING
++  150                  | . '-' simp_exp
++  151                  | . '+' simp_exp
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '$' non_post_simp_exp
++  156         | '$' . non_post_simp_exp
++
++    FUNC_CALL    shift, and go to state 8
++    NAME         shift, and go to state 9
++    YNUMBER      shift, and go to state 10
++    YSTRING      shift, and go to state 11
++    INCREMENT    shift, and go to state 321
++    DECREMENT    shift, and go to state 322
++    LEX_BUILTIN  shift, and go to state 18
++    LEX_LENGTH   shift, and go to state 19
++    '+'          shift, and go to state 323
++    '-'          shift, and go to state 324
++    '!'          shift, and go to state 325
++    '$'          shift, and go to state 320
++    '('          shift, and go to state 55
++
++    non_post_simp_exp  go to state 62
++    variable           go to state 63
++
++
++State 321
++
++  146 non_post_simp_exp: INCREMENT . variable
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '$' non_post_simp_exp
++
++    NAME  shift, and go to state 9
++    '$'   shift, and go to state 320
++
++    variable  go to state 50
++
++
++State 322
++
++  147 non_post_simp_exp: DECREMENT . variable
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '$' non_post_simp_exp
++
++    NAME  shift, and go to state 9
++    '$'   shift, and go to state 320
++
++    variable  go to state 51
++
++
++State 323
++
++  130 simp_exp: . non_post_simp_exp
++  131         | . simp_exp '^' simp_exp
++  132         | . simp_exp '*' simp_exp
++  133         | . simp_exp '/' simp_exp
++  134         | . simp_exp '%' simp_exp
++  135         | . simp_exp '+' simp_exp
++  136         | . simp_exp '-' simp_exp
++  137         | . variable INCREMENT
++  138         | . variable DECREMENT
++  139 non_post_simp_exp: . '!' simp_exp
++  140                  | . '(' exp r_paren
++  141                  | . LEX_BUILTIN '(' opt_expression_list r_paren
++  142                  | . LEX_LENGTH '(' opt_expression_list r_paren
++  143                  | . LEX_LENGTH
++  144                  | . FUNC_CALL '(' opt_expression_list r_paren
++  145                  | . variable
++  146                  | . INCREMENT variable
++  147                  | . DECREMENT variable
++  148                  | . YNUMBER
++  149                  | . YSTRING
++  150                  | . '-' simp_exp
++  151                  | . '+' simp_exp
++  151                  | '+' . simp_exp
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '$' non_post_simp_exp
++
++    FUNC_CALL    shift, and go to state 8
++    NAME         shift, and go to state 9
++    YNUMBER      shift, and go to state 10
++    YSTRING      shift, and go to state 11
++    INCREMENT    shift, and go to state 16
++    DECREMENT    shift, and go to state 17
++    LEX_BUILTIN  shift, and go to state 18
++    LEX_LENGTH   shift, and go to state 19
++    '+'          shift, and go to state 20
++    '-'          shift, and go to state 21
++    '!'          shift, and go to state 54
++    '$'          shift, and go to state 24
++    '('          shift, and go to state 55
++
++    simp_exp           go to state 326
++    non_post_simp_exp  go to state 35
++    variable           go to state 57
++
++
++State 324
++
++  130 simp_exp: . non_post_simp_exp
++  131         | . simp_exp '^' simp_exp
++  132         | . simp_exp '*' simp_exp
++  133         | . simp_exp '/' simp_exp
++  134         | . simp_exp '%' simp_exp
++  135         | . simp_exp '+' simp_exp
++  136         | . simp_exp '-' simp_exp
++  137         | . variable INCREMENT
++  138         | . variable DECREMENT
++  139 non_post_simp_exp: . '!' simp_exp
++  140                  | . '(' exp r_paren
++  141                  | . LEX_BUILTIN '(' opt_expression_list r_paren
++  142                  | . LEX_LENGTH '(' opt_expression_list r_paren
++  143                  | . LEX_LENGTH
++  144                  | . FUNC_CALL '(' opt_expression_list r_paren
++  145                  | . variable
++  146                  | . INCREMENT variable
++  147                  | . DECREMENT variable
++  148                  | . YNUMBER
++  149                  | . YSTRING
++  150                  | . '-' simp_exp
++  150                  | '-' . simp_exp
++  151                  | . '+' simp_exp
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '$' non_post_simp_exp
++
++    FUNC_CALL    shift, and go to state 8
++    NAME         shift, and go to state 9
++    YNUMBER      shift, and go to state 10
++    YSTRING      shift, and go to state 11
++    INCREMENT    shift, and go to state 16
++    DECREMENT    shift, and go to state 17
++    LEX_BUILTIN  shift, and go to state 18
++    LEX_LENGTH   shift, and go to state 19
++    '+'          shift, and go to state 20
++    '-'          shift, and go to state 21
++    '!'          shift, and go to state 54
++    '$'          shift, and go to state 24
++    '('          shift, and go to state 55
++
++    simp_exp           go to state 327
++    non_post_simp_exp  go to state 35
++    variable           go to state 57
++
++
++State 325
++
++  130 simp_exp: . non_post_simp_exp
++  131         | . simp_exp '^' simp_exp
++  132         | . simp_exp '*' simp_exp
++  133         | . simp_exp '/' simp_exp
++  134         | . simp_exp '%' simp_exp
++  135         | . simp_exp '+' simp_exp
++  136         | . simp_exp '-' simp_exp
++  137         | . variable INCREMENT
++  138         | . variable DECREMENT
++  139 non_post_simp_exp: . '!' simp_exp
++  139                  | '!' . simp_exp
++  140                  | . '(' exp r_paren
++  141                  | . LEX_BUILTIN '(' opt_expression_list r_paren
++  142                  | . LEX_LENGTH '(' opt_expression_list r_paren
++  143                  | . LEX_LENGTH
++  144                  | . FUNC_CALL '(' opt_expression_list r_paren
++  145                  | . variable
++  146                  | . INCREMENT variable
++  147                  | . DECREMENT variable
++  148                  | . YNUMBER
++  149                  | . YSTRING
++  150                  | . '-' simp_exp
++  151                  | . '+' simp_exp
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '$' non_post_simp_exp
++
++    FUNC_CALL    shift, and go to state 8
++    NAME         shift, and go to state 9
++    YNUMBER      shift, and go to state 10
++    YSTRING      shift, and go to state 11
++    INCREMENT    shift, and go to state 16
++    DECREMENT    shift, and go to state 17
++    LEX_BUILTIN  shift, and go to state 18
++    LEX_LENGTH   shift, and go to state 19
++    '+'          shift, and go to state 20
++    '-'          shift, and go to state 21
++    '!'          shift, and go to state 54
++    '$'          shift, and go to state 24
++    '('          shift, and go to state 55
++
++    simp_exp           go to state 328
++    non_post_simp_exp  go to state 35
++    variable           go to state 57
++
++
++State 326
++
++  131 simp_exp: simp_exp . '^' simp_exp
++  132         | simp_exp . '*' simp_exp
++  133         | simp_exp . '/' simp_exp
++  134         | simp_exp . '%' simp_exp
++  135         | simp_exp . '+' simp_exp
++  136         | simp_exp . '-' simp_exp
++  151 non_post_simp_exp: '+' simp_exp .  [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
++
++    '*'  shift, and go to state 89
++    '/'  shift, and go to state 90
++    '%'  shift, and go to state 91
++    '^'  shift, and go to state 92
++
++    $default  reduce using rule 151 (non_post_simp_exp)
++
++    Conflict between rule 151 and token '+' resolved as reduce ('+' < UNARY).
++    Conflict between rule 151 and token '-' resolved as reduce ('-' < UNARY).
++
++
++State 327
++
++  131 simp_exp: simp_exp . '^' simp_exp
++  132         | simp_exp . '*' simp_exp
++  133         | simp_exp . '/' simp_exp
++  134         | simp_exp . '%' simp_exp
++  135         | simp_exp . '+' simp_exp
++  136         | simp_exp . '-' simp_exp
++  150 non_post_simp_exp: '-' simp_exp .  [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
++
++    '*'  shift, and go to state 89
++    '/'  shift, and go to state 90
++    '%'  shift, and go to state 91
++    '^'  shift, and go to state 92
++
++    $default  reduce using rule 150 (non_post_simp_exp)
++
++    Conflict between rule 150 and token '+' resolved as reduce ('+' < UNARY).
++    Conflict between rule 150 and token '-' resolved as reduce ('-' < UNARY).
++
++
++State 328
++
++  131 simp_exp: simp_exp . '^' simp_exp
++  132         | simp_exp . '*' simp_exp
++  133         | simp_exp . '/' simp_exp
++  134         | simp_exp . '%' simp_exp
++  135         | simp_exp . '+' simp_exp
++  136         | simp_exp . '-' simp_exp
++  139 non_post_simp_exp: '!' simp_exp .  [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '$', '(', ')', '@:>@', '{', ';']
++
++    '*'  shift, and go to state 89
++    '/'  shift, and go to state 90
++    '%'  shift, and go to state 91
++    '^'  shift, and go to state 92
++
++    $default  reduce using rule 139 (non_post_simp_exp)
++
++    Conflict between rule 139 and token '+' resolved as reduce ('+' < UNARY).
++    Conflict between rule 139 and token '-' resolved as reduce ('-' < UNARY).
+]])],
+
+dnl OTHER-CHECKS
+[],
+
+dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
+dnl In the case of the syntax error, the parser recovers, so it returns 0.
+[[0]],
+[],
+[AT_COND_CASE([[LALR]],
+[[syntax error, unexpected '*', expecting NEWLINE or '{' or ';'
+]])])
 
 ## ----------------- ##
 ## GNU Cim Grammar.  ##
 ## ----------------- ##
 
-AT_SETUP([GNU Cim Grammar])
-
 # GNU Cim, the GNU Simula 87 Compiler.
 
 # Bison was once wrong, due to an incorrect computation of the RR conflicts.
 # It reported 80 SR && 99 RR conflicts instead of 78/10!!!
 
-AT_DATA([[input.y]],
-[[%union {}
-
+AT_TEST_EXISTING_GRAMMAR([[GNU Cim Grammar]],
+[[
 %token
 	HACTIVATE HAFTER /*HAND*/ HARRAY HAT
 	HBEFORE HBEGIN HBOOLEAN
@@ -430,7 +841,8 @@
 %left   HDOT
 
 %start  MAIN_MODULE
-%%
+]],
+[[
 /* GRAMATIKK FOR PROGRAM MODULES */
 MAIN_MODULE     :       {}
 			MODULS
@@ -949,17 +1361,26 @@
 			HPAREXPSEPARATOR
 			ARGUMENT_LIST
 		;
-%%
-]])
+]],
 
-# Pass plenty of options, to exercise plenty of code, even if we
-# don't actually check the output.  But SEGV is watching us, and
-# so might do dmalloc.
-AT_CHECK([[bison --verbose --defines input.y]], 0, [],
-[[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce
-]])
+dnl INPUT
+[[]],
 
-AT_CHECK([[grep '^State.*conflicts:' input.output]], 0,
+dnl BISON-STDERR
+[AT_COND_CASE([[canonical LR]],
+[[input.y: conflicts: 1876 shift/reduce, 144 reduce/reduce]],
+[[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce]])[
+]],
+
+dnl LAST-STATE
+[AT_COND_CASE([[canonical LR]], [[10425]], [[442]])],
+
+dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
+[],
+
+dnl OTHER-CHECKS
+[AT_COND_CASE([[canonical LR]], [[]],
+[AT_CHECK([[grep '^State.*conflicts:' input.output]], [[0]],
 [[State 64 conflicts: 14 shift/reduce
 State 164 conflicts: 1 shift/reduce
 State 201 conflicts: 33 shift/reduce, 4 reduce/reduce
@@ -969,22 +1390,18 @@
 State 356 conflicts: 1 shift/reduce
 State 360 conflicts: 9 shift/reduce, 2 reduce/reduce
 State 427 conflicts: 9 shift/reduce, 2 reduce/reduce
-]])
+]])])])
 
-AT_CLEANUP
-
-## ----------------- ##
-## GNU pic Grammar.  ##
-## ----------------- ##
-
-AT_SETUP([GNU pic Grammar])
+## -------------------------------- ##
+## GNU pic (Groff 1.18.1) Grammar.  ##
+## -------------------------------- ##
 
 # GNU pic, part of groff.
 
 # Bison once reported shift/reduce conflicts that it shouldn't have.
 
-AT_DATA([[input.y]],
-[[%union {}
+AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]],
+[[%error-verbose
 
 %token LABEL
 %token VARIABLE
@@ -1064,7 +1481,7 @@
 %token RAND
 %token SRAND
 %token COPY
-%token THRU
+%token THROUGH
 %token TOP
 %token BOTTOM
 %token UPPER
@@ -1150,9 +1567,8 @@
 %left '*' '/' '%'
 %right '!'
 %right '^'
-
-%%
-
+]],
+[[
 top:
 	optional_separator
 	| element_list
@@ -1191,12 +1607,12 @@
 		{}
 	  DELIMITED
 	| COPY TEXT
-	| COPY TEXT THRU
+	| COPY TEXT THROUGH
 		{}
 	  DELIMITED
 		{}
 	  until
-	| COPY THRU
+	| COPY THROUGH
 		{}
 	  DELIMITED
 		{}
@@ -1268,7 +1684,7 @@
 	| LABEL ':' optional_separator element
 	| LABEL ':' optional_separator position_not_place
 	| LABEL ':' optional_separator place
-	| '{}'
+	| '{' {} element_list '}'
 		{}
 	  optional_element
 	| placeless_element
@@ -1515,11 +1931,1189 @@
 	| expr OROR expr
 	| '!' expr
 	;
-]])
+]],
 
-# Pass plenty of options, to exercise plenty of code, even if we
-# don't actually check the output.  But SEGV is watching us, and
-# so might do dmalloc.
-AT_CHECK([[bison --verbose --defines input.y]], 0, [], [])
+dnl INPUT
+dnl
+dnl For example, in pic:
+dnl
+dnl   .PS
+dnl   A: circle "A"
+dnl   B: A left
+dnl   circle "B" at B
+dnl   .PE
+dnl
+dnl Even using groff 1.19.2, the 3rd line above is a syntax error.  Change
+dnl "left" to "right", and it still is.  However, add "upper" or "lower" before
+dnl "left or "right" and it's accepted to mean ".nw", ".ne", ".sw", or ".se".
+dnl (There seem to be no aliases for "north" and "south" that can stand alone
+dnl without being followed by "of".)
+[[VARIABLE, '=', LABEL, LEFT, DOT_X]],
 
-AT_CLEANUP
+dnl BISON-STDERR
+[[input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
+]],
+
+dnl LAST-STATE
+[AT_COND_CASE([[LALR]], [[422]], [[canonical LR]], [[4833]], [[427]])],
+
+dnl LALR1-DIFF not used for canonical LR(1) because the diff is huge.
+dnl Isocore map from LALR(1) state number to new state number plus descriptions
+dnl of any change in the actions resulting in a change in accepted language:
+dnl   - 102 -> 423: reduce -> shift on LEFT and RIGHT
+dnl   - 237 -> 425
+dnl   - 266 -> 424
+dnl   - 339 -> 426
+dnl   - 383 -> 427
+[AT_COND_CASE([[LALR]], [],
+[[@@ -1223,7 +1223,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -1377,7 +1377,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -1854,7 +1854,7 @@
+
+     text                   go to state 162
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -2047,7 +2047,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -2571,7 +2571,7 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 191
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -2732,7 +2732,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -2875,7 +2875,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -3018,7 +3018,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -3256,7 +3256,7 @@
+
+ State 102
+
+-  146 place: label .  [$end, LABEL, VARIABLE, NUMBER, TEXT, ORDINAL, LEFT_ARROW_HEAD, RIGHT_ARROW_HEAD, DOUBLE_ARROW_HEAD, LAST, UP, DOWN, LEFT, RIGHT, HEIGHT, RADIUS, WIDTH, DIAMETER, FROM, TO, AT, WITH, BY, THEN, SOLID, DOTTED, DASHED, CHOP, SAME, INVISIBLE, LJUST, RJUST, ABOVE, BELOW, AND, HERE, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, SIN, COS, ATAN2, LOG, EXP, SQRT, K_MAX, K_MIN, INT, RAND, SRAND, CW, CCW, THICKNESS, FILL, COLORED, OUTLINED, SHADED, ALIGNED, SPRINTF, '(', '`', ',', '>', '+', '-', '!', ';', '}', '@:>@', ')']
++  146 place: label .  [$end, LABEL, VARIABLE, NUMBER, TEXT, ORDINAL, LEFT_ARROW_HEAD, RIGHT_ARROW_HEAD, DOUBLE_ARROW_HEAD, LAST, UP, DOWN, LEFT, RIGHT, HEIGHT, RADIUS, WIDTH, DIAMETER, FROM, TO, AT, WITH, BY, THEN, SOLID, DOTTED, DASHED, CHOP, SAME, INVISIBLE, LJUST, RJUST, ABOVE, BELOW, HERE, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, SIN, COS, ATAN2, LOG, EXP, SQRT, K_MAX, K_MIN, INT, RAND, SRAND, CW, CCW, THICKNESS, FILL, COLORED, OUTLINED, SHADED, ALIGNED, SPRINTF, '(', '`', '+', '-', '!', ';', '}', '@:>@']
+   147      | label . corner
+   153 label: label . '.' LABEL
+   180 corner: . DOT_N
+@@ -3645,7 +3645,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -3804,7 +3804,7 @@
+     text_expr              go to state 239
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -4481,7 +4481,7 @@
+     $default  reduce using rule 89 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -4673,7 +4673,7 @@
+     $default  reduce using rule 91 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -4867,7 +4867,7 @@
+     $default  reduce using rule 95 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5065,7 +5065,7 @@
+     $default  reduce using rule 93 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5260,7 +5260,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5403,7 +5403,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5546,7 +5546,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5689,7 +5689,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -6475,7 +6475,7 @@
+
+     expr_pair              go to state 280
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -6633,7 +6633,7 @@
+     $default  reduce using rule 105 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -6825,7 +6825,7 @@
+     $default  reduce using rule 107 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -7017,7 +7017,7 @@
+     $default  reduce using rule 114 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -7264,7 +7264,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -7408,7 +7408,7 @@
+     $default  reduce using rule 109 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -7819,12 +7819,12 @@
+     position_not_place     go to state 296
+     expr_pair              go to state 100
+     place                  go to state 297
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+     corner                 go to state 106
+-    expr                   go to state 266
++    expr                   go to state 424
+
+
+ State 165
+@@ -7987,7 +7987,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8172,7 +8172,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8333,7 +8333,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8494,7 +8494,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8655,7 +8655,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8816,7 +8816,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8977,7 +8977,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9138,7 +9138,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9299,7 +9299,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9460,7 +9460,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9623,7 +9623,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9784,7 +9784,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9921,7 +9921,7 @@
+
+     $default  reduce using rule 47 (any_expr)
+
+-    between  go to state 237
++    between  go to state 425
+
+
+ State 193
+@@ -10152,7 +10152,7 @@
+
+     expr_pair              go to state 317
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -10298,7 +10298,7 @@
+
+     expr_pair              go to state 318
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -10622,7 +10622,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -10765,7 +10765,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -10908,7 +10908,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11051,7 +11051,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11194,7 +11194,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11337,7 +11337,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11480,7 +11480,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11637,7 +11637,7 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 100
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11780,7 +11780,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11923,7 +11923,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12066,7 +12066,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12209,7 +12209,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12352,7 +12352,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12495,7 +12495,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12638,7 +12638,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12794,12 +12794,12 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 100
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+     corner                 go to state 106
+-    expr                   go to state 266
++    expr                   go to state 424
+
+
+ State 238
+@@ -12937,7 +12937,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13160,7 +13160,7 @@
+     text_expr              go to state 342
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13319,7 +13319,7 @@
+     text_expr              go to state 344
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13502,7 +13502,7 @@
+     text_expr              go to state 348
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13661,7 +13661,7 @@
+     text_expr              go to state 350
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13804,7 +13804,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -14747,7 +14747,7 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 191
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -15074,7 +15074,7 @@
+     text                   go to state 113
+     expr_pair              go to state 365
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -15693,12 +15693,12 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 100
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+     corner                 go to state 106
+-    expr                   go to state 266
++    expr                   go to state 424
+
+
+ State 315
+@@ -16124,7 +16124,7 @@
+
+     $default  reduce using rule 239 (expr)
+
+-    between  go to state 237
++    between  go to state 425
+
+     Conflict between rule 239 and token OF resolved as shift ('<' < OF).
+     Conflict between rule 239 and token BETWEEN resolved as shift ('<' < BETWEEN).
+@@ -17234,7 +17234,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -17416,7 +17416,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -17577,7 +17577,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -17772,12 +17772,12 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 100
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+     corner                 go to state 106
+-    expr                   go to state 266
++    expr                   go to state 424
+
+
+ State 383
+@@ -18071,7 +18071,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -18221,7 +18221,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -18830,7 +18830,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -18987,7 +18987,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -19089,3 +19089,440 @@
+    29 placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO $@6 DELIMITED .
+
+     $default  reduce using rule 29 (placeless_element)
++
++
++State 423
++
++  146 place: label .  [$end, AND, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, ',', '>', '+', '-', ';', '}', '@:>@', ')']
++  147      | label . corner
++  153 label: label . '.' LABEL
++  180 corner: . DOT_N
++  181       | . DOT_E
++  182       | . DOT_W
++  183       | . DOT_S
++  184       | . DOT_NE
++  185       | . DOT_SE
++  186       | . DOT_NW
++  187       | . DOT_SW
++  188       | . DOT_C
++  189       | . DOT_START
++  190       | . DOT_END
++  191       | . TOP
++  192       | . BOTTOM
++  193       | . LEFT
++  194       | . RIGHT
++  195       | . UPPER LEFT
++  196       | . LOWER LEFT
++  197       | . UPPER RIGHT
++  198       | . LOWER RIGHT
++  199       | . LEFT_CORNER
++  200       | . RIGHT_CORNER
++  201       | . UPPER LEFT_CORNER
++  202       | . LOWER LEFT_CORNER
++  203       | . UPPER RIGHT_CORNER
++  204       | . LOWER RIGHT_CORNER
++  205       | . NORTH
++  206       | . SOUTH
++  207       | . EAST
++  208       | . WEST
++  209       | . CENTER
++  210       | . START
++  211       | . END
++
++    LEFT          shift, and go to state 53
++    RIGHT         shift, and go to state 54
++    DOT_N         shift, and go to state 56
++    DOT_E         shift, and go to state 57
++    DOT_W         shift, and go to state 58
++    DOT_S         shift, and go to state 59
++    DOT_NE        shift, and go to state 60
++    DOT_SE        shift, and go to state 61
++    DOT_NW        shift, and go to state 62
++    DOT_SW        shift, and go to state 63
++    DOT_C         shift, and go to state 64
++    DOT_START     shift, and go to state 65
++    DOT_END       shift, and go to state 66
++    TOP           shift, and go to state 78
++    BOTTOM        shift, and go to state 79
++    UPPER         shift, and go to state 80
++    LOWER         shift, and go to state 81
++    LEFT_CORNER   shift, and go to state 82
++    RIGHT_CORNER  shift, and go to state 83
++    NORTH         shift, and go to state 84
++    SOUTH         shift, and go to state 85
++    EAST          shift, and go to state 86
++    WEST          shift, and go to state 87
++    CENTER        shift, and go to state 88
++    END           shift, and go to state 89
++    START         shift, and go to state 90
++    '.'           shift, and go to state 204
++
++    $default  reduce using rule 146 (place)
++
++    corner  go to state 205
++
++
++State 424
++
++  140 position_not_place: expr . between position AND position
++  141                   | expr . '<' position ',' position '>'
++  142 between: . BETWEEN
++  143        | . OF THE WAY BETWEEN
++  144 expr_pair: expr . ',' expr
++  219 expr: expr . '+' expr
++  220     | expr . '-' expr
++  221     | expr . '*' expr
++  222     | expr . '/' expr
++  223     | expr . '%' expr
++  224     | expr . '^' expr
++  239     | expr . '<' expr
++  240     | expr . LESSEQUAL expr
++  241     | expr . '>' expr
++  242     | expr . GREATEREQUAL expr
++  243     | expr . EQUALEQUAL expr
++  244     | expr . NOTEQUAL expr
++  245     | expr . ANDAND expr
++  246     | expr . OROR expr
++
++    OF            shift, and go to state 220
++    BETWEEN       shift, and go to state 221
++    ANDAND        shift, and go to state 222
++    OROR          shift, and go to state 223
++    NOTEQUAL      shift, and go to state 224
++    EQUALEQUAL    shift, and go to state 225
++    LESSEQUAL     shift, and go to state 226
++    GREATEREQUAL  shift, and go to state 227
++    ','           shift, and go to state 228
++    '<'           shift, and go to state 229
++    '>'           shift, and go to state 230
++    '+'           shift, and go to state 231
++    '-'           shift, and go to state 232
++    '*'           shift, and go to state 233
++    '/'           shift, and go to state 234
++    '%'           shift, and go to state 235
++    '^'           shift, and go to state 236
++
++    between  go to state 425
++
++
++State 425
++
++  134 position: . position_not_place
++  135         | . place
++  136 position_not_place: . expr_pair
++  137                   | . position '+' expr_pair
++  138                   | . position '-' expr_pair
++  139                   | . '(' position ',' position ')'
++  140                   | . expr between position AND position
++  140                   | expr between . position AND position
++  141                   | . expr '<' position ',' position '>'
++  144 expr_pair: . expr ',' expr
++  145          | . '(' expr_pair ')'
++  146 place: . label
++  147      | . label corner
++  148      | . corner label
++  149      | . corner OF label
++  150      | . HERE
++  151 label: . LABEL
++  152      | . nth_primitive
++  153      | . label '.' LABEL
++  154 ordinal: . ORDINAL
++  155        | . '`' any_expr TH
++  156 optional_ordinal_last: . LAST
++  157                      | . ordinal LAST
++  158 nth_primitive: . ordinal object_type
++  159              | . optional_ordinal_last object_type
++  180 corner: . DOT_N
++  181       | . DOT_E
++  182       | . DOT_W
++  183       | . DOT_S
++  184       | . DOT_NE
++  185       | . DOT_SE
++  186       | . DOT_NW
++  187       | . DOT_SW
++  188       | . DOT_C
++  189       | . DOT_START
++  190       | . DOT_END
++  191       | . TOP
++  192       | . BOTTOM
++  193       | . LEFT
++  194       | . RIGHT
++  195       | . UPPER LEFT
++  196       | . LOWER LEFT
++  197       | . UPPER RIGHT
++  198       | . LOWER RIGHT
++  199       | . LEFT_CORNER
++  200       | . RIGHT_CORNER
++  201       | . UPPER LEFT_CORNER
++  202       | . LOWER LEFT_CORNER
++  203       | . UPPER RIGHT_CORNER
++  204       | . LOWER RIGHT_CORNER
++  205       | . NORTH
++  206       | . SOUTH
++  207       | . EAST
++  208       | . WEST
++  209       | . CENTER
++  210       | . START
++  211       | . END
++  212 expr: . VARIABLE
++  213     | . NUMBER
++  214     | . place DOT_X
++  215     | . place DOT_Y
++  216     | . place DOT_HT
++  217     | . place DOT_WID
++  218     | . place DOT_RAD
++  219     | . expr '+' expr
++  220     | . expr '-' expr
++  221     | . expr '*' expr
++  222     | . expr '/' expr
++  223     | . expr '%' expr
++  224     | . expr '^' expr
++  225     | . '-' expr
++  226     | . '(' any_expr ')'
++  227     | . SIN '(' any_expr ')'
++  228     | . COS '(' any_expr ')'
++  229     | . ATAN2 '(' any_expr ',' any_expr ')'
++  230     | . LOG '(' any_expr ')'
++  231     | . EXP '(' any_expr ')'
++  232     | . SQRT '(' any_expr ')'
++  233     | . K_MAX '(' any_expr ',' any_expr ')'
++  234     | . K_MIN '(' any_expr ',' any_expr ')'
++  235     | . INT '(' any_expr ')'
++  236     | . RAND '(' any_expr ')'
++  237     | . RAND '(' ')'
++  238     | . SRAND '(' any_expr ')'
++  239     | . expr '<' expr
++  240     | . expr LESSEQUAL expr
++  241     | . expr '>' expr
++  242     | . expr GREATEREQUAL expr
++  243     | . expr EQUALEQUAL expr
++  244     | . expr NOTEQUAL expr
++  245     | . expr ANDAND expr
++  246     | . expr OROR expr
++  247     | . '!' expr
++
++    LABEL         shift, and go to state 48
++    VARIABLE      shift, and go to state 49
++    NUMBER        shift, and go to state 50
++    ORDINAL       shift, and go to state 51
++    LAST          shift, and go to state 52
++    LEFT          shift, and go to state 53
++    RIGHT         shift, and go to state 54
++    HERE          shift, and go to state 55
++    DOT_N         shift, and go to state 56
++    DOT_E         shift, and go to state 57
++    DOT_W         shift, and go to state 58
++    DOT_S         shift, and go to state 59
++    DOT_NE        shift, and go to state 60
++    DOT_SE        shift, and go to state 61
++    DOT_NW        shift, and go to state 62
++    DOT_SW        shift, and go to state 63
++    DOT_C         shift, and go to state 64
++    DOT_START     shift, and go to state 65
++    DOT_END       shift, and go to state 66
++    SIN           shift, and go to state 67
++    COS           shift, and go to state 68
++    ATAN2         shift, and go to state 69
++    LOG           shift, and go to state 70
++    EXP           shift, and go to state 71
++    SQRT          shift, and go to state 72
++    K_MAX         shift, and go to state 73
++    K_MIN         shift, and go to state 74
++    INT           shift, and go to state 75
++    RAND          shift, and go to state 76
++    SRAND         shift, and go to state 77
++    TOP           shift, and go to state 78
++    BOTTOM        shift, and go to state 79
++    UPPER         shift, and go to state 80
++    LOWER         shift, and go to state 81
++    LEFT_CORNER   shift, and go to state 82
++    RIGHT_CORNER  shift, and go to state 83
++    NORTH         shift, and go to state 84
++    SOUTH         shift, and go to state 85
++    EAST          shift, and go to state 86
++    WEST          shift, and go to state 87
++    CENTER        shift, and go to state 88
++    END           shift, and go to state 89
++    START         shift, and go to state 90
++    '('           shift, and go to state 91
++    '`'           shift, and go to state 92
++    '-'           shift, and go to state 93
++    '!'           shift, and go to state 94
++
++    position               go to state 426
++    position_not_place     go to state 99
++    expr_pair              go to state 100
++    place                  go to state 101
++    label                  go to state 423
++    ordinal                go to state 103
++    optional_ordinal_last  go to state 104
++    nth_primitive          go to state 105
++    corner                 go to state 106
++    expr                   go to state 424
++
++
++State 426
++
++  137 position_not_place: position . '+' expr_pair
++  138                   | position . '-' expr_pair
++  140                   | expr between position . AND position
++
++    AND  shift, and go to state 427
++    '+'  shift, and go to state 197
++    '-'  shift, and go to state 198
++
++
++State 427
++
++  134 position: . position_not_place
++  135         | . place
++  136 position_not_place: . expr_pair
++  137                   | . position '+' expr_pair
++  138                   | . position '-' expr_pair
++  139                   | . '(' position ',' position ')'
++  140                   | . expr between position AND position
++  140                   | expr between position AND . position
++  141                   | . expr '<' position ',' position '>'
++  144 expr_pair: . expr ',' expr
++  145          | . '(' expr_pair ')'
++  146 place: . label
++  147      | . label corner
++  148      | . corner label
++  149      | . corner OF label
++  150      | . HERE
++  151 label: . LABEL
++  152      | . nth_primitive
++  153      | . label '.' LABEL
++  154 ordinal: . ORDINAL
++  155        | . '`' any_expr TH
++  156 optional_ordinal_last: . LAST
++  157                      | . ordinal LAST
++  158 nth_primitive: . ordinal object_type
++  159              | . optional_ordinal_last object_type
++  180 corner: . DOT_N
++  181       | . DOT_E
++  182       | . DOT_W
++  183       | . DOT_S
++  184       | . DOT_NE
++  185       | . DOT_SE
++  186       | . DOT_NW
++  187       | . DOT_SW
++  188       | . DOT_C
++  189       | . DOT_START
++  190       | . DOT_END
++  191       | . TOP
++  192       | . BOTTOM
++  193       | . LEFT
++  194       | . RIGHT
++  195       | . UPPER LEFT
++  196       | . LOWER LEFT
++  197       | . UPPER RIGHT
++  198       | . LOWER RIGHT
++  199       | . LEFT_CORNER
++  200       | . RIGHT_CORNER
++  201       | . UPPER LEFT_CORNER
++  202       | . LOWER LEFT_CORNER
++  203       | . UPPER RIGHT_CORNER
++  204       | . LOWER RIGHT_CORNER
++  205       | . NORTH
++  206       | . SOUTH
++  207       | . EAST
++  208       | . WEST
++  209       | . CENTER
++  210       | . START
++  211       | . END
++  212 expr: . VARIABLE
++  213     | . NUMBER
++  214     | . place DOT_X
++  215     | . place DOT_Y
++  216     | . place DOT_HT
++  217     | . place DOT_WID
++  218     | . place DOT_RAD
++  219     | . expr '+' expr
++  220     | . expr '-' expr
++  221     | . expr '*' expr
++  222     | . expr '/' expr
++  223     | . expr '%' expr
++  224     | . expr '^' expr
++  225     | . '-' expr
++  226     | . '(' any_expr ')'
++  227     | . SIN '(' any_expr ')'
++  228     | . COS '(' any_expr ')'
++  229     | . ATAN2 '(' any_expr ',' any_expr ')'
++  230     | . LOG '(' any_expr ')'
++  231     | . EXP '(' any_expr ')'
++  232     | . SQRT '(' any_expr ')'
++  233     | . K_MAX '(' any_expr ',' any_expr ')'
++  234     | . K_MIN '(' any_expr ',' any_expr ')'
++  235     | . INT '(' any_expr ')'
++  236     | . RAND '(' any_expr ')'
++  237     | . RAND '(' ')'
++  238     | . SRAND '(' any_expr ')'
++  239     | . expr '<' expr
++  240     | . expr LESSEQUAL expr
++  241     | . expr '>' expr
++  242     | . expr GREATEREQUAL expr
++  243     | . expr EQUALEQUAL expr
++  244     | . expr NOTEQUAL expr
++  245     | . expr ANDAND expr
++  246     | . expr OROR expr
++  247     | . '!' expr
++
++    LABEL         shift, and go to state 48
++    VARIABLE      shift, and go to state 49
++    NUMBER        shift, and go to state 50
++    ORDINAL       shift, and go to state 51
++    LAST          shift, and go to state 52
++    LEFT          shift, and go to state 53
++    RIGHT         shift, and go to state 54
++    HERE          shift, and go to state 55
++    DOT_N         shift, and go to state 56
++    DOT_E         shift, and go to state 57
++    DOT_W         shift, and go to state 58
++    DOT_S         shift, and go to state 59
++    DOT_NE        shift, and go to state 60
++    DOT_SE        shift, and go to state 61
++    DOT_NW        shift, and go to state 62
++    DOT_SW        shift, and go to state 63
++    DOT_C         shift, and go to state 64
++    DOT_START     shift, and go to state 65
++    DOT_END       shift, and go to state 66
++    SIN           shift, and go to state 67
++    COS           shift, and go to state 68
++    ATAN2         shift, and go to state 69
++    LOG           shift, and go to state 70
++    EXP           shift, and go to state 71
++    SQRT          shift, and go to state 72
++    K_MAX         shift, and go to state 73
++    K_MIN         shift, and go to state 74
++    INT           shift, and go to state 75
++    RAND          shift, and go to state 76
++    SRAND         shift, and go to state 77
++    TOP           shift, and go to state 78
++    BOTTOM        shift, and go to state 79
++    UPPER         shift, and go to state 80
++    LOWER         shift, and go to state 81
++    LEFT_CORNER   shift, and go to state 82
++    RIGHT_CORNER  shift, and go to state 83
++    NORTH         shift, and go to state 84
++    SOUTH         shift, and go to state 85
++    EAST          shift, and go to state 86
++    WEST          shift, and go to state 87
++    CENTER        shift, and go to state 88
++    END           shift, and go to state 89
++    START         shift, and go to state 90
++    '('           shift, and go to state 91
++    '`'           shift, and go to state 92
++    '-'           shift, and go to state 93
++    '!'           shift, and go to state 94
++
++    position               go to state 402
++    position_not_place     go to state 99
++    expr_pair              go to state 100
++    place                  go to state 101
++    label                  go to state 423
++    ordinal                go to state 103
++    optional_ordinal_last  go to state 104
++    nth_primitive          go to state 105
++    corner                 go to state 106
++    expr                   go to state 424
+]])],
+
+dnl OTHER-CHECKS
+[],
+
+dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
+[AT_COND_CASE([[LALR]], [[1]], [[0]])],
+[],
+[AT_COND_CASE([[LALR]],
+[[syntax error, unexpected LEFT
+]])])
diff --git a/tests/glr-regression.at b/tests/glr-regression.at
index 9e3cec7..e08904b 100644
--- a/tests/glr-regression.at
+++ b/tests/glr-regression.at
@@ -1,40 +1,43 @@
 # Checking GLR Parsing: Regression Tests           -*- Autotest -*-
-# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2002-2003, 2005-2007, 2009-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[GLR Regression Tests]])
 
-## --------------------------- ##
-## Badly Collapsed GLR States. ##
-## --------------------------- ##
+## ---------------------------- ##
+## Badly Collapsed GLR States.  ##
+## ---------------------------- ##
 
 AT_SETUP([Badly Collapsed GLR States])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr1.y],
 [[/* Regression Test: Improper state compression */
 /* Reported by Scott McPeak */
 
 %{
 #include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
 
 #define YYSTYPE int
 static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1);
-int yylex (void);
-void yyerror (char const *msg);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
 %}
 
 
@@ -64,38 +67,31 @@
   return 0;
 }
 
+const char *input = YY_NULL;
+
 int
-main (void)
+main (int argc, const char* argv[])
 {
+  assert (argc == 2);
+  input = argv[1];
   return yyparse ();
 }
 
-void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
 
 int
 yylex (void)
 {
-  for (;;)
-    {
-      int ch = getchar ();
-      if (ch == EOF)
-	return 0;
-      else if (ch == 'B' || ch == 'P')
-	return ch;
-    }
+  return *input++;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr1.c glr-regr1.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr1.c glr-regr1.y]], 0, [],
 [glr-regr1.y: conflicts: 1 shift/reduce
 ])
 AT_COMPILE([glr-regr1])
-AT_CHECK([[echo BPBPB | ./glr-regr1]], 0,
+AT_PARSER_CHECK([[./glr-regr1 BPBPB]], 0,
 [[E -> 'B'
 E -> 'B'
 E -> E 'P' E
@@ -109,12 +105,13 @@
 
 AT_CLEANUP
 
-## ------------------------------------------------------------ ##
-## Improper handling of embedded actions and $-N in GLR parsers ##
-## ------------------------------------------------------------ ##
+## -------------------------------------------------------------- ##
+## Improper handling of embedded actions and $-N in GLR parsers.  ##
+## -------------------------------------------------------------- ##
 
 AT_SETUP([Improper handling of embedded actions and dollar(-N) in GLR parsers])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr2a.y],
 [[/* Regression Test: Improper handling of embedded actions and $-N  */
 /* Reported by S. Eken */
@@ -126,8 +123,9 @@
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
-  int yylex (void);
-  void yyerror (char const *);
+  #include <assert.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
 %}
 
 %glr-parser
@@ -167,15 +165,17 @@
    { printf ("Variable: '%s'\n", $-1); }
 
 %%
-
-FILE *input = NULL;
+]AT_YYERROR_DEFINE[
+FILE *input;
 
 int
 yylex (void)
 {
   char buf[50];
   char *s;
-  switch (fscanf (input, " %1[a-z,]", buf)) {
+  assert (!feof (stdin));
+  switch (fscanf (input, " %1[a-z,]", buf))
+  {
   case 1:
     return buf[0];
   case EOF:
@@ -185,63 +185,78 @@
   }
   if (fscanf (input, "%49s", buf) != 1)
     return 0;
-  if (sizeof buf - 1 <= strlen (buf))
-    abort ();
+  assert (strlen (buf) < sizeof buf - 1);
   s = (char *) malloc (strlen (buf) + 1);
   strcpy (s, buf);
   yylval = s;
   return 'V';
 }
 
-void
-yyerror (char const *s)
-{ printf ("%s\n", s);
-}
-
 int
 main (int argc, char **argv)
 {
+  int res;
   input = stdin;
-  if (argc == 2 && !(input = fopen (argv[1], "r"))) return 3;
-  return yyparse ();
+  if (argc == 2 && !(input = fopen (argv[1], "r")))
+    return 3;
+  res = yyparse ();
+  if (argc == 2 && fclose (input))
+    return 4;
+  return res;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr2a.c glr-regr2a.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr2a.c glr-regr2a.y]], 0, [],
 [glr-regr2a.y: conflicts: 2 shift/reduce
 ])
 AT_COMPILE([glr-regr2a])
 
-AT_CHECK([[echo s VARIABLE_1 t v x q | ./glr-regr2a]], 0,
+AT_DATA([input1.txt],
+[[s VARIABLE_1 t v x q
+]])
+AT_PARSER_CHECK([[./glr-regr2a input1.txt]], 0,
 [[Variable: 'VARIABLE_1'
-]], [])
-AT_CHECK([[echo s VARIABLE_1 , ANOTHER_VARIABLE_2 t e | ./glr-regr2a]], 0,
+]])
+
+AT_DATA([input2.txt],
+[[s VARIABLE_1 , ANOTHER_VARIABLE_2 t e
+]])
+AT_PARSER_CHECK([[./glr-regr2a input2.txt]],
+0,
 [[Varlist: 'VARIABLE_1,ANOTHER_VARIABLE_2'
 ]])
-AT_CHECK([[echo s VARIABLE_3 t v x | ./glr-regr2a]], 0,
+
+AT_DATA([input3.txt],
+[[s VARIABLE_3 t v x
+]])
+AT_PARSER_CHECK([[./glr-regr2a input3.txt]], 0,
 [[Variable: 'VARIABLE_3'
-]], [])
+]])
 
 
 AT_CLEANUP
 
-## ------------------------------------------------------------ ##
-## Improper merging of GLR delayed action sets                  ##
-## ------------------------------------------------------------ ##
+## --------------------------------------------- ##
+## Improper merging of GLR delayed action sets.  ##
+## --------------------------------------------- ##
 
 AT_SETUP([Improper merging of GLR delayed action sets])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr3.y],
 [[/* Regression Test: Improper merging of GLR delayed action sets.  */
 /* Reported by M. Rosien */
 
 %{
 #include <stdio.h>
+#include <stdlib.h>
 #include <stdarg.h>
+#include <assert.h>
 
 static int MergeRule (int x0, int x1);
-static void yyerror (char const * s);
-int yylex (void);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
 
 #define RULE(x) (1 << (x))
 
@@ -282,15 +297,14 @@
 
 %%
 
-static int MergeRule (int x0, int x1) {
+static int
+MergeRule (int x0, int x1)
+{
   return x0 | x1;
 }
+]AT_YYERROR_DEFINE[
 
-static void yyerror(char const * s) {
-  fprintf(stderr,"error: %s\n",s);
-}
-
-FILE *input = NULL;
+FILE *input = YY_NULL;
 
 int P[] = { P1, P2 };
 int O[] = { O1, O2 };
@@ -299,6 +313,7 @@
 int yylex (void)
 {
   char inp[3];
+  assert (!feof (stdin));
   if (fscanf (input, "%2s", inp) == EOF)
     return 0;
   switch (inp[0])
@@ -310,32 +325,45 @@
   return BAD_CHAR;
 }
 
-int main(int argc, char* argv[]) {
+int
+main(int argc, char* argv[])
+{
+  int res;
   input = stdin;
-  if (argc == 2 && !(input = fopen (argv[1], "r"))) return 3;
-  return yyparse ();
+  if (argc == 2 && !(input = fopen (argv[1], "r")))
+    return 3;
+  res = yyparse ();
+  if (argc == 2 && fclose (input))
+    return 4;
+  return res;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr3.c glr-regr3.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr3.c glr-regr3.y]], 0, [],
 [glr-regr3.y: conflicts: 1 shift/reduce, 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr3])
 
-AT_CHECK([[echo p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2 | ./glr-regr3]], 0,
+AT_DATA([input.txt],
+[[p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2
+]])
+AT_PARSER_CHECK([[./glr-regr3 input.txt]],
+0,
 [[Result: 1c04
-]], [])
+]])
 
 AT_CLEANUP
 
 
-## ------------------------------------------------------------------------- ##
-## Duplicate representation of merged trees.  See			     ##
-## <http://lists.gnu.org/archive/html/help-bison/2005-07/msg00013.html>.     ##
-## ------------------------------------------------------------------------- ##
+## ---------------------------------------------------------------------- ##
+## Duplicate representation of merged trees.  See                         ##
+## <http://lists.gnu.org/archive/html/help-bison/2005-07/msg00013.html>.  ##
+## ---------------------------------------------------------------------- ##
 
 AT_SETUP([Duplicate representation of merged trees])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr4.y],
 [[
 %union { char *ptr; }
@@ -348,8 +376,10 @@
   #include <string.h>
   static char *merge (YYSTYPE, YYSTYPE);
   static char *make_value (char const *, char const *);
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+  static char *ptrs[100];
+  static char **ptrs_next = ptrs;
 %}
 
 %%
@@ -371,25 +401,23 @@
 B:  'a' { $$ = make_value ("B", "'a'");  } ;
 
 %%
-
-static int
-yylex (void)
-{
-  static char const *input = "a";
-  return *input++;
-}
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["a"])[
 
 int
 main (void)
 {
-  return yyparse ();
+  int status = yyparse ();
+  while (ptrs_next != ptrs)
+    free (*--ptrs_next);
+  return status;
 }
 
 static char *
 make_value (char const *parent, char const *child)
 {
   char const format[] = "%s <- %s";
-  char *value =
+  char *value = *ptrs_next++ =
     (char *) malloc (strlen (parent) + strlen (child) + sizeof format);
   sprintf (value, format, parent, child);
   return value;
@@ -399,45 +427,41 @@
 merge (YYSTYPE s1, YYSTYPE s2)
 {
   char const format[] = "merge{ %s and %s }";
-  char *value =
+  char *value = *ptrs_next++ =
     (char *) malloc (strlen (s1.ptr) + strlen (s2.ptr) + sizeof format);
   sprintf (value, format, s1.ptr, s2.ptr);
   return value;
 }
-
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr4.c glr-regr4.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr4.c glr-regr4.y]], 0, [],
 [glr-regr4.y: conflicts: 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr4])
 
-AT_CHECK([[./glr-regr4]], 0,
+AT_PARSER_CHECK([[./glr-regr4]], 0,
 [[merge{ S <- merge{ A <- A1 <- 'a' and A <- A2 <- 'a' } and S <- B <- 'a' }
 ]], [])
 
 AT_CLEANUP
 
 
-## -------------------------------------------------------------------------- ##
-## User destructor for unresolved GLR semantic value.  See		      ##
-## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00016.html>.   ##
-## -------------------------------------------------------------------------- ##
+## ------------------------------------------------------------------------- ##
+## User destructor for unresolved GLR semantic value.  See                   ##
+## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00016.html>.  ##
+## ------------------------------------------------------------------------- ##
 
 AT_SETUP([User destructor for unresolved GLR semantic value])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr5.y],
 [[
 %{
   #include <stdio.h>
   #include <stdlib.h>
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
   enum { MAGIC_VALUE = -1057808125 }; /* originally chosen at random */
 %}
 
@@ -461,53 +485,43 @@
    ;
 
 %%
-
-static int
-yylex (void)
-{
-  static char const *input = "a";
-  return *input++;
-}
-
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYLEX_DEFINE(["a"])[
+]AT_YYERROR_DEFINE[
 int
 main (void)
 {
   return yyparse () != 1;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr5.c glr-regr5.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr5.c glr-regr5.y]], 0, [],
 [glr-regr5.y: conflicts: 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr5])
 
-AT_CHECK([[./glr-regr5]], 0, [],
+AT_PARSER_CHECK([[./glr-regr5]], 0, [],
 [syntax is ambiguous
 ])
 
 AT_CLEANUP
 
 
-## -------------------------------------------------------------------------- ##
-## User destructor after an error during a split parse.  See		      ##
-## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00029.html>.   ##
-## -------------------------------------------------------------------------- ##
+## ------------------------------------------------------------------------- ##
+## User destructor after an error during a split parse.  See                 ##
+## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00029.html>.  ##
+## ------------------------------------------------------------------------- ##
 
 AT_SETUP([User destructor after an error during a split parse])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr6.y],
 [[
 %{
   #include <stdio.h>
   #include <stdlib.h>
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
 %}
 
 %glr-parser
@@ -523,33 +537,22 @@
 start: 'a' | 'a' ;
 
 %%
-
-static int
-yylex (void)
-{
-  static char const *input = "a";
-  return *input++;
-}
-
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["a"])[
 int
 main (void)
 {
   return yyparse () != 1;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr6.c glr-regr6.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr6.c glr-regr6.y]], 0, [],
 [glr-regr6.y: conflicts: 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr6])
 
-AT_CHECK([[./glr-regr6]], 0,
+AT_PARSER_CHECK([[./glr-regr6]], 0,
 [Destructor called.
 ],
 [syntax is ambiguous
@@ -559,28 +562,34 @@
 
 
 ## ------------------------------------------------------------------------- ##
-## Duplicated user destructor for lookahead.  See			     ##
+## Duplicated user destructor for lookahead.  See                            ##
 ## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00035.html>.  ##
 ## ------------------------------------------------------------------------- ##
 
 AT_SETUP([Duplicated user destructor for lookahead])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr7.y],
 [[
 %{
   #include <stdio.h>
   #include <stdlib.h>
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
   #define YYSTACKEXPANDABLE 0
+  typedef struct count_node {
+    int count;
+    struct count_node *prev;
+  } count_node;
+  static count_node *tail;
 %}
 
 %glr-parser
-%union { int *count; }
-%type <count> 'a'
+%union { count_node *node; }
+%type <node> 'a'
 
 %destructor {
-  if ((*$$)++)
+  if ($$->count++)
     fprintf (stderr, "Destructor called on same value twice.\n");
 } 'a'
 
@@ -599,35 +608,40 @@
 static int
 yylex (void)
 {
-  yylval.count = (int *) malloc (sizeof (int));
-  if (!yylval.count)
+  yylval.node = (count_node*) malloc (sizeof *yylval.node);
+  if (!yylval.node)
     {
       fprintf (stderr, "Test inconclusive.\n");
       exit (EXIT_FAILURE);
     }
-  *yylval.count = 0;
+  yylval.node->count = 0;
+  yylval.node->prev = tail;
+  tail = yylval.node;
   return 'a';
 }
 
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
 int
 main (void)
 {
-  return yyparse ();
+  int status = yyparse ();
+  while (tail)
+    {
+      count_node *prev = tail->prev;
+      free (tail);
+      tail = prev;
+    }
+  return status;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr7.c glr-regr7.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr7.c glr-regr7.y]], 0, [],
 [glr-regr7.y: conflicts: 2 reduce/reduce
 ])
 AT_COMPILE([glr-regr7])
 
-AT_CHECK([[./glr-regr7]], 2, [],
+AT_PARSER_CHECK([[./glr-regr7]], 2, [],
 [memory exhausted
 ])
 
@@ -643,14 +657,14 @@
 
 AT_SETUP([Incorrectly initialized location for empty right-hand side in GLR])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr8.y],
 [[
 %{
   #include <stdio.h>
   #include <stdlib.h>
-  static void yyerror (char const *);
-  static int yylex (void);
-  static void yyerror (char const *msg);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
 %}
 
 %token T_CONSTANT
@@ -684,12 +698,7 @@
 
 %%
 
-void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
 static int lexIndex;
 
 int yylex (void)
@@ -697,6 +706,8 @@
   lexIndex += 1;
   switch (lexIndex)
     {
+    default:
+      abort ();
     case 1:
       yylloc.first_column = 1;
       yylloc.last_column = 9;
@@ -705,7 +716,7 @@
       yylloc.first_column = 13;
       yylloc.last_column = 17;
       return T_PORT;
-    default:
+    case 3:
       return 0;
     }
 }
@@ -717,13 +728,14 @@
   return 0;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr8.c glr-regr8.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr8.c glr-regr8.y]], 0, [],
 [glr-regr8.y: conflicts: 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr8])
 
-AT_CHECK([[./glr-regr8]], 0,
+AT_PARSER_CHECK([[./glr-regr8]], 0,
 [empty: 9/9
 1/9 - 9/9 - 13/17
 ],
@@ -733,19 +745,20 @@
 
 
 ## ------------------------------------------------------------------------- ##
-## No users destructors if stack 0 deleted.  See			     ##
+## No users destructors if stack 0 deleted.  See                             ##
 ## <http://lists.gnu.org/archive/html/bison-patches/2005-09/msg00109.html>.  ##
 ## ------------------------------------------------------------------------- ##
 
 AT_SETUP([No users destructors if stack 0 deleted])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr9.y],
 [[
 %{
 # include <stdio.h>
 # include <stdlib.h>
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
 # define YYSTACKEXPANDABLE 0
   static int tokens = 0;
   static int destructors = 0;
@@ -781,12 +794,7 @@
   return 'a';
 }
 
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
 int
 main (void)
 {
@@ -800,31 +808,34 @@
   return !exit_status;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr9.c glr-regr9.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr9.c glr-regr9.y]], 0, [],
 [glr-regr9.y: conflicts: 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr9])
 
-AT_CHECK([[./glr-regr9]], 0, [],
+AT_PARSER_CHECK([[./glr-regr9]], 0, [],
 [memory exhausted
 ])
 
 AT_CLEANUP
 
 
-## ------------------------------------------------------------------------- ##
-## Corrupted semantic options if user action cuts parse.	             ##
-## ------------------------------------------------------------------------- ##
+## ------------------------------------------------------ ##
+## Corrupted semantic options if user action cuts parse.  ##
+## ------------------------------------------------------ ##
 
 AT_SETUP([Corrupted semantic options if user action cuts parse])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr10.y],
 [[
 %{
+# include <stdlib.h>
 # include <stdio.h>
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
   #define GARBAGE_SIZE 50
   static char garbage[GARBAGE_SIZE];
 %}
@@ -841,18 +852,8 @@
   ;
 
 %%
-
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
-static int
-yylex (void)
-{
-  return 0;
-}
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
 
 int
 main (void)
@@ -863,29 +864,31 @@
   return yyparse ();
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr10.c glr-regr10.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr10.c glr-regr10.y]], 0, [],
 [glr-regr10.y: conflicts: 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr10])
 
-AT_CHECK([[./glr-regr10]], 0, [], [])
+AT_PARSER_CHECK([[./glr-regr10]], 0, [], [])
 
 AT_CLEANUP
 
 
-## ------------------------------------------------------------------------- ##
-## Undesirable destructors if user action cuts parse.			     ##
-## ------------------------------------------------------------------------- ##
+## --------------------------------------------------- ##
+## Undesirable destructors if user action cuts parse.  ##
+## --------------------------------------------------- ##
 
 AT_SETUP([Undesirable destructors if user action cuts parse])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr11.y],
 [[
 %{
 # include <stdlib.h>
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
   static int destructors = 0;
 # define USE(val)
 %}
@@ -904,18 +907,8 @@
 
 %%
 
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
-static int
-yylex (void)
-{
-  static char const *input = "a";
-  return *input++;
-}
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["a"])[
 
 int
 main (void)
@@ -929,23 +922,25 @@
   return exit_status;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr11.c glr-regr11.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr11.c glr-regr11.y]], 0, [],
 [glr-regr11.y: conflicts: 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr11])
 
-AT_CHECK([[./glr-regr11]], 0, [], [])
+AT_PARSER_CHECK([[./glr-regr11]], 0, [], [])
 
 AT_CLEANUP
 
 
-## ------------------------------------------------------------------------- ##
-## Leaked semantic values if user action cuts parse.			     ##
-## ------------------------------------------------------------------------- ##
+## -------------------------------------------------- ##
+## Leaked semantic values if user action cuts parse.  ##
+## -------------------------------------------------- ##
 
 AT_SETUP([Leaked semantic values if user action cuts parse])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr12.y],
 [[
 %glr-parser
@@ -958,9 +953,10 @@
 
 %{
 # include <stdlib.h>
+# include <assert.h>
   static int merge (YYSTYPE, YYSTYPE);
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
   static int parent_rhs_before_value = 0;
   static int merged_value = 0;
   static int parent_rhs_after_value = 0;
@@ -1020,21 +1016,10 @@
   return dummy;
 }
 
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
-static int
-yylex (void)
-{
-  static int const input[] = { PARENT_RHS_AFTER, 0 };
-  static const int *inputp = input;
-  if (*inputp == PARENT_RHS_AFTER)
-    parent_rhs_after_value = 1;
-  return *inputp++;
-}
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE([{ PARENT_RHS_AFTER, 0 }],
+ [if (res == PARENT_RHS_AFTER)
+    parent_rhs_after_value = 1;])[
 
 int
 main (void)
@@ -1058,13 +1043,14 @@
   return exit_status;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr12.c glr-regr12.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr12.c glr-regr12.y]], 0, [],
 [glr-regr12.y: conflicts: 1 shift/reduce, 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr12])
 
-AT_CHECK([[./glr-regr12]], 0, [], [])
+AT_PARSER_CHECK([[./glr-regr12]], 0, [], [])
 
 AT_CLEANUP
 
@@ -1077,6 +1063,7 @@
 
 AT_SETUP([Incorrect lookahead during deterministic GLR])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr13.y],
 [[
 /* Tests:
@@ -1088,9 +1075,10 @@
 
 %{
   #include <stdio.h>
-  static void yyerror (char const *);
-  static int yylex (void);
-  static void print_look_ahead (char const *);
+  #include <assert.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+  static void print_lookahead (char const *);
   #define USE(value)
 %}
 
@@ -1104,32 +1092,32 @@
 start:
   defstate_init defstate_shift 'b' change_lookahead 'a' {
     USE ($3);
-    print_look_ahead ("start <- defstate_init defstate_shift 'b'");
+    print_lookahead ("start <- defstate_init defstate_shift 'b'");
   }
   ;
 defstate_init:
   {
-    print_look_ahead ("defstate_init <- empty string");
+    print_lookahead ("defstate_init <- empty string");
   }
   ;
 defstate_shift:
   nondefstate defstate_look 'a' {
     USE ($3);
-    print_look_ahead ("defstate_shift <- nondefstate defstate_look 'a'");
+    print_lookahead ("defstate_shift <- nondefstate defstate_look 'a'");
   }
   ;
 defstate_look:
   {
-    print_look_ahead ("defstate_look <- empty string");
+    print_lookahead ("defstate_look <- empty string");
   }
   ;
 nondefstate:
   {
-    print_look_ahead ("nondefstate <- empty string");
+    print_lookahead ("nondefstate <- empty string");
   }
   | 'b' {
     USE ($1);
-    print_look_ahead ("nondefstate <- 'b'");
+    print_lookahead ("nondefstate <- 'b'");
   }
   ;
 change_lookahead:
@@ -1140,25 +1128,12 @@
 
 %%
 
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
-static int
-yylex (void)
-{
-  static char const *input = "ab";
-  static int i = 0;
-  yylloc.first_line = yylloc.last_line = 1;
-  yylloc.first_column = yylloc.last_column = i + 1;
-  yylval.value = input[i] + 'A' - 'a';
-  return input[i++];
-}
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["ab"],
+                 [yylval.value = res + 'A' - 'a'])[
 
 static void
-print_look_ahead (char const *reduction)
+print_lookahead (char const *reduction)
 {
   printf ("%s:\n  yychar=", reduction);
   if (yychar == YYEMPTY)
@@ -1185,11 +1160,12 @@
   return yyparse ();
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr13.c glr-regr13.y]], 0, [], [])
+AT_BISON_CHECK([[-o glr-regr13.c glr-regr13.y]], 0, [], [])
 AT_COMPILE([glr-regr13])
 
-AT_CHECK([[./glr-regr13]], 0,
+AT_PARSER_CHECK([[./glr-regr13]], 0,
 [defstate_init <- empty string:
   yychar=YYEMPTY
 nondefstate <- empty string:
@@ -1205,12 +1181,13 @@
 AT_CLEANUP
 
 
-## ------------------------------------------------------------------------- ##
-## Incorrect lookahead during nondeterministic GLR.			     ##
-## ------------------------------------------------------------------------- ##
+## ------------------------------------------------- ##
+## Incorrect lookahead during nondeterministic GLR.  ##
+## ------------------------------------------------- ##
 
 AT_SETUP([Incorrect lookahead during nondeterministic GLR])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr14.y],
 [[
 /* Tests:
@@ -1235,10 +1212,12 @@
 %union { char value; }
 
 %{
+  #include <stdlib.h>
   #include <stdio.h>
-  static void yyerror (char const *);
-  static int yylex (void);
-  static void print_look_ahead (char const *);
+  #include <assert.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+  static void print_lookahead (char const *);
   static char merge (union YYSTYPE, union YYSTYPE);
   #define USE(value)
 %}
@@ -1252,7 +1231,7 @@
 start:
   merge 'c' stack_explosion {
     USE ($2); USE ($3);
-    print_look_ahead ("start <- merge 'c' stack_explosion");
+    print_lookahead ("start <- merge 'c' stack_explosion");
   }
   ;
 
@@ -1260,44 +1239,44 @@
 merge:
   nonconflict1 'a' 'b' nonconflict2 %dprec 1 {
     USE ($2); USE ($3);
-    print_look_ahead ("merge <- nonconflict1 'a' 'b' nonconflict2");
+    print_lookahead ("merge <- nonconflict1 'a' 'b' nonconflict2");
   }
   | conflict defstate_look 'a' nonconflict2 'b' defstate_shift %dprec 2 {
     USE ($3); USE ($5);
-    print_look_ahead ("merge <- conflict defstate_look 'a' nonconflict2 'b'"
+    print_lookahead ("merge <- conflict defstate_look 'a' nonconflict2 'b'"
 		      " defstate_shift");
   }
   ;
 
 nonconflict1:
   {
-    print_look_ahead ("nonconflict1 <- empty string");
+    print_lookahead ("nonconflict1 <- empty string");
   }
   ;
 nonconflict2:
   {
-    print_look_ahead ("nonconflict2 <- empty string");
+    print_lookahead ("nonconflict2 <- empty string");
   }
   | 'a' {
     USE ($1);
-    print_look_ahead ("nonconflict2 <- 'a'");
+    print_lookahead ("nonconflict2 <- 'a'");
   }
   ;
 conflict:
   {
-    print_look_ahead ("conflict <- empty string");
+    print_lookahead ("conflict <- empty string");
   }
   ;
 defstate_look:
   {
-    print_look_ahead ("defstate_look <- empty string");
+    print_lookahead ("defstate_look <- empty string");
   }
   ;
 
 /* yychar != YYEMPTY but lookahead need is yyfalse.  */
 defstate_shift:
   {
-    print_look_ahead ("defstate_shift <- empty string");
+    print_lookahead ("defstate_shift <- empty string");
   }
   ;
 
@@ -1346,25 +1325,21 @@
 
 %%
 
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
 static int
 yylex (void)
 {
-  static char const *input = "abcdddd";
-  static int i = 0;
+  static char const input[] = "abcdddd";
+  static size_t toknum;
+  assert (toknum < sizeof input);
   yylloc.first_line = yylloc.last_line = 1;
-  yylloc.first_column = yylloc.last_column = i + 1;
-  yylval.value = input[i] + 'A' - 'a';
-  return input[i++];
+  yylloc.first_column = yylloc.last_column = toknum + 1;
+  yylval.value = input[toknum] + 'A' - 'a';
+  return input[toknum++];
 }
 
 static void
-print_look_ahead (char const *reduction)
+print_lookahead (char const *reduction)
 {
   printf ("%s:\n  yychar=", reduction);
   if (yychar == YYEMPTY)
@@ -1398,13 +1373,14 @@
   return yyparse ();
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr14.c glr-regr14.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr14.c glr-regr14.y]], 0, [],
 [glr-regr14.y: conflicts: 3 reduce/reduce
 ])
 AT_COMPILE([glr-regr14])
 
-AT_CHECK([[./glr-regr14]], 0,
+AT_PARSER_CHECK([[./glr-regr14]], 0,
 [conflict <- empty string:
   yychar='a', yylval='A', yylloc=(1,1),(1,1)
 defstate_look <- empty string:
@@ -1422,12 +1398,13 @@
 AT_CLEANUP
 
 
-## ------------------------------------------------------------------------- ##
-## Leaked semantic values when reporting ambiguity.			     ##
-## ------------------------------------------------------------------------- ##
+## ------------------------------------------------- ##
+## Leaked semantic values when reporting ambiguity.  ##
+## ------------------------------------------------- ##
 
 AT_SETUP([Leaked semantic values when reporting ambiguity])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr15.y],
 [[
 %glr-parser
@@ -1435,8 +1412,8 @@
 
 %{
 # include <stdlib.h>
-  static void yyerror (char const *);
-  static int yylex (void);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
   static int parent_rhs_before_value = 0;
 # define USE(val)
 %}
@@ -1474,18 +1451,8 @@
 ambiguity2: ;
 
 %%
-
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
-static int
-yylex (void)
-{
-  return 0;
-}
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
 
 int
 main (void)
@@ -1499,24 +1466,27 @@
   return exit_status;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr15.c glr-regr15.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr15.c glr-regr15.y]], 0, [],
 [glr-regr15.y: conflicts: 2 reduce/reduce
 ])
 AT_COMPILE([glr-regr15])
 
-AT_CHECK([[./glr-regr15]], 0, [],
+AT_PARSER_CHECK([[./glr-regr15]], 0, [],
 [syntax is ambiguous
 ])
 
 AT_CLEANUP
 
 
-## ------------------------------------------------------------------------- ##
-## Leaked lookahead after nondeterministic parse syntax error.		     ##
-## ------------------------------------------------------------------------- ##
+## ------------------------------------------------------------ ##
+## Leaked lookahead after nondeterministic parse syntax error.  ##
+## ------------------------------------------------------------ ##
 
 AT_SETUP([Leaked lookahead after nondeterministic parse syntax error])
+
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr16.y],
 [[
 %glr-parser
@@ -1524,8 +1494,9 @@
 
 %{
 # include <stdlib.h>
-  static void yyerror (char const *);
-  static int yylex (void);
+# include <assert.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
   static int lookahead_value = 0;
 # define USE(val)
 %}
@@ -1538,20 +1509,10 @@
 
 %%
 
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
-static int
-yylex (void)
-{
-  static char const *input = "ab";
-  if (*input == 'b')
-    lookahead_value = 1;
-  return *input++;
-}
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["ab"],
+  [if (res == 'b')
+    lookahead_value = 1])[
 
 int
 main (void)
@@ -1565,45 +1526,42 @@
   return exit_status;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr16.c glr-regr16.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr16.c glr-regr16.y]], 0, [],
 [glr-regr16.y: conflicts: 1 reduce/reduce
 ])
 AT_COMPILE([glr-regr16])
 
-AT_CHECK([[./glr-regr16]], 0, [],
+AT_PARSER_CHECK([[./glr-regr16]], 0, [],
 [syntax error
 ])
 
 AT_CLEANUP
 
 
-## ------------------------------------------------------------------------- ##
-## Uninitialized location when reporting ambiguity.			     ##
-## ------------------------------------------------------------------------- ##
+## ------------------------------------------------- ##
+## Uninitialized location when reporting ambiguity.  ##
+## ------------------------------------------------- ##
 
 AT_SETUP([Uninitialized location when reporting ambiguity])
+
+AT_BISON_OPTION_PUSHDEFS([%glr-parser %locations %define api.pure])
+
 AT_DATA_GRAMMAR([glr-regr17.y],
 [[
 %glr-parser
 %locations
-%pure-parser
+%define api.pure
 %error-verbose
 
 %union { int dummy; }
 
 %{
-  static void yyerror (YYLTYPE *, char const *);
-  static int yylex (YYSTYPE *, YYLTYPE *);
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
 %}
 
-%initial-action {
-  @$.first_line = 1;
-  @$.first_column = 1;
-  @$.last_line = 1;
-  @$.last_column = 1;
-}
-
 %%
 
 /* Tests the case of an empty RHS that has inherited the location of the
@@ -1624,24 +1582,20 @@
 empty2: ;
 
 %%
+# include <assert.h>
 
-static void
-yyerror (YYLTYPE *locp, char const *msg)
-{
-  fprintf (stderr, "Error at %d.%d-%d.%d: %s.\n", locp->first_line,
-	   locp->first_column, locp->last_line, locp->last_column, msg);
-}
-
+]AT_YYERROR_DEFINE[
 static int
 yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
   static char const input[] = "ab";
-  static char const *inputp = input;
+  static size_t toknum;
+  assert (toknum < sizeof input);
   lvalp->dummy = 0;
   llocp->first_line = llocp->last_line = 2;
-  llocp->first_column = inputp - input + 1;
+  llocp->first_column = toknum + 1;
   llocp->last_column = llocp->first_column + 1;
-  return *inputp++;
+  return input[toknum++];
 }
 
 int
@@ -1650,14 +1604,172 @@
   return yyparse () != 1;
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([[bison -o glr-regr17.c glr-regr17.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr17.c glr-regr17.y]], 0, [],
 [glr-regr17.y: conflicts: 3 reduce/reduce
 ])
 AT_COMPILE([glr-regr17])
 
-AT_CHECK([[./glr-regr17]], 0, [],
-[Error at 1.1-2.3: syntax is ambiguous.
+AT_PARSER_CHECK([[./glr-regr17]], 0, [],
+[1.1-2.2: syntax is ambiguous
+])
+
+AT_CLEANUP
+
+
+## ------------------------------------------------------------- ##
+## Missed %merge type warnings when LHS type is declared later.  ##
+## ------------------------------------------------------------- ##
+
+AT_SETUP([Missed %merge type warnings when LHS type is declared later])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([glr-regr18.y],
+[[%glr-parser
+
+%{
+  #include <stdlib.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+%}
+
+%union {
+  int type1;
+  int type2;
+  int type3;
+}
+
+%%
+
+sym1: sym2 %merge<merge> { $$ = $1; } ;
+sym2: sym3 %merge<merge> { $$ = $1; } ;
+sym3: %merge<merge> { $$ = 0; } ;
+
+%type <type1> sym1;
+%type <type2> sym2;
+%type <type3> sym3;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([[-o glr-regr18.c glr-regr18.y]], 1, [],
+[glr-regr18.y:26.18-24: error: result type clash on merge function 'merge': <type2> != <type1>
+glr-regr18.y:25.18-24:     previous declaration
+glr-regr18.y:27.13-19: error: result type clash on merge function 'merge': <type3> != <type2>
+glr-regr18.y:26.18-24:     previous declaration
+])
+
+AT_CLEANUP
+
+
+## ------------------- ##
+## Ambiguity reports.  ##
+## ------------------- ##
+
+AT_SETUP([Ambiguity reports])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[
+%{
+  #include <stdio.h>
+  #include <stdlib.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+%}
+
+%debug
+%glr-parser
+
+%%
+start:
+  'a' b 'c' d
+| 'a' b 'c' d
+;
+b: 'b';
+d: /* nada.  */;
+%%
+]AT_YYLEX_DEFINE(["abc"])[
+]AT_YYERROR_DEFINE[
+int
+main (void)
+{
+  yydebug = 1;
+  return !!yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([[-o input.c input.y]], 0, [],
+[input.y: conflicts: 1 reduce/reduce
+])
+AT_COMPILE([input])
+
+AT_PARSER_CHECK([[./input]], 1, [],
+[Starting parse
+Entering state 0
+Reading a token: Next token is token 'a' ()
+Shifting token 'a' ()
+Entering state 1
+Reading a token: Next token is token 'b' ()
+Shifting token 'b' ()
+Entering state 3
+Reducing stack 0 by rule 3 (line 25):
+   $1 = token 'b' ()
+-> $$ = nterm b ()
+Entering state 4
+Reading a token: Next token is token 'c' ()
+Shifting token 'c' ()
+Entering state 6
+Reducing stack 0 by rule 4 (line 26):
+-> $$ = nterm d ()
+Entering state 7
+Reading a token: Now at end of input.
+Stack 0 Entering state 7
+Now at end of input.
+Splitting off stack 1 from 0.
+Reduced stack 1 by rule #2; action deferred.  Now in state 2.
+Stack 1 Entering state 2
+Now at end of input.
+Reduced stack 0 by rule #1; action deferred.  Now in state 2.
+Merging stack 0 into stack 1.
+Stack 1 Entering state 2
+Now at end of input.
+Removing dead stacks.
+Rename stack 1 -> 0.
+On stack 0, shifting token $end ()
+Stack 0 now in state #5
+Ambiguity detected.
+Option 1,
+  start -> <Rule 1, tokens 1 .. 3>
+    'a' <tokens 1 .. 1>
+    b <tokens 2 .. 2>
+    'c' <tokens 3 .. 3>
+    d <empty>
+
+Option 2,
+  start -> <Rule 2, tokens 1 .. 3>
+    'a' <tokens 1 .. 1>
+    b <tokens 2 .. 2>
+    'c' <tokens 3 .. 3>
+    d <empty>
+
+syntax is ambiguous
+Cleanup: popping token $end ()
+Cleanup: popping unresolved nterm start ()
+Cleanup: popping nterm d ()
+Cleanup: popping token 'c' ()
+Cleanup: popping nterm b ()
+Cleanup: popping token 'a' ()
 ])
 
 AT_CLEANUP
diff --git a/tests/headers.at b/tests/headers.at
index a348d65..351b8a7 100644
--- a/tests/headers.at
+++ b/tests/headers.at
@@ -1,65 +1,44 @@
 # Bison Parser Headers.                               -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2001-2002, 2006-2007, 2009-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[Parser Headers.]])
 
 
-## ---------------------- ##
-## %union and --defines.  ##
-## ---------------------- ##
-
-
-AT_SETUP([%union and --defines])
-
-AT_DATA([input.y],
-[%union
-{
-  int   integer;
-  char *string ;
-}
-%%
-exp: {};
-])
-
-AT_CHECK([bison --defines input.y])
-
-AT_CLEANUP
-
-
-
 ## --------------------- ##
 ## Invalid CPP headers.  ##
 ## --------------------- ##
 
-# AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE)
-# -------------------------------------
+# AT_TEST_CPP_GUARD_H(BASE-NAME, [DIRECTIVES])
+# --------------------------------------------
+# FIXME: Much of this can be covered by calc.at.
 m4_define([AT_TEST_CPP_GUARD_H],
-[AT_SETUP([Invalid CPP guards: $1])
-
+[AT_SETUP([Invalid CPP guards: $2 --defines=$1.h])
+AT_BISON_OPTION_PUSHDEFS([$2])
 # Possibly create inner directories.
 dirname=`AS_DIRNAME([$1])`
 AS_MKDIR_P([$dirname])
 
 AT_DATA_GRAMMAR([$1.y],
-[%{
+[$2
+%{
 #include <$1.h>
-void yyerror (const char *);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 %}
 %%
 dummy:;
@@ -67,15 +46,18 @@
 #include <$1.h>
 ])
 
-AT_CHECK([bison --defines=$1.h --output=y.tab.c $1.y])
+AT_BISON_CHECK([--defines=$1.h --output=$1.c $1.y])
 
-AT_COMPILE([y.tab.o], [-I. -c y.tab.c])
+AT_COMPILE([$1.o], [-I. -c $1.c])
 
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 ])
 
 AT_TEST_CPP_GUARD_H([input/input])
 AT_TEST_CPP_GUARD_H([9foo])
+AT_TEST_CPP_GUARD_H([input/input], [%glr-parser])
+AT_TEST_CPP_GUARD_H([9foo],        [%glr-parser])
 
 
 
@@ -89,7 +71,7 @@
 AT_DATA_GRAMMAR([input.y],
 [%locations
 
-%name-prefix="my_"
+%name-prefix "my_"
 %{
 #include <stdio.h>
 #include <stdlib.h>
@@ -111,7 +93,7 @@
 exp:;
 ])
 
-AT_CHECK([bison --defines -o input.c input.y])
+AT_BISON_CHECK([--defines -o input.c input.y])
 
 # YYLTYPE should be defined, and MY_LLOC declared.
 AT_DATA([caller.c],
@@ -129,9 +111,171 @@
 
 # Link and execute, just to make sure everything is fine (and in
 # particular, that MY_LLOC is indeed defined somewhere).
-AT_COMPILE([caller.o], [-c caller.c])
-AT_COMPILE([input.o], [-c input.c])
+AT_COMPILE([caller.o])
+AT_COMPILE([input.o])
 AT_COMPILE([caller], [caller.o input.o])
 AT_PARSER_CHECK([./caller])
 
 AT_CLEANUP
+
+## ----------------- ##
+## Several parsers.  ##
+## ----------------- ##
+
+AT_SETUP([Several parsers])
+
+# AT_TEST([PREFIX], [DIRECTIVES])
+# -------------------------------
+# Generate and compile to *.o.  Make sure there is no (allowed) YY*
+# nor yy* identifiers in the header.  Check that headers are
+# self-contained, and can be compiled by a C++ compiler.
+m4_pushdef([AT_TEST],
+[AT_BISON_OPTION_PUSHDEFS([%define api.prefix "$1_" $2])
+AT_DATA_GRAMMAR([$1.y],
+[[%define api.prefix "$1_"
+$2
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["$1"])[
+]])
+
+AT_BISON_CHECK([-d -o $1.AT_SKEL_CC_IF([cc], [c]) $1.y])
+
+AT_LANG_COMPILE([$1.o])
+AT_CHECK([[echo "$1" >>expout]])
+
+AT_BISON_OPTION_POPDEFS
+])# AT_TEST
+
+AT_DATA([main.cc],
+[AT_DATA_SOURCE_PROLOGUE
+[// If we are compiling with CC=$CXX, then do not load the C headers
+// inside extern "C", since they were _not_ compiled this way.
+#if ! CC_IS_CXX
+extern "C"
+{
+#endif
+  #include "x1.h"
+  #include "x2.h"
+  #include "x3.h"
+  #include "x4.h"
+  #include "x6.h"
+  #include "x7.h"
+  #include "x8.h"
+#if ! CC_IS_CXX
+}
+#endif
+#include "x5.hh"
+//#include "x6.hh"
+
+#define RUN(S)                                  \
+  do {                                          \
+    int res = S;                                \
+    if (res)                                    \
+      std::cerr << #S": " << res << std::endl;  \
+  } while (false)
+
+int
+main (void)
+{
+  RUN(x1_parse());
+  RUN(x2_parse());
+  RUN(x3_parse());
+  RUN(x4_parse());
+  x5_::parser p5;
+  RUN(p5.parse());
+  RUN(x6_parse());
+  RUN(x7_parse());
+  RUN(x8_parse());
+//  x6_::parser p6;
+//  RUN(p6.parse());
+  return 0;
+}
+]])# main.cc
+
+AT_TEST([x1], [])
+AT_TEST([x2], [%locations %debug])
+AT_TEST([x3], [%glr-parser])
+AT_TEST([x4], [%locations %debug %glr-parser])
+AT_TEST([x5], [%locations %debug %language "c++"])
+AT_TEST([x6], [%define api.pure])
+AT_TEST([x7], [%define api.push-pull both])
+AT_TEST([x8], [%define api.pure %define api.push-pull both])
+#AT_TEST([x5], [%locations %language "c++" %glr-parser])
+
+# Check there is no 'yy' left.
+# C++ output relies on namespaces and still uses yy a lot.
+#
+# Check there is no 'YY' left.
+# Ignore comments, YYChar (template parameter), YYPARSE_PARAM
+# (obsolete), YYPUSH_MORE(_DEFINED)?  (constant definition),
+# YY_\w+_INCLUDED (header guards).
+#
+# YYDEBUG (not renamed) can be read, but not changed.
+AT_CHECK([[$PERL -n -0777 -e '
+  s{/\*.*?\*/}{}gs;
+  s{//.*}{}g;
+  s{\b(YYChar
+      |YYPARSE_PARAM
+      |YYPUSH_MORE(_DEFINED)?
+      |YY_\w+_INCLUDED
+      |YY_NULL
+      |(defined|if)\ YYDEBUG
+      )\b}{}gx;
+  while (/^(.*YY.*)$/gm)
+  {
+    print "$ARGV: invalid exported YY: $1\n";
+  }
+  if ($ARGV =~ /\.h$/)
+  {
+    while (/^(.*yy.*)$/gm)
+    {
+      print "$ARGV: invalid exported yy: $1\n";
+    }
+  }
+' -- *.hh *.h]])
+
+# Check that the headers are self-contained, and protected against
+# multiple inclusions.  While at it, check they are sane for C++.
+for h in *.h *.hh
+do
+  # No shell expansion with AT_DATA.
+  cat >$h.cc <<EOF
+AT_DATA_SOURCE_PROLOGUE
+#include "$h"
+#include "$h"
+EOF
+  AT_COMPILE_CXX([$h.o])
+done
+
+# Do this late, so that other checks have been performed.
+AT_SKIP_IF_CANNOT_LINK_C_AND_CXX
+
+AT_COMPILE_CXX([parser], [[x[1-8].o -DCC_IS_CXX=$CC_IS_CXX main.cc]])
+AT_PARSER_CHECK([./parser], [0], [[expout]])
+
+m4_popdef([AT_TEST])
+
+AT_CLEANUP
diff --git a/tests/input.at b/tests/input.at
index 82fbe06..6b87633 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -1,57 +1,97 @@
 # Checking the Bison scanner.                    -*- Autotest -*-
-# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2002-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[Input Processing.]])
 
 # Mostly test that we are robust to mistakes.
 
 
-## ------------ ##
-## Invalid $n.  ##
-## ------------ ##
+## ---------------- ##
+## Invalid inputs.  ##
+## ---------------- ##
 
-AT_SETUP([Invalid dollar-n])
+AT_SETUP([Invalid inputs])
 
 AT_DATA([input.y],
-[[%%
-exp: { $$ = $1 ; };
+[[\000\001\002\377?
+%%
+?
+default: 'a' }
+%&
+%a-does-not-exist
+%-
+%{
 ]])
+AT_CHECK([[$PERL -pi -e 's/\\(\d{3})/chr(oct($1))/ge' input.y || exit 77]])
 
-AT_CHECK([bison input.y], [1], [],
-[[input.y:2.13-14: integer out of range: `$1'
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:1.1-2: error: invalid characters: '\0\001\002\377?'
+input.y:3.1: error: invalid character: '?'
+input.y:4.14: error: invalid character: '}'
+input.y:5.1: error: invalid character: '%'
+input.y:5.2: error: invalid character: '&'
+input.y:6.1-17: error: invalid directive: '%a-does-not-exist'
+input.y:7.1: error: invalid character: '%'
+input.y:7.2: error: invalid character: '-'
+input.y:8.1-9.0: error: missing '%}' at end of file
+input.y:8.1-9.0: error: syntax error, unexpected %{...%}
 ]])
 
 AT_CLEANUP
 
 
+AT_SETUP([Invalid inputs with {}])
+
+# We used to SEGV here.  See
+# http://lists.gnu.org/archive/html/bug-bison/2005-07/msg00053.html
+
+AT_DATA([input.y],
+[[
+%destructor
+%initial-action
+%lex-param
+%parse-param
+%printer
+%union
+]])
+
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:3.1-15: error: syntax error, unexpected %initial-action, expecting {...}
+]])
+
+AT_CLEANUP
+
+
+
 ## ------------ ##
-## Invalid @n.  ##
+## Invalid $n.  ##
 ## ------------ ##
 
-AT_SETUP([Invalid @n])
+AT_SETUP([Invalid $n and @n])
 
 AT_DATA([input.y],
 [[%%
+exp: { $$ = $1 ; };
 exp: { @$ = @1 ; };
 ]])
 
-AT_CHECK([bison input.y], [1], [],
-[[input.y:2.13-14: integer out of range: `@1'
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:2.13-14: error: integer out of range: '$1'
+input.y:3.13-14: error: integer out of range: '@1'
 ]])
 
 AT_CLEANUP
@@ -64,87 +104,365 @@
 AT_SETUP([Type Clashes])
 
 AT_DATA([input.y],
-[[%token foo
+[[%union { int bar; }
+%token foo
 %type <bar> exp
 %%
-exp: foo {} foo
+exp: foo { $$; } foo { $2; } foo
    | foo
    | /* Empty. */
    ;
 ]])
 
-AT_CHECK([bison input.y], [], [],
-[[input.y:4.6-15: warning: type clash on default action: <bar> != <>
-input.y:5.6-8: warning: type clash on default action: <bar> != <>
-input.y:6.5: warning: empty rule for typed nonterminal, and no action
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:5.12-13: error: $$ for the midrule at $2 of 'exp' has no declared type
+input.y:5.24-25: error: $2 of 'exp' has no declared type
+input.y:5.6-32: warning: type clash on default action: <bar> != <>
+input.y:6.6-8: warning: type clash on default action: <bar> != <>
+input.y:7.5: warning: empty rule for typed nonterminal, and no action
 ]])
 
 AT_CLEANUP
 
 
+# _AT_UNUSED_VALUES_DECLARATIONS()
+# --------------------------------
+# Generate the token, type, and destructor
+# declarations for the unused values tests.
+
+m4_define([_AT_UNUSED_VALUES_DECLARATIONS],
+[[[%token <integer> INT;
+%type <integer> a b c d e f g h i j k l;
+%destructor { destroy ($$); } INT a b c d e f g h i j k l;]]])
+
+
+# AT_CHECK_UNUSED_VALUES(DECLARATIONS_AFTER, CHECK_MIDRULE_VALUES)
+# ------------------------------------------------------------------
+# Generate a grammar to test unused values,
+# compile it, run it.  If DECLARATIONS_AFTER
+# is set, then the token, type, and destructor
+# declarations are generated after the rules
+# rather than before.  If CHECK_MIDRULE_VALUES
+# is set, then --warnings=midrule-values is
+# set.
+
+m4_define([AT_CHECK_UNUSED_VALUES],
+[AT_DATA([input.y],
+m4_ifval($1, [
+
+
+], [_AT_UNUSED_VALUES_DECLARATIONS
+])[[%%
+start:
+  'a' a { $]2[; } | 'b' b { $]2[; } | 'c' c { $]2[; } | 'd' d { $]2[; }
+| 'e' e { $]2[; } | 'f' f { $]2[; } | 'g' g { $]2[; } | 'h' h { $]2[; }
+| 'i' i { $]2[; } | 'j' j { $]2[; } | 'k' k { $]2[; } | 'l' l { $]2[; }
+;
+
+a: INT | INT { } INT { } INT { };
+b: INT | /* empty */;
+c: INT | INT { $]1[; } INT { $<integer>2; } INT { $<integer>4; };
+d: INT | INT { } INT { $]1[; } INT { $<integer>2; };
+e: INT | INT { } INT {  } INT { $]1[; };
+f: INT | INT { } INT {  } INT { $]$[ = $]1[ + $]3[ + $]5[; };
+g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+i: INT | INT INT { } { $]$[ = $]1[ + $]2[; };
+j: INT | INT INT { $<integer>$ = 1; } { $]$[ = $]1[ + $]2[; };
+k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+l: INT | INT { $<integer>$ = $<integer>1; } INT { $<integer>$ = $<integer>2 + $<integer>3; } INT { $<integer>$ = $<integer>4 + $<integer>5; };]]m4_ifval($1, [
+_AT_UNUSED_VALUES_DECLARATIONS])
+)
+
+AT_BISON_CHECK(m4_ifval($2, [--warnings=midrule-values ])[-fcaret input.y],
+               [0], [],
+[[input.y:11.10-32: warning: unset value: $][$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: $][1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: $][3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: $][5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+]]m4_ifval($2, [[[input.y:13.14-20: warning: unset value: $][$
+ c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+              ^^^^^^^
+input.y:13.26-41: warning: unset value: $][$
+ c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+                          ^^^^^^^^^^^^^^^^
+]]])[[input.y:13.10-62: warning: unset value: $][$
+ c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: $][3
+ c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: $][5
+ c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+                                           ^^^
+]]m4_ifval($2, [[[input.y:14.14-16: warning: unset value: $][$
+ d: INT | INT { } INT { $][1; } INT { $<integer>2; };
+              ^^^
+]]])[[input.y:14.10-49: warning: unset value: $][$
+ d: INT | INT { } INT { $][1; } INT { $<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: $][3
+ d: INT | INT { } INT { $][1; } INT { $<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: $][5
+ d: INT | INT { } INT { $][1; } INT { $<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: $][$
+ e: INT | INT { } INT {  } INT { $][1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: $][3
+ e: INT | INT { } INT {  } INT { $][1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: $][5
+ e: INT | INT { } INT {  } INT { $][1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: $][$
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: $][1
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^
+]]m4_ifval($2, [[[input.y:17.14-29: warning: unused value: $][2
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+              ^^^^^^^^^^^^^^^^
+]]])[[input.y:17.31-33: warning: unused value: $][3
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                               ^^^
+]]m4_ifval($2, [[[input.y:17.35-50: warning: unused value: $][4
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                                   ^^^^^^^^^^^^^^^^
+]]])[[input.y:17.52-54: warning: unused value: $][5
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: $][$
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: $][1
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: $][3
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                               ^^^
+]]m4_ifval($2, [[[input.y:18.35-64: warning: unused value: $][4
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+]]])[[input.y:18.66-68: warning: unused value: $][5
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                                                                  ^^^
+]]m4_ifval($2, [[[input.y:20.18-37: warning: unused value: $][3
+ j: INT | INT INT { $<integer>$ = 1; } { $][$ = $][1 + $][2; };
+                  ^^^^^^^^^^^^^^^^^^^^
+]]])[[input.y:21.10-68: warning: unset value: $][$
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: $][1
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: $][2
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+              ^^^
+]]m4_ifval($2, [[[input.y:21.35-64: warning: unused value: $][4
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+]]]))
+])
+
 ## --------------- ##
 ## Unused values.  ##
 ## --------------- ##
 
 AT_SETUP([Unused values])
+AT_CHECK_UNUSED_VALUES
+AT_CHECK_UNUSED_VALUES(, [1])
+AT_CLEANUP
 
-AT_DATA([input.y],
-[[%token <integer> INT
-%type <integer> a b c d e f g h i j k l
-%destructor { destroy ($$); } INT a b c d e f g h i j k l
+
+## ------------------------------------------ ##
+## Unused values before symbol declarations.  ##
+## ------------------------------------------ ##
+
+AT_SETUP([Unused values before symbol declarations])
+AT_CHECK_UNUSED_VALUES([1])
+AT_CHECK_UNUSED_VALUES([1], [1])
+AT_CLEANUP
+
+
+## --------------------------------------------- ##
+## Default %printer and %destructor redeclared.  ##
+## --------------------------------------------- ##
+
+AT_SETUP([Default %printer and %destructor redeclared])
+
+AT_DATA([[input.y]],
+[[%destructor { destroy ($$); } <*> <*>
+%printer { print ($$); } <*> <*>
+
+%destructor { destroy ($$); } <*>
+%printer { print ($$); } <*>
+
+%destructor { destroy ($$); } <> <>
+%printer { print ($$); } <> <>
+
+%destructor { destroy ($$); } <>
+%printer { print ($$); } <>
+
 %%
-start:
-  'a' a { $2 } | 'b' b { $2 } | 'c' c { $2 } | 'd' d { $2 } | 'e' e { $2 }
-| 'f' f { $2 } | 'g' g { $2 } | 'h' h { $2 } | 'i' i { $2 } | 'j' j { $2 }
-| 'k' k { $2 } | 'l' l { $2 }
-;
 
-a: INT | INT { } INT { } INT { };
-b: INT | /* empty */;
-c: INT | INT { $1 } INT { } INT { };
-d: INT | INT { } INT { $1 } INT { };
-e: INT | INT { } INT {  } INT { $1 };
-f: INT | INT { } INT {  } INT { $$ = $1 + $3 + $5; };
-g: INT | INT { $$ } INT { $$ } INT { };
-h: INT | INT { $$ } INT { $$ = $2 } INT { };
-i: INT | INT INT { } { $$ = $1 + $2; };
-j: INT | INT INT { $<integer>$ = 1; } { $$ = $1 + $2; };
-k: INT | INT INT { $$; } { $$ = $3; } { };
-l: INT | INT { $$ = $1; } INT { $$ = $2 + $3; } INT { $$ = $4 + $5; };
+start: ;
 
+%destructor { destroy ($$); } <*>;
+%printer { print ($$); } <*>;
+
+%destructor { destroy ($$); } <>;
+%printer { print ($$); } <>;
 ]])
 
-AT_CHECK([bison input.y], [], [],
-[[input.y:11.10-32: warning: unset value: $$
-input.y:11.10-32: warning: unused value: $1
-input.y:11.10-32: warning: unused value: $3
-input.y:11.10-32: warning: unused value: $5
-input.y:12.9: warning: empty rule for typed nonterminal, and no action
-input.y:13.10-35: warning: unset value: $$
-input.y:13.10-35: warning: unused value: $3
-input.y:13.10-35: warning: unused value: $5
-input.y:14.10-35: warning: unset value: $$
-input.y:14.10-35: warning: unused value: $3
-input.y:14.10-35: warning: unused value: $5
-input.y:15.10-36: warning: unset value: $$
-input.y:15.10-36: warning: unused value: $3
-input.y:15.10-36: warning: unused value: $5
-input.y:17.10-38: warning: unset value: $$
-input.y:17.10-38: warning: unused value: $1
-input.y:17.10-38: warning: unused value: $2
-input.y:17.10-38: warning: unused value: $3
-input.y:17.10-38: warning: unused value: $4
-input.y:17.10-38: warning: unused value: $5
-input.y:18.10-43: warning: unset value: $$
-input.y:18.10-43: warning: unused value: $1
-input.y:18.10-43: warning: unused value: $3
-input.y:18.10-43: warning: unused value: $4
-input.y:18.10-43: warning: unused value: $5
-input.y:20.10-55: warning: unused value: $3
-input.y:21.10-41: warning: unset value: $$
-input.y:21.10-41: warning: unused value: $1
-input.y:21.10-41: warning: unused value: $2
-input.y:21.10-41: warning: unused value: $4
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:1.13-29: error: redeclaration for default tagged %destructor
+input.y:1.13-29:     previous declaration
+input.y:2.10-24: error: redeclaration for default tagged %printer
+input.y:2.10-24:     previous declaration
+input.y:4.13-29: error: redeclaration for default tagged %destructor
+input.y:1.13-29:     previous declaration
+input.y:5.10-24: error: redeclaration for default tagged %printer
+input.y:2.10-24:     previous declaration
+input.y:7.13-29: error: redeclaration for default tagless %destructor
+input.y:7.13-29:     previous declaration
+input.y:8.10-24: error: redeclaration for default tagless %printer
+input.y:8.10-24:     previous declaration
+input.y:10.13-29: error: redeclaration for default tagless %destructor
+input.y:7.13-29:      previous declaration
+input.y:11.10-24: error: redeclaration for default tagless %printer
+input.y:8.10-24:      previous declaration
+input.y:17.13-29: error: redeclaration for default tagged %destructor
+input.y:4.13-29:      previous declaration
+input.y:18.10-24: error: redeclaration for default tagged %printer
+input.y:5.10-24:      previous declaration
+input.y:20.13-29: error: redeclaration for default tagless %destructor
+input.y:10.13-29:     previous declaration
+input.y:21.10-24: error: redeclaration for default tagless %printer
+input.y:11.10-24:     previous declaration
+]])
+
+AT_CLEANUP
+
+
+## ---------------------------------------------- ##
+## Per-type %printer and %destructor redeclared.  ##
+## ---------------------------------------------- ##
+
+AT_SETUP([Per-type %printer and %destructor redeclared])
+
+AT_DATA([[input.y]],
+[[%destructor { destroy ($$); } <field1> <field2>
+%printer { print ($$); } <field1> <field2>
+
+%destructor { destroy ($$); } <field1> <field1>
+%printer { print ($$); } <field2> <field2>
+
+%%
+
+start: ;
+
+%destructor { destroy ($$); } <field2> <field1>;
+%printer { print ($$); } <field2> <field1>;
+]])
+
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:4.13-29: error: %destructor redeclaration for <field1>
+input.y:1.13-29:     previous declaration
+input.y:4.13-29: error: %destructor redeclaration for <field1>
+input.y:4.13-29:     previous declaration
+input.y:5.10-24: error: %printer redeclaration for <field2>
+input.y:2.10-24:     previous declaration
+input.y:5.10-24: error: %printer redeclaration for <field2>
+input.y:5.10-24:     previous declaration
+input.y:11.13-29: error: %destructor redeclaration for <field1>
+input.y:4.13-29:      previous declaration
+input.y:11.13-29: error: %destructor redeclaration for <field2>
+input.y:1.13-29:      previous declaration
+input.y:12.10-24: error: %printer redeclaration for <field1>
+input.y:2.10-24:      previous declaration
+input.y:12.10-24: error: %printer redeclaration for <field2>
+input.y:5.10-24:      previous declaration
+]])
+
+AT_CLEANUP
+
+
+## ---------------------------------------- ##
+## Unused values with default %destructor.  ##
+## ---------------------------------------- ##
+
+AT_SETUP([Unused values with default %destructor])
+
+AT_DATA([[input.y]],
+[[%destructor { destroy ($$); } <>
+%type <tag> tagged
+
+%%
+
+start: end end tagged tagged { $<tag>1; $3; } ;
+end: { } ;
+tagged: { } ;
+]])
+
+AT_BISON_CHECK([input.y], [0], [],
+[[input.y:6.8-45: warning: unset value: $$
+input.y:6.12-14: warning: unused value: $2
+input.y:7.6-8: warning: unset value: $$
+]])
+
+AT_DATA([[input.y]],
+[[%destructor { destroy ($$); } <*>
+%type <tag> tagged
+
+%%
+
+start: end end tagged tagged { $<tag>1; $3; } ;
+end: { } ;
+tagged: { } ;
+]])
+
+AT_BISON_CHECK([input.y], [0], [],
+[[input.y:6.23-28: warning: unused value: $4
+input.y:8.9-11: warning: unset value: $$
+]])
+
+AT_CLEANUP
+
+
+## ----------------------------------------- ##
+## Unused values with per-type %destructor.  ##
+## ----------------------------------------- ##
+
+AT_SETUP([Unused values with per-type %destructor])
+
+AT_DATA([[input.y]],
+[[%destructor { destroy ($$); } <field1>
+%type <field1> start end
+
+%%
+
+start: end end { $1; } ;
+end: { }  ;
+]])
+
+AT_BISON_CHECK([input.y], [0], [],
+[[input.y:6.8-22: warning: unset value: $$
+input.y:6.12-14: warning: unused value: $2
+input.y:7.6-8: warning: unset value: $$
 ]])
 
 AT_CLEANUP
@@ -173,15 +491,15 @@
 exp: foo;
 ]])
 
-AT_CHECK([bison input.y], [1], [],
-[[input.y:8.7-11: %type redeclaration for foo
-input.y:3.7-11: first declaration
-input.y:10.13-17: %destructor redeclaration for foo
-input.y:5.13-17: first declaration
-input.y:9.10-14: %printer redeclaration for foo
-input.y:10.13-17: first declaration
-input.y:11.1-5: %left redeclaration for foo
-input.y:6.1-5: first declaration
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:8.7-11: error: %type redeclaration for foo
+input.y:3.7-11:     previous declaration
+input.y:10.13-17: error: %destructor redeclaration for foo
+input.y:5.13-17:      previous declaration
+input.y:9.10-14: error: %printer redeclaration for foo
+input.y:4.10-14:     previous declaration
+input.y:11.1-5: error: %left redeclaration for foo
+input.y:6.1-5:      previous declaration
 ]])
 
 AT_CLEANUP
@@ -197,18 +515,18 @@
 
 AT_SETUP([Torturing the Scanner])
 
-
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA([input.y], [])
-AT_CHECK([bison input.y], [1], [],
-[[input.y:1.1: syntax error, unexpected end of file
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:1.1: error: syntax error, unexpected end of file
 ]])
 
 
-AT_DATA([input.y], 
+AT_DATA([input.y],
 [{}
 ])
-AT_CHECK([bison input.y], [1], [],
-[[input.y:1.1-2: syntax error, unexpected {...}
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:1.1-2: error: syntax error, unexpected {...}
 ]])
 
 
@@ -247,6 +565,8 @@
 #endif
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
 %}
 /* %{ and %} can be here too. */
 
@@ -273,8 +593,8 @@
 %}
 
 %{
-static void yyerror (const char *s);
-static int yylex (void);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
 %}
 
 %type <ival> '@<:@'
@@ -306,25 +626,21 @@
   res.ival = val;
   return res;
 }
-
+]AT_YYERROR_DEFINE[
 static int
 yylex (void)
 {
-  static const char *input = "@<:@\1\2$@{@oline@__@&t@oline__\
+  static char const input[] = "@<:@\1\2$@{@oline@__@&t@oline__\
 #output "; /* "
   */
-  yylval = value_as_yystype (*input);
-  return *input++;
-}
-
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
+  static size_t toknum;
+  assert (toknum < sizeof input);
+  yylval = value_as_yystype (input[toknum]);
+  return input[toknum++];
 }
 ]])
 
-# Pacify Emacs'font-lock-mode: "
+# Pacify Emacs' font-lock-mode: "
 
 AT_DATA([main.c],
 [[typedef int value;
@@ -338,10 +654,11 @@
   return yyparse ();
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([bison -d -v -o input.c input.y])
-AT_COMPILE([input.o], [-c input.c])
-AT_COMPILE([main.o], [-c main.c])
+AT_BISON_CHECK([-d -v -o input.c input.y])
+AT_COMPILE([input.o])
+AT_COMPILE([main.o])
 AT_COMPILE([input], [input.o main.o])
 AT_PARSER_CHECK([./input], 0,
 [[[@<:@],
@@ -370,7 +687,7 @@
 %%
 ]])
 
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
 
 AT_CLEANUP
 
@@ -386,7 +703,7 @@
 %%
 empty_file:;
 ]])
-AT_CHECK([bison -o input.c input.y], $2, [], ignore)
+AT_BISON_CHECK([-o input.c input.y], $2, [], ignore)
 AT_CLEANUP
 ])
 
@@ -394,3 +711,914 @@
 AT_CHECK_REQUIRE(AT_PACKAGE_VERSION, 0)
 ## FIXME: Some day augment this version number.
 AT_CHECK_REQUIRE(100.0, 63)
+
+
+## ------------------------------------- ##
+## String aliases for character tokens.  ##
+## ------------------------------------- ##
+
+AT_SETUP([String aliases for character tokens])
+
+# Bison once thought a character token and its alias were different symbols
+# with the same user token number.
+
+AT_DATA_GRAMMAR([input.y],
+[[%token 'a' "a"
+%%
+start: 'a';
+%%
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+
+AT_CLEANUP
+
+
+## -------------- ##
+## Symbol names.  ##
+## -------------- ##
+
+AT_SETUP([Symbols])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[%token WITH-DASH
+%token WITHOUT_DASH "WITHOUT-DASH"
+%token WITH.PERIOD
+%token WITHOUT_PERIOD "WITHOUT.PERIOD"
+%code {
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+%%
+start: with-dash without_dash with.period without_period;
+with-dash: WITH-DASH;
+without_dash: "WITHOUT-DASH";
+with.period: WITH.PERIOD;
+without_period: "WITHOUT.PERIOD";
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+]])
+AT_BISON_OPTION_POPDEFS
+
+# POSIX Yacc accept periods, but not dashes.
+AT_BISON_CHECK([--yacc input.y], [1], [],
+[[input.y:9.8-16: POSIX Yacc forbids dashes in symbol names: WITH-DASH
+input.y:18.8-16: POSIX Yacc forbids dashes in symbol names: with-dash
+]])
+
+# So warn about them.
+AT_BISON_CHECK([-Wyacc input.y], [], [],
+[[input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH
+input.y:18.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash
+]])
+
+# Dashes are fine for GNU Bison.
+AT_BISON_CHECK([-o input.c input.y])
+
+# Make sure we don't export silly token identifiers with periods or dashes.
+AT_COMPILE([input.o])
+
+
+# Periods are genuine letters, they can start identifiers.
+# Digits and dashes cannot.
+AT_DATA_GRAMMAR([input.y],
+[[%token .GOOD
+         -GOOD
+         1NV4L1D
+         -123
+%%
+start: .GOOD GOOD
+]])
+AT_BISON_CHECK([-o input.c input.y], [1], [],
+[[input.y:10.10: error: invalid character: '-'
+input.y:11.10-16: error: invalid identifier: '1NV4L1D'
+input.y:12.10: error: invalid character: '-'
+]])
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## Numbered tokens.  ##
+## ----------------- ##
+
+AT_SETUP([Numbered tokens])
+
+AT_DATA_GRAMMAR([redecl.y],
+[[%token DECIMAL_1     11259375
+         HEXADECIMAL_1 0xabcdef
+         HEXADECIMAL_2 0xFEDCBA
+         DECIMAL_2     16702650
+%%
+start: DECIMAL_1 HEXADECIMAL_2;
+]])
+
+AT_BISON_CHECK([redecl.y], [1], [],
+[[redecl.y:10.10-22: error: user token number 11259375 redeclaration for HEXADECIMAL_1
+redecl.y:9.8-16:       previous declaration for DECIMAL_1
+redecl.y:12.10-18: error: user token number 16702650 redeclaration for DECIMAL_2
+redecl.y:11.10-22:     previous declaration for HEXADECIMAL_2
+]])
+
+AT_DATA_GRAMMAR([too-large.y],
+[[%token TOO_LARGE_DEC 999999999999999999999
+         TOO_LARGE_HEX 0xFFFFFFFFFFFFFFFFFFF
+%%
+start: TOO_LARGE_DEC TOO_LARGE_HEX
+%%
+]])
+
+AT_BISON_CHECK([too-large.y], [1], [],
+[[too-large.y:9.22-42: error: integer out of range: '999999999999999999999'
+too-large.y:10.24-44: error: integer out of range: '0xFFFFFFFFFFFFFFFFFFF'
+]])
+
+AT_CLEANUP
+
+
+## --------------------- ##
+## Unclosed constructs.  ##
+## --------------------- ##
+
+AT_SETUP([Unclosed constructs])
+
+# Bison's scan-gram.l once forgot to STRING_FINISH some unclosed constructs, so
+# they were prepended to whatever it STRING_GROW'ed next.  It also threw them
+# away rather than returning them to the parser.  The effect was confusing
+# subsequent error messages.
+
+AT_DATA([input.y],
+[[%token A "a
+%token B "b"
+%token AB "ab" // Used to complain that "ab" was already used.
+%token C '1
+%token TWO "2"
+%token TICK_TWELVE "'12" // Used to complain that "'12" was already used.
+
+%%
+
+start: ;
+
+// Used to report a syntax error because it didn't see any kind of symbol
+// identifier.
+%type <f> 'a
+;
+%type <f> "a
+;
+// Used to report a syntax error because it didn't see braced code.
+%destructor { free ($$)
+]])
+
+AT_BISON_CHECK([-o input.c input.y], 1, [],
+[[input.y:1.10-2.0: error: missing '"' at end of line
+input.y:4.10-5.0: error: missing "'" at end of line
+input.y:14.11-15.0: error: missing "'" at end of line
+input.y:16.11-17.0: error: missing '"' at end of line
+input.y:19.13-20.0: error: missing '}' at end of file
+input.y:20.1: error: syntax error, unexpected end of file
+]])
+
+AT_BISON_CHECK([-fcaret -o input.c input.y], 1, [],
+[[input.y:1.10-2.0: error: missing '"' at end of line
+ %token A "a
+          ^^
+input.y:4.10-5.0: error: missing "'" at end of line
+ %token C '1
+          ^^
+input.y:14.11-15.0: error: missing "'" at end of line
+ %type <f> 'a
+           ^^
+input.y:16.11-17.0: error: missing '"' at end of line
+ %type <f> "a
+           ^^
+input.y:19.13-20.0: error: missing '}' at end of file
+ %destructor { free ($$)
+             ^^^^^^^^^^^
+input.y:20.1: error: syntax error, unexpected end of file
+]])
+
+AT_CLEANUP
+
+
+## ------------------------- ##
+## %start after first rule.  ##
+## ------------------------- ##
+
+AT_SETUP([%start after first rule])
+
+# Bison once complained that a %start after the first rule was a redeclaration
+# of the start symbol.
+
+AT_DATA([input.y],
+[[%%
+false_start: ;
+start: false_start ;
+%start start;
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+
+AT_CLEANUP
+
+
+## --------------------- ##
+## %prec takes a token.  ##
+## --------------------- ##
+
+AT_SETUP([%prec takes a token])
+
+# Bison once allowed %prec sym where sym was a nonterminal.
+
+AT_DATA([input.y],
+[[%%
+start: PREC %prec PREC ;
+PREC: ;
+]])
+
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:3.1-4: error: rule given for PREC, which is a token
+]])
+
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## %prec's token must be defined.  ##
+## ------------------------------- ##
+
+AT_SETUP([[%prec's token must be defined]])
+
+# According to POSIX, a %prec token must be defined separately.
+
+AT_DATA([[input.y]],
+[[%%
+start: %prec PREC ;
+]])
+
+AT_BISON_CHECK([[input.y]], [[0]], [],
+[[input.y:2.8-17: warning: token for %prec is not defined: PREC
+]])
+
+AT_CLEANUP
+
+
+## -------------------------------- ##
+## Reject unused %code qualifiers.  ##
+## -------------------------------- ##
+
+AT_SETUP([Reject unused %code qualifiers])
+
+AT_DATA([input-c.y],
+[[%code q {}
+%code bad {}
+%code bad {}
+%code format {}
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input-c.y]], [[1]], [],
+[[input-c.y:1.7: error: %code qualifier 'q' is not used
+input-c.y:2.7-9: error: %code qualifier 'bad' is not used
+input-c.y:3.7-9: error: %code qualifier 'bad' is not used
+input-c.y:4.7-12: error: %code qualifier 'format' is not used
+]])
+
+AT_DATA([input-c-glr.y],
+[[%code q {}
+%code bad {}
+ %code bad {}
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input-c-glr.y]], [[1]], [],
+[[input-c-glr.y:1.7: error: %code qualifier 'q' is not used
+input-c-glr.y:2.7-9: error: %code qualifier 'bad' is not used
+input-c-glr.y:3.8-10: error: %code qualifier 'bad' is not used
+]])
+
+AT_DATA([input-c++.y],
+[[%code q {}
+%code bad {}
+ %code q {}
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input-c++.y]], [[1]], [],
+[[input-c++.y:1.7: error: %code qualifier 'q' is not used
+input-c++.y:2.7-9: error: %code qualifier 'bad' is not used
+input-c++.y:3.8: error: %code qualifier 'q' is not used
+]])
+
+AT_DATA([input-c++-glr.y],
+[[%code bad {}
+%code q {}
+%code q {}
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input-c++-glr.y]], [[1]], [],
+[[input-c++-glr.y:1.7-9: error: %code qualifier 'bad' is not used
+input-c++-glr.y:2.7: error: %code qualifier 'q' is not used
+input-c++-glr.y:3.7: error: %code qualifier 'q' is not used
+]])
+
+AT_DATA([special-char-@@.y],
+[[%code bad {}
+%code q {}
+%code q {}
+%%
+start: ;
+]])
+AT_BISON_CHECK([[special-char-@@.y]], [[1]], [],
+[[special-char-@@.y:1.7-9: error: %code qualifier 'bad' is not used
+special-char-@@.y:2.7: error: %code qualifier 'q' is not used
+special-char-@@.y:3.7: error: %code qualifier 'q' is not used
+]])
+
+AT_DATA([special-char-@:>@.y],
+[[%code bad {}
+%code q {}
+%code q {}
+%%
+start: ;
+]])
+AT_BISON_CHECK([[special-char-@:>@.y]], [[1]], [],
+[[special-char-@:>@.y:1.7-9: error: %code qualifier 'bad' is not used
+special-char-@:>@.y:2.7: error: %code qualifier 'q' is not used
+special-char-@:>@.y:3.7: error: %code qualifier 'q' is not used
+]])
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## %define errors.  ##
+## ---------------- ##
+
+AT_SETUP([%define errors])
+
+AT_DATA([input-redefined.y],
+[[%define var "value1"
+%define var "value1"
+ %define var "value2"
+%define special1 "@:>@"
+%define special2 "@<:@"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input-redefined.y]], [[1]], [],
+[[input-redefined.y:2.9-11: error: %define variable 'var' redefined
+input-redefined.y:1.9-11:     previous definition
+input-redefined.y:3.10-12: error: %define variable 'var' redefined
+input-redefined.y:2.9-11:      previous definition
+]])
+
+AT_DATA([input-unused.y],
+[[%define var "value"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input-unused.y]], [[1]], [],
+[[input-unused.y:1.9-11: error: %define variable 'var' is not used
+]])
+
+AT_CLEANUP
+
+
+## ----------------------------------- ##
+## %define, --define, --force-define.  ##
+## ----------------------------------- ##
+
+AT_SETUP([[%define, --define, --force-define]])
+
+AT_DATA([[skel.c]],
+[[m4@&t@_divert_push(0)@
+@output(b4_parser_file_name@)@
+[var-dd: ]b4_percent_define_get([[var-dd]])[
+var-ff: ]b4_percent_define_get([[var-ff]])[
+var-dfg: ]b4_percent_define_get([[var-dfg]])[
+var-fd: ]b4_percent_define_get([[var-fd]])
+m4@&t@_divert_pop(0)
+]])
+AT_DATA([[input.y]],
+[[%define var-dfg "gram"
+%%
+start: ;
+]])
+AT_BISON_CHECK([[-Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \
+                 -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \
+                 -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \
+                 -Fvar-fd=cmd-f -Dvar-fd=cmd-d   \
+                 --skeleton ./skel.c input.y]])
+AT_CHECK([[cat input.tab.c]], [[0]],
+[[var-dd: cmd-d2
+var-ff: cmd-f2
+var-dfg: cmd-f
+var-fd: cmd-d
+]])
+
+AT_DATA([[input-dg.y]],
+[[%define var "gram"
+%%
+start: ;
+]])
+AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [],
+[[input-dg.y:1.9-11: error: %define variable 'var' redefined
+<command line>:1:      previous definition
+]])
+
+AT_DATA([[input-dg.y]],
+[[%define var "gram"
+%%
+start: ;
+]])
+AT_BISON_CHECK([[-fcaret -Dvar=cmd-d input-dg.y]], [[1]], [],
+[[input-dg.y:1.9-11: error: %define variable 'var' redefined
+ %define var "gram"
+         ^^^
+<command line>:2:      previous definition
+]])
+
+AT_DATA([[input-unused.y]],
+[[%%
+start: ;
+]])
+AT_BISON_CHECK([[-Dunused-d -Funused-f input-unused.y]], [[1]], [],
+[[<command line>:1: error: %define variable 'unused-d' is not used
+<command line>:2: error: %define variable 'unused-f' is not used
+]])
+
+AT_CLEANUP
+
+## --------------------------- ##
+## %define Boolean variables.  ##
+## --------------------------- ##
+
+AT_SETUP([[%define Boolean variables]])
+
+AT_DATA([Input.y],
+[[%language "Java"
+%define public "maybe"
+%define parser_class_name "Input"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[Input.y]], [1], [],
+[[Input.y:2.9-14: error: invalid value for %define Boolean variable 'public'
+]])
+
+AT_CLEANUP
+
+## ------------------------ ##
+## %define enum variables.  ##
+## ------------------------ ##
+
+AT_SETUP([[%define enum variables]])
+
+# Front-end.
+AT_DATA([[input.y]],
+[[%define lr.default-reductions bogus
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input.y]], [[1]], [[]],
+[[input.y:1.9-29: error: invalid value for %define variable 'lr.default-reductions': 'bogus'
+input.y:1.9-29:     accepted value: 'most'
+input.y:1.9-29:     accepted value: 'consistent'
+input.y:1.9-29:     accepted value: 'accepting'
+]])
+
+# Back-end.
+# FIXME: these should be indented, but we shouldn't mess with the m4 yet
+AT_DATA([[input.y]],
+[[%define api.push-pull neither
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input.y]], [1], [],
+[[input.y:1.9-21: error: invalid value for %define variable 'api.push-pull': 'neither'
+input.y:1.9-21: error: accepted value: 'pull'
+input.y:1.9-21: error: accepted value: 'push'
+input.y:1.9-21: error: accepted value: 'both'
+]])
+
+AT_CLEANUP
+
+## -------------------------------- ##
+## %define backward compatibility.  ##
+## -------------------------------- ##
+
+AT_SETUP([[%define backward compatibility]])
+
+# The error messages tell us whether underscores in these variables are
+# being converted to dashes.
+
+AT_DATA([[input.y]],
+[[%define api.push_pull "neither"
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input.y]], [1], [],
+[[input.y:1.9-21: error: invalid value for %define variable 'api.push-pull': 'neither'
+input.y:1.9-21: error: accepted value: 'pull'
+input.y:1.9-21: error: accepted value: 'push'
+input.y:1.9-21: error: accepted value: 'both'
+]])
+
+AT_DATA([[input.y]],
+[[%define lr.keep_unreachable_states maybe
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input.y]], [1], [],
+[[input.y:1.9-34: error: invalid value for %define Boolean variable 'lr.keep-unreachable-states'
+]])
+
+AT_DATA([[input.y]],
+[[%define foo_bar "baz"
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input.y]], [[1]], [],
+[[input.y:1.9-15: error: %define variable 'foo_bar' is not used
+]])
+
+AT_CLEANUP
+
+## ------------------------- ##
+## Unused %define api.pure.  ##
+## ------------------------- ##
+
+AT_SETUP([[Unused %define api.pure]])
+
+# AT_CHECK_API_PURE(DECLS, VALUE)
+# -------------------------------
+# Make sure Bison reports that `%define api.pure VALUE' is unused when DECLS
+# are specified.
+m4_define([AT_CHECK_API_PURE],
+[
+AT_DATA([[input.y]],
+[[%define api.pure ]$2[
+]$1[
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input.y]], [[1]], [],
+[[input.y:1.9-16: error: %define variable 'api.pure' is not used
+]])
+])
+
+AT_CHECK_API_PURE([[%language "c++" %defines]], [[]])
+AT_CHECK_API_PURE([[%language "c++" %defines]], [[false]])
+AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [[""]])
+AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [[false]])
+AT_CHECK_API_PURE([[%language "java"]], [[true]])
+AT_CHECK_API_PURE([[%language "java"]], [[false]])
+
+AT_CLEANUP
+
+## -------------------------------- ##
+## C++ namespace reference errors.  ##
+## -------------------------------- ##
+
+AT_SETUP([[C++ namespace reference errors]])
+
+# AT_CHECK_NAMESPACE_ERROR(NAMESPACE-DECL, ERROR, [ERROR], ...)
+# -------------------------------------------------------------
+# Make sure Bison reports all ERROR's for %define namespace "NAMESPACE-DECL".
+m4_define([AT_CHECK_NAMESPACE_ERROR],
+[
+AT_DATA([[input.y]],
+[[%language "C++"
+%defines
+%define namespace "]$1["
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input.y]], [1], [],
+[m4_foreach([b4_arg], m4_dquote(m4_shift($@)),
+[[input.y:3.9-17: error: ]b4_arg[
+]])])
+])
+
+AT_CHECK_NAMESPACE_ERROR([[]],
+                         [[namespace reference is empty]])
+AT_CHECK_NAMESPACE_ERROR([[ 		  	 	]],
+                         [[namespace reference is empty]])
+AT_CHECK_NAMESPACE_ERROR([[foo::::bar]],
+                         [[namespace reference has consecutive "::"]])
+AT_CHECK_NAMESPACE_ERROR([[foo:: 	::bar]],
+                         [[namespace reference has consecutive "::"]])
+AT_CHECK_NAMESPACE_ERROR([[::::bar]],
+                         [[namespace reference has consecutive "::"]])
+AT_CHECK_NAMESPACE_ERROR([[:: ::bar]],
+                         [[namespace reference has consecutive "::"]])
+AT_CHECK_NAMESPACE_ERROR([[foo::bar::	::]],
+                         [[namespace reference has consecutive "::"]],
+                         [[namespace reference has a trailing "::"]])
+AT_CHECK_NAMESPACE_ERROR([[foo::bar::]],
+                         [[namespace reference has a trailing "::"]])
+AT_CHECK_NAMESPACE_ERROR([[foo::bar:: 	]],
+                         [[namespace reference has a trailing "::"]])
+AT_CHECK_NAMESPACE_ERROR([[::]],
+                         [[namespace reference has a trailing "::"]])
+
+AT_CLEANUP
+
+## ------------------------ ##
+## Bad character literals.  ##
+## ------------------------ ##
+
+# Bison used to accept character literals that were empty or contained
+# too many characters.
+
+# FIXME: AT_DATA or some variant of AT_DATA may eventually permit
+# the final newline to be omitted.  See the threads starting at
+# <http://lists.gnu.org/archive/html/bison-patches/2009-07/msg00019.html>.
+
+AT_SETUP([[Bad character literals]])
+
+AT_DATA([empty.y],
+[[%%
+start: '';
+start: '
+]])
+AT_CHECK([[$PERL -e "print 'start: \'';" >> empty.y || exit 77]])
+
+AT_BISON_CHECK([empty.y], [1], [],
+[[empty.y:2.8-9: warning: empty character literal
+empty.y:3.8-4.0: warning: empty character literal
+empty.y:3.8-4.0: error: missing "'" at end of line
+empty.y:4.8: warning: empty character literal
+empty.y:4.8: error: missing "'" at end of file
+]])
+
+AT_DATA([two.y],
+[[%%
+start: 'ab';
+start: 'ab
+]])
+AT_CHECK([[$PERL -e "print 'start: \'ab';" >> two.y || exit 77]])
+
+AT_BISON_CHECK([two.y], [1], [],
+[[two.y:2.8-11: warning: extra characters in character literal
+two.y:3.8-4.0: warning: extra characters in character literal
+two.y:3.8-4.0: error: missing "'" at end of line
+two.y:4.8-10: warning: extra characters in character literal
+two.y:4.8-10: error: missing "'" at end of file
+]])
+
+AT_DATA([three.y],
+[[%%
+start: 'abc';
+start: 'abc
+]])
+AT_CHECK([[$PERL -e "print 'start: \'abc';" >> three.y || exit 77]])
+
+AT_BISON_CHECK([three.y], [1], [],
+[[three.y:2.8-12: warning: extra characters in character literal
+three.y:3.8-4.0: warning: extra characters in character literal
+three.y:3.8-4.0: error: missing "'" at end of line
+three.y:4.8-11: warning: extra characters in character literal
+three.y:4.8-11: error: missing "'" at end of file
+]])
+
+AT_CLEANUP
+
+## ------------------------- ##
+## Bad escapes in literals.  ##
+## ------------------------- ##
+
+AT_SETUP([[Bad escapes in literals]])
+
+AT_DATA([input.y],
+[[%%
+start: '\777' '\0' '\xfff' '\x0'
+       '\uffff' '\u0000' '\Uffffffff' '\U00000000'
+       '\ ' '\A';
+]])
+
+# It is not easy to create special characters, we cannot even trust tr.
+# Beside we cannot even expect "echo '\0'" to output two characters
+# (well three with \n): at least Bash 3.2 converts the two-character
+# sequence "\0" into a single NUL character.
+AT_CHECK([[$PERL -e 'print "start: \"\\\t\\\f\\\0\\\1\" ;";' >> input.y \
+           || exit 77]])
+
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:2.9-12: error: invalid number after \-escape: 777
+input.y:2.8-13: warning: empty character literal
+input.y:2.16-17: error: invalid number after \-escape: 0
+input.y:2.15-18: warning: empty character literal
+input.y:2.21-25: error: invalid number after \-escape: xfff
+input.y:2.20-26: warning: empty character literal
+input.y:2.29-31: error: invalid number after \-escape: x0
+input.y:2.28-32: warning: empty character literal
+input.y:3.9-14: error: invalid number after \-escape: uffff
+input.y:3.8-15: warning: empty character literal
+input.y:3.18-23: error: invalid number after \-escape: u0000
+input.y:3.17-24: warning: empty character literal
+input.y:3.27-36: error: invalid number after \-escape: Uffffffff
+input.y:3.26-37: warning: empty character literal
+input.y:3.40-49: error: invalid number after \-escape: U00000000
+input.y:3.39-50: warning: empty character literal
+input.y:4.9-10: error: invalid character after \-escape: ' '
+input.y:4.8-11: warning: empty character literal
+input.y:4.14-15: error: invalid character after \-escape: A
+input.y:4.13-16: warning: empty character literal
+input.y:5.9-16: error: invalid character after \-escape: \t
+input.y:5.17: error: invalid character after \-escape: \f
+input.y:5.18: error: invalid character after \-escape: \0
+input.y:5.19: error: invalid character after \-escape: \001
+]])
+
+AT_CLEANUP
+
+## ------------------------- ##
+## LAC: Errors for %define.  ##
+## ------------------------- ##
+
+AT_SETUP([[LAC: Errors for %define]])
+
+AT_DATA([[input.y]],
+[[%%
+start: ;
+]])
+
+# parse.lac.* options are useless if LAC isn't actually activated.
+AT_BISON_CHECK([[-Dparse.lac.es-capacity-initial=1 input.y]],
+               [[1]], [],
+[[<command line>:1: error: %define variable 'parse.lac.es-capacity-initial' is not used
+]])
+AT_BISON_CHECK([[-Dparse.lac.memory-trace=full input.y]],
+               [[1]], [],
+[[<command line>:1: error: %define variable 'parse.lac.memory-trace' is not used
+]])
+
+AT_CLEANUP
+
+## --------------------------------------------- ##
+## -Werror is not affected by -Wnone and -Wall.  ##
+## --------------------------------------------- ##
+
+AT_SETUP([[-Werror is not affected by -Wnone and -Wall]])
+
+AT_DATA([[input.y]],
+[[%%
+foo-bar: ;
+]])
+
+# -Werror is not enabled by -Wall or equivalent.
+AT_BISON_CHECK([[-Wall input.y]], [[0]], [[]],
+[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+]])
+AT_BISON_CHECK([[-W input.y]], [[0]], [[]],
+[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+]])
+AT_BISON_CHECK([[-Wno-none input.y]], [[0]], [[]],
+[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+]])
+
+# -Werror is not disabled by -Wnone or equivalent.
+AT_BISON_CHECK([[-Werror,none,yacc input.y]], [[1]], [[]], [[stderr]])
+AT_CHECK([[sed 's/^.*bison:/bison:/' stderr]], [[0]],
+[[bison: warnings being treated as errors
+input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+]])
+[mv stderr experr]
+AT_BISON_CHECK([[-Werror,no-all,yacc input.y]], [[1]], [[]], [[experr]])
+
+AT_CLEANUP
+
+
+## ------------------------------------------------------ ##
+## %name-prefix and %define api.prefix are incompatible.  ##
+## ------------------------------------------------------ ##
+
+AT_SETUP([[%name-prefix and %define api.prefix are incompatible]])
+
+# AT_TEST(DIRECTIVES, OPTIONS, ERROR-LOCATION)
+# --------------------------------------------
+m4_pushdef([AT_TEST],
+[AT_DATA([[input.y]],
+[[$1
+%%
+exp:;
+]])
+AT_BISON_CHECK([[$2 input.y]], [[1]], [[]],
+[[$3: error: '%name-prefix' and '%define api.prefix' cannot be used together
+]])
+])
+
+AT_TEST([%define api.prefix foo %name-prefix "bar"], [], [input.y:1.9-18])
+AT_TEST([], [-Dapi.prefix=foo -p bar], [<command line>:1])
+AT_TEST([%name-prefix "bar"], [-Dapi.prefix=foo], [<command line>:1])
+AT_TEST([%define api.prefix foo], [-p bar], [input.y:1.9-18])
+
+m4_popdef([AT_TEST])
+
+AT_CLEANUP
+
+
+## -------------- ##
+## Stray $ or @.  ##
+## -------------- ##
+
+AT_SETUP([[Stray $ or @]])
+
+# Give %printer and %destructor "<*> exp TOK" instead of "<*>" to
+# check that the warnings are reported once, not three times.
+
+AT_DATA_GRAMMAR([[input.y]],
+[[%token TOK
+%destructor     { $%; @%; } <*> exp TOK;
+%initial-action { $%; @%; };
+%printer        { $%; @%; } <*> exp TOK;
+%%
+exp: TOK        { $%; @%; $$ = $1; };
+]])
+
+AT_BISON_CHECK([[input.y]], 0, [],
+[[input.y:10.19: warning: stray '$'
+input.y:10.23: warning: stray '@'
+input.y:11.19: warning: stray '$'
+input.y:11.23: warning: stray '@'
+input.y:12.19: warning: stray '$'
+input.y:12.23: warning: stray '@'
+input.y:14.19: warning: stray '$'
+input.y:14.23: warning: stray '@'
+]])
+
+AT_CLEANUP
+
+
+
+## ---------------- ##
+## Code injection.  ##
+## ---------------- ##
+
+
+AT_SETUP([[Code injection]])
+
+m4_pattern_allow([^m4_errprintn$])
+
+# AT_TEST([MACRO])
+# ----------------
+# Try to have MACRO be run by bison.
+m4_pushdef([AT_TEST],
+[AT_DATA([[input.y]],
+[[%type <$1(DEAD %type)> exp
+%token <$1(DEAD %token)> a
+%initial-action
+{
+  $$;
+  $<$1(DEAD %initial-action)>$
+};
+%printer
+{
+  $$
+  $<$1(DEAD %printer)>$
+} <> <*>;
+%lex-param
+{
+  $1(DEAD %lex-param)
+};
+%parse-param
+{
+  $1(DEAD %parse-param)
+};
+%%
+exp:
+  a a[last]
+  {
+    $$;
+    $][1;
+    $<$1(DEAD action 1)>$
+    $<$1(DEAD action 2)>1
+    $<$1(DEAD action 3)>last
+    $<$1(DEAD action 4)>0
+    ;
+  };
+]])
+
+# FIXME: Provide a means to iterate over all the skeletons.
+AT_BISON_CHECK([[-d               input.y]])
+AT_BISON_CHECK([[-d -S glr.c      input.y]])
+AT_BISON_CHECK([[-d -S lalr1.cc   input.y]])
+AT_BISON_CHECK([[-d -S glr.cc     input.y]])
+AT_BISON_CHECK([[   -S lalr1.java input.y]])
+])
+
+AT_TEST([m4_errprintn])
+AT_TEST([@:>@m4_errprintn])
+
+m4_popdef([AT_TEST])
+
+AT_CLEANUP
diff --git a/tests/java.at b/tests/java.at
new file mode 100644
index 0000000..db3f500
--- /dev/null
+++ b/tests/java.at
@@ -0,0 +1,807 @@
+# Java tests for simple calculator.           -*- Autotest -*-
+
+# Copyright (C) 2007-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+AT_BANNER([[Java Calculator.]])
+
+
+# ------------------------- #
+# Helping Autotest macros.  #
+# ------------------------- #
+
+
+# _AT_DATA_JAVA_CALC_Y($1, $2, $3, [BISON-DIRECTIVES])
+# ----------------------------------------------------------------------
+# Produce `calc.y'.  Don't call this macro directly, because it contains
+# some occurrences of `$1' etc. which will be interpreted by m4.  So
+# you should call it with $1, $2, and $3 as arguments, which is what
+# AT_DATA_JAVA_CALC_Y does.
+m4_define([_AT_DATA_JAVA_CALC_Y],
+[m4_if([$1$2$3], $[1]$[2]$[3], [],
+       [m4_fatal([$0: Invalid arguments: $@])])dnl
+AT_BISON_OPTION_PUSHDEFS([%language "Java" $4])
+AT_DATA([Calc.y],
+[[/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+]$4[
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror (]AT_LOCATION_IF([[@$,]])[ "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
+
+]AT_LEXPARAM_IF([[
+%code lexer {
+]],
+[[
+%%
+class CalcLexer implements Calc.Lexer {
+]])[
+  StreamTokenizer st;
+
+  public ]AT_LEXPARAM_IF([[YYLexer]], [[CalcLexer]]) (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
+
+AT_LOCATION_IF([[
+  Position yypos = new Position (1, 0);
+
+  public Position getStartPos() {
+    return yypos;
+  }
+
+  public Position getEndPos() {
+    return yypos;
+  }
+]])[
+  ]AT_YYERROR_DEFINE[
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+    ]AT_LOCATION_IF([[yypos = new Position (yypos.lineno (),
+                                            yypos.token () + 1);]])[
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+        ]AT_LOCATION_IF([[yypos = new Position (yypos.lineno () + 1, 0);]])[
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+]AT_LEXPARAM_IF([[
+};
+%%]], [[
+}]])
+
+[
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
+
+]])
+AT_BISON_OPTION_POPDEFS
+])# _AT_DATA_JAVA_CALC_Y
+
+
+# AT_DATA_CALC_Y([BISON-OPTIONS])
+# -------------------------------
+# Produce `calc.y'.
+m4_define([AT_DATA_JAVA_CALC_Y],
+[_AT_DATA_JAVA_CALC_Y($[1], $[2], $[3], [$1])
+])
+
+
+# _AT_CHECK_JAVA_CALC_ERROR(BISON-OPTIONS, INPUT,
+#                           [VERBOSE-AND-LOCATED-ERROR-MESSAGE])
+# --------------------------------------------------------------
+# Run `calc' on INPUT, and expect a `syntax error' message.
+#
+# If INPUT starts with a slash, it is used as absolute input file name,
+# otherwise as contents.
+#
+# The VERBOSE-AND-LOCATED-ERROR-MESSAGE is stripped of locations
+# and expected tokens if necessary, and compared with the output.
+m4_define([_AT_CHECK_JAVA_CALC_ERROR],
+[m4_bmatch([$2], [^/],
+           [AT_JAVA_PARSER_CHECK([Calc < $2], 0, [], [stderr])],
+           [AT_DATA([[input]],
+[[$2
+]])
+AT_JAVA_PARSER_CHECK([Calc < input], 0, [], [stderr])])
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+AT_DATA([[expout]],
+[$3
+])
+# 2. If locations are not used, remove them.
+AT_YYERROR_SEES_LOC_IF([],
+[[sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout]])
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+m4_bmatch([$1], [%error-verbose], [],
+[[sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout]])
+# 4. Check
+AT_CHECK([cat stderr], 0, [expout])
+])
+
+# _AT_CHECK_JAVA_CALC([BISON-DIRECTIVES], [BISON-CODE])
+# -----------------------------------------------------------------------
+# Start a testing chunk which compiles `calc' grammar with
+# BISON-DIRECTIVES, and performs several tests over the parser.
+m4_define([_AT_CHECK_JAVA_CALC],
+[# We use integers to avoid dependencies upon the precision of doubles.
+AT_SETUP([Calculator $1])
+
+AT_BISON_OPTION_PUSHDEFS([$1])
+
+AT_DATA_JAVA_CALC_Y([$1
+%code {
+$2
+}])
+
+AT_BISON_CHECK([-o Calc.java Calc.y])
+AT_JAVA_COMPILE([Calc.java])
+
+# Test the priorities.
+AT_DATA([[input]],
+[[1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+]])
+AT_JAVA_PARSER_CHECK([Calc < input], 0, [], [stderr])
+
+
+# Some syntax errors.
+_AT_CHECK_JAVA_CALC_ERROR([$1], [0 0],
+                          [1.2: syntax error, unexpected number])
+_AT_CHECK_JAVA_CALC_ERROR([$1], [1//2],
+                          [1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'])
+_AT_CHECK_JAVA_CALC_ERROR([$1], [error],
+                          [1.1: syntax error, unexpected $undefined])
+_AT_CHECK_JAVA_CALC_ERROR([$1], [1 = 2 = 3],
+                          [1.4: syntax error, unexpected '='])
+_AT_CHECK_JAVA_CALC_ERROR([$1], [
++1],
+                          [2.1: syntax error, unexpected '+'])
+# Exercise error messages with EOF: work on an empty file.
+_AT_CHECK_JAVA_CALC_ERROR([$1], [/dev/null],
+                          [1.1: syntax error, unexpected end of input])
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+_AT_CHECK_JAVA_CALC_ERROR([$1],
+                          [() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1],
+[1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1])
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+_AT_CHECK_JAVA_CALC_ERROR([$1], [(!) + (0 0) = 1],
+[1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1])
+_AT_CHECK_JAVA_CALC_ERROR([$1], [(- *) + (0 0) = 1],
+[1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1])
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
+])# _AT_CHECK_JAVA_CALC
+
+
+# AT_CHECK_JAVA_CALC([BISON-DIRECTIVES])
+# --------------------------------------------------------
+# Start a testing chunk which compiles `calc' grammar with
+# BISON-DIRECTIVES, and performs several tests over the parser.
+# Run the test with and without %error-verbose.
+m4_define([AT_CHECK_JAVA_CALC],
+[_AT_CHECK_JAVA_CALC([$1], [$2])
+_AT_CHECK_JAVA_CALC([%error-verbose $1], [$2])
+_AT_CHECK_JAVA_CALC([%locations $1], [$2])
+_AT_CHECK_JAVA_CALC([%error-verbose %locations $1], [$2])
+])# AT_CHECK_JAVA_CALC
+
+
+# ------------------------ #
+# Simple LALR Calculator.  #
+# ------------------------ #
+
+AT_CHECK_JAVA_CALC([], [[
+  public static void main (String args[]) throws IOException
+  {
+    CalcLexer l = new CalcLexer (System.in);
+    Calc p = new Calc (l);
+    p.parse ();
+  }
+]])
+
+AT_CHECK_JAVA_CALC([%lex-param { InputStream is } ], [[
+  public static void main (String args[]) throws IOException
+  {
+    new Calc (System.in).parse ();
+  }
+]])
+
+
+
+# -----------------#
+# Java Directives. #
+# -----------------#
+
+AT_BANNER([Java Parameters.])
+
+
+# AT_CHECK_JAVA_MINIMAL([DIRECTIVES], [PARSER_ACTION], [POSITION_CLASS])
+# ----------------------------------------------------------------------
+# Check that a mininal parser with DIRECTIVES compiles in Java.
+# Put the Java code in YYParser.java.
+m4_define([AT_CHECK_JAVA_MINIMAL],
+[
+AT_DATA([[YYParser.y]], [
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+$1
+%%
+start: "end" {$2};
+%%
+class m4_default([$3], [Position]) {}
+])
+AT_BISON_CHECK([[YYParser.y]])
+AT_CHECK([[grep '[mb]4_' YYParser.y]], [1], [ignore])
+AT_JAVA_COMPILE([[YYParser.java]])
+])
+
+
+# AT_CHECK_JAVA_MINIMAL_W_LEXER([1:DIRECTIVES], [2:LEX_THROWS],
+#       [3:YYLEX_ACTION], [4:LEXER_BODY], [5:PARSER_ACTION], [6:STYPE],
+#       [7:POSITION_TYPE], [8:LOCATION_TYPE])
+# ---------------------------------------------------------------------
+# Check that a mininal parser with DIRECTIVES and a "%code lexer".
+# YYLEX is the body of yylex () which throws LEX_THROW.
+# compiles in Java.
+m4_define([AT_CHECK_JAVA_MINIMAL_W_LEXER],
+[AT_CHECK_JAVA_MINIMAL([$1
+
+%code lexer
+{
+  m4_default([$6], [Object]) yylval;
+  public m4_default([$6], [Object]) getLVal() { return yylval; }
+
+  public m4_default([$7], [Position]) getStartPos() { return null; }
+  public m4_default([$7], [Position]) getEndPos()   { return null; }
+
+  public void yyerror (m4_default([$8], [Location]) loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()$2
+  {
+    $3
+  }
+
+  $4
+}], [$5], [$7])])
+
+
+# AT_CHECK_JAVA_GREP([LINE], [COUNT=1])
+# -------------------------------------
+# Check that YYParser.java contains exactly COUNT lines matching ^LINE$
+# with grep.
+m4_define([AT_CHECK_JAVA_GREP],
+	[AT_CHECK([grep -c '^$1$' YYParser.java], [], [m4_default([$2], [1])
+])
+])
+
+
+# ----------------------------------- #
+# Java parser class and package names #
+# ----------------------------------- #
+
+AT_SETUP([Java parser class and package names])
+
+AT_CHECK_JAVA_MINIMAL([])
+AT_CHECK_JAVA_GREP([[class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[%name-prefix "Prefix"]])
+AT_CHECK_JAVA_GREP([[class PrefixParser]])
+
+AT_CHECK_JAVA_MINIMAL([[%define parser_class_name "ParserClassName"]])
+AT_CHECK_JAVA_GREP([[class ParserClassName]])
+
+AT_CHECK_JAVA_MINIMAL([[%define package "user_java_package"]])
+AT_CHECK_JAVA_GREP([[package user_java_package;]])
+
+AT_CLEANUP
+
+
+# --------------------------- #
+# Java parser class modifiers #
+# --------------------------- #
+
+AT_SETUP([Java parser class modifiers])
+
+AT_CHECK_JAVA_MINIMAL([[%define abstract]])
+AT_CHECK_JAVA_GREP([[abstract class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[%define final]])
+AT_CHECK_JAVA_GREP([[final class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[%define strictfp]])
+AT_CHECK_JAVA_GREP([[strictfp class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define abstract
+%define strictfp]])
+AT_CHECK_JAVA_GREP([[abstract strictfp class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define final
+%define strictfp]])
+AT_CHECK_JAVA_GREP([[final strictfp class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[%define public]])
+AT_CHECK_JAVA_GREP([[public class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define public
+%define abstract]])
+AT_CHECK_JAVA_GREP([[public abstract class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define public
+%define final]])
+AT_CHECK_JAVA_GREP([[public final class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define public
+%define strictfp]])
+AT_CHECK_JAVA_GREP([[public strictfp class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define public
+%define abstract
+%define strictfp]])
+AT_CHECK_JAVA_GREP([[public abstract strictfp class YYParser]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define public
+%define final
+%define strictfp]])
+AT_CHECK_JAVA_GREP([[public final strictfp class YYParser]])
+
+AT_CLEANUP
+
+
+# ---------------------------------------- #
+# Java parser class extends and implements #
+# ---------------------------------------- #
+
+AT_SETUP([Java parser class extends and implements])
+
+AT_CHECK_JAVA_MINIMAL([[%define extends "Thread"]])
+AT_CHECK_JAVA_GREP([[class YYParser extends Thread]])
+
+AT_CHECK_JAVA_MINIMAL([[%define implements "Cloneable"]])
+AT_CHECK_JAVA_GREP([[class YYParser implements Cloneable]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define extends "Thread"
+%define implements "Cloneable"]])
+AT_CHECK_JAVA_GREP([[class YYParser extends Thread implements Cloneable]])
+
+AT_CLEANUP
+
+
+# -------------------------------- #
+# Java %parse-param and %lex-param #
+# -------------------------------- #
+
+AT_SETUP([Java %parse-param and %lex-param])
+
+AT_CHECK_JAVA_MINIMAL([])
+AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer) {]])
+
+AT_CHECK_JAVA_MINIMAL([[%parse-param {int parse_param1}]])
+AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
+AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer, *int parse_param1) {]])
+AT_CHECK_JAVA_GREP([[[	 ]*this.parse_param1 = parse_param1;]])
+
+AT_CHECK_JAVA_MINIMAL([[
+%parse-param {int parse_param1}
+%parse-param {long parse_param2}]])
+AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
+AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]])
+AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]])
+AT_CHECK_JAVA_GREP([[[	 ]*this.parse_param1 = parse_param1;]])
+AT_CHECK_JAVA_GREP([[[	 ]*this.parse_param2 = parse_param2;]])
+
+AT_CHECK_JAVA_MINIMAL_W_LEXER([], [], [[return EOF;]])
+AT_CHECK_JAVA_GREP([[ *public YYParser () {]])
+AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer) {]])
+
+AT_CHECK_JAVA_MINIMAL_W_LEXER([[%parse-param {int parse_param1}]],
+	[], [[return EOF;]])
+AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
+AT_CHECK_JAVA_GREP([[ *public YYParser (int parse_param1) {]])
+AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1) {]])
+AT_CHECK_JAVA_GREP([[[	 ]*this.parse_param1 = parse_param1;]], [2])
+
+AT_CHECK_JAVA_MINIMAL_W_LEXER([[
+%parse-param {int parse_param1}
+%parse-param {long parse_param2}]],
+	[], [[return EOF;]])
+AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
+AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]])
+AT_CHECK_JAVA_GREP([[ *public YYParser (int parse_param1, *long parse_param2) {]])
+AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]])
+AT_CHECK_JAVA_GREP([[[	 ]*this.parse_param1 = parse_param1;]], [2])
+AT_CHECK_JAVA_GREP([[[	 ]*this.parse_param2 = parse_param2;]], [2])
+
+AT_CHECK_JAVA_MINIMAL_W_LEXER([[%lex-param {char lex_param1}]],
+	[], [[return EOF;]], [[YYLexer (char lex_param1) {}]])
+AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1) {]])
+AT_CHECK_JAVA_GREP([[.* = new YYLexer *(lex_param1);]])
+
+AT_CHECK_JAVA_MINIMAL_W_LEXER([[
+%lex-param {char lex_param1}
+%lex-param {short lex_param2}]],
+	[], [[return EOF;]], [[YYLexer (char lex_param1, short lex_param2) {}]])
+AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1, *short lex_param2) {]])
+AT_CHECK_JAVA_GREP([[.* = new YYLexer *(lex_param1, *lex_param2);]])
+
+AT_CHECK_JAVA_MINIMAL_W_LEXER([[
+%parse-param {int parse_param1}
+%parse-param {long parse_param2}
+%lex-param {char lex_param1}
+%lex-param {short lex_param2}]],
+	[], [[return EOF;]], [[YYLexer (char lex_param1, short lex_param2) {}]])
+AT_CHECK_JAVA_GREP([[ *protected final int parse_param1;]])
+AT_CHECK_JAVA_GREP([[ *protected final long parse_param2;]])
+AT_CHECK_JAVA_GREP([[ *public YYParser (char lex_param1, *short lex_param2, *int parse_param1, *long parse_param2) {]])
+AT_CHECK_JAVA_GREP([[.* = new YYLexer *(lex_param1, *lex_param2);]])
+AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {]])
+AT_CHECK_JAVA_GREP([[[	 ]*this.parse_param1 = parse_param1;]], [2])
+AT_CHECK_JAVA_GREP([[[	 ]*this.parse_param2 = parse_param2;]], [2])
+
+AT_CLEANUP
+
+
+# ------------------------- #
+# Java throw specifications #
+# ------------------------- #
+
+AT_SETUP([Java throws specifications])
+
+# %define throws	- 0 1 2
+# %define lex-throws	- 0 1 2
+# %code lexer		  0 1
+
+m4_define([AT_JT_lex_throws_define], [m4_case(AT_JT_lex_throws,
+	-1, [],
+	 0, [[%define lex_throws ""]],
+	 1, [[%define lex_throws "InterruptedException"]],
+	 2, [[%define lex_throws "InterruptedException, IllegalAccessException"]])])
+
+m4_define([AT_JT_yylex_throws], [m4_case(AT_JT_lex_throws,
+	-1, [[ throws java.io.IOException]],
+	 0, [],
+	 1, [[ throws InterruptedException]],
+	 2, [[ throws InterruptedException, IllegalAccessException]])])
+
+m4_define([AT_JT_yylex_action], [m4_case(AT_JT_lex_throws,
+	-1, [[throw new java.io.IOException();]],
+	 0, [[return EOF;]],
+	 1, [[throw new InterruptedException();]],
+	 2, [[throw new IllegalAccessException();]])])
+
+
+m4_define([AT_JT_throws_define], [m4_case(AT_JT_throws,
+	-1, [],
+	 0, [[%define throws ""]],
+	 1, [[%define throws "ClassNotFoundException"]],
+	 2, [[%define throws "ClassNotFoundException, InstantiationException"]])])
+
+m4_define([AT_JT_yyaction_throws], [m4_case(AT_JT_throws,
+	-1, [],
+	 0, [],
+	 1, [[ throws ClassNotFoundException]],
+	 2, [[ throws ClassNotFoundException, InstantiationException]])])
+
+m4_define([AT_JT_parse_throws_2], [m4_case(AT_JT_throws,
+	-1, [],
+	 0, [],
+	 1, [[, ClassNotFoundException]],
+	 2, [[, ClassNotFoundException, InstantiationException]])])
+
+m4_define([AT_JT_parse_throws],
+	[m4_if(m4_quote(AT_JT_yylex_throws), [],
+		[AT_JT_yyaction_throws],
+		[AT_JT_yylex_throws[]AT_JT_parse_throws_2])])
+
+m4_define([AT_JT_initial_action], [m4_case(AT_JT_throws,
+	-1, [],
+	 0, [],
+	 1, [[%initial-action {if (true) throw new ClassNotFoundException();}]],
+	 2, [[%initial-action {if (true) throw new InstantiationException();}]])])
+
+m4_define([AT_JT_parse_action], [m4_case(AT_JT_throws,
+	-1, [],
+	 0, [],
+	 1, [[throw new ClassNotFoundException();]],
+	 2, [[throw new ClassNotFoundException();]])])
+
+m4_for([AT_JT_lexer], 0, 1, 1,
+  [m4_for([AT_JT_lex_throws], -1, 2, 1,
+    [m4_for([AT_JT_throws], -1, 2, 1,
+      [m4_if(AT_JT_lexer, 0,
+	[AT_CHECK_JAVA_MINIMAL([
+AT_JT_throws_define
+AT_JT_lex_throws_define
+AT_JT_initial_action],
+[AT_JT_parse_action])],
+	[AT_CHECK_JAVA_MINIMAL_W_LEXER([
+AT_JT_throws_define
+AT_JT_lex_throws_define
+AT_JT_initial_action],
+[AT_JT_yylex_throws],
+[AT_JT_yylex_action],
+[],
+[AT_JT_parse_action])])
+AT_CHECK_JAVA_GREP([[ *int yylex ()]AT_JT_yylex_throws *[;]])
+AT_CHECK_JAVA_GREP([[ *private int yyaction ([^)]*)]AT_JT_yyaction_throws[ *]])
+AT_CHECK_JAVA_GREP([[ *public boolean parse ()]AT_JT_parse_throws[ *]])
+])])])
+
+AT_CLEANUP
+
+
+# --------------------------------------------- #
+# Java stype, position_class and location_class #
+# --------------------------------------------- #
+
+AT_SETUP([Java stype, position_class and location_class])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define stype "java.awt.Color"
+%type<java.awt.Color> start;
+%define api.location.type "MyLoc"
+%define api.position.type "MyPos"
+%code { class MyPos {} }]], [[$$ = $<java.awt.Color>1;]], [[MyPos]])
+AT_CHECK([[grep 'java.awt.Color' YYParser.java]], [0], [ignore])
+AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Position']], [1], [ignore])
+AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Location']], [1], [ignore])
+
+AT_CHECK_JAVA_MINIMAL_W_LEXER([[
+%define stype "java.awt.Color"
+%type<java.awt.Color> start;
+%define api.location.type "MyLoc"
+%define api.position.type "MyPos"
+%code { class MyPos {} }]], [], [[return EOF;]], [],
+[[$$ = $<java.awt.Color>1;]],
+[[java.awt.Color]], [[MyPos]], [[MyLoc]])
+AT_CHECK([[grep 'java.awt.Color' YYParser.java]], [0], [ignore])
+AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Position']], [1], [ignore])
+AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Location']], [1], [ignore])
+
+AT_CLEANUP
+
+
+# ----------------------------------------------- #
+# Java syntax error handling without error token. #
+# ----------------------------------------------- #
+
+AT_SETUP([Java syntax error handling without error token])
+
+AT_DATA([[YYParser.y]], [[%language "Java"
+
+%lex-param { String s }
+
+%code imports {
+  import java.io.IOException;
+}
+
+%code lexer {
+  String Input;
+  int Position;
+
+  public YYLexer (String s)
+  {
+    Input    = s;
+    Position = 0;
+  }
+
+  public void yyerror (String s)
+  {
+    System.err.println (s);
+  }
+
+  public Object getLVal ()
+  {
+    return null;
+  }
+
+  public int yylex () throws IOException
+  {
+    if (Position >= Input.length ())
+      return EOF;
+    else
+      return Input.charAt (Position++);
+  }
+}
+
+%code {
+  public static void main (String args []) throws IOException
+  {
+    YYParser p = new YYParser (args [0]);
+    p.parse ();
+  }
+}
+%%
+input:
+  'a' 'a'
+;
+]])
+AT_BISON_CHECK([[YYParser.y]])
+AT_JAVA_COMPILE([[YYParser.java]])
+AT_JAVA_PARSER_CHECK([[YYParser aa]], [[0]], [[]], [[]])
+AT_JAVA_PARSER_CHECK([[YYParser ab]], [[0]], [[]], [[syntax error
+]])
+AT_JAVA_PARSER_CHECK([[YYParser ba]], [[0]], [[]], [[syntax error
+]])
+
+AT_CLEANUP
diff --git a/tests/local.at b/tests/local.at
index 55ba824..68a7eca 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -1,36 +1,108 @@
 # Process this -*- Autotest -*- file with autom4te.
 
 # Macros for the GNU Bison Test suite.
-# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2003-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# We want a recent Autotest.
 m4_version_prereq([2.58])
 
 
+# m4_null_if(VAL, IF-TRUE, IF-FALSE)
+# ----------------------------------
+# If VAL evaluates to empty or 0, run IF-TRUE, otherwise IF-FALSE.
+m4_define([m4_null_if],
+[m4_case(m4_quote($1),
+         [0], [$2],
+         [],  [$2],
+         [$3])])
+
+## ------------- ##
+## Basic tests.  ##
+## ------------- ##
+
+# AT_MATCHES_CHECK(FILE, PERL-REGEXP, COUNT)
+# ------------------------------------------
+# Expect COUNT matches of the PERL-REGEXP in FILE.  The file is
+# taken in "slurp" mode, i.e., one can match end-of-lines.
+m4_define([AT_MATCHES_CHECK],
+[AT_CHECK([$PERL -0777 -ne '
+my $count = 0;
+s{$2}{ ++$count; "" }gem;
+printf "$count\n";' $1], [0], [$3
+])])
+
+
+# AT_SAVE_SPECIAL_FILES / AT_RESTORE_SPECIAL_FILES
+# ------------------------------------------------
+# Don't interfere with caller's files.
+m4_divert_text([PREPARE_TESTS],
+[at_save_special_files ()
+{
+  for at_save_file in stderr experr expout
+  do
+    test ! -f at-bison-check-$at_save_file.bak ||
+      as_fn_error 1 "fatal error: back-up on top of a back-up"
+    test ! -f $at_save_file || mv $at_save_file at-bison-check-$at_save_file.bak
+  done
+}
+
+at_restore_special_files ()
+{
+  for at_save_file in stderr experr expout
+  do
+    test ! -f at-bison-check-$at_save_file.bak ||
+      mv at-bison-check-$at_save_file.bak $at_save_file
+  done
+}
+])
+
+m4_define([AT_SAVE_SPECIAL_FILES],    [at_save_special_files])
+m4_define([AT_RESTORE_SPECIAL_FILES], [at_restore_special_files])
+
+
+
 ## ------------------------------- ##
 ## Macros decoding Bison options.  ##
 ## ------------------------------- ##
 
+# AT_LOC_PUSHDEF(FIRST-LINE, FIRST-COLUMN, LAST-LINE, LAST-COLUMN)
+# ----------------------------------------------------------------
+# Pushdef AT_LOC_(FIRST|LAST)_(LINE|COLUMN).
+m4_define([AT_LOC_PUSHDEF],
+[m4_pushdef([AT_LOC_FIRST_LINE],  [AT_LOC.$1])
+m4_pushdef([AT_LOC_FIRST_COLUMN], [AT_LOC.$2])
+m4_pushdef([AT_LOC_LAST_LINE],    [AT_LOC.$3])
+m4_pushdef([AT_LOC_LAST_COLUMN],  [AT_LOC.$4])])
+
+# AT_LOC_POPDEF
+# -------------
+# Popdef AT_LOC_(FIRST|LAST)_(LINE|COL).
+m4_define([AT_LOC_POPDEF],
+[m4_popdef([AT_LOC_FIRST_LINE])
+m4_popdef([AT_LOC_FIRST_COLUMN])
+m4_popdef([AT_LOC_LAST_LINE])
+m4_popdef([AT_LOC_LAST_COLUMN])])
+
+
 
 # AT_BISON_OPTION_PUSHDEFS([BISON-OPTIONS])
 # -----------------------------------------
 m4_define([AT_BISON_OPTION_PUSHDEFS],
-[_AT_BISON_OPTION_PUSHDEFS($[1], $[2], [$1])])
+[m4_divert_text([KILL],
+                [_AT_BISON_OPTION_PUSHDEFS($[1], $[2], [$1])])])
 
 
 # _AT_BISON_OPTION_PUSHDEFS($1, $2, [BISON-OPTIONS])
@@ -41,98 +113,159 @@
 m4_define([_AT_BISON_OPTION_PUSHDEFS],
 [m4_if([$1$2], $[1]$[2], [],
        [m4_fatal([$0: Invalid arguments: $@])])dnl
-m4_pushdef([AT_LALR1_CC_IF],
-[m4_bmatch([$3], ["lalr1.cc"], [$1], [$2])])
-m4_pushdef([AT_GLR_CC_IF],
-[m4_bmatch([$3], ["glr.cc"], [$1], [$2])])
+m4_pushdef([AT_DEFINES_IF],
+[m4_bmatch([$3], [%defines], [$1], [$2])])
 m4_pushdef([AT_SKEL_CC_IF],
-[m4_bmatch([$3], ["\(glr\|lalr1\).cc"], [$1], [$2])])
+[m4_bmatch([$3], [%language "[Cc]\+\+"\|%skeleton "[a-z0-9]+\.cc"], [$1], [$2])])
+m4_pushdef([AT_SKEL_JAVA_IF],
+[m4_bmatch([$3], [%language "[Jj][Aa][Vv][Aa]"\|%skeleton "[a-z0-9]+\.java"], [$1], [$2])])
+# The target language: "c", "c++", or "java".
+m4_pushdef([AT_LANG],
+[AT_SKEL_JAVA_IF([java],
+                 [AT_SKEL_CC_IF([c++],
+                                [c])])])
 m4_pushdef([AT_GLR_IF],
-[m4_bmatch([$3], [%glr-parser], [$1], [$2])])
+[m4_bmatch([$3], [%glr-parser\|%skeleton "glr\..*"], [$1], [$2])])
+m4_pushdef([AT_LALR1_CC_IF],
+[AT_SKEL_CC_IF([AT_GLR_IF([$2], [$1])], [$2])])
+m4_pushdef([AT_GLR_CC_IF],
+[AT_SKEL_CC_IF([AT_GLR_IF([$1], [$2])], [$2])])
 # Using yacc.c?
 m4_pushdef([AT_YACC_IF],
-[m4_bmatch([$3], [%glr-parser\|%skeleton], [$2], [$1])])
-m4_pushdef([AT_PARAM_IF],
-[m4_bmatch([$3], [%parse-param], [$1], [$2])])
+[m4_bmatch([$3], [%language\|%glr-parser\|%skeleton], [$2], [$1])])
+m4_pushdef([AT_LEXPARAM_IF],
+[m4_bmatch([$3], [%lex-param], [$1], [$2])])
 m4_pushdef([AT_LOCATION_IF],
 [m4_bmatch([$3], [%locations], [$1], [$2])])
-m4_pushdef([AT_PURE_IF],
-[m4_bmatch([$3], [%pure-parser], [$1], [$2])])
-m4_pushdef([AT_PURE_AND_LOC_IF],
-[m4_bmatch([$3], [%locations.*%pure-parser\|%pure-parser.*%locations],
-	   [$1], [$2])])
-m4_pushdef([AT_GLR_OR_PARAM_IF],
-[m4_bmatch([$3], [%glr-parser\|%parse-param], [$1], [$2])])
-m4_pushdef([AT_NAME_PREFIX],
-[m4_bmatch([$3], [%name-prefix=".*"], 
-           [m4_bregexp([$3], [name-prefix="\([^"]*\)"], [\1])],
-           [yy])])
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-m4_pushdef([AT_YYERROR_ARG_LOC_IF],
-[AT_GLR_OR_PARAM_IF([AT_PURE_AND_LOC_IF([$1], [$2])],
-		    [$2])])
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-m4_pushdef([AT_YYERROR_SEES_LOC_IF],
-[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_PARAM_IF([$1], [$2])],
-					[$1])],
-			    [$1])],
-		[$2])])
+m4_pushdef([AT_LOCATION_TYPE_IF],
+[m4_bmatch([$3], [%define \(api\.location\.type\|location_type\)], [$1], [$2])])
+m4_pushdef([AT_PARAM_IF],
+[m4_bmatch([$3], [%parse-param], [$1], [$2])])
+# Comma-terminated list of formals parse-parameters.
+# E.g., %parse-param { int x } {int y} -> "int x, int y, ".
+m4_pushdef([AT_PARSE_PARAMS])
+m4_bpatsubst([$3], [%parse-param { *\([^{}]*[^{} ]\) *}],
+             [m4_append([AT_PARSE_PARAMS], [\1, ])])
 
-# The interface is pure: either because %pure-parser, or because we
+m4_pushdef([AT_PURE_IF],
+[m4_bmatch([$3], [%define  *api\.pure\|%pure-parser],
+           [m4_bmatch([$3], [%define  *api\.pure *"?false"?], [$2], [$1])],
+           [$2])])
+m4_pushdef([AT_NAME_PREFIX],
+[m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"],
+           [m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])],
+           [yy])])
+m4_pushdef([AT_API_prefix],
+[m4_bmatch([$3], [%define api\.prefix ".*"],
+           [m4_bregexp([$3], [%define api\.prefix "\([^""]*\)"], [\1])],
+           [yy])])
+m4_pushdef([AT_API_PREFIX],
+[m4_toupper(AT_API_prefix)])
+# yyerror receives the location if %location, and if the parser is pure. For
+# historical reasons, with the "yacc.c" skeleton, the location is not passed
+# unless an additional "%parse-param" is present, or if the purity is defined
+# as "full".
+m4_pushdef([AT_YYERROR_ARG_LOC_IF],
+[AT_LOCATION_IF([AT_PURE_IF([m4_bmatch([$3],
+                                       m4_quote(m4_join([\|],
+                                                        [%define api.pure "?full"?],
+                                                        [%glr-parser],
+                                                        [%parse-param],
+                                                        [%skeleton "?glr.c"?])),
+                                       [$1], [$2])],
+                            [$2])],
+                [$2])])
+
+# yyerror always sees the locations (when activated) if the parser is impure.
+# When the parser is pure, yyerror sees the location if it is received as an
+# argument.
+m4_pushdef([AT_YYERROR_SEES_LOC_IF],
+[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_YYERROR_ARG_LOC_IF([$1], [$2])],
+                                        [$1])],
+                            [$1])],
+                [$2])])
+
+# The interface is pure: either because %define api.pure, or because we
 # are using the C++ parsers.
 m4_pushdef([AT_PURE_LEX_IF],
 [AT_PURE_IF([$1],
 	    [AT_SKEL_CC_IF([$1], [$2])])])
 
+m4_pushdef([AT_YYSTYPE],
+[AT_SKEL_CC_IF([AT_NAME_PREFIX[::parser::semantic_type]],
+               [AT_API_PREFIX[STYPE]])])
+m4_pushdef([AT_YYLTYPE],
+[AT_SKEL_CC_IF([AT_NAME_PREFIX[::parser::location_type]],
+               [AT_API_PREFIX[LTYPE]])])
+
+
 AT_PURE_LEX_IF(
 [m4_pushdef([AT_LOC], [(*llocp)])
  m4_pushdef([AT_VAL], [(*lvalp)])
- m4_pushdef([AT_LEX_FORMALS],
-	    [YYSTYPE *lvalp[]AT_LOCATION_IF([, YYLTYPE *llocp])])
- m4_pushdef([AT_LEX_ARGS],
+ m4_pushdef([AT_YYLEX_FORMALS],
+	    [AT_YYSTYPE *lvalp[]AT_LOCATION_IF([, AT_YYLTYPE *llocp])])
+ m4_pushdef([AT_YYLEX_ARGS],
 	    [lvalp[]AT_LOCATION_IF([, llocp])])
  m4_pushdef([AT_USE_LEX_ARGS],
 	    [(void) lvalp;AT_LOCATION_IF([(void) llocp])])
- m4_pushdef([AT_LEX_PRE_FORMALS],
-	    [AT_LEX_FORMALS, ])
- m4_pushdef([AT_LEX_PRE_ARGS],
-	    [AT_LEX_ARGS, ])
+ m4_pushdef([AT_YYLEX_PRE_FORMALS],
+	    [AT_YYLEX_FORMALS, ])
+ m4_pushdef([AT_YYLEX_PRE_ARGS],
+	    [AT_YYLEX_ARGS, ])
 ],
-[m4_pushdef([AT_LOC], [(yylloc)])
- m4_pushdef([AT_VAL], [(yylval)])
- m4_pushdef([AT_LEX_FORMALS],     [void])
- m4_pushdef([AT_LEX_ARGS],        [])
+[m4_pushdef([AT_LOC], [[(]AT_NAME_PREFIX[lloc)]])
+ m4_pushdef([AT_VAL], [[(]AT_NAME_PREFIX[lval)]])
+ m4_pushdef([AT_YYLEX_FORMALS],     [void])
+ m4_pushdef([AT_YYLEX_ARGS],        [])
  m4_pushdef([AT_USE_LEX_ARGS],    [])
- m4_pushdef([AT_LEX_PRE_FORMALS], [])
- m4_pushdef([AT_LEX_PRE_ARGS],    [])
+ m4_pushdef([AT_YYLEX_PRE_FORMALS], [])
+ m4_pushdef([AT_YYLEX_PRE_ARGS],    [])
 ])
+
+# Handle the different types of location components.
+
+AT_SKEL_CC_IF(
+  [AT_LOCATION_TYPE_IF(
+    [AT_LOC_PUSHDEF([first.l], [first.c], [last.l], [last.c])],
+    [AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])])],
+  [AT_LOC_PUSHDEF([first_line], [first_column], [last_line], [last_column])])
+
 ])# _AT_BISON_OPTION_PUSHDEFS
 
 
 # AT_BISON_OPTION_POPDEFS
 # -----------------------
 m4_define([AT_BISON_OPTION_POPDEFS],
-[m4_popdef([AT_LEX_PRE_ARGS])
-m4_popdef([AT_LEX_PRE_FORMALS])
+[m4_divert_text([KILL],
+[m4_popdef([AT_YYLEX_PRE_ARGS])
+m4_popdef([AT_YYLEX_PRE_FORMALS])
 m4_popdef([AT_USE_LEX_ARGS])
-m4_popdef([AT_LEX_ARGS])
-m4_popdef([AT_LEX_FORMALS])
+m4_popdef([AT_YYLEX_ARGS])
+m4_popdef([AT_YYLEX_FORMALS])
+m4_popdef([AT_YYLTYPE])
+m4_popdef([AT_YYSTYPE])
 m4_popdef([AT_VAL])
 m4_popdef([AT_LOC])
 m4_popdef([AT_PURE_LEX_IF])
 m4_popdef([AT_YYERROR_SEES_LOC_IF])
 m4_popdef([AT_YYERROR_ARG_LOC_IF])
+m4_popdef([AT_API_PREFIX])
+m4_popdef([AT_API_prefix])
 m4_popdef([AT_NAME_PREFIX])
-m4_popdef([AT_GLR_OR_PARAM_IF])
-m4_popdef([AT_PURE_AND_LOC_IF])
+m4_popdef([AT_LOCATION_TYPE_IF])
 m4_popdef([AT_LOCATION_IF])
+m4_popdef([AT_PARSE_PARAMS])
 m4_popdef([AT_PARAM_IF])
+m4_popdef([AT_LEXPARAM_IF])
 m4_popdef([AT_YACC_IF])
 m4_popdef([AT_GLR_IF])
 m4_popdef([AT_SKEL_CC_IF])
+m4_popdef([AT_LANG])
+m4_popdef([AT_SKEL_JAVA_IF])
 m4_popdef([AT_GLR_CC_IF])
 m4_popdef([AT_LALR1_CC_IF])
+m4_popdef([AT_DEFINES_IF])
+AT_LOC_POPDEF])dnl
 ])# AT_BISON_OPTION_POPDEFS
 
 
@@ -141,23 +274,37 @@
 ## Generating Grammar Files.  ##
 ## -------------------------- ##
 
+# AT_DATA_SOURCE_PROLOGUE
+# ------------------------
+# The prologue that should be included in any source code that is
+# meant to be compiled.
+m4_define([AT_DATA_SOURCE_PROLOGUE],
+[[#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+]])
 
 # AT_DATA_GRAMMAR_PROLOGUE
 # ------------------------
 # The prologue that should be included in any grammar which parser is
 # meant to be compiled.
 m4_define([AT_DATA_GRAMMAR_PROLOGUE],
-[[%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}]
-])
+[[%code top {
+]AT_DATA_SOURCE_PROLOGUE[]dnl
+[}
+]])
 
+# AT_DATA_SOURCE(NAME, CONTENT)
+# -----------------------------
+# Generate the file NAME, which CONTENT is preceded by
+# AT_DATA_SOURCE_PROLOGUE.
+m4_define([AT_DATA_SOURCE],
+[AT_DATA([$1],
+[AT_DATA_SOURCE_PROLOGUE
+$2])
+])
 
 # AT_DATA_GRAMMAR(NAME, CONTENT)
 # ------------------------------
@@ -169,6 +316,276 @@
 $2])
 ])
 
+# AT_YYLEX_PROTOTYPE
+# AT_YYLEX_DECLARE_EXTERN
+# AT_YYLEX_DECLARE
+# AT_YYLEX_DEFINE([INPUT], [ACTION])
+# ----------------------------------
+# INPUT can be empty, or in double quotes, or a list (in braces).
+# ACTION may compute yylval for instance, using "res" as token type,
+# and "toknum" as the number of calls to yylex (starting at 0).
+m4_define([AT_YYLEX_PROTOTYPE],
+[int AT_NAME_PREFIX[]lex (]AT_YYLEX_FORMALS[)[]dnl
+])
+
+m4_define([AT_YYLEX_DECLARE_EXTERN],
+[AT_YYLEX_PROTOTYPE;dnl
+])
+
+m4_define([AT_YYLEX_DECLARE],
+[static AT_YYLEX_DECLARE_EXTERN[]dnl
+])
+
+m4_define([AT_YYLEX_DEFINE],
+[[#include <assert.h>
+static
+]AT_YYLEX_PROTOTYPE[
+{
+  ]m4_bmatch([$1], [^\(".*"\)?$],
+             [[static char const input[] = ]m4_default([$1], [""])],
+             [[static int const input[] = ]$1])[;
+  static size_t toknum = 0;
+  int res;
+  ]AT_USE_LEX_ARGS[;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ]$2[;]AT_LOCATION_IF([[
+  ]AT_LOC_FIRST_LINE[ = ]AT_LOC_LAST_LINE[ = 1;
+  ]AT_LOC_FIRST_COLUMN[ = ]AT_LOC_LAST_COLUMN[ = toknum;]])[
+  return res;
+}]dnl
+])
+
+# AT_YYERROR_FORMALS
+# AT_YYERROR_PROTOTYPE
+# AT_YYERROR_DECLARE_EXTERN
+# AT_YYERROR_DECLARE
+# AT_YYERROR_DEFINE
+# -------------------------
+# Must be called inside a AT_BISON_OPTION_PUSHDEFS/POPDEFS pair.
+m4_define([AT_YYERROR_FORMALS],
+[m4_case(AT_LANG,
+[c], [AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE const * const llocp, ])AT_PARSE_PARAMS [const char *msg]])[]dnl
+])
+
+m4_define([AT_YYERROR_PROTOTYPE],
+[m4_case(AT_LANG,
+[c], [[void ]AT_NAME_PREFIX[error (]AT_YYERROR_FORMALS[)]])[]dnl
+])
+
+m4_define([AT_YYERROR_DECLARE_EXTERN],
+[m4_case(AT_LANG,
+[c], [AT_YYERROR_PROTOTYPE;])[]dnl
+])
+
+m4_define([AT_YYERROR_DECLARE],
+[m4_case(AT_LANG,
+[c], [static AT_YYERROR_DECLARE_EXTERN])[]dnl
+])
+
+m4_define([AT_YYERROR_DEFINE],
+[m4_case(AT_LANG,
+[c], [[#include <stdio.h>
+/* A C error reporting function.  */
+static
+]AT_YYERROR_PROTOTYPE[
+{]m4_bpatsubst(m4_defn([AT_PARSE_PARAMS]),
+              [[^,]+[^A-Za-z_0-9]\([A-Za-z_][A-Za-z_0-9]*\), *], [
+  YYUSE(\1);])dnl
+AT_YYERROR_SEES_LOC_IF([[
+  YY_LOCATION_PRINT (stderr, ]AT_LOC[);
+  fprintf (stderr, ": ");]])[
+  fprintf (stderr, "%s\n", msg);
+}]],
+[c++], [[/* A C++ error reporting function.  */
+void
+]AT_NAME_PREFIX[::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl;
+}]],
+[java], [AT_LOCATION_IF([[public void yyerror (Calc.Location l, String s)
+  {
+    if (l == null)
+      System.err.println (s);
+    else
+      System.err.println (l + ": " + s);
+  }
+]], [[
+  public void yyerror (String s)
+  {
+    System.err.println (s);
+  }]])],
+[m4_fatal([$0: invalid language: ]AT_LANG)])dnl
+])
+
+
+## --------------- ##
+## Running Bison.  ##
+## --------------- ##
+
+# AT_BISON_CHECK(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
+# -------------------------------------------------
+# High-level routine that may call bison several times, under different
+# conditions.
+#
+# Check Bison by invoking `bison BISON_ARGS'.  BISON_ARGS should not contain
+# shell constructs (such as redirection or pipes) that would prevent
+# appending additional command-line arguments for bison. OTHER_AT_CHECK_ARGS
+# are the usual remaining arguments to AT_CHECK: STATUS, STDOUT, etc.
+#
+# This macro or AT_BISON_CHECK_NO_XML should always be used whenever invoking
+# Bison in the test suite.  For now it ensures that:
+#
+#   1. Valgrind doesn't report reachable memory when Bison is expected to have
+#      a non-zero exit status since Bison doesn't always try to free all memory
+#      in that case.
+#
+#   2. In the case of maintainer-xml-check, XML/XSLT output is compared with
+#      --graph and --report=all output for every working grammar.
+#
+#   3. If stderr contains a warning, -Werror and --warnings=error
+#      convert the warning to an error.
+#
+#   4. If stderr contains a warning, -Wnone and --warnings=none suppress it.
+m4_define([AT_BISON_CHECK],
+[m4_null_if([$2], [AT_BISON_CHECK_XML($@)])
+AT_BISON_CHECK_NO_XML($@)])
+
+m4_define([AT_BISON_WERROR_MSG],
+          [[bison: warnings being treated as errors]])
+
+
+# AT_BISON_CHECK_(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
+# --------------------------------------------------
+# Low-level macro to run bison once.
+m4_define([AT_BISON_CHECK_],
+[AT_CHECK(AT_QUELL_VALGRIND[[ bison ]]$@)])
+
+
+# AT_BISON_CHECK_WARNINGS(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
+# ----------------------------------------------------------
+# Check that warnings (if some are expected) are correctly
+# turned into errors with -Werror, etc.
+m4_define([AT_BISON_CHECK_WARNINGS],
+[m4_if(m4_bregexp([$4], [: warning: ]), [-1], [],
+      [m4_null_if([$2], [AT_BISON_CHECK_WARNINGS_($@)])])])
+
+m4_define([AT_BISON_CHECK_WARNINGS_],
+[[# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  ]AT_SAVE_SPECIAL_FILES[
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  ]AT_DATA([expout], [$3])[
+
+  # Run with -Werror.
+  ]AT_BISON_CHECK_([$1[ -Werror]], [[1]], [expout], [stderr])[
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  ]AT_DATA([[at-bison-check-warnings]], [$4])[
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo ']AT_BISON_WERROR_MSG[' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  ]AT_CHECK([[sed 's,.*/\(]AT_BISON_WERROR_MSG[\)$,\1,' \
+              stderr 1>&2]], [[0]], [[]], [experr])[
+
+  # Now check --warnings=error.
+  cp stderr experr
+  ]AT_BISON_CHECK_([$1[ --warnings=error]], [[1]], [expout], [experr])[
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  ]AT_BISON_CHECK_([$1[ -Wnone -Werror]], [[0]], [expout])[
+  ]AT_BISON_CHECK_([$1[ --warnings=none -Werror]], [[0]], [expout])[
+
+  ]AT_RESTORE_SPECIAL_FILES[
+fi]dnl
+])
+
+# AT_BISON_CHECK_NO_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
+# --------------------------------------------------------
+# Same as AT_BISON_CHECK except don't perform XML/XSLT checks.  This is useful
+# when a tortured grammar's XML is known to be too large for xsltproc to
+# handle.
+m4_define([AT_BISON_CHECK_NO_XML],
+[AT_CHECK(m4_null_if([$2], [], [AT_QUELL_VALGRIND ])[[bison ]]$@)
+AT_BISON_CHECK_WARNINGS($@)])
+
+# AT_BISON_CHECK_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
+# -----------------------------------------------------
+# Run AT_BISON_CHECK's XML/XSLT checks if $BISON_TEST_XML=1 and $XSLTPROC is
+# defined.  It doesn't make sense to invoke this macro if Bison is expected to
+# have a non-zero exit status.
+m4_define([AT_BISON_CHECK_XML],
+[[if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then]
+  AT_SAVE_SPECIAL_FILES
+  [mkdir xml-tests]
+  m4_pushdef([AT_BISON_ARGS],
+             [m4_bpatsubsts([[$1]],
+                            [--report(-file)?=[^][ ]*], [],
+                            [--graph=[^][ ]*], [],
+                            [--xml=[^][ ]*], [])])dnl
+  # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  AT_BISON_CHECK_([[--report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot ]]AT_BISON_ARGS,
+                  [[0]], [ignore], [ignore])
+  AT_BISON_CHECK_([[--xml=xml-tests/test.xml ]]AT_BISON_ARGS,
+                 [[0]], [ignore], [ignore])
+  m4_popdef([AT_BISON_ARGS])dnl
+  [cp xml-tests/test.output expout]
+  AT_CHECK([[$XSLTPROC \
+             `]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml]], [[0]], [expout])
+  [sort xml-tests/test.dot > expout]
+  AT_CHECK([[$XSLTPROC \
+             `]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort]], [[0]], [expout])
+  [rm -rf xml-tests expout]
+  AT_RESTORE_SPECIAL_FILES
+[fi]])
+
+# AT_QUELL_VALGRIND
+# -----------------
+# Put this before a Bison invocation to keep Valgrind from complaining about
+# reachable memory.
+#
+# Do not quote invocations of this macro within the first argument of AT_CHECK.
+# The triple quoting below will cause test cases to fail if you do.  If you do
+# so anyway but also decrease the quoting below to avoid that problem, AT_CHECK
+# will then fail to shell-escape its contents when attempting to print them.
+# The testsuite verbose output, at least, will be incorrect, but nothing may
+# fail to make sure you notice.
+m4_define([AT_QUELL_VALGRIND],
+[[[VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS;]]])
+
+
 
 ## ------------------------ ##
 ## Compiling C, C++ Files.  ##
@@ -177,35 +594,315 @@
 
 # AT_COMPILE(OUTPUT, [SOURCES = OUTPUT.c])
 # ----------------------------------------
-# Compile SOURCES into OUTPUT.  If OUTPUT does not contain '.',
-# assume that we are linking too; this is a hack.
+# Compile SOURCES into OUTPUT.
+#
+# If OUTPUT does not contain '.', assume that we are linking too,
+# otherwise pass "-c"; this is a hack.  The default SOURCES is OUTPUT
+# with trailing .o removed, and ".c" appended.
 m4_define([AT_COMPILE],
-[AT_CHECK([$CC $CFLAGS $CPPFLAGS m4_bmatch([$1], [[.]], [], [$LDFLAGS ])-o $1 m4_default([$2], [$1.c])[]m4_bmatch([$1], [[.]], [], [ $LIBS])],
+[AT_CHECK([$BISON_C_WORKS], 0, ignore, ignore)
+AT_CHECK(m4_join([ ],
+                  [$CC $CFLAGS $CPPFLAGS],
+                  [m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])],
+                  [-o $1],
+                  [m4_default([$2], [m4_bpatsubst([$1], [\.o$]).c])],
+                  [m4_bmatch([$1], [[.]], [], [$LIBS])]),
 	   0, [ignore], [ignore])])
 
 # AT_COMPILE_CXX(OUTPUT, [SOURCES = OUTPUT.cc])
-# --------------------------------------------
-# Compile SOURCES into OUTPUT.  If OUTPUT does not contain '.',
-# assume that we are linking too; this is a hack.
-# If the C++ compiler does not work, ignore the test.
+# ---------------------------------------------
+# Compile SOURCES into OUTPUT.  If the C++ compiler does not work,
+# ignore the test.
+#
+# If OUTPUT does not contain '.', assume that we are linking too,
+# otherwise pass "-c"; this is a hack.  The default SOURCES is OUTPUT
+# with trailing .o removed, and ".cc" appended.
 m4_define([AT_COMPILE_CXX],
 [AT_KEYWORDS(c++)
 AT_CHECK([$BISON_CXX_WORKS], 0, ignore, ignore)
-AT_CHECK([$CXX $CXXFLAGS $CPPFLAGS m4_bmatch([$1], [[.]], [], [$LDFLAGS ])-o $1 m4_default([$2], [$1.cc])[]m4_bmatch([$1], [[.]], [], [ $LIBS])],
+AT_CHECK(m4_join([ ],
+                 [$CXX $CXXFLAGS $CPPFLAGS],
+                 [m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])],
+                 [-o $1],
+                 [m4_default([$2], [m4_bpatsubst([$1], [\.o$]).cc])],
+                 [m4_bmatch([$1], [[.]], [], [$LIBS])]),
 	 0, [ignore], [ignore])])
 
+# AT_JAVA_COMPILE(SOURCES)
+# ------------------------
+# Compile SOURCES into Java class files.  Skip the test if java or javac
+# is not installed.
+m4_define([AT_JAVA_COMPILE],
+[AT_KEYWORDS(java)
+AT_SKIP_IF([[test -z "$CONF_JAVAC"]])
+AT_SKIP_IF([[test -z "$CONF_JAVA"]])
+AT_CHECK([[$SHELL ../../../javacomp.sh ]$1],
+         [[0]], [ignore], [ignore])])
+
+# AT_LANG_COMPILE(OUTPUT, [SOURCES = OUTPUT.c]
+# --------------------------------------------
+# Compile SOURCES into OUTPUT.  Skip if compiler does not work.
+#
+# If OUTPUT does not contain '.', assume that we are linking too,
+# otherwise pass "-c"; this is a hack.  The default SOURCES is OUTPUT
+# with trailing .o removed, and ".c"/".cc" appended.
+m4_define([AT_LANG_COMPILE],
+[m4_case(AT_LANG,
+[c],    [AT_COMPILE([$1], [$2])],
+[c++],  [AT_COMPILE_CXX([$1], [$2])],
+[java], [AT_JAVA_COMPILE([$1.java], [$2])],
+        [m4_fatal([unknown language: ]m4_defn([AT_LANG]))])[]dnl
+])
+
+# AT_FULL_COMPILE(OUTPUT, [OTHER1], [OTHER2])
+# -------------------------------------------
+# Compile OUTPUT.y to OUTPUT.c, OUTPUT.cc, or OUTPUT.java, and then
+# compile it to OUTPUT or OUTPUT.class.  If OTHER is specified, compile
+# OUTPUT-OTHER.c, OUTPUT-OTHER.cc, or OUTPUT-OTHER.java to OUTPUT or
+# OUTPUT.java along with it.  Relies on AT_SKEL_CC_IF and
+# AT_SKEL_JAVA_IF.
+m4_define([AT_FULL_COMPILE],
+[m4_case(AT_LANG,
+[java],
+  [AT_BISON_CHECK([-o $1.java $1.y])
+   AT_LANG_COMPILE([$1],
+                   m4_join([ ],
+                           [$1.java],
+                           m4_ifval($2, [[$1-$2.java]]),
+                           m4_ifval($3, [[$1-$3.java]])))],
+[c++],
+  [AT_BISON_CHECK([-o $1.cc $1.y])
+   AT_LANG_COMPILE([$1],
+                   m4_join([ ],
+                           [$1.cc],
+                           m4_ifval($2, [[$1-$2.cc]]),
+                           m4_ifval($3, [[$1-$3.cc]])))],
+[c],
+  [AT_BISON_CHECK([-o $1.c $1.y])
+   AT_LANG_COMPILE([$1],
+                   m4_join([ ],
+                           [$1.c],
+                           m4_ifval($2, [[$1-$2.c]]),
+                           m4_ifval($3, [[$1-$3.c]])))])
+])
+
+
+
+# AT_SKIP_IF_CANNOT_LINK_C_AND_CXX
+# --------------------------------
+# Check that we can link together C and C++ objects.
+m4_define([AT_SKIP_IF_CANNOT_LINK_C_AND_CXX],
+[AT_DATA([c-and-cxx.h],
+[[#ifdef __cplusplus
+extern "C"
+{
+#endif
+  int fortytwo (void);
+#ifdef __cplusplus
+}
+#endif
+]])
+AT_DATA([c-only.c],
+[[#include "c-and-cxx.h"
+int
+main (void)
+{
+  return fortytwo () == 42 ? 0 : 1;
+}
+]])
+AT_DATA([cxx-only.cc],
+[[#include "c-and-cxx.h"
+int fortytwo ()
+{
+  return 42;
+}
+]])
+AT_COMPILE([c-only.o], [c-only.c])
+AT_COMPILE_CXX([cxx-only.o], [cxx-only.cc])
+AT_CHECK([$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS c-only.o cxx-only.o -o c-and-cxx ||
+          exit 77], [ignore], [ignore])
+AT_PARSER_CHECK([./c-and-cxx])
+])
 
 
 ## ---------------------------- ##
 ## Running a generated parser.  ##
 ## ---------------------------- ##
 
-# AT_PARSER_CHECK(COMMAND, EXIT-STATUS, EXPOUT, EXPERR)
-# -----------------------------------------------------
-# So that we can run `./testsuite PREPARSER='valgrind -q' for instance.
-m4_define([AT_PARSER_CHECK],
-[AT_CHECK([$PREPARSER $1], [$2], [$3], [$4])])
 
+# AT_PARSER_CHECK(COMMAND, EXIT-STATUS, EXPOUT, EXPERR, [PRE])
+# ------------------------------------------------------------
+# So that we can run `./testsuite PREPARSER='valgrind -q' for instance.
+#
+# Get rid of spurious messages when compiled with --coverage:
+# +profiling:/[...]/lib/fprintf.gcda:Merge mismatch for summaries
+m4_define([AT_PARSER_CHECK],
+[AT_CHECK([$5 $PREPARSER $1], [$2], [$3], [stderr])
+AT_CHECK([sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr],
+         [0], [], [$4])
+])
+
+
+# AT_JAVA_PARSER_CHECK(COMMAND, EXIT-STATUS, EXPOUT, EXPERR, [PRE])
+# -----------------------------------------------------------------
+m4_define([AT_JAVA_PARSER_CHECK],
+[AT_CHECK([$5[ $SHELL ../../../javaexec.sh ]$1], [$2], [$3], [$4])])
+
+
+# AT_TEST_TABLES_AND_PARSE(TITLE, COND-VALUE, TEST-SPEC,
+#                          DECLS, GRAMMAR, INPUT,
+#                          BISON-STDERR, TABLES-OR-LAST-STATE,
+#                          [OTHER-CHECKS],
+#                          [PARSER-EXIT-VALUE],
+#                          [PARSER-STDOUT], [PARSER-STDERR])
+# -------------------------------------------------------------
+# Using TITLE as the test group title, check the generated parser tables
+# and parser for a specified grammar file under a condition labeled by
+# COND-VALUE.
+#
+# TEST-SPEC is a comma-delimited list of attributes of this test.  Each
+# recognized attribute is described below where it is relevant.
+#
+# Insert DECLS and GRAMMAR into the declarations and grammar section of
+# the grammar file.  Insert basic yyerror, yylex, and main function
+# definitions as well.  Hardcode yylex to return the (possibly empty)
+# comma-delimited series of tokens in INPUT followed by token 0.
+#
+# If TEST-SPEC contains the attribute no-xml, then invoke bison using
+# AT_BISON_CHECK_NO_XML.  Otherwise, invoke bison using AT_BISON_CHECK.
+# On the bison command-line, specify `--report=all --defines'.  Check
+# that Bison exits with value 0, has no stdout, and has stderr
+# BISON-STDERR.
+#
+# If TEST-SPEC contains the attribute `last-state', check that the value
+# of TABLES-OR-LAST-STATE is the index of the last state generated for
+# the grammar; in other words, check the number of states (minus one).
+# Otherwise, check that everything in the `.output' file starting with
+# the definition of state 0 is the same as the entire value of
+# TABLES-OR-LAST-STATE.
+#
+# Expand the M4 in OTHER-CHECKS to perform additional checks of the
+# `.output' file, which is named `input.output', and/or grammar file,
+# which is named `input.y'.
+#
+# Finally, compile the generated parser and then run it using
+# AT_PARSER_CHECK with PARSER-EXIT-VALUE, PARSER-STDOUT, and
+# PARSER-STDERR as the 2nd-4th arguments.
+#
+# As a precondition, you must properly double-quote all arguments that
+# are to be interpreted as strings.
+#
+# AT_COND_CASE (when appearing in single-quoted segments of arguments)
+# invokes m4_case with its own arguments but COND-VALUE inserted as the
+# first argument.  This is useful, for example, when wrapping multiple
+# AT_TEST_TABLES_AND_PARSE invocations, each representing a different
+# condition, in another macro.
+#
+# For example:
+#
+#   # AT_TEST_SYNTAX_ERROR(DESCRIPTION, DECLS, GRAMMAR, INPUT, LAST-STATE,
+#   #                      PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR)
+#   # ---------------------------------------------------------------------
+#   m4_define([AT_TEST_SYNTAX_ERROR],
+#   [
+#     AT_TEST_TABLES_AND_PARSE([$1[ with %error-verbose]], [[verbose]],
+#                              [[last-state]],
+#                              [[%error-verbose ]$2], [$3], [$4],
+#                              [[]], [$5], [], [$6], [$7], [$8])
+#     AT_TEST_TABLES_AND_PARSE([$1[ with no %error-verbose]], [[no verbose]],
+#                              [[last-state]],
+#                              [$2], [$3], [$4],
+#                              [[]], [$5], [], [$6], [$7], [$8])
+#   ])
+#
+#   AT_TEST_SYNTAX_ERROR([[Single Char Grammar]],
+#                        [[%token 'b']], [[start: 'a' ;]], [['a', 'b']],
+#                        [[3]],
+#                        [[1]], [[]],
+#                        [AT_COND_CASE([[no verbose]],
+#                                      [[syntax error
+#   ]],
+#                                      [[syntax error, unexpected 'b', expecting $end
+#   ]])])
+m4_define([AT_TEST_TABLES_AND_PARSE],
+[m4_pushdef([AT_COND_CASE], [m4_case([$2], $][@)])
+
+AT_SETUP([$1])
+AT_BISON_OPTION_PUSHDEFS([$4])
+AT_DATA_GRAMMAR([[input.y]],
+[[%code {
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+
+]$4[
+
+%%
+
+]$5[
+
+%%
+]AT_YYERROR_DEFINE[
+static int
+yylex (void)
+{
+  static int const input[] = {
+    ]m4_if([$6], [], [], [$6], [[]], [], [$6[, ]])[0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+m4_if(m4_index(m4_quote($3), [no-xml]), -1,
+      [AT_BISON_CHECK],
+      [AT_BISON_CHECK_NO_XML])([[--report=all --defines -o input.c input.y]],
+                               [0], [], m4_dquote($7))
+
+m4_if(m4_index(m4_quote($3), [last-state]), -1,
+      [AT_CHECK([[sed -n '/^State 0$/,$p' input.output]], [[0]],
+                m4_dquote($8))],
+      [AT_CHECK([[sed -n 's/^State //p' input.output | tail -1]], [[0]],
+                m4_dquote($8)[[
+]])])
+
+$9
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+m4_bmatch([$4], [%define lr.type canonical-lr],
+[if test 32767 -lt `wc -l < input.c`; then
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic //'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic //'`
+fi])
+AT_COMPILE([[input]])
+
+AT_PARSER_CHECK([[./input]],
+                m4_ifval([$10], [m4_dquote($10)]),
+                m4_ifval([$11], [m4_dquote($11)]),
+                m4_ifval([$12], [m4_dquote($12)]))
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+m4_popdef([AT_COND_CASE])])
 
 
 
@@ -215,4 +912,15 @@
 
 AT_INIT
 
+# Cannot assign CC and CFLAGS here, since atlocal is loaded after
+# options are processed, so we don't know the value of CXX and
+# CXXFLAGS yet.
+#
+# Note that it also means that command line values for CXX and
+# CXXFLAGS will not be propagated to CC and CFLAGS.
+AT_ARG_OPTION([compile-c-with-cxx],
+              [compile C parsers with the C++ compiler])
+
+AT_COLOR_TESTS
+
 AT_TESTED([bison])
diff --git a/tests/named-refs.at b/tests/named-refs.at
new file mode 100644
index 0000000..46b0159
--- /dev/null
+++ b/tests/named-refs.at
@@ -0,0 +1,700 @@
+# Named references test.                           -*- Autotest -*-
+
+# Copyright (C) 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+# FIXME: Duplication with calc.at.
+AT_BANNER([[Named references tests.]])
+
+AT_SETUP([Tutorial calculator])
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([test.y],
+[[
+%{
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+typedef int semantic_value;
+FILE *input;
+static semantic_value global_result = 0;
+static int global_count = 0;
+static int power (int base, int exponent);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+%}
+
+%union
+{
+  semantic_value ival;
+};
+
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '='   /* comparison	       */
+%left '-' '+'
+%left '*' '/'
+%left NEG       /* negation--unary minus */
+%right '^'      /* exponentiation        */
+
+%%
+input:
+  line
+| input line         {}
+;
+
+line:
+  '\n'
+| exp '\n'           {}
+;
+
+exp:
+  NUM                { $$ = $NUM; }
+| exp[l] '=' exp[r]
+  {
+    if ($l != $r)
+      fprintf (stderr, "calc: error: %d != %d\n", $l, $r);
+    $$ = $l;
+  }
+| exp[x] '+' { $<ival>$ = $x; } [l] exp[r]  { $$ = $<ival>l + $r;    }
+| exp[l] '-' exp[r]  { $$ = $l - $r;        }
+| exp[l] '*' exp[r]  { $$ = $l * $r;        }
+| exp[l] '/' exp[r]  { $$ = $l / $r;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp[l] '^' exp[r]  { $$ = power ($l, $r); }
+| '(' exp[e] ')'     { $$ = $e;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+]AT_YYERROR_DEFINE[
+static int get_char (void)
+{
+  int res = getc (input);
+  return res;
+}
+
+static void unget_char (int c)
+{
+  ungetc (c, input);
+}
+
+static int read_signed_integer (void)
+{
+  int c = get_char ();
+  int sign = 1;
+  int n = 0;
+  if (c == '-')
+    {
+      c = get_char ();
+      sign = -1;
+    }
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char ();
+    }
+  unget_char ( c);
+  return sign * n;
+}
+
+static int
+yylex (void)
+{
+  int c;
+  /* Skip white space.  */
+  while ((c = get_char ()) == ' ' || c == '\t') {}
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char ( c);
+      (yylval).ival = read_signed_integer ();
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+
+static int power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+int main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+  status = yyparse ();
+  fclose (input);
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+]])
+
+AT_DATA([input.txt],
+[[
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+-1^2 = -1
+(-1)^2 = 1
+---1 = -1
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+2^2^3 = 256
+(2^2)^3 = 64
+]])
+
+AT_BISON_CHECK([-o test.c test.y])
+AT_COMPILE([[test]])
+AT_PARSER_CHECK([./test input.txt], 0, [], [stderr])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+#######################################################################
+
+
+AT_SETUP([Undefined and ambiguous references])
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([test.y],
+[[
+%{
+static int power (int base, int exponent);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+%}
+
+%union
+{
+  int ival;
+};
+
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '='   /* comparison	       */
+%left '-' '+'
+%left '*' '/'
+%left NEG       /* negation--unary minus */
+%right '^'      /* exponentiation        */
+
+%%
+input:
+  line
+| input line         {}
+;
+
+line:
+  '\n'
+| exp '\n'           {}
+;
+
+exp:
+  NUM { $$ = $NUM; }
+| exp[l] '=' exp[r]
+  {
+    if ($l != $r)
+      fprintf (stderr, "calc: error: %d != %d\n", $l, $r);
+    $$ = $l;
+  }
+| exp[x] '+' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>lo9 + $r; }
+| exp[x] '-' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>exp - $r; }
+| exp[x] '*' { $<ival>$ = $x; } [l] exp[r] { $$ = $l * $r; }
+| exp[l] '/' exp[r]  { $$ = $l / $r;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp[l] '^' exp[r]  { $$ = power ($l, $r12); }
+| '(' exp ')'        { $$ = $expo;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+]])
+
+AT_BISON_CHECK([-o test.c test.y], 1, [],
+[[test.y:50.51-60: error: invalid reference: '$<ival>lo9'
+test.y:50.3-68:      symbol not found in production: lo9
+test.y:51.51-60: warning: misleading reference: '$<ival>exp'
+test.y:42.1-3:       refers to: $exp at $$
+test.y:51.7:         possibly meant: $x, hiding $exp at $1
+test.y:51.41:        possibly meant: $r, hiding $exp at $4
+test.y:52.51-52: error: $l of 'exp' has no declared type
+test.y:55.40-43: error: invalid reference: '$r12'
+test.y:55.3-47:      symbol not found in production: r12
+test.y:56.29-33: error: invalid reference: '$expo'
+test.y:56.3-46:      symbol not found in production: expo
+]])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([Misleading references])
+AT_DATA_GRAMMAR([test.y],
+[[
+%%
+start: foo foo.bar { $foo.bar; }
+foo: '1'
+foo.bar: '2'
+]])
+AT_BISON_CHECK([-o test.c test.y], 0, [],
+[[test.y:11.22-29: warning: misleading reference: '$foo.bar'
+test.y:11.8-10:      refers to: $foo at $1
+test.y:11.12-18:     possibly meant: $[foo.bar] at $2
+]])
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([Many kinds of errors])
+AT_DATA_GRAMMAR([test.y],
+[[
+%token IDENT
+%token NUMBER
+%token ASSIGNOP
+%token IF
+%token IF1
+%token THEN
+%token ELSE
+%token FI
+%token WHILE
+%token DO
+%token OD
+%start program
+%%
+if_stmt1: IF expr[cond] THEN stmt[then] ELSE stmt.list[else] FI
+          { $if_stmt1 = new IfStmt($cond1, $then.f1, $else); };
+if_stmt2: IF expr[cond] THEN stmt[then] FI
+          { $if_stmt2 = new IfStmt($cond, $stmt.field, 0); };
+if_stmt3: IF expr[cond] THEN stmt.list FI
+          { $if_stmt3 = new IfStmt($cond, $stmt.list, 0); };
+if_stmt4: IF expr[cond] THEN stmt[xyz] ELSE stmt[xyz] FI
+          { $if_stmt4 = new IfStmt($cond, $xyz, $cond); };
+if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+          { $if_stmt5 = new IfStmt($cond, $stmt.list, $else); };
+if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+          { $if_stmt6 = new IfStmt($cond, $stmt.list.field, $else); };
+if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+          { $if_stmt7 = new IfStmt($cond, $[stmt.list].field, $else); };
+if_stmt8: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+          { $if_stmt8 = new IfStmt($cond, $then.1, $else); };
+if_stmt9: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+          { $if_stmt9 = new IfStmt($cond, $then.1.field, $else); };
+if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI
+          { $if_stmt10 = new IfStmt($cond, $stmt.x, 0); };
+if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+          { $if-stmt-a = new IfStmt($cond, $then, $else); };
+if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI
+          { $[if-stmt-b] = new IfStmt($cond, $then-a.f, $else); };
+program: stmt.list;
+stmt.list:  stmt ';' stmt.list { $3->insert($stmt); $$ = $3; }
+        |   stmt ';' { SL = new StmtList();  SL->insert($1); $$ = SL; }
+        ;
+stmt:  assign_stmt { $$ = $1; }
+    |  if_stmt { $$ = $1; }
+    |  if_stmt1 { $$ = $1; }
+    |  while_stmt { $$ = $1; }
+    ;
+assign_stmt: IDENT ASSIGNOP expr
+       { $$ = new AssignStmt(string($1),$3); };
+if_stmt: IF expr[cond] THEN stmt.list FI
+       { $if_stmt = new IfStmt($cond, $[stmt.list], 0); };
+while_stmt[res]: WHILE expr DO stmt.list OD
+       { $res = new WhileStmt($[expr], $[stmt.list]); };
+expr: expr '+' term   { $$ = new Plus($1,$3); }
+    | expr '-' term   { $$ = new Minus($1,$3); }
+    | term            { $$ = $1; }
+    ;
+term: term '*' factor   { $$ = new Times($1,$3); }
+    | factor            { $$ = $1; }
+    ;
+factor:     '(' expr ')'  { $$ = $2; }
+    |       NUMBER { $$ = new Number($1); }
+    |       IDENT { $$ = new Ident(string($1)); }
+    ;
+]])
+AT_BISON_CHECK([-o test.c test.y], 1, [],
+[[test.y:24.36-41: error: invalid reference: '$cond1'
+test.y:23.11-24.62:  symbol not found in production: cond1
+test.y:26.43-53: error: invalid reference: '$stmt.field'
+test.y:25.11-26.60:  symbol not found in production: stmt
+test.y:25.35-38:     possibly meant: $then.field, hiding $stmt.field at $4
+test.y:28.43-52: error: invalid reference: '$stmt.list'
+test.y:27.11-28.59:  symbol not found in production: stmt
+test.y:27.30-38:     possibly meant: $[stmt.list] at $4
+test.y:30.43-46: error: ambiguous reference: '$xyz'
+test.y:29.35-37:     refers to: $xyz at $4
+test.y:29.50-52:     refers to: $xyz at $6
+test.y:32.43-52: error: invalid reference: '$stmt.list'
+test.y:31.11-32.63:  symbol not found in production: stmt
+test.y:31.40-43:     possibly meant: $then, hiding $[stmt.list] at $4
+test.y:31.61-64:     possibly meant: $else, hiding $[stmt.list] at $6
+test.y:34.43-58: error: invalid reference: '$stmt.list.field'
+test.y:33.11-34.69:  symbol not found in production: stmt
+test.y:33.40-43:     possibly meant: $then.field, hiding $[stmt.list].field at $4
+test.y:33.61-64:     possibly meant: $else.field, hiding $[stmt.list].field at $6
+test.y:36.43-54: error: invalid reference: '$[stmt.list]'
+test.y:35.11-36.71:  symbol not found in production: stmt.list
+test.y:35.40-43:     possibly meant: $then, hiding $[stmt.list] at $4
+test.y:35.61-64:     possibly meant: $else, hiding $[stmt.list] at $6
+test.y:38.43-49: error: invalid reference: '$then.1'
+test.y:37.11-38.60:  symbol not found in production: then
+test.y:37.40-45:     possibly meant: $[then.1] at $4
+test.y:40.43-55: error: invalid reference: '$then.1.field'
+test.y:39.11-40.66:  symbol not found in production: then
+test.y:39.40-45:     possibly meant: $[then.1].field at $4
+test.y:42.44-50: error: invalid reference: '$stmt.x'
+test.y:41.12-42.57:  symbol not found in production: stmt
+test.y:41.36-41:     possibly meant: $[stmt.x].x, hiding $stmt.x at $4
+test.y:41.36-41:     possibly meant: $[stmt.x] at $4
+test.y:44.13-22: error: invalid reference: '$if-stmt-a'
+test.y:43.12-44.59:  symbol not found in production: if
+test.y:43.1-9:       possibly meant: $[if-stmt-a] at $$
+test.y:46.46-54: error: invalid reference: '$then-a.f'
+test.y:45.12-46.65:  symbol not found in production: then
+test.y:45.41-46:     possibly meant: $[then-a].f at $4
+]])
+
+AT_BISON_CHECK([-fcaret -o test.c test.y], 1, [],
+[[test.y:24.36-41: error: invalid reference: '$cond1'
+           { $if_stmt1 = new IfStmt($cond1, $then.f1, $else); };
+                                    ^^^^^^
+test.y:23.11-24.62:  symbol not found in production: cond1
+ if_stmt1: IF expr[cond] THEN stmt[then] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:26.43-53: error: invalid reference: '$stmt.field'
+           { $if_stmt2 = new IfStmt($cond, $stmt.field, 0); };
+                                           ^^^^^^^^^^^
+test.y:25.11-26.60:  symbol not found in production: stmt
+ if_stmt2: IF expr[cond] THEN stmt[then] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:25.35-38:     possibly meant: $then.field, hiding $stmt.field at $4
+ if_stmt2: IF expr[cond] THEN stmt[then] FI
+                                   ^^^^
+test.y:28.43-52: error: invalid reference: '$stmt.list'
+           { $if_stmt3 = new IfStmt($cond, $stmt.list, 0); };
+                                           ^^^^^^^^^^
+test.y:27.11-28.59:  symbol not found in production: stmt
+ if_stmt3: IF expr[cond] THEN stmt.list FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:27.30-38:     possibly meant: $[stmt.list] at $4
+ if_stmt3: IF expr[cond] THEN stmt.list FI
+                              ^^^^^^^^^
+test.y:30.43-46: error: ambiguous reference: '$xyz'
+           { $if_stmt4 = new IfStmt($cond, $xyz, $cond); };
+                                           ^^^^
+test.y:29.35-37:     refers to: $xyz at $4
+ if_stmt4: IF expr[cond] THEN stmt[xyz] ELSE stmt[xyz] FI
+                                   ^^^
+test.y:29.50-52:     refers to: $xyz at $6
+ if_stmt4: IF expr[cond] THEN stmt[xyz] ELSE stmt[xyz] FI
+                                                  ^^^
+test.y:32.43-52: error: invalid reference: '$stmt.list'
+           { $if_stmt5 = new IfStmt($cond, $stmt.list, $else); };
+                                           ^^^^^^^^^^
+test.y:31.11-32.63:  symbol not found in production: stmt
+ if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:31.40-43:     possibly meant: $then, hiding $[stmt.list] at $4
+ if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                        ^^^^
+test.y:31.61-64:     possibly meant: $else, hiding $[stmt.list] at $6
+ if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                                             ^^^^
+test.y:34.43-58: error: invalid reference: '$stmt.list.field'
+           { $if_stmt6 = new IfStmt($cond, $stmt.list.field, $else); };
+                                           ^^^^^^^^^^^^^^^^
+test.y:33.11-34.69:  symbol not found in production: stmt
+ if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:33.40-43:     possibly meant: $then.field, hiding $[stmt.list].field at $4
+ if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                        ^^^^
+test.y:33.61-64:     possibly meant: $else.field, hiding $[stmt.list].field at $6
+ if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                                             ^^^^
+test.y:36.43-54: error: invalid reference: '$[stmt.list]'
+           { $if_stmt7 = new IfStmt($cond, $[stmt.list].field, $else); };
+                                           ^^^^^^^^^^^^
+test.y:35.11-36.71:  symbol not found in production: stmt.list
+ if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:35.40-43:     possibly meant: $then, hiding $[stmt.list] at $4
+ if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                        ^^^^
+test.y:35.61-64:     possibly meant: $else, hiding $[stmt.list] at $6
+ if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                                             ^^^^
+test.y:38.43-49: error: invalid reference: '$then.1'
+           { $if_stmt8 = new IfStmt($cond, $then.1, $else); };
+                                           ^^^^^^^
+test.y:37.11-38.60:  symbol not found in production: then
+ if_stmt8: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:37.40-45:     possibly meant: $[then.1] at $4
+ if_stmt8: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+                                        ^^^^^^
+test.y:40.43-55: error: invalid reference: '$then.1.field'
+           { $if_stmt9 = new IfStmt($cond, $then.1.field, $else); };
+                                           ^^^^^^^^^^^^^
+test.y:39.11-40.66:  symbol not found in production: then
+ if_stmt9: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:39.40-45:     possibly meant: $[then.1].field at $4
+ if_stmt9: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+                                        ^^^^^^
+test.y:42.44-50: error: invalid reference: '$stmt.x'
+           { $if_stmt10 = new IfStmt($cond, $stmt.x, 0); };
+                                            ^^^^^^^
+test.y:41.12-42.57:  symbol not found in production: stmt
+ if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:41.36-41:     possibly meant: $[stmt.x].x, hiding $stmt.x at $4
+ if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI
+                                    ^^^^^^
+test.y:41.36-41:     possibly meant: $[stmt.x] at $4
+ if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI
+                                    ^^^^^^
+test.y:44.13-22: error: invalid reference: '$if-stmt-a'
+           { $if-stmt-a = new IfStmt($cond, $then, $else); };
+             ^^^^^^^^^^
+test.y:43.12-44.59:  symbol not found in production: if
+ if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:43.1-9:       possibly meant: $[if-stmt-a] at $$
+ if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+ ^^^^^^^^^
+test.y:46.46-54: error: invalid reference: '$then-a.f'
+           { $[if-stmt-b] = new IfStmt($cond, $then-a.f, $else); };
+                                              ^^^^^^^^^
+test.y:45.12-46.65:  symbol not found in production: then
+ if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:45.41-46:     possibly meant: $[then-a].f at $4
+ if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI
+                                         ^^^^^^
+]])
+
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([Missing identifiers in brackets])
+AT_DATA_GRAMMAR([test.y],
+[[
+%%
+start: foo[] bar
+  { s = $foo; }
+]])
+AT_BISON_CHECK([-o test.c test.y], 1, [],
+[[test.y:11.12: error: an identifier expected
+]])
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([Redundant words in brackets])
+AT_DATA_GRAMMAR([test.y],
+[[
+%%
+start: foo[ a d ] bar
+  { s = $foo; }
+]])
+AT_BISON_CHECK([-o test.c test.y], 1, [],
+[[test.y:11.15: error: unexpected identifier in bracketed name: 'd'
+]])
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([Comments in brackets])
+AT_DATA_GRAMMAR([test.y],
+[[
+%%
+start: foo[/* comment */] bar
+  { s = $foo; }
+]])
+AT_BISON_CHECK([-o test.c test.y], 1, [],
+[[test.y:11.25: error: an identifier expected
+]])
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([Stray symbols in brackets])
+AT_DATA_GRAMMAR([test.y],
+[[
+%%
+start: foo[ % /* aaa */ *&-.+\000\001\002\377 ] bar
+  { s = $foo; }
+]])
+AT_CHECK([[$PERL -pi -e 's/\\(\d{3})/chr(oct($1))/ge' test.y || exit 77]])
+AT_BISON_CHECK([-o test.c test.y], 1, [],
+[[test.y:11.13: error: invalid character in bracketed name: '%'
+test.y:11.25-27: error: invalid characters in bracketed name: '*&-'
+test.y:11.29-30: error: invalid characters in bracketed name: '+\0\001\002\377'
+]])
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([Redundant words in LHS brackets])
+AT_DATA_GRAMMAR([test.y],
+[[
+%%
+start[a s]: foo;
+]])
+AT_BISON_CHECK([-o test.c test.y], 1, [],
+[[test.y:11.9: error: unexpected identifier in bracketed name: 's'
+]])
+AT_CLEANUP
+
+#######################################################################
+
+# Bison used to free twice the named ref for "a", since a single copy
+# was used in two rules.
+AT_SETUP([Factored LHS])
+AT_DATA_GRAMMAR([test.y],
+[[
+%%
+start[a]: "foo" | "bar";
+]])
+AT_BISON_CHECK([-o test.c test.y])
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([Unresolved references])
+AT_DATA_GRAMMAR([test.y],
+[[
+%%
+stat:
+  sym_a sym_b { func($sym.field); }
+| sym_a sym_b { func($<aa>sym.field); }
+| sym_a sym_b { func($[sym.field]); }
+| sym_a sym_b { func($<aa>[sym.field]); }
+| sym_a sym_b { func($sym); }
+| sym_a sym_b { func($<aa>sym); }
+| sym_a sym_b { func($[sym]); } sym_a sym_b { func($<aa>[sym]); }
+;
+
+stat1:
+  sym_a sym_b { func($sym-field); }
+| sym_a sym_b { func($<aa>sym-field); }
+| sym_a sym_b { func($[sym-field]); }
+| sym_a sym_b { func($<aa>[sym-field]); }
+| sym_a sym_b { func($sym); }
+| sym_a sym_b { func($<aa>sym); }
+| sym_a sym_b { func($[sym]); } sym_a sym_b { func($<aa>[sym]); }
+;
+
+sym_a: 'a';
+sym_b: 'b';
+]])
+AT_BISON_CHECK([-o test.c test.y], 1, [],
+[[test.y:12.22-31: error: invalid reference: '$sym.field'
+test.y:12.3-35:      symbol not found in production: sym
+test.y:13.22-35: error: invalid reference: '$<aa>sym.field'
+test.y:13.3-39:      symbol not found in production: sym
+test.y:14.22-33: error: invalid reference: '$[sym.field]'
+test.y:14.3-37:      symbol not found in production: sym.field
+test.y:15.22-37: error: invalid reference: '$<aa>[sym.field]'
+test.y:15.3-41:      symbol not found in production: sym.field
+test.y:16.22-25: error: invalid reference: '$sym'
+test.y:16.3-29:      symbol not found in production: sym
+test.y:17.22-29: error: invalid reference: '$<aa>sym'
+test.y:17.3-33:      symbol not found in production: sym
+test.y:18.22-27: error: invalid reference: '$[sym]'
+test.y:18.3-65:      symbol not found in production before $3: sym
+test.y:18.52-61: error: invalid reference: '$<aa>[sym]'
+test.y:18.3-65:      symbol not found in production: sym
+test.y:22.22-31: error: invalid reference: '$sym-field'
+test.y:22.3-35:      symbol not found in production: sym
+test.y:23.22-35: error: invalid reference: '$<aa>sym-field'
+test.y:23.3-39:      symbol not found in production: sym
+test.y:24.22-33: error: invalid reference: '$[sym-field]'
+test.y:24.3-37:      symbol not found in production: sym-field
+test.y:25.22-37: error: invalid reference: '$<aa>[sym-field]'
+test.y:25.3-41:      symbol not found in production: sym-field
+test.y:26.22-25: error: invalid reference: '$sym'
+test.y:26.3-29:      symbol not found in production: sym
+test.y:27.22-29: error: invalid reference: '$<aa>sym'
+test.y:27.3-33:      symbol not found in production: sym
+test.y:28.22-27: error: invalid reference: '$[sym]'
+test.y:28.3-65:      symbol not found in production before $3: sym
+test.y:28.52-61: error: invalid reference: '$<aa>[sym]'
+test.y:28.3-65:      symbol not found in production: sym
+]])
+AT_CLEANUP
+
+#######################################################################
+
+AT_SETUP([[$ or @ followed by . or -]])
+AT_DATA([[test.y]],
+[[
+%%
+start:
+  .field { $.field; }
+| 'a'    { @.field; }
+;
+.field: ;
+]])
+AT_BISON_CHECK([[test.y]], [[1]], [],
+[[test.y:4.12-18: error: invalid reference: '$.field'
+test.y:4.13:        syntax error after '$', expecting integer, letter, '_', '@<:@', or '$'
+test.y:4.3-8:       possibly meant: $[.field] at $1
+test.y:5.12-18: error: invalid reference: '@.field'
+test.y:5.13:        syntax error after '@', expecting integer, letter, '_', '@<:@', or '$'
+]])
+AT_DATA([[test.y]],
+[[
+%%
+start:
+  'a' { $-field; }
+| 'b' { @-field; }
+;
+]])
+AT_BISON_CHECK([[test.y]], [[0]], [],
+[[test.y:4.9: warning: stray '$'
+test.y:5.9: warning: stray '@'
+]])
+AT_CLEANUP
diff --git a/tests/output.at b/tests/output.at
index 8ddde46..657903a 100644
--- a/tests/output.at
+++ b/tests/output.at
@@ -1,39 +1,41 @@
 # Checking the output filenames.                    -*- Autotest -*-
-# Copyright (C) 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2000-2002, 2005-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[Output file names.]])
 
 
 # AT_CHECK_OUTPUT(INPUT-FILE, [DIRECTIVES], [FLAGS], EXPECTED-FILES, [SHELLIO],
-#                 [ADDITIONAL-TESTS])
+#                 [ADDITIONAL-TESTS], [PRE-TESTS])
 # -----------------------------------------------------------------------------
 m4_define([AT_CHECK_OUTPUT],
-[AT_SETUP([Output files: $2 $3 $5])
-case "$1" in
-  */*) mkdir `echo "$1" | sed 's,/.*,,'`;;
-esac
+[AT_SETUP([[Output files: $2 $3 $5]])
+$7
+for file in $1 $4; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 AT_DATA([$1],
 [[$2
 %%
 foo: {};
 ]])
 
-AT_CHECK([bison $3 $1 $5], 0)
+AT_BISON_CHECK([$3 $1 $5], 0)
 AT_CHECK([ls $4], [], [ignore])
 $6
 AT_CLEANUP
@@ -41,9 +43,15 @@
 
 AT_CHECK_OUTPUT([foo.y], [], [-dv],
 		[foo.output foo.tab.c foo.tab.h])
+
+# Some versions of Valgrind (at least valgrind-3.6.0.SVN-Debian) report
+# "fgrep: write error: Bad file descriptor" when stdout is closed, so we
+# skip this test group during maintainer-check-valgrind.
 AT_CHECK_OUTPUT([foo.y], [], [-dv],
 		[foo.output foo.tab.c foo.tab.h],
-		[>&-])
+		[>&-], [],
+		[AT_CHECK([[case "$PREBISON" in *valgrind*) exit 77;; esac]])])
+
 AT_CHECK_OUTPUT([foo.y], [], [-dv -o foo.c],
 		[foo.c foo.h foo.output])
 AT_CHECK_OUTPUT([foo.y], [], [-dv -o foo.tab.c],
@@ -53,7 +61,7 @@
 AT_CHECK_OUTPUT([foo.y], [], [-dv -b bar],
 		[bar.output bar.tab.c bar.tab.h])
 AT_CHECK_OUTPUT([foo.y], [], [-dv -g -o foo.c],
-		[foo.c foo.h foo.output foo.vcg])
+		[foo.c foo.dot foo.h foo.output])
 
 
 AT_CHECK_OUTPUT([foo.y], [%defines %verbose],      [],
@@ -64,13 +72,13 @@
 AT_CHECK_OUTPUT([foo.yy], [%defines %verbose %yacc],[],
 		[y.output y.tab.c y.tab.h])
 
-# Exercise %output and %file-prefix
-AT_CHECK_OUTPUT([foo.y], [%file-prefix="bar" %defines %verbose],      [],
+# Exercise %output and %file-prefix including deprecated '='
+AT_CHECK_OUTPUT([foo.y], [%file-prefix "bar" %defines %verbose],      [],
 		[bar.output bar.tab.c bar.tab.h])
 AT_CHECK_OUTPUT([foo.y], [%output="bar.c" %defines %verbose %yacc],[],
 		[bar.output bar.c bar.h])
 AT_CHECK_OUTPUT([foo.y],
-		[%file-prefix="baz" %output="bar.c" %defines %verbose %yacc],
+		[%file-prefix="baz" %output "bar.c" %defines %verbose %yacc],
 		[],
 		[bar.output bar.c bar.h])
 
@@ -86,6 +94,10 @@
 		[--defines=foo.hpp -o foo.c++],
 		[foo.c++ foo.hpp])
 
+AT_CHECK_OUTPUT([foo.yy], [%defines "foo.hpp"],
+		[-o foo.c++],
+		[foo.c++ foo.hpp])
+
 AT_CHECK_OUTPUT([foo.yy], [],
 		[-o foo.c++ --graph=foo.gph],
 		[foo.c++ foo.gph])
@@ -112,3 +124,475 @@
 		[-o subdir/foo.cc],
 		[subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/stack.hh subdir/position.hh],
 		[], [AT_CHECK_NO_SUBDIR_PART([subdir/foo])])
+
+AT_CHECK_OUTPUT([gram_dir/foo.yy],
+                [%skeleton "lalr1.cc" %defines %verbose %file-prefix "output_dir/foo"],
+                [],
+		[output_dir/foo.tab.cc output_dir/foo.tab.hh output_dir/foo.output output_dir/location.hh output_dir/stack.hh output_dir/position.hh])
+
+
+# AT_CHECK_CONFLICTING_OUTPUT(INPUT-FILE, DIRECTIVES, FLAGS, STDERR,
+#                             [EXIT-STATUS])
+# ------------------------------------------------------------------
+m4_define([AT_CHECK_CONFLICTING_OUTPUT],
+[AT_SETUP([Conflicting output files: $2 $3])
+case "$1" in
+  */*) mkdir `echo "$1" | sed 's,/.*,,'`;;
+esac
+AT_DATA([$1],
+[[$2
+%%
+foo: {};
+]])
+
+[cp ]$1[ expout]
+# Because an output file name conflict is still a warning, Bison exits
+# with status 0, so AT_BISON_CHECK does not realize that there may be no
+# output file against which to check the XML.  AT_BISON_CHECK_NO_XML
+# avoids that problem.
+AT_BISON_CHECK_NO_XML([$3 $1], $5, [], [$4])
+AT_CHECK([[cat $1]], [[0]], [expout])
+AT_CLEANUP
+])
+
+AT_CHECK_CONFLICTING_OUTPUT([foo.y],
+[], [--graph="foo.tab.c"],
+[foo.y: warning: conflicting outputs to file 'foo.tab.c'
+])
+
+AT_CHECK_CONFLICTING_OUTPUT([foo.y],
+[%defines "foo.output"], [-v],
+[foo.y: warning: conflicting outputs to file 'foo.output'
+])
+
+AT_CHECK_CONFLICTING_OUTPUT([foo.y],
+[%skeleton "lalr1.cc" %defines], [--graph="location.hh"],
+[foo.y: warning: conflicting outputs to file 'location.hh'
+])
+
+AT_CHECK_CONFLICTING_OUTPUT([foo.y], [], [-o foo.y],
+[foo.y: error: refusing to overwrite the input file 'foo.y'
+], 1)
+
+
+# AT_CHECK_OUTPUT_FILE_NAME(FILE-NAME-PREFIX, [ADDITIONAL-TESTS])
+# ---------------------------------------------------------------
+m4_define([AT_CHECK_OUTPUT_FILE_NAME],
+[AT_SETUP([Output file name: $1])
+
+AT_BISON_OPTION_PUSHDEFS
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+AT_CHECK([[touch "]AS_ESCAPE([$1[.tmp]])[" || exit 77]])
+
+AT_DATA_GRAMMAR([glr.y],
+[[%glr-parser
+%code {
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
+}
+%%
+start: {};
+]])
+AT_BISON_CHECK([-o "AS_ESCAPE([$1.c])" --defines="AS_ESCAPE([$1.h])" glr.y])
+AT_CHECK([ls "AS_ESCAPE([$1.c])" "AS_ESCAPE([$1.h])"], [], [ignore])
+AT_COMPILE([glr.o], [-c "AS_ESCAPE([$1.c])"])
+$2
+
+AT_DATA_GRAMMAR([cxx.y],
+[[%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
+]])
+AT_BISON_CHECK([-o "AS_ESCAPE([$1.c])" --defines="AS_ESCAPE([$1.h])" cxx.y])
+AT_CHECK([ls "AS_ESCAPE([$1.c])" "AS_ESCAPE([$1.h])"], [], [ignore])
+AT_COMPILE_CXX([cxx.o], [-c "AS_ESCAPE([$1.c])"])
+$2
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+])
+
+# Notice that the header file name here cannot contain
+# '"' since FILENAME in '#include "FILENAME"' cannot.
+AT_CHECK_OUTPUT_FILE_NAME([[`~!@#$%^&*()-=_+{}[]|\:;<>, .']])
+dnl Work around a bug in m4_expand that broke AT_SETUP in autoconf 2.62,
+dnl by using the definition from 2.63.
+m4_version_prereq([2.63], [],
+[m4_define([m4_expand], [_$0(-=<{($1)}>=-)])
+m4_define([_m4_expand],
+[m4_changequote([-=<{(], [)}>=-])$1m4_changequote([, ])])])
+AT_CHECK_OUTPUT_FILE_NAME([[(]])
+AT_CHECK_OUTPUT_FILE_NAME([[)]])
+AT_CHECK_OUTPUT_FILE_NAME([[@%:@]])
+AT_CHECK_OUTPUT_FILE_NAME([[@@]])
+AT_CHECK_OUTPUT_FILE_NAME([[@{]])
+AT_CHECK_OUTPUT_FILE_NAME([[@}]])
+AT_CHECK_OUTPUT_FILE_NAME([[@<:@]])
+AT_CHECK_OUTPUT_FILE_NAME([[@:>@]])
+
+
+# AT_TEST(SETUP-NAME, GRAMMAR, DOT-BODY)
+# --------------------------------------
+# Check that the DOT graph for GRAMMAR is DOT-BODY.
+m4_pushdef([AT_TEST],
+[AT_SETUP([$1])
+AT_KEYWORDS([[graph]])
+AT_DATA([[input.y]], [$2])
+AT_BISON_CHECK([[-rall --graph input.y]], [0], [[]], [[ignore]])
+AT_CHECK([[grep -v // input.dot]], [0],
+[[
+digraph "input.y"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+  ]$3[}
+]])
+AT_CLEANUP
+])
+
+
+## ------------------------ ##
+## Graph with no conflicts. ##
+## ------------------------ ##
+
+AT_TEST([Graph with no conflicts],
+[[%%
+exp: a '?' b;
+a: ;
+b: 'b';
+]],
+[[
+  0 [label="State 0\n\l  0 $accept: . exp $end\l  1 exp: . a '?' b\l  2 a: .\l"]
+  0 -> 1 [style=dashed label="exp"]
+  0 -> 2 [style=dashed label="a"]
+  0 -> "0R2" [style=solid]
+ "0R2" [label="R2", fillcolor=3, shape=diamond, style=filled]
+  1 [label="State 1\n\l  0 $accept: exp . $end\l"]
+  1 -> 3 [style=solid label="$end"]
+  2 [label="State 2\n\l  1 exp: a . '?' b\l"]
+  2 -> 4 [style=solid label="'?'"]
+  3 [label="State 3\n\l  0 $accept: exp $end .\l"]
+  3 -> "3R0" [style=solid]
+ "3R0" [label="Acc", fillcolor=1, shape=diamond, style=filled]
+  4 [label="State 4\n\l  1 exp: a '?' . b\l  3 b: . 'b'\l"]
+  4 -> 5 [style=solid label="'b'"]
+  4 -> 6 [style=dashed label="b"]
+  5 [label="State 5\n\l  3 b: 'b' .\l"]
+  5 -> "5R3" [style=solid]
+ "5R3" [label="R3", fillcolor=3, shape=diamond, style=filled]
+  6 [label="State 6\n\l  1 exp: a '?' b .\l"]
+  6 -> "6R1" [style=solid]
+ "6R1" [label="R1", fillcolor=3, shape=diamond, style=filled]
+]])
+
+## ------------------------ ##
+## Graph with unsolved S/R. ##
+## ------------------------ ##
+
+AT_TEST([Graph with unsolved S/R],
+[[%%
+start:
+    'a'
+  | empty_a 'a'
+  | 'b'
+  | empty_b 'b'
+  | 'c'
+  | empty_c 'c'
+  ;
+empty_a: %prec 'a';
+empty_b: %prec 'b';
+empty_c: %prec 'c';
+]],
+[[
+  0 [label="State 0\n\l  0 $accept: . start $end\l  1 start: . 'a'\l  2      | . empty_a 'a'\l  3      | . 'b'\l  4      | . empty_b 'b'\l  5      | . 'c'\l  6      | . empty_c 'c'\l  7 empty_a: .  ['a']\l  8 empty_b: .  ['b']\l  9 empty_c: .  ['c']\l"]
+  0 -> 1 [style=solid label="'a'"]
+  0 -> 2 [style=solid label="'b'"]
+  0 -> 3 [style=solid label="'c'"]
+  0 -> 4 [style=dashed label="start"]
+  0 -> 5 [style=dashed label="empty_a"]
+  0 -> 6 [style=dashed label="empty_b"]
+  0 -> 7 [style=dashed label="empty_c"]
+  0 -> "0R7d" [label="['a']", style=solid]
+ "0R7d" [label="R7", fillcolor=5, shape=diamond, style=filled]
+  0 -> "0R8d" [label="['b']", style=solid]
+ "0R8d" [label="R8", fillcolor=5, shape=diamond, style=filled]
+  0 -> "0R9d" [label="['c']", style=solid]
+ "0R9d" [label="R9", fillcolor=5, shape=diamond, style=filled]
+  1 [label="State 1\n\l  1 start: 'a' .\l"]
+  1 -> "1R1" [style=solid]
+ "1R1" [label="R1", fillcolor=3, shape=diamond, style=filled]
+  2 [label="State 2\n\l  3 start: 'b' .\l"]
+  2 -> "2R3" [style=solid]
+ "2R3" [label="R3", fillcolor=3, shape=diamond, style=filled]
+  3 [label="State 3\n\l  5 start: 'c' .\l"]
+  3 -> "3R5" [style=solid]
+ "3R5" [label="R5", fillcolor=3, shape=diamond, style=filled]
+  4 [label="State 4\n\l  0 $accept: start . $end\l"]
+  4 -> 8 [style=solid label="$end"]
+  5 [label="State 5\n\l  2 start: empty_a . 'a'\l"]
+  5 -> 9 [style=solid label="'a'"]
+  6 [label="State 6\n\l  4 start: empty_b . 'b'\l"]
+  6 -> 10 [style=solid label="'b'"]
+  7 [label="State 7\n\l  6 start: empty_c . 'c'\l"]
+  7 -> 11 [style=solid label="'c'"]
+  8 [label="State 8\n\l  0 $accept: start $end .\l"]
+  8 -> "8R0" [style=solid]
+ "8R0" [label="Acc", fillcolor=1, shape=diamond, style=filled]
+  9 [label="State 9\n\l  2 start: empty_a 'a' .\l"]
+  9 -> "9R2" [style=solid]
+ "9R2" [label="R2", fillcolor=3, shape=diamond, style=filled]
+  10 [label="State 10\n\l  4 start: empty_b 'b' .\l"]
+  10 -> "10R4" [style=solid]
+ "10R4" [label="R4", fillcolor=3, shape=diamond, style=filled]
+  11 [label="State 11\n\l  6 start: empty_c 'c' .\l"]
+  11 -> "11R6" [style=solid]
+ "11R6" [label="R6", fillcolor=3, shape=diamond, style=filled]
+]])
+
+## ---------------------- ##
+## Graph with solved S/R. ##
+## ---------------------- ##
+
+AT_TEST([Graph with solved S/R],
+[[%left 'a'
+%right 'b'
+%right 'c'
+%%
+start:
+    'a'
+  | empty_a 'a'
+  | 'b'
+  | empty_b 'b'
+  | 'c'
+  | empty_c 'c'
+  ;
+empty_a: %prec 'a';
+empty_b: %prec 'b';
+empty_c: %prec 'c';
+]],
+[[
+  0 [label="State 0\n\l  0 $accept: . start $end\l  1 start: . 'a'\l  2      | . empty_a 'a'\l  3      | . 'b'\l  4      | . empty_b 'b'\l  5      | . 'c'\l  6      | . empty_c 'c'\l  7 empty_a: .  ['a']\l  8 empty_b: .  []\l  9 empty_c: .  []\l"]
+  0 -> 1 [style=solid label="'b'"]
+  0 -> 2 [style=solid label="'c'"]
+  0 -> 3 [style=dashed label="start"]
+  0 -> 4 [style=dashed label="empty_a"]
+  0 -> 5 [style=dashed label="empty_b"]
+  0 -> 6 [style=dashed label="empty_c"]
+  0 -> "0R7" [style=solid]
+ "0R7" [label="R7", fillcolor=3, shape=diamond, style=filled]
+  1 [label="State 1\n\l  3 start: 'b' .\l"]
+  1 -> "1R3" [style=solid]
+ "1R3" [label="R3", fillcolor=3, shape=diamond, style=filled]
+  2 [label="State 2\n\l  5 start: 'c' .\l"]
+  2 -> "2R5" [style=solid]
+ "2R5" [label="R5", fillcolor=3, shape=diamond, style=filled]
+  3 [label="State 3\n\l  0 $accept: start . $end\l"]
+  3 -> 7 [style=solid label="$end"]
+  4 [label="State 4\n\l  2 start: empty_a . 'a'\l"]
+  4 -> 8 [style=solid label="'a'"]
+  5 [label="State 5\n\l  4 start: empty_b . 'b'\l"]
+  5 -> 9 [style=solid label="'b'"]
+  6 [label="State 6\n\l  6 start: empty_c . 'c'\l"]
+  6 -> 10 [style=solid label="'c'"]
+  7 [label="State 7\n\l  0 $accept: start $end .\l"]
+  7 -> "7R0" [style=solid]
+ "7R0" [label="Acc", fillcolor=1, shape=diamond, style=filled]
+  8 [label="State 8\n\l  2 start: empty_a 'a' .\l"]
+  8 -> "8R2" [style=solid]
+ "8R2" [label="R2", fillcolor=3, shape=diamond, style=filled]
+  9 [label="State 9\n\l  4 start: empty_b 'b' .\l"]
+  9 -> "9R4" [style=solid]
+ "9R4" [label="R4", fillcolor=3, shape=diamond, style=filled]
+  10 [label="State 10\n\l  6 start: empty_c 'c' .\l"]
+  10 -> "10R6" [style=solid]
+ "10R6" [label="R6", fillcolor=3, shape=diamond, style=filled]
+]])
+
+## ---------------- ##
+## Graph with  R/R. ##
+## ---------------- ##
+
+AT_TEST([Graph with R/R],
+[[%%
+exp: a | b;
+a: ;
+b: ;
+]],
+[[
+  0 [label="State 0\n\l  0 $accept: . exp $end\l  1 exp: . a\l  2    | . b\l  3 a: .  [$end]\l  4 b: .  [$end]\l"]
+  0 -> 1 [style=dashed label="exp"]
+  0 -> 2 [style=dashed label="a"]
+  0 -> 3 [style=dashed label="b"]
+  0 -> "0R3" [style=solid]
+ "0R3" [label="R3", fillcolor=3, shape=diamond, style=filled]
+  0 -> "0R4d" [label="[$end]", style=solid]
+ "0R4d" [label="R4", fillcolor=5, shape=diamond, style=filled]
+  1 [label="State 1\n\l  0 $accept: exp . $end\l"]
+  1 -> 4 [style=solid label="$end"]
+  2 [label="State 2\n\l  1 exp: a .\l"]
+  2 -> "2R1" [style=solid]
+ "2R1" [label="R1", fillcolor=3, shape=diamond, style=filled]
+  3 [label="State 3\n\l  2 exp: b .\l"]
+  3 -> "3R2" [style=solid]
+ "3R2" [label="R2", fillcolor=3, shape=diamond, style=filled]
+  4 [label="State 4\n\l  0 $accept: exp $end .\l"]
+  4 -> "4R0" [style=solid]
+ "4R0" [label="Acc", fillcolor=1, shape=diamond, style=filled]
+]])
+
+## ---------------------------------------- ##
+## Graph with reductions with multiple LAT. ##
+## ---------------------------------------- ##
+
+AT_TEST([Graph with reductions with multiple LAT],
+[[%%
+exp: a ';' | a ';' | a '.' | b '?' | b '!' | c '?' | c ';';
+a: ;
+b: ;
+c: ;
+]],
+[[
+  0 [label="State 0\n\l  0 $accept: . exp $end\l  1 exp: . a ';'\l  2    | . a ';'\l  3    | . a '.'\l  4    | . b '?'\l  5    | . b '!'\l  6    | . c '?'\l  7    | . c ';'\l  8 a: .  [';', '.']\l  9 b: .  ['?', '!']\l 10 c: .  [';', '?']\l"]
+  0 -> 1 [style=dashed label="exp"]
+  0 -> 2 [style=dashed label="a"]
+  0 -> 3 [style=dashed label="b"]
+  0 -> 4 [style=dashed label="c"]
+  0 -> "0R8" [style=solid]
+ "0R8" [label="R8", fillcolor=3, shape=diamond, style=filled]
+  0 -> "0R9" [label="['?', '!']", style=solid]
+ "0R9" [label="R9", fillcolor=3, shape=diamond, style=filled]
+  0 -> "0R10d" [label="[';', '?']", style=solid]
+ "0R10d" [label="R10", fillcolor=5, shape=diamond, style=filled]
+  1 [label="State 1\n\l  0 $accept: exp . $end\l"]
+  1 -> 5 [style=solid label="$end"]
+  2 [label="State 2\n\l  1 exp: a . ';'\l  2    | a . ';'\l  3    | a . '.'\l"]
+  2 -> 6 [style=solid label="';'"]
+  2 -> 7 [style=solid label="'.'"]
+  3 [label="State 3\n\l  4 exp: b . '?'\l  5    | b . '!'\l"]
+  3 -> 8 [style=solid label="'?'"]
+  3 -> 9 [style=solid label="'!'"]
+  4 [label="State 4\n\l  6 exp: c . '?'\l  7    | c . ';'\l"]
+  4 -> 10 [style=solid label="';'"]
+  4 -> 11 [style=solid label="'?'"]
+  5 [label="State 5\n\l  0 $accept: exp $end .\l"]
+  5 -> "5R0" [style=solid]
+ "5R0" [label="Acc", fillcolor=1, shape=diamond, style=filled]
+  6 [label="State 6\n\l  1 exp: a ';' .  [$end]\l  2    | a ';' .  [$end]\l"]
+  6 -> "6R1" [style=solid]
+ "6R1" [label="R1", fillcolor=3, shape=diamond, style=filled]
+  6 -> "6R2d" [label="[$end]", style=solid]
+ "6R2d" [label="R2", fillcolor=5, shape=diamond, style=filled]
+  7 [label="State 7\n\l  3 exp: a '.' .\l"]
+  7 -> "7R3" [style=solid]
+ "7R3" [label="R3", fillcolor=3, shape=diamond, style=filled]
+  8 [label="State 8\n\l  4 exp: b '?' .\l"]
+  8 -> "8R4" [style=solid]
+ "8R4" [label="R4", fillcolor=3, shape=diamond, style=filled]
+  9 [label="State 9\n\l  5 exp: b '!' .\l"]
+  9 -> "9R5" [style=solid]
+ "9R5" [label="R5", fillcolor=3, shape=diamond, style=filled]
+  10 [label="State 10\n\l  7 exp: c ';' .\l"]
+  10 -> "10R7" [style=solid]
+ "10R7" [label="R7", fillcolor=3, shape=diamond, style=filled]
+  11 [label="State 11\n\l  6 exp: c '?' .\l"]
+  11 -> "11R6" [style=solid]
+ "11R6" [label="R6", fillcolor=3, shape=diamond, style=filled]
+]])
+
+## ------------------------------------------------------ ##
+## Graph with a reduction rule both enabled and disabled. ##
+## ------------------------------------------------------ ##
+
+AT_TEST([Graph with a reduction rule both enabled and disabled],
+[[%%
+exp: ifexp | opexp | imm;
+ifexp: "if" exp "then" exp elseexp;
+elseexp: "else" exp | ;
+opexp: exp '+' exp;
+imm: '0';
+]],
+[[
+  0 [label="State 0\n\l  0 $accept: . exp $end\l  1 exp: . ifexp\l  2    | . opexp\l  3    | . imm\l  4 ifexp: . \"if\" exp \"then\" exp elseexp\l  7 opexp: . exp '+' exp\l  8 imm: . '0'\l"]
+  0 -> 1 [style=solid label="\"if\""]
+  0 -> 2 [style=solid label="'0'"]
+  0 -> 3 [style=dashed label="exp"]
+  0 -> 4 [style=dashed label="ifexp"]
+  0 -> 5 [style=dashed label="opexp"]
+  0 -> 6 [style=dashed label="imm"]
+  1 [label="State 1\n\l  1 exp: . ifexp\l  2    | . opexp\l  3    | . imm\l  4 ifexp: . \"if\" exp \"then\" exp elseexp\l  4      | \"if\" . exp \"then\" exp elseexp\l  7 opexp: . exp '+' exp\l  8 imm: . '0'\l"]
+  1 -> 1 [style=solid label="\"if\""]
+  1 -> 2 [style=solid label="'0'"]
+  1 -> 7 [style=dashed label="exp"]
+  1 -> 4 [style=dashed label="ifexp"]
+  1 -> 5 [style=dashed label="opexp"]
+  1 -> 6 [style=dashed label="imm"]
+  2 [label="State 2\n\l  8 imm: '0' .\l"]
+  2 -> "2R8" [style=solid]
+ "2R8" [label="R8", fillcolor=3, shape=diamond, style=filled]
+  3 [label="State 3\n\l  0 $accept: exp . $end\l  7 opexp: exp . '+' exp\l"]
+  3 -> 8 [style=solid label="$end"]
+  3 -> 9 [style=solid label="'+'"]
+  4 [label="State 4\n\l  1 exp: ifexp .\l"]
+  4 -> "4R1" [style=solid]
+ "4R1" [label="R1", fillcolor=3, shape=diamond, style=filled]
+  5 [label="State 5\n\l  2 exp: opexp .\l"]
+  5 -> "5R2" [style=solid]
+ "5R2" [label="R2", fillcolor=3, shape=diamond, style=filled]
+  6 [label="State 6\n\l  3 exp: imm .\l"]
+  6 -> "6R3" [style=solid]
+ "6R3" [label="R3", fillcolor=3, shape=diamond, style=filled]
+  7 [label="State 7\n\l  4 ifexp: \"if\" exp . \"then\" exp elseexp\l  7 opexp: exp . '+' exp\l"]
+  7 -> 10 [style=solid label="\"then\""]
+  7 -> 9 [style=solid label="'+'"]
+  8 [label="State 8\n\l  0 $accept: exp $end .\l"]
+  8 -> "8R0" [style=solid]
+ "8R0" [label="Acc", fillcolor=1, shape=diamond, style=filled]
+  9 [label="State 9\n\l  1 exp: . ifexp\l  2    | . opexp\l  3    | . imm\l  4 ifexp: . \"if\" exp \"then\" exp elseexp\l  7 opexp: . exp '+' exp\l  7      | exp '+' . exp\l  8 imm: . '0'\l"]
+  9 -> 1 [style=solid label="\"if\""]
+  9 -> 2 [style=solid label="'0'"]
+  9 -> 11 [style=dashed label="exp"]
+  9 -> 4 [style=dashed label="ifexp"]
+  9 -> 5 [style=dashed label="opexp"]
+  9 -> 6 [style=dashed label="imm"]
+  10 [label="State 10\n\l  1 exp: . ifexp\l  2    | . opexp\l  3    | . imm\l  4 ifexp: . \"if\" exp \"then\" exp elseexp\l  4      | \"if\" exp \"then\" . exp elseexp\l  7 opexp: . exp '+' exp\l  8 imm: . '0'\l"]
+  10 -> 1 [style=solid label="\"if\""]
+  10 -> 2 [style=solid label="'0'"]
+  10 -> 12 [style=dashed label="exp"]
+  10 -> 4 [style=dashed label="ifexp"]
+  10 -> 5 [style=dashed label="opexp"]
+  10 -> 6 [style=dashed label="imm"]
+  11 [label="State 11\n\l  7 opexp: exp . '+' exp\l  7      | exp '+' exp .  [$end, \"then\", \"else\", '+']\l"]
+  11 -> 9 [style=solid label="'+'"]
+  11 -> "11R7d" [label="['+']", style=solid]
+ "11R7d" [label="R7", fillcolor=5, shape=diamond, style=filled]
+  11 -> "11R7" [style=solid]
+ "11R7" [label="R7", fillcolor=3, shape=diamond, style=filled]
+  12 [label="State 12\n\l  4 ifexp: \"if\" exp \"then\" exp . elseexp\l  5 elseexp: . \"else\" exp\l  6        | .  [$end, \"then\", \"else\", '+']\l  7 opexp: exp . '+' exp\l"]
+  12 -> 13 [style=solid label="\"else\""]
+  12 -> 9 [style=solid label="'+'"]
+  12 -> 14 [style=dashed label="elseexp"]
+  12 -> "12R6d" [label="[\"else\", '+']", style=solid]
+ "12R6d" [label="R6", fillcolor=5, shape=diamond, style=filled]
+  12 -> "12R6" [style=solid]
+ "12R6" [label="R6", fillcolor=3, shape=diamond, style=filled]
+  13 [label="State 13\n\l  1 exp: . ifexp\l  2    | . opexp\l  3    | . imm\l  4 ifexp: . \"if\" exp \"then\" exp elseexp\l  5 elseexp: \"else\" . exp\l  7 opexp: . exp '+' exp\l  8 imm: . '0'\l"]
+  13 -> 1 [style=solid label="\"if\""]
+  13 -> 2 [style=solid label="'0'"]
+  13 -> 15 [style=dashed label="exp"]
+  13 -> 4 [style=dashed label="ifexp"]
+  13 -> 5 [style=dashed label="opexp"]
+  13 -> 6 [style=dashed label="imm"]
+  14 [label="State 14\n\l  4 ifexp: \"if\" exp \"then\" exp elseexp .\l"]
+  14 -> "14R4" [style=solid]
+ "14R4" [label="R4", fillcolor=3, shape=diamond, style=filled]
+  15 [label="State 15\n\l  5 elseexp: \"else\" exp .  [$end, \"then\", \"else\", '+']\l  7 opexp: exp . '+' exp\l"]
+  15 -> 9 [style=solid label="'+'"]
+  15 -> "15R5d" [label="['+']", style=solid]
+ "15R5d" [label="R5", fillcolor=5, shape=diamond, style=filled]
+  15 -> "15R5" [style=solid]
+ "15R5" [label="R5", fillcolor=3, shape=diamond, style=filled]
+]])
+
+m4_popdef([AT_TEST])
diff --git a/tests/package.m4 b/tests/package.m4
index 4c59293..3b599c0 100644
--- a/tests/package.m4
+++ b/tests/package.m4
@@ -1,6 +1,6 @@
 # Signature of the current package.
 m4_define([AT_PACKAGE_NAME],      [GNU Bison])
 m4_define([AT_PACKAGE_TARNAME],   [bison])
-m4_define([AT_PACKAGE_VERSION],   [2.3])
-m4_define([AT_PACKAGE_STRING],    [GNU Bison 2.3])
+m4_define([AT_PACKAGE_VERSION],   [2.7])
+m4_define([AT_PACKAGE_STRING],    [GNU Bison 2.7])
 m4_define([AT_PACKAGE_BUGREPORT], [bug-bison@gnu.org])
diff --git a/tests/push.at b/tests/push.at
new file mode 100644
index 0000000..1b99397
--- /dev/null
+++ b/tests/push.at
@@ -0,0 +1,159 @@
+# Checking Push Parsing.                            -*- Autotest -*-
+
+# Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+AT_BANNER([[Push Parsing Tests]])
+
+## -------------------------------- ##
+## Memory Leak for Early Deletion.  ##
+## -------------------------------- ##
+
+AT_SETUP([[Memory Leak for Early Deletion]])
+
+# Requires Valgrind.
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[
+%{
+  #include <assert.h>
+  #include <stdio.h>
+  #define YYINITDEPTH 1
+]AT_YYERROR_DECLARE[
+%}
+
+%define api.pure
+%define api.push-pull push
+
+%%
+
+start: 'a' 'b' 'c' ;
+
+%%
+
+]AT_YYERROR_DEFINE[
+
+int
+main (void)
+{
+  yypstate *ps;
+
+  /* Make sure we don't try to free ps->yyss in this case.  */
+  ps = yypstate_new ();
+  yypstate_delete (ps);
+
+  /* yypstate_delete used to leak ps->yyss if the stack was reallocated but the
+     parse did not return on success, syntax error, or memory exhaustion.  */
+  ps = yypstate_new ();
+  assert (yypush_parse (ps, 'a', YY_NULL) == YYPUSH_MORE);
+  yypstate_delete (ps);
+
+  ps = yypstate_new ();
+  assert (yypush_parse (ps, 'a', YY_NULL) == YYPUSH_MORE);
+  assert (yypush_parse (ps, 'b', YY_NULL) == YYPUSH_MORE);
+  yypstate_delete (ps);
+
+  return 0;
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([[-o input.c input.y]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]])
+
+AT_CLEANUP
+
+## --------------------------- ##
+## Multiple impure instances.  ##
+## --------------------------- ##
+
+AT_SETUP([[Multiple impure instances]])
+
+m4_pushdef([AT_MULTIPLE_IMPURE_INSTANCES_CHECK], [
+AT_BISON_OPTION_PUSHDEFS([%define api.push-pull $1])
+AT_DATA_GRAMMAR([[input.y]],
+[[
+%{
+  #include <assert.h>
+  #include <stdio.h>
+]AT_YYERROR_DECLARE[
+]m4_if([$1], [[both]], [AT_YYLEX_DECLARE([])])[
+%}
+
+%define api.push-pull ]$1[
+
+%%
+
+start: ;
+
+%%
+]AT_YYERROR_DEFINE[
+]m4_if([$1], [[both]], [AT_YYLEX_DEFINE])[
+
+int
+main (void)
+{
+  int i;
+  for (i = 0; i < 2; ++i)
+    {
+      yypstate *ps = yypstate_new ();
+      assert (ps);
+      assert (yypstate_new () == YY_NULL);
+      ]m4_if([$1], [[both]], [[assert (yyparse () == 2)]])[;
+      yychar = 0;
+      assert (yypush_parse (ps) == 0);
+      assert (yypstate_new () == YY_NULL);
+      ]m4_if([$1], [[both]], [[assert (yyparse () == 2)]])[;
+      yypstate_delete (ps);
+    }
+
+  return 0;
+}
+]])
+
+AT_BISON_CHECK([[-o input.c input.y]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]])
+AT_BISON_OPTION_POPDEFS
+])
+
+AT_MULTIPLE_IMPURE_INSTANCES_CHECK([[both]])
+AT_MULTIPLE_IMPURE_INSTANCES_CHECK([[push]])
+
+m4_popdef([AT_MULTIPLE_IMPURE_INSTANCES_CHECK])
+
+AT_CLEANUP
+
+## ----------------------- ##
+## Unsupported Skeletons.  ##
+## ----------------------- ##
+
+AT_SETUP([[Unsupported Skeletons]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[input.y]],
+[[%glr-parser
+%define api.push-pull push
+%%
+start: ;
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([[input.y]], [[1]], [],
+[[input.y:2.9-21: error: %define variable 'api.push-pull' is not used
+]])
+
+AT_CLEANUP
diff --git a/tests/reduce.at b/tests/reduce.at
index 90b0130..47f923c 100644
--- a/tests/reduce.at
+++ b/tests/reduce.at
@@ -1,20 +1,19 @@
 # Exercising Bison Grammar Reduction.                      -*- Autotest -*-
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2001-2002, 2007-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[Grammar Reduction.]])
 
@@ -27,7 +26,7 @@
 
 AT_DATA([[input.y]],
 [[%verbose
-%output="input.c"
+%output "input.c"
 
 %token useless1
 %token useless2
@@ -44,10 +43,10 @@
 exp: useful;
 ]])
 
-AT_CHECK([[bison input.y]])
+AT_BISON_CHECK([[input.y]])
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
-[[Terminals which are not used
+[[Terminals unused in grammar
    useless1
    useless2
    useless3
@@ -71,7 +70,7 @@
 
 AT_DATA([[input.y]],
 [[%verbose
-%output="input.c"
+%output "input.c"
 
 %nterm useless1
 %nterm useless2
@@ -88,21 +87,21 @@
 exp: useful;
 ]])
 
-AT_CHECK([[bison input.y]], 0, [],
-[[input.y: warning: 9 useless nonterminals
-input.y:4.8-15: warning: useless nonterminal: useless1
-input.y:5.8-15: warning: useless nonterminal: useless2
-input.y:6.8-15: warning: useless nonterminal: useless3
-input.y:7.8-15: warning: useless nonterminal: useless4
-input.y:8.8-15: warning: useless nonterminal: useless5
-input.y:9.8-15: warning: useless nonterminal: useless6
-input.y:10.8-15: warning: useless nonterminal: useless7
-input.y:11.8-15: warning: useless nonterminal: useless8
-input.y:12.8-15: warning: useless nonterminal: useless9
+AT_BISON_CHECK([[input.y]], 0, [],
+[[input.y: warning: 9 nonterminals useless in grammar
+input.y:4.8-15: warning: nonterminal useless in grammar: useless1
+input.y:5.8-15: warning: nonterminal useless in grammar: useless2
+input.y:6.8-15: warning: nonterminal useless in grammar: useless3
+input.y:7.8-15: warning: nonterminal useless in grammar: useless4
+input.y:8.8-15: warning: nonterminal useless in grammar: useless5
+input.y:9.8-15: warning: nonterminal useless in grammar: useless6
+input.y:10.8-15: warning: nonterminal useless in grammar: useless7
+input.y:11.8-15: warning: nonterminal useless in grammar: useless8
+input.y:12.8-15: warning: nonterminal useless in grammar: useless9
 ]])
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
-[[Useless nonterminals
+[[Nonterminals useless in grammar
    useless1
    useless2
    useless3
@@ -128,7 +127,7 @@
 
 AT_DATA([[input.y]],
 [[%verbose
-%output="input.c"
+%output "input.c"
 %token useful
 %%
 exp: useful;
@@ -143,30 +142,90 @@
 useless9: '9';
 ]])
 
-AT_CHECK([[bison input.y]], 0, [],
-[[input.y: warning: 9 useless nonterminals and 9 useless rules
-input.y:6.1-8: warning: useless nonterminal: useless1
-input.y:7.1-8: warning: useless nonterminal: useless2
-input.y:8.1-8: warning: useless nonterminal: useless3
-input.y:9.1-8: warning: useless nonterminal: useless4
-input.y:10.1-8: warning: useless nonterminal: useless5
-input.y:11.1-8: warning: useless nonterminal: useless6
-input.y:12.1-8: warning: useless nonterminal: useless7
-input.y:13.1-8: warning: useless nonterminal: useless8
-input.y:14.1-8: warning: useless nonterminal: useless9
-input.y:6.11-13: warning: useless rule: useless1: '1'
-input.y:7.11-13: warning: useless rule: useless2: '2'
-input.y:8.11-13: warning: useless rule: useless3: '3'
-input.y:9.11-13: warning: useless rule: useless4: '4'
-input.y:10.11-13: warning: useless rule: useless5: '5'
-input.y:11.11-13: warning: useless rule: useless6: '6'
-input.y:12.11-13: warning: useless rule: useless7: '7'
-input.y:13.11-13: warning: useless rule: useless8: '8'
-input.y:14.11-13: warning: useless rule: useless9: '9'
+AT_BISON_CHECK([[-fcaret input.y]], 0, [],
+[[input.y: warning: 9 nonterminals useless in grammar
+input.y: warning: 9 rules useless in grammar
+input.y:6.1-8: warning: nonterminal useless in grammar: useless1
+ useless1: '1';
+ ^^^^^^^^
+input.y:7.1-8: warning: nonterminal useless in grammar: useless2
+ useless2: '2';
+ ^^^^^^^^
+input.y:8.1-8: warning: nonterminal useless in grammar: useless3
+ useless3: '3';
+ ^^^^^^^^
+input.y:9.1-8: warning: nonterminal useless in grammar: useless4
+ useless4: '4';
+ ^^^^^^^^
+input.y:10.1-8: warning: nonterminal useless in grammar: useless5
+ useless5: '5';
+ ^^^^^^^^
+input.y:11.1-8: warning: nonterminal useless in grammar: useless6
+ useless6: '6';
+ ^^^^^^^^
+input.y:12.1-8: warning: nonterminal useless in grammar: useless7
+ useless7: '7';
+ ^^^^^^^^
+input.y:13.1-8: warning: nonterminal useless in grammar: useless8
+ useless8: '8';
+ ^^^^^^^^
+input.y:14.1-8: warning: nonterminal useless in grammar: useless9
+ useless9: '9';
+ ^^^^^^^^
+input.y:6.11-13: warning: rule useless in grammar
+ useless1: '1';
+           ^^^
+input.y:7.11-13: warning: rule useless in grammar
+ useless2: '2';
+           ^^^
+input.y:8.11-13: warning: rule useless in grammar
+ useless3: '3';
+           ^^^
+input.y:9.11-13: warning: rule useless in grammar
+ useless4: '4';
+           ^^^
+input.y:10.11-13: warning: rule useless in grammar
+ useless5: '5';
+           ^^^
+input.y:11.11-13: warning: rule useless in grammar
+ useless6: '6';
+           ^^^
+input.y:12.11-13: warning: rule useless in grammar
+ useless7: '7';
+           ^^^
+input.y:13.11-13: warning: rule useless in grammar
+ useless8: '8';
+           ^^^
+input.y:14.11-13: warning: rule useless in grammar
+ useless9: '9';
+           ^^^
+]])
+
+AT_BISON_CHECK([[input.y]], 0, [],
+[[input.y: warning: 9 nonterminals useless in grammar
+input.y: warning: 9 rules useless in grammar
+input.y:6.1-8: warning: nonterminal useless in grammar: useless1
+input.y:7.1-8: warning: nonterminal useless in grammar: useless2
+input.y:8.1-8: warning: nonterminal useless in grammar: useless3
+input.y:9.1-8: warning: nonterminal useless in grammar: useless4
+input.y:10.1-8: warning: nonterminal useless in grammar: useless5
+input.y:11.1-8: warning: nonterminal useless in grammar: useless6
+input.y:12.1-8: warning: nonterminal useless in grammar: useless7
+input.y:13.1-8: warning: nonterminal useless in grammar: useless8
+input.y:14.1-8: warning: nonterminal useless in grammar: useless9
+input.y:6.11-13: warning: rule useless in grammar: useless1: '1'
+input.y:7.11-13: warning: rule useless in grammar: useless2: '2'
+input.y:8.11-13: warning: rule useless in grammar: useless3: '3'
+input.y:9.11-13: warning: rule useless in grammar: useless4: '4'
+input.y:10.11-13: warning: rule useless in grammar: useless5: '5'
+input.y:11.11-13: warning: rule useless in grammar: useless6: '6'
+input.y:12.11-13: warning: rule useless in grammar: useless7: '7'
+input.y:13.11-13: warning: rule useless in grammar: useless8: '8'
+input.y:14.11-13: warning: rule useless in grammar: useless9: '9'
 ]])
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
-[[Useless nonterminals
+[[Nonterminals useless in grammar
    useless1
    useless2
    useless3
@@ -176,7 +235,7 @@
    useless7
    useless8
    useless9
-Terminals which are not used
+Terminals unused in grammar
    '1'
    '2'
    '3'
@@ -186,7 +245,7 @@
    '7'
    '8'
    '9'
-Useless rules
+Rules useless in grammar
     2 useless1: '1'
     3 useless2: '2'
     4 useless3: '3'
@@ -221,7 +280,7 @@
 /* A useful one. */
 %token useful
 %verbose
-%output="not-reduced.c"
+%output "not-reduced.c"
 
 %%
 
@@ -238,22 +297,43 @@
 %%
 ]])
 
-AT_CHECK([[bison not-reduced.y]], 0, [],
-[[not-reduced.y: warning: 2 useless nonterminals and 3 useless rules
-not-reduced.y:14.1-13: warning: useless nonterminal: not_reachable
-not-reduced.y:11.6-19: warning: useless nonterminal: non_productive
-not-reduced.y:11.6-57: warning: useless rule: exp: non_productive
-not-reduced.y:14.16-56: warning: useless rule: not_reachable: useful
-not-reduced.y:17.17-18.63: warning: useless rule: non_productive: non_productive useless_token
+AT_BISON_CHECK([[-fcaret not-reduced.y]], 0, [],
+[[not-reduced.y: warning: 2 nonterminals useless in grammar
+not-reduced.y: warning: 3 rules useless in grammar
+not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable
+ not_reachable: useful  { /* A not reachable action. */ }
+ ^^^^^^^^^^^^^
+not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive
+    | non_productive    { /* A non productive action. */ }
+      ^^^^^^^^^^^^^^
+not-reduced.y:11.6-57: warning: rule useless in grammar
+    | non_productive    { /* A non productive action. */ }
+      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+not-reduced.y:14.16-56: warning: rule useless in grammar
+ not_reachable: useful  { /* A not reachable action. */ }
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+not-reduced.y:17.17-18.63: warning: rule useless in grammar
+ non_productive: non_productive useless_token
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+]])
+
+AT_BISON_CHECK([[not-reduced.y]], 0, [],
+[[not-reduced.y: warning: 2 nonterminals useless in grammar
+not-reduced.y: warning: 3 rules useless in grammar
+not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable
+not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive
+not-reduced.y:11.6-57: warning: rule useless in grammar: exp: non_productive
+not-reduced.y:14.16-56: warning: rule useless in grammar: not_reachable: useful
+not-reduced.y:17.17-18.63: warning: rule useless in grammar: non_productive: non_productive useless_token
 ]])
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' not-reduced.output]], 0,
-[[Useless nonterminals
+[[Nonterminals useless in grammar
    not_reachable
    non_productive
-Terminals which are not used
+Terminals unused in grammar
    useless_token
-Useless rules
+Rules useless in grammar
     2 exp: non_productive
     3 not_reachable: useful
     4 non_productive: non_productive useless_token
@@ -267,7 +347,7 @@
 /* A useful one. */
 %token useful
 %verbose
-%output="reduced.c"
+%output "reduced.c"
 
 %%
 
@@ -284,7 +364,7 @@
 %%
 ]])
 
-AT_CHECK([[bison reduced.y]])
+AT_BISON_CHECK([[reduced.y]])
 
 # Comparing the parsers.
 cp reduced.c expout
@@ -304,7 +384,7 @@
 
 AT_DATA([[input.y]],
 [[%verbose
-%output="input.c"
+%output "input.c"
 %token useful
 %%
 exp: useful | underivable;
@@ -312,20 +392,21 @@
 indirection: underivable;
 ]])
 
-AT_CHECK([[bison input.y]], 0, [],
-[[input.y: warning: 2 useless nonterminals and 3 useless rules
-input.y:5.15-25: warning: useless nonterminal: underivable
-input.y:6.14-24: warning: useless nonterminal: indirection
-input.y:5.15-25: warning: useless rule: exp: underivable
-input.y:6.14-24: warning: useless rule: underivable: indirection
-input.y:7.14-24: warning: useless rule: indirection: underivable
+AT_BISON_CHECK([[input.y]], 0, [],
+[[input.y: warning: 2 nonterminals useless in grammar
+input.y: warning: 3 rules useless in grammar
+input.y:5.15-25: warning: nonterminal useless in grammar: underivable
+input.y:6.14-24: warning: nonterminal useless in grammar: indirection
+input.y:5.15-25: warning: rule useless in grammar: exp: underivable
+input.y:6.14-24: warning: rule useless in grammar: underivable: indirection
+input.y:7.14-24: warning: rule useless in grammar: indirection: underivable
 ]])
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
-[[Useless nonterminals
+[[Nonterminals useless in grammar
    underivable
    indirection
-Useless rules
+Rules useless in grammar
     2 exp: underivable
     3 underivable: indirection
     4 indirection: underivable
@@ -342,14 +423,1243 @@
 AT_SETUP([Empty Language])
 
 AT_DATA([[input.y]],
-[[%output="input.c"
+[[%output "input.c"
 %%
 exp: exp;
 ]])
 
-AT_CHECK([[bison input.y]], 1, [],
-[[input.y: warning: 2 useless nonterminals and 2 useless rules
+AT_BISON_CHECK([[input.y]], 1, [],
+[[input.y: warning: 2 nonterminals useless in grammar
+input.y: warning: 2 rules useless in grammar
 input.y:3.1-3: fatal error: start symbol exp does not derive any sentence
 ]])
 
 AT_CLEANUP
+
+
+
+## ----------------- ##
+## %define lr.type.  ##
+## ----------------- ##
+
+# AT_TEST_LR_TYPE(DESCRIPTION,
+#                 DECLS, GRAMMAR, INPUT,
+#                 BISON-STDERR, TABLES,
+#                 [OTHER-CHECKS],
+#                 [PARSER-EXIT-VALUE],
+#                 [PARSER-STDOUT], [PARSER-STDERR])
+# -------------------------------------------------
+m4_define([AT_TEST_LR_TYPE],
+[
+AT_TEST_TABLES_AND_PARSE([[no %define lr.type: ]$1],
+                         [[LALR]], [[]],
+                         [$2], m4_shiftn(2, $@))
+AT_TEST_TABLES_AND_PARSE([[%define lr.type lalr: ]$1],
+                         [[LALR]], [[]],
+                         [[%define lr.type lalr
+]$2],
+                         m4_shiftn(2, $@))
+AT_TEST_TABLES_AND_PARSE([[%define lr.type ielr: ]$1],
+                         [[IELR]], [[]],
+                         [[%define lr.type ielr
+]$2],
+                         m4_shiftn(2, $@))
+AT_TEST_TABLES_AND_PARSE([[%define lr.type canonical-lr: ]$1],
+                         [[canonical LR]], [[]],
+                         [[%define lr.type canonical-lr
+]$2],
+                         m4_shiftn(2, $@))
+])
+
+AT_TEST_LR_TYPE([[Single State Split]],
+[[%left 'a'
+// Conflict resolution renders state 12 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states]],
+[[
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+/* A conflict should appear after the first 'a' in rules 4 and 5 but only after
+   having shifted the first 'a' in rule 1.  However, when LALR(1) merging is
+   chosen, the state containing that conflict is reused after having seen the
+   first 'b' in rule 2 and then the first 'a' in rules 4 and 5.  In both cases,
+   because of the merged state, if the next token is an 'a', the %left forces a
+   reduction action with rule 5.  In the latter case, only a shift is actually
+   grammatically correct.  Thus, the parser would report a syntax error for the
+   grammatically correct sentence "baab" because it would encounter a syntax
+   error after that incorrect reduction.
+
+   Despite not being LALR(1), Menhir version 20070322 suffers from this problem
+   as well.  It uses David Pager's weak compatibility test for merging states.
+   Bison and Menhir accept non-LR(1) grammars with conflict resolution.  Pager
+   designed his algorithm only for LR(1) grammars.  */
+A: 'a' 'a' /* rule 4 */
+ | 'a'     /* rule 5 */
+ ;
+
+/* Rule 3, rule 6, and rule 7 ensure that Bison does not report rule 4 as
+   useless after conflict resolution.  This proves that, even though LALR(1)
+   generates incorrect parser tables sometimes, Bison will not necessarily
+   produce any warning to help the user realize it.  */
+c: 'a' 'b' /* rule 6 */
+ | A       /* rule 7 */
+ ;
+]],
+
+dnl INPUT
+[['b', 'a', 'a', 'b']],
+
+dnl BISON-STDERR
+[],
+
+dnl TABLES
+[[State 0
+
+    0 $accept: . S $end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state ]AT_COND_CASE([[LALR]], [[5]], [[16]])[
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a'
+    5  | . 'a'
+    6 c: . 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 $accept: S . $end
+
+    $end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  ]AT_COND_CASE([[LALR]], [[['a', 'b']]], [[['a']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['a']],
+                  [[$default]])[  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  [$end]
+    6 c: 'a' . 'b'
+
+    'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[17]],
+                                              [[12]])[
+    'b'  shift, and go to state 15
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 5 (A)
+
+
+State 9
+
+    7 c: A .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 3 (S)
+
+
+State 11
+
+    0 $accept: S $end .
+
+    $default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' .]AT_COND_CASE([[canonical LR]], [[  ['a']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['a']],
+                  [[$default]])[  reduce using rule 4 (A)
+
+
+State 13
+
+    1 S: 'a' A 'a' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 2 (S)
+
+
+State 15
+
+    6 c: 'a' 'b' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 6 (c)]AT_COND_CASE([[LALR]],
+                                                                       [[]], [[
+
+
+State 16
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  ['b']
+
+    'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[18]],
+                                              [[12]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['b']],
+                  [[$default]])[  reduce using rule 5 (A)]AT_COND_CASE([[canonical LR]], [[
+
+
+State 17
+
+    4 A: 'a' 'a' .  [$end]
+
+    $end  reduce using rule 4 (A)
+
+
+State 18
+
+    4 A: 'a' 'a' .  ['b']
+
+    'b'  reduce using rule 4 (A)]])])[
+]],
+
+dnl OTHER-CHECKS
+[],
+
+dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
+[AT_COND_CASE([[LALR]], [[1]], [[0]])],
+[],
+[AT_COND_CASE([[LALR]],
+[[syntax error
+]])])
+
+AT_TEST_LR_TYPE([[Lane Split]],
+[[%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states]],
+[[
+/* Similar to the last test case set but two states must be split.  */
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+A: 'a' 'a' 'a' /* rule 4 */
+ | 'a' 'a'     /* rule 5 */
+ ;
+
+c: 'a' 'a' 'b' /* rule 6 */
+ | A           /* rule 7 */
+ ;
+]],
+
+dnl INPUT
+[['b', 'a', 'a', 'a', 'b']],
+
+dnl BISON-STDERR
+[],
+
+dnl TABLES
+[[State 0
+
+    0 $accept: . S $end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state ]AT_COND_CASE([[LALR]], [[5]], [[18]])[
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+    6 c: . 'a' 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 $accept: S . $end
+
+    $end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+    6 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    7 c: A .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 3 (S)
+
+
+State 11
+
+    0 $accept: S $end .
+
+    $default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  ]AT_COND_CASE([[LALR]], [[['a', 'b']]], [[['a']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['a']],
+                  [[$default]])[  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  [$end]
+    6 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[19]],
+                                              [[16]])[
+    'b'  shift, and go to state 17
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 5 (A)
+
+
+State 16
+
+    4 A: 'a' 'a' 'a' .]AT_COND_CASE([[canonical LR]], [[  ['a']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['a']],
+                  [[$default]])[  reduce using rule 4 (A)
+
+
+State 17
+
+    6 c: 'a' 'a' 'b' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 6 (c)]AT_COND_CASE([[LALR]],
+                                                                       [[]], [[
+
+
+State 18
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+
+    'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[20]],
+                                              [[19]])[
+
+
+State 19]AT_COND_CASE([[canonical LR]], [[
+
+    4 A: 'a' 'a' 'a' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 4 (A)
+
+
+State 20]])[
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  ['b']
+
+    'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[21]],
+                                              [[16]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['b']],
+                  [[$default]])[  reduce using rule 5 (A)]AT_COND_CASE([[canonical LR]], [[
+
+
+State 21
+
+    4 A: 'a' 'a' 'a' .]AT_COND_CASE([[canonical LR]], [[  ['b']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['b']],
+                  [[$default]])[  reduce using rule 4 (A)]])])[
+]],
+
+dnl OTHER-CHECKS
+[],
+
+dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
+[AT_COND_CASE([[LALR]], [[1]], [[0]])],
+[],
+[AT_COND_CASE([[LALR]],
+[[syntax error
+]])])
+
+AT_TEST_LR_TYPE([[Complex Lane Split]],
+[[%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states]],
+[[
+/* Similar to the last test case set but forseeing the S/R conflict from the
+   first state that must be split is becoming difficult.  Imagine if B were
+   even more complex.  Imagine if A had other RHS's ending in other
+   nonterminals.  */
+S: 'a' A 'a'
+ | 'b' A 'b'
+ | 'c' c
+ ;
+A: 'a' 'a' B
+ ;
+B: 'a'
+ | %prec 'a'
+ ;
+c: 'a' 'a' 'b'
+ | A
+ ;
+]],
+
+dnl INPUT
+[['b', 'a', 'a', 'a', 'b']],
+
+dnl BISON-STDERR
+[],
+
+dnl TABLES
+[[State 0
+
+    0 $accept: . S $end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state ]AT_COND_CASE([[LALR]], [[5]], [[19]])[
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' B
+    7 c: . 'a' 'a' 'b'
+    8  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 $accept: S . $end
+
+    $end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' B
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' B
+    7 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    8 c: A .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 8 (c)
+
+
+State 10
+
+    3 S: 'c' c .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 3 (S)
+
+
+State 11
+
+    0 $accept: S $end .
+
+    $default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  ]AT_COND_CASE([[LALR]], [[['a', 'b']]], [[['a']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['a']],
+                  [[$default]])[  reduce using rule 6 (B)
+
+    B  go to state 17
+
+    Conflict between rule 6 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  [$end]
+    7 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[20]],
+                                              [[16]])[
+    'b'  shift, and go to state 18
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 6 (B)
+
+    B  go to state ]AT_COND_CASE([[canonical LR]], [[21]], [[17]])[
+
+
+State 16
+
+    5 B: 'a' .]AT_COND_CASE([[canonical LR]], [[  ['a']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['a']],
+                  [[$default]])[  reduce using rule 5 (B)
+
+
+State 17
+
+    4 A: 'a' 'a' B .]AT_COND_CASE([[canonical LR]], [[  ['a']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['a']],
+                  [[$default]])[  reduce using rule 4 (A)
+
+
+State 18
+
+    7 c: 'a' 'a' 'b' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 7 (c)]AT_COND_CASE([[LALR]], [], [[
+
+
+State 19
+
+    4 A: 'a' . 'a' B
+
+    'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[22]],
+                                              [[20]])[
+
+
+State 20]AT_COND_CASE([[canonical LR]], [[
+
+    5 B: 'a' .  [$end]
+
+    $end  reduce using rule 5 (B)
+
+
+State 21
+
+    4 A: 'a' 'a' B .  [$end]
+
+    $end  reduce using rule 4 (A)
+
+
+State 22]])[
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  ['b']
+
+    'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[23]],
+                                              [[16]])[
+
+    ]AT_COND_CASE([[canonical LR]], [['b']],
+                  [[$default]])[  reduce using rule 6 (B)
+
+    B  go to state ]AT_COND_CASE([[canonical LR]], [[24
+
+
+State 23
+
+    5 B: 'a' .  ['b']
+
+    'b'  reduce using rule 5 (B)
+
+
+State 24
+
+    4 A: 'a' 'a' B .  ['b']
+
+    'b'  reduce using rule 4 (A)]], [[17]])])[
+]],
+
+dnl OTHER-CHECKS
+[],
+
+dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
+[AT_COND_CASE([[LALR]], [[1]], [[0]])],
+[],
+[AT_COND_CASE([[LALR]],
+[[syntax error
+]])])
+
+AT_TEST_LR_TYPE([[Split During Added Lookahead Propagation]],
+[[%define lr.keep-unreachable-states]],
+[[
+/* The partial state chart diagram below is for LALR(1).  State 0 is the start
+   state.  States are iterated for successor construction in numerical order.
+   Transitions are downwards.
+
+   State 13 has a R/R conflict that cannot be predicted by Bison's LR(1)
+   algorithm using annotations alone.  That is, when state 11's successor on
+   'd' is merged with state 5 (which is originally just state 1's successor on
+   'd'), state 5's successor on 'e' must then be changed because the resulting
+   lookaheads that propagate to it now make it incompatible with state 8's
+   successor on 'e'.  In other words, state 13 must be split to avoid the
+   conflict.
+
+          0
+        / | \
+     a / c|  \ b
+      1   3   2
+      |   |   |
+     d|   |c  | d
+      |  11   |
+      |   |   |
+       \ /d   |
+        5     8
+         \    |
+        e \  / e
+           13
+           R/R
+
+   This grammar is designed carefully to make sure that, despite Bison's LR(1)
+   algorithm's bread-first iteration of transitions to reconstruct states,
+   state 11's successors are constructed after state 5's and state 8's.
+   Otherwise (for example, if you remove the first 'c' in each of rules 6 and
+   7), state 5's successor on 'e' would never be merged with state 8's, so the
+   split of the resulting state 13 would never need to be performed.  */
+S: 'a' A 'f'
+ | 'a' B
+ | 'b' A 'f'
+ | 'b' B 'g'
+ | 'b' 'd'
+ | 'c' 'c' A 'g'
+ | 'c' 'c' B
+ ;
+A: 'd' 'e' ;
+B: 'd' 'e' ;
+]],
+
+dnl INPUT
+[['b', 'd', 'e', 'g']],
+
+dnl BISON-STDERR
+[AT_COND_CASE([[LALR]],
+[[input.y: conflicts: 1 reduce/reduce
+]], [])],
+
+dnl TABLES
+[[State 0
+
+    0 $accept: . S $end
+    1 S: . 'a' A 'f'
+    2  | . 'a' B
+    3  | . 'b' A 'f'
+    4  | . 'b' B 'g'
+    5  | . 'b' 'd'
+    6  | . 'c' 'c' A 'g'
+    7  | . 'c' 'c' B
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'f'
+    2  | 'a' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 5
+
+    A  go to state 6
+    B  go to state 7
+
+
+State 2
+
+    3 S: 'b' . A 'f'
+    4  | 'b' . B 'g'
+    5  | 'b' . 'd'
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 8
+
+    A  go to state 9
+    B  go to state 10
+
+
+State 3
+
+    6 S: 'c' . 'c' A 'g'
+    7  | 'c' . 'c' B
+
+    'c'  shift, and go to state 11
+
+
+State 4
+
+    0 $accept: S . $end
+
+    $end  shift, and go to state 12
+
+
+State 5
+
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state ]AT_COND_CASE([[LALR]], [[13]],
+                                               [[canonical LR]], [[13]],
+                                               [[20]])[
+
+
+State 6
+
+    1 S: 'a' A . 'f'
+
+    'f'  shift, and go to state 14
+
+
+State 7
+
+    2 S: 'a' B .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 2 (S)
+
+
+State 8
+
+    5 S: 'b' 'd' .  [$end]
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[20]],
+                                              [[13]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 5 (S)
+
+
+State 9
+
+    3 S: 'b' A . 'f'
+
+    'f'  shift, and go to state 15
+
+
+State 10
+
+    4 S: 'b' B . 'g'
+
+    'g'  shift, and go to state 16
+
+
+State 11
+
+    6 S: 'c' 'c' . A 'g'
+    7  | 'c' 'c' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[21]],
+                                              [[5]])[
+
+    A  go to state 17
+    B  go to state 18
+
+
+State 12
+
+    0 $accept: S $end .
+
+    $default  accept]AT_COND_CASE([[LALR]], [[
+
+
+State 13
+
+    8 A: 'd' 'e' .  ['f', 'g']
+    9 B: 'd' 'e' .  [$end, 'g']
+
+    $end      reduce using rule 9 (B)
+    'g'       reduce using rule 8 (A)
+    'g'       [reduce using rule 9 (B)]
+    $default  reduce using rule 8 (A)]], [[
+
+
+State 13
+
+    8 A: 'd' 'e' .  ['f']
+    9 B: 'd' 'e' .  ]AT_COND_CASE([[canonical LR]], [[[$end]]], [[['g']]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [['g'     ]])[  reduce using rule 9 (B)
+    ]AT_COND_CASE([[canonical LR]], [['f' ]],
+                  [[$default]])[  reduce using rule 8 (A)]])[
+
+
+State 14
+
+    1 S: 'a' A 'f' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 1 (S)
+
+
+State 15
+
+    3 S: 'b' A 'f' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 3 (S)
+
+
+State 16
+
+    4 S: 'b' B 'g' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 4 (S)
+
+
+State 17
+
+    6 S: 'c' 'c' A . 'g'
+
+    'g'  shift, and go to state 19
+
+
+State 18
+
+    7 S: 'c' 'c' B .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 7 (S)
+
+
+State 19
+
+    6 S: 'c' 'c' A 'g' .]AT_COND_CASE([[canonical LR]], [[  [$end]]])[
+
+    ]AT_COND_CASE([[canonical LR]], [[$end]],
+                  [[$default]])[  reduce using rule 6 (S)]AT_COND_CASE([[LALR]],
+                                                                       [[]], [[
+
+
+State 20]AT_COND_CASE([[canonical LR]], [[
+
+    8 A: 'd' 'e' .  ['f']
+    9 B: 'd' 'e' .  ['g']
+
+    'f'  reduce using rule 8 (A)
+    'g'  reduce using rule 9 (B)
+
+
+State 21
+
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 22
+
+
+State 22
+
+    8 A: 'd' 'e' .  ['g']
+    9 B: 'd' 'e' .  [$end]
+
+    $end  reduce using rule 9 (B)
+    'g'   reduce using rule 8 (A)]], [[
+
+    8 A: 'd' 'e' .  ['f', 'g']
+    9 B: 'd' 'e' .  [$end]
+
+    $end      reduce using rule 9 (B)
+    $default  reduce using rule 8 (A)]])])[
+]],
+
+dnl OTHER-CHECKS
+[],
+
+dnl PARSER-EXIT-VALUE, PARSER-STDOUT, PARSER-STDERR
+[AT_COND_CASE([[LALR]], [[1]], [[0]])],
+[],
+[AT_COND_CASE([[LALR]],
+[[syntax error
+]])])
+
+
+
+## ------------------------------- ##
+## %define lr.default-reductions.  ##
+## ------------------------------- ##
+
+# AT_TEST_LR_DEFAULT_REDUCTIONS(GRAMMAR, INPUT, TABLES)
+# -----------------------------------------------------
+m4_define([AT_TEST_LR_DEFAULT_REDUCTIONS],
+[
+AT_TEST_TABLES_AND_PARSE([[no %define lr.default-reductions]],
+                         [[most]], [[]],
+                         [[]],
+                         [$1], [$2], [[]], [$3])
+AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions most]],
+                         [[most]], [[]],
+                         [[%define lr.default-reductions most]],
+                         [$1], [$2], [[]], [$3])
+AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions consistent]],
+                         [[consistent]], [[]],
+                         [[%define lr.default-reductions consistent]],
+                         [$1], [$2], [[]], [$3])
+AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions accepting]],
+                         [[accepting]], [[]],
+                         [[%define lr.default-reductions accepting]],
+                         [$1], [$2], [[]], [$3])
+])
+
+AT_TEST_LR_DEFAULT_REDUCTIONS([[
+/* The start state is consistent and has a shift on 'a' and no reductions.
+   After pushing the b below, enter an inconsistent state that has a shift and
+   one reduction with one lookahead.  */
+start:
+    a b
+  | a b 'a'
+  | a c 'b'
+  ;
+
+/* After shifting this 'a', enter a consistent state that has no shift and 1
+   reduction with multiple lookaheads.  */
+a: 'a' ;
+
+/* After the previous reduction, enter an inconsistent state that has no shift
+   and multiple reductions.  The first reduction has more lookaheads than the
+   second, so the first should always be preferred as the default reduction if
+   enabled.  The second reduction has one lookahead.  */
+b: ;
+c: ;
+]],
+dnl Visit each state mentioned above.
+[['a', 'a']],
+[[State 0
+
+    0 $accept: . start $end
+    1 start: . a b
+    2      | . a b 'a'
+    3      | . a c 'b'
+    4 a: . 'a'
+
+    'a'  shift, and go to state 1
+
+    start  go to state 2
+    a      go to state 3
+
+
+State 1
+
+    4 a: 'a' .]AT_COND_CASE([[accepting]], [[  [$end, 'a', 'b']
+
+    $end  reduce using rule 4 (a)
+    'a'   reduce using rule 4 (a)
+    'b'   reduce using rule 4 (a)]], [[
+
+    $default  reduce using rule 4 (a)]])[
+
+
+State 2
+
+    0 $accept: start . $end
+
+    $end  shift, and go to state 4
+
+
+State 3
+
+    1 start: a . b
+    2      | a . b 'a'
+    3      | a . c 'b'
+    5 b: .  [$end, 'a']
+    6 c: .  ['b']]AT_COND_CASE([[most]], [[
+
+    'b'       reduce using rule 6 (c)
+    $default  reduce using rule 5 (b)]], [[
+
+    $end  reduce using rule 5 (b)
+    'a'   reduce using rule 5 (b)
+    'b'   reduce using rule 6 (c)]])[
+
+    b  go to state 5
+    c  go to state 6
+
+
+State 4
+
+    0 $accept: start $end .
+
+    $default  accept
+
+
+State 5
+
+    1 start: a b .  [$end]
+    2      | a b . 'a'
+
+    'a'  shift, and go to state 7
+
+    ]AT_COND_CASE([[most]], [[$default]],
+                  [[$end]])[  reduce using rule 1 (start)
+
+
+State 6
+
+    3 start: a c . 'b'
+
+    'b'  shift, and go to state 8
+
+
+State 7
+
+    2 start: a b 'a' .]AT_COND_CASE([[accepting]], [[  [$end]
+
+    $end  reduce using rule 2 (start)]], [[
+
+    $default  reduce using rule 2 (start)]])[
+
+
+State 8
+
+    3 start: a c 'b' .]AT_COND_CASE([[accepting]], [[  [$end]
+
+    $end  reduce using rule 3 (start)]], [[
+
+    $default  reduce using rule 3 (start)]])[
+]])
diff --git a/tests/regression.at b/tests/regression.at
index 6a37f75..db6c3b9 100644
--- a/tests/regression.at
+++ b/tests/regression.at
@@ -1,22 +1,19 @@
 # Bison Regressions.                               -*- Autotest -*-
 
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-# Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[Regression tests.]])
 
@@ -27,10 +24,11 @@
 
 AT_SETUP([Trivial grammars])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([input.y],
 [[%{
-void yyerror (char const *);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 #define YYSTYPE int *
 %}
 
@@ -40,29 +38,60 @@
 
 program: 'x';
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([bison -o input.c input.y])
-AT_COMPILE([input.o], [-c input.c])
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input.o])
 AT_COMPILE([input.o], [-DYYDEBUG -c input.c])
 
 AT_CLEANUP
 
 
 
-## ------------------------- ##
-## Early token definitions.  ##
-## ------------------------- ##
+## ----------------- ##
+## YYSTYPE typedef.  ##
+## ----------------- ##
+
+AT_SETUP([YYSTYPE typedef])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[%{
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
+typedef union { char const *val; } YYSTYPE;
+%}
+
+%type <val> program
+
+%%
+
+program: { $$ = ""; };
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input.o])
+
+AT_CLEANUP
 
 
-AT_SETUP([Early token definitions])
+
+## ------------------------------------- ##
+## Early token definitions with --yacc.  ##
+## ------------------------------------- ##
+
+
+AT_SETUP([Early token definitions with --yacc])
 
 # Found in GCJ: they expect the tokens to be defined before the user
 # prologue, so that they can use the token definitions in it.
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([input.y],
 [[%{
-void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 %}
 
 %union
@@ -79,9 +108,55 @@
 exp: MY_TOKEN;
 %%
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([bison -o input.c input.y])
-AT_COMPILE([input.o], [-c input.c])
+AT_BISON_CHECK([-y -o input.c input.y])
+AT_COMPILE([input.o])
+
+AT_CLEANUP
+
+
+
+## ---------------------------------------- ##
+## Early token definitions without --yacc.  ##
+## ---------------------------------------- ##
+
+
+AT_SETUP([Early token definitions without --yacc])
+
+# Found in GCJ: they expect the tokens to be defined before the user
+# prologue, so that they can use the token definitions in it.
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[%{
+#include <stdio.h>
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
+void print_my_token (void);
+%}
+
+%union
+{
+  int val;
+};
+%{
+void
+print_my_token (void)
+{
+  enum yytokentype my_token = MY_TOKEN;
+  printf ("%d\n", my_token);
+}
+%}
+%token MY_TOKEN
+%%
+exp: MY_TOKEN;
+%%
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input.o])
 
 AT_CLEANUP
 
@@ -94,15 +169,17 @@
 
 AT_SETUP([Braces parsing])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA([input.y],
-[[/* Bison used to swallow the character after `}'. */
+[[/* Bison used to swallow the character after '}'. */
 
 %%
 exp: { tests = {{{{{{{{{{}}}}}}}}}}; };
 %%
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK([-v -o input.c input.y])
 
 AT_CHECK([grep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c], 0, [ignore])
 
@@ -116,8 +193,9 @@
 
 AT_SETUP([Duplicate string])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA([input.y],
-[[/* `Bison -v' used to dump core when two tokens are defined with the same
+[[/* 'Bison -v' used to dump core when two tokens are defined with the same
    string, as LE and GE below. */
 
 %token NUM
@@ -128,9 +206,10 @@
 exp: '(' exp ')' | NUM ;
 %%
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([bison -v -o input.c input.y], 0, [],
-[[input.y:6.8-14: warning: symbol `"<="' used more than once as a literal string
+AT_BISON_CHECK([-v -o input.c input.y], 0, [],
+[[input.y:6.8-14: warning: symbol "<=" used more than once as a literal string
 ]])
 
 AT_CLEANUP
@@ -144,6 +223,7 @@
 
 AT_KEYWORDS([report])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA([input.y],
 [[%%
 expr:
@@ -173,8 +253,9 @@
 
 };
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([bison -o input.c -v input.y])
+AT_BISON_CHECK([-o input.c -v input.y])
 
 # Check the contents of the report.
 AT_CHECK([cat input.output], [],
@@ -182,13 +263,13 @@
 
     0 $accept: expr $end
 
-    1 @1: /* empty */
+    1 $@1: /* empty */
 
-    2 expr: 'a' @1 'b'
+    2 expr: 'a' $@1 'b'
 
-    3 @2: /* empty */
+    3 $@2: /* empty */
 
-    4 expr: @2 'c'
+    4 expr: $@2 'c'
 
 
 Terminals, with rules where they appear
@@ -206,71 +287,71 @@
     on left: 0
 expr (7)
     on left: 2 4, on right: 0
-@1 (8)
+$@1 (8)
     on left: 1, on right: 2
-@2 (9)
+$@2 (9)
     on left: 3, on right: 4
 
 
-state 0
+State 0
 
     0 $accept: . expr $end
 
     'a'  shift, and go to state 1
 
-    $default  reduce using rule 3 (@2)
+    $default  reduce using rule 3 ($@2)
 
     expr  go to state 2
-    @2    go to state 3
+    $@2   go to state 3
 
 
-state 1
+State 1
 
-    2 expr: 'a' . @1 'b'
+    2 expr: 'a' . $@1 'b'
 
-    $default  reduce using rule 1 (@1)
+    $default  reduce using rule 1 ($@1)
 
-    @1  go to state 4
+    $@1  go to state 4
 
 
-state 2
+State 2
 
     0 $accept: expr . $end
 
     $end  shift, and go to state 5
 
 
-state 3
+State 3
 
-    4 expr: @2 . 'c'
+    4 expr: $@2 . 'c'
 
     'c'  shift, and go to state 6
 
 
-state 4
+State 4
 
-    2 expr: 'a' @1 . 'b'
+    2 expr: 'a' $@1 . 'b'
 
     'b'  shift, and go to state 7
 
 
-state 5
+State 5
 
     0 $accept: expr $end .
 
     $default  accept
 
 
-state 6
+State 6
 
-    4 expr: @2 'c' .
+    4 expr: $@2 'c' .
 
     $default  reduce using rule 4 (expr)
 
 
-state 7
+State 7
 
-    2 expr: 'a' @1 'b' .
+    2 expr: 'a' $@1 'b' .
 
     $default  reduce using rule 2 (expr)
 ]])
@@ -296,7 +377,7 @@
 %%
 ]])
 
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK([-v -o input.c input.y])
 
 AT_CLEANUP
 
@@ -319,15 +400,16 @@
 %{
 ]])
 
-AT_CHECK([bison input.y], [1], [],
-[[input.y:2.1: invalid character: `?'
-input.y:3.14: invalid character: `}'
-input.y:4.1: invalid character: `%'
-input.y:4.2: invalid character: `&'
-input.y:5.1-17: invalid directive: `%a-does-not-exist'
-input.y:6.1: invalid character: `%'
-input.y:6.2: invalid character: `-'
-input.y:7.1-8.0: missing `%}' at end of file
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:2.1: error: invalid character: '?'
+input.y:3.14: error: invalid character: '}'
+input.y:4.1: error: invalid character: '%'
+input.y:4.2: error: invalid character: '&'
+input.y:5.1-17: error: invalid directive: '%a-does-not-exist'
+input.y:6.1: error: invalid character: '%'
+input.y:6.2: error: invalid character: '-'
+input.y:7.1-8.0: error: missing '%}' at end of file
+input.y:7.1-8.0: error: syntax error, unexpected %{...%}
 ]])
 
 AT_CLEANUP
@@ -345,10 +427,8 @@
 %union
 ]])
 
-AT_CHECK([bison input.y], [1], [],
-[[input.y:3.1: missing `{' in "%destructor {...}"
-input.y:4.1: missing `{' in "%initial-action {...}"
-input.y:4.1: syntax error, unexpected %initial-action {...}, expecting string or identifier
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:3.1-15: error: syntax error, unexpected %initial-action, expecting {...}
 ]])
 
 AT_CLEANUP
@@ -362,12 +442,14 @@
 
 AT_SETUP([Token definitions])
 
-# Bison managed, when fed with `%token 'f' "f"' to #define 'f'!
+AT_BISON_OPTION_PUSHDEFS
+# Bison managed, when fed with '%token 'f' "f"' to #define 'f'!
 AT_DATA_GRAMMAR([input.y],
 [%{
+#include <stdlib.h>
 #include <stdio.h>
-void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
 %}
 [%error-verbose
 %token MYEOF 0 "end of file"
@@ -376,20 +458,12 @@
 %token C_TOKEN 'c'
 %token 'd' D_TOKEN
 %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+%token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
 %%
 exp: "a" "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!";
 %%
-void
-yyerror (char const *s)
-{
-  fprintf (stderr, "%s\n", s);
-}
-
-int
-yylex (void)
-{
-  return SPECIAL;
-}
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE([{ SPECIAL }])[
 
 int
 main (void)
@@ -397,11 +471,32 @@
   return yyparse ();
 }
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([bison -o input.c input.y])
+# Checking the warning message guarantees that the trigraph "??!" isn't
+# unnecessarily escaped here even though it would need to be if encoded in a
+# C-string literal.  Also notice that unnecessary escaping, such as "\?", from
+# the user specification is eliminated.
+AT_BISON_CHECK([-o input.c input.y], [[0]], [[]],
+[[input.y:22.8-14: warning: symbol SPECIAL redeclared
+input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string
+]])
+AT_BISON_CHECK([-fcaret -o input.c input.y], [[0]], [[]],
+[[input.y:22.8-14: warning: symbol SPECIAL redeclared
+ %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+        ^^^^^^^
+input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string
+ %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+]])
 AT_COMPILE([input])
+
+# Checking the error message here guarantees that yytname, which does contain
+# C-string literals, does have the trigraph escaped correctly.  Thus, the
+# symbol name reported by the parser is exactly the same as that reported by
+# Bison itself.
 AT_DATA([experr],
-[[syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\201\001\201?\?!", expecting a
+[[syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!", expecting a
 ]])
 AT_PARSER_CHECK([./input], 1, [], [experr])
 AT_CLEANUP
@@ -415,22 +510,24 @@
 
 AT_SETUP([Characters Escapes])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([input.y],
 [%{
-void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 %}
 [%%
 exp:
   '\'' "\'"
 | '\"' "\""
-| '"'  "'"
+| '"'  "'" /* Pacify font-lock-mode: ". */
 ;
 ]])
-# Pacify font-lock-mode: "
 
-AT_CHECK([bison -o input.c input.y])
-AT_COMPILE([input.o], [-c input.c])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input.o])
 AT_CLEANUP
 
 
@@ -441,7 +538,7 @@
 
 # The generation of the reduction was once wrong in Bison, and made it
 # miss some reductions.  In the following test case, the reduction on
-# `undef_id_tok' in state 1 was missing.  This is stripped down from
+# 'undef_id_tok' in state 1 was missing.  This is stripped down from
 # the actual web2c.y.
 
 AT_SETUP([Web2c Report])
@@ -469,7 +566,7 @@
 %%
 ]])
 
-AT_CHECK([bison -v input.y])
+AT_BISON_CHECK([-v input.y])
 AT_CHECK([cat input.output], 0,
 [[Grammar
 
@@ -480,9 +577,9 @@
     2 CONST_DEC_LIST: CONST_DEC
     3               | CONST_DEC_LIST CONST_DEC
 
-    4 @1: /* empty */
+    4 $@1: /* empty */
 
-    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok ';'
+    5 CONST_DEC: $@1 undef_id_tok '=' const_id_tok ';'
 
 
 Terminals, with rules where they appear
@@ -505,93 +602,93 @@
     on left: 2 3, on right: 1 3
 CONST_DEC (10)
     on left: 5, on right: 2 3
-@1 (11)
+$@1 (11)
     on left: 4, on right: 5
 
 
-state 0
+State 0
 
     0 $accept: . CONST_DEC_PART $end
 
-    $default  reduce using rule 4 (@1)
+    $default  reduce using rule 4 ($@1)
 
     CONST_DEC_PART  go to state 1
     CONST_DEC_LIST  go to state 2
     CONST_DEC       go to state 3
-    @1              go to state 4
+    $@1             go to state 4
 
 
-state 1
+State 1
 
     0 $accept: CONST_DEC_PART . $end
 
     $end  shift, and go to state 5
 
 
-state 2
+State 2
 
     1 CONST_DEC_PART: CONST_DEC_LIST .
     3 CONST_DEC_LIST: CONST_DEC_LIST . CONST_DEC
 
-    undef_id_tok  reduce using rule 4 (@1)
+    undef_id_tok  reduce using rule 4 ($@1)
     $default      reduce using rule 1 (CONST_DEC_PART)
 
     CONST_DEC  go to state 6
-    @1         go to state 4
+    $@1        go to state 4
 
 
-state 3
+State 3
 
     2 CONST_DEC_LIST: CONST_DEC .
 
     $default  reduce using rule 2 (CONST_DEC_LIST)
 
 
-state 4
+State 4
 
-    5 CONST_DEC: @1 . undef_id_tok '=' const_id_tok ';'
+    5 CONST_DEC: $@1 . undef_id_tok '=' const_id_tok ';'
 
     undef_id_tok  shift, and go to state 7
 
 
-state 5
+State 5
 
     0 $accept: CONST_DEC_PART $end .
 
     $default  accept
 
 
-state 6
+State 6
 
     3 CONST_DEC_LIST: CONST_DEC_LIST CONST_DEC .
 
     $default  reduce using rule 3 (CONST_DEC_LIST)
 
 
-state 7
+State 7
 
-    5 CONST_DEC: @1 undef_id_tok . '=' const_id_tok ';'
+    5 CONST_DEC: $@1 undef_id_tok . '=' const_id_tok ';'
 
     '='  shift, and go to state 8
 
 
-state 8
+State 8
 
-    5 CONST_DEC: @1 undef_id_tok '=' . const_id_tok ';'
+    5 CONST_DEC: $@1 undef_id_tok '=' . const_id_tok ';'
 
     const_id_tok  shift, and go to state 9
 
 
-state 9
+State 9
 
-    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok . ';'
+    5 CONST_DEC: $@1 undef_id_tok '=' const_id_tok . ';'
 
     ';'  shift, and go to state 10
 
 
-state 10
+State 10
 
-    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok ';' .
+    5 CONST_DEC: $@1 undef_id_tok '=' const_id_tok ';' .
 
     $default  reduce using rule 5 (CONST_DEC)
 ]])
@@ -603,7 +700,7 @@
 ## Web2c Actions.  ##
 ## --------------- ##
 
-# The generation of the mapping `state -> action' was once wrong in
+# The generation of the mapping 'state -> action' was once wrong in
 # extremely specific situations.  web2c.y exhibits this situation.
 # Below is a stripped version of the grammar.  It looks like one can
 # simplify it further, but just don't: it is tuned to exhibit a bug,
@@ -634,10 +731,9 @@
 %%
 ]])
 
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK([-v -o input.c input.y])
 
-# Check only the tables.  We don't use --no-parser, because it is
-# still to be implemented in the experimental branch of Bison.
+# Check only the tables.
 [sed -n 's/  *$//;/^static const.*\[\] =/,/^}/p' input.c >tables.c]
 
 AT_CHECK([[cat tables.c]], 0,
@@ -687,7 +783,7 @@
 static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "\"if\"", "\"const\"", "\"then\"",
-  "\"else\"", "$accept", "statement", "struct_stat", "if", "else", 0
+  "\"else\"", "$accept", "statement", "struct_stat", "if", "else", YY_NULL
 };
 static const yytype_uint16 yytoknum[] =
 {
@@ -750,12 +846,11 @@
 # so that possible bound checking compilers could check all the skeletons.
 m4_define([_AT_DATA_DANCER_Y],
 [AT_DATA_GRAMMAR([dancer.y],
-[%{
-static int yylex (AT_LALR1_CC_IF([int *], [void]));
-AT_LALR1_CC_IF([],
-[#include <stdio.h>
-static void yyerror (const char *);])
-%}
+[[%code provides
+{
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
 $1
 %token ARROW INVALID NUMBER STRING DATA
 %defines
@@ -800,46 +895,26 @@
    | INVALID
    ;
 %%
-AT_LALR1_CC_IF(
-[/* A C++ error reporting function. */
-void
-yy::parser::error (const location&, const std::string& m)
-{
-  std::cerr << m << std::endl;
-}
-
-int
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE([":"])[
+]AT_LALR1_CC_IF(
+[int
 yyparse ()
 {
   yy::parser parser;
-  parser.set_debug_level (!!YYDEBUG);
+#if YYDEBUG
+  parser.set_debug_level (YYDEBUG);
+#endif
   return parser.parse ();
 }
-],
-[static void
-yyerror (const char *s)
-{
-  fprintf (stderr, "%s\n", s);
-}])
-
-static int
-yylex (AT_LALR1_CC_IF([int *lval], [void]))
-[{
-  static int toknum = 0;
-  static int tokens[] =
-    {
-      ':', -1
-    };
-  ]AT_LALR1_CC_IF([*lval = 0; /* Pacify GCC.  */])[
-  return tokens[toknum++];
-}]
+])[
 
 int
 main (void)
 {
   return yyparse ();
 }
-])
+]])
 ])# _AT_DATA_DANCER_Y
 
 
@@ -850,12 +925,7 @@
 [AT_SETUP([Dancer $1])
 AT_BISON_OPTION_PUSHDEFS([$1])
 _AT_DATA_DANCER_Y([$1])
-AT_CHECK([bison -o dancer.c dancer.y])
-AT_LALR1_CC_IF(
-  [AT_CHECK([bison -o dancer.cc dancer.y])
-   AT_COMPILE_CXX([dancer])],
-  [AT_CHECK([bison -o dancer.c dancer.y])
-   AT_COMPILE([dancer])])
+AT_FULL_COMPILE([dancer])
 AT_PARSER_CHECK([./dancer], 1, [],
 [syntax error, unexpected ':'
 ])
@@ -877,11 +947,12 @@
 # --------------------------------
 m4_define([_AT_DATA_EXPECT2_Y],
 [AT_DATA_GRAMMAR([expect2.y],
-[%{
-static int yylex (AT_LALR1_CC_IF([int *], [void]));
+[[%{
+static int yylex (]AT_LALR1_CC_IF([int *], [void]));
 AT_LALR1_CC_IF([],
-[#include <stdio.h>
-static void yyerror (const char *);])
+[[#include <stdio.h>
+#include <stdlib.h>
+]AT_YYERROR_DECLARE])[
 %}
 $1
 %defines
@@ -898,61 +969,47 @@
 t: A | B;
 
 %%
-AT_LALR1_CC_IF(
-[/* A C++ error reporting function. */
-void
-yy::parser::error (const location&, const std::string& m)
-{
-  std::cerr << m << std::endl;
-}
-
-int
+]AT_YYERROR_DEFINE[
+]AT_LALR1_CC_IF(
+[int
 yyparse ()
 {
   yy::parser parser;
   return parser.parse ();
 }
-],
-[static void
-yyerror (const char *s)
-{
-  fprintf (stderr, "%s\n", s);
-}])
+])[
 
+#include <assert.h>
 static int
-yylex (AT_LALR1_CC_IF([int *lval], [void]))
-[{
-  static int toknum = 0;
-  static int tokens[] =
+yylex (]AT_LALR1_CC_IF([int *lval], [void])[)
+{
+  static int const tokens[] =
     {
       1000, '+', '+', -1
     };
+  static size_t toknum;
   ]AT_LALR1_CC_IF([*lval = 0; /* Pacify GCC.  */])[
+  assert (toknum < sizeof tokens / sizeof *tokens);
   return tokens[toknum++];
-}]
+}
 
 int
 main (void)
 {
   return yyparse ();
 }
-])
+]])
 ])# _AT_DATA_EXPECT2_Y
 
 
 # AT_CHECK_EXPECT2(BISON-OPTIONS)
-# ------------------------------
+# -------------------------------
 # Generate the grammar, compile it, run it.
 m4_define([AT_CHECK_EXPECT2],
 [AT_SETUP([Expecting two tokens $1])
 AT_BISON_OPTION_PUSHDEFS([$1])
 _AT_DATA_EXPECT2_Y([$1])
-AT_CHECK([bison -o expect2.c expect2.y])
-AT_LALR1_CC_IF(
-  [AT_CHECK([bison -o expect2.cc expect2.y])
-   AT_COMPILE_CXX([expect2])],
-  [AT_CHECK([bison -o expect2.c expect2.y])
-   AT_COMPILE([expect2])])
+AT_FULL_COMPILE([expect2])
 AT_PARSER_CHECK([./expect2], 1, [],
 [syntax error, unexpected '+', expecting A or B
 ])
@@ -963,3 +1020,650 @@
 AT_CHECK_EXPECT2()
 AT_CHECK_EXPECT2([%glr-parser])
 AT_CHECK_EXPECT2([%skeleton "lalr1.cc"])
+
+
+
+## --------------------------------------------- ##
+## Braced code in declaration in rules section.  ##
+## --------------------------------------------- ##
+
+AT_SETUP([Braced code in declaration in rules section])
+
+# Bison once mistook braced code in a declaration in the rules section to be a
+# rule action.
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[%{
+#include <stdio.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+%}
+
+%error-verbose
+
+%%
+
+start:
+  {
+    printf ("Bison would once convert this action to a midrule because of the"
+	    " subsequent braced code.\n");
+  }
+  ;
+
+%destructor { fprintf (stderr, "DESTRUCTOR\n"); } 'a';
+%printer { fprintf (yyoutput, "PRINTER"); } 'a';
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["a"])[
+
+int
+main (void)
+{
+  yydebug = 1;
+  return !yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-t -o input.c input.y])
+AT_COMPILE([input])
+AT_PARSER_CHECK([./input], 0,
+[[Bison would once convert this action to a midrule because of the subsequent braced code.
+]],
+[[Starting parse
+Entering state 0
+Reducing stack by rule 1 (line 20):
+-> $$ = nterm start ()
+Stack now 0
+Entering state 1
+Reading a token: Next token is token 'a' (PRINTER)
+syntax error, unexpected 'a', expecting $end
+Error: popping nterm start ()
+Stack now 0
+Cleanup: discarding lookahead token 'a' (PRINTER)
+DESTRUCTOR
+Stack now 0
+]])
+
+AT_CLEANUP
+
+
+
+## --------------------------------- ##
+## String alias declared after use.  ##
+## --------------------------------- ##
+
+AT_SETUP([String alias declared after use])
+
+# Bison once incorrectly asserted that the symbol number for either a token or
+# its alias was the highest symbol number so far at the point of the alias
+# declaration.  That was true unless the declaration appeared after their first
+# uses and other tokens appeared in between.
+
+AT_DATA([input.y],
+[[%%
+start: 'a' "A" 'b';
+%token 'a' "A";
+]])
+
+AT_BISON_CHECK([-t -o input.c input.y])
+
+AT_CLEANUP
+
+
+
+## -------------------------------- ##
+## Extra lookahead sets in report.  ##
+## -------------------------------- ##
+
+AT_SETUP([[Extra lookahead sets in report]])
+
+# Bison prints each reduction's lookahead set only next to the associated
+# state's one item that (1) is associated with the same rule as the reduction
+# and (2) has its dot at the end of its RHS.  Previously, Bison also
+# erroneously printed the lookahead set next to all of the state's other items
+# associated with the same rule.  This bug affected only the '.output' file and
+# not the generated parser source code.
+
+AT_DATA([[input.y]],
+[[%%
+start: a | 'a' a 'a' ;
+a: 'a' ;
+]])
+
+AT_BISON_CHECK([[--report=all input.y]])
+AT_CHECK([[sed -n '/^State 1$/,/^State 2$/p' input.output]], [[0]],
+[[State 1
+
+    2 start: 'a' . a 'a'
+    3 a: . 'a'
+    3  | 'a' .  [$end]
+
+    'a'  shift, and go to state 4
+
+    $default  reduce using rule 3 (a)
+
+    a  go to state 5
+
+
+State 2
+]])
+
+AT_CLEANUP
+
+
+
+## ---------------------------------------- ##
+## Token number in precedence declaration.  ##
+## ---------------------------------------- ##
+
+AT_SETUP([[Token number in precedence declaration]])
+
+# POSIX says token numbers can be declared in %left, %right, and %nonassoc, but
+# we lost this in Bison 1.50.
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[%{
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+%}
+
+%error-verbose
+%right END 0
+%left TK1 1 TK2 2 "tok alias" 3
+
+%%
+
+start:
+    TK1 sr_conflict "tok alias"
+  | start %prec END
+  ;
+sr_conflict:
+  TK2
+  | TK2 "tok alias"
+  ;
+
+%%
+
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE([{ 1, 2, 3, 0 }])[
+
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([[-o input.c input.y]], [[0]],,
+[[input.y:23.5-19: warning: rule useless in parser due to conflicts: start: start
+input.y:27.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias"
+]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]])
+
+AT_CLEANUP
+
+
+
+## --------------------------- ##
+## parse-gram.y: LALR = IELR.  ##
+## --------------------------- ##
+
+# If parse-gram.y's LALR and IELR parser tables ever begin to differ, we
+# need to fix parse-gram.y or start using IELR.
+
+AT_SETUP([[parse-gram.y: LALR = IELR]])
+
+# Avoid differences in synclines by telling bison that the output files
+# have the same name.
+[cp $abs_top_srcdir/src/parse-gram.y input.y]
+AT_BISON_CHECK([[-o input.c -Dlr.type=lalr input.y]])
+[mv input.c lalr.c]
+AT_CAPTURE_FILE([lalr.c])
+AT_BISON_CHECK([[-o input.c -Dlr.type=ielr input.y]])
+[mv input.c ielr.c]
+AT_CAPTURE_FILE([ielr.c])
+AT_CHECK([[diff lalr.c ielr.c]], [[0]])
+
+AT_CLEANUP
+
+
+
+## --------------------------------------- ##
+## %error-verbose and YYSTACK_USE_ALLOCA.  ##
+## --------------------------------------- ##
+
+AT_SETUP([[%error-verbose and YYSTACK_USE_ALLOCA]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[%code {
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+  #define YYSTACK_USE_ALLOCA 1
+}
+
+%error-verbose
+
+%%
+
+start: check syntax_error syntax_error ;
+
+check:
+{
+  if (128 < sizeof yymsgbuf)
+    {
+      fprintf (stderr,
+               "The initial size of yymsgbuf in yyparse has increased\n"
+               "since this test group was last updated.  As a result,\n"
+               "this test group may no longer manage to induce a\n"
+               "reallocation of the syntax error message buffer.\n"
+               "This test group must be adjusted to produce a longer\n"
+               "error message.\n");
+      YYABORT;
+    }
+}
+;
+
+// Induce a syntax error message whose total length is more than
+// sizeof yymsgbuf in yyparse.  Each token here is 64 bytes.
+syntax_error:
+  "123456789112345678921234567893123456789412345678951234567896123A"
+| "123456789112345678921234567893123456789412345678951234567896123B"
+| error 'a' 'b' 'c'
+;
+
+%%
+
+]AT_YYERROR_DEFINE[
+/* Induce two syntax error messages (which requires full error
+   recovery by shifting 3 tokens) in order to detect any loss of the
+   reallocated buffer.  */
+]AT_YYLEX_DEFINE(["abc"])[
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([[-o input.c input.y]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input]], [[1]], [],
+[[syntax error, unexpected 'a', expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B
+syntax error, unexpected $end, expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B
+]])
+
+AT_CLEANUP
+
+
+
+## ------------------------- ##
+## %error-verbose overflow.  ##
+## ------------------------- ##
+
+# Imagine the case where YYSTACK_ALLOC_MAXIMUM = YYSIZE_MAXIMUM and an
+# invocation of yysyntax_error has caused yymsg_alloc to grow to exactly
+# YYSTACK_ALLOC_MAXIMUM (perhaps because the normal doubling of size had
+# to be clipped to YYSTACK_ALLOC_MAXIMUM).  In an old version of yacc.c,
+# a subsequent invocation of yysyntax_error that overflows during its
+# size calculation would return YYSIZE_MAXIMUM to yyparse.  Then,
+# yyparse would invoke yyerror using the old contents of yymsg.
+
+AT_SETUP([[%error-verbose overflow]])
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[%code {
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+
+  /* This prevents this test case from having to induce error messages
+     large enough to overflow size_t.  */
+  #define YYSIZE_T unsigned char
+
+  /* Bring in malloc and set EXIT_SUCCESS so yacc.c doesn't try to
+     provide a malloc prototype using our YYSIZE_T.  */
+  #include <stdlib.h>
+  #ifndef EXIT_SUCCESS
+  # define EXIT_SUCCESS 0
+  #endif
+
+  /* Max depth is usually much smaller than YYSTACK_ALLOC_MAXIMUM, and
+     we don't want gcc to warn everywhere this constant would be too big
+     to make sense for our YYSIZE_T.  */
+  #define YYMAXDEPTH 100
+}
+
+%error-verbose
+
+%%
+
+start: syntax_error1 check syntax_error2 ;
+
+// Induce a syntax error message whose total length causes yymsg in
+// yyparse to be reallocated to size YYSTACK_ALLOC_MAXIMUM, which
+// should be 255.  Each token here is 64 bytes.
+syntax_error1:
+  "123456789112345678921234567893123456789412345678951234567896123A"
+| "123456789112345678921234567893123456789412345678951234567896123B"
+| "123456789112345678921234567893123456789412345678951234567896123C"
+| error 'a' 'b' 'c'
+;
+
+check:
+{
+  if (yymsg_alloc != YYSTACK_ALLOC_MAXIMUM
+      || YYSTACK_ALLOC_MAXIMUM != YYSIZE_MAXIMUM
+      || YYSIZE_MAXIMUM != 255)
+    {
+      fprintf (stderr,
+               "The assumptions of this test group are no longer\n"
+               "valid, so it may no longer catch the error it was\n"
+               "designed to catch.  Specifically, the following\n"
+               "values should all be 255:\n\n");
+      fprintf (stderr, "  yymsg_alloc = %d\n", yymsg_alloc);
+      fprintf (stderr, "  YYSTACK_ALLOC_MAXIMUM = %d\n",
+               YYSTACK_ALLOC_MAXIMUM);
+      fprintf (stderr, "  YYSIZE_MAXIMUM = %d\n", YYSIZE_MAXIMUM);
+      YYABORT;
+    }
+}
+;
+
+// Now overflow.
+syntax_error2:
+  "123456789112345678921234567893123456789412345678951234567896123A"
+| "123456789112345678921234567893123456789412345678951234567896123B"
+| "123456789112345678921234567893123456789412345678951234567896123C"
+| "123456789112345678921234567893123456789412345678951234567896123D"
+| "123456789112345678921234567893123456789412345678951234567896123E"
+;
+
+%%
+
+]AT_YYERROR_DEFINE[
+/* Induce two syntax error messages (which requires full error
+   recovery by shifting 3 tokens).  */
+]AT_YYLEX_DEFINE(["abc"])[
+int
+main (void)
+{
+  /* Push parsers throw away the message buffer between tokens, so skip
+     this test under maintainer-push-check.  */
+  if (YYPUSH)
+    return 77;
+  return yyparse ();
+}
+]])
+
+AT_BISON_CHECK([[-o input.c input.y]])
+
+# gcc warns about tautologies and fallacies involving comparisons for
+# unsigned char.  However, it doesn't produce these same warnings for
+# size_t and many other types when the warnings would seem to make just
+# as much sense.  We ignore the warnings.
+[CFLAGS="$NO_WERROR_CFLAGS"]
+AT_COMPILE([[input]])
+
+AT_PARSER_CHECK([[./input]], [[2]], [],
+[[syntax error, unexpected 'a', expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B or 123456789112345678921234567893123456789412345678951234567896123C
+syntax error
+memory exhausted
+]])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## ------------------------ ##
+## LAC: Exploratory stack.  ##
+## ------------------------ ##
+
+AT_SETUP([[LAC: Exploratory stack]])
+
+m4_pushdef([AT_LAC_CHECK], [
+
+AT_BISON_OPTION_PUSHDEFS([$1])
+
+AT_DATA_GRAMMAR([input.y],
+[[%code {
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  int yylex (]AT_PURE_IF([[YYSTYPE *]], [[void]])[);
+}
+
+]$1[
+%error-verbose
+%token 'c'
+
+%%
+
+// default reductions in inconsistent states
+// v   v v   v v v v   v v v v v v v
+S: A B A A B A A A A B A A A A A A A B C C A A A A A A A A A A A A B ;
+//       ^                     ^                               ^
+// LAC reallocs
+
+A: 'a' | /*empty*/ { printf ("inconsistent default reduction\n"); } ;
+B: 'b' ;
+C: /*empty*/ { printf ("consistent default reduction\n"); } ;
+
+%%
+]AT_YYERROR_DEFINE[
+int
+yylex (]AT_PURE_IF([[YYSTYPE *v]], [[void]])[)
+{
+  static char const *input = "bbbbc";]AT_PURE_IF([[
+  *v = 0;]])[
+  return *input++;
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+]])
+
+AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y]], [[0]], [],
+[[input.y: conflicts: 21 shift/reduce
+]])
+AT_COMPILE([[input]])
+AT_PARSER_CHECK([[./input > stdout.txt 2> stderr.txt]], [[1]])
+
+# Make sure syntax error doesn't forget that 'a' is expected.  It would
+# be forgotten without lookahead correction.
+AT_CHECK([[grep 'syntax error,' stderr.txt]], [[0]],
+[[syntax error, unexpected 'c', expecting 'a' or 'b'
+]])
+
+# Check number of default reductions in inconsistent states to be sure
+# syntax error is detected before unnecessary reductions are performed.
+AT_CHECK([[$PERL -0777 -ne 'print s/inconsistent default reduction//g;' \
+           < stdout.txt || exit 77]], [[0]], [[14]])
+
+# Check number of default reductions in consistent states to be sure
+# it is performed before the syntax error is detected.
+AT_CHECK([[$PERL -0777 -ne 'print s/\bconsistent default reduction//g;' \
+           < stdout.txt || exit 77]], [[0]], [[2]])
+
+# Check number of reallocs to be sure reallocated memory isn't somehow
+# lost between LAC invocations.
+AT_CHECK([[$PERL -0777 -ne 'print s/\(realloc//g;' < stderr.txt \
+           || exit 77]], [[0]], [[3]])
+
+AT_BISON_OPTION_POPDEFS
+])
+
+AT_LAC_CHECK([[%define api.push-pull pull]])
+AT_LAC_CHECK([[%define api.push-pull pull %define api.pure]])
+AT_LAC_CHECK([[%define api.push-pull both]])
+AT_LAC_CHECK([[%define api.push-pull both %define api.pure]])
+
+m4_popdef([AT_LAC_CHECK])
+
+AT_CLEANUP
+
+
+
+## ------------------------ ##
+## LAC: Memory exhaustion.  ##
+## ------------------------ ##
+
+AT_SETUP([[LAC: Memory exhaustion]])
+
+m4_pushdef([AT_LAC_CHECK],
+[AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.y],
+[[%code {
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+  #define YYMAXDEPTH 8
+}
+
+%error-verbose
+
+%%
+
+S: A A A A A A A A A ;
+A: /*empty*/ | 'a' ;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["$1"])[
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+]])
+
+AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -t -o input.c input.y]], [[0]], [],
+[[input.y: conflicts: 8 shift/reduce
+]])
+AT_COMPILE([[input]])
+AT_BISON_OPTION_POPDEFS
+])
+
+# Check for memory exhaustion during parsing.
+AT_LAC_CHECK([])
+AT_PARSER_CHECK([[./input]], [[2]], [],
+[[Starting parse
+Entering state 0
+Reading a token: Now at end of input.
+LAC: initial context established for $end
+LAC: checking lookahead $end: R2 G3 R2 G5 R2 G6 R2 G7 R2 G8 R2 G9 R2 G10 R2 G11 R2 (max size exceeded)
+memory exhausted
+Cleanup: discarding lookahead token $end ()
+Stack now 0
+]])
+
+# Induce an immediate syntax error with an undefined token, and check
+# for memory exhaustion while building syntax error message.
+AT_LAC_CHECK([z], [[0]])
+AT_PARSER_CHECK([[./input]], [[2]], [],
+[[Starting parse
+Entering state 0
+Reading a token: Next token is token $undefined ()
+LAC: initial context established for $undefined
+LAC: checking lookahead $undefined: Always Err
+Constructing syntax error message
+LAC: checking lookahead $end: R2 G3 R2 G5 R2 G6 R2 G7 R2 G8 R2 G9 R2 G10 R2 G11 R2 (max size exceeded)
+syntax error
+memory exhausted
+Cleanup: discarding lookahead token $undefined ()
+Stack now 0
+]])
+
+m4_popdef([AT_LAC_CHECK])
+
+AT_CLEANUP
+
+
+## ---------------------- ##
+## Lex and parse params.  ##
+## ---------------------- ##
+
+# AT_TEST(SKELETON)
+# -----------------
+# Check that the identifier of the params is properly fetched
+# even when there are trailing blanks.
+
+m4_pushdef([AT_TEST],
+[AT_SETUP([[Lex and parse params: $1]])
+
+AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1" %parse-param { int x } %parse-param { int y }])
+
+## FIXME: Improve parsing of parse-param and use the generated
+## yyerror.
+AT_DATA_GRAMMAR([input.y],
+[[%defines
+%locations
+%skeleton "$1"
+%union { int ival; }
+%parse-param { int x }
+// Spaces, tabs, and new lines.
+%parse-param { @&t@
+	 int y	 @&t@
+         @&t@
+ @&t@
+}
+
+%{
+#include <stdio.h>
+#include <stdlib.h>
+
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+%}
+
+%%
+exp: 'a' { fprintf (stdout, "x: %d, y: %d\n", x, y); };
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["a"])[
+
+]AT_SKEL_CC_IF(
+[int
+yyparse (int x, int y)
+{
+  yy::parser parser(x, y);
+  return parser.parse ();
+}
+])[
+
+int
+main (void)
+{
+  return !!yyparse(1, 2);
+}
+]])
+
+AT_FULL_COMPILE([input])
+AT_PARSER_CHECK([./input], 0, [[x: 1, y: 2
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
+])
+
+## FIXME: test Java, and iterate over skeletons.
+AT_TEST([yacc.c])
+AT_TEST([glr.c])
+AT_TEST([lalr1.cc])
+AT_TEST([glr.cc])
+
+m4_popdef([AT_TEST])
diff --git a/tests/sets.at b/tests/sets.at
index a731315..4cbdfd6 100644
--- a/tests/sets.at
+++ b/tests/sets.at
@@ -1,20 +1,20 @@
 # Exercising Bison Grammar Sets.                      -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2001-2002, 2005, 2007, 2009-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 # AT_EXTRACT_SETS(INPUT, OUTPUT)
@@ -78,7 +78,7 @@
 e: 'e' | /* Nothing */;
 ]])
 
-AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
 AT_EXTRACT_SETS([stderr], [sets])
 AT_CHECK([[cat sets]], [],
 [[DERIVES
@@ -162,7 +162,7 @@
 h: 'h';
 ]])
 
-AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
 
 AT_CHECK([[sed -n 's/[	 ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr]], [],
 [[RTC: Firsts Output BEGIN
@@ -208,7 +208,7 @@
  ;
 ]])
 
-AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
 AT_EXTRACT_SETS([stderr], [sets])
 AT_CHECK([[cat sets]], [],
 [[DERIVES
@@ -278,7 +278,7 @@
 ;
 ]])
 
-AT_CHECK([[bison -v -o input.c input.y]])
+AT_BISON_CHECK([[-v -o input.c input.y]])
 
 # Get the final state in the parser.
 AT_CHECK([[sed -n 's/.*define YYFINAL *\([0-9][0-9]*\)/final state \1/p' input.c]],
@@ -287,7 +287,7 @@
 
 # Get the final state in the report, from the "accept" action..
 AT_CHECK([sed -n '
-           /^state \(.*\)/{
+           /^State \(.*\)/{
 	     s//final state \1/
 	     x
 	   }
diff --git a/tests/skeletons.at b/tests/skeletons.at
new file mode 100644
index 0000000..fa496c9
--- /dev/null
+++ b/tests/skeletons.at
@@ -0,0 +1,330 @@
+# Checking skeleton support.                     -*- Autotest -*-
+
+# Copyright (C) 2007, 2009-2012 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+AT_BANNER([[Skeleton Support.]])
+
+## ------------------------------ ##
+## Relative skeleton file names.  ##
+## ------------------------------ ##
+
+AT_SETUP([[Relative skeleton file names]])
+
+AT_CHECK([[mkdir tmp]])
+
+AT_DATA([[tmp/skel.c]],
+[[m4@&t@_divert_push(0)d@&t@nl
+@output(b4_parser_file_name@)d@&t@nl
+b4_percent_define_get([[test]])
+m4@&t@_divert_pop(0)
+]])
+
+AT_DATA([[skel.c]],
+[[m4@&t@_divert_push(0)d@&t@nl
+@output(b4_parser_file_name@)d@&t@nl
+b4_percent_define_get([[test]]) -- Local
+m4@&t@_divert_pop(0)
+]])
+
+AT_DATA([[tmp/input-gram.y]],
+[[%skeleton "./skel.c"
+%define test "Hello World"
+%%
+start: ;
+]])
+
+AT_DATA([[input-gram.y]],
+[[%skeleton "./skel.c"
+%define test "Hello World"
+%%
+start: ;
+]])
+
+AT_DATA([[tmp/input-cmd-line.y]],
+[[%define test "Hello World"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[tmp/input-gram.y]])
+AT_CHECK([[cat input-gram.tab.c]], [[0]],
+[[Hello World
+]])
+
+AT_BISON_CHECK([[input-gram.y]])
+AT_CHECK([[cat input-gram.tab.c]], [[0]],
+[[Hello World -- Local
+]])
+
+AT_BISON_CHECK([[--skeleton=tmp/skel.c tmp/input-cmd-line.y]])
+AT_CHECK([[cat input-cmd-line.tab.c]], [[0]],
+[[Hello World
+]])
+
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## Installed skeleton file names.  ##
+## ------------------------------- ##
+
+AT_SETUP([[Installed skeleton file names]])
+
+AT_BISON_OPTION_PUSHDEFS
+m4_pushdef([AT_GRAM],
+[[%{
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  int yylex (void);
+%}
+
+%error-verbose
+%token 'a'
+
+%%
+
+start: ;
+
+%%
+
+]AT_YYERROR_DEFINE[
+int
+yylex (void)
+{
+  return 'a';
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+
+AT_DATA_GRAMMAR([[input-cmd-line.y]],
+[AT_GRAM])
+
+AT_DATA_GRAMMAR([[input-gram.y]],
+[[%skeleton "yacc.c"]
+AT_GRAM])
+
+AT_BISON_CHECK([[--skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y]])
+AT_COMPILE([[input-cmd-line]])
+AT_PARSER_CHECK([[./input-cmd-line]], [[1]], [],
+[[syntax error, unexpected 'a', expecting $end
+]])
+
+AT_BISON_CHECK([[-o input-gram.c input-gram.y]])
+AT_COMPILE([[input-gram]])
+AT_PARSER_CHECK([[./input-gram]], [[1]], [],
+[[syntax error, unexpected 'a', expecting $end
+]])
+
+m4_popdef([AT_GRAM])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## ------------------------------------------------------ ##
+## %define Boolean variables: invalid skeleton defaults.  ##
+## ------------------------------------------------------ ##
+
+AT_SETUP([[%define Boolean variables: invalid skeleton defaults]])
+
+AT_DATA([[skel.c]],
+[[b4_percent_define_default([[foo]], [[bogus value]])
+b4_percent_define_flag_if([[foo]])
+]])
+
+AT_DATA([[input.y]],
+[[%skeleton "./skel.c"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input.y]], [[1]], [[]],
+[[<skeleton default value>: error: invalid value for %define Boolean variable 'foo'
+]])
+
+AT_CLEANUP
+
+
+## --------------------------------------------- ##
+## Complaining during macro argument expansion.  ##
+## --------------------------------------------- ##
+
+AT_SETUP([[Complaining during macro argument expansion]])
+
+AT_DATA([[skel1.c]],
+[[m4@&t@_define([foow], [b4_warn([[foow fubar]])])
+m4@&t@_define([foowat], [b4_warn_at([[foow.y:2.3]],
+                                    [[foow.y:5.4]], [[foowat fubar]])])
+m4@&t@_define([fooc], [b4_complain([[fooc fubar]])])
+m4@&t@_define([foocat], [b4_complain_at([[fooc.y:1.1]],
+                                        [[fooc.y:10.6]], [[foocat fubar]])])
+m4@&t@_define([foof], [b4_fatal([[foof fubar]])])
+m4@&t@_if(foow, [1], [yes])
+m4@&t@_if(foowat, [1], [yes])
+m4@&t@_if(fooc, [1], [yes])
+m4@&t@_if(foocat, [1], [yes])
+m4@&t@_if(foof, [1], [yes])
+]])
+
+AT_DATA([[input1.y]],
+[[%skeleton "./skel1.c"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input1.y]], [[1]], [[]],
+[[input1.y: warning: foow fubar
+foow.y:2.3-5.3: warning: foowat fubar
+input1.y: error: fooc fubar
+fooc.y:1.1-10.5: error: foocat fubar
+input1.y: fatal error: foof fubar
+]])
+
+AT_DATA([[skel2.c]],
+[[m4@&t@_define([foofat], [b4_fatal_at([[foof.y:12.11]],
+                                       [[foof.y:100.123]], [[foofat fubar]])])
+m4@&t@_if(foofat, [1], [yes])
+]])
+
+AT_DATA([[input2.y]],
+[[%skeleton "./skel2.c"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input2.y]], [[1]], [[]],
+[[foof.y:12.11-100.122: fatal error: foofat fubar
+]])
+
+AT_DATA([[skel3.c]],
+[[b4_complain_at(b4_percent_define_get_loc([[bogus]]), [[bad value]])
+]])
+
+AT_DATA([[input3.y]],
+[[%skeleton "./skel3.c"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input3.y]], [[1]], [[]],
+[[input3.y: fatal error: b4_percent_define_get_loc: undefined %define variable 'bogus'
+]])
+
+AT_DATA([[skel4.c]],
+[[b4_warn_at(b4_percent_define_get_syncline([[bogus]]), [[bad value]])
+]])
+
+AT_DATA([[input4.y]],
+[[%skeleton "./skel4.c"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input4.y]], [[1]], [[]],
+[[input4.y: fatal error: b4_percent_define_get_syncline: undefined %define variable 'bogus'
+]])
+
+AT_CLEANUP
+
+
+## --------------------------------------- ##
+## Fatal errors make M4 exit immediately.  ##
+## --------------------------------------- ##
+
+AT_SETUP([[Fatal errors make M4 exit immediately]])
+
+AT_DATA([[skel1.c]],
+[[b4_complain([[non-fatal error]])
+b4_fatal([[M4 should exit immediately here]])
+m4@&t@_fatal([this should never be evaluated])
+]])
+
+AT_DATA([[input1.y]],
+[[%skeleton "./skel1.c"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input1.y]], [[1]], [[]],
+[[input1.y: error: non-fatal error
+input1.y: fatal error: M4 should exit immediately here
+]])
+
+AT_DATA([[skel2.c]],
+[[b4_warn([[morning]])
+b4_fatal_at([[foo.y:1.5]], [[foo.y:1.7]], [[M4 should exit immediately here]])
+m4@&t@_fatal([this should never be evaluated])
+]])
+
+AT_DATA([[input2.y]],
+[[%skeleton "./skel2.c"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input2.y]], [[1]], [[]],
+[[input2.y: warning: morning
+foo.y:1.5-6: fatal error: M4 should exit immediately here
+]])
+
+AT_CLEANUP
+
+
+## ------------------------------------------------ ##
+## Fatal errors but M4 continues producing output.  ##
+## ------------------------------------------------ ##
+
+# At one time, if Bison encountered a fatal error during M4 processing,
+# Bison failed to drain M4's output pipe.  The result was a SIGPIPE.
+# On some platforms, the default disposition for SIGPIPE is terminate,
+# which was fine.  On others, it's ignore, which caused M4 to report
+# the broken pipe to the user, but we don't want to bother the user with
+# that.
+
+# There is a race condition somewhere.  That is, before the associated
+# fix, running this test group many times in a row would occasionally
+# produce a pass among all the failures.
+
+AT_SETUP([[Fatal errors but M4 continues producing output]])
+
+AT_DATA([[gen-skel.pl]],
+[[use warnings;
+use strict;
+my $M4 = "m4";
+my $DNL = "d"."nl";
+print "${M4}_divert_push(0)$DNL\n";
+print '@output(@,@)', "\n";
+(print "garbage"x10, "\n") for (1..1000);
+print "${M4}_divert_pop(0)\n";
+]])
+AT_CHECK([[$PERL gen-skel.pl > skel.c || exit 77]])
+
+AT_DATA([[input.y]],
+[[%skeleton "./skel.c"
+%%
+start: ;
+]])
+
+AT_BISON_CHECK([[input.y]], [[1]], [[]],
+[[input.y: fatal error: too many arguments for @output directive in skeleton
+]])
+
+AT_CLEANUP
diff --git a/tests/synclines.at b/tests/synclines.at
index 5ecbdb3..6b84719 100644
--- a/tests/synclines.at
+++ b/tests/synclines.at
@@ -1,20 +1,20 @@
 # Executing Actions.                               -*- Autotest -*-
-# Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2002, 2004-2005, 2007, 2009-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[User Actions.]])
 
@@ -23,10 +23,15 @@
 # --------------------------
 # Compile FILE expecting an error, and save in the file stdout the
 # normalized output.  Ignore the exit status, since some compilers
-# (e.g. c89 on IRIX 6.5) triger warnings on `#error', instead of
+# (e.g. c89 on IRIX 6.5) trigger warnings on `#error', instead of
 # errors.
 m4_define([AT_SYNCLINES_COMPILE],
 [AT_CHECK([$CC $CFLAGS $CPPFLAGS -c $1], [ignore], [], [stderr])
+
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -35,16 +40,74 @@
 # =>
 #   input.y:4: #error "4"
 #
-AT_CHECK([[sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^@%:@]*\( @%:@error\)/\1\2/' stderr]], 0, [stdout])
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
+
+AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$][1:$][2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$][1: #error /gm;
+EOF
+]],
+  0, [stdout])
 ])
 
-# AT_TEST_SYNCLINE(TITLE, INPUT, ERROR-MSG)
-# -----------------------------------------
+# AT_TEST(TITLE, INPUT, ERROR-MSG)
+# --------------------------------
 # Check that compiling the parser produced from INPUT cause GCC
 # to issue ERROR-MSG.
-m4_define([AT_TEST_SYNCLINE],
+m4_pushdef([AT_TEST],
 [AT_SETUP([$1])
-
+AT_BISON_OPTION_PUSHDEFS
 # It seems impossible to find a generic scheme to check the location
 # of an error.  Even requiring GCC is not sufficient, since for instance
 # the version modified by Apple:
@@ -64,65 +127,69 @@
 
 AT_DATA([syncline.c],
 [[#error "1"
+int i; /* avoids -pedantic warning about an empty translation unit. */
 ]])
 
 AT_SYNCLINES_COMPILE([syncline.c])
 AT_CHECK([[test "`cat stdout`" = 'syncline.c:1: @%:@error "1"' || exit 77]])
 
 AT_DATA([[input.y]], [$2])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
 AT_SYNCLINES_COMPILE([input.c])
 AT_CHECK([cat stdout], 0, [$3])
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 ])
 
 
-## --------------------- ##
-## Prologue synch line.  ##
-## --------------------- ##
+## ------------------- ##
+## Prologue syncline.  ##
+## ------------------- ##
 
 
-AT_TEST_SYNCLINE([Prologue synch line],
+AT_TEST([Prologue syncline],
 [[%{
 #error "2"
-void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 %}
 %%
 exp: '0';
+%%
 ]],
 [input.y:2: #error "2"
 ])
 
 
-## ------------------- ##
-## %union synch line.  ##
-## ------------------- ##
+## ----------------- ##
+## %union syncline.  ##
+## ----------------- ##
 
-AT_TEST_SYNCLINE([%union synch line],
+AT_TEST([%union syncline],
 [[%union {
 #error "2"
   char dummy;
 }
 %{
-void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 %}
 %%
 exp: '0';
+%%
 ]],
 [input.y:2: #error "2"
 ])
 
 
-## ------------------------- ##
-## Postprologue synch line.  ##
-## ------------------------- ##
+## ----------------------- ##
+## Postprologue syncline.  ##
+## ----------------------- ##
 
-AT_TEST_SYNCLINE([Postprologue synch line],
+AT_TEST([Postprologue syncline],
 [[%{
-void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 %}
 %union
 {
@@ -133,19 +200,20 @@
 %}
 %%
 exp: '0';
+%%
 ]],
 [input.y:10: #error "10"
 ])
 
 
-## ------------------- ##
-## Action synch line.  ##
-## ------------------- ##
+## ----------------- ##
+## Action syncline.  ##
+## ----------------- ##
 
-AT_TEST_SYNCLINE([Action synch line],
+AT_TEST([Action syncline],
 [[%{
-void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 %}
 %%
 exp:
@@ -157,14 +225,14 @@
 ])
 
 
-## --------------------- ##
-## Epilogue synch line.  ##
-## --------------------- ##
+## ------------------- ##
+## Epilogue syncline.  ##
+## ------------------- ##
 
-AT_TEST_SYNCLINE([Epilogue synch line],
+AT_TEST([Epilogue syncline],
 [[%{
-void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
 %}
 %%
 exp: '0';
@@ -173,3 +241,55 @@
 ]],
 [input.y:8: #error "8"
 ])
+
+## -------------------- ##
+## %code top syncline.  ##
+## -------------------- ##
+
+AT_TEST([%code top syncline],
+[[%code top {
+#error "2"
+}
+%{
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
+%}
+%%
+exp: '0';
+%%
+]],
+[input.y:2: #error "2"
+])
+
+m4_popdef([AT_TEST])
+
+## ----------- ##
+## %no-lines.  ##
+## ----------- ##
+
+m4_pushdef([AT_TEST],
+[AT_SETUP([%no-lines])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "$1" %defines])
+AT_DATA_GRAMMAR([input.y],
+[%skeleton "$1" %defines
+%{
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
+%}
+%%
+exp: '0'
+])
+AT_BISON_CHECK([--no-lines -o input.AT_SKEL_CC_IF([cc], [c]) -d input.y])
+AT_CHECK([[grep '#line' ]AT_SKEL_CC_IF([*.cc *.hh], [*.c *.h])], 1)
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
+])
+
+AT_TEST([yacc.c])
+AT_TEST([glr.c])
+AT_TEST([lalr1.cc])
+AT_TEST([glr.cc])
+
+m4_popdef([AT_TEST])
diff --git a/tests/testsuite b/tests/testsuite
index d429345..2e62268 100755
--- a/tests/testsuite
+++ b/tests/testsuite
@@ -1,75 +1,431 @@
 #! /bin/sh
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+# Generated from ../../../tests/local.at by GNU Autoconf 2.69.
+#
+# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+#
+# This test suite is free software; the Free Software Foundation gives
+# unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
+  setopt NO_GLOB_SUBST
 else
-  as_unset=false
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
 
 
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+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
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+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"
+  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'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+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
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $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
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
 else
   as_expr=false
 fi
 
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
   as_basename=basename
 else
   as_basename=false
 fi
 
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-# PATH needs CR, and LINENO needs CR and PATH.
 # Avoid depending upon Character Ranges.
 as_cr_letters='abcdefghijklmnopqrstuvwxyz'
 as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
@@ -77,146 +433,91 @@
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
 
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
     sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
       N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
       t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
+      s/-\n.*//
     ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
+  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 sensible to this).
-  . ./$as_me.lineno
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
   # Exit status is that of the last command.
   exit
 }
 
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
     as_ln_s='ln -s'
+    # ... 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'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
   fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
 fi
 
-as_executable_p="test -f"
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # 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'"
@@ -225,14 +526,7 @@
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
 
-# CDPATH.
-$as_unset CDPATH
 
 
 SHELL=${CONFIG_SHELL-/bin/sh}
@@ -240,24 +534,6 @@
 # How were we run?
 at_cli_args="$@"
 
-# Load the config file.
-for at_file in atconfig atlocal
-do
-  test -r $at_file || continue
-  . ./$at_file || { echo "$as_me: error: invalid content: $at_file" >&2
-   { (exit 1); exit 1; }; }
-done
-
-# atconfig delivers paths relative to the directory the test suite is
-# in, but the groups themselves are run in testsuite-dir/group-dir.
-if test -n "$at_top_srcdir"; then
-  builddir=../..
-  for at_dir in srcdir top_srcdir top_builddir
-  do
-    at_val=`eval echo '${'at_$at_dir'}'`
-    eval "$at_dir=\$at_val/../.."
-  done
-fi
 
 # Not all shells have the 'times' builtin; the subshell is needed to make
 # sure we discard the 'times: not found' message from the shell.
@@ -268,208 +544,440 @@
 at_debug_args=
 # -e sets to true
 at_errexit_p=false
-# Shall we be verbose?
+# Shall we be verbose?  ':' means no, empty means yes.
 at_verbose=:
-at_quiet=echo
+at_quiet=
+# Running several jobs in parallel, 0 means as many as test groups.
+at_jobs=1
+at_traceon=:
+at_trace_echo=:
+at_check_filter_trace=:
 
 # Shall we keep the debug scripts?  Must be `:' when the suite is
 # run by a debug script, so that the script doesn't remove itself.
 at_debug_p=false
 # Display help message?
 at_help_p=false
+# Display the version message?
+at_version_p=false
 # List test groups?
 at_list_p=false
+# --clean
+at_clean=false
 # Test groups to run
 at_groups=
+# Whether to rerun failed tests.
+at_recheck=
+# Whether a write failure occurred
+at_write_fail=0
 
-# The directory we are in.
+# The directory we run the suite in.  Default to . if no -C option.
 at_dir=`pwd`
-# The directory the whole suite works in.
-# Should be absolutely to let the user `cd' at will.
-at_suite_dir=$at_dir/$as_me.dir
-# The file containing the suite.
-at_suite_log=$at_dir/$as_me.log
-# The file containing the location of the last AT_CHECK.
-at_check_line_file=$at_suite_dir/at-check-line
-# The file containing the exit status of the last command.
-at_status_file=$at_suite_dir/at-status
-# The files containing the output of the tested commands.
-at_stdout=$at_suite_dir/at-stdout
-at_stder1=$at_suite_dir/at-stder1
-at_stderr=$at_suite_dir/at-stderr
-# The file containing dates.
-at_times_file=$at_suite_dir/at-times
+# An absolute reference to this testsuite script.
+case $as_myself in
+  [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;;
+  * ) at_myself=$at_dir/$as_myself ;;
+esac
+# Whether -C is in effect.
+at_change_dir=false
 
+# Whether to enable colored test results.
+at_color=auto
 # List of the tested programs.
 at_tested='bison'
-# List of the all the test groups.
-at_groups_all=' banner-1 1 2 3 4 5 6 7 8 9 10 banner-2 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 banner-3 31 32 33 34 banner-4 35 36 37 38 39 40 banner-5 41 42 43 44 45 banner-6 46 47 48 49 banner-7 50 51 52 53 54 55 56 57 banner-8 58 59 60 61 62 63 64 65 66 67 68 69 banner-9 70 71 72 73 74 75 76 77 78 79 80 81 82 83 banner-10 84 85 86 87 88 89 90 91 92 93 94 95 96 97 banner-11 98 99 100 101 102 banner-12 103 104 banner-13 105 106 107 108 109 banner-14 110 111 112 banner-15 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 banner-16 131 132 banner-17 133 134 135 136 137 138 139 140 141 banner-18 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158'
-# As many dots as there are digits in the last test group number.
+# As many question marks as there are digits in the last test group number.
 # Used to normalize the test group numbers so that `ls' lists them in
 # numerical order.
-at_format='...'
+at_format='???'
 # Description of all the test groups.
-at_help_all='1;input.at:28;Invalid dollar-n;;
-2;input.at:46;Invalid @n;;
-3;input.at:64;Type Clashes;;
-4;input.at:89;Unused values;;
-5;input.at:157;Incompatible Aliases;;
-6;input.at:198;Torturing the Scanner;;
-7;input.at:357;Typed symbol aliases;;
-8;input.at:393;Require 1.0;;
-9;input.at:394;Require 2.3;;
-10;input.at:396;Require 100.0;;
-11;output.at:43;Output files:  -dv ;;
-12;output.at:46;Output files:  -dv >&-;;
-13;output.at:48;Output files:  -dv -o foo.c ;;
-14;output.at:50;Output files:  -dv -o foo.tab.c ;;
-15;output.at:52;Output files:  -dv -y ;;
-16;output.at:54;Output files:  -dv -b bar ;;
-17;output.at:56;Output files:  -dv -g -o foo.c ;;
-18;output.at:60;Output files: %defines %verbose  ;;
-19;output.at:62;Output files: %defines %verbose %yacc  ;;
-20;output.at:65;Output files: %defines %verbose %yacc  ;;
-21;output.at:69;Output files: %file-prefix="bar" %defines %verbose  ;;
-22;output.at:71;Output files: %output="bar.c" %defines %verbose %yacc  ;;
-23;output.at:75;Output files: %file-prefix="baz" %output="bar.c" %defines %verbose %yacc  ;;
-24;output.at:80;Output files: %defines %verbose  ;;
-25;output.at:83;Output files: %defines %verbose  -o foo.c ;;
-26;output.at:87;Output files:  --defines=foo.hpp -o foo.c++ ;;
-27;output.at:91;Output files:  -o foo.c++ --graph=foo.gph ;;
-28;output.at:105;Output files: %skeleton "lalr1.cc" %defines %verbose  ;;
-29;output.at:109;Output files: %skeleton "lalr1.cc" %defines %verbose  ;;
-30;output.at:114;Output files: %skeleton "lalr1.cc" %defines %verbose -o subdir/foo.cc ;;
-31;sets.at:66;Nullable;;
-32;sets.at:151;Broken Closure;;
-33;sets.at:193;Firsts;;
-34;sets.at:269;Accept;;
-35;reduce.at:26;Useless Terminals;;
-36;reduce.at:70;Useless Nonterminals;;
-37;reduce.at:125;Useless Rules;report;
-38;reduce.at:212;Reduced Automaton;report;
-39;reduce.at:301;Underivable Rules;report;
-40;reduce.at:342;Empty Language;;
-41;synclines.at:95;Prologue synch line;;
-42;synclines.at:115;%union synch line;;
-43;synclines.at:138;Postprologue synch line;;
-44;synclines.at:157;Action synch line;;
-45;synclines.at:175;Epilogue synch line;;
-46;headers.at:27;%union and --defines;;
-47;headers.at:77;Invalid CPP guards: input/input;;
-48;headers.at:78;Invalid CPP guards: 9foo;;
-49;headers.at:87;export YYLTYPE;;
-50;actions.at:25;Mid-rule actions;;
-51;actions.at:91;Exotic Dollars;;
-52;actions.at:527;Printers and Destructors : ;;
-53;actions.at:528;Printers and Destructors with union: ;;
-54;actions.at:533;Printers and Destructors : %defines %skeleton "lalr1.cc";c++;
-55;actions.at:534;Printers and Destructors with union: %defines %skeleton "lalr1.cc";c++;
-56;actions.at:536;Printers and Destructors : %glr-parser;;
-57;actions.at:537;Printers and Destructors with union: %glr-parser;;
-58;conflicts.at:32;S/R in initial;;
-59;conflicts.at:52;%nonassoc and eof;;
-60;conflicts.at:128;Unresolved SR Conflicts;report;
-61;conflicts.at:235;Resolved SR Conflicts;report;
-62;conflicts.at:357;Defaulted Conflicted Reduction;report;
-63;conflicts.at:476;%expect not enough;;
-64;conflicts.at:496;%expect right;;
-65;conflicts.at:513;%expect too much;;
-66;conflicts.at:533;%expect with reduce conflicts;;
-67;conflicts.at:553;%no-default-prec without %prec;;
-68;conflicts.at:579;%no-default-prec with %prec;;
-69;conflicts.at:603;%default-prec;;
-70;calc.at:550;Calculator ;;
-71;calc.at:552;Calculator %defines;;
-72;calc.at:553;Calculator %locations;;
-73;calc.at:554;Calculator %name-prefix="calc";;
-74;calc.at:555;Calculator %verbose;;
-75;calc.at:556;Calculator %yacc;;
-76;calc.at:557;Calculator %error-verbose;;
-77;calc.at:559;Calculator %pure-parser %locations;;
-78;calc.at:560;Calculator %error-verbose %locations;;
-79;calc.at:562;Calculator %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc;;
-80;calc.at:564;Calculator %debug;;
-81;calc.at:565;Calculator %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc;;
-82;calc.at:567;Calculator %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc;;
-83;calc.at:569;Calculator %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};;
-84;calc.at:586;Calculator %glr-parser ;;
-85;calc.at:588;Calculator %glr-parser %defines;;
-86;calc.at:589;Calculator %glr-parser %locations;;
-87;calc.at:590;Calculator %glr-parser %name-prefix="calc";;
-88;calc.at:591;Calculator %glr-parser %verbose;;
-89;calc.at:592;Calculator %glr-parser %yacc;;
-90;calc.at:593;Calculator %glr-parser %error-verbose;;
-91;calc.at:595;Calculator %glr-parser %pure-parser %locations;;
-92;calc.at:596;Calculator %glr-parser %error-verbose %locations;;
-93;calc.at:598;Calculator %glr-parser %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc;;
-94;calc.at:600;Calculator %glr-parser %debug;;
-95;calc.at:601;Calculator %glr-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc;;
-96;calc.at:603;Calculator %glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc;;
-97;calc.at:605;Calculator %glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};;
-98;calc.at:621;Calculator %skeleton "lalr1.cc" %defines %locations ;c++;
-99;calc.at:622;Calculator %skeleton "lalr1.cc" %defines %locations %error-verbose %name-prefix="calc" %verbose %yacc;c++;
-100;calc.at:624;Calculator %skeleton "lalr1.cc" %defines %locations %error-verbose %debug %name-prefix="calc" %verbose %yacc;c++;
-101;calc.at:626;Calculator %skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc;c++;
-102;calc.at:628;Calculator %skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};c++;
-103;calc.at:651;Calculator %skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc;c++;
-104;calc.at:653;Calculator %skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};c++;
-105;torture.at:140;Big triangle;;
-106;torture.at:232;Big horizontal;;
-107;torture.at:368;Many look-ahead tokens;;
-108;torture.at:445;Exploding the Stack Size with Alloca;;
-109;torture.at:471;Exploding the Stack Size with Malloc;;
-110;existing.at:26;GNU AWK Grammar;;
-111;existing.at:364;GNU Cim Grammar;;
-112;existing.at:980;GNU pic Grammar;;
-113;regression.at:28;Trivial grammars;;
-114;regression.at:57;Early token definitions;;
-115;regression.at:95;Braces parsing;;
-116;regression.at:117;Duplicate string;;
-117;regression.at:143;Rule Line Numbers;report;
-118;regression.at:287;Mixing %token styles;;
-119;regression.at:310;Invalid inputs;;
-120;regression.at:336;Invalid inputs with {};;
-121;regression.at:363;Token definitions;;
-122;regression.at:416;Characters Escapes;;
-123;regression.at:447;Web2c Report;report;
-124;regression.at:624;Web2c Actions;report;
-125;regression.at:866;Dancer ;;
-126;regression.at:867;Dancer %glr-parser;;
-127;regression.at:868;Dancer %skeleton "lalr1.cc";c++;
-128;regression.at:963;Expecting two tokens ;;
-129;regression.at:964;Expecting two tokens %glr-parser;;
-130;regression.at:965;Expecting two tokens %skeleton "lalr1.cc";c++;
-131;c++.at:102;Doxygen Public Documentation;;
-132;c++.at:103;Doxygen Private Documentation;;
-133;cxx-type.at:412;GLR: Resolve ambiguity, impure, no locations;;
-134;cxx-type.at:419;GLR: Resolve ambiguity, impure, locations;;
-135;cxx-type.at:425;GLR: Resolve ambiguity, pure, no locations;;
-136;cxx-type.at:432;GLR: Resolve ambiguity, pure, locations;;
-137;cxx-type.at:439;GLR: Merge conflicting parses, impure, no locations;;
-138;cxx-type.at:446;GLR: Merge conflicting parses, impure, locations;;
-139;cxx-type.at:453;GLR: Merge conflicting parses, pure, no locations;;
-140;cxx-type.at:459;GLR: Merge conflicting parses, pure, locations;;
-141;cxx-type.at:466;GLR: Verbose messages, resolve ambiguity, impure, no locations;;
-142;glr-regression.at:25;Badly Collapsed GLR States;;
-143;glr-regression.at:116;Improper handling of embedded actions and dollar(-N) in GLR parsers;;
-144;glr-regression.at:232;Improper merging of GLR delayed action sets;;
-145;glr-regression.at:337;Duplicate representation of merged trees;;
-146;glr-regression.at:432;User destructor for unresolved GLR semantic value;;
-147;glr-regression.at:502;User destructor after an error during a split parse;;
-148;glr-regression.at:566;Duplicated user destructor for lookahead;;
-149;glr-regression.at:644;Incorrectly initialized location for empty right-hand side in GLR;;
-150;glr-regression.at:740;No users destructors if stack 0 deleted;;
-151;glr-regression.at:820;Corrupted semantic options if user action cuts parse;;
-152;glr-regression.at:881;Undesirable destructors if user action cuts parse;;
-153;glr-regression.at:947;Leaked semantic values if user action cuts parse;;
-154;glr-regression.at:1078;Incorrect lookahead during deterministic GLR;;
-155;glr-regression.at:1212;Incorrect lookahead during nondeterministic GLR;;
-156;glr-regression.at:1429;Leaked semantic values when reporting ambiguity;;
-157;glr-regression.at:1519;Leaked lookahead after nondeterministic parse syntax error;;
-158;glr-regression.at:1585;Uninitialized location when reporting ambiguity;;
-'
+at_help_all="1;input.at:27;Invalid inputs;;
+2;input.at:57;Invalid inputs with {};;
+3;input.at:84;Invalid \$n and @n;;
+4;input.at:104;Type Clashes;;
+5;input.at:285;Unused values;;
+6;input.at:295;Unused values before symbol declarations;;
+7;input.at:305;Default %printer and %destructor redeclared;;
+8;input.at:365;Per-type %printer and %destructor redeclared;;
+9;input.at:408;Unused values with default %destructor;;
+10;input.at:450;Unused values with per-type %destructor;;
+11;input.at:475;Incompatible Aliases;;
+12;input.at:516;Torturing the Scanner;;
+13;input.at:674;Typed symbol aliases;;
+14;input.at:710;Require 1.0;;
+15;input.at:711;Require 2.7;;
+16;input.at:713;Require 100.0;;
+17;input.at:720;String aliases for character tokens;;
+18;input.at:741;Symbols;;
+19;input.at:807;Numbered tokens;;
+20;input.at:845;Unclosed constructs;;
+21;input.at:909;%start after first rule;;
+22;input.at:930;%prec takes a token;;
+23;input.at:951;%prec's token must be defined;;
+24;input.at:971;Reject unused %code qualifiers;;
+25;input.at:1060;%define errors;;
+26;input.at:1096;%define, --define, --force-define;;
+27;input.at:1161;%define Boolean variables;;
+28;input.at:1181;%define enum variables;;
+29;input.at:1216;%define backward compatibility;;
+30;input.at:1257;Unused %define api.pure;;
+31;input.at:1290;C++ namespace reference errors;;
+32;input.at:1346;Bad character literals;;
+33;input.at:1399;Bad escapes in literals;;
+34;input.at:1448;LAC: Errors for %define;;
+35;input.at:1471;-Werror is not affected by -Wnone and -Wall;;
+36;input.at:1505;%name-prefix and %define api.prefix are incompatible;;
+37;input.at:1534;Stray \$ or @;;
+38;input.at:1568;Code injection;;
+39;named-refs.at:21;Tutorial calculator;;
+40;named-refs.at:195;Undefined and ambiguous references;;
+41;named-refs.at:271;Misleading references;;
+42;named-refs.at:288;Many kinds of errors;;
+43;named-refs.at:521;Missing identifiers in brackets;;
+44;named-refs.at:535;Redundant words in brackets;;
+45;named-refs.at:549;Comments in brackets;;
+46;named-refs.at:563;Stray symbols in brackets;;
+47;named-refs.at:580;Redundant words in LHS brackets;;
+48;named-refs.at:595;Factored LHS;;
+49;named-refs.at:606;Unresolved references;;
+50;named-refs.at:671;\$ or @ followed by . or -;;
+51;output.at:44;Output files:  -dv ;;
+52;output.at:50;Output files:  -dv >&-;;
+53;output.at:55;Output files:  -dv -o foo.c ;;
+54;output.at:57;Output files:  -dv -o foo.tab.c ;;
+55;output.at:59;Output files:  -dv -y ;;
+56;output.at:61;Output files:  -dv -b bar ;;
+57;output.at:63;Output files:  -dv -g -o foo.c ;;
+58;output.at:67;Output files: %defines %verbose  ;;
+59;output.at:69;Output files: %defines %verbose %yacc  ;;
+60;output.at:72;Output files: %defines %verbose %yacc  ;;
+61;output.at:76;Output files: %file-prefix \"bar\" %defines %verbose  ;;
+62;output.at:78;Output files: %output=\"bar.c\" %defines %verbose %yacc  ;;
+63;output.at:80;Output files: %file-prefix=\"baz\" %output \"bar.c\" %defines %verbose %yacc  ;;
+64;output.at:87;Output files: %defines %verbose  ;;
+65;output.at:90;Output files: %defines %verbose  -o foo.c ;;
+66;output.at:93;Output files:  --defines=foo.hpp -o foo.c++ ;;
+67;output.at:97;Output files: %defines \"foo.hpp\" -o foo.c++ ;;
+68;output.at:101;Output files:  -o foo.c++ --graph=foo.gph ;;
+69;output.at:116;Output files: %skeleton \"lalr1.cc\" %defines %verbose  ;;
+70;output.at:119;Output files: %skeleton \"lalr1.cc\" %defines %verbose  ;;
+71;output.at:123;Output files: %skeleton \"lalr1.cc\" %defines %verbose -o subdir/foo.cc ;;
+72;output.at:128;Output files: %skeleton \"lalr1.cc\" %defines %verbose %file-prefix \"output_dir/foo\"  ;;
+73;output.at:158;Conflicting output files:  --graph=\"foo.tab.c\";;
+74;output.at:163;Conflicting output files: %defines \"foo.output\" -v;;
+75;output.at:168;Conflicting output files: %skeleton \"lalr1.cc\" %defines --graph=\"location.hh\";;
+76;output.at:173;Conflicting output files:  -o foo.y;;
+77;output.at:219;Output file name: \`~!@#\$%^&*()-=_+{}[]|\\:;<>, .';c++;
+78;output.at:226;Output file name: (;c++;
+79;output.at:227;Output file name: );c++;
+80;output.at:228;Output file name: #;c++;
+81;output.at:229;Output file name: @@;c++;
+82;output.at:230;Output file name: @{;c++;
+83;output.at:231;Output file name: @};c++;
+84;output.at:232;Output file name: [;c++;
+85;output.at:233;Output file name: ];c++;
+86;output.at:260;Graph with no conflicts;graph;
+87;output.at:294;Graph with unsolved S/R;graph;
+88;output.at:358;Graph with solved S/R;graph;
+89;output.at:417;Graph with R/R;graph;
+90;output.at:449;Graph with reductions with multiple LAT;graph;
+91;output.at:508;Graph with a reduction rule both enabled and disabled;graph;
+92;skeletons.at:24;Relative skeleton file names;;
+93;skeletons.at:84;Installed skeleton file names;;
+94;skeletons.at:146;%define Boolean variables: invalid skeleton defaults;;
+95;skeletons.at:170;Complaining during macro argument expansion;;
+96;skeletons.at:252;Fatal errors make M4 exit immediately;;
+97;skeletons.at:306;Fatal errors but M4 continues producing output;;
+98;sets.at:66;Nullable;;
+99;sets.at:151;Broken Closure;;
+100;sets.at:193;Firsts;;
+101;sets.at:269;Accept;;
+102;reduce.at:25;Useless Terminals;;
+103;reduce.at:69;Useless Nonterminals;;
+104;reduce.at:124;Useless Rules;report;
+105;reduce.at:271;Reduced Automaton;report;
+106;reduce.at:381;Underivable Rules;report;
+107;reduce.at:423;Empty Language;;
+108;reduce.at:474;no %define lr.type: Single State Split;;
+109;reduce.at:474;%define lr.type lalr: Single State Split;;
+110;reduce.at:474;%define lr.type ielr: Single State Split;;
+111;reduce.at:474;%define lr.type canonical-lr: Single State Split;;
+112;reduce.at:707;no %define lr.type: Lane Split;;
+113;reduce.at:707;%define lr.type lalr: Lane Split;;
+114;reduce.at:707;%define lr.type ielr: Lane Split;;
+115;reduce.at:707;%define lr.type canonical-lr: Lane Split;;
+116;reduce.at:951;no %define lr.type: Complex Lane Split;;
+117;reduce.at:951;%define lr.type lalr: Complex Lane Split;;
+118;reduce.at:951;%define lr.type ielr: Complex Lane Split;;
+119;reduce.at:951;%define lr.type canonical-lr: Complex Lane Split;;
+120;reduce.at:1220;no %define lr.type: Split During Added Lookahead Propagation;;
+121;reduce.at:1220;%define lr.type lalr: Split During Added Lookahead Propagation;;
+122;reduce.at:1220;%define lr.type ielr: Split During Added Lookahead Propagation;;
+123;reduce.at:1220;%define lr.type canonical-lr: Split During Added Lookahead Propagation;;
+124;reduce.at:1550;no %define lr.default-reductions;;
+125;reduce.at:1550;%define lr.default-reductions most;;
+126;reduce.at:1550;%define lr.default-reductions consistent;;
+127;reduce.at:1550;%define lr.default-reductions accepting;;
+128;synclines.at:150;Prologue syncline;;
+129;synclines.at:168;%union syncline;;
+130;synclines.at:189;Postprologue syncline;;
+131;synclines.at:213;Action syncline;;
+132;synclines.at:232;Epilogue syncline;;
+133;synclines.at:249;%code top syncline;;
+134;synclines.at:290;%no-lines;;
+135;synclines.at:291;%no-lines;;
+136;synclines.at:292;%no-lines;;
+137;synclines.at:293;%no-lines;;
+138;headers.at:57;Invalid CPP guards:  --defines=input/input.h;;
+139;headers.at:58;Invalid CPP guards:  --defines=9foo.h;;
+140;headers.at:59;Invalid CPP guards: %glr-parser --defines=input/input.h;;
+141;headers.at:60;Invalid CPP guards: %glr-parser --defines=9foo.h;;
+142;headers.at:69;export YYLTYPE;;
+143;headers.at:125;Several parsers;c++;
+144;actions.at:24;Mid-rule actions;;
+145;actions.at:133;Initial location: yacc.c ;;
+146;actions.at:134;Initial location: yacc.c %define api.pure full;;
+147;actions.at:135;Initial location: yacc.c %define api.pure %parse-param { int x };;
+148;actions.at:136;Initial location: yacc.c %define api.push-pull both;;
+149;actions.at:137;Initial location: yacc.c %define api.push-pull both %define api.pure full;;
+150;actions.at:138;Initial location: glr.c ;;
+151;actions.at:139;Initial location: glr.c %define api.pure;;
+152;actions.at:140;Initial location: lalr1.cc ;c++;
+153;actions.at:141;Initial location: glr.cc ;c++;
+154;actions.at:150;Initial location: yacc.c %define api.pure full;;
+155;actions.at:161;Initial location: yacc.c %define api.pure full;;
+156;actions.at:244;Location print: yacc.c ;;
+157;actions.at:245;Location print: glr.c ;;
+158;actions.at:257;Exotic Dollars;;
+159;actions.at:751;Printers and Destructors;;
+160;actions.at:752;Printers and Destructors with union;;
+161;actions.at:754;Printers and Destructors: %defines %skeleton \"lalr1.cc\";c++;
+162;actions.at:755;Printers and Destructors with union: %defines %skeleton \"lalr1.cc\";c++;
+163;actions.at:757;Printers and Destructors: %glr-parser;;
+164;actions.at:758;Printers and Destructors with union: %glr-parser;;
+165;actions.at:769;Default tagless %printer and %destructor;;
+166;actions.at:867;Default tagged and per-type %printer and %destructor;;
+167;actions.at:991;Default %printer and %destructor for user-defined end token;;
+168;actions.at:1098;Default %printer and %destructor are not for error or \$undefined;;
+169;actions.at:1193;Default %printer and %destructor are not for \$accept;;
+170;actions.at:1258;Default %printer and %destructor for mid-rule values;;
+171;actions.at:1406;@\$ in %initial-action implies %locations;;
+172;actions.at:1407;@\$ in %destructor implies %locations;;
+173;actions.at:1408;@\$ in %printer implies %locations;;
+174;actions.at:1529;Qualified \$\$ in actions: yacc.c;;
+175;actions.at:1530;Qualified \$\$ in actions: glr.c;;
+176;actions.at:1531;Qualified \$\$ in actions: lalr1.cc;c++;
+177;actions.at:1532;Qualified \$\$ in actions: glr.cc;c++;
+178;actions.at:1540;Fix user actions without a trailing semicolon;;
+179;actions.at:1649;Destroying lookahead assigned by semantic action;;
+180;actions.at:1708;YYBACKUP;;
+181;conflicts.at:31;S/R in initial;;
+182;conflicts.at:57;%nonassoc and eof;;
+183;conflicts.at:155;%error-verbose and consistent errors;c++ java;
+184;conflicts.at:456;LAC: %nonassoc requires splitting canonical LR states;;
+185;conflicts.at:546;Unresolved SR Conflicts;report;
+186;conflicts.at:653;Resolved SR Conflicts;report;
+187;conflicts.at:775;Defaulted Conflicted Reduction;report;
+188;conflicts.at:894;%expect not enough;;
+189;conflicts.at:914;%expect right;;
+190;conflicts.at:931;%expect too much;;
+191;conflicts.at:951;%expect with reduce conflicts;;
+192;conflicts.at:971;%prec with user string;;
+193;conflicts.at:988;%no-default-prec without %prec;;
+194;conflicts.at:1014;%no-default-prec with %prec;;
+195;conflicts.at:1038;%default-prec;;
+196;conflicts.at:1062;Unreachable States After Conflict Resolution;;
+197;conflicts.at:1273;Solved conflicts report for multiple reductions in a state;;
+198;conflicts.at:1353;%nonassoc error actions for multiple reductions in a state;;
+199;conflicts.at:1422;-W versus %expect and %expect-rr;;
+200;calc.at:597;Calculator ;;
+201;calc.at:599;Calculator %defines;;
+202;calc.at:600;Calculator %locations;;
+203;calc.at:602;Calculator %name-prefix=\"calc\";;
+204;calc.at:603;Calculator %verbose;;
+205;calc.at:604;Calculator %yacc;;
+206;calc.at:605;Calculator %error-verbose;;
+207;calc.at:607;Calculator %define api.pure full %locations;;
+208;calc.at:608;Calculator %define api.push-pull both %define api.pure full %locations;;
+209;calc.at:609;Calculator %error-verbose %locations;;
+210;calc.at:611;Calculator %error-verbose %locations %defines %name-prefix \"calc\" %verbose %yacc;;
+211;calc.at:612;Calculator %error-verbose %locations %defines %define api.prefix \"calc\" %verbose %yacc;;
+212;calc.at:614;Calculator %debug;;
+213;calc.at:615;Calculator %error-verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc;;
+214;calc.at:616;Calculator %error-verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc;;
+215;calc.at:618;Calculator %define api.pure full %verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc;;
+216;calc.at:619;Calculator %define api.push-pull both %define api.pure full %verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc;;
+217;calc.at:621;Calculator %define api.pure %error-verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};;
+218;calc.at:638;Calculator %glr-parser ;;
+219;calc.at:640;Calculator %glr-parser %defines;;
+220;calc.at:641;Calculator %glr-parser %locations;;
+221;calc.at:642;Calculator %glr-parser %name-prefix \"calc\";;
+222;calc.at:643;Calculator %glr-parser %define api.prefix \"calc\";;
+223;calc.at:644;Calculator %glr-parser %verbose;;
+224;calc.at:645;Calculator %glr-parser %yacc;;
+225;calc.at:646;Calculator %glr-parser %error-verbose;;
+226;calc.at:648;Calculator %glr-parser %define api.pure %locations;;
+227;calc.at:649;Calculator %glr-parser %error-verbose %locations;;
+228;calc.at:651;Calculator %glr-parser %error-verbose %locations %defines %name-prefix \"calc\" %verbose %yacc;;
+229;calc.at:653;Calculator %glr-parser %debug;;
+230;calc.at:654;Calculator %glr-parser %error-verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc;;
+231;calc.at:655;Calculator %glr-parser %error-verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc;;
+232;calc.at:657;Calculator %glr-parser %define api.pure %error-verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc;;
+233;calc.at:659;Calculator %glr-parser %define api.pure %error-verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};;
+234;calc.at:660;Calculator %glr-parser %define api.pure %error-verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};;
+235;calc.at:670;Calculator %skeleton \"lalr1.cc\" %defines %locations;c++;
+236;calc.at:679;Calculator %language \"C++\" %defines %locations ;c++;
+237;calc.at:680;Calculator %language \"C++\" %defines %locations %define api.location.type Span;c++;
+238;calc.at:681;Calculator %language \"C++\" %defines %locations %error-verbose %name-prefix \"calc\" %verbose %yacc;c++;
+239;calc.at:682;Calculator %language \"C++\" %defines %locations %error-verbose %define api.prefix \"calc\" %verbose %yacc;c++;
+240;calc.at:683;Calculator %language \"C++\" %defines %locations %error-verbose %debug %name-prefix \"calc\" %verbose %yacc;c++;
+241;calc.at:685;Calculator %language \"C++\" %defines %locations %pure-parser %error-verbose %debug %define api.prefix \"calc\" %verbose %yacc;c++;
+242;calc.at:687;Calculator %language \"C++\" %defines %locations %pure-parser %error-verbose %debug %name-prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};c++;
+243;calc.at:688;Calculator %language \"C++\" %defines %locations %pure-parser %error-verbose %debug %define api.prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};c++;
+244;calc.at:699;Calculator %skeleton \"glr.cc\" %defines %locations;c++;
+245;calc.at:708;Calculator %language \"C++\" %glr-parser %defines %locations ;c++;
+246;calc.at:709;Calculator %language \"C++\" %glr-parser %defines %locations %define api.location.type Span;c++;
+247;calc.at:710;Calculator %language \"C++\" %glr-parser %defines %locations %error-verbose %name-prefix \"calc\" %verbose %yacc;c++;
+248;calc.at:711;Calculator %language \"C++\" %glr-parser %defines %locations %error-verbose %define api.prefix \"calc\" %verbose %yacc;c++;
+249;calc.at:713;Calculator %language \"C++\" %glr-parser %defines %locations %debug;c++;
+250;calc.at:714;Calculator %language \"C++\" %glr-parser %defines %locations %error-verbose %debug %name-prefix \"calc\" %verbose %yacc;c++;
+251;calc.at:716;Calculator %language \"C++\" %glr-parser %defines %locations %pure-parser %error-verbose %debug %name-prefix \"calc\" %verbose %yacc;c++;
+252;calc.at:718;Calculator %language \"C++\" %glr-parser %defines %locations %pure-parser %error-verbose %debug %name-prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};c++;
+253;calc.at:719;Calculator %language \"C++\" %glr-parser %defines %locations %pure-parser %error-verbose %debug %define api.prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count};c++;
+254;torture.at:137;Big triangle;;
+255;torture.at:227;Big horizontal;;
+256;torture.at:364;Many lookahead tokens;;
+257;torture.at:466;Exploding the Stack Size with Alloca;;
+258;torture.at:512;Exploding the Stack Size with Malloc;;
+259;existing.at:79;GNU AWK 3.1.0 Grammar: LALR(1);;
+260;existing.at:79;GNU AWK 3.1.0 Grammar: IELR(1);;
+261;existing.at:79;GNU AWK 3.1.0 Grammar: Canonical LR(1);;
+262;existing.at:783;GNU Cim Grammar: LALR(1);;
+263;existing.at:783;GNU Cim Grammar: IELR(1);;
+264;existing.at:783;GNU Cim Grammar: Canonical LR(1);;
+265;existing.at:1403;GNU pic (Groff 1.18.1) Grammar: LALR(1);;
+266;existing.at:1403;GNU pic (Groff 1.18.1) Grammar: IELR(1);;
+267;existing.at:1403;GNU pic (Groff 1.18.1) Grammar: Canonical LR(1);;
+268;regression.at:25;Trivial grammars;;
+269;regression.at:55;YYSTYPE typedef;;
+270;regression.at:85;Early token definitions with --yacc;;
+271;regression.at:125;Early token definitions without --yacc;;
+272;regression.at:170;Braces parsing;;
+273;regression.at:194;Duplicate string;;
+274;regression.at:222;Rule Line Numbers;report;
+275;regression.at:368;Mixing %token styles;;
+276;regression.at:391;Invalid inputs;;
+277;regression.at:418;Invalid inputs with {};;
+278;regression.at:443;Token definitions;;
+279;regression.at:511;Characters Escapes;;
+280;regression.at:544;Web2c Report;report;
+281;regression.at:721;Web2c Actions;report;
+282;regression.at:936;Dancer ;;
+283;regression.at:937;Dancer %glr-parser;;
+284;regression.at:938;Dancer %skeleton \"lalr1.cc\";c++;
+285;regression.at:1020;Expecting two tokens ;;
+286;regression.at:1021;Expecting two tokens %glr-parser;;
+287;regression.at:1022;Expecting two tokens %skeleton \"lalr1.cc\";c++;
+288;regression.at:1030;Braced code in declaration in rules section;;
+289;regression.at:1097;String alias declared after use;;
+290;regression.at:1120;Extra lookahead sets in report;;
+291;regression.at:1161;Token number in precedence declaration;;
+292;regression.at:1219;parse-gram.y: LALR = IELR;;
+293;regression.at:1240;%error-verbose and YYSTACK_USE_ALLOCA;;
+294;regression.at:1319;%error-verbose overflow;;
+295;regression.at:1429;LAC: Exploratory stack;;
+296;regression.at:1523;LAC: Memory exhaustion;;
+297;regression.at:1664;Lex and parse params: yacc.c;;
+298;regression.at:1665;Lex and parse params: glr.c;;
+299;regression.at:1666;Lex and parse params: lalr1.cc;c++;
+300;regression.at:1667;Lex and parse params: glr.cc;c++;
+301;c++.at:101;Doxygen Public Documentation;;
+302;c++.at:102;Doxygen Private Documentation;;
+303;c++.at:160;Relative namespace references;c++;
+304;c++.at:166;Absolute namespace references;c++;
+305;c++.at:175;Syntactically invalid namespace references;;
+306;c++.at:190;Exception safety;c++;
+307;java.at:360;Calculator ;java;
+308;java.at:360;Calculator %error-verbose ;java;
+309;java.at:360;Calculator %locations ;java;
+310;java.at:360;Calculator %error-verbose %locations ;java;
+311;java.at:369;Calculator %lex-param { InputStream is } ;java;
+312;java.at:369;Calculator %error-verbose %lex-param { InputStream is } ;java;
+313;java.at:369;Calculator %locations %lex-param { InputStream is } ;java;
+314;java.at:369;Calculator %error-verbose %locations %lex-param { InputStream is } ;java;
+315;java.at:455;Java parser class and package names;java;
+316;java.at:476;Java parser class modifiers;java;
+317;java.at:534;Java parser class extends and implements;java;
+318;java.at:554;Java %parse-param and %lex-param;java;
+319;java.at:628;Java throws specifications;java;
+320;java.at:717;Java stype, position_class and location_class;java;
+321;java.at:748;Java syntax error handling without error token;java;
+322;cxx-type.at:394;GLR: Resolve ambiguity, impure, no locations;;
+323;cxx-type.at:401;GLR: Resolve ambiguity, impure, locations;;
+324;cxx-type.at:407;GLR: Resolve ambiguity, pure, no locations;;
+325;cxx-type.at:414;GLR: Resolve ambiguity, pure, locations;;
+326;cxx-type.at:421;GLR: Merge conflicting parses, impure, no locations;;
+327;cxx-type.at:428;GLR: Merge conflicting parses, impure, locations;;
+328;cxx-type.at:435;GLR: Merge conflicting parses, pure, no locations;;
+329;cxx-type.at:441;GLR: Merge conflicting parses, pure, locations;;
+330;cxx-type.at:448;GLR: Verbose messages, resolve ambiguity, impure, no locations;;
+331;glr-regression.at:25;Badly Collapsed GLR States;;
+332;glr-regression.at:112;Improper handling of embedded actions and dollar(-N) in GLR parsers;;
+333;glr-regression.at:244;Improper merging of GLR delayed action sets;;
+334;glr-regression.at:364;Duplicate representation of merged trees;;
+335;glr-regression.at:455;User destructor for unresolved GLR semantic value;;
+336;glr-regression.at:515;User destructor after an error during a split parse;;
+337;glr-regression.at:569;Duplicated user destructor for lookahead;;
+338;glr-regression.at:658;Incorrectly initialized location for empty right-hand side in GLR;;
+339;glr-regression.at:752;No users destructors if stack 0 deleted;;
+340;glr-regression.at:829;Corrupted semantic options if user action cuts parse;;
+341;glr-regression.at:883;Undesirable destructors if user action cuts parse;;
+342;glr-regression.at:941;Leaked semantic values if user action cuts parse;;
+343;glr-regression.at:1064;Incorrect lookahead during deterministic GLR;;
+344;glr-regression.at:1188;Incorrect lookahead during nondeterministic GLR;;
+345;glr-regression.at:1405;Leaked semantic values when reporting ambiguity;;
+346;glr-regression.at:1487;Leaked lookahead after nondeterministic parse syntax error;;
+347;glr-regression.at:1547;Uninitialized location when reporting ambiguity;;
+348;glr-regression.at:1625;Missed %merge type warnings when LHS type is declared later;;
+349;glr-regression.at:1678;Ambiguity reports;;
+350;push.at:24;Memory Leak for Early Deletion;;
+351;push.at:83;Multiple impure instances;;
+352;push.at:144;Unsupported Skeletons;;
+"
+# List of the all the test groups.
+at_groups_all=`$as_echo "$at_help_all" | sed 's/;.*//'`
 
-at_keywords=
+# at_fn_validate_ranges NAME...
+# -----------------------------
+# Validate and normalize the test group number contained in each variable
+# NAME. Leading zeroes are treated as decimal.
+at_fn_validate_ranges ()
+{
+  for at_grp
+  do
+    eval at_value=\$$at_grp
+    if test $at_value -lt 1 || test $at_value -gt 352; then
+      $as_echo "invalid test group: $at_value" >&2
+      exit 1
+    fi
+    case $at_value in
+      0*) # We want to treat leading 0 as decimal, like expr and test, but
+	  # AS_VAR_ARITH treats it as octal if it uses $(( )).
+	  # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the
+	  # expr fork, but it is not worth the effort to determine if the
+	  # shell supports XSI when the user can just avoid leading 0.
+	  eval $at_grp='`expr $at_value + 0`' ;;
+    esac
+  done
+}
+
+##
+## Set up package specific options.
+##
+
+at_arg_compile_c_with_cxx=false
+at_arg_given_compile_c_with_cxx=false
+
+
 at_prev=
 for at_option
 do
@@ -479,7 +987,10 @@
     at_prev=
   fi
 
-  at_optarg=`expr "x$at_option" : 'x[^=]*=\(.*\)'`
+  case $at_option in
+  *=?*) at_optarg=`expr "X$at_option" : '[^=]*=\(.*\)'` ;;
+  *)    at_optarg= ;;
+  esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
 
@@ -493,13 +1004,24 @@
 	;;
 
     --version | -V )
-	echo "$as_me (GNU Bison 2.3)"
-	exit 0
+	at_version_p=:
 	;;
 
     --clean | -c )
-	rm -rf $at_suite_dir $at_suite_log
-	exit 0
+	at_clean=:
+	;;
+
+    --color )
+	at_color=always
+	;;
+    --color=* )
+	case $at_optarg in
+	no | never | none) at_color=never ;;
+	auto | tty | if-tty) at_color=auto ;;
+	always | yes | force) at_color=always ;;
+	*) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'`
+	   as_fn_error $? "unrecognized argument to $at_optname: $at_optarg" ;;
+	esac
 	;;
 
     --debug | -d )
@@ -512,30 +1034,35 @@
 	;;
 
     --verbose | -v )
-	at_verbose=echo; at_quiet=:
+	at_verbose=; at_quiet=:
 	;;
 
     --trace | -x )
-	at_traceon='set -vx'; at_traceoff='set +vx'
+	at_traceon='set -x'
+	at_trace_echo=echo
+	at_check_filter_trace=at_fn_filter_trace
 	;;
 
     [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9])
-	at_groups="$at_groups$at_option "
+	at_fn_validate_ranges at_option
+	as_fn_append at_groups "$at_option$as_nl"
 	;;
 
     # Ranges
     [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-)
-	at_range_start=`echo $at_option |tr -d '-'`
-	at_range=`echo " $at_groups_all " | \
-	  sed -e 's,^.* '$at_range_start' ,'$at_range_start' ,'`
-	at_groups="$at_groups$at_range "
+	at_range_start=`echo $at_option |tr -d X-`
+	at_fn_validate_ranges at_range_start
+	at_range=`$as_echo "$at_groups_all" | \
+	  sed -ne '/^'$at_range_start'$/,$p'`
+	as_fn_append at_groups "$at_range$as_nl"
 	;;
 
     -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9])
-	at_range_end=`echo $at_option |tr -d '-'`
-	at_range=`echo " $at_groups_all " | \
-	  sed -e 's, '$at_range_end' .*$, '$at_range_end','`
-	at_groups="$at_groups$at_range "
+	at_range_end=`echo $at_option |tr -d X-`
+	at_fn_validate_ranges at_range_end
+	at_range=`$as_echo "$at_groups_all" | \
+	  sed -ne '1,/^'$at_range_end'$/p'`
+	as_fn_append at_groups "$at_range$as_nl"
 	;;
 
     [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \
@@ -544,13 +1071,45 @@
     [0-9][0-9][0-9]-[0-9][0-9][0-9] | \
     [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] | \
     [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] )
-	at_range_start=`echo $at_option |sed 's,-.*,,'`
-	at_range_end=`echo $at_option |sed 's,.*-,,'`
-	# FIXME: Maybe test to make sure start <= end?
-	at_range=`echo " $at_groups_all " | \
-	  sed -e 's,^.* '$at_range_start' ,'$at_range_start' ,' \
-	      -e 's, '$at_range_end' .*$, '$at_range_end','`
-	at_groups="$at_groups$at_range "
+	at_range_start=`expr $at_option : '\(.*\)-'`
+	at_range_end=`expr $at_option : '.*-\(.*\)'`
+	if test $at_range_start -gt $at_range_end; then
+	  at_tmp=$at_range_end
+	  at_range_end=$at_range_start
+	  at_range_start=$at_tmp
+	fi
+	at_fn_validate_ranges at_range_start at_range_end
+	at_range=`$as_echo "$at_groups_all" | \
+	  sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'`
+	as_fn_append at_groups "$at_range$as_nl"
+	;;
+
+    # Directory selection.
+    --directory | -C )
+	at_prev=--directory
+	;;
+    --directory=* )
+	at_change_dir=:
+	at_dir=$at_optarg
+	if test x- = "x$at_dir" ; then
+	  at_dir=./-
+	fi
+	;;
+
+    # Parallel execution.
+    --jobs | -j )
+	at_jobs=0
+	;;
+    --jobs=* | -j[0-9]* )
+	if test -n "$at_optarg"; then
+	  at_jobs=$at_optarg
+	else
+	  at_jobs=`expr X$at_option : 'X-j\(.*\)'`
+	fi
+	case $at_jobs in *[!0-9]*)
+	  at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'`
+	  as_fn_error $? "non-numeric argument to $at_optname: $at_jobs" ;;
+	esac
 	;;
 
     # Keywords.
@@ -558,67 +1117,124 @@
 	at_prev=--keywords
 	;;
     --keywords=* )
-	at_keywords="$at_keywords,$at_optarg"
+	at_groups_selected=$at_help_all
+	at_save_IFS=$IFS
+	IFS=,
+	set X $at_optarg
+	shift
+	IFS=$at_save_IFS
+	for at_keyword
+	do
+	  at_invert=
+	  case $at_keyword in
+	  '!'*)
+	    at_invert="-v"
+	    at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'`
+	    ;;
+	  esac
+	  # It is on purpose that we match the test group titles too.
+	  at_groups_selected=`$as_echo "$at_groups_selected" |
+	      grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"`
+	done
+	# Smash the keywords.
+	at_groups_selected=`$as_echo "$at_groups_selected" | sed 's/;.*//'`
+	as_fn_append at_groups "$at_groups_selected$as_nl"
 	;;
+    --recheck)
+	at_recheck=:
+	;;
+    --compile-c-with-cxx )
+	at_optarg=:
+	at_arg_compile_c_with_cxx=:
+	at_arg_given_compile_c_with_cxx=:
+		;;
+    --no-compile-c-with-cxx )
+	at_optarg=false
+	at_arg_compile_c_with_cxx=false
+	at_arg_given_compile_c_with_cxx=:
+		;;
+
 
     *=*)
-  	at_envvar=`expr "x$at_option" : 'x\([^=]*\)='`
-  	# Reject names that are not valid shell variable names.
-  	expr "x$at_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-  	  { echo "$as_me: error: invalid variable name: $at_envvar" >&2
-   { (exit 1); exit 1; }; }
-  	at_value=`echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"`
-  	eval "$at_envvar='$at_value'"
-  	export $at_envvar
-	# Propagate to debug scripts.
-  	at_debug_args="$at_debug_args $at_option"
-  	;;
+	at_envvar=`expr "x$at_option" : 'x\([^=]*\)='`
+	# Reject names that are not valid shell variable names.
+	case $at_envvar in
+	  '' | [0-9]* | *[!_$as_cr_alnum]* )
+	    as_fn_error $? "invalid variable name: \`$at_envvar'" ;;
+	esac
+	at_value=`$as_echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"`
+	# Export now, but save eval for later and for debug scripts.
+	export $at_envvar
+	as_fn_append at_debug_args " $at_envvar='$at_value'"
+	;;
 
-     *) echo "$as_me: invalid option: $at_option" >&2
-	echo "Try \`$0 --help' for more information." >&2
+     *) $as_echo "$as_me: invalid option: $at_option" >&2
+	$as_echo "Try \`$0 --help' for more information." >&2
 	exit 1
 	;;
   esac
 done
 
-# Process the --keywords
-if test -n "$at_keywords"; then
-  at_groups_selected=$at_help_all
-  for at_keyword in `IFS=,; set X $at_keywords; shift; echo ${1+$@}`
-  do
-    # It is on purpose that we match the test group titles too.
-    at_groups_selected=`echo "$at_groups_selected" |
-			grep -i "^[^;]*;[^;]*.*[; ]$at_keyword[ ;]"`
-  done
-  at_groups_selected=`echo "$at_groups_selected" | sed 's/;.*//'`
-  # Smash the end of lines.
-  at_groups_selected=`echo $at_groups_selected`
-  at_groups="$at_groups$at_groups_selected "
+# Verify our last option didn't require an argument
+if test -n "$at_prev"; then :
+  as_fn_error $? "\`$at_prev' requires an argument"
 fi
 
+# The file containing the suite.
+at_suite_log=$at_dir/$as_me.log
+
 # Selected test groups.
-test -z "$at_groups" && at_groups=$at_groups_all
+if test -z "$at_groups$at_recheck"; then
+  at_groups=$at_groups_all
+else
+  if test -n "$at_recheck" && test -r "$at_suite_log"; then
+    at_oldfails=`sed -n '
+      /^Failed tests:$/,/^Skipped tests:$/{
+	s/^[ ]*\([1-9][0-9]*\):.*/\1/p
+      }
+      /^Unexpected passes:$/,/^## Detailed failed tests/{
+	s/^[ ]*\([1-9][0-9]*\):.*/\1/p
+      }
+      /^## Detailed failed tests/q
+      ' "$at_suite_log"`
+    as_fn_append at_groups "$at_oldfails$as_nl"
+  fi
+  # Sort the tests, removing duplicates.
+  at_groups=`$as_echo "$at_groups" | sort -nu | sed '/^$/d'`
+fi
+
+if test x"$at_color" = xalways \
+   || { test x"$at_color" = xauto && test -t 1; }; then
+  at_red=`printf '\033[0;31m'`
+  at_grn=`printf '\033[0;32m'`
+  at_lgn=`printf '\033[1;32m'`
+  at_blu=`printf '\033[1;34m'`
+  at_std=`printf '\033[m'`
+else
+  at_red= at_grn= at_lgn= at_blu= at_std=
+fi
 
 # Help message.
 if $at_help_p; then
-  cat <<_ATEOF
+  cat <<_ATEOF || at_write_fail=1
 Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS]
 
-Run all the tests, or the selected TESTS, and save a detailed log file.
-Upon failure, create debugging scripts.
+Run all the tests, or the selected TESTS, given by numeric ranges, and
+save a detailed log file.  Upon failure, create debugging scripts.
 
-You should not change environment variables unless explicitly passed
-as command line arguments.  Set \`AUTOTEST_PATH' to select the executables
+Do not change environment variables directly.  Instead, set them via
+command line arguments.  Set \`AUTOTEST_PATH' to select the executables
 to exercise.  Each relative directory is expanded as build and source
-directories relatively to the top level of this distribution.  E.g.,
+directories relative to the top level of this distribution.
+E.g., from within the build directory /tmp/foo-1.0, invoking this:
 
   $ $0 AUTOTEST_PATH=bin
 
-possibly amounts into
+is equivalent to the following, assuming the source directory is /src/foo-1.0:
 
-  PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH
+  PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0
 _ATEOF
-cat <<_ATEOF
+cat <<_ATEOF || at_write_fail=1
 
 Operation modes:
   -h, --help     print the help message, then exit
@@ -626,145 +1242,356 @@
   -c, --clean    remove all the files this test suite might create and exit
   -l, --list     describes all the tests, or the selected TESTS
 _ATEOF
-cat <<_ATEOF
+cat <<_ATEOF || at_write_fail=1
 
 Execution tuning:
+  -C, --directory=DIR
+                 change to directory DIR before starting
+      --color[=never|auto|always]
+                 disable colored test results, or enable even without terminal
+  -j, --jobs[=N]
+                 Allow N jobs at once; infinite jobs with no arg (default 1)
   -k, --keywords=KEYWORDS
-	         select the tests matching all the comma separated KEYWORDS
-	         accumulates
+                 select the tests matching all the comma-separated KEYWORDS
+                 multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD
+      --recheck  select all tests that failed or passed unexpectedly last time
   -e, --errexit  abort as soon as a test fails; implies --debug
   -v, --verbose  force more detailed output
-	         default for debugging scripts
-  -d, --debug    inhibit clean up and debug script creation
-	         default for debugging scripts
+                 default for debugging scripts
+  -d, --debug    inhibit clean up and top-level logging
+                 default for debugging scripts
   -x, --trace    enable tests shell tracing
 _ATEOF
-cat <<_ATEOF
+cat <<_ATEOF || at_write_fail=1
+
+Other options:
+_ATEOF
+
+cat <<_ATEOF || at_write_fail=1
+compile C parsers with the C++ compiler
+_ATEOF
+cat <<_ATEOF || at_write_fail=1
 
 Report bugs to <bug-bison@gnu.org>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
 _ATEOF
-  exit 0
+  exit $at_write_fail
 fi
 
 # List of tests.
 if $at_list_p; then
-  cat <<_ATEOF
-GNU Bison 2.3 test suite test groups:
+  cat <<_ATEOF || at_write_fail=1
+GNU Bison 2.7 test suite test groups:
 
- NUM: FILENAME:LINE      TEST-GROUP-NAME
+ NUM: FILE-NAME:LINE     TEST-GROUP-NAME
       KEYWORDS
 
 _ATEOF
-  # "  1 42  45 " => "^(1|42|45);".
-  at_groups_pattern=`echo "$at_groups" | sed 's/^  *//;s/  *$//;s/  */|/g'`
-  echo "$at_help_all" |
-    awk 'BEGIN { FS = ";" }
-	 { if ($1 !~ /^('"$at_groups_pattern"')$/) next }
-	 { if ($1) printf " %3d: %-18s %s\n", $1, $2, $3
-	   if ($4) printf "      %s\n", $4 } '
-  exit 0
+  # Pass an empty line as separator between selected groups and help.
+  $as_echo "$at_groups$as_nl$as_nl$at_help_all" |
+    awk 'NF == 1 && FS != ";" {
+	   selected[$ 1] = 1
+	   next
+	 }
+	 /^$/ { FS = ";" }
+	 NF > 0 {
+	   if (selected[$ 1]) {
+	     printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3
+	     if ($ 4) {
+	       lmax = 79
+	       indent = "     "
+	       line = indent
+	       len = length (line)
+	       n = split ($ 4, a, " ")
+	       for (i = 1; i <= n; i++) {
+		 l = length (a[i]) + 1
+		 if (i > 1 && len + l > lmax) {
+		   print line
+		   line = indent " " a[i]
+		   len = length (line)
+		 } else {
+		   line = line " " a[i]
+		   len += l
+		 }
+	       }
+	       if (n)
+		 print line
+	     }
+	   }
+	 }' || at_write_fail=1
+  exit $at_write_fail
+fi
+if $at_version_p; then
+  $as_echo "$as_me (GNU Bison 2.7)" &&
+  cat <<\_ATEOF || at_write_fail=1
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This test suite is free software; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+_ATEOF
+  exit $at_write_fail
+fi
+
+# Should we print banners?  Yes if more than one test is run.
+case $at_groups in #(
+  *$as_nl* )
+      at_print_banners=: ;; #(
+  * ) at_print_banners=false ;;
+esac
+# Text for banner N, set to a single space once printed.
+# Banner 1. input.at:18
+# Category starts at test group 1.
+at_banner_text_1="Input Processing."
+# Banner 2. named-refs.at:19
+# Category starts at test group 39.
+at_banner_text_2="Named references tests."
+# Banner 3. output.at:18
+# Category starts at test group 51.
+at_banner_text_3="Output file names."
+# Banner 4. skeletons.at:18
+# Category starts at test group 92.
+at_banner_text_4="Skeleton Support."
+# Banner 5. sets.at:59
+# Category starts at test group 98.
+at_banner_text_5="Grammar Sets (Firsts etc.)."
+# Banner 6. reduce.at:18
+# Category starts at test group 102.
+at_banner_text_6="Grammar Reduction."
+# Banner 7. synclines.at:19
+# Category starts at test group 128.
+at_banner_text_7="User Actions."
+# Banner 8. headers.at:19
+# Category starts at test group 138.
+at_banner_text_8="Parser Headers."
+# Banner 9. actions.at:18
+# Category starts at test group 144.
+at_banner_text_9="User Actions."
+# Banner 10. conflicts.at:19
+# Category starts at test group 181.
+at_banner_text_10="Conflicts."
+# Banner 11. calc.at:588
+# Category starts at test group 200.
+at_banner_text_11="Simple LALR(1) Calculator."
+# Banner 12. calc.at:628
+# Category starts at test group 218.
+at_banner_text_12="Simple GLR Calculator."
+# Banner 13. calc.at:667
+# Category starts at test group 235.
+at_banner_text_13="Simple LALR(1) C++ Calculator."
+# Banner 14. calc.at:696
+# Category starts at test group 244.
+at_banner_text_14="Simple GLR C++ Calculator."
+# Banner 15. torture.at:19
+# Category starts at test group 254.
+at_banner_text_15="Torture Tests."
+# Banner 16. existing.at:19
+# Category starts at test group 259.
+at_banner_text_16="Existing Grammars."
+# Banner 17. regression.at:18
+# Category starts at test group 268.
+at_banner_text_17="Regression tests."
+# Banner 18. c++.at:19
+# Category starts at test group 301.
+at_banner_text_18="C++ Features."
+# Banner 19. java.at:18
+# Category starts at test group 307.
+at_banner_text_19="Java Calculator."
+# Banner 20. java.at:382
+# Category starts at test group 315.
+at_banner_text_20="Java Parameters."
+# Banner 21. cxx-type.at:18
+# Category starts at test group 322.
+at_banner_text_21="C++ Type Syntax (GLR)."
+# Banner 22. glr-regression.at:19
+# Category starts at test group 331.
+at_banner_text_22="GLR Regression Tests"
+# Banner 23. push.at:18
+# Category starts at test group 350.
+at_banner_text_23="Push Parsing Tests"
+
+# Take any -C into account.
+if $at_change_dir ; then
+  test x != "x$at_dir" && cd "$at_dir" \
+    || as_fn_error $? "unable to change directory"
+  at_dir=`pwd`
+fi
+
+# Load the config files for any default variable assignments.
+for at_file in atconfig atlocal
+do
+  test -r $at_file || continue
+  . ./$at_file || as_fn_error $? "invalid content: $at_file"
+done
+
+# Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix:
+: "${at_top_build_prefix=$at_top_builddir}"
+
+# Perform any assignments requested during argument parsing.
+eval "$at_debug_args"
+
+# atconfig delivers names relative to the directory the test suite is
+# in, but the groups themselves are run in testsuite-dir/group-dir.
+if test -n "$at_top_srcdir"; then
+  builddir=../..
+  for at_dir_var in srcdir top_srcdir top_build_prefix
+  do
+    eval at_val=\$at_$at_dir_var
+    case $at_val in
+      [\\/$]* | ?:[\\/]* ) at_prefix= ;;
+      *) at_prefix=../../ ;;
+    esac
+    eval "$at_dir_var=\$at_prefix\$at_val"
+  done
+fi
+
+## -------------------- ##
+## Directory structure. ##
+## -------------------- ##
+
+# This is the set of directories and files used by this script
+# (non-literals are capitalized):
+#
+# TESTSUITE         - the testsuite
+# TESTSUITE.log     - summarizes the complete testsuite run
+# TESTSUITE.dir/    - created during a run, remains after -d or failed test
+# + at-groups/      - during a run: status of all groups in run
+# | + NNN/          - during a run: meta-data about test group NNN
+# | | + check-line  - location (source file and line) of current AT_CHECK
+# | | + status      - exit status of current AT_CHECK
+# | | + stdout      - stdout of current AT_CHECK
+# | | + stder1      - stderr, including trace
+# | | + stderr      - stderr, with trace filtered out
+# | | + test-source - portion of testsuite that defines group
+# | | + times       - timestamps for computing duration
+# | | + pass        - created if group passed
+# | | + xpass       - created if group xpassed
+# | | + fail        - created if group failed
+# | | + xfail       - created if group xfailed
+# | | + skip        - created if group skipped
+# + at-stop         - during a run: end the run if this file exists
+# + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction
+# + 0..NNN/         - created for each group NNN, remains after -d or failed test
+# | + TESTSUITE.log - summarizes the group results
+# | + ...           - files created during the group
+
+# The directory the whole suite works in.
+# Should be absolute to let the user `cd' at will.
+at_suite_dir=$at_dir/$as_me.dir
+# The file containing the suite ($at_dir might have changed since earlier).
+at_suite_log=$at_dir/$as_me.log
+# The directory containing helper files per test group.
+at_helper_dir=$at_suite_dir/at-groups
+# Stop file: if it exists, do not start new jobs.
+at_stop_file=$at_suite_dir/at-stop
+# The fifo used for the job dispatcher.
+at_job_fifo=$at_suite_dir/at-job-fifo
+
+if $at_clean; then
+  test -d "$at_suite_dir" &&
+    find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+  rm -f -r "$at_suite_dir" "$at_suite_log"
+  exit $?
 fi
 
 # Don't take risks: use only absolute directories in PATH.
 #
-# For stand-alone test suites, AUTOTEST_PATH is relative to `.'.
+# For stand-alone test suites (ie. atconfig was not found),
+# AUTOTEST_PATH is relative to `.'.
 #
 # For embedded test suites, AUTOTEST_PATH is relative to the top level
 # of the package.  Then expand it into build/src parts, since users
 # may create executables in both places.
-#
-# There might be directories that don't exist, but don't redirect
-# builtins' (eg., cd) stderr directly: Ultrix's sh hates that.
-AUTOTEST_PATH=`echo $AUTOTEST_PATH | tr ':' $PATH_SEPARATOR`
+AUTOTEST_PATH=`$as_echo "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"`
 at_path=
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $AUTOTEST_PATH $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  case $as_dir in
+    test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR
+case $as_dir in
   [\\/]* | ?:[\\/]* )
-    at_path=$at_path$PATH_SEPARATOR$as_dir
+    as_fn_append at_path "$as_dir"
     ;;
   * )
-    if test -z "$at_top_builddir"; then
+    if test -z "$at_top_build_prefix"; then
       # Stand-alone test suite.
-      at_path=$at_path$PATH_SEPARATOR$as_dir
+      as_fn_append at_path "$as_dir"
     else
       # Embedded test suite.
-      at_path=$at_path$PATH_SEPARATOR$at_top_builddir/$as_dir
-      at_path=$at_path$PATH_SEPARATOR$at_top_srcdir/$as_dir
+      as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR"
+      as_fn_append at_path "$at_top_srcdir/$as_dir"
     fi
     ;;
 esac
-done
+  done
+IFS=$as_save_IFS
 
 
 # Now build and simplify PATH.
-PATH=
+#
+# There might be directories that don't exist, but don't redirect
+# builtins' (eg., cd) stderr directly: Ultrix's sh hates that.
+at_new_path=
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $at_path
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  as_dir=`(cd "$as_dir" && pwd) 2>/dev/null`
-test -d "$as_dir" || continue
-case $PATH in
-	          $as_dir                 | \
-	          $as_dir$PATH_SEPARATOR* | \
-  *$PATH_SEPARATOR$as_dir                 | \
-  *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR* ) ;;
-
-  '') PATH=$as_dir ;;
-   *) PATH=$PATH$PATH_SEPARATOR$as_dir ;;
+    test -d "$as_dir" || continue
+case $as_dir in
+  [\\/]* | ?:[\\/]* ) ;;
+  * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;;
 esac
-done
+case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in
+  *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;;
+  $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;;
+  *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;;
+esac
+  done
+IFS=$as_save_IFS
 
+PATH=$at_new_path
 export PATH
 
 # Setting up the FDs.
-# 5 is the log file.  Not to be overwritten if `-d'.
 
-$at_debug_p && at_suite_log=/dev/null
-exec 5>$at_suite_log
+
+
+# 5 is the log file.  Not to be overwritten if `-d'.
+if $at_debug_p; then
+  at_suite_log=/dev/null
+else
+  : >"$at_suite_log"
+fi
+exec 5>>"$at_suite_log"
 
 # Banners and logs.
-cat <<\_ASBOX
-## ------------------------- ##
-## GNU Bison 2.3 test suite. ##
-## ------------------------- ##
-_ASBOX
+$as_echo "## ------------------------- ##
+## GNU Bison 2.7 test suite. ##
+## ------------------------- ##"
 {
-  cat <<\_ASBOX
-## ------------------------- ##
-## GNU Bison 2.3 test suite. ##
-## ------------------------- ##
-_ASBOX
+  $as_echo "## ------------------------- ##
+## GNU Bison 2.7 test suite. ##
+## ------------------------- ##"
   echo
 
-  echo "$as_me: command line was:"
-  echo "  $ $0 $at_cli_args"
+  $as_echo "$as_me: command line was:"
+  $as_echo "  \$ $0 $at_cli_args"
   echo
 
-  # Try to find a few ChangeLogs in case it might help determining the
-  # exact version.  Use the relative dir: if the top dir is a symlink,
-  # find will not follow it (and options to follow the links are not
-  # portable), which would result in no output here.
-  if test -n "$at_top_srcdir"; then
-    cat <<\_ASBOX
-## ----------- ##
-## ChangeLogs. ##
-## ----------- ##
-_ASBOX
+  # If ChangeLog exists, list a few lines in case it might help determining
+  # the exact version.
+  if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then
+    $as_echo "## ---------- ##
+## ChangeLog. ##
+## ---------- ##"
     echo
-    for at_file in `find "$at_top_srcdir" -name ChangeLog -print`
-    do
-      echo "$as_me: $at_file:"
-      sed 's/^/| /;10q' $at_file
-      echo
-    done
+    sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog"
+    echo
+  fi
 
-    {
+  {
 cat <<_ASUNAME
 ## --------- ##
 ## Platform. ##
@@ -782,7 +1609,7 @@
 /bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
 /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
 /bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
 /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
 /bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
@@ -794,27 +1621,198 @@
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
 
 }
-    echo
-  fi
+  echo
 
   # Contents of the config files.
   for at_file in atconfig atlocal
   do
     test -r $at_file || continue
-    echo "$as_me: $at_file:"
+    $as_echo "$as_me: $at_file:"
     sed 's/^/| /' $at_file
     echo
   done
+} >&5
 
-  cat <<\_ASBOX
-## ---------------- ##
+at_save_special_files ()
+{
+  for at_save_file in stderr experr expout
+  do
+    test ! -f at-bison-check-$at_save_file.bak ||
+      as_fn_error 1 "fatal error: back-up on top of a back-up"
+    test ! -f $at_save_file || mv $at_save_file at-bison-check-$at_save_file.bak
+  done
+}
+
+at_restore_special_files ()
+{
+  for at_save_file in stderr experr expout
+  do
+    test ! -f at-bison-check-$at_save_file.bak ||
+      mv at-bison-check-$at_save_file.bak $at_save_file
+  done
+}
+
+
+## ------------------------- ##
+## Autotest shell functions. ##
+## ------------------------- ##
+
+# at_fn_banner NUMBER
+# -------------------
+# Output banner NUMBER, provided the testsuite is running multiple groups and
+# this particular banner has not yet been printed.
+at_fn_banner ()
+{
+  $at_print_banners || return 0
+  eval at_banner_text=\$at_banner_text_$1
+  test "x$at_banner_text" = "x " && return 0
+  eval "at_banner_text_$1=\" \""
+  if test -z "$at_banner_text"; then
+    $at_first || echo
+  else
+    $as_echo "$as_nl$at_banner_text$as_nl"
+  fi
+} # at_fn_banner
+
+# at_fn_check_prepare_notrace REASON LINE
+# ---------------------------------------
+# Perform AT_CHECK preparations for the command at LINE for an untraceable
+# command; REASON is the reason for disabling tracing.
+at_fn_check_prepare_notrace ()
+{
+  $at_trace_echo "Not enabling shell tracing (command contains $1)"
+  $as_echo "$2" >"$at_check_line_file"
+  at_check_trace=: at_check_filter=:
+  : >"$at_stdout"; : >"$at_stderr"
+}
+
+# at_fn_check_prepare_trace LINE
+# ------------------------------
+# Perform AT_CHECK preparations for the command at LINE for a traceable
+# command.
+at_fn_check_prepare_trace ()
+{
+  $as_echo "$1" >"$at_check_line_file"
+  at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace
+  : >"$at_stdout"; : >"$at_stderr"
+}
+
+# at_fn_check_prepare_dynamic COMMAND LINE
+# ----------------------------------------
+# Decide if COMMAND at LINE is traceable at runtime, and call the appropriate
+# preparation function.
+at_fn_check_prepare_dynamic ()
+{
+  case $1 in
+    *$as_nl*)
+      at_fn_check_prepare_notrace 'an embedded newline' "$2" ;;
+    *)
+      at_fn_check_prepare_trace "$2" ;;
+  esac
+}
+
+# at_fn_filter_trace
+# ------------------
+# Remove the lines in the file "$at_stderr" generated by "set -x" and print
+# them to stderr.
+at_fn_filter_trace ()
+{
+  mv "$at_stderr" "$at_stder1"
+  grep '^ *+' "$at_stder1" >&2
+  grep -v '^ *+' "$at_stder1" >"$at_stderr"
+}
+
+# at_fn_log_failure FILE-LIST
+# ---------------------------
+# Copy the files in the list on stdout with a "> " prefix, and exit the shell
+# with a failure exit code.
+at_fn_log_failure ()
+{
+  for file
+    do $as_echo "$file:"; sed 's/^/> /' "$file"; done
+  echo 1 > "$at_status_file"
+  exit 1
+}
+
+# at_fn_check_skip EXIT-CODE LINE
+# -------------------------------
+# Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit
+# the test group subshell with that same exit code. Use LINE in any report
+# about test failure.
+at_fn_check_skip ()
+{
+  case $1 in
+    99) echo 99 > "$at_status_file"; at_failed=:
+	$as_echo "$2: hard failure"; exit 99;;
+    77) echo 77 > "$at_status_file"; exit 77;;
+  esac
+}
+
+# at_fn_check_status EXPECTED EXIT-CODE LINE
+# ------------------------------------------
+# Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing.
+# Otherwise, if it is 77 or 99, exit the test group subshell with that same
+# exit code; if it is anything else print an error message referring to LINE,
+# and fail the test.
+at_fn_check_status ()
+{
+  case $2 in
+    $1 ) ;;
+    77) echo 77 > "$at_status_file"; exit 77;;
+    99) echo 99 > "$at_status_file"; at_failed=:
+	$as_echo "$3: hard failure"; exit 99;;
+    *) $as_echo "$3: exit code was $2, expected $1"
+      at_failed=:;;
+  esac
+}
+
+# at_fn_diff_devnull FILE
+# -----------------------
+# Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff
+# invocations.
+at_fn_diff_devnull ()
+{
+  test -s "$1" || return 0
+  $at_diff "$at_devnull" "$1"
+}
+
+# at_fn_test NUMBER
+# -----------------
+# Parse out test NUMBER from the tail of this file.
+at_fn_test ()
+{
+  eval at_sed=\$at_sed$1
+  sed "$at_sed" "$at_myself" > "$at_test_source"
+}
+
+# at_fn_create_debugging_script
+# -----------------------------
+# Create the debugging script $at_group_dir/run which will reproduce the
+# current test group.
+at_fn_create_debugging_script ()
+{
+  {
+    echo "#! /bin/sh" &&
+    echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' &&
+    $as_echo "cd '$at_dir'" &&
+    $as_echo "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" &&
+    echo 'exit 1'
+  } >"$at_group_dir/run" &&
+  chmod +x "$at_group_dir/run"
+}
+
+## -------------------------------- ##
+## End of autotest shell functions. ##
+## -------------------------------- ##
+{
+  $as_echo "## ---------------- ##
 ## Tested programs. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
   echo
 } >&5
 
@@ -822,384 +1820,3324 @@
 for at_program in : $at_tested
 do
   test "$at_program" = : && continue
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  case $at_program in
+    [\\/]* | ?:[\\/]* ) $at_program_=$at_program ;;
+    * )
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -f $as_dir/$at_program && break
-done
+    test -f "$as_dir/$at_program" && break
+  done
+IFS=$as_save_IFS
 
-  if test -f $as_dir/$at_program; then
+    at_program_=$as_dir/$at_program ;;
+  esac
+  if test -f "$at_program_"; then
     {
-      echo "local.at:216: $as_dir/$at_program --version"
-      $as_dir/$at_program --version
+      $as_echo "$at_srcdir/local.at:913: $at_program_ --version"
+      "$at_program_" --version </dev/null
       echo
     } >&5 2>&1
   else
-    { { echo "$as_me:$LINENO: error: cannot find $at_program" >&5
-echo "$as_me: error: cannot find $at_program" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "cannot find $at_program" "$LINENO" 5
   fi
 done
 
 {
-  cat <<\_ASBOX
-## ------------------ ##
+  $as_echo "## ------------------ ##
 ## Running the tests. ##
-## ------------------ ##
-_ASBOX
+## ------------------ ##"
 } >&5
 
 at_start_date=`date`
-at_start_time=`(date +%s) 2>/dev/null`
-echo "$as_me: starting at: $at_start_date" >&5
-at_xpass_list=
-at_xfail_list=
-at_pass_list=
-at_fail_list=
-at_skip_list=
-at_group_count=0
+at_start_time=`date +%s 2>/dev/null`
+$as_echo "$as_me: starting at: $at_start_date" >&5
 
 # Create the master directory if it doesn't already exist.
-test -d $at_suite_dir ||
-  mkdir $at_suite_dir ||
-  { { echo "$as_me:$LINENO: error: cannot create $at_suite_dir" >&5
-echo "$as_me: error: cannot create $at_suite_dir" >&2;}
-   { (exit 1); exit 1; }; }
+as_dir="$at_suite_dir"; as_fn_mkdir_p ||
+  as_fn_error $? "cannot create \`$at_suite_dir'" "$LINENO" 5
 
 # Can we diff with `/dev/null'?  DU 5.0 refuses.
 if diff /dev/null /dev/null >/dev/null 2>&1; then
   at_devnull=/dev/null
 else
   at_devnull=$at_suite_dir/devnull
-  cp /dev/null $at_devnull
+  >"$at_devnull"
 fi
 
 # Use `diff -u' when possible.
-if diff -u $at_devnull $at_devnull >/dev/null 2>&1; then
+if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff"
+then
   at_diff='diff -u'
 else
   at_diff=diff
 fi
 
+# Get the last needed group.
+for at_group in : $at_groups; do :; done
 
-for at_group in $at_groups
-do
+# Extract the start and end lines of each test group at the tail
+# of this file
+awk '
+BEGIN { FS="" }
+/^#AT_START_/ {
+  start = NR
+}
+/^#AT_STOP_/ {
+  test = substr ($ 0, 10)
+  print "at_sed" test "=\"1," start "d;" (NR-1) "q\""
+  if (test == "'"$at_group"'") exit
+}' "$at_myself" > "$at_suite_dir/at-source-lines" &&
+. "$at_suite_dir/at-source-lines" ||
+  as_fn_error $? "cannot create test line number cache" "$LINENO" 5
+rm -f "$at_suite_dir/at-source-lines"
+
+# Set number of jobs for `-j'; avoid more jobs than test groups.
+set X $at_groups; shift; at_max_jobs=$#
+if test $at_max_jobs -eq 0; then
+  at_jobs=1
+fi
+if test $at_jobs -ne 1 &&
+   { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then
+  at_jobs=$at_max_jobs
+fi
+
+# If parallel mode, don't output banners, don't split summary lines.
+if test $at_jobs -ne 1; then
+  at_print_banners=false
+  at_quiet=:
+fi
+
+# Set up helper dirs.
+rm -rf "$at_helper_dir" &&
+mkdir "$at_helper_dir" &&
+cd "$at_helper_dir" &&
+{ test -z "$at_groups" || mkdir $at_groups; } ||
+as_fn_error $? "testsuite directory setup failed" "$LINENO" 5
+
+# Functions for running a test group.  We leave the actual
+# test group execution outside of a shell function in order
+# to avoid hitting zsh 4.x exit status bugs.
+
+# at_fn_group_prepare
+# -------------------
+# Prepare for running a test group.
+at_fn_group_prepare ()
+{
+  # The directory for additional per-group helper files.
+  at_job_dir=$at_helper_dir/$at_group
+  # The file containing the location of the last AT_CHECK.
+  at_check_line_file=$at_job_dir/check-line
+  # The file containing the exit status of the last command.
+  at_status_file=$at_job_dir/status
+  # The files containing the output of the tested commands.
+  at_stdout=$at_job_dir/stdout
+  at_stder1=$at_job_dir/stder1
+  at_stderr=$at_job_dir/stderr
+  # The file containing the code for a test group.
+  at_test_source=$at_job_dir/test-source
+  # The file containing dates.
+  at_times_file=$at_job_dir/times
+
   # Be sure to come back to the top test directory.
-  cd $at_suite_dir
-
-  case $at_group in
-    banner-*)
-      at_group_log=$at_suite_log
-      ;;
-
-    *)
-      # Skip tests we already run (using --keywords makes it easy to get
-      # duplication).
-      case " $at_pass_test $at_skip_test $at_fail_test " in
-	*" $at_group "* ) continue;;
-      esac
-
-      # Normalize the test group number.
-      at_group_normalized=`expr "00000$at_group" : ".*\($at_format\)"`
-
-      # Create a fresh directory for the next test group, and enter.
-      at_group_dir=$at_suite_dir/$at_group_normalized
-      at_group_log=$at_group_dir/$as_me.log
-      rm -rf $at_group_dir
-      mkdir $at_group_dir ||
-	{ { echo "$as_me:$LINENO: error: cannot create $at_group_dir" >&5
-echo "$as_me: error: cannot create $at_group_dir" >&2;}
-   { (exit 1); exit 1; }; }
-      cd $at_group_dir
-      ;;
-  esac
-
-  echo 0 > $at_status_file
+  cd "$at_suite_dir"
 
   # Clearly separate the test groups when verbose.
-  test $at_group_count != 0 && $at_verbose
+  $at_first || $at_verbose echo
+
+  at_group_normalized=$at_group
+
+  eval 'while :; do
+    case $at_group_normalized in #(
+    '"$at_format"'*) break;;
+    esac
+    at_group_normalized=0$at_group_normalized
+  done'
+
+
+  # Create a fresh directory for the next test group, and enter.
+  # If one already exists, the user may have invoked ./run from
+  # within that directory; we remove the contents, but not the
+  # directory itself, so that we aren't pulling the rug out from
+  # under the shell's notion of the current directory.
+  at_group_dir=$at_suite_dir/$at_group_normalized
+  at_group_log=$at_group_dir/$as_me.log
+  if test -d "$at_group_dir"; then
+  find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \;
+  rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??*
+fi ||
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5
+$as_echo "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned" >&2;}
+  # Be tolerant if the above `rm' was not able to remove the directory.
+  as_dir="$at_group_dir"; as_fn_mkdir_p
+
+  echo 0 > "$at_status_file"
 
   # In verbose mode, append to the log file *and* show on
-  # the standard output; in quiet mode only write to the log
-  if test $at_verbose = echo; then
-    at_tee_pipe="tee -a $at_group_log"
+  # the standard output; in quiet mode only write to the log.
+  if test -z "$at_verbose"; then
+    at_tee_pipe='tee -a "$at_group_log"'
   else
-    at_tee_pipe="cat >> $at_group_log"
+    at_tee_pipe='cat >> "$at_group_log"'
   fi
+}
 
-  case $at_group in
+# at_fn_group_banner ORDINAL LINE DESC PAD [BANNER]
+# -------------------------------------------------
+# Declare the test group ORDINAL, located at LINE with group description DESC,
+# and residing under BANNER. Use PAD to align the status column.
+at_fn_group_banner ()
+{
+  at_setup_line="$2"
+  test -n "$5" && at_fn_banner $5
+  at_desc="$3"
+  case $1 in
+    [0-9])      at_desc_line="  $1: ";;
+    [0-9][0-9]) at_desc_line=" $1: " ;;
+    *)          at_desc_line="$1: "  ;;
+  esac
+  as_fn_append at_desc_line "$3$4"
+  $at_quiet $as_echo_n "$at_desc_line"
+  echo "#                             -*- compilation -*-" >> "$at_group_log"
+}
 
-  banner-1 ) # Banner 1. input.at:19
-    cat <<\_ATEOF
+# at_fn_group_postprocess
+# -----------------------
+# Perform cleanup after running a test group.
+at_fn_group_postprocess ()
+{
+  # Be sure to come back to the suite directory, in particular
+  # since below we might `rm' the group directory we are in currently.
+  cd "$at_suite_dir"
 
-Input Processing.
-
+  if test ! -f "$at_check_line_file"; then
+    sed "s/^ */$as_me: WARNING: /" <<_ATEOF
+      A failure happened in a test group before any test could be
+      run. This means that test suite is improperly designed.  Please
+      report this failure to <bug-bison@gnu.org>.
 _ATEOF
-    ;;
+    $as_echo "$at_setup_line" >"$at_check_line_file"
+    at_status=99
+  fi
+  $at_verbose $as_echo_n "$at_group. $at_setup_line: "
+  $as_echo_n "$at_group. $at_setup_line: " >> "$at_group_log"
+  case $at_xfail:$at_status in
+    yes:0)
+	at_msg="UNEXPECTED PASS"
+	at_res=xpass
+	at_errexit=$at_errexit_p
+	at_color=$at_red
+	;;
+    no:0)
+	at_msg="ok"
+	at_res=pass
+	at_errexit=false
+	at_color=$at_grn
+	;;
+    *:77)
+	at_msg='skipped ('`cat "$at_check_line_file"`')'
+	at_res=skip
+	at_errexit=false
+	at_color=$at_blu
+	;;
+    no:* | *:99)
+	at_msg='FAILED ('`cat "$at_check_line_file"`')'
+	at_res=fail
+	at_errexit=$at_errexit_p
+	at_color=$at_red
+	;;
+    yes:*)
+	at_msg='expected failure ('`cat "$at_check_line_file"`')'
+	at_res=xfail
+	at_errexit=false
+	at_color=$at_lgn
+	;;
+  esac
+  echo "$at_res" > "$at_job_dir/$at_res"
+  # In parallel mode, output the summary line only afterwards.
+  if test $at_jobs -ne 1 && test -n "$at_verbose"; then
+    $as_echo "$at_desc_line $at_color$at_msg$at_std"
+  else
+    # Make sure there is a separator even with long titles.
+    $as_echo " $at_color$at_msg$at_std"
+  fi
+  at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
+  case $at_status in
+    0|77)
+      # $at_times_file is only available if the group succeeded.
+      # We're not including the group log, so the success message
+      # is written in the global log separately.  But we also
+      # write to the group log in case they're using -d.
+      if test -f "$at_times_file"; then
+	at_log_msg="$at_log_msg     ("`sed 1d "$at_times_file"`')'
+	rm -f "$at_times_file"
+      fi
+      $as_echo "$at_log_msg" >> "$at_group_log"
+      $as_echo "$at_log_msg" >&5
 
-  1 ) # 1. input.at:28: Invalid dollar-n
-    at_setup_line='input.at:28'
-    at_desc='Invalid dollar-n'
-    $at_quiet $ECHO_N "  1: Invalid dollar-n                             $ECHO_C"
-    at_xfail=no
+      # Cleanup the group directory, unless the user wants the files
+      # or the success was unexpected.
+      if $at_debug_p || test $at_res = xpass; then
+	at_fn_create_debugging_script
+	if test $at_res = xpass && $at_errexit; then
+	  echo stop > "$at_stop_file"
+	fi
+      else
+	if test -d "$at_group_dir"; then
+	  find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+	  rm -fr "$at_group_dir"
+	fi
+	rm -f "$at_test_source"
+      fi
+      ;;
+    *)
+      # Upon failure, include the log into the testsuite's global
+      # log.  The failure message is written in the group log.  It
+      # is later included in the global log.
+      $as_echo "$at_log_msg" >> "$at_group_log"
+
+      # Upon failure, keep the group directory for autopsy, and create
+      # the debugging script.  With -e, do not start any further tests.
+      at_fn_create_debugging_script
+      if $at_errexit; then
+	echo stop > "$at_stop_file"
+      fi
+      ;;
+  esac
+}
+
+
+## ------------ ##
+## Driver loop. ##
+## ------------ ##
+
+
+if (set -m && set +m && set +b) >/dev/null 2>&1; then
+  set +b
+  at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=-
+else
+  at_job_control_on=: at_job_control_off=: at_job_group=
+fi
+
+for at_signal in 1 2 15; do
+  trap 'set +x; set +e
+	$at_job_control_off
+	at_signal='"$at_signal"'
+	echo stop > "$at_stop_file"
+	trap "" $at_signal
+	at_pgids=
+	for at_pgid in `jobs -p 2>/dev/null`; do
+	  at_pgids="$at_pgids $at_job_group$at_pgid"
+	done
+	test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null
+	wait
+	if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then
+	  echo >&2
+	fi
+	at_signame=`kill -l $at_signal 2>&1 || echo $at_signal`
+	set x $at_signame
+	test 0 -gt 2 && at_signame=$at_signal
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5
+$as_echo "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;}
+	as_fn_arith 128 + $at_signal && exit_status=$as_val
+	as_fn_exit $exit_status' $at_signal
+done
+
+rm -f "$at_stop_file"
+at_first=:
+
+if test $at_jobs -ne 1 &&
+     rm -f "$at_job_fifo" &&
+     test -n "$at_job_group" &&
+     ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null
+then
+  # FIFO job dispatcher.
+
+  trap 'at_pids=
+	for at_pid in `jobs -p`; do
+	  at_pids="$at_pids $at_job_group$at_pid"
+	done
+	if test -n "$at_pids"; then
+	  at_sig=TSTP
+	  test "${TMOUT+set}" = set && at_sig=STOP
+	  kill -$at_sig $at_pids 2>/dev/null
+	fi
+	kill -STOP $$
+	test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP
+
+  echo
+  # Turn jobs into a list of numbers, starting from 1.
+  at_joblist=`$as_echo "$at_groups" | sed -n 1,${at_jobs}p`
+
+  set X $at_joblist
+  shift
+  for at_group in $at_groups; do
+    $at_job_control_on 2>/dev/null
     (
-      echo "1. input.at:28: testing ..."
-      $at_traceon
+      # Start one test group.
+      $at_job_control_off
+      if $at_first; then
+	exec 7>"$at_job_fifo"
+      else
+	exec 6<&-
+      fi
+      trap 'set +x; set +e
+	    trap "" PIPE
+	    echo stop > "$at_stop_file"
+	    echo >&7
+	    as_fn_exit 141' PIPE
+      at_fn_group_prepare
+      if cd "$at_group_dir" &&
+	 at_fn_test $at_group &&
+	 . "$at_test_source"
+      then :; else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
+$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
+	at_failed=:
+      fi
+      at_fn_group_postprocess
+      echo >&7
+    ) &
+    $at_job_control_off
+    if $at_first; then
+      at_first=false
+      exec 6<"$at_job_fifo" 7>"$at_job_fifo"
+    fi
+    shift # Consume one token.
+    if test $# -gt 0; then :; else
+      read at_token <&6 || break
+      set x $*
+    fi
+    test -f "$at_stop_file" && break
+  done
+  exec 7>&-
+  # Read back the remaining ($at_jobs - 1) tokens.
+  set X $at_joblist
+  shift
+  if test $# -gt 0; then
+    shift
+    for at_job
+    do
+      read at_token
+    done <&6
+  fi
+  exec 6<&-
+  wait
+else
+  # Run serially, avoid forks and other potential surprises.
+  for at_group in $at_groups; do
+    at_fn_group_prepare
+    if cd "$at_group_dir" &&
+       at_fn_test $at_group &&
+       . "$at_test_source"; then :; else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
+$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
+      at_failed=:
+    fi
+    at_fn_group_postprocess
+    test -f "$at_stop_file" && break
+    at_first=false
+  done
+fi
+
+# Wrap up the test suite with summary statistics.
+cd "$at_helper_dir"
+
+# Use ?..???? when the list must remain sorted, the faster * otherwise.
+at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'`
+at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'`
+at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'`
+at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do
+		 echo $f; done | sed '/?/d; s,/xpass,,'`
+at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do
+		echo $f; done | sed '/?/d; s,/fail,,'`
+
+set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list
+shift; at_group_count=$#
+set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$*
+set X $at_xfail_list; shift; at_xfail_count=$#
+set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$*
+set X $at_skip_list; shift; at_skip_count=$#
+
+as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val
+as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val
+as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val
+
+# Back to the top directory.
+cd "$at_dir"
+rm -rf "$at_helper_dir"
+
+# Compute the duration of the suite.
+at_stop_date=`date`
+at_stop_time=`date +%s 2>/dev/null`
+$as_echo "$as_me: ending at: $at_stop_date" >&5
+case $at_start_time,$at_stop_time in
+  [0-9]*,[0-9]*)
+    as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val
+    as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val
+    as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val
+    as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val
+    as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val
+    at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
+    $as_echo "$as_me: test suite duration: $at_duration" >&5
+    ;;
+esac
+
+echo
+$as_echo "## ------------- ##
+## Test results. ##
+## ------------- ##"
+echo
+{
+  echo
+  $as_echo "## ------------- ##
+## Test results. ##
+## ------------- ##"
+  echo
+} >&5
+
+if test $at_run_count = 1; then
+  at_result="1 test"
+  at_were=was
+else
+  at_result="$at_run_count tests"
+  at_were=were
+fi
+if $at_errexit_p && test $at_unexpected_count != 0; then
+  if test $at_xpass_count = 1; then
+    at_result="$at_result $at_were run, one passed"
+  else
+    at_result="$at_result $at_were run, one failed"
+  fi
+  at_result="$at_result unexpectedly and inhibited subsequent tests."
+  at_color=$at_red
+else
+  # Don't you just love exponential explosion of the number of cases?
+  at_color=$at_red
+  case $at_xpass_count:$at_fail_count:$at_xfail_count in
+    # So far, so good.
+    0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;;
+    0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;;
+
+    # Some unexpected failures
+    0:*:0) at_result="$at_result $at_were run,
+$at_fail_count failed unexpectedly." ;;
+
+    # Some failures, both expected and unexpected
+    0:*:1) at_result="$at_result $at_were run,
+$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
+    0:*:*) at_result="$at_result $at_were run,
+$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+
+    # No unexpected failures, but some xpasses
+    *:0:*) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly." ;;
+
+    # No expected failures, but failures and xpasses
+    *:1:0) at_result="$at_result $at_were run,
+$at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;;
+    *:*:0) at_result="$at_result $at_were run,
+$at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;;
+
+    # All of them.
+    *:*:1) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly,
+$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
+    *:*:*) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly,
+$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+  esac
+
+  if test $at_skip_count = 0 && test $at_run_count -gt 1; then
+    at_result="All $at_result"
+  fi
+fi
+
+# Now put skips in the mix.
+case $at_skip_count in
+  0) ;;
+  1) at_result="$at_result
+1 test was skipped." ;;
+  *) at_result="$at_result
+$at_skip_count tests were skipped." ;;
+esac
+
+if test $at_unexpected_count = 0; then
+  echo "$at_color$at_result$at_std"
+  echo "$at_result" >&5
+else
+  echo "${at_color}ERROR: $at_result$at_std" >&2
+  echo "ERROR: $at_result" >&5
+  {
+    echo
+    $as_echo "## ------------------------ ##
+## Summary of the failures. ##
+## ------------------------ ##"
+
+    # Summary of failed and skipped tests.
+    if test $at_fail_count != 0; then
+      echo "Failed tests:"
+      $SHELL "$at_myself" $at_fail_list --list
+      echo
+    fi
+    if test $at_skip_count != 0; then
+      echo "Skipped tests:"
+      $SHELL "$at_myself" $at_skip_list --list
+      echo
+    fi
+    if test $at_xpass_count != 0; then
+      echo "Unexpected passes:"
+      $SHELL "$at_myself" $at_xpass_list --list
+      echo
+    fi
+    if test $at_fail_count != 0; then
+      $as_echo "## ---------------------- ##
+## Detailed failed tests. ##
+## ---------------------- ##"
+      echo
+      for at_group in $at_fail_list
+      do
+	at_group_normalized=$at_group
+
+  eval 'while :; do
+    case $at_group_normalized in #(
+    '"$at_format"'*) break;;
+    esac
+    at_group_normalized=0$at_group_normalized
+  done'
+
+	cat "$at_suite_dir/$at_group_normalized/$as_me.log"
+	echo
+      done
+      echo
+    fi
+    if test -n "$at_top_srcdir"; then
+      sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## ${at_top_build_prefix}config.log ##
+_ASBOX
+      sed 's/^/| /' ${at_top_build_prefix}config.log
+      echo
+    fi
+  } >&5
+
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## $as_me.log was created. ##
+_ASBOX
+
+  echo
+  if $at_debug_p; then
+    at_msg='per-test log files'
+  else
+    at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'"
+  fi
+  $as_echo "Please send $at_msg and all information you think might help:
+
+   To: <bug-bison@gnu.org>
+   Subject: [GNU Bison 2.7] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+
+You may investigate any problem if you feel able to do so, in which
+case the test suite provides a good starting point.  Its output may
+be found below \`${at_testdir+${at_testdir}/}$as_me.dir'.
+"
+  exit 1
+fi
+
+exit 0
+
+## ------------- ##
+## Actual tests. ##
+## ------------- ##
+#AT_START_1
+at_fn_group_banner 1 'input.at:27' \
+  "Invalid inputs" "                                 " 1
+at_xfail=no
+(
+  $as_echo "1. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+\000\001\002\377?
+%%
+?
+default: 'a' }
+%&
+%a-does-not-exist
+%-
+%{
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/input.at:39: \$PERL -pi -e 's/\\\\(\\d{3})/chr(oct(\$1))/ge' input.y || exit 77"
+at_fn_check_prepare_dynamic "$PERL -pi -e 's/\\\\(\\d{3})/chr(oct($1))/ge' input.y || exit 77" "input.at:39"
+( $at_check_trace; $PERL -pi -e 's/\\(\d{3})/chr(oct($1))/ge' input.y || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:39"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:41: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:41"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.1-2: error: invalid characters: '\\0\\001\\002\\377?'
+input.y:3.1: error: invalid character: '?'
+input.y:4.14: error: invalid character: '}'
+input.y:5.1: error: invalid character: '%'
+input.y:5.2: error: invalid character: '&'
+input.y:6.1-17: error: invalid directive: '%a-does-not-exist'
+input.y:7.1: error: invalid character: '%'
+input.y:7.2: error: invalid character: '-'
+input.y:8.1-9.0: error: missing '%}' at end of file
+input.y:8.1-9.0: error: syntax error, unexpected %{...%}
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:41"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_1
+#AT_START_2
+at_fn_group_banner 2 'input.at:57' \
+  "Invalid inputs with {}" "                         " 1
+at_xfail=no
+(
+  $as_echo "2. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# We used to SEGV here.  See
+# http://lists.gnu.org/archive/html/bug-bison/2005-07/msg00053.html
+
+cat >input.y <<'_ATEOF'
+
+%destructor
+%initial-action
+%lex-param
+%parse-param
+%printer
+%union
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:72: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:72"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.1-15: error: syntax error, unexpected %initial-action, expecting {...}
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_2
+#AT_START_3
+at_fn_group_banner 3 'input.at:84' \
+  "Invalid \$n and @n" "                              " 1
+at_xfail=no
+(
+  $as_echo "3. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
 %%
 exp: { $$ = $1 ; };
-_ATEOF
-
-
-$at_traceoff
-echo "input.at:37: bison input.y"
-echo input.at:37 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:2.13-14: integer out of range: \`\$1'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "input.at:37: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  2 ) # 2. input.at:46: Invalid @n
-    at_setup_line='input.at:46'
-    at_desc='Invalid @n'
-    $at_quiet $ECHO_N "  2: Invalid @n                                   $ECHO_C"
-    at_xfail=no
-    (
-      echo "2. input.at:46: testing ..."
-      $at_traceon
-
-
-cat >input.y <<'_ATEOF'
-%%
 exp: { @$ = @1 ; };
 _ATEOF
 
 
-$at_traceoff
-echo "input.at:55: bison input.y"
-echo input.at:55 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:2.13-14: integer out of range: \`@1'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "input.at:55: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/input.at:92: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:92"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:2.13-14: error: integer out of range: '\$1'
+input.y:3.13-14: error: integer out of range: '@1'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:92"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  3 ) # 3. input.at:64: Type Clashes
-    at_setup_line='input.at:64'
-    at_desc='Type Clashes'
-    $at_quiet $ECHO_N "  3: Type Clashes                                 $ECHO_C"
-    at_xfail=no
-    (
-      echo "3. input.at:64: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_3
+#AT_START_4
+at_fn_group_banner 4 'input.at:104' \
+  "Type Clashes" "                                   " 1
+at_xfail=no
+(
+  $as_echo "4. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
+%union { int bar; }
 %token foo
 %type <bar> exp
 %%
-exp: foo {} foo
+exp: foo { $$; } foo { $2; } foo
    | foo
    | /* Empty. */
    ;
 _ATEOF
 
 
-$at_traceoff
-echo "input.at:80: bison input.y"
-echo input.at:80 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:4.6-15: warning: type clash on default action: <bar> != <>
-input.y:5.6-8: warning: type clash on default action: <bar> != <>
-input.y:6.5: warning: empty rule for typed nonterminal, and no action
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:80: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/input.at:117: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:117"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:5.12-13: error: \$\$ for the midrule at \$2 of 'exp' has no declared type
+input.y:5.24-25: error: \$2 of 'exp' has no declared type
+input.y:5.6-32: warning: type clash on default action: <bar> != <>
+input.y:6.6-8: warning: type clash on default action: <bar> != <>
+input.y:7.5: warning: empty rule for typed nonterminal, and no action
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:117"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  4 ) # 4. input.at:89: Unused values
-    at_setup_line='input.at:89'
-    at_desc='Unused values'
-    $at_quiet $ECHO_N "  4: Unused values                                $ECHO_C"
-    at_xfail=no
-    (
-      echo "4. input.at:89: testing ..."
-      $at_traceon
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_4
+#AT_START_5
+at_fn_group_banner 5 'input.at:285' \
+  "Unused values" "                                  " 1
+at_xfail=no
+(
+  $as_echo "5. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 cat >input.y <<'_ATEOF'
-%token <integer> INT
-%type <integer> a b c d e f g h i j k l
-%destructor { destroy ($$); } INT a b c d e f g h i j k l
+%token <integer> INT;
+%type <integer> a b c d e f g h i j k l;
+%destructor { destroy ($$); } INT a b c d e f g h i j k l;
 %%
 start:
-  'a' a { $2 } | 'b' b { $2 } | 'c' c { $2 } | 'd' d { $2 } | 'e' e { $2 }
-| 'f' f { $2 } | 'g' g { $2 } | 'h' h { $2 } | 'i' i { $2 } | 'j' j { $2 }
-| 'k' k { $2 } | 'l' l { $2 }
+  'a' a { $2; } | 'b' b { $2; } | 'c' c { $2; } | 'd' d { $2; }
+| 'e' e { $2; } | 'f' f { $2; } | 'g' g { $2; } | 'h' h { $2; }
+| 'i' i { $2; } | 'j' j { $2; } | 'k' k { $2; } | 'l' l { $2; }
 ;
 
 a: INT | INT { } INT { } INT { };
 b: INT | /* empty */;
-c: INT | INT { $1 } INT { } INT { };
-d: INT | INT { } INT { $1 } INT { };
-e: INT | INT { } INT {  } INT { $1 };
+c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+d: INT | INT { } INT { $1; } INT { $<integer>2; };
+e: INT | INT { } INT {  } INT { $1; };
 f: INT | INT { } INT {  } INT { $$ = $1 + $3 + $5; };
-g: INT | INT { $$ } INT { $$ } INT { };
-h: INT | INT { $$ } INT { $$ = $2 } INT { };
+g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
 i: INT | INT INT { } { $$ = $1 + $2; };
 j: INT | INT INT { $<integer>$ = 1; } { $$ = $1 + $2; };
-k: INT | INT INT { $$; } { $$ = $3; } { };
-l: INT | INT { $$ = $1; } INT { $$ = $2 + $3; } INT { $$ = $4 + $5; };
-
+k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+l: INT | INT { $<integer>$ = $<integer>1; } INT { $<integer>$ = $<integer>2 + $<integer>3; } INT { $<integer>$ = $<integer>4 + $<integer>5; };
 _ATEOF
 
 
-$at_traceoff
-echo "input.at:148: bison input.y"
-echo input.at:148 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:11.10-32: warning: unset value: \$\$
-input.y:11.10-32: warning: unused value: \$1
-input.y:11.10-32: warning: unused value: \$3
-input.y:11.10-32: warning: unused value: \$5
-input.y:12.9: warning: empty rule for typed nonterminal, and no action
-input.y:13.10-35: warning: unset value: \$\$
-input.y:13.10-35: warning: unused value: \$3
-input.y:13.10-35: warning: unused value: \$5
-input.y:14.10-35: warning: unset value: \$\$
-input.y:14.10-35: warning: unused value: \$3
-input.y:14.10-35: warning: unused value: \$5
-input.y:15.10-36: warning: unset value: \$\$
-input.y:15.10-36: warning: unused value: \$3
-input.y:15.10-36: warning: unused value: \$5
-input.y:17.10-38: warning: unset value: \$\$
-input.y:17.10-38: warning: unused value: \$1
-input.y:17.10-38: warning: unused value: \$2
-input.y:17.10-38: warning: unused value: \$3
-input.y:17.10-38: warning: unused value: \$4
-input.y:17.10-38: warning: unused value: \$5
-input.y:18.10-43: warning: unset value: \$\$
-input.y:18.10-43: warning: unused value: \$1
-input.y:18.10-43: warning: unused value: \$3
-input.y:18.10-43: warning: unused value: \$4
-input.y:18.10-43: warning: unused value: \$5
-input.y:20.10-55: warning: unused value: \$3
-input.y:21.10-41: warning: unset value: \$\$
-input.y:21.10-41: warning: unused value: \$1
-input.y:21.10-41: warning: unused value: \$2
-input.y:21.10-41: warning: unused value: \$4
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:148: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:286: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -fcaret input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:286"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/input.at:286: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y" "input.at:286"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:286: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:286"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:286: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:286"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:286: bison -fcaret input.y"
+at_fn_check_prepare_trace "input.at:286"
+( $at_check_trace; bison -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:11.10-32: warning: unset value: \$\$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: \$1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: \$3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: \$5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+input.y:13.10-62: warning: unset value: \$\$
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: \$3
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: \$5
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                                           ^^^
+input.y:14.10-49: warning: unset value: \$\$
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: \$3
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: \$5
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: \$\$
+ e: INT | INT { } INT {  } INT { \$1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: \$3
+ e: INT | INT { } INT {  } INT { \$1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: \$5
+ e: INT | INT { } INT {  } INT { \$1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: \$\$
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: \$1
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+          ^^^
+input.y:17.31-33: warning: unused value: \$3
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                               ^^^
+input.y:17.52-54: warning: unused value: \$5
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: \$\$
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: \$1
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: \$3
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                               ^^^
+input.y:18.66-68: warning: unused value: \$5
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                                                                  ^^^
+input.y:21.10-68: warning: unset value: \$\$
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: \$1
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: \$2
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+              ^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:286: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Werror" "input.at:286"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:11.10-32: warning: unset value: $$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: $1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: $3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: $5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+input.y:13.10-62: warning: unset value: $$
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: $3
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: $5
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                                           ^^^
+input.y:14.10-49: warning: unset value: $$
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: $3
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: $5
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: $$
+ e: INT | INT { } INT {  } INT { $1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: $3
+ e: INT | INT { } INT {  } INT { $1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: $5
+ e: INT | INT { } INT {  } INT { $1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: $$
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: $1
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^
+input.y:17.31-33: warning: unused value: $3
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                               ^^^
+input.y:17.52-54: warning: unused value: $5
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: $$
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: $1
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: $3
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                               ^^^
+input.y:18.66-68: warning: unused value: $5
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                                                                  ^^^
+input.y:21.10-68: warning: unset value: $$
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: $1
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: $2
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+              ^^^
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:286: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:286"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:286: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error" "input.at:286"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:286: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror" "input.at:286"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:286: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror" "input.at:286"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
+cat >input.y <<'_ATEOF'
+%token <integer> INT;
+%type <integer> a b c d e f g h i j k l;
+%destructor { destroy ($$); } INT a b c d e f g h i j k l;
+%%
+start:
+  'a' a { $2; } | 'b' b { $2; } | 'c' c { $2; } | 'd' d { $2; }
+| 'e' e { $2; } | 'f' f { $2; } | 'g' g { $2; } | 'h' h { $2; }
+| 'i' i { $2; } | 'j' j { $2; } | 'k' k { $2; } | 'l' l { $2; }
+;
+
+a: INT | INT { } INT { } INT { };
+b: INT | /* empty */;
+c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+d: INT | INT { } INT { $1; } INT { $<integer>2; };
+e: INT | INT { } INT {  } INT { $1; };
+f: INT | INT { } INT {  } INT { $$ = $1 + $3 + $5; };
+g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+i: INT | INT INT { } { $$ = $1 + $2; };
+j: INT | INT INT { $<integer>$ = 1; } { $$ = $1 + $2; };
+k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+l: INT | INT { $<integer>$ = $<integer>1; } INT { $<integer>$ = $<integer>2 + $<integer>3; } INT { $<integer>$ = $<integer>4 + $<integer>5; };
+_ATEOF
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:287: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --warnings=midrule-values -fcaret input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:287"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --warnings=midrule-values -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  5 ) # 5. input.at:157: Incompatible Aliases
-    at_setup_line='input.at:157'
-    at_desc='Incompatible Aliases'
-    $at_quiet $ECHO_N "  5: Incompatible Aliases                         $ECHO_C"
-    at_xfail=no
-    (
-      echo "5. input.at:157: testing ..."
-      $at_traceon
+  { set +x
+$as_echo "$at_srcdir/input.at:287: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --warnings=midrule-values -fcaret input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --warnings=midrule-values -fcaret input.y" "input.at:287"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --warnings=midrule-values -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:287: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:287"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:287: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:287"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:287: bison --warnings=midrule-values -fcaret input.y"
+at_fn_check_prepare_trace "input.at:287"
+( $at_check_trace; bison --warnings=midrule-values -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:11.10-32: warning: unset value: \$\$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: \$1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: \$3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: \$5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+input.y:13.14-20: warning: unset value: \$\$
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+              ^^^^^^^
+input.y:13.26-41: warning: unset value: \$\$
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                          ^^^^^^^^^^^^^^^^
+input.y:13.10-62: warning: unset value: \$\$
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: \$3
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: \$5
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                                           ^^^
+input.y:14.14-16: warning: unset value: \$\$
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+              ^^^
+input.y:14.10-49: warning: unset value: \$\$
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: \$3
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: \$5
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: \$\$
+ e: INT | INT { } INT {  } INT { \$1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: \$3
+ e: INT | INT { } INT {  } INT { \$1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: \$5
+ e: INT | INT { } INT {  } INT { \$1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: \$\$
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: \$1
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+          ^^^
+input.y:17.14-29: warning: unused value: \$2
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+              ^^^^^^^^^^^^^^^^
+input.y:17.31-33: warning: unused value: \$3
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                               ^^^
+input.y:17.35-50: warning: unused value: \$4
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                                   ^^^^^^^^^^^^^^^^
+input.y:17.52-54: warning: unused value: \$5
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: \$\$
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: \$1
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: \$3
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                               ^^^
+input.y:18.35-64: warning: unused value: \$4
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.66-68: warning: unused value: \$5
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                                                                  ^^^
+input.y:20.18-37: warning: unused value: \$3
+ j: INT | INT INT { \$<integer>\$ = 1; } { \$\$ = \$1 + \$2; };
+                  ^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-68: warning: unset value: \$\$
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: \$1
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: \$2
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+              ^^^
+input.y:21.35-64: warning: unused value: \$4
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:287: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Werror" "input.at:287"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:11.10-32: warning: unset value: $$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: $1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: $3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: $5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+input.y:13.14-20: warning: unset value: $$
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+              ^^^^^^^
+input.y:13.26-41: warning: unset value: $$
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                          ^^^^^^^^^^^^^^^^
+input.y:13.10-62: warning: unset value: $$
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: $3
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: $5
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                                           ^^^
+input.y:14.14-16: warning: unset value: $$
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+              ^^^
+input.y:14.10-49: warning: unset value: $$
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: $3
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: $5
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: $$
+ e: INT | INT { } INT {  } INT { $1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: $3
+ e: INT | INT { } INT {  } INT { $1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: $5
+ e: INT | INT { } INT {  } INT { $1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: $$
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: $1
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^
+input.y:17.14-29: warning: unused value: $2
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+              ^^^^^^^^^^^^^^^^
+input.y:17.31-33: warning: unused value: $3
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                               ^^^
+input.y:17.35-50: warning: unused value: $4
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                                   ^^^^^^^^^^^^^^^^
+input.y:17.52-54: warning: unused value: $5
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: $$
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: $1
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: $3
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                               ^^^
+input.y:18.35-64: warning: unused value: $4
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.66-68: warning: unused value: $5
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                                                                  ^^^
+input.y:20.18-37: warning: unused value: $3
+ j: INT | INT INT { $<integer>$ = 1; } { $$ = $1 + $2; };
+                  ^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-68: warning: unset value: $$
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: $1
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: $2
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+              ^^^
+input.y:21.35-64: warning: unused value: $4
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:287: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:287"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:287: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=error" "input.at:287"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:287: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Wnone -Werror" "input.at:287"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:287: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=none -Werror" "input.at:287"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_5
+#AT_START_6
+at_fn_group_banner 6 'input.at:295' \
+  "Unused values before symbol declarations" "       " 1
+at_xfail=no
+(
+  $as_echo "6. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >input.y <<'_ATEOF'
+
+
+
+%%
+start:
+  'a' a { $2; } | 'b' b { $2; } | 'c' c { $2; } | 'd' d { $2; }
+| 'e' e { $2; } | 'f' f { $2; } | 'g' g { $2; } | 'h' h { $2; }
+| 'i' i { $2; } | 'j' j { $2; } | 'k' k { $2; } | 'l' l { $2; }
+;
+
+a: INT | INT { } INT { } INT { };
+b: INT | /* empty */;
+c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+d: INT | INT { } INT { $1; } INT { $<integer>2; };
+e: INT | INT { } INT {  } INT { $1; };
+f: INT | INT { } INT {  } INT { $$ = $1 + $3 + $5; };
+g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+i: INT | INT INT { } { $$ = $1 + $2; };
+j: INT | INT INT { $<integer>$ = 1; } { $$ = $1 + $2; };
+k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+l: INT | INT { $<integer>$ = $<integer>1; } INT { $<integer>$ = $<integer>2 + $<integer>3; } INT { $<integer>$ = $<integer>4 + $<integer>5; };
+%token <integer> INT;
+%type <integer> a b c d e f g h i j k l;
+%destructor { destroy ($$); } INT a b c d e f g h i j k l;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:296: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -fcaret input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:296"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:296: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y" "input.at:296"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:296: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:296"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:296: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:296"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:296: bison -fcaret input.y"
+at_fn_check_prepare_trace "input.at:296"
+( $at_check_trace; bison -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:11.10-32: warning: unset value: \$\$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: \$1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: \$3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: \$5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+input.y:13.10-62: warning: unset value: \$\$
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: \$3
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: \$5
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                                           ^^^
+input.y:14.10-49: warning: unset value: \$\$
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: \$3
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: \$5
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: \$\$
+ e: INT | INT { } INT {  } INT { \$1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: \$3
+ e: INT | INT { } INT {  } INT { \$1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: \$5
+ e: INT | INT { } INT {  } INT { \$1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: \$\$
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: \$1
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+          ^^^
+input.y:17.31-33: warning: unused value: \$3
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                               ^^^
+input.y:17.52-54: warning: unused value: \$5
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: \$\$
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: \$1
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: \$3
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                               ^^^
+input.y:18.66-68: warning: unused value: \$5
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                                                                  ^^^
+input.y:21.10-68: warning: unset value: \$\$
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: \$1
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: \$2
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+              ^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:296: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Werror" "input.at:296"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:11.10-32: warning: unset value: $$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: $1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: $3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: $5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+input.y:13.10-62: warning: unset value: $$
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: $3
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: $5
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                                           ^^^
+input.y:14.10-49: warning: unset value: $$
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: $3
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: $5
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: $$
+ e: INT | INT { } INT {  } INT { $1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: $3
+ e: INT | INT { } INT {  } INT { $1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: $5
+ e: INT | INT { } INT {  } INT { $1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: $$
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: $1
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^
+input.y:17.31-33: warning: unused value: $3
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                               ^^^
+input.y:17.52-54: warning: unused value: $5
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: $$
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: $1
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: $3
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                               ^^^
+input.y:18.66-68: warning: unused value: $5
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                                                                  ^^^
+input.y:21.10-68: warning: unset value: $$
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: $1
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: $2
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+              ^^^
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:296: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:296"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:296: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error" "input.at:296"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:296: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror" "input.at:296"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:296: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror" "input.at:296"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+cat >input.y <<'_ATEOF'
+
+
+
+%%
+start:
+  'a' a { $2; } | 'b' b { $2; } | 'c' c { $2; } | 'd' d { $2; }
+| 'e' e { $2; } | 'f' f { $2; } | 'g' g { $2; } | 'h' h { $2; }
+| 'i' i { $2; } | 'j' j { $2; } | 'k' k { $2; } | 'l' l { $2; }
+;
+
+a: INT | INT { } INT { } INT { };
+b: INT | /* empty */;
+c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+d: INT | INT { } INT { $1; } INT { $<integer>2; };
+e: INT | INT { } INT {  } INT { $1; };
+f: INT | INT { } INT {  } INT { $$ = $1 + $3 + $5; };
+g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+i: INT | INT INT { } { $$ = $1 + $2; };
+j: INT | INT INT { $<integer>$ = 1; } { $$ = $1 + $2; };
+k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+l: INT | INT { $<integer>$ = $<integer>1; } INT { $<integer>$ = $<integer>2 + $<integer>3; } INT { $<integer>$ = $<integer>4 + $<integer>5; };
+%token <integer> INT;
+%type <integer> a b c d e f g h i j k l;
+%destructor { destroy ($$); } INT a b c d e f g h i j k l;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:297: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --warnings=midrule-values -fcaret input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:297"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --warnings=midrule-values -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:297: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --warnings=midrule-values -fcaret input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --warnings=midrule-values -fcaret input.y" "input.at:297"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --warnings=midrule-values -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:297: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:297"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:297: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:297"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:297: bison --warnings=midrule-values -fcaret input.y"
+at_fn_check_prepare_trace "input.at:297"
+( $at_check_trace; bison --warnings=midrule-values -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:11.10-32: warning: unset value: \$\$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: \$1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: \$3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: \$5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+input.y:13.14-20: warning: unset value: \$\$
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+              ^^^^^^^
+input.y:13.26-41: warning: unset value: \$\$
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                          ^^^^^^^^^^^^^^^^
+input.y:13.10-62: warning: unset value: \$\$
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: \$3
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: \$5
+ c: INT | INT { \$1; } INT { \$<integer>2; } INT { \$<integer>4; };
+                                           ^^^
+input.y:14.14-16: warning: unset value: \$\$
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+              ^^^
+input.y:14.10-49: warning: unset value: \$\$
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: \$3
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: \$5
+ d: INT | INT { } INT { \$1; } INT { \$<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: \$\$
+ e: INT | INT { } INT {  } INT { \$1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: \$3
+ e: INT | INT { } INT {  } INT { \$1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: \$5
+ e: INT | INT { } INT {  } INT { \$1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: \$\$
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: \$1
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+          ^^^
+input.y:17.14-29: warning: unused value: \$2
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+              ^^^^^^^^^^^^^^^^
+input.y:17.31-33: warning: unused value: \$3
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                               ^^^
+input.y:17.35-50: warning: unused value: \$4
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                                   ^^^^^^^^^^^^^^^^
+input.y:17.52-54: warning: unused value: \$5
+ g: INT | INT { \$<integer>\$; } INT { \$<integer>\$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: \$\$
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: \$1
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: \$3
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                               ^^^
+input.y:18.35-64: warning: unused value: \$4
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.66-68: warning: unused value: \$5
+ h: INT | INT { \$<integer>\$; } INT { \$<integer>\$ = \$<integer>2; } INT { };
+                                                                  ^^^
+input.y:20.18-37: warning: unused value: \$3
+ j: INT | INT INT { \$<integer>\$ = 1; } { \$\$ = \$1 + \$2; };
+                  ^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-68: warning: unset value: \$\$
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: \$1
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: \$2
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+              ^^^
+input.y:21.35-64: warning: unused value: \$4
+ k: INT | INT INT { \$<integer>\$; } { \$<integer>\$ = \$<integer>3; } { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:297: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Werror" "input.at:297"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:11.10-32: warning: unset value: $$
+ a: INT | INT { } INT { } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^
+input.y:11.10-12: warning: unused value: $1
+ a: INT | INT { } INT { } INT { };
+          ^^^
+input.y:11.18-20: warning: unused value: $3
+ a: INT | INT { } INT { } INT { };
+                  ^^^
+input.y:11.26-28: warning: unused value: $5
+ a: INT | INT { } INT { } INT { };
+                          ^^^
+input.y:12.9: warning: empty rule for typed nonterminal, and no action
+ b: INT | /* empty */;
+         ^
+input.y:13.14-20: warning: unset value: $$
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+              ^^^^^^^
+input.y:13.26-41: warning: unset value: $$
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                          ^^^^^^^^^^^^^^^^
+input.y:13.10-62: warning: unset value: $$
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:13.22-24: warning: unused value: $3
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                      ^^^
+input.y:13.43-45: warning: unused value: $5
+ c: INT | INT { $1; } INT { $<integer>2; } INT { $<integer>4; };
+                                           ^^^
+input.y:14.14-16: warning: unset value: $$
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+              ^^^
+input.y:14.10-49: warning: unset value: $$
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:14.18-20: warning: unused value: $3
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+                  ^^^
+input.y:14.30-32: warning: unused value: $5
+ d: INT | INT { } INT { $1; } INT { $<integer>2; };
+                              ^^^
+input.y:15.10-37: warning: unset value: $$
+ e: INT | INT { } INT {  } INT { $1; };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:15.18-20: warning: unused value: $3
+ e: INT | INT { } INT {  } INT { $1; };
+                  ^^^
+input.y:15.27-29: warning: unused value: $5
+ e: INT | INT { } INT {  } INT { $1; };
+                           ^^^
+input.y:17.10-58: warning: unset value: $$
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:17.10-12: warning: unused value: $1
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+          ^^^
+input.y:17.14-29: warning: unused value: $2
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+              ^^^^^^^^^^^^^^^^
+input.y:17.31-33: warning: unused value: $3
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                               ^^^
+input.y:17.35-50: warning: unused value: $4
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                                   ^^^^^^^^^^^^^^^^
+input.y:17.52-54: warning: unused value: $5
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+                                                    ^^^
+input.y:18.10-72: warning: unset value: $$
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.10-12: warning: unused value: $1
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+          ^^^
+input.y:18.31-33: warning: unused value: $3
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                               ^^^
+input.y:18.35-64: warning: unused value: $4
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:18.66-68: warning: unused value: $5
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+                                                                  ^^^
+input.y:20.18-37: warning: unused value: $3
+ j: INT | INT INT { $<integer>$ = 1; } { $$ = $1 + $2; };
+                  ^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-68: warning: unset value: $$
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+input.y:21.10-12: warning: unused value: $1
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+          ^^^
+input.y:21.14-16: warning: unused value: $2
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+              ^^^
+input.y:21.35-64: warning: unused value: $4
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:297: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:297"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:297: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=error" "input.at:297"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:297: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Wnone -Werror" "input.at:297"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:297: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=none -Werror" "input.at:297"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --warnings=midrule-values -fcaret input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_6
+#AT_START_7
+at_fn_group_banner 7 'input.at:305' \
+  "Default %printer and %destructor redeclared" "    " 1
+at_xfail=no
+(
+  $as_echo "7. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%destructor { destroy ($$); } <*> <*>
+%printer { print ($$); } <*> <*>
+
+%destructor { destroy ($$); } <*>
+%printer { print ($$); } <*>
+
+%destructor { destroy ($$); } <> <>
+%printer { print ($$); } <> <>
+
+%destructor { destroy ($$); } <>
+%printer { print ($$); } <>
+
+%%
+
+start: ;
+
+%destructor { destroy ($$); } <*>;
+%printer { print ($$); } <*>;
+
+%destructor { destroy ($$); } <>;
+%printer { print ($$); } <>;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:331: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:331"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.13-29: error: redeclaration for default tagged %destructor
+input.y:1.13-29:     previous declaration
+input.y:2.10-24: error: redeclaration for default tagged %printer
+input.y:2.10-24:     previous declaration
+input.y:4.13-29: error: redeclaration for default tagged %destructor
+input.y:1.13-29:     previous declaration
+input.y:5.10-24: error: redeclaration for default tagged %printer
+input.y:2.10-24:     previous declaration
+input.y:7.13-29: error: redeclaration for default tagless %destructor
+input.y:7.13-29:     previous declaration
+input.y:8.10-24: error: redeclaration for default tagless %printer
+input.y:8.10-24:     previous declaration
+input.y:10.13-29: error: redeclaration for default tagless %destructor
+input.y:7.13-29:      previous declaration
+input.y:11.10-24: error: redeclaration for default tagless %printer
+input.y:8.10-24:      previous declaration
+input.y:17.13-29: error: redeclaration for default tagged %destructor
+input.y:4.13-29:      previous declaration
+input.y:18.10-24: error: redeclaration for default tagged %printer
+input.y:5.10-24:      previous declaration
+input.y:20.13-29: error: redeclaration for default tagless %destructor
+input.y:10.13-29:     previous declaration
+input.y:21.10-24: error: redeclaration for default tagless %printer
+input.y:11.10-24:     previous declaration
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:331"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_7
+#AT_START_8
+at_fn_group_banner 8 'input.at:365' \
+  "Per-type %printer and %destructor redeclared" "   " 1
+at_xfail=no
+(
+  $as_echo "8. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%destructor { destroy ($$); } <field1> <field2>
+%printer { print ($$); } <field1> <field2>
+
+%destructor { destroy ($$); } <field1> <field1>
+%printer { print ($$); } <field2> <field2>
+
+%%
+
+start: ;
+
+%destructor { destroy ($$); } <field2> <field1>;
+%printer { print ($$); } <field2> <field1>;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:382: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:382"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:4.13-29: error: %destructor redeclaration for <field1>
+input.y:1.13-29:     previous declaration
+input.y:4.13-29: error: %destructor redeclaration for <field1>
+input.y:4.13-29:     previous declaration
+input.y:5.10-24: error: %printer redeclaration for <field2>
+input.y:2.10-24:     previous declaration
+input.y:5.10-24: error: %printer redeclaration for <field2>
+input.y:5.10-24:     previous declaration
+input.y:11.13-29: error: %destructor redeclaration for <field1>
+input.y:4.13-29:      previous declaration
+input.y:11.13-29: error: %destructor redeclaration for <field2>
+input.y:1.13-29:      previous declaration
+input.y:12.10-24: error: %printer redeclaration for <field1>
+input.y:2.10-24:      previous declaration
+input.y:12.10-24: error: %printer redeclaration for <field2>
+input.y:5.10-24:      previous declaration
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:382"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_8
+#AT_START_9
+at_fn_group_banner 9 'input.at:408' \
+  "Unused values with default %destructor" "         " 1
+at_xfail=no
+(
+  $as_echo "9. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%destructor { destroy ($$); } <>
+%type <tag> tagged
+
+%%
+
+start: end end tagged tagged { $<tag>1; $3; } ;
+end: { } ;
+tagged: { } ;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:421: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:421"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:421: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "input.at:421"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:421: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:421"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:421: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:421"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:421: bison input.y"
+at_fn_check_prepare_trace "input.at:421"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:6.8-45: warning: unset value: \$\$
+input.y:6.12-14: warning: unused value: \$2
+input.y:7.6-8: warning: unset value: \$\$
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:421: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror" "input.at:421"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:6.8-45: warning: unset value: $$
+input.y:6.12-14: warning: unused value: $2
+input.y:7.6-8: warning: unset value: $$
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:421: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:421"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:421: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error" "input.at:421"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:421: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror" "input.at:421"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:421: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror" "input.at:421"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+cat >input.y <<'_ATEOF'
+%destructor { destroy ($$); } <*>
+%type <tag> tagged
+
+%%
+
+start: end end tagged tagged { $<tag>1; $3; } ;
+end: { } ;
+tagged: { } ;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:438: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:438"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:438: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "input.at:438"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:438: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:438"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:438: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:438"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:438: bison input.y"
+at_fn_check_prepare_trace "input.at:438"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:6.23-28: warning: unused value: \$4
+input.y:8.9-11: warning: unset value: \$\$
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:438: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror" "input.at:438"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:6.23-28: warning: unused value: $4
+input.y:8.9-11: warning: unset value: $$
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:438: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:438"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:438: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error" "input.at:438"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:438: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror" "input.at:438"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:438: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror" "input.at:438"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_9
+#AT_START_10
+at_fn_group_banner 10 'input.at:450' \
+  "Unused values with per-type %destructor" "        " 1
+at_xfail=no
+(
+  $as_echo "10. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%destructor { destroy ($$); } <field1>
+%type <field1> start end
+
+%%
+
+start: end end { $1; } ;
+end: { }  ;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:462: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:462"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:462: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "input.at:462"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:462: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:462"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:462: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:462"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:462: bison input.y"
+at_fn_check_prepare_trace "input.at:462"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:6.8-22: warning: unset value: \$\$
+input.y:6.12-14: warning: unused value: \$2
+input.y:7.6-8: warning: unset value: \$\$
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:462: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror" "input.at:462"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:6.8-22: warning: unset value: $$
+input.y:6.12-14: warning: unused value: $2
+input.y:7.6-8: warning: unset value: $$
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:462: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:462"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:462: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error" "input.at:462"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:462: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror" "input.at:462"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:462: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror" "input.at:462"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_10
+#AT_START_11
+at_fn_group_banner 11 'input.at:475' \
+  "Incompatible Aliases" "                           " 1
+at_xfail=no
+(
+  $as_echo "11. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -1220,85 +5158,63 @@
 _ATEOF
 
 
-$at_traceoff
-echo "input.at:185: bison input.y"
-echo input.at:185 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:8.7-11: %type redeclaration for foo
-input.y:3.7-11: first declaration
-input.y:10.13-17: %destructor redeclaration for foo
-input.y:5.13-17: first declaration
-input.y:9.10-14: %printer redeclaration for foo
-input.y:10.13-17: first declaration
-input.y:11.1-5: %left redeclaration for foo
-input.y:6.1-5: first declaration
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "input.at:185: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  6 ) # 6. input.at:198: Torturing the Scanner
-    at_setup_line='input.at:198'
-    at_desc='Torturing the Scanner'
-    $at_quiet $ECHO_N "  6: Torturing the Scanner                        $ECHO_C"
-    at_xfail=no
-    (
-      echo "6. input.at:198: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/input.at:494: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:494"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:8.7-11: error: %type redeclaration for foo
+input.y:3.7-11:     previous declaration
+input.y:10.13-17: error: %destructor redeclaration for foo
+input.y:5.13-17:      previous declaration
+input.y:9.10-14: error: %printer redeclaration for foo
+input.y:4.10-14:     previous declaration
+input.y:11.1-5: error: %left redeclaration for foo
+input.y:6.1-5:      previous declaration
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:494"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-cat >input.y <<'_ATEOF'
-_ATEOF
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_11
+#AT_START_12
+at_fn_group_banner 12 'input.at:516' \
+  "Torturing the Scanner" "                          " 1
+at_xfail=no
+(
+  $as_echo "12. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-$at_traceoff
-echo "input.at:204: bison input.y"
-echo input.at:204 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:1.1: syntax error, unexpected end of file
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "input.at:204: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+: >input.y
+
+{ set +x
+$as_echo "$at_srcdir/input.at:520: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:520"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.1: error: syntax error, unexpected end of file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:520"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 
@@ -1306,44 +5222,33 @@
 {}
 _ATEOF
 
-$at_traceoff
-echo "input.at:212: bison input.y"
-echo input.at:212 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:1.1-2: syntax error, unexpected {...}
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "input.at:212: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/input.at:528: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:528"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.1-2: error: syntax error, unexpected {...}
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:528"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %{
 /* This is seen in GCC: a %{ and %} in middle of a comment. */
@@ -1379,6 +5284,8 @@
 #endif
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
 %}
 /* %{ and %} can be here too. */
 
@@ -1405,7 +5312,7 @@
 %}
 
 %{
-static void yyerror (const char *s);
+static void yyerror ( const char *msg);
 static int yylex (void);
 %}
 
@@ -1438,27 +5345,29 @@
   res.ival = val;
   return res;
 }
-
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
 static int
 yylex (void)
 {
-  static const char *input = "[\1\2$@{@oline@__oline__\
+  static char const input[] = "[\1\2$@{@oline@__oline__\
 #output "; /* "
   */
-  yylval = value_as_yystype (*input);
-  return *input++;
-}
-
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
+  static size_t toknum;
+  assert (toknum < sizeof input);
+  yylval = value_as_yystype (input[toknum]);
+  return input[toknum++];
 }
 _ATEOF
 
 
 
-# Pacify Emacs'font-lock-mode: "
+# Pacify Emacs' font-lock-mode: "
 
 cat >main.c <<'_ATEOF'
 typedef int value;
@@ -1474,161 +5383,225 @@
 _ATEOF
 
 
-$at_traceoff
-echo "input.at:342: bison -d -v -o input.c input.y"
-echo input.at:342 >$at_check_line_file
-( $at_traceon; bison -d -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:342: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:659: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:659"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:659: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y" "input.at:659"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:659: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:659"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:659: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:659"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "input.at:343: \$CC \$CFLAGS \$CPPFLAGS -o input.o -c input.c"
-echo input.at:343 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o input.o -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:343: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "input.at:344: \$CC \$CFLAGS \$CPPFLAGS -o main.o -c main.c"
-echo input.at:344 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o main.o -c main.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:344: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "input.at:345: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.o main.o \$LIBS"
-echo input.at:345 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.o main.o $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:345: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "input.at:348: \$PREPARSER ./input"
-echo input.at:348 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "[[],
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:348: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/input.at:659: bison -d -v -o input.c input.y"
+at_fn_check_prepare_trace "input.at:659"
+( $at_check_trace; bison -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/input.at:660: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "input.at:660"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  7 ) # 7. input.at:357: Typed symbol aliases
-    at_setup_line='input.at:357'
-    at_desc='Typed symbol aliases'
-    $at_quiet $ECHO_N "  7: Typed symbol aliases                         $ECHO_C"
-    at_xfail=no
-    (
-      echo "7. input.at:357: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/input.at:660: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o input.c " "input.at:660"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/input.at:661: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "input.at:661"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:661"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/input.at:661: \$CC \$CFLAGS \$CPPFLAGS -c -o main.o main.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o main.o main.c " "input.at:661"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o main.o main.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:661"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/input.at:662: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "input.at:662"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:662"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/input.at:662: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.o main.o \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.o main.o $LIBS" "input.at:662"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.o main.o $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:662"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/input.at:663:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "input.at:663"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "[[],
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:663"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/input.at:663: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "input.at:663"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:663"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_12
+#AT_START_13
+at_fn_group_banner 13 'input.at:674' \
+  "Typed symbol aliases" "                           " 1
+at_xfail=no
+(
+  $as_echo "13. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # Bison 2.0 broke typed symbol aliases - ensure they work.
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %union
 {
@@ -1643,57 +5616,114 @@
 
 
 
-$at_traceoff
-echo "input.at:373: bison -o input.c input.y"
-echo input.at:373 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:373: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:690: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:690"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:690"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/input.at:690: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "input.at:690"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:690"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:690: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:690"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:690"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:690: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:690"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:690"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/input.at:690: bison -o input.c input.y"
+at_fn_check_prepare_trace "input.at:690"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:690"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  8 ) # 8. input.at:393: Require 1.0
-    at_setup_line='input.at:393'
-    at_desc='Require 1.0'
-    $at_quiet $ECHO_N "  8: Require 1.0                                  $ECHO_C"
-    at_xfail=no
-    (
-      echo "8. input.at:393: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_13
+#AT_START_14
+at_fn_group_banner 14 'input.at:710' \
+  "Require 1.0" "                                    " 1
+at_xfail=no
+(
+  $as_echo "14. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %require "1.0";
 %%
@@ -1701,113 +5731,227 @@
 _ATEOF
 
 
-$at_traceoff
-echo "input.at:393: bison -o input.c input.y"
-echo input.at:393 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:393: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:710: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:710"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/input.at:710: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "input.at:710"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:710: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:710"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:710: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:710"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/input.at:710: bison -o input.c input.y"
+at_fn_check_prepare_trace "input.at:710"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  9 ) # 9. input.at:394: Require 2.3
-    at_setup_line='input.at:394'
-    at_desc='Require 2.3'
-    $at_quiet $ECHO_N "  9: Require 2.3                                  $ECHO_C"
-    at_xfail=no
-    (
-      echo "9. input.at:394: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_14
+#AT_START_15
+at_fn_group_banner 15 'input.at:711' \
+  "Require 2.7" "                                    " 1
+at_xfail=no
+(
+  $as_echo "15. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%require "2.3";
+%require "2.7";
 %%
 empty_file:;
 _ATEOF
 
 
-$at_traceoff
-echo "input.at:394: bison -o input.c input.y"
-echo input.at:394 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "input.at:394: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:711: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:711"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/input.at:711: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "input.at:711"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:711: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:711"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:711: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:711"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/input.at:711: bison -o input.c input.y"
+at_fn_check_prepare_trace "input.at:711"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  10 ) # 10. input.at:396: Require 100.0
-    at_setup_line='input.at:396'
-    at_desc='Require 100.0'
-    $at_quiet $ECHO_N " 10: Require 100.0                                $ECHO_C"
-    at_xfail=no
-    (
-      echo "10. input.at:396: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_15
+#AT_START_16
+at_fn_group_banner 16 'input.at:713' \
+  "Require 100.0" "                                  " 1
+at_xfail=no
+(
+  $as_echo "16. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %require "100.0";
 %%
@@ -1815,58 +5959,6330 @@
 _ATEOF
 
 
-$at_traceoff
-echo "input.at:396: bison -o input.c input.y"
-echo input.at:396 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   63) ;;
-   *) echo "input.at:396: exit code was $at_status, expected 63"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/input.at:713: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y" "input.at:713"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 63 $at_status "$at_srcdir/input.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_16
+#AT_START_17
+at_fn_group_banner 17 'input.at:720' \
+  "String aliases for character tokens" "            " 1
+at_xfail=no
+(
+  $as_echo "17. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Bison once thought a character token and its alias were different symbols
+# with the same user token number.
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%token 'a' "a"
+%%
+start: 'a';
+%%
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:732: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:732"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:732"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:732: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "input.at:732"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:732"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:732: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:732"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:732"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:732: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:732"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:732"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:732: bison -o input.c input.y"
+at_fn_check_prepare_trace "input.at:732"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:732"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_17
+#AT_START_18
+at_fn_group_banner 18 'input.at:741' \
+  "Symbols" "                                        " 1
+at_xfail=no
+(
+  $as_echo "18. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%token WITH-DASH
+%token WITHOUT_DASH "WITHOUT-DASH"
+%token WITH.PERIOD
+%token WITHOUT_PERIOD "WITHOUT.PERIOD"
+%code {
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+%%
+start: with-dash without_dash with.period without_period;
+with-dash: WITH-DASH;
+without_dash: "WITHOUT-DASH";
+with.period: WITH.PERIOD;
+without_period: "WITHOUT.PERIOD";
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+_ATEOF
+
+
+
+
+# POSIX Yacc accept periods, but not dashes.
+
+{ set +x
+$as_echo "$at_srcdir/input.at:766: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --yacc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --yacc input.y" "input.at:766"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --yacc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:9.8-16: POSIX Yacc forbids dashes in symbol names: WITH-DASH
+input.y:18.8-16: POSIX Yacc forbids dashes in symbol names: with-dash
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:766"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# So warn about them.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:772: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Wyacc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:772"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Wyacc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:772: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wyacc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wyacc input.y" "input.at:772"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wyacc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:772: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:772"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:772: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:772"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:772: bison -Wyacc input.y"
+at_fn_check_prepare_trace "input.at:772"
+( $at_check_trace; bison -Wyacc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH
+input.y:18.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:772: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wyacc input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wyacc input.y -Werror" "input.at:772"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wyacc input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH
+input.y:18.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:772: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:772"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:772: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wyacc input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wyacc input.y --warnings=error" "input.at:772"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wyacc input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:772: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wyacc input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wyacc input.y -Wnone -Werror" "input.at:772"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wyacc input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:772: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wyacc input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wyacc input.y --warnings=none -Werror" "input.at:772"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wyacc input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:772"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
+# Dashes are fine for GNU Bison.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:778: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:778"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:778"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+  { set +x
+$as_echo "$at_srcdir/input.at:778: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "input.at:778"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:778"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:778: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:778"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:778"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:778: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:778"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:778"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:778: bison -o input.c input.y"
+at_fn_check_prepare_trace "input.at:778"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:778"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-  banner-2 ) # Banner 2. output.at:19
-    cat <<\_ATEOF
 
-Output file names.
+# Make sure we don't export silly token identifiers with periods or dashes.
+{ set +x
+$as_echo "$at_srcdir/input.at:781: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "input.at:781"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:781"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
+{ set +x
+$as_echo "$at_srcdir/input.at:781: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o input.c " "input.at:781"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:781"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Periods are genuine letters, they can start identifiers.
+# Digits and dashes cannot.
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%token .GOOD
+         -GOOD
+         1NV4L1D
+         -123
+%%
+start: .GOOD GOOD
 _ATEOF
-    ;;
 
-  11 ) # 11. output.at:43: Output files:  -dv
-    at_setup_line='output.at:43'
-    at_desc='Output files:  -dv '
-    $at_quiet $ECHO_N " 11: Output files:  -dv                           $ECHO_C"
-    at_xfail=no
-    (
-      echo "11. output.at:43: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+
+{ set +x
+$as_echo "$at_srcdir/input.at:794: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y" "input.at:794"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:10.10: error: invalid character: '-'
+input.y:11.10-16: error: invalid identifier: '1NV4L1D'
+input.y:12.10: error: invalid character: '-'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:794"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_18
+#AT_START_19
+at_fn_group_banner 19 'input.at:807' \
+  "Numbered tokens" "                                " 1
+at_xfail=no
+(
+  $as_echo "19. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >redecl.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%token DECIMAL_1     11259375
+         HEXADECIMAL_1 0xabcdef
+         HEXADECIMAL_2 0xFEDCBA
+         DECIMAL_2     16702650
+%%
+start: DECIMAL_1 HEXADECIMAL_2;
+_ATEOF
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:818: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison redecl.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison redecl.y" "input.at:818"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison redecl.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "redecl.y:10.10-22: error: user token number 11259375 redeclaration for HEXADECIMAL_1
+redecl.y:9.8-16:       previous declaration for DECIMAL_1
+redecl.y:12.10-18: error: user token number 16702650 redeclaration for DECIMAL_2
+redecl.y:11.10-22:     previous declaration for HEXADECIMAL_2
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:818"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >too-large.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%token TOO_LARGE_DEC 999999999999999999999
+         TOO_LARGE_HEX 0xFFFFFFFFFFFFFFFFFFF
+%%
+start: TOO_LARGE_DEC TOO_LARGE_HEX
+%%
+_ATEOF
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:833: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison too-large.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison too-large.y" "input.at:833"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison too-large.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "too-large.y:9.22-42: error: integer out of range: '999999999999999999999'
+too-large.y:10.24-44: error: integer out of range: '0xFFFFFFFFFFFFFFFFFFF'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:833"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_19
+#AT_START_20
+at_fn_group_banner 20 'input.at:845' \
+  "Unclosed constructs" "                            " 1
+at_xfail=no
+(
+  $as_echo "20. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Bison's scan-gram.l once forgot to STRING_FINISH some unclosed constructs, so
+# they were prepended to whatever it STRING_GROW'ed next.  It also threw them
+# away rather than returning them to the parser.  The effect was confusing
+# subsequent error messages.
+
+cat >input.y <<'_ATEOF'
+%token A "a
+%token B "b"
+%token AB "ab" // Used to complain that "ab" was already used.
+%token C '1
+%token TWO "2"
+%token TICK_TWELVE "'12" // Used to complain that "'12" was already used.
+
+%%
+
+start: ;
+
+// Used to report a syntax error because it didn't see any kind of symbol
+// identifier.
+%type <f> 'a
+;
+%type <f> "a
+;
+// Used to report a syntax error because it didn't see braced code.
+%destructor { free ($$)
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:874: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y" "input.at:874"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.10-2.0: error: missing '\"' at end of line
+input.y:4.10-5.0: error: missing \"'\" at end of line
+input.y:14.11-15.0: error: missing \"'\" at end of line
+input.y:16.11-17.0: error: missing '\"' at end of line
+input.y:19.13-20.0: error: missing '}' at end of file
+input.y:20.1: error: syntax error, unexpected end of file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:874"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:883: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y" "input.at:883"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.10-2.0: error: missing '\"' at end of line
+ %token A \"a
+          ^^
+input.y:4.10-5.0: error: missing \"'\" at end of line
+ %token C '1
+          ^^
+input.y:14.11-15.0: error: missing \"'\" at end of line
+ %type <f> 'a
+           ^^
+input.y:16.11-17.0: error: missing '\"' at end of line
+ %type <f> \"a
+           ^^
+input.y:19.13-20.0: error: missing '}' at end of file
+ %destructor { free (\$\$)
+             ^^^^^^^^^^^
+input.y:20.1: error: syntax error, unexpected end of file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:883"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_20
+#AT_START_21
+at_fn_group_banner 21 'input.at:909' \
+  "%start after first rule" "                        " 1
+at_xfail=no
+(
+  $as_echo "21. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Bison once complained that a %start after the first rule was a redeclaration
+# of the start symbol.
+
+cat >input.y <<'_ATEOF'
+%%
+false_start: ;
+start: false_start ;
+%start start;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:921: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:921"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:921"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:921: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "input.at:921"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:921"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:921: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:921"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:921"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:921: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:921"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:921"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:921: bison -o input.c input.y"
+at_fn_check_prepare_trace "input.at:921"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:921"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_21
+#AT_START_22
+at_fn_group_banner 22 'input.at:930' \
+  "%prec takes a token" "                            " 1
+at_xfail=no
+(
+  $as_echo "22. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Bison once allowed %prec sym where sym was a nonterminal.
+
+cat >input.y <<'_ATEOF'
+%%
+start: PREC %prec PREC ;
+PREC: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:940: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:940"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.1-4: error: rule given for PREC, which is a token
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:940"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_22
+#AT_START_23
+at_fn_group_banner 23 'input.at:951' \
+  "%prec's token must be defined" "                  " 1
+at_xfail=no
+(
+  $as_echo "23. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# According to POSIX, a %prec token must be defined separately.
+
+cat >input.y <<'_ATEOF'
+%%
+start: %prec PREC ;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:960: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:960"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:960: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "input.at:960"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:960: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:960"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:960: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:960"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:960: bison input.y"
+at_fn_check_prepare_trace "input.at:960"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:2.8-17: warning: token for %prec is not defined: PREC
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:960: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror" "input.at:960"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:2.8-17: warning: token for %prec is not defined: PREC
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:960: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:960"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:960: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error" "input.at:960"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:960: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror" "input.at:960"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:960: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror" "input.at:960"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_23
+#AT_START_24
+at_fn_group_banner 24 'input.at:971' \
+  "Reject unused %code qualifiers" "                 " 1
+at_xfail=no
+(
+  $as_echo "24. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input-c.y <<'_ATEOF'
+%code q {}
+%code bad {}
+%code bad {}
+%code format {}
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:981: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-c.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-c.y" "input.at:981"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-c.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-c.y:1.7: error: %code qualifier 'q' is not used
+input-c.y:2.7-9: error: %code qualifier 'bad' is not used
+input-c.y:3.7-9: error: %code qualifier 'bad' is not used
+input-c.y:4.7-12: error: %code qualifier 'format' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:981"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input-c-glr.y <<'_ATEOF'
+%code q {}
+%code bad {}
+ %code bad {}
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:995: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-c-glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-c-glr.y" "input.at:995"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-c-glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-c-glr.y:1.7: error: %code qualifier 'q' is not used
+input-c-glr.y:2.7-9: error: %code qualifier 'bad' is not used
+input-c-glr.y:3.8-10: error: %code qualifier 'bad' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:995"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input-c++.y <<'_ATEOF'
+%code q {}
+%code bad {}
+ %code q {}
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1008: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-c++.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-c++.y" "input.at:1008"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-c++.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-c++.y:1.7: error: %code qualifier 'q' is not used
+input-c++.y:2.7-9: error: %code qualifier 'bad' is not used
+input-c++.y:3.8: error: %code qualifier 'q' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1008"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input-c++-glr.y <<'_ATEOF'
+%code bad {}
+%code q {}
+%code q {}
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1021: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-c++-glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-c++-glr.y" "input.at:1021"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-c++-glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-c++-glr.y:1.7-9: error: %code qualifier 'bad' is not used
+input-c++-glr.y:2.7: error: %code qualifier 'q' is not used
+input-c++-glr.y:3.7: error: %code qualifier 'q' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >special-char-@@.y <<'_ATEOF'
+%code bad {}
+%code q {}
+%code q {}
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1034: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison special-char-@@.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison special-char-@@.y" "input.at:1034"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison special-char-@@.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "special-char-@@.y:1.7-9: error: %code qualifier 'bad' is not used
+special-char-@@.y:2.7: error: %code qualifier 'q' is not used
+special-char-@@.y:3.7: error: %code qualifier 'q' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1034"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >special-char-].y <<'_ATEOF'
+%code bad {}
+%code q {}
+%code q {}
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1047: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison special-char-].y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison special-char-].y" "input.at:1047"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison special-char-].y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "special-char-].y:1.7-9: error: %code qualifier 'bad' is not used
+special-char-].y:2.7: error: %code qualifier 'q' is not used
+special-char-].y:3.7: error: %code qualifier 'q' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1047"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_24
+#AT_START_25
+at_fn_group_banner 25 'input.at:1060' \
+  "%define errors" "                                 " 1
+at_xfail=no
+(
+  $as_echo "25. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input-redefined.y <<'_ATEOF'
+%define var "value1"
+%define var "value1"
+ %define var "value2"
+%define special1 "]"
+%define special2 "["
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1072: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-redefined.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-redefined.y" "input.at:1072"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-redefined.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-redefined.y:2.9-11: error: %define variable 'var' redefined
+input-redefined.y:1.9-11:     previous definition
+input-redefined.y:3.10-12: error: %define variable 'var' redefined
+input-redefined.y:2.9-11:      previous definition
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1072"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input-unused.y <<'_ATEOF'
+%define var "value"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1085: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-unused.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-unused.y" "input.at:1085"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-unused.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-unused.y:1.9-11: error: %define variable 'var' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1085"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_25
+#AT_START_26
+at_fn_group_banner 26 'input.at:1096' \
+  "%define, --define, --force-define" "              " 1
+at_xfail=no
+(
+  $as_echo "26. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >skel.c <<'_ATEOF'
+m4_divert_push(0)@
+@output(b4_parser_file_name@)@
+[var-dd: ]b4_percent_define_get([[var-dd]])[
+var-ff: ]b4_percent_define_get([[var-ff]])[
+var-dfg: ]b4_percent_define_get([[var-dfg]])[
+var-fd: ]b4_percent_define_get([[var-fd]])
+m4_divert_pop(0)
+_ATEOF
+
+cat >input.y <<'_ATEOF'
+%define var-dfg "gram"
+%%
+start: ;
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1112: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \\
+                 -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \\
+                 -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \\
+                 -Fvar-fd=cmd-f -Dvar-fd=cmd-d   \\
+                 --skeleton ./skel.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1112"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \
+                 -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \
+                 -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \
+                 -Fvar-fd=cmd-f -Dvar-fd=cmd-d   \
+                 --skeleton ./skel.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1112"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1112: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \\
+                 -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \\
+                 -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \\
+                 -Fvar-fd=cmd-f -Dvar-fd=cmd-d   \\
+                 --skeleton ./skel.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1112"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \
+                 -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \
+                 -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \
+                 -Fvar-fd=cmd-f -Dvar-fd=cmd-d   \
+                 --skeleton ./skel.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1112"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1112: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1112"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1112"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1112: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1112"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1112"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1112: bison -Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \\
+                 -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \\
+                 -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \\
+                 -Fvar-fd=cmd-f -Dvar-fd=cmd-d   \\
+                 --skeleton ./skel.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1112"
+( $at_check_trace; bison -Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \
+                 -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \
+                 -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \
+                 -Fvar-fd=cmd-f -Dvar-fd=cmd-d   \
+                 --skeleton ./skel.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1112"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1117: cat input.tab.c"
+at_fn_check_prepare_trace "input.at:1117"
+( $at_check_trace; cat input.tab.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "var-dd: cmd-d2
+var-ff: cmd-f2
+var-dfg: cmd-f
+var-fd: cmd-d
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1117"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input-dg.y <<'_ATEOF'
+%define var "gram"
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1129: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dvar=cmd-d input-dg.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dvar=cmd-d input-dg.y" "input.at:1129"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Dvar=cmd-d input-dg.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-dg.y:1.9-11: error: %define variable 'var' redefined
+<command line>:1:      previous definition
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1129"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input-dg.y <<'_ATEOF'
+%define var "gram"
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1139: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -Dvar=cmd-d input-dg.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -Dvar=cmd-d input-dg.y" "input.at:1139"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -Dvar=cmd-d input-dg.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-dg.y:1.9-11: error: %define variable 'var' redefined
+ %define var \"gram\"
+         ^^^
+<command line>:2:      previous definition
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input-unused.y <<'_ATEOF'
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1150: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dunused-d -Funused-f input-unused.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dunused-d -Funused-f input-unused.y" "input.at:1150"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Dunused-d -Funused-f input-unused.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "<command line>:1: error: %define variable 'unused-d' is not used
+<command line>:2: error: %define variable 'unused-f' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_26
+#AT_START_27
+at_fn_group_banner 27 'input.at:1161' \
+  "%define Boolean variables" "                      " 1
+at_xfail=no
+(
+  $as_echo "27. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >Input.y <<'_ATEOF'
+%language "Java"
+%define public "maybe"
+%define parser_class_name "Input"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1171: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison Input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison Input.y" "input.at:1171"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison Input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Input.y:2.9-14: error: invalid value for %define Boolean variable 'public'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_27
+#AT_START_28
+at_fn_group_banner 28 'input.at:1181' \
+  "%define enum variables" "                         " 1
+at_xfail=no
+(
+  $as_echo "28. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Front-end.
+cat >input.y <<'_ATEOF'
+%define lr.default-reductions bogus
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1189: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1189"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-29: error: invalid value for %define variable 'lr.default-reductions': 'bogus'
+input.y:1.9-29:     accepted value: 'most'
+input.y:1.9-29:     accepted value: 'consistent'
+input.y:1.9-29:     accepted value: 'accepting'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Back-end.
+# FIXME: these should be indented, but we shouldn't mess with the m4 yet
+cat >input.y <<'_ATEOF'
+%define api.push-pull neither
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1203: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1203"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-21: error: invalid value for %define variable 'api.push-pull': 'neither'
+input.y:1.9-21: error: accepted value: 'pull'
+input.y:1.9-21: error: accepted value: 'push'
+input.y:1.9-21: error: accepted value: 'both'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1203"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_28
+#AT_START_29
+at_fn_group_banner 29 'input.at:1216' \
+  "%define backward compatibility" "                 " 1
+at_xfail=no
+(
+  $as_echo "29. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# The error messages tell us whether underscores in these variables are
+# being converted to dashes.
+
+cat >input.y <<'_ATEOF'
+%define api.push_pull "neither"
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1226: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1226"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-21: error: invalid value for %define variable 'api.push-pull': 'neither'
+input.y:1.9-21: error: accepted value: 'pull'
+input.y:1.9-21: error: accepted value: 'push'
+input.y:1.9-21: error: accepted value: 'both'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input.y <<'_ATEOF'
+%define lr.keep_unreachable_states maybe
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1238: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1238"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-34: error: invalid value for %define Boolean variable 'lr.keep-unreachable-states'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1238"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input.y <<'_ATEOF'
+%define foo_bar "baz"
+%%
+start: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1247: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1247"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-15: error: %define variable 'foo_bar' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1247"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_29
+#AT_START_30
+at_fn_group_banner 30 'input.at:1257' \
+  "Unused %define api.pure" "                        " 1
+at_xfail=no
+(
+  $as_echo "30. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# AT_CHECK_API_PURE(DECLS, VALUE)
+# -------------------------------
+# Make sure Bison reports that `%define api.pure VALUE' is unused when DECLS
+# are specified.
+
+
+
+cat >input.y <<'_ATEOF'
+%define api.pure
+%language "c++" %defines
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1277: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1277"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-16: error: %define variable 'api.pure' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1277"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%define api.pure false
+%language "c++" %defines
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1278: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1278"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-16: error: %define variable 'api.pure' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1278"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%define api.pure ""
+%language "c++" %defines %glr-parser
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1279: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1279"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-16: error: %define variable 'api.pure' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%define api.pure false
+%language "c++" %defines %glr-parser
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1280: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1280"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-16: error: %define variable 'api.pure' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1280"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%define api.pure true
+%language "java"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1281: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1281"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-16: error: %define variable 'api.pure' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1281"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%define api.pure false
+%language "java"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1282: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1282"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-16: error: %define variable 'api.pure' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1282"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_30
+#AT_START_31
+at_fn_group_banner 31 'input.at:1290' \
+  "C++ namespace reference errors" "                 " 1
+at_xfail=no
+(
+  $as_echo "31. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# AT_CHECK_NAMESPACE_ERROR(NAMESPACE-DECL, ERROR, [ERROR], ...)
+# -------------------------------------------------------------
+# Make sure Bison reports all ERROR's for %define namespace "NAMESPACE-DECL".
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace ""
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1311: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1311"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference is empty
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1311"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace " 		  	 	"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1313: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1313"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference is empty
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1313"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace "foo::::bar"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1315: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1315"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference has consecutive \"::\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1315"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace "foo:: 	::bar"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1317: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1317"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference has consecutive \"::\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1317"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace "::::bar"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1319: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1319"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference has consecutive \"::\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1319"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace ":: ::bar"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1321: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1321"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference has consecutive \"::\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1321"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace "foo::bar::	::"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1323: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1323"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference has consecutive \"::\"
+input.y:3.9-17: error: namespace reference has a trailing \"::\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1323"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace "foo::bar::"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1326: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1326"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference has a trailing \"::\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1326"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace "foo::bar:: 	"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1328: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1328"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference has a trailing \"::\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1328"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >input.y <<'_ATEOF'
+%language "C++"
+%defines
+%define namespace "::"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1330: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1330"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.9-17: error: namespace reference has a trailing \"::\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_31
+#AT_START_32
+at_fn_group_banner 32 'input.at:1346' \
+  "Bad character literals" "                         " 1
+at_xfail=no
+(
+  $as_echo "32. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >empty.y <<'_ATEOF'
+%%
+start: '';
+start: '
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1353: \$PERL -e \"print 'start: \\'';\" >> empty.y || exit 77"
+at_fn_check_prepare_dynamic "$PERL -e \"print 'start: \\'';\" >> empty.y || exit 77" "input.at:1353"
+( $at_check_trace; $PERL -e "print 'start: \'';" >> empty.y || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1353"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1355: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison empty.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison empty.y" "input.at:1355"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison empty.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "empty.y:2.8-9: warning: empty character literal
+empty.y:3.8-4.0: warning: empty character literal
+empty.y:3.8-4.0: error: missing \"'\" at end of line
+empty.y:4.8: warning: empty character literal
+empty.y:4.8: error: missing \"'\" at end of file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1355"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >two.y <<'_ATEOF'
+%%
+start: 'ab';
+start: 'ab
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1368: \$PERL -e \"print 'start: \\'ab';\" >> two.y || exit 77"
+at_fn_check_prepare_dynamic "$PERL -e \"print 'start: \\'ab';\" >> two.y || exit 77" "input.at:1368"
+( $at_check_trace; $PERL -e "print 'start: \'ab';" >> two.y || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1368"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1370: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison two.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison two.y" "input.at:1370"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison two.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "two.y:2.8-11: warning: extra characters in character literal
+two.y:3.8-4.0: warning: extra characters in character literal
+two.y:3.8-4.0: error: missing \"'\" at end of line
+two.y:4.8-10: warning: extra characters in character literal
+two.y:4.8-10: error: missing \"'\" at end of file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1370"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >three.y <<'_ATEOF'
+%%
+start: 'abc';
+start: 'abc
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1383: \$PERL -e \"print 'start: \\'abc';\" >> three.y || exit 77"
+at_fn_check_prepare_dynamic "$PERL -e \"print 'start: \\'abc';\" >> three.y || exit 77" "input.at:1383"
+( $at_check_trace; $PERL -e "print 'start: \'abc';" >> three.y || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1383"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1385: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison three.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison three.y" "input.at:1385"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison three.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "three.y:2.8-12: warning: extra characters in character literal
+three.y:3.8-4.0: warning: extra characters in character literal
+three.y:3.8-4.0: error: missing \"'\" at end of line
+three.y:4.8-11: warning: extra characters in character literal
+three.y:4.8-11: error: missing \"'\" at end of file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1385"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_32
+#AT_START_33
+at_fn_group_banner 33 'input.at:1399' \
+  "Bad escapes in literals" "                        " 1
+at_xfail=no
+(
+  $as_echo "33. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+start: '\777' '\0' '\xfff' '\x0'
+       '\uffff' '\u0000' '\Uffffffff' '\U00000000'
+       '\ ' '\A';
+_ATEOF
+
+
+# It is not easy to create special characters, we cannot even trust tr.
+# Beside we cannot even expect "echo '\0'" to output two characters
+# (well three with \n): at least Bash 3.2 converts the two-character
+# sequence "\0" into a single NUL character.
+{ set +x
+$as_echo "$at_srcdir/input.at:1412: \$PERL -e 'print \"start: \\\"\\\\\\t\\\\\\f\\\\\\0\\\\\\1\\\" ;\";' >> input.y \\
+           || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1412"
+( $at_check_trace; $PERL -e 'print "start: \"\\\t\\\f\\\0\\\1\" ;";' >> input.y \
+           || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1412"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1415: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "input.at:1415"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:2.9-12: error: invalid number after \\-escape: 777
+input.y:2.8-13: warning: empty character literal
+input.y:2.16-17: error: invalid number after \\-escape: 0
+input.y:2.15-18: warning: empty character literal
+input.y:2.21-25: error: invalid number after \\-escape: xfff
+input.y:2.20-26: warning: empty character literal
+input.y:2.29-31: error: invalid number after \\-escape: x0
+input.y:2.28-32: warning: empty character literal
+input.y:3.9-14: error: invalid number after \\-escape: uffff
+input.y:3.8-15: warning: empty character literal
+input.y:3.18-23: error: invalid number after \\-escape: u0000
+input.y:3.17-24: warning: empty character literal
+input.y:3.27-36: error: invalid number after \\-escape: Uffffffff
+input.y:3.26-37: warning: empty character literal
+input.y:3.40-49: error: invalid number after \\-escape: U00000000
+input.y:3.39-50: warning: empty character literal
+input.y:4.9-10: error: invalid character after \\-escape: ' '
+input.y:4.8-11: warning: empty character literal
+input.y:4.14-15: error: invalid character after \\-escape: A
+input.y:4.13-16: warning: empty character literal
+input.y:5.9-16: error: invalid character after \\-escape: \\t
+input.y:5.17: error: invalid character after \\-escape: \\f
+input.y:5.18: error: invalid character after \\-escape: \\0
+input.y:5.19: error: invalid character after \\-escape: \\001
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_33
+#AT_START_34
+at_fn_group_banner 34 'input.at:1448' \
+  "LAC: Errors for %define" "                        " 1
+at_xfail=no
+(
+  $as_echo "34. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+start: ;
+_ATEOF
+
+
+# parse.lac.* options are useless if LAC isn't actually activated.
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1456: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dparse.lac.es-capacity-initial=1 input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dparse.lac.es-capacity-initial=1 input.y" "input.at:1456"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Dparse.lac.es-capacity-initial=1 input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "<command line>:1: error: %define variable 'parse.lac.es-capacity-initial' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1456"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1460: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dparse.lac.memory-trace=full input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dparse.lac.memory-trace=full input.y" "input.at:1460"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Dparse.lac.memory-trace=full input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "<command line>:1: error: %define variable 'parse.lac.memory-trace' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1460"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_34
+#AT_START_35
+at_fn_group_banner 35 'input.at:1471' \
+  "-Werror is not affected by -Wnone and -Wall" "    " 1
+at_xfail=no
+(
+  $as_echo "35. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+foo-bar: ;
+_ATEOF
+
+
+# -Werror is not enabled by -Wall or equivalent.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Wall input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1479"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Wall input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wall input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wall input.y" "input.at:1479"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wall input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1479"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1479"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1479: bison -Wall input.y"
+at_fn_check_prepare_trace "input.at:1479"
+( $at_check_trace; bison -Wall input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wall input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wall input.y -Werror" "input.at:1479"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wall input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1479"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wall input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wall input.y --warnings=error" "input.at:1479"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wall input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wall input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wall input.y -Wnone -Werror" "input.at:1479"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wall input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1479: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wall input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wall input.y --warnings=none -Werror" "input.at:1479"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wall input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -W input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1482"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -W input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -W input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -W input.y" "input.at:1482"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -W input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1482"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1482"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1482: bison -W input.y"
+at_fn_check_prepare_trace "input.at:1482"
+( $at_check_trace; bison -W input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -W input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -W input.y -Werror" "input.at:1482"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -W input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1482"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -W input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -W input.y --warnings=error" "input.at:1482"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -W input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -W input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -W input.y -Wnone -Werror" "input.at:1482"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -W input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1482: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -W input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -W input.y --warnings=none -Werror" "input.at:1482"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -W input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Wno-none input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1485"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Wno-none input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-none input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-none input.y" "input.at:1485"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-none input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1485"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1485"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1485: bison -Wno-none input.y"
+at_fn_check_prepare_trace "input.at:1485"
+( $at_check_trace; bison -Wno-none input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wno-none input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wno-none input.y -Werror" "input.at:1485"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wno-none input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1485"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wno-none input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wno-none input.y --warnings=error" "input.at:1485"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wno-none input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wno-none input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wno-none input.y -Wnone -Werror" "input.at:1485"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wno-none input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1485: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wno-none input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wno-none input.y --warnings=none -Werror" "input.at:1485"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wno-none input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+# -Werror is not disabled by -Wnone or equivalent.
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1490: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Werror,none,yacc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Werror,none,yacc input.y" "input.at:1490"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Werror,none,yacc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1490"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1491: sed 's/^.*bison:/bison:/' stderr"
+at_fn_check_prepare_trace "input.at:1491"
+( $at_check_trace; sed 's/^.*bison:/bison:/' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "bison: warnings being treated as errors
+input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+mv stderr experr
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1496: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Werror,no-all,yacc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Werror,no-all,yacc input.y" "input.at:1496"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Werror,no-all,yacc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1496"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_35
+#AT_START_36
+at_fn_group_banner 36 'input.at:1505' \
+  "%name-prefix and %define api.prefix are incompatible" "" 1
+at_xfail=no
+(
+  $as_echo "36. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# AT_TEST(DIRECTIVES, OPTIONS, ERROR-LOCATION)
+# --------------------------------------------
+
+
+cat >input.y <<'_ATEOF'
+%define api.prefix foo %name-prefix "bar"
+%%
+exp:;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1520: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison  input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison  input.y" "input.at:1520"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison  input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-18: error: '%name-prefix' and '%define api.prefix' cannot be used together
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1520"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input.y <<'_ATEOF'
+
+%%
+exp:;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1521: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dapi.prefix=foo -p bar input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dapi.prefix=foo -p bar input.y" "input.at:1521"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Dapi.prefix=foo -p bar input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "<command line>:1: error: '%name-prefix' and '%define api.prefix' cannot be used together
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input.y <<'_ATEOF'
+%name-prefix "bar"
+%%
+exp:;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1522: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dapi.prefix=foo input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Dapi.prefix=foo input.y" "input.at:1522"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Dapi.prefix=foo input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "<command line>:1: error: '%name-prefix' and '%define api.prefix' cannot be used together
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1522"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input.y <<'_ATEOF'
+%define api.prefix foo
+%%
+exp:;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/input.at:1523: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -p bar input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -p bar input.y" "input.at:1523"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -p bar input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:1.9-18: error: '%name-prefix' and '%define api.prefix' cannot be used together
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1523"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_36
+#AT_START_37
+at_fn_group_banner 37 'input.at:1534' \
+  "Stray \$ or @" "                                   " 1
+at_xfail=no
+(
+  $as_echo "37. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Give %printer and %destructor "<*> exp TOK" instead of "<*>" to
+# check that the warnings are reported once, not three times.
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%token TOK
+%destructor     { $%; @%; } <*> exp TOK;
+%initial-action { $%; @%; };
+%printer        { $%; @%; } <*> exp TOK;
+%%
+exp: TOK        { $%; @%; $$ = $1; };
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1548"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "input.at:1548"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1548"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1548"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1548: bison input.y"
+at_fn_check_prepare_trace "input.at:1548"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:10.19: warning: stray '\$'
+input.y:10.23: warning: stray '@'
+input.y:11.19: warning: stray '\$'
+input.y:11.23: warning: stray '@'
+input.y:12.19: warning: stray '\$'
+input.y:12.23: warning: stray '@'
+input.y:14.19: warning: stray '\$'
+input.y:14.23: warning: stray '@'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror" "input.at:1548"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:10.19: warning: stray '$'
+input.y:10.23: warning: stray '@'
+input.y:11.19: warning: stray '$'
+input.y:11.23: warning: stray '@'
+input.y:12.19: warning: stray '$'
+input.y:12.23: warning: stray '@'
+input.y:14.19: warning: stray '$'
+input.y:14.23: warning: stray '@'
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1548"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error" "input.at:1548"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror" "input.at:1548"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1548: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror" "input.at:1548"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_37
+#AT_START_38
+at_fn_group_banner 38 'input.at:1568' \
+  "Code injection" "                                 " 1
+at_xfail=no
+(
+  $as_echo "38. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+# AT_TEST([MACRO])
+# ----------------
+# Try to have MACRO be run by bison.
+
+
+cat >input.y <<'_ATEOF'
+%type <m4_errprintn(DEAD %type)> exp
+%token <m4_errprintn(DEAD %token)> a
+%initial-action
+{
+  $$;
+  $<m4_errprintn(DEAD %initial-action)>$
+};
+%printer
+{
+  $$
+  $<m4_errprintn(DEAD %printer)>$
+} <> <*>;
+%lex-param
+{
+  m4_errprintn(DEAD %lex-param)
+};
+%parse-param
+{
+  m4_errprintn(DEAD %parse-param)
+};
+%%
+exp:
+  a a[last]
+  {
+    $$;
+    $1;
+    $<m4_errprintn(DEAD action 1)>$
+    $<m4_errprintn(DEAD action 2)>1
+    $<m4_errprintn(DEAD action 3)>last
+    $<m4_errprintn(DEAD action 4)>0
+    ;
+  };
+_ATEOF
+
+
+# FIXME: Provide a means to iterate over all the skeletons.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d               input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d               input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d               input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d               input.y" "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d               input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1619: bison -d               input.y"
+at_fn_check_prepare_trace "input.at:1619"
+( $at_check_trace; bison -d               input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -S glr.c      input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -S glr.c      input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.c      input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.c      input.y" "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.c      input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1619: bison -d -S glr.c      input.y"
+at_fn_check_prepare_trace "input.at:1619"
+( $at_check_trace; bison -d -S glr.c      input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -S lalr1.cc   input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -S lalr1.cc   input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S lalr1.cc   input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S lalr1.cc   input.y" "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S lalr1.cc   input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1619: bison -d -S lalr1.cc   input.y"
+at_fn_check_prepare_trace "input.at:1619"
+( $at_check_trace; bison -d -S lalr1.cc   input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -S glr.cc     input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -S glr.cc     input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.cc     input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.cc     input.y" "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.cc     input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1619: bison -d -S glr.cc     input.y"
+at_fn_check_prepare_trace "input.at:1619"
+( $at_check_trace; bison -d -S glr.cc     input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot    -S lalr1.java input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot    -S lalr1.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml    -S lalr1.java input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml    -S lalr1.java input.y" "input.at:1619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml    -S lalr1.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1619: bison    -S lalr1.java input.y"
+at_fn_check_prepare_trace "input.at:1619"
+( $at_check_trace; bison    -S lalr1.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input.y <<'_ATEOF'
+%type <]m4_errprintn(DEAD %type)> exp
+%token <]m4_errprintn(DEAD %token)> a
+%initial-action
+{
+  $$;
+  $<]m4_errprintn(DEAD %initial-action)>$
+};
+%printer
+{
+  $$
+  $<]m4_errprintn(DEAD %printer)>$
+} <> <*>;
+%lex-param
+{
+  ]m4_errprintn(DEAD %lex-param)
+};
+%parse-param
+{
+  ]m4_errprintn(DEAD %parse-param)
+};
+%%
+exp:
+  a a[last]
+  {
+    $$;
+    $1;
+    $<]m4_errprintn(DEAD action 1)>$
+    $<]m4_errprintn(DEAD action 2)>1
+    $<]m4_errprintn(DEAD action 3)>last
+    $<]m4_errprintn(DEAD action 4)>0
+    ;
+  };
+_ATEOF
+
+
+# FIXME: Provide a means to iterate over all the skeletons.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d               input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d               input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d               input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d               input.y" "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d               input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1620: bison -d               input.y"
+at_fn_check_prepare_trace "input.at:1620"
+( $at_check_trace; bison -d               input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -S glr.c      input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -S glr.c      input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.c      input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.c      input.y" "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.c      input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1620: bison -d -S glr.c      input.y"
+at_fn_check_prepare_trace "input.at:1620"
+( $at_check_trace; bison -d -S glr.c      input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -S lalr1.cc   input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -S lalr1.cc   input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S lalr1.cc   input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S lalr1.cc   input.y" "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S lalr1.cc   input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1620: bison -d -S lalr1.cc   input.y"
+at_fn_check_prepare_trace "input.at:1620"
+( $at_check_trace; bison -d -S lalr1.cc   input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -S glr.cc     input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -S glr.cc     input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.cc     input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.cc     input.y" "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -S glr.cc     input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1620: bison -d -S glr.cc     input.y"
+at_fn_check_prepare_trace "input.at:1620"
+( $at_check_trace; bison -d -S glr.cc     input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot    -S lalr1.java input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot    -S lalr1.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml    -S lalr1.java input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml    -S lalr1.java input.y" "input.at:1620"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml    -S lalr1.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/input.at:1620: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "input.at:1620"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/input.at:1620: bison    -S lalr1.java input.y"
+at_fn_check_prepare_trace "input.at:1620"
+( $at_check_trace; bison    -S lalr1.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/input.at:1620"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_38
+#AT_START_39
+at_fn_group_banner 39 'named-refs.at:21' \
+  "Tutorial calculator" "                            " 2
+at_xfail=no
+(
+  $as_echo "39. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%{
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+typedef int semantic_value;
+FILE *input;
+static semantic_value global_result = 0;
+static int global_count = 0;
+static int power (int base, int exponent);
+static void yyerror ( const char *msg);
+static int yylex (void);
+%}
+
+%union
+{
+  semantic_value ival;
+};
+
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '='   /* comparison	       */
+%left '-' '+'
+%left '*' '/'
+%left NEG       /* negation--unary minus */
+%right '^'      /* exponentiation        */
+
+%%
+input:
+  line
+| input line         {}
+;
+
+line:
+  '\n'
+| exp '\n'           {}
+;
+
+exp:
+  NUM                { $$ = $NUM; }
+| exp[l] '=' exp[r]
+  {
+    if ($l != $r)
+      fprintf (stderr, "calc: error: %d != %d\n", $l, $r);
+    $$ = $l;
+  }
+| exp[x] '+' { $<ival>$ = $x; } [l] exp[r]  { $$ = $<ival>l + $r;    }
+| exp[l] '-' exp[r]  { $$ = $l - $r;        }
+| exp[l] '*' exp[r]  { $$ = $l * $r;        }
+| exp[l] '/' exp[r]  { $$ = $l / $r;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp[l] '^' exp[r]  { $$ = power ($l, $r); }
+| '(' exp[e] ')'     { $$ = $e;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int get_char (void)
+{
+  int res = getc (input);
+  return res;
+}
+
+static void unget_char (int c)
+{
+  ungetc (c, input);
+}
+
+static int read_signed_integer (void)
+{
+  int c = get_char ();
+  int sign = 1;
+  int n = 0;
+  if (c == '-')
+    {
+      c = get_char ();
+      sign = -1;
+    }
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char ();
+    }
+  unget_char ( c);
+  return sign * n;
+}
+
+static int
+yylex (void)
+{
+  int c;
+  /* Skip white space.  */
+  while ((c = get_char ()) == ' ' || c == '\t') {}
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char ( c);
+      (yylval).ival = read_signed_integer ();
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+
+static int power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+int main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+  status = yyparse ();
+  fclose (input);
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+cat >input.txt <<'_ATEOF'
+
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+-1^2 = -1
+(-1)^2 = 1
+---1 = -1
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:184: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o test.c test.y"
+at_fn_check_prepare_notrace 'an embedded newline' "named-refs.at:184"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:184"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:184: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y" "named-refs.at:184"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:184"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:184: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "named-refs.at:184"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:184"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:184: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "named-refs.at:184"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:184"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:184: bison -o test.c test.y"
+at_fn_check_prepare_trace "named-refs.at:184"
+( $at_check_trace; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:184"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:185: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "named-refs.at:185"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:185"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:185: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o test test.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o test test.c $LIBS" "named-refs.at:185"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o test test.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:185"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:186:  \$PREPARSER ./test input.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./test input.txt" "named-refs.at:186"
+( $at_check_trace;  $PREPARSER ./test input.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:186"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:186: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "named-refs.at:186"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:186"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_39
+#AT_START_40
+at_fn_group_banner 40 'named-refs.at:195' \
+  "Undefined and ambiguous references" "             " 2
+at_xfail=no
+(
+  $as_echo "40. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%{
+static int power (int base, int exponent);
+static void yyerror ( const char *msg);
+static int yylex (void);
+%}
+
+%union
+{
+  int ival;
+};
+
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '='   /* comparison	       */
+%left '-' '+'
+%left '*' '/'
+%left NEG       /* negation--unary minus */
+%right '^'      /* exponentiation        */
+
+%%
+input:
+  line
+| input line         {}
+;
+
+line:
+  '\n'
+| exp '\n'           {}
+;
+
+exp:
+  NUM { $$ = $NUM; }
+| exp[l] '=' exp[r]
+  {
+    if ($l != $r)
+      fprintf (stderr, "calc: error: %d != %d\n", $l, $r);
+    $$ = $l;
+  }
+| exp[x] '+' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>lo9 + $r; }
+| exp[x] '-' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>exp - $r; }
+| exp[x] '*' { $<ival>$ = $x; } [l] exp[r] { $$ = $l * $r; }
+| exp[l] '/' exp[r]  { $$ = $l / $r;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp[l] '^' exp[r]  { $$ = power ($l, $r12); }
+| '(' exp ')'        { $$ = $expo;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+_ATEOF
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:253: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y" "named-refs.at:253"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:50.51-60: error: invalid reference: '\$<ival>lo9'
+test.y:50.3-68:      symbol not found in production: lo9
+test.y:51.51-60: warning: misleading reference: '\$<ival>exp'
+test.y:42.1-3:       refers to: \$exp at \$\$
+test.y:51.7:         possibly meant: \$x, hiding \$exp at \$1
+test.y:51.41:        possibly meant: \$r, hiding \$exp at \$4
+test.y:52.51-52: error: \$l of 'exp' has no declared type
+test.y:55.40-43: error: invalid reference: '\$r12'
+test.y:55.3-47:      symbol not found in production: r12
+test.y:56.29-33: error: invalid reference: '\$expo'
+test.y:56.3-46:      symbol not found in production: expo
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:253"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_40
+#AT_START_41
+at_fn_group_banner 41 'named-refs.at:271' \
+  "Misleading references" "                          " 2
+at_xfail=no
+(
+  $as_echo "41. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%%
+start: foo foo.bar { $foo.bar; }
+foo: '1'
+foo.bar: '2'
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o test.c test.y"
+at_fn_check_prepare_notrace 'an embedded newline' "named-refs.at:279"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y" "named-refs.at:279"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "named-refs.at:279"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "named-refs.at:279"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:279: bison -o test.c test.y"
+at_fn_check_prepare_trace "named-refs.at:279"
+( $at_check_trace; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:11.22-29: warning: misleading reference: '\$foo.bar'
+test.y:11.8-10:      refers to: \$foo at \$1
+test.y:11.12-18:     possibly meant: \$[foo.bar] at \$2
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y -Werror" "named-refs.at:279"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+test.y:11.22-29: warning: misleading reference: '$foo.bar'
+test.y:11.8-10:      refers to: $foo at $1
+test.y:11.12-18:     possibly meant: $[foo.bar] at $2
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "named-refs.at:279"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y --warnings=error" "named-refs.at:279"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y -Wnone -Werror" "named-refs.at:279"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:279: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y --warnings=none -Werror" "named-refs.at:279"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_41
+#AT_START_42
+at_fn_group_banner 42 'named-refs.at:288' \
+  "Many kinds of errors" "                           " 2
+at_xfail=no
+(
+  $as_echo "42. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%token IDENT
+%token NUMBER
+%token ASSIGNOP
+%token IF
+%token IF1
+%token THEN
+%token ELSE
+%token FI
+%token WHILE
+%token DO
+%token OD
+%start program
+%%
+if_stmt1: IF expr[cond] THEN stmt[then] ELSE stmt.list[else] FI
+          { $if_stmt1 = new IfStmt($cond1, $then.f1, $else); };
+if_stmt2: IF expr[cond] THEN stmt[then] FI
+          { $if_stmt2 = new IfStmt($cond, $stmt.field, 0); };
+if_stmt3: IF expr[cond] THEN stmt.list FI
+          { $if_stmt3 = new IfStmt($cond, $stmt.list, 0); };
+if_stmt4: IF expr[cond] THEN stmt[xyz] ELSE stmt[xyz] FI
+          { $if_stmt4 = new IfStmt($cond, $xyz, $cond); };
+if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+          { $if_stmt5 = new IfStmt($cond, $stmt.list, $else); };
+if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+          { $if_stmt6 = new IfStmt($cond, $stmt.list.field, $else); };
+if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+          { $if_stmt7 = new IfStmt($cond, $[stmt.list].field, $else); };
+if_stmt8: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+          { $if_stmt8 = new IfStmt($cond, $then.1, $else); };
+if_stmt9: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+          { $if_stmt9 = new IfStmt($cond, $then.1.field, $else); };
+if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI
+          { $if_stmt10 = new IfStmt($cond, $stmt.x, 0); };
+if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+          { $if-stmt-a = new IfStmt($cond, $then, $else); };
+if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI
+          { $[if-stmt-b] = new IfStmt($cond, $then-a.f, $else); };
+program: stmt.list;
+stmt.list:  stmt ';' stmt.list { $3->insert($stmt); $$ = $3; }
+        |   stmt ';' { SL = new StmtList();  SL->insert($1); $$ = SL; }
+        ;
+stmt:  assign_stmt { $$ = $1; }
+    |  if_stmt { $$ = $1; }
+    |  if_stmt1 { $$ = $1; }
+    |  while_stmt { $$ = $1; }
+    ;
+assign_stmt: IDENT ASSIGNOP expr
+       { $$ = new AssignStmt(string($1),$3); };
+if_stmt: IF expr[cond] THEN stmt.list FI
+       { $if_stmt = new IfStmt($cond, $[stmt.list], 0); };
+while_stmt[res]: WHILE expr DO stmt.list OD
+       { $res = new WhileStmt($[expr], $[stmt.list]); };
+expr: expr '+' term   { $$ = new Plus($1,$3); }
+    | expr '-' term   { $$ = new Minus($1,$3); }
+    | term            { $$ = $1; }
+    ;
+term: term '*' factor   { $$ = new Times($1,$3); }
+    | factor            { $$ = $1; }
+    ;
+factor:     '(' expr ')'  { $$ = $2; }
+    |       NUMBER { $$ = new Number($1); }
+    |       IDENT { $$ = new Ident(string($1)); }
+    ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:355: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y" "named-refs.at:355"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:24.36-41: error: invalid reference: '\$cond1'
+test.y:23.11-24.62:  symbol not found in production: cond1
+test.y:26.43-53: error: invalid reference: '\$stmt.field'
+test.y:25.11-26.60:  symbol not found in production: stmt
+test.y:25.35-38:     possibly meant: \$then.field, hiding \$stmt.field at \$4
+test.y:28.43-52: error: invalid reference: '\$stmt.list'
+test.y:27.11-28.59:  symbol not found in production: stmt
+test.y:27.30-38:     possibly meant: \$[stmt.list] at \$4
+test.y:30.43-46: error: ambiguous reference: '\$xyz'
+test.y:29.35-37:     refers to: \$xyz at \$4
+test.y:29.50-52:     refers to: \$xyz at \$6
+test.y:32.43-52: error: invalid reference: '\$stmt.list'
+test.y:31.11-32.63:  symbol not found in production: stmt
+test.y:31.40-43:     possibly meant: \$then, hiding \$[stmt.list] at \$4
+test.y:31.61-64:     possibly meant: \$else, hiding \$[stmt.list] at \$6
+test.y:34.43-58: error: invalid reference: '\$stmt.list.field'
+test.y:33.11-34.69:  symbol not found in production: stmt
+test.y:33.40-43:     possibly meant: \$then.field, hiding \$[stmt.list].field at \$4
+test.y:33.61-64:     possibly meant: \$else.field, hiding \$[stmt.list].field at \$6
+test.y:36.43-54: error: invalid reference: '\$[stmt.list]'
+test.y:35.11-36.71:  symbol not found in production: stmt.list
+test.y:35.40-43:     possibly meant: \$then, hiding \$[stmt.list] at \$4
+test.y:35.61-64:     possibly meant: \$else, hiding \$[stmt.list] at \$6
+test.y:38.43-49: error: invalid reference: '\$then.1'
+test.y:37.11-38.60:  symbol not found in production: then
+test.y:37.40-45:     possibly meant: \$[then.1] at \$4
+test.y:40.43-55: error: invalid reference: '\$then.1.field'
+test.y:39.11-40.66:  symbol not found in production: then
+test.y:39.40-45:     possibly meant: \$[then.1].field at \$4
+test.y:42.44-50: error: invalid reference: '\$stmt.x'
+test.y:41.12-42.57:  symbol not found in production: stmt
+test.y:41.36-41:     possibly meant: \$[stmt.x].x, hiding \$stmt.x at \$4
+test.y:41.36-41:     possibly meant: \$[stmt.x] at \$4
+test.y:44.13-22: error: invalid reference: '\$if-stmt-a'
+test.y:43.12-44.59:  symbol not found in production: if
+test.y:43.1-9:       possibly meant: \$[if-stmt-a] at \$\$
+test.y:46.46-54: error: invalid reference: '\$then-a.f'
+test.y:45.12-46.65:  symbol not found in production: then
+test.y:45.41-46:     possibly meant: \$[then-a].f at \$4
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:355"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:397: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o test.c test.y" "named-refs.at:397"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:24.36-41: error: invalid reference: '\$cond1'
+           { \$if_stmt1 = new IfStmt(\$cond1, \$then.f1, \$else); };
+                                    ^^^^^^
+test.y:23.11-24.62:  symbol not found in production: cond1
+ if_stmt1: IF expr[cond] THEN stmt[then] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:26.43-53: error: invalid reference: '\$stmt.field'
+           { \$if_stmt2 = new IfStmt(\$cond, \$stmt.field, 0); };
+                                           ^^^^^^^^^^^
+test.y:25.11-26.60:  symbol not found in production: stmt
+ if_stmt2: IF expr[cond] THEN stmt[then] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:25.35-38:     possibly meant: \$then.field, hiding \$stmt.field at \$4
+ if_stmt2: IF expr[cond] THEN stmt[then] FI
+                                   ^^^^
+test.y:28.43-52: error: invalid reference: '\$stmt.list'
+           { \$if_stmt3 = new IfStmt(\$cond, \$stmt.list, 0); };
+                                           ^^^^^^^^^^
+test.y:27.11-28.59:  symbol not found in production: stmt
+ if_stmt3: IF expr[cond] THEN stmt.list FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:27.30-38:     possibly meant: \$[stmt.list] at \$4
+ if_stmt3: IF expr[cond] THEN stmt.list FI
+                              ^^^^^^^^^
+test.y:30.43-46: error: ambiguous reference: '\$xyz'
+           { \$if_stmt4 = new IfStmt(\$cond, \$xyz, \$cond); };
+                                           ^^^^
+test.y:29.35-37:     refers to: \$xyz at \$4
+ if_stmt4: IF expr[cond] THEN stmt[xyz] ELSE stmt[xyz] FI
+                                   ^^^
+test.y:29.50-52:     refers to: \$xyz at \$6
+ if_stmt4: IF expr[cond] THEN stmt[xyz] ELSE stmt[xyz] FI
+                                                  ^^^
+test.y:32.43-52: error: invalid reference: '\$stmt.list'
+           { \$if_stmt5 = new IfStmt(\$cond, \$stmt.list, \$else); };
+                                           ^^^^^^^^^^
+test.y:31.11-32.63:  symbol not found in production: stmt
+ if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:31.40-43:     possibly meant: \$then, hiding \$[stmt.list] at \$4
+ if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                        ^^^^
+test.y:31.61-64:     possibly meant: \$else, hiding \$[stmt.list] at \$6
+ if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                                             ^^^^
+test.y:34.43-58: error: invalid reference: '\$stmt.list.field'
+           { \$if_stmt6 = new IfStmt(\$cond, \$stmt.list.field, \$else); };
+                                           ^^^^^^^^^^^^^^^^
+test.y:33.11-34.69:  symbol not found in production: stmt
+ if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:33.40-43:     possibly meant: \$then.field, hiding \$[stmt.list].field at \$4
+ if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                        ^^^^
+test.y:33.61-64:     possibly meant: \$else.field, hiding \$[stmt.list].field at \$6
+ if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                                             ^^^^
+test.y:36.43-54: error: invalid reference: '\$[stmt.list]'
+           { \$if_stmt7 = new IfStmt(\$cond, \$[stmt.list].field, \$else); };
+                                           ^^^^^^^^^^^^
+test.y:35.11-36.71:  symbol not found in production: stmt.list
+ if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:35.40-43:     possibly meant: \$then, hiding \$[stmt.list] at \$4
+ if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                        ^^^^
+test.y:35.61-64:     possibly meant: \$else, hiding \$[stmt.list] at \$6
+ if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+                                                             ^^^^
+test.y:38.43-49: error: invalid reference: '\$then.1'
+           { \$if_stmt8 = new IfStmt(\$cond, \$then.1, \$else); };
+                                           ^^^^^^^
+test.y:37.11-38.60:  symbol not found in production: then
+ if_stmt8: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:37.40-45:     possibly meant: \$[then.1] at \$4
+ if_stmt8: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+                                        ^^^^^^
+test.y:40.43-55: error: invalid reference: '\$then.1.field'
+           { \$if_stmt9 = new IfStmt(\$cond, \$then.1.field, \$else); };
+                                           ^^^^^^^^^^^^^
+test.y:39.11-40.66:  symbol not found in production: then
+ if_stmt9: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:39.40-45:     possibly meant: \$[then.1].field at \$4
+ if_stmt9: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI
+                                        ^^^^^^
+test.y:42.44-50: error: invalid reference: '\$stmt.x'
+           { \$if_stmt10 = new IfStmt(\$cond, \$stmt.x, 0); };
+                                            ^^^^^^^
+test.y:41.12-42.57:  symbol not found in production: stmt
+ if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:41.36-41:     possibly meant: \$[stmt.x].x, hiding \$stmt.x at \$4
+ if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI
+                                    ^^^^^^
+test.y:41.36-41:     possibly meant: \$[stmt.x] at \$4
+ if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI
+                                    ^^^^^^
+test.y:44.13-22: error: invalid reference: '\$if-stmt-a'
+           { \$if-stmt-a = new IfStmt(\$cond, \$then, \$else); };
+             ^^^^^^^^^^
+test.y:43.12-44.59:  symbol not found in production: if
+ if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:43.1-9:       possibly meant: \$[if-stmt-a] at \$\$
+ if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI
+ ^^^^^^^^^
+test.y:46.46-54: error: invalid reference: '\$then-a.f'
+           { \$[if-stmt-b] = new IfStmt(\$cond, \$then-a.f, \$else); };
+                                              ^^^^^^^^^
+test.y:45.12-46.65:  symbol not found in production: then
+ if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+test.y:45.41-46:     possibly meant: \$[then-a].f at \$4
+ if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI
+                                         ^^^^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_42
+#AT_START_43
+at_fn_group_banner 43 'named-refs.at:521' \
+  "Missing identifiers in brackets" "                " 2
+at_xfail=no
+(
+  $as_echo "43. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%%
+start: foo[] bar
+  { s = $foo; }
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:528: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y" "named-refs.at:528"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:11.12: error: an identifier expected
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:528"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_43
+#AT_START_44
+at_fn_group_banner 44 'named-refs.at:535' \
+  "Redundant words in brackets" "                    " 2
+at_xfail=no
+(
+  $as_echo "44. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%%
+start: foo[ a d ] bar
+  { s = $foo; }
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:542: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y" "named-refs.at:542"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:11.15: error: unexpected identifier in bracketed name: 'd'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:542"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_44
+#AT_START_45
+at_fn_group_banner 45 'named-refs.at:549' \
+  "Comments in brackets" "                           " 2
+at_xfail=no
+(
+  $as_echo "45. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%%
+start: foo[/* comment */] bar
+  { s = $foo; }
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:556: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y" "named-refs.at:556"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:11.25: error: an identifier expected
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_45
+#AT_START_46
+at_fn_group_banner 46 'named-refs.at:563' \
+  "Stray symbols in brackets" "                      " 2
+at_xfail=no
+(
+  $as_echo "46. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%%
+start: foo[ % /* aaa */ *&-.+\000\001\002\377 ] bar
+  { s = $foo; }
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:570: \$PERL -pi -e 's/\\\\(\\d{3})/chr(oct(\$1))/ge' test.y || exit 77"
+at_fn_check_prepare_dynamic "$PERL -pi -e 's/\\\\(\\d{3})/chr(oct($1))/ge' test.y || exit 77" "named-refs.at:570"
+( $at_check_trace; $PERL -pi -e 's/\\(\d{3})/chr(oct($1))/ge' test.y || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:570"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:571: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y" "named-refs.at:571"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:11.13: error: invalid character in bracketed name: '%'
+test.y:11.25-27: error: invalid characters in bracketed name: '*&-'
+test.y:11.29-30: error: invalid characters in bracketed name: '+\\0\\001\\002\\377'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:571"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_46
+#AT_START_47
+at_fn_group_banner 47 'named-refs.at:580' \
+  "Redundant words in LHS brackets" "                " 2
+at_xfail=no
+(
+  $as_echo "47. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%%
+start[a s]: foo;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:586: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y" "named-refs.at:586"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:11.9: error: unexpected identifier in bracketed name: 's'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:586"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_47
+#AT_START_48
+at_fn_group_banner 48 'named-refs.at:595' \
+  "Factored LHS" "                                   " 2
+at_xfail=no
+(
+  $as_echo "48. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%%
+start[a]: "foo" | "bar";
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:601: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o test.c test.y"
+at_fn_check_prepare_notrace 'an embedded newline' "named-refs.at:601"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:601"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:601: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y" "named-refs.at:601"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:601"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:601: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "named-refs.at:601"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:601"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:601: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "named-refs.at:601"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:601"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:601: bison -o test.c test.y"
+at_fn_check_prepare_trace "named-refs.at:601"
+( $at_check_trace; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:601"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_48
+#AT_START_49
+at_fn_group_banner 49 'named-refs.at:606' \
+  "Unresolved references" "                          " 2
+at_xfail=no
+(
+  $as_echo "49. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%%
+stat:
+  sym_a sym_b { func($sym.field); }
+| sym_a sym_b { func($<aa>sym.field); }
+| sym_a sym_b { func($[sym.field]); }
+| sym_a sym_b { func($<aa>[sym.field]); }
+| sym_a sym_b { func($sym); }
+| sym_a sym_b { func($<aa>sym); }
+| sym_a sym_b { func($[sym]); } sym_a sym_b { func($<aa>[sym]); }
+;
+
+stat1:
+  sym_a sym_b { func($sym-field); }
+| sym_a sym_b { func($<aa>sym-field); }
+| sym_a sym_b { func($[sym-field]); }
+| sym_a sym_b { func($<aa>[sym-field]); }
+| sym_a sym_b { func($sym); }
+| sym_a sym_b { func($<aa>sym); }
+| sym_a sym_b { func($[sym]); } sym_a sym_b { func($<aa>[sym]); }
+;
+
+sym_a: 'a';
+sym_b: 'b';
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:633: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o test.c test.y" "named-refs.at:633"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o test.c test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:12.22-31: error: invalid reference: '\$sym.field'
+test.y:12.3-35:      symbol not found in production: sym
+test.y:13.22-35: error: invalid reference: '\$<aa>sym.field'
+test.y:13.3-39:      symbol not found in production: sym
+test.y:14.22-33: error: invalid reference: '\$[sym.field]'
+test.y:14.3-37:      symbol not found in production: sym.field
+test.y:15.22-37: error: invalid reference: '\$<aa>[sym.field]'
+test.y:15.3-41:      symbol not found in production: sym.field
+test.y:16.22-25: error: invalid reference: '\$sym'
+test.y:16.3-29:      symbol not found in production: sym
+test.y:17.22-29: error: invalid reference: '\$<aa>sym'
+test.y:17.3-33:      symbol not found in production: sym
+test.y:18.22-27: error: invalid reference: '\$[sym]'
+test.y:18.3-65:      symbol not found in production before \$3: sym
+test.y:18.52-61: error: invalid reference: '\$<aa>[sym]'
+test.y:18.3-65:      symbol not found in production: sym
+test.y:22.22-31: error: invalid reference: '\$sym-field'
+test.y:22.3-35:      symbol not found in production: sym
+test.y:23.22-35: error: invalid reference: '\$<aa>sym-field'
+test.y:23.3-39:      symbol not found in production: sym
+test.y:24.22-33: error: invalid reference: '\$[sym-field]'
+test.y:24.3-37:      symbol not found in production: sym-field
+test.y:25.22-37: error: invalid reference: '\$<aa>[sym-field]'
+test.y:25.3-41:      symbol not found in production: sym-field
+test.y:26.22-25: error: invalid reference: '\$sym'
+test.y:26.3-29:      symbol not found in production: sym
+test.y:27.22-29: error: invalid reference: '\$<aa>sym'
+test.y:27.3-33:      symbol not found in production: sym
+test.y:28.22-27: error: invalid reference: '\$[sym]'
+test.y:28.3-65:      symbol not found in production before \$3: sym
+test.y:28.52-61: error: invalid reference: '\$<aa>[sym]'
+test.y:28.3-65:      symbol not found in production: sym
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:633"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_49
+#AT_START_50
+at_fn_group_banner 50 'named-refs.at:671' \
+  "\$ or @ followed by . or -" "                      " 2
+at_xfail=no
+(
+  $as_echo "50. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+cat >test.y <<'_ATEOF'
+
+%%
+start:
+  .field { $.field; }
+| 'a'    { @.field; }
+;
+.field: ;
+_ATEOF
+
+
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:681: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y" "named-refs.at:681"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:4.12-18: error: invalid reference: '\$.field'
+test.y:4.13:        syntax error after '\$', expecting integer, letter, '_', '[', or '\$'
+test.y:4.3-8:       possibly meant: \$[.field] at \$1
+test.y:5.12-18: error: invalid reference: '@.field'
+test.y:5.13:        syntax error after '@', expecting integer, letter, '_', '[', or '\$'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >test.y <<'_ATEOF'
+
+%%
+start:
+  'a' { $-field; }
+| 'b' { @-field; }
+;
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot test.y"
+at_fn_check_prepare_notrace 'an embedded newline' "named-refs.at:696"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml test.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml test.y" "named-refs.at:696"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "named-refs.at:696"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "named-refs.at:696"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/named-refs.at:696: bison test.y"
+at_fn_check_prepare_trace "named-refs.at:696"
+( $at_check_trace; bison test.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "test.y:4.9: warning: stray '\$'
+test.y:5.9: warning: stray '@'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y -Werror" "named-refs.at:696"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison test.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+test.y:4.9: warning: stray '$'
+test.y:5.9: warning: stray '@'
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "named-refs.at:696"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y --warnings=error" "named-refs.at:696"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison test.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y -Wnone -Werror" "named-refs.at:696"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison test.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/named-refs.at:696: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison test.y --warnings=none -Werror" "named-refs.at:696"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison test.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/named-refs.at:696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_50
+#AT_START_51
+at_fn_group_banner 51 'output.at:44' \
+  "Output files:  -dv " "                            " 3
+at_xfail=no
+(
+  $as_echo "51. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y foo.output foo.tab.c foo.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 
 %%
@@ -1874,75 +12290,137 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:43: bison -dv foo.y "
-echo output.at:43 >$at_check_line_file
-( $at_traceon; bison -dv foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:43: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:44: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -dv foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:44"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -dv foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:44: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv foo.y " "output.at:44"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:44: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:44"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:44: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:44"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:43: ls foo.output foo.tab.c foo.tab.h"
-echo output.at:43 >$at_check_line_file
-( $at_traceon; ls foo.output foo.tab.c foo.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:43: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:44: bison -dv foo.y "
+at_fn_check_prepare_trace "output.at:44"
+( $at_check_trace; bison -dv foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:44: ls foo.output foo.tab.c foo.tab.h"
+at_fn_check_prepare_trace "output.at:44"
+( $at_check_trace; ls foo.output foo.tab.c foo.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  12 ) # 12. output.at:46: Output files:  -dv >&-
-    at_setup_line='output.at:46'
-    at_desc='Output files:  -dv >&-'
-    $at_quiet $ECHO_N " 12: Output files:  -dv >&-                       $ECHO_C"
-    at_xfail=no
-    (
-      echo "12. output.at:46: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_51
+#AT_START_52
+at_fn_group_banner 52 'output.at:50' \
+  "Output files:  -dv >&-" "                         " 3
+at_xfail=no
+(
+  $as_echo "52. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/output.at:50: case \"\$PREBISON\" in *valgrind*) exit 77;; esac"
+at_fn_check_prepare_dynamic "case \"$PREBISON\" in *valgrind*) exit 77;; esac" "output.at:50"
+( $at_check_trace; case "$PREBISON" in *valgrind*) exit 77;; esac
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+for file in foo.y foo.output foo.tab.c foo.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 
 %%
@@ -1950,75 +12428,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:46: bison -dv foo.y >&-"
-echo output.at:46 >$at_check_line_file
-( $at_traceon; bison -dv foo.y >&- ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:46: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:50: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -dv foo.y >&-"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:50"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -dv foo.y >&-
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:50: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv foo.y >&-"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv foo.y >&-" "output.at:50"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv foo.y >&-
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:50: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:50"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:50: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:50"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:46: ls foo.output foo.tab.c foo.tab.h"
-echo output.at:46 >$at_check_line_file
-( $at_traceon; ls foo.output foo.tab.c foo.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:46: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:50: bison -dv foo.y >&-"
+at_fn_check_prepare_trace "output.at:50"
+( $at_check_trace; bison -dv foo.y >&-
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:50: ls foo.output foo.tab.c foo.tab.h"
+at_fn_check_prepare_trace "output.at:50"
+( $at_check_trace; ls foo.output foo.tab.c foo.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  13 ) # 13. output.at:48: Output files:  -dv -o foo.c
-    at_setup_line='output.at:48'
-    at_desc='Output files:  -dv -o foo.c '
-    $at_quiet $ECHO_N " 13: Output files:  -dv -o foo.c                  $ECHO_C"
-    at_xfail=no
-    (
-      echo "13. output.at:48: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_52
+#AT_START_53
+at_fn_group_banner 53 'output.at:55' \
+  "Output files:  -dv -o foo.c " "                   " 3
+at_xfail=no
+(
+  $as_echo "53. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y foo.c foo.h foo.output; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 
 %%
@@ -2026,75 +12554,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:48: bison -dv -o foo.c foo.y "
-echo output.at:48 >$at_check_line_file
-( $at_traceon; bison -dv -o foo.c foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:48: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:55: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -dv -o foo.c foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:55"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -dv -o foo.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:55"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:55: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -o foo.c foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -o foo.c foo.y " "output.at:55"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -o foo.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:55"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:55: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:55"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:55"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:55: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:55"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:55"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:48: ls foo.c foo.h foo.output"
-echo output.at:48 >$at_check_line_file
-( $at_traceon; ls foo.c foo.h foo.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:48: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:55: bison -dv -o foo.c foo.y "
+at_fn_check_prepare_trace "output.at:55"
+( $at_check_trace; bison -dv -o foo.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:55"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:55: ls foo.c foo.h foo.output"
+at_fn_check_prepare_trace "output.at:55"
+( $at_check_trace; ls foo.c foo.h foo.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:55"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  14 ) # 14. output.at:50: Output files:  -dv -o foo.tab.c
-    at_setup_line='output.at:50'
-    at_desc='Output files:  -dv -o foo.tab.c '
-    $at_quiet $ECHO_N " 14: Output files:  -dv -o foo.tab.c              $ECHO_C"
-    at_xfail=no
-    (
-      echo "14. output.at:50: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_53
+#AT_START_54
+at_fn_group_banner 54 'output.at:57' \
+  "Output files:  -dv -o foo.tab.c " "               " 3
+at_xfail=no
+(
+  $as_echo "54. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y foo.output foo.tab.c foo.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 
 %%
@@ -2102,75 +12680,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:50: bison -dv -o foo.tab.c foo.y "
-echo output.at:50 >$at_check_line_file
-( $at_traceon; bison -dv -o foo.tab.c foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:50: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:57: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -dv -o foo.tab.c foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:57"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -dv -o foo.tab.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:57: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -o foo.tab.c foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -o foo.tab.c foo.y " "output.at:57"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -o foo.tab.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:57: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:57"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:57: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:57"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:50: ls foo.output foo.tab.c foo.tab.h"
-echo output.at:50 >$at_check_line_file
-( $at_traceon; ls foo.output foo.tab.c foo.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:50: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:57: bison -dv -o foo.tab.c foo.y "
+at_fn_check_prepare_trace "output.at:57"
+( $at_check_trace; bison -dv -o foo.tab.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:57: ls foo.output foo.tab.c foo.tab.h"
+at_fn_check_prepare_trace "output.at:57"
+( $at_check_trace; ls foo.output foo.tab.c foo.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  15 ) # 15. output.at:52: Output files:  -dv -y
-    at_setup_line='output.at:52'
-    at_desc='Output files:  -dv -y '
-    $at_quiet $ECHO_N " 15: Output files:  -dv -y                        $ECHO_C"
-    at_xfail=no
-    (
-      echo "15. output.at:52: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_54
+#AT_START_55
+at_fn_group_banner 55 'output.at:59' \
+  "Output files:  -dv -y " "                         " 3
+at_xfail=no
+(
+  $as_echo "55. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y y.output y.tab.c y.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 
 %%
@@ -2178,75 +12806,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:52: bison -dv -y foo.y "
-echo output.at:52 >$at_check_line_file
-( $at_traceon; bison -dv -y foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:52: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:59: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -dv -y foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:59"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -dv -y foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:59: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -y foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -y foo.y " "output.at:59"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -y foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:59: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:59"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:59: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:59"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:52: ls y.output y.tab.c y.tab.h"
-echo output.at:52 >$at_check_line_file
-( $at_traceon; ls y.output y.tab.c y.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:52: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:59: bison -dv -y foo.y "
+at_fn_check_prepare_trace "output.at:59"
+( $at_check_trace; bison -dv -y foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:59: ls y.output y.tab.c y.tab.h"
+at_fn_check_prepare_trace "output.at:59"
+( $at_check_trace; ls y.output y.tab.c y.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  16 ) # 16. output.at:54: Output files:  -dv -b bar
-    at_setup_line='output.at:54'
-    at_desc='Output files:  -dv -b bar '
-    $at_quiet $ECHO_N " 16: Output files:  -dv -b bar                    $ECHO_C"
-    at_xfail=no
-    (
-      echo "16. output.at:54: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_55
+#AT_START_56
+at_fn_group_banner 56 'output.at:61' \
+  "Output files:  -dv -b bar " "                     " 3
+at_xfail=no
+(
+  $as_echo "56. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y bar.output bar.tab.c bar.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 
 %%
@@ -2254,75 +12932,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:54: bison -dv -b bar foo.y "
-echo output.at:54 >$at_check_line_file
-( $at_traceon; bison -dv -b bar foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:54: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:61: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -dv -b bar foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:61"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -dv -b bar foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:61"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:61: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -b bar foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -b bar foo.y " "output.at:61"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -b bar foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:61"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:61: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:61"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:61"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:61: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:61"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:61"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:54: ls bar.output bar.tab.c bar.tab.h"
-echo output.at:54 >$at_check_line_file
-( $at_traceon; ls bar.output bar.tab.c bar.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:54: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:61: bison -dv -b bar foo.y "
+at_fn_check_prepare_trace "output.at:61"
+( $at_check_trace; bison -dv -b bar foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:61"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:61: ls bar.output bar.tab.c bar.tab.h"
+at_fn_check_prepare_trace "output.at:61"
+( $at_check_trace; ls bar.output bar.tab.c bar.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:61"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  17 ) # 17. output.at:56: Output files:  -dv -g -o foo.c
-    at_setup_line='output.at:56'
-    at_desc='Output files:  -dv -g -o foo.c '
-    $at_quiet $ECHO_N " 17: Output files:  -dv -g -o foo.c               $ECHO_C"
-    at_xfail=no
-    (
-      echo "17. output.at:56: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_56
+#AT_START_57
+at_fn_group_banner 57 'output.at:63' \
+  "Output files:  -dv -g -o foo.c " "                " 3
+at_xfail=no
+(
+  $as_echo "57. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y foo.c foo.dot foo.h foo.output; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 
 %%
@@ -2330,75 +13058,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:56: bison -dv -g -o foo.c foo.y "
-echo output.at:56 >$at_check_line_file
-( $at_traceon; bison -dv -g -o foo.c foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:56: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:63: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -dv -g -o foo.c foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:63"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -dv -g -o foo.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:63: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -g -o foo.c foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -g -o foo.c foo.y " "output.at:63"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -dv -g -o foo.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:63: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:63"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:63: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:63"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:56: ls foo.c foo.h foo.output foo.vcg"
-echo output.at:56 >$at_check_line_file
-( $at_traceon; ls foo.c foo.h foo.output foo.vcg ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:56: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:63: bison -dv -g -o foo.c foo.y "
+at_fn_check_prepare_trace "output.at:63"
+( $at_check_trace; bison -dv -g -o foo.c foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:63: ls foo.c foo.dot foo.h foo.output"
+at_fn_check_prepare_trace "output.at:63"
+( $at_check_trace; ls foo.c foo.dot foo.h foo.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  18 ) # 18. output.at:60: Output files: %defines %verbose
-    at_setup_line='output.at:60'
-    at_desc='Output files: %defines %verbose  '
-    $at_quiet $ECHO_N " 18: Output files: %defines %verbose              $ECHO_C"
-    at_xfail=no
-    (
-      echo "18. output.at:60: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_57
+#AT_START_58
+at_fn_group_banner 58 'output.at:67' \
+  "Output files: %defines %verbose  " "              " 3
+at_xfail=no
+(
+  $as_echo "58. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y foo.output foo.tab.c foo.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 %defines %verbose
 %%
@@ -2406,75 +13184,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:60: bison  foo.y "
-echo output.at:60 >$at_check_line_file
-( $at_traceon; bison  foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:60: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:67: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:67"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:67: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y " "output.at:67"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:67: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:67"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:67: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:67"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:60: ls foo.output foo.tab.c foo.tab.h"
-echo output.at:60 >$at_check_line_file
-( $at_traceon; ls foo.output foo.tab.c foo.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:60: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:67: bison  foo.y "
+at_fn_check_prepare_trace "output.at:67"
+( $at_check_trace; bison  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:67: ls foo.output foo.tab.c foo.tab.h"
+at_fn_check_prepare_trace "output.at:67"
+( $at_check_trace; ls foo.output foo.tab.c foo.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  19 ) # 19. output.at:62: Output files: %defines %verbose %yacc
-    at_setup_line='output.at:62'
-    at_desc='Output files: %defines %verbose %yacc  '
-    $at_quiet $ECHO_N " 19: Output files: %defines %verbose %yacc        $ECHO_C"
-    at_xfail=no
-    (
-      echo "19. output.at:62: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_58
+#AT_START_59
+at_fn_group_banner 59 'output.at:69' \
+  "Output files: %defines %verbose %yacc  " "        " 3
+at_xfail=no
+(
+  $as_echo "59. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y y.output y.tab.c y.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 %defines %verbose %yacc
 %%
@@ -2482,75 +13310,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:62: bison  foo.y "
-echo output.at:62 >$at_check_line_file
-( $at_traceon; bison  foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:62: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:69: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:69"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:69"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:69: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y " "output.at:69"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:69"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:69: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:69"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:69"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:69: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:69"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:69"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:62: ls y.output y.tab.c y.tab.h"
-echo output.at:62 >$at_check_line_file
-( $at_traceon; ls y.output y.tab.c y.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:62: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:69: bison  foo.y "
+at_fn_check_prepare_trace "output.at:69"
+( $at_check_trace; bison  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:69"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:69: ls y.output y.tab.c y.tab.h"
+at_fn_check_prepare_trace "output.at:69"
+( $at_check_trace; ls y.output y.tab.c y.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:69"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  20 ) # 20. output.at:65: Output files: %defines %verbose %yacc
-    at_setup_line='output.at:65'
-    at_desc='Output files: %defines %verbose %yacc  '
-    $at_quiet $ECHO_N " 20: Output files: %defines %verbose %yacc        $ECHO_C"
-    at_xfail=no
-    (
-      echo "20. output.at:65: testing ..."
-      $at_traceon
 
-case "foo.yy" in
-  */*) mkdir `echo "foo.yy" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_59
+#AT_START_60
+at_fn_group_banner 60 'output.at:72' \
+  "Output files: %defines %verbose %yacc  " "        " 3
+at_xfail=no
+(
+  $as_echo "60. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.yy y.output y.tab.c y.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.yy <<'_ATEOF'
 %defines %verbose %yacc
 %%
@@ -2558,151 +13436,251 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:65: bison  foo.yy "
-echo output.at:65 >$at_check_line_file
-( $at_traceon; bison  foo.yy  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:65: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:72: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:72"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:72: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy " "output.at:72"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:72: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:72"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:72: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:72"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:65: ls y.output y.tab.c y.tab.h"
-echo output.at:65 >$at_check_line_file
-( $at_traceon; ls y.output y.tab.c y.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:65: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:72: bison  foo.yy "
+at_fn_check_prepare_trace "output.at:72"
+( $at_check_trace; bison  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:72: ls y.output y.tab.c y.tab.h"
+at_fn_check_prepare_trace "output.at:72"
+( $at_check_trace; ls y.output y.tab.c y.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  21 ) # 21. output.at:69: Output files: %file-prefix="bar" %defines %verbose
-    at_setup_line='output.at:69'
-    at_desc='Output files: %file-prefix="bar" %defines %verbose  '
-    $at_quiet $ECHO_N " 21: Output files: %file-prefix="bar" %defines %verbose  $ECHO_C"
-    at_xfail=no
-    (
-      echo "21. output.at:69: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_60
+#AT_START_61
+at_fn_group_banner 61 'output.at:76' \
+  "Output files: %file-prefix \"bar\" %defines %verbose  " "" 3
+at_xfail=no
+(
+  $as_echo "61. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y bar.output bar.tab.c bar.tab.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
-%file-prefix="bar" %defines %verbose
+%file-prefix "bar" %defines %verbose
 %%
 foo: {};
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:69: bison  foo.y "
-echo output.at:69 >$at_check_line_file
-( $at_traceon; bison  foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:69: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:76: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:76"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:76"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:76: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y " "output.at:76"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:76"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:76: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:76"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:76"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:76: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:76"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:76"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:69: ls bar.output bar.tab.c bar.tab.h"
-echo output.at:69 >$at_check_line_file
-( $at_traceon; ls bar.output bar.tab.c bar.tab.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:69: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:76: bison  foo.y "
+at_fn_check_prepare_trace "output.at:76"
+( $at_check_trace; bison  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:76"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:76: ls bar.output bar.tab.c bar.tab.h"
+at_fn_check_prepare_trace "output.at:76"
+( $at_check_trace; ls bar.output bar.tab.c bar.tab.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:76"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  22 ) # 22. output.at:71: Output files: %output="bar.c" %defines %verbose %yacc
-    at_setup_line='output.at:71'
-    at_desc='Output files: %output="bar.c" %defines %verbose %yacc  '
-    $at_quiet $ECHO_N " 22: Output files: %output="bar.c" %defines %verbose %yacc  $ECHO_C"
-    at_xfail=no
-    (
-      echo "22. output.at:71: testing ..."
-      $at_traceon
 
-case "foo.y" in
-  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
-esac
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_61
+#AT_START_62
+at_fn_group_banner 62 'output.at:78' \
+  "Output files: %output=\"bar.c\" %defines %verbose %yacc  " "" 3
+at_xfail=no
+(
+  $as_echo "62. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y bar.output bar.c bar.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
 cat >foo.y <<'_ATEOF'
 %output="bar.c" %defines %verbose %yacc
 %%
@@ -2710,790 +13688,7051 @@
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:71: bison  foo.y "
-echo output.at:71 >$at_check_line_file
-( $at_traceon; bison  foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:71: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:78: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:78"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:78"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:78: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y " "output.at:78"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:78"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:78: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:78"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:78"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:78: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:78"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:78"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/output.at:78: bison  foo.y "
+at_fn_check_prepare_trace "output.at:78"
+( $at_check_trace; bison  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:78"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "output.at:71: ls bar.output bar.c bar.h"
-echo output.at:71 >$at_check_line_file
-( $at_traceon; ls bar.output bar.c bar.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:71: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/output.at:78: ls bar.output bar.c bar.h"
+at_fn_check_prepare_trace "output.at:78"
+( $at_check_trace; ls bar.output bar.c bar.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:78"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_62
+#AT_START_63
+at_fn_group_banner 63 'output.at:80' \
+  "Output files: %file-prefix=\"baz\" %output \"bar.c\" %defines %verbose %yacc  " "" 3
+at_xfail=no
+(
+  $as_echo "63. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.y bar.output bar.c bar.h; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >foo.y <<'_ATEOF'
+%file-prefix="baz" %output "bar.c" %defines %verbose %yacc
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:80: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  foo.y "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:80"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:80"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:80: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y " "output.at:80"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:80"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:80: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:80"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:80"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:80: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:80"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:80"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:80: bison  foo.y "
+at_fn_check_prepare_trace "output.at:80"
+( $at_check_trace; bison  foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:80"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:80: ls bar.output bar.c bar.h"
+at_fn_check_prepare_trace "output.at:80"
+( $at_check_trace; ls bar.output bar.c bar.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:80"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  23 ) # 23. output.at:75: Output files: %file-prefix="baz" %output="bar.c" %defines %verbose %yacc
-    at_setup_line='output.at:75'
-    at_desc='Output files: %file-prefix="baz" %output="bar.c" %defines %verbose %yacc  '
-    $at_quiet $ECHO_N " 23: Output files: %file-prefix="baz" %output="bar.c" %defines %verbose %yacc  $ECHO_C"
-    at_xfail=no
-    (
-      echo "23. output.at:75: testing ..."
-      $at_traceon
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_63
+#AT_START_64
+at_fn_group_banner 64 'output.at:87' \
+  "Output files: %defines %verbose  " "              " 3
+at_xfail=no
+(
+  $as_echo "64. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.yy foo.output foo.tab.cc foo.tab.hh; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >foo.yy <<'_ATEOF'
+%defines %verbose
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:87: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:87"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:87"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:87: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy " "output.at:87"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:87"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:87: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:87"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:87"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:87: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:87"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:87"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:87: bison  foo.yy "
+at_fn_check_prepare_trace "output.at:87"
+( $at_check_trace; bison  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:87"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:87: ls foo.output foo.tab.cc foo.tab.hh"
+at_fn_check_prepare_trace "output.at:87"
+( $at_check_trace; ls foo.output foo.tab.cc foo.tab.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:87"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_64
+#AT_START_65
+at_fn_group_banner 65 'output.at:90' \
+  "Output files: %defines %verbose  -o foo.c " "     " 3
+at_xfail=no
+(
+  $as_echo "65. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.yy foo.c foo.h foo.output; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >foo.yy <<'_ATEOF'
+%defines %verbose
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o foo.c foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o foo.c foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c foo.yy " "output.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:90: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:90"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:90: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:90"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:90: bison -o foo.c foo.yy "
+at_fn_check_prepare_trace "output.at:90"
+( $at_check_trace; bison -o foo.c foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:90: ls foo.c foo.h foo.output"
+at_fn_check_prepare_trace "output.at:90"
+( $at_check_trace; ls foo.c foo.h foo.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_65
+#AT_START_66
+at_fn_group_banner 66 'output.at:93' \
+  "Output files:  --defines=foo.hpp -o foo.c++ " "   " 3
+at_xfail=no
+(
+  $as_echo "66. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.yy foo.c++ foo.hpp; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >foo.yy <<'_ATEOF'
+
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:93: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --defines=foo.hpp -o foo.c++ foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:93"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --defines=foo.hpp -o foo.c++ foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:93: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=foo.hpp -o foo.c++ foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=foo.hpp -o foo.c++ foo.yy " "output.at:93"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=foo.hpp -o foo.c++ foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:93: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:93"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:93: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:93"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:93: bison --defines=foo.hpp -o foo.c++ foo.yy "
+at_fn_check_prepare_trace "output.at:93"
+( $at_check_trace; bison --defines=foo.hpp -o foo.c++ foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:93: ls foo.c++ foo.hpp"
+at_fn_check_prepare_trace "output.at:93"
+( $at_check_trace; ls foo.c++ foo.hpp
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_66
+#AT_START_67
+at_fn_group_banner 67 'output.at:97' \
+  "Output files: %defines \"foo.hpp\" -o foo.c++ " "   " 3
+at_xfail=no
+(
+  $as_echo "67. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.yy foo.c++ foo.hpp; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >foo.yy <<'_ATEOF'
+%defines "foo.hpp"
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:97: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o foo.c++ foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:97"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o foo.c++ foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:97"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:97: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c++ foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c++ foo.yy " "output.at:97"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c++ foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:97"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:97: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:97"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:97"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:97: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:97"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:97"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:97: bison -o foo.c++ foo.yy "
+at_fn_check_prepare_trace "output.at:97"
+( $at_check_trace; bison -o foo.c++ foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:97"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:97: ls foo.c++ foo.hpp"
+at_fn_check_prepare_trace "output.at:97"
+( $at_check_trace; ls foo.c++ foo.hpp
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:97"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_67
+#AT_START_68
+at_fn_group_banner 68 'output.at:101' \
+  "Output files:  -o foo.c++ --graph=foo.gph " "     " 3
+at_xfail=no
+(
+  $as_echo "68. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.yy foo.c++ foo.gph; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >foo.yy <<'_ATEOF'
+
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:101: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o foo.c++  foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:101"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o foo.c++  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:101: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c++  foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c++  foo.yy " "output.at:101"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o foo.c++  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:101: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:101"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:101: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:101"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:101: bison -o foo.c++ --graph=foo.gph foo.yy "
+at_fn_check_prepare_trace "output.at:101"
+( $at_check_trace; bison -o foo.c++ --graph=foo.gph foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:101: ls foo.c++ foo.gph"
+at_fn_check_prepare_trace "output.at:101"
+( $at_check_trace; ls foo.c++ foo.gph
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_68
+#AT_START_69
+at_fn_group_banner 69 'output.at:116' \
+  "Output files: %skeleton \"lalr1.cc\" %defines %verbose  " "" 3
+at_xfail=no
+(
+  $as_echo "69. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in foo.yy foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >foo.yy <<'_ATEOF'
+%skeleton "lalr1.cc" %defines %verbose
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:116: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:116"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:116"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:116: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy " "output.at:116"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:116"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:116: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:116"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:116"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:116: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:116"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:116"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:116: bison  foo.yy "
+at_fn_check_prepare_trace "output.at:116"
+( $at_check_trace; bison  foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:116"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:116: ls foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh"
+at_fn_check_prepare_trace "output.at:116"
+( $at_check_trace; ls foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:116"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_69
+#AT_START_70
+at_fn_group_banner 70 'output.at:119' \
+  "Output files: %skeleton \"lalr1.cc\" %defines %verbose  " "" 3
+at_xfail=no
+(
+  $as_echo "70. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in subdir/foo.yy foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >subdir/foo.yy <<'_ATEOF'
+%skeleton "lalr1.cc" %defines %verbose
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:119: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  subdir/foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:119"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  subdir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:119"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:119: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  subdir/foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  subdir/foo.yy " "output.at:119"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  subdir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:119"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:119: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:119"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:119"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:119: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:119"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:119"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:119: bison  subdir/foo.yy "
+at_fn_check_prepare_trace "output.at:119"
+( $at_check_trace; bison  subdir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:119"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:119: ls foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh"
+at_fn_check_prepare_trace "output.at:119"
+( $at_check_trace; ls foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:119"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Also make sure that the includes do not refer to the subdirectory.
+{ set +x
+$as_echo "$at_srcdir/output.at:119: grep 'include .subdir/' foo.tab.cc"
+at_fn_check_prepare_trace "output.at:119"
+( $at_check_trace; grep 'include .subdir/' foo.tab.cc
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:119"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:119: grep 'include .subdir/' foo.tab.hh"
+at_fn_check_prepare_trace "output.at:119"
+( $at_check_trace; grep 'include .subdir/' foo.tab.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:119"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_70
+#AT_START_71
+at_fn_group_banner 71 'output.at:123' \
+  "Output files: %skeleton \"lalr1.cc\" %defines %verbose -o subdir/foo.cc " "" 3
+at_xfail=no
+(
+  $as_echo "71. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in subdir/foo.yy subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/stack.hh subdir/position.hh; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >subdir/foo.yy <<'_ATEOF'
+%skeleton "lalr1.cc" %defines %verbose
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:123: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o subdir/foo.cc subdir/foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:123"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o subdir/foo.cc subdir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:123: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o subdir/foo.cc subdir/foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o subdir/foo.cc subdir/foo.yy " "output.at:123"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o subdir/foo.cc subdir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:123: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:123"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:123: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:123"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:123: bison -o subdir/foo.cc subdir/foo.yy "
+at_fn_check_prepare_trace "output.at:123"
+( $at_check_trace; bison -o subdir/foo.cc subdir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:123: ls subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/stack.hh subdir/position.hh"
+at_fn_check_prepare_trace "output.at:123"
+( $at_check_trace; ls subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/stack.hh subdir/position.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Also make sure that the includes do not refer to the subdirectory.
+{ set +x
+$as_echo "$at_srcdir/output.at:123: grep 'include .subdir/' subdir/foo.cc"
+at_fn_check_prepare_trace "output.at:123"
+( $at_check_trace; grep 'include .subdir/' subdir/foo.cc
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:123: grep 'include .subdir/' subdir/foo.hh"
+at_fn_check_prepare_trace "output.at:123"
+( $at_check_trace; grep 'include .subdir/' subdir/foo.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_71
+#AT_START_72
+at_fn_group_banner 72 'output.at:128' \
+  "Output files: %skeleton \"lalr1.cc\" %defines %verbose %file-prefix \"output_dir/foo\"  " "" 3
+at_xfail=no
+(
+  $as_echo "72. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+for file in gram_dir/foo.yy output_dir/foo.tab.cc output_dir/foo.tab.hh output_dir/foo.output output_dir/location.hh output_dir/stack.hh output_dir/position.hh; do
+  case "$file" in
+    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+  esac
+done
+cat >gram_dir/foo.yy <<'_ATEOF'
+%skeleton "lalr1.cc" %defines %verbose %file-prefix "output_dir/foo"
+%%
+foo: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:128: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  gram_dir/foo.yy "
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:128"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  gram_dir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:128"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:128: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  gram_dir/foo.yy "
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  gram_dir/foo.yy " "output.at:128"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  gram_dir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:128"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:128: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:128"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:128"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:128: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:128"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:128"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:128: bison  gram_dir/foo.yy "
+at_fn_check_prepare_trace "output.at:128"
+( $at_check_trace; bison  gram_dir/foo.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:128"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:128: ls output_dir/foo.tab.cc output_dir/foo.tab.hh output_dir/foo.output output_dir/location.hh output_dir/stack.hh output_dir/position.hh"
+at_fn_check_prepare_trace "output.at:128"
+( $at_check_trace; ls output_dir/foo.tab.cc output_dir/foo.tab.hh output_dir/foo.output output_dir/location.hh output_dir/stack.hh output_dir/position.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:128"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_72
+#AT_START_73
+at_fn_group_banner 73 'output.at:158' \
+  "Conflicting output files:  --graph=\"foo.tab.c\"" " " 3
+at_xfail=no
+(
+  $as_echo "73. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 case "foo.y" in
   */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
 esac
 cat >foo.y <<'_ATEOF'
-%file-prefix="baz" %output="bar.c" %defines %verbose %yacc
-%%
-foo: {};
-_ATEOF
-
-
-$at_traceoff
-echo "output.at:75: bison  foo.y "
-echo output.at:75 >$at_check_line_file
-( $at_traceon; bison  foo.y  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:75: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:75: ls bar.output bar.c bar.h"
-echo output.at:75 >$at_check_line_file
-( $at_traceon; ls bar.output bar.c bar.h ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:75: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  24 ) # 24. output.at:80: Output files: %defines %verbose
-    at_setup_line='output.at:80'
-    at_desc='Output files: %defines %verbose  '
-    $at_quiet $ECHO_N " 24: Output files: %defines %verbose              $ECHO_C"
-    at_xfail=no
-    (
-      echo "24. output.at:80: testing ..."
-      $at_traceon
-
-case "foo.yy" in
-  */*) mkdir `echo "foo.yy" | sed 's,/.*,,'`;;
-esac
-cat >foo.yy <<'_ATEOF'
-%defines %verbose
-%%
-foo: {};
-_ATEOF
-
-
-$at_traceoff
-echo "output.at:80: bison  foo.yy "
-echo output.at:80 >$at_check_line_file
-( $at_traceon; bison  foo.yy  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:80: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:80: ls foo.output foo.tab.cc foo.tab.hh"
-echo output.at:80 >$at_check_line_file
-( $at_traceon; ls foo.output foo.tab.cc foo.tab.hh ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:80: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  25 ) # 25. output.at:83: Output files: %defines %verbose  -o foo.c
-    at_setup_line='output.at:83'
-    at_desc='Output files: %defines %verbose  -o foo.c '
-    $at_quiet $ECHO_N " 25: Output files: %defines %verbose  -o foo.c    $ECHO_C"
-    at_xfail=no
-    (
-      echo "25. output.at:83: testing ..."
-      $at_traceon
-
-case "foo.yy" in
-  */*) mkdir `echo "foo.yy" | sed 's,/.*,,'`;;
-esac
-cat >foo.yy <<'_ATEOF'
-%defines %verbose
-%%
-foo: {};
-_ATEOF
-
-
-$at_traceoff
-echo "output.at:83: bison -o foo.c foo.yy "
-echo output.at:83 >$at_check_line_file
-( $at_traceon; bison -o foo.c foo.yy  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:83: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:83: ls foo.c foo.h foo.output"
-echo output.at:83 >$at_check_line_file
-( $at_traceon; ls foo.c foo.h foo.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:83: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  26 ) # 26. output.at:87: Output files:  --defines=foo.hpp -o foo.c++
-    at_setup_line='output.at:87'
-    at_desc='Output files:  --defines=foo.hpp -o foo.c++ '
-    $at_quiet $ECHO_N " 26: Output files:  --defines=foo.hpp -o foo.c++  $ECHO_C"
-    at_xfail=no
-    (
-      echo "26. output.at:87: testing ..."
-      $at_traceon
-
-case "foo.yy" in
-  */*) mkdir `echo "foo.yy" | sed 's,/.*,,'`;;
-esac
-cat >foo.yy <<'_ATEOF'
 
 %%
 foo: {};
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:87: bison --defines=foo.hpp -o foo.c++ foo.yy "
-echo output.at:87 >$at_check_line_file
-( $at_traceon; bison --defines=foo.hpp -o foo.c++ foo.yy  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:87: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+cp foo.y expout
+# Because an output file name conflict is still a warning, Bison exits
+# with status 0, so AT_BISON_CHECK does not realize that there may be no
+# output file against which to check the XML.  AT_BISON_CHECK_NO_XML
+# avoids that problem.
+{ set +x
+$as_echo "$at_srcdir/output.at:158: bison --graph=\"foo.tab.c\" foo.y"
+at_fn_check_prepare_trace "output.at:158"
+( $at_check_trace; bison --graph="foo.tab.c" foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "foo.y: warning: conflicting outputs to file 'foo.tab.c'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/output.at:158: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"foo.tab.c\" foo.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"foo.tab.c\" foo.y -Werror" "output.at:158"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --graph="foo.tab.c" foo.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+foo.y: warning: conflicting outputs to file 'foo.tab.c'
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/output.at:158: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:158"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/output.at:158: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"foo.tab.c\" foo.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"foo.tab.c\" foo.y --warnings=error" "output.at:158"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --graph="foo.tab.c" foo.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/output.at:158: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"foo.tab.c\" foo.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"foo.tab.c\" foo.y -Wnone -Werror" "output.at:158"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --graph="foo.tab.c" foo.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:158: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"foo.tab.c\" foo.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"foo.tab.c\" foo.y --warnings=none -Werror" "output.at:158"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --graph="foo.tab.c" foo.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/output.at:158: cat foo.y"
+at_fn_check_prepare_trace "output.at:158"
+( $at_check_trace; cat foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_73
+#AT_START_74
+at_fn_group_banner 74 'output.at:163' \
+  "Conflicting output files: %defines \"foo.output\" -v" "" 3
+at_xfail=no
+(
+  $as_echo "74. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-$at_traceoff
-echo "output.at:87: ls foo.c++ foo.hpp"
-echo output.at:87 >$at_check_line_file
-( $at_traceon; ls foo.c++ foo.hpp ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:87: exit code was $at_status, expected 0"
-      at_failed=:;;
+case "foo.y" in
+  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
 esac
-if $at_failed; then
+cat >foo.y <<'_ATEOF'
+%defines "foo.output"
+%%
+foo: {};
+_ATEOF
 
-  echo 1 > $at_status_file
-  exit 1
+
+cp foo.y expout
+# Because an output file name conflict is still a warning, Bison exits
+# with status 0, so AT_BISON_CHECK does not realize that there may be no
+# output file against which to check the XML.  AT_BISON_CHECK_NO_XML
+# avoids that problem.
+{ set +x
+$as_echo "$at_srcdir/output.at:163: bison -v foo.y"
+at_fn_check_prepare_trace "output.at:163"
+( $at_check_trace; bison -v foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "foo.y: warning: conflicting outputs to file 'foo.output'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/output.at:163: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v foo.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v foo.y -Werror" "output.at:163"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -v foo.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+foo.y: warning: conflicting outputs to file 'foo.output'
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/output.at:163: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:163"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/output.at:163: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v foo.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v foo.y --warnings=error" "output.at:163"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -v foo.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/output.at:163: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v foo.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v foo.y -Wnone -Werror" "output.at:163"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -v foo.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:163: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v foo.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v foo.y --warnings=none -Werror" "output.at:163"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -v foo.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/output.at:163: cat foo.y"
+at_fn_check_prepare_trace "output.at:163"
+( $at_check_trace; cat foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_74
+#AT_START_75
+at_fn_group_banner 75 'output.at:168' \
+  "Conflicting output files: %skeleton \"lalr1.cc\" %defines --graph=\"location.hh\"" "" 3
+at_xfail=no
+(
+  $as_echo "75. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  27 ) # 27. output.at:91: Output files:  -o foo.c++ --graph=foo.gph
-    at_setup_line='output.at:91'
-    at_desc='Output files:  -o foo.c++ --graph=foo.gph '
-    $at_quiet $ECHO_N " 27: Output files:  -o foo.c++ --graph=foo.gph    $ECHO_C"
-    at_xfail=no
-    (
-      echo "27. output.at:91: testing ..."
-      $at_traceon
-
-case "foo.yy" in
-  */*) mkdir `echo "foo.yy" | sed 's,/.*,,'`;;
+case "foo.y" in
+  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
 esac
-cat >foo.yy <<'_ATEOF'
+cat >foo.y <<'_ATEOF'
+%skeleton "lalr1.cc" %defines
+%%
+foo: {};
+_ATEOF
+
+
+cp foo.y expout
+# Because an output file name conflict is still a warning, Bison exits
+# with status 0, so AT_BISON_CHECK does not realize that there may be no
+# output file against which to check the XML.  AT_BISON_CHECK_NO_XML
+# avoids that problem.
+{ set +x
+$as_echo "$at_srcdir/output.at:168: bison --graph=\"location.hh\" foo.y"
+at_fn_check_prepare_trace "output.at:168"
+( $at_check_trace; bison --graph="location.hh" foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "foo.y: warning: conflicting outputs to file 'location.hh'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/output.at:168: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"location.hh\" foo.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"location.hh\" foo.y -Werror" "output.at:168"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --graph="location.hh" foo.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+foo.y: warning: conflicting outputs to file 'location.hh'
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/output.at:168: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:168"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/output.at:168: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"location.hh\" foo.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"location.hh\" foo.y --warnings=error" "output.at:168"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --graph="location.hh" foo.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/output.at:168: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"location.hh\" foo.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"location.hh\" foo.y -Wnone -Werror" "output.at:168"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --graph="location.hh" foo.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:168: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"location.hh\" foo.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --graph=\"location.hh\" foo.y --warnings=none -Werror" "output.at:168"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --graph="location.hh" foo.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:168: cat foo.y"
+at_fn_check_prepare_trace "output.at:168"
+( $at_check_trace; cat foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_75
+#AT_START_76
+at_fn_group_banner 76 'output.at:173' \
+  "Conflicting output files:  -o foo.y" "            " 3
+at_xfail=no
+(
+  $as_echo "76. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+case "foo.y" in
+  */*) mkdir `echo "foo.y" | sed 's,/.*,,'`;;
+esac
+cat >foo.y <<'_ATEOF'
 
 %%
 foo: {};
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:91: bison -o foo.c++ --graph=foo.gph foo.yy "
-echo output.at:91 >$at_check_line_file
-( $at_traceon; bison -o foo.c++ --graph=foo.gph foo.yy  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:91: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:91: ls foo.c++ foo.gph"
-echo output.at:91 >$at_check_line_file
-( $at_traceon; ls foo.c++ foo.gph ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:91: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+cp foo.y expout
+# Because an output file name conflict is still a warning, Bison exits
+# with status 0, so AT_BISON_CHECK does not realize that there may be no
+# output file against which to check the XML.  AT_BISON_CHECK_NO_XML
+# avoids that problem.
+{ set +x
+$as_echo "$at_srcdir/output.at:173: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o foo.y foo.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o foo.y foo.y" "output.at:173"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o foo.y foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "foo.y: error: refusing to overwrite the input file 'foo.y'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/output.at:173"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:173: cat foo.y"
+at_fn_check_prepare_trace "output.at:173"
+( $at_check_trace; cat foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:173"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  28 ) # 28. output.at:105: Output files: %skeleton "lalr1.cc" %defines %verbose
-    at_setup_line='output.at:105'
-    at_desc='Output files: %skeleton "lalr1.cc" %defines %verbose  '
-    $at_quiet $ECHO_N " 28: Output files: %skeleton "lalr1.cc" %defines %verbose  $ECHO_C"
-    at_xfail=no
-    (
-      echo "28. output.at:105: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_76
+#AT_START_77
+at_fn_group_banner 77 'output.at:219' \
+  "Output file name: \`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'" "" 3
+at_xfail=no
+(
+  $as_echo "77. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-case "foo.yy" in
-  */*) mkdir `echo "foo.yy" | sed 's,/.*,,'`;;
-esac
-cat >foo.yy <<'_ATEOF'
-%skeleton "lalr1.cc" %defines %verbose
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:219: touch \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.tmp\" || exit 77"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; touch "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
 %%
-foo: {};
+start: {};
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:105: bison  foo.yy "
-echo output.at:105 >$at_check_line_file
-( $at_traceon; bison  foo.yy  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:105: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:219: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" --defines=\"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.h\" glr.y"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c" --defines="\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:219: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" --defines=\"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.h\" glr.y"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c" --defines="\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:219: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:219: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:105: ls foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh"
-echo output.at:105 >$at_check_line_file
-( $at_traceon; ls foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:105: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:219: bison -o \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" --defines=\"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.h\" glr.y"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; bison -o "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c" --defines="\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:219: ls \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.h\""
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; ls "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c" "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  29 ) # 29. output.at:109: Output files: %skeleton "lalr1.cc" %defines %verbose
-    at_setup_line='output.at:109'
-    at_desc='Output files: %skeleton "lalr1.cc" %defines %verbose  '
-    $at_quiet $ECHO_N " 29: Output files: %skeleton "lalr1.cc" %defines %verbose  $ECHO_C"
-    at_xfail=no
-    (
-      echo "29. output.at:109: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:219: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:219"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-case "subdir/foo.yy" in
-  */*) mkdir `echo "subdir/foo.yy" | sed 's,/.*,,'`;;
-esac
-cat >subdir/foo.yy <<'_ATEOF'
-%skeleton "lalr1.cc" %defines %verbose
+{ set +x
+$as_echo "$at_srcdir/output.at:219: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" "
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
 %%
-foo: {};
+start: {};
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:109: bison  subdir/foo.yy "
-echo output.at:109 >$at_check_line_file
-( $at_traceon; bison  subdir/foo.yy  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:109: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:219: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" --defines=\"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.h\" cxx.y"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c" --defines="\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:219: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" --defines=\"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.h\" cxx.y"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c" --defines="\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:219: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:219: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:109: ls foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh"
-echo output.at:109 >$at_check_line_file
-( $at_traceon; ls foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:109: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-# Also make sure that the includes do not refer to the subdirectory.
-$at_traceoff
-echo "output.at:109: grep 'include .subdir/' foo.tab.cc"
-echo output.at:109 >$at_check_line_file
-( $at_traceon; grep 'include .subdir/' foo.tab.cc ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "output.at:109: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:109: grep 'include .subdir/' foo.tab.hh"
-echo output.at:109 >$at_check_line_file
-( $at_traceon; grep 'include .subdir/' foo.tab.hh ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "output.at:109: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:219: bison -o \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" --defines=\"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.h\" cxx.y"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; bison -o "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c" --defines="\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:219: ls \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.h\""
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; ls "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c" "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  30 ) # 30. output.at:114: Output files: %skeleton "lalr1.cc" %defines %verbose -o subdir/foo.cc
-    at_setup_line='output.at:114'
-    at_desc='Output files: %skeleton "lalr1.cc" %defines %verbose -o subdir/foo.cc '
-    $at_quiet $ECHO_N " 30: Output files: %skeleton "lalr1.cc" %defines %verbose -o subdir/foo.cc $ECHO_C"
-    at_xfail=no
-    (
-      echo "30. output.at:114: testing ..."
-      $at_traceon
 
-case "subdir/foo.yy" in
-  */*) mkdir `echo "subdir/foo.yy" | sed 's,/.*,,'`;;
-esac
-cat >subdir/foo.yy <<'_ATEOF'
-%skeleton "lalr1.cc" %defines %verbose
+{ set +x
+$as_echo "$at_srcdir/output.at:219: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:219"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:219: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \"\\\`~!@#\\\$%^&*()-=_+{}[]|\\\\:;<>, .'.c\" "
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:219"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c "\`~!@#\$%^&*()-=_+{}[]|\\:;<>, .'.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_77
+#AT_START_78
+at_fn_group_banner 78 'output.at:226' \
+  "Output file name: (" "                            " 3
+at_xfail=no
+(
+  $as_echo "78. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:226: touch \"(.tmp\" || exit 77"
+at_fn_check_prepare_trace "output.at:226"
+( $at_check_trace; touch "(.tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
 %%
-foo: {};
+start: {};
 _ATEOF
 
 
-$at_traceoff
-echo "output.at:114: bison -o subdir/foo.cc subdir/foo.yy "
-echo output.at:114 >$at_check_line_file
-( $at_traceon; bison -o subdir/foo.cc subdir/foo.yy  ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:114: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:226: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"(.c\" --defines=\"(.h\" glr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:226"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "(.c" --defines="(.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/output.at:226: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"(.c\" --defines=\"(.h\" glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"(.c\" --defines=\"(.h\" glr.y" "output.at:226"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "(.c" --defines="(.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:226: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:226"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:226: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:226"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:114: ls subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/stack.hh subdir/position.hh"
-echo output.at:114 >$at_check_line_file
-( $at_traceon; ls subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/stack.hh subdir/position.hh ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "output.at:114: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-# Also make sure that the includes do not refer to the subdirectory.
-$at_traceoff
-echo "output.at:114: grep 'include .subdir/' subdir/foo.cc"
-echo output.at:114 >$at_check_line_file
-( $at_traceon; grep 'include .subdir/' subdir/foo.cc ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "output.at:114: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "output.at:114: grep 'include .subdir/' subdir/foo.hh"
-echo output.at:114 >$at_check_line_file
-( $at_traceon; grep 'include .subdir/' subdir/foo.hh ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "output.at:114: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/output.at:226: bison -o \"(.c\" --defines=\"(.h\" glr.y"
+at_fn_check_prepare_trace "output.at:226"
+( $at_check_trace; bison -o "(.c" --defines="(.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/output.at:226: ls \"(.c\" \"(.h\""
+at_fn_check_prepare_trace "output.at:226"
+( $at_check_trace; ls "(.c" "(.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:226: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:226"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:226: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \"(.c\" "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o glr.o -c \"(.c\" " "output.at:226"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c "(.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-  banner-3 ) # Banner 3. sets.at:59
-    cat <<\_ATEOF
 
-Grammar Sets (Firsts etc.).
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
 _ATEOF
-    ;;
 
-  31 ) # 31. sets.at:66: Nullable
-    at_setup_line='sets.at:66'
-    at_desc='Nullable'
-    $at_quiet $ECHO_N " 31: Nullable                                     $ECHO_C"
-    at_xfail=no
-    (
-      echo "31. sets.at:66: testing ..."
-      $at_traceon
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:226: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"(.c\" --defines=\"(.h\" cxx.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:226"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "(.c" --defines="(.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:226: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"(.c\" --defines=\"(.h\" cxx.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"(.c\" --defines=\"(.h\" cxx.y" "output.at:226"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "(.c" --defines="(.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:226: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:226"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:226: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:226"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:226: bison -o \"(.c\" --defines=\"(.h\" cxx.y"
+at_fn_check_prepare_trace "output.at:226"
+( $at_check_trace; bison -o "(.c" --defines="(.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:226: ls \"(.c\" \"(.h\""
+at_fn_check_prepare_trace "output.at:226"
+( $at_check_trace; ls "(.c" "(.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:226: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:226"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:226: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \"(.c\" "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c \"(.c\" " "output.at:226"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c "(.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_78
+#AT_START_79
+at_fn_group_banner 79 'output.at:227' \
+  "Output file name: )" "                            " 3
+at_xfail=no
+(
+  $as_echo "79. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:227: touch \").tmp\" || exit 77"
+at_fn_check_prepare_trace "output.at:227"
+( $at_check_trace; touch ").tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:227: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \").c\" --defines=\").h\" glr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:227"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o ").c" --defines=").h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:227: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \").c\" --defines=\").h\" glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \").c\" --defines=\").h\" glr.y" "output.at:227"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o ").c" --defines=").h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:227: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:227"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:227: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:227"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:227: bison -o \").c\" --defines=\").h\" glr.y"
+at_fn_check_prepare_trace "output.at:227"
+( $at_check_trace; bison -o ").c" --defines=").h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:227: ls \").c\" \").h\""
+at_fn_check_prepare_trace "output.at:227"
+( $at_check_trace; ls ").c" ").h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:227: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:227"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:227: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \").c\" "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o glr.o -c \").c\" " "output.at:227"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c ").c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:227: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \").c\" --defines=\").h\" cxx.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:227"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o ").c" --defines=").h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:227: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \").c\" --defines=\").h\" cxx.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \").c\" --defines=\").h\" cxx.y" "output.at:227"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o ").c" --defines=").h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:227: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:227"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:227: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:227"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:227: bison -o \").c\" --defines=\").h\" cxx.y"
+at_fn_check_prepare_trace "output.at:227"
+( $at_check_trace; bison -o ").c" --defines=").h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:227: ls \").c\" \").h\""
+at_fn_check_prepare_trace "output.at:227"
+( $at_check_trace; ls ").c" ").h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:227: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:227"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:227: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \").c\" "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c \").c\" " "output.at:227"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c ").c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_79
+#AT_START_80
+at_fn_group_banner 80 'output.at:228' \
+  "Output file name: #" "                            " 3
+at_xfail=no
+(
+  $as_echo "80. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:228: touch \"#.tmp\" || exit 77"
+at_fn_check_prepare_trace "output.at:228"
+( $at_check_trace; touch "#.tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:228: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"#.c\" --defines=\"#.h\" glr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:228"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "#.c" --defines="#.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:228: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"#.c\" --defines=\"#.h\" glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"#.c\" --defines=\"#.h\" glr.y" "output.at:228"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "#.c" --defines="#.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:228: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:228"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:228: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:228"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:228: bison -o \"#.c\" --defines=\"#.h\" glr.y"
+at_fn_check_prepare_trace "output.at:228"
+( $at_check_trace; bison -o "#.c" --defines="#.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:228: ls \"#.c\" \"#.h\""
+at_fn_check_prepare_trace "output.at:228"
+( $at_check_trace; ls "#.c" "#.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:228: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:228"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:228: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \"#.c\" "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o glr.o -c \"#.c\" " "output.at:228"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c "#.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:228: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"#.c\" --defines=\"#.h\" cxx.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:228"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "#.c" --defines="#.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:228: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"#.c\" --defines=\"#.h\" cxx.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"#.c\" --defines=\"#.h\" cxx.y" "output.at:228"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "#.c" --defines="#.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:228: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:228"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:228: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:228"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:228: bison -o \"#.c\" --defines=\"#.h\" cxx.y"
+at_fn_check_prepare_trace "output.at:228"
+( $at_check_trace; bison -o "#.c" --defines="#.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:228: ls \"#.c\" \"#.h\""
+at_fn_check_prepare_trace "output.at:228"
+( $at_check_trace; ls "#.c" "#.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:228: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:228"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:228: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \"#.c\" "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c \"#.c\" " "output.at:228"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c "#.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:228"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_80
+#AT_START_81
+at_fn_group_banner 81 'output.at:229' \
+  "Output file name: @@" "                           " 3
+at_xfail=no
+(
+  $as_echo "81. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:229: touch \"@@.tmp\" || exit 77"
+at_fn_check_prepare_trace "output.at:229"
+( $at_check_trace; touch "@@.tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:229: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"@@.c\" --defines=\"@@.h\" glr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:229"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "@@.c" --defines="@@.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:229: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@@.c\" --defines=\"@@.h\" glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@@.c\" --defines=\"@@.h\" glr.y" "output.at:229"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "@@.c" --defines="@@.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:229: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:229"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:229: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:229"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:229: bison -o \"@@.c\" --defines=\"@@.h\" glr.y"
+at_fn_check_prepare_trace "output.at:229"
+( $at_check_trace; bison -o "@@.c" --defines="@@.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:229: ls \"@@.c\" \"@@.h\""
+at_fn_check_prepare_trace "output.at:229"
+( $at_check_trace; ls "@@.c" "@@.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:229: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:229"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:229: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \"@@.c\" "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o glr.o -c \"@@.c\" " "output.at:229"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c "@@.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:229: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"@@.c\" --defines=\"@@.h\" cxx.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:229"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "@@.c" --defines="@@.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:229: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@@.c\" --defines=\"@@.h\" cxx.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@@.c\" --defines=\"@@.h\" cxx.y" "output.at:229"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "@@.c" --defines="@@.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:229: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:229"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:229: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:229"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:229: bison -o \"@@.c\" --defines=\"@@.h\" cxx.y"
+at_fn_check_prepare_trace "output.at:229"
+( $at_check_trace; bison -o "@@.c" --defines="@@.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:229: ls \"@@.c\" \"@@.h\""
+at_fn_check_prepare_trace "output.at:229"
+( $at_check_trace; ls "@@.c" "@@.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:229: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:229"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:229: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \"@@.c\" "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c \"@@.c\" " "output.at:229"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c "@@.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:229"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_81
+#AT_START_82
+at_fn_group_banner 82 'output.at:230' \
+  "Output file name: @{" "                           " 3
+at_xfail=no
+(
+  $as_echo "82. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:230: touch \"@{.tmp\" || exit 77"
+at_fn_check_prepare_trace "output.at:230"
+( $at_check_trace; touch "@{.tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:230: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"@{.c\" --defines=\"@{.h\" glr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:230"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "@{.c" --defines="@{.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:230: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@{.c\" --defines=\"@{.h\" glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@{.c\" --defines=\"@{.h\" glr.y" "output.at:230"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "@{.c" --defines="@{.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:230: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:230"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:230: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:230"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:230: bison -o \"@{.c\" --defines=\"@{.h\" glr.y"
+at_fn_check_prepare_trace "output.at:230"
+( $at_check_trace; bison -o "@{.c" --defines="@{.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:230: ls \"@{.c\" \"@{.h\""
+at_fn_check_prepare_trace "output.at:230"
+( $at_check_trace; ls "@{.c" "@{.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:230: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:230"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:230: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \"@{.c\" "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o glr.o -c \"@{.c\" " "output.at:230"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c "@{.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:230: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"@{.c\" --defines=\"@{.h\" cxx.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:230"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "@{.c" --defines="@{.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:230: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@{.c\" --defines=\"@{.h\" cxx.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@{.c\" --defines=\"@{.h\" cxx.y" "output.at:230"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "@{.c" --defines="@{.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:230: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:230"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:230: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:230"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:230: bison -o \"@{.c\" --defines=\"@{.h\" cxx.y"
+at_fn_check_prepare_trace "output.at:230"
+( $at_check_trace; bison -o "@{.c" --defines="@{.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:230: ls \"@{.c\" \"@{.h\""
+at_fn_check_prepare_trace "output.at:230"
+( $at_check_trace; ls "@{.c" "@{.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:230: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:230"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:230: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \"@{.c\" "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c \"@{.c\" " "output.at:230"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c "@{.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_82
+#AT_START_83
+at_fn_group_banner 83 'output.at:231' \
+  "Output file name: @}" "                           " 3
+at_xfail=no
+(
+  $as_echo "83. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:231: touch \"@}.tmp\" || exit 77"
+at_fn_check_prepare_trace "output.at:231"
+( $at_check_trace; touch "@}.tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:231: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"@}.c\" --defines=\"@}.h\" glr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:231"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "@}.c" --defines="@}.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:231: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@}.c\" --defines=\"@}.h\" glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@}.c\" --defines=\"@}.h\" glr.y" "output.at:231"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "@}.c" --defines="@}.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:231: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:231"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:231: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:231"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:231: bison -o \"@}.c\" --defines=\"@}.h\" glr.y"
+at_fn_check_prepare_trace "output.at:231"
+( $at_check_trace; bison -o "@}.c" --defines="@}.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:231: ls \"@}.c\" \"@}.h\""
+at_fn_check_prepare_trace "output.at:231"
+( $at_check_trace; ls "@}.c" "@}.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:231: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:231"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:231: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \"@}.c\" "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o glr.o -c \"@}.c\" " "output.at:231"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c "@}.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:231: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"@}.c\" --defines=\"@}.h\" cxx.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:231"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "@}.c" --defines="@}.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:231: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@}.c\" --defines=\"@}.h\" cxx.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"@}.c\" --defines=\"@}.h\" cxx.y" "output.at:231"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "@}.c" --defines="@}.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:231: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:231"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:231: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:231"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:231: bison -o \"@}.c\" --defines=\"@}.h\" cxx.y"
+at_fn_check_prepare_trace "output.at:231"
+( $at_check_trace; bison -o "@}.c" --defines="@}.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:231: ls \"@}.c\" \"@}.h\""
+at_fn_check_prepare_trace "output.at:231"
+( $at_check_trace; ls "@}.c" "@}.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:231: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:231"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:231: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \"@}.c\" "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c \"@}.c\" " "output.at:231"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c "@}.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_83
+#AT_START_84
+at_fn_group_banner 84 'output.at:232' \
+  "Output file name: [" "                            " 3
+at_xfail=no
+(
+  $as_echo "84. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:232: touch \"[.tmp\" || exit 77"
+at_fn_check_prepare_trace "output.at:232"
+( $at_check_trace; touch "[.tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:232: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"[.c\" --defines=\"[.h\" glr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:232"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "[.c" --defines="[.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:232: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"[.c\" --defines=\"[.h\" glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"[.c\" --defines=\"[.h\" glr.y" "output.at:232"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "[.c" --defines="[.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:232: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:232"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:232: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:232"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:232: bison -o \"[.c\" --defines=\"[.h\" glr.y"
+at_fn_check_prepare_trace "output.at:232"
+( $at_check_trace; bison -o "[.c" --defines="[.h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:232: ls \"[.c\" \"[.h\""
+at_fn_check_prepare_trace "output.at:232"
+( $at_check_trace; ls "[.c" "[.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:232: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:232"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:232: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \"[.c\" "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o glr.o -c \"[.c\" " "output.at:232"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c "[.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:232: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"[.c\" --defines=\"[.h\" cxx.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:232"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "[.c" --defines="[.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:232: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"[.c\" --defines=\"[.h\" cxx.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"[.c\" --defines=\"[.h\" cxx.y" "output.at:232"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "[.c" --defines="[.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:232: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:232"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:232: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:232"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:232: bison -o \"[.c\" --defines=\"[.h\" cxx.y"
+at_fn_check_prepare_trace "output.at:232"
+( $at_check_trace; bison -o "[.c" --defines="[.h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:232: ls \"[.c\" \"[.h\""
+at_fn_check_prepare_trace "output.at:232"
+( $at_check_trace; ls "[.c" "[.h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:232: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:232"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:232: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \"[.c\" "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c \"[.c\" " "output.at:232"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c "[.c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_84
+#AT_START_85
+at_fn_group_banner 85 'output.at:233' \
+  "Output file name: ]" "                            " 3
+at_xfail=no
+(
+  $as_echo "85. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+# Skip if platform doesn't support file name.  For example, Cygwin
+# doesn't support file names containing ":" or "\".
+{ set +x
+$as_echo "$at_srcdir/output.at:233: touch \"].tmp\" || exit 77"
+at_fn_check_prepare_trace "output.at:233"
+( $at_check_trace; touch "].tmp" || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >glr.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%code {
+void yyerror ( const char *msg);
+int yylex (void);
+}
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:233: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"].c\" --defines=\"].h\" glr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:233"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "].c" --defines="].h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:233: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"].c\" --defines=\"].h\" glr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"].c\" --defines=\"].h\" glr.y" "output.at:233"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "].c" --defines="].h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:233: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:233"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:233: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:233"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:233: bison -o \"].c\" --defines=\"].h\" glr.y"
+at_fn_check_prepare_trace "output.at:233"
+( $at_check_trace; bison -o "].c" --defines="].h" glr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:233: ls \"].c\" \"].h\""
+at_fn_check_prepare_trace "output.at:233"
+( $at_check_trace; ls "].c" "].h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:233: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "output.at:233"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:233: \$CC \$CFLAGS \$CPPFLAGS -c -o glr.o -c \"].c\" "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o glr.o -c \"].c\" " "output.at:233"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o glr.o -c "].c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >cxx.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%code { int yylex (yy::parser::semantic_type*); }
+%%
+start: {};
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:233: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o \"].c\" --defines=\"].h\" cxx.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:233"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o "].c" --defines="].h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:233: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"].c\" --defines=\"].h\" cxx.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o \"].c\" --defines=\"].h\" cxx.y" "output.at:233"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o "].c" --defines="].h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:233: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:233"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:233: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:233"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:233: bison -o \"].c\" --defines=\"].h\" cxx.y"
+at_fn_check_prepare_trace "output.at:233"
+( $at_check_trace; bison -o "].c" --defines="].h" cxx.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:233: ls \"].c\" \"].h\""
+at_fn_check_prepare_trace "output.at:233"
+( $at_check_trace; ls "].c" "].h"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:233: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "output.at:233"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/output.at:233: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx.o -c \"].c\" "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c \"].c\" " "output.at:233"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx.o -c "].c"
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_85
+#AT_START_86
+at_fn_group_banner 86 'output.at:260' \
+  "Graph with no conflicts" "                        " 3
+at_xfail=no
+(
+  $as_echo "86. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+exp: a '?' b;
+a: ;
+b: 'b';
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:260: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -rall --graph input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:260"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:260"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:260: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y" "output.at:260"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:260"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:260: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:260"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:260"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:260: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:260"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:260"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:260: bison -rall --graph input.y"
+at_fn_check_prepare_trace "output.at:260"
+( $at_check_trace; bison -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:260"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:260: grep -v // input.dot"
+at_fn_check_prepare_trace "output.at:260"
+( $at_check_trace; grep -v // input.dot
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+digraph \"input.y\"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+  0 [label=\"State 0\\n\\l  0 \$accept: . exp \$end\\l  1 exp: . a '?' b\\l  2 a: .\\l\"]
+  0 -> 1 [style=dashed label=\"exp\"]
+  0 -> 2 [style=dashed label=\"a\"]
+  0 -> \"0R2\" [style=solid]
+ \"0R2\" [label=\"R2\", fillcolor=3, shape=diamond, style=filled]
+  1 [label=\"State 1\\n\\l  0 \$accept: exp . \$end\\l\"]
+  1 -> 3 [style=solid label=\"\$end\"]
+  2 [label=\"State 2\\n\\l  1 exp: a . '?' b\\l\"]
+  2 -> 4 [style=solid label=\"'?'\"]
+  3 [label=\"State 3\\n\\l  0 \$accept: exp \$end .\\l\"]
+  3 -> \"3R0\" [style=solid]
+ \"3R0\" [label=\"Acc\", fillcolor=1, shape=diamond, style=filled]
+  4 [label=\"State 4\\n\\l  1 exp: a '?' . b\\l  3 b: . 'b'\\l\"]
+  4 -> 5 [style=solid label=\"'b'\"]
+  4 -> 6 [style=dashed label=\"b\"]
+  5 [label=\"State 5\\n\\l  3 b: 'b' .\\l\"]
+  5 -> \"5R3\" [style=solid]
+ \"5R3\" [label=\"R3\", fillcolor=3, shape=diamond, style=filled]
+  6 [label=\"State 6\\n\\l  1 exp: a '?' b .\\l\"]
+  6 -> \"6R1\" [style=solid]
+ \"6R1\" [label=\"R1\", fillcolor=3, shape=diamond, style=filled]
+}
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:260"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_86
+#AT_START_87
+at_fn_group_banner 87 'output.at:294' \
+  "Graph with unsolved S/R" "                        " 3
+at_xfail=no
+(
+  $as_echo "87. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+start:
+    'a'
+  | empty_a 'a'
+  | 'b'
+  | empty_b 'b'
+  | 'c'
+  | empty_c 'c'
+  ;
+empty_a: %prec 'a';
+empty_b: %prec 'b';
+empty_c: %prec 'c';
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:294: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -rall --graph input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:294"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:294"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:294: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y" "output.at:294"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:294"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:294: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:294"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:294"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:294: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:294"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:294"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:294: bison -rall --graph input.y"
+at_fn_check_prepare_trace "output.at:294"
+( $at_check_trace; bison -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:294"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:294: grep -v // input.dot"
+at_fn_check_prepare_trace "output.at:294"
+( $at_check_trace; grep -v // input.dot
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+digraph \"input.y\"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+  0 [label=\"State 0\\n\\l  0 \$accept: . start \$end\\l  1 start: . 'a'\\l  2      | . empty_a 'a'\\l  3      | . 'b'\\l  4      | . empty_b 'b'\\l  5      | . 'c'\\l  6      | . empty_c 'c'\\l  7 empty_a: .  ['a']\\l  8 empty_b: .  ['b']\\l  9 empty_c: .  ['c']\\l\"]
+  0 -> 1 [style=solid label=\"'a'\"]
+  0 -> 2 [style=solid label=\"'b'\"]
+  0 -> 3 [style=solid label=\"'c'\"]
+  0 -> 4 [style=dashed label=\"start\"]
+  0 -> 5 [style=dashed label=\"empty_a\"]
+  0 -> 6 [style=dashed label=\"empty_b\"]
+  0 -> 7 [style=dashed label=\"empty_c\"]
+  0 -> \"0R7d\" [label=\"['a']\", style=solid]
+ \"0R7d\" [label=\"R7\", fillcolor=5, shape=diamond, style=filled]
+  0 -> \"0R8d\" [label=\"['b']\", style=solid]
+ \"0R8d\" [label=\"R8\", fillcolor=5, shape=diamond, style=filled]
+  0 -> \"0R9d\" [label=\"['c']\", style=solid]
+ \"0R9d\" [label=\"R9\", fillcolor=5, shape=diamond, style=filled]
+  1 [label=\"State 1\\n\\l  1 start: 'a' .\\l\"]
+  1 -> \"1R1\" [style=solid]
+ \"1R1\" [label=\"R1\", fillcolor=3, shape=diamond, style=filled]
+  2 [label=\"State 2\\n\\l  3 start: 'b' .\\l\"]
+  2 -> \"2R3\" [style=solid]
+ \"2R3\" [label=\"R3\", fillcolor=3, shape=diamond, style=filled]
+  3 [label=\"State 3\\n\\l  5 start: 'c' .\\l\"]
+  3 -> \"3R5\" [style=solid]
+ \"3R5\" [label=\"R5\", fillcolor=3, shape=diamond, style=filled]
+  4 [label=\"State 4\\n\\l  0 \$accept: start . \$end\\l\"]
+  4 -> 8 [style=solid label=\"\$end\"]
+  5 [label=\"State 5\\n\\l  2 start: empty_a . 'a'\\l\"]
+  5 -> 9 [style=solid label=\"'a'\"]
+  6 [label=\"State 6\\n\\l  4 start: empty_b . 'b'\\l\"]
+  6 -> 10 [style=solid label=\"'b'\"]
+  7 [label=\"State 7\\n\\l  6 start: empty_c . 'c'\\l\"]
+  7 -> 11 [style=solid label=\"'c'\"]
+  8 [label=\"State 8\\n\\l  0 \$accept: start \$end .\\l\"]
+  8 -> \"8R0\" [style=solid]
+ \"8R0\" [label=\"Acc\", fillcolor=1, shape=diamond, style=filled]
+  9 [label=\"State 9\\n\\l  2 start: empty_a 'a' .\\l\"]
+  9 -> \"9R2\" [style=solid]
+ \"9R2\" [label=\"R2\", fillcolor=3, shape=diamond, style=filled]
+  10 [label=\"State 10\\n\\l  4 start: empty_b 'b' .\\l\"]
+  10 -> \"10R4\" [style=solid]
+ \"10R4\" [label=\"R4\", fillcolor=3, shape=diamond, style=filled]
+  11 [label=\"State 11\\n\\l  6 start: empty_c 'c' .\\l\"]
+  11 -> \"11R6\" [style=solid]
+ \"11R6\" [label=\"R6\", fillcolor=3, shape=diamond, style=filled]
+}
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:294"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_87
+#AT_START_88
+at_fn_group_banner 88 'output.at:358' \
+  "Graph with solved S/R" "                          " 3
+at_xfail=no
+(
+  $as_echo "88. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%left 'a'
+%right 'b'
+%right 'c'
+%%
+start:
+    'a'
+  | empty_a 'a'
+  | 'b'
+  | empty_b 'b'
+  | 'c'
+  | empty_c 'c'
+  ;
+empty_a: %prec 'a';
+empty_b: %prec 'b';
+empty_c: %prec 'c';
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:358: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -rall --graph input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:358"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:358"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:358: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y" "output.at:358"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:358"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:358: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:358"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:358"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:358: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:358"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:358"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:358: bison -rall --graph input.y"
+at_fn_check_prepare_trace "output.at:358"
+( $at_check_trace; bison -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:358"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:358: grep -v // input.dot"
+at_fn_check_prepare_trace "output.at:358"
+( $at_check_trace; grep -v // input.dot
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+digraph \"input.y\"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+  0 [label=\"State 0\\n\\l  0 \$accept: . start \$end\\l  1 start: . 'a'\\l  2      | . empty_a 'a'\\l  3      | . 'b'\\l  4      | . empty_b 'b'\\l  5      | . 'c'\\l  6      | . empty_c 'c'\\l  7 empty_a: .  ['a']\\l  8 empty_b: .  []\\l  9 empty_c: .  []\\l\"]
+  0 -> 1 [style=solid label=\"'b'\"]
+  0 -> 2 [style=solid label=\"'c'\"]
+  0 -> 3 [style=dashed label=\"start\"]
+  0 -> 4 [style=dashed label=\"empty_a\"]
+  0 -> 5 [style=dashed label=\"empty_b\"]
+  0 -> 6 [style=dashed label=\"empty_c\"]
+  0 -> \"0R7\" [style=solid]
+ \"0R7\" [label=\"R7\", fillcolor=3, shape=diamond, style=filled]
+  1 [label=\"State 1\\n\\l  3 start: 'b' .\\l\"]
+  1 -> \"1R3\" [style=solid]
+ \"1R3\" [label=\"R3\", fillcolor=3, shape=diamond, style=filled]
+  2 [label=\"State 2\\n\\l  5 start: 'c' .\\l\"]
+  2 -> \"2R5\" [style=solid]
+ \"2R5\" [label=\"R5\", fillcolor=3, shape=diamond, style=filled]
+  3 [label=\"State 3\\n\\l  0 \$accept: start . \$end\\l\"]
+  3 -> 7 [style=solid label=\"\$end\"]
+  4 [label=\"State 4\\n\\l  2 start: empty_a . 'a'\\l\"]
+  4 -> 8 [style=solid label=\"'a'\"]
+  5 [label=\"State 5\\n\\l  4 start: empty_b . 'b'\\l\"]
+  5 -> 9 [style=solid label=\"'b'\"]
+  6 [label=\"State 6\\n\\l  6 start: empty_c . 'c'\\l\"]
+  6 -> 10 [style=solid label=\"'c'\"]
+  7 [label=\"State 7\\n\\l  0 \$accept: start \$end .\\l\"]
+  7 -> \"7R0\" [style=solid]
+ \"7R0\" [label=\"Acc\", fillcolor=1, shape=diamond, style=filled]
+  8 [label=\"State 8\\n\\l  2 start: empty_a 'a' .\\l\"]
+  8 -> \"8R2\" [style=solid]
+ \"8R2\" [label=\"R2\", fillcolor=3, shape=diamond, style=filled]
+  9 [label=\"State 9\\n\\l  4 start: empty_b 'b' .\\l\"]
+  9 -> \"9R4\" [style=solid]
+ \"9R4\" [label=\"R4\", fillcolor=3, shape=diamond, style=filled]
+  10 [label=\"State 10\\n\\l  6 start: empty_c 'c' .\\l\"]
+  10 -> \"10R6\" [style=solid]
+ \"10R6\" [label=\"R6\", fillcolor=3, shape=diamond, style=filled]
+}
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:358"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_88
+#AT_START_89
+at_fn_group_banner 89 'output.at:417' \
+  "Graph with R/R" "                                 " 3
+at_xfail=no
+(
+  $as_echo "89. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+exp: a | b;
+a: ;
+b: ;
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:417: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -rall --graph input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:417"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:417: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y" "output.at:417"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:417: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:417"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:417: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:417"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:417: bison -rall --graph input.y"
+at_fn_check_prepare_trace "output.at:417"
+( $at_check_trace; bison -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:417: grep -v // input.dot"
+at_fn_check_prepare_trace "output.at:417"
+( $at_check_trace; grep -v // input.dot
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+digraph \"input.y\"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+  0 [label=\"State 0\\n\\l  0 \$accept: . exp \$end\\l  1 exp: . a\\l  2    | . b\\l  3 a: .  [\$end]\\l  4 b: .  [\$end]\\l\"]
+  0 -> 1 [style=dashed label=\"exp\"]
+  0 -> 2 [style=dashed label=\"a\"]
+  0 -> 3 [style=dashed label=\"b\"]
+  0 -> \"0R3\" [style=solid]
+ \"0R3\" [label=\"R3\", fillcolor=3, shape=diamond, style=filled]
+  0 -> \"0R4d\" [label=\"[\$end]\", style=solid]
+ \"0R4d\" [label=\"R4\", fillcolor=5, shape=diamond, style=filled]
+  1 [label=\"State 1\\n\\l  0 \$accept: exp . \$end\\l\"]
+  1 -> 4 [style=solid label=\"\$end\"]
+  2 [label=\"State 2\\n\\l  1 exp: a .\\l\"]
+  2 -> \"2R1\" [style=solid]
+ \"2R1\" [label=\"R1\", fillcolor=3, shape=diamond, style=filled]
+  3 [label=\"State 3\\n\\l  2 exp: b .\\l\"]
+  3 -> \"3R2\" [style=solid]
+ \"3R2\" [label=\"R2\", fillcolor=3, shape=diamond, style=filled]
+  4 [label=\"State 4\\n\\l  0 \$accept: exp \$end .\\l\"]
+  4 -> \"4R0\" [style=solid]
+ \"4R0\" [label=\"Acc\", fillcolor=1, shape=diamond, style=filled]
+}
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_89
+#AT_START_90
+at_fn_group_banner 90 'output.at:449' \
+  "Graph with reductions with multiple LAT" "        " 3
+at_xfail=no
+(
+  $as_echo "90. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+exp: a ';' | a ';' | a '.' | b '?' | b '!' | c '?' | c ';';
+a: ;
+b: ;
+c: ;
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:449: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -rall --graph input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:449"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:449: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y" "output.at:449"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:449: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:449"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:449: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:449"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:449: bison -rall --graph input.y"
+at_fn_check_prepare_trace "output.at:449"
+( $at_check_trace; bison -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:449: grep -v // input.dot"
+at_fn_check_prepare_trace "output.at:449"
+( $at_check_trace; grep -v // input.dot
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+digraph \"input.y\"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+  0 [label=\"State 0\\n\\l  0 \$accept: . exp \$end\\l  1 exp: . a ';'\\l  2    | . a ';'\\l  3    | . a '.'\\l  4    | . b '?'\\l  5    | . b '!'\\l  6    | . c '?'\\l  7    | . c ';'\\l  8 a: .  [';', '.']\\l  9 b: .  ['?', '!']\\l 10 c: .  [';', '?']\\l\"]
+  0 -> 1 [style=dashed label=\"exp\"]
+  0 -> 2 [style=dashed label=\"a\"]
+  0 -> 3 [style=dashed label=\"b\"]
+  0 -> 4 [style=dashed label=\"c\"]
+  0 -> \"0R8\" [style=solid]
+ \"0R8\" [label=\"R8\", fillcolor=3, shape=diamond, style=filled]
+  0 -> \"0R9\" [label=\"['?', '!']\", style=solid]
+ \"0R9\" [label=\"R9\", fillcolor=3, shape=diamond, style=filled]
+  0 -> \"0R10d\" [label=\"[';', '?']\", style=solid]
+ \"0R10d\" [label=\"R10\", fillcolor=5, shape=diamond, style=filled]
+  1 [label=\"State 1\\n\\l  0 \$accept: exp . \$end\\l\"]
+  1 -> 5 [style=solid label=\"\$end\"]
+  2 [label=\"State 2\\n\\l  1 exp: a . ';'\\l  2    | a . ';'\\l  3    | a . '.'\\l\"]
+  2 -> 6 [style=solid label=\"';'\"]
+  2 -> 7 [style=solid label=\"'.'\"]
+  3 [label=\"State 3\\n\\l  4 exp: b . '?'\\l  5    | b . '!'\\l\"]
+  3 -> 8 [style=solid label=\"'?'\"]
+  3 -> 9 [style=solid label=\"'!'\"]
+  4 [label=\"State 4\\n\\l  6 exp: c . '?'\\l  7    | c . ';'\\l\"]
+  4 -> 10 [style=solid label=\"';'\"]
+  4 -> 11 [style=solid label=\"'?'\"]
+  5 [label=\"State 5\\n\\l  0 \$accept: exp \$end .\\l\"]
+  5 -> \"5R0\" [style=solid]
+ \"5R0\" [label=\"Acc\", fillcolor=1, shape=diamond, style=filled]
+  6 [label=\"State 6\\n\\l  1 exp: a ';' .  [\$end]\\l  2    | a ';' .  [\$end]\\l\"]
+  6 -> \"6R1\" [style=solid]
+ \"6R1\" [label=\"R1\", fillcolor=3, shape=diamond, style=filled]
+  6 -> \"6R2d\" [label=\"[\$end]\", style=solid]
+ \"6R2d\" [label=\"R2\", fillcolor=5, shape=diamond, style=filled]
+  7 [label=\"State 7\\n\\l  3 exp: a '.' .\\l\"]
+  7 -> \"7R3\" [style=solid]
+ \"7R3\" [label=\"R3\", fillcolor=3, shape=diamond, style=filled]
+  8 [label=\"State 8\\n\\l  4 exp: b '?' .\\l\"]
+  8 -> \"8R4\" [style=solid]
+ \"8R4\" [label=\"R4\", fillcolor=3, shape=diamond, style=filled]
+  9 [label=\"State 9\\n\\l  5 exp: b '!' .\\l\"]
+  9 -> \"9R5\" [style=solid]
+ \"9R5\" [label=\"R5\", fillcolor=3, shape=diamond, style=filled]
+  10 [label=\"State 10\\n\\l  7 exp: c ';' .\\l\"]
+  10 -> \"10R7\" [style=solid]
+ \"10R7\" [label=\"R7\", fillcolor=3, shape=diamond, style=filled]
+  11 [label=\"State 11\\n\\l  6 exp: c '?' .\\l\"]
+  11 -> \"11R6\" [style=solid]
+ \"11R6\" [label=\"R6\", fillcolor=3, shape=diamond, style=filled]
+}
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_90
+#AT_START_91
+at_fn_group_banner 91 'output.at:508' \
+  "Graph with a reduction rule both enabled and disabled" "" 3
+at_xfail=no
+(
+  $as_echo "91. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+exp: ifexp | opexp | imm;
+ifexp: "if" exp "then" exp elseexp;
+elseexp: "else" exp | ;
+opexp: exp '+' exp;
+imm: '0';
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/output.at:508: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -rall --graph input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "output.at:508"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/output.at:508: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y" "output.at:508"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/output.at:508: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:508"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/output.at:508: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "output.at:508"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/output.at:508: bison -rall --graph input.y"
+at_fn_check_prepare_trace "output.at:508"
+( $at_check_trace; bison -rall --graph input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/output.at:508: grep -v // input.dot"
+at_fn_check_prepare_trace "output.at:508"
+( $at_check_trace; grep -v // input.dot
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+digraph \"input.y\"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+  0 [label=\"State 0\\n\\l  0 \$accept: . exp \$end\\l  1 exp: . ifexp\\l  2    | . opexp\\l  3    | . imm\\l  4 ifexp: . \\\"if\\\" exp \\\"then\\\" exp elseexp\\l  7 opexp: . exp '+' exp\\l  8 imm: . '0'\\l\"]
+  0 -> 1 [style=solid label=\"\\\"if\\\"\"]
+  0 -> 2 [style=solid label=\"'0'\"]
+  0 -> 3 [style=dashed label=\"exp\"]
+  0 -> 4 [style=dashed label=\"ifexp\"]
+  0 -> 5 [style=dashed label=\"opexp\"]
+  0 -> 6 [style=dashed label=\"imm\"]
+  1 [label=\"State 1\\n\\l  1 exp: . ifexp\\l  2    | . opexp\\l  3    | . imm\\l  4 ifexp: . \\\"if\\\" exp \\\"then\\\" exp elseexp\\l  4      | \\\"if\\\" . exp \\\"then\\\" exp elseexp\\l  7 opexp: . exp '+' exp\\l  8 imm: . '0'\\l\"]
+  1 -> 1 [style=solid label=\"\\\"if\\\"\"]
+  1 -> 2 [style=solid label=\"'0'\"]
+  1 -> 7 [style=dashed label=\"exp\"]
+  1 -> 4 [style=dashed label=\"ifexp\"]
+  1 -> 5 [style=dashed label=\"opexp\"]
+  1 -> 6 [style=dashed label=\"imm\"]
+  2 [label=\"State 2\\n\\l  8 imm: '0' .\\l\"]
+  2 -> \"2R8\" [style=solid]
+ \"2R8\" [label=\"R8\", fillcolor=3, shape=diamond, style=filled]
+  3 [label=\"State 3\\n\\l  0 \$accept: exp . \$end\\l  7 opexp: exp . '+' exp\\l\"]
+  3 -> 8 [style=solid label=\"\$end\"]
+  3 -> 9 [style=solid label=\"'+'\"]
+  4 [label=\"State 4\\n\\l  1 exp: ifexp .\\l\"]
+  4 -> \"4R1\" [style=solid]
+ \"4R1\" [label=\"R1\", fillcolor=3, shape=diamond, style=filled]
+  5 [label=\"State 5\\n\\l  2 exp: opexp .\\l\"]
+  5 -> \"5R2\" [style=solid]
+ \"5R2\" [label=\"R2\", fillcolor=3, shape=diamond, style=filled]
+  6 [label=\"State 6\\n\\l  3 exp: imm .\\l\"]
+  6 -> \"6R3\" [style=solid]
+ \"6R3\" [label=\"R3\", fillcolor=3, shape=diamond, style=filled]
+  7 [label=\"State 7\\n\\l  4 ifexp: \\\"if\\\" exp . \\\"then\\\" exp elseexp\\l  7 opexp: exp . '+' exp\\l\"]
+  7 -> 10 [style=solid label=\"\\\"then\\\"\"]
+  7 -> 9 [style=solid label=\"'+'\"]
+  8 [label=\"State 8\\n\\l  0 \$accept: exp \$end .\\l\"]
+  8 -> \"8R0\" [style=solid]
+ \"8R0\" [label=\"Acc\", fillcolor=1, shape=diamond, style=filled]
+  9 [label=\"State 9\\n\\l  1 exp: . ifexp\\l  2    | . opexp\\l  3    | . imm\\l  4 ifexp: . \\\"if\\\" exp \\\"then\\\" exp elseexp\\l  7 opexp: . exp '+' exp\\l  7      | exp '+' . exp\\l  8 imm: . '0'\\l\"]
+  9 -> 1 [style=solid label=\"\\\"if\\\"\"]
+  9 -> 2 [style=solid label=\"'0'\"]
+  9 -> 11 [style=dashed label=\"exp\"]
+  9 -> 4 [style=dashed label=\"ifexp\"]
+  9 -> 5 [style=dashed label=\"opexp\"]
+  9 -> 6 [style=dashed label=\"imm\"]
+  10 [label=\"State 10\\n\\l  1 exp: . ifexp\\l  2    | . opexp\\l  3    | . imm\\l  4 ifexp: . \\\"if\\\" exp \\\"then\\\" exp elseexp\\l  4      | \\\"if\\\" exp \\\"then\\\" . exp elseexp\\l  7 opexp: . exp '+' exp\\l  8 imm: . '0'\\l\"]
+  10 -> 1 [style=solid label=\"\\\"if\\\"\"]
+  10 -> 2 [style=solid label=\"'0'\"]
+  10 -> 12 [style=dashed label=\"exp\"]
+  10 -> 4 [style=dashed label=\"ifexp\"]
+  10 -> 5 [style=dashed label=\"opexp\"]
+  10 -> 6 [style=dashed label=\"imm\"]
+  11 [label=\"State 11\\n\\l  7 opexp: exp . '+' exp\\l  7      | exp '+' exp .  [\$end, \\\"then\\\", \\\"else\\\", '+']\\l\"]
+  11 -> 9 [style=solid label=\"'+'\"]
+  11 -> \"11R7d\" [label=\"['+']\", style=solid]
+ \"11R7d\" [label=\"R7\", fillcolor=5, shape=diamond, style=filled]
+  11 -> \"11R7\" [style=solid]
+ \"11R7\" [label=\"R7\", fillcolor=3, shape=diamond, style=filled]
+  12 [label=\"State 12\\n\\l  4 ifexp: \\\"if\\\" exp \\\"then\\\" exp . elseexp\\l  5 elseexp: . \\\"else\\\" exp\\l  6        | .  [\$end, \\\"then\\\", \\\"else\\\", '+']\\l  7 opexp: exp . '+' exp\\l\"]
+  12 -> 13 [style=solid label=\"\\\"else\\\"\"]
+  12 -> 9 [style=solid label=\"'+'\"]
+  12 -> 14 [style=dashed label=\"elseexp\"]
+  12 -> \"12R6d\" [label=\"[\\\"else\\\", '+']\", style=solid]
+ \"12R6d\" [label=\"R6\", fillcolor=5, shape=diamond, style=filled]
+  12 -> \"12R6\" [style=solid]
+ \"12R6\" [label=\"R6\", fillcolor=3, shape=diamond, style=filled]
+  13 [label=\"State 13\\n\\l  1 exp: . ifexp\\l  2    | . opexp\\l  3    | . imm\\l  4 ifexp: . \\\"if\\\" exp \\\"then\\\" exp elseexp\\l  5 elseexp: \\\"else\\\" . exp\\l  7 opexp: . exp '+' exp\\l  8 imm: . '0'\\l\"]
+  13 -> 1 [style=solid label=\"\\\"if\\\"\"]
+  13 -> 2 [style=solid label=\"'0'\"]
+  13 -> 15 [style=dashed label=\"exp\"]
+  13 -> 4 [style=dashed label=\"ifexp\"]
+  13 -> 5 [style=dashed label=\"opexp\"]
+  13 -> 6 [style=dashed label=\"imm\"]
+  14 [label=\"State 14\\n\\l  4 ifexp: \\\"if\\\" exp \\\"then\\\" exp elseexp .\\l\"]
+  14 -> \"14R4\" [style=solid]
+ \"14R4\" [label=\"R4\", fillcolor=3, shape=diamond, style=filled]
+  15 [label=\"State 15\\n\\l  5 elseexp: \\\"else\\\" exp .  [\$end, \\\"then\\\", \\\"else\\\", '+']\\l  7 opexp: exp . '+' exp\\l\"]
+  15 -> 9 [style=solid label=\"'+'\"]
+  15 -> \"15R5d\" [label=\"['+']\", style=solid]
+ \"15R5d\" [label=\"R5\", fillcolor=5, shape=diamond, style=filled]
+  15 -> \"15R5\" [style=solid]
+ \"15R5\" [label=\"R5\", fillcolor=3, shape=diamond, style=filled]
+}
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/output.at:508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_91
+#AT_START_92
+at_fn_group_banner 92 'skeletons.at:24' \
+  "Relative skeleton file names" "                   " 4
+at_xfail=no
+(
+  $as_echo "92. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:26: mkdir tmp"
+at_fn_check_prepare_trace "skeletons.at:26"
+( $at_check_trace; mkdir tmp
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:26"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >tmp/skel.c <<'_ATEOF'
+m4_divert_push(0)dnl
+@output(b4_parser_file_name@)dnl
+b4_percent_define_get([[test]])
+m4_divert_pop(0)
+_ATEOF
+
+
+cat >skel.c <<'_ATEOF'
+m4_divert_push(0)dnl
+@output(b4_parser_file_name@)dnl
+b4_percent_define_get([[test]]) -- Local
+m4_divert_pop(0)
+_ATEOF
+
+
+cat >tmp/input-gram.y <<'_ATEOF'
+%skeleton "./skel.c"
+%define test "Hello World"
+%%
+start: ;
+_ATEOF
+
+
+cat >input-gram.y <<'_ATEOF'
+%skeleton "./skel.c"
+%define test "Hello World"
+%%
+start: ;
+_ATEOF
+
+
+cat >tmp/input-cmd-line.y <<'_ATEOF'
+%define test "Hello World"
+%%
+start: ;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:62: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot tmp/input-gram.y"
+at_fn_check_prepare_notrace 'an embedded newline' "skeletons.at:62"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot tmp/input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:62"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:62: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml tmp/input-gram.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml tmp/input-gram.y" "skeletons.at:62"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml tmp/input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:62"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:62: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:62"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:62"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:62: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:62"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:62"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:62: bison tmp/input-gram.y"
+at_fn_check_prepare_trace "skeletons.at:62"
+( $at_check_trace; bison tmp/input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:62"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:63: cat input-gram.tab.c"
+at_fn_check_prepare_trace "skeletons.at:63"
+( $at_check_trace; cat input-gram.tab.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Hello World
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:67: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input-gram.y"
+at_fn_check_prepare_notrace 'an embedded newline' "skeletons.at:67"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:67: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input-gram.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input-gram.y" "skeletons.at:67"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:67: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:67"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:67: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:67"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:67: bison input-gram.y"
+at_fn_check_prepare_trace "skeletons.at:67"
+( $at_check_trace; bison input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:68: cat input-gram.tab.c"
+at_fn_check_prepare_trace "skeletons.at:68"
+( $at_check_trace; cat input-gram.tab.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Hello World -- Local
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:68"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:72: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --skeleton=tmp/skel.c tmp/input-cmd-line.y"
+at_fn_check_prepare_notrace 'an embedded newline' "skeletons.at:72"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --skeleton=tmp/skel.c tmp/input-cmd-line.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:72: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --skeleton=tmp/skel.c tmp/input-cmd-line.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --skeleton=tmp/skel.c tmp/input-cmd-line.y" "skeletons.at:72"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --skeleton=tmp/skel.c tmp/input-cmd-line.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:72: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:72"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:72: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:72"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:72: bison --skeleton=tmp/skel.c tmp/input-cmd-line.y"
+at_fn_check_prepare_trace "skeletons.at:72"
+( $at_check_trace; bison --skeleton=tmp/skel.c tmp/input-cmd-line.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:73: cat input-cmd-line.tab.c"
+at_fn_check_prepare_trace "skeletons.at:73"
+( $at_check_trace; cat input-cmd-line.tab.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Hello World
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_92
+#AT_START_93
+at_fn_group_banner 93 'skeletons.at:84' \
+  "Installed skeleton file names" "                  " 4
+at_xfail=no
+(
+  $as_echo "93. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+cat >input-cmd-line.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%{
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (void);
+%}
+
+%error-verbose
+%token 'a'
+
+%%
+
+start: ;
+
+%%
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+yylex (void)
+{
+  return 'a';
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+cat >input-gram.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "yacc.c"
+%{
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (void);
+%}
+
+%error-verbose
+%token 'a'
+
+%%
+
+start: ;
+
+%%
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+yylex (void)
+{
+  return 'a';
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:124: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y"
+at_fn_check_prepare_notrace 'an embedded newline' "skeletons.at:124"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:124"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:124: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y" "skeletons.at:124"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:124"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:124: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:124"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:124"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:124: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:124"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:124"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:124: bison --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y"
+at_fn_check_prepare_trace "skeletons.at:124"
+( $at_check_trace; bison --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:124"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:125: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "skeletons.at:125"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:125"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:125: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input-cmd-line input-cmd-line.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input-cmd-line input-cmd-line.c $LIBS" "skeletons.at:125"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input-cmd-line input-cmd-line.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:125"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:126:  \$PREPARSER ./input-cmd-line"
+at_fn_check_prepare_dynamic " $PREPARSER ./input-cmd-line" "skeletons.at:126"
+( $at_check_trace;  $PREPARSER ./input-cmd-line
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:126"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:126: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "skeletons.at:126"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'a', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:126"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:130: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input-gram.c input-gram.y"
+at_fn_check_prepare_notrace 'an embedded newline' "skeletons.at:130"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input-gram.c input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:130"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:130: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input-gram.c input-gram.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input-gram.c input-gram.y" "skeletons.at:130"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input-gram.c input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:130"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:130: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:130"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:130"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/skeletons.at:130: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "skeletons.at:130"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:130"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:130: bison -o input-gram.c input-gram.y"
+at_fn_check_prepare_trace "skeletons.at:130"
+( $at_check_trace; bison -o input-gram.c input-gram.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:130"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:131: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "skeletons.at:131"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:131"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:131: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input-gram input-gram.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input-gram input-gram.c $LIBS" "skeletons.at:131"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input-gram input-gram.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:131"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:132:  \$PREPARSER ./input-gram"
+at_fn_check_prepare_dynamic " $PREPARSER ./input-gram" "skeletons.at:132"
+( $at_check_trace;  $PREPARSER ./input-gram
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:132"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:132: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "skeletons.at:132"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'a', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:132"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_93
+#AT_START_94
+at_fn_group_banner 94 'skeletons.at:146' \
+  "%define Boolean variables: invalid skeleton defaults" "" 4
+at_xfail=no
+(
+  $as_echo "94. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >skel.c <<'_ATEOF'
+b4_percent_define_default([[foo]], [[bogus value]])
+b4_percent_define_flag_if([[foo]])
+_ATEOF
+
+
+cat >input.y <<'_ATEOF'
+%skeleton "./skel.c"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:159: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "skeletons.at:159"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "<skeleton default value>: error: invalid value for %define Boolean variable 'foo'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:159"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_94
+#AT_START_95
+at_fn_group_banner 95 'skeletons.at:170' \
+  "Complaining during macro argument expansion" "    " 4
+at_xfail=no
+(
+  $as_echo "95. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >skel1.c <<'_ATEOF'
+m4_define([foow], [b4_warn([[foow fubar]])])
+m4_define([foowat], [b4_warn_at([[foow.y:2.3]],
+                                    [[foow.y:5.4]], [[foowat fubar]])])
+m4_define([fooc], [b4_complain([[fooc fubar]])])
+m4_define([foocat], [b4_complain_at([[fooc.y:1.1]],
+                                        [[fooc.y:10.6]], [[foocat fubar]])])
+m4_define([foof], [b4_fatal([[foof fubar]])])
+m4_if(foow, [1], [yes])
+m4_if(foowat, [1], [yes])
+m4_if(fooc, [1], [yes])
+m4_if(foocat, [1], [yes])
+m4_if(foof, [1], [yes])
+_ATEOF
+
+
+cat >input1.y <<'_ATEOF'
+%skeleton "./skel1.c"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:193: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input1.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input1.y" "skeletons.at:193"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input1.y: warning: foow fubar
+foow.y:2.3-5.3: warning: foowat fubar
+input1.y: error: fooc fubar
+fooc.y:1.1-10.5: error: foocat fubar
+input1.y: fatal error: foof fubar
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:193"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >skel2.c <<'_ATEOF'
+m4_define([foofat], [b4_fatal_at([[foof.y:12.11]],
+                                       [[foof.y:100.123]], [[foofat fubar]])])
+m4_if(foofat, [1], [yes])
+_ATEOF
+
+
+cat >input2.y <<'_ATEOF'
+%skeleton "./skel2.c"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:213: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input2.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input2.y" "skeletons.at:213"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "foof.y:12.11-100.122: fatal error: foofat fubar
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >skel3.c <<'_ATEOF'
+b4_complain_at(b4_percent_define_get_loc([[bogus]]), [[bad value]])
+_ATEOF
+
+
+cat >input3.y <<'_ATEOF'
+%skeleton "./skel3.c"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:227: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input3.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input3.y" "skeletons.at:227"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input3.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input3.y: fatal error: b4_percent_define_get_loc: undefined %define variable 'bogus'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >skel4.c <<'_ATEOF'
+b4_warn_at(b4_percent_define_get_syncline([[bogus]]), [[bad value]])
+_ATEOF
+
+
+cat >input4.y <<'_ATEOF'
+%skeleton "./skel4.c"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:241: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input4.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input4.y" "skeletons.at:241"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input4.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input4.y: fatal error: b4_percent_define_get_syncline: undefined %define variable 'bogus'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:241"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_95
+#AT_START_96
+at_fn_group_banner 96 'skeletons.at:252' \
+  "Fatal errors make M4 exit immediately" "          " 4
+at_xfail=no
+(
+  $as_echo "96. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >skel1.c <<'_ATEOF'
+b4_complain([[non-fatal error]])
+b4_fatal([[M4 should exit immediately here]])
+m4_fatal([this should never be evaluated])
+_ATEOF
+
+
+cat >input1.y <<'_ATEOF'
+%skeleton "./skel1.c"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:266: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input1.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input1.y" "skeletons.at:266"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input1.y: error: non-fatal error
+input1.y: fatal error: M4 should exit immediately here
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:266"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >skel2.c <<'_ATEOF'
+b4_warn([[morning]])
+b4_fatal_at([[foo.y:1.5]], [[foo.y:1.7]], [[M4 should exit immediately here]])
+m4_fatal([this should never be evaluated])
+_ATEOF
+
+
+cat >input2.y <<'_ATEOF'
+%skeleton "./skel2.c"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:283: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input2.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input2.y" "skeletons.at:283"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input2.y: warning: morning
+foo.y:1.5-6: fatal error: M4 should exit immediately here
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:283"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_96
+#AT_START_97
+at_fn_group_banner 97 'skeletons.at:306' \
+  "Fatal errors but M4 continues producing output" " " 4
+at_xfail=no
+(
+  $as_echo "97. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >gen-skel.pl <<'_ATEOF'
+use warnings;
+use strict;
+my $M4 = "m4";
+my $DNL = "d"."nl";
+print "${M4}_divert_push(0)$DNL\n";
+print '@output(@,@)', "\n";
+(print "garbage"x10, "\n") for (1..1000);
+print "${M4}_divert_pop(0)\n";
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:318: \$PERL gen-skel.pl > skel.c || exit 77"
+at_fn_check_prepare_dynamic "$PERL gen-skel.pl > skel.c || exit 77" "skeletons.at:318"
+( $at_check_trace; $PERL gen-skel.pl > skel.c || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/skeletons.at:318"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input.y <<'_ATEOF'
+%skeleton "./skel.c"
+%%
+start: ;
+_ATEOF
+
+
+
+{ set +x
+$as_echo "$at_srcdir/skeletons.at:326: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "skeletons.at:326"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: fatal error: too many arguments for @output directive in skeleton
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/skeletons.at:326"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_97
+#AT_START_98
+at_fn_group_banner 98 'sets.at:66' \
+  "Nullable" "                                       " 5
+at_xfail=no
+(
+  $as_echo "98. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # At some point, nullable had been smoking grass, and managed to say:
@@ -3510,30 +20749,91 @@
 _ATEOF
 
 
-$at_traceoff
-echo "sets.at:81: bison --trace=sets input.y"
-echo sets.at:81 >$at_check_line_file
-( $at_traceon; bison --trace=sets input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:81: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/sets.at:81: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --trace=sets input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "sets.at:81"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:81"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/sets.at:81: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y" "sets.at:81"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:81"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/sets.at:81: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "sets.at:81"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:81"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/sets.at:81: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "sets.at:81"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:81"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/sets.at:81: bison --trace=sets input.y"
+at_fn_check_prepare_trace "sets.at:81"
+( $at_check_trace; bison --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:81"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 cat >extract.sed <<'_ATEOF'
 #n
@@ -3563,67 +20863,42 @@
 }
 _ATEOF
 
-$at_traceoff
-echo "sets.at:82: sed -f extract.sed stderr"
-echo sets.at:82 >$at_check_line_file
-( $at_traceon; sed -f extract.sed stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:82: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/sets.at:82: sed -f extract.sed stderr"
+at_fn_check_prepare_trace "sets.at:82"
+( $at_check_trace; sed -f extract.sed stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:82"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "sets.at:82: mv stdout sets"
-echo sets.at:82 >$at_check_line_file
-( $at_traceon; mv stdout sets ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:82: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/sets.at:82: mv stdout sets"
+at_fn_check_prepare_trace "sets.at:82"
+( $at_check_trace; mv stdout sets
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:82"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "sets.at:107: cat sets"
-echo sets.at:107 >$at_check_line_file
-( $at_traceon; cat sets ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "DERIVES
+{ set +x
+$as_echo "$at_srcdir/sets.at:83: cat sets"
+at_fn_check_prepare_trace "sets.at:83"
+( $at_check_trace; cat sets
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "DERIVES
 	\$accept derives
 		  0  e \$end
 	e derives
@@ -3646,37 +20921,25 @@
 	e derives
 		  1  'e'
 		  2  /* empty */
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:107: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:83"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  32 ) # 32. sets.at:151: Broken Closure
-    at_setup_line='sets.at:151'
-    at_desc='Broken Closure'
-    $at_quiet $ECHO_N " 32: Broken Closure                               $ECHO_C"
-    at_xfail=no
-    (
-      echo "32. sets.at:151: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_98
+#AT_START_99
+at_fn_group_banner 99 'sets.at:151' \
+  "Broken Closure" "                                 " 5
+at_xfail=no
+(
+  $as_echo "99. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -3692,42 +20955,102 @@
 _ATEOF
 
 
-$at_traceoff
-echo "sets.at:165: bison --trace=sets input.y"
-echo sets.at:165 >$at_check_line_file
-( $at_traceon; bison --trace=sets input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:165: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/sets.at:165: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --trace=sets input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "sets.at:165"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/sets.at:165: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y" "sets.at:165"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/sets.at:165: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "sets.at:165"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/sets.at:165: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "sets.at:165"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/sets.at:165: bison --trace=sets input.y"
+at_fn_check_prepare_trace "sets.at:165"
+( $at_check_trace; bison --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "sets.at:183: sed -n 's/[	 ]*\$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr"
-echo sets.at:183 >$at_check_line_file
-( $at_traceon; sed -n 's/[	 ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "RTC: Firsts Output BEGIN
+
+{ set +x
+$as_echo "$at_srcdir/sets.at:167: sed -n 's/[	 ]*\$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr"
+at_fn_check_prepare_dynamic "sed -n 's/[	 ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr" "sets.at:167"
+( $at_check_trace; sed -n 's/[	 ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "RTC: Firsts Output BEGIN
 
    012345678
   .---------.
@@ -3742,37 +21065,25 @@
  8|        1|
   \`---------'
 RTC: Firsts Output END
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:183: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  33 ) # 33. sets.at:193: Firsts
-    at_setup_line='sets.at:193'
-    at_desc='Firsts'
-    $at_quiet $ECHO_N " 33: Firsts                                       $ECHO_C"
-    at_xfail=no
-    (
-      echo "33. sets.at:193: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_99
+#AT_START_100
+at_fn_group_banner 100 'sets.at:193' \
+  "Firsts" "                                         " 5
+at_xfail=no
+(
+  $as_echo "100. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -3792,30 +21103,91 @@
 _ATEOF
 
 
-$at_traceoff
-echo "sets.at:211: bison --trace=sets input.y"
-echo sets.at:211 >$at_check_line_file
-( $at_traceon; bison --trace=sets input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:211: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/sets.at:211: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --trace=sets input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "sets.at:211"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/sets.at:211: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y" "sets.at:211"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/sets.at:211: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "sets.at:211"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/sets.at:211: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "sets.at:211"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/sets.at:211: bison --trace=sets input.y"
+at_fn_check_prepare_trace "sets.at:211"
+( $at_check_trace; bison --trace=sets input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 cat >extract.sed <<'_ATEOF'
 #n
@@ -3845,67 +21217,42 @@
 }
 _ATEOF
 
-$at_traceoff
-echo "sets.at:212: sed -f extract.sed stderr"
-echo sets.at:212 >$at_check_line_file
-( $at_traceon; sed -f extract.sed stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:212: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/sets.at:212: sed -f extract.sed stderr"
+at_fn_check_prepare_trace "sets.at:212"
+( $at_check_trace; sed -f extract.sed stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:212"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "sets.at:212: mv stdout sets"
-echo sets.at:212 >$at_check_line_file
-( $at_traceon; mv stdout sets ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:212: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/sets.at:212: mv stdout sets"
+at_fn_check_prepare_trace "sets.at:212"
+( $at_check_trace; mv stdout sets
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:212"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "sets.at:252: cat sets"
-echo sets.at:252 >$at_check_line_file
-( $at_traceon; cat sets ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "DERIVES
+{ set +x
+$as_echo "$at_srcdir/sets.at:213: cat sets"
+at_fn_check_prepare_trace "sets.at:213"
+( $at_check_trace; cat sets
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "DERIVES
 	\$accept derives
 		  0  exp \$end
 	exp derives
@@ -3943,37 +21290,25 @@
 		  5  exp '^' exp
 		  6  exp '=' exp
 		  7  \"exp\"
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:252: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  34 ) # 34. sets.at:269: Accept
-    at_setup_line='sets.at:269'
-    at_desc='Accept'
-    $at_quiet $ECHO_N " 34: Accept                                       $ECHO_C"
-    at_xfail=no
-    (
-      echo "34. sets.at:269: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_100
+#AT_START_101
+at_fn_group_banner 101 'sets.at:269' \
+  "Accept" "                                         " 5
+at_xfail=no
+(
+  $as_echo "101. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -3987,64 +21322,113 @@
 _ATEOF
 
 
-$at_traceoff
-echo "sets.at:281: bison -v -o input.c input.y"
-echo sets.at:281 >$at_check_line_file
-( $at_traceon; bison -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:281: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/sets.at:281: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "sets.at:281"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:281"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/sets.at:281: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y" "sets.at:281"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:281"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/sets.at:281: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "sets.at:281"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:281"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/sets.at:281: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "sets.at:281"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:281"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/sets.at:281: bison -v -o input.c input.y"
+at_fn_check_prepare_trace "sets.at:281"
+( $at_check_trace; bison -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:281"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Get the final state in the parser.
-$at_traceoff
-echo "sets.at:285: sed -n 's/.*define YYFINAL *\\([0-9][0-9]*\\)/final state \\1/p' input.c"
-echo sets.at:285 >$at_check_line_file
-( $at_traceon; sed -n 's/.*define YYFINAL *\([0-9][0-9]*\)/final state \1/p' input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:285: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/sets.at:284: sed -n 's/.*define YYFINAL *\\([0-9][0-9]*\\)/final state \\1/p' input.c"
+at_fn_check_prepare_trace "sets.at:284"
+( $at_check_trace; sed -n 's/.*define YYFINAL *\([0-9][0-9]*\)/final state \1/p' input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:284"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 mv stdout expout
 
 # Get the final state in the report, from the "accept" action..
-$at_traceoff
-echo "sets.at:300: sed -n '
-           /^state \\(.*\\)/{
+{ set +x
+$as_echo "$at_srcdir/sets.at:289: sed -n '
+           /^State \\(.*\\)/{
 	     s//final state \\1/
 	     x
 	   }
@@ -4054,9 +21438,9 @@
 	     q
 	   }
 	' input.output"
-echo sets.at:300 >$at_check_line_file
-( $at_traceon; sed -n '
-           /^state \(.*\)/{
+at_fn_check_prepare_notrace 'an embedded newline' "sets.at:289"
+( $at_check_trace; sed -n '
+           /^State \(.*\)/{
 	     s//final state \1/
 	     x
 	   }
@@ -4065,57 +21449,34 @@
 	     p
 	     q
 	   }
-	' input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "sets.at:300: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+	' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/sets.at:289"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-
-  banner-4 ) # Banner 4. reduce.at:19
-    cat <<\_ATEOF
-
-Grammar Reduction.
-
-_ATEOF
-    ;;
-
-  35 ) # 35. reduce.at:26: Useless Terminals
-    at_setup_line='reduce.at:26'
-    at_desc='Useless Terminals'
-    $at_quiet $ECHO_N " 35: Useless Terminals                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "35. reduce.at:26: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_101
+#AT_START_102
+at_fn_group_banner 102 'reduce.at:25' \
+  "Useless Terminals" "                              " 6
+at_xfail=no
+(
+  $as_echo "102. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
 %verbose
-%output="input.c"
+%output "input.c"
 
 %token useless1
 %token useless2
@@ -4133,42 +21494,102 @@
 _ATEOF
 
 
-$at_traceoff
-echo "reduce.at:47: bison input.y"
-echo reduce.at:47 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:47: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:46: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:46"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/reduce.at:46: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "reduce.at:46"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:46: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:46"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:46: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:46"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/reduce.at:46: bison input.y"
+at_fn_check_prepare_trace "reduce.at:46"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "reduce.at:60: sed -n '/^Grammar/q;/^\$/!p' input.output"
-echo reduce.at:60 >$at_check_line_file
-( $at_traceon; sed -n '/^Grammar/q;/^$/!p' input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Terminals which are not used
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:48: sed -n '/^Grammar/q;/^\$/!p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^Grammar/q;/^$/!p' input.output" "reduce.at:48"
+( $at_check_trace; sed -n '/^Grammar/q;/^$/!p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Terminals unused in grammar
    useless1
    useless2
    useless3
@@ -4178,42 +21599,30 @@
    useless7
    useless8
    useless9
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:60: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:48"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  36 ) # 36. reduce.at:70: Useless Nonterminals
-    at_setup_line='reduce.at:70'
-    at_desc='Useless Nonterminals'
-    $at_quiet $ECHO_N " 36: Useless Nonterminals                         $ECHO_C"
-    at_xfail=no
-    (
-      echo "36. reduce.at:70: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_102
+#AT_START_103
+at_fn_group_banner 103 'reduce.at:69' \
+  "Useless Nonterminals" "                           " 6
+at_xfail=no
+(
+  $as_echo "103. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
 %verbose
-%output="input.c"
+%output "input.c"
 
 %nterm useless1
 %nterm useless2
@@ -4231,52 +21640,239 @@
 _ATEOF
 
 
-$at_traceoff
-echo "reduce.at:102: bison input.y"
-echo reduce.at:102 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: warning: 9 useless nonterminals
-input.y:4.8-15: warning: useless nonterminal: useless1
-input.y:5.8-15: warning: useless nonterminal: useless2
-input.y:6.8-15: warning: useless nonterminal: useless3
-input.y:7.8-15: warning: useless nonterminal: useless4
-input.y:8.8-15: warning: useless nonterminal: useless5
-input.y:9.8-15: warning: useless nonterminal: useless6
-input.y:10.8-15: warning: useless nonterminal: useless7
-input.y:11.8-15: warning: useless nonterminal: useless8
-input.y:12.8-15: warning: useless nonterminal: useless9
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:102: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "reduce.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:90"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:90"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:90: bison input.y"
+at_fn_check_prepare_trace "reduce.at:90"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: warning: 9 nonterminals useless in grammar
+input.y:4.8-15: warning: nonterminal useless in grammar: useless1
+input.y:5.8-15: warning: nonterminal useless in grammar: useless2
+input.y:6.8-15: warning: nonterminal useless in grammar: useless3
+input.y:7.8-15: warning: nonterminal useless in grammar: useless4
+input.y:8.8-15: warning: nonterminal useless in grammar: useless5
+input.y:9.8-15: warning: nonterminal useless in grammar: useless6
+input.y:10.8-15: warning: nonterminal useless in grammar: useless7
+input.y:11.8-15: warning: nonterminal useless in grammar: useless8
+input.y:12.8-15: warning: nonterminal useless in grammar: useless9
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror" "reduce.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y: warning: 9 nonterminals useless in grammar
+input.y:4.8-15: warning: nonterminal useless in grammar: useless1
+input.y:5.8-15: warning: nonterminal useless in grammar: useless2
+input.y:6.8-15: warning: nonterminal useless in grammar: useless3
+input.y:7.8-15: warning: nonterminal useless in grammar: useless4
+input.y:8.8-15: warning: nonterminal useless in grammar: useless5
+input.y:9.8-15: warning: nonterminal useless in grammar: useless6
+input.y:10.8-15: warning: nonterminal useless in grammar: useless7
+input.y:11.8-15: warning: nonterminal useless in grammar: useless8
+input.y:12.8-15: warning: nonterminal useless in grammar: useless9
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:90"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error" "reduce.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror" "reduce.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror" "reduce.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
-
-
-$at_traceoff
-echo "reduce.at:115: sed -n '/^Grammar/q;/^\$/!p' input.output"
-echo reduce.at:115 >$at_check_line_file
-( $at_traceon; sed -n '/^Grammar/q;/^$/!p' input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Useless nonterminals
+{ set +x
+$as_echo "$at_srcdir/reduce.at:103: sed -n '/^Grammar/q;/^\$/!p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^Grammar/q;/^$/!p' input.output" "reduce.at:103"
+( $at_check_trace; sed -n '/^Grammar/q;/^$/!p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Nonterminals useless in grammar
    useless1
    useless2
    useless3
@@ -4286,44 +21882,32 @@
    useless7
    useless8
    useless9
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:115: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:103"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  37 ) # 37. reduce.at:125: Useless Rules
-    at_setup_line='reduce.at:125'
-    at_desc='Useless Rules'
-    $at_quiet $ECHO_N " 37: Useless Rules                                $ECHO_C"
-    at_xfail=no
-    (
-      echo "37. reduce.at:125: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_103
+#AT_START_104
+at_fn_group_banner 104 'reduce.at:124' \
+  "Useless Rules" "                                  " 6
+at_xfail=no
+(
+  $as_echo "104. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 
 cat >input.y <<'_ATEOF'
 %verbose
-%output="input.c"
+%output "input.c"
 %token useful
 %%
 exp: useful;
@@ -4339,61 +21923,575 @@
 _ATEOF
 
 
-$at_traceoff
-echo "reduce.at:166: bison input.y"
-echo reduce.at:166 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: warning: 9 useless nonterminals and 9 useless rules
-input.y:6.1-8: warning: useless nonterminal: useless1
-input.y:7.1-8: warning: useless nonterminal: useless2
-input.y:8.1-8: warning: useless nonterminal: useless3
-input.y:9.1-8: warning: useless nonterminal: useless4
-input.y:10.1-8: warning: useless nonterminal: useless5
-input.y:11.1-8: warning: useless nonterminal: useless6
-input.y:12.1-8: warning: useless nonterminal: useless7
-input.y:13.1-8: warning: useless nonterminal: useless8
-input.y:14.1-8: warning: useless nonterminal: useless9
-input.y:6.11-13: warning: useless rule: useless1: '1'
-input.y:7.11-13: warning: useless rule: useless2: '2'
-input.y:8.11-13: warning: useless rule: useless3: '3'
-input.y:9.11-13: warning: useless rule: useless4: '4'
-input.y:10.11-13: warning: useless rule: useless5: '5'
-input.y:11.11-13: warning: useless rule: useless6: '6'
-input.y:12.11-13: warning: useless rule: useless7: '7'
-input.y:13.11-13: warning: useless rule: useless8: '8'
-input.y:14.11-13: warning: useless rule: useless9: '9'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:166: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -fcaret input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:145"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y" "reduce.at:145"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:145"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:145"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:145: bison -fcaret input.y"
+at_fn_check_prepare_trace "reduce.at:145"
+( $at_check_trace; bison -fcaret input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: warning: 9 nonterminals useless in grammar
+input.y: warning: 9 rules useless in grammar
+input.y:6.1-8: warning: nonterminal useless in grammar: useless1
+ useless1: '1';
+ ^^^^^^^^
+input.y:7.1-8: warning: nonterminal useless in grammar: useless2
+ useless2: '2';
+ ^^^^^^^^
+input.y:8.1-8: warning: nonterminal useless in grammar: useless3
+ useless3: '3';
+ ^^^^^^^^
+input.y:9.1-8: warning: nonterminal useless in grammar: useless4
+ useless4: '4';
+ ^^^^^^^^
+input.y:10.1-8: warning: nonterminal useless in grammar: useless5
+ useless5: '5';
+ ^^^^^^^^
+input.y:11.1-8: warning: nonterminal useless in grammar: useless6
+ useless6: '6';
+ ^^^^^^^^
+input.y:12.1-8: warning: nonterminal useless in grammar: useless7
+ useless7: '7';
+ ^^^^^^^^
+input.y:13.1-8: warning: nonterminal useless in grammar: useless8
+ useless8: '8';
+ ^^^^^^^^
+input.y:14.1-8: warning: nonterminal useless in grammar: useless9
+ useless9: '9';
+ ^^^^^^^^
+input.y:6.11-13: warning: rule useless in grammar
+ useless1: '1';
+           ^^^
+input.y:7.11-13: warning: rule useless in grammar
+ useless2: '2';
+           ^^^
+input.y:8.11-13: warning: rule useless in grammar
+ useless3: '3';
+           ^^^
+input.y:9.11-13: warning: rule useless in grammar
+ useless4: '4';
+           ^^^
+input.y:10.11-13: warning: rule useless in grammar
+ useless5: '5';
+           ^^^
+input.y:11.11-13: warning: rule useless in grammar
+ useless6: '6';
+           ^^^
+input.y:12.11-13: warning: rule useless in grammar
+ useless7: '7';
+           ^^^
+input.y:13.11-13: warning: rule useless in grammar
+ useless8: '8';
+           ^^^
+input.y:14.11-13: warning: rule useless in grammar
+ useless9: '9';
+           ^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Werror" "reduce.at:145"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y: warning: 9 nonterminals useless in grammar
+input.y: warning: 9 rules useless in grammar
+input.y:6.1-8: warning: nonterminal useless in grammar: useless1
+ useless1: '1';
+ ^^^^^^^^
+input.y:7.1-8: warning: nonterminal useless in grammar: useless2
+ useless2: '2';
+ ^^^^^^^^
+input.y:8.1-8: warning: nonterminal useless in grammar: useless3
+ useless3: '3';
+ ^^^^^^^^
+input.y:9.1-8: warning: nonterminal useless in grammar: useless4
+ useless4: '4';
+ ^^^^^^^^
+input.y:10.1-8: warning: nonterminal useless in grammar: useless5
+ useless5: '5';
+ ^^^^^^^^
+input.y:11.1-8: warning: nonterminal useless in grammar: useless6
+ useless6: '6';
+ ^^^^^^^^
+input.y:12.1-8: warning: nonterminal useless in grammar: useless7
+ useless7: '7';
+ ^^^^^^^^
+input.y:13.1-8: warning: nonterminal useless in grammar: useless8
+ useless8: '8';
+ ^^^^^^^^
+input.y:14.1-8: warning: nonterminal useless in grammar: useless9
+ useless9: '9';
+ ^^^^^^^^
+input.y:6.11-13: warning: rule useless in grammar
+ useless1: '1';
+           ^^^
+input.y:7.11-13: warning: rule useless in grammar
+ useless2: '2';
+           ^^^
+input.y:8.11-13: warning: rule useless in grammar
+ useless3: '3';
+           ^^^
+input.y:9.11-13: warning: rule useless in grammar
+ useless4: '4';
+           ^^^
+input.y:10.11-13: warning: rule useless in grammar
+ useless5: '5';
+           ^^^
+input.y:11.11-13: warning: rule useless in grammar
+ useless6: '6';
+           ^^^
+input.y:12.11-13: warning: rule useless in grammar
+ useless7: '7';
+           ^^^
+input.y:13.11-13: warning: rule useless in grammar
+ useless8: '8';
+           ^^^
+input.y:14.11-13: warning: rule useless in grammar
+ useless9: '9';
+           ^^^
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:145"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error" "reduce.at:145"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror" "reduce.at:145"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:145: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror" "reduce.at:145"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:204"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "reduce.at:204"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:204"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:204"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:204: bison input.y"
+at_fn_check_prepare_trace "reduce.at:204"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: warning: 9 nonterminals useless in grammar
+input.y: warning: 9 rules useless in grammar
+input.y:6.1-8: warning: nonterminal useless in grammar: useless1
+input.y:7.1-8: warning: nonterminal useless in grammar: useless2
+input.y:8.1-8: warning: nonterminal useless in grammar: useless3
+input.y:9.1-8: warning: nonterminal useless in grammar: useless4
+input.y:10.1-8: warning: nonterminal useless in grammar: useless5
+input.y:11.1-8: warning: nonterminal useless in grammar: useless6
+input.y:12.1-8: warning: nonterminal useless in grammar: useless7
+input.y:13.1-8: warning: nonterminal useless in grammar: useless8
+input.y:14.1-8: warning: nonterminal useless in grammar: useless9
+input.y:6.11-13: warning: rule useless in grammar: useless1: '1'
+input.y:7.11-13: warning: rule useless in grammar: useless2: '2'
+input.y:8.11-13: warning: rule useless in grammar: useless3: '3'
+input.y:9.11-13: warning: rule useless in grammar: useless4: '4'
+input.y:10.11-13: warning: rule useless in grammar: useless5: '5'
+input.y:11.11-13: warning: rule useless in grammar: useless6: '6'
+input.y:12.11-13: warning: rule useless in grammar: useless7: '7'
+input.y:13.11-13: warning: rule useless in grammar: useless8: '8'
+input.y:14.11-13: warning: rule useless in grammar: useless9: '9'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror" "reduce.at:204"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "reduce.at:199: sed -n '/^Grammar/q;/^\$/!p' input.output"
-echo reduce.at:199 >$at_check_line_file
-( $at_traceon; sed -n '/^Grammar/q;/^$/!p' input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Useless nonterminals
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y: warning: 9 nonterminals useless in grammar
+input.y: warning: 9 rules useless in grammar
+input.y:6.1-8: warning: nonterminal useless in grammar: useless1
+input.y:7.1-8: warning: nonterminal useless in grammar: useless2
+input.y:8.1-8: warning: nonterminal useless in grammar: useless3
+input.y:9.1-8: warning: nonterminal useless in grammar: useless4
+input.y:10.1-8: warning: nonterminal useless in grammar: useless5
+input.y:11.1-8: warning: nonterminal useless in grammar: useless6
+input.y:12.1-8: warning: nonterminal useless in grammar: useless7
+input.y:13.1-8: warning: nonterminal useless in grammar: useless8
+input.y:14.1-8: warning: nonterminal useless in grammar: useless9
+input.y:6.11-13: warning: rule useless in grammar: useless1: '1'
+input.y:7.11-13: warning: rule useless in grammar: useless2: '2'
+input.y:8.11-13: warning: rule useless in grammar: useless3: '3'
+input.y:9.11-13: warning: rule useless in grammar: useless4: '4'
+input.y:10.11-13: warning: rule useless in grammar: useless5: '5'
+input.y:11.11-13: warning: rule useless in grammar: useless6: '6'
+input.y:12.11-13: warning: rule useless in grammar: useless7: '7'
+input.y:13.11-13: warning: rule useless in grammar: useless8: '8'
+input.y:14.11-13: warning: rule useless in grammar: useless9: '9'
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:204"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error" "reduce.at:204"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror" "reduce.at:204"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:204: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror" "reduce.at:204"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:227: sed -n '/^Grammar/q;/^\$/!p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^Grammar/q;/^$/!p' input.output" "reduce.at:227"
+( $at_check_trace; sed -n '/^Grammar/q;/^$/!p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Nonterminals useless in grammar
    useless1
    useless2
    useless3
@@ -4403,7 +22501,7 @@
    useless7
    useless8
    useless9
-Terminals which are not used
+Terminals unused in grammar
    '1'
    '2'
    '3'
@@ -4413,7 +22511,7 @@
    '7'
    '8'
    '9'
-Useless rules
+Rules useless in grammar
     2 useless1: '1'
     3 useless2: '2'
     4 useless3: '3'
@@ -4423,37 +22521,25 @@
     8 useless7: '7'
     9 useless8: '8'
    10 useless9: '9'
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:199: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  38 ) # 38. reduce.at:212: Reduced Automaton
-    at_setup_line='reduce.at:212'
-    at_desc='Reduced Automaton'
-    $at_quiet $ECHO_N " 38: Reduced Automaton                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "38. reduce.at:212: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_104
+#AT_START_105
+at_fn_group_banner 105 'reduce.at:271' \
+  "Reduced Automaton" "                              " 6
+at_xfail=no
+(
+  $as_echo "105. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -4466,7 +22552,7 @@
 /* A useful one. */
 %token useful
 %verbose
-%output="not-reduced.c"
+%output "not-reduced.c"
 
 %%
 
@@ -4484,71 +22570,484 @@
 _ATEOF
 
 
-$at_traceoff
-echo "reduce.at:248: bison not-reduced.y"
-echo reduce.at:248 >$at_check_line_file
-( $at_traceon; bison not-reduced.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "not-reduced.y: warning: 2 useless nonterminals and 3 useless rules
-not-reduced.y:14.1-13: warning: useless nonterminal: not_reachable
-not-reduced.y:11.6-19: warning: useless nonterminal: non_productive
-not-reduced.y:11.6-57: warning: useless rule: exp: non_productive
-not-reduced.y:14.16-56: warning: useless rule: not_reachable: useful
-not-reduced.y:17.17-18.63: warning: useless rule: non_productive: non_productive useless_token
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:248: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -fcaret not-reduced.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:300"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -fcaret not-reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret not-reduced.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret not-reduced.y" "reduce.at:300"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret not-reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:300"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:300"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:300: bison -fcaret not-reduced.y"
+at_fn_check_prepare_trace "reduce.at:300"
+( $at_check_trace; bison -fcaret not-reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "not-reduced.y: warning: 2 nonterminals useless in grammar
+not-reduced.y: warning: 3 rules useless in grammar
+not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable
+ not_reachable: useful  { /* A not reachable action. */ }
+ ^^^^^^^^^^^^^
+not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive
+    | non_productive    { /* A non productive action. */ }
+      ^^^^^^^^^^^^^^
+not-reduced.y:11.6-57: warning: rule useless in grammar
+    | non_productive    { /* A non productive action. */ }
+      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+not-reduced.y:14.16-56: warning: rule useless in grammar
+ not_reachable: useful  { /* A not reachable action. */ }
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+not-reduced.y:17.17-18.63: warning: rule useless in grammar
+ non_productive: non_productive useless_token
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret not-reduced.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret not-reduced.y -Werror" "reduce.at:300"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret not-reduced.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+not-reduced.y: warning: 2 nonterminals useless in grammar
+not-reduced.y: warning: 3 rules useless in grammar
+not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable
+ not_reachable: useful  { /* A not reachable action. */ }
+ ^^^^^^^^^^^^^
+not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive
+    | non_productive    { /* A non productive action. */ }
+      ^^^^^^^^^^^^^^
+not-reduced.y:11.6-57: warning: rule useless in grammar
+    | non_productive    { /* A non productive action. */ }
+      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+not-reduced.y:14.16-56: warning: rule useless in grammar
+ not_reachable: useful  { /* A not reachable action. */ }
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+not-reduced.y:17.17-18.63: warning: rule useless in grammar
+ non_productive: non_productive useless_token
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:300"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret not-reduced.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret not-reduced.y --warnings=error" "reduce.at:300"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret not-reduced.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret not-reduced.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret not-reduced.y -Wnone -Werror" "reduce.at:300"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret not-reduced.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:300: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret not-reduced.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret not-reduced.y --warnings=none -Werror" "reduce.at:300"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret not-reduced.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot not-reduced.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:320"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot not-reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml not-reduced.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml not-reduced.y" "reduce.at:320"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml not-reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:320"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:320"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:320: bison not-reduced.y"
+at_fn_check_prepare_trace "reduce.at:320"
+( $at_check_trace; bison not-reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "not-reduced.y: warning: 2 nonterminals useless in grammar
+not-reduced.y: warning: 3 rules useless in grammar
+not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable
+not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive
+not-reduced.y:11.6-57: warning: rule useless in grammar: exp: non_productive
+not-reduced.y:14.16-56: warning: rule useless in grammar: not_reachable: useful
+not-reduced.y:17.17-18.63: warning: rule useless in grammar: non_productive: non_productive useless_token
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison not-reduced.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison not-reduced.y -Werror" "reduce.at:320"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison not-reduced.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "reduce.at:260: sed -n '/^Grammar/q;/^\$/!p' not-reduced.output"
-echo reduce.at:260 >$at_check_line_file
-( $at_traceon; sed -n '/^Grammar/q;/^$/!p' not-reduced.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Useless nonterminals
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+not-reduced.y: warning: 2 nonterminals useless in grammar
+not-reduced.y: warning: 3 rules useless in grammar
+not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable
+not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive
+not-reduced.y:11.6-57: warning: rule useless in grammar: exp: non_productive
+not-reduced.y:14.16-56: warning: rule useless in grammar: not_reachable: useful
+not-reduced.y:17.17-18.63: warning: rule useless in grammar: non_productive: non_productive useless_token
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:320"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison not-reduced.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison not-reduced.y --warnings=error" "reduce.at:320"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison not-reduced.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison not-reduced.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison not-reduced.y -Wnone -Werror" "reduce.at:320"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison not-reduced.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:320: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison not-reduced.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison not-reduced.y --warnings=none -Werror" "reduce.at:320"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison not-reduced.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:330: sed -n '/^Grammar/q;/^\$/!p' not-reduced.output"
+at_fn_check_prepare_dynamic "sed -n '/^Grammar/q;/^$/!p' not-reduced.output" "reduce.at:330"
+( $at_check_trace; sed -n '/^Grammar/q;/^$/!p' not-reduced.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Nonterminals useless in grammar
    not_reachable
    non_productive
-Terminals which are not used
+Terminals unused in grammar
    useless_token
-Useless rules
+Rules useless in grammar
     2 exp: non_productive
     3 not_reachable: useful
     4 non_productive: non_productive useless_token
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:260: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # The reduced grammar.
@@ -4559,7 +23058,7 @@
 /* A useful one. */
 %token useful
 %verbose
-%output="reduced.c"
+%output "reduced.c"
 
 %%
 
@@ -4577,81 +23076,128 @@
 _ATEOF
 
 
-$at_traceoff
-echo "reduce.at:287: bison reduced.y"
-echo reduce.at:287 >$at_check_line_file
-( $at_traceon; bison reduced.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:287: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:367: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot reduced.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:367"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:367"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/reduce.at:367: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml reduced.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml reduced.y" "reduce.at:367"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:367"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:367: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:367"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:367"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:367: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:367"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:367"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:367: bison reduced.y"
+at_fn_check_prepare_trace "reduce.at:367"
+( $at_check_trace; bison reduced.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:367"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Comparing the parsers.
 cp reduced.c expout
-$at_traceoff
-echo "reduce.at:291: sed 's/not-reduced/reduced/g' not-reduced.c"
-echo reduce.at:291 >$at_check_line_file
-( $at_traceon; sed 's/not-reduced/reduced/g' not-reduced.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:291: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/reduce.at:371: sed 's/not-reduced/reduced/g' not-reduced.c"
+at_fn_check_prepare_trace "reduce.at:371"
+( $at_check_trace; sed 's/not-reduced/reduced/g' not-reduced.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:371"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  39 ) # 39. reduce.at:301: Underivable Rules
-    at_setup_line='reduce.at:301'
-    at_desc='Underivable Rules'
-    $at_quiet $ECHO_N " 39: Underivable Rules                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "39. reduce.at:301: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_105
+#AT_START_106
+at_fn_group_banner 106 'reduce.at:381' \
+  "Underivable Rules" "                              " 6
+at_xfail=no
+(
+  $as_echo "106. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 
 cat >input.y <<'_ATEOF'
 %verbose
-%output="input.c"
+%output "input.c"
 %token useful
 %%
 exp: useful | underivable;
@@ -4660,145 +23206,8646 @@
 _ATEOF
 
 
-$at_traceoff
-echo "reduce.at:322: bison input.y"
-echo reduce.at:322 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: warning: 2 useless nonterminals and 3 useless rules
-input.y:5.15-25: warning: useless nonterminal: underivable
-input.y:6.14-24: warning: useless nonterminal: indirection
-input.y:5.15-25: warning: useless rule: exp: underivable
-input.y:6.14-24: warning: useless rule: underivable: indirection
-input.y:7.14-24: warning: useless rule: indirection: underivable
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:322: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:395"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y" "reduce.at:395"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:395"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:395"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:395: bison input.y"
+at_fn_check_prepare_trace "reduce.at:395"
+( $at_check_trace; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: warning: 2 nonterminals useless in grammar
+input.y: warning: 3 rules useless in grammar
+input.y:5.15-25: warning: nonterminal useless in grammar: underivable
+input.y:6.14-24: warning: nonterminal useless in grammar: indirection
+input.y:5.15-25: warning: rule useless in grammar: exp: underivable
+input.y:6.14-24: warning: rule useless in grammar: underivable: indirection
+input.y:7.14-24: warning: rule useless in grammar: indirection: underivable
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Werror" "reduce.at:395"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y: warning: 2 nonterminals useless in grammar
+input.y: warning: 3 rules useless in grammar
+input.y:5.15-25: warning: nonterminal useless in grammar: underivable
+input.y:6.14-24: warning: nonterminal useless in grammar: indirection
+input.y:5.15-25: warning: rule useless in grammar: exp: underivable
+input.y:6.14-24: warning: rule useless in grammar: underivable: indirection
+input.y:7.14-24: warning: rule useless in grammar: indirection: underivable
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:395"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=error" "reduce.at:395"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y -Wnone -Werror" "reduce.at:395"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:395: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror" "reduce.at:395"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
-
-
-$at_traceoff
-echo "reduce.at:332: sed -n '/^Grammar/q;/^\$/!p' input.output"
-echo reduce.at:332 >$at_check_line_file
-( $at_traceon; sed -n '/^Grammar/q;/^$/!p' input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Useless nonterminals
+{ set +x
+$as_echo "$at_srcdir/reduce.at:405: sed -n '/^Grammar/q;/^\$/!p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^Grammar/q;/^$/!p' input.output" "reduce.at:405"
+( $at_check_trace; sed -n '/^Grammar/q;/^$/!p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Nonterminals useless in grammar
    underivable
    indirection
-Useless rules
+Rules useless in grammar
     2 exp: underivable
     3 underivable: indirection
     4 indirection: underivable
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "reduce.at:332: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  40 ) # 40. reduce.at:342: Empty Language
-    at_setup_line='reduce.at:342'
-    at_desc='Empty Language'
-    $at_quiet $ECHO_N " 40: Empty Language                               $ECHO_C"
-    at_xfail=no
-    (
-      echo "40. reduce.at:342: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_106
+#AT_START_107
+at_fn_group_banner 107 'reduce.at:423' \
+  "Empty Language" "                                 " 6
+at_xfail=no
+(
+  $as_echo "107. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
-%output="input.c"
+%output "input.c"
 %%
 exp: exp;
 _ATEOF
 
 
-$at_traceoff
-echo "reduce.at:353: bison input.y"
-echo reduce.at:353 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: warning: 2 useless nonterminals and 2 useless rules
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:431: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "reduce.at:431"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: warning: 2 nonterminals useless in grammar
+input.y: warning: 2 rules useless in grammar
 input.y:3.1-3: fatal error: start symbol exp does not derive any sentence
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "reduce.at:353: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:431"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_107
+#AT_START_108
+at_fn_group_banner 108 'reduce.at:474' \
+  "no %define lr.type: Single State Split" "         " 6
+at_xfail=no
+(
+  $as_echo "108. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
-  banner-5 ) # Banner 5. synclines.at:19
-    cat <<\_ATEOF
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-User Actions.
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
 
+%left 'a'
+// Conflict resolution renders state 12 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+/* A conflict should appear after the first 'a' in rules 4 and 5 but only after
+   having shifted the first 'a' in rule 1.  However, when LALR(1) merging is
+   chosen, the state containing that conflict is reused after having seen the
+   first 'b' in rule 2 and then the first 'a' in rules 4 and 5.  In both cases,
+   because of the merged state, if the next token is an 'a', the %left forces a
+   reduction action with rule 5.  In the latter case, only a shift is actually
+   grammatically correct.  Thus, the parser would report a syntax error for the
+   grammatically correct sentence "baab" because it would encounter a syntax
+   error after that incorrect reduction.
+
+   Despite not being LALR(1), Menhir version 20070322 suffers from this problem
+   as well.  It uses David Pager's weak compatibility test for merging states.
+   Bison and Menhir accept non-LR(1) grammars with conflict resolution.  Pager
+   designed his algorithm only for LR(1) grammars.  */
+A: 'a' 'a' /* rule 4 */
+ | 'a'     /* rule 5 */
+ ;
+
+/* Rule 3, rule 6, and rule 7 ensure that Bison does not report rule 4 as
+   useless after conflict resolution.  This proves that, even though LALR(1)
+   generates incorrect parser tables sometimes, Bison will not necessarily
+   produce any warning to help the user realize it.  */
+c: 'a' 'b' /* rule 6 */
+ | A       /* rule 7 */
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
 _ATEOF
-    ;;
 
-  41 ) # 41. synclines.at:95: Prologue synch line
-    at_setup_line='synclines.at:95'
-    at_desc='Prologue synch line'
-    $at_quiet $ECHO_N " 41: Prologue synch line                          $ECHO_C"
-    at_xfail=no
-    (
-      echo "41. synclines.at:95: testing ..."
-      $at_traceon
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:474"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:474"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:474"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:474"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:474"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:474"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a'
+    5  | . 'a'
+    6 c: . 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  ['a', 'b']
+
+    \$default  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  [\$end]
+    6 c: 'a' . 'b'
+
+    'a'  shift, and go to state 12
+    'b'  shift, and go to state 15
+
+    \$default  reduce using rule 5 (A)
+
+
+State 9
+
+    7 c: A .
+
+    \$default  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    6 c: 'a' 'b' .
+
+    \$default  reduce using rule 6 (c)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:474"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:474"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:474"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:474"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_108
+#AT_START_109
+at_fn_group_banner 109 'reduce.at:474' \
+  "%define lr.type lalr: Single State Split" "       " 6
+at_xfail=no
+(
+  $as_echo "109. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type lalr
+%left 'a'
+// Conflict resolution renders state 12 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+/* A conflict should appear after the first 'a' in rules 4 and 5 but only after
+   having shifted the first 'a' in rule 1.  However, when LALR(1) merging is
+   chosen, the state containing that conflict is reused after having seen the
+   first 'b' in rule 2 and then the first 'a' in rules 4 and 5.  In both cases,
+   because of the merged state, if the next token is an 'a', the %left forces a
+   reduction action with rule 5.  In the latter case, only a shift is actually
+   grammatically correct.  Thus, the parser would report a syntax error for the
+   grammatically correct sentence "baab" because it would encounter a syntax
+   error after that incorrect reduction.
+
+   Despite not being LALR(1), Menhir version 20070322 suffers from this problem
+   as well.  It uses David Pager's weak compatibility test for merging states.
+   Bison and Menhir accept non-LR(1) grammars with conflict resolution.  Pager
+   designed his algorithm only for LR(1) grammars.  */
+A: 'a' 'a' /* rule 4 */
+ | 'a'     /* rule 5 */
+ ;
+
+/* Rule 3, rule 6, and rule 7 ensure that Bison does not report rule 4 as
+   useless after conflict resolution.  This proves that, even though LALR(1)
+   generates incorrect parser tables sometimes, Bison will not necessarily
+   produce any warning to help the user realize it.  */
+c: 'a' 'b' /* rule 6 */
+ | A       /* rule 7 */
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:474"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:474"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:474"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:474"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:474"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:474"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a'
+    5  | . 'a'
+    6 c: . 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  ['a', 'b']
+
+    \$default  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  [\$end]
+    6 c: 'a' . 'b'
+
+    'a'  shift, and go to state 12
+    'b'  shift, and go to state 15
+
+    \$default  reduce using rule 5 (A)
+
+
+State 9
+
+    7 c: A .
+
+    \$default  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    6 c: 'a' 'b' .
+
+    \$default  reduce using rule 6 (c)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:474"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:474"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:474"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:474"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_109
+#AT_START_110
+at_fn_group_banner 110 'reduce.at:474' \
+  "%define lr.type ielr: Single State Split" "       " 6
+at_xfail=no
+(
+  $as_echo "110. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type ielr
+%left 'a'
+// Conflict resolution renders state 12 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+/* A conflict should appear after the first 'a' in rules 4 and 5 but only after
+   having shifted the first 'a' in rule 1.  However, when LALR(1) merging is
+   chosen, the state containing that conflict is reused after having seen the
+   first 'b' in rule 2 and then the first 'a' in rules 4 and 5.  In both cases,
+   because of the merged state, if the next token is an 'a', the %left forces a
+   reduction action with rule 5.  In the latter case, only a shift is actually
+   grammatically correct.  Thus, the parser would report a syntax error for the
+   grammatically correct sentence "baab" because it would encounter a syntax
+   error after that incorrect reduction.
+
+   Despite not being LALR(1), Menhir version 20070322 suffers from this problem
+   as well.  It uses David Pager's weak compatibility test for merging states.
+   Bison and Menhir accept non-LR(1) grammars with conflict resolution.  Pager
+   designed his algorithm only for LR(1) grammars.  */
+A: 'a' 'a' /* rule 4 */
+ | 'a'     /* rule 5 */
+ ;
+
+/* Rule 3, rule 6, and rule 7 ensure that Bison does not report rule 4 as
+   useless after conflict resolution.  This proves that, even though LALR(1)
+   generates incorrect parser tables sometimes, Bison will not necessarily
+   produce any warning to help the user realize it.  */
+c: 'a' 'b' /* rule 6 */
+ | A       /* rule 7 */
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:474"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:474"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:474"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:474"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:474"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:474"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 16
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a'
+    5  | . 'a'
+    6 c: . 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  ['a']
+
+    \$default  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  [\$end]
+    6 c: 'a' . 'b'
+
+    'a'  shift, and go to state 12
+    'b'  shift, and go to state 15
+
+    \$default  reduce using rule 5 (A)
+
+
+State 9
+
+    7 c: A .
+
+    \$default  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    6 c: 'a' 'b' .
+
+    \$default  reduce using rule 6 (c)
+
+
+State 16
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  ['b']
+
+    'a'  shift, and go to state 12
+
+    \$default  reduce using rule 5 (A)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:474"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:474"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:474"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:474"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_110
+#AT_START_111
+at_fn_group_banner 111 'reduce.at:474' \
+  "%define lr.type canonical-lr: Single State Split" "" 6
+at_xfail=no
+(
+  $as_echo "111. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type canonical-lr
+%left 'a'
+// Conflict resolution renders state 12 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+/* A conflict should appear after the first 'a' in rules 4 and 5 but only after
+   having shifted the first 'a' in rule 1.  However, when LALR(1) merging is
+   chosen, the state containing that conflict is reused after having seen the
+   first 'b' in rule 2 and then the first 'a' in rules 4 and 5.  In both cases,
+   because of the merged state, if the next token is an 'a', the %left forces a
+   reduction action with rule 5.  In the latter case, only a shift is actually
+   grammatically correct.  Thus, the parser would report a syntax error for the
+   grammatically correct sentence "baab" because it would encounter a syntax
+   error after that incorrect reduction.
+
+   Despite not being LALR(1), Menhir version 20070322 suffers from this problem
+   as well.  It uses David Pager's weak compatibility test for merging states.
+   Bison and Menhir accept non-LR(1) grammars with conflict resolution.  Pager
+   designed his algorithm only for LR(1) grammars.  */
+A: 'a' 'a' /* rule 4 */
+ | 'a'     /* rule 5 */
+ ;
+
+/* Rule 3, rule 6, and rule 7 ensure that Bison does not report rule 4 as
+   useless after conflict resolution.  This proves that, even though LALR(1)
+   generates incorrect parser tables sometimes, Bison will not necessarily
+   produce any warning to help the user realize it.  */
+c: 'a' 'b' /* rule 6 */
+ | A       /* rule 7 */
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:474"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:474"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:474"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:474: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:474"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:474"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:474"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a'
+    5  | . 'a'
+
+    'a'  shift, and go to state 16
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a'
+    5  | . 'a'
+    6 c: . 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  ['a']
+
+    'a'  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  [\$end]
+    6 c: 'a' . 'b'
+
+    'a'  shift, and go to state 17
+    'b'  shift, and go to state 15
+
+    \$end  reduce using rule 5 (A)
+
+
+State 9
+
+    7 c: A .  [\$end]
+
+    \$end  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .  [\$end]
+
+    \$end  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' .  ['a']
+
+    'a'  reduce using rule 4 (A)
+
+
+State 13
+
+    1 S: 'a' A 'a' .  [\$end]
+
+    \$end  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .  [\$end]
+
+    \$end  reduce using rule 2 (S)
+
+
+State 15
+
+    6 c: 'a' 'b' .  [\$end]
+
+    \$end  reduce using rule 6 (c)
+
+
+State 16
+
+    4 A: 'a' . 'a'
+    5  | 'a' .  ['b']
+
+    'a'  shift, and go to state 18
+
+    'b'  reduce using rule 5 (A)
+
+
+State 17
+
+    4 A: 'a' 'a' .  [\$end]
+
+    \$end  reduce using rule 4 (A)
+
+
+State 18
+
+    4 A: 'a' 'a' .  ['b']
+
+    'b'  reduce using rule 4 (A)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+if test 32767 -lt `wc -l < input.c`; then
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic //'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic //'`
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:474"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:474"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:474"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:474: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:474"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_111
+#AT_START_112
+at_fn_group_banner 112 'reduce.at:707' \
+  "no %define lr.type: Lane Split" "                 " 6
+at_xfail=no
+(
+  $as_echo "112. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* Similar to the last test case set but two states must be split.  */
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+A: 'a' 'a' 'a' /* rule 4 */
+ | 'a' 'a'     /* rule 5 */
+ ;
+
+c: 'a' 'a' 'b' /* rule 6 */
+ | A           /* rule 7 */
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:707"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:707"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:707"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:707"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:707"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:707"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+    6 c: . 'a' 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+    6 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    7 c: A .
+
+    \$default  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  ['a', 'b']
+
+    \$default  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  [\$end]
+    6 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state 16
+    'b'  shift, and go to state 17
+
+    \$default  reduce using rule 5 (A)
+
+
+State 16
+
+    4 A: 'a' 'a' 'a' .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 17
+
+    6 c: 'a' 'a' 'b' .
+
+    \$default  reduce using rule 6 (c)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:707"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:707"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:707"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:707"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_112
+#AT_START_113
+at_fn_group_banner 113 'reduce.at:707' \
+  "%define lr.type lalr: Lane Split" "               " 6
+at_xfail=no
+(
+  $as_echo "113. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type lalr
+%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* Similar to the last test case set but two states must be split.  */
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+A: 'a' 'a' 'a' /* rule 4 */
+ | 'a' 'a'     /* rule 5 */
+ ;
+
+c: 'a' 'a' 'b' /* rule 6 */
+ | A           /* rule 7 */
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:707"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:707"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:707"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:707"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:707"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:707"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+    6 c: . 'a' 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+    6 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    7 c: A .
+
+    \$default  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  ['a', 'b']
+
+    \$default  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  [\$end]
+    6 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state 16
+    'b'  shift, and go to state 17
+
+    \$default  reduce using rule 5 (A)
+
+
+State 16
+
+    4 A: 'a' 'a' 'a' .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 17
+
+    6 c: 'a' 'a' 'b' .
+
+    \$default  reduce using rule 6 (c)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:707"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:707"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:707"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:707"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_113
+#AT_START_114
+at_fn_group_banner 114 'reduce.at:707' \
+  "%define lr.type ielr: Lane Split" "               " 6
+at_xfail=no
+(
+  $as_echo "114. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type ielr
+%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* Similar to the last test case set but two states must be split.  */
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+A: 'a' 'a' 'a' /* rule 4 */
+ | 'a' 'a'     /* rule 5 */
+ ;
+
+c: 'a' 'a' 'b' /* rule 6 */
+ | A           /* rule 7 */
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:707"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:707"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:707"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:707"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:707"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:707"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 18
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+    6 c: . 'a' 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+    6 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    7 c: A .
+
+    \$default  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  ['a']
+
+    \$default  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  [\$end]
+    6 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state 16
+    'b'  shift, and go to state 17
+
+    \$default  reduce using rule 5 (A)
+
+
+State 16
+
+    4 A: 'a' 'a' 'a' .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 17
+
+    6 c: 'a' 'a' 'b' .
+
+    \$default  reduce using rule 6 (c)
+
+
+State 18
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+
+    'a'  shift, and go to state 19
+
+
+State 19
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  ['b']
+
+    'a'  shift, and go to state 16
+
+    \$default  reduce using rule 5 (A)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:707"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:707"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:707"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:707"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_114
+#AT_START_115
+at_fn_group_banner 115 'reduce.at:707' \
+  "%define lr.type canonical-lr: Lane Split" "       " 6
+at_xfail=no
+(
+  $as_echo "115. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type canonical-lr
+%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* Similar to the last test case set but two states must be split.  */
+S: 'a' A 'a' /* rule 1 */
+ | 'b' A 'b' /* rule 2 */
+ | 'c' c     /* rule 3 */
+ ;
+
+A: 'a' 'a' 'a' /* rule 4 */
+ | 'a' 'a'     /* rule 5 */
+ ;
+
+c: 'a' 'a' 'b' /* rule 6 */
+ | A           /* rule 7 */
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:707"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:707"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:707"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:707: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:707"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:707"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:707"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+
+    'a'  shift, and go to state 18
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' 'a'
+    5  | . 'a' 'a'
+    6 c: . 'a' 'a' 'b'
+    7  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+    6 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    7 c: A .  [\$end]
+
+    \$end  reduce using rule 7 (c)
+
+
+State 10
+
+    3 S: 'c' c .  [\$end]
+
+    \$end  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  ['a']
+
+    'a'  reduce using rule 5 (A)
+
+    Conflict between rule 5 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .  [\$end]
+
+    \$end  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .  [\$end]
+
+    \$end  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  [\$end]
+    6 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state 19
+    'b'  shift, and go to state 17
+
+    \$end  reduce using rule 5 (A)
+
+
+State 16
+
+    4 A: 'a' 'a' 'a' .  ['a']
+
+    'a'  reduce using rule 4 (A)
+
+
+State 17
+
+    6 c: 'a' 'a' 'b' .  [\$end]
+
+    \$end  reduce using rule 6 (c)
+
+
+State 18
+
+    4 A: 'a' . 'a' 'a'
+    5  | 'a' . 'a'
+
+    'a'  shift, and go to state 20
+
+
+State 19
+
+    4 A: 'a' 'a' 'a' .  [\$end]
+
+    \$end  reduce using rule 4 (A)
+
+
+State 20
+
+    4 A: 'a' 'a' . 'a'
+    5  | 'a' 'a' .  ['b']
+
+    'a'  shift, and go to state 21
+
+    'b'  reduce using rule 5 (A)
+
+
+State 21
+
+    4 A: 'a' 'a' 'a' .  ['b']
+
+    'b'  reduce using rule 4 (A)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+if test 32767 -lt `wc -l < input.c`; then
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic //'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic //'`
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:707"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:707"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:707"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:707: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:707"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:707"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_115
+#AT_START_116
+at_fn_group_banner 116 'reduce.at:951' \
+  "no %define lr.type: Complex Lane Split" "         " 6
+at_xfail=no
+(
+  $as_echo "116. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* Similar to the last test case set but forseeing the S/R conflict from the
+   first state that must be split is becoming difficult.  Imagine if B were
+   even more complex.  Imagine if A had other RHS's ending in other
+   nonterminals.  */
+S: 'a' A 'a'
+ | 'b' A 'b'
+ | 'c' c
+ ;
+A: 'a' 'a' B
+ ;
+B: 'a'
+ | %prec 'a'
+ ;
+c: 'a' 'a' 'b'
+ | A
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:951"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:951"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:951"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:951"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:951"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:951"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 5
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' B
+    7 c: . 'a' 'a' 'b'
+    8  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' B
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' B
+    7 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    8 c: A .
+
+    \$default  reduce using rule 8 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  ['a', 'b']
+
+    \$default  reduce using rule 6 (B)
+
+    B  go to state 17
+
+    Conflict between rule 6 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  [\$end]
+    7 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state 16
+    'b'  shift, and go to state 18
+
+    \$default  reduce using rule 6 (B)
+
+    B  go to state 17
+
+
+State 16
+
+    5 B: 'a' .
+
+    \$default  reduce using rule 5 (B)
+
+
+State 17
+
+    4 A: 'a' 'a' B .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 18
+
+    7 c: 'a' 'a' 'b' .
+
+    \$default  reduce using rule 7 (c)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:951"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:951"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:951"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:951"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_116
+#AT_START_117
+at_fn_group_banner 117 'reduce.at:951' \
+  "%define lr.type lalr: Complex Lane Split" "       " 6
+at_xfail=no
+(
+  $as_echo "117. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type lalr
+%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* Similar to the last test case set but forseeing the S/R conflict from the
+   first state that must be split is becoming difficult.  Imagine if B were
+   even more complex.  Imagine if A had other RHS's ending in other
+   nonterminals.  */
+S: 'a' A 'a'
+ | 'b' A 'b'
+ | 'c' c
+ ;
+A: 'a' 'a' B
+ ;
+B: 'a'
+ | %prec 'a'
+ ;
+c: 'a' 'a' 'b'
+ | A
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:951"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:951"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:951"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:951"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:951"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:951"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 5
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' B
+    7 c: . 'a' 'a' 'b'
+    8  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' B
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' B
+    7 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    8 c: A .
+
+    \$default  reduce using rule 8 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  ['a', 'b']
+
+    \$default  reduce using rule 6 (B)
+
+    B  go to state 17
+
+    Conflict between rule 6 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  [\$end]
+    7 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state 16
+    'b'  shift, and go to state 18
+
+    \$default  reduce using rule 6 (B)
+
+    B  go to state 17
+
+
+State 16
+
+    5 B: 'a' .
+
+    \$default  reduce using rule 5 (B)
+
+
+State 17
+
+    4 A: 'a' 'a' B .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 18
+
+    7 c: 'a' 'a' 'b' .
+
+    \$default  reduce using rule 7 (c)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:951"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:951"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:951"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:951"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_117
+#AT_START_118
+at_fn_group_banner 118 'reduce.at:951' \
+  "%define lr.type ielr: Complex Lane Split" "       " 6
+at_xfail=no
+(
+  $as_echo "118. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type ielr
+%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* Similar to the last test case set but forseeing the S/R conflict from the
+   first state that must be split is becoming difficult.  Imagine if B were
+   even more complex.  Imagine if A had other RHS's ending in other
+   nonterminals.  */
+S: 'a' A 'a'
+ | 'b' A 'b'
+ | 'c' c
+ ;
+A: 'a' 'a' B
+ ;
+B: 'a'
+ | %prec 'a'
+ ;
+c: 'a' 'a' 'b'
+ | A
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:951"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:951"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:951"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:951"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:951"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:951"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 19
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' B
+    7 c: . 'a' 'a' 'b'
+    8  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' B
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' B
+    7 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    8 c: A .
+
+    \$default  reduce using rule 8 (c)
+
+
+State 10
+
+    3 S: 'c' c .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  ['a']
+
+    \$default  reduce using rule 6 (B)
+
+    B  go to state 17
+
+    Conflict between rule 6 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  [\$end]
+    7 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state 16
+    'b'  shift, and go to state 18
+
+    \$default  reduce using rule 6 (B)
+
+    B  go to state 17
+
+
+State 16
+
+    5 B: 'a' .
+
+    \$default  reduce using rule 5 (B)
+
+
+State 17
+
+    4 A: 'a' 'a' B .
+
+    \$default  reduce using rule 4 (A)
+
+
+State 18
+
+    7 c: 'a' 'a' 'b' .
+
+    \$default  reduce using rule 7 (c)
+
+
+State 19
+
+    4 A: 'a' . 'a' B
+
+    'a'  shift, and go to state 20
+
+
+State 20
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  ['b']
+
+    'a'  shift, and go to state 16
+
+    \$default  reduce using rule 6 (B)
+
+    B  go to state 17
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:951"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:951"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:951"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:951"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_118
+#AT_START_119
+at_fn_group_banner 119 'reduce.at:951' \
+  "%define lr.type canonical-lr: Complex Lane Split" "" 6
+at_xfail=no
+(
+  $as_echo "119. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type canonical-lr
+%left 'a'
+// Conflict resolution renders state 16 unreachable for canonical LR(1).  We
+// keep it so that the paser table diff is easier to code.
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* Similar to the last test case set but forseeing the S/R conflict from the
+   first state that must be split is becoming difficult.  Imagine if B were
+   even more complex.  Imagine if A had other RHS's ending in other
+   nonterminals.  */
+S: 'a' A 'a'
+ | 'b' A 'b'
+ | 'c' c
+ ;
+A: 'a' 'a' B
+ ;
+B: 'a'
+ | %prec 'a'
+ ;
+c: 'a' 'a' 'b'
+ | A
+ ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'a', 'a', 'a', 'b', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:951"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:951"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:951"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:951: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:951"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:951"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:951"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'a'
+    2  | . 'b' A 'b'
+    3  | . 'c' c
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'a'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 5
+
+    A  go to state 6
+
+
+State 2
+
+    2 S: 'b' . A 'b'
+    4 A: . 'a' 'a' B
+
+    'a'  shift, and go to state 19
+
+    A  go to state 7
+
+
+State 3
+
+    3 S: 'c' . c
+    4 A: . 'a' 'a' B
+    7 c: . 'a' 'a' 'b'
+    8  | . A
+
+    'a'  shift, and go to state 8
+
+    A  go to state 9
+    c  go to state 10
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 11
+
+
+State 5
+
+    4 A: 'a' . 'a' B
+
+    'a'  shift, and go to state 12
+
+
+State 6
+
+    1 S: 'a' A . 'a'
+
+    'a'  shift, and go to state 13
+
+
+State 7
+
+    2 S: 'b' A . 'b'
+
+    'b'  shift, and go to state 14
+
+
+State 8
+
+    4 A: 'a' . 'a' B
+    7 c: 'a' . 'a' 'b'
+
+    'a'  shift, and go to state 15
+
+
+State 9
+
+    8 c: A .  [\$end]
+
+    \$end  reduce using rule 8 (c)
+
+
+State 10
+
+    3 S: 'c' c .  [\$end]
+
+    \$end  reduce using rule 3 (S)
+
+
+State 11
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 12
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  ['a']
+
+    'a'  reduce using rule 6 (B)
+
+    B  go to state 17
+
+    Conflict between rule 6 and token 'a' resolved as reduce (%left 'a').
+
+
+State 13
+
+    1 S: 'a' A 'a' .  [\$end]
+
+    \$end  reduce using rule 1 (S)
+
+
+State 14
+
+    2 S: 'b' A 'b' .  [\$end]
+
+    \$end  reduce using rule 2 (S)
+
+
+State 15
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  [\$end]
+    7 c: 'a' 'a' . 'b'
+
+    'a'  shift, and go to state 20
+    'b'  shift, and go to state 18
+
+    \$end  reduce using rule 6 (B)
+
+    B  go to state 21
+
+
+State 16
+
+    5 B: 'a' .  ['a']
+
+    'a'  reduce using rule 5 (B)
+
+
+State 17
+
+    4 A: 'a' 'a' B .  ['a']
+
+    'a'  reduce using rule 4 (A)
+
+
+State 18
+
+    7 c: 'a' 'a' 'b' .  [\$end]
+
+    \$end  reduce using rule 7 (c)
+
+
+State 19
+
+    4 A: 'a' . 'a' B
+
+    'a'  shift, and go to state 22
+
+
+State 20
+
+    5 B: 'a' .  [\$end]
+
+    \$end  reduce using rule 5 (B)
+
+
+State 21
+
+    4 A: 'a' 'a' B .  [\$end]
+
+    \$end  reduce using rule 4 (A)
+
+
+State 22
+
+    4 A: 'a' 'a' . B
+    5 B: . 'a'
+    6  | .  ['b']
+
+    'a'  shift, and go to state 23
+
+    'b'  reduce using rule 6 (B)
+
+    B  go to state 24
+
+
+State 23
+
+    5 B: 'a' .  ['b']
+
+    'b'  reduce using rule 5 (B)
+
+
+State 24
+
+    4 A: 'a' 'a' B .  ['b']
+
+    'b'  reduce using rule 4 (A)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+if test 32767 -lt `wc -l < input.c`; then
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic //'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic //'`
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:951"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:951"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:951"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:951: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:951"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:951"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_119
+#AT_START_120
+at_fn_group_banner 120 'reduce.at:1220' \
+  "no %define lr.type: Split During Added Lookahead Propagation" "" 6
+at_xfail=no
+(
+  $as_echo "120. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* The partial state chart diagram below is for LALR(1).  State 0 is the start
+   state.  States are iterated for successor construction in numerical order.
+   Transitions are downwards.
+
+   State 13 has a R/R conflict that cannot be predicted by Bison's LR(1)
+   algorithm using annotations alone.  That is, when state 11's successor on
+   'd' is merged with state 5 (which is originally just state 1's successor on
+   'd'), state 5's successor on 'e' must then be changed because the resulting
+   lookaheads that propagate to it now make it incompatible with state 8's
+   successor on 'e'.  In other words, state 13 must be split to avoid the
+   conflict.
+
+          0
+        / | \
+     a / c|  \ b
+      1   3   2
+      |   |   |
+     d|   |c  | d
+      |  11   |
+      |   |   |
+       \ /d   |
+        5     8
+         \    |
+        e \  / e
+           13
+           R/R
+
+   This grammar is designed carefully to make sure that, despite Bison's LR(1)
+   algorithm's bread-first iteration of transitions to reconstruct states,
+   state 11's successors are constructed after state 5's and state 8's.
+   Otherwise (for example, if you remove the first 'c' in each of rules 6 and
+   7), state 5's successor on 'e' would never be merged with state 8's, so the
+   split of the resulting state 13 would never need to be performed.  */
+S: 'a' A 'f'
+ | 'a' B
+ | 'b' A 'f'
+ | 'b' B 'g'
+ | 'b' 'd'
+ | 'c' 'c' A 'g'
+ | 'c' 'c' B
+ ;
+A: 'd' 'e' ;
+B: 'd' 'e' ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'd', 'e', 'g', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:1220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:1220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:1220"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:1220"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'f'
+    2  | . 'a' B
+    3  | . 'b' A 'f'
+    4  | . 'b' B 'g'
+    5  | . 'b' 'd'
+    6  | . 'c' 'c' A 'g'
+    7  | . 'c' 'c' B
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'f'
+    2  | 'a' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 5
+
+    A  go to state 6
+    B  go to state 7
+
+
+State 2
+
+    3 S: 'b' . A 'f'
+    4  | 'b' . B 'g'
+    5  | 'b' . 'd'
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 8
+
+    A  go to state 9
+    B  go to state 10
+
+
+State 3
+
+    6 S: 'c' . 'c' A 'g'
+    7  | 'c' . 'c' B
+
+    'c'  shift, and go to state 11
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 12
+
+
+State 5
+
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 13
+
+
+State 6
+
+    1 S: 'a' A . 'f'
+
+    'f'  shift, and go to state 14
+
+
+State 7
+
+    2 S: 'a' B .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 8
+
+    5 S: 'b' 'd' .  [\$end]
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 13
+
+    \$default  reduce using rule 5 (S)
+
+
+State 9
+
+    3 S: 'b' A . 'f'
+
+    'f'  shift, and go to state 15
+
+
+State 10
+
+    4 S: 'b' B . 'g'
+
+    'g'  shift, and go to state 16
+
+
+State 11
+
+    6 S: 'c' 'c' . A 'g'
+    7  | 'c' 'c' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 5
+
+    A  go to state 17
+    B  go to state 18
+
+
+State 12
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 13
+
+    8 A: 'd' 'e' .  ['f', 'g']
+    9 B: 'd' 'e' .  [\$end, 'g']
+
+    \$end      reduce using rule 9 (B)
+    'g'       reduce using rule 8 (A)
+    'g'       [reduce using rule 9 (B)]
+    \$default  reduce using rule 8 (A)
+
+
+State 14
+
+    1 S: 'a' A 'f' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 15
+
+    3 S: 'b' A 'f' .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 16
+
+    4 S: 'b' B 'g' .
+
+    \$default  reduce using rule 4 (S)
+
+
+State 17
+
+    6 S: 'c' 'c' A . 'g'
+
+    'g'  shift, and go to state 19
+
+
+State 18
+
+    7 S: 'c' 'c' B .
+
+    \$default  reduce using rule 7 (S)
+
+
+State 19
+
+    6 S: 'c' 'c' A 'g' .
+
+    \$default  reduce using rule 6 (S)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:1220"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:1220"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:1220"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:1220"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_120
+#AT_START_121
+at_fn_group_banner 121 'reduce.at:1220' \
+  "%define lr.type lalr: Split During Added Lookahead Propagation" "" 6
+at_xfail=no
+(
+  $as_echo "121. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type lalr
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* The partial state chart diagram below is for LALR(1).  State 0 is the start
+   state.  States are iterated for successor construction in numerical order.
+   Transitions are downwards.
+
+   State 13 has a R/R conflict that cannot be predicted by Bison's LR(1)
+   algorithm using annotations alone.  That is, when state 11's successor on
+   'd' is merged with state 5 (which is originally just state 1's successor on
+   'd'), state 5's successor on 'e' must then be changed because the resulting
+   lookaheads that propagate to it now make it incompatible with state 8's
+   successor on 'e'.  In other words, state 13 must be split to avoid the
+   conflict.
+
+          0
+        / | \
+     a / c|  \ b
+      1   3   2
+      |   |   |
+     d|   |c  | d
+      |  11   |
+      |   |   |
+       \ /d   |
+        5     8
+         \    |
+        e \  / e
+           13
+           R/R
+
+   This grammar is designed carefully to make sure that, despite Bison's LR(1)
+   algorithm's bread-first iteration of transitions to reconstruct states,
+   state 11's successors are constructed after state 5's and state 8's.
+   Otherwise (for example, if you remove the first 'c' in each of rules 6 and
+   7), state 5's successor on 'e' would never be merged with state 8's, so the
+   split of the resulting state 13 would never need to be performed.  */
+S: 'a' A 'f'
+ | 'a' B
+ | 'b' A 'f'
+ | 'b' B 'g'
+ | 'b' 'd'
+ | 'c' 'c' A 'g'
+ | 'c' 'c' B
+ ;
+A: 'd' 'e' ;
+B: 'd' 'e' ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'd', 'e', 'g', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:1220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:1220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:1220"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:1220"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'f'
+    2  | . 'a' B
+    3  | . 'b' A 'f'
+    4  | . 'b' B 'g'
+    5  | . 'b' 'd'
+    6  | . 'c' 'c' A 'g'
+    7  | . 'c' 'c' B
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'f'
+    2  | 'a' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 5
+
+    A  go to state 6
+    B  go to state 7
+
+
+State 2
+
+    3 S: 'b' . A 'f'
+    4  | 'b' . B 'g'
+    5  | 'b' . 'd'
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 8
+
+    A  go to state 9
+    B  go to state 10
+
+
+State 3
+
+    6 S: 'c' . 'c' A 'g'
+    7  | 'c' . 'c' B
+
+    'c'  shift, and go to state 11
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 12
+
+
+State 5
+
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 13
+
+
+State 6
+
+    1 S: 'a' A . 'f'
+
+    'f'  shift, and go to state 14
+
+
+State 7
+
+    2 S: 'a' B .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 8
+
+    5 S: 'b' 'd' .  [\$end]
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 13
+
+    \$default  reduce using rule 5 (S)
+
+
+State 9
+
+    3 S: 'b' A . 'f'
+
+    'f'  shift, and go to state 15
+
+
+State 10
+
+    4 S: 'b' B . 'g'
+
+    'g'  shift, and go to state 16
+
+
+State 11
+
+    6 S: 'c' 'c' . A 'g'
+    7  | 'c' 'c' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 5
+
+    A  go to state 17
+    B  go to state 18
+
+
+State 12
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 13
+
+    8 A: 'd' 'e' .  ['f', 'g']
+    9 B: 'd' 'e' .  [\$end, 'g']
+
+    \$end      reduce using rule 9 (B)
+    'g'       reduce using rule 8 (A)
+    'g'       [reduce using rule 9 (B)]
+    \$default  reduce using rule 8 (A)
+
+
+State 14
+
+    1 S: 'a' A 'f' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 15
+
+    3 S: 'b' A 'f' .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 16
+
+    4 S: 'b' B 'g' .
+
+    \$default  reduce using rule 4 (S)
+
+
+State 17
+
+    6 S: 'c' 'c' A . 'g'
+
+    'g'  shift, and go to state 19
+
+
+State 18
+
+    7 S: 'c' 'c' B .
+
+    \$default  reduce using rule 7 (S)
+
+
+State 19
+
+    6 S: 'c' 'c' A 'g' .
+
+    \$default  reduce using rule 6 (S)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:1220"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:1220"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:1220"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:1220"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_121
+#AT_START_122
+at_fn_group_banner 122 'reduce.at:1220' \
+  "%define lr.type ielr: Split During Added Lookahead Propagation" "" 6
+at_xfail=no
+(
+  $as_echo "122. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type ielr
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* The partial state chart diagram below is for LALR(1).  State 0 is the start
+   state.  States are iterated for successor construction in numerical order.
+   Transitions are downwards.
+
+   State 13 has a R/R conflict that cannot be predicted by Bison's LR(1)
+   algorithm using annotations alone.  That is, when state 11's successor on
+   'd' is merged with state 5 (which is originally just state 1's successor on
+   'd'), state 5's successor on 'e' must then be changed because the resulting
+   lookaheads that propagate to it now make it incompatible with state 8's
+   successor on 'e'.  In other words, state 13 must be split to avoid the
+   conflict.
+
+          0
+        / | \
+     a / c|  \ b
+      1   3   2
+      |   |   |
+     d|   |c  | d
+      |  11   |
+      |   |   |
+       \ /d   |
+        5     8
+         \    |
+        e \  / e
+           13
+           R/R
+
+   This grammar is designed carefully to make sure that, despite Bison's LR(1)
+   algorithm's bread-first iteration of transitions to reconstruct states,
+   state 11's successors are constructed after state 5's and state 8's.
+   Otherwise (for example, if you remove the first 'c' in each of rules 6 and
+   7), state 5's successor on 'e' would never be merged with state 8's, so the
+   split of the resulting state 13 would never need to be performed.  */
+S: 'a' A 'f'
+ | 'a' B
+ | 'b' A 'f'
+ | 'b' B 'g'
+ | 'b' 'd'
+ | 'c' 'c' A 'g'
+ | 'c' 'c' B
+ ;
+A: 'd' 'e' ;
+B: 'd' 'e' ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'd', 'e', 'g', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:1220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:1220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:1220"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:1220"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'f'
+    2  | . 'a' B
+    3  | . 'b' A 'f'
+    4  | . 'b' B 'g'
+    5  | . 'b' 'd'
+    6  | . 'c' 'c' A 'g'
+    7  | . 'c' 'c' B
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'f'
+    2  | 'a' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 5
+
+    A  go to state 6
+    B  go to state 7
+
+
+State 2
+
+    3 S: 'b' . A 'f'
+    4  | 'b' . B 'g'
+    5  | 'b' . 'd'
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 8
+
+    A  go to state 9
+    B  go to state 10
+
+
+State 3
+
+    6 S: 'c' . 'c' A 'g'
+    7  | 'c' . 'c' B
+
+    'c'  shift, and go to state 11
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 12
+
+
+State 5
+
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 20
+
+
+State 6
+
+    1 S: 'a' A . 'f'
+
+    'f'  shift, and go to state 14
+
+
+State 7
+
+    2 S: 'a' B .
+
+    \$default  reduce using rule 2 (S)
+
+
+State 8
+
+    5 S: 'b' 'd' .  [\$end]
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 13
+
+    \$default  reduce using rule 5 (S)
+
+
+State 9
+
+    3 S: 'b' A . 'f'
+
+    'f'  shift, and go to state 15
+
+
+State 10
+
+    4 S: 'b' B . 'g'
+
+    'g'  shift, and go to state 16
+
+
+State 11
+
+    6 S: 'c' 'c' . A 'g'
+    7  | 'c' 'c' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 5
+
+    A  go to state 17
+    B  go to state 18
+
+
+State 12
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 13
+
+    8 A: 'd' 'e' .  ['f']
+    9 B: 'd' 'e' .  ['g']
+
+    'g'       reduce using rule 9 (B)
+    \$default  reduce using rule 8 (A)
+
+
+State 14
+
+    1 S: 'a' A 'f' .
+
+    \$default  reduce using rule 1 (S)
+
+
+State 15
+
+    3 S: 'b' A 'f' .
+
+    \$default  reduce using rule 3 (S)
+
+
+State 16
+
+    4 S: 'b' B 'g' .
+
+    \$default  reduce using rule 4 (S)
+
+
+State 17
+
+    6 S: 'c' 'c' A . 'g'
+
+    'g'  shift, and go to state 19
+
+
+State 18
+
+    7 S: 'c' 'c' B .
+
+    \$default  reduce using rule 7 (S)
+
+
+State 19
+
+    6 S: 'c' 'c' A 'g' .
+
+    \$default  reduce using rule 6 (S)
+
+
+State 20
+
+    8 A: 'd' 'e' .  ['f', 'g']
+    9 B: 'd' 'e' .  [\$end]
+
+    \$end      reduce using rule 9 (B)
+    \$default  reduce using rule 8 (A)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:1220"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:1220"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:1220"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:1220"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_122
+#AT_START_123
+at_fn_group_banner 123 'reduce.at:1220' \
+  "%define lr.type canonical-lr: Split During Added Lookahead Propagation" "" 6
+at_xfail=no
+(
+  $as_echo "123. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type canonical-lr
+%define lr.keep-unreachable-states
+
+%%
+
+
+/* The partial state chart diagram below is for LALR(1).  State 0 is the start
+   state.  States are iterated for successor construction in numerical order.
+   Transitions are downwards.
+
+   State 13 has a R/R conflict that cannot be predicted by Bison's LR(1)
+   algorithm using annotations alone.  That is, when state 11's successor on
+   'd' is merged with state 5 (which is originally just state 1's successor on
+   'd'), state 5's successor on 'e' must then be changed because the resulting
+   lookaheads that propagate to it now make it incompatible with state 8's
+   successor on 'e'.  In other words, state 13 must be split to avoid the
+   conflict.
+
+          0
+        / | \
+     a / c|  \ b
+      1   3   2
+      |   |   |
+     d|   |c  | d
+      |  11   |
+      |   |   |
+       \ /d   |
+        5     8
+         \    |
+        e \  / e
+           13
+           R/R
+
+   This grammar is designed carefully to make sure that, despite Bison's LR(1)
+   algorithm's bread-first iteration of transitions to reconstruct states,
+   state 11's successors are constructed after state 5's and state 8's.
+   Otherwise (for example, if you remove the first 'c' in each of rules 6 and
+   7), state 5's successor on 'e' would never be merged with state 8's, so the
+   split of the resulting state 13 would never need to be performed.  */
+S: 'a' A 'f'
+ | 'a' B
+ | 'b' A 'f'
+ | 'b' B 'g'
+ | 'b' 'd'
+ | 'c' 'c' A 'g'
+ | 'c' 'c' B
+ ;
+A: 'd' 'e' ;
+B: 'd' 'e' ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'b', 'd', 'e', 'g', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:1220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:1220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:1220"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:1220"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . S \$end
+    1 S: . 'a' A 'f'
+    2  | . 'a' B
+    3  | . 'b' A 'f'
+    4  | . 'b' B 'g'
+    5  | . 'b' 'd'
+    6  | . 'c' 'c' A 'g'
+    7  | . 'c' 'c' B
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    'c'  shift, and go to state 3
+
+    S  go to state 4
+
+
+State 1
+
+    1 S: 'a' . A 'f'
+    2  | 'a' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 5
+
+    A  go to state 6
+    B  go to state 7
+
+
+State 2
+
+    3 S: 'b' . A 'f'
+    4  | 'b' . B 'g'
+    5  | 'b' . 'd'
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 8
+
+    A  go to state 9
+    B  go to state 10
+
+
+State 3
+
+    6 S: 'c' . 'c' A 'g'
+    7  | 'c' . 'c' B
+
+    'c'  shift, and go to state 11
+
+
+State 4
+
+    0 \$accept: S . \$end
+
+    \$end  shift, and go to state 12
+
+
+State 5
+
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 13
+
+
+State 6
+
+    1 S: 'a' A . 'f'
+
+    'f'  shift, and go to state 14
+
+
+State 7
+
+    2 S: 'a' B .  [\$end]
+
+    \$end  reduce using rule 2 (S)
+
+
+State 8
+
+    5 S: 'b' 'd' .  [\$end]
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 20
+
+    \$end  reduce using rule 5 (S)
+
+
+State 9
+
+    3 S: 'b' A . 'f'
+
+    'f'  shift, and go to state 15
+
+
+State 10
+
+    4 S: 'b' B . 'g'
+
+    'g'  shift, and go to state 16
+
+
+State 11
+
+    6 S: 'c' 'c' . A 'g'
+    7  | 'c' 'c' . B
+    8 A: . 'd' 'e'
+    9 B: . 'd' 'e'
+
+    'd'  shift, and go to state 21
+
+    A  go to state 17
+    B  go to state 18
+
+
+State 12
+
+    0 \$accept: S \$end .
+
+    \$default  accept
+
+
+State 13
+
+    8 A: 'd' 'e' .  ['f']
+    9 B: 'd' 'e' .  [\$end]
+
+    \$end  reduce using rule 9 (B)
+    'f'   reduce using rule 8 (A)
+
+
+State 14
+
+    1 S: 'a' A 'f' .  [\$end]
+
+    \$end  reduce using rule 1 (S)
+
+
+State 15
+
+    3 S: 'b' A 'f' .  [\$end]
+
+    \$end  reduce using rule 3 (S)
+
+
+State 16
+
+    4 S: 'b' B 'g' .  [\$end]
+
+    \$end  reduce using rule 4 (S)
+
+
+State 17
+
+    6 S: 'c' 'c' A . 'g'
+
+    'g'  shift, and go to state 19
+
+
+State 18
+
+    7 S: 'c' 'c' B .  [\$end]
+
+    \$end  reduce using rule 7 (S)
+
+
+State 19
+
+    6 S: 'c' 'c' A 'g' .  [\$end]
+
+    \$end  reduce using rule 6 (S)
+
+
+State 20
+
+    8 A: 'd' 'e' .  ['f']
+    9 B: 'd' 'e' .  ['g']
+
+    'f'  reduce using rule 8 (A)
+    'g'  reduce using rule 9 (B)
+
+
+State 21
+
+    8 A: 'd' . 'e'
+    9 B: 'd' . 'e'
+
+    'e'  shift, and go to state 22
+
+
+State 22
+
+    8 A: 'd' 'e' .  ['g']
+    9 B: 'd' 'e' .  [\$end]
+
+    \$end  reduce using rule 9 (B)
+    'g'   reduce using rule 8 (A)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+if test 32767 -lt `wc -l < input.c`; then
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic //'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic //'`
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:1220"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:1220"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:1220"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1220: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:1220"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_123
+#AT_START_124
+at_fn_group_banner 124 'reduce.at:1550' \
+  "no %define lr.default-reductions" "               " 6
+at_xfail=no
+(
+  $as_echo "124. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+
+
+%%
+
+
+/* The start state is consistent and has a shift on 'a' and no reductions.
+   After pushing the b below, enter an inconsistent state that has a shift and
+   one reduction with one lookahead.  */
+start:
+    a b
+  | a b 'a'
+  | a c 'b'
+  ;
+
+/* After shifting this 'a', enter a consistent state that has no shift and 1
+   reduction with multiple lookaheads.  */
+a: 'a' ;
+
+/* After the previous reduction, enter an inconsistent state that has no shift
+   and multiple reductions.  The first reduction has more lookaheads than the
+   second, so the first should always be preferred as the default reduction if
+   enabled.  The second reduction has one lookahead.  */
+b: ;
+c: ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'a', 'a', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:1550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:1550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:1550"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:1550"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . start \$end
+    1 start: . a b
+    2      | . a b 'a'
+    3      | . a c 'b'
+    4 a: . 'a'
+
+    'a'  shift, and go to state 1
+
+    start  go to state 2
+    a      go to state 3
+
+
+State 1
+
+    4 a: 'a' .
+
+    \$default  reduce using rule 4 (a)
+
+
+State 2
+
+    0 \$accept: start . \$end
+
+    \$end  shift, and go to state 4
+
+
+State 3
+
+    1 start: a . b
+    2      | a . b 'a'
+    3      | a . c 'b'
+    5 b: .  [\$end, 'a']
+    6 c: .  ['b']
+
+    'b'       reduce using rule 6 (c)
+    \$default  reduce using rule 5 (b)
+
+    b  go to state 5
+    c  go to state 6
+
+
+State 4
+
+    0 \$accept: start \$end .
+
+    \$default  accept
+
+
+State 5
+
+    1 start: a b .  [\$end]
+    2      | a b . 'a'
+
+    'a'  shift, and go to state 7
+
+    \$default  reduce using rule 1 (start)
+
+
+State 6
+
+    3 start: a c . 'b'
+
+    'b'  shift, and go to state 8
+
+
+State 7
+
+    2 start: a b 'a' .
+
+    \$default  reduce using rule 2 (start)
+
+
+State 8
+
+    3 start: a c 'b' .
+
+    \$default  reduce using rule 3 (start)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:1550"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:1550"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:1550"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:1550"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_124
+#AT_START_125
+at_fn_group_banner 125 'reduce.at:1550' \
+  "%define lr.default-reductions most" "             " 6
+at_xfail=no
+(
+  $as_echo "125. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.default-reductions most
+
+%%
+
+
+/* The start state is consistent and has a shift on 'a' and no reductions.
+   After pushing the b below, enter an inconsistent state that has a shift and
+   one reduction with one lookahead.  */
+start:
+    a b
+  | a b 'a'
+  | a c 'b'
+  ;
+
+/* After shifting this 'a', enter a consistent state that has no shift and 1
+   reduction with multiple lookaheads.  */
+a: 'a' ;
+
+/* After the previous reduction, enter an inconsistent state that has no shift
+   and multiple reductions.  The first reduction has more lookaheads than the
+   second, so the first should always be preferred as the default reduction if
+   enabled.  The second reduction has one lookahead.  */
+b: ;
+c: ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'a', 'a', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:1550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:1550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:1550"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:1550"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . start \$end
+    1 start: . a b
+    2      | . a b 'a'
+    3      | . a c 'b'
+    4 a: . 'a'
+
+    'a'  shift, and go to state 1
+
+    start  go to state 2
+    a      go to state 3
+
+
+State 1
+
+    4 a: 'a' .
+
+    \$default  reduce using rule 4 (a)
+
+
+State 2
+
+    0 \$accept: start . \$end
+
+    \$end  shift, and go to state 4
+
+
+State 3
+
+    1 start: a . b
+    2      | a . b 'a'
+    3      | a . c 'b'
+    5 b: .  [\$end, 'a']
+    6 c: .  ['b']
+
+    'b'       reduce using rule 6 (c)
+    \$default  reduce using rule 5 (b)
+
+    b  go to state 5
+    c  go to state 6
+
+
+State 4
+
+    0 \$accept: start \$end .
+
+    \$default  accept
+
+
+State 5
+
+    1 start: a b .  [\$end]
+    2      | a b . 'a'
+
+    'a'  shift, and go to state 7
+
+    \$default  reduce using rule 1 (start)
+
+
+State 6
+
+    3 start: a c . 'b'
+
+    'b'  shift, and go to state 8
+
+
+State 7
+
+    2 start: a b 'a' .
+
+    \$default  reduce using rule 2 (start)
+
+
+State 8
+
+    3 start: a c 'b' .
+
+    \$default  reduce using rule 3 (start)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:1550"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:1550"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:1550"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:1550"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_125
+#AT_START_126
+at_fn_group_banner 126 'reduce.at:1550' \
+  "%define lr.default-reductions consistent" "       " 6
+at_xfail=no
+(
+  $as_echo "126. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.default-reductions consistent
+
+%%
+
+
+/* The start state is consistent and has a shift on 'a' and no reductions.
+   After pushing the b below, enter an inconsistent state that has a shift and
+   one reduction with one lookahead.  */
+start:
+    a b
+  | a b 'a'
+  | a c 'b'
+  ;
+
+/* After shifting this 'a', enter a consistent state that has no shift and 1
+   reduction with multiple lookaheads.  */
+a: 'a' ;
+
+/* After the previous reduction, enter an inconsistent state that has no shift
+   and multiple reductions.  The first reduction has more lookaheads than the
+   second, so the first should always be preferred as the default reduction if
+   enabled.  The second reduction has one lookahead.  */
+b: ;
+c: ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'a', 'a', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:1550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:1550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:1550"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:1550"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . start \$end
+    1 start: . a b
+    2      | . a b 'a'
+    3      | . a c 'b'
+    4 a: . 'a'
+
+    'a'  shift, and go to state 1
+
+    start  go to state 2
+    a      go to state 3
+
+
+State 1
+
+    4 a: 'a' .
+
+    \$default  reduce using rule 4 (a)
+
+
+State 2
+
+    0 \$accept: start . \$end
+
+    \$end  shift, and go to state 4
+
+
+State 3
+
+    1 start: a . b
+    2      | a . b 'a'
+    3      | a . c 'b'
+    5 b: .  [\$end, 'a']
+    6 c: .  ['b']
+
+    \$end  reduce using rule 5 (b)
+    'a'   reduce using rule 5 (b)
+    'b'   reduce using rule 6 (c)
+
+    b  go to state 5
+    c  go to state 6
+
+
+State 4
+
+    0 \$accept: start \$end .
+
+    \$default  accept
+
+
+State 5
+
+    1 start: a b .  [\$end]
+    2      | a b . 'a'
+
+    'a'  shift, and go to state 7
+
+    \$end  reduce using rule 1 (start)
+
+
+State 6
+
+    3 start: a c . 'b'
+
+    'b'  shift, and go to state 8
+
+
+State 7
+
+    2 start: a b 'a' .
+
+    \$default  reduce using rule 2 (start)
+
+
+State 8
+
+    3 start: a c 'b' .
+
+    \$default  reduce using rule 3 (start)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:1550"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:1550"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:1550"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:1550"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_126
+#AT_START_127
+at_fn_group_banner 127 'reduce.at:1550' \
+  "%define lr.default-reductions accepting" "        " 6
+at_xfail=no
+(
+  $as_echo "127. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.default-reductions accepting
+
+%%
+
+
+/* The start state is consistent and has a shift on 'a' and no reductions.
+   After pushing the b below, enter an inconsistent state that has a shift and
+   one reduction with one lookahead.  */
+start:
+    a b
+  | a b 'a'
+  | a c 'b'
+  ;
+
+/* After shifting this 'a', enter a consistent state that has no shift and 1
+   reduction with multiple lookaheads.  */
+a: 'a' ;
+
+/* After the previous reduction, enter an inconsistent state that has no shift
+   and multiple reductions.  The first reduction has more lookaheads than the
+   second, so the first should always be preferred as the default reduction if
+   enabled.  The second reduction has one lookahead.  */
+b: ;
+c: ;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    'a', 'a', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "reduce.at:1550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "reduce.at:1550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "reduce.at:1550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "reduce.at:1550"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: sed -n '/^State 0\$/,\$p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 0$/,$p' input.output" "reduce.at:1550"
+( $at_check_trace; sed -n '/^State 0$/,$p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . start \$end
+    1 start: . a b
+    2      | . a b 'a'
+    3      | . a c 'b'
+    4 a: . 'a'
+
+    'a'  shift, and go to state 1
+
+    start  go to state 2
+    a      go to state 3
+
+
+State 1
+
+    4 a: 'a' .  [\$end, 'a', 'b']
+
+    \$end  reduce using rule 4 (a)
+    'a'   reduce using rule 4 (a)
+    'b'   reduce using rule 4 (a)
+
+
+State 2
+
+    0 \$accept: start . \$end
+
+    \$end  shift, and go to state 4
+
+
+State 3
+
+    1 start: a . b
+    2      | a . b 'a'
+    3      | a . c 'b'
+    5 b: .  [\$end, 'a']
+    6 c: .  ['b']
+
+    \$end  reduce using rule 5 (b)
+    'a'   reduce using rule 5 (b)
+    'b'   reduce using rule 6 (c)
+
+    b  go to state 5
+    c  go to state 6
+
+
+State 4
+
+    0 \$accept: start \$end .
+
+    \$default  accept
+
+
+State 5
+
+    1 start: a b .  [\$end]
+    2      | a b . 'a'
+
+    'a'  shift, and go to state 7
+
+    \$end  reduce using rule 1 (start)
+
+
+State 6
+
+    3 start: a c . 'b'
+
+    'b'  shift, and go to state 8
+
+
+State 7
+
+    2 start: a b 'a' .  [\$end]
+
+    \$end  reduce using rule 2 (start)
+
+
+State 8
+
+    3 start: a c 'b' .  [\$end]
+
+    \$end  reduce using rule 3 (start)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "reduce.at:1550"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "reduce.at:1550"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "reduce.at:1550"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/reduce.at:1550: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "reduce.at:1550"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/reduce.at:1550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_127
+#AT_START_128
+at_fn_group_banner 128 'synclines.at:150' \
+  "Prologue syncline" "                              " 7
+at_xfail=no
+(
+  $as_echo "128. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # It seems impossible to find a generic scheme to check the location
@@ -4820,32 +31867,28 @@
 
 cat >syncline.c <<'_ATEOF'
 #error "1"
+int i; /* avoids -pedantic warning about an empty translation unit. */
 _ATEOF
 
 
-$at_traceoff
-echo "synclines.at:95: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
-echo synclines.at:95 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c syncline.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:150: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c syncline.c" "synclines.at:150"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c syncline.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -4854,116 +31897,227 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:95: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:95 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:95: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:150: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:150"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:95: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
-echo synclines.at:95 >$at_check_line_file
-( $at_traceon; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:95: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/synclines.at:150: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:150"
+( $at_check_trace; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input.y <<'_ATEOF'
 %{
 #error "2"
-void yyerror (const char *s);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 %%
 exp: '0';
+%%
 _ATEOF
 
-$at_traceoff
-echo "synclines.at:95: bison -o input.c input.y"
-echo synclines.at:95 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:95: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:150: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:150"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/synclines.at:150: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "synclines.at:150"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:150: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:150"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:150: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:150"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:150: bison -o input.c input.y"
+at_fn_check_prepare_trace "synclines.at:150"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "synclines.at:95: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
-echo synclines.at:95 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:150: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c input.c" "synclines.at:150"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -4972,72 +32126,126 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:95: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:95 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:95: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:150: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:150"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:95: cat stdout"
-echo synclines.at:95 >$at_check_line_file
-( $at_traceon; cat stdout ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "input.y:2: #error \"2\"
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:95: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:150: cat stdout"
+at_fn_check_prepare_trace "synclines.at:150"
+( $at_check_trace; cat stdout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "input.y:2: #error \"2\"
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  42 ) # 42. synclines.at:115: %union synch line
-    at_setup_line='synclines.at:115'
-    at_desc='%union synch line'
-    $at_quiet $ECHO_N " 42: %union synch line                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "42. synclines.at:115: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_128
+#AT_START_129
+at_fn_group_banner 129 'synclines.at:168' \
+  "%union syncline" "                                " 7
+at_xfail=no
+(
+  $as_echo "129. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # It seems impossible to find a generic scheme to check the location
@@ -5059,32 +32267,28 @@
 
 cat >syncline.c <<'_ATEOF'
 #error "1"
+int i; /* avoids -pedantic warning about an empty translation unit. */
 _ATEOF
 
 
-$at_traceoff
-echo "synclines.at:115: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
-echo synclines.at:115 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c syncline.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:168: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c syncline.c" "synclines.at:168"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c syncline.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -5093,56 +32297,110 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:115: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:115 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:115: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:168: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:168"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:115: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
-echo synclines.at:115 >$at_check_line_file
-( $at_traceon; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:115: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/synclines.at:168: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:168"
+( $at_check_trace; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input.y <<'_ATEOF'
@@ -5151,61 +32409,118 @@
   char dummy;
 }
 %{
-void yyerror (const char *s);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 %%
 exp: '0';
+%%
 _ATEOF
 
-$at_traceoff
-echo "synclines.at:115: bison -o input.c input.y"
-echo synclines.at:115 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:115: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:168: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:168"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/synclines.at:168: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "synclines.at:168"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:168: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:168"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:168: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:168"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:168: bison -o input.c input.y"
+at_fn_check_prepare_trace "synclines.at:168"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "synclines.at:115: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
-echo synclines.at:115 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:168: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c input.c" "synclines.at:168"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -5214,72 +32529,126 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:115: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:115 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:115: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:168: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:168"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:115: cat stdout"
-echo synclines.at:115 >$at_check_line_file
-( $at_traceon; cat stdout ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "input.y:2: #error \"2\"
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:115: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:168: cat stdout"
+at_fn_check_prepare_trace "synclines.at:168"
+( $at_check_trace; cat stdout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "input.y:2: #error \"2\"
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  43 ) # 43. synclines.at:138: Postprologue synch line
-    at_setup_line='synclines.at:138'
-    at_desc='Postprologue synch line'
-    $at_quiet $ECHO_N " 43: Postprologue synch line                      $ECHO_C"
-    at_xfail=no
-    (
-      echo "43. synclines.at:138: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_129
+#AT_START_130
+at_fn_group_banner 130 'synclines.at:189' \
+  "Postprologue syncline" "                          " 7
+at_xfail=no
+(
+  $as_echo "130. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # It seems impossible to find a generic scheme to check the location
@@ -5301,32 +32670,28 @@
 
 cat >syncline.c <<'_ATEOF'
 #error "1"
+int i; /* avoids -pedantic warning about an empty translation unit. */
 _ATEOF
 
 
-$at_traceoff
-echo "synclines.at:138: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
-echo synclines.at:138 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c syncline.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:189: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c syncline.c" "synclines.at:189"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c syncline.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -5335,61 +32700,115 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:138: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:138 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:138: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:189: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:189"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:138: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
-echo synclines.at:138 >$at_check_line_file
-( $at_traceon; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:138: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/synclines.at:189: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:189"
+( $at_check_trace; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input.y <<'_ATEOF'
 %{
-void yyerror (const char *s);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 %union
@@ -5401,56 +32820,113 @@
 %}
 %%
 exp: '0';
+%%
 _ATEOF
 
-$at_traceoff
-echo "synclines.at:138: bison -o input.c input.y"
-echo synclines.at:138 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:138: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:189: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:189"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/synclines.at:189: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "synclines.at:189"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:189: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:189"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:189: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:189"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:189: bison -o input.c input.y"
+at_fn_check_prepare_trace "synclines.at:189"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "synclines.at:138: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
-echo synclines.at:138 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:189: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c input.c" "synclines.at:189"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -5459,72 +32935,126 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:138: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:138 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:138: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:189: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:189"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:138: cat stdout"
-echo synclines.at:138 >$at_check_line_file
-( $at_traceon; cat stdout ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "input.y:10: #error \"10\"
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:138: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:189: cat stdout"
+at_fn_check_prepare_trace "synclines.at:189"
+( $at_check_trace; cat stdout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "input.y:10: #error \"10\"
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:189"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  44 ) # 44. synclines.at:157: Action synch line
-    at_setup_line='synclines.at:157'
-    at_desc='Action synch line'
-    $at_quiet $ECHO_N " 44: Action synch line                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "44. synclines.at:157: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_130
+#AT_START_131
+at_fn_group_banner 131 'synclines.at:213' \
+  "Action syncline" "                                " 7
+at_xfail=no
+(
+  $as_echo "131. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # It seems impossible to find a generic scheme to check the location
@@ -5546,32 +33076,28 @@
 
 cat >syncline.c <<'_ATEOF'
 #error "1"
+int i; /* avoids -pedantic warning about an empty translation unit. */
 _ATEOF
 
 
-$at_traceoff
-echo "synclines.at:157: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
-echo synclines.at:157 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c syncline.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:213: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c syncline.c" "synclines.at:213"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c syncline.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -5580,61 +33106,115 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:157: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:157 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:157: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:213: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:213"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:157: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
-echo synclines.at:157 >$at_check_line_file
-( $at_traceon; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:157: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/synclines.at:213: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:213"
+( $at_check_trace; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input.y <<'_ATEOF'
 %{
-void yyerror (const char *s);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 %%
@@ -5644,54 +33224,110 @@
 };
 _ATEOF
 
-$at_traceoff
-echo "synclines.at:157: bison -o input.c input.y"
-echo synclines.at:157 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:157: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:213: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:213"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/synclines.at:213: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "synclines.at:213"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:213: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:213"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:213: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:213"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:213: bison -o input.c input.y"
+at_fn_check_prepare_trace "synclines.at:213"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "synclines.at:157: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
-echo synclines.at:157 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:213: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c input.c" "synclines.at:213"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -5700,72 +33336,126 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:157: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:157 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:157: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:213: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:213"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:157: cat stdout"
-echo synclines.at:157 >$at_check_line_file
-( $at_traceon; cat stdout ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "input.y:8: #error \"8\"
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:157: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:213: cat stdout"
+at_fn_check_prepare_trace "synclines.at:213"
+( $at_check_trace; cat stdout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "input.y:8: #error \"8\"
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  45 ) # 45. synclines.at:175: Epilogue synch line
-    at_setup_line='synclines.at:175'
-    at_desc='Epilogue synch line'
-    $at_quiet $ECHO_N " 45: Epilogue synch line                          $ECHO_C"
-    at_xfail=no
-    (
-      echo "45. synclines.at:175: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_131
+#AT_START_132
+at_fn_group_banner 132 'synclines.at:232' \
+  "Epilogue syncline" "                              " 7
+at_xfail=no
+(
+  $as_echo "132. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # It seems impossible to find a generic scheme to check the location
@@ -5787,32 +33477,28 @@
 
 cat >syncline.c <<'_ATEOF'
 #error "1"
+int i; /* avoids -pedantic warning about an empty translation unit. */
 _ATEOF
 
 
-$at_traceoff
-echo "synclines.at:175: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
-echo synclines.at:175 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c syncline.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:232: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c syncline.c" "synclines.at:232"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c syncline.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -5821,61 +33507,115 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:175: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:175 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:175: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:232: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:232"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:175: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
-echo synclines.at:175 >$at_check_line_file
-( $at_traceon; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:175: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/synclines.at:232: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:232"
+( $at_check_trace; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input.y <<'_ATEOF'
 %{
-void yyerror (const char *s);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 %%
@@ -5884,54 +33624,110 @@
 #error "8"
 _ATEOF
 
-$at_traceoff
-echo "synclines.at:175: bison -o input.c input.y"
-echo synclines.at:175 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:175: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:232: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:232"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/synclines.at:232: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "synclines.at:232"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:232: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:232"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:232: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:232"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:232: bison -o input.c input.y"
+at_fn_check_prepare_trace "synclines.at:232"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "synclines.at:175: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
-echo synclines.at:175 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   *);;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/synclines.at:232: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c input.c" "synclines.at:232"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
-
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
 # In case GCC displays column information, strip it down.
 #
 #   input.y:4:2: #error "4"    or
@@ -5940,189 +33736,1109 @@
 # =>
 #   input.y:4: #error "4"
 #
-$at_traceoff
-echo "synclines.at:175: sed -e 's/^\\([^:]*:[^:.]*\\)[.:][^:]*:\\(.*\\)\$/\\1:\\2/' -e 's/^\\([^:]*:[^:]*:\\)[^#]*\\( #error\\)/\\1\\2/' stderr"
-echo synclines.at:175 >$at_check_line_file
-( $at_traceon; sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^#]*\( #error\)/\1\2/' stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:175: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:232: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
 
-$at_traceon
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:232"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "synclines.at:175: cat stdout"
-echo synclines.at:175 >$at_check_line_file
-( $at_traceon; cat stdout ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "input.y:8: #error \"8\"
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "synclines.at:175: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/synclines.at:232: cat stdout"
+at_fn_check_prepare_trace "synclines.at:232"
+( $at_check_trace; cat stdout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "input.y:8: #error \"8\"
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:232"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-  banner-6 ) # Banner 6. headers.at:19
-    cat <<\_ATEOF
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_132
+#AT_START_133
+at_fn_group_banner 133 'synclines.at:249' \
+  "%code top syncline" "                             " 7
+at_xfail=no
+(
+  $as_echo "133. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-Parser Headers.
 
+# It seems impossible to find a generic scheme to check the location
+# of an error.  Even requiring GCC is not sufficient, since for instance
+# the version modified by Apple:
+#
+# | Reading specs from /usr/libexec/gcc/darwin/ppc/2.95.2/specs
+# | Apple Computer, Inc. version gcc-934.3, based on gcc version 2.95.2
+# | 19991024 (release) configure:2124: $? = 0
+#
+# instead of:
+#
+# | input.y:2: #error "2"
+#
+# it reports:
+#
+# | input.y:2: "2"
+# | cpp-precomp: warning: errors during smart preprocessing, retrying in basic mode
+
+cat >syncline.c <<'_ATEOF'
+#error "1"
+int i; /* avoids -pedantic warning about an empty translation unit. */
 _ATEOF
-    ;;
 
-  46 ) # 46. headers.at:27: %union and --defines
-    at_setup_line='headers.at:27'
-    at_desc='%union and --defines'
-    $at_quiet $ECHO_N " 46: %union and --defines                         $ECHO_C"
-    at_xfail=no
-    (
-      echo "46. headers.at:27: testing ..."
-      $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:249: \$CC \$CFLAGS \$CPPFLAGS -c syncline.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c syncline.c" "synclines.at:249"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c syncline.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
+# In case GCC displays column information, strip it down.
+#
+#   input.y:4:2: #error "4"    or
+#   input.y:4.2: #error "4"    or
+#   input.y:4:2: error: #error "4"
+# =>
+#   input.y:4: #error "4"
+#
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:249: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:249"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:249: test \"\`cat stdout\`\" = 'syncline.c:1: #error \"1\"' || exit 77"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:249"
+( $at_check_trace; test "`cat stdout`" = 'syncline.c:1: #error "1"' || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input.y <<'_ATEOF'
-%union
-{
-  int   integer;
-  char *string ;
+%code top {
+#error "2"
 }
+%{
+void yyerror ( const char *msg);
+int yylex (void);
+%}
 %%
-exp: {};
+exp: '0';
+%%
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:249: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:249"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/synclines.at:249: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "synclines.at:249"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:249: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:249"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:249: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:249"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:249: bison -o input.c input.y"
+at_fn_check_prepare_trace "synclines.at:249"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:249: \$CC \$CFLAGS \$CPPFLAGS -c input.c"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c input.c" "synclines.at:249"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Transform stderr into something like this:
+#
+#   input.y:4: #error "4"
+#
+# In case GCC displays column information, strip it down.
+#
+#   input.y:4:2: #error "4"    or
+#   input.y:4.2: #error "4"    or
+#   input.y:4:2: error: #error "4"
+# =>
+#   input.y:4: #error "4"
+#
+# It may also issue more context information:
+#
+#   input.y: In function 'yyparse':
+#   input.y:8: #error "8"
+# =>
+#   input.y:4: #error "8"
+#
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
+#
+#   input.y:1:2: error: #error "1"
+#    #error "1"
+#     ^
+#
+# Possibly distcc adds its bits.
+#
+#   distcc[33187] ERROR: compile (null) on localhost failed
+#   syncline.c:1:2: error: #error "1"
+#   distcc[33185] ERROR: compile syncline.c on localhost failed
+#
+# or even
+#
+#   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
+#   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
+#
+# When c++ is used to compiler C, we might have more messages (Clang 3.2):
+#
+#    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:249: \$PERL -p -0777 - stderr <<\\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\\[\\d+\\] .*\\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\\+\\+'.*\\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\\n//gm;
+  # Caret error.
+  s/^ *#error.*\\n *\\^\\n//gm;
+  # Number of errors.
+  s/^1 error generated\\.\\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\\d+)[.:][^:]+:(.+)\$/\$1:\$2/gm;
+  # Map all combinations of \"error: \" and \"#error: \" to \"#error \".
+  s/^([^:]+:\\d+):( |#error|error|:)+/\$1: #error /gm;
+EOF
+"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:249"
+( $at_check_trace; $PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
+  s/^distcc\[\d+\] .*\n//gm;
+  # c vs. c++.
+  s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
+  # Function context.
+  s/^[^:]*: In function '[^']+':\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$1:$2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$1: #error /gm;
+EOF
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:249: cat stdout"
+at_fn_check_prepare_trace "synclines.at:249"
+( $at_check_trace; cat stdout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "input.y:2: #error \"2\"
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_133
+#AT_START_134
+at_fn_group_banner 134 'synclines.at:290' \
+  "%no-lines" "                                      " 7
+at_xfail=no
+(
+  $as_echo "134. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "yacc.c" %defines
+%{
+void yyerror ( const char *msg);
+int yylex (void);
+%}
+%%
+exp: '0'
 _ATEOF
 
 
-$at_traceoff
-echo "headers.at:39: bison --defines input.y"
-echo headers.at:39 >$at_check_line_file
-( $at_traceon; bison --defines input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:39: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:290: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --no-lines -o input.c -d input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:290"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --no-lines -o input.c -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:290"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/synclines.at:290: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.c -d input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.c -d input.y" "synclines.at:290"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.c -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:290"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:290: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:290"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:290"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:290: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:290"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:290"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/synclines.at:290: bison --no-lines -o input.c -d input.y"
+at_fn_check_prepare_trace "synclines.at:290"
+( $at_check_trace; bison --no-lines -o input.c -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:290"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/synclines.at:290: grep '#line' *.c *.h"
+at_fn_check_prepare_trace "synclines.at:290"
+( $at_check_trace; grep '#line' *.c *.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/synclines.at:290"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  47 ) # 47. headers.at:77: Invalid CPP guards: input/input
-    at_setup_line='headers.at:77'
-    at_desc='Invalid CPP guards: input/input'
-    $at_quiet $ECHO_N " 47: Invalid CPP guards: input/input              $ECHO_C"
-    at_xfail=no
-    (
-      echo "47. headers.at:77: testing ..."
-      $at_traceon
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_134
+#AT_START_135
+at_fn_group_banner 135 'synclines.at:291' \
+  "%no-lines" "                                      " 7
+at_xfail=no
+(
+  $as_echo "135. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "glr.c" %defines
+%{
+void yyerror ( const char *msg);
+int yylex (void);
+%}
+%%
+exp: '0'
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:291: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --no-lines -o input.c -d input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:291"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --no-lines -o input.c -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:291"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/synclines.at:291: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.c -d input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.c -d input.y" "synclines.at:291"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.c -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:291"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:291: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:291"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:291"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:291: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:291"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:291"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:291: bison --no-lines -o input.c -d input.y"
+at_fn_check_prepare_trace "synclines.at:291"
+( $at_check_trace; bison --no-lines -o input.c -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:291"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:291: grep '#line' *.c *.h"
+at_fn_check_prepare_trace "synclines.at:291"
+( $at_check_trace; grep '#line' *.c *.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/synclines.at:291"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_135
+#AT_START_136
+at_fn_group_banner 136 'synclines.at:292' \
+  "%no-lines" "                                      " 7
+at_xfail=no
+(
+  $as_echo "136. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc" %defines
+%{
+
+int yylex (yy::parser::semantic_type *lvalp);
+%}
+%%
+exp: '0'
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:292: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --no-lines -o input.cc -d input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:292"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --no-lines -o input.cc -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:292"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/synclines.at:292: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.cc -d input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.cc -d input.y" "synclines.at:292"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.cc -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:292"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:292: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:292"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:292"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:292: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:292"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:292"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:292: bison --no-lines -o input.cc -d input.y"
+at_fn_check_prepare_trace "synclines.at:292"
+( $at_check_trace; bison --no-lines -o input.cc -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:292"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:292: grep '#line' *.cc *.hh"
+at_fn_check_prepare_trace "synclines.at:292"
+( $at_check_trace; grep '#line' *.cc *.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/synclines.at:292"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_136
+#AT_START_137
+at_fn_group_banner 137 'synclines.at:293' \
+  "%no-lines" "                                      " 7
+at_xfail=no
+(
+  $as_echo "137. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "glr.cc" %defines
+%{
+
+int yylex (yy::parser::semantic_type *lvalp);
+%}
+%%
+exp: '0'
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/synclines.at:293: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --no-lines -o input.cc -d input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "synclines.at:293"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --no-lines -o input.cc -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:293"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/synclines.at:293: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.cc -d input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.cc -d input.y" "synclines.at:293"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --no-lines -o input.cc -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:293"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:293: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:293"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:293"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/synclines.at:293: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "synclines.at:293"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:293"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/synclines.at:293: bison --no-lines -o input.cc -d input.y"
+at_fn_check_prepare_trace "synclines.at:293"
+( $at_check_trace; bison --no-lines -o input.cc -d input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/synclines.at:293"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/synclines.at:293: grep '#line' *.cc *.hh"
+at_fn_check_prepare_trace "synclines.at:293"
+( $at_check_trace; grep '#line' *.cc *.hh
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/synclines.at:293"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_137
+#AT_START_138
+at_fn_group_banner 138 'headers.at:57' \
+  "Invalid CPP guards:  --defines=input/input.h" "   " 8
+at_xfail=no
+(
+  $as_echo "138. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # Possibly create inner directories.
-dirname=`(dirname input/input) 2>/dev/null ||
+dirname=`$as_dirname -- input/input ||
 $as_expr Xinput/input : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 Xinput/input : 'X\(//\)[^/]' \| \
 	 Xinput/input : 'X\(//\)$' \| \
-	 Xinput/input : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo Xinput/input |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-{ if $as_mkdir_p; then
-    mkdir -p $dirname
-  else
-    as_dir=$dirname
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirname" >&5
-echo "$as_me: error: cannot create directory $dirname" >&2;}
-   { (exit 1); exit 1; }; }; }
-
+	 Xinput/input : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo Xinput/input |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+as_dir=$dirname; as_fn_mkdir_p
 
 cat >input/input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
 
 %{
 #include <input/input.h>
-void yyerror (const char *);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 %%
@@ -6133,127 +34849,174 @@
 
 
 
-$at_traceoff
-echo "headers.at:77: bison --defines=input/input.h --output=y.tab.c input/input.y"
-echo headers.at:77 >$at_check_line_file
-( $at_traceon; bison --defines=input/input.h --output=y.tab.c input/input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:77: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:57: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --defines=input/input.h --output=input/input.c input/input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:57"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --defines=input/input.h --output=input/input.c input/input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/headers.at:57: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=input/input.h --output=input/input.c input/input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=input/input.h --output=input/input.c input/input.y" "headers.at:57"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=input/input.h --output=input/input.c input/input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:57: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:57"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:57: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:57"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/headers.at:57: bison --defines=input/input.h --output=input/input.c input/input.y"
+at_fn_check_prepare_trace "headers.at:57"
+( $at_check_trace; bison --defines=input/input.h --output=input/input.c input/input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "headers.at:77: \$CC \$CFLAGS \$CPPFLAGS -o y.tab.o -I. -c y.tab.c"
-echo headers.at:77 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o y.tab.o -I. -c y.tab.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:77: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:57: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:57"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/headers.at:57: \$CC \$CFLAGS \$CPPFLAGS -c -o input/input.o -I. -c input/input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input/input.o -I. -c input/input.c " "headers.at:57"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input/input.o -I. -c input/input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  48 ) # 48. headers.at:78: Invalid CPP guards: 9foo
-    at_setup_line='headers.at:78'
-    at_desc='Invalid CPP guards: 9foo'
-    $at_quiet $ECHO_N " 48: Invalid CPP guards: 9foo                     $ECHO_C"
-    at_xfail=no
-    (
-      echo "48. headers.at:78: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_138
+#AT_START_139
+at_fn_group_banner 139 'headers.at:58' \
+  "Invalid CPP guards:  --defines=9foo.h" "          " 8
+at_xfail=no
+(
+  $as_echo "139. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # Possibly create inner directories.
-dirname=`(dirname 9foo) 2>/dev/null ||
+dirname=`$as_dirname -- 9foo ||
 $as_expr X9foo : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X9foo : 'X\(//\)[^/]' \| \
 	 X9foo : 'X\(//\)$' \| \
-	 X9foo : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X9foo |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-{ if $as_mkdir_p; then
-    mkdir -p $dirname
-  else
-    as_dir=$dirname
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirname" >&5
-echo "$as_me: error: cannot create directory $dirname" >&2;}
-   { (exit 1); exit 1; }; }; }
-
+	 X9foo : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X9foo |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+as_dir=$dirname; as_fn_mkdir_p
 
 cat >9foo.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
 
 %{
 #include <9foo.h>
-void yyerror (const char *);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 %%
@@ -6264,88 +35027,503 @@
 
 
 
-$at_traceoff
-echo "headers.at:78: bison --defines=9foo.h --output=y.tab.c 9foo.y"
-echo headers.at:78 >$at_check_line_file
-( $at_traceon; bison --defines=9foo.h --output=y.tab.c 9foo.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:78: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:58: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --defines=9foo.h --output=9foo.c 9foo.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:58"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --defines=9foo.h --output=9foo.c 9foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/headers.at:58: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=9foo.h --output=9foo.c 9foo.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=9foo.h --output=9foo.c 9foo.y" "headers.at:58"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=9foo.h --output=9foo.c 9foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:58: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:58"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:58: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:58"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/headers.at:58: bison --defines=9foo.h --output=9foo.c 9foo.y"
+at_fn_check_prepare_trace "headers.at:58"
+( $at_check_trace; bison --defines=9foo.h --output=9foo.c 9foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "headers.at:78: \$CC \$CFLAGS \$CPPFLAGS -o y.tab.o -I. -c y.tab.c"
-echo headers.at:78 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o y.tab.o -I. -c y.tab.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:78: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/headers.at:58: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:58"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:58: \$CC \$CFLAGS \$CPPFLAGS -c -o 9foo.o -I. -c 9foo.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o 9foo.o -I. -c 9foo.c " "headers.at:58"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o 9foo.o -I. -c 9foo.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_139
+#AT_START_140
+at_fn_group_banner 140 'headers.at:59' \
+  "Invalid CPP guards: %glr-parser --defines=input/input.h" "" 8
+at_xfail=no
+(
+  $as_echo "140. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Possibly create inner directories.
+dirname=`$as_dirname -- input/input ||
+$as_expr Xinput/input : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 Xinput/input : 'X\(//\)[^/]' \| \
+	 Xinput/input : 'X\(//\)$' \| \
+	 Xinput/input : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo Xinput/input |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+as_dir=$dirname; as_fn_mkdir_p
+
+cat >input/input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%{
+#include <input/input.h>
+void yyerror ( const char *msg);
+int yylex (void);
+%}
+%%
+dummy:;
+%%
+#include <input/input.h>
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:59: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --defines=input/input.h --output=input/input.c input/input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:59"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --defines=input/input.h --output=input/input.c input/input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:59: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=input/input.h --output=input/input.c input/input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=input/input.h --output=input/input.c input/input.y" "headers.at:59"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=input/input.h --output=input/input.c input/input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:59: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:59"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:59: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:59"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/headers.at:59: bison --defines=input/input.h --output=input/input.c input/input.y"
+at_fn_check_prepare_trace "headers.at:59"
+( $at_check_trace; bison --defines=input/input.h --output=input/input.c input/input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  49 ) # 49. headers.at:87: export YYLTYPE
-    at_setup_line='headers.at:87'
-    at_desc='export YYLTYPE'
-    $at_quiet $ECHO_N " 49: export YYLTYPE                               $ECHO_C"
-    at_xfail=no
-    (
-      echo "49. headers.at:87: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/headers.at:59: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:59"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:59: \$CC \$CFLAGS \$CPPFLAGS -c -o input/input.o -I. -c input/input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input/input.o -I. -c input/input.c " "headers.at:59"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input/input.o -I. -c input/input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_140
+#AT_START_141
+at_fn_group_banner 141 'headers.at:60' \
+  "Invalid CPP guards: %glr-parser --defines=9foo.h" "" 8
+at_xfail=no
+(
+  $as_echo "141. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Possibly create inner directories.
+dirname=`$as_dirname -- 9foo ||
+$as_expr X9foo : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X9foo : 'X\(//\)[^/]' \| \
+	 X9foo : 'X\(//\)$' \| \
+	 X9foo : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X9foo |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+as_dir=$dirname; as_fn_mkdir_p
+
+cat >9foo.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%glr-parser
+%{
+#include <9foo.h>
+void yyerror ( const char *msg);
+int yylex (void);
+%}
+%%
+dummy:;
+%%
+#include <9foo.h>
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:60: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --defines=9foo.h --output=9foo.c 9foo.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:60"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --defines=9foo.h --output=9foo.c 9foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:60"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:60: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=9foo.h --output=9foo.c 9foo.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=9foo.h --output=9foo.c 9foo.y" "headers.at:60"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines=9foo.h --output=9foo.c 9foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:60"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:60: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:60"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:60"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:60: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:60"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:60"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:60: bison --defines=9foo.h --output=9foo.c 9foo.y"
+at_fn_check_prepare_trace "headers.at:60"
+( $at_check_trace; bison --defines=9foo.h --output=9foo.c 9foo.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:60"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:60: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:60"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:60"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:60: \$CC \$CFLAGS \$CPPFLAGS -c -o 9foo.o -I. -c 9foo.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o 9foo.o -I. -c 9foo.c " "headers.at:60"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o 9foo.o -I. -c 9foo.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:60"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_141
+#AT_START_142
+at_fn_group_banner 142 'headers.at:69' \
+  "export YYLTYPE" "                                 " 8
+at_xfail=no
+(
+  $as_echo "142. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %locations
 
-%name-prefix="my_"
+%name-prefix "my_"
 %{
 #include <stdio.h>
 #include <stdlib.h>
@@ -6369,30 +35547,91 @@
 
 
 
-$at_traceoff
-echo "headers.at:114: bison --defines -o input.c input.y"
-echo headers.at:114 >$at_check_line_file
-( $at_traceon; bison --defines -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:114: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:96: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:96"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:96"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/headers.at:96: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines -o input.c input.y" "headers.at:96"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:96"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:96: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:96"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:96"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:96: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:96"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:96"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:96: bison --defines -o input.c input.y"
+at_fn_check_prepare_trace "headers.at:96"
+( $at_check_trace; bison --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:96"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # YYLTYPE should be defined, and MY_LLOC declared.
@@ -6412,130 +35651,2006 @@
 
 # Link and execute, just to make sure everything is fine (and in
 # particular, that MY_LLOC is indeed defined somewhere).
-$at_traceoff
-echo "headers.at:132: \$CC \$CFLAGS \$CPPFLAGS -o caller.o -c caller.c"
-echo headers.at:132 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o caller.o -c caller.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:132: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/headers.at:114: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:114"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:114"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:114: \$CC \$CFLAGS \$CPPFLAGS -c -o caller.o caller.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o caller.o caller.c " "headers.at:114"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o caller.o caller.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:114"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/headers.at:115: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:115"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:115"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "headers.at:133: \$CC \$CFLAGS \$CPPFLAGS -o input.o -c input.c"
-echo headers.at:133 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o input.o -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:133: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/headers.at:115: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o input.c " "headers.at:115"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:115"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:116: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:116"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:116"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/headers.at:116: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o caller caller.o input.o \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o caller caller.o input.o $LIBS" "headers.at:116"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o caller caller.o input.o $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:116"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "headers.at:134: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o caller caller.o input.o \$LIBS"
-echo headers.at:134 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o caller caller.o input.o $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:134: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/headers.at:117:  \$PREPARSER ./caller"
+at_fn_check_prepare_dynamic " $PREPARSER ./caller" "headers.at:117"
+( $at_check_trace;  $PREPARSER ./caller
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:117"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "headers.at:135: \$PREPARSER ./caller"
-echo headers.at:135 >$at_check_line_file
-( $at_traceon; $PREPARSER ./caller ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "headers.at:135: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/headers.at:117: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "headers.at:117"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:117"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_142
+#AT_START_143
+at_fn_group_banner 143 'headers.at:125' \
+  "Several parsers" "                                " 8
+at_xfail=no
+(
+  $as_echo "143. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
-  banner-7 ) # Banner 7. actions.at:19
-    cat <<\_ATEOF
+# AT_TEST([PREFIX], [DIRECTIVES])
+# -------------------------------
+# Generate and compile to *.o.  Make sure there is no (allowed) YY*
+# nor yy* identifiers in the header.  Check that headers are
+# self-contained, and can be compiled by a C++ compiler.
+# AT_TEST
 
-User Actions.
+cat >main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
 
+// If we are compiling with CC=$CXX, then do not load the C headers
+// inside extern "C", since they were _not_ compiled this way.
+#if ! CC_IS_CXX
+extern "C"
+{
+#endif
+  #include "x1.h"
+  #include "x2.h"
+  #include "x3.h"
+  #include "x4.h"
+  #include "x6.h"
+  #include "x7.h"
+  #include "x8.h"
+#if ! CC_IS_CXX
+}
+#endif
+#include "x5.hh"
+//#include "x6.hh"
+
+#define RUN(S)                                  \
+  do {                                          \
+    int res = S;                                \
+    if (res)                                    \
+      std::cerr << #S": " << res << std::endl;  \
+  } while (false)
+
+int
+main (void)
+{
+  RUN(x1_parse());
+  RUN(x2_parse());
+  RUN(x3_parse());
+  RUN(x4_parse());
+  x5_::parser p5;
+  RUN(p5.parse());
+  RUN(x6_parse());
+  RUN(x7_parse());
+  RUN(x8_parse());
+//  x6_::parser p6;
+//  RUN(p6.parse());
+  return 0;
+}
 _ATEOF
-    ;;
+# main.cc
 
-  50 ) # 50. actions.at:25: Mid-rule actions
-    at_setup_line='actions.at:25'
-    at_desc='Mid-rule actions'
-    $at_quiet $ECHO_N " 50: Mid-rule actions                             $ECHO_C"
-    at_xfail=no
-    (
-      echo "50. actions.at:25: testing ..."
-      $at_traceon
+
+cat >x1.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%define api.prefix "x1_"
+
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+  static void x1_error ( const char *msg);
+  static int x1_lex (void);
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void x1_error ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int x1_lex (void)
+{
+  static char const input[] = "x1";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:218: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -o x1.c x1.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:218"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -o x1.c x1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:218: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x1.c x1.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x1.c x1.y" "headers.at:218"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x1.c x1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:218: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:218"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:218: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:218"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:218: bison -d -o x1.c x1.y"
+at_fn_check_prepare_trace "headers.at:218"
+( $at_check_trace; bison -d -o x1.c x1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:218: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:218"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:218: \$CC \$CFLAGS \$CPPFLAGS -c -o x1.o x1.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o x1.o x1.c " "headers.at:218"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o x1.o x1.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:218: echo \"x1\" >>expout"
+at_fn_check_prepare_trace "headers.at:218"
+( $at_check_trace; echo "x1" >>expout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+cat >x2.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%define api.prefix "x2_"
+%locations %debug
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+  static void x2_error ( const char *msg);
+  static int x2_lex (void);
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void x2_error ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (x2_lloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int x2_lex (void)
+{
+  static char const input[] = "x2";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (x2_lloc).first_line = (x2_lloc).last_line = 1;
+  (x2_lloc).first_column = (x2_lloc).last_column = toknum;
+  return res;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:219: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -o x2.c x2.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:219"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -o x2.c x2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:219: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x2.c x2.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x2.c x2.y" "headers.at:219"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x2.c x2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:219: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:219"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:219: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:219"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:219: bison -d -o x2.c x2.y"
+at_fn_check_prepare_trace "headers.at:219"
+( $at_check_trace; bison -d -o x2.c x2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:219: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:219"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:219: \$CC \$CFLAGS \$CPPFLAGS -c -o x2.o x2.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o x2.o x2.c " "headers.at:219"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o x2.o x2.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:219: echo \"x2\" >>expout"
+at_fn_check_prepare_trace "headers.at:219"
+( $at_check_trace; echo "x2" >>expout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+cat >x3.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%define api.prefix "x3_"
+%glr-parser
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+  static void x3_error ( const char *msg);
+  static int x3_lex (void);
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void x3_error ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int x3_lex (void)
+{
+  static char const input[] = "x3";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -o x3.c x3.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -o x3.c x3.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:220: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x3.c x3.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x3.c x3.y" "headers.at:220"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x3.c x3.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:220: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:220"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:220: bison -d -o x3.c x3.y"
+at_fn_check_prepare_trace "headers.at:220"
+( $at_check_trace; bison -d -o x3.c x3.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:220: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:220"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:220: \$CC \$CFLAGS \$CPPFLAGS -c -o x3.o x3.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o x3.o x3.c " "headers.at:220"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o x3.o x3.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:220: echo \"x3\" >>expout"
+at_fn_check_prepare_trace "headers.at:220"
+( $at_check_trace; echo "x3" >>expout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:220"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+cat >x4.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%define api.prefix "x4_"
+%locations %debug %glr-parser
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+  static void x4_error ( const char *msg);
+  static int x4_lex (void);
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void x4_error ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (x4_lloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int x4_lex (void)
+{
+  static char const input[] = "x4";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (x4_lloc).first_line = (x4_lloc).last_line = 1;
+  (x4_lloc).first_column = (x4_lloc).last_column = toknum;
+  return res;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:221: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -o x4.c x4.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:221"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -o x4.c x4.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:221: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x4.c x4.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x4.c x4.y" "headers.at:221"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x4.c x4.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:221: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:221"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:221: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:221"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:221: bison -d -o x4.c x4.y"
+at_fn_check_prepare_trace "headers.at:221"
+( $at_check_trace; bison -d -o x4.c x4.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:221: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:221"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:221: \$CC \$CFLAGS \$CPPFLAGS -c -o x4.o x4.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o x4.o x4.c " "headers.at:221"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o x4.o x4.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:221: echo \"x4\" >>expout"
+at_fn_check_prepare_trace "headers.at:221"
+( $at_check_trace; echo "x4" >>expout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+cat >x5.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%define api.prefix "x5_"
+%locations %debug %language "c++"
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+
+  static int x5_lex (x5_::parser::semantic_type *lvalp, x5_::parser::location_type *llocp);
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+/* A C++ error reporting function.  */
+void
+x5_::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+#include <assert.h>
+static
+int x5_lex (x5_::parser::semantic_type *lvalp, x5_::parser::location_type *llocp)
+{
+  static char const input[] = "x5";
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;(void) llocp;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (*llocp).begin.line = (*llocp).end.line = 1;
+  (*llocp).begin.column = (*llocp).end.column = toknum;
+  return res;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:222: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -o x5.cc x5.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:222"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -o x5.cc x5.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:222: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x5.cc x5.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x5.cc x5.y" "headers.at:222"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x5.cc x5.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:222: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:222"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:222: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:222"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:222: bison -d -o x5.cc x5.y"
+at_fn_check_prepare_trace "headers.at:222"
+( $at_check_trace; bison -d -o x5.cc x5.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:222: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "headers.at:222"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:222: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o x5.o x5.cc "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o x5.o x5.cc " "headers.at:222"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o x5.o x5.cc
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:222: echo \"x5\" >>expout"
+at_fn_check_prepare_trace "headers.at:222"
+( $at_check_trace; echo "x5" >>expout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+cat >x6.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%define api.prefix "x6_"
+%define api.pure
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+  static void x6_error ( const char *msg);
+  static int x6_lex (X6_STYPE *lvalp);
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void x6_error ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int x6_lex (X6_STYPE *lvalp)
+{
+  static char const input[] = "x6";
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:223: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -o x6.c x6.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:223"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -o x6.c x6.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:223"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:223: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x6.c x6.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x6.c x6.y" "headers.at:223"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x6.c x6.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:223"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:223: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:223"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:223"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:223: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:223"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:223"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:223: bison -d -o x6.c x6.y"
+at_fn_check_prepare_trace "headers.at:223"
+( $at_check_trace; bison -d -o x6.c x6.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:223"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:223: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:223"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:223"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:223: \$CC \$CFLAGS \$CPPFLAGS -c -o x6.o x6.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o x6.o x6.c " "headers.at:223"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o x6.o x6.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:223"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:223: echo \"x6\" >>expout"
+at_fn_check_prepare_trace "headers.at:223"
+( $at_check_trace; echo "x6" >>expout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:223"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+cat >x7.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%define api.prefix "x7_"
+%define api.push-pull both
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+  static void x7_error ( const char *msg);
+  static int x7_lex (void);
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void x7_error ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int x7_lex (void)
+{
+  static char const input[] = "x7";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:224: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -o x7.c x7.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:224"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -o x7.c x7.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:224: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x7.c x7.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x7.c x7.y" "headers.at:224"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x7.c x7.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:224: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:224"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:224: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:224"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:224: bison -d -o x7.c x7.y"
+at_fn_check_prepare_trace "headers.at:224"
+( $at_check_trace; bison -d -o x7.c x7.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:224: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:224"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:224: \$CC \$CFLAGS \$CPPFLAGS -c -o x7.o x7.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o x7.o x7.c " "headers.at:224"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o x7.o x7.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:224: echo \"x7\" >>expout"
+at_fn_check_prepare_trace "headers.at:224"
+( $at_check_trace; echo "x7" >>expout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+cat >x8.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%define api.prefix "x8_"
+%define api.pure %define api.push-pull both
+%error-verbose
+%union
+{
+  int integer;
+}
+%{
+#include <stdio.h>
+  static void x8_error ( const char *msg);
+  static int x8_lex (X8_STYPE *lvalp);
+%}
+%%
+exp:
+  'x' '1' { printf ("x1\n"); }
+| 'x' '2' { printf ("x2\n"); }
+| 'x' '3' { printf ("x3\n"); }
+| 'x' '4' { printf ("x4\n"); }
+| 'x' '5' { printf ("x5\n"); }
+| 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
+;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void x8_error ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int x8_lex (X8_STYPE *lvalp)
+{
+  static char const input[] = "x8";
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/headers.at:225: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -o x8.c x8.y"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:225"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -o x8.c x8.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/headers.at:225: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x8.c x8.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x8.c x8.y" "headers.at:225"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -o x8.c x8.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:225: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:225"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/headers.at:225: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "headers.at:225"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/headers.at:225: bison -d -o x8.c x8.y"
+at_fn_check_prepare_trace "headers.at:225"
+( $at_check_trace; bison -d -o x8.c x8.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:225: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:225"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:225: \$CC \$CFLAGS \$CPPFLAGS -c -o x8.o x8.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o x8.o x8.c " "headers.at:225"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o x8.o x8.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:225: echo \"x8\" >>expout"
+at_fn_check_prepare_trace "headers.at:225"
+( $at_check_trace; echo "x8" >>expout
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+#AT_TEST([x5], [%locations %language "c++" %glr-parser])
+
+# Check there is no 'yy' left.
+# C++ output relies on namespaces and still uses yy a lot.
+#
+# Check there is no 'YY' left.
+# Ignore comments, YYChar (template parameter), YYPARSE_PARAM
+# (obsolete), YYPUSH_MORE(_DEFINED)?  (constant definition),
+# YY_\w+_INCLUDED (header guards).
+#
+# YYDEBUG (not renamed) can be read, but not changed.
+{ set +x
+$as_echo "$at_srcdir/headers.at:237: \$PERL -n -0777 -e '
+  s{/\\*.*?\\*/}{}gs;
+  s{//.*}{}g;
+  s{\\b(YYChar
+      |YYPARSE_PARAM
+      |YYPUSH_MORE(_DEFINED)?
+      |YY_\\w+_INCLUDED
+      |YY_NULL
+      |(defined|if)\\ YYDEBUG
+      )\\b}{}gx;
+  while (/^(.*YY.*)\$/gm)
+  {
+    print \"\$ARGV: invalid exported YY: \$1\\n\";
+  }
+  if (\$ARGV =~ /\\.h\$/)
+  {
+    while (/^(.*yy.*)\$/gm)
+    {
+      print \"\$ARGV: invalid exported yy: \$1\\n\";
+    }
+  }
+' -- *.hh *.h"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:237"
+( $at_check_trace; $PERL -n -0777 -e '
+  s{/\*.*?\*/}{}gs;
+  s{//.*}{}g;
+  s{\b(YYChar
+      |YYPARSE_PARAM
+      |YYPUSH_MORE(_DEFINED)?
+      |YY_\w+_INCLUDED
+      |YY_NULL
+      |(defined|if)\ YYDEBUG
+      )\b}{}gx;
+  while (/^(.*YY.*)$/gm)
+  {
+    print "$ARGV: invalid exported YY: $1\n";
+  }
+  if ($ARGV =~ /\.h$/)
+  {
+    while (/^(.*yy.*)$/gm)
+    {
+      print "$ARGV: invalid exported yy: $1\n";
+    }
+  }
+' -- *.hh *.h
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:237"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check that the headers are self-contained, and protected against
+# multiple inclusions.  While at it, check they are sane for C++.
+for h in *.h *.hh
+do
+  # No shell expansion with AT_DATA.
+  cat >$h.cc <<EOF
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "$h"
+#include "$h"
+EOF
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:270: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "headers.at:270"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:270"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:270: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o \$h.o \$h.cc "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o $h.o $h.cc " "headers.at:270"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o $h.o $h.cc
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:270"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+done
+
+# Do this late, so that other checks have been performed.
+cat >c-and-cxx.h <<'_ATEOF'
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+  int fortytwo (void);
+#ifdef __cplusplus
+}
+#endif
+_ATEOF
+
+cat >c-only.c <<'_ATEOF'
+#include "c-and-cxx.h"
+int
+main (void)
+{
+  return fortytwo () == 42 ? 0 : 1;
+}
+_ATEOF
+
+cat >cxx-only.cc <<'_ATEOF'
+#include "c-and-cxx.h"
+int fortytwo ()
+{
+  return 42;
+}
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:274: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "headers.at:274"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:274"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:274: \$CC \$CFLAGS \$CPPFLAGS -c -o c-only.o c-only.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o c-only.o c-only.c " "headers.at:274"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o c-only.o c-only.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:274"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:274: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "headers.at:274"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:274"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:274: \$CXX \$CXXFLAGS \$CPPFLAGS -c -o cxx-only.o cxx-only.cc "
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS -c -o cxx-only.o cxx-only.cc " "headers.at:274"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS -c -o cxx-only.o cxx-only.cc
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:274"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:274: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS c-only.o cxx-only.o -o c-and-cxx ||
+          exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "headers.at:274"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS c-only.o cxx-only.o -o c-and-cxx ||
+          exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_skip $at_status "$at_srcdir/headers.at:274"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:274:  \$PREPARSER ./c-and-cxx"
+at_fn_check_prepare_dynamic " $PREPARSER ./c-and-cxx" "headers.at:274"
+( $at_check_trace;  $PREPARSER ./c-and-cxx
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:274"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:274: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "headers.at:274"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:274"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:276: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "headers.at:276"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:276"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:276: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o parser x[1-8].o -DCC_IS_CXX=\$CC_IS_CXX main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o parser x[1-8].o -DCC_IS_CXX=$CC_IS_CXX main.cc $LIBS" "headers.at:276"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o parser x[1-8].o -DCC_IS_CXX=$CC_IS_CXX main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:276"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:277:  \$PREPARSER ./parser"
+at_fn_check_prepare_dynamic " $PREPARSER ./parser" "headers.at:277"
+( $at_check_trace;  $PREPARSER ./parser
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:277"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/headers.at:277: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "headers.at:277"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/headers.at:277"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_143
+#AT_START_144
+at_fn_group_banner 144 'actions.at:24' \
+  "Mid-rule actions" "                               " 9
+at_xfail=no
+(
+  $as_echo "144. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # Bison once forgot the mid-rule actions.  It was because the action
@@ -6543,24 +37658,21 @@
 # instead of being attached to the empty rule dedicated to this
 # action.
 
+
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %error-verbose
 %debug
 %{
-# include <stdio.h>
-# include <stdlib.h>
-  static void yyerror (const char *msg);
-  static int yylex (void);
+static void yyerror ( const char *msg);
+static int yylex (void);
 %}
 %%
 exp:     { putchar ('0'); }
@@ -6576,19 +37688,26 @@
          { putchar ('\n'); }
    ;
 %%
-static int
-yylex (void)
-{
-  static const char *input = "123456789";
-  return *input++;
-}
-
-static void
-yyerror (const char *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "123456789";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
 int
 main (void)
 {
@@ -6598,117 +37717,2982 @@
 
 
 
-$at_traceoff
-echo "actions.at:75: bison -d -v -o input.c input.y"
-echo actions.at:75 >$at_check_line_file
-( $at_traceon; bison -d -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:75: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:63: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:63"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:63: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y" "actions.at:63"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:63: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:63"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:63: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:63"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "actions.at:76: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo actions.at:76 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:76: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "actions.at:79: \$PREPARSER ./input"
-echo actions.at:79 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "0123456789
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:79: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/actions.at:63: bison -d -v -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:63"
+( $at_check_trace; bison -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/actions.at:64: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:64"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:64"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  51 ) # 51. actions.at:91: Exotic Dollars
-    at_setup_line='actions.at:91'
-    at_desc='Exotic Dollars'
-    $at_quiet $ECHO_N " 51: Exotic Dollars                               $ECHO_C"
-    at_xfail=no
-    (
-      echo "51. actions.at:91: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/actions.at:64: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:64"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:64"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:65:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:65"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "0123456789
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:65"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:65: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:65"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:65"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_144
+#AT_START_145
+at_fn_group_banner 145 'actions.at:133' \
+  "Initial location: yacc.c " "                      " 9
+at_xfail=no
+(
+  $as_echo "145. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "yacc.c"
+
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror ( const char *msg);
+static int yylex (void);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (void)
+{
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:133: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:133"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:133: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:133"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:133: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:133"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:133: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:133"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:133: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:133"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:133: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:133"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:133: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:133"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:133:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:133"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:133: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:133"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_145
+#AT_START_146
+at_fn_group_banner 146 'actions.at:134' \
+  "Initial location: yacc.c %define api.pure full" " " 9
+at_xfail=no
+(
+  $as_echo "146. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "yacc.c"
+%define api.pure full
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  YYUSE(lvalp);
+  YYUSE(llocp);
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:134: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:134"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:134: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:134"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:134: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:134"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:134: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:134"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:134: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:134"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:134: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:134"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:134: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:134"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:134:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:134"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:134: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:134"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_146
+#AT_START_147
+at_fn_group_banner 147 'actions.at:135' \
+  "Initial location: yacc.c %define api.pure %parse-param { int x }" "" 9
+at_xfail=no
+(
+  $as_echo "147. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "yacc.c"
+%define api.pure %parse-param { int x }
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror (YYLTYPE const * const llocp, int x,  const char *msg);
+static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp, int x,  const char *msg)
+{
+  YYUSE(x);
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  YYUSE(lvalp);
+  YYUSE(llocp);
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse (0);
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:135: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:135"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:135: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:135"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:135: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:135"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:135: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:135"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:135: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:135"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:135: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:135"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:135: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:135"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:135:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:135"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:135: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:135"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_147
+#AT_START_148
+at_fn_group_banner 148 'actions.at:136' \
+  "Initial location: yacc.c %define api.push-pull both" "" 9
+at_xfail=no
+(
+  $as_echo "148. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "yacc.c"
+%define api.push-pull both
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror ( const char *msg);
+static int yylex (void);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (void)
+{
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:136: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:136"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:136: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:136"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:136: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:136"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:136: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:136"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:136: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:136"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:136: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:136"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:136: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:136"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:136:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:136"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:136: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:136"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_148
+#AT_START_149
+at_fn_group_banner 149 'actions.at:137' \
+  "Initial location: yacc.c %define api.push-pull both %define api.pure full" "" 9
+at_xfail=no
+(
+  $as_echo "149. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "yacc.c"
+%define api.push-pull both %define api.pure full
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  YYUSE(lvalp);
+  YYUSE(llocp);
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:137: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:137"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:137: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:137"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:137: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:137"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:137: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:137"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:137: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:137"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:137: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:137"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:137: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:137"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:137:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:137"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:137: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:137"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_149
+#AT_START_150
+at_fn_group_banner 150 'actions.at:138' \
+  "Initial location: glr.c " "                       " 9
+at_xfail=no
+(
+  $as_echo "150. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "glr.c"
+
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror ( const char *msg);
+static int yylex (void);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (void)
+{
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:138: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:138"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:138: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:138"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:138: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:138"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:138: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:138"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:138: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:138"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:138: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:138"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:138: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:138"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:138:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:138"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:138: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:138"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:138"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_150
+#AT_START_151
+at_fn_group_banner 151 'actions.at:139' \
+  "Initial location: glr.c %define api.pure" "       " 9
+at_xfail=no
+(
+  $as_echo "151. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "glr.c"
+%define api.pure
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  YYUSE(lvalp);
+  YYUSE(llocp);
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:139: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:139"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:139: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:139"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:139: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:139"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:139: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:139"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:139: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:139"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:139: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:139"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:139: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:139"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:139:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:139"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:139: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:139"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_151
+#AT_START_152
+at_fn_group_banner 152 'actions.at:140' \
+  "Initial location: lalr1.cc " "                    " 9
+at_xfail=no
+(
+  $as_echo "152. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "lalr1.cc"
+
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+
+static int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+%%
+exp: { std::cerr << @$ << std::endl; }
+%%
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  YYUSE(lvalp);
+  YYUSE(llocp);
+  return 'x';
+}
+
+int
+main (void)
+{
+  yy::parser p;
+  p.set_debug_level (!!getenv("YYDEBUG"));
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:140: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:140"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:140: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "actions.at:140"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:140: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:140"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:140: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:140"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:140: bison -o input.cc input.y"
+at_fn_check_prepare_trace "actions.at:140"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:140: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "actions.at:140"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:140: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "actions.at:140"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:140:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:140"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:140: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:140"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:140"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_152
+#AT_START_153
+at_fn_group_banner 153 'actions.at:141' \
+  "Initial location: glr.cc " "                      " 9
+at_xfail=no
+(
+  $as_echo "153. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "glr.cc"
+
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+
+static int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+%%
+exp: { std::cerr << @$ << std::endl; }
+%%
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  YYUSE(lvalp);
+  YYUSE(llocp);
+  return 'x';
+}
+
+int
+main (void)
+{
+  yy::parser p;
+  p.set_debug_level (!!getenv("YYDEBUG"));
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:141: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:141"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:141: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "actions.at:141"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:141: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:141"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:141: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:141"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:141: bison -o input.cc input.y"
+at_fn_check_prepare_trace "actions.at:141"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:141: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "actions.at:141"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:141: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "actions.at:141"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:141:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:141"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:141: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:141"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1
+1.1: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:141"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_153
+#AT_START_154
+at_fn_group_banner 154 'actions.at:150' \
+  "Initial location: yacc.c %define api.pure full" " " 9
+at_xfail=no
+(
+  $as_echo "154. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "yacc.c"
+%define api.pure full
 %{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
+# define YYLTYPE int
+# define YY_LOCATION_PRINT(Stream, Loc)      \
+   (void) (Loc)
+# define YYLLOC_DEFAULT(Current, Rhs, N)    \
+  (Current) = ((Rhs)[N ? 1 : 0])
 %}
 
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  YYUSE(lvalp);
+  YYUSE(llocp);
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:150: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:150"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:150: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:150"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:150: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:150"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:150: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:150"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:150: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:150"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:150: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:150"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:150: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:150"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:150:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:150"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:150: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:150"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "
+: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_154
+#AT_START_155
+at_fn_group_banner 155 'actions.at:161' \
+  "Initial location: yacc.c %define api.pure full" " " 9
+at_xfail=no
+(
+  $as_echo "155. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "yacc.c"
+%define api.pure full
+%{
+# define YYLTYPE int
+# define YY_LOCATION_PRINT(Stream, Loc)      \
+    fprintf ((Stream), "%d", (Loc))
+# define YYLLOC_DEFAULT(Current, Rhs, N)    \
+  (Current) = ((Rhs)[N ? 1 : 0])
+%}
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+%%
+exp: { YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr); }
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  YYUSE(lvalp);
+  YYUSE(llocp);
+  return 'x';
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:161: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:161"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:161: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:161"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:161: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:161"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:161: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:161"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:161: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:161"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:161: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:161"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:161: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:161"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:161:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:161"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:161: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:161"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "0
+0: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_155
+#AT_START_156
+at_fn_group_banner 156 'actions.at:244' \
+  "Location print: yacc.c " "                        " 9
+at_xfail=no
+(
+  $as_echo "156. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "yacc.c"
+
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror ( const char *msg);
+static int yylex (void);
+}
+%%
+exp:;
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (yylloc).first_line = (yylloc).last_line = 1;
+  (yylloc).first_column = (yylloc).last_column = toknum;
+  return res;
+}
+
+int
+main (void)
+{
+#define TEST(L1, C1, L2, C2)          \
+  (yylloc).first_line = L1;           \
+  (yylloc).first_column = C1;         \
+  (yylloc).last_line = L2;            \
+  (yylloc).last_column = C2;          \
+  YY_LOCATION_PRINT(stdout, (yylloc));\
+  putchar ('\n');
+
+  TEST(1, 1, 1, 1);
+  TEST(2, 1, 2, 10);
+  TEST(3, 1, 4, 1);
+  TEST(5, 1, 6, 10);
+
+  TEST(7, 2, 0, 2);
+  TEST(8, 0, 8, 0);
+  return 0;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:244: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:244"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:244: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:244"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:244: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:244"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:244: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:244"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:244: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:244"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:244: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:244"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:244: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:244"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:244:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:244"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "1.1
+2.1-9
+3.1-4.0
+5.1-6.9
+7.2
+8.0
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:244: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:244"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_156
+#AT_START_157
+at_fn_group_banner 157 'actions.at:245' \
+  "Location print: glr.c " "                         " 9
+at_xfail=no
+(
+  $as_echo "157. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
+%locations
+%debug
+%skeleton "glr.c"
+
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h> /* getenv */
+static void yyerror ( const char *msg);
+static int yylex (void);
+}
+%%
+exp:;
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (yylloc).first_line = (yylloc).last_line = 1;
+  (yylloc).first_column = (yylloc).last_column = toknum;
+  return res;
+}
+
+int
+main (void)
+{
+#define TEST(L1, C1, L2, C2)          \
+  (yylloc).first_line = L1;           \
+  (yylloc).first_column = C1;         \
+  (yylloc).last_line = L2;            \
+  (yylloc).last_column = C2;          \
+  YY_LOCATION_PRINT(stdout, (yylloc));\
+  putchar ('\n');
+
+  TEST(1, 1, 1, 1);
+  TEST(2, 1, 2, 10);
+  TEST(3, 1, 4, 1);
+  TEST(5, 1, 6, 10);
+
+  TEST(7, 2, 0, 2);
+  TEST(8, 0, 8, 0);
+  return 0;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:245: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:245"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:245: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:245"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:245: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:245"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:245: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:245"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:245: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:245"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:245: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:245"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:245: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:245"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:245:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:245"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "1.1
+2.1-9
+3.1-4.0
+5.1-6.9
+7.2
+8.0
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:245: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:245"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_157
+#AT_START_158
+at_fn_group_banner 158 'actions.at:257' \
+  "Exotic Dollars" "                                 " 9
+at_xfail=no
+(
+  $as_echo "158. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
 %error-verbose
 %debug
 %{
-# include <stdio.h>
-# include <stdlib.h>
-  static void yyerror (const char *msg);
-  static int yylex (void);
+static void yyerror ( const char *msg);
+static int yylex (void);
 # define USE(Var)
 %}
 
@@ -6739,18 +40723,26 @@
 ;
 
 %%
-static int
-yylex (void)
-{
-  return EOF;
-}
-
-static void
-yyerror (const char *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
 int
 main (void)
 {
@@ -6760,97 +40752,361 @@
 
 
 
-$at_traceoff
-echo "actions.at:150: bison -d -v -o input.c input.y"
-echo actions.at:150 >$at_check_line_file
-( $at_traceon; bison -d -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:150: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:305: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -d -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:305"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:305"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/actions.at:305: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y" "actions.at:305"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:305"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:305: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:305"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:305"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:305: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:305"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:305"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:305: bison -d -v -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:305"
+( $at_check_trace; bison -d -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:305"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "actions.at:151: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo actions.at:151 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:151: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/actions.at:306: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:306"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:306"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/actions.at:306: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:306"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:306"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:307:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:307"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "15
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:307"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:307: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:307"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:307"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Make sure that fields after $n or $-n are parsed correctly.  At one
+# point while implementing dashes in symbol names, we were dropping
+# fields after $-n.
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%{
+#include <stdio.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+  typedef struct { int val; } stype;
+# define YYSTYPE stype
+%}
+
+%%
+start: one two { $$.val = $1.val + $2.val; } sum ;
+one: { $$.val = 1; } ;
+two: { $$.val = 2; } ;
+sum: { printf ("%d\n", $0.val + $-1.val + $-2.val); } ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:340: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:340"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:340"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:340: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:340"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:340"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:340: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:340"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:340"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:340: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:340"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:340"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "actions.at:154: \$PREPARSER ./input"
-echo actions.at:154 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "15
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:154: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/actions.at:340: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:340"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:340"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+   { set +x
+$as_echo "$at_srcdir/actions.at:340: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:340"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:340"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  52 ) # 52. actions.at:527: Printers and Destructors :
-    at_setup_line='actions.at:527'
-    at_desc='Printers and Destructors : '
-    $at_quiet $ECHO_N " 52: Printers and Destructors :                   $ECHO_C"
-    at_xfail=no
-    (
-      echo "52. actions.at:527: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/actions.at:340: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:340"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:340"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:341:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:341"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "6
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:341: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:341"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_158
+#AT_START_159
+at_fn_group_banner 159 'actions.at:751' \
+  "Printers and Destructors" "                       " 9
+at_xfail=no
+(
+  $as_echo "159. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -6859,56 +41115,29 @@
 # Be sure to pass all the %directives to this macro to have correct
 # helping macros.  So don't put any directly in the Bison file.
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
-
-
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
+%code requires {
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 
 #define YYINITDEPTH 10
 #define YYMAXDEPTH 10
 #define RANGE(Location) (Location).first_line, (Location).last_line
-%}
+
+/* Display the symbol type Symbol.  */
+#define V(Symbol, Value, Location, Sep) \
+   fprintf (stderr, #Symbol " (%d@%d-%d)" Sep, Value, RANGE(Location))
+}
 
 %error-verbose
 %debug
@@ -6917,15 +41146,15 @@
 
 
 
-
-%{
+%code {
 
 static int yylex (void);
-static void yyerror (const char *msg);
-%}
+static void yyerror ( const char *msg);
+}
 
 
 
+/* FIXME: This %printer isn't actually tested.  */
 %printer
   {
     fprintf (yyoutput, "%d", $$);
@@ -6933,25 +41162,30 @@
   input line thing 'x' 'y'
 
 %destructor
-  { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
   input
 
 %destructor
-  { printf ("Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
   line
 
 %destructor
-  { printf ("Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
   thing
 
 %destructor
-  { printf ("Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'x'
 
 %destructor
-  { printf ("Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'y'
 
+%token END 0
+%destructor
+  { fprintf (stderr, "Freeing token END (%d@%d-%d)\n", $$, RANGE (@$)); }
+  END
+
 %%
 /*
    This grammar is made to exercise error recovery.
@@ -6964,14 +41198,15 @@
   /* Nothing. */
     {
       $$ = 0;
-      printf ("input (%d@%d-%d): /* Nothing */\n", $$, RANGE (@$));
+      V(input, $$, @$, ": /* Nothing */\n");
     }
 | line input /* Right recursive to load the stack so that popping at
-		EOF can	be exercised.  */
+                END can be exercised.  */
     {
       $$ = 2;
-      printf ("input (%d@%d-%d): line (%d@%d-%d) input (%d@%d-%d)\n",
-	      $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2));
+      V(input, $$, @$, ": ");
+      V(line,  $1, @1, " ");
+      V(input, $2, @2, "\n");
     }
 ;
 
@@ -6979,28 +41214,36 @@
   thing thing thing ';'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): thing (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ';' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V(thing, $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(;,     $4, @4, "\n");
     }
 | '(' thing thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(')',   $4, @4, "\n");
     }
 | '(' thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(')',   $3, @3, "\n");
     }
 | '(' error ')'
     {
       $$ = -1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) error (@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      fprintf (stderr, "error (@%d-%d) ", RANGE (@2));
+      V(')',   $3, @3, "\n");
     }
 ;
 
@@ -7008,38 +41251,42 @@
   'x'
     {
       $$ = $1;
-      printf ("thing (%d@%d-%d): 'x' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1));
+      V(thing, $$, @$, ": ");
+      V('x',   $1, @1, "\n");
     }
 ;
 %%
 /* Alias to ARGV[1]. */
-const char *source = 0;
+const char *source = YY_NULL;
 
-static int
-yylex (void)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+static
+int yylex (void)
 {
   static unsigned int counter = 0;
 
   int c = (yylval) = counter++;
   /* As in BASIC, line numbers go from 10 to 10.  */
- (yylloc).first_line = (yylloc).first_column = 10 * c;
+  (yylloc).first_line = (yylloc).first_column = 10 * c;
   (yylloc).last_line = (yylloc).last_column = (yylloc).first_line + 9;
-
-
+  assert (0 <= c && c <= strlen (source));
   if (source[c])
-    printf ("sending: '%c'", source[c]);
+    fprintf (stderr, "sending: '%c'", source[c]);
   else
-    printf ("sending: EOF");
-  printf (" (%d@%d-%d)\n", c, RANGE ((yylloc)));
+    fprintf (stderr, "sending: END");
+  fprintf (stderr, " (%d@%d-%d)\n", c, RANGE ((yylloc)));
   return source[c];
 }
 
-static void
-yyerror (const char *msg)
-{
-  printf ("%d-%d: %s\n", RANGE (yylloc), msg);
-}
 
 int
 main (int argc, const char *argv[])
@@ -7051,9 +41298,9 @@
   status = yyparse ();
   switch (status)
     {
-      case 0: printf ("Successful parse.\n"); break;
-      case 1: printf ("Parsing FAILED.\n"); break;
-      default: printf ("Parsing FAILED (status %d).\n", status); break;
+      case 0: fprintf (stderr, "Successful parse.\n"); break;
+      case 1: fprintf (stderr, "Parsing FAILED.\n"); break;
+      default: fprintf (stderr, "Parsing FAILED (status %d).\n", status); break;
     }
   return status;
 }
@@ -7061,55 +41308,118 @@
 
 
 
-$at_traceoff
-echo "actions.at:527: bison -o input.c input.y"
-echo actions.at:527 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:527: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:751: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:751"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/actions.at:751: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:751"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:751: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:751"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:751: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:751"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:751: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:751"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "actions.at:527: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo actions.at:527 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:527: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/actions.at:751: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:751"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:751: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:751"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
@@ -7118,40 +41428,44 @@
 # I.e., epsilon-reductions, as in "(x)" which ends by reducing
 # an empty "line" nterm.
 # FIXME: This location is not satisfying.  Depend on the lookahead?
-$at_traceoff
-echo "actions.at:527: \$PREPARSER ./input '(x)'"
-echo actions.at:527 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(x)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:751:  \$PREPARSER ./input '(x)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)'" "actions.at:751"
+( $at_check_trace;  $PREPARSER ./input '(x)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:751: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:751"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
 line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (0@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:527: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -7159,41 +41473,45 @@
 # ---------------------------------
 # '(y)' is an error, but can be recovered from.  But what's the location
 # of the error itself ('y'), and of the resulting reduction ('(error)').
-$at_traceoff
-echo "actions.at:527: \$PREPARSER ./input '(y)'"
-echo actions.at:527 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(y)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:751:  \$PREPARSER ./input '(y)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(y)'" "actions.at:751"
+( $at_check_trace;  $PREPARSER ./input '(y)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:751: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:751"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'y' (1@10-19)
-10-19: syntax error, unexpected 'y', expecting 'x'
+10.10-19.18: syntax error, unexpected 'y', expecting 'x'
 Freeing token 'y' (1@10-19)
 sending: ')' (2@20-29)
 line (-1@0-29): '(' (0@0-9) error (@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (-1@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:527: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -7211,22 +41529,33 @@
 #     '(', 'x', ')',
 #     '(', 'x', ')',
 #     'y'
-$at_traceoff
-echo "actions.at:527: \$PREPARSER ./input '(xxxxx)(x)(x)y'"
-echo actions.at:527 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(xxxxx)(x)(x)y' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:751:  \$PREPARSER ./input '(xxxxx)(x)(x)y'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(xxxxx)(x)(x)y'" "actions.at:751"
+( $at_check_trace;  $PREPARSER ./input '(xxxxx)(x)(x)y'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:751: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:751"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: 'x' (2@20-29)
 thing (2@20-29): 'x' (2@20-29)
 sending: 'x' (3@30-39)
-30-39: syntax error, unexpected 'x', expecting ')'
+30.30-39.38: syntax error, unexpected 'x', expecting ')'
 Freeing nterm thing (2@20-29)
 Freeing nterm thing (1@10-19)
 Freeing token 'x' (3@30-39)
@@ -7251,25 +41580,76 @@
 input (2@100-129): line (10@100-129) input (0@129-129)
 input (2@70-129): line (7@70-99) input (2@100-129)
 input (2@0-129): line (-1@0-69) input (2@70-129)
-130-139: syntax error, unexpected 'y', expecting \$end
+130.130-139.138: syntax error, unexpected 'y', expecting END
 Freeing nterm input (2@0-129)
 Freeing token 'y' (13@130-139)
 Parsing FAILED.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "actions.at:527: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+
+# Syntax error caught by the parser where lookahead = END
+# --------------------------------------------------------
+# Load the stack and provoke an error that cannot be caught by the
+# grammar, to check that the stack is cleared.  And make sure the
+# lookahead is freed.
+#
+#     '(', 'x', ')',
+#     '(', 'x', ')',
+#     'x'
+{ set +x
+$as_echo "$at_srcdir/actions.at:751:  \$PREPARSER ./input '(x)(x)x'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)(x)x'" "actions.at:751"
+( $at_check_trace;  $PREPARSER ./input '(x)(x)x'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:751: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:751"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
+sending: 'x' (1@10-19)
+thing (1@10-19): 'x' (1@10-19)
+sending: ')' (2@20-29)
+line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
+sending: '(' (3@30-39)
+sending: 'x' (4@40-49)
+thing (4@40-49): 'x' (4@40-49)
+sending: ')' (5@50-59)
+line (3@30-59): '(' (3@30-39) thing (4@40-49) ')' (5@50-59)
+sending: 'x' (6@60-69)
+thing (6@60-69): 'x' (6@60-69)
+sending: END (7@70-79)
+70.70-79.78: syntax error, unexpected END, expecting 'x'
+Freeing nterm thing (6@60-69)
+Freeing nterm line (3@30-59)
+Freeing nterm line (0@0-29)
+Freeing token END (7@70-79)
+Parsing FAILED.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
 
 
 # Check destruction upon stack overflow
@@ -7277,16 +41657,27 @@
 # Upon stack overflow, all symbols on the stack should be destroyed.
 # Only check for yacc.c.
 
-$at_traceoff
-echo "actions.at:527: \$PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)'"
-echo actions.at:527 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:751:  \$PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)'" "actions.at:751"
+( $at_check_trace;  $PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:751: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:751"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
@@ -7320,7 +41711,7 @@
 sending: 'x' (19@190-199)
 thing (19@190-199): 'x' (19@190-199)
 sending: ')' (20@200-209)
-200-209: memory exhausted
+200.200-209.208: memory exhausted
 Freeing nterm thing (19@190-199)
 Freeing nterm line (15@150-179)
 Freeing nterm line (12@120-149)
@@ -7329,40 +41720,31 @@
 Freeing nterm line (3@30-59)
 Freeing nterm line (0@0-29)
 Parsing FAILED (status 2).
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   2) ;;
-   *) echo "actions.at:527: exit code was $at_status, expected 2"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  53 ) # 53. actions.at:528: Printers and Destructors with union:
-    at_setup_line='actions.at:528'
-    at_desc='Printers and Destructors with union: '
-    $at_quiet $ECHO_N " 53: Printers and Destructors with union:         $ECHO_C"
-    at_xfail=no
-    (
-      echo "53. actions.at:528: testing ..."
-      $at_traceon
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_159
+#AT_START_160
+at_fn_group_banner 160 'actions.at:752' \
+  "Printers and Destructors with union" "            " 9
+at_xfail=no
+(
+  $as_echo "160. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -7371,56 +41753,29 @@
 # Be sure to pass all the %directives to this macro to have correct
 # helping macros.  So don't put any directly in the Bison file.
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
-
-
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
+%code requires {
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 
 #define YYINITDEPTH 10
 #define YYMAXDEPTH 10
 #define RANGE(Location) (Location).first_line, (Location).last_line
-%}
+
+/* Display the symbol type Symbol.  */
+#define V(Symbol, Value, Location, Sep) \
+   fprintf (stderr, #Symbol " (%d@%d-%d)" Sep, Value, RANGE(Location))
+}
 
 %error-verbose
 %debug
@@ -7432,15 +41787,15 @@
   int ival;
 }
 
-
-%{
+%code provides {
 
 static int yylex (void);
-static void yyerror (const char *msg);
-%}
+static void yyerror ( const char *msg);
+}
 
-%type <ival> '(' 'x' 'y' ')' ';' thing line input
+%type <ival> '(' 'x' 'y' ')' ';' thing line input END
 
+/* FIXME: This %printer isn't actually tested.  */
 %printer
   {
     fprintf (yyoutput, "%d", $$);
@@ -7448,25 +41803,30 @@
   input line thing 'x' 'y'
 
 %destructor
-  { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
   input
 
 %destructor
-  { printf ("Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
   line
 
 %destructor
-  { printf ("Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
   thing
 
 %destructor
-  { printf ("Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'x'
 
 %destructor
-  { printf ("Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'y'
 
+%token END 0
+%destructor
+  { fprintf (stderr, "Freeing token END (%d@%d-%d)\n", $$, RANGE (@$)); }
+  END
+
 %%
 /*
    This grammar is made to exercise error recovery.
@@ -7479,14 +41839,15 @@
   /* Nothing. */
     {
       $$ = 0;
-      printf ("input (%d@%d-%d): /* Nothing */\n", $$, RANGE (@$));
+      V(input, $$, @$, ": /* Nothing */\n");
     }
 | line input /* Right recursive to load the stack so that popping at
-		EOF can	be exercised.  */
+                END can be exercised.  */
     {
       $$ = 2;
-      printf ("input (%d@%d-%d): line (%d@%d-%d) input (%d@%d-%d)\n",
-	      $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2));
+      V(input, $$, @$, ": ");
+      V(line,  $1, @1, " ");
+      V(input, $2, @2, "\n");
     }
 ;
 
@@ -7494,28 +41855,36 @@
   thing thing thing ';'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): thing (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ';' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V(thing, $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(;,     $4, @4, "\n");
     }
 | '(' thing thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(')',   $4, @4, "\n");
     }
 | '(' thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(')',   $3, @3, "\n");
     }
 | '(' error ')'
     {
       $$ = -1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) error (@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      fprintf (stderr, "error (@%d-%d) ", RANGE (@2));
+      V(')',   $3, @3, "\n");
     }
 ;
 
@@ -7523,38 +41892,42 @@
   'x'
     {
       $$ = $1;
-      printf ("thing (%d@%d-%d): 'x' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1));
+      V(thing, $$, @$, ": ");
+      V('x',   $1, @1, "\n");
     }
 ;
 %%
 /* Alias to ARGV[1]. */
-const char *source = 0;
+const char *source = YY_NULL;
 
-static int
-yylex (void)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+static
+int yylex (void)
 {
   static unsigned int counter = 0;
 
   int c = (yylval).ival = counter++;
   /* As in BASIC, line numbers go from 10 to 10.  */
- (yylloc).first_line = (yylloc).first_column = 10 * c;
+  (yylloc).first_line = (yylloc).first_column = 10 * c;
   (yylloc).last_line = (yylloc).last_column = (yylloc).first_line + 9;
-
-
+  assert (0 <= c && c <= strlen (source));
   if (source[c])
-    printf ("sending: '%c'", source[c]);
+    fprintf (stderr, "sending: '%c'", source[c]);
   else
-    printf ("sending: EOF");
-  printf (" (%d@%d-%d)\n", c, RANGE ((yylloc)));
+    fprintf (stderr, "sending: END");
+  fprintf (stderr, " (%d@%d-%d)\n", c, RANGE ((yylloc)));
   return source[c];
 }
 
-static void
-yyerror (const char *msg)
-{
-  printf ("%d-%d: %s\n", RANGE (yylloc), msg);
-}
 
 int
 main (int argc, const char *argv[])
@@ -7566,9 +41939,9 @@
   status = yyparse ();
   switch (status)
     {
-      case 0: printf ("Successful parse.\n"); break;
-      case 1: printf ("Parsing FAILED.\n"); break;
-      default: printf ("Parsing FAILED (status %d).\n", status); break;
+      case 0: fprintf (stderr, "Successful parse.\n"); break;
+      case 1: fprintf (stderr, "Parsing FAILED.\n"); break;
+      default: fprintf (stderr, "Parsing FAILED (status %d).\n", status); break;
     }
   return status;
 }
@@ -7576,55 +41949,118 @@
 
 
 
-$at_traceoff
-echo "actions.at:528: bison -o input.c input.y"
-echo actions.at:528 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:528: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:752: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:752"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/actions.at:752: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:752"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:752: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:752"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:752: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:752"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:752: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:752"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "actions.at:528: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo actions.at:528 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:528: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/actions.at:752: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:752"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:752: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:752"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
@@ -7633,40 +42069,44 @@
 # I.e., epsilon-reductions, as in "(x)" which ends by reducing
 # an empty "line" nterm.
 # FIXME: This location is not satisfying.  Depend on the lookahead?
-$at_traceoff
-echo "actions.at:528: \$PREPARSER ./input '(x)'"
-echo actions.at:528 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(x)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:752:  \$PREPARSER ./input '(x)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)'" "actions.at:752"
+( $at_check_trace;  $PREPARSER ./input '(x)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:752: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:752"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
 line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (0@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:528: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -7674,41 +42114,45 @@
 # ---------------------------------
 # '(y)' is an error, but can be recovered from.  But what's the location
 # of the error itself ('y'), and of the resulting reduction ('(error)').
-$at_traceoff
-echo "actions.at:528: \$PREPARSER ./input '(y)'"
-echo actions.at:528 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(y)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:752:  \$PREPARSER ./input '(y)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(y)'" "actions.at:752"
+( $at_check_trace;  $PREPARSER ./input '(y)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:752: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:752"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'y' (1@10-19)
-10-19: syntax error, unexpected 'y', expecting 'x'
+10.10-19.18: syntax error, unexpected 'y', expecting 'x'
 Freeing token 'y' (1@10-19)
 sending: ')' (2@20-29)
 line (-1@0-29): '(' (0@0-9) error (@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (-1@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:528: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -7726,22 +42170,33 @@
 #     '(', 'x', ')',
 #     '(', 'x', ')',
 #     'y'
-$at_traceoff
-echo "actions.at:528: \$PREPARSER ./input '(xxxxx)(x)(x)y'"
-echo actions.at:528 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(xxxxx)(x)(x)y' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:752:  \$PREPARSER ./input '(xxxxx)(x)(x)y'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(xxxxx)(x)(x)y'" "actions.at:752"
+( $at_check_trace;  $PREPARSER ./input '(xxxxx)(x)(x)y'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:752: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:752"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: 'x' (2@20-29)
 thing (2@20-29): 'x' (2@20-29)
 sending: 'x' (3@30-39)
-30-39: syntax error, unexpected 'x', expecting ')'
+30.30-39.38: syntax error, unexpected 'x', expecting ')'
 Freeing nterm thing (2@20-29)
 Freeing nterm thing (1@10-19)
 Freeing token 'x' (3@30-39)
@@ -7766,25 +42221,76 @@
 input (2@100-129): line (10@100-129) input (0@129-129)
 input (2@70-129): line (7@70-99) input (2@100-129)
 input (2@0-129): line (-1@0-69) input (2@70-129)
-130-139: syntax error, unexpected 'y', expecting \$end
+130.130-139.138: syntax error, unexpected 'y', expecting END
 Freeing nterm input (2@0-129)
 Freeing token 'y' (13@130-139)
 Parsing FAILED.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "actions.at:528: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+
+# Syntax error caught by the parser where lookahead = END
+# --------------------------------------------------------
+# Load the stack and provoke an error that cannot be caught by the
+# grammar, to check that the stack is cleared.  And make sure the
+# lookahead is freed.
+#
+#     '(', 'x', ')',
+#     '(', 'x', ')',
+#     'x'
+{ set +x
+$as_echo "$at_srcdir/actions.at:752:  \$PREPARSER ./input '(x)(x)x'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)(x)x'" "actions.at:752"
+( $at_check_trace;  $PREPARSER ./input '(x)(x)x'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:752: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:752"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
+sending: 'x' (1@10-19)
+thing (1@10-19): 'x' (1@10-19)
+sending: ')' (2@20-29)
+line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
+sending: '(' (3@30-39)
+sending: 'x' (4@40-49)
+thing (4@40-49): 'x' (4@40-49)
+sending: ')' (5@50-59)
+line (3@30-59): '(' (3@30-39) thing (4@40-49) ')' (5@50-59)
+sending: 'x' (6@60-69)
+thing (6@60-69): 'x' (6@60-69)
+sending: END (7@70-79)
+70.70-79.78: syntax error, unexpected END, expecting 'x'
+Freeing nterm thing (6@60-69)
+Freeing nterm line (3@30-59)
+Freeing nterm line (0@0-29)
+Freeing token END (7@70-79)
+Parsing FAILED.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
 
 
 # Check destruction upon stack overflow
@@ -7792,16 +42298,27 @@
 # Upon stack overflow, all symbols on the stack should be destroyed.
 # Only check for yacc.c.
 
-$at_traceoff
-echo "actions.at:528: \$PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)'"
-echo actions.at:528 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:752:  \$PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)'" "actions.at:752"
+( $at_check_trace;  $PREPARSER ./input '(x)(x)(x)(x)(x)(x)(x)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:752: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:752"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
@@ -7835,7 +42352,7 @@
 sending: 'x' (19@190-199)
 thing (19@190-199): 'x' (19@190-199)
 sending: ')' (20@200-209)
-200-209: memory exhausted
+200.200-209.208: memory exhausted
 Freeing nterm thing (19@190-199)
 Freeing nterm line (15@150-179)
 Freeing nterm line (12@120-149)
@@ -7844,40 +42361,31 @@
 Freeing nterm line (3@30-59)
 Freeing nterm line (0@0-29)
 Parsing FAILED (status 2).
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   2) ;;
-   *) echo "actions.at:528: exit code was $at_status, expected 2"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  54 ) # 54. actions.at:533: Printers and Destructors : %defines %skeleton "lalr1.cc"
-    at_setup_line='actions.at:533'
-    at_desc='Printers and Destructors : %defines %skeleton "lalr1.cc"'
-    $at_quiet $ECHO_N " 54: Printers and Destructors : %defines %skeleton "lalr1.cc"$ECHO_C"
-    at_xfail=no
-    (
-      echo "54. actions.at:533: testing ..."
-      $at_traceon
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_160
+#AT_START_161
+at_fn_group_banner 161 'actions.at:754' \
+  "Printers and Destructors: %defines %skeleton \"lalr1.cc\"" "" 9
+at_xfail=no
+(
+  $as_echo "161. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -7886,56 +42394,29 @@
 # Be sure to pass all the %directives to this macro to have correct
 # helping macros.  So don't put any directly in the Bison file.
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
-
-
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
+%code requires {
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 
 #define YYINITDEPTH 10
 #define YYMAXDEPTH 10
 #define RANGE(Location) (Location).begin.line, (Location).end.line
-%}
+
+/* Display the symbol type Symbol.  */
+#define V(Symbol, Value, Location, Sep) \
+   fprintf (stderr, #Symbol " (%d@%d-%d)" Sep, Value, RANGE(Location))
+}
 
 %error-verbose
 %debug
@@ -7943,17 +42424,16 @@
 %locations
 %defines %skeleton "lalr1.cc"
 
-%define "global_tokens_and_yystype"
-
-%{
+%define global_tokens_and_yystype
+%code {
 typedef yy::location YYLTYPE;
-                #define YYSTYPE int
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+static int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
 
-%}
+}
 
 
 
+/* FIXME: This %printer isn't actually tested.  */
 %printer
   {
     debug_stream () << $$;;
@@ -7961,25 +42441,30 @@
   input line thing 'x' 'y'
 
 %destructor
-  { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
   input
 
 %destructor
-  { printf ("Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
   line
 
 %destructor
-  { printf ("Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
   thing
 
 %destructor
-  { printf ("Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'x'
 
 %destructor
-  { printf ("Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'y'
 
+%token END 0
+%destructor
+  { fprintf (stderr, "Freeing token END (%d@%d-%d)\n", $$, RANGE (@$)); }
+  END
+
 %%
 /*
    This grammar is made to exercise error recovery.
@@ -7992,14 +42477,15 @@
   /* Nothing. */
     {
       $$ = 0;
-      printf ("input (%d@%d-%d): /* Nothing */\n", $$, RANGE (@$));
+      V(input, $$, @$, ": /* Nothing */\n");
     }
 | line input /* Right recursive to load the stack so that popping at
-		EOF can	be exercised.  */
+                END can be exercised.  */
     {
       $$ = 2;
-      printf ("input (%d@%d-%d): line (%d@%d-%d) input (%d@%d-%d)\n",
-	      $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2));
+      V(input, $$, @$, ": ");
+      V(line,  $1, @1, " ");
+      V(input, $2, @2, "\n");
     }
 ;
 
@@ -8007,28 +42493,36 @@
   thing thing thing ';'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): thing (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ';' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V(thing, $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(;,     $4, @4, "\n");
     }
 | '(' thing thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(')',   $4, @4, "\n");
     }
 | '(' thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(')',   $3, @3, "\n");
     }
 | '(' error ')'
     {
       $$ = -1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) error (@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      fprintf (stderr, "error (@%d-%d) ", RANGE (@2));
+      V(')',   $3, @3, "\n");
     }
 ;
 
@@ -8036,40 +42530,39 @@
   'x'
     {
       $$ = $1;
-      printf ("thing (%d@%d-%d): 'x' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1));
+      V(thing, $$, @$, ": ");
+      V('x',   $1, @1, "\n");
     }
 ;
 %%
 /* Alias to ARGV[1]. */
-const char *source = 0;
+const char *source = YY_NULL;
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+
+static
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
 {
   static unsigned int counter = 0;
 
   int c = (*lvalp) = counter++;
   /* As in BASIC, line numbers go from 10 to 10.  */
- (*llocp).begin.line = (*llocp).begin.column = 10 * c;
+  (*llocp).begin.line = (*llocp).begin.column = 10 * c;
   (*llocp).end.line = (*llocp).end.column = (*llocp).begin.line + 9;
-
-
+  assert (0 <= c && c <= strlen (source));
   if (source[c])
-    printf ("sending: '%c'", source[c]);
+    fprintf (stderr, "sending: '%c'", source[c]);
   else
-    printf ("sending: EOF");
-  printf (" (%d@%d-%d)\n", c, RANGE ((*llocp)));
+    fprintf (stderr, "sending: END");
+  fprintf (stderr, " (%d@%d-%d)\n", c, RANGE ((*llocp)));
   return source[c];
 }
-
-/* A C++ error reporting function. */
-void
-yy::parser::error (const location& l, const std::string& m)
-{
-  printf ("%d-%d: %s\n", RANGE (l), m.c_str());
-}
-
 static bool yydebug;
 int
 yyparse ()
@@ -8090,9 +42583,9 @@
   status = yyparse ();
   switch (status)
     {
-      case 0: printf ("Successful parse.\n"); break;
-      case 1: printf ("Parsing FAILED.\n"); break;
-      default: printf ("Parsing FAILED (status %d).\n", status); break;
+      case 0: fprintf (stderr, "Successful parse.\n"); break;
+      case 1: fprintf (stderr, "Parsing FAILED.\n"); break;
+      default: fprintf (stderr, "Parsing FAILED (status %d).\n", status); break;
     }
   return status;
 }
@@ -8100,81 +42593,119 @@
 
 
 
-$at_traceoff
-echo "actions.at:533: bison -o input.cc input.y"
-echo actions.at:533 >$at_check_line_file
-( $at_traceon; bison -o input.cc input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:533: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:754: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:754"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/actions.at:754: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "actions.at:754"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:754: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:754"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:754: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:754"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/actions.at:754: bison -o input.cc input.y"
+at_fn_check_prepare_trace "actions.at:754"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "actions.at:533: \$BISON_CXX_WORKS"
-echo actions.at:533 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:533: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:754: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "actions.at:754"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/actions.at:754: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "actions.at:754"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "actions.at:533: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
-echo actions.at:533 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:533: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -8183,40 +42714,44 @@
 # I.e., epsilon-reductions, as in "(x)" which ends by reducing
 # an empty "line" nterm.
 # FIXME: This location is not satisfying.  Depend on the lookahead?
-$at_traceoff
-echo "actions.at:533: \$PREPARSER ./input '(x)'"
-echo actions.at:533 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(x)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:754:  \$PREPARSER ./input '(x)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)'" "actions.at:754"
+( $at_check_trace;  $PREPARSER ./input '(x)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:754: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:754"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
 line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (0@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:533: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -8224,41 +42759,45 @@
 # ---------------------------------
 # '(y)' is an error, but can be recovered from.  But what's the location
 # of the error itself ('y'), and of the resulting reduction ('(error)').
-$at_traceoff
-echo "actions.at:533: \$PREPARSER ./input '(y)'"
-echo actions.at:533 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(y)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:754:  \$PREPARSER ./input '(y)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(y)'" "actions.at:754"
+( $at_check_trace;  $PREPARSER ./input '(y)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:754: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:754"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'y' (1@10-19)
-10-19: syntax error, unexpected 'y', expecting 'x'
+10.10-19.18: syntax error, unexpected 'y', expecting 'x'
 Freeing token 'y' (1@10-19)
 sending: ')' (2@20-29)
 line (-1@0-29): '(' (0@0-9) error (@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (-1@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:533: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -8276,22 +42815,33 @@
 #     '(', 'x', ')',
 #     '(', 'x', ')',
 #     'y'
-$at_traceoff
-echo "actions.at:533: \$PREPARSER ./input '(xxxxx)(x)(x)y'"
-echo actions.at:533 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(xxxxx)(x)(x)y' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:754:  \$PREPARSER ./input '(xxxxx)(x)(x)y'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(xxxxx)(x)(x)y'" "actions.at:754"
+( $at_check_trace;  $PREPARSER ./input '(xxxxx)(x)(x)y'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:754: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:754"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: 'x' (2@20-29)
 thing (2@20-29): 'x' (2@20-29)
 sending: 'x' (3@30-39)
-30-39: syntax error, unexpected 'x', expecting ')'
+30.30-39.38: syntax error, unexpected 'x', expecting ')'
 Freeing nterm thing (2@20-29)
 Freeing nterm thing (1@10-19)
 Freeing token 'x' (3@30-39)
@@ -8316,25 +42866,76 @@
 input (2@100-129): line (10@100-129) input (0@129-129)
 input (2@70-129): line (7@70-99) input (2@100-129)
 input (2@0-129): line (-1@0-69) input (2@70-129)
-130-139: syntax error, unexpected 'y', expecting \$end
+130.130-139.138: syntax error, unexpected 'y', expecting END
 Freeing nterm input (2@0-129)
 Freeing token 'y' (13@130-139)
 Parsing FAILED.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "actions.at:533: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+
+# Syntax error caught by the parser where lookahead = END
+# --------------------------------------------------------
+# Load the stack and provoke an error that cannot be caught by the
+# grammar, to check that the stack is cleared.  And make sure the
+# lookahead is freed.
+#
+#     '(', 'x', ')',
+#     '(', 'x', ')',
+#     'x'
+{ set +x
+$as_echo "$at_srcdir/actions.at:754:  \$PREPARSER ./input '(x)(x)x'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)(x)x'" "actions.at:754"
+( $at_check_trace;  $PREPARSER ./input '(x)(x)x'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:754: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:754"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
+sending: 'x' (1@10-19)
+thing (1@10-19): 'x' (1@10-19)
+sending: ')' (2@20-29)
+line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
+sending: '(' (3@30-39)
+sending: 'x' (4@40-49)
+thing (4@40-49): 'x' (4@40-49)
+sending: ')' (5@50-59)
+line (3@30-59): '(' (3@30-39) thing (4@40-49) ')' (5@50-59)
+sending: 'x' (6@60-69)
+thing (6@60-69): 'x' (6@60-69)
+sending: END (7@70-79)
+70.70-79.78: syntax error, unexpected END, expecting 'x'
+Freeing nterm thing (6@60-69)
+Freeing nterm line (3@30-59)
+Freeing nterm line (0@0-29)
+Freeing token END (7@70-79)
+Parsing FAILED.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:754"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
 
 
 # Check destruction upon stack overflow
@@ -8345,20 +42946,19 @@
 
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  55 ) # 55. actions.at:534: Printers and Destructors with union: %defines %skeleton "lalr1.cc"
-    at_setup_line='actions.at:534'
-    at_desc='Printers and Destructors with union: %defines %skeleton "lalr1.cc"'
-    $at_quiet $ECHO_N " 55: Printers and Destructors with union: %defines %skeleton "lalr1.cc"$ECHO_C"
-    at_xfail=no
-    (
-      echo "55. actions.at:534: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_161
+#AT_START_162
+at_fn_group_banner 162 'actions.at:755' \
+  "Printers and Destructors with union: %defines %skeleton \"lalr1.cc\"" "" 9
+at_xfail=no
+(
+  $as_echo "162. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -8367,56 +42967,29 @@
 # Be sure to pass all the %directives to this macro to have correct
 # helping macros.  So don't put any directly in the Bison file.
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
-
-
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
+%code requires {
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 
 #define YYINITDEPTH 10
 #define YYMAXDEPTH 10
 #define RANGE(Location) (Location).begin.line, (Location).end.line
-%}
+
+/* Display the symbol type Symbol.  */
+#define V(Symbol, Value, Location, Sep) \
+   fprintf (stderr, #Symbol " (%d@%d-%d)" Sep, Value, RANGE(Location))
+}
 
 %error-verbose
 %debug
@@ -8427,17 +43000,16 @@
 {
   int ival;
 }
-%define "global_tokens_and_yystype"
-
-%{
+%define global_tokens_and_yystype
+%code provides {
 typedef yy::location YYLTYPE;
+static int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
 
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
 
-%}
+%type <ival> '(' 'x' 'y' ')' ';' thing line input END
 
-%type <ival> '(' 'x' 'y' ')' ';' thing line input
-
+/* FIXME: This %printer isn't actually tested.  */
 %printer
   {
     debug_stream () << $$;;
@@ -8445,25 +43017,30 @@
   input line thing 'x' 'y'
 
 %destructor
-  { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
   input
 
 %destructor
-  { printf ("Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
   line
 
 %destructor
-  { printf ("Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
   thing
 
 %destructor
-  { printf ("Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'x'
 
 %destructor
-  { printf ("Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'y'
 
+%token END 0
+%destructor
+  { fprintf (stderr, "Freeing token END (%d@%d-%d)\n", $$, RANGE (@$)); }
+  END
+
 %%
 /*
    This grammar is made to exercise error recovery.
@@ -8476,14 +43053,15 @@
   /* Nothing. */
     {
       $$ = 0;
-      printf ("input (%d@%d-%d): /* Nothing */\n", $$, RANGE (@$));
+      V(input, $$, @$, ": /* Nothing */\n");
     }
 | line input /* Right recursive to load the stack so that popping at
-		EOF can	be exercised.  */
+                END can be exercised.  */
     {
       $$ = 2;
-      printf ("input (%d@%d-%d): line (%d@%d-%d) input (%d@%d-%d)\n",
-	      $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2));
+      V(input, $$, @$, ": ");
+      V(line,  $1, @1, " ");
+      V(input, $2, @2, "\n");
     }
 ;
 
@@ -8491,28 +43069,36 @@
   thing thing thing ';'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): thing (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ';' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V(thing, $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(;,     $4, @4, "\n");
     }
 | '(' thing thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(')',   $4, @4, "\n");
     }
 | '(' thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(')',   $3, @3, "\n");
     }
 | '(' error ')'
     {
       $$ = -1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) error (@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      fprintf (stderr, "error (@%d-%d) ", RANGE (@2));
+      V(')',   $3, @3, "\n");
     }
 ;
 
@@ -8520,40 +43106,39 @@
   'x'
     {
       $$ = $1;
-      printf ("thing (%d@%d-%d): 'x' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1));
+      V(thing, $$, @$, ": ");
+      V('x',   $1, @1, "\n");
     }
 ;
 %%
 /* Alias to ARGV[1]. */
-const char *source = 0;
+const char *source = YY_NULL;
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+
+static
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
 {
   static unsigned int counter = 0;
 
   int c = (*lvalp).ival = counter++;
   /* As in BASIC, line numbers go from 10 to 10.  */
- (*llocp).begin.line = (*llocp).begin.column = 10 * c;
+  (*llocp).begin.line = (*llocp).begin.column = 10 * c;
   (*llocp).end.line = (*llocp).end.column = (*llocp).begin.line + 9;
-
-
+  assert (0 <= c && c <= strlen (source));
   if (source[c])
-    printf ("sending: '%c'", source[c]);
+    fprintf (stderr, "sending: '%c'", source[c]);
   else
-    printf ("sending: EOF");
-  printf (" (%d@%d-%d)\n", c, RANGE ((*llocp)));
+    fprintf (stderr, "sending: END");
+  fprintf (stderr, " (%d@%d-%d)\n", c, RANGE ((*llocp)));
   return source[c];
 }
-
-/* A C++ error reporting function. */
-void
-yy::parser::error (const location& l, const std::string& m)
-{
-  printf ("%d-%d: %s\n", RANGE (l), m.c_str());
-}
-
 static bool yydebug;
 int
 yyparse ()
@@ -8574,9 +43159,9 @@
   status = yyparse ();
   switch (status)
     {
-      case 0: printf ("Successful parse.\n"); break;
-      case 1: printf ("Parsing FAILED.\n"); break;
-      default: printf ("Parsing FAILED (status %d).\n", status); break;
+      case 0: fprintf (stderr, "Successful parse.\n"); break;
+      case 1: fprintf (stderr, "Parsing FAILED.\n"); break;
+      default: fprintf (stderr, "Parsing FAILED (status %d).\n", status); break;
     }
   return status;
 }
@@ -8584,81 +43169,119 @@
 
 
 
-$at_traceoff
-echo "actions.at:534: bison -o input.cc input.y"
-echo actions.at:534 >$at_check_line_file
-( $at_traceon; bison -o input.cc input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:534: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:755: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:755"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/actions.at:755: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "actions.at:755"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:755: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:755"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:755: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:755"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/actions.at:755: bison -o input.cc input.y"
+at_fn_check_prepare_trace "actions.at:755"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "actions.at:534: \$BISON_CXX_WORKS"
-echo actions.at:534 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:534: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:755: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "actions.at:755"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/actions.at:755: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "actions.at:755"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "actions.at:534: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
-echo actions.at:534 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:534: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -8667,40 +43290,44 @@
 # I.e., epsilon-reductions, as in "(x)" which ends by reducing
 # an empty "line" nterm.
 # FIXME: This location is not satisfying.  Depend on the lookahead?
-$at_traceoff
-echo "actions.at:534: \$PREPARSER ./input '(x)'"
-echo actions.at:534 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(x)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:755:  \$PREPARSER ./input '(x)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)'" "actions.at:755"
+( $at_check_trace;  $PREPARSER ./input '(x)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:755: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:755"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
 line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (0@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:534: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -8708,41 +43335,45 @@
 # ---------------------------------
 # '(y)' is an error, but can be recovered from.  But what's the location
 # of the error itself ('y'), and of the resulting reduction ('(error)').
-$at_traceoff
-echo "actions.at:534: \$PREPARSER ./input '(y)'"
-echo actions.at:534 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(y)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:755:  \$PREPARSER ./input '(y)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(y)'" "actions.at:755"
+( $at_check_trace;  $PREPARSER ./input '(y)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:755: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:755"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'y' (1@10-19)
-10-19: syntax error, unexpected 'y', expecting 'x'
+10.10-19.18: syntax error, unexpected 'y', expecting 'x'
 Freeing token 'y' (1@10-19)
 sending: ')' (2@20-29)
 line (-1@0-29): '(' (0@0-9) error (@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (-1@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:534: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -8760,22 +43391,33 @@
 #     '(', 'x', ')',
 #     '(', 'x', ')',
 #     'y'
-$at_traceoff
-echo "actions.at:534: \$PREPARSER ./input '(xxxxx)(x)(x)y'"
-echo actions.at:534 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(xxxxx)(x)(x)y' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:755:  \$PREPARSER ./input '(xxxxx)(x)(x)y'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(xxxxx)(x)(x)y'" "actions.at:755"
+( $at_check_trace;  $PREPARSER ./input '(xxxxx)(x)(x)y'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:755: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:755"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: 'x' (2@20-29)
 thing (2@20-29): 'x' (2@20-29)
 sending: 'x' (3@30-39)
-30-39: syntax error, unexpected 'x', expecting ')'
+30.30-39.38: syntax error, unexpected 'x', expecting ')'
 Freeing nterm thing (2@20-29)
 Freeing nterm thing (1@10-19)
 Freeing token 'x' (3@30-39)
@@ -8800,25 +43442,76 @@
 input (2@100-129): line (10@100-129) input (0@129-129)
 input (2@70-129): line (7@70-99) input (2@100-129)
 input (2@0-129): line (-1@0-69) input (2@70-129)
-130-139: syntax error, unexpected 'y', expecting \$end
+130.130-139.138: syntax error, unexpected 'y', expecting END
 Freeing nterm input (2@0-129)
 Freeing token 'y' (13@130-139)
 Parsing FAILED.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "actions.at:534: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+
+# Syntax error caught by the parser where lookahead = END
+# --------------------------------------------------------
+# Load the stack and provoke an error that cannot be caught by the
+# grammar, to check that the stack is cleared.  And make sure the
+# lookahead is freed.
+#
+#     '(', 'x', ')',
+#     '(', 'x', ')',
+#     'x'
+{ set +x
+$as_echo "$at_srcdir/actions.at:755:  \$PREPARSER ./input '(x)(x)x'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)(x)x'" "actions.at:755"
+( $at_check_trace;  $PREPARSER ./input '(x)(x)x'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:755: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:755"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
+sending: 'x' (1@10-19)
+thing (1@10-19): 'x' (1@10-19)
+sending: ')' (2@20-29)
+line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
+sending: '(' (3@30-39)
+sending: 'x' (4@40-49)
+thing (4@40-49): 'x' (4@40-49)
+sending: ')' (5@50-59)
+line (3@30-59): '(' (3@30-39) thing (4@40-49) ')' (5@50-59)
+sending: 'x' (6@60-69)
+thing (6@60-69): 'x' (6@60-69)
+sending: END (7@70-79)
+70.70-79.78: syntax error, unexpected END, expecting 'x'
+Freeing nterm thing (6@60-69)
+Freeing nterm line (3@30-59)
+Freeing nterm line (0@0-29)
+Freeing token END (7@70-79)
+Parsing FAILED.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:755"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
 
 
 # Check destruction upon stack overflow
@@ -8829,20 +43522,19 @@
 
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  56 ) # 56. actions.at:536: Printers and Destructors : %glr-parser
-    at_setup_line='actions.at:536'
-    at_desc='Printers and Destructors : %glr-parser'
-    $at_quiet $ECHO_N " 56: Printers and Destructors : %glr-parser       $ECHO_C"
-    at_xfail=no
-    (
-      echo "56. actions.at:536: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_162
+#AT_START_163
+at_fn_group_banner 163 'actions.at:757' \
+  "Printers and Destructors: %glr-parser" "          " 9
+at_xfail=no
+(
+  $as_echo "163. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -8851,56 +43543,29 @@
 # Be sure to pass all the %directives to this macro to have correct
 # helping macros.  So don't put any directly in the Bison file.
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
-
-
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
+%code requires {
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 
 #define YYINITDEPTH 10
 #define YYMAXDEPTH 10
 #define RANGE(Location) (Location).first_line, (Location).last_line
-%}
+
+/* Display the symbol type Symbol.  */
+#define V(Symbol, Value, Location, Sep) \
+   fprintf (stderr, #Symbol " (%d@%d-%d)" Sep, Value, RANGE(Location))
+}
 
 %error-verbose
 %debug
@@ -8909,15 +43574,15 @@
 %glr-parser
 
 
-
-%{
+%code {
 
 static int yylex (void);
-static void yyerror (const char *msg);
-%}
+static void yyerror ( const char *msg);
+}
 
 
 
+/* FIXME: This %printer isn't actually tested.  */
 %printer
   {
     fprintf (yyoutput, "%d", $$);
@@ -8925,25 +43590,30 @@
   input line thing 'x' 'y'
 
 %destructor
-  { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
   input
 
 %destructor
-  { printf ("Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
   line
 
 %destructor
-  { printf ("Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
   thing
 
 %destructor
-  { printf ("Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'x'
 
 %destructor
-  { printf ("Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'y'
 
+%token END 0
+%destructor
+  { fprintf (stderr, "Freeing token END (%d@%d-%d)\n", $$, RANGE (@$)); }
+  END
+
 %%
 /*
    This grammar is made to exercise error recovery.
@@ -8956,14 +43626,15 @@
   /* Nothing. */
     {
       $$ = 0;
-      printf ("input (%d@%d-%d): /* Nothing */\n", $$, RANGE (@$));
+      V(input, $$, @$, ": /* Nothing */\n");
     }
 | line input /* Right recursive to load the stack so that popping at
-		EOF can	be exercised.  */
+                END can be exercised.  */
     {
       $$ = 2;
-      printf ("input (%d@%d-%d): line (%d@%d-%d) input (%d@%d-%d)\n",
-	      $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2));
+      V(input, $$, @$, ": ");
+      V(line,  $1, @1, " ");
+      V(input, $2, @2, "\n");
     }
 ;
 
@@ -8971,28 +43642,36 @@
   thing thing thing ';'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): thing (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ';' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V(thing, $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(;,     $4, @4, "\n");
     }
 | '(' thing thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(')',   $4, @4, "\n");
     }
 | '(' thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(')',   $3, @3, "\n");
     }
 | '(' error ')'
     {
       $$ = -1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) error (@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      fprintf (stderr, "error (@%d-%d) ", RANGE (@2));
+      V(')',   $3, @3, "\n");
     }
 ;
 
@@ -9000,38 +43679,42 @@
   'x'
     {
       $$ = $1;
-      printf ("thing (%d@%d-%d): 'x' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1));
+      V(thing, $$, @$, ": ");
+      V('x',   $1, @1, "\n");
     }
 ;
 %%
 /* Alias to ARGV[1]. */
-const char *source = 0;
+const char *source = YY_NULL;
 
-static int
-yylex (void)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+static
+int yylex (void)
 {
   static unsigned int counter = 0;
 
   int c = (yylval) = counter++;
   /* As in BASIC, line numbers go from 10 to 10.  */
- (yylloc).first_line = (yylloc).first_column = 10 * c;
+  (yylloc).first_line = (yylloc).first_column = 10 * c;
   (yylloc).last_line = (yylloc).last_column = (yylloc).first_line + 9;
-
-
+  assert (0 <= c && c <= strlen (source));
   if (source[c])
-    printf ("sending: '%c'", source[c]);
+    fprintf (stderr, "sending: '%c'", source[c]);
   else
-    printf ("sending: EOF");
-  printf (" (%d@%d-%d)\n", c, RANGE ((yylloc)));
+    fprintf (stderr, "sending: END");
+  fprintf (stderr, " (%d@%d-%d)\n", c, RANGE ((yylloc)));
   return source[c];
 }
 
-static void
-yyerror (const char *msg)
-{
-  printf ("%d-%d: %s\n", RANGE (yylloc), msg);
-}
 
 int
 main (int argc, const char *argv[])
@@ -9043,9 +43726,9 @@
   status = yyparse ();
   switch (status)
     {
-      case 0: printf ("Successful parse.\n"); break;
-      case 1: printf ("Parsing FAILED.\n"); break;
-      default: printf ("Parsing FAILED (status %d).\n", status); break;
+      case 0: fprintf (stderr, "Successful parse.\n"); break;
+      case 1: fprintf (stderr, "Parsing FAILED.\n"); break;
+      default: fprintf (stderr, "Parsing FAILED (status %d).\n", status); break;
     }
   return status;
 }
@@ -9053,55 +43736,118 @@
 
 
 
-$at_traceoff
-echo "actions.at:536: bison -o input.c input.y"
-echo actions.at:536 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:536: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:757: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:757"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/actions.at:757: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:757"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:757: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:757"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:757: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:757"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:757: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:757"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "actions.at:536: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo actions.at:536 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:536: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/actions.at:757: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:757"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:757: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:757"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
@@ -9110,40 +43856,44 @@
 # I.e., epsilon-reductions, as in "(x)" which ends by reducing
 # an empty "line" nterm.
 # FIXME: This location is not satisfying.  Depend on the lookahead?
-$at_traceoff
-echo "actions.at:536: \$PREPARSER ./input '(x)'"
-echo actions.at:536 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(x)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:757:  \$PREPARSER ./input '(x)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)'" "actions.at:757"
+( $at_check_trace;  $PREPARSER ./input '(x)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:757: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:757"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
 line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (0@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:536: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -9151,41 +43901,45 @@
 # ---------------------------------
 # '(y)' is an error, but can be recovered from.  But what's the location
 # of the error itself ('y'), and of the resulting reduction ('(error)').
-$at_traceoff
-echo "actions.at:536: \$PREPARSER ./input '(y)'"
-echo actions.at:536 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(y)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:757:  \$PREPARSER ./input '(y)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(y)'" "actions.at:757"
+( $at_check_trace;  $PREPARSER ./input '(y)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:757: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:757"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'y' (1@10-19)
-10-19: syntax error, unexpected 'y', expecting 'x'
+10.10-19.18: syntax error, unexpected 'y', expecting 'x'
 Freeing token 'y' (1@10-19)
 sending: ')' (2@20-29)
 line (-1@0-29): '(' (0@0-9) error (@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (-1@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:536: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -9203,22 +43957,33 @@
 #     '(', 'x', ')',
 #     '(', 'x', ')',
 #     'y'
-$at_traceoff
-echo "actions.at:536: \$PREPARSER ./input '(xxxxx)(x)(x)y'"
-echo actions.at:536 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(xxxxx)(x)(x)y' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:757:  \$PREPARSER ./input '(xxxxx)(x)(x)y'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(xxxxx)(x)(x)y'" "actions.at:757"
+( $at_check_trace;  $PREPARSER ./input '(xxxxx)(x)(x)y'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:757: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:757"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: 'x' (2@20-29)
 thing (2@20-29): 'x' (2@20-29)
 sending: 'x' (3@30-39)
-30-39: syntax error, unexpected 'x', expecting ')'
+30.30-39.38: syntax error, unexpected 'x', expecting ')'
 Freeing nterm thing (2@20-29)
 Freeing nterm thing (1@10-19)
 Freeing token 'x' (3@30-39)
@@ -9243,25 +44008,76 @@
 input (2@100-129): line (10@100-129) input (0@129-129)
 input (2@70-129): line (7@70-99) input (2@100-129)
 input (2@0-129): line (-1@0-69) input (2@70-129)
-130-139: syntax error, unexpected 'y', expecting \$end
+130.130-139.138: syntax error, unexpected 'y', expecting END
 Freeing nterm input (2@0-129)
 Freeing token 'y' (13@130-139)
 Parsing FAILED.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "actions.at:536: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+
+# Syntax error caught by the parser where lookahead = END
+# --------------------------------------------------------
+# Load the stack and provoke an error that cannot be caught by the
+# grammar, to check that the stack is cleared.  And make sure the
+# lookahead is freed.
+#
+#     '(', 'x', ')',
+#     '(', 'x', ')',
+#     'x'
+{ set +x
+$as_echo "$at_srcdir/actions.at:757:  \$PREPARSER ./input '(x)(x)x'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)(x)x'" "actions.at:757"
+( $at_check_trace;  $PREPARSER ./input '(x)(x)x'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:757: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:757"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
+sending: 'x' (1@10-19)
+thing (1@10-19): 'x' (1@10-19)
+sending: ')' (2@20-29)
+line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
+sending: '(' (3@30-39)
+sending: 'x' (4@40-49)
+thing (4@40-49): 'x' (4@40-49)
+sending: ')' (5@50-59)
+line (3@30-59): '(' (3@30-39) thing (4@40-49) ')' (5@50-59)
+sending: 'x' (6@60-69)
+thing (6@60-69): 'x' (6@60-69)
+sending: END (7@70-79)
+70.70-79.78: syntax error, unexpected END, expecting 'x'
+Freeing nterm thing (6@60-69)
+Freeing nterm line (3@30-59)
+Freeing nterm line (0@0-29)
+Freeing token END (7@70-79)
+Parsing FAILED.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:757"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
 
 
 # Check destruction upon stack overflow
@@ -9272,20 +44088,19 @@
 
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  57 ) # 57. actions.at:537: Printers and Destructors with union: %glr-parser
-    at_setup_line='actions.at:537'
-    at_desc='Printers and Destructors with union: %glr-parser'
-    $at_quiet $ECHO_N " 57: Printers and Destructors with union: %glr-parser$ECHO_C"
-    at_xfail=no
-    (
-      echo "57. actions.at:537: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_163
+#AT_START_164
+at_fn_group_banner 164 'actions.at:758' \
+  "Printers and Destructors with union: %glr-parser" "" 9
+at_xfail=no
+(
+  $as_echo "164. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -9294,56 +44109,29 @@
 # Be sure to pass all the %directives to this macro to have correct
 # helping macros.  So don't put any directly in the Bison file.
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
-
-
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
+%code requires {
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 
 #define YYINITDEPTH 10
 #define YYMAXDEPTH 10
 #define RANGE(Location) (Location).first_line, (Location).last_line
-%}
+
+/* Display the symbol type Symbol.  */
+#define V(Symbol, Value, Location, Sep) \
+   fprintf (stderr, #Symbol " (%d@%d-%d)" Sep, Value, RANGE(Location))
+}
 
 %error-verbose
 %debug
@@ -9355,15 +44143,15 @@
   int ival;
 }
 
-
-%{
+%code provides {
 
 static int yylex (void);
-static void yyerror (const char *msg);
-%}
+static void yyerror ( const char *msg);
+}
 
-%type <ival> '(' 'x' 'y' ')' ';' thing line input
+%type <ival> '(' 'x' 'y' ')' ';' thing line input END
 
+/* FIXME: This %printer isn't actually tested.  */
 %printer
   {
     fprintf (yyoutput, "%d", $$);
@@ -9371,25 +44159,30 @@
   input line thing 'x' 'y'
 
 %destructor
-  { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
   input
 
 %destructor
-  { printf ("Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
   line
 
 %destructor
-  { printf ("Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
   thing
 
 %destructor
-  { printf ("Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'x'
 
 %destructor
-  { printf ("Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
+  { fprintf (stderr, "Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'y'
 
+%token END 0
+%destructor
+  { fprintf (stderr, "Freeing token END (%d@%d-%d)\n", $$, RANGE (@$)); }
+  END
+
 %%
 /*
    This grammar is made to exercise error recovery.
@@ -9402,14 +44195,15 @@
   /* Nothing. */
     {
       $$ = 0;
-      printf ("input (%d@%d-%d): /* Nothing */\n", $$, RANGE (@$));
+      V(input, $$, @$, ": /* Nothing */\n");
     }
 | line input /* Right recursive to load the stack so that popping at
-		EOF can	be exercised.  */
+                END can be exercised.  */
     {
       $$ = 2;
-      printf ("input (%d@%d-%d): line (%d@%d-%d) input (%d@%d-%d)\n",
-	      $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2));
+      V(input, $$, @$, ": ");
+      V(line,  $1, @1, " ");
+      V(input, $2, @2, "\n");
     }
 ;
 
@@ -9417,28 +44211,36 @@
   thing thing thing ';'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): thing (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ';' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V(thing, $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(;,     $4, @4, "\n");
     }
 | '(' thing thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
-              $3, RANGE (@3), $4, RANGE (@4));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(thing, $3, @3, " ");
+      V(')',   $4, @4, "\n");
     }
 | '(' thing ')'
     {
       $$ = $1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      V(thing, $2, @2, " ");
+      V(')',   $3, @3, "\n");
     }
 | '(' error ')'
     {
       $$ = -1;
-      printf ("line (%d@%d-%d): '(' (%d@%d-%d) error (@%d-%d) ')' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1), RANGE (@2), $3, RANGE (@3));
+      V(line,  $$, @$, ": ");
+      V('(',   $1, @1, " ");
+      fprintf (stderr, "error (@%d-%d) ", RANGE (@2));
+      V(')',   $3, @3, "\n");
     }
 ;
 
@@ -9446,38 +44248,42 @@
   'x'
     {
       $$ = $1;
-      printf ("thing (%d@%d-%d): 'x' (%d@%d-%d)\n",
-              $$, RANGE (@$), $1, RANGE (@1));
+      V(thing, $$, @$, ": ");
+      V('x',   $1, @1, "\n");
     }
 ;
 %%
 /* Alias to ARGV[1]. */
-const char *source = 0;
+const char *source = YY_NULL;
 
-static int
-yylex (void)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+static
+int yylex (void)
 {
   static unsigned int counter = 0;
 
   int c = (yylval).ival = counter++;
   /* As in BASIC, line numbers go from 10 to 10.  */
- (yylloc).first_line = (yylloc).first_column = 10 * c;
+  (yylloc).first_line = (yylloc).first_column = 10 * c;
   (yylloc).last_line = (yylloc).last_column = (yylloc).first_line + 9;
-
-
+  assert (0 <= c && c <= strlen (source));
   if (source[c])
-    printf ("sending: '%c'", source[c]);
+    fprintf (stderr, "sending: '%c'", source[c]);
   else
-    printf ("sending: EOF");
-  printf (" (%d@%d-%d)\n", c, RANGE ((yylloc)));
+    fprintf (stderr, "sending: END");
+  fprintf (stderr, " (%d@%d-%d)\n", c, RANGE ((yylloc)));
   return source[c];
 }
 
-static void
-yyerror (const char *msg)
-{
-  printf ("%d-%d: %s\n", RANGE (yylloc), msg);
-}
 
 int
 main (int argc, const char *argv[])
@@ -9489,9 +44295,9 @@
   status = yyparse ();
   switch (status)
     {
-      case 0: printf ("Successful parse.\n"); break;
-      case 1: printf ("Parsing FAILED.\n"); break;
-      default: printf ("Parsing FAILED (status %d).\n", status); break;
+      case 0: fprintf (stderr, "Successful parse.\n"); break;
+      case 1: fprintf (stderr, "Parsing FAILED.\n"); break;
+      default: fprintf (stderr, "Parsing FAILED (status %d).\n", status); break;
     }
   return status;
 }
@@ -9499,55 +44305,118 @@
 
 
 
-$at_traceoff
-echo "actions.at:537: bison -o input.c input.y"
-echo actions.at:537 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:537: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:758: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:758"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/actions.at:758: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:758"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:758: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:758"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:758: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:758"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:758: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:758"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "actions.at:537: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo actions.at:537 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:537: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/actions.at:758: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:758"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:758: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:758"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
@@ -9556,40 +44425,44 @@
 # I.e., epsilon-reductions, as in "(x)" which ends by reducing
 # an empty "line" nterm.
 # FIXME: This location is not satisfying.  Depend on the lookahead?
-$at_traceoff
-echo "actions.at:537: \$PREPARSER ./input '(x)'"
-echo actions.at:537 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(x)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:758:  \$PREPARSER ./input '(x)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)'" "actions.at:758"
+( $at_check_trace;  $PREPARSER ./input '(x)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:758: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:758"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: ')' (2@20-29)
 line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (0@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:537: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -9597,41 +44470,45 @@
 # ---------------------------------
 # '(y)' is an error, but can be recovered from.  But what's the location
 # of the error itself ('y'), and of the resulting reduction ('(error)').
-$at_traceoff
-echo "actions.at:537: \$PREPARSER ./input '(y)'"
-echo actions.at:537 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(y)' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:758:  \$PREPARSER ./input '(y)'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(y)'" "actions.at:758"
+( $at_check_trace;  $PREPARSER ./input '(y)'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:758: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:758"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'y' (1@10-19)
-10-19: syntax error, unexpected 'y', expecting 'x'
+10.10-19.18: syntax error, unexpected 'y', expecting 'x'
 Freeing token 'y' (1@10-19)
 sending: ')' (2@20-29)
 line (-1@0-29): '(' (0@0-9) error (@10-19) ')' (2@20-29)
-sending: EOF (3@30-39)
+sending: END (3@30-39)
 input (0@29-29): /* Nothing */
 input (2@0-29): line (-1@0-29) input (0@29-29)
+Freeing token END (3@30-39)
 Freeing nterm input (2@0-29)
 Successful parse.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "actions.at:537: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
 
 
 
@@ -9649,22 +44526,33 @@
 #     '(', 'x', ')',
 #     '(', 'x', ')',
 #     'y'
-$at_traceoff
-echo "actions.at:537: \$PREPARSER ./input '(xxxxx)(x)(x)y'"
-echo actions.at:537 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '(xxxxx)(x)(x)y' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "sending: '(' (0@0-9)
+{ set +x
+$as_echo "$at_srcdir/actions.at:758:  \$PREPARSER ./input '(xxxxx)(x)(x)y'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(xxxxx)(x)(x)y'" "actions.at:758"
+( $at_check_trace;  $PREPARSER ./input '(xxxxx)(x)(x)y'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:758: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:758"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
 sending: 'x' (1@10-19)
 thing (1@10-19): 'x' (1@10-19)
 sending: 'x' (2@20-29)
 thing (2@20-29): 'x' (2@20-29)
 sending: 'x' (3@30-39)
-30-39: syntax error, unexpected 'x', expecting ')'
+30.30-39.38: syntax error, unexpected 'x', expecting ')'
 Freeing nterm thing (2@20-29)
 Freeing nterm thing (1@10-19)
 Freeing token 'x' (3@30-39)
@@ -9689,25 +44577,76 @@
 input (2@100-129): line (10@100-129) input (0@129-129)
 input (2@70-129): line (7@70-99) input (2@100-129)
 input (2@0-129): line (-1@0-69) input (2@70-129)
-130-139: syntax error, unexpected 'y', expecting \$end
+130.130-139.138: syntax error, unexpected 'y', expecting END
 Freeing nterm input (2@0-129)
 Freeing token 'y' (13@130-139)
 Parsing FAILED.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "actions.at:537: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+
+# Syntax error caught by the parser where lookahead = END
+# --------------------------------------------------------
+# Load the stack and provoke an error that cannot be caught by the
+# grammar, to check that the stack is cleared.  And make sure the
+# lookahead is freed.
+#
+#     '(', 'x', ')',
+#     '(', 'x', ')',
+#     'x'
+{ set +x
+$as_echo "$at_srcdir/actions.at:758:  \$PREPARSER ./input '(x)(x)x'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '(x)(x)x'" "actions.at:758"
+( $at_check_trace;  $PREPARSER ./input '(x)(x)x'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:758: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:758"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sending: '(' (0@0-9)
+sending: 'x' (1@10-19)
+thing (1@10-19): 'x' (1@10-19)
+sending: ')' (2@20-29)
+line (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
+sending: '(' (3@30-39)
+sending: 'x' (4@40-49)
+thing (4@40-49): 'x' (4@40-49)
+sending: ')' (5@50-59)
+line (3@30-59): '(' (3@30-39) thing (4@40-49) ')' (5@50-59)
+sending: 'x' (6@60-69)
+thing (6@60-69): 'x' (6@60-69)
+sending: END (7@70-79)
+70.70-79.78: syntax error, unexpected END, expecting 'x'
+Freeing nterm thing (6@60-69)
+Freeing nterm line (3@30-59)
+Freeing nterm line (0@0-29)
+Freeing token END (7@70-79)
+Parsing FAILED.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:758"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
 
 
 # Check destruction upon stack overflow
@@ -9718,29 +44657,4700 @@
 
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_164
+#AT_START_165
+at_fn_group_banner 165 'actions.at:769' \
+  "Default tagless %printer and %destructor" "       " 9
+at_xfail=no
+(
+  $as_echo "165. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
-  banner-8 ) # Banner 8. conflicts.at:20
-    cat <<\_ATEOF
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-Conflicts.
+%error-verbose
+%debug
+%locations
 
+%{
+# include <stdio.h>
+# include <stdlib.h>
+static int yylex (void);
+static void yyerror ( const char *msg);
+# define USE(SYM)
+%}
+
+%printer {
+  fprintf (yyoutput, "<*> printer should not be called.\n");
+} <*>
+
+%printer {
+  fprintf (yyoutput, "<> printer for '%c' @ %d", $$, @$.first_column);
+} <>
+%destructor {
+  fprintf (stdout, "<> destructor for '%c' @ %d.\n", $$, @$.first_column);
+} <>
+
+%printer {
+  fprintf (yyoutput, "'b'/'c' printer for '%c' @ %d", $$, @$.first_column);
+} 'b' 'c'
+%destructor {
+  fprintf (stdout, "'b'/'c' destructor for '%c' @ %d.\n", $$, @$.first_column);
+} 'b' 'c'
+
+%destructor {
+  fprintf (yyoutput, "<*> destructor should not be called.\n");
+} <*>
+
+%%
+
+start: 'a' 'b' 'c' 'd' 'e' { $$ = 'S'; USE(($1, $2, $3, $4, $5)); } ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "abcd";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  yylval = res;
+  (yylloc).first_line = (yylloc).last_line = 1;
+  (yylloc).first_column = (yylloc).last_column = toknum;
+  return res;
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
 _ATEOF
-    ;;
 
-  58 ) # 58. conflicts.at:32: S/R in initial
-    at_setup_line='conflicts.at:32'
-    at_desc='S/R in initial'
-    $at_quiet $ECHO_N " 58: S/R in initial                               $ECHO_C"
-    at_xfail=no
-    (
-      echo "58. conflicts.at:32: testing ..."
-      $at_traceon
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:822: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:822"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:822"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:822: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:822"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:822"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:822: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:822"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:822"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:822: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:822"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:822"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:822: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:822"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:822"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:823: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:823"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:823"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:823: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:823"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:823"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:824:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:824"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "<> destructor for 'd' @ 4.
+'b'/'c' destructor for 'c' @ 3.
+'b'/'c' destructor for 'b' @ 2.
+<> destructor for 'a' @ 1.
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:824"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:824: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:824"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reading a token: Next token is token 'a' (1.1: <> printer for 'a' @ 1)
+Shifting token 'a' (1.1: <> printer for 'a' @ 1)
+Entering state 1
+Reading a token: Next token is token 'b' (1.2: 'b'/'c' printer for 'b' @ 2)
+Shifting token 'b' (1.2: 'b'/'c' printer for 'b' @ 2)
+Entering state 3
+Reading a token: Next token is token 'c' (1.3: 'b'/'c' printer for 'c' @ 3)
+Shifting token 'c' (1.3: 'b'/'c' printer for 'c' @ 3)
+Entering state 5
+Reading a token: Next token is token 'd' (1.4: <> printer for 'd' @ 4)
+Shifting token 'd' (1.4: <> printer for 'd' @ 4)
+Entering state 6
+Reading a token: Now at end of input.
+1.5: syntax error, unexpected \$end, expecting 'e'
+Error: popping token 'd' (1.4: <> printer for 'd' @ 4)
+Stack now 0 1 3 5
+Error: popping token 'c' (1.3: 'b'/'c' printer for 'c' @ 3)
+Stack now 0 1 3
+Error: popping token 'b' (1.2: 'b'/'c' printer for 'b' @ 2)
+Stack now 0 1
+Error: popping token 'a' (1.1: <> printer for 'a' @ 1)
+Stack now 0
+Cleanup: discarding lookahead token \$end (1.5: )
+Stack now 0
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:824"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_165
+#AT_START_166
+at_fn_group_banner 166 'actions.at:867' \
+  "Default tagged and per-type %printer and %destructor" "" 9
+at_xfail=no
+(
+  $as_echo "166. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%error-verbose
+%debug
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+# define USE(SYM)
+%}
+
+%printer {
+  fprintf (yyoutput, "<> printer should not be called.\n");
+} <>
+
+%union { int field0; int field1; int field2; }
+%type <field0> start 'a' 'g'
+%type <field1> 'e'
+%type <field2> 'f'
+%printer {
+  fprintf (yyoutput, "<*>/<field2>/e printer");
+} <*> 'e' <field2>
+%destructor {
+  fprintf (stdout, "<*>/<field2>/e destructor.\n");
+} <*> 'e' <field2>
+
+%type <field1> 'b'
+%printer { fprintf (yyoutput, "<field1> printer"); } <field1>
+%destructor { fprintf (stdout, "<field1> destructor.\n"); } <field1>
+
+%type <field0> 'c'
+%printer { fprintf (yyoutput, "'c' printer"); } 'c'
+%destructor { fprintf (stdout, "'c' destructor.\n"); } 'c'
+
+%type <field1> 'd'
+%printer { fprintf (yyoutput, "'d' printer"); } 'd'
+%destructor { fprintf (stdout, "'d' destructor.\n"); } 'd'
+
+%destructor {
+  fprintf (yyoutput, "<> destructor should not be called.\n");
+} <>
+
+%%
+
+start:
+  'a' 'b' 'c' 'd' 'e' 'f' 'g'
+    {
+      USE(($1, $2, $3, $4, $5, $6, $7));
+      $$ = 'S';
+    }
+  ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "abcdef";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:934: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:934"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:934"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:934: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:934"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:934"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:934: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:934"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:934"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:934: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:934"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:934"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:934: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:934"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:934"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:935: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:935"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:935"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:935: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:935"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:935"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:936:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:936"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "<*>/<field2>/e destructor.
+<*>/<field2>/e destructor.
+'d' destructor.
+'c' destructor.
+<field1> destructor.
+<*>/<field2>/e destructor.
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:936: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:936"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reading a token: Next token is token 'a' (<*>/<field2>/e printer)
+Shifting token 'a' (<*>/<field2>/e printer)
+Entering state 1
+Reading a token: Next token is token 'b' (<field1> printer)
+Shifting token 'b' (<field1> printer)
+Entering state 3
+Reading a token: Next token is token 'c' ('c' printer)
+Shifting token 'c' ('c' printer)
+Entering state 5
+Reading a token: Next token is token 'd' ('d' printer)
+Shifting token 'd' ('d' printer)
+Entering state 6
+Reading a token: Next token is token 'e' (<*>/<field2>/e printer)
+Shifting token 'e' (<*>/<field2>/e printer)
+Entering state 7
+Reading a token: Next token is token 'f' (<*>/<field2>/e printer)
+Shifting token 'f' (<*>/<field2>/e printer)
+Entering state 8
+Reading a token: Now at end of input.
+syntax error, unexpected \$end, expecting 'g'
+Error: popping token 'f' (<*>/<field2>/e printer)
+Stack now 0 1 3 5 6 7
+Error: popping token 'e' (<*>/<field2>/e printer)
+Stack now 0 1 3 5 6
+Error: popping token 'd' ('d' printer)
+Stack now 0 1 3 5
+Error: popping token 'c' ('c' printer)
+Stack now 0 1 3
+Error: popping token 'b' (<field1> printer)
+Stack now 0 1
+Error: popping token 'a' (<*>/<field2>/e printer)
+Stack now 0
+Cleanup: discarding lookahead token \$end ()
+Stack now 0
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_166
+#AT_START_167
+at_fn_group_banner 167 'actions.at:991' \
+  "Default %printer and %destructor for user-defined end token" "" 9
+at_xfail=no
+(
+  $as_echo "167. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# _AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN(TYPED)
+# -------------------------------------------------------------
+
+
+
+
+
+cat >input0.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%error-verbose
+%debug
+%locations
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+# define USE(SYM)
+%}
+
+%destructor {
+  fprintf (yyoutput, "<*> destructor should not be called.\n");
+} <*>
+
+%token END 0
+%printer {
+  fprintf (yyoutput, "<> for '%c' @ %d", $$, @$.first_column);
+} <>
+%destructor {
+  fprintf (stdout, "<> for '%c' @ %d.\n", $$, @$.first_column);
+} <>
+
+%printer {
+  fprintf (yyoutput, "<*> printer should not be called.\n");
+} <*>
+
+
+
+
+%%
+
+start: { $$ = 'S'; } ;
+
+%%
+
+static int
+yylex (void)
+{
+  static int called;
+  if (called++)
+    abort ();
+  yylval = 'E';
+  yylloc.first_line = yylloc.last_line = 1;
+  yylloc.first_column = yylloc.last_column = 1;
+  return 0;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1087: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input0.c input0.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1087"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input0.c input0.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1087: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input0.c input0.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input0.c input0.y" "actions.at:1087"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input0.c input0.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1087: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1087"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1087: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1087"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1087: bison -o input0.c input0.y"
+at_fn_check_prepare_trace "actions.at:1087"
+( $at_check_trace; bison -o input0.c input0.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1087: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1087"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1087: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input0 input0.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input0 input0.c $LIBS" "actions.at:1087"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input0 input0.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1087:  \$PREPARSER ./input0"
+at_fn_check_prepare_dynamic " $PREPARSER ./input0" "actions.at:1087"
+( $at_check_trace;  $PREPARSER ./input0
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "<> for 'E' @ 1.
+<> for 'S' @ 1.
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1087: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1087"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reducing stack by rule 1 (line 42):
+-> \$\$ = nterm start (1.1: <> for 'S' @ 1)
+Stack now 0
+Entering state 1
+Reading a token: Now at end of input.
+Shifting token END (1.1: <> for 'E' @ 1)
+Entering state 2
+Stack now 0 1 2
+Cleanup: popping token END (1.1: <> for 'E' @ 1)
+Cleanup: popping nterm start (1.1: <> for 'S' @ 1)
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1087"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+cat >input1.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%error-verbose
+%debug
+%locations
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+# define USE(SYM)
+%}
+
+%destructor {
+  fprintf (yyoutput, "<> destructor should not be called.\n");
+} <>
+
+%token END 0
+%printer {
+  fprintf (yyoutput, "<*> for '%c' @ %d", $$, @$.first_column);
+} <*>
+%destructor {
+  fprintf (stdout, "<*> for '%c' @ %d.\n", $$, @$.first_column);
+} <*>
+
+%printer {
+  fprintf (yyoutput, "<> printer should not be called.\n");
+} <>
+
+%union { char tag; }
+%type <tag> start END
+
+%%
+
+start: { $$ = 'S'; } ;
+
+%%
+
+static int
+yylex (void)
+{
+  static int called;
+  if (called++)
+    abort ();
+  yylval.tag = 'E';
+  yylloc.first_line = yylloc.last_line = 1;
+  yylloc.first_column = yylloc.last_column = 1;
+  return 0;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1088: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input1.c input1.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1088"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input1.c input1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1088: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input1.c input1.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input1.c input1.y" "actions.at:1088"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input1.c input1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1088: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1088"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1088: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1088"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1088: bison -o input1.c input1.y"
+at_fn_check_prepare_trace "actions.at:1088"
+( $at_check_trace; bison -o input1.c input1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1088: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1088"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1088: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input1 input1.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input1 input1.c $LIBS" "actions.at:1088"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input1 input1.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1088:  \$PREPARSER ./input1"
+at_fn_check_prepare_dynamic " $PREPARSER ./input1" "actions.at:1088"
+( $at_check_trace;  $PREPARSER ./input1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "<*> for 'E' @ 1.
+<*> for 'S' @ 1.
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1088: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1088"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reducing stack by rule 1 (line 42):
+-> \$\$ = nterm start (1.1: <*> for 'S' @ 1)
+Stack now 0
+Entering state 1
+Reading a token: Now at end of input.
+Shifting token END (1.1: <*> for 'E' @ 1)
+Entering state 2
+Stack now 0 1 2
+Cleanup: popping token END (1.1: <*> for 'E' @ 1)
+Cleanup: popping nterm start (1.1: <*> for 'S' @ 1)
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1088"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_167
+#AT_START_168
+at_fn_group_banner 168 'actions.at:1098' \
+  "Default %printer and %destructor are not for error or \$undefined" "" 9
+at_xfail=no
+(
+  $as_echo "168. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# If Bison were to apply the default %printer and %destructor to the error
+# token or to $undefined:
+#   - For the error token:
+#     - It would generate warnings for unused $n.
+#     - It would invoke the %printer and %destructor on the error token's
+#       semantic value, which would be initialized from the lookahead, which
+#       would be destroyed separately.
+#   - For $undefined, who knows what the semantic value would be.
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%debug
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+# define USE(SYM)
+%}
+
+%printer {
+  fprintf (yyoutput, "'%c'", $$);
+} <> <*>
+%destructor {
+  fprintf (stderr, "DESTROY '%c'\n", $$);
+} <> <*>
+
+%%
+
+start:
+  { $$ = 'S'; }
+  /* In order to reveal the problems that this bug caused during parsing, add
+   * $2 to USE.  */
+  | 'a' error 'b' 'c' { USE(($1, $3, $4)); $$ = 'S'; }
+  ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "abd";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  yylval = res;
+  return res;
+}
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1148: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1148"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1148"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1148: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1148"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1148"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1148: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1148"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1148"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1148: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1148"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1148"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1148: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1148"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1148"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1149: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1149"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1149"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1149: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1149"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1149"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1150:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:1150"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:1150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1150: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1150"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reading a token: Next token is token 'a' ('a')
+Shifting token 'a' ('a')
+Entering state 1
+Reading a token: Next token is token 'b' ('b')
+syntax error
+Shifting token error ()
+Entering state 3
+Next token is token 'b' ('b')
+Shifting token 'b' ('b')
+Entering state 5
+Reading a token: Next token is token \$undefined ()
+Error: popping token 'b' ('b')
+DESTROY 'b'
+Stack now 0 1 3
+Error: popping token error ()
+Stack now 0 1
+Shifting token error ()
+Entering state 3
+Next token is token \$undefined ()
+Error: discarding token \$undefined ()
+Error: popping token error ()
+Stack now 0 1
+Shifting token error ()
+Entering state 3
+Reading a token: Now at end of input.
+Cleanup: discarding lookahead token \$end ()
+Stack now 0 1 3
+Cleanup: popping token error ()
+Cleanup: popping token 'a' ('a')
+DESTROY 'a'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_168
+#AT_START_169
+at_fn_group_banner 169 'actions.at:1193' \
+  "Default %printer and %destructor are not for \$accept" "" 9
+at_xfail=no
+(
+  $as_echo "169. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# If YYSTYPE is a union and Bison were to apply the default %printer and
+# %destructor to $accept:
+#   - The %printer and %destructor code generated for $accept would always be
+#     dead code because $accept is currently never shifted onto the stack.
+#   - $$ for $accept would always be of type YYSTYPE because it's not possible
+#     to declare `%type <field> $accept'.  (Also true for $undefined.)
+#   - Thus, the compiler might complain that the user code assumes the wrong
+#     type for $$ since the code might assume the type associated with a
+#     specific union field, which is especially reasonable in C++ since that
+#     type may be a base type.  This test case checks for this problem.  (Also
+#     true for $undefined and the error token, so there are three warnings for
+#     %printer and three for %destructor.)
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%debug /* So that %printer is actually compiled.  */
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+# define USE(SYM)
+%}
+
+%printer {
+  char chr = $$;
+  fprintf (yyoutput, "'%c'", chr);
+} <> <*>
+%destructor {
+  char chr = $$;
+  fprintf (stderr, "DESTROY '%c'\n", chr);
+} <> <*>
+
+%union { char chr; }
+%type <chr> start
+
+%%
+
+start: { USE($$); } ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1247: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1247"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1247"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1247: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1247"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1247"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1247: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1247"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1247"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1247: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1247"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1247"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1247: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1247"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1247"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1248: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1248"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1248"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1248: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1248"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1248"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_169
+#AT_START_170
+at_fn_group_banner 170 'actions.at:1258' \
+  "Default %printer and %destructor for mid-rule values" "" 9
+at_xfail=no
+(
+  $as_echo "170. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%debug /* So that %printer is actually compiled.  */
+
+%{
+# include <stdio.h>
+# include <stdlib.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+# define USE(SYM)
+# define YYLTYPE int
+# define YYLLOC_DEFAULT(Current, Rhs, N) (void)(Rhs)
+# define YY_LOCATION_PRINT(File, Loc)
+%}
+
+%printer { fprintf (yyoutput, "%d", @$); } <>
+%destructor { fprintf (stderr, "DESTROY %d\n", @$); } <>
+%printer { fprintf (yyoutput, "<*> printer should not be called"); } <*>
+%destructor { fprintf (yyoutput, "<*> destructor should not be called"); } <*>
+
+%%
+
+start:
+  {           @$ = 1; } // Not set or used.
+  { USE ($$); @$ = 2; } // Both set and used.
+  { USE ($$); @$ = 3; } // Only set.
+  {           @$ = 4; } // Only used.
+  'c'
+  { USE (($$, $2, $4, $5)); @$ = 0; }
+  ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1303"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1303"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1303"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1303"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1303: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1303"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:33.3-23: warning: unset value: \$\$
+input.y:32.3-23: warning: unused value: \$3
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror" "actions.at:1303"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:33.3-23: warning: unset value: $$
+input.y:32.3-23: warning: unused value: $3
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1303"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error" "actions.at:1303"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror" "actions.at:1303"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1303: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror" "actions.at:1303"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -fcaret -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1308"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y" "actions.at:1308"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1308"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1308"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1308: bison -fcaret -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1308"
+( $at_check_trace; bison -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:33.3-23: warning: unset value: \$\$
+   {           @\$ = 4; } // Only used.
+   ^^^^^^^^^^^^^^^^^^^^^
+input.y:32.3-23: warning: unused value: \$3
+   { USE (\$\$); @\$ = 3; } // Only set.
+   ^^^^^^^^^^^^^^^^^^^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror" "actions.at:1308"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:33.3-23: warning: unset value: $$
+   {           @$ = 4; } // Only used.
+   ^^^^^^^^^^^^^^^^^^^^^
+input.y:32.3-23: warning: unused value: $3
+   { USE ($$); @$ = 3; } // Only set.
+   ^^^^^^^^^^^^^^^^^^^^^
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1308"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error" "actions.at:1308"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror" "actions.at:1308"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1308: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror" "actions.at:1308"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1317: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1317"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1317"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1317: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1317"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1317"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1318:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:1318"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:1318"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1318: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1318"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reducing stack by rule 1 (line 30):
+-> \$\$ = nterm \$@1 (: )
+Stack now 0
+Entering state 2
+Reducing stack by rule 2 (line 31):
+-> \$\$ = nterm @2 (: 2)
+Stack now 0 2
+Entering state 4
+Reducing stack by rule 3 (line 32):
+-> \$\$ = nterm @3 (: 3)
+Stack now 0 2 4
+Entering state 5
+Reducing stack by rule 4 (line 33):
+-> \$\$ = nterm @4 (: 4)
+Stack now 0 2 4 5
+Entering state 6
+Reading a token: Now at end of input.
+syntax error
+Error: popping nterm @4 (: 4)
+DESTROY 4
+Stack now 0 2 4 5
+Error: popping nterm @3 (: 3)
+DESTROY 3
+Stack now 0 2 4
+Error: popping nterm @2 (: 2)
+DESTROY 2
+Stack now 0 2
+Error: popping nterm \$@1 (: )
+Stack now 0
+Cleanup: discarding lookahead token \$end (: )
+Stack now 0
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1318"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_170
+#AT_START_171
+at_fn_group_banner 171 'actions.at:1406' \
+  "@\$ in %initial-action implies %locations" "       " 9
+at_xfail=no
+(
+  $as_echo "171. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+}
+
+%debug
+
+%initial-action {
+  fprintf (stderr, "%d\n", @$.first_line);
+}
+
+%%
+
+start:  ;
+
+%%
+
+static int
+yylex (void)
+{
+  return 0;
+}
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1406: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1406"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1406: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1406"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1406: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1406"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1406: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1406"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1406: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1406"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1406: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1406"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1406: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1406"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_171
+#AT_START_172
+at_fn_group_banner 172 'actions.at:1407' \
+  "@\$ in %destructor implies %locations" "           " 9
+at_xfail=no
+(
+  $as_echo "172. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+}
+
+%debug
+
+%destructor {
+  fprintf (stderr, "%d\n", @$.first_line);
+} start
+
+%%
+
+start:  ;
+
+%%
+
+static int
+yylex (void)
+{
+  return 0;
+}
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1407: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1407"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1407"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1407: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1407"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1407"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1407: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1407"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1407"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1407: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1407"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1407"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1407: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1407"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1407"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1407: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1407"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1407"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1407: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1407"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1407"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_172
+#AT_START_173
+at_fn_group_banner 173 'actions.at:1408' \
+  "@\$ in %printer implies %locations" "              " 9
+at_xfail=no
+(
+  $as_echo "173. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+}
+
+%debug
+
+%printer {
+  fprintf (stderr, "%d\n", @$.first_line);
+} start
+
+%%
+
+start:  ;
+
+%%
+
+static int
+yylex (void)
+{
+  return 0;
+}
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1408: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1408"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1408: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1408"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1408: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1408"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1408: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1408"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1408: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1408"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1408: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1408"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1408: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1408"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_173
+#AT_START_174
+at_fn_group_banner 174 'actions.at:1529' \
+  "Qualified \$\$ in actions: yacc.c" "                " 9
+at_xfail=no
+(
+  $as_echo "174. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "yacc.c"
+%defines   // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%locations // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%debug
+%code requires
+{
+  typedef struct sem_type
+  {
+    int ival;
+    float fval;
+  } sem_type;
+
+# define YYSTYPE sem_type
+
+
+# include <stdio.h>
+  static void
+  report (FILE* yyo, int ival, float fval)
+  {
+    fprintf (yyo, "ival: %d, fval: %1.1f", ival, fval);
+  }
+
+}
+
+%code
+{
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%token UNTYPED
+%token <ival> INT
+%type <fval> float
+%printer { report (yyo, $$,       $<fval>$); } <ival>;
+%printer { report (yyo, $<ival>$, $$      ); } <fval>;
+%printer { report (yyo, $<ival>$, $<fval>$); } <>;
+
+%initial-action
+{
+  $<ival>$ = 42;
+  $<fval>$ = 4.2;
+}
+
+%%
+float: UNTYPED INT
+{
+  $$       = $<fval>1 + $<fval>2;
+  $<ival>$ = $<ival>1 + $2;
+};
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static int const input[] = {UNTYPED, INT, EOF};
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  (yylval).ival = toknum * 10; (yylval).fval = toknum / 10.0;;
+  (yylloc).first_line = (yylloc).last_line = 1;
+  (yylloc).first_column = (yylloc).last_column = toknum;
+  return res;
+}
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1529: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1529"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1529: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1529"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1529: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1529"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1529: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1529"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1529: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1529"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:1529: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1529"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1529: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1529"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1529:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:1529"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1529: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1529"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Don't be too picky on the traces, GLR is not exactly the same.  Keep
+# only the lines from the printer.
+#
+# Don't care about locations.  FIXME: remove their removal when Bison
+# supports C++ without locations.
+{ set +x
+$as_echo "$at_srcdir/actions.at:1529: sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr"
+at_fn_check_prepare_trace "actions.at:1529"
+( $at_check_trace; sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Reading a token: Next token is token UNTYPED (ival: 10, fval: 0.1)
+Shifting token UNTYPED (ival: 10, fval: 0.1)
+Reading a token: Next token is token INT (ival: 20, fval: 0.2)
+Shifting token INT (ival: 20, fval: 0.2)
+   \$1 = token UNTYPED (ival: 10, fval: 0.1)
+   \$2 = token INT (ival: 20, fval: 0.2)
+-> \$\$ = nterm float (ival: 30, fval: 0.3)
+Cleanup: popping nterm float (ival: 30, fval: 0.3)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_174
+#AT_START_175
+at_fn_group_banner 175 'actions.at:1530' \
+  "Qualified \$\$ in actions: glr.c" "                 " 9
+at_xfail=no
+(
+  $as_echo "175. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "glr.c"
+%defines   // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%locations // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%debug
+%code requires
+{
+  typedef struct sem_type
+  {
+    int ival;
+    float fval;
+  } sem_type;
+
+# define YYSTYPE sem_type
+
+
+# include <stdio.h>
+  static void
+  report (FILE* yyo, int ival, float fval)
+  {
+    fprintf (yyo, "ival: %d, fval: %1.1f", ival, fval);
+  }
+
+}
+
+%code
+{
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%token UNTYPED
+%token <ival> INT
+%type <fval> float
+%printer { report (yyo, $$,       $<fval>$); } <ival>;
+%printer { report (yyo, $<ival>$, $$      ); } <fval>;
+%printer { report (yyo, $<ival>$, $<fval>$); } <>;
+
+%initial-action
+{
+  $<ival>$ = 42;
+  $<fval>$ = 4.2;
+}
+
+%%
+float: UNTYPED INT
+{
+  $$       = $<fval>1 + $<fval>2;
+  $<ival>$ = $<ival>1 + $2;
+};
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static int const input[] = {UNTYPED, INT, EOF};
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  (yylval).ival = toknum * 10; (yylval).fval = toknum / 10.0;;
+  (yylloc).first_line = (yylloc).last_line = 1;
+  (yylloc).first_column = (yylloc).last_column = toknum;
+  return res;
+}
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1530: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1530"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1530: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1530"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1530: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1530"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1530: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1530"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1530: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1530"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/actions.at:1530: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1530"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1530: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1530"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1530:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:1530"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1530: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1530"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Don't be too picky on the traces, GLR is not exactly the same.  Keep
+# only the lines from the printer.
+#
+# Don't care about locations.  FIXME: remove their removal when Bison
+# supports C++ without locations.
+{ set +x
+$as_echo "$at_srcdir/actions.at:1530: sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr"
+at_fn_check_prepare_trace "actions.at:1530"
+( $at_check_trace; sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Reading a token: Next token is token UNTYPED (ival: 10, fval: 0.1)
+Shifting token UNTYPED (ival: 10, fval: 0.1)
+Reading a token: Next token is token INT (ival: 20, fval: 0.2)
+Shifting token INT (ival: 20, fval: 0.2)
+   \$1 = token UNTYPED (ival: 10, fval: 0.1)
+   \$2 = token INT (ival: 20, fval: 0.2)
+-> \$\$ = nterm float (ival: 30, fval: 0.3)
+Cleanup: popping nterm float (ival: 30, fval: 0.3)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_175
+#AT_START_176
+at_fn_group_banner 176 'actions.at:1531' \
+  "Qualified \$\$ in actions: lalr1.cc" "              " 9
+at_xfail=no
+(
+  $as_echo "176. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%defines   // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%locations // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%debug
+%code requires
+{
+  typedef struct sem_type
+  {
+    int ival;
+    float fval;
+  } sem_type;
+
+# define YYSTYPE sem_type
+
+
+# include <iostream>
+  static void
+  report (std::ostream& yyo, int ival, float fval)
+  {
+    yyo << "ival: " << ival << ", fval: " <<  fval;
+  }
+
+}
+
+%code
+{
+
+  static int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+%token UNTYPED
+%token <ival> INT
+%type <fval> float
+%printer { report (yyo, $$,       $<fval>$); } <ival>;
+%printer { report (yyo, $<ival>$, $$      ); } <fval>;
+%printer { report (yyo, $<ival>$, $<fval>$); } <>;
+
+%initial-action
+{
+  $<ival>$ = 42;
+  $<fval>$ = 4.2;
+}
+
+%%
+float: UNTYPED INT
+{
+  $$       = $<fval>1 + $<fval>2;
+  $<ival>$ = $<ival>1 + $2;
+};
+%%
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+#include <assert.h>
+static
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  static int const input[] = {yy::parser::token::UNTYPED,
+                                 yy::parser::token::INT,
+                                  EOF};
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;(void) llocp;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  (*lvalp).ival = toknum * 10; (*lvalp).fval = toknum / 10.0;;
+  (*llocp).begin.line = (*llocp).end.line = 1;
+  (*llocp).begin.column = (*llocp).end.column = toknum;
+  return res;
+}
+int
+main (void)
+{
+  yy::parser p;
+  p.set_debug_level(1);
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1531: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1531"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1531: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "actions.at:1531"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1531: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1531"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1531: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1531"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1531: bison -o input.cc input.y"
+at_fn_check_prepare_trace "actions.at:1531"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1531: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "actions.at:1531"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1531: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "actions.at:1531"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1531:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:1531"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1531: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1531"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Don't be too picky on the traces, GLR is not exactly the same.  Keep
+# only the lines from the printer.
+#
+# Don't care about locations.  FIXME: remove their removal when Bison
+# supports C++ without locations.
+{ set +x
+$as_echo "$at_srcdir/actions.at:1531: sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr"
+at_fn_check_prepare_trace "actions.at:1531"
+( $at_check_trace; sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Reading a token: Next token is token UNTYPED (ival: 10, fval: 0.1)
+Shifting token UNTYPED (ival: 10, fval: 0.1)
+Reading a token: Next token is token INT (ival: 20, fval: 0.2)
+Shifting token INT (ival: 20, fval: 0.2)
+   \$1 = token UNTYPED (ival: 10, fval: 0.1)
+   \$2 = token INT (ival: 20, fval: 0.2)
+-> \$\$ = nterm float (ival: 30, fval: 0.3)
+Cleanup: popping nterm float (ival: 30, fval: 0.3)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_176
+#AT_START_177
+at_fn_group_banner 177 'actions.at:1532' \
+  "Qualified \$\$ in actions: glr.cc" "                " 9
+at_xfail=no
+(
+  $as_echo "177. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "glr.cc"
+%defines   // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%locations // FIXME: Mandated by lalr1.cc in Bison 2.6.
+%debug
+%code requires
+{
+  typedef struct sem_type
+  {
+    int ival;
+    float fval;
+  } sem_type;
+
+# define YYSTYPE sem_type
+
+
+# include <iostream>
+  static void
+  report (std::ostream& yyo, int ival, float fval)
+  {
+    yyo << "ival: " << ival << ", fval: " <<  fval;
+  }
+
+}
+
+%code
+{
+
+  static int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+%token UNTYPED
+%token <ival> INT
+%type <fval> float
+%printer { report (yyo, $$,       $<fval>$); } <ival>;
+%printer { report (yyo, $<ival>$, $$      ); } <fval>;
+%printer { report (yyo, $<ival>$, $<fval>$); } <>;
+
+%initial-action
+{
+  $<ival>$ = 42;
+  $<fval>$ = 4.2;
+}
+
+%%
+float: UNTYPED INT
+{
+  $$       = $<fval>1 + $<fval>2;
+  $<ival>$ = $<ival>1 + $2;
+};
+%%
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+#include <assert.h>
+static
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  static int const input[] = {yy::parser::token::UNTYPED,
+                                 yy::parser::token::INT,
+                                  EOF};
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;(void) llocp;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  (*lvalp).ival = toknum * 10; (*lvalp).fval = toknum / 10.0;;
+  (*llocp).begin.line = (*llocp).end.line = 1;
+  (*llocp).begin.column = (*llocp).end.column = toknum;
+  return res;
+}
+int
+main (void)
+{
+  yy::parser p;
+  p.set_debug_level(1);
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1532: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1532"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1532: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "actions.at:1532"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1532: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1532"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1532: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1532"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1532: bison -o input.cc input.y"
+at_fn_check_prepare_trace "actions.at:1532"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1532: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "actions.at:1532"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1532: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "actions.at:1532"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1532:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:1532"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1532: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1532"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Don't be too picky on the traces, GLR is not exactly the same.  Keep
+# only the lines from the printer.
+#
+# Don't care about locations.  FIXME: remove their removal when Bison
+# supports C++ without locations.
+{ set +x
+$as_echo "$at_srcdir/actions.at:1532: sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr"
+at_fn_check_prepare_trace "actions.at:1532"
+( $at_check_trace; sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Reading a token: Next token is token UNTYPED (ival: 10, fval: 0.1)
+Shifting token UNTYPED (ival: 10, fval: 0.1)
+Reading a token: Next token is token INT (ival: 20, fval: 0.2)
+Shifting token INT (ival: 20, fval: 0.2)
+   \$1 = token UNTYPED (ival: 10, fval: 0.1)
+   \$2 = token INT (ival: 20, fval: 0.2)
+-> \$\$ = nterm float (ival: 30, fval: 0.3)
+Cleanup: popping nterm float (ival: 30, fval: 0.3)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_177
+#AT_START_178
+at_fn_group_banner 178 'actions.at:1540' \
+  "Fix user actions without a trailing semicolon" "  " 9
+at_xfail=no
+(
+  $as_echo "178. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# This feature is undocumented, but we accidentally broke it in 2.3a,
+# and there was a complaint at:
+# <http://lists.gnu.org/archive/html/bug-bison/2008-11/msg00001.html>.
+
+cat >input.y <<'_ATEOF'
+%%
+start: test2 test1 test0 testc;
+
+test2
+: 'a' { semi;			/* TEST:N:2 */ }
+| 'b' { if (0) {no_semi}	/* TEST:N:2 */ }
+| 'c' { if (0) {semi;}		/* TEST:N:2 */ }
+| 'd' { semi;   no_semi		/* TEST:Y:2 */ }
+| 'e' { semi(); no_semi()	/* TEST:Y:2 */ }
+| 'f' { semi[]; no_semi[]	/* TEST:Y:2 */ }
+| 'g' { semi++; no_semi++	/* TEST:Y:2 */ }
+| 'h' { {no_semi} no_semi	/* TEST:Y:2 */ }
+| 'i' { {semi;}   no_semi	/* TEST:Y:2 */ }
+;
+test1
+  : 'a' { semi;			// TEST:N:1 ;
+} | 'b' { if (0) {no_semi}	// TEST:N:1 ;
+} | 'c' { if (0) {semi;}	// TEST:N:1 ;
+} | 'd' { semi;   no_semi	// TEST:Y:1 ;
+} | 'e' { semi(); no_semi()	// TEST:Y:1 ;
+} | 'f' { semi[]; no_semi[]	// TEST:Y:1 ;
+} | 'g' { semi++; no_semi++	// TEST:Y:1 ;
+} | 'h' { {no_semi} no_semi	// TEST:Y:1 ;
+} | 'i' { {semi;}   no_semi	// TEST:Y:1 ;
+} ;
+test0
+  : 'a' { semi;			// TEST:N:1 {}
+} | 'b' { if (0) {no_semi}	// TEST:N:1 {}
+} | 'c' { if (0) {semi;}	// TEST:N:1 {}
+} | 'd' { semi;   no_semi	// TEST:Y:1 {}
+} | 'e' { semi(); no_semi()	// TEST:Y:1 {}
+} | 'f' { semi[]; no_semi[]	// TEST:Y:1 {}
+} | 'g' { semi++; no_semi++	// TEST:Y:1 {}
+} | 'h' { {no_semi} no_semi	// TEST:Y:1 {}
+} | 'i' { {semi;}   no_semi	// TEST:Y:1 {}
+} ;
+
+testc
+: 'a' {
+#define TEST_MACRO_N \
+[]"broken\" $ @ $$ @$ [];\
+string;"}
+| 'b' {
+no_semi
+#define TEST_MACRO_N \
+[]"broken\" $ @ $$ @$ [];\
+string;"}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1597"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1597"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1597"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1597"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1597: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1597"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:8.48: warning: a ';' might be needed at the end of action code
+input.y:8.48:     future versions of Bison will not add the ';'
+input.y:9.48: warning: a ';' might be needed at the end of action code
+input.y:9.48:     future versions of Bison will not add the ';'
+input.y:10.48: warning: a ';' might be needed at the end of action code
+input.y:10.48:     future versions of Bison will not add the ';'
+input.y:11.48: warning: a ';' might be needed at the end of action code
+input.y:11.48:     future versions of Bison will not add the ';'
+input.y:12.48: warning: a ';' might be needed at the end of action code
+input.y:12.48:     future versions of Bison will not add the ';'
+input.y:13.48: warning: a ';' might be needed at the end of action code
+input.y:13.48:     future versions of Bison will not add the ';'
+input.y:20.1: warning: a ';' might be needed at the end of action code
+input.y:20.1:     future versions of Bison will not add the ';'
+input.y:21.1: warning: a ';' might be needed at the end of action code
+input.y:21.1:     future versions of Bison will not add the ';'
+input.y:22.1: warning: a ';' might be needed at the end of action code
+input.y:22.1:     future versions of Bison will not add the ';'
+input.y:23.1: warning: a ';' might be needed at the end of action code
+input.y:23.1:     future versions of Bison will not add the ';'
+input.y:24.1: warning: a ';' might be needed at the end of action code
+input.y:24.1:     future versions of Bison will not add the ';'
+input.y:25.1: warning: a ';' might be needed at the end of action code
+input.y:25.1:     future versions of Bison will not add the ';'
+input.y:31.1: warning: a ';' might be needed at the end of action code
+input.y:31.1:     future versions of Bison will not add the ';'
+input.y:32.1: warning: a ';' might be needed at the end of action code
+input.y:32.1:     future versions of Bison will not add the ';'
+input.y:33.1: warning: a ';' might be needed at the end of action code
+input.y:33.1:     future versions of Bison will not add the ';'
+input.y:34.1: warning: a ';' might be needed at the end of action code
+input.y:34.1:     future versions of Bison will not add the ';'
+input.y:35.1: warning: a ';' might be needed at the end of action code
+input.y:35.1:     future versions of Bison will not add the ';'
+input.y:36.1: warning: a ';' might be needed at the end of action code
+input.y:36.1:     future versions of Bison will not add the ';'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror" "actions.at:1597"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:8.48: warning: a ';' might be needed at the end of action code
+input.y:8.48:     future versions of Bison will not add the ';'
+input.y:9.48: warning: a ';' might be needed at the end of action code
+input.y:9.48:     future versions of Bison will not add the ';'
+input.y:10.48: warning: a ';' might be needed at the end of action code
+input.y:10.48:     future versions of Bison will not add the ';'
+input.y:11.48: warning: a ';' might be needed at the end of action code
+input.y:11.48:     future versions of Bison will not add the ';'
+input.y:12.48: warning: a ';' might be needed at the end of action code
+input.y:12.48:     future versions of Bison will not add the ';'
+input.y:13.48: warning: a ';' might be needed at the end of action code
+input.y:13.48:     future versions of Bison will not add the ';'
+input.y:20.1: warning: a ';' might be needed at the end of action code
+input.y:20.1:     future versions of Bison will not add the ';'
+input.y:21.1: warning: a ';' might be needed at the end of action code
+input.y:21.1:     future versions of Bison will not add the ';'
+input.y:22.1: warning: a ';' might be needed at the end of action code
+input.y:22.1:     future versions of Bison will not add the ';'
+input.y:23.1: warning: a ';' might be needed at the end of action code
+input.y:23.1:     future versions of Bison will not add the ';'
+input.y:24.1: warning: a ';' might be needed at the end of action code
+input.y:24.1:     future versions of Bison will not add the ';'
+input.y:25.1: warning: a ';' might be needed at the end of action code
+input.y:25.1:     future versions of Bison will not add the ';'
+input.y:31.1: warning: a ';' might be needed at the end of action code
+input.y:31.1:     future versions of Bison will not add the ';'
+input.y:32.1: warning: a ';' might be needed at the end of action code
+input.y:32.1:     future versions of Bison will not add the ';'
+input.y:33.1: warning: a ';' might be needed at the end of action code
+input.y:33.1:     future versions of Bison will not add the ';'
+input.y:34.1: warning: a ';' might be needed at the end of action code
+input.y:34.1:     future versions of Bison will not add the ';'
+input.y:35.1: warning: a ';' might be needed at the end of action code
+input.y:35.1:     future versions of Bison will not add the ';'
+input.y:36.1: warning: a ';' might be needed at the end of action code
+input.y:36.1:     future versions of Bison will not add the ';'
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1597"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error" "actions.at:1597"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror" "actions.at:1597"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1597: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror" "actions.at:1597"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1636: \$PERL -0777 -ne '
+my \$count = 0;
+s{/\\* TEST:N:2 \\*/ \\}\$}{ ++\$count; \"\" }gem;
+printf \"\$count\\n\";' input.c"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1636"
+( $at_check_trace; $PERL -0777 -ne '
+my $count = 0;
+s{/\* TEST:N:2 \*/ \}$}{ ++$count; "" }gem;
+printf "$count\n";' input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1636"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1637: \$PERL -0777 -ne '
+my \$count = 0;
+s{/\\* TEST:Y:2 \\*/ ;\\}\$}{ ++\$count; \"\" }gem;
+printf \"\$count\\n\";' input.c"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1637"
+( $at_check_trace; $PERL -0777 -ne '
+my $count = 0;
+s{/\* TEST:Y:2 \*/ ;\}$}{ ++$count; "" }gem;
+printf "$count\n";' input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "6
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1637"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1638: \$PERL -0777 -ne '
+my \$count = 0;
+s{// TEST:N:1 [;{}]*\\n\\}\$}{ ++\$count; \"\" }gem;
+printf \"\$count\\n\";' input.c"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1638"
+( $at_check_trace; $PERL -0777 -ne '
+my $count = 0;
+s{// TEST:N:1 [;{}]*\n\}$}{ ++$count; "" }gem;
+printf "$count\n";' input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "6
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1639: \$PERL -0777 -ne '
+my \$count = 0;
+s{// TEST:Y:1 [;{}]*\\n;\\}\$}{ ++\$count; \"\" }gem;
+printf \"\$count\\n\";' input.c"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1639"
+( $at_check_trace; $PERL -0777 -ne '
+my $count = 0;
+s{// TEST:Y:1 [;{}]*\n;\}$}{ ++$count; "" }gem;
+printf "$count\n";' input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "12
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1639"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1640: \$PERL -0777 -ne '
+my \$count = 0;
+s{#define TEST_MACRO_N \\\\\\n\\[\\]\"broken\\\\\" \\\$ \\@ \\\$\\\$ \\@\\\$ \\[\\];\\\\\\nstring;\"\\}}{ ++\$count; \"\" }gem;
+printf \"\$count\\n\";' input.c"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1640"
+( $at_check_trace; $PERL -0777 -ne '
+my $count = 0;
+s{#define TEST_MACRO_N \\\n\[\]"broken\\" \$ \@ \$\$ \@\$ \[\];\\\nstring;"\}}{ ++$count; "" }gem;
+printf "$count\n";' input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_178
+#AT_START_179
+at_fn_group_banner 179 'actions.at:1649' \
+  "Destroying lookahead assigned by semantic action" "" 9
+at_xfail=no
+(
+  $as_echo "179. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+  #define USE(Var)
+}
+
+%destructor { fprintf (stderr, "'a' destructor\n"); } 'a'
+%destructor { fprintf (stderr, "'b' destructor\n"); } 'b'
+
+%%
+
+// In a previous version of Bison, yychar assigned by the semantic
+// action below was not translated into yytoken before the lookahead was
+// discarded and thus before its destructor (selected according to
+// yytoken) was called in order to return from yyparse.  This would
+// happen even if YYACCEPT was performed in a later semantic action as
+// long as only consistent states with default reductions were visited
+// in between.  However, we leave YYACCEPT in the same semantic action
+// for this test in order to show that skeletons cannot simply translate
+// immediately after every semantic action because a semantic action
+// that has set yychar might not always return normally.  Instead,
+// skeletons must translate before every use of yytoken.
+start: 'a' accept { USE($1); } ;
+accept: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yychar = 'b';
+  YYACCEPT;
+} ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1695: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1695"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1695"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1695: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1695"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1695"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1695: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1695"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1695"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1695: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1695"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1695"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1695: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1695"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1695"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1696: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1696"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1696: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1696"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1696"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1697:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:1697"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1697"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1697: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1697"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "'b' destructor
+'a' destructor
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1697"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_179
+#AT_START_180
+at_fn_group_banner 180 'actions.at:1708' \
+  "YYBACKUP" "                                       " 9
+at_xfail=no
+(
+  $as_echo "180. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%error-verbose
+%debug
+%pure-parser
+%code {
+# include <stdio.h>
+# include <stdlib.h>
+# include <assert.h>
+
+  static void yyerror ( const char *msg);
+  static int yylex (YYSTYPE *lvalp);
+}
+%%
+input:
+  exp exp {}
+;
+
+exp:
+  'a'     { printf ("a: %d\n", $1); }
+| 'b'     { YYBACKUP('a', 123); }
+| 'c' 'd' { YYBACKUP('a', 456); }
+;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (YYSTYPE *lvalp)
+{
+  static char const input[] = "bcd";
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  *lvalp = (toknum + 1) * 10;
+  return res;
+}
+
+int
+main (void)
+{
+  yydebug = !!getenv("YYDEBUG");
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/actions.at:1749: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "actions.at:1749"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1749"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/actions.at:1749: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "actions.at:1749"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1749"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1749: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1749"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1749"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/actions.at:1749: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "actions.at:1749"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1749"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/actions.at:1749: bison -o input.c input.y"
+at_fn_check_prepare_trace "actions.at:1749"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1749"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1750: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "actions.at:1750"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1750"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1750: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "actions.at:1750"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1750"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1751:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "actions.at:1751"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "a: 123
+a: 456
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/actions.at:1751: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "actions.at:1751"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/actions.at:1751"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_180
+#AT_START_181
+at_fn_group_banner 181 'conflicts.at:31' \
+  "S/R in initial" "                                 " 10
+at_xfail=no
+(
+  $as_echo "181. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -9751,83 +49361,470 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:43: bison -o input.c input.y"
-echo conflicts.at:43 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:4.9: warning: rule never reduced because of conflicts: e: /* empty */
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:43: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:40"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:40"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:40"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:40"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:40: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:40"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:4.9: warning: rule useless in parser due to conflicts: e: /* empty */
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror" "conflicts.at:40"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:4.9: warning: rule useless in parser due to conflicts: e: /* empty */
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:40"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error" "conflicts.at:40"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror" "conflicts.at:40"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:40: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror" "conflicts.at:40"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -fcaret -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:44"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y" "conflicts.at:44"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:44"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:44"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:44: bison -fcaret -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:44"
+( $at_check_trace; bison -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:4.9: warning: rule useless in parser due to conflicts
+ e: 'e' | /* Nothing. */;
+         ^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror" "conflicts.at:44"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:4.9: warning: rule useless in parser due to conflicts
+ e: 'e' | /* Nothing. */;
+         ^
+_ATEOF
 
-  59 ) # 59. conflicts.at:52: %nonassoc and eof
-    at_setup_line='conflicts.at:52'
-    at_desc='%nonassoc and eof'
-    $at_quiet $ECHO_N " 59: %nonassoc and eof                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "59. conflicts.at:52: testing ..."
-      $at_traceon
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:44"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error" "conflicts.at:44"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror" "conflicts.at:44"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:44: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror" "conflicts.at:44"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_181
+#AT_START_182
+at_fn_group_banner 182 'conflicts.at:57' \
+  "%nonassoc and eof" "                              " 10
+at_xfail=no
+(
+  $as_echo "182. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %{
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
+#include <assert.h>
 
 #define YYERROR_VERBOSE 1
-static void
-yyerror (const char *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
 /* The current argument. */
-static const char *input = NULL;
+static const char *input;
 
 static int
 yylex (void)
 {
-  /* No token stands for end of file. */
-  if (input && *input)
-    return *input++;
-  else
-    return 0;
+  static size_t toknum;
+  assert (toknum <= strlen (input));
+  return input[toknum++];
 }
 
 %}
@@ -9843,214 +49840,5888 @@
 int
 main (int argc, const char *argv[])
 {
-  if (argc > 1)
-    input = argv[1];
+  input = argc <= 1 ? "" : argv[1];
   return yyparse ();
 }
 _ATEOF
 
 
 
-# Specify the output files to avoid problems on different file systems.
-$at_traceoff
-echo "conflicts.at:100: bison -o input.c input.y"
-echo conflicts.at:100 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:100: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+# Expected token list is missing.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:123: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot  -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:123"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot  -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:123: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  -o input.c input.y" "conflicts.at:123"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml  -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:123: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:123"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:123: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:123"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123: bison  -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:123"
+( $at_check_trace; bison  -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "conflicts.at:101: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo conflicts.at:101 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:101: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:123"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:123"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123:  \$PREPARSER ./input '0<0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0'" "conflicts.at:123"
+( $at_check_trace;  $PREPARSER ./input '0<0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:123"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123:  \$PREPARSER ./input '0<0<0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0<0'" "conflicts.at:123"
+( $at_check_trace;  $PREPARSER ./input '0<0<0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:123"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '<'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123:  \$PREPARSER ./input '0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0>0'" "conflicts.at:123"
+( $at_check_trace;  $PREPARSER ./input '0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:123"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123:  \$PREPARSER ./input '0>0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0>0>0'" "conflicts.at:123"
+( $at_check_trace;  $PREPARSER ./input '0>0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:123"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '>'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123:  \$PREPARSER ./input '0<0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0>0'" "conflicts.at:123"
+( $at_check_trace;  $PREPARSER ./input '0<0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:123: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:123"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '>'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+# We must disable default reductions in inconsistent states in order to
+# have an explicit list of all expected tokens.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:127: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dlr.default-reductions=consistent -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:127"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dlr.default-reductions=consistent -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:127: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.default-reductions=consistent -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.default-reductions=consistent -o input.c input.y" "conflicts.at:127"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.default-reductions=consistent -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:127: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:127"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:127: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:127"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127: bison -Dlr.default-reductions=consistent -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:127"
+( $at_check_trace; bison -Dlr.default-reductions=consistent -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "conflicts.at:103: \$PREPARSER ./input '0<0'"
-echo conflicts.at:103 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '0<0' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:103: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:127"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:127"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127:  \$PREPARSER ./input '0<0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0'" "conflicts.at:127"
+( $at_check_trace;  $PREPARSER ./input '0<0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:127"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127:  \$PREPARSER ./input '0<0<0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0<0'" "conflicts.at:127"
+( $at_check_trace;  $PREPARSER ./input '0<0<0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:127"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '<', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127:  \$PREPARSER ./input '0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0>0'" "conflicts.at:127"
+( $at_check_trace;  $PREPARSER ./input '0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:127"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127:  \$PREPARSER ./input '0>0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0>0>0'" "conflicts.at:127"
+( $at_check_trace;  $PREPARSER ./input '0>0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:127"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '>', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127:  \$PREPARSER ./input '0<0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0>0'" "conflicts.at:127"
+( $at_check_trace;  $PREPARSER ./input '0<0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:127: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:127"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '>', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:127"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+# lr.default-reductions=consistent happens to work for this test case.
+# However, for other grammars, lookahead sets can be merged for
+# different left contexts, so it is still possible to have an incorrect
+# expected list.  Canonical LR is almost a general solution (that is, it
+# can fail only when %nonassoc is used), so make sure it gives the same
+# result as above.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:136: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dlr.type=canonical-lr -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:136"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dlr.type=canonical-lr -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:136: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=canonical-lr -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=canonical-lr -o input.c input.y" "conflicts.at:136"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=canonical-lr -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:136: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:136"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:136: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:136"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136: bison -Dlr.type=canonical-lr -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:136"
+( $at_check_trace; bison -Dlr.type=canonical-lr -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-# FIXME: This is an actual bug, but a new one, in the sense that
-# no one has ever spotted it!  The messages are *wrong*: there should
-# be nothing there, it should be expected eof.
-$at_traceoff
-echo "conflicts.at:109: \$PREPARSER ./input '0<0<0'"
-echo conflicts.at:109 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '0<0<0' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected '<', expecting '<' or '>'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "conflicts.at:109: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:136"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:136"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136:  \$PREPARSER ./input '0<0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0'" "conflicts.at:136"
+( $at_check_trace;  $PREPARSER ./input '0<0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:136"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136:  \$PREPARSER ./input '0<0<0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0<0'" "conflicts.at:136"
+( $at_check_trace;  $PREPARSER ./input '0<0<0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:136"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '<', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136:  \$PREPARSER ./input '0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0>0'" "conflicts.at:136"
+( $at_check_trace;  $PREPARSER ./input '0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:136"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136:  \$PREPARSER ./input '0>0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0>0>0'" "conflicts.at:136"
+( $at_check_trace;  $PREPARSER ./input '0>0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:136"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '>', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136:  \$PREPARSER ./input '0<0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0>0'" "conflicts.at:136"
+( $at_check_trace;  $PREPARSER ./input '0<0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:136: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:136"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '>', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+# parse.lac=full is a completely general solution that does not require
+# any of the above sacrifices.  Of course, it does not extend the
+# language-recognition power of LALR to (IE)LR, but it does ensure that
+# the reported list of expected tokens matches what the given parser
+# would have accepted in place of the unexpected token.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:143: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dparse.lac=full -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:143"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dparse.lac=full -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:143: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -o input.c input.y" "conflicts.at:143"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:143: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:143"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:143: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:143"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143: bison -Dparse.lac=full -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:143"
+( $at_check_trace; bison -Dparse.lac=full -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "conflicts.at:111: \$PREPARSER ./input '0>0'"
-echo conflicts.at:111 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '0>0' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:111: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:143"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:143"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143:  \$PREPARSER ./input '0<0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0'" "conflicts.at:143"
+( $at_check_trace;  $PREPARSER ./input '0<0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:143"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143:  \$PREPARSER ./input '0<0<0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0<0'" "conflicts.at:143"
+( $at_check_trace;  $PREPARSER ./input '0<0<0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:143"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '<', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143:  \$PREPARSER ./input '0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0>0'" "conflicts.at:143"
+( $at_check_trace;  $PREPARSER ./input '0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:143"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143:  \$PREPARSER ./input '0>0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0>0>0'" "conflicts.at:143"
+( $at_check_trace;  $PREPARSER ./input '0>0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:143"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '>', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143:  \$PREPARSER ./input '0<0>0'"
+at_fn_check_prepare_dynamic " $PREPARSER ./input '0<0>0'" "conflicts.at:143"
+( $at_check_trace;  $PREPARSER ./input '0<0>0'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:143: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:143"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '>', expecting \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_182
+#AT_START_183
+at_fn_group_banner 183 'conflicts.at:155' \
+  "%error-verbose and consistent errors" "           " 10
+at_xfail=no
+(
+  $as_echo "183. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+# Unfortunately, no expected tokens are reported even though 'b' can be
+# accepted.  Nevertheless, the main point of this test is to make sure
+# that at least the unexpected token is reported.  In a previous version
+# of Bison, it wasn't reported because the error is detected in a
+# consistent state with an error action, and that case always triggered
+# the simple "syntax error" message.
+#
+# The point isn't to test IELR here, but state merging happens to
+# complicate this example.
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.type ielr
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "a";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:299: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:299"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:299: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:299"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:299: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:299"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:299: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:299"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:299: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:299"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "conflicts.at:114: \$PREPARSER ./input '0>0>0'"
-echo conflicts.at:114 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '0>0>0' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected '>', expecting '<' or '>'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "conflicts.at:114: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:299: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:299"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:299: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:299"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:299:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:299"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:299: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:299"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.type ielr
+                             %glr-parser
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "a";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:303: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:303"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:303: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:303"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:303: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:303"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:303: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:303"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:303: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:303"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "conflicts.at:118: \$PREPARSER ./input '0<0>0'"
-echo conflicts.at:118 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input '0<0>0' ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected '>', expecting '<' or '>'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "conflicts.at:118: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:303: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:303"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:303: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:303"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:303:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:303"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:303: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:303"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <cassert>
+  #include <string>
+  int yylex (yy::parser::semantic_type *lvalp);
+  #define USE(Var)
+}
+
+%defines
+
+%define lr.type ielr
+                             %language "c++"
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (yy::parser::semantic_type *lvalp)
+{
+  static char const *input = "a";
+  *lvalp = 1;
+  return *input++;
+}
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << m << std::endl;
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  yy::parser parser;
+  return parser.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:308: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:308"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:308: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "conflicts.at:308"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:308: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:308"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:308: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:308"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:308: bison -o input.cc input.y"
+at_fn_check_prepare_trace "conflicts.at:308"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  60 ) # 60. conflicts.at:128: Unresolved SR Conflicts
-    at_setup_line='conflicts.at:128'
-    at_desc='Unresolved SR Conflicts'
-    $at_quiet $ECHO_N " 60: Unresolved SR Conflicts                      $ECHO_C"
-    at_xfail=no
-    (
-      echo "60. conflicts.at:128: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:308: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "conflicts.at:308"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:308: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "conflicts.at:308"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:308:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:308"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:308: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:308"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+
+
+%code imports {
+  import java.io.IOException;
+}
+
+%define lr.type ielr
+                             %language "java"
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%code lexer {
+
+/*--------.
+| yylex.  |
+`--------*/
+
+public String input = "a";
+public int index = 0;
+public int yylex ()
+{
+  if (index < input.length ())
+    return input.charAt (index++);
+  else
+    return 0;
+}
+public Object getLVal ()
+{
+  return new Integer(1);
+}
+
+  public void yyerror (String s)
+  {
+    System.err.println (s);
+  }
+
+};
+
+%%
+
+/*-------.
+| main.  |
+`-------*/
+
+class input
+{
+  public static void main (String args[]) throws IOException
+  {
+    YYParser p = new YYParser ();
+    p.parse ();
+  }
+}
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:313: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.java input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:313"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:313"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:313: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.java input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.java input.y" "conflicts.at:313"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:313"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:313: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:313"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:313"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:313: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:313"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:313"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:313: bison -o input.java input.y"
+at_fn_check_prepare_trace "conflicts.at:313"
+( $at_check_trace; bison -o input.java input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:313"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "conflicts.at:313" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/conflicts.at:313"
+$as_echo "conflicts.at:313" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/conflicts.at:313"
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:313: \$SHELL ../../../javacomp.sh input.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh input.java" "conflicts.at:313"
+( $at_check_trace; $SHELL ../../../javacomp.sh input.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:313"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:313:  \$SHELL ../../../javaexec.sh input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh input" "conflicts.at:313"
+( $at_check_trace;  $SHELL ../../../javaexec.sh input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected end of input
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:313"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+# Even canonical LR doesn't foresee the error for 'a'!
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.type ielr
+                             %define lr.default-reductions consistent
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "a";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:320: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:320"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:320: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:320"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:320: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:320"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:320: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:320"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:320: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:320"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:320: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:320"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:320: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:320"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:320:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:320"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:320: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:320"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end, expecting 'a' or 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.type ielr
+                             %define lr.default-reductions accepting
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "a";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:325: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:325"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:325: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:325"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:325: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:325"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:325: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:325"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:325: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:325"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:325: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:325"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:325: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:325"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:325:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:325"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:325: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:325"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end, expecting 'a' or 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.type canonical-lr
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "a";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:330: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:330"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:330: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:330"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:330: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:330"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:330: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:330"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:330: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:330"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:330: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:330"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:330: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:330"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:330:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:330"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:330: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:330"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end, expecting 'a' or 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:330"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+# Only LAC gets it right.
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.type canonical-lr
+                             %define parse.lac full
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "a";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:336: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:336"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:336: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:336"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:336: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:336"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:336: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:336"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:336: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:336"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:336: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:336"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:336: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:336"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:336:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:336"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:336: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:336"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end, expecting 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:336"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.type ielr
+                             %define parse.lac full
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+start: consistent-error-on-a-a 'a' ;
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  | 'a' shift
+  ;
+
+default-reduction: /*empty*/ ;
+shift: 'b' ;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error-on-a-a 'c' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "a";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:341: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:341"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:341: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:341"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:341: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:341"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:341: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:341"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:341: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:341"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:341: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:341"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:341: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:341"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:341:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:341"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:341: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:341"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end, expecting 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($1, $2, $5)); }
+| 'a' error
+  { USE ($1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "aa";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:397: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:397"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:397: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:397"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:397: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:397"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:397: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:397"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:397: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:397"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:397: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:397"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:397: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:397"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:397:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:397"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:397: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:397"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%glr-parser
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($1, $2, $5)); }
+| 'a' error
+  { USE ($1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "aa";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:401: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:401"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:401: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:401"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:401: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:401"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:401: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:401"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:401: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:401"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:401: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:401"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:401: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:401"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:401:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:401"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:401: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:401"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:401"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <cassert>
+  #include <string>
+  int yylex (yy::parser::semantic_type *lvalp);
+  #define USE(Var)
+}
+
+%defines
+
+%language "c++"
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($1, $2, $5)); }
+| 'a' error
+  { USE ($1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == yyempty_);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (yy::parser::semantic_type *lvalp)
+{
+  static char const *input = "aa";
+  *lvalp = 1;
+  return *input++;
+}
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << m << std::endl;
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  yy::parser parser;
+  return parser.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:405: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:405"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:405: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "conflicts.at:405"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:405: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:405"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:405: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:405"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:405: bison -o input.cc input.y"
+at_fn_check_prepare_trace "conflicts.at:405"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:405: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "conflicts.at:405"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:405: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "conflicts.at:405"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:405:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:405"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:405: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:405"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+# No Java test because yychar cannot be manipulated by users.
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.default-reductions consistent
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($1, $2, $5)); }
+| 'a' error
+  { USE ($1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "aa";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:411: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:411"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:411: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:411"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:411: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:411"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:411: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:411"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:411: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:411"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:411: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:411"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:411: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:411"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:411:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:411"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:411: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:411"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+# Canonical LR doesn't foresee the error for 'a'!
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.default-reductions accepting
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($1, $2, $5)); }
+| 'a' error
+  { USE ($1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "aa";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:417: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:417"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:417: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:417"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:417: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:417"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:417: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:417"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:417: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:417"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:417: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:417"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:417: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:417"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:417:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:417"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:417: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:417"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end, expecting 'a'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define lr.type canonical-lr
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($1, $2, $5)); }
+| 'a' error
+  { USE ($1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "aa";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:421: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:421"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:421: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:421"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:421: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:421"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:421: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:421"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:421: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:421"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:421: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:421"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:421: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:421"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:421:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:421"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:421: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:421"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end, expecting 'a'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:421"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define parse.lac full
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($1, $2, $5)); }
+| 'a' error
+  { USE ($1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "aa";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:426: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:426"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:426: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:426"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:426: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:426"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:426: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:426"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:426: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:426"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:426: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:426"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:426: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:426"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:426:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:426"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:426: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:426"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:426"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+
+%code {
+  #include <assert.h>
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *lvalp);
+  #define USE(Var)
+}
+
+%define api.pure
+
+%define parse.lac full
+                             %define lr.default-reductions accepting
+
+%error-verbose
+
+%%
+
+%nonassoc 'a';
+
+// If $$ = 0 here, then we know that the 'a' destructor is being invoked
+// incorrectly for the 'b' set in the semantic action below.  All 'a'
+// tokens are returned by yylex, which sets $$ = 1.
+%destructor {
+  if (!$$)
+    fprintf (stderr, "Wrong destructor.\n");
+} 'a';
+
+// Rather than depend on an inconsistent state to induce reading a
+// lookahead as in the previous grammar, just assign the lookahead in a
+// semantic action.  That lookahead isn't needed before either error
+// action is encountered.  In a previous version of Bison, this was a
+// problem as it meant yychar was not translated into yytoken before
+// either error action.  The second error action thus invoked a
+// destructor that it selected according to the incorrect yytoken.  The
+// first error action would have reported an incorrect unexpected token
+// except that, due to the bug described in the previous grammar, the
+// unexpected token was not reported at all.
+start: error-reduce consistent-error 'a' { USE ($3); } ;
+
+error-reduce:
+  'a' 'a' consistent-reduction consistent-error 'a'
+  { USE (($1, $2, $5)); }
+| 'a' error
+  { USE ($1); }
+;
+
+consistent-reduction: /*empty*/ {
+  assert (yychar == YYEMPTY);
+  yylval = 0;
+  yychar = 'b';
+} ;
+
+consistent-error:
+  'a' { USE ($1); }
+| /*empty*/ %prec 'a'
+;
+
+// Provide another context in which all rules are useful so that this
+// test case looks a little more realistic.
+start: 'b' consistent-error 'b' ;
+
+
+%%
+
+/*--------.
+| yylex.  |
+`--------*/
+
+int yylex (YYSTYPE *lvalp)
+{
+  static char const *input = "aa";
+  *lvalp = 1;
+  return *input++;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+/*-------.
+| main.  |
+`-------*/
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:430: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:430"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:430: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:430"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:430: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:430"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:430: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:430"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:430: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:430"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/conflicts.at:430: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:430"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:430: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:430"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:430:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:430"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:430: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:430"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected \$end
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_183
+#AT_START_184
+at_fn_group_banner 184 'conflicts.at:456' \
+  "LAC: %nonassoc requires splitting canonical LR states" "" 10
+at_xfail=no
+(
+  $as_echo "184. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%error-verbose
+%nonassoc 'a'
+
+%%
+
+start:
+  'a' problem 'a' // First context.
+| 'b' problem 'b' // Second context.
+| 'c' reduce-nonassoc // Just makes reduce-nonassoc useful.
+;
+
+problem:
+  look reduce-nonassoc
+| look 'a'
+| look 'b'
+;
+
+// For the state reached after shifting the 'a' in these productions,
+// lookahead sets are the same in both the first and second contexts.
+// Thus, canonical LR reuses the same state for both contexts.  However,
+// the lookahead 'a' for the reduction "look: 'a'" later becomes an
+// error action only in the first context.  In order to immediately
+// detect the syntax error on 'a' here for only the first context, this
+// canonical LR state would have to be split into two states, and the
+// 'a' lookahead would have to be removed from only one of the states.
+look:
+  'a' // Reduction lookahead set is always ['a', 'b'].
+| 'a' 'b'
+| 'a' 'c' // 'c' is forgotten as an expected token.
+;
+
+reduce-nonassoc: %prec 'a';
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "aaa";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+# Show canonical LR's failure.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:511: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dlr.type=canonical-lr -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:511"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dlr.type=canonical-lr -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:511: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=canonical-lr -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=canonical-lr -o input.c input.y" "conflicts.at:511"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=canonical-lr -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:511: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:511"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:511: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:511"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:511: bison -Dlr.type=canonical-lr -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:511"
+( $at_check_trace; bison -Dlr.type=canonical-lr -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 2 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:515: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:515"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:515: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:515"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:516:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:516"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:516: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:516"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'a', expecting 'b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# It's corrected by LAC.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:521: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dlr.type=canonical-lr -Dparse.lac=full \\
+                 -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:521"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dlr.type=canonical-lr -Dparse.lac=full \
+                 -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:521: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=canonical-lr -Dparse.lac=full \\
+                 -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:521"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=canonical-lr -Dparse.lac=full \
+                 -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:521: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:521"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:521: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:521"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:521: bison -Dlr.type=canonical-lr -Dparse.lac=full \\
+                 -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:521"
+( $at_check_trace; bison -Dlr.type=canonical-lr -Dparse.lac=full \
+                 -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 2 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:525: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:525"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:525"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:525: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:525"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:525"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:526:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:526"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:526"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:526: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:526"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'a', expecting 'b' or 'c'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:526"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# IELR is sufficient when LAC is used.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:531: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dlr.type=ielr -Dparse.lac=full -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:531"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dlr.type=ielr -Dparse.lac=full -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:531: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=ielr -Dparse.lac=full -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=ielr -Dparse.lac=full -o input.c input.y" "conflicts.at:531"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dlr.type=ielr -Dparse.lac=full -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:531: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:531"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:531: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:531"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:531: bison -Dlr.type=ielr -Dparse.lac=full -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:531"
+( $at_check_trace; bison -Dlr.type=ielr -Dparse.lac=full -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 2 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:535: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "conflicts.at:535"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:535"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:535: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "conflicts.at:535"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:535"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:536:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "conflicts.at:536"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:536: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "conflicts.at:536"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'a', expecting 'b' or 'c'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_184
+#AT_START_185
+at_fn_group_banner 185 'conflicts.at:546' \
+  "Unresolved SR Conflicts" "                        " 10
+at_xfail=no
+(
+  $as_echo "185. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -10062,44 +55733,105 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:140: bison -o input.c --report=all input.y"
-echo conflicts.at:140 >$at_check_line_file
-( $at_traceon; bison -o input.c --report=all input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: conflicts: 1 shift/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:140: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:556: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c --report=all input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:556"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:556: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y" "conflicts.at:556"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:556: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:556"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:556: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:556"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:556: bison -o input.c --report=all input.y"
+at_fn_check_prepare_trace "conflicts.at:556"
+( $at_check_trace; bison -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Check the contents of the report.
-$at_traceoff
-echo "conflicts.at:225: cat input.output"
-echo conflicts.at:225 >$at_check_line_file
-( $at_traceon; cat input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "State 5 conflicts: 1 shift/reduce
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:561: cat input.output"
+at_fn_check_prepare_trace "conflicts.at:561"
+( $at_check_trace; cat input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 5 conflicts: 1 shift/reduce
 
 
 Grammar
@@ -10126,7 +55858,7 @@
     on left: 1 2, on right: 0 1
 
 
-state 0
+State 0
 
     0 \$accept: . exp \$end
     1 exp: . exp OP exp
@@ -10137,14 +55869,14 @@
     exp  go to state 2
 
 
-state 1
+State 1
 
     2 exp: NUM .
 
     \$default  reduce using rule 2 (exp)
 
 
-state 2
+State 2
 
     0 \$accept: exp . \$end
     1 exp: exp . OP exp
@@ -10153,14 +55885,14 @@
     OP    shift, and go to state 4
 
 
-state 3
+State 3
 
     0 \$accept: exp \$end .
 
     \$default  accept
 
 
-state 4
+State 4
 
     1 exp: . exp OP exp
     1    | exp OP . exp
@@ -10171,46 +55903,34 @@
     exp  go to state 5
 
 
-state 5
+State 5
 
-    1 exp: exp . OP exp  [\$end, OP]
+    1 exp: exp . OP exp
     1    | exp OP exp .  [\$end, OP]
 
     OP  shift, and go to state 4
 
     OP        [reduce using rule 1 (exp)]
     \$default  reduce using rule 1 (exp)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:225: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:561"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  61 ) # 61. conflicts.at:235: Resolved SR Conflicts
-    at_setup_line='conflicts.at:235'
-    at_desc='Resolved SR Conflicts'
-    $at_quiet $ECHO_N " 61: Resolved SR Conflicts                        $ECHO_C"
-    at_xfail=no
-    (
-      echo "61. conflicts.at:235: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_185
+#AT_START_186
+at_fn_group_banner 186 'conflicts.at:653' \
+  "Resolved SR Conflicts" "                          " 10
+at_xfail=no
+(
+  $as_echo "186. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -10223,43 +55943,103 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:246: bison -o input.c --report=all input.y"
-echo conflicts.at:246 >$at_check_line_file
-( $at_traceon; bison -o input.c --report=all input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:246: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:664: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c --report=all input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:664"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:664: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y" "conflicts.at:664"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:664: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:664"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:664: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:664"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:664: bison -o input.c --report=all input.y"
+at_fn_check_prepare_trace "conflicts.at:664"
+( $at_check_trace; bison -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Check the contents of the report.
-$at_traceoff
-echo "conflicts.at:327: cat input.output"
-echo conflicts.at:327 >$at_check_line_file
-( $at_traceon; cat input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Grammar
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:667: cat input.output"
+at_fn_check_prepare_trace "conflicts.at:667"
+( $at_check_trace; cat input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Grammar
 
     0 \$accept: exp \$end
 
@@ -10283,7 +56063,7 @@
     on left: 1 2, on right: 0 1
 
 
-state 0
+State 0
 
     0 \$accept: . exp \$end
     1 exp: . exp OP exp
@@ -10294,14 +56074,14 @@
     exp  go to state 2
 
 
-state 1
+State 1
 
     2 exp: NUM .
 
     \$default  reduce using rule 2 (exp)
 
 
-state 2
+State 2
 
     0 \$accept: exp . \$end
     1 exp: exp . OP exp
@@ -10310,14 +56090,14 @@
     OP    shift, and go to state 4
 
 
-state 3
+State 3
 
     0 \$accept: exp \$end .
 
     \$default  accept
 
 
-state 4
+State 4
 
     1 exp: . exp OP exp
     1    | exp OP . exp
@@ -10328,45 +56108,33 @@
     exp  go to state 5
 
 
-state 5
+State 5
 
-    1 exp: exp . OP exp  [\$end, OP]
+    1 exp: exp . OP exp
     1    | exp OP exp .  [\$end, OP]
 
     \$default  reduce using rule 1 (exp)
 
     Conflict between rule 1 and token OP resolved as reduce (%left OP).
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:327: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  62 ) # 62. conflicts.at:357: Defaulted Conflicted Reduction
-    at_setup_line='conflicts.at:357'
-    at_desc='Defaulted Conflicted Reduction'
-    $at_quiet $ECHO_N " 62: Defaulted Conflicted Reduction               $ECHO_C"
-    at_xfail=no
-    (
-      echo "62. conflicts.at:357: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_186
+#AT_START_187
+at_fn_group_banner 187 'conflicts.at:775' \
+  "Defaulted Conflicted Reduction" "                 " 10
+at_xfail=no
+(
+  $as_echo "187. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -10379,45 +56147,224 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:371: bison -o input.c --report=all input.y"
-echo conflicts.at:371 >$at_check_line_file
-( $at_traceon; bison -o input.c --report=all input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: conflicts: 1 reduce/reduce
-input.y:4.6-8: warning: rule never reduced because of conflicts: id: '0'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:371: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c --report=all input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:786"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y" "conflicts.at:786"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:786"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:786"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:786: bison -o input.c --report=all input.y"
+at_fn_check_prepare_trace "conflicts.at:786"
+( $at_check_trace; bison -o input.c --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 reduce/reduce
+input.y:4.6-8: warning: rule useless in parser due to conflicts: id: '0'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c --report=all input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c --report=all input.y -Werror" "conflicts.at:786"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c --report=all input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y: conflicts: 1 reduce/reduce
+input.y:4.6-8: warning: rule useless in parser due to conflicts: id: '0'
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:786"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c --report=all input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c --report=all input.y --warnings=error" "conflicts.at:786"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c --report=all input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c --report=all input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c --report=all input.y -Wnone -Werror" "conflicts.at:786"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c --report=all input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:786: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c --report=all input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c --report=all input.y --warnings=none -Werror" "conflicts.at:786"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c --report=all input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:786"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
-
-
 # Check the contents of the report.
-$at_traceoff
-echo "conflicts.at:465: cat input.output"
-echo conflicts.at:465 >$at_check_line_file
-( $at_traceon; cat input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Rules never reduced
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:792: cat input.output"
+at_fn_check_prepare_trace "conflicts.at:792"
+( $at_check_trace; cat input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Rules useless in parser due to conflicts
 
     4 id: '0'
 
@@ -10456,7 +56403,7 @@
     on left: 4, on right: 2
 
 
-state 0
+State 0
 
     0 \$accept: . exp \$end
     1 exp: . num
@@ -10471,7 +56418,7 @@
     id   go to state 4
 
 
-state 1
+State 1
 
     3 num: '0' .  [\$end]
     4 id: '0' .  [\$end]
@@ -10481,63 +56428,51 @@
     \$default  reduce using rule 3 (num)
 
 
-state 2
+State 2
 
     0 \$accept: exp . \$end
 
     \$end  shift, and go to state 5
 
 
-state 3
+State 3
 
     1 exp: num .
 
     \$default  reduce using rule 1 (exp)
 
 
-state 4
+State 4
 
     2 exp: id .
 
     \$default  reduce using rule 2 (exp)
 
 
-state 5
+State 5
 
     0 \$accept: exp \$end .
 
     \$default  accept
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:465: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:792"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  63 ) # 63. conflicts.at:476: %expect not enough
-    at_setup_line='conflicts.at:476'
-    at_desc='%expect not enough'
-    $at_quiet $ECHO_N " 63: %expect not enough                           $ECHO_C"
-    at_xfail=no
-    (
-      echo "63. conflicts.at:476: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_187
+#AT_START_188
+at_fn_group_banner 188 'conflicts.at:894' \
+  "%expect not enough" "                             " 10
+at_xfail=no
+(
+  $as_echo "188. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -10548,47 +56483,36 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:488: bison -o input.c input.y"
-echo conflicts.at:488 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: conflicts: 1 shift/reduce
-input.y: expected 0 shift/reduce conflicts
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "conflicts.at:488: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:903: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y" "conflicts.at:903"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 shift/reduce
+input.y: error: expected 0 shift/reduce conflicts
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:903"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  64 ) # 64. conflicts.at:496: %expect right
-    at_setup_line='conflicts.at:496'
-    at_desc='%expect right'
-    $at_quiet $ECHO_N " 64: %expect right                                $ECHO_C"
-    at_xfail=no
-    (
-      echo "64. conflicts.at:496: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_188
+#AT_START_189
+at_fn_group_banner 189 'conflicts.at:914' \
+  "%expect right" "                                  " 10
+at_xfail=no
+(
+  $as_echo "189. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -10599,45 +56523,104 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:505: bison -o input.c input.y"
-echo conflicts.at:505 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:505: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:923: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:923"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:923"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:923: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:923"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:923"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:923: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:923"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:923"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:923: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:923"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:923"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:923: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:923"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:923"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  65 ) # 65. conflicts.at:513: %expect too much
-    at_setup_line='conflicts.at:513'
-    at_desc='%expect too much'
-    $at_quiet $ECHO_N " 65: %expect too much                             $ECHO_C"
-    at_xfail=no
-    (
-      echo "65. conflicts.at:513: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_189
+#AT_START_190
+at_fn_group_banner 190 'conflicts.at:931' \
+  "%expect too much" "                               " 10
+at_xfail=no
+(
+  $as_echo "190. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -10648,47 +56631,36 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:525: bison -o input.c input.y"
-echo conflicts.at:525 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: conflicts: 1 shift/reduce
-input.y: expected 2 shift/reduce conflicts
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "conflicts.at:525: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:940: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y" "conflicts.at:940"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 shift/reduce
+input.y: error: expected 2 shift/reduce conflicts
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:940"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  66 ) # 66. conflicts.at:533: %expect with reduce conflicts
-    at_setup_line='conflicts.at:533'
-    at_desc='%expect with reduce conflicts'
-    $at_quiet $ECHO_N " 66: %expect with reduce conflicts                $ECHO_C"
-    at_xfail=no
-    (
-      echo "66. conflicts.at:533: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_190
+#AT_START_191
+at_fn_group_banner 191 'conflicts.at:951' \
+  "%expect with reduce conflicts" "                  " 10
+at_xfail=no
+(
+  $as_echo "191. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -10699,47 +56671,144 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:545: bison -o input.c input.y"
-echo conflicts.at:545 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: conflicts: 1 reduce/reduce
-input.y: expected 0 reduce/reduce conflicts
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "conflicts.at:545: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:960: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y" "conflicts.at:960"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 reduce/reduce
+input.y: error: expected 0 reduce/reduce conflicts
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:960"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_191
+#AT_START_192
+at_fn_group_banner 192 'conflicts.at:971' \
+  "%prec with user string" "                         " 10
+at_xfail=no
+(
+  $as_echo "192. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%%
+exp:
+  "foo" %prec "foo"
+;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:980: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:980"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:980"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:980: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:980"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:980"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:980: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:980"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:980"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:980: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:980"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:980"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:980: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:980"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:980"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  67 ) # 67. conflicts.at:553: %no-default-prec without %prec
-    at_setup_line='conflicts.at:553'
-    at_desc='%no-default-prec without %prec'
-    $at_quiet $ECHO_N " 67: %no-default-prec without %prec               $ECHO_C"
-    at_xfail=no
-    (
-      echo "67. conflicts.at:553: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_192
+#AT_START_193
+at_fn_group_banner 193 'conflicts.at:988' \
+  "%no-default-prec without %prec" "                 " 10
+at_xfail=no
+(
+  $as_echo "193. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -10757,46 +56826,106 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:571: bison -o input.c input.y"
-echo conflicts.at:571 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: conflicts: 4 shift/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:571: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1004: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1004"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1004"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1004: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:1004"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1004"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1004: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1004"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1004"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1004: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1004"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1004"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1004: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:1004"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 4 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1004"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  68 ) # 68. conflicts.at:579: %no-default-prec with %prec
-    at_setup_line='conflicts.at:579'
-    at_desc='%no-default-prec with %prec'
-    $at_quiet $ECHO_N " 68: %no-default-prec with %prec                  $ECHO_C"
-    at_xfail=no
-    (
-      echo "68. conflicts.at:579: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_193
+#AT_START_194
+at_fn_group_banner 194 'conflicts.at:1014' \
+  "%no-default-prec with %prec" "                    " 10
+at_xfail=no
+(
+  $as_echo "194. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -10814,45 +56943,104 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:595: bison -o input.c input.y"
-echo conflicts.at:595 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1030: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1030"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1030"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1030: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:1030"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1030"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1030: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1030"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1030"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1030: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1030"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1030"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1030: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:1030"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1030"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  69 ) # 69. conflicts.at:603: %default-prec
-    at_setup_line='conflicts.at:603'
-    at_desc='%default-prec'
-    $at_quiet $ECHO_N " 69: %default-prec                                $ECHO_C"
-    at_xfail=no
-    (
-      echo "69. conflicts.at:603: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_194
+#AT_START_195
+at_fn_group_banner 195 'conflicts.at:1038' \
+  "%default-prec" "                                  " 10
+at_xfail=no
+(
+  $as_echo "195. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -10870,80 +57058,1672 @@
 _ATEOF
 
 
-$at_traceoff
-echo "conflicts.at:619: bison -o input.c input.y"
-echo conflicts.at:619 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "conflicts.at:619: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1054: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1054"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1054"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1054: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "conflicts.at:1054"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1054"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1054: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1054"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1054"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1054: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1054"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1054"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1054: bison -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:1054"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1054"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-  banner-9 ) # Banner 9. calc.at:541
-    cat <<\_ATEOF
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_195
+#AT_START_196
+at_fn_group_banner 196 'conflicts.at:1062' \
+  "Unreachable States After Conflict Resolution" "   " 10
+at_xfail=no
+(
+  $as_echo "196. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-Simple LALR(1) Calculator.
+
+# If conflict resolution makes states unreachable, remove those states, report
+# rules that are then unused, and don't report conflicts in those states.  Test
+# what happens when a nonterminal becomes useless as a result of state removal
+# since that causes lalr.o's goto map to be rewritten.
+
+cat >input.y <<'_ATEOF'
+%output "input.c"
+%left 'a'
+
+%%
+
+start: resolved_conflict 'a' reported_conflicts 'a' ;
+
+/* S/R conflict resolved as reduce, so the state with item
+ * (resolved_conflict: 'a' . unreachable1) and all it transition successors are
+ * unreachable, and the associated production is useless.  */
+resolved_conflict:
+    'a' unreachable1
+  | %prec 'a'
+  ;
+
+/* S/R conflict that need not be reported since it is unreachable because of
+ * the previous conflict resolution.  Nonterminal unreachable1 and all its
+ * productions are useless.  */
+unreachable1:
+    'a' unreachable2
+  |
+  ;
+
+/* Likewise for a R/R conflict and nonterminal unreachable2.  */
+unreachable2: | ;
+
+/* Make sure remaining S/R and R/R conflicts are still reported correctly even
+ * when their states are renumbered due to state removal.  */
+reported_conflicts:
+    'a'
+  | 'a'
+  |
+  ;
 
 _ATEOF
-    ;;
 
-  70 ) # 70. calc.at:550: Calculator
-    at_setup_line='calc.at:550'
-    at_desc='Calculator '
-    $at_quiet $ECHO_N " 70: Calculator                                   $ECHO_C"
-    at_xfail=no
-    (
-      echo "70. calc.at:550: testing ..."
-      $at_traceon
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1106"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input.y" "conflicts.at:1106"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1106"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1106"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1106: bison --report=all input.y"
+at_fn_check_prepare_trace "conflicts.at:1106"
+( $at_check_trace; bison --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 shift/reduce, 1 reduce/reduce
+input.y:12.5-20: warning: rule useless in parser due to conflicts: resolved_conflict: 'a' unreachable1
+input.y:20.5-20: warning: rule useless in parser due to conflicts: unreachable1: 'a' unreachable2
+input.y:21.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
+input.y:25.13: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input.y:25.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input.y:31.5-7: warning: rule useless in parser due to conflicts: reported_conflicts: 'a'
+input.y:32.4: warning: rule useless in parser due to conflicts: reported_conflicts: /* empty */
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all input.y -Werror" "conflicts.at:1106"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y: conflicts: 1 shift/reduce, 1 reduce/reduce
+input.y:12.5-20: warning: rule useless in parser due to conflicts: resolved_conflict: 'a' unreachable1
+input.y:20.5-20: warning: rule useless in parser due to conflicts: unreachable1: 'a' unreachable2
+input.y:21.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
+input.y:25.13: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input.y:25.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input.y:31.5-7: warning: rule useless in parser due to conflicts: reported_conflicts: 'a'
+input.y:32.4: warning: rule useless in parser due to conflicts: reported_conflicts: /* empty */
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1106"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all input.y --warnings=error" "conflicts.at:1106"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all input.y -Wnone -Werror" "conflicts.at:1106"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1106: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all input.y --warnings=none -Werror" "conflicts.at:1106"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1117: cat input.output"
+at_fn_check_prepare_trace "conflicts.at:1117"
+( $at_check_trace; cat input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Rules useless in parser due to conflicts
+
+    2 resolved_conflict: 'a' unreachable1
+
+    4 unreachable1: 'a' unreachable2
+    5             | /* empty */
+
+    6 unreachable2: /* empty */
+    7             | /* empty */
+
+    9 reported_conflicts: 'a'
+   10                   | /* empty */
+
+
+State 4 conflicts: 1 shift/reduce
+State 5 conflicts: 1 reduce/reduce
+
+
+Grammar
+
+    0 \$accept: start \$end
+
+    1 start: resolved_conflict 'a' reported_conflicts 'a'
+
+    2 resolved_conflict: 'a' unreachable1
+    3                  | /* empty */
+
+    4 unreachable1: 'a' unreachable2
+    5             | /* empty */
+
+    6 unreachable2: /* empty */
+    7             | /* empty */
+
+    8 reported_conflicts: 'a'
+    9                   | 'a'
+   10                   | /* empty */
+
+
+Terminals, with rules where they appear
+
+\$end (0) 0
+'a' (97) 1 2 4 8 9
+error (256)
+
+
+Nonterminals, with rules where they appear
+
+\$accept (4)
+    on left: 0
+start (5)
+    on left: 1, on right: 0
+resolved_conflict (6)
+    on left: 2 3, on right: 1
+unreachable1 (7)
+    on left: 4 5, on right: 2
+unreachable2 (8)
+    on left: 6 7, on right: 4
+reported_conflicts (9)
+    on left: 8 9 10, on right: 1
+
+
+State 0
+
+    0 \$accept: . start \$end
+    1 start: . resolved_conflict 'a' reported_conflicts 'a'
+    2 resolved_conflict: . 'a' unreachable1
+    3                  | .  ['a']
+
+    \$default  reduce using rule 3 (resolved_conflict)
+
+    start              go to state 1
+    resolved_conflict  go to state 2
+
+    Conflict between rule 3 and token 'a' resolved as reduce (%left 'a').
+
+
+State 1
+
+    0 \$accept: start . \$end
+
+    \$end  shift, and go to state 3
+
+
+State 2
+
+    1 start: resolved_conflict . 'a' reported_conflicts 'a'
+
+    'a'  shift, and go to state 4
+
+
+State 3
+
+    0 \$accept: start \$end .
+
+    \$default  accept
+
+
+State 4
+
+    1 start: resolved_conflict 'a' . reported_conflicts 'a'
+    8 reported_conflicts: . 'a'
+    9                   | . 'a'
+   10                   | .  ['a']
+
+    'a'  shift, and go to state 5
+
+    'a'  [reduce using rule 10 (reported_conflicts)]
+
+    reported_conflicts  go to state 6
+
+
+State 5
+
+    8 reported_conflicts: 'a' .  ['a']
+    9                   | 'a' .  ['a']
+
+    'a'       reduce using rule 8 (reported_conflicts)
+    'a'       [reduce using rule 9 (reported_conflicts)]
+    \$default  reduce using rule 8 (reported_conflicts)
+
+
+State 6
+
+    1 start: resolved_conflict 'a' reported_conflicts . 'a'
+
+    'a'  shift, and go to state 7
+
+
+State 7
+
+    1 start: resolved_conflict 'a' reported_conflicts 'a' .
+
+    \$default  reduce using rule 1 (start)
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1117"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input-keep.y <<'_ATEOF'
+%define lr.keep-unreachable-states
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1256: cat input.y >> input-keep.y"
+at_fn_check_prepare_trace "conflicts.at:1256"
+( $at_check_trace; cat input.y >> input-keep.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1256"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot input-keep.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1258"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot input-keep.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input-keep.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input-keep.y" "conflicts.at:1258"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml input-keep.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1258"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1258"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1258: bison input-keep.y"
+at_fn_check_prepare_trace "conflicts.at:1258"
+( $at_check_trace; bison input-keep.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input-keep.y: conflicts: 2 shift/reduce, 2 reduce/reduce
+input-keep.y:22.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
+input-keep.y:26.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input-keep.y:32.5-7: warning: rule useless in parser due to conflicts: reported_conflicts: 'a'
+input-keep.y:33.4: warning: rule useless in parser due to conflicts: reported_conflicts: /* empty */
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-keep.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-keep.y -Werror" "conflicts.at:1258"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-keep.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input-keep.y: conflicts: 2 shift/reduce, 2 reduce/reduce
+input-keep.y:22.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
+input-keep.y:26.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
+input-keep.y:32.5-7: warning: rule useless in parser due to conflicts: reported_conflicts: 'a'
+input-keep.y:33.4: warning: rule useless in parser due to conflicts: reported_conflicts: /* empty */
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1258"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-keep.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-keep.y --warnings=error" "conflicts.at:1258"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-keep.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-keep.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-keep.y -Wnone -Werror" "conflicts.at:1258"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-keep.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1258: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-keep.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input-keep.y --warnings=none -Werror" "conflicts.at:1258"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input-keep.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_196
+#AT_START_197
+at_fn_group_banner 197 'conflicts.at:1273' \
+  "Solved conflicts report for multiple reductions in a state" "" 10
+at_xfail=no
+(
+  $as_echo "197. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Used to lose earlier solved conflict messages even within a single S/R/R.
+
+cat >input.y <<'_ATEOF'
+%left 'a'
+%right 'b'
+%right 'c'
+%right 'd'
+%%
+start:
+    'a'
+  | empty_a 'a'
+  | 'b'
+  | empty_b 'b'
+  | 'c'
+  | empty_c1 'c'
+  | empty_c2 'c'
+  | empty_c3 'c'
+  ;
+empty_a: %prec 'a' ;
+empty_b: %prec 'b' ;
+empty_c1: %prec 'c' ;
+empty_c2: %prec 'c' ;
+empty_c3: %prec 'd' ;
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1299: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1299"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1299: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all -o input.c input.y" "conflicts.at:1299"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1299: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1299"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1299: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1299"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1299: bison --report=all -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:1299"
+( $at_check_trace; bison --report=all -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1300: cat input.output | sed -n '/^State 0\$/,/^State 1\$/p'"
+at_fn_check_prepare_notrace 'a shell pipeline' "conflicts.at:1300"
+( $at_check_trace; cat input.output | sed -n '/^State 0$/,/^State 1$/p'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . start \$end
+    1 start: . 'a'
+    2      | . empty_a 'a'
+    3      | . 'b'
+    4      | . empty_b 'b'
+    5      | . 'c'
+    6      | . empty_c1 'c'
+    7      | . empty_c2 'c'
+    8      | . empty_c3 'c'
+    9 empty_a: .  ['a']
+   10 empty_b: .  []
+   11 empty_c1: .  []
+   12 empty_c2: .  []
+   13 empty_c3: .  ['c']
+
+    'b'  shift, and go to state 1
+
+    'c'       reduce using rule 13 (empty_c3)
+    \$default  reduce using rule 9 (empty_a)
+
+    start     go to state 2
+    empty_a   go to state 3
+    empty_b   go to state 4
+    empty_c1  go to state 5
+    empty_c2  go to state 6
+    empty_c3  go to state 7
+
+    Conflict between rule 9 and token 'a' resolved as reduce (%left 'a').
+    Conflict between rule 10 and token 'b' resolved as shift (%right 'b').
+    Conflict between rule 11 and token 'c' resolved as shift (%right 'c').
+    Conflict between rule 12 and token 'c' resolved as shift (%right 'c').
+    Conflict between rule 13 and token 'c' resolved as reduce ('c' < 'd').
+
+
+State 1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_197
+#AT_START_198
+at_fn_group_banner 198 'conflicts.at:1353' \
+  "%nonassoc error actions for multiple reductions in a state" "" 10
+at_xfail=no
+(
+  $as_echo "198. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%nonassoc 'a' 'b' 'c'
+%%
+start:
+    'a'
+  | empty_a 'a'
+  | 'b'
+  | empty_b 'b'
+  | 'c'
+  | empty_c1 'c'
+  | empty_c2 'c'
+  | empty_c3 'c'
+  ;
+empty_a: %prec 'a' ;
+empty_b: %prec 'b' ;
+empty_c1: %prec 'c' ;
+empty_c2: %prec 'c' ;
+empty_c3: %prec 'c' ;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1375: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1375"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1375"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1375: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all -o input.c input.y" "conflicts.at:1375"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1375"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1375: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1375"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1375"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1375: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1375"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1375"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1375: bison --report=all -o input.c input.y"
+at_fn_check_prepare_trace "conflicts.at:1375"
+( $at_check_trace; bison --report=all -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1375"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1376: cat input.output | sed -n '/^State 0\$/,/^State 1\$/p'"
+at_fn_check_prepare_notrace 'a shell pipeline' "conflicts.at:1376"
+( $at_check_trace; cat input.output | sed -n '/^State 0$/,/^State 1$/p'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 0
+
+    0 \$accept: . start \$end
+    1 start: . 'a'
+    2      | . empty_a 'a'
+    3      | . 'b'
+    4      | . empty_b 'b'
+    5      | . 'c'
+    6      | . empty_c1 'c'
+    7      | . empty_c2 'c'
+    8      | . empty_c3 'c'
+    9 empty_a: .  []
+   10 empty_b: .  []
+   11 empty_c1: .  []
+   12 empty_c2: .  ['c']
+   13 empty_c3: .  ['c']
+
+    'a'  error (nonassociative)
+    'b'  error (nonassociative)
+    'c'  error (nonassociative)
+
+    'c'  [reduce using rule 12 (empty_c2)]
+    'c'  [reduce using rule 13 (empty_c3)]
+
+    start     go to state 1
+    empty_a   go to state 2
+    empty_b   go to state 3
+    empty_c1  go to state 4
+    empty_c2  go to state 5
+    empty_c3  go to state 6
+
+    Conflict between rule 9 and token 'a' resolved as an error (%nonassoc 'a').
+    Conflict between rule 10 and token 'b' resolved as an error (%nonassoc 'b').
+    Conflict between rule 11 and token 'c' resolved as an error (%nonassoc 'c').
+
+
+State 1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1376"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_198
+#AT_START_199
+at_fn_group_banner 199 'conflicts.at:1422' \
+  "-W versus %expect and %expect-rr" "               " 10
+at_xfail=no
+(
+  $as_echo "199. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >sr-rr.y <<'_ATEOF'
+%glr-parser
+%%
+start: 'a' | A 'a' | B 'a' ;
+A: ;
+B: ;
+_ATEOF
+
+cat >sr.y <<'_ATEOF'
+%glr-parser
+%%
+start: 'a' | A 'a' ;
+A: ;
+_ATEOF
+
+cat >rr.y <<'_ATEOF'
+%glr-parser
+%%
+start: A | B ;
+A: ;
+B: ;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1445: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot sr-rr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1445"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1445"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1445: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml sr-rr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml sr-rr.y" "conflicts.at:1445"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1445"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1445: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1445"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1445"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1445: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1445"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1445"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1445: bison sr-rr.y"
+at_fn_check_prepare_trace "conflicts.at:1445"
+( $at_check_trace; bison sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sr-rr.y: conflicts: 1 shift/reduce, 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1445"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1448: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Wno-conflicts-sr sr-rr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1448"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Wno-conflicts-sr sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1448"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1448: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-conflicts-sr sr-rr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-conflicts-sr sr-rr.y" "conflicts.at:1448"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-conflicts-sr sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1448"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1448: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1448"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1448"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1448: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1448"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1448"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1448: bison -Wno-conflicts-sr sr-rr.y"
+at_fn_check_prepare_trace "conflicts.at:1448"
+( $at_check_trace; bison -Wno-conflicts-sr sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sr-rr.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1448"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1451: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Wno-conflicts-rr sr-rr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1451"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Wno-conflicts-rr sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1451"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1451: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-conflicts-rr sr-rr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-conflicts-rr sr-rr.y" "conflicts.at:1451"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wno-conflicts-rr sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1451"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1451: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1451"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1451"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1451: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1451"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1451"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1451: bison -Wno-conflicts-rr sr-rr.y"
+at_fn_check_prepare_trace "conflicts.at:1451"
+( $at_check_trace; bison -Wno-conflicts-rr sr-rr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "sr-rr.y: conflicts: 1 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1451"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
+for gram in sr-rr sr rr; do
+  for sr_exp_i in '' 0 1 2; do
+    for rr_exp_i in '' 0 1 2; do
+      test -z "$sr_exp_i" && test -z "$rr_exp_i" && continue
+
+      # Build grammar file.
+      sr_exp=0
+      rr_exp=0
+      file=$gram
+      directives=
+      if test -n "$sr_exp_i"; then
+        sr_exp=$sr_exp_i
+        file=$file-expect-$sr_exp
+        directives="%expect $sr_exp"
+      fi
+      if test -n "$rr_exp_i"; then
+        rr_exp=$rr_exp_i
+        file=$file-expect-rr-$rr_exp
+        directives="$directives %expect-rr $rr_exp"
+      fi
+      file=$file.y
+      echo "$directives" > $file
+      cat $gram.y >> $file
+
+      # Count actual conflicts.
+      conflicts=
+      sr_count=0
+      rr_count=0
+      if test $gram = sr || test $gram = sr-rr; then
+        conflicts="1 shift/reduce"
+        sr_count=1
+      fi
+      if test $gram = rr || test $gram = sr-rr; then
+        if test -n "$conflicts"; then
+          conflicts="$conflicts, "
+        fi
+        conflicts="${conflicts}1 reduce/reduce"
+        rr_count=1
+      fi
+
+      # Run tests.
+      if test $sr_count -eq $sr_exp && test $rr_count -eq $rr_exp; then
+        if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1497: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Wnone \$file"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1497"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Wnone $file
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1497: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wnone \$file"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wnone $file" "conflicts.at:1497"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Wnone $file
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1497: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1497"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1497: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1497"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1497: bison -Wnone \$file"
+at_fn_check_prepare_dynamic "bison -Wnone $file" "conflicts.at:1497"
+( $at_check_trace; bison -Wnone $file
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+        if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1498: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Werror \$file"
+at_fn_check_prepare_notrace 'an embedded newline' "conflicts.at:1498"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Werror $file
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1498: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Werror \$file"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Werror $file" "conflicts.at:1498"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Werror $file
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1498: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1498"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/conflicts.at:1498: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "conflicts.at:1498"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1498: bison -Werror \$file"
+at_fn_check_prepare_dynamic "bison -Werror $file" "conflicts.at:1498"
+( $at_check_trace; bison -Werror $file
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/conflicts.at:1498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+      else
+        echo "$file: conflicts: $conflicts" > experr
+        if test $sr_count -ne $sr_exp; then
+          if test $sr_exp -ne 1; then s=s; else s= ; fi
+          echo "$file: error: expected $sr_exp shift/reduce conflict$s" >> experr
+        fi
+        if test $rr_count -ne $rr_exp; then
+          if test $rr_exp -ne 1; then s=s; else s= ; fi
+          echo "$file: error: expected $rr_exp reduce/reduce conflict$s" >> experr
+        fi
+
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1509: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wnone \$file"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Wnone $file" "conflicts.at:1509"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Wnone $file
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
+{ set +x
+$as_echo "$at_srcdir/conflicts.at:1510: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Werror \$file"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -Werror $file" "conflicts.at:1510"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -Werror $file
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/conflicts.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-# Using yacc.c?
+      fi
+    done
+  done
+done
 
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_199
+#AT_START_200
+at_fn_group_banner 200 'calc.at:597' \
+  "Calculator " "                                    " 11
+at_xfail=no
+(
+  $as_echo "200. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -10955,59 +58735,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -11016,7 +58789,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -11049,25 +58822,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -11078,7 +58862,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -11113,32 +58896,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -11156,18 +58928,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -11193,10 +58967,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -11205,55 +58979,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:550: bison -o calc.c calc.y"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:597: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:597"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:597: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:597"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:597: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:597"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:597: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:597"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:550: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:597: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:597"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:597"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:597"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -11273,62 +59143,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -11339,18 +59213,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -11360,60 +59236,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -11424,18 +59290,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -11445,60 +59313,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -11509,18 +59367,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -11530,60 +59390,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -11594,18 +59444,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -11615,30 +59467,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -11646,30 +59486,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -11680,18 +59522,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -11701,57 +59545,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc /dev/null"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -11762,18 +59596,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -11783,30 +59619,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -11821,8 +59645,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -11830,30 +59654,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -11864,21 +59690,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -11889,63 +59717,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -11956,18 +59774,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -11978,60 +59798,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:550: \$PREPARSER ./calc input"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -12042,19 +59852,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -12065,94 +59877,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:550: cat stderr"
-echo calc.at:550 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:597:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:597"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:597: cat stderr"
+at_fn_check_prepare_trace "calc.at:597"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  71 ) # 71. calc.at:552: Calculator %defines
-    at_setup_line='calc.at:552'
-    at_desc='Calculator %defines'
-    $at_quiet $ECHO_N " 71: Calculator %defines                          $ECHO_C"
-    at_xfail=no
-    (
-      echo "71. calc.at:552: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_200
+#AT_START_201
+at_fn_group_banner 201 'calc.at:599' \
+  "Calculator %defines" "                            " 11
+at_xfail=no
+(
+  $as_echo "201. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -12164,59 +59999,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %defines
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -12225,7 +60053,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -12258,25 +60086,49 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -12287,7 +60139,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -12322,32 +60173,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -12364,19 +60204,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -12402,10 +60255,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -12414,55 +60267,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:552: bison -o calc.c calc.y"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:599: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:599"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:599: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:599"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:599: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:599"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:599: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:599"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:552: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:599: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:599"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:599"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:599"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:599"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -12482,62 +60458,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -12548,18 +60528,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -12569,60 +60551,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -12633,18 +60605,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -12654,60 +60628,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -12718,18 +60682,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -12739,60 +60705,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -12803,18 +60759,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -12824,30 +60782,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -12855,30 +60801,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -12889,18 +60837,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -12910,57 +60860,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc /dev/null"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -12971,18 +60911,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -12992,30 +60934,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -13030,8 +60960,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -13039,30 +60969,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -13073,21 +61005,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -13098,63 +61032,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -13165,18 +61089,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -13187,60 +61113,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:552: \$PREPARSER ./calc input"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -13251,19 +61167,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -13274,94 +61192,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:552: cat stderr"
-echo calc.at:552 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:552: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:599:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:599"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:599: cat stderr"
+at_fn_check_prepare_trace "calc.at:599"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:599"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  72 ) # 72. calc.at:553: Calculator %locations
-    at_setup_line='calc.at:553'
-    at_desc='Calculator %locations'
-    $at_quiet $ECHO_N " 72: Calculator %locations                        $ECHO_C"
-    at_xfail=no
-    (
-      echo "72. calc.at:553: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_201
+#AT_START_202
+at_fn_group_banner 202 'calc.at:600' \
+  "Calculator %locations" "                          " 11
+at_xfail=no
+(
+  $as_echo "202. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -13373,59 +61314,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %locations
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -13434,7 +61368,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -13467,34 +61401,38 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (yylloc).first_line, (yylloc).first_column);
-  if ((yylloc).first_line != (yylloc).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (yylloc).last_line,  (yylloc).last_column - 1);
-  else if ((yylloc).first_column != (yylloc).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (yylloc).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -13508,7 +61446,7 @@
   if (res == '\n')
     {
       (yylloc).last_line++;
-      (yylloc).last_column = 0;
+      (yylloc).last_column = 1;
     }
   else
     (yylloc).last_column++;
@@ -13516,7 +61454,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -13554,40 +61491,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (yylloc).last_column = 0;
-      (yylloc).last_line = 1;
-
-    }
-
-
- (yylloc).first_column = (yylloc).last_column;
-  (yylloc).first_line   = (yylloc).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (yylloc).first_column = (yylloc).last_column;
       (yylloc).first_line   = (yylloc).last_line;
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -13605,18 +61525,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -13642,10 +61564,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -13654,55 +61576,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:553: bison -o calc.c calc.y"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:600: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:600"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:600: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:600"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:600: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:600"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:600: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:600"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:553: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:600: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:600"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:600"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:600"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -13722,62 +61740,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -13788,18 +61810,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -13808,60 +61832,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -13872,18 +61886,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -13892,60 +61908,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -13956,18 +61962,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -13976,60 +61984,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -14040,18 +62038,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -14060,30 +62060,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -14091,30 +62079,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -14125,18 +62115,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -14145,57 +62137,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc /dev/null"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -14206,18 +62188,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -14226,30 +62210,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -14264,8 +62236,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -14273,30 +62245,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -14307,21 +62281,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -14331,63 +62307,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -14398,18 +62364,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -14419,60 +62387,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:553: \$PREPARSER ./calc input"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -14483,19 +62441,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -14505,94 +62465,116 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:553: cat stderr"
-echo calc.at:553 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:553: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:600:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:600"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:600: cat stderr"
+at_fn_check_prepare_trace "calc.at:600"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  73 ) # 73. calc.at:554: Calculator %name-prefix="calc"
-    at_setup_line='calc.at:554'
-    at_desc='Calculator %name-prefix="calc"'
-    $at_quiet $ECHO_N " 73: Calculator %name-prefix="calc"               $ECHO_C"
-    at_xfail=no
-    (
-      echo "73. calc.at:554: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_202
+#AT_START_203
+at_fn_group_banner 203 'calc.at:602' \
+  "Calculator %name-prefix=\"calc\"" "                 " 11
+at_xfail=no
+(
+  $as_echo "203. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -14604,59 +62586,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %name-prefix="calc"
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -14665,7 +62640,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -14698,25 +62673,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -14727,7 +62713,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -14762,32 +62747,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -14805,18 +62779,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -14842,10 +62818,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -14854,55 +62830,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:554: bison -o calc.c calc.y"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:602: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:602"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:602: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:602"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:602: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:602"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:602: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:602"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:554: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:602: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:602"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:602"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:602"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -14922,62 +62994,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -14988,18 +63064,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -15009,60 +63087,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -15073,18 +63141,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -15094,60 +63164,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -15158,18 +63218,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -15179,60 +63241,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -15243,18 +63295,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -15264,30 +63318,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -15295,30 +63337,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -15329,18 +63373,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -15350,57 +63396,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc /dev/null"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -15411,18 +63447,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -15432,30 +63470,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -15470,8 +63496,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -15479,30 +63505,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -15513,21 +63541,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -15538,63 +63568,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -15605,18 +63625,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -15627,60 +63649,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:554: \$PREPARSER ./calc input"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -15691,19 +63703,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -15714,94 +63728,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:554: cat stderr"
-echo calc.at:554 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:554: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:602:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:602"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:602: cat stderr"
+at_fn_check_prepare_trace "calc.at:602"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  74 ) # 74. calc.at:555: Calculator %verbose
-    at_setup_line='calc.at:555'
-    at_desc='Calculator %verbose'
-    $at_quiet $ECHO_N " 74: Calculator %verbose                          $ECHO_C"
-    at_xfail=no
-    (
-      echo "74. calc.at:555: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_203
+#AT_START_204
+at_fn_group_banner 204 'calc.at:603' \
+  "Calculator %verbose" "                            " 11
+at_xfail=no
+(
+  $as_echo "204. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -15813,59 +63850,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %verbose
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -15874,7 +63904,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -15907,25 +63937,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -15936,7 +63977,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -15971,32 +64011,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -16014,18 +64043,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -16051,10 +64082,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -16063,55 +64094,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:555: bison -o calc.c calc.y"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:603: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:603"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:603: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:603"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:603: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:603"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:603: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:603"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:555: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:603: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:603"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:603"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:603"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -16131,62 +64258,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16197,18 +64328,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -16218,60 +64351,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16282,18 +64405,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -16303,60 +64428,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16367,18 +64482,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -16388,60 +64505,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16452,18 +64559,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -16473,30 +64582,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -16504,30 +64601,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16538,18 +64637,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -16559,57 +64660,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc /dev/null"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16620,18 +64711,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -16641,30 +64734,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -16679,8 +64760,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -16688,30 +64769,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16722,21 +64805,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -16747,63 +64832,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16814,18 +64889,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -16836,60 +64913,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:555: \$PREPARSER ./calc input"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -16900,19 +64967,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -16923,94 +64992,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:555: cat stderr"
-echo calc.at:555 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:555: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:603:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:603"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:603: cat stderr"
+at_fn_check_prepare_trace "calc.at:603"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:603"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  75 ) # 75. calc.at:556: Calculator %yacc
-    at_setup_line='calc.at:556'
-    at_desc='Calculator %yacc'
-    $at_quiet $ECHO_N " 75: Calculator %yacc                             $ECHO_C"
-    at_xfail=no
-    (
-      echo "75. calc.at:556: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_204
+#AT_START_205
+at_fn_group_banner 205 'calc.at:604' \
+  "Calculator %yacc" "                               " 11
+at_xfail=no
+(
+  $as_echo "205. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -17022,59 +65114,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -17083,7 +65168,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -17116,25 +65201,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -17145,7 +65241,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -17180,32 +65275,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -17223,18 +65307,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -17260,10 +65346,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -17272,55 +65358,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:556: bison -o calc.c calc.y"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:604: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:604"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:604: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:604"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:604: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:604"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:604: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:604"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:556: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:604: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:604"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:604"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:604"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -17340,62 +65522,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -17406,18 +65592,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -17427,60 +65615,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -17491,18 +65669,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -17512,60 +65692,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -17576,18 +65746,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -17597,60 +65769,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -17661,18 +65823,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -17682,30 +65846,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -17713,30 +65865,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -17747,18 +65901,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -17768,57 +65924,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc /dev/null"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -17829,18 +65975,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -17850,30 +65998,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -17888,8 +66024,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -17897,30 +66033,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -17931,21 +66069,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -17956,63 +66096,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -18023,18 +66153,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -18045,60 +66177,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:556: \$PREPARSER ./calc input"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -18109,19 +66231,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -18132,94 +66256,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:556: cat stderr"
-echo calc.at:556 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:604:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:604"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:604: cat stderr"
+at_fn_check_prepare_trace "calc.at:604"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  76 ) # 76. calc.at:557: Calculator %error-verbose
-    at_setup_line='calc.at:557'
-    at_desc='Calculator %error-verbose'
-    $at_quiet $ECHO_N " 76: Calculator %error-verbose                    $ECHO_C"
-    at_xfail=no
-    (
-      echo "76. calc.at:557: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_205
+#AT_START_206
+at_fn_group_banner 206 'calc.at:605' \
+  "Calculator %error-verbose" "                      " 11
+at_xfail=no
+(
+  $as_echo "206. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -18231,59 +66378,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %error-verbose
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -18292,7 +66432,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -18325,25 +66465,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -18354,7 +66505,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -18389,32 +66539,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -18432,18 +66571,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -18469,10 +66610,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -18481,55 +66622,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:557: bison -o calc.c calc.y"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:605: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:605"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:605: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:605"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:605: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:605"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:605: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:605"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:557: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:605: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:605"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:605"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:605"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -18549,62 +66786,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -18615,18 +66856,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -18635,60 +66878,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -18699,18 +66932,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -18719,60 +66954,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -18783,18 +67008,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -18803,60 +67030,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -18867,18 +67084,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -18887,30 +67106,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -18918,30 +67125,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -18952,18 +67161,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -18972,57 +67183,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc /dev/null"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -19033,18 +67234,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -19053,30 +67256,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -19091,8 +67282,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -19100,30 +67291,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -19134,21 +67327,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -19158,63 +67353,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -19225,18 +67410,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -19246,60 +67433,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:557: \$PREPARSER ./calc input"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -19310,19 +67487,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -19332,94 +67511,116 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:557: cat stderr"
-echo calc.at:557 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:557: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:605:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:605"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:605: cat stderr"
+at_fn_check_prepare_trace "calc.at:605"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  77 ) # 77. calc.at:559: Calculator %pure-parser %locations
-    at_setup_line='calc.at:559'
-    at_desc='Calculator %pure-parser %locations'
-    $at_quiet $ECHO_N " 77: Calculator %pure-parser %locations           $ECHO_C"
-    at_xfail=no
-    (
-      echo "77. calc.at:559: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_206
+#AT_START_207
+at_fn_group_banner 207 'calc.at:607' \
+  "Calculator %define api.pure full %locations" "    " 11
+at_xfail=no
+(
+  $as_echo "207. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -19431,59 +67632,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%pure-parser %locations
+%define api.pure full %locations
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
+static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
 
 
 
@@ -19492,7 +67686,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -19525,25 +67719,38 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
+static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -19557,7 +67764,7 @@
   if (res == '\n')
     {
       (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).last_column = 1;
     }
   else
     (*llocp).last_column++;
@@ -19565,7 +67772,6 @@
   return res;
 }
 
-
 static void
 unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
 {
@@ -19603,40 +67809,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (*llocp).first_column = (*llocp).last_column;
       (*llocp).first_line   = (*llocp).last_line;
 
     }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -19654,18 +67843,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -19691,10 +67882,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -19703,55 +67894,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:559: bison -o calc.c calc.y"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:607: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:607"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:607: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:607"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:607: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:607"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:607: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:607"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:559: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:607: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:607"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:607"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:607"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -19771,62 +68058,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -19837,81 +68128,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -19922,81 +68204,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -20007,81 +68280,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -20092,51 +68356,40 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -20144,30 +68397,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -20178,78 +68433,69 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc /dev/null"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -20260,51 +68506,40 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -20319,8 +68554,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -20328,30 +68563,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -20362,88 +68599,79 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -20454,82 +68682,73 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:559: \$PREPARSER ./calc input"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -20540,117 +68759,140 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:559: cat stderr"
-echo calc.at:559 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:559: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:607:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:607"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:607: cat stderr"
+at_fn_check_prepare_trace "calc.at:607"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  78 ) # 78. calc.at:560: Calculator %error-verbose %locations
-    at_setup_line='calc.at:560'
-    at_desc='Calculator %error-verbose %locations'
-    $at_quiet $ECHO_N " 78: Calculator %error-verbose %locations         $ECHO_C"
-    at_xfail=no
-    (
-      echo "78. calc.at:560: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_207
+#AT_START_208
+at_fn_group_banner 208 'calc.at:608' \
+  "Calculator %define api.push-pull both %define api.pure full %locations" "" 11
+at_xfail=no
+(
+  $as_echo "208. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -20662,59 +68904,1324 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%define api.push-pull both %define api.pure full %locations
+
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
+static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
+
+
+static YYLTYPE last_yylloc;
+
+static int
+get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).last_line++;
+      (*llocp).last_column = 1;
+    }
+  else
+    (*llocp).last_column++;
+
+  return res;
+}
+
+static void
+unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).first_column = (*llocp).last_column;
+      (*llocp).first_line   = (*llocp).last_line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
 #endif
-%}
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = yyparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:608: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:608"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:608: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:608"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:608: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:608"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:608: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:608"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/calc.at:608: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:608"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:608"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:608"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:608"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:608: cat stderr"
+at_fn_check_prepare_trace "calc.at:608"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:608"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_208
+#AT_START_209
+at_fn_group_banner 209 'calc.at:609' \
+  "Calculator %error-verbose %locations" "           " 11
+at_xfail=no
+(
+  $as_echo "209. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %error-verbose %locations
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -20723,7 +70230,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -20756,34 +70263,38 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (yylloc).first_line, (yylloc).first_column);
-  if ((yylloc).first_line != (yylloc).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (yylloc).last_line,  (yylloc).last_column - 1);
-  else if ((yylloc).first_column != (yylloc).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (yylloc).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -20797,7 +70308,7 @@
   if (res == '\n')
     {
       (yylloc).last_line++;
-      (yylloc).last_column = 0;
+      (yylloc).last_column = 1;
     }
   else
     (yylloc).last_column++;
@@ -20805,7 +70316,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -20843,40 +70353,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (yylloc).last_column = 0;
-      (yylloc).last_line = 1;
-
-    }
-
-
- (yylloc).first_column = (yylloc).last_column;
-  (yylloc).first_line   = (yylloc).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (yylloc).first_column = (yylloc).last_column;
       (yylloc).first_line   = (yylloc).last_line;
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -20894,18 +70387,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -20931,10 +70426,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -20943,55 +70438,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:560: bison -o calc.c calc.y"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:609: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:609"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:609: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:609"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:609: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:609"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:609: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:609"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:560: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:609: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:609"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:609"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:609"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -21011,62 +70602,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21077,18 +70672,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -21096,60 +70693,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21160,18 +70747,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -21179,60 +70768,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21243,18 +70822,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -21262,60 +70843,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21326,18 +70897,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -21345,30 +70918,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -21376,30 +70937,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21410,18 +70973,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -21429,57 +70994,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc /dev/null"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21490,18 +71045,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -21509,30 +71066,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -21547,8 +71092,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -21556,30 +71101,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21590,21 +71137,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -21613,63 +71162,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21680,18 +71219,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -21700,60 +71241,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:560: \$PREPARSER ./calc input"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -21764,19 +71295,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -21785,94 +71318,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:560: cat stderr"
-echo calc.at:560 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:560: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:609:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:609"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:609: cat stderr"
+at_fn_check_prepare_trace "calc.at:609"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  79 ) # 79. calc.at:562: Calculator %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:562'
-    at_desc='Calculator %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N " 79: Calculator %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "79. calc.at:562: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_209
+#AT_START_210
+at_fn_group_banner 210 'calc.at:611' \
+  "Calculator %error-verbose %locations %defines %name-prefix \"calc\" %verbose %yacc" "" 11
+at_xfail=no
+(
+  $as_echo "210. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -21884,59 +71438,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc
+%error-verbose %locations %defines %name-prefix "calc" %verbose %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void calcerror ( const char *msg);
+int calclex (void);
+}
 
 
 
@@ -21945,7 +71492,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -21978,34 +71525,51 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (yylloc).first_line, (yylloc).first_column);
-  if ((yylloc).first_line != (yylloc).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (yylloc).last_line,  (yylloc).last_column - 1);
-  else if ((yylloc).first_column != (yylloc).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (yylloc).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (calclloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -22015,26 +71579,25 @@
   int res = getc (input);
   ;
 
-  last_yylloc = (yylloc);
+  last_yylloc = (calclloc);
   if (res == '\n')
     {
-      (yylloc).last_line++;
-      (yylloc).last_column = 0;
+      (calclloc).last_line++;
+      (calclloc).last_column = 1;
     }
   else
-    (yylloc).last_column++;
+    (calclloc).last_column++;
 
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
   ;
 
   /* Wrong when C == `\n'. */
-  (yylloc) = last_yylloc;
+  (calclloc) = last_yylloc;
 
   ungetc (c, input);
 }
@@ -22065,46 +71628,29 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int calclex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
+  /* Skip current token, then white spaces.  */
+  do
     {
-      init = 0;
-
-      (yylloc).last_column = 0;
-      (yylloc).last_line = 1;
+     (calclloc).first_column = (calclloc).last_column;
+      (calclloc).first_line   = (calclloc).last_line;
 
     }
-
-
- (yylloc).first_column = (yylloc).last_column;
-  (yylloc).first_line   = (yylloc).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
-    {
-     (yylloc).first_column = (yylloc).last_column;
-      (yylloc).first_line   = (yylloc).last_line;
-
-    }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
     {
       unget_char ( c);
-      (yylval).ival = read_signed_integer ();
+      (calclval).ival = read_signed_integer ();
       return NUM;
     }
 
@@ -22115,19 +71661,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -22152,11 +71711,11 @@
     }
 
 
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -22165,55 +71724,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:562: bison -o calc.c calc.y"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:611: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:611"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:611: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:611"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:611: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:611"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:611: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:611"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:562: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:611: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:611"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:611"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:611"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:611"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -22233,62 +71915,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22299,18 +71985,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -22318,60 +72006,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22382,18 +72060,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -22401,60 +72081,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22465,18 +72135,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -22484,60 +72156,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22548,18 +72210,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -22567,30 +72231,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -22598,30 +72250,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22632,18 +72286,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -22651,57 +72307,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc /dev/null"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22712,18 +72358,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -22731,30 +72379,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -22769,8 +72405,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -22778,30 +72414,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22812,21 +72450,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -22835,63 +72475,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22902,18 +72532,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -22922,60 +72554,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:562: \$PREPARSER ./calc input"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -22986,19 +72608,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -23007,94 +72631,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:562: cat stderr"
-echo calc.at:562 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:562: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:611:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:611"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:611: cat stderr"
+at_fn_check_prepare_trace "calc.at:611"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:611"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  80 ) # 80. calc.at:564: Calculator %debug
-    at_setup_line='calc.at:564'
-    at_desc='Calculator %debug'
-    $at_quiet $ECHO_N " 80: Calculator %debug                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "80. calc.at:564: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_210
+#AT_START_211
+at_fn_group_banner 211 'calc.at:612' \
+  "Calculator %error-verbose %locations %defines %define api.prefix \"calc\" %verbose %yacc" "" 11
+at_xfail=no
+(
+  $as_echo "211. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -23106,59 +72751,1365 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%error-verbose %locations %defines %define api.prefix "calc" %verbose %yacc
+
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+static void calcerror ( const char *msg);
+int calclex (void);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (calclloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
+
+static CALCLTYPE last_yylloc;
+
+static int
+get_char (void)
+{
+  int res = getc (input);
+  ;
+
+  last_yylloc = (calclloc);
+  if (res == '\n')
+    {
+      (calclloc).last_line++;
+      (calclloc).last_column = 1;
+    }
+  else
+    (calclloc).last_column++;
+
+  return res;
+}
+
+static void
+unget_char ( int c)
+{
+  ;
+
+  /* Wrong when C == `\n'. */
+  (calclloc) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (void)
+{
+  int c = get_char ();
+  int sign = 1;
+  int n = 0;
+
+  ;
+  if (c == '-')
+    {
+      c = get_char ();
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char ();
+    }
+
+  unget_char ( c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (void)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (calclloc).first_column = (calclloc).last_column;
+      (calclloc).first_line   = (calclloc).last_line;
+
+    }
+  while ((c = get_char ()) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char ( c);
+      (calclval).ival = read_signed_integer ();
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
 #endif
-%}
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:612: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:612"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:612: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:612"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:612: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:612"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:612: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:612"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/calc.at:612: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:612"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:612"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:612"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:612"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:612"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:612: cat stderr"
+at_fn_check_prepare_trace "calc.at:612"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_211
+#AT_START_212
+at_fn_group_banner 212 'calc.at:614' \
+  "Calculator %debug" "                              " 11
+at_xfail=no
+(
+  $as_echo "212. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %debug
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -23167,7 +74118,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -23200,25 +74151,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -23229,7 +74191,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -23264,32 +74225,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -23307,18 +74257,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -23344,10 +74296,10 @@
 
   yydebug = 1;
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -23356,55 +74308,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:564: bison -o calc.c calc.y"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:614: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:614"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:614: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:614"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:614: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:614"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:614: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:614"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:564: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:614: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:614"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:614"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:614"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -23424,62 +74472,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -23490,18 +74542,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -23511,60 +74565,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -23575,18 +74619,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -23596,60 +74642,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -23660,18 +74696,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -23681,60 +74719,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -23745,18 +74773,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -23766,30 +74796,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -23797,30 +74815,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -23831,18 +74851,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -23852,57 +74874,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc /dev/null"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -23913,18 +74925,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -23934,30 +74948,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -23972,8 +74974,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -23981,30 +74983,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -24015,21 +75019,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -24040,63 +75046,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -24107,18 +75103,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -24129,60 +75127,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:564: \$PREPARSER ./calc input"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -24193,19 +75181,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -24216,94 +75206,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:564: cat stderr"
-echo calc.at:564 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:564: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:614:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:614"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:614: cat stderr"
+at_fn_check_prepare_trace "calc.at:614"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  81 ) # 81. calc.at:565: Calculator %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:565'
-    at_desc='Calculator %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N " 81: Calculator %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "81. calc.at:565: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_212
+#AT_START_213
+at_fn_group_banner 213 'calc.at:615' \
+  "Calculator %error-verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc" "" 11
+at_xfail=no
+(
+  $as_echo "213. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -24315,59 +75328,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc
+%error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void calcerror ( const char *msg);
+int calclex (void);
+}
 
 
 
@@ -24376,7 +75382,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -24409,34 +75415,51 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (yylloc).first_line, (yylloc).first_column);
-  if ((yylloc).first_line != (yylloc).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (yylloc).last_line,  (yylloc).last_column - 1);
-  else if ((yylloc).first_column != (yylloc).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (yylloc).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (calclloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -24446,26 +75469,25 @@
   int res = getc (input);
   ;
 
-  last_yylloc = (yylloc);
+  last_yylloc = (calclloc);
   if (res == '\n')
     {
-      (yylloc).last_line++;
-      (yylloc).last_column = 0;
+      (calclloc).last_line++;
+      (calclloc).last_column = 1;
     }
   else
-    (yylloc).last_column++;
+    (calclloc).last_column++;
 
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
   ;
 
   /* Wrong when C == `\n'. */
-  (yylloc) = last_yylloc;
+  (calclloc) = last_yylloc;
 
   ungetc (c, input);
 }
@@ -24496,46 +75518,29 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int calclex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
+  /* Skip current token, then white spaces.  */
+  do
     {
-      init = 0;
-
-      (yylloc).last_column = 0;
-      (yylloc).last_line = 1;
+     (calclloc).first_column = (calclloc).last_column;
+      (calclloc).first_line   = (calclloc).last_line;
 
     }
-
-
- (yylloc).first_column = (yylloc).last_column;
-  (yylloc).first_line   = (yylloc).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
-    {
-     (yylloc).first_column = (yylloc).last_column;
-      (yylloc).first_line   = (yylloc).last_line;
-
-    }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
     {
       unget_char ( c);
-      (yylval).ival = read_signed_integer ();
+      (calclval).ival = read_signed_integer ();
       return NUM;
     }
 
@@ -24546,19 +75551,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -24582,12 +75600,12 @@
       return 3;
     }
 
-  yydebug = 1;
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  calcdebug = 1;
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -24596,55 +75614,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:565: bison -o calc.c calc.y"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:615: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:615"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:615: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:615"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:615: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:615"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:615: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:615"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:565: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:615: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:615"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:615"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:615"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:615"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -24664,62 +75805,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -24730,18 +75875,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -24749,60 +75896,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -24813,18 +75950,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -24832,60 +75971,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -24896,18 +76025,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -24915,60 +76046,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -24979,18 +76100,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -24998,30 +76121,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -25029,30 +76140,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -25063,18 +76176,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -25082,57 +76197,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc /dev/null"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -25143,18 +76248,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -25162,30 +76269,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -25200,8 +76295,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -25209,30 +76304,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -25243,21 +76340,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -25266,63 +76365,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -25333,18 +76422,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -25353,60 +76444,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:565: \$PREPARSER ./calc input"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -25417,19 +76498,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -25438,94 +76521,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:565: cat stderr"
-echo calc.at:565 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:565: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:615:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:615"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:615: cat stderr"
+at_fn_check_prepare_trace "calc.at:615"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  82 ) # 82. calc.at:567: Calculator %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:567'
-    at_desc='Calculator %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N " 82: Calculator %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "82. calc.at:567: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_213
+#AT_START_214
+at_fn_group_banner 214 'calc.at:616' \
+  "Calculator %error-verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc" "" 11
+at_xfail=no
+(
+  $as_echo "214. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -25537,59 +76641,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc
+%error-verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
+static void calcerror ( const char *msg);
+int calclex (void);
+}
 
 
 
@@ -25598,7 +76695,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -25631,25 +76728,1364 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (calclloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
+
+static CALCLTYPE last_yylloc;
+
+static int
+get_char (void)
+{
+  int res = getc (input);
+  ;
+
+  last_yylloc = (calclloc);
+  if (res == '\n')
+    {
+      (calclloc).last_line++;
+      (calclloc).last_column = 1;
+    }
+  else
+    (calclloc).last_column++;
+
+  return res;
+}
+
+static void
+unget_char ( int c)
+{
+  ;
+
+  /* Wrong when C == `\n'. */
+  (calclloc) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (void)
+{
+  int c = get_char ();
+  int sign = 1;
+  int n = 0;
+
+  ;
+  if (c == '-')
+    {
+      c = get_char ();
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char ();
+    }
+
+  unget_char ( c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (void)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (calclloc).first_column = (calclloc).last_column;
+      (calclloc).first_line   = (calclloc).last_line;
+
+    }
+  while ((c = get_char ()) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char ( c);
+      (calclval).ival = read_signed_integer ();
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+  calcdebug = 1;
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:616: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:616"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:616: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:616"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:616: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:616"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:616: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:616"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/calc.at:616: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:616"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:616"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:616"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:616"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:616"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:616: cat stderr"
+at_fn_check_prepare_trace "calc.at:616"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_214
+#AT_START_215
+at_fn_group_banner 215 'calc.at:618' \
+  "Calculator %define api.pure full %verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc" "" 11
+at_xfail=no
+(
+  $as_echo "215. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%define api.pure full %verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc
+
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+static void calcerror (YYLTYPE const * const llocp,  const char *msg);
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp);
+static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
+static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -25663,7 +78099,7 @@
   if (res == '\n')
     {
       (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).last_column = 1;
     }
   else
     (*llocp).last_column++;
@@ -25671,7 +78107,6 @@
   return res;
 }
 
-
 static void
 unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
 {
@@ -25709,40 +78144,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (*llocp).first_column = (*llocp).last_column;
       (*llocp).first_line   = (*llocp).last_line;
 
     }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -25759,19 +78177,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -25795,12 +78226,12 @@
       return 3;
     }
 
-  yydebug = 1;
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  calcdebug = 1;
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -25809,55 +78240,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:567: bison -o calc.c calc.y"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:618: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:618"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:618: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:618"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:618: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:618"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:618: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:618"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:567: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:618: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:618"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:618"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:618"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:618"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -25877,62 +78431,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -25943,80 +78501,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -26027,80 +78577,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -26111,80 +78653,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -26195,50 +78729,40 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -26246,30 +78770,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -26280,77 +78806,69 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc /dev/null"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -26361,50 +78879,40 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -26419,8 +78927,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -26428,30 +78936,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -26462,87 +78972,79 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -26553,81 +79055,73 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:567: \$PREPARSER ./calc input"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -26638,116 +79132,140 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
-sed 's/^[-0-9.]*: //' expout >at-expout
-mv at-expout expout
+
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:567: cat stderr"
-echo calc.at:567 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:567: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:618:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:618"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:618: cat stderr"
+at_fn_check_prepare_trace "calc.at:618"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  83 ) # 83. calc.at:569: Calculator %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
-    at_setup_line='calc.at:569'
-    at_desc='Calculator %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}'
-    $at_quiet $ECHO_N " 83: Calculator %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}$ECHO_C"
-    at_xfail=no
-    (
-      echo "83. calc.at:569: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_215
+#AT_START_216
+at_fn_group_banner 216 'calc.at:619' \
+  "Calculator %define api.push-pull both %define api.pure full %verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc" "" 11
+at_xfail=no
+(
+  $as_echo "216. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -26759,59 +79277,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
+%define api.push-pull both %define api.pure full %verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (YYLTYPE *llocp,
-                     semantic_value *result, int *count,
-                     const char *s
-                     );
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
+
+static void calcerror (CALCLTYPE const * const llocp,  const char *msg);
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+}
 
 
 
@@ -26820,7 +79331,1330 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror (CALCLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+static int get_char (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+static void unget_char (CALCSTYPE *lvalp, CALCLTYPE *llocp,  int c);
+
+
+static CALCLTYPE last_yylloc;
+
+static int
+get_char (CALCSTYPE *lvalp, CALCLTYPE *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).last_line++;
+      (*llocp).last_column = 1;
+    }
+  else
+    (*llocp).last_column++;
+
+  return res;
+}
+
+static void
+unget_char (CALCSTYPE *lvalp, CALCLTYPE *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (CALCSTYPE *lvalp, CALCLTYPE *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).first_column = (*llocp).last_column;
+      (*llocp).first_line   = (*llocp).last_line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+  calcdebug = 1;
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:619: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:619"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:619: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:619"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/calc.at:619: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:619"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:619"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:619"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:619"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:619"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:619: cat stderr"
+at_fn_check_prepare_trace "calc.at:619"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_216
+#AT_START_217
+at_fn_group_banner 217 'calc.at:621' \
+  "Calculator %define api.pure %error-verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}" "" 11
+at_xfail=no
+(
+  $as_echo "217. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%define api.pure %error-verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
+
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+static void calcerror (CALCLTYPE const * const llocp, semantic_value *result, int *count,  const char *msg);
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -26853,39 +80687,58 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (YYLTYPE *llocp,
-         semantic_value *result, int *count,
-         const char *s)
+static int
+power (int base, int exponent)
 {
-(void) result; (void) count;
-
-  fprintf (stderr, "%d.%d",
-           (*llocp).first_line, (*llocp).first_column);
-  if ((*llocp).first_line != (*llocp).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (*llocp).last_line,  (*llocp).last_column - 1);
-  else if ((*llocp).first_column != (*llocp).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (*llocp).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror (CALCLTYPE const * const llocp, semantic_value *result, int *count,  const char *msg)
+{
+  YYUSE(result);
+  YYUSE(count);
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
 
-static YYLTYPE last_yylloc;
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+static int get_char (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+static void unget_char (CALCSTYPE *lvalp, CALCLTYPE *llocp,  int c);
+
+
+static CALCLTYPE last_yylloc;
 
 static int
-get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
+get_char (CALCSTYPE *lvalp, CALCLTYPE *llocp)
 {
   int res = getc (input);
   (void) lvalp;(void) llocp;
@@ -26894,7 +80747,7 @@
   if (res == '\n')
     {
       (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).last_column = 1;
     }
   else
     (*llocp).last_column++;
@@ -26902,9 +80755,8 @@
   return res;
 }
 
-
 static void
-unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
+unget_char (CALCSTYPE *lvalp, CALCLTYPE *llocp,  int c)
 {
   (void) lvalp;(void) llocp;
 
@@ -26915,7 +80767,7 @@
 }
 
 static int
-read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
+read_signed_integer (CALCSTYPE *lvalp, CALCLTYPE *llocp)
 {
   int c = get_char (lvalp, llocp);
   int sign = 1;
@@ -26940,40 +80792,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (*llocp).first_column = (*llocp).last_column;
       (*llocp).first_line   = (*llocp).last_line;
 
     }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -26990,19 +80825,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -27026,12 +80874,12 @@
       return 3;
     }
 
-  yydebug = 1;
-  status = yyparse (&result, &count);
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  calcdebug = 1;
+  status = calcparse (&result, &count);
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -27040,55 +80888,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:569: bison -o calc.c calc.y"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:621: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:621"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:621: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:621"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:621: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:621"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:621: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:621"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:569: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:621: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:621"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:621"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:621"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:621"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -27108,62 +81079,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27174,18 +81149,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -27193,60 +81170,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27257,18 +81224,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -27276,60 +81245,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27340,18 +81299,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -27359,60 +81320,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27423,18 +81374,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -27442,30 +81395,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -27473,30 +81414,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27507,18 +81450,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -27526,57 +81471,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc /dev/null"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27587,18 +81522,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -27606,30 +81543,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -27644,8 +81569,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -27653,30 +81578,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27687,21 +81614,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -27710,63 +81639,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27777,18 +81696,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -27797,60 +81718,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:569: \$PREPARSER ./calc input"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -27861,19 +81772,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -27882,103 +81795,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:569: cat stderr"
-echo calc.at:569 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:569: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-
-  banner-10 ) # Banner 10. calc.at:576
-    cat <<\_ATEOF
-
-Simple GLR Calculator.
-
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
 _ATEOF
-    ;;
 
-  84 ) # 84. calc.at:586: Calculator %glr-parser
-    at_setup_line='calc.at:586'
-    at_desc='Calculator %glr-parser '
-    $at_quiet $ECHO_N " 84: Calculator %glr-parser                       $ECHO_C"
-    at_xfail=no
-    (
-      echo "84. calc.at:586: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:621:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:621"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:621: cat stderr"
+at_fn_check_prepare_trace "calc.at:621"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:621"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_217
+#AT_START_218
+at_fn_group_banner 218 'calc.at:638' \
+  "Calculator %glr-parser " "                        " 12
+at_xfail=no
+(
+  $as_echo "218. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -27990,59 +81915,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %glr-parser
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -28051,7 +81969,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -28084,25 +82002,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -28113,7 +82042,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -28148,32 +82076,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -28191,18 +82108,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -28228,10 +82147,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -28240,55 +82159,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:586: bison -o calc.c calc.y"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:638: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:638"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:638: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:638"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:638: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:638"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:638: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:638"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:586: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:638: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:638"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:638"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:638"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -28308,62 +82323,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -28374,18 +82393,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -28395,60 +82416,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -28459,18 +82470,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -28480,60 +82493,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -28544,18 +82547,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -28565,60 +82570,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -28629,18 +82624,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -28650,30 +82647,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -28681,30 +82666,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -28715,18 +82702,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -28736,57 +82725,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc /dev/null"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -28797,18 +82776,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -28818,30 +82799,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -28856,8 +82825,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -28865,30 +82834,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -28899,21 +82870,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -28924,63 +82897,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -28991,18 +82954,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -29013,60 +82978,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:586: \$PREPARSER ./calc input"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -29077,19 +83032,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -29100,94 +83057,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:586: cat stderr"
-echo calc.at:586 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:586: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:638:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:638"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:638: cat stderr"
+at_fn_check_prepare_trace "calc.at:638"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:638"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  85 ) # 85. calc.at:588: Calculator %glr-parser %defines
-    at_setup_line='calc.at:588'
-    at_desc='Calculator %glr-parser %defines'
-    $at_quiet $ECHO_N " 85: Calculator %glr-parser %defines              $ECHO_C"
-    at_xfail=no
-    (
-      echo "85. calc.at:588: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_218
+#AT_START_219
+at_fn_group_banner 219 'calc.at:640' \
+  "Calculator %glr-parser %defines" "                " 12
+at_xfail=no
+(
+  $as_echo "219. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -29199,59 +83179,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %glr-parser %defines
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -29260,7 +83233,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -29293,25 +83266,49 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -29322,7 +83319,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -29357,32 +83353,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -29399,19 +83384,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -29437,10 +83435,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -29449,55 +83447,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:588: bison -o calc.c calc.y"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:640: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:640"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:640: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:640"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:640: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:640"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:640: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:640"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:588: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:640: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:640"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:640"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:640"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:640"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -29517,62 +83638,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -29583,18 +83708,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -29604,60 +83731,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -29668,18 +83785,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -29689,60 +83808,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -29753,18 +83862,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -29774,60 +83885,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -29838,18 +83939,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -29859,30 +83962,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -29890,30 +83981,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -29924,18 +84017,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -29945,57 +84040,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc /dev/null"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -30006,18 +84091,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -30027,30 +84114,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -30065,8 +84140,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -30074,30 +84149,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -30108,21 +84185,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -30133,63 +84212,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -30200,18 +84269,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -30222,60 +84293,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:588: \$PREPARSER ./calc input"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -30286,19 +84347,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -30309,94 +84372,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:588: cat stderr"
-echo calc.at:588 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:588: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:640:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:640"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:640: cat stderr"
+at_fn_check_prepare_trace "calc.at:640"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:640"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  86 ) # 86. calc.at:589: Calculator %glr-parser %locations
-    at_setup_line='calc.at:589'
-    at_desc='Calculator %glr-parser %locations'
-    $at_quiet $ECHO_N " 86: Calculator %glr-parser %locations            $ECHO_C"
-    at_xfail=no
-    (
-      echo "86. calc.at:589: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_219
+#AT_START_220
+at_fn_group_banner 220 'calc.at:641' \
+  "Calculator %glr-parser %locations" "              " 12
+at_xfail=no
+(
+  $as_echo "220. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -30408,59 +84494,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %glr-parser %locations
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -30469,7 +84548,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -30502,34 +84581,38 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (yylloc).first_line, (yylloc).first_column);
-  if ((yylloc).first_line != (yylloc).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (yylloc).last_line,  (yylloc).last_column - 1);
-  else if ((yylloc).first_column != (yylloc).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (yylloc).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -30543,7 +84626,7 @@
   if (res == '\n')
     {
       (yylloc).last_line++;
-      (yylloc).last_column = 0;
+      (yylloc).last_column = 1;
     }
   else
     (yylloc).last_column++;
@@ -30551,7 +84634,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -30589,40 +84671,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (yylloc).last_column = 0;
-      (yylloc).last_line = 1;
-
-    }
-
-
- (yylloc).first_column = (yylloc).last_column;
-  (yylloc).first_line   = (yylloc).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (yylloc).first_column = (yylloc).last_column;
       (yylloc).first_line   = (yylloc).last_line;
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -30640,18 +84705,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -30677,10 +84744,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -30689,55 +84756,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:589: bison -o calc.c calc.y"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:641: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:641"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:641: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:641"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:641: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:641"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:641: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:641"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:589: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:641: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:641"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:641"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:641"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -30757,62 +84920,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -30823,18 +84990,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -30843,60 +85012,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -30907,18 +85066,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -30927,60 +85088,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -30991,18 +85142,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -31011,60 +85164,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -31075,18 +85218,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -31095,30 +85240,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -31126,30 +85259,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -31160,18 +85295,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -31180,57 +85317,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc /dev/null"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -31241,18 +85368,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -31261,30 +85390,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -31299,8 +85416,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -31308,30 +85425,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -31342,21 +85461,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -31366,63 +85487,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -31433,18 +85544,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -31454,60 +85567,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:589: \$PREPARSER ./calc input"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -31518,19 +85621,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -31540,94 +85645,116 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:589: cat stderr"
-echo calc.at:589 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:589: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:641:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:641"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:641: cat stderr"
+at_fn_check_prepare_trace "calc.at:641"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:641"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  87 ) # 87. calc.at:590: Calculator %glr-parser %name-prefix="calc"
-    at_setup_line='calc.at:590'
-    at_desc='Calculator %glr-parser %name-prefix="calc"'
-    $at_quiet $ECHO_N " 87: Calculator %glr-parser %name-prefix="calc"   $ECHO_C"
-    at_xfail=no
-    (
-      echo "87. calc.at:590: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_220
+#AT_START_221
+at_fn_group_banner 221 'calc.at:642' \
+  "Calculator %glr-parser %name-prefix \"calc\"" "     " 12
+at_xfail=no
+(
+  $as_echo "221. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -31639,59 +85766,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%glr-parser %name-prefix="calc"
+%glr-parser %name-prefix "calc"
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void calcerror ( const char *msg);
+int calclex (void);
+}
 
 
 
@@ -31700,7 +85820,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -31733,25 +85853,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -31762,7 +85893,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -31797,38 +85927,27 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int calclex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
     {
       unget_char ( c);
-      (yylval).ival = read_signed_integer ();
+      (calclval).ival = read_signed_integer ();
       return NUM;
     }
 
@@ -31840,18 +85959,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -31876,11 +85997,11 @@
     }
 
 
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -31889,55 +86010,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:590: bison -o calc.c calc.y"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:642: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:642"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:642: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:642"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:642: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:642"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:642: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:642"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:590: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:642: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:642"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:642"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:642"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -31957,62 +86174,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32023,18 +86244,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -32044,60 +86267,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32108,18 +86321,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -32129,60 +86344,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32193,18 +86398,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -32214,60 +86421,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32278,18 +86475,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -32299,30 +86498,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -32330,30 +86517,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32364,18 +86553,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -32385,57 +86576,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc /dev/null"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32446,18 +86627,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -32467,30 +86650,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -32505,8 +86676,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -32514,30 +86685,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32548,21 +86721,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -32573,63 +86748,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32640,18 +86805,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -32662,60 +86829,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:590: \$PREPARSER ./calc input"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -32726,19 +86883,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -32749,94 +86908,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:590: cat stderr"
-echo calc.at:590 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:590: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:642:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:642"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:642: cat stderr"
+at_fn_check_prepare_trace "calc.at:642"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  88 ) # 88. calc.at:591: Calculator %glr-parser %verbose
-    at_setup_line='calc.at:591'
-    at_desc='Calculator %glr-parser %verbose'
-    $at_quiet $ECHO_N " 88: Calculator %glr-parser %verbose              $ECHO_C"
-    at_xfail=no
-    (
-      echo "88. calc.at:591: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_221
+#AT_START_222
+at_fn_group_banner 222 'calc.at:643' \
+  "Calculator %glr-parser %define api.prefix \"calc\"" "" 12
+at_xfail=no
+(
+  $as_echo "222. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -32848,59 +87030,1316 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%glr-parser %define api.prefix "calc"
+
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+static void calcerror ( const char *msg);
+int calclex (void);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
+
+static int
+get_char (void)
+{
+  int res = getc (input);
+  ;
+
+  return res;
+}
+
+static void
+unget_char ( int c)
+{
+  ;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (void)
+{
+  int c = get_char ();
+  int sign = 1;
+  int n = 0;
+
+  ;
+  if (c == '-')
+    {
+      c = get_char ();
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char ();
+    }
+
+  unget_char ( c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (void)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+
+    }
+  while ((c = get_char ()) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char ( c);
+      (calclval).ival = read_signed_integer ();
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
 #endif
-%}
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:643: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:643"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:643: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:643"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:643: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:643"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:643: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:643"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/calc.at:643: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:643"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:643"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:643"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:643"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:643: cat stderr"
+at_fn_check_prepare_trace "calc.at:643"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:643"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_222
+#AT_START_223
+at_fn_group_banner 223 'calc.at:644' \
+  "Calculator %glr-parser %verbose" "                " 12
+at_xfail=no
+(
+  $as_echo "223. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %glr-parser %verbose
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -32909,7 +88348,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -32942,25 +88381,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -32971,7 +88421,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -33006,32 +88455,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -33049,18 +88487,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -33086,10 +88526,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -33098,55 +88538,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:591: bison -o calc.c calc.y"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:644: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:644"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:644: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:644"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:644: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:644"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:644: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:644"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:591: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:644: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:644"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:644"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:644"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -33166,62 +88702,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33232,18 +88772,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -33253,60 +88795,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33317,18 +88849,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -33338,60 +88872,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33402,18 +88926,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -33423,60 +88949,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33487,18 +89003,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -33508,30 +89026,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -33539,30 +89045,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33573,18 +89081,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -33594,57 +89104,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc /dev/null"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33655,18 +89155,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -33676,30 +89178,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -33714,8 +89204,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -33723,30 +89213,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33757,21 +89249,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -33782,63 +89276,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33849,18 +89333,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -33871,60 +89357,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:591: \$PREPARSER ./calc input"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -33935,19 +89411,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -33958,94 +89436,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:591: cat stderr"
-echo calc.at:591 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:591: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:644:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:644"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:644: cat stderr"
+at_fn_check_prepare_trace "calc.at:644"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  89 ) # 89. calc.at:592: Calculator %glr-parser %yacc
-    at_setup_line='calc.at:592'
-    at_desc='Calculator %glr-parser %yacc'
-    $at_quiet $ECHO_N " 89: Calculator %glr-parser %yacc                 $ECHO_C"
-    at_xfail=no
-    (
-      echo "89. calc.at:592: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_223
+#AT_START_224
+at_fn_group_banner 224 'calc.at:645' \
+  "Calculator %glr-parser %yacc" "                   " 12
+at_xfail=no
+(
+  $as_echo "224. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -34057,59 +89558,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %glr-parser %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -34118,7 +89612,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -34151,25 +89645,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -34180,7 +89685,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -34215,32 +89719,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -34258,18 +89751,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -34295,10 +89790,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -34307,55 +89802,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:592: bison -o calc.c calc.y"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:645: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:645"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:645: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:645"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:645: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:645"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:645: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:645"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:592: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:645: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:645"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:645"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:645"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -34375,62 +89966,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -34441,18 +90036,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -34462,60 +90059,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -34526,18 +90113,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -34547,60 +90136,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -34611,18 +90190,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -34632,60 +90213,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -34696,18 +90267,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -34717,30 +90290,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -34748,30 +90309,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -34782,18 +90345,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -34803,57 +90368,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc /dev/null"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -34864,18 +90419,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -34885,30 +90442,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -34923,8 +90468,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -34932,30 +90477,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -34966,21 +90513,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -34991,63 +90540,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -35058,18 +90597,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -35080,60 +90621,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:592: \$PREPARSER ./calc input"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -35144,19 +90675,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -35167,94 +90700,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:592: cat stderr"
-echo calc.at:592 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:592: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:645:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:645"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:645: cat stderr"
+at_fn_check_prepare_trace "calc.at:645"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:645"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  90 ) # 90. calc.at:593: Calculator %glr-parser %error-verbose
-    at_setup_line='calc.at:593'
-    at_desc='Calculator %glr-parser %error-verbose'
-    $at_quiet $ECHO_N " 90: Calculator %glr-parser %error-verbose        $ECHO_C"
-    at_xfail=no
-    (
-      echo "90. calc.at:593: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_224
+#AT_START_225
+at_fn_group_banner 225 'calc.at:646' \
+  "Calculator %glr-parser %error-verbose" "          " 12
+at_xfail=no
+(
+  $as_echo "225. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -35266,59 +90822,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %glr-parser %error-verbose
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -35327,7 +90876,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -35360,25 +90909,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -35389,7 +90949,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -35424,32 +90983,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -35467,18 +91015,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -35504,10 +91054,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -35516,55 +91066,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:593: bison -o calc.c calc.y"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:646: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:646"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:646: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:646"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:646: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:646"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:646: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:646"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:593: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:646: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:646"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:646"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:646"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -35584,62 +91230,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -35650,18 +91300,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -35670,60 +91322,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -35734,18 +91376,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -35754,60 +91398,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -35818,18 +91452,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -35838,60 +91474,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -35902,18 +91528,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -35922,30 +91550,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -35953,30 +91569,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -35987,18 +91605,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -36007,57 +91627,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc /dev/null"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -36068,18 +91678,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -36088,30 +91700,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -36126,8 +91726,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -36135,30 +91735,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -36169,21 +91771,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -36193,63 +91797,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -36260,18 +91854,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -36281,60 +91877,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:593: \$PREPARSER ./calc input"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -36345,19 +91931,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -36367,94 +91955,116 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:593: cat stderr"
-echo calc.at:593 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:593: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:646:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:646"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:646: cat stderr"
+at_fn_check_prepare_trace "calc.at:646"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:646"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  91 ) # 91. calc.at:595: Calculator %glr-parser %pure-parser %locations
-    at_setup_line='calc.at:595'
-    at_desc='Calculator %glr-parser %pure-parser %locations'
-    $at_quiet $ECHO_N " 91: Calculator %glr-parser %pure-parser %locations$ECHO_C"
-    at_xfail=no
-    (
-      echo "91. calc.at:595: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_225
+#AT_START_226
+at_fn_group_banner 226 'calc.at:648' \
+  "Calculator %glr-parser %define api.pure %locations" "" 12
+at_xfail=no
+(
+  $as_echo "226. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -36466,59 +92076,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%glr-parser %pure-parser %locations
+%glr-parser %define api.pure %locations
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (YYLTYPE *llocp,
 
-                     const char *s
-                     );
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
+static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
 
 
 
@@ -36527,7 +92130,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -36560,34 +92163,38 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (YYLTYPE *llocp,
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (*llocp).first_line, (*llocp).first_column);
-  if ((*llocp).first_line != (*llocp).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (*llocp).last_line,  (*llocp).last_column - 1);
-  else if ((*llocp).first_column != (*llocp).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (*llocp).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
+static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -36601,7 +92208,7 @@
   if (res == '\n')
     {
       (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).last_column = 1;
     }
   else
     (*llocp).last_column++;
@@ -36609,7 +92216,6 @@
   return res;
 }
 
-
 static void
 unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
 {
@@ -36647,40 +92253,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (*llocp).first_column = (*llocp).last_column;
       (*llocp).first_line   = (*llocp).last_line;
 
     }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -36698,18 +92287,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -36735,10 +92326,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -36747,55 +92338,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:595: bison -o calc.c calc.y"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:648: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:648"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:648: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:648"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:648: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:648"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:648: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:648"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:595: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:648: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:648"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:648"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:648"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -36815,62 +92502,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -36881,18 +92572,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -36901,60 +92594,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -36965,18 +92648,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -36985,60 +92670,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -37049,18 +92724,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -37069,60 +92746,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -37133,18 +92800,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -37153,30 +92822,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -37184,30 +92841,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -37218,18 +92877,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -37238,57 +92899,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc /dev/null"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -37299,18 +92950,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -37319,30 +92972,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -37357,8 +92998,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -37366,30 +93007,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -37400,21 +93043,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -37424,63 +93069,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -37491,18 +93126,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -37512,60 +93149,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:595: \$PREPARSER ./calc input"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -37576,19 +93203,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -37598,94 +93227,116 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:595: cat stderr"
-echo calc.at:595 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:595: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:648:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:648"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:648: cat stderr"
+at_fn_check_prepare_trace "calc.at:648"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:648"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  92 ) # 92. calc.at:596: Calculator %glr-parser %error-verbose %locations
-    at_setup_line='calc.at:596'
-    at_desc='Calculator %glr-parser %error-verbose %locations'
-    $at_quiet $ECHO_N " 92: Calculator %glr-parser %error-verbose %locations$ECHO_C"
-    at_xfail=no
-    (
-      echo "92. calc.at:596: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_226
+#AT_START_227
+at_fn_group_banner 227 'calc.at:649' \
+  "Calculator %glr-parser %error-verbose %locations" "" 12
+at_xfail=no
+(
+  $as_echo "227. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -37697,59 +93348,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %glr-parser %error-verbose %locations
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -37758,7 +93402,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -37791,34 +93435,38 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (yylloc).first_line, (yylloc).first_column);
-  if ((yylloc).first_line != (yylloc).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (yylloc).last_line,  (yylloc).last_column - 1);
-  else if ((yylloc).first_column != (yylloc).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (yylloc).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -37832,7 +93480,7 @@
   if (res == '\n')
     {
       (yylloc).last_line++;
-      (yylloc).last_column = 0;
+      (yylloc).last_column = 1;
     }
   else
     (yylloc).last_column++;
@@ -37840,7 +93488,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -37878,40 +93525,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (yylloc).last_column = 0;
-      (yylloc).last_line = 1;
-
-    }
-
-
- (yylloc).first_column = (yylloc).last_column;
-  (yylloc).first_line   = (yylloc).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (yylloc).first_column = (yylloc).last_column;
       (yylloc).first_line   = (yylloc).last_line;
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -37929,18 +93559,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -37966,10 +93598,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -37978,55 +93610,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:596: bison -o calc.c calc.y"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:649: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:649"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:649: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:649"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:649: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:649"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:649: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:649"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:596: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:649: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:649"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:649"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:649"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -38046,62 +93774,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38112,18 +93844,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -38131,60 +93865,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38195,18 +93919,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -38214,60 +93940,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38278,18 +93994,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -38297,60 +94015,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38361,18 +94069,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -38380,30 +94090,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -38411,30 +94109,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38445,18 +94145,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -38464,57 +94166,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc /dev/null"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38525,18 +94217,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -38544,30 +94238,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -38582,8 +94264,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -38591,30 +94273,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38625,21 +94309,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -38648,63 +94334,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38715,18 +94391,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -38735,60 +94413,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:596: \$PREPARSER ./calc input"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -38799,19 +94467,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -38820,94 +94490,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:596: cat stderr"
-echo calc.at:596 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:596: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:649:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:649"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:649: cat stderr"
+at_fn_check_prepare_trace "calc.at:649"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:649"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  93 ) # 93. calc.at:598: Calculator %glr-parser %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:598'
-    at_desc='Calculator %glr-parser %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N " 93: Calculator %glr-parser %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "93. calc.at:598: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_227
+#AT_START_228
+at_fn_group_banner 228 'calc.at:651' \
+  "Calculator %glr-parser %error-verbose %locations %defines %name-prefix \"calc\" %verbose %yacc" "" 12
+at_xfail=no
+(
+  $as_echo "228. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -38919,59 +94610,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%glr-parser %error-verbose %locations %defines %name-prefix="calc" %verbose %yacc
+%glr-parser %error-verbose %locations %defines %name-prefix "calc" %verbose %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void calcerror ( const char *msg);
+int calclex (void);
+}
 
 
 
@@ -38980,7 +94664,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -39013,34 +94697,51 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (yylloc).first_line, (yylloc).first_column);
-  if ((yylloc).first_line != (yylloc).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (yylloc).last_line,  (yylloc).last_column - 1);
-  else if ((yylloc).first_column != (yylloc).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (yylloc).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (calclloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -39050,26 +94751,25 @@
   int res = getc (input);
   ;
 
-  last_yylloc = (yylloc);
+  last_yylloc = (calclloc);
   if (res == '\n')
     {
-      (yylloc).last_line++;
-      (yylloc).last_column = 0;
+      (calclloc).last_line++;
+      (calclloc).last_column = 1;
     }
   else
-    (yylloc).last_column++;
+    (calclloc).last_column++;
 
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
   ;
 
   /* Wrong when C == `\n'. */
-  (yylloc) = last_yylloc;
+  (calclloc) = last_yylloc;
 
   ungetc (c, input);
 }
@@ -39100,46 +94800,29 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int calclex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
+  /* Skip current token, then white spaces.  */
+  do
     {
-      init = 0;
-
-      (yylloc).last_column = 0;
-      (yylloc).last_line = 1;
+     (calclloc).first_column = (calclloc).last_column;
+      (calclloc).first_line   = (calclloc).last_line;
 
     }
-
-
- (yylloc).first_column = (yylloc).last_column;
-  (yylloc).first_line   = (yylloc).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
-    {
-     (yylloc).first_column = (yylloc).last_column;
-      (yylloc).first_line   = (yylloc).last_line;
-
-    }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
     {
       unget_char ( c);
-      (yylval).ival = read_signed_integer ();
+      (calclval).ival = read_signed_integer ();
       return NUM;
     }
 
@@ -39150,19 +94833,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -39187,11 +94883,11 @@
     }
 
 
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -39200,55 +94896,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:598: bison -o calc.c calc.y"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:651: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:651"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:651: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:651"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:651: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:651"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:651: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:651"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:598: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:651: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:651"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:651"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:651"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:651"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -39268,62 +95087,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -39334,18 +95157,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -39353,60 +95178,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -39417,18 +95232,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -39436,60 +95253,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -39500,18 +95307,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -39519,60 +95328,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -39583,18 +95382,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -39602,30 +95403,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -39633,30 +95422,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -39667,18 +95458,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -39686,57 +95479,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc /dev/null"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -39747,18 +95530,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -39766,30 +95551,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -39804,8 +95577,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -39813,30 +95586,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -39847,21 +95622,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -39870,63 +95647,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -39937,18 +95704,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -39957,60 +95726,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:598: \$PREPARSER ./calc input"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -40021,19 +95780,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -40042,94 +95803,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:598: cat stderr"
-echo calc.at:598 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:598: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:651:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:651"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:651: cat stderr"
+at_fn_check_prepare_trace "calc.at:651"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:651"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  94 ) # 94. calc.at:600: Calculator %glr-parser %debug
-    at_setup_line='calc.at:600'
-    at_desc='Calculator %glr-parser %debug'
-    $at_quiet $ECHO_N " 94: Calculator %glr-parser %debug                $ECHO_C"
-    at_xfail=no
-    (
-      echo "94. calc.at:600: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_228
+#AT_START_229
+at_fn_group_banner 229 'calc.at:653' \
+  "Calculator %glr-parser %debug" "                  " 12
+at_xfail=no
+(
+  $as_echo "229. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -40141,59 +95923,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
 %glr-parser %debug
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void yyerror ( const char *msg);
+int yylex (void);
+}
 
 
 
@@ -40202,7 +95977,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -40235,25 +96010,36 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <ctype.h>
+
+int yylex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static int
 get_char (void)
@@ -40264,7 +96050,6 @@
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
@@ -40299,32 +96084,21 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int yylex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-    }
-
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
 
     }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -40342,18 +96116,20 @@
   return c;
 }
 
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
 
 
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -40379,10 +96155,10 @@
 
   yydebug = 1;
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -40391,55 +96167,151 @@
 
 
 
-$at_traceoff
-echo "calc.at:600: bison -o calc.c calc.y"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:653: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:653"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:653: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:653"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:653: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:653"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:653: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:653"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:600: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:653: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:653"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS" "calc.at:653"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:653"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
 
 
 # Test the priorities.
@@ -40459,62 +96331,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -40525,18 +96401,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -40546,60 +96424,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -40610,18 +96478,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -40631,60 +96501,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -40695,18 +96555,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -40716,60 +96578,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -40780,18 +96632,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -40801,30 +96655,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -40832,30 +96674,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -40866,18 +96710,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -40887,57 +96733,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc /dev/null"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -40948,18 +96784,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -40969,30 +96807,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -41007,8 +96833,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -41016,30 +96842,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -41050,21 +96878,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -41075,63 +96905,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -41142,18 +96962,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -41164,60 +96986,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:600: \$PREPARSER ./calc input"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -41228,19 +97040,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -41251,94 +97065,117 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:600: cat stderr"
-echo calc.at:600 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:600: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:653:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:653"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:653: cat stderr"
+at_fn_check_prepare_trace "calc.at:653"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:653"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  95 ) # 95. calc.at:601: Calculator %glr-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:601'
-    at_desc='Calculator %glr-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N " 95: Calculator %glr-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "95. calc.at:601: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_229
+#AT_START_230
+at_fn_group_banner 230 'calc.at:654' \
+  "Calculator %glr-parser %error-verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc" "" 12
+at_xfail=no
+(
+  $as_echo "230. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -41350,59 +97187,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%glr-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc
+%glr-parser %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (
 
-                     const char *s
-                     );
-static int yylex (void);
-static int get_char (void);
-static void unget_char ( int c);
-%}
+static void calcerror ( const char *msg);
+int calclex (void);
+}
 
 
 
@@ -41411,7 +97241,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -41444,34 +97274,51 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (yylloc).first_line, (yylloc).first_column);
-  if ((yylloc).first_line != (yylloc).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (yylloc).last_line,  (yylloc).last_column - 1);
-  else if ((yylloc).first_column != (yylloc).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (yylloc).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (calclloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -41481,26 +97328,25 @@
   int res = getc (input);
   ;
 
-  last_yylloc = (yylloc);
+  last_yylloc = (calclloc);
   if (res == '\n')
     {
-      (yylloc).last_line++;
-      (yylloc).last_column = 0;
+      (calclloc).last_line++;
+      (calclloc).last_column = 1;
     }
   else
-    (yylloc).last_column++;
+    (calclloc).last_column++;
 
   return res;
 }
 
-
 static void
 unget_char ( int c)
 {
   ;
 
   /* Wrong when C == `\n'. */
-  (yylloc) = last_yylloc;
+  (calclloc) = last_yylloc;
 
   ungetc (c, input);
 }
@@ -41531,46 +97377,29 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (void)
+int calclex (void)
 {
-  static int init = 1;
   int c;
-
-  if (init)
+  /* Skip current token, then white spaces.  */
+  do
     {
-      init = 0;
-
-      (yylloc).last_column = 0;
-      (yylloc).last_line = 1;
+     (calclloc).first_column = (calclloc).last_column;
+      (calclloc).first_line   = (calclloc).last_line;
 
     }
-
-
- (yylloc).first_column = (yylloc).last_column;
-  (yylloc).first_line   = (yylloc).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char ()) == ' ' || c == '\t')
-    {
-     (yylloc).first_column = (yylloc).last_column;
-      (yylloc).first_line   = (yylloc).last_line;
-
-    }
+  while ((c = get_char ()) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
     {
       unget_char ( c);
-      (yylval).ival = read_signed_integer ();
+      (calclval).ival = read_signed_integer ();
       return NUM;
     }
 
@@ -41581,19 +97410,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -41617,12 +97459,12 @@
       return 3;
     }
 
-  yydebug = 1;
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  calcdebug = 1;
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -41631,55 +97473,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:601: bison -o calc.c calc.y"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:654: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:654"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:654: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:654"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:654: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:654"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:654: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:654"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:601: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:654: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:654"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:654"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:654"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:654"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -41699,62 +97664,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -41765,18 +97734,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -41784,60 +97755,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -41848,18 +97809,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -41867,60 +97830,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -41931,18 +97884,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -41950,60 +97905,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -42014,18 +97959,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -42033,30 +97980,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -42064,30 +97999,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -42098,18 +98035,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -42117,57 +98056,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc /dev/null"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -42178,18 +98107,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -42197,30 +98128,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -42235,8 +98154,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -42244,30 +98163,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -42278,21 +98199,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -42301,63 +98224,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -42368,18 +98281,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -42388,60 +98303,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:601: \$PREPARSER ./calc input"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -42452,19 +98357,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -42473,94 +98380,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:601: cat stderr"
-echo calc.at:601 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:601: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:654:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:654"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:654: cat stderr"
+at_fn_check_prepare_trace "calc.at:654"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:654"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  96 ) # 96. calc.at:603: Calculator %glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:603'
-    at_desc='Calculator %glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N " 96: Calculator %glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "96. calc.at:603: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_230
+#AT_START_231
+at_fn_group_banner 231 'calc.at:655' \
+  "Calculator %glr-parser %error-verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc" "" 12
+at_xfail=no
+(
+  $as_echo "231. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -42572,59 +98500,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc
+%glr-parser %error-verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (YYLTYPE *llocp,
 
-                     const char *s
-                     );
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
+static void calcerror ( const char *msg);
+int calclex (void);
+}
 
 
 
@@ -42633,7 +98554,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -42666,34 +98587,1364 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (YYLTYPE *llocp,
-
-         const char *s)
+static int
+power (int base, int exponent)
 {
-
-
-  fprintf (stderr, "%d.%d",
-           (*llocp).first_line, (*llocp).first_column);
-  if ((*llocp).first_line != (*llocp).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (*llocp).last_line,  (*llocp).last_column - 1);
-  else if ((*llocp).first_column != (*llocp).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (*llocp).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (calclloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (void);
+static int get_char (void);
+static void unget_char ( int c);
+
+
+static CALCLTYPE last_yylloc;
+
+static int
+get_char (void)
+{
+  int res = getc (input);
+  ;
+
+  last_yylloc = (calclloc);
+  if (res == '\n')
+    {
+      (calclloc).last_line++;
+      (calclloc).last_column = 1;
+    }
+  else
+    (calclloc).last_column++;
+
+  return res;
+}
+
+static void
+unget_char ( int c)
+{
+  ;
+
+  /* Wrong when C == `\n'. */
+  (calclloc) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (void)
+{
+  int c = get_char ();
+  int sign = 1;
+  int n = 0;
+
+  ;
+  if (c == '-')
+    {
+      c = get_char ();
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char ();
+    }
+
+  unget_char ( c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (void)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (calclloc).first_column = (calclloc).last_column;
+      (calclloc).first_line   = (calclloc).last_line;
+
+    }
+  while ((c = get_char ()) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char ( c);
+      (calclval).ival = read_signed_integer ();
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+  calcdebug = 1;
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:655: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:655"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:655: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:655"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:655: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:655"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:655: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:655"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/calc.at:655: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:655"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:655"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:655"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:655"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:655"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:655: cat stderr"
+at_fn_check_prepare_trace "calc.at:655"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:655"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_231
+#AT_START_232
+at_fn_group_banner 232 'calc.at:657' \
+  "Calculator %glr-parser %define api.pure %error-verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc" "" 12
+at_xfail=no
+(
+  $as_echo "232. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%glr-parser %define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc
+
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+static void calcerror (YYLTYPE const * const llocp,  const char *msg);
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp);
+static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
+static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -42707,7 +99958,7 @@
   if (res == '\n')
     {
       (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).last_column = 1;
     }
   else
     (*llocp).last_column++;
@@ -42715,7 +99966,6 @@
   return res;
 }
 
-
 static void
 unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
 {
@@ -42753,40 +100003,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (*llocp).first_column = (*llocp).last_column;
       (*llocp).first_line   = (*llocp).last_line;
 
     }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -42803,19 +100036,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -42839,12 +100085,12 @@
       return 3;
     }
 
-  yydebug = 1;
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  calcdebug = 1;
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -42853,55 +100099,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:603: bison -o calc.c calc.y"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:657: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:657"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:657: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:657"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:657: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:657"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:657: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:657"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:603: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:657: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:657"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:657"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:657"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:657"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -42921,62 +100290,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -42987,18 +100360,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -43006,60 +100381,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -43070,18 +100435,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -43089,60 +100456,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -43153,18 +100510,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -43172,60 +100531,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -43236,18 +100585,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -43255,30 +100606,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -43286,30 +100625,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -43320,18 +100661,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -43339,57 +100682,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc /dev/null"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -43400,18 +100733,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -43419,30 +100754,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -43457,8 +100780,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -43466,30 +100789,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -43500,21 +100825,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -43523,63 +100850,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -43590,18 +100907,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -43610,60 +100929,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:603: \$PREPARSER ./calc input"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -43674,19 +100983,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -43695,94 +101006,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:603: cat stderr"
-echo calc.at:603 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:603: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:657:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:657"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:657: cat stderr"
+at_fn_check_prepare_trace "calc.at:657"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:657"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  97 ) # 97. calc.at:605: Calculator %glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
-    at_setup_line='calc.at:605'
-    at_desc='Calculator %glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}'
-    $at_quiet $ECHO_N " 97: Calculator %glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}$ECHO_C"
-    at_xfail=no
-    (
-      echo "97. calc.at:605: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_232
+#AT_START_233
+at_fn_group_banner 233 'calc.at:659' \
+  "Calculator %glr-parser %define api.pure %error-verbose %debug %locations %defines %name-prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}" "" 12
+at_xfail=no
+(
+  $as_echo "233. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -43794,59 +101126,52 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%glr-parser %pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
+%glr-parser %define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
 
-%{
-#include <stdio.h>
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
 static int power (int base, int exponent);
-/* yyerror receives the location if:
-   - %location & %pure & %glr
-   - %location & %pure & %yacc & %parse-param. */
-static void yyerror (YYLTYPE *llocp,
-                     semantic_value *result, int *count,
-                     const char *s
-                     );
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
+
+static void calcerror (YYLTYPE const * const llocp, semantic_value *result, int *count,  const char *msg);
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
 
 
 
@@ -43855,7 +101180,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -43888,34 +101213,53 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
 
-static void
-yyerror (YYLTYPE *llocp,
-         semantic_value *result, int *count,
-         const char *s)
+static int
+power (int base, int exponent)
 {
-(void) result; (void) count;
-
-  fprintf (stderr, "%d.%d",
-           (*llocp).first_line, (*llocp).first_column);
-  if ((*llocp).first_line != (*llocp).last_line)
-    fprintf (stderr, "-%d.%d",
-	     (*llocp).last_line,  (*llocp).last_column - 1);
-  else if ((*llocp).first_column != (*llocp).last_column - 1)
-    fprintf (stderr, "-%d",
-	     (*llocp).last_column - 1);
-  fprintf (stderr, ": ");
-  fprintf (stderr, "%s\n", s);
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
 }
 
 
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror (YYLTYPE const * const llocp, semantic_value *result, int *count,  const char *msg)
+{
+  YYUSE(result);
+  YYUSE(count);
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp);
+static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
+static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
+
 
 static YYLTYPE last_yylloc;
 
@@ -43929,7 +101273,7 @@
   if (res == '\n')
     {
       (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).last_column = 1;
     }
   else
     (*llocp).last_column++;
@@ -43937,7 +101281,6 @@
   return res;
 }
 
-
 static void
 unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
 {
@@ -43975,40 +101318,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int calclex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
+  /* Skip current token, then white spaces.  */
+  do
     {
      (*llocp).first_column = (*llocp).last_column;
       (*llocp).first_line   = (*llocp).last_line;
 
     }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -44025,19 +101351,32 @@
   /* Return single chars. */
   return c;
 }
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
+_ATEOF
 
 
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -44061,12 +101400,12 @@
       return 3;
     }
 
-  yydebug = 1;
-  status = yyparse (&result, &count);
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  calcdebug = 1;
+  status = calcparse (&result, &count);
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -44075,55 +101414,178 @@
 
 
 
-$at_traceoff
-echo "calc.at:605: bison -o calc.c calc.y"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; bison -o calc.c calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:659: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:659"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:659: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:659"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:659: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:659"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:659: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:659"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "calc.at:605: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c \$LIBS"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/calc.at:659: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:659"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:659"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:659"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:659"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -44143,62 +101605,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44209,18 +101675,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -44228,60 +101696,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44292,18 +101750,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -44311,60 +101771,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44375,18 +101825,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -44394,60 +101846,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44458,18 +101900,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -44477,30 +101921,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -44508,30 +101940,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44542,18 +101976,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -44561,57 +101997,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc /dev/null"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44622,18 +102048,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -44641,30 +102069,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -44679,8 +102095,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -44688,30 +102104,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44722,21 +102140,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -44745,63 +102165,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44812,18 +102222,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -44832,60 +102244,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:605: \$PREPARSER ./calc input"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -44896,19 +102298,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -44917,103 +102321,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:605: cat stderr"
-echo calc.at:605 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:605: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-
-  banner-11 ) # Banner 11. calc.at:612
-    cat <<\_ATEOF
-
-Simple LALR(1) C++ Calculator.
-
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
 _ATEOF
-    ;;
 
-  98 ) # 98. calc.at:621: Calculator %skeleton "lalr1.cc" %defines %locations
-    at_setup_line='calc.at:621'
-    at_desc='Calculator %skeleton "lalr1.cc" %defines %locations '
-    $at_quiet $ECHO_N " 98: Calculator %skeleton "lalr1.cc" %defines %locations $ECHO_C"
-    at_xfail=no
-    (
-      echo "98. calc.at:621: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:659:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:659"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:659: cat stderr"
+at_fn_check_prepare_trace "calc.at:659"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:659"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_233
+#AT_START_234
+at_fn_group_banner 234 'calc.at:660' \
+  "Calculator %glr-parser %define api.pure %error-verbose %debug %locations %defines %define api.prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}" "" 12
+at_xfail=no
+(
+  $as_echo "234. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -45025,77 +102441,1376 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%skeleton "lalr1.cc" %defines %locations
-%define "global_tokens_and_yystype"
-%{
-#include <stdio.h>
+%glr-parser %define api.pure %error-verbose %debug %locations %defines %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
+%code requires
+{
 
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { fprintf (yyoutput, "%d", $$); } <ival>;
 
-%{
-static int power (int base, int exponent);
-#ifndef YYLTYPE
-# define YYLTYPE yy::location
-#endif
-#define first_line   begin.line
-#define first_column begin.column
-#define last_line    end.line
-#define last_column  end.column
-
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
-
-/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++. */
-%initial-action {
-  @$.initialize (0);
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
 }
 
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+static void calcerror (CALCLTYPE const * const llocp, semantic_value *result, int *count,  const char *msg);
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+}
+
+
 
 /* Bison Declarations */
 %token CALC_EOF 0 "end of input"
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         { ++*count; ++global_count; }
+;
+
+line:
+  '\n'
+| exp '\n'           { *result = global_result = $1; }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void calcerror (CALCLTYPE const * const llocp, semantic_value *result, int *count,  const char *msg)
+{
+  YYUSE(result);
+  YYUSE(count);
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+_ATEOF
+
+
+
+cat >calc-lex.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <ctype.h>
+
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+static int get_char (CALCSTYPE *lvalp, CALCLTYPE *llocp);
+static void unget_char (CALCSTYPE *lvalp, CALCLTYPE *llocp,  int c);
+
+
+static CALCLTYPE last_yylloc;
+
+static int
+get_char (CALCSTYPE *lvalp, CALCLTYPE *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).last_line++;
+      (*llocp).last_column = 1;
+    }
+  else
+    (*llocp).last_column++;
+
+  return res;
+}
+
+static void
+unget_char (CALCSTYPE *lvalp, CALCLTYPE *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (CALCSTYPE *lvalp, CALCLTYPE *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (CALCSTYPE *lvalp, CALCLTYPE *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).first_column = (*llocp).last_column;
+      (*llocp).first_line   = (*llocp).last_line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.c <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.h"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+  calcdebug = 1;
+  status = calcparse (&result, &count);
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:660: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.c calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:660"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:660: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y" "calc.at:660"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:660: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:660"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:660: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:660"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: bison -o calc.c calc.y"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; bison -o calc.c calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/calc.at:660: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "calc.at:660"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.c calc-lex.c calc-main.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS" "calc.at:660"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.c
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:660"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.c
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.h
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:660"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.h
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:660"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:660: cat stderr"
+at_fn_check_prepare_trace "calc.at:660"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:660"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_234
+#AT_START_235
+at_fn_group_banner 235 'calc.at:670' \
+  "Calculator %skeleton \"lalr1.cc\" %defines %locations" "" 13
+at_xfail=no
+(
+  $as_echo "235. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%skeleton "lalr1.cc" %defines %locations
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -45128,154 +103843,177 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
 
 /* A C++ error reporting function.  */
 void
-yy::parser::error (const location& l, const std::string& m)
+yy::parser::error (const location_type& l, const std::string& m)
 {
   (void) l;
   std::cerr << l << ": " << m << std::endl;
 }
+_ATEOF
 
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static int get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static void unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c);
+
+
+static yy::parser::location_type last_yylloc;
+
+static int
+get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ yyparse that simulates the C signature.  */
 int
 yyparse ()
 {
   yy::parser parser;
-  parser.set_debug_level (!!YYDEBUG);
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
   return parser.parse ();
 }
 
 
+semantic_value global_result = 0;
+int global_count = 0;
 
-
-static YYLTYPE last_yylloc;
-
-static int
-get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  int res = getc (input);
-  (void) lvalp;(void) llocp;
-
-  last_yylloc = (*llocp);
-  if (res == '\n')
-    {
-      (*llocp).last_line++;
-      (*llocp).last_column = 0;
-    }
-  else
-    (*llocp).last_column++;
-
-  return res;
-}
-
-
-static void
-unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
-{
-  (void) lvalp;(void) llocp;
-
-  /* Wrong when C == `\n'. */
-  (*llocp) = last_yylloc;
-
-  ungetc (c, input);
-}
-
-static int
-read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  int c = get_char (lvalp, llocp);
-  int sign = 1;
-  int n = 0;
-
-  (void) lvalp;(void) llocp;
-  if (c == '-')
-    {
-      c = get_char (lvalp, llocp);
-      sign = -1;
-    }
-
-  while (isdigit (c))
-    {
-      n = 10 * n + (c - '0');
-      c = get_char (lvalp, llocp);
-    }
-
-  unget_char (lvalp, llocp,  c);
-
-  return sign * n;
-}
-
-
-
-/*---------------------------------------------------------------.
-| Lexical analyzer returns an integer on the stack and the token |
-| NUM, or the ASCII character read if not a number.  Skips all   |
-| blanks and tabs, returns 0 for EOF.                            |
-`---------------------------------------------------------------*/
-
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  static int init = 1;
-  int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
-    {
-     (*llocp).first_column = (*llocp).last_column;
-      (*llocp).first_line   = (*llocp).last_line;
-
-    }
-
-  /* process numbers   */
-  if (c == '.' || isdigit (c))
-    {
-      unget_char (lvalp, llocp,  c);
-      (*lvalp).ival = read_signed_integer (lvalp, llocp);
-      return NUM;
-    }
-
-  /* Return end-of-file.  */
-  if (c == EOF)
-    return CALC_EOF;
-
-  /* Return single chars. */
-  return c;
-}
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
-
-
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -45301,10 +104039,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -45313,81 +104051,179 @@
 
 
 
-$at_traceoff
-echo "calc.at:621: bison -o calc.cc calc.y"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; bison -o calc.cc calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:670: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:670"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:670: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:670"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:670: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:670"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:670: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:670"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "calc.at:621: \$BISON_CXX_WORKS"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:670"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:670"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "calc.at:621: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc \$LIBS"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:670"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
 
-$at_traceon
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:670"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -45407,62 +104243,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -45473,18 +104313,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -45493,60 +104335,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -45557,18 +104389,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -45577,60 +104411,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -45641,18 +104465,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -45661,60 +104487,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -45725,18 +104541,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -45745,30 +104563,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -45776,30 +104582,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -45810,18 +104618,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -45830,57 +104640,47 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc /dev/null"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -45891,18 +104691,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -45911,30 +104713,18 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -45949,8 +104739,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -45958,30 +104748,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -45992,21 +104784,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -46016,63 +104810,53 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -46083,18 +104867,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -46104,60 +104890,50 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:621: \$PREPARSER ./calc input"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -46168,19 +104944,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -46190,94 +104968,116 @@
 sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:621: cat stderr"
-echo calc.at:621 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:621: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:670:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:670"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:670: cat stderr"
+at_fn_check_prepare_trace "calc.at:670"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:670"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  99 ) # 99. calc.at:622: Calculator %skeleton "lalr1.cc" %defines %locations %error-verbose %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:622'
-    at_desc='Calculator %skeleton "lalr1.cc" %defines %locations %error-verbose %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N " 99: Calculator %skeleton "lalr1.cc" %defines %locations %error-verbose %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "99. calc.at:622: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_235
+#AT_START_236
+at_fn_group_banner 236 'calc.at:679' \
+  "Calculator %language \"C++\" %defines %locations " "" 13
+at_xfail=no
+(
+  $as_echo "236. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -46289,77 +105089,61 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%skeleton "lalr1.cc" %defines %locations %error-verbose %name-prefix="calc" %verbose %yacc
-%define "global_tokens_and_yystype"
-%{
-#include <stdio.h>
+%language "C++" %defines %locations
+%define global_tokens_and_yystype
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { yyoutput << $$; } <ival>;
 
-%{
-static int power (int base, int exponent);
-#ifndef YYLTYPE
-# define YYLTYPE calc::location
-#endif
-#define first_line   begin.line
-#define first_column begin.column
-#define last_line    end.line
-#define last_column  end.column
-
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
-
-/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++. */
-%initial-action {
-  @$.initialize (0);
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
 }
 
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+
 
 /* Bison Declarations */
 %token CALC_EOF 0 "end of input"
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -46392,37 +105176,54 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
 
 /* A C++ error reporting function.  */
 void
-calc::parser::error (const location& l, const std::string& m)
+yy::parser::error (const location_type& l, const std::string& m)
 {
   (void) l;
   std::cerr << l << ": " << m << std::endl;
 }
-
-int
-yyparse ()
-{
-  calc::parser parser;
-  parser.set_debug_level (!!YYDEBUG);
-  return parser.parse ();
-}
+_ATEOF
 
 
 
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
 
-static YYLTYPE last_yylloc;
+#include "calc.hh"
+
+#include <ctype.h>
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static int get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static void unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c);
+
+
+static yy::parser::location_type last_yylloc;
 
 static int
-get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
+get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
 {
   int res = getc (input);
   (void) lvalp;(void) llocp;
@@ -46430,18 +105231,17 @@
   last_yylloc = (*llocp);
   if (res == '\n')
     {
-      (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
     }
   else
-    (*llocp).last_column++;
+    (*llocp).end.column++;
 
   return res;
 }
 
-
 static void
-unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
+unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c)
 {
   (void) lvalp;(void) llocp;
 
@@ -46452,7 +105252,7 @@
 }
 
 static int
-read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
+read_signed_integer (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
 {
   int c = get_char (lvalp, llocp);
   int sign = 1;
@@ -46477,40 +105277,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
+  /* Skip current token, then white spaces.  */
+  do
     {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
 
     }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
-    {
-     (*llocp).first_column = (*llocp).last_column;
-      (*llocp).first_line   = (*llocp).last_line;
-
-    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -46527,19 +105310,43 @@
   /* Return single chars. */
   return c;
 }
+_ATEOF
 
-static int
-power (int base, int exponent)
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ yyparse that simulates the C signature.  */
+int
+yyparse ()
 {
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
+  yy::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
 }
 
 
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -46565,10 +105372,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -46577,81 +105384,179 @@
 
 
 
-$at_traceoff
-echo "calc.at:622: bison -o calc.cc calc.y"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; bison -o calc.cc calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:679: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:679"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:679: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:679"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:679: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:679"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:679: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:679"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "calc.at:622: \$BISON_CXX_WORKS"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:679"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:679"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "calc.at:622: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc \$LIBS"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:679"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
 
-$at_traceon
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:679"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -46671,62 +105576,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -46737,79 +105646,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -46820,79 +105722,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -46903,79 +105798,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -46986,49 +105874,40 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -47036,30 +105915,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -47070,76 +105951,69 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc /dev/null"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -47150,49 +106024,40 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -47207,8 +106072,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -47216,30 +106081,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -47250,86 +106117,79 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -47340,80 +106200,73 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:622: \$PREPARSER ./calc input"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -47424,115 +106277,140 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:622: cat stderr"
-echo calc.at:622 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:622: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:679:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:679"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:679: cat stderr"
+at_fn_check_prepare_trace "calc.at:679"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:679"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  100 ) # 100. calc.at:624: Calculator %skeleton "lalr1.cc" %defines %locations %error-verbose %debug %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:624'
-    at_desc='Calculator %skeleton "lalr1.cc" %defines %locations %error-verbose %debug %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N "100: Calculator %skeleton "lalr1.cc" %defines %locations %error-verbose %debug %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "100. calc.at:624: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_236
+#AT_START_237
+at_fn_group_banner 237 'calc.at:680' \
+  "Calculator %language \"C++\" %defines %locations %define api.location.type Span" "" 13
+at_xfail=no
+(
+  $as_echo "237. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -47544,77 +106422,93 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%skeleton "lalr1.cc" %defines %locations %error-verbose %debug %name-prefix="calc" %verbose %yacc
-%define "global_tokens_and_yystype"
-%{
-#include <stdio.h>
+%language "C++" %defines %locations %define api.location.type Span
+%define global_tokens_and_yystype
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
+# include <iostream>
+  struct Point
+  {
+    int l;
+    int c;
+  };
 
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
+  struct Span
+  {
+    Point first;
+    Point last;
+  };
 
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
+  do                                                                    \
+    if (N)                                                              \
+      {                                                                 \
+        (Current).first = YYRHSLOC (Rhs, 1).first;                      \
+        (Current).last  = YYRHSLOC (Rhs, N).last;                       \
+      }                                                                 \
+    else                                                                \
+      {                                                                 \
+        (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last;      \
+      }                                                                 \
+  while (false)
+
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { yyoutput << $$; } <ival>;
 
-%{
-static int power (int base, int exponent);
-#ifndef YYLTYPE
-# define YYLTYPE calc::location
-#endif
-#define first_line   begin.line
-#define first_column begin.column
-#define last_line    end.line
-#define last_column  end.column
-
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
-
-/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++. */
-%initial-action {
-  @$.initialize (0);
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
 }
 
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+
+%initial-action
+{
+  @$.first.l = @$.first.c = 1;
+  @$.last = @$.first;
+}
 
 /* Bison Declarations */
 %token CALC_EOF 0 "end of input"
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -47647,37 +106541,65 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+  std::ostream&
+  operator<< (std::ostream& o, const Span& s)
+  {
+    o << s.first.l << '.' << s.first.c;
+    if (s.first.l != s.last.l)
+      o << '-' << s.last.l << '.' << s.last.c - 1;
+    else if (s.first.c != s.last.c - 1)
+      o << '-' << s.last.c - 1;
+    return o;
+  }
 
 /* A C++ error reporting function.  */
 void
-calc::parser::error (const location& l, const std::string& m)
+yy::parser::error (const location_type& l, const std::string& m)
 {
   (void) l;
   std::cerr << l << ": " << m << std::endl;
 }
-
-int
-yyparse ()
-{
-  calc::parser parser;
-  parser.set_debug_level (!!YYDEBUG);
-  return parser.parse ();
-}
+_ATEOF
 
 
 
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
 
-static YYLTYPE last_yylloc;
+#include "calc.hh"
+
+#include <ctype.h>
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static int get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static void unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c);
+
+
+static yy::parser::location_type last_yylloc;
 
 static int
-get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
+get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
 {
   int res = getc (input);
   (void) lvalp;(void) llocp;
@@ -47685,18 +106607,17 @@
   last_yylloc = (*llocp);
   if (res == '\n')
     {
-      (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).last.l++;
+      (*llocp).last.c = 1;
     }
   else
-    (*llocp).last_column++;
+    (*llocp).last.c++;
 
   return res;
 }
 
-
 static void
-unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
+unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c)
 {
   (void) lvalp;(void) llocp;
 
@@ -47707,7 +106628,7 @@
 }
 
 static int
-read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
+read_signed_integer (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
 {
   int c = get_char (lvalp, llocp);
   int sign = 1;
@@ -47732,40 +106653,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
+  /* Skip current token, then white spaces.  */
+  do
     {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
+     (*llocp).first.c = (*llocp).last.c;
+      (*llocp).first.l   = (*llocp).last.l;
 
     }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
-    {
-     (*llocp).first_column = (*llocp).last_column;
-      (*llocp).first_line   = (*llocp).last_line;
-
-    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -47782,19 +106686,43 @@
   /* Return single chars. */
   return c;
 }
+_ATEOF
 
-static int
-power (int base, int exponent)
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ yyparse that simulates the C signature.  */
+int
+yyparse ()
 {
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
+  yy::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
 }
 
 
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -47820,10 +106748,10 @@
 
 
   status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -47832,81 +106760,179 @@
 
 
 
-$at_traceoff
-echo "calc.at:624: bison -o calc.cc calc.y"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; bison -o calc.cc calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:680: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:680"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:680: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:680"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:680: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:680"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:680: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:680"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "calc.at:624: \$BISON_CXX_WORKS"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:680"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:680"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "calc.at:624: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc \$LIBS"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:680"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
 
-$at_traceon
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:680"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -47926,62 +106952,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -47992,79 +107022,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -48075,79 +107098,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -48158,79 +107174,72 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -48241,49 +107250,40 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -48291,30 +107291,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -48325,76 +107327,69 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc /dev/null"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -48405,49 +107400,40 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -48462,8 +107448,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -48471,30 +107457,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -48505,86 +107493,79 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -48595,80 +107576,73 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:624: \$PREPARSER ./calc input"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -48679,115 +107653,140 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
 # 3. If locations are not used, remove them.
 
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
-
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
 # 5. Check
-$at_traceoff
-echo "calc.at:624: cat stderr"
-echo calc.at:624 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:624: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:680:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:680"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:680: cat stderr"
+at_fn_check_prepare_trace "calc.at:680"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:680"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  101 ) # 101. calc.at:626: Calculator %skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:626'
-    at_desc='Calculator %skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N "101: Calculator %skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "101. calc.at:626: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_237
+#AT_START_238
+at_fn_group_banner 238 'calc.at:681' \
+  "Calculator %language \"C++\" %defines %locations %error-verbose %name-prefix \"calc\" %verbose %yacc" "" 13
+at_xfail=no
+(
+  $as_echo "238. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -48799,77 +107798,61 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc
-%define "global_tokens_and_yystype"
-%{
-#include <stdio.h>
+%language "C++" %defines %locations %error-verbose %name-prefix "calc" %verbose %yacc
+%define global_tokens_and_yystype
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { yyoutput << $$; } <ival>;
 
-%{
-static int power (int base, int exponent);
-#ifndef YYLTYPE
-# define YYLTYPE calc::location
-#endif
-#define first_line   begin.line
-#define first_column begin.column
-#define last_line    end.line
-#define last_column  end.column
-
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
-
-/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++. */
-%initial-action {
-  @$.initialize (0);
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
 }
 
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
 
 /* Bison Declarations */
 %token CALC_EOF 0 "end of input"
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -48902,37 +107885,54 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
 
 /* A C++ error reporting function.  */
 void
-calc::parser::error (const location& l, const std::string& m)
+calc::parser::error (const location_type& l, const std::string& m)
 {
   (void) l;
   std::cerr << l << ": " << m << std::endl;
 }
-
-int
-yyparse ()
-{
-  calc::parser parser;
-  parser.set_debug_level (!!YYDEBUG);
-  return parser.parse ();
-}
+_ATEOF
 
 
 
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
 
-static YYLTYPE last_yylloc;
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
 
 static int
-get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
 {
   int res = getc (input);
   (void) lvalp;(void) llocp;
@@ -48940,18 +107940,17 @@
   last_yylloc = (*llocp);
   if (res == '\n')
     {
-      (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
     }
   else
-    (*llocp).last_column++;
+    (*llocp).end.column++;
 
   return res;
 }
 
-
 static void
-unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
 {
   (void) lvalp;(void) llocp;
 
@@ -48962,7 +107961,7 @@
 }
 
 static int
-read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
 {
   int c = get_char (lvalp, llocp);
   int sign = 1;
@@ -48987,40 +107986,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
+  /* Skip current token, then white spaces.  */
+  do
     {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
 
     }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
-    {
-     (*llocp).first_column = (*llocp).last_column;
-      (*llocp).first_line   = (*llocp).last_line;
-
-    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -49037,19 +108019,43 @@
   /* Return single chars. */
   return c;
 }
+_ATEOF
 
-static int
-power (int base, int exponent)
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse ()
 {
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
+  calc::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
 }
 
 
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -49074,11 +108080,11 @@
     }
 
 
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -49087,81 +108093,179 @@
 
 
 
-$at_traceoff
-echo "calc.at:626: bison -o calc.cc calc.y"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; bison -o calc.cc calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:681: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:681"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:681: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:681"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:681: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:681"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:681: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:681"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "calc.at:626: \$BISON_CXX_WORKS"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:681"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:681"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "calc.at:626: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc \$LIBS"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:681"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
 
-$at_traceon
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:681"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -49181,62 +108285,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49247,18 +108355,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -49266,60 +108376,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49330,18 +108430,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -49349,60 +108451,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49413,18 +108505,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -49432,60 +108526,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49496,18 +108580,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -49515,30 +108601,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -49546,30 +108620,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49580,18 +108656,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -49599,57 +108677,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc /dev/null"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49660,18 +108728,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -49679,30 +108749,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -49717,8 +108775,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -49726,30 +108784,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49760,21 +108820,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -49783,63 +108845,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49850,18 +108902,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -49870,60 +108924,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:626: \$PREPARSER ./calc input"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -49934,19 +108978,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -49955,94 +109001,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:626: cat stderr"
-echo calc.at:626 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:626: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
 
-$at_traceon
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:681:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:681"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:681: cat stderr"
+at_fn_check_prepare_trace "calc.at:681"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:681"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  102 ) # 102. calc.at:628: Calculator %skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
-    at_setup_line='calc.at:628'
-    at_desc='Calculator %skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}'
-    $at_quiet $ECHO_N "102: Calculator %skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}$ECHO_C"
-    at_xfail=no
-    (
-      echo "102. calc.at:628: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_238
+#AT_START_239
+at_fn_group_banner 239 'calc.at:682' \
+  "Calculator %language \"C++\" %defines %locations %error-verbose %define api.prefix \"calc\" %verbose %yacc" "" 13
+at_xfail=no
+(
+  $as_echo "239. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -50054,77 +109121,4030 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%skeleton "lalr1.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
-%define "global_tokens_and_yystype"
-%{
-#include <stdio.h>
+%language "C++" %defines %locations %error-verbose %define api.prefix "calc" %verbose %yacc
+%define global_tokens_and_yystype
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { yyoutput << $$; } <ival>;
 
-%{
-static int power (int base, int exponent);
-#ifndef YYLTYPE
-# define YYLTYPE calc::location
-#endif
-#define first_line   begin.line
-#define first_column begin.column
-#define last_line    end.line
-#define last_column  end.column
-
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
-
-/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++. */
-%initial-action {
-  @$.initialize (0);
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
 }
 
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
 
 /* Bison Declarations */
 %token CALC_EOF 0 "end of input"
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse ()
+{
+  calc::parser parser;
+#if CALCDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:682: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:682"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:682: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:682"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:682: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:682"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:682: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:682"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:682"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:682"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:682"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:682"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:682"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:682: cat stderr"
+at_fn_check_prepare_trace "calc.at:682"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:682"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_239
+#AT_START_240
+at_fn_group_banner 240 'calc.at:683' \
+  "Calculator %language \"C++\" %defines %locations %error-verbose %debug %name-prefix \"calc\" %verbose %yacc" "" 13
+at_xfail=no
+(
+  $as_echo "240. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %defines %locations %error-verbose %debug %name-prefix "calc" %verbose %yacc
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse ()
+{
+  calc::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:683: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:683"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:683: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:683"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:683: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:683"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:683: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:683"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:683"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:683"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:683"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:683"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:683"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:683: cat stderr"
+at_fn_check_prepare_trace "calc.at:683"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:683"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_240
+#AT_START_241
+at_fn_group_banner 241 'calc.at:685' \
+  "Calculator %language \"C++\" %defines %locations %pure-parser %error-verbose %debug %define api.prefix \"calc\" %verbose %yacc" "" 13
+at_xfail=no
+(
+  $as_echo "241. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %defines %locations %pure-parser %error-verbose %debug %define api.prefix "calc" %verbose %yacc
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse ()
+{
+  calc::parser parser;
+#if CALCDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:685: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:685"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:685: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:685"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:685: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:685"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:685: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:685"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:685"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:685"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:685"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:685"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:685"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:685: cat stderr"
+at_fn_check_prepare_trace "calc.at:685"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:685"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_241
+#AT_START_242
+at_fn_group_banner 242 'calc.at:687' \
+  "Calculator %language \"C++\" %defines %locations %pure-parser %error-verbose %debug %name-prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}" "" 13
+at_xfail=no
+(
+  $as_echo "242. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %defines %locations %pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -50157,154 +113177,177 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
 
 /* A C++ error reporting function.  */
 void
-calc::parser::error (const location& l, const std::string& m)
+calc::parser::error (const location_type& l, const std::string& m)
 {
   (void) l;
   std::cerr << l << ": " << m << std::endl;
 }
+_ATEOF
 
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
 int
-yyparse (semantic_value *result, int *count)
+calcparse (semantic_value *result, int *count)
 {
   calc::parser parser (result, count);
-  parser.set_debug_level (!!YYDEBUG);
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
   return parser.parse ();
 }
 
 
+semantic_value global_result = 0;
+int global_count = 0;
 
-
-static YYLTYPE last_yylloc;
-
-static int
-get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  int res = getc (input);
-  (void) lvalp;(void) llocp;
-
-  last_yylloc = (*llocp);
-  if (res == '\n')
-    {
-      (*llocp).last_line++;
-      (*llocp).last_column = 0;
-    }
-  else
-    (*llocp).last_column++;
-
-  return res;
-}
-
-
-static void
-unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
-{
-  (void) lvalp;(void) llocp;
-
-  /* Wrong when C == `\n'. */
-  (*llocp) = last_yylloc;
-
-  ungetc (c, input);
-}
-
-static int
-read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  int c = get_char (lvalp, llocp);
-  int sign = 1;
-  int n = 0;
-
-  (void) lvalp;(void) llocp;
-  if (c == '-')
-    {
-      c = get_char (lvalp, llocp);
-      sign = -1;
-    }
-
-  while (isdigit (c))
-    {
-      n = 10 * n + (c - '0');
-      c = get_char (lvalp, llocp);
-    }
-
-  unget_char (lvalp, llocp,  c);
-
-  return sign * n;
-}
-
-
-
-/*---------------------------------------------------------------.
-| Lexical analyzer returns an integer on the stack and the token |
-| NUM, or the ASCII character read if not a number.  Skips all   |
-| blanks and tabs, returns 0 for EOF.                            |
-`---------------------------------------------------------------*/
-
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  static int init = 1;
-  int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
-    {
-     (*llocp).first_column = (*llocp).last_column;
-      (*llocp).first_line   = (*llocp).last_line;
-
-    }
-
-  /* process numbers   */
-  if (c == '.' || isdigit (c))
-    {
-      unget_char (lvalp, llocp,  c);
-      (*lvalp).ival = read_signed_integer (lvalp, llocp);
-      return NUM;
-    }
-
-  /* Return end-of-file.  */
-  if (c == EOF)
-    return CALC_EOF;
-
-  /* Return single chars. */
-  return c;
-}
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
-
-
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -50329,11 +113372,11 @@
     }
 
 
-  status = yyparse (&result, &count);
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  status = calcparse (&result, &count);
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -50342,81 +113385,179 @@
 
 
 
-$at_traceoff
-echo "calc.at:628: bison -o calc.cc calc.y"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; bison -o calc.cc calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:687: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:687"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:687: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:687"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:687: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:687"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:687: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:687"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "calc.at:628: \$BISON_CXX_WORKS"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:687"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:687"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "calc.at:628: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc \$LIBS"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:687"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
 
-$at_traceon
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:687"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -50436,62 +113577,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -50502,18 +113647,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -50521,60 +113668,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -50585,18 +113722,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -50604,60 +113743,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -50668,18 +113797,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -50687,60 +113818,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -50751,18 +113872,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -50770,30 +113893,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -50801,30 +113912,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -50835,18 +113948,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -50854,57 +113969,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc /dev/null"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -50915,18 +114020,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -50934,30 +114041,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -50972,8 +114067,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -50981,30 +114076,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -51015,21 +114112,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -51038,63 +114137,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -51105,18 +114194,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -51125,60 +114216,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:628: \$PREPARSER ./calc input"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -51189,19 +114270,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -51210,103 +114293,115 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:628: cat stderr"
-echo calc.at:628 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-
-  banner-12 ) # Banner 12. calc.at:636
-    cat <<\_ATEOF
-
-Simple GLR C++ Calculator.
-
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
 _ATEOF
-    ;;
 
-  103 ) # 103. calc.at:651: Calculator %skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc
-    at_setup_line='calc.at:651'
-    at_desc='Calculator %skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc'
-    $at_quiet $ECHO_N "103: Calculator %skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc$ECHO_C"
-    at_xfail=no
-    (
-      echo "103. calc.at:651: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:687:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:687"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:687: cat stderr"
+at_fn_check_prepare_trace "calc.at:687"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:687"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 
 
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_242
+#AT_START_243
+at_fn_group_banner 243 'calc.at:688' \
+  "Calculator %language \"C++\" %defines %locations %pure-parser %error-verbose %debug %define api.prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}" "" 13
+at_xfail=no
+(
+  $as_echo "243. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -51318,1332 +114413,61 @@
 
 
 cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Infix notation calculator--calc */
-%skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc
-%define "global_tokens_and_yystype"
-%{
-#include <stdio.h>
+%language "C++" %defines %locations %pure-parser %error-verbose %debug %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
+%define global_tokens_and_yystype
+%code requires
+{
 
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
 
 /* Exercise %union. */
 %union
 {
   semantic_value ival;
 };
+%printer { yyoutput << $$; } <ival>;
 
-%{
-static int power (int base, int exponent);
-#ifndef YYLTYPE
-# define YYLTYPE calc::location
-#endif
-#define first_line   begin.line
-#define first_column begin.column
-#define last_line    end.line
-#define last_column  end.column
-
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
-
-/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++. */
-%initial-action {
-  @$.initialize (0);
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
 }
 
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
 
 /* Bison Declarations */
 %token CALC_EOF 0 "end of input"
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
-%left '-' '+'
-%left '*' '/'
-%left NEG     /* negation--unary minus */
-%right '^'    /* exponentiation        */
-
-/* Grammar follows */
-%%
-input:
-  line
-| input line         {  }
-;
-
-line:
-  '\n'
-| exp '\n'           { USE ($1); }
-;
-
-exp:
-  NUM                { $$ = $1;             }
-| exp '=' exp
-  {
-    if ($1 != $3)
-      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
-    $$ = $1;
-  }
-| exp '+' exp        { $$ = $1 + $3;        }
-| exp '-' exp        { $$ = $1 - $3;        }
-| exp '*' exp        { $$ = $1 * $3;        }
-| exp '/' exp        { $$ = $1 / $3;        }
-| '-' exp  %prec NEG { $$ = -$2;            }
-| exp '^' exp        { $$ = power ($1, $3); }
-| '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
-| '!'                { $$ = 0; YYERROR;     }
-| '-' error          { $$ = 0; YYERROR;     }
-;
-%%
-/* The input.  */
-static FILE *input;
-
-/* A C++ error reporting function.  */
-void
-calc::parser::error (const location& l, const std::string& m)
-{
-  (void) l;
-  std::cerr << l << ": " << m << std::endl;
-}
-
-int
-yyparse ()
-{
-  calc::parser parser;
-  parser.set_debug_level (!!YYDEBUG);
-  return parser.parse ();
-}
-
-
-
-
-static YYLTYPE last_yylloc;
-
-static int
-get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  int res = getc (input);
-  (void) lvalp;(void) llocp;
-
-  last_yylloc = (*llocp);
-  if (res == '\n')
-    {
-      (*llocp).last_line++;
-      (*llocp).last_column = 0;
-    }
-  else
-    (*llocp).last_column++;
-
-  return res;
-}
-
-
-static void
-unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
-{
-  (void) lvalp;(void) llocp;
-
-  /* Wrong when C == `\n'. */
-  (*llocp) = last_yylloc;
-
-  ungetc (c, input);
-}
-
-static int
-read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  int c = get_char (lvalp, llocp);
-  int sign = 1;
-  int n = 0;
-
-  (void) lvalp;(void) llocp;
-  if (c == '-')
-    {
-      c = get_char (lvalp, llocp);
-      sign = -1;
-    }
-
-  while (isdigit (c))
-    {
-      n = 10 * n + (c - '0');
-      c = get_char (lvalp, llocp);
-    }
-
-  unget_char (lvalp, llocp,  c);
-
-  return sign * n;
-}
-
-
-
-/*---------------------------------------------------------------.
-| Lexical analyzer returns an integer on the stack and the token |
-| NUM, or the ASCII character read if not a number.  Skips all   |
-| blanks and tabs, returns 0 for EOF.                            |
-`---------------------------------------------------------------*/
-
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
-{
-  static int init = 1;
-  int c;
-
-  if (init)
-    {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
-
-    }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
-    {
-     (*llocp).first_column = (*llocp).last_column;
-      (*llocp).first_line   = (*llocp).last_line;
-
-    }
-
-  /* process numbers   */
-  if (c == '.' || isdigit (c))
-    {
-      unget_char (lvalp, llocp,  c);
-      (*lvalp).ival = read_signed_integer (lvalp, llocp);
-      return NUM;
-    }
-
-  /* Return end-of-file.  */
-  if (c == EOF)
-    return CALC_EOF;
-
-  /* Return single chars. */
-  return c;
-}
-
-static int
-power (int base, int exponent)
-{
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
-}
-
-
-int
-main (int argc, const char **argv)
-{
-  semantic_value result = 0;
-  int count = 0;
-  int status;
-
-  /* This used to be alarm (10), but that isn't enough time for
-     a July 1995 vintage DEC Alphastation 200 4/100 system,
-     according to Nelson H. F. Beebe.  100 seconds is enough.  */
-  alarm (100);
-
-  if (argc == 2)
-    input = fopen (argv[1], "r");
-  else
-    input = stdin;
-
-  if (!input)
-    {
-      perror (argv[1]);
-      return 3;
-    }
-
-
-  status = yyparse ();
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
-  return status;
-}
-_ATEOF
-
-
-
-
-
-$at_traceoff
-echo "calc.at:651: bison -o calc.cc calc.y"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; bison -o calc.cc calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-$at_traceoff
-echo "calc.at:651: \$BISON_CXX_WORKS"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "calc.at:651: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc \$LIBS"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Test the priorities.
-cat >input <<'_ATEOF'
-1 + 2 * 3 = 7
-1 + 2 * -3 = -5
-
--1^2 = -1
-(-1)^2 = 1
-
----1 = -1
-
-1 - 2 - 3 = -4
-1 - (2 - 3) = 2
-
-2^2^3 = 256
-(2^2)^3 = 64
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-
-# Some syntax errors.
-cat >input <<'_ATEOF'
-0 0
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-cat >input <<'_ATEOF'
-1//2
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-cat >input <<'_ATEOF'
-error
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-cat >input <<'_ATEOF'
-1 = 2 = 3
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-cat >input <<'_ATEOF'
-
-+1
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc /dev/null"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-
-# Exercise the error token: without it, we die at the first error,
-# hence be sure to
-#
-# - have several errors which exercise different shift/discardings
-#   - (): nothing to pop, nothing to discard
-#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
-#   - (* * *): nothing to pop, a lot to discard
-#   - (1 + 2 * *): some to pop and discard
-#
-# - test the action associated to `error'
-#
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
-#   first error is ")", which is needed to recover from the error and
-#   produce the "0" that triggers the "0 != 1" error.
-#
-cat >input <<'_ATEOF'
-() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-calc: error: 4444 != 1
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-
-# The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
-cat >input <<'_ATEOF'
-(!) + (0 0) = 1
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
-calc: error: 2222 != 1
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
-_ATEOF
-
-$at_traceoff
-echo "calc.at:651: \$PREPARSER ./calc input"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-# Normalize the observed and expected error messages, depending upon the
-# options.
-# 1. Remove the traces from observed.
-sed '/^Starting/d
-/^Entering/d
-/^Stack/d
-/^Reading/d
-/^Reducing/d
-/^Shifting/d
-/^state/d
-/^Cleanup:/d
-/^Error:/d
-/^Next/d
-/^Discarding/d
-/ \$[0-9$]* = /d
-/^yydestructor:/d' stderr >at-stderr
-mv at-stderr stderr
-# 2. Create the reference error message.
-cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
-calc: error: 2222 != 1
-_ATEOF
-
-# 3. If locations are not used, remove them.
-
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-
-# 5. Check
-$at_traceoff
-echo "calc.at:651: cat stderr"
-echo calc.at:651 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:651: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  104 ) # 104. calc.at:653: Calculator %skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
-    at_setup_line='calc.at:653'
-    at_desc='Calculator %skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}'
-    $at_quiet $ECHO_N "104: Calculator %skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}$ECHO_C"
-    at_xfail=no
-    (
-      echo "104. calc.at:653: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
-
-
-
-cat >calc.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
-
-/* Infix notation calculator--calc */
-%skeleton "glr.cc" %defines %locations %pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
-%define "global_tokens_and_yystype"
-%{
-#include <stdio.h>
-
-#include <stdlib.h>
-#include <string.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-#include <ctype.h>
-#define USE(Var)
-
-/* Exercise pre-prologue dependency to %union.  */
-typedef int semantic_value;
-
-static semantic_value global_result = 0;
-static int global_count = 0;
-%}
-
-/* Exercise %union. */
-%union
-{
-  semantic_value ival;
-};
-
-%{
-static int power (int base, int exponent);
-#ifndef YYLTYPE
-# define YYLTYPE calc::location
-#endif
-#define first_line   begin.line
-#define first_column begin.column
-#define last_line    end.line
-#define last_column  end.column
-
-static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
-static int get_char (YYSTYPE *lvalp, YYLTYPE *llocp);
-static void unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c);
-%}
-
-/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++. */
-%initial-action {
-  @$.initialize (0);
-}
-
-
-/* Bison Declarations */
-%token CALC_EOF 0 "end of input"
-%token <ival> NUM "number"
-%type  <ival> exp
-
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -52676,37 +114500,54 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111;           }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
 | '!'                { $$ = 0; YYERROR;     }
 | '-' error          { $$ = 0; YYERROR;     }
 ;
 %%
-/* The input.  */
-static FILE *input;
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
 
 /* A C++ error reporting function.  */
 void
-calc::parser::error (const location& l, const std::string& m)
+calc::parser::error (const location_type& l, const std::string& m)
 {
   (void) l;
   std::cerr << l << ": " << m << std::endl;
 }
-
-int
-yyparse (semantic_value *result, int *count)
-{
-  calc::parser parser (result, count);
-  parser.set_debug_level (!!YYDEBUG);
-  return parser.parse ();
-}
+_ATEOF
 
 
 
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
 
-static YYLTYPE last_yylloc;
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
 
 static int
-get_char (YYSTYPE *lvalp, YYLTYPE *llocp)
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
 {
   int res = getc (input);
   (void) lvalp;(void) llocp;
@@ -52714,18 +114555,17 @@
   last_yylloc = (*llocp);
   if (res == '\n')
     {
-      (*llocp).last_line++;
-      (*llocp).last_column = 0;
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
     }
   else
-    (*llocp).last_column++;
+    (*llocp).end.column++;
 
   return res;
 }
 
-
 static void
-unget_char (YYSTYPE *lvalp, YYLTYPE *llocp,  int c)
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
 {
   (void) lvalp;(void) llocp;
 
@@ -52736,7 +114576,7 @@
 }
 
 static int
-read_signed_integer (YYSTYPE *lvalp, YYLTYPE *llocp)
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
 {
   int c = get_char (lvalp, llocp);
   int sign = 1;
@@ -52761,40 +114601,23 @@
 }
 
 
-
 /*---------------------------------------------------------------.
 | Lexical analyzer returns an integer on the stack and the token |
 | NUM, or the ASCII character read if not a number.  Skips all   |
 | blanks and tabs, returns 0 for EOF.                            |
 `---------------------------------------------------------------*/
 
-static int
-yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
 {
-  static int init = 1;
   int c;
-
-  if (init)
+  /* Skip current token, then white spaces.  */
+  do
     {
-      init = 0;
-
-      (*llocp).last_column = 0;
-      (*llocp).last_line = 1;
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
 
     }
-
-
- (*llocp).first_column = (*llocp).last_column;
-  (*llocp).first_line   = (*llocp).last_line;
-
-
-  /* Skip white space.  */
-  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t')
-    {
-     (*llocp).first_column = (*llocp).last_column;
-      (*llocp).first_line   = (*llocp).last_line;
-
-    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
 
   /* process numbers   */
   if (c == '.' || isdigit (c))
@@ -52811,19 +114634,43 @@
   /* Return single chars. */
   return c;
 }
+_ATEOF
 
-static int
-power (int base, int exponent)
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse (semantic_value *result, int *count)
 {
-  int res = 1;
-  if (exponent < 0)
-    exit (3);
-  for (/* Niente */; exponent; --exponent)
-    res *= base;
-  return res;
+  calc::parser parser (result, count);
+#if CALCDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
 }
 
 
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
 int
 main (int argc, const char **argv)
 {
@@ -52848,11 +114695,11 @@
     }
 
 
-  status = yyparse (&result, &count);
-  if (global_result != result)
-    abort ();
-  if (global_count != count)
-    abort ();
+  status = calcparse (&result, &count);
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
   return status;
 }
 _ATEOF
@@ -52861,81 +114708,179 @@
 
 
 
-$at_traceoff
-echo "calc.at:653: bison -o calc.cc calc.y"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; bison -o calc.cc calc.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "calc.at:653: \$BISON_CXX_WORKS"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:688"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:688"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "calc.at:653: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc \$LIBS"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:688"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
 
-$at_traceon
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:688"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Test the priorities.
@@ -52955,62 +114900,66 @@
 (2^2)^3 = 64
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 
 # Some syntax errors.
 cat >input <<'_ATEOF'
-0 0
+1 2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53021,18 +114970,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected number
+1.3: syntax error, unexpected number
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -53040,60 +114991,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1//2
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53104,18 +115045,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.2: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -53123,60 +115066,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 error
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53187,18 +115120,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected $undefined
+1.1: syntax error, unexpected $undefined
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -53206,60 +115141,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
 1 = 2 = 3
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53270,18 +115195,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.6: syntax error, unexpected '='
+1.7: syntax error, unexpected '='
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -53289,30 +115216,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
@@ -53320,30 +115235,32 @@
 +1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53354,18 +115271,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-2.0: syntax error, unexpected '+'
+2.1: syntax error, unexpected '+'
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -53373,57 +115292,47 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 # Exercise error messages with EOF: work on an empty file.
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc /dev/null"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc /dev/null ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53434,18 +115343,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.0: syntax error, unexpected end of input
+1.1: syntax error, unexpected end of input
 _ATEOF
 
 # 3. If locations are not used, remove them.
@@ -53453,30 +115364,18 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
@@ -53491,8 +115390,8 @@
 #
 # - test the action associated to `error'
 #
-# - check the look-ahead that triggers an error is not discarded
-#   when we enter error recovery.  Below, the look-ahead causing the
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
 #   first error is ")", which is needed to recover from the error and
 #   produce the "0" that triggers the "0 != 1" error.
 #
@@ -53500,30 +115399,32 @@
 () + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53534,21 +115435,23 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.1: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.17: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
-1.22: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.40: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
 calc: error: 4444 != 1
 _ATEOF
 
@@ -53557,63 +115460,53 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # The same, but this time exercising explicitly triggered syntax errors.
-# POSIX says the look-ahead causing the error should not be discarded.
+# POSIX says the lookahead causing the error should not be discarded.
 cat >input <<'_ATEOF'
-(!) + (0 0) = 1
+(!) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53624,18 +115517,20 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.9: syntax error, unexpected number
+1.10: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -53644,60 +115539,50 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 cat >input <<'_ATEOF'
-(- *) + (0 0) = 1
+(- *) + (1 2) = 1
 _ATEOF
 
-$at_traceoff
-echo "calc.at:653: \$PREPARSER ./calc input"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; $PREPARSER ./calc input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; tee stderr <$at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Normalize the observed and expected error messages, depending upon the
@@ -53708,19 +115593,21 @@
 /^Stack/d
 /^Reading/d
 /^Reducing/d
+/^Return/d
 /^Shifting/d
 /^state/d
 /^Cleanup:/d
 /^Error:/d
 /^Next/d
+/^Now/d
 /^Discarding/d
 / \$[0-9$]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.
 cat >expout <<'_ATEOF'
-1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
-1.11: syntax error, unexpected number
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
 calc: error: 2222 != 1
 _ATEOF
 
@@ -53729,83 +115616,13435 @@
 # 4. If error-verbose is not used, strip the`, unexpected....' part.
 
 # 5. Check
-$at_traceoff
-echo "calc.at:653: cat stderr"
-echo calc.at:653 >$at_check_line_file
-( $at_traceon; cat stderr ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff expout $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "calc.at:653: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-
-  banner-13 ) # Banner 13. torture.at:19
-    cat <<\_ATEOF
-
-Torture Tests.
-
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
 _ATEOF
-    ;;
 
-  105 ) # 105. torture.at:140: Big triangle
-    at_setup_line='torture.at:140'
-    at_desc='Big triangle'
-    $at_quiet $ECHO_N "105: Big triangle                                 $ECHO_C"
-    at_xfail=no
-    (
-      echo "105. torture.at:140: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/calc.at:688:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:688"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:688: cat stderr"
+at_fn_check_prepare_trace "calc.at:688"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_243
+#AT_START_244
+at_fn_group_banner 244 'calc.at:699' \
+  "Calculator %skeleton \"glr.cc\" %defines %locations" "" 14
+at_xfail=no
+(
+  $as_echo "244. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%skeleton "glr.cc" %defines %locations
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static int get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static void unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c);
+
+
+static yy::parser::location_type last_yylloc;
+
+static int
+get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ yyparse that simulates the C signature.  */
+int
+yyparse ()
+{
+  yy::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = yyparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:699: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:699"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:699: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:699"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:699: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:699"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:699: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:699"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:699"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:699"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:699"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:699"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:699"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:699: cat stderr"
+at_fn_check_prepare_trace "calc.at:699"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_244
+#AT_START_245
+at_fn_group_banner 245 'calc.at:708' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations " "" 14
+at_xfail=no
+(
+  $as_echo "245. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static int get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static void unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c);
+
+
+static yy::parser::location_type last_yylloc;
+
+static int
+get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ yyparse that simulates the C signature.  */
+int
+yyparse ()
+{
+  yy::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = yyparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:708: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:708"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:708: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:708"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:708: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:708"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:708: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:708"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:708"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:708"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:708"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:708"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:708"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:708: cat stderr"
+at_fn_check_prepare_trace "calc.at:708"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:708"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_245
+#AT_START_246
+at_fn_group_banner 246 'calc.at:709' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations %define api.location.type Span" "" 14
+at_xfail=no
+(
+  $as_echo "246. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations %define api.location.type Span
+%define global_tokens_and_yystype
+%code requires
+{
+
+# include <iostream>
+  struct Point
+  {
+    int l;
+    int c;
+  };
+
+  struct Span
+  {
+    Point first;
+    Point last;
+  };
+
+# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
+  do                                                                    \
+    if (N)                                                              \
+      {                                                                 \
+        (Current).first = YYRHSLOC (Rhs, 1).first;                      \
+        (Current).last  = YYRHSLOC (Rhs, N).last;                       \
+      }                                                                 \
+    else                                                                \
+      {                                                                 \
+        (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last;      \
+      }                                                                 \
+  while (false)
+
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+
+%initial-action
+{
+  @$.first.l = @$.first.c = 1;
+  @$.last = @$.first;
+}
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+  std::ostream&
+  operator<< (std::ostream& o, const Span& s)
+  {
+    o << s.first.l << '.' << s.first.c;
+    if (s.first.l != s.last.l)
+      o << '-' << s.last.l << '.' << s.last.c - 1;
+    else if (s.first.c != s.last.c - 1)
+      o << '-' << s.last.c - 1;
+    return o;
+  }
+
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static int get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static void unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c);
+
+
+static yy::parser::location_type last_yylloc;
+
+static int
+get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).last.l++;
+      (*llocp).last.c = 1;
+    }
+  else
+    (*llocp).last.c++;
+
+  return res;
+}
+
+static void
+unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).first.c = (*llocp).last.c;
+      (*llocp).first.l   = (*llocp).last.l;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ yyparse that simulates the C signature.  */
+int
+yyparse ()
+{
+  yy::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = yyparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:709: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:709"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:709: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:709"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:709: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:709"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:709: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:709"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:709"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:709"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:709"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:709"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:709"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:709: cat stderr"
+at_fn_check_prepare_trace "calc.at:709"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:709"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_246
+#AT_START_247
+at_fn_group_banner 247 'calc.at:710' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations %error-verbose %name-prefix \"calc\" %verbose %yacc" "" 14
+at_xfail=no
+(
+  $as_echo "247. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations %error-verbose %name-prefix "calc" %verbose %yacc
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse ()
+{
+  calc::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:710: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:710"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:710: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:710"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:710: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:710"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:710: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:710"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:710"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:710"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:710"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:710"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:710"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:710: cat stderr"
+at_fn_check_prepare_trace "calc.at:710"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:710"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_247
+#AT_START_248
+at_fn_group_banner 248 'calc.at:711' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations %error-verbose %define api.prefix \"calc\" %verbose %yacc" "" 14
+at_xfail=no
+(
+  $as_echo "248. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations %error-verbose %define api.prefix "calc" %verbose %yacc
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse ()
+{
+  calc::parser parser;
+#if CALCDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:711: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:711"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:711: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:711"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:711: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:711"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:711: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:711"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:711"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:711"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:711"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:711"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:711"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:711: cat stderr"
+at_fn_check_prepare_trace "calc.at:711"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:711"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_248
+#AT_START_249
+at_fn_group_banner 249 'calc.at:713' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations %debug" "" 14
+at_xfail=no
+(
+  $as_echo "249. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations %debug
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static int get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+static void unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c);
+
+
+static yy::parser::location_type last_yylloc;
+
+static int
+get_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ yyparse that simulates the C signature.  */
+int
+yyparse ()
+{
+  yy::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = yyparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:713: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:713"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:713: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:713"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:713: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:713"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:713: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:713"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:713"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:713"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:713"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:713"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:713"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:713: cat stderr"
+at_fn_check_prepare_trace "calc.at:713"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:713"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_249
+#AT_START_250
+at_fn_group_banner 250 'calc.at:714' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations %error-verbose %debug %name-prefix \"calc\" %verbose %yacc" "" 14
+at_xfail=no
+(
+  $as_echo "250. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations %error-verbose %debug %name-prefix "calc" %verbose %yacc
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse ()
+{
+  calc::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:714: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:714"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:714: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:714"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:714: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:714"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:714: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:714"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:714"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:714"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:714"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:714"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:714"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:714: cat stderr"
+at_fn_check_prepare_trace "calc.at:714"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:714"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_250
+#AT_START_251
+at_fn_group_banner 251 'calc.at:716' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations %pure-parser %error-verbose %debug %name-prefix \"calc\" %verbose %yacc" "" 14
+at_xfail=no
+(
+  $as_echo "251. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations %pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         {  }
+;
+
+line:
+  '\n'
+| exp '\n'           { USE ($1); }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse ()
+{
+  calc::parser parser;
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse ();
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:716: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:716"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:716: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:716"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:716: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:716"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:716: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:716"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:716"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:716"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:716"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:716"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:716"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:716: cat stderr"
+at_fn_check_prepare_trace "calc.at:716"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:716"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_251
+#AT_START_252
+at_fn_group_banner 252 'calc.at:718' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations %pure-parser %error-verbose %debug %name-prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}" "" 14
+at_xfail=no
+(
+  $as_echo "252. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations %pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         { ++*count; ++global_count; }
+;
+
+line:
+  '\n'
+| exp '\n'           { *result = global_result = $1; }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse (semantic_value *result, int *count)
+{
+  calc::parser parser (result, count);
+#if YYDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse (&result, &count);
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:718: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:718"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:718: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:718"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:718: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:718"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:718: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:718"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:718"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:718"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:718"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:718"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:718"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:718: cat stderr"
+at_fn_check_prepare_trace "calc.at:718"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:718"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_252
+#AT_START_253
+at_fn_group_banner 253 'calc.at:719' \
+  "Calculator %language \"C++\" %glr-parser %defines %locations %pure-parser %error-verbose %debug %define api.prefix \"calc\" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}" "" 14
+at_xfail=no
+(
+  $as_echo "253. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+
+
+cat >calc.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+/* Infix notation calculator--calc */
+%language "C++" %glr-parser %defines %locations %pure-parser %error-verbose %debug %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}
+%define global_tokens_and_yystype
+%code requires
+{
+
+  /* Exercise pre-prologue dependency to %union.  */
+  typedef int semantic_value;
+}
+
+/* Exercise %union. */
+%union
+{
+  semantic_value ival;
+};
+%printer { yyoutput << $$; } <ival>;
+
+%code provides
+{
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
+}
+
+%code
+{
+#include <assert.h>
+#include <string.h>
+#define USE(Var)
+
+FILE *input;
+static int power (int base, int exponent);
+
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+}
+
+
+
+/* Bison Declarations */
+%token CALC_EOF 0 "end of input"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line         { ++*count; ++global_count; }
+;
+
+line:
+  '\n'
+| exp '\n'           { *result = global_result = $1; }
+;
+
+exp:
+  NUM                { $$ = $1;             }
+| exp '=' exp
+  {
+    if ($1 != $3)
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    $$ = $1;
+  }
+| exp '+' exp        { $$ = $1 + $3;        }
+| exp '-' exp        { $$ = $1 - $3;        }
+| exp '*' exp        { $$ = $1 * $3;        }
+| exp '/' exp        { $$ = $1 / $3;        }
+| '-' exp  %prec NEG { $$ = -$2;            }
+| exp '^' exp        { $$ = power ($1, $3); }
+| '(' exp ')'        { $$ = $2;             }
+| '(' error ')'      { $$ = 1111; yyerrok;  }
+| '!'                { $$ = 0; YYERROR;     }
+| '-' error          { $$ = 0; YYERROR;     }
+;
+%%
+
+static int
+power (int base, int exponent)
+{
+  int res = 1;
+  assert (0 <= exponent);
+  for (/* Niente */; exponent; --exponent)
+    res *= base;
+  return res;
+}
+
+
+/* A C++ error reporting function.  */
+void
+calc::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+_ATEOF
+
+
+
+cat >calc-lex.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <ctype.h>
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static int get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp);
+static void unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c);
+
+
+static calc::parser::location_type last_yylloc;
+
+static int
+get_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int res = getc (input);
+  (void) lvalp;(void) llocp;
+
+  last_yylloc = (*llocp);
+  if (res == '\n')
+    {
+      (*llocp).end.line++;
+      (*llocp).end.column = 1;
+    }
+  else
+    (*llocp).end.column++;
+
+  return res;
+}
+
+static void
+unget_char (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp,  int c)
+{
+  (void) lvalp;(void) llocp;
+
+  /* Wrong when C == `\n'. */
+  (*llocp) = last_yylloc;
+
+  ungetc (c, input);
+}
+
+static int
+read_signed_integer (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c = get_char (lvalp, llocp);
+  int sign = 1;
+  int n = 0;
+
+  (void) lvalp;(void) llocp;
+  if (c == '-')
+    {
+      c = get_char (lvalp, llocp);
+      sign = -1;
+    }
+
+  while (isdigit (c))
+    {
+      n = 10 * n + (c - '0');
+      c = get_char (lvalp, llocp);
+    }
+
+  unget_char (lvalp, llocp,  c);
+
+  return sign * n;
+}
+
+
+/*---------------------------------------------------------------.
+| Lexical analyzer returns an integer on the stack and the token |
+| NUM, or the ASCII character read if not a number.  Skips all   |
+| blanks and tabs, returns 0 for EOF.                            |
+`---------------------------------------------------------------*/
+
+int calclex (calc::parser::semantic_type *lvalp, calc::parser::location_type *llocp)
+{
+  int c;
+  /* Skip current token, then white spaces.  */
+  do
+    {
+     (*llocp).begin.column = (*llocp).end.column;
+      (*llocp).begin.line   = (*llocp).end.line;
+
+    }
+  while ((c = get_char (lvalp, llocp)) == ' ' || c == '\t');
+
+  /* process numbers   */
+  if (c == '.' || isdigit (c))
+    {
+      unget_char (lvalp, llocp,  c);
+      (*lvalp).ival = read_signed_integer (lvalp, llocp);
+      return NUM;
+    }
+
+  /* Return end-of-file.  */
+  if (c == EOF)
+    return CALC_EOF;
+
+  /* Return single chars. */
+  return c;
+}
+_ATEOF
+
+
+cat >calc-main.cc <<'_ATEOF'
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
+#include "calc.hh"
+
+#include <assert.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else
+# undef alarm
+# define alarm(seconds) /* empty */
+#endif
+
+
+/* A C++ calcparse that simulates the C signature.  */
+int
+calcparse (semantic_value *result, int *count)
+{
+  calc::parser parser (result, count);
+#if CALCDEBUG
+  parser.set_debug_level (1);
+#endif
+  return parser.parse ();
+}
+
+
+semantic_value global_result = 0;
+int global_count = 0;
+
+/* A C main function.  */
+int
+main (int argc, const char **argv)
+{
+  semantic_value result = 0;
+  int count = 0;
+  int status;
+
+  /* This used to be alarm (10), but that isn't enough time for
+     a July 1995 vintage DEC Alphastation 200 4/100 system,
+     according to Nelson H. F. Beebe.  100 seconds is enough.  */
+  alarm (100);
+
+  if (argc == 2)
+    input = fopen (argv[1], "r");
+  else
+    input = stdin;
+
+  if (!input)
+    {
+      perror (argv[1]);
+      return 3;
+    }
+
+
+  status = calcparse (&result, &count);
+  if (fclose (input))
+    perror ("fclose");
+  assert (global_result == result);
+  assert (global_count == count);
+  return status;
+}
+_ATEOF
+
+
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/calc.at:719: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o calc.cc calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:719"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/calc.at:719: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y" "calc.at:719"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:719: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:719"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/calc.at:719: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "calc.at:719"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: bison -o calc.cc calc.y"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; bison -o calc.cc calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "calc.at:719"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS" "calc.at:719"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o calc calc.cc calc-lex.cc calc-main.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.cc
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:719"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.cc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: \$PERL -ne '
+  chomp;
+  print \"\$.: {\$_}\\n\"
+    if (# No starting/ending empty lines.
+        (eof || \$. == 1) && /^\\s*\$/
+        # No trailing space.  FIXME: not ready for \"maint\".
+        # || /\\s\$/
+        )' calc.hh
+"
+at_fn_check_prepare_notrace 'an embedded newline' "calc.at:719"
+( $at_check_trace; $PERL -ne '
+  chomp;
+  print "$.: {$_}\n"
+    if (# No starting/ending empty lines.
+        (eof || $. == 1) && /^\s*$/
+        # No trailing space.  FIXME: not ready for "maint".
+        # || /\s$/
+        )' calc.hh
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+1 2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected number
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected '='
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc /dev/null"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc /dev/null" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.18: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.23: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.41: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+calc: error: 4444 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.10: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (1 2) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.12: syntax error, unexpected number
+calc: error: 2222 != 1
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Check that yyerrok works properly: second error is not reported,
+# third and fourth are.  Parse status is succesfull.
+cat >input <<'_ATEOF'
+(* *) + (*) + (*)
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719:  \$PREPARSER ./calc input"
+at_fn_check_prepare_dynamic " $PREPARSER ./calc input" "calc.at:719"
+( $at_check_trace;  $PREPARSER ./calc input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Remove the traces from observed.
+sed '/^Starting/d
+/^Entering/d
+/^Stack/d
+/^Reading/d
+/^Reducing/d
+/^Return/d
+/^Shifting/d
+/^state/d
+/^Cleanup:/d
+/^Error:/d
+/^Next/d
+/^Now/d
+/^Discarding/d
+/ \$[0-9$]* = /d
+/^yydestructor:/d' stderr >at-stderr
+mv at-stderr stderr
+# 2. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.10: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.16: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 3. If locations are not used, remove them.
+
+# 4. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 5. Check
+{ set +x
+$as_echo "$at_srcdir/calc.at:719: cat stderr"
+at_fn_check_prepare_trace "calc.at:719"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/calc.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_253
+#AT_START_254
+at_fn_group_banner 254 'torture.at:137' \
+  "Big triangle" "                                   " 15
+at_xfail=no
+(
+  $as_echo "254. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # I have been able to go up to 2000 on my machine.
 # I tried 3000, a 29Mb grammar file, but then my system killed bison.
 # With 500 and the new parser, which consume far too much memory,
 # it gets killed too.  Of course the parser is to be cleaned.
+
 cat >gengram.pl <<'_ATEOF'
 #! /usr/bin/perl -w
 
@@ -53813,24 +129052,23 @@
 my $max = $ARGV[0] || 10;
 
 print <<EOF;
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %error-verbose
 %debug
 %{
 #include <stdio.h>
 #include <stdlib.h>
-
+#include <assert.h>
+#define MAX $max
 static int yylex (void);
-static void yyerror (const char *msg);
+static void yyerror ( const char *msg);
 %}
 %union
 {
@@ -53849,8 +129087,8 @@
 print <<EOF;
 %%
 input:
-  exp        { if (\$1 != 0) abort (); \$\$ = \$1; }
-| input exp  { if (\$2 != \$1 + 1) abort (); \$\$ = \$2; }
+  exp        { assert (\$1 == 0); \$\$ = \$1; }
+| input exp  { assert (\$2 == \$1 + 1); \$\$ = \$2; }
 ;
 
 exp:
@@ -53868,14 +129106,21 @@
   };
 print ";\n";
 
-print <<EOF;
+print <<\EOF;
 %%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
 static int
 yylex (void)
 {
   static int inner = 1;
   static int outer = 0;
-  if (outer > $max)
+  if (outer > MAX)
     return 0;
   else if (inner > outer)
     {
@@ -53885,13 +129130,6 @@
     }
   return inner++;
 }
-
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\\n", msg);
-}
-
 int
 main (void)
 {
@@ -53902,123 +129140,102 @@
 _ATEOF
 
 
-$at_traceoff
-echo "torture.at:146: perl -w ./gengram.pl 200 || exit 77"
-echo torture.at:146 >$at_check_line_file
-( $at_traceon; perl -w ./gengram.pl 200 || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:146: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:143: \$PERL -w ./gengram.pl 200 || exit 77"
+at_fn_check_prepare_dynamic "$PERL -w ./gengram.pl 200 || exit 77" "torture.at:143"
+( $at_check_trace; $PERL -w ./gengram.pl 200 || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:143"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 mv stdout input.y
 
-$at_traceoff
-echo "torture.at:147: bison -v -o input.c input.y"
-echo torture.at:147 >$at_check_line_file
-( $at_traceon; bison -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:147: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "torture.at:148: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo torture.at:148 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:148: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "torture.at:149: \$PREPARSER ./input"
-echo torture.at:149 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:149: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:144: bison -v -o input.c input.y"
+at_fn_check_prepare_trace "torture.at:144"
+( $at_check_trace; bison -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:144"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/torture.at:145: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "torture.at:145"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  106 ) # 106. torture.at:232: Big horizontal
-    at_setup_line='torture.at:232'
-    at_desc='Big horizontal'
-    $at_quiet $ECHO_N "106: Big horizontal                               $ECHO_C"
-    at_xfail=no
-    (
-      echo "106. torture.at:232: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:145: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "torture.at:145"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:145"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:146:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "torture.at:146"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:146"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:146: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:146"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:146"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_254
+#AT_START_255
+at_fn_group_banner 255 'torture.at:227' \
+  "Big horizontal" "                                 " 15
+at_xfail=no
+(
+  $as_echo "255. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # I have been able to go up to 10000 on my machine, but I had to
@@ -54033,6 +129250,7 @@
 # gcc -Wall input.tab.c -o input   5.81s user 0.20s sys 100% cpu     6.01 total
 # ./input                          0.00s user 0.01s sys 108% cpu     0.01 total
 #
+
 cat >gengram.pl <<'_ATEOF'
 #! /usr/bin/perl -w
 
@@ -54040,24 +129258,22 @@
 my $max = $ARGV[0] || 10;
 
 print <<EOF;
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %error-verbose
 %debug
 %{
 #include <stdio.h>
 #include <stdlib.h>
-
+#define MAX $max
 static int yylex (void);
-static void yyerror (const char *msg);
+static void yyerror ( const char *msg);
 %}
 
 %token
@@ -54078,22 +129294,24 @@
 	(map { "\"$_\"" } (1 .. $max)), ";"),
   "\n";
 
-print <<EOF;
+print <<\EOF;
 %%
+#include <assert.h>
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
 static int
 yylex (void)
 {
   static int counter = 1;
-  if (counter > $max)
-    return 0;
-  else
-  return counter++;
-}
-
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\\n", msg);
+  if (counter <= MAX)
+    return counter++;
+  assert (counter++ == MAX + 1);
+  return 0;
 }
 
 int
@@ -54106,159 +129324,127 @@
 _ATEOF
 
 
-$at_traceoff
-echo "torture.at:246: perl -w ./gengram.pl 1000 || exit 77"
-echo torture.at:246 >$at_check_line_file
-( $at_traceon; perl -w ./gengram.pl 1000 || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:246: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:241: \$PERL -w ./gengram.pl 1000 || exit 77"
+at_fn_check_prepare_dynamic "$PERL -w ./gengram.pl 1000 || exit 77" "torture.at:241"
+( $at_check_trace; $PERL -w ./gengram.pl 1000 || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:241"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 mv stdout input.y
 
 
+
 # GNU m4 requires about 70 MiB for this test on a 32-bit host.
 # Ask for 200 MiB, which should be plenty even on a 64-bit host.
 data_limit=`(ulimit -S -d) 2>/dev/null`
 case $data_limit in
 [0-9]*)
   if test "$data_limit" -lt 204000; then
-    $at_traceoff
-echo "torture.at:250: ulimit -S -d 204000 || exit 77"
-echo torture.at:250 >$at_check_line_file
-( $at_traceon; ulimit -S -d 204000 || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:250: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+    { set +x
+$as_echo "$at_srcdir/torture.at:245: ulimit -S -d 204000 || exit 77"
+at_fn_check_prepare_trace "torture.at:245"
+( $at_check_trace; ulimit -S -d 204000 || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
     ulimit -S -d 204000
   fi
 esac
 
-$at_traceoff
-echo "torture.at:252: bison -v -o input.c input.y"
-echo torture.at:252 >$at_check_line_file
-( $at_traceon; bison -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:252: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "torture.at:253: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo torture.at:253 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:253: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "torture.at:254: \$PREPARSER ./input"
-echo torture.at:254 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:254: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:247: bison -v -o input.c input.y"
+at_fn_check_prepare_trace "torture.at:247"
+( $at_check_trace; bison -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:247"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/torture.at:248: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "torture.at:248"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:248"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  107 ) # 107. torture.at:368: Many look-ahead tokens
-    at_setup_line='torture.at:368'
-    at_desc='Many look-ahead tokens'
-    $at_quiet $ECHO_N "107: Many look-ahead tokens                       $ECHO_C"
-    at_xfail=no
-    (
-      echo "107. torture.at:368: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:248: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "torture.at:248"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:248"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:249:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "torture.at:249"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:249: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:249"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_255
+#AT_START_256
+at_fn_group_banner 256 'torture.at:364' \
+  "Many lookahead tokens" "                          " 15
+at_xfail=no
+(
+  $as_echo "256. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >gengram.pl <<'_ATEOF'
@@ -54272,12 +129458,18 @@
 %error-verbose
 %debug
 %{
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+
 # include <stdio.h>
 # include <stdlib.h>
 # include <assert.h>
-
+# define MAX $max
 static int yylex (void);
-static void yyerror (const char *msg);
+static void yyerror ( const char *msg);
 %}
 %union
 {
@@ -54322,15 +129514,25 @@
     print "n$count: token { \$\$ = $count; };\n";
   };
 
-print <<EOF;
+print <<\EOF;
 %%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
 static int
 yylex (void)
 {
   static int return_token = 1;
   static int counter = 1;
-  if (counter > $max)
-    return 0;
+  if (counter > MAX)
+    {
+      assert (counter++ == MAX + 1);
+      return 0;
+    }
   if (return_token)
     {
       return_token = 0;
@@ -54340,12 +129542,6 @@
   return counter++;
 }
 
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\\n", msg);
-}
-
 int
 main (void)
 {
@@ -54356,164 +129552,214 @@
 _ATEOF
 
 
-$at_traceoff
-echo "torture.at:370: perl -w ./gengram.pl 1000 || exit 77"
-echo torture.at:370 >$at_check_line_file
-( $at_traceon; perl -w ./gengram.pl 1000 || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; tee stdout <$at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:370: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:366: \$PERL -w ./gengram.pl 1000 || exit 77"
+at_fn_check_prepare_dynamic "$PERL -w ./gengram.pl 1000 || exit 77" "torture.at:366"
+( $at_check_trace; $PERL -w ./gengram.pl 1000 || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:366"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 mv stdout input.y
 
 
+
 # GNU m4 requires about 70 MiB for this test on a 32-bit host.
 # Ask for 200 MiB, which should be plenty even on a 64-bit host.
 data_limit=`(ulimit -S -d) 2>/dev/null`
 case $data_limit in
 [0-9]*)
   if test "$data_limit" -lt 204000; then
-    $at_traceoff
-echo "torture.at:374: ulimit -S -d 204000 || exit 77"
-echo torture.at:374 >$at_check_line_file
-( $at_traceon; ulimit -S -d 204000 || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:374: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+    { set +x
+$as_echo "$at_srcdir/torture.at:370: ulimit -S -d 204000 || exit 77"
+at_fn_check_prepare_trace "torture.at:370"
+( $at_check_trace; ulimit -S -d 204000 || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:370"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
     ulimit -S -d 204000
   fi
 esac
 
-$at_traceoff
-echo "torture.at:376: bison -v -o input.c input.y"
-echo torture.at:376 >$at_check_line_file
-( $at_traceon; bison -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:376: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/torture.at:372: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "torture.at:372"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:372"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/torture.at:372: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y" "torture.at:372"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:372"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:372: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:372"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:372"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:372: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:372"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:372"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "torture.at:377: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo torture.at:377 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:377: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "torture.at:378: \$PREPARSER ./input"
-echo torture.at:378 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:378: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:372: bison -v -o input.c input.y"
+at_fn_check_prepare_trace "torture.at:372"
+( $at_check_trace; bison -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:372"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/torture.at:373: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "torture.at:373"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:373"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  108 ) # 108. torture.at:445: Exploding the Stack Size with Alloca
-    at_setup_line='torture.at:445'
-    at_desc='Exploding the Stack Size with Alloca'
-    $at_quiet $ECHO_N "108: Exploding the Stack Size with Alloca         $ECHO_C"
-    at_xfail=no
-    (
-      echo "108. torture.at:445: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:373: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "torture.at:373"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:373"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:374:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "torture.at:374"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:374"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:374: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:374"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:374"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_256
+#AT_START_257
+at_fn_group_banner 257 'torture.at:466' \
+  "Exploding the Stack Size with Alloca" "           " 15
+at_xfail=no
+(
+  $as_echo "257. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
 
 
 # A grammar of parens growing the stack thanks to right recursion.
 # exp:
 cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
 %{
 #include <errno.h>
 #include <limits.h>
@@ -54526,196 +129772,591 @@
 #endif
 
   static int yylex (void);
-  static void yyerror (const char *msg);
+  static void yyerror ( const char *msg);
 %}
+
 %error-verbose
 %debug
 %token WAIT_FOR_EOF
 %%
 exp: WAIT_FOR_EOF exp | ;
 %%
-static void
-yyerror (const char *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
+#include <assert.h>
 static int
 yylex (void)
 {
+  assert (0 <= yylval);
   if (yylval--)
     return WAIT_FOR_EOF;
   else
     return EOF;
 }
 
+/* Return argv[1] as an int. */
+static int
+get_args (int argc, const char **argv)
+{
+  int res;
+  char *endp;
+  assert (argc == 2);
+  res = strtol (argv[1], &endp, 10);
+  assert (argv[1] != endp);
+  assert (0 <= res);
+  assert (res <= INT_MAX);
+  assert (errno != ERANGE);
+  return res;
+}
+
 int
 main (int argc, const char **argv)
 {
-  char *endp;
-  if (argc != 2)
-    abort ();
-  yylval = strtol (argv[1], &endp, 10);
-  if (! (argv[1] != endp
-	 && 0 <= yylval && yylval <= INT_MAX
-	 && errno != ERANGE))
-    abort ();
+  YYSTYPE yylval_init = get_args (argc, argv);
+  int status = 0;
+  int count;
   yydebug = 1;
-  return yyparse ();
+  for (count = 0; count < 2; ++count)
+    {
+      int new_status;
+      yylval = yylval_init;
+      new_status = yyparse ();
+      if (count == 0)
+        status = new_status;
+      else
+        assert (new_status == status);
+    }
+  return status;
 }
 _ATEOF
 
-$at_traceoff
-echo "torture.at:452: bison -o input.c input.y"
-echo torture.at:452 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:452: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/torture.at:475: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "torture.at:475"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:475"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/torture.at:475: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "torture.at:475"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:475"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:475: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:475"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:475"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:475: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:475"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:475"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/torture.at:475: bison -o input.c input.y"
+at_fn_check_prepare_trace "torture.at:475"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:475"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "torture.at:452: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo torture.at:452 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:452: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/torture.at:475: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "torture.at:475"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:475"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:475: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "torture.at:475"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:475"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # Below the limit of 200.
-$at_traceoff
-echo "torture.at:455: \$PREPARSER ./input 20"
-echo torture.at:455 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input 20 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:455: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/torture.at:478: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 20"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 20" "torture.at:478"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 20
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/torture.at:478: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:478"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 # Two enlargements: 2 * 2 * 200.
-$at_traceoff
-echo "torture.at:457: \$PREPARSER ./input 900"
-echo torture.at:457 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input 900 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:457: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/torture.at:481: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 900"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 900" "torture.at:481"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 900
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/torture.at:481: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:481"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 # Fails: beyond the limit of 10,000 (which we don't reach anyway since we
 # multiply by two starting at 200 => 5120 is the last possible).
-$at_traceoff
-echo "torture.at:460: \$PREPARSER ./input 10000"
-echo torture.at:460 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input 10000 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   2) ;;
-   *) echo "torture.at:460: exit code was $at_status, expected 2"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/torture.at:485: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 10000"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 10000" "torture.at:485"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 10000
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/torture.at:485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/torture.at:485: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:485"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The push parser can't use alloca since the stacks can't be locals.  This test
+# just helps guarantee we don't let the YYSTACK_USE_ALLOCA feature affect
+# push parsers.
+
+# A grammar of parens growing the stack thanks to right recursion.
+# exp:
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%{
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if (defined __GNUC__ || defined __BUILTIN_VA_ARG_INCR \
+     || defined _AIX || defined _MSC_VER || defined _ALLOCA_H)
+# define YYSTACK_USE_ALLOCA 1
+#endif
+
+  static int yylex (void);
+  static void yyerror ( const char *msg);
+%}
+%define api.push-pull both
+
+%error-verbose
+%debug
+%token WAIT_FOR_EOF
+%%
+exp: WAIT_FOR_EOF exp | ;
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static int
+yylex (void)
+{
+  assert (0 <= yylval);
+  if (yylval--)
+    return WAIT_FOR_EOF;
+  else
+    return EOF;
+}
+
+/* Return argv[1] as an int. */
+static int
+get_args (int argc, const char **argv)
+{
+  int res;
+  char *endp;
+  assert (argc == 2);
+  res = strtol (argv[1], &endp, 10);
+  assert (argv[1] != endp);
+  assert (0 <= res);
+  assert (res <= INT_MAX);
+  assert (errno != ERANGE);
+  return res;
+}
+
+int
+main (int argc, const char **argv)
+{
+  YYSTYPE yylval_init = get_args (argc, argv);
+  int status = 0;
+  int count;
+  yypstate *ps = yypstate_new ();
+  yydebug = 1;
+  for (count = 0; count < 2; ++count)
+    {
+      int new_status;
+      yylval = yylval_init;
+      new_status = yypull_parse (ps);
+      if (count == 0)
+        status = new_status;
+      else
+        assert (new_status == status);
+    }
+  yypstate_delete (ps);
+  return status;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/torture.at:491: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "torture.at:491"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/torture.at:491: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "torture.at:491"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:491: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:491"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:491: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:491"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:491: bison -o input.c input.y"
+at_fn_check_prepare_trace "torture.at:491"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/torture.at:491: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "torture.at:491"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  109 ) # 109. torture.at:471: Exploding the Stack Size with Malloc
-    at_setup_line='torture.at:471'
-    at_desc='Exploding the Stack Size with Malloc'
-    $at_quiet $ECHO_N "109: Exploding the Stack Size with Malloc         $ECHO_C"
-    at_xfail=no
-    (
-      echo "109. torture.at:471: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:491: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "torture.at:491"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:494: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 20"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 20" "torture.at:494"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 20
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:494"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:494: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:494"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:494"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:496: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 900"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 900" "torture.at:496"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 900
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:496"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:496: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:496"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:496"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:498: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 10000"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 10000" "torture.at:498"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 10000
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/torture.at:498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:498: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:498"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_257
+#AT_START_258
+at_fn_group_banner 258 'torture.at:512' \
+  "Exploding the Stack Size with Malloc" "           " 15
+at_xfail=no
+(
+  $as_echo "258. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
 
 
 # A grammar of parens growing the stack thanks to right recursion.
 # exp:
 cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
 %{
 #include <errno.h>
 #include <limits.h>
@@ -54723,211 +130364,586 @@
 #include <stdlib.h>
 #define YYSTACK_USE_ALLOCA 0
   static int yylex (void);
-  static void yyerror (const char *msg);
+  static void yyerror ( const char *msg);
 %}
+
 %error-verbose
 %debug
 %token WAIT_FOR_EOF
 %%
 exp: WAIT_FOR_EOF exp | ;
 %%
-static void
-yyerror (const char *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
+#include <assert.h>
 static int
 yylex (void)
 {
+  assert (0 <= yylval);
   if (yylval--)
     return WAIT_FOR_EOF;
   else
     return EOF;
 }
 
+/* Return argv[1] as an int. */
+static int
+get_args (int argc, const char **argv)
+{
+  int res;
+  char *endp;
+  assert (argc == 2);
+  res = strtol (argv[1], &endp, 10);
+  assert (argv[1] != endp);
+  assert (0 <= res);
+  assert (res <= INT_MAX);
+  assert (errno != ERANGE);
+  return res;
+}
+
 int
 main (int argc, const char **argv)
 {
-  char *endp;
-  if (argc != 2)
-    abort ();
-  yylval = strtol (argv[1], &endp, 10);
-  if (! (argv[1] != endp
-	 && 0 <= yylval && yylval <= INT_MAX
-	 && errno != ERANGE))
-    abort ();
+  YYSTYPE yylval_init = get_args (argc, argv);
+  int status = 0;
+  int count;
   yydebug = 1;
-  return yyparse ();
+  for (count = 0; count < 2; ++count)
+    {
+      int new_status;
+      yylval = yylval_init;
+      new_status = yyparse ();
+      if (count == 0)
+        status = new_status;
+      else
+        assert (new_status == status);
+    }
+  return status;
 }
 _ATEOF
 
-$at_traceoff
-echo "torture.at:473: bison -o input.c input.y"
-echo torture.at:473 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:473: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/torture.at:516: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "torture.at:516"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/torture.at:516: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "torture.at:516"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:516: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:516"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:516: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:516"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/torture.at:516: bison -o input.c input.y"
+at_fn_check_prepare_trace "torture.at:516"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "torture.at:473: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo torture.at:473 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:473: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/torture.at:516: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "torture.at:516"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:516: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "torture.at:516"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:516"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
 # Below the limit of 200.
-$at_traceoff
-echo "torture.at:476: \$PREPARSER ./input 20"
-echo torture.at:476 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input 20 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:476: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/torture.at:519: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 20"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 20" "torture.at:519"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 20
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:519"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/torture.at:519: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:519"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:519"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 # Two enlargements: 2 * 2 * 200.
-$at_traceoff
-echo "torture.at:478: \$PREPARSER ./input 900"
-echo torture.at:478 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input 900 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "torture.at:478: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/torture.at:522: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 900"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 900" "torture.at:522"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 900
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:522"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/torture.at:522: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:522"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:522"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 # Fails: beyond the limit of 10,000 (which we don't reach anyway since we
 # multiply by two starting at 200 => 5120 is the possible).
-$at_traceoff
-echo "torture.at:481: \$PREPARSER ./input 10000"
-echo torture.at:481 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input 10000 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   2) ;;
-   *) echo "torture.at:481: exit code was $at_status, expected 2"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/torture.at:526: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 10000"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 10000" "torture.at:526"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 10000
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/torture.at:526"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/torture.at:526: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:526"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:526"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
 
-  banner-14 ) # Banner 14. existing.at:21
-    cat <<\_ATEOF
+# A grammar of parens growing the stack thanks to right recursion.
+# exp:
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-Existing Grammars.
+%{
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#define YYSTACK_USE_ALLOCA 0
+  static int yylex (void);
+  static void yyerror ( const char *msg);
+%}
+%define api.push-pull both
 
+%error-verbose
+%debug
+%token WAIT_FOR_EOF
+%%
+exp: WAIT_FOR_EOF exp | ;
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static int
+yylex (void)
+{
+  assert (0 <= yylval);
+  if (yylval--)
+    return WAIT_FOR_EOF;
+  else
+    return EOF;
+}
+
+/* Return argv[1] as an int. */
+static int
+get_args (int argc, const char **argv)
+{
+  int res;
+  char *endp;
+  assert (argc == 2);
+  res = strtol (argv[1], &endp, 10);
+  assert (argv[1] != endp);
+  assert (0 <= res);
+  assert (res <= INT_MAX);
+  assert (errno != ERANGE);
+  return res;
+}
+
+int
+main (int argc, const char **argv)
+{
+  YYSTYPE yylval_init = get_args (argc, argv);
+  int status = 0;
+  int count;
+  yypstate *ps = yypstate_new ();
+  yydebug = 1;
+  for (count = 0; count < 2; ++count)
+    {
+      int new_status;
+      yylval = yylval_init;
+      new_status = yypull_parse (ps);
+      if (count == 0)
+        status = new_status;
+      else
+        assert (new_status == status);
+    }
+  yypstate_delete (ps);
+  return status;
+}
 _ATEOF
-    ;;
-
-  110 ) # 110. existing.at:26: GNU AWK Grammar
-    at_setup_line='existing.at:26'
-    at_desc='GNU AWK Grammar'
-    $at_quiet $ECHO_N "110: GNU AWK Grammar                              $ECHO_C"
-    at_xfail=no
-    (
-      echo "110. existing.at:26: testing ..."
-      $at_traceon
 
 
-# We have been careful to strip all the actions excepts the
-# mid-rule actions.  We rely on %expect to check that there are
-# indeed 65 SR conflicts.
-#
-# Bison was once wrong, due to an incorrect computation of nullable.
-# It reported 485 SR conflicts!
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/torture.at:529: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "torture.at:529"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/torture.at:529: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "torture.at:529"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:529: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:529"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/torture.at:529: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "torture.at:529"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/torture.at:529: bison -o input.c input.y"
+at_fn_check_prepare_trace "torture.at:529"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:529: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "torture.at:529"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:529: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "torture.at:529"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:532: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 20"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 20" "torture.at:532"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 20
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:532: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:532"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:532"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:534: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 900"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 900" "torture.at:534"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 900
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:534"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:534: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:534"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:534"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:536: VALGRIND_OPTS=\"\$VALGRIND_OPTS --log-fd=1\" \$PREPARSER ./input 10000"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --log-fd=1\" $PREPARSER ./input 10000" "torture.at:536"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1" $PREPARSER ./input 10000
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/torture.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/torture.at:536: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "torture.at:536"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/torture.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_258
+#AT_START_259
+at_fn_group_banner 259 'existing.at:79' \
+  "GNU AWK 3.1.0 Grammar: LALR(1)" "                 " 16
+at_xfail=no
+(
+  $as_echo "259. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 cat >input.y <<'_ATEOF'
-%expect 65
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type lalr
+%error-verbose
 
 %token FUNC_CALL NAME REGEXP
 %token ERROR
@@ -54962,8 +130978,11 @@
 %left INCREMENT DECREMENT
 %left '$'
 %left '(' ')'
+
+
 %%
 
+
 start
 	: opt_nls program opt_nls
 	;
@@ -55241,62 +131260,1841 @@
 comma	: ',' opt_nls
 	;
 
+
 %%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
 _ATEOF
 
 
-# Pass plenty of options, to exercise plenty of code, even if we
-# don't actually check the output.  But SEGV is watching us, and
-# so might do dmalloc.
-$at_traceoff
-echo "existing.at:356: bison --verbose --defines input.y"
-echo existing.at:356 >$at_check_line_file
-( $at_traceon; bison --verbose --defines input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "existing.at:356: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:79"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "existing.at:79"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:79"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:79"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 65 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  111 ) # 111. existing.at:364: GNU Cim Grammar
-    at_setup_line='existing.at:364'
-    at_desc='GNU Cim Grammar'
-    $at_quiet $ECHO_N "111: GNU Cim Grammar                              $ECHO_C"
-    at_xfail=no
-    (
-      echo "111. existing.at:364: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:79"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "319
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-# GNU Cim, the GNU Simula 87 Compiler.
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: diff -u /dev/null /dev/null || exit 77"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; diff -u /dev/null /dev/null || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-# Bison was once wrong, due to an incorrect computation of the RR conflicts.
-# It reported 80 SR && 99 RR conflicts instead of 78/10!!!
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: sed 's/^%define lr.type .*\$//' input.y > input-lalr.y"
+at_fn_check_prepare_dynamic "sed 's/^%define lr.type .*$//' input.y > input-lalr.y" "existing.at:79"
+( $at_check_trace; sed 's/^%define lr.type .*$//' input.y > input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all input-lalr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:79"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y" "existing.at:79"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:79"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:79"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: bison --report=all input-lalr.y"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; bison --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: diff -u input-lalr.output input.output \\
+           | sed -n '/^@@/,\$p' | sed 's/^ \$//'"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:79"
+( $at_check_trace; diff -u input-lalr.output input.output \
+           | sed -n '/^@@/,$p' | sed 's/^ $//'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:79"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:79"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:79"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '*', expecting NEWLINE or '{' or ';'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_259
+#AT_START_260
+at_fn_group_banner 260 'existing.at:79' \
+  "GNU AWK 3.1.0 Grammar: IELR(1)" "                 " 16
+at_xfail=no
+(
+  $as_echo "260. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 cat >input.y <<'_ATEOF'
-%union {}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type ielr
+%error-verbose
+
+%token FUNC_CALL NAME REGEXP
+%token ERROR
+%token YNUMBER YSTRING
+%token RELOP APPEND_OP
+%token ASSIGNOP MATCHOP NEWLINE CONCAT_OP
+%token LEX_BEGIN LEX_END LEX_IF LEX_ELSE LEX_RETURN LEX_DELETE
+%token LEX_WHILE LEX_DO LEX_FOR LEX_BREAK LEX_CONTINUE
+%token LEX_PRINT LEX_PRINTF LEX_NEXT LEX_EXIT LEX_FUNCTION
+%token LEX_GETLINE LEX_NEXTFILE
+%token LEX_IN
+%token LEX_AND LEX_OR INCREMENT DECREMENT
+%token LEX_BUILTIN LEX_LENGTH
+
+/* Lowest to highest */
+%right ASSIGNOP
+%right '?' ':'
+%left LEX_OR
+%left LEX_AND
+%left LEX_GETLINE
+%nonassoc LEX_IN
+%left FUNC_CALL LEX_BUILTIN LEX_LENGTH
+%nonassoc ','
+%nonassoc MATCHOP
+%nonassoc RELOP '<' '>' '|' APPEND_OP TWOWAYIO
+%left CONCAT_OP
+%left YSTRING YNUMBER
+%left '+' '-'
+%left '*' '/' '%'
+%right '!' UNARY
+%right '^'
+%left INCREMENT DECREMENT
+%left '$'
+%left '(' ')'
+
+
+%%
+
+
+start
+	: opt_nls program opt_nls
+	;
+
+program
+	: rule
+	| program rule
+	| error
+	| program error
+	| /* empty */
+	;
+
+rule
+	: LEX_BEGIN {} action
+	| LEX_END {}   action
+	| LEX_BEGIN statement_term
+	| LEX_END statement_term
+	| pattern action
+	| action
+	| pattern statement_term
+	| function_prologue function_body
+	;
+
+func_name
+	: NAME
+	| FUNC_CALL
+	| lex_builtin
+	;
+
+lex_builtin
+	: LEX_BUILTIN
+	| LEX_LENGTH
+	;
+
+function_prologue
+	: LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls
+	;
+
+function_body
+	: l_brace statements r_brace opt_semi opt_nls
+	| l_brace r_brace opt_semi opt_nls
+	;
+
+pattern
+	: exp
+	| exp ',' exp
+	;
+
+regexp
+	/*
+	 * In this rule, want_regexp tells yylex that the next thing
+	 * is a regexp so it should read up to the closing slash.
+	 */
+	: '/' {} REGEXP '/'
+	;
+
+action
+	: l_brace statements r_brace opt_semi opt_nls
+	| l_brace r_brace opt_semi opt_nls
+	;
+
+statements
+	: statement
+	| statements statement
+	| error
+	| statements error
+	;
+
+statement_term
+	: nls
+	| semi opt_nls
+	;
+
+statement
+	: semi opt_nls
+	| l_brace r_brace
+	| l_brace statements r_brace
+	| if_statement
+	| LEX_WHILE '(' exp r_paren opt_nls statement
+	| LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls
+	| LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement
+	| LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement
+	| LEX_FOR '(' opt_exp semi opt_nls semi opt_nls opt_exp r_paren opt_nls statement
+	| LEX_BREAK statement_term
+	| LEX_CONTINUE statement_term
+	| print '(' expression_list r_paren output_redir statement_term
+	| print opt_rexpression_list output_redir statement_term
+	| LEX_NEXT statement_term
+	| LEX_NEXTFILE statement_term
+	| LEX_EXIT opt_exp statement_term
+	| LEX_RETURN {} opt_exp statement_term
+	| LEX_DELETE NAME '[' expression_list ']' statement_term
+	| LEX_DELETE NAME  statement_term
+	| exp statement_term
+	;
+
+print
+	: LEX_PRINT
+	| LEX_PRINTF
+	;
+
+if_statement
+	: LEX_IF '(' exp r_paren opt_nls statement
+	| LEX_IF '(' exp r_paren opt_nls statement
+	     LEX_ELSE opt_nls statement
+	;
+
+nls
+	: NEWLINE
+	| nls NEWLINE
+	;
+
+opt_nls
+	: /* empty */
+	| nls
+	;
+
+input_redir
+	: /* empty */
+	| '<' simp_exp
+	;
+
+output_redir
+	: /* empty */
+	| '>' exp
+	| APPEND_OP exp
+	| '|' exp
+	| TWOWAYIO exp
+	;
+
+opt_param_list
+	: /* empty */
+	| param_list
+	;
+
+param_list
+	: NAME
+	| param_list comma NAME
+	| error
+	| param_list error
+	| param_list comma error
+	;
+
+/* optional expression, as in for loop */
+opt_exp
+	: /* empty */
+	| exp
+	;
+
+opt_rexpression_list
+	: /* empty */
+	| rexpression_list
+	;
+
+rexpression_list
+	: rexp
+	| rexpression_list comma rexp
+	| error
+	| rexpression_list error
+	| rexpression_list error rexp
+	| rexpression_list comma error
+	;
+
+opt_expression_list
+	: /* empty */
+	| expression_list
+	;
+
+expression_list
+	: exp
+	| expression_list comma exp
+	| error
+	| expression_list error
+	| expression_list error exp
+	| expression_list comma error
+	;
+
+/* Expressions, not including the comma operator.  */
+exp	: variable ASSIGNOP {} exp
+	| '(' expression_list r_paren LEX_IN NAME
+	| exp '|' LEX_GETLINE opt_variable
+	| exp TWOWAYIO LEX_GETLINE opt_variable
+	| LEX_GETLINE opt_variable input_redir
+	| exp LEX_AND exp
+	| exp LEX_OR exp
+	| exp MATCHOP exp
+	| regexp
+	| '!' regexp %prec UNARY
+	| exp LEX_IN NAME
+	| exp RELOP exp
+	| exp '<' exp
+	| exp '>' exp
+	| exp '?' exp ':' exp
+	| simp_exp
+	| exp simp_exp %prec CONCAT_OP
+	;
+
+rexp
+	: variable ASSIGNOP {} rexp
+	| rexp LEX_AND rexp
+	| rexp LEX_OR rexp
+	| LEX_GETLINE opt_variable input_redir
+	| regexp
+	| '!' regexp %prec UNARY
+	| rexp MATCHOP rexp
+	| rexp LEX_IN NAME
+	| rexp RELOP rexp
+	| rexp '?' rexp ':' rexp
+	| simp_exp
+	| rexp simp_exp %prec CONCAT_OP
+	;
+
+simp_exp
+	: non_post_simp_exp
+	/* Binary operators in order of decreasing precedence.  */
+	| simp_exp '^' simp_exp
+	| simp_exp '*' simp_exp
+	| simp_exp '/' simp_exp
+	| simp_exp '%' simp_exp
+	| simp_exp '+' simp_exp
+	| simp_exp '-' simp_exp
+	| variable INCREMENT
+	| variable DECREMENT
+	;
+
+non_post_simp_exp
+	: '!' simp_exp %prec UNARY
+	| '(' exp r_paren
+	| LEX_BUILTIN
+	  '(' opt_expression_list r_paren
+	| LEX_LENGTH '(' opt_expression_list r_paren
+	| LEX_LENGTH
+	| FUNC_CALL '(' opt_expression_list r_paren
+	| variable
+	| INCREMENT variable
+	| DECREMENT variable
+	| YNUMBER
+	| YSTRING
+	| '-' simp_exp    %prec UNARY
+	| '+' simp_exp    %prec UNARY
+	;
+
+opt_variable
+	: /* empty */
+	| variable
+	;
+
+variable
+	: NAME
+	| NAME '[' expression_list ']'
+	| '$' non_post_simp_exp
+	;
+
+l_brace
+	: '{' opt_nls
+	;
+
+r_brace
+	: '}' opt_nls
+	;
+
+r_paren
+	: ')'
+	;
+
+opt_semi
+	: /* empty */
+	| semi
+	;
+
+semi
+	: ';'
+	;
+
+comma	: ',' opt_nls
+	;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:79"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "existing.at:79"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:79"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:79"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 65 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:79"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "328
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: diff -u /dev/null /dev/null || exit 77"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; diff -u /dev/null /dev/null || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: sed 's/^%define lr.type .*\$//' input.y > input-lalr.y"
+at_fn_check_prepare_dynamic "sed 's/^%define lr.type .*$//' input.y > input-lalr.y" "existing.at:79"
+( $at_check_trace; sed 's/^%define lr.type .*$//' input.y > input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all input-lalr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:79"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y" "existing.at:79"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:79"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:79: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:79"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: bison --report=all input-lalr.y"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; bison --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: diff -u input-lalr.output input.output \\
+           | sed -n '/^@@/,\$p' | sed 's/^ \$//'"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:79"
+( $at_check_trace; diff -u input-lalr.output input.output \
+           | sed -n '/^@@/,$p' | sed 's/^ $//'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "@@ -712,7 +712,7 @@
+   156         | . '\$' non_post_simp_exp
+
+     NAME  shift, and go to state 9
+-    '\$'   shift, and go to state 24
++    '\$'   shift, and go to state 320
+
+     NAME      [reduce using rule 152 (opt_variable)]
+     '\$'       [reduce using rule 152 (opt_variable)]
+@@ -5379,7 +5379,7 @@
+   156         | . '\$' non_post_simp_exp
+
+     NAME  shift, and go to state 9
+-    '\$'   shift, and go to state 24
++    '\$'   shift, and go to state 320
+
+     NAME      [reduce using rule 152 (opt_variable)]
+     '\$'       [reduce using rule 152 (opt_variable)]
+@@ -5399,7 +5399,7 @@
+   156         | . '\$' non_post_simp_exp
+
+     NAME  shift, and go to state 9
+-    '\$'   shift, and go to state 24
++    '\$'   shift, and go to state 320
+
+     NAME      [reduce using rule 152 (opt_variable)]
+     '\$'       [reduce using rule 152 (opt_variable)]
+@@ -6214,7 +6214,7 @@
+   156         | . '\$' non_post_simp_exp
+
+     NAME  shift, and go to state 9
+-    '\$'   shift, and go to state 24
++    '\$'   shift, and go to state 320
+
+     NAME      [reduce using rule 152 (opt_variable)]
+     '\$'       [reduce using rule 152 (opt_variable)]
+@@ -11099,3 +11099,274 @@
+    45 statement: LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement .
+
+     \$default  reduce using rule 45 (statement)
++
++
++State 320
++
++  139 non_post_simp_exp: . '!' simp_exp
++  140                  | . '(' exp r_paren
++  141                  | . LEX_BUILTIN '(' opt_expression_list r_paren
++  142                  | . LEX_LENGTH '(' opt_expression_list r_paren
++  143                  | . LEX_LENGTH
++  144                  | . FUNC_CALL '(' opt_expression_list r_paren
++  145                  | . variable
++  146                  | . INCREMENT variable
++  147                  | . DECREMENT variable
++  148                  | . YNUMBER
++  149                  | . YSTRING
++  150                  | . '-' simp_exp
++  151                  | . '+' simp_exp
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '\$' non_post_simp_exp
++  156         | '\$' . non_post_simp_exp
++
++    FUNC_CALL    shift, and go to state 8
++    NAME         shift, and go to state 9
++    YNUMBER      shift, and go to state 10
++    YSTRING      shift, and go to state 11
++    INCREMENT    shift, and go to state 321
++    DECREMENT    shift, and go to state 322
++    LEX_BUILTIN  shift, and go to state 18
++    LEX_LENGTH   shift, and go to state 19
++    '+'          shift, and go to state 323
++    '-'          shift, and go to state 324
++    '!'          shift, and go to state 325
++    '\$'          shift, and go to state 320
++    '('          shift, and go to state 55
++
++    non_post_simp_exp  go to state 62
++    variable           go to state 63
++
++
++State 321
++
++  146 non_post_simp_exp: INCREMENT . variable
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '\$' non_post_simp_exp
++
++    NAME  shift, and go to state 9
++    '\$'   shift, and go to state 320
++
++    variable  go to state 50
++
++
++State 322
++
++  147 non_post_simp_exp: DECREMENT . variable
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '\$' non_post_simp_exp
++
++    NAME  shift, and go to state 9
++    '\$'   shift, and go to state 320
++
++    variable  go to state 51
++
++
++State 323
++
++  130 simp_exp: . non_post_simp_exp
++  131         | . simp_exp '^' simp_exp
++  132         | . simp_exp '*' simp_exp
++  133         | . simp_exp '/' simp_exp
++  134         | . simp_exp '%' simp_exp
++  135         | . simp_exp '+' simp_exp
++  136         | . simp_exp '-' simp_exp
++  137         | . variable INCREMENT
++  138         | . variable DECREMENT
++  139 non_post_simp_exp: . '!' simp_exp
++  140                  | . '(' exp r_paren
++  141                  | . LEX_BUILTIN '(' opt_expression_list r_paren
++  142                  | . LEX_LENGTH '(' opt_expression_list r_paren
++  143                  | . LEX_LENGTH
++  144                  | . FUNC_CALL '(' opt_expression_list r_paren
++  145                  | . variable
++  146                  | . INCREMENT variable
++  147                  | . DECREMENT variable
++  148                  | . YNUMBER
++  149                  | . YSTRING
++  150                  | . '-' simp_exp
++  151                  | . '+' simp_exp
++  151                  | '+' . simp_exp
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '\$' non_post_simp_exp
++
++    FUNC_CALL    shift, and go to state 8
++    NAME         shift, and go to state 9
++    YNUMBER      shift, and go to state 10
++    YSTRING      shift, and go to state 11
++    INCREMENT    shift, and go to state 16
++    DECREMENT    shift, and go to state 17
++    LEX_BUILTIN  shift, and go to state 18
++    LEX_LENGTH   shift, and go to state 19
++    '+'          shift, and go to state 20
++    '-'          shift, and go to state 21
++    '!'          shift, and go to state 54
++    '\$'          shift, and go to state 24
++    '('          shift, and go to state 55
++
++    simp_exp           go to state 326
++    non_post_simp_exp  go to state 35
++    variable           go to state 57
++
++
++State 324
++
++  130 simp_exp: . non_post_simp_exp
++  131         | . simp_exp '^' simp_exp
++  132         | . simp_exp '*' simp_exp
++  133         | . simp_exp '/' simp_exp
++  134         | . simp_exp '%' simp_exp
++  135         | . simp_exp '+' simp_exp
++  136         | . simp_exp '-' simp_exp
++  137         | . variable INCREMENT
++  138         | . variable DECREMENT
++  139 non_post_simp_exp: . '!' simp_exp
++  140                  | . '(' exp r_paren
++  141                  | . LEX_BUILTIN '(' opt_expression_list r_paren
++  142                  | . LEX_LENGTH '(' opt_expression_list r_paren
++  143                  | . LEX_LENGTH
++  144                  | . FUNC_CALL '(' opt_expression_list r_paren
++  145                  | . variable
++  146                  | . INCREMENT variable
++  147                  | . DECREMENT variable
++  148                  | . YNUMBER
++  149                  | . YSTRING
++  150                  | . '-' simp_exp
++  150                  | '-' . simp_exp
++  151                  | . '+' simp_exp
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '\$' non_post_simp_exp
++
++    FUNC_CALL    shift, and go to state 8
++    NAME         shift, and go to state 9
++    YNUMBER      shift, and go to state 10
++    YSTRING      shift, and go to state 11
++    INCREMENT    shift, and go to state 16
++    DECREMENT    shift, and go to state 17
++    LEX_BUILTIN  shift, and go to state 18
++    LEX_LENGTH   shift, and go to state 19
++    '+'          shift, and go to state 20
++    '-'          shift, and go to state 21
++    '!'          shift, and go to state 54
++    '\$'          shift, and go to state 24
++    '('          shift, and go to state 55
++
++    simp_exp           go to state 327
++    non_post_simp_exp  go to state 35
++    variable           go to state 57
++
++
++State 325
++
++  130 simp_exp: . non_post_simp_exp
++  131         | . simp_exp '^' simp_exp
++  132         | . simp_exp '*' simp_exp
++  133         | . simp_exp '/' simp_exp
++  134         | . simp_exp '%' simp_exp
++  135         | . simp_exp '+' simp_exp
++  136         | . simp_exp '-' simp_exp
++  137         | . variable INCREMENT
++  138         | . variable DECREMENT
++  139 non_post_simp_exp: . '!' simp_exp
++  139                  | '!' . simp_exp
++  140                  | . '(' exp r_paren
++  141                  | . LEX_BUILTIN '(' opt_expression_list r_paren
++  142                  | . LEX_LENGTH '(' opt_expression_list r_paren
++  143                  | . LEX_LENGTH
++  144                  | . FUNC_CALL '(' opt_expression_list r_paren
++  145                  | . variable
++  146                  | . INCREMENT variable
++  147                  | . DECREMENT variable
++  148                  | . YNUMBER
++  149                  | . YSTRING
++  150                  | . '-' simp_exp
++  151                  | . '+' simp_exp
++  154 variable: . NAME
++  155         | . NAME '[' expression_list ']'
++  156         | . '\$' non_post_simp_exp
++
++    FUNC_CALL    shift, and go to state 8
++    NAME         shift, and go to state 9
++    YNUMBER      shift, and go to state 10
++    YSTRING      shift, and go to state 11
++    INCREMENT    shift, and go to state 16
++    DECREMENT    shift, and go to state 17
++    LEX_BUILTIN  shift, and go to state 18
++    LEX_LENGTH   shift, and go to state 19
++    '+'          shift, and go to state 20
++    '-'          shift, and go to state 21
++    '!'          shift, and go to state 54
++    '\$'          shift, and go to state 24
++    '('          shift, and go to state 55
++
++    simp_exp           go to state 328
++    non_post_simp_exp  go to state 35
++    variable           go to state 57
++
++
++State 326
++
++  131 simp_exp: simp_exp . '^' simp_exp
++  132         | simp_exp . '*' simp_exp
++  133         | simp_exp . '/' simp_exp
++  134         | simp_exp . '%' simp_exp
++  135         | simp_exp . '+' simp_exp
++  136         | simp_exp . '-' simp_exp
++  151 non_post_simp_exp: '+' simp_exp .  [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '\$', '(', ')', ']', '{', ';']
++
++    '*'  shift, and go to state 89
++    '/'  shift, and go to state 90
++    '%'  shift, and go to state 91
++    '^'  shift, and go to state 92
++
++    \$default  reduce using rule 151 (non_post_simp_exp)
++
++    Conflict between rule 151 and token '+' resolved as reduce ('+' < UNARY).
++    Conflict between rule 151 and token '-' resolved as reduce ('-' < UNARY).
++
++
++State 327
++
++  131 simp_exp: simp_exp . '^' simp_exp
++  132         | simp_exp . '*' simp_exp
++  133         | simp_exp . '/' simp_exp
++  134         | simp_exp . '%' simp_exp
++  135         | simp_exp . '+' simp_exp
++  136         | simp_exp . '-' simp_exp
++  150 non_post_simp_exp: '-' simp_exp .  [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '\$', '(', ')', ']', '{', ';']
++
++    '*'  shift, and go to state 89
++    '/'  shift, and go to state 90
++    '%'  shift, and go to state 91
++    '^'  shift, and go to state 92
++
++    \$default  reduce using rule 150 (non_post_simp_exp)
++
++    Conflict between rule 150 and token '+' resolved as reduce ('+' < UNARY).
++    Conflict between rule 150 and token '-' resolved as reduce ('-' < UNARY).
++
++
++State 328
++
++  131 simp_exp: simp_exp . '^' simp_exp
++  132         | simp_exp . '*' simp_exp
++  133         | simp_exp . '/' simp_exp
++  134         | simp_exp . '%' simp_exp
++  135         | simp_exp . '+' simp_exp
++  136         | simp_exp . '-' simp_exp
++  139 non_post_simp_exp: '!' simp_exp .  [error, FUNC_CALL, NAME, YNUMBER, YSTRING, RELOP, APPEND_OP, MATCHOP, NEWLINE, LEX_IN, LEX_AND, LEX_OR, INCREMENT, DECREMENT, LEX_BUILTIN, LEX_LENGTH, '?', ':', ',', '<', '>', '|', TWOWAYIO, '+', '-', '!', '\$', '(', ')', ']', '{', ';']
++
++    '*'  shift, and go to state 89
++    '/'  shift, and go to state 90
++    '%'  shift, and go to state 91
++    '^'  shift, and go to state 92
++
++    \$default  reduce using rule 139 (non_post_simp_exp)
++
++    Conflict between rule 139 and token '+' resolved as reduce ('+' < UNARY).
++    Conflict between rule 139 and token '-' resolved as reduce ('-' < UNARY).
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:79"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:79"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:79"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_260
+#AT_START_261
+at_fn_group_banner 261 'existing.at:79' \
+  "GNU AWK 3.1.0 Grammar: Canonical LR(1)" "         " 16
+at_xfail=no
+(
+  $as_echo "261. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type canonical-lr
+%error-verbose
+
+%token FUNC_CALL NAME REGEXP
+%token ERROR
+%token YNUMBER YSTRING
+%token RELOP APPEND_OP
+%token ASSIGNOP MATCHOP NEWLINE CONCAT_OP
+%token LEX_BEGIN LEX_END LEX_IF LEX_ELSE LEX_RETURN LEX_DELETE
+%token LEX_WHILE LEX_DO LEX_FOR LEX_BREAK LEX_CONTINUE
+%token LEX_PRINT LEX_PRINTF LEX_NEXT LEX_EXIT LEX_FUNCTION
+%token LEX_GETLINE LEX_NEXTFILE
+%token LEX_IN
+%token LEX_AND LEX_OR INCREMENT DECREMENT
+%token LEX_BUILTIN LEX_LENGTH
+
+/* Lowest to highest */
+%right ASSIGNOP
+%right '?' ':'
+%left LEX_OR
+%left LEX_AND
+%left LEX_GETLINE
+%nonassoc LEX_IN
+%left FUNC_CALL LEX_BUILTIN LEX_LENGTH
+%nonassoc ','
+%nonassoc MATCHOP
+%nonassoc RELOP '<' '>' '|' APPEND_OP TWOWAYIO
+%left CONCAT_OP
+%left YSTRING YNUMBER
+%left '+' '-'
+%left '*' '/' '%'
+%right '!' UNARY
+%right '^'
+%left INCREMENT DECREMENT
+%left '$'
+%left '(' ')'
+
+
+%%
+
+
+start
+	: opt_nls program opt_nls
+	;
+
+program
+	: rule
+	| program rule
+	| error
+	| program error
+	| /* empty */
+	;
+
+rule
+	: LEX_BEGIN {} action
+	| LEX_END {}   action
+	| LEX_BEGIN statement_term
+	| LEX_END statement_term
+	| pattern action
+	| action
+	| pattern statement_term
+	| function_prologue function_body
+	;
+
+func_name
+	: NAME
+	| FUNC_CALL
+	| lex_builtin
+	;
+
+lex_builtin
+	: LEX_BUILTIN
+	| LEX_LENGTH
+	;
+
+function_prologue
+	: LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls
+	;
+
+function_body
+	: l_brace statements r_brace opt_semi opt_nls
+	| l_brace r_brace opt_semi opt_nls
+	;
+
+pattern
+	: exp
+	| exp ',' exp
+	;
+
+regexp
+	/*
+	 * In this rule, want_regexp tells yylex that the next thing
+	 * is a regexp so it should read up to the closing slash.
+	 */
+	: '/' {} REGEXP '/'
+	;
+
+action
+	: l_brace statements r_brace opt_semi opt_nls
+	| l_brace r_brace opt_semi opt_nls
+	;
+
+statements
+	: statement
+	| statements statement
+	| error
+	| statements error
+	;
+
+statement_term
+	: nls
+	| semi opt_nls
+	;
+
+statement
+	: semi opt_nls
+	| l_brace r_brace
+	| l_brace statements r_brace
+	| if_statement
+	| LEX_WHILE '(' exp r_paren opt_nls statement
+	| LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls
+	| LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement
+	| LEX_FOR '(' opt_exp semi opt_nls exp semi opt_nls opt_exp r_paren opt_nls statement
+	| LEX_FOR '(' opt_exp semi opt_nls semi opt_nls opt_exp r_paren opt_nls statement
+	| LEX_BREAK statement_term
+	| LEX_CONTINUE statement_term
+	| print '(' expression_list r_paren output_redir statement_term
+	| print opt_rexpression_list output_redir statement_term
+	| LEX_NEXT statement_term
+	| LEX_NEXTFILE statement_term
+	| LEX_EXIT opt_exp statement_term
+	| LEX_RETURN {} opt_exp statement_term
+	| LEX_DELETE NAME '[' expression_list ']' statement_term
+	| LEX_DELETE NAME  statement_term
+	| exp statement_term
+	;
+
+print
+	: LEX_PRINT
+	| LEX_PRINTF
+	;
+
+if_statement
+	: LEX_IF '(' exp r_paren opt_nls statement
+	| LEX_IF '(' exp r_paren opt_nls statement
+	     LEX_ELSE opt_nls statement
+	;
+
+nls
+	: NEWLINE
+	| nls NEWLINE
+	;
+
+opt_nls
+	: /* empty */
+	| nls
+	;
+
+input_redir
+	: /* empty */
+	| '<' simp_exp
+	;
+
+output_redir
+	: /* empty */
+	| '>' exp
+	| APPEND_OP exp
+	| '|' exp
+	| TWOWAYIO exp
+	;
+
+opt_param_list
+	: /* empty */
+	| param_list
+	;
+
+param_list
+	: NAME
+	| param_list comma NAME
+	| error
+	| param_list error
+	| param_list comma error
+	;
+
+/* optional expression, as in for loop */
+opt_exp
+	: /* empty */
+	| exp
+	;
+
+opt_rexpression_list
+	: /* empty */
+	| rexpression_list
+	;
+
+rexpression_list
+	: rexp
+	| rexpression_list comma rexp
+	| error
+	| rexpression_list error
+	| rexpression_list error rexp
+	| rexpression_list comma error
+	;
+
+opt_expression_list
+	: /* empty */
+	| expression_list
+	;
+
+expression_list
+	: exp
+	| expression_list comma exp
+	| error
+	| expression_list error
+	| expression_list error exp
+	| expression_list comma error
+	;
+
+/* Expressions, not including the comma operator.  */
+exp	: variable ASSIGNOP {} exp
+	| '(' expression_list r_paren LEX_IN NAME
+	| exp '|' LEX_GETLINE opt_variable
+	| exp TWOWAYIO LEX_GETLINE opt_variable
+	| LEX_GETLINE opt_variable input_redir
+	| exp LEX_AND exp
+	| exp LEX_OR exp
+	| exp MATCHOP exp
+	| regexp
+	| '!' regexp %prec UNARY
+	| exp LEX_IN NAME
+	| exp RELOP exp
+	| exp '<' exp
+	| exp '>' exp
+	| exp '?' exp ':' exp
+	| simp_exp
+	| exp simp_exp %prec CONCAT_OP
+	;
+
+rexp
+	: variable ASSIGNOP {} rexp
+	| rexp LEX_AND rexp
+	| rexp LEX_OR rexp
+	| LEX_GETLINE opt_variable input_redir
+	| regexp
+	| '!' regexp %prec UNARY
+	| rexp MATCHOP rexp
+	| rexp LEX_IN NAME
+	| rexp RELOP rexp
+	| rexp '?' rexp ':' rexp
+	| simp_exp
+	| rexp simp_exp %prec CONCAT_OP
+	;
+
+simp_exp
+	: non_post_simp_exp
+	/* Binary operators in order of decreasing precedence.  */
+	| simp_exp '^' simp_exp
+	| simp_exp '*' simp_exp
+	| simp_exp '/' simp_exp
+	| simp_exp '%' simp_exp
+	| simp_exp '+' simp_exp
+	| simp_exp '-' simp_exp
+	| variable INCREMENT
+	| variable DECREMENT
+	;
+
+non_post_simp_exp
+	: '!' simp_exp %prec UNARY
+	| '(' exp r_paren
+	| LEX_BUILTIN
+	  '(' opt_expression_list r_paren
+	| LEX_LENGTH '(' opt_expression_list r_paren
+	| LEX_LENGTH
+	| FUNC_CALL '(' opt_expression_list r_paren
+	| variable
+	| INCREMENT variable
+	| DECREMENT variable
+	| YNUMBER
+	| YSTRING
+	| '-' simp_exp    %prec UNARY
+	| '+' simp_exp    %prec UNARY
+	;
+
+opt_variable
+	: /* empty */
+	| variable
+	;
+
+variable
+	: NAME
+	| NAME '[' expression_list ']'
+	| '$' non_post_simp_exp
+	;
+
+l_brace
+	: '{' opt_nls
+	;
+
+r_brace
+	: '}' opt_nls
+	;
+
+r_paren
+	: ')'
+	;
+
+opt_semi
+	: /* empty */
+	| semi
+	;
+
+semi
+	: ';'
+	;
+
+comma	: ',' opt_nls
+	;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';', 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 265 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:79"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2358
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+if test 32767 -lt `wc -l < input.c`; then
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic //'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic //'`
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:79"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:79"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:79"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:79: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:79"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_261
+#AT_START_262
+at_fn_group_banner 262 'existing.at:783' \
+  "GNU Cim Grammar: LALR(1)" "                       " 16
+at_xfail=no
+(
+  $as_echo "262. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type lalr
 
 %token
 	HACTIVATE HAFTER /*HAND*/ HARRAY HAT
@@ -55357,7 +133155,11 @@
 %left   HDOT
 
 %start  MAIN_MODULE
+
+
 %%
+
+
 /* GRAMATIKK FOR PROGRAM MODULES */
 MAIN_MODULE     :       {}
 			MODULS
@@ -55876,50 +133678,282 @@
 			HPAREXPSEPARATOR
 			ARGUMENT_LIST
 		;
+
+
 %%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
 _ATEOF
 
 
-# Pass plenty of options, to exercise plenty of code, even if we
-# don't actually check the output.  But SEGV is watching us, and
-# so might do dmalloc.
-$at_traceoff
-echo "existing.at:960: bison --verbose --defines input.y"
-echo existing.at:960 >$at_check_line_file
-( $at_traceon; bison --verbose --defines input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y: conflicts: 78 shift/reduce, 10 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "existing.at:960: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:783"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "existing.at:783"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:783"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:783"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 78 shift/reduce, 10 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "existing.at:972: grep '^State.*conflicts:' input.output"
-echo existing.at:972 >$at_check_line_file
-( $at_traceon; grep '^State.*conflicts:' input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "State 64 conflicts: 14 shift/reduce
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:783"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "442
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: diff -u /dev/null /dev/null || exit 77"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; diff -u /dev/null /dev/null || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: sed 's/^%define lr.type .*\$//' input.y > input-lalr.y"
+at_fn_check_prepare_dynamic "sed 's/^%define lr.type .*$//' input.y > input-lalr.y" "existing.at:783"
+( $at_check_trace; sed 's/^%define lr.type .*$//' input.y > input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all input-lalr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:783"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y" "existing.at:783"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:783"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:783"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: bison --report=all input-lalr.y"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; bison --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: diff -u input-lalr.output input.output \\
+           | sed -n '/^@@/,\$p' | sed 's/^ \$//'"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:783"
+( $at_check_trace; diff -u input-lalr.output input.output \
+           | sed -n '/^@@/,$p' | sed 's/^ $//'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: grep '^State.*conflicts:' input.output"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; grep '^State.*conflicts:' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 64 conflicts: 14 shift/reduce
 State 164 conflicts: 1 shift/reduce
 State 201 conflicts: 33 shift/reduce, 4 reduce/reduce
 State 206 conflicts: 1 shift/reduce
@@ -55928,45 +133962,1823 @@
 State 356 conflicts: 1 shift/reduce
 State 360 conflicts: 9 shift/reduce, 2 reduce/reduce
 State 427 conflicts: 9 shift/reduce, 2 reduce/reduce
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "existing.at:972: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
 
-  112 ) # 112. existing.at:980: GNU pic Grammar
-    at_setup_line='existing.at:980'
-    at_desc='GNU pic Grammar'
-    $at_quiet $ECHO_N "112: GNU pic Grammar                              $ECHO_C"
-    at_xfail=no
-    (
-      echo "112. existing.at:980: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:783"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:783"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-# GNU pic, part of groff.
+{ set +x
+$as_echo "$at_srcdir/existing.at:783:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:783"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-# Bison once reported shift/reduce conflicts that it shouldn't have.
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_262
+#AT_START_263
+at_fn_group_banner 263 'existing.at:783' \
+  "GNU Cim Grammar: IELR(1)" "                       " 16
+at_xfail=no
+(
+  $as_echo "263. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 cat >input.y <<'_ATEOF'
-%union {}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type ielr
+
+%token
+	HACTIVATE HAFTER /*HAND*/ HARRAY HAT
+	HBEFORE HBEGIN HBOOLEAN
+	HCHARACTER HCLASS /*HCOMMENT*/ HCONC
+	HDELAY HDO
+	HELSE HEND HEQ /*HEQV*/ HEXTERNAL
+	HFOR
+	HGE HGO HGOTO HGT
+	HHIDDEN
+	HIF /*HIMP*/ HIN HINNER HINSPECT HINTEGER HIS
+	HLABEL HLE HLONG HLT
+	HNAME HNE HNEW HNONE /*HNOT*/ HNOTEXT
+	/*HOR*/ HOTHERWISE
+	HPRIOR HPROCEDURE HPROTECTED
+	HQUA
+	HREACTIVATE HREAL HREF
+	HSHORT HSTEP HSWITCH
+	HTEXT HTHEN HTHIS HTO
+	HUNTIL
+	HVALUE HVAR HVIRTUAL
+	HWHEN HWHILE
+
+	HASSIGNVALUE HASSIGNREF
+	/*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR
+	HBEGPAR HENDPAR
+	HEQR HNER
+	HADD HSUB HMUL HDIV HINTDIV HEXP
+	HDOTDOTDOT
+
+%token HIDENTIFIER
+%token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
+%token HREALKONST
+%token HTEXTKONST
+
+
+%right HASSIGN
+%left   HORELSE
+%left   HANDTHEN
+%left   HEQV
+%left   HIMP
+%left   HOR
+%left   HAND
+
+%left   HNOT
+
+%left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR
+
+%left	HCONC
+
+%left HTERMOPERATOR
+%left UNEAR
+%left HFACTOROPERATOR
+%left         HPRIMARYOPERATOR
+
+%left   HQUA
+
+%left   HDOT
+
+%start  MAIN_MODULE
+
+
+%%
+
+
+/* GRAMATIKK FOR PROGRAM MODULES */
+MAIN_MODULE     :       {}
+			MODULS
+		|	error HSTATEMENTSEPARATOR MBEE_DECLSTMS
+		;
+EXT_DECLARATION	:	HEXTERNAL
+			MBEE_TYPE
+			HPROCEDURE
+				{}
+			EXT_LIST
+		|
+			HEXTERNAL
+			HIDENTIFIER
+			HPROCEDURE
+				{}
+			HIDENTIFIER {}
+			EXTERNAL_KIND_ITEM
+		|	HEXTERNAL
+			HCLASS
+				{}
+			EXT_LIST
+
+		;
+EXTERNAL_KIND_ITEM:	EXT_IDENT
+			HOBJRELOPERATOR
+				{}
+			MBEE_TYPE HPROCEDURE
+			HIDENTIFIER
+				{}
+			HEADING EMPTY_BLOCK
+				{}
+/*		|
+			EXT_IDENT
+				{}
+			MBEE_REST_EXT_LIST
+		;
+MBEE_REST_EXT_LIST:	/* EMPTY
+		|	HPAREXPSEPARATOR EXT_KIND_LIST
+		;
+EXT_KIND_LIST	:	EXT_KIND_ITEM
+		|	EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM
+		;
+EXT_KIND_ITEM	:	HIDENTIFIER
+			EXT_IDENT
+				{}*/
+		;
+EMPTY_BLOCK	:	/*EMPT*/
+		|	HBEGIN HEND
+		;
+EXT_LIST	:	EXT_ITEM
+		|	EXT_LIST HPAREXPSEPARATOR EXT_ITEM
+		;
+EXT_ITEM	:	HIDENTIFIER
+			EXT_IDENT
+		;
+EXT_IDENT	:	/* EMPTY */
+		|	HVALRELOPERATOR {}
+			HTEXTKONST
+		;
+/* GRAMATIKK FOR TYPER */
+NO_TYPE         :       /*EMPT*/
+		;
+MBEE_TYPE       :       NO_TYPE
+		|       TYPE
+		;
+TYPE            :       HREF HBEGPAR
+			HIDENTIFIER
+				{}
+			HENDPAR
+		|       HTEXT
+		|       HBOOLEAN
+		|       HCHARACTER
+		|       HSHORT HINTEGER
+		|       HINTEGER
+		|       HREAL
+		|       HLONG HREAL
+		;
+
+/* GRAMATIKK FOR DEL AV SETNINGER */
+MBEE_ELSE_PART  :       /*EMPT*/
+/*		|	HELSE
+			HIF
+			EXPRESSION
+			HTHEN   {}
+			BLOCK   {}
+			MBEE_ELSE_PART          {}*/
+		|       HELSE   {}
+			BLOCK
+		;
+FOR_LIST        :       FOR_LIST_ELEMENT
+		|       FOR_LIST_ELEMENT
+			HPAREXPSEPARATOR
+			FOR_LIST
+		;
+FOR_LIST_ELEMENT:       EXPRESSION
+			MBEE_F_L_EL_R_PT
+		;
+MBEE_F_L_EL_R_PT:       /*EMPT*/
+		|       HWHILE
+			EXPRESSION
+		|       HSTEP
+			EXPRESSION
+			HUNTIL
+			EXPRESSION
+		;
+GOTO            :       HGO
+			HTO
+		|       HGOTO
+		;
+CONN_STATE_R_PT :       WHEN_CLAUSE_LIST
+		|       HDO   {}
+			BLOCK
+		;
+WHEN_CLAUSE_LIST:       HWHEN
+			HIDENTIFIER
+			HDO    {}
+			BLOCK
+		|       WHEN_CLAUSE_LIST
+			HWHEN
+			HIDENTIFIER
+			HDO    {}
+			BLOCK
+		;
+MBEE_OTWI_CLAUS :       /*EMPT*/
+		|       HOTHERWISE {}
+
+			BLOCK
+		;
+ACTIVATOR	:	HACTIVATE
+		|	HREACTIVATE
+		;
+SCHEDULE	:	/*EMPT*/
+		|	ATDELAY EXPRESSION	{}
+			PRIOR
+		|	BEFOREAFTER		{}
+			EXPRESSION
+		;
+ATDELAY		:	HAT
+		|	HDELAY
+		;
+BEFOREAFTER	:	HBEFORE
+		|	HAFTER
+		;
+PRIOR		:	/*EMPT*/
+		|	HPRIOR
+		;
+/* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */
+MODULSTATEMENT  :       HWHILE
+			EXPRESSION
+			HDO     {}
+			BLOCK
+		|       HIF
+			EXPRESSION
+			HTHEN   {}
+			BLOCK   {}
+			MBEE_ELSE_PART
+		|       HFOR
+			HIDENTIFIER
+			HASSIGN {}
+			FOR_LIST
+			HDO     {}
+			BLOCK
+		|       GOTO
+			EXPRESSION
+		|       HINSPECT
+			EXPRESSION              {}
+			CONN_STATE_R_PT
+				{}
+			MBEE_OTWI_CLAUS
+		|       HINNER
+		|       HIDENTIFIER
+			HLABELSEPARATOR
+				{}
+			DECLSTATEMENT
+		|       EXPRESSION_SIMP
+			HBEGIN
+				{}
+			IMPORT_SPEC_MODULE
+				{}
+			MBEE_DECLSTMS
+			HEND
+		|	EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR
+			MBEE_DECLSTMS HEND
+		|	EXPRESSION_SIMP HBEGIN error HEND
+		|       EXPRESSION_SIMP
+		|	ACTIVATOR EXPRESSION SCHEDULE
+		|       HBEGIN
+				{}
+			MBEE_DECLSTMS
+			HEND
+		|       MBEE_TYPE HPROCEDURE
+			HIDENTIFIER
+				{}
+			HEADING BLOCK
+		|       HIDENTIFIER
+			HCLASS
+			NO_TYPE
+				{}
+			IMPORT_SPEC_MODULE
+			HIDENTIFIER
+				{}
+			HEADING
+			BLOCK
+		|       HCLASS
+			NO_TYPE
+			HIDENTIFIER
+				{}
+			HEADING
+			BLOCK
+		|       EXT_DECLARATION
+		|       /*EMPT*/
+		;
+IMPORT_SPEC_MODULE:
+		;
+DECLSTATEMENT	:	MODULSTATEMENT
+		|       TYPE
+			HIDENTIFIER
+			MBEE_CONSTANT
+			HPAREXPSEPARATOR
+				{}
+			IDENTIFIER_LISTC
+		|       TYPE
+			HIDENTIFIER
+			MBEE_CONSTANT
+		|       MBEE_TYPE
+			HARRAY  {}
+			ARR_SEGMENT_LIST
+		|       HSWITCH
+			HIDENTIFIER
+			HASSIGN {}
+			SWITCH_LIST
+		;
+BLOCK           :       DECLSTATEMENT
+		|       HBEGIN MBEE_DECLSTMS HEND
+		|	HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND
+		|	HBEGIN error HEND
+		;
+MBEE_DECLSTMS   :       MBEE_DECLSTMSU
+		;
+MBEE_DECLSTMSU  :       DECLSTATEMENT
+		|       MBEE_DECLSTMSU
+			HSTATEMENTSEPARATOR
+			DECLSTATEMENT
+		;
+MODULS		:	MODULSTATEMENT
+		|	MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
+		;
+/* GRAMATIKK FOR DEL AV DEKLARASJONER */
+ARR_SEGMENT_LIST:       ARR_SEGMENT
+		|       ARR_SEGMENT_LIST
+			HPAREXPSEPARATOR
+			ARR_SEGMENT
+		;
+ARR_SEGMENT	:       ARRAY_SEGMENT
+			HBEGPAR
+			BAUND_PAIR_LIST HENDPAR
+		;
+ARRAY_SEGMENT   :       ARRAY_SEGMENT_EL        {}
+
+		|       ARRAY_SEGMENT_EL
+			HPAREXPSEPARATOR
+			ARRAY_SEGMENT
+		;
+ARRAY_SEGMENT_EL:       HIDENTIFIER
+		;
+BAUND_PAIR_LIST :       BAUND_PAIR
+		|       BAUND_PAIR
+			HPAREXPSEPARATOR
+			BAUND_PAIR_LIST
+		;
+BAUND_PAIR      :       EXPRESSION
+			HLABELSEPARATOR
+			EXPRESSION
+		;
+SWITCH_LIST     :       EXPRESSION
+		|       EXPRESSION
+			HPAREXPSEPARATOR
+			SWITCH_LIST
+		;
+HEADING         :       MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
+			MBEE_MODE_PART  {}
+			MBEE_SPEC_PART  {}
+			MBEE_PROT_PART  {}
+			MBEE_VIRT_PART
+		;
+MBEE_FMAL_PAR_P :       /*EMPT*/
+		|       FMAL_PAR_PART
+		;
+FMAL_PAR_PART   :       HBEGPAR NO_TYPE
+			MBEE_LISTV HENDPAR
+		;
+MBEE_LISTV      :       /*EMPT*/
+		|       LISTV
+		;
+LISTV           :       HIDENTIFIER
+		|	FPP_CATEG HDOTDOTDOT
+		|       HIDENTIFIER     {}
+			HPAREXPSEPARATOR LISTV
+		|       FPP_SPEC
+		|       FPP_SPEC
+			HPAREXPSEPARATOR LISTV
+		;
+FPP_HEADING     :       HBEGPAR NO_TYPE
+			FPP_MBEE_LISTV HENDPAR
+		;
+FPP_MBEE_LISTV  :       /*EMPT*/
+		|       FPP_LISTV
+		;
+FPP_LISTV       :	FPP_CATEG HDOTDOTDOT
+		|       FPP_SPEC
+		|       FPP_SPEC
+			HPAREXPSEPARATOR LISTV
+		;
+FPP_SPEC        :       FPP_CATEG SPECIFIER HIDENTIFIER
+		|	FPP_CATEG FPP_PROC_DECL_IN_SPEC
+		;
+FPP_CATEG       :       HNAME HLABELSEPARATOR
+		|       HVALUE HLABELSEPARATOR
+		|       HVAR HLABELSEPARATOR
+		|       /*EMPT*/
+		;
+FPP_PROC_DECL_IN_SPEC:	MBEE_TYPE HPROCEDURE
+			HIDENTIFIER
+					{}
+			FPP_HEADING {} { /* Yes, two "final" actions. */ }
+		;
+IDENTIFIER_LISTV:       HIDENTIFIER
+		|	HDOTDOTDOT
+		|       HIDENTIFIER     {}
+			HPAREXPSEPARATOR IDENTIFIER_LISTV
+		;
+MBEE_MODE_PART  :       /*EMPT*/
+		|       MODE_PART
+		;
+MODE_PART       :       NAME_PART
+		|       VALUE_PART
+		|       VAR_PART
+		|       NAME_PART VALUE_PART
+		|       VALUE_PART NAME_PART
+		|       NAME_PART VAR_PART
+		|       VAR_PART NAME_PART
+		|       VALUE_PART VAR_PART
+		|       VAR_PART VALUE_PART
+		|       VAR_PART NAME_PART VALUE_PART
+		|       NAME_PART VAR_PART VALUE_PART
+		|       NAME_PART VALUE_PART VAR_PART
+		|       VAR_PART VALUE_PART NAME_PART
+		|       VALUE_PART VAR_PART NAME_PART
+		|       VALUE_PART NAME_PART VAR_PART
+		;
+NAME_PART       :       HNAME           {}
+			IDENTIFIER_LISTV
+			HSTATEMENTSEPARATOR
+		;
+VAR_PART        :       HVAR            {}
+			IDENTIFIER_LISTV
+			HSTATEMENTSEPARATOR
+		;
+VALUE_PART      :       HVALUE          {}
+			IDENTIFIER_LISTV HSTATEMENTSEPARATOR
+		;
+MBEE_SPEC_PART  :       /*EMPT*/
+		|       SPEC_PART
+		;
+SPEC_PART       :       ONE_SPEC
+		|       SPEC_PART ONE_SPEC
+		;
+ONE_SPEC	:	SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR
+		|	NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR
+			  {}
+			PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
+		|       FPP_PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
+		|       MBEE_TYPE HPROCEDURE HIDENTIFIER HSTATEMENTSEPARATOR
+		|       MBEE_TYPE HPROCEDURE HIDENTIFIER HPAREXPSEPARATOR
+			IDENTIFIER_LIST HSTATEMENTSEPARATOR
+		;
+SPECIFIER       :       TYPE
+		|       MBEE_TYPE
+			HARRAY
+		|       HLABEL
+		|       HSWITCH
+		;
+PROC_DECL_IN_SPEC:	MBEE_TYPE HPROCEDURE
+			HIDENTIFIER
+					{}
+			HEADING
+					{}
+			MBEE_BEGIN_END
+		;
+MBEE_BEGIN_END	:	/* EMPTY */
+		|	HBEGIN HEND
+		;
+MBEE_PROT_PART  :       /*EMPT*/
+		|       PROTECTION_PART
+		;
+PROTECTION_PART :       PROT_SPECIFIER IDENTIFIER_LIST
+			HSTATEMENTSEPARATOR
+		|       PROTECTION_PART  PROT_SPECIFIER
+			IDENTIFIER_LIST HSTATEMENTSEPARATOR
+		;
+PROT_SPECIFIER  :       HHIDDEN
+		|       HPROTECTED
+		|       HHIDDEN
+			HPROTECTED
+		|       HPROTECTED
+			HHIDDEN
+		;
+MBEE_VIRT_PART  :       /*EMPT*/
+		|       VIRTUAL_PART
+		;
+VIRTUAL_PART    :       HVIRTUAL
+			HLABELSEPARATOR
+			MBEE_SPEC_PART
+		;
+IDENTIFIER_LIST :       HIDENTIFIER
+		|       IDENTIFIER_LIST HPAREXPSEPARATOR
+			HIDENTIFIER
+		;
+IDENTIFIER_LISTC:       HIDENTIFIER
+			MBEE_CONSTANT
+		|       IDENTIFIER_LISTC HPAREXPSEPARATOR
+			HIDENTIFIER
+			MBEE_CONSTANT
+		;
+MBEE_CONSTANT	:	/* EMPTY */
+		|	HVALRELOPERATOR
+				{}
+			EXPRESSION
+		;
+
+/* GRAMATIKK FOR UTTRYKK */
+EXPRESSION      :       EXPRESSION_SIMP
+		|       HIF
+			EXPRESSION
+			HTHEN
+			EXPRESSION
+			HELSE
+			EXPRESSION
+		;
+EXPRESSION_SIMP :	EXPRESSION_SIMP
+			HASSIGN
+			EXPRESSION
+		|
+
+			EXPRESSION_SIMP
+			HCONC
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP HOR
+			HELSE
+			EXPRESSION_SIMP
+			%prec HORELSE
+		|       EXPRESSION_SIMP HAND
+			HTHEN
+			EXPRESSION_SIMP
+			%prec HANDTHEN
+		|       EXPRESSION_SIMP
+			HEQV EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HIMP EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HOR EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HAND EXPRESSION_SIMP
+		|       HNOT EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HVALRELOPERATOR
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HREFRELOPERATOR
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HOBJRELOPERATOR
+			EXPRESSION_SIMP
+		|       HTERMOPERATOR
+			EXPRESSION_SIMP %prec UNEAR
+		|       EXPRESSION_SIMP
+			HTERMOPERATOR
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HFACTOROPERATOR
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HPRIMARYOPERATOR
+			EXPRESSION_SIMP
+		|       HBEGPAR
+			EXPRESSION HENDPAR
+		|       HTEXTKONST
+		|       HCHARACTERKONST
+		|       HREALKONST
+		|       HINTEGERKONST
+		|       HBOOLEANKONST
+		|       HNONE
+		|       HIDENTIFIER
+				{}
+			MBEE_ARG_R_PT
+		|       HTHIS HIDENTIFIER
+		|       HNEW
+			HIDENTIFIER
+			ARG_R_PT
+		|       EXPRESSION_SIMP
+			HDOT
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HQUA HIDENTIFIER
+		;
+ARG_R_PT        :       /*EMPTY*/
+		|       HBEGPAR
+			ARGUMENT_LIST HENDPAR
+		;
+MBEE_ARG_R_PT   :       /*EMPTY*/
+		|       HBEGPAR
+			ARGUMENT_LIST HENDPAR
+		;
+ARGUMENT_LIST   :       EXPRESSION
+		|       EXPRESSION
+			HPAREXPSEPARATOR
+			ARGUMENT_LIST
+		;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:783"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "existing.at:783"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:783"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:783"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 78 shift/reduce, 10 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:783"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "442
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: diff -u /dev/null /dev/null || exit 77"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; diff -u /dev/null /dev/null || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: sed 's/^%define lr.type .*\$//' input.y > input-lalr.y"
+at_fn_check_prepare_dynamic "sed 's/^%define lr.type .*$//' input.y > input-lalr.y" "existing.at:783"
+( $at_check_trace; sed 's/^%define lr.type .*$//' input.y > input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all input-lalr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:783"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y" "existing.at:783"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:783"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:783: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:783"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: bison --report=all input-lalr.y"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; bison --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: diff -u input-lalr.output input.output \\
+           | sed -n '/^@@/,\$p' | sed 's/^ \$//'"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:783"
+( $at_check_trace; diff -u input-lalr.output input.output \
+           | sed -n '/^@@/,$p' | sed 's/^ $//'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: grep '^State.*conflicts:' input.output"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; grep '^State.*conflicts:' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 64 conflicts: 14 shift/reduce
+State 164 conflicts: 1 shift/reduce
+State 201 conflicts: 33 shift/reduce, 4 reduce/reduce
+State 206 conflicts: 1 shift/reduce
+State 240 conflicts: 1 shift/reduce
+State 335 conflicts: 9 shift/reduce, 2 reduce/reduce
+State 356 conflicts: 1 shift/reduce
+State 360 conflicts: 9 shift/reduce, 2 reduce/reduce
+State 427 conflicts: 9 shift/reduce, 2 reduce/reduce
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:783"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:783"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:783"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_263
+#AT_START_264
+at_fn_group_banner 264 'existing.at:783' \
+  "GNU Cim Grammar: Canonical LR(1)" "               " 16
+at_xfail=no
+(
+  $as_echo "264. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type canonical-lr
+
+%token
+	HACTIVATE HAFTER /*HAND*/ HARRAY HAT
+	HBEFORE HBEGIN HBOOLEAN
+	HCHARACTER HCLASS /*HCOMMENT*/ HCONC
+	HDELAY HDO
+	HELSE HEND HEQ /*HEQV*/ HEXTERNAL
+	HFOR
+	HGE HGO HGOTO HGT
+	HHIDDEN
+	HIF /*HIMP*/ HIN HINNER HINSPECT HINTEGER HIS
+	HLABEL HLE HLONG HLT
+	HNAME HNE HNEW HNONE /*HNOT*/ HNOTEXT
+	/*HOR*/ HOTHERWISE
+	HPRIOR HPROCEDURE HPROTECTED
+	HQUA
+	HREACTIVATE HREAL HREF
+	HSHORT HSTEP HSWITCH
+	HTEXT HTHEN HTHIS HTO
+	HUNTIL
+	HVALUE HVAR HVIRTUAL
+	HWHEN HWHILE
+
+	HASSIGNVALUE HASSIGNREF
+	/*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR
+	HBEGPAR HENDPAR
+	HEQR HNER
+	HADD HSUB HMUL HDIV HINTDIV HEXP
+	HDOTDOTDOT
+
+%token HIDENTIFIER
+%token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
+%token HREALKONST
+%token HTEXTKONST
+
+
+%right HASSIGN
+%left   HORELSE
+%left   HANDTHEN
+%left   HEQV
+%left   HIMP
+%left   HOR
+%left   HAND
+
+%left   HNOT
+
+%left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR
+
+%left	HCONC
+
+%left HTERMOPERATOR
+%left UNEAR
+%left HFACTOROPERATOR
+%left         HPRIMARYOPERATOR
+
+%left   HQUA
+
+%left   HDOT
+
+%start  MAIN_MODULE
+
+
+%%
+
+
+/* GRAMATIKK FOR PROGRAM MODULES */
+MAIN_MODULE     :       {}
+			MODULS
+		|	error HSTATEMENTSEPARATOR MBEE_DECLSTMS
+		;
+EXT_DECLARATION	:	HEXTERNAL
+			MBEE_TYPE
+			HPROCEDURE
+				{}
+			EXT_LIST
+		|
+			HEXTERNAL
+			HIDENTIFIER
+			HPROCEDURE
+				{}
+			HIDENTIFIER {}
+			EXTERNAL_KIND_ITEM
+		|	HEXTERNAL
+			HCLASS
+				{}
+			EXT_LIST
+
+		;
+EXTERNAL_KIND_ITEM:	EXT_IDENT
+			HOBJRELOPERATOR
+				{}
+			MBEE_TYPE HPROCEDURE
+			HIDENTIFIER
+				{}
+			HEADING EMPTY_BLOCK
+				{}
+/*		|
+			EXT_IDENT
+				{}
+			MBEE_REST_EXT_LIST
+		;
+MBEE_REST_EXT_LIST:	/* EMPTY
+		|	HPAREXPSEPARATOR EXT_KIND_LIST
+		;
+EXT_KIND_LIST	:	EXT_KIND_ITEM
+		|	EXT_KIND_LIST HPAREXPSEPARATOR EXT_KIND_ITEM
+		;
+EXT_KIND_ITEM	:	HIDENTIFIER
+			EXT_IDENT
+				{}*/
+		;
+EMPTY_BLOCK	:	/*EMPT*/
+		|	HBEGIN HEND
+		;
+EXT_LIST	:	EXT_ITEM
+		|	EXT_LIST HPAREXPSEPARATOR EXT_ITEM
+		;
+EXT_ITEM	:	HIDENTIFIER
+			EXT_IDENT
+		;
+EXT_IDENT	:	/* EMPTY */
+		|	HVALRELOPERATOR {}
+			HTEXTKONST
+		;
+/* GRAMATIKK FOR TYPER */
+NO_TYPE         :       /*EMPT*/
+		;
+MBEE_TYPE       :       NO_TYPE
+		|       TYPE
+		;
+TYPE            :       HREF HBEGPAR
+			HIDENTIFIER
+				{}
+			HENDPAR
+		|       HTEXT
+		|       HBOOLEAN
+		|       HCHARACTER
+		|       HSHORT HINTEGER
+		|       HINTEGER
+		|       HREAL
+		|       HLONG HREAL
+		;
+
+/* GRAMATIKK FOR DEL AV SETNINGER */
+MBEE_ELSE_PART  :       /*EMPT*/
+/*		|	HELSE
+			HIF
+			EXPRESSION
+			HTHEN   {}
+			BLOCK   {}
+			MBEE_ELSE_PART          {}*/
+		|       HELSE   {}
+			BLOCK
+		;
+FOR_LIST        :       FOR_LIST_ELEMENT
+		|       FOR_LIST_ELEMENT
+			HPAREXPSEPARATOR
+			FOR_LIST
+		;
+FOR_LIST_ELEMENT:       EXPRESSION
+			MBEE_F_L_EL_R_PT
+		;
+MBEE_F_L_EL_R_PT:       /*EMPT*/
+		|       HWHILE
+			EXPRESSION
+		|       HSTEP
+			EXPRESSION
+			HUNTIL
+			EXPRESSION
+		;
+GOTO            :       HGO
+			HTO
+		|       HGOTO
+		;
+CONN_STATE_R_PT :       WHEN_CLAUSE_LIST
+		|       HDO   {}
+			BLOCK
+		;
+WHEN_CLAUSE_LIST:       HWHEN
+			HIDENTIFIER
+			HDO    {}
+			BLOCK
+		|       WHEN_CLAUSE_LIST
+			HWHEN
+			HIDENTIFIER
+			HDO    {}
+			BLOCK
+		;
+MBEE_OTWI_CLAUS :       /*EMPT*/
+		|       HOTHERWISE {}
+
+			BLOCK
+		;
+ACTIVATOR	:	HACTIVATE
+		|	HREACTIVATE
+		;
+SCHEDULE	:	/*EMPT*/
+		|	ATDELAY EXPRESSION	{}
+			PRIOR
+		|	BEFOREAFTER		{}
+			EXPRESSION
+		;
+ATDELAY		:	HAT
+		|	HDELAY
+		;
+BEFOREAFTER	:	HBEFORE
+		|	HAFTER
+		;
+PRIOR		:	/*EMPT*/
+		|	HPRIOR
+		;
+/* GRAMATIKK FOR SETNINGER OG DEKLARASJONER */
+MODULSTATEMENT  :       HWHILE
+			EXPRESSION
+			HDO     {}
+			BLOCK
+		|       HIF
+			EXPRESSION
+			HTHEN   {}
+			BLOCK   {}
+			MBEE_ELSE_PART
+		|       HFOR
+			HIDENTIFIER
+			HASSIGN {}
+			FOR_LIST
+			HDO     {}
+			BLOCK
+		|       GOTO
+			EXPRESSION
+		|       HINSPECT
+			EXPRESSION              {}
+			CONN_STATE_R_PT
+				{}
+			MBEE_OTWI_CLAUS
+		|       HINNER
+		|       HIDENTIFIER
+			HLABELSEPARATOR
+				{}
+			DECLSTATEMENT
+		|       EXPRESSION_SIMP
+			HBEGIN
+				{}
+			IMPORT_SPEC_MODULE
+				{}
+			MBEE_DECLSTMS
+			HEND
+		|	EXPRESSION_SIMP HBEGIN error HSTATEMENTSEPARATOR
+			MBEE_DECLSTMS HEND
+		|	EXPRESSION_SIMP HBEGIN error HEND
+		|       EXPRESSION_SIMP
+		|	ACTIVATOR EXPRESSION SCHEDULE
+		|       HBEGIN
+				{}
+			MBEE_DECLSTMS
+			HEND
+		|       MBEE_TYPE HPROCEDURE
+			HIDENTIFIER
+				{}
+			HEADING BLOCK
+		|       HIDENTIFIER
+			HCLASS
+			NO_TYPE
+				{}
+			IMPORT_SPEC_MODULE
+			HIDENTIFIER
+				{}
+			HEADING
+			BLOCK
+		|       HCLASS
+			NO_TYPE
+			HIDENTIFIER
+				{}
+			HEADING
+			BLOCK
+		|       EXT_DECLARATION
+		|       /*EMPT*/
+		;
+IMPORT_SPEC_MODULE:
+		;
+DECLSTATEMENT	:	MODULSTATEMENT
+		|       TYPE
+			HIDENTIFIER
+			MBEE_CONSTANT
+			HPAREXPSEPARATOR
+				{}
+			IDENTIFIER_LISTC
+		|       TYPE
+			HIDENTIFIER
+			MBEE_CONSTANT
+		|       MBEE_TYPE
+			HARRAY  {}
+			ARR_SEGMENT_LIST
+		|       HSWITCH
+			HIDENTIFIER
+			HASSIGN {}
+			SWITCH_LIST
+		;
+BLOCK           :       DECLSTATEMENT
+		|       HBEGIN MBEE_DECLSTMS HEND
+		|	HBEGIN error HSTATEMENTSEPARATOR MBEE_DECLSTMS HEND
+		|	HBEGIN error HEND
+		;
+MBEE_DECLSTMS   :       MBEE_DECLSTMSU
+		;
+MBEE_DECLSTMSU  :       DECLSTATEMENT
+		|       MBEE_DECLSTMSU
+			HSTATEMENTSEPARATOR
+			DECLSTATEMENT
+		;
+MODULS		:	MODULSTATEMENT
+		|	MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
+		;
+/* GRAMATIKK FOR DEL AV DEKLARASJONER */
+ARR_SEGMENT_LIST:       ARR_SEGMENT
+		|       ARR_SEGMENT_LIST
+			HPAREXPSEPARATOR
+			ARR_SEGMENT
+		;
+ARR_SEGMENT	:       ARRAY_SEGMENT
+			HBEGPAR
+			BAUND_PAIR_LIST HENDPAR
+		;
+ARRAY_SEGMENT   :       ARRAY_SEGMENT_EL        {}
+
+		|       ARRAY_SEGMENT_EL
+			HPAREXPSEPARATOR
+			ARRAY_SEGMENT
+		;
+ARRAY_SEGMENT_EL:       HIDENTIFIER
+		;
+BAUND_PAIR_LIST :       BAUND_PAIR
+		|       BAUND_PAIR
+			HPAREXPSEPARATOR
+			BAUND_PAIR_LIST
+		;
+BAUND_PAIR      :       EXPRESSION
+			HLABELSEPARATOR
+			EXPRESSION
+		;
+SWITCH_LIST     :       EXPRESSION
+		|       EXPRESSION
+			HPAREXPSEPARATOR
+			SWITCH_LIST
+		;
+HEADING         :       MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
+			MBEE_MODE_PART  {}
+			MBEE_SPEC_PART  {}
+			MBEE_PROT_PART  {}
+			MBEE_VIRT_PART
+		;
+MBEE_FMAL_PAR_P :       /*EMPT*/
+		|       FMAL_PAR_PART
+		;
+FMAL_PAR_PART   :       HBEGPAR NO_TYPE
+			MBEE_LISTV HENDPAR
+		;
+MBEE_LISTV      :       /*EMPT*/
+		|       LISTV
+		;
+LISTV           :       HIDENTIFIER
+		|	FPP_CATEG HDOTDOTDOT
+		|       HIDENTIFIER     {}
+			HPAREXPSEPARATOR LISTV
+		|       FPP_SPEC
+		|       FPP_SPEC
+			HPAREXPSEPARATOR LISTV
+		;
+FPP_HEADING     :       HBEGPAR NO_TYPE
+			FPP_MBEE_LISTV HENDPAR
+		;
+FPP_MBEE_LISTV  :       /*EMPT*/
+		|       FPP_LISTV
+		;
+FPP_LISTV       :	FPP_CATEG HDOTDOTDOT
+		|       FPP_SPEC
+		|       FPP_SPEC
+			HPAREXPSEPARATOR LISTV
+		;
+FPP_SPEC        :       FPP_CATEG SPECIFIER HIDENTIFIER
+		|	FPP_CATEG FPP_PROC_DECL_IN_SPEC
+		;
+FPP_CATEG       :       HNAME HLABELSEPARATOR
+		|       HVALUE HLABELSEPARATOR
+		|       HVAR HLABELSEPARATOR
+		|       /*EMPT*/
+		;
+FPP_PROC_DECL_IN_SPEC:	MBEE_TYPE HPROCEDURE
+			HIDENTIFIER
+					{}
+			FPP_HEADING {} { /* Yes, two "final" actions. */ }
+		;
+IDENTIFIER_LISTV:       HIDENTIFIER
+		|	HDOTDOTDOT
+		|       HIDENTIFIER     {}
+			HPAREXPSEPARATOR IDENTIFIER_LISTV
+		;
+MBEE_MODE_PART  :       /*EMPT*/
+		|       MODE_PART
+		;
+MODE_PART       :       NAME_PART
+		|       VALUE_PART
+		|       VAR_PART
+		|       NAME_PART VALUE_PART
+		|       VALUE_PART NAME_PART
+		|       NAME_PART VAR_PART
+		|       VAR_PART NAME_PART
+		|       VALUE_PART VAR_PART
+		|       VAR_PART VALUE_PART
+		|       VAR_PART NAME_PART VALUE_PART
+		|       NAME_PART VAR_PART VALUE_PART
+		|       NAME_PART VALUE_PART VAR_PART
+		|       VAR_PART VALUE_PART NAME_PART
+		|       VALUE_PART VAR_PART NAME_PART
+		|       VALUE_PART NAME_PART VAR_PART
+		;
+NAME_PART       :       HNAME           {}
+			IDENTIFIER_LISTV
+			HSTATEMENTSEPARATOR
+		;
+VAR_PART        :       HVAR            {}
+			IDENTIFIER_LISTV
+			HSTATEMENTSEPARATOR
+		;
+VALUE_PART      :       HVALUE          {}
+			IDENTIFIER_LISTV HSTATEMENTSEPARATOR
+		;
+MBEE_SPEC_PART  :       /*EMPT*/
+		|       SPEC_PART
+		;
+SPEC_PART       :       ONE_SPEC
+		|       SPEC_PART ONE_SPEC
+		;
+ONE_SPEC	:	SPECIFIER IDENTIFIER_LIST HSTATEMENTSEPARATOR
+		|	NO_TYPE HPROCEDURE HIDENTIFIER HOBJRELOPERATOR
+			  {}
+			PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
+		|       FPP_PROC_DECL_IN_SPEC HSTATEMENTSEPARATOR
+		|       MBEE_TYPE HPROCEDURE HIDENTIFIER HSTATEMENTSEPARATOR
+		|       MBEE_TYPE HPROCEDURE HIDENTIFIER HPAREXPSEPARATOR
+			IDENTIFIER_LIST HSTATEMENTSEPARATOR
+		;
+SPECIFIER       :       TYPE
+		|       MBEE_TYPE
+			HARRAY
+		|       HLABEL
+		|       HSWITCH
+		;
+PROC_DECL_IN_SPEC:	MBEE_TYPE HPROCEDURE
+			HIDENTIFIER
+					{}
+			HEADING
+					{}
+			MBEE_BEGIN_END
+		;
+MBEE_BEGIN_END	:	/* EMPTY */
+		|	HBEGIN HEND
+		;
+MBEE_PROT_PART  :       /*EMPT*/
+		|       PROTECTION_PART
+		;
+PROTECTION_PART :       PROT_SPECIFIER IDENTIFIER_LIST
+			HSTATEMENTSEPARATOR
+		|       PROTECTION_PART  PROT_SPECIFIER
+			IDENTIFIER_LIST HSTATEMENTSEPARATOR
+		;
+PROT_SPECIFIER  :       HHIDDEN
+		|       HPROTECTED
+		|       HHIDDEN
+			HPROTECTED
+		|       HPROTECTED
+			HHIDDEN
+		;
+MBEE_VIRT_PART  :       /*EMPT*/
+		|       VIRTUAL_PART
+		;
+VIRTUAL_PART    :       HVIRTUAL
+			HLABELSEPARATOR
+			MBEE_SPEC_PART
+		;
+IDENTIFIER_LIST :       HIDENTIFIER
+		|       IDENTIFIER_LIST HPAREXPSEPARATOR
+			HIDENTIFIER
+		;
+IDENTIFIER_LISTC:       HIDENTIFIER
+			MBEE_CONSTANT
+		|       IDENTIFIER_LISTC HPAREXPSEPARATOR
+			HIDENTIFIER
+			MBEE_CONSTANT
+		;
+MBEE_CONSTANT	:	/* EMPTY */
+		|	HVALRELOPERATOR
+				{}
+			EXPRESSION
+		;
+
+/* GRAMATIKK FOR UTTRYKK */
+EXPRESSION      :       EXPRESSION_SIMP
+		|       HIF
+			EXPRESSION
+			HTHEN
+			EXPRESSION
+			HELSE
+			EXPRESSION
+		;
+EXPRESSION_SIMP :	EXPRESSION_SIMP
+			HASSIGN
+			EXPRESSION
+		|
+
+			EXPRESSION_SIMP
+			HCONC
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP HOR
+			HELSE
+			EXPRESSION_SIMP
+			%prec HORELSE
+		|       EXPRESSION_SIMP HAND
+			HTHEN
+			EXPRESSION_SIMP
+			%prec HANDTHEN
+		|       EXPRESSION_SIMP
+			HEQV EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HIMP EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HOR EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HAND EXPRESSION_SIMP
+		|       HNOT EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HVALRELOPERATOR
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HREFRELOPERATOR
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HOBJRELOPERATOR
+			EXPRESSION_SIMP
+		|       HTERMOPERATOR
+			EXPRESSION_SIMP %prec UNEAR
+		|       EXPRESSION_SIMP
+			HTERMOPERATOR
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HFACTOROPERATOR
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HPRIMARYOPERATOR
+			EXPRESSION_SIMP
+		|       HBEGPAR
+			EXPRESSION HENDPAR
+		|       HTEXTKONST
+		|       HCHARACTERKONST
+		|       HREALKONST
+		|       HINTEGERKONST
+		|       HBOOLEANKONST
+		|       HNONE
+		|       HIDENTIFIER
+				{}
+			MBEE_ARG_R_PT
+		|       HTHIS HIDENTIFIER
+		|       HNEW
+			HIDENTIFIER
+			ARG_R_PT
+		|       EXPRESSION_SIMP
+			HDOT
+			EXPRESSION_SIMP
+		|       EXPRESSION_SIMP
+			HQUA HIDENTIFIER
+		;
+ARG_R_PT        :       /*EMPTY*/
+		|       HBEGPAR
+			ARGUMENT_LIST HENDPAR
+		;
+MBEE_ARG_R_PT   :       /*EMPTY*/
+		|       HBEGPAR
+			ARGUMENT_LIST HENDPAR
+		;
+ARGUMENT_LIST   :       EXPRESSION
+		|       EXPRESSION
+			HPAREXPSEPARATOR
+			ARGUMENT_LIST
+		;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1876 shift/reduce, 144 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:783"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "10425
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+if test 32767 -lt `wc -l < input.c`; then
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic //'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic //'`
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:783"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:783"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:783"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:783: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:783"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:783"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_264
+#AT_START_265
+at_fn_group_banner 265 'existing.at:1403' \
+  "GNU pic (Groff 1.18.1) Grammar: LALR(1)" "        " 16
+at_xfail=no
+(
+  $as_echo "265. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type lalr
+%error-verbose
 
 %token LABEL
 %token VARIABLE
@@ -56046,7 +135858,7 @@
 %token RAND
 %token SRAND
 %token COPY
-%token THRU
+%token THROUGH
 %token TOP
 %token BOTTOM
 %token UPPER
@@ -56133,8 +135945,10 @@
 %right '!'
 %right '^'
 
+
 %%
 
+
 top:
 	optional_separator
 	| element_list
@@ -56173,12 +135987,12 @@
 		{}
 	  DELIMITED
 	| COPY TEXT
-	| COPY TEXT THRU
+	| COPY TEXT THROUGH
 		{}
 	  DELIMITED
 		{}
 	  until
-	| COPY THRU
+	| COPY THROUGH
 		{}
 	  DELIMITED
 		{}
@@ -56250,7 +136064,7 @@
 	| LABEL ':' optional_separator element
 	| LABEL ':' optional_separator position_not_place
 	| LABEL ':' optional_separator place
-	| '{}'
+	| '{' {} element_list '}'
 		{}
 	  optional_element
 	| placeless_element
@@ -56497,76 +136311,3452 @@
 	| expr OROR expr
 	| '!' expr
 	;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    VARIABLE, '=', LABEL, LEFT, DOT_X, 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
 _ATEOF
 
 
-# Pass plenty of options, to exercise plenty of code, even if we
-# don't actually check the output.  But SEGV is watching us, and
-# so might do dmalloc.
-$at_traceoff
-echo "existing.at:1523: bison --verbose --defines input.y"
-echo existing.at:1523 >$at_check_line_file
-( $at_traceon; bison --verbose --defines input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "existing.at:1523: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:1403"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:1403"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:1403"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "422
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: diff -u /dev/null /dev/null || exit 77"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; diff -u /dev/null /dev/null || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-  banner-15 ) # Banner 15. regression.at:21
-    cat <<\_ATEOF
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: sed 's/^%define lr.type .*\$//' input.y > input-lalr.y"
+at_fn_check_prepare_dynamic "sed 's/^%define lr.type .*$//' input.y > input-lalr.y" "existing.at:1403"
+( $at_check_trace; sed 's/^%define lr.type .*$//' input.y > input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-Regression tests.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all input-lalr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-_ATEOF
-    ;;
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  113 ) # 113. regression.at:28: Trivial grammars
-    at_setup_line='regression.at:28'
-    at_desc='Trivial grammars'
-    $at_quiet $ECHO_N "113: Trivial grammars                             $ECHO_C"
-    at_xfail=no
-    (
-      echo "113. regression.at:28: testing ..."
-      $at_traceon
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:1403"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:1403"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: bison --report=all input-lalr.y"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; bison --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: diff -u input-lalr.output input.output \\
+           | sed -n '/^@@/,\$p' | sed 's/^ \$//'"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; diff -u input-lalr.output input.output \
+           | sed -n '/^@@/,$p' | sed 's/^ $//'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:1403"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:1403"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:1403"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected LEFT
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_265
+#AT_START_266
+at_fn_group_banner 266 'existing.at:1403' \
+  "GNU pic (Groff 1.18.1) Grammar: IELR(1)" "        " 16
+at_xfail=no
+(
+  $as_echo "266. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type ielr
+%error-verbose
+
+%token LABEL
+%token VARIABLE
+%token NUMBER
+%token TEXT
+%token COMMAND_LINE
+%token DELIMITED
+%token ORDINAL
+%token TH
+%token LEFT_ARROW_HEAD
+%token RIGHT_ARROW_HEAD
+%token DOUBLE_ARROW_HEAD
+%token LAST
+%token UP
+%token DOWN
+%token LEFT
+%token RIGHT
+%token BOX
+%token CIRCLE
+%token ELLIPSE
+%token ARC
+%token LINE
+%token ARROW
+%token MOVE
+%token SPLINE
+%token HEIGHT
+%token RADIUS
+%token WIDTH
+%token DIAMETER
+%token FROM
+%token TO
+%token AT
+%token WITH
+%token BY
+%token THEN
+%token SOLID
+%token DOTTED
+%token DASHED
+%token CHOP
+%token SAME
+%token INVISIBLE
+%token LJUST
+%token RJUST
+%token ABOVE
+%token BELOW
+%token OF
+%token THE
+%token WAY
+%token BETWEEN
+%token AND
+%token HERE
+%token DOT_N
+%token DOT_E
+%token DOT_W
+%token DOT_S
+%token DOT_NE
+%token DOT_SE
+%token DOT_NW
+%token DOT_SW
+%token DOT_C
+%token DOT_START
+%token DOT_END
+%token DOT_X
+%token DOT_Y
+%token DOT_HT
+%token DOT_WID
+%token DOT_RAD
+%token SIN
+%token COS
+%token ATAN2
+%token LOG
+%token EXP
+%token SQRT
+%token K_MAX
+%token K_MIN
+%token INT
+%token RAND
+%token SRAND
+%token COPY
+%token THROUGH
+%token TOP
+%token BOTTOM
+%token UPPER
+%token LOWER
+%token SH
+%token PRINT
+%token CW
+%token CCW
+%token FOR
+%token DO
+%token IF
+%token ELSE
+%token ANDAND
+%token OROR
+%token NOTEQUAL
+%token EQUALEQUAL
+%token LESSEQUAL
+%token GREATEREQUAL
+%token LEFT_CORNER
+%token RIGHT_CORNER
+%token NORTH
+%token SOUTH
+%token EAST
+%token WEST
+%token CENTER
+%token END
+%token START
+%token RESET
+%token UNTIL
+%token PLOT
+%token THICKNESS
+%token FILL
+%token COLORED
+%token OUTLINED
+%token SHADED
+%token ALIGNED
+%token SPRINTF
+%token COMMAND
+
+%left '.'
+
+/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
+%left PLOT
+%left TEXT SPRINTF
+
+/* give text adjustments higher precedence than TEXT, so that
+box "foo" above ljust == box ("foo" above ljust)
+*/
+
+%left LJUST RJUST ABOVE BELOW
+
+%left LEFT RIGHT
+/* Give attributes that take an optional expression a higher
+precedence than left and right, so that eg `line chop left'
+parses properly. */
+%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
+%left LABEL
+
+%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
+%left ORDINAL HERE '`'
+
+%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */
+
+/* these need to be lower than '-' */
+%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
+
+/* these must have higher precedence than CHOP so that `label %prec CHOP'
+works */
+%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
+%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
+%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
+
+%left ','
+%left OROR
+%left ANDAND
+%left EQUALEQUAL NOTEQUAL
+%left '<' '>' LESSEQUAL GREATEREQUAL
+
+%left BETWEEN OF
+%left AND
+
+%left '+' '-'
+%left '*' '/' '%'
+%right '!'
+%right '^'
+
+
+%%
+
+
+top:
+	optional_separator
+	| element_list
+	;
+
+element_list:
+	optional_separator middle_element_list optional_separator
+	;
+
+middle_element_list:
+	element
+	| middle_element_list separator element
+	;
+
+optional_separator:
+	/* empty */
+	| separator
+	;
+
+separator:
+	';'
+	| separator ';'
+	;
+
+placeless_element:
+	VARIABLE '=' any_expr
+	| VARIABLE ':' '=' any_expr
+	| UP
+	| DOWN
+	| LEFT
+	| RIGHT
+	| COMMAND_LINE
+	| COMMAND print_args
+	| PRINT print_args
+	| SH
+		{}
+	  DELIMITED
+	| COPY TEXT
+	| COPY TEXT THROUGH
+		{}
+	  DELIMITED
+		{}
+	  until
+	| COPY THROUGH
+		{}
+	  DELIMITED
+		{}
+	  until
+	| FOR VARIABLE '=' expr TO expr optional_by DO
+		{}
+	  DELIMITED
+	| simple_if
+	| simple_if ELSE
+		{}
+	  DELIMITED
+	| reset_variables
+	| RESET
+	;
+
+reset_variables:
+	RESET VARIABLE
+	| reset_variables VARIABLE
+	| reset_variables ',' VARIABLE
+	;
+
+print_args:
+	print_arg
+	| print_args print_arg
+	;
+
+print_arg:
+	expr							%prec ','
+	| text
+	| position						%prec ','
+	;
+
+simple_if:
+	IF any_expr THEN
+		{}
+	DELIMITED
+	;
+
+until:
+	/* empty */
+	| UNTIL TEXT
+	;
+
+any_expr:
+	expr
+	| text_expr
+	;
+
+text_expr:
+	text EQUALEQUAL text
+	| text NOTEQUAL text
+	| text_expr ANDAND text_expr
+	| text_expr ANDAND expr
+	| expr ANDAND text_expr
+	| text_expr OROR text_expr
+	| text_expr OROR expr
+	| expr OROR text_expr
+	| '!' text_expr
+	;
+
+optional_by:
+	/* empty */
+	| BY expr
+	| BY '*' expr
+	;
+
+element:
+	object_spec
+	| LABEL ':' optional_separator element
+	| LABEL ':' optional_separator position_not_place
+	| LABEL ':' optional_separator place
+	| '{' {} element_list '}'
+		{}
+	  optional_element
+	| placeless_element
+	;
+
+optional_element:
+	/* empty */
+	| element
+	;
+
+object_spec:
+	BOX
+	| CIRCLE
+	| ELLIPSE
+	| ARC
+	| LINE
+	| ARROW
+	| MOVE
+	| SPLINE
+	| text							%prec TEXT
+	| PLOT expr
+	| PLOT expr text
+	| '['
+		{}
+	  element_list ']'
+	| object_spec HEIGHT expr
+	| object_spec RADIUS expr
+	| object_spec WIDTH expr
+	| object_spec DIAMETER expr
+	| object_spec expr					%prec HEIGHT
+	| object_spec UP
+	| object_spec UP expr
+	| object_spec DOWN
+	| object_spec DOWN expr
+	| object_spec RIGHT
+	| object_spec RIGHT expr
+	| object_spec LEFT
+	| object_spec LEFT expr
+	| object_spec FROM position
+	| object_spec TO position
+	| object_spec AT position
+	| object_spec WITH path
+	| object_spec WITH position				%prec ','
+	| object_spec BY expr_pair
+	| object_spec THEN
+	| object_spec SOLID
+	| object_spec DOTTED
+	| object_spec DOTTED expr
+	| object_spec DASHED
+	| object_spec DASHED expr
+	| object_spec FILL
+	| object_spec FILL expr
+	| object_spec SHADED text
+	| object_spec COLORED text
+	| object_spec OUTLINED text
+	| object_spec CHOP
+	| object_spec CHOP expr
+	| object_spec SAME
+	| object_spec INVISIBLE
+	| object_spec LEFT_ARROW_HEAD
+	| object_spec RIGHT_ARROW_HEAD
+	| object_spec DOUBLE_ARROW_HEAD
+	| object_spec CW
+	| object_spec CCW
+	| object_spec text					%prec TEXT
+	| object_spec LJUST
+	| object_spec RJUST
+	| object_spec ABOVE
+	| object_spec BELOW
+	| object_spec THICKNESS expr
+	| object_spec ALIGNED
+	;
+
+text:
+	TEXT
+	| SPRINTF '(' TEXT sprintf_args ')'
+	;
+
+sprintf_args:
+	/* empty */
+	| sprintf_args ',' expr
+	;
+
+position:
+	position_not_place
+	| place
+	;
+
+position_not_place:
+	expr_pair
+	| position '+' expr_pair
+	| position '-' expr_pair
+	| '(' position ',' position ')'
+	| expr between position AND position
+	| expr '<' position ',' position '>'
+	;
+
+between:
+	BETWEEN
+	| OF THE WAY BETWEEN
+	;
+
+expr_pair:
+	expr ',' expr
+	| '(' expr_pair ')'
+	;
+
+place:
+	/* line at A left == line (at A) left */
+	label							%prec CHOP
+	| label corner
+	| corner label
+	| corner OF label
+	| HERE
+	;
+
+label:
+	LABEL
+	| nth_primitive
+	| label '.' LABEL
+	;
+
+ordinal:
+	ORDINAL
+	| '`' any_expr TH
+	;
+
+optional_ordinal_last:
+	LAST
+	| ordinal LAST
+	;
+
+nth_primitive:
+	ordinal object_type
+	| optional_ordinal_last object_type
+	;
+
+object_type:
+	BOX
+	| CIRCLE
+	| ELLIPSE
+	| ARC
+	| LINE
+	| ARROW
+	| SPLINE
+	| '[' ']'
+	| TEXT
+	;
+
+label_path:
+	'.' LABEL
+	| label_path '.' LABEL
+	;
+
+relative_path:
+	corner							%prec CHOP
+	/* give this a lower precedence than LEFT and RIGHT so that
+	   [A: box] with .A left == [A: box] with (.A left) */
+	| label_path						%prec TEXT
+	| label_path corner
+	;
+
+path:
+	relative_path
+	| '(' relative_path ',' relative_path ')'
+		{}
+	/* The rest of these rules are a compatibility sop. */
+	| ORDINAL LAST object_type relative_path
+	| LAST object_type relative_path
+	| ORDINAL object_type relative_path
+	| LABEL relative_path
+	;
+
+corner:
+	DOT_N
+	| DOT_E
+	| DOT_W
+	| DOT_S
+	| DOT_NE
+	| DOT_SE
+	| DOT_NW
+	| DOT_SW
+	| DOT_C
+	| DOT_START
+	| DOT_END
+	| TOP
+	| BOTTOM
+	| LEFT
+	| RIGHT
+	| UPPER LEFT
+	| LOWER LEFT
+	| UPPER RIGHT
+	| LOWER RIGHT
+	| LEFT_CORNER
+	| RIGHT_CORNER
+	| UPPER LEFT_CORNER
+	| LOWER LEFT_CORNER
+	| UPPER RIGHT_CORNER
+	| LOWER RIGHT_CORNER
+	| NORTH
+	| SOUTH
+	| EAST
+	| WEST
+	| CENTER
+	| START
+	| END
+	;
+
+expr:
+	VARIABLE
+	| NUMBER
+	| place DOT_X
+	| place DOT_Y
+	| place DOT_HT
+	| place DOT_WID
+	| place DOT_RAD
+	| expr '+' expr
+	| expr '-' expr
+	| expr '*' expr
+	| expr '/' expr
+	| expr '%' expr
+	| expr '^' expr
+	| '-' expr						%prec '!'
+	| '(' any_expr ')'
+	| SIN '(' any_expr ')'
+	| COS '(' any_expr ')'
+	| ATAN2 '(' any_expr ',' any_expr ')'
+	| LOG '(' any_expr ')'
+	| EXP '(' any_expr ')'
+	| SQRT '(' any_expr ')'
+	| K_MAX '(' any_expr ',' any_expr ')'
+	| K_MIN '(' any_expr ',' any_expr ')'
+	| INT '(' any_expr ')'
+	| RAND '(' any_expr ')'
+	| RAND '(' ')'
+	| SRAND '(' any_expr ')'
+	| expr '<' expr
+	| expr LESSEQUAL expr
+	| expr '>' expr
+	| expr GREATEREQUAL expr
+	| expr EQUALEQUAL expr
+	| expr NOTEQUAL expr
+	| expr ANDAND expr
+	| expr OROR expr
+	| '!' expr
+	;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    VARIABLE, '=', LABEL, LEFT, DOT_X, 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:1403"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:1403"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:1403"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "427
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: diff -u /dev/null /dev/null || exit 77"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; diff -u /dev/null /dev/null || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: sed 's/^%define lr.type .*\$//' input.y > input-lalr.y"
+at_fn_check_prepare_dynamic "sed 's/^%define lr.type .*$//' input.y > input-lalr.y" "existing.at:1403"
+( $at_check_trace; sed 's/^%define lr.type .*$//' input.y > input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all input-lalr.y"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:1403"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "existing.at:1403"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: bison --report=all input-lalr.y"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; bison --report=all input-lalr.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: diff -u input-lalr.output input.output \\
+           | sed -n '/^@@/,\$p' | sed 's/^ \$//'"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; diff -u input-lalr.output input.output \
+           | sed -n '/^@@/,$p' | sed 's/^ $//'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "@@ -1223,7 +1223,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -1377,7 +1377,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -1854,7 +1854,7 @@
+
+     text                   go to state 162
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -2047,7 +2047,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -2571,7 +2571,7 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 191
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -2732,7 +2732,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -2875,7 +2875,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -3018,7 +3018,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -3256,7 +3256,7 @@
+
+ State 102
+
+-  146 place: label .  [\$end, LABEL, VARIABLE, NUMBER, TEXT, ORDINAL, LEFT_ARROW_HEAD, RIGHT_ARROW_HEAD, DOUBLE_ARROW_HEAD, LAST, UP, DOWN, LEFT, RIGHT, HEIGHT, RADIUS, WIDTH, DIAMETER, FROM, TO, AT, WITH, BY, THEN, SOLID, DOTTED, DASHED, CHOP, SAME, INVISIBLE, LJUST, RJUST, ABOVE, BELOW, AND, HERE, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, SIN, COS, ATAN2, LOG, EXP, SQRT, K_MAX, K_MIN, INT, RAND, SRAND, CW, CCW, THICKNESS, FILL, COLORED, OUTLINED, SHADED, ALIGNED, SPRINTF, '(', '\`', ',', '>', '+', '-', '!', ';', '}', ']', ')']
++  146 place: label .  [\$end, LABEL, VARIABLE, NUMBER, TEXT, ORDINAL, LEFT_ARROW_HEAD, RIGHT_ARROW_HEAD, DOUBLE_ARROW_HEAD, LAST, UP, DOWN, LEFT, RIGHT, HEIGHT, RADIUS, WIDTH, DIAMETER, FROM, TO, AT, WITH, BY, THEN, SOLID, DOTTED, DASHED, CHOP, SAME, INVISIBLE, LJUST, RJUST, ABOVE, BELOW, HERE, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, SIN, COS, ATAN2, LOG, EXP, SQRT, K_MAX, K_MIN, INT, RAND, SRAND, CW, CCW, THICKNESS, FILL, COLORED, OUTLINED, SHADED, ALIGNED, SPRINTF, '(', '\`', '+', '-', '!', ';', '}', ']']
+   147      | label . corner
+   153 label: label . '.' LABEL
+   180 corner: . DOT_N
+@@ -3645,7 +3645,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -3804,7 +3804,7 @@
+     text_expr              go to state 239
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -4481,7 +4481,7 @@
+     \$default  reduce using rule 89 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -4673,7 +4673,7 @@
+     \$default  reduce using rule 91 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -4867,7 +4867,7 @@
+     \$default  reduce using rule 95 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5065,7 +5065,7 @@
+     \$default  reduce using rule 93 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5260,7 +5260,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5403,7 +5403,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5546,7 +5546,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -5689,7 +5689,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -6475,7 +6475,7 @@
+
+     expr_pair              go to state 280
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -6633,7 +6633,7 @@
+     \$default  reduce using rule 105 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -6825,7 +6825,7 @@
+     \$default  reduce using rule 107 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -7017,7 +7017,7 @@
+     \$default  reduce using rule 114 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -7264,7 +7264,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -7408,7 +7408,7 @@
+     \$default  reduce using rule 109 (object_spec)
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -7819,12 +7819,12 @@
+     position_not_place     go to state 296
+     expr_pair              go to state 100
+     place                  go to state 297
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+     corner                 go to state 106
+-    expr                   go to state 266
++    expr                   go to state 424
+
+
+ State 165
+@@ -7987,7 +7987,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8172,7 +8172,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8333,7 +8333,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8494,7 +8494,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8655,7 +8655,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8816,7 +8816,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -8977,7 +8977,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9138,7 +9138,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9299,7 +9299,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9460,7 +9460,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9623,7 +9623,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9784,7 +9784,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -9921,7 +9921,7 @@
+
+     \$default  reduce using rule 47 (any_expr)
+
+-    between  go to state 237
++    between  go to state 425
+
+
+ State 193
+@@ -10152,7 +10152,7 @@
+
+     expr_pair              go to state 317
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -10298,7 +10298,7 @@
+
+     expr_pair              go to state 318
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -10622,7 +10622,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -10765,7 +10765,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -10908,7 +10908,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11051,7 +11051,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11194,7 +11194,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11337,7 +11337,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11480,7 +11480,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11637,7 +11637,7 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 100
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11780,7 +11780,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -11923,7 +11923,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12066,7 +12066,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12209,7 +12209,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12352,7 +12352,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12495,7 +12495,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12638,7 +12638,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -12794,12 +12794,12 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 100
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+     corner                 go to state 106
+-    expr                   go to state 266
++    expr                   go to state 424
+
+
+ State 238
+@@ -12937,7 +12937,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13160,7 +13160,7 @@
+     text_expr              go to state 342
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13319,7 +13319,7 @@
+     text_expr              go to state 344
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13502,7 +13502,7 @@
+     text_expr              go to state 348
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13661,7 +13661,7 @@
+     text_expr              go to state 350
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -13804,7 +13804,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -14747,7 +14747,7 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 191
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -15074,7 +15074,7 @@
+     text                   go to state 113
+     expr_pair              go to state 365
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -15693,12 +15693,12 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 100
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+     corner                 go to state 106
+-    expr                   go to state 266
++    expr                   go to state 424
+
+
+ State 315
+@@ -16124,7 +16124,7 @@
+
+     \$default  reduce using rule 239 (expr)
+
+-    between  go to state 237
++    between  go to state 425
+
+     Conflict between rule 239 and token OF resolved as shift ('<' < OF).
+     Conflict between rule 239 and token BETWEEN resolved as shift ('<' < BETWEEN).
+@@ -17234,7 +17234,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -17416,7 +17416,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -17577,7 +17577,7 @@
+     text_expr              go to state 112
+     text                   go to state 113
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -17772,12 +17772,12 @@
+     position_not_place     go to state 99
+     expr_pair              go to state 100
+     place                  go to state 101
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+     corner                 go to state 106
+-    expr                   go to state 266
++    expr                   go to state 424
+
+
+ State 383
+@@ -18071,7 +18071,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -18221,7 +18221,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -18830,7 +18830,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -18987,7 +18987,7 @@
+     '!'           shift, and go to state 94
+
+     place                  go to state 114
+-    label                  go to state 102
++    label                  go to state 423
+     ordinal                go to state 103
+     optional_ordinal_last  go to state 104
+     nth_primitive          go to state 105
+@@ -19089,3 +19089,440 @@
+    29 placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO \$@6 DELIMITED .
+
+     \$default  reduce using rule 29 (placeless_element)
++
++
++State 423
++
++  146 place: label .  [\$end, AND, DOT_X, DOT_Y, DOT_HT, DOT_WID, DOT_RAD, ',', '>', '+', '-', ';', '}', ']', ')']
++  147      | label . corner
++  153 label: label . '.' LABEL
++  180 corner: . DOT_N
++  181       | . DOT_E
++  182       | . DOT_W
++  183       | . DOT_S
++  184       | . DOT_NE
++  185       | . DOT_SE
++  186       | . DOT_NW
++  187       | . DOT_SW
++  188       | . DOT_C
++  189       | . DOT_START
++  190       | . DOT_END
++  191       | . TOP
++  192       | . BOTTOM
++  193       | . LEFT
++  194       | . RIGHT
++  195       | . UPPER LEFT
++  196       | . LOWER LEFT
++  197       | . UPPER RIGHT
++  198       | . LOWER RIGHT
++  199       | . LEFT_CORNER
++  200       | . RIGHT_CORNER
++  201       | . UPPER LEFT_CORNER
++  202       | . LOWER LEFT_CORNER
++  203       | . UPPER RIGHT_CORNER
++  204       | . LOWER RIGHT_CORNER
++  205       | . NORTH
++  206       | . SOUTH
++  207       | . EAST
++  208       | . WEST
++  209       | . CENTER
++  210       | . START
++  211       | . END
++
++    LEFT          shift, and go to state 53
++    RIGHT         shift, and go to state 54
++    DOT_N         shift, and go to state 56
++    DOT_E         shift, and go to state 57
++    DOT_W         shift, and go to state 58
++    DOT_S         shift, and go to state 59
++    DOT_NE        shift, and go to state 60
++    DOT_SE        shift, and go to state 61
++    DOT_NW        shift, and go to state 62
++    DOT_SW        shift, and go to state 63
++    DOT_C         shift, and go to state 64
++    DOT_START     shift, and go to state 65
++    DOT_END       shift, and go to state 66
++    TOP           shift, and go to state 78
++    BOTTOM        shift, and go to state 79
++    UPPER         shift, and go to state 80
++    LOWER         shift, and go to state 81
++    LEFT_CORNER   shift, and go to state 82
++    RIGHT_CORNER  shift, and go to state 83
++    NORTH         shift, and go to state 84
++    SOUTH         shift, and go to state 85
++    EAST          shift, and go to state 86
++    WEST          shift, and go to state 87
++    CENTER        shift, and go to state 88
++    END           shift, and go to state 89
++    START         shift, and go to state 90
++    '.'           shift, and go to state 204
++
++    \$default  reduce using rule 146 (place)
++
++    corner  go to state 205
++
++
++State 424
++
++  140 position_not_place: expr . between position AND position
++  141                   | expr . '<' position ',' position '>'
++  142 between: . BETWEEN
++  143        | . OF THE WAY BETWEEN
++  144 expr_pair: expr . ',' expr
++  219 expr: expr . '+' expr
++  220     | expr . '-' expr
++  221     | expr . '*' expr
++  222     | expr . '/' expr
++  223     | expr . '%' expr
++  224     | expr . '^' expr
++  239     | expr . '<' expr
++  240     | expr . LESSEQUAL expr
++  241     | expr . '>' expr
++  242     | expr . GREATEREQUAL expr
++  243     | expr . EQUALEQUAL expr
++  244     | expr . NOTEQUAL expr
++  245     | expr . ANDAND expr
++  246     | expr . OROR expr
++
++    OF            shift, and go to state 220
++    BETWEEN       shift, and go to state 221
++    ANDAND        shift, and go to state 222
++    OROR          shift, and go to state 223
++    NOTEQUAL      shift, and go to state 224
++    EQUALEQUAL    shift, and go to state 225
++    LESSEQUAL     shift, and go to state 226
++    GREATEREQUAL  shift, and go to state 227
++    ','           shift, and go to state 228
++    '<'           shift, and go to state 229
++    '>'           shift, and go to state 230
++    '+'           shift, and go to state 231
++    '-'           shift, and go to state 232
++    '*'           shift, and go to state 233
++    '/'           shift, and go to state 234
++    '%'           shift, and go to state 235
++    '^'           shift, and go to state 236
++
++    between  go to state 425
++
++
++State 425
++
++  134 position: . position_not_place
++  135         | . place
++  136 position_not_place: . expr_pair
++  137                   | . position '+' expr_pair
++  138                   | . position '-' expr_pair
++  139                   | . '(' position ',' position ')'
++  140                   | . expr between position AND position
++  140                   | expr between . position AND position
++  141                   | . expr '<' position ',' position '>'
++  144 expr_pair: . expr ',' expr
++  145          | . '(' expr_pair ')'
++  146 place: . label
++  147      | . label corner
++  148      | . corner label
++  149      | . corner OF label
++  150      | . HERE
++  151 label: . LABEL
++  152      | . nth_primitive
++  153      | . label '.' LABEL
++  154 ordinal: . ORDINAL
++  155        | . '\`' any_expr TH
++  156 optional_ordinal_last: . LAST
++  157                      | . ordinal LAST
++  158 nth_primitive: . ordinal object_type
++  159              | . optional_ordinal_last object_type
++  180 corner: . DOT_N
++  181       | . DOT_E
++  182       | . DOT_W
++  183       | . DOT_S
++  184       | . DOT_NE
++  185       | . DOT_SE
++  186       | . DOT_NW
++  187       | . DOT_SW
++  188       | . DOT_C
++  189       | . DOT_START
++  190       | . DOT_END
++  191       | . TOP
++  192       | . BOTTOM
++  193       | . LEFT
++  194       | . RIGHT
++  195       | . UPPER LEFT
++  196       | . LOWER LEFT
++  197       | . UPPER RIGHT
++  198       | . LOWER RIGHT
++  199       | . LEFT_CORNER
++  200       | . RIGHT_CORNER
++  201       | . UPPER LEFT_CORNER
++  202       | . LOWER LEFT_CORNER
++  203       | . UPPER RIGHT_CORNER
++  204       | . LOWER RIGHT_CORNER
++  205       | . NORTH
++  206       | . SOUTH
++  207       | . EAST
++  208       | . WEST
++  209       | . CENTER
++  210       | . START
++  211       | . END
++  212 expr: . VARIABLE
++  213     | . NUMBER
++  214     | . place DOT_X
++  215     | . place DOT_Y
++  216     | . place DOT_HT
++  217     | . place DOT_WID
++  218     | . place DOT_RAD
++  219     | . expr '+' expr
++  220     | . expr '-' expr
++  221     | . expr '*' expr
++  222     | . expr '/' expr
++  223     | . expr '%' expr
++  224     | . expr '^' expr
++  225     | . '-' expr
++  226     | . '(' any_expr ')'
++  227     | . SIN '(' any_expr ')'
++  228     | . COS '(' any_expr ')'
++  229     | . ATAN2 '(' any_expr ',' any_expr ')'
++  230     | . LOG '(' any_expr ')'
++  231     | . EXP '(' any_expr ')'
++  232     | . SQRT '(' any_expr ')'
++  233     | . K_MAX '(' any_expr ',' any_expr ')'
++  234     | . K_MIN '(' any_expr ',' any_expr ')'
++  235     | . INT '(' any_expr ')'
++  236     | . RAND '(' any_expr ')'
++  237     | . RAND '(' ')'
++  238     | . SRAND '(' any_expr ')'
++  239     | . expr '<' expr
++  240     | . expr LESSEQUAL expr
++  241     | . expr '>' expr
++  242     | . expr GREATEREQUAL expr
++  243     | . expr EQUALEQUAL expr
++  244     | . expr NOTEQUAL expr
++  245     | . expr ANDAND expr
++  246     | . expr OROR expr
++  247     | . '!' expr
++
++    LABEL         shift, and go to state 48
++    VARIABLE      shift, and go to state 49
++    NUMBER        shift, and go to state 50
++    ORDINAL       shift, and go to state 51
++    LAST          shift, and go to state 52
++    LEFT          shift, and go to state 53
++    RIGHT         shift, and go to state 54
++    HERE          shift, and go to state 55
++    DOT_N         shift, and go to state 56
++    DOT_E         shift, and go to state 57
++    DOT_W         shift, and go to state 58
++    DOT_S         shift, and go to state 59
++    DOT_NE        shift, and go to state 60
++    DOT_SE        shift, and go to state 61
++    DOT_NW        shift, and go to state 62
++    DOT_SW        shift, and go to state 63
++    DOT_C         shift, and go to state 64
++    DOT_START     shift, and go to state 65
++    DOT_END       shift, and go to state 66
++    SIN           shift, and go to state 67
++    COS           shift, and go to state 68
++    ATAN2         shift, and go to state 69
++    LOG           shift, and go to state 70
++    EXP           shift, and go to state 71
++    SQRT          shift, and go to state 72
++    K_MAX         shift, and go to state 73
++    K_MIN         shift, and go to state 74
++    INT           shift, and go to state 75
++    RAND          shift, and go to state 76
++    SRAND         shift, and go to state 77
++    TOP           shift, and go to state 78
++    BOTTOM        shift, and go to state 79
++    UPPER         shift, and go to state 80
++    LOWER         shift, and go to state 81
++    LEFT_CORNER   shift, and go to state 82
++    RIGHT_CORNER  shift, and go to state 83
++    NORTH         shift, and go to state 84
++    SOUTH         shift, and go to state 85
++    EAST          shift, and go to state 86
++    WEST          shift, and go to state 87
++    CENTER        shift, and go to state 88
++    END           shift, and go to state 89
++    START         shift, and go to state 90
++    '('           shift, and go to state 91
++    '\`'           shift, and go to state 92
++    '-'           shift, and go to state 93
++    '!'           shift, and go to state 94
++
++    position               go to state 426
++    position_not_place     go to state 99
++    expr_pair              go to state 100
++    place                  go to state 101
++    label                  go to state 423
++    ordinal                go to state 103
++    optional_ordinal_last  go to state 104
++    nth_primitive          go to state 105
++    corner                 go to state 106
++    expr                   go to state 424
++
++
++State 426
++
++  137 position_not_place: position . '+' expr_pair
++  138                   | position . '-' expr_pair
++  140                   | expr between position . AND position
++
++    AND  shift, and go to state 427
++    '+'  shift, and go to state 197
++    '-'  shift, and go to state 198
++
++
++State 427
++
++  134 position: . position_not_place
++  135         | . place
++  136 position_not_place: . expr_pair
++  137                   | . position '+' expr_pair
++  138                   | . position '-' expr_pair
++  139                   | . '(' position ',' position ')'
++  140                   | . expr between position AND position
++  140                   | expr between position AND . position
++  141                   | . expr '<' position ',' position '>'
++  144 expr_pair: . expr ',' expr
++  145          | . '(' expr_pair ')'
++  146 place: . label
++  147      | . label corner
++  148      | . corner label
++  149      | . corner OF label
++  150      | . HERE
++  151 label: . LABEL
++  152      | . nth_primitive
++  153      | . label '.' LABEL
++  154 ordinal: . ORDINAL
++  155        | . '\`' any_expr TH
++  156 optional_ordinal_last: . LAST
++  157                      | . ordinal LAST
++  158 nth_primitive: . ordinal object_type
++  159              | . optional_ordinal_last object_type
++  180 corner: . DOT_N
++  181       | . DOT_E
++  182       | . DOT_W
++  183       | . DOT_S
++  184       | . DOT_NE
++  185       | . DOT_SE
++  186       | . DOT_NW
++  187       | . DOT_SW
++  188       | . DOT_C
++  189       | . DOT_START
++  190       | . DOT_END
++  191       | . TOP
++  192       | . BOTTOM
++  193       | . LEFT
++  194       | . RIGHT
++  195       | . UPPER LEFT
++  196       | . LOWER LEFT
++  197       | . UPPER RIGHT
++  198       | . LOWER RIGHT
++  199       | . LEFT_CORNER
++  200       | . RIGHT_CORNER
++  201       | . UPPER LEFT_CORNER
++  202       | . LOWER LEFT_CORNER
++  203       | . UPPER RIGHT_CORNER
++  204       | . LOWER RIGHT_CORNER
++  205       | . NORTH
++  206       | . SOUTH
++  207       | . EAST
++  208       | . WEST
++  209       | . CENTER
++  210       | . START
++  211       | . END
++  212 expr: . VARIABLE
++  213     | . NUMBER
++  214     | . place DOT_X
++  215     | . place DOT_Y
++  216     | . place DOT_HT
++  217     | . place DOT_WID
++  218     | . place DOT_RAD
++  219     | . expr '+' expr
++  220     | . expr '-' expr
++  221     | . expr '*' expr
++  222     | . expr '/' expr
++  223     | . expr '%' expr
++  224     | . expr '^' expr
++  225     | . '-' expr
++  226     | . '(' any_expr ')'
++  227     | . SIN '(' any_expr ')'
++  228     | . COS '(' any_expr ')'
++  229     | . ATAN2 '(' any_expr ',' any_expr ')'
++  230     | . LOG '(' any_expr ')'
++  231     | . EXP '(' any_expr ')'
++  232     | . SQRT '(' any_expr ')'
++  233     | . K_MAX '(' any_expr ',' any_expr ')'
++  234     | . K_MIN '(' any_expr ',' any_expr ')'
++  235     | . INT '(' any_expr ')'
++  236     | . RAND '(' any_expr ')'
++  237     | . RAND '(' ')'
++  238     | . SRAND '(' any_expr ')'
++  239     | . expr '<' expr
++  240     | . expr LESSEQUAL expr
++  241     | . expr '>' expr
++  242     | . expr GREATEREQUAL expr
++  243     | . expr EQUALEQUAL expr
++  244     | . expr NOTEQUAL expr
++  245     | . expr ANDAND expr
++  246     | . expr OROR expr
++  247     | . '!' expr
++
++    LABEL         shift, and go to state 48
++    VARIABLE      shift, and go to state 49
++    NUMBER        shift, and go to state 50
++    ORDINAL       shift, and go to state 51
++    LAST          shift, and go to state 52
++    LEFT          shift, and go to state 53
++    RIGHT         shift, and go to state 54
++    HERE          shift, and go to state 55
++    DOT_N         shift, and go to state 56
++    DOT_E         shift, and go to state 57
++    DOT_W         shift, and go to state 58
++    DOT_S         shift, and go to state 59
++    DOT_NE        shift, and go to state 60
++    DOT_SE        shift, and go to state 61
++    DOT_NW        shift, and go to state 62
++    DOT_SW        shift, and go to state 63
++    DOT_C         shift, and go to state 64
++    DOT_START     shift, and go to state 65
++    DOT_END       shift, and go to state 66
++    SIN           shift, and go to state 67
++    COS           shift, and go to state 68
++    ATAN2         shift, and go to state 69
++    LOG           shift, and go to state 70
++    EXP           shift, and go to state 71
++    SQRT          shift, and go to state 72
++    K_MAX         shift, and go to state 73
++    K_MIN         shift, and go to state 74
++    INT           shift, and go to state 75
++    RAND          shift, and go to state 76
++    SRAND         shift, and go to state 77
++    TOP           shift, and go to state 78
++    BOTTOM        shift, and go to state 79
++    UPPER         shift, and go to state 80
++    LOWER         shift, and go to state 81
++    LEFT_CORNER   shift, and go to state 82
++    RIGHT_CORNER  shift, and go to state 83
++    NORTH         shift, and go to state 84
++    SOUTH         shift, and go to state 85
++    EAST          shift, and go to state 86
++    WEST          shift, and go to state 87
++    CENTER        shift, and go to state 88
++    END           shift, and go to state 89
++    START         shift, and go to state 90
++    '('           shift, and go to state 91
++    '\`'           shift, and go to state 92
++    '-'           shift, and go to state 93
++    '!'           shift, and go to state 94
++
++    position               go to state 402
++    position_not_place     go to state 99
++    expr_pair              go to state 100
++    place                  go to state 101
++    label                  go to state 423
++    ordinal                go to state 103
++    optional_ordinal_last  go to state 104
++    nth_primitive          go to state 105
++    corner                 go to state 106
++    expr                   go to state 424
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:1403"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:1403"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:1403"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_266
+#AT_START_267
+at_fn_group_banner 267 'existing.at:1403' \
+  "GNU pic (Groff 1.18.1) Grammar: Canonical LR(1)" "" 16
+at_xfail=no
+(
+  $as_echo "267. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
+
+%define lr.type canonical-lr
+%error-verbose
+
+%token LABEL
+%token VARIABLE
+%token NUMBER
+%token TEXT
+%token COMMAND_LINE
+%token DELIMITED
+%token ORDINAL
+%token TH
+%token LEFT_ARROW_HEAD
+%token RIGHT_ARROW_HEAD
+%token DOUBLE_ARROW_HEAD
+%token LAST
+%token UP
+%token DOWN
+%token LEFT
+%token RIGHT
+%token BOX
+%token CIRCLE
+%token ELLIPSE
+%token ARC
+%token LINE
+%token ARROW
+%token MOVE
+%token SPLINE
+%token HEIGHT
+%token RADIUS
+%token WIDTH
+%token DIAMETER
+%token FROM
+%token TO
+%token AT
+%token WITH
+%token BY
+%token THEN
+%token SOLID
+%token DOTTED
+%token DASHED
+%token CHOP
+%token SAME
+%token INVISIBLE
+%token LJUST
+%token RJUST
+%token ABOVE
+%token BELOW
+%token OF
+%token THE
+%token WAY
+%token BETWEEN
+%token AND
+%token HERE
+%token DOT_N
+%token DOT_E
+%token DOT_W
+%token DOT_S
+%token DOT_NE
+%token DOT_SE
+%token DOT_NW
+%token DOT_SW
+%token DOT_C
+%token DOT_START
+%token DOT_END
+%token DOT_X
+%token DOT_Y
+%token DOT_HT
+%token DOT_WID
+%token DOT_RAD
+%token SIN
+%token COS
+%token ATAN2
+%token LOG
+%token EXP
+%token SQRT
+%token K_MAX
+%token K_MIN
+%token INT
+%token RAND
+%token SRAND
+%token COPY
+%token THROUGH
+%token TOP
+%token BOTTOM
+%token UPPER
+%token LOWER
+%token SH
+%token PRINT
+%token CW
+%token CCW
+%token FOR
+%token DO
+%token IF
+%token ELSE
+%token ANDAND
+%token OROR
+%token NOTEQUAL
+%token EQUALEQUAL
+%token LESSEQUAL
+%token GREATEREQUAL
+%token LEFT_CORNER
+%token RIGHT_CORNER
+%token NORTH
+%token SOUTH
+%token EAST
+%token WEST
+%token CENTER
+%token END
+%token START
+%token RESET
+%token UNTIL
+%token PLOT
+%token THICKNESS
+%token FILL
+%token COLORED
+%token OUTLINED
+%token SHADED
+%token ALIGNED
+%token SPRINTF
+%token COMMAND
+
+%left '.'
+
+/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
+%left PLOT
+%left TEXT SPRINTF
+
+/* give text adjustments higher precedence than TEXT, so that
+box "foo" above ljust == box ("foo" above ljust)
+*/
+
+%left LJUST RJUST ABOVE BELOW
+
+%left LEFT RIGHT
+/* Give attributes that take an optional expression a higher
+precedence than left and right, so that eg `line chop left'
+parses properly. */
+%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
+%left LABEL
+
+%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
+%left ORDINAL HERE '`'
+
+%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */
+
+/* these need to be lower than '-' */
+%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
+
+/* these must have higher precedence than CHOP so that `label %prec CHOP'
+works */
+%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
+%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
+%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
+
+%left ','
+%left OROR
+%left ANDAND
+%left EQUALEQUAL NOTEQUAL
+%left '<' '>' LESSEQUAL GREATEREQUAL
+
+%left BETWEEN OF
+%left AND
+
+%left '+' '-'
+%left '*' '/' '%'
+%right '!'
+%right '^'
+
+
+%%
+
+
+top:
+	optional_separator
+	| element_list
+	;
+
+element_list:
+	optional_separator middle_element_list optional_separator
+	;
+
+middle_element_list:
+	element
+	| middle_element_list separator element
+	;
+
+optional_separator:
+	/* empty */
+	| separator
+	;
+
+separator:
+	';'
+	| separator ';'
+	;
+
+placeless_element:
+	VARIABLE '=' any_expr
+	| VARIABLE ':' '=' any_expr
+	| UP
+	| DOWN
+	| LEFT
+	| RIGHT
+	| COMMAND_LINE
+	| COMMAND print_args
+	| PRINT print_args
+	| SH
+		{}
+	  DELIMITED
+	| COPY TEXT
+	| COPY TEXT THROUGH
+		{}
+	  DELIMITED
+		{}
+	  until
+	| COPY THROUGH
+		{}
+	  DELIMITED
+		{}
+	  until
+	| FOR VARIABLE '=' expr TO expr optional_by DO
+		{}
+	  DELIMITED
+	| simple_if
+	| simple_if ELSE
+		{}
+	  DELIMITED
+	| reset_variables
+	| RESET
+	;
+
+reset_variables:
+	RESET VARIABLE
+	| reset_variables VARIABLE
+	| reset_variables ',' VARIABLE
+	;
+
+print_args:
+	print_arg
+	| print_args print_arg
+	;
+
+print_arg:
+	expr							%prec ','
+	| text
+	| position						%prec ','
+	;
+
+simple_if:
+	IF any_expr THEN
+		{}
+	DELIMITED
+	;
+
+until:
+	/* empty */
+	| UNTIL TEXT
+	;
+
+any_expr:
+	expr
+	| text_expr
+	;
+
+text_expr:
+	text EQUALEQUAL text
+	| text NOTEQUAL text
+	| text_expr ANDAND text_expr
+	| text_expr ANDAND expr
+	| expr ANDAND text_expr
+	| text_expr OROR text_expr
+	| text_expr OROR expr
+	| expr OROR text_expr
+	| '!' text_expr
+	;
+
+optional_by:
+	/* empty */
+	| BY expr
+	| BY '*' expr
+	;
+
+element:
+	object_spec
+	| LABEL ':' optional_separator element
+	| LABEL ':' optional_separator position_not_place
+	| LABEL ':' optional_separator place
+	| '{' {} element_list '}'
+		{}
+	  optional_element
+	| placeless_element
+	;
+
+optional_element:
+	/* empty */
+	| element
+	;
+
+object_spec:
+	BOX
+	| CIRCLE
+	| ELLIPSE
+	| ARC
+	| LINE
+	| ARROW
+	| MOVE
+	| SPLINE
+	| text							%prec TEXT
+	| PLOT expr
+	| PLOT expr text
+	| '['
+		{}
+	  element_list ']'
+	| object_spec HEIGHT expr
+	| object_spec RADIUS expr
+	| object_spec WIDTH expr
+	| object_spec DIAMETER expr
+	| object_spec expr					%prec HEIGHT
+	| object_spec UP
+	| object_spec UP expr
+	| object_spec DOWN
+	| object_spec DOWN expr
+	| object_spec RIGHT
+	| object_spec RIGHT expr
+	| object_spec LEFT
+	| object_spec LEFT expr
+	| object_spec FROM position
+	| object_spec TO position
+	| object_spec AT position
+	| object_spec WITH path
+	| object_spec WITH position				%prec ','
+	| object_spec BY expr_pair
+	| object_spec THEN
+	| object_spec SOLID
+	| object_spec DOTTED
+	| object_spec DOTTED expr
+	| object_spec DASHED
+	| object_spec DASHED expr
+	| object_spec FILL
+	| object_spec FILL expr
+	| object_spec SHADED text
+	| object_spec COLORED text
+	| object_spec OUTLINED text
+	| object_spec CHOP
+	| object_spec CHOP expr
+	| object_spec SAME
+	| object_spec INVISIBLE
+	| object_spec LEFT_ARROW_HEAD
+	| object_spec RIGHT_ARROW_HEAD
+	| object_spec DOUBLE_ARROW_HEAD
+	| object_spec CW
+	| object_spec CCW
+	| object_spec text					%prec TEXT
+	| object_spec LJUST
+	| object_spec RJUST
+	| object_spec ABOVE
+	| object_spec BELOW
+	| object_spec THICKNESS expr
+	| object_spec ALIGNED
+	;
+
+text:
+	TEXT
+	| SPRINTF '(' TEXT sprintf_args ')'
+	;
+
+sprintf_args:
+	/* empty */
+	| sprintf_args ',' expr
+	;
+
+position:
+	position_not_place
+	| place
+	;
+
+position_not_place:
+	expr_pair
+	| position '+' expr_pair
+	| position '-' expr_pair
+	| '(' position ',' position ')'
+	| expr between position AND position
+	| expr '<' position ',' position '>'
+	;
+
+between:
+	BETWEEN
+	| OF THE WAY BETWEEN
+	;
+
+expr_pair:
+	expr ',' expr
+	| '(' expr_pair ')'
+	;
+
+place:
+	/* line at A left == line (at A) left */
+	label							%prec CHOP
+	| label corner
+	| corner label
+	| corner OF label
+	| HERE
+	;
+
+label:
+	LABEL
+	| nth_primitive
+	| label '.' LABEL
+	;
+
+ordinal:
+	ORDINAL
+	| '`' any_expr TH
+	;
+
+optional_ordinal_last:
+	LAST
+	| ordinal LAST
+	;
+
+nth_primitive:
+	ordinal object_type
+	| optional_ordinal_last object_type
+	;
+
+object_type:
+	BOX
+	| CIRCLE
+	| ELLIPSE
+	| ARC
+	| LINE
+	| ARROW
+	| SPLINE
+	| '[' ']'
+	| TEXT
+	;
+
+label_path:
+	'.' LABEL
+	| label_path '.' LABEL
+	;
+
+relative_path:
+	corner							%prec CHOP
+	/* give this a lower precedence than LEFT and RIGHT so that
+	   [A: box] with .A left == [A: box] with (.A left) */
+	| label_path						%prec TEXT
+	| label_path corner
+	;
+
+path:
+	relative_path
+	| '(' relative_path ',' relative_path ')'
+		{}
+	/* The rest of these rules are a compatibility sop. */
+	| ORDINAL LAST object_type relative_path
+	| LAST object_type relative_path
+	| ORDINAL object_type relative_path
+	| LABEL relative_path
+	;
+
+corner:
+	DOT_N
+	| DOT_E
+	| DOT_W
+	| DOT_S
+	| DOT_NE
+	| DOT_SE
+	| DOT_NW
+	| DOT_SW
+	| DOT_C
+	| DOT_START
+	| DOT_END
+	| TOP
+	| BOTTOM
+	| LEFT
+	| RIGHT
+	| UPPER LEFT
+	| LOWER LEFT
+	| UPPER RIGHT
+	| LOWER RIGHT
+	| LEFT_CORNER
+	| RIGHT_CORNER
+	| UPPER LEFT_CORNER
+	| LOWER LEFT_CORNER
+	| UPPER RIGHT_CORNER
+	| LOWER RIGHT_CORNER
+	| NORTH
+	| SOUTH
+	| EAST
+	| WEST
+	| CENTER
+	| START
+	| END
+	;
+
+expr:
+	VARIABLE
+	| NUMBER
+	| place DOT_X
+	| place DOT_Y
+	| place DOT_HT
+	| place DOT_WID
+	| place DOT_RAD
+	| expr '+' expr
+	| expr '-' expr
+	| expr '*' expr
+	| expr '/' expr
+	| expr '%' expr
+	| expr '^' expr
+	| '-' expr						%prec '!'
+	| '(' any_expr ')'
+	| SIN '(' any_expr ')'
+	| COS '(' any_expr ')'
+	| ATAN2 '(' any_expr ',' any_expr ')'
+	| LOG '(' any_expr ')'
+	| EXP '(' any_expr ')'
+	| SQRT '(' any_expr ')'
+	| K_MAX '(' any_expr ',' any_expr ')'
+	| K_MIN '(' any_expr ',' any_expr ')'
+	| INT '(' any_expr ')'
+	| RAND '(' any_expr ')'
+	| RAND '(' ')'
+	| SRAND '(' any_expr ')'
+	| expr '<' expr
+	| expr LESSEQUAL expr
+	| expr '>' expr
+	| expr GREATEREQUAL expr
+	| expr EQUALEQUAL expr
+	| expr NOTEQUAL expr
+	| expr ANDAND expr
+	| expr OROR expr
+	| '!' expr
+	;
+
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+static int
+yylex (void)
+{
+  static int const input[] = {
+    VARIABLE, '=', LABEL, LEFT, DOT_X, 0
+  };
+  static int const *inputp = input;
+  return *inputp++;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+# In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
+# expanding macros, so it corrupts some special characters in the
+# macros.  To avoid this, expand now and pass it the result with proper
+# string quotation.  Assume args 7 through 12 expand to properly quoted
+# strings.
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: bison --report=all --defines -o input.c input.y"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; bison --report=all --defines -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "existing.at:1403"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/existing.at:1403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror" "existing.at:1403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --defines -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: sed -n 's/^State //p' input.output | tail -1"
+at_fn_check_prepare_notrace 'a shell pipeline' "existing.at:1403"
+( $at_check_trace; sed -n 's/^State //p' input.output | tail -1
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "4833
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+# Canonical LR generates very large tables, resulting in very long
+# files with #line directives that may overflow what the standards
+# (C90 and C++98) guarantee: 32767.  In that case, GCC's -pedantic
+# will issue an error.
+#
+# There is no "" around `wc` since some indent the result.
+if test 32767 -lt `wc -l < input.c`; then
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic //'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic //'`
+fi
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "existing.at:1403"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "existing.at:1403"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "existing.at:1403"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/existing.at:1403: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "existing.at:1403"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/existing.at:1403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_267
+#AT_START_268
+at_fn_group_banner 268 'regression.at:25' \
+  "Trivial grammars" "                               " 17
+at_xfail=no
+(
+  $as_echo "268. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %{
-void yyerror (char const *);
+void yyerror ( const char *msg);
 int yylex (void);
 #define YYSTYPE int *
 %}
@@ -56580,114 +139770,328 @@
 
 
 
-$at_traceoff
-echo "regression.at:44: bison -o input.c input.y"
-echo regression.at:44 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:44: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:43: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:43"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:43"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:43: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:43"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:43"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:43: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:43"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:43"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:43: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:43"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:43"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:43: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:43"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:43"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "regression.at:45: \$CC \$CFLAGS \$CPPFLAGS -o input.o -c input.c"
-echo regression.at:45 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o input.o -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:45: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/regression.at:44: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:44"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/regression.at:44: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o input.c " "regression.at:44"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:45: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:45"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:45"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:45: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o -DYYDEBUG -c input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o -DYYDEBUG -c input.c " "regression.at:45"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o -DYYDEBUG -c input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:45"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_268
+#AT_START_269
+at_fn_group_banner 269 'regression.at:55' \
+  "YYSTYPE typedef" "                                " 17
+at_xfail=no
+(
+  $as_echo "269. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%{
+void yyerror ( const char *msg);
+int yylex (void);
+typedef union { char const *val; } YYSTYPE;
+%}
+
+%type <val> program
+
+%%
+
+program: { $$ = ""; };
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:73: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:73"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:73: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:73"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:73: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:73"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:73: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:73"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:46: \$CC \$CFLAGS \$CPPFLAGS -o input.o -DYYDEBUG -c input.c"
-echo regression.at:46 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o input.o -DYYDEBUG -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:46: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:73: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:73"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/regression.at:74: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:74"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:74"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  114 ) # 114. regression.at:57: Early token definitions
-    at_setup_line='regression.at:57'
-    at_desc='Early token definitions'
-    $at_quiet $ECHO_N "114: Early token definitions                      $ECHO_C"
-    at_xfail=no
-    (
-      echo "114. regression.at:57: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:74: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o input.c " "regression.at:74"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:74"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_269
+#AT_START_270
+at_fn_group_banner 270 'regression.at:85' \
+  "Early token definitions with --yacc" "            " 17
+at_xfail=no
+(
+  $as_echo "270. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # Found in GCJ: they expect the tokens to be defined before the user
 # prologue, so that they can use the token definitions in it.
 
+
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %{
-void yyerror (const char *s);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 
@@ -56708,75 +140112,305 @@
 
 
 
-$at_traceoff
-echo "regression.at:83: bison -o input.c input.y"
-echo regression.at:83 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:83: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:113: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -y -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:113"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -y -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:113"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:113: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -y -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -y -o input.c input.y" "regression.at:113"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -y -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:113"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:113: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:113"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:113"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:113: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:113"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:113"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:84: \$CC \$CFLAGS \$CPPFLAGS -o input.o -c input.c"
-echo regression.at:84 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o input.o -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:84: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:113: bison -y -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:113"
+( $at_check_trace; bison -y -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:113"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/regression.at:114: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:114"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:114"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  115 ) # 115. regression.at:95: Braces parsing
-    at_setup_line='regression.at:95'
-    at_desc='Braces parsing'
-    $at_quiet $ECHO_N "115: Braces parsing                               $ECHO_C"
-    at_xfail=no
-    (
-      echo "115. regression.at:95: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:114: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o input.c " "regression.at:114"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:114"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_270
+#AT_START_271
+at_fn_group_banner 271 'regression.at:125' \
+  "Early token definitions without --yacc" "         " 17
+at_xfail=no
+(
+  $as_echo "271. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Found in GCJ: they expect the tokens to be defined before the user
+# prologue, so that they can use the token definitions in it.
 
 
 cat >input.y <<'_ATEOF'
-/* Bison used to swallow the character after `}'. */
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%{
+#include <stdio.h>
+void yyerror ( const char *msg);
+int yylex (void);
+void print_my_token (void);
+%}
+
+%union
+{
+  int val;
+};
+%{
+void
+print_my_token (void)
+{
+  enum yytokentype my_token = MY_TOKEN;
+  printf ("%d\n", my_token);
+}
+%}
+%token MY_TOKEN
+%%
+exp: MY_TOKEN;
+%%
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:158: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:158"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:158: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:158"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:158: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:158"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:158: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:158"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:158: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:158"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:158"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:159: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:159"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:159"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:159: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o input.c " "regression.at:159"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:159"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_271
+#AT_START_272
+at_fn_group_banner 272 'regression.at:170' \
+  "Braces parsing" "                                 " 17
+at_xfail=no
+(
+  $as_echo "272. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+/* Bison used to swallow the character after '}'. */
 
 %%
 exp: { tests = {{{{{{{{{{}}}}}}}}}}; };
@@ -56784,76 +140418,125 @@
 _ATEOF
 
 
-$at_traceoff
-echo "regression.at:105: bison -v -o input.c input.y"
-echo regression.at:105 >$at_check_line_file
-( $at_traceon; bison -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:105: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:182: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:182"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:182: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y" "regression.at:182"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:182: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:182"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:182: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:182"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:182: bison -v -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:182"
+( $at_check_trace; bison -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "regression.at:107: grep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c"
-echo regression.at:107 >$at_check_line_file
-( $at_traceon; grep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:107: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:184: grep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c"
+at_fn_check_prepare_trace "regression.at:184"
+( $at_check_trace; grep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:184"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_272
+#AT_START_273
+at_fn_group_banner 273 'regression.at:194' \
+  "Duplicate string" "                               " 17
+at_xfail=no
+(
+  $as_echo "273. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-  116 ) # 116. regression.at:117: Duplicate string
-    at_setup_line='regression.at:117'
-    at_desc='Duplicate string'
-    $at_quiet $ECHO_N "116: Duplicate string                             $ECHO_C"
-    at_xfail=no
-    (
-      echo "116. regression.at:117: testing ..."
-      $at_traceon
 
 
 cat >input.y <<'_ATEOF'
-/* `Bison -v' used to dump core when two tokens are defined with the same
+/* 'Bison -v' used to dump core when two tokens are defined with the same
    string, as LE and GE below. */
 
 %token NUM
@@ -56866,48 +140549,227 @@
 _ATEOF
 
 
-$at_traceoff
-echo "regression.at:134: bison -v -o input.c input.y"
-echo regression.at:134 >$at_check_line_file
-( $at_traceon; bison -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:6.8-14: warning: symbol \`\"<=\"' used more than once as a literal string
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:134: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:211"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y" "regression.at:211"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:211"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:211"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:211: bison -v -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:211"
+( $at_check_trace; bison -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:6.8-14: warning: symbol \"<=\" used more than once as a literal string
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v -o input.c input.y -Werror" "regression.at:211"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -v -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:6.8-14: warning: symbol "<=" used more than once as a literal string
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:211"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v -o input.c input.y --warnings=error" "regression.at:211"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -v -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v -o input.c input.y -Wnone -Werror" "regression.at:211"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -v -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:211: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -v -o input.c input.y --warnings=none -Werror" "regression.at:211"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -v -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:211"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
 
-$at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_273
+#AT_START_274
+at_fn_group_banner 274 'regression.at:222' \
+  "Rule Line Numbers" "                              " 17
+at_xfail=no
+(
+  $as_echo "274. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  117 ) # 117. regression.at:143: Rule Line Numbers
-    at_setup_line='regression.at:143'
-    at_desc='Rule Line Numbers'
-    $at_quiet $ECHO_N "117: Rule Line Numbers                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "117. regression.at:143: testing ..."
-      $at_traceon
-
 
 
 
@@ -56942,53 +140804,114 @@
 _ATEOF
 
 
-$at_traceoff
-echo "regression.at:177: bison -o input.c -v input.y"
-echo regression.at:177 >$at_check_line_file
-( $at_traceon; bison -o input.c -v input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:177: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:258: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c -v input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:258"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c -v input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:258: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -v input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -v input.y" "regression.at:258"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -v input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:258: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:258"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:258: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:258"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:258: bison -o input.c -v input.y"
+at_fn_check_prepare_trace "regression.at:258"
+( $at_check_trace; bison -o input.c -v input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 # Check the contents of the report.
-$at_traceoff
-echo "regression.at:276: cat input.output"
-echo regression.at:276 >$at_check_line_file
-( $at_traceon; cat input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Grammar
+{ set +x
+$as_echo "$at_srcdir/regression.at:261: cat input.output"
+at_fn_check_prepare_trace "regression.at:261"
+( $at_check_trace; cat input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Grammar
 
     0 \$accept: expr \$end
 
-    1 @1: /* empty */
+    1 \$@1: /* empty */
 
-    2 expr: 'a' @1 'b'
+    2 expr: 'a' \$@1 'b'
 
-    3 @2: /* empty */
+    3 \$@2: /* empty */
 
-    4 expr: @2 'c'
+    4 expr: \$@2 'c'
 
 
 Terminals, with rules where they appear
@@ -57006,104 +140929,92 @@
     on left: 0
 expr (7)
     on left: 2 4, on right: 0
-@1 (8)
+\$@1 (8)
     on left: 1, on right: 2
-@2 (9)
+\$@2 (9)
     on left: 3, on right: 4
 
 
-state 0
+State 0
 
     0 \$accept: . expr \$end
 
     'a'  shift, and go to state 1
 
-    \$default  reduce using rule 3 (@2)
+    \$default  reduce using rule 3 (\$@2)
 
     expr  go to state 2
-    @2    go to state 3
+    \$@2   go to state 3
 
 
-state 1
+State 1
 
-    2 expr: 'a' . @1 'b'
+    2 expr: 'a' . \$@1 'b'
 
-    \$default  reduce using rule 1 (@1)
+    \$default  reduce using rule 1 (\$@1)
 
-    @1  go to state 4
+    \$@1  go to state 4
 
 
-state 2
+State 2
 
     0 \$accept: expr . \$end
 
     \$end  shift, and go to state 5
 
 
-state 3
+State 3
 
-    4 expr: @2 . 'c'
+    4 expr: \$@2 . 'c'
 
     'c'  shift, and go to state 6
 
 
-state 4
+State 4
 
-    2 expr: 'a' @1 . 'b'
+    2 expr: 'a' \$@1 . 'b'
 
     'b'  shift, and go to state 7
 
 
-state 5
+State 5
 
     0 \$accept: expr \$end .
 
     \$default  accept
 
 
-state 6
+State 6
 
-    4 expr: @2 'c' .
+    4 expr: \$@2 'c' .
 
     \$default  reduce using rule 4 (expr)
 
 
-state 7
+State 7
 
-    2 expr: 'a' @1 'b' .
+    2 expr: 'a' \$@1 'b' .
 
     \$default  reduce using rule 2 (expr)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:276: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:261"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  118 ) # 118. regression.at:287: Mixing %token styles
-    at_setup_line='regression.at:287'
-    at_desc='Mixing %token styles'
-    $at_quiet $ECHO_N "118: Mixing %token styles                         $ECHO_C"
-    at_xfail=no
-    (
-      echo "118. regression.at:287: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_274
+#AT_START_275
+at_fn_group_banner 275 'regression.at:368' \
+  "Mixing %token styles" "                           " 17
+at_xfail=no
+(
+  $as_echo "275. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 # Taken from the documentation.
@@ -57117,46 +141028,105 @@
 _ATEOF
 
 
-$at_traceoff
-echo "regression.at:299: bison -v -o input.c input.y"
-echo regression.at:299 >$at_check_line_file
-( $at_traceon; bison -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:299: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:380: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:380"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:380"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:380: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y" "regression.at:380"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:380"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:380: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:380"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:380"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:380: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:380"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:380"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:380: bison -v -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:380"
+( $at_check_trace; bison -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:380"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  119 ) # 119. regression.at:310: Invalid inputs
-    at_setup_line='regression.at:310'
-    at_desc='Invalid inputs'
-    $at_quiet $ECHO_N "119: Invalid inputs                               $ECHO_C"
-    at_xfail=no
-    (
-      echo "119. regression.at:310: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_275
+#AT_START_276
+at_fn_group_banner 276 'regression.at:391' \
+  "Invalid inputs" "                                 " 17
+at_xfail=no
+(
+  $as_echo "276. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -57170,54 +141140,44 @@
 _ATEOF
 
 
-$at_traceoff
-echo "regression.at:331: bison input.y"
-echo regression.at:331 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:2.1: invalid character: \`?'
-input.y:3.14: invalid character: \`}'
-input.y:4.1: invalid character: \`%'
-input.y:4.2: invalid character: \`&'
-input.y:5.1-17: invalid directive: \`%a-does-not-exist'
-input.y:6.1: invalid character: \`%'
-input.y:6.2: invalid character: \`-'
-input.y:7.1-8.0: missing \`%}' at end of file
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:331: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:403: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "regression.at:403"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:2.1: error: invalid character: '?'
+input.y:3.14: error: invalid character: '}'
+input.y:4.1: error: invalid character: '%'
+input.y:4.2: error: invalid character: '&'
+input.y:5.1-17: error: invalid directive: '%a-does-not-exist'
+input.y:6.1: error: invalid character: '%'
+input.y:6.2: error: invalid character: '-'
+input.y:7.1-8.0: error: missing '%}' at end of file
+input.y:7.1-8.0: error: syntax error, unexpected %{...%}
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  120 ) # 120. regression.at:336: Invalid inputs with {}
-    at_setup_line='regression.at:336'
-    at_desc='Invalid inputs with {}'
-    $at_quiet $ECHO_N "120: Invalid inputs with {}                       $ECHO_C"
-    at_xfail=no
-    (
-      echo "120. regression.at:336: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_276
+#AT_START_277
+at_fn_group_banner 277 'regression.at:418' \
+  "Invalid inputs with {}" "                         " 17
+at_xfail=no
+(
+  $as_echo "277. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >input.y <<'_ATEOF'
@@ -57231,67 +141191,54 @@
 _ATEOF
 
 
-$at_traceoff
-echo "regression.at:352: bison input.y"
-echo regression.at:352 >$at_check_line_file
-( $at_traceon; bison input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "input.y:3.1: missing \`{' in \"%destructor {...}\"
-input.y:4.1: missing \`{' in \"%initial-action {...}\"
-input.y:4.1: syntax error, unexpected %initial-action {...}, expecting string or identifier
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:352: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:430: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "regression.at:430"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:3.1-15: error: syntax error, unexpected %initial-action, expecting {...}
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  121 ) # 121. regression.at:363: Token definitions
-    at_setup_line='regression.at:363'
-    at_desc='Token definitions'
-    $at_quiet $ECHO_N "121: Token definitions                            $ECHO_C"
-    at_xfail=no
-    (
-      echo "121. regression.at:363: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_277
+#AT_START_278
+at_fn_group_banner 278 'regression.at:443' \
+  "Token definitions" "                              " 17
+at_xfail=no
+(
+  $as_echo "278. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
-# Bison managed, when fed with `%token 'f' "f"' to #define 'f'!
+
+# Bison managed, when fed with '%token 'f' "f"' to #define 'f'!
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %{
+#include <stdlib.h>
 #include <stdio.h>
-void yyerror (const char *s);
-int yylex (void);
+static void yyerror ( const char *msg);
+static int yylex (void);
 %}
 %error-verbose
 %token MYEOF 0 "end of file"
@@ -57300,19 +141247,29 @@
 %token C_TOKEN 'c'
 %token 'd' D_TOKEN
 %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+%token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
 %%
 exp: "a" "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!";
 %%
-void
-yyerror (char const *s)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
-  fprintf (stderr, "%s\n", s);
+  fprintf (stderr, "%s\n", msg);
 }
-
-int
-yylex (void)
+#include <assert.h>
+static
+int yylex (void)
 {
-  return SPECIAL;
+  static int const input[] = { SPECIAL };
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
 }
 
 int
@@ -57324,191 +141281,659 @@
 
 
 
-$at_traceoff
-echo "regression.at:401: bison -o input.c input.y"
-echo regression.at:401 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:401: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+# Checking the warning message guarantees that the trigraph "??!" isn't
+# unnecessarily escaped here even though it would need to be if encoded in a
+# C-string literal.  Also notice that unnecessary escaping, such as "\?", from
+# the user specification is eliminated.
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:480"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:480"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:480"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:480"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:480: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:480"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:22.8-14: warning: symbol SPECIAL redeclared
+input.y:22.8-63: warning: symbol \"\\\\'?\\\"\\a\\b\\f\\n\\r\\t\\v\\001\\201\\001\\201??!\" used more than once as a literal string
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
 
-$at_traceoff
-echo "regression.at:402: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
-echo regression.at:402 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:402: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror" "regression.at:480"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-cat >experr <<'_ATEOF'
-syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\201\001\201?\?!", expecting a
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:22.8-14: warning: symbol SPECIAL redeclared
+input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string
 _ATEOF
 
-$at_traceoff
-echo "regression.at:406: \$PREPARSER ./input"
-echo regression.at:406 >$at_check_line_file
-( $at_traceon; $PREPARSER ./input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff experr $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:406: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
 
-  echo 1 > $at_status_file
-  exit 1
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:480"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error" "regression.at:480"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror" "regression.at:480"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:480: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror" "regression.at:480"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:480"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
 fi
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -fcaret -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:484"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y" "regression.at:484"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:484"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  122 ) # 122. regression.at:416: Characters Escapes
-    at_setup_line='regression.at:416'
-    at_desc='Characters Escapes'
-    $at_quiet $ECHO_N "122: Characters Escapes                           $ECHO_C"
-    at_xfail=no
-    (
-      echo "122. regression.at:416: testing ..."
-      $at_traceon
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:484"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:484: bison -fcaret -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:484"
+( $at_check_trace; bison -fcaret -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:22.8-14: warning: symbol SPECIAL redeclared
+ %token SPECIAL \"\\\\\\'\\?\\\"\\a\\b\\f\\n\\r\\t\\v\\001\\201\\x001\\x000081??!\"
+        ^^^^^^^
+input.y:22.8-63: warning: symbol \"\\\\'?\\\"\\a\\b\\f\\n\\r\\t\\v\\001\\201\\001\\201??!\" used more than once as a literal string
+ %token SPECIAL \"\\\\\\'\\?\\\"\\a\\b\\f\\n\\r\\t\\v\\001\\201\\x001\\x000081??!\"
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror" "regression.at:484"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:22.8-14: warning: symbol SPECIAL redeclared
+ %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+        ^^^^^^^
+input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string
+ %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:484"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error" "regression.at:484"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror" "regression.at:484"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:484: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror" "regression.at:484"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -fcaret -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:492: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:492"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:492: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:492"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Checking the error message here guarantees that yytname, which does contain
+# C-string literals, does have the trigraph escaped correctly.  Thus, the
+# symbol name reported by the parser is exactly the same as that reported by
+# Bison itself.
+cat >experr <<'_ATEOF'
+syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!", expecting a
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:501:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:501"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:501"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:501: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:501"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:501"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_278
+#AT_START_279
+at_fn_group_banner 279 'regression.at:511' \
+  "Characters Escapes" "                             " 17
+at_xfail=no
+(
+  $as_echo "279. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >input.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %{
-void yyerror (const char *s);
+void yyerror ( const char *msg);
 int yylex (void);
 %}
 %%
 exp:
   '\'' "\'"
 | '\"' "\""
-| '"'  "'"
+| '"'  "'" /* Pacify font-lock-mode: ". */
 ;
 _ATEOF
 
 
-# Pacify font-lock-mode: "
 
-$at_traceoff
-echo "regression.at:432: bison -o input.c input.y"
-echo regression.at:432 >$at_check_line_file
-( $at_traceon; bison -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:432: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:529: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:529"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:529: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:529"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:529: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:529"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:529: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:529"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:529: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:529"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:529"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "regression.at:433: \$CC \$CFLAGS \$CPPFLAGS -o input.o -c input.c"
-echo regression.at:433 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS -o input.o -c input.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:433: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/regression.at:530: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:530"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:530: \$CC \$CFLAGS \$CPPFLAGS -c -o input.o input.c "
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS -c -o input.o input.c " "regression.at:530"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS -c -o input.o input.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:530"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  123 ) # 123. regression.at:447: Web2c Report
-    at_setup_line='regression.at:447'
-    at_desc='Web2c Report'
-    $at_quiet $ECHO_N "123: Web2c Report                                 $ECHO_C"
-    at_xfail=no
-    (
-      echo "123. regression.at:447: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_279
+#AT_START_280
+at_fn_group_banner 280 'regression.at:544' \
+  "Web2c Report" "                                   " 17
+at_xfail=no
+(
+  $as_echo "280. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -57535,41 +141960,101 @@
 _ATEOF
 
 
-$at_traceoff
-echo "regression.at:472: bison -v input.y"
-echo regression.at:472 >$at_check_line_file
-( $at_traceon; bison -v input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:472: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:569: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -v input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:569"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -v input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:569"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:569: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v input.y" "regression.at:569"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:569"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:569: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:569"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:569"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:569: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:569"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:569"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:569: bison -v input.y"
+at_fn_check_prepare_trace "regression.at:569"
+( $at_check_trace; bison -v input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:569"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "regression.at:597: cat input.output"
-echo regression.at:597 >$at_check_line_file
-( $at_traceon; cat input.output ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Grammar
+{ set +x
+$as_echo "$at_srcdir/regression.at:570: cat input.output"
+at_fn_check_prepare_trace "regression.at:570"
+( $at_check_trace; cat input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Grammar
 
     0 \$accept: CONST_DEC_PART \$end
 
@@ -57578,9 +142063,9 @@
     2 CONST_DEC_LIST: CONST_DEC
     3               | CONST_DEC_LIST CONST_DEC
 
-    4 @1: /* empty */
+    4 \$@1: /* empty */
 
-    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok ';'
+    5 CONST_DEC: \$@1 undef_id_tok '=' const_id_tok ';'
 
 
 Terminals, with rules where they appear
@@ -57603,126 +142088,114 @@
     on left: 2 3, on right: 1 3
 CONST_DEC (10)
     on left: 5, on right: 2 3
-@1 (11)
+\$@1 (11)
     on left: 4, on right: 5
 
 
-state 0
+State 0
 
     0 \$accept: . CONST_DEC_PART \$end
 
-    \$default  reduce using rule 4 (@1)
+    \$default  reduce using rule 4 (\$@1)
 
     CONST_DEC_PART  go to state 1
     CONST_DEC_LIST  go to state 2
     CONST_DEC       go to state 3
-    @1              go to state 4
+    \$@1             go to state 4
 
 
-state 1
+State 1
 
     0 \$accept: CONST_DEC_PART . \$end
 
     \$end  shift, and go to state 5
 
 
-state 2
+State 2
 
     1 CONST_DEC_PART: CONST_DEC_LIST .
     3 CONST_DEC_LIST: CONST_DEC_LIST . CONST_DEC
 
-    undef_id_tok  reduce using rule 4 (@1)
+    undef_id_tok  reduce using rule 4 (\$@1)
     \$default      reduce using rule 1 (CONST_DEC_PART)
 
     CONST_DEC  go to state 6
-    @1         go to state 4
+    \$@1        go to state 4
 
 
-state 3
+State 3
 
     2 CONST_DEC_LIST: CONST_DEC .
 
     \$default  reduce using rule 2 (CONST_DEC_LIST)
 
 
-state 4
+State 4
 
-    5 CONST_DEC: @1 . undef_id_tok '=' const_id_tok ';'
+    5 CONST_DEC: \$@1 . undef_id_tok '=' const_id_tok ';'
 
     undef_id_tok  shift, and go to state 7
 
 
-state 5
+State 5
 
     0 \$accept: CONST_DEC_PART \$end .
 
     \$default  accept
 
 
-state 6
+State 6
 
     3 CONST_DEC_LIST: CONST_DEC_LIST CONST_DEC .
 
     \$default  reduce using rule 3 (CONST_DEC_LIST)
 
 
-state 7
+State 7
 
-    5 CONST_DEC: @1 undef_id_tok . '=' const_id_tok ';'
+    5 CONST_DEC: \$@1 undef_id_tok . '=' const_id_tok ';'
 
     '='  shift, and go to state 8
 
 
-state 8
+State 8
 
-    5 CONST_DEC: @1 undef_id_tok '=' . const_id_tok ';'
+    5 CONST_DEC: \$@1 undef_id_tok '=' . const_id_tok ';'
 
     const_id_tok  shift, and go to state 9
 
 
-state 9
+State 9
 
-    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok . ';'
+    5 CONST_DEC: \$@1 undef_id_tok '=' const_id_tok . ';'
 
     ';'  shift, and go to state 10
 
 
-state 10
+State 10
 
-    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok ';' .
+    5 CONST_DEC: \$@1 undef_id_tok '=' const_id_tok ';' .
 
     \$default  reduce using rule 5 (CONST_DEC)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:597: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:570"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  124 ) # 124. regression.at:624: Web2c Actions
-    at_setup_line='regression.at:624'
-    at_desc='Web2c Actions'
-    $at_quiet $ECHO_N "124: Web2c Actions                                $ECHO_C"
-    at_xfail=no
-    (
-      echo "124. regression.at:624: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_280
+#AT_START_281
+at_fn_group_banner 281 'regression.at:721' \
+  "Web2c Actions" "                                  " 17
+at_xfail=no
+(
+  $as_echo "281. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
@@ -57737,46 +142210,105 @@
 _ATEOF
 
 
-$at_traceoff
-echo "regression.at:637: bison -v -o input.c input.y"
-echo regression.at:637 >$at_check_line_file
-( $at_traceon; bison -v -o input.c input.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:637: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:734: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -v -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:734"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:734"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:734: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y" "regression.at:734"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:734"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:734: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:734"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:734"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:734: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:734"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:734"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:734: bison -v -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:734"
+( $at_check_trace; bison -v -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:734"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-# Check only the tables.  We don't use --no-parser, because it is
-# still to be implemented in the experimental branch of Bison.
+
+# Check only the tables.
 sed -n 's/  *$//;/^static const.*\[\] =/,/^}/p' input.c >tables.c
 
-$at_traceoff
-echo "regression.at:735: cat tables.c"
-echo regression.at:735 >$at_check_line_file
-( $at_traceon; cat tables.c ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "static const yytype_uint8 yytranslate[] =
+{ set +x
+$as_echo "$at_srcdir/regression.at:739: cat tables.c"
+at_fn_check_prepare_trace "regression.at:739"
+( $at_check_trace; cat tables.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -57822,7 +142354,7 @@
 static const char *const yytname[] =
 {
   \"\$end\", \"error\", \"\$undefined\", \"\\\"if\\\"\", \"\\\"const\\\"\", \"\\\"then\\\"\",
-  \"\\\"else\\\"\", \"\$accept\", \"statement\", \"struct_stat\", \"if\", \"else\", 0
+  \"\\\"else\\\"\", \"\$accept\", \"statement\", \"struct_stat\", \"if\", \"else\", YY_NULL
 };
 static const yytype_uint16 yytoknum[] =
 {
@@ -57867,85 +142399,41 @@
        0,     3,     8,     9,    10,     4,     0,     6,    11,     5,
        8,     8
 };
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:735: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:739"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  125 ) # 125. regression.at:866: Dancer
-    at_setup_line='regression.at:866'
-    at_desc='Dancer '
-    $at_quiet $ECHO_N "125: Dancer                                       $ECHO_C"
-    at_xfail=no
-    (
-      echo "125. regression.at:866: testing ..."
-      $at_traceon
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_281
+#AT_START_282
+at_fn_group_banner 282 'regression.at:936' \
+  "Dancer " "                                        " 17
+at_xfail=no
+(
+  $as_echo "282. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >dancer.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
-static int yylex (void);
-#include <stdio.h>
-static void yyerror (const char *);
-%}
+%code provides
+{
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
 
 %token ARROW INVALID NUMBER STRING DATA
 %defines
@@ -57990,23 +142478,27 @@
    | INVALID
    ;
 %%
-static void
-yyerror (const char *s)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
-  fprintf (stderr, "%s\n", s);
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = ":";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
 }
 
-static int
-yylex (void)
-{
-  static int toknum = 0;
-  static int tokens[] =
-    {
-      ':', -1
-    };
-
-  return tokens[toknum++];
-}
 
 int
 main (void)
@@ -58017,190 +142509,177 @@
 
 
 
-$at_traceoff
-echo "regression.at:866: bison -o dancer.c dancer.y"
-echo regression.at:866 >$at_check_line_file
-( $at_traceon; bison -o dancer.c dancer.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:866: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:936: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o dancer.c dancer.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:936"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o dancer.c dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:936: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.c dancer.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.c dancer.y" "regression.at:936"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.c dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:936: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:936"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:936: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:936"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:936: bison -o dancer.c dancer.y"
+at_fn_check_prepare_trace "regression.at:936"
+( $at_check_trace; bison -o dancer.c dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "regression.at:866: bison -o dancer.c dancer.y"
-echo regression.at:866 >$at_check_line_file
-( $at_traceon; bison -o dancer.c dancer.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:866: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/regression.at:936: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:936"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:936: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o dancer dancer.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.c $LIBS" "regression.at:936"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "regression.at:866: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o dancer dancer.c \$LIBS"
-echo regression.at:866 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:866: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/regression.at:936:  \$PREPARSER ./dancer"
+at_fn_check_prepare_dynamic " $PREPARSER ./dancer" "regression.at:936"
+( $at_check_trace;  $PREPARSER ./dancer
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:866: \$PREPARSER ./dancer"
-echo regression.at:866 >$at_check_line_file
-( $at_traceon; $PREPARSER ./dancer ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected ':'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:866: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:936: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:936"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected ':'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:936"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  126 ) # 126. regression.at:867: Dancer %glr-parser
-    at_setup_line='regression.at:867'
-    at_desc='Dancer %glr-parser'
-    $at_quiet $ECHO_N "126: Dancer %glr-parser                           $ECHO_C"
-    at_xfail=no
-    (
-      echo "126. regression.at:867: testing ..."
-      $at_traceon
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_282
+#AT_START_283
+at_fn_group_banner 283 'regression.at:937' \
+  "Dancer %glr-parser" "                             " 17
+at_xfail=no
+(
+  $as_echo "283. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >dancer.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
-static int yylex (void);
-#include <stdio.h>
-static void yyerror (const char *);
-%}
+%code provides
+{
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
 %glr-parser
 %token ARROW INVALID NUMBER STRING DATA
 %defines
@@ -58245,23 +142724,27 @@
    | INVALID
    ;
 %%
-static void
-yyerror (const char *s)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
-  fprintf (stderr, "%s\n", s);
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = ":";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
 }
 
-static int
-yylex (void)
-{
-  static int toknum = 0;
-  static int tokens[] =
-    {
-      ':', -1
-    };
-
-  return tokens[toknum++];
-}
 
 int
 main (void)
@@ -58272,189 +142755,177 @@
 
 
 
-$at_traceoff
-echo "regression.at:867: bison -o dancer.c dancer.y"
-echo regression.at:867 >$at_check_line_file
-( $at_traceon; bison -o dancer.c dancer.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:867: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:937: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o dancer.c dancer.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:937"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o dancer.c dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:937: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.c dancer.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.c dancer.y" "regression.at:937"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.c dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:937: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:937"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:937: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:937"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:937: bison -o dancer.c dancer.y"
+at_fn_check_prepare_trace "regression.at:937"
+( $at_check_trace; bison -o dancer.c dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "regression.at:867: bison -o dancer.c dancer.y"
-echo regression.at:867 >$at_check_line_file
-( $at_traceon; bison -o dancer.c dancer.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:867: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/regression.at:937: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:937"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:937: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o dancer dancer.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.c $LIBS" "regression.at:937"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "regression.at:867: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o dancer dancer.c \$LIBS"
-echo regression.at:867 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:867: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/regression.at:937:  \$PREPARSER ./dancer"
+at_fn_check_prepare_dynamic " $PREPARSER ./dancer" "regression.at:937"
+( $at_check_trace;  $PREPARSER ./dancer
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:867: \$PREPARSER ./dancer"
-echo regression.at:867 >$at_check_line_file
-( $at_traceon; $PREPARSER ./dancer ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected ':'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:867: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:937: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:937"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected ':'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:937"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  127 ) # 127. regression.at:868: Dancer %skeleton "lalr1.cc"
-    at_setup_line='regression.at:868'
-    at_desc='Dancer %skeleton "lalr1.cc"'
-    $at_quiet $ECHO_N "127: Dancer %skeleton "lalr1.cc"                  $ECHO_C"
-    at_xfail=no
-    (
-      echo "127. regression.at:868: testing ..."
-      $at_traceon
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_283
+#AT_START_284
+at_fn_group_banner 284 'regression.at:938' \
+  "Dancer %skeleton \"lalr1.cc\"" "                    " 17
+at_xfail=no
+(
+  $as_echo "284. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >dancer.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-%{
-static int yylex (int *);
+%code provides
+{
 
-%}
+  static int yylex (yy::parser::semantic_type *lvalp);
+}
 %skeleton "lalr1.cc"
 %token ARROW INVALID NUMBER STRING DATA
 %defines
@@ -58499,34 +142970,37 @@
    | INVALID
    ;
 %%
-/* A C++ error reporting function. */
+/* A C++ error reporting function.  */
 void
-yy::parser::error (const location&, const std::string& m)
+yy::parser::error (const location_type& l, const std::string& m)
 {
+  (void) l;
   std::cerr << m << std::endl;
 }
-
+#include <assert.h>
+static
+int yylex (yy::parser::semantic_type *lvalp)
+{
+  static char const input[] = ":";
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
 int
 yyparse ()
 {
   yy::parser parser;
-  parser.set_debug_level (!!YYDEBUG);
+#if YYDEBUG
+  parser.set_debug_level (YYDEBUG);
+#endif
   return parser.parse ();
 }
 
 
-static int
-yylex (int *lval)
-{
-  static int toknum = 0;
-  static int tokens[] =
-    {
-      ':', -1
-    };
-  *lval = 0; /* Pacify GCC.  */
-  return tokens[toknum++];
-}
-
 int
 main (void)
 {
@@ -58536,215 +143010,178 @@
 
 
 
-$at_traceoff
-echo "regression.at:868: bison -o dancer.c dancer.y"
-echo regression.at:868 >$at_check_line_file
-( $at_traceon; bison -o dancer.c dancer.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:868: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:938: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o dancer.cc dancer.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:938"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o dancer.cc dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:938: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.cc dancer.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.cc dancer.y" "regression.at:938"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o dancer.cc dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:938: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:938"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:938: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:938"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:868: bison -o dancer.cc dancer.y"
-echo regression.at:868 >$at_check_line_file
-( $at_traceon; bison -o dancer.cc dancer.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:868: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-$at_traceoff
-echo "regression.at:868: \$BISON_CXX_WORKS"
-echo regression.at:868 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:868: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:868: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o dancer dancer.cc \$LIBS"
-echo regression.at:868 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:868: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:868: \$PREPARSER ./dancer"
-echo regression.at:868 >$at_check_line_file
-( $at_traceon; $PREPARSER ./dancer ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected ':'
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:868: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:938: bison -o dancer.cc dancer.y"
+at_fn_check_prepare_trace "regression.at:938"
+( $at_check_trace; bison -o dancer.cc dancer.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
+{ set +x
+$as_echo "$at_srcdir/regression.at:938: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "regression.at:938"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:938: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o dancer dancer.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.cc $LIBS" "regression.at:938"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o dancer dancer.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:938:  \$PREPARSER ./dancer"
+at_fn_check_prepare_dynamic " $PREPARSER ./dancer" "regression.at:938"
+( $at_check_trace;  $PREPARSER ./dancer
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:938: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:938"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected ':'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:938"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  128 ) # 128. regression.at:963: Expecting two tokens
-    at_setup_line='regression.at:963'
-    at_desc='Expecting two tokens '
-    $at_quiet $ECHO_N "128: Expecting two tokens                         $ECHO_C"
-    at_xfail=no
-    (
-      echo "128. regression.at:963: testing ..."
-      $at_traceon
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_284
+#AT_START_285
+at_fn_group_banner 285 'regression.at:1020' \
+  "Expecting two tokens " "                          " 17
+at_xfail=no
+(
+  $as_echo "285. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >expect2.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %{
 static int yylex (void);
 #include <stdio.h>
-static void yyerror (const char *);
+#include <stdlib.h>
+static void yyerror ( const char *msg);
 %}
 
 %defines
@@ -58761,21 +143198,26 @@
 t: A | B;
 
 %%
-static void
-yyerror (const char *s)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
-  fprintf (stderr, "%s\n", s);
+  fprintf (stderr, "%s\n", msg);
 }
 
+
+#include <assert.h>
 static int
 yylex (void)
 {
-  static int toknum = 0;
-  static int tokens[] =
+  static int const tokens[] =
     {
       1000, '+', '+', -1
     };
+  static size_t toknum;
 
+  assert (toknum < sizeof tokens / sizeof *tokens);
   return tokens[toknum++];
 }
 
@@ -58788,189 +143230,177 @@
 
 
 
-$at_traceoff
-echo "regression.at:963: bison -o expect2.c expect2.y"
-echo regression.at:963 >$at_check_line_file
-( $at_traceon; bison -o expect2.c expect2.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:963: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1020: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o expect2.c expect2.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1020"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o expect2.c expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:1020: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.c expect2.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.c expect2.y" "regression.at:1020"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.c expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1020: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1020"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1020: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1020"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1020: bison -o expect2.c expect2.y"
+at_fn_check_prepare_trace "regression.at:1020"
+( $at_check_trace; bison -o expect2.c expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "regression.at:963: bison -o expect2.c expect2.y"
-echo regression.at:963 >$at_check_line_file
-( $at_traceon; bison -o expect2.c expect2.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:963: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/regression.at:1020: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1020"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1020: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o expect2 expect2.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.c $LIBS" "regression.at:1020"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "regression.at:963: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o expect2 expect2.c \$LIBS"
-echo regression.at:963 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:963: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/regression.at:1020:  \$PREPARSER ./expect2"
+at_fn_check_prepare_dynamic " $PREPARSER ./expect2" "regression.at:1020"
+( $at_check_trace;  $PREPARSER ./expect2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:963: \$PREPARSER ./expect2"
-echo regression.at:963 >$at_check_line_file
-( $at_traceon; $PREPARSER ./expect2 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected '+', expecting A or B
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:963: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:1020: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1020"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '+', expecting A or B
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1020"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  129 ) # 129. regression.at:964: Expecting two tokens %glr-parser
-    at_setup_line='regression.at:964'
-    at_desc='Expecting two tokens %glr-parser'
-    $at_quiet $ECHO_N "129: Expecting two tokens %glr-parser             $ECHO_C"
-    at_xfail=no
-    (
-      echo "129. regression.at:964: testing ..."
-      $at_traceon
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_285
+#AT_START_286
+at_fn_group_banner 286 'regression.at:1021' \
+  "Expecting two tokens %glr-parser" "               " 17
+at_xfail=no
+(
+  $as_echo "286. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >expect2.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %{
 static int yylex (void);
 #include <stdio.h>
-static void yyerror (const char *);
+#include <stdlib.h>
+static void yyerror ( const char *msg);
 %}
 %glr-parser
 %defines
@@ -58987,21 +143417,26 @@
 t: A | B;
 
 %%
-static void
-yyerror (const char *s)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
-  fprintf (stderr, "%s\n", s);
+  fprintf (stderr, "%s\n", msg);
 }
 
+
+#include <assert.h>
 static int
 yylex (void)
 {
-  static int toknum = 0;
-  static int tokens[] =
+  static int const tokens[] =
     {
       1000, '+', '+', -1
     };
+  static size_t toknum;
 
+  assert (toknum < sizeof tokens / sizeof *tokens);
   return tokens[toknum++];
 }
 
@@ -59014,184 +143449,171 @@
 
 
 
-$at_traceoff
-echo "regression.at:964: bison -o expect2.c expect2.y"
-echo regression.at:964 >$at_check_line_file
-( $at_traceon; bison -o expect2.c expect2.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:964: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1021: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o expect2.c expect2.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1021"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o expect2.c expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:1021: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.c expect2.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.c expect2.y" "regression.at:1021"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.c expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1021: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1021"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1021: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1021"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1021: bison -o expect2.c expect2.y"
+at_fn_check_prepare_trace "regression.at:1021"
+( $at_check_trace; bison -o expect2.c expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "regression.at:964: bison -o expect2.c expect2.y"
-echo regression.at:964 >$at_check_line_file
-( $at_traceon; bison -o expect2.c expect2.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:964: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+   { set +x
+$as_echo "$at_srcdir/regression.at:1021: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1021"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1021: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o expect2 expect2.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.c $LIBS" "regression.at:1021"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-   $at_traceoff
-echo "regression.at:964: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o expect2 expect2.c \$LIBS"
-echo regression.at:964 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:964: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/regression.at:1021:  \$PREPARSER ./expect2"
+at_fn_check_prepare_dynamic " $PREPARSER ./expect2" "regression.at:1021"
+( $at_check_trace;  $PREPARSER ./expect2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:964: \$PREPARSER ./expect2"
-echo regression.at:964 >$at_check_line_file
-( $at_traceon; $PREPARSER ./expect2 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected '+', expecting A or B
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:964: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:1021: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1021"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '+', expecting A or B
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1021"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  130 ) # 130. regression.at:965: Expecting two tokens %skeleton "lalr1.cc"
-    at_setup_line='regression.at:965'
-    at_desc='Expecting two tokens %skeleton "lalr1.cc"'
-    $at_quiet $ECHO_N "130: Expecting two tokens %skeleton "lalr1.cc"    $ECHO_C"
-    at_xfail=no
-    (
-      echo "130. regression.at:965: testing ..."
-      $at_traceon
-
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_286
+#AT_START_287
+at_fn_group_banner 287 'regression.at:1022' \
+  "Expecting two tokens %skeleton \"lalr1.cc\"" "      " 17
+at_xfail=no
+(
+  $as_echo "287. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 cat >expect2.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 %{
 static int yylex (int *);
@@ -59212,13 +143634,13 @@
 t: A | B;
 
 %%
-/* A C++ error reporting function. */
+/* A C++ error reporting function.  */
 void
-yy::parser::error (const location&, const std::string& m)
+yy::parser::error (const location_type& l, const std::string& m)
 {
+  (void) l;
   std::cerr << m << std::endl;
 }
-
 int
 yyparse ()
 {
@@ -59227,15 +143649,17 @@
 }
 
 
+#include <assert.h>
 static int
 yylex (int *lval)
 {
-  static int toknum = 0;
-  static int tokens[] =
+  static int const tokens[] =
     {
       1000, '+', '+', -1
     };
+  static size_t toknum;
   *lval = 0; /* Pacify GCC.  */
+  assert (toknum < sizeof tokens / sizeof *tokens);
   return tokens[toknum++];
 }
 
@@ -59248,177 +143672,4297 @@
 
 
 
-$at_traceoff
-echo "regression.at:965: bison -o expect2.c expect2.y"
-echo regression.at:965 >$at_check_line_file
-( $at_traceon; bison -o expect2.c expect2.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:965: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1022: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o expect2.cc expect2.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1022"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o expect2.cc expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/regression.at:1022: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.cc expect2.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.cc expect2.y" "regression.at:1022"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o expect2.cc expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1022: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1022"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1022: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1022"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:965: bison -o expect2.cc expect2.y"
-echo regression.at:965 >$at_check_line_file
-( $at_traceon; bison -o expect2.cc expect2.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:965: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-
-$at_traceoff
-echo "regression.at:965: \$BISON_CXX_WORKS"
-echo regression.at:965 >$at_check_line_file
-( $at_traceon; $BISON_CXX_WORKS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:965: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:965: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o expect2 expect2.cc \$LIBS"
-echo regression.at:965 >$at_check_line_file
-( $at_traceon; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.cc $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "regression.at:965: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "regression.at:965: \$PREPARSER ./expect2"
-echo regression.at:965 >$at_check_line_file
-( $at_traceon; $PREPARSER ./expect2 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected '+', expecting A or B
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   1) ;;
-   *) echo "regression.at:965: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/regression.at:1022: bison -o expect2.cc expect2.y"
+at_fn_check_prepare_trace "regression.at:1022"
+( $at_check_trace; bison -o expect2.cc expect2.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
+{ set +x
+$as_echo "$at_srcdir/regression.at:1022: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "regression.at:1022"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1022: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o expect2 expect2.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.cc $LIBS" "regression.at:1022"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o expect2 expect2.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1022:  \$PREPARSER ./expect2"
+at_fn_check_prepare_dynamic " $PREPARSER ./expect2" "regression.at:1022"
+( $at_check_trace;  $PREPARSER ./expect2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1022: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1022"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected '+', expecting A or B
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1022"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_287
+#AT_START_288
+at_fn_group_banner 288 'regression.at:1030' \
+  "Braced code in declaration in rules section" "    " 17
+at_xfail=no
+(
+  $as_echo "288. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
+# Bison once mistook braced code in a declaration in the rules section to be a
+# rule action.
 
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
+%{
+#include <stdio.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+%}
 
+%error-verbose
 
+%%
 
+start:
+  {
+    printf ("Bison would once convert this action to a midrule because of the"
+	    " subsequent braced code.\n");
+  }
+  ;
 
+%destructor { fprintf (stderr, "DESTRUCTOR\n"); } 'a';
+%printer { fprintf (yyoutput, "PRINTER"); } 'a';
 
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
 
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-
-  banner-16 ) # Banner 16. c++.at:19
-    cat <<\_ATEOF
-
-C++ Features.
-
+int
+main (void)
+{
+  yydebug = 1;
+  return !yyparse ();
+}
 _ATEOF
-    ;;
 
-  131 ) # 131. c++.at:102: Doxygen Public Documentation
-    at_setup_line='c++.at:102'
-    at_desc='Doxygen Public Documentation'
-    $at_quiet $ECHO_N "131: Doxygen Public Documentation                 $ECHO_C"
-    at_xfail=no
-    (
-      echo "131. c++.at:102: testing ..."
-      $at_traceon
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1069: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1069"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1069"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1069: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -t -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -t -o input.c input.y" "regression.at:1069"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1069"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1069: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1069"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1069"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1069: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1069"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1069"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1069: bison -t -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:1069"
+( $at_check_trace; bison -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1069"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1070: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1070"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1070"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1070: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1070"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1070"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1071:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1071"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "Bison would once convert this action to a midrule because of the subsequent braced code.
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1071"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1071: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1071"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reducing stack by rule 1 (line 20):
+-> \$\$ = nterm start ()
+Stack now 0
+Entering state 1
+Reading a token: Next token is token 'a' (PRINTER)
+syntax error, unexpected 'a', expecting \$end
+Error: popping nterm start ()
+Stack now 0
+Cleanup: discarding lookahead token 'a' (PRINTER)
+DESTRUCTOR
+Stack now 0
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1071"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_288
+#AT_START_289
+at_fn_group_banner 289 'regression.at:1097' \
+  "String alias declared after use" "                " 17
+at_xfail=no
+(
+  $as_echo "289. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Bison once incorrectly asserted that the symbol number for either a token or
+# its alias was the highest symbol number so far at the point of the alias
+# declaration.  That was true unless the declaration appeared after their first
+# uses and other tokens appeared in between.
+
+cat >input.y <<'_ATEOF'
+%%
+start: 'a' "A" 'b';
+%token 'a' "A";
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1110: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1110"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1110"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1110: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -t -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -t -o input.c input.y" "regression.at:1110"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1110"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1110: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1110"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1110"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1110: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1110"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1110"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1110: bison -t -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:1110"
+( $at_check_trace; bison -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1110"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_289
+#AT_START_290
+at_fn_group_banner 290 'regression.at:1120' \
+  "Extra lookahead sets in report" "                 " 17
+at_xfail=no
+(
+  $as_echo "290. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Bison prints each reduction's lookahead set only next to the associated
+# state's one item that (1) is associated with the same rule as the reduction
+# and (2) has its dot at the end of its RHS.  Previously, Bison also
+# erroneously printed the lookahead set next to all of the state's other items
+# associated with the same rule.  This bug affected only the '.output' file and
+# not the generated parser source code.
+
+cat >input.y <<'_ATEOF'
+%%
+start: a | 'a' a 'a' ;
+a: 'a' ;
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1135: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot --report=all input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1135"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1135: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input.y" "regression.at:1135"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1135: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1135"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1135: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1135"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1135: bison --report=all input.y"
+at_fn_check_prepare_trace "regression.at:1135"
+( $at_check_trace; bison --report=all input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1135"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1136: sed -n '/^State 1\$/,/^State 2\$/p' input.output"
+at_fn_check_prepare_dynamic "sed -n '/^State 1$/,/^State 2$/p' input.output" "regression.at:1136"
+( $at_check_trace; sed -n '/^State 1$/,/^State 2$/p' input.output
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "State 1
+
+    2 start: 'a' . a 'a'
+    3 a: . 'a'
+    3  | 'a' .  [\$end]
+
+    'a'  shift, and go to state 4
+
+    \$default  reduce using rule 3 (a)
+
+    a  go to state 5
+
+
+State 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_290
+#AT_START_291
+at_fn_group_banner 291 'regression.at:1161' \
+  "Token number in precedence declaration" "         " 17
+at_xfail=no
+(
+  $as_echo "291. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# POSIX says token numbers can be declared in %left, %right, and %nonassoc, but
+# we lost this in Bison 1.50.
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%{
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+%}
+
+%error-verbose
+%right END 0
+%left TK1 1 TK2 2 "tok alias" 3
+
+%%
+
+start:
+    TK1 sr_conflict "tok alias"
+  | start %prec END
+  ;
+sr_conflict:
+  TK2
+  | TK2 "tok alias"
+  ;
+
+%%
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static int const input[] = { 1, 2, 3, 0 };
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1201"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:1201"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1201"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1201"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1201: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:1201"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:23.5-19: warning: rule useless in parser due to conflicts: start: start
+input.y:27.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 \"tok alias\"
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
+  at_save_special_files
+
+  # To avoid expanding it repeatedly, store specified stdout.
+  : >expout
+
+  # Run with -Werror.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Werror" "regression.at:1201"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Build expected stderr up to and including the "warnings being
+  # treated as errors" message.
+  cat >at-bison-check-warnings <<'_ATEOF'
+input.y:23.5-19: warning: rule useless in parser due to conflicts: start: start
+input.y:27.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias"
+_ATEOF
+
+  at_bison_check_first=`sed -n \
+    '/: warning: /{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first:=1}
+  at_bison_check_first_tmp=`sed -n \
+    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
+  : ${at_bison_check_first_tmp:=1}
+  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
+    at_bison_check_first=$at_bison_check_first_tmp
+  fi
+  if test $at_bison_check_first -gt 1; then
+    sed -n "1,`expr $at_bison_check_first - 1`"p \
+      at-bison-check-warnings > experr
+  fi
+  echo 'bison: warnings being treated as errors' >> experr
+
+  # Finish building expected stderr and check.  Unlike warnings,
+  # complaints cause bison to exit early.  Thus, with -Werror, bison
+  # does not necessarily report all warnings that it does without
+  # -Werror, but it at least reports one.
+  at_bison_check_last=`sed -n '$=' stderr`
+  : ${at_bison_check_last:=1}
+  at_bison_check_last=`expr $at_bison_check_last - 1`
+  sed -n "$at_bison_check_first,$at_bison_check_last"p \
+    at-bison-check-warnings >> experr
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: sed 's,.*/\\(bison: warnings being treated as errors\\)\$,\\1,' \\
+              stderr 1>&2"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1201"
+( $at_check_trace; sed 's,.*/\(bison: warnings being treated as errors\)$,\1,' \
+              stderr 1>&2
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check --warnings=error.
+  cp stderr experr
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error" "regression.at:1201"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=error
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+$at_diff experr "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  # Now check -Wnone and --warnings=none by making sure that
+  # -Werror doesn't change the exit status when -Wnone or
+  # --warnings=none is specified.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror" "regression.at:1201"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y -Wnone -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1201: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror" "regression.at:1201"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o input.c input.y --warnings=none -Werror
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1201"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1205: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1205"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1205"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1205: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1205"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1205"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1206:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1206"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1206"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1206: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1206"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1206"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_291
+#AT_START_292
+at_fn_group_banner 292 'regression.at:1219' \
+  "parse-gram.y: LALR = IELR" "                      " 17
+at_xfail=no
+(
+  $as_echo "292. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Avoid differences in synclines by telling bison that the output files
+# have the same name.
+cp $abs_top_srcdir/src/parse-gram.y input.y
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1224: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c -Dlr.type=lalr input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1224"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c -Dlr.type=lalr input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1224: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -Dlr.type=lalr input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -Dlr.type=lalr input.y" "regression.at:1224"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -Dlr.type=lalr input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1224: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1224"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1224: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1224"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1224: bison -o input.c -Dlr.type=lalr input.y"
+at_fn_check_prepare_trace "regression.at:1224"
+( $at_check_trace; bison -o input.c -Dlr.type=lalr input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1224"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+mv input.c lalr.c
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1227: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c -Dlr.type=ielr input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1227"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c -Dlr.type=ielr input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1227"
+$at_failed && at_fn_log_failure  \
+"lalr.c"
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1227: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -Dlr.type=ielr input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -Dlr.type=ielr input.y" "regression.at:1227"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c -Dlr.type=ielr input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1227"
+$at_failed && at_fn_log_failure  \
+"lalr.c"
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1227: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1227"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1227"
+$at_failed && at_fn_log_failure  \
+"lalr.c"
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1227: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1227"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1227"
+$at_failed && at_fn_log_failure  \
+"lalr.c"
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1227: bison -o input.c -Dlr.type=ielr input.y"
+at_fn_check_prepare_trace "regression.at:1227"
+( $at_check_trace; bison -o input.c -Dlr.type=ielr input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1227"
+$at_failed && at_fn_log_failure  \
+"lalr.c"
+$at_traceon; }
+
+
+mv input.c ielr.c
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1230: diff lalr.c ielr.c"
+at_fn_check_prepare_trace "regression.at:1230"
+( $at_check_trace; diff lalr.c ielr.c
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1230"
+$at_failed && at_fn_log_failure  \
+"lalr.c" \
+"ielr.c"
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_292
+#AT_START_293
+at_fn_group_banner 293 'regression.at:1240' \
+  "%error-verbose and YYSTACK_USE_ALLOCA" "          " 17
+at_xfail=no
+(
+  $as_echo "293. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+  #define YYSTACK_USE_ALLOCA 1
+}
+
+%error-verbose
+
+%%
+
+start: check syntax_error syntax_error ;
+
+check:
+{
+  if (128 < sizeof yymsgbuf)
+    {
+      fprintf (stderr,
+               "The initial size of yymsgbuf in yyparse has increased\n"
+               "since this test group was last updated.  As a result,\n"
+               "this test group may no longer manage to induce a\n"
+               "reallocation of the syntax error message buffer.\n"
+               "This test group must be adjusted to produce a longer\n"
+               "error message.\n");
+      YYABORT;
+    }
+}
+;
+
+// Induce a syntax error message whose total length is more than
+// sizeof yymsgbuf in yyparse.  Each token here is 64 bytes.
+syntax_error:
+  "123456789112345678921234567893123456789412345678951234567896123A"
+| "123456789112345678921234567893123456789412345678951234567896123B"
+| error 'a' 'b' 'c'
+;
+
+%%
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+/* Induce two syntax error messages (which requires full error
+   recovery by shifting 3 tokens) in order to detect any loss of the
+   reallocated buffer.  */
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "abc";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1296: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1296"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1296: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:1296"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1296: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1296"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1296: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1296"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1296: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:1296"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1297: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1297"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1297: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1297"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1297"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1298:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1298"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1298"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1298: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1298"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'a', expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B
+syntax error, unexpected \$end, expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1298"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_293
+#AT_START_294
+at_fn_group_banner 294 'regression.at:1319' \
+  "%error-verbose overflow" "                        " 17
+at_xfail=no
+(
+  $as_echo "294. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+
+  /* This prevents this test case from having to induce error messages
+     large enough to overflow size_t.  */
+  #define YYSIZE_T unsigned char
+
+  /* Bring in malloc and set EXIT_SUCCESS so yacc.c doesn't try to
+     provide a malloc prototype using our YYSIZE_T.  */
+  #include <stdlib.h>
+  #ifndef EXIT_SUCCESS
+  # define EXIT_SUCCESS 0
+  #endif
+
+  /* Max depth is usually much smaller than YYSTACK_ALLOC_MAXIMUM, and
+     we don't want gcc to warn everywhere this constant would be too big
+     to make sense for our YYSIZE_T.  */
+  #define YYMAXDEPTH 100
+}
+
+%error-verbose
+
+%%
+
+start: syntax_error1 check syntax_error2 ;
+
+// Induce a syntax error message whose total length causes yymsg in
+// yyparse to be reallocated to size YYSTACK_ALLOC_MAXIMUM, which
+// should be 255.  Each token here is 64 bytes.
+syntax_error1:
+  "123456789112345678921234567893123456789412345678951234567896123A"
+| "123456789112345678921234567893123456789412345678951234567896123B"
+| "123456789112345678921234567893123456789412345678951234567896123C"
+| error 'a' 'b' 'c'
+;
+
+check:
+{
+  if (yymsg_alloc != YYSTACK_ALLOC_MAXIMUM
+      || YYSTACK_ALLOC_MAXIMUM != YYSIZE_MAXIMUM
+      || YYSIZE_MAXIMUM != 255)
+    {
+      fprintf (stderr,
+               "The assumptions of this test group are no longer\n"
+               "valid, so it may no longer catch the error it was\n"
+               "designed to catch.  Specifically, the following\n"
+               "values should all be 255:\n\n");
+      fprintf (stderr, "  yymsg_alloc = %d\n", yymsg_alloc);
+      fprintf (stderr, "  YYSTACK_ALLOC_MAXIMUM = %d\n",
+               YYSTACK_ALLOC_MAXIMUM);
+      fprintf (stderr, "  YYSIZE_MAXIMUM = %d\n", YYSIZE_MAXIMUM);
+      YYABORT;
+    }
+}
+;
+
+// Now overflow.
+syntax_error2:
+  "123456789112345678921234567893123456789412345678951234567896123A"
+| "123456789112345678921234567893123456789412345678951234567896123B"
+| "123456789112345678921234567893123456789412345678951234567896123C"
+| "123456789112345678921234567893123456789412345678951234567896123D"
+| "123456789112345678921234567893123456789412345678951234567896123E"
+;
+
+%%
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+/* Induce two syntax error messages (which requires full error
+   recovery by shifting 3 tokens).  */
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "abc";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  /* Push parsers throw away the message buffer between tokens, so skip
+     this test under maintainer-push-check.  */
+  if (YYPUSH)
+    return 77;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1406: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1406"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1406: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:1406"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1406: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1406"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1406: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1406"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1406: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:1406"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# gcc warns about tautologies and fallacies involving comparisons for
+# unsigned char.  However, it doesn't produce these same warnings for
+# size_t and many other types when the warnings would seem to make just
+# as much sense.  We ignore the warnings.
+CFLAGS="$NO_WERROR_CFLAGS"
+{ set +x
+$as_echo "$at_srcdir/regression.at:1413: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1413"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1413"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1413: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1413"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1413"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1415:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1415"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/regression.at:1415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1415: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1415"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected 'a', expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B or 123456789112345678921234567893123456789412345678951234567896123C
+syntax error
+memory exhausted
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_294
+#AT_START_295
+at_fn_group_banner 295 'regression.at:1429' \
+  "LAC: Exploratory stack" "                         " 17
+at_xfail=no
+(
+  $as_echo "295. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (void);
+}
+
+%define api.push-pull pull
+%error-verbose
+%token 'c'
+
+%%
+
+// default reductions in inconsistent states
+// v   v v   v v v v   v v v v v v v
+S: A B A A B A A A A B A A A A A A A B C C A A A A A A A A A A A A B ;
+//       ^                     ^                               ^
+// LAC reallocs
+
+A: 'a' | /*empty*/ { printf ("inconsistent default reduction\n"); } ;
+B: 'b' ;
+C: /*empty*/ { printf ("consistent default reduction\n"); } ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+yylex (void)
+{
+  static char const *input = "bbbbc";
+  return *input++;
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1508: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1508"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1508: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1508"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1508: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1508"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1508: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1508"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508: bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1508"
+( $at_check_trace; bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 21 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1508"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1508"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508:  \$PREPARSER ./input > stdout.txt 2> stderr.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./input > stdout.txt 2> stderr.txt" "regression.at:1508"
+( $at_check_trace;  $PREPARSER ./input > stdout.txt 2> stderr.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1508"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Make sure syntax error doesn't forget that 'a' is expected.  It would
+# be forgotten without lookahead correction.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508: grep 'syntax error,' stderr.txt"
+at_fn_check_prepare_trace "regression.at:1508"
+( $at_check_trace; grep 'syntax error,' stderr.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "syntax error, unexpected 'c', expecting 'a' or 'b'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of default reductions in inconsistent states to be sure
+# syntax error is detected before unnecessary reductions are performed.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508: \$PERL -0777 -ne 'print s/inconsistent default reduction//g;' \\
+           < stdout.txt || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1508"
+( $at_check_trace; $PERL -0777 -ne 'print s/inconsistent default reduction//g;' \
+           < stdout.txt || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "14" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of default reductions in consistent states to be sure
+# it is performed before the syntax error is detected.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508: \$PERL -0777 -ne 'print s/\\bconsistent default reduction//g;' \\
+           < stdout.txt || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1508"
+( $at_check_trace; $PERL -0777 -ne 'print s/\bconsistent default reduction//g;' \
+           < stdout.txt || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of reallocs to be sure reallocated memory isn't somehow
+# lost between LAC invocations.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1508: \$PERL -0777 -ne 'print s/\\(realloc//g;' < stderr.txt \\
+           || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1508"
+( $at_check_trace; $PERL -0777 -ne 'print s/\(realloc//g;' < stderr.txt \
+           || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "3" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *);
+}
+
+%define api.push-pull pull %define api.pure
+%error-verbose
+%token 'c'
+
+%%
+
+// default reductions in inconsistent states
+// v   v v   v v v v   v v v v v v v
+S: A B A A B A A A A B A A A A A A A B C C A A A A A A A A A A A A B ;
+//       ^                     ^                               ^
+// LAC reallocs
+
+A: 'a' | /*empty*/ { printf ("inconsistent default reduction\n"); } ;
+B: 'b' ;
+C: /*empty*/ { printf ("consistent default reduction\n"); } ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+yylex (YYSTYPE *v)
+{
+  static char const *input = "bbbbc";
+  *v = 0;
+  return *input++;
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1509: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1509"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1509: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1509"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1509: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1509"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1509: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1509"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509: bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1509"
+( $at_check_trace; bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 21 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1509"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1509"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509:  \$PREPARSER ./input > stdout.txt 2> stderr.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./input > stdout.txt 2> stderr.txt" "regression.at:1509"
+( $at_check_trace;  $PREPARSER ./input > stdout.txt 2> stderr.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1509"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Make sure syntax error doesn't forget that 'a' is expected.  It would
+# be forgotten without lookahead correction.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509: grep 'syntax error,' stderr.txt"
+at_fn_check_prepare_trace "regression.at:1509"
+( $at_check_trace; grep 'syntax error,' stderr.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "syntax error, unexpected 'c', expecting 'a' or 'b'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of default reductions in inconsistent states to be sure
+# syntax error is detected before unnecessary reductions are performed.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509: \$PERL -0777 -ne 'print s/inconsistent default reduction//g;' \\
+           < stdout.txt || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1509"
+( $at_check_trace; $PERL -0777 -ne 'print s/inconsistent default reduction//g;' \
+           < stdout.txt || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "14" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of default reductions in consistent states to be sure
+# it is performed before the syntax error is detected.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509: \$PERL -0777 -ne 'print s/\\bconsistent default reduction//g;' \\
+           < stdout.txt || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1509"
+( $at_check_trace; $PERL -0777 -ne 'print s/\bconsistent default reduction//g;' \
+           < stdout.txt || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of reallocs to be sure reallocated memory isn't somehow
+# lost between LAC invocations.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1509: \$PERL -0777 -ne 'print s/\\(realloc//g;' < stderr.txt \\
+           || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1509"
+( $at_check_trace; $PERL -0777 -ne 'print s/\(realloc//g;' < stderr.txt \
+           || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "3" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1509"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (void);
+}
+
+%define api.push-pull both
+%error-verbose
+%token 'c'
+
+%%
+
+// default reductions in inconsistent states
+// v   v v   v v v v   v v v v v v v
+S: A B A A B A A A A B A A A A A A A B C C A A A A A A A A A A A A B ;
+//       ^                     ^                               ^
+// LAC reallocs
+
+A: 'a' | /*empty*/ { printf ("inconsistent default reduction\n"); } ;
+B: 'b' ;
+C: /*empty*/ { printf ("consistent default reduction\n"); } ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+yylex (void)
+{
+  static char const *input = "bbbbc";
+  return *input++;
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1510: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1510"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1510: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1510"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1510: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1510"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1510: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1510"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510: bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1510"
+( $at_check_trace; bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 21 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1510"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1510"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510:  \$PREPARSER ./input > stdout.txt 2> stderr.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./input > stdout.txt 2> stderr.txt" "regression.at:1510"
+( $at_check_trace;  $PREPARSER ./input > stdout.txt 2> stderr.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1510"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Make sure syntax error doesn't forget that 'a' is expected.  It would
+# be forgotten without lookahead correction.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510: grep 'syntax error,' stderr.txt"
+at_fn_check_prepare_trace "regression.at:1510"
+( $at_check_trace; grep 'syntax error,' stderr.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "syntax error, unexpected 'c', expecting 'a' or 'b'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of default reductions in inconsistent states to be sure
+# syntax error is detected before unnecessary reductions are performed.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510: \$PERL -0777 -ne 'print s/inconsistent default reduction//g;' \\
+           < stdout.txt || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1510"
+( $at_check_trace; $PERL -0777 -ne 'print s/inconsistent default reduction//g;' \
+           < stdout.txt || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "14" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of default reductions in consistent states to be sure
+# it is performed before the syntax error is detected.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510: \$PERL -0777 -ne 'print s/\\bconsistent default reduction//g;' \\
+           < stdout.txt || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1510"
+( $at_check_trace; $PERL -0777 -ne 'print s/\bconsistent default reduction//g;' \
+           < stdout.txt || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of reallocs to be sure reallocated memory isn't somehow
+# lost between LAC invocations.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1510: \$PERL -0777 -ne 'print s/\\(realloc//g;' < stderr.txt \\
+           || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1510"
+( $at_check_trace; $PERL -0777 -ne 'print s/\(realloc//g;' < stderr.txt \
+           || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "3" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  int yylex (YYSTYPE *);
+}
+
+%define api.push-pull both %define api.pure
+%error-verbose
+%token 'c'
+
+%%
+
+// default reductions in inconsistent states
+// v   v v   v v v v   v v v v v v v
+S: A B A A B A A A A B A A A A A A A B C C A A A A A A A A A A A A B ;
+//       ^                     ^                               ^
+// LAC reallocs
+
+A: 'a' | /*empty*/ { printf ("inconsistent default reduction\n"); } ;
+B: 'b' ;
+C: /*empty*/ { printf ("consistent default reduction\n"); } ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+yylex (YYSTYPE *v)
+{
+  static char const *input = "bbbbc";
+  *v = 0;
+  return *input++;
+}
+
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1511: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1511"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1511: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1511"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1511: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1511"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1511: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1511"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511: bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -Dparse.lac.memory-trace=full \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1511"
+( $at_check_trace; bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 21 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1511"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1511"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511:  \$PREPARSER ./input > stdout.txt 2> stderr.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./input > stdout.txt 2> stderr.txt" "regression.at:1511"
+( $at_check_trace;  $PREPARSER ./input > stdout.txt 2> stderr.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1511"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Make sure syntax error doesn't forget that 'a' is expected.  It would
+# be forgotten without lookahead correction.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511: grep 'syntax error,' stderr.txt"
+at_fn_check_prepare_trace "regression.at:1511"
+( $at_check_trace; grep 'syntax error,' stderr.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "syntax error, unexpected 'c', expecting 'a' or 'b'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of default reductions in inconsistent states to be sure
+# syntax error is detected before unnecessary reductions are performed.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511: \$PERL -0777 -ne 'print s/inconsistent default reduction//g;' \\
+           < stdout.txt || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1511"
+( $at_check_trace; $PERL -0777 -ne 'print s/inconsistent default reduction//g;' \
+           < stdout.txt || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "14" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of default reductions in consistent states to be sure
+# it is performed before the syntax error is detected.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511: \$PERL -0777 -ne 'print s/\\bconsistent default reduction//g;' \\
+           < stdout.txt || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1511"
+( $at_check_trace; $PERL -0777 -ne 'print s/\bconsistent default reduction//g;' \
+           < stdout.txt || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Check number of reallocs to be sure reallocated memory isn't somehow
+# lost between LAC invocations.
+{ set +x
+$as_echo "$at_srcdir/regression.at:1511: \$PERL -0777 -ne 'print s/\\(realloc//g;' < stderr.txt \\
+           || exit 77"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1511"
+( $at_check_trace; $PERL -0777 -ne 'print s/\(realloc//g;' < stderr.txt \
+           || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "3" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1511"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_295
+#AT_START_296
+at_fn_group_banner 296 'regression.at:1523' \
+  "LAC: Memory exhaustion" "                         " 17
+at_xfail=no
+(
+  $as_echo "296. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+# Check for memory exhaustion during parsing.
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+  #define YYMAXDEPTH 8
+}
+
+%error-verbose
+
+%%
+
+S: A A A A A A A A A ;
+A: /*empty*/ | 'a' ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1562: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1562"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1562"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1562: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1562"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1562"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1562: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1562"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1562"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1562: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1562"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1562"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1562: bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1562"
+( $at_check_trace; bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 8 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1562"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1562: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1562"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1562"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1562: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1562"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1562"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1563:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1563"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/regression.at:1563"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1563: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1563"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reading a token: Now at end of input.
+LAC: initial context established for \$end
+LAC: checking lookahead \$end: R2 G3 R2 G5 R2 G6 R2 G7 R2 G8 R2 G9 R2 G10 R2 G11 R2 (max size exceeded)
+memory exhausted
+Cleanup: discarding lookahead token \$end ()
+Stack now 0
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1563"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Induce an immediate syntax error with an undefined token, and check
+# for memory exhaustion while building syntax error message.
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%code {
+  #include <stdio.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+  #define YYMAXDEPTH 8
+}
+
+%error-verbose
+
+%%
+
+S: A A A A A A A A A ;
+A: /*empty*/ | 'a' ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "z";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  yydebug = 1;
+  return yyparse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1576: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1576"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1576"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1576: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1576"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1576"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1576: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1576"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1576"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1576: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1576"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1576"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1576: bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \\
+                 -t -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1576"
+( $at_check_trace; bison -Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
+                 -t -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 8 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1576"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1576: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1576"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1576"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1576: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1576"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1576"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1577:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1577"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/regression.at:1577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1577: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1577"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reading a token: Next token is token \$undefined ()
+LAC: initial context established for \$undefined
+LAC: checking lookahead \$undefined: Always Err
+Constructing syntax error message
+LAC: checking lookahead \$end: R2 G3 R2 G5 R2 G6 R2 G7 R2 G8 R2 G9 R2 G10 R2 G11 R2 (max size exceeded)
+syntax error
+memory exhausted
+Cleanup: discarding lookahead token \$undefined ()
+Stack now 0
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_296
+#AT_START_297
+at_fn_group_banner 297 'regression.at:1664' \
+  "Lex and parse params: yacc.c" "                   " 17
+at_xfail=no
+(
+  $as_echo "297. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+## FIXME: Improve parsing of parse-param and use the generated
+## yyerror.
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines
+%locations
+%skeleton "yacc.c"
+%union { int ival; }
+%parse-param { int x }
+// Spaces, tabs, and new lines.
+%parse-param { 
+	 int y	 
+         
+ 
+}
+
+%{
+#include <stdio.h>
+#include <stdlib.h>
+
+  static void yyerror (int x, int y,  const char *msg);
+  static int yylex (void);
+%}
+
+%%
+exp: 'a' { fprintf (stdout, "x: %d, y: %d\n", x, y); };
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (int x, int y,  const char *msg)
+{
+  YYUSE(x);
+  YYUSE(y);
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (yylloc).first_line = (yylloc).last_line = 1;
+  (yylloc).first_column = (yylloc).last_column = toknum;
+  return res;
+}
+
+
+
+int
+main (void)
+{
+  return !!yyparse(1, 2);
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1664: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1664"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1664: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:1664"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1664: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1664"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1664: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1664"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1664: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:1664"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/regression.at:1664: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1664"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1664: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1664"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1664:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1664"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "x: 1, y: 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1664: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1664"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_297
+#AT_START_298
+at_fn_group_banner 298 'regression.at:1665' \
+  "Lex and parse params: glr.c" "                    " 17
+at_xfail=no
+(
+  $as_echo "298. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+## FIXME: Improve parsing of parse-param and use the generated
+## yyerror.
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines
+%locations
+%skeleton "glr.c"
+%union { int ival; }
+%parse-param { int x }
+// Spaces, tabs, and new lines.
+%parse-param { 
+	 int y	 
+         
+ 
+}
+
+%{
+#include <stdio.h>
+#include <stdlib.h>
+
+  static void yyerror (int x, int y,  const char *msg);
+  static int yylex (void);
+%}
+
+%%
+exp: 'a' { fprintf (stdout, "x: %d, y: %d\n", x, y); };
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (int x, int y,  const char *msg)
+{
+  YYUSE(x);
+  YYUSE(y);
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (yylloc).first_line = (yylloc).last_line = 1;
+  (yylloc).first_column = (yylloc).last_column = toknum;
+  return res;
+}
+
+
+
+int
+main (void)
+{
+  return !!yyparse(1, 2);
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1665: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1665"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1665: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "regression.at:1665"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1665: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1665"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1665: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1665"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1665: bison -o input.c input.y"
+at_fn_check_prepare_trace "regression.at:1665"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+   { set +x
+$as_echo "$at_srcdir/regression.at:1665: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "regression.at:1665"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1665: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "regression.at:1665"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1665:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1665"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "x: 1, y: 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1665: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1665"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1665"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_298
+#AT_START_299
+at_fn_group_banner 299 'regression.at:1666' \
+  "Lex and parse params: lalr1.cc" "                 " 17
+at_xfail=no
+(
+  $as_echo "299. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+## FIXME: Improve parsing of parse-param and use the generated
+## yyerror.
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines
+%locations
+%skeleton "lalr1.cc"
+%union { int ival; }
+%parse-param { int x }
+// Spaces, tabs, and new lines.
+%parse-param { 
+	 int y	 
+         
+ 
+}
+
+%{
+#include <stdio.h>
+#include <stdlib.h>
+
+
+  static int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+%}
+
+%%
+exp: 'a' { fprintf (stdout, "x: %d, y: %d\n", x, y); };
+%%
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+#include <assert.h>
+static
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;(void) llocp;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (*llocp).begin.line = (*llocp).end.line = 1;
+  (*llocp).begin.column = (*llocp).end.column = toknum;
+  return res;
+}
+
+int
+yyparse (int x, int y)
+{
+  yy::parser parser(x, y);
+  return parser.parse ();
+}
+
+
+int
+main (void)
+{
+  return !!yyparse(1, 2);
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1666: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1666"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1666: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "regression.at:1666"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1666: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1666"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1666: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1666"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1666: bison -o input.cc input.y"
+at_fn_check_prepare_trace "regression.at:1666"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1666: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "regression.at:1666"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1666: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "regression.at:1666"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1666:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1666"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "x: 1, y: 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1666: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1666"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_299
+#AT_START_300
+at_fn_group_banner 300 'regression.at:1667' \
+  "Lex and parse params: glr.cc" "                   " 17
+at_xfail=no
+(
+  $as_echo "300. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+## FIXME: Improve parsing of parse-param and use the generated
+## yyerror.
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%defines
+%locations
+%skeleton "glr.cc"
+%union { int ival; }
+%parse-param { int x }
+// Spaces, tabs, and new lines.
+%parse-param { 
+	 int y	 
+         
+ 
+}
+
+%{
+#include <stdio.h>
+#include <stdlib.h>
+
+
+  static int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp);
+%}
+
+%%
+exp: 'a' { fprintf (stdout, "x: %d, y: %d\n", x, y); };
+%%
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  (void) l;
+  std::cerr << l << ": " << m << std::endl;
+}
+#include <assert.h>
+static
+int yylex (yy::parser::semantic_type *lvalp, yy::parser::location_type *llocp)
+{
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  (void) lvalp;(void) llocp;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  (*llocp).begin.line = (*llocp).end.line = 1;
+  (*llocp).begin.column = (*llocp).end.column = toknum;
+  return res;
+}
+
+int
+yyparse (int x, int y)
+{
+  yy::parser parser(x, y);
+  return parser.parse ();
+}
+
+
+int
+main (void)
+{
+  return !!yyparse(1, 2);
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/regression.at:1667: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "regression.at:1667"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/regression.at:1667: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "regression.at:1667"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1667: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1667"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/regression.at:1667: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "regression.at:1667"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/regression.at:1667: bison -o input.cc input.y"
+at_fn_check_prepare_trace "regression.at:1667"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1667: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "regression.at:1667"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1667: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "regression.at:1667"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1667:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "regression.at:1667"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "x: 1, y: 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/regression.at:1667: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "regression.at:1667"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/regression.at:1667"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_300
+#AT_START_301
+at_fn_group_banner 301 'c++.at:101' \
+  "Doxygen Public Documentation" "                   " 18
+at_xfail=no
+(
+  $as_echo "301. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >input.yy <<'_ATEOF'
@@ -59429,37 +147973,101 @@
 %%
 exp:;
 %%
-yy::parser::error (const location& l, const std::string& m)
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
 {
-  std::cerr << l << s << std::endl;
+  (void) l;
+  std::cerr << m << std::endl;
 }
 _ATEOF
 
 
-$at_traceoff
-echo "c++.at:102: bison -o input.cc input.yy"
-echo c++.at:102 >$at_check_line_file
-( $at_traceon; bison -o input.cc input.yy ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "c++.at:102: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:101: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.yy"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:101"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/c++.at:101: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.yy"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.yy" "c++.at:101"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:101: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:101"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:101: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:101"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:101: bison -o input.cc input.yy"
+at_fn_check_prepare_trace "c++.at:101"
+( $at_check_trace; bison -o input.cc input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 cat >Doxyfile <<'_ATEOF'
@@ -59508,71 +148116,47 @@
 _ATEOF
 
 
-$at_traceoff
-echo "c++.at:102: doxygen --version || exit 77"
-echo c++.at:102 >$at_check_line_file
-( $at_traceon; doxygen --version || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "c++.at:102: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/c++.at:101: doxygen --version || exit 77"
+at_fn_check_prepare_trace "c++.at:101"
+( $at_check_trace; doxygen --version || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-$at_traceoff
-echo "c++.at:102: doxygen"
-echo c++.at:102 >$at_check_line_file
-( $at_traceon; doxygen ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "c++.at:102: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/c++.at:101: doxygen"
+at_fn_check_prepare_trace "c++.at:101"
+( $at_check_trace; doxygen
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  132 ) # 132. c++.at:103: Doxygen Private Documentation
-    at_setup_line='c++.at:103'
-    at_desc='Doxygen Private Documentation'
-    $at_quiet $ECHO_N "132: Doxygen Private Documentation                $ECHO_C"
-    at_xfail=no
-    (
-      echo "132. c++.at:103: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_301
+#AT_START_302
+at_fn_group_banner 302 'c++.at:102' \
+  "Doxygen Private Documentation" "                  " 18
+at_xfail=no
+(
+  $as_echo "302. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >input.yy <<'_ATEOF'
@@ -59583,37 +148167,101 @@
 %%
 exp:;
 %%
-yy::parser::error (const location& l, const std::string& m)
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
 {
-  std::cerr << l << s << std::endl;
+  (void) l;
+  std::cerr << m << std::endl;
 }
 _ATEOF
 
 
-$at_traceoff
-echo "c++.at:103: bison -o input.cc input.yy"
-echo c++.at:103 >$at_check_line_file
-( $at_traceon; bison -o input.cc input.yy ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "c++.at:103: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:102: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.yy"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:102"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:102"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/c++.at:102: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.yy"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.yy" "c++.at:102"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:102"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:102: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:102"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:102"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:102: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:102"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:102"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:102: bison -o input.cc input.yy"
+at_fn_check_prepare_trace "c++.at:102"
+( $at_check_trace; bison -o input.cc input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:102"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
 cat >Doxyfile <<'_ATEOF'
@@ -59662,102 +148310,13909 @@
 _ATEOF
 
 
-$at_traceoff
-echo "c++.at:103: doxygen --version || exit 77"
-echo c++.at:103 >$at_check_line_file
-( $at_traceon; doxygen --version || exit 77 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "c++.at:103: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/c++.at:102: doxygen --version || exit 77"
+at_fn_check_prepare_trace "c++.at:102"
+( $at_check_trace; doxygen --version || exit 77
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:102"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+{ set +x
+$as_echo "$at_srcdir/c++.at:102: doxygen"
+at_fn_check_prepare_trace "c++.at:102"
+( $at_check_trace; doxygen
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:102"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_302
+#AT_START_303
+at_fn_group_banner 303 'c++.at:160' \
+  "Relative namespace references" "                  " 18
+at_xfail=no
+(
+  $as_echo "303. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "foo"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+foo::parser::error (const foo::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  foo::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:161: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:161"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:161: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:161"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:161: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:161"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:161: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:161"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:161: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:161"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "c++.at:103: doxygen"
-echo c++.at:103 >$at_check_line_file
-( $at_traceon; doxygen ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "c++.at:103: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:161: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:161"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:161: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:161"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:161:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:161"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:161: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:161"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:161"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "foo::bar"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+foo::bar::parser::error (const foo::bar::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  foo::bar::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:162: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:162"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:162: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:162"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:162: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:162"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:162: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:162"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/c++.at:162: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:162"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
 
-  banner-17 ) # Banner 17. cxx-type.at:19
-    cat <<\_ATEOF
+{ set +x
+$as_echo "$at_srcdir/c++.at:162: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:162"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-C++ Type Syntax (GLR).
+{ set +x
+$as_echo "$at_srcdir/c++.at:162: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:162"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:162:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:162"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:162: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:162"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:162"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "foo::bar::baz"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+foo::bar::baz::parser::error (const foo::bar::baz::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  foo::bar::baz::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:163: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:163"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:163: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:163"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:163: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:163"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:163: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:163"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:163: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:163"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:163: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:163"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:163: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:163"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:163:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:163"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:163: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:163"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_303
+#AT_START_304
+at_fn_group_banner 304 'c++.at:166' \
+  "Absolute namespace references" "                  " 18
+at_xfail=no
+(
+  $as_echo "304. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "::foo"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+::foo::parser::error (const ::foo::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  ::foo::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:167: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:167"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:167: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:167"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:167: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:167"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:167: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:167"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:167: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:167"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:167: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:167"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:167: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:167"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:167:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:167"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:167: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:167"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:167"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "::foo::bar"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+::foo::bar::parser::error (const ::foo::bar::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  ::foo::bar::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:168: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:168"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:168: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:168"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:168: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:168"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:168: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:168"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:168: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:168"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:168: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:168"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:168: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:168"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:168:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:168"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:168: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:168"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "::foo::bar::baz"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+::foo::bar::baz::parser::error (const ::foo::bar::baz::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  ::foo::bar::baz::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:169: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:169"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:169: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:169"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:169: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:169"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:169: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:169"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:169: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:169"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:169: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:169"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:169: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:169"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:169:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:169"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:169: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:169"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:169"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "	::foo"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+	::foo::parser::error (const 	::foo::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  	::foo::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:170: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:170"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:170: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:170"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:170: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:170"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:170: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:170"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:170: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:170"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:170: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:170"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:170: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:170"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:170:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:170"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:170: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:170"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "  	 ::foo::bar"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+  	 ::foo::bar::parser::error (const   	 ::foo::bar::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+    	 ::foo::bar::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:171: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:171"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:171: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:171"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:171: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:171"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:171: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:171"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:171: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:171"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:171: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:171"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:171: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:171"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:171:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:171"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:171: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:171"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:171"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "  ::foo::bar::baz"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+  ::foo::bar::baz::parser::error (const   ::foo::bar::baz::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+    ::foo::bar::baz::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:172: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:172"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:172: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:172"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:172: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:172"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:172: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:172"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:172: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:172"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:172: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:172"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:172: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:172"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:172:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "c++.at:172"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:172: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:172"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:172"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_304
+#AT_START_305
+at_fn_group_banner 305 'c++.at:175' \
+  "Syntactically invalid namespace references" "     " 18
+at_xfail=no
+(
+  $as_echo "305. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace ":foo:bar"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+:foo:bar::parser::error (const :foo:bar::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  :foo:bar::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:176: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:176"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:176"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:176: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:176"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:176"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:176: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:176"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:176"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:176: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:176"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:176"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:176: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:176"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:176"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "foo: :bar"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+foo: :bar::parser::error (const foo: :bar::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  foo: :bar::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:177: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:177"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:177"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:177: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:177"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:177"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:177: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:177"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:177"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:177: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:177"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:177"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:177: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:177"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:177"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+# This one is interesting because `[3]' is encoded as `[3]', which
+# contains single occurrences of `:'.
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "foo[3]::bar::baz"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+foo[3]::bar::baz::parser::error (const foo[3]::bar::baz::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  foo[3]::bar::baz::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:180: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:180"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:180"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:180: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:180"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:180"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:180: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:180"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:180"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:180: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:180"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:180"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:180: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:180"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:180"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "foo::bar,baz"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+foo::bar,baz::parser::error (const foo::bar,baz::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  foo::bar,baz::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:181: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:181"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:181"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:181: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:181"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:181"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:181: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:181"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:181"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:181: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:181"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:181"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:181: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:181"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:181"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%language "C++"
+%defines
+%define namespace "foo::bar::(baz"
+%union { int i; }
+%define global_tokens_and_yystype
+
+%code {
+  // YYSTYPE contains a namespace reference.
+  int yylex (YYSTYPE *lval) {
+    lval->i = 3;
+    return 0;
+  }
+}
+
+%%
+
+start: ;
+
+%%
+
+void
+foo::bar::(baz::parser::error (const foo::bar::(baz::parser::location_type &loc,
+                     const std::string &msg)
+{
+  std::cerr << "At " << loc << ": " << msg << std::endl;
+}
+
+int
+main (void)
+{
+  foo::bar::(baz::parser p;
+  return p.parse ();
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:182: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:182"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:182: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y" "c++.at:182"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:182: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:182"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:182: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:182"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:182: bison -o input.cc input.y"
+at_fn_check_prepare_trace "c++.at:182"
+( $at_check_trace; bison -o input.cc input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_305
+#AT_START_306
+at_fn_group_banner 306 'c++.at:190' \
+  "Exception safety" "                               " 18
+at_xfail=no
+(
+  $as_echo "306. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+cat >input.yy <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+%skeleton "lalr1.cc"
+%defines // FIXME: Mandated in 2.6.
+%debug
+%error-verbose
+
+%code requires
+{
+  #include <cassert>
+  #include <cstdlib> // size_t and getenv.
+  #include <iostream>
+  #include <list>
+
+  bool debug = false;
+
+  /// A class that counts its number of instances.
+  struct Object
+  {
+    typedef std::list<const Object*> objects;
+    static objects instances;
+    char val;
+
+    static bool
+    empty ()
+    {
+      return instances.empty();
+    }
+
+    static void
+    log (Object const *o, const std::string& msg)
+    {
+      if (debug)
+        {
+          if (o)
+            std::cerr << o << "->";
+          std::cerr << msg << " {";
+          const char* sep = " ";
+          for (objects::const_iterator i = instances.begin(),
+                                       i_end = instances.end();
+               i != i_end;
+               ++i)
+            {
+              std::cerr << sep << *i;
+              sep = ", ";
+            }
+          std::cerr << " }" << std::endl;
+        }
+    }
+
+    Object (char v)
+      : val (v)
+    {
+      instances.push_back(this);
+      log (this, "Object::Object");
+    }
+
+    ~Object ()
+    {
+      instances.remove(this);
+      log (this, "Object::~Object");
+    }
+  };
+}
+
+%code
+{
+  #include <cassert>
+  #include <cstring> // strchr
+  #include <stdexcept>
+  int yylex (yy::parser::semantic_type *);
+  Object::objects Object::instances;
+  static char const *input;
+}
+
+%union
+{
+  Object *obj;
+}
+
+%initial-action
+{
+  if (strchr (input, 'i'))
+    throw std::runtime_error ("initial-action");
+}
+
+%destructor { delete $$; } <obj>;
+%printer
+{
+  yyo << $$ << " '" << $$->val << '\'';
+  if ($$->val == 'p')
+    throw std::runtime_error ("printer");
+} <obj>;
+
+%token <obj> 'a' 'E' 'e' 'p' 'R' 's' 'T'
+%type  <obj> list item
+
+%%
+
+start: list { delete $1; };
+
+list:
+  item       { $$ = $1; }
+| item list  { $$ = $1; delete $2; } // Right recursion to load the stack.
+;
+
+item:
+  'a'  { $$ = $1; }
+| 'e'  { YYUSE ($$); YYUSE($1); error (location_type(), "syntax error"); }
+// Not just 'E', otherwise we reduce when 'E' is the lookahead, and
+// then the stack is emptied, defeating the point of the test.
+| 'E' 'a' { YYUSE($1); $$ = $2; }
+| 'R'  { $$ = YY_NULL; delete $1; YYERROR; }
+| 'p'  { $$ = $1; }
+| 's'  { $$ = $1; throw std::runtime_error ("reduction"); }
+| 'T'  { $$ = YY_NULL; delete $1; YYABORT; }
+| error { $$ = YY_NULL; yyerrok; }
+;
+%%
+
+int
+yylex (yy::parser::semantic_type *lvalp)
+{
+  // 'a': no error.
+  // 'e': user action calls error.
+  // 'E': syntax error, with yyerror that throws.
+  // 'i': initial action throws.
+  // 'l': yylex throws.
+  // 'R': call YYERROR in the action
+  // 's': reduction throws.
+  // 'T': call YYABORT in the action
+  switch (int res = *input++)
+  {
+    case 'l':
+      throw std::runtime_error ("yylex");
+    default:
+      lvalp->obj = new Object (res);
+      // Fall through.
+    case 0:
+      return res;
+  }
+}
+
+/* A C++ error reporting function.  */
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  YYUSE (l);
+  throw std::runtime_error (m);
+}
+
+int
+main (int argc, const char *argv[])
+{
+  switch (argc)
+  {
+    case 2:
+      input = argv[1];
+      break;
+    case 3:
+      assert (!strcmp (argv[1], "--debug"));
+      debug = 1;
+      input = argv[2];
+      break;
+    default:
+      abort ();
+  }
+
+  yy::parser parser;
+  debug |= !!getenv ("YYDEBUG");
+  parser.set_debug_level (debug);
+  int res = 2;
+  try
+  {
+    res = parser.parse ();
+  }
+  catch (const std::exception& e)
+  {
+    std::cerr << "exception caught: " << e.what () << std::endl;
+  }
+  catch (...)
+  {
+    std::cerr << "unknown exception caught" << std::endl;
+  }
+  Object::log (YY_NULL, "end");
+  assert (Object::empty());
+  return res;
+}
+_ATEOF
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/c++.at:382: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.cc --report=all input.yy"
+at_fn_check_prepare_notrace 'an embedded newline' "c++.at:382"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.cc --report=all input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:382"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/c++.at:382: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc --report=all input.yy"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc --report=all input.yy" "c++.at:382"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.cc --report=all input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:382"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:382: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:382"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:382"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/c++.at:382: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "c++.at:382"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:382"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/c++.at:382: bison -o input.cc --report=all input.yy"
+at_fn_check_prepare_trace "c++.at:382"
+( $at_check_trace; bison -o input.cc --report=all input.yy
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:382"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:383: \$BISON_CXX_WORKS"
+at_fn_check_prepare_dynamic "$BISON_CXX_WORKS" "c++.at:383"
+( $at_check_trace; $BISON_CXX_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:383"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:383: \$CXX \$CXXFLAGS \$CPPFLAGS \$LDFLAGS -o input input.cc \$LIBS"
+at_fn_check_prepare_dynamic "$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS" "c++.at:383"
+( $at_check_trace; $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS -o input input.cc $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:383"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:385:  \$PREPARSER ./input aaaas"
+at_fn_check_prepare_dynamic " $PREPARSER ./input aaaas" "c++.at:385"
+( $at_check_trace;  $PREPARSER ./input aaaas
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/c++.at:385"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:385: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:385"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "exception caught: reduction
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:385"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:389:  \$PREPARSER ./input aaaal"
+at_fn_check_prepare_dynamic " $PREPARSER ./input aaaal" "c++.at:389"
+( $at_check_trace;  $PREPARSER ./input aaaal
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/c++.at:389"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:389: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:389"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "exception caught: yylex
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:389"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:393:  \$PREPARSER ./input i"
+at_fn_check_prepare_dynamic " $PREPARSER ./input i" "c++.at:393"
+( $at_check_trace;  $PREPARSER ./input i
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/c++.at:393"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:393: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:393"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "exception caught: initial-action
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:393"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:397:  \$PREPARSER ./input aaaap"
+at_fn_check_prepare_dynamic " $PREPARSER ./input aaaap" "c++.at:397"
+( $at_check_trace;  $PREPARSER ./input aaaap
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:397: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:397"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:399:  \$PREPARSER ./input --debug aaaap"
+at_fn_check_prepare_dynamic " $PREPARSER ./input --debug aaaap" "c++.at:399"
+( $at_check_trace;  $PREPARSER ./input --debug aaaap
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/c++.at:399"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:399: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:399"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:399"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:400: grep '^exception caught: printer\$' stderr"
+at_fn_check_prepare_dynamic "grep '^exception caught: printer$' stderr" "c++.at:400"
+( $at_check_trace; grep '^exception caught: printer$' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:400"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:402:  \$PREPARSER ./input aaaae"
+at_fn_check_prepare_dynamic " $PREPARSER ./input aaaae" "c++.at:402"
+( $at_check_trace;  $PREPARSER ./input aaaae
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/c++.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:402: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:402"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "exception caught: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:406:  \$PREPARSER ./input aaaaE"
+at_fn_check_prepare_dynamic " $PREPARSER ./input aaaaE" "c++.at:406"
+( $at_check_trace;  $PREPARSER ./input aaaaE
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/c++.at:406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:406: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:406"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "exception caught: syntax error, unexpected \$end, expecting 'a'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:406"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:410:  \$PREPARSER ./input aaaaT"
+at_fn_check_prepare_dynamic " $PREPARSER ./input aaaaT" "c++.at:410"
+( $at_check_trace;  $PREPARSER ./input aaaaT
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/c++.at:410"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:410: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:410"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:410"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# There is error-recovery, so exit success.
+{ set +x
+$as_echo "$at_srcdir/c++.at:413:  \$PREPARSER ./input aaaaR"
+at_fn_check_prepare_dynamic " $PREPARSER ./input aaaaR" "c++.at:413"
+( $at_check_trace;  $PREPARSER ./input aaaaR
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:413"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/c++.at:413: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "c++.at:413"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/c++.at:413"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_306
+#AT_START_307
+at_fn_group_banner 307 'java.at:360' \
+  "Calculator " "                                    " 19
+at_xfail=no
+(
+  $as_echo "307. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+cat >Calc.y <<'_ATEOF'
+/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+
+%code {
+
+  public static void main (String args[]) throws IOException
+  {
+    CalcLexer l = new CalcLexer (System.in);
+    Calc p = new Calc (l);
+    p.parse ();
+  }
+
+}
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror ( "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
+
+
+%%
+class CalcLexer implements Calc.Lexer {
+
+  StreamTokenizer st;
+
+  public CalcLexer (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
+
+
+
+  public void yyerror (String s)
+  {
+    System.err.println (s);
+  }
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+
+}
+
+
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
 
 _ATEOF
-    ;;
-
-  133 ) # 133. cxx-type.at:412: GLR: Resolve ambiguity, impure, no locations
-    at_setup_line='cxx-type.at:412'
-    at_desc='GLR: Resolve ambiguity, impure, no locations'
-    $at_quiet $ECHO_N "133: GLR: Resolve ambiguity, impure, no locations $ECHO_C"
-    at_xfail=no
-    (
-      echo "133. cxx-type.at:412: testing ..."
-      $at_traceon
 
 
 
 
 
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:360: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:360"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-# Using yacc.c?
+  { set +x
+$as_echo "$at_srcdir/java.at:360: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y" "java.at:360"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:360: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:360"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:360: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:360"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:360: bison -o Calc.java Calc.y"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; bison -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:360" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:360"
+$as_echo "java.at:360" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:360"
+{ set +x
+$as_echo "$at_srcdir/java.at:360: \$SHELL ../../../javacomp.sh Calc.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh Calc.java" "java.at:360"
+( $at_check_trace; $SHELL ../../../javacomp.sh Calc.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+0 0
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected number
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '='
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < /dev/null"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < /dev/null" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_307
+#AT_START_308
+at_fn_group_banner 308 'java.at:360' \
+  "Calculator %error-verbose " "                     " 19
+at_xfail=no
+(
+  $as_echo "308. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 
 
+cat >Calc.y <<'_ATEOF'
+/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+%error-verbose
+%code {
+
+  public static void main (String args[]) throws IOException
+  {
+    CalcLexer l = new CalcLexer (System.in);
+    Calc p = new Calc (l);
+    p.parse ();
+  }
+
+}
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror ( "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
 
 
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
+%%
+class CalcLexer implements Calc.Lexer {
 
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
+  StreamTokenizer st;
+
+  public CalcLexer (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
 
 
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
+
+  public void yyerror (String s)
+  {
+    System.err.println (s);
+  }
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+
+}
+
+
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
+
+_ATEOF
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:360: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:360"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:360: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y" "java.at:360"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:360: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:360"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:360: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:360"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:360: bison -o Calc.java Calc.y"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; bison -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:360" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:360"
+$as_echo "java.at:360" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:360"
+{ set +x
+$as_echo "$at_srcdir/java.at:360: \$SHELL ../../../javacomp.sh Calc.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh Calc.java" "java.at:360"
+( $at_check_trace; $SHELL ../../../javacomp.sh Calc.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+0 0
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected number
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '='
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < /dev/null"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < /dev/null" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_308
+#AT_START_309
+at_fn_group_banner 309 'java.at:360' \
+  "Calculator %locations " "                         " 19
+at_xfail=no
+(
+  $as_echo "309. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+cat >Calc.y <<'_ATEOF'
+/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+%locations
+%code {
+
+  public static void main (String args[]) throws IOException
+  {
+    CalcLexer l = new CalcLexer (System.in);
+    Calc p = new Calc (l);
+    p.parse ();
+  }
+
+}
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror (@$, "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
+
+
+%%
+class CalcLexer implements Calc.Lexer {
+
+  StreamTokenizer st;
+
+  public CalcLexer (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
+
+
+  Position yypos = new Position (1, 0);
+
+  public Position getStartPos() {
+    return yypos;
+  }
+
+  public Position getEndPos() {
+    return yypos;
+  }
+
+  public void yyerror (Calc.Location l, String s)
+  {
+    if (l == null)
+      System.err.println (s);
+    else
+      System.err.println (l + ": " + s);
+  }
+
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+    yypos = new Position (yypos.lineno (),
+                                            yypos.token () + 1);
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+        yypos = new Position (yypos.lineno () + 1, 0);
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+
+}
+
+
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
+
+_ATEOF
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:360: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:360"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:360: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y" "java.at:360"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:360: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:360"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:360: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:360"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:360: bison -o Calc.java Calc.y"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; bison -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:360" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:360"
+$as_echo "java.at:360" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:360"
+{ set +x
+$as_echo "$at_srcdir/java.at:360: \$SHELL ../../../javacomp.sh Calc.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh Calc.java" "java.at:360"
+( $at_check_trace; $SHELL ../../../javacomp.sh Calc.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+0 0
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected number
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '='
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < /dev/null"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < /dev/null" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_309
+#AT_START_310
+at_fn_group_banner 310 'java.at:360' \
+  "Calculator %error-verbose %locations " "          " 19
+at_xfail=no
+(
+  $as_echo "310. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+cat >Calc.y <<'_ATEOF'
+/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+%error-verbose %locations
+%code {
+
+  public static void main (String args[]) throws IOException
+  {
+    CalcLexer l = new CalcLexer (System.in);
+    Calc p = new Calc (l);
+    p.parse ();
+  }
+
+}
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror (@$, "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
+
+
+%%
+class CalcLexer implements Calc.Lexer {
+
+  StreamTokenizer st;
+
+  public CalcLexer (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
+
+
+  Position yypos = new Position (1, 0);
+
+  public Position getStartPos() {
+    return yypos;
+  }
+
+  public Position getEndPos() {
+    return yypos;
+  }
+
+  public void yyerror (Calc.Location l, String s)
+  {
+    if (l == null)
+      System.err.println (s);
+    else
+      System.err.println (l + ": " + s);
+  }
+
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+    yypos = new Position (yypos.lineno (),
+                                            yypos.token () + 1);
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+        yypos = new Position (yypos.lineno () + 1, 0);
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+
+}
+
+
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
+
+_ATEOF
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:360: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:360"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:360: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y" "java.at:360"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:360: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:360"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:360: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:360"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:360: bison -o Calc.java Calc.y"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; bison -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:360" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:360"
+$as_echo "java.at:360" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:360"
+{ set +x
+$as_echo "$at_srcdir/java.at:360: \$SHELL ../../../javacomp.sh Calc.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh Calc.java" "java.at:360"
+( $at_check_trace; $SHELL ../../../javacomp.sh Calc.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+0 0
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected number
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '='
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < /dev/null"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < /dev/null" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:360:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:360"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:360: cat stderr"
+at_fn_check_prepare_trace "java.at:360"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_310
+#AT_START_311
+at_fn_group_banner 311 'java.at:369' \
+  "Calculator %lex-param { InputStream is } " "      " 19
+at_xfail=no
+(
+  $as_echo "311. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+cat >Calc.y <<'_ATEOF'
+/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+%lex-param { InputStream is }
+%code {
+
+  public static void main (String args[]) throws IOException
+  {
+    new Calc (System.in).parse ();
+  }
+
+}
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror ( "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
+
+
+%code lexer {
+
+  StreamTokenizer st;
+
+  public YYLexer (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
+
+
+
+  public void yyerror (String s)
+  {
+    System.err.println (s);
+  }
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+
+};
+%%
+
+
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
+
+_ATEOF
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:369: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:369"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:369: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y" "java.at:369"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:369: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:369"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:369: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:369"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:369: bison -o Calc.java Calc.y"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; bison -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:369" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:369"
+$as_echo "java.at:369" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:369"
+{ set +x
+$as_echo "$at_srcdir/java.at:369: \$SHELL ../../../javacomp.sh Calc.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh Calc.java" "java.at:369"
+( $at_check_trace; $SHELL ../../../javacomp.sh Calc.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+0 0
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected number
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '='
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < /dev/null"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < /dev/null" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_311
+#AT_START_312
+at_fn_group_banner 312 'java.at:369' \
+  "Calculator %error-verbose %lex-param { InputStream is } " "" 19
+at_xfail=no
+(
+  $as_echo "312. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+cat >Calc.y <<'_ATEOF'
+/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+%error-verbose %lex-param { InputStream is }
+%code {
+
+  public static void main (String args[]) throws IOException
+  {
+    new Calc (System.in).parse ();
+  }
+
+}
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror ( "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
+
+
+%code lexer {
+
+  StreamTokenizer st;
+
+  public YYLexer (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
+
+
+
+  public void yyerror (String s)
+  {
+    System.err.println (s);
+  }
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+
+};
+%%
+
+
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
+
+_ATEOF
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:369: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:369"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:369: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y" "java.at:369"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:369: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:369"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:369: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:369"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:369: bison -o Calc.java Calc.y"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; bison -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:369" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:369"
+$as_echo "java.at:369" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:369"
+{ set +x
+$as_echo "$at_srcdir/java.at:369: \$SHELL ../../../javacomp.sh Calc.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh Calc.java" "java.at:369"
+( $at_check_trace; $SHELL ../../../javacomp.sh Calc.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+0 0
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected number
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '='
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < /dev/null"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < /dev/null" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+sed 's/^[-0-9.]*: //' expout >at-expout
+mv at-expout expout
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_312
+#AT_START_313
+at_fn_group_banner 313 'java.at:369' \
+  "Calculator %locations %lex-param { InputStream is } " "" 19
+at_xfail=no
+(
+  $as_echo "313. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+cat >Calc.y <<'_ATEOF'
+/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+%locations %lex-param { InputStream is }
+%code {
+
+  public static void main (String args[]) throws IOException
+  {
+    new Calc (System.in).parse ();
+  }
+
+}
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror (@$, "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
+
+
+%code lexer {
+
+  StreamTokenizer st;
+
+  public YYLexer (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
+
+
+  Position yypos = new Position (1, 0);
+
+  public Position getStartPos() {
+    return yypos;
+  }
+
+  public Position getEndPos() {
+    return yypos;
+  }
+
+  public void yyerror (Calc.Location l, String s)
+  {
+    if (l == null)
+      System.err.println (s);
+    else
+      System.err.println (l + ": " + s);
+  }
+
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+    yypos = new Position (yypos.lineno (),
+                                            yypos.token () + 1);
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+        yypos = new Position (yypos.lineno () + 1, 0);
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+
+};
+%%
+
+
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
+
+_ATEOF
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:369: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:369"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:369: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y" "java.at:369"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:369: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:369"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:369: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:369"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:369: bison -o Calc.java Calc.y"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; bison -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:369" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:369"
+$as_echo "java.at:369" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:369"
+{ set +x
+$as_echo "$at_srcdir/java.at:369: \$SHELL ../../../javacomp.sh Calc.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh Calc.java" "java.at:369"
+( $at_check_trace; $SHELL ../../../javacomp.sh Calc.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+0 0
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected number
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '='
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < /dev/null"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < /dev/null" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+sed 's/syntax error, .*$/syntax error/' expout >at-expout
+mv at-expout expout
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_313
+#AT_START_314
+at_fn_group_banner 314 'java.at:369' \
+  "Calculator %error-verbose %locations %lex-param { InputStream is } " "" 19
+at_xfail=no
+(
+  $as_echo "314. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+cat >Calc.y <<'_ATEOF'
+/* Infix notation calculator--calc */
+%language "Java"
+%name-prefix "Calc"
+%define parser_class_name "Calc"
+%define public
+
+%error-verbose %locations %lex-param { InputStream is }
+%code {
+
+  public static void main (String args[]) throws IOException
+  {
+    new Calc (System.in).parse ();
+  }
+
+}
+
+%code imports {
+  import java.io.StreamTokenizer;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.IOException;
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '=' /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%left NEG     /* negation--unary minus */
+%right '^'    /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'
+| error '\n'
+;
+
+exp:
+  NUM                { $$ = $1;                                             }
+| exp '=' exp
+  {
+    if ($1.intValue () != $3.intValue ())
+      yyerror (@$, "calc: error: " + $1 + " != " + $3);
+  }
+| exp '+' exp        { $$ = new Integer ($1.intValue () + $3.intValue ());  }
+| exp '-' exp        { $$ = new Integer ($1.intValue () - $3.intValue ());  }
+| exp '*' exp        { $$ = new Integer ($1.intValue () * $3.intValue ());  }
+| exp '/' exp        { $$ = new Integer ($1.intValue () / $3.intValue ());  }
+| '-' exp  %prec NEG { $$ = new Integer (-$2.intValue ());                  }
+| exp '^' exp        { $$ = new Integer ((int)
+                                         Math.pow ($1.intValue (),
+                                                   $3.intValue ()));        }
+| '(' exp ')'        { $$ = $2;                                             }
+| '(' error ')'      { $$ = new Integer (1111);                             }
+| '!'                { $$ = new Integer (0); return YYERROR;                }
+| '-' error          { $$ = new Integer (0); return YYERROR;                }
+;
+
+
+%code lexer {
+
+  StreamTokenizer st;
+
+  public YYLexer (InputStream is)
+  {
+    st = new StreamTokenizer (new InputStreamReader (is));
+    st.resetSyntax ();
+    st.eolIsSignificant (true);
+    st.whitespaceChars (9, 9);
+    st.whitespaceChars (32, 32);
+    st.wordChars (48, 57);
+  }
+
+
+  Position yypos = new Position (1, 0);
+
+  public Position getStartPos() {
+    return yypos;
+  }
+
+  public Position getEndPos() {
+    return yypos;
+  }
+
+  public void yyerror (Calc.Location l, String s)
+  {
+    if (l == null)
+      System.err.println (s);
+    else
+      System.err.println (l + ": " + s);
+  }
+
+
+  Integer yylval;
+
+  public Object getLVal() {
+    return yylval;
+  }
+
+  public int yylex () throws IOException {
+    int ttype = st.nextToken ();
+    yypos = new Position (yypos.lineno (),
+                                            yypos.token () + 1);
+    if (ttype == st.TT_EOF)
+      return Calc.EOF;
+
+    else if (ttype == st.TT_EOL)
+      {
+        yypos = new Position (yypos.lineno () + 1, 0);
+        return (int) '\n';
+      }
+
+    else if (ttype == st.TT_WORD)
+      {
+        yylval = new Integer (st.sval);
+        return Calc.NUM;
+      }
+
+    else
+      return st.ttype;
+  }
+
+
+
+};
+%%
+
+
+class Position {
+  public int line;
+  public int token;
+
+  public Position ()
+  {
+    line = 0;
+    token = 0;
+  }
+
+  public Position (int l, int t)
+  {
+    line = l;
+    token = t;
+  }
+
+  public boolean equals (Position l)
+  {
+    return l.line == line && l.token == token;
+  }
+
+  public String toString ()
+  {
+    return Integer.toString (line) + "." + Integer.toString(token);
+  }
+
+  public int lineno ()
+  {
+    return line;
+  }
+
+  public int token ()
+  {
+    return token;
+  }
+}
+
+_ATEOF
+
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:369: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:369"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:369: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y" "java.at:369"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:369: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:369"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:369: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:369"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:369: bison -o Calc.java Calc.y"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; bison -o Calc.java Calc.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:369" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:369"
+$as_echo "java.at:369" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:369"
+{ set +x
+$as_echo "$at_srcdir/java.at:369: \$SHELL ../../../javacomp.sh Calc.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh Calc.java" "java.at:369"
+( $at_check_trace; $SHELL ../../../javacomp.sh Calc.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Test the priorities.
+cat >input <<'_ATEOF'
+1 + 2 * 3 = 7
+1 + 2 * -3 = -5
+
+-1^2 = -1
+(-1)^2 = 1
+
+---1 = -1
+
+1 - 2 - 3 = -4
+1 - (2 - 3) = 2
+
+2^2^3 = 256
+(2^2)^3 = 64
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Some syntax errors.
+cat >input <<'_ATEOF'
+0 0
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected number
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1//2
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '/', expecting number or '-' or '(' or '!'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+error
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected $undefined
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+1 = 2 = 3
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.4: syntax error, unexpected '='
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+
++1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+2.1: syntax error, unexpected '+'
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Exercise error messages with EOF: work on an empty file.
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < /dev/null"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < /dev/null" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < /dev/null
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.1: syntax error, unexpected end of input
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# Exercise the error token: without it, we die at the first error,
+# hence be sure to
+#
+# - have several errors which exercise different shift/discardings
+#   - (): nothing to pop, nothing to discard
+#   - (1 + 1 + 1 +): a lot to pop, nothing to discard
+#   - (* * *): nothing to pop, a lot to discard
+#   - (1 + 2 * *): some to pop and discard
+#
+# - test the action associated to `error'
+#
+# - check the lookahead that triggers an error is not discarded
+#   when we enter error recovery.  Below, the lookahead causing the
+#   first error is ")", which is needed to recover from the error and
+#   produce the "0" that triggers the "0 != 1" error.
+#
+cat >input <<'_ATEOF'
+() + (1 + 1 + 1 +) + (* * *) + (1 * 2 * *) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.2: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.11: syntax error, unexpected ')', expecting number or '-' or '(' or '!'
+1.14: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.24: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.1-1.27: calc: error: 4444 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+# The same, but this time exercising explicitly triggered syntax errors.
+# POSIX says the lookahead causing the error should not be discarded.
+cat >input <<'_ATEOF'
+(!) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.7: syntax error, unexpected number
+1.1-1.10: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+cat >input <<'_ATEOF'
+(- *) + (0 0) = 1
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/java.at:369:  \$SHELL ../../../javaexec.sh Calc < input"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh Calc < input" "java.at:369"
+( $at_check_trace;  $SHELL ../../../javaexec.sh Calc < input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# Normalize the observed and expected error messages, depending upon the
+# options.
+# 1. Create the reference error message.
+cat >expout <<'_ATEOF'
+1.3: syntax error, unexpected '*', expecting number or '-' or '(' or '!'
+1.8: syntax error, unexpected number
+1.1-1.11: calc: error: 2222 != 1
+_ATEOF
+
+# 2. If locations are not used, remove them.
+
+# 3. If error-verbose is not used, strip the`, unexpected....' part.
+
+# 4. Check
+{ set +x
+$as_echo "$at_srcdir/java.at:369: cat stderr"
+at_fn_check_prepare_trace "java.at:369"
+( $at_check_trace; cat stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_314
+#AT_START_315
+at_fn_group_banner 315 'java.at:455' \
+  "Java parser class and package names" "            " 20
+at_xfail=no
+(
+  $as_echo "315. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:457: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:457"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:457"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:457: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:457"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:457"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:457: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:457"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:457"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:457: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:457"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:457"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:457: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:457"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:457"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:457: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:457"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:457"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:457" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:457"
+$as_echo "java.at:457" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:457"
+{ set +x
+$as_echo "$at_srcdir/java.at:457: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:457"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:457"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:458: grep -c '^class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^class YYParser$' YYParser.java" "java.at:458"
+( $at_check_trace; grep -c '^class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:458"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%name-prefix "Prefix"
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:460: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:460"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:460"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:460: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:460"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:460"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:460: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:460"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:460"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:460: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:460"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:460"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:460: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:460"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:460"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:460: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:460"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:460"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:460" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:460"
+$as_echo "java.at:460" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:460"
+{ set +x
+$as_echo "$at_srcdir/java.at:460: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:460"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:460"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:461: grep -c '^class PrefixParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^class PrefixParser$' YYParser.java" "java.at:461"
+( $at_check_trace; grep -c '^class PrefixParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:461"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%define parser_class_name "ParserClassName"
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:463: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:463"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:463"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:463: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:463"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:463"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:463: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:463"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:463"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:463: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:463"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:463"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:463: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:463"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:463"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:463: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:463"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:463"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:463" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:463"
+$as_echo "java.at:463" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:463"
+{ set +x
+$as_echo "$at_srcdir/java.at:463: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:463"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:463"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:464: grep -c '^class ParserClassName\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^class ParserClassName$' YYParser.java" "java.at:464"
+( $at_check_trace; grep -c '^class ParserClassName$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:464"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%define package "user_java_package"
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:466: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:466"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:466"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:466: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:466"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:466"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:466: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:466"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:466"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:466: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:466"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:466"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:466: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:466"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:466"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:466: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:466"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:466"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:466" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:466"
+$as_echo "java.at:466" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:466"
+{ set +x
+$as_echo "$at_srcdir/java.at:466: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:466"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:466"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:467: grep -c '^package user_java_package;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^package user_java_package;$' YYParser.java" "java.at:467"
+( $at_check_trace; grep -c '^package user_java_package;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:467"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_315
+#AT_START_316
+at_fn_group_banner 316 'java.at:476' \
+  "Java parser class modifiers" "                    " 20
+at_xfail=no
+(
+  $as_echo "316. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%define abstract
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:478: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:478"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:478: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:478"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:478: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:478"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:478: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:478"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:478: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:478"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:478: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:478"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:478" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:478"
+$as_echo "java.at:478" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:478"
+{ set +x
+$as_echo "$at_srcdir/java.at:478: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:478"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:478"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:479: grep -c '^abstract class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^abstract class YYParser$' YYParser.java" "java.at:479"
+( $at_check_trace; grep -c '^abstract class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:479"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%define final
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:481: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:481"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:481: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:481"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:481: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:481"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:481: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:481"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:481: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:481"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:481: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:481"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:481" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:481"
+$as_echo "java.at:481" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:481"
+{ set +x
+$as_echo "$at_srcdir/java.at:481: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:481"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:482: grep -c '^final class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^final class YYParser$' YYParser.java" "java.at:482"
+( $at_check_trace; grep -c '^final class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:482"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%define strictfp
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:484: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:484"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:484: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:484"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:484: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:484"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:484: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:484"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:484: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:484"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:484: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:484"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:484" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:484"
+$as_echo "java.at:484" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:484"
+{ set +x
+$as_echo "$at_srcdir/java.at:484: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:484"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:485: grep -c '^strictfp class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^strictfp class YYParser$' YYParser.java" "java.at:485"
+( $at_check_trace; grep -c '^strictfp class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define abstract
+%define strictfp
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:487: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:487"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:487"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:487: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:487"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:487"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:487: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:487"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:487"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:487: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:487"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:487"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:487: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:487"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:487"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:487: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:487"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:487"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:487" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:487"
+$as_echo "java.at:487" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:487"
+{ set +x
+$as_echo "$at_srcdir/java.at:487: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:487"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:487"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:490: grep -c '^abstract strictfp class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^abstract strictfp class YYParser$' YYParser.java" "java.at:490"
+( $at_check_trace; grep -c '^abstract strictfp class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:490"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define final
+%define strictfp
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:492: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:492"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:492: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:492"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:492: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:492"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:492: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:492"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:492: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:492"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:492: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:492"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:492" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:492"
+$as_echo "java.at:492" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:492"
+{ set +x
+$as_echo "$at_srcdir/java.at:492: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:492"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:492"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:495: grep -c '^final strictfp class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^final strictfp class YYParser$' YYParser.java" "java.at:495"
+( $at_check_trace; grep -c '^final strictfp class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:495"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%define public
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:497: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:497"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:497: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:497"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:497: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:497"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:497: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:497"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:497: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:497"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:497: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:497"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:497" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:497"
+$as_echo "java.at:497" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:497"
+{ set +x
+$as_echo "$at_srcdir/java.at:497: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:497"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:497"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:498: grep -c '^public class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^public class YYParser$' YYParser.java" "java.at:498"
+( $at_check_trace; grep -c '^public class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define public
+%define abstract
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:500: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:500"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:500: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:500"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:500: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:500"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:500: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:500"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:500: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:500"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:500: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:500"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:500" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:500"
+$as_echo "java.at:500" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:500"
+{ set +x
+$as_echo "$at_srcdir/java.at:500: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:500"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:503: grep -c '^public abstract class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^public abstract class YYParser$' YYParser.java" "java.at:503"
+( $at_check_trace; grep -c '^public abstract class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:503"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define public
+%define final
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:505: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:505"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:505"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:505: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:505"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:505"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:505: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:505"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:505"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:505: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:505"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:505"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:505: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:505"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:505"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:505: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:505"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:505"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:505" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:505"
+$as_echo "java.at:505" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:505"
+{ set +x
+$as_echo "$at_srcdir/java.at:505: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:505"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:505"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:508: grep -c '^public final class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^public final class YYParser$' YYParser.java" "java.at:508"
+( $at_check_trace; grep -c '^public final class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:508"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define public
+%define strictfp
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:510: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:510"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:510: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:510"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:510: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:510"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:510: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:510"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:510: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:510"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:510: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:510"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:510" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:510"
+$as_echo "java.at:510" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:510"
+{ set +x
+$as_echo "$at_srcdir/java.at:510: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:510"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:510"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:513: grep -c '^public strictfp class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^public strictfp class YYParser$' YYParser.java" "java.at:513"
+( $at_check_trace; grep -c '^public strictfp class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:513"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define public
+%define abstract
+%define strictfp
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:515: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:515"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:515: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:515"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:515: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:515"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:515: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:515"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:515: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:515"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:515: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:515"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:515" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:515"
+$as_echo "java.at:515" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:515"
+{ set +x
+$as_echo "$at_srcdir/java.at:515: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:515"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:515"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:519: grep -c '^public abstract strictfp class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^public abstract strictfp class YYParser$' YYParser.java" "java.at:519"
+( $at_check_trace; grep -c '^public abstract strictfp class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:519"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define public
+%define final
+%define strictfp
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:521: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:521"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:521: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:521"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:521: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:521"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:521: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:521"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:521: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:521"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:521: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:521"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:521" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:521"
+$as_echo "java.at:521" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:521"
+{ set +x
+$as_echo "$at_srcdir/java.at:521: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:521"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:521"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:525: grep -c '^public final strictfp class YYParser\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^public final strictfp class YYParser$' YYParser.java" "java.at:525"
+( $at_check_trace; grep -c '^public final strictfp class YYParser$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:525"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_316
+#AT_START_317
+at_fn_group_banner 317 'java.at:534' \
+  "Java parser class extends and implements" "       " 20
+at_xfail=no
+(
+  $as_echo "317. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%define extends "Thread"
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:536: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:536"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:536: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:536"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:536: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:536"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:536: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:536"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:536: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:536"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:536: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:536"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:536" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:536"
+$as_echo "java.at:536" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:536"
+{ set +x
+$as_echo "$at_srcdir/java.at:536: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:536"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:537: grep -c '^class YYParser extends Thread\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^class YYParser extends Thread$' YYParser.java" "java.at:537"
+( $at_check_trace; grep -c '^class YYParser extends Thread$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:537"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%define implements "Cloneable"
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:539: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:539"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:539"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:539: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:539"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:539"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:539: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:539"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:539"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:539: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:539"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:539"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:539: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:539"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:539"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:539: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:539"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:539"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:539" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:539"
+$as_echo "java.at:539" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:539"
+{ set +x
+$as_echo "$at_srcdir/java.at:539: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:539"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:539"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:540: grep -c '^class YYParser implements Cloneable\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^class YYParser implements Cloneable$' YYParser.java" "java.at:540"
+( $at_check_trace; grep -c '^class YYParser implements Cloneable$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:540"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define extends "Thread"
+%define implements "Cloneable"
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:542: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:542"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:542"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:542: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:542"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:542"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:542: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:542"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:542"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:542: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:542"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:542"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:542: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:542"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:542"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:542: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:542"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:542"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:542" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:542"
+$as_echo "java.at:542" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:542"
+{ set +x
+$as_echo "$at_srcdir/java.at:542: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:542"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:542"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:545: grep -c '^class YYParser extends Thread implements Cloneable\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^class YYParser extends Thread implements Cloneable$' YYParser.java" "java.at:545"
+( $at_check_trace; grep -c '^class YYParser extends Thread implements Cloneable$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:545"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_317
+#AT_START_318
+at_fn_group_banner 318 'java.at:554' \
+  "Java %parse-param and %lex-param" "               " 20
+at_xfail=no
+(
+  $as_echo "318. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:556: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:556"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:556: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:556"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:556: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:556"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:556: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:556"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:556: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:556"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:556: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:556"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:556" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:556"
+$as_echo "java.at:556" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:556"
+{ set +x
+$as_echo "$at_srcdir/java.at:556: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:556"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:556"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:557: grep -c '^ *public YYParser (Lexer yylexer) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser (Lexer yylexer) {$' YYParser.java" "java.at:557"
+( $at_check_trace; grep -c '^ *public YYParser (Lexer yylexer) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:557"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%parse-param {int parse_param1}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:559: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:559"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:559"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:559: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:559"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:559"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:559: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:559"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:559"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:559: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:559"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:559"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:559: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:559"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:559"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:559: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:559"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:559"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:559" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:559"
+$as_echo "java.at:559" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:559"
+{ set +x
+$as_echo "$at_srcdir/java.at:559: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:559"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:559"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:560: grep -c '^ *protected final int parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected final int parse_param1;$' YYParser.java" "java.at:560"
+( $at_check_trace; grep -c '^ *protected final int parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:560"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:561: grep -c '^ *public YYParser (Lexer yylexer, *int parse_param1) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser (Lexer yylexer, *int parse_param1) {$' YYParser.java" "java.at:561"
+( $at_check_trace; grep -c '^ *public YYParser (Lexer yylexer, *int parse_param1) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:561"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:562: grep -c '^[	 ]*this.parse_param1 = parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java" "java.at:562"
+( $at_check_trace; grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:562"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%parse-param {int parse_param1}
+%parse-param {long parse_param2}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:564: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:564"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:564"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:564: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:564"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:564"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:564: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:564"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:564"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:564: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:564"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:564"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:564: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:564"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:564"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:564: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:564"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:564"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:564" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:564"
+$as_echo "java.at:564" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:564"
+{ set +x
+$as_echo "$at_srcdir/java.at:564: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:564"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:564"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:567: grep -c '^ *protected final int parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected final int parse_param1;$' YYParser.java" "java.at:567"
+( $at_check_trace; grep -c '^ *protected final int parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:567"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:568: grep -c '^ *protected final long parse_param2;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected final long parse_param2;$' YYParser.java" "java.at:568"
+( $at_check_trace; grep -c '^ *protected final long parse_param2;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:568"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:569: grep -c '^ *public YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {$' YYParser.java" "java.at:569"
+( $at_check_trace; grep -c '^ *public YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:569"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:570: grep -c '^[	 ]*this.parse_param1 = parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java" "java.at:570"
+( $at_check_trace; grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:570"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:571: grep -c '^[	 ]*this.parse_param2 = parse_param2;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^[	 ]*this.parse_param2 = parse_param2;$' YYParser.java" "java.at:571"
+( $at_check_trace; grep -c '^[	 ]*this.parse_param2 = parse_param2;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:571"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:573: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:573"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:573"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:573: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:573"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:573"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:573: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:573"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:573"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:573: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:573"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:573"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:573: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:573"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:573"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:573: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:573"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:573"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:573" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:573"
+$as_echo "java.at:573" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:573"
+{ set +x
+$as_echo "$at_srcdir/java.at:573: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:573"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:573"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:574: grep -c '^ *public YYParser () {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser () {$' YYParser.java" "java.at:574"
+( $at_check_trace; grep -c '^ *public YYParser () {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:574"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:575: grep -c '^ *protected YYParser (Lexer yylexer) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected YYParser (Lexer yylexer) {$' YYParser.java" "java.at:575"
+( $at_check_trace; grep -c '^ *protected YYParser (Lexer yylexer) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:575"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%parse-param {int parse_param1}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:577: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:577"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:577: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:577"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:577: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:577"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:577: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:577"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:577: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:577"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:577: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:577"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:577" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:577"
+$as_echo "java.at:577" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:577"
+{ set +x
+$as_echo "$at_srcdir/java.at:577: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:577"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:579: grep -c '^ *protected final int parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected final int parse_param1;$' YYParser.java" "java.at:579"
+( $at_check_trace; grep -c '^ *protected final int parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:579"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:580: grep -c '^ *public YYParser (int parse_param1) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser (int parse_param1) {$' YYParser.java" "java.at:580"
+( $at_check_trace; grep -c '^ *public YYParser (int parse_param1) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:580"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:581: grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1) {$' YYParser.java" "java.at:581"
+( $at_check_trace; grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:581"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:582: grep -c '^[	 ]*this.parse_param1 = parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java" "java.at:582"
+( $at_check_trace; grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:582"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%parse-param {int parse_param1}
+%parse-param {long parse_param2}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:584: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:584"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:584"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:584: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:584"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:584"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:584: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:584"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:584"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:584: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:584"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:584"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:584: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:584"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:584"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:584: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:584"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:584"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:584" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:584"
+$as_echo "java.at:584" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:584"
+{ set +x
+$as_echo "$at_srcdir/java.at:584: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:584"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:584"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:588: grep -c '^ *protected final int parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected final int parse_param1;$' YYParser.java" "java.at:588"
+( $at_check_trace; grep -c '^ *protected final int parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:588"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:589: grep -c '^ *protected final long parse_param2;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected final long parse_param2;$' YYParser.java" "java.at:589"
+( $at_check_trace; grep -c '^ *protected final long parse_param2;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:589"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:590: grep -c '^ *public YYParser (int parse_param1, *long parse_param2) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser (int parse_param1, *long parse_param2) {$' YYParser.java" "java.at:590"
+( $at_check_trace; grep -c '^ *public YYParser (int parse_param1, *long parse_param2) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:590"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:591: grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {$' YYParser.java" "java.at:591"
+( $at_check_trace; grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:591"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:592: grep -c '^[	 ]*this.parse_param1 = parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java" "java.at:592"
+( $at_check_trace; grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:592"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:593: grep -c '^[	 ]*this.parse_param2 = parse_param2;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^[	 ]*this.parse_param2 = parse_param2;$' YYParser.java" "java.at:593"
+( $at_check_trace; grep -c '^[	 ]*this.parse_param2 = parse_param2;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:593"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+%lex-param {char lex_param1}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+  YYLexer (char lex_param1) {}
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:595: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:595"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:595"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:595: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:595"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:595"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:595: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:595"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:595"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:595: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:595"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:595"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:595: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:595"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:595"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:595: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:595"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:595"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:595" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:595"
+$as_echo "java.at:595" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:595"
+{ set +x
+$as_echo "$at_srcdir/java.at:595: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:595"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:595"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:597: grep -c '^ *public YYParser (char lex_param1) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser (char lex_param1) {$' YYParser.java" "java.at:597"
+( $at_check_trace; grep -c '^ *public YYParser (char lex_param1) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:597"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:598: grep -c '^.* = new YYLexer *(lex_param1);\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^.* = new YYLexer *(lex_param1);$' YYParser.java" "java.at:598"
+( $at_check_trace; grep -c '^.* = new YYLexer *(lex_param1);$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:598"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%lex-param {char lex_param1}
+%lex-param {short lex_param2}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+  YYLexer (char lex_param1, short lex_param2) {}
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:600: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:600"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:600: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:600"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:600: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:600"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:600: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:600"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:600: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:600"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:600: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:600"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:600" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:600"
+$as_echo "java.at:600" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:600"
+{ set +x
+$as_echo "$at_srcdir/java.at:600: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:600"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:600"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:604: grep -c '^ *public YYParser (char lex_param1, *short lex_param2) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser (char lex_param1, *short lex_param2) {$' YYParser.java" "java.at:604"
+( $at_check_trace; grep -c '^ *public YYParser (char lex_param1, *short lex_param2) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:604"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:605: grep -c '^.* = new YYLexer *(lex_param1, *lex_param2);\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^.* = new YYLexer *(lex_param1, *lex_param2);$' YYParser.java" "java.at:605"
+( $at_check_trace; grep -c '^.* = new YYLexer *(lex_param1, *lex_param2);$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:605"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%parse-param {int parse_param1}
+%parse-param {long parse_param2}
+%lex-param {char lex_param1}
+%lex-param {short lex_param2}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+  YYLexer (char lex_param1, short lex_param2) {}
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:607: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:607"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:607: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:607"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:607: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:607"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:607: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:607"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:607: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:607"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:607: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:607"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:607" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:607"
+$as_echo "java.at:607" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:607"
+{ set +x
+$as_echo "$at_srcdir/java.at:607: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:607"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:607"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:613: grep -c '^ *protected final int parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected final int parse_param1;$' YYParser.java" "java.at:613"
+( $at_check_trace; grep -c '^ *protected final int parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:613"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:614: grep -c '^ *protected final long parse_param2;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected final long parse_param2;$' YYParser.java" "java.at:614"
+( $at_check_trace; grep -c '^ *protected final long parse_param2;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:615: grep -c '^ *public YYParser (char lex_param1, *short lex_param2, *int parse_param1, *long parse_param2) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public YYParser (char lex_param1, *short lex_param2, *int parse_param1, *long parse_param2) {$' YYParser.java" "java.at:615"
+( $at_check_trace; grep -c '^ *public YYParser (char lex_param1, *short lex_param2, *int parse_param1, *long parse_param2) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:615"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:616: grep -c '^.* = new YYLexer *(lex_param1, *lex_param2);\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^.* = new YYLexer *(lex_param1, *lex_param2);$' YYParser.java" "java.at:616"
+( $at_check_trace; grep -c '^.* = new YYLexer *(lex_param1, *lex_param2);$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:616"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:617: grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {$' YYParser.java" "java.at:617"
+( $at_check_trace; grep -c '^ *protected YYParser (Lexer yylexer, *int parse_param1, *long parse_param2) {$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:617"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:618: grep -c '^[	 ]*this.parse_param1 = parse_param1;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java" "java.at:618"
+( $at_check_trace; grep -c '^[	 ]*this.parse_param1 = parse_param1;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:619: grep -c '^[	 ]*this.parse_param2 = parse_param2;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^[	 ]*this.parse_param2 = parse_param2;$' YYParser.java" "java.at:619"
+( $at_check_trace; grep -c '^[	 ]*this.parse_param2 = parse_param2;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:619"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_318
+#AT_START_319
+at_fn_group_banner 319 'java.at:628' \
+  "Java throws specifications" "                     " 20
+at_xfail=no
+(
+  $as_echo "319. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# %define throws	- 0 1 2
+# %define lex-throws	- 0 1 2
+# %code lexer		  0 1
 
 
 
@@ -59770,22 +162225,6944 @@
 
 
 
+
+
+
+
+
+
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws java.io.IOException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws java.io.IOException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws java.io.IOException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws java.io.IOException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws ""
+
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws java.io.IOException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws java.io.IOException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws java.io.IOException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws java.io.IOException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException"
+
+%initial-action {if (true) throw new ClassNotFoundException();}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws java.io.IOException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException, InstantiationException"
+
+%initial-action {if (true) throw new InstantiationException();}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws java.io.IOException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+%define lex_throws ""
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws ""
+%define lex_throws ""
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException"
+%define lex_throws ""
+%initial-action {if (true) throw new ClassNotFoundException();}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException, InstantiationException"
+%define lex_throws ""
+%initial-action {if (true) throw new InstantiationException();}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+%define lex_throws "InterruptedException"
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws ""
+%define lex_throws "InterruptedException"
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException"
+%define lex_throws "InterruptedException"
+%initial-action {if (true) throw new ClassNotFoundException();}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException, InstantiationException"
+%define lex_throws "InterruptedException"
+%initial-action {if (true) throw new InstantiationException();}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+%define lex_throws "InterruptedException, IllegalAccessException"
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws ""
+%define lex_throws "InterruptedException, IllegalAccessException"
+
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException"
+%define lex_throws "InterruptedException, IllegalAccessException"
+%initial-action {if (true) throw new ClassNotFoundException();}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException, InstantiationException"
+%define lex_throws "InterruptedException, IllegalAccessException"
+%initial-action {if (true) throw new InstantiationException();}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws java.io.IOException
+  {
+    throw new java.io.IOException();
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws java.io.IOException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws java.io.IOException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws java.io.IOException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws java.io.IOException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws ""
+
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws java.io.IOException
+  {
+    throw new java.io.IOException();
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws java.io.IOException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws java.io.IOException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws java.io.IOException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws java.io.IOException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException"
+
+%initial-action {if (true) throw new ClassNotFoundException();}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws java.io.IOException
+  {
+    throw new java.io.IOException();
+  }
+
+
+}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws java.io.IOException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException, InstantiationException"
+
+%initial-action {if (true) throw new InstantiationException();}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws java.io.IOException
+  {
+    throw new java.io.IOException();
+  }
+
+
+}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws java.io.IOException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws java.io.IOException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws java.io.IOException, ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+%define lex_throws ""
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws ""
+%define lex_throws ""
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException"
+%define lex_throws ""
+%initial-action {if (true) throw new ClassNotFoundException();}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+
+}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException, InstantiationException"
+%define lex_throws ""
+%initial-action {if (true) throw new InstantiationException();}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+
+}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+%define lex_throws "InterruptedException"
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws InterruptedException
+  {
+    throw new InterruptedException();
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws ""
+%define lex_throws "InterruptedException"
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws InterruptedException
+  {
+    throw new InterruptedException();
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException"
+%define lex_throws "InterruptedException"
+%initial-action {if (true) throw new ClassNotFoundException();}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws InterruptedException
+  {
+    throw new InterruptedException();
+  }
+
+
+}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException, InstantiationException"
+%define lex_throws "InterruptedException"
+%initial-action {if (true) throw new InstantiationException();}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws InterruptedException
+  {
+    throw new InterruptedException();
+  }
+
+
+}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+
+%define lex_throws "InterruptedException, IllegalAccessException"
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws InterruptedException, IllegalAccessException
+  {
+    throw new IllegalAccessException();
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws ""
+%define lex_throws "InterruptedException, IllegalAccessException"
+
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws InterruptedException, IllegalAccessException
+  {
+    throw new IllegalAccessException();
+  }
+
+
+}
+%%
+start: "end" {};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException"
+%define lex_throws "InterruptedException, IllegalAccessException"
+%initial-action {if (true) throw new ClassNotFoundException();}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws InterruptedException, IllegalAccessException
+  {
+    throw new IllegalAccessException();
+  }
+
+
+}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define throws "ClassNotFoundException, InstantiationException"
+%define lex_throws "InterruptedException, IllegalAccessException"
+%initial-action {if (true) throw new InstantiationException();}
+
+%code lexer
+{
+  Object yylval;
+  public Object getLVal() { return yylval; }
+
+  public Position getStartPos() { return null; }
+  public Position getEndPos()   { return null; }
+
+  public void yyerror (Location loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex () throws InterruptedException, IllegalAccessException
+  {
+    throw new IllegalAccessException();
+  }
+
+
+}
+%%
+start: "end" {throw new ClassNotFoundException();};
+%%
+class Position {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:688: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:688"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:688: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:688"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:688: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:688"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+$as_echo "java.at:688" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:688"
+{ set +x
+$as_echo "$at_srcdir/java.at:688: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:688"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *int yylex () throws InterruptedException, IllegalAccessException *;$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *private int yyaction ([^)]*) throws ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:688: grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException, InstantiationException *\$' YYParser.java"
+at_fn_check_prepare_dynamic "grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException, InstantiationException *$' YYParser.java" "java.at:688"
+( $at_check_trace; grep -c '^ *public boolean parse () throws InterruptedException, IllegalAccessException, ClassNotFoundException, InstantiationException *$' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:688"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_319
+#AT_START_320
+at_fn_group_banner 320 'java.at:717' \
+  "Java stype, position_class and location_class" "  " 20
+at_xfail=no
+(
+  $as_echo "320. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define stype "java.awt.Color"
+%type<java.awt.Color> start;
+%define api.location.type "MyLoc"
+%define api.position.type "MyPos"
+%code { class MyPos {} }
+%%
+start: "end" {$$ = $<java.awt.Color>1;};
+%%
+class MyPos {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:719: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:719"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:719: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:719"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:719: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:719"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:719: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:719"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:719: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:719"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:719: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:719"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:719" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:719"
+$as_echo "java.at:719" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:719"
+{ set +x
+$as_echo "$at_srcdir/java.at:719: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:719"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:719"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:725: grep 'java.awt.Color' YYParser.java"
+at_fn_check_prepare_trace "java.at:725"
+( $at_check_trace; grep 'java.awt.Color' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:725"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/java.at:726: \$EGREP -v ' */?\\*' YYParser.java | grep 'Position'"
+at_fn_check_prepare_notrace 'a shell pipeline' "java.at:726"
+( $at_check_trace; $EGREP -v ' */?\*' YYParser.java | grep 'Position'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:726"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/java.at:727: \$EGREP -v ' */?\\*' YYParser.java | grep 'Location'"
+at_fn_check_prepare_notrace 'a shell pipeline' "java.at:727"
+( $at_check_trace; $EGREP -v ' */?\*' YYParser.java | grep 'Location'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:727"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >YYParser.y <<'_ATEOF'
+
+%language "Java"
+%locations
+%debug
+%error-verbose
+%token-table
+
+%define stype "java.awt.Color"
+%type<java.awt.Color> start;
+%define api.location.type "MyLoc"
+%define api.position.type "MyPos"
+%code { class MyPos {} }
+
+%code lexer
+{
+  java.awt.Color yylval;
+  public java.awt.Color getLVal() { return yylval; }
+
+  public MyPos getStartPos() { return null; }
+  public MyPos getEndPos()   { return null; }
+
+  public void yyerror (MyLoc loc, String s)
+  {
+    System.err.println (loc + ": " + s);
+  }
+
+  public int yylex ()
+  {
+    return EOF;
+  }
+
+
+}
+%%
+start: "end" {$$ = $<java.awt.Color>1;};
+%%
+class MyPos {}
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:729: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:729"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:729"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:729: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:729"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:729"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:729: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:729"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:729"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:729: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:729"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:729"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:729: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:729"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:729"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:729: grep '[mb]4_' YYParser.y"
+at_fn_check_prepare_trace "java.at:729"
+( $at_check_trace; grep '[mb]4_' YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:729"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+$as_echo "java.at:729" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:729"
+$as_echo "java.at:729" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:729"
+{ set +x
+$as_echo "$at_srcdir/java.at:729: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:729"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:729"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/java.at:737: grep 'java.awt.Color' YYParser.java"
+at_fn_check_prepare_trace "java.at:737"
+( $at_check_trace; grep 'java.awt.Color' YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:737"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/java.at:738: \$EGREP -v ' */?\\*' YYParser.java | grep 'Position'"
+at_fn_check_prepare_notrace 'a shell pipeline' "java.at:738"
+( $at_check_trace; $EGREP -v ' */?\*' YYParser.java | grep 'Position'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:738"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/java.at:739: \$EGREP -v ' */?\\*' YYParser.java | grep 'Location'"
+at_fn_check_prepare_notrace 'a shell pipeline' "java.at:739"
+( $at_check_trace; $EGREP -v ' */?\*' YYParser.java | grep 'Location'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/java.at:739"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_320
+#AT_START_321
+at_fn_group_banner 321 'java.at:748' \
+  "Java syntax error handling without error token" " " 20
+at_xfail=no
+(
+  $as_echo "321. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+cat >YYParser.y <<'_ATEOF'
+%language "Java"
+
+%lex-param { String s }
+
+%code imports {
+  import java.io.IOException;
+}
+
+%code lexer {
+  String Input;
+  int Position;
+
+  public YYLexer (String s)
+  {
+    Input    = s;
+    Position = 0;
+  }
+
+  public void yyerror (String s)
+  {
+    System.err.println (s);
+  }
+
+  public Object getLVal ()
+  {
+    return null;
+  }
+
+  public int yylex () throws IOException
+  {
+    if (Position >= Input.length ())
+      return EOF;
+    else
+      return Input.charAt (Position++);
+  }
+}
+
+%code {
+  public static void main (String args []) throws IOException
+  {
+    YYParser p = new YYParser (args [0]);
+    p.parse ();
+  }
+}
+%%
+input:
+  'a' 'a'
+;
+_ATEOF
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/java.at:799: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot YYParser.y"
+at_fn_check_prepare_notrace 'an embedded newline' "java.at:799"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:799"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/java.at:799: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y" "java.at:799"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:799"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/java.at:799: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:799"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:799"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/java.at:799: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "java.at:799"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:799"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/java.at:799: bison YYParser.y"
+at_fn_check_prepare_trace "java.at:799"
+( $at_check_trace; bison YYParser.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:799"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+$as_echo "java.at:800" >"$at_check_line_file"
+(test -z "$CONF_JAVAC") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:800"
+$as_echo "java.at:800" >"$at_check_line_file"
+(test -z "$CONF_JAVA") \
+  && at_fn_check_skip 77 "$at_srcdir/java.at:800"
+{ set +x
+$as_echo "$at_srcdir/java.at:800: \$SHELL ../../../javacomp.sh YYParser.java"
+at_fn_check_prepare_dynamic "$SHELL ../../../javacomp.sh YYParser.java" "java.at:800"
+( $at_check_trace; $SHELL ../../../javacomp.sh YYParser.java
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:800"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/java.at:801:  \$SHELL ../../../javaexec.sh YYParser aa"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh YYParser aa" "java.at:801"
+( $at_check_trace;  $SHELL ../../../javaexec.sh YYParser aa
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:801"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/java.at:802:  \$SHELL ../../../javaexec.sh YYParser ab"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh YYParser ab" "java.at:802"
+( $at_check_trace;  $SHELL ../../../javaexec.sh YYParser ab
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:802"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/java.at:804:  \$SHELL ../../../javaexec.sh YYParser ba"
+at_fn_check_prepare_dynamic " $SHELL ../../../javaexec.sh YYParser ba" "java.at:804"
+( $at_check_trace;  $SHELL ../../../javaexec.sh YYParser ba
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/java.at:804"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_321
+#AT_START_322
+at_fn_group_banner 322 'cxx-type.at:394' \
+  "GLR: Resolve ambiguity, impure, no locations" "   " 21
+at_xfail=no
+(
+  $as_echo "322. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
 
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -59805,32 +169182,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
 
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
 
 %token TYPENAME ID
 
@@ -59845,32 +169211,32 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %dprec 1	{ $$ = $1; }
+stmt : expr ';'  %dprec 1     { $$ = $1; }
      | decl      %dprec 2
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -59883,19 +169249,26 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (void)
 {
   char buffer[256];
   int c;
@@ -59912,73 +169285,55 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -60046,7 +169401,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -60090,89 +169445,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:414: bison -o types.c types.y"
-echo cxx-type.at:414 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:414: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:395: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:395"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:395: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:395"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:395: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:395"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:395: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:395"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:395: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:395"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:414: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:414 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:414: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:395: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:395"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:395: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:395"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:395"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:416: \$PREPARSER ./types test-input"
-echo cxx-type.at:416 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "+(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:397:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:397"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "+(z,q)
 <declare>(T,x)
 <init-declare>(T,x,y)
 =(x,y)
@@ -60181,86 +169576,58 @@
 <init-declare>(T,y,+(z,q))
 <error>
 +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:416: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  134 ) # 134. cxx-type.at:419: GLR: Resolve ambiguity, impure, locations
-    at_setup_line='cxx-type.at:419'
-    at_desc='GLR: Resolve ambiguity, impure, locations'
-    $at_quiet $ECHO_N "134: GLR: Resolve ambiguity, impure, locations    $ECHO_C"
-    at_xfail=no
-    (
-      echo "134. cxx-type.at:419: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:397: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:397"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:397"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_322
+#AT_START_323
+at_fn_group_banner 323 'cxx-type.at:401' \
+  "GLR: Resolve ambiguity, impure, locations" "      " 21
+at_xfail=no
+(
+  $as_echo "323. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
 %locations
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -60280,32 +169647,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
 
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
 
 %token TYPENAME ID
 
@@ -60320,35 +169676,35 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			printf ("%d.%d-%d.%d: ",
-			     @2.first_line, @2.first_column,
-			     @2.last_line, @2.last_column);
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        printf ("%d.%d-%d.%d: ",
+                             @2.first_line, @2.first_column,
+                             @2.last_line, @2.last_column);
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %dprec 1	{ $$ = $1; }
+stmt : expr ';'  %dprec 1     { $$ = $1; }
      | decl      %dprec 2
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -60361,19 +169717,28 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (void)
 {
   char buffer[256];
   int c;
@@ -60390,73 +169755,58 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            yylloc.first_line = yylloc.last_line = lineNum;
+            yylloc.first_column = colNum;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            yylloc.last_column = colNum-1;
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -60524,7 +169874,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -60568,89 +169918,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:420: bison -o types.c types.y"
-echo cxx-type.at:420 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:420: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:402: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:402"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:402: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:402"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:402: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:402"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:402: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:402"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:402: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:402"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:420: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:420 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:420: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:402: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:402"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:402: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:402"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:422: \$PREPARSER ./types test-input"
-echo cxx-type.at:422 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "3.0-3.5: +(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:403:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:403"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "3.0-3.5: +(z,q)
 5.0-5.3: <declare>(T,x)
 7.0-7.7: <init-declare>(T,x,y)
 9.0-9.5: =(x,y)
@@ -60659,86 +170049,58 @@
 15.0-15.13: <init-declare>(T,y,+(z,q))
 17.0-17.15: <error>
 19.0-19.5: +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:422: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  135 ) # 135. cxx-type.at:425: GLR: Resolve ambiguity, pure, no locations
-    at_setup_line='cxx-type.at:425'
-    at_desc='GLR: Resolve ambiguity, pure, no locations'
-    $at_quiet $ECHO_N "135: GLR: Resolve ambiguity, pure, no locations   $ECHO_C"
-    at_xfail=no
-    (
-      echo "135. cxx-type.at:425: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:403: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:403"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "17.5: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:403"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_323
+#AT_START_324
+at_fn_group_banner 324 'cxx-type.at:407' \
+  "GLR: Resolve ambiguity, pure, no locations" "     " 21
+at_xfail=no
+(
+  $as_echo "324. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
-%pure-parser
+%define api.pure
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -60758,32 +170120,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
 
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror ( const char *msg);
+  static int yylex (YYSTYPE *lvalp);
+}
 
 %token TYPENAME ID
 
@@ -60798,32 +170149,32 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %dprec 1	{ $$ = $1; }
+stmt : expr ';'  %dprec 1     { $$ = $1; }
      | decl      %dprec 2
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -60836,19 +170187,26 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp)
 {
   char buffer[256];
   int c;
@@ -60865,73 +170223,55 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -60999,7 +170339,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -61043,89 +170383,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:427: bison -o types.c types.y"
-echo cxx-type.at:427 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:427: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:408: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:408"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:408: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:408"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:408: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:408"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:408: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:408"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:408: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:408"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:427: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:427 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:427: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:408: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:408"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:408: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:408"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:408"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:429: \$PREPARSER ./types test-input"
-echo cxx-type.at:429 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "+(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:410:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:410"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "+(z,q)
 <declare>(T,x)
 <init-declare>(T,x,y)
 =(x,y)
@@ -61134,86 +170514,58 @@
 <init-declare>(T,y,+(z,q))
 <error>
 +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:429: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:410"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  136 ) # 136. cxx-type.at:432: GLR: Resolve ambiguity, pure, locations
-    at_setup_line='cxx-type.at:432'
-    at_desc='GLR: Resolve ambiguity, pure, locations'
-    $at_quiet $ECHO_N "136: GLR: Resolve ambiguity, pure, locations      $ECHO_C"
-    at_xfail=no
-    (
-      echo "136. cxx-type.at:432: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:410: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:410"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:410"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_324
+#AT_START_325
+at_fn_group_banner 325 'cxx-type.at:414' \
+  "GLR: Resolve ambiguity, pure, locations" "        " 21
+at_xfail=no
+(
+  $as_echo "325. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
-%pure-parser %locations
+%define api.pure %locations
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -61233,32 +170585,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
 
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+  static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
 
 %token TYPENAME ID
 
@@ -61273,35 +170614,35 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			printf ("%d.%d-%d.%d: ",
-			     @2.first_line, @2.first_column,
-			     @2.last_line, @2.last_column);
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        printf ("%d.%d-%d.%d: ",
+                             @2.first_line, @2.first_column,
+                             @2.last_line, @2.last_column);
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %dprec 1	{ $$ = $1; }
+stmt : expr ';'  %dprec 1     { $$ = $1; }
      | decl      %dprec 2
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -61314,19 +170655,28 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
   char buffer[256];
   int c;
@@ -61343,73 +170693,58 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            yylloc.first_line = yylloc.last_line = lineNum;
+            yylloc.first_column = colNum;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            yylloc.last_column = colNum-1;
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -61477,7 +170812,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -61521,89 +170856,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:434: bison -o types.c types.y"
-echo cxx-type.at:434 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:434: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:415: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:415"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:415: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:415"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:415: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:415"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:415: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:415"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:415: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:415"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:434: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:434 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:434: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:415: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:415"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:415: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:415"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:415"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:436: \$PREPARSER ./types test-input"
-echo cxx-type.at:436 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "3.0-3.5: +(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:417:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:417"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "3.0-3.5: +(z,q)
 5.0-5.3: <declare>(T,x)
 7.0-7.7: <init-declare>(T,x,y)
 9.0-9.5: =(x,y)
@@ -61612,86 +170987,58 @@
 15.0-15.13: <init-declare>(T,y,+(z,q))
 17.0-17.15: <error>
 19.0-19.5: +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:436: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  137 ) # 137. cxx-type.at:439: GLR: Merge conflicting parses, impure, no locations
-    at_setup_line='cxx-type.at:439'
-    at_desc='GLR: Merge conflicting parses, impure, no locations'
-    $at_quiet $ECHO_N "137: GLR: Merge conflicting parses, impure, no locations$ECHO_C"
-    at_xfail=no
-    (
-      echo "137. cxx-type.at:439: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:417: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:417"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "17.5: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:417"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_325
+#AT_START_326
+at_fn_group_banner 326 'cxx-type.at:421' \
+  "GLR: Merge conflicting parses, impure, no locations" "" 21
+at_xfail=no
+(
+  $as_echo "326. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
 
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -61711,32 +171058,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
  static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
 
 %token TYPENAME ID
 
@@ -61751,32 +171087,32 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %merge <stmtMerge>	{ $$ = $1; }
+stmt : expr ';'  %merge <stmtMerge>     { $$ = $1; }
      | decl      %merge <stmtMerge>
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -61789,19 +171125,26 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (void)
 {
   char buffer[256];
   int c;
@@ -61818,73 +171161,55 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -61952,7 +171277,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -61967,7 +171292,7 @@
 static YYSTYPE
 stmtMerge (YYSTYPE x0, YYSTYPE x1)
 {
-  return new_nterm ("<OR>(%s,%s)", x0, x1, 0);
+  return new_nterm ("<OR>(%s,%s)", x0, x1, YY_NULL);
 }
 
 _ATEOF
@@ -62001,89 +171326,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:441: bison -o types.c types.y"
-echo cxx-type.at:441 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:441: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:422: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:422"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:422"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:422: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:422"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:422"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:422: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:422"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:422"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:422: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:422"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:422"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:422: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:422"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:422"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:441: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:441 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:441: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:422: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:422"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:422"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:422: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:422"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:422"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:443: \$PREPARSER ./types test-input"
-echo cxx-type.at:443 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "+(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:424:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:424"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "+(z,q)
 <declare>(T,x)
 <init-declare>(T,x,y)
 =(x,y)
@@ -62092,86 +171457,58 @@
 <OR>(<init-declare>(T,y,+(z,q)),=(<cast>(y,T),+(z,q)))
 <error>
 +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:443: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:424"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  138 ) # 138. cxx-type.at:446: GLR: Merge conflicting parses, impure, locations
-    at_setup_line='cxx-type.at:446'
-    at_desc='GLR: Merge conflicting parses, impure, locations'
-    $at_quiet $ECHO_N "138: GLR: Merge conflicting parses, impure, locations$ECHO_C"
-    at_xfail=no
-    (
-      echo "138. cxx-type.at:446: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:424: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:424"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:424"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_326
+#AT_START_327
+at_fn_group_banner 327 'cxx-type.at:428' \
+  "GLR: Merge conflicting parses, impure, locations" "" 21
+at_xfail=no
+(
+  $as_echo "327. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
 %locations
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -62191,32 +171528,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
  static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
 
 %token TYPENAME ID
 
@@ -62231,35 +171557,35 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			printf ("%d.%d-%d.%d: ",
-			     @2.first_line, @2.first_column,
-			     @2.last_line, @2.last_column);
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        printf ("%d.%d-%d.%d: ",
+                             @2.first_line, @2.first_column,
+                             @2.last_line, @2.last_column);
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %merge <stmtMerge>	{ $$ = $1; }
+stmt : expr ';'  %merge <stmtMerge>     { $$ = $1; }
      | decl      %merge <stmtMerge>
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -62272,19 +171598,28 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (yylloc));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (void)
 {
   char buffer[256];
   int c;
@@ -62301,73 +171636,58 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            yylloc.first_line = yylloc.last_line = lineNum;
+            yylloc.first_column = colNum;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            yylloc.last_column = colNum-1;
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -62435,7 +171755,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -62450,7 +171770,7 @@
 static YYSTYPE
 stmtMerge (YYSTYPE x0, YYSTYPE x1)
 {
-  return new_nterm ("<OR>(%s,%s)", x0, x1, 0);
+  return new_nterm ("<OR>(%s,%s)", x0, x1, YY_NULL);
 }
 
 _ATEOF
@@ -62484,89 +171804,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:448: bison -o types.c types.y"
-echo cxx-type.at:448 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:448: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:429: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:429"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:429"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:429: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:429"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:429"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:429: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:429"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:429"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:429: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:429"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:429"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:429: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:429"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:429"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:448: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:448 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:448: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:429: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:429"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:429"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:429: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:429"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:429"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:450: \$PREPARSER ./types test-input"
-echo cxx-type.at:450 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "3.0-3.5: +(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:431:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:431"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "3.0-3.5: +(z,q)
 5.0-5.3: <declare>(T,x)
 7.0-7.7: <init-declare>(T,x,y)
 9.0-9.5: =(x,y)
@@ -62575,86 +171935,58 @@
 15.0-15.13: <OR>(<init-declare>(T,y,+(z,q)),=(<cast>(y,T),+(z,q)))
 17.0-17.15: <error>
 19.0-19.5: +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:450: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:431"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  139 ) # 139. cxx-type.at:453: GLR: Merge conflicting parses, pure, no locations
-    at_setup_line='cxx-type.at:453'
-    at_desc='GLR: Merge conflicting parses, pure, no locations'
-    $at_quiet $ECHO_N "139: GLR: Merge conflicting parses, pure, no locations$ECHO_C"
-    at_xfail=no
-    (
-      echo "139. cxx-type.at:453: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:431: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:431"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "17.5: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:431"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_327
+#AT_START_328
+at_fn_group_banner 328 'cxx-type.at:435' \
+  "GLR: Merge conflicting parses, pure, no locations" "" 21
+at_xfail=no
+(
+  $as_echo "328. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
-%pure-parser
+%define api.pure
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -62674,32 +172006,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
  static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror ( const char *msg);
+  static int yylex (YYSTYPE *lvalp);
+}
 
 %token TYPENAME ID
 
@@ -62714,32 +172035,32 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %merge <stmtMerge>	{ $$ = $1; }
+stmt : expr ';'  %merge <stmtMerge>     { $$ = $1; }
      | decl      %merge <stmtMerge>
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -62752,19 +172073,26 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp)
 {
   char buffer[256];
   int c;
@@ -62781,73 +172109,55 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -62915,7 +172225,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -62930,7 +172240,7 @@
 static YYSTYPE
 stmtMerge (YYSTYPE x0, YYSTYPE x1)
 {
-  return new_nterm ("<OR>(%s,%s)", x0, x1, 0);
+  return new_nterm ("<OR>(%s,%s)", x0, x1, YY_NULL);
 }
 
 _ATEOF
@@ -62964,89 +172274,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:455: bison -o types.c types.y"
-echo cxx-type.at:455 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:455: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:436: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:436"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:436"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:436: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:436"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:436"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:436: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:436"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:436"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:436: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:436"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:436"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:436: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:436"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:436"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:455: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:455 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:455: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:436: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:436"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:436"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:436: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:436"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:436"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:457: \$PREPARSER ./types test-input"
-echo cxx-type.at:457 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "+(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:438:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:438"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "+(z,q)
 <declare>(T,x)
 <init-declare>(T,x,y)
 =(x,y)
@@ -63055,86 +172405,58 @@
 <OR>(<init-declare>(T,y,+(z,q)),=(<cast>(y,T),+(z,q)))
 <error>
 +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:457: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  140 ) # 140. cxx-type.at:459: GLR: Merge conflicting parses, pure, locations
-    at_setup_line='cxx-type.at:459'
-    at_desc='GLR: Merge conflicting parses, pure, locations'
-    $at_quiet $ECHO_N "140: GLR: Merge conflicting parses, pure, locations$ECHO_C"
-    at_xfail=no
-    (
-      echo "140. cxx-type.at:459: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:438: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:438"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_328
+#AT_START_329
+at_fn_group_banner 329 'cxx-type.at:441' \
+  "GLR: Merge conflicting parses, pure, locations" " " 21
+at_xfail=no
+(
+  $as_echo "329. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
-%pure-parser %locations
+%define api.pure %locations
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -63154,32 +172476,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
  static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+  static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
+}
 
 %token TYPENAME ID
 
@@ -63194,35 +172505,35 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			printf ("%d.%d-%d.%d: ",
-			     @2.first_line, @2.first_column,
-			     @2.last_line, @2.last_column);
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        printf ("%d.%d-%d.%d: ",
+                             @2.first_line, @2.first_column,
+                             @2.last_line, @2.last_column);
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %merge <stmtMerge>	{ $$ = $1; }
+stmt : expr ';'  %merge <stmtMerge>     { $$ = $1; }
      | decl      %merge <stmtMerge>
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -63235,19 +172546,28 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
+{
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
   char buffer[256];
   int c;
@@ -63264,73 +172584,58 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            yylloc.first_line = yylloc.last_line = lineNum;
+            yylloc.first_column = colNum;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            yylloc.last_column = colNum-1;
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -63398,7 +172703,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -63413,7 +172718,7 @@
 static YYSTYPE
 stmtMerge (YYSTYPE x0, YYSTYPE x1)
 {
-  return new_nterm ("<OR>(%s,%s)", x0, x1, 0);
+  return new_nterm ("<OR>(%s,%s)", x0, x1, YY_NULL);
 }
 
 _ATEOF
@@ -63447,89 +172752,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:461: bison -o types.c types.y"
-echo cxx-type.at:461 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:461: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:442: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:442"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:442"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:442: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:442"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:442"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:442: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:442"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:442"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:442: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:442"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:442"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:442: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:442"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:442"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:461: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:461 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:461: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:442: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:442"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:442"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:442: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:442"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:442"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:463: \$PREPARSER ./types test-input"
-echo cxx-type.at:463 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "3.0-3.5: +(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:444:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:444"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "3.0-3.5: +(z,q)
 5.0-5.3: <declare>(T,x)
 7.0-7.7: <init-declare>(T,x,y)
 9.0-9.5: =(x,y)
@@ -63538,86 +172883,58 @@
 15.0-15.13: <OR>(<init-declare>(T,y,+(z,q)),=(<cast>(y,T),+(z,q)))
 17.0-17.15: <error>
 19.0-19.5: +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:463: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:444"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
-
-  141 ) # 141. cxx-type.at:466: GLR: Verbose messages, resolve ambiguity, impure, no locations
-    at_setup_line='cxx-type.at:466'
-    at_desc='GLR: Verbose messages, resolve ambiguity, impure, no locations'
-    $at_quiet $ECHO_N "141: GLR: Verbose messages, resolve ambiguity, impure, no locations$ECHO_C"
-    at_xfail=no
-    (
-      echo "141. cxx-type.at:466: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:444: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:444"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "17.5: syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:444"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-
-
-
-
-# Using yacc.c?
-
-
-
-
-
-
-
-# yyerror receives the location if %location & %pure & (%glr or %parse-param).
-
-# yyerror always sees the locations (when activated), except if
-# yacc & pure & !param.
-
-
-# The interface is pure: either because %pure-parser, or because we
-# are using the C++ parsers.
-
-
-
-
-
-
-
-
-
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_329
+#AT_START_330
+at_fn_group_banner 330 'cxx-type.at:448' \
+  "GLR: Verbose messages, resolve ambiguity, impure, no locations" "" 21
+at_xfail=no
+(
+  $as_echo "330. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
 
 
 cat >types.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Simplified C++ Type and Expression Grammar.  */
 
 %error-verbose
 
-%{
+%code requires
+{
   #include <stdio.h>
   union Node {
     struct {
@@ -63637,32 +172954,21 @@
     } term;
   };
   typedef union Node Node;
+  #define YYSTYPE Node *
+}
+
+%code
+{
   static Node *new_nterm (char const *, Node *, Node *, Node *);
   static Node *new_term (char *);
   static void free_node (Node *);
   static char *node_to_string (Node *);
-  #define YYSTYPE Node *
  static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);
   #define YYINITDEPTH 10
   #define YYSTACKEXPANDABLE 1
-  struct YYLTYPE;
-#if YYPURE
-# if YYLSP_NEEDED
-#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
-#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
-# else
-#  define LEX_PARAMETERS YYSTYPE *lvalp
-# endif
-#endif
-#ifndef LEX_PARAMETERS
-# define LEX_PARAMETERS void
-#endif
-#ifndef ERROR_PARAMETERS
-# define ERROR_PARAMETERS char const *s
-#endif
-  int yylex (LEX_PARAMETERS);
-  void yyerror (ERROR_PARAMETERS);
-%}
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+}
 
 %token TYPENAME ID
 
@@ -63677,32 +172983,32 @@
 
 prog :
      | prog stmt   {
-			char *output;
-			output = node_to_string ($2);
-			printf ("%s\n", output);
-			free (output);
-			free_node ($2);
-		   }
+                        char *output;
+                        output = node_to_string ($2);
+                        printf ("%s\n", output);
+                        free (output);
+                        free_node ($2);
+                   }
      ;
 
-stmt : expr ';'  %merge <stmtMerge>	{ $$ = $1; }
+stmt : expr ';'  %merge <stmtMerge>     { $$ = $1; }
      | decl      %merge <stmtMerge>
-     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
-     | '@'		{ YYACCEPT; }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-			{ $$ = new_nterm ("<cast>(%s,%s)", $3, $1, 0); }
-     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", $1, $3, 0); }
-     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, 0); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", $3, $1, YY_NULL); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", $1, $3, YY_NULL); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", $1, $3, YY_NULL); }
      ;
 
 decl : TYPENAME declarator ';'
-			{ $$ = new_nterm ("<declare>(%s,%s)", $1, $2, 0); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", $1, $2, YY_NULL); }
      | TYPENAME declarator '=' expr ';'
-			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
-					  $2, $4); }
+                        { $$ = new_nterm ("<init-declare>(%s,%s,%s)", $1,
+                                          $2, $4); }
      ;
 
 declarator : ID
@@ -63715,19 +173021,26 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <assert.h>
 
 int
 main (int argc, char **argv)
 {
-  if (argc != 2)
-    abort ();
+  assert (argc == 2);
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
 }
 
-int
-yylex (LEX_PARAMETERS)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+int yylex (void)
 {
   char buffer[256];
   int c;
@@ -63744,73 +173057,55 @@
 
   while (1)
     {
+      assert (!feof (stdin));
       c = getchar ();
       switch (c)
-	{
-	case EOF:
-	  return 0;
-	case '\t':
-	  colNum = (colNum + 7) & ~7;
-	  break;
-	case ' ': case '\f':
-	  colNum += 1;
-	  break;
-	case '\n':
-	  lineNum += 1;
-	  colNum = 0;
-	  break;
-	default:
-	  {
-	    int tok;
-#if YYLSP_NEEDED
-	    yylloc.first_line = yylloc.last_line = lineNum;
-	    yylloc.first_column = colNum;
-#endif
-	    if (isalpha (c))
-	      {
-		i = 0;
+        {
+        case EOF:
+          return 0;
+        case '\t':
+          colNum = (colNum + 7) & ~7;
+          break;
+        case ' ': case '\f':
+          colNum += 1;
+          break;
+        case '\n':
+          lineNum += 1;
+          colNum = 0;
+          break;
+        default:
+          {
+            int tok;
+            if (isalpha (c))
+              {
+                i = 0;
 
-		do
-		  {
-		    buffer[i++] = c;
-		    colNum += 1;
-		    if (i == sizeof buffer - 1)
-		      abort ();
-		    c = getchar ();
-		  }
-		while (isalnum (c) || c == '_');
+                do
+                  {
+                    buffer[i++] = c;
+                    colNum += 1;
+                    assert (i != sizeof buffer - 1);
+                    c = getchar ();
+                  }
+                while (isalnum (c) || c == '_');
 
-		ungetc (c, stdin);
-		buffer[i++] = 0;
-		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-		yylval = new_term (strcpy ((char *) malloc (i), buffer));
-	      }
-	    else
-	      {
-		colNum += 1;
-		tok = c;
-		yylval = 0;
-	      }
-#if YYLSP_NEEDED
-	    yylloc.last_column = colNum-1;
-#endif
-	    return tok;
-	  }
-	}
+                ungetc (c, stdin);
+                buffer[i++] = 0;
+                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
+                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+              }
+            else
+              {
+                colNum += 1;
+                tok = c;
+                yylval = YY_NULL;
+              }
+            return tok;
+          }
+        }
     }
 }
 
-void
-yyerror (ERROR_PARAMETERS)
-{
-#if YYPURE && YYLSP_NEEDED
-  /* Pacify GCC by using llocp.  */
-  if (! llocp)
-    abort ();
-#endif
-  fprintf (stderr, "%s\n", s);
-}
-
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
@@ -63878,7 +173173,7 @@
       child1 = node_to_string (node->nterm.children[1]);
       child2 = node_to_string (node->nterm.children[2]);
       buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
-				+ strlen (child1) + strlen (child2) + 1);
+                                + strlen (child1) + strlen (child2) + 1);
       sprintf (buffer, node->nterm.form, child0, child1, child2);
       free (child0);
       free (child1);
@@ -63893,7 +173188,7 @@
 static YYSTYPE
 stmtMerge (YYSTYPE x0, YYSTYPE x1)
 {
-  return new_nterm ("<OR>(%s,%s)", x0, x1, 0);
+  return new_nterm ("<OR>(%s,%s)", x0, x1, YY_NULL);
 }
 
 _ATEOF
@@ -63927,89 +173222,129 @@
 _ATEOF
 
 
-$at_traceoff
-echo "cxx-type.at:468: bison -o types.c types.y"
-echo cxx-type.at:468 >$at_check_line_file
-( $at_traceon; bison -o types.c types.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:468: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:449: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o types.c types.y"
+at_fn_check_prepare_notrace 'an embedded newline' "cxx-type.at:449"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:449: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y" "cxx-type.at:449"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:449: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:449"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/cxx-type.at:449: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "cxx-type.at:449"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:449: bison -o types.c types.y"
+at_fn_check_prepare_trace "cxx-type.at:449"
+( $at_check_trace; bison -o types.c types.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "cxx-type.at:468: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
-echo cxx-type.at:468 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:468: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:449: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "cxx-type.at:449"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:449: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o types types.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS" "cxx-type.at:449"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o types types.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:449"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-$at_traceoff
-echo "cxx-type.at:470: \$PREPARSER ./types test-input"
-echo cxx-type.at:470 >$at_check_line_file
-( $at_traceon; $PREPARSER ./types test-input ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error, unexpected ID, expecting '=' or '+' or ')'
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "+(z,q)
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:451:  \$PREPARSER ./types test-input"
+at_fn_check_prepare_dynamic " $PREPARSER ./types test-input" "cxx-type.at:451"
+( $at_check_trace;  $PREPARSER ./types test-input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "+(z,q)
 <declare>(T,x)
 <init-declare>(T,x,y)
 =(x,y)
@@ -64018,68 +173353,64 @@
 <OR>(<init-declare>(T,y,+(z,q)),=(<cast>(y,T),+(z,q)))
 <error>
 +(z,q)
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "cxx-type.at:470: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:451"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
-
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/cxx-type.at:451: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "cxx-type.at:451"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error, unexpected ID, expecting '=' or '+' or ')'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/cxx-type.at:451"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-  banner-18 ) # Banner 18. glr-regression.at:19
-    cat <<\_ATEOF
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_330
+#AT_START_331
+at_fn_group_banner 331 'glr-regression.at:25' \
+  "Badly Collapsed GLR States" "                     " 22
+at_xfail=no
+(
+  $as_echo "331. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-GLR Regression Tests
-
-_ATEOF
-    ;;
-
-  142 ) # 142. glr-regression.at:25: Badly Collapsed GLR States
-    at_setup_line='glr-regression.at:25'
-    at_desc='Badly Collapsed GLR States'
-    $at_quiet $ECHO_N "142: Badly Collapsed GLR States                   $ECHO_C"
-    at_xfail=no
-    (
-      echo "142. glr-regression.at:25: testing ..."
-      $at_traceon
 
 
 cat >glr-regr1.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Regression Test: Improper state compression */
 /* Reported by Scott McPeak */
 
 %{
 #include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
 
 #define YYSTYPE int
 static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1);
-int yylex (void);
-void yyerror (char const *msg);
+static void yyerror ( const char *msg);
+static int yylex (void);
 %}
 
 
@@ -64109,96 +173440,157 @@
   return 0;
 }
 
+const char *input = YY_NULL;
+
 int
-main (void)
+main (int argc, const char* argv[])
 {
+  assert (argc == 2);
+  input = argv[1];
   return yyparse ();
 }
 
-void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
 
-
 int
 yylex (void)
 {
-  for (;;)
-    {
-      int ch = getchar ();
-      if (ch == EOF)
-	return 0;
-      else if (ch == 'B' || ch == 'P')
-	return ch;
-    }
+  return *input++;
 }
 _ATEOF
 
 
 
-$at_traceoff
-echo "glr-regression.at:96: bison -o glr-regr1.c glr-regr1.y"
-echo glr-regression.at:96 >$at_check_line_file
-( $at_traceon; bison -o glr-regr1.c glr-regr1.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr1.y: conflicts: 1 shift/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:96: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr1.c glr-regr1.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr1.c glr-regr1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:90: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr1.c glr-regr1.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr1.c glr-regr1.y" "glr-regression.at:90"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr1.c glr-regr1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:90: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:90"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:90: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:90"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:90: bison -o glr-regr1.c glr-regr1.y"
+at_fn_check_prepare_trace "glr-regression.at:90"
+( $at_check_trace; bison -o glr-regr1.c glr-regr1.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr1.y: conflicts: 1 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "glr-regression.at:97: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr1 glr-regr1.c \$LIBS"
-echo glr-regression.at:97 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr1 glr-regr1.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:97: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:93: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:93"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:93: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr1 glr-regr1.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr1 glr-regr1.c $LIBS" "glr-regression.at:93"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr1 glr-regr1.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:108: echo BPBPB | ./glr-regr1"
-echo glr-regression.at:108 >$at_check_line_file
-( $at_traceon; echo BPBPB | ./glr-regr1 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "E -> 'B'
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:94:  \$PREPARSER ./glr-regr1 BPBPB"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr1 BPBPB" "glr-regression.at:94"
+( $at_check_trace;  $PREPARSER ./glr-regr1 BPBPB
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "E -> 'B'
 E -> 'B'
 E -> E 'P' E
 E -> 'B'
@@ -64207,49 +173599,50 @@
 E -> E 'P' E
 E -> E 'P' E
 <OR>
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:108: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:94"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:94: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:94"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:94"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  143 ) # 143. glr-regression.at:116: Improper handling of embedded actions and dollar(-N) in GLR parsers
-    at_setup_line='glr-regression.at:116'
-    at_desc='Improper handling of embedded actions and dollar(-N) in GLR parsers'
-    $at_quiet $ECHO_N "143: Improper handling of embedded actions and dollar(-N) in GLR parsers$ECHO_C"
-    at_xfail=no
-    (
-      echo "143. glr-regression.at:116: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_331
+#AT_START_332
+at_fn_group_banner 332 'glr-regression.at:112' \
+  "Improper handling of embedded actions and dollar(-N) in GLR parsers" "" 22
+at_xfail=no
+(
+  $as_echo "332. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr2a.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Regression Test: Improper handling of embedded actions and $-N  */
 /* Reported by S. Eken */
@@ -64261,8 +173654,9 @@
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
-  int yylex (void);
-  void yyerror (char const *);
+  #include <assert.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
 %}
 
 %glr-parser
@@ -64302,15 +173696,23 @@
    { printf ("Variable: '%s'\n", $-1); }
 
 %%
-
-FILE *input = NULL;
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+FILE *input;
 
 int
 yylex (void)
 {
   char buf[50];
   char *s;
-  switch (fscanf (input, " %1[a-z,]", buf)) {
+  assert (!feof (stdin));
+  switch (fscanf (input, " %1[a-z,]", buf))
+  {
   case 1:
     return buf[0];
   case EOF:
@@ -64320,199 +173722,284 @@
   }
   if (fscanf (input, "%49s", buf) != 1)
     return 0;
-  if (sizeof buf - 1 <= strlen (buf))
-    abort ();
+  assert (strlen (buf) < sizeof buf - 1);
   s = (char *) malloc (strlen (buf) + 1);
   strcpy (s, buf);
   yylval = s;
   return 'V';
 }
 
-void
-yyerror (char const *s)
-{ printf ("%s\n", s);
-}
-
 int
 main (int argc, char **argv)
 {
+  int res;
   input = stdin;
-  if (argc == 2 && !(input = fopen (argv[1], "r"))) return 3;
-  return yyparse ();
+  if (argc == 2 && !(input = fopen (argv[1], "r")))
+    return 3;
+  res = yyparse ();
+  if (argc == 2 && fclose (input))
+    return 4;
+  return res;
 }
 _ATEOF
 
 
 
-$at_traceoff
-echo "glr-regression.at:212: bison -o glr-regr2a.c glr-regr2a.y"
-echo glr-regression.at:212 >$at_check_line_file
-( $at_traceon; bison -o glr-regr2a.c glr-regr2a.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr2a.y: conflicts: 2 shift/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:212: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:210: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr2a.c glr-regr2a.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:210"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr2a.c glr-regr2a.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:210"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:210: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr2a.c glr-regr2a.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr2a.c glr-regr2a.y" "glr-regression.at:210"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr2a.c glr-regr2a.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:210"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:210: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:210"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:210"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:210: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:210"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:210"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:213: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr2a glr-regr2a.c \$LIBS"
-echo glr-regression.at:213 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr2a glr-regr2a.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:213: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:210: bison -o glr-regr2a.c glr-regr2a.y"
+at_fn_check_prepare_trace "glr-regression.at:210"
+( $at_check_trace; bison -o glr-regr2a.c glr-regr2a.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr2a.y: conflicts: 2 shift/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:210"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:217: echo s VARIABLE_1 t v x q | ./glr-regr2a"
-echo glr-regression.at:217 >$at_check_line_file
-( $at_traceon; echo s VARIABLE_1 t v x q | ./glr-regr2a ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Variable: 'VARIABLE_1'
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:217: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:213: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:213"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:213: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr2a glr-regr2a.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr2a glr-regr2a.c $LIBS" "glr-regression.at:213"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr2a glr-regr2a.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
 
-$at_traceoff
-echo "glr-regression.at:220: echo s VARIABLE_1 , ANOTHER_VARIABLE_2 t e | ./glr-regr2a"
-echo glr-regression.at:220 >$at_check_line_file
-( $at_traceon; echo s VARIABLE_1 , ANOTHER_VARIABLE_2 t e | ./glr-regr2a ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Varlist: 'VARIABLE_1,ANOTHER_VARIABLE_2'
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:220: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+cat >input1.txt <<'_ATEOF'
+s VARIABLE_1 t v x q
+_ATEOF
 
-  echo 1 > $at_status_file
-  exit 1
-fi
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:218:  \$PREPARSER ./glr-regr2a input1.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr2a input1.txt" "glr-regression.at:218"
+( $at_check_trace;  $PREPARSER ./glr-regr2a input1.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "Variable: 'VARIABLE_1'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:223: echo s VARIABLE_3 t v x | ./glr-regr2a"
-echo glr-regression.at:223 >$at_check_line_file
-( $at_traceon; echo s VARIABLE_3 t v x | ./glr-regr2a ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Variable: 'VARIABLE_3'
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:223: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:218: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:218"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+cat >input2.txt <<'_ATEOF'
+s VARIABLE_1 , ANOTHER_VARIABLE_2 t e
+_ATEOF
 
-  144 ) # 144. glr-regression.at:232: Improper merging of GLR delayed action sets
-    at_setup_line='glr-regression.at:232'
-    at_desc='Improper merging of GLR delayed action sets'
-    $at_quiet $ECHO_N "144: Improper merging of GLR delayed action sets  $ECHO_C"
-    at_xfail=no
-    (
-      echo "144. glr-regression.at:232: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:225:  \$PREPARSER ./glr-regr2a input2.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr2a input2.txt" "glr-regression.at:225"
+( $at_check_trace;  $PREPARSER ./glr-regr2a input2.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "Varlist: 'VARIABLE_1,ANOTHER_VARIABLE_2'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:225: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:225"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:225"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+cat >input3.txt <<'_ATEOF'
+s VARIABLE_3 t v x
+_ATEOF
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:233:  \$PREPARSER ./glr-regr2a input3.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr2a input3.txt" "glr-regression.at:233"
+( $at_check_trace;  $PREPARSER ./glr-regr2a input3.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "Variable: 'VARIABLE_3'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:233: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:233"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:233"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_332
+#AT_START_333
+at_fn_group_banner 333 'glr-regression.at:244' \
+  "Improper merging of GLR delayed action sets" "    " 22
+at_xfail=no
+(
+  $as_echo "333. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr3.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 /* Regression Test: Improper merging of GLR delayed action sets.  */
 /* Reported by M. Rosien */
 
 %{
 #include <stdio.h>
+#include <stdlib.h>
 #include <stdarg.h>
+#include <assert.h>
 
 static int MergeRule (int x0, int x1);
-static void yyerror (char const * s);
-int yylex (void);
+static void yyerror ( const char *msg);
+static int yylex (void);
 
 #define RULE(x) (1 << (x))
 
@@ -64553,15 +174040,20 @@
 
 %%
 
-static int MergeRule (int x0, int x1) {
+static int
+MergeRule (int x0, int x1)
+{
   return x0 | x1;
 }
-
-static void yyerror(char const * s) {
-  fprintf(stderr,"error: %s\n",s);
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
 }
 
-FILE *input = NULL;
+FILE *input = YY_NULL;
 
 int P[] = { P1, P2 };
 int O[] = { O1, O2 };
@@ -64570,6 +174062,7 @@
 int yylex (void)
 {
   char inp[3];
+  assert (!feof (stdin));
   if (fscanf (input, "%2s", inp) == EOF)
     return 0;
   switch (inp[0])
@@ -64581,120 +174074,195 @@
   return BAD_CHAR;
 }
 
-int main(int argc, char* argv[]) {
+int
+main(int argc, char* argv[])
+{
+  int res;
   input = stdin;
-  if (argc == 2 && !(input = fopen (argv[1], "r"))) return 3;
-  return yyparse ();
+  if (argc == 2 && !(input = fopen (argv[1], "r")))
+    return 3;
+  res = yyparse ();
+  if (argc == 2 && fclose (input))
+    return 4;
+  return res;
 }
 _ATEOF
 
 
 
-$at_traceoff
-echo "glr-regression.at:322: bison -o glr-regr3.c glr-regr3.y"
-echo glr-regression.at:322 >$at_check_line_file
-( $at_traceon; bison -o glr-regr3.c glr-regr3.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr3.y: conflicts: 1 shift/reduce, 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:322: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:343: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr3.c glr-regr3.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:343"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr3.c glr-regr3.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:343"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:343: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr3.c glr-regr3.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr3.c glr-regr3.y" "glr-regression.at:343"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr3.c glr-regr3.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:343"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:343: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:343"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:343"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:343: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:343"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:343"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:323: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr3 glr-regr3.c \$LIBS"
-echo glr-regression.at:323 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr3 glr-regr3.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:323: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:343: bison -o glr-regr3.c glr-regr3.y"
+at_fn_check_prepare_trace "glr-regression.at:343"
+( $at_check_trace; bison -o glr-regr3.c glr-regr3.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr3.y: conflicts: 1 shift/reduce, 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:343"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:327: echo p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2 | ./glr-regr3"
-echo glr-regression.at:327 >$at_check_line_file
-( $at_traceon; echo p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2 | ./glr-regr3 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Result: 1c04
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:327: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:346: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:346"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:346"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:346: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr3 glr-regr3.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr3 glr-regr3.c $LIBS" "glr-regression.at:346"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr3 glr-regr3.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:346"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+cat >input.txt <<'_ATEOF'
+p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2
+_ATEOF
 
-  145 ) # 145. glr-regression.at:337: Duplicate representation of merged trees
-    at_setup_line='glr-regression.at:337'
-    at_desc='Duplicate representation of merged trees'
-    $at_quiet $ECHO_N "145: Duplicate representation of merged trees     $ECHO_C"
-    at_xfail=no
-    (
-      echo "145. glr-regression.at:337: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:351:  \$PREPARSER ./glr-regr3 input.txt"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr3 input.txt" "glr-regression.at:351"
+( $at_check_trace;  $PREPARSER ./glr-regr3 input.txt
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "Result: 1c04
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:351"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:351: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:351"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:351"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_333
+#AT_START_334
+at_fn_group_banner 334 'glr-regression.at:364' \
+  "Duplicate representation of merged trees" "       " 22
+at_xfail=no
+(
+  $as_echo "334. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr4.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %union { char *ptr; }
@@ -64707,8 +174275,10 @@
   #include <string.h>
   static char *merge (YYSTYPE, YYSTYPE);
   static char *make_value (char const *, char const *);
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
+  static char *ptrs[100];
+  static char **ptrs_next = ptrs;
 %}
 
 %%
@@ -64730,25 +174300,41 @@
 B:  'a' { $$ = make_value ("B", "'a'");  } ;
 
 %%
-
-static int
-yylex (void)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
-  static char const *input = "a";
-  return *input++;
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
 }
 
 int
 main (void)
 {
-  return yyparse ();
+  int status = yyparse ();
+  while (ptrs_next != ptrs)
+    free (*--ptrs_next);
+  return status;
 }
 
 static char *
 make_value (char const *parent, char const *child)
 {
   char const format[] = "%s <- %s";
-  char *value =
+  char *value = *ptrs_next++ =
     (char *) malloc (strlen (parent) + strlen (child) + sizeof format);
   sprintf (value, format, parent, child);
   return value;
@@ -64758,132 +174344,190 @@
 merge (YYSTYPE s1, YYSTYPE s2)
 {
   char const format[] = "merge{ %s and %s }";
-  char *value =
+  char *value = *ptrs_next++ =
     (char *) malloc (strlen (s1.ptr) + strlen (s2.ptr) + sizeof format);
   sprintf (value, format, s1.ptr, s2.ptr);
   return value;
 }
-
-static void
-yyerror (char const *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
 _ATEOF
 
 
 
-$at_traceoff
-echo "glr-regression.at:417: bison -o glr-regr4.c glr-regr4.y"
-echo glr-regression.at:417 >$at_check_line_file
-( $at_traceon; bison -o glr-regr4.c glr-regr4.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr4.y: conflicts: 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:417: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:438: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr4.c glr-regr4.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:438"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr4.c glr-regr4.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:438: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr4.c glr-regr4.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr4.c glr-regr4.y" "glr-regression.at:438"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr4.c glr-regr4.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:438: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:438"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:438: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:438"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:418: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr4 glr-regr4.c \$LIBS"
-echo glr-regression.at:418 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr4 glr-regr4.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:418: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:438: bison -o glr-regr4.c glr-regr4.y"
+at_fn_check_prepare_trace "glr-regression.at:438"
+( $at_check_trace; bison -o glr-regr4.c glr-regr4.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr4.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:422: ./glr-regr4"
-echo glr-regression.at:422 >$at_check_line_file
-( $at_traceon; ./glr-regr4 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "merge{ S <- merge{ A <- A1 <- 'a' and A <- A2 <- 'a' } and S <- B <- 'a' }
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:422: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:441: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:441"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:441"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:441: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr4 glr-regr4.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr4 glr-regr4.c $LIBS" "glr-regression.at:441"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr4 glr-regr4.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:441"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:443:  \$PREPARSER ./glr-regr4"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr4" "glr-regression.at:443"
+( $at_check_trace;  $PREPARSER ./glr-regr4
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "merge{ S <- merge{ A <- A1 <- 'a' and A <- A2 <- 'a' } and S <- B <- 'a' }
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:443"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  146 ) # 146. glr-regression.at:432: User destructor for unresolved GLR semantic value
-    at_setup_line='glr-regression.at:432'
-    at_desc='User destructor for unresolved GLR semantic value'
-    $at_quiet $ECHO_N "146: User destructor for unresolved GLR semantic value$ECHO_C"
-    at_xfail=no
-    (
-      echo "146. glr-regression.at:432: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:443: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:443"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:443"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_334
+#AT_START_335
+at_fn_group_banner 335 'glr-regression.at:455' \
+  "User destructor for unresolved GLR semantic value" "" 22
+at_xfail=no
+(
+  $as_echo "335. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr5.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %{
   #include <stdio.h>
   #include <stdlib.h>
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
   enum { MAGIC_VALUE = -1057808125 }; /* originally chosen at random */
 %}
@@ -64908,20 +174552,26 @@
    ;
 
 %%
-
-static int
-yylex (void)
+#include <assert.h>
+static
+int yylex (void)
 {
-  static char const *input = "a";
-  return *input++;
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
 }
-
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
 int
 main (void)
 {
@@ -64931,117 +174581,181 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:487: bison -o glr-regr5.c glr-regr5.y"
-echo glr-regression.at:487 >$at_check_line_file
-( $at_traceon; bison -o glr-regr5.c glr-regr5.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr5.y: conflicts: 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:487: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:498: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr5.c glr-regr5.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:498"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr5.c glr-regr5.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:498: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr5.c glr-regr5.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr5.c glr-regr5.y" "glr-regression.at:498"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr5.c glr-regr5.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:498: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:498"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:498: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:498"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:488: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr5 glr-regr5.c \$LIBS"
-echo glr-regression.at:488 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr5 glr-regr5.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:488: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:498: bison -o glr-regr5.c glr-regr5.y"
+at_fn_check_prepare_trace "glr-regression.at:498"
+( $at_check_trace; bison -o glr-regr5.c glr-regr5.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr5.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:498"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:492: ./glr-regr5"
-echo glr-regression.at:492 >$at_check_line_file
-( $at_traceon; ./glr-regr5 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax is ambiguous
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:492: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:501: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:501"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:501"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:501: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr5 glr-regr5.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr5 glr-regr5.c $LIBS" "glr-regression.at:501"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr5 glr-regr5.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:501"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:503:  \$PREPARSER ./glr-regr5"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr5" "glr-regression.at:503"
+( $at_check_trace;  $PREPARSER ./glr-regr5
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:503"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  147 ) # 147. glr-regression.at:502: User destructor after an error during a split parse
-    at_setup_line='glr-regression.at:502'
-    at_desc='User destructor after an error during a split parse'
-    $at_quiet $ECHO_N "147: User destructor after an error during a split parse$ECHO_C"
-    at_xfail=no
-    (
-      echo "147. glr-regression.at:502: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:503: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:503"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax is ambiguous
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:503"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_335
+#AT_START_336
+at_fn_group_banner 336 'glr-regression.at:515' \
+  "User destructor after an error during a split parse" "" 22
+at_xfail=no
+(
+  $as_echo "336. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr6.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %{
   #include <stdio.h>
   #include <stdlib.h>
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
 %}
 
@@ -65058,20 +174772,26 @@
 start: 'a' | 'a' ;
 
 %%
-
-static int
-yylex (void)
-{
-  static char const *input = "a";
-  return *input++;
-}
-
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
 int
 main (void)
 {
@@ -65081,128 +174801,198 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:549: bison -o glr-regr6.c glr-regr6.y"
-echo glr-regression.at:549 >$at_check_line_file
-( $at_traceon; bison -o glr-regr6.c glr-regr6.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr6.y: conflicts: 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:549: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr6.c glr-regr6.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr6.c glr-regr6.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:550: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr6.c glr-regr6.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr6.c glr-regr6.y" "glr-regression.at:550"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr6.c glr-regr6.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:550: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:550"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:550: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr6 glr-regr6.c \$LIBS"
-echo glr-regression.at:550 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr6 glr-regr6.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:550: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:550: bison -o glr-regr6.c glr-regr6.y"
+at_fn_check_prepare_trace "glr-regression.at:550"
+( $at_check_trace; bison -o glr-regr6.c glr-regr6.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr6.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:556: ./glr-regr6"
-echo glr-regression.at:556 >$at_check_line_file
-( $at_traceon; ./glr-regr6 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax is ambiguous
-" | $at_diff - $at_stderr || at_failed=:
-echo >>$at_stdout; echo "Destructor called.
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:556: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:553: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:553"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:553"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:553: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr6 glr-regr6.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr6 glr-regr6.c $LIBS" "glr-regression.at:553"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr6 glr-regr6.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:553"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:555:  \$PREPARSER ./glr-regr6"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr6" "glr-regression.at:555"
+( $at_check_trace;  $PREPARSER ./glr-regr6
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "Destructor called.
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:555"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  148 ) # 148. glr-regression.at:566: Duplicated user destructor for lookahead
-    at_setup_line='glr-regression.at:566'
-    at_desc='Duplicated user destructor for lookahead'
-    $at_quiet $ECHO_N "148: Duplicated user destructor for lookahead     $ECHO_C"
-    at_xfail=no
-    (
-      echo "148. glr-regression.at:566: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:555: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:555"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax is ambiguous
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:555"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_336
+#AT_START_337
+at_fn_group_banner 337 'glr-regression.at:569' \
+  "Duplicated user destructor for lookahead" "       " 22
+at_xfail=no
+(
+  $as_echo "337. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr7.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %{
   #include <stdio.h>
   #include <stdlib.h>
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
   #define YYSTACKEXPANDABLE 0
+  typedef struct count_node {
+    int count;
+    struct count_node *prev;
+  } count_node;
+  static count_node *tail;
 %}
 
 %glr-parser
-%union { int *count; }
-%type <count> 'a'
+%union { count_node *node; }
+%type <node> 'a'
 
 %destructor {
-  if ((*$$)++)
+  if ($$->count++)
     fprintf (stderr, "Destructor called on same value twice.\n");
 } 'a'
 
@@ -65221,144 +175011,217 @@
 static int
 yylex (void)
 {
-  yylval.count = (int *) malloc (sizeof (int));
-  if (!yylval.count)
+  yylval.node = (count_node*) malloc (sizeof *yylval.node);
+  if (!yylval.node)
     {
       fprintf (stderr, "Test inconclusive.\n");
       exit (EXIT_FAILURE);
     }
-  *yylval.count = 0;
+  yylval.node->count = 0;
+  yylval.node->prev = tail;
+  tail = yylval.node;
   return 'a';
 }
 
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
 int
 main (void)
 {
-  return yyparse ();
+  int status = yyparse ();
+  while (tail)
+    {
+      count_node *prev = tail->prev;
+      free (tail);
+      tail = prev;
+    }
+  return status;
 }
 _ATEOF
 
 
 
-$at_traceoff
-echo "glr-regression.at:627: bison -o glr-regr7.c glr-regr7.y"
-echo glr-regression.at:627 >$at_check_line_file
-( $at_traceon; bison -o glr-regr7.c glr-regr7.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr7.y: conflicts: 2 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:627: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:639: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr7.c glr-regr7.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:639"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr7.c glr-regr7.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:639"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:639: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr7.c glr-regr7.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr7.c glr-regr7.y" "glr-regression.at:639"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr7.c glr-regr7.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:639"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:639: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:639"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:639"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:639: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:639"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:639"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:628: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr7 glr-regr7.c \$LIBS"
-echo glr-regression.at:628 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr7 glr-regr7.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:628: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:639: bison -o glr-regr7.c glr-regr7.y"
+at_fn_check_prepare_trace "glr-regression.at:639"
+( $at_check_trace; bison -o glr-regr7.c glr-regr7.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr7.y: conflicts: 2 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:639"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:632: ./glr-regr7"
-echo glr-regression.at:632 >$at_check_line_file
-( $at_traceon; ./glr-regr7 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "memory exhausted
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   2) ;;
-   *) echo "glr-regression.at:632: exit code was $at_status, expected 2"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:642: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:642"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:642: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr7 glr-regr7.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr7 glr-regr7.c $LIBS" "glr-regression.at:642"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr7 glr-regr7.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:642"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:644:  \$PREPARSER ./glr-regr7"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr7" "glr-regression.at:644"
+( $at_check_trace;  $PREPARSER ./glr-regr7
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/glr-regression.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  149 ) # 149. glr-regression.at:644: Incorrectly initialized location for empty right-hand side in GLR
-    at_setup_line='glr-regression.at:644'
-    at_desc='Incorrectly initialized location for empty right-hand side in GLR'
-    $at_quiet $ECHO_N "149: Incorrectly initialized location for empty right-hand side in GLR$ECHO_C"
-    at_xfail=no
-    (
-      echo "149. glr-regression.at:644: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:644: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:644"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "memory exhausted
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:644"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_337
+#AT_START_338
+at_fn_group_banner 338 'glr-regression.at:658' \
+  "Incorrectly initialized location for empty right-hand side in GLR" "" 22
+at_xfail=no
+(
+  $as_echo "338. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr8.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %{
   #include <stdio.h>
   #include <stdlib.h>
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
-  static void yyerror (char const *msg);
 %}
 
 %token T_CONSTANT
@@ -65392,12 +175255,13 @@
 
 %%
 
-void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
 static int lexIndex;
 
 int yylex (void)
@@ -65405,6 +175269,8 @@
   lexIndex += 1;
   switch (lexIndex)
     {
+    default:
+      abort ();
     case 1:
       yylloc.first_column = 1;
       yylloc.last_column = 9;
@@ -65413,7 +175279,7 @@
       yylloc.first_column = 13;
       yylloc.last_column = 17;
       return T_PORT;
-    default:
+    case 3:
       return 0;
     }
 }
@@ -65428,118 +175294,182 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:723: bison -o glr-regr8.c glr-regr8.y"
-echo glr-regression.at:723 >$at_check_line_file
-( $at_traceon; bison -o glr-regr8.c glr-regr8.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr8.y: conflicts: 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:723: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:733: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr8.c glr-regr8.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:733"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr8.c glr-regr8.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:733"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:733: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr8.c glr-regr8.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr8.c glr-regr8.y" "glr-regression.at:733"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr8.c glr-regr8.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:733"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:733: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:733"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:733"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:733: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:733"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:733"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:724: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr8 glr-regr8.c \$LIBS"
-echo glr-regression.at:724 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr8 glr-regr8.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:724: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:733: bison -o glr-regr8.c glr-regr8.y"
+at_fn_check_prepare_trace "glr-regression.at:733"
+( $at_check_trace; bison -o glr-regr8.c glr-regr8.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr8.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:733"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:730: ./glr-regr8"
-echo glr-regression.at:730 >$at_check_line_file
-( $at_traceon; ./glr-regr8 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "empty: 9/9
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:736: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:736"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:736"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:736: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr8 glr-regr8.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr8 glr-regr8.c $LIBS" "glr-regression.at:736"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr8 glr-regr8.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:736"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:738:  \$PREPARSER ./glr-regr8"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr8" "glr-regression.at:738"
+( $at_check_trace;  $PREPARSER ./glr-regr8
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "empty: 9/9
 1/9 - 9/9 - 13/17
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:730: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:738"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:738: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:738"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:738"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  150 ) # 150. glr-regression.at:740: No users destructors if stack 0 deleted
-    at_setup_line='glr-regression.at:740'
-    at_desc='No users destructors if stack 0 deleted'
-    $at_quiet $ECHO_N "150: No users destructors if stack 0 deleted      $ECHO_C"
-    at_xfail=no
-    (
-      echo "150. glr-regression.at:740: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_338
+#AT_START_339
+at_fn_group_banner 339 'glr-regression.at:752' \
+  "No users destructors if stack 0 deleted" "        " 22
+at_xfail=no
+(
+  $as_echo "339. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr9.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %{
 # include <stdio.h>
 # include <stdlib.h>
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
 # define YYSTACKEXPANDABLE 0
   static int tokens = 0;
@@ -65576,12 +175506,13 @@
   return 'a';
 }
 
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
 int
 main (void)
 {
@@ -65598,116 +175529,181 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:806: bison -o glr-regr9.c glr-regr9.y"
-echo glr-regression.at:806 >$at_check_line_file
-( $at_traceon; bison -o glr-regr9.c glr-regr9.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr9.y: conflicts: 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:806: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:813: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr9.c glr-regr9.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:813"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr9.c glr-regr9.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:813"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:813: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr9.c glr-regr9.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr9.c glr-regr9.y" "glr-regression.at:813"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr9.c glr-regr9.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:813"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:813: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:813"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:813"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:813: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:813"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:813"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:807: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr9 glr-regr9.c \$LIBS"
-echo glr-regression.at:807 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr9 glr-regr9.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:807: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:813: bison -o glr-regr9.c glr-regr9.y"
+at_fn_check_prepare_trace "glr-regression.at:813"
+( $at_check_trace; bison -o glr-regr9.c glr-regr9.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr9.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:813"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:811: ./glr-regr9"
-echo glr-regression.at:811 >$at_check_line_file
-( $at_traceon; ./glr-regr9 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "memory exhausted
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:811: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:816: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:816"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:816"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:816: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr9 glr-regr9.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr9 glr-regr9.c $LIBS" "glr-regression.at:816"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr9 glr-regr9.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:816"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:818:  \$PREPARSER ./glr-regr9"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr9" "glr-regression.at:818"
+( $at_check_trace;  $PREPARSER ./glr-regr9
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:818"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  151 ) # 151. glr-regression.at:820: Corrupted semantic options if user action cuts parse
-    at_setup_line='glr-regression.at:820'
-    at_desc='Corrupted semantic options if user action cuts parse'
-    $at_quiet $ECHO_N "151: Corrupted semantic options if user action cuts parse$ECHO_C"
-    at_xfail=no
-    (
-      echo "151. glr-regression.at:820: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:818: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:818"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "memory exhausted
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:818"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_339
+#AT_START_340
+at_fn_group_banner 340 'glr-regression.at:829' \
+  "Corrupted semantic options if user action cuts parse" "" 22
+at_xfail=no
+(
+  $as_echo "340. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr10.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %{
+# include <stdlib.h>
 # include <stdio.h>
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
   #define GARBAGE_SIZE 50
   static char garbage[GARBAGE_SIZE];
@@ -65725,17 +175721,25 @@
   ;
 
 %%
-
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
-static int
-yylex (void)
+#include <assert.h>
+static
+int yylex (void)
 {
-  return 0;
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
 }
 
 int
@@ -65750,115 +175754,178 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:869: bison -o glr-regr10.c glr-regr10.y"
-echo glr-regression.at:869 >$at_check_line_file
-( $at_traceon; bison -o glr-regr10.c glr-regr10.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr10.y: conflicts: 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:869: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:869: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr10.c glr-regr10.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:869"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr10.c glr-regr10.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:869"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:869: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr10.c glr-regr10.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr10.c glr-regr10.y" "glr-regression.at:869"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr10.c glr-regr10.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:869"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:869: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:869"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:869"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:869: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:869"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:869"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:870: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr10 glr-regr10.c \$LIBS"
-echo glr-regression.at:870 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr10 glr-regr10.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:870: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:869: bison -o glr-regr10.c glr-regr10.y"
+at_fn_check_prepare_trace "glr-regression.at:869"
+( $at_check_trace; bison -o glr-regr10.c glr-regr10.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr10.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:869"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:872: ./glr-regr10"
-echo glr-regression.at:872 >$at_check_line_file
-( $at_traceon; ./glr-regr10 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:872: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:872: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:872"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:872"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:872: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr10 glr-regr10.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr10 glr-regr10.c $LIBS" "glr-regression.at:872"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr10 glr-regr10.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:872"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:874:  \$PREPARSER ./glr-regr10"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr10" "glr-regression.at:874"
+( $at_check_trace;  $PREPARSER ./glr-regr10
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:874"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  152 ) # 152. glr-regression.at:881: Undesirable destructors if user action cuts parse
-    at_setup_line='glr-regression.at:881'
-    at_desc='Undesirable destructors if user action cuts parse'
-    $at_quiet $ECHO_N "152: Undesirable destructors if user action cuts parse$ECHO_C"
-    at_xfail=no
-    (
-      echo "152. glr-regression.at:881: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:874: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:874"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:874"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_340
+#AT_START_341
+at_fn_group_banner 341 'glr-regression.at:883' \
+  "Undesirable destructors if user action cuts parse" "" 22
+at_xfail=no
+(
+  $as_echo "341. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr11.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %{
 # include <stdlib.h>
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
   static int destructors = 0;
 # define USE(val)
@@ -65878,17 +175945,25 @@
 
 %%
 
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
-static int
-yylex (void)
+#include <assert.h>
+static
+int yylex (void)
 {
-  static char const *input = "a";
-  return *input++;
+  static char const input[] = "a";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
 }
 
 int
@@ -65906,110 +175981,173 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:935: bison -o glr-regr11.c glr-regr11.y"
-echo glr-regression.at:935 >$at_check_line_file
-( $at_traceon; bison -o glr-regr11.c glr-regr11.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr11.y: conflicts: 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:935: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:927: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr11.c glr-regr11.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:927"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr11.c glr-regr11.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:927"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:927: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr11.c glr-regr11.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr11.c glr-regr11.y" "glr-regression.at:927"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr11.c glr-regr11.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:927"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:927: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:927"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:927"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:927: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:927"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:927"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:936: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr11 glr-regr11.c \$LIBS"
-echo glr-regression.at:936 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr11 glr-regr11.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:936: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:927: bison -o glr-regr11.c glr-regr11.y"
+at_fn_check_prepare_trace "glr-regression.at:927"
+( $at_check_trace; bison -o glr-regr11.c glr-regr11.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr11.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:927"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:938: ./glr-regr11"
-echo glr-regression.at:938 >$at_check_line_file
-( $at_traceon; ./glr-regr11 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:938: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:930: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:930"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:930"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:930: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr11 glr-regr11.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr11 glr-regr11.c $LIBS" "glr-regression.at:930"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr11 glr-regr11.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:930"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:932:  \$PREPARSER ./glr-regr11"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr11" "glr-regression.at:932"
+( $at_check_trace;  $PREPARSER ./glr-regr11
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:932"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  153 ) # 153. glr-regression.at:947: Leaked semantic values if user action cuts parse
-    at_setup_line='glr-regression.at:947'
-    at_desc='Leaked semantic values if user action cuts parse'
-    $at_quiet $ECHO_N "153: Leaked semantic values if user action cuts parse$ECHO_C"
-    at_xfail=no
-    (
-      echo "153. glr-regression.at:947: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:932: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:932"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:932"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_341
+#AT_START_342
+at_fn_group_banner 342 'glr-regression.at:941' \
+  "Leaked semantic values if user action cuts parse" "" 22
+at_xfail=no
+(
+  $as_echo "342. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr12.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %glr-parser
@@ -66022,8 +176160,9 @@
 
 %{
 # include <stdlib.h>
+# include <assert.h>
   static int merge (YYSTYPE, YYSTYPE);
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
   static int parent_rhs_before_value = 0;
   static int merged_value = 0;
@@ -66084,20 +176223,26 @@
   return dummy;
 }
 
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
-static int
-yylex (void)
+#include <assert.h>
+static
+int yylex (void)
 {
   static int const input[] = { PARENT_RHS_AFTER, 0 };
-  static const int *inputp = input;
-  if (*inputp == PARENT_RHS_AFTER)
-    parent_rhs_after_value = 1;
-  return *inputp++;
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  if (res == PARENT_RHS_AFTER)
+    parent_rhs_after_value = 1;;
+  return res;
 }
 
 int
@@ -66125,110 +176270,173 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:1064: bison -o glr-regr12.c glr-regr12.y"
-echo glr-regression.at:1064 >$at_check_line_file
-( $at_traceon; bison -o glr-regr12.c glr-regr12.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr12.y: conflicts: 1 shift/reduce, 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1064: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1048: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr12.c glr-regr12.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:1048"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr12.c glr-regr12.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1048"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1048: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr12.c glr-regr12.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr12.c glr-regr12.y" "glr-regression.at:1048"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr12.c glr-regr12.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1048"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1048: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1048"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1048"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1048: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1048"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1048"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:1065: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr12 glr-regr12.c \$LIBS"
-echo glr-regression.at:1065 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr12 glr-regr12.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1065: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1048: bison -o glr-regr12.c glr-regr12.y"
+at_fn_check_prepare_trace "glr-regression.at:1048"
+( $at_check_trace; bison -o glr-regr12.c glr-regr12.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr12.y: conflicts: 1 shift/reduce, 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1048"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:1067: ./glr-regr12"
-echo glr-regression.at:1067 >$at_check_line_file
-( $at_traceon; ./glr-regr12 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1067: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1051: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:1051"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1051"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1051: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr12 glr-regr12.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr12 glr-regr12.c $LIBS" "glr-regression.at:1051"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr12 glr-regr12.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1051"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1053:  \$PREPARSER ./glr-regr12"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr12" "glr-regression.at:1053"
+( $at_check_trace;  $PREPARSER ./glr-regr12
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1053"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  154 ) # 154. glr-regression.at:1078: Incorrect lookahead during deterministic GLR
-    at_setup_line='glr-regression.at:1078'
-    at_desc='Incorrect lookahead during deterministic GLR'
-    $at_quiet $ECHO_N "154: Incorrect lookahead during deterministic GLR $ECHO_C"
-    at_xfail=no
-    (
-      echo "154. glr-regression.at:1078: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1053: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:1053"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1053"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_342
+#AT_START_343
+at_fn_group_banner 343 'glr-regression.at:1064' \
+  "Incorrect lookahead during deterministic GLR" "   " 22
+at_xfail=no
+(
+  $as_echo "343. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr13.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 /* Tests:
@@ -66240,9 +176448,10 @@
 
 %{
   #include <stdio.h>
-  static void yyerror (char const *);
+  #include <assert.h>
+  static void yyerror ( const char *msg);
   static int yylex (void);
-  static void print_look_ahead (char const *);
+  static void print_lookahead (char const *);
   #define USE(value)
 %}
 
@@ -66256,32 +176465,32 @@
 start:
   defstate_init defstate_shift 'b' change_lookahead 'a' {
     USE ($3);
-    print_look_ahead ("start <- defstate_init defstate_shift 'b'");
+    print_lookahead ("start <- defstate_init defstate_shift 'b'");
   }
   ;
 defstate_init:
   {
-    print_look_ahead ("defstate_init <- empty string");
+    print_lookahead ("defstate_init <- empty string");
   }
   ;
 defstate_shift:
   nondefstate defstate_look 'a' {
     USE ($3);
-    print_look_ahead ("defstate_shift <- nondefstate defstate_look 'a'");
+    print_lookahead ("defstate_shift <- nondefstate defstate_look 'a'");
   }
   ;
 defstate_look:
   {
-    print_look_ahead ("defstate_look <- empty string");
+    print_lookahead ("defstate_look <- empty string");
   }
   ;
 nondefstate:
   {
-    print_look_ahead ("nondefstate <- empty string");
+    print_lookahead ("nondefstate <- empty string");
   }
   | 'b' {
     USE ($1);
-    print_look_ahead ("nondefstate <- 'b'");
+    print_lookahead ("nondefstate <- 'b'");
   }
   ;
 change_lookahead:
@@ -66292,25 +176501,29 @@
 
 %%
 
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
-static int
-yylex (void)
+#include <assert.h>
+static
+int yylex (void)
 {
-  static char const *input = "ab";
-  static int i = 0;
-  yylloc.first_line = yylloc.last_line = 1;
-  yylloc.first_column = yylloc.last_column = i + 1;
-  yylval.value = input[i] + 'A' - 'a';
-  return input[i++];
+  static char const input[] = "ab";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  yylval.value = res + 'A' - 'a';
+  return res;
 }
 
 static void
-print_look_ahead (char const *reduction)
+print_lookahead (char const *reduction)
 {
   printf ("%s:\n  yychar=", reduction);
   if (yychar == YYEMPTY)
@@ -66340,67 +176553,129 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:1189: bison -o glr-regr13.c glr-regr13.y"
-echo glr-regression.at:1189 >$at_check_line_file
-( $at_traceon; bison -o glr-regr13.c glr-regr13.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1189: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1165: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr13.c glr-regr13.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:1165"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr13.c glr-regr13.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1165: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr13.c glr-regr13.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr13.c glr-regr13.y" "glr-regression.at:1165"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr13.c glr-regr13.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1165: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1165"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1165: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1165"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:1190: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr13 glr-regr13.c \$LIBS"
-echo glr-regression.at:1190 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr13 glr-regr13.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1190: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1165: bison -o glr-regr13.c glr-regr13.y"
+at_fn_check_prepare_trace "glr-regression.at:1165"
+( $at_check_trace; bison -o glr-regr13.c glr-regr13.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:1203: ./glr-regr13"
-echo glr-regression.at:1203 >$at_check_line_file
-( $at_traceon; ./glr-regr13 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "defstate_init <- empty string:
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1166: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:1166"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1166"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1166: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr13 glr-regr13.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr13 glr-regr13.c $LIBS" "glr-regression.at:1166"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr13 glr-regr13.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1166"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1168:  \$PREPARSER ./glr-regr13"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr13" "glr-regression.at:1168"
+( $at_check_trace;  $PREPARSER ./glr-regr13
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "defstate_init <- empty string:
   yychar=YYEMPTY
 nondefstate <- empty string:
   yychar='a', yylval='A', yylloc=(1,1),(1,1)
@@ -66410,49 +176685,50 @@
   yychar=YYEMPTY
 start <- defstate_init defstate_shift 'b':
   yychar=YYEMPTY
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1203: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1168: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:1168"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  155 ) # 155. glr-regression.at:1212: Incorrect lookahead during nondeterministic GLR
-    at_setup_line='glr-regression.at:1212'
-    at_desc='Incorrect lookahead during nondeterministic GLR'
-    $at_quiet $ECHO_N "155: Incorrect lookahead during nondeterministic GLR$ECHO_C"
-    at_xfail=no
-    (
-      echo "155. glr-regression.at:1212: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_343
+#AT_START_344
+at_fn_group_banner 344 'glr-regression.at:1188' \
+  "Incorrect lookahead during nondeterministic GLR" "" 22
+at_xfail=no
+(
+  $as_echo "344. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr14.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 /* Tests:
@@ -66477,10 +176753,12 @@
 %union { char value; }
 
 %{
+  #include <stdlib.h>
   #include <stdio.h>
-  static void yyerror (char const *);
+  #include <assert.h>
+  static void yyerror ( const char *msg);
   static int yylex (void);
-  static void print_look_ahead (char const *);
+  static void print_lookahead (char const *);
   static char merge (union YYSTYPE, union YYSTYPE);
   #define USE(value)
 %}
@@ -66494,7 +176772,7 @@
 start:
   merge 'c' stack_explosion {
     USE ($2); USE ($3);
-    print_look_ahead ("start <- merge 'c' stack_explosion");
+    print_lookahead ("start <- merge 'c' stack_explosion");
   }
   ;
 
@@ -66502,44 +176780,44 @@
 merge:
   nonconflict1 'a' 'b' nonconflict2 %dprec 1 {
     USE ($2); USE ($3);
-    print_look_ahead ("merge <- nonconflict1 'a' 'b' nonconflict2");
+    print_lookahead ("merge <- nonconflict1 'a' 'b' nonconflict2");
   }
   | conflict defstate_look 'a' nonconflict2 'b' defstate_shift %dprec 2 {
     USE ($3); USE ($5);
-    print_look_ahead ("merge <- conflict defstate_look 'a' nonconflict2 'b'"
+    print_lookahead ("merge <- conflict defstate_look 'a' nonconflict2 'b'"
 		      " defstate_shift");
   }
   ;
 
 nonconflict1:
   {
-    print_look_ahead ("nonconflict1 <- empty string");
+    print_lookahead ("nonconflict1 <- empty string");
   }
   ;
 nonconflict2:
   {
-    print_look_ahead ("nonconflict2 <- empty string");
+    print_lookahead ("nonconflict2 <- empty string");
   }
   | 'a' {
     USE ($1);
-    print_look_ahead ("nonconflict2 <- 'a'");
+    print_lookahead ("nonconflict2 <- 'a'");
   }
   ;
 conflict:
   {
-    print_look_ahead ("conflict <- empty string");
+    print_lookahead ("conflict <- empty string");
   }
   ;
 defstate_look:
   {
-    print_look_ahead ("defstate_look <- empty string");
+    print_lookahead ("defstate_look <- empty string");
   }
   ;
 
 /* yychar != YYEMPTY but lookahead need is yyfalse.  */
 defstate_shift:
   {
-    print_look_ahead ("defstate_shift <- empty string");
+    print_lookahead ("defstate_shift <- empty string");
   }
   ;
 
@@ -66588,25 +176866,27 @@
 
 %%
 
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
 static int
 yylex (void)
 {
-  static char const *input = "abcdddd";
-  static int i = 0;
+  static char const input[] = "abcdddd";
+  static size_t toknum;
+  assert (toknum < sizeof input);
   yylloc.first_line = yylloc.last_line = 1;
-  yylloc.first_column = yylloc.last_column = i + 1;
-  yylval.value = input[i] + 'A' - 'a';
-  return input[i++];
+  yylloc.first_column = yylloc.last_column = toknum + 1;
+  yylval.value = input[toknum] + 'A' - 'a';
+  return input[toknum++];
 }
 
 static void
-print_look_ahead (char const *reduction)
+print_lookahead (char const *reduction)
 {
   printf ("%s:\n  yychar=", reduction);
   if (yychar == YYEMPTY)
@@ -66643,68 +176923,131 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:1404: bison -o glr-regr14.c glr-regr14.y"
-echo glr-regression.at:1404 >$at_check_line_file
-( $at_traceon; bison -o glr-regr14.c glr-regr14.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr14.y: conflicts: 3 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1404: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1378: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr14.c glr-regr14.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:1378"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr14.c glr-regr14.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1378"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1378: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr14.c glr-regr14.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr14.c glr-regr14.y" "glr-regression.at:1378"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr14.c glr-regr14.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1378"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1378: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1378"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1378"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1378: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1378"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1378"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:1405: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr14 glr-regr14.c \$LIBS"
-echo glr-regression.at:1405 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr14 glr-regr14.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1405: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1378: bison -o glr-regr14.c glr-regr14.y"
+at_fn_check_prepare_trace "glr-regression.at:1378"
+( $at_check_trace; bison -o glr-regr14.c glr-regr14.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr14.y: conflicts: 3 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1378"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:1420: ./glr-regr14"
-echo glr-regression.at:1420 >$at_check_line_file
-( $at_traceon; ./glr-regr14 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-$at_diff $at_devnull $at_stderr || at_failed=:
-echo >>$at_stdout; echo "conflict <- empty string:
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1381: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:1381"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1381"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1381: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr14 glr-regr14.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr14 glr-regr14.c $LIBS" "glr-regression.at:1381"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr14 glr-regr14.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1381"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1383:  \$PREPARSER ./glr-regr14"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr14" "glr-regression.at:1383"
+( $at_check_trace;  $PREPARSER ./glr-regr14
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+echo >>"$at_stdout"; $as_echo "conflict <- empty string:
   yychar='a', yylval='A', yylloc=(1,1),(1,1)
 defstate_look <- empty string:
   yychar='a', yylval='A', yylloc=(1,1),(1,1)
@@ -66716,49 +177059,50 @@
   yychar=YYEMPTY
 start <- merge 'c' stack_explosion:
   yychar=YYEOF
-" | $at_diff - $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1420: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1383"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1383: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:1383"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1383"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
 
-  156 ) # 156. glr-regression.at:1429: Leaked semantic values when reporting ambiguity
-    at_setup_line='glr-regression.at:1429'
-    at_desc='Leaked semantic values when reporting ambiguity'
-    $at_quiet $ECHO_N "156: Leaked semantic values when reporting ambiguity$ECHO_C"
-    at_xfail=no
-    (
-      echo "156. glr-regression.at:1429: testing ..."
-      $at_traceon
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_344
+#AT_START_345
+at_fn_group_banner 345 'glr-regression.at:1405' \
+  "Leaked semantic values when reporting ambiguity" "" 22
+at_xfail=no
+(
+  $as_echo "345. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
 
 
 cat >glr-regr15.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %glr-parser
@@ -66766,7 +177110,7 @@
 
 %{
 # include <stdlib.h>
-  static void yyerror (char const *);
+  static void yyerror ( const char *msg);
   static int yylex (void);
   static int parent_rhs_before_value = 0;
 # define USE(val)
@@ -66805,17 +177149,25 @@
 ambiguity2: ;
 
 %%
-
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
-static int
-yylex (void)
+#include <assert.h>
+static
+int yylex (void)
 {
-  return 0;
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
 }
 
 int
@@ -66833,110 +177185,175 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:1505: bison -o glr-regr15.c glr-regr15.y"
-echo glr-regression.at:1505 >$at_check_line_file
-( $at_traceon; bison -o glr-regr15.c glr-regr15.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr15.y: conflicts: 2 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1505: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1471: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr15.c glr-regr15.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:1471"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr15.c glr-regr15.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1471"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1471: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr15.c glr-regr15.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr15.c glr-regr15.y" "glr-regression.at:1471"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr15.c glr-regr15.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1471"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1471: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1471"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1471"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1471: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1471"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1471"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:1506: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr15 glr-regr15.c \$LIBS"
-echo glr-regression.at:1506 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr15 glr-regr15.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1506: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1471: bison -o glr-regr15.c glr-regr15.y"
+at_fn_check_prepare_trace "glr-regression.at:1471"
+( $at_check_trace; bison -o glr-regr15.c glr-regr15.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr15.y: conflicts: 2 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1471"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:1510: ./glr-regr15"
-echo glr-regression.at:1510 >$at_check_line_file
-( $at_traceon; ./glr-regr15 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax is ambiguous
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1510: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1474: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:1474"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1474: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr15 glr-regr15.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr15 glr-regr15.c $LIBS" "glr-regression.at:1474"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr15 glr-regr15.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1474"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1476:  \$PREPARSER ./glr-regr15"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr15" "glr-regression.at:1476"
+( $at_check_trace;  $PREPARSER ./glr-regr15
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1476"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  157 ) # 157. glr-regression.at:1519: Leaked lookahead after nondeterministic parse syntax error
-    at_setup_line='glr-regression.at:1519'
-    at_desc='Leaked lookahead after nondeterministic parse syntax error'
-    $at_quiet $ECHO_N "157: Leaked lookahead after nondeterministic parse syntax error$ECHO_C"
-    at_xfail=no
-    (
-      echo "157. glr-regression.at:1519: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1476: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:1476"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax is ambiguous
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1476"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_345
+#AT_START_346
+at_fn_group_banner 346 'glr-regression.at:1487' \
+  "Leaked lookahead after nondeterministic parse syntax error" "" 22
+at_xfail=no
+(
+  $as_echo "346. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
 
 cat >glr-regr16.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %glr-parser
@@ -66944,7 +177361,8 @@
 
 %{
 # include <stdlib.h>
-  static void yyerror (char const *);
+# include <assert.h>
+  static void yyerror ( const char *msg);
   static int yylex (void);
   static int lookahead_value = 0;
 # define USE(val)
@@ -66958,19 +177376,26 @@
 
 %%
 
-static void
-yyerror (char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
   fprintf (stderr, "%s\n", msg);
 }
-
-static int
-yylex (void)
+#include <assert.h>
+static
+int yylex (void)
 {
-  static char const *input = "ab";
-  if (*input == 'b')
+  static char const input[] = "ab";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  if (res == 'b')
     lookahead_value = 1;
-  return *input++;
+  return res;
 }
 
 int
@@ -66988,131 +177413,190 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:1571: bison -o glr-regr16.c glr-regr16.y"
-echo glr-regression.at:1571 >$at_check_line_file
-( $at_traceon; bison -o glr-regr16.c glr-regr16.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr16.y: conflicts: 1 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1571: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1531: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr16.c glr-regr16.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:1531"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr16.c glr-regr16.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1531: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr16.c glr-regr16.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr16.c glr-regr16.y" "glr-regression.at:1531"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr16.c glr-regr16.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1531: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1531"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1531: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1531"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:1572: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr16 glr-regr16.c \$LIBS"
-echo glr-regression.at:1572 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr16 glr-regr16.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1572: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1531: bison -o glr-regr16.c glr-regr16.y"
+at_fn_check_prepare_trace "glr-regression.at:1531"
+( $at_check_trace; bison -o glr-regr16.c glr-regr16.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr16.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:1576: ./glr-regr16"
-echo glr-regression.at:1576 >$at_check_line_file
-( $at_traceon; ./glr-regr16 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "syntax error
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1576: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1534: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:1534"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1534"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1534: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr16 glr-regr16.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr16 glr-regr16.c $LIBS" "glr-regression.at:1534"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr16 glr-regr16.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1534"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1536:  \$PREPARSER ./glr-regr16"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr16" "glr-regression.at:1536"
+( $at_check_trace;  $PREPARSER ./glr-regr16
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  158 ) # 158. glr-regression.at:1585: Uninitialized location when reporting ambiguity
-    at_setup_line='glr-regression.at:1585'
-    at_desc='Uninitialized location when reporting ambiguity'
-    $at_quiet $ECHO_N "158: Uninitialized location when reporting ambiguity$ECHO_C"
-    at_xfail=no
-    (
-      echo "158. glr-regression.at:1585: testing ..."
-      $at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1536: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:1536"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "syntax error
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1536"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_346
+#AT_START_347
+at_fn_group_banner 347 'glr-regression.at:1547' \
+  "Uninitialized location when reporting ambiguity" "" 22
+at_xfail=no
+(
+  $as_echo "347. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
 
 cat >glr-regr17.y <<'_ATEOF'
-%{
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* We don't need perfect functions for these tests. */
-# undef malloc
-# undef memcmp
-# undef realloc
-#endif
-%}
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
 
 %glr-parser
 %locations
-%pure-parser
+%define api.pure
 %error-verbose
 
 %union { int dummy; }
 
 %{
-  static void yyerror (YYLTYPE *, char const *);
-  static int yylex (YYSTYPE *, YYLTYPE *);
+  static void yyerror (YYLTYPE const * const llocp,  const char *msg);
+  static int yylex (YYSTYPE *lvalp, YYLTYPE *llocp);
 %}
 
-%initial-action {
-  @$.first_line = 1;
-  @$.first_column = 1;
-  @$.last_line = 1;
-  @$.last_column = 1;
-}
-
 %%
 
 /* Tests the case of an empty RHS that has inherited the location of the
@@ -67133,24 +177617,28 @@
 empty2: ;
 
 %%
+# include <assert.h>
 
-static void
-yyerror (YYLTYPE *locp, char const *msg)
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror (YYLTYPE const * const llocp,  const char *msg)
 {
-  fprintf (stderr, "Error at %d.%d-%d.%d: %s.\n", locp->first_line,
-	   locp->first_column, locp->last_line, locp->last_column, msg);
+  YY_LOCATION_PRINT (stderr, (*llocp));
+  fprintf (stderr, ": ");
+  fprintf (stderr, "%s\n", msg);
 }
-
 static int
 yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
   static char const input[] = "ab";
-  static char const *inputp = input;
+  static size_t toknum;
+  assert (toknum < sizeof input);
   lvalp->dummy = 0;
   llocp->first_line = llocp->last_line = 2;
-  llocp->first_column = inputp - input + 1;
+  llocp->first_column = toknum + 1;
   llocp->last_column = llocp->first_column + 1;
-  return *inputp++;
+  return input[toknum++];
 }
 
 int
@@ -67162,370 +177650,1215 @@
 
 
 
-$at_traceoff
-echo "glr-regression.at:1656: bison -o glr-regr17.c glr-regr17.y"
-echo glr-regression.at:1656 >$at_check_line_file
-( $at_traceon; bison -o glr-regr17.c glr-regr17.y ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "glr-regr17.y: conflicts: 3 reduce/reduce
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1656: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
-  echo 1 > $at_status_file
-  exit 1
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1609: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o glr-regr17.c glr-regr17.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:1609"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o glr-regr17.c glr-regr17.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1609: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr17.c glr-regr17.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr17.c glr-regr17.y" "glr-regression.at:1609"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o glr-regr17.c glr-regr17.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1609: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1609"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1609: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1609"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-$at_traceon
-
-$at_traceoff
-echo "glr-regression.at:1657: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr17 glr-regr17.c \$LIBS"
-echo glr-regression.at:1657 >$at_check_line_file
-( $at_traceon; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr17 glr-regr17.c $LIBS ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo stderr:; cat $at_stderr
-echo stdout:; cat $at_stdout
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1657: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1609: bison -o glr-regr17.c glr-regr17.y"
+at_fn_check_prepare_trace "glr-regression.at:1609"
+( $at_check_trace; bison -o glr-regr17.c glr-regr17.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr17.y: conflicts: 3 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1609"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-$at_traceoff
-echo "glr-regression.at:1661: ./glr-regr17"
-echo glr-regression.at:1661 >$at_check_line_file
-( $at_traceon; ./glr-regr17 ) >$at_stdout 2>$at_stder1
-at_status=$?
-grep '^ *+' $at_stder1 >&2
-grep -v '^ *+' $at_stder1 >$at_stderr
-at_failed=false
-echo >>$at_stderr; echo "Error at 1.1-2.3: syntax is ambiguous.
-" | $at_diff - $at_stderr || at_failed=:
-$at_diff $at_devnull $at_stdout || at_failed=:
-case $at_status in
-   77) echo 77 > $at_status_file
-            exit 77;;
-   0) ;;
-   *) echo "glr-regression.at:1661: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1612: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:1612"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo 1 > $at_status_file
-  exit 1
-fi
-
-$at_traceon
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1612: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o glr-regr17 glr-regr17.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr17 glr-regr17.c $LIBS" "glr-regression.at:1612"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o glr-regr17 glr-regr17.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1612"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >$at_times_file
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat $at_status_file`
-    ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1614:  \$PREPARSER ./glr-regr17"
+at_fn_check_prepare_dynamic " $PREPARSER ./glr-regr17" "glr-regression.at:1614"
+( $at_check_trace;  $PREPARSER ./glr-regr17
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1614: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:1614"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "1.1-2.2: syntax is ambiguous
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1614"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
-  * )
-    echo "$as_me: no such test group: $at_group" >&2
-    continue
-    ;;
-  esac
 
-  # Be sure to come back to the suite directory, in particular
-  # since below we might `rm' the group directory we are in currently.
-  cd $at_suite_dir
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_347
+#AT_START_348
+at_fn_group_banner 348 'glr-regression.at:1625' \
+  "Missed %merge type warnings when LHS type is declared later" "" 22
+at_xfail=no
+(
+  $as_echo "348. $at_setup_line: testing $at_desc ..."
+  $at_traceon
 
-  case $at_group in
-    banner-*) ;;
-    *)
-      if test ! -f $at_check_line_file; then
-	sed "s/^ */$as_me: warning: /" <<_ATEOF
-	A failure happened in a test group before any test could be
-	run. This means that test suite is improperly designed.  Please
-	report this failure to <bug-bison@gnu.org>.
-_ATEOF
-    	echo "$at_setup_line" >$at_check_line_file
-      fi
-      at_group_count=`expr 1 + $at_group_count`
-      $at_verbose $ECHO_N "$at_group. $at_setup_line: $ECHO_C"
-      echo $ECHO_N "$at_group. $at_setup_line: $ECHO_C" >> $at_group_log
-      case $at_xfail:$at_status in
-	yes:0)
-	    at_msg="UNEXPECTED PASS"
-	    at_xpass_list="$at_xpass_list $at_group"
-	    at_errexit=$at_errexit_p
-	    ;;
-	no:0)
-	    at_msg="ok"
-	    at_pass_list="$at_pass_list $at_group"
-	    at_errexit=false
-	    ;;
-	*:77)
-	    at_msg="skipped (`cat $at_check_line_file`)"
-	    at_skip_list="$at_skip_list $at_group"
-	    at_errexit=false
-	    ;;
-	yes:*)
-	    at_msg="expected failure (`cat $at_check_line_file`)"
-	    at_xfail_list="$at_xfail_list $at_group"
-	    at_errexit=false
-	    ;;
-	no:*)
-	    at_msg="FAILED (`cat $at_check_line_file`)"
-	    at_fail_list="$at_fail_list $at_group"
-	    at_errexit=$at_errexit_p
-	    ;;
-      esac
-      echo $at_msg
-      at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
-      case $at_status in
-	0|77)
-	  # $at_times_file is only available if the group succeeded.
-	  # We're not including the group log, so the success message
-	  # is written in the global log separately.  But we also
-	  # write to the group log in case they're using -d.
-	  if test -f $at_times_file; then
-	    at_log_msg="$at_log_msg	(`sed 1d $at_times_file`)"
-	    rm -f $at_times_file
-          fi
-	  echo "$at_log_msg" >> $at_group_log
-	  echo "$at_log_msg" >&5
 
-	  # Cleanup the group directory, unless the user wants the files.
-	  $at_debug_p || rm -rf $at_group_dir
-	  ;;
-	*)
-	  # Upon failure, include the log into the testsuite's global
-	  # log.  The failure message is written in the group log.  It
-	  # is later included in the global log.
-	  echo "$at_log_msg" >> $at_group_log
 
-	  # Upon failure, keep the group directory for autopsy, and
-	  # create the debugging script.
-	  {
-	    echo "#! /bin/sh"
-	    echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\'''
-	    echo "cd $at_dir"
-	    echo 'exec ${CONFIG_SHELL-'"$SHELL"'}' "$0" \
-	         '-v -d' "$at_debug_args" "$at_group" '${1+"$@"}'
-	    echo 'exit 1'
-	  } >$at_group_dir/run
-	  chmod +x $at_group_dir/run
-	  $at_errexit && break
-	  ;;
-      esac
-      ;;
-  esac
-done
+cat >glr-regr18.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
 
-# Back to the top directory.
-cd $at_dir
+%glr-parser
 
-# Compute the duration of the suite.
-at_stop_date=`date`
-at_stop_time=`(date +%s) 2>/dev/null`
-echo "$as_me: ending at: $at_stop_date" >&5
-at_duration_s=`(expr $at_stop_time - $at_start_time) 2>/dev/null`
-at_duration_m=`(expr $at_duration_s / 60) 2>/dev/null`
-at_duration_h=`(expr $at_duration_m / 60) 2>/dev/null`
-at_duration_s=`(expr $at_duration_s % 60) 2>/dev/null`
-at_duration_m=`(expr $at_duration_m % 60) 2>/dev/null`
-at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
-if test "$at_duration" != "h m s"; then
-  echo "$as_me: test suite duration: $at_duration" >&5
-fi
+%{
+  #include <stdlib.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+%}
 
-# Wrap up the test suite with summary statistics.
-at_skip_count=`set dummy $at_skip_list; shift; echo $#`
-at_fail_count=`set dummy $at_fail_list; shift; echo $#`
-at_xpass_count=`set dummy $at_xpass_list; shift; echo $#`
-at_xfail_count=`set dummy $at_xfail_list; shift; echo $#`
+%union {
+  int type1;
+  int type2;
+  int type3;
+}
 
-at_run_count=`expr $at_group_count - $at_skip_count`
-at_unexpected_count=`expr $at_xpass_count + $at_fail_count`
-at_total_fail_count=`expr $at_xfail_count + $at_fail_count`
+%%
 
-echo
-cat <<\_ASBOX
-## ------------- ##
-## Test results. ##
-## ------------- ##
-_ASBOX
-echo
+sym1: sym2 %merge<merge> { $$ = $1; } ;
+sym2: sym3 %merge<merge> { $$ = $1; } ;
+sym3: %merge<merge> { $$ = 0; } ;
+
+%type <type1> sym1;
+%type <type2> sym2;
+%type <type3> sym3;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
 {
-  echo
-  cat <<\_ASBOX
-## ------------- ##
-## Test results. ##
-## ------------- ##
-_ASBOX
-  echo
-} >&5
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+int
+main (void)
+{
+  return yyparse ();
+}
+_ATEOF
 
-if test $at_run_count = 1; then
-  at_result="1 test"
-  at_were=was
-else
-  at_result="$at_run_count tests"
-  at_were=were
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1664: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o glr-regr18.c glr-regr18.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison -o glr-regr18.c glr-regr18.y" "glr-regression.at:1664"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison -o glr-regr18.c glr-regr18.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "glr-regr18.y:26.18-24: error: result type clash on merge function 'merge': <type2> != <type1>
+glr-regr18.y:25.18-24:     previous declaration
+glr-regr18.y:27.13-19: error: result type clash on merge function 'merge': <type3> != <type2>
+glr-regr18.y:26.18-24:     previous declaration
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/glr-regression.at:1664"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_348
+#AT_START_349
+at_fn_group_banner 349 'glr-regression.at:1678' \
+  "Ambiguity reports" "                              " 22
+at_xfail=no
+(
+  $as_echo "349. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%{
+  #include <stdio.h>
+  #include <stdlib.h>
+  static void yyerror ( const char *msg);
+  static int yylex (void);
+%}
+
+%debug
+%glr-parser
+
+%%
+start:
+  'a' b 'c' d
+| 'a' b 'c' d
+;
+b: 'b';
+d: /* nada.  */;
+%%
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "abc";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+int
+main (void)
+{
+  yydebug = 1;
+  return !!yyparse ();
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1712: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "glr-regression.at:1712"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1712"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1712: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "glr-regression.at:1712"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1712"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1712: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1712"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1712"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/glr-regression.at:1712: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "glr-regression.at:1712"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1712"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-if $at_errexit_p && test $at_unexpected_count != 0; then
-  if test $at_xpass_count = 1; then
-    at_result="$at_result $at_were run, one passed"
-  else
-    at_result="$at_result $at_were run, one failed"
-  fi
-  at_result="$at_result unexpectedly and inhibited subsequent tests."
-else
-  # Don't you just love exponential explosion of the number of cases?
-  case $at_xpass_count:$at_fail_count:$at_xfail_count in
-    # So far, so good.
-    0:0:0) at_result="$at_result $at_were successful." ;;
-    0:0:*) at_result="$at_result behaved as expected." ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1712: bison -o input.c input.y"
+at_fn_check_prepare_trace "glr-regression.at:1712"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y: conflicts: 1 reduce/reduce
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1712"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-    # Some unexpected failures
-    0:*:0) at_result="$at_result $at_were run,
-$at_fail_count failed unexpectedly." ;;
 
-    # Some failures, both expected and unexpected
-    0:*:1) at_result="$at_result $at_were run,
-$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
-    0:*:*) at_result="$at_result $at_were run,
-$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1715: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "glr-regression.at:1715"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1715"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-    # No unexpected failures, but some xpasses
-    *:0:*) at_result="$at_result $at_were run,
-$at_xpass_count passed unexpectedly." ;;
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1715: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "glr-regression.at:1715"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1715"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-    # No expected failures, but failures and xpasses
-    *:1:0) at_result="$at_result $at_were run,
-$at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;;
-    *:*:0) at_result="$at_result $at_were run,
-$at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;;
 
-    # All of them.
-    *:*:1) at_result="$at_result $at_were run,
-$at_xpass_count passed unexpectedly,
-$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
-    *:*:*) at_result="$at_result $at_were run,
-$at_xpass_count passed unexpectedly,
-$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
-  esac
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1717:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "glr-regression.at:1717"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/glr-regression.at:1717"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  if test $at_skip_count = 0 && test $at_run_count -gt 1; then
-    at_result="All $at_result"
-  fi
+{ set +x
+$as_echo "$at_srcdir/glr-regression.at:1717: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "glr-regression.at:1717"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "Starting parse
+Entering state 0
+Reading a token: Next token is token 'a' ()
+Shifting token 'a' ()
+Entering state 1
+Reading a token: Next token is token 'b' ()
+Shifting token 'b' ()
+Entering state 3
+Reducing stack 0 by rule 3 (line 25):
+   \$1 = token 'b' ()
+-> \$\$ = nterm b ()
+Entering state 4
+Reading a token: Next token is token 'c' ()
+Shifting token 'c' ()
+Entering state 6
+Reducing stack 0 by rule 4 (line 26):
+-> \$\$ = nterm d ()
+Entering state 7
+Reading a token: Now at end of input.
+Stack 0 Entering state 7
+Now at end of input.
+Splitting off stack 1 from 0.
+Reduced stack 1 by rule #2; action deferred.  Now in state 2.
+Stack 1 Entering state 2
+Now at end of input.
+Reduced stack 0 by rule #1; action deferred.  Now in state 2.
+Merging stack 0 into stack 1.
+Stack 1 Entering state 2
+Now at end of input.
+Removing dead stacks.
+Rename stack 1 -> 0.
+On stack 0, shifting token \$end ()
+Stack 0 now in state #5
+Ambiguity detected.
+Option 1,
+  start -> <Rule 1, tokens 1 .. 3>
+    'a' <tokens 1 .. 1>
+    b <tokens 2 .. 2>
+    'c' <tokens 3 .. 3>
+    d <empty>
+
+Option 2,
+  start -> <Rule 2, tokens 1 .. 3>
+    'a' <tokens 1 .. 1>
+    b <tokens 2 .. 2>
+    'c' <tokens 3 .. 3>
+    d <empty>
+
+syntax is ambiguous
+Cleanup: popping token \$end ()
+Cleanup: popping unresolved nterm start ()
+Cleanup: popping nterm d ()
+Cleanup: popping token 'c' ()
+Cleanup: popping nterm b ()
+Cleanup: popping token 'a' ()
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/glr-regression.at:1717"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_349
+#AT_START_350
+at_fn_group_banner 350 'push.at:24' \
+  "Memory Leak for Early Deletion" "                 " 23
+at_xfail=no
+(
+  $as_echo "350. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+# Requires Valgrind.
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%{
+  #include <assert.h>
+  #include <stdio.h>
+  #define YYINITDEPTH 1
+static void yyerror ( const char *msg);
+%}
+
+%define api.pure
+%define api.push-pull push
+
+%%
+
+start: 'a' 'b' 'c' ;
+
+%%
+
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+int
+main (void)
+{
+  yypstate *ps;
+
+  /* Make sure we don't try to free ps->yyss in this case.  */
+  ps = yypstate_new ();
+  yypstate_delete (ps);
+
+  /* yypstate_delete used to leak ps->yyss if the stack was reallocated but the
+     parse did not return on success, syntax error, or memory exhaustion.  */
+  ps = yypstate_new ();
+  assert (yypush_parse (ps, 'a', YY_NULL) == YYPUSH_MORE);
+  yypstate_delete (ps);
+
+  ps = yypstate_new ();
+  assert (yypush_parse (ps, 'a', YY_NULL) == YYPUSH_MORE);
+  assert (yypush_parse (ps, 'b', YY_NULL) == YYPUSH_MORE);
+  yypstate_delete (ps);
+
+  return 0;
+}
+_ATEOF
+
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/push.at:73: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "push.at:73"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/push.at:73: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "push.at:73"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/push.at:73: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "push.at:73"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/push.at:73: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "push.at:73"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
+{ set +x
+$as_echo "$at_srcdir/push.at:73: bison -o input.c input.y"
+at_fn_check_prepare_trace "push.at:73"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-# Now put skips in the mix.
-case $at_skip_count in
-  0) ;;
-  1) at_result="$at_result
-1 test was skipped." ;;
-  *) at_result="$at_result
-$at_skip_count tests were skipped." ;;
-esac
 
-if test $at_unexpected_count = 0; then
-  echo "$at_result"
-  echo "$at_result" >&5
-else
-  echo "ERROR: $at_result" >&2
-  echo "ERROR: $at_result" >&5
-  {
-    echo
-    cat <<\_ASBOX
-## ------------------------ ##
-## Summary of the failures. ##
-## ------------------------ ##
-_ASBOX
+{ set +x
+$as_echo "$at_srcdir/push.at:74: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "push.at:74"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:74"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-    # Summary of failed and skipped tests.
-    if test $at_fail_count != 0; then
-      echo "Failed tests:"
-      $SHELL $0 $at_fail_list --list
-      echo
-    fi
-    if test $at_skip_count != 0; then
-      echo "Skipped tests:"
-      $SHELL $0 $at_skip_list --list
-      echo
-    fi
-    if test $at_xpass_count != 0; then
-      echo "Unexpected passes:"
-      $SHELL $0 $at_xpass_list --list
-      echo
-    fi
-    if test $at_fail_count != 0; then
-      cat <<\_ASBOX
-## ---------------------- ##
-## Detailed failed tests. ##
-## ---------------------- ##
-_ASBOX
-      echo
-      for at_group in $at_fail_list
-      do
-        # Normalize the test group number.
-        at_group_normalized=`expr "00000$at_group" : ".*\($at_format\)"`
-        # Create a fresh directory for the next test group, and enter.
-        at_group_dir=$at_suite_dir/$at_group_normalized
-        at_group_log=$at_group_dir/$as_me.log
-        cat $at_group_log
-        echo
-      done
-      echo
-    fi
-    if test -n "$at_top_srcdir"; then
-      sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## $at_top_builddir/config.log ##
-_ASBOX
-      sed 's/^/| /' $at_top_builddir/config.log
-      echo
-    fi
-  } >&5
+{ set +x
+$as_echo "$at_srcdir/push.at:74: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "push.at:74"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:74"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## $as_me.log was created. ##
-_ASBOX
+{ set +x
+$as_echo "$at_srcdir/push.at:75:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "push.at:75"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:75"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
-  echo
-  echo "Please send \`$as_me.log' and all information you think might help:"
-  echo
-  echo "   To: <bug-bison@gnu.org>"
-  echo "   Subject: [GNU Bison 2.3] $as_me:$at_fail_list${at_fail_list:+ failed${at_xpass_list:+,}}$at_xpass_list${at_xpass_list:+ passed unexpectedly}"
-  echo
-  if test $at_debug_p = false; then
-    echo
-    echo 'You may investigate any problem if you feel able to do so, in which'
-    echo 'case the test suite provides a good starting point.'
-    echo
-  fi
-    exit 1
+{ set +x
+$as_echo "$at_srcdir/push.at:75: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "push.at:75"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:75"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_350
+#AT_START_351
+at_fn_group_banner 351 'push.at:83' \
+  "Multiple impure instances" "                      " 23
+at_xfail=no
+(
+  $as_echo "351. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%{
+  #include <assert.h>
+  #include <stdio.h>
+static void yyerror ( const char *msg);
+static int yylex (void);
+%}
+
+%define api.push-pull both
+
+%%
+
+start: ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+#include <assert.h>
+static
+int yylex (void)
+{
+  static char const input[] = "";
+  static size_t toknum = 0;
+  int res;
+  ;
+  assert (toknum < sizeof input / sizeof input[0]);
+  res = input[toknum++];
+  ;
+  return res;
+}
+
+int
+main (void)
+{
+  int i;
+  for (i = 0; i < 2; ++i)
+    {
+      yypstate *ps = yypstate_new ();
+      assert (ps);
+      assert (yypstate_new () == YY_NULL);
+      assert (yyparse () == 2);
+      yychar = 0;
+      assert (yypush_parse (ps) == 0);
+      assert (yypstate_new () == YY_NULL);
+      assert (yyparse () == 2);
+      yypstate_delete (ps);
+    }
+
+  return 0;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/push.at:133: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "push.at:133"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/push.at:133: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "push.at:133"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/push.at:133: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "push.at:133"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/push.at:133: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "push.at:133"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
 fi
-
-exit 0
+{ set +x
+$as_echo "$at_srcdir/push.at:133: bison -o input.c input.y"
+at_fn_check_prepare_trace "push.at:133"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
 
 
+{ set +x
+$as_echo "$at_srcdir/push.at:133: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "push.at:133"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/push.at:133: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "push.at:133"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/push.at:133:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "push.at:133"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/push.at:133: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "push.at:133"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:133"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+cat >input.y <<'_ATEOF'
+%code top {
+#include <config.h>
+/* We don't need perfect functions for these tests. */
+#undef malloc
+#undef memcmp
+#undef realloc
+}
+
+
+%{
+  #include <assert.h>
+  #include <stdio.h>
+static void yyerror ( const char *msg);
+
+%}
+
+%define api.push-pull push
+
+%%
+
+start: ;
+
+%%
+#include <stdio.h>
+/* A C error reporting function.  */
+static
+void yyerror ( const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+
+int
+main (void)
+{
+  int i;
+  for (i = 0; i < 2; ++i)
+    {
+      yypstate *ps = yypstate_new ();
+      assert (ps);
+      assert (yypstate_new () == YY_NULL);
+      ;
+      yychar = 0;
+      assert (yypush_parse (ps) == 0);
+      assert (yypstate_new () == YY_NULL);
+      ;
+      yypstate_delete (ps);
+    }
+
+  return 0;
+}
+_ATEOF
+
+
+
+if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then
+  at_save_special_files
+  mkdir xml-tests
+    # Don't combine these Bison invocations since we want to be sure that
+  # --report=all isn't required to get the full XML file.
+  { set +x
+$as_echo "$at_srcdir/push.at:134: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \\
+                  --graph=xml-tests/test.dot -o input.c input.y"
+at_fn_check_prepare_notrace 'an embedded newline' "push.at:134"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --report=all --report-file=xml-tests/test.output \
+                  --graph=xml-tests/test.dot -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  { set +x
+$as_echo "$at_srcdir/push.at:134: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y" "push.at:134"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --xml=xml-tests/test.xml -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+    cp xml-tests/test.output expout
+  { set +x
+$as_echo "$at_srcdir/push.at:134: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2text.xsl \\
+             xml-tests/test.xml"
+at_fn_check_prepare_notrace 'a `...` command substitution' "push.at:134"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2text.xsl \
+             xml-tests/test.xml
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  sort xml-tests/test.dot > expout
+  { set +x
+$as_echo "$at_srcdir/push.at:134: \$XSLTPROC \\
+             \`VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison --print-datadir\`/xslt/xml2dot.xsl \\
+             xml-tests/test.xml | sort"
+at_fn_check_prepare_notrace 'a `...` command substitution' "push.at:134"
+( $at_check_trace; $XSLTPROC \
+             `VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison --print-datadir`/xslt/xml2dot.xsl \
+             xml-tests/test.xml | sort
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+$at_diff expout "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+  rm -rf xml-tests expout
+  at_restore_special_files
+fi
+{ set +x
+$as_echo "$at_srcdir/push.at:134: bison -o input.c input.y"
+at_fn_check_prepare_trace "push.at:134"
+( $at_check_trace; bison -o input.c input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+{ set +x
+$as_echo "$at_srcdir/push.at:134: \$BISON_C_WORKS"
+at_fn_check_prepare_dynamic "$BISON_C_WORKS" "push.at:134"
+( $at_check_trace; $BISON_C_WORKS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/push.at:134: \$CC \$CFLAGS \$CPPFLAGS \$LDFLAGS -o input input.c \$LIBS"
+at_fn_check_prepare_dynamic "$CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS" "push.at:134"
+( $at_check_trace; $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c $LIBS
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/push.at:134:  \$PREPARSER ./input"
+at_fn_check_prepare_dynamic " $PREPARSER ./input" "push.at:134"
+( $at_check_trace;  $PREPARSER ./input
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; tee stderr <"$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+{ set +x
+$as_echo "$at_srcdir/push.at:134: sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr"
+at_fn_check_prepare_trace "push.at:134"
+( $at_check_trace; sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/push.at:134"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_351
+#AT_START_352
+at_fn_group_banner 352 'push.at:144' \
+  "Unsupported Skeletons" "                          " 23
+at_xfail=no
+(
+  $as_echo "352. $at_setup_line: testing $at_desc ..."
+  $at_traceon
+
+
+
+cat >input.y <<'_ATEOF'
+%glr-parser
+%define api.push-pull push
+%%
+start: ;
+_ATEOF
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/push.at:155: VALGRIND_OPTS=\"\$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y"
+at_fn_check_prepare_dynamic "VALGRIND_OPTS=\"$VALGRIND_OPTS --leak-check=summary --show-reachable=no\"; export VALGRIND_OPTS; bison input.y" "push.at:155"
+( $at_check_trace; VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; bison input.y
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "input.y:2.9-21: error: %define variable 'api.push-pull' is not used
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/push.at:155"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_352
diff --git a/tests/testsuite.at b/tests/testsuite.at
index 10bb3d8..2a5211a 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -1,30 +1,34 @@
-# Process this file with autom4te to create testsuite. -*- Autotest -*-
+# Test suite for GNU Bison.				-*- Autotest -*-
 
-# Test suite for GNU Bison.
-# Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 2000-2004, 2006-2007, 2009-2012 Free Software
+# Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 # Testing resistance to user bugs.
 m4_include([input.at])
 
+# Testing named references.
+m4_include([named-refs.at])
+
 # Testing output file names.
 m4_include([output.at])
 
+# Testing skeleton support.
+m4_include([skeletons.at])
+
 # Testing the part of the engine that computes FOLLOW etc.
 m4_include([sets.at])
 
@@ -59,8 +63,14 @@
 # Some C++ specific tests.
 m4_include([c++.at])
 
+# And some Java specific tests.
+m4_include([java.at])
+
 # GLR tests:
 # C++ types, simplified
 m4_include([cxx-type.at])
 # Regression tests
 m4_include([glr-regression.at])
+
+# Push parsing specific tests.
+m4_include([push.at])
diff --git a/tests/torture.at b/tests/torture.at
index ff373c2..ac9e91e 100644
--- a/tests/torture.at
+++ b/tests/torture.at
@@ -1,20 +1,20 @@
 # Torturing Bison.                                    -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# Copyright (C) 2001-2002, 2004-2007, 2009-2012 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.
-
+# the Free Software Foundation, either version 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_BANNER([[Torture Tests.]])
 
@@ -42,7 +42,8 @@
 # Create FILE-NAME, containing a self checking parser for a huge
 # triangular grammar.
 m4_define([AT_DATA_TRIANGULAR_GRAMMAR],
-[AT_DATA([[gengram.pl]],
+[AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[gengram.pl]],
 [[#! /usr/bin/perl -w
 
 use strict;
@@ -55,9 +56,10 @@
 %{
 #include <stdio.h>
 #include <stdlib.h>
-
-static int yylex (void);
-static void yyerror (const char *msg);
+#include <assert.h>
+#define MAX $max
+]AT_YYLEX_DECLARE[
+]AT_YYERROR_DECLARE[
 %}
 %union
 {
@@ -76,8 +78,8 @@
 print <<EOF;
 %%
 input:
-  exp        { if (\@S|@1 != 0) abort (); \$\$ = \@S|@1; }
-| input exp  { if (\@S|@2 != \@S|@1 + 1) abort (); \$\$ = \@S|@2; }
+  exp        { assert (\@S|@1 == 0); \$\$ = \@S|@1; }
+| input exp  { assert (\@S|@2 == \@S|@1 + 1); \$\$ = \@S|@2; }
 ;
 
 exp:
@@ -95,14 +97,15 @@
   };
 print ";\n";
 
-print <<EOF;
+print <<\EOF;
 %%
+]AT_YYERROR_DEFINE[
 static int
 yylex (void)
 {
   static int inner = 1;
   static int outer = 0;
-  if (outer > $max)
+  if (outer > MAX)
     return 0;
   else if (inner > outer)
     {
@@ -112,13 +115,6 @@
     }
   return inner++;
 }
-
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\\n", msg);
-}
-
 int
 main (void)
 {
@@ -127,8 +123,9 @@
 }
 EOF
 ]])
+AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout])
+AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout])
 mv stdout $1
 ])
 
@@ -144,7 +141,7 @@
 # With 500 and the new parser, which consume far too much memory,
 # it gets killed too.  Of course the parser is to be cleaned.
 AT_DATA_TRIANGULAR_GRAMMAR([input.y], [200])
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK_NO_XML([-v -o input.c input.y])
 AT_COMPILE([input])
 AT_PARSER_CHECK([./input])
 
@@ -157,7 +154,8 @@
 # Create FILE-NAME, containing a self checking parser for a huge
 # horizontal grammar.
 m4_define([AT_DATA_HORIZONTAL_GRAMMAR],
-[AT_DATA([[gengram.pl]],
+[AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[gengram.pl]],
 [[#! /usr/bin/perl -w
 
 use strict;
@@ -170,9 +168,9 @@
 %{
 #include <stdio.h>
 #include <stdlib.h>
-
-static int yylex (void);
-static void yyerror (const char *msg);
+#define MAX $max
+]AT_YYLEX_DECLARE[
+]AT_YYERROR_DECLARE[
 %}
 
 %token
@@ -193,22 +191,18 @@
 	(map { "\"$_\"" } (1 .. $max)), ";"),
   "\n";
 
-print <<EOF;
+print <<\EOF;
 %%
+#include <assert.h>
+]AT_YYERROR_DEFINE[
 static int
 yylex (void)
 {
   static int counter = 1;
-  if (counter > $max)
-    return 0;
-  else
-  return counter++;
-}
-
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\\n", msg);
+  if (counter <= MAX)
+    return counter++;
+  assert (counter++ == MAX + 1);
+  return 0;
 }
 
 int
@@ -220,8 +214,9 @@
 EOF
 ]])
 
-AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout])
+AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout])
 mv stdout $1
+AT_BISON_OPTION_POPDEFS
 ])
 
 
@@ -249,7 +244,7 @@
 # Ask for 200 MiB, which should be plenty even on a 64-bit host.
 AT_INCREASE_DATA_SIZE(204000)
 
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK_NO_XML([-v -o input.c input.y])
 AT_COMPILE([input])
 AT_PARSER_CHECK([./input])
 
@@ -257,12 +252,13 @@
 
 
 
-# AT_DATA_LOOK_AHEAD_TOKENS_GRAMMAR(FILE-NAME, SIZE)
+# AT_DATA_LOOKAHEAD_TOKENS_GRAMMAR(FILE-NAME, SIZE)
 # --------------------------------------------------
 # Create FILE-NAME, containing a self checking parser for a grammar
-# requiring SIZE look-ahead tokens.
-m4_define([AT_DATA_LOOK_AHEAD_TOKENS_GRAMMAR],
-[AT_DATA([[gengram.pl]],
+# requiring SIZE lookahead tokens.
+m4_define([AT_DATA_LOOKAHEAD_TOKENS_GRAMMAR],
+[AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[gengram.pl]],
 [[#! /usr/bin/perl -w
 
 use strict;
@@ -273,12 +269,13 @@
 %error-verbose
 %debug
 %{
+]AT_DATA_SOURCE_PROLOGUE[
 # include <stdio.h>
 # include <stdlib.h>
 # include <assert.h>
-
-static int yylex (void);
-static void yyerror (const char *msg);
+# define MAX $max
+]AT_YYLEX_DECLARE[
+]AT_YYERROR_DECLARE[
 %}
 %union
 {
@@ -323,15 +320,19 @@
     print "n$count: token { \$\$ = $count; };\n";
   };
 
-print <<EOF;
+print <<\EOF;
 %%
+]AT_YYERROR_DEFINE[
 static int
 yylex (void)
 {
   static int return_token = 1;
   static int counter = 1;
-  if (counter > $max)
-    return 0;
+  if (counter > MAX)
+    {
+      assert (counter++ == MAX + 1);
+      return 0;
+    }
   if (return_token)
     {
       return_token = 0;
@@ -341,12 +342,6 @@
   return counter++;
 }
 
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\\n", msg);
-}
-
 int
 main (void)
 {
@@ -356,24 +351,25 @@
 EOF
 ]])
 
-AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout])
+AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout])
 mv stdout $1
+AT_BISON_OPTION_POPDEFS
 ])
 
 
 ## ------------------------ ##
-## Many look-ahead tokens.  ##
+## Many lookahead tokens.   ##
 ## ------------------------ ##
 
-AT_SETUP([Many look-ahead tokens])
+AT_SETUP([Many lookahead tokens])
 
-AT_DATA_LOOK_AHEAD_TOKENS_GRAMMAR([input.y], [1000])
+AT_DATA_LOOKAHEAD_TOKENS_GRAMMAR([input.y], [1000])
 
 # GNU m4 requires about 70 MiB for this test on a 32-bit host.
 # Ask for 200 MiB, which should be plenty even on a 64-bit host.
 AT_INCREASE_DATA_SIZE(204000)
 
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK([-v -o input.c input.y])
 AT_COMPILE([input])
 AT_PARSER_CHECK([./input])
 
@@ -381,59 +377,84 @@
 
 
 
-# AT_DATA_STACK_TORTURE(C-PROLOGUE)
-# ---------------------------------
+# AT_DATA_STACK_TORTURE(C-PROLOGUE, [BISON-DECLS])
+# ------------------------------------------------
 # A parser specialized in torturing the stack size.
 m4_define([AT_DATA_STACK_TORTURE],
-[# A grammar of parens growing the stack thanks to right recursion.
+[AT_BISON_OPTION_PUSHDEFS([$2])
+# A grammar of parens growing the stack thanks to right recursion.
 # exp:
-AT_DATA([input.y],
+AT_DATA_GRAMMAR([input.y],
 [[%{
 #include <errno.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 ]$1[
-  static int yylex (void);
-  static void yyerror (const char *msg);
+  ]AT_YYLEX_DECLARE[
+  ]AT_YYERROR_DECLARE[
 %}
+]$2[
 %error-verbose
 %debug
 %token WAIT_FOR_EOF
 %%
 exp: WAIT_FOR_EOF exp | ;
 %%
-static void
-yyerror (const char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
+#include <assert.h>
 static int
 yylex (void)
 {
+  assert (0 <= yylval);
   if (yylval--)
     return WAIT_FOR_EOF;
   else
     return EOF;
 }
 
+/* Return argv[1] as an int. */
+static int
+get_args (int argc, const char **argv)
+{
+  int res;
+  char *endp;
+  assert (argc == 2);
+  res = strtol (argv[1], &endp, 10);
+  assert (argv[1] != endp);
+  assert (0 <= res);
+  assert (res <= INT_MAX);
+  assert (errno != ERANGE);
+  return res;
+}
+
 int
 main (int argc, const char **argv)
 {
-  char *endp;
-  if (argc != 2)
-    abort ();
-  yylval = strtol (argv[1], &endp, 10);
-  if (! (argv[1] != endp
-	 && 0 <= yylval && yylval <= INT_MAX
-	 && errno != ERANGE))
-    abort ();
-  yydebug = 1;
-  return yyparse ();
+  YYSTYPE yylval_init = get_args (argc, argv);
+  int status = 0;
+  int count;
+]m4_bmatch([$2], [api.push-pull both],
+[[  yypstate *ps = yypstate_new ();
+]])[  yydebug = 1;
+  for (count = 0; count < 2; ++count)
+    {
+      int new_status;
+      yylval = yylval_init;
+      new_status = ]m4_bmatch([$2], [api.push-pull both],
+                              [[yypull_parse (ps)]],
+                              [[yyparse ()]])[;
+      if (count == 0)
+        status = new_status;
+      else
+        assert (new_status == status);
+    }]m4_bmatch([$2], [api.push-pull both],[[
+  yypstate_delete (ps);]])[
+  return status;
 }
 ]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_OPTION_POPDEFS([$2])
+AT_BISON_CHECK([-o input.c input.y])
 AT_COMPILE([input])
 ])
 
@@ -444,20 +465,40 @@
 
 AT_SETUP([Exploding the Stack Size with Alloca])
 
-AT_DATA_STACK_TORTURE([[
+m4_pushdef([AT_USE_ALLOCA], [[
 #if (defined __GNUC__ || defined __BUILTIN_VA_ARG_INCR \
      || defined _AIX || defined _MSC_VER || defined _ALLOCA_H)
 # define YYSTACK_USE_ALLOCA 1
 #endif
 ]])
 
+AT_DATA_STACK_TORTURE([AT_USE_ALLOCA])
+
 # Below the limit of 200.
-AT_PARSER_CHECK([./input 20], 0, [], [ignore])
+AT_PARSER_CHECK([./input 20], 0, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
 # Two enlargements: 2 * 2 * 200.
-AT_PARSER_CHECK([./input 900], 0, [], [ignore])
+AT_PARSER_CHECK([./input 900], 0, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
 # Fails: beyond the limit of 10,000 (which we don't reach anyway since we
 # multiply by two starting at 200 => 5120 is the last possible).
-AT_PARSER_CHECK([./input 10000], 2, [], [ignore])
+AT_PARSER_CHECK([./input 10000], 2, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
+
+# The push parser can't use alloca since the stacks can't be locals.  This test
+# just helps guarantee we don't let the YYSTACK_USE_ALLOCA feature affect
+# push parsers.
+AT_DATA_STACK_TORTURE([AT_USE_ALLOCA],
+[[%define api.push-pull both
+]])
+AT_PARSER_CHECK([./input 20], 0, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
+AT_PARSER_CHECK([./input 900], 0, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
+AT_PARSER_CHECK([./input 10000], 2, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
+
+m4_popdef([AT_USE_ALLOCA])
 
 AT_CLEANUP
 
@@ -470,14 +511,31 @@
 
 AT_SETUP([Exploding the Stack Size with Malloc])
 
-AT_DATA_STACK_TORTURE([[#define YYSTACK_USE_ALLOCA 0]])
+m4_pushdef([AT_USE_ALLOCA], [[#define YYSTACK_USE_ALLOCA 0]])
+
+AT_DATA_STACK_TORTURE([AT_USE_ALLOCA])
 
 # Below the limit of 200.
-AT_PARSER_CHECK([./input 20], 0, [], [ignore])
+AT_PARSER_CHECK([./input 20], 0, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
 # Two enlargements: 2 * 2 * 200.
-AT_PARSER_CHECK([./input 900], 0, [], [ignore])
+AT_PARSER_CHECK([./input 900], 0, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
 # Fails: beyond the limit of 10,000 (which we don't reach anyway since we
 # multiply by two starting at 200 => 5120 is the possible).
-AT_PARSER_CHECK([./input 10000], 2, [], [ignore])
+AT_PARSER_CHECK([./input 10000], 2, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
+
+AT_DATA_STACK_TORTURE([AT_USE_ALLOCA],
+[[%define api.push-pull both
+]])
+AT_PARSER_CHECK([./input 20], 0, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
+AT_PARSER_CHECK([./input 900], 0, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
+AT_PARSER_CHECK([./input 10000], 2, [], [ignore],
+                [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
+
+m4_popdef([AT_USE_ALLOCA])
 
 AT_CLEANUP